summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNico Weber <thakis@chromium.org>2015-08-04 12:19:10 -0700
committerNico Weber <thakis@chromium.org>2015-08-04 12:19:10 -0700
commitb048f791a15f2da781a01eba5b09eb9d389f9c11 (patch)
tree6850a73c18bbc41eaf4b1fdc6b3c96646d45587b
parentc8eeed31f217d99a706b0cbf5e4ce0bcc12beb64 (diff)
downloadpdfium-b048f791a15f2da781a01eba5b09eb9d389f9c11.tar.xz
clang-format all pdfium code.
No behavior change. Generated by: find . -name '*.cpp' -o -name '*.h' | \ grep -E -v 'third_party|thirdparties|lpng_v163' | \ xargs ../../buildtools/mac/clang-format -i See thread "tabs vs spaces" on pdfium@googlegroups.com for discussion. BUG=none R=tsepez@chromium.org Review URL: https://codereview.chromium.org/1265503005 .
-rw-r--r--core/include/fdrm/fx_crypt.h38
-rw-r--r--core/include/fpdfapi/fpdf_module.h145
-rw-r--r--core/include/fpdfapi/fpdf_objects.h884
-rw-r--r--core/include/fpdfapi/fpdf_page.h308
-rw-r--r--core/include/fpdfapi/fpdf_pageobj.h792
-rw-r--r--core/include/fpdfapi/fpdf_parser.h1285
-rw-r--r--core/include/fpdfapi/fpdf_render.h433
-rw-r--r--core/include/fpdfapi/fpdf_resource.h1323
-rw-r--r--core/include/fpdfapi/fpdf_serial.h138
-rw-r--r--core/include/fpdfdoc/fpdf_ap.h138
-rw-r--r--core/include/fpdfdoc/fpdf_doc.h2079
-rw-r--r--core/include/fpdfdoc/fpdf_tagged.h120
-rw-r--r--core/include/fpdfdoc/fpdf_vt.h603
-rw-r--r--core/include/fpdftext/fpdf_text.h229
-rw-r--r--core/include/fxcodec/fx_codec.h512
-rw-r--r--core/include/fxcodec/fx_codec_def.h118
-rw-r--r--core/include/fxcodec/fx_codec_flate.h6
-rw-r--r--core/include/fxcodec/fx_codec_provider.h73
-rw-r--r--core/include/fxcrt/fx_arb.h19
-rw-r--r--core/include/fxcrt/fx_basic.h2006
-rw-r--r--core/include/fxcrt/fx_coordinates.h1491
-rw-r--r--core/include/fxcrt/fx_ext.h98
-rw-r--r--core/include/fxcrt/fx_memory.h114
-rw-r--r--core/include/fxcrt/fx_stream.h227
-rw-r--r--core/include/fxcrt/fx_string.h1203
-rw-r--r--core/include/fxcrt/fx_system.h240
-rw-r--r--core/include/fxcrt/fx_ucd.h161
-rw-r--r--core/include/fxcrt/fx_xml.h306
-rw-r--r--core/include/fxge/fpf.h82
-rw-r--r--core/include/fxge/fx_dib.h1068
-rw-r--r--core/include/fxge/fx_font.h703
-rw-r--r--core/include/fxge/fx_freetype.h124
-rw-r--r--core/include/fxge/fx_ge.h1170
-rw-r--r--core/include/fxge/fx_ge_apple.h25
-rw-r--r--core/include/fxge/fx_ge_win32.h111
-rw-r--r--core/src/fdrm/crypto/fx_crypt.cpp453
-rw-r--r--core/src/fdrm/crypto/fx_crypt_aes.cpp1624
-rw-r--r--core/src/fdrm/crypto/fx_crypt_sha.cpp1303
-rw-r--r--core/src/fpdfapi/fpdf_basic_module.cpp166
-rw-r--r--core/src/fpdfapi/fpdf_cmaps/CNS1/Adobe-CNS1-UCS2_5.cpp4505
-rw-r--r--core/src/fpdfapi/fpdf_cmaps/CNS1/CNS-EUC-H_0.cpp225
-rw-r--r--core/src/fpdfapi/fpdf_cmaps/CNS1/CNS-EUC-V_0.cpp247
-rw-r--r--core/src/fpdfapi/fpdf_cmaps/CNS1/ETen-B5-V_0.cpp10
-rw-r--r--core/src/fpdfapi/fpdf_cmaps/CNS1/HKscs-B5-V_5.cpp10
-rw-r--r--core/src/fpdfapi/fpdf_cmaps/CNS1/UniCNS-UCS2-V_3.cpp10
-rw-r--r--core/src/fpdfapi/fpdf_cmaps/CNS1/UniCNS-UTF16-H_0.cpp6875
-rw-r--r--core/src/fpdfapi/fpdf_cmaps/CNS1/cmaps_cns1.cpp59
-rw-r--r--core/src/fpdfapi/fpdf_cmaps/GB1/Adobe-GB1-UCS2_5.cpp7151
-rw-r--r--core/src/fpdfapi/fpdf_cmaps/GB1/GBK2K-H_5.cpp791
-rw-r--r--core/src/fpdfapi/fpdf_cmaps/GB1/cmaps_gb1.cpp58
-rw-r--r--core/src/fpdfapi/fpdf_cmaps/Japan1/Adobe-Japan1-UCS2_4.cpp3647
-rw-r--r--core/src/fpdfapi/fpdf_cmaps/Japan1/UniJIS-UCS2-HW-H_4.cpp4
-rw-r--r--core/src/fpdfapi/fpdf_cmaps/Japan1/UniJIS-UCS2-H_4.cpp4615
-rw-r--r--core/src/fpdfapi/fpdf_cmaps/Japan1/UniJIS-UCS2-V_4.cpp119
-rw-r--r--core/src/fpdfapi/fpdf_cmaps/Japan1/UniJIS-UTF16-H_5.cpp6254
-rw-r--r--core/src/fpdfapi/fpdf_cmaps/Japan1/UniJIS-UTF16-V_5.cpp136
-rw-r--r--core/src/fpdfapi/fpdf_cmaps/Japan1/cmaps_japan1.cpp75
-rw-r--r--core/src/fpdfapi/fpdf_cmaps/Korea1/Adobe-Korea1-UCS2_2.cpp4334
-rw-r--r--core/src/fpdfapi/fpdf_cmaps/Korea1/KSC-EUC-V_0.cpp12
-rw-r--r--core/src/fpdfapi/fpdf_cmaps/Korea1/KSCms-UHC-HW-V_1.cpp12
-rw-r--r--core/src/fpdfapi/fpdf_cmaps/Korea1/KSCms-UHC-V_1.cpp12
-rw-r--r--core/src/fpdfapi/fpdf_cmaps/Korea1/UniKS-UTF16-H_0.cpp76
-rw-r--r--core/src/fpdfapi/fpdf_cmaps/Korea1/cmaps_korea1.cpp50
-rw-r--r--core/src/fpdfapi/fpdf_cmaps/cmap_int.h18
-rw-r--r--core/src/fpdfapi/fpdf_cmaps/fpdf_cmaps.cpp316
-rw-r--r--core/src/fpdfapi/fpdf_edit/editint.h73
-rw-r--r--core/src/fpdfapi/fpdf_edit/fpdf_edit_content.cpp283
-rw-r--r--core/src/fpdfapi/fpdf_edit/fpdf_edit_create.cpp3920
-rw-r--r--core/src/fpdfapi/fpdf_edit/fpdf_edit_doc.cpp2140
-rw-r--r--core/src/fpdfapi/fpdf_edit/fpdf_edit_image.cpp682
-rw-r--r--core/src/fpdfapi/fpdf_font/font_int.h303
-rw-r--r--core/src/fpdfapi/fpdf_font/fpdf_font.cpp3359
-rw-r--r--core/src/fpdfapi/fpdf_font/fpdf_font_charset.cpp2305
-rw-r--r--core/src/fpdfapi/fpdf_font/fpdf_font_cid.cpp2986
-rw-r--r--core/src/fpdfapi/fpdf_font/ttgsubtable.cpp774
-rw-r--r--core/src/fpdfapi/fpdf_font/ttgsubtable.h763
-rw-r--r--core/src/fpdfapi/fpdf_page/fpdf_page.cpp1892
-rw-r--r--core/src/fpdfapi/fpdf_page/fpdf_page_colors.cpp2799
-rw-r--r--core/src/fpdfapi/fpdf_page/fpdf_page_doc.cpp1036
-rw-r--r--core/src/fpdfapi/fpdf_page/fpdf_page_func.cpp1694
-rw-r--r--core/src/fpdfapi/fpdf_page/fpdf_page_graph_state.cpp1335
-rw-r--r--core/src/fpdfapi/fpdf_page/fpdf_page_image.cpp163
-rw-r--r--core/src/fpdfapi/fpdf_page/fpdf_page_parser.cpp3007
-rw-r--r--core/src/fpdfapi/fpdf_page/fpdf_page_parser_old.cpp2124
-rw-r--r--core/src/fpdfapi/fpdf_page/fpdf_page_path.cpp72
-rw-r--r--core/src/fpdfapi/fpdf_page/fpdf_page_pattern.cpp515
-rw-r--r--core/src/fpdfapi/fpdf_page/pageint.h947
-rw-r--r--core/src/fpdfapi/fpdf_parser/filters_int.h231
-rw-r--r--core/src/fpdfapi/fpdf_parser/fpdf_parser_decode.cpp1035
-rw-r--r--core/src/fpdfapi/fpdf_parser/fpdf_parser_decode_embeddertest.cpp73
-rw-r--r--core/src/fpdfapi/fpdf_parser/fpdf_parser_document.cpp650
-rw-r--r--core/src/fpdfapi/fpdf_parser/fpdf_parser_encrypt.cpp1843
-rw-r--r--core/src/fpdfapi/fpdf_parser/fpdf_parser_fdf.cpp303
-rw-r--r--core/src/fpdfapi/fpdf_parser/fpdf_parser_filters.cpp1754
-rw-r--r--core/src/fpdfapi/fpdf_parser/fpdf_parser_objects.cpp2389
-rw-r--r--core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp8252
-rw-r--r--core/src/fpdfapi/fpdf_parser/fpdf_parser_parser_embeddertest.cpp3
-rw-r--r--core/src/fpdfapi/fpdf_parser/fpdf_parser_utility.cpp820
-rw-r--r--core/src/fpdfapi/fpdf_render/fpdf_render.cpp2622
-rw-r--r--core/src/fpdfapi/fpdf_render/fpdf_render_cache.cpp629
-rw-r--r--core/src/fpdfapi/fpdf_render/fpdf_render_image.cpp2097
-rw-r--r--core/src/fpdfapi/fpdf_render/fpdf_render_loadimage.cpp2939
-rw-r--r--core/src/fpdfapi/fpdf_render/fpdf_render_pattern.cpp2197
-rw-r--r--core/src/fpdfapi/fpdf_render/fpdf_render_text.cpp1422
-rw-r--r--core/src/fpdfapi/fpdf_render/render_int.h969
-rw-r--r--core/src/fpdfdoc/doc_action.cpp640
-rw-r--r--core/src/fpdfdoc/doc_annot.cpp659
-rw-r--r--core/src/fpdfdoc/doc_ap.cpp1616
-rw-r--r--core/src/fpdfdoc/doc_basic.cpp1002
-rw-r--r--core/src/fpdfdoc/doc_bookmark.cpp151
-rw-r--r--core/src/fpdfdoc/doc_form.cpp3024
-rw-r--r--core/src/fpdfdoc/doc_formcontrol.cpp862
-rw-r--r--core/src/fpdfdoc/doc_formfield.cpp2000
-rw-r--r--core/src/fpdfdoc/doc_link.cpp161
-rw-r--r--core/src/fpdfdoc/doc_metadata.cpp247
-rw-r--r--core/src/fpdfdoc/doc_ocg.cpp522
-rw-r--r--core/src/fpdfdoc/doc_tagged.cpp803
-rw-r--r--core/src/fpdfdoc/doc_utils.cpp1408
-rw-r--r--core/src/fpdfdoc/doc_utils.h74
-rw-r--r--core/src/fpdfdoc/doc_viewerPreferences.cpp86
-rw-r--r--core/src/fpdfdoc/doc_vt.cpp3530
-rw-r--r--core/src/fpdfdoc/doc_vtmodule.cpp10
-rw-r--r--core/src/fpdfdoc/pdf_vt.h1078
-rw-r--r--core/src/fpdfdoc/tagged_int.h154
-rw-r--r--core/src/fpdftext/fpdf_text.cpp1452
-rw-r--r--core/src/fpdftext/fpdf_text_int.cpp5208
-rw-r--r--core/src/fpdftext/fpdf_text_search.cpp589
-rw-r--r--core/src/fpdftext/text_int.h388
-rw-r--r--core/src/fpdftext/txtproc.h119
-rw-r--r--core/src/fpdftext/unicodenormalization.cpp107
-rw-r--r--core/src/fpdftext/unicodenormalizationdata.cpp12906
-rw-r--r--core/src/fxcodec/codec/codec_int.h539
-rw-r--r--core/src/fxcodec/codec/fx_codec.cpp725
-rw-r--r--core/src/fxcodec/codec/fx_codec_fax.cpp1660
-rw-r--r--core/src/fxcodec/codec/fx_codec_flate.cpp1813
-rw-r--r--core/src/fxcodec/codec/fx_codec_icc.cpp3220
-rw-r--r--core/src/fxcodec/codec/fx_codec_jbig.cpp371
-rw-r--r--core/src/fxcodec/codec/fx_codec_jbig_enc.cpp5
-rw-r--r--core/src/fxcodec/codec/fx_codec_jpeg.cpp1249
-rw-r--r--core/src/fxcodec/codec/fx_codec_jpx_opj.cpp1552
-rw-r--r--core/src/fxcodec/codec/fx_codec_jpx_unittest.cpp748
-rw-r--r--core/src/fxcodec/jbig2/JBig2_ArithDecoder.h197
-rw-r--r--core/src/fxcodec/jbig2/JBig2_ArithIntDecoder.cpp165
-rw-r--r--core/src/fxcodec/jbig2/JBig2_ArithIntDecoder.h36
-rw-r--r--core/src/fxcodec/jbig2/JBig2_ArithQe.h10
-rw-r--r--core/src/fxcodec/jbig2/JBig2_BitStream.h449
-rw-r--r--core/src/fxcodec/jbig2/JBig2_Context.cpp3439
-rw-r--r--core/src/fxcodec/jbig2/JBig2_Context.h174
-rw-r--r--core/src/fxcodec/jbig2/JBig2_Define.h41
-rw-r--r--core/src/fxcodec/jbig2/JBig2_GeneralDecoder.cpp8407
-rw-r--r--core/src/fxcodec/jbig2/JBig2_GeneralDecoder.h541
-rw-r--r--core/src/fxcodec/jbig2/JBig2_HuffmanDecoder.cpp87
-rw-r--r--core/src/fxcodec/jbig2/JBig2_HuffmanDecoder.h18
-rw-r--r--core/src/fxcodec/jbig2/JBig2_HuffmanTable.cpp333
-rw-r--r--core/src/fxcodec/jbig2/JBig2_HuffmanTable.h44
-rw-r--r--core/src/fxcodec/jbig2/JBig2_HuffmanTable_Standard.h268
-rw-r--r--core/src/fxcodec/jbig2/JBig2_Image.cpp3161
-rw-r--r--core/src/fxcodec/jbig2/JBig2_Image.h95
-rw-r--r--core/src/fxcodec/jbig2/JBig2_List.h84
-rw-r--r--core/src/fxcodec/jbig2/JBig2_Module.h29
-rw-r--r--core/src/fxcodec/jbig2/JBig2_Object.cpp122
-rw-r--r--core/src/fxcodec/jbig2/JBig2_Object.h54
-rw-r--r--core/src/fxcodec/jbig2/JBig2_Page.h14
-rw-r--r--core/src/fxcodec/jbig2/JBig2_PatternDict.cpp22
-rw-r--r--core/src/fxcodec/jbig2/JBig2_PatternDict.h17
-rw-r--r--core/src/fxcodec/jbig2/JBig2_Segment.cpp80
-rw-r--r--core/src/fxcodec/jbig2/JBig2_Segment.h90
-rw-r--r--core/src/fxcodec/jbig2/JBig2_SymbolDict.cpp78
-rw-r--r--core/src/fxcodec/jbig2/JBig2_SymbolDict.h24
-rw-r--r--core/src/fxcrt/extension.h771
-rw-r--r--core/src/fxcrt/fx_arabic.cpp136
-rw-r--r--core/src/fxcrt/fx_arabic.h35
-rw-r--r--core/src/fxcrt/fx_basic_array.cpp608
-rw-r--r--core/src/fxcrt/fx_basic_bstring.cpp2091
-rw-r--r--core/src/fxcrt/fx_basic_bstring_unittest.cpp748
-rw-r--r--core/src/fxcrt/fx_basic_buffer.cpp749
-rw-r--r--core/src/fxcrt/fx_basic_coords.cpp1070
-rw-r--r--core/src/fxcrt/fx_basic_gcc.cpp361
-rw-r--r--core/src/fxcrt/fx_basic_list.cpp225
-rw-r--r--core/src/fxcrt/fx_basic_maps.cpp1158
-rw-r--r--core/src/fxcrt/fx_basic_memmgr.cpp92
-rw-r--r--core/src/fxcrt/fx_basic_memmgr_unittest.cpp55
-rw-r--r--core/src/fxcrt/fx_basic_plex.cpp31
-rw-r--r--core/src/fxcrt/fx_basic_utf.cpp145
-rw-r--r--core/src/fxcrt/fx_basic_util.cpp760
-rw-r--r--core/src/fxcrt/fx_basic_wstring.cpp2027
-rw-r--r--core/src/fxcrt/fx_basic_wstring_unittest.cpp758
-rw-r--r--core/src/fxcrt/fx_extension.cpp481
-rw-r--r--core/src/fxcrt/fx_ucddata.cpp15120
-rw-r--r--core/src/fxcrt/fx_unicode.cpp90
-rw-r--r--core/src/fxcrt/fx_xml_composer.cpp57
-rw-r--r--core/src/fxcrt/fx_xml_parser.cpp1573
-rw-r--r--core/src/fxcrt/fxcrt_platforms.cpp335
-rw-r--r--core/src/fxcrt/fxcrt_platforms.h46
-rw-r--r--core/src/fxcrt/fxcrt_posix.cpp337
-rw-r--r--core/src/fxcrt/fxcrt_posix.h46
-rw-r--r--core/src/fxcrt/fxcrt_windows.cpp382
-rw-r--r--core/src/fxcrt/fxcrt_windows.h42
-rw-r--r--core/src/fxcrt/plex.h11
-rw-r--r--core/src/fxcrt/xml_int.h253
-rw-r--r--core/src/fxge/agg/include/fx_agg_driver.h245
-rw-r--r--core/src/fxge/agg/src/fx_agg_driver.cpp3149
-rw-r--r--core/src/fxge/android/fpf_skiafont.cpp378
-rw-r--r--core/src/fxge/android/fpf_skiafont.h84
-rw-r--r--core/src/fxge/android/fpf_skiafontmgr.cpp915
-rw-r--r--core/src/fxge/android/fpf_skiafontmgr.h182
-rw-r--r--core/src/fxge/android/fpf_skiamodule.cpp42
-rw-r--r--core/src/fxge/android/fpf_skiamodule.h18
-rw-r--r--core/src/fxge/android/fx_android_font.cpp131
-rw-r--r--core/src/fxge/android/fx_android_font.h51
-rw-r--r--core/src/fxge/android/fx_android_imp.cpp34
-rw-r--r--core/src/fxge/apple/apple_int.h437
-rw-r--r--core/src/fxge/apple/fx_apple_platform.cpp280
-rw-r--r--core/src/fxge/apple/fx_mac_imp.cpp149
-rw-r--r--core/src/fxge/apple/fx_quartz_device.cpp1994
-rw-r--r--core/src/fxge/dib/dib_int.h153
-rw-r--r--core/src/fxge/dib/fx_dib_composite.cpp9220
-rw-r--r--core/src/fxge/dib/fx_dib_convert.cpp1952
-rw-r--r--core/src/fxge/dib/fx_dib_engine.cpp1660
-rw-r--r--core/src/fxge/dib/fx_dib_main.cpp3149
-rw-r--r--core/src/fxge/dib/fx_dib_transform.cpp1614
-rw-r--r--core/src/fxge/ge/fx_ge.cpp102
-rw-r--r--core/src/fxge/ge/fx_ge_device.cpp759
-rw-r--r--core/src/fxge/ge/fx_ge_font.cpp768
-rw-r--r--core/src/fxge/ge/fx_ge_fontmap.cpp2516
-rw-r--r--core/src/fxge/ge/fx_ge_linux.cpp376
-rw-r--r--core/src/fxge/ge/fx_ge_path.cpp1236
-rw-r--r--core/src/fxge/ge/fx_ge_ps.cpp1240
-rw-r--r--core/src/fxge/ge/fx_ge_text.cpp3438
-rw-r--r--core/src/fxge/ge/text_int.h162
-rw-r--r--core/src/fxge/skia/fx_skia_blitter_new.cpp3217
-rw-r--r--core/src/fxge/skia/fx_skia_blitter_new.h726
-rw-r--r--core/src/fxge/skia/fx_skia_device.cpp984
-rw-r--r--core/src/fxge/skia/fx_skia_device.h214
-rw-r--r--core/src/fxge/win32/dwrite_int.h73
-rw-r--r--core/src/fxge/win32/fx_win32_device.cpp2256
-rw-r--r--core/src/fxge/win32/fx_win32_dib.cpp493
-rw-r--r--core/src/fxge/win32/fx_win32_dwrite.cpp746
-rw-r--r--core/src/fxge/win32/fx_win32_gdipext.cpp2465
-rw-r--r--core/src/fxge/win32/fx_win32_print.cpp761
-rw-r--r--core/src/fxge/win32/win32_int.h549
-rw-r--r--fpdfsdk/include/formfiller/FFL_CBA_Fontmap.h70
-rw-r--r--fpdfsdk/include/formfiller/FFL_CheckBox.h34
-rw-r--r--fpdfsdk/include/formfiller/FFL_ComboBox.h103
-rw-r--r--fpdfsdk/include/formfiller/FFL_FormFiller.h309
-rw-r--r--fpdfsdk/include/formfiller/FFL_IFormFiller.h206
-rw-r--r--fpdfsdk/include/formfiller/FFL_ListBox.h71
-rw-r--r--fpdfsdk/include/formfiller/FFL_Notify.h93
-rw-r--r--fpdfsdk/include/formfiller/FFL_PushButton.h22
-rw-r--r--fpdfsdk/include/formfiller/FFL_RadioButton.h27
-rw-r--r--fpdfsdk/include/formfiller/FFL_TextField.h103
-rw-r--r--fpdfsdk/include/formfiller/FFL_Utils.h15
-rw-r--r--fpdfsdk/include/fsdk_actionhandler.h149
-rw-r--r--fpdfsdk/include/fsdk_annothandler.h548
-rw-r--r--fpdfsdk/include/fsdk_baseannot.h263
-rw-r--r--fpdfsdk/include/fsdk_baseform.h494
-rw-r--r--fpdfsdk/include/fsdk_common.h60
-rw-r--r--fpdfsdk/include/fsdk_define.h41
-rw-r--r--fpdfsdk/include/fsdk_mgr.h745
-rw-r--r--fpdfsdk/include/fsdk_rendercontext.h42
-rw-r--r--fpdfsdk/include/fx_systemhandler.h151
-rw-r--r--fpdfsdk/include/fxedit/fx_edit.h936
-rw-r--r--fpdfsdk/include/fxedit/fxet_edit.h1430
-rw-r--r--fpdfsdk/include/fxedit/fxet_list.h624
-rw-r--r--fpdfsdk/include/javascript/Consts.h119
-rw-r--r--fpdfsdk/include/javascript/Document.h590
-rw-r--r--fpdfsdk/include/javascript/Field.h929
-rw-r--r--fpdfsdk/include/javascript/IJavaScript.h224
-rw-r--r--fpdfsdk/include/javascript/Icon.h42
-rw-r--r--fpdfsdk/include/javascript/JS_Context.h210
-rw-r--r--fpdfsdk/include/javascript/JS_Define.h646
-rw-r--r--fpdfsdk/include/javascript/JS_EventHandler.h345
-rw-r--r--fpdfsdk/include/javascript/JS_GlobalData.h143
-rw-r--r--fpdfsdk/include/javascript/JS_Object.h451
-rw-r--r--fpdfsdk/include/javascript/JS_Runtime.h81
-rw-r--r--fpdfsdk/include/javascript/JS_Value.h304
-rw-r--r--fpdfsdk/include/javascript/PublicMethods.h240
-rw-r--r--fpdfsdk/include/javascript/app.h349
-rw-r--r--fpdfsdk/include/javascript/color.h117
-rw-r--r--fpdfsdk/include/javascript/console.h52
-rw-r--r--fpdfsdk/include/javascript/event.h123
-rw-r--r--fpdfsdk/include/javascript/global.h133
-rw-r--r--fpdfsdk/include/javascript/report.h40
-rw-r--r--fpdfsdk/include/javascript/resource.h36
-rw-r--r--fpdfsdk/include/javascript/util.h76
-rw-r--r--fpdfsdk/include/jsapi/fxjs_v8.h293
-rw-r--r--fpdfsdk/include/pdfwindow/PWL_Button.h21
-rw-r--r--fpdfsdk/include/pdfwindow/PWL_Caret.h72
-rw-r--r--fpdfsdk/include/pdfwindow/PWL_ComboBox.h148
-rw-r--r--fpdfsdk/include/pdfwindow/PWL_Edit.h276
-rw-r--r--fpdfsdk/include/pdfwindow/PWL_EditCtrl.h315
-rw-r--r--fpdfsdk/include/pdfwindow/PWL_FontMap.h207
-rw-r--r--fpdfsdk/include/pdfwindow/PWL_Icon.h73
-rw-r--r--fpdfsdk/include/pdfwindow/PWL_IconList.h202
-rw-r--r--fpdfsdk/include/pdfwindow/PWL_Label.h58
-rw-r--r--fpdfsdk/include/pdfwindow/PWL_ListBox.h180
-rw-r--r--fpdfsdk/include/pdfwindow/PWL_ListCtrl.h66
-rw-r--r--fpdfsdk/include/pdfwindow/PWL_Note.h585
-rw-r--r--fpdfsdk/include/pdfwindow/PWL_ScrollBar.h273
-rw-r--r--fpdfsdk/include/pdfwindow/PWL_Signature.h74
-rw-r--r--fpdfsdk/include/pdfwindow/PWL_SpecialButton.h61
-rw-r--r--fpdfsdk/include/pdfwindow/PWL_Utils.h598
-rw-r--r--fpdfsdk/include/pdfwindow/PWL_Wnd.h829
-rw-r--r--fpdfsdk/src/formfiller/FFL_CBA_Fontmap.cpp503
-rw-r--r--fpdfsdk/src/formfiller/FFL_CheckBox.cpp213
-rw-r--r--fpdfsdk/src/formfiller/FFL_ComboBox.cpp528
-rw-r--r--fpdfsdk/src/formfiller/FFL_FormFiller.cpp1116
-rw-r--r--fpdfsdk/src/formfiller/FFL_IFormFiller.cpp1467
-rw-r--r--fpdfsdk/src/formfiller/FFL_ListBox.cpp431
-rw-r--r--fpdfsdk/src/formfiller/FFL_Notify.cpp230
-rw-r--r--fpdfsdk/src/formfiller/FFL_PushButton.cpp45
-rw-r--r--fpdfsdk/src/formfiller/FFL_RadioButton.cpp205
-rw-r--r--fpdfsdk/src/formfiller/FFL_TextField.cpp473
-rw-r--r--fpdfsdk/src/formfiller/FFL_Utils.cpp173
-rw-r--r--fpdfsdk/src/fpdf_dataavail.cpp240
-rw-r--r--fpdfsdk/src/fpdf_dataavail_embeddertest.cpp3
-rw-r--r--fpdfsdk/src/fpdf_ext.cpp378
-rw-r--r--fpdfsdk/src/fpdf_flatten.cpp965
-rw-r--r--fpdfsdk/src/fpdf_progressive.cpp134
-rw-r--r--fpdfsdk/src/fpdf_searchex.cpp12
-rw-r--r--fpdfsdk/src/fpdf_sysfontinfo.cpp286
-rw-r--r--fpdfsdk/src/fpdf_transformpage.cpp584
-rw-r--r--fpdfsdk/src/fpdfdoc.cpp490
-rw-r--r--fpdfsdk/src/fpdfdoc_embeddertest.cpp3
-rw-r--r--fpdfsdk/src/fpdfeditimg.cpp114
-rw-r--r--fpdfsdk/src/fpdfeditpage.cpp562
-rw-r--r--fpdfsdk/src/fpdfformfill.cpp500
-rw-r--r--fpdfsdk/src/fpdfformfill_embeddertest.cpp4
-rw-r--r--fpdfsdk/src/fpdfppo.cpp709
-rw-r--r--fpdfsdk/src/fpdfsave.cpp119
-rw-r--r--fpdfsdk/src/fpdftext.cpp450
-rw-r--r--fpdfsdk/src/fpdftext_embeddertest.cpp71
-rw-r--r--fpdfsdk/src/fpdfview.cpp1510
-rw-r--r--fpdfsdk/src/fpdfview_embeddertest.cpp15
-rw-r--r--fpdfsdk/src/fsdk_actionhandler.cpp1450
-rw-r--r--fpdfsdk/src/fsdk_annothandler.cpp1382
-rw-r--r--fpdfsdk/src/fsdk_baseannot.cpp1603
-rw-r--r--fpdfsdk/src/fsdk_baseform.cpp4267
-rw-r--r--fpdfsdk/src/fsdk_mgr.cpp1790
-rw-r--r--fpdfsdk/src/fsdk_rendercontext.cpp53
-rw-r--r--fpdfsdk/src/fxedit/fxet_ap.cpp392
-rw-r--r--fpdfsdk/src/fxedit/fxet_edit.cpp5306
-rw-r--r--fpdfsdk/src/fxedit/fxet_list.cpp1511
-rw-r--r--fpdfsdk/src/fxedit/fxet_module.cpp37
-rw-r--r--fpdfsdk/src/fxedit/fxet_pageobjs.cpp1243
-rw-r--r--fpdfsdk/src/javascript/Consts.cpp373
-rw-r--r--fpdfsdk/src/javascript/Document.cpp2834
-rw-r--r--fpdfsdk/src/javascript/Field.cpp6336
-rw-r--r--fpdfsdk/src/javascript/Icon.cpp51
-rw-r--r--fpdfsdk/src/javascript/JS_Context.cpp474
-rw-r--r--fpdfsdk/src/javascript/JS_EventHandler.cpp927
-rw-r--r--fpdfsdk/src/javascript/JS_GlobalData.cpp840
-rw-r--r--fpdfsdk/src/javascript/JS_Object.cpp171
-rw-r--r--fpdfsdk/src/javascript/JS_Runtime.cpp484
-rw-r--r--fpdfsdk/src/javascript/JS_Value.cpp784
-rw-r--r--fpdfsdk/src/javascript/PublicMethods.cpp3818
-rw-r--r--fpdfsdk/src/javascript/app.cpp1529
-rw-r--r--fpdfsdk/src/javascript/color.cpp367
-rw-r--r--fpdfsdk/src/javascript/console.cpp60
-rw-r--r--fpdfsdk/src/javascript/event.cpp590
-rw-r--r--fpdfsdk/src/javascript/global.cpp857
-rw-r--r--fpdfsdk/src/javascript/report.cpp26
-rw-r--r--fpdfsdk/src/javascript/resource.cpp64
-rw-r--r--fpdfsdk/src/javascript/util.cpp960
-rw-r--r--fpdfsdk/src/jsapi/fxjs_v8.cpp2029
-rw-r--r--fpdfsdk/src/pdfwindow/PWL_Button.cpp46
-rw-r--r--fpdfsdk/src/pdfwindow/PWL_Caret.cpp292
-rw-r--r--fpdfsdk/src/pdfwindow/PWL_ComboBox.cpp886
-rw-r--r--fpdfsdk/src/pdfwindow/PWL_Edit.cpp2170
-rw-r--r--fpdfsdk/src/pdfwindow/PWL_EditCtrl.cpp985
-rw-r--r--fpdfsdk/src/pdfwindow/PWL_FontMap.cpp835
-rw-r--r--fpdfsdk/src/pdfwindow/PWL_Icon.cpp370
-rw-r--r--fpdfsdk/src/pdfwindow/PWL_IconList.cpp893
-rw-r--r--fpdfsdk/src/pdfwindow/PWL_Label.cpp231
-rw-r--r--fpdfsdk/src/pdfwindow/PWL_ListBox.cpp922
-rw-r--r--fpdfsdk/src/pdfwindow/PWL_ListCtrl.cpp305
-rw-r--r--fpdfsdk/src/pdfwindow/PWL_Note.cpp2869
-rw-r--r--fpdfsdk/src/pdfwindow/PWL_ScrollBar.cpp2158
-rw-r--r--fpdfsdk/src/pdfwindow/PWL_Signature.cpp274
-rw-r--r--fpdfsdk/src/pdfwindow/PWL_SpecialButton.cpp99
-rw-r--r--fpdfsdk/src/pdfwindow/PWL_Utils.cpp6294
-rw-r--r--fpdfsdk/src/pdfwindow/PWL_Wnd.cpp1674
-rw-r--r--fpdfsdk/src/resource.h8
-rw-r--r--public/fpdf_dataavail.h217
-rw-r--r--public/fpdf_doc.h211
-rw-r--r--public/fpdf_edit.h153
-rw-r--r--public/fpdf_ext.h114
-rw-r--r--public/fpdf_flatten.h22
-rw-r--r--public/fpdf_formfill.h1488
-rw-r--r--public/fpdf_fwlevent.h193
-rw-r--r--public/fpdf_ppo.h15
-rw-r--r--public/fpdf_progressive.h122
-rw-r--r--public/fpdf_save.h72
-rw-r--r--public/fpdf_searchex.h9
-rw-r--r--public/fpdf_sysfontinfo.h372
-rw-r--r--public/fpdf_text.h262
-rw-r--r--public/fpdf_transformpage.h85
-rw-r--r--public/fpdfview.h575
-rw-r--r--samples/image_diff_png.h6
-rw-r--r--testing/embedder_test.cpp80
-rw-r--r--testing/embedder_test.h22
-rw-r--r--testing/embedder_test_mock_delegate.h6
-rw-r--r--testing/embedder_test_timer_handling_delegate.h8
-rw-r--r--testing/fx_string_testhelpers.h1
404 files changed, 191716 insertions, 178093 deletions
diff --git a/core/include/fdrm/fx_crypt.h b/core/include/fdrm/fx_crypt.h
index f820999b28..e3b21c5175 100644
--- a/core/include/fdrm/fx_crypt.h
+++ b/core/include/fdrm/fx_crypt.h
@@ -13,13 +13,26 @@
extern "C" {
#endif
-void CRYPT_ArcFourCryptBlock(uint8_t* data, FX_DWORD size, const uint8_t* key, FX_DWORD keylen);
+void CRYPT_ArcFourCryptBlock(uint8_t* data,
+ FX_DWORD size,
+ const uint8_t* key,
+ FX_DWORD keylen);
void CRYPT_ArcFourSetup(void* context, const uint8_t* key, FX_DWORD length);
void CRYPT_ArcFourCrypt(void* context, uint8_t* data, FX_DWORD size);
-void CRYPT_AESSetKey(void* context, FX_DWORD blocklen, const uint8_t* key, FX_DWORD keylen, FX_BOOL bEncrypt);
+void CRYPT_AESSetKey(void* context,
+ FX_DWORD blocklen,
+ const uint8_t* key,
+ FX_DWORD keylen,
+ FX_BOOL bEncrypt);
void CRYPT_AESSetIV(void* context, const uint8_t* iv);
-void CRYPT_AESDecrypt(void* context, uint8_t* dest, const uint8_t* src, FX_DWORD size);
-void CRYPT_AESEncrypt(void* context, uint8_t* dest, const uint8_t* src, FX_DWORD size);
+void CRYPT_AESDecrypt(void* context,
+ uint8_t* dest,
+ const uint8_t* src,
+ FX_DWORD size);
+void CRYPT_AESEncrypt(void* context,
+ uint8_t* dest,
+ const uint8_t* src,
+ FX_DWORD size);
void CRYPT_MD5Generate(const uint8_t* data, FX_DWORD size, uint8_t digest[16]);
void CRYPT_MD5Start(void* context);
void CRYPT_MD5Update(void* context, const uint8_t* data, FX_DWORD size);
@@ -28,19 +41,28 @@ void CRYPT_SHA1Generate(const uint8_t* data, FX_DWORD size, uint8_t digest[20]);
void CRYPT_SHA1Start(void* context);
void CRYPT_SHA1Update(void* context, const uint8_t* data, FX_DWORD size);
void CRYPT_SHA1Finish(void* context, uint8_t digest[20]);
-void CRYPT_SHA256Generate(const uint8_t* data, FX_DWORD size, uint8_t digest[32]);
+void CRYPT_SHA256Generate(const uint8_t* data,
+ FX_DWORD size,
+ uint8_t digest[32]);
void CRYPT_SHA256Start(void* context);
void CRYPT_SHA256Update(void* context, const uint8_t* data, FX_DWORD size);
void CRYPT_SHA256Finish(void* context, uint8_t digest[32]);
void CRYPT_SHA384Start(void* context);
void CRYPT_SHA384Update(void* context, const uint8_t* data, FX_DWORD size);
void CRYPT_SHA384Finish(void* context, uint8_t digest[48]);
-void CRYPT_SHA384Generate(const uint8_t* data, FX_DWORD size, uint8_t digest[48]);
+void CRYPT_SHA384Generate(const uint8_t* data,
+ FX_DWORD size,
+ uint8_t digest[48]);
void CRYPT_SHA512Start(void* context);
void CRYPT_SHA512Update(void* context, const uint8_t* data, FX_DWORD size);
void CRYPT_SHA512Finish(void* context, uint8_t digest[64]);
-void CRYPT_SHA512Generate(const uint8_t* data, FX_DWORD size, uint8_t digest[64]);
-void CRYPT_SetPubKeyDecryptor(FX_BOOL (*func)(const uint8_t* pData, FX_DWORD size, uint8_t* data_buf, FX_DWORD& data_len));
+void CRYPT_SHA512Generate(const uint8_t* data,
+ FX_DWORD size,
+ uint8_t digest[64]);
+void CRYPT_SetPubKeyDecryptor(FX_BOOL (*func)(const uint8_t* pData,
+ FX_DWORD size,
+ uint8_t* data_buf,
+ FX_DWORD& data_len));
#ifdef __cplusplus
};
diff --git a/core/include/fpdfapi/fpdf_module.h b/core/include/fpdfapi/fpdf_module.h
index 5877e11372..bfa051ed4c 100644
--- a/core/include/fpdfapi/fpdf_module.h
+++ b/core/include/fpdfapi/fpdf_module.h
@@ -39,110 +39,95 @@ class IPDF_FontMapper;
class IPDF_PageModule;
class IPDF_RenderModule;
-class CPDF_ModuleMgr
-{
-public:
- static CPDF_ModuleMgr* Get();
- static void Create();
- static void Destroy();
- static const int kFileBufSize = 512;
+class CPDF_ModuleMgr {
+ public:
+ static CPDF_ModuleMgr* Get();
+ static void Create();
+ static void Destroy();
+ static const int kFileBufSize = 512;
- void SetCodecModule(CCodec_ModuleMgr* pModule)
- {
- m_pCodecModule = pModule;
- }
- CCodec_ModuleMgr* GetCodecModule()
- {
- return m_pCodecModule;
- }
+ void SetCodecModule(CCodec_ModuleMgr* pModule) { m_pCodecModule = pModule; }
+ CCodec_ModuleMgr* GetCodecModule() { return m_pCodecModule; }
- void InitPageModule();
+ void InitPageModule();
- void InitRenderModule();
+ void InitRenderModule();
- void SetDownloadCallback(FX_BOOL (*callback)(const FX_CHAR* module_name));
+ void SetDownloadCallback(FX_BOOL (*callback)(const FX_CHAR* module_name));
- FX_BOOL DownloadModule(const FX_CHAR* module_name);
+ FX_BOOL DownloadModule(const FX_CHAR* module_name);
- void NotifyModuleAvailable(const FX_CHAR* module_name);
+ void NotifyModuleAvailable(const FX_CHAR* module_name);
- IPDF_RenderModule* GetRenderModule() const
- {
- return m_pRenderModule.get();
- }
+ IPDF_RenderModule* GetRenderModule() const { return m_pRenderModule.get(); }
- IPDF_PageModule* GetPageModule() const
- {
- return m_pPageModule.get();
- }
+ IPDF_PageModule* GetPageModule() const { return m_pPageModule.get(); }
- void LoadEmbeddedGB1CMaps();
- void LoadEmbeddedCNS1CMaps();
- void LoadEmbeddedJapan1CMaps();
- void LoadEmbeddedKorea1CMaps();
+ void LoadEmbeddedGB1CMaps();
+ void LoadEmbeddedCNS1CMaps();
+ void LoadEmbeddedJapan1CMaps();
+ void LoadEmbeddedKorea1CMaps();
- ICodec_FaxModule* GetFaxModule();
- ICodec_JpegModule* GetJpegModule();
- ICodec_JpxModule* GetJpxModule();
- ICodec_Jbig2Module* GetJbig2Module();
- ICodec_IccModule* GetIccModule();
- ICodec_FlateModule* GetFlateModule();
+ ICodec_FaxModule* GetFaxModule();
+ ICodec_JpegModule* GetJpegModule();
+ ICodec_JpxModule* GetJpxModule();
+ ICodec_Jbig2Module* GetJbig2Module();
+ ICodec_IccModule* GetIccModule();
+ ICodec_FlateModule* GetFlateModule();
- void RegisterSecurityHandler(
- const FX_CHAR* name,
- CPDF_SecurityHandler* (*CreateHandler)(void* param),
- void* param);
+ void RegisterSecurityHandler(
+ const FX_CHAR* name,
+ CPDF_SecurityHandler* (*CreateHandler)(void* param),
+ void* param);
- CPDF_SecurityHandler* CreateSecurityHandler(const FX_CHAR* name);
+ CPDF_SecurityHandler* CreateSecurityHandler(const FX_CHAR* name);
- void SetPrivateData(void* module_id,
- void* pData,
- PD_CALLBACK_FREEDATA callback);
+ void SetPrivateData(void* module_id,
+ void* pData,
+ PD_CALLBACK_FREEDATA callback);
- void* GetPrivateData(void* module_id);
+ void* GetPrivateData(void* module_id);
-private:
- CPDF_ModuleMgr();
- ~CPDF_ModuleMgr();
+ private:
+ CPDF_ModuleMgr();
+ ~CPDF_ModuleMgr();
- CCodec_ModuleMgr* m_pCodecModule;
+ CCodec_ModuleMgr* m_pCodecModule;
- nonstd::unique_ptr<IPDF_RenderModule> m_pRenderModule;
- nonstd::unique_ptr<IPDF_PageModule> m_pPageModule;
+ nonstd::unique_ptr<IPDF_RenderModule> m_pRenderModule;
+ nonstd::unique_ptr<IPDF_PageModule> m_pPageModule;
- FX_BOOL (*m_pDownloadCallback)(const FX_CHAR* module_name);
+ FX_BOOL (*m_pDownloadCallback)(const FX_CHAR* module_name);
- CFX_MapByteStringToPtr m_SecurityHandlerMap;
+ CFX_MapByteStringToPtr m_SecurityHandlerMap;
- CFX_PrivateData m_privateData;
+ CFX_PrivateData m_privateData;
};
-class IPDF_PageModule
-{
-public:
- virtual ~IPDF_PageModule() {}
-
- virtual CPDF_DocPageData* CreateDocData(CPDF_Document* pDoc) = 0;
- virtual void ReleaseDoc(CPDF_Document*) = 0;
- virtual void ClearDoc(CPDF_Document*) = 0;
- virtual CPDF_FontGlobals* GetFontGlobals() = 0;
- virtual void ClearStockFont(CPDF_Document* pDoc) = 0;
- virtual void NotifyCJKAvailable() = 0;
- virtual CPDF_ColorSpace* GetStockCS(int family) = 0;
+class IPDF_PageModule {
+ public:
+ virtual ~IPDF_PageModule() {}
+
+ virtual CPDF_DocPageData* CreateDocData(CPDF_Document* pDoc) = 0;
+ virtual void ReleaseDoc(CPDF_Document*) = 0;
+ virtual void ClearDoc(CPDF_Document*) = 0;
+ virtual CPDF_FontGlobals* GetFontGlobals() = 0;
+ virtual void ClearStockFont(CPDF_Document* pDoc) = 0;
+ virtual void NotifyCJKAvailable() = 0;
+ virtual CPDF_ColorSpace* GetStockCS(int family) = 0;
};
-class IPDF_RenderModule
-{
-public:
- virtual ~IPDF_RenderModule() {}
-
- virtual CPDF_DocRenderData* CreateDocData(CPDF_Document* pDoc) = 0;
- virtual void DestroyDocData(CPDF_DocRenderData*) = 0;
- virtual void ClearDocData(CPDF_DocRenderData*) = 0;
- virtual CPDF_DocRenderData* GetRenderData() = 0;
- virtual CPDF_PageRenderCache* CreatePageCache(CPDF_Page* pPage) = 0;
- virtual void DestroyPageCache(CPDF_PageRenderCache*) = 0;
- virtual CPDF_RenderConfig* GetConfig() = 0;
+class IPDF_RenderModule {
+ public:
+ virtual ~IPDF_RenderModule() {}
+
+ virtual CPDF_DocRenderData* CreateDocData(CPDF_Document* pDoc) = 0;
+ virtual void DestroyDocData(CPDF_DocRenderData*) = 0;
+ virtual void ClearDocData(CPDF_DocRenderData*) = 0;
+ virtual CPDF_DocRenderData* GetRenderData() = 0;
+ virtual CPDF_PageRenderCache* CreatePageCache(CPDF_Page* pPage) = 0;
+ virtual void DestroyPageCache(CPDF_PageRenderCache*) = 0;
+ virtual CPDF_RenderConfig* GetConfig() = 0;
};
#endif // CORE_INCLUDE_FPDFAPI_FPDF_MODULE_H_
diff --git a/core/include/fpdfapi/fpdf_objects.h b/core/include/fpdfapi/fpdf_objects.h
index 45b7cc63cb..250b6e00d8 100644
--- a/core/include/fpdfapi/fpdf_objects.h
+++ b/core/include/fpdfapi/fpdf_objects.h
@@ -26,718 +26,582 @@ class CPDF_StreamFilter;
class CPDF_String;
class IFX_FileRead;
-#define PDFOBJ_INVALID 0
-#define PDFOBJ_BOOLEAN 1
-#define PDFOBJ_NUMBER 2
-#define PDFOBJ_STRING 3
-#define PDFOBJ_NAME 4
-#define PDFOBJ_ARRAY 5
-#define PDFOBJ_DICTIONARY 6
-#define PDFOBJ_STREAM 7
-#define PDFOBJ_NULL 8
-#define PDFOBJ_REFERENCE 9
+#define PDFOBJ_INVALID 0
+#define PDFOBJ_BOOLEAN 1
+#define PDFOBJ_NUMBER 2
+#define PDFOBJ_STRING 3
+#define PDFOBJ_NAME 4
+#define PDFOBJ_ARRAY 5
+#define PDFOBJ_DICTIONARY 6
+#define PDFOBJ_STREAM 7
+#define PDFOBJ_NULL 8
+#define PDFOBJ_REFERENCE 9
-typedef IFX_FileStream* (*FPDF_LPFCloneStreamCallback)(CPDF_Stream *pStream, void* pUserData);
-class CPDF_Object
-{
-public:
+typedef IFX_FileStream* (*FPDF_LPFCloneStreamCallback)(CPDF_Stream* pStream,
+ void* pUserData);
+class CPDF_Object {
+ public:
+ int GetType() const { return m_Type; }
- int GetType() const
- {
- return m_Type;
- }
+ FX_DWORD GetObjNum() const { return m_ObjNum; }
- FX_DWORD GetObjNum() const
- {
- return m_ObjNum;
- }
+ FX_DWORD GetGenNum() const { return m_GenNum; }
- FX_DWORD GetGenNum() const
- {
- return m_GenNum;
- }
+ FX_BOOL IsIdentical(CPDF_Object* pObj) const;
- FX_BOOL IsIdentical(CPDF_Object* pObj) const;
+ CPDF_Object* Clone(FX_BOOL bDirect = FALSE) const;
- CPDF_Object* Clone(FX_BOOL bDirect = FALSE) const;
+ CPDF_Object* CloneRef(CPDF_IndirectObjects* pObjs) const;
- CPDF_Object* CloneRef(CPDF_IndirectObjects* pObjs) const;
+ CPDF_Object* GetDirect() const;
- CPDF_Object* GetDirect() const;
+ void Release();
- void Release();
+ CFX_ByteString GetString() const;
- CFX_ByteString GetString() const;
+ CFX_ByteStringC GetConstString() const;
- CFX_ByteStringC GetConstString() const;
+ CFX_WideString GetUnicodeText(CFX_CharMap* pCharMap = NULL) const;
+ FX_FLOAT GetNumber() const;
- CFX_WideString GetUnicodeText(CFX_CharMap* pCharMap = NULL) const;
- FX_FLOAT GetNumber() const;
+ FX_FLOAT GetNumber16() const;
- FX_FLOAT GetNumber16() const;
+ int GetInteger() const;
- int GetInteger() const;
+ CPDF_Dictionary* GetDict() const;
- CPDF_Dictionary* GetDict() const;
+ CPDF_Array* GetArray() const;
- CPDF_Array* GetArray() const;
+ void SetString(const CFX_ByteString& str);
- void SetString(const CFX_ByteString& str);
+ void SetUnicodeText(const FX_WCHAR* pUnicodes, int len = -1);
- void SetUnicodeText(const FX_WCHAR* pUnicodes, int len = -1);
+ int GetDirectType() const;
- int GetDirectType() const;
+ FX_BOOL IsModified() const { return FALSE; }
- FX_BOOL IsModified() const
- {
- return FALSE;
- }
-protected:
- CPDF_Object(FX_DWORD type) : m_Type(type), m_ObjNum(0), m_GenNum(0) { }
- ~CPDF_Object() { }
- void Destroy();
+ protected:
+ CPDF_Object(FX_DWORD type) : m_Type(type), m_ObjNum(0), m_GenNum(0) {}
+ ~CPDF_Object() {}
+ void Destroy();
- static const int OBJECT_REF_MAX_DEPTH = 128;
- static int s_nCurRefDepth;
- FX_DWORD m_Type;
- FX_DWORD m_ObjNum;
- FX_DWORD m_GenNum;
+ static const int OBJECT_REF_MAX_DEPTH = 128;
+ static int s_nCurRefDepth;
+ FX_DWORD m_Type;
+ FX_DWORD m_ObjNum;
+ FX_DWORD m_GenNum;
- friend class CPDF_IndirectObjects;
- friend class CPDF_Parser;
- friend class CPDF_SyntaxParser;
-private:
- CPDF_Object(const CPDF_Object& src) {}
- CPDF_Object* CloneInternal(FX_BOOL bDirect, CFX_MapPtrToPtr* visited) const;
-};
-class CPDF_Boolean : public CPDF_Object
-{
-public:
-
- static CPDF_Boolean* Create(FX_BOOL value)
- {
- return new CPDF_Boolean(value);
- }
-
- CPDF_Boolean() : CPDF_Object(PDFOBJ_BOOLEAN), m_bValue(false) { }
- CPDF_Boolean(FX_BOOL value) : CPDF_Object(PDFOBJ_BOOLEAN), m_bValue(value) { }
-
- FX_BOOL Identical(CPDF_Boolean* pOther) const
- {
- return m_bValue == pOther->m_bValue;
- }
-protected:
-
- FX_BOOL m_bValue;
- friend class CPDF_Object;
+ friend class CPDF_IndirectObjects;
+ friend class CPDF_Parser;
+ friend class CPDF_SyntaxParser;
+
+ private:
+ CPDF_Object(const CPDF_Object& src) {}
+ CPDF_Object* CloneInternal(FX_BOOL bDirect, CFX_MapPtrToPtr* visited) const;
};
-class CPDF_Number : public CPDF_Object
-{
-public:
+class CPDF_Boolean : public CPDF_Object {
+ public:
+ static CPDF_Boolean* Create(FX_BOOL value) { return new CPDF_Boolean(value); }
- static CPDF_Number* Create(int value)
- {
- return new CPDF_Number(value);
- }
+ CPDF_Boolean() : CPDF_Object(PDFOBJ_BOOLEAN), m_bValue(false) {}
+ CPDF_Boolean(FX_BOOL value) : CPDF_Object(PDFOBJ_BOOLEAN), m_bValue(value) {}
- static CPDF_Number* Create(FX_FLOAT value)
- {
- return new CPDF_Number(value);
- }
+ FX_BOOL Identical(CPDF_Boolean* pOther) const {
+ return m_bValue == pOther->m_bValue;
+ }
- static CPDF_Number* Create(const CFX_ByteStringC& str)
- {
- return new CPDF_Number(str);
- }
+ protected:
+ FX_BOOL m_bValue;
+ friend class CPDF_Object;
+};
+class CPDF_Number : public CPDF_Object {
+ public:
+ static CPDF_Number* Create(int value) { return new CPDF_Number(value); }
- static CPDF_Number* Create(FX_BOOL bInteger, void* pData)
- {
- return new CPDF_Number(bInteger, pData);
- }
+ static CPDF_Number* Create(FX_FLOAT value) { return new CPDF_Number(value); }
- CPDF_Number() : CPDF_Object(PDFOBJ_NUMBER), m_bInteger(false), m_Integer(0) { }
+ static CPDF_Number* Create(const CFX_ByteStringC& str) {
+ return new CPDF_Number(str);
+ }
- CPDF_Number(FX_BOOL bInteger, void* pData);
+ static CPDF_Number* Create(FX_BOOL bInteger, void* pData) {
+ return new CPDF_Number(bInteger, pData);
+ }
- CPDF_Number(int value);
+ CPDF_Number() : CPDF_Object(PDFOBJ_NUMBER), m_bInteger(false), m_Integer(0) {}
- CPDF_Number(FX_FLOAT value);
+ CPDF_Number(FX_BOOL bInteger, void* pData);
- CPDF_Number(const CFX_ByteStringC& str);
+ CPDF_Number(int value);
- FX_BOOL Identical(CPDF_Number* pOther) const;
+ CPDF_Number(FX_FLOAT value);
- CFX_ByteString GetString() const;
+ CPDF_Number(const CFX_ByteStringC& str);
- void SetString(const CFX_ByteStringC& str);
+ FX_BOOL Identical(CPDF_Number* pOther) const;
- FX_BOOL IsInteger() const
- {
- return m_bInteger;
- }
+ CFX_ByteString GetString() const;
- int GetInteger() const
- {
- return m_bInteger ? m_Integer : (int)m_Float;
- }
+ void SetString(const CFX_ByteStringC& str);
- FX_FLOAT GetNumber() const
- {
- return m_bInteger ? (FX_FLOAT)m_Integer : m_Float;
- }
+ FX_BOOL IsInteger() const { return m_bInteger; }
- void SetNumber(FX_FLOAT value);
+ int GetInteger() const { return m_bInteger ? m_Integer : (int)m_Float; }
- FX_FLOAT GetNumber16() const
- {
- return GetNumber();
- }
+ FX_FLOAT GetNumber() const {
+ return m_bInteger ? (FX_FLOAT)m_Integer : m_Float;
+ }
- FX_FLOAT GetFloat() const
- {
- return m_bInteger ? (FX_FLOAT)m_Integer : m_Float;
- }
-protected:
+ void SetNumber(FX_FLOAT value);
- FX_BOOL m_bInteger;
+ FX_FLOAT GetNumber16() const { return GetNumber(); }
- union {
+ FX_FLOAT GetFloat() const {
+ return m_bInteger ? (FX_FLOAT)m_Integer : m_Float;
+ }
- int m_Integer;
+ protected:
+ FX_BOOL m_bInteger;
- FX_FLOAT m_Float;
- };
- friend class CPDF_Object;
-};
-class CPDF_String : public CPDF_Object
-{
-public:
+ union {
+ int m_Integer;
- static CPDF_String* Create(const CFX_ByteString& str, FX_BOOL bHex = FALSE)
- {
- return new CPDF_String(str, bHex);
- }
+ FX_FLOAT m_Float;
+ };
+ friend class CPDF_Object;
+};
+class CPDF_String : public CPDF_Object {
+ public:
+ static CPDF_String* Create(const CFX_ByteString& str, FX_BOOL bHex = FALSE) {
+ return new CPDF_String(str, bHex);
+ }
- static CPDF_String* Create(const CFX_WideString& str)
- {
- return new CPDF_String(str);
- }
+ static CPDF_String* Create(const CFX_WideString& str) {
+ return new CPDF_String(str);
+ }
- CPDF_String() : CPDF_Object(PDFOBJ_STRING), m_bHex(FALSE) { }
+ CPDF_String() : CPDF_Object(PDFOBJ_STRING), m_bHex(FALSE) {}
- CPDF_String(const CFX_ByteString& str, FX_BOOL bHex = FALSE)
- : CPDF_Object(PDFOBJ_STRING), m_String(str), m_bHex(bHex) {
- }
+ CPDF_String(const CFX_ByteString& str, FX_BOOL bHex = FALSE)
+ : CPDF_Object(PDFOBJ_STRING), m_String(str), m_bHex(bHex) {}
- CPDF_String(const CFX_WideString& str);
+ CPDF_String(const CFX_WideString& str);
- CFX_ByteString& GetString()
- {
- return m_String;
- }
+ CFX_ByteString& GetString() { return m_String; }
- FX_BOOL Identical(CPDF_String* pOther) const
- {
- return m_String == pOther->m_String;
- }
+ FX_BOOL Identical(CPDF_String* pOther) const {
+ return m_String == pOther->m_String;
+ }
- FX_BOOL IsHex() const
- {
- return m_bHex;
- }
-protected:
+ FX_BOOL IsHex() const { return m_bHex; }
- CFX_ByteString m_String;
+ protected:
+ CFX_ByteString m_String;
- FX_BOOL m_bHex;
- friend class CPDF_Object;
+ FX_BOOL m_bHex;
+ friend class CPDF_Object;
};
-class CPDF_Name : public CPDF_Object
-{
-public:
-
- static CPDF_Name* Create(const CFX_ByteString& str)
- {
- return new CPDF_Name(str);
- }
-
- static CPDF_Name* Create(const CFX_ByteStringC& str)
- {
- return new CPDF_Name(str);
- }
-
- static CPDF_Name* Create(const FX_CHAR* str)
- {
- return new CPDF_Name(str);
- }
-
- CPDF_Name(const CFX_ByteString& str) : CPDF_Object(PDFOBJ_NAME), m_Name(str) { }
- CPDF_Name(const CFX_ByteStringC& str) : CPDF_Object(PDFOBJ_NAME), m_Name(str) { }
- CPDF_Name(const FX_CHAR* str) : CPDF_Object(PDFOBJ_NAME), m_Name(str) { }
-
- CFX_ByteString& GetString()
- {
- return m_Name;
- }
-
- FX_BOOL Identical(CPDF_Name* pOther) const
- {
- return m_Name == pOther->m_Name;
- }
-protected:
-
- CFX_ByteString m_Name;
- friend class CPDF_Object;
-};
-class CPDF_Array : public CPDF_Object
-{
-public:
-
- static CPDF_Array* Create()
- {
- return new CPDF_Array();
- }
-
- CPDF_Array() : CPDF_Object(PDFOBJ_ARRAY) { }
-
- FX_DWORD GetCount() const
- {
- return m_Objects.GetSize();
- }
-
- CPDF_Object* GetElement(FX_DWORD index) const;
+class CPDF_Name : public CPDF_Object {
+ public:
+ static CPDF_Name* Create(const CFX_ByteString& str) {
+ return new CPDF_Name(str);
+ }
- CPDF_Object* GetElementValue(FX_DWORD index) const;
+ static CPDF_Name* Create(const CFX_ByteStringC& str) {
+ return new CPDF_Name(str);
+ }
+ static CPDF_Name* Create(const FX_CHAR* str) { return new CPDF_Name(str); }
+ CPDF_Name(const CFX_ByteString& str)
+ : CPDF_Object(PDFOBJ_NAME), m_Name(str) {}
+ CPDF_Name(const CFX_ByteStringC& str)
+ : CPDF_Object(PDFOBJ_NAME), m_Name(str) {}
+ CPDF_Name(const FX_CHAR* str) : CPDF_Object(PDFOBJ_NAME), m_Name(str) {}
- CFX_AffineMatrix GetMatrix();
+ CFX_ByteString& GetString() { return m_Name; }
- CFX_FloatRect GetRect();
+ FX_BOOL Identical(CPDF_Name* pOther) const {
+ return m_Name == pOther->m_Name;
+ }
+ protected:
+ CFX_ByteString m_Name;
+ friend class CPDF_Object;
+};
+class CPDF_Array : public CPDF_Object {
+ public:
+ static CPDF_Array* Create() { return new CPDF_Array(); }
+ CPDF_Array() : CPDF_Object(PDFOBJ_ARRAY) {}
+ FX_DWORD GetCount() const { return m_Objects.GetSize(); }
- CFX_ByteString GetString(FX_DWORD index) const;
-
- CFX_ByteStringC GetConstString(FX_DWORD index) const;
-
- int GetInteger(FX_DWORD index) const;
-
- FX_FLOAT GetNumber(FX_DWORD index) const;
-
- CPDF_Dictionary* GetDict(FX_DWORD index) const;
+ CPDF_Object* GetElement(FX_DWORD index) const;
- CPDF_Stream* GetStream(FX_DWORD index) const;
+ CPDF_Object* GetElementValue(FX_DWORD index) const;
- CPDF_Array* GetArray(FX_DWORD index) const;
+ CFX_AffineMatrix GetMatrix();
- FX_FLOAT GetFloat(FX_DWORD index) const
- {
- return GetNumber(index);
- }
+ CFX_FloatRect GetRect();
+ CFX_ByteString GetString(FX_DWORD index) const;
+ CFX_ByteStringC GetConstString(FX_DWORD index) const;
+ int GetInteger(FX_DWORD index) const;
- void SetAt(FX_DWORD index, CPDF_Object* pObj, CPDF_IndirectObjects* pObjs = NULL);
+ FX_FLOAT GetNumber(FX_DWORD index) const;
+ CPDF_Dictionary* GetDict(FX_DWORD index) const;
- void InsertAt(FX_DWORD index, CPDF_Object* pObj, CPDF_IndirectObjects* pObjs = NULL);
+ CPDF_Stream* GetStream(FX_DWORD index) const;
- void RemoveAt(FX_DWORD index);
+ CPDF_Array* GetArray(FX_DWORD index) const;
+ FX_FLOAT GetFloat(FX_DWORD index) const { return GetNumber(index); }
- void Add(CPDF_Object* pObj, CPDF_IndirectObjects* pObjs = NULL);
+ void SetAt(FX_DWORD index,
+ CPDF_Object* pObj,
+ CPDF_IndirectObjects* pObjs = NULL);
+ void InsertAt(FX_DWORD index,
+ CPDF_Object* pObj,
+ CPDF_IndirectObjects* pObjs = NULL);
+ void RemoveAt(FX_DWORD index);
- void AddNumber(FX_FLOAT f);
+ void Add(CPDF_Object* pObj, CPDF_IndirectObjects* pObjs = NULL);
- void AddInteger(int i);
+ void AddNumber(FX_FLOAT f);
- void AddString(const CFX_ByteString& str);
+ void AddInteger(int i);
- void AddName(const CFX_ByteString& str);
+ void AddString(const CFX_ByteString& str);
- void AddReference(CPDF_IndirectObjects* pDoc, FX_DWORD objnum);
+ void AddName(const CFX_ByteString& str);
- void AddReference(CPDF_IndirectObjects* pDoc, CPDF_Object* obj)
- {
- AddReference(pDoc, obj->GetObjNum());
- }
+ void AddReference(CPDF_IndirectObjects* pDoc, FX_DWORD objnum);
+ void AddReference(CPDF_IndirectObjects* pDoc, CPDF_Object* obj) {
+ AddReference(pDoc, obj->GetObjNum());
+ }
- FX_FLOAT GetNumber16(FX_DWORD index) const
- {
- return GetNumber(index);
- }
+ FX_FLOAT GetNumber16(FX_DWORD index) const { return GetNumber(index); }
- void AddNumber16(FX_FLOAT value)
- {
- AddNumber(value);
- }
+ void AddNumber16(FX_FLOAT value) { AddNumber(value); }
- FX_BOOL Identical(CPDF_Array* pOther) const;
-protected:
+ FX_BOOL Identical(CPDF_Array* pOther) const;
- ~CPDF_Array();
+ protected:
+ ~CPDF_Array();
- CFX_PtrArray m_Objects;
- friend class CPDF_Object;
+ CFX_PtrArray m_Objects;
+ friend class CPDF_Object;
};
-class CPDF_Dictionary : public CPDF_Object
-{
-public:
+class CPDF_Dictionary : public CPDF_Object {
+ public:
+ static CPDF_Dictionary* Create() { return new CPDF_Dictionary(); }
- static CPDF_Dictionary* Create()
- {
- return new CPDF_Dictionary();
- }
+ CPDF_Dictionary() : CPDF_Object(PDFOBJ_DICTIONARY) {}
- CPDF_Dictionary() : CPDF_Object(PDFOBJ_DICTIONARY) { }
+ CPDF_Object* GetElement(const CFX_ByteStringC& key) const;
- CPDF_Object* GetElement(const CFX_ByteStringC& key) const;
+ CPDF_Object* GetElementValue(const CFX_ByteStringC& key) const;
- CPDF_Object* GetElementValue(const CFX_ByteStringC& key) const;
+ CFX_ByteString GetString(const CFX_ByteStringC& key) const;
+ CFX_ByteStringC GetConstString(const CFX_ByteStringC& key) const;
+ CFX_ByteString GetString(const CFX_ByteStringC& key,
+ const CFX_ByteStringC& default_str) const;
+ CFX_ByteStringC GetConstString(const CFX_ByteStringC& key,
+ const CFX_ByteStringC& default_str) const;
+ CFX_WideString GetUnicodeText(const CFX_ByteStringC& key,
+ CFX_CharMap* pCharMap = NULL) const;
- CFX_ByteString GetString(const CFX_ByteStringC& key) const;
+ int GetInteger(const CFX_ByteStringC& key) const;
- CFX_ByteStringC GetConstString(const CFX_ByteStringC& key) const;
+ int GetInteger(const CFX_ByteStringC& key, int default_int) const;
- CFX_ByteString GetString(const CFX_ByteStringC& key, const CFX_ByteStringC& default_str) const;
+ FX_BOOL GetBoolean(const CFX_ByteStringC& key,
+ FX_BOOL bDefault = FALSE) const;
- CFX_ByteStringC GetConstString(const CFX_ByteStringC& key, const CFX_ByteStringC& default_str) const;
+ FX_FLOAT GetNumber(const CFX_ByteStringC& key) const;
- CFX_WideString GetUnicodeText(const CFX_ByteStringC& key, CFX_CharMap* pCharMap = NULL) const;
+ CPDF_Dictionary* GetDict(const CFX_ByteStringC& key) const;
- int GetInteger(const CFX_ByteStringC& key) const;
+ CPDF_Stream* GetStream(const CFX_ByteStringC& key) const;
- int GetInteger(const CFX_ByteStringC& key, int default_int) const;
+ CPDF_Array* GetArray(const CFX_ByteStringC& key) const;
- FX_BOOL GetBoolean(const CFX_ByteStringC& key, FX_BOOL bDefault = FALSE) const;
+ CFX_FloatRect GetRect(const CFX_ByteStringC& key) const;
- FX_FLOAT GetNumber(const CFX_ByteStringC& key) const;
+ CFX_AffineMatrix GetMatrix(const CFX_ByteStringC& key) const;
- CPDF_Dictionary* GetDict(const CFX_ByteStringC& key) const;
+ FX_FLOAT GetFloat(const CFX_ByteStringC& key) const { return GetNumber(key); }
- CPDF_Stream* GetStream(const CFX_ByteStringC& key) const;
+ FX_BOOL KeyExist(const CFX_ByteStringC& key) const;
- CPDF_Array* GetArray(const CFX_ByteStringC& key) const;
+ FX_POSITION GetStartPos() const;
- CFX_FloatRect GetRect(const CFX_ByteStringC& key) const;
+ CPDF_Object* GetNextElement(FX_POSITION& pos, CFX_ByteString& key) const;
- CFX_AffineMatrix GetMatrix(const CFX_ByteStringC& key) const;
+ void SetAt(const CFX_ByteStringC& key,
+ CPDF_Object* pObj,
+ CPDF_IndirectObjects* pObjs = NULL);
- FX_FLOAT GetFloat(const CFX_ByteStringC& key) const
- {
- return GetNumber(key);
- }
+ void SetAtName(const CFX_ByteStringC& key, const CFX_ByteString& name);
+ void SetAtString(const CFX_ByteStringC& key, const CFX_ByteString& string);
- FX_BOOL KeyExist(const CFX_ByteStringC& key) const;
+ void SetAtInteger(const CFX_ByteStringC& key, int i);
- FX_POSITION GetStartPos() const;
+ void SetAtNumber(const CFX_ByteStringC& key, FX_FLOAT f);
- CPDF_Object* GetNextElement(FX_POSITION& pos, CFX_ByteString& key) const;
+ void SetAtReference(const CFX_ByteStringC& key,
+ CPDF_IndirectObjects* pDoc,
+ FX_DWORD objnum);
- void SetAt(const CFX_ByteStringC& key, CPDF_Object* pObj, CPDF_IndirectObjects* pObjs = NULL);
+ void SetAtReference(const CFX_ByteStringC& key,
+ CPDF_IndirectObjects* pDoc,
+ CPDF_Object* obj) {
+ SetAtReference(key, pDoc, obj->GetObjNum());
+ }
+ void AddReference(const CFX_ByteStringC& key,
+ CPDF_IndirectObjects* pDoc,
+ FX_DWORD objnum);
+ void AddReference(const CFX_ByteStringC& key,
+ CPDF_IndirectObjects* pDoc,
+ CPDF_Object* obj) {
+ AddReference(key, pDoc, obj->GetObjNum());
+ }
- void SetAtName(const CFX_ByteStringC& key, const CFX_ByteString& name);
+ void SetAtRect(const CFX_ByteStringC& key, const CFX_FloatRect& rect);
+ void SetAtMatrix(const CFX_ByteStringC& key, const CFX_AffineMatrix& matrix);
- void SetAtString(const CFX_ByteStringC& key, const CFX_ByteString& string);
+ void SetAtBoolean(const CFX_ByteStringC& key, FX_BOOL bValue);
+ void RemoveAt(const CFX_ByteStringC& key);
- void SetAtInteger(const CFX_ByteStringC& key, int i);
+ void ReplaceKey(const CFX_ByteStringC& oldkey, const CFX_ByteStringC& newkey);
+ FX_BOOL Identical(CPDF_Dictionary* pDict) const;
- void SetAtNumber(const CFX_ByteStringC& key, FX_FLOAT f);
+ int GetCount() const { return m_Map.GetCount(); }
- void SetAtReference(const CFX_ByteStringC& key, CPDF_IndirectObjects* pDoc, FX_DWORD objnum);
+ void AddValue(const CFX_ByteStringC& key, CPDF_Object* pObj);
- void SetAtReference(const CFX_ByteStringC& key, CPDF_IndirectObjects* pDoc, CPDF_Object* obj)
- {
- SetAtReference(key, pDoc, obj->GetObjNum());
- }
+ protected:
+ ~CPDF_Dictionary();
- void AddReference(const CFX_ByteStringC& key, CPDF_IndirectObjects* pDoc, FX_DWORD objnum);
+ CFX_CMapByteStringToPtr m_Map;
- void AddReference(const CFX_ByteStringC& key, CPDF_IndirectObjects* pDoc, CPDF_Object* obj)
- {
- AddReference(key, pDoc, obj->GetObjNum());
- }
-
- void SetAtRect(const CFX_ByteStringC& key, const CFX_FloatRect& rect);
-
- void SetAtMatrix(const CFX_ByteStringC& key, const CFX_AffineMatrix& matrix);
-
- void SetAtBoolean(const CFX_ByteStringC& key, FX_BOOL bValue);
+ friend class CPDF_Object;
+};
+class CPDF_Stream : public CPDF_Object {
+ public:
+ static CPDF_Stream* Create(uint8_t* pData,
+ FX_DWORD size,
+ CPDF_Dictionary* pDict) {
+ return new CPDF_Stream(pData, size, pDict);
+ }
+ CPDF_Stream(uint8_t* pData, FX_DWORD size, CPDF_Dictionary* pDict);
+ CPDF_Dictionary* GetDict() const { return m_pDict; }
- void RemoveAt(const CFX_ByteStringC& key);
+ void SetData(const uint8_t* pData,
+ FX_DWORD size,
+ FX_BOOL bCompressed,
+ FX_BOOL bKeepBuf);
+ void InitStream(uint8_t* pData, FX_DWORD size, CPDF_Dictionary* pDict);
- void ReplaceKey(const CFX_ByteStringC& oldkey, const CFX_ByteStringC& newkey);
+ void InitStream(IFX_FileRead* pFile, CPDF_Dictionary* pDict);
- FX_BOOL Identical(CPDF_Dictionary* pDict) const;
+ FX_BOOL Identical(CPDF_Stream* pOther) const;
- int GetCount() const
- {
- return m_Map.GetCount();
- }
+ CPDF_StreamFilter* GetStreamFilter(FX_BOOL bRaw = FALSE) const;
- void AddValue(const CFX_ByteStringC& key, CPDF_Object* pObj);
-protected:
+ FX_DWORD GetRawSize() const { return m_dwSize; }
- ~CPDF_Dictionary();
+ FX_BOOL ReadRawData(FX_FILESIZE start_pos,
+ uint8_t* pBuf,
+ FX_DWORD buf_size) const;
- CFX_CMapByteStringToPtr m_Map;
+ FX_BOOL IsMemoryBased() const { return m_GenNum == (FX_DWORD)-1; }
- friend class CPDF_Object;
-};
-class CPDF_Stream : public CPDF_Object
-{
-public:
+ CPDF_Stream* Clone(FX_BOOL bDirect,
+ FPDF_LPFCloneStreamCallback lpfCallback,
+ void* pUserData) const;
- static CPDF_Stream* Create(uint8_t* pData, FX_DWORD size, CPDF_Dictionary* pDict)
- {
- return new CPDF_Stream(pData, size, pDict);
- }
+ protected:
+ ~CPDF_Stream();
- CPDF_Stream(uint8_t* pData, FX_DWORD size, CPDF_Dictionary* pDict);
+ CPDF_Dictionary* m_pDict;
- CPDF_Dictionary* GetDict() const
- {
- return m_pDict;
- }
+ FX_DWORD m_dwSize;
- void SetData(const uint8_t* pData, FX_DWORD size, FX_BOOL bCompressed, FX_BOOL bKeepBuf);
+ FX_DWORD m_GenNum;
- void InitStream(uint8_t* pData, FX_DWORD size, CPDF_Dictionary* pDict);
+ union {
+ uint8_t* m_pDataBuf;
- void InitStream(IFX_FileRead *pFile, CPDF_Dictionary* pDict);
+ IFX_FileRead* m_pFile;
+ };
- FX_BOOL Identical(CPDF_Stream* pOther) const;
+ FX_FILESIZE m_FileOffset;
- CPDF_StreamFilter* GetStreamFilter(FX_BOOL bRaw = FALSE) const;
+ CPDF_CryptoHandler* m_pCryptoHandler;
+ void InitStream(CPDF_Dictionary* pDict);
+ friend class CPDF_Object;
+ friend class CPDF_StreamAcc;
+ friend class CPDF_AttachmentAcc;
+};
+class CPDF_StreamAcc {
+ public:
+ CPDF_StreamAcc();
+ ~CPDF_StreamAcc();
- FX_DWORD GetRawSize() const
- {
- return m_dwSize;
- }
+ void LoadAllData(const CPDF_Stream* pStream,
+ FX_BOOL bRawAccess = FALSE,
+ FX_DWORD estimated_size = 0,
+ FX_BOOL bImageAcc = FALSE);
- FX_BOOL ReadRawData(FX_FILESIZE start_pos, uint8_t* pBuf, FX_DWORD buf_size) const;
+ const CPDF_Stream* GetStream() const { return m_pStream; }
+ CPDF_Dictionary* GetDict() const {
+ return m_pStream ? m_pStream->GetDict() : NULL;
+ }
- FX_BOOL IsMemoryBased() const
- {
- return m_GenNum == (FX_DWORD) - 1;
- }
+ const uint8_t* GetData() const;
- CPDF_Stream* Clone(FX_BOOL bDirect, FPDF_LPFCloneStreamCallback lpfCallback, void* pUserData) const;
-protected:
+ FX_DWORD GetSize() const;
- ~CPDF_Stream();
+ uint8_t* DetachData();
- CPDF_Dictionary* m_pDict;
+ const CFX_ByteString& GetImageDecoder() { return m_ImageDecoder; }
- FX_DWORD m_dwSize;
+ const CPDF_Dictionary* GetImageParam() { return m_pImageParam; }
- FX_DWORD m_GenNum;
+ protected:
+ uint8_t* m_pData;
- union {
+ FX_DWORD m_dwSize;
- uint8_t* m_pDataBuf;
+ FX_BOOL m_bNewBuf;
- IFX_FileRead* m_pFile;
- };
+ CFX_ByteString m_ImageDecoder;
- FX_FILESIZE m_FileOffset;
+ CPDF_Dictionary* m_pImageParam;
- CPDF_CryptoHandler* m_pCryptoHandler;
+ const CPDF_Stream* m_pStream;
- void InitStream(CPDF_Dictionary* pDict);
- friend class CPDF_Object;
- friend class CPDF_StreamAcc;
- friend class CPDF_AttachmentAcc;
+ uint8_t* m_pSrcData;
};
-class CPDF_StreamAcc
-{
-public:
-
- CPDF_StreamAcc();
-
- ~CPDF_StreamAcc();
-
- void LoadAllData(const CPDF_Stream* pStream, FX_BOOL bRawAccess = FALSE,
- FX_DWORD estimated_size = 0, FX_BOOL bImageAcc = FALSE);
+CFX_DataFilter* FPDF_CreateFilter(const CFX_ByteStringC& name,
+ const CPDF_Dictionary* pParam,
+ int width = 0,
+ int height = 0);
+#define FPDF_FILTER_BUFFER_SIZE 20480
+class CPDF_StreamFilter {
+ public:
+ ~CPDF_StreamFilter();
- const CPDF_Stream* GetStream() const
- {
- return m_pStream;
- }
+ FX_DWORD ReadBlock(uint8_t* buffer, FX_DWORD size);
- CPDF_Dictionary* GetDict() const
- {
- return m_pStream? m_pStream->GetDict() : NULL;
- }
+ FX_DWORD GetSrcPos() { return m_SrcOffset; }
- const uint8_t* GetData() const;
+ const CPDF_Stream* GetStream() { return m_pStream; }
- FX_DWORD GetSize() const;
+ protected:
+ CPDF_StreamFilter() {}
- uint8_t* DetachData();
+ FX_DWORD ReadLeftOver(uint8_t* buffer, FX_DWORD buf_size);
- const CFX_ByteString& GetImageDecoder()
- {
- return m_ImageDecoder;
- }
+ const CPDF_Stream* m_pStream;
- const CPDF_Dictionary* GetImageParam()
- {
- return m_pImageParam;
- }
-protected:
+ CFX_DataFilter* m_pFilter;
- uint8_t* m_pData;
+ CFX_BinaryBuf* m_pBuffer;
- FX_DWORD m_dwSize;
+ FX_DWORD m_BufOffset;
- FX_BOOL m_bNewBuf;
+ FX_DWORD m_SrcOffset;
- CFX_ByteString m_ImageDecoder;
-
- CPDF_Dictionary* m_pImageParam;
-
- const CPDF_Stream* m_pStream;
-
- uint8_t* m_pSrcData;
+ uint8_t m_SrcBuffer[FPDF_FILTER_BUFFER_SIZE];
+ friend class CPDF_Stream;
};
-CFX_DataFilter* FPDF_CreateFilter(const CFX_ByteStringC& name, const CPDF_Dictionary* pParam, int width = 0, int height = 0);
-#define FPDF_FILTER_BUFFER_SIZE 20480
-class CPDF_StreamFilter
-{
-public:
-
- ~CPDF_StreamFilter();
-
- FX_DWORD ReadBlock(uint8_t* buffer, FX_DWORD size);
+class CPDF_Null : public CPDF_Object {
+ public:
+ static CPDF_Null* Create() { return new CPDF_Null(); }
- FX_DWORD GetSrcPos()
- {
- return m_SrcOffset;
- }
-
- const CPDF_Stream* GetStream()
- {
- return m_pStream;
- }
-protected:
-
- CPDF_StreamFilter() {}
-
- FX_DWORD ReadLeftOver(uint8_t* buffer, FX_DWORD buf_size);
-
- const CPDF_Stream* m_pStream;
-
- CFX_DataFilter* m_pFilter;
+ CPDF_Null() : CPDF_Object(PDFOBJ_NULL) {}
+};
+class CPDF_Reference : public CPDF_Object {
+ public:
+ CPDF_Reference(CPDF_IndirectObjects* pDoc, int objnum)
+ : CPDF_Object(PDFOBJ_REFERENCE), m_pObjList(pDoc), m_RefObjNum(objnum) {}
- CFX_BinaryBuf* m_pBuffer;
+ CPDF_IndirectObjects* GetObjList() const { return m_pObjList; }
- FX_DWORD m_BufOffset;
+ FX_DWORD GetRefObjNum() const { return m_RefObjNum; }
- FX_DWORD m_SrcOffset;
+ void SetRef(CPDF_IndirectObjects* pDoc, FX_DWORD objnum);
- uint8_t m_SrcBuffer[FPDF_FILTER_BUFFER_SIZE];
- friend class CPDF_Stream;
-};
-class CPDF_Null : public CPDF_Object
-{
-public:
+ FX_BOOL Identical(CPDF_Reference* pOther) const {
+ return m_RefObjNum == pOther->m_RefObjNum;
+ }
- static CPDF_Null* Create()
- {
- return new CPDF_Null();
- }
+ protected:
+ CPDF_IndirectObjects* m_pObjList;
- CPDF_Null() : CPDF_Object(PDFOBJ_NULL) { }
+ FX_DWORD m_RefObjNum;
+ friend class CPDF_Object;
};
-class CPDF_Reference : public CPDF_Object
-{
-public:
- CPDF_Reference(CPDF_IndirectObjects* pDoc, int objnum)
- : CPDF_Object(PDFOBJ_REFERENCE), m_pObjList(pDoc), m_RefObjNum(objnum) {
- }
-
- CPDF_IndirectObjects* GetObjList() const
- {
- return m_pObjList;
- }
-
- FX_DWORD GetRefObjNum() const
- {
- return m_RefObjNum;
- }
-
- void SetRef(CPDF_IndirectObjects* pDoc, FX_DWORD objnum);
-
- FX_BOOL Identical(CPDF_Reference* pOther) const
- {
- return m_RefObjNum == pOther->m_RefObjNum;
- }
-protected:
-
- CPDF_IndirectObjects* m_pObjList;
-
- FX_DWORD m_RefObjNum;
- friend class CPDF_Object;
-};
-class CPDF_IndirectObjects
-{
-public:
-
- CPDF_IndirectObjects(CPDF_Parser* pParser);
+class CPDF_IndirectObjects {
+ public:
+ CPDF_IndirectObjects(CPDF_Parser* pParser);
- ~CPDF_IndirectObjects();
+ ~CPDF_IndirectObjects();
- CPDF_Object* GetIndirectObject(FX_DWORD objnum, struct PARSE_CONTEXT* pContext = NULL);
+ CPDF_Object* GetIndirectObject(FX_DWORD objnum,
+ struct PARSE_CONTEXT* pContext = NULL);
- int GetIndirectType(FX_DWORD objnum);
+ int GetIndirectType(FX_DWORD objnum);
- FX_DWORD AddIndirectObject(CPDF_Object* pObj);
+ FX_DWORD AddIndirectObject(CPDF_Object* pObj);
- void ReleaseIndirectObject(FX_DWORD objnum);
+ void ReleaseIndirectObject(FX_DWORD objnum);
- void InsertIndirectObject(FX_DWORD objnum, CPDF_Object* pObj);
+ void InsertIndirectObject(FX_DWORD objnum, CPDF_Object* pObj);
- FX_DWORD GetLastObjNum() const;
+ FX_DWORD GetLastObjNum() const;
- FX_POSITION GetStartPosition() const
- {
- return m_IndirectObjs.GetStartPosition();
- }
+ FX_POSITION GetStartPosition() const {
+ return m_IndirectObjs.GetStartPosition();
+ }
- void GetNextAssoc(FX_POSITION& rPos, FX_DWORD& objnum, CPDF_Object*& pObject) const
- {
- m_IndirectObjs.GetNextAssoc(rPos, (void*&)objnum, (void*&)pObject);
- }
-protected:
+ void GetNextAssoc(FX_POSITION& rPos,
+ FX_DWORD& objnum,
+ CPDF_Object*& pObject) const {
+ m_IndirectObjs.GetNextAssoc(rPos, (void*&)objnum, (void*&)pObject);
+ }
- CFX_MapPtrToPtr m_IndirectObjs;
+ protected:
+ CFX_MapPtrToPtr m_IndirectObjs;
- CPDF_Parser* m_pParser;
+ CPDF_Parser* m_pParser;
- FX_DWORD m_LastObjNum;
+ FX_DWORD m_LastObjNum;
};
#endif // CORE_INCLUDE_FPDFAPI_FPDF_OBJECTS_H_
diff --git a/core/include/fpdfapi/fpdf_page.h b/core/include/fpdfapi/fpdf_page.h
index bd8b5c9878..5f716b2c2e 100644
--- a/core/include/fpdfapi/fpdf_page.h
+++ b/core/include/fpdfapi/fpdf_page.h
@@ -21,202 +21,182 @@ class CPDF_StreamFilter;
class CPDF_AllStates;
class CPDF_ContentParser;
class CPDF_StreamContentParser;
-#define PDFTRANS_GROUP 0x0100
-#define PDFTRANS_ISOLATED 0x0200
-#define PDFTRANS_KNOCKOUT 0x0400
-
-class CPDF_PageObjects
-{
-public:
- CPDF_PageObjects(FX_BOOL bReleaseMembers = TRUE);
- ~CPDF_PageObjects();
-
- void ContinueParse(IFX_Pause* pPause);
-
- FX_BOOL IsParsed() const
- {
- return m_ParseState == CONTENT_PARSED;
- }
-
- FX_POSITION GetFirstObjectPosition() const
- {
- return m_ObjectList.GetHeadPosition();
- }
-
- FX_POSITION GetLastObjectPosition() const
- {
- return m_ObjectList.GetTailPosition();
- }
-
- CPDF_PageObject* GetNextObject(FX_POSITION& pos) const
- {
- return (CPDF_PageObject*)m_ObjectList.GetNext(pos);
- }
-
- CPDF_PageObject* GetPrevObject(FX_POSITION& pos) const
- {
- return (CPDF_PageObject*)m_ObjectList.GetPrev(pos);
- }
-
- CPDF_PageObject* GetObjectAt(FX_POSITION pos) const
- {
- return (CPDF_PageObject*)m_ObjectList.GetAt(pos);
- }
-
- FX_DWORD CountObjects() const
- {
- return m_ObjectList.GetCount();
- }
-
- int GetObjectIndex(CPDF_PageObject* pObj) const;
-
- CPDF_PageObject* GetObjectByIndex(int index) const;
-
- FX_POSITION InsertObject(FX_POSITION posInsertAfter, CPDF_PageObject* pNewObject);
-
- void Transform(const CFX_AffineMatrix& matrix);
-
- FX_BOOL BackgroundAlphaNeeded() const
- {
- return m_bBackgroundAlphaNeeded;
- }
-
- CFX_FloatRect CalcBoundingBox() const;
-
- CPDF_Dictionary* m_pFormDict;
- CPDF_Stream* m_pFormStream;
- CPDF_Document* m_pDocument;
- CPDF_Dictionary* m_pPageResources;
- CPDF_Dictionary* m_pResources;
- CFX_FloatRect m_BBox;
- int m_Transparency;
-
-protected:
- friend class CPDF_ContentParser;
- friend class CPDF_StreamContentParser;
- friend class CPDF_AllStates;
-
- enum ParseState {
- CONTENT_NOT_PARSED,
- CONTENT_PARSING,
- CONTENT_PARSED
- };
-
- void LoadTransInfo();
- void ClearCacheObjects();
-
- CFX_PtrList m_ObjectList;
- FX_BOOL m_bBackgroundAlphaNeeded;
- FX_BOOL m_bReleaseMembers;
- CPDF_ContentParser* m_pParser;
- ParseState m_ParseState;
-};
-
-class CPDF_Page : public CPDF_PageObjects, public CFX_PrivateData
-{
-public:
+#define PDFTRANS_GROUP 0x0100
+#define PDFTRANS_ISOLATED 0x0200
+#define PDFTRANS_KNOCKOUT 0x0400
- CPDF_Page();
+class CPDF_PageObjects {
+ public:
+ CPDF_PageObjects(FX_BOOL bReleaseMembers = TRUE);
+ ~CPDF_PageObjects();
- ~CPDF_Page();
+ void ContinueParse(IFX_Pause* pPause);
- void Load(CPDF_Document* pDocument, CPDF_Dictionary* pPageDict, FX_BOOL bPageCache = TRUE);
+ FX_BOOL IsParsed() const { return m_ParseState == CONTENT_PARSED; }
- void StartParse(CPDF_ParseOptions* pOptions = NULL, FX_BOOL bReParse = FALSE);
+ FX_POSITION GetFirstObjectPosition() const {
+ return m_ObjectList.GetHeadPosition();
+ }
- void ParseContent(CPDF_ParseOptions* pOptions = NULL, FX_BOOL bReParse = FALSE);
+ FX_POSITION GetLastObjectPosition() const {
+ return m_ObjectList.GetTailPosition();
+ }
- void GetDisplayMatrix(CFX_AffineMatrix& matrix, int xPos, int yPos,
- int xSize, int ySize, int iRotate) const;
+ CPDF_PageObject* GetNextObject(FX_POSITION& pos) const {
+ return (CPDF_PageObject*)m_ObjectList.GetNext(pos);
+ }
- FX_FLOAT GetPageWidth() const
- {
- return m_PageWidth;
- }
+ CPDF_PageObject* GetPrevObject(FX_POSITION& pos) const {
+ return (CPDF_PageObject*)m_ObjectList.GetPrev(pos);
+ }
- FX_FLOAT GetPageHeight() const
- {
- return m_PageHeight;
- }
+ CPDF_PageObject* GetObjectAt(FX_POSITION pos) const {
+ return (CPDF_PageObject*)m_ObjectList.GetAt(pos);
+ }
- CFX_FloatRect GetPageBBox() const
- {
- return m_BBox;
- }
+ FX_DWORD CountObjects() const { return m_ObjectList.GetCount(); }
- const CFX_AffineMatrix& GetPageMatrix() const
- {
- return m_PageMatrix;
- }
+ int GetObjectIndex(CPDF_PageObject* pObj) const;
- CPDF_Object* GetPageAttr(const CFX_ByteStringC& name) const;
+ CPDF_PageObject* GetObjectByIndex(int index) const;
+ FX_POSITION InsertObject(FX_POSITION posInsertAfter,
+ CPDF_PageObject* pNewObject);
+ void Transform(const CFX_AffineMatrix& matrix);
- CPDF_PageRenderCache* GetRenderCache() const
- {
- return m_pPageRender;
- }
+ FX_BOOL BackgroundAlphaNeeded() const { return m_bBackgroundAlphaNeeded; }
- void ClearRenderCache();
+ CFX_FloatRect CalcBoundingBox() const;
-protected:
- friend class CPDF_ContentParser;
+ CPDF_Dictionary* m_pFormDict;
+ CPDF_Stream* m_pFormStream;
+ CPDF_Document* m_pDocument;
+ CPDF_Dictionary* m_pPageResources;
+ CPDF_Dictionary* m_pResources;
+ CFX_FloatRect m_BBox;
+ int m_Transparency;
- FX_FLOAT m_PageWidth;
+ protected:
+ friend class CPDF_ContentParser;
+ friend class CPDF_StreamContentParser;
+ friend class CPDF_AllStates;
- FX_FLOAT m_PageHeight;
+ enum ParseState { CONTENT_NOT_PARSED, CONTENT_PARSING, CONTENT_PARSED };
- CFX_AffineMatrix m_PageMatrix;
+ void LoadTransInfo();
+ void ClearCacheObjects();
- CPDF_PageRenderCache* m_pPageRender;
+ CFX_PtrList m_ObjectList;
+ FX_BOOL m_bBackgroundAlphaNeeded;
+ FX_BOOL m_bReleaseMembers;
+ CPDF_ContentParser* m_pParser;
+ ParseState m_ParseState;
};
-class CPDF_ParseOptions
-{
-public:
- CPDF_ParseOptions();
+class CPDF_Page : public CPDF_PageObjects, public CFX_PrivateData {
+ public:
+ CPDF_Page();
- FX_BOOL m_bTextOnly;
+ ~CPDF_Page();
- FX_BOOL m_bMarkedContent;
+ void Load(CPDF_Document* pDocument,
+ CPDF_Dictionary* pPageDict,
+ FX_BOOL bPageCache = TRUE);
- FX_BOOL m_bSeparateForm;
+ void StartParse(CPDF_ParseOptions* pOptions = NULL, FX_BOOL bReParse = FALSE);
- FX_BOOL m_bDecodeInlineImage;
-};
-class CPDF_Form : public CPDF_PageObjects
-{
-public:
+ void ParseContent(CPDF_ParseOptions* pOptions = NULL,
+ FX_BOOL bReParse = FALSE);
+
+ void GetDisplayMatrix(CFX_AffineMatrix& matrix,
+ int xPos,
+ int yPos,
+ int xSize,
+ int ySize,
+ int iRotate) const;
+
+ FX_FLOAT GetPageWidth() const { return m_PageWidth; }
+
+ FX_FLOAT GetPageHeight() const { return m_PageHeight; }
+
+ CFX_FloatRect GetPageBBox() const { return m_BBox; }
+
+ const CFX_AffineMatrix& GetPageMatrix() const { return m_PageMatrix; }
+
+ CPDF_Object* GetPageAttr(const CFX_ByteStringC& name) const;
- CPDF_Form(CPDF_Document* pDocument, CPDF_Dictionary* pPageResources, CPDF_Stream* pFormStream, CPDF_Dictionary* pParentResources = NULL);
+ CPDF_PageRenderCache* GetRenderCache() const { return m_pPageRender; }
- ~CPDF_Form();
+ void ClearRenderCache();
- void StartParse(CPDF_AllStates* pGraphicStates, CFX_AffineMatrix* pParentMatrix,
- CPDF_Type3Char* pType3Char, CPDF_ParseOptions* pOptions, int level = 0);
+ protected:
+ friend class CPDF_ContentParser;
- void ParseContent(CPDF_AllStates* pGraphicStates, CFX_AffineMatrix* pParentMatrix,
- CPDF_Type3Char* pType3Char, CPDF_ParseOptions* pOptions, int level = 0);
+ FX_FLOAT m_PageWidth;
- CPDF_Form* Clone() const;
+ FX_FLOAT m_PageHeight;
+
+ CFX_AffineMatrix m_PageMatrix;
+
+ CPDF_PageRenderCache* m_pPageRender;
+};
+class CPDF_ParseOptions {
+ public:
+ CPDF_ParseOptions();
+
+ FX_BOOL m_bTextOnly;
+
+ FX_BOOL m_bMarkedContent;
+
+ FX_BOOL m_bSeparateForm;
+
+ FX_BOOL m_bDecodeInlineImage;
+};
+class CPDF_Form : public CPDF_PageObjects {
+ public:
+ CPDF_Form(CPDF_Document* pDocument,
+ CPDF_Dictionary* pPageResources,
+ CPDF_Stream* pFormStream,
+ CPDF_Dictionary* pParentResources = NULL);
+
+ ~CPDF_Form();
+
+ void StartParse(CPDF_AllStates* pGraphicStates,
+ CFX_AffineMatrix* pParentMatrix,
+ CPDF_Type3Char* pType3Char,
+ CPDF_ParseOptions* pOptions,
+ int level = 0);
+
+ void ParseContent(CPDF_AllStates* pGraphicStates,
+ CFX_AffineMatrix* pParentMatrix,
+ CPDF_Type3Char* pType3Char,
+ CPDF_ParseOptions* pOptions,
+ int level = 0);
+
+ CPDF_Form* Clone() const;
};
-class CPDF_PageContentGenerate
-{
-public:
- CPDF_PageContentGenerate(CPDF_Page* pPage);
- ~CPDF_PageContentGenerate();
- FX_BOOL InsertPageObject(CPDF_PageObject* pPageObject);
- void GenerateContent();
- void TransformContent(CFX_Matrix& matrix);
-protected:
- void ProcessImage(CFX_ByteTextBuf& buf, CPDF_ImageObject* pImageObj);
- void ProcessForm(CFX_ByteTextBuf& buf, const uint8_t* data, FX_DWORD size, CFX_Matrix& matrix);
- CFX_ByteString RealizeResource(CPDF_Object* pResourceObj, const FX_CHAR* szType);
-private:
- CPDF_Page* m_pPage;
- CPDF_Document* m_pDocument;
- CFX_PtrArray m_pageObjects;
+class CPDF_PageContentGenerate {
+ public:
+ CPDF_PageContentGenerate(CPDF_Page* pPage);
+ ~CPDF_PageContentGenerate();
+ FX_BOOL InsertPageObject(CPDF_PageObject* pPageObject);
+ void GenerateContent();
+ void TransformContent(CFX_Matrix& matrix);
+
+ protected:
+ void ProcessImage(CFX_ByteTextBuf& buf, CPDF_ImageObject* pImageObj);
+ void ProcessForm(CFX_ByteTextBuf& buf,
+ const uint8_t* data,
+ FX_DWORD size,
+ CFX_Matrix& matrix);
+ CFX_ByteString RealizeResource(CPDF_Object* pResourceObj,
+ const FX_CHAR* szType);
+
+ private:
+ CPDF_Page* m_pPage;
+ CPDF_Document* m_pDocument;
+ CFX_PtrArray m_pageObjects;
};
#endif // CORE_INCLUDE_FPDFAPI_FPDF_PAGE_H_
diff --git a/core/include/fpdfapi/fpdf_pageobj.h b/core/include/fpdfapi/fpdf_pageobj.h
index 73540a3eb3..be81244ef4 100644
--- a/core/include/fpdfapi/fpdf_pageobj.h
+++ b/core/include/fpdfapi/fpdf_pageobj.h
@@ -31,672 +31,540 @@ class CPDF_ShadingObject;
class CPDF_FormObject;
typedef CFX_PathData CPDF_PathData;
-class CPDF_Path : public CFX_CountRef<CFX_PathData>
-{
-public:
- int GetPointCount()
- {
- return m_pObject->m_PointCount;
- }
-
- int GetFlag(int index)
- {
- return m_pObject->m_pPoints[index].m_Flag;
- }
-
- FX_FLOAT GetPointX(int index)
- {
- return m_pObject->m_pPoints[index].m_PointX;
- }
-
- FX_FLOAT GetPointY(int index)
- {
- return m_pObject->m_pPoints[index].m_PointY;
- }
-
-
-
-
- FX_PATHPOINT* GetPoints()
- {
- return m_pObject->m_pPoints;
- }
-
-
- CFX_FloatRect GetBoundingBox() const
- {
- return m_pObject->GetBoundingBox();
- }
-
- CFX_FloatRect GetBoundingBox(FX_FLOAT line_width, FX_FLOAT miter_limit) const
- {
- return m_pObject->GetBoundingBox(line_width, miter_limit);
- }
-
- void Transform(const CFX_AffineMatrix* pMatrix)
- {
- GetModify()->Transform(pMatrix);
- }
-
- void Append(CPDF_Path src, const CFX_AffineMatrix* pMatrix)
- {
- m_pObject->Append(src.m_pObject, pMatrix);
- }
-
- void AppendRect(FX_FLOAT left, FX_FLOAT bottom, FX_FLOAT right, FX_FLOAT top)
- {
- m_pObject->AppendRect(left, bottom, right, top);
- }
-
- FX_BOOL IsRect() const
- {
- return m_pObject->IsRect();
- }
-};
-class CPDF_ClipPathData
-{
-public:
+class CPDF_Path : public CFX_CountRef<CFX_PathData> {
+ public:
+ int GetPointCount() { return m_pObject->m_PointCount; }
+
+ int GetFlag(int index) { return m_pObject->m_pPoints[index].m_Flag; }
- CPDF_ClipPathData();
+ FX_FLOAT GetPointX(int index) { return m_pObject->m_pPoints[index].m_PointX; }
- CPDF_ClipPathData(const CPDF_ClipPathData&);
+ FX_FLOAT GetPointY(int index) { return m_pObject->m_pPoints[index].m_PointY; }
- ~CPDF_ClipPathData();
+ FX_PATHPOINT* GetPoints() { return m_pObject->m_pPoints; }
- void SetCount(int path_count, int text_count);
-public:
+ CFX_FloatRect GetBoundingBox() const { return m_pObject->GetBoundingBox(); }
- int m_PathCount;
+ CFX_FloatRect GetBoundingBox(FX_FLOAT line_width,
+ FX_FLOAT miter_limit) const {
+ return m_pObject->GetBoundingBox(line_width, miter_limit);
+ }
- CPDF_Path* m_pPathList;
+ void Transform(const CFX_AffineMatrix* pMatrix) {
+ GetModify()->Transform(pMatrix);
+ }
- uint8_t* m_pTypeList;
+ void Append(CPDF_Path src, const CFX_AffineMatrix* pMatrix) {
+ m_pObject->Append(src.m_pObject, pMatrix);
+ }
- int m_TextCount;
+ void AppendRect(FX_FLOAT left,
+ FX_FLOAT bottom,
+ FX_FLOAT right,
+ FX_FLOAT top) {
+ m_pObject->AppendRect(left, bottom, right, top);
+ }
- CPDF_TextObject** m_pTextList;
+ FX_BOOL IsRect() const { return m_pObject->IsRect(); }
};
-class CPDF_ClipPath : public CFX_CountRef<CPDF_ClipPathData>
-{
-public:
+class CPDF_ClipPathData {
+ public:
+ CPDF_ClipPathData();
- FX_DWORD GetPathCount() const
- {
- return m_pObject->m_PathCount;
- }
+ CPDF_ClipPathData(const CPDF_ClipPathData&);
- CPDF_Path GetPath(int i) const
- {
- return m_pObject->m_pPathList[i];
- }
+ ~CPDF_ClipPathData();
- int GetClipType(int i) const
- {
- return m_pObject->m_pTypeList[i];
- }
+ void SetCount(int path_count, int text_count);
- FX_DWORD GetTextCount() const
- {
- return m_pObject->m_TextCount;
- }
+ public:
+ int m_PathCount;
- CPDF_TextObject* GetText(int i) const
- {
- return m_pObject->m_pTextList[i];
- }
+ CPDF_Path* m_pPathList;
- CFX_FloatRect GetClipBox() const;
+ uint8_t* m_pTypeList;
- void AppendPath(CPDF_Path path, int type, FX_BOOL bAutoMerge);
+ int m_TextCount;
- void DeletePath(int layer_index);
+ CPDF_TextObject** m_pTextList;
+};
+class CPDF_ClipPath : public CFX_CountRef<CPDF_ClipPathData> {
+ public:
+ FX_DWORD GetPathCount() const { return m_pObject->m_PathCount; }
- void AppendTexts(CPDF_TextObject** pTexts, int count);
+ CPDF_Path GetPath(int i) const { return m_pObject->m_pPathList[i]; }
- void Transform(const CFX_AffineMatrix& matrix);
-};
-class CPDF_ColorStateData
-{
-public:
+ int GetClipType(int i) const { return m_pObject->m_pTypeList[i]; }
- CPDF_ColorStateData(): m_FillRGB(0), m_StrokeRGB(0) {}
+ FX_DWORD GetTextCount() const { return m_pObject->m_TextCount; }
- CPDF_ColorStateData(const CPDF_ColorStateData& src);
+ CPDF_TextObject* GetText(int i) const { return m_pObject->m_pTextList[i]; }
- void Default();
+ CFX_FloatRect GetClipBox() const;
- CPDF_Color m_FillColor;
+ void AppendPath(CPDF_Path path, int type, FX_BOOL bAutoMerge);
- FX_DWORD m_FillRGB;
+ void DeletePath(int layer_index);
- CPDF_Color m_StrokeColor;
+ void AppendTexts(CPDF_TextObject** pTexts, int count);
- FX_DWORD m_StrokeRGB;
+ void Transform(const CFX_AffineMatrix& matrix);
};
-class CPDF_ColorState : public CFX_CountRef<CPDF_ColorStateData>
-{
-public:
+class CPDF_ColorStateData {
+ public:
+ CPDF_ColorStateData() : m_FillRGB(0), m_StrokeRGB(0) {}
- CPDF_Color* GetFillColor() const
- {
- return m_pObject ? &m_pObject->m_FillColor : NULL;
- }
+ CPDF_ColorStateData(const CPDF_ColorStateData& src);
- CPDF_Color* GetStrokeColor() const
- {
- return m_pObject ? &m_pObject->m_StrokeColor : NULL;
- }
+ void Default();
- void SetFillColor(CPDF_ColorSpace* pCS, FX_FLOAT* pValue, int nValues);
+ CPDF_Color m_FillColor;
- void SetStrokeColor(CPDF_ColorSpace* pCS, FX_FLOAT* pValue, int nValues);
+ FX_DWORD m_FillRGB;
- void SetFillPattern(CPDF_Pattern* pattern, FX_FLOAT* pValue, int nValues);
+ CPDF_Color m_StrokeColor;
- void SetStrokePattern(CPDF_Pattern* pattern, FX_FLOAT* pValue, int nValues);
-private:
- void SetColor(CPDF_Color& color, FX_DWORD& rgb, CPDF_ColorSpace* pCS, FX_FLOAT* pValue, int nValues);
-};
-typedef CFX_GraphStateData CPDF_GraphStateData;
-class CPDF_GraphState : public CFX_CountRef<CFX_GraphStateData>
-{
-public:
+ FX_DWORD m_StrokeRGB;
};
-class CPDF_TextStateData
-{
-public:
+class CPDF_ColorState : public CFX_CountRef<CPDF_ColorStateData> {
+ public:
+ CPDF_Color* GetFillColor() const {
+ return m_pObject ? &m_pObject->m_FillColor : NULL;
+ }
- CPDF_TextStateData();
+ CPDF_Color* GetStrokeColor() const {
+ return m_pObject ? &m_pObject->m_StrokeColor : NULL;
+ }
- CPDF_TextStateData(const CPDF_TextStateData& src);
+ void SetFillColor(CPDF_ColorSpace* pCS, FX_FLOAT* pValue, int nValues);
- ~CPDF_TextStateData();
+ void SetStrokeColor(CPDF_ColorSpace* pCS, FX_FLOAT* pValue, int nValues);
- CPDF_Font* m_pFont;
+ void SetFillPattern(CPDF_Pattern* pattern, FX_FLOAT* pValue, int nValues);
- CPDF_Document* m_pDocument;
+ void SetStrokePattern(CPDF_Pattern* pattern, FX_FLOAT* pValue, int nValues);
- FX_FLOAT m_FontSize;
+ private:
+ void SetColor(CPDF_Color& color,
+ FX_DWORD& rgb,
+ CPDF_ColorSpace* pCS,
+ FX_FLOAT* pValue,
+ int nValues);
+};
+typedef CFX_GraphStateData CPDF_GraphStateData;
+class CPDF_GraphState : public CFX_CountRef<CFX_GraphStateData> {
+ public:
+};
+class CPDF_TextStateData {
+ public:
+ CPDF_TextStateData();
- FX_FLOAT m_CharSpace;
+ CPDF_TextStateData(const CPDF_TextStateData& src);
- FX_FLOAT m_WordSpace;
+ ~CPDF_TextStateData();
- FX_FLOAT m_Matrix[4];
+ CPDF_Font* m_pFont;
- int m_TextMode;
+ CPDF_Document* m_pDocument;
- FX_FLOAT m_CTM[4];
-};
-class CPDF_TextState : public CFX_CountRef<CPDF_TextStateData>
-{
-public:
+ FX_FLOAT m_FontSize;
+
+ FX_FLOAT m_CharSpace;
- CPDF_Font* GetFont() const
- {
- return m_pObject->m_pFont;
- }
+ FX_FLOAT m_WordSpace;
- void SetFont(CPDF_Font* pFont);
+ FX_FLOAT m_Matrix[4];
- FX_FLOAT GetFontSize() const
- {
- return m_pObject->m_FontSize;
- }
+ int m_TextMode;
- FX_FLOAT* GetMatrix() const
- {
- return m_pObject->m_Matrix;
- }
+ FX_FLOAT m_CTM[4];
+};
+class CPDF_TextState : public CFX_CountRef<CPDF_TextStateData> {
+ public:
+ CPDF_Font* GetFont() const { return m_pObject->m_pFont; }
+ void SetFont(CPDF_Font* pFont);
+ FX_FLOAT GetFontSize() const { return m_pObject->m_FontSize; }
- FX_FLOAT GetFontSizeV() const;
+ FX_FLOAT* GetMatrix() const { return m_pObject->m_Matrix; }
- FX_FLOAT GetFontSizeH() const;
+ FX_FLOAT GetFontSizeV() const;
- FX_FLOAT GetBaselineAngle() const;
+ FX_FLOAT GetFontSizeH() const;
- FX_FLOAT GetShearAngle() const;
+ FX_FLOAT GetBaselineAngle() const;
+ FX_FLOAT GetShearAngle() const;
};
class CPDF_TransferFunc;
-class CPDF_GeneralStateData
-{
-public:
-
- CPDF_GeneralStateData();
+class CPDF_GeneralStateData {
+ public:
+ CPDF_GeneralStateData();
- CPDF_GeneralStateData(const CPDF_GeneralStateData& src);
- ~CPDF_GeneralStateData();
+ CPDF_GeneralStateData(const CPDF_GeneralStateData& src);
+ ~CPDF_GeneralStateData();
- void SetBlendMode(const CFX_ByteStringC& blend_mode);
+ void SetBlendMode(const CFX_ByteStringC& blend_mode);
- char m_BlendMode[16];
+ char m_BlendMode[16];
- int m_BlendType;
+ int m_BlendType;
- CPDF_Object* m_pSoftMask;
+ CPDF_Object* m_pSoftMask;
- FX_FLOAT m_SMaskMatrix[6];
+ FX_FLOAT m_SMaskMatrix[6];
- FX_FLOAT m_StrokeAlpha;
+ FX_FLOAT m_StrokeAlpha;
- FX_FLOAT m_FillAlpha;
+ FX_FLOAT m_FillAlpha;
- CPDF_Object* m_pTR;
+ CPDF_Object* m_pTR;
- CPDF_TransferFunc* m_pTransferFunc;
+ CPDF_TransferFunc* m_pTransferFunc;
- CFX_Matrix m_Matrix;
+ CFX_Matrix m_Matrix;
- int m_RenderIntent;
+ int m_RenderIntent;
- FX_BOOL m_StrokeAdjust;
+ FX_BOOL m_StrokeAdjust;
- FX_BOOL m_AlphaSource;
+ FX_BOOL m_AlphaSource;
- FX_BOOL m_TextKnockout;
+ FX_BOOL m_TextKnockout;
- FX_BOOL m_StrokeOP;
+ FX_BOOL m_StrokeOP;
- FX_BOOL m_FillOP;
+ FX_BOOL m_FillOP;
- int m_OPMode;
+ int m_OPMode;
- CPDF_Object* m_pBG;
+ CPDF_Object* m_pBG;
- CPDF_Object* m_pUCR;
+ CPDF_Object* m_pUCR;
- CPDF_Object* m_pHT;
+ CPDF_Object* m_pHT;
- FX_FLOAT m_Flatness;
+ FX_FLOAT m_Flatness;
- FX_FLOAT m_Smoothness;
+ FX_FLOAT m_Smoothness;
};
-class CPDF_GeneralState : public CFX_CountRef<CPDF_GeneralStateData>
-{
-public:
-
- void SetRenderIntent(const CFX_ByteString& ri);
-
- int GetBlendType() const
- {
- return m_pObject ? m_pObject->m_BlendType : FXDIB_BLEND_NORMAL;
- }
-
- int GetAlpha(FX_BOOL bStroke) const
- {
- return m_pObject ? FXSYS_round((bStroke ? m_pObject->m_StrokeAlpha : m_pObject->m_FillAlpha) * 255) : 255;
- }
+class CPDF_GeneralState : public CFX_CountRef<CPDF_GeneralStateData> {
+ public:
+ void SetRenderIntent(const CFX_ByteString& ri);
+
+ int GetBlendType() const {
+ return m_pObject ? m_pObject->m_BlendType : FXDIB_BLEND_NORMAL;
+ }
+
+ int GetAlpha(FX_BOOL bStroke) const {
+ return m_pObject ? FXSYS_round((bStroke ? m_pObject->m_StrokeAlpha
+ : m_pObject->m_FillAlpha) *
+ 255)
+ : 255;
+ }
};
-class CPDF_ContentMarkItem
-{
-public:
-
- typedef enum {
- None,
- PropertiesDict,
- DirectDict,
- MCID
- } ParamType;
+class CPDF_ContentMarkItem {
+ public:
+ typedef enum { None, PropertiesDict, DirectDict, MCID } ParamType;
- CPDF_ContentMarkItem();
+ CPDF_ContentMarkItem();
- CPDF_ContentMarkItem(const CPDF_ContentMarkItem& src);
+ CPDF_ContentMarkItem(const CPDF_ContentMarkItem& src);
- ~CPDF_ContentMarkItem();
+ ~CPDF_ContentMarkItem();
- inline const CFX_ByteString& GetName() const
- {
- return m_MarkName;
- }
+ inline const CFX_ByteString& GetName() const { return m_MarkName; }
- inline ParamType GetParamType() const
- {
- return m_ParamType;
- }
+ inline ParamType GetParamType() const { return m_ParamType; }
- inline void* GetParam() const
- {
- return m_pParam;
- }
+ inline void* GetParam() const { return m_pParam; }
- inline FX_BOOL HasMCID() const;
+ inline FX_BOOL HasMCID() const;
- inline void SetName(const CFX_ByteString& name)
- {
- m_MarkName = name;
- }
+ inline void SetName(const CFX_ByteString& name) { m_MarkName = name; }
- inline void SetParam(ParamType type, void* param)
- {
- m_ParamType = type;
- m_pParam = param;
- }
-private:
+ inline void SetParam(ParamType type, void* param) {
+ m_ParamType = type;
+ m_pParam = param;
+ }
- CFX_ByteString m_MarkName;
+ private:
+ CFX_ByteString m_MarkName;
- ParamType m_ParamType;
+ ParamType m_ParamType;
- void* m_pParam;
+ void* m_pParam;
};
-class CPDF_ContentMarkData
-{
-public:
+class CPDF_ContentMarkData {
+ public:
+ CPDF_ContentMarkData() {}
- CPDF_ContentMarkData() { }
+ CPDF_ContentMarkData(const CPDF_ContentMarkData& src);
- CPDF_ContentMarkData(const CPDF_ContentMarkData& src);
+ inline int CountItems() const { return m_Marks.GetSize(); }
- inline int CountItems() const
- {
- return m_Marks.GetSize();
- }
+ inline CPDF_ContentMarkItem& GetItem(int index) const {
+ return m_Marks[index];
+ }
- inline CPDF_ContentMarkItem& GetItem(int index) const
- {
- return m_Marks[index];
- }
+ int GetMCID() const;
- int GetMCID() const;
+ void AddMark(const CFX_ByteString& name,
+ CPDF_Dictionary* pDict,
+ FX_BOOL bDictNeedClone);
- void AddMark(const CFX_ByteString& name, CPDF_Dictionary* pDict, FX_BOOL bDictNeedClone);
+ void DeleteLastMark();
- void DeleteLastMark();
-private:
-
- CFX_ObjectArray<CPDF_ContentMarkItem> m_Marks;
+ private:
+ CFX_ObjectArray<CPDF_ContentMarkItem> m_Marks;
};
-class CPDF_ContentMark : public CFX_CountRef<CPDF_ContentMarkData>
-{
-public:
-
- int GetMCID() const
- {
- return m_pObject ? m_pObject->GetMCID() : -1;
- }
+class CPDF_ContentMark : public CFX_CountRef<CPDF_ContentMarkData> {
+ public:
+ int GetMCID() const { return m_pObject ? m_pObject->GetMCID() : -1; }
- FX_BOOL HasMark(const CFX_ByteStringC& mark) const;
+ FX_BOOL HasMark(const CFX_ByteStringC& mark) const;
- FX_BOOL LookupMark(const CFX_ByteStringC& mark, CPDF_Dictionary*& pDict) const;
+ FX_BOOL LookupMark(const CFX_ByteStringC& mark,
+ CPDF_Dictionary*& pDict) const;
};
-#define PDFPAGE_TEXT 1
-#define PDFPAGE_PATH 2
-#define PDFPAGE_IMAGE 3
-#define PDFPAGE_SHADING 4
-#define PDFPAGE_FORM 5
+#define PDFPAGE_TEXT 1
+#define PDFPAGE_PATH 2
+#define PDFPAGE_IMAGE 3
+#define PDFPAGE_SHADING 4
+#define PDFPAGE_FORM 5
-class CPDF_GraphicStates
-{
-public:
- void CopyStates(const CPDF_GraphicStates& src);
+class CPDF_GraphicStates {
+ public:
+ void CopyStates(const CPDF_GraphicStates& src);
- void DefaultStates();
+ void DefaultStates();
- CPDF_ClipPath m_ClipPath;
+ CPDF_ClipPath m_ClipPath;
- CPDF_GraphState m_GraphState;
+ CPDF_GraphState m_GraphState;
- CPDF_ColorState m_ColorState;
+ CPDF_ColorState m_ColorState;
- CPDF_TextState m_TextState;
+ CPDF_TextState m_TextState;
- CPDF_GeneralState m_GeneralState;
+ CPDF_GeneralState m_GeneralState;
};
-class CPDF_PageObject : public CPDF_GraphicStates
-{
-public:
- static CPDF_PageObject* Create(int type);
- virtual ~CPDF_PageObject();
-
- CPDF_PageObject* Clone() const;
+class CPDF_PageObject : public CPDF_GraphicStates {
+ public:
+ static CPDF_PageObject* Create(int type);
+ virtual ~CPDF_PageObject();
- void Copy(const CPDF_PageObject* pSrcObject);
+ CPDF_PageObject* Clone() const;
- virtual void Transform(const CFX_AffineMatrix& matrix) = 0;
+ void Copy(const CPDF_PageObject* pSrcObject);
- void RemoveClipPath();
+ virtual void Transform(const CFX_AffineMatrix& matrix) = 0;
- void AppendClipPath(CPDF_Path path, int type, FX_BOOL bAutoMerge);
+ void RemoveClipPath();
- void CopyClipPath(CPDF_PageObject* pObj);
+ void AppendClipPath(CPDF_Path path, int type, FX_BOOL bAutoMerge);
- void TransformClipPath(CFX_AffineMatrix& matrix);
+ void CopyClipPath(CPDF_PageObject* pObj);
- void TransformGeneralState(CFX_AffineMatrix& matrix);
+ void TransformClipPath(CFX_AffineMatrix& matrix);
- void SetColorState(CPDF_ColorState state)
- {
- m_ColorState = state;
- }
+ void TransformGeneralState(CFX_AffineMatrix& matrix);
- FX_RECT GetBBox(const CFX_AffineMatrix* pMatrix) const;
+ void SetColorState(CPDF_ColorState state) { m_ColorState = state; }
- int m_Type;
+ FX_RECT GetBBox(const CFX_AffineMatrix* pMatrix) const;
- FX_FLOAT m_Left;
+ int m_Type;
- FX_FLOAT m_Right;
+ FX_FLOAT m_Left;
- FX_FLOAT m_Top;
+ FX_FLOAT m_Right;
- FX_FLOAT m_Bottom;
+ FX_FLOAT m_Top;
- CPDF_ContentMark m_ContentMark;
+ FX_FLOAT m_Bottom;
-protected:
- virtual void CopyData(const CPDF_PageObject* pSrcObject) = 0;
+ CPDF_ContentMark m_ContentMark;
- void RecalcBBox();
+ protected:
+ virtual void CopyData(const CPDF_PageObject* pSrcObject) = 0;
- CPDF_PageObject() {}
+ void RecalcBBox();
+ CPDF_PageObject() {}
};
struct CPDF_TextObjectItem {
- FX_DWORD m_CharCode;
- FX_FLOAT m_OriginX;
- FX_FLOAT m_OriginY;
+ FX_DWORD m_CharCode;
+ FX_FLOAT m_OriginX;
+ FX_FLOAT m_OriginY;
};
-class CPDF_TextObject : public CPDF_PageObject
-{
-public:
- CPDF_TextObject();
- ~CPDF_TextObject() override;
+class CPDF_TextObject : public CPDF_PageObject {
+ public:
+ CPDF_TextObject();
+ ~CPDF_TextObject() override;
- int CountItems() const
- {
- return m_nChars;
- }
+ int CountItems() const { return m_nChars; }
- void GetItemInfo(int index, CPDF_TextObjectItem* pInfo) const;
+ void GetItemInfo(int index, CPDF_TextObjectItem* pInfo) const;
- int CountChars() const;
+ int CountChars() const;
- void GetCharInfo(int index, FX_DWORD& charcode, FX_FLOAT& kerning) const;
- void GetCharInfo(int index, CPDF_TextObjectItem* pInfo) const;
+ void GetCharInfo(int index, FX_DWORD& charcode, FX_FLOAT& kerning) const;
+ void GetCharInfo(int index, CPDF_TextObjectItem* pInfo) const;
- void GetCharRect(int index, CFX_FloatRect& rect) const;
+ void GetCharRect(int index, CFX_FloatRect& rect) const;
- FX_FLOAT GetCharWidth(FX_DWORD charcode) const;
- FX_FLOAT GetSpaceCharWidth() const;
+ FX_FLOAT GetCharWidth(FX_DWORD charcode) const;
+ FX_FLOAT GetSpaceCharWidth() const;
- FX_FLOAT GetPosX() const
- {
- return m_PosX;
- }
+ FX_FLOAT GetPosX() const { return m_PosX; }
- FX_FLOAT GetPosY() const
- {
- return m_PosY;
- }
+ FX_FLOAT GetPosY() const { return m_PosY; }
- void GetTextMatrix(CFX_AffineMatrix* pMatrix) const;
+ void GetTextMatrix(CFX_AffineMatrix* pMatrix) const;
- CPDF_Font* GetFont() const
- {
- return m_TextState.GetFont();
- }
+ CPDF_Font* GetFont() const { return m_TextState.GetFont(); }
- FX_FLOAT GetFontSize() const
- {
- return m_TextState.GetFontSize();
- }
+ FX_FLOAT GetFontSize() const { return m_TextState.GetFontSize(); }
- void SetEmpty();
+ void SetEmpty();
- void SetText(const CFX_ByteString& text);
+ void SetText(const CFX_ByteString& text);
- void SetText(CFX_ByteString* pStrs, FX_FLOAT* pKerning, int nSegs);
+ void SetText(CFX_ByteString* pStrs, FX_FLOAT* pKerning, int nSegs);
- void SetText(int nChars, FX_DWORD* pCharCodes, FX_FLOAT* pKernings);
+ void SetText(int nChars, FX_DWORD* pCharCodes, FX_FLOAT* pKernings);
- void SetPosition(FX_FLOAT x, FX_FLOAT y);
+ void SetPosition(FX_FLOAT x, FX_FLOAT y);
- void SetTextState(CPDF_TextState TextState);
+ void SetTextState(CPDF_TextState TextState);
- // CPDF_PageObject:
- void Transform(const CFX_AffineMatrix& matrix) override;
+ // CPDF_PageObject:
+ void Transform(const CFX_AffineMatrix& matrix) override;
- void CalcCharPos(FX_FLOAT* pPosArray) const;
+ void CalcCharPos(FX_FLOAT* pPosArray) const;
- void SetData(int nChars,
- FX_DWORD* pCharCodes,
- FX_FLOAT* pCharPos,
- FX_FLOAT x,
- FX_FLOAT y);
+ void SetData(int nChars,
+ FX_DWORD* pCharCodes,
+ FX_FLOAT* pCharPos,
+ FX_FLOAT x,
+ FX_FLOAT y);
- void GetData(int& nChars, FX_DWORD*& pCharCodes, FX_FLOAT*& pCharPos)
- {
- nChars = m_nChars;
- pCharCodes = m_pCharCodes;
- pCharPos = m_pCharPos;
- }
+ void GetData(int& nChars, FX_DWORD*& pCharCodes, FX_FLOAT*& pCharPos) {
+ nChars = m_nChars;
+ pCharCodes = m_pCharCodes;
+ pCharPos = m_pCharPos;
+ }
+ void RecalcPositionData() { CalcPositionData(nullptr, nullptr, 1); }
- void RecalcPositionData()
- {
- CalcPositionData(nullptr, nullptr, 1);
- }
+ protected:
+ friend class CPDF_RenderStatus;
+ friend class CPDF_StreamContentParser;
+ friend class CPDF_TextRenderer;
+ friend class CTextPage;
-protected:
- friend class CPDF_RenderStatus;
- friend class CPDF_StreamContentParser;
- friend class CPDF_TextRenderer;
- friend class CTextPage;
+ // CPDF_PageObject:
+ void CopyData(const CPDF_PageObject* pSrcObject) override;
- // CPDF_PageObject:
- void CopyData(const CPDF_PageObject* pSrcObject) override;
+ void SetSegments(const CFX_ByteString* pStrs, FX_FLOAT* pKerning, int nSegs);
- void SetSegments(const CFX_ByteString* pStrs,
- FX_FLOAT* pKerning,
- int nSegs);
+ void CalcPositionData(FX_FLOAT* pTextAdvanceX,
+ FX_FLOAT* pTextAdvanceY,
+ FX_FLOAT horz_scale,
+ int level = 0);
- void CalcPositionData(FX_FLOAT* pTextAdvanceX,
- FX_FLOAT* pTextAdvanceY,
- FX_FLOAT horz_scale,
- int level = 0);
+ FX_FLOAT m_PosX;
+ FX_FLOAT m_PosY;
- FX_FLOAT m_PosX;
- FX_FLOAT m_PosY;
+ int m_nChars;
- int m_nChars;
+ FX_DWORD* m_pCharCodes;
- FX_DWORD* m_pCharCodes;
-
- FX_FLOAT* m_pCharPos;
+ FX_FLOAT* m_pCharPos;
};
-class CPDF_PathObject : public CPDF_PageObject
-{
-public:
- CPDF_PathObject()
- {
- m_Type = PDFPAGE_PATH;
- }
-
- virtual ~CPDF_PathObject() {}
- void Transform(const CFX_AffineMatrix& maxtrix) override;
+class CPDF_PathObject : public CPDF_PageObject {
+ public:
+ CPDF_PathObject() { m_Type = PDFPAGE_PATH; }
- void SetGraphState(CPDF_GraphState GraphState);
+ virtual ~CPDF_PathObject() {}
+ void Transform(const CFX_AffineMatrix& maxtrix) override;
- CPDF_Path m_Path;
+ void SetGraphState(CPDF_GraphState GraphState);
- int m_FillType;
+ CPDF_Path m_Path;
- FX_BOOL m_bStroke;
+ int m_FillType;
- CFX_AffineMatrix m_Matrix;
+ FX_BOOL m_bStroke;
+ CFX_AffineMatrix m_Matrix;
- void CalcBoundingBox();
+ void CalcBoundingBox();
-protected:
- void CopyData(const CPDF_PageObject* pSrcObject) override;
+ protected:
+ void CopyData(const CPDF_PageObject* pSrcObject) override;
};
-class CPDF_ImageObject : public CPDF_PageObject
-{
-public:
- CPDF_ImageObject();
+class CPDF_ImageObject : public CPDF_PageObject {
+ public:
+ CPDF_ImageObject();
- virtual ~CPDF_ImageObject();
- void Transform(const CFX_AffineMatrix& matrix) override;
+ virtual ~CPDF_ImageObject();
+ void Transform(const CFX_AffineMatrix& matrix) override;
- CPDF_Image* m_pImage;
+ CPDF_Image* m_pImage;
- CFX_AffineMatrix m_Matrix;
+ CFX_AffineMatrix m_Matrix;
- void CalcBoundingBox();
+ void CalcBoundingBox();
-private:
- void CopyData(const CPDF_PageObject* pSrcObject) override;
+ private:
+ void CopyData(const CPDF_PageObject* pSrcObject) override;
};
-class CPDF_ShadingObject : public CPDF_PageObject
-{
-public:
- CPDF_ShadingObject();
+class CPDF_ShadingObject : public CPDF_PageObject {
+ public:
+ CPDF_ShadingObject();
- virtual ~CPDF_ShadingObject();
+ virtual ~CPDF_ShadingObject();
- CPDF_ShadingPattern* m_pShading;
+ CPDF_ShadingPattern* m_pShading;
- CFX_AffineMatrix m_Matrix;
+ CFX_AffineMatrix m_Matrix;
- void Transform(const CFX_AffineMatrix& matrix) override;
+ void Transform(const CFX_AffineMatrix& matrix) override;
- void CalcBoundingBox();
+ void CalcBoundingBox();
-protected:
- void CopyData(const CPDF_PageObject* pSrcObject) override;
+ protected:
+ void CopyData(const CPDF_PageObject* pSrcObject) override;
};
-class CPDF_FormObject : public CPDF_PageObject
-{
-public:
- CPDF_FormObject()
- {
- m_Type = PDFPAGE_FORM;
- m_pForm = NULL;
- }
+class CPDF_FormObject : public CPDF_PageObject {
+ public:
+ CPDF_FormObject() {
+ m_Type = PDFPAGE_FORM;
+ m_pForm = NULL;
+ }
- virtual ~CPDF_FormObject();
- void Transform(const CFX_AffineMatrix& matrix) override;
+ virtual ~CPDF_FormObject();
+ void Transform(const CFX_AffineMatrix& matrix) override;
- CPDF_Form* m_pForm;
+ CPDF_Form* m_pForm;
- CFX_AffineMatrix m_FormMatrix;
+ CFX_AffineMatrix m_FormMatrix;
- void CalcBoundingBox();
+ void CalcBoundingBox();
-protected:
- void CopyData(const CPDF_PageObject* pSrcObject) override;
+ protected:
+ void CopyData(const CPDF_PageObject* pSrcObject) override;
};
#endif // CORE_INCLUDE_FPDFAPI_FPDF_PAGEOBJ_H_
diff --git a/core/include/fpdfapi/fpdf_parser.h b/core/include/fpdfapi/fpdf_parser.h
index 951085b33a..f80bb24a87 100644
--- a/core/include/fpdfapi/fpdf_parser.h
+++ b/core/include/fpdfapi/fpdf_parser.h
@@ -34,15 +34,15 @@ class CPDF_Pattern;
class CPDF_FontEncoding;
class CPDF_IccProfile;
class CFX_PrivateData;
-#define FPDFPERM_PRINT 0x0004
-#define FPDFPERM_MODIFY 0x0008
-#define FPDFPERM_EXTRACT 0x0010
-#define FPDFPERM_ANNOT_FORM 0x0020
-#define FPDFPERM_FILL_FORM 0x0100
-#define FPDFPERM_EXTRACT_ACCESS 0x0200
-#define FPDFPERM_ASSEMBLE 0x0400
-#define FPDFPERM_PRINT_HIGH 0x0800
-#define FPDF_PAGE_MAX_NUM 0xFFFFF
+#define FPDFPERM_PRINT 0x0004
+#define FPDFPERM_MODIFY 0x0008
+#define FPDFPERM_EXTRACT 0x0010
+#define FPDFPERM_ANNOT_FORM 0x0020
+#define FPDFPERM_FILL_FORM 0x0100
+#define FPDFPERM_EXTRACT_ACCESS 0x0200
+#define FPDFPERM_ASSEMBLE 0x0400
+#define FPDFPERM_PRINT_HIGH 0x0800
+#define FPDF_PAGE_MAX_NUM 0xFFFFF
// Indexed by 8-bit character code, contains either:
// 'W' - for whitespace: NUL, TAB, CR, LF, FF, 0x80, 0xff
@@ -51,859 +51,862 @@ class CFX_PrivateData;
// 'R' - otherwise.
extern const char PDF_CharType[256];
-class CPDF_Document : public CFX_PrivateData, public CPDF_IndirectObjects
-{
-public:
- CPDF_Document();
- explicit CPDF_Document(CPDF_Parser* pParser);
+class CPDF_Document : public CFX_PrivateData, public CPDF_IndirectObjects {
+ public:
+ CPDF_Document();
+ explicit CPDF_Document(CPDF_Parser* pParser);
- ~CPDF_Document();
+ ~CPDF_Document();
- CPDF_Parser* GetParser() const
- {
- return m_pParser;
- }
+ CPDF_Parser* GetParser() const { return m_pParser; }
- CPDF_Dictionary* GetRoot() const
- {
- return m_pRootDict;
- }
+ CPDF_Dictionary* GetRoot() const { return m_pRootDict; }
- CPDF_Dictionary* GetInfo() const
- {
- return m_pInfoDict;
- }
+ CPDF_Dictionary* GetInfo() const { return m_pInfoDict; }
- void GetID(CFX_ByteString& id1, CFX_ByteString& id2) const
- {
- id1 = m_ID1;
- id2 = m_ID2;
- }
+ void GetID(CFX_ByteString& id1, CFX_ByteString& id2) const {
+ id1 = m_ID1;
+ id2 = m_ID2;
+ }
- int GetPageCount() const;
+ int GetPageCount() const;
- CPDF_Dictionary* GetPage(int iPage);
+ CPDF_Dictionary* GetPage(int iPage);
- int GetPageIndex(FX_DWORD objnum);
+ int GetPageIndex(FX_DWORD objnum);
- FX_DWORD GetUserPermissions(FX_BOOL bCheckRevision = FALSE) const;
+ FX_DWORD GetUserPermissions(FX_BOOL bCheckRevision = FALSE) const;
- FX_BOOL IsOwner() const;
+ FX_BOOL IsOwner() const;
+ CPDF_DocPageData* GetPageData() { return GetValidatePageData(); }
+ void ClearPageData();
- CPDF_DocPageData* GetPageData()
- {
- return GetValidatePageData();
- }
+ void RemoveColorSpaceFromPageData(CPDF_Object* pObject);
- void ClearPageData();
+ CPDF_DocRenderData* GetRenderData() { return GetValidateRenderData(); }
- void RemoveColorSpaceFromPageData(CPDF_Object* pObject);
+ void ClearRenderData();
+ void ClearRenderFont();
- CPDF_DocRenderData* GetRenderData()
- {
- return GetValidateRenderData();
- }
+ FX_BOOL IsFormStream(FX_DWORD objnum, FX_BOOL& bForm) const;
- void ClearRenderData();
+ // |pFontDict| must not be null.
+ CPDF_Font* LoadFont(CPDF_Dictionary* pFontDict);
- void ClearRenderFont();
+ CPDF_ColorSpace* LoadColorSpace(CPDF_Object* pCSObj,
+ CPDF_Dictionary* pResources = NULL);
+ CPDF_Pattern* LoadPattern(CPDF_Object* pObj,
+ FX_BOOL bShading,
+ const CFX_AffineMatrix* matrix = NULL);
- FX_BOOL IsFormStream(FX_DWORD objnum, FX_BOOL& bForm) const;
+ CPDF_Image* LoadImageF(CPDF_Object* pObj);
- // |pFontDict| must not be null.
- CPDF_Font* LoadFont(CPDF_Dictionary* pFontDict);
+ CPDF_StreamAcc* LoadFontFile(CPDF_Stream* pStream);
- CPDF_ColorSpace* LoadColorSpace(CPDF_Object* pCSObj, CPDF_Dictionary* pResources = NULL);
-
- CPDF_Pattern* LoadPattern(CPDF_Object* pObj, FX_BOOL bShading, const CFX_AffineMatrix* matrix = NULL);
-
- CPDF_Image* LoadImageF(CPDF_Object* pObj);
-
- CPDF_StreamAcc* LoadFontFile(CPDF_Stream* pStream);
-
- CPDF_IccProfile* LoadIccProfile(CPDF_Stream* pStream);
+ CPDF_IccProfile* LoadIccProfile(CPDF_Stream* pStream);
#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
- CPDF_Font* AddWindowsFont(LOGFONTA* pLogFont, FX_BOOL bVert, FX_BOOL bTranslateName = FALSE);
- CPDF_Font* AddWindowsFont(LOGFONTW* pLogFont, FX_BOOL bVert, FX_BOOL bTranslateName = FALSE);
+ CPDF_Font* AddWindowsFont(LOGFONTA* pLogFont,
+ FX_BOOL bVert,
+ FX_BOOL bTranslateName = FALSE);
+ CPDF_Font* AddWindowsFont(LOGFONTW* pLogFont,
+ FX_BOOL bVert,
+ FX_BOOL bTranslateName = FALSE);
#endif
#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
- CPDF_Font* AddMacFont(CTFontRef pFont, FX_BOOL bVert, FX_BOOL bTranslateName = FALSE);
+ CPDF_Font* AddMacFont(CTFontRef pFont,
+ FX_BOOL bVert,
+ FX_BOOL bTranslateName = FALSE);
#endif
- CPDF_Font* AddStandardFont(const FX_CHAR* font, CPDF_FontEncoding* pEncoding);
-
-
- CPDF_Font* AddFont(CFX_Font* pFont, int charset, FX_BOOL bVert);
-
- void CreateNewDoc();
-
- CPDF_Dictionary* CreateNewPage(int iPage);
+ CPDF_Font* AddStandardFont(const FX_CHAR* font, CPDF_FontEncoding* pEncoding);
- void DeletePage(int iPage);
+ CPDF_Font* AddFont(CFX_Font* pFont, int charset, FX_BOOL bVert);
- void LoadDoc();
- void LoadAsynDoc(CPDF_Dictionary *pLinearized);
- void LoadPages();
-protected:
+ void CreateNewDoc();
- CPDF_Dictionary* m_pRootDict;
+ CPDF_Dictionary* CreateNewPage(int iPage);
- CPDF_Dictionary* m_pInfoDict;
+ void DeletePage(int iPage);
- CFX_ByteString m_ID1;
+ void LoadDoc();
+ void LoadAsynDoc(CPDF_Dictionary* pLinearized);
+ void LoadPages();
- CFX_ByteString m_ID2;
+ protected:
+ CPDF_Dictionary* m_pRootDict;
+ CPDF_Dictionary* m_pInfoDict;
- FX_BOOL m_bLinearized;
+ CFX_ByteString m_ID1;
- FX_DWORD m_dwFirstPageNo;
+ CFX_ByteString m_ID2;
- FX_DWORD m_dwFirstPageObjNum;
+ FX_BOOL m_bLinearized;
- CFX_DWordArray m_PageList;
+ FX_DWORD m_dwFirstPageNo;
- int _GetPageCount() const;
- CPDF_Dictionary* _FindPDFPage(CPDF_Dictionary* pPages, int iPage, int nPagesToGo, int level);
- int _FindPageIndex(CPDF_Dictionary* pNode, FX_DWORD& skip_count, FX_DWORD objnum, int& index, int level = 0);
- FX_BOOL IsContentUsedElsewhere(FX_DWORD objnum, CPDF_Dictionary* pPageDict);
- FX_BOOL CheckOCGVisible(CPDF_Dictionary* pOCG, FX_BOOL bPrinting);
- CPDF_DocPageData* GetValidatePageData();
- CPDF_DocRenderData* GetValidateRenderData();
- friend class CPDF_Creator;
- friend class CPDF_Parser;
- friend class CPDF_DataAvail;
- friend class CPDF_OCContext;
+ FX_DWORD m_dwFirstPageObjNum;
+ CFX_DWordArray m_PageList;
+ int _GetPageCount() const;
+ CPDF_Dictionary* _FindPDFPage(CPDF_Dictionary* pPages,
+ int iPage,
+ int nPagesToGo,
+ int level);
+ int _FindPageIndex(CPDF_Dictionary* pNode,
+ FX_DWORD& skip_count,
+ FX_DWORD objnum,
+ int& index,
+ int level = 0);
+ FX_BOOL IsContentUsedElsewhere(FX_DWORD objnum, CPDF_Dictionary* pPageDict);
+ FX_BOOL CheckOCGVisible(CPDF_Dictionary* pOCG, FX_BOOL bPrinting);
+ CPDF_DocPageData* GetValidatePageData();
+ CPDF_DocRenderData* GetValidateRenderData();
+ friend class CPDF_Creator;
+ friend class CPDF_Parser;
+ friend class CPDF_DataAvail;
+ friend class CPDF_OCContext;
- CPDF_DocPageData* m_pDocPage;
-
- CPDF_DocRenderData* m_pDocRender;
+ CPDF_DocPageData* m_pDocPage;
+ CPDF_DocRenderData* m_pDocRender;
};
-#define PDFWORD_EOF 0
-#define PDFWORD_NUMBER 1
-#define PDFWORD_TEXT 2
-#define PDFWORD_DELIMITER 3
-#define PDFWORD_NAME 4
-class CPDF_SimpleParser
-{
-public:
-
- CPDF_SimpleParser(const uint8_t* pData, FX_DWORD dwSize);
+#define PDFWORD_EOF 0
+#define PDFWORD_NUMBER 1
+#define PDFWORD_TEXT 2
+#define PDFWORD_DELIMITER 3
+#define PDFWORD_NAME 4
+class CPDF_SimpleParser {
+ public:
+ CPDF_SimpleParser(const uint8_t* pData, FX_DWORD dwSize);
- CPDF_SimpleParser(const CFX_ByteStringC& str);
+ CPDF_SimpleParser(const CFX_ByteStringC& str);
- CFX_ByteStringC GetWord();
+ CFX_ByteStringC GetWord();
- FX_BOOL SearchToken(const CFX_ByteStringC& token);
+ FX_BOOL SearchToken(const CFX_ByteStringC& token);
- FX_BOOL SkipWord(const CFX_ByteStringC& token);
+ FX_BOOL SkipWord(const CFX_ByteStringC& token);
- FX_BOOL FindTagPair(const CFX_ByteStringC& start_token, const CFX_ByteStringC& end_token,
- FX_DWORD& start_pos, FX_DWORD& end_pos);
+ FX_BOOL FindTagPair(const CFX_ByteStringC& start_token,
+ const CFX_ByteStringC& end_token,
+ FX_DWORD& start_pos,
+ FX_DWORD& end_pos);
- FX_BOOL FindTagParam(const CFX_ByteStringC& token, int nParams);
+ FX_BOOL FindTagParam(const CFX_ByteStringC& token, int nParams);
- FX_DWORD GetPos()
- {
- return m_dwCurPos;
- }
+ FX_DWORD GetPos() { return m_dwCurPos; }
- void SetPos(FX_DWORD pos)
- {
- ASSERT(pos <= m_dwSize);
- m_dwCurPos = pos;
- }
-private:
+ void SetPos(FX_DWORD pos) {
+ ASSERT(pos <= m_dwSize);
+ m_dwCurPos = pos;
+ }
- void ParseWord(const uint8_t*& pStart, FX_DWORD& dwSize, int& type);
+ private:
+ void ParseWord(const uint8_t*& pStart, FX_DWORD& dwSize, int& type);
- const uint8_t* m_pData;
+ const uint8_t* m_pData;
- FX_DWORD m_dwSize;
+ FX_DWORD m_dwSize;
- FX_DWORD m_dwCurPos;
+ FX_DWORD m_dwCurPos;
};
-class CPDF_SyntaxParser
-{
-public:
+class CPDF_SyntaxParser {
+ public:
+ CPDF_SyntaxParser();
+ virtual ~CPDF_SyntaxParser();
- CPDF_SyntaxParser();
- virtual ~CPDF_SyntaxParser();
+ void InitParser(IFX_FileRead* pFileAccess, FX_DWORD HeaderOffset);
- void InitParser(IFX_FileRead* pFileAccess, FX_DWORD HeaderOffset);
+ FX_FILESIZE SavePos() { return m_Pos; }
- FX_FILESIZE SavePos()
- {
- return m_Pos;
- }
+ void RestorePos(FX_FILESIZE pos) { m_Pos = pos; }
- void RestorePos(FX_FILESIZE pos)
- {
- m_Pos = pos;
- }
+ CPDF_Object* GetObject(CPDF_IndirectObjects* pObjList,
+ FX_DWORD objnum,
+ FX_DWORD gennum,
+ struct PARSE_CONTEXT* pContext = NULL,
+ FX_BOOL bDecrypt = TRUE);
- CPDF_Object* GetObject(CPDF_IndirectObjects* pObjList, FX_DWORD objnum, FX_DWORD gennum, struct PARSE_CONTEXT* pContext = NULL, FX_BOOL bDecrypt = TRUE);
+ CPDF_Object* GetObjectByStrict(CPDF_IndirectObjects* pObjList,
+ FX_DWORD objnum,
+ FX_DWORD gennum,
+ struct PARSE_CONTEXT* pContext = NULL);
+ int GetDirectNum();
- CPDF_Object* GetObjectByStrict(CPDF_IndirectObjects* pObjList, FX_DWORD objnum, FX_DWORD gennum, struct PARSE_CONTEXT* pContext = NULL);
+ CFX_ByteString GetString(FX_DWORD objnum, FX_DWORD gennum);
- int GetDirectNum();
+ CFX_ByteString GetName();
- CFX_ByteString GetString(FX_DWORD objnum, FX_DWORD gennum);
+ CFX_ByteString GetKeyword();
- CFX_ByteString GetName();
+ void GetBinary(uint8_t* buffer, FX_DWORD size);
- CFX_ByteString GetKeyword();
+ void ToNextLine();
- void GetBinary(uint8_t* buffer, FX_DWORD size);
+ void ToNextWord();
- void ToNextLine();
+ FX_BOOL SearchWord(const CFX_ByteStringC& word,
+ FX_BOOL bWholeWord,
+ FX_BOOL bForward,
+ FX_FILESIZE limit);
- void ToNextWord();
+ int SearchMultiWord(const CFX_ByteStringC& words,
+ FX_BOOL bWholeWord,
+ FX_FILESIZE limit);
- FX_BOOL SearchWord(const CFX_ByteStringC& word, FX_BOOL bWholeWord, FX_BOOL bForward, FX_FILESIZE limit);
+ FX_FILESIZE FindTag(const CFX_ByteStringC& tag, FX_FILESIZE limit);
- int SearchMultiWord(const CFX_ByteStringC& words, FX_BOOL bWholeWord, FX_FILESIZE limit);
+ void SetEncrypt(CPDF_CryptoHandler* pCryptoHandler) {
+ m_pCryptoHandler = pCryptoHandler;
+ }
- FX_FILESIZE FindTag(const CFX_ByteStringC& tag, FX_FILESIZE limit);
+ FX_BOOL IsEncrypted() { return m_pCryptoHandler != NULL; }
- void SetEncrypt(CPDF_CryptoHandler* pCryptoHandler)
- {
- m_pCryptoHandler = pCryptoHandler;
- }
+ FX_BOOL GetCharAt(FX_FILESIZE pos, uint8_t& ch);
- FX_BOOL IsEncrypted()
- {
- return m_pCryptoHandler != NULL;
- }
+ FX_BOOL ReadBlock(uint8_t* pBuf, FX_DWORD size);
- FX_BOOL GetCharAt(FX_FILESIZE pos, uint8_t& ch);
+ CFX_ByteString GetNextWord(FX_BOOL& bIsNumber);
- FX_BOOL ReadBlock(uint8_t* pBuf, FX_DWORD size);
+ protected:
+ static const int kParserMaxRecursionDepth = 64;
+ static int s_CurrentRecursionDepth;
- CFX_ByteString GetNextWord(FX_BOOL& bIsNumber);
-protected:
- static const int kParserMaxRecursionDepth = 64;
- static int s_CurrentRecursionDepth;
+ virtual FX_BOOL GetNextChar(uint8_t& ch);
- virtual FX_BOOL GetNextChar(uint8_t& ch);
+ FX_BOOL GetCharAtBackward(FX_FILESIZE pos, uint8_t& ch);
- FX_BOOL GetCharAtBackward(FX_FILESIZE pos, uint8_t& ch);
+ void GetNextWord();
- void GetNextWord();
+ FX_BOOL IsWholeWord(FX_FILESIZE startpos,
+ FX_FILESIZE limit,
+ const uint8_t* tag,
+ FX_DWORD taglen);
- FX_BOOL IsWholeWord(FX_FILESIZE startpos, FX_FILESIZE limit, const uint8_t* tag, FX_DWORD taglen);
+ CFX_ByteString ReadString();
- CFX_ByteString ReadString();
+ CFX_ByteString ReadHexString();
- CFX_ByteString ReadHexString();
+ CPDF_Stream* ReadStream(CPDF_Dictionary* pDict,
+ PARSE_CONTEXT* pContext,
+ FX_DWORD objnum,
+ FX_DWORD gennum);
- CPDF_Stream* ReadStream(CPDF_Dictionary* pDict, PARSE_CONTEXT* pContext, FX_DWORD objnum, FX_DWORD gennum);
+ FX_FILESIZE m_Pos;
- FX_FILESIZE m_Pos;
+ FX_BOOL m_bFileStream;
- FX_BOOL m_bFileStream;
+ int m_MetadataObjnum;
- int m_MetadataObjnum;
+ IFX_FileRead* m_pFileAccess;
- IFX_FileRead* m_pFileAccess;
+ FX_DWORD m_HeaderOffset;
- FX_DWORD m_HeaderOffset;
+ FX_FILESIZE m_FileLen;
- FX_FILESIZE m_FileLen;
+ uint8_t* m_pFileBuf;
- uint8_t* m_pFileBuf;
+ FX_DWORD m_BufSize;
- FX_DWORD m_BufSize;
+ FX_FILESIZE m_BufOffset;
- FX_FILESIZE m_BufOffset;
+ CPDF_CryptoHandler* m_pCryptoHandler;
- CPDF_CryptoHandler* m_pCryptoHandler;
+ uint8_t m_WordBuffer[257];
- uint8_t m_WordBuffer[257];
+ FX_DWORD m_WordSize;
- FX_DWORD m_WordSize;
+ FX_BOOL m_bIsNumber;
- FX_BOOL m_bIsNumber;
-
- FX_FILESIZE m_dwWordPos;
- friend class CPDF_Parser;
- friend class CPDF_DataAvail;
+ FX_FILESIZE m_dwWordPos;
+ friend class CPDF_Parser;
+ friend class CPDF_DataAvail;
};
-#define PDFPARSE_TYPEONLY 1
-#define PDFPARSE_NOSTREAM 2
+#define PDFPARSE_TYPEONLY 1
+#define PDFPARSE_NOSTREAM 2
struct PARSE_CONTEXT {
- uint32_t m_Flags;
- FX_FILESIZE m_DictStart;
- FX_FILESIZE m_DictEnd;
- FX_FILESIZE m_DataStart;
- FX_FILESIZE m_DataEnd;
+ uint32_t m_Flags;
+ FX_FILESIZE m_DictStart;
+ FX_FILESIZE m_DictEnd;
+ FX_FILESIZE m_DataStart;
+ FX_FILESIZE m_DataEnd;
};
-#define PDFPARSE_ERROR_SUCCESS 0
-#define PDFPARSE_ERROR_FILE 1
-#define PDFPARSE_ERROR_FORMAT 2
-#define PDFPARSE_ERROR_PASSWORD 3
-#define PDFPARSE_ERROR_HANDLER 4
-#define PDFPARSE_ERROR_CERT 5
-
-class CPDF_Parser
-{
-public:
- CPDF_Parser();
- ~CPDF_Parser();
+#define PDFPARSE_ERROR_SUCCESS 0
+#define PDFPARSE_ERROR_FILE 1
+#define PDFPARSE_ERROR_FORMAT 2
+#define PDFPARSE_ERROR_PASSWORD 3
+#define PDFPARSE_ERROR_HANDLER 4
+#define PDFPARSE_ERROR_CERT 5
- FX_DWORD StartParse(const FX_CHAR* filename, FX_BOOL bReParse = FALSE);
- FX_DWORD StartParse(const FX_WCHAR* filename, FX_BOOL bReParse = FALSE);
- FX_DWORD StartParse(IFX_FileRead* pFile, FX_BOOL bReParse = FALSE, FX_BOOL bOwnFileRead = TRUE);
+class CPDF_Parser {
+ public:
+ CPDF_Parser();
+ ~CPDF_Parser();
- void CloseParser(FX_BOOL bReParse = FALSE);
-
- FX_DWORD GetPermissions(FX_BOOL bCheckRevision = FALSE);
+ FX_DWORD StartParse(const FX_CHAR* filename, FX_BOOL bReParse = FALSE);
+ FX_DWORD StartParse(const FX_WCHAR* filename, FX_BOOL bReParse = FALSE);
+ FX_DWORD StartParse(IFX_FileRead* pFile,
+ FX_BOOL bReParse = FALSE,
+ FX_BOOL bOwnFileRead = TRUE);
- FX_BOOL IsOwner();
-
- void SetPassword(const FX_CHAR* password)
- {
- m_Password = password;
- }
-
- CFX_ByteString GetPassword()
- {
- return m_Password;
- }
+ void CloseParser(FX_BOOL bReParse = FALSE);
- CPDF_SecurityHandler* GetSecurityHandler()
- {
- return m_pSecurityHandler;
- }
-
- CPDF_CryptoHandler* GetCryptoHandler()
- {
- return m_Syntax.m_pCryptoHandler;
- }
-
- void SetSecurityHandler(CPDF_SecurityHandler* pSecurityHandler, FX_BOOL bForced = FALSE);
+ FX_DWORD GetPermissions(FX_BOOL bCheckRevision = FALSE);
- CFX_ByteString GetRecipient()
- {
- return m_bsRecipient;
- }
+ FX_BOOL IsOwner();
- CPDF_Dictionary* GetTrailer()
- {
- return m_pTrailer;
- }
+ void SetPassword(const FX_CHAR* password) { m_Password = password; }
- FX_FILESIZE GetLastXRefOffset()
- {
- return m_LastXRefOffset;
- }
+ CFX_ByteString GetPassword() { return m_Password; }
- CPDF_Document* GetDocument()
- {
- return m_pDocument;
- }
+ CPDF_SecurityHandler* GetSecurityHandler() { return m_pSecurityHandler; }
- CFX_ArrayTemplate<CPDF_Dictionary*>* GetOtherTrailers()
- {
- return &m_Trailers;
- }
+ CPDF_CryptoHandler* GetCryptoHandler() { return m_Syntax.m_pCryptoHandler; }
- FX_DWORD GetRootObjNum();
- FX_DWORD GetInfoObjNum() ;
- CPDF_Array* GetIDArray() ;
+ void SetSecurityHandler(CPDF_SecurityHandler* pSecurityHandler,
+ FX_BOOL bForced = FALSE);
- CPDF_Dictionary* GetEncryptDict()
- {
- return m_pEncryptDict;
- }
+ CFX_ByteString GetRecipient() { return m_bsRecipient; }
- FX_BOOL IsEncrypted()
- {
- return GetEncryptDict() != NULL;
- }
+ CPDF_Dictionary* GetTrailer() { return m_pTrailer; }
+ FX_FILESIZE GetLastXRefOffset() { return m_LastXRefOffset; }
- CPDF_Object* ParseIndirectObject(CPDF_IndirectObjects* pObjList, FX_DWORD objnum, PARSE_CONTEXT* pContext = NULL) ;
- FX_DWORD GetLastObjNum();
- FX_BOOL IsFormStream(FX_DWORD objnum, FX_BOOL& bForm);
+ CPDF_Document* GetDocument() { return m_pDocument; }
- FX_FILESIZE GetObjectOffset(FX_DWORD objnum);
+ CFX_ArrayTemplate<CPDF_Dictionary*>* GetOtherTrailers() {
+ return &m_Trailers;
+ }
- FX_FILESIZE GetObjectSize(FX_DWORD objnum);
+ FX_DWORD GetRootObjNum();
+ FX_DWORD GetInfoObjNum();
+ CPDF_Array* GetIDArray();
- int GetObjectVersion(FX_DWORD objnum)
- {
- return m_ObjVersion[objnum];
- }
+ CPDF_Dictionary* GetEncryptDict() { return m_pEncryptDict; }
- void GetIndirectBinary(FX_DWORD objnum, uint8_t*& pBuffer, FX_DWORD& size);
+ FX_BOOL IsEncrypted() { return GetEncryptDict() != NULL; }
- FX_BOOL GetFileStreamOption()
- {
- return m_Syntax.m_bFileStream;
- }
+ CPDF_Object* ParseIndirectObject(CPDF_IndirectObjects* pObjList,
+ FX_DWORD objnum,
+ PARSE_CONTEXT* pContext = NULL);
+ FX_DWORD GetLastObjNum();
+ FX_BOOL IsFormStream(FX_DWORD objnum, FX_BOOL& bForm);
- void SetFileStreamOption(FX_BOOL b)
- {
- m_Syntax.m_bFileStream = b;
- }
+ FX_FILESIZE GetObjectOffset(FX_DWORD objnum);
- IFX_FileRead* GetFileAccess() const
- {
- return m_Syntax.m_pFileAccess;
- }
+ FX_FILESIZE GetObjectSize(FX_DWORD objnum);
- int GetFileVersion() const
- {
- return m_FileVersion;
- }
+ int GetObjectVersion(FX_DWORD objnum) { return m_ObjVersion[objnum]; }
- FX_BOOL IsXRefStream() const
- {
- return m_bXRefStream;
- }
- CPDF_Object* ParseIndirectObjectAt(CPDF_IndirectObjects* pObjList, FX_FILESIZE pos, FX_DWORD objnum,
- struct PARSE_CONTEXT* pContext);
+ void GetIndirectBinary(FX_DWORD objnum, uint8_t*& pBuffer, FX_DWORD& size);
- CPDF_Object* ParseIndirectObjectAtByStrict(CPDF_IndirectObjects* pObjList, FX_FILESIZE pos, FX_DWORD objnum,
- struct PARSE_CONTEXT* pContext, FX_FILESIZE *pResultPos);
+ FX_BOOL GetFileStreamOption() { return m_Syntax.m_bFileStream; }
- FX_DWORD StartAsynParse(IFX_FileRead* pFile, FX_BOOL bReParse = FALSE, FX_BOOL bOwnFileRead = TRUE);
+ void SetFileStreamOption(FX_BOOL b) { m_Syntax.m_bFileStream = b; }
- FX_DWORD GetFirstPageNo()
- {
- return m_dwFirstPageNo;
- }
-protected:
- CPDF_Document* m_pDocument;
+ IFX_FileRead* GetFileAccess() const { return m_Syntax.m_pFileAccess; }
- CPDF_SyntaxParser m_Syntax;
- FX_BOOL m_bOwnFileRead;
- CPDF_Object* ParseDirect(CPDF_Object* pObj);
+ int GetFileVersion() const { return m_FileVersion; }
- FX_BOOL LoadAllCrossRefV4(FX_FILESIZE pos);
+ FX_BOOL IsXRefStream() const { return m_bXRefStream; }
+ CPDF_Object* ParseIndirectObjectAt(CPDF_IndirectObjects* pObjList,
+ FX_FILESIZE pos,
+ FX_DWORD objnum,
+ struct PARSE_CONTEXT* pContext);
- FX_BOOL LoadAllCrossRefV5(FX_FILESIZE pos);
+ CPDF_Object* ParseIndirectObjectAtByStrict(CPDF_IndirectObjects* pObjList,
+ FX_FILESIZE pos,
+ FX_DWORD objnum,
+ struct PARSE_CONTEXT* pContext,
+ FX_FILESIZE* pResultPos);
- FX_BOOL LoadCrossRefV4(FX_FILESIZE pos, FX_FILESIZE streampos, FX_BOOL bSkip, FX_BOOL bFirst);
+ FX_DWORD StartAsynParse(IFX_FileRead* pFile,
+ FX_BOOL bReParse = FALSE,
+ FX_BOOL bOwnFileRead = TRUE);
- FX_BOOL LoadCrossRefV5(FX_FILESIZE pos, FX_FILESIZE& prev, FX_BOOL bMainXRef);
+ FX_DWORD GetFirstPageNo() { return m_dwFirstPageNo; }
- CPDF_Dictionary* LoadTrailerV4();
+ protected:
+ CPDF_Document* m_pDocument;
- FX_BOOL RebuildCrossRef();
+ CPDF_SyntaxParser m_Syntax;
+ FX_BOOL m_bOwnFileRead;
+ CPDF_Object* ParseDirect(CPDF_Object* pObj);
- FX_DWORD SetEncryptHandler();
+ FX_BOOL LoadAllCrossRefV4(FX_FILESIZE pos);
- void ReleaseEncryptHandler();
+ FX_BOOL LoadAllCrossRefV5(FX_FILESIZE pos);
- FX_BOOL LoadLinearizedAllCrossRefV4(FX_FILESIZE pos, FX_DWORD dwObjCount);
+ FX_BOOL LoadCrossRefV4(FX_FILESIZE pos,
+ FX_FILESIZE streampos,
+ FX_BOOL bSkip,
+ FX_BOOL bFirst);
- FX_BOOL LoadLinearizedCrossRefV4(FX_FILESIZE pos, FX_DWORD dwObjCount);
+ FX_BOOL LoadCrossRefV5(FX_FILESIZE pos, FX_FILESIZE& prev, FX_BOOL bMainXRef);
- FX_BOOL LoadLinearizedAllCrossRefV5(FX_FILESIZE pos);
+ CPDF_Dictionary* LoadTrailerV4();
- FX_DWORD LoadLinearizedMainXRefTable();
+ FX_BOOL RebuildCrossRef();
- CFX_MapPtrToPtr m_ObjectStreamMap;
+ FX_DWORD SetEncryptHandler();
- CPDF_StreamAcc* GetObjectStream(FX_DWORD number);
+ void ReleaseEncryptHandler();
- FX_BOOL IsLinearizedFile(IFX_FileRead* pFileAccess, FX_DWORD offset);
+ FX_BOOL LoadLinearizedAllCrossRefV4(FX_FILESIZE pos, FX_DWORD dwObjCount);
+ FX_BOOL LoadLinearizedCrossRefV4(FX_FILESIZE pos, FX_DWORD dwObjCount);
+ FX_BOOL LoadLinearizedAllCrossRefV5(FX_FILESIZE pos);
- int m_FileVersion;
+ FX_DWORD LoadLinearizedMainXRefTable();
- CPDF_Dictionary* m_pTrailer;
+ CFX_MapPtrToPtr m_ObjectStreamMap;
- CPDF_Dictionary* m_pEncryptDict;
- void SetEncryptDictionary(CPDF_Dictionary* pDict);
+ CPDF_StreamAcc* GetObjectStream(FX_DWORD number);
- FX_FILESIZE m_LastXRefOffset;
+ FX_BOOL IsLinearizedFile(IFX_FileRead* pFileAccess, FX_DWORD offset);
- FX_BOOL m_bXRefStream;
+ int m_FileVersion;
+ CPDF_Dictionary* m_pTrailer;
- CPDF_SecurityHandler* m_pSecurityHandler;
+ CPDF_Dictionary* m_pEncryptDict;
+ void SetEncryptDictionary(CPDF_Dictionary* pDict);
- FX_BOOL m_bForceUseSecurityHandler;
+ FX_FILESIZE m_LastXRefOffset;
- CFX_ByteString m_bsRecipient;
+ FX_BOOL m_bXRefStream;
- CFX_ByteString m_FilePath;
+ CPDF_SecurityHandler* m_pSecurityHandler;
- CFX_ByteString m_Password;
+ FX_BOOL m_bForceUseSecurityHandler;
- CFX_FileSizeArray m_CrossRef;
+ CFX_ByteString m_bsRecipient;
- CFX_ByteArray m_V5Type;
+ CFX_ByteString m_FilePath;
- CFX_FileSizeArray m_SortedOffset;
+ CFX_ByteString m_Password;
- CFX_WordArray m_ObjVersion;
- CFX_ArrayTemplate<CPDF_Dictionary *> m_Trailers;
+ CFX_FileSizeArray m_CrossRef;
- FX_BOOL m_bVersionUpdated;
+ CFX_ByteArray m_V5Type;
- CPDF_Object* m_pLinearized;
-
- FX_DWORD m_dwFirstPageNo;
-
- FX_DWORD m_dwXrefStartObjNum;
- friend class CPDF_Creator;
- friend class CPDF_DataAvail;
-};
-#define FXCIPHER_NONE 0
-#define FXCIPHER_RC4 1
-#define FXCIPHER_AES 2
-#define FXCIPHER_AES2 3
-class CPDF_SecurityHandler
-{
-public:
+ CFX_FileSizeArray m_SortedOffset;
- virtual ~CPDF_SecurityHandler() {}
+ CFX_WordArray m_ObjVersion;
+ CFX_ArrayTemplate<CPDF_Dictionary*> m_Trailers;
- virtual FX_BOOL OnInit(CPDF_Parser* pParser, CPDF_Dictionary* pEncryptDict) = 0;
+ FX_BOOL m_bVersionUpdated;
- virtual FX_DWORD GetPermissions() = 0;
+ CPDF_Object* m_pLinearized;
- virtual FX_BOOL IsOwner() = 0;
+ FX_DWORD m_dwFirstPageNo;
- virtual FX_BOOL GetCryptInfo(int& cipher, const uint8_t*& buffer, int& keylen) = 0;
-
- virtual FX_BOOL IsMetadataEncrypted()
- {
- return TRUE;
- }
-
- virtual CPDF_CryptoHandler* CreateCryptoHandler() = 0;
-
- virtual CPDF_StandardSecurityHandler* GetStandardHandler()
- {
- return NULL;
- }
-};
-#define PDF_ENCRYPT_CONTENT 0
-class CPDF_StandardSecurityHandler : public CPDF_SecurityHandler
-{
-public:
- CPDF_StandardSecurityHandler();
-
- virtual ~CPDF_StandardSecurityHandler();
- virtual FX_BOOL OnInit(CPDF_Parser* pParser, CPDF_Dictionary* pEncryptDict);
- virtual FX_DWORD GetPermissions();
- virtual FX_BOOL IsOwner()
- {
- return m_bOwner;
- }
- virtual FX_BOOL GetCryptInfo(int& cipher, const uint8_t*& buffer, int& keylen);
- virtual FX_BOOL IsMetadataEncrypted();
- virtual CPDF_CryptoHandler* CreateCryptoHandler();
- virtual CPDF_StandardSecurityHandler* GetStandardHandler()
- {
- return this;
- }
-
- void OnCreate(CPDF_Dictionary* pEncryptDict, CPDF_Array* pIdArray,
- const uint8_t* user_pass, FX_DWORD user_size,
- const uint8_t* owner_pass, FX_DWORD owner_size, FX_DWORD type = PDF_ENCRYPT_CONTENT);
-
- void OnCreate(CPDF_Dictionary* pEncryptDict, CPDF_Array* pIdArray,
- const uint8_t* user_pass, FX_DWORD user_size, FX_DWORD type = PDF_ENCRYPT_CONTENT);
-
- CFX_ByteString GetUserPassword(const uint8_t* owner_pass, FX_DWORD pass_size);
- CFX_ByteString GetUserPassword(const uint8_t* owner_pass, FX_DWORD pass_size, int32_t key_len);
- int GetVersion()
- {
- return m_Version;
- }
- int GetRevision()
- {
- return m_Revision;
- }
-
- int CheckPassword(const uint8_t* password, FX_DWORD pass_size, FX_BOOL bOwner, uint8_t* key);
- int CheckPassword(const uint8_t* password, FX_DWORD pass_size, FX_BOOL bOwner, uint8_t* key, int key_len);
-private:
-
- int m_Version;
-
- int m_Revision;
-
- CPDF_Parser* m_pParser;
-
- CPDF_Dictionary* m_pEncryptDict;
-
- FX_BOOL LoadDict(CPDF_Dictionary* pEncryptDict);
- FX_BOOL LoadDict(CPDF_Dictionary* pEncryptDict, FX_DWORD type, int& cipher, int& key_len);
-
- FX_BOOL CheckUserPassword(const uint8_t* password, FX_DWORD pass_size,
- FX_BOOL bIgnoreEncryptMeta, uint8_t* key, int32_t key_len);
-
- FX_BOOL CheckOwnerPassword(const uint8_t* password, FX_DWORD pass_size, uint8_t* key, int32_t key_len);
- FX_BOOL AES256_CheckPassword(const uint8_t* password, FX_DWORD size, FX_BOOL bOwner, uint8_t* key);
- void AES256_SetPassword(CPDF_Dictionary* pEncryptDict, const uint8_t* password, FX_DWORD size, FX_BOOL bOwner, const uint8_t* key);
- void AES256_SetPerms(CPDF_Dictionary* pEncryptDict, FX_DWORD permission, FX_BOOL bEncryptMetadata, const uint8_t* key);
- void OnCreate(CPDF_Dictionary* pEncryptDict, CPDF_Array* pIdArray,
- const uint8_t* user_pass, FX_DWORD user_size,
- const uint8_t* owner_pass, FX_DWORD owner_size, FX_BOOL bDefault, FX_DWORD type);
- FX_BOOL CheckSecurity(int32_t key_len);
-
- FX_BOOL m_bOwner;
-
- FX_DWORD m_Permissions;
-
- int m_Cipher;
-
- uint8_t m_EncryptKey[32];
-
- int m_KeyLen;
+ FX_DWORD m_dwXrefStartObjNum;
+ friend class CPDF_Creator;
+ friend class CPDF_DataAvail;
};
-class CPDF_CryptoHandler
-{
-public:
-
- virtual ~CPDF_CryptoHandler() {}
-
- virtual FX_BOOL Init(CPDF_Dictionary* pEncryptDict, CPDF_SecurityHandler* pSecurityHandler) = 0;
-
- virtual FX_DWORD DecryptGetSize(FX_DWORD src_size) = 0;
+#define FXCIPHER_NONE 0
+#define FXCIPHER_RC4 1
+#define FXCIPHER_AES 2
+#define FXCIPHER_AES2 3
+class CPDF_SecurityHandler {
+ public:
+ virtual ~CPDF_SecurityHandler() {}
- virtual void* DecryptStart(FX_DWORD objnum, FX_DWORD gennum) = 0;
+ virtual FX_BOOL OnInit(CPDF_Parser* pParser,
+ CPDF_Dictionary* pEncryptDict) = 0;
- virtual FX_BOOL DecryptStream(void* context, const uint8_t* src_buf, FX_DWORD src_size, CFX_BinaryBuf& dest_buf) = 0;
+ virtual FX_DWORD GetPermissions() = 0;
- virtual FX_BOOL DecryptFinish(void* context, CFX_BinaryBuf& dest_buf) = 0;
+ virtual FX_BOOL IsOwner() = 0;
+ virtual FX_BOOL GetCryptInfo(int& cipher,
+ const uint8_t*& buffer,
+ int& keylen) = 0;
- virtual FX_DWORD EncryptGetSize(FX_DWORD objnum, FX_DWORD version, const uint8_t* src_buf, FX_DWORD src_size) = 0;
+ virtual FX_BOOL IsMetadataEncrypted() { return TRUE; }
- virtual FX_BOOL EncryptContent(FX_DWORD objnum, FX_DWORD version, const uint8_t* src_buf, FX_DWORD src_size,
- uint8_t* dest_buf, FX_DWORD& dest_size) = 0;
+ virtual CPDF_CryptoHandler* CreateCryptoHandler() = 0;
- void Decrypt(FX_DWORD objnum, FX_DWORD version, CFX_ByteString& str);
+ virtual CPDF_StandardSecurityHandler* GetStandardHandler() { return NULL; }
};
-class CPDF_StandardCryptoHandler : public CPDF_CryptoHandler
-{
-public:
+#define PDF_ENCRYPT_CONTENT 0
+class CPDF_StandardSecurityHandler : public CPDF_SecurityHandler {
+ public:
+ CPDF_StandardSecurityHandler();
+
+ virtual ~CPDF_StandardSecurityHandler();
+ virtual FX_BOOL OnInit(CPDF_Parser* pParser, CPDF_Dictionary* pEncryptDict);
+ virtual FX_DWORD GetPermissions();
+ virtual FX_BOOL IsOwner() { return m_bOwner; }
+ virtual FX_BOOL GetCryptInfo(int& cipher,
+ const uint8_t*& buffer,
+ int& keylen);
+ virtual FX_BOOL IsMetadataEncrypted();
+ virtual CPDF_CryptoHandler* CreateCryptoHandler();
+ virtual CPDF_StandardSecurityHandler* GetStandardHandler() { return this; }
+
+ void OnCreate(CPDF_Dictionary* pEncryptDict,
+ CPDF_Array* pIdArray,
+ const uint8_t* user_pass,
+ FX_DWORD user_size,
+ const uint8_t* owner_pass,
+ FX_DWORD owner_size,
+ FX_DWORD type = PDF_ENCRYPT_CONTENT);
+
+ void OnCreate(CPDF_Dictionary* pEncryptDict,
+ CPDF_Array* pIdArray,
+ const uint8_t* user_pass,
+ FX_DWORD user_size,
+ FX_DWORD type = PDF_ENCRYPT_CONTENT);
+
+ CFX_ByteString GetUserPassword(const uint8_t* owner_pass, FX_DWORD pass_size);
+ CFX_ByteString GetUserPassword(const uint8_t* owner_pass,
+ FX_DWORD pass_size,
+ int32_t key_len);
+ int GetVersion() { return m_Version; }
+ int GetRevision() { return m_Revision; }
+
+ int CheckPassword(const uint8_t* password,
+ FX_DWORD pass_size,
+ FX_BOOL bOwner,
+ uint8_t* key);
+ int CheckPassword(const uint8_t* password,
+ FX_DWORD pass_size,
+ FX_BOOL bOwner,
+ uint8_t* key,
+ int key_len);
+
+ private:
+ int m_Version;
+
+ int m_Revision;
+
+ CPDF_Parser* m_pParser;
+
+ CPDF_Dictionary* m_pEncryptDict;
+
+ FX_BOOL LoadDict(CPDF_Dictionary* pEncryptDict);
+ FX_BOOL LoadDict(CPDF_Dictionary* pEncryptDict,
+ FX_DWORD type,
+ int& cipher,
+ int& key_len);
+
+ FX_BOOL CheckUserPassword(const uint8_t* password,
+ FX_DWORD pass_size,
+ FX_BOOL bIgnoreEncryptMeta,
+ uint8_t* key,
+ int32_t key_len);
+
+ FX_BOOL CheckOwnerPassword(const uint8_t* password,
+ FX_DWORD pass_size,
+ uint8_t* key,
+ int32_t key_len);
+ FX_BOOL AES256_CheckPassword(const uint8_t* password,
+ FX_DWORD size,
+ FX_BOOL bOwner,
+ uint8_t* key);
+ void AES256_SetPassword(CPDF_Dictionary* pEncryptDict,
+ const uint8_t* password,
+ FX_DWORD size,
+ FX_BOOL bOwner,
+ const uint8_t* key);
+ void AES256_SetPerms(CPDF_Dictionary* pEncryptDict,
+ FX_DWORD permission,
+ FX_BOOL bEncryptMetadata,
+ const uint8_t* key);
+ void OnCreate(CPDF_Dictionary* pEncryptDict,
+ CPDF_Array* pIdArray,
+ const uint8_t* user_pass,
+ FX_DWORD user_size,
+ const uint8_t* owner_pass,
+ FX_DWORD owner_size,
+ FX_BOOL bDefault,
+ FX_DWORD type);
+ FX_BOOL CheckSecurity(int32_t key_len);
+
+ FX_BOOL m_bOwner;
+
+ FX_DWORD m_Permissions;
+
+ int m_Cipher;
+
+ uint8_t m_EncryptKey[32];
+
+ int m_KeyLen;
+};
+class CPDF_CryptoHandler {
+ public:
+ virtual ~CPDF_CryptoHandler() {}
- CPDF_StandardCryptoHandler();
+ virtual FX_BOOL Init(CPDF_Dictionary* pEncryptDict,
+ CPDF_SecurityHandler* pSecurityHandler) = 0;
- virtual ~CPDF_StandardCryptoHandler();
+ virtual FX_DWORD DecryptGetSize(FX_DWORD src_size) = 0;
- FX_BOOL Init(int cipher, const uint8_t* key, int keylen);
- virtual FX_BOOL Init(CPDF_Dictionary* pEncryptDict, CPDF_SecurityHandler* pSecurityHandler);
- virtual FX_DWORD DecryptGetSize(FX_DWORD src_size);
- virtual void* DecryptStart(FX_DWORD objnum, FX_DWORD gennum);
- virtual FX_BOOL DecryptStream(void* context, const uint8_t* src_buf, FX_DWORD src_size, CFX_BinaryBuf& dest_buf);
- virtual FX_BOOL DecryptFinish(void* context, CFX_BinaryBuf& dest_buf);
- virtual FX_DWORD EncryptGetSize(FX_DWORD objnum, FX_DWORD version, const uint8_t* src_buf, FX_DWORD src_size);
- virtual FX_BOOL EncryptContent(FX_DWORD objnum, FX_DWORD version, const uint8_t* src_buf, FX_DWORD src_size,
- uint8_t* dest_buf, FX_DWORD& dest_size);
-protected:
+ virtual void* DecryptStart(FX_DWORD objnum, FX_DWORD gennum) = 0;
- virtual void CryptBlock(FX_BOOL bEncrypt, FX_DWORD objnum, FX_DWORD gennum, const uint8_t* src_buf, FX_DWORD src_size,
- uint8_t* dest_buf, FX_DWORD& dest_size);
- virtual void* CryptStart(FX_DWORD objnum, FX_DWORD gennum, FX_BOOL bEncrypt);
- virtual FX_BOOL CryptStream(void* context, const uint8_t* src_buf, FX_DWORD src_size, CFX_BinaryBuf& dest_buf, FX_BOOL bEncrypt);
- virtual FX_BOOL CryptFinish(void* context, CFX_BinaryBuf& dest_buf, FX_BOOL bEncrypt);
+ virtual FX_BOOL DecryptStream(void* context,
+ const uint8_t* src_buf,
+ FX_DWORD src_size,
+ CFX_BinaryBuf& dest_buf) = 0;
- uint8_t m_EncryptKey[32];
+ virtual FX_BOOL DecryptFinish(void* context, CFX_BinaryBuf& dest_buf) = 0;
- int m_KeyLen;
+ virtual FX_DWORD EncryptGetSize(FX_DWORD objnum,
+ FX_DWORD version,
+ const uint8_t* src_buf,
+ FX_DWORD src_size) = 0;
- int m_Cipher;
+ virtual FX_BOOL EncryptContent(FX_DWORD objnum,
+ FX_DWORD version,
+ const uint8_t* src_buf,
+ FX_DWORD src_size,
+ uint8_t* dest_buf,
+ FX_DWORD& dest_size) = 0;
- uint8_t* m_pAESContext;
+ void Decrypt(FX_DWORD objnum, FX_DWORD version, CFX_ByteString& str);
};
-class CPDF_Point
-{
-public:
-
- CPDF_Point(FX_FLOAT xx, FX_FLOAT yy)
- {
- x = xx;
- y = yy;
- }
+class CPDF_StandardCryptoHandler : public CPDF_CryptoHandler {
+ public:
+ CPDF_StandardCryptoHandler();
+
+ virtual ~CPDF_StandardCryptoHandler();
+
+ FX_BOOL Init(int cipher, const uint8_t* key, int keylen);
+ virtual FX_BOOL Init(CPDF_Dictionary* pEncryptDict,
+ CPDF_SecurityHandler* pSecurityHandler);
+ virtual FX_DWORD DecryptGetSize(FX_DWORD src_size);
+ virtual void* DecryptStart(FX_DWORD objnum, FX_DWORD gennum);
+ virtual FX_BOOL DecryptStream(void* context,
+ const uint8_t* src_buf,
+ FX_DWORD src_size,
+ CFX_BinaryBuf& dest_buf);
+ virtual FX_BOOL DecryptFinish(void* context, CFX_BinaryBuf& dest_buf);
+ virtual FX_DWORD EncryptGetSize(FX_DWORD objnum,
+ FX_DWORD version,
+ const uint8_t* src_buf,
+ FX_DWORD src_size);
+ virtual FX_BOOL EncryptContent(FX_DWORD objnum,
+ FX_DWORD version,
+ const uint8_t* src_buf,
+ FX_DWORD src_size,
+ uint8_t* dest_buf,
+ FX_DWORD& dest_size);
+
+ protected:
+ virtual void CryptBlock(FX_BOOL bEncrypt,
+ FX_DWORD objnum,
+ FX_DWORD gennum,
+ const uint8_t* src_buf,
+ FX_DWORD src_size,
+ uint8_t* dest_buf,
+ FX_DWORD& dest_size);
+ virtual void* CryptStart(FX_DWORD objnum, FX_DWORD gennum, FX_BOOL bEncrypt);
+ virtual FX_BOOL CryptStream(void* context,
+ const uint8_t* src_buf,
+ FX_DWORD src_size,
+ CFX_BinaryBuf& dest_buf,
+ FX_BOOL bEncrypt);
+ virtual FX_BOOL CryptFinish(void* context,
+ CFX_BinaryBuf& dest_buf,
+ FX_BOOL bEncrypt);
+
+ uint8_t m_EncryptKey[32];
+
+ int m_KeyLen;
+
+ int m_Cipher;
+
+ uint8_t* m_pAESContext;
+};
+class CPDF_Point {
+ public:
+ CPDF_Point(FX_FLOAT xx, FX_FLOAT yy) {
+ x = xx;
+ y = yy;
+ }
- FX_FLOAT x;
+ FX_FLOAT x;
- FX_FLOAT y;
+ FX_FLOAT y;
};
-#define CPDF_Rect CFX_FloatRect
-#define CPDF_Matrix CFX_AffineMatrix
+#define CPDF_Rect CFX_FloatRect
+#define CPDF_Matrix CFX_AffineMatrix
CFX_ByteString PDF_NameDecode(const CFX_ByteStringC& orig);
CFX_ByteString PDF_NameDecode(const CFX_ByteString& orig);
CFX_ByteString PDF_NameEncode(const CFX_ByteString& orig);
-CFX_ByteString PDF_EncodeString(const CFX_ByteString& src, FX_BOOL bHex = FALSE);
-CFX_WideString PDF_DecodeText(const uint8_t* pData, FX_DWORD size, CFX_CharMap* pCharMap = NULL);
-inline CFX_WideString PDF_DecodeText(const CFX_ByteString& bstr, CFX_CharMap* pCharMap = NULL) {
- return PDF_DecodeText((const uint8_t*)bstr.c_str(), bstr.GetLength(), pCharMap);
+CFX_ByteString PDF_EncodeString(const CFX_ByteString& src,
+ FX_BOOL bHex = FALSE);
+CFX_WideString PDF_DecodeText(const uint8_t* pData,
+ FX_DWORD size,
+ CFX_CharMap* pCharMap = NULL);
+inline CFX_WideString PDF_DecodeText(const CFX_ByteString& bstr,
+ CFX_CharMap* pCharMap = NULL) {
+ return PDF_DecodeText((const uint8_t*)bstr.c_str(), bstr.GetLength(),
+ pCharMap);
}
-CFX_ByteString PDF_EncodeText(const FX_WCHAR* pString, int len = -1, CFX_CharMap* pCharMap = NULL);
-inline CFX_ByteString PDF_EncodeText(const CFX_WideString& str, CFX_CharMap* pCharMap = NULL) {
- return PDF_EncodeText(str.c_str(), str.GetLength(), pCharMap);
+CFX_ByteString PDF_EncodeText(const FX_WCHAR* pString,
+ int len = -1,
+ CFX_CharMap* pCharMap = NULL);
+inline CFX_ByteString PDF_EncodeText(const CFX_WideString& str,
+ CFX_CharMap* pCharMap = NULL) {
+ return PDF_EncodeText(str.c_str(), str.GetLength(), pCharMap);
}
FX_FLOAT PDF_ClipFloat(FX_FLOAT f);
-class CFDF_Document : public CPDF_IndirectObjects
-{
-public:
- static CFDF_Document* CreateNewDoc();
- static CFDF_Document* ParseFile(IFX_FileRead *pFile, FX_BOOL bOwnFile = FALSE);
- static CFDF_Document* ParseMemory(const uint8_t* pData, FX_DWORD size);
-
- ~CFDF_Document();
-
- FX_BOOL WriteBuf(CFX_ByteTextBuf& buf) const;
-
- CPDF_Dictionary* GetRoot() const
- {
- return m_pRootDict;
- }
-
- CFX_WideString GetWin32Path() const;
-protected:
-
- CFDF_Document();
- void ParseStream(IFX_FileRead *pFile, FX_BOOL bOwnFile);
- CPDF_Dictionary* m_pRootDict;
- IFX_FileRead* m_pFile;
- FX_BOOL m_bOwnFile;
-};
+class CFDF_Document : public CPDF_IndirectObjects {
+ public:
+ static CFDF_Document* CreateNewDoc();
+ static CFDF_Document* ParseFile(IFX_FileRead* pFile,
+ FX_BOOL bOwnFile = FALSE);
+ static CFDF_Document* ParseMemory(const uint8_t* pData, FX_DWORD size);
-CFX_WideString FPDF_FileSpec_GetWin32Path(const CPDF_Object* pFileSpec);
-void FPDF_FileSpec_SetWin32Path(CPDF_Object* pFileSpec, const CFX_WideString& fullpath);
+ ~CFDF_Document();
-void FlateEncode(const uint8_t* src_buf, FX_DWORD src_size, uint8_t*& dest_buf, FX_DWORD& dest_size);
-FX_DWORD FlateDecode(const uint8_t* src_buf, FX_DWORD src_size, uint8_t*& dest_buf, FX_DWORD& dest_size);
-FX_DWORD RunLengthDecode(const uint8_t* src_buf, FX_DWORD src_size, uint8_t*& dest_buf, FX_DWORD& dest_size);
-class CPDF_NumberTree
-{
-public:
+ FX_BOOL WriteBuf(CFX_ByteTextBuf& buf) const;
- CPDF_NumberTree(CPDF_Dictionary* pRoot)
- {
- m_pRoot = pRoot;
- }
+ CPDF_Dictionary* GetRoot() const { return m_pRootDict; }
- CPDF_Object* LookupValue(int num);
-protected:
+ CFX_WideString GetWin32Path() const;
- CPDF_Dictionary* m_pRoot;
+ protected:
+ CFDF_Document();
+ void ParseStream(IFX_FileRead* pFile, FX_BOOL bOwnFile);
+ CPDF_Dictionary* m_pRootDict;
+ IFX_FileRead* m_pFile;
+ FX_BOOL m_bOwnFile;
};
-class IFX_FileAvail
-{
-public:
- virtual ~IFX_FileAvail() { }
- virtual FX_BOOL IsDataAvail( FX_FILESIZE offset, FX_DWORD size) = 0;
+CFX_WideString FPDF_FileSpec_GetWin32Path(const CPDF_Object* pFileSpec);
+void FPDF_FileSpec_SetWin32Path(CPDF_Object* pFileSpec,
+ const CFX_WideString& fullpath);
+
+void FlateEncode(const uint8_t* src_buf,
+ FX_DWORD src_size,
+ uint8_t*& dest_buf,
+ FX_DWORD& dest_size);
+FX_DWORD FlateDecode(const uint8_t* src_buf,
+ FX_DWORD src_size,
+ uint8_t*& dest_buf,
+ FX_DWORD& dest_size);
+FX_DWORD RunLengthDecode(const uint8_t* src_buf,
+ FX_DWORD src_size,
+ uint8_t*& dest_buf,
+ FX_DWORD& dest_size);
+class CPDF_NumberTree {
+ public:
+ CPDF_NumberTree(CPDF_Dictionary* pRoot) { m_pRoot = pRoot; }
+
+ CPDF_Object* LookupValue(int num);
+
+ protected:
+ CPDF_Dictionary* m_pRoot;
};
-class IFX_DownloadHints
-{
-public:
- virtual ~IFX_DownloadHints() { }
- virtual void AddSegment(FX_FILESIZE offset, FX_DWORD size) = 0;
+
+class IFX_FileAvail {
+ public:
+ virtual ~IFX_FileAvail() {}
+ virtual FX_BOOL IsDataAvail(FX_FILESIZE offset, FX_DWORD size) = 0;
};
-#define PDF_IS_LINEARIZED 1
-#define PDF_NOT_LINEARIZED 0
-#define PDF_UNKNOW_LINEARIZED -1
-#define PDFFORM_NOTAVAIL 0
-#define PDFFORM_AVAIL 1
-#define PDFFORM_NOTEXIST 2
-class IPDF_DataAvail
-{
-public:
- static IPDF_DataAvail* Create(IFX_FileAvail* pFileAvail, IFX_FileRead* pFileRead);
- virtual ~IPDF_DataAvail() { }
-
- IFX_FileAvail* GetFileAvail() const { return m_pFileAvail; }
- IFX_FileRead* GetFileRead() const { return m_pFileRead; }
-
- virtual FX_BOOL IsDocAvail(IFX_DownloadHints* pHints) = 0;
- virtual void SetDocument(CPDF_Document* pDoc) = 0;
- virtual FX_BOOL IsPageAvail(int iPage, IFX_DownloadHints* pHints) = 0;
- virtual FX_BOOL IsLinearized() = 0;
- virtual int32_t IsFormAvail(IFX_DownloadHints *pHints) = 0;
- virtual int32_t IsLinearizedPDF() = 0;
- virtual void GetLinearizedMainXRefInfo(FX_FILESIZE *pPos, FX_DWORD *pSize) = 0;
-
-protected:
- IPDF_DataAvail(IFX_FileAvail* pFileAvail, IFX_FileRead* pFileRead);
-
- IFX_FileAvail* m_pFileAvail;
- IFX_FileRead* m_pFileRead;
+class IFX_DownloadHints {
+ public:
+ virtual ~IFX_DownloadHints() {}
+ virtual void AddSegment(FX_FILESIZE offset, FX_DWORD size) = 0;
};
-class CPDF_SortObjNumArray
-{
-public:
-
- void AddObjNum(FX_DWORD dwObjNum);
+#define PDF_IS_LINEARIZED 1
+#define PDF_NOT_LINEARIZED 0
+#define PDF_UNKNOW_LINEARIZED -1
+#define PDFFORM_NOTAVAIL 0
+#define PDFFORM_AVAIL 1
+#define PDFFORM_NOTEXIST 2
+class IPDF_DataAvail {
+ public:
+ static IPDF_DataAvail* Create(IFX_FileAvail* pFileAvail,
+ IFX_FileRead* pFileRead);
+ virtual ~IPDF_DataAvail() {}
+
+ IFX_FileAvail* GetFileAvail() const { return m_pFileAvail; }
+ IFX_FileRead* GetFileRead() const { return m_pFileRead; }
+
+ virtual FX_BOOL IsDocAvail(IFX_DownloadHints* pHints) = 0;
+ virtual void SetDocument(CPDF_Document* pDoc) = 0;
+ virtual FX_BOOL IsPageAvail(int iPage, IFX_DownloadHints* pHints) = 0;
+ virtual FX_BOOL IsLinearized() = 0;
+ virtual int32_t IsFormAvail(IFX_DownloadHints* pHints) = 0;
+ virtual int32_t IsLinearizedPDF() = 0;
+ virtual void GetLinearizedMainXRefInfo(FX_FILESIZE* pPos,
+ FX_DWORD* pSize) = 0;
+
+ protected:
+ IPDF_DataAvail(IFX_FileAvail* pFileAvail, IFX_FileRead* pFileRead);
+
+ IFX_FileAvail* m_pFileAvail;
+ IFX_FileRead* m_pFileRead;
+};
+class CPDF_SortObjNumArray {
+ public:
+ void AddObjNum(FX_DWORD dwObjNum);
- FX_BOOL Find(FX_DWORD dwObjNum);
+ FX_BOOL Find(FX_DWORD dwObjNum);
- void RemoveAll()
- {
- m_number_array.RemoveAll();
- }
-protected:
+ void RemoveAll() { m_number_array.RemoveAll(); }
- FX_BOOL BinarySearch(FX_DWORD value, int &iNext);
-protected:
+ protected:
+ FX_BOOL BinarySearch(FX_DWORD value, int& iNext);
- CFX_DWordArray m_number_array;
+ protected:
+ CFX_DWordArray m_number_array;
};
enum PDF_PAGENODE_TYPE {
- PDF_PAGENODE_UNKOWN = 0,
- PDF_PAGENODE_PAGE,
- PDF_PAGENODE_PAGES,
- PDF_PAGENODE_ARRAY,
+ PDF_PAGENODE_UNKOWN = 0,
+ PDF_PAGENODE_PAGE,
+ PDF_PAGENODE_PAGES,
+ PDF_PAGENODE_ARRAY,
};
-class CPDF_PageNode
-{
-public:
- CPDF_PageNode() : m_type(PDF_PAGENODE_UNKOWN) {}
- ~CPDF_PageNode();
- PDF_PAGENODE_TYPE m_type;
- FX_DWORD m_dwPageNo;
- CFX_PtrArray m_childNode;
+class CPDF_PageNode {
+ public:
+ CPDF_PageNode() : m_type(PDF_PAGENODE_UNKOWN) {}
+ ~CPDF_PageNode();
+ PDF_PAGENODE_TYPE m_type;
+ FX_DWORD m_dwPageNo;
+ CFX_PtrArray m_childNode;
};
enum PDF_DATAAVAIL_STATUS {
- PDF_DATAAVAIL_HEADER = 0,
- PDF_DATAAVAIL_FIRSTPAGE,
- PDF_DATAAVAIL_FIRSTPAGE_PREPARE,
- PDF_DATAAVAIL_END,
- PDF_DATAAVAIL_CROSSREF,
- PDF_DATAAVAIL_CROSSREF_ITEM,
- PDF_DATAAVAIL_CROSSREF_STREAM,
- PDF_DATAAVAIL_TRAILER,
- PDF_DATAAVAIL_LOADALLCRSOSSREF,
- PDF_DATAAVAIL_ROOT,
- PDF_DATAAVAIL_INFO,
- PDF_DATAAVAIL_ACROFORM,
- PDF_DATAAVAIL_ACROFORM_SUBOBJECT,
- PDF_DATAAVAIL_PAGETREE,
- PDF_DATAAVAIL_PAGE,
- PDF_DATAAVAIL_PAGE_LATERLOAD,
- PDF_DATAAVAIL_RESOURCES,
- PDF_DATAAVAIL_DONE,
- PDF_DATAAVAIL_ERROR,
- PDF_DATAAVAIL_LOADALLFILE,
- PDF_DATAAVAIL_TRAILER_APPEND
+ PDF_DATAAVAIL_HEADER = 0,
+ PDF_DATAAVAIL_FIRSTPAGE,
+ PDF_DATAAVAIL_FIRSTPAGE_PREPARE,
+ PDF_DATAAVAIL_END,
+ PDF_DATAAVAIL_CROSSREF,
+ PDF_DATAAVAIL_CROSSREF_ITEM,
+ PDF_DATAAVAIL_CROSSREF_STREAM,
+ PDF_DATAAVAIL_TRAILER,
+ PDF_DATAAVAIL_LOADALLCRSOSSREF,
+ PDF_DATAAVAIL_ROOT,
+ PDF_DATAAVAIL_INFO,
+ PDF_DATAAVAIL_ACROFORM,
+ PDF_DATAAVAIL_ACROFORM_SUBOBJECT,
+ PDF_DATAAVAIL_PAGETREE,
+ PDF_DATAAVAIL_PAGE,
+ PDF_DATAAVAIL_PAGE_LATERLOAD,
+ PDF_DATAAVAIL_RESOURCES,
+ PDF_DATAAVAIL_DONE,
+ PDF_DATAAVAIL_ERROR,
+ PDF_DATAAVAIL_LOADALLFILE,
+ PDF_DATAAVAIL_TRAILER_APPEND
};
#endif // CORE_INCLUDE_FPDFAPI_FPDF_PARSER_H_
diff --git a/core/include/fpdfapi/fpdf_render.h b/core/include/fpdfapi/fpdf_render.h
index f3590095ad..ad2ca32fe7 100644
--- a/core/include/fpdfapi/fpdf_render.h
+++ b/core/include/fpdfapi/fpdf_render.h
@@ -27,250 +27,265 @@ class CPDF_ShadingObject;
class CPDF_TextObject;
class IFX_Pause;
-class IPDF_OCContext
-{
-public:
+class IPDF_OCContext {
+ public:
+ virtual ~IPDF_OCContext() {}
- virtual ~IPDF_OCContext() {}
+ virtual FX_BOOL CheckOCGVisible(const CPDF_Dictionary* pOCG) = 0;
- virtual FX_BOOL CheckOCGVisible(const CPDF_Dictionary* pOCG) = 0;
-
- FX_BOOL CheckObjectVisible(const CPDF_PageObject* pObj);
+ FX_BOOL CheckObjectVisible(const CPDF_PageObject* pObj);
};
-#define RENDER_COLOR_NORMAL 0
-#define RENDER_COLOR_GRAY 1
-#define RENDER_COLOR_TWOCOLOR 2
-#define RENDER_COLOR_ALPHA 3
-#define RENDER_CLEARTYPE 0x00000001
-#define RENDER_PRINTGRAPHICTEXT 0x00000002
-#define RENDER_FORCE_DOWNSAMPLE 0x00000004
-#define RENDER_PRINTPREVIEW 0x00000008
-#define RENDER_BGR_STRIPE 0x00000010
-#define RENDER_NO_NATIVETEXT 0x00000020
-#define RENDER_FORCE_HALFTONE 0x00000040
-#define RENDER_RECT_AA 0x00000080
-#define RENDER_FILL_FULLCOVER 0x00000100
-#define RENDER_PRINTIMAGETEXT 0x00000200
-#define RENDER_OVERPRINT 0x00000400
-#define RENDER_THINLINE 0x00000800
-#define RENDER_NOTEXTSMOOTH 0x10000000
-#define RENDER_NOPATHSMOOTH 0x20000000
-#define RENDER_NOIMAGESMOOTH 0x40000000
-#define RENDER_LIMITEDIMAGECACHE 0x80000000
-class CPDF_RenderOptions
-{
-public:
-
- CPDF_RenderOptions();
+#define RENDER_COLOR_NORMAL 0
+#define RENDER_COLOR_GRAY 1
+#define RENDER_COLOR_TWOCOLOR 2
+#define RENDER_COLOR_ALPHA 3
+#define RENDER_CLEARTYPE 0x00000001
+#define RENDER_PRINTGRAPHICTEXT 0x00000002
+#define RENDER_FORCE_DOWNSAMPLE 0x00000004
+#define RENDER_PRINTPREVIEW 0x00000008
+#define RENDER_BGR_STRIPE 0x00000010
+#define RENDER_NO_NATIVETEXT 0x00000020
+#define RENDER_FORCE_HALFTONE 0x00000040
+#define RENDER_RECT_AA 0x00000080
+#define RENDER_FILL_FULLCOVER 0x00000100
+#define RENDER_PRINTIMAGETEXT 0x00000200
+#define RENDER_OVERPRINT 0x00000400
+#define RENDER_THINLINE 0x00000800
+#define RENDER_NOTEXTSMOOTH 0x10000000
+#define RENDER_NOPATHSMOOTH 0x20000000
+#define RENDER_NOIMAGESMOOTH 0x40000000
+#define RENDER_LIMITEDIMAGECACHE 0x80000000
+class CPDF_RenderOptions {
+ public:
+ CPDF_RenderOptions();
- int m_ColorMode;
+ int m_ColorMode;
- FX_COLORREF m_BackColor;
+ FX_COLORREF m_BackColor;
- FX_COLORREF m_ForeColor;
+ FX_COLORREF m_ForeColor;
- FX_DWORD m_Flags;
+ FX_DWORD m_Flags;
- int m_Interpolation;
+ int m_Interpolation;
- FX_DWORD m_AddFlags;
+ FX_DWORD m_AddFlags;
- IPDF_OCContext* m_pOCContext;
+ IPDF_OCContext* m_pOCContext;
- FX_DWORD m_dwLimitCacheSize;
+ FX_DWORD m_dwLimitCacheSize;
- int m_HalftoneLimit;
+ int m_HalftoneLimit;
- FX_ARGB TranslateColor(FX_ARGB argb) const;
+ FX_ARGB TranslateColor(FX_ARGB argb) const;
};
-class CPDF_RenderContext
-{
-public:
-
- CPDF_RenderContext();
-
- void Create(CPDF_Page* pPage, FX_BOOL bFirstLayer = TRUE);
-
- void Create(CPDF_Document* pDoc = NULL, CPDF_PageRenderCache* pPageCache = NULL,
- CPDF_Dictionary* pPageResources = NULL, FX_BOOL bFirstLayer = TRUE);
-
- ~CPDF_RenderContext();
+class CPDF_RenderContext {
+ public:
+ CPDF_RenderContext();
- void Clear();
+ void Create(CPDF_Page* pPage, FX_BOOL bFirstLayer = TRUE);
- void AppendObjectList(CPDF_PageObjects* pObjs, const CFX_AffineMatrix* pObject2Device);
+ void Create(CPDF_Document* pDoc = NULL,
+ CPDF_PageRenderCache* pPageCache = NULL,
+ CPDF_Dictionary* pPageResources = NULL,
+ FX_BOOL bFirstLayer = TRUE);
- void Render(CFX_RenderDevice* pDevice, const CPDF_RenderOptions* pOptions = NULL,
- const CFX_AffineMatrix* pFinalMatrix = NULL);
+ ~CPDF_RenderContext();
- void DrawObjectList(CFX_RenderDevice* pDevice, CPDF_PageObjects* pObjs,
- const CFX_AffineMatrix* pObject2Device, const CPDF_RenderOptions* pOptions);
+ void Clear();
- void GetBackground(CFX_DIBitmap* pBuffer, const CPDF_PageObject* pObj,
- const CPDF_RenderOptions* pOptions, CFX_AffineMatrix* pFinalMatrix);
+ void AppendObjectList(CPDF_PageObjects* pObjs,
+ const CFX_AffineMatrix* pObject2Device);
- CPDF_PageRenderCache* GetPageCache() const
- {
- return m_pPageCache;
- }
+ void Render(CFX_RenderDevice* pDevice,
+ const CPDF_RenderOptions* pOptions = NULL,
+ const CFX_AffineMatrix* pFinalMatrix = NULL);
+ void DrawObjectList(CFX_RenderDevice* pDevice,
+ CPDF_PageObjects* pObjs,
+ const CFX_AffineMatrix* pObject2Device,
+ const CPDF_RenderOptions* pOptions);
+ void GetBackground(CFX_DIBitmap* pBuffer,
+ const CPDF_PageObject* pObj,
+ const CPDF_RenderOptions* pOptions,
+ CFX_AffineMatrix* pFinalMatrix);
- CPDF_Document* m_pDocument;
+ CPDF_PageRenderCache* GetPageCache() const { return m_pPageCache; }
- CPDF_Dictionary* m_pPageResources;
+ CPDF_Document* m_pDocument;
- CPDF_PageRenderCache* m_pPageCache;
+ CPDF_Dictionary* m_pPageResources;
-protected:
+ CPDF_PageRenderCache* m_pPageCache;
- CFX_ArrayTemplate<struct _PDF_RenderItem> m_ContentList;
+ protected:
+ CFX_ArrayTemplate<struct _PDF_RenderItem> m_ContentList;
- FX_BOOL m_bFirstLayer;
+ FX_BOOL m_bFirstLayer;
- void Render(CFX_RenderDevice* pDevice, const CPDF_PageObject* pStopObj,
- const CPDF_RenderOptions* pOptions, const CFX_AffineMatrix* pFinalMatrix);
- friend class CPDF_RenderStatus;
- friend class CPDF_ProgressiveRenderer;
+ void Render(CFX_RenderDevice* pDevice,
+ const CPDF_PageObject* pStopObj,
+ const CPDF_RenderOptions* pOptions,
+ const CFX_AffineMatrix* pFinalMatrix);
+ friend class CPDF_RenderStatus;
+ friend class CPDF_ProgressiveRenderer;
};
-class CPDF_ProgressiveRenderer
-{
-public:
- // Must match FDF_RENDER_* definitions in fpdf_progressive.h.
- enum Status {
- Ready = FPDF_RENDER_READER,
- ToBeContinued = FPDF_RENDER_TOBECOUNTINUED,
- Done = FPDF_RENDER_DONE,
- Failed = FPDF_RENDER_FAILED
- };
- static int ToFPDFStatus(Status status) { return static_cast<int>(status); }
-
- CPDF_ProgressiveRenderer(CPDF_RenderContext* pContext,
- CFX_RenderDevice* pDevice,
- const CPDF_RenderOptions* pOptions);
- ~CPDF_ProgressiveRenderer();
-
- Status GetStatus() const { return m_Status; }
- void Start(IFX_Pause* pPause);
- void Continue(IFX_Pause* pPause);
- int EstimateProgress();
-
-private:
- void RenderStep();
-
- Status m_Status;
- CPDF_RenderContext* const m_pContext;
- CFX_RenderDevice* const m_pDevice;
- const CPDF_RenderOptions* const m_pOptions;
- nonstd::unique_ptr<CPDF_RenderStatus> m_pRenderStatus;
- CFX_FloatRect m_ClipRect;
- FX_DWORD m_LayerIndex;
- FX_DWORD m_ObjectIndex;
- FX_POSITION m_ObjectPos;
- FX_POSITION m_PrevLastPos;
+class CPDF_ProgressiveRenderer {
+ public:
+ // Must match FDF_RENDER_* definitions in fpdf_progressive.h.
+ enum Status {
+ Ready = FPDF_RENDER_READER,
+ ToBeContinued = FPDF_RENDER_TOBECOUNTINUED,
+ Done = FPDF_RENDER_DONE,
+ Failed = FPDF_RENDER_FAILED
+ };
+ static int ToFPDFStatus(Status status) { return static_cast<int>(status); }
+
+ CPDF_ProgressiveRenderer(CPDF_RenderContext* pContext,
+ CFX_RenderDevice* pDevice,
+ const CPDF_RenderOptions* pOptions);
+ ~CPDF_ProgressiveRenderer();
+
+ Status GetStatus() const { return m_Status; }
+ void Start(IFX_Pause* pPause);
+ void Continue(IFX_Pause* pPause);
+ int EstimateProgress();
+
+ private:
+ void RenderStep();
+
+ Status m_Status;
+ CPDF_RenderContext* const m_pContext;
+ CFX_RenderDevice* const m_pDevice;
+ const CPDF_RenderOptions* const m_pOptions;
+ nonstd::unique_ptr<CPDF_RenderStatus> m_pRenderStatus;
+ CFX_FloatRect m_ClipRect;
+ FX_DWORD m_LayerIndex;
+ FX_DWORD m_ObjectIndex;
+ FX_POSITION m_ObjectPos;
+ FX_POSITION m_PrevLastPos;
};
-class CPDF_TextRenderer
-{
-public:
-
- static void DrawTextString(CFX_RenderDevice* pDevice, int left, int top,
- CPDF_Font* pFont,
- int height,
- const CFX_ByteString& str,
- FX_ARGB argb);
-
- static void DrawTextString(CFX_RenderDevice* pDevice, FX_FLOAT origin_x, FX_FLOAT origin_y,
- CPDF_Font* pFont,
- FX_FLOAT font_size,
- const CFX_AffineMatrix* matrix,
- const CFX_ByteString& str,
- FX_ARGB fill_argb,
- FX_ARGB stroke_argb = 0,
- const CFX_GraphStateData* pGraphState = NULL,
- const CPDF_RenderOptions* pOptions = NULL
- );
-
- static FX_BOOL DrawTextPath(CFX_RenderDevice* pDevice, int nChars, FX_DWORD* pCharCodes, FX_FLOAT* pCharPos,
- CPDF_Font* pFont, FX_FLOAT font_size,
- const CFX_AffineMatrix* pText2User, const CFX_AffineMatrix* pUser2Device,
- const CFX_GraphStateData* pGraphState,
- FX_ARGB fill_argb, FX_ARGB stroke_argb, CFX_PathData* pClippingPath, int nFlag = 0);
-
- static FX_BOOL DrawNormalText(CFX_RenderDevice* pDevice, int nChars, FX_DWORD* pCharCodes, FX_FLOAT* pCharPos,
- CPDF_Font* pFont, FX_FLOAT font_size, const CFX_AffineMatrix* pText2Device,
- FX_ARGB fill_argb, const CPDF_RenderOptions* pOptions);
-
- static FX_BOOL DrawType3Text(CFX_RenderDevice* pDevice, int nChars, FX_DWORD* pCharCodes, FX_FLOAT* pCharPos,
- CPDF_Font* pFont, FX_FLOAT font_size, const CFX_AffineMatrix* pText2Device,
- FX_ARGB fill_argb);
+class CPDF_TextRenderer {
+ public:
+ static void DrawTextString(CFX_RenderDevice* pDevice,
+ int left,
+ int top,
+ CPDF_Font* pFont,
+ int height,
+ const CFX_ByteString& str,
+ FX_ARGB argb);
+
+ static void DrawTextString(CFX_RenderDevice* pDevice,
+ FX_FLOAT origin_x,
+ FX_FLOAT origin_y,
+ CPDF_Font* pFont,
+ FX_FLOAT font_size,
+ const CFX_AffineMatrix* matrix,
+ const CFX_ByteString& str,
+ FX_ARGB fill_argb,
+ FX_ARGB stroke_argb = 0,
+ const CFX_GraphStateData* pGraphState = NULL,
+ const CPDF_RenderOptions* pOptions = NULL);
+
+ static FX_BOOL DrawTextPath(CFX_RenderDevice* pDevice,
+ int nChars,
+ FX_DWORD* pCharCodes,
+ FX_FLOAT* pCharPos,
+ CPDF_Font* pFont,
+ FX_FLOAT font_size,
+ const CFX_AffineMatrix* pText2User,
+ const CFX_AffineMatrix* pUser2Device,
+ const CFX_GraphStateData* pGraphState,
+ FX_ARGB fill_argb,
+ FX_ARGB stroke_argb,
+ CFX_PathData* pClippingPath,
+ int nFlag = 0);
+
+ static FX_BOOL DrawNormalText(CFX_RenderDevice* pDevice,
+ int nChars,
+ FX_DWORD* pCharCodes,
+ FX_FLOAT* pCharPos,
+ CPDF_Font* pFont,
+ FX_FLOAT font_size,
+ const CFX_AffineMatrix* pText2Device,
+ FX_ARGB fill_argb,
+ const CPDF_RenderOptions* pOptions);
+
+ static FX_BOOL DrawType3Text(CFX_RenderDevice* pDevice,
+ int nChars,
+ FX_DWORD* pCharCodes,
+ FX_FLOAT* pCharPos,
+ CPDF_Font* pFont,
+ FX_FLOAT font_size,
+ const CFX_AffineMatrix* pText2Device,
+ FX_ARGB fill_argb);
};
-class CPDF_PageRenderCache
-{
-public:
- CPDF_PageRenderCache(CPDF_Page* pPage)
- {
- m_pPage = pPage;
- m_nTimeCount = 0;
- m_nCacheSize = 0;
- m_pCurImageCache = NULL;
- m_bCurFindCache = FALSE;
- m_pCurImageCaches = NULL;
- }
- ~CPDF_PageRenderCache()
- {
- ClearAll();
- }
- void ClearAll();
- void ClearImageData();
-
- FX_DWORD EstimateSize();
- void CacheOptimization(int32_t dwLimitCacheSize);
- FX_DWORD GetCachedSize(CPDF_Stream* pStream) const;
- FX_DWORD GetTimeCount() const
- {
- return m_nTimeCount;
- }
- void SetTimeCount(FX_DWORD dwTimeCount)
- {
- m_nTimeCount = dwTimeCount;
- }
-
- void GetCachedBitmap(CPDF_Stream* pStream, CFX_DIBSource*& pBitmap, CFX_DIBSource*& pMask, FX_DWORD& MatteColor,
- FX_BOOL bStdCS = FALSE, FX_DWORD GroupFamily = 0, FX_BOOL bLoadMask = FALSE,
- CPDF_RenderStatus* pRenderStatus = NULL, int32_t downsampleWidth = 0, int32_t downsampleHeight = 0);
-
- void ResetBitmap(CPDF_Stream* pStream, const CFX_DIBitmap* pBitmap);
- void ClearImageCache(CPDF_Stream* pStream);
- CPDF_Page* GetPage()
- {
- return m_pPage;
- }
- CFX_MapPtrToPtr m_ImageCaches;
-public:
- FX_BOOL StartGetCachedBitmap(CPDF_Stream* pStream, FX_BOOL bStdCS = FALSE, FX_DWORD GroupFamily = 0,
- FX_BOOL bLoadMask = FALSE, CPDF_RenderStatus* pRenderStatus = NULL,
- int32_t downsampleWidth = 0, int32_t downsampleHeight = 0);
-
- FX_BOOL Continue(IFX_Pause* pPause);
- CPDF_ImageCache* m_pCurImageCache;
- CFX_PtrArray* m_pCurImageCaches;
-protected:
- friend class CPDF_Page;
- CPDF_Page* m_pPage;
-
- FX_DWORD m_nTimeCount;
- FX_DWORD m_nCacheSize;
- FX_BOOL m_bCurFindCache;
+class CPDF_PageRenderCache {
+ public:
+ CPDF_PageRenderCache(CPDF_Page* pPage) {
+ m_pPage = pPage;
+ m_nTimeCount = 0;
+ m_nCacheSize = 0;
+ m_pCurImageCache = NULL;
+ m_bCurFindCache = FALSE;
+ m_pCurImageCaches = NULL;
+ }
+ ~CPDF_PageRenderCache() { ClearAll(); }
+ void ClearAll();
+ void ClearImageData();
+
+ FX_DWORD EstimateSize();
+ void CacheOptimization(int32_t dwLimitCacheSize);
+ FX_DWORD GetCachedSize(CPDF_Stream* pStream) const;
+ FX_DWORD GetTimeCount() const { return m_nTimeCount; }
+ void SetTimeCount(FX_DWORD dwTimeCount) { m_nTimeCount = dwTimeCount; }
+
+ void GetCachedBitmap(CPDF_Stream* pStream,
+ CFX_DIBSource*& pBitmap,
+ CFX_DIBSource*& pMask,
+ FX_DWORD& MatteColor,
+ FX_BOOL bStdCS = FALSE,
+ FX_DWORD GroupFamily = 0,
+ FX_BOOL bLoadMask = FALSE,
+ CPDF_RenderStatus* pRenderStatus = NULL,
+ int32_t downsampleWidth = 0,
+ int32_t downsampleHeight = 0);
+
+ void ResetBitmap(CPDF_Stream* pStream, const CFX_DIBitmap* pBitmap);
+ void ClearImageCache(CPDF_Stream* pStream);
+ CPDF_Page* GetPage() { return m_pPage; }
+ CFX_MapPtrToPtr m_ImageCaches;
+
+ public:
+ FX_BOOL StartGetCachedBitmap(CPDF_Stream* pStream,
+ FX_BOOL bStdCS = FALSE,
+ FX_DWORD GroupFamily = 0,
+ FX_BOOL bLoadMask = FALSE,
+ CPDF_RenderStatus* pRenderStatus = NULL,
+ int32_t downsampleWidth = 0,
+ int32_t downsampleHeight = 0);
+
+ FX_BOOL Continue(IFX_Pause* pPause);
+ CPDF_ImageCache* m_pCurImageCache;
+ CFX_PtrArray* m_pCurImageCaches;
+
+ protected:
+ friend class CPDF_Page;
+ CPDF_Page* m_pPage;
+
+ FX_DWORD m_nTimeCount;
+ FX_DWORD m_nCacheSize;
+ FX_BOOL m_bCurFindCache;
};
-class CPDF_RenderConfig
-{
-public:
- CPDF_RenderConfig();
- ~CPDF_RenderConfig();
- int m_HalftoneLimit;
- int m_RenderStepLimit;
+class CPDF_RenderConfig {
+ public:
+ CPDF_RenderConfig();
+ ~CPDF_RenderConfig();
+ int m_HalftoneLimit;
+ int m_RenderStepLimit;
};
#endif // CORE_INCLUDE_FPDFAPI_FPDF_RENDER_H_
diff --git a/core/include/fpdfapi/fpdf_resource.h b/core/include/fpdfapi/fpdf_resource.h
index 5c8cc85217..c41a306d54 100644
--- a/core/include/fpdfapi/fpdf_resource.h
+++ b/core/include/fpdfapi/fpdf_resource.h
@@ -51,911 +51,792 @@ const FX_CHAR* GetAdobeCharName(int iBaseEncoding,
const CFX_ByteString* pCharNames,
int charcode);
-template <class T> class CPDF_CountedObject
-{
-public:
- explicit CPDF_CountedObject(T* ptr) : m_nCount(1), m_pObj(ptr) { }
- void reset(T* ptr) { // CAUTION: tosses prior ref counts.
- m_nCount = 1;
- m_pObj = ptr;
- }
- void clear() { // Now you're all weak ptrs ...
- delete m_pObj;
- m_pObj = nullptr;
- }
- T* get() const { return m_pObj; }
- T* AddRef() { FXSYS_assert(m_pObj); ++m_nCount; return m_pObj; }
- void RemoveRef() { if (m_nCount) --m_nCount; }
- size_t use_count() const { return m_nCount; }
-
-protected:
- size_t m_nCount;
- T* m_pObj;
+template <class T>
+class CPDF_CountedObject {
+ public:
+ explicit CPDF_CountedObject(T* ptr) : m_nCount(1), m_pObj(ptr) {}
+ void reset(T* ptr) { // CAUTION: tosses prior ref counts.
+ m_nCount = 1;
+ m_pObj = ptr;
+ }
+ void clear() { // Now you're all weak ptrs ...
+ delete m_pObj;
+ m_pObj = nullptr;
+ }
+ T* get() const { return m_pObj; }
+ T* AddRef() {
+ FXSYS_assert(m_pObj);
+ ++m_nCount;
+ return m_pObj;
+ }
+ void RemoveRef() {
+ if (m_nCount)
+ --m_nCount;
+ }
+ size_t use_count() const { return m_nCount; }
+
+ protected:
+ size_t m_nCount;
+ T* m_pObj;
};
using CPDF_CountedColorSpace = CPDF_CountedObject<CPDF_ColorSpace>;
using CPDF_CountedPattern = CPDF_CountedObject<CPDF_Pattern>;
-#define PDFFONT_TYPE1 1
-#define PDFFONT_TRUETYPE 2
-#define PDFFONT_TYPE3 3
-#define PDFFONT_CIDFONT 4
-#define PDFFONT_FIXEDPITCH 1
-#define PDFFONT_SERIF 2
-#define PDFFONT_SYMBOLIC 4
-#define PDFFONT_SCRIPT 8
-#define PDFFONT_NONSYMBOLIC 32
-#define PDFFONT_ITALIC 64
-#define PDFFONT_ALLCAP 0x10000
-#define PDFFONT_SMALLCAP 0x20000
-#define PDFFONT_FORCEBOLD 0x40000
-#define PDFFONT_USEEXTERNATTR 0x80000
-class CPDF_Font
-{
-public:
- static CPDF_Font* CreateFontF(CPDF_Document* pDoc, CPDF_Dictionary* pFontDict);
- static CPDF_Font* GetStockFont(CPDF_Document* pDoc, const CFX_ByteStringC& fontname);
-
- virtual ~CPDF_Font();
-
- bool IsFontType(int fonttype) const { return fonttype == m_FontType; }
- int GetFontType() const { return m_FontType; }
-
- CFX_ByteString GetFontTypeName() const;
-
- const CFX_ByteString& GetBaseFont() const
- {
- return m_BaseFont;
- }
+#define PDFFONT_TYPE1 1
+#define PDFFONT_TRUETYPE 2
+#define PDFFONT_TYPE3 3
+#define PDFFONT_CIDFONT 4
+#define PDFFONT_FIXEDPITCH 1
+#define PDFFONT_SERIF 2
+#define PDFFONT_SYMBOLIC 4
+#define PDFFONT_SCRIPT 8
+#define PDFFONT_NONSYMBOLIC 32
+#define PDFFONT_ITALIC 64
+#define PDFFONT_ALLCAP 0x10000
+#define PDFFONT_SMALLCAP 0x20000
+#define PDFFONT_FORCEBOLD 0x40000
+#define PDFFONT_USEEXTERNATTR 0x80000
+class CPDF_Font {
+ public:
+ static CPDF_Font* CreateFontF(CPDF_Document* pDoc,
+ CPDF_Dictionary* pFontDict);
+ static CPDF_Font* GetStockFont(CPDF_Document* pDoc,
+ const CFX_ByteStringC& fontname);
- const CFX_SubstFont* GetSubstFont() const
- {
- return m_Font.GetSubstFont();
- }
+ virtual ~CPDF_Font();
- FX_DWORD GetFlags() const
- {
- return m_Flags;
- }
+ bool IsFontType(int fonttype) const { return fonttype == m_FontType; }
+ int GetFontType() const { return m_FontType; }
- virtual FX_BOOL IsVertWriting()const;
+ CFX_ByteString GetFontTypeName() const;
+ const CFX_ByteString& GetBaseFont() const { return m_BaseFont; }
+ const CFX_SubstFont* GetSubstFont() const { return m_Font.GetSubstFont(); }
+ FX_DWORD GetFlags() const { return m_Flags; }
- CPDF_Type1Font* GetType1Font() const
- {
- return m_FontType == PDFFONT_TYPE1 ? (CPDF_Type1Font*)(void*)this : NULL;
- }
+ virtual FX_BOOL IsVertWriting() const;
- CPDF_TrueTypeFont* GetTrueTypeFont() const
- {
- return m_FontType == PDFFONT_TRUETYPE ? (CPDF_TrueTypeFont*)(void*)this : NULL;
- }
+ CPDF_Type1Font* GetType1Font() const {
+ return m_FontType == PDFFONT_TYPE1 ? (CPDF_Type1Font*)(void*)this : NULL;
+ }
- CPDF_CIDFont* GetCIDFont() const
- {
- return (m_FontType == PDFFONT_CIDFONT) ? (CPDF_CIDFont*)(void*)this : NULL;
- }
+ CPDF_TrueTypeFont* GetTrueTypeFont() const {
+ return m_FontType == PDFFONT_TRUETYPE ? (CPDF_TrueTypeFont*)(void*)this
+ : NULL;
+ }
- CPDF_Type3Font* GetType3Font() const
- {
- return (m_FontType == PDFFONT_TYPE3) ? (CPDF_Type3Font*)(void*)this : NULL;
- }
+ CPDF_CIDFont* GetCIDFont() const {
+ return (m_FontType == PDFFONT_CIDFONT) ? (CPDF_CIDFont*)(void*)this : NULL;
+ }
+ CPDF_Type3Font* GetType3Font() const {
+ return (m_FontType == PDFFONT_TYPE3) ? (CPDF_Type3Font*)(void*)this : NULL;
+ }
- FX_BOOL IsEmbedded() const
- {
- return m_FontType == PDFFONT_TYPE3 || m_pFontFile != NULL;
- }
+ FX_BOOL IsEmbedded() const {
+ return m_FontType == PDFFONT_TYPE3 || m_pFontFile != NULL;
+ }
- virtual FX_BOOL IsUnicodeCompatible() const
- {
- return FALSE;
- }
+ virtual FX_BOOL IsUnicodeCompatible() const { return FALSE; }
- CPDF_StreamAcc* GetFontFile() const
- {
- return m_pFontFile;
- }
+ CPDF_StreamAcc* GetFontFile() const { return m_pFontFile; }
- CPDF_Dictionary* GetFontDict() const
- {
- return m_pFontDict;
- }
+ CPDF_Dictionary* GetFontDict() const { return m_pFontDict; }
- FX_BOOL IsStandardFont() const;
+ FX_BOOL IsStandardFont() const;
- FXFT_Face GetFace() const
- {
- return m_Font.GetFace();
- }
+ FXFT_Face GetFace() const { return m_Font.GetFace(); }
- virtual FX_DWORD GetNextChar(const FX_CHAR* pString, int nStrLen, int& offset) const
- {
- if (offset < 0 || nStrLen < 1) {
- return 0;
- }
- uint8_t ch = offset < nStrLen ? pString[offset++] : pString[nStrLen-1];
- return static_cast<FX_DWORD>(ch);
+ virtual FX_DWORD GetNextChar(const FX_CHAR* pString,
+ int nStrLen,
+ int& offset) const {
+ if (offset < 0 || nStrLen < 1) {
+ return 0;
}
+ uint8_t ch = offset < nStrLen ? pString[offset++] : pString[nStrLen - 1];
+ return static_cast<FX_DWORD>(ch);
+ }
- virtual int CountChar(const FX_CHAR* pString, int size) const
- {
- return size;
- }
+ virtual int CountChar(const FX_CHAR* pString, int size) const { return size; }
- void AppendChar(CFX_ByteString& str, FX_DWORD charcode) const;
+ void AppendChar(CFX_ByteString& str, FX_DWORD charcode) const;
- virtual int AppendChar(FX_CHAR* buf, FX_DWORD charcode) const
- {
- *buf = (FX_CHAR)charcode;
- return 1;
- }
+ virtual int AppendChar(FX_CHAR* buf, FX_DWORD charcode) const {
+ *buf = (FX_CHAR)charcode;
+ return 1;
+ }
- virtual int GetCharSize(FX_DWORD charcode) const
- {
- return 1;
- }
+ virtual int GetCharSize(FX_DWORD charcode) const { return 1; }
+ virtual int GlyphFromCharCode(FX_DWORD charcode,
+ FX_BOOL* pVertGlyph = NULL) = 0;
+ virtual int GlyphFromCharCodeExt(FX_DWORD charcode) {
+ return GlyphFromCharCode(charcode);
+ }
+ CFX_WideString UnicodeFromCharCode(FX_DWORD charcode) const;
+ FX_DWORD CharCodeFromUnicode(FX_WCHAR Unicode) const;
- virtual int GlyphFromCharCode(FX_DWORD charcode, FX_BOOL *pVertGlyph = NULL) = 0;
- virtual int GlyphFromCharCodeExt(FX_DWORD charcode)
- {
- return GlyphFromCharCode(charcode);
- }
+ CFX_CharMap* GetCharMap() { return m_pCharMap; }
- CFX_WideString UnicodeFromCharCode(FX_DWORD charcode) const;
+ CFX_ByteString EncodeString(const CFX_WideString& str) const;
- FX_DWORD CharCodeFromUnicode(FX_WCHAR Unicode) const;
+ CFX_WideString DecodeString(const CFX_ByteString& str) const;
- CFX_CharMap* GetCharMap()
- {
- return m_pCharMap;
- }
+ void GetFontBBox(FX_RECT& rect) const { rect = m_FontBBox; }
- CFX_ByteString EncodeString(const CFX_WideString& str) const;
+ int GetTypeAscent() const { return m_Ascent; }
- CFX_WideString DecodeString(const CFX_ByteString& str) const;
+ int GetTypeDescent() const { return m_Descent; }
+ int GetItalicAngle() const { return m_ItalicAngle; }
+ int GetStemV() const { return m_StemV; }
+ int GetStringWidth(const FX_CHAR* pString, int size);
- void GetFontBBox(FX_RECT& rect) const
- {
- rect = m_FontBBox;
- }
+ virtual int GetCharWidthF(FX_DWORD charcode, int level = 0) = 0;
- int GetTypeAscent() const
- {
- return m_Ascent;
- }
-
- int GetTypeDescent() const
- {
- return m_Descent;
- }
-
- int GetItalicAngle() const
- {
- return m_ItalicAngle;
- }
-
- int GetStemV() const
- {
- return m_StemV;
- }
+ virtual int GetCharTypeWidth(FX_DWORD charcode);
- int GetStringWidth(const FX_CHAR* pString, int size);
+ virtual void GetCharBBox(FX_DWORD charcode, FX_RECT& rect, int level = 0) = 0;
- virtual int GetCharWidthF(FX_DWORD charcode, int level = 0) = 0;
+ CPDF_Document* m_pDocument;
- virtual int GetCharTypeWidth(FX_DWORD charcode);
+ class CFX_PathData* LoadGlyphPath(FX_DWORD charcode, int dest_width = 0);
- virtual void GetCharBBox(FX_DWORD charcode, FX_RECT& rect, int level = 0) = 0;
+ CFX_Font m_Font;
+ protected:
+ explicit CPDF_Font(int fonttype);
+ FX_BOOL Initialize();
- CPDF_Document* m_pDocument;
+ FX_BOOL Load();
- class CFX_PathData* LoadGlyphPath(FX_DWORD charcode, int dest_width = 0);
+ virtual FX_BOOL _Load() = 0;
- CFX_Font m_Font;
+ virtual FX_WCHAR _UnicodeFromCharCode(FX_DWORD charcode) const = 0;
-protected:
- explicit CPDF_Font(int fonttype);
+ virtual FX_DWORD _CharCodeFromUnicode(FX_WCHAR Unicode) const = 0;
- FX_BOOL Initialize();
+ void LoadUnicodeMap();
- FX_BOOL Load();
+ void LoadPDFEncoding(CPDF_Object* pEncoding,
+ int& iBaseEncoding,
+ CFX_ByteString*& pCharNames,
+ FX_BOOL bEmbedded,
+ FX_BOOL bTrueType);
- virtual FX_BOOL _Load() = 0;
+ void LoadFontDescriptor(CPDF_Dictionary*);
- virtual FX_WCHAR _UnicodeFromCharCode(FX_DWORD charcode) const = 0;
+ void LoadCharWidths(FX_WORD* pWidths);
- virtual FX_DWORD _CharCodeFromUnicode(FX_WCHAR Unicode) const = 0;
+ void CheckFontMetrics();
- void LoadUnicodeMap();
+ CFX_CharMap* m_pCharMap;
- void LoadPDFEncoding(CPDF_Object* pEncoding, int& iBaseEncoding,
- CFX_ByteString*& pCharNames, FX_BOOL bEmbedded, FX_BOOL bTrueType);
+ CFX_ByteString m_BaseFont;
- void LoadFontDescriptor(CPDF_Dictionary*);
+ CPDF_StreamAcc* m_pFontFile;
- void LoadCharWidths(FX_WORD* pWidths);
+ CPDF_Dictionary* m_pFontDict;
- void CheckFontMetrics();
+ CPDF_ToUnicodeMap* m_pToUnicodeMap;
- CFX_CharMap* m_pCharMap;
+ FX_BOOL m_bToUnicodeLoaded;
+ int m_Flags;
+ FX_RECT m_FontBBox;
- CFX_ByteString m_BaseFont;
+ int m_StemV;
- CPDF_StreamAcc* m_pFontFile;
+ int m_Ascent;
- CPDF_Dictionary* m_pFontDict;
-
- CPDF_ToUnicodeMap* m_pToUnicodeMap;
-
- FX_BOOL m_bToUnicodeLoaded;
+ int m_Descent;
+ int m_ItalicAngle;
+ private:
+ const int m_FontType;
+};
+#define PDFFONT_ENCODING_BUILTIN 0
+#define PDFFONT_ENCODING_WINANSI 1
+#define PDFFONT_ENCODING_MACROMAN 2
+#define PDFFONT_ENCODING_MACEXPERT 3
+#define PDFFONT_ENCODING_STANDARD 4
+#define PDFFONT_ENCODING_ADOBE_SYMBOL 5
+#define PDFFONT_ENCODING_ZAPFDINGBATS 6
+#define PDFFONT_ENCODING_PDFDOC 7
+#define PDFFONT_ENCODING_MS_SYMBOL 8
+#define PDFFONT_ENCODING_UNICODE 9
+class CPDF_FontEncoding {
+ public:
+ CPDF_FontEncoding();
+ CPDF_FontEncoding(int PredefinedEncoding);
- int m_Flags;
+ void LoadEncoding(CPDF_Object* pEncoding);
- FX_RECT m_FontBBox;
+ FX_BOOL IsIdentical(CPDF_FontEncoding* pAnother) const;
- int m_StemV;
+ FX_WCHAR UnicodeFromCharCode(uint8_t charcode) const {
+ return m_Unicodes[charcode];
+ }
- int m_Ascent;
+ int CharCodeFromUnicode(FX_WCHAR unicode) const;
- int m_Descent;
+ void SetUnicode(uint8_t charcode, FX_WCHAR unicode) {
+ m_Unicodes[charcode] = unicode;
+ }
- int m_ItalicAngle;
+ CPDF_Object* Realize();
-private:
- const int m_FontType;
+ public:
+ FX_WCHAR m_Unicodes[256];
};
-#define PDFFONT_ENCODING_BUILTIN 0
-#define PDFFONT_ENCODING_WINANSI 1
-#define PDFFONT_ENCODING_MACROMAN 2
-#define PDFFONT_ENCODING_MACEXPERT 3
-#define PDFFONT_ENCODING_STANDARD 4
-#define PDFFONT_ENCODING_ADOBE_SYMBOL 5
-#define PDFFONT_ENCODING_ZAPFDINGBATS 6
-#define PDFFONT_ENCODING_PDFDOC 7
-#define PDFFONT_ENCODING_MS_SYMBOL 8
-#define PDFFONT_ENCODING_UNICODE 9
-class CPDF_FontEncoding
-{
-public:
-
- CPDF_FontEncoding();
-
- CPDF_FontEncoding(int PredefinedEncoding);
-
- void LoadEncoding(CPDF_Object* pEncoding);
-
- FX_BOOL IsIdentical(CPDF_FontEncoding* pAnother) const;
-
- FX_WCHAR UnicodeFromCharCode(uint8_t charcode) const
- {
- return m_Unicodes[charcode];
- }
- int CharCodeFromUnicode(FX_WCHAR unicode) const;
+class CPDF_SimpleFont : public CPDF_Font {
+ public:
+ explicit CPDF_SimpleFont(int fonttype);
+ ~CPDF_SimpleFont() override;
- void SetUnicode(uint8_t charcode, FX_WCHAR unicode)
- {
- m_Unicodes[charcode] = unicode;
- }
-
- CPDF_Object* Realize();
-public:
+ CPDF_FontEncoding* GetEncoding() { return &m_Encoding; }
+ int GetCharWidthF(FX_DWORD charcode, int level = 0) override;
+ void GetCharBBox(FX_DWORD charcode, FX_RECT& rect, int level = 0) override;
+ int GlyphFromCharCode(FX_DWORD charcode, FX_BOOL* pVertGlyph = NULL) override;
+ FX_BOOL IsUnicodeCompatible() const override;
- FX_WCHAR m_Unicodes[256];
-};
+ protected:
+ FX_BOOL LoadCommon();
-class CPDF_SimpleFont : public CPDF_Font
-{
-public:
- explicit CPDF_SimpleFont(int fonttype);
- ~CPDF_SimpleFont() override;
+ void LoadSubstFont();
- CPDF_FontEncoding* GetEncoding()
- {
- return &m_Encoding;
- }
- int GetCharWidthF(FX_DWORD charcode, int level = 0) override;
- void GetCharBBox(FX_DWORD charcode, FX_RECT& rect, int level = 0) override;
- int GlyphFromCharCode(FX_DWORD charcode, FX_BOOL *pVertGlyph = NULL) override;
- FX_BOOL IsUnicodeCompatible() const override;
+ void LoadFaceMetrics();
-protected:
- FX_BOOL LoadCommon();
+ virtual void LoadGlyphMap() = 0;
- void LoadSubstFont();
+ FX_WCHAR _UnicodeFromCharCode(FX_DWORD charcode) const override {
+ return m_Encoding.UnicodeFromCharCode((uint8_t)charcode);
+ }
- void LoadFaceMetrics();
+ FX_DWORD _CharCodeFromUnicode(FX_WCHAR Unicode) const override {
+ return m_Encoding.CharCodeFromUnicode(Unicode);
+ }
- virtual void LoadGlyphMap() = 0;
+ void LoadCharMetrics(int charcode);
- FX_WCHAR _UnicodeFromCharCode(FX_DWORD charcode) const override
- {
- return m_Encoding.UnicodeFromCharCode((uint8_t)charcode);
- }
-
- FX_DWORD _CharCodeFromUnicode(FX_WCHAR Unicode) const override
- {
- return m_Encoding.CharCodeFromUnicode(Unicode);
- }
-
- void LoadCharMetrics(int charcode);
-
- CPDF_FontEncoding m_Encoding;
- FX_WORD m_GlyphIndex[256];
- FX_WORD m_ExtGID[256];
- CFX_ByteString* m_pCharNames;
- int m_BaseEncoding;
- FX_WORD m_CharWidth[256];
- FX_SMALL_RECT m_CharBBox[256];
- FX_BOOL m_bUseFontWidth;
+ CPDF_FontEncoding m_Encoding;
+ FX_WORD m_GlyphIndex[256];
+ FX_WORD m_ExtGID[256];
+ CFX_ByteString* m_pCharNames;
+ int m_BaseEncoding;
+ FX_WORD m_CharWidth[256];
+ FX_SMALL_RECT m_CharBBox[256];
+ FX_BOOL m_bUseFontWidth;
};
-class CPDF_Type1Font : public CPDF_SimpleFont
-{
-public:
+class CPDF_Type1Font : public CPDF_SimpleFont {
+ public:
+ CPDF_Type1Font();
- CPDF_Type1Font();
+ int GetBase14Font() { return m_Base14Font; }
+ virtual int GlyphFromCharCodeExt(FX_DWORD charcode);
- int GetBase14Font()
- {
- return m_Base14Font;
- }
- virtual int GlyphFromCharCodeExt(FX_DWORD charcode);
-protected:
- virtual FX_BOOL _Load();
+ protected:
+ virtual FX_BOOL _Load();
- int m_Base14Font;
- virtual void LoadGlyphMap();
-};
-class CPDF_TrueTypeFont : public CPDF_SimpleFont
-{
-public:
-
- CPDF_TrueTypeFont();
-protected:
- virtual FX_BOOL _Load();
- virtual void LoadGlyphMap();
+ int m_Base14Font;
+ virtual void LoadGlyphMap();
};
-class CPDF_Type3Char
-{
-public:
-
- CPDF_Type3Char();
-
- ~CPDF_Type3Char();
+class CPDF_TrueTypeFont : public CPDF_SimpleFont {
+ public:
+ CPDF_TrueTypeFont();
- FX_BOOL LoadBitmap(CPDF_RenderContext* pContext);
-
- FX_BOOL m_bColored;
+ protected:
+ virtual FX_BOOL _Load();
+ virtual void LoadGlyphMap();
+};
+class CPDF_Type3Char {
+ public:
+ CPDF_Type3Char();
- FX_BOOL m_bPageRequired;
+ ~CPDF_Type3Char();
+ FX_BOOL LoadBitmap(CPDF_RenderContext* pContext);
+ FX_BOOL m_bColored;
- CPDF_Form* m_pForm;
+ FX_BOOL m_bPageRequired;
- CFX_AffineMatrix m_ImageMatrix;
+ CPDF_Form* m_pForm;
- CFX_DIBitmap* m_pBitmap;
+ CFX_AffineMatrix m_ImageMatrix;
+ CFX_DIBitmap* m_pBitmap;
- int m_Width;
+ int m_Width;
- FX_RECT m_BBox;
+ FX_RECT m_BBox;
};
-class CPDF_Type3Font : public CPDF_SimpleFont
-{
-public:
- CPDF_Type3Font();
- ~CPDF_Type3Font() override;
-
- void SetPageResources(CPDF_Dictionary* pResources)
- {
- m_pPageResources = pResources;
- }
- CPDF_Type3Char* LoadChar(FX_DWORD charcode, int level = 0);
- int GetCharWidthF(FX_DWORD charcode, int level = 0) override;
- int GetCharTypeWidth(FX_DWORD charcode) override
- {
- return GetCharWidthF(charcode);
- }
- void GetCharBBox(FX_DWORD charcode, FX_RECT& rect, int level = 0) override;
- CFX_AffineMatrix& GetFontMatrix()
- {
- return m_FontMatrix;
- }
- void CheckType3FontMetrics();
-
-protected:
- CFX_AffineMatrix m_FontMatrix;
-
-private:
- FX_BOOL _Load() override;
- void LoadGlyphMap() override {}
-
- int m_CharWidthL[256];
- CPDF_Dictionary* m_pCharProcs;
- CPDF_Dictionary* m_pPageResources;
- CPDF_Dictionary* m_pFontResources;
- CFX_MapPtrToPtr m_CacheMap;
- CFX_MapPtrToPtr m_DeletedMap;
+class CPDF_Type3Font : public CPDF_SimpleFont {
+ public:
+ CPDF_Type3Font();
+ ~CPDF_Type3Font() override;
+
+ void SetPageResources(CPDF_Dictionary* pResources) {
+ m_pPageResources = pResources;
+ }
+ CPDF_Type3Char* LoadChar(FX_DWORD charcode, int level = 0);
+ int GetCharWidthF(FX_DWORD charcode, int level = 0) override;
+ int GetCharTypeWidth(FX_DWORD charcode) override {
+ return GetCharWidthF(charcode);
+ }
+ void GetCharBBox(FX_DWORD charcode, FX_RECT& rect, int level = 0) override;
+ CFX_AffineMatrix& GetFontMatrix() { return m_FontMatrix; }
+ void CheckType3FontMetrics();
+
+ protected:
+ CFX_AffineMatrix m_FontMatrix;
+
+ private:
+ FX_BOOL _Load() override;
+ void LoadGlyphMap() override {}
+
+ int m_CharWidthL[256];
+ CPDF_Dictionary* m_pCharProcs;
+ CPDF_Dictionary* m_pPageResources;
+ CPDF_Dictionary* m_pFontResources;
+ CFX_MapPtrToPtr m_CacheMap;
+ CFX_MapPtrToPtr m_DeletedMap;
};
-#define CIDSET_UNKNOWN 0
-#define CIDSET_GB1 1
-#define CIDSET_CNS1 2
-#define CIDSET_JAPAN1 3
-#define CIDSET_KOREA1 4
-#define CIDSET_UNICODE 5
-#define NUMBER_OF_CIDSETS 6
-
-class CPDF_CIDFont : public CPDF_Font
-{
-public:
-
- CPDF_CIDFont();
-
- ~CPDF_CIDFont() override;
-
- FX_BOOL LoadGB2312();
- int GlyphFromCharCode(FX_DWORD charcode, FX_BOOL *pVertGlyph = NULL) override;
- int GetCharWidthF(FX_DWORD charcode, int level = 0) override;
- void GetCharBBox(FX_DWORD charcode, FX_RECT& rect, int level = 0) override;
- FX_WORD CIDFromCharCode(FX_DWORD charcode) const;
-
- FX_BOOL IsTrueType() const
- {
- return !m_bType1;
- }
-
- virtual FX_DWORD GetNextChar(const FX_CHAR* pString, int nStrLen, int& offset) const override;
- int CountChar(const FX_CHAR* pString, int size) const override;
- int AppendChar(FX_CHAR* str, FX_DWORD charcode) const override;
- int GetCharSize(FX_DWORD charcode) const override;
-
- int GetCharset() const
- {
- return m_Charset;
- }
-
- const uint8_t* GetCIDTransform(FX_WORD CID) const;
- FX_BOOL IsVertWriting() const override;
- short GetVertWidth(FX_WORD CID) const;
- void GetVertOrigin(FX_WORD CID, short& vx, short& vy) const;
- FX_BOOL IsUnicodeCompatible() const override;
- virtual FX_BOOL IsFontStyleFromCharCode(FX_DWORD charcode) const;
-
-protected:
- friend class CPDF_Font;
-
- FX_BOOL _Load() override;
- FX_WCHAR _UnicodeFromCharCode(FX_DWORD charcode) const override;
- FX_DWORD _CharCodeFromUnicode(FX_WCHAR Unicode) const override;
- int GetGlyphIndex(FX_DWORD unicodeb, FX_BOOL *pVertGlyph);
- void LoadMetricsArray(CPDF_Array* pArray, CFX_DWordArray& result, int nElements);
- void LoadSubstFont();
-
- CPDF_CMap* m_pCMap;
- CPDF_CMap* m_pAllocatedCMap;
- CPDF_CID2UnicodeMap* m_pCID2UnicodeMap;
- int m_Charset;
- FX_BOOL m_bType1;
- CPDF_StreamAcc* m_pCIDToGIDMap;
- FX_BOOL m_bCIDIsGID;
- FX_WORD m_DefaultWidth;
- FX_WORD* m_pAnsiWidths;
- FX_SMALL_RECT m_CharBBox[256];
- CFX_DWordArray m_WidthList;
- short m_DefaultVY;
- short m_DefaultW1;
- CFX_DWordArray m_VertMetrics;
- FX_BOOL m_bAdobeCourierStd;
- CFX_CTTGSUBTable* m_pTTGSUBTable;
+#define CIDSET_UNKNOWN 0
+#define CIDSET_GB1 1
+#define CIDSET_CNS1 2
+#define CIDSET_JAPAN1 3
+#define CIDSET_KOREA1 4
+#define CIDSET_UNICODE 5
+#define NUMBER_OF_CIDSETS 6
+
+class CPDF_CIDFont : public CPDF_Font {
+ public:
+ CPDF_CIDFont();
+
+ ~CPDF_CIDFont() override;
+
+ FX_BOOL LoadGB2312();
+ int GlyphFromCharCode(FX_DWORD charcode, FX_BOOL* pVertGlyph = NULL) override;
+ int GetCharWidthF(FX_DWORD charcode, int level = 0) override;
+ void GetCharBBox(FX_DWORD charcode, FX_RECT& rect, int level = 0) override;
+ FX_WORD CIDFromCharCode(FX_DWORD charcode) const;
+
+ FX_BOOL IsTrueType() const { return !m_bType1; }
+
+ virtual FX_DWORD GetNextChar(const FX_CHAR* pString,
+ int nStrLen,
+ int& offset) const override;
+ int CountChar(const FX_CHAR* pString, int size) const override;
+ int AppendChar(FX_CHAR* str, FX_DWORD charcode) const override;
+ int GetCharSize(FX_DWORD charcode) const override;
+
+ int GetCharset() const { return m_Charset; }
+
+ const uint8_t* GetCIDTransform(FX_WORD CID) const;
+ FX_BOOL IsVertWriting() const override;
+ short GetVertWidth(FX_WORD CID) const;
+ void GetVertOrigin(FX_WORD CID, short& vx, short& vy) const;
+ FX_BOOL IsUnicodeCompatible() const override;
+ virtual FX_BOOL IsFontStyleFromCharCode(FX_DWORD charcode) const;
+
+ protected:
+ friend class CPDF_Font;
+
+ FX_BOOL _Load() override;
+ FX_WCHAR _UnicodeFromCharCode(FX_DWORD charcode) const override;
+ FX_DWORD _CharCodeFromUnicode(FX_WCHAR Unicode) const override;
+ int GetGlyphIndex(FX_DWORD unicodeb, FX_BOOL* pVertGlyph);
+ void LoadMetricsArray(CPDF_Array* pArray,
+ CFX_DWordArray& result,
+ int nElements);
+ void LoadSubstFont();
+
+ CPDF_CMap* m_pCMap;
+ CPDF_CMap* m_pAllocatedCMap;
+ CPDF_CID2UnicodeMap* m_pCID2UnicodeMap;
+ int m_Charset;
+ FX_BOOL m_bType1;
+ CPDF_StreamAcc* m_pCIDToGIDMap;
+ FX_BOOL m_bCIDIsGID;
+ FX_WORD m_DefaultWidth;
+ FX_WORD* m_pAnsiWidths;
+ FX_SMALL_RECT m_CharBBox[256];
+ CFX_DWordArray m_WidthList;
+ short m_DefaultVY;
+ short m_DefaultW1;
+ CFX_DWordArray m_VertMetrics;
+ FX_BOOL m_bAdobeCourierStd;
+ CFX_CTTGSUBTable* m_pTTGSUBTable;
};
-#define PDFCS_DEVICEGRAY 1
-#define PDFCS_DEVICERGB 2
-#define PDFCS_DEVICECMYK 3
-#define PDFCS_CALGRAY 4
-#define PDFCS_CALRGB 5
-#define PDFCS_LAB 6
-#define PDFCS_ICCBASED 7
-#define PDFCS_SEPARATION 8
-#define PDFCS_DEVICEN 9
-#define PDFCS_INDEXED 10
-#define PDFCS_PATTERN 11
-
-class CPDF_ColorSpace
-{
-public:
-
- static CPDF_ColorSpace* GetStockCS(int Family);
-
- static CPDF_ColorSpace* Load(CPDF_Document* pDoc, CPDF_Object* pCSObj);
-
- void ReleaseCS();
-
- int GetBufSize() const;
-
- FX_FLOAT* CreateBuf();
-
- void GetDefaultColor(FX_FLOAT* buf) const;
-
- int CountComponents() const
- {
- return m_nComponents;
- }
-
- int GetFamily() const
- {
- return m_Family;
- }
-
- virtual void GetDefaultValue(int iComponent, FX_FLOAT& value, FX_FLOAT& min, FX_FLOAT& max) const
- {
- value = 0;
- min = 0;
- max = 1.0f;
- }
-
- FX_BOOL sRGB() const;
-
-
-
- virtual FX_BOOL GetRGB(FX_FLOAT* pBuf, FX_FLOAT& R, FX_FLOAT& G, FX_FLOAT& B) const = 0;
-
- virtual FX_BOOL SetRGB(FX_FLOAT* pBuf, FX_FLOAT R, FX_FLOAT G, FX_FLOAT B) const
- {
- return FALSE;
- }
-
-
-
-
- FX_BOOL GetCMYK(FX_FLOAT* pBuf, FX_FLOAT& c, FX_FLOAT& m, FX_FLOAT& y, FX_FLOAT& k) const;
-
- FX_BOOL SetCMYK(FX_FLOAT* pBuf, FX_FLOAT c, FX_FLOAT m, FX_FLOAT y, FX_FLOAT k) const;
-
-
- virtual void TranslateImageLine(uint8_t* dest_buf, const uint8_t* src_buf, int pixels,
- int image_width, int image_height, FX_BOOL bTransMask = FALSE) const;
-
- CPDF_Array*& GetArray()
- {
- return m_pArray;
- }
-
- int GetMaxIndex() const;
-
- virtual CPDF_ColorSpace* GetBaseCS() const
- {
- return NULL;
- }
-
- virtual void EnableStdConversion(FX_BOOL bEnabled);
-
- CPDF_Document* const m_pDocument;
-
-protected:
- CPDF_ColorSpace(CPDF_Document* pDoc, int family, int nComponents)
- : m_pDocument(pDoc),
- m_Family(family),
- m_nComponents(nComponents),
- m_pArray(nullptr),
- m_dwStdConversion(0) {
- }
- virtual ~CPDF_ColorSpace() {}
- virtual FX_BOOL v_Load(CPDF_Document* pDoc, CPDF_Array* pArray)
- {
- return TRUE;
- }
- virtual FX_BOOL v_GetCMYK(FX_FLOAT* pBuf, FX_FLOAT& c, FX_FLOAT& m, FX_FLOAT& y, FX_FLOAT& k) const
- {
- return FALSE;
- }
- virtual FX_BOOL v_SetCMYK(FX_FLOAT* pBuf, FX_FLOAT c, FX_FLOAT m, FX_FLOAT y, FX_FLOAT k) const
- {
- return FALSE;
- }
-
- int m_Family;
-
- int m_nComponents;
-
- CPDF_Array* m_pArray;
-
- FX_DWORD m_dwStdConversion;
+#define PDFCS_DEVICEGRAY 1
+#define PDFCS_DEVICERGB 2
+#define PDFCS_DEVICECMYK 3
+#define PDFCS_CALGRAY 4
+#define PDFCS_CALRGB 5
+#define PDFCS_LAB 6
+#define PDFCS_ICCBASED 7
+#define PDFCS_SEPARATION 8
+#define PDFCS_DEVICEN 9
+#define PDFCS_INDEXED 10
+#define PDFCS_PATTERN 11
+
+class CPDF_ColorSpace {
+ public:
+ static CPDF_ColorSpace* GetStockCS(int Family);
+
+ static CPDF_ColorSpace* Load(CPDF_Document* pDoc, CPDF_Object* pCSObj);
+
+ void ReleaseCS();
+
+ int GetBufSize() const;
+
+ FX_FLOAT* CreateBuf();
+
+ void GetDefaultColor(FX_FLOAT* buf) const;
+
+ int CountComponents() const { return m_nComponents; }
+
+ int GetFamily() const { return m_Family; }
+
+ virtual void GetDefaultValue(int iComponent,
+ FX_FLOAT& value,
+ FX_FLOAT& min,
+ FX_FLOAT& max) const {
+ value = 0;
+ min = 0;
+ max = 1.0f;
+ }
+
+ FX_BOOL sRGB() const;
+
+ virtual FX_BOOL GetRGB(FX_FLOAT* pBuf,
+ FX_FLOAT& R,
+ FX_FLOAT& G,
+ FX_FLOAT& B) const = 0;
+
+ virtual FX_BOOL SetRGB(FX_FLOAT* pBuf,
+ FX_FLOAT R,
+ FX_FLOAT G,
+ FX_FLOAT B) const {
+ return FALSE;
+ }
+
+ FX_BOOL GetCMYK(FX_FLOAT* pBuf,
+ FX_FLOAT& c,
+ FX_FLOAT& m,
+ FX_FLOAT& y,
+ FX_FLOAT& k) const;
+
+ FX_BOOL SetCMYK(FX_FLOAT* pBuf,
+ FX_FLOAT c,
+ FX_FLOAT m,
+ FX_FLOAT y,
+ FX_FLOAT k) const;
+
+ virtual void TranslateImageLine(uint8_t* dest_buf,
+ const uint8_t* src_buf,
+ int pixels,
+ int image_width,
+ int image_height,
+ FX_BOOL bTransMask = FALSE) const;
+
+ CPDF_Array*& GetArray() { return m_pArray; }
+
+ int GetMaxIndex() const;
+
+ virtual CPDF_ColorSpace* GetBaseCS() const { return NULL; }
+
+ virtual void EnableStdConversion(FX_BOOL bEnabled);
+
+ CPDF_Document* const m_pDocument;
+
+ protected:
+ CPDF_ColorSpace(CPDF_Document* pDoc, int family, int nComponents)
+ : m_pDocument(pDoc),
+ m_Family(family),
+ m_nComponents(nComponents),
+ m_pArray(nullptr),
+ m_dwStdConversion(0) {}
+ virtual ~CPDF_ColorSpace() {}
+ virtual FX_BOOL v_Load(CPDF_Document* pDoc, CPDF_Array* pArray) {
+ return TRUE;
+ }
+ virtual FX_BOOL v_GetCMYK(FX_FLOAT* pBuf,
+ FX_FLOAT& c,
+ FX_FLOAT& m,
+ FX_FLOAT& y,
+ FX_FLOAT& k) const {
+ return FALSE;
+ }
+ virtual FX_BOOL v_SetCMYK(FX_FLOAT* pBuf,
+ FX_FLOAT c,
+ FX_FLOAT m,
+ FX_FLOAT y,
+ FX_FLOAT k) const {
+ return FALSE;
+ }
+
+ int m_Family;
+
+ int m_nComponents;
+
+ CPDF_Array* m_pArray;
+
+ FX_DWORD m_dwStdConversion;
};
-class CPDF_Color
-{
-public:
+class CPDF_Color {
+ public:
+ CPDF_Color() : m_pCS(NULL), m_pBuffer(NULL) {}
- CPDF_Color() :m_pCS(NULL), m_pBuffer(NULL)
- {
- }
+ CPDF_Color(int family);
- CPDF_Color(int family);
+ ~CPDF_Color();
- ~CPDF_Color();
+ FX_BOOL IsNull() const { return m_pBuffer == NULL; }
- FX_BOOL IsNull() const
- {
- return m_pBuffer == NULL;
- }
+ FX_BOOL IsEqual(const CPDF_Color& other) const;
- FX_BOOL IsEqual(const CPDF_Color& other) const;
+ FX_BOOL IsPattern() const {
+ return m_pCS && m_pCS->GetFamily() == PDFCS_PATTERN;
+ }
- FX_BOOL IsPattern() const
- {
- return m_pCS && m_pCS->GetFamily() == PDFCS_PATTERN;
- }
+ void Copy(const CPDF_Color* pSrc);
- void Copy(const CPDF_Color* pSrc);
+ void SetColorSpace(CPDF_ColorSpace* pCS);
- void SetColorSpace(CPDF_ColorSpace* pCS);
+ void SetValue(FX_FLOAT* comp);
- void SetValue(FX_FLOAT* comp);
+ void SetValue(CPDF_Pattern* pPattern, FX_FLOAT* comp, int ncomps);
- void SetValue(CPDF_Pattern* pPattern, FX_FLOAT* comp, int ncomps);
+ FX_BOOL GetRGB(int& R, int& G, int& B) const;
- FX_BOOL GetRGB(int& R, int& G, int& B) const;
+ CPDF_Pattern* GetPattern() const;
- CPDF_Pattern* GetPattern() const;
+ CPDF_ColorSpace* GetPatternCS() const;
- CPDF_ColorSpace* GetPatternCS() const;
+ FX_FLOAT* GetPatternColor() const;
- FX_FLOAT* GetPatternColor() const;
+ CPDF_ColorSpace* m_pCS;
- CPDF_ColorSpace* m_pCS;
-
-protected:
- void ReleaseBuffer();
- void ReleaseColorSpace();
- FX_FLOAT* m_pBuffer;
+ protected:
+ void ReleaseBuffer();
+ void ReleaseColorSpace();
+ FX_FLOAT* m_pBuffer;
};
-#define PATTERN_TILING 1
-#define PATTERN_SHADING 2
-class CPDF_Pattern
-{
-public:
-
- virtual ~CPDF_Pattern();
- void SetForceClear(FX_BOOL bForceClear) { m_bForceClear = bForceClear; }
+#define PATTERN_TILING 1
+#define PATTERN_SHADING 2
+class CPDF_Pattern {
+ public:
+ virtual ~CPDF_Pattern();
+ void SetForceClear(FX_BOOL bForceClear) { m_bForceClear = bForceClear; }
- CPDF_Object* m_pPatternObj;
+ CPDF_Object* m_pPatternObj;
- int m_PatternType;
+ int m_PatternType;
- CFX_AffineMatrix m_Pattern2Form;
- CFX_AffineMatrix m_ParentMatrix;
+ CFX_AffineMatrix m_Pattern2Form;
+ CFX_AffineMatrix m_ParentMatrix;
- CPDF_Document* m_pDocument;
+ CPDF_Document* m_pDocument;
-protected:
- CPDF_Pattern(const CFX_AffineMatrix* pParentMatrix);
- FX_BOOL m_bForceClear;
+ protected:
+ CPDF_Pattern(const CFX_AffineMatrix* pParentMatrix);
+ FX_BOOL m_bForceClear;
};
-class CPDF_TilingPattern : public CPDF_Pattern
-{
-public:
-
- CPDF_TilingPattern(CPDF_Document* pDoc, CPDF_Object* pPatternObj, const CFX_AffineMatrix* parentMatrix);
-
- virtual ~CPDF_TilingPattern();
-
- FX_BOOL Load();
-
+class CPDF_TilingPattern : public CPDF_Pattern {
+ public:
+ CPDF_TilingPattern(CPDF_Document* pDoc,
+ CPDF_Object* pPatternObj,
+ const CFX_AffineMatrix* parentMatrix);
+ virtual ~CPDF_TilingPattern();
- FX_BOOL m_bColored;
+ FX_BOOL Load();
- CFX_FloatRect m_BBox;
+ FX_BOOL m_bColored;
- FX_FLOAT m_XStep;
+ CFX_FloatRect m_BBox;
- FX_FLOAT m_YStep;
+ FX_FLOAT m_XStep;
+ FX_FLOAT m_YStep;
-
- CPDF_Form* m_pForm;
+ CPDF_Form* m_pForm;
};
-class CPDF_ShadingPattern : public CPDF_Pattern
-{
-public:
+class CPDF_ShadingPattern : public CPDF_Pattern {
+ public:
+ CPDF_ShadingPattern(CPDF_Document* pDoc,
+ CPDF_Object* pPatternObj,
+ FX_BOOL bShading,
+ const CFX_AffineMatrix* parentMatrix);
- CPDF_ShadingPattern(CPDF_Document* pDoc, CPDF_Object* pPatternObj, FX_BOOL bShading, const CFX_AffineMatrix* parentMatrix);
+ virtual ~CPDF_ShadingPattern();
- virtual ~CPDF_ShadingPattern();
+ CPDF_Object* m_pShadingObj;
- CPDF_Object* m_pShadingObj;
+ FX_BOOL m_bShadingObj;
- FX_BOOL m_bShadingObj;
+ FX_BOOL Load();
- FX_BOOL Load();
+ FX_BOOL Reload();
- FX_BOOL Reload();
+ int m_ShadingType;
- int m_ShadingType;
+ CPDF_ColorSpace* m_pCS; // Still keep m_pCS as some CPDF_ColorSpace (name
+ // object) are not managed as counted objects. Refer
+ // to CPDF_DocPageData::GetColorSpace.
- CPDF_ColorSpace* m_pCS; // Still keep m_pCS as some CPDF_ColorSpace (name object) are not managed as counted objects. Refer to CPDF_DocPageData::GetColorSpace.
+ CPDF_CountedColorSpace* m_pCountedCS;
- CPDF_CountedColorSpace* m_pCountedCS;
+ CPDF_Function* m_pFunctions[4];
- CPDF_Function* m_pFunctions[4];
+ int m_nFuncs;
- int m_nFuncs;
-protected:
- void Clear();
+ protected:
+ void Clear();
};
struct CPDF_MeshVertex {
- FX_FLOAT x, y;
- FX_FLOAT r, g, b;
+ FX_FLOAT x, y;
+ FX_FLOAT r, g, b;
};
-class CPDF_MeshStream
-{
-public:
-
- FX_BOOL Load(CPDF_Stream* pShadingStream, CPDF_Function** pFuncs, int nFuncs, CPDF_ColorSpace* pCS);
-
- FX_DWORD GetFlag();
-
- void GetCoords(FX_FLOAT& x, FX_FLOAT& y);
-
- void GetColor(FX_FLOAT& r, FX_FLOAT& g, FX_FLOAT& b);
-
- FX_DWORD GetVertex(CPDF_MeshVertex& vertex, CFX_AffineMatrix* pObject2Bitmap);
-
- FX_BOOL GetVertexRow(CPDF_MeshVertex* vertex, int count, CFX_AffineMatrix* pObject2Bitmap);
- CPDF_Function** m_pFuncs;
- CPDF_ColorSpace* m_pCS;
- FX_DWORD m_nFuncs, m_nCoordBits, m_nCompBits, m_nFlagBits, m_nComps;
- FX_DWORD m_CoordMax, m_CompMax;
- FX_FLOAT m_xmin, m_xmax, m_ymin, m_ymax;
- FX_FLOAT m_ColorMin[8], m_ColorMax[8];
- CPDF_StreamAcc m_Stream;
- CFX_BitStream m_BitStream;
+class CPDF_MeshStream {
+ public:
+ FX_BOOL Load(CPDF_Stream* pShadingStream,
+ CPDF_Function** pFuncs,
+ int nFuncs,
+ CPDF_ColorSpace* pCS);
+
+ FX_DWORD GetFlag();
+
+ void GetCoords(FX_FLOAT& x, FX_FLOAT& y);
+
+ void GetColor(FX_FLOAT& r, FX_FLOAT& g, FX_FLOAT& b);
+
+ FX_DWORD GetVertex(CPDF_MeshVertex& vertex, CFX_AffineMatrix* pObject2Bitmap);
+
+ FX_BOOL GetVertexRow(CPDF_MeshVertex* vertex,
+ int count,
+ CFX_AffineMatrix* pObject2Bitmap);
+ CPDF_Function** m_pFuncs;
+ CPDF_ColorSpace* m_pCS;
+ FX_DWORD m_nFuncs, m_nCoordBits, m_nCompBits, m_nFlagBits, m_nComps;
+ FX_DWORD m_CoordMax, m_CompMax;
+ FX_FLOAT m_xmin, m_xmax, m_ymin, m_ymax;
+ FX_FLOAT m_ColorMin[8], m_ColorMax[8];
+ CPDF_StreamAcc m_Stream;
+ CFX_BitStream m_BitStream;
};
-#define PDF_IMAGE_NO_COMPRESS 0x0000
-#define PDF_IMAGE_LOSSY_COMPRESS 0x0001
-#define PDF_IMAGE_LOSSLESS_COMPRESS 0x0002
-#define PDF_IMAGE_MASK_LOSSY_COMPRESS 0x0004
-#define PDF_IMAGE_MASK_LOSSLESS_COMPRESS 0x0008
-class CPDF_ImageSetParam
-{
-public:
- CPDF_ImageSetParam()
- : pMatteColor(NULL)
- , nQuality(80)
- {
- }
- FX_ARGB* pMatteColor;
- int32_t nQuality;
+#define PDF_IMAGE_NO_COMPRESS 0x0000
+#define PDF_IMAGE_LOSSY_COMPRESS 0x0001
+#define PDF_IMAGE_LOSSLESS_COMPRESS 0x0002
+#define PDF_IMAGE_MASK_LOSSY_COMPRESS 0x0004
+#define PDF_IMAGE_MASK_LOSSLESS_COMPRESS 0x0008
+class CPDF_ImageSetParam {
+ public:
+ CPDF_ImageSetParam() : pMatteColor(NULL), nQuality(80) {}
+ FX_ARGB* pMatteColor;
+ int32_t nQuality;
};
-class CPDF_Image
-{
-public:
+class CPDF_Image {
+ public:
+ CPDF_Image(CPDF_Document* pDoc);
- CPDF_Image(CPDF_Document* pDoc);
+ ~CPDF_Image();
- ~CPDF_Image();
+ FX_BOOL LoadImageF(CPDF_Stream* pImageStream, FX_BOOL bInline);
- FX_BOOL LoadImageF(CPDF_Stream* pImageStream, FX_BOOL bInline);
+ void Release();
- void Release();
+ CPDF_Image* Clone();
- CPDF_Image* Clone();
+ FX_BOOL IsInline() { return m_bInline; }
- FX_BOOL IsInline()
- {
- return m_bInline;
- }
+ void SetInlineDict(CPDF_Dictionary* pDict) { m_pInlineDict = pDict; }
- void SetInlineDict(CPDF_Dictionary* pDict)
- {
- m_pInlineDict = pDict;
- }
+ CPDF_Dictionary* GetInlineDict() const { return m_pInlineDict; }
- CPDF_Dictionary* GetInlineDict() const
- {
- return m_pInlineDict;
- }
+ CPDF_Stream* GetStream() const { return m_pStream; }
- CPDF_Stream* GetStream() const
- {
- return m_pStream;
- }
+ CPDF_Dictionary* GetDict() const {
+ return m_pStream ? m_pStream->GetDict() : NULL;
+ }
- CPDF_Dictionary* GetDict() const
- {
- return m_pStream? m_pStream->GetDict(): NULL;
- }
-
- CPDF_Dictionary* GetOC() const
- {
- return m_pOC;
- }
-
- CPDF_Document* GetDocument() const
- {
- return m_pDocument;
- }
+ CPDF_Dictionary* GetOC() const { return m_pOC; }
+ CPDF_Document* GetDocument() const { return m_pDocument; }
+ int32_t GetPixelHeight() const { return m_Height; }
- int32_t GetPixelHeight() const
- {
- return m_Height;
- }
-
- int32_t GetPixelWidth() const
- {
- return m_Width;
- }
-
-
- FX_BOOL IsMask() const
- {
- return m_bIsMask;
- }
-
- FX_BOOL IsInterpol() const
- {
- return m_bInterpolate;
- }
+ int32_t GetPixelWidth() const { return m_Width; }
- CFX_DIBSource* LoadDIBSource(CFX_DIBSource** ppMask = NULL, FX_DWORD* pMatteColor = NULL, FX_BOOL bStdCS = FALSE, FX_DWORD GroupFamily = 0, FX_BOOL bLoadMask = FALSE) const;
+ FX_BOOL IsMask() const { return m_bIsMask; }
+ FX_BOOL IsInterpol() const { return m_bInterpolate; }
+ CFX_DIBSource* LoadDIBSource(CFX_DIBSource** ppMask = NULL,
+ FX_DWORD* pMatteColor = NULL,
+ FX_BOOL bStdCS = FALSE,
+ FX_DWORD GroupFamily = 0,
+ FX_BOOL bLoadMask = FALSE) const;
- void SetImage(const CFX_DIBitmap* pDIBitmap, int32_t iCompress, IFX_FileWrite *pFileWrite = NULL, IFX_FileRead *pFileRead = NULL, const CFX_DIBitmap* pMask = NULL, const CPDF_ImageSetParam* pParam = NULL);
+ void SetImage(const CFX_DIBitmap* pDIBitmap,
+ int32_t iCompress,
+ IFX_FileWrite* pFileWrite = NULL,
+ IFX_FileRead* pFileRead = NULL,
+ const CFX_DIBitmap* pMask = NULL,
+ const CPDF_ImageSetParam* pParam = NULL);
- void SetJpegImage(uint8_t* pImageData, FX_DWORD size);
+ void SetJpegImage(uint8_t* pImageData, FX_DWORD size);
- void SetJpegImage(IFX_FileRead *pFile);
+ void SetJpegImage(IFX_FileRead* pFile);
- void ResetCache(CPDF_Page* pPage, const CFX_DIBitmap* pDIBitmap);
+ void ResetCache(CPDF_Page* pPage, const CFX_DIBitmap* pDIBitmap);
-public:
- FX_BOOL StartLoadDIBSource(CPDF_Dictionary* pFormResource, CPDF_Dictionary* pPageResource, FX_BOOL bStdCS = FALSE, FX_DWORD GroupFamily = 0, FX_BOOL bLoadMask = FALSE);
- FX_BOOL Continue(IFX_Pause* pPause);
- CFX_DIBSource* DetachBitmap();
- CFX_DIBSource* DetachMask();
- CFX_DIBSource* m_pDIBSource;
- CFX_DIBSource* m_pMask;
- FX_DWORD m_MatteColor;
-private:
+ public:
+ FX_BOOL StartLoadDIBSource(CPDF_Dictionary* pFormResource,
+ CPDF_Dictionary* pPageResource,
+ FX_BOOL bStdCS = FALSE,
+ FX_DWORD GroupFamily = 0,
+ FX_BOOL bLoadMask = FALSE);
+ FX_BOOL Continue(IFX_Pause* pPause);
+ CFX_DIBSource* DetachBitmap();
+ CFX_DIBSource* DetachMask();
+ CFX_DIBSource* m_pDIBSource;
+ CFX_DIBSource* m_pMask;
+ FX_DWORD m_MatteColor;
- CPDF_Stream* m_pStream;
- FX_BOOL m_bInline;
- CPDF_Dictionary* m_pInlineDict;
+ private:
+ CPDF_Stream* m_pStream;
+ FX_BOOL m_bInline;
+ CPDF_Dictionary* m_pInlineDict;
- int32_t m_Height;
+ int32_t m_Height;
- int32_t m_Width;
+ int32_t m_Width;
- FX_BOOL m_bIsMask;
+ FX_BOOL m_bIsMask;
- FX_BOOL m_bInterpolate;
+ FX_BOOL m_bInterpolate;
- CPDF_Document* m_pDocument;
+ CPDF_Document* m_pDocument;
- CPDF_Dictionary* m_pOC;
- CPDF_Dictionary* InitJPEG(uint8_t* pData, FX_DWORD size);
+ CPDF_Dictionary* m_pOC;
+ CPDF_Dictionary* InitJPEG(uint8_t* pData, FX_DWORD size);
};
#endif // CORE_INCLUDE_FPDFAPI_FPDF_RESOURCE_H_
diff --git a/core/include/fpdfapi/fpdf_serial.h b/core/include/fpdfapi/fpdf_serial.h
index cccb3abf11..7197e0d7b0 100644
--- a/core/include/fpdfapi/fpdf_serial.h
+++ b/core/include/fpdfapi/fpdf_serial.h
@@ -12,99 +12,103 @@
class CPDF_ObjectStream;
class CPDF_XRefStream;
-CFX_ByteTextBuf& operator << (CFX_ByteTextBuf& buf, const CPDF_Object* pObj);
-#define FPDFCREATE_INCREMENTAL 1
-#define FPDFCREATE_NO_ORIGINAL 2
-#define FPDFCREATE_PROGRESSIVE 4
-#define FPDFCREATE_OBJECTSTREAM 8
-class CPDF_Creator
-{
-public:
+CFX_ByteTextBuf& operator<<(CFX_ByteTextBuf& buf, const CPDF_Object* pObj);
+#define FPDFCREATE_INCREMENTAL 1
+#define FPDFCREATE_NO_ORIGINAL 2
+#define FPDFCREATE_PROGRESSIVE 4
+#define FPDFCREATE_OBJECTSTREAM 8
+class CPDF_Creator {
+ public:
+ CPDF_Creator(CPDF_Document* pDoc);
- CPDF_Creator(CPDF_Document* pDoc);
+ ~CPDF_Creator();
- ~CPDF_Creator();
+ void RemoveSecurity();
- void RemoveSecurity();
+ FX_BOOL Create(const FX_WCHAR* filename, FX_DWORD flags = 0);
- FX_BOOL Create(const FX_WCHAR* filename, FX_DWORD flags = 0);
+ FX_BOOL Create(const FX_CHAR* filename, FX_DWORD flags = 0);
- FX_BOOL Create(const FX_CHAR* filename, FX_DWORD flags = 0);
+ FX_BOOL Create(IFX_StreamWrite* pFile, FX_DWORD flags = 0);
- FX_BOOL Create(IFX_StreamWrite* pFile, FX_DWORD flags = 0);
+ int32_t Continue(IFX_Pause* pPause = NULL);
- int32_t Continue(IFX_Pause *pPause = NULL);
+ FX_BOOL SetFileVersion(int32_t fileVersion = 17);
- FX_BOOL SetFileVersion(int32_t fileVersion = 17);
-protected:
+ protected:
+ CPDF_Document* m_pDocument;
- CPDF_Document* m_pDocument;
+ CPDF_Parser* m_pParser;
- CPDF_Parser* m_pParser;
+ FX_BOOL m_bCompress;
- FX_BOOL m_bCompress;
+ FX_BOOL m_bSecurityChanged;
- FX_BOOL m_bSecurityChanged;
+ CPDF_Dictionary* m_pEncryptDict;
+ FX_DWORD m_dwEnryptObjNum;
+ FX_BOOL m_bEncryptCloned;
- CPDF_Dictionary* m_pEncryptDict;
- FX_DWORD m_dwEnryptObjNum;
- FX_BOOL m_bEncryptCloned;
+ FX_BOOL m_bStandardSecurity;
- FX_BOOL m_bStandardSecurity;
+ CPDF_CryptoHandler* m_pCryptoHandler;
+ FX_BOOL m_bNewCrypto;
- CPDF_CryptoHandler* m_pCryptoHandler;
- FX_BOOL m_bNewCrypto;
+ FX_BOOL m_bEncryptMetadata;
- FX_BOOL m_bEncryptMetadata;
+ CPDF_Object* m_pMetadata;
- CPDF_Object* m_pMetadata;
+ CPDF_XRefStream* m_pXRefStream;
- CPDF_XRefStream* m_pXRefStream;
+ int32_t m_ObjectStreamSize;
- int32_t m_ObjectStreamSize;
+ FX_DWORD m_dwLastObjNum;
+ FX_BOOL Create(FX_DWORD flags);
+ void ResetStandardSecurity();
+ void Clear();
+ int32_t WriteDoc_Stage1(IFX_Pause* pPause);
+ int32_t WriteDoc_Stage2(IFX_Pause* pPause);
+ int32_t WriteDoc_Stage3(IFX_Pause* pPause);
+ int32_t WriteDoc_Stage4(IFX_Pause* pPause);
- FX_DWORD m_dwLastObjNum;
- FX_BOOL Create(FX_DWORD flags);
- void ResetStandardSecurity();
- void Clear();
- int32_t WriteDoc_Stage1(IFX_Pause *pPause);
- int32_t WriteDoc_Stage2(IFX_Pause *pPause);
- int32_t WriteDoc_Stage3(IFX_Pause *pPause);
- int32_t WriteDoc_Stage4(IFX_Pause *pPause);
+ CFX_FileBufferArchive m_File;
- CFX_FileBufferArchive m_File;
+ FX_FILESIZE m_Offset;
+ void InitOldObjNumOffsets();
+ void InitNewObjNumOffsets();
+ void AppendNewObjNum(FX_DWORD objbum);
+ int32_t WriteOldIndirectObject(FX_DWORD objnum);
+ int32_t WriteOldObjs(IFX_Pause* pPause);
+ int32_t WriteNewObjs(FX_BOOL bIncremental, IFX_Pause* pPause);
+ int32_t WriteIndirectObj(const CPDF_Object* pObj);
+ int32_t WriteDirectObj(FX_DWORD objnum,
+ const CPDF_Object* pObj,
+ FX_BOOL bEncrypt = TRUE);
+ int32_t WriteIndirectObjectToStream(const CPDF_Object* pObj);
+ int32_t WriteIndirectObj(FX_DWORD objnum, const CPDF_Object* pObj);
+ int32_t WriteIndirectObjectToStream(FX_DWORD objnum,
+ const uint8_t* pBuffer,
+ FX_DWORD dwSize);
+ int32_t AppendObjectNumberToXRef(FX_DWORD objnum);
+ void InitID(FX_BOOL bDefault = TRUE);
+ int32_t WriteStream(const CPDF_Object* pStream,
+ FX_DWORD objnum,
+ CPDF_CryptoHandler* pCrypto);
- FX_FILESIZE m_Offset;
- void InitOldObjNumOffsets();
- void InitNewObjNumOffsets();
- void AppendNewObjNum(FX_DWORD objbum);
- int32_t WriteOldIndirectObject(FX_DWORD objnum);
- int32_t WriteOldObjs(IFX_Pause *pPause);
- int32_t WriteNewObjs(FX_BOOL bIncremental, IFX_Pause *pPause);
- int32_t WriteIndirectObj(const CPDF_Object* pObj);
- int32_t WriteDirectObj(FX_DWORD objnum, const CPDF_Object* pObj, FX_BOOL bEncrypt = TRUE);
- int32_t WriteIndirectObjectToStream(const CPDF_Object* pObj);
- int32_t WriteIndirectObj(FX_DWORD objnum, const CPDF_Object* pObj);
- int32_t WriteIndirectObjectToStream(FX_DWORD objnum, const uint8_t* pBuffer, FX_DWORD dwSize);
- int32_t AppendObjectNumberToXRef(FX_DWORD objnum);
- void InitID(FX_BOOL bDefault = TRUE);
- int32_t WriteStream(const CPDF_Object* pStream, FX_DWORD objnum, CPDF_CryptoHandler* pCrypto);
+ int32_t m_iStage;
+ FX_DWORD m_dwFlags;
+ FX_POSITION m_Pos;
+ FX_FILESIZE m_XrefStart;
- int32_t m_iStage;
- FX_DWORD m_dwFlags;
- FX_POSITION m_Pos;
- FX_FILESIZE m_XrefStart;
+ CFX_FileSizeListArray m_ObjectOffset;
- CFX_FileSizeListArray m_ObjectOffset;
+ CFX_DWordListArray m_ObjectSize;
+ CFX_DWordArray m_NewObjNumArray;
- CFX_DWordListArray m_ObjectSize;
- CFX_DWordArray m_NewObjNumArray;
+ CPDF_Array* m_pIDArray;
- CPDF_Array* m_pIDArray;
-
- int32_t m_FileVersion;
- friend class CPDF_ObjectStream;
- friend class CPDF_XRefStream;
+ int32_t m_FileVersion;
+ friend class CPDF_ObjectStream;
+ friend class CPDF_XRefStream;
};
#endif // CORE_INCLUDE_FPDFAPI_FPDF_SERIAL_H_
diff --git a/core/include/fpdfdoc/fpdf_ap.h b/core/include/fpdfdoc/fpdf_ap.h
index 7cfaed4685..43452fdb47 100644
--- a/core/include/fpdfdoc/fpdf_ap.h
+++ b/core/include/fpdfdoc/fpdf_ap.h
@@ -10,86 +10,98 @@
#include "../fpdfapi/fpdf_parser.h"
#include "fpdf_vt.h"
-class IPVT_FontMap
-{
-public:
- virtual ~IPVT_FontMap() { }
- virtual CPDF_Font* GetPDFFont(int32_t nFontIndex) = 0;
- virtual CFX_ByteString GetPDFFontAlias(int32_t nFontIndex) = 0;
+class IPVT_FontMap {
+ public:
+ virtual ~IPVT_FontMap() {}
+ virtual CPDF_Font* GetPDFFont(int32_t nFontIndex) = 0;
+ virtual CFX_ByteString GetPDFFontAlias(int32_t nFontIndex) = 0;
};
struct CPVT_Dash {
+ CPVT_Dash(int32_t dash, int32_t gap, int32_t phase)
+ : nDash(dash), nGap(gap), nPhase(phase) {}
- CPVT_Dash(int32_t dash, int32_t gap, int32_t phase) : nDash(dash), nGap(gap), nPhase(phase)
- {}
+ int32_t nDash;
- int32_t nDash;
+ int32_t nGap;
- int32_t nGap;
-
- int32_t nPhase;
+ int32_t nPhase;
};
-#define CT_TRANSPARENT 0
-#define CT_GRAY 1
-#define CT_RGB 2
-#define CT_CMYK 3
+#define CT_TRANSPARENT 0
+#define CT_GRAY 1
+#define CT_RGB 2
+#define CT_CMYK 3
struct CPVT_Color {
-
- CPVT_Color(int32_t type = 0, FX_FLOAT color1 = 0.0f, FX_FLOAT color2 = 0.0f, FX_FLOAT color3 = 0.0f, FX_FLOAT color4 = 0.0f)
- : nColorType(type), fColor1(color1), fColor2(color2), fColor3(color3), fColor4(color4)
- {}
-
- int32_t nColorType;
- FX_FLOAT fColor1;
- FX_FLOAT fColor2;
- FX_FLOAT fColor3;
- FX_FLOAT fColor4;
+ CPVT_Color(int32_t type = 0,
+ FX_FLOAT color1 = 0.0f,
+ FX_FLOAT color2 = 0.0f,
+ FX_FLOAT color3 = 0.0f,
+ FX_FLOAT color4 = 0.0f)
+ : nColorType(type),
+ fColor1(color1),
+ fColor2(color2),
+ fColor3(color3),
+ fColor4(color4) {}
+
+ int32_t nColorType;
+ FX_FLOAT fColor1;
+ FX_FLOAT fColor2;
+ FX_FLOAT fColor3;
+ FX_FLOAT fColor4;
};
-class CPVT_Provider : public IPDF_VariableText_Provider
-{
-public:
+class CPVT_Provider : public IPDF_VariableText_Provider {
+ public:
+ CPVT_Provider(IPVT_FontMap* pFontMap);
- CPVT_Provider(IPVT_FontMap * pFontMap);
+ virtual ~CPVT_Provider();
- virtual ~CPVT_Provider();
+ int32_t GetCharWidth(int32_t nFontIndex, FX_WORD word, int32_t nWordStyle);
- int32_t GetCharWidth(int32_t nFontIndex, FX_WORD word, int32_t nWordStyle);
+ int32_t GetTypeAscent(int32_t nFontIndex);
- int32_t GetTypeAscent(int32_t nFontIndex);
+ int32_t GetTypeDescent(int32_t nFontIndex);
- int32_t GetTypeDescent(int32_t nFontIndex);
+ int32_t GetWordFontIndex(FX_WORD word, int32_t charset, int32_t nFontIndex);
- int32_t GetWordFontIndex(FX_WORD word, int32_t charset, int32_t nFontIndex);
+ FX_BOOL IsLatinWord(FX_WORD word);
- FX_BOOL IsLatinWord(FX_WORD word);
+ int32_t GetDefaultFontIndex();
- int32_t GetDefaultFontIndex();
-private:
-
- IPVT_FontMap * m_pFontMap;
+ private:
+ IPVT_FontMap* m_pFontMap;
};
-#define PBS_SOLID 0
-#define PBS_DASH 1
-#define PBS_BEVELED 2
-#define PBS_INSET 3
-#define PBS_UNDERLINED 4
-class CPVT_GenerateAP
-{
-public:
-
- static FX_BOOL GenerateTextFieldAP(CPDF_Document* pDoc, CPDF_Dictionary* pAnnotDict);
-
- static FX_BOOL GenerateComboBoxAP(CPDF_Document* pDoc, CPDF_Dictionary* pAnnotDict);
-
- static FX_BOOL GenerateListBoxAP(CPDF_Document* pDoc, CPDF_Dictionary* pAnnotDict);
-
- static CFX_ByteString GenerateEditAP(IPVT_FontMap * pFontMap, IPDF_VariableText_Iterator * pIterator,
- const CPDF_Point & ptOffset, FX_BOOL bContinuous, FX_WORD SubWord = 0, const CPVT_WordRange * pVisible = NULL);
-
- static CFX_ByteString GenerateBorderAP(const CPDF_Rect & rect, FX_FLOAT fWidth,
- const CPVT_Color & color, const CPVT_Color & crLeftTop, const CPVT_Color & crRightBottom,
- int32_t nStyle, const CPVT_Dash & dash);
-
- static CFX_ByteString GenerateColorAP(const CPVT_Color & color, const FX_BOOL & bFillOrStroke);
+#define PBS_SOLID 0
+#define PBS_DASH 1
+#define PBS_BEVELED 2
+#define PBS_INSET 3
+#define PBS_UNDERLINED 4
+class CPVT_GenerateAP {
+ public:
+ static FX_BOOL GenerateTextFieldAP(CPDF_Document* pDoc,
+ CPDF_Dictionary* pAnnotDict);
+
+ static FX_BOOL GenerateComboBoxAP(CPDF_Document* pDoc,
+ CPDF_Dictionary* pAnnotDict);
+
+ static FX_BOOL GenerateListBoxAP(CPDF_Document* pDoc,
+ CPDF_Dictionary* pAnnotDict);
+
+ static CFX_ByteString GenerateEditAP(IPVT_FontMap* pFontMap,
+ IPDF_VariableText_Iterator* pIterator,
+ const CPDF_Point& ptOffset,
+ FX_BOOL bContinuous,
+ FX_WORD SubWord = 0,
+ const CPVT_WordRange* pVisible = NULL);
+
+ static CFX_ByteString GenerateBorderAP(const CPDF_Rect& rect,
+ FX_FLOAT fWidth,
+ const CPVT_Color& color,
+ const CPVT_Color& crLeftTop,
+ const CPVT_Color& crRightBottom,
+ int32_t nStyle,
+ const CPVT_Dash& dash);
+
+ static CFX_ByteString GenerateColorAP(const CPVT_Color& color,
+ const FX_BOOL& bFillOrStroke);
};
#endif // CORE_INCLUDE_FPDFDOC_FPDF_AP_H_
diff --git a/core/include/fpdfdoc/fpdf_doc.h b/core/include/fpdfdoc/fpdf_doc.h
index fc9d3bce87..18dc7aa064 100644
--- a/core/include/fpdfdoc/fpdf_doc.h
+++ b/core/include/fpdfdoc/fpdf_doc.h
@@ -42,1663 +42,1220 @@ class CPDF_TextObject;
class CPDF_ViewerPreferences;
class CXML_Element;
-class CPDF_NameTree
-{
-public:
+class CPDF_NameTree {
+ public:
+ CPDF_NameTree(CPDF_Dictionary* pRoot) { m_pRoot = pRoot; }
- CPDF_NameTree(CPDF_Dictionary* pRoot)
- {
- m_pRoot = pRoot;
- }
+ CPDF_NameTree(CPDF_Document* pDoc, const CFX_ByteStringC& category);
- CPDF_NameTree(CPDF_Document* pDoc, const CFX_ByteStringC& category);
+ CPDF_Object* LookupValue(int nIndex, CFX_ByteString& csName) const;
- CPDF_Object* LookupValue(int nIndex, CFX_ByteString& csName) const;
+ CPDF_Object* LookupValue(const CFX_ByteString& csName) const;
- CPDF_Object* LookupValue(const CFX_ByteString& csName) const;
+ CPDF_Array* LookupNamedDest(CPDF_Document* pDoc,
+ const CFX_ByteStringC& sName);
- CPDF_Array* LookupNamedDest(CPDF_Document* pDoc, const CFX_ByteStringC& sName);
+ int GetIndex(const CFX_ByteString& csName) const;
- int GetIndex(const CFX_ByteString& csName) const;
+ int GetCount() const;
- int GetCount() const;
+ CPDF_Dictionary* GetRoot() const { return m_pRoot; }
-
- CPDF_Dictionary* GetRoot() const
- {
- return m_pRoot;
- }
-
-protected:
-
- CPDF_Dictionary* m_pRoot;
+ protected:
+ CPDF_Dictionary* m_pRoot;
};
-class CPDF_BookmarkTree
-{
-public:
- CPDF_BookmarkTree(CPDF_Document* pDoc) : m_pDocument(pDoc) {}
+class CPDF_BookmarkTree {
+ public:
+ CPDF_BookmarkTree(CPDF_Document* pDoc) : m_pDocument(pDoc) {}
- CPDF_Bookmark GetFirstChild(const CPDF_Bookmark& parent) const;
+ CPDF_Bookmark GetFirstChild(const CPDF_Bookmark& parent) const;
- CPDF_Bookmark GetNextSibling(const CPDF_Bookmark& bookmark) const;
+ CPDF_Bookmark GetNextSibling(const CPDF_Bookmark& bookmark) const;
- CPDF_Document* GetDocument() const { return m_pDocument; }
+ CPDF_Document* GetDocument() const { return m_pDocument; }
-protected:
- CPDF_Document* m_pDocument;
+ protected:
+ CPDF_Document* m_pDocument;
};
-#define PDFBOOKMARK_ITALIC 1
-#define PDFBOOKMARK_BOLD 2
-class CPDF_Bookmark
-{
-public:
-
- CPDF_Bookmark() : m_pDict(NULL) {}
+#define PDFBOOKMARK_ITALIC 1
+#define PDFBOOKMARK_BOLD 2
+class CPDF_Bookmark {
+ public:
+ CPDF_Bookmark() : m_pDict(NULL) {}
- explicit CPDF_Bookmark(CPDF_Dictionary* pDict) : m_pDict(pDict) {}
+ explicit CPDF_Bookmark(CPDF_Dictionary* pDict) : m_pDict(pDict) {}
- CPDF_Dictionary* GetDict() const { return m_pDict; }
+ CPDF_Dictionary* GetDict() const { return m_pDict; }
- operator bool() const { return m_pDict != NULL; }
+ operator bool() const { return m_pDict != NULL; }
- FX_DWORD GetColorRef() const;
+ FX_DWORD GetColorRef() const;
- FX_DWORD GetFontStyle() const;
+ FX_DWORD GetFontStyle() const;
- CFX_WideString GetTitle() const;
+ CFX_WideString GetTitle() const;
- CPDF_Dest GetDest(CPDF_Document* pDocument) const;
+ CPDF_Dest GetDest(CPDF_Document* pDocument) const;
- CPDF_Action GetAction() const;
+ CPDF_Action GetAction() const;
- CPDF_Dictionary* m_pDict;
+ CPDF_Dictionary* m_pDict;
};
-#define PDFZOOM_XYZ 1
-#define PDFZOOM_FITPAGE 2
-#define PDFZOOM_FITHORZ 3
-#define PDFZOOM_FITVERT 4
-#define PDFZOOM_FITRECT 5
-#define PDFZOOM_FITBBOX 6
-#define PDFZOOM_FITBHORZ 7
-#define PDFZOOM_FITBVERT 8
-class CPDF_Dest
-{
-public:
- CPDF_Dest() : m_pObj(nullptr) { }
- explicit CPDF_Dest(CPDF_Object* pObj) : m_pObj(pObj) { }
-
- operator bool () const { return m_pObj != NULL; }
- CPDF_Object* GetObject() const { return m_pObj; }
-
- CFX_ByteString GetRemoteName();
- int GetPageIndex(CPDF_Document* pDoc);
- FX_DWORD GetPageObjNum();
- int GetZoomMode();
- FX_FLOAT GetParam(int index);
-
-protected:
- CPDF_Object* m_pObj;
+#define PDFZOOM_XYZ 1
+#define PDFZOOM_FITPAGE 2
+#define PDFZOOM_FITHORZ 3
+#define PDFZOOM_FITVERT 4
+#define PDFZOOM_FITRECT 5
+#define PDFZOOM_FITBBOX 6
+#define PDFZOOM_FITBHORZ 7
+#define PDFZOOM_FITBVERT 8
+class CPDF_Dest {
+ public:
+ CPDF_Dest() : m_pObj(nullptr) {}
+ explicit CPDF_Dest(CPDF_Object* pObj) : m_pObj(pObj) {}
+
+ operator bool() const { return m_pObj != NULL; }
+ CPDF_Object* GetObject() const { return m_pObj; }
+
+ CFX_ByteString GetRemoteName();
+ int GetPageIndex(CPDF_Document* pDoc);
+ FX_DWORD GetPageObjNum();
+ int GetZoomMode();
+ FX_FLOAT GetParam(int index);
+
+ protected:
+ CPDF_Object* m_pObj;
};
-class CPDF_OCContext : public IPDF_OCContext
-{
-public:
+class CPDF_OCContext : public IPDF_OCContext {
+ public:
+ enum UsageType { View = 0, Design, Print, Export };
- enum UsageType {
- View = 0,
- Design,
- Print,
- Export
- };
+ CPDF_OCContext(CPDF_Document* pDoc, UsageType eUsageType = View);
- CPDF_OCContext(CPDF_Document *pDoc, UsageType eUsageType = View);
+ virtual ~CPDF_OCContext();
- virtual ~CPDF_OCContext();
+ CPDF_Document* GetDocument() const { return m_pDocument; }
- CPDF_Document* GetDocument() const
- {
- return m_pDocument;
- }
+ UsageType GetUsageType() const { return m_eUsageType; }
- UsageType GetUsageType() const
- {
- return m_eUsageType;
- }
+ FX_BOOL CheckOCGVisible(const CPDF_Dictionary* pOCGDict);
- FX_BOOL CheckOCGVisible(const CPDF_Dictionary *pOCGDict);
+ void ResetOCContext();
- void ResetOCContext();
-protected:
+ protected:
+ FX_BOOL LoadOCGStateFromConfig(const CFX_ByteStringC& csConfig,
+ const CPDF_Dictionary* pOCGDict,
+ FX_BOOL& bValidConfig) const;
- FX_BOOL LoadOCGStateFromConfig(const CFX_ByteStringC& csConfig, const CPDF_Dictionary *pOCGDict, FX_BOOL &bValidConfig) const;
+ FX_BOOL LoadOCGState(const CPDF_Dictionary* pOCGDict) const;
- FX_BOOL LoadOCGState(const CPDF_Dictionary *pOCGDict) const;
+ FX_BOOL GetOCGVisible(const CPDF_Dictionary* pOCGDict);
- FX_BOOL GetOCGVisible(const CPDF_Dictionary *pOCGDict);
+ FX_BOOL GetOCGVE(CPDF_Array* pExpression,
+ FX_BOOL bFromConfig,
+ int nLevel = 0);
- FX_BOOL GetOCGVE(CPDF_Array *pExpression, FX_BOOL bFromConfig, int nLevel = 0);
+ FX_BOOL LoadOCMDState(const CPDF_Dictionary* pOCMDDict, FX_BOOL bFromConfig);
- FX_BOOL LoadOCMDState(const CPDF_Dictionary *pOCMDDict, FX_BOOL bFromConfig);
+ CPDF_Document* m_pDocument;
- CPDF_Document *m_pDocument;
+ UsageType m_eUsageType;
- UsageType m_eUsageType;
-
- std::map<const CPDF_Dictionary*, FX_BOOL> m_OCGStates;
+ std::map<const CPDF_Dictionary*, FX_BOOL> m_OCGStates;
};
-class CPDF_LWinParam
-{
-public:
-
- CPDF_LWinParam(CPDF_Dictionary* pDict)
- {
- m_pDict = pDict;
- }
-
- operator CPDF_Dictionary* () const
- {
- return m_pDict;
- }
-
- inline CFX_ByteString GetFileName()
- {
- return m_pDict->GetString("F");
- }
+class CPDF_LWinParam {
+ public:
+ CPDF_LWinParam(CPDF_Dictionary* pDict) { m_pDict = pDict; }
+ operator CPDF_Dictionary*() const { return m_pDict; }
- inline CFX_ByteString GetDefaultDirectory()
- {
- return m_pDict->GetString("D");
- }
+ inline CFX_ByteString GetFileName() { return m_pDict->GetString("F"); }
+ inline CFX_ByteString GetDefaultDirectory() {
+ return m_pDict->GetString("D");
+ }
- inline CFX_ByteString GetOperation()
- {
- return m_pDict->GetString("O");
- }
+ inline CFX_ByteString GetOperation() { return m_pDict->GetString("O"); }
+ inline CFX_ByteString GetParameter() { return m_pDict->GetString("P"); }
- inline CFX_ByteString GetParameter()
- {
- return m_pDict->GetString("P");
- }
-
- CPDF_Dictionary* m_pDict;
+ CPDF_Dictionary* m_pDict;
};
-class CPDF_ActionFields
-{
-public:
-
- CPDF_ActionFields(const CPDF_Action* pAction)
- {
- m_pAction = (CPDF_Action*)pAction;
- }
+class CPDF_ActionFields {
+ public:
+ CPDF_ActionFields(const CPDF_Action* pAction) {
+ m_pAction = (CPDF_Action*)pAction;
+ }
- operator CPDF_Action*() const
- {
- return m_pAction;
- }
+ operator CPDF_Action*() const { return m_pAction; }
- FX_DWORD GetFieldsCount() const;
+ FX_DWORD GetFieldsCount() const;
- void GetAllFields(CFX_PtrArray& fieldObjects) const;
+ void GetAllFields(CFX_PtrArray& fieldObjects) const;
- CPDF_Object* GetField(FX_DWORD iIndex) const;
+ CPDF_Object* GetField(FX_DWORD iIndex) const;
- CPDF_Action* m_pAction;
+ CPDF_Action* m_pAction;
};
-#define PDFNAMED_NEXTPAGE 1
-#define PDFNAMED_PREVPAGE 2
-#define PDFNAMED_FIRSTPAGE 3
-#define PDFNAMED_LASTPAGE 4
-#define PDFJS_MAXLENGTH 64
-class CPDF_Action
-{
-public:
- enum ActionType {
- Unknown = 0,
- GoTo,
- GoToR,
- GoToE,
- Launch,
- Thread,
- URI,
- Sound,
- Movie,
- Hide,
- Named,
- SubmitForm,
- ResetForm,
- ImportData,
- JavaScript,
- SetOCGState,
- Rendition,
- Trans,
- GoTo3DView
- };
-
- CPDF_Action() : m_pDict(nullptr) { }
- explicit CPDF_Action(CPDF_Dictionary* pDict) : m_pDict(pDict) { }
-
- operator bool () const { return m_pDict != NULL; }
-
- CPDF_Dictionary* GetDict() const { return m_pDict; }
-
- CFX_ByteString GetTypeName() const
- {
- return m_pDict->GetString("S");
- }
-
- ActionType GetType() const;
-
- CPDF_Dest GetDest(CPDF_Document* pDoc) const;
-
- CFX_WideString GetFilePath() const;
-
- FX_BOOL GetNewWindow() const
- {
- return m_pDict->GetBoolean("NewWindow");
- }
-
- CPDF_LWinParam GetWinParam() const;
-
- CFX_ByteString GetURI(CPDF_Document* pDoc) const;
-
- FX_BOOL GetMouseMap() const
- {
- return m_pDict->GetBoolean("IsMap");
- }
-
- CPDF_ActionFields GetWidgets() const
- {
- return this;
- }
-
- FX_BOOL GetHideStatus() const
- {
- return m_pDict->GetBoolean("H", TRUE);
- }
-
- CFX_ByteString GetNamedAction() const
- {
- return m_pDict->GetString("N");
- }
-
- FX_DWORD GetFlags() const
- {
- return m_pDict->GetInteger("Flags");
- }
-
- CFX_WideString GetJavaScript() const;
-
- CPDF_Dictionary* GetAnnot() const;
-
- int32_t GetOperationType() const;
-
- CPDF_Stream* GetSoundStream() const
- {
- return m_pDict->GetStream("Sound");
- }
-
- FX_FLOAT GetVolume() const
- {
- return m_pDict->GetNumber("Volume");
- }
-
- FX_BOOL IsSynchronous() const
- {
- return m_pDict->GetBoolean("Synchronous");
- }
-
- FX_BOOL IsRepeat() const
- {
- return m_pDict->GetBoolean("Repeat");
- }
-
- FX_BOOL IsMixPlay() const
- {
- return m_pDict->GetBoolean("Mix");
- }
-
- FX_DWORD GetSubActionsCount() const;
-
- CPDF_Action GetSubAction(FX_DWORD iIndex) const;
+#define PDFNAMED_NEXTPAGE 1
+#define PDFNAMED_PREVPAGE 2
+#define PDFNAMED_FIRSTPAGE 3
+#define PDFNAMED_LASTPAGE 4
+#define PDFJS_MAXLENGTH 64
+class CPDF_Action {
+ public:
+ enum ActionType {
+ Unknown = 0,
+ GoTo,
+ GoToR,
+ GoToE,
+ Launch,
+ Thread,
+ URI,
+ Sound,
+ Movie,
+ Hide,
+ Named,
+ SubmitForm,
+ ResetForm,
+ ImportData,
+ JavaScript,
+ SetOCGState,
+ Rendition,
+ Trans,
+ GoTo3DView
+ };
-protected:
- CPDF_Dictionary* m_pDict;
-};
-class CPDF_AAction
-{
-public:
-
- CPDF_AAction(CPDF_Dictionary* pDict = NULL)
- {
- m_pDict = pDict;
- }
-
- operator CPDF_Dictionary*() const
- {
- return m_pDict;
- }
-
- enum AActionType {
- CursorEnter = 0,
- CursorExit,
- ButtonDown,
- ButtonUp,
- GetFocus,
- LoseFocus,
- PageOpen,
- PageClose,
- PageVisible,
- PageInvisible,
- OpenPage,
- ClosePage,
- KeyStroke,
- Format,
- Validate,
- Calculate,
- CloseDocument,
- SaveDocument,
- DocumentSaved,
- PrintDocument,
- DocumentPrinted
- };
-
- FX_BOOL ActionExist(AActionType eType) const;
-
- CPDF_Action GetAction(AActionType eType) const;
-
- FX_POSITION GetStartPos() const;
-
- CPDF_Action GetNextAction(FX_POSITION& pos, AActionType& eType) const;
-
- CPDF_Dictionary* m_pDict;
-};
-class CPDF_DocJSActions
-{
-public:
- CPDF_DocJSActions(CPDF_Document* pDoc);
+ CPDF_Action() : m_pDict(nullptr) {}
+ explicit CPDF_Action(CPDF_Dictionary* pDict) : m_pDict(pDict) {}
+ operator bool() const { return m_pDict != NULL; }
- int CountJSActions() const;
+ CPDF_Dictionary* GetDict() const { return m_pDict; }
- CPDF_Action GetJSAction(int index, CFX_ByteString& csName) const;
+ CFX_ByteString GetTypeName() const { return m_pDict->GetString("S"); }
- CPDF_Action GetJSAction(const CFX_ByteString& csName) const;
+ ActionType GetType() const;
- int FindJSAction(const CFX_ByteString& csName) const;
+ CPDF_Dest GetDest(CPDF_Document* pDoc) const;
+ CFX_WideString GetFilePath() const;
- CPDF_Document* GetDocument() const
- {
- return m_pDocument;
- }
+ FX_BOOL GetNewWindow() const { return m_pDict->GetBoolean("NewWindow"); }
-protected:
+ CPDF_LWinParam GetWinParam() const;
- CPDF_Document* m_pDocument;
-};
-class CPDF_FileSpec
-{
-public:
+ CFX_ByteString GetURI(CPDF_Document* pDoc) const;
- CPDF_FileSpec();
+ FX_BOOL GetMouseMap() const { return m_pDict->GetBoolean("IsMap"); }
- CPDF_FileSpec(CPDF_Object *pObj)
- {
- m_pObj = pObj;
- }
+ CPDF_ActionFields GetWidgets() const { return this; }
- operator CPDF_Object*() const
- {
- return m_pObj;
- }
+ FX_BOOL GetHideStatus() const { return m_pDict->GetBoolean("H", TRUE); }
- FX_BOOL IsURL() const;
+ CFX_ByteString GetNamedAction() const { return m_pDict->GetString("N"); }
- FX_BOOL GetFileName(CFX_WideString &wsFileName) const;
+ FX_DWORD GetFlags() const { return m_pDict->GetInteger("Flags"); }
- CPDF_Stream* GetFileStream() const;
+ CFX_WideString GetJavaScript() const;
- void SetFileName(const CFX_WideStringC& wsFileName, FX_BOOL bURL = FALSE);
-protected:
+ CPDF_Dictionary* GetAnnot() const;
- CPDF_Object *m_pObj;
-};
-class CPDF_LinkList
-{
-public:
+ int32_t GetOperationType() const;
- CPDF_LinkList(CPDF_Document* pDoc)
- {
- m_pDocument = pDoc;
- }
+ CPDF_Stream* GetSoundStream() const { return m_pDict->GetStream("Sound"); }
- ~CPDF_LinkList();
+ FX_FLOAT GetVolume() const { return m_pDict->GetNumber("Volume"); }
- CPDF_Link GetLinkAtPoint(CPDF_Page* pPage, FX_FLOAT pdf_x, FX_FLOAT pdf_y);
+ FX_BOOL IsSynchronous() const { return m_pDict->GetBoolean("Synchronous"); }
- int CountLinks(CPDF_Page* pPage);
+ FX_BOOL IsRepeat() const { return m_pDict->GetBoolean("Repeat"); }
- CPDF_Link GetLink(CPDF_Page* pPage, int index);
+ FX_BOOL IsMixPlay() const { return m_pDict->GetBoolean("Mix"); }
- CPDF_Document* GetDocument() const
- {
- return m_pDocument;
- }
-protected:
+ FX_DWORD GetSubActionsCount() const;
- CPDF_Document* m_pDocument;
+ CPDF_Action GetSubAction(FX_DWORD iIndex) const;
- CFX_MapPtrToPtr m_PageMap;
-
- CFX_PtrArray* GetPageLinks(CPDF_Page* pPage);
-
- void LoadPageLinks(CPDF_Page* pPage, CFX_PtrArray* pList);
+ protected:
+ CPDF_Dictionary* m_pDict;
};
-class CPDF_Link
-{
-public:
- CPDF_Link() : m_pDict(nullptr) { }
- explicit CPDF_Link(CPDF_Dictionary* pDict) : m_pDict(pDict) { }
-
- CPDF_Dictionary* GetDict() const { return m_pDict; }
-
- CFX_FloatRect GetRect();
- CPDF_Dest GetDest(CPDF_Document* pDoc);
- CPDF_Action GetAction();
-
-protected:
- CPDF_Dictionary* m_pDict;
+class CPDF_AAction {
+ public:
+ CPDF_AAction(CPDF_Dictionary* pDict = NULL) { m_pDict = pDict; }
+
+ operator CPDF_Dictionary*() const { return m_pDict; }
+
+ enum AActionType {
+ CursorEnter = 0,
+ CursorExit,
+ ButtonDown,
+ ButtonUp,
+ GetFocus,
+ LoseFocus,
+ PageOpen,
+ PageClose,
+ PageVisible,
+ PageInvisible,
+ OpenPage,
+ ClosePage,
+ KeyStroke,
+ Format,
+ Validate,
+ Calculate,
+ CloseDocument,
+ SaveDocument,
+ DocumentSaved,
+ PrintDocument,
+ DocumentPrinted
+ };
+
+ FX_BOOL ActionExist(AActionType eType) const;
+
+ CPDF_Action GetAction(AActionType eType) const;
+
+ FX_POSITION GetStartPos() const;
+
+ CPDF_Action GetNextAction(FX_POSITION& pos, AActionType& eType) const;
+
+ CPDF_Dictionary* m_pDict;
};
+class CPDF_DocJSActions {
+ public:
+ CPDF_DocJSActions(CPDF_Document* pDoc);
-#define ANNOTFLAG_INVISIBLE 0x0001
-#define ANNOTFLAG_HIDDEN 0x0002
-#define ANNOTFLAG_PRINT 0x0004
-#define ANNOTFLAG_NOZOOM 0x0008
-#define ANNOTFLAG_NOROTATE 0x0010
-#define ANNOTFLAG_NOVIEW 0x0020
-#define ANNOTFLAG_READONLY 0x0040
-#define ANNOTFLAG_LOCKED 0x0080
-#define ANNOTFLAG_TOGGLENOVIEW 0x0100
-
-class CPDF_Annot : public CFX_PrivateData
-{
- public:
- enum AppearanceMode {
- Normal,
- Rollover,
- Down
- };
-
- CPDF_Annot(CPDF_Dictionary* pDict, CPDF_AnnotList* pList);
- ~CPDF_Annot();
-
- CFX_ByteString GetSubType() const;
-
- FX_DWORD GetFlags() const;
-
- void GetRect(CFX_FloatRect& rect) const;
-
- CPDF_Dictionary* GetAnnotDict();
-
- FX_BOOL DrawAppearance(const CPDF_Page* pPage,
- CFX_RenderDevice* pDevice,
- const CFX_AffineMatrix* pUser2Device,
- AppearanceMode mode,
- const CPDF_RenderOptions* pOptions);
-
- FX_BOOL DrawInContext(const CPDF_Page* pPage,
- const CPDF_RenderContext* pContext,
- const CFX_AffineMatrix* pUser2Device,
- AppearanceMode mode);
-
- void ClearCachedAP();
-
- void DrawBorder(CFX_RenderDevice* pDevice,
- const CFX_AffineMatrix* pUser2Device,
- const CPDF_RenderOptions* pOptions);
+ int CountJSActions() const;
- CPDF_Form* GetAPForm(const CPDF_Page* pPage, AppearanceMode mode);
+ CPDF_Action GetJSAction(int index, CFX_ByteString& csName) const;
- private:
- CPDF_Dictionary* const m_pAnnotDict;
+ CPDF_Action GetJSAction(const CFX_ByteString& csName) const;
- CPDF_AnnotList* const m_pList;
+ int FindJSAction(const CFX_ByteString& csName) const;
- const CFX_ByteString m_sSubtype;
+ CPDF_Document* GetDocument() const { return m_pDocument; }
- CFX_MapPtrToPtr m_APMap;
+ protected:
+ CPDF_Document* m_pDocument;
};
+class CPDF_FileSpec {
+ public:
+ CPDF_FileSpec();
-class CPDF_AnnotList
-{
-public:
+ CPDF_FileSpec(CPDF_Object* pObj) { m_pObj = pObj; }
- CPDF_AnnotList(CPDF_Page* pPage);
+ operator CPDF_Object*() const { return m_pObj; }
- ~CPDF_AnnotList();
+ FX_BOOL IsURL() const;
- void GetAnnotMatrix(const CPDF_Dictionary* pAnnotDict, const CFX_Matrix* pUser2Device, CFX_Matrix &matrix) const;
+ FX_BOOL GetFileName(CFX_WideString& wsFileName) const;
- void GetAnnotRect(const CPDF_Dictionary* pAnnotDict, const CFX_Matrix* pUser2Device, CPDF_Rect &rtAnnot) const;
+ CPDF_Stream* GetFileStream() const;
- void DisplayAnnots(const CPDF_Page* pPage, CFX_RenderDevice* pDevice,
- CFX_AffineMatrix* pMatrix, FX_BOOL bShowWidget,
- CPDF_RenderOptions* pOptions);
+ void SetFileName(const CFX_WideStringC& wsFileName, FX_BOOL bURL = FALSE);
- void DisplayAnnots(const CPDF_Page* pPage, CPDF_RenderContext* pContext,
- FX_BOOL bPrinting, CFX_AffineMatrix* pMatrix, FX_BOOL bShowWidget,
- CPDF_RenderOptions* pOptions)
- {
- DisplayAnnots(pPage, NULL, pContext, bPrinting, pMatrix, bShowWidget ? 3 : 1, pOptions, NULL);
- }
-
- void DisplayAnnots(const CPDF_Page* pPage, CPDF_RenderContext* pContext,
- FX_BOOL bPrinting, CFX_AffineMatrix* pMatrix, FX_BOOL bShowWidget,
- CPDF_RenderOptions* pOptions, FX_RECT *pClipRect)
- {
- DisplayAnnots(pPage, NULL, pContext, bPrinting, pMatrix, bShowWidget ? 3 : 1, pOptions, pClipRect);
- }
-
- void DisplayAnnots(const CPDF_Page* pPage, CFX_RenderDevice* pDevice, CPDF_RenderContext* pContext,
- FX_BOOL bPrinting, CFX_AffineMatrix* pMatrix, FX_DWORD dwAnnotFlags,
- CPDF_RenderOptions* pOptions, FX_RECT* pClipRect);
-
-
-
- CPDF_Annot* GetAt(int index)
- {
- return (CPDF_Annot*)m_AnnotList.GetAt(index);
- }
-
- int Count()
- {
- return m_AnnotList.GetSize();
- }
-
- int GetIndex(CPDF_Annot* pAnnot);
-
-
- CPDF_Document* GetDocument() const
- {
- return m_pDocument;
- }
-protected:
-
- CFX_PtrArray m_AnnotList;
-
- CPDF_Dictionary* m_pPageDict;
-
- CPDF_Document* m_pDocument;
-
- CFX_PtrArray m_Borders;
-
- void DisplayPass(const CPDF_Page* pPage, CFX_RenderDevice* pDevice,
- CPDF_RenderContext* pContext, FX_BOOL bPrinting, CFX_AffineMatrix* pMatrix,
- FX_BOOL bWidget, CPDF_RenderOptions* pOptions, FX_RECT* clip_rect);
- friend class CPDF_Annot;
+ protected:
+ CPDF_Object* m_pObj;
};
-#define COLORTYPE_TRANSPARENT 0
-#define COLORTYPE_GRAY 1
-#define COLORTYPE_RGB 2
-#define COLORTYPE_CMYK 3
-class CPDF_DefaultAppearance
-{
-public:
-
- CPDF_DefaultAppearance(const CFX_ByteString& csDA = "")
- {
- m_csDA = csDA;
- }
-
- CPDF_DefaultAppearance(const CPDF_DefaultAppearance& cDA)
- {
- m_csDA = (CFX_ByteString)(CPDF_DefaultAppearance&)cDA;
- }
-
-
- operator CFX_ByteString() const
- {
- return m_csDA;
- }
-
- const CPDF_DefaultAppearance& operator =(const CFX_ByteString& csDA)
- {
- m_csDA = csDA;
- return *this;
- }
-
- const CPDF_DefaultAppearance& operator =(const CPDF_DefaultAppearance& cDA)
- {
- m_csDA = (CFX_ByteString)(CPDF_DefaultAppearance&)cDA;
- return *this;
- }
-
-
-
- FX_BOOL HasFont();
-
- CFX_ByteString GetFontString();
-
- void GetFont(CFX_ByteString& csFontNameTag, FX_FLOAT& fFontSize);
-
-
-
-
- FX_BOOL HasColor(FX_BOOL bStrokingOperation = FALSE);
-
- CFX_ByteString GetColorString(FX_BOOL bStrokingOperation = FALSE);
+class CPDF_LinkList {
+ public:
+ CPDF_LinkList(CPDF_Document* pDoc) { m_pDocument = pDoc; }
- void GetColor(int& iColorType, FX_FLOAT fc[4], FX_BOOL bStrokingOperation = FALSE);
+ ~CPDF_LinkList();
- void GetColor(FX_ARGB& color, int& iColorType, FX_BOOL bStrokingOperation = FALSE);
+ CPDF_Link GetLinkAtPoint(CPDF_Page* pPage, FX_FLOAT pdf_x, FX_FLOAT pdf_y);
+ int CountLinks(CPDF_Page* pPage);
+ CPDF_Link GetLink(CPDF_Page* pPage, int index);
+ CPDF_Document* GetDocument() const { return m_pDocument; }
- FX_BOOL HasTextMatrix();
+ protected:
+ CPDF_Document* m_pDocument;
- CFX_ByteString GetTextMatrixString();
+ CFX_MapPtrToPtr m_PageMap;
- CFX_AffineMatrix GetTextMatrix();
+ CFX_PtrArray* GetPageLinks(CPDF_Page* pPage);
-protected:
-
- CFX_ByteString m_csDA;
+ void LoadPageLinks(CPDF_Page* pPage, CFX_PtrArray* pList);
};
-#define FIELDTYPE_UNKNOWN 0
-#define FIELDTYPE_PUSHBUTTON 1
-#define FIELDTYPE_CHECKBOX 2
-#define FIELDTYPE_RADIOBUTTON 3
-#define FIELDTYPE_COMBOBOX 4
-#define FIELDTYPE_LISTBOX 5
-#define FIELDTYPE_TEXTFIELD 6
-#define FIELDTYPE_SIGNATURE 7
-class CPDF_InterForm : public CFX_PrivateData
-{
-public:
-
- CPDF_InterForm(CPDF_Document* pDocument, FX_BOOL bUpdateAP);
-
- ~CPDF_InterForm();
-
-
-
- static void EnableUpdateAP(FX_BOOL bUpdateAP);
-
- static FX_BOOL UpdatingAPEnabled();
-
-
- static CFX_ByteString GenerateNewResourceName(const CPDF_Dictionary* pResDict, const FX_CHAR* csType, int iMinLen = 2, const FX_CHAR* csPrefix = "");
-
-
-
- static CPDF_Font* AddSystemDefaultFont(const CPDF_Document* pDocument);
-
- static CPDF_Font* AddSystemFont(const CPDF_Document* pDocument, CFX_ByteString csFontName, uint8_t iCharSet = 1);
-
- static CPDF_Font* AddSystemFont(const CPDF_Document* pDocument, CFX_WideString csFontName, uint8_t iCharSet = 1);
-
- static CPDF_Font* AddStandardFont(const CPDF_Document* pDocument, CFX_ByteString csFontName);
+class CPDF_Link {
+ public:
+ CPDF_Link() : m_pDict(nullptr) {}
+ explicit CPDF_Link(CPDF_Dictionary* pDict) : m_pDict(pDict) {}
- static CFX_ByteString GetNativeFont(uint8_t iCharSet, void* pLogFont = NULL);
+ CPDF_Dictionary* GetDict() const { return m_pDict; }
- static CFX_ByteString GetNativeFont(void* pLogFont = NULL);
+ CFX_FloatRect GetRect();
+ CPDF_Dest GetDest(CPDF_Document* pDoc);
+ CPDF_Action GetAction();
- static uint8_t GetNativeCharSet();
-
- static CPDF_Font* AddNativeFont(uint8_t iCharSet, const CPDF_Document* pDocument);
-
- static CPDF_Font* AddNativeFont(const CPDF_Document* pDocument);
+ protected:
+ CPDF_Dictionary* m_pDict;
+};
+#define ANNOTFLAG_INVISIBLE 0x0001
+#define ANNOTFLAG_HIDDEN 0x0002
+#define ANNOTFLAG_PRINT 0x0004
+#define ANNOTFLAG_NOZOOM 0x0008
+#define ANNOTFLAG_NOROTATE 0x0010
+#define ANNOTFLAG_NOVIEW 0x0020
+#define ANNOTFLAG_READONLY 0x0040
+#define ANNOTFLAG_LOCKED 0x0080
+#define ANNOTFLAG_TOGGLENOVIEW 0x0100
+class CPDF_Annot : public CFX_PrivateData {
+ public:
+ enum AppearanceMode { Normal, Rollover, Down };
+ CPDF_Annot(CPDF_Dictionary* pDict, CPDF_AnnotList* pList);
+ ~CPDF_Annot();
- FX_BOOL ValidateFieldName(CFX_WideString& csNewFieldName, int iType);
+ CFX_ByteString GetSubType() const;
- FX_BOOL ValidateFieldName(const CPDF_FormField* pField, CFX_WideString& csNewFieldName);
+ FX_DWORD GetFlags() const;
- FX_BOOL ValidateFieldName(const CPDF_FormControl* pControl, CFX_WideString& csNewFieldName);
+ void GetRect(CFX_FloatRect& rect) const;
+ CPDF_Dictionary* GetAnnotDict();
+ FX_BOOL DrawAppearance(const CPDF_Page* pPage,
+ CFX_RenderDevice* pDevice,
+ const CFX_AffineMatrix* pUser2Device,
+ AppearanceMode mode,
+ const CPDF_RenderOptions* pOptions);
+ FX_BOOL DrawInContext(const CPDF_Page* pPage,
+ const CPDF_RenderContext* pContext,
+ const CFX_AffineMatrix* pUser2Device,
+ AppearanceMode mode);
- FX_DWORD CountFields(const CFX_WideString &csFieldName = L"");
+ void ClearCachedAP();
- CPDF_FormField* GetField(FX_DWORD index, const CFX_WideString &csFieldName = L"");
+ void DrawBorder(CFX_RenderDevice* pDevice,
+ const CFX_AffineMatrix* pUser2Device,
+ const CPDF_RenderOptions* pOptions);
- void GetAllFieldNames(CFX_WideStringArray& allFieldNames);
+ CPDF_Form* GetAPForm(const CPDF_Page* pPage, AppearanceMode mode);
- FX_BOOL IsValidFormField(const void* pField);
+ private:
+ CPDF_Dictionary* const m_pAnnotDict;
- CPDF_FormField* GetFieldByDict(CPDF_Dictionary* pFieldDict) const;
+ CPDF_AnnotList* const m_pList;
+ const CFX_ByteString m_sSubtype;
+ CFX_MapPtrToPtr m_APMap;
+};
+class CPDF_AnnotList {
+ public:
+ CPDF_AnnotList(CPDF_Page* pPage);
+
+ ~CPDF_AnnotList();
+
+ void GetAnnotMatrix(const CPDF_Dictionary* pAnnotDict,
+ const CFX_Matrix* pUser2Device,
+ CFX_Matrix& matrix) const;
+
+ void GetAnnotRect(const CPDF_Dictionary* pAnnotDict,
+ const CFX_Matrix* pUser2Device,
+ CPDF_Rect& rtAnnot) const;
+
+ void DisplayAnnots(const CPDF_Page* pPage,
+ CFX_RenderDevice* pDevice,
+ CFX_AffineMatrix* pMatrix,
+ FX_BOOL bShowWidget,
+ CPDF_RenderOptions* pOptions);
+
+ void DisplayAnnots(const CPDF_Page* pPage,
+ CPDF_RenderContext* pContext,
+ FX_BOOL bPrinting,
+ CFX_AffineMatrix* pMatrix,
+ FX_BOOL bShowWidget,
+ CPDF_RenderOptions* pOptions) {
+ DisplayAnnots(pPage, NULL, pContext, bPrinting, pMatrix,
+ bShowWidget ? 3 : 1, pOptions, NULL);
+ }
+
+ void DisplayAnnots(const CPDF_Page* pPage,
+ CPDF_RenderContext* pContext,
+ FX_BOOL bPrinting,
+ CFX_AffineMatrix* pMatrix,
+ FX_BOOL bShowWidget,
+ CPDF_RenderOptions* pOptions,
+ FX_RECT* pClipRect) {
+ DisplayAnnots(pPage, NULL, pContext, bPrinting, pMatrix,
+ bShowWidget ? 3 : 1, pOptions, pClipRect);
+ }
+
+ void DisplayAnnots(const CPDF_Page* pPage,
+ CFX_RenderDevice* pDevice,
+ CPDF_RenderContext* pContext,
+ FX_BOOL bPrinting,
+ CFX_AffineMatrix* pMatrix,
+ FX_DWORD dwAnnotFlags,
+ CPDF_RenderOptions* pOptions,
+ FX_RECT* pClipRect);
+
+ CPDF_Annot* GetAt(int index) { return (CPDF_Annot*)m_AnnotList.GetAt(index); }
+
+ int Count() { return m_AnnotList.GetSize(); }
+
+ int GetIndex(CPDF_Annot* pAnnot);
+
+ CPDF_Document* GetDocument() const { return m_pDocument; }
+
+ protected:
+ CFX_PtrArray m_AnnotList;
+
+ CPDF_Dictionary* m_pPageDict;
+
+ CPDF_Document* m_pDocument;
+
+ CFX_PtrArray m_Borders;
+
+ void DisplayPass(const CPDF_Page* pPage,
+ CFX_RenderDevice* pDevice,
+ CPDF_RenderContext* pContext,
+ FX_BOOL bPrinting,
+ CFX_AffineMatrix* pMatrix,
+ FX_BOOL bWidget,
+ CPDF_RenderOptions* pOptions,
+ FX_RECT* clip_rect);
+ friend class CPDF_Annot;
+};
+#define COLORTYPE_TRANSPARENT 0
+#define COLORTYPE_GRAY 1
+#define COLORTYPE_RGB 2
+#define COLORTYPE_CMYK 3
+class CPDF_DefaultAppearance {
+ public:
+ CPDF_DefaultAppearance(const CFX_ByteString& csDA = "") { m_csDA = csDA; }
- FX_DWORD CountControls(CFX_WideString csFieldName = L"");
+ CPDF_DefaultAppearance(const CPDF_DefaultAppearance& cDA) {
+ m_csDA = (CFX_ByteString)(CPDF_DefaultAppearance&)cDA;
+ }
- CPDF_FormControl* GetControl(FX_DWORD index, CFX_WideString csFieldName = L"");
+ operator CFX_ByteString() const { return m_csDA; }
- FX_BOOL IsValidFormControl(const void* pControl);
+ const CPDF_DefaultAppearance& operator=(const CFX_ByteString& csDA) {
+ m_csDA = csDA;
+ return *this;
+ }
- int CountPageControls(CPDF_Page* pPage) const;
+ const CPDF_DefaultAppearance& operator=(const CPDF_DefaultAppearance& cDA) {
+ m_csDA = (CFX_ByteString)(CPDF_DefaultAppearance&)cDA;
+ return *this;
+ }
- CPDF_FormControl* GetPageControl(CPDF_Page* pPage, int index) const;
+ FX_BOOL HasFont();
+ CFX_ByteString GetFontString();
- CPDF_FormControl* GetControlAtPoint(CPDF_Page* pPage, FX_FLOAT pdf_x, FX_FLOAT pdf_y) const;
+ void GetFont(CFX_ByteString& csFontNameTag, FX_FLOAT& fFontSize);
- CPDF_FormControl* GetControlByDict(CPDF_Dictionary* pWidgetDict) const;
+ FX_BOOL HasColor(FX_BOOL bStrokingOperation = FALSE);
+ CFX_ByteString GetColorString(FX_BOOL bStrokingOperation = FALSE);
+ void GetColor(int& iColorType,
+ FX_FLOAT fc[4],
+ FX_BOOL bStrokingOperation = FALSE);
+ void GetColor(FX_ARGB& color,
+ int& iColorType,
+ FX_BOOL bStrokingOperation = FALSE);
- FX_DWORD CountInternalFields(const CFX_WideString& csFieldName = L"") const;
+ FX_BOOL HasTextMatrix();
- CPDF_Dictionary* GetInternalField(FX_DWORD index, const CFX_WideString& csFieldName = L"") const;
+ CFX_ByteString GetTextMatrixString();
+ CFX_AffineMatrix GetTextMatrix();
+ protected:
+ CFX_ByteString m_csDA;
+};
+#define FIELDTYPE_UNKNOWN 0
+#define FIELDTYPE_PUSHBUTTON 1
+#define FIELDTYPE_CHECKBOX 2
+#define FIELDTYPE_RADIOBUTTON 3
+#define FIELDTYPE_COMBOBOX 4
+#define FIELDTYPE_LISTBOX 5
+#define FIELDTYPE_TEXTFIELD 6
+#define FIELDTYPE_SIGNATURE 7
+class CPDF_InterForm : public CFX_PrivateData {
+ public:
+ CPDF_InterForm(CPDF_Document* pDocument, FX_BOOL bUpdateAP);
+ ~CPDF_InterForm();
+ static void EnableUpdateAP(FX_BOOL bUpdateAP);
- CPDF_Document* GetDocument() const
- {
- return m_pDocument;
- }
+ static FX_BOOL UpdatingAPEnabled();
- CPDF_Dictionary* GetFormDict() const
- {
- return m_pFormDict;
- }
+ static CFX_ByteString GenerateNewResourceName(const CPDF_Dictionary* pResDict,
+ const FX_CHAR* csType,
+ int iMinLen = 2,
+ const FX_CHAR* csPrefix = "");
+ static CPDF_Font* AddSystemDefaultFont(const CPDF_Document* pDocument);
+ static CPDF_Font* AddSystemFont(const CPDF_Document* pDocument,
+ CFX_ByteString csFontName,
+ uint8_t iCharSet = 1);
+ static CPDF_Font* AddSystemFont(const CPDF_Document* pDocument,
+ CFX_WideString csFontName,
+ uint8_t iCharSet = 1);
- FX_BOOL NeedConstructAP();
+ static CPDF_Font* AddStandardFont(const CPDF_Document* pDocument,
+ CFX_ByteString csFontName);
- void NeedConstructAP(FX_BOOL bNeedAP);
+ static CFX_ByteString GetNativeFont(uint8_t iCharSet, void* pLogFont = NULL);
+ static CFX_ByteString GetNativeFont(void* pLogFont = NULL);
+ static uint8_t GetNativeCharSet();
+ static CPDF_Font* AddNativeFont(uint8_t iCharSet,
+ const CPDF_Document* pDocument);
- int CountFieldsInCalculationOrder();
+ static CPDF_Font* AddNativeFont(const CPDF_Document* pDocument);
- CPDF_FormField* GetFieldInCalculationOrder(int index);
+ FX_BOOL ValidateFieldName(CFX_WideString& csNewFieldName, int iType);
- int FindFieldInCalculationOrder(const CPDF_FormField* pField);
+ FX_BOOL ValidateFieldName(const CPDF_FormField* pField,
+ CFX_WideString& csNewFieldName);
+ FX_BOOL ValidateFieldName(const CPDF_FormControl* pControl,
+ CFX_WideString& csNewFieldName);
+ FX_DWORD CountFields(const CFX_WideString& csFieldName = L"");
+ CPDF_FormField* GetField(FX_DWORD index,
+ const CFX_WideString& csFieldName = L"");
- FX_DWORD CountFormFonts();
+ void GetAllFieldNames(CFX_WideStringArray& allFieldNames);
- CPDF_Font* GetFormFont(FX_DWORD index, CFX_ByteString& csNameTag);
+ FX_BOOL IsValidFormField(const void* pField);
- CPDF_Font* GetFormFont(CFX_ByteString csNameTag);
+ CPDF_FormField* GetFieldByDict(CPDF_Dictionary* pFieldDict) const;
- CPDF_Font* GetFormFont(CFX_ByteString csFontName, CFX_ByteString& csNameTag);
+ FX_DWORD CountControls(CFX_WideString csFieldName = L"");
- CPDF_Font* GetNativeFormFont(uint8_t iCharSet, CFX_ByteString& csNameTag);
+ CPDF_FormControl* GetControl(FX_DWORD index,
+ CFX_WideString csFieldName = L"");
- CPDF_Font* GetNativeFormFont(CFX_ByteString& csNameTag);
+ FX_BOOL IsValidFormControl(const void* pControl);
- FX_BOOL FindFormFont(const CPDF_Font* pFont, CFX_ByteString& csNameTag);
+ int CountPageControls(CPDF_Page* pPage) const;
- FX_BOOL FindFormFont(CFX_ByteString csFontName, CPDF_Font*& pFont, CFX_ByteString& csNameTag);
+ CPDF_FormControl* GetPageControl(CPDF_Page* pPage, int index) const;
- inline FX_BOOL FindFormFont(CFX_WideString csFontName, CPDF_Font*& pFont, CFX_ByteString& csNameTag)
- {
- return FindFormFont(PDF_EncodeText(csFontName), pFont, csNameTag);
- }
+ CPDF_FormControl* GetControlAtPoint(CPDF_Page* pPage,
+ FX_FLOAT pdf_x,
+ FX_FLOAT pdf_y) const;
+ CPDF_FormControl* GetControlByDict(CPDF_Dictionary* pWidgetDict) const;
+ FX_DWORD CountInternalFields(const CFX_WideString& csFieldName = L"") const;
+ CPDF_Dictionary* GetInternalField(
+ FX_DWORD index,
+ const CFX_WideString& csFieldName = L"") const;
+ CPDF_Document* GetDocument() const { return m_pDocument; }
- void AddFormFont(const CPDF_Font* pFont, CFX_ByteString& csNameTag);
+ CPDF_Dictionary* GetFormDict() const { return m_pFormDict; }
- CPDF_Font* AddNativeFormFont(uint8_t iCharSet, CFX_ByteString& csNameTag);
+ FX_BOOL NeedConstructAP();
- CPDF_Font* AddNativeFormFont(CFX_ByteString& csNameTag);
+ void NeedConstructAP(FX_BOOL bNeedAP);
- void RemoveFormFont(const CPDF_Font* pFont);
+ int CountFieldsInCalculationOrder();
- void RemoveFormFont(CFX_ByteString csNameTag);
+ CPDF_FormField* GetFieldInCalculationOrder(int index);
+ int FindFieldInCalculationOrder(const CPDF_FormField* pField);
+ FX_DWORD CountFormFonts();
+ CPDF_Font* GetFormFont(FX_DWORD index, CFX_ByteString& csNameTag);
- CPDF_DefaultAppearance GetDefaultAppearance();
+ CPDF_Font* GetFormFont(CFX_ByteString csNameTag);
- CPDF_Font* GetDefaultFormFont();
+ CPDF_Font* GetFormFont(CFX_ByteString csFontName, CFX_ByteString& csNameTag);
+ CPDF_Font* GetNativeFormFont(uint8_t iCharSet, CFX_ByteString& csNameTag);
+ CPDF_Font* GetNativeFormFont(CFX_ByteString& csNameTag);
- int GetFormAlignment();
+ FX_BOOL FindFormFont(const CPDF_Font* pFont, CFX_ByteString& csNameTag);
+ FX_BOOL FindFormFont(CFX_ByteString csFontName,
+ CPDF_Font*& pFont,
+ CFX_ByteString& csNameTag);
+ inline FX_BOOL FindFormFont(CFX_WideString csFontName,
+ CPDF_Font*& pFont,
+ CFX_ByteString& csNameTag) {
+ return FindFormFont(PDF_EncodeText(csFontName), pFont, csNameTag);
+ }
+ void AddFormFont(const CPDF_Font* pFont, CFX_ByteString& csNameTag);
- CPDF_FormField* CheckRequiredFields(const CFX_PtrArray *fields = NULL, FX_BOOL bIncludeOrExclude = TRUE) const;
+ CPDF_Font* AddNativeFormFont(uint8_t iCharSet, CFX_ByteString& csNameTag);
- CFDF_Document* ExportToFDF(const CFX_WideStringC& pdf_path, FX_BOOL bSimpleFileSpec = FALSE) const;
+ CPDF_Font* AddNativeFormFont(CFX_ByteString& csNameTag);
- CFDF_Document* ExportToFDF(const CFX_WideStringC& pdf_path, CFX_PtrArray& fields, FX_BOOL bIncludeOrExclude = TRUE, FX_BOOL bSimpleFileSpec = FALSE) const;
+ void RemoveFormFont(const CPDF_Font* pFont);
- FX_BOOL ImportFromFDF(const CFDF_Document* pFDFDoc, FX_BOOL bNotify = FALSE);
+ void RemoveFormFont(CFX_ByteString csNameTag);
+ CPDF_DefaultAppearance GetDefaultAppearance();
+ CPDF_Font* GetDefaultFormFont();
+ int GetFormAlignment();
- FX_BOOL ResetForm(const CFX_PtrArray& fields, FX_BOOL bIncludeOrExclude = TRUE, FX_BOOL bNotify = FALSE);
+ CPDF_FormField* CheckRequiredFields(const CFX_PtrArray* fields = NULL,
+ FX_BOOL bIncludeOrExclude = TRUE) const;
- FX_BOOL ResetForm(FX_BOOL bNotify = FALSE);
+ CFDF_Document* ExportToFDF(const CFX_WideStringC& pdf_path,
+ FX_BOOL bSimpleFileSpec = FALSE) const;
- void ReloadForm();
+ CFDF_Document* ExportToFDF(const CFX_WideStringC& pdf_path,
+ CFX_PtrArray& fields,
+ FX_BOOL bIncludeOrExclude = TRUE,
+ FX_BOOL bSimpleFileSpec = FALSE) const;
- CPDF_FormNotify* GetFormNotify() const
- {
- return m_pFormNotify;
- }
+ FX_BOOL ImportFromFDF(const CFDF_Document* pFDFDoc, FX_BOOL bNotify = FALSE);
- void SetFormNotify(const CPDF_FormNotify* pNotify);
+ FX_BOOL ResetForm(const CFX_PtrArray& fields,
+ FX_BOOL bIncludeOrExclude = TRUE,
+ FX_BOOL bNotify = FALSE);
+ FX_BOOL ResetForm(FX_BOOL bNotify = FALSE);
- int GetPageWithWidget(int iCurPage, FX_BOOL bNext);
+ void ReloadForm();
+ CPDF_FormNotify* GetFormNotify() const { return m_pFormNotify; }
+ void SetFormNotify(const CPDF_FormNotify* pNotify);
- FX_BOOL IsUpdated()
- {
- return m_bUpdated;
- }
+ int GetPageWithWidget(int iCurPage, FX_BOOL bNext);
- void ClearUpdatedFlag()
- {
- m_bUpdated = FALSE;
- }
+ FX_BOOL IsUpdated() { return m_bUpdated; }
+ void ClearUpdatedFlag() { m_bUpdated = FALSE; }
- FX_BOOL HasXFAForm() const;
+ FX_BOOL HasXFAForm() const;
- void FixPageFields(const CPDF_Page* pPage);
-protected:
+ void FixPageFields(const CPDF_Page* pPage);
- static FX_BOOL m_bUpdateAP;
+ protected:
+ static FX_BOOL m_bUpdateAP;
- void LoadField(CPDF_Dictionary* pFieldDict, int nLevel = 0);
+ void LoadField(CPDF_Dictionary* pFieldDict, int nLevel = 0);
- CPDF_Object* GetFieldAttr(CPDF_Dictionary* pFieldDict, const FX_CHAR* name);
+ CPDF_Object* GetFieldAttr(CPDF_Dictionary* pFieldDict, const FX_CHAR* name);
- CPDF_FormField* AddTerminalField(const CPDF_Dictionary* pFieldDict);
+ CPDF_FormField* AddTerminalField(const CPDF_Dictionary* pFieldDict);
- CPDF_FormControl* AddControl(const CPDF_FormField* pField, const CPDF_Dictionary* pWidgetDict);
+ CPDF_FormControl* AddControl(const CPDF_FormField* pField,
+ const CPDF_Dictionary* pWidgetDict);
- void FDF_ImportField(CPDF_Dictionary* pField, const CFX_WideString& parent_name, FX_BOOL bNotify = FALSE, int nLevel = 0);
+ void FDF_ImportField(CPDF_Dictionary* pField,
+ const CFX_WideString& parent_name,
+ FX_BOOL bNotify = FALSE,
+ int nLevel = 0);
- FX_BOOL ValidateFieldName(CFX_WideString& csNewFieldName, int iType, const CPDF_FormField* pExcludedField, const CPDF_FormControl* pExcludedControl);
+ FX_BOOL ValidateFieldName(CFX_WideString& csNewFieldName,
+ int iType,
+ const CPDF_FormField* pExcludedField,
+ const CPDF_FormControl* pExcludedControl);
- int CompareFieldName(const CFX_WideString& name1, const CFX_WideString& name2);
+ int CompareFieldName(const CFX_WideString& name1,
+ const CFX_WideString& name2);
- int CompareFieldName(const CFX_ByteString& name1, const CFX_ByteString& name2);
+ int CompareFieldName(const CFX_ByteString& name1,
+ const CFX_ByteString& name2);
- CPDF_Document* m_pDocument;
+ CPDF_Document* m_pDocument;
- FX_BOOL m_bGenerateAP;
+ FX_BOOL m_bGenerateAP;
- CPDF_Dictionary* m_pFormDict;
+ CPDF_Dictionary* m_pFormDict;
- CFX_MapPtrToPtr m_ControlMap;
+ CFX_MapPtrToPtr m_ControlMap;
- CFieldTree *m_pFieldTree;
+ CFieldTree* m_pFieldTree;
- CFX_ByteString m_bsEncoding;
+ CFX_ByteString m_bsEncoding;
- CPDF_FormNotify* m_pFormNotify;
+ CPDF_FormNotify* m_pFormNotify;
- FX_BOOL m_bUpdated;
- friend class CPDF_FormControl;
- friend class CPDF_FormField;
+ FX_BOOL m_bUpdated;
+ friend class CPDF_FormControl;
+ friend class CPDF_FormField;
};
-#define FORMFIELD_READONLY 0x01
-#define FORMFIELD_REQUIRED 0x02
-#define FORMFIELD_NOEXPORT 0x04
-#define FORMRADIO_NOTOGGLEOFF 0x100
-#define FORMRADIO_UNISON 0x200
-#define FORMTEXT_MULTILINE 0x100
-#define FORMTEXT_PASSWORD 0x200
-#define FORMTEXT_NOSCROLL 0x400
-#define FORMTEXT_COMB 0x800
-#define FORMCOMBO_EDIT 0x100
-#define FORMLIST_MULTISELECT 0x100
-class CPDF_FormField
-{
-public:
-
- enum Type {
- Unknown,
- PushButton,
- RadioButton,
- CheckBox,
- Text,
- RichText,
- File,
- ListBox,
- ComboBox,
- Sign
- };
-
- CFX_WideString GetFullName();
-
- Type GetType()
- {
- return m_Type;
- }
-
- FX_DWORD GetFlags()
- {
- return m_Flags;
- }
-
- CPDF_InterForm* GetInterForm() const
- {
- return m_pForm;
- }
-
- CPDF_Dictionary* GetFieldDict() const
- {
- return m_pDict;
- }
-
- void SetFieldDict(CPDF_Dictionary* pDict)
- {
- m_pDict = pDict;
- }
-
- FX_BOOL ResetField(FX_BOOL bNotify = FALSE);
-
-
-
- int CountControls()
- {
- return m_ControlList.GetSize();
- }
-
- CPDF_FormControl* GetControl(int index)
- {
- return (CPDF_FormControl*)m_ControlList.GetAt(index);
- }
-
- int GetControlIndex(const CPDF_FormControl* pControl);
-
-
-
-
- int GetFieldType();
-
-
-
-
- CPDF_AAction GetAdditionalAction();
-
-
-
-
- CFX_WideString GetAlternateName();
-
-
-
-
- CFX_WideString GetMappingName();
-
-
-
-
- FX_DWORD GetFieldFlags();
-
-
-
-
- CFX_ByteString GetDefaultStyle();
-
-
+#define FORMFIELD_READONLY 0x01
+#define FORMFIELD_REQUIRED 0x02
+#define FORMFIELD_NOEXPORT 0x04
+#define FORMRADIO_NOTOGGLEOFF 0x100
+#define FORMRADIO_UNISON 0x200
+#define FORMTEXT_MULTILINE 0x100
+#define FORMTEXT_PASSWORD 0x200
+#define FORMTEXT_NOSCROLL 0x400
+#define FORMTEXT_COMB 0x800
+#define FORMCOMBO_EDIT 0x100
+#define FORMLIST_MULTISELECT 0x100
+class CPDF_FormField {
+ public:
+ enum Type {
+ Unknown,
+ PushButton,
+ RadioButton,
+ CheckBox,
+ Text,
+ RichText,
+ File,
+ ListBox,
+ ComboBox,
+ Sign
+ };
+ CFX_WideString GetFullName();
- CFX_WideString GetRichTextString();
+ Type GetType() { return m_Type; }
+ FX_DWORD GetFlags() { return m_Flags; }
+ CPDF_InterForm* GetInterForm() const { return m_pForm; }
- CFX_WideString GetValue();
+ CPDF_Dictionary* GetFieldDict() const { return m_pDict; }
- CFX_WideString GetDefaultValue();
+ void SetFieldDict(CPDF_Dictionary* pDict) { m_pDict = pDict; }
- FX_BOOL SetValue(const CFX_WideString& value, FX_BOOL bNotify = FALSE);
+ FX_BOOL ResetField(FX_BOOL bNotify = FALSE);
+ int CountControls() { return m_ControlList.GetSize(); }
+ CPDF_FormControl* GetControl(int index) {
+ return (CPDF_FormControl*)m_ControlList.GetAt(index);
+ }
+ int GetControlIndex(const CPDF_FormControl* pControl);
+ int GetFieldType();
- int GetMaxLen();
+ CPDF_AAction GetAdditionalAction();
+ CFX_WideString GetAlternateName();
+ CFX_WideString GetMappingName();
+ FX_DWORD GetFieldFlags();
- int CountSelectedItems();
+ CFX_ByteString GetDefaultStyle();
- int GetSelectedIndex(int index);
+ CFX_WideString GetRichTextString();
- FX_BOOL ClearSelection(FX_BOOL bNotify = FALSE);
+ CFX_WideString GetValue();
- FX_BOOL IsItemSelected(int index);
+ CFX_WideString GetDefaultValue();
- FX_BOOL SetItemSelection(int index, FX_BOOL bSelected, FX_BOOL bNotify = FALSE);
+ FX_BOOL SetValue(const CFX_WideString& value, FX_BOOL bNotify = FALSE);
- FX_BOOL IsItemDefaultSelected(int index);
+ int GetMaxLen();
- int GetDefaultSelectedItem();
+ int CountSelectedItems();
+ int GetSelectedIndex(int index);
+ FX_BOOL ClearSelection(FX_BOOL bNotify = FALSE);
+ FX_BOOL IsItemSelected(int index);
- int CountOptions();
+ FX_BOOL SetItemSelection(int index,
+ FX_BOOL bSelected,
+ FX_BOOL bNotify = FALSE);
- CFX_WideString GetOptionLabel(int index);
+ FX_BOOL IsItemDefaultSelected(int index);
- CFX_WideString GetOptionValue(int index);
+ int GetDefaultSelectedItem();
- int FindOption(CFX_WideString csOptLabel);
+ int CountOptions();
- int FindOptionValue(const CFX_WideString& csOptValue, int iStartIndex = 0);
+ CFX_WideString GetOptionLabel(int index);
+ CFX_WideString GetOptionValue(int index);
+ int FindOption(CFX_WideString csOptLabel);
+ int FindOptionValue(const CFX_WideString& csOptValue, int iStartIndex = 0);
- FX_BOOL CheckControl(int iControlIndex, FX_BOOL bChecked, FX_BOOL bNotify = FALSE);
+ FX_BOOL CheckControl(int iControlIndex,
+ FX_BOOL bChecked,
+ FX_BOOL bNotify = FALSE);
+ int GetTopVisibleIndex();
+ int CountSelectedOptions();
+ int GetSelectedOptionIndex(int index);
- int GetTopVisibleIndex();
+ FX_BOOL IsOptionSelected(int iOptIndex);
+ FX_BOOL SelectOption(int iOptIndex,
+ FX_BOOL bSelected,
+ FX_BOOL bNotify = FALSE);
+ FX_BOOL ClearSelectedOptions(FX_BOOL bNotify = FALSE);
+ FX_FLOAT GetFontSize() { return m_FontSize; }
- int CountSelectedOptions();
+ CPDF_Font* GetFont() { return m_pFont; }
- int GetSelectedOptionIndex(int index);
+ protected:
+ CPDF_FormField(CPDF_InterForm* pForm, CPDF_Dictionary* pDict);
- FX_BOOL IsOptionSelected(int iOptIndex);
+ ~CPDF_FormField();
- FX_BOOL SelectOption(int iOptIndex, FX_BOOL bSelected, FX_BOOL bNotify = FALSE);
+ CPDF_FormField::Type m_Type;
- FX_BOOL ClearSelectedOptions(FX_BOOL bNotify = FALSE);
+ FX_DWORD m_Flags;
+ CPDF_InterForm* m_pForm;
+ CPDF_Dictionary* m_pDict;
+ CFX_PtrArray m_ControlList;
+ friend class CPDF_InterForm;
+ friend class CPDF_FormControl;
- FX_FLOAT GetFontSize()
- {
- return m_FontSize;
- }
+ CFX_WideString GetValue(FX_BOOL bDefault);
- CPDF_Font* GetFont()
- {
- return m_pFont;
- }
+ FX_BOOL SetValue(const CFX_WideString& value,
+ FX_BOOL bDefault,
+ FX_BOOL bNotify);
-protected:
+ void SyncFieldFlags();
- CPDF_FormField(CPDF_InterForm* pForm, CPDF_Dictionary* pDict);
+ int FindListSel(CPDF_String* str);
- ~CPDF_FormField();
+ CFX_WideString GetOptionText(int index, int sub_index);
- CPDF_FormField::Type m_Type;
+ void LoadDA();
- FX_DWORD m_Flags;
+ void UpdateAP(CPDF_FormControl* pControl);
- CPDF_InterForm* m_pForm;
+ CFX_WideString GetCheckValue(FX_BOOL bDefault);
- CPDF_Dictionary* m_pDict;
+ FX_BOOL SetCheckValue(const CFX_WideString& value,
+ FX_BOOL bDefault,
+ FX_BOOL bNotify);
- CFX_PtrArray m_ControlList;
- friend class CPDF_InterForm;
- friend class CPDF_FormControl;
+ FX_FLOAT m_FontSize;
-
-
- CFX_WideString GetValue(FX_BOOL bDefault);
-
- FX_BOOL SetValue(const CFX_WideString& value, FX_BOOL bDefault, FX_BOOL bNotify);
-
-
- void SyncFieldFlags();
-
- int FindListSel(CPDF_String* str);
-
- CFX_WideString GetOptionText(int index, int sub_index);
-
- void LoadDA();
-
- void UpdateAP(CPDF_FormControl* pControl);
-
-
-
- CFX_WideString GetCheckValue(FX_BOOL bDefault);
-
- FX_BOOL SetCheckValue(const CFX_WideString& value, FX_BOOL bDefault, FX_BOOL bNotify);
-
-
- FX_FLOAT m_FontSize;
-
- CPDF_Font* m_pFont;
+ CPDF_Font* m_pFont;
};
-CPDF_Object* FPDF_GetFieldAttr(CPDF_Dictionary* pFieldDict, const FX_CHAR* name, int nLevel = 0);
-class CPDF_IconFit
-{
-public:
-
- CPDF_IconFit(CPDF_Dictionary* pDict = NULL)
- {
- m_pDict = pDict;
- }
-
- operator CPDF_Dictionary*() const
- {
- return m_pDict;
- }
-
-
-
-
- enum ScaleMethod {
- Always = 0,
- Bigger,
- Smaller,
- Never
- };
-
- ScaleMethod GetScaleMethod();
-
-
-
-
- FX_BOOL IsProportionalScale();
-
-
-
+CPDF_Object* FPDF_GetFieldAttr(CPDF_Dictionary* pFieldDict,
+ const FX_CHAR* name,
+ int nLevel = 0);
+class CPDF_IconFit {
+ public:
+ CPDF_IconFit(CPDF_Dictionary* pDict = NULL) { m_pDict = pDict; }
- void GetIconPosition(FX_FLOAT& fLeft, FX_FLOAT& fBottom);
+ operator CPDF_Dictionary*() const { return m_pDict; }
+ enum ScaleMethod { Always = 0, Bigger, Smaller, Never };
+ ScaleMethod GetScaleMethod();
+ FX_BOOL IsProportionalScale();
- FX_BOOL GetFittingBounds();
+ void GetIconPosition(FX_FLOAT& fLeft, FX_FLOAT& fBottom);
+ FX_BOOL GetFittingBounds();
- CPDF_Dictionary* m_pDict;
+ CPDF_Dictionary* m_pDict;
};
-#define TEXTPOS_CAPTION 0
-#define TEXTPOS_ICON 1
-#define TEXTPOS_BELOW 2
-#define TEXTPOS_ABOVE 3
-#define TEXTPOS_RIGHT 4
-#define TEXTPOS_LEFT 5
-#define TEXTPOS_OVERLAID 6
-class CPDF_FormControl
-{
-public:
-
- CPDF_FormField::Type GetType()
- {
- return m_pField->GetType();
- }
-
- CPDF_InterForm* GetInterForm() const
- {
- return m_pForm;
- }
-
- CPDF_FormField* GetField() const
- {
- return m_pField;
- }
-
- CPDF_Dictionary* GetWidget() const
- {
- return m_pWidgetDict;
- }
-
- CFX_FloatRect GetRect();
-
- void DrawControl(CFX_RenderDevice* pDevice, CFX_AffineMatrix* pMatrix,
- CPDF_Page* pPage, CPDF_Annot::AppearanceMode mode, const CPDF_RenderOptions* pOptions = NULL);
-
-
-
- CFX_ByteString GetCheckedAPState();
-
- CFX_WideString GetExportValue();
-
- FX_BOOL IsChecked();
-
- FX_BOOL IsDefaultChecked();
-
-
-
-
- enum HighlightingMode {
- None = 0,
- Invert,
- Outline,
- Push,
- Toggle
- };
-
- HighlightingMode GetHighlightingMode();
-
-
-
-
- FX_BOOL HasMKEntry(CFX_ByteString csEntry);
-
-
-
-
- int GetRotation();
-
-
-
-
- inline FX_ARGB GetBorderColor(int& iColorType)
- {
- return GetColor(iColorType, "BC");
- }
-
- inline FX_FLOAT GetOriginalBorderColor(int index)
- {
- return GetOriginalColor(index, "BC");
- }
+#define TEXTPOS_CAPTION 0
+#define TEXTPOS_ICON 1
+#define TEXTPOS_BELOW 2
+#define TEXTPOS_ABOVE 3
+#define TEXTPOS_RIGHT 4
+#define TEXTPOS_LEFT 5
+#define TEXTPOS_OVERLAID 6
+class CPDF_FormControl {
+ public:
+ CPDF_FormField::Type GetType() { return m_pField->GetType(); }
- inline void GetOriginalBorderColor(int& iColorType, FX_FLOAT fc[4])
- {
- GetOriginalColor(iColorType, fc, "BC");
- }
+ CPDF_InterForm* GetInterForm() const { return m_pForm; }
+ CPDF_FormField* GetField() const { return m_pField; }
+ CPDF_Dictionary* GetWidget() const { return m_pWidgetDict; }
+ CFX_FloatRect GetRect();
- inline FX_ARGB GetBackgroundColor(int& iColorType)
- {
- return GetColor(iColorType, "BG");
- }
+ void DrawControl(CFX_RenderDevice* pDevice,
+ CFX_AffineMatrix* pMatrix,
+ CPDF_Page* pPage,
+ CPDF_Annot::AppearanceMode mode,
+ const CPDF_RenderOptions* pOptions = NULL);
- inline FX_FLOAT GetOriginalBackgroundColor(int index)
- {
- return GetOriginalColor(index, "BG");
- }
+ CFX_ByteString GetCheckedAPState();
- inline void GetOriginalBackgroundColor(int& iColorType, FX_FLOAT fc[4])
- {
- GetOriginalColor(iColorType, fc, "BG");
- }
+ CFX_WideString GetExportValue();
+ FX_BOOL IsChecked();
+ FX_BOOL IsDefaultChecked();
+ enum HighlightingMode { None = 0, Invert, Outline, Push, Toggle };
- inline CFX_WideString GetNormalCaption()
- {
- return GetCaption("CA");
- }
+ HighlightingMode GetHighlightingMode();
+ FX_BOOL HasMKEntry(CFX_ByteString csEntry);
+ int GetRotation();
+ inline FX_ARGB GetBorderColor(int& iColorType) {
+ return GetColor(iColorType, "BC");
+ }
- inline CFX_WideString GetRolloverCaption()
- {
- return GetCaption("RC");
- }
+ inline FX_FLOAT GetOriginalBorderColor(int index) {
+ return GetOriginalColor(index, "BC");
+ }
+ inline void GetOriginalBorderColor(int& iColorType, FX_FLOAT fc[4]) {
+ GetOriginalColor(iColorType, fc, "BC");
+ }
+ inline FX_ARGB GetBackgroundColor(int& iColorType) {
+ return GetColor(iColorType, "BG");
+ }
+ inline FX_FLOAT GetOriginalBackgroundColor(int index) {
+ return GetOriginalColor(index, "BG");
+ }
- inline CFX_WideString GetDownCaption()
- {
- return GetCaption("AC");
- }
+ inline void GetOriginalBackgroundColor(int& iColorType, FX_FLOAT fc[4]) {
+ GetOriginalColor(iColorType, fc, "BG");
+ }
+ inline CFX_WideString GetNormalCaption() { return GetCaption("CA"); }
+ inline CFX_WideString GetRolloverCaption() { return GetCaption("RC"); }
+ inline CFX_WideString GetDownCaption() { return GetCaption("AC"); }
- inline CPDF_Stream* GetNormalIcon()
- {
- return GetIcon("I");
- }
+ inline CPDF_Stream* GetNormalIcon() { return GetIcon("I"); }
+ inline CPDF_Stream* GetRolloverIcon() { return GetIcon("RI"); }
+ inline CPDF_Stream* GetDownIcon() { return GetIcon("IX"); }
+ CPDF_IconFit GetIconFit();
- inline CPDF_Stream* GetRolloverIcon()
- {
- return GetIcon("RI");
- }
+ int GetTextPosition();
+ CPDF_Action GetAction();
+ CPDF_AAction GetAdditionalAction();
+ CPDF_DefaultAppearance GetDefaultAppearance();
- inline CPDF_Stream* GetDownIcon()
- {
- return GetIcon("IX");
- }
+ CPDF_Font* GetDefaultControlFont();
+ int GetControlAlignment();
+ protected:
+ CPDF_FormControl(CPDF_FormField* pField, CPDF_Dictionary* pWidgetDict);
+ CFX_ByteString GetOnStateName();
- CPDF_IconFit GetIconFit();
+ void SetOnStateName(const CFX_ByteString& csOn);
+ void CheckControl(FX_BOOL bChecked);
+ FX_ARGB GetColor(int& iColorType, CFX_ByteString csEntry);
+ FX_FLOAT GetOriginalColor(int index, CFX_ByteString csEntry);
- int GetTextPosition();
+ void GetOriginalColor(int& iColorType,
+ FX_FLOAT fc[4],
+ CFX_ByteString csEntry);
+ CFX_WideString GetCaption(CFX_ByteString csEntry);
+ CPDF_Stream* GetIcon(CFX_ByteString csEntry);
+ CPDF_ApSettings GetMK(FX_BOOL bCreate);
- CPDF_Action GetAction();
+ CPDF_InterForm* m_pForm;
+ CPDF_FormField* m_pField;
+ CPDF_Dictionary* m_pWidgetDict;
+ friend class CPDF_InterForm;
+ friend class CPDF_FormField;
+};
+class CPDF_FormNotify {
+ public:
+ virtual ~CPDF_FormNotify() {}
+ virtual int BeforeValueChange(const CPDF_FormField* pField,
+ CFX_WideString& csValue) {
+ return 0;
+ }
- CPDF_AAction GetAdditionalAction();
-
-
-
-
- CPDF_DefaultAppearance GetDefaultAppearance();
-
- CPDF_Font* GetDefaultControlFont();
-
-
-
-
- int GetControlAlignment();
-
-protected:
-
- CPDF_FormControl(CPDF_FormField* pField, CPDF_Dictionary* pWidgetDict);
-
- CFX_ByteString GetOnStateName();
-
- void SetOnStateName(const CFX_ByteString& csOn);
-
- void CheckControl(FX_BOOL bChecked);
-
- FX_ARGB GetColor(int& iColorType, CFX_ByteString csEntry);
-
- FX_FLOAT GetOriginalColor(int index, CFX_ByteString csEntry);
+ virtual int AfterValueChange(const CPDF_FormField* pField) { return 0; }
- void GetOriginalColor(int& iColorType, FX_FLOAT fc[4], CFX_ByteString csEntry);
+ virtual int BeforeSelectionChange(const CPDF_FormField* pField,
+ CFX_WideString& csValue) {
+ return 0;
+ }
- CFX_WideString GetCaption(CFX_ByteString csEntry);
+ virtual int AfterSelectionChange(const CPDF_FormField* pField) { return 0; }
- CPDF_Stream* GetIcon(CFX_ByteString csEntry);
+ virtual int AfterCheckedStatusChange(const CPDF_FormField* pField,
+ const CFX_ByteArray& statusArray) {
+ return 0;
+ }
- CPDF_ApSettings GetMK(FX_BOOL bCreate);
+ virtual int BeforeFormReset(const CPDF_InterForm* pForm) { return 0; }
- CPDF_InterForm* m_pForm;
+ virtual int AfterFormReset(const CPDF_InterForm* pForm) { return 0; }
- CPDF_FormField* m_pField;
+ virtual int BeforeFormImportData(const CPDF_InterForm* pForm) { return 0; }
- CPDF_Dictionary* m_pWidgetDict;
- friend class CPDF_InterForm;
- friend class CPDF_FormField;
+ virtual int AfterFormImportData(const CPDF_InterForm* pForm) { return 0; }
};
-class CPDF_FormNotify
-{
-public:
-
- virtual ~CPDF_FormNotify() {}
-
- virtual int BeforeValueChange(const CPDF_FormField* pField, CFX_WideString& csValue)
- {
- return 0;
- }
-
- virtual int AfterValueChange(const CPDF_FormField* pField)
- {
- return 0;
- }
-
- virtual int BeforeSelectionChange(const CPDF_FormField* pField, CFX_WideString& csValue)
- {
- return 0;
- }
-
- virtual int AfterSelectionChange(const CPDF_FormField* pField)
- {
- return 0;
- }
-
- virtual int AfterCheckedStatusChange(const CPDF_FormField* pField, const CFX_ByteArray& statusArray)
- {
- return 0;
- }
-
- virtual int BeforeFormReset(const CPDF_InterForm* pForm)
- {
- return 0;
- }
-
- virtual int AfterFormReset(const CPDF_InterForm* pForm)
- {
- return 0;
- }
-
- virtual int BeforeFormImportData(const CPDF_InterForm* pForm)
- {
- return 0;
- }
-
- virtual int AfterFormImportData(const CPDF_InterForm* pForm)
- {
- return 0;
- }
-};
-FX_BOOL FPDF_GenerateAP(CPDF_Document* pDoc, CPDF_Dictionary* pAnnotDict);
-class CPDF_PageLabel
-{
-public:
-
- CPDF_PageLabel(CPDF_Document* pDocument)
- {
- m_pDocument = pDocument;
- }
+FX_BOOL FPDF_GenerateAP(CPDF_Document* pDoc, CPDF_Dictionary* pAnnotDict);
+class CPDF_PageLabel {
+ public:
+ CPDF_PageLabel(CPDF_Document* pDocument) { m_pDocument = pDocument; }
+ CFX_WideString GetLabel(int nPage) const;
- CFX_WideString GetLabel(int nPage) const;
+ int32_t GetPageByLabel(const CFX_ByteStringC& bsLabel) const;
- int32_t GetPageByLabel(const CFX_ByteStringC& bsLabel) const;
+ int32_t GetPageByLabel(const CFX_WideStringC& wsLabel) const;
-
- int32_t GetPageByLabel(const CFX_WideStringC& wsLabel) const;
-
-protected:
- CPDF_Document* m_pDocument;
+ protected:
+ CPDF_Document* m_pDocument;
};
-class CPDF_Metadata
-{
-public:
-
- CPDF_Metadata();
-
+class CPDF_Metadata {
+ public:
+ CPDF_Metadata();
- ~CPDF_Metadata();
+ ~CPDF_Metadata();
- void LoadDoc(CPDF_Document *pDoc);
+ void LoadDoc(CPDF_Document* pDoc);
+ int32_t GetString(const CFX_ByteStringC& bsItem, CFX_WideString& wsStr);
- int32_t GetString(const CFX_ByteStringC& bsItem, CFX_WideString &wsStr);
+ CXML_Element* GetRoot() const;
- CXML_Element* GetRoot() const;
+ CXML_Element* GetRDF() const;
- CXML_Element* GetRDF() const;
-
-protected:
- void* m_pData;
+ protected:
+ void* m_pData;
};
-class CPDF_ViewerPreferences
-{
-public:
-
- CPDF_ViewerPreferences(CPDF_Document *pDoc);
-
-
- ~CPDF_ViewerPreferences();
+class CPDF_ViewerPreferences {
+ public:
+ CPDF_ViewerPreferences(CPDF_Document* pDoc);
+ ~CPDF_ViewerPreferences();
- FX_BOOL IsDirectionR2L() const;
+ FX_BOOL IsDirectionR2L() const;
- FX_BOOL PrintScaling() const;
+ FX_BOOL PrintScaling() const;
- int32_t NumCopies() const;
+ int32_t NumCopies() const;
- CPDF_Array* PrintPageRange() const;
+ CPDF_Array* PrintPageRange() const;
- CFX_ByteString Duplex() const;
+ CFX_ByteString Duplex() const;
-protected:
- CPDF_Document* m_pDoc;
+ protected:
+ CPDF_Document* m_pDoc;
};
-class CPDF_ApSettings
-{
-public:
-
- CPDF_ApSettings(CPDF_Dictionary* pDict = NULL)
- {
- m_pDict = pDict;
- }
-
- operator CPDF_Dictionary* () const
- {
- return m_pDict;
- }
-
- FX_BOOL HasMKEntry(const CFX_ByteStringC& csEntry);
-
-
-
- int GetRotation();
-
-
-
-
- inline FX_ARGB GetBorderColor(int& iColorType)
- {
- return GetColor(iColorType, FX_BSTRC("BC"));
- }
-
- inline FX_FLOAT GetOriginalBorderColor(int index)
- {
- return GetOriginalColor(index, FX_BSTRC("BC"));
- }
-
- inline void GetOriginalBorderColor(int& iColorType, FX_FLOAT fc[4])
- {
- GetOriginalColor(iColorType, fc, FX_BSTRC("BC"));
- }
-
-
-
-
- inline FX_ARGB GetBackgroundColor(int& iColorType)
- {
- return GetColor(iColorType, FX_BSTRC("BG"));
- }
-
- inline FX_FLOAT GetOriginalBackgroundColor(int index)
- {
- return GetOriginalColor(index, FX_BSTRC("BG"));
- }
-
- inline void GetOriginalBackgroundColor(int& iColorType, FX_FLOAT fc[4])
- {
- GetOriginalColor(iColorType, fc, FX_BSTRC("BG"));
- }
-
-
-
-
- inline CFX_WideString GetNormalCaption()
- {
- return GetCaption(FX_BSTRC("CA"));
- }
-
-
-
-
- inline CFX_WideString GetRolloverCaption()
- {
- return GetCaption(FX_BSTRC("RC"));
- }
-
-
-
-
- inline CFX_WideString GetDownCaption()
- {
- return GetCaption(FX_BSTRC("AC"));
- }
-
-
-
+class CPDF_ApSettings {
+ public:
+ CPDF_ApSettings(CPDF_Dictionary* pDict = NULL) { m_pDict = pDict; }
- inline CPDF_Stream* GetNormalIcon()
- {
- return GetIcon(FX_BSTRC("I"));
- }
+ operator CPDF_Dictionary*() const { return m_pDict; }
+ FX_BOOL HasMKEntry(const CFX_ByteStringC& csEntry);
+ int GetRotation();
+ inline FX_ARGB GetBorderColor(int& iColorType) {
+ return GetColor(iColorType, FX_BSTRC("BC"));
+ }
- inline CPDF_Stream* GetRolloverIcon()
- {
- return GetIcon(FX_BSTRC("RI"));
- }
+ inline FX_FLOAT GetOriginalBorderColor(int index) {
+ return GetOriginalColor(index, FX_BSTRC("BC"));
+ }
+ inline void GetOriginalBorderColor(int& iColorType, FX_FLOAT fc[4]) {
+ GetOriginalColor(iColorType, fc, FX_BSTRC("BC"));
+ }
+ inline FX_ARGB GetBackgroundColor(int& iColorType) {
+ return GetColor(iColorType, FX_BSTRC("BG"));
+ }
+ inline FX_FLOAT GetOriginalBackgroundColor(int index) {
+ return GetOriginalColor(index, FX_BSTRC("BG"));
+ }
- inline CPDF_Stream* GetDownIcon()
- {
- return GetIcon(FX_BSTRC("IX"));
- }
+ inline void GetOriginalBackgroundColor(int& iColorType, FX_FLOAT fc[4]) {
+ GetOriginalColor(iColorType, fc, FX_BSTRC("BG"));
+ }
+ inline CFX_WideString GetNormalCaption() {
+ return GetCaption(FX_BSTRC("CA"));
+ }
+ inline CFX_WideString GetRolloverCaption() {
+ return GetCaption(FX_BSTRC("RC"));
+ }
+ inline CFX_WideString GetDownCaption() { return GetCaption(FX_BSTRC("AC")); }
- CPDF_IconFit GetIconFit();
+ inline CPDF_Stream* GetNormalIcon() { return GetIcon(FX_BSTRC("I")); }
+ inline CPDF_Stream* GetRolloverIcon() { return GetIcon(FX_BSTRC("RI")); }
+ inline CPDF_Stream* GetDownIcon() { return GetIcon(FX_BSTRC("IX")); }
+ CPDF_IconFit GetIconFit();
- int GetTextPosition();
+ int GetTextPosition();
- CPDF_Dictionary* m_pDict;
-protected:
+ CPDF_Dictionary* m_pDict;
- FX_ARGB GetColor(int& iColorType, const CFX_ByteStringC& csEntry);
+ protected:
+ FX_ARGB GetColor(int& iColorType, const CFX_ByteStringC& csEntry);
- FX_FLOAT GetOriginalColor(int index, const CFX_ByteStringC& csEntry);
+ FX_FLOAT GetOriginalColor(int index, const CFX_ByteStringC& csEntry);
- void GetOriginalColor(int& iColorType, FX_FLOAT fc[4], const CFX_ByteStringC& csEntry);
+ void GetOriginalColor(int& iColorType,
+ FX_FLOAT fc[4],
+ const CFX_ByteStringC& csEntry);
- CFX_WideString GetCaption(const CFX_ByteStringC& csEntry);
+ CFX_WideString GetCaption(const CFX_ByteStringC& csEntry);
- CPDF_Stream* GetIcon(const CFX_ByteStringC& csEntry);
- friend class CPDF_FormControl;
+ CPDF_Stream* GetIcon(const CFX_ByteStringC& csEntry);
+ friend class CPDF_FormControl;
};
#endif // CORE_INCLUDE_FPDFDOC_FPDF_DOC_H_
diff --git a/core/include/fpdfdoc/fpdf_tagged.h b/core/include/fpdfdoc/fpdf_tagged.h
index 706f5c04d7..3de6041dc1 100644
--- a/core/include/fpdfdoc/fpdf_tagged.h
+++ b/core/include/fpdfdoc/fpdf_tagged.h
@@ -14,89 +14,93 @@ class CPDF_StructTree;
class IPDF_ReflowedPage;
struct CPDF_StructKid;
-class CPDF_StructTree
-{
-public:
+class CPDF_StructTree {
+ public:
+ static CPDF_StructTree* LoadDoc(const CPDF_Document* pDoc);
- static CPDF_StructTree* LoadDoc(const CPDF_Document* pDoc);
+ static CPDF_StructTree* LoadPage(const CPDF_Document* pDoc,
+ const CPDF_Dictionary* pPageDict);
- static CPDF_StructTree* LoadPage(const CPDF_Document* pDoc, const CPDF_Dictionary* pPageDict);
+ virtual ~CPDF_StructTree() {}
- virtual ~CPDF_StructTree() {}
+ virtual int CountTopElements() const = 0;
- virtual int CountTopElements() const = 0;
-
- virtual CPDF_StructElement* GetTopElement(int i) const = 0;
+ virtual CPDF_StructElement* GetTopElement(int i) const = 0;
};
struct CPDF_StructKid {
- enum {
- Invalid,
- Element,
- PageContent,
- StreamContent,
- Object
- } m_Type;
-
- union {
- struct {
-
- CPDF_StructElement* m_pElement;
-
- CPDF_Dictionary* m_pDict;
- } m_Element;
- struct {
+ enum { Invalid, Element, PageContent, StreamContent, Object } m_Type;
- FX_DWORD m_PageObjNum;
+ union {
+ struct {
+ CPDF_StructElement* m_pElement;
- FX_DWORD m_ContentId;
- } m_PageContent;
- struct {
+ CPDF_Dictionary* m_pDict;
+ } m_Element;
+ struct {
+ FX_DWORD m_PageObjNum;
- FX_DWORD m_PageObjNum;
+ FX_DWORD m_ContentId;
+ } m_PageContent;
+ struct {
+ FX_DWORD m_PageObjNum;
- FX_DWORD m_ContentId;
+ FX_DWORD m_ContentId;
- FX_DWORD m_RefObjNum;
- } m_StreamContent;
- struct {
+ FX_DWORD m_RefObjNum;
+ } m_StreamContent;
+ struct {
+ FX_DWORD m_PageObjNum;
- FX_DWORD m_PageObjNum;
-
- FX_DWORD m_RefObjNum;
- } m_Object;
- };
+ FX_DWORD m_RefObjNum;
+ } m_Object;
+ };
};
-class CPDF_StructElement
-{
-public:
- virtual ~CPDF_StructElement() { }
-
- virtual CPDF_StructTree* GetTree() const = 0;
-
- virtual const CFX_ByteString& GetType() const = 0;
-
- virtual CPDF_StructElement* GetParent() const = 0;
+class CPDF_StructElement {
+ public:
+ virtual ~CPDF_StructElement() {}
- virtual CPDF_Dictionary * GetDict() const = 0;
+ virtual CPDF_StructTree* GetTree() const = 0;
- virtual int CountKids() const = 0;
+ virtual const CFX_ByteString& GetType() const = 0;
- virtual const CPDF_StructKid& GetKid(int index) const = 0;
+ virtual CPDF_StructElement* GetParent() const = 0;
- virtual CFX_PtrArray* GetObjectArray() = 0;
+ virtual CPDF_Dictionary* GetDict() const = 0;
- virtual CPDF_Object* GetAttr(const CFX_ByteStringC& owner, const CFX_ByteStringC& name, FX_BOOL bInheritable = FALSE, FX_FLOAT fLevel = 0.0F) = 0;
+ virtual int CountKids() const = 0;
+ virtual const CPDF_StructKid& GetKid(int index) const = 0;
+ virtual CFX_PtrArray* GetObjectArray() = 0;
- virtual CFX_ByteString GetName(const CFX_ByteStringC& owner, const CFX_ByteStringC& name, const CFX_ByteStringC& default_value, FX_BOOL bInheritable = FALSE, int subindex = -1) = 0;
+ virtual CPDF_Object* GetAttr(const CFX_ByteStringC& owner,
+ const CFX_ByteStringC& name,
+ FX_BOOL bInheritable = FALSE,
+ FX_FLOAT fLevel = 0.0F) = 0;
- virtual FX_ARGB GetColor(const CFX_ByteStringC& owner, const CFX_ByteStringC& name, FX_ARGB default_value, FX_BOOL bInheritable = FALSE, int subindex = -1) = 0;
+ virtual CFX_ByteString GetName(const CFX_ByteStringC& owner,
+ const CFX_ByteStringC& name,
+ const CFX_ByteStringC& default_value,
+ FX_BOOL bInheritable = FALSE,
+ int subindex = -1) = 0;
- virtual FX_FLOAT GetNumber(const CFX_ByteStringC& owner, const CFX_ByteStringC& name, FX_FLOAT default_value, FX_BOOL bInheritable = FALSE, int subindex = -1) = 0;
+ virtual FX_ARGB GetColor(const CFX_ByteStringC& owner,
+ const CFX_ByteStringC& name,
+ FX_ARGB default_value,
+ FX_BOOL bInheritable = FALSE,
+ int subindex = -1) = 0;
- virtual int GetInteger(const CFX_ByteStringC& owner, const CFX_ByteStringC& name, int default_value, FX_BOOL bInheritable = FALSE, int subindex = -1) = 0;
+ virtual FX_FLOAT GetNumber(const CFX_ByteStringC& owner,
+ const CFX_ByteStringC& name,
+ FX_FLOAT default_value,
+ FX_BOOL bInheritable = FALSE,
+ int subindex = -1) = 0;
+ virtual int GetInteger(const CFX_ByteStringC& owner,
+ const CFX_ByteStringC& name,
+ int default_value,
+ FX_BOOL bInheritable = FALSE,
+ int subindex = -1) = 0;
};
#endif // CORE_INCLUDE_FPDFDOC_FPDF_TAGGED_H_
diff --git a/core/include/fpdfdoc/fpdf_vt.h b/core/include/fpdfdoc/fpdf_vt.h
index 4baba41348..62a6019793 100644
--- a/core/include/fpdfdoc/fpdf_vt.h
+++ b/core/include/fpdfdoc/fpdf_vt.h
@@ -20,434 +20,443 @@ struct CPVT_WordPlace;
struct CPVT_WordRange;
struct CPVT_WordPlace {
-
- CPVT_WordPlace() : nSecIndex(-1), nLineIndex(-1), nWordIndex(-1)
- {
+ CPVT_WordPlace() : nSecIndex(-1), nLineIndex(-1), nWordIndex(-1) {}
+
+ CPVT_WordPlace(int32_t other_nSecIndex,
+ int32_t other_nLineIndex,
+ int32_t other_nWordIndex) {
+ nSecIndex = other_nSecIndex;
+ nLineIndex = other_nLineIndex;
+ nWordIndex = other_nWordIndex;
+ }
+
+ void Default() { nSecIndex = nLineIndex = nWordIndex = -1; }
+
+ FX_BOOL operator==(const CPVT_WordPlace& wp) const {
+ return wp.nSecIndex == nSecIndex && wp.nLineIndex == nLineIndex &&
+ wp.nWordIndex == nWordIndex;
+ }
+
+ FX_BOOL operator!=(const CPVT_WordPlace& wp) const {
+ return wp.nSecIndex != nSecIndex || wp.nLineIndex != nLineIndex ||
+ wp.nWordIndex != nWordIndex;
+ }
+
+ inline int32_t WordCmp(const CPVT_WordPlace& wp) const {
+ if (nSecIndex > wp.nSecIndex) {
+ return 1;
}
-
- CPVT_WordPlace(int32_t other_nSecIndex,
- int32_t other_nLineIndex,
- int32_t other_nWordIndex)
- {
- nSecIndex = other_nSecIndex;
- nLineIndex = other_nLineIndex;
- nWordIndex = other_nWordIndex;
+ if (nSecIndex < wp.nSecIndex) {
+ return -1;
}
-
- void Default()
- {
- nSecIndex = nLineIndex = nWordIndex = -1;
+ if (nLineIndex > wp.nLineIndex) {
+ return 1;
}
-
- FX_BOOL operator == (const CPVT_WordPlace & wp) const
- {
- return wp.nSecIndex == nSecIndex && wp.nLineIndex == nLineIndex && wp.nWordIndex == nWordIndex;
+ if (nLineIndex < wp.nLineIndex) {
+ return -1;
}
-
- FX_BOOL operator != (const CPVT_WordPlace & wp) const
- {
- return wp.nSecIndex != nSecIndex || wp.nLineIndex != nLineIndex || wp.nWordIndex != nWordIndex;
+ if (nWordIndex > wp.nWordIndex) {
+ return 1;
}
-
- inline int32_t WordCmp(const CPVT_WordPlace & wp) const
- {
- if (nSecIndex > wp.nSecIndex) {
- return 1;
- }
- if (nSecIndex < wp.nSecIndex) {
- return -1;
- }
- if (nLineIndex > wp.nLineIndex) {
- return 1;
- }
- if (nLineIndex < wp.nLineIndex) {
- return -1;
- }
- if (nWordIndex > wp.nWordIndex) {
- return 1;
- }
- if (nWordIndex < wp.nWordIndex) {
- return -1;
- }
- return 0;
+ if (nWordIndex < wp.nWordIndex) {
+ return -1;
}
+ return 0;
+ }
- inline int32_t LineCmp(const CPVT_WordPlace & wp) const
- {
- if (nSecIndex > wp.nSecIndex) {
- return 1;
- }
- if (nSecIndex < wp.nSecIndex) {
- return -1;
- }
- if (nLineIndex > wp.nLineIndex) {
- return 1;
- }
- if (nLineIndex < wp.nLineIndex) {
- return -1;
- }
- return 0;
+ inline int32_t LineCmp(const CPVT_WordPlace& wp) const {
+ if (nSecIndex > wp.nSecIndex) {
+ return 1;
}
-
- inline int32_t SecCmp(const CPVT_WordPlace & wp) const
- {
- if (nSecIndex > wp.nSecIndex) {
- return 1;
- }
- if (nSecIndex < wp.nSecIndex) {
- return -1;
- }
- return 0;
+ if (nSecIndex < wp.nSecIndex) {
+ return -1;
}
-
- int32_t nSecIndex;
-
- int32_t nLineIndex;
-
- int32_t nWordIndex;
-};
-struct CPVT_WordRange {
-
- CPVT_WordRange()
- {
- }
-
- CPVT_WordRange(const CPVT_WordPlace & begin, const CPVT_WordPlace & end)
- {
- Set(begin, end);
+ if (nLineIndex > wp.nLineIndex) {
+ return 1;
}
-
- void Default()
- {
- BeginPos.Default();
- EndPos.Default();
+ if (nLineIndex < wp.nLineIndex) {
+ return -1;
}
+ return 0;
+ }
- void Set(const CPVT_WordPlace & begin, const CPVT_WordPlace & end)
- {
- BeginPos = begin;
- EndPos = end;
- SwapWordPlace();
+ inline int32_t SecCmp(const CPVT_WordPlace& wp) const {
+ if (nSecIndex > wp.nSecIndex) {
+ return 1;
}
-
- void SetBeginPos(const CPVT_WordPlace & begin)
- {
- BeginPos = begin;
- SwapWordPlace();
+ if (nSecIndex < wp.nSecIndex) {
+ return -1;
}
+ return 0;
+ }
- void SetEndPos(const CPVT_WordPlace & end)
- {
- EndPos = end;
- SwapWordPlace();
- }
+ int32_t nSecIndex;
- FX_BOOL IsExist() const
- {
- return BeginPos != EndPos;
- }
-
- FX_BOOL operator != (const CPVT_WordRange & wr) const
- {
- return wr.BeginPos != BeginPos || wr.EndPos != EndPos;
- }
-
- void SwapWordPlace()
- {
- if (BeginPos.WordCmp(EndPos) > 0) {
- CPVT_WordPlace place = EndPos;
- EndPos = BeginPos;
- BeginPos = place;
- }
- }
+ int32_t nLineIndex;
- CPVT_WordPlace BeginPos;
-
- CPVT_WordPlace EndPos;
+ int32_t nWordIndex;
};
-struct CPVT_SecProps {
-
- CPVT_SecProps() : fLineLeading(0.0f), fLineIndent(0.0f), nAlignment(0)
- {
- }
-
- CPVT_SecProps(FX_FLOAT lineLeading, FX_FLOAT lineIndent, int32_t alignment) :
- fLineLeading(lineLeading), fLineIndent(lineIndent), nAlignment(alignment)
- {
- }
-
- CPVT_SecProps(const CPVT_SecProps & other) :
- fLineLeading(other.fLineLeading), fLineIndent(other.fLineIndent), nAlignment(other.nAlignment)
- {
+struct CPVT_WordRange {
+ CPVT_WordRange() {}
+
+ CPVT_WordRange(const CPVT_WordPlace& begin, const CPVT_WordPlace& end) {
+ Set(begin, end);
+ }
+
+ void Default() {
+ BeginPos.Default();
+ EndPos.Default();
+ }
+
+ void Set(const CPVT_WordPlace& begin, const CPVT_WordPlace& end) {
+ BeginPos = begin;
+ EndPos = end;
+ SwapWordPlace();
+ }
+
+ void SetBeginPos(const CPVT_WordPlace& begin) {
+ BeginPos = begin;
+ SwapWordPlace();
+ }
+
+ void SetEndPos(const CPVT_WordPlace& end) {
+ EndPos = end;
+ SwapWordPlace();
+ }
+
+ FX_BOOL IsExist() const { return BeginPos != EndPos; }
+
+ FX_BOOL operator!=(const CPVT_WordRange& wr) const {
+ return wr.BeginPos != BeginPos || wr.EndPos != EndPos;
+ }
+
+ void SwapWordPlace() {
+ if (BeginPos.WordCmp(EndPos) > 0) {
+ CPVT_WordPlace place = EndPos;
+ EndPos = BeginPos;
+ BeginPos = place;
}
+ }
- FX_FLOAT fLineLeading;
-
- FX_FLOAT fLineIndent;
+ CPVT_WordPlace BeginPos;
- int32_t nAlignment;
+ CPVT_WordPlace EndPos;
};
-struct CPVT_WordProps {
-
- CPVT_WordProps() : nFontIndex(-1), fFontSize(0.0f), dwWordColor(0), nScriptType(0), nWordStyle(0),
- fCharSpace(0.0f), nHorzScale(0)
- {
- }
-
- CPVT_WordProps(int32_t fontIndex, FX_FLOAT fontSize, FX_COLORREF wordColor = 0, int32_t scriptType = 0, int32_t wordStyle = 0,
- FX_FLOAT charSpace = 0, int32_t horzScale = 100) :
- nFontIndex(fontIndex), fFontSize(fontSize), dwWordColor(wordColor), nScriptType(scriptType),
- nWordStyle(wordStyle), fCharSpace(charSpace), nHorzScale(horzScale)
- {
- }
-
- CPVT_WordProps(const CPVT_WordProps & other) :
- nFontIndex(other.nFontIndex), fFontSize(other.fFontSize), dwWordColor(other.dwWordColor),
- nScriptType(other.nScriptType), nWordStyle(other.nWordStyle), fCharSpace(other.fCharSpace),
- nHorzScale(other.nHorzScale)
- {
- }
+struct CPVT_SecProps {
+ CPVT_SecProps() : fLineLeading(0.0f), fLineIndent(0.0f), nAlignment(0) {}
- int32_t nFontIndex;
+ CPVT_SecProps(FX_FLOAT lineLeading, FX_FLOAT lineIndent, int32_t alignment)
+ : fLineLeading(lineLeading),
+ fLineIndent(lineIndent),
+ nAlignment(alignment) {}
- FX_FLOAT fFontSize;
+ CPVT_SecProps(const CPVT_SecProps& other)
+ : fLineLeading(other.fLineLeading),
+ fLineIndent(other.fLineIndent),
+ nAlignment(other.nAlignment) {}
- FX_COLORREF dwWordColor;
+ FX_FLOAT fLineLeading;
- int32_t nScriptType;
+ FX_FLOAT fLineIndent;
- int32_t nWordStyle;
-
- FX_FLOAT fCharSpace;
-
- int32_t nHorzScale;
+ int32_t nAlignment;
+};
+struct CPVT_WordProps {
+ CPVT_WordProps()
+ : nFontIndex(-1),
+ fFontSize(0.0f),
+ dwWordColor(0),
+ nScriptType(0),
+ nWordStyle(0),
+ fCharSpace(0.0f),
+ nHorzScale(0) {}
+
+ CPVT_WordProps(int32_t fontIndex,
+ FX_FLOAT fontSize,
+ FX_COLORREF wordColor = 0,
+ int32_t scriptType = 0,
+ int32_t wordStyle = 0,
+ FX_FLOAT charSpace = 0,
+ int32_t horzScale = 100)
+ : nFontIndex(fontIndex),
+ fFontSize(fontSize),
+ dwWordColor(wordColor),
+ nScriptType(scriptType),
+ nWordStyle(wordStyle),
+ fCharSpace(charSpace),
+ nHorzScale(horzScale) {}
+
+ CPVT_WordProps(const CPVT_WordProps& other)
+ : nFontIndex(other.nFontIndex),
+ fFontSize(other.fFontSize),
+ dwWordColor(other.dwWordColor),
+ nScriptType(other.nScriptType),
+ nWordStyle(other.nWordStyle),
+ fCharSpace(other.fCharSpace),
+ nHorzScale(other.nHorzScale) {}
+
+ int32_t nFontIndex;
+
+ FX_FLOAT fFontSize;
+
+ FX_COLORREF dwWordColor;
+
+ int32_t nScriptType;
+
+ int32_t nWordStyle;
+
+ FX_FLOAT fCharSpace;
+
+ int32_t nHorzScale;
};
struct CPVT_Word {
+ CPVT_Word()
+ : Word(0),
+ nCharset(0),
+ ptWord(0, 0),
+ fAscent(0.0f),
+ fDescent(0.0f),
+ fWidth(0.0f),
+ fFontSize(0),
+ WordProps() {}
- CPVT_Word() : Word(0), nCharset(0), ptWord(0, 0), fAscent(0.0f), fDescent(0.0f), fWidth(0.0f),
- fFontSize(0), WordProps()
- {
- }
-
- FX_WORD Word;
+ FX_WORD Word;
- int32_t nCharset;
+ int32_t nCharset;
- CPVT_WordPlace WordPlace;
+ CPVT_WordPlace WordPlace;
- CPDF_Point ptWord;
+ CPDF_Point ptWord;
- FX_FLOAT fAscent;
+ FX_FLOAT fAscent;
- FX_FLOAT fDescent;
+ FX_FLOAT fDescent;
- FX_FLOAT fWidth;
+ FX_FLOAT fWidth;
- int32_t nFontIndex;
+ int32_t nFontIndex;
- FX_FLOAT fFontSize;
+ FX_FLOAT fFontSize;
- CPVT_WordProps WordProps;
+ CPVT_WordProps WordProps;
};
struct CPVT_Line {
+ CPVT_Line()
+ : ptLine(0, 0), fLineWidth(0.0f), fLineAscent(0.0f), fLineDescent(0.0f) {}
- CPVT_Line() : ptLine(0, 0), fLineWidth(0.0f), fLineAscent(0.0f), fLineDescent(0.0f)
- {
- }
+ CPVT_WordPlace lineplace;
- CPVT_WordPlace lineplace;
+ CPVT_WordPlace lineEnd;
- CPVT_WordPlace lineEnd;
+ CPDF_Point ptLine;
- CPDF_Point ptLine;
+ FX_FLOAT fLineWidth;
- FX_FLOAT fLineWidth;
+ FX_FLOAT fLineAscent;
- FX_FLOAT fLineAscent;
-
- FX_FLOAT fLineDescent;
+ FX_FLOAT fLineDescent;
};
struct CPVT_Section {
+ CPVT_WordPlace secplace;
- CPVT_WordPlace secplace;
-
- CPDF_Rect rcSection;
+ CPDF_Rect rcSection;
- CPVT_SecProps SecProps;
+ CPVT_SecProps SecProps;
- CPVT_WordProps WordProps;
+ CPVT_WordProps WordProps;
};
-class IPDF_VariableText_Provider
-{
-public:
- virtual ~IPDF_VariableText_Provider() { }
+class IPDF_VariableText_Provider {
+ public:
+ virtual ~IPDF_VariableText_Provider() {}
- virtual int32_t GetCharWidth(int32_t nFontIndex, FX_WORD word, int32_t nWordStyle) = 0;
+ virtual int32_t GetCharWidth(int32_t nFontIndex,
+ FX_WORD word,
+ int32_t nWordStyle) = 0;
- virtual int32_t GetTypeAscent(int32_t nFontIndex) = 0;
+ virtual int32_t GetTypeAscent(int32_t nFontIndex) = 0;
- virtual int32_t GetTypeDescent(int32_t nFontIndex) = 0;
+ virtual int32_t GetTypeDescent(int32_t nFontIndex) = 0;
- virtual int32_t GetWordFontIndex(FX_WORD word, int32_t charset, int32_t nFontIndex) = 0;
+ virtual int32_t GetWordFontIndex(FX_WORD word,
+ int32_t charset,
+ int32_t nFontIndex) = 0;
- virtual FX_BOOL IsLatinWord(FX_WORD word) = 0;
+ virtual FX_BOOL IsLatinWord(FX_WORD word) = 0;
- virtual int32_t GetDefaultFontIndex() = 0;
+ virtual int32_t GetDefaultFontIndex() = 0;
};
-class IPDF_VariableText_Iterator
-{
-public:
- virtual ~IPDF_VariableText_Iterator() { }
+class IPDF_VariableText_Iterator {
+ public:
+ virtual ~IPDF_VariableText_Iterator() {}
- virtual FX_BOOL NextWord() = 0;
+ virtual FX_BOOL NextWord() = 0;
- virtual FX_BOOL PrevWord() = 0;
+ virtual FX_BOOL PrevWord() = 0;
- virtual FX_BOOL NextLine() = 0;
+ virtual FX_BOOL NextLine() = 0;
- virtual FX_BOOL PrevLine() = 0;
+ virtual FX_BOOL PrevLine() = 0;
- virtual FX_BOOL NextSection() = 0;
+ virtual FX_BOOL NextSection() = 0;
- virtual FX_BOOL PrevSection() = 0;
+ virtual FX_BOOL PrevSection() = 0;
- virtual FX_BOOL GetWord(CPVT_Word & word) const = 0;
+ virtual FX_BOOL GetWord(CPVT_Word& word) const = 0;
- virtual FX_BOOL SetWord(const CPVT_Word & word) = 0;
+ virtual FX_BOOL SetWord(const CPVT_Word& word) = 0;
- virtual FX_BOOL GetLine(CPVT_Line & line) const = 0;
+ virtual FX_BOOL GetLine(CPVT_Line& line) const = 0;
- virtual FX_BOOL GetSection(CPVT_Section & section) const = 0;
+ virtual FX_BOOL GetSection(CPVT_Section& section) const = 0;
- virtual FX_BOOL SetSection(const CPVT_Section & section) = 0;
+ virtual FX_BOOL SetSection(const CPVT_Section& section) = 0;
- virtual void SetAt(int32_t nWordIndex) = 0;
+ virtual void SetAt(int32_t nWordIndex) = 0;
- virtual void SetAt(const CPVT_WordPlace & place) = 0;
+ virtual void SetAt(const CPVT_WordPlace& place) = 0;
- virtual const CPVT_WordPlace & GetAt() const = 0;
+ virtual const CPVT_WordPlace& GetAt() const = 0;
};
-class IPDF_VariableText
-{
-public:
- static IPDF_VariableText* NewVariableText();
+class IPDF_VariableText {
+ public:
+ static IPDF_VariableText* NewVariableText();
- static void DelVariableText(IPDF_VariableText* pVT);
+ static void DelVariableText(IPDF_VariableText* pVT);
- virtual IPDF_VariableText_Provider* SetProvider(IPDF_VariableText_Provider * pProvider) = 0;
+ virtual IPDF_VariableText_Provider* SetProvider(
+ IPDF_VariableText_Provider* pProvider) = 0;
- virtual IPDF_VariableText_Iterator* GetIterator() = 0;
+ virtual IPDF_VariableText_Iterator* GetIterator() = 0;
- virtual void SetPlateRect(const CPDF_Rect & rect) = 0;
+ virtual void SetPlateRect(const CPDF_Rect& rect) = 0;
- virtual void SetAlignment(int32_t nFormat = 0) = 0;
+ virtual void SetAlignment(int32_t nFormat = 0) = 0;
- virtual void SetPasswordChar(FX_WORD wSubWord = '*') = 0;
+ virtual void SetPasswordChar(FX_WORD wSubWord = '*') = 0;
- virtual void SetLimitChar(int32_t nLimitChar = 0) = 0;
+ virtual void SetLimitChar(int32_t nLimitChar = 0) = 0;
- virtual void SetCharArray(int32_t nCharArray = 0) = 0;
+ virtual void SetCharArray(int32_t nCharArray = 0) = 0;
- virtual void SetCharSpace(FX_FLOAT fCharSpace = 0.0f) = 0;
+ virtual void SetCharSpace(FX_FLOAT fCharSpace = 0.0f) = 0;
- virtual void SetHorzScale(int32_t nHorzScale = 100) = 0;
+ virtual void SetHorzScale(int32_t nHorzScale = 100) = 0;
- virtual void SetMultiLine(FX_BOOL bMultiLine = TRUE) = 0;
+ virtual void SetMultiLine(FX_BOOL bMultiLine = TRUE) = 0;
- virtual void SetAutoReturn(FX_BOOL bAuto = TRUE) = 0;
+ virtual void SetAutoReturn(FX_BOOL bAuto = TRUE) = 0;
- virtual void SetAutoFontSize(FX_BOOL bAuto = TRUE) = 0;
+ virtual void SetAutoFontSize(FX_BOOL bAuto = TRUE) = 0;
- virtual void SetFontSize(FX_FLOAT fFontSize) = 0;
+ virtual void SetFontSize(FX_FLOAT fFontSize) = 0;
- virtual void SetLineLeading(FX_FLOAT fLineLeading) = 0;
+ virtual void SetLineLeading(FX_FLOAT fLineLeading) = 0;
- virtual void SetRichText(FX_BOOL bRichText) = 0;
+ virtual void SetRichText(FX_BOOL bRichText) = 0;
- virtual void Initialize() = 0;
+ virtual void Initialize() = 0;
- virtual FX_BOOL IsValid() const = 0;
+ virtual FX_BOOL IsValid() const = 0;
- virtual FX_BOOL IsRichText() const = 0;
+ virtual FX_BOOL IsRichText() const = 0;
- virtual void RearrangeAll() = 0;
+ virtual void RearrangeAll() = 0;
- virtual void RearrangePart(const CPVT_WordRange & PlaceRange) = 0;
+ virtual void RearrangePart(const CPVT_WordRange& PlaceRange) = 0;
- virtual void ResetAll() = 0;
+ virtual void ResetAll() = 0;
- virtual void SetText(const FX_WCHAR* text, int32_t charset = 1, const CPVT_SecProps * pSecProps = NULL,
- const CPVT_WordProps * pWordProps = NULL) = 0;
+ virtual void SetText(const FX_WCHAR* text,
+ int32_t charset = 1,
+ const CPVT_SecProps* pSecProps = NULL,
+ const CPVT_WordProps* pWordProps = NULL) = 0;
- virtual CPVT_WordPlace InsertWord(const CPVT_WordPlace & place, FX_WORD word, int32_t charset = 1,
- const CPVT_WordProps * pWordProps = NULL) = 0;
+ virtual CPVT_WordPlace InsertWord(
+ const CPVT_WordPlace& place,
+ FX_WORD word,
+ int32_t charset = 1,
+ const CPVT_WordProps* pWordProps = NULL) = 0;
- virtual CPVT_WordPlace InsertSection(const CPVT_WordPlace & place, const CPVT_SecProps * pSecProps = NULL,
- const CPVT_WordProps * pWordProps = NULL) = 0;
+ virtual CPVT_WordPlace InsertSection(
+ const CPVT_WordPlace& place,
+ const CPVT_SecProps* pSecProps = NULL,
+ const CPVT_WordProps* pWordProps = NULL) = 0;
- virtual CPVT_WordPlace InsertText(const CPVT_WordPlace & place, const FX_WCHAR* text, int32_t charset = 1,
- const CPVT_SecProps * pSecProps = NULL, const CPVT_WordProps * pWordProps = NULL) = 0;
+ virtual CPVT_WordPlace InsertText(
+ const CPVT_WordPlace& place,
+ const FX_WCHAR* text,
+ int32_t charset = 1,
+ const CPVT_SecProps* pSecProps = NULL,
+ const CPVT_WordProps* pWordProps = NULL) = 0;
- virtual CPVT_WordPlace DeleteWords(const CPVT_WordRange & PlaceRange) = 0;
+ virtual CPVT_WordPlace DeleteWords(const CPVT_WordRange& PlaceRange) = 0;
- virtual CPVT_WordPlace DeleteWord(const CPVT_WordPlace & place) = 0;
+ virtual CPVT_WordPlace DeleteWord(const CPVT_WordPlace& place) = 0;
- virtual CPVT_WordPlace BackSpaceWord(const CPVT_WordPlace & place) = 0;
+ virtual CPVT_WordPlace BackSpaceWord(const CPVT_WordPlace& place) = 0;
- virtual const CPDF_Rect & GetPlateRect() const = 0;
+ virtual const CPDF_Rect& GetPlateRect() const = 0;
- virtual CPDF_Rect GetContentRect() const = 0;
+ virtual CPDF_Rect GetContentRect() const = 0;
- virtual int32_t GetTotalWords() const = 0;
+ virtual int32_t GetTotalWords() const = 0;
- virtual FX_FLOAT GetFontSize() const = 0;
+ virtual FX_FLOAT GetFontSize() const = 0;
- virtual int32_t GetAlignment() const = 0;
+ virtual int32_t GetAlignment() const = 0;
- virtual FX_WORD GetPasswordChar() const = 0;
+ virtual FX_WORD GetPasswordChar() const = 0;
- virtual int32_t GetCharArray() const = 0;
+ virtual int32_t GetCharArray() const = 0;
- virtual int32_t GetLimitChar() const = 0;
+ virtual int32_t GetLimitChar() const = 0;
- virtual FX_BOOL IsMultiLine() const = 0;
+ virtual FX_BOOL IsMultiLine() const = 0;
- virtual int32_t GetHorzScale() const = 0;
+ virtual int32_t GetHorzScale() const = 0;
- virtual FX_FLOAT GetCharSpace() const = 0;
+ virtual FX_FLOAT GetCharSpace() const = 0;
- virtual CPVT_WordPlace GetBeginWordPlace() const = 0;
+ virtual CPVT_WordPlace GetBeginWordPlace() const = 0;
- virtual CPVT_WordPlace GetEndWordPlace() const = 0;
+ virtual CPVT_WordPlace GetEndWordPlace() const = 0;
- virtual CPVT_WordPlace GetPrevWordPlace(const CPVT_WordPlace & place) const = 0;
+ virtual CPVT_WordPlace GetPrevWordPlace(
+ const CPVT_WordPlace& place) const = 0;
- virtual CPVT_WordPlace GetNextWordPlace(const CPVT_WordPlace & place) const = 0;
+ virtual CPVT_WordPlace GetNextWordPlace(
+ const CPVT_WordPlace& place) const = 0;
- virtual CPVT_WordPlace SearchWordPlace(const CPDF_Point & point) const = 0;
+ virtual CPVT_WordPlace SearchWordPlace(const CPDF_Point& point) const = 0;
- virtual CPVT_WordPlace GetUpWordPlace(const CPVT_WordPlace & place, const CPDF_Point & point) const = 0;
+ virtual CPVT_WordPlace GetUpWordPlace(const CPVT_WordPlace& place,
+ const CPDF_Point& point) const = 0;
- virtual CPVT_WordPlace GetDownWordPlace(const CPVT_WordPlace & place, const CPDF_Point & point) const = 0;
+ virtual CPVT_WordPlace GetDownWordPlace(const CPVT_WordPlace& place,
+ const CPDF_Point& point) const = 0;
- virtual CPVT_WordPlace GetLineBeginPlace(const CPVT_WordPlace & place) const = 0;
+ virtual CPVT_WordPlace GetLineBeginPlace(
+ const CPVT_WordPlace& place) const = 0;
- virtual CPVT_WordPlace GetLineEndPlace(const CPVT_WordPlace & place) const = 0;
+ virtual CPVT_WordPlace GetLineEndPlace(const CPVT_WordPlace& place) const = 0;
- virtual CPVT_WordPlace GetSectionBeginPlace(const CPVT_WordPlace & place) const = 0;
+ virtual CPVT_WordPlace GetSectionBeginPlace(
+ const CPVT_WordPlace& place) const = 0;
- virtual CPVT_WordPlace GetSectionEndPlace(const CPVT_WordPlace & place) const = 0;
+ virtual CPVT_WordPlace GetSectionEndPlace(
+ const CPVT_WordPlace& place) const = 0;
- virtual void UpdateWordPlace(CPVT_WordPlace & place) const = 0;
+ virtual void UpdateWordPlace(CPVT_WordPlace& place) const = 0;
- virtual CPVT_WordPlace AjustLineHeader(const CPVT_WordPlace & place, FX_BOOL bPrevOrNext) const = 0;
+ virtual CPVT_WordPlace AjustLineHeader(const CPVT_WordPlace& place,
+ FX_BOOL bPrevOrNext) const = 0;
- virtual int32_t WordPlaceToWordIndex(const CPVT_WordPlace & place) const = 0;
+ virtual int32_t WordPlaceToWordIndex(const CPVT_WordPlace& place) const = 0;
- virtual CPVT_WordPlace WordIndexToWordPlace(int32_t index) const = 0;
+ virtual CPVT_WordPlace WordIndexToWordPlace(int32_t index) const = 0;
-protected:
- ~IPDF_VariableText() { }
+ protected:
+ ~IPDF_VariableText() {}
};
#endif // CORE_INCLUDE_FPDFDOC_FPDF_VT_H_
diff --git a/core/include/fpdftext/fpdf_text.h b/core/include/fpdftext/fpdf_text.h
index 04922c4b7f..eb16ca9a90 100644
--- a/core/include/fpdftext/fpdf_text.h
+++ b/core/include/fpdftext/fpdf_text.h
@@ -17,153 +17,168 @@ class IPDF_ReflowedPage;
class IPDF_TextPage;
class IPDF_TextPageFind;
-#define PDF2TXT_AUTO_ROTATE 1
-#define PDF2TXT_AUTO_WIDTH 2
-#define PDF2TXT_KEEP_COLUMN 4
-#define PDF2TXT_USE_OCR 8
-#define PDF2TXT_INCLUDE_INVISIBLE 16
-void PDF_GetPageText(CFX_ByteStringArray& lines, CPDF_Document* pDoc, CPDF_Dictionary* pPage,
- int iMinWidth, FX_DWORD flags);
-void PDF_GetPageText_Unicode(CFX_WideStringArray& lines, CPDF_Document* pDoc, CPDF_Dictionary* pPage,
- int iMinWidth, FX_DWORD flags);
-void PDF_GetTextStream_Unicode(CFX_WideTextBuf& buffer, CPDF_Document* pDoc, CPDF_Dictionary* pPage,
+#define PDF2TXT_AUTO_ROTATE 1
+#define PDF2TXT_AUTO_WIDTH 2
+#define PDF2TXT_KEEP_COLUMN 4
+#define PDF2TXT_USE_OCR 8
+#define PDF2TXT_INCLUDE_INVISIBLE 16
+void PDF_GetPageText(CFX_ByteStringArray& lines,
+ CPDF_Document* pDoc,
+ CPDF_Dictionary* pPage,
+ int iMinWidth,
+ FX_DWORD flags);
+void PDF_GetPageText_Unicode(CFX_WideStringArray& lines,
+ CPDF_Document* pDoc,
+ CPDF_Dictionary* pPage,
+ int iMinWidth,
+ FX_DWORD flags);
+void PDF_GetTextStream_Unicode(CFX_WideTextBuf& buffer,
+ CPDF_Document* pDoc,
+ CPDF_Dictionary* pPage,
FX_DWORD flags);
-CFX_WideString PDF_GetFirstTextLine_Unicode(CPDF_Document* pDoc, CPDF_Dictionary* pPage);
-#define CHAR_ERROR -1
-#define CHAR_NORMAL 0
-#define CHAR_GENERATED 1
-#define CHAR_UNUNICODE 2
+CFX_WideString PDF_GetFirstTextLine_Unicode(CPDF_Document* pDoc,
+ CPDF_Dictionary* pPage);
+#define CHAR_ERROR -1
+#define CHAR_NORMAL 0
+#define CHAR_GENERATED 1
+#define CHAR_UNUNICODE 2
typedef struct {
- FX_WCHAR m_Unicode;
- FX_WCHAR m_Charcode;
- int32_t m_Flag;
- FX_FLOAT m_FontSize;
- FX_FLOAT m_OriginX;
- FX_FLOAT m_OriginY;
- CFX_FloatRect m_CharBox;
- CPDF_TextObject* m_pTextObj;
- CFX_AffineMatrix m_Matrix;
+ FX_WCHAR m_Unicode;
+ FX_WCHAR m_Charcode;
+ int32_t m_Flag;
+ FX_FLOAT m_FontSize;
+ FX_FLOAT m_OriginX;
+ FX_FLOAT m_OriginY;
+ CFX_FloatRect m_CharBox;
+ CPDF_TextObject* m_pTextObj;
+ CFX_AffineMatrix m_Matrix;
} FPDF_CHAR_INFO;
-typedef CFX_ArrayTemplate<CFX_FloatRect> CFX_RectArray;
-#define FPDFTEXT_LRTB 0
-#define FPDFTEXT_RLTB 1
-#define FPDFTEXT_TBRL 2
-#define FPDFTEXT_LEFT -1
-#define FPDFTEXT_RIGHT 1
-#define FPDFTEXT_UP -2
-#define FPDFTEXT_DOWN 2
-#define FPDFTEXT_WRITINGMODE_UNKNOW 0
-#define FPDFTEXT_WRITINGMODE_LRTB 1
-#define FPDFTEXT_WRITINGMODE_RLTB 2
-#define FPDFTEXT_WRITINGMODE_TBRL 3
-class CPDFText_ParseOptions
-{
-public:
-
- CPDFText_ParseOptions();
- FX_BOOL m_bGetCharCodeOnly;
- FX_BOOL m_bNormalizeObjs;
- FX_BOOL m_bOutputHyphen;
+typedef CFX_ArrayTemplate<CFX_FloatRect> CFX_RectArray;
+#define FPDFTEXT_LRTB 0
+#define FPDFTEXT_RLTB 1
+#define FPDFTEXT_TBRL 2
+#define FPDFTEXT_LEFT -1
+#define FPDFTEXT_RIGHT 1
+#define FPDFTEXT_UP -2
+#define FPDFTEXT_DOWN 2
+#define FPDFTEXT_WRITINGMODE_UNKNOW 0
+#define FPDFTEXT_WRITINGMODE_LRTB 1
+#define FPDFTEXT_WRITINGMODE_RLTB 2
+#define FPDFTEXT_WRITINGMODE_TBRL 3
+class CPDFText_ParseOptions {
+ public:
+ CPDFText_ParseOptions();
+ FX_BOOL m_bGetCharCodeOnly;
+ FX_BOOL m_bNormalizeObjs;
+ FX_BOOL m_bOutputHyphen;
};
-class IPDF_TextPage
-{
-public:
+class IPDF_TextPage {
+ public:
+ virtual ~IPDF_TextPage() {}
+ static IPDF_TextPage* CreateTextPage(const CPDF_Page* pPage,
+ CPDFText_ParseOptions ParserOptions);
+ static IPDF_TextPage* CreateTextPage(const CPDF_Page* pPage, int flags = 0);
+ static IPDF_TextPage* CreateTextPage(const CPDF_PageObjects* pObjs,
+ int flags = 0);
+ static IPDF_TextPage* CreateReflowTextPage(IPDF_ReflowedPage* pRefPage);
- virtual ~IPDF_TextPage() {}
- static IPDF_TextPage* CreateTextPage(const CPDF_Page* pPage, CPDFText_ParseOptions ParserOptions);
- static IPDF_TextPage* CreateTextPage(const CPDF_Page* pPage, int flags = 0);
- static IPDF_TextPage* CreateTextPage(const CPDF_PageObjects* pObjs, int flags = 0);
- static IPDF_TextPage* CreateReflowTextPage(IPDF_ReflowedPage* pRefPage);
+ virtual void NormalizeObjects(FX_BOOL bNormalize) = 0;
- virtual void NormalizeObjects(FX_BOOL bNormalize) = 0;
+ virtual FX_BOOL ParseTextPage() = 0;
- virtual FX_BOOL ParseTextPage() = 0;
+ virtual FX_BOOL IsParsered() const = 0;
+ public:
+ virtual int CharIndexFromTextIndex(int TextIndex) const = 0;
- virtual FX_BOOL IsParsered() const = 0;
-public:
+ virtual int TextIndexFromCharIndex(int CharIndex) const = 0;
- virtual int CharIndexFromTextIndex(int TextIndex) const = 0;
+ virtual int CountChars() const = 0;
- virtual int TextIndexFromCharIndex(int CharIndex) const = 0;
+ virtual void GetCharInfo(int index, FPDF_CHAR_INFO& info) const = 0;
+ virtual void GetRectArray(int start,
+ int nCount,
+ CFX_RectArray& rectArray) const = 0;
- virtual int CountChars() const = 0;
+ virtual int GetIndexAtPos(CPDF_Point point,
+ FX_FLOAT xTorelance,
+ FX_FLOAT yTorelance) const = 0;
- virtual void GetCharInfo(int index, FPDF_CHAR_INFO & info) const = 0;
+ virtual int GetIndexAtPos(FX_FLOAT x,
+ FX_FLOAT y,
+ FX_FLOAT xTorelance,
+ FX_FLOAT yTorelance) const = 0;
- virtual void GetRectArray(int start, int nCount, CFX_RectArray& rectArray) const = 0;
+ virtual CFX_WideString GetTextByRect(const CFX_FloatRect& rect) const = 0;
+ virtual void GetRectsArrayByRect(const CFX_FloatRect& rect,
+ CFX_RectArray& resRectArray) const = 0;
+ virtual int CountRects(int start, int nCount) = 0;
- virtual int GetIndexAtPos(CPDF_Point point, FX_FLOAT xTorelance, FX_FLOAT yTorelance) const = 0;
+ virtual void GetRect(int rectIndex,
+ FX_FLOAT& left,
+ FX_FLOAT& top,
+ FX_FLOAT& right,
+ FX_FLOAT& bottom) const = 0;
- virtual int GetIndexAtPos(FX_FLOAT x, FX_FLOAT y, FX_FLOAT xTorelance, FX_FLOAT yTorelance) const = 0;
+ virtual FX_BOOL GetBaselineRotate(int rectIndex, int& Rotate) = 0;
- virtual CFX_WideString GetTextByRect(const CFX_FloatRect& rect) const = 0;
+ virtual FX_BOOL GetBaselineRotate(const CFX_FloatRect& rect, int& Rotate) = 0;
- virtual void GetRectsArrayByRect(const CFX_FloatRect& rect, CFX_RectArray& resRectArray) const = 0;
+ virtual int CountBoundedSegments(FX_FLOAT left,
+ FX_FLOAT top,
+ FX_FLOAT right,
+ FX_FLOAT bottom,
+ FX_BOOL bContains = FALSE) = 0;
+ virtual void GetBoundedSegment(int index, int& start, int& count) const = 0;
- virtual int CountRects(int start, int nCount) = 0;
+ virtual int GetWordBreak(int index, int direction) const = 0;
- virtual void GetRect(int rectIndex, FX_FLOAT& left, FX_FLOAT& top, FX_FLOAT& right, FX_FLOAT &bottom) const = 0;
-
- virtual FX_BOOL GetBaselineRotate(int rectIndex, int& Rotate) = 0;
-
- virtual FX_BOOL GetBaselineRotate(const CFX_FloatRect& rect, int& Rotate) = 0;
-
- virtual int CountBoundedSegments(FX_FLOAT left, FX_FLOAT top, FX_FLOAT right, FX_FLOAT bottom, FX_BOOL bContains = FALSE) = 0;
-
- virtual void GetBoundedSegment(int index, int& start, int& count) const = 0;
-
-
- virtual int GetWordBreak(int index, int direction) const = 0;
-
- virtual CFX_WideString GetPageText(int start = 0, int nCount = -1 ) const = 0;
+ virtual CFX_WideString GetPageText(int start = 0, int nCount = -1) const = 0;
};
-#define FPDFTEXT_MATCHCASE 0x00000001
+#define FPDFTEXT_MATCHCASE 0x00000001
#define FPDFTEXT_MATCHWHOLEWORD 0x00000002
-#define FPDFTEXT_CONSECUTIVE 0x00000004
-class IPDF_TextPageFind
-{
-public:
+#define FPDFTEXT_CONSECUTIVE 0x00000004
+class IPDF_TextPageFind {
+ public:
+ virtual ~IPDF_TextPageFind() {}
- virtual ~IPDF_TextPageFind() {}
+ static IPDF_TextPageFind* CreatePageFind(const IPDF_TextPage* pTextPage);
- static IPDF_TextPageFind* CreatePageFind(const IPDF_TextPage* pTextPage);
-public:
+ public:
+ virtual FX_BOOL FindFirst(const CFX_WideString& findwhat,
+ int flags,
+ int startPos = 0) = 0;
- virtual FX_BOOL FindFirst(const CFX_WideString& findwhat, int flags, int startPos = 0) = 0;
+ virtual FX_BOOL FindNext() = 0;
- virtual FX_BOOL FindNext() = 0;
+ virtual FX_BOOL FindPrev() = 0;
- virtual FX_BOOL FindPrev() = 0;
+ virtual void GetRectArray(CFX_RectArray& rects) const = 0;
- virtual void GetRectArray(CFX_RectArray& rects) const = 0;
+ virtual int GetCurOrder() const = 0;
- virtual int GetCurOrder() const = 0;
-
- virtual int GetMatchedCount() const = 0;
+ virtual int GetMatchedCount() const = 0;
};
-class IPDF_LinkExtract
-{
-public:
-
- virtual ~IPDF_LinkExtract() {}
+class IPDF_LinkExtract {
+ public:
+ virtual ~IPDF_LinkExtract() {}
- static IPDF_LinkExtract* CreateLinkExtract();
+ static IPDF_LinkExtract* CreateLinkExtract();
- virtual FX_BOOL ExtractLinks(const IPDF_TextPage* pTextPage) = 0;
-public:
+ virtual FX_BOOL ExtractLinks(const IPDF_TextPage* pTextPage) = 0;
- virtual int CountLinks() const = 0;
+ public:
+ virtual int CountLinks() const = 0;
- virtual CFX_WideString GetURL(int index) const = 0;
+ virtual CFX_WideString GetURL(int index) const = 0;
- virtual void GetBoundedSegment(int index, int& start, int& count) const = 0;
+ virtual void GetBoundedSegment(int index, int& start, int& count) const = 0;
- virtual void GetRects(int index, CFX_RectArray& rects) const = 0;
+ virtual void GetRects(int index, CFX_RectArray& rects) const = 0;
};
#endif // CORE_INCLUDE_FPDFTEXT_FPDF_TEXT_H_
diff --git a/core/include/fxcodec/fx_codec.h b/core/include/fxcodec/fx_codec.h
index e3d69e5dc9..39fd764ea9 100644
--- a/core/include/fxcodec/fx_codec.h
+++ b/core/include/fxcodec/fx_codec.h
@@ -24,233 +24,331 @@ class ICodec_FlateModule;
class ICodec_Jbig2Encoder;
class ICodec_ScanlineDecoder;
-class CCodec_ModuleMgr
-{
-public:
- CCodec_ModuleMgr();
- ICodec_Jbig2Encoder* CreateJbig2Encoder();
- ICodec_BasicModule* GetBasicModule() const { return m_pBasicModule.get(); }
- ICodec_FaxModule* GetFaxModule() const { return m_pFaxModule.get(); }
- ICodec_JpegModule* GetJpegModule() const { return m_pJpegModule.get(); }
- ICodec_JpxModule* GetJpxModule() const { return m_pJpxModule.get(); }
- ICodec_Jbig2Module* GetJbig2Module() const { return m_pJbig2Module.get(); }
- ICodec_IccModule* GetIccModule() const { return m_pIccModule.get(); }
- ICodec_FlateModule* GetFlateModule() const { return m_pFlateModule.get(); }
-
-protected:
- nonstd::unique_ptr<ICodec_BasicModule> m_pBasicModule;
- nonstd::unique_ptr<ICodec_FaxModule> m_pFaxModule;
- nonstd::unique_ptr<ICodec_JpegModule> m_pJpegModule;
- nonstd::unique_ptr<ICodec_JpxModule> m_pJpxModule;
- nonstd::unique_ptr<ICodec_Jbig2Module> m_pJbig2Module;
- nonstd::unique_ptr<ICodec_IccModule> m_pIccModule;
- nonstd::unique_ptr<ICodec_FlateModule> m_pFlateModule;
+class CCodec_ModuleMgr {
+ public:
+ CCodec_ModuleMgr();
+ ICodec_Jbig2Encoder* CreateJbig2Encoder();
+ ICodec_BasicModule* GetBasicModule() const { return m_pBasicModule.get(); }
+ ICodec_FaxModule* GetFaxModule() const { return m_pFaxModule.get(); }
+ ICodec_JpegModule* GetJpegModule() const { return m_pJpegModule.get(); }
+ ICodec_JpxModule* GetJpxModule() const { return m_pJpxModule.get(); }
+ ICodec_Jbig2Module* GetJbig2Module() const { return m_pJbig2Module.get(); }
+ ICodec_IccModule* GetIccModule() const { return m_pIccModule.get(); }
+ ICodec_FlateModule* GetFlateModule() const { return m_pFlateModule.get(); }
+
+ protected:
+ nonstd::unique_ptr<ICodec_BasicModule> m_pBasicModule;
+ nonstd::unique_ptr<ICodec_FaxModule> m_pFaxModule;
+ nonstd::unique_ptr<ICodec_JpegModule> m_pJpegModule;
+ nonstd::unique_ptr<ICodec_JpxModule> m_pJpxModule;
+ nonstd::unique_ptr<ICodec_Jbig2Module> m_pJbig2Module;
+ nonstd::unique_ptr<ICodec_IccModule> m_pIccModule;
+ nonstd::unique_ptr<ICodec_FlateModule> m_pFlateModule;
};
-class ICodec_BasicModule
-{
-public:
-
- virtual ~ICodec_BasicModule() {}
- virtual FX_BOOL RunLengthEncode(const uint8_t* src_buf, FX_DWORD src_size, uint8_t*& dest_buf,
- FX_DWORD& dest_size) = 0;
- virtual FX_BOOL A85Encode(const uint8_t* src_buf, FX_DWORD src_size, uint8_t*& dest_buf,
- FX_DWORD& dest_size) = 0;
- virtual ICodec_ScanlineDecoder* CreateRunLengthDecoder(const uint8_t* src_buf, FX_DWORD src_size, int width, int height,
- int nComps, int bpc) = 0;
+class ICodec_BasicModule {
+ public:
+ virtual ~ICodec_BasicModule() {}
+ virtual FX_BOOL RunLengthEncode(const uint8_t* src_buf,
+ FX_DWORD src_size,
+ uint8_t*& dest_buf,
+ FX_DWORD& dest_size) = 0;
+ virtual FX_BOOL A85Encode(const uint8_t* src_buf,
+ FX_DWORD src_size,
+ uint8_t*& dest_buf,
+ FX_DWORD& dest_size) = 0;
+ virtual ICodec_ScanlineDecoder* CreateRunLengthDecoder(const uint8_t* src_buf,
+ FX_DWORD src_size,
+ int width,
+ int height,
+ int nComps,
+ int bpc) = 0;
};
-class ICodec_ScanlineDecoder
-{
-public:
-
- virtual ~ICodec_ScanlineDecoder() {}
+class ICodec_ScanlineDecoder {
+ public:
+ virtual ~ICodec_ScanlineDecoder() {}
- virtual FX_DWORD GetSrcOffset() = 0;
+ virtual FX_DWORD GetSrcOffset() = 0;
- virtual void DownScale(int dest_width, int dest_height) = 0;
+ virtual void DownScale(int dest_width, int dest_height) = 0;
- virtual uint8_t* GetScanline(int line) = 0;
+ virtual uint8_t* GetScanline(int line) = 0;
- virtual FX_BOOL SkipToScanline(int line, IFX_Pause* pPause) = 0;
+ virtual FX_BOOL SkipToScanline(int line, IFX_Pause* pPause) = 0;
- virtual int GetWidth() = 0;
+ virtual int GetWidth() = 0;
- virtual int GetHeight() = 0;
+ virtual int GetHeight() = 0;
- virtual int CountComps() = 0;
+ virtual int CountComps() = 0;
- virtual int GetBPC() = 0;
+ virtual int GetBPC() = 0;
- virtual FX_BOOL IsColorTransformed() = 0;
+ virtual FX_BOOL IsColorTransformed() = 0;
- virtual void ClearImageData() = 0;
+ virtual void ClearImageData() = 0;
};
-class ICodec_FlateModule
-{
-public:
-
- virtual ~ICodec_FlateModule() {}
- virtual ICodec_ScanlineDecoder* CreateDecoder(const uint8_t* src_buf, FX_DWORD src_size, int width, int height,
- int nComps, int bpc, int predictor, int Colors, int BitsPerComponent, int Columns) = 0;
- virtual FX_DWORD FlateOrLZWDecode(FX_BOOL bLZW, const uint8_t* src_buf, FX_DWORD src_size, FX_BOOL bEarlyChange,
- int predictor, int Colors, int BitsPerComponent, int Columns,
- FX_DWORD estimated_size, uint8_t*& dest_buf, FX_DWORD& dest_size) = 0;
- virtual FX_BOOL Encode(const uint8_t* src_buf, FX_DWORD src_size,
- int predictor, int Colors, int BitsPerComponent, int Columns,
- uint8_t*& dest_buf, FX_DWORD& dest_size) = 0;
- virtual FX_BOOL Encode(const uint8_t* src_buf, FX_DWORD src_size, uint8_t*& dest_buf, FX_DWORD& dest_size) = 0;
+class ICodec_FlateModule {
+ public:
+ virtual ~ICodec_FlateModule() {}
+ virtual ICodec_ScanlineDecoder* CreateDecoder(const uint8_t* src_buf,
+ FX_DWORD src_size,
+ int width,
+ int height,
+ int nComps,
+ int bpc,
+ int predictor,
+ int Colors,
+ int BitsPerComponent,
+ int Columns) = 0;
+ virtual FX_DWORD FlateOrLZWDecode(FX_BOOL bLZW,
+ const uint8_t* src_buf,
+ FX_DWORD src_size,
+ FX_BOOL bEarlyChange,
+ int predictor,
+ int Colors,
+ int BitsPerComponent,
+ int Columns,
+ FX_DWORD estimated_size,
+ uint8_t*& dest_buf,
+ FX_DWORD& dest_size) = 0;
+ virtual FX_BOOL Encode(const uint8_t* src_buf,
+ FX_DWORD src_size,
+ int predictor,
+ int Colors,
+ int BitsPerComponent,
+ int Columns,
+ uint8_t*& dest_buf,
+ FX_DWORD& dest_size) = 0;
+ virtual FX_BOOL Encode(const uint8_t* src_buf,
+ FX_DWORD src_size,
+ uint8_t*& dest_buf,
+ FX_DWORD& dest_size) = 0;
};
-class ICodec_FaxModule
-{
-public:
-
- virtual ~ICodec_FaxModule() {}
-
- virtual ICodec_ScanlineDecoder* CreateDecoder(const uint8_t* src_buf, FX_DWORD src_size, int width, int height,
- int K, FX_BOOL EndOfLine, FX_BOOL EncodedByteAlign, FX_BOOL BlackIs1, int Columns, int Rows) = 0;
-
-
- virtual FX_BOOL Encode(const uint8_t* src_buf, int width, int height, int pitch,
- uint8_t*& dest_buf, FX_DWORD& dest_size) = 0;
+class ICodec_FaxModule {
+ public:
+ virtual ~ICodec_FaxModule() {}
+
+ virtual ICodec_ScanlineDecoder* CreateDecoder(const uint8_t* src_buf,
+ FX_DWORD src_size,
+ int width,
+ int height,
+ int K,
+ FX_BOOL EndOfLine,
+ FX_BOOL EncodedByteAlign,
+ FX_BOOL BlackIs1,
+ int Columns,
+ int Rows) = 0;
+
+ virtual FX_BOOL Encode(const uint8_t* src_buf,
+ int width,
+ int height,
+ int pitch,
+ uint8_t*& dest_buf,
+ FX_DWORD& dest_size) = 0;
};
-class ICodec_JpegModule
-{
-public:
-
- virtual ~ICodec_JpegModule() {}
-
- virtual void SetPovider(IFX_JpegProvider* pJP) = 0;
-
- virtual ICodec_ScanlineDecoder* CreateDecoder(const uint8_t* src_buf, FX_DWORD src_size,
- int width, int height, int nComps, FX_BOOL ColorTransform) = 0;
-
- virtual FX_BOOL LoadInfo(const uint8_t* src_buf, FX_DWORD src_size, int& width, int& height,
- int& num_components, int& bits_per_components, FX_BOOL& color_transform,
- uint8_t** icc_buf_ptr = NULL, FX_DWORD* icc_length = NULL) = 0;
-
- virtual FX_BOOL Encode(const class CFX_DIBSource* pSource, uint8_t*& dest_buf, FX_STRSIZE& dest_size, int quality = 75,
- const uint8_t* icc_buf = NULL, FX_DWORD icc_length = 0) = 0;
-
- virtual void* Start() = 0;
-
- virtual void Finish(void* pContext) = 0;
-
- virtual void Input(void* pContext, const uint8_t* src_buf, FX_DWORD src_size) = 0;
-
- virtual int ReadHeader(void* pContext, int* width, int* height, int* nComps) = 0;
-
-
- virtual int StartScanline(void* pContext, int down_scale) = 0;
-
-
- virtual FX_BOOL ReadScanline(void* pContext, uint8_t* dest_buf) = 0;
-
-
- virtual FX_DWORD GetAvailInput(void* pContext, uint8_t** avail_buf_ptr = NULL) = 0;
+class ICodec_JpegModule {
+ public:
+ virtual ~ICodec_JpegModule() {}
+
+ virtual void SetPovider(IFX_JpegProvider* pJP) = 0;
+
+ virtual ICodec_ScanlineDecoder* CreateDecoder(const uint8_t* src_buf,
+ FX_DWORD src_size,
+ int width,
+ int height,
+ int nComps,
+ FX_BOOL ColorTransform) = 0;
+
+ virtual FX_BOOL LoadInfo(const uint8_t* src_buf,
+ FX_DWORD src_size,
+ int& width,
+ int& height,
+ int& num_components,
+ int& bits_per_components,
+ FX_BOOL& color_transform,
+ uint8_t** icc_buf_ptr = NULL,
+ FX_DWORD* icc_length = NULL) = 0;
+
+ virtual FX_BOOL Encode(const class CFX_DIBSource* pSource,
+ uint8_t*& dest_buf,
+ FX_STRSIZE& dest_size,
+ int quality = 75,
+ const uint8_t* icc_buf = NULL,
+ FX_DWORD icc_length = 0) = 0;
+
+ virtual void* Start() = 0;
+
+ virtual void Finish(void* pContext) = 0;
+
+ virtual void Input(void* pContext,
+ const uint8_t* src_buf,
+ FX_DWORD src_size) = 0;
+
+ virtual int ReadHeader(void* pContext,
+ int* width,
+ int* height,
+ int* nComps) = 0;
+
+ virtual int StartScanline(void* pContext, int down_scale) = 0;
+
+ virtual FX_BOOL ReadScanline(void* pContext, uint8_t* dest_buf) = 0;
+
+ virtual FX_DWORD GetAvailInput(void* pContext,
+ uint8_t** avail_buf_ptr = NULL) = 0;
};
-class ICodec_JpxModule
-{
-public:
-
- virtual ~ICodec_JpxModule() {}
-
- virtual void* CreateDecoder(const uint8_t* src_buf, FX_DWORD src_size, FX_BOOL useColorSpace = FALSE) = 0;
-
- virtual void GetImageInfo(void* ctx, FX_DWORD& width, FX_DWORD& height,
- FX_DWORD& codestream_nComps, FX_DWORD& output_nComps) = 0;
-
- virtual FX_BOOL Decode(void* ctx, uint8_t* dest_data, int pitch,
- FX_BOOL bTranslateColor, uint8_t* offsets) = 0;
-
- virtual void DestroyDecoder(void* ctx) = 0;
+class ICodec_JpxModule {
+ public:
+ virtual ~ICodec_JpxModule() {}
+
+ virtual void* CreateDecoder(const uint8_t* src_buf,
+ FX_DWORD src_size,
+ FX_BOOL useColorSpace = FALSE) = 0;
+
+ virtual void GetImageInfo(void* ctx,
+ FX_DWORD& width,
+ FX_DWORD& height,
+ FX_DWORD& codestream_nComps,
+ FX_DWORD& output_nComps) = 0;
+
+ virtual FX_BOOL Decode(void* ctx,
+ uint8_t* dest_data,
+ int pitch,
+ FX_BOOL bTranslateColor,
+ uint8_t* offsets) = 0;
+
+ virtual void DestroyDecoder(void* ctx) = 0;
};
-class ICodec_Jbig2Module
-{
-public:
-
- virtual ~ICodec_Jbig2Module() {}
-
- virtual FX_BOOL Decode(FX_DWORD width, FX_DWORD height, const uint8_t* src_buf, FX_DWORD src_size,
- const uint8_t* global_data, FX_DWORD global_size, uint8_t* dest_buf, FX_DWORD dest_pitch) = 0;
-
- virtual FX_BOOL Decode(IFX_FileRead* file_ptr, FX_DWORD& width, FX_DWORD& height,
- FX_DWORD& pitch, uint8_t*& dest_buf) = 0;
- virtual void* CreateJbig2Context() = 0;
-
- virtual FXCODEC_STATUS StartDecode(void* pJbig2Context, FX_DWORD width, FX_DWORD height, const uint8_t* src_buf, FX_DWORD src_size,
- const uint8_t* global_data, FX_DWORD global_size, uint8_t* dest_buf, FX_DWORD dest_pitch, IFX_Pause* pPause) = 0;
-
- virtual FXCODEC_STATUS StartDecode(void* pJbig2Context, IFX_FileRead* file_ptr,
- FX_DWORD& width, FX_DWORD& height, FX_DWORD& pitch, uint8_t*& dest_buf, IFX_Pause* pPause) = 0;
- virtual FXCODEC_STATUS ContinueDecode(void* pJbig2Content, IFX_Pause* pPause) = 0;
- virtual void DestroyJbig2Context(void* pJbig2Content) = 0;
+class ICodec_Jbig2Module {
+ public:
+ virtual ~ICodec_Jbig2Module() {}
+
+ virtual FX_BOOL Decode(FX_DWORD width,
+ FX_DWORD height,
+ const uint8_t* src_buf,
+ FX_DWORD src_size,
+ const uint8_t* global_data,
+ FX_DWORD global_size,
+ uint8_t* dest_buf,
+ FX_DWORD dest_pitch) = 0;
+
+ virtual FX_BOOL Decode(IFX_FileRead* file_ptr,
+ FX_DWORD& width,
+ FX_DWORD& height,
+ FX_DWORD& pitch,
+ uint8_t*& dest_buf) = 0;
+ virtual void* CreateJbig2Context() = 0;
+
+ virtual FXCODEC_STATUS StartDecode(void* pJbig2Context,
+ FX_DWORD width,
+ FX_DWORD height,
+ const uint8_t* src_buf,
+ FX_DWORD src_size,
+ const uint8_t* global_data,
+ FX_DWORD global_size,
+ uint8_t* dest_buf,
+ FX_DWORD dest_pitch,
+ IFX_Pause* pPause) = 0;
+
+ virtual FXCODEC_STATUS StartDecode(void* pJbig2Context,
+ IFX_FileRead* file_ptr,
+ FX_DWORD& width,
+ FX_DWORD& height,
+ FX_DWORD& pitch,
+ uint8_t*& dest_buf,
+ IFX_Pause* pPause) = 0;
+ virtual FXCODEC_STATUS ContinueDecode(void* pJbig2Content,
+ IFX_Pause* pPause) = 0;
+ virtual void DestroyJbig2Context(void* pJbig2Content) = 0;
};
-class ICodec_Jbig2Encoder
-{
-public:
-
- virtual ~ICodec_Jbig2Encoder() {}
+class ICodec_Jbig2Encoder {
+ public:
+ virtual ~ICodec_Jbig2Encoder() {}
};
-class ICodec_IccModule
-{
-public:
- typedef enum {
- IccCS_Unknown = 0,
- IccCS_XYZ,
- IccCS_Lab,
- IccCS_Luv,
- IccCS_YCbCr,
- IccCS_Yxy,
- IccCS_Hsv,
- IccCS_Hls,
- IccCS_Gray,
- IccCS_Rgb,
- IccCS_Cmyk,
- IccCS_Cmy
- } IccCS;
- typedef struct _IccParam {
- FX_DWORD Version;
- IccCS ColorSpace;
- FX_DWORD dwProfileType;
- FX_DWORD dwFormat;
- uint8_t* pProfileData;
- FX_DWORD dwProfileSize;
- double Gamma;
- } IccParam;
-
- virtual ~ICodec_IccModule() {}
-
- virtual IccCS GetProfileCS(const uint8_t* pProfileData, unsigned int dwProfileSize) = 0;
-
- virtual IccCS GetProfileCS(IFX_FileRead* pFile) = 0;
-
- virtual void* CreateTransform(ICodec_IccModule::IccParam* pInputParam,
- ICodec_IccModule::IccParam* pOutputParam,
- ICodec_IccModule::IccParam* pProofParam = NULL,
- FX_DWORD dwIntent = Icc_INTENT_PERCEPTUAL,
- FX_DWORD dwFlag = Icc_FLAGS_DEFAULT,
- FX_DWORD dwPrfIntent = Icc_INTENT_ABSOLUTE_COLORIMETRIC,
- FX_DWORD dwPrfFlag = Icc_FLAGS_SOFTPROOFING
- ) = 0;
-
-
- virtual void* CreateTransform_sRGB(const uint8_t* pProfileData, FX_DWORD dwProfileSize, int32_t& nComponents, int32_t intent = 0,
- FX_DWORD dwSrcFormat = Icc_FORMAT_DEFAULT) = 0;
-
- virtual void* CreateTransform_CMYK(const uint8_t* pSrcProfileData, FX_DWORD dwSrcProfileSize, int32_t& nSrcComponents,
- const uint8_t* pDstProfileData, FX_DWORD dwDstProfileSize, int32_t intent = 0,
- FX_DWORD dwSrcFormat = Icc_FORMAT_DEFAULT,
- FX_DWORD dwDstFormat = Icc_FORMAT_DEFAULT
- ) = 0;
-
- virtual void DestroyTransform(void* pTransform) = 0;
-
- virtual void Translate(void* pTransform, FX_FLOAT* pSrcValues, FX_FLOAT* pDestValues) = 0;
-
- virtual void TranslateScanline(void* pTransform, uint8_t* pDest, const uint8_t* pSrc, int pixels) = 0;
- virtual void SetComponents(FX_DWORD nComponents) = 0;
+class ICodec_IccModule {
+ public:
+ typedef enum {
+ IccCS_Unknown = 0,
+ IccCS_XYZ,
+ IccCS_Lab,
+ IccCS_Luv,
+ IccCS_YCbCr,
+ IccCS_Yxy,
+ IccCS_Hsv,
+ IccCS_Hls,
+ IccCS_Gray,
+ IccCS_Rgb,
+ IccCS_Cmyk,
+ IccCS_Cmy
+ } IccCS;
+ typedef struct _IccParam {
+ FX_DWORD Version;
+ IccCS ColorSpace;
+ FX_DWORD dwProfileType;
+ FX_DWORD dwFormat;
+ uint8_t* pProfileData;
+ FX_DWORD dwProfileSize;
+ double Gamma;
+ } IccParam;
+
+ virtual ~ICodec_IccModule() {}
+
+ virtual IccCS GetProfileCS(const uint8_t* pProfileData,
+ unsigned int dwProfileSize) = 0;
+
+ virtual IccCS GetProfileCS(IFX_FileRead* pFile) = 0;
+
+ virtual void* CreateTransform(
+ ICodec_IccModule::IccParam* pInputParam,
+ ICodec_IccModule::IccParam* pOutputParam,
+ ICodec_IccModule::IccParam* pProofParam = NULL,
+ FX_DWORD dwIntent = Icc_INTENT_PERCEPTUAL,
+ FX_DWORD dwFlag = Icc_FLAGS_DEFAULT,
+ FX_DWORD dwPrfIntent = Icc_INTENT_ABSOLUTE_COLORIMETRIC,
+ FX_DWORD dwPrfFlag = Icc_FLAGS_SOFTPROOFING) = 0;
+
+ virtual void* CreateTransform_sRGB(
+ const uint8_t* pProfileData,
+ FX_DWORD dwProfileSize,
+ int32_t& nComponents,
+ int32_t intent = 0,
+ FX_DWORD dwSrcFormat = Icc_FORMAT_DEFAULT) = 0;
+
+ virtual void* CreateTransform_CMYK(
+ const uint8_t* pSrcProfileData,
+ FX_DWORD dwSrcProfileSize,
+ int32_t& nSrcComponents,
+ const uint8_t* pDstProfileData,
+ FX_DWORD dwDstProfileSize,
+ int32_t intent = 0,
+ FX_DWORD dwSrcFormat = Icc_FORMAT_DEFAULT,
+ FX_DWORD dwDstFormat = Icc_FORMAT_DEFAULT) = 0;
+
+ virtual void DestroyTransform(void* pTransform) = 0;
+
+ virtual void Translate(void* pTransform,
+ FX_FLOAT* pSrcValues,
+ FX_FLOAT* pDestValues) = 0;
+
+ virtual void TranslateScanline(void* pTransform,
+ uint8_t* pDest,
+ const uint8_t* pSrc,
+ int pixels) = 0;
+ virtual void SetComponents(FX_DWORD nComponents) = 0;
};
-void AdobeCMYK_to_sRGB(FX_FLOAT c, FX_FLOAT m, FX_FLOAT y, FX_FLOAT k, FX_FLOAT& R, FX_FLOAT& G, FX_FLOAT& B);
-void AdobeCMYK_to_sRGB1(uint8_t c, uint8_t m, uint8_t y, uint8_t k, uint8_t& R, uint8_t& G, uint8_t& B);
+void AdobeCMYK_to_sRGB(FX_FLOAT c,
+ FX_FLOAT m,
+ FX_FLOAT y,
+ FX_FLOAT k,
+ FX_FLOAT& R,
+ FX_FLOAT& G,
+ FX_FLOAT& B);
+void AdobeCMYK_to_sRGB1(uint8_t c,
+ uint8_t m,
+ uint8_t y,
+ uint8_t k,
+ uint8_t& R,
+ uint8_t& G,
+ uint8_t& B);
FX_BOOL MD5ComputeID(const void* buf, FX_DWORD dwSize, uint8_t ID[16]);
#endif // CORE_INCLUDE_FXCODEC_FX_CODEC_H_
diff --git a/core/include/fxcodec/fx_codec_def.h b/core/include/fxcodec/fx_codec_def.h
index a20fab2b8a..1e4ffa21d0 100644
--- a/core/include/fxcodec/fx_codec_def.h
+++ b/core/include/fxcodec/fx_codec_def.h
@@ -8,65 +8,65 @@
#define CORE_INCLUDE_FXCODEC_FX_CODEC_DEF_H_
enum FXCODEC_STATUS {
- FXCODEC_STATUS_ERROR = -1,
- FXCODEC_STATUS_FRAME_READY,
- FXCODEC_STATUS_FRAME_TOBECONTINUE,
- FXCODEC_STATUS_DECODE_READY,
- FXCODEC_STATUS_DECODE_TOBECONTINUE,
- FXCODEC_STATUS_DECODE_FINISH,
- FXCODEC_STATUS_ERR_READ,
- FXCODEC_STATUS_ERR_FLUSH,
- FXCODEC_STATUS_ERR_FORMAT,
- FXCODEC_STATUS_ERR_PARAMS
+ FXCODEC_STATUS_ERROR = -1,
+ FXCODEC_STATUS_FRAME_READY,
+ FXCODEC_STATUS_FRAME_TOBECONTINUE,
+ FXCODEC_STATUS_DECODE_READY,
+ FXCODEC_STATUS_DECODE_TOBECONTINUE,
+ FXCODEC_STATUS_DECODE_FINISH,
+ FXCODEC_STATUS_ERR_READ,
+ FXCODEC_STATUS_ERR_FLUSH,
+ FXCODEC_STATUS_ERR_FORMAT,
+ FXCODEC_STATUS_ERR_PARAMS
};
-#define JP2_SPACE_INVALID -1
-#define JPX_SPACE_INVALID -1
-#define JP2_SPACE_bilevel1 0
-#define JP2_SPACE_YCbCr1 1
-#define JP2_SPACE_YCbCr2 3
-#define JP2_SPACE_YCbCr3 4
-#define JP2_SPACE_PhotoYCC 9
-#define JP2_SPACE_CMY 11
-#define JP2_SPACE_CMYK 12
-#define JP2_SPACE_YCCK 13
-#define JP2_SPACE_CIELab 14
-#define JP2_SPACE_bilevel2 15
-#define JP2_SPACE_sRGB 16
-#define JP2_SPACE_sLUM 17
-#define JP2_SPACE_sYCC 18
-#define JP2_SPACE_CIEJab 19
-#define JP2_SPACE_esRGB 20
-#define JP2_SPACE_ROMMRGB 21
-#define JP2_SPACE_YPbPr60 22
-#define JP2_SPACE_YPbPr50 23
-#define JP2_SPACE_esYCC 24
-#define JP2_SPACE_iccLUM 100
-#define JP2_SPACE_iccRGB 101
-#define Icc_INTENT_PERCEPTUAL 0
-#define Icc_INTENT_RELATIVE_COLORIMETRIC 1
-#define Icc_INTENT_SATURATION 2
-#define Icc_INTENT_ABSOLUTE_COLORIMETRIC 3
-#define Icc_FORMAT_DEFAULT 0
-#define Icc_FORMAT_SWAP (1<<10)
-#define Icc_FLAGS_DEFAULT 0x0000
-#define Icc_FLAGS_BLACKPOINTCOMPENSATION 0x2000
-#define Icc_FLAGS_NOWHITEONWHITEFIXUP 0x0004
-#define Icc_FLAGS_HIGHRESPRECALC 0x0400
-#define Icc_FLAGS_LOWRESPRECALC 0x0800
-#define Icc_FLAGS_GAMUTCHECK 0x1000
-#define Icc_FLAGS_SOFTPROOFING 0x4000
-#define Icc_PARAMTYPE_NONE 0
-#define Icc_PARAMTYPE_BUFFER 1
-#define Icc_PARAMTYPE_PARAM 2
-#define EXIFTAG_USHORT_RESUNIT 296
-#define EXIFTAG_FLOAT_DPIX 282
-#define EXIFTAG_FLOAT_DPIY 283
-#define EXIFTAG_USHORT_ORIENTATION 274
-#define EXIFTAG_STRING_MANUFACTURER 271
-#define EXIFTAG_STRING_MODULE 272
-#define EXIFTAG_STRING_SOFTWARE 305
-#define EXIFTAG_STRING_IAMGEDESCRIPTION 270
-#define EXIFTAG_STRING_DATETIME 306
-#define EXIFTAG_STRING_COPYRIGHT 33432
+#define JP2_SPACE_INVALID -1
+#define JPX_SPACE_INVALID -1
+#define JP2_SPACE_bilevel1 0
+#define JP2_SPACE_YCbCr1 1
+#define JP2_SPACE_YCbCr2 3
+#define JP2_SPACE_YCbCr3 4
+#define JP2_SPACE_PhotoYCC 9
+#define JP2_SPACE_CMY 11
+#define JP2_SPACE_CMYK 12
+#define JP2_SPACE_YCCK 13
+#define JP2_SPACE_CIELab 14
+#define JP2_SPACE_bilevel2 15
+#define JP2_SPACE_sRGB 16
+#define JP2_SPACE_sLUM 17
+#define JP2_SPACE_sYCC 18
+#define JP2_SPACE_CIEJab 19
+#define JP2_SPACE_esRGB 20
+#define JP2_SPACE_ROMMRGB 21
+#define JP2_SPACE_YPbPr60 22
+#define JP2_SPACE_YPbPr50 23
+#define JP2_SPACE_esYCC 24
+#define JP2_SPACE_iccLUM 100
+#define JP2_SPACE_iccRGB 101
+#define Icc_INTENT_PERCEPTUAL 0
+#define Icc_INTENT_RELATIVE_COLORIMETRIC 1
+#define Icc_INTENT_SATURATION 2
+#define Icc_INTENT_ABSOLUTE_COLORIMETRIC 3
+#define Icc_FORMAT_DEFAULT 0
+#define Icc_FORMAT_SWAP (1 << 10)
+#define Icc_FLAGS_DEFAULT 0x0000
+#define Icc_FLAGS_BLACKPOINTCOMPENSATION 0x2000
+#define Icc_FLAGS_NOWHITEONWHITEFIXUP 0x0004
+#define Icc_FLAGS_HIGHRESPRECALC 0x0400
+#define Icc_FLAGS_LOWRESPRECALC 0x0800
+#define Icc_FLAGS_GAMUTCHECK 0x1000
+#define Icc_FLAGS_SOFTPROOFING 0x4000
+#define Icc_PARAMTYPE_NONE 0
+#define Icc_PARAMTYPE_BUFFER 1
+#define Icc_PARAMTYPE_PARAM 2
+#define EXIFTAG_USHORT_RESUNIT 296
+#define EXIFTAG_FLOAT_DPIX 282
+#define EXIFTAG_FLOAT_DPIY 283
+#define EXIFTAG_USHORT_ORIENTATION 274
+#define EXIFTAG_STRING_MANUFACTURER 271
+#define EXIFTAG_STRING_MODULE 272
+#define EXIFTAG_STRING_SOFTWARE 305
+#define EXIFTAG_STRING_IAMGEDESCRIPTION 270
+#define EXIFTAG_STRING_DATETIME 306
+#define EXIFTAG_STRING_COPYRIGHT 33432
#endif // CORE_INCLUDE_FXCODEC_FX_CODEC_DEF_H_
diff --git a/core/include/fxcodec/fx_codec_flate.h b/core/include/fxcodec/fx_codec_flate.h
index 8495a37496..7d0106139e 100644
--- a/core/include/fxcodec/fx_codec_flate.h
+++ b/core/include/fxcodec/fx_codec_flate.h
@@ -13,9 +13,11 @@ extern "C" {
// Note: Some of these return Z_* status codes from zlib.h.
void* FPDFAPI_FlateInit(void* (*alloc_func)(void*, unsigned int, unsigned int),
void (*free_func)(void*, void*));
-void FPDFAPI_FlateInput(void* context, const unsigned char* src_buf,
+void FPDFAPI_FlateInput(void* context,
+ const unsigned char* src_buf,
unsigned int src_size);
-int FPDFAPI_FlateOutput(void* context, unsigned char* dest_buf,
+int FPDFAPI_FlateOutput(void* context,
+ unsigned char* dest_buf,
unsigned int dest_size);
int FPDFAPI_FlateGetAvailIn(void* context);
int FPDFAPI_FlateGetAvailOut(void* context);
diff --git a/core/include/fxcodec/fx_codec_provider.h b/core/include/fxcodec/fx_codec_provider.h
index 0b238b780e..9cb59651cc 100644
--- a/core/include/fxcodec/fx_codec_provider.h
+++ b/core/include/fxcodec/fx_codec_provider.h
@@ -9,51 +9,66 @@
#include "../fxcrt/fx_system.h"
-class IFX_JpegProvider
-{
-public:
- virtual void Release() = 0;
+class IFX_JpegProvider {
+ public:
+ virtual void Release() = 0;
- virtual void* CreateDecoder(const uint8_t* src_buf, FX_DWORD src_size, int width, int height, int nComps, FX_BOOL ColorTransform) = 0;
+ virtual void* CreateDecoder(const uint8_t* src_buf,
+ FX_DWORD src_size,
+ int width,
+ int height,
+ int nComps,
+ FX_BOOL ColorTransform) = 0;
+ virtual void DestroyDecoder(void* pDecoder) = 0;
- virtual void DestroyDecoder(void* pDecoder) = 0;
+ virtual void DownScale(void* pDecoder, int dest_width, int dest_height) = 0;
- virtual void DownScale(void* pDecoder, int dest_width, int dest_height) = 0;
+ virtual FX_BOOL Rewind(void* pDecoder) = 0;
- virtual FX_BOOL Rewind(void* pDecoder) = 0;
+ virtual uint8_t* GetNextLine(void* pDecoder) = 0;
- virtual uint8_t* GetNextLine(void* pDecoder) = 0;
+ virtual FX_DWORD GetSrcOffset(void* pDecoder) = 0;
- virtual FX_DWORD GetSrcOffset(void* pDecoder) = 0;
+ virtual FX_BOOL LoadInfo(const uint8_t* src_buf,
+ FX_DWORD src_size,
+ int& width,
+ int& height,
+ int& num_components,
+ int& bits_per_components,
+ FX_BOOL& color_transform,
+ uint8_t** icc_buf_ptr = NULL,
+ FX_DWORD* icc_length = NULL) = 0;
+ virtual FX_BOOL Encode(const class CFX_DIBSource* pSource,
+ uint8_t*& dest_buf,
+ FX_STRSIZE& dest_size,
+ int quality = 75,
+ const uint8_t* icc_buf = NULL,
+ FX_DWORD icc_length = 0) = 0;
- virtual FX_BOOL LoadInfo(const uint8_t* src_buf, FX_DWORD src_size, int& width, int& height,
- int& num_components, int& bits_per_components, FX_BOOL& color_transform,
- uint8_t** icc_buf_ptr = NULL, FX_DWORD* icc_length = NULL) = 0;
+ virtual void* Start() = 0;
- virtual FX_BOOL Encode(const class CFX_DIBSource* pSource, uint8_t*& dest_buf, FX_STRSIZE& dest_size, int quality = 75,
- const uint8_t* icc_buf = NULL, FX_DWORD icc_length = 0) = 0;
+ virtual void Finish(void* pContext) = 0;
- virtual void* Start() = 0;
+ virtual void Input(void* pContext,
+ const uint8_t* src_buf,
+ FX_DWORD src_size) = 0;
- virtual void Finish(void* pContext) = 0;
+ virtual int ReadHeader(void* pContext,
+ int* width,
+ int* height,
+ int* nComps) = 0;
- virtual void Input(void* pContext, const uint8_t* src_buf, FX_DWORD src_size) = 0;
+ virtual int StartScanline(void* pContext, int down_scale) = 0;
- virtual int ReadHeader(void* pContext, int* width, int* height, int* nComps) = 0;
+ virtual FX_BOOL ReadScanline(void* pContext, uint8_t* dest_buf) = 0;
+ virtual FX_DWORD GetAvailInput(void* pContext,
+ uint8_t** avail_buf_ptr = NULL) = 0;
- virtual int StartScanline(void* pContext, int down_scale) = 0;
-
-
- virtual FX_BOOL ReadScanline(void* pContext, uint8_t* dest_buf) = 0;
-
-
- virtual FX_DWORD GetAvailInput(void* pContext, uint8_t** avail_buf_ptr = NULL) = 0;
-
-protected:
- ~IFX_JpegProvider() { }
+ protected:
+ ~IFX_JpegProvider() {}
};
#endif // CORE_INCLUDE_FXCODEC_FX_CODEC_PROVIDER_H_
diff --git a/core/include/fxcrt/fx_arb.h b/core/include/fxcrt/fx_arb.h
index 7ce21e5086..0f6de64b32 100644
--- a/core/include/fxcrt/fx_arb.h
+++ b/core/include/fxcrt/fx_arb.h
@@ -9,17 +9,16 @@
#include "fx_system.h"
-class IFX_BidiChar
-{
-public:
- static IFX_BidiChar* Create();
- virtual ~IFX_BidiChar() {}
+class IFX_BidiChar {
+ public:
+ static IFX_BidiChar* Create();
+ virtual ~IFX_BidiChar() {}
- virtual void SetPolicy(FX_BOOL bSeparateNeutral = TRUE) = 0;
- virtual FX_BOOL AppendChar(FX_WCHAR wch) = 0;
- virtual FX_BOOL EndChar() = 0;
- virtual int32_t GetBidiInfo(int32_t &iStart, int32_t &iCount) = 0;
- virtual void Reset() = 0;
+ virtual void SetPolicy(FX_BOOL bSeparateNeutral = TRUE) = 0;
+ virtual FX_BOOL AppendChar(FX_WCHAR wch) = 0;
+ virtual FX_BOOL EndChar() = 0;
+ virtual int32_t GetBidiInfo(int32_t& iStart, int32_t& iCount) = 0;
+ virtual void Reset() = 0;
};
#endif // CORE_INCLUDE_FXCRT_FX_ARB_H_
diff --git a/core/include/fxcrt/fx_basic.h b/core/include/fxcrt/fx_basic.h
index 5e945e7aee..7181b19942 100644
--- a/core/include/fxcrt/fx_basic.h
+++ b/core/include/fxcrt/fx_basic.h
@@ -25,1478 +25,1262 @@
// Note that the function doesn't need an implementation, as we only
// use its type.
template <typename T, size_t N>
-char (&ArraySizeHelper(T (&array)[N]))[N];
+char(&ArraySizeHelper(T(&array)[N]))[N];
-class CFX_BinaryBuf
-{
-public:
- CFX_BinaryBuf();
- CFX_BinaryBuf(FX_STRSIZE size);
+class CFX_BinaryBuf {
+ public:
+ CFX_BinaryBuf();
+ CFX_BinaryBuf(FX_STRSIZE size);
- ~CFX_BinaryBuf();
+ ~CFX_BinaryBuf();
- void Clear();
+ void Clear();
- void EstimateSize(FX_STRSIZE size, FX_STRSIZE alloc_step = 0);
+ void EstimateSize(FX_STRSIZE size, FX_STRSIZE alloc_step = 0);
- void AppendBlock(const void* pBuf, FX_STRSIZE size);
+ void AppendBlock(const void* pBuf, FX_STRSIZE size);
- void AppendFill(uint8_t byte, FX_STRSIZE count);
+ void AppendFill(uint8_t byte, FX_STRSIZE count);
- void AppendString(const CFX_ByteStringC& str)
- {
- AppendBlock(str.GetPtr(), str.GetLength());
- }
+ void AppendString(const CFX_ByteStringC& str) {
+ AppendBlock(str.GetPtr(), str.GetLength());
+ }
- inline void AppendByte(uint8_t byte)
- {
- if (m_AllocSize <= m_DataSize) {
- ExpandBuf(1);
- }
- m_pBuffer[m_DataSize++] = byte;
+ inline void AppendByte(uint8_t byte) {
+ if (m_AllocSize <= m_DataSize) {
+ ExpandBuf(1);
}
+ m_pBuffer[m_DataSize++] = byte;
+ }
- void InsertBlock(FX_STRSIZE pos, const void* pBuf, FX_STRSIZE size);
+ void InsertBlock(FX_STRSIZE pos, const void* pBuf, FX_STRSIZE size);
- void AttachData(void* pBuf, FX_STRSIZE size);
+ void AttachData(void* pBuf, FX_STRSIZE size);
- void CopyData(const void* pBuf, FX_STRSIZE size);
+ void CopyData(const void* pBuf, FX_STRSIZE size);
- void TakeOver(CFX_BinaryBuf& other);
+ void TakeOver(CFX_BinaryBuf& other);
- void Delete(int start_index, int count);
+ void Delete(int start_index, int count);
- uint8_t* GetBuffer() const
- {
- return m_pBuffer;
- }
+ uint8_t* GetBuffer() const { return m_pBuffer; }
- FX_STRSIZE GetSize() const
- {
- return m_DataSize;
- }
+ FX_STRSIZE GetSize() const { return m_DataSize; }
- CFX_ByteStringC GetByteString() const;
+ CFX_ByteStringC GetByteString() const;
- void DetachBuffer();
-protected:
+ void DetachBuffer();
- FX_STRSIZE m_AllocStep;
+ protected:
+ FX_STRSIZE m_AllocStep;
- uint8_t* m_pBuffer;
+ uint8_t* m_pBuffer;
- FX_STRSIZE m_DataSize;
+ FX_STRSIZE m_DataSize;
- FX_STRSIZE m_AllocSize;
+ FX_STRSIZE m_AllocSize;
- void ExpandBuf(FX_STRSIZE size);
+ void ExpandBuf(FX_STRSIZE size);
};
-class CFX_ByteTextBuf : public CFX_BinaryBuf
-{
-public:
+class CFX_ByteTextBuf : public CFX_BinaryBuf {
+ public:
+ void operator=(const CFX_ByteStringC& str);
- void operator = (const CFX_ByteStringC& str);
+ void AppendChar(int ch) { AppendByte((uint8_t)ch); }
- void AppendChar(int ch)
- {
- AppendByte((uint8_t)ch);
- }
-
- CFX_ByteTextBuf& operator << (int i);
+ CFX_ByteTextBuf& operator<<(int i);
- CFX_ByteTextBuf& operator << (FX_DWORD i);
+ CFX_ByteTextBuf& operator<<(FX_DWORD i);
- CFX_ByteTextBuf& operator << (double f);
+ CFX_ByteTextBuf& operator<<(double f);
- CFX_ByteTextBuf& operator << (const CFX_ByteStringC& lpsz);
+ CFX_ByteTextBuf& operator<<(const CFX_ByteStringC& lpsz);
- CFX_ByteTextBuf& operator << (const CFX_ByteTextBuf& buf);
+ CFX_ByteTextBuf& operator<<(const CFX_ByteTextBuf& buf);
- FX_STRSIZE GetLength() const
- {
- return m_DataSize;
- }
+ FX_STRSIZE GetLength() const { return m_DataSize; }
};
-class CFX_WideTextBuf : public CFX_BinaryBuf
-{
-public:
+class CFX_WideTextBuf : public CFX_BinaryBuf {
+ public:
+ void operator=(const FX_WCHAR* lpsz);
- void operator = (const FX_WCHAR* lpsz);
+ void operator=(const CFX_WideStringC& str);
- void operator = (const CFX_WideStringC& str);
+ void AppendChar(FX_WCHAR wch);
- void AppendChar(FX_WCHAR wch);
+ CFX_WideTextBuf& operator<<(int i);
- CFX_WideTextBuf& operator << (int i);
+ CFX_WideTextBuf& operator<<(double f);
- CFX_WideTextBuf& operator << (double f);
+ CFX_WideTextBuf& operator<<(const FX_WCHAR* lpsz);
- CFX_WideTextBuf& operator << (const FX_WCHAR* lpsz);
+ CFX_WideTextBuf& operator<<(const CFX_WideStringC& str);
+ CFX_WideTextBuf& operator<<(const CFX_WideString& str);
- CFX_WideTextBuf& operator << (const CFX_WideStringC& str);
- CFX_WideTextBuf& operator << (const CFX_WideString &str);
+ CFX_WideTextBuf& operator<<(const CFX_WideTextBuf& buf);
- CFX_WideTextBuf& operator << (const CFX_WideTextBuf& buf);
+ FX_STRSIZE GetLength() const { return m_DataSize / sizeof(FX_WCHAR); }
- FX_STRSIZE GetLength() const
- {
- return m_DataSize / sizeof(FX_WCHAR);
- }
-
- FX_WCHAR* GetBuffer() const
- {
- return (FX_WCHAR*)m_pBuffer;
- }
+ FX_WCHAR* GetBuffer() const { return (FX_WCHAR*)m_pBuffer; }
- void Delete(int start_index, int count)
- {
- CFX_BinaryBuf::Delete(start_index * sizeof(FX_WCHAR), count * sizeof(FX_WCHAR));
- }
+ void Delete(int start_index, int count) {
+ CFX_BinaryBuf::Delete(start_index * sizeof(FX_WCHAR),
+ count * sizeof(FX_WCHAR));
+ }
- CFX_WideStringC GetWideString() const;
+ CFX_WideStringC GetWideString() const;
};
-class IFX_BufferArchive
-{
-public:
- IFX_BufferArchive(FX_STRSIZE size);
- virtual ~IFX_BufferArchive() {}
-
- virtual void Clear();
-
- FX_BOOL Flush();
+class IFX_BufferArchive {
+ public:
+ IFX_BufferArchive(FX_STRSIZE size);
+ virtual ~IFX_BufferArchive() {}
- int32_t AppendBlock(const void* pBuf, size_t size);
+ virtual void Clear();
- int32_t AppendByte(uint8_t byte);
+ FX_BOOL Flush();
- int32_t AppendDWord(FX_DWORD i);
+ int32_t AppendBlock(const void* pBuf, size_t size);
+ int32_t AppendByte(uint8_t byte);
- int32_t AppendString(const CFX_ByteStringC& lpsz);
+ int32_t AppendDWord(FX_DWORD i);
-protected:
+ int32_t AppendString(const CFX_ByteStringC& lpsz);
- virtual FX_BOOL DoWork(const void* pBuf, size_t size) = 0;
+ protected:
+ virtual FX_BOOL DoWork(const void* pBuf, size_t size) = 0;
- FX_STRSIZE m_BufSize;
+ FX_STRSIZE m_BufSize;
- uint8_t* m_pBuffer;
+ uint8_t* m_pBuffer;
- FX_STRSIZE m_Length;
+ FX_STRSIZE m_Length;
};
-class CFX_FileBufferArchive : public IFX_BufferArchive
-{
-public:
- CFX_FileBufferArchive(FX_STRSIZE size = 32768);
- ~CFX_FileBufferArchive() override;
+class CFX_FileBufferArchive : public IFX_BufferArchive {
+ public:
+ CFX_FileBufferArchive(FX_STRSIZE size = 32768);
+ ~CFX_FileBufferArchive() override;
- void Clear() override;
+ void Clear() override;
- FX_BOOL AttachFile(IFX_StreamWrite *pFile, FX_BOOL bTakeover = FALSE);
+ FX_BOOL AttachFile(IFX_StreamWrite* pFile, FX_BOOL bTakeover = FALSE);
- FX_BOOL AttachFile(const FX_WCHAR* filename);
+ FX_BOOL AttachFile(const FX_WCHAR* filename);
- FX_BOOL AttachFile(const FX_CHAR* filename);
+ FX_BOOL AttachFile(const FX_CHAR* filename);
-private:
- FX_BOOL DoWork(const void* pBuf, size_t size) override;
+ private:
+ FX_BOOL DoWork(const void* pBuf, size_t size) override;
- IFX_StreamWrite* m_pFile;
+ IFX_StreamWrite* m_pFile;
- FX_BOOL m_bTakeover;
+ FX_BOOL m_bTakeover;
};
struct CFX_CharMap {
+ static CFX_CharMap* GetDefaultMapper(int32_t codepage = 0);
- static CFX_CharMap* GetDefaultMapper(int32_t codepage = 0);
+ CFX_WideString (*m_GetWideString)(CFX_CharMap* pMap,
+ const CFX_ByteString& bstr);
+ CFX_ByteString (*m_GetByteString)(CFX_CharMap* pMap,
+ const CFX_WideString& wstr);
- CFX_WideString (*m_GetWideString)(CFX_CharMap* pMap, const CFX_ByteString& bstr);
-
- CFX_ByteString (*m_GetByteString)(CFX_CharMap* pMap, const CFX_WideString& wstr);
-
- int32_t (*m_GetCodePage)();
+ int32_t (*m_GetCodePage)();
};
-class CFX_UTF8Decoder
-{
-public:
- CFX_UTF8Decoder()
- {
- m_PendingBytes = 0;
- }
+class CFX_UTF8Decoder {
+ public:
+ CFX_UTF8Decoder() { m_PendingBytes = 0; }
- void Clear();
+ void Clear();
- void Input(uint8_t byte);
+ void Input(uint8_t byte);
- void AppendChar(FX_DWORD ch);
+ void AppendChar(FX_DWORD ch);
- void ClearStatus()
- {
- m_PendingBytes = 0;
- }
+ void ClearStatus() { m_PendingBytes = 0; }
- CFX_WideStringC GetResult() const
- {
- return m_Buffer.GetWideString();
- }
-protected:
+ CFX_WideStringC GetResult() const { return m_Buffer.GetWideString(); }
- int m_PendingBytes;
+ protected:
+ int m_PendingBytes;
- FX_DWORD m_PendingChar;
+ FX_DWORD m_PendingChar;
- CFX_WideTextBuf m_Buffer;
+ CFX_WideTextBuf m_Buffer;
};
-class CFX_UTF8Encoder
-{
-public:
- CFX_UTF8Encoder()
- {
- m_UTF16First = 0;
- }
+class CFX_UTF8Encoder {
+ public:
+ CFX_UTF8Encoder() { m_UTF16First = 0; }
- void Input(FX_WCHAR unicode);
+ void Input(FX_WCHAR unicode);
- void AppendStr(const CFX_ByteStringC& str)
- {
- m_UTF16First = 0;
- m_Buffer << str;
- }
+ void AppendStr(const CFX_ByteStringC& str) {
+ m_UTF16First = 0;
+ m_Buffer << str;
+ }
- CFX_ByteStringC GetResult() const
- {
- return m_Buffer.GetByteString();
- }
-protected:
+ CFX_ByteStringC GetResult() const { return m_Buffer.GetByteString(); }
- CFX_ByteTextBuf m_Buffer;
+ protected:
+ CFX_ByteTextBuf m_Buffer;
- FX_DWORD m_UTF16First;
+ FX_DWORD m_UTF16First;
};
CFX_ByteString FX_UrlEncode(const CFX_WideString& wsUrl);
CFX_WideString FX_UrlDecode(const CFX_ByteString& bsUrl);
CFX_ByteString FX_EncodeURI(const CFX_WideString& wsURI);
CFX_WideString FX_DecodeURI(const CFX_ByteString& bsURI);
-class CFX_BasicArray
-{
-protected:
- CFX_BasicArray(int unit_size);
+class CFX_BasicArray {
+ protected:
+ CFX_BasicArray(int unit_size);
- ~CFX_BasicArray();
+ ~CFX_BasicArray();
- FX_BOOL SetSize(int nNewSize);
+ FX_BOOL SetSize(int nNewSize);
- FX_BOOL Append(const CFX_BasicArray& src);
+ FX_BOOL Append(const CFX_BasicArray& src);
- FX_BOOL Copy(const CFX_BasicArray& src);
+ FX_BOOL Copy(const CFX_BasicArray& src);
- uint8_t* InsertSpaceAt(int nIndex, int nCount);
+ uint8_t* InsertSpaceAt(int nIndex, int nCount);
- FX_BOOL RemoveAt(int nIndex, int nCount);
+ FX_BOOL RemoveAt(int nIndex, int nCount);
- FX_BOOL InsertAt(int nStartIndex, const CFX_BasicArray* pNewArray);
+ FX_BOOL InsertAt(int nStartIndex, const CFX_BasicArray* pNewArray);
- const void* GetDataPtr(int index) const;
-protected:
+ const void* GetDataPtr(int index) const;
- uint8_t* m_pData;
+ protected:
+ uint8_t* m_pData;
- int m_nSize;
+ int m_nSize;
- int m_nMaxSize;
+ int m_nMaxSize;
- int m_nUnitSize;
+ int m_nUnitSize;
};
-template<class TYPE>
-class CFX_ArrayTemplate : public CFX_BasicArray
-{
-public:
- CFX_ArrayTemplate() : CFX_BasicArray(sizeof(TYPE)) {}
-
- int GetSize() const
- {
- return m_nSize;
- }
+template <class TYPE>
+class CFX_ArrayTemplate : public CFX_BasicArray {
+ public:
+ CFX_ArrayTemplate() : CFX_BasicArray(sizeof(TYPE)) {}
- int GetUpperBound() const
- {
- return m_nSize - 1;
- }
+ int GetSize() const { return m_nSize; }
- FX_BOOL SetSize(int nNewSize)
- {
- return CFX_BasicArray::SetSize(nNewSize);
- }
+ int GetUpperBound() const { return m_nSize - 1; }
- void RemoveAll()
- {
- SetSize(0);
- }
+ FX_BOOL SetSize(int nNewSize) { return CFX_BasicArray::SetSize(nNewSize); }
- const TYPE GetAt(int nIndex) const
- {
- if (nIndex < 0 || nIndex >= m_nSize) {
- return (const TYPE&)(*(volatile const TYPE*)NULL);
- }
- return ((const TYPE*)m_pData)[nIndex];
- }
+ void RemoveAll() { SetSize(0); }
- FX_BOOL SetAt(int nIndex, TYPE newElement)
- {
- if (nIndex < 0 || nIndex >= m_nSize) {
- return FALSE;
- }
- ((TYPE*)m_pData)[nIndex] = newElement;
- return TRUE;
+ const TYPE GetAt(int nIndex) const {
+ if (nIndex < 0 || nIndex >= m_nSize) {
+ return (const TYPE&)(*(volatile const TYPE*)NULL);
}
+ return ((const TYPE*)m_pData)[nIndex];
+ }
- TYPE& ElementAt(int nIndex)
- {
- if (nIndex < 0 || nIndex >= m_nSize) {
- return *(TYPE*)NULL;
- }
- return ((TYPE*)m_pData)[nIndex];
+ FX_BOOL SetAt(int nIndex, TYPE newElement) {
+ if (nIndex < 0 || nIndex >= m_nSize) {
+ return FALSE;
}
+ ((TYPE*)m_pData)[nIndex] = newElement;
+ return TRUE;
+ }
- const TYPE* GetData() const
- {
- return (const TYPE*)m_pData;
+ TYPE& ElementAt(int nIndex) {
+ if (nIndex < 0 || nIndex >= m_nSize) {
+ return *(TYPE*)NULL;
}
+ return ((TYPE*)m_pData)[nIndex];
+ }
- TYPE* GetData()
- {
- return (TYPE*)m_pData;
- }
+ const TYPE* GetData() const { return (const TYPE*)m_pData; }
- FX_BOOL SetAtGrow(int nIndex, TYPE newElement)
- {
- if (nIndex < 0) {
- return FALSE;
- }
- if (nIndex >= m_nSize)
- if (!SetSize(nIndex + 1)) {
- return FALSE;
- }
- ((TYPE*)m_pData)[nIndex] = newElement;
- return TRUE;
- }
+ TYPE* GetData() { return (TYPE*)m_pData; }
- FX_BOOL Add(TYPE newElement)
- {
- if (m_nSize < m_nMaxSize) {
- m_nSize ++;
- } else if (!SetSize(m_nSize + 1)) {
- return FALSE;
- }
- ((TYPE*)m_pData)[m_nSize - 1] = newElement;
- return TRUE;
+ FX_BOOL SetAtGrow(int nIndex, TYPE newElement) {
+ if (nIndex < 0) {
+ return FALSE;
}
+ if (nIndex >= m_nSize)
+ if (!SetSize(nIndex + 1)) {
+ return FALSE;
+ }
+ ((TYPE*)m_pData)[nIndex] = newElement;
+ return TRUE;
+ }
- FX_BOOL Append(const CFX_ArrayTemplate& src)
- {
- return CFX_BasicArray::Append(src);
+ FX_BOOL Add(TYPE newElement) {
+ if (m_nSize < m_nMaxSize) {
+ m_nSize++;
+ } else if (!SetSize(m_nSize + 1)) {
+ return FALSE;
}
+ ((TYPE*)m_pData)[m_nSize - 1] = newElement;
+ return TRUE;
+ }
- FX_BOOL Copy(const CFX_ArrayTemplate& src)
- {
- return CFX_BasicArray::Copy(src);
- }
+ FX_BOOL Append(const CFX_ArrayTemplate& src) {
+ return CFX_BasicArray::Append(src);
+ }
- TYPE* GetDataPtr(int index)
- {
- return (TYPE*)CFX_BasicArray::GetDataPtr(index);
- }
+ FX_BOOL Copy(const CFX_ArrayTemplate& src) {
+ return CFX_BasicArray::Copy(src);
+ }
- TYPE* AddSpace()
- {
- return (TYPE*)CFX_BasicArray::InsertSpaceAt(m_nSize, 1);
- }
+ TYPE* GetDataPtr(int index) {
+ return (TYPE*)CFX_BasicArray::GetDataPtr(index);
+ }
- TYPE* InsertSpaceAt(int nIndex, int nCount)
- {
- return (TYPE*)CFX_BasicArray::InsertSpaceAt(nIndex, nCount);
- }
+ TYPE* AddSpace() { return (TYPE*)CFX_BasicArray::InsertSpaceAt(m_nSize, 1); }
- const TYPE operator[](int nIndex) const
- {
- if (nIndex < 0 || nIndex >= m_nSize) {
- *(volatile char*)0 = '\0';
- }
- return ((const TYPE*)m_pData)[nIndex];
- }
+ TYPE* InsertSpaceAt(int nIndex, int nCount) {
+ return (TYPE*)CFX_BasicArray::InsertSpaceAt(nIndex, nCount);
+ }
- TYPE& operator[](int nIndex)
- {
- if (nIndex < 0 || nIndex >= m_nSize) {
- *(volatile char*)0 = '\0';
- }
- return ((TYPE*)m_pData)[nIndex];
+ const TYPE operator[](int nIndex) const {
+ if (nIndex < 0 || nIndex >= m_nSize) {
+ *(volatile char*)0 = '\0';
}
+ return ((const TYPE*)m_pData)[nIndex];
+ }
- FX_BOOL InsertAt(int nIndex, TYPE newElement, int nCount = 1)
- {
- if (!InsertSpaceAt(nIndex, nCount)) {
- return FALSE;
- }
- while (nCount--) {
- ((TYPE*)m_pData)[nIndex++] = newElement;
- }
- return TRUE;
+ TYPE& operator[](int nIndex) {
+ if (nIndex < 0 || nIndex >= m_nSize) {
+ *(volatile char*)0 = '\0';
}
+ return ((TYPE*)m_pData)[nIndex];
+ }
- FX_BOOL RemoveAt(int nIndex, int nCount = 1)
- {
- return CFX_BasicArray::RemoveAt(nIndex, nCount);
+ FX_BOOL InsertAt(int nIndex, TYPE newElement, int nCount = 1) {
+ if (!InsertSpaceAt(nIndex, nCount)) {
+ return FALSE;
}
-
- FX_BOOL InsertAt(int nStartIndex, const CFX_BasicArray* pNewArray)
- {
- return CFX_BasicArray::InsertAt(nStartIndex, pNewArray);
+ while (nCount--) {
+ ((TYPE*)m_pData)[nIndex++] = newElement;
}
+ return TRUE;
+ }
- int Find(TYPE data, int iStart = 0) const
- {
- if (iStart < 0) {
- return -1;
- }
- for (; iStart < (int)m_nSize; iStart ++)
- if (((TYPE*)m_pData)[iStart] == data) {
- return iStart;
- }
- return -1;
+ FX_BOOL RemoveAt(int nIndex, int nCount = 1) {
+ return CFX_BasicArray::RemoveAt(nIndex, nCount);
+ }
+
+ FX_BOOL InsertAt(int nStartIndex, const CFX_BasicArray* pNewArray) {
+ return CFX_BasicArray::InsertAt(nStartIndex, pNewArray);
+ }
+
+ int Find(TYPE data, int iStart = 0) const {
+ if (iStart < 0) {
+ return -1;
}
+ for (; iStart < (int)m_nSize; iStart++)
+ if (((TYPE*)m_pData)[iStart] == data) {
+ return iStart;
+ }
+ return -1;
+ }
};
-typedef CFX_ArrayTemplate<uint8_t> CFX_ByteArray;
-typedef CFX_ArrayTemplate<FX_WORD> CFX_WordArray;
-typedef CFX_ArrayTemplate<FX_DWORD> CFX_DWordArray;
-typedef CFX_ArrayTemplate<void*> CFX_PtrArray;
-typedef CFX_ArrayTemplate<FX_FILESIZE> CFX_FileSizeArray;
-typedef CFX_ArrayTemplate<FX_FLOAT> CFX_FloatArray;
-typedef CFX_ArrayTemplate<int32_t> CFX_Int32Array;
+typedef CFX_ArrayTemplate<uint8_t> CFX_ByteArray;
+typedef CFX_ArrayTemplate<FX_WORD> CFX_WordArray;
+typedef CFX_ArrayTemplate<FX_DWORD> CFX_DWordArray;
+typedef CFX_ArrayTemplate<void*> CFX_PtrArray;
+typedef CFX_ArrayTemplate<FX_FILESIZE> CFX_FileSizeArray;
+typedef CFX_ArrayTemplate<FX_FLOAT> CFX_FloatArray;
+typedef CFX_ArrayTemplate<int32_t> CFX_Int32Array;
template <class ObjectClass>
-class CFX_ObjectArray : public CFX_BasicArray
-{
-public:
- CFX_ObjectArray() : CFX_BasicArray(sizeof(ObjectClass)) {}
-
- ~CFX_ObjectArray()
- {
- RemoveAll();
- }
+class CFX_ObjectArray : public CFX_BasicArray {
+ public:
+ CFX_ObjectArray() : CFX_BasicArray(sizeof(ObjectClass)) {}
- void Add(const ObjectClass& data)
- {
- new ((void*)InsertSpaceAt(m_nSize, 1)) ObjectClass(data);
- }
+ ~CFX_ObjectArray() { RemoveAll(); }
- ObjectClass& Add()
- {
- return *(ObjectClass*) new ((void*)InsertSpaceAt(m_nSize, 1)) ObjectClass();
- }
+ void Add(const ObjectClass& data) {
+ new ((void*)InsertSpaceAt(m_nSize, 1)) ObjectClass(data);
+ }
- void* AddSpace()
- {
- return InsertSpaceAt(m_nSize, 1);
- }
+ ObjectClass& Add() {
+ return *(ObjectClass*)new ((void*)InsertSpaceAt(m_nSize, 1)) ObjectClass();
+ }
- int32_t Append(const CFX_ObjectArray& src, int32_t nStart = 0, int32_t nCount = -1)
- {
- if (nCount == 0) {
- return 0;
- }
- int32_t nSize = src.GetSize();
- if (!nSize) {
- return 0;
- }
- FXSYS_assert(nStart > -1 && nStart < nSize);
- if (nCount < 0) {
- nCount = nSize;
- }
- if (nStart + nCount > nSize) {
- nCount = nSize - nStart;
- }
- if (nCount < 1) {
- return 0;
- }
- nSize = m_nSize;
- InsertSpaceAt(m_nSize, nCount);
- ObjectClass* pStartObj = (ObjectClass*)GetDataPtr(nSize);
- nSize = nStart + nCount;
- for (int32_t i = nStart; i < nSize; i ++, pStartObj++) {
- new ((void*)pStartObj) ObjectClass(src[i]);
- }
- return nCount;
- }
+ void* AddSpace() { return InsertSpaceAt(m_nSize, 1); }
- int32_t Copy(const CFX_ObjectArray& src, int32_t nStart = 0, int32_t nCount = -1)
- {
- if (nCount == 0) {
- return 0;
- }
- int32_t nSize = src.GetSize();
- if (!nSize) {
- return 0;
- }
- FXSYS_assert(nStart > -1 && nStart < nSize);
- if (nCount < 0) {
- nCount = nSize;
- }
- if (nStart + nCount > nSize) {
- nCount = nSize - nStart;
- }
- if (nCount < 1) {
- return 0;
- }
- RemoveAll();
- SetSize(nCount);
- ObjectClass* pStartObj = (ObjectClass*)m_pData;
- nSize = nStart + nCount;
- for (int32_t i = nStart; i < nSize; i ++, pStartObj++) {
- new ((void*)pStartObj) ObjectClass(src[i]);
- }
- return nCount;
+ int32_t Append(const CFX_ObjectArray& src,
+ int32_t nStart = 0,
+ int32_t nCount = -1) {
+ if (nCount == 0) {
+ return 0;
}
-
- int GetSize() const
- {
- return m_nSize;
+ int32_t nSize = src.GetSize();
+ if (!nSize) {
+ return 0;
}
-
- ObjectClass& operator[] (int index) const
- {
- FXSYS_assert(index < m_nSize);
- return *(ObjectClass*)CFX_BasicArray::GetDataPtr(index);
+ FXSYS_assert(nStart > -1 && nStart < nSize);
+ if (nCount < 0) {
+ nCount = nSize;
}
-
- ObjectClass* GetDataPtr(int index)
- {
- return (ObjectClass*)CFX_BasicArray::GetDataPtr(index);
+ if (nStart + nCount > nSize) {
+ nCount = nSize - nStart;
}
+ if (nCount < 1) {
+ return 0;
+ }
+ nSize = m_nSize;
+ InsertSpaceAt(m_nSize, nCount);
+ ObjectClass* pStartObj = (ObjectClass*)GetDataPtr(nSize);
+ nSize = nStart + nCount;
+ for (int32_t i = nStart; i < nSize; i++, pStartObj++) {
+ new ((void*)pStartObj) ObjectClass(src[i]);
+ }
+ return nCount;
+ }
- void RemoveAt(int index)
- {
- FXSYS_assert(index < m_nSize);
- ((ObjectClass*)GetDataPtr(index))->~ObjectClass();
- CFX_BasicArray::RemoveAt(index, 1);
+ int32_t Copy(const CFX_ObjectArray& src,
+ int32_t nStart = 0,
+ int32_t nCount = -1) {
+ if (nCount == 0) {
+ return 0;
+ }
+ int32_t nSize = src.GetSize();
+ if (!nSize) {
+ return 0;
}
+ FXSYS_assert(nStart > -1 && nStart < nSize);
+ if (nCount < 0) {
+ nCount = nSize;
+ }
+ if (nStart + nCount > nSize) {
+ nCount = nSize - nStart;
+ }
+ if (nCount < 1) {
+ return 0;
+ }
+ RemoveAll();
+ SetSize(nCount);
+ ObjectClass* pStartObj = (ObjectClass*)m_pData;
+ nSize = nStart + nCount;
+ for (int32_t i = nStart; i < nSize; i++, pStartObj++) {
+ new ((void*)pStartObj) ObjectClass(src[i]);
+ }
+ return nCount;
+ }
- void RemoveAll()
- {
- for (int i = 0; i < m_nSize; i ++) {
- ((ObjectClass*)GetDataPtr(i))->~ObjectClass();
- }
- CFX_BasicArray::SetSize(0);
+ int GetSize() const { return m_nSize; }
+
+ ObjectClass& operator[](int index) const {
+ FXSYS_assert(index < m_nSize);
+ return *(ObjectClass*)CFX_BasicArray::GetDataPtr(index);
+ }
+
+ ObjectClass* GetDataPtr(int index) {
+ return (ObjectClass*)CFX_BasicArray::GetDataPtr(index);
+ }
+
+ void RemoveAt(int index) {
+ FXSYS_assert(index < m_nSize);
+ ((ObjectClass*)GetDataPtr(index))->~ObjectClass();
+ CFX_BasicArray::RemoveAt(index, 1);
+ }
+
+ void RemoveAll() {
+ for (int i = 0; i < m_nSize; i++) {
+ ((ObjectClass*)GetDataPtr(i))->~ObjectClass();
}
+ CFX_BasicArray::SetSize(0);
+ }
};
typedef CFX_ObjectArray<CFX_ByteString> CFX_ByteStringArray;
typedef CFX_ObjectArray<CFX_WideString> CFX_WideStringArray;
-class CFX_BaseSegmentedArray
-{
-public:
- CFX_BaseSegmentedArray(int unit_size = 1, int segment_units = 512, int index_size = 8);
+class CFX_BaseSegmentedArray {
+ public:
+ CFX_BaseSegmentedArray(int unit_size = 1,
+ int segment_units = 512,
+ int index_size = 8);
- ~CFX_BaseSegmentedArray();
+ ~CFX_BaseSegmentedArray();
- void SetUnitSize(int unit_size, int segment_units, int index_size = 8);
+ void SetUnitSize(int unit_size, int segment_units, int index_size = 8);
- void* Add();
+ void* Add();
- void* GetAt(int index) const;
+ void* GetAt(int index) const;
- void RemoveAll();
+ void RemoveAll();
- void Delete(int index, int count = 1);
+ void Delete(int index, int count = 1);
- int GetSize() const
- {
- return m_DataSize;
- }
+ int GetSize() const { return m_DataSize; }
- int GetSegmentSize() const
- {
- return m_SegmentSize;
- }
+ int GetSegmentSize() const { return m_SegmentSize; }
- int GetUnitSize() const
- {
- return m_UnitSize;
- }
+ int GetUnitSize() const { return m_UnitSize; }
- void* Iterate(FX_BOOL (*callback)(void* param, void* pData), void* param) const;
-private:
+ void* Iterate(FX_BOOL (*callback)(void* param, void* pData),
+ void* param) const;
- int m_UnitSize;
+ private:
+ int m_UnitSize;
- short m_SegmentSize;
+ short m_SegmentSize;
- uint8_t m_IndexSize;
+ uint8_t m_IndexSize;
- uint8_t m_IndexDepth;
+ uint8_t m_IndexDepth;
- int m_DataSize;
+ int m_DataSize;
- void* m_pIndex;
- void** GetIndex(int seg_index) const;
- void* IterateIndex(int level, int& start, void** pIndex, FX_BOOL (*callback)(void* param, void* pData), void* param) const;
- void* IterateSegment(const uint8_t* pSegment, int count, FX_BOOL (*callback)(void* param, void* pData), void* param) const;
+ void* m_pIndex;
+ void** GetIndex(int seg_index) const;
+ void* IterateIndex(int level,
+ int& start,
+ void** pIndex,
+ FX_BOOL (*callback)(void* param, void* pData),
+ void* param) const;
+ void* IterateSegment(const uint8_t* pSegment,
+ int count,
+ FX_BOOL (*callback)(void* param, void* pData),
+ void* param) const;
};
template <class ElementType>
-class CFX_SegmentedArray : public CFX_BaseSegmentedArray
-{
-public:
- CFX_SegmentedArray(int segment_units, int index_size = 8)
- : CFX_BaseSegmentedArray(sizeof(ElementType), segment_units, index_size)
- {}
-
- void Add(ElementType data)
- {
- *(ElementType*)CFX_BaseSegmentedArray::Add() = data;
- }
-
- ElementType& operator [] (int index)
- {
- return *(ElementType*)CFX_BaseSegmentedArray::GetAt(index);
- }
+class CFX_SegmentedArray : public CFX_BaseSegmentedArray {
+ public:
+ CFX_SegmentedArray(int segment_units, int index_size = 8)
+ : CFX_BaseSegmentedArray(sizeof(ElementType), segment_units, index_size) {
+ }
+
+ void Add(ElementType data) {
+ *(ElementType*)CFX_BaseSegmentedArray::Add() = data;
+ }
+
+ ElementType& operator[](int index) {
+ return *(ElementType*)CFX_BaseSegmentedArray::GetAt(index);
+ }
};
template <class DataType, int FixedSize>
-class CFX_FixedBufGrow
-{
-public:
- CFX_FixedBufGrow() : m_pData(NULL)
- {}
- CFX_FixedBufGrow(int data_size) : m_pData(NULL)
- {
- if (data_size > FixedSize) {
- m_pData = FX_Alloc(DataType, data_size);
- } else {
- FXSYS_memset(m_Data, 0, sizeof(DataType)*FixedSize);
- }
- }
- void SetDataSize(int data_size)
- {
- if (m_pData) {
- FX_Free(m_pData);
- }
- m_pData = NULL;
- if (data_size > FixedSize) {
- m_pData = FX_Alloc(DataType, data_size);
- } else {
- FXSYS_memset(m_Data, 0, sizeof(DataType)*FixedSize);
- }
- }
- ~CFX_FixedBufGrow()
- {
- if (m_pData) {
- FX_Free(m_pData);
- }
- }
- operator DataType*()
- {
- return m_pData ? m_pData : m_Data;
- }
-private:
- DataType m_Data[FixedSize];
- DataType* m_pData;
+class CFX_FixedBufGrow {
+ public:
+ CFX_FixedBufGrow() : m_pData(NULL) {}
+ CFX_FixedBufGrow(int data_size) : m_pData(NULL) {
+ if (data_size > FixedSize) {
+ m_pData = FX_Alloc(DataType, data_size);
+ } else {
+ FXSYS_memset(m_Data, 0, sizeof(DataType) * FixedSize);
+ }
+ }
+ void SetDataSize(int data_size) {
+ if (m_pData) {
+ FX_Free(m_pData);
+ }
+ m_pData = NULL;
+ if (data_size > FixedSize) {
+ m_pData = FX_Alloc(DataType, data_size);
+ } else {
+ FXSYS_memset(m_Data, 0, sizeof(DataType) * FixedSize);
+ }
+ }
+ ~CFX_FixedBufGrow() {
+ if (m_pData) {
+ FX_Free(m_pData);
+ }
+ }
+ operator DataType*() { return m_pData ? m_pData : m_Data; }
+
+ private:
+ DataType m_Data[FixedSize];
+ DataType* m_pData;
};
-class CFX_MapPtrToPtr
-{
-protected:
+class CFX_MapPtrToPtr {
+ protected:
+ struct CAssoc {
+ CAssoc* pNext;
- struct CAssoc {
+ void* key;
- CAssoc* pNext;
+ void* value;
+ };
- void* key;
+ public:
+ CFX_MapPtrToPtr(int nBlockSize = 10);
- void* value;
- };
-public:
- CFX_MapPtrToPtr(int nBlockSize = 10);
+ ~CFX_MapPtrToPtr();
- ~CFX_MapPtrToPtr();
+ int GetCount() const { return m_nCount; }
- int GetCount() const
- {
- return m_nCount;
- }
+ FX_BOOL IsEmpty() const { return m_nCount == 0; }
- FX_BOOL IsEmpty() const
- {
- return m_nCount == 0;
- }
+ FX_BOOL Lookup(void* key, void*& rValue) const;
- FX_BOOL Lookup(void* key, void*& rValue) const;
+ void* GetValueAt(void* key) const;
- void* GetValueAt(void* key) const;
+ void*& operator[](void* key);
- void*& operator[](void* key);
+ void SetAt(void* key, void* newValue) { (*this)[key] = newValue; }
- void SetAt(void* key, void* newValue)
- {
- (*this)[key] = newValue;
- }
+ FX_BOOL RemoveKey(void* key);
- FX_BOOL RemoveKey(void* key);
+ void RemoveAll();
- void RemoveAll();
+ FX_POSITION GetStartPosition() const {
+ return (m_nCount == 0) ? NULL : (FX_POSITION)-1;
+ }
- FX_POSITION GetStartPosition() const
- {
- return (m_nCount == 0) ? NULL : (FX_POSITION) - 1;
- }
-
- void GetNextAssoc(FX_POSITION& rNextPosition, void*& rKey, void*& rValue) const;
+ void GetNextAssoc(FX_POSITION& rNextPosition,
+ void*& rKey,
+ void*& rValue) const;
- FX_DWORD GetHashTableSize() const
- {
- return m_nHashTableSize;
- }
+ FX_DWORD GetHashTableSize() const { return m_nHashTableSize; }
- void InitHashTable(FX_DWORD hashSize, FX_BOOL bAllocNow = TRUE);
-protected:
+ void InitHashTable(FX_DWORD hashSize, FX_BOOL bAllocNow = TRUE);
- CAssoc** m_pHashTable;
+ protected:
+ CAssoc** m_pHashTable;
- FX_DWORD m_nHashTableSize;
+ FX_DWORD m_nHashTableSize;
- int m_nCount;
+ int m_nCount;
- CAssoc* m_pFreeList;
+ CAssoc* m_pFreeList;
- struct CFX_Plex* m_pBlocks;
+ struct CFX_Plex* m_pBlocks;
- int m_nBlockSize;
+ int m_nBlockSize;
- FX_DWORD HashKey(void* key) const;
+ FX_DWORD HashKey(void* key) const;
- CAssoc* NewAssoc();
+ CAssoc* NewAssoc();
- void FreeAssoc(CAssoc* pAssoc);
+ void FreeAssoc(CAssoc* pAssoc);
- CAssoc* GetAssocAt(void* key, FX_DWORD& hash) const;
+ CAssoc* GetAssocAt(void* key, FX_DWORD& hash) const;
};
-class CFX_CMapDWordToDWord
-{
-public:
+class CFX_CMapDWordToDWord {
+ public:
+ FX_BOOL Lookup(FX_DWORD key, FX_DWORD& value) const;
- FX_BOOL Lookup(FX_DWORD key, FX_DWORD& value) const;
+ void SetAt(FX_DWORD key, FX_DWORD value);
- void SetAt(FX_DWORD key, FX_DWORD value);
+ void EstimateSize(FX_DWORD size, FX_DWORD grow_by);
- void EstimateSize(FX_DWORD size, FX_DWORD grow_by);
+ FX_POSITION GetStartPosition() const;
- FX_POSITION GetStartPosition() const;
+ void GetNextAssoc(FX_POSITION& pos, FX_DWORD& key, FX_DWORD& value) const;
- void GetNextAssoc(FX_POSITION& pos, FX_DWORD& key, FX_DWORD& value) const;
-protected:
-
- CFX_BinaryBuf m_Buffer;
+ protected:
+ CFX_BinaryBuf m_Buffer;
};
-class CFX_MapByteStringToPtr
-{
-protected:
+class CFX_MapByteStringToPtr {
+ protected:
+ struct CAssoc {
+ CAssoc* pNext;
- struct CAssoc {
+ FX_DWORD nHashValue;
- CAssoc* pNext;
+ CFX_ByteString key;
- FX_DWORD nHashValue;
+ void* value;
+ };
- CFX_ByteString key;
+ public:
+ CFX_MapByteStringToPtr(int nBlockSize = 10);
- void* value;
- };
-public:
- CFX_MapByteStringToPtr(int nBlockSize = 10);
+ int GetCount() const { return m_nCount; }
- int GetCount() const
- {
- return m_nCount;
- }
+ FX_BOOL IsEmpty() const { return m_nCount == 0; }
- FX_BOOL IsEmpty() const
- {
- return m_nCount == 0;
- }
+ FX_BOOL Lookup(const CFX_ByteStringC& key, void*& rValue) const;
- FX_BOOL Lookup(const CFX_ByteStringC& key, void*& rValue) const;
+ void*& operator[](const CFX_ByteStringC& key);
- void*& operator[](const CFX_ByteStringC& key);
+ void SetAt(const CFX_ByteStringC& key, void* newValue) {
+ (*this)[key] = newValue;
+ }
- void SetAt(const CFX_ByteStringC& key, void* newValue)
- {
- (*this)[key] = newValue;
- }
+ FX_BOOL RemoveKey(const CFX_ByteStringC& key);
- FX_BOOL RemoveKey(const CFX_ByteStringC& key);
+ void RemoveAll();
- void RemoveAll();
+ FX_POSITION GetStartPosition() const {
+ return (m_nCount == 0) ? NULL : (FX_POSITION)-1;
+ }
- FX_POSITION GetStartPosition() const
- {
- return (m_nCount == 0) ? NULL : (FX_POSITION) - 1;
- }
+ void GetNextAssoc(FX_POSITION& rNextPosition,
+ CFX_ByteString& rKey,
+ void*& rValue) const;
- void GetNextAssoc(FX_POSITION& rNextPosition, CFX_ByteString& rKey, void*& rValue) const;
+ void* GetNextValue(FX_POSITION& rNextPosition) const;
- void* GetNextValue(FX_POSITION& rNextPosition) const;
+ FX_DWORD GetHashTableSize() const { return m_nHashTableSize; }
- FX_DWORD GetHashTableSize() const
- {
- return m_nHashTableSize;
- }
+ void InitHashTable(FX_DWORD hashSize, FX_BOOL bAllocNow = TRUE);
- void InitHashTable(FX_DWORD hashSize, FX_BOOL bAllocNow = TRUE);
+ FX_DWORD HashKey(const CFX_ByteStringC& key) const;
- FX_DWORD HashKey(const CFX_ByteStringC& key) const;
-protected:
+ protected:
+ CAssoc** m_pHashTable;
- CAssoc** m_pHashTable;
+ FX_DWORD m_nHashTableSize;
- FX_DWORD m_nHashTableSize;
+ int m_nCount;
- int m_nCount;
+ CAssoc* m_pFreeList;
- CAssoc* m_pFreeList;
+ struct CFX_Plex* m_pBlocks;
- struct CFX_Plex* m_pBlocks;
+ int m_nBlockSize;
- int m_nBlockSize;
+ CAssoc* NewAssoc();
- CAssoc* NewAssoc();
+ void FreeAssoc(CAssoc* pAssoc);
- void FreeAssoc(CAssoc* pAssoc);
+ CAssoc* GetAssocAt(const CFX_ByteStringC& key, FX_DWORD& hash) const;
- CAssoc* GetAssocAt(const CFX_ByteStringC& key, FX_DWORD& hash) const;
-public:
-
- ~CFX_MapByteStringToPtr();
+ public:
+ ~CFX_MapByteStringToPtr();
};
-class CFX_CMapByteStringToPtr
-{
-public:
- CFX_CMapByteStringToPtr();
+class CFX_CMapByteStringToPtr {
+ public:
+ CFX_CMapByteStringToPtr();
- ~CFX_CMapByteStringToPtr();
+ ~CFX_CMapByteStringToPtr();
- void RemoveAll();
+ void RemoveAll();
- FX_POSITION GetStartPosition() const;
+ FX_POSITION GetStartPosition() const;
- void GetNextAssoc(FX_POSITION& rNextPosition, CFX_ByteString& rKey, void*& rValue) const;
+ void GetNextAssoc(FX_POSITION& rNextPosition,
+ CFX_ByteString& rKey,
+ void*& rValue) const;
- void* GetNextValue(FX_POSITION& rNextPosition) const;
+ void* GetNextValue(FX_POSITION& rNextPosition) const;
- FX_BOOL Lookup(const CFX_ByteStringC& key, void*& rValue) const;
+ FX_BOOL Lookup(const CFX_ByteStringC& key, void*& rValue) const;
- void SetAt(const CFX_ByteStringC& key, void* value);
+ void SetAt(const CFX_ByteStringC& key, void* value);
- void RemoveKey(const CFX_ByteStringC& key);
+ void RemoveKey(const CFX_ByteStringC& key);
- int GetCount() const;
+ int GetCount() const;
- void AddValue(const CFX_ByteStringC& key, void* pValue);
-private:
+ void AddValue(const CFX_ByteStringC& key, void* pValue);
- CFX_BaseSegmentedArray m_Buffer;
+ private:
+ CFX_BaseSegmentedArray m_Buffer;
};
-class CFX_PtrList
-{
-protected:
-
- struct CNode {
+class CFX_PtrList {
+ protected:
+ struct CNode {
+ CNode* pNext;
- CNode* pNext;
+ CNode* pPrev;
- CNode* pPrev;
+ void* data;
+ };
- void* data;
- };
-public:
- CFX_PtrList(int nBlockSize = 10);
+ public:
+ CFX_PtrList(int nBlockSize = 10);
- FX_POSITION GetHeadPosition() const
- {
- return (FX_POSITION)m_pNodeHead;
- }
+ FX_POSITION GetHeadPosition() const { return (FX_POSITION)m_pNodeHead; }
- FX_POSITION GetTailPosition() const
- {
- return (FX_POSITION)m_pNodeTail;
- }
+ FX_POSITION GetTailPosition() const { return (FX_POSITION)m_pNodeTail; }
- void* GetNext(FX_POSITION& rPosition) const
- {
- CNode* pNode = (CNode*) rPosition;
- rPosition = (FX_POSITION) pNode->pNext;
- return pNode->data;
- }
+ void* GetNext(FX_POSITION& rPosition) const {
+ CNode* pNode = (CNode*)rPosition;
+ rPosition = (FX_POSITION)pNode->pNext;
+ return pNode->data;
+ }
- void* GetPrev(FX_POSITION& rPosition) const
- {
- CNode* pNode = (CNode*) rPosition;
- rPosition = (FX_POSITION) pNode->pPrev;
- return pNode->data;
- }
+ void* GetPrev(FX_POSITION& rPosition) const {
+ CNode* pNode = (CNode*)rPosition;
+ rPosition = (FX_POSITION)pNode->pPrev;
+ return pNode->data;
+ }
- FX_POSITION GetNextPosition(FX_POSITION pos) const
- {
- return ((CNode*)pos)->pNext;
- }
+ FX_POSITION GetNextPosition(FX_POSITION pos) const {
+ return ((CNode*)pos)->pNext;
+ }
- FX_POSITION GetPrevPosition(FX_POSITION pos) const
- {
- return ((CNode*)pos)->pPrev;
- }
+ FX_POSITION GetPrevPosition(FX_POSITION pos) const {
+ return ((CNode*)pos)->pPrev;
+ }
- void* GetAt(FX_POSITION rPosition) const
- {
- CNode* pNode = (CNode*) rPosition;
- return pNode->data;
- }
+ void* GetAt(FX_POSITION rPosition) const {
+ CNode* pNode = (CNode*)rPosition;
+ return pNode->data;
+ }
- int GetCount() const
- {
- return m_nCount;
- }
+ int GetCount() const { return m_nCount; }
- FX_POSITION AddTail(void* newElement);
+ FX_POSITION AddTail(void* newElement);
- FX_POSITION AddHead(void* newElement);
+ FX_POSITION AddHead(void* newElement);
- void SetAt(FX_POSITION pos, void* newElement)
- {
- CNode* pNode = (CNode*) pos;
- pNode->data = newElement;
- }
+ void SetAt(FX_POSITION pos, void* newElement) {
+ CNode* pNode = (CNode*)pos;
+ pNode->data = newElement;
+ }
- FX_POSITION InsertAfter(FX_POSITION pos, void* newElement);
+ FX_POSITION InsertAfter(FX_POSITION pos, void* newElement);
- FX_POSITION Find(void* searchValue, FX_POSITION startAfter = NULL ) const;
+ FX_POSITION Find(void* searchValue, FX_POSITION startAfter = NULL) const;
- FX_POSITION FindIndex(int index) const;
+ FX_POSITION FindIndex(int index) const;
- void RemoveAt(FX_POSITION pos);
+ void RemoveAt(FX_POSITION pos);
- void RemoveAll();
-protected:
+ void RemoveAll();
- CNode* m_pNodeHead;
+ protected:
+ CNode* m_pNodeHead;
- CNode* m_pNodeTail;
+ CNode* m_pNodeTail;
- int m_nCount;
+ int m_nCount;
- CNode* m_pNodeFree;
+ CNode* m_pNodeFree;
- struct CFX_Plex* m_pBlocks;
+ struct CFX_Plex* m_pBlocks;
- int m_nBlockSize;
+ int m_nBlockSize;
- CNode* NewNode(CNode* pPrev, CNode* pNext);
+ CNode* NewNode(CNode* pPrev, CNode* pNext);
- void FreeNode(CNode* pNode);
-public:
+ void FreeNode(CNode* pNode);
- ~CFX_PtrList();
+ public:
+ ~CFX_PtrList();
};
typedef void (*PD_CALLBACK_FREEDATA)(void* pData);
struct FX_PRIVATEDATA {
+ void FreeData();
- void FreeData();
-
- void* m_pModuleId;
+ void* m_pModuleId;
- void* m_pData;
+ void* m_pData;
- PD_CALLBACK_FREEDATA m_pCallback;
+ PD_CALLBACK_FREEDATA m_pCallback;
- FX_BOOL m_bSelfDestruct;
+ FX_BOOL m_bSelfDestruct;
};
-class CFX_PrivateData
-{
-public:
+class CFX_PrivateData {
+ public:
+ ~CFX_PrivateData();
- ~CFX_PrivateData();
+ void ClearAll();
- void ClearAll();
+ void SetPrivateData(void* module_id,
+ void* pData,
+ PD_CALLBACK_FREEDATA callback);
- void SetPrivateData(void* module_id, void* pData, PD_CALLBACK_FREEDATA callback);
+ void SetPrivateObj(void* module_id, CFX_DestructObject* pObj);
- void SetPrivateObj(void* module_id, CFX_DestructObject* pObj);
+ void* GetPrivateData(void* module_id);
- void* GetPrivateData(void* module_id);
-
- FX_BOOL LookupPrivateData(void* module_id, void* &pData) const
- {
- if (!module_id) {
- return FALSE;
- }
- FX_DWORD nCount = m_DataList.GetSize();
- for (FX_DWORD n = 0; n < nCount; n ++) {
- if (m_DataList[n].m_pModuleId == module_id) {
- pData = m_DataList[n].m_pData;
- return TRUE;
- }
- }
- return FALSE;
+ FX_BOOL LookupPrivateData(void* module_id, void*& pData) const {
+ if (!module_id) {
+ return FALSE;
+ }
+ FX_DWORD nCount = m_DataList.GetSize();
+ for (FX_DWORD n = 0; n < nCount; n++) {
+ if (m_DataList[n].m_pModuleId == module_id) {
+ pData = m_DataList[n].m_pData;
+ return TRUE;
+ }
}
+ return FALSE;
+ }
- FX_BOOL RemovePrivateData(void* module_id);
-protected:
+ FX_BOOL RemovePrivateData(void* module_id);
- CFX_ArrayTemplate<FX_PRIVATEDATA> m_DataList;
+ protected:
+ CFX_ArrayTemplate<FX_PRIVATEDATA> m_DataList;
- void AddData(void* module_id, void* pData, PD_CALLBACK_FREEDATA callback, FX_BOOL bSelfDestruct);
+ void AddData(void* module_id,
+ void* pData,
+ PD_CALLBACK_FREEDATA callback,
+ FX_BOOL bSelfDestruct);
};
-class CFX_BitStream
-{
-public:
+class CFX_BitStream {
+ public:
+ void Init(const uint8_t* pData, FX_DWORD dwSize);
- void Init(const uint8_t* pData, FX_DWORD dwSize);
+ FX_DWORD GetBits(FX_DWORD nBits);
+ void ByteAlign();
- FX_DWORD GetBits(FX_DWORD nBits);
+ FX_BOOL IsEOF() { return m_BitPos >= m_BitSize; }
- void ByteAlign();
+ void SkipBits(FX_DWORD nBits) { m_BitPos += nBits; }
- FX_BOOL IsEOF()
- {
- return m_BitPos >= m_BitSize;
- }
-
- void SkipBits(FX_DWORD nBits)
- {
- m_BitPos += nBits;
- }
+ void Rewind() { m_BitPos = 0; }
- void Rewind()
- {
- m_BitPos = 0;
- }
-protected:
-
- FX_DWORD m_BitPos;
+ protected:
+ FX_DWORD m_BitPos;
- FX_DWORD m_BitSize;
+ FX_DWORD m_BitSize;
- const uint8_t* m_pData;
+ const uint8_t* m_pData;
};
-template <class ObjClass> class CFX_CountRef
-{
-public:
-
- typedef CFX_CountRef<ObjClass> Ref;
+template <class ObjClass>
+class CFX_CountRef {
+ public:
+ typedef CFX_CountRef<ObjClass> Ref;
- class CountedObj : public ObjClass
- {
- public:
+ class CountedObj : public ObjClass {
+ public:
+ CountedObj() {}
- CountedObj() {}
+ CountedObj(const CountedObj& src) : ObjClass(src) {}
- CountedObj(const CountedObj& src) : ObjClass(src) {}
+ int m_RefCount;
+ };
- int m_RefCount;
- };
+ CFX_CountRef() { m_pObject = NULL; }
- CFX_CountRef()
- {
- m_pObject = NULL;
+ CFX_CountRef(const Ref& ref) {
+ m_pObject = ref.m_pObject;
+ if (m_pObject) {
+ m_pObject->m_RefCount++;
}
+ }
- CFX_CountRef(const Ref& ref)
- {
- m_pObject = ref.m_pObject;
- if (m_pObject) {
- m_pObject->m_RefCount ++;
- }
+ ~CFX_CountRef() {
+ if (!m_pObject) {
+ return;
}
-
- ~CFX_CountRef()
- {
- if (!m_pObject) {
- return;
- }
- m_pObject->m_RefCount --;
- if (m_pObject->m_RefCount <= 0) {
- delete m_pObject;
- }
+ m_pObject->m_RefCount--;
+ if (m_pObject->m_RefCount <= 0) {
+ delete m_pObject;
}
+ }
- ObjClass* New()
- {
- if (m_pObject) {
- m_pObject->m_RefCount --;
- if (m_pObject->m_RefCount <= 0) {
- delete m_pObject;
- }
- }
- m_pObject = new CountedObj;
- m_pObject->m_RefCount = 1;
- return m_pObject;
+ ObjClass* New() {
+ if (m_pObject) {
+ m_pObject->m_RefCount--;
+ if (m_pObject->m_RefCount <= 0) {
+ delete m_pObject;
+ }
}
+ m_pObject = new CountedObj;
+ m_pObject->m_RefCount = 1;
+ return m_pObject;
+ }
- void operator = (const Ref& ref)
- {
- if (ref.m_pObject) {
- ref.m_pObject->m_RefCount ++;
- }
- if (m_pObject) {
- m_pObject->m_RefCount --;
- if (m_pObject->m_RefCount <= 0) {
- delete m_pObject;
- }
- }
- m_pObject = ref.m_pObject;
+ void operator=(const Ref& ref) {
+ if (ref.m_pObject) {
+ ref.m_pObject->m_RefCount++;
}
-
- void operator = (void* p)
- {
- FXSYS_assert(p == 0);
- if (m_pObject == NULL) {
- return;
- }
- m_pObject->m_RefCount --;
- if (m_pObject->m_RefCount <= 0) {
- delete m_pObject;
- }
- m_pObject = NULL;
+ if (m_pObject) {
+ m_pObject->m_RefCount--;
+ if (m_pObject->m_RefCount <= 0) {
+ delete m_pObject;
+ }
}
+ m_pObject = ref.m_pObject;
+ }
- const ObjClass* GetObject() const
- {
- return m_pObject;
+ void operator=(void* p) {
+ FXSYS_assert(p == 0);
+ if (m_pObject == NULL) {
+ return;
}
-
- operator const ObjClass*() const
- {
- return m_pObject;
+ m_pObject->m_RefCount--;
+ if (m_pObject->m_RefCount <= 0) {
+ delete m_pObject;
}
+ m_pObject = NULL;
+ }
- FX_BOOL IsNull() const
- {
- return m_pObject == NULL;
- }
+ const ObjClass* GetObject() const { return m_pObject; }
- FX_BOOL NotNull() const
- {
- return m_pObject != NULL;
- }
+ operator const ObjClass*() const { return m_pObject; }
- ObjClass* GetModify()
- {
- if (m_pObject == NULL) {
- m_pObject = new CountedObj;
- m_pObject->m_RefCount = 1;
- } else if (m_pObject->m_RefCount > 1) {
- m_pObject->m_RefCount --;
- CountedObj* pOldObject = m_pObject;
- m_pObject = new CountedObj(*pOldObject);
- m_pObject->m_RefCount = 1;
- }
- return m_pObject;
- }
+ FX_BOOL IsNull() const { return m_pObject == NULL; }
- void SetNull()
- {
- if (m_pObject == NULL) {
- return;
- }
- m_pObject->m_RefCount --;
- if (m_pObject->m_RefCount <= 0) {
- delete m_pObject;
- }
- m_pObject = NULL;
+ FX_BOOL NotNull() const { return m_pObject != NULL; }
+
+ ObjClass* GetModify() {
+ if (m_pObject == NULL) {
+ m_pObject = new CountedObj;
+ m_pObject->m_RefCount = 1;
+ } else if (m_pObject->m_RefCount > 1) {
+ m_pObject->m_RefCount--;
+ CountedObj* pOldObject = m_pObject;
+ m_pObject = new CountedObj(*pOldObject);
+ m_pObject->m_RefCount = 1;
}
+ return m_pObject;
+ }
- FX_BOOL operator == (const Ref& ref) const
- {
- return m_pObject == ref.m_pObject;
+ void SetNull() {
+ if (m_pObject == NULL) {
+ return;
}
-protected:
+ m_pObject->m_RefCount--;
+ if (m_pObject->m_RefCount <= 0) {
+ delete m_pObject;
+ }
+ m_pObject = NULL;
+ }
+
+ FX_BOOL operator==(const Ref& ref) const {
+ return m_pObject == ref.m_pObject;
+ }
- CountedObj* m_pObject;
+ protected:
+ CountedObj* m_pObject;
};
-class IFX_Pause
-{
-public:
- virtual ~IFX_Pause() { }
- virtual FX_BOOL NeedToPauseNow() = 0;
+class IFX_Pause {
+ public:
+ virtual ~IFX_Pause() {}
+ virtual FX_BOOL NeedToPauseNow() = 0;
};
-class CFX_DataFilter
-{
-public:
-
- virtual ~CFX_DataFilter();
+class CFX_DataFilter {
+ public:
+ virtual ~CFX_DataFilter();
- void SetDestFilter(CFX_DataFilter* pFilter);
+ void SetDestFilter(CFX_DataFilter* pFilter);
- FX_BOOL IsEOF() const
- {
- return m_bEOF;
- }
+ FX_BOOL IsEOF() const { return m_bEOF; }
- FX_DWORD GetSrcPos()
- {
- return m_SrcPos;
- }
+ FX_DWORD GetSrcPos() { return m_SrcPos; }
- void FilterIn(const uint8_t* src_buf, FX_DWORD src_size, CFX_BinaryBuf& dest_buf);
+ void FilterIn(const uint8_t* src_buf,
+ FX_DWORD src_size,
+ CFX_BinaryBuf& dest_buf);
- void FilterFinish(CFX_BinaryBuf& dest_buf);
-protected:
+ void FilterFinish(CFX_BinaryBuf& dest_buf);
- CFX_DataFilter();
- virtual void v_FilterIn(const uint8_t* src_buf, FX_DWORD src_size, CFX_BinaryBuf& dest_buf) = 0;
- virtual void v_FilterFinish(CFX_BinaryBuf& dest_buf) = 0;
- void ReportEOF(FX_DWORD left_input);
+ protected:
+ CFX_DataFilter();
+ virtual void v_FilterIn(const uint8_t* src_buf,
+ FX_DWORD src_size,
+ CFX_BinaryBuf& dest_buf) = 0;
+ virtual void v_FilterFinish(CFX_BinaryBuf& dest_buf) = 0;
+ void ReportEOF(FX_DWORD left_input);
- FX_BOOL m_bEOF;
+ FX_BOOL m_bEOF;
- FX_DWORD m_SrcPos;
+ FX_DWORD m_SrcPos;
- CFX_DataFilter* m_pDestFilter;
+ CFX_DataFilter* m_pDestFilter;
};
-template<typename T>
+template <typename T>
class CFX_AutoRestorer {
-public:
- explicit CFX_AutoRestorer(T* location) {
- m_Location = location;
- m_OldValue = *location;
- }
- ~CFX_AutoRestorer() { *m_Location = m_OldValue; }
-
-private:
+ public:
+ explicit CFX_AutoRestorer(T* location) {
+ m_Location = location;
+ m_OldValue = *location;
+ }
+ ~CFX_AutoRestorer() { *m_Location = m_OldValue; }
+
+ private:
T* m_Location;
T m_OldValue;
};
template <class T>
-class CFX_SmartPointer
-{
-public:
- CFX_SmartPointer(T *pObj) : m_pObj(pObj) {}
- ~CFX_SmartPointer()
- {
- m_pObj->Release();
- }
- T* Get(void)
- {
- return m_pObj;
- }
- T& operator *(void)
- {
- return *m_pObj;
- }
- T* operator ->(void)
- {
- return m_pObj;
- }
-protected:
- T *m_pObj;
+class CFX_SmartPointer {
+ public:
+ CFX_SmartPointer(T* pObj) : m_pObj(pObj) {}
+ ~CFX_SmartPointer() { m_pObj->Release(); }
+ T* Get(void) { return m_pObj; }
+ T& operator*(void) { return *m_pObj; }
+ T* operator->(void) { return m_pObj; }
+
+ protected:
+ T* m_pObj;
};
-#define FX_DATALIST_LENGTH 1024
-template<size_t unit>
-class CFX_SortListArray
-{
-protected:
-
- struct DataList {
-
- int32_t start;
-
- int32_t count;
- uint8_t* data;
- };
-public:
-
- CFX_SortListArray() : m_CurList(0) {}
-
- ~CFX_SortListArray()
- {
- Clear();
- }
-
-
- void Clear()
- {
- for (int32_t i = m_DataLists.GetUpperBound(); i >= 0; i--) {
- DataList list = m_DataLists.ElementAt(i);
- if (list.data) {
- FX_Free(list.data);
- }
- }
- m_DataLists.RemoveAll();
- m_CurList = 0;
- }
-
- void Append(int32_t nStart, int32_t nCount)
- {
- if (nStart < 0) {
- return;
- }
- while (nCount > 0) {
- int32_t temp_count = FX_MIN(nCount, FX_DATALIST_LENGTH);
- DataList list;
- list.data = FX_Alloc2D(uint8_t, temp_count, unit);
- list.start = nStart;
- list.count = temp_count;
- Append(list);
- nCount -= temp_count;
- nStart += temp_count;
- }
- }
-
- uint8_t* GetAt(int32_t nIndex)
- {
- if (nIndex < 0) {
- return NULL;
- }
- if (m_CurList < 0 || m_CurList >= m_DataLists.GetSize()) {
- return NULL;
+#define FX_DATALIST_LENGTH 1024
+template <size_t unit>
+class CFX_SortListArray {
+ protected:
+ struct DataList {
+ int32_t start;
+
+ int32_t count;
+ uint8_t* data;
+ };
+
+ public:
+ CFX_SortListArray() : m_CurList(0) {}
+
+ ~CFX_SortListArray() { Clear(); }
+
+ void Clear() {
+ for (int32_t i = m_DataLists.GetUpperBound(); i >= 0; i--) {
+ DataList list = m_DataLists.ElementAt(i);
+ if (list.data) {
+ FX_Free(list.data);
+ }
+ }
+ m_DataLists.RemoveAll();
+ m_CurList = 0;
+ }
+
+ void Append(int32_t nStart, int32_t nCount) {
+ if (nStart < 0) {
+ return;
+ }
+ while (nCount > 0) {
+ int32_t temp_count = FX_MIN(nCount, FX_DATALIST_LENGTH);
+ DataList list;
+ list.data = FX_Alloc2D(uint8_t, temp_count, unit);
+ list.start = nStart;
+ list.count = temp_count;
+ Append(list);
+ nCount -= temp_count;
+ nStart += temp_count;
+ }
+ }
+
+ uint8_t* GetAt(int32_t nIndex) {
+ if (nIndex < 0) {
+ return NULL;
+ }
+ if (m_CurList < 0 || m_CurList >= m_DataLists.GetSize()) {
+ return NULL;
+ }
+ DataList* pCurList = m_DataLists.GetDataPtr(m_CurList);
+ if (!pCurList || nIndex < pCurList->start ||
+ nIndex >= pCurList->start + pCurList->count) {
+ pCurList = NULL;
+ int32_t iStart = 0;
+ int32_t iEnd = m_DataLists.GetUpperBound();
+ int32_t iMid = 0;
+ while (iStart <= iEnd) {
+ iMid = (iStart + iEnd) / 2;
+ DataList* list = m_DataLists.GetDataPtr(iMid);
+ if (nIndex < list->start) {
+ iEnd = iMid - 1;
+ } else if (nIndex >= list->start + list->count) {
+ iStart = iMid + 1;
+ } else {
+ pCurList = list;
+ m_CurList = iMid;
+ break;
}
- DataList *pCurList = m_DataLists.GetDataPtr(m_CurList);
- if (!pCurList || nIndex < pCurList->start || nIndex >= pCurList->start + pCurList->count) {
- pCurList = NULL;
- int32_t iStart = 0;
- int32_t iEnd = m_DataLists.GetUpperBound();
- int32_t iMid = 0;
- while (iStart <= iEnd) {
- iMid = (iStart + iEnd) / 2;
- DataList* list = m_DataLists.GetDataPtr(iMid);
- if (nIndex < list->start) {
- iEnd = iMid - 1;
- } else if (nIndex >= list->start + list->count) {
- iStart = iMid + 1;
- } else {
- pCurList = list;
- m_CurList = iMid;
- break;
- }
- }
+ }
+ }
+ return pCurList ? pCurList->data + (nIndex - pCurList->start) * unit : NULL;
+ }
+
+ protected:
+ void Append(const DataList& list) {
+ int32_t iStart = 0;
+ int32_t iEnd = m_DataLists.GetUpperBound();
+ int32_t iFind = 0;
+ while (iStart <= iEnd) {
+ int32_t iMid = (iStart + iEnd) / 2;
+ DataList* cur_list = m_DataLists.GetDataPtr(iMid);
+ if (list.start < cur_list->start + cur_list->count) {
+ iEnd = iMid - 1;
+ } else {
+ if (iMid == iEnd) {
+ iFind = iMid + 1;
+ break;
}
- return pCurList ? pCurList->data + (nIndex - pCurList->start) * unit : NULL;
- }
-protected:
- void Append(const DataList& list)
- {
- int32_t iStart = 0;
- int32_t iEnd = m_DataLists.GetUpperBound();
- int32_t iFind = 0;
- while (iStart <= iEnd) {
- int32_t iMid = (iStart + iEnd) / 2;
- DataList* cur_list = m_DataLists.GetDataPtr(iMid);
- if (list.start < cur_list->start + cur_list->count) {
- iEnd = iMid - 1;
- } else {
- if (iMid == iEnd) {
- iFind = iMid + 1;
- break;
- }
- DataList* next_list = m_DataLists.GetDataPtr(iMid + 1);
- if (list.start < next_list->start) {
- iFind = iMid + 1;
- break;
- } else {
- iStart = iMid + 1;
- }
- }
+ DataList* next_list = m_DataLists.GetDataPtr(iMid + 1);
+ if (list.start < next_list->start) {
+ iFind = iMid + 1;
+ break;
+ } else {
+ iStart = iMid + 1;
}
- m_DataLists.InsertAt(iFind, list);
+ }
}
- int32_t m_CurList;
- CFX_ArrayTemplate<DataList> m_DataLists;
+ m_DataLists.InsertAt(iFind, list);
+ }
+ int32_t m_CurList;
+ CFX_ArrayTemplate<DataList> m_DataLists;
};
-template<typename T1, typename T2>
-class CFX_ListArrayTemplate
-{
-public:
-
- void Clear()
- {
- m_Data.Clear();
- }
+template <typename T1, typename T2>
+class CFX_ListArrayTemplate {
+ public:
+ void Clear() { m_Data.Clear(); }
- void Add(int32_t nStart, int32_t nCount)
- {
- m_Data.Append(nStart, nCount);
- }
+ void Add(int32_t nStart, int32_t nCount) { m_Data.Append(nStart, nCount); }
- T2& operator [] (int32_t nIndex)
- {
- uint8_t* data = m_Data.GetAt(nIndex);
- FXSYS_assert(data != NULL);
- return (T2&)(*(volatile T2*)data);
- }
+ T2& operator[](int32_t nIndex) {
+ uint8_t* data = m_Data.GetAt(nIndex);
+ FXSYS_assert(data != NULL);
+ return (T2&)(*(volatile T2*)data);
+ }
- T2* GetPtrAt(int32_t nIndex)
- {
- return (T2*)m_Data.GetAt(nIndex);
- }
-protected:
- T1 m_Data;
+ T2* GetPtrAt(int32_t nIndex) { return (T2*)m_Data.GetAt(nIndex); }
+
+ protected:
+ T1 m_Data;
};
-typedef CFX_ListArrayTemplate<CFX_SortListArray<sizeof(FX_FILESIZE)>, FX_FILESIZE> CFX_FileSizeListArray;
-typedef CFX_ListArrayTemplate<CFX_SortListArray<sizeof(FX_DWORD)>, FX_DWORD> CFX_DWordListArray;
+typedef CFX_ListArrayTemplate<CFX_SortListArray<sizeof(FX_FILESIZE)>,
+ FX_FILESIZE> CFX_FileSizeListArray;
+typedef CFX_ListArrayTemplate<CFX_SortListArray<sizeof(FX_DWORD)>, FX_DWORD>
+ CFX_DWordListArray;
typedef enum {
- Ready,
- ToBeContinued,
- Found,
- NotFound,
- Failed,
- Done
+ Ready,
+ ToBeContinued,
+ Found,
+ NotFound,
+ Failed,
+ Done
} FX_ProgressiveStatus;
-#define ProgressiveStatus FX_ProgressiveStatus
-#define FX_NAMESPACE_DECLARE(namespace, type) namespace::type
-
-class CFX_Vector_3by1
-{
-public:
+#define ProgressiveStatus FX_ProgressiveStatus
+#define FX_NAMESPACE_DECLARE(namespace, type) namespace ::type
- CFX_Vector_3by1() :
- a(0.0f), b(0.0f), c(0.0f)
- {}
+class CFX_Vector_3by1 {
+ public:
+ CFX_Vector_3by1() : a(0.0f), b(0.0f), c(0.0f) {}
- CFX_Vector_3by1(FX_FLOAT a1, FX_FLOAT b1, FX_FLOAT c1):
- a(a1), b(b1), c(c1)
- {}
+ CFX_Vector_3by1(FX_FLOAT a1, FX_FLOAT b1, FX_FLOAT c1)
+ : a(a1), b(b1), c(c1) {}
- FX_FLOAT a;
- FX_FLOAT b;
- FX_FLOAT c;
+ FX_FLOAT a;
+ FX_FLOAT b;
+ FX_FLOAT c;
};
-class CFX_Matrix_3by3
-{
-public:
-
- CFX_Matrix_3by3():
- a(0.0f), b(0.0f), c(0.0f), d(0.0f), e(0.0f), f(0.0f), g(0.0f), h(0.0f), i(0.0f)
- {}
-
- CFX_Matrix_3by3(FX_FLOAT a1, FX_FLOAT b1, FX_FLOAT c1, FX_FLOAT d1, FX_FLOAT e1, FX_FLOAT f1, FX_FLOAT g1, FX_FLOAT h1, FX_FLOAT i1) :
- a(a1), b(b1), c(c1), d(d1), e(e1), f(f1), g(g1), h(h1), i(i1)
- {}
-
- CFX_Matrix_3by3 Inverse();
-
- CFX_Matrix_3by3 Multiply(const CFX_Matrix_3by3 &m);
-
- CFX_Vector_3by1 TransformVector(const CFX_Vector_3by1 &v);
-
- FX_FLOAT a;
- FX_FLOAT b;
- FX_FLOAT c;
- FX_FLOAT d;
- FX_FLOAT e;
- FX_FLOAT f;
- FX_FLOAT g;
- FX_FLOAT h;
- FX_FLOAT i;
+class CFX_Matrix_3by3 {
+ public:
+ CFX_Matrix_3by3()
+ : a(0.0f),
+ b(0.0f),
+ c(0.0f),
+ d(0.0f),
+ e(0.0f),
+ f(0.0f),
+ g(0.0f),
+ h(0.0f),
+ i(0.0f) {}
+
+ CFX_Matrix_3by3(FX_FLOAT a1,
+ FX_FLOAT b1,
+ FX_FLOAT c1,
+ FX_FLOAT d1,
+ FX_FLOAT e1,
+ FX_FLOAT f1,
+ FX_FLOAT g1,
+ FX_FLOAT h1,
+ FX_FLOAT i1)
+ : a(a1), b(b1), c(c1), d(d1), e(e1), f(f1), g(g1), h(h1), i(i1) {}
+
+ CFX_Matrix_3by3 Inverse();
+
+ CFX_Matrix_3by3 Multiply(const CFX_Matrix_3by3& m);
+
+ CFX_Vector_3by1 TransformVector(const CFX_Vector_3by1& v);
+
+ FX_FLOAT a;
+ FX_FLOAT b;
+ FX_FLOAT c;
+ FX_FLOAT d;
+ FX_FLOAT e;
+ FX_FLOAT f;
+ FX_FLOAT g;
+ FX_FLOAT h;
+ FX_FLOAT i;
};
#endif // CORE_INCLUDE_FXCRT_FX_BASIC_H_
diff --git a/core/include/fxcrt/fx_coordinates.h b/core/include/fxcrt/fx_coordinates.h
index 3689a4b270..ddd0f572c8 100644
--- a/core/include/fxcrt/fx_coordinates.h
+++ b/core/include/fxcrt/fx_coordinates.h
@@ -9,905 +9,744 @@
#include "fx_basic.h"
-template<class baseType> class CFX_PSVTemplate;
-template<class baseType> class CFX_VTemplate;
-template<class baseType> class CFX_PRLTemplate;
-template<class baseType> class CFX_RTemplate;
-template<class baseType> class CFX_ETemplate;
-template<class baseType> class CFX_ATemplate;
-template<class baseType> class CFX_RRTemplate;
+template <class baseType>
+class CFX_PSVTemplate;
+template <class baseType>
+class CFX_VTemplate;
+template <class baseType>
+class CFX_PRLTemplate;
+template <class baseType>
+class CFX_RTemplate;
+template <class baseType>
+class CFX_ETemplate;
+template <class baseType>
+class CFX_ATemplate;
+template <class baseType>
+class CFX_RRTemplate;
class CFX_Matrix;
-template<class baseType>
-class CFX_PSVTemplate
-{
-public:
- typedef CFX_PSVTemplate<baseType> FXT_PSV;
- typedef CFX_PSVTemplate<baseType> FXT_POINT;
- typedef CFX_PSVTemplate<baseType> FXT_SIZE;
- void Set(baseType x, baseType y)
- {
- FXT_PSV::x = x, FXT_PSV::y = y;
- }
- void Set(const FXT_PSV &psv)
- {
- FXT_PSV::x = psv.x, FXT_PSV::y = psv.y;
- }
- void Add(baseType x, baseType y)
- {
- FXT_PSV::x += x, FXT_PSV::y += y;
- }
- void Subtract(baseType x, baseType y)
- {
- FXT_PSV::x -= x, FXT_PSV::y -= y;
- }
- void Reset()
- {
- FXT_PSV::x = FXT_PSV::y = 0;
- }
- FXT_PSV& operator += (const FXT_PSV &obj)
- {
- x += obj.x;
- y += obj.y;
- return *this;
- }
- FXT_PSV& operator -= (const FXT_PSV &obj)
- {
- x -= obj.x;
- y -= obj.y;
- return *this;
- }
- FXT_PSV& operator *= (baseType lamda)
- {
- x *= lamda;
- y *= lamda;
- return *this;
- }
- FXT_PSV& operator /= (baseType lamda)
- {
- x /= lamda;
- y /= lamda;
- return *this;
- }
- friend FX_BOOL operator == (const FXT_PSV &obj1, const FXT_PSV &obj2)
- {
- return obj1.x == obj2.x && obj1.y == obj2.y;
- }
- friend FX_BOOL operator != (const FXT_PSV &obj1, const FXT_PSV &obj2)
- {
- return obj1.x != obj2.x || obj1.y != obj2.y;
- }
- friend FXT_PSV operator + (const FXT_PSV &obj1, const FXT_PSV &obj2)
- {
- CFX_PSVTemplate obj;
- obj.x = obj1.x + obj2.x;
- obj.y = obj1.y + obj2.y;
- return obj;
- }
- friend FXT_PSV operator - (const FXT_PSV &obj1, const FXT_PSV &obj2)
- {
- CFX_PSVTemplate obj;
- obj.x = obj1.x - obj2.x;
- obj.y = obj1.y - obj2.y;
- return obj;
- }
- friend FXT_PSV operator * (const FXT_PSV &obj, baseType lamda)
- {
- CFX_PSVTemplate t;
- t.x = obj.x * lamda;
- t.y = obj.y * lamda;
- return t;
- }
- friend FXT_PSV operator * (baseType lamda, const FXT_PSV &obj)
- {
- CFX_PSVTemplate t;
- t.x = lamda * obj.x;
- t.y = lamda * obj.y;
- return t;
- }
- friend FXT_PSV operator / (const FXT_PSV &obj, baseType lamda)
- {
- CFX_PSVTemplate t;
- t.x = obj.x / lamda;
- t.y = obj.y / lamda;
- return t;
- }
- baseType x, y;
+template <class baseType>
+class CFX_PSVTemplate {
+ public:
+ typedef CFX_PSVTemplate<baseType> FXT_PSV;
+ typedef CFX_PSVTemplate<baseType> FXT_POINT;
+ typedef CFX_PSVTemplate<baseType> FXT_SIZE;
+ void Set(baseType x, baseType y) { FXT_PSV::x = x, FXT_PSV::y = y; }
+ void Set(const FXT_PSV& psv) { FXT_PSV::x = psv.x, FXT_PSV::y = psv.y; }
+ void Add(baseType x, baseType y) { FXT_PSV::x += x, FXT_PSV::y += y; }
+ void Subtract(baseType x, baseType y) { FXT_PSV::x -= x, FXT_PSV::y -= y; }
+ void Reset() { FXT_PSV::x = FXT_PSV::y = 0; }
+ FXT_PSV& operator+=(const FXT_PSV& obj) {
+ x += obj.x;
+ y += obj.y;
+ return *this;
+ }
+ FXT_PSV& operator-=(const FXT_PSV& obj) {
+ x -= obj.x;
+ y -= obj.y;
+ return *this;
+ }
+ FXT_PSV& operator*=(baseType lamda) {
+ x *= lamda;
+ y *= lamda;
+ return *this;
+ }
+ FXT_PSV& operator/=(baseType lamda) {
+ x /= lamda;
+ y /= lamda;
+ return *this;
+ }
+ friend FX_BOOL operator==(const FXT_PSV& obj1, const FXT_PSV& obj2) {
+ return obj1.x == obj2.x && obj1.y == obj2.y;
+ }
+ friend FX_BOOL operator!=(const FXT_PSV& obj1, const FXT_PSV& obj2) {
+ return obj1.x != obj2.x || obj1.y != obj2.y;
+ }
+ friend FXT_PSV operator+(const FXT_PSV& obj1, const FXT_PSV& obj2) {
+ CFX_PSVTemplate obj;
+ obj.x = obj1.x + obj2.x;
+ obj.y = obj1.y + obj2.y;
+ return obj;
+ }
+ friend FXT_PSV operator-(const FXT_PSV& obj1, const FXT_PSV& obj2) {
+ CFX_PSVTemplate obj;
+ obj.x = obj1.x - obj2.x;
+ obj.y = obj1.y - obj2.y;
+ return obj;
+ }
+ friend FXT_PSV operator*(const FXT_PSV& obj, baseType lamda) {
+ CFX_PSVTemplate t;
+ t.x = obj.x * lamda;
+ t.y = obj.y * lamda;
+ return t;
+ }
+ friend FXT_PSV operator*(baseType lamda, const FXT_PSV& obj) {
+ CFX_PSVTemplate t;
+ t.x = lamda * obj.x;
+ t.y = lamda * obj.y;
+ return t;
+ }
+ friend FXT_PSV operator/(const FXT_PSV& obj, baseType lamda) {
+ CFX_PSVTemplate t;
+ t.x = obj.x / lamda;
+ t.y = obj.y / lamda;
+ return t;
+ }
+ baseType x, y;
};
-typedef CFX_PSVTemplate<int32_t> CFX_Point;
-typedef CFX_PSVTemplate<FX_FLOAT> CFX_PointF;
-typedef CFX_PSVTemplate<int32_t> CFX_Size;
-typedef CFX_PSVTemplate<FX_FLOAT> CFX_SizeF;
-typedef CFX_ArrayTemplate<CFX_Point> CFX_Points;
-typedef CFX_ArrayTemplate<CFX_PointF> CFX_PointsF;
-typedef CFX_PSVTemplate<int32_t> * FX_LPPOINT;
-typedef CFX_PSVTemplate<FX_FLOAT> * FX_LPPOINTF;
-typedef CFX_PSVTemplate<int32_t> const * FX_LPCPOINT;
-typedef CFX_PSVTemplate<FX_FLOAT> const * FX_LPCPOINTF;
-#define CFX_FloatPoint CFX_PointF
-template<class baseType>
-class CFX_VTemplate: public CFX_PSVTemplate<baseType>
-{
-public:
- typedef CFX_PSVTemplate<baseType> FXT_PSV;
- typedef CFX_PSVTemplate<baseType> FXT_POINT;
- typedef CFX_PSVTemplate<baseType> FXT_SIZE;
- typedef CFX_VTemplate<baseType> FXT_VECTOR;
- void Set(baseType newx, baseType newy)
- {
- FXT_PSV::x = newx;
- FXT_PSV::y = newy;
- }
- void Set(const FXT_PSV &psv)
- {
- FXT_PSV::x = psv.x, FXT_PSV::y = psv.y;
- }
- void Set(const FXT_POINT &p1, const FXT_POINT &p2)
- {
- FXT_PSV::x = p2.x - p1.x, FXT_PSV::y = p2.y - p1.y;
- }
- void Reset()
- {
- FXT_PSV::x = FXT_PSV::y = 0;
- }
- baseType SquareLength() const
- {
- return FXT_PSV::x * FXT_PSV::x + FXT_PSV::y * FXT_PSV::y;
- }
- baseType Length() const
- {
- return FXSYS_sqrt(FXT_PSV::x * FXT_PSV::x + FXT_PSV::y * FXT_PSV::y);
- }
- void Normalize()
- {
- FX_FLOAT fLen = FXSYS_sqrt(FXT_PSV::x * FXT_PSV::x + FXT_PSV::y * FXT_PSV::y);
- if (fLen < 0.0001f) {
- return;
- }
- FXT_PSV::x = ((baseType)FXT_PSV::x) / fLen;
- FXT_PSV::y = ((baseType)FXT_PSV::y) / fLen;
- }
- baseType DotProduct(baseType otherx, baseType othery) const
- {
- return FXT_PSV::x * otherx + FXT_PSV::y * othery;
- }
- baseType DotProduct(const FXT_VECTOR &v) const
- {
- return FXT_PSV::x * v.x + FXT_PSV::y * v.y;
- }
- FX_BOOL IsParallel(baseType otherx, baseType othery) const
- {
- baseType t = FXT_PSV::x * othery - FXT_PSV::y * otherx;
- return FXSYS_fabs(t) < 0x0001f;
- }
- FX_BOOL IsParallel(const FXT_VECTOR &v) const
- {
- return IsParallel(v.x, v.y);
- }
- FX_BOOL IsPerpendicular(baseType otherx, baseType othery) const
- {
- baseType t = DotProduct(otherx, othery);
- return FXSYS_fabs(t) < 0x0001f;
- }
- FX_BOOL IsPerpendicular(const FXT_VECTOR &v) const
- {
- return IsPerpendicular(v.x, v.y);
- }
- void Translate(baseType dx, baseType dy)
- {
- FXT_PSV::x += dx, FXT_PSV::y += dy;
- }
- void Scale(baseType sx, baseType sy)
- {
- FXT_PSV::x *= sx, FXT_PSV::y *= sy;
- }
- void Rotate(FX_FLOAT fRadian)
- {
- FX_FLOAT xx = (FX_FLOAT)FXT_PSV::x;
- FX_FLOAT yy = (FX_FLOAT)FXT_PSV::y;
- FX_FLOAT cosValue = FXSYS_cos(fRadian);
- FX_FLOAT sinValue = FXSYS_sin(fRadian);
- FXT_PSV::x = xx * cosValue - yy * sinValue;
- FXT_PSV::y = xx * sinValue + yy * cosValue;
- }
- friend FX_FLOAT Cosine(const FXT_VECTOR &v1, const FXT_VECTOR &v2)
- {
- FXSYS_assert(v1.SquareLength() != 0 && v2.SquareLength() != 0);
- FX_FLOAT dotProduct = v1.DotProduct(v2);
- return dotProduct / (FX_FLOAT)FXSYS_sqrt(v1.SquareLength() * v2.SquareLength());
- }
- friend FX_FLOAT ArcCosine(const FXT_VECTOR &v1, const FXT_VECTOR &v2)
- {
- return (FX_FLOAT)FXSYS_acos(Cosine(v1, v2));
- }
- friend FX_FLOAT SlopeAngle(const FXT_VECTOR &v)
- {
- CFX_VTemplate vx;
- vx.Set(1, 0);
- FX_FLOAT fSlope = ArcCosine(v, vx);
- return v.y < 0 ? -fSlope : fSlope;
- }
+typedef CFX_PSVTemplate<int32_t> CFX_Point;
+typedef CFX_PSVTemplate<FX_FLOAT> CFX_PointF;
+typedef CFX_PSVTemplate<int32_t> CFX_Size;
+typedef CFX_PSVTemplate<FX_FLOAT> CFX_SizeF;
+typedef CFX_ArrayTemplate<CFX_Point> CFX_Points;
+typedef CFX_ArrayTemplate<CFX_PointF> CFX_PointsF;
+typedef CFX_PSVTemplate<int32_t>* FX_LPPOINT;
+typedef CFX_PSVTemplate<FX_FLOAT>* FX_LPPOINTF;
+typedef CFX_PSVTemplate<int32_t> const* FX_LPCPOINT;
+typedef CFX_PSVTemplate<FX_FLOAT> const* FX_LPCPOINTF;
+#define CFX_FloatPoint CFX_PointF
+template <class baseType>
+class CFX_VTemplate : public CFX_PSVTemplate<baseType> {
+ public:
+ typedef CFX_PSVTemplate<baseType> FXT_PSV;
+ typedef CFX_PSVTemplate<baseType> FXT_POINT;
+ typedef CFX_PSVTemplate<baseType> FXT_SIZE;
+ typedef CFX_VTemplate<baseType> FXT_VECTOR;
+ void Set(baseType newx, baseType newy) {
+ FXT_PSV::x = newx;
+ FXT_PSV::y = newy;
+ }
+ void Set(const FXT_PSV& psv) { FXT_PSV::x = psv.x, FXT_PSV::y = psv.y; }
+ void Set(const FXT_POINT& p1, const FXT_POINT& p2) {
+ FXT_PSV::x = p2.x - p1.x, FXT_PSV::y = p2.y - p1.y;
+ }
+ void Reset() { FXT_PSV::x = FXT_PSV::y = 0; }
+ baseType SquareLength() const {
+ return FXT_PSV::x * FXT_PSV::x + FXT_PSV::y * FXT_PSV::y;
+ }
+ baseType Length() const {
+ return FXSYS_sqrt(FXT_PSV::x * FXT_PSV::x + FXT_PSV::y * FXT_PSV::y);
+ }
+ void Normalize() {
+ FX_FLOAT fLen =
+ FXSYS_sqrt(FXT_PSV::x * FXT_PSV::x + FXT_PSV::y * FXT_PSV::y);
+ if (fLen < 0.0001f) {
+ return;
+ }
+ FXT_PSV::x = ((baseType)FXT_PSV::x) / fLen;
+ FXT_PSV::y = ((baseType)FXT_PSV::y) / fLen;
+ }
+ baseType DotProduct(baseType otherx, baseType othery) const {
+ return FXT_PSV::x * otherx + FXT_PSV::y * othery;
+ }
+ baseType DotProduct(const FXT_VECTOR& v) const {
+ return FXT_PSV::x * v.x + FXT_PSV::y * v.y;
+ }
+ FX_BOOL IsParallel(baseType otherx, baseType othery) const {
+ baseType t = FXT_PSV::x * othery - FXT_PSV::y * otherx;
+ return FXSYS_fabs(t) < 0x0001f;
+ }
+ FX_BOOL IsParallel(const FXT_VECTOR& v) const { return IsParallel(v.x, v.y); }
+ FX_BOOL IsPerpendicular(baseType otherx, baseType othery) const {
+ baseType t = DotProduct(otherx, othery);
+ return FXSYS_fabs(t) < 0x0001f;
+ }
+ FX_BOOL IsPerpendicular(const FXT_VECTOR& v) const {
+ return IsPerpendicular(v.x, v.y);
+ }
+ void Translate(baseType dx, baseType dy) {
+ FXT_PSV::x += dx, FXT_PSV::y += dy;
+ }
+ void Scale(baseType sx, baseType sy) { FXT_PSV::x *= sx, FXT_PSV::y *= sy; }
+ void Rotate(FX_FLOAT fRadian) {
+ FX_FLOAT xx = (FX_FLOAT)FXT_PSV::x;
+ FX_FLOAT yy = (FX_FLOAT)FXT_PSV::y;
+ FX_FLOAT cosValue = FXSYS_cos(fRadian);
+ FX_FLOAT sinValue = FXSYS_sin(fRadian);
+ FXT_PSV::x = xx * cosValue - yy * sinValue;
+ FXT_PSV::y = xx * sinValue + yy * cosValue;
+ }
+ friend FX_FLOAT Cosine(const FXT_VECTOR& v1, const FXT_VECTOR& v2) {
+ FXSYS_assert(v1.SquareLength() != 0 && v2.SquareLength() != 0);
+ FX_FLOAT dotProduct = v1.DotProduct(v2);
+ return dotProduct /
+ (FX_FLOAT)FXSYS_sqrt(v1.SquareLength() * v2.SquareLength());
+ }
+ friend FX_FLOAT ArcCosine(const FXT_VECTOR& v1, const FXT_VECTOR& v2) {
+ return (FX_FLOAT)FXSYS_acos(Cosine(v1, v2));
+ }
+ friend FX_FLOAT SlopeAngle(const FXT_VECTOR& v) {
+ CFX_VTemplate vx;
+ vx.Set(1, 0);
+ FX_FLOAT fSlope = ArcCosine(v, vx);
+ return v.y < 0 ? -fSlope : fSlope;
+ }
};
typedef CFX_VTemplate<int32_t> CFX_Vector;
typedef CFX_VTemplate<FX_FLOAT> CFX_VectorF;
-template<class baseType>
-class CFX_RTemplate
-{
-public:
- typedef CFX_PSVTemplate<baseType> FXT_POINT;
- typedef CFX_PSVTemplate<baseType> FXT_SIZE;
- typedef CFX_VTemplate<baseType> FXT_VECTOR;
- typedef CFX_PRLTemplate<baseType> FXT_PARAL;
- typedef CFX_RTemplate<baseType> FXT_RECT;
- void Set(baseType left, baseType top, baseType width, baseType height)
- {
- FXT_RECT::left = left, FXT_RECT::top = top, FXT_RECT::width = width, FXT_RECT::height = height;
- }
- void Set(baseType left, baseType top, const FXT_SIZE &size)
- {
- FXT_RECT::left = left, FXT_RECT::top = top, FXT_RECT::Size(size);
- }
- void Set(const FXT_POINT &p, baseType width, baseType height)
- {
- TopLeft(p), FXT_RECT::width = width, FXT_RECT::height = height;
- }
- void Set(const FXT_POINT &p1, const FXT_POINT &p2)
- {
- TopLeft(p1), FXT_RECT::width = p2.x - p1.x, FXT_RECT::height = p2.y - p1.y, FXT_RECT::Normalize();
- }
- void Set(const FXT_POINT &p, const FXT_VECTOR &v)
- {
- TopLeft(p), FXT_RECT::width = v.x, FXT_RECT::height = v.y, FXT_RECT::Normalize();
- }
- void Reset()
- {
- FXT_RECT::left = FXT_RECT::top = FXT_RECT::width = FXT_RECT::height = 0;
- }
- FXT_RECT& operator += (const FXT_POINT &p)
- {
- left += p.x, top += p.y;
- return *this;
- }
- FXT_RECT& operator -= (const FXT_POINT &p)
- {
- left -= p.x, top -= p.y;
- return *this;
- }
- baseType right() const
- {
- return left + width;
- }
- baseType bottom() const
- {
- return top + height;
- }
- void Normalize()
- {
- if (width < 0) {
- left += width;
- width = -width;
- }
- if (height < 0) {
- top += height;
- height = -height;
- }
- }
- void Offset(baseType dx, baseType dy)
- {
- left += dx;
- top += dy;
- }
- void Inflate(baseType x, baseType y)
- {
- left -= x;
- width += x * 2;
- top -= y;
- height += y * 2;
- }
- void Inflate(const FXT_POINT &p)
- {
- Inflate(p.x, p.y);
- }
- void Inflate(baseType left, baseType top, baseType right, baseType bottom)
- {
- FXT_RECT::left -= left;
- FXT_RECT::top -= top;
- FXT_RECT::width += left + right;
- FXT_RECT::height += top + bottom;
- }
- void Inflate(const FXT_RECT &rt)
- {
- Inflate(rt.left, rt.top, rt.left + rt.width, rt.top + rt.height);
- }
- void Deflate(baseType x, baseType y)
- {
- left += x;
- width -= x * 2;
- top += y;
- height -= y * 2;
- }
- void Deflate(const FXT_POINT &p)
- {
- Deflate(p.x, p.y);
- }
- void Deflate(baseType left, baseType top, baseType right, baseType bottom)
- {
- FXT_RECT::left += left;
- FXT_RECT::top += top;
- FXT_RECT::width -= left + right;
- FXT_RECT::height -= top + bottom;
- }
- void Deflate(const FXT_RECT &rt)
- {
- Deflate(rt.left, rt.top, rt.top + rt.width, rt.top + rt.height);
- }
- FX_BOOL IsEmpty() const
- {
- return width <= 0 || height <= 0;
- }
- FX_BOOL IsEmpty(FX_FLOAT fEpsilon) const
- {
- return width <= fEpsilon || height <= fEpsilon;
- }
- void Empty()
- {
- width = height = 0;
- }
- FX_BOOL Contains(baseType x, baseType y) const
- {
- return x >= left && x < left + width && y >= top && y < top + height;
- }
- FX_BOOL Contains(const FXT_POINT &p) const
- {
- return Contains(p.x, p.y);
- }
- FX_BOOL Contains(const FXT_RECT &rt) const
- {
- return rt.left >= left && rt.right() <= right() && rt.top >= top && rt.bottom() <= bottom();
- }
- baseType Width() const
- {
- return width;
- }
- baseType Height() const
- {
- return height;
- }
- FXT_SIZE Size() const
- {
- FXT_SIZE size;
- size.Set(width, height);
- return size;
- }
- void Size(FXT_SIZE s)
- {
- width = s.x, height = s.y;
- }
- FXT_POINT TopLeft() const
- {
- FXT_POINT p;
- p.x = left;
- p.y = top;
- return p;
- }
- FXT_POINT TopRight() const
- {
- FXT_POINT p;
- p.x = left + width;
- p.y = top;
- return p;
- }
- FXT_POINT BottomLeft() const
- {
- FXT_POINT p;
- p.x = left;
- p.y = top + height;
- return p;
- }
- FXT_POINT BottomRight() const
- {
- FXT_POINT p;
- p.x = left + width;
- p.y = top + height;
- return p;
- }
- void TopLeft(FXT_POINT tl)
- {
- left = tl.x;
- top = tl.y;
- }
- void TopRight(FXT_POINT tr)
- {
- width = tr.x - left;
- top = tr.y;
- }
- void BottomLeft(FXT_POINT bl)
- {
- left = bl.x;
- height = bl.y - top;
- }
- void BottomRight(FXT_POINT br)
- {
- width = br.x - left;
- height = br.y - top;
- }
- FXT_POINT Center() const
- {
- FXT_POINT p;
- p.x = left + width / 2;
- p.y = top + height / 2;
- return p;
- }
- void GetParallelogram(FXT_PARAL &pg) const
- {
- pg.x = left, pg.y = top;
- pg.x1 = width, pg.y1 = 0;
- pg.x2 = 0, pg.y2 = height;
- }
- void Union(baseType x, baseType y)
- {
- baseType r = right(), b = bottom();
- if (left > x) {
- left = x;
- }
- if (r < x) {
- r = x;
- }
- if (top > y) {
- top = y;
- }
- if (b < y) {
- b = y;
- }
- width = r - left;
- height = b - top;
- }
- void Union(const FXT_POINT &p)
- {
- Union(p.x, p.y);
- }
- void Union(const FXT_RECT &rt)
- {
- baseType r = right(), b = bottom();
- if (left > rt.left) {
- left = rt.left;
- }
- if (r < rt.right()) {
- r = rt.right();
- }
- if (top > rt.top) {
- top = rt.top;
- }
- if (b < rt.bottom()) {
- b = rt.bottom();
- }
- width = r - left;
- height = b - top;
- }
- void Intersect(const FXT_RECT &rt)
- {
- baseType r = right(), b = bottom();
- if (left < rt.left) {
- left = rt.left;
- }
- if (r > rt.right()) {
- r = rt.right();
- }
- if (top < rt.top) {
- top = rt.top;
- }
- if (b > rt.bottom()) {
- b = rt.bottom();
- }
- width = r - left;
- height = b - top;
- }
- FX_BOOL IntersectWith(const FXT_RECT &rt) const
- {
- FXT_RECT rect = rt;
- rect.Intersect(*this);
- return !rect.IsEmpty();
- }
- FX_BOOL IntersectWith(const FXT_RECT &rt, FX_FLOAT fEpsilon) const
- {
- FXT_RECT rect = rt;
- rect.Intersect(*this);
- return !rect.IsEmpty(fEpsilon);
- }
- friend FX_BOOL operator == (const FXT_RECT &rc1, const FXT_RECT &rc2)
- {
- return rc1.left == rc2.left && rc1.top == rc2.top && rc1.width == rc2.width && rc1.height == rc2.height;
- }
- friend FX_BOOL operator != (const FXT_RECT &rc1, const FXT_RECT &rc2)
- {
- return rc1.left != rc2.left || rc1.top != rc2.top || rc1.width != rc2.width || rc1.height != rc2.height;
- }
- baseType left, top;
- baseType width, height;
+template <class baseType>
+class CFX_RTemplate {
+ public:
+ typedef CFX_PSVTemplate<baseType> FXT_POINT;
+ typedef CFX_PSVTemplate<baseType> FXT_SIZE;
+ typedef CFX_VTemplate<baseType> FXT_VECTOR;
+ typedef CFX_PRLTemplate<baseType> FXT_PARAL;
+ typedef CFX_RTemplate<baseType> FXT_RECT;
+ void Set(baseType left, baseType top, baseType width, baseType height) {
+ FXT_RECT::left = left, FXT_RECT::top = top, FXT_RECT::width = width,
+ FXT_RECT::height = height;
+ }
+ void Set(baseType left, baseType top, const FXT_SIZE& size) {
+ FXT_RECT::left = left, FXT_RECT::top = top, FXT_RECT::Size(size);
+ }
+ void Set(const FXT_POINT& p, baseType width, baseType height) {
+ TopLeft(p), FXT_RECT::width = width, FXT_RECT::height = height;
+ }
+ void Set(const FXT_POINT& p1, const FXT_POINT& p2) {
+ TopLeft(p1), FXT_RECT::width = p2.x - p1.x, FXT_RECT::height = p2.y - p1.y,
+ FXT_RECT::Normalize();
+ }
+ void Set(const FXT_POINT& p, const FXT_VECTOR& v) {
+ TopLeft(p), FXT_RECT::width = v.x, FXT_RECT::height = v.y,
+ FXT_RECT::Normalize();
+ }
+ void Reset() {
+ FXT_RECT::left = FXT_RECT::top = FXT_RECT::width = FXT_RECT::height = 0;
+ }
+ FXT_RECT& operator+=(const FXT_POINT& p) {
+ left += p.x, top += p.y;
+ return *this;
+ }
+ FXT_RECT& operator-=(const FXT_POINT& p) {
+ left -= p.x, top -= p.y;
+ return *this;
+ }
+ baseType right() const { return left + width; }
+ baseType bottom() const { return top + height; }
+ void Normalize() {
+ if (width < 0) {
+ left += width;
+ width = -width;
+ }
+ if (height < 0) {
+ top += height;
+ height = -height;
+ }
+ }
+ void Offset(baseType dx, baseType dy) {
+ left += dx;
+ top += dy;
+ }
+ void Inflate(baseType x, baseType y) {
+ left -= x;
+ width += x * 2;
+ top -= y;
+ height += y * 2;
+ }
+ void Inflate(const FXT_POINT& p) { Inflate(p.x, p.y); }
+ void Inflate(baseType left, baseType top, baseType right, baseType bottom) {
+ FXT_RECT::left -= left;
+ FXT_RECT::top -= top;
+ FXT_RECT::width += left + right;
+ FXT_RECT::height += top + bottom;
+ }
+ void Inflate(const FXT_RECT& rt) {
+ Inflate(rt.left, rt.top, rt.left + rt.width, rt.top + rt.height);
+ }
+ void Deflate(baseType x, baseType y) {
+ left += x;
+ width -= x * 2;
+ top += y;
+ height -= y * 2;
+ }
+ void Deflate(const FXT_POINT& p) { Deflate(p.x, p.y); }
+ void Deflate(baseType left, baseType top, baseType right, baseType bottom) {
+ FXT_RECT::left += left;
+ FXT_RECT::top += top;
+ FXT_RECT::width -= left + right;
+ FXT_RECT::height -= top + bottom;
+ }
+ void Deflate(const FXT_RECT& rt) {
+ Deflate(rt.left, rt.top, rt.top + rt.width, rt.top + rt.height);
+ }
+ FX_BOOL IsEmpty() const { return width <= 0 || height <= 0; }
+ FX_BOOL IsEmpty(FX_FLOAT fEpsilon) const {
+ return width <= fEpsilon || height <= fEpsilon;
+ }
+ void Empty() { width = height = 0; }
+ FX_BOOL Contains(baseType x, baseType y) const {
+ return x >= left && x < left + width && y >= top && y < top + height;
+ }
+ FX_BOOL Contains(const FXT_POINT& p) const { return Contains(p.x, p.y); }
+ FX_BOOL Contains(const FXT_RECT& rt) const {
+ return rt.left >= left && rt.right() <= right() && rt.top >= top &&
+ rt.bottom() <= bottom();
+ }
+ baseType Width() const { return width; }
+ baseType Height() const { return height; }
+ FXT_SIZE Size() const {
+ FXT_SIZE size;
+ size.Set(width, height);
+ return size;
+ }
+ void Size(FXT_SIZE s) { width = s.x, height = s.y; }
+ FXT_POINT TopLeft() const {
+ FXT_POINT p;
+ p.x = left;
+ p.y = top;
+ return p;
+ }
+ FXT_POINT TopRight() const {
+ FXT_POINT p;
+ p.x = left + width;
+ p.y = top;
+ return p;
+ }
+ FXT_POINT BottomLeft() const {
+ FXT_POINT p;
+ p.x = left;
+ p.y = top + height;
+ return p;
+ }
+ FXT_POINT BottomRight() const {
+ FXT_POINT p;
+ p.x = left + width;
+ p.y = top + height;
+ return p;
+ }
+ void TopLeft(FXT_POINT tl) {
+ left = tl.x;
+ top = tl.y;
+ }
+ void TopRight(FXT_POINT tr) {
+ width = tr.x - left;
+ top = tr.y;
+ }
+ void BottomLeft(FXT_POINT bl) {
+ left = bl.x;
+ height = bl.y - top;
+ }
+ void BottomRight(FXT_POINT br) {
+ width = br.x - left;
+ height = br.y - top;
+ }
+ FXT_POINT Center() const {
+ FXT_POINT p;
+ p.x = left + width / 2;
+ p.y = top + height / 2;
+ return p;
+ }
+ void GetParallelogram(FXT_PARAL& pg) const {
+ pg.x = left, pg.y = top;
+ pg.x1 = width, pg.y1 = 0;
+ pg.x2 = 0, pg.y2 = height;
+ }
+ void Union(baseType x, baseType y) {
+ baseType r = right(), b = bottom();
+ if (left > x) {
+ left = x;
+ }
+ if (r < x) {
+ r = x;
+ }
+ if (top > y) {
+ top = y;
+ }
+ if (b < y) {
+ b = y;
+ }
+ width = r - left;
+ height = b - top;
+ }
+ void Union(const FXT_POINT& p) { Union(p.x, p.y); }
+ void Union(const FXT_RECT& rt) {
+ baseType r = right(), b = bottom();
+ if (left > rt.left) {
+ left = rt.left;
+ }
+ if (r < rt.right()) {
+ r = rt.right();
+ }
+ if (top > rt.top) {
+ top = rt.top;
+ }
+ if (b < rt.bottom()) {
+ b = rt.bottom();
+ }
+ width = r - left;
+ height = b - top;
+ }
+ void Intersect(const FXT_RECT& rt) {
+ baseType r = right(), b = bottom();
+ if (left < rt.left) {
+ left = rt.left;
+ }
+ if (r > rt.right()) {
+ r = rt.right();
+ }
+ if (top < rt.top) {
+ top = rt.top;
+ }
+ if (b > rt.bottom()) {
+ b = rt.bottom();
+ }
+ width = r - left;
+ height = b - top;
+ }
+ FX_BOOL IntersectWith(const FXT_RECT& rt) const {
+ FXT_RECT rect = rt;
+ rect.Intersect(*this);
+ return !rect.IsEmpty();
+ }
+ FX_BOOL IntersectWith(const FXT_RECT& rt, FX_FLOAT fEpsilon) const {
+ FXT_RECT rect = rt;
+ rect.Intersect(*this);
+ return !rect.IsEmpty(fEpsilon);
+ }
+ friend FX_BOOL operator==(const FXT_RECT& rc1, const FXT_RECT& rc2) {
+ return rc1.left == rc2.left && rc1.top == rc2.top &&
+ rc1.width == rc2.width && rc1.height == rc2.height;
+ }
+ friend FX_BOOL operator!=(const FXT_RECT& rc1, const FXT_RECT& rc2) {
+ return rc1.left != rc2.left || rc1.top != rc2.top ||
+ rc1.width != rc2.width || rc1.height != rc2.height;
+ }
+ baseType left, top;
+ baseType width, height;
};
-typedef CFX_RTemplate<int32_t> CFX_Rect;
-typedef CFX_RTemplate<FX_FLOAT> CFX_RectF;
-typedef CFX_RTemplate<int32_t> * FX_LPRECT;
-typedef CFX_RTemplate<FX_FLOAT> * FX_LPRECTF;
-typedef CFX_RTemplate<int32_t> const * FX_LPCRECT;
-typedef CFX_RTemplate<FX_FLOAT> const * FX_LPCRECTF;
-typedef CFX_ArrayTemplate<CFX_RectF> CFX_RectFArray;
+typedef CFX_RTemplate<int32_t> CFX_Rect;
+typedef CFX_RTemplate<FX_FLOAT> CFX_RectF;
+typedef CFX_RTemplate<int32_t>* FX_LPRECT;
+typedef CFX_RTemplate<FX_FLOAT>* FX_LPRECTF;
+typedef CFX_RTemplate<int32_t> const* FX_LPCRECT;
+typedef CFX_RTemplate<FX_FLOAT> const* FX_LPCRECTF;
+typedef CFX_ArrayTemplate<CFX_RectF> CFX_RectFArray;
struct FX_RECT {
+ int left;
- int left;
+ int top;
- int top;
+ int right;
- int right;
+ int bottom;
- int bottom;
+ FX_RECT() : left(0), top(0), right(0), bottom(0) {}
- FX_RECT(): left(0), top(0), right(0), bottom(0) { }
+ FX_RECT(int left1, int top1, int right1, int bottom1) {
+ left = left1;
+ top = top1;
+ right = right1;
+ bottom = bottom1;
+ }
- FX_RECT(int left1, int top1, int right1, int bottom1)
- {
- left = left1;
- top = top1;
- right = right1;
- bottom = bottom1;
- }
+ int Width() const { return right - left; }
- int Width() const
- {
- return right - left;
- }
+ int Height() const { return bottom - top; }
- int Height() const
- {
- return bottom - top;
- }
+ FX_BOOL IsEmpty() const { return right <= left || bottom <= top; }
- FX_BOOL IsEmpty() const
- {
- return right <= left || bottom <= top;
- }
+ void Normalize();
- void Normalize();
+ void Intersect(const FX_RECT& src);
- void Intersect(const FX_RECT& src);
+ void Intersect(int left1, int top1, int right1, int bottom1) {
+ Intersect(FX_RECT(left1, top1, right1, bottom1));
+ }
- void Intersect(int left1, int top1, int right1, int bottom1)
- {
- Intersect(FX_RECT(left1, top1, right1, bottom1));
- }
+ void Union(const FX_RECT& other_rect);
- void Union(const FX_RECT& other_rect);
+ FX_BOOL operator==(const FX_RECT& src) const {
+ return left == src.left && right == src.right && top == src.top &&
+ bottom == src.bottom;
+ }
- FX_BOOL operator == (const FX_RECT& src) const
- {
- return left == src.left && right == src.right && top == src.top && bottom == src.bottom;
- }
+ void Offset(int dx, int dy) {
+ left += dx;
+ right += dx;
+ top += dy;
+ bottom += dy;
+ }
- void Offset(int dx, int dy)
- {
- left += dx;
- right += dx;
- top += dy;
- bottom += dy;
- }
-
- FX_BOOL Contains(const FX_RECT& other_rect) const
- {
- return other_rect.left >= left && other_rect.right <= right && other_rect.top >= top && other_rect.bottom <= bottom;
- }
+ FX_BOOL Contains(const FX_RECT& other_rect) const {
+ return other_rect.left >= left && other_rect.right <= right &&
+ other_rect.top >= top && other_rect.bottom <= bottom;
+ }
- FX_BOOL Contains(int x, int y) const
- {
- return x >= left && x < right && y >= top && y < bottom;
- }
+ FX_BOOL Contains(int x, int y) const {
+ return x >= left && x < right && y >= top && y < bottom;
+ }
};
struct FX_SMALL_RECT {
+ int16_t Left;
- int16_t Left;
+ int16_t Top;
- int16_t Top;
+ int16_t Right;
- int16_t Right;
-
- int16_t Bottom;
+ int16_t Bottom;
};
-class CFX_FloatRect
-{
-public:
+class CFX_FloatRect {
+ public:
+ CFX_FloatRect() { left = right = bottom = top = 0; }
- CFX_FloatRect()
- {
- left = right = bottom = top = 0;
- }
+ CFX_FloatRect(FX_FLOAT left1,
+ FX_FLOAT bottom1,
+ FX_FLOAT right1,
+ FX_FLOAT top1) {
+ left = left1;
+ bottom = bottom1;
+ right = right1;
+ top = top1;
+ }
- CFX_FloatRect(FX_FLOAT left1, FX_FLOAT bottom1, FX_FLOAT right1, FX_FLOAT top1)
- {
- left = left1;
- bottom = bottom1;
- right = right1;
- top = top1;
- }
+ CFX_FloatRect(const FX_FLOAT* pArray) {
+ left = pArray[0];
+ bottom = pArray[1];
+ right = pArray[2];
+ top = pArray[3];
+ }
- CFX_FloatRect(const FX_FLOAT* pArray)
- {
- left = pArray[0];
- bottom = pArray[1];
- right = pArray[2];
- top = pArray[3];
- }
+ CFX_FloatRect(const FX_RECT& rect);
- CFX_FloatRect(const FX_RECT& rect);
+ FX_BOOL IsEmpty() const { return left >= right || bottom >= top; }
- FX_BOOL IsEmpty() const
- {
- return left >= right || bottom >= top;
- }
+ void Normalize();
- void Normalize();
+ void Reset() { left = right = bottom = top = 0; }
- void Reset()
- {
- left = right = bottom = top = 0;
- }
-
- FX_BOOL Contains(const CFX_FloatRect& other_rect) const;
+ FX_BOOL Contains(const CFX_FloatRect& other_rect) const;
- FX_BOOL Contains(FX_FLOAT x, FX_FLOAT y) const;
+ FX_BOOL Contains(FX_FLOAT x, FX_FLOAT y) const;
- void Transform(const CFX_Matrix* pMatrix);
+ void Transform(const CFX_Matrix* pMatrix);
- void Intersect(const CFX_FloatRect& other_rect);
+ void Intersect(const CFX_FloatRect& other_rect);
- void Union(const CFX_FloatRect& other_rect);
+ void Union(const CFX_FloatRect& other_rect);
- FX_RECT GetInnerRect() const;
+ FX_RECT GetInnerRect() const;
- FX_RECT GetOutterRect() const;
+ FX_RECT GetOutterRect() const;
- FX_RECT GetClosestRect() const;
+ FX_RECT GetClosestRect() const;
- int Substract4(CFX_FloatRect& substract_rect, CFX_FloatRect* pRects);
+ int Substract4(CFX_FloatRect& substract_rect, CFX_FloatRect* pRects);
- void InitRect(FX_FLOAT x, FX_FLOAT y)
- {
- left = right = x;
- bottom = top = y;
- }
+ void InitRect(FX_FLOAT x, FX_FLOAT y) {
+ left = right = x;
+ bottom = top = y;
+ }
- void UpdateRect(FX_FLOAT x, FX_FLOAT y);
+ void UpdateRect(FX_FLOAT x, FX_FLOAT y);
- FX_FLOAT Width() const
- {
- return right - left;
- }
+ FX_FLOAT Width() const { return right - left; }
- FX_FLOAT Height() const
- {
- return top - bottom;
- }
+ FX_FLOAT Height() const { return top - bottom; }
- void Inflate(FX_FLOAT x, FX_FLOAT y)
- {
- Normalize();
- left -= x;
- right += x;
- bottom -= y;
- top += y;
- }
+ void Inflate(FX_FLOAT x, FX_FLOAT y) {
+ Normalize();
+ left -= x;
+ right += x;
+ bottom -= y;
+ top += y;
+ }
- void Inflate(FX_FLOAT other_left,
- FX_FLOAT other_bottom,
- FX_FLOAT other_right,
- FX_FLOAT other_top)
- {
- Normalize();
- left -= other_left;
- bottom -= other_bottom;
- right += other_right;
- top += other_top;
- }
+ void Inflate(FX_FLOAT other_left,
+ FX_FLOAT other_bottom,
+ FX_FLOAT other_right,
+ FX_FLOAT other_top) {
+ Normalize();
+ left -= other_left;
+ bottom -= other_bottom;
+ right += other_right;
+ top += other_top;
+ }
- void Inflate(const CFX_FloatRect &rt)
- {
- Inflate(rt.left, rt.bottom, rt.right, rt.top);
- }
+ void Inflate(const CFX_FloatRect& rt) {
+ Inflate(rt.left, rt.bottom, rt.right, rt.top);
+ }
- void Deflate(FX_FLOAT x, FX_FLOAT y)
- {
- Normalize();
- left += x;
- right -= x;
- bottom += y;
- top -= y;
- }
+ void Deflate(FX_FLOAT x, FX_FLOAT y) {
+ Normalize();
+ left += x;
+ right -= x;
+ bottom += y;
+ top -= y;
+ }
- void Deflate(FX_FLOAT other_left,
- FX_FLOAT other_bottom,
- FX_FLOAT other_right,
- FX_FLOAT other_top)
- {
- Normalize();
- left += other_left;
- bottom += other_bottom;
- right -= other_right;
- top -= other_top;
- }
+ void Deflate(FX_FLOAT other_left,
+ FX_FLOAT other_bottom,
+ FX_FLOAT other_right,
+ FX_FLOAT other_top) {
+ Normalize();
+ left += other_left;
+ bottom += other_bottom;
+ right -= other_right;
+ top -= other_top;
+ }
- void Deflate(const CFX_FloatRect &rt)
- {
- Deflate(rt.left, rt.bottom, rt.right, rt.top);
- }
+ void Deflate(const CFX_FloatRect& rt) {
+ Deflate(rt.left, rt.bottom, rt.right, rt.top);
+ }
- void Translate(FX_FLOAT e, FX_FLOAT f)
- {
- left += e;
- right += e;
- top += f;
- bottom += f;
- }
+ void Translate(FX_FLOAT e, FX_FLOAT f) {
+ left += e;
+ right += e;
+ top += f;
+ bottom += f;
+ }
- static CFX_FloatRect GetBBox(const CFX_FloatPoint* pPoints, int nPoints);
+ static CFX_FloatRect GetBBox(const CFX_FloatPoint* pPoints, int nPoints);
- FX_FLOAT left;
+ FX_FLOAT left;
- FX_FLOAT right;
+ FX_FLOAT right;
- FX_FLOAT bottom;
+ FX_FLOAT bottom;
- FX_FLOAT top;
+ FX_FLOAT top;
};
-class CFX_Matrix
-{
-public:
-
- CFX_Matrix()
- {
- a = d = 1;
- b = c = e = f = 0;
- }
+class CFX_Matrix {
+ public:
+ CFX_Matrix() {
+ a = d = 1;
+ b = c = e = f = 0;
+ }
+
+ CFX_Matrix(FX_FLOAT a1,
+ FX_FLOAT b1,
+ FX_FLOAT c1,
+ FX_FLOAT d1,
+ FX_FLOAT e1,
+ FX_FLOAT f1) {
+ a = a1;
+ b = b1;
+ c = c1;
+ d = d1;
+ e = e1;
+ f = f1;
+ }
+
+ void Set(FX_FLOAT a,
+ FX_FLOAT b,
+ FX_FLOAT c,
+ FX_FLOAT d,
+ FX_FLOAT e,
+ FX_FLOAT f);
+ void Set(const FX_FLOAT n[6]);
+
+ void SetIdentity() {
+ a = d = 1;
+ b = c = e = f = 0;
+ }
- CFX_Matrix(FX_FLOAT a1, FX_FLOAT b1, FX_FLOAT c1, FX_FLOAT d1, FX_FLOAT e1, FX_FLOAT f1)
- {
- a = a1;
- b = b1;
- c = c1;
- d = d1;
- e = e1;
- f = f1;
- }
-
- void Set(FX_FLOAT a, FX_FLOAT b, FX_FLOAT c, FX_FLOAT d, FX_FLOAT e, FX_FLOAT f);
- void Set(const FX_FLOAT n[6]);
-
- void SetIdentity()
- {
- a = d = 1;
- b = c = e = f = 0;
- }
-
- void SetReverse(const CFX_Matrix &m);
-
- void Concat(FX_FLOAT a, FX_FLOAT b, FX_FLOAT c, FX_FLOAT d, FX_FLOAT e, FX_FLOAT f, FX_BOOL bPrepended = FALSE);
-
- void Concat(const CFX_Matrix &m, FX_BOOL bPrepended = FALSE);
-
- void ConcatInverse(const CFX_Matrix& m, FX_BOOL bPrepended = FALSE);
- void Reset()
- {
- SetIdentity();
- }
-
- void Copy(const CFX_Matrix& m)
- {
- *this = m;
- }
-
- FX_BOOL IsIdentity() const
- {
- return a == 1 && b == 0 && c == 0 && d == 1 && e == 0 && f == 0;
- }
- FX_BOOL IsInvertible() const;
-
- FX_BOOL Is90Rotated() const;
-
- FX_BOOL IsScaled() const;
-
- void Translate(FX_FLOAT x, FX_FLOAT y, FX_BOOL bPrepended = FALSE);
-
- void TranslateI(int32_t x, int32_t y, FX_BOOL bPrepended = FALSE)
- {
- Translate((FX_FLOAT)x, (FX_FLOAT)y, bPrepended);
- }
+ void SetReverse(const CFX_Matrix& m);
- void Scale(FX_FLOAT sx, FX_FLOAT sy, FX_BOOL bPrepended = FALSE);
+ void Concat(FX_FLOAT a,
+ FX_FLOAT b,
+ FX_FLOAT c,
+ FX_FLOAT d,
+ FX_FLOAT e,
+ FX_FLOAT f,
+ FX_BOOL bPrepended = FALSE);
+
+ void Concat(const CFX_Matrix& m, FX_BOOL bPrepended = FALSE);
+
+ void ConcatInverse(const CFX_Matrix& m, FX_BOOL bPrepended = FALSE);
+ void Reset() { SetIdentity(); }
+
+ void Copy(const CFX_Matrix& m) { *this = m; }
+
+ FX_BOOL IsIdentity() const {
+ return a == 1 && b == 0 && c == 0 && d == 1 && e == 0 && f == 0;
+ }
+ FX_BOOL IsInvertible() const;
+
+ FX_BOOL Is90Rotated() const;
+
+ FX_BOOL IsScaled() const;
+
+ void Translate(FX_FLOAT x, FX_FLOAT y, FX_BOOL bPrepended = FALSE);
+
+ void TranslateI(int32_t x, int32_t y, FX_BOOL bPrepended = FALSE) {
+ Translate((FX_FLOAT)x, (FX_FLOAT)y, bPrepended);
+ }
+
+ void Scale(FX_FLOAT sx, FX_FLOAT sy, FX_BOOL bPrepended = FALSE);
+
+ void Rotate(FX_FLOAT fRadian, FX_BOOL bPrepended = FALSE);
+
+ void RotateAt(FX_FLOAT fRadian,
+ FX_FLOAT x,
+ FX_FLOAT y,
+ FX_BOOL bPrepended = FALSE);
+
+ void Shear(FX_FLOAT fAlphaRadian,
+ FX_FLOAT fBetaRadian,
+ FX_BOOL bPrepended = FALSE);
+
+ void MatchRect(const CFX_FloatRect& dest, const CFX_FloatRect& src);
+
+ FX_FLOAT GetXUnit() const;
+
+ FX_FLOAT GetYUnit() const;
+ void GetUnitRect(CFX_RectF& rect) const;
+
+ CFX_FloatRect GetUnitRect() const;
+
+ FX_FLOAT GetUnitArea() const;
+ FX_FLOAT TransformXDistance(FX_FLOAT dx) const;
+ int32_t TransformXDistance(int32_t dx) const;
+ FX_FLOAT TransformYDistance(FX_FLOAT dy) const;
+ int32_t TransformYDistance(int32_t dy) const;
+ FX_FLOAT TransformDistance(FX_FLOAT dx, FX_FLOAT dy) const;
+ int32_t TransformDistance(int32_t dx, int32_t dy) const;
+
+ FX_FLOAT TransformDistance(FX_FLOAT distance) const;
+ void TransformPoint(FX_FLOAT& x, FX_FLOAT& y) const;
+ void TransformPoint(int32_t& x, int32_t& y) const;
+ void TransformPoints(CFX_PointF* points, int32_t iCount) const;
+ void TransformPoints(CFX_Point* points, int32_t iCount) const;
+
+ void Transform(FX_FLOAT& x, FX_FLOAT& y) const { TransformPoint(x, y); }
- void Rotate(FX_FLOAT fRadian, FX_BOOL bPrepended = FALSE);
+ void Transform(FX_FLOAT x, FX_FLOAT y, FX_FLOAT& x1, FX_FLOAT& y1) const {
+ x1 = x, y1 = y;
+ TransformPoint(x1, y1);
+ }
+ void TransformVector(CFX_VectorF& v) const;
+ void TransformVector(CFX_Vector& v) const;
+ void TransformRect(CFX_RectF& rect) const;
+ void TransformRect(CFX_Rect& rect) const;
- void RotateAt(FX_FLOAT fRadian, FX_FLOAT x, FX_FLOAT y, FX_BOOL bPrepended = FALSE);
+ void TransformRect(FX_FLOAT& left,
+ FX_FLOAT& right,
+ FX_FLOAT& top,
+ FX_FLOAT& bottom) const;
- void Shear(FX_FLOAT fAlphaRadian, FX_FLOAT fBetaRadian, FX_BOOL bPrepended = FALSE);
+ void TransformRect(CFX_FloatRect& rect) const {
+ TransformRect(rect.left, rect.right, rect.top, rect.bottom);
+ }
- void MatchRect(const CFX_FloatRect &dest, const CFX_FloatRect &src);
+ FX_FLOAT GetA() const { return a; }
- FX_FLOAT GetXUnit() const;
+ FX_FLOAT GetB() const { return b; }
- FX_FLOAT GetYUnit() const;
- void GetUnitRect(CFX_RectF &rect) const;
+ FX_FLOAT GetC() const { return c; }
- CFX_FloatRect GetUnitRect() const;
+ FX_FLOAT GetD() const { return d; }
- FX_FLOAT GetUnitArea() const;
- FX_FLOAT TransformXDistance(FX_FLOAT dx) const;
- int32_t TransformXDistance(int32_t dx) const;
- FX_FLOAT TransformYDistance(FX_FLOAT dy) const;
- int32_t TransformYDistance(int32_t dy) const;
- FX_FLOAT TransformDistance(FX_FLOAT dx, FX_FLOAT dy) const;
- int32_t TransformDistance(int32_t dx, int32_t dy) const;
+ FX_FLOAT GetE() const { return e; }
- FX_FLOAT TransformDistance(FX_FLOAT distance) const;
- void TransformPoint(FX_FLOAT &x, FX_FLOAT &y) const;
- void TransformPoint(int32_t &x, int32_t &y) const;
- void TransformPoints(CFX_PointF *points, int32_t iCount) const;
- void TransformPoints(CFX_Point *points, int32_t iCount) const;
+ FX_FLOAT GetF() const { return f; }
- void Transform(FX_FLOAT& x, FX_FLOAT& y) const
- {
- TransformPoint(x, y);
- }
-
- void Transform(FX_FLOAT x, FX_FLOAT y, FX_FLOAT& x1, FX_FLOAT& y1) const
- {
- x1 = x, y1 = y;
- TransformPoint(x1, y1);
- }
- void TransformVector(CFX_VectorF &v) const;
- void TransformVector(CFX_Vector &v) const;
- void TransformRect(CFX_RectF &rect) const;
- void TransformRect(CFX_Rect &rect) const;
-
- void TransformRect(FX_FLOAT& left, FX_FLOAT& right, FX_FLOAT& top, FX_FLOAT& bottom) const;
-
- void TransformRect(CFX_FloatRect& rect) const
- {
- TransformRect(rect.left, rect.right, rect.top, rect.bottom);
- }
-
- FX_FLOAT GetA() const
- {
- return a;
- }
-
- FX_FLOAT GetB() const
- {
- return b;
- }
-
- FX_FLOAT GetC() const
- {
- return c;
- }
-
- FX_FLOAT GetD() const
- {
- return d;
- }
-
- FX_FLOAT GetE() const
- {
- return e;
- }
-
- FX_FLOAT GetF() const
- {
- return f;
- }
-public:
- FX_FLOAT a;
- FX_FLOAT b;
- FX_FLOAT c;
- FX_FLOAT d;
- FX_FLOAT e;
- FX_FLOAT f;
+ public:
+ FX_FLOAT a;
+ FX_FLOAT b;
+ FX_FLOAT c;
+ FX_FLOAT d;
+ FX_FLOAT e;
+ FX_FLOAT f;
};
-#define CFX_AffineMatrix CFX_Matrix
+#define CFX_AffineMatrix CFX_Matrix
#endif // CORE_INCLUDE_FXCRT_FX_COORDINATES_H_
diff --git a/core/include/fxcrt/fx_ext.h b/core/include/fxcrt/fx_ext.h
index f24f4549a3..c24955fb7c 100644
--- a/core/include/fxcrt/fx_ext.h
+++ b/core/include/fxcrt/fx_ext.h
@@ -13,33 +13,37 @@
extern "C" {
#endif
-FX_FLOAT FXSYS_tan(FX_FLOAT a);
-FX_FLOAT FXSYS_logb(FX_FLOAT b, FX_FLOAT x);
-FX_FLOAT FXSYS_strtof(const FX_CHAR* pcsStr, int32_t iLength = -1, int32_t *pUsedLen = NULL);
-FX_FLOAT FXSYS_wcstof(const FX_WCHAR* pwsStr, int32_t iLength = -1, int32_t *pUsedLen = NULL);
-FX_WCHAR* FXSYS_wcsncpy(FX_WCHAR* dstStr, const FX_WCHAR* srcStr, size_t count);
-int32_t FXSYS_wcsnicmp(const FX_WCHAR* s1, const FX_WCHAR* s2, size_t count);
-int32_t FXSYS_strnicmp(const FX_CHAR* s1, const FX_CHAR* s2, size_t count);
+FX_FLOAT FXSYS_tan(FX_FLOAT a);
+FX_FLOAT FXSYS_logb(FX_FLOAT b, FX_FLOAT x);
+FX_FLOAT FXSYS_strtof(const FX_CHAR* pcsStr,
+ int32_t iLength = -1,
+ int32_t* pUsedLen = NULL);
+FX_FLOAT FXSYS_wcstof(const FX_WCHAR* pwsStr,
+ int32_t iLength = -1,
+ int32_t* pUsedLen = NULL);
+FX_WCHAR* FXSYS_wcsncpy(FX_WCHAR* dstStr, const FX_WCHAR* srcStr, size_t count);
+int32_t FXSYS_wcsnicmp(const FX_WCHAR* s1, const FX_WCHAR* s2, size_t count);
+int32_t FXSYS_strnicmp(const FX_CHAR* s1, const FX_CHAR* s2, size_t count);
-inline FX_BOOL FXSYS_islower(int32_t ch)
-{
- return ch >= 'a' && ch <= 'z';
+inline FX_BOOL FXSYS_islower(int32_t ch) {
+ return ch >= 'a' && ch <= 'z';
}
-inline FX_BOOL FXSYS_isupper(int32_t ch)
-{
- return ch >= 'A' && ch <= 'Z';
+inline FX_BOOL FXSYS_isupper(int32_t ch) {
+ return ch >= 'A' && ch <= 'Z';
}
-inline int32_t FXSYS_tolower(int32_t ch)
-{
- return ch < 'A' || ch > 'Z' ? ch : (ch + 0x20);
+inline int32_t FXSYS_tolower(int32_t ch) {
+ return ch < 'A' || ch > 'Z' ? ch : (ch + 0x20);
}
-inline int32_t FXSYS_toupper(int32_t ch)
-{
- return ch < 'a' || ch > 'z' ? ch : (ch - 0x20);
+inline int32_t FXSYS_toupper(int32_t ch) {
+ return ch < 'a' || ch > 'z' ? ch : (ch - 0x20);
}
-FX_DWORD FX_HashCode_String_GetA(const FX_CHAR* pStr, int32_t iLength, FX_BOOL bIgnoreCase = FALSE);
-FX_DWORD FX_HashCode_String_GetW(const FX_WCHAR* pStr, int32_t iLength, FX_BOOL bIgnoreCase = FALSE);
+FX_DWORD FX_HashCode_String_GetA(const FX_CHAR* pStr,
+ int32_t iLength,
+ FX_BOOL bIgnoreCase = FALSE);
+FX_DWORD FX_HashCode_String_GetW(const FX_WCHAR* pStr,
+ int32_t iLength,
+ FX_BOOL bIgnoreCase = FALSE);
#ifdef __cplusplus
}
@@ -48,43 +52,41 @@ FX_DWORD FX_HashCode_String_GetW(const FX_WCHAR* pStr, int32_t iLength, FX_BOOL
extern "C" {
#endif
-void* FX_Random_MT_Start(FX_DWORD dwSeed);
+void* FX_Random_MT_Start(FX_DWORD dwSeed);
-FX_DWORD FX_Random_MT_Generate(void* pContext);
+FX_DWORD FX_Random_MT_Generate(void* pContext);
-void FX_Random_MT_Close(void* pContext);
+void FX_Random_MT_Close(void* pContext);
-void FX_Random_GenerateBase(FX_DWORD* pBuffer, int32_t iCount);
+void FX_Random_GenerateBase(FX_DWORD* pBuffer, int32_t iCount);
-void FX_Random_GenerateMT(FX_DWORD* pBuffer, int32_t iCount);
+void FX_Random_GenerateMT(FX_DWORD* pBuffer, int32_t iCount);
-void FX_Random_GenerateCrypto(FX_DWORD* pBuffer, int32_t iCount);
+void FX_Random_GenerateCrypto(FX_DWORD* pBuffer, int32_t iCount);
#ifdef __cplusplus
}
#endif
-template<class baseType>
-class CFX_SSortTemplate
-{
-public:
- void ShellSort(baseType *pArray, int32_t iCount)
- {
- FXSYS_assert(pArray != NULL && iCount > 0);
- int32_t i, j, gap;
- baseType v1, v2;
- gap = iCount >> 1;
- while (gap > 0) {
- for (i = gap; i < iCount; i ++) {
- j = i - gap;
- v1 = pArray[i];
- while (j > -1 && (v2 = pArray[j]) > v1) {
- pArray[j + gap] = v2;
- j -= gap;
- }
- pArray[j + gap] = v1;
- }
- gap >>= 1;
+template <class baseType>
+class CFX_SSortTemplate {
+ public:
+ void ShellSort(baseType* pArray, int32_t iCount) {
+ FXSYS_assert(pArray != NULL && iCount > 0);
+ int32_t i, j, gap;
+ baseType v1, v2;
+ gap = iCount >> 1;
+ while (gap > 0) {
+ for (i = gap; i < iCount; i++) {
+ j = i - gap;
+ v1 = pArray[i];
+ while (j > -1 && (v2 = pArray[j]) > v1) {
+ pArray[j + gap] = v2;
+ j -= gap;
}
+ pArray[j + gap] = v1;
+ }
+ gap >>= 1;
}
+ }
};
#endif // CORE_INCLUDE_FXCRT_FX_EXT_H_
diff --git a/core/include/fxcrt/fx_memory.h b/core/include/fxcrt/fx_memory.h
index 3c6920171e..c607de2159 100644
--- a/core/include/fxcrt/fx_memory.h
+++ b/core/include/fxcrt/fx_memory.h
@@ -13,9 +13,9 @@
extern "C" {
#endif
// For external C libraries to malloc through PDFium. These may return NULL.
-void* FXMEM_DefaultAlloc(size_t byte_size, int flags);
-void* FXMEM_DefaultRealloc(void* pointer, size_t new_size, int flags);
-void FXMEM_DefaultFree(void* pointer, int flags);
+void* FXMEM_DefaultAlloc(size_t byte_size, int flags);
+void* FXMEM_DefaultRealloc(void* pointer, size_t new_size, int flags);
+void FXMEM_DefaultFree(void* pointer, int flags);
#ifdef __cplusplus
} // extern "C"
@@ -26,94 +26,84 @@ void FXMEM_DefaultFree(void* pointer, int flags);
NEVER_INLINE void FX_OutOfMemoryTerminate();
inline void* FX_SafeRealloc(void* ptr, size_t num_members, size_t member_size) {
- if (num_members < std::numeric_limits<size_t>::max() / member_size) {
- return realloc(ptr, num_members * member_size);
- }
- return nullptr;
+ if (num_members < std::numeric_limits<size_t>::max() / member_size) {
+ return realloc(ptr, num_members * member_size);
+ }
+ return nullptr;
}
inline void* FX_AllocOrDie(size_t num_members, size_t member_size) {
- // TODO(tsepez): See if we can avoid the implicit memset(0).
- if (void* result = calloc(num_members, member_size)) {
- return result;
- }
- FX_OutOfMemoryTerminate(); // Never returns.
- return nullptr; // Suppress compiler warning.
+ // TODO(tsepez): See if we can avoid the implicit memset(0).
+ if (void* result = calloc(num_members, member_size)) {
+ return result;
+ }
+ FX_OutOfMemoryTerminate(); // Never returns.
+ return nullptr; // Suppress compiler warning.
}
inline void* FX_AllocOrDie2D(size_t w, size_t h, size_t member_size) {
- if (w < std::numeric_limits<size_t>::max() / h) {
- return FX_AllocOrDie(w * h, member_size);
- }
- FX_OutOfMemoryTerminate(); // Never returns.
- return nullptr; // Suppress compiler warning.
+ if (w < std::numeric_limits<size_t>::max() / h) {
+ return FX_AllocOrDie(w * h, member_size);
+ }
+ FX_OutOfMemoryTerminate(); // Never returns.
+ return nullptr; // Suppress compiler warning.
}
-inline void* FX_ReallocOrDie(void* ptr, size_t num_members, size_t member_size) {
- if (void* result = FX_SafeRealloc(ptr, num_members, member_size)) {
- return result;
- }
- FX_OutOfMemoryTerminate(); // Never returns.
- return nullptr; // Suppress compiler warning.
+inline void* FX_ReallocOrDie(void* ptr,
+ size_t num_members,
+ size_t member_size) {
+ if (void* result = FX_SafeRealloc(ptr, num_members, member_size)) {
+ return result;
+ }
+ FX_OutOfMemoryTerminate(); // Never returns.
+ return nullptr; // Suppress compiler warning.
}
// Never returns NULL.
-#define FX_Alloc(type, size) (type*)FX_AllocOrDie(size, sizeof(type))
-#define FX_Alloc2D(type, w, h) (type*)FX_AllocOrDie2D(w, h, sizeof(type))
+#define FX_Alloc(type, size) (type*) FX_AllocOrDie(size, sizeof(type))
+#define FX_Alloc2D(type, w, h) (type*) FX_AllocOrDie2D(w, h, sizeof(type))
#define FX_Realloc(type, ptr, size) \
- (type*)FX_ReallocOrDie(ptr, size, sizeof(type))
+ (type*) FX_ReallocOrDie(ptr, size, sizeof(type))
// May return NULL.
-#define FX_TryAlloc(type, size) (type*)calloc(size, sizeof(type))
+#define FX_TryAlloc(type, size) (type*) calloc(size, sizeof(type))
#define FX_TryRealloc(type, ptr, size) \
- (type*)FX_SafeRealloc(ptr, size, sizeof(type))
+ (type*) FX_SafeRealloc(ptr, size, sizeof(type))
#define FX_Free(ptr) free(ptr)
-class CFX_DestructObject
-{
-public:
-
- virtual ~CFX_DestructObject() {}
+class CFX_DestructObject {
+ public:
+ virtual ~CFX_DestructObject() {}
};
-class CFX_GrowOnlyPool
-{
-public:
-
- CFX_GrowOnlyPool(size_t trunk_size = 16384);
+class CFX_GrowOnlyPool {
+ public:
+ CFX_GrowOnlyPool(size_t trunk_size = 16384);
- ~CFX_GrowOnlyPool();
+ ~CFX_GrowOnlyPool();
- void SetTrunkSize(size_t trunk_size)
- {
- m_TrunkSize = trunk_size;
- }
+ void SetTrunkSize(size_t trunk_size) { m_TrunkSize = trunk_size; }
- void* AllocDebug(size_t size, const FX_CHAR* file, int line)
- {
- return Alloc(size);
- }
+ void* AllocDebug(size_t size, const FX_CHAR* file, int line) {
+ return Alloc(size);
+ }
- void* Alloc(size_t size);
+ void* Alloc(size_t size);
- void* ReallocDebug(void* p, size_t new_size, const FX_CHAR* file, int line)
- {
- return NULL;
- }
+ void* ReallocDebug(void* p, size_t new_size, const FX_CHAR* file, int line) {
+ return NULL;
+ }
- void* Realloc(void* p, size_t new_size)
- {
- return NULL;
- }
+ void* Realloc(void* p, size_t new_size) { return NULL; }
- void Free(void*) {}
+ void Free(void*) {}
- void FreeAll();
-private:
+ void FreeAll();
- size_t m_TrunkSize;
+ private:
+ size_t m_TrunkSize;
- void* m_pFirstTrunk;
+ void* m_pFirstTrunk;
};
#endif // __cplusplus
diff --git a/core/include/fxcrt/fx_stream.h b/core/include/fxcrt/fx_stream.h
index c46f496a0d..2f3ebdcfce 100644
--- a/core/include/fxcrt/fx_stream.h
+++ b/core/include/fxcrt/fx_stream.h
@@ -11,178 +11,171 @@
void* FX_OpenFolder(const FX_CHAR* path);
void* FX_OpenFolder(const FX_WCHAR* path);
-FX_BOOL FX_GetNextFile(void* handle, CFX_ByteString& filename, FX_BOOL& bFolder);
-FX_BOOL FX_GetNextFile(void* handle, CFX_WideString& filename, FX_BOOL& bFolder);
+FX_BOOL FX_GetNextFile(void* handle,
+ CFX_ByteString& filename,
+ FX_BOOL& bFolder);
+FX_BOOL FX_GetNextFile(void* handle,
+ CFX_WideString& filename,
+ FX_BOOL& bFolder);
void FX_CloseFolder(void* handle);
FX_WCHAR FX_GetFolderSeparator();
#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
-#define FX_FILESIZE int32_t
+#define FX_FILESIZE int32_t
#else
#include <fcntl.h>
#include <unistd.h>
#include <sys/stat.h>
#ifndef O_BINARY
-#define O_BINARY 0
+#define O_BINARY 0
#endif
#ifndef O_LARGEFILE
-#define O_LARGEFILE 0
+#define O_LARGEFILE 0
#endif
-#define FX_FILESIZE off_t
+#define FX_FILESIZE off_t
#endif
-#define FX_GETBYTEOFFSET32(a) 0
-#define FX_GETBYTEOFFSET40(a) 0
-#define FX_GETBYTEOFFSET48(a) 0
-#define FX_GETBYTEOFFSET56(a) 0
-#define FX_GETBYTEOFFSET24(a) ((uint8_t)(a>>24))
-#define FX_GETBYTEOFFSET16(a) ((uint8_t)(a>>16))
-#define FX_GETBYTEOFFSET8(a) ((uint8_t)(a>>8))
-#define FX_GETBYTEOFFSET0(a) ((uint8_t)(a))
-#define FX_FILEMODE_Write 0
-#define FX_FILEMODE_ReadOnly 1
-#define FX_FILEMODE_Truncate 2
-FX_BOOL FX_File_Exist(const CFX_ByteStringC& fileName);
-FX_BOOL FX_File_Exist(const CFX_WideStringC& fileName);
-FX_BOOL FX_File_Delete(const CFX_ByteStringC& fileName);
-FX_BOOL FX_File_Delete(const CFX_WideStringC& fileName);
-FX_BOOL FX_File_Copy(const CFX_ByteStringC& fileNameSrc, const CFX_ByteStringC& fileNameDst);
-FX_BOOL FX_File_Copy(const CFX_WideStringC& fileNameSrc, const CFX_WideStringC& fileNameDst);
-FX_BOOL FX_File_Move(const CFX_ByteStringC& fileNameSrc, const CFX_ByteStringC& fileNameDst);
-FX_BOOL FX_File_Move(const CFX_WideStringC& fileNameSrc, const CFX_WideStringC& fileNameDst);
-class IFX_StreamWrite
-{
-public:
- virtual ~IFX_StreamWrite() { }
- virtual void Release() = 0;
-
- virtual FX_BOOL WriteBlock(const void* pData, size_t size) = 0;
+#define FX_GETBYTEOFFSET32(a) 0
+#define FX_GETBYTEOFFSET40(a) 0
+#define FX_GETBYTEOFFSET48(a) 0
+#define FX_GETBYTEOFFSET56(a) 0
+#define FX_GETBYTEOFFSET24(a) ((uint8_t)(a >> 24))
+#define FX_GETBYTEOFFSET16(a) ((uint8_t)(a >> 16))
+#define FX_GETBYTEOFFSET8(a) ((uint8_t)(a >> 8))
+#define FX_GETBYTEOFFSET0(a) ((uint8_t)(a))
+#define FX_FILEMODE_Write 0
+#define FX_FILEMODE_ReadOnly 1
+#define FX_FILEMODE_Truncate 2
+FX_BOOL FX_File_Exist(const CFX_ByteStringC& fileName);
+FX_BOOL FX_File_Exist(const CFX_WideStringC& fileName);
+FX_BOOL FX_File_Delete(const CFX_ByteStringC& fileName);
+FX_BOOL FX_File_Delete(const CFX_WideStringC& fileName);
+FX_BOOL FX_File_Copy(const CFX_ByteStringC& fileNameSrc,
+ const CFX_ByteStringC& fileNameDst);
+FX_BOOL FX_File_Copy(const CFX_WideStringC& fileNameSrc,
+ const CFX_WideStringC& fileNameDst);
+FX_BOOL FX_File_Move(const CFX_ByteStringC& fileNameSrc,
+ const CFX_ByteStringC& fileNameDst);
+FX_BOOL FX_File_Move(const CFX_WideStringC& fileNameSrc,
+ const CFX_WideStringC& fileNameDst);
+class IFX_StreamWrite {
+ public:
+ virtual ~IFX_StreamWrite() {}
+ virtual void Release() = 0;
+
+ virtual FX_BOOL WriteBlock(const void* pData, size_t size) = 0;
};
-class IFX_FileWrite : public IFX_StreamWrite
-{
-public:
+class IFX_FileWrite : public IFX_StreamWrite {
+ public:
+ virtual void Release() = 0;
- virtual void Release() = 0;
+ virtual FX_FILESIZE GetSize() = 0;
- virtual FX_FILESIZE GetSize() = 0;
+ virtual FX_BOOL Flush() = 0;
- virtual FX_BOOL Flush() = 0;
-
- virtual FX_BOOL WriteBlock(const void* pData, FX_FILESIZE offset, size_t size) = 0;
- virtual FX_BOOL WriteBlock(const void* pData, size_t size)
- {
- return WriteBlock(pData, GetSize(), size);
- }
+ virtual FX_BOOL WriteBlock(const void* pData,
+ FX_FILESIZE offset,
+ size_t size) = 0;
+ virtual FX_BOOL WriteBlock(const void* pData, size_t size) {
+ return WriteBlock(pData, GetSize(), size);
+ }
};
IFX_FileWrite* FX_CreateFileWrite(const FX_CHAR* filename);
IFX_FileWrite* FX_CreateFileWrite(const FX_WCHAR* filename);
-class IFX_StreamRead
-{
-public:
- virtual ~IFX_StreamRead() { }
+class IFX_StreamRead {
+ public:
+ virtual ~IFX_StreamRead() {}
- virtual void Release() = 0;
+ virtual void Release() = 0;
- virtual FX_BOOL IsEOF() = 0;
+ virtual FX_BOOL IsEOF() = 0;
- virtual FX_FILESIZE GetPosition() = 0;
+ virtual FX_FILESIZE GetPosition() = 0;
- virtual size_t ReadBlock(void* buffer, size_t size) = 0;
+ virtual size_t ReadBlock(void* buffer, size_t size) = 0;
};
-class IFX_FileRead : IFX_StreamRead
-{
-public:
- virtual void Release() = 0;
+class IFX_FileRead : IFX_StreamRead {
+ public:
+ virtual void Release() = 0;
- virtual FX_FILESIZE GetSize() = 0;
+ virtual FX_FILESIZE GetSize() = 0;
- virtual FX_BOOL IsEOF()
- {
- return FALSE;
- }
+ virtual FX_BOOL IsEOF() { return FALSE; }
- virtual FX_FILESIZE GetPosition()
- {
- return 0;
- }
+ virtual FX_FILESIZE GetPosition() { return 0; }
- virtual FX_BOOL SetRange(FX_FILESIZE offset, FX_FILESIZE size)
- {
- return FALSE;
- }
+ virtual FX_BOOL SetRange(FX_FILESIZE offset, FX_FILESIZE size) {
+ return FALSE;
+ }
- virtual void ClearRange() {}
+ virtual void ClearRange() {}
- virtual FX_BOOL ReadBlock(void* buffer, FX_FILESIZE offset, size_t size) = 0;
+ virtual FX_BOOL ReadBlock(void* buffer, FX_FILESIZE offset, size_t size) = 0;
- virtual size_t ReadBlock(void* buffer, size_t size)
- {
- return 0;
- }
+ virtual size_t ReadBlock(void* buffer, size_t size) { return 0; }
};
IFX_FileRead* FX_CreateFileRead(const FX_CHAR* filename);
IFX_FileRead* FX_CreateFileRead(const FX_WCHAR* filename);
-class IFX_FileStream : public IFX_FileRead, public IFX_FileWrite
-{
-public:
-
- virtual IFX_FileStream* Retain() = 0;
+class IFX_FileStream : public IFX_FileRead, public IFX_FileWrite {
+ public:
+ virtual IFX_FileStream* Retain() = 0;
- virtual void Release() = 0;
+ virtual void Release() = 0;
- virtual FX_FILESIZE GetSize() = 0;
+ virtual FX_FILESIZE GetSize() = 0;
- virtual FX_BOOL IsEOF() = 0;
+ virtual FX_BOOL IsEOF() = 0;
- virtual FX_FILESIZE GetPosition() = 0;
+ virtual FX_FILESIZE GetPosition() = 0;
- virtual FX_BOOL ReadBlock(void* buffer, FX_FILESIZE offset, size_t size) = 0;
+ virtual FX_BOOL ReadBlock(void* buffer, FX_FILESIZE offset, size_t size) = 0;
- virtual size_t ReadBlock(void* buffer, size_t size) = 0;
+ virtual size_t ReadBlock(void* buffer, size_t size) = 0;
- virtual FX_BOOL WriteBlock(const void* buffer, FX_FILESIZE offset, size_t size) = 0;
- virtual FX_BOOL WriteBlock(const void* buffer, size_t size)
- {
- return WriteBlock(buffer, GetSize(), size);
- }
+ virtual FX_BOOL WriteBlock(const void* buffer,
+ FX_FILESIZE offset,
+ size_t size) = 0;
+ virtual FX_BOOL WriteBlock(const void* buffer, size_t size) {
+ return WriteBlock(buffer, GetSize(), size);
+ }
- virtual FX_BOOL Flush() = 0;
+ virtual FX_BOOL Flush() = 0;
};
-IFX_FileStream* FX_CreateFileStream(const FX_CHAR* filename, FX_DWORD dwModes);
-IFX_FileStream* FX_CreateFileStream(const FX_WCHAR* filename, FX_DWORD dwModes);
-class IFX_MemoryStream : public IFX_FileStream
-{
-public:
+IFX_FileStream* FX_CreateFileStream(const FX_CHAR* filename, FX_DWORD dwModes);
+IFX_FileStream* FX_CreateFileStream(const FX_WCHAR* filename, FX_DWORD dwModes);
+class IFX_MemoryStream : public IFX_FileStream {
+ public:
+ virtual FX_BOOL IsConsecutive() const = 0;
- virtual FX_BOOL IsConsecutive() const = 0;
+ virtual void EstimateSize(size_t nInitSize, size_t nGrowSize) = 0;
- virtual void EstimateSize(size_t nInitSize, size_t nGrowSize) = 0;
+ virtual uint8_t* GetBuffer() const = 0;
- virtual uint8_t* GetBuffer() const = 0;
+ virtual void AttachBuffer(uint8_t* pBuffer,
+ size_t nSize,
+ FX_BOOL bTakeOver = FALSE) = 0;
- virtual void AttachBuffer(uint8_t* pBuffer, size_t nSize, FX_BOOL bTakeOver = FALSE) = 0;
-
- virtual void DetachBuffer() = 0;
+ virtual void DetachBuffer() = 0;
};
-IFX_MemoryStream* FX_CreateMemoryStream(uint8_t* pBuffer, size_t nSize, FX_BOOL bTakeOver = FALSE);
-IFX_MemoryStream* FX_CreateMemoryStream(FX_BOOL bConsecutive = FALSE);
-class IFX_BufferRead : public IFX_StreamRead
-{
-public:
-
- virtual void Release() = 0;
+IFX_MemoryStream* FX_CreateMemoryStream(uint8_t* pBuffer,
+ size_t nSize,
+ FX_BOOL bTakeOver = FALSE);
+IFX_MemoryStream* FX_CreateMemoryStream(FX_BOOL bConsecutive = FALSE);
+class IFX_BufferRead : public IFX_StreamRead {
+ public:
+ virtual void Release() = 0;
- virtual FX_BOOL IsEOF() = 0;
+ virtual FX_BOOL IsEOF() = 0;
- virtual FX_FILESIZE GetPosition() = 0;
+ virtual FX_FILESIZE GetPosition() = 0;
- virtual size_t ReadBlock(void* buffer, size_t size) = 0;
+ virtual size_t ReadBlock(void* buffer, size_t size) = 0;
- virtual FX_BOOL ReadNextBlock(FX_BOOL bRestart = FALSE) = 0;
+ virtual FX_BOOL ReadNextBlock(FX_BOOL bRestart = FALSE) = 0;
- virtual const uint8_t* GetBlockBuffer() = 0;
+ virtual const uint8_t* GetBlockBuffer() = 0;
- virtual size_t GetBlockSize() = 0;
+ virtual size_t GetBlockSize() = 0;
- virtual FX_FILESIZE GetBlockOffset() = 0;
+ virtual FX_FILESIZE GetBlockOffset() = 0;
};
#endif // CORE_INCLUDE_FXCRT_FX_STREAM_H_
diff --git a/core/include/fxcrt/fx_string.h b/core/include/fxcrt/fx_string.h
index 8d73555814..f493c53ed9 100644
--- a/core/include/fxcrt/fx_string.h
+++ b/core/include/fxcrt/fx_string.h
@@ -20,891 +20,790 @@ struct CFX_CharMap;
// An immutable string with caller-provided storage which must outlive the
// string itself.
-class CFX_ByteStringC
-{
-public:
- typedef FX_CHAR value_type;
-
- CFX_ByteStringC()
- {
- m_Ptr = NULL;
- m_Length = 0;
- }
-
- CFX_ByteStringC(const uint8_t* ptr, FX_STRSIZE size)
- {
- m_Ptr = ptr;
- m_Length = size;
- }
-
- CFX_ByteStringC(const FX_CHAR* ptr)
- {
- m_Ptr = (const uint8_t*)ptr;
- m_Length = ptr ? FXSYS_strlen(ptr) : 0;
- }
-
- // |ch| must be an lvalue that outlives the the CFX_ByteStringC. However,
- // the use of char rvalues are not caught at compile time. They are
- // implicitly promoted to CFX_ByteString (see below) and then the
- // CFX_ByteStringC is constructed from the CFX_ByteString via the alternate
- // constructor below. The CFX_ByteString then typically goes out of scope
- // and |m_Ptr| may be left pointing to invalid memory. Beware.
- // TODO(tsepez): Mark single-argument string constructors as explicit.
- CFX_ByteStringC(FX_CHAR& ch)
- {
- m_Ptr = (const uint8_t*)&ch;
- m_Length = 1;
- }
-
- CFX_ByteStringC(const FX_CHAR* ptr, FX_STRSIZE len)
- {
- m_Ptr = (const uint8_t*)ptr;
- m_Length = (len == -1) ? FXSYS_strlen(ptr) : len;
- }
-
- CFX_ByteStringC(const CFX_ByteStringC& src)
- {
- m_Ptr = src.m_Ptr;
- m_Length = src.m_Length;
- }
+class CFX_ByteStringC {
+ public:
+ typedef FX_CHAR value_type;
+
+ CFX_ByteStringC() {
+ m_Ptr = NULL;
+ m_Length = 0;
+ }
+
+ CFX_ByteStringC(const uint8_t* ptr, FX_STRSIZE size) {
+ m_Ptr = ptr;
+ m_Length = size;
+ }
+
+ CFX_ByteStringC(const FX_CHAR* ptr) {
+ m_Ptr = (const uint8_t*)ptr;
+ m_Length = ptr ? FXSYS_strlen(ptr) : 0;
+ }
+
+ // |ch| must be an lvalue that outlives the the CFX_ByteStringC. However,
+ // the use of char rvalues are not caught at compile time. They are
+ // implicitly promoted to CFX_ByteString (see below) and then the
+ // CFX_ByteStringC is constructed from the CFX_ByteString via the alternate
+ // constructor below. The CFX_ByteString then typically goes out of scope
+ // and |m_Ptr| may be left pointing to invalid memory. Beware.
+ // TODO(tsepez): Mark single-argument string constructors as explicit.
+ CFX_ByteStringC(FX_CHAR& ch) {
+ m_Ptr = (const uint8_t*)&ch;
+ m_Length = 1;
+ }
+
+ CFX_ByteStringC(const FX_CHAR* ptr, FX_STRSIZE len) {
+ m_Ptr = (const uint8_t*)ptr;
+ m_Length = (len == -1) ? FXSYS_strlen(ptr) : len;
+ }
+
+ CFX_ByteStringC(const CFX_ByteStringC& src) {
+ m_Ptr = src.m_Ptr;
+ m_Length = src.m_Length;
+ }
+
+ CFX_ByteStringC(const CFX_ByteString& src);
+
+ CFX_ByteStringC& operator=(const FX_CHAR* src) {
+ m_Ptr = (const uint8_t*)src;
+ m_Length = m_Ptr ? FXSYS_strlen(src) : 0;
+ return *this;
+ }
- CFX_ByteStringC(const CFX_ByteString& src);
+ CFX_ByteStringC& operator=(const CFX_ByteStringC& src) {
+ m_Ptr = src.m_Ptr;
+ m_Length = src.m_Length;
+ return *this;
+ }
- CFX_ByteStringC& operator = (const FX_CHAR* src)
- {
- m_Ptr = (const uint8_t*)src;
- m_Length = m_Ptr ? FXSYS_strlen(src) : 0;
- return *this;
- }
+ CFX_ByteStringC& operator=(const CFX_ByteString& src);
- CFX_ByteStringC& operator = (const CFX_ByteStringC& src)
- {
- m_Ptr = src.m_Ptr;
- m_Length = src.m_Length;
- return *this;
- }
+ bool operator==(const char* ptr) const {
+ return FXSYS_strlen(ptr) == m_Length &&
+ FXSYS_memcmp(ptr, m_Ptr, m_Length) == 0;
+ }
+ bool operator==(const CFX_ByteStringC& other) const {
+ return other.m_Length == m_Length &&
+ FXSYS_memcmp(other.m_Ptr, m_Ptr, m_Length) == 0;
+ }
+ bool operator!=(const char* ptr) const { return !(*this == ptr); }
+ bool operator!=(const CFX_ByteStringC& other) const {
+ return !(*this == other);
+ }
- CFX_ByteStringC& operator = (const CFX_ByteString& src);
+ FX_DWORD GetID(FX_STRSIZE start_pos = 0) const;
- bool operator== (const char* ptr) const {
- return FXSYS_strlen(ptr) == m_Length &&
- FXSYS_memcmp(ptr, m_Ptr, m_Length) == 0;
- }
- bool operator== (const CFX_ByteStringC& other) const {
- return other.m_Length == m_Length &&
- FXSYS_memcmp(other.m_Ptr, m_Ptr, m_Length) == 0;
- }
- bool operator!= (const char* ptr) const { return !(*this == ptr); }
- bool operator!= (const CFX_ByteStringC& other) const {
- return !(*this == other);
- }
+ const uint8_t* GetPtr() const { return m_Ptr; }
- FX_DWORD GetID(FX_STRSIZE start_pos = 0) const;
+ const FX_CHAR* GetCStr() const { return (const FX_CHAR*)m_Ptr; }
- const uint8_t* GetPtr() const
- {
- return m_Ptr;
- }
+ FX_STRSIZE GetLength() const { return m_Length; }
- const FX_CHAR* GetCStr() const
- {
- return (const FX_CHAR*)m_Ptr;
- }
+ bool IsEmpty() const { return m_Length == 0; }
- FX_STRSIZE GetLength() const
- {
- return m_Length;
- }
+ uint8_t GetAt(FX_STRSIZE index) const { return m_Ptr[index]; }
- bool IsEmpty() const
- {
- return m_Length == 0;
+ CFX_ByteStringC Mid(FX_STRSIZE index, FX_STRSIZE count = -1) const {
+ if (index < 0) {
+ index = 0;
}
-
- uint8_t GetAt(FX_STRSIZE index) const
- {
- return m_Ptr[index];
+ if (index > m_Length) {
+ return CFX_ByteStringC();
}
-
- CFX_ByteStringC Mid(FX_STRSIZE index, FX_STRSIZE count = -1) const
- {
- if (index < 0) {
- index = 0;
- }
- if (index > m_Length) {
- return CFX_ByteStringC();
- }
- if (count < 0 || count > m_Length - index) {
- count = m_Length - index;
- }
- return CFX_ByteStringC(m_Ptr + index, count);
+ if (count < 0 || count > m_Length - index) {
+ count = m_Length - index;
}
+ return CFX_ByteStringC(m_Ptr + index, count);
+ }
- const uint8_t& operator[] (size_t index) const
- {
- return m_Ptr[index];
- }
+ const uint8_t& operator[](size_t index) const { return m_Ptr[index]; }
- bool operator< (const CFX_ByteStringC& that) const
- {
- int result = memcmp(m_Ptr, that.m_Ptr, std::min(m_Length, that.m_Length));
- return result < 0 || (result == 0 && m_Length < that.m_Length);
- }
+ bool operator<(const CFX_ByteStringC& that) const {
+ int result = memcmp(m_Ptr, that.m_Ptr, std::min(m_Length, that.m_Length));
+ return result < 0 || (result == 0 && m_Length < that.m_Length);
+ }
-protected:
- const uint8_t* m_Ptr;
- FX_STRSIZE m_Length;
+ protected:
+ const uint8_t* m_Ptr;
+ FX_STRSIZE m_Length;
-private:
- void* operator new (size_t) throw()
- {
- return NULL;
- }
+ private:
+ void* operator new(size_t) throw() { return NULL; }
};
-inline bool operator== (const char* lhs, const CFX_ByteStringC& rhs) {
- return rhs == lhs;
+inline bool operator==(const char* lhs, const CFX_ByteStringC& rhs) {
+ return rhs == lhs;
}
-inline bool operator!= (const char* lhs, const CFX_ByteStringC& rhs) {
- return rhs != lhs;
+inline bool operator!=(const char* lhs, const CFX_ByteStringC& rhs) {
+ return rhs != lhs;
}
-#define FX_BSTRC(str) CFX_ByteStringC(str, sizeof str-1)
+#define FX_BSTRC(str) CFX_ByteStringC(str, sizeof str - 1)
#define FXBSTR_ID(c1, c2, c3, c4) ((c1 << 24) | (c2 << 16) | (c3 << 8) | (c4))
// A mutable string with shared buffers using copy-on-write semantics that
// avoids the cost of std::string's iterator stability guarantees.
-class CFX_ByteString
-{
-public:
- typedef FX_CHAR value_type;
+class CFX_ByteString {
+ public:
+ typedef FX_CHAR value_type;
- CFX_ByteString() : m_pData(nullptr) { }
+ CFX_ByteString() : m_pData(nullptr) {}
- // Copy constructor.
- CFX_ByteString(const CFX_ByteString& str);
+ // Copy constructor.
+ CFX_ByteString(const CFX_ByteString& str);
- // Move constructor.
- inline CFX_ByteString(CFX_ByteString&& other) {
- m_pData = other.m_pData;
- other.m_pData = nullptr;
- }
+ // Move constructor.
+ inline CFX_ByteString(CFX_ByteString&& other) {
+ m_pData = other.m_pData;
+ other.m_pData = nullptr;
+ }
- CFX_ByteString(char ch);
- CFX_ByteString(const FX_CHAR* ptr)
- : CFX_ByteString(ptr, ptr ? FXSYS_strlen(ptr) : 0) { }
+ CFX_ByteString(char ch);
+ CFX_ByteString(const FX_CHAR* ptr)
+ : CFX_ByteString(ptr, ptr ? FXSYS_strlen(ptr) : 0) {}
- CFX_ByteString(const FX_CHAR* ptr, FX_STRSIZE len);
- CFX_ByteString(const uint8_t* ptr, FX_STRSIZE len);
+ CFX_ByteString(const FX_CHAR* ptr, FX_STRSIZE len);
+ CFX_ByteString(const uint8_t* ptr, FX_STRSIZE len);
- CFX_ByteString(const CFX_ByteStringC& bstrc);
- CFX_ByteString(const CFX_ByteStringC& bstrc1, const CFX_ByteStringC& bstrc2);
+ CFX_ByteString(const CFX_ByteStringC& bstrc);
+ CFX_ByteString(const CFX_ByteStringC& bstrc1, const CFX_ByteStringC& bstrc2);
- ~CFX_ByteString();
+ ~CFX_ByteString();
- static CFX_ByteString FromUnicode(const FX_WCHAR* ptr, FX_STRSIZE len = -1);
+ static CFX_ByteString FromUnicode(const FX_WCHAR* ptr, FX_STRSIZE len = -1);
- static CFX_ByteString FromUnicode(const CFX_WideString& str);
+ static CFX_ByteString FromUnicode(const CFX_WideString& str);
- // Explicit conversion to raw string
- const FX_CHAR* c_str() const
- {
- return m_pData ? m_pData->m_String : "";
- }
+ // Explicit conversion to raw string
+ const FX_CHAR* c_str() const { return m_pData ? m_pData->m_String : ""; }
- // Implicit conversion to C-style string -- deprecated
- operator const FX_CHAR*() const
- {
- return m_pData ? m_pData->m_String : "";
- }
+ // Implicit conversion to C-style string -- deprecated
+ operator const FX_CHAR*() const { return m_pData ? m_pData->m_String : ""; }
- operator const uint8_t*() const
- {
- return m_pData ? (const uint8_t*)m_pData->m_String : NULL;
- }
+ operator const uint8_t*() const {
+ return m_pData ? (const uint8_t*)m_pData->m_String : NULL;
+ }
- FX_STRSIZE GetLength() const
- {
- return m_pData ? m_pData->m_nDataLength : 0;
- }
-
- bool IsEmpty() const
- {
- return !GetLength();
- }
-
- int Compare(const CFX_ByteStringC& str) const;
+ FX_STRSIZE GetLength() const { return m_pData ? m_pData->m_nDataLength : 0; }
+ bool IsEmpty() const { return !GetLength(); }
- bool Equal(const char* ptr) const;
- bool Equal(const CFX_ByteStringC& str) const;
- bool Equal(const CFX_ByteString& other) const;
+ int Compare(const CFX_ByteStringC& str) const;
- bool EqualNoCase(const CFX_ByteStringC& str) const;
+ bool Equal(const char* ptr) const;
+ bool Equal(const CFX_ByteStringC& str) const;
+ bool Equal(const CFX_ByteString& other) const;
- bool operator== (const char* ptr) const { return Equal(ptr); }
- bool operator== (const CFX_ByteStringC& str) const { return Equal(str); }
- bool operator== (const CFX_ByteString& other) const { return Equal(other); }
-
- bool operator!= (const char* ptr) const { return !(*this == ptr); }
- bool operator!= (const CFX_ByteStringC& str) const {
- return !(*this == str);
- }
- bool operator!= (const CFX_ByteString& other) const {
- return !(*this == other);
- }
+ bool EqualNoCase(const CFX_ByteStringC& str) const;
- bool operator< (const CFX_ByteString& str) const
- {
- int result = FXSYS_memcmp(c_str(), str.c_str(), std::min(GetLength(), str.GetLength()));
- return result < 0 || (result == 0 && GetLength() < str.GetLength());
- }
+ bool operator==(const char* ptr) const { return Equal(ptr); }
+ bool operator==(const CFX_ByteStringC& str) const { return Equal(str); }
+ bool operator==(const CFX_ByteString& other) const { return Equal(other); }
- void Empty();
+ bool operator!=(const char* ptr) const { return !(*this == ptr); }
+ bool operator!=(const CFX_ByteStringC& str) const { return !(*this == str); }
+ bool operator!=(const CFX_ByteString& other) const {
+ return !(*this == other);
+ }
- const CFX_ByteString& operator = (const FX_CHAR* str);
+ bool operator<(const CFX_ByteString& str) const {
+ int result = FXSYS_memcmp(c_str(), str.c_str(),
+ std::min(GetLength(), str.GetLength()));
+ return result < 0 || (result == 0 && GetLength() < str.GetLength());
+ }
- const CFX_ByteString& operator = (const CFX_ByteStringC& bstrc);
+ void Empty();
- const CFX_ByteString& operator = (const CFX_ByteString& stringSrc);
+ const CFX_ByteString& operator=(const FX_CHAR* str);
- const CFX_ByteString& operator = (const CFX_BinaryBuf& buf);
+ const CFX_ByteString& operator=(const CFX_ByteStringC& bstrc);
- void Load(const uint8_t* str, FX_STRSIZE len);
+ const CFX_ByteString& operator=(const CFX_ByteString& stringSrc);
- const CFX_ByteString& operator += (FX_CHAR ch);
+ const CFX_ByteString& operator=(const CFX_BinaryBuf& buf);
- const CFX_ByteString& operator += (const FX_CHAR* str);
+ void Load(const uint8_t* str, FX_STRSIZE len);
- const CFX_ByteString& operator += (const CFX_ByteString& str);
+ const CFX_ByteString& operator+=(FX_CHAR ch);
- const CFX_ByteString& operator += (const CFX_ByteStringC& bstrc);
+ const CFX_ByteString& operator+=(const FX_CHAR* str);
- uint8_t GetAt(FX_STRSIZE nIndex) const
- {
- return m_pData ? m_pData->m_String[nIndex] : 0;
- }
+ const CFX_ByteString& operator+=(const CFX_ByteString& str);
- uint8_t operator[](FX_STRSIZE nIndex) const
- {
- return m_pData ? m_pData->m_String[nIndex] : 0;
- }
+ const CFX_ByteString& operator+=(const CFX_ByteStringC& bstrc);
- void SetAt(FX_STRSIZE nIndex, FX_CHAR ch);
+ uint8_t GetAt(FX_STRSIZE nIndex) const {
+ return m_pData ? m_pData->m_String[nIndex] : 0;
+ }
- FX_STRSIZE Insert(FX_STRSIZE index, FX_CHAR ch);
+ uint8_t operator[](FX_STRSIZE nIndex) const {
+ return m_pData ? m_pData->m_String[nIndex] : 0;
+ }
- FX_STRSIZE Delete(FX_STRSIZE index, FX_STRSIZE count = 1);
+ void SetAt(FX_STRSIZE nIndex, FX_CHAR ch);
+ FX_STRSIZE Insert(FX_STRSIZE index, FX_CHAR ch);
- void Format(const FX_CHAR* lpszFormat, ... );
+ FX_STRSIZE Delete(FX_STRSIZE index, FX_STRSIZE count = 1);
- void FormatV(const FX_CHAR* lpszFormat, va_list argList);
+ void Format(const FX_CHAR* lpszFormat, ...);
+ void FormatV(const FX_CHAR* lpszFormat, va_list argList);
- void Reserve(FX_STRSIZE len);
+ void Reserve(FX_STRSIZE len);
- FX_CHAR* GetBuffer(FX_STRSIZE len);
+ FX_CHAR* GetBuffer(FX_STRSIZE len);
- void ReleaseBuffer(FX_STRSIZE len = -1);
+ void ReleaseBuffer(FX_STRSIZE len = -1);
- CFX_ByteString Mid(FX_STRSIZE first) const;
+ CFX_ByteString Mid(FX_STRSIZE first) const;
- CFX_ByteString Mid(FX_STRSIZE first, FX_STRSIZE count) const;
+ CFX_ByteString Mid(FX_STRSIZE first, FX_STRSIZE count) const;
- CFX_ByteString Left(FX_STRSIZE count) const;
+ CFX_ByteString Left(FX_STRSIZE count) const;
- CFX_ByteString Right(FX_STRSIZE count) const;
+ CFX_ByteString Right(FX_STRSIZE count) const;
- FX_STRSIZE Find(const CFX_ByteStringC& lpszSub, FX_STRSIZE start = 0) const;
+ FX_STRSIZE Find(const CFX_ByteStringC& lpszSub, FX_STRSIZE start = 0) const;
- FX_STRSIZE Find(FX_CHAR ch, FX_STRSIZE start = 0) const;
+ FX_STRSIZE Find(FX_CHAR ch, FX_STRSIZE start = 0) const;
- FX_STRSIZE ReverseFind(FX_CHAR ch) const;
+ FX_STRSIZE ReverseFind(FX_CHAR ch) const;
- void MakeLower();
+ void MakeLower();
- void MakeUpper();
+ void MakeUpper();
- void TrimRight();
+ void TrimRight();
- void TrimRight(FX_CHAR chTarget);
+ void TrimRight(FX_CHAR chTarget);
- void TrimRight(const CFX_ByteStringC& lpszTargets);
+ void TrimRight(const CFX_ByteStringC& lpszTargets);
- void TrimLeft();
+ void TrimLeft();
- void TrimLeft(FX_CHAR chTarget);
+ void TrimLeft(FX_CHAR chTarget);
- void TrimLeft(const CFX_ByteStringC& lpszTargets);
+ void TrimLeft(const CFX_ByteStringC& lpszTargets);
- FX_STRSIZE Replace(const CFX_ByteStringC& lpszOld, const CFX_ByteStringC& lpszNew);
+ FX_STRSIZE Replace(const CFX_ByteStringC& lpszOld,
+ const CFX_ByteStringC& lpszNew);
- FX_STRSIZE Remove(FX_CHAR ch);
+ FX_STRSIZE Remove(FX_CHAR ch);
- CFX_WideString UTF8Decode() const;
+ CFX_WideString UTF8Decode() const;
- void ConvertFrom(const CFX_WideString& str, CFX_CharMap* pCharMap = NULL);
+ void ConvertFrom(const CFX_WideString& str, CFX_CharMap* pCharMap = NULL);
- FX_DWORD GetID(FX_STRSIZE start_pos = 0) const;
+ FX_DWORD GetID(FX_STRSIZE start_pos = 0) const;
-#define FXFORMAT_SIGNED 1
-#define FXFORMAT_HEX 2
-#define FXFORMAT_CAPITAL 4
+#define FXFORMAT_SIGNED 1
+#define FXFORMAT_HEX 2
+#define FXFORMAT_CAPITAL 4
- static CFX_ByteString FormatInteger(int i, FX_DWORD flags = 0);
- static CFX_ByteString FormatFloat(FX_FLOAT f, int precision = 0);
+ static CFX_ByteString FormatInteger(int i, FX_DWORD flags = 0);
+ static CFX_ByteString FormatFloat(FX_FLOAT f, int precision = 0);
-protected:
- // To ensure ref counts do not overflow, consider the worst possible case:
- // the entire address space contains nothing but pointers to this object.
- // Since the count increments with each new pointer, the largest value is
- // the number of pointers that can fit into the address space. The size of
- // the address space itself is a good upper bound on it; we need not go
- // larger.
- class StringData {
- public:
- static StringData* Create(int nLen);
- void Retain() { ++m_nRefs; }
- void Release() { if (--m_nRefs <= 0) FX_Free(this); }
+ protected:
+ // To ensure ref counts do not overflow, consider the worst possible case:
+ // the entire address space contains nothing but pointers to this object.
+ // Since the count increments with each new pointer, the largest value is
+ // the number of pointers that can fit into the address space. The size of
+ // the address space itself is a good upper bound on it; we need not go
+ // larger.
+ class StringData {
+ public:
+ static StringData* Create(int nLen);
+ void Retain() { ++m_nRefs; }
+ void Release() {
+ if (--m_nRefs <= 0)
+ FX_Free(this);
+ }
- intptr_t m_nRefs; // Would prefer ssize_t, but no windows support.
- FX_STRSIZE m_nDataLength;
- FX_STRSIZE m_nAllocLength;
- FX_CHAR m_String[1];
+ intptr_t m_nRefs; // Would prefer ssize_t, but no windows support.
+ FX_STRSIZE m_nDataLength;
+ FX_STRSIZE m_nAllocLength;
+ FX_CHAR m_String[1];
- private:
- StringData(FX_STRSIZE dataLen, FX_STRSIZE allocLen)
- : m_nRefs(1), m_nDataLength(dataLen), m_nAllocLength(allocLen) {
- FXSYS_assert(dataLen >= 0);
- FXSYS_assert(allocLen >= 0);
- FXSYS_assert(dataLen <= allocLen);
- m_String[dataLen] = 0;
- }
- ~StringData() = delete;
- };
+ private:
+ StringData(FX_STRSIZE dataLen, FX_STRSIZE allocLen)
+ : m_nRefs(1), m_nDataLength(dataLen), m_nAllocLength(allocLen) {
+ FXSYS_assert(dataLen >= 0);
+ FXSYS_assert(allocLen >= 0);
+ FXSYS_assert(dataLen <= allocLen);
+ m_String[dataLen] = 0;
+ }
+ ~StringData() = delete;
+ };
- void AllocCopy(CFX_ByteString& dest, FX_STRSIZE nCopyLen, FX_STRSIZE nCopyIndex) const;
- void AssignCopy(FX_STRSIZE nSrcLen, const FX_CHAR* lpszSrcData);
- void ConcatCopy(FX_STRSIZE nSrc1Len, const FX_CHAR* lpszSrc1Data, FX_STRSIZE nSrc2Len, const FX_CHAR* lpszSrc2Data);
- void ConcatInPlace(FX_STRSIZE nSrcLen, const FX_CHAR* lpszSrcData);
- void CopyBeforeWrite();
- void AllocBeforeWrite(FX_STRSIZE nLen);
+ void AllocCopy(CFX_ByteString& dest,
+ FX_STRSIZE nCopyLen,
+ FX_STRSIZE nCopyIndex) const;
+ void AssignCopy(FX_STRSIZE nSrcLen, const FX_CHAR* lpszSrcData);
+ void ConcatCopy(FX_STRSIZE nSrc1Len,
+ const FX_CHAR* lpszSrc1Data,
+ FX_STRSIZE nSrc2Len,
+ const FX_CHAR* lpszSrc2Data);
+ void ConcatInPlace(FX_STRSIZE nSrcLen, const FX_CHAR* lpszSrcData);
+ void CopyBeforeWrite();
+ void AllocBeforeWrite(FX_STRSIZE nLen);
- StringData* m_pData;
- friend class fxcrt_ByteStringConcatInPlace_Test;
+ StringData* m_pData;
+ friend class fxcrt_ByteStringConcatInPlace_Test;
};
-inline CFX_ByteStringC::CFX_ByteStringC(const CFX_ByteString& src)
-{
- m_Ptr = (const uint8_t*)src;
- m_Length = src.GetLength();
+inline CFX_ByteStringC::CFX_ByteStringC(const CFX_ByteString& src) {
+ m_Ptr = (const uint8_t*)src;
+ m_Length = src.GetLength();
}
-inline CFX_ByteStringC& CFX_ByteStringC::operator = (const CFX_ByteString& src)
-{
- m_Ptr = (const uint8_t*)src;
- m_Length = src.GetLength();
- return *this;
+inline CFX_ByteStringC& CFX_ByteStringC::operator=(const CFX_ByteString& src) {
+ m_Ptr = (const uint8_t*)src;
+ m_Length = src.GetLength();
+ return *this;
}
-inline bool operator== (const char* lhs, const CFX_ByteString& rhs) {
- return rhs == lhs;
+inline bool operator==(const char* lhs, const CFX_ByteString& rhs) {
+ return rhs == lhs;
}
-inline bool operator== (const CFX_ByteStringC& lhs, const CFX_ByteString& rhs) {
- return rhs == lhs;
+inline bool operator==(const CFX_ByteStringC& lhs, const CFX_ByteString& rhs) {
+ return rhs == lhs;
}
-inline bool operator!= (const char* lhs, const CFX_ByteString& rhs) {
- return rhs != lhs;
+inline bool operator!=(const char* lhs, const CFX_ByteString& rhs) {
+ return rhs != lhs;
}
-inline bool operator!= (const CFX_ByteStringC& lhs, const CFX_ByteString& rhs) {
- return rhs != lhs;
+inline bool operator!=(const CFX_ByteStringC& lhs, const CFX_ByteString& rhs) {
+ return rhs != lhs;
}
-inline CFX_ByteString operator + (const CFX_ByteStringC& str1, const CFX_ByteStringC& str2)
-{
- return CFX_ByteString(str1, str2);
+inline CFX_ByteString operator+(const CFX_ByteStringC& str1,
+ const CFX_ByteStringC& str2) {
+ return CFX_ByteString(str1, str2);
}
-inline CFX_ByteString operator + (const CFX_ByteStringC& str1, const FX_CHAR* str2)
-{
- return CFX_ByteString(str1, str2);
+inline CFX_ByteString operator+(const CFX_ByteStringC& str1,
+ const FX_CHAR* str2) {
+ return CFX_ByteString(str1, str2);
}
-inline CFX_ByteString operator + (const FX_CHAR* str1, const CFX_ByteStringC& str2)
-{
- return CFX_ByteString(str1, str2);
+inline CFX_ByteString operator+(const FX_CHAR* str1,
+ const CFX_ByteStringC& str2) {
+ return CFX_ByteString(str1, str2);
}
-inline CFX_ByteString operator + (const CFX_ByteStringC& str1, FX_CHAR ch)
-{
- return CFX_ByteString(str1, CFX_ByteStringC(ch));
+inline CFX_ByteString operator+(const CFX_ByteStringC& str1, FX_CHAR ch) {
+ return CFX_ByteString(str1, CFX_ByteStringC(ch));
}
-inline CFX_ByteString operator + (FX_CHAR ch, const CFX_ByteStringC& str2)
-{
- return CFX_ByteString(ch, str2);
+inline CFX_ByteString operator+(FX_CHAR ch, const CFX_ByteStringC& str2) {
+ return CFX_ByteString(ch, str2);
}
-inline CFX_ByteString operator + (const CFX_ByteString& str1, const CFX_ByteString& str2)
-{
- return CFX_ByteString(str1, str2);
+inline CFX_ByteString operator+(const CFX_ByteString& str1,
+ const CFX_ByteString& str2) {
+ return CFX_ByteString(str1, str2);
}
-inline CFX_ByteString operator + (const CFX_ByteString& str1, FX_CHAR ch)
-{
- return CFX_ByteString(str1, CFX_ByteStringC(ch));
+inline CFX_ByteString operator+(const CFX_ByteString& str1, FX_CHAR ch) {
+ return CFX_ByteString(str1, CFX_ByteStringC(ch));
}
-inline CFX_ByteString operator + (FX_CHAR ch, const CFX_ByteString& str2)
-{
- return CFX_ByteString(ch, str2);
+inline CFX_ByteString operator+(FX_CHAR ch, const CFX_ByteString& str2) {
+ return CFX_ByteString(ch, str2);
}
-inline CFX_ByteString operator + (const CFX_ByteString& str1, const FX_CHAR* str2)
-{
- return CFX_ByteString(str1, str2);
+inline CFX_ByteString operator+(const CFX_ByteString& str1,
+ const FX_CHAR* str2) {
+ return CFX_ByteString(str1, str2);
}
-inline CFX_ByteString operator + (const FX_CHAR* str1, const CFX_ByteString& str2)
-{
- return CFX_ByteString(str1, str2);
+inline CFX_ByteString operator+(const FX_CHAR* str1,
+ const CFX_ByteString& str2) {
+ return CFX_ByteString(str1, str2);
}
-inline CFX_ByteString operator + (const CFX_ByteString& str1, const CFX_ByteStringC& str2)
-{
- return CFX_ByteString(str1, str2);
+inline CFX_ByteString operator+(const CFX_ByteString& str1,
+ const CFX_ByteStringC& str2) {
+ return CFX_ByteString(str1, str2);
}
-inline CFX_ByteString operator + (const CFX_ByteStringC& str1, const CFX_ByteString& str2)
-{
- return CFX_ByteString(str1, str2);
+inline CFX_ByteString operator+(const CFX_ByteStringC& str1,
+ const CFX_ByteString& str2) {
+ return CFX_ByteString(str1, str2);
}
-class CFX_WideStringC
-{
-public:
- typedef FX_WCHAR value_type;
+class CFX_WideStringC {
+ public:
+ typedef FX_WCHAR value_type;
- CFX_WideStringC()
- {
- m_Ptr = NULL;
- m_Length = 0;
- }
+ CFX_WideStringC() {
+ m_Ptr = NULL;
+ m_Length = 0;
+ }
- CFX_WideStringC(const FX_WCHAR* ptr)
- {
- m_Ptr = ptr;
- m_Length = ptr ? FXSYS_wcslen(ptr) : 0;
- }
+ CFX_WideStringC(const FX_WCHAR* ptr) {
+ m_Ptr = ptr;
+ m_Length = ptr ? FXSYS_wcslen(ptr) : 0;
+ }
- CFX_WideStringC(FX_WCHAR& ch)
- {
- m_Ptr = &ch;
- m_Length = 1;
- }
+ CFX_WideStringC(FX_WCHAR& ch) {
+ m_Ptr = &ch;
+ m_Length = 1;
+ }
- CFX_WideStringC(const FX_WCHAR* ptr, FX_STRSIZE len)
- {
- m_Ptr = ptr;
- m_Length = (len == -1) ? FXSYS_wcslen(ptr) : len;
- }
+ CFX_WideStringC(const FX_WCHAR* ptr, FX_STRSIZE len) {
+ m_Ptr = ptr;
+ m_Length = (len == -1) ? FXSYS_wcslen(ptr) : len;
+ }
- CFX_WideStringC(const CFX_WideStringC& src)
- {
- m_Ptr = src.m_Ptr;
- m_Length = src.m_Length;
- }
+ CFX_WideStringC(const CFX_WideStringC& src) {
+ m_Ptr = src.m_Ptr;
+ m_Length = src.m_Length;
+ }
- CFX_WideStringC(const CFX_WideString& src);
+ CFX_WideStringC(const CFX_WideString& src);
- CFX_WideStringC& operator = (const FX_WCHAR* src)
- {
- m_Ptr = src;
- m_Length = FXSYS_wcslen(src);
- return *this;
- }
+ CFX_WideStringC& operator=(const FX_WCHAR* src) {
+ m_Ptr = src;
+ m_Length = FXSYS_wcslen(src);
+ return *this;
+ }
- CFX_WideStringC& operator = (const CFX_WideStringC& src)
- {
- m_Ptr = src.m_Ptr;
- m_Length = src.m_Length;
- return *this;
- }
+ CFX_WideStringC& operator=(const CFX_WideStringC& src) {
+ m_Ptr = src.m_Ptr;
+ m_Length = src.m_Length;
+ return *this;
+ }
- CFX_WideStringC& operator = (const CFX_WideString& src);
+ CFX_WideStringC& operator=(const CFX_WideString& src);
- bool operator== (const wchar_t* ptr) const {
- return FXSYS_wcslen(ptr) == m_Length &&
- wmemcmp(ptr, m_Ptr, m_Length) == 0;
- }
- bool operator== (const CFX_WideStringC& str) const {
- return str.m_Length == m_Length &&
- wmemcmp(str.m_Ptr, m_Ptr, m_Length) == 0;
- }
- bool operator!= (const wchar_t* ptr) const { return !(*this == ptr); }
- bool operator!= (const CFX_WideStringC& str) const {
- return !(*this == str);
- }
+ bool operator==(const wchar_t* ptr) const {
+ return FXSYS_wcslen(ptr) == m_Length && wmemcmp(ptr, m_Ptr, m_Length) == 0;
+ }
+ bool operator==(const CFX_WideStringC& str) const {
+ return str.m_Length == m_Length && wmemcmp(str.m_Ptr, m_Ptr, m_Length) == 0;
+ }
+ bool operator!=(const wchar_t* ptr) const { return !(*this == ptr); }
+ bool operator!=(const CFX_WideStringC& str) const { return !(*this == str); }
- const FX_WCHAR* GetPtr() const
- {
- return m_Ptr;
- }
+ const FX_WCHAR* GetPtr() const { return m_Ptr; }
- FX_STRSIZE GetLength() const
- {
- return m_Length;
- }
+ FX_STRSIZE GetLength() const { return m_Length; }
- bool IsEmpty() const
- {
- return m_Length == 0;
- }
+ bool IsEmpty() const { return m_Length == 0; }
- FX_WCHAR GetAt(FX_STRSIZE index) const
- {
- return m_Ptr[index];
- }
+ FX_WCHAR GetAt(FX_STRSIZE index) const { return m_Ptr[index]; }
- CFX_WideStringC Left(FX_STRSIZE count) const
- {
- if (count < 1) {
- return CFX_WideStringC();
- }
- if (count > m_Length) {
- count = m_Length;
- }
- return CFX_WideStringC(m_Ptr, count);
+ CFX_WideStringC Left(FX_STRSIZE count) const {
+ if (count < 1) {
+ return CFX_WideStringC();
}
-
- CFX_WideStringC Mid(FX_STRSIZE index, FX_STRSIZE count = -1) const
- {
- if (index < 0) {
- index = 0;
- }
- if (index > m_Length) {
- return CFX_WideStringC();
- }
- if (count < 0 || count > m_Length - index) {
- count = m_Length - index;
- }
- return CFX_WideStringC(m_Ptr + index, count);
+ if (count > m_Length) {
+ count = m_Length;
}
+ return CFX_WideStringC(m_Ptr, count);
+ }
- CFX_WideStringC Right(FX_STRSIZE count) const
- {
- if (count < 1) {
- return CFX_WideStringC();
- }
- if (count > m_Length) {
- count = m_Length;
- }
- return CFX_WideStringC(m_Ptr + m_Length - count, count);
+ CFX_WideStringC Mid(FX_STRSIZE index, FX_STRSIZE count = -1) const {
+ if (index < 0) {
+ index = 0;
}
+ if (index > m_Length) {
+ return CFX_WideStringC();
+ }
+ if (count < 0 || count > m_Length - index) {
+ count = m_Length - index;
+ }
+ return CFX_WideStringC(m_Ptr + index, count);
+ }
- const FX_WCHAR& operator[] (size_t index) const
- {
- return m_Ptr[index];
+ CFX_WideStringC Right(FX_STRSIZE count) const {
+ if (count < 1) {
+ return CFX_WideStringC();
+ }
+ if (count > m_Length) {
+ count = m_Length;
}
+ return CFX_WideStringC(m_Ptr + m_Length - count, count);
+ }
- bool operator< (const CFX_WideStringC& that) const
- {
- int result = wmemcmp(m_Ptr, that.m_Ptr, std::min(m_Length, that.m_Length));
- return result < 0 || (result == 0 && m_Length < that.m_Length);
- }
+ const FX_WCHAR& operator[](size_t index) const { return m_Ptr[index]; }
-protected:
- const FX_WCHAR* m_Ptr;
- FX_STRSIZE m_Length;
+ bool operator<(const CFX_WideStringC& that) const {
+ int result = wmemcmp(m_Ptr, that.m_Ptr, std::min(m_Length, that.m_Length));
+ return result < 0 || (result == 0 && m_Length < that.m_Length);
+ }
-private:
- void* operator new (size_t) throw()
- {
- return NULL;
- }
+ protected:
+ const FX_WCHAR* m_Ptr;
+ FX_STRSIZE m_Length;
+
+ private:
+ void* operator new(size_t) throw() { return NULL; }
};
-inline bool operator== (const wchar_t* lhs, const CFX_WideStringC& rhs) {
- return rhs == lhs;
+inline bool operator==(const wchar_t* lhs, const CFX_WideStringC& rhs) {
+ return rhs == lhs;
}
-inline bool operator!= (const wchar_t* lhs, const CFX_WideStringC& rhs) {
- return rhs != lhs;
+inline bool operator!=(const wchar_t* lhs, const CFX_WideStringC& rhs) {
+ return rhs != lhs;
}
#define FX_WSTRC(wstr) CFX_WideStringC(wstr, FX_ArraySize(wstr) - 1)
// A mutable string with shared buffers using copy-on-write semantics that
// avoids the cost of std::string's iterator stability guarantees.
-class CFX_WideString
-{
-public:
- typedef FX_WCHAR value_type;
+class CFX_WideString {
+ public:
+ typedef FX_WCHAR value_type;
- CFX_WideString() : m_pData(nullptr) { }
+ CFX_WideString() : m_pData(nullptr) {}
- // Copy constructor.
- CFX_WideString(const CFX_WideString& str);
+ // Copy constructor.
+ CFX_WideString(const CFX_WideString& str);
- // Move constructor.
- inline CFX_WideString(CFX_WideString&& other) {
- m_pData = other.m_pData;
- other.m_pData = nullptr;
- }
+ // Move constructor.
+ inline CFX_WideString(CFX_WideString&& other) {
+ m_pData = other.m_pData;
+ other.m_pData = nullptr;
+ }
- CFX_WideString(const FX_WCHAR* ptr)
- : CFX_WideString(ptr, ptr ? FXSYS_wcslen(ptr) : 0) { }
+ CFX_WideString(const FX_WCHAR* ptr)
+ : CFX_WideString(ptr, ptr ? FXSYS_wcslen(ptr) : 0) {}
- CFX_WideString(const FX_WCHAR* ptr, FX_STRSIZE len);
+ CFX_WideString(const FX_WCHAR* ptr, FX_STRSIZE len);
- CFX_WideString(FX_WCHAR ch);
+ CFX_WideString(FX_WCHAR ch);
- CFX_WideString(const CFX_WideStringC& str);
+ CFX_WideString(const CFX_WideStringC& str);
- CFX_WideString(const CFX_WideStringC& str1, const CFX_WideStringC& str2);
+ CFX_WideString(const CFX_WideStringC& str1, const CFX_WideStringC& str2);
- ~CFX_WideString();
+ ~CFX_WideString();
- static CFX_WideString FromLocal(const char* str, FX_STRSIZE len = -1);
+ static CFX_WideString FromLocal(const char* str, FX_STRSIZE len = -1);
- static CFX_WideString FromUTF8(const char* str, FX_STRSIZE len);
+ static CFX_WideString FromUTF8(const char* str, FX_STRSIZE len);
- static CFX_WideString FromUTF16LE(const unsigned short* str, FX_STRSIZE len);
+ static CFX_WideString FromUTF16LE(const unsigned short* str, FX_STRSIZE len);
- static FX_STRSIZE WStringLength(const unsigned short* str);
+ static FX_STRSIZE WStringLength(const unsigned short* str);
- // Explicit conversion to raw string
- const FX_WCHAR* c_str() const
- {
- return m_pData ? m_pData->m_String : L"";
- }
+ // Explicit conversion to raw string
+ const FX_WCHAR* c_str() const { return m_pData ? m_pData->m_String : L""; }
- // Implicit conversion to C-style wide string -- deprecated
- operator const FX_WCHAR*() const
- {
- return m_pData ? m_pData->m_String : L"";
- }
+ // Implicit conversion to C-style wide string -- deprecated
+ operator const FX_WCHAR*() const { return m_pData ? m_pData->m_String : L""; }
- void Empty();
+ void Empty();
+ FX_BOOL IsEmpty() const { return !GetLength(); }
- FX_BOOL IsEmpty() const
- {
- return !GetLength();
- }
+ FX_STRSIZE GetLength() const { return m_pData ? m_pData->m_nDataLength : 0; }
- FX_STRSIZE GetLength() const
- {
- return m_pData ? m_pData->m_nDataLength : 0;
- }
+ const CFX_WideString& operator=(const FX_WCHAR* str);
- const CFX_WideString& operator = (const FX_WCHAR* str);
+ const CFX_WideString& operator=(const CFX_WideString& stringSrc);
- const CFX_WideString& operator =(const CFX_WideString& stringSrc);
+ const CFX_WideString& operator=(const CFX_WideStringC& stringSrc);
- const CFX_WideString& operator =(const CFX_WideStringC& stringSrc);
+ const CFX_WideString& operator+=(const FX_WCHAR* str);
- const CFX_WideString& operator += (const FX_WCHAR* str);
+ const CFX_WideString& operator+=(FX_WCHAR ch);
- const CFX_WideString& operator += (FX_WCHAR ch);
+ const CFX_WideString& operator+=(const CFX_WideString& str);
- const CFX_WideString& operator += (const CFX_WideString& str);
+ const CFX_WideString& operator+=(const CFX_WideStringC& str);
- const CFX_WideString& operator += (const CFX_WideStringC& str);
+ bool operator==(const wchar_t* ptr) const { return Equal(ptr); }
+ bool operator==(const CFX_WideStringC& str) const { return Equal(str); }
+ bool operator==(const CFX_WideString& other) const { return Equal(other); }
- bool operator== (const wchar_t* ptr) const { return Equal(ptr); }
- bool operator== (const CFX_WideStringC& str) const { return Equal(str); }
- bool operator== (const CFX_WideString& other) const { return Equal(other); }
+ bool operator!=(const wchar_t* ptr) const { return !(*this == ptr); }
+ bool operator!=(const CFX_WideStringC& str) const { return !(*this == str); }
+ bool operator!=(const CFX_WideString& other) const {
+ return !(*this == other);
+ }
- bool operator!= (const wchar_t* ptr) const { return !(*this == ptr); }
- bool operator!= (const CFX_WideStringC& str) const {
- return !(*this == str);
- }
- bool operator!= (const CFX_WideString& other) const {
- return !(*this == other);
- }
+ bool operator<(const CFX_WideString& str) const {
+ int result =
+ wmemcmp(c_str(), str.c_str(), std::min(GetLength(), str.GetLength()));
+ return result < 0 || (result == 0 && GetLength() < str.GetLength());
+ }
- bool operator< (const CFX_WideString& str) const {
- int result = wmemcmp(c_str(), str.c_str(), std::min(GetLength(), str.GetLength()));
- return result < 0 || (result == 0 && GetLength() < str.GetLength());
- }
+ FX_WCHAR GetAt(FX_STRSIZE nIndex) const {
+ return m_pData ? m_pData->m_String[nIndex] : 0;
+ }
- FX_WCHAR GetAt(FX_STRSIZE nIndex) const
- {
- return m_pData ? m_pData->m_String[nIndex] : 0;
- }
-
- FX_WCHAR operator[](FX_STRSIZE nIndex) const
- {
- return m_pData ? m_pData->m_String[nIndex] : 0;
- }
+ FX_WCHAR operator[](FX_STRSIZE nIndex) const {
+ return m_pData ? m_pData->m_String[nIndex] : 0;
+ }
- void SetAt(FX_STRSIZE nIndex, FX_WCHAR ch);
+ void SetAt(FX_STRSIZE nIndex, FX_WCHAR ch);
- int Compare(const FX_WCHAR* str) const;
+ int Compare(const FX_WCHAR* str) const;
- int Compare(const CFX_WideString& str) const;
+ int Compare(const CFX_WideString& str) const;
- int CompareNoCase(const FX_WCHAR* str) const;
+ int CompareNoCase(const FX_WCHAR* str) const;
- bool Equal(const wchar_t* ptr) const;
- bool Equal(const CFX_WideStringC& str) const;
- bool Equal(const CFX_WideString& other) const;
+ bool Equal(const wchar_t* ptr) const;
+ bool Equal(const CFX_WideStringC& str) const;
+ bool Equal(const CFX_WideString& other) const;
- CFX_WideString Mid(FX_STRSIZE first) const;
+ CFX_WideString Mid(FX_STRSIZE first) const;
- CFX_WideString Mid(FX_STRSIZE first, FX_STRSIZE count) const;
+ CFX_WideString Mid(FX_STRSIZE first, FX_STRSIZE count) const;
- CFX_WideString Left(FX_STRSIZE count) const;
+ CFX_WideString Left(FX_STRSIZE count) const;
- CFX_WideString Right(FX_STRSIZE count) const;
+ CFX_WideString Right(FX_STRSIZE count) const;
- FX_STRSIZE Insert(FX_STRSIZE index, FX_WCHAR ch);
+ FX_STRSIZE Insert(FX_STRSIZE index, FX_WCHAR ch);
- FX_STRSIZE Delete(FX_STRSIZE index, FX_STRSIZE count = 1);
+ FX_STRSIZE Delete(FX_STRSIZE index, FX_STRSIZE count = 1);
- void Format(const FX_WCHAR* lpszFormat, ... );
+ void Format(const FX_WCHAR* lpszFormat, ...);
- void FormatV(const FX_WCHAR* lpszFormat, va_list argList);
+ void FormatV(const FX_WCHAR* lpszFormat, va_list argList);
- void MakeLower();
+ void MakeLower();
- void MakeUpper();
+ void MakeUpper();
- void TrimRight();
+ void TrimRight();
- void TrimRight(FX_WCHAR chTarget);
+ void TrimRight(FX_WCHAR chTarget);
- void TrimRight(const FX_WCHAR* lpszTargets);
+ void TrimRight(const FX_WCHAR* lpszTargets);
- void TrimLeft();
+ void TrimLeft();
- void TrimLeft(FX_WCHAR chTarget);
+ void TrimLeft(FX_WCHAR chTarget);
- void TrimLeft(const FX_WCHAR* lpszTargets);
+ void TrimLeft(const FX_WCHAR* lpszTargets);
- void Reserve(FX_STRSIZE len);
+ void Reserve(FX_STRSIZE len);
- FX_WCHAR* GetBuffer(FX_STRSIZE len);
+ FX_WCHAR* GetBuffer(FX_STRSIZE len);
- void ReleaseBuffer(FX_STRSIZE len = -1);
+ void ReleaseBuffer(FX_STRSIZE len = -1);
- int GetInteger() const;
+ int GetInteger() const;
- FX_FLOAT GetFloat() const;
+ FX_FLOAT GetFloat() const;
- FX_STRSIZE Find(const FX_WCHAR* lpszSub, FX_STRSIZE start = 0) const;
+ FX_STRSIZE Find(const FX_WCHAR* lpszSub, FX_STRSIZE start = 0) const;
- FX_STRSIZE Find(FX_WCHAR ch, FX_STRSIZE start = 0) const;
+ FX_STRSIZE Find(FX_WCHAR ch, FX_STRSIZE start = 0) const;
- FX_STRSIZE Replace(const FX_WCHAR* lpszOld, const FX_WCHAR* lpszNew);
+ FX_STRSIZE Replace(const FX_WCHAR* lpszOld, const FX_WCHAR* lpszNew);
- FX_STRSIZE Remove(FX_WCHAR ch);
+ FX_STRSIZE Remove(FX_WCHAR ch);
- CFX_ByteString UTF8Encode() const;
+ CFX_ByteString UTF8Encode() const;
- CFX_ByteString UTF16LE_Encode() const;
+ CFX_ByteString UTF16LE_Encode() const;
- void ConvertFrom(const CFX_ByteString& str, CFX_CharMap* pCharMap = NULL);
+ void ConvertFrom(const CFX_ByteString& str, CFX_CharMap* pCharMap = NULL);
-protected:
- class StringData {
- public:
- static StringData* Create(int nLen);
- void Retain() { ++m_nRefs; }
- void Release() { if (--m_nRefs <= 0) FX_Free(this); }
+ protected:
+ class StringData {
+ public:
+ static StringData* Create(int nLen);
+ void Retain() { ++m_nRefs; }
+ void Release() {
+ if (--m_nRefs <= 0)
+ FX_Free(this);
+ }
- intptr_t m_nRefs; // Would prefer ssize_t, but no windows support.
- FX_STRSIZE m_nDataLength;
- FX_STRSIZE m_nAllocLength;
- FX_WCHAR m_String[1];
+ intptr_t m_nRefs; // Would prefer ssize_t, but no windows support.
+ FX_STRSIZE m_nDataLength;
+ FX_STRSIZE m_nAllocLength;
+ FX_WCHAR m_String[1];
- private:
- StringData(FX_STRSIZE dataLen, FX_STRSIZE allocLen)
- : m_nRefs(1), m_nDataLength(dataLen), m_nAllocLength(allocLen) {
- FXSYS_assert(dataLen >= 0);
- FXSYS_assert(allocLen >= 0);
- FXSYS_assert(dataLen <= allocLen);
- m_String[dataLen] = 0;
- }
- ~StringData() = delete;
- };
+ private:
+ StringData(FX_STRSIZE dataLen, FX_STRSIZE allocLen)
+ : m_nRefs(1), m_nDataLength(dataLen), m_nAllocLength(allocLen) {
+ FXSYS_assert(dataLen >= 0);
+ FXSYS_assert(allocLen >= 0);
+ FXSYS_assert(dataLen <= allocLen);
+ m_String[dataLen] = 0;
+ }
+ ~StringData() = delete;
+ };
- void CopyBeforeWrite();
- void AllocBeforeWrite(FX_STRSIZE nLen);
- void ConcatInPlace(FX_STRSIZE nSrcLen, const FX_WCHAR* lpszSrcData);
- void ConcatCopy(FX_STRSIZE nSrc1Len, const FX_WCHAR* lpszSrc1Data, FX_STRSIZE nSrc2Len, const FX_WCHAR* lpszSrc2Data);
- void AssignCopy(FX_STRSIZE nSrcLen, const FX_WCHAR* lpszSrcData);
- void AllocCopy(CFX_WideString& dest, FX_STRSIZE nCopyLen, FX_STRSIZE nCopyIndex) const;
+ void CopyBeforeWrite();
+ void AllocBeforeWrite(FX_STRSIZE nLen);
+ void ConcatInPlace(FX_STRSIZE nSrcLen, const FX_WCHAR* lpszSrcData);
+ void ConcatCopy(FX_STRSIZE nSrc1Len,
+ const FX_WCHAR* lpszSrc1Data,
+ FX_STRSIZE nSrc2Len,
+ const FX_WCHAR* lpszSrc2Data);
+ void AssignCopy(FX_STRSIZE nSrcLen, const FX_WCHAR* lpszSrcData);
+ void AllocCopy(CFX_WideString& dest,
+ FX_STRSIZE nCopyLen,
+ FX_STRSIZE nCopyIndex) const;
- StringData* m_pData;
- friend class fxcrt_WideStringConcatInPlace_Test;
+ StringData* m_pData;
+ friend class fxcrt_WideStringConcatInPlace_Test;
};
-inline CFX_WideStringC::CFX_WideStringC(const CFX_WideString& src)
-{
- m_Ptr = src.c_str();
- m_Length = src.GetLength();
-}
-inline CFX_WideStringC& CFX_WideStringC::operator = (const CFX_WideString& src)
-{
- m_Ptr = src.c_str();
- m_Length = src.GetLength();
- return *this;
+inline CFX_WideStringC::CFX_WideStringC(const CFX_WideString& src) {
+ m_Ptr = src.c_str();
+ m_Length = src.GetLength();
+}
+inline CFX_WideStringC& CFX_WideStringC::operator=(const CFX_WideString& src) {
+ m_Ptr = src.c_str();
+ m_Length = src.GetLength();
+ return *this;
}
-inline CFX_WideString operator + (const CFX_WideStringC& str1, const CFX_WideStringC& str2)
-{
- return CFX_WideString(str1, str2);
+inline CFX_WideString operator+(const CFX_WideStringC& str1,
+ const CFX_WideStringC& str2) {
+ return CFX_WideString(str1, str2);
}
-inline CFX_WideString operator + (const CFX_WideStringC& str1, const FX_WCHAR* str2)
-{
- return CFX_WideString(str1, str2);
+inline CFX_WideString operator+(const CFX_WideStringC& str1,
+ const FX_WCHAR* str2) {
+ return CFX_WideString(str1, str2);
}
-inline CFX_WideString operator + (const FX_WCHAR* str1, const CFX_WideStringC& str2)
-{
- return CFX_WideString(str1, str2);
+inline CFX_WideString operator+(const FX_WCHAR* str1,
+ const CFX_WideStringC& str2) {
+ return CFX_WideString(str1, str2);
}
-inline CFX_WideString operator + (const CFX_WideStringC& str1, FX_WCHAR ch)
-{
- return CFX_WideString(str1, CFX_WideStringC(ch));
+inline CFX_WideString operator+(const CFX_WideStringC& str1, FX_WCHAR ch) {
+ return CFX_WideString(str1, CFX_WideStringC(ch));
}
-inline CFX_WideString operator + (FX_WCHAR ch, const CFX_WideStringC& str2)
-{
- return CFX_WideString(ch, str2);
+inline CFX_WideString operator+(FX_WCHAR ch, const CFX_WideStringC& str2) {
+ return CFX_WideString(ch, str2);
}
-inline CFX_WideString operator + (const CFX_WideString& str1, const CFX_WideString& str2)
-{
- return CFX_WideString(str1, str2);
+inline CFX_WideString operator+(const CFX_WideString& str1,
+ const CFX_WideString& str2) {
+ return CFX_WideString(str1, str2);
}
-inline CFX_WideString operator + (const CFX_WideString& str1, FX_WCHAR ch)
-{
- return CFX_WideString(str1, CFX_WideStringC(ch));
+inline CFX_WideString operator+(const CFX_WideString& str1, FX_WCHAR ch) {
+ return CFX_WideString(str1, CFX_WideStringC(ch));
}
-inline CFX_WideString operator + (FX_WCHAR ch, const CFX_WideString& str2)
-{
- return CFX_WideString(ch, str2);
+inline CFX_WideString operator+(FX_WCHAR ch, const CFX_WideString& str2) {
+ return CFX_WideString(ch, str2);
}
-inline CFX_WideString operator + (const CFX_WideString& str1, const FX_WCHAR* str2)
-{
- return CFX_WideString(str1, str2);
+inline CFX_WideString operator+(const CFX_WideString& str1,
+ const FX_WCHAR* str2) {
+ return CFX_WideString(str1, str2);
}
-inline CFX_WideString operator + (const FX_WCHAR* str1, const CFX_WideString& str2)
-{
- return CFX_WideString(str1, str2);
+inline CFX_WideString operator+(const FX_WCHAR* str1,
+ const CFX_WideString& str2) {
+ return CFX_WideString(str1, str2);
}
-inline CFX_WideString operator + (const CFX_WideString& str1, const CFX_WideStringC& str2)
-{
- return CFX_WideString(str1, str2);
+inline CFX_WideString operator+(const CFX_WideString& str1,
+ const CFX_WideStringC& str2) {
+ return CFX_WideString(str1, str2);
}
-inline CFX_WideString operator + (const CFX_WideStringC& str1, const CFX_WideString& str2)
-{
- return CFX_WideString(str1, str2);
+inline CFX_WideString operator+(const CFX_WideStringC& str1,
+ const CFX_WideString& str2) {
+ return CFX_WideString(str1, str2);
}
-inline bool operator== (const wchar_t* lhs, const CFX_WideString& rhs) {
- return rhs == lhs;
+inline bool operator==(const wchar_t* lhs, const CFX_WideString& rhs) {
+ return rhs == lhs;
}
-inline bool operator== (const CFX_WideStringC& lhs, const CFX_WideString& rhs) {
- return rhs == lhs;
+inline bool operator==(const CFX_WideStringC& lhs, const CFX_WideString& rhs) {
+ return rhs == lhs;
}
-inline bool operator!= (const wchar_t* lhs, const CFX_WideString& rhs) {
- return rhs != lhs;
+inline bool operator!=(const wchar_t* lhs, const CFX_WideString& rhs) {
+ return rhs != lhs;
}
-inline bool operator!= (const CFX_WideStringC& lhs, const CFX_WideString& rhs) {
- return rhs != lhs;
+inline bool operator!=(const CFX_WideStringC& lhs, const CFX_WideString& rhs) {
+ return rhs != lhs;
}
FX_FLOAT FX_atof(const CFX_ByteStringC& str);
void FX_atonum(const CFX_ByteStringC& str, FX_BOOL& bInteger, void* pData);
FX_STRSIZE FX_ftoa(FX_FLOAT f, FX_CHAR* buf);
-CFX_ByteString FX_UTF8Encode(const FX_WCHAR* pwsStr, FX_STRSIZE len);
-inline CFX_ByteString FX_UTF8Encode(const CFX_WideStringC& wsStr)
-{
- return FX_UTF8Encode(wsStr.GetPtr(), wsStr.GetLength());
-}
-inline CFX_ByteString FX_UTF8Encode(const CFX_WideString &wsStr)
-{
- return FX_UTF8Encode(wsStr.c_str(), wsStr.GetLength());
+CFX_ByteString FX_UTF8Encode(const FX_WCHAR* pwsStr, FX_STRSIZE len);
+inline CFX_ByteString FX_UTF8Encode(const CFX_WideStringC& wsStr) {
+ return FX_UTF8Encode(wsStr.GetPtr(), wsStr.GetLength());
+}
+inline CFX_ByteString FX_UTF8Encode(const CFX_WideString& wsStr) {
+ return FX_UTF8Encode(wsStr.c_str(), wsStr.GetLength());
}
#endif // CORE_INCLUDE_FXCRT_FX_STRING_H_
diff --git a/core/include/fxcrt/fx_system.h b/core/include/fxcrt/fx_system.h
index 8bc2b4ab2a..f0d403501c 100644
--- a/core/include/fxcrt/fx_system.h
+++ b/core/include/fxcrt/fx_system.h
@@ -18,17 +18,17 @@
#include <wchar.h>
// _FX_OS_ values:
-#define _FX_WIN32_DESKTOP_ 1
-#define _FX_WIN64_DESKTOP_ 2
-#define _FX_LINUX_DESKTOP_ 4
-#define _FX_MACOSX_ 7
-#define _FX_ANDROID_ 12
+#define _FX_WIN32_DESKTOP_ 1
+#define _FX_WIN64_DESKTOP_ 2
+#define _FX_LINUX_DESKTOP_ 4
+#define _FX_MACOSX_ 7
+#define _FX_ANDROID_ 12
// _FXM_PLATFORM_ values;
-#define _FXM_PLATFORM_WINDOWS_ 1 // _FX_WIN32_DESKTOP_ or _FX_WIN64_DESKTOP_.
-#define _FXM_PLATFORM_LINUX_ 2 // _FX_LINUX_DESKTOP_ always.
-#define _FXM_PLATFORM_APPLE_ 3 // _FX_MACOSX_ always.
-#define _FXM_PLATFORM_ANDROID_ 4 // _FX_ANDROID_ always.
+#define _FXM_PLATFORM_WINDOWS_ 1 // _FX_WIN32_DESKTOP_ or _FX_WIN64_DESKTOP_.
+#define _FXM_PLATFORM_LINUX_ 2 // _FX_LINUX_DESKTOP_ always.
+#define _FXM_PLATFORM_APPLE_ 3 // _FX_MACOSX_ always.
+#define _FXM_PLATFORM_ANDROID_ 4 // _FX_ANDROID_ always.
#ifndef _FX_OS_
#if defined(__ANDROID__)
@@ -67,13 +67,13 @@
#ifdef __cplusplus
extern "C" {
#endif
-typedef void* FX_POSITION; // Keep until fxcrt containers gone
-typedef unsigned short FX_WORD; // Keep - "an efficient small type"
-typedef unsigned int FX_DWORD; // Keep - "an efficient type"
-typedef float FX_FLOAT; // Keep, allow upgrade to doubles.
-typedef int FX_BOOL; // Keep, sadly not always 0 or 1.
-typedef char FX_CHAR; // Keep, questionable signedness.
-typedef wchar_t FX_WCHAR; // Keep, maybe bad platform wchars.
+typedef void* FX_POSITION; // Keep until fxcrt containers gone
+typedef unsigned short FX_WORD; // Keep - "an efficient small type"
+typedef unsigned int FX_DWORD; // Keep - "an efficient type"
+typedef float FX_FLOAT; // Keep, allow upgrade to doubles.
+typedef int FX_BOOL; // Keep, sadly not always 0 or 1.
+typedef char FX_CHAR; // Keep, questionable signedness.
+typedef wchar_t FX_WCHAR; // Keep, maybe bad platform wchars.
// PDFium string sizes are limited to 2^31-1, and the value is signed to
// allow -1 as a placeholder for "unknown".
@@ -85,15 +85,15 @@ typedef int FX_STRSIZE;
#endif
#ifndef TRUE
-#define TRUE 1
+#define TRUE 1
#endif
#ifndef FALSE
-#define FALSE 0
+#define FALSE 0
#endif
#ifndef NULL
-#define NULL 0
+#define NULL 0
#endif
#define FXSYS_assert assert
@@ -107,38 +107,41 @@ typedef int FX_STRSIZE;
#define FX_MAX(a, b) (((a) > (b)) ? (a) : (b))
#define FX_MIN(a, b) (((a) < (b)) ? (a) : (b))
-#define FX_PI 3.1415926535897932384626433832795f
+#define FX_PI 3.1415926535897932384626433832795f
// NOTE: prevent use of the return value from snprintf() since some platforms
// have different return values (e.g. windows _vsnprintf()), and provide
// versions that always NUL-terminate.
#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ && _MSC_VER < 1900
-void FXSYS_snprintf(char *str, size_t size, _Printf_format_string_ const char* fmt, ...);
-void FXSYS_vsnprintf(char *str, size_t size, const char* fmt, va_list ap);
+void FXSYS_snprintf(char* str,
+ size_t size,
+ _Printf_format_string_ const char* fmt,
+ ...);
+void FXSYS_vsnprintf(char* str, size_t size, const char* fmt, va_list ap);
#else
-#define FXSYS_snprintf (void) snprintf
-#define FXSYS_vsnprintf (void) vsnprintf
+#define FXSYS_snprintf (void) snprintf
+#define FXSYS_vsnprintf (void) vsnprintf
#endif
-#define FXSYS_sprintf DO_NOT_USE_SPRINTF_DIE_DIE_DIE
-#define FXSYS_vsprintf DO_NOT_USE_VSPRINTF_DIE_DIE_DIE
-#define FXSYS_strchr strchr
-#define FXSYS_strncmp strncmp
-#define FXSYS_strcmp strcmp
-#define FXSYS_strcpy strcpy
-#define FXSYS_strncpy strncpy
-#define FXSYS_strstr strstr
-#define FXSYS_FILE FILE
-#define FXSYS_fopen fopen
-#define FXSYS_fclose fclose
-#define FXSYS_SEEK_END SEEK_END
-#define FXSYS_SEEK_SET SEEK_SET
-#define FXSYS_fseek fseek
-#define FXSYS_ftell ftell
-#define FXSYS_fread fread
-#define FXSYS_fwrite fwrite
-#define FXSYS_fprintf fprintf
-#define FXSYS_fflush fflush
+#define FXSYS_sprintf DO_NOT_USE_SPRINTF_DIE_DIE_DIE
+#define FXSYS_vsprintf DO_NOT_USE_VSPRINTF_DIE_DIE_DIE
+#define FXSYS_strchr strchr
+#define FXSYS_strncmp strncmp
+#define FXSYS_strcmp strcmp
+#define FXSYS_strcpy strcpy
+#define FXSYS_strncpy strncpy
+#define FXSYS_strstr strstr
+#define FXSYS_FILE FILE
+#define FXSYS_fopen fopen
+#define FXSYS_fclose fclose
+#define FXSYS_SEEK_END SEEK_END
+#define FXSYS_SEEK_SET SEEK_SET
+#define FXSYS_fseek fseek
+#define FXSYS_ftell ftell
+#define FXSYS_fread fread
+#define FXSYS_fwrite fwrite
+#define FXSYS_fprintf fprintf
+#define FXSYS_fflush fflush
#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
#ifdef _NATIVE_WCHAR_T_DEFINED
@@ -151,7 +154,7 @@ FXSYS_FILE* FXSYS_wfopen(const FX_WCHAR* filename, const FX_WCHAR* mode);
#endif // _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
#ifdef __cplusplus
-} // extern "C"
+} // extern "C"
#include "../../../third_party/base/numerics/safe_conversions.h"
#define FXSYS_strlen(ptr) pdfium::base::checked_cast<FX_STRSIZE>(strlen(ptr))
#define FXSYS_wcslen(ptr) pdfium::base::checked_cast<FX_STRSIZE>(wcslen(ptr))
@@ -161,20 +164,20 @@ extern "C" {
#define FXSYS_wcslen(ptr) ((FX_STRSIZE)wcslen(ptr))
#endif
-#define FXSYS_wcscmp wcscmp
-#define FXSYS_wcschr wcschr
-#define FXSYS_wcsstr wcsstr
-#define FXSYS_wcsncmp wcsncmp
-#define FXSYS_vswprintf vswprintf
-#define FXSYS_mbstowcs mbstowcs
-#define FXSYS_wcstombs wcstombs
-#define FXSYS_memcmp memcmp
-#define FXSYS_memcpy memcpy
-#define FXSYS_memmove memmove
-#define FXSYS_memset memset
-#define FXSYS_memchr memchr
-#define FXSYS_qsort qsort
-#define FXSYS_bsearch bsearch
+#define FXSYS_wcscmp wcscmp
+#define FXSYS_wcschr wcschr
+#define FXSYS_wcsstr wcsstr
+#define FXSYS_wcsncmp wcsncmp
+#define FXSYS_vswprintf vswprintf
+#define FXSYS_mbstowcs mbstowcs
+#define FXSYS_wcstombs wcstombs
+#define FXSYS_memcmp memcmp
+#define FXSYS_memcpy memcpy
+#define FXSYS_memmove memmove
+#define FXSYS_memset memset
+#define FXSYS_memchr memchr
+#define FXSYS_qsort qsort
+#define FXSYS_bsearch bsearch
#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
#define FXSYS_GetACP GetACP
@@ -184,8 +187,10 @@ extern "C" {
#define FXSYS_stricmp _stricmp
#ifdef _NATIVE_WCHAR_T_DEFINED
#define FXSYS_wcsicmp(str1, str2) _wcsicmp((wchar_t*)(str1), (wchar_t*)(str2))
-#define FXSYS_WideCharToMultiByte(p1, p2, p3, p4, p5, p6, p7, p8) WideCharToMultiByte(p1, p2, (const wchar_t*)(p3), p4, p5, p6, p7, p8)
-#define FXSYS_MultiByteToWideChar(p1, p2, p3, p4, p5, p6) MultiByteToWideChar(p1, p2, p3, p4, (wchar_t*)(p5), p6)
+#define FXSYS_WideCharToMultiByte(p1, p2, p3, p4, p5, p6, p7, p8) \
+ WideCharToMultiByte(p1, p2, (const wchar_t*)(p3), p4, p5, p6, p7, p8)
+#define FXSYS_MultiByteToWideChar(p1, p2, p3, p4, p5, p6) \
+ MultiByteToWideChar(p1, p2, p3, p4, (wchar_t*)(p5), p6)
#define FXSYS_wcslwr(str) _wcslwr((wchar_t*)(str))
#define FXSYS_wcsupr(str) _wcsupr((wchar_t*)(str))
#else
@@ -198,58 +203,77 @@ extern "C" {
#define FXSYS_GetFullPathName GetFullPathName
#define FXSYS_GetModuleFileName GetModuleFileName
#else
-int FXSYS_GetACP(void);
-char* FXSYS_itoa(int value, char* string, int radix);
-int FXSYS_WideCharToMultiByte(FX_DWORD codepage, FX_DWORD dwFlags, const wchar_t* wstr, int wlen,
- char* buf, int buflen, const char* default_str, int* pUseDefault);
-int FXSYS_MultiByteToWideChar(FX_DWORD codepage, FX_DWORD dwFlags, const char* bstr, int blen,
- wchar_t* buf, int buflen);
-FX_DWORD FXSYS_GetFullPathName(const char* filename, FX_DWORD buflen, char* buf, char** filepart);
-FX_DWORD FXSYS_GetModuleFileName(void* hModule, char* buf, FX_DWORD bufsize);
-char* FXSYS_strlwr(char* str);
-char* FXSYS_strupr(char* str);
-int FXSYS_stricmp(const char*, const char*);
-int FXSYS_wcsicmp(const wchar_t *string1, const wchar_t *string2);
-wchar_t* FXSYS_wcslwr(wchar_t* str);
-wchar_t* FXSYS_wcsupr(wchar_t* str);
+int FXSYS_GetACP(void);
+char* FXSYS_itoa(int value, char* string, int radix);
+int FXSYS_WideCharToMultiByte(FX_DWORD codepage,
+ FX_DWORD dwFlags,
+ const wchar_t* wstr,
+ int wlen,
+ char* buf,
+ int buflen,
+ const char* default_str,
+ int* pUseDefault);
+int FXSYS_MultiByteToWideChar(FX_DWORD codepage,
+ FX_DWORD dwFlags,
+ const char* bstr,
+ int blen,
+ wchar_t* buf,
+ int buflen);
+FX_DWORD FXSYS_GetFullPathName(const char* filename,
+ FX_DWORD buflen,
+ char* buf,
+ char** filepart);
+FX_DWORD FXSYS_GetModuleFileName(void* hModule, char* buf, FX_DWORD bufsize);
+char* FXSYS_strlwr(char* str);
+char* FXSYS_strupr(char* str);
+int FXSYS_stricmp(const char*, const char*);
+int FXSYS_wcsicmp(const wchar_t* string1, const wchar_t* string2);
+wchar_t* FXSYS_wcslwr(wchar_t* str);
+wchar_t* FXSYS_wcsupr(wchar_t* str);
#endif // _FXM_PLATFORM == _FXM_PLATFORM_WINDOWS_
#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
-#define FXSYS_pow(a, b) (FX_FLOAT)powf(a, b)
+#define FXSYS_pow(a, b) (FX_FLOAT) powf(a, b)
#else
-#define FXSYS_pow(a, b) (FX_FLOAT)pow(a, b)
+#define FXSYS_pow(a, b) (FX_FLOAT) pow(a, b)
#endif
-#define FXSYS_sqrt(a) (FX_FLOAT)sqrt(a)
-#define FXSYS_fabs(a) (FX_FLOAT)fabs(a)
-#define FXSYS_atan2(a, b) (FX_FLOAT)atan2(a, b)
-#define FXSYS_ceil(a) (FX_FLOAT)ceil(a)
-#define FXSYS_floor(a) (FX_FLOAT)floor(a)
-#define FXSYS_cos(a) (FX_FLOAT)cos(a)
-#define FXSYS_acos(a) (FX_FLOAT)acos(a)
-#define FXSYS_sin(a) (FX_FLOAT)sin(a)
-#define FXSYS_log(a) (FX_FLOAT)log(a)
-#define FXSYS_log10(a) (FX_FLOAT)log10(a)
-#define FXSYS_fmod(a, b) (FX_FLOAT)fmod(a, b)
-#define FXSYS_abs abs
-#define FXDWORD_FROM_LSBFIRST(i) (i)
-#define FXDWORD_FROM_MSBFIRST(i) (((uint8_t)(i) << 24) | ((uint8_t)((i) >> 8) << 16) | ((uint8_t)((i) >> 16) << 8) | (uint8_t)((i) >> 24))
-#define FXDWORD_GET_LSBFIRST(p) ((((uint8_t*)(p))[3] << 24) | (((uint8_t*)(p))[2] << 16) | (((uint8_t*)(p))[1] << 8) | (((uint8_t*)(p))[0]))
-#define FXDWORD_GET_MSBFIRST(p) ((((uint8_t*)(p))[0] << 24) | (((uint8_t*)(p))[1] << 16) | (((uint8_t*)(p))[2] << 8) | (((uint8_t*)(p))[3]))
-#define FXSYS_HIBYTE(word) ((uint8_t)((word) >> 8))
-#define FXSYS_LOBYTE(word) ((uint8_t)(word))
-#define FXSYS_HIWORD(dword) ((FX_WORD)((dword) >> 16))
-#define FXSYS_LOWORD(dword) ((FX_WORD)(dword))
-int32_t FXSYS_atoi(const FX_CHAR* str);
-int32_t FXSYS_wtoi(const FX_WCHAR* str);
-int64_t FXSYS_atoi64(const FX_CHAR* str);
-int64_t FXSYS_wtoi64(const FX_WCHAR* str);
-const FX_CHAR* FXSYS_i64toa(int64_t value, FX_CHAR* str, int radix);
-const FX_WCHAR* FXSYS_i64tow(int64_t value, FX_WCHAR* str, int radix);
-int FXSYS_round(FX_FLOAT f);
-#define FXSYS_Mul(a, b) ((a) * (b))
-#define FXSYS_Div(a, b) ((a) / (b))
-#define FXSYS_MulDiv(a, b, c) ((a) * (b) / (c))
-#define FXSYS_sqrt2(a, b) (FX_FLOAT)FXSYS_sqrt((a)*(a) + (b)*(b))
+#define FXSYS_sqrt(a) (FX_FLOAT) sqrt(a)
+#define FXSYS_fabs(a) (FX_FLOAT) fabs(a)
+#define FXSYS_atan2(a, b) (FX_FLOAT) atan2(a, b)
+#define FXSYS_ceil(a) (FX_FLOAT) ceil(a)
+#define FXSYS_floor(a) (FX_FLOAT) floor(a)
+#define FXSYS_cos(a) (FX_FLOAT) cos(a)
+#define FXSYS_acos(a) (FX_FLOAT) acos(a)
+#define FXSYS_sin(a) (FX_FLOAT) sin(a)
+#define FXSYS_log(a) (FX_FLOAT) log(a)
+#define FXSYS_log10(a) (FX_FLOAT) log10(a)
+#define FXSYS_fmod(a, b) (FX_FLOAT) fmod(a, b)
+#define FXSYS_abs abs
+#define FXDWORD_FROM_LSBFIRST(i) (i)
+#define FXDWORD_FROM_MSBFIRST(i) \
+ (((uint8_t)(i) << 24) | ((uint8_t)((i) >> 8) << 16) | \
+ ((uint8_t)((i) >> 16) << 8) | (uint8_t)((i) >> 24))
+#define FXDWORD_GET_LSBFIRST(p) \
+ ((((uint8_t*)(p))[3] << 24) | (((uint8_t*)(p))[2] << 16) | \
+ (((uint8_t*)(p))[1] << 8) | (((uint8_t*)(p))[0]))
+#define FXDWORD_GET_MSBFIRST(p) \
+ ((((uint8_t*)(p))[0] << 24) | (((uint8_t*)(p))[1] << 16) | \
+ (((uint8_t*)(p))[2] << 8) | (((uint8_t*)(p))[3]))
+#define FXSYS_HIBYTE(word) ((uint8_t)((word) >> 8))
+#define FXSYS_LOBYTE(word) ((uint8_t)(word))
+#define FXSYS_HIWORD(dword) ((FX_WORD)((dword) >> 16))
+#define FXSYS_LOWORD(dword) ((FX_WORD)(dword))
+int32_t FXSYS_atoi(const FX_CHAR* str);
+int32_t FXSYS_wtoi(const FX_WCHAR* str);
+int64_t FXSYS_atoi64(const FX_CHAR* str);
+int64_t FXSYS_wtoi64(const FX_WCHAR* str);
+const FX_CHAR* FXSYS_i64toa(int64_t value, FX_CHAR* str, int radix);
+const FX_WCHAR* FXSYS_i64tow(int64_t value, FX_WCHAR* str, int radix);
+int FXSYS_round(FX_FLOAT f);
+#define FXSYS_Mul(a, b) ((a) * (b))
+#define FXSYS_Div(a, b) ((a) / (b))
+#define FXSYS_MulDiv(a, b, c) ((a) * (b) / (c))
+#define FXSYS_sqrt2(a, b) (FX_FLOAT) FXSYS_sqrt((a) * (a) + (b) * (b))
#ifdef __cplusplus
};
#endif
@@ -286,7 +310,7 @@ int FXSYS_round(FX_FLOAT f);
// Prevent a function from ever being inlined, typically because we'd
// like it to appear in stack traces.
-#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
+#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
#define NEVER_INLINE __declspec(noinline)
#else // _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
#define NEVER_INLINE __attribute__((__noinline__))
diff --git a/core/include/fxcrt/fx_ucd.h b/core/include/fxcrt/fx_ucd.h
index 7b730bb81a..8bc5930dd4 100644
--- a/core/include/fxcrt/fx_ucd.h
+++ b/core/include/fxcrt/fx_ucd.h
@@ -10,93 +10,96 @@
#include "fx_system.h"
enum FX_CHARBREAKPROP {
- FX_CBP_OP = 0,
- FX_CBP_CL = 1,
- FX_CBP_QU = 2,
- FX_CBP_GL = 3,
- FX_CBP_NS = 4,
- FX_CBP_EX = 5,
- FX_CBP_SY = 6,
- FX_CBP_IS = 7,
- FX_CBP_PR = 8,
- FX_CBP_PO = 9,
- FX_CBP_NU = 10,
- FX_CBP_AL = 11,
- FX_CBP_ID = 12,
- FX_CBP_IN = 13,
- FX_CBP_HY = 14,
- FX_CBP_BA = 15,
- FX_CBP_BB = 16,
- FX_CBP_B2 = 17,
- FX_CBP_ZW = 18,
- FX_CBP_CM = 19,
- FX_CBP_WJ = 20,
- FX_CBP_H2 = 21,
- FX_CBP_H3 = 22,
- FX_CBP_JL = 23,
- FX_CBP_JV = 24,
- FX_CBP_JT = 25,
+ FX_CBP_OP = 0,
+ FX_CBP_CL = 1,
+ FX_CBP_QU = 2,
+ FX_CBP_GL = 3,
+ FX_CBP_NS = 4,
+ FX_CBP_EX = 5,
+ FX_CBP_SY = 6,
+ FX_CBP_IS = 7,
+ FX_CBP_PR = 8,
+ FX_CBP_PO = 9,
+ FX_CBP_NU = 10,
+ FX_CBP_AL = 11,
+ FX_CBP_ID = 12,
+ FX_CBP_IN = 13,
+ FX_CBP_HY = 14,
+ FX_CBP_BA = 15,
+ FX_CBP_BB = 16,
+ FX_CBP_B2 = 17,
+ FX_CBP_ZW = 18,
+ FX_CBP_CM = 19,
+ FX_CBP_WJ = 20,
+ FX_CBP_H2 = 21,
+ FX_CBP_H3 = 22,
+ FX_CBP_JL = 23,
+ FX_CBP_JV = 24,
+ FX_CBP_JT = 25,
- FX_CBP_BK = 26,
- FX_CBP_CR = 27,
- FX_CBP_LF = 28,
- FX_CBP_NL = 29,
- FX_CBP_SA = 30,
- FX_CBP_SG = 31,
- FX_CBP_CB = 32,
- FX_CBP_XX = 33,
- FX_CBP_AI = 34,
- FX_CBP_SP = 35,
- FX_CBP_TB = 37,
- FX_CBP_NONE = 36,
+ FX_CBP_BK = 26,
+ FX_CBP_CR = 27,
+ FX_CBP_LF = 28,
+ FX_CBP_NL = 29,
+ FX_CBP_SA = 30,
+ FX_CBP_SG = 31,
+ FX_CBP_CB = 32,
+ FX_CBP_XX = 33,
+ FX_CBP_AI = 34,
+ FX_CBP_SP = 35,
+ FX_CBP_TB = 37,
+ FX_CBP_NONE = 36,
};
-#define FX_BIDICLASSBITS 6
-#define FX_BIDICLASSBITSMASK (31 << FX_BIDICLASSBITS)
+#define FX_BIDICLASSBITS 6
+#define FX_BIDICLASSBITSMASK (31 << FX_BIDICLASSBITS)
enum FX_BIDICLASS {
- FX_BIDICLASS_ON = 0,
- FX_BIDICLASS_L = 1,
- FX_BIDICLASS_R = 2,
- FX_BIDICLASS_AN = 3,
- FX_BIDICLASS_EN = 4,
- FX_BIDICLASS_AL = 5,
- FX_BIDICLASS_NSM = 6,
- FX_BIDICLASS_CS = 7,
- FX_BIDICLASS_ES = 8,
- FX_BIDICLASS_ET = 9,
- FX_BIDICLASS_BN = 10,
- FX_BIDICLASS_S = 11,
- FX_BIDICLASS_WS = 12,
- FX_BIDICLASS_B = 13,
- FX_BIDICLASS_RLO = 14,
- FX_BIDICLASS_RLE = 15,
- FX_BIDICLASS_LRO = 16,
- FX_BIDICLASS_LRE = 17,
- FX_BIDICLASS_PDF = 18,
- FX_BIDICLASS_N = FX_BIDICLASS_ON,
+ FX_BIDICLASS_ON = 0,
+ FX_BIDICLASS_L = 1,
+ FX_BIDICLASS_R = 2,
+ FX_BIDICLASS_AN = 3,
+ FX_BIDICLASS_EN = 4,
+ FX_BIDICLASS_AL = 5,
+ FX_BIDICLASS_NSM = 6,
+ FX_BIDICLASS_CS = 7,
+ FX_BIDICLASS_ES = 8,
+ FX_BIDICLASS_ET = 9,
+ FX_BIDICLASS_BN = 10,
+ FX_BIDICLASS_S = 11,
+ FX_BIDICLASS_WS = 12,
+ FX_BIDICLASS_B = 13,
+ FX_BIDICLASS_RLO = 14,
+ FX_BIDICLASS_RLE = 15,
+ FX_BIDICLASS_LRO = 16,
+ FX_BIDICLASS_LRE = 17,
+ FX_BIDICLASS_PDF = 18,
+ FX_BIDICLASS_N = FX_BIDICLASS_ON,
};
-#define FX_CHARTYPEBITS 11
-#define FX_CHARTYPEBITSMASK (15 << FX_CHARTYPEBITS)
+#define FX_CHARTYPEBITS 11
+#define FX_CHARTYPEBITSMASK (15 << FX_CHARTYPEBITS)
enum FX_CHARTYPE {
- FX_CHARTYPE_Unknown = 0,
- FX_CHARTYPE_Tab = (1 << FX_CHARTYPEBITS),
- FX_CHARTYPE_Space = (2 << FX_CHARTYPEBITS),
- FX_CHARTYPE_Control = (3 << FX_CHARTYPEBITS),
- FX_CHARTYPE_Combination = (4 << FX_CHARTYPEBITS),
- FX_CHARTYPE_Numeric = (5 << FX_CHARTYPEBITS),
- FX_CHARTYPE_Normal = (6 << FX_CHARTYPEBITS),
- FX_CHARTYPE_ArabicAlef = (7 << FX_CHARTYPEBITS),
- FX_CHARTYPE_ArabicSpecial = (8 << FX_CHARTYPEBITS),
- FX_CHARTYPE_ArabicDistortion = (9 << FX_CHARTYPEBITS),
- FX_CHARTYPE_ArabicNormal = (10 << FX_CHARTYPEBITS),
- FX_CHARTYPE_ArabicForm = (11 << FX_CHARTYPEBITS),
- FX_CHARTYPE_Arabic = (12 << FX_CHARTYPEBITS),
+ FX_CHARTYPE_Unknown = 0,
+ FX_CHARTYPE_Tab = (1 << FX_CHARTYPEBITS),
+ FX_CHARTYPE_Space = (2 << FX_CHARTYPEBITS),
+ FX_CHARTYPE_Control = (3 << FX_CHARTYPEBITS),
+ FX_CHARTYPE_Combination = (4 << FX_CHARTYPEBITS),
+ FX_CHARTYPE_Numeric = (5 << FX_CHARTYPEBITS),
+ FX_CHARTYPE_Normal = (6 << FX_CHARTYPEBITS),
+ FX_CHARTYPE_ArabicAlef = (7 << FX_CHARTYPEBITS),
+ FX_CHARTYPE_ArabicSpecial = (8 << FX_CHARTYPEBITS),
+ FX_CHARTYPE_ArabicDistortion = (9 << FX_CHARTYPEBITS),
+ FX_CHARTYPE_ArabicNormal = (10 << FX_CHARTYPEBITS),
+ FX_CHARTYPE_ArabicForm = (11 << FX_CHARTYPEBITS),
+ FX_CHARTYPE_Arabic = (12 << FX_CHARTYPEBITS),
};
FX_DWORD FX_GetUnicodeProperties(FX_WCHAR wch);
-FX_BOOL FX_IsCtrlCode(FX_WCHAR ch);
-FX_BOOL FX_IsRotationCode(FX_WCHAR ch);
+FX_BOOL FX_IsCtrlCode(FX_WCHAR ch);
+FX_BOOL FX_IsRotationCode(FX_WCHAR ch);
FX_BOOL FX_IsCombinationChar(FX_WCHAR wch);
-FX_BOOL FX_IsBidiChar(FX_WCHAR wch);
+FX_BOOL FX_IsBidiChar(FX_WCHAR wch);
FX_WCHAR FX_GetMirrorChar(FX_WCHAR wch, FX_BOOL bRTL, FX_BOOL bVertical);
-FX_WCHAR FX_GetMirrorChar(FX_WCHAR wch, FX_DWORD dwProps, FX_BOOL bRTL, FX_BOOL bVertical);
+FX_WCHAR FX_GetMirrorChar(FX_WCHAR wch,
+ FX_DWORD dwProps,
+ FX_BOOL bRTL,
+ FX_BOOL bVertical);
#endif // CORE_INCLUDE_FXCRT_FX_UCD_H_
diff --git a/core/include/fxcrt/fx_xml.h b/core/include/fxcrt/fx_xml.h
index ba33b2083a..eaf872c164 100644
--- a/core/include/fxcrt/fx_xml.h
+++ b/core/include/fxcrt/fx_xml.h
@@ -9,172 +9,168 @@
#include "fx_basic.h"
-class CXML_AttrItem
-{
-public:
- CFX_ByteString m_QSpaceName;
- CFX_ByteString m_AttrName;
- CFX_WideString m_Value;
+class CXML_AttrItem {
+ public:
+ CFX_ByteString m_QSpaceName;
+ CFX_ByteString m_AttrName;
+ CFX_WideString m_Value;
};
-class CXML_AttrMap
-{
-public:
- CXML_AttrMap()
- {
- m_pMap = NULL;
- }
- ~CXML_AttrMap()
- {
- RemoveAll();
- }
- const CFX_WideString* Lookup(const CFX_ByteStringC& space, const CFX_ByteStringC& name) const;
- void SetAt(const CFX_ByteStringC& space, const CFX_ByteStringC& name, const CFX_WideStringC& value);
- void RemoveAt(const CFX_ByteStringC& space, const CFX_ByteStringC& name);
- void RemoveAll();
- int GetSize() const;
- CXML_AttrItem& GetAt(int index) const;
- CFX_ObjectArray<CXML_AttrItem>* m_pMap;
+class CXML_AttrMap {
+ public:
+ CXML_AttrMap() { m_pMap = NULL; }
+ ~CXML_AttrMap() { RemoveAll(); }
+ const CFX_WideString* Lookup(const CFX_ByteStringC& space,
+ const CFX_ByteStringC& name) const;
+ void SetAt(const CFX_ByteStringC& space,
+ const CFX_ByteStringC& name,
+ const CFX_WideStringC& value);
+ void RemoveAt(const CFX_ByteStringC& space, const CFX_ByteStringC& name);
+ void RemoveAll();
+ int GetSize() const;
+ CXML_AttrItem& GetAt(int index) const;
+ CFX_ObjectArray<CXML_AttrItem>* m_pMap;
};
-class CXML_Content
-{
-public:
- CXML_Content() : m_bCDATA(FALSE), m_Content() {}
- void Set(FX_BOOL bCDATA, const CFX_WideStringC& content)
- {
- m_bCDATA = bCDATA;
- m_Content = content;
- }
- FX_BOOL m_bCDATA;
- CFX_WideString m_Content;
+class CXML_Content {
+ public:
+ CXML_Content() : m_bCDATA(FALSE), m_Content() {}
+ void Set(FX_BOOL bCDATA, const CFX_WideStringC& content) {
+ m_bCDATA = bCDATA;
+ m_Content = content;
+ }
+ FX_BOOL m_bCDATA;
+ CFX_WideString m_Content;
};
-class CXML_Element
-{
-public:
- static CXML_Element* Parse(const void* pBuffer, size_t size, FX_BOOL bSaveSpaceChars = FALSE, FX_FILESIZE* pParsedSize = NULL);
- static CXML_Element* Parse(IFX_FileRead *pFile, FX_BOOL bSaveSpaceChars = FALSE, FX_FILESIZE* pParsedSize = NULL);
- static CXML_Element* Parse(IFX_BufferRead *pBuffer, FX_BOOL bSaveSpaceChars = FALSE, FX_FILESIZE* pParsedSize = NULL);
- CXML_Element(const CFX_ByteStringC& qSpace, const CFX_ByteStringC& tagName);
- CXML_Element(const CFX_ByteStringC& qTagName);
- CXML_Element();
+class CXML_Element {
+ public:
+ static CXML_Element* Parse(const void* pBuffer,
+ size_t size,
+ FX_BOOL bSaveSpaceChars = FALSE,
+ FX_FILESIZE* pParsedSize = NULL);
+ static CXML_Element* Parse(IFX_FileRead* pFile,
+ FX_BOOL bSaveSpaceChars = FALSE,
+ FX_FILESIZE* pParsedSize = NULL);
+ static CXML_Element* Parse(IFX_BufferRead* pBuffer,
+ FX_BOOL bSaveSpaceChars = FALSE,
+ FX_FILESIZE* pParsedSize = NULL);
+ CXML_Element(const CFX_ByteStringC& qSpace, const CFX_ByteStringC& tagName);
+ CXML_Element(const CFX_ByteStringC& qTagName);
+ CXML_Element();
+
+ ~CXML_Element();
+
+ void Empty();
+
+ CFX_ByteString GetTagName(FX_BOOL bQualified = FALSE) const;
+
+ CFX_ByteString GetNamespace(FX_BOOL bQualified = FALSE) const;
+
+ CFX_ByteString GetNamespaceURI(const CFX_ByteStringC& qName) const;
+
+ CXML_Element* GetParent() const { return m_pParent; }
+
+ FX_DWORD CountAttrs() const { return m_AttrMap.GetSize(); }
+
+ void GetAttrByIndex(int index,
+ CFX_ByteString& space,
+ CFX_ByteString& name,
+ CFX_WideString& value) const;
+
+ FX_BOOL HasAttr(const CFX_ByteStringC& qName) const;
+
+ FX_BOOL GetAttrValue(const CFX_ByteStringC& name,
+ CFX_WideString& attribute) const;
+ CFX_WideString GetAttrValue(const CFX_ByteStringC& name) const {
+ CFX_WideString attr;
+ GetAttrValue(name, attr);
+ return attr;
+ }
+
+ FX_BOOL GetAttrValue(const CFX_ByteStringC& space,
+ const CFX_ByteStringC& name,
+ CFX_WideString& attribute) const;
+ CFX_WideString GetAttrValue(const CFX_ByteStringC& space,
+ const CFX_ByteStringC& name) const {
+ CFX_WideString attr;
+ GetAttrValue(space, name, attr);
+ return attr;
+ }
+
+ FX_BOOL GetAttrInteger(const CFX_ByteStringC& name, int& attribute) const;
+ int GetAttrInteger(const CFX_ByteStringC& name) const {
+ int attr = 0;
+ GetAttrInteger(name, attr);
+ return attr;
+ }
+
+ FX_BOOL GetAttrInteger(const CFX_ByteStringC& space,
+ const CFX_ByteStringC& name,
+ int& attribute) const;
+ int GetAttrInteger(const CFX_ByteStringC& space,
+ const CFX_ByteStringC& name) const {
+ int attr = 0;
+ GetAttrInteger(space, name, attr);
+ return attr;
+ }
+
+ FX_BOOL GetAttrFloat(const CFX_ByteStringC& name, FX_FLOAT& attribute) const;
+ FX_FLOAT GetAttrFloat(const CFX_ByteStringC& name) const {
+ FX_FLOAT attr = 0;
+ GetAttrFloat(name, attr);
+ return attr;
+ }
+
+ FX_BOOL GetAttrFloat(const CFX_ByteStringC& space,
+ const CFX_ByteStringC& name,
+ FX_FLOAT& attribute) const;
+ FX_FLOAT GetAttrFloat(const CFX_ByteStringC& space,
+ const CFX_ByteStringC& name) const {
+ FX_FLOAT attr = 0;
+ GetAttrFloat(space, name, attr);
+ return attr;
+ }
+
+ FX_DWORD CountChildren() const;
+
+ enum ChildType { Invalid, Element, Content };
+
+ ChildType GetChildType(FX_DWORD index) const;
+
+ CFX_WideString GetContent(FX_DWORD index) const;
+
+ CXML_Element* GetElement(FX_DWORD index) const;
+
+ CXML_Element* GetElement(const CFX_ByteStringC& space,
+ const CFX_ByteStringC& tag) const {
+ return GetElement(space, tag, 0);
+ }
+
+ FX_DWORD CountElements(const CFX_ByteStringC& space,
+ const CFX_ByteStringC& tag) const;
- ~CXML_Element();
+ CXML_Element* GetElement(const CFX_ByteStringC& space,
+ const CFX_ByteStringC& tag,
+ int index) const;
- void Empty();
+ FX_DWORD FindElement(CXML_Element* pChild) const;
+ void SetTag(const CFX_ByteStringC& qSpace, const CFX_ByteStringC& tagname);
+ void SetTag(const CFX_ByteStringC& qTagName);
- CFX_ByteString GetTagName(FX_BOOL bQualified = FALSE) const;
+ void RemoveChildren();
- CFX_ByteString GetNamespace(FX_BOOL bQualified = FALSE) const;
+ void RemoveChild(FX_DWORD index);
- CFX_ByteString GetNamespaceURI(const CFX_ByteStringC& qName) const;
+ protected:
+ CXML_Element* m_pParent;
+ CFX_ByteString m_QSpaceName;
+ CFX_ByteString m_TagName;
- CXML_Element* GetParent() const
- {
- return m_pParent;
- }
-
- FX_DWORD CountAttrs() const
- {
- return m_AttrMap.GetSize();
- }
-
- void GetAttrByIndex(int index, CFX_ByteString &space, CFX_ByteString &name, CFX_WideString &value) const;
-
- FX_BOOL HasAttr(const CFX_ByteStringC& qName) const;
-
- FX_BOOL GetAttrValue(const CFX_ByteStringC& name, CFX_WideString& attribute) const;
- CFX_WideString GetAttrValue(const CFX_ByteStringC& name) const
- {
- CFX_WideString attr;
- GetAttrValue(name, attr);
- return attr;
- }
-
- FX_BOOL GetAttrValue(const CFX_ByteStringC& space, const CFX_ByteStringC& name, CFX_WideString& attribute) const;
- CFX_WideString GetAttrValue(const CFX_ByteStringC& space, const CFX_ByteStringC& name) const
- {
- CFX_WideString attr;
- GetAttrValue(space, name, attr);
- return attr;
- }
-
- FX_BOOL GetAttrInteger(const CFX_ByteStringC& name, int& attribute) const;
- int GetAttrInteger(const CFX_ByteStringC& name) const
- {
- int attr = 0;
- GetAttrInteger(name, attr);
- return attr;
- }
-
- FX_BOOL GetAttrInteger(const CFX_ByteStringC& space, const CFX_ByteStringC& name, int& attribute) const;
- int GetAttrInteger(const CFX_ByteStringC& space, const CFX_ByteStringC& name) const
- {
- int attr = 0;
- GetAttrInteger(space, name, attr);
- return attr;
- }
-
- FX_BOOL GetAttrFloat(const CFX_ByteStringC& name, FX_FLOAT& attribute) const;
- FX_FLOAT GetAttrFloat(const CFX_ByteStringC& name) const
- {
- FX_FLOAT attr = 0;
- GetAttrFloat(name, attr);
- return attr;
- }
-
- FX_BOOL GetAttrFloat(const CFX_ByteStringC& space, const CFX_ByteStringC& name, FX_FLOAT& attribute) const;
- FX_FLOAT GetAttrFloat(const CFX_ByteStringC& space, const CFX_ByteStringC& name) const
- {
- FX_FLOAT attr = 0;
- GetAttrFloat(space, name, attr);
- return attr;
- }
-
- FX_DWORD CountChildren() const;
-
- enum ChildType { Invalid, Element, Content};
-
- ChildType GetChildType(FX_DWORD index) const;
-
- CFX_WideString GetContent(FX_DWORD index) const;
-
- CXML_Element* GetElement(FX_DWORD index) const;
-
- CXML_Element* GetElement(const CFX_ByteStringC& space, const CFX_ByteStringC& tag) const
- {
- return GetElement(space, tag, 0);
- }
-
- FX_DWORD CountElements(const CFX_ByteStringC& space, const CFX_ByteStringC& tag) const;
-
- CXML_Element* GetElement(const CFX_ByteStringC& space, const CFX_ByteStringC& tag, int index) const;
-
- FX_DWORD FindElement(CXML_Element *pChild) const;
-
-
-
-
- void SetTag(const CFX_ByteStringC& qSpace, const CFX_ByteStringC& tagname);
-
- void SetTag(const CFX_ByteStringC& qTagName);
-
- void RemoveChildren();
-
- void RemoveChild(FX_DWORD index);
-
-
-protected:
-
- CXML_Element* m_pParent;
- CFX_ByteString m_QSpaceName;
- CFX_ByteString m_TagName;
-
- CXML_AttrMap m_AttrMap;
-
- CFX_PtrArray m_Children;
- friend class CXML_Parser;
- friend class CXML_Composer;
+ CXML_AttrMap m_AttrMap;
+
+ CFX_PtrArray m_Children;
+ friend class CXML_Parser;
+ friend class CXML_Composer;
};
#endif // CORE_INCLUDE_FXCRT_FX_XML_H_
diff --git a/core/include/fxge/fpf.h b/core/include/fxge/fpf.h
index fb9bf4d111..efa001e916 100644
--- a/core/include/fxge/fpf.h
+++ b/core/include/fxge/fpf.h
@@ -12,55 +12,55 @@
class IFPF_DeviceModule;
class IFPF_FontMgr;
class IFPF_Font;
-class IFPF_DeviceModule
-{
-public:
- virtual ~IFPF_DeviceModule() { }
- virtual void Destroy() = 0;
- virtual IFPF_FontMgr* GetFontMgr() = 0;
+class IFPF_DeviceModule {
+ public:
+ virtual ~IFPF_DeviceModule() {}
+ virtual void Destroy() = 0;
+ virtual IFPF_FontMgr* GetFontMgr() = 0;
};
-IFPF_DeviceModule* FPF_GetDeviceModule();
-#define FPF_MATCHFONT_REPLACEANSI 1
-typedef struct FPF_HFONT_ {
- void* pData;
-}* FPF_HFONT;
-class IFPF_Font
-{
-public:
- virtual void Release() = 0;
- virtual IFPF_Font* Retain() = 0;
- virtual FPF_HFONT GetHandle() = 0;
- virtual CFX_ByteString GetFamilyName() = 0;
- virtual CFX_WideString GetPsName() = 0;
- virtual FX_DWORD GetFontStyle() const = 0;
- virtual uint8_t GetCharset() const = 0;
+IFPF_DeviceModule* FPF_GetDeviceModule();
+#define FPF_MATCHFONT_REPLACEANSI 1
+typedef struct FPF_HFONT_ { void* pData; } * FPF_HFONT;
+class IFPF_Font {
+ public:
+ virtual void Release() = 0;
+ virtual IFPF_Font* Retain() = 0;
+ virtual FPF_HFONT GetHandle() = 0;
+ virtual CFX_ByteString GetFamilyName() = 0;
+ virtual CFX_WideString GetPsName() = 0;
+ virtual FX_DWORD GetFontStyle() const = 0;
+ virtual uint8_t GetCharset() const = 0;
- virtual int32_t GetGlyphIndex(FX_WCHAR wUnicode) = 0;
- virtual int32_t GetGlyphWidth(int32_t iGlyphIndex) = 0;
+ virtual int32_t GetGlyphIndex(FX_WCHAR wUnicode) = 0;
+ virtual int32_t GetGlyphWidth(int32_t iGlyphIndex) = 0;
- virtual int32_t GetAscent() const = 0;
- virtual int32_t GetDescent() const = 0;
+ virtual int32_t GetAscent() const = 0;
+ virtual int32_t GetDescent() const = 0;
- virtual FX_BOOL GetGlyphBBox(int32_t iGlyphIndex, FX_RECT &rtBBox) = 0;
- virtual FX_BOOL GetBBox(FX_RECT &rtBBox) = 0;
+ virtual FX_BOOL GetGlyphBBox(int32_t iGlyphIndex, FX_RECT& rtBBox) = 0;
+ virtual FX_BOOL GetBBox(FX_RECT& rtBBox) = 0;
- virtual int32_t GetHeight() const = 0;
- virtual int32_t GetItalicAngle() const = 0;
- virtual FX_DWORD GetFontData(FX_DWORD dwTable, uint8_t* pBuffer, FX_DWORD dwSize) = 0;
+ virtual int32_t GetHeight() const = 0;
+ virtual int32_t GetItalicAngle() const = 0;
+ virtual FX_DWORD GetFontData(FX_DWORD dwTable,
+ uint8_t* pBuffer,
+ FX_DWORD dwSize) = 0;
-protected:
- ~IFPF_Font() { }
+ protected:
+ ~IFPF_Font() {}
};
-class IFPF_FontMgr
-{
-public:
- virtual ~IFPF_FontMgr() { }
- virtual void LoadSystemFonts() = 0;
- virtual void LoadPrivateFont(IFX_FileRead* pFontFile) = 0;
- virtual void LoadPrivateFont(const CFX_ByteStringC& bsFileName) = 0;
- virtual void LoadPrivateFont(void* pBuffer, size_t szBuffer) = 0;
+class IFPF_FontMgr {
+ public:
+ virtual ~IFPF_FontMgr() {}
+ virtual void LoadSystemFonts() = 0;
+ virtual void LoadPrivateFont(IFX_FileRead* pFontFile) = 0;
+ virtual void LoadPrivateFont(const CFX_ByteStringC& bsFileName) = 0;
+ virtual void LoadPrivateFont(void* pBuffer, size_t szBuffer) = 0;
- virtual IFPF_Font* CreateFont(const CFX_ByteStringC& bsFamilyname, uint8_t charset, FX_DWORD dwStyle, FX_DWORD dwMatch = 0) = 0;
+ virtual IFPF_Font* CreateFont(const CFX_ByteStringC& bsFamilyname,
+ uint8_t charset,
+ FX_DWORD dwStyle,
+ FX_DWORD dwMatch = 0) = 0;
};
#endif // CORE_INCLUDE_FXGE_FPF_H_
diff --git a/core/include/fxge/fx_dib.h b/core/include/fxge/fx_dib.h
index 27fc2f987d..ddc47d3db5 100644
--- a/core/include/fxge/fx_dib.h
+++ b/core/include/fxge/fx_dib.h
@@ -11,595 +11,681 @@
#include "../fxcrt/fx_coordinates.h"
enum FXDIB_Format {
- FXDIB_Invalid = 0,
- FXDIB_1bppMask = 0x101,
- FXDIB_1bppRgb = 0x001,
- FXDIB_1bppCmyk = 0x401,
- FXDIB_8bppMask = 0x108,
- FXDIB_8bppRgb = 0x008,
- FXDIB_8bppRgba = 0x208,
- FXDIB_8bppCmyk = 0x408,
- FXDIB_8bppCmyka = 0x608,
- FXDIB_Rgb = 0x018,
- FXDIB_Rgba = 0x218,
- FXDIB_Rgb32 = 0x020,
- FXDIB_Argb = 0x220,
- FXDIB_Cmyk = 0x420,
- FXDIB_Cmyka = 0x620,
+ FXDIB_Invalid = 0,
+ FXDIB_1bppMask = 0x101,
+ FXDIB_1bppRgb = 0x001,
+ FXDIB_1bppCmyk = 0x401,
+ FXDIB_8bppMask = 0x108,
+ FXDIB_8bppRgb = 0x008,
+ FXDIB_8bppRgba = 0x208,
+ FXDIB_8bppCmyk = 0x408,
+ FXDIB_8bppCmyka = 0x608,
+ FXDIB_Rgb = 0x018,
+ FXDIB_Rgba = 0x218,
+ FXDIB_Rgb32 = 0x020,
+ FXDIB_Argb = 0x220,
+ FXDIB_Cmyk = 0x420,
+ FXDIB_Cmyka = 0x620,
};
enum FXDIB_Channel {
- FXDIB_Red = 1,
- FXDIB_Green,
- FXDIB_Blue,
- FXDIB_Cyan,
- FXDIB_Magenta,
- FXDIB_Yellow,
- FXDIB_Black,
- FXDIB_Alpha
+ FXDIB_Red = 1,
+ FXDIB_Green,
+ FXDIB_Blue,
+ FXDIB_Cyan,
+ FXDIB_Magenta,
+ FXDIB_Yellow,
+ FXDIB_Black,
+ FXDIB_Alpha
};
-#define FXDIB_DOWNSAMPLE 0x04
-#define FXDIB_INTERPOL 0x20
-#define FXDIB_BICUBIC_INTERPOL 0x80
-#define FXDIB_NOSMOOTH 0x100
-#define FXDIB_PALETTE_LOC 0x01
-#define FXDIB_PALETTE_WIN 0x02
-#define FXDIB_PALETTE_MAC 0x04
-#define FXDIB_BLEND_NORMAL 0
-#define FXDIB_BLEND_MULTIPLY 1
-#define FXDIB_BLEND_SCREEN 2
-#define FXDIB_BLEND_OVERLAY 3
-#define FXDIB_BLEND_DARKEN 4
-#define FXDIB_BLEND_LIGHTEN 5
-
-#define FXDIB_BLEND_COLORDODGE 6
-#define FXDIB_BLEND_COLORBURN 7
-#define FXDIB_BLEND_HARDLIGHT 8
-#define FXDIB_BLEND_SOFTLIGHT 9
-#define FXDIB_BLEND_DIFFERENCE 10
-#define FXDIB_BLEND_EXCLUSION 11
-#define FXDIB_BLEND_NONSEPARABLE 21
-#define FXDIB_BLEND_HUE 21
-#define FXDIB_BLEND_SATURATION 22
-#define FXDIB_BLEND_COLOR 23
-#define FXDIB_BLEND_LUMINOSITY 24
-#define FXDIB_BLEND_UNSUPPORTED -1
-typedef FX_DWORD FX_ARGB;
-typedef FX_DWORD FX_COLORREF;
-typedef FX_DWORD FX_CMYK;
+#define FXDIB_DOWNSAMPLE 0x04
+#define FXDIB_INTERPOL 0x20
+#define FXDIB_BICUBIC_INTERPOL 0x80
+#define FXDIB_NOSMOOTH 0x100
+#define FXDIB_PALETTE_LOC 0x01
+#define FXDIB_PALETTE_WIN 0x02
+#define FXDIB_PALETTE_MAC 0x04
+#define FXDIB_BLEND_NORMAL 0
+#define FXDIB_BLEND_MULTIPLY 1
+#define FXDIB_BLEND_SCREEN 2
+#define FXDIB_BLEND_OVERLAY 3
+#define FXDIB_BLEND_DARKEN 4
+#define FXDIB_BLEND_LIGHTEN 5
+
+#define FXDIB_BLEND_COLORDODGE 6
+#define FXDIB_BLEND_COLORBURN 7
+#define FXDIB_BLEND_HARDLIGHT 8
+#define FXDIB_BLEND_SOFTLIGHT 9
+#define FXDIB_BLEND_DIFFERENCE 10
+#define FXDIB_BLEND_EXCLUSION 11
+#define FXDIB_BLEND_NONSEPARABLE 21
+#define FXDIB_BLEND_HUE 21
+#define FXDIB_BLEND_SATURATION 22
+#define FXDIB_BLEND_COLOR 23
+#define FXDIB_BLEND_LUMINOSITY 24
+#define FXDIB_BLEND_UNSUPPORTED -1
+typedef FX_DWORD FX_ARGB;
+typedef FX_DWORD FX_COLORREF;
+typedef FX_DWORD FX_CMYK;
class CFX_ClipRgn;
class CFX_DIBSource;
class CFX_DIBitmap;
-#define FXSYS_RGB(r, g, b) ((r) | ((g) << 8) | ((b) << 16))
-#define FXSYS_GetRValue(rgb) ((rgb) & 0xff)
+#define FXSYS_RGB(r, g, b) ((r) | ((g) << 8) | ((b) << 16))
+#define FXSYS_GetRValue(rgb) ((rgb)&0xff)
#define FXSYS_GetGValue(rgb) (((rgb) >> 8) & 0xff)
#define FXSYS_GetBValue(rgb) (((rgb) >> 16) & 0xff)
-#define FX_CCOLOR(val) (255-(val))
+#define FX_CCOLOR(val) (255 - (val))
#define FXSYS_CMYK(c, m, y, k) (((c) << 24) | ((m) << 16) | ((y) << 8) | (k))
#define FXSYS_GetCValue(cmyk) ((uint8_t)((cmyk) >> 24) & 0xff)
#define FXSYS_GetMValue(cmyk) ((uint8_t)((cmyk) >> 16) & 0xff)
#define FXSYS_GetYValue(cmyk) ((uint8_t)((cmyk) >> 8) & 0xff)
-#define FXSYS_GetKValue(cmyk) ((uint8_t)(cmyk) & 0xff)
+#define FXSYS_GetKValue(cmyk) ((uint8_t)(cmyk)&0xff)
void CmykDecode(FX_CMYK cmyk, int& c, int& m, int& y, int& k);
-inline FX_CMYK CmykEncode(int c, int m, int y, int k)
-{
- return (c << 24) | (m << 16) | (y << 8) | k;
+inline FX_CMYK CmykEncode(int c, int m, int y, int k) {
+ return (c << 24) | (m << 16) | (y << 8) | k;
}
-void ArgbDecode(FX_ARGB argb, int& a, int& r, int&g, int& b);
+void ArgbDecode(FX_ARGB argb, int& a, int& r, int& g, int& b);
void ArgbDecode(FX_ARGB argb, int& a, FX_COLORREF& rgb);
-inline FX_ARGB ArgbEncode(int a, int r, int g, int b)
-{
- return (a << 24) | (r << 16) | (g << 8) | b;
+inline FX_ARGB ArgbEncode(int a, int r, int g, int b) {
+ return (a << 24) | (r << 16) | (g << 8) | b;
}
FX_ARGB ArgbEncode(int a, FX_COLORREF rgb);
#define FXARGB_A(argb) ((uint8_t)((argb) >> 24))
#define FXARGB_R(argb) ((uint8_t)((argb) >> 16))
#define FXARGB_G(argb) ((uint8_t)((argb) >> 8))
#define FXARGB_B(argb) ((uint8_t)(argb))
-#define FXARGB_MAKE(a,r,g,b) (((FX_DWORD)(a) << 24) | ((r) << 16) | ((g) << 8) | (b))
-#define FXARGB_MUL_ALPHA(argb, alpha) (((((argb) >> 24) * (alpha) / 255) << 24) | ((argb) & 0xffffff))
-#define FXRGB2GRAY(r,g,b) (((b) * 11 + (g) * 59 + (r) * 30) / 100)
-#define FXCMYK2GRAY(c,m,y,k) (((255-(c)) * (255-(k)) * 30 + (255-(m)) * (255-(k)) * 59 + (255-(y)) * (255-(k)) * 11) / 25500)
-#define FXDIB_ALPHA_MERGE(backdrop, source, source_alpha) (((backdrop) * (255-(source_alpha)) + (source)*(source_alpha))/255)
-#define FXDIB_ALPHA_UNION(dest, src) ((dest) + (src) - (dest)*(src)/255)
-#define FXCMYK_GETDIB(p) ((((uint8_t*)(p))[0] << 24 | (((uint8_t*)(p))[1] << 16) | (((uint8_t*)(p))[2] << 8) | ((uint8_t*)(p))[3]))
+#define FXARGB_MAKE(a, r, g, b) \
+ (((FX_DWORD)(a) << 24) | ((r) << 16) | ((g) << 8) | (b))
+#define FXARGB_MUL_ALPHA(argb, alpha) \
+ (((((argb) >> 24) * (alpha) / 255) << 24) | ((argb)&0xffffff))
+#define FXRGB2GRAY(r, g, b) (((b)*11 + (g)*59 + (r)*30) / 100)
+#define FXCMYK2GRAY(c, m, y, k) \
+ (((255 - (c)) * (255 - (k)) * 30 + (255 - (m)) * (255 - (k)) * 59 + \
+ (255 - (y)) * (255 - (k)) * 11) / \
+ 25500)
+#define FXDIB_ALPHA_MERGE(backdrop, source, source_alpha) \
+ (((backdrop) * (255 - (source_alpha)) + (source) * (source_alpha)) / 255)
+#define FXDIB_ALPHA_UNION(dest, src) ((dest) + (src) - (dest) * (src) / 255)
+#define FXCMYK_GETDIB(p) \
+ ((((uint8_t*)(p))[0] << 24 | (((uint8_t*)(p))[1] << 16) | \
+ (((uint8_t*)(p))[2] << 8) | ((uint8_t*)(p))[3]))
#define FXCMYK_SETDIB(p, cmyk) ((uint8_t*)(p))[0] = (uint8_t)((cmyk) >> 24), \
((uint8_t*)(p))[1] = (uint8_t)((cmyk) >> 16), \
((uint8_t*)(p))[2] = (uint8_t)((cmyk) >> 8), \
((uint8_t*)(p))[3] = (uint8_t)(cmyk))
-#define FXARGB_GETDIB(p) ((((uint8_t*)(p))[0]) | (((uint8_t*)(p))[1] << 8) | (((uint8_t*)(p))[2] << 16) | (((uint8_t*)(p))[3] << 24))
-#define FXARGB_SETDIB(p, argb) ((uint8_t*)(p))[0] = (uint8_t)(argb), \
- ((uint8_t*)(p))[1] = (uint8_t)((argb) >> 8), \
- ((uint8_t*)(p))[2] = (uint8_t)((argb) >> 16), \
- ((uint8_t*)(p))[3] = (uint8_t)((argb) >> 24)
-#define FXARGB_COPY(dest, src) *(uint8_t*)(dest) = *(uint8_t*)(src), \
- *((uint8_t*)(dest)+1) = *((uint8_t*)(src)+1), \
- *((uint8_t*)(dest)+2) = *((uint8_t*)(src)+2), \
- *((uint8_t*)(dest)+3) = *((uint8_t*)(src)+3)
-#define FXCMYK_COPY(dest, src) *(uint8_t*)(dest) = *(uint8_t*)(src), \
- *((uint8_t*)(dest)+1) = *((uint8_t*)(src)+1), \
- *((uint8_t*)(dest)+2) = *((uint8_t*)(src)+2), \
- *((uint8_t*)(dest)+3) = *((uint8_t*)(src)+3)
-#define FXARGB_SETRGBORDERDIB(p, argb) ((uint8_t*)(p))[3] = (uint8_t)(argb>>24), \
- ((uint8_t*)(p))[0] = (uint8_t)((argb) >> 16), \
- ((uint8_t*)(p))[1] = (uint8_t)((argb) >> 8), \
- ((uint8_t*)(p))[2] = (uint8_t)(argb)
-#define FXARGB_GETRGBORDERDIB(p) (((uint8_t*)(p))[2]) | (((uint8_t*)(p))[1] << 8) | (((uint8_t*)(p))[0] << 16) | (((uint8_t*)(p))[3] << 24)
-#define FXARGB_RGBORDERCOPY(dest, src) *((uint8_t*)(dest)+3) = *((uint8_t*)(src)+3), \
- *(uint8_t*)(dest) = *((uint8_t*)(src)+2), \
- *((uint8_t*)(dest)+1) = *((uint8_t*)(src)+1), \
- *((uint8_t*)(dest)+2) = *((uint8_t*)(src))
+#define FXARGB_GETDIB(p) \
+ ((((uint8_t*)(p))[0]) | (((uint8_t*)(p))[1] << 8) | \
+ (((uint8_t*)(p))[2] << 16) | (((uint8_t*)(p))[3] << 24))
+#define FXARGB_SETDIB(p, argb) \
+ ((uint8_t*)(p))[0] = (uint8_t)(argb), \
+ ((uint8_t*)(p))[1] = (uint8_t)((argb) >> 8), \
+ ((uint8_t*)(p))[2] = (uint8_t)((argb) >> 16), \
+ ((uint8_t*)(p))[3] = (uint8_t)((argb) >> 24)
+#define FXARGB_COPY(dest, src) \
+ *(uint8_t*)(dest) = *(uint8_t*)(src), \
+ *((uint8_t*)(dest) + 1) = *((uint8_t*)(src) + 1), \
+ *((uint8_t*)(dest) + 2) = *((uint8_t*)(src) + 2), \
+ *((uint8_t*)(dest) + 3) = *((uint8_t*)(src) + 3)
+#define FXCMYK_COPY(dest, src) \
+ *(uint8_t*)(dest) = *(uint8_t*)(src), \
+ *((uint8_t*)(dest) + 1) = *((uint8_t*)(src) + 1), \
+ *((uint8_t*)(dest) + 2) = *((uint8_t*)(src) + 2), \
+ *((uint8_t*)(dest) + 3) = *((uint8_t*)(src) + 3)
+#define FXARGB_SETRGBORDERDIB(p, argb) \
+ ((uint8_t*)(p))[3] = (uint8_t)(argb >> 24), \
+ ((uint8_t*)(p))[0] = (uint8_t)((argb) >> 16), \
+ ((uint8_t*)(p))[1] = (uint8_t)((argb) >> 8), \
+ ((uint8_t*)(p))[2] = (uint8_t)(argb)
+#define FXARGB_GETRGBORDERDIB(p) \
+ (((uint8_t*)(p))[2]) | (((uint8_t*)(p))[1] << 8) | \
+ (((uint8_t*)(p))[0] << 16) | (((uint8_t*)(p))[3] << 24)
+#define FXARGB_RGBORDERCOPY(dest, src) \
+ *((uint8_t*)(dest) + 3) = *((uint8_t*)(src) + 3), \
+ *(uint8_t*)(dest) = *((uint8_t*)(src) + 2), \
+ *((uint8_t*)(dest) + 1) = *((uint8_t*)(src) + 1), \
+ *((uint8_t*)(dest) + 2) = *((uint8_t*)(src))
#define FXARGB_TODIB(argb) (argb)
-#define FXCMYK_TODIB(cmyk) ((uint8_t)((cmyk) >> 24) | ((uint8_t)((cmyk) >> 16)) << 8 | ((uint8_t)((cmyk) >> 8)) << 16 | ((uint8_t)(cmyk) << 24))
-#define FXARGB_TOBGRORDERDIB(argb) ((uint8_t)(argb>>16) | ((uint8_t)(argb>>8)) << 8 | ((uint8_t)(argb)) << 16 | ((uint8_t)(argb>>24) << 24))
-#define FXGETFLAG_COLORTYPE(flag) (uint8_t)((flag)>>8)
-#define FXGETFLAG_ALPHA_FILL(flag) (uint8_t)(flag)
-#define FXGETFLAG_ALPHA_STROKE(flag) (uint8_t)((flag)>>16)
-#define FXSETFLAG_COLORTYPE(flag, val) flag = (((val)<<8)|(flag&0xffff00ff))
-#define FXSETFLAG_ALPHA_FILL(flag, val) flag = ((val)|(flag&0xffffff00))
-#define FXSETFLAG_ALPHA_STROKE(flag, val) flag = (((val)<<16)|(flag&0xff00ffff))
-class CFX_DIBSource
-{
-public:
+#define FXCMYK_TODIB(cmyk) \
+ ((uint8_t)((cmyk) >> 24) | ((uint8_t)((cmyk) >> 16)) << 8 | \
+ ((uint8_t)((cmyk) >> 8)) << 16 | ((uint8_t)(cmyk) << 24))
+#define FXARGB_TOBGRORDERDIB(argb) \
+ ((uint8_t)(argb >> 16) | ((uint8_t)(argb >> 8)) << 8 | \
+ ((uint8_t)(argb)) << 16 | ((uint8_t)(argb >> 24) << 24))
+#define FXGETFLAG_COLORTYPE(flag) (uint8_t)((flag) >> 8)
+#define FXGETFLAG_ALPHA_FILL(flag) (uint8_t)(flag)
+#define FXGETFLAG_ALPHA_STROKE(flag) (uint8_t)((flag) >> 16)
+#define FXSETFLAG_COLORTYPE(flag, val) \
+ flag = (((val) << 8) | (flag & 0xffff00ff))
+#define FXSETFLAG_ALPHA_FILL(flag, val) flag = ((val) | (flag & 0xffffff00))
+#define FXSETFLAG_ALPHA_STROKE(flag, val) \
+ flag = (((val) << 16) | (flag & 0xff00ffff))
+class CFX_DIBSource {
+ public:
+ virtual ~CFX_DIBSource();
- virtual ~CFX_DIBSource();
+ int GetWidth() const { return m_Width; }
+ int GetHeight() const { return m_Height; }
+ FXDIB_Format GetFormat() const {
+ return (FXDIB_Format)(m_AlphaFlag * 0x100 + m_bpp);
+ }
- int GetWidth() const
- {
- return m_Width;
- }
+ FX_DWORD GetPitch() const { return m_Pitch; }
- int GetHeight() const
- {
- return m_Height;
- }
+ FX_DWORD* GetPalette() const { return m_pPalette; }
- FXDIB_Format GetFormat() const
- {
- return (FXDIB_Format)(m_AlphaFlag * 0x100 + m_bpp);
- }
+ virtual uint8_t* GetBuffer() const { return NULL; }
- FX_DWORD GetPitch() const
- {
- return m_Pitch;
- }
+ virtual const uint8_t* GetScanline(int line) const = 0;
- FX_DWORD* GetPalette() const
- {
- return m_pPalette;
- }
+ virtual FX_BOOL SkipToScanline(int line, IFX_Pause* pPause) const {
+ return FALSE;
+ }
+ virtual void DownSampleScanline(int line,
+ uint8_t* dest_scan,
+ int dest_bpp,
+ int dest_width,
+ FX_BOOL bFlipX,
+ int clip_left,
+ int clip_width) const = 0;
+ virtual void SetDownSampleSize(int width, int height) const {}
- virtual uint8_t* GetBuffer() const
- {
- return NULL;
- }
+ int GetBPP() const { return m_bpp; }
- virtual const uint8_t* GetScanline(int line) const = 0;
+ FX_BOOL IsAlphaMask() const { return m_AlphaFlag == 1; }
- virtual FX_BOOL SkipToScanline(int line, IFX_Pause* pPause) const
- {
- return FALSE;
- }
+ FX_BOOL HasAlpha() const { return m_AlphaFlag & 2 ? TRUE : FALSE; }
- virtual void DownSampleScanline(int line, uint8_t* dest_scan, int dest_bpp,
- int dest_width, FX_BOOL bFlipX, int clip_left, int clip_width) const = 0;
+ FX_BOOL IsOpaqueImage() const { return !(m_AlphaFlag & 3); }
- virtual void SetDownSampleSize(int width, int height) const {}
+ FX_BOOL IsCmykImage() const { return m_AlphaFlag & 4 ? TRUE : FALSE; }
- int GetBPP() const
- {
- return m_bpp;
- }
+ int GetPaletteSize() const {
+ return IsAlphaMask() ? 0 : (m_bpp == 1 ? 2 : (m_bpp == 8 ? 256 : 0));
+ }
- FX_BOOL IsAlphaMask() const
- {
- return m_AlphaFlag == 1;
- }
+ FX_DWORD GetPaletteEntry(int index) const;
- FX_BOOL HasAlpha() const
- {
- return m_AlphaFlag & 2 ? TRUE : FALSE;
- }
+ void SetPaletteEntry(int index, FX_DWORD color);
+ FX_DWORD GetPaletteArgb(int index) const { return GetPaletteEntry(index); }
+ void SetPaletteArgb(int index, FX_DWORD color) {
+ SetPaletteEntry(index, color);
+ }
- FX_BOOL IsOpaqueImage() const
- {
- return !(m_AlphaFlag & 3);
- }
+ void CopyPalette(const FX_DWORD* pSrcPal, FX_DWORD size = 256);
- FX_BOOL IsCmykImage() const
- {
- return m_AlphaFlag & 4 ? TRUE : FALSE;
- }
+ CFX_DIBitmap* Clone(const FX_RECT* pClip = NULL) const;
+ CFX_DIBitmap* CloneConvert(FXDIB_Format format,
+ const FX_RECT* pClip = NULL,
+ void* pIccTransform = NULL) const;
+ CFX_DIBitmap* StretchTo(int dest_width,
+ int dest_height,
+ FX_DWORD flags = 0,
+ const FX_RECT* pClip = NULL) const;
- int GetPaletteSize() const
- {
- return IsAlphaMask() ? 0 : (m_bpp == 1 ? 2 : (m_bpp == 8 ? 256 : 0));
- }
+ CFX_DIBitmap* TransformTo(const CFX_AffineMatrix* pMatrix,
+ int& left,
+ int& top,
+ FX_DWORD flags = 0,
+ const FX_RECT* pClip = NULL) const;
- FX_DWORD GetPaletteEntry(int index) const;
+ CFX_DIBitmap* GetAlphaMask(const FX_RECT* pClip = NULL) const;
- void SetPaletteEntry(int index, FX_DWORD color);
- FX_DWORD GetPaletteArgb(int index) const
- {
- return GetPaletteEntry(index);
- }
- void SetPaletteArgb(int index, FX_DWORD color)
- {
- SetPaletteEntry(index, color);
- }
+ FX_BOOL CopyAlphaMask(const CFX_DIBSource* pAlphaMask,
+ const FX_RECT* pClip = NULL);
- void CopyPalette(const FX_DWORD* pSrcPal, FX_DWORD size = 256);
+ CFX_DIBitmap* SwapXY(FX_BOOL bXFlip,
+ FX_BOOL bYFlip,
+ const FX_RECT* pClip = NULL) const;
+ CFX_DIBitmap* FlipImage(FX_BOOL bXFlip, FX_BOOL bYFlip) const;
- CFX_DIBitmap* Clone(const FX_RECT* pClip = NULL) const;
+ void GetOverlapRect(int& dest_left,
+ int& dest_top,
+ int& width,
+ int& height,
+ int src_width,
+ int src_height,
+ int& src_left,
+ int& src_top,
+ const CFX_ClipRgn* pClipRgn);
- CFX_DIBitmap* CloneConvert(FXDIB_Format format, const FX_RECT* pClip = NULL, void* pIccTransform = NULL) const;
+ CFX_DIBitmap* m_pAlphaMask;
- CFX_DIBitmap* StretchTo(int dest_width, int dest_height, FX_DWORD flags = 0, const FX_RECT* pClip = NULL) const;
+ protected:
+ CFX_DIBSource();
+ int m_Width;
- CFX_DIBitmap* TransformTo(const CFX_AffineMatrix* pMatrix, int& left, int &top,
- FX_DWORD flags = 0, const FX_RECT* pClip = NULL) const;
+ int m_Height;
- CFX_DIBitmap* GetAlphaMask(const FX_RECT* pClip = NULL) const;
+ int m_bpp;
- FX_BOOL CopyAlphaMask(const CFX_DIBSource* pAlphaMask, const FX_RECT* pClip = NULL);
+ FX_DWORD m_AlphaFlag;
- CFX_DIBitmap* SwapXY(FX_BOOL bXFlip, FX_BOOL bYFlip, const FX_RECT* pClip = NULL) const;
+ FX_DWORD m_Pitch;
- CFX_DIBitmap* FlipImage(FX_BOOL bXFlip, FX_BOOL bYFlip) const;
+ FX_DWORD* m_pPalette;
- void GetOverlapRect(int& dest_left, int& dest_top, int& width, int& height, int src_width,
- int src_height, int& src_left, int& src_top, const CFX_ClipRgn* pClipRgn);
+ void BuildPalette();
- CFX_DIBitmap* m_pAlphaMask;
-protected:
+ FX_BOOL BuildAlphaMask();
- CFX_DIBSource();
+ int FindPalette(FX_DWORD color) const;
- int m_Width;
-
- int m_Height;
-
- int m_bpp;
-
- FX_DWORD m_AlphaFlag;
-
- FX_DWORD m_Pitch;
-
- FX_DWORD* m_pPalette;
-
- void BuildPalette();
-
- FX_BOOL BuildAlphaMask();
-
- int FindPalette(FX_DWORD color) const;
-
- void GetPalette(FX_DWORD* pal, int alpha) const;
+ void GetPalette(FX_DWORD* pal, int alpha) const;
};
-class CFX_DIBitmap : public CFX_DIBSource
-{
-public:
-
- virtual ~CFX_DIBitmap();
-
- CFX_DIBitmap();
-
- CFX_DIBitmap(const CFX_DIBitmap& src);
-
- FX_BOOL Create(int width, int height, FXDIB_Format format, uint8_t* pBuffer = NULL, int pitch = 0);
-
- FX_BOOL Copy(const CFX_DIBSource* pSrc);
-
- virtual uint8_t* GetBuffer() const
- {
- return m_pBuffer;
- }
-
- virtual const uint8_t* GetScanline(int line) const
- {
- return m_pBuffer ? m_pBuffer + line * m_Pitch : NULL;
- }
-
- virtual void DownSampleScanline(int line, uint8_t* dest_scan, int dest_bpp,
- int dest_width, FX_BOOL bFlipX, int clip_left, int clip_width) const;
-
- void TakeOver(CFX_DIBitmap* pSrcBitmap);
-
- FX_BOOL ConvertFormat(FXDIB_Format format, void* pIccTransform = NULL);
-
- void Clear(FX_DWORD color);
-
- FX_DWORD GetPixel(int x, int y) const;
-
- void SetPixel(int x, int y, FX_DWORD color);
-
- FX_BOOL LoadChannel(FXDIB_Channel destChannel, const CFX_DIBSource* pSrcBitmap, FXDIB_Channel srcChannel);
-
- FX_BOOL LoadChannel(FXDIB_Channel destChannel, int value);
-
- FX_BOOL MultiplyAlpha(int alpha);
-
- FX_BOOL MultiplyAlpha(const CFX_DIBSource* pAlphaMask);
-
- FX_BOOL TransferBitmap(int dest_left, int dest_top, int width, int height,
- const CFX_DIBSource* pSrcBitmap, int src_left, int src_top, void* pIccTransform = NULL);
-
- FX_BOOL CompositeBitmap(int dest_left, int dest_top, int width, int height,
- const CFX_DIBSource* pSrcBitmap, int src_left, int src_top,
- int blend_type = FXDIB_BLEND_NORMAL, const CFX_ClipRgn* pClipRgn = NULL, FX_BOOL bRgbByteOrder = FALSE, void* pIccTransform = NULL);
-
- FX_BOOL TransferMask(int dest_left, int dest_top, int width, int height,
- const CFX_DIBSource* pMask, FX_DWORD color, int src_left, int src_top, int alpha_flag = 0, void* pIccTransform = NULL);
-
- FX_BOOL CompositeMask(int dest_left, int dest_top, int width, int height,
- const CFX_DIBSource* pMask, FX_DWORD color, int src_left, int src_top,
- int blend_type = FXDIB_BLEND_NORMAL, const CFX_ClipRgn* pClipRgn = NULL, FX_BOOL bRgbByteOrder = FALSE, int alpha_flag = 0, void* pIccTransform = NULL);
-
- FX_BOOL CompositeRect(int dest_left, int dest_top, int width, int height, FX_DWORD color, int alpha_flag = 0, void* pIccTransform = NULL);
-
- FX_BOOL ConvertColorScale(FX_DWORD forecolor, FX_DWORD backcolor);
-
- FX_BOOL DitherFS(const FX_DWORD* pPalette, int pal_size, const FX_RECT* pRect = NULL);
-protected:
-
- uint8_t* m_pBuffer;
-
- FX_BOOL m_bExtBuf;
-
- FX_BOOL GetGrayData(void* pIccTransform = NULL);
+class CFX_DIBitmap : public CFX_DIBSource {
+ public:
+ virtual ~CFX_DIBitmap();
+
+ CFX_DIBitmap();
+
+ CFX_DIBitmap(const CFX_DIBitmap& src);
+
+ FX_BOOL Create(int width,
+ int height,
+ FXDIB_Format format,
+ uint8_t* pBuffer = NULL,
+ int pitch = 0);
+
+ FX_BOOL Copy(const CFX_DIBSource* pSrc);
+
+ virtual uint8_t* GetBuffer() const { return m_pBuffer; }
+
+ virtual const uint8_t* GetScanline(int line) const {
+ return m_pBuffer ? m_pBuffer + line * m_Pitch : NULL;
+ }
+
+ virtual void DownSampleScanline(int line,
+ uint8_t* dest_scan,
+ int dest_bpp,
+ int dest_width,
+ FX_BOOL bFlipX,
+ int clip_left,
+ int clip_width) const;
+
+ void TakeOver(CFX_DIBitmap* pSrcBitmap);
+
+ FX_BOOL ConvertFormat(FXDIB_Format format, void* pIccTransform = NULL);
+
+ void Clear(FX_DWORD color);
+
+ FX_DWORD GetPixel(int x, int y) const;
+
+ void SetPixel(int x, int y, FX_DWORD color);
+
+ FX_BOOL LoadChannel(FXDIB_Channel destChannel,
+ const CFX_DIBSource* pSrcBitmap,
+ FXDIB_Channel srcChannel);
+
+ FX_BOOL LoadChannel(FXDIB_Channel destChannel, int value);
+
+ FX_BOOL MultiplyAlpha(int alpha);
+
+ FX_BOOL MultiplyAlpha(const CFX_DIBSource* pAlphaMask);
+
+ FX_BOOL TransferBitmap(int dest_left,
+ int dest_top,
+ int width,
+ int height,
+ const CFX_DIBSource* pSrcBitmap,
+ int src_left,
+ int src_top,
+ void* pIccTransform = NULL);
+
+ FX_BOOL CompositeBitmap(int dest_left,
+ int dest_top,
+ int width,
+ int height,
+ const CFX_DIBSource* pSrcBitmap,
+ int src_left,
+ int src_top,
+ int blend_type = FXDIB_BLEND_NORMAL,
+ const CFX_ClipRgn* pClipRgn = NULL,
+ FX_BOOL bRgbByteOrder = FALSE,
+ void* pIccTransform = NULL);
+
+ FX_BOOL TransferMask(int dest_left,
+ int dest_top,
+ int width,
+ int height,
+ const CFX_DIBSource* pMask,
+ FX_DWORD color,
+ int src_left,
+ int src_top,
+ int alpha_flag = 0,
+ void* pIccTransform = NULL);
+
+ FX_BOOL CompositeMask(int dest_left,
+ int dest_top,
+ int width,
+ int height,
+ const CFX_DIBSource* pMask,
+ FX_DWORD color,
+ int src_left,
+ int src_top,
+ int blend_type = FXDIB_BLEND_NORMAL,
+ const CFX_ClipRgn* pClipRgn = NULL,
+ FX_BOOL bRgbByteOrder = FALSE,
+ int alpha_flag = 0,
+ void* pIccTransform = NULL);
+
+ FX_BOOL CompositeRect(int dest_left,
+ int dest_top,
+ int width,
+ int height,
+ FX_DWORD color,
+ int alpha_flag = 0,
+ void* pIccTransform = NULL);
+
+ FX_BOOL ConvertColorScale(FX_DWORD forecolor, FX_DWORD backcolor);
+
+ FX_BOOL DitherFS(const FX_DWORD* pPalette,
+ int pal_size,
+ const FX_RECT* pRect = NULL);
+
+ protected:
+ uint8_t* m_pBuffer;
+
+ FX_BOOL m_bExtBuf;
+
+ FX_BOOL GetGrayData(void* pIccTransform = NULL);
};
-class CFX_DIBExtractor
-{
-public:
+class CFX_DIBExtractor {
+ public:
+ CFX_DIBExtractor(const CFX_DIBSource* pSrc);
- CFX_DIBExtractor(const CFX_DIBSource* pSrc);
+ ~CFX_DIBExtractor();
- ~CFX_DIBExtractor();
+ operator CFX_DIBitmap*() { return m_pBitmap; }
- operator CFX_DIBitmap*()
- {
- return m_pBitmap;
- }
-private:
-
- CFX_DIBitmap* m_pBitmap;
+ private:
+ CFX_DIBitmap* m_pBitmap;
};
typedef CFX_CountRef<CFX_DIBitmap> CFX_DIBitmapRef;
-class CFX_FilteredDIB : public CFX_DIBSource
-{
-public:
-
- CFX_FilteredDIB();
+class CFX_FilteredDIB : public CFX_DIBSource {
+ public:
+ CFX_FilteredDIB();
- ~CFX_FilteredDIB();
+ ~CFX_FilteredDIB();
- void LoadSrc(const CFX_DIBSource* pSrc, FX_BOOL bAutoDropSrc = FALSE);
+ void LoadSrc(const CFX_DIBSource* pSrc, FX_BOOL bAutoDropSrc = FALSE);
- virtual FXDIB_Format GetDestFormat() = 0;
+ virtual FXDIB_Format GetDestFormat() = 0;
- virtual FX_DWORD* GetDestPalette() = 0;
+ virtual FX_DWORD* GetDestPalette() = 0;
+ virtual void TranslateScanline(uint8_t* dest_buf,
+ const uint8_t* src_buf) const = 0;
- virtual void TranslateScanline(uint8_t* dest_buf, const uint8_t* src_buf) const = 0;
+ virtual void TranslateDownSamples(uint8_t* dest_buf,
+ const uint8_t* src_buf,
+ int pixels,
+ int Bpp) const = 0;
- virtual void TranslateDownSamples(uint8_t* dest_buf, const uint8_t* src_buf, int pixels, int Bpp) const = 0;
-protected:
- virtual const uint8_t* GetScanline(int line) const;
- virtual void DownSampleScanline(int line, uint8_t* dest_scan, int dest_bpp,
- int dest_width, FX_BOOL bFlipX, int clip_left, int clip_width) const;
+ protected:
+ virtual const uint8_t* GetScanline(int line) const;
+ virtual void DownSampleScanline(int line,
+ uint8_t* dest_scan,
+ int dest_bpp,
+ int dest_width,
+ FX_BOOL bFlipX,
+ int clip_left,
+ int clip_width) const;
- const CFX_DIBSource* m_pSrc;
+ const CFX_DIBSource* m_pSrc;
- FX_BOOL m_bAutoDropSrc;
+ FX_BOOL m_bAutoDropSrc;
- uint8_t* m_pScanline;
+ uint8_t* m_pScanline;
};
-class IFX_ScanlineComposer
-{
-public:
- virtual ~IFX_ScanlineComposer() { }
-
- virtual void ComposeScanline(int line, const uint8_t* scanline, const uint8_t* scan_extra_alpha = NULL) = 0;
-
- virtual FX_BOOL SetInfo(int width, int height, FXDIB_Format src_format, FX_DWORD* pSrcPalette) = 0;
+class IFX_ScanlineComposer {
+ public:
+ virtual ~IFX_ScanlineComposer() {}
+
+ virtual void ComposeScanline(int line,
+ const uint8_t* scanline,
+ const uint8_t* scan_extra_alpha = NULL) = 0;
+
+ virtual FX_BOOL SetInfo(int width,
+ int height,
+ FXDIB_Format src_format,
+ FX_DWORD* pSrcPalette) = 0;
};
-class CFX_ScanlineCompositor
-{
-public:
- CFX_ScanlineCompositor();
-
- ~CFX_ScanlineCompositor();
-
- FX_BOOL Init(FXDIB_Format dest_format, FXDIB_Format src_format, int32_t width, FX_DWORD* pSrcPalette,
- FX_DWORD mask_color, int blend_type, FX_BOOL bClip, FX_BOOL bRgbByteOrder = FALSE, int alpha_flag = 0, void* pIccTransform = NULL);
-
-
- void CompositeRgbBitmapLine(uint8_t* dest_scan, const uint8_t* src_scan, int width, const uint8_t* clip_scan,
- const uint8_t* src_extra_alpha = NULL, uint8_t* dst_extra_alpha = NULL);
-
-
- void CompositePalBitmapLine(uint8_t* dest_scan, const uint8_t* src_scan, int src_left, int width, const uint8_t* clip_scan,
- const uint8_t* src_extra_alpha = NULL, uint8_t* dst_extra_alpha = NULL);
-
-
- void CompositeByteMaskLine(uint8_t* dest_scan, const uint8_t* src_scan, int width, const uint8_t* clip_scan,
- uint8_t* dst_extra_alpha = NULL);
-
-
- void CompositeBitMaskLine(uint8_t* dest_scan, const uint8_t* src_scan, int src_left, int width, const uint8_t* clip_scan,
- uint8_t* dst_extra_alpha = NULL);
-protected:
- int m_Transparency;
- FXDIB_Format m_SrcFormat,
- m_DestFormat;
- FX_DWORD* m_pSrcPalette;
-
- int m_MaskAlpha,
- m_MaskRed,
- m_MaskGreen,
- m_MaskBlue,
- m_MaskBlack;
- int m_BlendType;
- void* m_pIccTransform;
- uint8_t* m_pCacheScanline;
- int m_CacheSize;
- FX_BOOL m_bRgbByteOrder;
+class CFX_ScanlineCompositor {
+ public:
+ CFX_ScanlineCompositor();
+
+ ~CFX_ScanlineCompositor();
+
+ FX_BOOL Init(FXDIB_Format dest_format,
+ FXDIB_Format src_format,
+ int32_t width,
+ FX_DWORD* pSrcPalette,
+ FX_DWORD mask_color,
+ int blend_type,
+ FX_BOOL bClip,
+ FX_BOOL bRgbByteOrder = FALSE,
+ int alpha_flag = 0,
+ void* pIccTransform = NULL);
+
+ void CompositeRgbBitmapLine(uint8_t* dest_scan,
+ const uint8_t* src_scan,
+ int width,
+ const uint8_t* clip_scan,
+ const uint8_t* src_extra_alpha = NULL,
+ uint8_t* dst_extra_alpha = NULL);
+
+ void CompositePalBitmapLine(uint8_t* dest_scan,
+ const uint8_t* src_scan,
+ int src_left,
+ int width,
+ const uint8_t* clip_scan,
+ const uint8_t* src_extra_alpha = NULL,
+ uint8_t* dst_extra_alpha = NULL);
+
+ void CompositeByteMaskLine(uint8_t* dest_scan,
+ const uint8_t* src_scan,
+ int width,
+ const uint8_t* clip_scan,
+ uint8_t* dst_extra_alpha = NULL);
+
+ void CompositeBitMaskLine(uint8_t* dest_scan,
+ const uint8_t* src_scan,
+ int src_left,
+ int width,
+ const uint8_t* clip_scan,
+ uint8_t* dst_extra_alpha = NULL);
+
+ protected:
+ int m_Transparency;
+ FXDIB_Format m_SrcFormat, m_DestFormat;
+ FX_DWORD* m_pSrcPalette;
+
+ int m_MaskAlpha, m_MaskRed, m_MaskGreen, m_MaskBlue, m_MaskBlack;
+ int m_BlendType;
+ void* m_pIccTransform;
+ uint8_t* m_pCacheScanline;
+ int m_CacheSize;
+ FX_BOOL m_bRgbByteOrder;
};
-class CFX_BitmapComposer : public IFX_ScanlineComposer
-{
-public:
-
- CFX_BitmapComposer();
-
- ~CFX_BitmapComposer();
-
-
- void Compose(CFX_DIBitmap* pDest, const CFX_ClipRgn* pClipRgn, int bitmap_alpha,
- FX_DWORD mask_color, FX_RECT& dest_rect, FX_BOOL bVertical,
- FX_BOOL bFlipX, FX_BOOL bFlipY, FX_BOOL bRgbByteOrder = FALSE,
- int alpha_flag = 0, void* pIccTransform = NULL, int blend_type = FXDIB_BLEND_NORMAL);
-
- virtual FX_BOOL SetInfo(int width, int height, FXDIB_Format src_format, FX_DWORD* pSrcPalette);
-
-
- virtual void ComposeScanline(int line, const uint8_t* scanline, const uint8_t* scan_extra_alpha);
-protected:
-
- void DoCompose(uint8_t* dest_scan, const uint8_t* src_scan, int dest_width, const uint8_t* clip_scan,
- const uint8_t* src_extra_alpha = NULL, uint8_t* dst_extra_alpha = NULL);
- CFX_DIBitmap* m_pBitmap;
- const CFX_ClipRgn* m_pClipRgn;
- FXDIB_Format m_SrcFormat;
- int m_DestLeft, m_DestTop, m_DestWidth, m_DestHeight, m_BitmapAlpha;
- FX_DWORD m_MaskColor;
- const CFX_DIBitmap* m_pClipMask;
- CFX_ScanlineCompositor m_Compositor;
- FX_BOOL m_bVertical, m_bFlipX, m_bFlipY;
- int m_AlphaFlag;
- void* m_pIccTransform;
- FX_BOOL m_bRgbByteOrder;
- int m_BlendType;
- void ComposeScanlineV(int line, const uint8_t* scanline, const uint8_t* scan_extra_alpha = NULL);
- uint8_t* m_pScanlineV;
- uint8_t* m_pClipScanV;
- uint8_t* m_pAddClipScan;
- uint8_t* m_pScanlineAlphaV;
+class CFX_BitmapComposer : public IFX_ScanlineComposer {
+ public:
+ CFX_BitmapComposer();
+
+ ~CFX_BitmapComposer();
+
+ void Compose(CFX_DIBitmap* pDest,
+ const CFX_ClipRgn* pClipRgn,
+ int bitmap_alpha,
+ FX_DWORD mask_color,
+ FX_RECT& dest_rect,
+ FX_BOOL bVertical,
+ FX_BOOL bFlipX,
+ FX_BOOL bFlipY,
+ FX_BOOL bRgbByteOrder = FALSE,
+ int alpha_flag = 0,
+ void* pIccTransform = NULL,
+ int blend_type = FXDIB_BLEND_NORMAL);
+
+ virtual FX_BOOL SetInfo(int width,
+ int height,
+ FXDIB_Format src_format,
+ FX_DWORD* pSrcPalette);
+
+ virtual void ComposeScanline(int line,
+ const uint8_t* scanline,
+ const uint8_t* scan_extra_alpha);
+
+ protected:
+ void DoCompose(uint8_t* dest_scan,
+ const uint8_t* src_scan,
+ int dest_width,
+ const uint8_t* clip_scan,
+ const uint8_t* src_extra_alpha = NULL,
+ uint8_t* dst_extra_alpha = NULL);
+ CFX_DIBitmap* m_pBitmap;
+ const CFX_ClipRgn* m_pClipRgn;
+ FXDIB_Format m_SrcFormat;
+ int m_DestLeft, m_DestTop, m_DestWidth, m_DestHeight, m_BitmapAlpha;
+ FX_DWORD m_MaskColor;
+ const CFX_DIBitmap* m_pClipMask;
+ CFX_ScanlineCompositor m_Compositor;
+ FX_BOOL m_bVertical, m_bFlipX, m_bFlipY;
+ int m_AlphaFlag;
+ void* m_pIccTransform;
+ FX_BOOL m_bRgbByteOrder;
+ int m_BlendType;
+ void ComposeScanlineV(int line,
+ const uint8_t* scanline,
+ const uint8_t* scan_extra_alpha = NULL);
+ uint8_t* m_pScanlineV;
+ uint8_t* m_pClipScanV;
+ uint8_t* m_pAddClipScan;
+ uint8_t* m_pScanlineAlphaV;
};
-class CFX_BitmapStorer : public IFX_ScanlineComposer
-{
-public:
+class CFX_BitmapStorer : public IFX_ScanlineComposer {
+ public:
+ CFX_BitmapStorer();
- CFX_BitmapStorer();
+ ~CFX_BitmapStorer();
- ~CFX_BitmapStorer();
+ virtual void ComposeScanline(int line,
+ const uint8_t* scanline,
+ const uint8_t* scan_extra_alpha);
- virtual void ComposeScanline(int line, const uint8_t* scanline, const uint8_t* scan_extra_alpha);
+ virtual FX_BOOL SetInfo(int width,
+ int height,
+ FXDIB_Format src_format,
+ FX_DWORD* pSrcPalette);
- virtual FX_BOOL SetInfo(int width, int height, FXDIB_Format src_format, FX_DWORD* pSrcPalette);
+ CFX_DIBitmap* GetBitmap() { return m_pBitmap; }
- CFX_DIBitmap* GetBitmap()
- {
- return m_pBitmap;
- }
+ CFX_DIBitmap* Detach();
- CFX_DIBitmap* Detach();
+ void Replace(CFX_DIBitmap* pBitmap);
- void Replace(CFX_DIBitmap* pBitmap);
-private:
- CFX_DIBitmap* m_pBitmap;
+ private:
+ CFX_DIBitmap* m_pBitmap;
};
class CStretchEngine;
-class CFX_ImageStretcher
-{
-public:
- CFX_ImageStretcher();
- ~CFX_ImageStretcher();
-
- FX_BOOL Start(IFX_ScanlineComposer* pDest, const CFX_DIBSource* pBitmap,
- int dest_width, int dest_height, const FX_RECT& bitmap_rect,
- FX_DWORD flags);
-
- FX_BOOL Continue(IFX_Pause* pPause);
- FX_BOOL StartQuickStretch();
- FX_BOOL StartStretch();
- FX_BOOL ContinueQuickStretch(IFX_Pause* pPause);
- FX_BOOL ContinueStretch(IFX_Pause* pPause);
-
- IFX_ScanlineComposer* m_pDest;
- const CFX_DIBSource* m_pSource;
- CStretchEngine* m_pStretchEngine;
- FX_DWORD m_Flags;
- FX_BOOL m_bFlipX;
- FX_BOOL m_bFlipY;
- int m_DestWidth;
- int m_DestHeight;
- FX_RECT m_ClipRect;
- int m_LineIndex;
- int m_DestBPP;
- uint8_t* m_pScanline;
- uint8_t* m_pMaskScanline;
- FXDIB_Format m_DestFormat;
+class CFX_ImageStretcher {
+ public:
+ CFX_ImageStretcher();
+ ~CFX_ImageStretcher();
+
+ FX_BOOL Start(IFX_ScanlineComposer* pDest,
+ const CFX_DIBSource* pBitmap,
+ int dest_width,
+ int dest_height,
+ const FX_RECT& bitmap_rect,
+ FX_DWORD flags);
+
+ FX_BOOL Continue(IFX_Pause* pPause);
+ FX_BOOL StartQuickStretch();
+ FX_BOOL StartStretch();
+ FX_BOOL ContinueQuickStretch(IFX_Pause* pPause);
+ FX_BOOL ContinueStretch(IFX_Pause* pPause);
+
+ IFX_ScanlineComposer* m_pDest;
+ const CFX_DIBSource* m_pSource;
+ CStretchEngine* m_pStretchEngine;
+ FX_DWORD m_Flags;
+ FX_BOOL m_bFlipX;
+ FX_BOOL m_bFlipY;
+ int m_DestWidth;
+ int m_DestHeight;
+ FX_RECT m_ClipRect;
+ int m_LineIndex;
+ int m_DestBPP;
+ uint8_t* m_pScanline;
+ uint8_t* m_pMaskScanline;
+ FXDIB_Format m_DestFormat;
};
-class CFX_ImageTransformer
-{
-public:
- CFX_ImageTransformer();
- ~CFX_ImageTransformer();
-
- FX_BOOL Start(const CFX_DIBSource* pSrc, const CFX_AffineMatrix* pMatrix,
- int flags, const FX_RECT* pClip);
-
- FX_BOOL Continue(IFX_Pause* pPause);
-
- CFX_AffineMatrix* m_pMatrix;
- FX_RECT m_StretchClip;
- int m_ResultLeft;
- int m_ResultTop;
- int m_ResultWidth;
- int m_ResultHeight;
- CFX_AffineMatrix m_dest2stretch;
- CFX_ImageStretcher m_Stretcher;
- CFX_BitmapStorer m_Storer;
- FX_DWORD m_Flags;
- int m_Status;
+class CFX_ImageTransformer {
+ public:
+ CFX_ImageTransformer();
+ ~CFX_ImageTransformer();
+
+ FX_BOOL Start(const CFX_DIBSource* pSrc,
+ const CFX_AffineMatrix* pMatrix,
+ int flags,
+ const FX_RECT* pClip);
+
+ FX_BOOL Continue(IFX_Pause* pPause);
+
+ CFX_AffineMatrix* m_pMatrix;
+ FX_RECT m_StretchClip;
+ int m_ResultLeft;
+ int m_ResultTop;
+ int m_ResultWidth;
+ int m_ResultHeight;
+ CFX_AffineMatrix m_dest2stretch;
+ CFX_ImageStretcher m_Stretcher;
+ CFX_BitmapStorer m_Storer;
+ FX_DWORD m_Flags;
+ int m_Status;
};
-class CFX_ImageRenderer
-{
-public:
- CFX_ImageRenderer();
- ~CFX_ImageRenderer();
-
- FX_BOOL Start(CFX_DIBitmap* pDevice, const CFX_ClipRgn* pClipRgn,
- const CFX_DIBSource* pSource, int bitmap_alpha,
- FX_DWORD mask_color, const CFX_AffineMatrix* pMatrix,
- FX_DWORD dib_flags, FX_BOOL bRgbByteOrder = FALSE,
- int alpha_flag = 0, void* pIccTransform = NULL,
- int blend_type = FXDIB_BLEND_NORMAL);
-
- FX_BOOL Continue(IFX_Pause* pPause);
-
-protected:
- CFX_DIBitmap* m_pDevice;
- const CFX_ClipRgn* m_pClipRgn;
- int m_BitmapAlpha;
- FX_DWORD m_MaskColor;
- CFX_AffineMatrix m_Matrix;
- CFX_ImageTransformer* m_pTransformer;
- CFX_ImageStretcher m_Stretcher;
- CFX_BitmapComposer m_Composer;
- int m_Status;
- FX_RECT m_ClipBox;
- FX_DWORD m_Flags;
- int m_AlphaFlag;
- void* m_pIccTransform;
- FX_BOOL m_bRgbByteOrder;
- int m_BlendType;
+class CFX_ImageRenderer {
+ public:
+ CFX_ImageRenderer();
+ ~CFX_ImageRenderer();
+
+ FX_BOOL Start(CFX_DIBitmap* pDevice,
+ const CFX_ClipRgn* pClipRgn,
+ const CFX_DIBSource* pSource,
+ int bitmap_alpha,
+ FX_DWORD mask_color,
+ const CFX_AffineMatrix* pMatrix,
+ FX_DWORD dib_flags,
+ FX_BOOL bRgbByteOrder = FALSE,
+ int alpha_flag = 0,
+ void* pIccTransform = NULL,
+ int blend_type = FXDIB_BLEND_NORMAL);
+
+ FX_BOOL Continue(IFX_Pause* pPause);
+
+ protected:
+ CFX_DIBitmap* m_pDevice;
+ const CFX_ClipRgn* m_pClipRgn;
+ int m_BitmapAlpha;
+ FX_DWORD m_MaskColor;
+ CFX_AffineMatrix m_Matrix;
+ CFX_ImageTransformer* m_pTransformer;
+ CFX_ImageStretcher m_Stretcher;
+ CFX_BitmapComposer m_Composer;
+ int m_Status;
+ FX_RECT m_ClipBox;
+ FX_DWORD m_Flags;
+ int m_AlphaFlag;
+ void* m_pIccTransform;
+ FX_BOOL m_bRgbByteOrder;
+ int m_BlendType;
};
#endif // CORE_INCLUDE_FXGE_FX_DIB_H_
diff --git a/core/include/fxge/fx_font.h b/core/include/fxge/fx_font.h
index 5797ecb246..aa9286ff3e 100644
--- a/core/include/fxge/fx_font.h
+++ b/core/include/fxge/fx_font.h
@@ -21,402 +21,437 @@ class CFX_FaceCache;
class CFX_FontMapper;
class IFX_SystemFontInfo;
class CFontFileFaceInfo;
-#define FXFONT_FIXED_PITCH 0x01
-#define FXFONT_SERIF 0x02
-#define FXFONT_SYMBOLIC 0x04
-#define FXFONT_SCRIPT 0x08
-#define FXFONT_ITALIC 0x40
-#define FXFONT_BOLD 0x40000
-#define FXFONT_USEEXTERNATTR 0x80000
-#define FXFONT_CIDFONT 0x100000
-#define FXFONT_ANSI_CHARSET 0
-#define FXFONT_DEFAULT_CHARSET 1
-#define FXFONT_SYMBOL_CHARSET 2
-#define FXFONT_SHIFTJIS_CHARSET 128
-#define FXFONT_HANGEUL_CHARSET 129
-#define FXFONT_GB2312_CHARSET 134
-#define FXFONT_CHINESEBIG5_CHARSET 136
-#define FXFONT_THAI_CHARSET 222
-#define FXFONT_EASTEUROPE_CHARSET 238
-#define FXFONT_RUSSIAN_CHARSET 204
-#define FXFONT_GREEK_CHARSET 161
-#define FXFONT_TURKISH_CHARSET 162
-#define FXFONT_HEBREW_CHARSET 177
-#define FXFONT_ARABIC_CHARSET 178
-#define FXFONT_BALTIC_CHARSET 186
-#define FXFONT_FF_FIXEDPITCH 1
-#define FXFONT_FF_ROMAN (1<<4)
-#define FXFONT_FF_SCRIPT (4<<4)
-#define FXFONT_FW_NORMAL 400
-#define FXFONT_FW_BOLD 700
-class CFX_Font
-{
-public:
- CFX_Font();
- ~CFX_Font();
+#define FXFONT_FIXED_PITCH 0x01
+#define FXFONT_SERIF 0x02
+#define FXFONT_SYMBOLIC 0x04
+#define FXFONT_SCRIPT 0x08
+#define FXFONT_ITALIC 0x40
+#define FXFONT_BOLD 0x40000
+#define FXFONT_USEEXTERNATTR 0x80000
+#define FXFONT_CIDFONT 0x100000
+#define FXFONT_ANSI_CHARSET 0
+#define FXFONT_DEFAULT_CHARSET 1
+#define FXFONT_SYMBOL_CHARSET 2
+#define FXFONT_SHIFTJIS_CHARSET 128
+#define FXFONT_HANGEUL_CHARSET 129
+#define FXFONT_GB2312_CHARSET 134
+#define FXFONT_CHINESEBIG5_CHARSET 136
+#define FXFONT_THAI_CHARSET 222
+#define FXFONT_EASTEUROPE_CHARSET 238
+#define FXFONT_RUSSIAN_CHARSET 204
+#define FXFONT_GREEK_CHARSET 161
+#define FXFONT_TURKISH_CHARSET 162
+#define FXFONT_HEBREW_CHARSET 177
+#define FXFONT_ARABIC_CHARSET 178
+#define FXFONT_BALTIC_CHARSET 186
+#define FXFONT_FF_FIXEDPITCH 1
+#define FXFONT_FF_ROMAN (1 << 4)
+#define FXFONT_FF_SCRIPT (4 << 4)
+#define FXFONT_FW_NORMAL 400
+#define FXFONT_FW_BOLD 700
+class CFX_Font {
+ public:
+ CFX_Font();
+ ~CFX_Font();
- FX_BOOL LoadSubst(const CFX_ByteString& face_name, FX_BOOL bTrueType, FX_DWORD flags,
- int weight, int italic_angle, int CharsetCP, FX_BOOL bVertical = FALSE);
+ FX_BOOL LoadSubst(const CFX_ByteString& face_name,
+ FX_BOOL bTrueType,
+ FX_DWORD flags,
+ int weight,
+ int italic_angle,
+ int CharsetCP,
+ FX_BOOL bVertical = FALSE);
- FX_BOOL LoadEmbedded(const uint8_t* data, FX_DWORD size);
+ FX_BOOL LoadEmbedded(const uint8_t* data, FX_DWORD size);
- FX_BOOL LoadFile(IFX_FileRead* pFile);
+ FX_BOOL LoadFile(IFX_FileRead* pFile);
- FXFT_Face GetFace() const
- {
- return m_Face;
- }
+ FXFT_Face GetFace() const { return m_Face; }
+ const CFX_SubstFont* GetSubstFont() const { return m_pSubstFont; }
- const CFX_SubstFont* GetSubstFont() const
- {
- return m_pSubstFont;
- }
+ CFX_PathData* LoadGlyphPath(FX_DWORD glyph_index, int dest_width = 0);
- CFX_PathData* LoadGlyphPath(FX_DWORD glyph_index, int dest_width = 0);
+ int GetGlyphWidth(FX_DWORD glyph_index);
- int GetGlyphWidth(FX_DWORD glyph_index);
+ int GetAscent() const;
- int GetAscent() const;
+ int GetDescent() const;
- int GetDescent() const;
+ FX_BOOL GetGlyphBBox(FX_DWORD glyph_index, FX_RECT& bbox);
- FX_BOOL GetGlyphBBox(FX_DWORD glyph_index, FX_RECT &bbox);
+ FX_BOOL IsItalic();
- FX_BOOL IsItalic();
+ FX_BOOL IsBold();
- FX_BOOL IsBold();
+ FX_BOOL IsFixedWidth();
- FX_BOOL IsFixedWidth();
+ FX_BOOL IsVertical() const { return m_bVertical; }
- FX_BOOL IsVertical() const
- {
- return m_bVertical;
- }
+ CFX_WideString GetPsName() const;
- CFX_WideString GetPsName() const;
+ CFX_ByteString GetFamilyName() const;
+ CFX_ByteString GetFaceName() const;
- CFX_ByteString GetFamilyName() const;
+ FX_BOOL IsTTFont();
- CFX_ByteString GetFaceName() const;
+ FX_BOOL GetBBox(FX_RECT& bbox);
+ int GetHeight();
- FX_BOOL IsTTFont();
+ int GetULPos();
- FX_BOOL GetBBox(FX_RECT &bbox);
+ int GetULthickness();
- int GetHeight();
+ int GetMaxAdvanceWidth();
- int GetULPos();
+ FXFT_Face m_Face;
- int GetULthickness();
+ CFX_SubstFont* m_pSubstFont;
+ FX_BOOL IsEmbedded() { return m_bEmbedded; }
- int GetMaxAdvanceWidth();
+ void AdjustMMParams(int glyph_index, int width, int weight);
+ uint8_t* m_pFontDataAllocation;
+ uint8_t* m_pFontData;
+ uint8_t* m_pGsubData;
+ FX_DWORD m_dwSize;
+ CFX_BinaryBuf m_OtfFontData;
+ void* m_hHandle;
+ void* m_pPlatformFont;
+ void* m_pPlatformFontCollection;
+ void* m_pDwFont;
+ FX_BOOL m_bDwLoaded;
+ void ReleasePlatformResource();
- FXFT_Face m_Face;
+ void DeleteFace();
- CFX_SubstFont* m_pSubstFont;
- FX_BOOL IsEmbedded()
- {
- return m_bEmbedded;
- }
-
- void AdjustMMParams(int glyph_index, int width, int weight);
- uint8_t* m_pFontDataAllocation;
- uint8_t* m_pFontData;
- uint8_t* m_pGsubData;
- FX_DWORD m_dwSize;
- CFX_BinaryBuf m_OtfFontData;
- void* m_hHandle;
- void* m_pPlatformFont;
- void* m_pPlatformFontCollection;
- void* m_pDwFont;
- FX_BOOL m_bDwLoaded;
- void ReleasePlatformResource();
-
- void DeleteFace();
-protected:
-
- FX_BOOL m_bEmbedded;
- FX_BOOL m_bVertical;
- void* m_pOwnedStream;
+ protected:
+ FX_BOOL m_bEmbedded;
+ FX_BOOL m_bVertical;
+ void* m_pOwnedStream;
};
-#define ENCODING_INTERNAL 0
-#define ENCODING_UNICODE 1
-class IFX_FontEncoding
-{
-public:
- virtual ~IFX_FontEncoding() {}
+#define ENCODING_INTERNAL 0
+#define ENCODING_UNICODE 1
+class IFX_FontEncoding {
+ public:
+ virtual ~IFX_FontEncoding() {}
- virtual FX_DWORD GlyphFromCharCode(FX_DWORD charcode) = 0;
+ virtual FX_DWORD GlyphFromCharCode(FX_DWORD charcode) = 0;
- virtual CFX_WideString UnicodeFromCharCode(FX_DWORD charcode) const = 0;
+ virtual CFX_WideString UnicodeFromCharCode(FX_DWORD charcode) const = 0;
- virtual FX_DWORD CharCodeFromUnicode(FX_WCHAR Unicode) const = 0;
+ virtual FX_DWORD CharCodeFromUnicode(FX_WCHAR Unicode) const = 0;
};
IFX_FontEncoding* FXGE_CreateUnicodeEncoding(CFX_Font* pFont);
-#define FXFONT_SUBST_MM 0x01
-#define FXFONT_SUBST_GLYPHPATH 0x04
-#define FXFONT_SUBST_CLEARTYPE 0x08
-#define FXFONT_SUBST_TRANSFORM 0x10
-#define FXFONT_SUBST_NONSYMBOL 0x20
-#define FXFONT_SUBST_EXACT 0x40
-#define FXFONT_SUBST_STANDARD 0x80
-class CFX_SubstFont
-{
-public:
-
- CFX_SubstFont();
+#define FXFONT_SUBST_MM 0x01
+#define FXFONT_SUBST_GLYPHPATH 0x04
+#define FXFONT_SUBST_CLEARTYPE 0x08
+#define FXFONT_SUBST_TRANSFORM 0x10
+#define FXFONT_SUBST_NONSYMBOL 0x20
+#define FXFONT_SUBST_EXACT 0x40
+#define FXFONT_SUBST_STANDARD 0x80
+class CFX_SubstFont {
+ public:
+ CFX_SubstFont();
- void* m_ExtHandle;
+ void* m_ExtHandle;
- CFX_ByteString m_Family;
+ CFX_ByteString m_Family;
- int m_Charset;
+ int m_Charset;
- FX_DWORD m_SubstFlags;
+ FX_DWORD m_SubstFlags;
- int m_Weight;
+ int m_Weight;
- int m_ItalicAngle;
+ int m_ItalicAngle;
- FX_BOOL m_bSubstOfCJK;
+ FX_BOOL m_bSubstOfCJK;
- int m_WeightCJK;
+ int m_WeightCJK;
- FX_BOOL m_bItlicCJK;
+ FX_BOOL m_bItlicCJK;
};
-#define FX_FONT_FLAG_SERIF 0x01
-#define FX_FONT_FLAG_FIXEDPITCH 0x02
-#define FX_FONT_FLAG_ITALIC 0x04
-#define FX_FONT_FLAG_BOLD 0x08
-#define FX_FONT_FLAG_SYMBOLIC_SYMBOL 0x10
-#define FX_FONT_FLAG_SYMBOLIC_DINGBATS 0x20
-#define FX_FONT_FLAG_MULTIPLEMASTER 0x40
+#define FX_FONT_FLAG_SERIF 0x01
+#define FX_FONT_FLAG_FIXEDPITCH 0x02
+#define FX_FONT_FLAG_ITALIC 0x04
+#define FX_FONT_FLAG_BOLD 0x08
+#define FX_FONT_FLAG_SYMBOLIC_SYMBOL 0x10
+#define FX_FONT_FLAG_SYMBOLIC_DINGBATS 0x20
+#define FX_FONT_FLAG_MULTIPLEMASTER 0x40
typedef struct {
- const uint8_t* m_pFontData;
- FX_DWORD m_dwSize;
+ const uint8_t* m_pFontData;
+ FX_DWORD m_dwSize;
} FoxitFonts;
-class CFX_FontMgr
-{
-public:
- CFX_FontMgr();
- ~CFX_FontMgr();
- void InitFTLibrary();
- FXFT_Face GetCachedFace(const CFX_ByteString& face_name,
- int weight, FX_BOOL bItalic, uint8_t*& pFontData);
- FXFT_Face AddCachedFace(const CFX_ByteString& face_name,
- int weight, FX_BOOL bItalic, uint8_t* pData, FX_DWORD size, int face_index);
- FXFT_Face GetCachedTTCFace(int ttc_size, FX_DWORD checksum,
- int font_offset, uint8_t*& pFontData);
- FXFT_Face AddCachedTTCFace(int ttc_size, FX_DWORD checksum,
- uint8_t* pData, FX_DWORD size, int font_offset);
- FXFT_Face GetFileFace(const FX_CHAR* filename, int face_index);
- FXFT_Face GetFixedFace(const uint8_t* pData, FX_DWORD size, int face_index);
- void ReleaseFace(FXFT_Face face);
- void SetSystemFontInfo(IFX_SystemFontInfo* pFontInfo);
- FXFT_Face FindSubstFont(const CFX_ByteString& face_name, FX_BOOL bTrueType, FX_DWORD flags,
- int weight, int italic_angle, int CharsetCP, CFX_SubstFont* pSubstFont);
-
- void FreeCache();
-
- FX_BOOL GetStandardFont(const uint8_t*& pFontData, FX_DWORD& size, int index);
- CFX_FontMapper* m_pBuiltinMapper;
- CFX_MapByteStringToPtr m_FaceMap;
- FXFT_Library m_FTLibrary;
- FoxitFonts m_ExternalFonts[16];
+class CFX_FontMgr {
+ public:
+ CFX_FontMgr();
+ ~CFX_FontMgr();
+ void InitFTLibrary();
+ FXFT_Face GetCachedFace(const CFX_ByteString& face_name,
+ int weight,
+ FX_BOOL bItalic,
+ uint8_t*& pFontData);
+ FXFT_Face AddCachedFace(const CFX_ByteString& face_name,
+ int weight,
+ FX_BOOL bItalic,
+ uint8_t* pData,
+ FX_DWORD size,
+ int face_index);
+ FXFT_Face GetCachedTTCFace(int ttc_size,
+ FX_DWORD checksum,
+ int font_offset,
+ uint8_t*& pFontData);
+ FXFT_Face AddCachedTTCFace(int ttc_size,
+ FX_DWORD checksum,
+ uint8_t* pData,
+ FX_DWORD size,
+ int font_offset);
+ FXFT_Face GetFileFace(const FX_CHAR* filename, int face_index);
+ FXFT_Face GetFixedFace(const uint8_t* pData, FX_DWORD size, int face_index);
+ void ReleaseFace(FXFT_Face face);
+ void SetSystemFontInfo(IFX_SystemFontInfo* pFontInfo);
+ FXFT_Face FindSubstFont(const CFX_ByteString& face_name,
+ FX_BOOL bTrueType,
+ FX_DWORD flags,
+ int weight,
+ int italic_angle,
+ int CharsetCP,
+ CFX_SubstFont* pSubstFont);
+
+ void FreeCache();
+
+ FX_BOOL GetStandardFont(const uint8_t*& pFontData, FX_DWORD& size, int index);
+ CFX_FontMapper* m_pBuiltinMapper;
+ CFX_MapByteStringToPtr m_FaceMap;
+ FXFT_Library m_FTLibrary;
+ FoxitFonts m_ExternalFonts[16];
};
-class IFX_FontEnumerator
-{
-public:
- virtual ~IFX_FontEnumerator() { }
+class IFX_FontEnumerator {
+ public:
+ virtual ~IFX_FontEnumerator() {}
- virtual void HitFont() = 0;
+ virtual void HitFont() = 0;
- virtual void Finish() = 0;
+ virtual void Finish() = 0;
};
-class IFX_AdditionalFontEnum
-{
-public:
- virtual ~IFX_AdditionalFontEnum() { }
- virtual int CountFiles() = 0;
- virtual IFX_FileStream* GetFontFile(int index) = 0;
+class IFX_AdditionalFontEnum {
+ public:
+ virtual ~IFX_AdditionalFontEnum() {}
+ virtual int CountFiles() = 0;
+ virtual IFX_FileStream* GetFontFile(int index) = 0;
};
-class CFX_FontMapper
-{
-public:
- CFX_FontMapper(CFX_FontMgr* mgr);
- ~CFX_FontMapper();
-
- void SetSystemFontInfo(IFX_SystemFontInfo* pFontInfo);
- IFX_SystemFontInfo* GetSystemFontInfo()
- {
- return m_pFontInfo;
- }
- void AddInstalledFont(const CFX_ByteString& name, int charset);
- void LoadInstalledFonts();
- CFX_ByteStringArray m_InstalledTTFonts;
- void SetFontEnumerator(IFX_FontEnumerator* pFontEnumerator)
- {
- m_pFontEnumerator = pFontEnumerator;
- }
- IFX_FontEnumerator* GetFontEnumerator() const
- {
- return m_pFontEnumerator;
- }
- FXFT_Face FindSubstFont(const CFX_ByteString& face_name, FX_BOOL bTrueType, FX_DWORD flags,
- int weight, int italic_angle, int CharsetCP, CFX_SubstFont* pSubstFont);
-private:
- CFX_ByteString GetPSNameFromTT(void* hFont);
- CFX_ByteString MatchInstalledFonts(const CFX_ByteString& norm_name);
- FXFT_Face UseInternalSubst(CFX_SubstFont* pSubstFont, int iBaseFont, int italic_angle, int weight, int picthfamily);
-
- FX_BOOL m_bListLoaded;
- FXFT_Face m_MMFaces[2];
- CFX_ByteString m_LastFamily;
- CFX_DWordArray m_CharsetArray;
- CFX_ByteStringArray m_FaceArray;
- IFX_SystemFontInfo* m_pFontInfo;
- FXFT_Face m_FoxitFaces[14];
- IFX_FontEnumerator* m_pFontEnumerator;
- CFX_FontMgr* const m_pFontMgr;
+class CFX_FontMapper {
+ public:
+ CFX_FontMapper(CFX_FontMgr* mgr);
+ ~CFX_FontMapper();
+
+ void SetSystemFontInfo(IFX_SystemFontInfo* pFontInfo);
+ IFX_SystemFontInfo* GetSystemFontInfo() { return m_pFontInfo; }
+ void AddInstalledFont(const CFX_ByteString& name, int charset);
+ void LoadInstalledFonts();
+ CFX_ByteStringArray m_InstalledTTFonts;
+ void SetFontEnumerator(IFX_FontEnumerator* pFontEnumerator) {
+ m_pFontEnumerator = pFontEnumerator;
+ }
+ IFX_FontEnumerator* GetFontEnumerator() const { return m_pFontEnumerator; }
+ FXFT_Face FindSubstFont(const CFX_ByteString& face_name,
+ FX_BOOL bTrueType,
+ FX_DWORD flags,
+ int weight,
+ int italic_angle,
+ int CharsetCP,
+ CFX_SubstFont* pSubstFont);
+
+ private:
+ CFX_ByteString GetPSNameFromTT(void* hFont);
+ CFX_ByteString MatchInstalledFonts(const CFX_ByteString& norm_name);
+ FXFT_Face UseInternalSubst(CFX_SubstFont* pSubstFont,
+ int iBaseFont,
+ int italic_angle,
+ int weight,
+ int picthfamily);
+
+ FX_BOOL m_bListLoaded;
+ FXFT_Face m_MMFaces[2];
+ CFX_ByteString m_LastFamily;
+ CFX_DWordArray m_CharsetArray;
+ CFX_ByteStringArray m_FaceArray;
+ IFX_SystemFontInfo* m_pFontInfo;
+ FXFT_Face m_FoxitFaces[14];
+ IFX_FontEnumerator* m_pFontEnumerator;
+ CFX_FontMgr* const m_pFontMgr;
};
-class IFX_SystemFontInfo
-{
-public:
- static IFX_SystemFontInfo* CreateDefault();
- virtual void Release() = 0;
-
- virtual FX_BOOL EnumFontList(CFX_FontMapper* pMapper) = 0;
- virtual void* MapFont(int weight, FX_BOOL bItalic, int charset, int pitch_family, const FX_CHAR* face, int& iExact) = 0;
- virtual void* GetFont(const FX_CHAR* face) = 0;
- virtual FX_DWORD GetFontData(void* hFont, FX_DWORD table, uint8_t* buffer, FX_DWORD size) = 0;
- virtual FX_BOOL GetFaceName(void* hFont, CFX_ByteString& name) = 0;
- virtual FX_BOOL GetFontCharset(void* hFont, int& charset) = 0;
- virtual int GetFaceIndex(void* hFont)
- {
- return 0;
- }
- virtual void DeleteFont(void* hFont) = 0;
- virtual void* RetainFont(void* hFont)
- {
- return NULL;
- }
-protected:
- ~IFX_SystemFontInfo() { }
+class IFX_SystemFontInfo {
+ public:
+ static IFX_SystemFontInfo* CreateDefault();
+ virtual void Release() = 0;
+
+ virtual FX_BOOL EnumFontList(CFX_FontMapper* pMapper) = 0;
+ virtual void* MapFont(int weight,
+ FX_BOOL bItalic,
+ int charset,
+ int pitch_family,
+ const FX_CHAR* face,
+ int& iExact) = 0;
+ virtual void* GetFont(const FX_CHAR* face) = 0;
+ virtual FX_DWORD GetFontData(void* hFont,
+ FX_DWORD table,
+ uint8_t* buffer,
+ FX_DWORD size) = 0;
+ virtual FX_BOOL GetFaceName(void* hFont, CFX_ByteString& name) = 0;
+ virtual FX_BOOL GetFontCharset(void* hFont, int& charset) = 0;
+ virtual int GetFaceIndex(void* hFont) { return 0; }
+ virtual void DeleteFont(void* hFont) = 0;
+ virtual void* RetainFont(void* hFont) { return NULL; }
+
+ protected:
+ ~IFX_SystemFontInfo() {}
};
-class CFX_FolderFontInfo : public IFX_SystemFontInfo
-{
-public:
- CFX_FolderFontInfo();
- virtual ~CFX_FolderFontInfo();
- void AddPath(const CFX_ByteStringC& path);
-
- // IFX_SytemFontInfo:
- void Release() override;
- FX_BOOL EnumFontList(CFX_FontMapper* pMapper) override;
- void* MapFont(int weight, FX_BOOL bItalic, int charset, int pitch_family,
- const FX_CHAR* face, int& bExact) override;
- void* GetFont(const FX_CHAR* face) override;
- FX_DWORD GetFontData(void* hFont, FX_DWORD table,
- uint8_t* buffer, FX_DWORD size) override;
- void DeleteFont(void* hFont) override;
- FX_BOOL GetFaceName(void* hFont, CFX_ByteString& name) override;
- FX_BOOL GetFontCharset(void* hFont, int& charset) override;
-
-protected:
- CFX_MapByteStringToPtr m_FontList;
- CFX_ByteStringArray m_PathList;
- CFX_FontMapper* m_pMapper;
- void ScanPath(CFX_ByteString& path);
- void ScanFile(CFX_ByteString& path);
- void ReportFace(CFX_ByteString& path, FXSYS_FILE* pFile, FX_DWORD filesize, FX_DWORD offset);
+class CFX_FolderFontInfo : public IFX_SystemFontInfo {
+ public:
+ CFX_FolderFontInfo();
+ virtual ~CFX_FolderFontInfo();
+ void AddPath(const CFX_ByteStringC& path);
+
+ // IFX_SytemFontInfo:
+ void Release() override;
+ FX_BOOL EnumFontList(CFX_FontMapper* pMapper) override;
+ void* MapFont(int weight,
+ FX_BOOL bItalic,
+ int charset,
+ int pitch_family,
+ const FX_CHAR* face,
+ int& bExact) override;
+ void* GetFont(const FX_CHAR* face) override;
+ FX_DWORD GetFontData(void* hFont,
+ FX_DWORD table,
+ uint8_t* buffer,
+ FX_DWORD size) override;
+ void DeleteFont(void* hFont) override;
+ FX_BOOL GetFaceName(void* hFont, CFX_ByteString& name) override;
+ FX_BOOL GetFontCharset(void* hFont, int& charset) override;
+
+ protected:
+ CFX_MapByteStringToPtr m_FontList;
+ CFX_ByteStringArray m_PathList;
+ CFX_FontMapper* m_pMapper;
+ void ScanPath(CFX_ByteString& path);
+ void ScanFile(CFX_ByteString& path);
+ void ReportFace(CFX_ByteString& path,
+ FXSYS_FILE* pFile,
+ FX_DWORD filesize,
+ FX_DWORD offset);
};
-class CFX_CountedFaceCache
-{
-public:
- CFX_FaceCache* m_Obj;
- FX_DWORD m_nCount;
+class CFX_CountedFaceCache {
+ public:
+ CFX_FaceCache* m_Obj;
+ FX_DWORD m_nCount;
};
-class CFX_FontCache
-{
-public:
- ~CFX_FontCache();
- CFX_FaceCache* GetCachedFace(CFX_Font* pFont);
- void ReleaseCachedFace(CFX_Font* pFont);
- void FreeCache(FX_BOOL bRelease = FALSE);
-
-private:
- using CFX_FTCacheMap = std::map<FXFT_Face, CFX_CountedFaceCache*>;
- CFX_FTCacheMap m_FTFaceMap;
- CFX_FTCacheMap m_ExtFaceMap;
+class CFX_FontCache {
+ public:
+ ~CFX_FontCache();
+ CFX_FaceCache* GetCachedFace(CFX_Font* pFont);
+ void ReleaseCachedFace(CFX_Font* pFont);
+ void FreeCache(FX_BOOL bRelease = FALSE);
+
+ private:
+ using CFX_FTCacheMap = std::map<FXFT_Face, CFX_CountedFaceCache*>;
+ CFX_FTCacheMap m_FTFaceMap;
+ CFX_FTCacheMap m_ExtFaceMap;
};
-class CFX_AutoFontCache
-{
-public:
- CFX_AutoFontCache(CFX_FontCache* pFontCache, CFX_Font* pFont)
- : m_pFontCache(pFontCache)
- , m_pFont(pFont)
- {
- }
- ~CFX_AutoFontCache()
- {
- m_pFontCache->ReleaseCachedFace(m_pFont);
- }
- CFX_FontCache* m_pFontCache;
- CFX_Font* m_pFont;
+class CFX_AutoFontCache {
+ public:
+ CFX_AutoFontCache(CFX_FontCache* pFontCache, CFX_Font* pFont)
+ : m_pFontCache(pFontCache), m_pFont(pFont) {}
+ ~CFX_AutoFontCache() { m_pFontCache->ReleaseCachedFace(m_pFont); }
+ CFX_FontCache* m_pFontCache;
+ CFX_Font* m_pFont;
};
-#define FX_FONTCACHE_DEFINE(pFontCache, pFont) CFX_AutoFontCache autoFontCache((pFontCache), (pFont))
-class CFX_GlyphBitmap
-{
-public:
- int m_Top;
- int m_Left;
- CFX_DIBitmap m_Bitmap;
+#define FX_FONTCACHE_DEFINE(pFontCache, pFont) \
+ CFX_AutoFontCache autoFontCache((pFontCache), (pFont))
+class CFX_GlyphBitmap {
+ public:
+ int m_Top;
+ int m_Left;
+ CFX_DIBitmap m_Bitmap;
};
-class CFX_FaceCache
-{
-public:
- ~CFX_FaceCache();
- const CFX_GlyphBitmap* LoadGlyphBitmap(CFX_Font* pFont, FX_DWORD glyph_index, FX_BOOL bFontStyle, const CFX_AffineMatrix* pMatrix,
- int dest_width, int anti_alias, int& text_flags);
- const CFX_PathData* LoadGlyphPath(CFX_Font* pFont, FX_DWORD glyph_index, int dest_width);
-
-
- CFX_FaceCache(FXFT_Face face);
-private:
- FXFT_Face m_Face;
- CFX_GlyphBitmap* RenderGlyph(CFX_Font* pFont, FX_DWORD glyph_index, FX_BOOL bFontStyle,
- const CFX_AffineMatrix* pMatrix, int dest_width, int anti_alias);
- CFX_GlyphBitmap* RenderGlyph_Nativetext(CFX_Font* pFont, FX_DWORD glyph_index,
- const CFX_AffineMatrix* pMatrix, int dest_width, int anti_alias);
- CFX_GlyphBitmap* LookUpGlyphBitmap(CFX_Font* pFont, const CFX_AffineMatrix* pMatrix, CFX_ByteStringC& FaceGlyphsKey,
- FX_DWORD glyph_index, FX_BOOL bFontStyle, int dest_width, int anti_alias);
- CFX_MapByteStringToPtr m_SizeMap;
- CFX_MapPtrToPtr m_PathMap;
- CFX_DIBitmap* m_pBitmap;
-
- void InitPlatform();
- void DestroyPlatform();
+class CFX_FaceCache {
+ public:
+ ~CFX_FaceCache();
+ const CFX_GlyphBitmap* LoadGlyphBitmap(CFX_Font* pFont,
+ FX_DWORD glyph_index,
+ FX_BOOL bFontStyle,
+ const CFX_AffineMatrix* pMatrix,
+ int dest_width,
+ int anti_alias,
+ int& text_flags);
+ const CFX_PathData* LoadGlyphPath(CFX_Font* pFont,
+ FX_DWORD glyph_index,
+ int dest_width);
+
+ CFX_FaceCache(FXFT_Face face);
+
+ private:
+ FXFT_Face m_Face;
+ CFX_GlyphBitmap* RenderGlyph(CFX_Font* pFont,
+ FX_DWORD glyph_index,
+ FX_BOOL bFontStyle,
+ const CFX_AffineMatrix* pMatrix,
+ int dest_width,
+ int anti_alias);
+ CFX_GlyphBitmap* RenderGlyph_Nativetext(CFX_Font* pFont,
+ FX_DWORD glyph_index,
+ const CFX_AffineMatrix* pMatrix,
+ int dest_width,
+ int anti_alias);
+ CFX_GlyphBitmap* LookUpGlyphBitmap(CFX_Font* pFont,
+ const CFX_AffineMatrix* pMatrix,
+ CFX_ByteStringC& FaceGlyphsKey,
+ FX_DWORD glyph_index,
+ FX_BOOL bFontStyle,
+ int dest_width,
+ int anti_alias);
+ CFX_MapByteStringToPtr m_SizeMap;
+ CFX_MapPtrToPtr m_PathMap;
+ CFX_DIBitmap* m_pBitmap;
+
+ void InitPlatform();
+ void DestroyPlatform();
};
typedef struct {
- const CFX_GlyphBitmap* m_pGlyph;
- int m_OriginX, m_OriginY;
- FX_FLOAT m_fOriginX, m_fOriginY;
+ const CFX_GlyphBitmap* m_pGlyph;
+ int m_OriginX, m_OriginY;
+ FX_FLOAT m_fOriginX, m_fOriginY;
} FXTEXT_GLYPHPOS;
-FX_RECT FXGE_GetGlyphsBBox(FXTEXT_GLYPHPOS* pGlyphAndPos, int nChars, int anti_alias, FX_FLOAT retinaScaleX = 1.0f, FX_FLOAT retinaScaleY = 1.0f);
-FX_BOOL OutputGlyph(void* dib, int x, int y, CFX_Font* pFont, double font_size,
- CFX_AffineMatrix* pMatrix, unsigned long glyph_index, unsigned long argb);
-FX_BOOL OutputText(void* dib, int x, int y, CFX_Font* pFont, double font_size,
- CFX_AffineMatrix* pText_matrix, unsigned short const* text, unsigned long argb);
-class IFX_GSUBTable
-{
-public:
- static IFX_GSUBTable* Create(CFX_Font* pFont);
- virtual ~IFX_GSUBTable() { }
- virtual FX_BOOL GetVerticalGlyph(FX_DWORD glyphnum, FX_DWORD* vglyphnum) = 0;
+FX_RECT FXGE_GetGlyphsBBox(FXTEXT_GLYPHPOS* pGlyphAndPos,
+ int nChars,
+ int anti_alias,
+ FX_FLOAT retinaScaleX = 1.0f,
+ FX_FLOAT retinaScaleY = 1.0f);
+FX_BOOL OutputGlyph(void* dib,
+ int x,
+ int y,
+ CFX_Font* pFont,
+ double font_size,
+ CFX_AffineMatrix* pMatrix,
+ unsigned long glyph_index,
+ unsigned long argb);
+FX_BOOL OutputText(void* dib,
+ int x,
+ int y,
+ CFX_Font* pFont,
+ double font_size,
+ CFX_AffineMatrix* pText_matrix,
+ unsigned short const* text,
+ unsigned long argb);
+class IFX_GSUBTable {
+ public:
+ static IFX_GSUBTable* Create(CFX_Font* pFont);
+ virtual ~IFX_GSUBTable() {}
+ virtual FX_BOOL GetVerticalGlyph(FX_DWORD glyphnum, FX_DWORD* vglyphnum) = 0;
};
#endif // CORE_INCLUDE_FXGE_FX_FONT_H_
diff --git a/core/include/fxge/fx_freetype.h b/core/include/fxge/fx_freetype.h
index 77f30d51a4..c7c8295961 100644
--- a/core/include/fxge/fx_freetype.h
+++ b/core/include/fxge/fx_freetype.h
@@ -30,7 +30,8 @@ extern "C" {
#define FXFT_ENCODING_JOHAB FT_ENCODING_JOHAB
#define FXFT_ENCODING_WANSUNG FT_ENCODING_WANSUNG
#define FXFT_LOAD_NO_SCALE FT_LOAD_NO_SCALE
-#define FXFT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH
+#define FXFT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH \
+ FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH
#define FXFT_RENDER_MODE_LCD FT_RENDER_MODE_LCD
#define FXFT_RENDER_MODE_MONO FT_RENDER_MODE_MONO
#define FXFT_RENDER_MODE_NORMAL FT_RENDER_MODE_NORMAL
@@ -41,57 +42,73 @@ extern "C" {
#define FXFT_STYLE_FLAG_ITALIC FT_STYLE_FLAG_ITALIC
#define FXFT_STYLE_FLAG_BOLD FT_STYLE_FLAG_BOLD
#define FXFT_FACE_FLAG_SFNT FT_FACE_FLAG_SFNT
-#define FXFT_FACE_FLAG_TRICKY ( 1L << 13 )
-typedef FT_MM_Var* FXFT_MM_Var;
-typedef FT_Bitmap* FXFT_Bitmap;
-#define FXFT_Matrix FT_Matrix
-#define FXFT_Vector FT_Vector
+#define FXFT_FACE_FLAG_TRICKY (1L << 13)
+typedef FT_MM_Var* FXFT_MM_Var;
+typedef FT_Bitmap* FXFT_Bitmap;
+#define FXFT_Matrix FT_Matrix
+#define FXFT_Vector FT_Vector
#define FXFT_Outline_Funcs FT_Outline_Funcs
-typedef FT_Open_Args FXFT_Open_Args;
-typedef FT_StreamRec FXFT_StreamRec;
-typedef FT_StreamRec* FXFT_Stream;
-typedef FT_BBox FXFT_BBox;
-typedef FT_Glyph FXFT_Glyph;
-typedef FT_CharMap FXFT_CharMap;
-#define FXFT_GLYPH_BBOX_PIXELS FT_GLYPH_BBOX_PIXELS
+typedef FT_Open_Args FXFT_Open_Args;
+typedef FT_StreamRec FXFT_StreamRec;
+typedef FT_StreamRec* FXFT_Stream;
+typedef FT_BBox FXFT_BBox;
+typedef FT_Glyph FXFT_Glyph;
+typedef FT_CharMap FXFT_CharMap;
+#define FXFT_GLYPH_BBOX_PIXELS FT_GLYPH_BBOX_PIXELS
#define FXFT_Open_Face(library, args, index, face) \
- FT_Open_Face((FT_Library)(library), args, index, (FT_Face*)(face))
+ FT_Open_Face((FT_Library)(library), args, index, (FT_Face*)(face))
#define FXFT_Done_Face(face) FT_Done_Face((FT_Face)(face))
#define FXFT_Done_FreeType(library) FT_Done_FreeType((FT_Library)(library))
#define FXFT_Init_FreeType(library) FT_Init_FreeType((FT_Library*)(library))
#define FXFT_New_Memory_Face(library, base, size, index, face) \
- FT_New_Memory_Face((FT_Library)(library), base, size, index, (FT_Face*)(face))
+ FT_New_Memory_Face((FT_Library)(library), base, size, index, (FT_Face*)(face))
#define FXFT_New_Face(library, filename, index, face) \
- FT_New_Face((FT_Library)(library), filename, index, (FT_Face*)(face))
+ FT_New_Face((FT_Library)(library), filename, index, (FT_Face*)(face))
#define FXFT_Get_Face_FreeType(face) ((FT_Face)face)->driver->root.library
-#define FXFT_Select_Charmap(face, encoding) FT_Select_Charmap((FT_Face)face, (FT_Encoding)encoding)
-#define FXFT_Set_Charmap(face, charmap) FT_Set_Charmap((FT_Face)face, (FT_CharMap)charmap)
-#define FXFT_Load_Glyph(face, glyph_index, flags) FT_Load_Glyph((FT_Face)face, glyph_index, flags)
+#define FXFT_Select_Charmap(face, encoding) \
+ FT_Select_Charmap((FT_Face)face, (FT_Encoding)encoding)
+#define FXFT_Set_Charmap(face, charmap) \
+ FT_Set_Charmap((FT_Face)face, (FT_CharMap)charmap)
+#define FXFT_Load_Glyph(face, glyph_index, flags) \
+ FT_Load_Glyph((FT_Face)face, glyph_index, flags)
#define FXFT_Get_Char_Index(face, code) FT_Get_Char_Index((FT_Face)face, code)
-#define FXFT_Get_Glyph_Name(face, index, buffer, size) FT_Get_Glyph_Name((FT_Face)face, index, buffer, size)
+#define FXFT_Get_Glyph_Name(face, index, buffer, size) \
+ FT_Get_Glyph_Name((FT_Face)face, index, buffer, size)
#define FXFT_Get_Name_Index(face, name) FT_Get_Name_Index((FT_Face)face, name)
-#define FXFT_Has_Glyph_Names(face) (((FT_Face)face)->face_flags & FT_FACE_FLAG_GLYPH_NAMES)
+#define FXFT_Has_Glyph_Names(face) \
+ (((FT_Face)face)->face_flags & FT_FACE_FLAG_GLYPH_NAMES)
#define FXFT_Get_Postscript_Name(face) FT_Get_Postscript_Name((FT_Face)face)
#define FXFT_Load_Sfnt_Table(face, tag, offset, buffer, length) \
- FT_Load_Sfnt_Table((FT_Face)face, tag, offset, buffer, length)
-#define FXFT_Get_First_Char(face, glyph_index) FT_Get_First_Char((FT_Face)face, glyph_index)
-#define FXFT_Get_Next_Char(face, code, glyph_index) FT_Get_Next_Char((FT_Face)face, code, glyph_index)
-#define FXFT_Clear_Face_External_Stream(face) (((FT_Face)face)->face_flags&=~FT_FACE_FLAG_EXTERNAL_STREAM)
-#define FXFT_Get_Face_External_Stream(face) (((FT_Face)face)->face_flags&FT_FACE_FLAG_EXTERNAL_STREAM)
-#define FXFT_Is_Face_TT_OT(face) (((FT_Face)face)->face_flags&FT_FACE_FLAG_SFNT)
-#define FXFT_Is_Face_Tricky(face) (((FT_Face)face)->face_flags&FXFT_FACE_FLAG_TRICKY)
-#define FXFT_Is_Face_fixedwidth(face) (((FT_Face)face)->face_flags & FT_FACE_FLAG_FIXED_WIDTH)
+ FT_Load_Sfnt_Table((FT_Face)face, tag, offset, buffer, length)
+#define FXFT_Get_First_Char(face, glyph_index) \
+ FT_Get_First_Char((FT_Face)face, glyph_index)
+#define FXFT_Get_Next_Char(face, code, glyph_index) \
+ FT_Get_Next_Char((FT_Face)face, code, glyph_index)
+#define FXFT_Clear_Face_External_Stream(face) \
+ (((FT_Face)face)->face_flags &= ~FT_FACE_FLAG_EXTERNAL_STREAM)
+#define FXFT_Get_Face_External_Stream(face) \
+ (((FT_Face)face)->face_flags & FT_FACE_FLAG_EXTERNAL_STREAM)
+#define FXFT_Is_Face_TT_OT(face) \
+ (((FT_Face)face)->face_flags & FT_FACE_FLAG_SFNT)
+#define FXFT_Is_Face_Tricky(face) \
+ (((FT_Face)face)->face_flags & FXFT_FACE_FLAG_TRICKY)
+#define FXFT_Is_Face_fixedwidth(face) \
+ (((FT_Face)face)->face_flags & FT_FACE_FLAG_FIXED_WIDTH)
#define FXFT_Get_Face_Stream_Base(face) ((FT_Face)face)->stream->base
#define FXFT_Get_Face_Stream_Size(face) ((FT_Face)face)->stream->size
#define FXFT_Get_Face_Family_Name(face) ((FT_Face)face)->family_name
#define FXFT_Get_Face_Style_Name(face) ((FT_Face)face)->style_name
#define FXFT_Get_Face_Numfaces(face) ((FT_Face)face)->num_faces
#define FXFT_Get_Face_Faceindex(face) ((FT_Face)face)->face_index
-#define FXFT_Is_Face_Italic(face) (((FT_Face)face)->style_flags&FT_STYLE_FLAG_ITALIC)
-#define FXFT_Is_Face_Bold(face) (((FT_Face)face)->style_flags&FT_STYLE_FLAG_BOLD)
+#define FXFT_Is_Face_Italic(face) \
+ (((FT_Face)face)->style_flags & FT_STYLE_FLAG_ITALIC)
+#define FXFT_Is_Face_Bold(face) \
+ (((FT_Face)face)->style_flags & FT_STYLE_FLAG_BOLD)
#define FXFT_Get_Face_Charmaps(face) ((FT_Face)face)->charmaps
-#define FXFT_Get_Glyph_HoriBearingX(face) ((FT_Face)face)->glyph->metrics.horiBearingX
-#define FXFT_Get_Glyph_HoriBearingY(face) ((FT_Face)face)->glyph->metrics.horiBearingY
+#define FXFT_Get_Glyph_HoriBearingX(face) \
+ ((FT_Face)face)->glyph->metrics.horiBearingX
+#define FXFT_Get_Glyph_HoriBearingY(face) \
+ ((FT_Face)face)->glyph->metrics.horiBearingY
#define FXFT_Get_Glyph_Width(face) ((FT_Face)face)->glyph->metrics.width
#define FXFT_Get_Glyph_Height(face) ((FT_Face)face)->glyph->metrics.height
#define FXFT_Get_Face_CharmapCount(face) ((FT_Face)face)->num_charmaps
@@ -105,23 +122,30 @@ typedef FT_CharMap FXFT_CharMap;
#define FXFT_Get_Face_yMin(face) ((FT_Face)face)->bbox.yMin
#define FXFT_Get_Face_yMax(face) ((FT_Face)face)->bbox.yMax
#define FXFT_Get_Face_Height(face) ((FT_Face)face)->height
-#define FXFT_Get_Face_UnderLineThickness(face) ((FT_Face)face)->underline_thickness
-#define FXFT_Get_Face_UnderLinePosition(face) ((FT_Face)face)->underline_position
+#define FXFT_Get_Face_UnderLineThickness(face) \
+ ((FT_Face)face)->underline_thickness
+#define FXFT_Get_Face_UnderLinePosition(face) \
+ ((FT_Face)face)->underline_position
#define FXFT_Get_Face_MaxAdvanceWidth(face) ((FT_Face)face)->max_advance_width
#define FXFT_Get_Face_Ascender(face) ((FT_Face)face)->ascender
#define FXFT_Get_Face_Descender(face) ((FT_Face)face)->descender
-#define FXFT_Get_Glyph_HoriAdvance(face) ((FT_Face)face)->glyph->metrics.horiAdvance
+#define FXFT_Get_Glyph_HoriAdvance(face) \
+ ((FT_Face)face)->glyph->metrics.horiAdvance
#define FXFT_Get_MM_Axis(var, index) &((FT_MM_Var*)var)->axis[index]
#define FXFT_Get_MM_Axis_Min(axis) ((FT_Var_Axis*)axis)->minimum
#define FXFT_Get_MM_Axis_Max(axis) ((FT_Var_Axis*)axis)->maximum
#define FXFT_Get_MM_Axis_Def(axis) ((FT_Var_Axis*)axis)->def
-#define FXFT_Alloc(library, size) ((FT_Library)library)->memory->alloc(((FT_Library)library)->memory, size)
-#define FXFT_Free(face, p) ((FT_Face)face)->memory->free(((FT_Face)face)->memory, p)
+#define FXFT_Alloc(library, size) \
+ ((FT_Library)library)->memory->alloc(((FT_Library)library)->memory, size)
+#define FXFT_Free(face, p) \
+ ((FT_Face)face)->memory->free(((FT_Face)face)->memory, p)
#define FXFT_Get_Glyph_Outline(face) &((FT_Face)face)->glyph->outline
-#define FXFT_Get_Outline_Bbox(outline, cbox) FT_Outline_Get_CBox(outline, cbox)
-#define FXFT_Render_Glyph(face, mode) FT_Render_Glyph(((FT_Face)face)->glyph, (enum FT_Render_Mode_)mode)
+#define FXFT_Get_Outline_Bbox(outline, cbox) FT_Outline_Get_CBox(outline, cbox)
+#define FXFT_Render_Glyph(face, mode) \
+ FT_Render_Glyph(((FT_Face)face)->glyph, (enum FT_Render_Mode_)mode)
#define FXFT_Get_MM_Var(face, p) FT_Get_MM_Var((FT_Face)face, p)
-#define FXFT_Set_MM_Design_Coordinates(face, n, p) FT_Set_MM_Design_Coordinates((FT_Face)face, n, p)
+#define FXFT_Set_MM_Design_Coordinates(face, n, p) \
+ FT_Set_MM_Design_Coordinates((FT_Face)face, n, p)
#define FXFT_Set_Pixel_Sizes(face, w, h) FT_Set_Pixel_Sizes((FT_Face)face, w, h)
#define FXFT_Set_Transform(face, m, d) FT_Set_Transform((FT_Face)face, m, d)
#define FXFT_Outline_Embolden(outline, s) FT_Outline_Embolden(outline, s)
@@ -133,13 +157,19 @@ typedef FT_CharMap FXFT_CharMap;
#define FXFT_Get_Bitmap_Buffer(bitmap) ((FT_Bitmap*)bitmap)->buffer
#define FXFT_Get_Glyph_BitmapLeft(face) ((FT_Face)face)->glyph->bitmap_left
#define FXFT_Get_Glyph_BitmapTop(face) ((FT_Face)face)->glyph->bitmap_top
-#define FXFT_Outline_Decompose(outline, funcs, params) FT_Outline_Decompose(outline, funcs, params)
-#define FXFT_Set_Char_Size(face, char_width, char_height, horz_resolution, vert_resolution) FT_Set_Char_Size(face, char_width, char_height, horz_resolution, vert_resolution)
+#define FXFT_Outline_Decompose(outline, funcs, params) \
+ FT_Outline_Decompose(outline, funcs, params)
+#define FXFT_Set_Char_Size(face, char_width, char_height, horz_resolution, \
+ vert_resolution) \
+ FT_Set_Char_Size(face, char_width, char_height, horz_resolution, \
+ vert_resolution)
#define FXFT_Get_Glyph(slot, aglyph) FT_Get_Glyph(slot, aglyph)
-#define FXFT_Glyph_Get_CBox(glyph, bbox_mode, acbox) FT_Glyph_Get_CBox(glyph, bbox_mode, acbox)
-#define FXFT_Done_Glyph(glyph) FT_Done_Glyph(glyph)
-#define FXFT_Library_SetLcdFilter(library, filter) FT_Library_SetLcdFilter((FT_Library)(library), filter)
-int FXFT_unicode_from_adobe_name(const char* glyph_name);
+#define FXFT_Glyph_Get_CBox(glyph, bbox_mode, acbox) \
+ FT_Glyph_Get_CBox(glyph, bbox_mode, acbox)
+#define FXFT_Done_Glyph(glyph) FT_Done_Glyph(glyph)
+#define FXFT_Library_SetLcdFilter(library, filter) \
+ FT_Library_SetLcdFilter((FT_Library)(library), filter)
+int FXFT_unicode_from_adobe_name(const char* glyph_name);
void FXFT_adobe_name_from_unicode(char* name, wchar_t unicode);
#ifdef __cplusplus
};
diff --git a/core/include/fxge/fx_ge.h b/core/include/fxge/fx_ge.h
index dd349adb29..0aa3f17d4d 100644
--- a/core/include/fxge/fx_ge.h
+++ b/core/include/fxge/fx_ge.h
@@ -22,708 +22,712 @@ class IFX_RenderDeviceDriver;
class CCodec_ModuleMgr;
class IFXG_PaintModuleMgr;
-class CFX_GEModule
-{
-public:
-
- static void Create();
-
- static void Use(CFX_GEModule* pMgr);
-
- static CFX_GEModule* Get();
-
- static void Destroy();
-public:
-
- CFX_FontCache* GetFontCache();
- CFX_FontMgr* GetFontMgr()
- {
- return m_pFontMgr;
- }
- void SetTextGamma(FX_FLOAT gammaValue);
- const uint8_t* GetTextGammaTable();
-
- void SetCodecModule(CCodec_ModuleMgr* pCodecModule)
- {
- m_pCodecModule = pCodecModule;
- }
- CCodec_ModuleMgr* GetCodecModule()
- {
- return m_pCodecModule;
- }
- FXFT_Library m_FTLibrary;
- void* GetPlatformData()
- {
- return m_pPlatformData;
- }
-protected:
-
- CFX_GEModule();
-
- ~CFX_GEModule();
- void InitPlatform();
- void DestroyPlatform();
-private:
- uint8_t m_GammaValue[256];
- CFX_FontCache* m_pFontCache;
- CFX_FontMgr* m_pFontMgr;
- CCodec_ModuleMgr* m_pCodecModule;
- void* m_pPlatformData;
+class CFX_GEModule {
+ public:
+ static void Create();
+
+ static void Use(CFX_GEModule* pMgr);
+
+ static CFX_GEModule* Get();
+
+ static void Destroy();
+
+ public:
+ CFX_FontCache* GetFontCache();
+ CFX_FontMgr* GetFontMgr() { return m_pFontMgr; }
+ void SetTextGamma(FX_FLOAT gammaValue);
+ const uint8_t* GetTextGammaTable();
+
+ void SetCodecModule(CCodec_ModuleMgr* pCodecModule) {
+ m_pCodecModule = pCodecModule;
+ }
+ CCodec_ModuleMgr* GetCodecModule() { return m_pCodecModule; }
+ FXFT_Library m_FTLibrary;
+ void* GetPlatformData() { return m_pPlatformData; }
+
+ protected:
+ CFX_GEModule();
+
+ ~CFX_GEModule();
+ void InitPlatform();
+ void DestroyPlatform();
+
+ private:
+ uint8_t m_GammaValue[256];
+ CFX_FontCache* m_pFontCache;
+ CFX_FontMgr* m_pFontMgr;
+ CCodec_ModuleMgr* m_pCodecModule;
+ void* m_pPlatformData;
};
typedef struct {
+ FX_FLOAT m_PointX;
- FX_FLOAT m_PointX;
+ FX_FLOAT m_PointY;
- FX_FLOAT m_PointY;
-
- int m_Flag;
+ int m_Flag;
} FX_PATHPOINT;
-#define FXPT_CLOSEFIGURE 0x01
-#define FXPT_LINETO 0x02
-#define FXPT_BEZIERTO 0x04
-#define FXPT_MOVETO 0x06
-#define FXPT_TYPE 0x06
-#define FXFILL_ALTERNATE 1
-#define FXFILL_WINDING 2
-class CFX_ClipRgn
-{
-public:
-
- CFX_ClipRgn(int device_width, int device_height);
+#define FXPT_CLOSEFIGURE 0x01
+#define FXPT_LINETO 0x02
+#define FXPT_BEZIERTO 0x04
+#define FXPT_MOVETO 0x06
+#define FXPT_TYPE 0x06
+#define FXFILL_ALTERNATE 1
+#define FXFILL_WINDING 2
+class CFX_ClipRgn {
+ public:
+ CFX_ClipRgn(int device_width, int device_height);
- CFX_ClipRgn(const FX_RECT& rect);
+ CFX_ClipRgn(const FX_RECT& rect);
- CFX_ClipRgn(const CFX_ClipRgn& src);
+ CFX_ClipRgn(const CFX_ClipRgn& src);
- ~CFX_ClipRgn();
+ ~CFX_ClipRgn();
- typedef enum {
- RectI,
- MaskF
- } ClipType;
+ typedef enum { RectI, MaskF } ClipType;
- void Reset(const FX_RECT& rect);
+ void Reset(const FX_RECT& rect);
- ClipType GetType() const
- {
- return m_Type;
- }
+ ClipType GetType() const { return m_Type; }
- const FX_RECT& GetBox() const
- {
- return m_Box;
- }
+ const FX_RECT& GetBox() const { return m_Box; }
- CFX_DIBitmapRef GetMask() const
- {
- return m_Mask;
- }
+ CFX_DIBitmapRef GetMask() const { return m_Mask; }
- void IntersectRect(const FX_RECT& rect);
+ void IntersectRect(const FX_RECT& rect);
- void IntersectMaskF(int left, int top, CFX_DIBitmapRef Mask);
-protected:
+ void IntersectMaskF(int left, int top, CFX_DIBitmapRef Mask);
- ClipType m_Type;
+ protected:
+ ClipType m_Type;
- FX_RECT m_Box;
+ FX_RECT m_Box;
- CFX_DIBitmapRef m_Mask;
+ CFX_DIBitmapRef m_Mask;
- void IntersectMaskRect(FX_RECT rect, FX_RECT mask_box, CFX_DIBitmapRef Mask);
+ void IntersectMaskRect(FX_RECT rect, FX_RECT mask_box, CFX_DIBitmapRef Mask);
};
-#define FX_GAMMA(value) (value)
-#define FX_GAMMA_INVERSE(value) (value)
-inline FX_ARGB ArgbGamma(FX_ARGB argb)
-{
- return argb;
+#define FX_GAMMA(value) (value)
+#define FX_GAMMA_INVERSE(value) (value)
+inline FX_ARGB ArgbGamma(FX_ARGB argb) {
+ return argb;
}
-inline FX_ARGB ArgbGammaInverse(FX_ARGB argb)
-{
- return argb;
+inline FX_ARGB ArgbGammaInverse(FX_ARGB argb) {
+ return argb;
}
-class CFX_PathData
-{
-public:
-
- CFX_PathData();
-
- CFX_PathData(const CFX_PathData& src);
-
- ~CFX_PathData();
+class CFX_PathData {
+ public:
+ CFX_PathData();
+ CFX_PathData(const CFX_PathData& src);
+ ~CFX_PathData();
+ int GetPointCount() const { return m_PointCount; }
- int GetPointCount() const
- {
- return m_PointCount;
- }
+ int GetFlag(int index) const { return m_pPoints[index].m_Flag; }
- int GetFlag(int index) const
- {
- return m_pPoints[index].m_Flag;
- }
+ FX_FLOAT GetPointX(int index) const { return m_pPoints[index].m_PointX; }
- FX_FLOAT GetPointX(int index) const
- {
- return m_pPoints[index].m_PointX;
- }
+ FX_FLOAT GetPointY(int index) const { return m_pPoints[index].m_PointY; }
- FX_FLOAT GetPointY(int index) const
- {
- return m_pPoints[index].m_PointY;
- }
+ FX_PATHPOINT* GetPoints() const { return m_pPoints; }
+ void SetPointCount(int nPoints);
+ void AllocPointCount(int nPoints);
+ void AddPointCount(int addPoints);
+ CFX_FloatRect GetBoundingBox() const;
- FX_PATHPOINT* GetPoints() const
- {
- return m_pPoints;
- }
+ CFX_FloatRect GetBoundingBox(FX_FLOAT line_width, FX_FLOAT miter_limit) const;
- void SetPointCount(int nPoints);
- void AllocPointCount(int nPoints);
- void AddPointCount(int addPoints);
+ void Transform(const CFX_AffineMatrix* pMatrix);
- CFX_FloatRect GetBoundingBox() const;
+ FX_BOOL IsRect() const;
- CFX_FloatRect GetBoundingBox(FX_FLOAT line_width, FX_FLOAT miter_limit) const;
+ FX_BOOL GetZeroAreaPath(CFX_PathData& NewPath,
+ CFX_AffineMatrix* pMatrix,
+ FX_BOOL& bThin,
+ FX_BOOL bAdjust) const;
- void Transform(const CFX_AffineMatrix* pMatrix);
+ FX_BOOL IsRect(const CFX_AffineMatrix* pMatrix, CFX_FloatRect* rect) const;
- FX_BOOL IsRect() const;
+ void Append(const CFX_PathData* pSrc, const CFX_AffineMatrix* pMatrix);
+ void AppendRect(FX_FLOAT left, FX_FLOAT bottom, FX_FLOAT right, FX_FLOAT top);
- FX_BOOL GetZeroAreaPath(CFX_PathData& NewPath, CFX_AffineMatrix* pMatrix, FX_BOOL&bThin, FX_BOOL bAdjust) const;
+ void SetPoint(int index, FX_FLOAT x, FX_FLOAT y, int flag);
- FX_BOOL IsRect(const CFX_AffineMatrix* pMatrix, CFX_FloatRect* rect) const;
+ void TrimPoints(int nPoints);
- void Append(const CFX_PathData* pSrc, const CFX_AffineMatrix* pMatrix);
- void AppendRect(FX_FLOAT left, FX_FLOAT bottom, FX_FLOAT right, FX_FLOAT top);
+ void Copy(const CFX_PathData& src);
- void SetPoint(int index, FX_FLOAT x, FX_FLOAT y, int flag);
+ protected:
+ friend class CPDF_Path;
- void TrimPoints(int nPoints);
+ int m_PointCount;
- void Copy(const CFX_PathData &src);
-protected:
- friend class CPDF_Path;
+ FX_PATHPOINT* m_pPoints;
- int m_PointCount;
-
- FX_PATHPOINT* m_pPoints;
-
- int m_AllocCount;
+ int m_AllocCount;
};
-class CFX_GraphStateData
-{
-public:
-
- CFX_GraphStateData();
-
- CFX_GraphStateData(const CFX_GraphStateData& src);
+class CFX_GraphStateData {
+ public:
+ CFX_GraphStateData();
- ~CFX_GraphStateData();
+ CFX_GraphStateData(const CFX_GraphStateData& src);
- void Copy(const CFX_GraphStateData& src);
+ ~CFX_GraphStateData();
- void SetDashCount(int count);
+ void Copy(const CFX_GraphStateData& src);
+ void SetDashCount(int count);
+ typedef enum { LineCapButt = 0, LineCapRound = 1, LineCapSquare = 2 } LineCap;
+ LineCap m_LineCap;
+ int m_DashCount;
+ FX_FLOAT* m_DashArray;
+ FX_FLOAT m_DashPhase;
- typedef enum {
- LineCapButt = 0,
- LineCapRound = 1,
- LineCapSquare = 2
- } LineCap;
- LineCap m_LineCap;
- int m_DashCount;
- FX_FLOAT* m_DashArray;
- FX_FLOAT m_DashPhase;
-
- typedef enum {
- LineJoinMiter = 0,
- LineJoinRound = 1,
- LineJoinBevel = 2,
- } LineJoin;
- LineJoin m_LineJoin;
- FX_FLOAT m_MiterLimit;
- FX_FLOAT m_LineWidth;
-
+ typedef enum {
+ LineJoinMiter = 0,
+ LineJoinRound = 1,
+ LineJoinBevel = 2,
+ } LineJoin;
+ LineJoin m_LineJoin;
+ FX_FLOAT m_MiterLimit;
+ FX_FLOAT m_LineWidth;
};
-#define FXDC_DEVICE_CLASS 1
-#define FXDC_PIXEL_WIDTH 2
-#define FXDC_PIXEL_HEIGHT 3
-#define FXDC_BITS_PIXEL 4
-#define FXDC_HORZ_SIZE 5
-#define FXDC_VERT_SIZE 6
-#define FXDC_RENDER_CAPS 7
-#define FXDC_DITHER_BITS 8
-#define FXDC_DISPLAY 1
-#define FXDC_PRINTER 2
-#define FXRC_GET_BITS 0x01
-#define FXRC_BIT_MASK 0x02
-#define FXRC_ALPHA_MASK 0x04
-#define FXRC_ALPHA_PATH 0x10
-#define FXRC_ALPHA_IMAGE 0x20
-#define FXRC_ALPHA_OUTPUT 0x40
-#define FXRC_BLEND_MODE 0x80
-#define FXRC_SOFT_CLIP 0x100
-#define FXRC_CMYK_OUTPUT 0x200
-#define FXRC_BITMASK_OUTPUT 0x400
-#define FXRC_BYTEMASK_OUTPUT 0x800
-#define FXRENDER_IMAGE_LOSSY 0x1000
-#define FXFILL_ALTERNATE 1
-#define FXFILL_WINDING 2
-#define FXFILL_FULLCOVER 4
-#define FXFILL_RECT_AA 8
-#define FX_FILL_STROKE 16
-#define FX_STROKE_ADJUST 32
-#define FX_STROKE_TEXT_MODE 64
-#define FX_FILL_TEXT_MODE 128
-#define FX_ZEROAREA_FILL 256
-#define FXFILL_NOPATHSMOOTH 512
-#define FXTEXT_CLEARTYPE 0x01
-#define FXTEXT_BGR_STRIPE 0x02
-#define FXTEXT_PRINTGRAPHICTEXT 0x04
-#define FXTEXT_NO_NATIVETEXT 0x08
-#define FXTEXT_PRINTIMAGETEXT 0x10
-#define FXTEXT_NOSMOOTH 0x20
+#define FXDC_DEVICE_CLASS 1
+#define FXDC_PIXEL_WIDTH 2
+#define FXDC_PIXEL_HEIGHT 3
+#define FXDC_BITS_PIXEL 4
+#define FXDC_HORZ_SIZE 5
+#define FXDC_VERT_SIZE 6
+#define FXDC_RENDER_CAPS 7
+#define FXDC_DITHER_BITS 8
+#define FXDC_DISPLAY 1
+#define FXDC_PRINTER 2
+#define FXRC_GET_BITS 0x01
+#define FXRC_BIT_MASK 0x02
+#define FXRC_ALPHA_MASK 0x04
+#define FXRC_ALPHA_PATH 0x10
+#define FXRC_ALPHA_IMAGE 0x20
+#define FXRC_ALPHA_OUTPUT 0x40
+#define FXRC_BLEND_MODE 0x80
+#define FXRC_SOFT_CLIP 0x100
+#define FXRC_CMYK_OUTPUT 0x200
+#define FXRC_BITMASK_OUTPUT 0x400
+#define FXRC_BYTEMASK_OUTPUT 0x800
+#define FXRENDER_IMAGE_LOSSY 0x1000
+#define FXFILL_ALTERNATE 1
+#define FXFILL_WINDING 2
+#define FXFILL_FULLCOVER 4
+#define FXFILL_RECT_AA 8
+#define FX_FILL_STROKE 16
+#define FX_STROKE_ADJUST 32
+#define FX_STROKE_TEXT_MODE 64
+#define FX_FILL_TEXT_MODE 128
+#define FX_ZEROAREA_FILL 256
+#define FXFILL_NOPATHSMOOTH 512
+#define FXTEXT_CLEARTYPE 0x01
+#define FXTEXT_BGR_STRIPE 0x02
+#define FXTEXT_PRINTGRAPHICTEXT 0x04
+#define FXTEXT_NO_NATIVETEXT 0x08
+#define FXTEXT_PRINTIMAGETEXT 0x10
+#define FXTEXT_NOSMOOTH 0x20
typedef struct {
- FX_DWORD m_GlyphIndex;
- FX_FLOAT m_OriginX, m_OriginY;
- int m_FontCharWidth;
- FX_BOOL m_bGlyphAdjust;
- FX_FLOAT m_AdjustMatrix[4];
- FX_DWORD m_ExtGID;
- FX_BOOL m_bFontStyle;
+ FX_DWORD m_GlyphIndex;
+ FX_FLOAT m_OriginX, m_OriginY;
+ int m_FontCharWidth;
+ FX_BOOL m_bGlyphAdjust;
+ FX_FLOAT m_AdjustMatrix[4];
+ FX_DWORD m_ExtGID;
+ FX_BOOL m_bFontStyle;
} FXTEXT_CHARPOS;
-class CFX_RenderDevice
-{
-public:
- CFX_RenderDevice();
-
- virtual ~CFX_RenderDevice();
-
- void SetDeviceDriver(IFX_RenderDeviceDriver* pDriver);
+class CFX_RenderDevice {
+ public:
+ CFX_RenderDevice();
- IFX_RenderDeviceDriver* GetDeviceDriver() const
- {
- return m_pDeviceDriver;
- }
+ virtual ~CFX_RenderDevice();
- FX_BOOL StartRendering();
+ void SetDeviceDriver(IFX_RenderDeviceDriver* pDriver);
- void EndRendering();
+ IFX_RenderDeviceDriver* GetDeviceDriver() const { return m_pDeviceDriver; }
+ FX_BOOL StartRendering();
+ void EndRendering();
- void SaveState();
+ void SaveState();
- void RestoreState(FX_BOOL bKeepSaved = FALSE);
+ void RestoreState(FX_BOOL bKeepSaved = FALSE);
+ int GetWidth() const { return m_Width; }
+ int GetHeight() const { return m_Height; }
+ int GetDeviceClass() const { return m_DeviceClass; }
- int GetWidth() const
- {
- return m_Width;
- }
+ int GetBPP() const { return m_bpp; }
- int GetHeight() const
- {
- return m_Height;
- }
+ int GetRenderCaps() const { return m_RenderCaps; }
- int GetDeviceClass() const
- {
- return m_DeviceClass;
- }
+ int GetDeviceCaps(int id) const;
- int GetBPP() const
- {
- return m_bpp;
- }
+ CFX_Matrix GetCTM() const;
- int GetRenderCaps() const
- {
- return m_RenderCaps;
- }
+ CFX_DIBitmap* GetBitmap() const { return m_pBitmap; }
+ void SetBitmap(CFX_DIBitmap* pBitmap) { m_pBitmap = pBitmap; }
- int GetDeviceCaps(int id) const;
+ FX_BOOL CreateCompatibleBitmap(CFX_DIBitmap* pDIB,
+ int width,
+ int height) const;
- CFX_Matrix GetCTM() const;
+ const FX_RECT& GetClipBox() const { return m_ClipBox; }
+ FX_BOOL SetClip_PathFill(const CFX_PathData* pPathData,
+ const CFX_AffineMatrix* pObject2Device,
+ int fill_mode);
- CFX_DIBitmap* GetBitmap() const
- {
- return m_pBitmap;
- }
- void SetBitmap(CFX_DIBitmap* pBitmap)
- {
- m_pBitmap = pBitmap;
- }
-
- FX_BOOL CreateCompatibleBitmap(CFX_DIBitmap* pDIB, int width, int height) const;
-
- const FX_RECT& GetClipBox() const
- {
- return m_ClipBox;
- }
-
- FX_BOOL SetClip_PathFill(const CFX_PathData* pPathData,
- const CFX_AffineMatrix* pObject2Device,
- int fill_mode
- );
+ FX_BOOL SetClip_Rect(const FX_RECT* pRect);
- FX_BOOL SetClip_Rect(const FX_RECT* pRect);
-
- FX_BOOL SetClip_PathStroke(const CFX_PathData* pPathData,
- const CFX_AffineMatrix* pObject2Device,
- const CFX_GraphStateData* pGraphState
- );
-
- FX_BOOL DrawPath(const CFX_PathData* pPathData,
+ FX_BOOL SetClip_PathStroke(const CFX_PathData* pPathData,
const CFX_AffineMatrix* pObject2Device,
- const CFX_GraphStateData* pGraphState,
- FX_DWORD fill_color,
- FX_DWORD stroke_color,
- int fill_mode,
- int alpha_flag = 0,
- void* pIccTransform = NULL,
- int blend_type = FXDIB_BLEND_NORMAL
- );
-
- FX_BOOL SetPixel(int x, int y, FX_DWORD color,
- int alpha_flag = 0, void* pIccTransform = NULL);
-
- FX_BOOL FillRect(const FX_RECT* pRect, FX_DWORD color,
- int alpha_flag = 0, void* pIccTransform = NULL, int blend_type = FXDIB_BLEND_NORMAL);
-
- FX_BOOL DrawCosmeticLine(FX_FLOAT x1, FX_FLOAT y1, FX_FLOAT x2, FX_FLOAT y2, FX_DWORD color,
- int fill_mode = 0, int alpha_flag = 0, void* pIccTransform = NULL, int blend_type = FXDIB_BLEND_NORMAL);
-
- FX_BOOL GetDIBits(CFX_DIBitmap* pBitmap, int left, int top, void* pIccTransform = NULL);
-
- CFX_DIBitmap* GetBackDrop();
-
- FX_BOOL SetDIBits(const CFX_DIBSource* pBitmap, int left, int top, int blend_type = FXDIB_BLEND_NORMAL,
- void* pIccTransform = NULL);
-
- FX_BOOL StretchDIBits(const CFX_DIBSource* pBitmap, int left, int top, int dest_width, int dest_height,
- FX_DWORD flags = 0, void* pIccTransform = NULL, int blend_type = FXDIB_BLEND_NORMAL);
-
- FX_BOOL SetBitMask(const CFX_DIBSource* pBitmap, int left, int top, FX_DWORD color,
- int alpha_flag = 0, void* pIccTransform = NULL);
-
- FX_BOOL StretchBitMask(const CFX_DIBSource* pBitmap, int left, int top, int dest_width, int dest_height,
- FX_DWORD color, FX_DWORD flags = 0, int alpha_flag = 0, void* pIccTransform = NULL);
-
- FX_BOOL StartDIBits(const CFX_DIBSource* pBitmap, int bitmap_alpha, FX_DWORD color,
- const CFX_AffineMatrix* pMatrix, FX_DWORD flags, void*& handle,
- int alpha_flag = 0, void* pIccTransform = NULL, int blend_type = FXDIB_BLEND_NORMAL);
-
- FX_BOOL ContinueDIBits(void* handle, IFX_Pause* pPause);
-
- void CancelDIBits(void* handle);
-
- FX_BOOL DrawNormalText(int nChars, const FXTEXT_CHARPOS* pCharPos,
- CFX_Font* pFont, CFX_FontCache* pCache,
- FX_FLOAT font_size, const CFX_AffineMatrix* pText2Device,
- FX_DWORD fill_color, FX_DWORD text_flags,
- int alpha_flag = 0, void* pIccTransform = NULL);
-
- FX_BOOL DrawTextPath(int nChars, const FXTEXT_CHARPOS* pCharPos,
- CFX_Font* pFont, CFX_FontCache* pCache,
- FX_FLOAT font_size, const CFX_AffineMatrix* pText2User,
- const CFX_AffineMatrix* pUser2Device, const CFX_GraphStateData* pGraphState,
- FX_DWORD fill_color, FX_DWORD stroke_color, CFX_PathData* pClippingPath, int nFlag = 0,
- int alpha_flag = 0, void* pIccTransform = NULL, int blend_type = FXDIB_BLEND_NORMAL);
- virtual void Begin() {}
- virtual void End() {}
-private:
-
- CFX_DIBitmap* m_pBitmap;
-
-
-
- int m_Width;
-
- int m_Height;
-
- int m_bpp;
-
- int m_RenderCaps;
-
- int m_DeviceClass;
-
- FX_RECT m_ClipBox;
-
-protected:
-
- IFX_RenderDeviceDriver* m_pDeviceDriver;
-private:
-
- void InitDeviceInfo();
-
- void UpdateClipBox();
+ const CFX_GraphStateData* pGraphState);
+
+ FX_BOOL DrawPath(const CFX_PathData* pPathData,
+ const CFX_AffineMatrix* pObject2Device,
+ const CFX_GraphStateData* pGraphState,
+ FX_DWORD fill_color,
+ FX_DWORD stroke_color,
+ int fill_mode,
+ int alpha_flag = 0,
+ void* pIccTransform = NULL,
+ int blend_type = FXDIB_BLEND_NORMAL);
+
+ FX_BOOL SetPixel(int x,
+ int y,
+ FX_DWORD color,
+ int alpha_flag = 0,
+ void* pIccTransform = NULL);
+
+ FX_BOOL FillRect(const FX_RECT* pRect,
+ FX_DWORD color,
+ int alpha_flag = 0,
+ void* pIccTransform = NULL,
+ int blend_type = FXDIB_BLEND_NORMAL);
+
+ FX_BOOL DrawCosmeticLine(FX_FLOAT x1,
+ FX_FLOAT y1,
+ FX_FLOAT x2,
+ FX_FLOAT y2,
+ FX_DWORD color,
+ int fill_mode = 0,
+ int alpha_flag = 0,
+ void* pIccTransform = NULL,
+ int blend_type = FXDIB_BLEND_NORMAL);
+
+ FX_BOOL GetDIBits(CFX_DIBitmap* pBitmap,
+ int left,
+ int top,
+ void* pIccTransform = NULL);
+
+ CFX_DIBitmap* GetBackDrop();
+
+ FX_BOOL SetDIBits(const CFX_DIBSource* pBitmap,
+ int left,
+ int top,
+ int blend_type = FXDIB_BLEND_NORMAL,
+ void* pIccTransform = NULL);
+
+ FX_BOOL StretchDIBits(const CFX_DIBSource* pBitmap,
+ int left,
+ int top,
+ int dest_width,
+ int dest_height,
+ FX_DWORD flags = 0,
+ void* pIccTransform = NULL,
+ int blend_type = FXDIB_BLEND_NORMAL);
+
+ FX_BOOL SetBitMask(const CFX_DIBSource* pBitmap,
+ int left,
+ int top,
+ FX_DWORD color,
+ int alpha_flag = 0,
+ void* pIccTransform = NULL);
+
+ FX_BOOL StretchBitMask(const CFX_DIBSource* pBitmap,
+ int left,
+ int top,
+ int dest_width,
+ int dest_height,
+ FX_DWORD color,
+ FX_DWORD flags = 0,
+ int alpha_flag = 0,
+ void* pIccTransform = NULL);
+
+ FX_BOOL StartDIBits(const CFX_DIBSource* pBitmap,
+ int bitmap_alpha,
+ FX_DWORD color,
+ const CFX_AffineMatrix* pMatrix,
+ FX_DWORD flags,
+ void*& handle,
+ int alpha_flag = 0,
+ void* pIccTransform = NULL,
+ int blend_type = FXDIB_BLEND_NORMAL);
+
+ FX_BOOL ContinueDIBits(void* handle, IFX_Pause* pPause);
+
+ void CancelDIBits(void* handle);
+
+ FX_BOOL DrawNormalText(int nChars,
+ const FXTEXT_CHARPOS* pCharPos,
+ CFX_Font* pFont,
+ CFX_FontCache* pCache,
+ FX_FLOAT font_size,
+ const CFX_AffineMatrix* pText2Device,
+ FX_DWORD fill_color,
+ FX_DWORD text_flags,
+ int alpha_flag = 0,
+ void* pIccTransform = NULL);
+
+ FX_BOOL DrawTextPath(int nChars,
+ const FXTEXT_CHARPOS* pCharPos,
+ CFX_Font* pFont,
+ CFX_FontCache* pCache,
+ FX_FLOAT font_size,
+ const CFX_AffineMatrix* pText2User,
+ const CFX_AffineMatrix* pUser2Device,
+ const CFX_GraphStateData* pGraphState,
+ FX_DWORD fill_color,
+ FX_DWORD stroke_color,
+ CFX_PathData* pClippingPath,
+ int nFlag = 0,
+ int alpha_flag = 0,
+ void* pIccTransform = NULL,
+ int blend_type = FXDIB_BLEND_NORMAL);
+ virtual void Begin() {}
+ virtual void End() {}
+
+ private:
+ CFX_DIBitmap* m_pBitmap;
+
+ int m_Width;
+
+ int m_Height;
+
+ int m_bpp;
+
+ int m_RenderCaps;
+
+ int m_DeviceClass;
+
+ FX_RECT m_ClipBox;
+
+ protected:
+ IFX_RenderDeviceDriver* m_pDeviceDriver;
+
+ private:
+ void InitDeviceInfo();
+
+ void UpdateClipBox();
};
-class CFX_FxgeDevice : public CFX_RenderDevice
-{
-public:
-
- CFX_FxgeDevice();
-
- ~CFX_FxgeDevice();
-
- FX_BOOL Attach(CFX_DIBitmap* pBitmap, int dither_bits = 0, FX_BOOL bRgbByteOrder = FALSE, CFX_DIBitmap* pOriDevice = NULL, FX_BOOL bGroupKnockout = FALSE);
-
- FX_BOOL Create(int width, int height, FXDIB_Format format, int dither_bits = 0, CFX_DIBitmap* pOriDevice = NULL);
-protected:
-
- FX_BOOL m_bOwnedBitmap;
+class CFX_FxgeDevice : public CFX_RenderDevice {
+ public:
+ CFX_FxgeDevice();
+
+ ~CFX_FxgeDevice();
+
+ FX_BOOL Attach(CFX_DIBitmap* pBitmap,
+ int dither_bits = 0,
+ FX_BOOL bRgbByteOrder = FALSE,
+ CFX_DIBitmap* pOriDevice = NULL,
+ FX_BOOL bGroupKnockout = FALSE);
+
+ FX_BOOL Create(int width,
+ int height,
+ FXDIB_Format format,
+ int dither_bits = 0,
+ CFX_DIBitmap* pOriDevice = NULL);
+
+ protected:
+ FX_BOOL m_bOwnedBitmap;
};
-class CFX_SkiaDevice : public CFX_RenderDevice
-{
-public:
-
- CFX_SkiaDevice();
-
- ~CFX_SkiaDevice();
-
- FX_BOOL Attach(CFX_DIBitmap* pBitmap, int dither_bits = 0, FX_BOOL bRgbByteOrder = FALSE, CFX_DIBitmap* pOriDevice = NULL, FX_BOOL bGroupKnockout = FALSE);
-
- FX_BOOL Create(int width, int height, FXDIB_Format format, int dither_bits = 0, CFX_DIBitmap* pOriDevice = NULL);
-protected:
-
- FX_BOOL m_bOwnedBitmap;
+class CFX_SkiaDevice : public CFX_RenderDevice {
+ public:
+ CFX_SkiaDevice();
+
+ ~CFX_SkiaDevice();
+
+ FX_BOOL Attach(CFX_DIBitmap* pBitmap,
+ int dither_bits = 0,
+ FX_BOOL bRgbByteOrder = FALSE,
+ CFX_DIBitmap* pOriDevice = NULL,
+ FX_BOOL bGroupKnockout = FALSE);
+
+ FX_BOOL Create(int width,
+ int height,
+ FXDIB_Format format,
+ int dither_bits = 0,
+ CFX_DIBitmap* pOriDevice = NULL);
+
+ protected:
+ FX_BOOL m_bOwnedBitmap;
};
-class IFX_RenderDeviceDriver
-{
-public:
-
- static IFX_RenderDeviceDriver* CreateFxgeDriver(CFX_DIBitmap* pBitmap, FX_BOOL bRgbByteOrder = FALSE,
- CFX_DIBitmap* pOriDevice = NULL, FX_BOOL bGroupKnockout = FALSE);
+class IFX_RenderDeviceDriver {
+ public:
+ static IFX_RenderDeviceDriver* CreateFxgeDriver(
+ CFX_DIBitmap* pBitmap,
+ FX_BOOL bRgbByteOrder = FALSE,
+ CFX_DIBitmap* pOriDevice = NULL,
+ FX_BOOL bGroupKnockout = FALSE);
- virtual ~IFX_RenderDeviceDriver() {}
- virtual void Begin() { }
- virtual void End() { }
+ virtual ~IFX_RenderDeviceDriver() {}
+ virtual void Begin() {}
+ virtual void End() {}
- virtual int GetDeviceCaps(int caps_id) = 0;
+ virtual int GetDeviceCaps(int caps_id) = 0;
- virtual CFX_Matrix GetCTM() const
- {
- return CFX_Matrix();
- }
+ virtual CFX_Matrix GetCTM() const { return CFX_Matrix(); }
- virtual FX_BOOL IsPSPrintDriver()
- {
- return FALSE;
- }
+ virtual FX_BOOL IsPSPrintDriver() { return FALSE; }
- virtual FX_BOOL StartRendering()
- {
- return TRUE;
- }
+ virtual FX_BOOL StartRendering() { return TRUE; }
- virtual void EndRendering() {}
+ virtual void EndRendering() {}
+ virtual void SaveState() = 0;
+ virtual void RestoreState(FX_BOOL bKeepSaved = FALSE) = 0;
+ virtual FX_BOOL SetClip_PathFill(const CFX_PathData* pPathData,
+ const CFX_AffineMatrix* pObject2Device,
+ int fill_mode) = 0;
- virtual void SaveState() = 0;
-
- virtual void RestoreState(FX_BOOL bKeepSaved = FALSE) = 0;
-
-
- virtual FX_BOOL SetClip_PathFill(const CFX_PathData* pPathData,
+ virtual FX_BOOL SetClip_PathStroke(const CFX_PathData* pPathData,
const CFX_AffineMatrix* pObject2Device,
- int fill_mode
- ) = 0;
-
- virtual FX_BOOL SetClip_PathStroke(const CFX_PathData* pPathData,
- const CFX_AffineMatrix* pObject2Device,
- const CFX_GraphStateData* pGraphState
- )
- {
- return FALSE;
- }
-
- virtual FX_BOOL DrawPath(const CFX_PathData* pPathData,
- const CFX_AffineMatrix* pObject2Device,
- const CFX_GraphStateData* pGraphState,
- FX_DWORD fill_color,
- FX_DWORD stroke_color,
- int fill_mode,
- int alpha_flag = 0,
- void* pIccTransform = NULL,
- int blend_type = FXDIB_BLEND_NORMAL
- ) = 0;
-
- virtual FX_BOOL SetPixel(int x, int y, FX_DWORD color,
- int alpha_flag = 0, void* pIccTransform = NULL)
- {
- return FALSE;
- }
-
- virtual FX_BOOL FillRect(const FX_RECT* pRect, FX_DWORD fill_color,
- int alpha_flag = 0, void* pIccTransform = NULL, int blend_type = FXDIB_BLEND_NORMAL)
- {
- return FALSE;
- }
-
- virtual FX_BOOL DrawCosmeticLine(FX_FLOAT x1, FX_FLOAT y1, FX_FLOAT x2, FX_FLOAT y2, FX_DWORD color,
- int alpha_flag = 0, void* pIccTransform = NULL, int blend_type = FXDIB_BLEND_NORMAL)
- {
- return FALSE;
- }
-
- virtual FX_BOOL GetClipBox(FX_RECT* pRect) = 0;
-
- virtual FX_BOOL GetDIBits(CFX_DIBitmap* pBitmap, int left, int top, void* pIccTransform = NULL, FX_BOOL bDEdge = FALSE)
- {
- return FALSE;
- }
- virtual CFX_DIBitmap* GetBackDrop()
- {
- return NULL;
- }
-
- virtual FX_BOOL SetDIBits(const CFX_DIBSource* pBitmap, FX_DWORD color, const FX_RECT* pSrcRect,
- int dest_left, int dest_top, int blend_type,
- int alpha_flag = 0, void* pIccTransform = NULL) = 0;
-
- virtual FX_BOOL StretchDIBits(const CFX_DIBSource* pBitmap, FX_DWORD color, int dest_left, int dest_top,
- int dest_width, int dest_height, const FX_RECT* pClipRect, FX_DWORD flags,
- int alpha_flag = 0, void* pIccTransform = NULL, int blend_type = FXDIB_BLEND_NORMAL) = 0;
-
- virtual FX_BOOL StartDIBits(const CFX_DIBSource* pBitmap, int bitmap_alpha, FX_DWORD color,
- const CFX_AffineMatrix* pMatrix, FX_DWORD flags, void*& handle,
- int alpha_flag = 0, void* pIccTransform = NULL, int blend_type = FXDIB_BLEND_NORMAL) = 0;
-
- virtual FX_BOOL ContinueDIBits(void* handle, IFX_Pause* pPause)
- {
- return FALSE;
- }
-
- virtual void CancelDIBits(void* handle) {}
-
- virtual FX_BOOL DrawDeviceText(int nChars, const FXTEXT_CHARPOS* pCharPos, CFX_Font* pFont,
- CFX_FontCache* pCache, const CFX_AffineMatrix* pObject2Device, FX_FLOAT font_size, FX_DWORD color,
- int alpha_flag = 0, void* pIccTransform = NULL)
- {
- return FALSE;
- }
-
- virtual void* GetPlatformSurface()
- {
- return NULL;
- }
-
- virtual int GetDriverType()
- {
- return 0;
- }
-
- virtual void ClearDriver() {}
+ const CFX_GraphStateData* pGraphState) {
+ return FALSE;
+ }
+
+ virtual FX_BOOL DrawPath(const CFX_PathData* pPathData,
+ const CFX_AffineMatrix* pObject2Device,
+ const CFX_GraphStateData* pGraphState,
+ FX_DWORD fill_color,
+ FX_DWORD stroke_color,
+ int fill_mode,
+ int alpha_flag = 0,
+ void* pIccTransform = NULL,
+ int blend_type = FXDIB_BLEND_NORMAL) = 0;
+
+ virtual FX_BOOL SetPixel(int x,
+ int y,
+ FX_DWORD color,
+ int alpha_flag = 0,
+ void* pIccTransform = NULL) {
+ return FALSE;
+ }
+
+ virtual FX_BOOL FillRect(const FX_RECT* pRect,
+ FX_DWORD fill_color,
+ int alpha_flag = 0,
+ void* pIccTransform = NULL,
+ int blend_type = FXDIB_BLEND_NORMAL) {
+ return FALSE;
+ }
+
+ virtual FX_BOOL DrawCosmeticLine(FX_FLOAT x1,
+ FX_FLOAT y1,
+ FX_FLOAT x2,
+ FX_FLOAT y2,
+ FX_DWORD color,
+ int alpha_flag = 0,
+ void* pIccTransform = NULL,
+ int blend_type = FXDIB_BLEND_NORMAL) {
+ return FALSE;
+ }
+
+ virtual FX_BOOL GetClipBox(FX_RECT* pRect) = 0;
+
+ virtual FX_BOOL GetDIBits(CFX_DIBitmap* pBitmap,
+ int left,
+ int top,
+ void* pIccTransform = NULL,
+ FX_BOOL bDEdge = FALSE) {
+ return FALSE;
+ }
+ virtual CFX_DIBitmap* GetBackDrop() { return NULL; }
+
+ virtual FX_BOOL SetDIBits(const CFX_DIBSource* pBitmap,
+ FX_DWORD color,
+ const FX_RECT* pSrcRect,
+ int dest_left,
+ int dest_top,
+ int blend_type,
+ int alpha_flag = 0,
+ void* pIccTransform = NULL) = 0;
+
+ virtual FX_BOOL StretchDIBits(const CFX_DIBSource* pBitmap,
+ FX_DWORD color,
+ int dest_left,
+ int dest_top,
+ int dest_width,
+ int dest_height,
+ const FX_RECT* pClipRect,
+ FX_DWORD flags,
+ int alpha_flag = 0,
+ void* pIccTransform = NULL,
+ int blend_type = FXDIB_BLEND_NORMAL) = 0;
+
+ virtual FX_BOOL StartDIBits(const CFX_DIBSource* pBitmap,
+ int bitmap_alpha,
+ FX_DWORD color,
+ const CFX_AffineMatrix* pMatrix,
+ FX_DWORD flags,
+ void*& handle,
+ int alpha_flag = 0,
+ void* pIccTransform = NULL,
+ int blend_type = FXDIB_BLEND_NORMAL) = 0;
+
+ virtual FX_BOOL ContinueDIBits(void* handle, IFX_Pause* pPause) {
+ return FALSE;
+ }
+
+ virtual void CancelDIBits(void* handle) {}
+
+ virtual FX_BOOL DrawDeviceText(int nChars,
+ const FXTEXT_CHARPOS* pCharPos,
+ CFX_Font* pFont,
+ CFX_FontCache* pCache,
+ const CFX_AffineMatrix* pObject2Device,
+ FX_FLOAT font_size,
+ FX_DWORD color,
+ int alpha_flag = 0,
+ void* pIccTransform = NULL) {
+ return FALSE;
+ }
+
+ virtual void* GetPlatformSurface() { return NULL; }
+
+ virtual int GetDriverType() { return 0; }
+
+ virtual void ClearDriver() {}
};
-class IFX_PSOutput
-{
-public:
- virtual void Release() = 0;
- virtual void OutputPS(const FX_CHAR* string, int len) = 0;
-
-protected:
- ~IFX_PSOutput() { }
+class IFX_PSOutput {
+ public:
+ virtual void Release() = 0;
+ virtual void OutputPS(const FX_CHAR* string, int len) = 0;
+
+ protected:
+ ~IFX_PSOutput() {}
};
class CPSFont;
-class CFX_PSRenderer
-{
-public:
-
- CFX_PSRenderer();
+class CFX_PSRenderer {
+ public:
+ CFX_PSRenderer();
- ~CFX_PSRenderer();
+ ~CFX_PSRenderer();
- void Init(IFX_PSOutput* pOutput, int ps_level, int width, int height, FX_BOOL bCmykOutput);
- FX_BOOL StartRendering();
- void EndRendering();
+ void Init(IFX_PSOutput* pOutput,
+ int ps_level,
+ int width,
+ int height,
+ FX_BOOL bCmykOutput);
+ FX_BOOL StartRendering();
+ void EndRendering();
- void SaveState();
+ void SaveState();
- void RestoreState(FX_BOOL bKeepSaved = FALSE);
+ void RestoreState(FX_BOOL bKeepSaved = FALSE);
- void SetClip_PathFill(const CFX_PathData* pPathData,
- const CFX_AffineMatrix* pObject2Device,
- int fill_mode
- );
+ void SetClip_PathFill(const CFX_PathData* pPathData,
+ const CFX_AffineMatrix* pObject2Device,
+ int fill_mode);
- void SetClip_PathStroke(const CFX_PathData* pPathData,
- const CFX_AffineMatrix* pObject2Device,
- const CFX_GraphStateData* pGraphState
- );
+ void SetClip_PathStroke(const CFX_PathData* pPathData,
+ const CFX_AffineMatrix* pObject2Device,
+ const CFX_GraphStateData* pGraphState);
- FX_RECT GetClipBox()
- {
- return m_ClipBox;
- }
+ FX_RECT GetClipBox() { return m_ClipBox; }
- FX_BOOL DrawPath(const CFX_PathData* pPathData,
- const CFX_AffineMatrix* pObject2Device,
- const CFX_GraphStateData* pGraphState,
- FX_DWORD fill_color,
- FX_DWORD stroke_color,
- int fill_mode,
- int alpha_flag = 0,
- void* pIccTransform = NULL
- );
+ FX_BOOL DrawPath(const CFX_PathData* pPathData,
+ const CFX_AffineMatrix* pObject2Device,
+ const CFX_GraphStateData* pGraphState,
+ FX_DWORD fill_color,
+ FX_DWORD stroke_color,
+ int fill_mode,
+ int alpha_flag = 0,
+ void* pIccTransform = NULL);
- FX_BOOL SetDIBits(const CFX_DIBSource* pBitmap, FX_DWORD color, int dest_left, int dest_top,
- int alpha_flag = 0, void* pIccTransform = NULL);
+ FX_BOOL SetDIBits(const CFX_DIBSource* pBitmap,
+ FX_DWORD color,
+ int dest_left,
+ int dest_top,
+ int alpha_flag = 0,
+ void* pIccTransform = NULL);
- FX_BOOL StretchDIBits(const CFX_DIBSource* pBitmap, FX_DWORD color, int dest_left, int dest_top,
- int dest_width, int dest_height, FX_DWORD flags,
- int alpha_flag = 0, void* pIccTransform = NULL);
+ FX_BOOL StretchDIBits(const CFX_DIBSource* pBitmap,
+ FX_DWORD color,
+ int dest_left,
+ int dest_top,
+ int dest_width,
+ int dest_height,
+ FX_DWORD flags,
+ int alpha_flag = 0,
+ void* pIccTransform = NULL);
- FX_BOOL DrawDIBits(const CFX_DIBSource* pBitmap, FX_DWORD color,
- const CFX_AffineMatrix* pMatrix, FX_DWORD flags,
- int alpha_flag = 0, void* pIccTransform = NULL);
+ FX_BOOL DrawDIBits(const CFX_DIBSource* pBitmap,
+ FX_DWORD color,
+ const CFX_AffineMatrix* pMatrix,
+ FX_DWORD flags,
+ int alpha_flag = 0,
+ void* pIccTransform = NULL);
- FX_BOOL DrawText(int nChars, const FXTEXT_CHARPOS* pCharPos, CFX_Font* pFont, CFX_FontCache* pCache,
- const CFX_AffineMatrix* pObject2Device, FX_FLOAT font_size, FX_DWORD color,
- int alpha_flag = 0, void* pIccTransform = NULL);
-private:
+ FX_BOOL DrawText(int nChars,
+ const FXTEXT_CHARPOS* pCharPos,
+ CFX_Font* pFont,
+ CFX_FontCache* pCache,
+ const CFX_AffineMatrix* pObject2Device,
+ FX_FLOAT font_size,
+ FX_DWORD color,
+ int alpha_flag = 0,
+ void* pIccTransform = NULL);
- IFX_PSOutput* m_pOutput;
+ private:
+ IFX_PSOutput* m_pOutput;
- int m_PSLevel;
+ int m_PSLevel;
- CFX_GraphStateData m_CurGraphState;
+ CFX_GraphStateData m_CurGraphState;
- FX_BOOL m_bGraphStateSet;
+ FX_BOOL m_bGraphStateSet;
- FX_BOOL m_bCmykOutput;
+ FX_BOOL m_bCmykOutput;
- FX_BOOL m_bColorSet;
+ FX_BOOL m_bColorSet;
- FX_DWORD m_LastColor;
+ FX_DWORD m_LastColor;
- FX_RECT m_ClipBox;
+ FX_RECT m_ClipBox;
- CFX_ArrayTemplate<CPSFont*> m_PSFontList;
+ CFX_ArrayTemplate<CPSFont*> m_PSFontList;
- CFX_ArrayTemplate<FX_RECT> m_ClipBoxStack;
- FX_BOOL m_bInited;
+ CFX_ArrayTemplate<FX_RECT> m_ClipBoxStack;
+ FX_BOOL m_bInited;
- void OutputPath(const CFX_PathData* pPathData, const CFX_AffineMatrix* pObject2Device);
+ void OutputPath(const CFX_PathData* pPathData,
+ const CFX_AffineMatrix* pObject2Device);
- void SetGraphState(const CFX_GraphStateData* pGraphState);
+ void SetGraphState(const CFX_GraphStateData* pGraphState);
- void SetColor(FX_DWORD color, int alpha_flag, void* pIccTransform);
+ void SetColor(FX_DWORD color, int alpha_flag, void* pIccTransform);
- void FindPSFontGlyph(CFX_FaceCache* pFaceCache, CFX_Font* pFont, const FXTEXT_CHARPOS& charpos, int& ps_fontnum, int &ps_glyphindex);
+ void FindPSFontGlyph(CFX_FaceCache* pFaceCache,
+ CFX_Font* pFont,
+ const FXTEXT_CHARPOS& charpos,
+ int& ps_fontnum,
+ int& ps_glyphindex);
- void WritePSBinary(const uint8_t* data, int len);
+ void WritePSBinary(const uint8_t* data, int len);
};
#endif // CORE_INCLUDE_FXGE_FX_GE_H_
diff --git a/core/include/fxge/fx_ge_apple.h b/core/include/fxge/fx_ge_apple.h
index 0fb8bedcfc..16298581b3 100644
--- a/core/include/fxge/fx_ge_apple.h
+++ b/core/include/fxge/fx_ge_apple.h
@@ -7,21 +7,20 @@
#ifndef CORE_INCLUDE_FXGE_FX_GE_APPLE_H_
#define CORE_INCLUDE_FXGE_FX_GE_APPLE_H_
-#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
-class CFX_QuartzDevice : public CFX_RenderDevice
-{
-public:
- CFX_QuartzDevice();
- ~CFX_QuartzDevice();
- FX_BOOL Attach(CGContextRef context, int32_t nDeviceClass = FXDC_DISPLAY);
- FX_BOOL Attach(CFX_DIBitmap* pBitmap);
- FX_BOOL Create(int32_t width, int32_t height, FXDIB_Format format);
+#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
+class CFX_QuartzDevice : public CFX_RenderDevice {
+ public:
+ CFX_QuartzDevice();
+ ~CFX_QuartzDevice();
+ FX_BOOL Attach(CGContextRef context, int32_t nDeviceClass = FXDC_DISPLAY);
+ FX_BOOL Attach(CFX_DIBitmap* pBitmap);
+ FX_BOOL Create(int32_t width, int32_t height, FXDIB_Format format);
- CGContextRef GetContext();
+ CGContextRef GetContext();
-protected:
- CGContextRef m_pContext;
- FX_BOOL m_bOwnedBitmap;
+ protected:
+ CGContextRef m_pContext;
+ FX_BOOL m_bOwnedBitmap;
};
#endif
diff --git a/core/include/fxge/fx_ge_win32.h b/core/include/fxge/fx_ge_win32.h
index 5b16146b6a..149c46d40b 100644
--- a/core/include/fxge/fx_ge_win32.h
+++ b/core/include/fxge/fx_ge_win32.h
@@ -11,96 +11,87 @@
#ifndef _WINDOWS_
#include <windows.h>
#endif
-#define WINDIB_OPEN_MEMORY 0x1
-#define WINDIB_OPEN_PATHNAME 0x2
-typedef struct WINDIB_Open_Args_ {
+#define WINDIB_OPEN_MEMORY 0x1
+#define WINDIB_OPEN_PATHNAME 0x2
+typedef struct WINDIB_Open_Args_ {
+ int flags;
- int flags;
+ const uint8_t* memory_base;
- const uint8_t* memory_base;
+ size_t memory_size;
- size_t memory_size;
-
- const FX_WCHAR* path_name;
+ const FX_WCHAR* path_name;
} WINDIB_Open_Args_;
-class CFX_WindowsDIB : public CFX_DIBitmap
-{
-public:
-
- static CFX_ByteString GetBitmapInfo(const CFX_DIBitmap* pBitmap);
+class CFX_WindowsDIB : public CFX_DIBitmap {
+ public:
+ static CFX_ByteString GetBitmapInfo(const CFX_DIBitmap* pBitmap);
- static CFX_DIBitmap* LoadFromBuf(BITMAPINFO* pbmi, void* pData);
+ static CFX_DIBitmap* LoadFromBuf(BITMAPINFO* pbmi, void* pData);
- static HBITMAP GetDDBitmap(const CFX_DIBitmap* pBitmap, HDC hDC);
+ static HBITMAP GetDDBitmap(const CFX_DIBitmap* pBitmap, HDC hDC);
- static CFX_DIBitmap* LoadFromDDB(HDC hDC, HBITMAP hBitmap, FX_DWORD* pPalette = NULL, FX_DWORD size = 256);
+ static CFX_DIBitmap* LoadFromDDB(HDC hDC,
+ HBITMAP hBitmap,
+ FX_DWORD* pPalette = NULL,
+ FX_DWORD size = 256);
- static CFX_DIBitmap* LoadFromFile(const FX_WCHAR* filename);
+ static CFX_DIBitmap* LoadFromFile(const FX_WCHAR* filename);
- static CFX_DIBitmap* LoadFromFile(const FX_CHAR* filename)
- {
- return LoadFromFile(CFX_WideString::FromLocal(filename).c_str());
- }
+ static CFX_DIBitmap* LoadFromFile(const FX_CHAR* filename) {
+ return LoadFromFile(CFX_WideString::FromLocal(filename).c_str());
+ }
- static CFX_DIBitmap* LoadDIBitmap(WINDIB_Open_Args_ args);
+ static CFX_DIBitmap* LoadDIBitmap(WINDIB_Open_Args_ args);
- CFX_WindowsDIB(HDC hDC, int width, int height);
+ CFX_WindowsDIB(HDC hDC, int width, int height);
- ~CFX_WindowsDIB();
+ ~CFX_WindowsDIB();
- HDC GetDC() const
- {
- return m_hMemDC;
- }
+ HDC GetDC() const { return m_hMemDC; }
- HBITMAP GetWindowsBitmap() const
- {
- return m_hBitmap;
- }
+ HBITMAP GetWindowsBitmap() const { return m_hBitmap; }
- void LoadFromDevice(HDC hDC, int left, int top);
+ void LoadFromDevice(HDC hDC, int left, int top);
- void SetToDevice(HDC hDC, int left, int top);
-protected:
+ void SetToDevice(HDC hDC, int left, int top);
- HDC m_hMemDC;
+ protected:
+ HDC m_hMemDC;
- HBITMAP m_hBitmap;
+ HBITMAP m_hBitmap;
- HBITMAP m_hOldBitmap;
+ HBITMAP m_hOldBitmap;
};
-class CFX_WindowsDevice : public CFX_RenderDevice
-{
-public:
- static IFX_RenderDeviceDriver* CreateDriver(HDC hDC, FX_BOOL bCmykOutput = FALSE);
+class CFX_WindowsDevice : public CFX_RenderDevice {
+ public:
+ static IFX_RenderDeviceDriver* CreateDriver(HDC hDC,
+ FX_BOOL bCmykOutput = FALSE);
- CFX_WindowsDevice(HDC hDC, FX_BOOL bCmykOutput = FALSE, FX_BOOL bForcePSOutput = FALSE, int psLevel = 2);
+ CFX_WindowsDevice(HDC hDC,
+ FX_BOOL bCmykOutput = FALSE,
+ FX_BOOL bForcePSOutput = FALSE,
+ int psLevel = 2);
- HDC GetDC() const;
+ HDC GetDC() const;
- FX_BOOL m_bForcePSOutput;
+ FX_BOOL m_bForcePSOutput;
- static int m_psLevel;
+ static int m_psLevel;
};
-class CFX_WinBitmapDevice : public CFX_RenderDevice
-{
-public:
-
- CFX_WinBitmapDevice(int width, int height, FXDIB_Format format);
+class CFX_WinBitmapDevice : public CFX_RenderDevice {
+ public:
+ CFX_WinBitmapDevice(int width, int height, FXDIB_Format format);
- ~CFX_WinBitmapDevice();
+ ~CFX_WinBitmapDevice();
- HDC GetDC()
- {
- return m_hDC;
- }
-protected:
+ HDC GetDC() { return m_hDC; }
- HBITMAP m_hBitmap;
+ protected:
+ HBITMAP m_hBitmap;
- HBITMAP m_hOldBitmap;
+ HBITMAP m_hOldBitmap;
- HDC m_hDC;
+ HDC m_hDC;
};
#endif
diff --git a/core/src/fdrm/crypto/fx_crypt.cpp b/core/src/fdrm/crypto/fx_crypt.cpp
index 83a420ad38..170cb577f1 100644
--- a/core/src/fdrm/crypto/fx_crypt.cpp
+++ b/core/src/fdrm/crypto/fx_crypt.cpp
@@ -10,249 +10,250 @@
extern "C" {
#endif
struct rc4_state {
- int x, y, m[256];
+ int x, y, m[256];
};
-void CRYPT_ArcFourSetup(void* context, const uint8_t* key, FX_DWORD length )
-{
- rc4_state *s = (rc4_state*)context;
- int i, j, k, *m, a;
- s->x = 0;
- s->y = 0;
- m = s->m;
- for( i = 0; i < 256; i++ ) {
- m[i] = i;
- }
- j = k = 0;
- for( i = 0; i < 256; i++ ) {
- a = m[i];
- j = ( j + a + key[k] ) & 0xFF;
- m[i] = m[j];
- m[j] = a;
- if( ++k >= (int)length ) {
- k = 0;
- }
+void CRYPT_ArcFourSetup(void* context, const uint8_t* key, FX_DWORD length) {
+ rc4_state* s = (rc4_state*)context;
+ int i, j, k, *m, a;
+ s->x = 0;
+ s->y = 0;
+ m = s->m;
+ for (i = 0; i < 256; i++) {
+ m[i] = i;
+ }
+ j = k = 0;
+ for (i = 0; i < 256; i++) {
+ a = m[i];
+ j = (j + a + key[k]) & 0xFF;
+ m[i] = m[j];
+ m[j] = a;
+ if (++k >= (int)length) {
+ k = 0;
}
+ }
}
-void CRYPT_ArcFourCrypt(void* context, unsigned char *data, FX_DWORD length )
-{
- struct rc4_state* s = (struct rc4_state*)context;
- int i, x, y, *m, a, b;
- x = s->x;
- y = s->y;
- m = s->m;
- for( i = 0; i < (int)length; i++ ) {
- x = ( x + 1 ) & 0xFF;
- a = m[x];
- y = ( y + a ) & 0xFF;
- m[x] = b = m[y];
- m[y] = a;
- data[i] ^= m[( a + b ) & 0xFF];
- }
- s->x = x;
- s->y = y;
+void CRYPT_ArcFourCrypt(void* context, unsigned char* data, FX_DWORD length) {
+ struct rc4_state* s = (struct rc4_state*)context;
+ int i, x, y, *m, a, b;
+ x = s->x;
+ y = s->y;
+ m = s->m;
+ for (i = 0; i < (int)length; i++) {
+ x = (x + 1) & 0xFF;
+ a = m[x];
+ y = (y + a) & 0xFF;
+ m[x] = b = m[y];
+ m[y] = a;
+ data[i] ^= m[(a + b) & 0xFF];
+ }
+ s->x = x;
+ s->y = y;
}
-void CRYPT_ArcFourCryptBlock(uint8_t* pData, FX_DWORD size, const uint8_t* key, FX_DWORD keylen)
-{
- rc4_state s;
- CRYPT_ArcFourSetup(&s, key, keylen);
- CRYPT_ArcFourCrypt(&s, pData, size);
+void CRYPT_ArcFourCryptBlock(uint8_t* pData,
+ FX_DWORD size,
+ const uint8_t* key,
+ FX_DWORD keylen) {
+ rc4_state s;
+ CRYPT_ArcFourSetup(&s, key, keylen);
+ CRYPT_ArcFourCrypt(&s, pData, size);
}
struct md5_context {
- FX_DWORD total[2];
- FX_DWORD state[4];
- uint8_t buffer[64];
+ FX_DWORD total[2];
+ FX_DWORD state[4];
+ uint8_t buffer[64];
};
-#define GET_FX_DWORD(n,b,i) \
- { \
- (n) = (FX_DWORD) ((uint8_t *) b)[(i)] \
- | (((FX_DWORD) ((uint8_t *) b)[(i)+1]) << 8) \
- | (((FX_DWORD) ((uint8_t *) b)[(i)+2]) << 16) \
- | (((FX_DWORD) ((uint8_t *) b)[(i)+3]) << 24); \
- }
-#define PUT_FX_DWORD(n,b,i) \
- { \
- (((uint8_t *) b)[(i)] ) = (uint8_t) (((n) ) & 0xFF); \
- (((uint8_t *) b)[(i)+1]) = (uint8_t) (((n) >> 8) & 0xFF); \
- (((uint8_t *) b)[(i)+2]) = (uint8_t) (((n) >> 16) & 0xFF); \
- (((uint8_t *) b)[(i)+3]) = (uint8_t) (((n) >> 24) & 0xFF); \
- }
-void md5_process( struct md5_context *ctx, const uint8_t data[64] )
-{
- FX_DWORD A, B, C, D, X[16];
- GET_FX_DWORD( X[0], data, 0 );
- GET_FX_DWORD( X[1], data, 4 );
- GET_FX_DWORD( X[2], data, 8 );
- GET_FX_DWORD( X[3], data, 12 );
- GET_FX_DWORD( X[4], data, 16 );
- GET_FX_DWORD( X[5], data, 20 );
- GET_FX_DWORD( X[6], data, 24 );
- GET_FX_DWORD( X[7], data, 28 );
- GET_FX_DWORD( X[8], data, 32 );
- GET_FX_DWORD( X[9], data, 36 );
- GET_FX_DWORD( X[10], data, 40 );
- GET_FX_DWORD( X[11], data, 44 );
- GET_FX_DWORD( X[12], data, 48 );
- GET_FX_DWORD( X[13], data, 52 );
- GET_FX_DWORD( X[14], data, 56 );
- GET_FX_DWORD( X[15], data, 60 );
-#define S(x,n) ((x << n) | ((x & 0xFFFFFFFF) >> (32 - n)))
-#define P(a,b,c,d,k,s,t) \
- { \
- a += F(b,c,d) + X[k] + t; a = S(a,s) + b; \
- }
- A = ctx->state[0];
- B = ctx->state[1];
- C = ctx->state[2];
- D = ctx->state[3];
-#define F(x,y,z) (z ^ (x & (y ^ z)))
- P( A, B, C, D, 0, 7, 0xD76AA478 );
- P( D, A, B, C, 1, 12, 0xE8C7B756 );
- P( C, D, A, B, 2, 17, 0x242070DB );
- P( B, C, D, A, 3, 22, 0xC1BDCEEE );
- P( A, B, C, D, 4, 7, 0xF57C0FAF );
- P( D, A, B, C, 5, 12, 0x4787C62A );
- P( C, D, A, B, 6, 17, 0xA8304613 );
- P( B, C, D, A, 7, 22, 0xFD469501 );
- P( A, B, C, D, 8, 7, 0x698098D8 );
- P( D, A, B, C, 9, 12, 0x8B44F7AF );
- P( C, D, A, B, 10, 17, 0xFFFF5BB1 );
- P( B, C, D, A, 11, 22, 0x895CD7BE );
- P( A, B, C, D, 12, 7, 0x6B901122 );
- P( D, A, B, C, 13, 12, 0xFD987193 );
- P( C, D, A, B, 14, 17, 0xA679438E );
- P( B, C, D, A, 15, 22, 0x49B40821 );
+#define GET_FX_DWORD(n, b, i) \
+ { \
+ (n) = (FX_DWORD)((uint8_t*)b)[(i)] | \
+ (((FX_DWORD)((uint8_t*)b)[(i) + 1]) << 8) | \
+ (((FX_DWORD)((uint8_t*)b)[(i) + 2]) << 16) | \
+ (((FX_DWORD)((uint8_t*)b)[(i) + 3]) << 24); \
+ }
+#define PUT_FX_DWORD(n, b, i) \
+ { \
+ (((uint8_t*)b)[(i)]) = (uint8_t)(((n)) & 0xFF); \
+ (((uint8_t*)b)[(i) + 1]) = (uint8_t)(((n) >> 8) & 0xFF); \
+ (((uint8_t*)b)[(i) + 2]) = (uint8_t)(((n) >> 16) & 0xFF); \
+ (((uint8_t*)b)[(i) + 3]) = (uint8_t)(((n) >> 24) & 0xFF); \
+ }
+void md5_process(struct md5_context* ctx, const uint8_t data[64]) {
+ FX_DWORD A, B, C, D, X[16];
+ GET_FX_DWORD(X[0], data, 0);
+ GET_FX_DWORD(X[1], data, 4);
+ GET_FX_DWORD(X[2], data, 8);
+ GET_FX_DWORD(X[3], data, 12);
+ GET_FX_DWORD(X[4], data, 16);
+ GET_FX_DWORD(X[5], data, 20);
+ GET_FX_DWORD(X[6], data, 24);
+ GET_FX_DWORD(X[7], data, 28);
+ GET_FX_DWORD(X[8], data, 32);
+ GET_FX_DWORD(X[9], data, 36);
+ GET_FX_DWORD(X[10], data, 40);
+ GET_FX_DWORD(X[11], data, 44);
+ GET_FX_DWORD(X[12], data, 48);
+ GET_FX_DWORD(X[13], data, 52);
+ GET_FX_DWORD(X[14], data, 56);
+ GET_FX_DWORD(X[15], data, 60);
+#define S(x, n) ((x << n) | ((x & 0xFFFFFFFF) >> (32 - n)))
+#define P(a, b, c, d, k, s, t) \
+ { \
+ a += F(b, c, d) + X[k] + t; \
+ a = S(a, s) + b; \
+ }
+ A = ctx->state[0];
+ B = ctx->state[1];
+ C = ctx->state[2];
+ D = ctx->state[3];
+#define F(x, y, z) (z ^ (x & (y ^ z)))
+ P(A, B, C, D, 0, 7, 0xD76AA478);
+ P(D, A, B, C, 1, 12, 0xE8C7B756);
+ P(C, D, A, B, 2, 17, 0x242070DB);
+ P(B, C, D, A, 3, 22, 0xC1BDCEEE);
+ P(A, B, C, D, 4, 7, 0xF57C0FAF);
+ P(D, A, B, C, 5, 12, 0x4787C62A);
+ P(C, D, A, B, 6, 17, 0xA8304613);
+ P(B, C, D, A, 7, 22, 0xFD469501);
+ P(A, B, C, D, 8, 7, 0x698098D8);
+ P(D, A, B, C, 9, 12, 0x8B44F7AF);
+ P(C, D, A, B, 10, 17, 0xFFFF5BB1);
+ P(B, C, D, A, 11, 22, 0x895CD7BE);
+ P(A, B, C, D, 12, 7, 0x6B901122);
+ P(D, A, B, C, 13, 12, 0xFD987193);
+ P(C, D, A, B, 14, 17, 0xA679438E);
+ P(B, C, D, A, 15, 22, 0x49B40821);
#undef F
-#define F(x,y,z) (y ^ (z & (x ^ y)))
- P( A, B, C, D, 1, 5, 0xF61E2562 );
- P( D, A, B, C, 6, 9, 0xC040B340 );
- P( C, D, A, B, 11, 14, 0x265E5A51 );
- P( B, C, D, A, 0, 20, 0xE9B6C7AA );
- P( A, B, C, D, 5, 5, 0xD62F105D );
- P( D, A, B, C, 10, 9, 0x02441453 );
- P( C, D, A, B, 15, 14, 0xD8A1E681 );
- P( B, C, D, A, 4, 20, 0xE7D3FBC8 );
- P( A, B, C, D, 9, 5, 0x21E1CDE6 );
- P( D, A, B, C, 14, 9, 0xC33707D6 );
- P( C, D, A, B, 3, 14, 0xF4D50D87 );
- P( B, C, D, A, 8, 20, 0x455A14ED );
- P( A, B, C, D, 13, 5, 0xA9E3E905 );
- P( D, A, B, C, 2, 9, 0xFCEFA3F8 );
- P( C, D, A, B, 7, 14, 0x676F02D9 );
- P( B, C, D, A, 12, 20, 0x8D2A4C8A );
+#define F(x, y, z) (y ^ (z & (x ^ y)))
+ P(A, B, C, D, 1, 5, 0xF61E2562);
+ P(D, A, B, C, 6, 9, 0xC040B340);
+ P(C, D, A, B, 11, 14, 0x265E5A51);
+ P(B, C, D, A, 0, 20, 0xE9B6C7AA);
+ P(A, B, C, D, 5, 5, 0xD62F105D);
+ P(D, A, B, C, 10, 9, 0x02441453);
+ P(C, D, A, B, 15, 14, 0xD8A1E681);
+ P(B, C, D, A, 4, 20, 0xE7D3FBC8);
+ P(A, B, C, D, 9, 5, 0x21E1CDE6);
+ P(D, A, B, C, 14, 9, 0xC33707D6);
+ P(C, D, A, B, 3, 14, 0xF4D50D87);
+ P(B, C, D, A, 8, 20, 0x455A14ED);
+ P(A, B, C, D, 13, 5, 0xA9E3E905);
+ P(D, A, B, C, 2, 9, 0xFCEFA3F8);
+ P(C, D, A, B, 7, 14, 0x676F02D9);
+ P(B, C, D, A, 12, 20, 0x8D2A4C8A);
#undef F
-#define F(x,y,z) (x ^ y ^ z)
- P( A, B, C, D, 5, 4, 0xFFFA3942 );
- P( D, A, B, C, 8, 11, 0x8771F681 );
- P( C, D, A, B, 11, 16, 0x6D9D6122 );
- P( B, C, D, A, 14, 23, 0xFDE5380C );
- P( A, B, C, D, 1, 4, 0xA4BEEA44 );
- P( D, A, B, C, 4, 11, 0x4BDECFA9 );
- P( C, D, A, B, 7, 16, 0xF6BB4B60 );
- P( B, C, D, A, 10, 23, 0xBEBFBC70 );
- P( A, B, C, D, 13, 4, 0x289B7EC6 );
- P( D, A, B, C, 0, 11, 0xEAA127FA );
- P( C, D, A, B, 3, 16, 0xD4EF3085 );
- P( B, C, D, A, 6, 23, 0x04881D05 );
- P( A, B, C, D, 9, 4, 0xD9D4D039 );
- P( D, A, B, C, 12, 11, 0xE6DB99E5 );
- P( C, D, A, B, 15, 16, 0x1FA27CF8 );
- P( B, C, D, A, 2, 23, 0xC4AC5665 );
+#define F(x, y, z) (x ^ y ^ z)
+ P(A, B, C, D, 5, 4, 0xFFFA3942);
+ P(D, A, B, C, 8, 11, 0x8771F681);
+ P(C, D, A, B, 11, 16, 0x6D9D6122);
+ P(B, C, D, A, 14, 23, 0xFDE5380C);
+ P(A, B, C, D, 1, 4, 0xA4BEEA44);
+ P(D, A, B, C, 4, 11, 0x4BDECFA9);
+ P(C, D, A, B, 7, 16, 0xF6BB4B60);
+ P(B, C, D, A, 10, 23, 0xBEBFBC70);
+ P(A, B, C, D, 13, 4, 0x289B7EC6);
+ P(D, A, B, C, 0, 11, 0xEAA127FA);
+ P(C, D, A, B, 3, 16, 0xD4EF3085);
+ P(B, C, D, A, 6, 23, 0x04881D05);
+ P(A, B, C, D, 9, 4, 0xD9D4D039);
+ P(D, A, B, C, 12, 11, 0xE6DB99E5);
+ P(C, D, A, B, 15, 16, 0x1FA27CF8);
+ P(B, C, D, A, 2, 23, 0xC4AC5665);
#undef F
-#define F(x,y,z) (y ^ (x | ~z))
- P( A, B, C, D, 0, 6, 0xF4292244 );
- P( D, A, B, C, 7, 10, 0x432AFF97 );
- P( C, D, A, B, 14, 15, 0xAB9423A7 );
- P( B, C, D, A, 5, 21, 0xFC93A039 );
- P( A, B, C, D, 12, 6, 0x655B59C3 );
- P( D, A, B, C, 3, 10, 0x8F0CCC92 );
- P( C, D, A, B, 10, 15, 0xFFEFF47D );
- P( B, C, D, A, 1, 21, 0x85845DD1 );
- P( A, B, C, D, 8, 6, 0x6FA87E4F );
- P( D, A, B, C, 15, 10, 0xFE2CE6E0 );
- P( C, D, A, B, 6, 15, 0xA3014314 );
- P( B, C, D, A, 13, 21, 0x4E0811A1 );
- P( A, B, C, D, 4, 6, 0xF7537E82 );
- P( D, A, B, C, 11, 10, 0xBD3AF235 );
- P( C, D, A, B, 2, 15, 0x2AD7D2BB );
- P( B, C, D, A, 9, 21, 0xEB86D391 );
+#define F(x, y, z) (y ^ (x | ~z))
+ P(A, B, C, D, 0, 6, 0xF4292244);
+ P(D, A, B, C, 7, 10, 0x432AFF97);
+ P(C, D, A, B, 14, 15, 0xAB9423A7);
+ P(B, C, D, A, 5, 21, 0xFC93A039);
+ P(A, B, C, D, 12, 6, 0x655B59C3);
+ P(D, A, B, C, 3, 10, 0x8F0CCC92);
+ P(C, D, A, B, 10, 15, 0xFFEFF47D);
+ P(B, C, D, A, 1, 21, 0x85845DD1);
+ P(A, B, C, D, 8, 6, 0x6FA87E4F);
+ P(D, A, B, C, 15, 10, 0xFE2CE6E0);
+ P(C, D, A, B, 6, 15, 0xA3014314);
+ P(B, C, D, A, 13, 21, 0x4E0811A1);
+ P(A, B, C, D, 4, 6, 0xF7537E82);
+ P(D, A, B, C, 11, 10, 0xBD3AF235);
+ P(C, D, A, B, 2, 15, 0x2AD7D2BB);
+ P(B, C, D, A, 9, 21, 0xEB86D391);
#undef F
- ctx->state[0] += A;
- ctx->state[1] += B;
- ctx->state[2] += C;
- ctx->state[3] += D;
+ ctx->state[0] += A;
+ ctx->state[1] += B;
+ ctx->state[2] += C;
+ ctx->state[3] += D;
}
-void CRYPT_MD5Start(void* context)
-{
- struct md5_context *ctx = (struct md5_context*)context;
- ctx->total[0] = 0;
- ctx->total[1] = 0;
- ctx->state[0] = 0x67452301;
- ctx->state[1] = 0xEFCDAB89;
- ctx->state[2] = 0x98BADCFE;
- ctx->state[3] = 0x10325476;
+void CRYPT_MD5Start(void* context) {
+ struct md5_context* ctx = (struct md5_context*)context;
+ ctx->total[0] = 0;
+ ctx->total[1] = 0;
+ ctx->state[0] = 0x67452301;
+ ctx->state[1] = 0xEFCDAB89;
+ ctx->state[2] = 0x98BADCFE;
+ ctx->state[3] = 0x10325476;
}
-void CRYPT_MD5Update(void* pctx, const uint8_t* input, FX_DWORD length )
-{
- struct md5_context *ctx = (struct md5_context *)pctx;
- FX_DWORD left, fill;
- if( ! length ) {
- return;
- }
- left = ( ctx->total[0] >> 3 ) & 0x3F;
- fill = 64 - left;
- ctx->total[0] += length << 3;
- ctx->total[1] += length >> 29;
- ctx->total[0] &= 0xFFFFFFFF;
- ctx->total[1] += ctx->total[0] < length << 3;
- if( left && length >= fill ) {
- FXSYS_memcpy( (void *) (ctx->buffer + left), (void *) input, fill );
- md5_process( ctx, ctx->buffer );
- length -= fill;
- input += fill;
- left = 0;
- }
- while( length >= 64 ) {
- md5_process( ctx, input );
- length -= 64;
- input += 64;
- }
- if( length ) {
- FXSYS_memcpy( (void *) (ctx->buffer + left), (void *) input, length );
- }
+void CRYPT_MD5Update(void* pctx, const uint8_t* input, FX_DWORD length) {
+ struct md5_context* ctx = (struct md5_context*)pctx;
+ FX_DWORD left, fill;
+ if (!length) {
+ return;
+ }
+ left = (ctx->total[0] >> 3) & 0x3F;
+ fill = 64 - left;
+ ctx->total[0] += length << 3;
+ ctx->total[1] += length >> 29;
+ ctx->total[0] &= 0xFFFFFFFF;
+ ctx->total[1] += ctx->total[0] < length << 3;
+ if (left && length >= fill) {
+ FXSYS_memcpy((void*)(ctx->buffer + left), (void*)input, fill);
+ md5_process(ctx, ctx->buffer);
+ length -= fill;
+ input += fill;
+ left = 0;
+ }
+ while (length >= 64) {
+ md5_process(ctx, input);
+ length -= 64;
+ input += 64;
+ }
+ if (length) {
+ FXSYS_memcpy((void*)(ctx->buffer + left), (void*)input, length);
+ }
}
const uint8_t md5_padding[64] = {
- 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
-};
-void CRYPT_MD5Finish(void* pctx, uint8_t digest[16] )
-{
- struct md5_context *ctx = (struct md5_context *)pctx;
- FX_DWORD last, padn;
- uint8_t msglen[8];
- PUT_FX_DWORD( ctx->total[0], msglen, 0 );
- PUT_FX_DWORD( ctx->total[1], msglen, 4 );
- last = ( ctx->total[0] >> 3 ) & 0x3F;
- padn = ( last < 56 ) ? ( 56 - last ) : ( 120 - last );
- CRYPT_MD5Update( ctx, md5_padding, padn );
- CRYPT_MD5Update( ctx, msglen, 8 );
- PUT_FX_DWORD( ctx->state[0], digest, 0 );
- PUT_FX_DWORD( ctx->state[1], digest, 4 );
- PUT_FX_DWORD( ctx->state[2], digest, 8 );
- PUT_FX_DWORD( ctx->state[3], digest, 12 );
+ 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+void CRYPT_MD5Finish(void* pctx, uint8_t digest[16]) {
+ struct md5_context* ctx = (struct md5_context*)pctx;
+ FX_DWORD last, padn;
+ uint8_t msglen[8];
+ PUT_FX_DWORD(ctx->total[0], msglen, 0);
+ PUT_FX_DWORD(ctx->total[1], msglen, 4);
+ last = (ctx->total[0] >> 3) & 0x3F;
+ padn = (last < 56) ? (56 - last) : (120 - last);
+ CRYPT_MD5Update(ctx, md5_padding, padn);
+ CRYPT_MD5Update(ctx, msglen, 8);
+ PUT_FX_DWORD(ctx->state[0], digest, 0);
+ PUT_FX_DWORD(ctx->state[1], digest, 4);
+ PUT_FX_DWORD(ctx->state[2], digest, 8);
+ PUT_FX_DWORD(ctx->state[3], digest, 12);
}
-void CRYPT_MD5Generate(const uint8_t* input, FX_DWORD length, uint8_t digest[16])
-{
- md5_context ctx;
- CRYPT_MD5Start(&ctx);
- CRYPT_MD5Update(&ctx, input, length);
- CRYPT_MD5Finish(&ctx, digest);
+void CRYPT_MD5Generate(const uint8_t* input,
+ FX_DWORD length,
+ uint8_t digest[16]) {
+ md5_context ctx;
+ CRYPT_MD5Start(&ctx);
+ CRYPT_MD5Update(&ctx, input, length);
+ CRYPT_MD5Finish(&ctx, digest);
}
-static FX_BOOL (*g_PubKeyDecryptor)(const uint8_t* pData, FX_DWORD size, uint8_t* data_buf, FX_DWORD& data_len) = NULL;
-void CRYPT_SetPubKeyDecryptor(FX_BOOL (*func)(const uint8_t* pData, FX_DWORD size, uint8_t* data_buf, FX_DWORD& data_len))
-{
- g_PubKeyDecryptor = func;
+static FX_BOOL (*g_PubKeyDecryptor)(const uint8_t* pData,
+ FX_DWORD size,
+ uint8_t* data_buf,
+ FX_DWORD& data_len) = NULL;
+void CRYPT_SetPubKeyDecryptor(FX_BOOL (*func)(const uint8_t* pData,
+ FX_DWORD size,
+ uint8_t* data_buf,
+ FX_DWORD& data_len)) {
+ g_PubKeyDecryptor = func;
}
#ifdef __cplusplus
};
diff --git a/core/src/fdrm/crypto/fx_crypt_aes.cpp b/core/src/fdrm/crypto/fx_crypt_aes.cpp
index 4bd87105aa..751e88930c 100644
--- a/core/src/fdrm/crypto/fx_crypt_aes.cpp
+++ b/core/src/fdrm/crypto/fx_crypt_aes.cpp
@@ -11,738 +11,532 @@ extern "C" {
#define MAX_NR 14
#define MAX_NK 8
#define MAX_NB 8
-#define mulby2(x) ( ((x&0x7F) << 1) ^ (x & 0x80 ? 0x1B : 0) )
-#define GET_32BIT_MSB_FIRST(cp) \
- (((unsigned long)(unsigned char)(cp)[3]) | \
- ((unsigned long)(unsigned char)(cp)[2] << 8) | \
- ((unsigned long)(unsigned char)(cp)[1] << 16) | \
- ((unsigned long)(unsigned char)(cp)[0] << 24))
-#define PUT_32BIT_MSB_FIRST(cp, value) do { \
- (cp)[3] = (value); \
- (cp)[2] = (value) >> 8; \
- (cp)[1] = (value) >> 16; \
- (cp)[0] = (value) >> 24; } while (0)
+#define mulby2(x) (((x & 0x7F) << 1) ^ (x & 0x80 ? 0x1B : 0))
+#define GET_32BIT_MSB_FIRST(cp) \
+ (((unsigned long)(unsigned char)(cp)[3]) | \
+ ((unsigned long)(unsigned char)(cp)[2] << 8) | \
+ ((unsigned long)(unsigned char)(cp)[1] << 16) | \
+ ((unsigned long)(unsigned char)(cp)[0] << 24))
+#define PUT_32BIT_MSB_FIRST(cp, value) \
+ do { \
+ (cp)[3] = (value); \
+ (cp)[2] = (value) >> 8; \
+ (cp)[1] = (value) >> 16; \
+ (cp)[0] = (value) >> 24; \
+ } while (0)
struct AESContext {
- unsigned int keysched[(MAX_NR + 1) * MAX_NB];
- unsigned int invkeysched[(MAX_NR + 1) * MAX_NB];
- void (*encrypt) (AESContext * ctx, unsigned int * block);
- void (*decrypt) (AESContext * ctx, unsigned int * block);
- unsigned int iv[MAX_NB];
- int Nb, Nr;
+ unsigned int keysched[(MAX_NR + 1) * MAX_NB];
+ unsigned int invkeysched[(MAX_NR + 1) * MAX_NB];
+ void (*encrypt)(AESContext* ctx, unsigned int* block);
+ void (*decrypt)(AESContext* ctx, unsigned int* block);
+ unsigned int iv[MAX_NB];
+ int Nb, Nr;
};
static const unsigned char Sbox[256] = {
- 0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5,
- 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76,
- 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0,
- 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0,
- 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc,
- 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15,
- 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a,
- 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75,
- 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0,
- 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84,
- 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b,
- 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf,
- 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85,
- 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8,
- 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5,
- 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2,
- 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17,
- 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73,
- 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88,
- 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb,
- 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c,
- 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79,
- 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9,
- 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08,
- 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6,
- 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a,
- 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e,
- 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e,
- 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94,
- 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf,
- 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68,
- 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16
-};
+ 0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b,
+ 0xfe, 0xd7, 0xab, 0x76, 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0,
+ 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, 0xb7, 0xfd, 0x93, 0x26,
+ 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15,
+ 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2,
+ 0xeb, 0x27, 0xb2, 0x75, 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0,
+ 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, 0x53, 0xd1, 0x00, 0xed,
+ 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf,
+ 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f,
+ 0x50, 0x3c, 0x9f, 0xa8, 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5,
+ 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, 0xcd, 0x0c, 0x13, 0xec,
+ 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73,
+ 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14,
+ 0xde, 0x5e, 0x0b, 0xdb, 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c,
+ 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, 0xe7, 0xc8, 0x37, 0x6d,
+ 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08,
+ 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f,
+ 0x4b, 0xbd, 0x8b, 0x8a, 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e,
+ 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, 0xe1, 0xf8, 0x98, 0x11,
+ 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf,
+ 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f,
+ 0xb0, 0x54, 0xbb, 0x16};
static const unsigned char Sboxinv[256] = {
- 0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38,
- 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb,
- 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87,
- 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb,
- 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d,
- 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e,
- 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2,
- 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25,
- 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16,
- 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92,
- 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda,
- 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84,
- 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a,
- 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06,
- 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02,
- 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b,
- 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea,
- 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73,
- 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85,
- 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e,
- 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89,
- 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b,
- 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20,
- 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4,
- 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31,
- 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f,
- 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d,
- 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef,
- 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0,
- 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61,
- 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26,
- 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d
-};
+ 0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e,
+ 0x81, 0xf3, 0xd7, 0xfb, 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87,
+ 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, 0x54, 0x7b, 0x94, 0x32,
+ 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e,
+ 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49,
+ 0x6d, 0x8b, 0xd1, 0x25, 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16,
+ 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, 0x6c, 0x70, 0x48, 0x50,
+ 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84,
+ 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05,
+ 0xb8, 0xb3, 0x45, 0x06, 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02,
+ 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, 0x3a, 0x91, 0x11, 0x41,
+ 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73,
+ 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8,
+ 0x1c, 0x75, 0xdf, 0x6e, 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89,
+ 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, 0xfc, 0x56, 0x3e, 0x4b,
+ 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4,
+ 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59,
+ 0x27, 0x80, 0xec, 0x5f, 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d,
+ 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, 0xa0, 0xe0, 0x3b, 0x4d,
+ 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61,
+ 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63,
+ 0x55, 0x21, 0x0c, 0x7d};
static const unsigned int E0[256] = {
- 0xc66363a5, 0xf87c7c84, 0xee777799, 0xf67b7b8d,
- 0xfff2f20d, 0xd66b6bbd, 0xde6f6fb1, 0x91c5c554,
- 0x60303050, 0x02010103, 0xce6767a9, 0x562b2b7d,
- 0xe7fefe19, 0xb5d7d762, 0x4dababe6, 0xec76769a,
- 0x8fcaca45, 0x1f82829d, 0x89c9c940, 0xfa7d7d87,
- 0xeffafa15, 0xb25959eb, 0x8e4747c9, 0xfbf0f00b,
- 0x41adadec, 0xb3d4d467, 0x5fa2a2fd, 0x45afafea,
- 0x239c9cbf, 0x53a4a4f7, 0xe4727296, 0x9bc0c05b,
- 0x75b7b7c2, 0xe1fdfd1c, 0x3d9393ae, 0x4c26266a,
- 0x6c36365a, 0x7e3f3f41, 0xf5f7f702, 0x83cccc4f,
- 0x6834345c, 0x51a5a5f4, 0xd1e5e534, 0xf9f1f108,
- 0xe2717193, 0xabd8d873, 0x62313153, 0x2a15153f,
- 0x0804040c, 0x95c7c752, 0x46232365, 0x9dc3c35e,
- 0x30181828, 0x379696a1, 0x0a05050f, 0x2f9a9ab5,
- 0x0e070709, 0x24121236, 0x1b80809b, 0xdfe2e23d,
- 0xcdebeb26, 0x4e272769, 0x7fb2b2cd, 0xea75759f,
- 0x1209091b, 0x1d83839e, 0x582c2c74, 0x341a1a2e,
- 0x361b1b2d, 0xdc6e6eb2, 0xb45a5aee, 0x5ba0a0fb,
- 0xa45252f6, 0x763b3b4d, 0xb7d6d661, 0x7db3b3ce,
- 0x5229297b, 0xdde3e33e, 0x5e2f2f71, 0x13848497,
- 0xa65353f5, 0xb9d1d168, 0x00000000, 0xc1eded2c,
- 0x40202060, 0xe3fcfc1f, 0x79b1b1c8, 0xb65b5bed,
- 0xd46a6abe, 0x8dcbcb46, 0x67bebed9, 0x7239394b,
- 0x944a4ade, 0x984c4cd4, 0xb05858e8, 0x85cfcf4a,
- 0xbbd0d06b, 0xc5efef2a, 0x4faaaae5, 0xedfbfb16,
- 0x864343c5, 0x9a4d4dd7, 0x66333355, 0x11858594,
- 0x8a4545cf, 0xe9f9f910, 0x04020206, 0xfe7f7f81,
- 0xa05050f0, 0x783c3c44, 0x259f9fba, 0x4ba8a8e3,
- 0xa25151f3, 0x5da3a3fe, 0x804040c0, 0x058f8f8a,
- 0x3f9292ad, 0x219d9dbc, 0x70383848, 0xf1f5f504,
- 0x63bcbcdf, 0x77b6b6c1, 0xafdada75, 0x42212163,
- 0x20101030, 0xe5ffff1a, 0xfdf3f30e, 0xbfd2d26d,
- 0x81cdcd4c, 0x180c0c14, 0x26131335, 0xc3ecec2f,
- 0xbe5f5fe1, 0x359797a2, 0x884444cc, 0x2e171739,
- 0x93c4c457, 0x55a7a7f2, 0xfc7e7e82, 0x7a3d3d47,
- 0xc86464ac, 0xba5d5de7, 0x3219192b, 0xe6737395,
- 0xc06060a0, 0x19818198, 0x9e4f4fd1, 0xa3dcdc7f,
- 0x44222266, 0x542a2a7e, 0x3b9090ab, 0x0b888883,
- 0x8c4646ca, 0xc7eeee29, 0x6bb8b8d3, 0x2814143c,
- 0xa7dede79, 0xbc5e5ee2, 0x160b0b1d, 0xaddbdb76,
- 0xdbe0e03b, 0x64323256, 0x743a3a4e, 0x140a0a1e,
- 0x924949db, 0x0c06060a, 0x4824246c, 0xb85c5ce4,
- 0x9fc2c25d, 0xbdd3d36e, 0x43acacef, 0xc46262a6,
- 0x399191a8, 0x319595a4, 0xd3e4e437, 0xf279798b,
- 0xd5e7e732, 0x8bc8c843, 0x6e373759, 0xda6d6db7,
- 0x018d8d8c, 0xb1d5d564, 0x9c4e4ed2, 0x49a9a9e0,
- 0xd86c6cb4, 0xac5656fa, 0xf3f4f407, 0xcfeaea25,
- 0xca6565af, 0xf47a7a8e, 0x47aeaee9, 0x10080818,
- 0x6fbabad5, 0xf0787888, 0x4a25256f, 0x5c2e2e72,
- 0x381c1c24, 0x57a6a6f1, 0x73b4b4c7, 0x97c6c651,
- 0xcbe8e823, 0xa1dddd7c, 0xe874749c, 0x3e1f1f21,
- 0x964b4bdd, 0x61bdbddc, 0x0d8b8b86, 0x0f8a8a85,
- 0xe0707090, 0x7c3e3e42, 0x71b5b5c4, 0xcc6666aa,
- 0x904848d8, 0x06030305, 0xf7f6f601, 0x1c0e0e12,
- 0xc26161a3, 0x6a35355f, 0xae5757f9, 0x69b9b9d0,
- 0x17868691, 0x99c1c158, 0x3a1d1d27, 0x279e9eb9,
- 0xd9e1e138, 0xebf8f813, 0x2b9898b3, 0x22111133,
- 0xd26969bb, 0xa9d9d970, 0x078e8e89, 0x339494a7,
- 0x2d9b9bb6, 0x3c1e1e22, 0x15878792, 0xc9e9e920,
- 0x87cece49, 0xaa5555ff, 0x50282878, 0xa5dfdf7a,
- 0x038c8c8f, 0x59a1a1f8, 0x09898980, 0x1a0d0d17,
- 0x65bfbfda, 0xd7e6e631, 0x844242c6, 0xd06868b8,
- 0x824141c3, 0x299999b0, 0x5a2d2d77, 0x1e0f0f11,
+ 0xc66363a5, 0xf87c7c84, 0xee777799, 0xf67b7b8d, 0xfff2f20d, 0xd66b6bbd,
+ 0xde6f6fb1, 0x91c5c554, 0x60303050, 0x02010103, 0xce6767a9, 0x562b2b7d,
+ 0xe7fefe19, 0xb5d7d762, 0x4dababe6, 0xec76769a, 0x8fcaca45, 0x1f82829d,
+ 0x89c9c940, 0xfa7d7d87, 0xeffafa15, 0xb25959eb, 0x8e4747c9, 0xfbf0f00b,
+ 0x41adadec, 0xb3d4d467, 0x5fa2a2fd, 0x45afafea, 0x239c9cbf, 0x53a4a4f7,
+ 0xe4727296, 0x9bc0c05b, 0x75b7b7c2, 0xe1fdfd1c, 0x3d9393ae, 0x4c26266a,
+ 0x6c36365a, 0x7e3f3f41, 0xf5f7f702, 0x83cccc4f, 0x6834345c, 0x51a5a5f4,
+ 0xd1e5e534, 0xf9f1f108, 0xe2717193, 0xabd8d873, 0x62313153, 0x2a15153f,
+ 0x0804040c, 0x95c7c752, 0x46232365, 0x9dc3c35e, 0x30181828, 0x379696a1,
+ 0x0a05050f, 0x2f9a9ab5, 0x0e070709, 0x24121236, 0x1b80809b, 0xdfe2e23d,
+ 0xcdebeb26, 0x4e272769, 0x7fb2b2cd, 0xea75759f, 0x1209091b, 0x1d83839e,
+ 0x582c2c74, 0x341a1a2e, 0x361b1b2d, 0xdc6e6eb2, 0xb45a5aee, 0x5ba0a0fb,
+ 0xa45252f6, 0x763b3b4d, 0xb7d6d661, 0x7db3b3ce, 0x5229297b, 0xdde3e33e,
+ 0x5e2f2f71, 0x13848497, 0xa65353f5, 0xb9d1d168, 0x00000000, 0xc1eded2c,
+ 0x40202060, 0xe3fcfc1f, 0x79b1b1c8, 0xb65b5bed, 0xd46a6abe, 0x8dcbcb46,
+ 0x67bebed9, 0x7239394b, 0x944a4ade, 0x984c4cd4, 0xb05858e8, 0x85cfcf4a,
+ 0xbbd0d06b, 0xc5efef2a, 0x4faaaae5, 0xedfbfb16, 0x864343c5, 0x9a4d4dd7,
+ 0x66333355, 0x11858594, 0x8a4545cf, 0xe9f9f910, 0x04020206, 0xfe7f7f81,
+ 0xa05050f0, 0x783c3c44, 0x259f9fba, 0x4ba8a8e3, 0xa25151f3, 0x5da3a3fe,
+ 0x804040c0, 0x058f8f8a, 0x3f9292ad, 0x219d9dbc, 0x70383848, 0xf1f5f504,
+ 0x63bcbcdf, 0x77b6b6c1, 0xafdada75, 0x42212163, 0x20101030, 0xe5ffff1a,
+ 0xfdf3f30e, 0xbfd2d26d, 0x81cdcd4c, 0x180c0c14, 0x26131335, 0xc3ecec2f,
+ 0xbe5f5fe1, 0x359797a2, 0x884444cc, 0x2e171739, 0x93c4c457, 0x55a7a7f2,
+ 0xfc7e7e82, 0x7a3d3d47, 0xc86464ac, 0xba5d5de7, 0x3219192b, 0xe6737395,
+ 0xc06060a0, 0x19818198, 0x9e4f4fd1, 0xa3dcdc7f, 0x44222266, 0x542a2a7e,
+ 0x3b9090ab, 0x0b888883, 0x8c4646ca, 0xc7eeee29, 0x6bb8b8d3, 0x2814143c,
+ 0xa7dede79, 0xbc5e5ee2, 0x160b0b1d, 0xaddbdb76, 0xdbe0e03b, 0x64323256,
+ 0x743a3a4e, 0x140a0a1e, 0x924949db, 0x0c06060a, 0x4824246c, 0xb85c5ce4,
+ 0x9fc2c25d, 0xbdd3d36e, 0x43acacef, 0xc46262a6, 0x399191a8, 0x319595a4,
+ 0xd3e4e437, 0xf279798b, 0xd5e7e732, 0x8bc8c843, 0x6e373759, 0xda6d6db7,
+ 0x018d8d8c, 0xb1d5d564, 0x9c4e4ed2, 0x49a9a9e0, 0xd86c6cb4, 0xac5656fa,
+ 0xf3f4f407, 0xcfeaea25, 0xca6565af, 0xf47a7a8e, 0x47aeaee9, 0x10080818,
+ 0x6fbabad5, 0xf0787888, 0x4a25256f, 0x5c2e2e72, 0x381c1c24, 0x57a6a6f1,
+ 0x73b4b4c7, 0x97c6c651, 0xcbe8e823, 0xa1dddd7c, 0xe874749c, 0x3e1f1f21,
+ 0x964b4bdd, 0x61bdbddc, 0x0d8b8b86, 0x0f8a8a85, 0xe0707090, 0x7c3e3e42,
+ 0x71b5b5c4, 0xcc6666aa, 0x904848d8, 0x06030305, 0xf7f6f601, 0x1c0e0e12,
+ 0xc26161a3, 0x6a35355f, 0xae5757f9, 0x69b9b9d0, 0x17868691, 0x99c1c158,
+ 0x3a1d1d27, 0x279e9eb9, 0xd9e1e138, 0xebf8f813, 0x2b9898b3, 0x22111133,
+ 0xd26969bb, 0xa9d9d970, 0x078e8e89, 0x339494a7, 0x2d9b9bb6, 0x3c1e1e22,
+ 0x15878792, 0xc9e9e920, 0x87cece49, 0xaa5555ff, 0x50282878, 0xa5dfdf7a,
+ 0x038c8c8f, 0x59a1a1f8, 0x09898980, 0x1a0d0d17, 0x65bfbfda, 0xd7e6e631,
+ 0x844242c6, 0xd06868b8, 0x824141c3, 0x299999b0, 0x5a2d2d77, 0x1e0f0f11,
0x7bb0b0cb, 0xa85454fc, 0x6dbbbbd6, 0x2c16163a,
};
static const unsigned int E1[256] = {
- 0xa5c66363, 0x84f87c7c, 0x99ee7777, 0x8df67b7b,
- 0x0dfff2f2, 0xbdd66b6b, 0xb1de6f6f, 0x5491c5c5,
- 0x50603030, 0x03020101, 0xa9ce6767, 0x7d562b2b,
- 0x19e7fefe, 0x62b5d7d7, 0xe64dabab, 0x9aec7676,
- 0x458fcaca, 0x9d1f8282, 0x4089c9c9, 0x87fa7d7d,
- 0x15effafa, 0xebb25959, 0xc98e4747, 0x0bfbf0f0,
- 0xec41adad, 0x67b3d4d4, 0xfd5fa2a2, 0xea45afaf,
- 0xbf239c9c, 0xf753a4a4, 0x96e47272, 0x5b9bc0c0,
- 0xc275b7b7, 0x1ce1fdfd, 0xae3d9393, 0x6a4c2626,
- 0x5a6c3636, 0x417e3f3f, 0x02f5f7f7, 0x4f83cccc,
- 0x5c683434, 0xf451a5a5, 0x34d1e5e5, 0x08f9f1f1,
- 0x93e27171, 0x73abd8d8, 0x53623131, 0x3f2a1515,
- 0x0c080404, 0x5295c7c7, 0x65462323, 0x5e9dc3c3,
- 0x28301818, 0xa1379696, 0x0f0a0505, 0xb52f9a9a,
- 0x090e0707, 0x36241212, 0x9b1b8080, 0x3ddfe2e2,
- 0x26cdebeb, 0x694e2727, 0xcd7fb2b2, 0x9fea7575,
- 0x1b120909, 0x9e1d8383, 0x74582c2c, 0x2e341a1a,
- 0x2d361b1b, 0xb2dc6e6e, 0xeeb45a5a, 0xfb5ba0a0,
- 0xf6a45252, 0x4d763b3b, 0x61b7d6d6, 0xce7db3b3,
- 0x7b522929, 0x3edde3e3, 0x715e2f2f, 0x97138484,
- 0xf5a65353, 0x68b9d1d1, 0x00000000, 0x2cc1eded,
- 0x60402020, 0x1fe3fcfc, 0xc879b1b1, 0xedb65b5b,
- 0xbed46a6a, 0x468dcbcb, 0xd967bebe, 0x4b723939,
- 0xde944a4a, 0xd4984c4c, 0xe8b05858, 0x4a85cfcf,
- 0x6bbbd0d0, 0x2ac5efef, 0xe54faaaa, 0x16edfbfb,
- 0xc5864343, 0xd79a4d4d, 0x55663333, 0x94118585,
- 0xcf8a4545, 0x10e9f9f9, 0x06040202, 0x81fe7f7f,
- 0xf0a05050, 0x44783c3c, 0xba259f9f, 0xe34ba8a8,
- 0xf3a25151, 0xfe5da3a3, 0xc0804040, 0x8a058f8f,
- 0xad3f9292, 0xbc219d9d, 0x48703838, 0x04f1f5f5,
- 0xdf63bcbc, 0xc177b6b6, 0x75afdada, 0x63422121,
- 0x30201010, 0x1ae5ffff, 0x0efdf3f3, 0x6dbfd2d2,
- 0x4c81cdcd, 0x14180c0c, 0x35261313, 0x2fc3ecec,
- 0xe1be5f5f, 0xa2359797, 0xcc884444, 0x392e1717,
- 0x5793c4c4, 0xf255a7a7, 0x82fc7e7e, 0x477a3d3d,
- 0xacc86464, 0xe7ba5d5d, 0x2b321919, 0x95e67373,
- 0xa0c06060, 0x98198181, 0xd19e4f4f, 0x7fa3dcdc,
- 0x66442222, 0x7e542a2a, 0xab3b9090, 0x830b8888,
- 0xca8c4646, 0x29c7eeee, 0xd36bb8b8, 0x3c281414,
- 0x79a7dede, 0xe2bc5e5e, 0x1d160b0b, 0x76addbdb,
- 0x3bdbe0e0, 0x56643232, 0x4e743a3a, 0x1e140a0a,
- 0xdb924949, 0x0a0c0606, 0x6c482424, 0xe4b85c5c,
- 0x5d9fc2c2, 0x6ebdd3d3, 0xef43acac, 0xa6c46262,
- 0xa8399191, 0xa4319595, 0x37d3e4e4, 0x8bf27979,
- 0x32d5e7e7, 0x438bc8c8, 0x596e3737, 0xb7da6d6d,
- 0x8c018d8d, 0x64b1d5d5, 0xd29c4e4e, 0xe049a9a9,
- 0xb4d86c6c, 0xfaac5656, 0x07f3f4f4, 0x25cfeaea,
- 0xafca6565, 0x8ef47a7a, 0xe947aeae, 0x18100808,
- 0xd56fbaba, 0x88f07878, 0x6f4a2525, 0x725c2e2e,
- 0x24381c1c, 0xf157a6a6, 0xc773b4b4, 0x5197c6c6,
- 0x23cbe8e8, 0x7ca1dddd, 0x9ce87474, 0x213e1f1f,
- 0xdd964b4b, 0xdc61bdbd, 0x860d8b8b, 0x850f8a8a,
- 0x90e07070, 0x427c3e3e, 0xc471b5b5, 0xaacc6666,
- 0xd8904848, 0x05060303, 0x01f7f6f6, 0x121c0e0e,
- 0xa3c26161, 0x5f6a3535, 0xf9ae5757, 0xd069b9b9,
- 0x91178686, 0x5899c1c1, 0x273a1d1d, 0xb9279e9e,
- 0x38d9e1e1, 0x13ebf8f8, 0xb32b9898, 0x33221111,
- 0xbbd26969, 0x70a9d9d9, 0x89078e8e, 0xa7339494,
- 0xb62d9b9b, 0x223c1e1e, 0x92158787, 0x20c9e9e9,
- 0x4987cece, 0xffaa5555, 0x78502828, 0x7aa5dfdf,
- 0x8f038c8c, 0xf859a1a1, 0x80098989, 0x171a0d0d,
- 0xda65bfbf, 0x31d7e6e6, 0xc6844242, 0xb8d06868,
- 0xc3824141, 0xb0299999, 0x775a2d2d, 0x111e0f0f,
+ 0xa5c66363, 0x84f87c7c, 0x99ee7777, 0x8df67b7b, 0x0dfff2f2, 0xbdd66b6b,
+ 0xb1de6f6f, 0x5491c5c5, 0x50603030, 0x03020101, 0xa9ce6767, 0x7d562b2b,
+ 0x19e7fefe, 0x62b5d7d7, 0xe64dabab, 0x9aec7676, 0x458fcaca, 0x9d1f8282,
+ 0x4089c9c9, 0x87fa7d7d, 0x15effafa, 0xebb25959, 0xc98e4747, 0x0bfbf0f0,
+ 0xec41adad, 0x67b3d4d4, 0xfd5fa2a2, 0xea45afaf, 0xbf239c9c, 0xf753a4a4,
+ 0x96e47272, 0x5b9bc0c0, 0xc275b7b7, 0x1ce1fdfd, 0xae3d9393, 0x6a4c2626,
+ 0x5a6c3636, 0x417e3f3f, 0x02f5f7f7, 0x4f83cccc, 0x5c683434, 0xf451a5a5,
+ 0x34d1e5e5, 0x08f9f1f1, 0x93e27171, 0x73abd8d8, 0x53623131, 0x3f2a1515,
+ 0x0c080404, 0x5295c7c7, 0x65462323, 0x5e9dc3c3, 0x28301818, 0xa1379696,
+ 0x0f0a0505, 0xb52f9a9a, 0x090e0707, 0x36241212, 0x9b1b8080, 0x3ddfe2e2,
+ 0x26cdebeb, 0x694e2727, 0xcd7fb2b2, 0x9fea7575, 0x1b120909, 0x9e1d8383,
+ 0x74582c2c, 0x2e341a1a, 0x2d361b1b, 0xb2dc6e6e, 0xeeb45a5a, 0xfb5ba0a0,
+ 0xf6a45252, 0x4d763b3b, 0x61b7d6d6, 0xce7db3b3, 0x7b522929, 0x3edde3e3,
+ 0x715e2f2f, 0x97138484, 0xf5a65353, 0x68b9d1d1, 0x00000000, 0x2cc1eded,
+ 0x60402020, 0x1fe3fcfc, 0xc879b1b1, 0xedb65b5b, 0xbed46a6a, 0x468dcbcb,
+ 0xd967bebe, 0x4b723939, 0xde944a4a, 0xd4984c4c, 0xe8b05858, 0x4a85cfcf,
+ 0x6bbbd0d0, 0x2ac5efef, 0xe54faaaa, 0x16edfbfb, 0xc5864343, 0xd79a4d4d,
+ 0x55663333, 0x94118585, 0xcf8a4545, 0x10e9f9f9, 0x06040202, 0x81fe7f7f,
+ 0xf0a05050, 0x44783c3c, 0xba259f9f, 0xe34ba8a8, 0xf3a25151, 0xfe5da3a3,
+ 0xc0804040, 0x8a058f8f, 0xad3f9292, 0xbc219d9d, 0x48703838, 0x04f1f5f5,
+ 0xdf63bcbc, 0xc177b6b6, 0x75afdada, 0x63422121, 0x30201010, 0x1ae5ffff,
+ 0x0efdf3f3, 0x6dbfd2d2, 0x4c81cdcd, 0x14180c0c, 0x35261313, 0x2fc3ecec,
+ 0xe1be5f5f, 0xa2359797, 0xcc884444, 0x392e1717, 0x5793c4c4, 0xf255a7a7,
+ 0x82fc7e7e, 0x477a3d3d, 0xacc86464, 0xe7ba5d5d, 0x2b321919, 0x95e67373,
+ 0xa0c06060, 0x98198181, 0xd19e4f4f, 0x7fa3dcdc, 0x66442222, 0x7e542a2a,
+ 0xab3b9090, 0x830b8888, 0xca8c4646, 0x29c7eeee, 0xd36bb8b8, 0x3c281414,
+ 0x79a7dede, 0xe2bc5e5e, 0x1d160b0b, 0x76addbdb, 0x3bdbe0e0, 0x56643232,
+ 0x4e743a3a, 0x1e140a0a, 0xdb924949, 0x0a0c0606, 0x6c482424, 0xe4b85c5c,
+ 0x5d9fc2c2, 0x6ebdd3d3, 0xef43acac, 0xa6c46262, 0xa8399191, 0xa4319595,
+ 0x37d3e4e4, 0x8bf27979, 0x32d5e7e7, 0x438bc8c8, 0x596e3737, 0xb7da6d6d,
+ 0x8c018d8d, 0x64b1d5d5, 0xd29c4e4e, 0xe049a9a9, 0xb4d86c6c, 0xfaac5656,
+ 0x07f3f4f4, 0x25cfeaea, 0xafca6565, 0x8ef47a7a, 0xe947aeae, 0x18100808,
+ 0xd56fbaba, 0x88f07878, 0x6f4a2525, 0x725c2e2e, 0x24381c1c, 0xf157a6a6,
+ 0xc773b4b4, 0x5197c6c6, 0x23cbe8e8, 0x7ca1dddd, 0x9ce87474, 0x213e1f1f,
+ 0xdd964b4b, 0xdc61bdbd, 0x860d8b8b, 0x850f8a8a, 0x90e07070, 0x427c3e3e,
+ 0xc471b5b5, 0xaacc6666, 0xd8904848, 0x05060303, 0x01f7f6f6, 0x121c0e0e,
+ 0xa3c26161, 0x5f6a3535, 0xf9ae5757, 0xd069b9b9, 0x91178686, 0x5899c1c1,
+ 0x273a1d1d, 0xb9279e9e, 0x38d9e1e1, 0x13ebf8f8, 0xb32b9898, 0x33221111,
+ 0xbbd26969, 0x70a9d9d9, 0x89078e8e, 0xa7339494, 0xb62d9b9b, 0x223c1e1e,
+ 0x92158787, 0x20c9e9e9, 0x4987cece, 0xffaa5555, 0x78502828, 0x7aa5dfdf,
+ 0x8f038c8c, 0xf859a1a1, 0x80098989, 0x171a0d0d, 0xda65bfbf, 0x31d7e6e6,
+ 0xc6844242, 0xb8d06868, 0xc3824141, 0xb0299999, 0x775a2d2d, 0x111e0f0f,
0xcb7bb0b0, 0xfca85454, 0xd66dbbbb, 0x3a2c1616,
};
static const unsigned int E2[256] = {
- 0x63a5c663, 0x7c84f87c, 0x7799ee77, 0x7b8df67b,
- 0xf20dfff2, 0x6bbdd66b, 0x6fb1de6f, 0xc55491c5,
- 0x30506030, 0x01030201, 0x67a9ce67, 0x2b7d562b,
- 0xfe19e7fe, 0xd762b5d7, 0xabe64dab, 0x769aec76,
- 0xca458fca, 0x829d1f82, 0xc94089c9, 0x7d87fa7d,
- 0xfa15effa, 0x59ebb259, 0x47c98e47, 0xf00bfbf0,
- 0xadec41ad, 0xd467b3d4, 0xa2fd5fa2, 0xafea45af,
- 0x9cbf239c, 0xa4f753a4, 0x7296e472, 0xc05b9bc0,
- 0xb7c275b7, 0xfd1ce1fd, 0x93ae3d93, 0x266a4c26,
- 0x365a6c36, 0x3f417e3f, 0xf702f5f7, 0xcc4f83cc,
- 0x345c6834, 0xa5f451a5, 0xe534d1e5, 0xf108f9f1,
- 0x7193e271, 0xd873abd8, 0x31536231, 0x153f2a15,
- 0x040c0804, 0xc75295c7, 0x23654623, 0xc35e9dc3,
- 0x18283018, 0x96a13796, 0x050f0a05, 0x9ab52f9a,
- 0x07090e07, 0x12362412, 0x809b1b80, 0xe23ddfe2,
- 0xeb26cdeb, 0x27694e27, 0xb2cd7fb2, 0x759fea75,
- 0x091b1209, 0x839e1d83, 0x2c74582c, 0x1a2e341a,
- 0x1b2d361b, 0x6eb2dc6e, 0x5aeeb45a, 0xa0fb5ba0,
- 0x52f6a452, 0x3b4d763b, 0xd661b7d6, 0xb3ce7db3,
- 0x297b5229, 0xe33edde3, 0x2f715e2f, 0x84971384,
- 0x53f5a653, 0xd168b9d1, 0x00000000, 0xed2cc1ed,
- 0x20604020, 0xfc1fe3fc, 0xb1c879b1, 0x5bedb65b,
- 0x6abed46a, 0xcb468dcb, 0xbed967be, 0x394b7239,
- 0x4ade944a, 0x4cd4984c, 0x58e8b058, 0xcf4a85cf,
- 0xd06bbbd0, 0xef2ac5ef, 0xaae54faa, 0xfb16edfb,
- 0x43c58643, 0x4dd79a4d, 0x33556633, 0x85941185,
- 0x45cf8a45, 0xf910e9f9, 0x02060402, 0x7f81fe7f,
- 0x50f0a050, 0x3c44783c, 0x9fba259f, 0xa8e34ba8,
- 0x51f3a251, 0xa3fe5da3, 0x40c08040, 0x8f8a058f,
- 0x92ad3f92, 0x9dbc219d, 0x38487038, 0xf504f1f5,
- 0xbcdf63bc, 0xb6c177b6, 0xda75afda, 0x21634221,
- 0x10302010, 0xff1ae5ff, 0xf30efdf3, 0xd26dbfd2,
- 0xcd4c81cd, 0x0c14180c, 0x13352613, 0xec2fc3ec,
- 0x5fe1be5f, 0x97a23597, 0x44cc8844, 0x17392e17,
- 0xc45793c4, 0xa7f255a7, 0x7e82fc7e, 0x3d477a3d,
- 0x64acc864, 0x5de7ba5d, 0x192b3219, 0x7395e673,
- 0x60a0c060, 0x81981981, 0x4fd19e4f, 0xdc7fa3dc,
- 0x22664422, 0x2a7e542a, 0x90ab3b90, 0x88830b88,
- 0x46ca8c46, 0xee29c7ee, 0xb8d36bb8, 0x143c2814,
- 0xde79a7de, 0x5ee2bc5e, 0x0b1d160b, 0xdb76addb,
- 0xe03bdbe0, 0x32566432, 0x3a4e743a, 0x0a1e140a,
- 0x49db9249, 0x060a0c06, 0x246c4824, 0x5ce4b85c,
- 0xc25d9fc2, 0xd36ebdd3, 0xacef43ac, 0x62a6c462,
- 0x91a83991, 0x95a43195, 0xe437d3e4, 0x798bf279,
- 0xe732d5e7, 0xc8438bc8, 0x37596e37, 0x6db7da6d,
- 0x8d8c018d, 0xd564b1d5, 0x4ed29c4e, 0xa9e049a9,
- 0x6cb4d86c, 0x56faac56, 0xf407f3f4, 0xea25cfea,
- 0x65afca65, 0x7a8ef47a, 0xaee947ae, 0x08181008,
- 0xbad56fba, 0x7888f078, 0x256f4a25, 0x2e725c2e,
- 0x1c24381c, 0xa6f157a6, 0xb4c773b4, 0xc65197c6,
- 0xe823cbe8, 0xdd7ca1dd, 0x749ce874, 0x1f213e1f,
- 0x4bdd964b, 0xbddc61bd, 0x8b860d8b, 0x8a850f8a,
- 0x7090e070, 0x3e427c3e, 0xb5c471b5, 0x66aacc66,
- 0x48d89048, 0x03050603, 0xf601f7f6, 0x0e121c0e,
- 0x61a3c261, 0x355f6a35, 0x57f9ae57, 0xb9d069b9,
- 0x86911786, 0xc15899c1, 0x1d273a1d, 0x9eb9279e,
- 0xe138d9e1, 0xf813ebf8, 0x98b32b98, 0x11332211,
- 0x69bbd269, 0xd970a9d9, 0x8e89078e, 0x94a73394,
- 0x9bb62d9b, 0x1e223c1e, 0x87921587, 0xe920c9e9,
- 0xce4987ce, 0x55ffaa55, 0x28785028, 0xdf7aa5df,
- 0x8c8f038c, 0xa1f859a1, 0x89800989, 0x0d171a0d,
- 0xbfda65bf, 0xe631d7e6, 0x42c68442, 0x68b8d068,
- 0x41c38241, 0x99b02999, 0x2d775a2d, 0x0f111e0f,
+ 0x63a5c663, 0x7c84f87c, 0x7799ee77, 0x7b8df67b, 0xf20dfff2, 0x6bbdd66b,
+ 0x6fb1de6f, 0xc55491c5, 0x30506030, 0x01030201, 0x67a9ce67, 0x2b7d562b,
+ 0xfe19e7fe, 0xd762b5d7, 0xabe64dab, 0x769aec76, 0xca458fca, 0x829d1f82,
+ 0xc94089c9, 0x7d87fa7d, 0xfa15effa, 0x59ebb259, 0x47c98e47, 0xf00bfbf0,
+ 0xadec41ad, 0xd467b3d4, 0xa2fd5fa2, 0xafea45af, 0x9cbf239c, 0xa4f753a4,
+ 0x7296e472, 0xc05b9bc0, 0xb7c275b7, 0xfd1ce1fd, 0x93ae3d93, 0x266a4c26,
+ 0x365a6c36, 0x3f417e3f, 0xf702f5f7, 0xcc4f83cc, 0x345c6834, 0xa5f451a5,
+ 0xe534d1e5, 0xf108f9f1, 0x7193e271, 0xd873abd8, 0x31536231, 0x153f2a15,
+ 0x040c0804, 0xc75295c7, 0x23654623, 0xc35e9dc3, 0x18283018, 0x96a13796,
+ 0x050f0a05, 0x9ab52f9a, 0x07090e07, 0x12362412, 0x809b1b80, 0xe23ddfe2,
+ 0xeb26cdeb, 0x27694e27, 0xb2cd7fb2, 0x759fea75, 0x091b1209, 0x839e1d83,
+ 0x2c74582c, 0x1a2e341a, 0x1b2d361b, 0x6eb2dc6e, 0x5aeeb45a, 0xa0fb5ba0,
+ 0x52f6a452, 0x3b4d763b, 0xd661b7d6, 0xb3ce7db3, 0x297b5229, 0xe33edde3,
+ 0x2f715e2f, 0x84971384, 0x53f5a653, 0xd168b9d1, 0x00000000, 0xed2cc1ed,
+ 0x20604020, 0xfc1fe3fc, 0xb1c879b1, 0x5bedb65b, 0x6abed46a, 0xcb468dcb,
+ 0xbed967be, 0x394b7239, 0x4ade944a, 0x4cd4984c, 0x58e8b058, 0xcf4a85cf,
+ 0xd06bbbd0, 0xef2ac5ef, 0xaae54faa, 0xfb16edfb, 0x43c58643, 0x4dd79a4d,
+ 0x33556633, 0x85941185, 0x45cf8a45, 0xf910e9f9, 0x02060402, 0x7f81fe7f,
+ 0x50f0a050, 0x3c44783c, 0x9fba259f, 0xa8e34ba8, 0x51f3a251, 0xa3fe5da3,
+ 0x40c08040, 0x8f8a058f, 0x92ad3f92, 0x9dbc219d, 0x38487038, 0xf504f1f5,
+ 0xbcdf63bc, 0xb6c177b6, 0xda75afda, 0x21634221, 0x10302010, 0xff1ae5ff,
+ 0xf30efdf3, 0xd26dbfd2, 0xcd4c81cd, 0x0c14180c, 0x13352613, 0xec2fc3ec,
+ 0x5fe1be5f, 0x97a23597, 0x44cc8844, 0x17392e17, 0xc45793c4, 0xa7f255a7,
+ 0x7e82fc7e, 0x3d477a3d, 0x64acc864, 0x5de7ba5d, 0x192b3219, 0x7395e673,
+ 0x60a0c060, 0x81981981, 0x4fd19e4f, 0xdc7fa3dc, 0x22664422, 0x2a7e542a,
+ 0x90ab3b90, 0x88830b88, 0x46ca8c46, 0xee29c7ee, 0xb8d36bb8, 0x143c2814,
+ 0xde79a7de, 0x5ee2bc5e, 0x0b1d160b, 0xdb76addb, 0xe03bdbe0, 0x32566432,
+ 0x3a4e743a, 0x0a1e140a, 0x49db9249, 0x060a0c06, 0x246c4824, 0x5ce4b85c,
+ 0xc25d9fc2, 0xd36ebdd3, 0xacef43ac, 0x62a6c462, 0x91a83991, 0x95a43195,
+ 0xe437d3e4, 0x798bf279, 0xe732d5e7, 0xc8438bc8, 0x37596e37, 0x6db7da6d,
+ 0x8d8c018d, 0xd564b1d5, 0x4ed29c4e, 0xa9e049a9, 0x6cb4d86c, 0x56faac56,
+ 0xf407f3f4, 0xea25cfea, 0x65afca65, 0x7a8ef47a, 0xaee947ae, 0x08181008,
+ 0xbad56fba, 0x7888f078, 0x256f4a25, 0x2e725c2e, 0x1c24381c, 0xa6f157a6,
+ 0xb4c773b4, 0xc65197c6, 0xe823cbe8, 0xdd7ca1dd, 0x749ce874, 0x1f213e1f,
+ 0x4bdd964b, 0xbddc61bd, 0x8b860d8b, 0x8a850f8a, 0x7090e070, 0x3e427c3e,
+ 0xb5c471b5, 0x66aacc66, 0x48d89048, 0x03050603, 0xf601f7f6, 0x0e121c0e,
+ 0x61a3c261, 0x355f6a35, 0x57f9ae57, 0xb9d069b9, 0x86911786, 0xc15899c1,
+ 0x1d273a1d, 0x9eb9279e, 0xe138d9e1, 0xf813ebf8, 0x98b32b98, 0x11332211,
+ 0x69bbd269, 0xd970a9d9, 0x8e89078e, 0x94a73394, 0x9bb62d9b, 0x1e223c1e,
+ 0x87921587, 0xe920c9e9, 0xce4987ce, 0x55ffaa55, 0x28785028, 0xdf7aa5df,
+ 0x8c8f038c, 0xa1f859a1, 0x89800989, 0x0d171a0d, 0xbfda65bf, 0xe631d7e6,
+ 0x42c68442, 0x68b8d068, 0x41c38241, 0x99b02999, 0x2d775a2d, 0x0f111e0f,
0xb0cb7bb0, 0x54fca854, 0xbbd66dbb, 0x163a2c16,
};
static const unsigned int E3[256] = {
- 0x6363a5c6, 0x7c7c84f8, 0x777799ee, 0x7b7b8df6,
- 0xf2f20dff, 0x6b6bbdd6, 0x6f6fb1de, 0xc5c55491,
- 0x30305060, 0x01010302, 0x6767a9ce, 0x2b2b7d56,
- 0xfefe19e7, 0xd7d762b5, 0xababe64d, 0x76769aec,
- 0xcaca458f, 0x82829d1f, 0xc9c94089, 0x7d7d87fa,
- 0xfafa15ef, 0x5959ebb2, 0x4747c98e, 0xf0f00bfb,
- 0xadadec41, 0xd4d467b3, 0xa2a2fd5f, 0xafafea45,
- 0x9c9cbf23, 0xa4a4f753, 0x727296e4, 0xc0c05b9b,
- 0xb7b7c275, 0xfdfd1ce1, 0x9393ae3d, 0x26266a4c,
- 0x36365a6c, 0x3f3f417e, 0xf7f702f5, 0xcccc4f83,
- 0x34345c68, 0xa5a5f451, 0xe5e534d1, 0xf1f108f9,
- 0x717193e2, 0xd8d873ab, 0x31315362, 0x15153f2a,
- 0x04040c08, 0xc7c75295, 0x23236546, 0xc3c35e9d,
- 0x18182830, 0x9696a137, 0x05050f0a, 0x9a9ab52f,
- 0x0707090e, 0x12123624, 0x80809b1b, 0xe2e23ddf,
- 0xebeb26cd, 0x2727694e, 0xb2b2cd7f, 0x75759fea,
- 0x09091b12, 0x83839e1d, 0x2c2c7458, 0x1a1a2e34,
- 0x1b1b2d36, 0x6e6eb2dc, 0x5a5aeeb4, 0xa0a0fb5b,
- 0x5252f6a4, 0x3b3b4d76, 0xd6d661b7, 0xb3b3ce7d,
- 0x29297b52, 0xe3e33edd, 0x2f2f715e, 0x84849713,
- 0x5353f5a6, 0xd1d168b9, 0x00000000, 0xeded2cc1,
- 0x20206040, 0xfcfc1fe3, 0xb1b1c879, 0x5b5bedb6,
- 0x6a6abed4, 0xcbcb468d, 0xbebed967, 0x39394b72,
- 0x4a4ade94, 0x4c4cd498, 0x5858e8b0, 0xcfcf4a85,
- 0xd0d06bbb, 0xefef2ac5, 0xaaaae54f, 0xfbfb16ed,
- 0x4343c586, 0x4d4dd79a, 0x33335566, 0x85859411,
- 0x4545cf8a, 0xf9f910e9, 0x02020604, 0x7f7f81fe,
- 0x5050f0a0, 0x3c3c4478, 0x9f9fba25, 0xa8a8e34b,
- 0x5151f3a2, 0xa3a3fe5d, 0x4040c080, 0x8f8f8a05,
- 0x9292ad3f, 0x9d9dbc21, 0x38384870, 0xf5f504f1,
- 0xbcbcdf63, 0xb6b6c177, 0xdada75af, 0x21216342,
- 0x10103020, 0xffff1ae5, 0xf3f30efd, 0xd2d26dbf,
- 0xcdcd4c81, 0x0c0c1418, 0x13133526, 0xecec2fc3,
- 0x5f5fe1be, 0x9797a235, 0x4444cc88, 0x1717392e,
- 0xc4c45793, 0xa7a7f255, 0x7e7e82fc, 0x3d3d477a,
- 0x6464acc8, 0x5d5de7ba, 0x19192b32, 0x737395e6,
- 0x6060a0c0, 0x81819819, 0x4f4fd19e, 0xdcdc7fa3,
- 0x22226644, 0x2a2a7e54, 0x9090ab3b, 0x8888830b,
- 0x4646ca8c, 0xeeee29c7, 0xb8b8d36b, 0x14143c28,
- 0xdede79a7, 0x5e5ee2bc, 0x0b0b1d16, 0xdbdb76ad,
- 0xe0e03bdb, 0x32325664, 0x3a3a4e74, 0x0a0a1e14,
- 0x4949db92, 0x06060a0c, 0x24246c48, 0x5c5ce4b8,
- 0xc2c25d9f, 0xd3d36ebd, 0xacacef43, 0x6262a6c4,
- 0x9191a839, 0x9595a431, 0xe4e437d3, 0x79798bf2,
- 0xe7e732d5, 0xc8c8438b, 0x3737596e, 0x6d6db7da,
- 0x8d8d8c01, 0xd5d564b1, 0x4e4ed29c, 0xa9a9e049,
- 0x6c6cb4d8, 0x5656faac, 0xf4f407f3, 0xeaea25cf,
- 0x6565afca, 0x7a7a8ef4, 0xaeaee947, 0x08081810,
- 0xbabad56f, 0x787888f0, 0x25256f4a, 0x2e2e725c,
- 0x1c1c2438, 0xa6a6f157, 0xb4b4c773, 0xc6c65197,
- 0xe8e823cb, 0xdddd7ca1, 0x74749ce8, 0x1f1f213e,
- 0x4b4bdd96, 0xbdbddc61, 0x8b8b860d, 0x8a8a850f,
- 0x707090e0, 0x3e3e427c, 0xb5b5c471, 0x6666aacc,
- 0x4848d890, 0x03030506, 0xf6f601f7, 0x0e0e121c,
- 0x6161a3c2, 0x35355f6a, 0x5757f9ae, 0xb9b9d069,
- 0x86869117, 0xc1c15899, 0x1d1d273a, 0x9e9eb927,
- 0xe1e138d9, 0xf8f813eb, 0x9898b32b, 0x11113322,
- 0x6969bbd2, 0xd9d970a9, 0x8e8e8907, 0x9494a733,
- 0x9b9bb62d, 0x1e1e223c, 0x87879215, 0xe9e920c9,
- 0xcece4987, 0x5555ffaa, 0x28287850, 0xdfdf7aa5,
- 0x8c8c8f03, 0xa1a1f859, 0x89898009, 0x0d0d171a,
- 0xbfbfda65, 0xe6e631d7, 0x4242c684, 0x6868b8d0,
- 0x4141c382, 0x9999b029, 0x2d2d775a, 0x0f0f111e,
+ 0x6363a5c6, 0x7c7c84f8, 0x777799ee, 0x7b7b8df6, 0xf2f20dff, 0x6b6bbdd6,
+ 0x6f6fb1de, 0xc5c55491, 0x30305060, 0x01010302, 0x6767a9ce, 0x2b2b7d56,
+ 0xfefe19e7, 0xd7d762b5, 0xababe64d, 0x76769aec, 0xcaca458f, 0x82829d1f,
+ 0xc9c94089, 0x7d7d87fa, 0xfafa15ef, 0x5959ebb2, 0x4747c98e, 0xf0f00bfb,
+ 0xadadec41, 0xd4d467b3, 0xa2a2fd5f, 0xafafea45, 0x9c9cbf23, 0xa4a4f753,
+ 0x727296e4, 0xc0c05b9b, 0xb7b7c275, 0xfdfd1ce1, 0x9393ae3d, 0x26266a4c,
+ 0x36365a6c, 0x3f3f417e, 0xf7f702f5, 0xcccc4f83, 0x34345c68, 0xa5a5f451,
+ 0xe5e534d1, 0xf1f108f9, 0x717193e2, 0xd8d873ab, 0x31315362, 0x15153f2a,
+ 0x04040c08, 0xc7c75295, 0x23236546, 0xc3c35e9d, 0x18182830, 0x9696a137,
+ 0x05050f0a, 0x9a9ab52f, 0x0707090e, 0x12123624, 0x80809b1b, 0xe2e23ddf,
+ 0xebeb26cd, 0x2727694e, 0xb2b2cd7f, 0x75759fea, 0x09091b12, 0x83839e1d,
+ 0x2c2c7458, 0x1a1a2e34, 0x1b1b2d36, 0x6e6eb2dc, 0x5a5aeeb4, 0xa0a0fb5b,
+ 0x5252f6a4, 0x3b3b4d76, 0xd6d661b7, 0xb3b3ce7d, 0x29297b52, 0xe3e33edd,
+ 0x2f2f715e, 0x84849713, 0x5353f5a6, 0xd1d168b9, 0x00000000, 0xeded2cc1,
+ 0x20206040, 0xfcfc1fe3, 0xb1b1c879, 0x5b5bedb6, 0x6a6abed4, 0xcbcb468d,
+ 0xbebed967, 0x39394b72, 0x4a4ade94, 0x4c4cd498, 0x5858e8b0, 0xcfcf4a85,
+ 0xd0d06bbb, 0xefef2ac5, 0xaaaae54f, 0xfbfb16ed, 0x4343c586, 0x4d4dd79a,
+ 0x33335566, 0x85859411, 0x4545cf8a, 0xf9f910e9, 0x02020604, 0x7f7f81fe,
+ 0x5050f0a0, 0x3c3c4478, 0x9f9fba25, 0xa8a8e34b, 0x5151f3a2, 0xa3a3fe5d,
+ 0x4040c080, 0x8f8f8a05, 0x9292ad3f, 0x9d9dbc21, 0x38384870, 0xf5f504f1,
+ 0xbcbcdf63, 0xb6b6c177, 0xdada75af, 0x21216342, 0x10103020, 0xffff1ae5,
+ 0xf3f30efd, 0xd2d26dbf, 0xcdcd4c81, 0x0c0c1418, 0x13133526, 0xecec2fc3,
+ 0x5f5fe1be, 0x9797a235, 0x4444cc88, 0x1717392e, 0xc4c45793, 0xa7a7f255,
+ 0x7e7e82fc, 0x3d3d477a, 0x6464acc8, 0x5d5de7ba, 0x19192b32, 0x737395e6,
+ 0x6060a0c0, 0x81819819, 0x4f4fd19e, 0xdcdc7fa3, 0x22226644, 0x2a2a7e54,
+ 0x9090ab3b, 0x8888830b, 0x4646ca8c, 0xeeee29c7, 0xb8b8d36b, 0x14143c28,
+ 0xdede79a7, 0x5e5ee2bc, 0x0b0b1d16, 0xdbdb76ad, 0xe0e03bdb, 0x32325664,
+ 0x3a3a4e74, 0x0a0a1e14, 0x4949db92, 0x06060a0c, 0x24246c48, 0x5c5ce4b8,
+ 0xc2c25d9f, 0xd3d36ebd, 0xacacef43, 0x6262a6c4, 0x9191a839, 0x9595a431,
+ 0xe4e437d3, 0x79798bf2, 0xe7e732d5, 0xc8c8438b, 0x3737596e, 0x6d6db7da,
+ 0x8d8d8c01, 0xd5d564b1, 0x4e4ed29c, 0xa9a9e049, 0x6c6cb4d8, 0x5656faac,
+ 0xf4f407f3, 0xeaea25cf, 0x6565afca, 0x7a7a8ef4, 0xaeaee947, 0x08081810,
+ 0xbabad56f, 0x787888f0, 0x25256f4a, 0x2e2e725c, 0x1c1c2438, 0xa6a6f157,
+ 0xb4b4c773, 0xc6c65197, 0xe8e823cb, 0xdddd7ca1, 0x74749ce8, 0x1f1f213e,
+ 0x4b4bdd96, 0xbdbddc61, 0x8b8b860d, 0x8a8a850f, 0x707090e0, 0x3e3e427c,
+ 0xb5b5c471, 0x6666aacc, 0x4848d890, 0x03030506, 0xf6f601f7, 0x0e0e121c,
+ 0x6161a3c2, 0x35355f6a, 0x5757f9ae, 0xb9b9d069, 0x86869117, 0xc1c15899,
+ 0x1d1d273a, 0x9e9eb927, 0xe1e138d9, 0xf8f813eb, 0x9898b32b, 0x11113322,
+ 0x6969bbd2, 0xd9d970a9, 0x8e8e8907, 0x9494a733, 0x9b9bb62d, 0x1e1e223c,
+ 0x87879215, 0xe9e920c9, 0xcece4987, 0x5555ffaa, 0x28287850, 0xdfdf7aa5,
+ 0x8c8c8f03, 0xa1a1f859, 0x89898009, 0x0d0d171a, 0xbfbfda65, 0xe6e631d7,
+ 0x4242c684, 0x6868b8d0, 0x4141c382, 0x9999b029, 0x2d2d775a, 0x0f0f111e,
0xb0b0cb7b, 0x5454fca8, 0xbbbbd66d, 0x16163a2c,
};
static const unsigned int D0[256] = {
- 0x51f4a750, 0x7e416553, 0x1a17a4c3, 0x3a275e96,
- 0x3bab6bcb, 0x1f9d45f1, 0xacfa58ab, 0x4be30393,
- 0x2030fa55, 0xad766df6, 0x88cc7691, 0xf5024c25,
- 0x4fe5d7fc, 0xc52acbd7, 0x26354480, 0xb562a38f,
- 0xdeb15a49, 0x25ba1b67, 0x45ea0e98, 0x5dfec0e1,
- 0xc32f7502, 0x814cf012, 0x8d4697a3, 0x6bd3f9c6,
- 0x038f5fe7, 0x15929c95, 0xbf6d7aeb, 0x955259da,
- 0xd4be832d, 0x587421d3, 0x49e06929, 0x8ec9c844,
- 0x75c2896a, 0xf48e7978, 0x99583e6b, 0x27b971dd,
- 0xbee14fb6, 0xf088ad17, 0xc920ac66, 0x7dce3ab4,
- 0x63df4a18, 0xe51a3182, 0x97513360, 0x62537f45,
- 0xb16477e0, 0xbb6bae84, 0xfe81a01c, 0xf9082b94,
- 0x70486858, 0x8f45fd19, 0x94de6c87, 0x527bf8b7,
- 0xab73d323, 0x724b02e2, 0xe31f8f57, 0x6655ab2a,
- 0xb2eb2807, 0x2fb5c203, 0x86c57b9a, 0xd33708a5,
- 0x302887f2, 0x23bfa5b2, 0x02036aba, 0xed16825c,
- 0x8acf1c2b, 0xa779b492, 0xf307f2f0, 0x4e69e2a1,
- 0x65daf4cd, 0x0605bed5, 0xd134621f, 0xc4a6fe8a,
- 0x342e539d, 0xa2f355a0, 0x058ae132, 0xa4f6eb75,
- 0x0b83ec39, 0x4060efaa, 0x5e719f06, 0xbd6e1051,
- 0x3e218af9, 0x96dd063d, 0xdd3e05ae, 0x4de6bd46,
- 0x91548db5, 0x71c45d05, 0x0406d46f, 0x605015ff,
- 0x1998fb24, 0xd6bde997, 0x894043cc, 0x67d99e77,
- 0xb0e842bd, 0x07898b88, 0xe7195b38, 0x79c8eedb,
- 0xa17c0a47, 0x7c420fe9, 0xf8841ec9, 0x00000000,
- 0x09808683, 0x322bed48, 0x1e1170ac, 0x6c5a724e,
- 0xfd0efffb, 0x0f853856, 0x3daed51e, 0x362d3927,
- 0x0a0fd964, 0x685ca621, 0x9b5b54d1, 0x24362e3a,
- 0x0c0a67b1, 0x9357e70f, 0xb4ee96d2, 0x1b9b919e,
- 0x80c0c54f, 0x61dc20a2, 0x5a774b69, 0x1c121a16,
- 0xe293ba0a, 0xc0a02ae5, 0x3c22e043, 0x121b171d,
- 0x0e090d0b, 0xf28bc7ad, 0x2db6a8b9, 0x141ea9c8,
- 0x57f11985, 0xaf75074c, 0xee99ddbb, 0xa37f60fd,
- 0xf701269f, 0x5c72f5bc, 0x44663bc5, 0x5bfb7e34,
- 0x8b432976, 0xcb23c6dc, 0xb6edfc68, 0xb8e4f163,
- 0xd731dcca, 0x42638510, 0x13972240, 0x84c61120,
- 0x854a247d, 0xd2bb3df8, 0xaef93211, 0xc729a16d,
- 0x1d9e2f4b, 0xdcb230f3, 0x0d8652ec, 0x77c1e3d0,
- 0x2bb3166c, 0xa970b999, 0x119448fa, 0x47e96422,
- 0xa8fc8cc4, 0xa0f03f1a, 0x567d2cd8, 0x223390ef,
- 0x87494ec7, 0xd938d1c1, 0x8ccaa2fe, 0x98d40b36,
- 0xa6f581cf, 0xa57ade28, 0xdab78e26, 0x3fadbfa4,
- 0x2c3a9de4, 0x5078920d, 0x6a5fcc9b, 0x547e4662,
- 0xf68d13c2, 0x90d8b8e8, 0x2e39f75e, 0x82c3aff5,
- 0x9f5d80be, 0x69d0937c, 0x6fd52da9, 0xcf2512b3,
- 0xc8ac993b, 0x10187da7, 0xe89c636e, 0xdb3bbb7b,
- 0xcd267809, 0x6e5918f4, 0xec9ab701, 0x834f9aa8,
- 0xe6956e65, 0xaaffe67e, 0x21bccf08, 0xef15e8e6,
- 0xbae79bd9, 0x4a6f36ce, 0xea9f09d4, 0x29b07cd6,
- 0x31a4b2af, 0x2a3f2331, 0xc6a59430, 0x35a266c0,
- 0x744ebc37, 0xfc82caa6, 0xe090d0b0, 0x33a7d815,
- 0xf104984a, 0x41ecdaf7, 0x7fcd500e, 0x1791f62f,
- 0x764dd68d, 0x43efb04d, 0xccaa4d54, 0xe49604df,
- 0x9ed1b5e3, 0x4c6a881b, 0xc12c1fb8, 0x4665517f,
- 0x9d5eea04, 0x018c355d, 0xfa877473, 0xfb0b412e,
- 0xb3671d5a, 0x92dbd252, 0xe9105633, 0x6dd64713,
- 0x9ad7618c, 0x37a10c7a, 0x59f8148e, 0xeb133c89,
- 0xcea927ee, 0xb761c935, 0xe11ce5ed, 0x7a47b13c,
- 0x9cd2df59, 0x55f2733f, 0x1814ce79, 0x73c737bf,
- 0x53f7cdea, 0x5ffdaa5b, 0xdf3d6f14, 0x7844db86,
- 0xcaaff381, 0xb968c43e, 0x3824342c, 0xc2a3405f,
- 0x161dc372, 0xbce2250c, 0x283c498b, 0xff0d9541,
- 0x39a80171, 0x080cb3de, 0xd8b4e49c, 0x6456c190,
+ 0x51f4a750, 0x7e416553, 0x1a17a4c3, 0x3a275e96, 0x3bab6bcb, 0x1f9d45f1,
+ 0xacfa58ab, 0x4be30393, 0x2030fa55, 0xad766df6, 0x88cc7691, 0xf5024c25,
+ 0x4fe5d7fc, 0xc52acbd7, 0x26354480, 0xb562a38f, 0xdeb15a49, 0x25ba1b67,
+ 0x45ea0e98, 0x5dfec0e1, 0xc32f7502, 0x814cf012, 0x8d4697a3, 0x6bd3f9c6,
+ 0x038f5fe7, 0x15929c95, 0xbf6d7aeb, 0x955259da, 0xd4be832d, 0x587421d3,
+ 0x49e06929, 0x8ec9c844, 0x75c2896a, 0xf48e7978, 0x99583e6b, 0x27b971dd,
+ 0xbee14fb6, 0xf088ad17, 0xc920ac66, 0x7dce3ab4, 0x63df4a18, 0xe51a3182,
+ 0x97513360, 0x62537f45, 0xb16477e0, 0xbb6bae84, 0xfe81a01c, 0xf9082b94,
+ 0x70486858, 0x8f45fd19, 0x94de6c87, 0x527bf8b7, 0xab73d323, 0x724b02e2,
+ 0xe31f8f57, 0x6655ab2a, 0xb2eb2807, 0x2fb5c203, 0x86c57b9a, 0xd33708a5,
+ 0x302887f2, 0x23bfa5b2, 0x02036aba, 0xed16825c, 0x8acf1c2b, 0xa779b492,
+ 0xf307f2f0, 0x4e69e2a1, 0x65daf4cd, 0x0605bed5, 0xd134621f, 0xc4a6fe8a,
+ 0x342e539d, 0xa2f355a0, 0x058ae132, 0xa4f6eb75, 0x0b83ec39, 0x4060efaa,
+ 0x5e719f06, 0xbd6e1051, 0x3e218af9, 0x96dd063d, 0xdd3e05ae, 0x4de6bd46,
+ 0x91548db5, 0x71c45d05, 0x0406d46f, 0x605015ff, 0x1998fb24, 0xd6bde997,
+ 0x894043cc, 0x67d99e77, 0xb0e842bd, 0x07898b88, 0xe7195b38, 0x79c8eedb,
+ 0xa17c0a47, 0x7c420fe9, 0xf8841ec9, 0x00000000, 0x09808683, 0x322bed48,
+ 0x1e1170ac, 0x6c5a724e, 0xfd0efffb, 0x0f853856, 0x3daed51e, 0x362d3927,
+ 0x0a0fd964, 0x685ca621, 0x9b5b54d1, 0x24362e3a, 0x0c0a67b1, 0x9357e70f,
+ 0xb4ee96d2, 0x1b9b919e, 0x80c0c54f, 0x61dc20a2, 0x5a774b69, 0x1c121a16,
+ 0xe293ba0a, 0xc0a02ae5, 0x3c22e043, 0x121b171d, 0x0e090d0b, 0xf28bc7ad,
+ 0x2db6a8b9, 0x141ea9c8, 0x57f11985, 0xaf75074c, 0xee99ddbb, 0xa37f60fd,
+ 0xf701269f, 0x5c72f5bc, 0x44663bc5, 0x5bfb7e34, 0x8b432976, 0xcb23c6dc,
+ 0xb6edfc68, 0xb8e4f163, 0xd731dcca, 0x42638510, 0x13972240, 0x84c61120,
+ 0x854a247d, 0xd2bb3df8, 0xaef93211, 0xc729a16d, 0x1d9e2f4b, 0xdcb230f3,
+ 0x0d8652ec, 0x77c1e3d0, 0x2bb3166c, 0xa970b999, 0x119448fa, 0x47e96422,
+ 0xa8fc8cc4, 0xa0f03f1a, 0x567d2cd8, 0x223390ef, 0x87494ec7, 0xd938d1c1,
+ 0x8ccaa2fe, 0x98d40b36, 0xa6f581cf, 0xa57ade28, 0xdab78e26, 0x3fadbfa4,
+ 0x2c3a9de4, 0x5078920d, 0x6a5fcc9b, 0x547e4662, 0xf68d13c2, 0x90d8b8e8,
+ 0x2e39f75e, 0x82c3aff5, 0x9f5d80be, 0x69d0937c, 0x6fd52da9, 0xcf2512b3,
+ 0xc8ac993b, 0x10187da7, 0xe89c636e, 0xdb3bbb7b, 0xcd267809, 0x6e5918f4,
+ 0xec9ab701, 0x834f9aa8, 0xe6956e65, 0xaaffe67e, 0x21bccf08, 0xef15e8e6,
+ 0xbae79bd9, 0x4a6f36ce, 0xea9f09d4, 0x29b07cd6, 0x31a4b2af, 0x2a3f2331,
+ 0xc6a59430, 0x35a266c0, 0x744ebc37, 0xfc82caa6, 0xe090d0b0, 0x33a7d815,
+ 0xf104984a, 0x41ecdaf7, 0x7fcd500e, 0x1791f62f, 0x764dd68d, 0x43efb04d,
+ 0xccaa4d54, 0xe49604df, 0x9ed1b5e3, 0x4c6a881b, 0xc12c1fb8, 0x4665517f,
+ 0x9d5eea04, 0x018c355d, 0xfa877473, 0xfb0b412e, 0xb3671d5a, 0x92dbd252,
+ 0xe9105633, 0x6dd64713, 0x9ad7618c, 0x37a10c7a, 0x59f8148e, 0xeb133c89,
+ 0xcea927ee, 0xb761c935, 0xe11ce5ed, 0x7a47b13c, 0x9cd2df59, 0x55f2733f,
+ 0x1814ce79, 0x73c737bf, 0x53f7cdea, 0x5ffdaa5b, 0xdf3d6f14, 0x7844db86,
+ 0xcaaff381, 0xb968c43e, 0x3824342c, 0xc2a3405f, 0x161dc372, 0xbce2250c,
+ 0x283c498b, 0xff0d9541, 0x39a80171, 0x080cb3de, 0xd8b4e49c, 0x6456c190,
0x7bcb8461, 0xd532b670, 0x486c5c74, 0xd0b85742,
};
static const unsigned int D1[256] = {
- 0x5051f4a7, 0x537e4165, 0xc31a17a4, 0x963a275e,
- 0xcb3bab6b, 0xf11f9d45, 0xabacfa58, 0x934be303,
- 0x552030fa, 0xf6ad766d, 0x9188cc76, 0x25f5024c,
- 0xfc4fe5d7, 0xd7c52acb, 0x80263544, 0x8fb562a3,
- 0x49deb15a, 0x6725ba1b, 0x9845ea0e, 0xe15dfec0,
- 0x02c32f75, 0x12814cf0, 0xa38d4697, 0xc66bd3f9,
- 0xe7038f5f, 0x9515929c, 0xebbf6d7a, 0xda955259,
- 0x2dd4be83, 0xd3587421, 0x2949e069, 0x448ec9c8,
- 0x6a75c289, 0x78f48e79, 0x6b99583e, 0xdd27b971,
- 0xb6bee14f, 0x17f088ad, 0x66c920ac, 0xb47dce3a,
- 0x1863df4a, 0x82e51a31, 0x60975133, 0x4562537f,
- 0xe0b16477, 0x84bb6bae, 0x1cfe81a0, 0x94f9082b,
- 0x58704868, 0x198f45fd, 0x8794de6c, 0xb7527bf8,
- 0x23ab73d3, 0xe2724b02, 0x57e31f8f, 0x2a6655ab,
- 0x07b2eb28, 0x032fb5c2, 0x9a86c57b, 0xa5d33708,
- 0xf2302887, 0xb223bfa5, 0xba02036a, 0x5ced1682,
- 0x2b8acf1c, 0x92a779b4, 0xf0f307f2, 0xa14e69e2,
- 0xcd65daf4, 0xd50605be, 0x1fd13462, 0x8ac4a6fe,
- 0x9d342e53, 0xa0a2f355, 0x32058ae1, 0x75a4f6eb,
- 0x390b83ec, 0xaa4060ef, 0x065e719f, 0x51bd6e10,
- 0xf93e218a, 0x3d96dd06, 0xaedd3e05, 0x464de6bd,
- 0xb591548d, 0x0571c45d, 0x6f0406d4, 0xff605015,
- 0x241998fb, 0x97d6bde9, 0xcc894043, 0x7767d99e,
- 0xbdb0e842, 0x8807898b, 0x38e7195b, 0xdb79c8ee,
- 0x47a17c0a, 0xe97c420f, 0xc9f8841e, 0x00000000,
- 0x83098086, 0x48322bed, 0xac1e1170, 0x4e6c5a72,
- 0xfbfd0eff, 0x560f8538, 0x1e3daed5, 0x27362d39,
- 0x640a0fd9, 0x21685ca6, 0xd19b5b54, 0x3a24362e,
- 0xb10c0a67, 0x0f9357e7, 0xd2b4ee96, 0x9e1b9b91,
- 0x4f80c0c5, 0xa261dc20, 0x695a774b, 0x161c121a,
- 0x0ae293ba, 0xe5c0a02a, 0x433c22e0, 0x1d121b17,
- 0x0b0e090d, 0xadf28bc7, 0xb92db6a8, 0xc8141ea9,
- 0x8557f119, 0x4caf7507, 0xbbee99dd, 0xfda37f60,
- 0x9ff70126, 0xbc5c72f5, 0xc544663b, 0x345bfb7e,
- 0x768b4329, 0xdccb23c6, 0x68b6edfc, 0x63b8e4f1,
- 0xcad731dc, 0x10426385, 0x40139722, 0x2084c611,
- 0x7d854a24, 0xf8d2bb3d, 0x11aef932, 0x6dc729a1,
- 0x4b1d9e2f, 0xf3dcb230, 0xec0d8652, 0xd077c1e3,
- 0x6c2bb316, 0x99a970b9, 0xfa119448, 0x2247e964,
- 0xc4a8fc8c, 0x1aa0f03f, 0xd8567d2c, 0xef223390,
- 0xc787494e, 0xc1d938d1, 0xfe8ccaa2, 0x3698d40b,
- 0xcfa6f581, 0x28a57ade, 0x26dab78e, 0xa43fadbf,
- 0xe42c3a9d, 0x0d507892, 0x9b6a5fcc, 0x62547e46,
- 0xc2f68d13, 0xe890d8b8, 0x5e2e39f7, 0xf582c3af,
- 0xbe9f5d80, 0x7c69d093, 0xa96fd52d, 0xb3cf2512,
- 0x3bc8ac99, 0xa710187d, 0x6ee89c63, 0x7bdb3bbb,
- 0x09cd2678, 0xf46e5918, 0x01ec9ab7, 0xa8834f9a,
- 0x65e6956e, 0x7eaaffe6, 0x0821bccf, 0xe6ef15e8,
- 0xd9bae79b, 0xce4a6f36, 0xd4ea9f09, 0xd629b07c,
- 0xaf31a4b2, 0x312a3f23, 0x30c6a594, 0xc035a266,
- 0x37744ebc, 0xa6fc82ca, 0xb0e090d0, 0x1533a7d8,
- 0x4af10498, 0xf741ecda, 0x0e7fcd50, 0x2f1791f6,
- 0x8d764dd6, 0x4d43efb0, 0x54ccaa4d, 0xdfe49604,
- 0xe39ed1b5, 0x1b4c6a88, 0xb8c12c1f, 0x7f466551,
- 0x049d5eea, 0x5d018c35, 0x73fa8774, 0x2efb0b41,
- 0x5ab3671d, 0x5292dbd2, 0x33e91056, 0x136dd647,
- 0x8c9ad761, 0x7a37a10c, 0x8e59f814, 0x89eb133c,
- 0xeecea927, 0x35b761c9, 0xede11ce5, 0x3c7a47b1,
- 0x599cd2df, 0x3f55f273, 0x791814ce, 0xbf73c737,
- 0xea53f7cd, 0x5b5ffdaa, 0x14df3d6f, 0x867844db,
- 0x81caaff3, 0x3eb968c4, 0x2c382434, 0x5fc2a340,
- 0x72161dc3, 0x0cbce225, 0x8b283c49, 0x41ff0d95,
- 0x7139a801, 0xde080cb3, 0x9cd8b4e4, 0x906456c1,
+ 0x5051f4a7, 0x537e4165, 0xc31a17a4, 0x963a275e, 0xcb3bab6b, 0xf11f9d45,
+ 0xabacfa58, 0x934be303, 0x552030fa, 0xf6ad766d, 0x9188cc76, 0x25f5024c,
+ 0xfc4fe5d7, 0xd7c52acb, 0x80263544, 0x8fb562a3, 0x49deb15a, 0x6725ba1b,
+ 0x9845ea0e, 0xe15dfec0, 0x02c32f75, 0x12814cf0, 0xa38d4697, 0xc66bd3f9,
+ 0xe7038f5f, 0x9515929c, 0xebbf6d7a, 0xda955259, 0x2dd4be83, 0xd3587421,
+ 0x2949e069, 0x448ec9c8, 0x6a75c289, 0x78f48e79, 0x6b99583e, 0xdd27b971,
+ 0xb6bee14f, 0x17f088ad, 0x66c920ac, 0xb47dce3a, 0x1863df4a, 0x82e51a31,
+ 0x60975133, 0x4562537f, 0xe0b16477, 0x84bb6bae, 0x1cfe81a0, 0x94f9082b,
+ 0x58704868, 0x198f45fd, 0x8794de6c, 0xb7527bf8, 0x23ab73d3, 0xe2724b02,
+ 0x57e31f8f, 0x2a6655ab, 0x07b2eb28, 0x032fb5c2, 0x9a86c57b, 0xa5d33708,
+ 0xf2302887, 0xb223bfa5, 0xba02036a, 0x5ced1682, 0x2b8acf1c, 0x92a779b4,
+ 0xf0f307f2, 0xa14e69e2, 0xcd65daf4, 0xd50605be, 0x1fd13462, 0x8ac4a6fe,
+ 0x9d342e53, 0xa0a2f355, 0x32058ae1, 0x75a4f6eb, 0x390b83ec, 0xaa4060ef,
+ 0x065e719f, 0x51bd6e10, 0xf93e218a, 0x3d96dd06, 0xaedd3e05, 0x464de6bd,
+ 0xb591548d, 0x0571c45d, 0x6f0406d4, 0xff605015, 0x241998fb, 0x97d6bde9,
+ 0xcc894043, 0x7767d99e, 0xbdb0e842, 0x8807898b, 0x38e7195b, 0xdb79c8ee,
+ 0x47a17c0a, 0xe97c420f, 0xc9f8841e, 0x00000000, 0x83098086, 0x48322bed,
+ 0xac1e1170, 0x4e6c5a72, 0xfbfd0eff, 0x560f8538, 0x1e3daed5, 0x27362d39,
+ 0x640a0fd9, 0x21685ca6, 0xd19b5b54, 0x3a24362e, 0xb10c0a67, 0x0f9357e7,
+ 0xd2b4ee96, 0x9e1b9b91, 0x4f80c0c5, 0xa261dc20, 0x695a774b, 0x161c121a,
+ 0x0ae293ba, 0xe5c0a02a, 0x433c22e0, 0x1d121b17, 0x0b0e090d, 0xadf28bc7,
+ 0xb92db6a8, 0xc8141ea9, 0x8557f119, 0x4caf7507, 0xbbee99dd, 0xfda37f60,
+ 0x9ff70126, 0xbc5c72f5, 0xc544663b, 0x345bfb7e, 0x768b4329, 0xdccb23c6,
+ 0x68b6edfc, 0x63b8e4f1, 0xcad731dc, 0x10426385, 0x40139722, 0x2084c611,
+ 0x7d854a24, 0xf8d2bb3d, 0x11aef932, 0x6dc729a1, 0x4b1d9e2f, 0xf3dcb230,
+ 0xec0d8652, 0xd077c1e3, 0x6c2bb316, 0x99a970b9, 0xfa119448, 0x2247e964,
+ 0xc4a8fc8c, 0x1aa0f03f, 0xd8567d2c, 0xef223390, 0xc787494e, 0xc1d938d1,
+ 0xfe8ccaa2, 0x3698d40b, 0xcfa6f581, 0x28a57ade, 0x26dab78e, 0xa43fadbf,
+ 0xe42c3a9d, 0x0d507892, 0x9b6a5fcc, 0x62547e46, 0xc2f68d13, 0xe890d8b8,
+ 0x5e2e39f7, 0xf582c3af, 0xbe9f5d80, 0x7c69d093, 0xa96fd52d, 0xb3cf2512,
+ 0x3bc8ac99, 0xa710187d, 0x6ee89c63, 0x7bdb3bbb, 0x09cd2678, 0xf46e5918,
+ 0x01ec9ab7, 0xa8834f9a, 0x65e6956e, 0x7eaaffe6, 0x0821bccf, 0xe6ef15e8,
+ 0xd9bae79b, 0xce4a6f36, 0xd4ea9f09, 0xd629b07c, 0xaf31a4b2, 0x312a3f23,
+ 0x30c6a594, 0xc035a266, 0x37744ebc, 0xa6fc82ca, 0xb0e090d0, 0x1533a7d8,
+ 0x4af10498, 0xf741ecda, 0x0e7fcd50, 0x2f1791f6, 0x8d764dd6, 0x4d43efb0,
+ 0x54ccaa4d, 0xdfe49604, 0xe39ed1b5, 0x1b4c6a88, 0xb8c12c1f, 0x7f466551,
+ 0x049d5eea, 0x5d018c35, 0x73fa8774, 0x2efb0b41, 0x5ab3671d, 0x5292dbd2,
+ 0x33e91056, 0x136dd647, 0x8c9ad761, 0x7a37a10c, 0x8e59f814, 0x89eb133c,
+ 0xeecea927, 0x35b761c9, 0xede11ce5, 0x3c7a47b1, 0x599cd2df, 0x3f55f273,
+ 0x791814ce, 0xbf73c737, 0xea53f7cd, 0x5b5ffdaa, 0x14df3d6f, 0x867844db,
+ 0x81caaff3, 0x3eb968c4, 0x2c382434, 0x5fc2a340, 0x72161dc3, 0x0cbce225,
+ 0x8b283c49, 0x41ff0d95, 0x7139a801, 0xde080cb3, 0x9cd8b4e4, 0x906456c1,
0x617bcb84, 0x70d532b6, 0x74486c5c, 0x42d0b857,
};
static const unsigned int D2[256] = {
- 0xa75051f4, 0x65537e41, 0xa4c31a17, 0x5e963a27,
- 0x6bcb3bab, 0x45f11f9d, 0x58abacfa, 0x03934be3,
- 0xfa552030, 0x6df6ad76, 0x769188cc, 0x4c25f502,
- 0xd7fc4fe5, 0xcbd7c52a, 0x44802635, 0xa38fb562,
- 0x5a49deb1, 0x1b6725ba, 0x0e9845ea, 0xc0e15dfe,
- 0x7502c32f, 0xf012814c, 0x97a38d46, 0xf9c66bd3,
- 0x5fe7038f, 0x9c951592, 0x7aebbf6d, 0x59da9552,
- 0x832dd4be, 0x21d35874, 0x692949e0, 0xc8448ec9,
- 0x896a75c2, 0x7978f48e, 0x3e6b9958, 0x71dd27b9,
- 0x4fb6bee1, 0xad17f088, 0xac66c920, 0x3ab47dce,
- 0x4a1863df, 0x3182e51a, 0x33609751, 0x7f456253,
- 0x77e0b164, 0xae84bb6b, 0xa01cfe81, 0x2b94f908,
- 0x68587048, 0xfd198f45, 0x6c8794de, 0xf8b7527b,
- 0xd323ab73, 0x02e2724b, 0x8f57e31f, 0xab2a6655,
- 0x2807b2eb, 0xc2032fb5, 0x7b9a86c5, 0x08a5d337,
- 0x87f23028, 0xa5b223bf, 0x6aba0203, 0x825ced16,
- 0x1c2b8acf, 0xb492a779, 0xf2f0f307, 0xe2a14e69,
- 0xf4cd65da, 0xbed50605, 0x621fd134, 0xfe8ac4a6,
- 0x539d342e, 0x55a0a2f3, 0xe132058a, 0xeb75a4f6,
- 0xec390b83, 0xefaa4060, 0x9f065e71, 0x1051bd6e,
- 0x8af93e21, 0x063d96dd, 0x05aedd3e, 0xbd464de6,
- 0x8db59154, 0x5d0571c4, 0xd46f0406, 0x15ff6050,
- 0xfb241998, 0xe997d6bd, 0x43cc8940, 0x9e7767d9,
- 0x42bdb0e8, 0x8b880789, 0x5b38e719, 0xeedb79c8,
- 0x0a47a17c, 0x0fe97c42, 0x1ec9f884, 0x00000000,
- 0x86830980, 0xed48322b, 0x70ac1e11, 0x724e6c5a,
- 0xfffbfd0e, 0x38560f85, 0xd51e3dae, 0x3927362d,
- 0xd9640a0f, 0xa621685c, 0x54d19b5b, 0x2e3a2436,
- 0x67b10c0a, 0xe70f9357, 0x96d2b4ee, 0x919e1b9b,
- 0xc54f80c0, 0x20a261dc, 0x4b695a77, 0x1a161c12,
- 0xba0ae293, 0x2ae5c0a0, 0xe0433c22, 0x171d121b,
- 0x0d0b0e09, 0xc7adf28b, 0xa8b92db6, 0xa9c8141e,
- 0x198557f1, 0x074caf75, 0xddbbee99, 0x60fda37f,
- 0x269ff701, 0xf5bc5c72, 0x3bc54466, 0x7e345bfb,
- 0x29768b43, 0xc6dccb23, 0xfc68b6ed, 0xf163b8e4,
- 0xdccad731, 0x85104263, 0x22401397, 0x112084c6,
- 0x247d854a, 0x3df8d2bb, 0x3211aef9, 0xa16dc729,
- 0x2f4b1d9e, 0x30f3dcb2, 0x52ec0d86, 0xe3d077c1,
- 0x166c2bb3, 0xb999a970, 0x48fa1194, 0x642247e9,
- 0x8cc4a8fc, 0x3f1aa0f0, 0x2cd8567d, 0x90ef2233,
- 0x4ec78749, 0xd1c1d938, 0xa2fe8cca, 0x0b3698d4,
- 0x81cfa6f5, 0xde28a57a, 0x8e26dab7, 0xbfa43fad,
- 0x9de42c3a, 0x920d5078, 0xcc9b6a5f, 0x4662547e,
- 0x13c2f68d, 0xb8e890d8, 0xf75e2e39, 0xaff582c3,
- 0x80be9f5d, 0x937c69d0, 0x2da96fd5, 0x12b3cf25,
- 0x993bc8ac, 0x7da71018, 0x636ee89c, 0xbb7bdb3b,
- 0x7809cd26, 0x18f46e59, 0xb701ec9a, 0x9aa8834f,
- 0x6e65e695, 0xe67eaaff, 0xcf0821bc, 0xe8e6ef15,
- 0x9bd9bae7, 0x36ce4a6f, 0x09d4ea9f, 0x7cd629b0,
- 0xb2af31a4, 0x23312a3f, 0x9430c6a5, 0x66c035a2,
- 0xbc37744e, 0xcaa6fc82, 0xd0b0e090, 0xd81533a7,
- 0x984af104, 0xdaf741ec, 0x500e7fcd, 0xf62f1791,
- 0xd68d764d, 0xb04d43ef, 0x4d54ccaa, 0x04dfe496,
- 0xb5e39ed1, 0x881b4c6a, 0x1fb8c12c, 0x517f4665,
- 0xea049d5e, 0x355d018c, 0x7473fa87, 0x412efb0b,
- 0x1d5ab367, 0xd25292db, 0x5633e910, 0x47136dd6,
- 0x618c9ad7, 0x0c7a37a1, 0x148e59f8, 0x3c89eb13,
- 0x27eecea9, 0xc935b761, 0xe5ede11c, 0xb13c7a47,
- 0xdf599cd2, 0x733f55f2, 0xce791814, 0x37bf73c7,
- 0xcdea53f7, 0xaa5b5ffd, 0x6f14df3d, 0xdb867844,
- 0xf381caaf, 0xc43eb968, 0x342c3824, 0x405fc2a3,
- 0xc372161d, 0x250cbce2, 0x498b283c, 0x9541ff0d,
- 0x017139a8, 0xb3de080c, 0xe49cd8b4, 0xc1906456,
+ 0xa75051f4, 0x65537e41, 0xa4c31a17, 0x5e963a27, 0x6bcb3bab, 0x45f11f9d,
+ 0x58abacfa, 0x03934be3, 0xfa552030, 0x6df6ad76, 0x769188cc, 0x4c25f502,
+ 0xd7fc4fe5, 0xcbd7c52a, 0x44802635, 0xa38fb562, 0x5a49deb1, 0x1b6725ba,
+ 0x0e9845ea, 0xc0e15dfe, 0x7502c32f, 0xf012814c, 0x97a38d46, 0xf9c66bd3,
+ 0x5fe7038f, 0x9c951592, 0x7aebbf6d, 0x59da9552, 0x832dd4be, 0x21d35874,
+ 0x692949e0, 0xc8448ec9, 0x896a75c2, 0x7978f48e, 0x3e6b9958, 0x71dd27b9,
+ 0x4fb6bee1, 0xad17f088, 0xac66c920, 0x3ab47dce, 0x4a1863df, 0x3182e51a,
+ 0x33609751, 0x7f456253, 0x77e0b164, 0xae84bb6b, 0xa01cfe81, 0x2b94f908,
+ 0x68587048, 0xfd198f45, 0x6c8794de, 0xf8b7527b, 0xd323ab73, 0x02e2724b,
+ 0x8f57e31f, 0xab2a6655, 0x2807b2eb, 0xc2032fb5, 0x7b9a86c5, 0x08a5d337,
+ 0x87f23028, 0xa5b223bf, 0x6aba0203, 0x825ced16, 0x1c2b8acf, 0xb492a779,
+ 0xf2f0f307, 0xe2a14e69, 0xf4cd65da, 0xbed50605, 0x621fd134, 0xfe8ac4a6,
+ 0x539d342e, 0x55a0a2f3, 0xe132058a, 0xeb75a4f6, 0xec390b83, 0xefaa4060,
+ 0x9f065e71, 0x1051bd6e, 0x8af93e21, 0x063d96dd, 0x05aedd3e, 0xbd464de6,
+ 0x8db59154, 0x5d0571c4, 0xd46f0406, 0x15ff6050, 0xfb241998, 0xe997d6bd,
+ 0x43cc8940, 0x9e7767d9, 0x42bdb0e8, 0x8b880789, 0x5b38e719, 0xeedb79c8,
+ 0x0a47a17c, 0x0fe97c42, 0x1ec9f884, 0x00000000, 0x86830980, 0xed48322b,
+ 0x70ac1e11, 0x724e6c5a, 0xfffbfd0e, 0x38560f85, 0xd51e3dae, 0x3927362d,
+ 0xd9640a0f, 0xa621685c, 0x54d19b5b, 0x2e3a2436, 0x67b10c0a, 0xe70f9357,
+ 0x96d2b4ee, 0x919e1b9b, 0xc54f80c0, 0x20a261dc, 0x4b695a77, 0x1a161c12,
+ 0xba0ae293, 0x2ae5c0a0, 0xe0433c22, 0x171d121b, 0x0d0b0e09, 0xc7adf28b,
+ 0xa8b92db6, 0xa9c8141e, 0x198557f1, 0x074caf75, 0xddbbee99, 0x60fda37f,
+ 0x269ff701, 0xf5bc5c72, 0x3bc54466, 0x7e345bfb, 0x29768b43, 0xc6dccb23,
+ 0xfc68b6ed, 0xf163b8e4, 0xdccad731, 0x85104263, 0x22401397, 0x112084c6,
+ 0x247d854a, 0x3df8d2bb, 0x3211aef9, 0xa16dc729, 0x2f4b1d9e, 0x30f3dcb2,
+ 0x52ec0d86, 0xe3d077c1, 0x166c2bb3, 0xb999a970, 0x48fa1194, 0x642247e9,
+ 0x8cc4a8fc, 0x3f1aa0f0, 0x2cd8567d, 0x90ef2233, 0x4ec78749, 0xd1c1d938,
+ 0xa2fe8cca, 0x0b3698d4, 0x81cfa6f5, 0xde28a57a, 0x8e26dab7, 0xbfa43fad,
+ 0x9de42c3a, 0x920d5078, 0xcc9b6a5f, 0x4662547e, 0x13c2f68d, 0xb8e890d8,
+ 0xf75e2e39, 0xaff582c3, 0x80be9f5d, 0x937c69d0, 0x2da96fd5, 0x12b3cf25,
+ 0x993bc8ac, 0x7da71018, 0x636ee89c, 0xbb7bdb3b, 0x7809cd26, 0x18f46e59,
+ 0xb701ec9a, 0x9aa8834f, 0x6e65e695, 0xe67eaaff, 0xcf0821bc, 0xe8e6ef15,
+ 0x9bd9bae7, 0x36ce4a6f, 0x09d4ea9f, 0x7cd629b0, 0xb2af31a4, 0x23312a3f,
+ 0x9430c6a5, 0x66c035a2, 0xbc37744e, 0xcaa6fc82, 0xd0b0e090, 0xd81533a7,
+ 0x984af104, 0xdaf741ec, 0x500e7fcd, 0xf62f1791, 0xd68d764d, 0xb04d43ef,
+ 0x4d54ccaa, 0x04dfe496, 0xb5e39ed1, 0x881b4c6a, 0x1fb8c12c, 0x517f4665,
+ 0xea049d5e, 0x355d018c, 0x7473fa87, 0x412efb0b, 0x1d5ab367, 0xd25292db,
+ 0x5633e910, 0x47136dd6, 0x618c9ad7, 0x0c7a37a1, 0x148e59f8, 0x3c89eb13,
+ 0x27eecea9, 0xc935b761, 0xe5ede11c, 0xb13c7a47, 0xdf599cd2, 0x733f55f2,
+ 0xce791814, 0x37bf73c7, 0xcdea53f7, 0xaa5b5ffd, 0x6f14df3d, 0xdb867844,
+ 0xf381caaf, 0xc43eb968, 0x342c3824, 0x405fc2a3, 0xc372161d, 0x250cbce2,
+ 0x498b283c, 0x9541ff0d, 0x017139a8, 0xb3de080c, 0xe49cd8b4, 0xc1906456,
0x84617bcb, 0xb670d532, 0x5c74486c, 0x5742d0b8,
};
static const unsigned int D3[256] = {
- 0xf4a75051, 0x4165537e, 0x17a4c31a, 0x275e963a,
- 0xab6bcb3b, 0x9d45f11f, 0xfa58abac, 0xe303934b,
- 0x30fa5520, 0x766df6ad, 0xcc769188, 0x024c25f5,
- 0xe5d7fc4f, 0x2acbd7c5, 0x35448026, 0x62a38fb5,
- 0xb15a49de, 0xba1b6725, 0xea0e9845, 0xfec0e15d,
- 0x2f7502c3, 0x4cf01281, 0x4697a38d, 0xd3f9c66b,
- 0x8f5fe703, 0x929c9515, 0x6d7aebbf, 0x5259da95,
- 0xbe832dd4, 0x7421d358, 0xe0692949, 0xc9c8448e,
- 0xc2896a75, 0x8e7978f4, 0x583e6b99, 0xb971dd27,
- 0xe14fb6be, 0x88ad17f0, 0x20ac66c9, 0xce3ab47d,
- 0xdf4a1863, 0x1a3182e5, 0x51336097, 0x537f4562,
- 0x6477e0b1, 0x6bae84bb, 0x81a01cfe, 0x082b94f9,
- 0x48685870, 0x45fd198f, 0xde6c8794, 0x7bf8b752,
- 0x73d323ab, 0x4b02e272, 0x1f8f57e3, 0x55ab2a66,
- 0xeb2807b2, 0xb5c2032f, 0xc57b9a86, 0x3708a5d3,
- 0x2887f230, 0xbfa5b223, 0x036aba02, 0x16825ced,
- 0xcf1c2b8a, 0x79b492a7, 0x07f2f0f3, 0x69e2a14e,
- 0xdaf4cd65, 0x05bed506, 0x34621fd1, 0xa6fe8ac4,
- 0x2e539d34, 0xf355a0a2, 0x8ae13205, 0xf6eb75a4,
- 0x83ec390b, 0x60efaa40, 0x719f065e, 0x6e1051bd,
- 0x218af93e, 0xdd063d96, 0x3e05aedd, 0xe6bd464d,
- 0x548db591, 0xc45d0571, 0x06d46f04, 0x5015ff60,
- 0x98fb2419, 0xbde997d6, 0x4043cc89, 0xd99e7767,
- 0xe842bdb0, 0x898b8807, 0x195b38e7, 0xc8eedb79,
- 0x7c0a47a1, 0x420fe97c, 0x841ec9f8, 0x00000000,
- 0x80868309, 0x2bed4832, 0x1170ac1e, 0x5a724e6c,
- 0x0efffbfd, 0x8538560f, 0xaed51e3d, 0x2d392736,
- 0x0fd9640a, 0x5ca62168, 0x5b54d19b, 0x362e3a24,
- 0x0a67b10c, 0x57e70f93, 0xee96d2b4, 0x9b919e1b,
- 0xc0c54f80, 0xdc20a261, 0x774b695a, 0x121a161c,
- 0x93ba0ae2, 0xa02ae5c0, 0x22e0433c, 0x1b171d12,
- 0x090d0b0e, 0x8bc7adf2, 0xb6a8b92d, 0x1ea9c814,
- 0xf1198557, 0x75074caf, 0x99ddbbee, 0x7f60fda3,
- 0x01269ff7, 0x72f5bc5c, 0x663bc544, 0xfb7e345b,
- 0x4329768b, 0x23c6dccb, 0xedfc68b6, 0xe4f163b8,
- 0x31dccad7, 0x63851042, 0x97224013, 0xc6112084,
- 0x4a247d85, 0xbb3df8d2, 0xf93211ae, 0x29a16dc7,
- 0x9e2f4b1d, 0xb230f3dc, 0x8652ec0d, 0xc1e3d077,
- 0xb3166c2b, 0x70b999a9, 0x9448fa11, 0xe9642247,
- 0xfc8cc4a8, 0xf03f1aa0, 0x7d2cd856, 0x3390ef22,
- 0x494ec787, 0x38d1c1d9, 0xcaa2fe8c, 0xd40b3698,
- 0xf581cfa6, 0x7ade28a5, 0xb78e26da, 0xadbfa43f,
- 0x3a9de42c, 0x78920d50, 0x5fcc9b6a, 0x7e466254,
- 0x8d13c2f6, 0xd8b8e890, 0x39f75e2e, 0xc3aff582,
- 0x5d80be9f, 0xd0937c69, 0xd52da96f, 0x2512b3cf,
- 0xac993bc8, 0x187da710, 0x9c636ee8, 0x3bbb7bdb,
- 0x267809cd, 0x5918f46e, 0x9ab701ec, 0x4f9aa883,
- 0x956e65e6, 0xffe67eaa, 0xbccf0821, 0x15e8e6ef,
- 0xe79bd9ba, 0x6f36ce4a, 0x9f09d4ea, 0xb07cd629,
- 0xa4b2af31, 0x3f23312a, 0xa59430c6, 0xa266c035,
- 0x4ebc3774, 0x82caa6fc, 0x90d0b0e0, 0xa7d81533,
- 0x04984af1, 0xecdaf741, 0xcd500e7f, 0x91f62f17,
- 0x4dd68d76, 0xefb04d43, 0xaa4d54cc, 0x9604dfe4,
- 0xd1b5e39e, 0x6a881b4c, 0x2c1fb8c1, 0x65517f46,
- 0x5eea049d, 0x8c355d01, 0x877473fa, 0x0b412efb,
- 0x671d5ab3, 0xdbd25292, 0x105633e9, 0xd647136d,
- 0xd7618c9a, 0xa10c7a37, 0xf8148e59, 0x133c89eb,
- 0xa927eece, 0x61c935b7, 0x1ce5ede1, 0x47b13c7a,
- 0xd2df599c, 0xf2733f55, 0x14ce7918, 0xc737bf73,
- 0xf7cdea53, 0xfdaa5b5f, 0x3d6f14df, 0x44db8678,
- 0xaff381ca, 0x68c43eb9, 0x24342c38, 0xa3405fc2,
- 0x1dc37216, 0xe2250cbc, 0x3c498b28, 0x0d9541ff,
- 0xa8017139, 0x0cb3de08, 0xb4e49cd8, 0x56c19064,
+ 0xf4a75051, 0x4165537e, 0x17a4c31a, 0x275e963a, 0xab6bcb3b, 0x9d45f11f,
+ 0xfa58abac, 0xe303934b, 0x30fa5520, 0x766df6ad, 0xcc769188, 0x024c25f5,
+ 0xe5d7fc4f, 0x2acbd7c5, 0x35448026, 0x62a38fb5, 0xb15a49de, 0xba1b6725,
+ 0xea0e9845, 0xfec0e15d, 0x2f7502c3, 0x4cf01281, 0x4697a38d, 0xd3f9c66b,
+ 0x8f5fe703, 0x929c9515, 0x6d7aebbf, 0x5259da95, 0xbe832dd4, 0x7421d358,
+ 0xe0692949, 0xc9c8448e, 0xc2896a75, 0x8e7978f4, 0x583e6b99, 0xb971dd27,
+ 0xe14fb6be, 0x88ad17f0, 0x20ac66c9, 0xce3ab47d, 0xdf4a1863, 0x1a3182e5,
+ 0x51336097, 0x537f4562, 0x6477e0b1, 0x6bae84bb, 0x81a01cfe, 0x082b94f9,
+ 0x48685870, 0x45fd198f, 0xde6c8794, 0x7bf8b752, 0x73d323ab, 0x4b02e272,
+ 0x1f8f57e3, 0x55ab2a66, 0xeb2807b2, 0xb5c2032f, 0xc57b9a86, 0x3708a5d3,
+ 0x2887f230, 0xbfa5b223, 0x036aba02, 0x16825ced, 0xcf1c2b8a, 0x79b492a7,
+ 0x07f2f0f3, 0x69e2a14e, 0xdaf4cd65, 0x05bed506, 0x34621fd1, 0xa6fe8ac4,
+ 0x2e539d34, 0xf355a0a2, 0x8ae13205, 0xf6eb75a4, 0x83ec390b, 0x60efaa40,
+ 0x719f065e, 0x6e1051bd, 0x218af93e, 0xdd063d96, 0x3e05aedd, 0xe6bd464d,
+ 0x548db591, 0xc45d0571, 0x06d46f04, 0x5015ff60, 0x98fb2419, 0xbde997d6,
+ 0x4043cc89, 0xd99e7767, 0xe842bdb0, 0x898b8807, 0x195b38e7, 0xc8eedb79,
+ 0x7c0a47a1, 0x420fe97c, 0x841ec9f8, 0x00000000, 0x80868309, 0x2bed4832,
+ 0x1170ac1e, 0x5a724e6c, 0x0efffbfd, 0x8538560f, 0xaed51e3d, 0x2d392736,
+ 0x0fd9640a, 0x5ca62168, 0x5b54d19b, 0x362e3a24, 0x0a67b10c, 0x57e70f93,
+ 0xee96d2b4, 0x9b919e1b, 0xc0c54f80, 0xdc20a261, 0x774b695a, 0x121a161c,
+ 0x93ba0ae2, 0xa02ae5c0, 0x22e0433c, 0x1b171d12, 0x090d0b0e, 0x8bc7adf2,
+ 0xb6a8b92d, 0x1ea9c814, 0xf1198557, 0x75074caf, 0x99ddbbee, 0x7f60fda3,
+ 0x01269ff7, 0x72f5bc5c, 0x663bc544, 0xfb7e345b, 0x4329768b, 0x23c6dccb,
+ 0xedfc68b6, 0xe4f163b8, 0x31dccad7, 0x63851042, 0x97224013, 0xc6112084,
+ 0x4a247d85, 0xbb3df8d2, 0xf93211ae, 0x29a16dc7, 0x9e2f4b1d, 0xb230f3dc,
+ 0x8652ec0d, 0xc1e3d077, 0xb3166c2b, 0x70b999a9, 0x9448fa11, 0xe9642247,
+ 0xfc8cc4a8, 0xf03f1aa0, 0x7d2cd856, 0x3390ef22, 0x494ec787, 0x38d1c1d9,
+ 0xcaa2fe8c, 0xd40b3698, 0xf581cfa6, 0x7ade28a5, 0xb78e26da, 0xadbfa43f,
+ 0x3a9de42c, 0x78920d50, 0x5fcc9b6a, 0x7e466254, 0x8d13c2f6, 0xd8b8e890,
+ 0x39f75e2e, 0xc3aff582, 0x5d80be9f, 0xd0937c69, 0xd52da96f, 0x2512b3cf,
+ 0xac993bc8, 0x187da710, 0x9c636ee8, 0x3bbb7bdb, 0x267809cd, 0x5918f46e,
+ 0x9ab701ec, 0x4f9aa883, 0x956e65e6, 0xffe67eaa, 0xbccf0821, 0x15e8e6ef,
+ 0xe79bd9ba, 0x6f36ce4a, 0x9f09d4ea, 0xb07cd629, 0xa4b2af31, 0x3f23312a,
+ 0xa59430c6, 0xa266c035, 0x4ebc3774, 0x82caa6fc, 0x90d0b0e0, 0xa7d81533,
+ 0x04984af1, 0xecdaf741, 0xcd500e7f, 0x91f62f17, 0x4dd68d76, 0xefb04d43,
+ 0xaa4d54cc, 0x9604dfe4, 0xd1b5e39e, 0x6a881b4c, 0x2c1fb8c1, 0x65517f46,
+ 0x5eea049d, 0x8c355d01, 0x877473fa, 0x0b412efb, 0x671d5ab3, 0xdbd25292,
+ 0x105633e9, 0xd647136d, 0xd7618c9a, 0xa10c7a37, 0xf8148e59, 0x133c89eb,
+ 0xa927eece, 0x61c935b7, 0x1ce5ede1, 0x47b13c7a, 0xd2df599c, 0xf2733f55,
+ 0x14ce7918, 0xc737bf73, 0xf7cdea53, 0xfdaa5b5f, 0x3d6f14df, 0x44db8678,
+ 0xaff381ca, 0x68c43eb9, 0x24342c38, 0xa3405fc2, 0x1dc37216, 0xe2250cbc,
+ 0x3c498b28, 0x0d9541ff, 0xa8017139, 0x0cb3de08, 0xb4e49cd8, 0x56c19064,
0xcb84617b, 0x32b670d5, 0x6c5c7448, 0xb85742d0,
};
-#define ADD_ROUND_KEY_4 (block[0]^=*keysched++, block[1]^=*keysched++, \
- block[2]^=*keysched++, block[3]^=*keysched++)
-#define ADD_ROUND_KEY_6 (block[0]^=*keysched++, block[1]^=*keysched++, \
- block[2]^=*keysched++, block[3]^=*keysched++, \
- block[4]^=*keysched++, block[5]^=*keysched++)
-#define ADD_ROUND_KEY_8 (block[0]^=*keysched++, block[1]^=*keysched++, \
- block[2]^=*keysched++, block[3]^=*keysched++, \
- block[4]^=*keysched++, block[5]^=*keysched++, \
- block[6]^=*keysched++, block[7]^=*keysched++)
-#define MOVEWORD(i) ( block[i] = newstate[i] )
+#define ADD_ROUND_KEY_4 \
+ (block[0] ^= *keysched++, block[1] ^= *keysched++, block[2] ^= *keysched++, \
+ block[3] ^= *keysched++)
+#define ADD_ROUND_KEY_6 \
+ (block[0] ^= *keysched++, block[1] ^= *keysched++, block[2] ^= *keysched++, \
+ block[3] ^= *keysched++, block[4] ^= *keysched++, block[5] ^= *keysched++)
+#define ADD_ROUND_KEY_8 \
+ (block[0] ^= *keysched++, block[1] ^= *keysched++, block[2] ^= *keysched++, \
+ block[3] ^= *keysched++, block[4] ^= *keysched++, block[5] ^= *keysched++, \
+ block[6] ^= *keysched++, block[7] ^= *keysched++)
+#define MOVEWORD(i) (block[i] = newstate[i])
#undef MAKEWORD
-#define MAKEWORD(i) ( newstate[i] = (E0[(block[i] >> 24) & 0xFF] ^ \
- E1[(block[(i+C1)%Nb] >> 16) & 0xFF] ^ \
- E2[(block[(i+C2)%Nb] >> 8) & 0xFF] ^ \
- E3[block[(i+C3)%Nb] & 0xFF]) )
-#define LASTWORD(i) ( newstate[i] = (Sbox[(block[i] >> 24) & 0xFF] << 24) | \
- (Sbox[(block[(i+C1)%Nb] >> 16) & 0xFF] << 16) | \
- (Sbox[(block[(i+C2)%Nb] >> 8) & 0xFF] << 8) | \
- (Sbox[(block[(i+C3)%Nb] ) & 0xFF] ) )
-static void aes_encrypt_nb_4(AESContext * ctx, unsigned int * block)
-{
- int i;
- static const int C1 = 1, C2 = 2, C3 = 3, Nb = 4;
- unsigned int *keysched = ctx->keysched;
- unsigned int newstate[4];
- for (i = 0; i < ctx->Nr - 1; i++) {
- ADD_ROUND_KEY_4;
- MAKEWORD(0);
- MAKEWORD(1);
- MAKEWORD(2);
- MAKEWORD(3);
- MOVEWORD(0);
- MOVEWORD(1);
- MOVEWORD(2);
- MOVEWORD(3);
- }
+#define MAKEWORD(i) \
+ (newstate[i] = (E0[(block[i] >> 24) & 0xFF] ^ \
+ E1[(block[(i + C1) % Nb] >> 16) & 0xFF] ^ \
+ E2[(block[(i + C2) % Nb] >> 8) & 0xFF] ^ \
+ E3[block[(i + C3) % Nb] & 0xFF]))
+#define LASTWORD(i) \
+ (newstate[i] = (Sbox[(block[i] >> 24) & 0xFF] << 24) | \
+ (Sbox[(block[(i + C1) % Nb] >> 16) & 0xFF] << 16) | \
+ (Sbox[(block[(i + C2) % Nb] >> 8) & 0xFF] << 8) | \
+ (Sbox[(block[(i + C3) % Nb]) & 0xFF]))
+static void aes_encrypt_nb_4(AESContext* ctx, unsigned int* block) {
+ int i;
+ static const int C1 = 1, C2 = 2, C3 = 3, Nb = 4;
+ unsigned int* keysched = ctx->keysched;
+ unsigned int newstate[4];
+ for (i = 0; i < ctx->Nr - 1; i++) {
ADD_ROUND_KEY_4;
- LASTWORD(0);
- LASTWORD(1);
- LASTWORD(2);
- LASTWORD(3);
+ MAKEWORD(0);
+ MAKEWORD(1);
+ MAKEWORD(2);
+ MAKEWORD(3);
MOVEWORD(0);
MOVEWORD(1);
MOVEWORD(2);
MOVEWORD(3);
- ADD_ROUND_KEY_4;
+ }
+ ADD_ROUND_KEY_4;
+ LASTWORD(0);
+ LASTWORD(1);
+ LASTWORD(2);
+ LASTWORD(3);
+ MOVEWORD(0);
+ MOVEWORD(1);
+ MOVEWORD(2);
+ MOVEWORD(3);
+ ADD_ROUND_KEY_4;
}
-static void aes_encrypt_nb_6(AESContext * ctx, unsigned int * block)
-{
- int i;
- static const int C1 = 1, C2 = 2, C3 = 3, Nb = 6;
- unsigned int *keysched = ctx->keysched;
- unsigned int newstate[6];
- for (i = 0; i < ctx->Nr - 1; i++) {
- ADD_ROUND_KEY_6;
- MAKEWORD(0);
- MAKEWORD(1);
- MAKEWORD(2);
- MAKEWORD(3);
- MAKEWORD(4);
- MAKEWORD(5);
- MOVEWORD(0);
- MOVEWORD(1);
- MOVEWORD(2);
- MOVEWORD(3);
- MOVEWORD(4);
- MOVEWORD(5);
- }
+static void aes_encrypt_nb_6(AESContext* ctx, unsigned int* block) {
+ int i;
+ static const int C1 = 1, C2 = 2, C3 = 3, Nb = 6;
+ unsigned int* keysched = ctx->keysched;
+ unsigned int newstate[6];
+ for (i = 0; i < ctx->Nr - 1; i++) {
ADD_ROUND_KEY_6;
- LASTWORD(0);
- LASTWORD(1);
- LASTWORD(2);
- LASTWORD(3);
- LASTWORD(4);
- LASTWORD(5);
+ MAKEWORD(0);
+ MAKEWORD(1);
+ MAKEWORD(2);
+ MAKEWORD(3);
+ MAKEWORD(4);
+ MAKEWORD(5);
MOVEWORD(0);
MOVEWORD(1);
MOVEWORD(2);
MOVEWORD(3);
MOVEWORD(4);
MOVEWORD(5);
- ADD_ROUND_KEY_6;
+ }
+ ADD_ROUND_KEY_6;
+ LASTWORD(0);
+ LASTWORD(1);
+ LASTWORD(2);
+ LASTWORD(3);
+ LASTWORD(4);
+ LASTWORD(5);
+ MOVEWORD(0);
+ MOVEWORD(1);
+ MOVEWORD(2);
+ MOVEWORD(3);
+ MOVEWORD(4);
+ MOVEWORD(5);
+ ADD_ROUND_KEY_6;
}
-static void aes_encrypt_nb_8(AESContext * ctx, unsigned int * block)
-{
- int i;
- static const int C1 = 1, C2 = 3, C3 = 4, Nb = 8;
- unsigned int *keysched = ctx->keysched;
- unsigned int newstate[8];
- for (i = 0; i < ctx->Nr - 1; i++) {
- ADD_ROUND_KEY_8;
- MAKEWORD(0);
- MAKEWORD(1);
- MAKEWORD(2);
- MAKEWORD(3);
- MAKEWORD(4);
- MAKEWORD(5);
- MAKEWORD(6);
- MAKEWORD(7);
- MOVEWORD(0);
- MOVEWORD(1);
- MOVEWORD(2);
- MOVEWORD(3);
- MOVEWORD(4);
- MOVEWORD(5);
- MOVEWORD(6);
- MOVEWORD(7);
- }
+static void aes_encrypt_nb_8(AESContext* ctx, unsigned int* block) {
+ int i;
+ static const int C1 = 1, C2 = 3, C3 = 4, Nb = 8;
+ unsigned int* keysched = ctx->keysched;
+ unsigned int newstate[8];
+ for (i = 0; i < ctx->Nr - 1; i++) {
ADD_ROUND_KEY_8;
- LASTWORD(0);
- LASTWORD(1);
- LASTWORD(2);
- LASTWORD(3);
- LASTWORD(4);
- LASTWORD(5);
- LASTWORD(6);
- LASTWORD(7);
+ MAKEWORD(0);
+ MAKEWORD(1);
+ MAKEWORD(2);
+ MAKEWORD(3);
+ MAKEWORD(4);
+ MAKEWORD(5);
+ MAKEWORD(6);
+ MAKEWORD(7);
MOVEWORD(0);
MOVEWORD(1);
MOVEWORD(2);
@@ -751,116 +545,115 @@ static void aes_encrypt_nb_8(AESContext * ctx, unsigned int * block)
MOVEWORD(5);
MOVEWORD(6);
MOVEWORD(7);
- ADD_ROUND_KEY_8;
+ }
+ ADD_ROUND_KEY_8;
+ LASTWORD(0);
+ LASTWORD(1);
+ LASTWORD(2);
+ LASTWORD(3);
+ LASTWORD(4);
+ LASTWORD(5);
+ LASTWORD(6);
+ LASTWORD(7);
+ MOVEWORD(0);
+ MOVEWORD(1);
+ MOVEWORD(2);
+ MOVEWORD(3);
+ MOVEWORD(4);
+ MOVEWORD(5);
+ MOVEWORD(6);
+ MOVEWORD(7);
+ ADD_ROUND_KEY_8;
}
#undef MAKEWORD
#undef LASTWORD
-#define MAKEWORD(i) ( newstate[i] = (D0[(block[i] >> 24) & 0xFF] ^ \
- D1[(block[(i+C1)%Nb] >> 16) & 0xFF] ^ \
- D2[(block[(i+C2)%Nb] >> 8) & 0xFF] ^ \
- D3[block[(i+C3)%Nb] & 0xFF]) )
-#define LASTWORD(i) (newstate[i] = (Sboxinv[(block[i] >> 24) & 0xFF] << 24) | \
- (Sboxinv[(block[(i+C1)%Nb] >> 16) & 0xFF] << 16) | \
- (Sboxinv[(block[(i+C2)%Nb] >> 8) & 0xFF] << 8) | \
- (Sboxinv[(block[(i+C3)%Nb] ) & 0xFF] ) )
-static void aes_decrypt_nb_4(AESContext * ctx, unsigned int * block)
-{
- int i;
- static const int C1 = 4 - 1, C2 = 4 - 2, C3 = 4 - 3, Nb = 4;
- unsigned int *keysched = ctx->invkeysched;
- unsigned int newstate[4];
- for (i = 0; i < ctx->Nr - 1; i++) {
- ADD_ROUND_KEY_4;
- MAKEWORD(0);
- MAKEWORD(1);
- MAKEWORD(2);
- MAKEWORD(3);
- MOVEWORD(0);
- MOVEWORD(1);
- MOVEWORD(2);
- MOVEWORD(3);
- }
+#define MAKEWORD(i) \
+ (newstate[i] = (D0[(block[i] >> 24) & 0xFF] ^ \
+ D1[(block[(i + C1) % Nb] >> 16) & 0xFF] ^ \
+ D2[(block[(i + C2) % Nb] >> 8) & 0xFF] ^ \
+ D3[block[(i + C3) % Nb] & 0xFF]))
+#define LASTWORD(i) \
+ (newstate[i] = (Sboxinv[(block[i] >> 24) & 0xFF] << 24) | \
+ (Sboxinv[(block[(i + C1) % Nb] >> 16) & 0xFF] << 16) | \
+ (Sboxinv[(block[(i + C2) % Nb] >> 8) & 0xFF] << 8) | \
+ (Sboxinv[(block[(i + C3) % Nb]) & 0xFF]))
+static void aes_decrypt_nb_4(AESContext* ctx, unsigned int* block) {
+ int i;
+ static const int C1 = 4 - 1, C2 = 4 - 2, C3 = 4 - 3, Nb = 4;
+ unsigned int* keysched = ctx->invkeysched;
+ unsigned int newstate[4];
+ for (i = 0; i < ctx->Nr - 1; i++) {
ADD_ROUND_KEY_4;
- LASTWORD(0);
- LASTWORD(1);
- LASTWORD(2);
- LASTWORD(3);
+ MAKEWORD(0);
+ MAKEWORD(1);
+ MAKEWORD(2);
+ MAKEWORD(3);
MOVEWORD(0);
MOVEWORD(1);
MOVEWORD(2);
MOVEWORD(3);
- ADD_ROUND_KEY_4;
+ }
+ ADD_ROUND_KEY_4;
+ LASTWORD(0);
+ LASTWORD(1);
+ LASTWORD(2);
+ LASTWORD(3);
+ MOVEWORD(0);
+ MOVEWORD(1);
+ MOVEWORD(2);
+ MOVEWORD(3);
+ ADD_ROUND_KEY_4;
}
-static void aes_decrypt_nb_6(AESContext * ctx, unsigned int * block)
-{
- int i;
- static const int C1 = 6 - 1, C2 = 6 - 2, C3 = 6 - 3, Nb = 6;
- unsigned int *keysched = ctx->invkeysched;
- unsigned int newstate[6];
- for (i = 0; i < ctx->Nr - 1; i++) {
- ADD_ROUND_KEY_6;
- MAKEWORD(0);
- MAKEWORD(1);
- MAKEWORD(2);
- MAKEWORD(3);
- MAKEWORD(4);
- MAKEWORD(5);
- MOVEWORD(0);
- MOVEWORD(1);
- MOVEWORD(2);
- MOVEWORD(3);
- MOVEWORD(4);
- MOVEWORD(5);
- }
+static void aes_decrypt_nb_6(AESContext* ctx, unsigned int* block) {
+ int i;
+ static const int C1 = 6 - 1, C2 = 6 - 2, C3 = 6 - 3, Nb = 6;
+ unsigned int* keysched = ctx->invkeysched;
+ unsigned int newstate[6];
+ for (i = 0; i < ctx->Nr - 1; i++) {
ADD_ROUND_KEY_6;
- LASTWORD(0);
- LASTWORD(1);
- LASTWORD(2);
- LASTWORD(3);
- LASTWORD(4);
- LASTWORD(5);
+ MAKEWORD(0);
+ MAKEWORD(1);
+ MAKEWORD(2);
+ MAKEWORD(3);
+ MAKEWORD(4);
+ MAKEWORD(5);
MOVEWORD(0);
MOVEWORD(1);
MOVEWORD(2);
MOVEWORD(3);
MOVEWORD(4);
MOVEWORD(5);
- ADD_ROUND_KEY_6;
+ }
+ ADD_ROUND_KEY_6;
+ LASTWORD(0);
+ LASTWORD(1);
+ LASTWORD(2);
+ LASTWORD(3);
+ LASTWORD(4);
+ LASTWORD(5);
+ MOVEWORD(0);
+ MOVEWORD(1);
+ MOVEWORD(2);
+ MOVEWORD(3);
+ MOVEWORD(4);
+ MOVEWORD(5);
+ ADD_ROUND_KEY_6;
}
-static void aes_decrypt_nb_8(AESContext * ctx, unsigned int * block)
-{
- int i;
- static const int C1 = 8 - 1, C2 = 8 - 3, C3 = 8 - 4, Nb = 8;
- unsigned int *keysched = ctx->invkeysched;
- unsigned int newstate[8];
- for (i = 0; i < ctx->Nr - 1; i++) {
- ADD_ROUND_KEY_8;
- MAKEWORD(0);
- MAKEWORD(1);
- MAKEWORD(2);
- MAKEWORD(3);
- MAKEWORD(4);
- MAKEWORD(5);
- MAKEWORD(6);
- MAKEWORD(7);
- MOVEWORD(0);
- MOVEWORD(1);
- MOVEWORD(2);
- MOVEWORD(3);
- MOVEWORD(4);
- MOVEWORD(5);
- MOVEWORD(6);
- MOVEWORD(7);
- }
+static void aes_decrypt_nb_8(AESContext* ctx, unsigned int* block) {
+ int i;
+ static const int C1 = 8 - 1, C2 = 8 - 3, C3 = 8 - 4, Nb = 8;
+ unsigned int* keysched = ctx->invkeysched;
+ unsigned int newstate[8];
+ for (i = 0; i < ctx->Nr - 1; i++) {
ADD_ROUND_KEY_8;
- LASTWORD(0);
- LASTWORD(1);
- LASTWORD(2);
- LASTWORD(3);
- LASTWORD(4);
- LASTWORD(5);
- LASTWORD(6);
- LASTWORD(7);
+ MAKEWORD(0);
+ MAKEWORD(1);
+ MAKEWORD(2);
+ MAKEWORD(3);
+ MAKEWORD(4);
+ MAKEWORD(5);
+ MAKEWORD(6);
+ MAKEWORD(7);
MOVEWORD(0);
MOVEWORD(1);
MOVEWORD(2);
@@ -869,143 +662,170 @@ static void aes_decrypt_nb_8(AESContext * ctx, unsigned int * block)
MOVEWORD(5);
MOVEWORD(6);
MOVEWORD(7);
- ADD_ROUND_KEY_8;
+ }
+ ADD_ROUND_KEY_8;
+ LASTWORD(0);
+ LASTWORD(1);
+ LASTWORD(2);
+ LASTWORD(3);
+ LASTWORD(4);
+ LASTWORD(5);
+ LASTWORD(6);
+ LASTWORD(7);
+ MOVEWORD(0);
+ MOVEWORD(1);
+ MOVEWORD(2);
+ MOVEWORD(3);
+ MOVEWORD(4);
+ MOVEWORD(5);
+ MOVEWORD(6);
+ MOVEWORD(7);
+ ADD_ROUND_KEY_8;
}
#undef MAKEWORD
#undef LASTWORD
-static void aes_setup(AESContext * ctx, int blocklen,
- const unsigned char *key, int keylen)
-{
- int i, j, Nk, rconst;
- ASSERT(blocklen == 16 || blocklen == 24 || blocklen == 32);
- ASSERT(keylen == 16 || keylen == 24 || keylen == 32);
- Nk = keylen / 4;
- ctx->Nb = blocklen / 4;
- ctx->Nr = 6 + (ctx->Nb > Nk ? ctx->Nb : Nk);
- if (ctx->Nb == 8) {
- ctx->encrypt = aes_encrypt_nb_8, ctx->decrypt = aes_decrypt_nb_8;
- } else if (ctx->Nb == 6) {
- ctx->encrypt = aes_encrypt_nb_6, ctx->decrypt = aes_decrypt_nb_6;
- } else if (ctx->Nb == 4) {
- ctx->encrypt = aes_encrypt_nb_4, ctx->decrypt = aes_decrypt_nb_4;
+static void aes_setup(AESContext* ctx,
+ int blocklen,
+ const unsigned char* key,
+ int keylen) {
+ int i, j, Nk, rconst;
+ ASSERT(blocklen == 16 || blocklen == 24 || blocklen == 32);
+ ASSERT(keylen == 16 || keylen == 24 || keylen == 32);
+ Nk = keylen / 4;
+ ctx->Nb = blocklen / 4;
+ ctx->Nr = 6 + (ctx->Nb > Nk ? ctx->Nb : Nk);
+ if (ctx->Nb == 8) {
+ ctx->encrypt = aes_encrypt_nb_8, ctx->decrypt = aes_decrypt_nb_8;
+ } else if (ctx->Nb == 6) {
+ ctx->encrypt = aes_encrypt_nb_6, ctx->decrypt = aes_decrypt_nb_6;
+ } else if (ctx->Nb == 4) {
+ ctx->encrypt = aes_encrypt_nb_4, ctx->decrypt = aes_decrypt_nb_4;
+ }
+ rconst = 1;
+ for (i = 0; i < (ctx->Nr + 1) * ctx->Nb; i++) {
+ if (i < Nk) {
+ ctx->keysched[i] = GET_32BIT_MSB_FIRST(key + 4 * i);
+ } else {
+ unsigned int temp = ctx->keysched[i - 1];
+ if (i % Nk == 0) {
+ int a, b, c, d;
+ a = (temp >> 16) & 0xFF;
+ b = (temp >> 8) & 0xFF;
+ c = (temp >> 0) & 0xFF;
+ d = (temp >> 24) & 0xFF;
+ temp = Sbox[a] ^ rconst;
+ temp = (temp << 8) | Sbox[b];
+ temp = (temp << 8) | Sbox[c];
+ temp = (temp << 8) | Sbox[d];
+ rconst = mulby2(rconst);
+ } else if (i % Nk == 4 && Nk > 6) {
+ int a, b, c, d;
+ a = (temp >> 24) & 0xFF;
+ b = (temp >> 16) & 0xFF;
+ c = (temp >> 8) & 0xFF;
+ d = (temp >> 0) & 0xFF;
+ temp = Sbox[a];
+ temp = (temp << 8) | Sbox[b];
+ temp = (temp << 8) | Sbox[c];
+ temp = (temp << 8) | Sbox[d];
+ }
+ ctx->keysched[i] = ctx->keysched[i - Nk] ^ temp;
}
- rconst = 1;
- for (i = 0; i < (ctx->Nr + 1) * ctx->Nb; i++) {
- if (i < Nk) {
- ctx->keysched[i] = GET_32BIT_MSB_FIRST(key + 4 * i);
- } else {
- unsigned int temp = ctx->keysched[i - 1];
- if (i % Nk == 0) {
- int a, b, c, d;
- a = (temp >> 16) & 0xFF;
- b = (temp >> 8) & 0xFF;
- c = (temp >> 0) & 0xFF;
- d = (temp >> 24) & 0xFF;
- temp = Sbox[a] ^ rconst;
- temp = (temp << 8) | Sbox[b];
- temp = (temp << 8) | Sbox[c];
- temp = (temp << 8) | Sbox[d];
- rconst = mulby2(rconst);
- } else if (i % Nk == 4 && Nk > 6) {
- int a, b, c, d;
- a = (temp >> 24) & 0xFF;
- b = (temp >> 16) & 0xFF;
- c = (temp >> 8) & 0xFF;
- d = (temp >> 0) & 0xFF;
- temp = Sbox[a];
- temp = (temp << 8) | Sbox[b];
- temp = (temp << 8) | Sbox[c];
- temp = (temp << 8) | Sbox[d];
- }
- ctx->keysched[i] = ctx->keysched[i - Nk] ^ temp;
- }
- }
- for (i = 0; i <= ctx->Nr; i++) {
- for (j = 0; j < ctx->Nb; j++) {
- unsigned int temp;
- temp = ctx->keysched[(ctx->Nr - i) * ctx->Nb + j];
- if (i != 0 && i != ctx->Nr) {
- int a, b, c, d;
- a = (temp >> 24) & 0xFF;
- b = (temp >> 16) & 0xFF;
- c = (temp >> 8) & 0xFF;
- d = (temp >> 0) & 0xFF;
- temp = D0[Sbox[a]];
- temp ^= D1[Sbox[b]];
- temp ^= D2[Sbox[c]];
- temp ^= D3[Sbox[d]];
- }
- ctx->invkeysched[i * ctx->Nb + j] = temp;
- }
+ }
+ for (i = 0; i <= ctx->Nr; i++) {
+ for (j = 0; j < ctx->Nb; j++) {
+ unsigned int temp;
+ temp = ctx->keysched[(ctx->Nr - i) * ctx->Nb + j];
+ if (i != 0 && i != ctx->Nr) {
+ int a, b, c, d;
+ a = (temp >> 24) & 0xFF;
+ b = (temp >> 16) & 0xFF;
+ c = (temp >> 8) & 0xFF;
+ d = (temp >> 0) & 0xFF;
+ temp = D0[Sbox[a]];
+ temp ^= D1[Sbox[b]];
+ temp ^= D2[Sbox[c]];
+ temp ^= D3[Sbox[d]];
+ }
+ ctx->invkeysched[i * ctx->Nb + j] = temp;
}
+ }
}
-static void aes_decrypt(AESContext * ctx, unsigned int * block)
-{
- ctx->decrypt(ctx, block);
+static void aes_decrypt(AESContext* ctx, unsigned int* block) {
+ ctx->decrypt(ctx, block);
}
-static void aes_decrypt_cbc(unsigned char *dest, const unsigned char *src, int len, AESContext * ctx)
-{
- unsigned int iv[4], x[4], ct[4];
- int i;
- ASSERT((len & 15) == 0);
- FXSYS_memcpy(iv, ctx->iv, sizeof(iv));
- while (len > 0) {
- for (i = 0; i < 4; i++) {
- x[i] = ct[i] = GET_32BIT_MSB_FIRST(src + 4 * i);
- }
- aes_decrypt(ctx, x);
- for (i = 0; i < 4; i++) {
- PUT_32BIT_MSB_FIRST(dest + 4 * i, iv[i] ^ x[i]);
- iv[i] = ct[i];
- }
- dest += 16;
- src += 16;
- len -= 16;
+static void aes_decrypt_cbc(unsigned char* dest,
+ const unsigned char* src,
+ int len,
+ AESContext* ctx) {
+ unsigned int iv[4], x[4], ct[4];
+ int i;
+ ASSERT((len & 15) == 0);
+ FXSYS_memcpy(iv, ctx->iv, sizeof(iv));
+ while (len > 0) {
+ for (i = 0; i < 4; i++) {
+ x[i] = ct[i] = GET_32BIT_MSB_FIRST(src + 4 * i);
+ }
+ aes_decrypt(ctx, x);
+ for (i = 0; i < 4; i++) {
+ PUT_32BIT_MSB_FIRST(dest + 4 * i, iv[i] ^ x[i]);
+ iv[i] = ct[i];
}
- FXSYS_memcpy(ctx->iv, iv, sizeof(iv));
+ dest += 16;
+ src += 16;
+ len -= 16;
+ }
+ FXSYS_memcpy(ctx->iv, iv, sizeof(iv));
}
-static void aes_encrypt(AESContext * ctx, unsigned int * block)
-{
- ctx->encrypt(ctx, block);
+static void aes_encrypt(AESContext* ctx, unsigned int* block) {
+ ctx->encrypt(ctx, block);
}
-static void aes_encrypt_cbc(unsigned char *dest, const unsigned char *src, int len, AESContext * ctx)
-{
- unsigned int iv[4];
- int i;
- ASSERT((len & 15) == 0);
- FXSYS_memcpy(iv, ctx->iv, sizeof(iv));
- while (len > 0) {
- for (i = 0; i < 4; i++) {
- iv[i] ^= GET_32BIT_MSB_FIRST(src + 4 * i);
- }
- aes_encrypt(ctx, iv);
- for (i = 0; i < 4; i++) {
- PUT_32BIT_MSB_FIRST(dest + 4 * i, iv[i]);
- }
- dest += 16;
- src += 16;
- len -= 16;
+static void aes_encrypt_cbc(unsigned char* dest,
+ const unsigned char* src,
+ int len,
+ AESContext* ctx) {
+ unsigned int iv[4];
+ int i;
+ ASSERT((len & 15) == 0);
+ FXSYS_memcpy(iv, ctx->iv, sizeof(iv));
+ while (len > 0) {
+ for (i = 0; i < 4; i++) {
+ iv[i] ^= GET_32BIT_MSB_FIRST(src + 4 * i);
}
- FXSYS_memcpy(ctx->iv, iv, sizeof(iv));
+ aes_encrypt(ctx, iv);
+ for (i = 0; i < 4; i++) {
+ PUT_32BIT_MSB_FIRST(dest + 4 * i, iv[i]);
+ }
+ dest += 16;
+ src += 16;
+ len -= 16;
+ }
+ FXSYS_memcpy(ctx->iv, iv, sizeof(iv));
}
-void CRYPT_AESSetKey(void* context, FX_DWORD blocklen, const uint8_t* key, FX_DWORD keylen, FX_BOOL bEncrypt)
-{
- aes_setup((AESContext*)context, blocklen, key, keylen);
+void CRYPT_AESSetKey(void* context,
+ FX_DWORD blocklen,
+ const uint8_t* key,
+ FX_DWORD keylen,
+ FX_BOOL bEncrypt) {
+ aes_setup((AESContext*)context, blocklen, key, keylen);
}
-void CRYPT_AESSetIV(void* context, const uint8_t* iv)
-{
- int i;
- for (i = 0; i < ((AESContext*)context)->Nb; i++) {
- ((AESContext*)context)->iv[i] = GET_32BIT_MSB_FIRST(iv + 4 * i);
- }
+void CRYPT_AESSetIV(void* context, const uint8_t* iv) {
+ int i;
+ for (i = 0; i < ((AESContext*)context)->Nb; i++) {
+ ((AESContext*)context)->iv[i] = GET_32BIT_MSB_FIRST(iv + 4 * i);
+ }
}
-void CRYPT_AESDecrypt(void* context, uint8_t* dest, const uint8_t* src, FX_DWORD len)
-{
- aes_decrypt_cbc(dest, src, len, (AESContext*)context);
+void CRYPT_AESDecrypt(void* context,
+ uint8_t* dest,
+ const uint8_t* src,
+ FX_DWORD len) {
+ aes_decrypt_cbc(dest, src, len, (AESContext*)context);
}
-void CRYPT_AESEncrypt(void* context, uint8_t* dest, const uint8_t* src, FX_DWORD len)
-{
- aes_encrypt_cbc(dest, src, len, (AESContext*)context);
+void CRYPT_AESEncrypt(void* context,
+ uint8_t* dest,
+ const uint8_t* src,
+ FX_DWORD len) {
+ aes_encrypt_cbc(dest, src, len, (AESContext*)context);
}
#ifdef __cplusplus
};
diff --git a/core/src/fdrm/crypto/fx_crypt_sha.cpp b/core/src/fdrm/crypto/fx_crypt_sha.cpp
index b22348a03c..98e61d03ee 100644
--- a/core/src/fdrm/crypto/fx_crypt_sha.cpp
+++ b/core/src/fdrm/crypto/fx_crypt_sha.cpp
@@ -9,732 +9,647 @@
extern "C" {
#endif
typedef struct {
- unsigned int h[5];
- unsigned char block[64];
- int blkused;
- unsigned int lenhi, lenlo;
+ unsigned int h[5];
+ unsigned char block[64];
+ int blkused;
+ unsigned int lenhi, lenlo;
} SHA_State;
-#define rol(x,y) ( ((x) << (y)) | (((unsigned int)x) >> (32-y)) )
-static void SHA_Core_Init(unsigned int h[5])
-{
- h[0] = 0x67452301;
- h[1] = 0xefcdab89;
- h[2] = 0x98badcfe;
- h[3] = 0x10325476;
- h[4] = 0xc3d2e1f0;
+#define rol(x, y) (((x) << (y)) | (((unsigned int)x) >> (32 - y)))
+static void SHA_Core_Init(unsigned int h[5]) {
+ h[0] = 0x67452301;
+ h[1] = 0xefcdab89;
+ h[2] = 0x98badcfe;
+ h[3] = 0x10325476;
+ h[4] = 0xc3d2e1f0;
}
-static void SHATransform(unsigned int * digest, unsigned int * block)
-{
- unsigned int w[80];
- unsigned int a, b, c, d, e;
- int t;
- for (t = 0; t < 16; t++) {
- w[t] = block[t];
- }
- for (t = 16; t < 80; t++) {
- unsigned int tmp = w[t - 3] ^ w[t - 8] ^ w[t - 14] ^ w[t - 16];
- w[t] = rol(tmp, 1);
- }
- a = digest[0];
- b = digest[1];
- c = digest[2];
- d = digest[3];
- e = digest[4];
- for (t = 0; t < 20; t++) {
- unsigned int tmp =
- rol(a, 5) + ((b & c) | (d & ~b)) + e + w[t] + 0x5a827999;
- e = d;
- d = c;
- c = rol(b, 30);
- b = a;
- a = tmp;
- }
- for (t = 20; t < 40; t++) {
- unsigned int tmp = rol(a, 5) + (b ^ c ^ d) + e + w[t] + 0x6ed9eba1;
- e = d;
- d = c;
- c = rol(b, 30);
- b = a;
- a = tmp;
- }
- for (t = 40; t < 60; t++) {
- unsigned int tmp = rol(a,
- 5) + ((b & c) | (b & d) | (c & d)) + e + w[t] +
- 0x8f1bbcdc;
- e = d;
- d = c;
- c = rol(b, 30);
- b = a;
- a = tmp;
- }
- for (t = 60; t < 80; t++) {
- unsigned int tmp = rol(a, 5) + (b ^ c ^ d) + e + w[t] + 0xca62c1d6;
- e = d;
- d = c;
- c = rol(b, 30);
- b = a;
- a = tmp;
- }
- digest[0] += a;
- digest[1] += b;
- digest[2] += c;
- digest[3] += d;
- digest[4] += e;
+static void SHATransform(unsigned int* digest, unsigned int* block) {
+ unsigned int w[80];
+ unsigned int a, b, c, d, e;
+ int t;
+ for (t = 0; t < 16; t++) {
+ w[t] = block[t];
+ }
+ for (t = 16; t < 80; t++) {
+ unsigned int tmp = w[t - 3] ^ w[t - 8] ^ w[t - 14] ^ w[t - 16];
+ w[t] = rol(tmp, 1);
+ }
+ a = digest[0];
+ b = digest[1];
+ c = digest[2];
+ d = digest[3];
+ e = digest[4];
+ for (t = 0; t < 20; t++) {
+ unsigned int tmp = rol(a, 5) + ((b & c) | (d & ~b)) + e + w[t] + 0x5a827999;
+ e = d;
+ d = c;
+ c = rol(b, 30);
+ b = a;
+ a = tmp;
+ }
+ for (t = 20; t < 40; t++) {
+ unsigned int tmp = rol(a, 5) + (b ^ c ^ d) + e + w[t] + 0x6ed9eba1;
+ e = d;
+ d = c;
+ c = rol(b, 30);
+ b = a;
+ a = tmp;
+ }
+ for (t = 40; t < 60; t++) {
+ unsigned int tmp =
+ rol(a, 5) + ((b & c) | (b & d) | (c & d)) + e + w[t] + 0x8f1bbcdc;
+ e = d;
+ d = c;
+ c = rol(b, 30);
+ b = a;
+ a = tmp;
+ }
+ for (t = 60; t < 80; t++) {
+ unsigned int tmp = rol(a, 5) + (b ^ c ^ d) + e + w[t] + 0xca62c1d6;
+ e = d;
+ d = c;
+ c = rol(b, 30);
+ b = a;
+ a = tmp;
+ }
+ digest[0] += a;
+ digest[1] += b;
+ digest[2] += c;
+ digest[3] += d;
+ digest[4] += e;
}
-void CRYPT_SHA1Start(void* context)
-{
- SHA_State * s = (SHA_State*)context;
- SHA_Core_Init(s->h);
- s->blkused = 0;
- s->lenhi = s->lenlo = 0;
+void CRYPT_SHA1Start(void* context) {
+ SHA_State* s = (SHA_State*)context;
+ SHA_Core_Init(s->h);
+ s->blkused = 0;
+ s->lenhi = s->lenlo = 0;
}
-void CRYPT_SHA1Update(void* context, const uint8_t* data, FX_DWORD size)
-{
- SHA_State * s = (SHA_State*)context;
- unsigned char *q = (unsigned char *)data;
- unsigned int wordblock[16];
- int len = size;
- unsigned int lenw = len;
- int i;
- s->lenlo += lenw;
- s->lenhi += (s->lenlo < lenw);
- if (s->blkused && s->blkused + len < 64) {
- FXSYS_memcpy(s->block + s->blkused, q, len);
- s->blkused += len;
- } else {
- while (s->blkused + len >= 64) {
- FXSYS_memcpy(s->block + s->blkused, q, 64 - s->blkused);
- q += 64 - s->blkused;
- len -= 64 - s->blkused;
- for (i = 0; i < 16; i++) {
- wordblock[i] =
- (((unsigned int) s->block[i * 4 + 0]) << 24) |
- (((unsigned int) s->block[i * 4 + 1]) << 16) |
- (((unsigned int) s->block[i * 4 + 2]) << 8) |
- (((unsigned int) s->block[i * 4 + 3]) << 0);
- }
- SHATransform(s->h, wordblock);
- s->blkused = 0;
- }
- FXSYS_memcpy(s->block, q, len);
- s->blkused = len;
+void CRYPT_SHA1Update(void* context, const uint8_t* data, FX_DWORD size) {
+ SHA_State* s = (SHA_State*)context;
+ unsigned char* q = (unsigned char*)data;
+ unsigned int wordblock[16];
+ int len = size;
+ unsigned int lenw = len;
+ int i;
+ s->lenlo += lenw;
+ s->lenhi += (s->lenlo < lenw);
+ if (s->blkused && s->blkused + len < 64) {
+ FXSYS_memcpy(s->block + s->blkused, q, len);
+ s->blkused += len;
+ } else {
+ while (s->blkused + len >= 64) {
+ FXSYS_memcpy(s->block + s->blkused, q, 64 - s->blkused);
+ q += 64 - s->blkused;
+ len -= 64 - s->blkused;
+ for (i = 0; i < 16; i++) {
+ wordblock[i] = (((unsigned int)s->block[i * 4 + 0]) << 24) |
+ (((unsigned int)s->block[i * 4 + 1]) << 16) |
+ (((unsigned int)s->block[i * 4 + 2]) << 8) |
+ (((unsigned int)s->block[i * 4 + 3]) << 0);
+ }
+ SHATransform(s->h, wordblock);
+ s->blkused = 0;
}
+ FXSYS_memcpy(s->block, q, len);
+ s->blkused = len;
+ }
}
-void CRYPT_SHA1Finish(void* context, uint8_t digest[20])
-{
- SHA_State * s = (SHA_State*)context;
- int i;
- int pad;
- unsigned char c[64];
- unsigned int lenhi, lenlo;
- if (s->blkused >= 56) {
- pad = 56 + 64 - s->blkused;
- } else {
- pad = 56 - s->blkused;
- }
- lenhi = (s->lenhi << 3) | (s->lenlo >> (32 - 3));
- lenlo = (s->lenlo << 3);
- FXSYS_memset(c, 0, pad);
- c[0] = 0x80;
- CRYPT_SHA1Update(s, c, pad);
- c[0] = (lenhi >> 24) & 0xFF;
- c[1] = (lenhi >> 16) & 0xFF;
- c[2] = (lenhi >> 8) & 0xFF;
- c[3] = (lenhi >> 0) & 0xFF;
- c[4] = (lenlo >> 24) & 0xFF;
- c[5] = (lenlo >> 16) & 0xFF;
- c[6] = (lenlo >> 8) & 0xFF;
- c[7] = (lenlo >> 0) & 0xFF;
- CRYPT_SHA1Update(s, c, 8);
- for (i = 0; i < 5; i++) {
- digest[i * 4] = (s->h[i] >> 24) & 0xFF;
- digest[i * 4 + 1] = (s->h[i] >> 16) & 0xFF;
- digest[i * 4 + 2] = (s->h[i] >> 8) & 0xFF;
- digest[i * 4 + 3] = (s->h[i]) & 0xFF;
- }
+void CRYPT_SHA1Finish(void* context, uint8_t digest[20]) {
+ SHA_State* s = (SHA_State*)context;
+ int i;
+ int pad;
+ unsigned char c[64];
+ unsigned int lenhi, lenlo;
+ if (s->blkused >= 56) {
+ pad = 56 + 64 - s->blkused;
+ } else {
+ pad = 56 - s->blkused;
+ }
+ lenhi = (s->lenhi << 3) | (s->lenlo >> (32 - 3));
+ lenlo = (s->lenlo << 3);
+ FXSYS_memset(c, 0, pad);
+ c[0] = 0x80;
+ CRYPT_SHA1Update(s, c, pad);
+ c[0] = (lenhi >> 24) & 0xFF;
+ c[1] = (lenhi >> 16) & 0xFF;
+ c[2] = (lenhi >> 8) & 0xFF;
+ c[3] = (lenhi >> 0) & 0xFF;
+ c[4] = (lenlo >> 24) & 0xFF;
+ c[5] = (lenlo >> 16) & 0xFF;
+ c[6] = (lenlo >> 8) & 0xFF;
+ c[7] = (lenlo >> 0) & 0xFF;
+ CRYPT_SHA1Update(s, c, 8);
+ for (i = 0; i < 5; i++) {
+ digest[i * 4] = (s->h[i] >> 24) & 0xFF;
+ digest[i * 4 + 1] = (s->h[i] >> 16) & 0xFF;
+ digest[i * 4 + 2] = (s->h[i] >> 8) & 0xFF;
+ digest[i * 4 + 3] = (s->h[i]) & 0xFF;
+ }
}
-void CRYPT_SHA1Generate(const uint8_t* data, FX_DWORD size, uint8_t digest[20])
-{
- SHA_State s;
- CRYPT_SHA1Start(&s);
- CRYPT_SHA1Update(&s, data, size);
- CRYPT_SHA1Finish(&s, digest);
+void CRYPT_SHA1Generate(const uint8_t* data,
+ FX_DWORD size,
+ uint8_t digest[20]) {
+ SHA_State s;
+ CRYPT_SHA1Start(&s);
+ CRYPT_SHA1Update(&s, data, size);
+ CRYPT_SHA1Finish(&s, digest);
}
typedef struct {
- FX_DWORD total[2];
- FX_DWORD state[8];
- uint8_t buffer[64];
+ FX_DWORD total[2];
+ FX_DWORD state[8];
+ uint8_t buffer[64];
+} sha256_context;
+#define GET_FX_DWORD(n, b, i) \
+ { \
+ (n) = ((FX_DWORD)(b)[(i)] << 24) | ((FX_DWORD)(b)[(i) + 1] << 16) | \
+ ((FX_DWORD)(b)[(i) + 2] << 8) | ((FX_DWORD)(b)[(i) + 3]); \
+ }
+#define PUT_FX_DWORD(n, b, i) \
+ { \
+ (b)[(i)] = (uint8_t)((n) >> 24); \
+ (b)[(i) + 1] = (uint8_t)((n) >> 16); \
+ (b)[(i) + 2] = (uint8_t)((n) >> 8); \
+ (b)[(i) + 3] = (uint8_t)((n)); \
+ }
+void CRYPT_SHA256Start(void* context) {
+ sha256_context* ctx = (sha256_context*)context;
+ ctx->total[0] = 0;
+ ctx->total[1] = 0;
+ ctx->state[0] = 0x6A09E667;
+ ctx->state[1] = 0xBB67AE85;
+ ctx->state[2] = 0x3C6EF372;
+ ctx->state[3] = 0xA54FF53A;
+ ctx->state[4] = 0x510E527F;
+ ctx->state[5] = 0x9B05688C;
+ ctx->state[6] = 0x1F83D9AB;
+ ctx->state[7] = 0x5BE0CD19;
}
-sha256_context;
-#define GET_FX_DWORD(n,b,i) \
- { \
- (n) = ( (FX_DWORD) (b)[(i) ] << 24 ) \
- | ( (FX_DWORD) (b)[(i) + 1] << 16 ) \
- | ( (FX_DWORD) (b)[(i) + 2] << 8 ) \
- | ( (FX_DWORD) (b)[(i) + 3] ); \
- }
-#define PUT_FX_DWORD(n,b,i) \
- { \
- (b)[(i) ] = (uint8_t) ( (n) >> 24 ); \
- (b)[(i) + 1] = (uint8_t) ( (n) >> 16 ); \
- (b)[(i) + 2] = (uint8_t) ( (n) >> 8 ); \
- (b)[(i) + 3] = (uint8_t) ( (n) ); \
- }
-void CRYPT_SHA256Start( void* context )
-{
- sha256_context *ctx = (sha256_context *)context;
- ctx->total[0] = 0;
- ctx->total[1] = 0;
- ctx->state[0] = 0x6A09E667;
- ctx->state[1] = 0xBB67AE85;
- ctx->state[2] = 0x3C6EF372;
- ctx->state[3] = 0xA54FF53A;
- ctx->state[4] = 0x510E527F;
- ctx->state[5] = 0x9B05688C;
- ctx->state[6] = 0x1F83D9AB;
- ctx->state[7] = 0x5BE0CD19;
+static void sha256_process(sha256_context* ctx, const uint8_t data[64]) {
+ FX_DWORD temp1, temp2, W[64];
+ FX_DWORD A, B, C, D, E, F, G, H;
+ GET_FX_DWORD(W[0], data, 0);
+ GET_FX_DWORD(W[1], data, 4);
+ GET_FX_DWORD(W[2], data, 8);
+ GET_FX_DWORD(W[3], data, 12);
+ GET_FX_DWORD(W[4], data, 16);
+ GET_FX_DWORD(W[5], data, 20);
+ GET_FX_DWORD(W[6], data, 24);
+ GET_FX_DWORD(W[7], data, 28);
+ GET_FX_DWORD(W[8], data, 32);
+ GET_FX_DWORD(W[9], data, 36);
+ GET_FX_DWORD(W[10], data, 40);
+ GET_FX_DWORD(W[11], data, 44);
+ GET_FX_DWORD(W[12], data, 48);
+ GET_FX_DWORD(W[13], data, 52);
+ GET_FX_DWORD(W[14], data, 56);
+ GET_FX_DWORD(W[15], data, 60);
+#define SHR(x, n) ((x & 0xFFFFFFFF) >> n)
+#define ROTR(x, n) (SHR(x, n) | (x << (32 - n)))
+#define S0(x) (ROTR(x, 7) ^ ROTR(x, 18) ^ SHR(x, 3))
+#define S1(x) (ROTR(x, 17) ^ ROTR(x, 19) ^ SHR(x, 10))
+#define S2(x) (ROTR(x, 2) ^ ROTR(x, 13) ^ ROTR(x, 22))
+#define S3(x) (ROTR(x, 6) ^ ROTR(x, 11) ^ ROTR(x, 25))
+#define F0(x, y, z) ((x & y) | (z & (x | y)))
+#define F1(x, y, z) (z ^ (x & (y ^ z)))
+#define R(t) (W[t] = S1(W[t - 2]) + W[t - 7] + S0(W[t - 15]) + W[t - 16])
+#define P(a, b, c, d, e, f, g, h, x, K) \
+ { \
+ temp1 = h + S3(e) + F1(e, f, g) + K + x; \
+ temp2 = S2(a) + F0(a, b, c); \
+ d += temp1; \
+ h = temp1 + temp2; \
+ }
+ A = ctx->state[0];
+ B = ctx->state[1];
+ C = ctx->state[2];
+ D = ctx->state[3];
+ E = ctx->state[4];
+ F = ctx->state[5];
+ G = ctx->state[6];
+ H = ctx->state[7];
+ P(A, B, C, D, E, F, G, H, W[0], 0x428A2F98);
+ P(H, A, B, C, D, E, F, G, W[1], 0x71374491);
+ P(G, H, A, B, C, D, E, F, W[2], 0xB5C0FBCF);
+ P(F, G, H, A, B, C, D, E, W[3], 0xE9B5DBA5);
+ P(E, F, G, H, A, B, C, D, W[4], 0x3956C25B);
+ P(D, E, F, G, H, A, B, C, W[5], 0x59F111F1);
+ P(C, D, E, F, G, H, A, B, W[6], 0x923F82A4);
+ P(B, C, D, E, F, G, H, A, W[7], 0xAB1C5ED5);
+ P(A, B, C, D, E, F, G, H, W[8], 0xD807AA98);
+ P(H, A, B, C, D, E, F, G, W[9], 0x12835B01);
+ P(G, H, A, B, C, D, E, F, W[10], 0x243185BE);
+ P(F, G, H, A, B, C, D, E, W[11], 0x550C7DC3);
+ P(E, F, G, H, A, B, C, D, W[12], 0x72BE5D74);
+ P(D, E, F, G, H, A, B, C, W[13], 0x80DEB1FE);
+ P(C, D, E, F, G, H, A, B, W[14], 0x9BDC06A7);
+ P(B, C, D, E, F, G, H, A, W[15], 0xC19BF174);
+ P(A, B, C, D, E, F, G, H, R(16), 0xE49B69C1);
+ P(H, A, B, C, D, E, F, G, R(17), 0xEFBE4786);
+ P(G, H, A, B, C, D, E, F, R(18), 0x0FC19DC6);
+ P(F, G, H, A, B, C, D, E, R(19), 0x240CA1CC);
+ P(E, F, G, H, A, B, C, D, R(20), 0x2DE92C6F);
+ P(D, E, F, G, H, A, B, C, R(21), 0x4A7484AA);
+ P(C, D, E, F, G, H, A, B, R(22), 0x5CB0A9DC);
+ P(B, C, D, E, F, G, H, A, R(23), 0x76F988DA);
+ P(A, B, C, D, E, F, G, H, R(24), 0x983E5152);
+ P(H, A, B, C, D, E, F, G, R(25), 0xA831C66D);
+ P(G, H, A, B, C, D, E, F, R(26), 0xB00327C8);
+ P(F, G, H, A, B, C, D, E, R(27), 0xBF597FC7);
+ P(E, F, G, H, A, B, C, D, R(28), 0xC6E00BF3);
+ P(D, E, F, G, H, A, B, C, R(29), 0xD5A79147);
+ P(C, D, E, F, G, H, A, B, R(30), 0x06CA6351);
+ P(B, C, D, E, F, G, H, A, R(31), 0x14292967);
+ P(A, B, C, D, E, F, G, H, R(32), 0x27B70A85);
+ P(H, A, B, C, D, E, F, G, R(33), 0x2E1B2138);
+ P(G, H, A, B, C, D, E, F, R(34), 0x4D2C6DFC);
+ P(F, G, H, A, B, C, D, E, R(35), 0x53380D13);
+ P(E, F, G, H, A, B, C, D, R(36), 0x650A7354);
+ P(D, E, F, G, H, A, B, C, R(37), 0x766A0ABB);
+ P(C, D, E, F, G, H, A, B, R(38), 0x81C2C92E);
+ P(B, C, D, E, F, G, H, A, R(39), 0x92722C85);
+ P(A, B, C, D, E, F, G, H, R(40), 0xA2BFE8A1);
+ P(H, A, B, C, D, E, F, G, R(41), 0xA81A664B);
+ P(G, H, A, B, C, D, E, F, R(42), 0xC24B8B70);
+ P(F, G, H, A, B, C, D, E, R(43), 0xC76C51A3);
+ P(E, F, G, H, A, B, C, D, R(44), 0xD192E819);
+ P(D, E, F, G, H, A, B, C, R(45), 0xD6990624);
+ P(C, D, E, F, G, H, A, B, R(46), 0xF40E3585);
+ P(B, C, D, E, F, G, H, A, R(47), 0x106AA070);
+ P(A, B, C, D, E, F, G, H, R(48), 0x19A4C116);
+ P(H, A, B, C, D, E, F, G, R(49), 0x1E376C08);
+ P(G, H, A, B, C, D, E, F, R(50), 0x2748774C);
+ P(F, G, H, A, B, C, D, E, R(51), 0x34B0BCB5);
+ P(E, F, G, H, A, B, C, D, R(52), 0x391C0CB3);
+ P(D, E, F, G, H, A, B, C, R(53), 0x4ED8AA4A);
+ P(C, D, E, F, G, H, A, B, R(54), 0x5B9CCA4F);
+ P(B, C, D, E, F, G, H, A, R(55), 0x682E6FF3);
+ P(A, B, C, D, E, F, G, H, R(56), 0x748F82EE);
+ P(H, A, B, C, D, E, F, G, R(57), 0x78A5636F);
+ P(G, H, A, B, C, D, E, F, R(58), 0x84C87814);
+ P(F, G, H, A, B, C, D, E, R(59), 0x8CC70208);
+ P(E, F, G, H, A, B, C, D, R(60), 0x90BEFFFA);
+ P(D, E, F, G, H, A, B, C, R(61), 0xA4506CEB);
+ P(C, D, E, F, G, H, A, B, R(62), 0xBEF9A3F7);
+ P(B, C, D, E, F, G, H, A, R(63), 0xC67178F2);
+ ctx->state[0] += A;
+ ctx->state[1] += B;
+ ctx->state[2] += C;
+ ctx->state[3] += D;
+ ctx->state[4] += E;
+ ctx->state[5] += F;
+ ctx->state[6] += G;
+ ctx->state[7] += H;
}
-static void sha256_process( sha256_context *ctx, const uint8_t data[64] )
-{
- FX_DWORD temp1, temp2, W[64];
- FX_DWORD A, B, C, D, E, F, G, H;
- GET_FX_DWORD( W[0], data, 0 );
- GET_FX_DWORD( W[1], data, 4 );
- GET_FX_DWORD( W[2], data, 8 );
- GET_FX_DWORD( W[3], data, 12 );
- GET_FX_DWORD( W[4], data, 16 );
- GET_FX_DWORD( W[5], data, 20 );
- GET_FX_DWORD( W[6], data, 24 );
- GET_FX_DWORD( W[7], data, 28 );
- GET_FX_DWORD( W[8], data, 32 );
- GET_FX_DWORD( W[9], data, 36 );
- GET_FX_DWORD( W[10], data, 40 );
- GET_FX_DWORD( W[11], data, 44 );
- GET_FX_DWORD( W[12], data, 48 );
- GET_FX_DWORD( W[13], data, 52 );
- GET_FX_DWORD( W[14], data, 56 );
- GET_FX_DWORD( W[15], data, 60 );
-#define SHR(x,n) ((x & 0xFFFFFFFF) >> n)
-#define ROTR(x,n) (SHR(x,n) | (x << (32 - n)))
-#define S0(x) (ROTR(x, 7) ^ ROTR(x,18) ^ SHR(x, 3))
-#define S1(x) (ROTR(x,17) ^ ROTR(x,19) ^ SHR(x,10))
-#define S2(x) (ROTR(x, 2) ^ ROTR(x,13) ^ ROTR(x,22))
-#define S3(x) (ROTR(x, 6) ^ ROTR(x,11) ^ ROTR(x,25))
-#define F0(x,y,z) ((x & y) | (z & (x | y)))
-#define F1(x,y,z) (z ^ (x & (y ^ z)))
-#define R(t) \
- ( \
- W[t] = S1(W[t - 2]) + W[t - 7] + \
- S0(W[t - 15]) + W[t - 16] \
- )
-#define P(a,b,c,d,e,f,g,h,x,K) \
- { \
- temp1 = h + S3(e) + F1(e,f,g) + K + x; \
- temp2 = S2(a) + F0(a,b,c); \
- d += temp1; h = temp1 + temp2; \
- }
- A = ctx->state[0];
- B = ctx->state[1];
- C = ctx->state[2];
- D = ctx->state[3];
- E = ctx->state[4];
- F = ctx->state[5];
- G = ctx->state[6];
- H = ctx->state[7];
- P( A, B, C, D, E, F, G, H, W[ 0], 0x428A2F98 );
- P( H, A, B, C, D, E, F, G, W[ 1], 0x71374491 );
- P( G, H, A, B, C, D, E, F, W[ 2], 0xB5C0FBCF );
- P( F, G, H, A, B, C, D, E, W[ 3], 0xE9B5DBA5 );
- P( E, F, G, H, A, B, C, D, W[ 4], 0x3956C25B );
- P( D, E, F, G, H, A, B, C, W[ 5], 0x59F111F1 );
- P( C, D, E, F, G, H, A, B, W[ 6], 0x923F82A4 );
- P( B, C, D, E, F, G, H, A, W[ 7], 0xAB1C5ED5 );
- P( A, B, C, D, E, F, G, H, W[ 8], 0xD807AA98 );
- P( H, A, B, C, D, E, F, G, W[ 9], 0x12835B01 );
- P( G, H, A, B, C, D, E, F, W[10], 0x243185BE );
- P( F, G, H, A, B, C, D, E, W[11], 0x550C7DC3 );
- P( E, F, G, H, A, B, C, D, W[12], 0x72BE5D74 );
- P( D, E, F, G, H, A, B, C, W[13], 0x80DEB1FE );
- P( C, D, E, F, G, H, A, B, W[14], 0x9BDC06A7 );
- P( B, C, D, E, F, G, H, A, W[15], 0xC19BF174 );
- P( A, B, C, D, E, F, G, H, R(16), 0xE49B69C1 );
- P( H, A, B, C, D, E, F, G, R(17), 0xEFBE4786 );
- P( G, H, A, B, C, D, E, F, R(18), 0x0FC19DC6 );
- P( F, G, H, A, B, C, D, E, R(19), 0x240CA1CC );
- P( E, F, G, H, A, B, C, D, R(20), 0x2DE92C6F );
- P( D, E, F, G, H, A, B, C, R(21), 0x4A7484AA );
- P( C, D, E, F, G, H, A, B, R(22), 0x5CB0A9DC );
- P( B, C, D, E, F, G, H, A, R(23), 0x76F988DA );
- P( A, B, C, D, E, F, G, H, R(24), 0x983E5152 );
- P( H, A, B, C, D, E, F, G, R(25), 0xA831C66D );
- P( G, H, A, B, C, D, E, F, R(26), 0xB00327C8 );
- P( F, G, H, A, B, C, D, E, R(27), 0xBF597FC7 );
- P( E, F, G, H, A, B, C, D, R(28), 0xC6E00BF3 );
- P( D, E, F, G, H, A, B, C, R(29), 0xD5A79147 );
- P( C, D, E, F, G, H, A, B, R(30), 0x06CA6351 );
- P( B, C, D, E, F, G, H, A, R(31), 0x14292967 );
- P( A, B, C, D, E, F, G, H, R(32), 0x27B70A85 );
- P( H, A, B, C, D, E, F, G, R(33), 0x2E1B2138 );
- P( G, H, A, B, C, D, E, F, R(34), 0x4D2C6DFC );
- P( F, G, H, A, B, C, D, E, R(35), 0x53380D13 );
- P( E, F, G, H, A, B, C, D, R(36), 0x650A7354 );
- P( D, E, F, G, H, A, B, C, R(37), 0x766A0ABB );
- P( C, D, E, F, G, H, A, B, R(38), 0x81C2C92E );
- P( B, C, D, E, F, G, H, A, R(39), 0x92722C85 );
- P( A, B, C, D, E, F, G, H, R(40), 0xA2BFE8A1 );
- P( H, A, B, C, D, E, F, G, R(41), 0xA81A664B );
- P( G, H, A, B, C, D, E, F, R(42), 0xC24B8B70 );
- P( F, G, H, A, B, C, D, E, R(43), 0xC76C51A3 );
- P( E, F, G, H, A, B, C, D, R(44), 0xD192E819 );
- P( D, E, F, G, H, A, B, C, R(45), 0xD6990624 );
- P( C, D, E, F, G, H, A, B, R(46), 0xF40E3585 );
- P( B, C, D, E, F, G, H, A, R(47), 0x106AA070 );
- P( A, B, C, D, E, F, G, H, R(48), 0x19A4C116 );
- P( H, A, B, C, D, E, F, G, R(49), 0x1E376C08 );
- P( G, H, A, B, C, D, E, F, R(50), 0x2748774C );
- P( F, G, H, A, B, C, D, E, R(51), 0x34B0BCB5 );
- P( E, F, G, H, A, B, C, D, R(52), 0x391C0CB3 );
- P( D, E, F, G, H, A, B, C, R(53), 0x4ED8AA4A );
- P( C, D, E, F, G, H, A, B, R(54), 0x5B9CCA4F );
- P( B, C, D, E, F, G, H, A, R(55), 0x682E6FF3 );
- P( A, B, C, D, E, F, G, H, R(56), 0x748F82EE );
- P( H, A, B, C, D, E, F, G, R(57), 0x78A5636F );
- P( G, H, A, B, C, D, E, F, R(58), 0x84C87814 );
- P( F, G, H, A, B, C, D, E, R(59), 0x8CC70208 );
- P( E, F, G, H, A, B, C, D, R(60), 0x90BEFFFA );
- P( D, E, F, G, H, A, B, C, R(61), 0xA4506CEB );
- P( C, D, E, F, G, H, A, B, R(62), 0xBEF9A3F7 );
- P( B, C, D, E, F, G, H, A, R(63), 0xC67178F2 );
- ctx->state[0] += A;
- ctx->state[1] += B;
- ctx->state[2] += C;
- ctx->state[3] += D;
- ctx->state[4] += E;
- ctx->state[5] += F;
- ctx->state[6] += G;
- ctx->state[7] += H;
-}
-void CRYPT_SHA256Update( void* context, const uint8_t* input, FX_DWORD length )
-{
- sha256_context *ctx = (sha256_context *)context;
- FX_DWORD left, fill;
- if( ! length ) {
- return;
- }
- left = ctx->total[0] & 0x3F;
- fill = 64 - left;
- ctx->total[0] += length;
- ctx->total[0] &= 0xFFFFFFFF;
- if( ctx->total[0] < length ) {
- ctx->total[1]++;
- }
- if( left && length >= fill ) {
- FXSYS_memcpy( (void *) (ctx->buffer + left),
- (void *) input, fill );
- sha256_process( ctx, ctx->buffer );
- length -= fill;
- input += fill;
- left = 0;
- }
- while( length >= 64 ) {
- sha256_process( ctx, input );
- length -= 64;
- input += 64;
- }
- if( length ) {
- FXSYS_memcpy( (void *) (ctx->buffer + left),
- (void *) input, length );
- }
+void CRYPT_SHA256Update(void* context, const uint8_t* input, FX_DWORD length) {
+ sha256_context* ctx = (sha256_context*)context;
+ FX_DWORD left, fill;
+ if (!length) {
+ return;
+ }
+ left = ctx->total[0] & 0x3F;
+ fill = 64 - left;
+ ctx->total[0] += length;
+ ctx->total[0] &= 0xFFFFFFFF;
+ if (ctx->total[0] < length) {
+ ctx->total[1]++;
+ }
+ if (left && length >= fill) {
+ FXSYS_memcpy((void*)(ctx->buffer + left), (void*)input, fill);
+ sha256_process(ctx, ctx->buffer);
+ length -= fill;
+ input += fill;
+ left = 0;
+ }
+ while (length >= 64) {
+ sha256_process(ctx, input);
+ length -= 64;
+ input += 64;
+ }
+ if (length) {
+ FXSYS_memcpy((void*)(ctx->buffer + left), (void*)input, length);
+ }
}
static const uint8_t sha256_padding[64] = {
- 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
-};
-void CRYPT_SHA256Finish( void* context, uint8_t digest[32] )
-{
- sha256_context *ctx = (sha256_context *)context;
- FX_DWORD last, padn;
- FX_DWORD high, low;
- uint8_t msglen[8];
- high = ( ctx->total[0] >> 29 )
- | ( ctx->total[1] << 3 );
- low = ( ctx->total[0] << 3 );
- PUT_FX_DWORD( high, msglen, 0 );
- PUT_FX_DWORD( low, msglen, 4 );
- last = ctx->total[0] & 0x3F;
- padn = ( last < 56 ) ? ( 56 - last ) : ( 120 - last );
- CRYPT_SHA256Update( ctx, sha256_padding, padn );
- CRYPT_SHA256Update( ctx, msglen, 8 );
- PUT_FX_DWORD( ctx->state[0], digest, 0 );
- PUT_FX_DWORD( ctx->state[1], digest, 4 );
- PUT_FX_DWORD( ctx->state[2], digest, 8 );
- PUT_FX_DWORD( ctx->state[3], digest, 12 );
- PUT_FX_DWORD( ctx->state[4], digest, 16 );
- PUT_FX_DWORD( ctx->state[5], digest, 20 );
- PUT_FX_DWORD( ctx->state[6], digest, 24 );
- PUT_FX_DWORD( ctx->state[7], digest, 28 );
+ 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+void CRYPT_SHA256Finish(void* context, uint8_t digest[32]) {
+ sha256_context* ctx = (sha256_context*)context;
+ FX_DWORD last, padn;
+ FX_DWORD high, low;
+ uint8_t msglen[8];
+ high = (ctx->total[0] >> 29) | (ctx->total[1] << 3);
+ low = (ctx->total[0] << 3);
+ PUT_FX_DWORD(high, msglen, 0);
+ PUT_FX_DWORD(low, msglen, 4);
+ last = ctx->total[0] & 0x3F;
+ padn = (last < 56) ? (56 - last) : (120 - last);
+ CRYPT_SHA256Update(ctx, sha256_padding, padn);
+ CRYPT_SHA256Update(ctx, msglen, 8);
+ PUT_FX_DWORD(ctx->state[0], digest, 0);
+ PUT_FX_DWORD(ctx->state[1], digest, 4);
+ PUT_FX_DWORD(ctx->state[2], digest, 8);
+ PUT_FX_DWORD(ctx->state[3], digest, 12);
+ PUT_FX_DWORD(ctx->state[4], digest, 16);
+ PUT_FX_DWORD(ctx->state[5], digest, 20);
+ PUT_FX_DWORD(ctx->state[6], digest, 24);
+ PUT_FX_DWORD(ctx->state[7], digest, 28);
}
-void CRYPT_SHA256Generate(const uint8_t* data, FX_DWORD size, uint8_t digest[32])
-{
- sha256_context ctx;
- CRYPT_SHA256Start(&ctx);
- CRYPT_SHA256Update(&ctx, data, size);
- CRYPT_SHA256Finish(&ctx, digest);
+void CRYPT_SHA256Generate(const uint8_t* data,
+ FX_DWORD size,
+ uint8_t digest[32]) {
+ sha256_context ctx;
+ CRYPT_SHA256Start(&ctx);
+ CRYPT_SHA256Update(&ctx, data, size);
+ CRYPT_SHA256Finish(&ctx, digest);
}
typedef struct {
- uint64_t total[2];
- uint64_t state[8];
- uint8_t buffer[128];
+ uint64_t total[2];
+ uint64_t state[8];
+ uint8_t buffer[128];
} sha384_context;
-uint64_t FX_ato64i(const FX_CHAR* str)
-{
- FXSYS_assert(str != NULL);
- uint64_t ret = 0;
- int len = (int)FXSYS_strlen(str);
- len = len > 16 ? 16 : len;
- for (int i = 0; i < len; ++i) {
- if (i) {
- ret <<= 4;
- }
- if (str[i] >= '0' && str[i] <= '9') {
- ret |= (str[i] - '0') & 0xFF;
- } else if (str[i] >= 'a' && str[i] <= 'f') {
- ret |= (str[i] - 'a' + 10) & 0xFF;
- } else if (str[i] >= 'A' && str[i] <= 'F') {
- ret |= (str[i] - 'A' + 10) & 0xFF;
- } else {
- FXSYS_assert(FALSE);
- }
+uint64_t FX_ato64i(const FX_CHAR* str) {
+ FXSYS_assert(str != NULL);
+ uint64_t ret = 0;
+ int len = (int)FXSYS_strlen(str);
+ len = len > 16 ? 16 : len;
+ for (int i = 0; i < len; ++i) {
+ if (i) {
+ ret <<= 4;
}
- return ret;
-}
-void CRYPT_SHA384Start(void* context)
-{
- if (context == NULL) {
- return;
+ if (str[i] >= '0' && str[i] <= '9') {
+ ret |= (str[i] - '0') & 0xFF;
+ } else if (str[i] >= 'a' && str[i] <= 'f') {
+ ret |= (str[i] - 'a' + 10) & 0xFF;
+ } else if (str[i] >= 'A' && str[i] <= 'F') {
+ ret |= (str[i] - 'A' + 10) & 0xFF;
+ } else {
+ FXSYS_assert(FALSE);
}
- sha384_context *ctx = (sha384_context *)context;
- FXSYS_memset(ctx, 0, sizeof(sha384_context));
- ctx->state[0] = FX_ato64i("cbbb9d5dc1059ed8");
- ctx->state[1] = FX_ato64i("629a292a367cd507");
- ctx->state[2] = FX_ato64i("9159015a3070dd17");
- ctx->state[3] = FX_ato64i("152fecd8f70e5939");
- ctx->state[4] = FX_ato64i("67332667ffc00b31");
- ctx->state[5] = FX_ato64i("8eb44a8768581511");
- ctx->state[6] = FX_ato64i("db0c2e0d64f98fa7");
- ctx->state[7] = FX_ato64i("47b5481dbefa4fa4");
+ }
+ return ret;
}
-#define SHA384_F0(x,y,z) ((x & y) | (z & (x | y)))
-#define SHA384_F1(x,y,z) (z ^ (x & (y ^ z)))
-#define SHA384_SHR(x,n) (x >> n)
-#define SHA384_ROTR(x,n) (SHA384_SHR(x, n) | x << (64 - n))
-#define SHA384_S0(x) (SHA384_ROTR(x, 1) ^ SHA384_ROTR(x, 8) ^ SHA384_SHR(x, 7))
-#define SHA384_S1(x) (SHA384_ROTR(x,19) ^ SHA384_ROTR(x, 61) ^ SHA384_SHR(x, 6))
-#define SHA384_S2(x) (SHA384_ROTR(x, 28) ^ SHA384_ROTR(x, 34) ^ SHA384_ROTR(x, 39))
-#define SHA384_S3(x) (SHA384_ROTR(x, 14) ^ SHA384_ROTR(x,18) ^ SHA384_ROTR(x, 41))
-#define SHA384_P(a,b,c,d,e,f,g,h,x,K) \
- { \
- temp1 = h + SHA384_S3(e) + SHA384_F1(e,f,g) + K + x; \
- temp2 = SHA384_S2(a) + SHA384_F0(a,b,c); \
- d += temp1; h = temp1 + temp2; \
- }
+void CRYPT_SHA384Start(void* context) {
+ if (context == NULL) {
+ return;
+ }
+ sha384_context* ctx = (sha384_context*)context;
+ FXSYS_memset(ctx, 0, sizeof(sha384_context));
+ ctx->state[0] = FX_ato64i("cbbb9d5dc1059ed8");
+ ctx->state[1] = FX_ato64i("629a292a367cd507");
+ ctx->state[2] = FX_ato64i("9159015a3070dd17");
+ ctx->state[3] = FX_ato64i("152fecd8f70e5939");
+ ctx->state[4] = FX_ato64i("67332667ffc00b31");
+ ctx->state[5] = FX_ato64i("8eb44a8768581511");
+ ctx->state[6] = FX_ato64i("db0c2e0d64f98fa7");
+ ctx->state[7] = FX_ato64i("47b5481dbefa4fa4");
+}
+#define SHA384_F0(x, y, z) ((x & y) | (z & (x | y)))
+#define SHA384_F1(x, y, z) (z ^ (x & (y ^ z)))
+#define SHA384_SHR(x, n) (x >> n)
+#define SHA384_ROTR(x, n) (SHA384_SHR(x, n) | x << (64 - n))
+#define SHA384_S0(x) (SHA384_ROTR(x, 1) ^ SHA384_ROTR(x, 8) ^ SHA384_SHR(x, 7))
+#define SHA384_S1(x) \
+ (SHA384_ROTR(x, 19) ^ SHA384_ROTR(x, 61) ^ SHA384_SHR(x, 6))
+#define SHA384_S2(x) \
+ (SHA384_ROTR(x, 28) ^ SHA384_ROTR(x, 34) ^ SHA384_ROTR(x, 39))
+#define SHA384_S3(x) \
+ (SHA384_ROTR(x, 14) ^ SHA384_ROTR(x, 18) ^ SHA384_ROTR(x, 41))
+#define SHA384_P(a, b, c, d, e, f, g, h, x, K) \
+ { \
+ temp1 = h + SHA384_S3(e) + SHA384_F1(e, f, g) + K + x; \
+ temp2 = SHA384_S2(a) + SHA384_F0(a, b, c); \
+ d += temp1; \
+ h = temp1 + temp2; \
+ }
static const uint8_t sha384_padding[128] = {
- 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
};
-#define SHA384_R(t) (W[t] = SHA384_S1(W[t - 2]) + W[t - 7] + SHA384_S0(W[t - 15]) + W[t - 16])
+#define SHA384_R(t) \
+ (W[t] = SHA384_S1(W[t - 2]) + W[t - 7] + SHA384_S0(W[t - 15]) + W[t - 16])
static const FX_CHAR* constants[] = {
- "428a2f98d728ae22",
- "7137449123ef65cd",
- "b5c0fbcfec4d3b2f",
- "e9b5dba58189dbbc",
- "3956c25bf348b538",
- "59f111f1b605d019",
- "923f82a4af194f9b",
- "ab1c5ed5da6d8118",
- "d807aa98a3030242",
- "12835b0145706fbe",
- "243185be4ee4b28c",
- "550c7dc3d5ffb4e2",
- "72be5d74f27b896f",
- "80deb1fe3b1696b1",
- "9bdc06a725c71235",
- "c19bf174cf692694",
- "e49b69c19ef14ad2",
- "efbe4786384f25e3",
- "0fc19dc68b8cd5b5",
- "240ca1cc77ac9c65",
- "2de92c6f592b0275",
- "4a7484aa6ea6e483",
- "5cb0a9dcbd41fbd4",
- "76f988da831153b5",
- "983e5152ee66dfab",
- "a831c66d2db43210",
- "b00327c898fb213f",
- "bf597fc7beef0ee4",
- "c6e00bf33da88fc2",
- "d5a79147930aa725",
- "06ca6351e003826f",
- "142929670a0e6e70",
- "27b70a8546d22ffc",
- "2e1b21385c26c926",
- "4d2c6dfc5ac42aed",
- "53380d139d95b3df",
- "650a73548baf63de",
- "766a0abb3c77b2a8",
- "81c2c92e47edaee6",
- "92722c851482353b",
- "a2bfe8a14cf10364",
- "a81a664bbc423001",
- "c24b8b70d0f89791",
- "c76c51a30654be30",
- "d192e819d6ef5218",
- "d69906245565a910",
- "f40e35855771202a",
- "106aa07032bbd1b8",
- "19a4c116b8d2d0c8",
- "1e376c085141ab53",
- "2748774cdf8eeb99",
- "34b0bcb5e19b48a8",
- "391c0cb3c5c95a63",
- "4ed8aa4ae3418acb",
- "5b9cca4f7763e373",
- "682e6ff3d6b2b8a3",
- "748f82ee5defb2fc",
- "78a5636f43172f60",
- "84c87814a1f0ab72",
- "8cc702081a6439ec",
- "90befffa23631e28",
- "a4506cebde82bde9",
- "bef9a3f7b2c67915",
- "c67178f2e372532b",
- "ca273eceea26619c",
- "d186b8c721c0c207",
- "eada7dd6cde0eb1e",
- "f57d4f7fee6ed178",
- "06f067aa72176fba",
- "0a637dc5a2c898a6",
- "113f9804bef90dae",
- "1b710b35131c471b",
- "28db77f523047d84",
- "32caab7b40c72493",
- "3c9ebe0a15c9bebc",
- "431d67c49c100d4c",
- "4cc5d4becb3e42b6",
- "597f299cfc657e2a",
- "5fcb6fab3ad6faec",
- "6c44198c4a475817",
+ "428a2f98d728ae22", "7137449123ef65cd", "b5c0fbcfec4d3b2f",
+ "e9b5dba58189dbbc", "3956c25bf348b538", "59f111f1b605d019",
+ "923f82a4af194f9b", "ab1c5ed5da6d8118", "d807aa98a3030242",
+ "12835b0145706fbe", "243185be4ee4b28c", "550c7dc3d5ffb4e2",
+ "72be5d74f27b896f", "80deb1fe3b1696b1", "9bdc06a725c71235",
+ "c19bf174cf692694", "e49b69c19ef14ad2", "efbe4786384f25e3",
+ "0fc19dc68b8cd5b5", "240ca1cc77ac9c65", "2de92c6f592b0275",
+ "4a7484aa6ea6e483", "5cb0a9dcbd41fbd4", "76f988da831153b5",
+ "983e5152ee66dfab", "a831c66d2db43210", "b00327c898fb213f",
+ "bf597fc7beef0ee4", "c6e00bf33da88fc2", "d5a79147930aa725",
+ "06ca6351e003826f", "142929670a0e6e70", "27b70a8546d22ffc",
+ "2e1b21385c26c926", "4d2c6dfc5ac42aed", "53380d139d95b3df",
+ "650a73548baf63de", "766a0abb3c77b2a8", "81c2c92e47edaee6",
+ "92722c851482353b", "a2bfe8a14cf10364", "a81a664bbc423001",
+ "c24b8b70d0f89791", "c76c51a30654be30", "d192e819d6ef5218",
+ "d69906245565a910", "f40e35855771202a", "106aa07032bbd1b8",
+ "19a4c116b8d2d0c8", "1e376c085141ab53", "2748774cdf8eeb99",
+ "34b0bcb5e19b48a8", "391c0cb3c5c95a63", "4ed8aa4ae3418acb",
+ "5b9cca4f7763e373", "682e6ff3d6b2b8a3", "748f82ee5defb2fc",
+ "78a5636f43172f60", "84c87814a1f0ab72", "8cc702081a6439ec",
+ "90befffa23631e28", "a4506cebde82bde9", "bef9a3f7b2c67915",
+ "c67178f2e372532b", "ca273eceea26619c", "d186b8c721c0c207",
+ "eada7dd6cde0eb1e", "f57d4f7fee6ed178", "06f067aa72176fba",
+ "0a637dc5a2c898a6", "113f9804bef90dae", "1b710b35131c471b",
+ "28db77f523047d84", "32caab7b40c72493", "3c9ebe0a15c9bebc",
+ "431d67c49c100d4c", "4cc5d4becb3e42b6", "597f299cfc657e2a",
+ "5fcb6fab3ad6faec", "6c44198c4a475817",
};
-#define GET_FX_64WORD(n,b,i) \
- { \
- (n) = ( (uint64_t) (b)[(i) ] << 56 ) \
- | ( (uint64_t) (b)[(i) + 1] << 48 ) \
- | ( (uint64_t) (b)[(i) + 2] << 40 ) \
- | ( (uint64_t) (b)[(i) + 3] << 32 ) \
- | ( (uint64_t) (b)[(i) + 4] << 24 ) \
- | ( (uint64_t) (b)[(i) + 5] << 16 ) \
- | ( (uint64_t) (b)[(i) + 6] << 8 ) \
- | ( (uint64_t) (b)[(i) + 7] ); \
- }
-#define PUT_FX_64DWORD(n,b,i) \
- { \
- (b)[(i) ] = (uint8_t) ( (n) >> 56 ); \
- (b)[(i) + 1] = (uint8_t) ( (n) >> 48 ); \
- (b)[(i) + 2] = (uint8_t) ( (n) >> 40 ); \
- (b)[(i) + 3] = (uint8_t) ( (n) >> 32 ); \
- (b)[(i) + 4] = (uint8_t) ( (n) >> 24 ); \
- (b)[(i) + 5] = (uint8_t) ( (n) >> 16 ); \
- (b)[(i) + 6] = (uint8_t) ( (n) >> 8 ); \
- (b)[(i) + 7] = (uint8_t) ( (n) ); \
- }
-static void sha384_process( sha384_context *ctx, const uint8_t data[128] )
-{
- uint64_t temp1, temp2;
- uint64_t A, B, C, D, E, F, G, H;
- uint64_t W[80];
- GET_FX_64WORD(W[0], data, 0);
- GET_FX_64WORD(W[1], data, 8);
- GET_FX_64WORD(W[2], data, 16);
- GET_FX_64WORD(W[3], data, 24);
- GET_FX_64WORD(W[4], data, 32);
- GET_FX_64WORD(W[5], data, 40);
- GET_FX_64WORD(W[6], data, 48);
- GET_FX_64WORD(W[7], data, 56);
- GET_FX_64WORD(W[8], data, 64);
- GET_FX_64WORD(W[9], data, 72);
- GET_FX_64WORD(W[10], data, 80);
- GET_FX_64WORD(W[11], data, 88);
- GET_FX_64WORD(W[12], data, 96);
- GET_FX_64WORD(W[13], data, 104);
- GET_FX_64WORD(W[14], data, 112);
- GET_FX_64WORD(W[15], data, 120);
- A = ctx->state[0];
- B = ctx->state[1];
- C = ctx->state[2];
- D = ctx->state[3];
- E = ctx->state[4];
- F = ctx->state[5];
- G = ctx->state[6];
- H = ctx->state[7];
- for (int i = 0; i < 10; ++i) {
- uint64_t temp[8];
- if (i < 2) {
- temp[0] = W[i * 8];
- temp[1] = W[i * 8 + 1];
- temp[2] = W[i * 8 + 2];
- temp[3] = W[i * 8 + 3];
- temp[4] = W[i * 8 + 4];
- temp[5] = W[i * 8 + 5];
- temp[6] = W[i * 8 + 6];
- temp[7] = W[i * 8 + 7];
- } else {
- temp[0] = SHA384_R(i * 8);
- temp[1] = SHA384_R(i * 8 + 1);
- temp[2] = SHA384_R(i * 8 + 2);
- temp[3] = SHA384_R(i * 8 + 3);
- temp[4] = SHA384_R(i * 8 + 4);
- temp[5] = SHA384_R(i * 8 + 5);
- temp[6] = SHA384_R(i * 8 + 6);
- temp[7] = SHA384_R(i * 8 + 7);
- }
- SHA384_P( A, B, C, D, E, F, G, H, temp[ 0], FX_ato64i(constants[i * 8 ]) );
- SHA384_P( H, A, B, C, D, E, F, G, temp[ 1], FX_ato64i(constants[i * 8 + 1]) );
- SHA384_P( G, H, A, B, C, D, E, F, temp[ 2], FX_ato64i(constants[i * 8 + 2]) );
- SHA384_P( F, G, H, A, B, C, D, E, temp[ 3], FX_ato64i(constants[i * 8 + 3]) );
- SHA384_P( E, F, G, H, A, B, C, D, temp[ 4], FX_ato64i(constants[i * 8 + 4]) );
- SHA384_P( D, E, F, G, H, A, B, C, temp[ 5], FX_ato64i(constants[i * 8 + 5]) );
- SHA384_P( C, D, E, F, G, H, A, B, temp[ 6], FX_ato64i(constants[i * 8 + 6]) );
- SHA384_P( B, C, D, E, F, G, H, A, temp[ 7], FX_ato64i(constants[i * 8 + 7]) );
+#define GET_FX_64WORD(n, b, i) \
+ { \
+ (n) = ((uint64_t)(b)[(i)] << 56) | ((uint64_t)(b)[(i) + 1] << 48) | \
+ ((uint64_t)(b)[(i) + 2] << 40) | ((uint64_t)(b)[(i) + 3] << 32) | \
+ ((uint64_t)(b)[(i) + 4] << 24) | ((uint64_t)(b)[(i) + 5] << 16) | \
+ ((uint64_t)(b)[(i) + 6] << 8) | ((uint64_t)(b)[(i) + 7]); \
+ }
+#define PUT_FX_64DWORD(n, b, i) \
+ { \
+ (b)[(i)] = (uint8_t)((n) >> 56); \
+ (b)[(i) + 1] = (uint8_t)((n) >> 48); \
+ (b)[(i) + 2] = (uint8_t)((n) >> 40); \
+ (b)[(i) + 3] = (uint8_t)((n) >> 32); \
+ (b)[(i) + 4] = (uint8_t)((n) >> 24); \
+ (b)[(i) + 5] = (uint8_t)((n) >> 16); \
+ (b)[(i) + 6] = (uint8_t)((n) >> 8); \
+ (b)[(i) + 7] = (uint8_t)((n)); \
+ }
+static void sha384_process(sha384_context* ctx, const uint8_t data[128]) {
+ uint64_t temp1, temp2;
+ uint64_t A, B, C, D, E, F, G, H;
+ uint64_t W[80];
+ GET_FX_64WORD(W[0], data, 0);
+ GET_FX_64WORD(W[1], data, 8);
+ GET_FX_64WORD(W[2], data, 16);
+ GET_FX_64WORD(W[3], data, 24);
+ GET_FX_64WORD(W[4], data, 32);
+ GET_FX_64WORD(W[5], data, 40);
+ GET_FX_64WORD(W[6], data, 48);
+ GET_FX_64WORD(W[7], data, 56);
+ GET_FX_64WORD(W[8], data, 64);
+ GET_FX_64WORD(W[9], data, 72);
+ GET_FX_64WORD(W[10], data, 80);
+ GET_FX_64WORD(W[11], data, 88);
+ GET_FX_64WORD(W[12], data, 96);
+ GET_FX_64WORD(W[13], data, 104);
+ GET_FX_64WORD(W[14], data, 112);
+ GET_FX_64WORD(W[15], data, 120);
+ A = ctx->state[0];
+ B = ctx->state[1];
+ C = ctx->state[2];
+ D = ctx->state[3];
+ E = ctx->state[4];
+ F = ctx->state[5];
+ G = ctx->state[6];
+ H = ctx->state[7];
+ for (int i = 0; i < 10; ++i) {
+ uint64_t temp[8];
+ if (i < 2) {
+ temp[0] = W[i * 8];
+ temp[1] = W[i * 8 + 1];
+ temp[2] = W[i * 8 + 2];
+ temp[3] = W[i * 8 + 3];
+ temp[4] = W[i * 8 + 4];
+ temp[5] = W[i * 8 + 5];
+ temp[6] = W[i * 8 + 6];
+ temp[7] = W[i * 8 + 7];
+ } else {
+ temp[0] = SHA384_R(i * 8);
+ temp[1] = SHA384_R(i * 8 + 1);
+ temp[2] = SHA384_R(i * 8 + 2);
+ temp[3] = SHA384_R(i * 8 + 3);
+ temp[4] = SHA384_R(i * 8 + 4);
+ temp[5] = SHA384_R(i * 8 + 5);
+ temp[6] = SHA384_R(i * 8 + 6);
+ temp[7] = SHA384_R(i * 8 + 7);
}
- ctx->state[0] += A;
- ctx->state[1] += B;
- ctx->state[2] += C;
- ctx->state[3] += D;
- ctx->state[4] += E;
- ctx->state[5] += F;
- ctx->state[6] += G;
- ctx->state[7] += H;
+ SHA384_P(A, B, C, D, E, F, G, H, temp[0], FX_ato64i(constants[i * 8]));
+ SHA384_P(H, A, B, C, D, E, F, G, temp[1], FX_ato64i(constants[i * 8 + 1]));
+ SHA384_P(G, H, A, B, C, D, E, F, temp[2], FX_ato64i(constants[i * 8 + 2]));
+ SHA384_P(F, G, H, A, B, C, D, E, temp[3], FX_ato64i(constants[i * 8 + 3]));
+ SHA384_P(E, F, G, H, A, B, C, D, temp[4], FX_ato64i(constants[i * 8 + 4]));
+ SHA384_P(D, E, F, G, H, A, B, C, temp[5], FX_ato64i(constants[i * 8 + 5]));
+ SHA384_P(C, D, E, F, G, H, A, B, temp[6], FX_ato64i(constants[i * 8 + 6]));
+ SHA384_P(B, C, D, E, F, G, H, A, temp[7], FX_ato64i(constants[i * 8 + 7]));
+ }
+ ctx->state[0] += A;
+ ctx->state[1] += B;
+ ctx->state[2] += C;
+ ctx->state[3] += D;
+ ctx->state[4] += E;
+ ctx->state[5] += F;
+ ctx->state[6] += G;
+ ctx->state[7] += H;
}
-void CRYPT_SHA384Update(void* context, const uint8_t* input, FX_DWORD length)
-{
- sha384_context *ctx = (sha384_context *)context;
- FX_DWORD left, fill;
- if( ! length ) {
- return;
- }
- left = (FX_DWORD)ctx->total[0] & 0x7F;
- fill = 128 - left;
- ctx->total[0] += length;
- if( ctx->total[0] < length ) {
- ctx->total[1]++;
- }
- if( left && length >= fill ) {
- FXSYS_memcpy( (void *) (ctx->buffer + left),
- (void *) input, fill );
- sha384_process( ctx, ctx->buffer );
- length -= fill;
- input += fill;
- left = 0;
- }
- while( length >= 128 ) {
- sha384_process( ctx, input );
- length -= 128;
- input += 128;
- }
- if( length ) {
- FXSYS_memcpy( (void *) (ctx->buffer + left),
- (void *) input, length );
- }
+void CRYPT_SHA384Update(void* context, const uint8_t* input, FX_DWORD length) {
+ sha384_context* ctx = (sha384_context*)context;
+ FX_DWORD left, fill;
+ if (!length) {
+ return;
+ }
+ left = (FX_DWORD)ctx->total[0] & 0x7F;
+ fill = 128 - left;
+ ctx->total[0] += length;
+ if (ctx->total[0] < length) {
+ ctx->total[1]++;
+ }
+ if (left && length >= fill) {
+ FXSYS_memcpy((void*)(ctx->buffer + left), (void*)input, fill);
+ sha384_process(ctx, ctx->buffer);
+ length -= fill;
+ input += fill;
+ left = 0;
+ }
+ while (length >= 128) {
+ sha384_process(ctx, input);
+ length -= 128;
+ input += 128;
+ }
+ if (length) {
+ FXSYS_memcpy((void*)(ctx->buffer + left), (void*)input, length);
+ }
}
-void CRYPT_SHA384Finish(void* context, uint8_t digest[48])
-{
- sha384_context *ctx = (sha384_context *)context;
- FX_DWORD last, padn;
- uint8_t msglen[16];
- FXSYS_memset(msglen, 0, 16);
- uint64_t high, low;
- high = ( ctx->total[0] >> 29 )
- | ( ctx->total[1] << 3 );
- low = ( ctx->total[0] << 3 );
- PUT_FX_64DWORD( high, msglen, 0 );
- PUT_FX_64DWORD( low, msglen, 8 );
- last = (FX_DWORD)ctx->total[0] & 0x7F;
- padn = ( last < 112 ) ? ( 112 - last ) : ( 240 - last );
- CRYPT_SHA384Update( ctx, sha384_padding, padn );
- CRYPT_SHA384Update( ctx, msglen, 16 );
- PUT_FX_64DWORD(ctx->state[0], digest, 0);
- PUT_FX_64DWORD(ctx->state[1], digest, 8);
- PUT_FX_64DWORD(ctx->state[2], digest, 16);
- PUT_FX_64DWORD(ctx->state[3], digest, 24);
- PUT_FX_64DWORD(ctx->state[4], digest, 32);
- PUT_FX_64DWORD(ctx->state[5], digest, 40);
+void CRYPT_SHA384Finish(void* context, uint8_t digest[48]) {
+ sha384_context* ctx = (sha384_context*)context;
+ FX_DWORD last, padn;
+ uint8_t msglen[16];
+ FXSYS_memset(msglen, 0, 16);
+ uint64_t high, low;
+ high = (ctx->total[0] >> 29) | (ctx->total[1] << 3);
+ low = (ctx->total[0] << 3);
+ PUT_FX_64DWORD(high, msglen, 0);
+ PUT_FX_64DWORD(low, msglen, 8);
+ last = (FX_DWORD)ctx->total[0] & 0x7F;
+ padn = (last < 112) ? (112 - last) : (240 - last);
+ CRYPT_SHA384Update(ctx, sha384_padding, padn);
+ CRYPT_SHA384Update(ctx, msglen, 16);
+ PUT_FX_64DWORD(ctx->state[0], digest, 0);
+ PUT_FX_64DWORD(ctx->state[1], digest, 8);
+ PUT_FX_64DWORD(ctx->state[2], digest, 16);
+ PUT_FX_64DWORD(ctx->state[3], digest, 24);
+ PUT_FX_64DWORD(ctx->state[4], digest, 32);
+ PUT_FX_64DWORD(ctx->state[5], digest, 40);
}
-void CRYPT_SHA384Generate(const uint8_t* data, FX_DWORD size, uint8_t digest[64])
-{
- sha384_context context;
- CRYPT_SHA384Start(&context);
- CRYPT_SHA384Update(&context, data, size);
- CRYPT_SHA384Finish(&context, digest);
+void CRYPT_SHA384Generate(const uint8_t* data,
+ FX_DWORD size,
+ uint8_t digest[64]) {
+ sha384_context context;
+ CRYPT_SHA384Start(&context);
+ CRYPT_SHA384Update(&context, data, size);
+ CRYPT_SHA384Finish(&context, digest);
}
-void CRYPT_SHA512Start(void* context)
-{
- if (context == NULL) {
- return;
- }
- sha384_context *ctx = (sha384_context *)context;
- FXSYS_memset(ctx, 0, sizeof(sha384_context));
- ctx->state[0] = FX_ato64i("6a09e667f3bcc908");
- ctx->state[1] = FX_ato64i("bb67ae8584caa73b");
- ctx->state[2] = FX_ato64i("3c6ef372fe94f82b");
- ctx->state[3] = FX_ato64i("a54ff53a5f1d36f1");
- ctx->state[4] = FX_ato64i("510e527fade682d1");
- ctx->state[5] = FX_ato64i("9b05688c2b3e6c1f");
- ctx->state[6] = FX_ato64i("1f83d9abfb41bd6b");
- ctx->state[7] = FX_ato64i("5be0cd19137e2179");
+void CRYPT_SHA512Start(void* context) {
+ if (context == NULL) {
+ return;
+ }
+ sha384_context* ctx = (sha384_context*)context;
+ FXSYS_memset(ctx, 0, sizeof(sha384_context));
+ ctx->state[0] = FX_ato64i("6a09e667f3bcc908");
+ ctx->state[1] = FX_ato64i("bb67ae8584caa73b");
+ ctx->state[2] = FX_ato64i("3c6ef372fe94f82b");
+ ctx->state[3] = FX_ato64i("a54ff53a5f1d36f1");
+ ctx->state[4] = FX_ato64i("510e527fade682d1");
+ ctx->state[5] = FX_ato64i("9b05688c2b3e6c1f");
+ ctx->state[6] = FX_ato64i("1f83d9abfb41bd6b");
+ ctx->state[7] = FX_ato64i("5be0cd19137e2179");
}
-void CRYPT_SHA512Update(void* context, const uint8_t* data, FX_DWORD size)
-{
- CRYPT_SHA384Update(context, data, size);
+void CRYPT_SHA512Update(void* context, const uint8_t* data, FX_DWORD size) {
+ CRYPT_SHA384Update(context, data, size);
}
-void CRYPT_SHA512Finish(void* context, uint8_t digest[64])
-{
- sha384_context *ctx = (sha384_context *)context;
- FX_DWORD last, padn;
- uint8_t msglen[16];
- FXSYS_memset(msglen, 0, 16);
- uint64_t high, low;
- high = ( ctx->total[0] >> 29 )
- | ( ctx->total[1] << 3 );
- low = ( ctx->total[0] << 3 );
- PUT_FX_64DWORD( high, msglen, 0 );
- PUT_FX_64DWORD( low, msglen, 8 );
- last = (FX_DWORD)ctx->total[0] & 0x7F;
- padn = ( last < 112 ) ? ( 112 - last ) : ( 240 - last );
- CRYPT_SHA512Update( ctx, sha384_padding, padn );
- CRYPT_SHA512Update( ctx, msglen, 16 );
- PUT_FX_64DWORD(ctx->state[0], digest, 0);
- PUT_FX_64DWORD(ctx->state[1], digest, 8);
- PUT_FX_64DWORD(ctx->state[2], digest, 16);
- PUT_FX_64DWORD(ctx->state[3], digest, 24);
- PUT_FX_64DWORD(ctx->state[4], digest, 32);
- PUT_FX_64DWORD(ctx->state[5], digest, 40);
- PUT_FX_64DWORD(ctx->state[6], digest, 48);
- PUT_FX_64DWORD(ctx->state[7], digest, 56);
+void CRYPT_SHA512Finish(void* context, uint8_t digest[64]) {
+ sha384_context* ctx = (sha384_context*)context;
+ FX_DWORD last, padn;
+ uint8_t msglen[16];
+ FXSYS_memset(msglen, 0, 16);
+ uint64_t high, low;
+ high = (ctx->total[0] >> 29) | (ctx->total[1] << 3);
+ low = (ctx->total[0] << 3);
+ PUT_FX_64DWORD(high, msglen, 0);
+ PUT_FX_64DWORD(low, msglen, 8);
+ last = (FX_DWORD)ctx->total[0] & 0x7F;
+ padn = (last < 112) ? (112 - last) : (240 - last);
+ CRYPT_SHA512Update(ctx, sha384_padding, padn);
+ CRYPT_SHA512Update(ctx, msglen, 16);
+ PUT_FX_64DWORD(ctx->state[0], digest, 0);
+ PUT_FX_64DWORD(ctx->state[1], digest, 8);
+ PUT_FX_64DWORD(ctx->state[2], digest, 16);
+ PUT_FX_64DWORD(ctx->state[3], digest, 24);
+ PUT_FX_64DWORD(ctx->state[4], digest, 32);
+ PUT_FX_64DWORD(ctx->state[5], digest, 40);
+ PUT_FX_64DWORD(ctx->state[6], digest, 48);
+ PUT_FX_64DWORD(ctx->state[7], digest, 56);
}
-void CRYPT_SHA512Generate(const uint8_t* data, FX_DWORD size, uint8_t digest[64])
-{
- sha384_context context;
- CRYPT_SHA512Start(&context);
- CRYPT_SHA512Update(&context, data, size);
- CRYPT_SHA512Finish(&context, digest);
+void CRYPT_SHA512Generate(const uint8_t* data,
+ FX_DWORD size,
+ uint8_t digest[64]) {
+ sha384_context context;
+ CRYPT_SHA512Start(&context);
+ CRYPT_SHA512Update(&context, data, size);
+ CRYPT_SHA512Finish(&context, digest);
}
#ifdef __cplusplus
};
diff --git a/core/src/fpdfapi/fpdf_basic_module.cpp b/core/src/fpdfapi/fpdf_basic_module.cpp
index 03cfd66afb..595dadbf69 100644
--- a/core/src/fpdfapi/fpdf_basic_module.cpp
+++ b/core/src/fpdfapi/fpdf_basic_module.cpp
@@ -16,104 +16,90 @@ const char kAddinNameCJK[] = "Eastern Asian Language Support";
} // namespace
// static
-CPDF_ModuleMgr* CPDF_ModuleMgr::Get()
-{
- return g_FPDFAPI_pDefaultMgr;
+CPDF_ModuleMgr* CPDF_ModuleMgr::Get() {
+ return g_FPDFAPI_pDefaultMgr;
}
// static
-void CPDF_ModuleMgr::Create()
-{
- ASSERT(!g_FPDFAPI_pDefaultMgr);
- g_FPDFAPI_pDefaultMgr = new CPDF_ModuleMgr;
+void CPDF_ModuleMgr::Create() {
+ ASSERT(!g_FPDFAPI_pDefaultMgr);
+ g_FPDFAPI_pDefaultMgr = new CPDF_ModuleMgr;
}
// static
-void CPDF_ModuleMgr::Destroy()
-{
- delete g_FPDFAPI_pDefaultMgr;
- g_FPDFAPI_pDefaultMgr = nullptr;
+void CPDF_ModuleMgr::Destroy() {
+ delete g_FPDFAPI_pDefaultMgr;
+ g_FPDFAPI_pDefaultMgr = nullptr;
}
-CPDF_ModuleMgr::CPDF_ModuleMgr()
- : m_pCodecModule(nullptr)
-{
-}
+CPDF_ModuleMgr::CPDF_ModuleMgr() : m_pCodecModule(nullptr) {}
-CPDF_ModuleMgr::~CPDF_ModuleMgr()
-{
-}
+CPDF_ModuleMgr::~CPDF_ModuleMgr() {}
-void CPDF_ModuleMgr::SetDownloadCallback(FX_BOOL (*callback)(const FX_CHAR* module_name))
-{
- m_pDownloadCallback = callback;
-}
-FX_BOOL CPDF_ModuleMgr::DownloadModule(const FX_CHAR* module_name)
-{
- if (m_pDownloadCallback == NULL) {
- return FALSE;
- }
- return m_pDownloadCallback(module_name);
-}
-void CPDF_ModuleMgr::NotifyModuleAvailable(const FX_CHAR* module_name)
-{
- if (FXSYS_strcmp(module_name, kAddinNameCJK) == 0) {
- m_pPageModule->NotifyCJKAvailable();
- }
-}
-void CPDF_ModuleMgr::RegisterSecurityHandler(const FX_CHAR* filter, CPDF_SecurityHandler * (*CreateHandler)(void* param), void* param)
-{
- if (CreateHandler == NULL) {
- m_SecurityHandlerMap.RemoveKey(filter);
- } else {
- m_SecurityHandlerMap.SetAt(filter, (void*)CreateHandler);
- }
- if (param) {
- m_SecurityHandlerMap.SetAt(FX_BSTRC("_param_") + filter, param);
- }
-}
-void CPDF_ModuleMgr::SetPrivateData(void* module_id, void* pData, PD_CALLBACK_FREEDATA callback)
-{
- m_privateData.SetPrivateData(module_id, pData, callback);
-}
-void* CPDF_ModuleMgr::GetPrivateData(void* module_id)
-{
- return m_privateData.GetPrivateData(module_id);
-}
-CPDF_SecurityHandler* CPDF_ModuleMgr::CreateSecurityHandler(const FX_CHAR* filter)
-{
- CPDF_SecurityHandler* (*CreateHandler)(void*) = NULL;
- if (!m_SecurityHandlerMap.Lookup(filter, (void*&)CreateHandler)) {
- return NULL;
- }
- if (CreateHandler == NULL) {
- return NULL;
- }
- void* param = NULL;
- m_SecurityHandlerMap.Lookup(FX_BSTRC("_param_") + filter, param);
- return CreateHandler(param);
-}
-ICodec_FaxModule* CPDF_ModuleMgr::GetFaxModule()
-{
- return m_pCodecModule ? m_pCodecModule->GetFaxModule() : NULL;
-}
-ICodec_JpegModule* CPDF_ModuleMgr::GetJpegModule()
-{
- return m_pCodecModule ? m_pCodecModule->GetJpegModule() : NULL;
-}
-ICodec_JpxModule* CPDF_ModuleMgr::GetJpxModule()
-{
- return m_pCodecModule ? m_pCodecModule->GetJpxModule() : NULL;
-}
-ICodec_Jbig2Module* CPDF_ModuleMgr::GetJbig2Module()
-{
- return m_pCodecModule ? m_pCodecModule->GetJbig2Module() : NULL;
-}
-ICodec_IccModule* CPDF_ModuleMgr::GetIccModule()
-{
- return m_pCodecModule ? m_pCodecModule->GetIccModule() : NULL;
-}
-ICodec_FlateModule* CPDF_ModuleMgr::GetFlateModule()
-{
- return m_pCodecModule ? m_pCodecModule->GetFlateModule() : NULL;
+void CPDF_ModuleMgr::SetDownloadCallback(
+ FX_BOOL (*callback)(const FX_CHAR* module_name)) {
+ m_pDownloadCallback = callback;
+}
+FX_BOOL CPDF_ModuleMgr::DownloadModule(const FX_CHAR* module_name) {
+ if (m_pDownloadCallback == NULL) {
+ return FALSE;
+ }
+ return m_pDownloadCallback(module_name);
+}
+void CPDF_ModuleMgr::NotifyModuleAvailable(const FX_CHAR* module_name) {
+ if (FXSYS_strcmp(module_name, kAddinNameCJK) == 0) {
+ m_pPageModule->NotifyCJKAvailable();
+ }
+}
+void CPDF_ModuleMgr::RegisterSecurityHandler(
+ const FX_CHAR* filter,
+ CPDF_SecurityHandler* (*CreateHandler)(void* param),
+ void* param) {
+ if (CreateHandler == NULL) {
+ m_SecurityHandlerMap.RemoveKey(filter);
+ } else {
+ m_SecurityHandlerMap.SetAt(filter, (void*)CreateHandler);
+ }
+ if (param) {
+ m_SecurityHandlerMap.SetAt(FX_BSTRC("_param_") + filter, param);
+ }
+}
+void CPDF_ModuleMgr::SetPrivateData(void* module_id,
+ void* pData,
+ PD_CALLBACK_FREEDATA callback) {
+ m_privateData.SetPrivateData(module_id, pData, callback);
+}
+void* CPDF_ModuleMgr::GetPrivateData(void* module_id) {
+ return m_privateData.GetPrivateData(module_id);
+}
+CPDF_SecurityHandler* CPDF_ModuleMgr::CreateSecurityHandler(
+ const FX_CHAR* filter) {
+ CPDF_SecurityHandler* (*CreateHandler)(void*) = NULL;
+ if (!m_SecurityHandlerMap.Lookup(filter, (void*&)CreateHandler)) {
+ return NULL;
+ }
+ if (CreateHandler == NULL) {
+ return NULL;
+ }
+ void* param = NULL;
+ m_SecurityHandlerMap.Lookup(FX_BSTRC("_param_") + filter, param);
+ return CreateHandler(param);
+}
+ICodec_FaxModule* CPDF_ModuleMgr::GetFaxModule() {
+ return m_pCodecModule ? m_pCodecModule->GetFaxModule() : NULL;
+}
+ICodec_JpegModule* CPDF_ModuleMgr::GetJpegModule() {
+ return m_pCodecModule ? m_pCodecModule->GetJpegModule() : NULL;
+}
+ICodec_JpxModule* CPDF_ModuleMgr::GetJpxModule() {
+ return m_pCodecModule ? m_pCodecModule->GetJpxModule() : NULL;
+}
+ICodec_Jbig2Module* CPDF_ModuleMgr::GetJbig2Module() {
+ return m_pCodecModule ? m_pCodecModule->GetJbig2Module() : NULL;
+}
+ICodec_IccModule* CPDF_ModuleMgr::GetIccModule() {
+ return m_pCodecModule ? m_pCodecModule->GetIccModule() : NULL;
+}
+ICodec_FlateModule* CPDF_ModuleMgr::GetFlateModule() {
+ return m_pCodecModule ? m_pCodecModule->GetFlateModule() : NULL;
}
diff --git a/core/src/fpdfapi/fpdf_cmaps/CNS1/Adobe-CNS1-UCS2_5.cpp b/core/src/fpdfapi/fpdf_cmaps/CNS1/Adobe-CNS1-UCS2_5.cpp
index 11bcc145b1..86289f39f9 100644
--- a/core/src/fpdfapi/fpdf_cmaps/CNS1/Adobe-CNS1-UCS2_5.cpp
+++ b/core/src/fpdfapi/fpdf_cmaps/CNS1/Adobe-CNS1-UCS2_5.cpp
@@ -7,2390 +7,2125 @@
#include "cmaps_cns1.h"
const FX_WORD g_FXCMAP_CNS1CID2Unicode_5[19088] = {
- 0xFFFD, 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,
- 0x00A9, 0x2122, 0x2026, 0x3000, 0xFF0C, 0x3001, 0x3002, 0xFF0E,
- 0x2027, 0xFF1B, 0xFF1A, 0xFF1F, 0xFF01, 0xFE30, 0x22EF, 0x2025,
- 0xFE50, 0xFE51, 0xFE52, 0x00B7, 0xFE54, 0xFE55, 0xFE56, 0xFE57,
- 0xFF5C, 0x2013, 0xFE31, 0x2014, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD,
- 0xFF08, 0xFF09, 0xFE35, 0xFE36, 0xFF5B, 0xFF5D, 0xFE37, 0xFE38,
- 0x3014, 0x3015, 0xFE39, 0xFE3A, 0x3010, 0x3011, 0xFE3B, 0xFE3C,
- 0x300A, 0x300B, 0xFE3D, 0xFE3E, 0x3008, 0x3009, 0xFE3F, 0xFE40,
- 0x300C, 0x300D, 0xFE41, 0xFE42, 0x300E, 0x300F, 0xFE43, 0xFE44,
- 0xFE59, 0xFE5A, 0xFE5B, 0xFE5C, 0xFE5D, 0xFE5E, 0x2018, 0x2019,
- 0x201C, 0x201D, 0x301D, 0x301E, 0x2035, 0x2032, 0xFF03, 0xFF06,
- 0xFF0A, 0x203B, 0x00A7, 0x3003, 0x25CB, 0x25CF, 0x25B3, 0x25B2,
- 0x25CE, 0x2606, 0x2605, 0x25C7, 0x25C6, 0x25A1, 0x25A0, 0x25BD,
- 0x25BC, 0x32A3, 0x2105, 0x203E, 0xFFE3, 0xFF3F, 0x02CD, 0xFE49,
- 0xFE4A, 0xFE4D, 0xFE4E, 0xFE4B, 0xFE4C, 0xFE5F, 0xFE60, 0xFE61,
- 0xFF0B, 0xFF0D, 0x00D7, 0x00F7, 0x00B1, 0x221A, 0xFF1C, 0xFF1E,
- 0xFF1D, 0x2266, 0x2267, 0x2260, 0x221E, 0x2252, 0x2261, 0xFE62,
- 0xFE63, 0xFE64, 0xFE65, 0xFE66, 0x223C, 0x2229, 0x222A, 0x22A5,
- 0x2220, 0x221F, 0x22BF, 0x33D2, 0x33D1, 0x222B, 0x222E, 0x2235,
- 0x2234, 0x2640, 0x2642, 0x2295, 0x2609, 0x2191, 0x2193, 0x2192,
- 0x2190, 0x2196, 0x2197, 0x2199, 0x2198, 0x2225, 0x2223, 0xFF0F,
- 0xFF3C, 0xFF0F, 0xFF3C, 0xFF04, 0x00A5, 0x3012, 0x00A2, 0x00A3,
- 0xFF05, 0xFF20, 0x2103, 0x2109, 0xFE69, 0xFE6A, 0xFE6B, 0x33D5,
- 0x339C, 0x339D, 0x339E, 0x33CE, 0x33A1, 0x338E, 0x338F, 0x33C4,
- 0x00B0, 0x5159, 0x515B, 0x515E, 0x515D, 0x5161, 0x5163, 0x55E7,
- 0x74E9, 0x7CCE, 0x2581, 0x2582, 0x2583, 0x2584, 0x2585, 0x2586,
- 0x2587, 0x2588, 0x258F, 0x258E, 0x258D, 0x258C, 0x258B, 0x258A,
- 0x2589, 0x253C, 0x2534, 0x252C, 0x2524, 0x251C, 0x2594, 0x2500,
- 0x2502, 0x2595, 0x250C, 0x2510, 0x2514, 0x2518, 0x256D, 0x256E,
- 0x2570, 0x256F, 0x2550, 0x255E, 0x256A, 0x2561, 0x25E2, 0x25E3,
- 0x25E5, 0x25E4, 0x2571, 0x2572, 0x2573, 0xFF10, 0xFF11, 0xFF12,
- 0xFF13, 0xFF14, 0xFF15, 0xFF16, 0xFF17, 0xFF18, 0xFF19, 0x2160,
- 0x2161, 0x2162, 0x2163, 0x2164, 0x2165, 0x2166, 0x2167, 0x2168,
- 0x2169, 0x3021, 0x3022, 0x3023, 0x3024, 0x3025, 0x3026, 0x3027,
- 0x3028, 0x3029, 0x3038, 0x5344, 0x303A, 0xFF21, 0xFF22, 0xFF23,
- 0xFF24, 0xFF25, 0xFF26, 0xFF27, 0xFF28, 0xFF29, 0xFF2A, 0xFF2B,
- 0xFF2C, 0xFF2D, 0xFF2E, 0xFF2F, 0xFF30, 0xFF31, 0xFF32, 0xFF33,
- 0xFF34, 0xFF35, 0xFF36, 0xFF37, 0xFF38, 0xFF39, 0xFF3A, 0xFF41,
- 0xFF42, 0xFF43, 0xFF44, 0xFF45, 0xFF46, 0xFF47, 0xFF48, 0xFF49,
- 0xFF4A, 0xFF4B, 0xFF4C, 0xFF4D, 0xFF4E, 0xFF4F, 0xFF50, 0xFF51,
- 0xFF52, 0xFF53, 0xFF54, 0xFF55, 0xFF56, 0xFF57, 0xFF58, 0xFF59,
- 0xFF5A, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397,
- 0x0398, 0x0399, 0x039A, 0x039B, 0x039C, 0x039D, 0x039E, 0x039F,
- 0x03A0, 0x03A1, 0x03A3, 0x03A4, 0x03A5, 0x03A6, 0x03A7, 0x03A8,
- 0x03A9, 0x03B1, 0x03B2, 0x03B3, 0x03B4, 0x03B5, 0x03B6, 0x03B7,
- 0x03B8, 0x03B9, 0x03BA, 0x03BB, 0x03BC, 0x03BD, 0x03BE, 0x03BF,
- 0x03C0, 0x03C1, 0x03C3, 0x03C4, 0x03C5, 0x03C6, 0x03C7, 0x03C8,
- 0x03C9, 0x3105, 0x3106, 0x3107, 0x3108, 0x3109, 0x310A, 0x310B,
- 0x310C, 0x310D, 0x310E, 0x310F, 0x3110, 0x3111, 0x3112, 0x3113,
- 0x3114, 0x3115, 0x3116, 0x3117, 0x3118, 0x3119, 0x311A, 0x311B,
- 0x311C, 0x311D, 0x311E, 0x311F, 0x3120, 0x3121, 0x3122, 0x3123,
- 0x3124, 0x3125, 0x3126, 0x3127, 0x3128, 0x3129, 0x02D9, 0x02CA,
- 0x02C7, 0x02CB, 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,
- 0x4E28, 0x4E36, 0x4E3F, 0x4E85, 0x4EA0, 0x5182, 0x5196, 0x51AB,
- 0x52F9, 0x5338, 0x5369, 0x53B6, 0x5902, 0x5B80, 0x5DDB, 0x5E7A,
- 0x5E7F, 0x5EF4, 0x5F50, 0x5F61, 0x6534, 0x65E0, 0x7592, 0x7676,
- 0x8FB5, 0x96B6, 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, 0x4E00, 0x4E59, 0x4E01, 0x4E03, 0x4E43,
- 0x4E5D, 0x4E86, 0x4E8C, 0x4EBA, 0x513F, 0x5165, 0x516B, 0x51E0,
- 0x5200, 0x5201, 0x529B, 0x5315, 0x5341, 0x535C, 0x53C8, 0x4E09,
- 0x4E0B, 0x4E08, 0x4E0A, 0x4E2B, 0x4E38, 0x51E1, 0x4E45, 0x4E48,
- 0x4E5F, 0x4E5E, 0x4E8E, 0x4EA1, 0x5140, 0x5203, 0x52FA, 0x5343,
- 0x53C9, 0x53E3, 0x571F, 0x58EB, 0x5915, 0x5927, 0x5973, 0x5B50,
- 0x5B51, 0x5B53, 0x5BF8, 0x5C0F, 0x5C22, 0x5C38, 0x5C71, 0x5DDD,
- 0x5DE5, 0x5DF1, 0x5DF2, 0x5DF3, 0x5DFE, 0x5E72, 0x5EFE, 0x5F0B,
- 0x5F13, 0x624D, 0x4E11, 0x4E10, 0x4E0D, 0x4E2D, 0x4E30, 0x4E39,
- 0x4E4B, 0x5C39, 0x4E88, 0x4E91, 0x4E95, 0x4E92, 0x4E94, 0x4EA2,
- 0x4EC1, 0x4EC0, 0x4EC3, 0x4EC6, 0x4EC7, 0x4ECD, 0x4ECA, 0x4ECB,
- 0x4EC4, 0x5143, 0x5141, 0x5167, 0x516D, 0x516E, 0x516C, 0x5197,
- 0x51F6, 0x5206, 0x5207, 0x5208, 0x52FB, 0x52FE, 0x52FF, 0x5316,
- 0x5339, 0x5348, 0x5347, 0x5345, 0x535E, 0x5384, 0x53CB, 0x53CA,
- 0x53CD, 0x58EC, 0x5929, 0x592B, 0x592A, 0x592D, 0x5B54, 0x5C11,
- 0x5C24, 0x5C3A, 0x5C6F, 0x5DF4, 0x5E7B, 0x5EFF, 0x5F14, 0x5F15,
- 0x5FC3, 0x6208, 0x6236, 0x624B, 0x624E, 0x652F, 0x6587, 0x6597,
- 0x65A4, 0x65B9, 0x65E5, 0x66F0, 0x6708, 0x6728, 0x6B20, 0x6B62,
- 0x6B79, 0x6BCB, 0x6BD4, 0x6BDB, 0x6C0F, 0x6C34, 0x706B, 0x722A,
- 0x7236, 0x723B, 0x7247, 0x7259, 0x725B, 0x72AC, 0x738B, 0x4E19,
- 0x4E16, 0x4E15, 0x4E14, 0x4E18, 0x4E3B, 0x4E4D, 0x4E4F, 0x4E4E,
- 0x4EE5, 0x4ED8, 0x4ED4, 0x4ED5, 0x4ED6, 0x4ED7, 0x4EE3, 0x4EE4,
- 0x4ED9, 0x4EDE, 0x5145, 0x5144, 0x5189, 0x518A, 0x51AC, 0x51F9,
- 0x51FA, 0x51F8, 0x520A, 0x52A0, 0x529F, 0x5305, 0x5306, 0x5317,
- 0x531D, 0x4EDF, 0x534A, 0x5349, 0x5361, 0x5360, 0x536F, 0x536E,
- 0x53BB, 0x53EF, 0x53E4, 0x53F3, 0x53EC, 0x53EE, 0x53E9, 0x53E8,
- 0x53FC, 0x53F8, 0x53F5, 0x53EB, 0x53E6, 0x53EA, 0x53F2, 0x53F1,
- 0x53F0, 0x53E5, 0x53ED, 0x53FB, 0x56DB, 0x56DA, 0x5916, 0x592E,
- 0x5931, 0x5974, 0x5976, 0x5B55, 0x5B83, 0x5C3C, 0x5DE8, 0x5DE7,
- 0x5DE6, 0x5E02, 0x5E03, 0x5E73, 0x5E7C, 0x5F01, 0x5F18, 0x5F17,
- 0x5FC5, 0x620A, 0x6253, 0x6254, 0x6252, 0x6251, 0x65A5, 0x65E6,
- 0x672E, 0x672C, 0x672A, 0x672B, 0x672D, 0x6B63, 0x6BCD, 0x6C11,
- 0x6C10, 0x6C38, 0x6C41, 0x6C40, 0x6C3E, 0x72AF, 0x7384, 0x7389,
- 0x74DC, 0x74E6, 0x7518, 0x751F, 0x7528, 0x7529, 0x7530, 0x7531,
- 0x7532, 0x7533, 0x758B, 0x767D, 0x76AE, 0x76BF, 0x76EE, 0x77DB,
- 0x77E2, 0x77F3, 0x793A, 0x79BE, 0x7A74, 0x7ACB, 0x4E1E, 0x4E1F,
- 0x4E52, 0x4E53, 0x4E69, 0x4E99, 0x4EA4, 0x4EA6, 0x4EA5, 0x4EFF,
- 0x4F09, 0x4F19, 0x4F0A, 0x4F15, 0x4F0D, 0x4F10, 0x4F11, 0x4F0F,
- 0x4EF2, 0x4EF6, 0x4EFB, 0x4EF0, 0x4EF3, 0x4EFD, 0x4F01, 0x4F0B,
- 0x5149, 0x5147, 0x5146, 0x5148, 0x5168, 0x5171, 0x518D, 0x51B0,
- 0x5217, 0x5211, 0x5212, 0x520E, 0x5216, 0x52A3, 0x5308, 0x5321,
- 0x5320, 0x5370, 0x5371, 0x5409, 0x540F, 0x540C, 0x540A, 0x5410,
- 0x5401, 0x540B, 0x5404, 0x5411, 0x540D, 0x5408, 0x5403, 0x540E,
- 0x5406, 0x5412, 0x56E0, 0x56DE, 0x56DD, 0x5733, 0x5730, 0x5728,
- 0x572D, 0x572C, 0x572F, 0x5729, 0x5919, 0x591A, 0x5937, 0x5938,
- 0x5984, 0x5978, 0x5983, 0x597D, 0x5979, 0x5982, 0x5981, 0x5B57,
- 0x5B58, 0x5B87, 0x5B88, 0x5B85, 0x5B89, 0x5BFA, 0x5C16, 0x5C79,
- 0x5DDE, 0x5E06, 0x5E76, 0x5E74, 0x5F0F, 0x5F1B, 0x5FD9, 0x5FD6,
- 0x620E, 0x620C, 0x620D, 0x6210, 0x6263, 0x625B, 0x6258, 0x6536,
- 0x65E9, 0x65E8, 0x65EC, 0x65ED, 0x66F2, 0x66F3, 0x6709, 0x673D,
- 0x6734, 0x6731, 0x6735, 0x6B21, 0x6B64, 0x6B7B, 0x6C16, 0x6C5D,
- 0x6C57, 0x6C59, 0x6C5F, 0x6C60, 0x6C50, 0x6C55, 0x6C61, 0x6C5B,
- 0x6C4D, 0x6C4E, 0x7070, 0x725F, 0x725D, 0x767E, 0x7AF9, 0x7C73,
- 0x7CF8, 0x7F36, 0x7F8A, 0x7FBD, 0x8001, 0x8003, 0x800C, 0x8012,
- 0x8033, 0x807F, 0x8089, 0x808B, 0x808C, 0x81E3, 0x81EA, 0x81F3,
- 0x81FC, 0x820C, 0x821B, 0x821F, 0x826E, 0x8272, 0x827E, 0x866B,
- 0x8840, 0x884C, 0x8863, 0x897F, 0x9621, 0x4E32, 0x4EA8, 0x4F4D,
- 0x4F4F, 0x4F47, 0x4F57, 0x4F5E, 0x4F34, 0x4F5B, 0x4F55, 0x4F30,
- 0x4F50, 0x4F51, 0x4F3D, 0x4F3A, 0x4F38, 0x4F43, 0x4F54, 0x4F3C,
- 0x4F46, 0x4F63, 0x4F5C, 0x4F60, 0x4F2F, 0x4F4E, 0x4F36, 0x4F59,
- 0x4F5D, 0x4F48, 0x4F5A, 0x514C, 0x514B, 0x514D, 0x5175, 0x51B6,
- 0x51B7, 0x5225, 0x5224, 0x5229, 0x522A, 0x5228, 0x52AB, 0x52A9,
- 0x52AA, 0x52AC, 0x5323, 0x5373, 0x5375, 0x541D, 0x542D, 0x541E,
- 0x543E, 0x5426, 0x544E, 0x5427, 0x5446, 0x5443, 0x5433, 0x5448,
- 0x5442, 0x541B, 0x5429, 0x544A, 0x5439, 0x543B, 0x5438, 0x542E,
- 0x5435, 0x5436, 0x5420, 0x543C, 0x5440, 0x5431, 0x542B, 0x541F,
- 0x542C, 0x56EA, 0x56F0, 0x56E4, 0x56EB, 0x574A, 0x5751, 0x5740,
- 0x574D, 0x5747, 0x574E, 0x573E, 0x5750, 0x574F, 0x573B, 0x58EF,
- 0x593E, 0x599D, 0x5992, 0x59A8, 0x599E, 0x59A3, 0x5999, 0x5996,
- 0x598D, 0x59A4, 0x5993, 0x598A, 0x59A5, 0x5B5D, 0x5B5C, 0x5B5A,
- 0x5B5B, 0x5B8C, 0x5B8B, 0x5B8F, 0x5C2C, 0x5C40, 0x5C41, 0x5C3F,
- 0x5C3E, 0x5C90, 0x5C91, 0x5C94, 0x5C8C, 0x5DEB, 0x5E0C, 0x5E8F,
- 0x5E87, 0x5E8A, 0x5EF7, 0x5F04, 0x5F1F, 0x5F64, 0x5F62, 0x5F77,
- 0x5F79, 0x5FD8, 0x5FCC, 0x5FD7, 0x5FCD, 0x5FF1, 0x5FEB, 0x5FF8,
- 0x5FEA, 0x6212, 0x6211, 0x6284, 0x6297, 0x6296, 0x6280, 0x6276,
- 0x6289, 0x626D, 0x628A, 0x627C, 0x627E, 0x6279, 0x6273, 0x6292,
- 0x626F, 0x6298, 0x626E, 0x6295, 0x6293, 0x6291, 0x6286, 0x6539,
- 0x653B, 0x6538, 0x65F1, 0x66F4, 0x675F, 0x674E, 0x674F, 0x6750,
- 0x6751, 0x675C, 0x6756, 0x675E, 0x6749, 0x6746, 0x6760, 0x6753,
- 0x6757, 0x6B65, 0x6BCF, 0x6C42, 0x6C5E, 0x6C99, 0x6C81, 0x6C88,
- 0x6C89, 0x6C85, 0x6C9B, 0x6C6A, 0x6C7A, 0x6C90, 0x6C70, 0x6C8C,
- 0x6C68, 0x6C96, 0x6C92, 0x6C7D, 0x6C83, 0x6C72, 0x6C7E, 0x6C74,
- 0x6C86, 0x6C76, 0x6C8D, 0x6C94, 0x6C98, 0x6C82, 0x7076, 0x707C,
- 0x707D, 0x7078, 0x7262, 0x7261, 0x7260, 0x72C4, 0x72C2, 0x7396,
- 0x752C, 0x752B, 0x7537, 0x7538, 0x7682, 0x76EF, 0x77E3, 0x79C1,
- 0x79C0, 0x79BF, 0x7A76, 0x7CFB, 0x7F55, 0x8096, 0x8093, 0x809D,
- 0x8098, 0x809B, 0x809A, 0x80B2, 0x826F, 0x8292, 0x828B, 0x828D,
- 0x898B, 0x89D2, 0x8A00, 0x8C37, 0x8C46, 0x8C55, 0x8C9D, 0x8D64,
- 0x8D70, 0x8DB3, 0x8EAB, 0x8ECA, 0x8F9B, 0x8FB0, 0x8FC2, 0x8FC6,
- 0x8FC5, 0x8FC4, 0x5DE1, 0x9091, 0x90A2, 0x90AA, 0x90A6, 0x90A3,
- 0x9149, 0x91C6, 0x91CC, 0x9632, 0x962E, 0x9631, 0x962A, 0x962C,
- 0x4E26, 0x4E56, 0x4E73, 0x4E8B, 0x4E9B, 0x4E9E, 0x4EAB, 0x4EAC,
- 0x4F6F, 0x4F9D, 0x4F8D, 0x4F73, 0x4F7F, 0x4F6C, 0x4F9B, 0x4F8B,
- 0x4F86, 0x4F83, 0x4F70, 0x4F75, 0x4F88, 0x4F69, 0x4F7B, 0x4F96,
- 0x4F7E, 0x4F8F, 0x4F91, 0x4F7A, 0x5154, 0x5152, 0x5155, 0x5169,
- 0x5177, 0x5176, 0x5178, 0x51BD, 0x51FD, 0x523B, 0x5238, 0x5237,
- 0x523A, 0x5230, 0x522E, 0x5236, 0x5241, 0x52BE, 0x52BB, 0x5352,
- 0x5354, 0x5353, 0x5351, 0x5366, 0x5377, 0x5378, 0x5379, 0x53D6,
- 0x53D4, 0x53D7, 0x5473, 0x5475, 0x5496, 0x5478, 0x5495, 0x5480,
- 0x547B, 0x5477, 0x5484, 0x5492, 0x5486, 0x547C, 0x5490, 0x5471,
- 0x5476, 0x548C, 0x549A, 0x5462, 0x5468, 0x548B, 0x547D, 0x548E,
- 0x56FA, 0x5783, 0x5777, 0x576A, 0x5769, 0x5761, 0x5766, 0x5764,
- 0x577C, 0x591C, 0x5949, 0x5947, 0x5948, 0x5944, 0x5954, 0x59BE,
- 0x59BB, 0x59D4, 0x59B9, 0x59AE, 0x59D1, 0x59C6, 0x59D0, 0x59CD,
- 0x59CB, 0x59D3, 0x59CA, 0x59AF, 0x59B3, 0x59D2, 0x59C5, 0x5B5F,
- 0x5B64, 0x5B63, 0x5B97, 0x5B9A, 0x5B98, 0x5B9C, 0x5B99, 0x5B9B,
- 0x5C1A, 0x5C48, 0x5C45, 0x5C46, 0x5CB7, 0x5CA1, 0x5CB8, 0x5CA9,
- 0x5CAB, 0x5CB1, 0x5CB3, 0x5E18, 0x5E1A, 0x5E16, 0x5E15, 0x5E1B,
- 0x5E11, 0x5E78, 0x5E9A, 0x5E97, 0x5E9C, 0x5E95, 0x5E96, 0x5EF6,
- 0x5F26, 0x5F27, 0x5F29, 0x5F80, 0x5F81, 0x5F7F, 0x5F7C, 0x5FDD,
- 0x5FE0, 0x5FFD, 0x5FF5, 0x5FFF, 0x600F, 0x6014, 0x602F, 0x6035,
- 0x6016, 0x602A, 0x6015, 0x6021, 0x6027, 0x6029, 0x602B, 0x601B,
- 0x6216, 0x6215, 0x623F, 0x623E, 0x6240, 0x627F, 0x62C9, 0x62CC,
- 0x62C4, 0x62BF, 0x62C2, 0x62B9, 0x62D2, 0x62DB, 0x62AB, 0x62D3,
- 0x62D4, 0x62CB, 0x62C8, 0x62A8, 0x62BD, 0x62BC, 0x62D0, 0x62D9,
- 0x62C7, 0x62CD, 0x62B5, 0x62DA, 0x62B1, 0x62D8, 0x62D6, 0x62D7,
- 0x62C6, 0x62AC, 0x62CE, 0x653E, 0x65A7, 0x65BC, 0x65FA, 0x6614,
- 0x6613, 0x660C, 0x6606, 0x6602, 0x660E, 0x6600, 0x660F, 0x6615,
- 0x660A, 0x6607, 0x670D, 0x670B, 0x676D, 0x678B, 0x6795, 0x6771,
- 0x679C, 0x6773, 0x6777, 0x6787, 0x679D, 0x6797, 0x676F, 0x6770,
- 0x677F, 0x6789, 0x677E, 0x6790, 0x6775, 0x679A, 0x6793, 0x677C,
- 0x676A, 0x6772, 0x6B23, 0x6B66, 0x6B67, 0x6B7F, 0x6C13, 0x6C1B,
- 0x6CE3, 0x6CE8, 0x6CF3, 0x6CB1, 0x6CCC, 0x6CE5, 0x6CB3, 0x6CBD,
- 0x6CBE, 0x6CBC, 0x6CE2, 0x6CAB, 0x6CD5, 0x6CD3, 0x6CB8, 0x6CC4,
- 0x6CB9, 0x6CC1, 0x6CAE, 0x6CD7, 0x6CC5, 0x6CF1, 0x6CBF, 0x6CBB,
- 0x6CE1, 0x6CDB, 0x6CCA, 0x6CAC, 0x6CEF, 0x6CDC, 0x6CD6, 0x6CE0,
- 0x7095, 0x708E, 0x7092, 0x708A, 0x7099, 0x722C, 0x722D, 0x7238,
- 0x7248, 0x7267, 0x7269, 0x72C0, 0x72CE, 0x72D9, 0x72D7, 0x72D0,
- 0x73A9, 0x73A8, 0x739F, 0x73AB, 0x73A5, 0x753D, 0x759D, 0x7599,
- 0x759A, 0x7684, 0x76C2, 0x76F2, 0x76F4, 0x77E5, 0x77FD, 0x793E,
- 0x7940, 0x7941, 0x79C9, 0x79C8, 0x7A7A, 0x7A79, 0x7AFA, 0x7CFE,
- 0x7F54, 0x7F8C, 0x7F8B, 0x8005, 0x80BA, 0x80A5, 0x80A2, 0x80B1,
- 0x80A1, 0x80AB, 0x80A9, 0x80B4, 0x80AA, 0x80AF, 0x81E5, 0x81FE,
- 0x820D, 0x82B3, 0x829D, 0x8299, 0x82AD, 0x82BD, 0x829F, 0x82B9,
- 0x82B1, 0x82AC, 0x82A5, 0x82AF, 0x82B8, 0x82A3, 0x82B0, 0x82BE,
- 0x82B7, 0x864E, 0x8671, 0x521D, 0x8868, 0x8ECB, 0x8FCE, 0x8FD4,
- 0x8FD1, 0x90B5, 0x90B8, 0x90B1, 0x90B6, 0x91C7, 0x91D1, 0x9577,
- 0x9580, 0x961C, 0x9640, 0x963F, 0x963B, 0x9644, 0x9642, 0x96B9,
- 0x96E8, 0x9752, 0x975E, 0x4E9F, 0x4EAD, 0x4EAE, 0x4FE1, 0x4FB5,
- 0x4FAF, 0x4FBF, 0x4FE0, 0x4FD1, 0x4FCF, 0x4FDD, 0x4FC3, 0x4FB6,
- 0x4FD8, 0x4FDF, 0x4FCA, 0x4FD7, 0x4FAE, 0x4FD0, 0x4FC4, 0x4FC2,
- 0x4FDA, 0x4FCE, 0x4FDE, 0x4FB7, 0x5157, 0x5192, 0x5191, 0x51A0,
- 0x524E, 0x5243, 0x524A, 0x524D, 0x524C, 0x524B, 0x5247, 0x52C7,
- 0x52C9, 0x52C3, 0x52C1, 0x530D, 0x5357, 0x537B, 0x539A, 0x53DB,
- 0x54AC, 0x54C0, 0x54A8, 0x54CE, 0x54C9, 0x54B8, 0x54A6, 0x54B3,
- 0x54C7, 0x54C2, 0x54BD, 0x54AA, 0x54C1, 0x54C4, 0x54C8, 0x54AF,
- 0x54AB, 0x54B1, 0x54BB, 0x54A9, 0x54A7, 0x54BF, 0x56FF, 0x5782,
- 0x578B, 0x57A0, 0x57A3, 0x57A2, 0x57CE, 0x57AE, 0x5793, 0x5955,
- 0x5951, 0x594F, 0x594E, 0x5950, 0x59DC, 0x59D8, 0x59FF, 0x59E3,
- 0x59E8, 0x5A03, 0x59E5, 0x59EA, 0x59DA, 0x59E6, 0x5A01, 0x59FB,
- 0x5B69, 0x5BA3, 0x5BA6, 0x5BA4, 0x5BA2, 0x5BA5, 0x5C01, 0x5C4E,
- 0x5C4F, 0x5C4D, 0x5C4B, 0x5CD9, 0x5CD2, 0x5DF7, 0x5E1D, 0x5E25,
- 0x5E1F, 0x5E7D, 0x5EA0, 0x5EA6, 0x5EFA, 0x5F08, 0x5F2D, 0x5F65,
- 0x5F88, 0x5F85, 0x5F8A, 0x5F8B, 0x5F87, 0x5F8C, 0x5F89, 0x6012,
- 0x601D, 0x6020, 0x6025, 0x600E, 0x6028, 0x604D, 0x6070, 0x6068,
- 0x6062, 0x6046, 0x6043, 0x606C, 0x606B, 0x606A, 0x6064, 0x6241,
- 0x62DC, 0x6316, 0x6309, 0x62FC, 0x62ED, 0x6301, 0x62EE, 0x62FD,
- 0x6307, 0x62F1, 0x62F7, 0x62EF, 0x62EC, 0x62FE, 0x62F4, 0x6311,
- 0x6302, 0x653F, 0x6545, 0x65AB, 0x65BD, 0x65E2, 0x6625, 0x662D,
- 0x6620, 0x6627, 0x662F, 0x661F, 0x6628, 0x6631, 0x6624, 0x66F7,
- 0x67FF, 0x67D3, 0x67F1, 0x67D4, 0x67D0, 0x67EC, 0x67B6, 0x67AF,
- 0x67F5, 0x67E9, 0x67EF, 0x67C4, 0x67D1, 0x67B4, 0x67DA, 0x67E5,
- 0x67B8, 0x67CF, 0x67DE, 0x67F3, 0x67B0, 0x67D9, 0x67E2, 0x67DD,
- 0x67D2, 0x6B6A, 0x6B83, 0x6B86, 0x6BB5, 0x6BD2, 0x6BD7, 0x6C1F,
- 0x6CC9, 0x6D0B, 0x6D32, 0x6D2A, 0x6D41, 0x6D25, 0x6D0C, 0x6D31,
- 0x6D1E, 0x6D17, 0x6D3B, 0x6D3D, 0x6D3E, 0x6D36, 0x6D1B, 0x6CF5,
- 0x6D39, 0x6D27, 0x6D38, 0x6D29, 0x6D2E, 0x6D35, 0x6D0E, 0x6D2B,
- 0x70AB, 0x70BA, 0x70B3, 0x70AC, 0x70AF, 0x70AD, 0x70B8, 0x70AE,
- 0x70A4, 0x7230, 0x7272, 0x726F, 0x7274, 0x72E9, 0x72E0, 0x72E1,
- 0x73B7, 0x73CA, 0x73BB, 0x73B2, 0x73CD, 0x73C0, 0x73B3, 0x751A,
- 0x752D, 0x754F, 0x754C, 0x754E, 0x754B, 0x75AB, 0x75A4, 0x75A5,
- 0x75A2, 0x75A3, 0x7678, 0x7686, 0x7687, 0x7688, 0x76C8, 0x76C6,
- 0x76C3, 0x76C5, 0x7701, 0x76F9, 0x76F8, 0x7709, 0x770B, 0x76FE,
- 0x76FC, 0x7707, 0x77DC, 0x7802, 0x7814, 0x780C, 0x780D, 0x7946,
- 0x7949, 0x7948, 0x7947, 0x79B9, 0x79BA, 0x79D1, 0x79D2, 0x79CB,
- 0x7A7F, 0x7A81, 0x7AFF, 0x7AFD, 0x7C7D, 0x7D02, 0x7D05, 0x7D00,
- 0x7D09, 0x7D07, 0x7D04, 0x7D06, 0x7F38, 0x7F8E, 0x7FBF, 0x8010,
- 0x800D, 0x8011, 0x8036, 0x80D6, 0x80E5, 0x80DA, 0x80C3, 0x80C4,
- 0x80CC, 0x80E1, 0x80DB, 0x80CE, 0x80DE, 0x80E4, 0x80DD, 0x81F4,
- 0x8222, 0x82E7, 0x8303, 0x8305, 0x82E3, 0x82DB, 0x82E6, 0x8304,
- 0x82E5, 0x8302, 0x8309, 0x82D2, 0x82D7, 0x82F1, 0x8301, 0x82DC,
- 0x82D4, 0x82D1, 0x82DE, 0x82D3, 0x82DF, 0x82EF, 0x8306, 0x8650,
- 0x8679, 0x867B, 0x867A, 0x884D, 0x886B, 0x8981, 0x89D4, 0x8A08,
- 0x8A02, 0x8A03, 0x8C9E, 0x8CA0, 0x8D74, 0x8D73, 0x8DB4, 0x8ECD,
- 0x8ECC, 0x8FF0, 0x8FE6, 0x8FE2, 0x8FEA, 0x8FE5, 0x8FED, 0x8FEB,
- 0x8FE4, 0x8FE8, 0x90CA, 0x90CE, 0x90C1, 0x90C3, 0x914B, 0x914A,
- 0x91CD, 0x9582, 0x9650, 0x964B, 0x964C, 0x964D, 0x9762, 0x9769,
- 0x97CB, 0x97ED, 0x97F3, 0x9801, 0x98A8, 0x98DB, 0x98DF, 0x9996,
- 0x9999, 0x4E58, 0x4EB3, 0x500C, 0x500D, 0x5023, 0x4FEF, 0x5026,
- 0x5025, 0x4FF8, 0x5029, 0x5016, 0x5006, 0x503C, 0x501F, 0x501A,
- 0x5012, 0x5011, 0x4FFA, 0x5000, 0x5014, 0x5028, 0x4FF1, 0x5021,
- 0x500B, 0x5019, 0x5018, 0x4FF3, 0x4FEE, 0x502D, 0x502A, 0x4FFE,
- 0x502B, 0x5009, 0x517C, 0x51A4, 0x51A5, 0x51A2, 0x51CD, 0x51CC,
- 0x51C6, 0x51CB, 0x5256, 0x525C, 0x5254, 0x525B, 0x525D, 0x532A,
- 0x537F, 0x539F, 0x539D, 0x53DF, 0x54E8, 0x5510, 0x5501, 0x5537,
- 0x54FC, 0x54E5, 0x54F2, 0x5506, 0x54FA, 0x5514, 0x54E9, 0x54ED,
- 0x54E1, 0x5509, 0x54EE, 0x54EA, 0x54E6, 0x5527, 0x5507, 0x54FD,
- 0x550F, 0x5703, 0x5704, 0x57C2, 0x57D4, 0x57CB, 0x57C3, 0x5809,
- 0x590F, 0x5957, 0x5958, 0x595A, 0x5A11, 0x5A18, 0x5A1C, 0x5A1F,
- 0x5A1B, 0x5A13, 0x59EC, 0x5A20, 0x5A23, 0x5A29, 0x5A25, 0x5A0C,
- 0x5A09, 0x5B6B, 0x5C58, 0x5BB0, 0x5BB3, 0x5BB6, 0x5BB4, 0x5BAE,
- 0x5BB5, 0x5BB9, 0x5BB8, 0x5C04, 0x5C51, 0x5C55, 0x5C50, 0x5CED,
- 0x5CFD, 0x5CFB, 0x5CEA, 0x5CE8, 0x5CF0, 0x5CF6, 0x5D01, 0x5CF4,
- 0x5DEE, 0x5E2D, 0x5E2B, 0x5EAB, 0x5EAD, 0x5EA7, 0x5F31, 0x5F92,
- 0x5F91, 0x5F90, 0x6059, 0x6063, 0x6065, 0x6050, 0x6055, 0x606D,
- 0x6069, 0x606F, 0x6084, 0x609F, 0x609A, 0x608D, 0x6094, 0x608C,
- 0x6085, 0x6096, 0x6247, 0x62F3, 0x6308, 0x62FF, 0x634E, 0x633E,
- 0x632F, 0x6355, 0x6342, 0x6346, 0x634F, 0x6349, 0x633A, 0x6350,
- 0x633D, 0x632A, 0x632B, 0x6328, 0x634D, 0x634C, 0x6548, 0x6549,
- 0x6599, 0x65C1, 0x65C5, 0x6642, 0x6649, 0x664F, 0x6643, 0x6652,
- 0x664C, 0x6645, 0x6641, 0x66F8, 0x6714, 0x6715, 0x6717, 0x6821,
- 0x6838, 0x6848, 0x6846, 0x6853, 0x6839, 0x6842, 0x6854, 0x6829,
- 0x68B3, 0x6817, 0x684C, 0x6851, 0x683D, 0x67F4, 0x6850, 0x6840,
- 0x683C, 0x6843, 0x682A, 0x6845, 0x6813, 0x6818, 0x6841, 0x6B8A,
- 0x6B89, 0x6BB7, 0x6C23, 0x6C27, 0x6C28, 0x6C26, 0x6C24, 0x6CF0,
- 0x6D6A, 0x6D95, 0x6D88, 0x6D87, 0x6D66, 0x6D78, 0x6D77, 0x6D59,
- 0x6D93, 0x6D6C, 0x6D89, 0x6D6E, 0x6D5A, 0x6D74, 0x6D69, 0x6D8C,
- 0x6D8A, 0x6D79, 0x6D85, 0x6D65, 0x6D94, 0x70CA, 0x70D8, 0x70E4,
- 0x70D9, 0x70C8, 0x70CF, 0x7239, 0x7279, 0x72FC, 0x72F9, 0x72FD,
- 0x72F8, 0x72F7, 0x7386, 0x73ED, 0x7409, 0x73EE, 0x73E0, 0x73EA,
- 0x73DE, 0x7554, 0x755D, 0x755C, 0x755A, 0x7559, 0x75BE, 0x75C5,
- 0x75C7, 0x75B2, 0x75B3, 0x75BD, 0x75BC, 0x75B9, 0x75C2, 0x75B8,
- 0x768B, 0x76B0, 0x76CA, 0x76CD, 0x76CE, 0x7729, 0x771F, 0x7720,
- 0x7728, 0x77E9, 0x7830, 0x7827, 0x7838, 0x781D, 0x7834, 0x7837,
- 0x7825, 0x782D, 0x7820, 0x781F, 0x7832, 0x7955, 0x7950, 0x7960,
- 0x795F, 0x7956, 0x795E, 0x795D, 0x7957, 0x795A, 0x79E4, 0x79E3,
- 0x79E7, 0x79DF, 0x79E6, 0x79E9, 0x79D8, 0x7A84, 0x7A88, 0x7AD9,
- 0x7B06, 0x7B11, 0x7C89, 0x7D21, 0x7D17, 0x7D0B, 0x7D0A, 0x7D20,
- 0x7D22, 0x7D14, 0x7D10, 0x7D15, 0x7D1A, 0x7D1C, 0x7D0D, 0x7D19,
- 0x7D1B, 0x7F3A, 0x7F5F, 0x7F94, 0x7FC5, 0x7FC1, 0x8006, 0x8004,
- 0x8018, 0x8015, 0x8019, 0x8017, 0x803D, 0x803F, 0x80F1, 0x8102,
- 0x80F0, 0x8105, 0x80ED, 0x80F4, 0x8106, 0x80F8, 0x80F3, 0x8108,
- 0x80FD, 0x810A, 0x80FC, 0x80EF, 0x81ED, 0x81EC, 0x8200, 0x8210,
- 0x822A, 0x822B, 0x8228, 0x822C, 0x82BB, 0x832B, 0x8352, 0x8354,
- 0x834A, 0x8338, 0x8350, 0x8349, 0x8335, 0x8334, 0x834F, 0x8332,
- 0x8339, 0x8336, 0x8317, 0x8340, 0x8331, 0x8328, 0x8343, 0x8654,
- 0x868A, 0x86AA, 0x8693, 0x86A4, 0x86A9, 0x868C, 0x86A3, 0x869C,
- 0x8870, 0x8877, 0x8881, 0x8882, 0x887D, 0x8879, 0x8A18, 0x8A10,
- 0x8A0E, 0x8A0C, 0x8A15, 0x8A0A, 0x8A17, 0x8A13, 0x8A16, 0x8A0F,
- 0x8A11, 0x8C48, 0x8C7A, 0x8C79, 0x8CA1, 0x8CA2, 0x8D77, 0x8EAC,
- 0x8ED2, 0x8ED4, 0x8ECF, 0x8FB1, 0x9001, 0x9006, 0x8FF7, 0x9000,
- 0x8FFA, 0x8FF4, 0x9003, 0x8FFD, 0x9005, 0x8FF8, 0x9095, 0x90E1,
- 0x90DD, 0x90E2, 0x9152, 0x914D, 0x914C, 0x91D8, 0x91DD, 0x91D7,
- 0x91DC, 0x91D9, 0x9583, 0x9662, 0x9663, 0x9661, 0x965B, 0x965D,
- 0x9664, 0x9658, 0x965E, 0x96BB, 0x98E2, 0x99AC, 0x9AA8, 0x9AD8,
- 0x9B25, 0x9B32, 0x9B3C, 0x4E7E, 0x507A, 0x507D, 0x505C, 0x5047,
- 0x5043, 0x504C, 0x505A, 0x5049, 0x5065, 0x5076, 0x504E, 0x5055,
- 0x5075, 0x5074, 0x5077, 0x504F, 0x500F, 0x506F, 0x506D, 0x515C,
- 0x5195, 0x51F0, 0x526A, 0x526F, 0x52D2, 0x52D9, 0x52D8, 0x52D5,
- 0x5310, 0x530F, 0x5319, 0x533F, 0x5340, 0x533E, 0x53C3, 0x66FC,
- 0x5546, 0x556A, 0x5566, 0x5544, 0x555E, 0x5561, 0x5543, 0x554A,
- 0x5531, 0x5556, 0x554F, 0x5555, 0x552F, 0x5564, 0x5538, 0x552E,
- 0x555C, 0x552C, 0x5563, 0x5533, 0x5541, 0x5557, 0x5708, 0x570B,
- 0x5709, 0x57DF, 0x5805, 0x580A, 0x5806, 0x57E0, 0x57E4, 0x57FA,
- 0x5802, 0x5835, 0x57F7, 0x57F9, 0x5920, 0x5962, 0x5A36, 0x5A41,
- 0x5A49, 0x5A66, 0x5A6A, 0x5A40, 0x5A3C, 0x5A62, 0x5A5A, 0x5A46,
- 0x5A4A, 0x5B70, 0x5BC7, 0x5BC5, 0x5BC4, 0x5BC2, 0x5BBF, 0x5BC6,
- 0x5C09, 0x5C08, 0x5C07, 0x5C60, 0x5C5C, 0x5C5D, 0x5D07, 0x5D06,
- 0x5D0E, 0x5D1B, 0x5D16, 0x5D22, 0x5D11, 0x5D29, 0x5D14, 0x5D19,
- 0x5D24, 0x5D27, 0x5D17, 0x5DE2, 0x5E38, 0x5E36, 0x5E33, 0x5E37,
- 0x5EB7, 0x5EB8, 0x5EB6, 0x5EB5, 0x5EBE, 0x5F35, 0x5F37, 0x5F57,
- 0x5F6C, 0x5F69, 0x5F6B, 0x5F97, 0x5F99, 0x5F9E, 0x5F98, 0x5FA1,
- 0x5FA0, 0x5F9C, 0x607F, 0x60A3, 0x6089, 0x60A0, 0x60A8, 0x60CB,
- 0x60B4, 0x60E6, 0x60BD, 0x60C5, 0x60BB, 0x60B5, 0x60DC, 0x60BC,
- 0x60D8, 0x60D5, 0x60C6, 0x60DF, 0x60B8, 0x60DA, 0x60C7, 0x621A,
- 0x621B, 0x6248, 0x63A0, 0x63A7, 0x6372, 0x6396, 0x63A2, 0x63A5,
- 0x6377, 0x6367, 0x6398, 0x63AA, 0x6371, 0x63A9, 0x6389, 0x6383,
- 0x639B, 0x636B, 0x63A8, 0x6384, 0x6388, 0x6399, 0x63A1, 0x63AC,
- 0x6392, 0x638F, 0x6380, 0x637B, 0x6369, 0x6368, 0x637A, 0x655D,
- 0x6556, 0x6551, 0x6559, 0x6557, 0x555F, 0x654F, 0x6558, 0x6555,
- 0x6554, 0x659C, 0x659B, 0x65AC, 0x65CF, 0x65CB, 0x65CC, 0x65CE,
- 0x665D, 0x665A, 0x6664, 0x6668, 0x6666, 0x665E, 0x66F9, 0x52D7,
- 0x671B, 0x6881, 0x68AF, 0x68A2, 0x6893, 0x68B5, 0x687F, 0x6876,
- 0x68B1, 0x68A7, 0x6897, 0x68B0, 0x6883, 0x68C4, 0x68AD, 0x6886,
- 0x6885, 0x6894, 0x689D, 0x68A8, 0x689F, 0x68A1, 0x6882, 0x6B32,
- 0x6BBA, 0x6BEB, 0x6BEC, 0x6C2B, 0x6D8E, 0x6DBC, 0x6DF3, 0x6DD9,
- 0x6DB2, 0x6DE1, 0x6DCC, 0x6DE4, 0x6DFB, 0x6DFA, 0x6E05, 0x6DC7,
- 0x6DCB, 0x6DAF, 0x6DD1, 0x6DAE, 0x6DDE, 0x6DF9, 0x6DB8, 0x6DF7,
- 0x6DF5, 0x6DC5, 0x6DD2, 0x6E1A, 0x6DB5, 0x6DDA, 0x6DEB, 0x6DD8,
- 0x6DEA, 0x6DF1, 0x6DEE, 0x6DE8, 0x6DC6, 0x6DC4, 0x6DAA, 0x6DEC,
- 0x6DBF, 0x6DE6, 0x70F9, 0x7109, 0x710A, 0x70FD, 0x70EF, 0x723D,
- 0x727D, 0x7281, 0x731C, 0x731B, 0x7316, 0x7313, 0x7319, 0x7387,
- 0x7405, 0x740A, 0x7403, 0x7406, 0x73FE, 0x740D, 0x74E0, 0x74F6,
- 0x74F7, 0x751C, 0x7522, 0x7565, 0x7566, 0x7562, 0x7570, 0x758F,
- 0x75D4, 0x75D5, 0x75B5, 0x75CA, 0x75CD, 0x768E, 0x76D4, 0x76D2,
- 0x76DB, 0x7737, 0x773E, 0x773C, 0x7736, 0x7738, 0x773A, 0x786B,
- 0x7843, 0x784E, 0x7965, 0x7968, 0x796D, 0x79FB, 0x7A92, 0x7A95,
- 0x7B20, 0x7B28, 0x7B1B, 0x7B2C, 0x7B26, 0x7B19, 0x7B1E, 0x7B2E,
- 0x7C92, 0x7C97, 0x7C95, 0x7D46, 0x7D43, 0x7D71, 0x7D2E, 0x7D39,
- 0x7D3C, 0x7D40, 0x7D30, 0x7D33, 0x7D44, 0x7D2F, 0x7D42, 0x7D32,
- 0x7D31, 0x7F3D, 0x7F9E, 0x7F9A, 0x7FCC, 0x7FCE, 0x7FD2, 0x801C,
- 0x804A, 0x8046, 0x812F, 0x8116, 0x8123, 0x812B, 0x8129, 0x8130,
- 0x8124, 0x8202, 0x8235, 0x8237, 0x8236, 0x8239, 0x838E, 0x839E,
- 0x8398, 0x8378, 0x83A2, 0x8396, 0x83BD, 0x83AB, 0x8392, 0x838A,
- 0x8393, 0x8389, 0x83A0, 0x8377, 0x837B, 0x837C, 0x8386, 0x83A7,
- 0x8655, 0x5F6A, 0x86C7, 0x86C0, 0x86B6, 0x86C4, 0x86B5, 0x86C6,
- 0x86CB, 0x86B1, 0x86AF, 0x86C9, 0x8853, 0x889E, 0x8888, 0x88AB,
- 0x8892, 0x8896, 0x888D, 0x888B, 0x8993, 0x898F, 0x8A2A, 0x8A1D,
- 0x8A23, 0x8A25, 0x8A31, 0x8A2D, 0x8A1F, 0x8A1B, 0x8A22, 0x8C49,
- 0x8C5A, 0x8CA9, 0x8CAC, 0x8CAB, 0x8CA8, 0x8CAA, 0x8CA7, 0x8D67,
- 0x8D66, 0x8DBE, 0x8DBA, 0x8EDB, 0x8EDF, 0x9019, 0x900D, 0x901A,
- 0x9017, 0x9023, 0x901F, 0x901D, 0x9010, 0x9015, 0x901E, 0x9020,
- 0x900F, 0x9022, 0x9016, 0x901B, 0x9014, 0x90E8, 0x90ED, 0x90FD,
- 0x9157, 0x91CE, 0x91F5, 0x91E6, 0x91E3, 0x91E7, 0x91ED, 0x91E9,
- 0x9589, 0x966A, 0x9675, 0x9673, 0x9678, 0x9670, 0x9674, 0x9676,
- 0x9677, 0x966C, 0x96C0, 0x96EA, 0x96E9, 0x7AE0, 0x7ADF, 0x9802,
- 0x9803, 0x9B5A, 0x9CE5, 0x9E75, 0x9E7F, 0x9EA5, 0x9EBB, 0x50A2,
- 0x508D, 0x5085, 0x5099, 0x5091, 0x5080, 0x5096, 0x5098, 0x509A,
- 0x6700, 0x51F1, 0x5272, 0x5274, 0x5275, 0x5269, 0x52DE, 0x52DD,
- 0x52DB, 0x535A, 0x53A5, 0x557B, 0x5580, 0x55A7, 0x557C, 0x558A,
- 0x559D, 0x5598, 0x5582, 0x559C, 0x55AA, 0x5594, 0x5587, 0x558B,
- 0x5583, 0x55B3, 0x55AE, 0x559F, 0x553E, 0x55B2, 0x559A, 0x55BB,
- 0x55AC, 0x55B1, 0x557E, 0x5589, 0x55AB, 0x5599, 0x570D, 0x582F,
- 0x582A, 0x5834, 0x5824, 0x5830, 0x5831, 0x5821, 0x581D, 0x5820,
- 0x58F9, 0x58FA, 0x5960, 0x5A77, 0x5A9A, 0x5A7F, 0x5A92, 0x5A9B,
- 0x5AA7, 0x5B73, 0x5B71, 0x5BD2, 0x5BCC, 0x5BD3, 0x5BD0, 0x5C0A,
- 0x5C0B, 0x5C31, 0x5D4C, 0x5D50, 0x5D34, 0x5D47, 0x5DFD, 0x5E45,
- 0x5E3D, 0x5E40, 0x5E43, 0x5E7E, 0x5ECA, 0x5EC1, 0x5EC2, 0x5EC4,
- 0x5F3C, 0x5F6D, 0x5FA9, 0x5FAA, 0x5FA8, 0x60D1, 0x60E1, 0x60B2,
- 0x60B6, 0x60E0, 0x611C, 0x6123, 0x60FA, 0x6115, 0x60F0, 0x60FB,
- 0x60F4, 0x6168, 0x60F1, 0x610E, 0x60F6, 0x6109, 0x6100, 0x6112,
- 0x621F, 0x6249, 0x63A3, 0x638C, 0x63CF, 0x63C0, 0x63E9, 0x63C9,
- 0x63C6, 0x63CD, 0x63D2, 0x63E3, 0x63D0, 0x63E1, 0x63D6, 0x63ED,
- 0x63EE, 0x6376, 0x63F4, 0x63EA, 0x63DB, 0x6452, 0x63DA, 0x63F9,
- 0x655E, 0x6566, 0x6562, 0x6563, 0x6591, 0x6590, 0x65AF, 0x666E,
- 0x6670, 0x6674, 0x6676, 0x666F, 0x6691, 0x667A, 0x667E, 0x6677,
- 0x66FE, 0x66FF, 0x671F, 0x671D, 0x68FA, 0x68D5, 0x68E0, 0x68D8,
- 0x68D7, 0x6905, 0x68DF, 0x68F5, 0x68EE, 0x68E7, 0x68F9, 0x68D2,
- 0x68F2, 0x68E3, 0x68CB, 0x68CD, 0x690D, 0x6912, 0x690E, 0x68C9,
- 0x68DA, 0x696E, 0x68FB, 0x6B3E, 0x6B3A, 0x6B3D, 0x6B98, 0x6B96,
- 0x6BBC, 0x6BEF, 0x6C2E, 0x6C2F, 0x6C2C, 0x6E2F, 0x6E38, 0x6E54,
- 0x6E21, 0x6E32, 0x6E67, 0x6E4A, 0x6E20, 0x6E25, 0x6E23, 0x6E1B,
- 0x6E5B, 0x6E58, 0x6E24, 0x6E56, 0x6E6E, 0x6E2D, 0x6E26, 0x6E6F,
- 0x6E34, 0x6E4D, 0x6E3A, 0x6E2C, 0x6E43, 0x6E1D, 0x6E3E, 0x6ECB,
- 0x6E89, 0x6E19, 0x6E4E, 0x6E63, 0x6E44, 0x6E72, 0x6E69, 0x6E5F,
- 0x7119, 0x711A, 0x7126, 0x7130, 0x7121, 0x7136, 0x716E, 0x711C,
- 0x724C, 0x7284, 0x7280, 0x7336, 0x7325, 0x7334, 0x7329, 0x743A,
- 0x742A, 0x7433, 0x7422, 0x7425, 0x7435, 0x7436, 0x7434, 0x742F,
- 0x741B, 0x7426, 0x7428, 0x7525, 0x7526, 0x756B, 0x756A, 0x75E2,
- 0x75DB, 0x75E3, 0x75D9, 0x75D8, 0x75DE, 0x75E0, 0x767B, 0x767C,
- 0x7696, 0x7693, 0x76B4, 0x76DC, 0x774F, 0x77ED, 0x785D, 0x786C,
- 0x786F, 0x7A0D, 0x7A08, 0x7A0B, 0x7A05, 0x7A00, 0x7A98, 0x7A97,
- 0x7A96, 0x7AE5, 0x7AE3, 0x7B49, 0x7B56, 0x7B46, 0x7B50, 0x7B52,
- 0x7B54, 0x7B4D, 0x7B4B, 0x7B4F, 0x7B51, 0x7C9F, 0x7CA5, 0x7D5E,
- 0x7D50, 0x7D68, 0x7D55, 0x7D2B, 0x7D6E, 0x7D72, 0x7D61, 0x7D66,
- 0x7D62, 0x7D70, 0x7D73, 0x5584, 0x7FD4, 0x7FD5, 0x800B, 0x8052,
- 0x8085, 0x8155, 0x8154, 0x814B, 0x8151, 0x814E, 0x8139, 0x8146,
- 0x813E, 0x814C, 0x8153, 0x8174, 0x8212, 0x821C, 0x83E9, 0x8403,
- 0x83F8, 0x840D, 0x83E0, 0x83C5, 0x840B, 0x83C1, 0x83EF, 0x83F1,
- 0x83F4, 0x8457, 0x840A, 0x83F0, 0x840C, 0x83CC, 0x83FD, 0x83F2,
- 0x83CA, 0x8438, 0x840E, 0x8404, 0x83DC, 0x8407, 0x83D4, 0x83DF,
- 0x865B, 0x86DF, 0x86D9, 0x86ED, 0x86D4, 0x86DB, 0x86E4, 0x86D0,
- 0x86DE, 0x8857, 0x88C1, 0x88C2, 0x88B1, 0x8983, 0x8996, 0x8A3B,
- 0x8A60, 0x8A55, 0x8A5E, 0x8A3C, 0x8A41, 0x8A54, 0x8A5B, 0x8A50,
- 0x8A46, 0x8A34, 0x8A3A, 0x8A36, 0x8A56, 0x8C61, 0x8C82, 0x8CAF,
- 0x8CBC, 0x8CB3, 0x8CBD, 0x8CC1, 0x8CBB, 0x8CC0, 0x8CB4, 0x8CB7,
- 0x8CB6, 0x8CBF, 0x8CB8, 0x8D8A, 0x8D85, 0x8D81, 0x8DCE, 0x8DDD,
- 0x8DCB, 0x8DDA, 0x8DD1, 0x8DCC, 0x8DDB, 0x8DC6, 0x8EFB, 0x8EF8,
- 0x8EFC, 0x8F9C, 0x902E, 0x9035, 0x9031, 0x9038, 0x9032, 0x9036,
- 0x9102, 0x90F5, 0x9109, 0x90FE, 0x9163, 0x9165, 0x91CF, 0x9214,
- 0x9215, 0x9223, 0x9209, 0x921E, 0x920D, 0x9210, 0x9207, 0x9211,
- 0x9594, 0x958F, 0x958B, 0x9591, 0x9593, 0x9592, 0x958E, 0x968A,
- 0x968E, 0x968B, 0x967D, 0x9685, 0x9686, 0x968D, 0x9672, 0x9684,
- 0x96C1, 0x96C5, 0x96C4, 0x96C6, 0x96C7, 0x96EF, 0x96F2, 0x97CC,
- 0x9805, 0x9806, 0x9808, 0x98E7, 0x98EA, 0x98EF, 0x98E9, 0x98F2,
- 0x98ED, 0x99AE, 0x99AD, 0x9EC3, 0x9ECD, 0x9ED1, 0x4E82, 0x50AD,
- 0x50B5, 0x50B2, 0x50B3, 0x50C5, 0x50BE, 0x50AC, 0x50B7, 0x50BB,
- 0x50AF, 0x50C7, 0x527F, 0x5277, 0x527D, 0x52DF, 0x52E6, 0x52E4,
- 0x52E2, 0x52E3, 0x532F, 0x55DF, 0x55E8, 0x55D3, 0x55E6, 0x55CE,
- 0x55DC, 0x55C7, 0x55D1, 0x55E3, 0x55E4, 0x55EF, 0x55DA, 0x55E1,
- 0x55C5, 0x55C6, 0x55E5, 0x55C9, 0x5712, 0x5713, 0x585E, 0x5851,
- 0x5858, 0x5857, 0x585A, 0x5854, 0x586B, 0x584C, 0x586D, 0x584A,
- 0x5862, 0x5852, 0x584B, 0x5967, 0x5AC1, 0x5AC9, 0x5ACC, 0x5ABE,
- 0x5ABD, 0x5ABC, 0x5AB3, 0x5AC2, 0x5AB2, 0x5D69, 0x5D6F, 0x5E4C,
- 0x5E79, 0x5EC9, 0x5EC8, 0x5F12, 0x5F59, 0x5FAC, 0x5FAE, 0x611A,
- 0x610F, 0x6148, 0x611F, 0x60F3, 0x611B, 0x60F9, 0x6101, 0x6108,
- 0x614E, 0x614C, 0x6144, 0x614D, 0x613E, 0x6134, 0x6127, 0x610D,
- 0x6106, 0x6137, 0x6221, 0x6222, 0x6413, 0x643E, 0x641E, 0x642A,
- 0x642D, 0x643D, 0x642C, 0x640F, 0x641C, 0x6414, 0x640D, 0x6436,
- 0x6416, 0x6417, 0x6406, 0x656C, 0x659F, 0x65B0, 0x6697, 0x6689,
- 0x6687, 0x6688, 0x6696, 0x6684, 0x6698, 0x668D, 0x6703, 0x6994,
- 0x696D, 0x695A, 0x6977, 0x6960, 0x6954, 0x6975, 0x6930, 0x6982,
- 0x694A, 0x6968, 0x696B, 0x695E, 0x6953, 0x6979, 0x6986, 0x695D,
- 0x6963, 0x695B, 0x6B47, 0x6B72, 0x6BC0, 0x6BBF, 0x6BD3, 0x6BFD,
- 0x6EA2, 0x6EAF, 0x6ED3, 0x6EB6, 0x6EC2, 0x6E90, 0x6E9D, 0x6EC7,
- 0x6EC5, 0x6EA5, 0x6E98, 0x6EBC, 0x6EBA, 0x6EAB, 0x6ED1, 0x6E96,
- 0x6E9C, 0x6EC4, 0x6ED4, 0x6EAA, 0x6EA7, 0x6EB4, 0x714E, 0x7159,
- 0x7169, 0x7164, 0x7149, 0x7167, 0x715C, 0x716C, 0x7166, 0x714C,
- 0x7165, 0x715E, 0x7146, 0x7168, 0x7156, 0x723A, 0x7252, 0x7337,
- 0x7345, 0x733F, 0x733E, 0x746F, 0x745A, 0x7455, 0x745F, 0x745E,
- 0x7441, 0x743F, 0x7459, 0x745B, 0x745C, 0x7576, 0x7578, 0x7600,
- 0x75F0, 0x7601, 0x75F2, 0x75F1, 0x75FA, 0x75FF, 0x75F4, 0x75F3,
- 0x76DE, 0x76DF, 0x775B, 0x776B, 0x7766, 0x775E, 0x7763, 0x7779,
- 0x776A, 0x776C, 0x775C, 0x7765, 0x7768, 0x7762, 0x77EE, 0x788E,
- 0x78B0, 0x7897, 0x7898, 0x788C, 0x7889, 0x787C, 0x7891, 0x7893,
- 0x787F, 0x797A, 0x797F, 0x7981, 0x842C, 0x79BD, 0x7A1C, 0x7A1A,
- 0x7A20, 0x7A14, 0x7A1F, 0x7A1E, 0x7A9F, 0x7AA0, 0x7B77, 0x7BC0,
- 0x7B60, 0x7B6E, 0x7B67, 0x7CB1, 0x7CB3, 0x7CB5, 0x7D93, 0x7D79,
- 0x7D91, 0x7D81, 0x7D8F, 0x7D5B, 0x7F6E, 0x7F69, 0x7F6A, 0x7F72,
- 0x7FA9, 0x7FA8, 0x7FA4, 0x8056, 0x8058, 0x8086, 0x8084, 0x8171,
- 0x8170, 0x8178, 0x8165, 0x816E, 0x8173, 0x816B, 0x8179, 0x817A,
- 0x8166, 0x8205, 0x8247, 0x8482, 0x8477, 0x843D, 0x8431, 0x8475,
- 0x8466, 0x846B, 0x8449, 0x846C, 0x845B, 0x843C, 0x8435, 0x8461,
- 0x8463, 0x8469, 0x846D, 0x8446, 0x865E, 0x865C, 0x865F, 0x86F9,
- 0x8713, 0x8708, 0x8707, 0x8700, 0x86FE, 0x86FB, 0x8702, 0x8703,
- 0x8706, 0x870A, 0x8859, 0x88DF, 0x88D4, 0x88D9, 0x88DC, 0x88D8,
- 0x88DD, 0x88E1, 0x88CA, 0x88D5, 0x88D2, 0x899C, 0x89E3, 0x8A6B,
- 0x8A72, 0x8A73, 0x8A66, 0x8A69, 0x8A70, 0x8A87, 0x8A7C, 0x8A63,
- 0x8AA0, 0x8A71, 0x8A85, 0x8A6D, 0x8A62, 0x8A6E, 0x8A6C, 0x8A79,
- 0x8A7B, 0x8A3E, 0x8A68, 0x8C62, 0x8C8A, 0x8C89, 0x8CCA, 0x8CC7,
- 0x8CC8, 0x8CC4, 0x8CB2, 0x8CC3, 0x8CC2, 0x8CC5, 0x8DE1, 0x8DDF,
- 0x8DE8, 0x8DEF, 0x8DF3, 0x8DFA, 0x8DEA, 0x8DE4, 0x8DE6, 0x8EB2,
- 0x8F03, 0x8F09, 0x8EFE, 0x8F0A, 0x8F9F, 0x8FB2, 0x904B, 0x904A,
- 0x9053, 0x9042, 0x9054, 0x903C, 0x9055, 0x9050, 0x9047, 0x904F,
- 0x904E, 0x904D, 0x9051, 0x903E, 0x9041, 0x9112, 0x9117, 0x916C,
- 0x916A, 0x9169, 0x91C9, 0x9237, 0x9257, 0x9238, 0x923D, 0x9240,
- 0x923E, 0x925B, 0x924B, 0x9264, 0x9251, 0x9234, 0x9249, 0x924D,
- 0x9245, 0x9239, 0x923F, 0x925A, 0x9598, 0x9698, 0x9694, 0x9695,
- 0x96CD, 0x96CB, 0x96C9, 0x96CA, 0x96F7, 0x96FB, 0x96F9, 0x96F6,
- 0x9756, 0x9774, 0x9776, 0x9810, 0x9811, 0x9813, 0x980A, 0x9812,
- 0x980C, 0x98FC, 0x98F4, 0x98FD, 0x98FE, 0x99B3, 0x99B1, 0x99B4,
- 0x9AE1, 0x9CE9, 0x9E82, 0x9F0E, 0x9F13, 0x9F20, 0x50E7, 0x50EE,
- 0x50E5, 0x50D6, 0x50ED, 0x50DA, 0x50D5, 0x50CF, 0x50D1, 0x50F1,
- 0x50CE, 0x50E9, 0x5162, 0x51F3, 0x5283, 0x5282, 0x5331, 0x53AD,
- 0x55FE, 0x5600, 0x561B, 0x5617, 0x55FD, 0x5614, 0x5606, 0x5609,
- 0x560D, 0x560E, 0x55F7, 0x5616, 0x561F, 0x5608, 0x5610, 0x55F6,
- 0x5718, 0x5716, 0x5875, 0x587E, 0x5883, 0x5893, 0x588A, 0x5879,
- 0x5885, 0x587D, 0x58FD, 0x5925, 0x5922, 0x5924, 0x596A, 0x5969,
- 0x5AE1, 0x5AE6, 0x5AE9, 0x5AD7, 0x5AD6, 0x5AD8, 0x5AE3, 0x5B75,
- 0x5BDE, 0x5BE7, 0x5BE1, 0x5BE5, 0x5BE6, 0x5BE8, 0x5BE2, 0x5BE4,
- 0x5BDF, 0x5C0D, 0x5C62, 0x5D84, 0x5D87, 0x5E5B, 0x5E63, 0x5E55,
- 0x5E57, 0x5E54, 0x5ED3, 0x5ED6, 0x5F0A, 0x5F46, 0x5F70, 0x5FB9,
- 0x6147, 0x613F, 0x614B, 0x6177, 0x6162, 0x6163, 0x615F, 0x615A,
- 0x6158, 0x6175, 0x622A, 0x6487, 0x6458, 0x6454, 0x64A4, 0x6478,
- 0x645F, 0x647A, 0x6451, 0x6467, 0x6434, 0x646D, 0x647B, 0x6572,
- 0x65A1, 0x65D7, 0x65D6, 0x66A2, 0x66A8, 0x669D, 0x699C, 0x69A8,
- 0x6995, 0x69C1, 0x69AE, 0x69D3, 0x69CB, 0x699B, 0x69B7, 0x69BB,
- 0x69AB, 0x69B4, 0x69D0, 0x69CD, 0x69AD, 0x69CC, 0x69A6, 0x69C3,
- 0x69A3, 0x6B49, 0x6B4C, 0x6C33, 0x6F33, 0x6F14, 0x6EFE, 0x6F13,
- 0x6EF4, 0x6F29, 0x6F3E, 0x6F20, 0x6F2C, 0x6F0F, 0x6F02, 0x6F22,
- 0x6EFF, 0x6EEF, 0x6F06, 0x6F31, 0x6F38, 0x6F32, 0x6F23, 0x6F15,
- 0x6F2B, 0x6F2F, 0x6F88, 0x6F2A, 0x6EEC, 0x6F01, 0x6EF2, 0x6ECC,
- 0x6EF7, 0x7194, 0x7199, 0x717D, 0x718A, 0x7184, 0x7192, 0x723E,
- 0x7292, 0x7296, 0x7344, 0x7350, 0x7464, 0x7463, 0x746A, 0x7470,
- 0x746D, 0x7504, 0x7591, 0x7627, 0x760D, 0x760B, 0x7609, 0x7613,
- 0x76E1, 0x76E3, 0x7784, 0x777D, 0x777F, 0x7761, 0x78C1, 0x789F,
- 0x78A7, 0x78B3, 0x78A9, 0x78A3, 0x798E, 0x798F, 0x798D, 0x7A2E,
- 0x7A31, 0x7AAA, 0x7AA9, 0x7AED, 0x7AEF, 0x7BA1, 0x7B95, 0x7B8B,
- 0x7B75, 0x7B97, 0x7B9D, 0x7B94, 0x7B8F, 0x7BB8, 0x7B87, 0x7B84,
- 0x7CB9, 0x7CBD, 0x7CBE, 0x7DBB, 0x7DB0, 0x7D9C, 0x7DBD, 0x7DBE,
- 0x7DA0, 0x7DCA, 0x7DB4, 0x7DB2, 0x7DB1, 0x7DBA, 0x7DA2, 0x7DBF,
- 0x7DB5, 0x7DB8, 0x7DAD, 0x7DD2, 0x7DC7, 0x7DAC, 0x7F70, 0x7FE0,
- 0x7FE1, 0x7FDF, 0x805E, 0x805A, 0x8087, 0x8150, 0x8180, 0x818F,
- 0x8188, 0x818A, 0x817F, 0x8182, 0x81E7, 0x81FA, 0x8207, 0x8214,
- 0x821E, 0x824B, 0x84C9, 0x84BF, 0x84C6, 0x84C4, 0x8499, 0x849E,
- 0x84B2, 0x849C, 0x84CB, 0x84B8, 0x84C0, 0x84D3, 0x8490, 0x84BC,
- 0x84D1, 0x84CA, 0x873F, 0x871C, 0x873B, 0x8722, 0x8725, 0x8734,
- 0x8718, 0x8755, 0x8737, 0x8729, 0x88F3, 0x8902, 0x88F4, 0x88F9,
- 0x88F8, 0x88FD, 0x88E8, 0x891A, 0x88EF, 0x8AA6, 0x8A8C, 0x8A9E,
- 0x8AA3, 0x8A8D, 0x8AA1, 0x8A93, 0x8AA4, 0x8AAA, 0x8AA5, 0x8AA8,
- 0x8A98, 0x8A91, 0x8A9A, 0x8AA7, 0x8C6A, 0x8C8D, 0x8C8C, 0x8CD3,
- 0x8CD1, 0x8CD2, 0x8D6B, 0x8D99, 0x8D95, 0x8DFC, 0x8F14, 0x8F12,
- 0x8F15, 0x8F13, 0x8FA3, 0x9060, 0x9058, 0x905C, 0x9063, 0x9059,
- 0x905E, 0x9062, 0x905D, 0x905B, 0x9119, 0x9118, 0x911E, 0x9175,
- 0x9178, 0x9177, 0x9174, 0x9278, 0x92AC, 0x9280, 0x9285, 0x9298,
- 0x9296, 0x927B, 0x9293, 0x929C, 0x92A8, 0x927C, 0x9291, 0x95A1,
- 0x95A8, 0x95A9, 0x95A3, 0x95A5, 0x95A4, 0x9699, 0x969C, 0x969B,
- 0x96CC, 0x96D2, 0x9700, 0x977C, 0x9785, 0x97F6, 0x9817, 0x9818,
- 0x98AF, 0x98B1, 0x9903, 0x9905, 0x990C, 0x9909, 0x99C1, 0x9AAF,
- 0x9AB0, 0x9AE6, 0x9B41, 0x9B42, 0x9CF4, 0x9CF6, 0x9CF3, 0x9EBC,
- 0x9F3B, 0x9F4A, 0x5104, 0x5100, 0x50FB, 0x50F5, 0x50F9, 0x5102,
- 0x5108, 0x5109, 0x5105, 0x51DC, 0x5287, 0x5288, 0x5289, 0x528D,
- 0x528A, 0x52F0, 0x53B2, 0x562E, 0x563B, 0x5639, 0x5632, 0x563F,
- 0x5634, 0x5629, 0x5653, 0x564E, 0x5657, 0x5674, 0x5636, 0x562F,
- 0x5630, 0x5880, 0x589F, 0x589E, 0x58B3, 0x589C, 0x58AE, 0x58A9,
- 0x58A6, 0x596D, 0x5B09, 0x5AFB, 0x5B0B, 0x5AF5, 0x5B0C, 0x5B08,
- 0x5BEE, 0x5BEC, 0x5BE9, 0x5BEB, 0x5C64, 0x5C65, 0x5D9D, 0x5D94,
- 0x5E62, 0x5E5F, 0x5E61, 0x5EE2, 0x5EDA, 0x5EDF, 0x5EDD, 0x5EE3,
- 0x5EE0, 0x5F48, 0x5F71, 0x5FB7, 0x5FB5, 0x6176, 0x6167, 0x616E,
- 0x615D, 0x6155, 0x6182, 0x617C, 0x6170, 0x616B, 0x617E, 0x61A7,
- 0x6190, 0x61AB, 0x618E, 0x61AC, 0x619A, 0x61A4, 0x6194, 0x61AE,
- 0x622E, 0x6469, 0x646F, 0x6479, 0x649E, 0x64B2, 0x6488, 0x6490,
- 0x64B0, 0x64A5, 0x6493, 0x6495, 0x64A9, 0x6492, 0x64AE, 0x64AD,
- 0x64AB, 0x649A, 0x64AC, 0x6499, 0x64A2, 0x64B3, 0x6575, 0x6577,
- 0x6578, 0x66AE, 0x66AB, 0x66B4, 0x66B1, 0x6A23, 0x6A1F, 0x69E8,
- 0x6A01, 0x6A1E, 0x6A19, 0x69FD, 0x6A21, 0x6A13, 0x6A0A, 0x69F3,
- 0x6A02, 0x6A05, 0x69ED, 0x6A11, 0x6B50, 0x6B4E, 0x6BA4, 0x6BC5,
- 0x6BC6, 0x6F3F, 0x6F7C, 0x6F84, 0x6F51, 0x6F66, 0x6F54, 0x6F86,
- 0x6F6D, 0x6F5B, 0x6F78, 0x6F6E, 0x6F8E, 0x6F7A, 0x6F70, 0x6F64,
- 0x6F97, 0x6F58, 0x6ED5, 0x6F6F, 0x6F60, 0x6F5F, 0x719F, 0x71AC,
- 0x71B1, 0x71A8, 0x7256, 0x729B, 0x734E, 0x7357, 0x7469, 0x748B,
- 0x7483, 0x747E, 0x7480, 0x757F, 0x7620, 0x7629, 0x761F, 0x7624,
- 0x7626, 0x7621, 0x7622, 0x769A, 0x76BA, 0x76E4, 0x778E, 0x7787,
- 0x778C, 0x7791, 0x778B, 0x78CB, 0x78C5, 0x78BA, 0x78CA, 0x78BE,
- 0x78D5, 0x78BC, 0x78D0, 0x7A3F, 0x7A3C, 0x7A40, 0x7A3D, 0x7A37,
- 0x7A3B, 0x7AAF, 0x7AAE, 0x7BAD, 0x7BB1, 0x7BC4, 0x7BB4, 0x7BC6,
- 0x7BC7, 0x7BC1, 0x7BA0, 0x7BCC, 0x7CCA, 0x7DE0, 0x7DF4, 0x7DEF,
- 0x7DFB, 0x7DD8, 0x7DEC, 0x7DDD, 0x7DE8, 0x7DE3, 0x7DDA, 0x7DDE,
- 0x7DE9, 0x7D9E, 0x7DD9, 0x7DF2, 0x7DF9, 0x7F75, 0x7F77, 0x7FAF,
- 0x7FE9, 0x8026, 0x819B, 0x819C, 0x819D, 0x81A0, 0x819A, 0x8198,
- 0x8517, 0x853D, 0x851A, 0x84EE, 0x852C, 0x852D, 0x8513, 0x8511,
- 0x8523, 0x8521, 0x8514, 0x84EC, 0x8525, 0x84FF, 0x8506, 0x8782,
- 0x8774, 0x8776, 0x8760, 0x8766, 0x8778, 0x8768, 0x8759, 0x8757,
- 0x874C, 0x8753, 0x885B, 0x885D, 0x8910, 0x8907, 0x8912, 0x8913,
- 0x8915, 0x890A, 0x8ABC, 0x8AD2, 0x8AC7, 0x8AC4, 0x8A95, 0x8ACB,
- 0x8AF8, 0x8AB2, 0x8AC9, 0x8AC2, 0x8ABF, 0x8AB0, 0x8AD6, 0x8ACD,
- 0x8AB6, 0x8AB9, 0x8ADB, 0x8C4C, 0x8C4E, 0x8C6C, 0x8CE0, 0x8CDE,
- 0x8CE6, 0x8CE4, 0x8CEC, 0x8CED, 0x8CE2, 0x8CE3, 0x8CDC, 0x8CEA,
- 0x8CE1, 0x8D6D, 0x8D9F, 0x8DA3, 0x8E2B, 0x8E10, 0x8E1D, 0x8E22,
- 0x8E0F, 0x8E29, 0x8E1F, 0x8E21, 0x8E1E, 0x8EBA, 0x8F1D, 0x8F1B,
- 0x8F1F, 0x8F29, 0x8F26, 0x8F2A, 0x8F1C, 0x8F1E, 0x8F25, 0x9069,
- 0x906E, 0x9068, 0x906D, 0x9077, 0x9130, 0x912D, 0x9127, 0x9131,
- 0x9187, 0x9189, 0x918B, 0x9183, 0x92C5, 0x92BB, 0x92B7, 0x92EA,
- 0x92E4, 0x92C1, 0x92B3, 0x92BC, 0x92D2, 0x92C7, 0x92F0, 0x92B2,
- 0x95AD, 0x95B1, 0x9704, 0x9706, 0x9707, 0x9709, 0x9760, 0x978D,
- 0x978B, 0x978F, 0x9821, 0x982B, 0x981C, 0x98B3, 0x990A, 0x9913,
- 0x9912, 0x9918, 0x99DD, 0x99D0, 0x99DF, 0x99DB, 0x99D1, 0x99D5,
- 0x99D2, 0x99D9, 0x9AB7, 0x9AEE, 0x9AEF, 0x9B27, 0x9B45, 0x9B44,
- 0x9B77, 0x9B6F, 0x9D06, 0x9D09, 0x9D03, 0x9EA9, 0x9EBE, 0x9ECE,
- 0x58A8, 0x9F52, 0x5112, 0x5118, 0x5114, 0x5110, 0x5115, 0x5180,
- 0x51AA, 0x51DD, 0x5291, 0x5293, 0x52F3, 0x5659, 0x566B, 0x5679,
- 0x5669, 0x5664, 0x5678, 0x566A, 0x5668, 0x5665, 0x5671, 0x566F,
- 0x566C, 0x5662, 0x5676, 0x58C1, 0x58BE, 0x58C7, 0x58C5, 0x596E,
- 0x5B1D, 0x5B34, 0x5B78, 0x5BF0, 0x5C0E, 0x5F4A, 0x61B2, 0x6191,
- 0x61A9, 0x618A, 0x61CD, 0x61B6, 0x61BE, 0x61CA, 0x61C8, 0x6230,
- 0x64C5, 0x64C1, 0x64CB, 0x64BB, 0x64BC, 0x64DA, 0x64C4, 0x64C7,
- 0x64C2, 0x64CD, 0x64BF, 0x64D2, 0x64D4, 0x64BE, 0x6574, 0x66C6,
- 0x66C9, 0x66B9, 0x66C4, 0x66C7, 0x66B8, 0x6A3D, 0x6A38, 0x6A3A,
- 0x6A59, 0x6A6B, 0x6A58, 0x6A39, 0x6A44, 0x6A62, 0x6A61, 0x6A4B,
- 0x6A47, 0x6A35, 0x6A5F, 0x6A48, 0x6B59, 0x6B77, 0x6C05, 0x6FC2,
- 0x6FB1, 0x6FA1, 0x6FC3, 0x6FA4, 0x6FC1, 0x6FA7, 0x6FB3, 0x6FC0,
- 0x6FB9, 0x6FB6, 0x6FA6, 0x6FA0, 0x6FB4, 0x71BE, 0x71C9, 0x71D0,
- 0x71D2, 0x71C8, 0x71D5, 0x71B9, 0x71CE, 0x71D9, 0x71DC, 0x71C3,
- 0x71C4, 0x7368, 0x749C, 0x74A3, 0x7498, 0x749F, 0x749E, 0x74E2,
- 0x750C, 0x750D, 0x7634, 0x7638, 0x763A, 0x76E7, 0x76E5, 0x77A0,
- 0x779E, 0x779F, 0x77A5, 0x78E8, 0x78DA, 0x78EC, 0x78E7, 0x79A6,
- 0x7A4D, 0x7A4E, 0x7A46, 0x7A4C, 0x7A4B, 0x7ABA, 0x7BD9, 0x7C11,
- 0x7BC9, 0x7BE4, 0x7BDB, 0x7BE1, 0x7BE9, 0x7BE6, 0x7CD5, 0x7CD6,
- 0x7E0A, 0x7E11, 0x7E08, 0x7E1B, 0x7E23, 0x7E1E, 0x7E1D, 0x7E09,
- 0x7E10, 0x7F79, 0x7FB2, 0x7FF0, 0x7FF1, 0x7FEE, 0x8028, 0x81B3,
- 0x81A9, 0x81A8, 0x81FB, 0x8208, 0x8258, 0x8259, 0x854A, 0x8559,
- 0x8548, 0x8568, 0x8569, 0x8543, 0x8549, 0x856D, 0x856A, 0x855E,
- 0x8783, 0x879F, 0x879E, 0x87A2, 0x878D, 0x8861, 0x892A, 0x8932,
- 0x8925, 0x892B, 0x8921, 0x89AA, 0x89A6, 0x8AE6, 0x8AFA, 0x8AEB,
- 0x8AF1, 0x8B00, 0x8ADC, 0x8AE7, 0x8AEE, 0x8AFE, 0x8B01, 0x8B02,
- 0x8AF7, 0x8AED, 0x8AF3, 0x8AF6, 0x8AFC, 0x8C6B, 0x8C6D, 0x8C93,
- 0x8CF4, 0x8E44, 0x8E31, 0x8E34, 0x8E42, 0x8E39, 0x8E35, 0x8F3B,
- 0x8F2F, 0x8F38, 0x8F33, 0x8FA8, 0x8FA6, 0x9075, 0x9074, 0x9078,
- 0x9072, 0x907C, 0x907A, 0x9134, 0x9192, 0x9320, 0x9336, 0x92F8,
- 0x9333, 0x932F, 0x9322, 0x92FC, 0x932B, 0x9304, 0x931A, 0x9310,
- 0x9326, 0x9321, 0x9315, 0x932E, 0x9319, 0x95BB, 0x96A7, 0x96A8,
- 0x96AA, 0x96D5, 0x970E, 0x9711, 0x9716, 0x970D, 0x9713, 0x970F,
- 0x975B, 0x975C, 0x9766, 0x9798, 0x9830, 0x9838, 0x983B, 0x9837,
- 0x982D, 0x9839, 0x9824, 0x9910, 0x9928, 0x991E, 0x991B, 0x9921,
- 0x991A, 0x99ED, 0x99E2, 0x99F1, 0x9AB8, 0x9ABC, 0x9AFB, 0x9AED,
- 0x9B28, 0x9B91, 0x9D15, 0x9D23, 0x9D26, 0x9D28, 0x9D12, 0x9D1B,
- 0x9ED8, 0x9ED4, 0x9F8D, 0x9F9C, 0x512A, 0x511F, 0x5121, 0x5132,
- 0x52F5, 0x568E, 0x5680, 0x5690, 0x5685, 0x5687, 0x568F, 0x58D5,
- 0x58D3, 0x58D1, 0x58CE, 0x5B30, 0x5B2A, 0x5B24, 0x5B7A, 0x5C37,
- 0x5C68, 0x5DBC, 0x5DBA, 0x5DBD, 0x5DB8, 0x5E6B, 0x5F4C, 0x5FBD,
- 0x61C9, 0x61C2, 0x61C7, 0x61E6, 0x61CB, 0x6232, 0x6234, 0x64CE,
- 0x64CA, 0x64D8, 0x64E0, 0x64F0, 0x64E6, 0x64EC, 0x64F1, 0x64E2,
- 0x64ED, 0x6582, 0x6583, 0x66D9, 0x66D6, 0x6A80, 0x6A94, 0x6A84,
- 0x6AA2, 0x6A9C, 0x6ADB, 0x6AA3, 0x6A7E, 0x6A97, 0x6A90, 0x6AA0,
- 0x6B5C, 0x6BAE, 0x6BDA, 0x6C08, 0x6FD8, 0x6FF1, 0x6FDF, 0x6FE0,
- 0x6FDB, 0x6FE4, 0x6FEB, 0x6FEF, 0x6F80, 0x6FEC, 0x6FE1, 0x6FE9,
- 0x6FD5, 0x6FEE, 0x6FF0, 0x71E7, 0x71DF, 0x71EE, 0x71E6, 0x71E5,
- 0x71ED, 0x71EC, 0x71F4, 0x71E0, 0x7235, 0x7246, 0x7370, 0x7372,
- 0x74A9, 0x74B0, 0x74A6, 0x74A8, 0x7646, 0x7642, 0x764C, 0x76EA,
- 0x77B3, 0x77AA, 0x77B0, 0x77AC, 0x77A7, 0x77AD, 0x77EF, 0x78F7,
- 0x78FA, 0x78F4, 0x78EF, 0x7901, 0x79A7, 0x79AA, 0x7A57, 0x7ABF,
- 0x7C07, 0x7C0D, 0x7BFE, 0x7BF7, 0x7C0C, 0x7BE0, 0x7CE0, 0x7CDC,
- 0x7CDE, 0x7CE2, 0x7CDF, 0x7CD9, 0x7CDD, 0x7E2E, 0x7E3E, 0x7E46,
- 0x7E37, 0x7E32, 0x7E43, 0x7E2B, 0x7E3D, 0x7E31, 0x7E45, 0x7E41,
- 0x7E34, 0x7E39, 0x7E48, 0x7E35, 0x7E3F, 0x7E2F, 0x7F44, 0x7FF3,
- 0x7FFC, 0x8071, 0x8072, 0x8070, 0x806F, 0x8073, 0x81C6, 0x81C3,
- 0x81BA, 0x81C2, 0x81C0, 0x81BF, 0x81BD, 0x81C9, 0x81BE, 0x81E8,
- 0x8209, 0x8271, 0x85AA, 0x8584, 0x857E, 0x859C, 0x8591, 0x8594,
- 0x85AF, 0x859B, 0x8587, 0x85A8, 0x858A, 0x85A6, 0x8667, 0x87C0,
- 0x87D1, 0x87B3, 0x87D2, 0x87C6, 0x87AB, 0x87BB, 0x87BA, 0x87C8,
- 0x87CB, 0x893B, 0x8936, 0x8944, 0x8938, 0x893D, 0x89AC, 0x8B0E,
- 0x8B17, 0x8B19, 0x8B1B, 0x8B0A, 0x8B20, 0x8B1D, 0x8B04, 0x8B10,
- 0x8C41, 0x8C3F, 0x8C73, 0x8CFA, 0x8CFD, 0x8CFC, 0x8CF8, 0x8CFB,
- 0x8DA8, 0x8E49, 0x8E4B, 0x8E48, 0x8E4A, 0x8F44, 0x8F3E, 0x8F42,
- 0x8F45, 0x8F3F, 0x907F, 0x907D, 0x9084, 0x9081, 0x9082, 0x9080,
- 0x9139, 0x91A3, 0x919E, 0x919C, 0x934D, 0x9382, 0x9328, 0x9375,
- 0x934A, 0x9365, 0x934B, 0x9318, 0x937E, 0x936C, 0x935B, 0x9370,
- 0x935A, 0x9354, 0x95CA, 0x95CB, 0x95CC, 0x95C8, 0x95C6, 0x96B1,
- 0x96B8, 0x96D6, 0x971C, 0x971E, 0x97A0, 0x97D3, 0x9846, 0x98B6,
- 0x9935, 0x9A01, 0x99FF, 0x9BAE, 0x9BAB, 0x9BAA, 0x9BAD, 0x9D3B,
- 0x9D3F, 0x9E8B, 0x9ECF, 0x9EDE, 0x9EDC, 0x9EDD, 0x9EDB, 0x9F3E,
- 0x9F4B, 0x53E2, 0x5695, 0x56AE, 0x58D9, 0x58D8, 0x5B38, 0x5F5D,
- 0x61E3, 0x6233, 0x64F4, 0x64F2, 0x64FE, 0x6506, 0x64FA, 0x64FB,
- 0x64F7, 0x65B7, 0x66DC, 0x6726, 0x6AB3, 0x6AAC, 0x6AC3, 0x6ABB,
- 0x6AB8, 0x6AC2, 0x6AAE, 0x6AAF, 0x6B5F, 0x6B78, 0x6BAF, 0x7009,
- 0x700B, 0x6FFE, 0x7006, 0x6FFA, 0x7011, 0x700F, 0x71FB, 0x71FC,
- 0x71FE, 0x71F8, 0x7377, 0x7375, 0x74A7, 0x74BF, 0x7515, 0x7656,
- 0x7658, 0x7652, 0x77BD, 0x77BF, 0x77BB, 0x77BC, 0x790E, 0x79AE,
- 0x7A61, 0x7A62, 0x7A60, 0x7AC4, 0x7AC5, 0x7C2B, 0x7C27, 0x7C2A,
- 0x7C1E, 0x7C23, 0x7C21, 0x7CE7, 0x7E54, 0x7E55, 0x7E5E, 0x7E5A,
- 0x7E61, 0x7E52, 0x7E59, 0x7F48, 0x7FF9, 0x7FFB, 0x8077, 0x8076,
- 0x81CD, 0x81CF, 0x820A, 0x85CF, 0x85A9, 0x85CD, 0x85D0, 0x85C9,
- 0x85B0, 0x85BA, 0x85B9, 0x87EF, 0x87EC, 0x87F2, 0x87E0, 0x8986,
- 0x89B2, 0x89F4, 0x8B28, 0x8B39, 0x8B2C, 0x8B2B, 0x8C50, 0x8D05,
- 0x8E59, 0x8E63, 0x8E66, 0x8E64, 0x8E5F, 0x8E55, 0x8EC0, 0x8F49,
- 0x8F4D, 0x9087, 0x9083, 0x9088, 0x91AB, 0x91AC, 0x91D0, 0x9394,
- 0x938A, 0x9396, 0x93A2, 0x93B3, 0x93AE, 0x93AC, 0x93B0, 0x9398,
- 0x939A, 0x9397, 0x95D4, 0x95D6, 0x95D0, 0x95D5, 0x96E2, 0x96DC,
- 0x96D9, 0x96DB, 0x96DE, 0x9724, 0x97A3, 0x97A6, 0x97AD, 0x97F9,
- 0x984D, 0x984F, 0x984C, 0x984E, 0x9853, 0x98BA, 0x993E, 0x993F,
- 0x993D, 0x992E, 0x99A5, 0x9A0E, 0x9AC1, 0x9B03, 0x9B06, 0x9B4F,
- 0x9B4E, 0x9B4D, 0x9BCA, 0x9BC9, 0x9BFD, 0x9BC8, 0x9BC0, 0x9D51,
- 0x9D5D, 0x9D60, 0x9EE0, 0x9F15, 0x9F2C, 0x5133, 0x56A5, 0x56A8,
- 0x58DE, 0x58DF, 0x58E2, 0x5BF5, 0x9F90, 0x5EEC, 0x61F2, 0x61F7,
- 0x61F6, 0x61F5, 0x6500, 0x650F, 0x66E0, 0x66DD, 0x6AE5, 0x6ADD,
- 0x6ADA, 0x6AD3, 0x701B, 0x701F, 0x7028, 0x701A, 0x701D, 0x7015,
- 0x7018, 0x7206, 0x720D, 0x7258, 0x72A2, 0x7378, 0x737A, 0x74BD,
- 0x74CA, 0x74E3, 0x7587, 0x7586, 0x765F, 0x7661, 0x77C7, 0x7919,
- 0x79B1, 0x7A6B, 0x7A69, 0x7C3E, 0x7C3F, 0x7C38, 0x7C3D, 0x7C37,
- 0x7C40, 0x7E6B, 0x7E6D, 0x7E79, 0x7E69, 0x7E6A, 0x7E73, 0x7F85,
- 0x7FB6, 0x7FB9, 0x7FB8, 0x81D8, 0x85E9, 0x85DD, 0x85EA, 0x85D5,
- 0x85E4, 0x85E5, 0x85F7, 0x87FB, 0x8805, 0x880D, 0x87F9, 0x87FE,
- 0x8960, 0x895F, 0x8956, 0x895E, 0x8B41, 0x8B5C, 0x8B58, 0x8B49,
- 0x8B5A, 0x8B4E, 0x8B4F, 0x8B46, 0x8B59, 0x8D08, 0x8D0A, 0x8E7C,
- 0x8E72, 0x8E87, 0x8E76, 0x8E6C, 0x8E7A, 0x8E74, 0x8F54, 0x8F4E,
- 0x8FAD, 0x908A, 0x908B, 0x91B1, 0x91AE, 0x93E1, 0x93D1, 0x93DF,
- 0x93C3, 0x93C8, 0x93DC, 0x93DD, 0x93D6, 0x93E2, 0x93CD, 0x93D8,
- 0x93E4, 0x93D7, 0x93E8, 0x95DC, 0x96B4, 0x96E3, 0x972A, 0x9727,
- 0x9761, 0x97DC, 0x97FB, 0x985E, 0x9858, 0x985B, 0x98BC, 0x9945,
- 0x9949, 0x9A16, 0x9A19, 0x9B0D, 0x9BE8, 0x9BE7, 0x9BD6, 0x9BDB,
- 0x9D89, 0x9D61, 0x9D72, 0x9D6A, 0x9D6C, 0x9E92, 0x9E97, 0x9E93,
- 0x9EB4, 0x52F8, 0x56B7, 0x56B6, 0x56B4, 0x56BC, 0x58E4, 0x5B40,
- 0x5B43, 0x5B7D, 0x5BF6, 0x5DC9, 0x61F8, 0x61FA, 0x6518, 0x6514,
- 0x6519, 0x66E6, 0x6727, 0x6AEC, 0x703E, 0x7030, 0x7032, 0x7210,
- 0x737B, 0x74CF, 0x7662, 0x7665, 0x7926, 0x792A, 0x792C, 0x792B,
- 0x7AC7, 0x7AF6, 0x7C4C, 0x7C43, 0x7C4D, 0x7CEF, 0x7CF0, 0x8FAE,
- 0x7E7D, 0x7E7C, 0x7E82, 0x7F4C, 0x8000, 0x81DA, 0x8266, 0x85FB,
- 0x85F9, 0x8611, 0x85FA, 0x8606, 0x860B, 0x8607, 0x860A, 0x8814,
- 0x8815, 0x8964, 0x89BA, 0x89F8, 0x8B70, 0x8B6C, 0x8B66, 0x8B6F,
- 0x8B5F, 0x8B6B, 0x8D0F, 0x8D0D, 0x8E89, 0x8E81, 0x8E85, 0x8E82,
- 0x91B4, 0x91CB, 0x9418, 0x9403, 0x93FD, 0x95E1, 0x9730, 0x98C4,
- 0x9952, 0x9951, 0x99A8, 0x9A2B, 0x9A30, 0x9A37, 0x9A35, 0x9C13,
- 0x9C0D, 0x9E79, 0x9EB5, 0x9EE8, 0x9F2F, 0x9F5F, 0x9F63, 0x9F61,
- 0x5137, 0x5138, 0x56C1, 0x56C0, 0x56C2, 0x5914, 0x5C6C, 0x5DCD,
- 0x61FC, 0x61FE, 0x651D, 0x651C, 0x6595, 0x66E9, 0x6AFB, 0x6B04,
- 0x6AFA, 0x6BB2, 0x704C, 0x721B, 0x72A7, 0x74D6, 0x74D4, 0x7669,
- 0x77D3, 0x7C50, 0x7E8F, 0x7E8C, 0x7FBC, 0x8617, 0x862D, 0x861A,
- 0x8823, 0x8822, 0x8821, 0x881F, 0x896A, 0x896C, 0x89BD, 0x8B74,
- 0x8B77, 0x8B7D, 0x8D13, 0x8E8A, 0x8E8D, 0x8E8B, 0x8F5F, 0x8FAF,
- 0x91BA, 0x942E, 0x9433, 0x9435, 0x943A, 0x9438, 0x9432, 0x942B,
- 0x95E2, 0x9738, 0x9739, 0x9732, 0x97FF, 0x9867, 0x9865, 0x9957,
- 0x9A45, 0x9A43, 0x9A40, 0x9A3E, 0x9ACF, 0x9B54, 0x9B51, 0x9C2D,
- 0x9C25, 0x9DAF, 0x9DB4, 0x9DC2, 0x9DB8, 0x9E9D, 0x9EEF, 0x9F19,
- 0x9F5C, 0x9F66, 0x9F67, 0x513C, 0x513B, 0x56C8, 0x56CA, 0x56C9,
- 0x5B7F, 0x5DD4, 0x5DD2, 0x5F4E, 0x61FF, 0x6524, 0x6B0A, 0x6B61,
- 0x7051, 0x7058, 0x7380, 0x74E4, 0x758A, 0x766E, 0x766C, 0x79B3,
- 0x7C60, 0x7C5F, 0x807E, 0x807D, 0x81DF, 0x8972, 0x896F, 0x89FC,
- 0x8B80, 0x8D16, 0x8D17, 0x8E91, 0x8E93, 0x8F61, 0x9148, 0x9444,
- 0x9451, 0x9452, 0x973D, 0x973E, 0x97C3, 0x97C1, 0x986B, 0x9955,
- 0x9A55, 0x9A4D, 0x9AD2, 0x9B1A, 0x9C49, 0x9C31, 0x9C3E, 0x9C3B,
- 0x9DD3, 0x9DD7, 0x9F34, 0x9F6C, 0x9F6A, 0x9F94, 0x56CC, 0x5DD6,
- 0x6200, 0x6523, 0x652B, 0x652A, 0x66EC, 0x6B10, 0x74DA, 0x7ACA,
- 0x7C64, 0x7C63, 0x7C65, 0x7E93, 0x7E96, 0x7E94, 0x81E2, 0x8638,
- 0x863F, 0x8831, 0x8B8A, 0x9090, 0x908F, 0x9463, 0x9460, 0x9464,
- 0x9768, 0x986F, 0x995C, 0x9A5A, 0x9A5B, 0x9A57, 0x9AD3, 0x9AD4,
- 0x9AD1, 0x9C54, 0x9C57, 0x9C56, 0x9DE5, 0x9E9F, 0x9EF4, 0x56D1,
- 0x58E9, 0x652C, 0x705E, 0x7671, 0x7672, 0x77D7, 0x7F50, 0x7F88,
- 0x8836, 0x8839, 0x8862, 0x8B93, 0x8B92, 0x8B96, 0x8277, 0x8D1B,
- 0x91C0, 0x946A, 0x9742, 0x9748, 0x9744, 0x97C6, 0x9870, 0x9A5F,
- 0x9B22, 0x9B58, 0x9C5F, 0x9DF9, 0x9DFA, 0x9E7C, 0x9E7D, 0x9F07,
- 0x9F77, 0x9F72, 0x5EF3, 0x6B16, 0x7063, 0x7C6C, 0x7C6E, 0x883B,
- 0x89C0, 0x8EA1, 0x91C1, 0x9472, 0x9470, 0x9871, 0x995E, 0x9AD6,
- 0x9B23, 0x9ECC, 0x7064, 0x77DA, 0x8B9A, 0x9477, 0x97C9, 0x9A62,
- 0x9A65, 0x7E9C, 0x8B9C, 0x8EAA, 0x91C5, 0x947D, 0x947E, 0x947C,
- 0x9C77, 0x9C78, 0x9EF7, 0x8C54, 0x947F, 0x9E1A, 0x7228, 0x9A6A,
- 0x9B31, 0x9E1B, 0x9E1E, 0x7C72, 0x4E42, 0x4E5C, 0x51F5, 0x531A,
- 0x5382, 0x4E07, 0x4E0C, 0x4E47, 0x4E8D, 0x56D7, 0x5C6E, 0x5F73,
- 0x4E0F, 0x5187, 0x4E0E, 0x4E2E, 0x4E93, 0x4EC2, 0x4EC9, 0x4EC8,
- 0x5198, 0x52FC, 0x536C, 0x53B9, 0x5720, 0x5903, 0x592C, 0x5C10,
- 0x5DFF, 0x65E1, 0x6BB3, 0x6BCC, 0x6C14, 0x723F, 0x4E31, 0x4E3C,
- 0x4EE8, 0x4EDC, 0x4EE9, 0x4EE1, 0x4EDD, 0x4EDA, 0x520C, 0x5209,
- 0x531C, 0x534C, 0x5722, 0x5723, 0x5917, 0x592F, 0x5B81, 0x5B84,
- 0x5C12, 0x5C3B, 0x5C74, 0x5C73, 0x5E04, 0x5E80, 0x5E82, 0x5FC9,
- 0x6209, 0x6250, 0x6C15, 0x6C36, 0x6C43, 0x6C3F, 0x6C3B, 0x72AE,
- 0x72B0, 0x738A, 0x79B8, 0x808A, 0x961E, 0x4F0E, 0x4F18, 0x4F2C,
- 0x4EF5, 0x4F14, 0x4EF1, 0x4F00, 0x4EF7, 0x4F08, 0x4F1D, 0x4F02,
- 0x4F05, 0x4F22, 0x4F13, 0x4F04, 0x4EF4, 0x4F12, 0x51B1, 0x5213,
- 0x5210, 0x52A6, 0x5322, 0x531F, 0x534D, 0x538A, 0x5407, 0x56E1,
- 0x56DF, 0x572E, 0x572A, 0x5734, 0x593C, 0x5980, 0x597C, 0x5985,
- 0x597B, 0x597E, 0x5977, 0x597F, 0x5B56, 0x5C15, 0x5C25, 0x5C7C,
- 0x5C7A, 0x5C7B, 0x5C7E, 0x5DDF, 0x5E75, 0x5E84, 0x5F02, 0x5F1A,
- 0x5F74, 0x5FD5, 0x5FD4, 0x5FCF, 0x625C, 0x625E, 0x6264, 0x6261,
- 0x6266, 0x6262, 0x6259, 0x6260, 0x625A, 0x6265, 0x6537, 0x65EF,
- 0x65EE, 0x673E, 0x6739, 0x6738, 0x673B, 0x673A, 0x673F, 0x673C,
- 0x6733, 0x6C18, 0x6C46, 0x6C52, 0x6C5C, 0x6C4F, 0x6C4A, 0x6C54,
- 0x6C4B, 0x6C4C, 0x7071, 0x725E, 0x72B4, 0x72B5, 0x738E, 0x752A,
- 0x767F, 0x7A75, 0x7F51, 0x8278, 0x827C, 0x8280, 0x827D, 0x827F,
- 0x864D, 0x897E, 0x9099, 0x9097, 0x9098, 0x909B, 0x9094, 0x9622,
- 0x9624, 0x9620, 0x9623, 0x4F56, 0x4F3B, 0x4F62, 0x4F49, 0x4F53,
- 0x4F64, 0x4F3E, 0x4F67, 0x4F52, 0x4F5F, 0x4F41, 0x4F58, 0x4F2D,
- 0x4F33, 0x4F3F, 0x4F61, 0x518F, 0x51B9, 0x521C, 0x521E, 0x5221,
- 0x52AD, 0x52AE, 0x5309, 0x5363, 0x5372, 0x538E, 0x538F, 0x5430,
- 0x5437, 0x542A, 0x5454, 0x5445, 0x5419, 0x541C, 0x5425, 0x5418,
- 0x543D, 0x544F, 0x5441, 0x5428, 0x5424, 0x5447, 0x56EE, 0x56E7,
- 0x56E5, 0x5741, 0x5745, 0x574C, 0x5749, 0x574B, 0x5752, 0x5906,
- 0x5940, 0x59A6, 0x5998, 0x59A0, 0x5997, 0x598E, 0x59A2, 0x5990,
- 0x598F, 0x59A7, 0x59A1, 0x5B8E, 0x5B92, 0x5C28, 0x5C2A, 0x5C8D,
- 0x5C8F, 0x5C88, 0x5C8B, 0x5C89, 0x5C92, 0x5C8A, 0x5C86, 0x5C93,
- 0x5C95, 0x5DE0, 0x5E0A, 0x5E0E, 0x5E8B, 0x5E89, 0x5E8C, 0x5E88,
- 0x5E8D, 0x5F05, 0x5F1D, 0x5F78, 0x5F76, 0x5FD2, 0x5FD1, 0x5FD0,
- 0x5FED, 0x5FE8, 0x5FEE, 0x5FF3, 0x5FE1, 0x5FE4, 0x5FE3, 0x5FFA,
- 0x5FEF, 0x5FF7, 0x5FFB, 0x6000, 0x5FF4, 0x623A, 0x6283, 0x628C,
- 0x628E, 0x628F, 0x6294, 0x6287, 0x6271, 0x627B, 0x627A, 0x6270,
- 0x6281, 0x6288, 0x6277, 0x627D, 0x6272, 0x6274, 0x65F0, 0x65F4,
- 0x65F3, 0x65F2, 0x65F5, 0x6745, 0x6747, 0x6759, 0x6755, 0x674C,
- 0x6748, 0x675D, 0x674D, 0x675A, 0x674B, 0x6BD0, 0x6C19, 0x6C1A,
- 0x6C78, 0x6C67, 0x6C6B, 0x6C84, 0x6C8B, 0x6C8F, 0x6C71, 0x6C6F,
- 0x6C69, 0x6C9A, 0x6C6D, 0x6C87, 0x6C95, 0x6C9C, 0x6C66, 0x6C73,
- 0x6C65, 0x6C7B, 0x6C8E, 0x7074, 0x707A, 0x7263, 0x72BF, 0x72BD,
- 0x72C3, 0x72C6, 0x72C1, 0x72BA, 0x72C5, 0x7395, 0x7397, 0x7393,
- 0x7394, 0x7392, 0x753A, 0x7539, 0x7594, 0x7595, 0x7681, 0x793D,
- 0x8034, 0x8095, 0x8099, 0x8090, 0x8092, 0x809C, 0x8290, 0x828F,
- 0x8285, 0x828E, 0x8291, 0x8293, 0x828A, 0x8283, 0x8284, 0x8C78,
- 0x8FC9, 0x8FBF, 0x909F, 0x90A1, 0x90A5, 0x909E, 0x90A7, 0x90A0,
- 0x9630, 0x9628, 0x962F, 0x962D, 0x4E33, 0x4F98, 0x4F7C, 0x4F85,
- 0x4F7D, 0x4F80, 0x4F87, 0x4F76, 0x4F74, 0x4F89, 0x4F84, 0x4F77,
- 0x4F4C, 0x4F97, 0x4F6A, 0x4F9A, 0x4F79, 0x4F81, 0x4F78, 0x4F90,
- 0x4F9C, 0x4F94, 0x4F9E, 0x4F92, 0x4F82, 0x4F95, 0x4F6B, 0x4F6E,
- 0x519E, 0x51BC, 0x51BE, 0x5235, 0x5232, 0x5233, 0x5246, 0x5231,
- 0x52BC, 0x530A, 0x530B, 0x533C, 0x5392, 0x5394, 0x5487, 0x547F,
- 0x5481, 0x5491, 0x5482, 0x5488, 0x546B, 0x547A, 0x547E, 0x5465,
- 0x546C, 0x5474, 0x5466, 0x548D, 0x546F, 0x5461, 0x5460, 0x5498,
- 0x5463, 0x5467, 0x5464, 0x56F7, 0x56F9, 0x576F, 0x5772, 0x576D,
- 0x576B, 0x5771, 0x5770, 0x5776, 0x5780, 0x5775, 0x577B, 0x5773,
- 0x5774, 0x5762, 0x5768, 0x577D, 0x590C, 0x5945, 0x59B5, 0x59BA,
- 0x59CF, 0x59CE, 0x59B2, 0x59CC, 0x59C1, 0x59B6, 0x59BC, 0x59C3,
- 0x59D6, 0x59B1, 0x59BD, 0x59C0, 0x59C8, 0x59B4, 0x59C7, 0x5B62,
- 0x5B65, 0x5B93, 0x5B95, 0x5C44, 0x5C47, 0x5CAE, 0x5CA4, 0x5CA0,
- 0x5CB5, 0x5CAF, 0x5CA8, 0x5CAC, 0x5C9F, 0x5CA3, 0x5CAD, 0x5CA2,
- 0x5CAA, 0x5CA7, 0x5C9D, 0x5CA5, 0x5CB6, 0x5CB0, 0x5CA6, 0x5E17,
- 0x5E14, 0x5E19, 0x5F28, 0x5F22, 0x5F23, 0x5F24, 0x5F54, 0x5F82,
- 0x5F7E, 0x5F7D, 0x5FDE, 0x5FE5, 0x602D, 0x6026, 0x6019, 0x6032,
- 0x600B, 0x6034, 0x600A, 0x6017, 0x6033, 0x601A, 0x601E, 0x602C,
- 0x6022, 0x600D, 0x6010, 0x602E, 0x6013, 0x6011, 0x600C, 0x6009,
- 0x601C, 0x6214, 0x623D, 0x62AD, 0x62B4, 0x62D1, 0x62BE, 0x62AA,
- 0x62B6, 0x62CA, 0x62AE, 0x62B3, 0x62AF, 0x62BB, 0x62A9, 0x62B0,
- 0x62B8, 0x653D, 0x65A8, 0x65BB, 0x6609, 0x65FC, 0x6604, 0x6612,
- 0x6608, 0x65FB, 0x6603, 0x660B, 0x660D, 0x6605, 0x65FD, 0x6611,
- 0x6610, 0x66F6, 0x670A, 0x6785, 0x676C, 0x678E, 0x6792, 0x6776,
- 0x677B, 0x6798, 0x6786, 0x6784, 0x6774, 0x678D, 0x678C, 0x677A,
- 0x679F, 0x6791, 0x6799, 0x6783, 0x677D, 0x6781, 0x6778, 0x6779,
- 0x6794, 0x6B25, 0x6B80, 0x6B7E, 0x6BDE, 0x6C1D, 0x6C93, 0x6CEC,
- 0x6CEB, 0x6CEE, 0x6CD9, 0x6CB6, 0x6CD4, 0x6CAD, 0x6CE7, 0x6CB7,
- 0x6CD0, 0x6CC2, 0x6CBA, 0x6CC3, 0x6CC6, 0x6CED, 0x6CF2, 0x6CD2,
- 0x6CDD, 0x6CB4, 0x6C8A, 0x6C9D, 0x6C80, 0x6CDE, 0x6CC0, 0x6D30,
- 0x6CCD, 0x6CC7, 0x6CB0, 0x6CF9, 0x6CCF, 0x6CE9, 0x6CD1, 0x7094,
- 0x7098, 0x7085, 0x7093, 0x7086, 0x7084, 0x7091, 0x7096, 0x7082,
- 0x709A, 0x7083, 0x726A, 0x72D6, 0x72CB, 0x72D8, 0x72C9, 0x72DC,
- 0x72D2, 0x72D4, 0x72DA, 0x72CC, 0x72D1, 0x73A4, 0x73A1, 0x73AD,
- 0x73A6, 0x73A2, 0x73A0, 0x73AC, 0x739D, 0x74DD, 0x74E8, 0x753F,
- 0x7540, 0x753E, 0x758C, 0x7598, 0x76AF, 0x76F3, 0x76F1, 0x76F0,
- 0x76F5, 0x77F8, 0x77FC, 0x77F9, 0x77FB, 0x77FA, 0x77F7, 0x7942,
- 0x793F, 0x79C5, 0x7A78, 0x7A7B, 0x7AFB, 0x7C75, 0x7CFD, 0x8035,
- 0x808F, 0x80AE, 0x80A3, 0x80B8, 0x80B5, 0x80AD, 0x8220, 0x82A0,
- 0x82C0, 0x82AB, 0x829A, 0x8298, 0x829B, 0x82B5, 0x82A7, 0x82AE,
- 0x82BC, 0x829E, 0x82BA, 0x82B4, 0x82A8, 0x82A1, 0x82A9, 0x82C2,
- 0x82A4, 0x82C3, 0x82B6, 0x82A2, 0x8670, 0x866F, 0x866D, 0x866E,
- 0x8C56, 0x8FD2, 0x8FCB, 0x8FD3, 0x8FCD, 0x8FD6, 0x8FD5, 0x8FD7,
- 0x90B2, 0x90B4, 0x90AF, 0x90B3, 0x90B0, 0x9639, 0x963D, 0x963C,
- 0x963A, 0x9643, 0x4FCD, 0x4FC5, 0x4FD3, 0x4FB2, 0x4FC9, 0x4FCB,
- 0x4FC1, 0x4FD4, 0x4FDC, 0x4FD9, 0x4FBB, 0x4FB3, 0x4FDB, 0x4FC7,
- 0x4FD6, 0x4FBA, 0x4FC0, 0x4FB9, 0x4FEC, 0x5244, 0x5249, 0x52C0,
- 0x52C2, 0x533D, 0x537C, 0x5397, 0x5396, 0x5399, 0x5398, 0x54BA,
- 0x54A1, 0x54AD, 0x54A5, 0x54CF, 0x54C3, 0x830D, 0x54B7, 0x54AE,
- 0x54D6, 0x54B6, 0x54C5, 0x54C6, 0x54A0, 0x5470, 0x54BC, 0x54A2,
- 0x54BE, 0x5472, 0x54DE, 0x54B0, 0x57B5, 0x579E, 0x579F, 0x57A4,
- 0x578C, 0x5797, 0x579D, 0x579B, 0x5794, 0x5798, 0x578F, 0x5799,
- 0x57A5, 0x579A, 0x5795, 0x58F4, 0x590D, 0x5953, 0x59E1, 0x59DE,
- 0x59EE, 0x5A00, 0x59F1, 0x59DD, 0x59FA, 0x59FD, 0x59FC, 0x59F6,
- 0x59E4, 0x59F2, 0x59F7, 0x59DB, 0x59E9, 0x59F3, 0x59F5, 0x59E0,
- 0x59FE, 0x59F4, 0x59ED, 0x5BA8, 0x5C4C, 0x5CD0, 0x5CD8, 0x5CCC,
- 0x5CD7, 0x5CCB, 0x5CDB, 0x5CDE, 0x5CDA, 0x5CC9, 0x5CC7, 0x5CCA,
- 0x5CD6, 0x5CD3, 0x5CD4, 0x5CCF, 0x5CC8, 0x5CC6, 0x5CCE, 0x5CDF,
- 0x5CF8, 0x5DF9, 0x5E21, 0x5E22, 0x5E23, 0x5E20, 0x5E24, 0x5EB0,
- 0x5EA4, 0x5EA2, 0x5E9B, 0x5EA3, 0x5EA5, 0x5F07, 0x5F2E, 0x5F56,
- 0x5F86, 0x6037, 0x6039, 0x6054, 0x6072, 0x605E, 0x6045, 0x6053,
- 0x6047, 0x6049, 0x605B, 0x604C, 0x6040, 0x6042, 0x605F, 0x6024,
- 0x6044, 0x6058, 0x6066, 0x606E, 0x6242, 0x6243, 0x62CF, 0x630D,
- 0x630B, 0x62F5, 0x630E, 0x6303, 0x62EB, 0x62F9, 0x630F, 0x630C,
- 0x62F8, 0x62F6, 0x6300, 0x6313, 0x6314, 0x62FA, 0x6315, 0x62FB,
- 0x62F0, 0x6541, 0x6543, 0x65AA, 0x65BF, 0x6636, 0x6621, 0x6632,
- 0x6635, 0x661C, 0x6626, 0x6622, 0x6633, 0x662B, 0x663A, 0x661D,
- 0x6634, 0x6639, 0x662E, 0x670F, 0x6710, 0x67C1, 0x67F2, 0x67C8,
- 0x67BA, 0x67DC, 0x67BB, 0x67F8, 0x67D8, 0x67C0, 0x67B7, 0x67C5,
- 0x67EB, 0x67E4, 0x67DF, 0x67B5, 0x67CD, 0x67B3, 0x67F7, 0x67F6,
- 0x67EE, 0x67E3, 0x67C2, 0x67B9, 0x67CE, 0x67E7, 0x67F0, 0x67B2,
- 0x67FC, 0x67C6, 0x67ED, 0x67CC, 0x67AE, 0x67E6, 0x67DB, 0x67FA,
- 0x67C9, 0x67CA, 0x67C3, 0x67EA, 0x67CB, 0x6B28, 0x6B82, 0x6B84,
- 0x6BB6, 0x6BD6, 0x6BD8, 0x6BE0, 0x6C20, 0x6C21, 0x6D28, 0x6D34,
- 0x6D2D, 0x6D1F, 0x6D3C, 0x6D3F, 0x6D12, 0x6D0A, 0x6CDA, 0x6D33,
- 0x6D04, 0x6D19, 0x6D3A, 0x6D1A, 0x6D11, 0x6D00, 0x6D1D, 0x6D42,
- 0x6D01, 0x6D18, 0x6D37, 0x6D03, 0x6D0F, 0x6D40, 0x6D07, 0x6D20,
- 0x6D2C, 0x6D08, 0x6D22, 0x6D09, 0x6D10, 0x70B7, 0x709F, 0x70BE,
- 0x70B1, 0x70B0, 0x70A1, 0x70B4, 0x70B5, 0x70A9, 0x7241, 0x7249,
- 0x724A, 0x726C, 0x7270, 0x7273, 0x726E, 0x72CA, 0x72E4, 0x72E8,
- 0x72EB, 0x72DF, 0x72EA, 0x72E6, 0x72E3, 0x7385, 0x73CC, 0x73C2,
- 0x73C8, 0x73C5, 0x73B9, 0x73B6, 0x73B5, 0x73B4, 0x73EB, 0x73BF,
- 0x73C7, 0x73BE, 0x73C3, 0x73C6, 0x73B8, 0x73CB, 0x74EC, 0x74EE,
- 0x752E, 0x7547, 0x7548, 0x75A7, 0x75AA, 0x7679, 0x76C4, 0x7708,
- 0x7703, 0x7704, 0x7705, 0x770A, 0x76F7, 0x76FB, 0x76FA, 0x77E7,
- 0x77E8, 0x7806, 0x7811, 0x7812, 0x7805, 0x7810, 0x780F, 0x780E,
- 0x7809, 0x7803, 0x7813, 0x794A, 0x794C, 0x794B, 0x7945, 0x7944,
- 0x79D5, 0x79CD, 0x79CF, 0x79D6, 0x79CE, 0x7A80, 0x7A7E, 0x7AD1,
- 0x7B00, 0x7B01, 0x7C7A, 0x7C78, 0x7C79, 0x7C7F, 0x7C80, 0x7C81,
- 0x7D03, 0x7D08, 0x7D01, 0x7F58, 0x7F91, 0x7F8D, 0x7FBE, 0x8007,
- 0x800E, 0x800F, 0x8014, 0x8037, 0x80D8, 0x80C7, 0x80E0, 0x80D1,
- 0x80C8, 0x80C2, 0x80D0, 0x80C5, 0x80E3, 0x80D9, 0x80DC, 0x80CA,
- 0x80D5, 0x80C9, 0x80CF, 0x80D7, 0x80E6, 0x80CD, 0x81FF, 0x8221,
- 0x8294, 0x82D9, 0x82FE, 0x82F9, 0x8307, 0x82E8, 0x8300, 0x82D5,
- 0x833A, 0x82EB, 0x82D6, 0x82F4, 0x82EC, 0x82E1, 0x82F2, 0x82F5,
- 0x830C, 0x82FB, 0x82F6, 0x82F0, 0x82EA, 0x82E4, 0x82E0, 0x82FA,
- 0x82F3, 0x82ED, 0x8677, 0x8674, 0x867C, 0x8673, 0x8841, 0x884E,
- 0x8867, 0x886A, 0x8869, 0x89D3, 0x8A04, 0x8A07, 0x8D72, 0x8FE3,
- 0x8FE1, 0x8FEE, 0x8FE0, 0x90F1, 0x90BD, 0x90BF, 0x90D5, 0x90C5,
- 0x90BE, 0x90C7, 0x90CB, 0x90C8, 0x91D4, 0x91D3, 0x9654, 0x964F,
- 0x9651, 0x9653, 0x964A, 0x964E, 0x501E, 0x5005, 0x5007, 0x5013,
- 0x5022, 0x5030, 0x501B, 0x4FF5, 0x4FF4, 0x5033, 0x5037, 0x502C,
- 0x4FF6, 0x4FF7, 0x5017, 0x501C, 0x5020, 0x5027, 0x5035, 0x502F,
- 0x5031, 0x500E, 0x515A, 0x5194, 0x5193, 0x51CA, 0x51C4, 0x51C5,
- 0x51C8, 0x51CE, 0x5261, 0x525A, 0x5252, 0x525E, 0x525F, 0x5255,
- 0x5262, 0x52CD, 0x530E, 0x539E, 0x5526, 0x54E2, 0x5517, 0x5512,
- 0x54E7, 0x54F3, 0x54E4, 0x551A, 0x54FF, 0x5504, 0x5508, 0x54EB,
- 0x5511, 0x5505, 0x54F1, 0x550A, 0x54FB, 0x54F7, 0x54F8, 0x54E0,
- 0x550E, 0x5503, 0x550B, 0x5701, 0x5702, 0x57CC, 0x5832, 0x57D5,
- 0x57D2, 0x57BA, 0x57C6, 0x57BD, 0x57BC, 0x57B8, 0x57B6, 0x57BF,
- 0x57C7, 0x57D0, 0x57B9, 0x57C1, 0x590E, 0x594A, 0x5A19, 0x5A16,
- 0x5A2D, 0x5A2E, 0x5A15, 0x5A0F, 0x5A17, 0x5A0A, 0x5A1E, 0x5A33,
- 0x5B6C, 0x5BA7, 0x5BAD, 0x5BAC, 0x5C03, 0x5C56, 0x5C54, 0x5CEC,
- 0x5CFF, 0x5CEE, 0x5CF1, 0x5CF7, 0x5D00, 0x5CF9, 0x5E29, 0x5E28,
- 0x5EA8, 0x5EAE, 0x5EAA, 0x5EAC, 0x5F33, 0x5F30, 0x5F67, 0x605D,
- 0x605A, 0x6067, 0x6041, 0x60A2, 0x6088, 0x6080, 0x6092, 0x6081,
- 0x609D, 0x6083, 0x6095, 0x609B, 0x6097, 0x6087, 0x609C, 0x608E,
- 0x6219, 0x6246, 0x62F2, 0x6310, 0x6356, 0x632C, 0x6344, 0x6345,
- 0x6336, 0x6343, 0x63E4, 0x6339, 0x634B, 0x634A, 0x633C, 0x6329,
- 0x6341, 0x6334, 0x6358, 0x6354, 0x6359, 0x632D, 0x6347, 0x6333,
- 0x635A, 0x6351, 0x6338, 0x6357, 0x6340, 0x6348, 0x654A, 0x6546,
- 0x65C6, 0x65C3, 0x65C4, 0x65C2, 0x664A, 0x665F, 0x6647, 0x6651,
- 0x6712, 0x6713, 0x681F, 0x681A, 0x6849, 0x6832, 0x6833, 0x683B,
- 0x684B, 0x684F, 0x6816, 0x6831, 0x681C, 0x6835, 0x682B, 0x682D,
- 0x682F, 0x684E, 0x6844, 0x6834, 0x681D, 0x6812, 0x6814, 0x6826,
- 0x6828, 0x682E, 0x684D, 0x683A, 0x6825, 0x6820, 0x6B2C, 0x6B2F,
- 0x6B2D, 0x6B31, 0x6B34, 0x6B6D, 0x8082, 0x6B88, 0x6BE6, 0x6BE4,
- 0x6BE8, 0x6BE3, 0x6BE2, 0x6BE7, 0x6C25, 0x6D7A, 0x6D63, 0x6D64,
- 0x6D76, 0x6D0D, 0x6D61, 0x6D92, 0x6D58, 0x6D62, 0x6D6D, 0x6D6F,
- 0x6D91, 0x6D8D, 0x6DEF, 0x6D7F, 0x6D86, 0x6D5E, 0x6D67, 0x6D60,
- 0x6D97, 0x6D70, 0x6D7C, 0x6D5F, 0x6D82, 0x6D98, 0x6D2F, 0x6D68,
- 0x6D8B, 0x6D7E, 0x6D80, 0x6D84, 0x6D16, 0x6D83, 0x6D7B, 0x6D7D,
- 0x6D75, 0x6D90, 0x70DC, 0x70D3, 0x70D1, 0x70DD, 0x70CB, 0x7F39,
- 0x70E2, 0x70D7, 0x70D2, 0x70DE, 0x70E0, 0x70D4, 0x70CD, 0x70C5,
- 0x70C6, 0x70C7, 0x70DA, 0x70CE, 0x70E1, 0x7242, 0x7278, 0x7277,
- 0x7276, 0x7300, 0x72FA, 0x72F4, 0x72FE, 0x72F6, 0x72F3, 0x72FB,
- 0x7301, 0x73D3, 0x73D9, 0x73E5, 0x73D6, 0x73BC, 0x73E7, 0x73E3,
- 0x73E9, 0x73DC, 0x73D2, 0x73DB, 0x73D4, 0x73DD, 0x73DA, 0x73D7,
- 0x73D8, 0x73E8, 0x74DE, 0x74DF, 0x74F4, 0x74F5, 0x7521, 0x755B,
- 0x755F, 0x75B0, 0x75C1, 0x75BB, 0x75C4, 0x75C0, 0x75BF, 0x75B6,
- 0x75BA, 0x768A, 0x76C9, 0x771D, 0x771B, 0x7710, 0x7713, 0x7712,
- 0x7723, 0x7711, 0x7715, 0x7719, 0x771A, 0x7722, 0x7727, 0x7823,
- 0x782C, 0x7822, 0x7835, 0x782F, 0x7828, 0x782E, 0x782B, 0x7821,
- 0x7829, 0x7833, 0x782A, 0x7831, 0x7954, 0x795B, 0x794F, 0x795C,
- 0x7953, 0x7952, 0x7951, 0x79EB, 0x79EC, 0x79E0, 0x79EE, 0x79ED,
- 0x79EA, 0x79DC, 0x79DE, 0x79DD, 0x7A86, 0x7A89, 0x7A85, 0x7A8B,
- 0x7A8C, 0x7A8A, 0x7A87, 0x7AD8, 0x7B10, 0x7B04, 0x7B13, 0x7B05,
- 0x7B0F, 0x7B08, 0x7B0A, 0x7B0E, 0x7B09, 0x7B12, 0x7C84, 0x7C91,
- 0x7C8A, 0x7C8C, 0x7C88, 0x7C8D, 0x7C85, 0x7D1E, 0x7D1D, 0x7D11,
- 0x7D0E, 0x7D18, 0x7D16, 0x7D13, 0x7D1F, 0x7D12, 0x7D0F, 0x7D0C,
- 0x7F5C, 0x7F61, 0x7F5E, 0x7F60, 0x7F5D, 0x7F5B, 0x7F96, 0x7F92,
- 0x7FC3, 0x7FC2, 0x7FC0, 0x8016, 0x803E, 0x8039, 0x80FA, 0x80F2,
- 0x80F9, 0x80F5, 0x8101, 0x80FB, 0x8100, 0x8201, 0x822F, 0x8225,
- 0x8333, 0x832D, 0x8344, 0x8319, 0x8351, 0x8325, 0x8356, 0x833F,
- 0x8341, 0x8326, 0x831C, 0x8322, 0x8342, 0x834E, 0x831B, 0x832A,
- 0x8308, 0x833C, 0x834D, 0x8316, 0x8324, 0x8320, 0x8337, 0x832F,
- 0x8329, 0x8347, 0x8345, 0x834C, 0x8353, 0x831E, 0x832C, 0x834B,
- 0x8327, 0x8348, 0x8653, 0x8652, 0x86A2, 0x86A8, 0x8696, 0x868D,
- 0x8691, 0x869E, 0x8687, 0x8697, 0x8686, 0x868B, 0x869A, 0x8685,
- 0x86A5, 0x8699, 0x86A1, 0x86A7, 0x8695, 0x8698, 0x868E, 0x869D,
- 0x8690, 0x8694, 0x8843, 0x8844, 0x886D, 0x8875, 0x8876, 0x8872,
- 0x8880, 0x8871, 0x887F, 0x886F, 0x8883, 0x887E, 0x8874, 0x887C,
- 0x8A12, 0x8C47, 0x8C57, 0x8C7B, 0x8CA4, 0x8CA3, 0x8D76, 0x8D78,
- 0x8DB5, 0x8DB7, 0x8DB6, 0x8ED1, 0x8ED3, 0x8FFE, 0x8FF5, 0x9002,
- 0x8FFF, 0x8FFB, 0x9004, 0x8FFC, 0x8FF6, 0x90D6, 0x90E0, 0x90D9,
- 0x90DA, 0x90E3, 0x90DF, 0x90E5, 0x90D8, 0x90DB, 0x90D7, 0x90DC,
- 0x90E4, 0x9150, 0x914E, 0x914F, 0x91D5, 0x91E2, 0x91DA, 0x965C,
- 0x965F, 0x96BC, 0x98E3, 0x9ADF, 0x9B2F, 0x4E7F, 0x5070, 0x506A,
- 0x5061, 0x505E, 0x5060, 0x5053, 0x504B, 0x505D, 0x5072, 0x5048,
- 0x504D, 0x5041, 0x505B, 0x504A, 0x5062, 0x5015, 0x5045, 0x505F,
- 0x5069, 0x506B, 0x5063, 0x5064, 0x5046, 0x5040, 0x506E, 0x5073,
- 0x5057, 0x5051, 0x51D0, 0x526B, 0x526D, 0x526C, 0x526E, 0x52D6,
- 0x52D3, 0x532D, 0x539C, 0x5575, 0x5576, 0x553C, 0x554D, 0x5550,
- 0x5534, 0x552A, 0x5551, 0x5562, 0x5536, 0x5535, 0x5530, 0x5552,
- 0x5545, 0x550C, 0x5532, 0x5565, 0x554E, 0x5539, 0x5548, 0x552D,
- 0x553B, 0x5540, 0x554B, 0x570A, 0x5707, 0x57FB, 0x5814, 0x57E2,
- 0x57F6, 0x57DC, 0x57F4, 0x5800, 0x57ED, 0x57FD, 0x5808, 0x57F8,
- 0x580B, 0x57F3, 0x57CF, 0x5807, 0x57EE, 0x57E3, 0x57F2, 0x57E5,
- 0x57EC, 0x57E1, 0x580E, 0x57FC, 0x5810, 0x57E7, 0x5801, 0x580C,
- 0x57F1, 0x57E9, 0x57F0, 0x580D, 0x5804, 0x595C, 0x5A60, 0x5A58,
- 0x5A55, 0x5A67, 0x5A5E, 0x5A38, 0x5A35, 0x5A6D, 0x5A50, 0x5A5F,
- 0x5A65, 0x5A6C, 0x5A53, 0x5A64, 0x5A57, 0x5A43, 0x5A5D, 0x5A52,
- 0x5A44, 0x5A5B, 0x5A48, 0x5A8E, 0x5A3E, 0x5A4D, 0x5A39, 0x5A4C,
- 0x5A70, 0x5A69, 0x5A47, 0x5A51, 0x5A56, 0x5A42, 0x5A5C, 0x5B72,
- 0x5B6E, 0x5BC1, 0x5BC0, 0x5C59, 0x5D1E, 0x5D0B, 0x5D1D, 0x5D1A,
- 0x5D20, 0x5D0C, 0x5D28, 0x5D0D, 0x5D26, 0x5D25, 0x5D0F, 0x5D30,
- 0x5D12, 0x5D23, 0x5D1F, 0x5D2E, 0x5E3E, 0x5E34, 0x5EB1, 0x5EB4,
- 0x5EB9, 0x5EB2, 0x5EB3, 0x5F36, 0x5F38, 0x5F9B, 0x5F96, 0x5F9F,
- 0x608A, 0x6090, 0x6086, 0x60BE, 0x60B0, 0x60BA, 0x60D3, 0x60D4,
- 0x60CF, 0x60E4, 0x60D9, 0x60DD, 0x60C8, 0x60B1, 0x60DB, 0x60B7,
- 0x60CA, 0x60BF, 0x60C3, 0x60CD, 0x60C0, 0x6332, 0x6365, 0x638A,
- 0x6382, 0x637D, 0x63BD, 0x639E, 0x63AD, 0x639D, 0x6397, 0x63AB,
- 0x638E, 0x636F, 0x6387, 0x6390, 0x636E, 0x63AF, 0x6375, 0x639C,
- 0x636D, 0x63AE, 0x637C, 0x63A4, 0x633B, 0x639F, 0x6378, 0x6385,
- 0x6381, 0x6391, 0x638D, 0x6370, 0x6553, 0x65CD, 0x6665, 0x6661,
- 0x665B, 0x6659, 0x665C, 0x6662, 0x6718, 0x6879, 0x6887, 0x6890,
- 0x689C, 0x686D, 0x686E, 0x68AE, 0x68AB, 0x6956, 0x686F, 0x68A3,
- 0x68AC, 0x68A9, 0x6875, 0x6874, 0x68B2, 0x688F, 0x6877, 0x6892,
- 0x687C, 0x686B, 0x6872, 0x68AA, 0x6880, 0x6871, 0x687E, 0x689B,
- 0x6896, 0x688B, 0x68A0, 0x6889, 0x68A4, 0x6878, 0x687B, 0x6891,
- 0x688C, 0x688A, 0x687D, 0x6B36, 0x6B33, 0x6B37, 0x6B38, 0x6B91,
- 0x6B8F, 0x6B8D, 0x6B8E, 0x6B8C, 0x6C2A, 0x6DC0, 0x6DAB, 0x6DB4,
- 0x6DB3, 0x6E74, 0x6DAC, 0x6DE9, 0x6DE2, 0x6DB7, 0x6DF6, 0x6DD4,
- 0x6E00, 0x6DC8, 0x6DE0, 0x6DDF, 0x6DD6, 0x6DBE, 0x6DE5, 0x6DDC,
- 0x6DDD, 0x6DDB, 0x6DF4, 0x6DCA, 0x6DBD, 0x6DED, 0x6DF0, 0x6DBA,
- 0x6DD5, 0x6DC2, 0x6DCF, 0x6DC9, 0x6DD0, 0x6DF2, 0x6DD3, 0x6DFD,
- 0x6DD7, 0x6DCD, 0x6DE3, 0x6DBB, 0x70FA, 0x710D, 0x70F7, 0x7117,
- 0x70F4, 0x710C, 0x70F0, 0x7104, 0x70F3, 0x7110, 0x70FC, 0x70FF,
- 0x7106, 0x7113, 0x7100, 0x70F8, 0x70F6, 0x710B, 0x7102, 0x710E,
- 0x727E, 0x727B, 0x727C, 0x727F, 0x731D, 0x7317, 0x7307, 0x7311,
- 0x7318, 0x730A, 0x7308, 0x72FF, 0x730F, 0x731E, 0x7388, 0x73F6,
- 0x73F8, 0x73F5, 0x7404, 0x7401, 0x73FD, 0x7407, 0x7400, 0x73FA,
- 0x73FC, 0x73FF, 0x740C, 0x740B, 0x73F4, 0x7408, 0x7564, 0x7563,
- 0x75CE, 0x75D2, 0x75CF, 0x75CB, 0x75CC, 0x75D1, 0x75D0, 0x768F,
- 0x7689, 0x76D3, 0x7739, 0x772F, 0x772D, 0x7731, 0x7732, 0x7734,
- 0x7733, 0x773D, 0x7725, 0x773B, 0x7735, 0x7848, 0x7852, 0x7849,
- 0x784D, 0x784A, 0x784C, 0x7826, 0x7845, 0x7850, 0x7964, 0x7967,
- 0x7969, 0x796A, 0x7963, 0x796B, 0x7961, 0x79BB, 0x79FA, 0x79F8,
- 0x79F6, 0x79F7, 0x7A8F, 0x7A94, 0x7A90, 0x7B35, 0x7B3B, 0x7B34,
- 0x7B25, 0x7B30, 0x7B22, 0x7B24, 0x7B33, 0x7B18, 0x7B2A, 0x7B1D,
- 0x7B31, 0x7B2B, 0x7B2D, 0x7B2F, 0x7B32, 0x7B38, 0x7B1A, 0x7B23,
- 0x7C94, 0x7C98, 0x7C96, 0x7CA3, 0x7D35, 0x7D3D, 0x7D38, 0x7D36,
- 0x7D3A, 0x7D45, 0x7D2C, 0x7D29, 0x7D41, 0x7D47, 0x7D3E, 0x7D3F,
- 0x7D4A, 0x7D3B, 0x7D28, 0x7F63, 0x7F95, 0x7F9C, 0x7F9D, 0x7F9B,
- 0x7FCA, 0x7FCB, 0x7FCD, 0x7FD0, 0x7FD1, 0x7FC7, 0x7FCF, 0x7FC9,
- 0x801F, 0x801E, 0x801B, 0x8047, 0x8043, 0x8048, 0x8118, 0x8125,
- 0x8119, 0x811B, 0x812D, 0x811F, 0x812C, 0x811E, 0x8121, 0x8115,
- 0x8127, 0x811D, 0x8122, 0x8211, 0x8238, 0x8233, 0x823A, 0x8234,
- 0x8232, 0x8274, 0x8390, 0x83A3, 0x83A8, 0x838D, 0x837A, 0x8373,
- 0x83A4, 0x8374, 0x838F, 0x8381, 0x8395, 0x8399, 0x8375, 0x8394,
- 0x83A9, 0x837D, 0x8383, 0x838C, 0x839D, 0x839B, 0x83AA, 0x838B,
- 0x837E, 0x83A5, 0x83AF, 0x8388, 0x8397, 0x83B0, 0x837F, 0x83A6,
- 0x8387, 0x83AE, 0x8376, 0x8659, 0x8656, 0x86BF, 0x86B7, 0x86C2,
- 0x86C1, 0x86C5, 0x86BA, 0x86B0, 0x86C8, 0x86B9, 0x86B3, 0x86B8,
- 0x86CC, 0x86B4, 0x86BB, 0x86BC, 0x86C3, 0x86BD, 0x86BE, 0x8852,
- 0x8889, 0x8895, 0x88A8, 0x88A2, 0x88AA, 0x889A, 0x8891, 0x88A1,
- 0x889F, 0x8898, 0x88A7, 0x8899, 0x889B, 0x8897, 0x88A4, 0x88AC,
- 0x888C, 0x8893, 0x888E, 0x8982, 0x89D6, 0x89D9, 0x89D5, 0x8A30,
- 0x8A27, 0x8A2C, 0x8A1E, 0x8C39, 0x8C3B, 0x8C5C, 0x8C5D, 0x8C7D,
- 0x8CA5, 0x8D7D, 0x8D7B, 0x8D79, 0x8DBC, 0x8DC2, 0x8DB9, 0x8DBF,
- 0x8DC1, 0x8ED8, 0x8EDE, 0x8EDD, 0x8EDC, 0x8ED7, 0x8EE0, 0x8EE1,
- 0x9024, 0x900B, 0x9011, 0x901C, 0x900C, 0x9021, 0x90EF, 0x90EA,
- 0x90F0, 0x90F4, 0x90F2, 0x90F3, 0x90D4, 0x90EB, 0x90EC, 0x90E9,
- 0x9156, 0x9158, 0x915A, 0x9153, 0x9155, 0x91EC, 0x91F4, 0x91F1,
- 0x91F3, 0x91F8, 0x91E4, 0x91F9, 0x91EA, 0x91EB, 0x91F7, 0x91E8,
- 0x91EE, 0x957A, 0x9586, 0x9588, 0x967C, 0x966D, 0x966B, 0x9671,
- 0x966F, 0x96BF, 0x976A, 0x9804, 0x98E5, 0x9997, 0x509B, 0x5095,
- 0x5094, 0x509E, 0x508B, 0x50A3, 0x5083, 0x508C, 0x508E, 0x509D,
- 0x5068, 0x509C, 0x5092, 0x5082, 0x5087, 0x515F, 0x51D4, 0x5312,
- 0x5311, 0x53A4, 0x53A7, 0x5591, 0x55A8, 0x55A5, 0x55AD, 0x5577,
- 0x5645, 0x55A2, 0x5593, 0x5588, 0x558F, 0x55B5, 0x5581, 0x55A3,
- 0x5592, 0x55A4, 0x557D, 0x558C, 0x55A6, 0x557F, 0x5595, 0x55A1,
- 0x558E, 0x570C, 0x5829, 0x5837, 0x5819, 0x581E, 0x5827, 0x5823,
- 0x5828, 0x57F5, 0x5848, 0x5825, 0x581C, 0x581B, 0x5833, 0x583F,
- 0x5836, 0x582E, 0x5839, 0x5838, 0x582D, 0x582C, 0x583B, 0x5961,
- 0x5AAF, 0x5A94, 0x5A9F, 0x5A7A, 0x5AA2, 0x5A9E, 0x5A78, 0x5AA6,
- 0x5A7C, 0x5AA5, 0x5AAC, 0x5A95, 0x5AAE, 0x5A37, 0x5A84, 0x5A8A,
- 0x5A97, 0x5A83, 0x5A8B, 0x5AA9, 0x5A7B, 0x5A7D, 0x5A8C, 0x5A9C,
- 0x5A8F, 0x5A93, 0x5A9D, 0x5BEA, 0x5BCD, 0x5BCB, 0x5BD4, 0x5BD1,
- 0x5BCA, 0x5BCE, 0x5C0C, 0x5C30, 0x5D37, 0x5D43, 0x5D6B, 0x5D41,
- 0x5D4B, 0x5D3F, 0x5D35, 0x5D51, 0x5D4E, 0x5D55, 0x5D33, 0x5D3A,
- 0x5D52, 0x5D3D, 0x5D31, 0x5D59, 0x5D42, 0x5D39, 0x5D49, 0x5D38,
- 0x5D3C, 0x5D32, 0x5D36, 0x5D40, 0x5D45, 0x5E44, 0x5E41, 0x5F58,
- 0x5FA6, 0x5FA5, 0x5FAB, 0x60C9, 0x60B9, 0x60CC, 0x60E2, 0x60CE,
- 0x60C4, 0x6114, 0x60F2, 0x610A, 0x6116, 0x6105, 0x60F5, 0x6113,
- 0x60F8, 0x60FC, 0x60FE, 0x60C1, 0x6103, 0x6118, 0x611D, 0x6110,
- 0x60FF, 0x6104, 0x610B, 0x624A, 0x6394, 0x63B1, 0x63B0, 0x63CE,
- 0x63E5, 0x63E8, 0x63EF, 0x63C3, 0x649D, 0x63F3, 0x63CA, 0x63E0,
- 0x63F6, 0x63D5, 0x63F2, 0x63F5, 0x6461, 0x63DF, 0x63BE, 0x63DD,
- 0x63DC, 0x63C4, 0x63D8, 0x63D3, 0x63C2, 0x63C7, 0x63CC, 0x63CB,
- 0x63C8, 0x63F0, 0x63D7, 0x63D9, 0x6532, 0x6567, 0x656A, 0x6564,
- 0x655C, 0x6568, 0x6565, 0x658C, 0x659D, 0x659E, 0x65AE, 0x65D0,
- 0x65D2, 0x667C, 0x666C, 0x667B, 0x6680, 0x6671, 0x6679, 0x666A,
- 0x6672, 0x6701, 0x690C, 0x68D3, 0x6904, 0x68DC, 0x692A, 0x68EC,
- 0x68EA, 0x68F1, 0x690F, 0x68D6, 0x68F7, 0x68EB, 0x68E4, 0x68F6,
- 0x6913, 0x6910, 0x68F3, 0x68E1, 0x6907, 0x68CC, 0x6908, 0x6970,
- 0x68B4, 0x6911, 0x68EF, 0x68C6, 0x6914, 0x68F8, 0x68D0, 0x68FD,
- 0x68FC, 0x68E8, 0x690B, 0x690A, 0x6917, 0x68CE, 0x68C8, 0x68DD,
- 0x68DE, 0x68E6, 0x68F4, 0x68D1, 0x6906, 0x68D4, 0x68E9, 0x6915,
- 0x6925, 0x68C7, 0x6B39, 0x6B3B, 0x6B3F, 0x6B3C, 0x6B94, 0x6B97,
- 0x6B99, 0x6B95, 0x6BBD, 0x6BF0, 0x6BF2, 0x6BF3, 0x6C30, 0x6DFC,
- 0x6E46, 0x6E47, 0x6E1F, 0x6E49, 0x6E88, 0x6E3C, 0x6E3D, 0x6E45,
- 0x6E62, 0x6E2B, 0x6E3F, 0x6E41, 0x6E5D, 0x6E73, 0x6E1C, 0x6E33,
- 0x6E4B, 0x6E40, 0x6E51, 0x6E3B, 0x6E03, 0x6E2E, 0x6E5E, 0x6E68,
- 0x6E5C, 0x6E61, 0x6E31, 0x6E28, 0x6E60, 0x6E71, 0x6E6B, 0x6E39,
- 0x6E22, 0x6E30, 0x6E53, 0x6E65, 0x6E27, 0x6E78, 0x6E64, 0x6E77,
- 0x6E55, 0x6E79, 0x6E52, 0x6E66, 0x6E35, 0x6E36, 0x6E5A, 0x7120,
- 0x711E, 0x712F, 0x70FB, 0x712E, 0x7131, 0x7123, 0x7125, 0x7122,
- 0x7132, 0x711F, 0x7128, 0x713A, 0x711B, 0x724B, 0x725A, 0x7288,
- 0x7289, 0x7286, 0x7285, 0x728B, 0x7312, 0x730B, 0x7330, 0x7322,
- 0x7331, 0x7333, 0x7327, 0x7332, 0x732D, 0x7326, 0x7323, 0x7335,
- 0x730C, 0x742E, 0x742C, 0x7430, 0x742B, 0x7416, 0x741A, 0x7421,
- 0x742D, 0x7431, 0x7424, 0x7423, 0x741D, 0x7429, 0x7420, 0x7432,
- 0x74FB, 0x752F, 0x756F, 0x756C, 0x75E7, 0x75DA, 0x75E1, 0x75E6,
- 0x75DD, 0x75DF, 0x75E4, 0x75D7, 0x7695, 0x7692, 0x76DA, 0x7746,
- 0x7747, 0x7744, 0x774D, 0x7745, 0x774A, 0x774E, 0x774B, 0x774C,
- 0x77DE, 0x77EC, 0x7860, 0x7864, 0x7865, 0x785C, 0x786D, 0x7871,
- 0x786A, 0x786E, 0x7870, 0x7869, 0x7868, 0x785E, 0x7862, 0x7974,
- 0x7973, 0x7972, 0x7970, 0x7A02, 0x7A0A, 0x7A03, 0x7A0C, 0x7A04,
- 0x7A99, 0x7AE6, 0x7AE4, 0x7B4A, 0x7B47, 0x7B44, 0x7B48, 0x7B4C,
- 0x7B4E, 0x7B40, 0x7B58, 0x7B45, 0x7CA2, 0x7C9E, 0x7CA8, 0x7CA1,
- 0x7D58, 0x7D6F, 0x7D63, 0x7D53, 0x7D56, 0x7D67, 0x7D6A, 0x7D4F,
- 0x7D6D, 0x7D5C, 0x7D6B, 0x7D52, 0x7D54, 0x7D69, 0x7D51, 0x7D5F,
- 0x7D4E, 0x7F3E, 0x7F3F, 0x7F65, 0x7F66, 0x7FA2, 0x7FA0, 0x7FA1,
- 0x7FD7, 0x8051, 0x804F, 0x8050, 0x80FE, 0x80D4, 0x8143, 0x814A,
- 0x8152, 0x814F, 0x8147, 0x813D, 0x814D, 0x813A, 0x81E6, 0x81EE,
- 0x81F7, 0x81F8, 0x81F9, 0x8204, 0x823C, 0x823D, 0x823F, 0x8275,
- 0x833B, 0x83CF, 0x83F9, 0x8423, 0x83C0, 0x83E8, 0x8412, 0x83E7,
- 0x83E4, 0x83FC, 0x83F6, 0x8410, 0x83C6, 0x83C8, 0x83EB, 0x83E3,
- 0x83BF, 0x8401, 0x83DD, 0x83E5, 0x83D8, 0x83FF, 0x83E1, 0x83CB,
- 0x83CE, 0x83D6, 0x83F5, 0x83C9, 0x8409, 0x840F, 0x83DE, 0x8411,
- 0x8406, 0x83C2, 0x83F3, 0x83D5, 0x83FA, 0x83C7, 0x83D1, 0x83EA,
- 0x8413, 0x839A, 0x83C3, 0x83EC, 0x83EE, 0x83C4, 0x83FB, 0x83D7,
- 0x83E2, 0x841B, 0x83DB, 0x83FE, 0x86D8, 0x86E2, 0x86E6, 0x86D3,
- 0x86E3, 0x86DA, 0x86EA, 0x86DD, 0x86EB, 0x86DC, 0x86EC, 0x86E9,
- 0x86D7, 0x86E8, 0x86D1, 0x8848, 0x8856, 0x8855, 0x88BA, 0x88D7,
- 0x88B9, 0x88B8, 0x88C0, 0x88BE, 0x88B6, 0x88BC, 0x88B7, 0x88BD,
- 0x88B2, 0x8901, 0x88C9, 0x8995, 0x8998, 0x8997, 0x89DD, 0x89DA,
- 0x89DB, 0x8A4E, 0x8A4D, 0x8A39, 0x8A59, 0x8A40, 0x8A57, 0x8A58,
- 0x8A44, 0x8A45, 0x8A52, 0x8A48, 0x8A51, 0x8A4A, 0x8A4C, 0x8A4F,
- 0x8C5F, 0x8C81, 0x8C80, 0x8CBA, 0x8CBE, 0x8CB0, 0x8CB9, 0x8CB5,
- 0x8D84, 0x8D80, 0x8D89, 0x8DD8, 0x8DD3, 0x8DCD, 0x8DC7, 0x8DD6,
- 0x8DDC, 0x8DCF, 0x8DD5, 0x8DD9, 0x8DC8, 0x8DD7, 0x8DC5, 0x8EEF,
- 0x8EF7, 0x8EFA, 0x8EF9, 0x8EE6, 0x8EEE, 0x8EE5, 0x8EF5, 0x8EE7,
- 0x8EE8, 0x8EF6, 0x8EEB, 0x8EF1, 0x8EEC, 0x8EF4, 0x8EE9, 0x902D,
- 0x9034, 0x902F, 0x9106, 0x912C, 0x9104, 0x90FF, 0x90FC, 0x9108,
- 0x90F9, 0x90FB, 0x9101, 0x9100, 0x9107, 0x9105, 0x9103, 0x9161,
- 0x9164, 0x915F, 0x9162, 0x9160, 0x9201, 0x920A, 0x9225, 0x9203,
- 0x921A, 0x9226, 0x920F, 0x920C, 0x9200, 0x9212, 0x91FF, 0x91FD,
- 0x9206, 0x9204, 0x9227, 0x9202, 0x921C, 0x9224, 0x9219, 0x9217,
- 0x9205, 0x9216, 0x957B, 0x958D, 0x958C, 0x9590, 0x9687, 0x967E,
- 0x9688, 0x9689, 0x9683, 0x9680, 0x96C2, 0x96C8, 0x96C3, 0x96F1,
- 0x96F0, 0x976C, 0x9770, 0x976E, 0x9807, 0x98A9, 0x98EB, 0x9CE6,
- 0x9EF9, 0x4E83, 0x4E84, 0x4EB6, 0x50BD, 0x50BF, 0x50C6, 0x50AE,
- 0x50C4, 0x50CA, 0x50B4, 0x50C8, 0x50C2, 0x50B0, 0x50C1, 0x50BA,
- 0x50B1, 0x50CB, 0x50C9, 0x50B6, 0x50B8, 0x51D7, 0x527A, 0x5278,
- 0x527B, 0x527C, 0x55C3, 0x55DB, 0x55CC, 0x55D0, 0x55CB, 0x55CA,
- 0x55DD, 0x55C0, 0x55D4, 0x55C4, 0x55E9, 0x55BF, 0x55D2, 0x558D,
- 0x55CF, 0x55D5, 0x55E2, 0x55D6, 0x55C8, 0x55F2, 0x55CD, 0x55D9,
- 0x55C2, 0x5714, 0x5853, 0x5868, 0x5864, 0x584F, 0x584D, 0x5849,
- 0x586F, 0x5855, 0x584E, 0x585D, 0x5859, 0x5865, 0x585B, 0x583D,
- 0x5863, 0x5871, 0x58FC, 0x5AC7, 0x5AC4, 0x5ACB, 0x5ABA, 0x5AB8,
- 0x5AB1, 0x5AB5, 0x5AB0, 0x5ABF, 0x5AC8, 0x5ABB, 0x5AC6, 0x5AB7,
- 0x5AC0, 0x5ACA, 0x5AB4, 0x5AB6, 0x5ACD, 0x5AB9, 0x5A90, 0x5BD6,
- 0x5BD8, 0x5BD9, 0x5C1F, 0x5C33, 0x5D71, 0x5D63, 0x5D4A, 0x5D65,
- 0x5D72, 0x5D6C, 0x5D5E, 0x5D68, 0x5D67, 0x5D62, 0x5DF0, 0x5E4F,
- 0x5E4E, 0x5E4A, 0x5E4D, 0x5E4B, 0x5EC5, 0x5ECC, 0x5EC6, 0x5ECB,
- 0x5EC7, 0x5F40, 0x5FAF, 0x5FAD, 0x60F7, 0x6149, 0x614A, 0x612B,
- 0x6145, 0x6136, 0x6132, 0x612E, 0x6146, 0x612F, 0x614F, 0x6129,
- 0x6140, 0x6220, 0x9168, 0x6223, 0x6225, 0x6224, 0x63C5, 0x63F1,
- 0x63EB, 0x6410, 0x6412, 0x6409, 0x6420, 0x6424, 0x6433, 0x6443,
- 0x641F, 0x6415, 0x6418, 0x6439, 0x6437, 0x6422, 0x6423, 0x640C,
- 0x6426, 0x6430, 0x6428, 0x6441, 0x6435, 0x642F, 0x640A, 0x641A,
- 0x6440, 0x6425, 0x6427, 0x640B, 0x63E7, 0x641B, 0x642E, 0x6421,
- 0x640E, 0x656F, 0x6592, 0x65D3, 0x6686, 0x668C, 0x6695, 0x6690,
- 0x668B, 0x668A, 0x6699, 0x6694, 0x6678, 0x6720, 0x6966, 0x695F,
- 0x6938, 0x694E, 0x6962, 0x6971, 0x693F, 0x6945, 0x696A, 0x6939,
- 0x6942, 0x6957, 0x6959, 0x697A, 0x6948, 0x6949, 0x6935, 0x696C,
- 0x6933, 0x693D, 0x6965, 0x68F0, 0x6978, 0x6934, 0x6969, 0x6940,
- 0x696F, 0x6944, 0x6976, 0x6958, 0x6941, 0x6974, 0x694C, 0x693B,
- 0x694B, 0x6937, 0x695C, 0x694F, 0x6951, 0x6932, 0x6952, 0x692F,
- 0x697B, 0x693C, 0x6B46, 0x6B45, 0x6B43, 0x6B42, 0x6B48, 0x6B41,
- 0x6B9B, 0x6BFB, 0x6BFC, 0x6BF9, 0x6BF7, 0x6BF8, 0x6E9B, 0x6ED6,
- 0x6EC8, 0x6E8F, 0x6EC0, 0x6E9F, 0x6E93, 0x6E94, 0x6EA0, 0x6EB1,
- 0x6EB9, 0x6EC6, 0x6ED2, 0x6EBD, 0x6EC1, 0x6E9E, 0x6EC9, 0x6EB7,
- 0x6EB0, 0x6ECD, 0x6EA6, 0x6ECF, 0x6EB2, 0x6EBE, 0x6EC3, 0x6EDC,
- 0x6ED8, 0x6E99, 0x6E92, 0x6E8E, 0x6E8D, 0x6EA4, 0x6EA1, 0x6EBF,
- 0x6EB3, 0x6ED0, 0x6ECA, 0x6E97, 0x6EAE, 0x6EA3, 0x7147, 0x7154,
- 0x7152, 0x7163, 0x7160, 0x7141, 0x715D, 0x7162, 0x7172, 0x7178,
- 0x716A, 0x7161, 0x7142, 0x7158, 0x7143, 0x714B, 0x7170, 0x715F,
- 0x7150, 0x7153, 0x7144, 0x714D, 0x715A, 0x724F, 0x728D, 0x728C,
- 0x7291, 0x7290, 0x728E, 0x733C, 0x7342, 0x733B, 0x733A, 0x7340,
- 0x734A, 0x7349, 0x7444, 0x744A, 0x744B, 0x7452, 0x7451, 0x7457,
- 0x7440, 0x744F, 0x7450, 0x744E, 0x7442, 0x7446, 0x744D, 0x7454,
- 0x74E1, 0x74FF, 0x74FE, 0x74FD, 0x751D, 0x7579, 0x7577, 0x6983,
- 0x75EF, 0x760F, 0x7603, 0x75F7, 0x75FE, 0x75FC, 0x75F9, 0x75F8,
- 0x7610, 0x75FB, 0x75F6, 0x75ED, 0x75F5, 0x75FD, 0x7699, 0x76B5,
- 0x76DD, 0x7755, 0x775F, 0x7760, 0x7752, 0x7756, 0x775A, 0x7769,
- 0x7767, 0x7754, 0x7759, 0x776D, 0x77E0, 0x7887, 0x789A, 0x7894,
- 0x788F, 0x7884, 0x7895, 0x7885, 0x7886, 0x78A1, 0x7883, 0x7879,
- 0x7899, 0x7880, 0x7896, 0x787B, 0x797C, 0x7982, 0x797D, 0x7979,
- 0x7A11, 0x7A18, 0x7A19, 0x7A12, 0x7A17, 0x7A15, 0x7A22, 0x7A13,
- 0x7A1B, 0x7A10, 0x7AA3, 0x7AA2, 0x7A9E, 0x7AEB, 0x7B66, 0x7B64,
- 0x7B6D, 0x7B74, 0x7B69, 0x7B72, 0x7B65, 0x7B73, 0x7B71, 0x7B70,
- 0x7B61, 0x7B78, 0x7B76, 0x7B63, 0x7CB2, 0x7CB4, 0x7CAF, 0x7D88,
- 0x7D86, 0x7D80, 0x7D8D, 0x7D7F, 0x7D85, 0x7D7A, 0x7D8E, 0x7D7B,
- 0x7D83, 0x7D7C, 0x7D8C, 0x7D94, 0x7D84, 0x7D7D, 0x7D92, 0x7F6D,
- 0x7F6B, 0x7F67, 0x7F68, 0x7F6C, 0x7FA6, 0x7FA5, 0x7FA7, 0x7FDB,
- 0x7FDC, 0x8021, 0x8164, 0x8160, 0x8177, 0x815C, 0x8169, 0x815B,
- 0x8162, 0x8172, 0x6721, 0x815E, 0x8176, 0x8167, 0x816F, 0x8144,
- 0x8161, 0x821D, 0x8249, 0x8244, 0x8240, 0x8242, 0x8245, 0x84F1,
- 0x843F, 0x8456, 0x8476, 0x8479, 0x848F, 0x848D, 0x8465, 0x8451,
- 0x8440, 0x8486, 0x8467, 0x8430, 0x844D, 0x847D, 0x845A, 0x8459,
- 0x8474, 0x8473, 0x845D, 0x8507, 0x845E, 0x8437, 0x843A, 0x8434,
- 0x847A, 0x8443, 0x8478, 0x8432, 0x8445, 0x8429, 0x83D9, 0x844B,
- 0x842F, 0x8442, 0x842D, 0x845F, 0x8470, 0x8439, 0x844E, 0x844C,
- 0x8452, 0x846F, 0x84C5, 0x848E, 0x843B, 0x8447, 0x8436, 0x8433,
- 0x8468, 0x847E, 0x8444, 0x842B, 0x8460, 0x8454, 0x846E, 0x8450,
- 0x870B, 0x8704, 0x86F7, 0x870C, 0x86FA, 0x86D6, 0x86F5, 0x874D,
- 0x86F8, 0x870E, 0x8709, 0x8701, 0x86F6, 0x870D, 0x8705, 0x88D6,
- 0x88CB, 0x88CD, 0x88CE, 0x88DE, 0x88DB, 0x88DA, 0x88CC, 0x88D0,
- 0x8985, 0x899B, 0x89DF, 0x89E5, 0x89E4, 0x89E1, 0x89E0, 0x89E2,
- 0x89DC, 0x89E6, 0x8A76, 0x8A86, 0x8A7F, 0x8A61, 0x8A3F, 0x8A77,
- 0x8A82, 0x8A84, 0x8A75, 0x8A83, 0x8A81, 0x8A74, 0x8A7A, 0x8C3C,
- 0x8C4B, 0x8C4A, 0x8C65, 0x8C64, 0x8C66, 0x8C86, 0x8C84, 0x8C85,
- 0x8CCC, 0x8D68, 0x8D69, 0x8D91, 0x8D8C, 0x8D8E, 0x8D8F, 0x8D8D,
- 0x8D93, 0x8D94, 0x8D90, 0x8D92, 0x8DF0, 0x8DE0, 0x8DEC, 0x8DF1,
- 0x8DEE, 0x8DD0, 0x8DE9, 0x8DE3, 0x8DE2, 0x8DE7, 0x8DF2, 0x8DEB,
- 0x8DF4, 0x8F06, 0x8EFF, 0x8F01, 0x8F00, 0x8F05, 0x8F07, 0x8F08,
- 0x8F02, 0x8F0B, 0x9052, 0x903F, 0x9044, 0x9049, 0x903D, 0x9110,
- 0x910D, 0x910F, 0x9111, 0x9116, 0x9114, 0x910B, 0x910E, 0x916E,
- 0x916F, 0x9248, 0x9252, 0x9230, 0x923A, 0x9266, 0x9233, 0x9265,
- 0x925E, 0x9283, 0x922E, 0x924A, 0x9246, 0x926D, 0x926C, 0x924F,
- 0x9260, 0x9267, 0x926F, 0x9236, 0x9261, 0x9270, 0x9231, 0x9254,
- 0x9263, 0x9250, 0x9272, 0x924E, 0x9253, 0x924C, 0x9256, 0x9232,
- 0x959F, 0x959C, 0x959E, 0x959B, 0x9692, 0x9693, 0x9691, 0x9697,
- 0x96CE, 0x96FA, 0x96FD, 0x96F8, 0x96F5, 0x9773, 0x9777, 0x9778,
- 0x9772, 0x980F, 0x980D, 0x980E, 0x98AC, 0x98F6, 0x98F9, 0x99AF,
- 0x99B2, 0x99B0, 0x99B5, 0x9AAD, 0x9AAB, 0x9B5B, 0x9CEA, 0x9CED,
- 0x9CE7, 0x9E80, 0x9EFD, 0x50E6, 0x50D4, 0x50D7, 0x50E8, 0x50F3,
- 0x50DB, 0x50EA, 0x50DD, 0x50E4, 0x50D3, 0x50EC, 0x50F0, 0x50EF,
- 0x50E3, 0x50E0, 0x51D8, 0x5280, 0x5281, 0x52E9, 0x52EB, 0x5330,
- 0x53AC, 0x5627, 0x5615, 0x560C, 0x5612, 0x55FC, 0x560F, 0x561C,
- 0x5601, 0x5613, 0x5602, 0x55FA, 0x561D, 0x5604, 0x55FF, 0x55F9,
- 0x5889, 0x587C, 0x5890, 0x5898, 0x5886, 0x5881, 0x587F, 0x5874,
- 0x588B, 0x587A, 0x5887, 0x5891, 0x588E, 0x5876, 0x5882, 0x5888,
- 0x587B, 0x5894, 0x588F, 0x58FE, 0x596B, 0x5ADC, 0x5AEE, 0x5AE5,
- 0x5AD5, 0x5AEA, 0x5ADA, 0x5AED, 0x5AEB, 0x5AF3, 0x5AE2, 0x5AE0,
- 0x5ADB, 0x5AEC, 0x5ADE, 0x5ADD, 0x5AD9, 0x5AE8, 0x5ADF, 0x5B77,
- 0x5BE0, 0x5BE3, 0x5C63, 0x5D82, 0x5D80, 0x5D7D, 0x5D86, 0x5D7A,
- 0x5D81, 0x5D77, 0x5D8A, 0x5D89, 0x5D88, 0x5D7E, 0x5D7C, 0x5D8D,
- 0x5D79, 0x5D7F, 0x5E58, 0x5E59, 0x5E53, 0x5ED8, 0x5ED1, 0x5ED7,
- 0x5ECE, 0x5EDC, 0x5ED5, 0x5ED9, 0x5ED2, 0x5ED4, 0x5F44, 0x5F43,
- 0x5F6F, 0x5FB6, 0x612C, 0x6128, 0x6141, 0x615E, 0x6171, 0x6173,
- 0x6152, 0x6153, 0x6172, 0x616C, 0x6180, 0x6174, 0x6154, 0x617A,
- 0x615B, 0x6165, 0x613B, 0x616A, 0x6161, 0x6156, 0x6229, 0x6227,
- 0x622B, 0x642B, 0x644D, 0x645B, 0x645D, 0x6474, 0x6476, 0x6472,
- 0x6473, 0x647D, 0x6475, 0x6466, 0x64A6, 0x644E, 0x6482, 0x645E,
- 0x645C, 0x644B, 0x6453, 0x6460, 0x6450, 0x647F, 0x643F, 0x646C,
- 0x646B, 0x6459, 0x6465, 0x6477, 0x6573, 0x65A0, 0x66A1, 0x66A0,
- 0x669F, 0x6705, 0x6704, 0x6722, 0x69B1, 0x69B6, 0x69C9, 0x69A0,
- 0x69CE, 0x6996, 0x69B0, 0x69AC, 0x69BC, 0x6991, 0x6999, 0x698E,
- 0x69A7, 0x698D, 0x69A9, 0x69BE, 0x69AF, 0x69BF, 0x69C4, 0x69BD,
- 0x69A4, 0x69D4, 0x69B9, 0x69CA, 0x699A, 0x69CF, 0x69B3, 0x6993,
- 0x69AA, 0x69A1, 0x699E, 0x69D9, 0x6997, 0x6990, 0x69C2, 0x69B5,
- 0x69A5, 0x69C6, 0x6B4A, 0x6B4D, 0x6B4B, 0x6B9E, 0x6B9F, 0x6BA0,
- 0x6BC3, 0x6BC4, 0x6BFE, 0x6ECE, 0x6EF5, 0x6EF1, 0x6F03, 0x6F25,
- 0x6EF8, 0x6F37, 0x6EFB, 0x6F2E, 0x6F09, 0x6F4E, 0x6F19, 0x6F1A,
- 0x6F27, 0x6F18, 0x6F3B, 0x6F12, 0x6EED, 0x6F0A, 0x6F36, 0x6F73,
- 0x6EF9, 0x6EEE, 0x6F2D, 0x6F40, 0x6F30, 0x6F3C, 0x6F35, 0x6EEB,
- 0x6F07, 0x6F0E, 0x6F43, 0x6F05, 0x6EFD, 0x6EF6, 0x6F39, 0x6F1C,
- 0x6EFC, 0x6F3A, 0x6F1F, 0x6F0D, 0x6F1E, 0x6F08, 0x6F21, 0x7187,
- 0x7190, 0x7189, 0x7180, 0x7185, 0x7182, 0x718F, 0x717B, 0x7186,
- 0x7181, 0x7197, 0x7244, 0x7253, 0x7297, 0x7295, 0x7293, 0x7343,
- 0x734D, 0x7351, 0x734C, 0x7462, 0x7473, 0x7471, 0x7475, 0x7472,
- 0x7467, 0x746E, 0x7500, 0x7502, 0x7503, 0x757D, 0x7590, 0x7616,
- 0x7608, 0x760C, 0x7615, 0x7611, 0x760A, 0x7614, 0x76B8, 0x7781,
- 0x777C, 0x7785, 0x7782, 0x776E, 0x7780, 0x776F, 0x777E, 0x7783,
- 0x78B2, 0x78AA, 0x78B4, 0x78AD, 0x78A8, 0x787E, 0x78AB, 0x789E,
- 0x78A5, 0x78A0, 0x78AC, 0x78A2, 0x78A4, 0x7998, 0x798A, 0x798B,
- 0x7996, 0x7995, 0x7994, 0x7993, 0x7997, 0x7988, 0x7992, 0x7990,
- 0x7A2B, 0x7A4A, 0x7A30, 0x7A2F, 0x7A28, 0x7A26, 0x7AA8, 0x7AAB,
- 0x7AAC, 0x7AEE, 0x7B88, 0x7B9C, 0x7B8A, 0x7B91, 0x7B90, 0x7B96,
- 0x7B8D, 0x7B8C, 0x7B9B, 0x7B8E, 0x7B85, 0x7B98, 0x5284, 0x7B99,
- 0x7BA4, 0x7B82, 0x7CBB, 0x7CBF, 0x7CBC, 0x7CBA, 0x7DA7, 0x7DB7,
- 0x7DC2, 0x7DA3, 0x7DAA, 0x7DC1, 0x7DC0, 0x7DC5, 0x7D9D, 0x7DCE,
- 0x7DC4, 0x7DC6, 0x7DCB, 0x7DCC, 0x7DAF, 0x7DB9, 0x7D96, 0x7DBC,
- 0x7D9F, 0x7DA6, 0x7DAE, 0x7DA9, 0x7DA1, 0x7DC9, 0x7F73, 0x7FE2,
- 0x7FE3, 0x7FE5, 0x7FDE, 0x8024, 0x805D, 0x805C, 0x8189, 0x8186,
- 0x8183, 0x8187, 0x818D, 0x818C, 0x818B, 0x8215, 0x8497, 0x84A4,
- 0x84A1, 0x849F, 0x84BA, 0x84CE, 0x84C2, 0x84AC, 0x84AE, 0x84AB,
- 0x84B9, 0x84B4, 0x84C1, 0x84CD, 0x84AA, 0x849A, 0x84B1, 0x84D0,
- 0x849D, 0x84A7, 0x84BB, 0x84A2, 0x8494, 0x84C7, 0x84CC, 0x849B,
- 0x84A9, 0x84AF, 0x84A8, 0x84D6, 0x8498, 0x84B6, 0x84CF, 0x84A0,
- 0x84D7, 0x84D4, 0x84D2, 0x84DB, 0x84B0, 0x8491, 0x8661, 0x8733,
- 0x8723, 0x8728, 0x876B, 0x8740, 0x872E, 0x871E, 0x8721, 0x8719,
- 0x871B, 0x8743, 0x872C, 0x8741, 0x873E, 0x8746, 0x8720, 0x8732,
- 0x872A, 0x872D, 0x873C, 0x8712, 0x873A, 0x8731, 0x8735, 0x8742,
- 0x8726, 0x8727, 0x8738, 0x8724, 0x871A, 0x8730, 0x8711, 0x88F7,
- 0x88E7, 0x88F1, 0x88F2, 0x88FA, 0x88FE, 0x88EE, 0x88FC, 0x88F6,
- 0x88FB, 0x88F0, 0x88EC, 0x88EB, 0x899D, 0x89A1, 0x899F, 0x899E,
- 0x89E9, 0x89EB, 0x89E8, 0x8AAB, 0x8A99, 0x8A8B, 0x8A92, 0x8A8F,
- 0x8A96, 0x8C3D, 0x8C68, 0x8C69, 0x8CD5, 0x8CCF, 0x8CD7, 0x8D96,
- 0x8E09, 0x8E02, 0x8DFF, 0x8E0D, 0x8DFD, 0x8E0A, 0x8E03, 0x8E07,
- 0x8E06, 0x8E05, 0x8DFE, 0x8E00, 0x8E04, 0x8F10, 0x8F11, 0x8F0E,
- 0x8F0D, 0x9123, 0x911C, 0x9120, 0x9122, 0x911F, 0x911D, 0x911A,
- 0x9124, 0x9121, 0x911B, 0x917A, 0x9172, 0x9179, 0x9173, 0x92A5,
- 0x92A4, 0x9276, 0x929B, 0x927A, 0x92A0, 0x9294, 0x92AA, 0x928D,
- 0x92A6, 0x929A, 0x92AB, 0x9279, 0x9297, 0x927F, 0x92A3, 0x92EE,
- 0x928E, 0x9282, 0x9295, 0x92A2, 0x927D, 0x9288, 0x92A1, 0x928A,
- 0x9286, 0x928C, 0x9299, 0x92A7, 0x927E, 0x9287, 0x92A9, 0x929D,
- 0x928B, 0x922D, 0x969E, 0x96A1, 0x96FF, 0x9758, 0x977D, 0x977A,
- 0x977E, 0x9783, 0x9780, 0x9782, 0x977B, 0x9784, 0x9781, 0x977F,
- 0x97CE, 0x97CD, 0x9816, 0x98AD, 0x98AE, 0x9902, 0x9900, 0x9907,
- 0x999D, 0x999C, 0x99C3, 0x99B9, 0x99BB, 0x99BA, 0x99C2, 0x99BD,
- 0x99C7, 0x9AB1, 0x9AE3, 0x9AE7, 0x9B3E, 0x9B3F, 0x9B60, 0x9B61,
- 0x9B5F, 0x9CF1, 0x9CF2, 0x9CF5, 0x9EA7, 0x50FF, 0x5103, 0x5130,
- 0x50F8, 0x5106, 0x5107, 0x50F6, 0x50FE, 0x510B, 0x510C, 0x50FD,
- 0x510A, 0x528B, 0x528C, 0x52F1, 0x52EF, 0x5648, 0x5642, 0x564C,
- 0x5635, 0x5641, 0x564A, 0x5649, 0x5646, 0x5658, 0x565A, 0x5640,
- 0x5633, 0x563D, 0x562C, 0x563E, 0x5638, 0x562A, 0x563A, 0x571A,
- 0x58AB, 0x589D, 0x58B1, 0x58A0, 0x58A3, 0x58AF, 0x58AC, 0x58A5,
- 0x58A1, 0x58FF, 0x5AFF, 0x5AF4, 0x5AFD, 0x5AF7, 0x5AF6, 0x5B03,
- 0x5AF8, 0x5B02, 0x5AF9, 0x5B01, 0x5B07, 0x5B05, 0x5B0F, 0x5C67,
- 0x5D99, 0x5D97, 0x5D9F, 0x5D92, 0x5DA2, 0x5D93, 0x5D95, 0x5DA0,
- 0x5D9C, 0x5DA1, 0x5D9A, 0x5D9E, 0x5E69, 0x5E5D, 0x5E60, 0x5E5C,
- 0x7DF3, 0x5EDB, 0x5EDE, 0x5EE1, 0x5F49, 0x5FB2, 0x618B, 0x6183,
- 0x6179, 0x61B1, 0x61B0, 0x61A2, 0x6189, 0x619B, 0x6193, 0x61AF,
- 0x61AD, 0x619F, 0x6192, 0x61AA, 0x61A1, 0x618D, 0x6166, 0x61B3,
- 0x622D, 0x646E, 0x6470, 0x6496, 0x64A0, 0x6485, 0x6497, 0x649C,
- 0x648F, 0x648B, 0x648A, 0x648C, 0x64A3, 0x649F, 0x6468, 0x64B1,
- 0x6498, 0x6576, 0x657A, 0x6579, 0x657B, 0x65B2, 0x65B3, 0x66B5,
- 0x66B0, 0x66A9, 0x66B2, 0x66B7, 0x66AA, 0x66AF, 0x6A00, 0x6A06,
- 0x6A17, 0x69E5, 0x69F8, 0x6A15, 0x69F1, 0x69E4, 0x6A20, 0x69FF,
- 0x69EC, 0x69E2, 0x6A1B, 0x6A1D, 0x69FE, 0x6A27, 0x69F2, 0x69EE,
- 0x6A14, 0x69F7, 0x69E7, 0x6A40, 0x6A08, 0x69E6, 0x69FB, 0x6A0D,
- 0x69FC, 0x69EB, 0x6A09, 0x6A04, 0x6A18, 0x6A25, 0x6A0F, 0x69F6,
- 0x6A26, 0x6A07, 0x69F4, 0x6A16, 0x6B51, 0x6BA5, 0x6BA3, 0x6BA2,
- 0x6BA6, 0x6C01, 0x6C00, 0x6BFF, 0x6C02, 0x6F41, 0x6F26, 0x6F7E,
- 0x6F87, 0x6FC6, 0x6F92, 0x6F8D, 0x6F89, 0x6F8C, 0x6F62, 0x6F4F,
- 0x6F85, 0x6F5A, 0x6F96, 0x6F76, 0x6F6C, 0x6F82, 0x6F55, 0x6F72,
- 0x6F52, 0x6F50, 0x6F57, 0x6F94, 0x6F93, 0x6F5D, 0x6F00, 0x6F61,
- 0x6F6B, 0x6F7D, 0x6F67, 0x6F90, 0x6F53, 0x6F8B, 0x6F69, 0x6F7F,
- 0x6F95, 0x6F63, 0x6F77, 0x6F6A, 0x6F7B, 0x71B2, 0x71AF, 0x719B,
- 0x71B0, 0x71A0, 0x719A, 0x71A9, 0x71B5, 0x719D, 0x71A5, 0x719E,
- 0x71A4, 0x71A1, 0x71AA, 0x719C, 0x71A7, 0x71B3, 0x7298, 0x729A,
- 0x7358, 0x7352, 0x735E, 0x735F, 0x7360, 0x735D, 0x735B, 0x7361,
- 0x735A, 0x7359, 0x7362, 0x7487, 0x7489, 0x748A, 0x7486, 0x7481,
- 0x747D, 0x7485, 0x7488, 0x747C, 0x7479, 0x7508, 0x7507, 0x757E,
- 0x7625, 0x761E, 0x7619, 0x761D, 0x761C, 0x7623, 0x761A, 0x7628,
- 0x761B, 0x769C, 0x769D, 0x769E, 0x769B, 0x778D, 0x778F, 0x7789,
- 0x7788, 0x78CD, 0x78BB, 0x78CF, 0x78CC, 0x78D1, 0x78CE, 0x78D4,
- 0x78C8, 0x78C3, 0x78C4, 0x78C9, 0x799A, 0x79A1, 0x79A0, 0x799C,
- 0x79A2, 0x799B, 0x6B76, 0x7A39, 0x7AB2, 0x7AB4, 0x7AB3, 0x7BB7,
- 0x7BCB, 0x7BBE, 0x7BAC, 0x7BCE, 0x7BAF, 0x7BB9, 0x7BCA, 0x7BB5,
- 0x7CC5, 0x7CC8, 0x7CCC, 0x7CCB, 0x7DF7, 0x7DDB, 0x7DEA, 0x7DE7,
- 0x7DD7, 0x7DE1, 0x7E03, 0x7DFA, 0x7DE6, 0x7DF6, 0x7DF1, 0x7DF0,
- 0x7DEE, 0x7DDF, 0x7F76, 0x7FAC, 0x7FB0, 0x7FAD, 0x7FED, 0x7FEB,
- 0x7FEA, 0x7FEC, 0x7FE6, 0x7FE8, 0x8064, 0x8067, 0x81A3, 0x819F,
- 0x819E, 0x8195, 0x81A2, 0x8199, 0x8197, 0x8216, 0x824F, 0x8253,
- 0x8252, 0x8250, 0x824E, 0x8251, 0x8524, 0x853B, 0x850F, 0x8500,
- 0x8529, 0x850E, 0x8509, 0x850D, 0x851F, 0x850A, 0x8527, 0x851C,
- 0x84FB, 0x852B, 0x84FA, 0x8508, 0x850C, 0x84F4, 0x852A, 0x84F2,
- 0x8515, 0x84F7, 0x84EB, 0x84F3, 0x84FC, 0x8512, 0x84EA, 0x84E9,
- 0x8516, 0x84FE, 0x8528, 0x851D, 0x852E, 0x8502, 0x84FD, 0x851E,
- 0x84F6, 0x8531, 0x8526, 0x84E7, 0x84E8, 0x84F0, 0x84EF, 0x84F9,
- 0x8518, 0x8520, 0x8530, 0x850B, 0x8519, 0x852F, 0x8662, 0x8756,
- 0x8763, 0x8764, 0x8777, 0x87E1, 0x8773, 0x8758, 0x8754, 0x875B,
- 0x8752, 0x8761, 0x875A, 0x8751, 0x875E, 0x876D, 0x876A, 0x8750,
- 0x874E, 0x875F, 0x875D, 0x876F, 0x876C, 0x877A, 0x876E, 0x875C,
- 0x8765, 0x874F, 0x877B, 0x8775, 0x8762, 0x8767, 0x8769, 0x885A,
- 0x8905, 0x890C, 0x8914, 0x890B, 0x8917, 0x8918, 0x8919, 0x8906,
- 0x8916, 0x8911, 0x890E, 0x8909, 0x89A2, 0x89A4, 0x89A3, 0x89ED,
- 0x89F0, 0x89EC, 0x8ACF, 0x8AC6, 0x8AB8, 0x8AD3, 0x8AD1, 0x8AD4,
- 0x8AD5, 0x8ABB, 0x8AD7, 0x8ABE, 0x8AC0, 0x8AC5, 0x8AD8, 0x8AC3,
- 0x8ABA, 0x8ABD, 0x8AD9, 0x8C3E, 0x8C4D, 0x8C8F, 0x8CE5, 0x8CDF,
- 0x8CD9, 0x8CE8, 0x8CDA, 0x8CDD, 0x8CE7, 0x8DA0, 0x8D9C, 0x8DA1,
- 0x8D9B, 0x8E20, 0x8E23, 0x8E25, 0x8E24, 0x8E2E, 0x8E15, 0x8E1B,
- 0x8E16, 0x8E11, 0x8E19, 0x8E26, 0x8E27, 0x8E14, 0x8E12, 0x8E18,
- 0x8E13, 0x8E1C, 0x8E17, 0x8E1A, 0x8F2C, 0x8F24, 0x8F18, 0x8F1A,
- 0x8F20, 0x8F23, 0x8F16, 0x8F17, 0x9073, 0x9070, 0x906F, 0x9067,
- 0x906B, 0x912F, 0x912B, 0x9129, 0x912A, 0x9132, 0x9126, 0x912E,
- 0x9185, 0x9186, 0x918A, 0x9181, 0x9182, 0x9184, 0x9180, 0x92D0,
- 0x92C3, 0x92C4, 0x92C0, 0x92D9, 0x92B6, 0x92CF, 0x92F1, 0x92DF,
- 0x92D8, 0x92E9, 0x92D7, 0x92DD, 0x92CC, 0x92EF, 0x92C2, 0x92E8,
- 0x92CA, 0x92C8, 0x92CE, 0x92E6, 0x92CD, 0x92D5, 0x92C9, 0x92E0,
- 0x92DE, 0x92E7, 0x92D1, 0x92D3, 0x92B5, 0x92E1, 0x9325, 0x92C6,
- 0x92B4, 0x957C, 0x95AC, 0x95AB, 0x95AE, 0x95B0, 0x96A4, 0x96A2,
- 0x96D3, 0x9705, 0x9708, 0x9702, 0x975A, 0x978A, 0x978E, 0x9788,
- 0x97D0, 0x97CF, 0x981E, 0x981D, 0x9826, 0x9829, 0x9828, 0x9820,
- 0x981B, 0x9827, 0x98B2, 0x9908, 0x98FA, 0x9911, 0x9914, 0x9916,
- 0x9917, 0x9915, 0x99DC, 0x99CD, 0x99CF, 0x99D3, 0x99D4, 0x99CE,
- 0x99C9, 0x99D6, 0x99D8, 0x99CB, 0x99D7, 0x99CC, 0x9AB3, 0x9AEC,
- 0x9AEB, 0x9AF3, 0x9AF2, 0x9AF1, 0x9B46, 0x9B43, 0x9B67, 0x9B74,
- 0x9B71, 0x9B66, 0x9B76, 0x9B75, 0x9B70, 0x9B68, 0x9B64, 0x9B6C,
- 0x9CFC, 0x9CFA, 0x9CFD, 0x9CFF, 0x9CF7, 0x9D07, 0x9D00, 0x9CF9,
- 0x9CFB, 0x9D08, 0x9D05, 0x9D04, 0x9E83, 0x9ED3, 0x9F0F, 0x9F10,
- 0x511C, 0x5113, 0x5117, 0x511A, 0x5111, 0x51DE, 0x5334, 0x53E1,
- 0x5670, 0x5660, 0x566E, 0x5673, 0x5666, 0x5663, 0x566D, 0x5672,
- 0x565E, 0x5677, 0x571C, 0x571B, 0x58C8, 0x58BD, 0x58C9, 0x58BF,
- 0x58BA, 0x58C2, 0x58BC, 0x58C6, 0x5B17, 0x5B19, 0x5B1B, 0x5B21,
- 0x5B14, 0x5B13, 0x5B10, 0x5B16, 0x5B28, 0x5B1A, 0x5B20, 0x5B1E,
- 0x5BEF, 0x5DAC, 0x5DB1, 0x5DA9, 0x5DA7, 0x5DB5, 0x5DB0, 0x5DAE,
- 0x5DAA, 0x5DA8, 0x5DB2, 0x5DAD, 0x5DAF, 0x5DB4, 0x5E67, 0x5E68,
- 0x5E66, 0x5E6F, 0x5EE9, 0x5EE7, 0x5EE6, 0x5EE8, 0x5EE5, 0x5F4B,
- 0x5FBC, 0x5FBB, 0x619D, 0x61A8, 0x6196, 0x61C5, 0x61B4, 0x61C6,
- 0x61C1, 0x61CC, 0x61BA, 0x61BF, 0x61B8, 0x618C, 0x64D7, 0x64D6,
- 0x64D0, 0x64CF, 0x64C9, 0x64BD, 0x6489, 0x64C3, 0x64DB, 0x64F3,
- 0x64D9, 0x6533, 0x657F, 0x657C, 0x65A2, 0x66C8, 0x66BE, 0x66C0,
- 0x66CA, 0x66CB, 0x66CF, 0x66BD, 0x66BB, 0x66BA, 0x66CC, 0x6723,
- 0x6A34, 0x6A66, 0x6A49, 0x6A67, 0x6A32, 0x6A68, 0x6A3E, 0x6A5D,
- 0x6A6D, 0x6A76, 0x6A5B, 0x6A51, 0x6A28, 0x6A5A, 0x6A3B, 0x6A3F,
- 0x6A41, 0x6A6A, 0x6A64, 0x6A50, 0x6A4F, 0x6A54, 0x6A6F, 0x6A69,
- 0x6A60, 0x6A3C, 0x6A5E, 0x6A56, 0x6A55, 0x6A4D, 0x6A4E, 0x6A46,
- 0x6B55, 0x6B54, 0x6B56, 0x6BA7, 0x6BAA, 0x6BAB, 0x6BC8, 0x6BC7,
- 0x6C04, 0x6C03, 0x6C06, 0x6FAD, 0x6FCB, 0x6FA3, 0x6FC7, 0x6FBC,
- 0x6FCE, 0x6FC8, 0x6F5E, 0x6FC4, 0x6FBD, 0x6F9E, 0x6FCA, 0x6FA8,
- 0x7004, 0x6FA5, 0x6FAE, 0x6FBA, 0x6FAC, 0x6FAA, 0x6FCF, 0x6FBF,
- 0x6FB8, 0x6FA2, 0x6FC9, 0x6FAB, 0x6FCD, 0x6FAF, 0x6FB2, 0x6FB0,
- 0x71C5, 0x71C2, 0x71BF, 0x71B8, 0x71D6, 0x71C0, 0x71C1, 0x71CB,
- 0x71D4, 0x71CA, 0x71C7, 0x71CF, 0x71BD, 0x71D8, 0x71BC, 0x71C6,
- 0x71DA, 0x71DB, 0x729D, 0x729E, 0x7369, 0x7366, 0x7367, 0x736C,
- 0x7365, 0x736B, 0x736A, 0x747F, 0x749A, 0x74A0, 0x7494, 0x7492,
- 0x7495, 0x74A1, 0x750B, 0x7580, 0x762F, 0x762D, 0x7631, 0x763D,
- 0x7633, 0x763C, 0x7635, 0x7632, 0x7630, 0x76BB, 0x76E6, 0x779A,
- 0x779D, 0x77A1, 0x779C, 0x779B, 0x77A2, 0x77A3, 0x7795, 0x7799,
- 0x7797, 0x78DD, 0x78E9, 0x78E5, 0x78EA, 0x78DE, 0x78E3, 0x78DB,
- 0x78E1, 0x78E2, 0x78ED, 0x78DF, 0x78E0, 0x79A4, 0x7A44, 0x7A48,
- 0x7A47, 0x7AB6, 0x7AB8, 0x7AB5, 0x7AB1, 0x7AB7, 0x7BDE, 0x7BE3,
- 0x7BE7, 0x7BDD, 0x7BD5, 0x7BE5, 0x7BDA, 0x7BE8, 0x7BF9, 0x7BD4,
- 0x7BEA, 0x7BE2, 0x7BDC, 0x7BEB, 0x7BD8, 0x7BDF, 0x7CD2, 0x7CD4,
- 0x7CD7, 0x7CD0, 0x7CD1, 0x7E12, 0x7E21, 0x7E17, 0x7E0C, 0x7E1F,
- 0x7E20, 0x7E13, 0x7E0E, 0x7E1C, 0x7E15, 0x7E1A, 0x7E22, 0x7E0B,
- 0x7E0F, 0x7E16, 0x7E0D, 0x7E14, 0x7E25, 0x7E24, 0x7F43, 0x7F7B,
- 0x7F7C, 0x7F7A, 0x7FB1, 0x7FEF, 0x802A, 0x8029, 0x806C, 0x81B1,
- 0x81A6, 0x81AE, 0x81B9, 0x81B5, 0x81AB, 0x81B0, 0x81AC, 0x81B4,
- 0x81B2, 0x81B7, 0x81A7, 0x81F2, 0x8255, 0x8256, 0x8257, 0x8556,
- 0x8545, 0x856B, 0x854D, 0x8553, 0x8561, 0x8558, 0x8540, 0x8546,
- 0x8564, 0x8541, 0x8562, 0x8544, 0x8551, 0x8547, 0x8563, 0x853E,
- 0x855B, 0x8571, 0x854E, 0x856E, 0x8575, 0x8555, 0x8567, 0x8560,
- 0x858C, 0x8566, 0x855D, 0x8554, 0x8565, 0x856C, 0x8663, 0x8665,
- 0x8664, 0x87A4, 0x879B, 0x878F, 0x8797, 0x8793, 0x8792, 0x8788,
- 0x8781, 0x8796, 0x8798, 0x8779, 0x8787, 0x87A3, 0x8785, 0x8790,
- 0x8791, 0x879D, 0x8784, 0x8794, 0x879C, 0x879A, 0x8789, 0x891E,
- 0x8926, 0x8930, 0x892D, 0x892E, 0x8927, 0x8931, 0x8922, 0x8929,
- 0x8923, 0x892F, 0x892C, 0x891F, 0x89F1, 0x8AE0, 0x8AE2, 0x8AF2,
- 0x8AF4, 0x8AF5, 0x8ADD, 0x8B14, 0x8AE4, 0x8ADF, 0x8AF0, 0x8AC8,
- 0x8ADE, 0x8AE1, 0x8AE8, 0x8AFF, 0x8AEF, 0x8AFB, 0x8C91, 0x8C92,
- 0x8C90, 0x8CF5, 0x8CEE, 0x8CF1, 0x8CF0, 0x8CF3, 0x8D6C, 0x8D6E,
- 0x8DA5, 0x8DA7, 0x8E33, 0x8E3E, 0x8E38, 0x8E40, 0x8E45, 0x8E36,
- 0x8E3C, 0x8E3D, 0x8E41, 0x8E30, 0x8E3F, 0x8EBD, 0x8F36, 0x8F2E,
- 0x8F35, 0x8F32, 0x8F39, 0x8F37, 0x8F34, 0x9076, 0x9079, 0x907B,
- 0x9086, 0x90FA, 0x9133, 0x9135, 0x9136, 0x9193, 0x9190, 0x9191,
- 0x918D, 0x918F, 0x9327, 0x931E, 0x9308, 0x931F, 0x9306, 0x930F,
- 0x937A, 0x9338, 0x933C, 0x931B, 0x9323, 0x9312, 0x9301, 0x9346,
- 0x932D, 0x930E, 0x930D, 0x92CB, 0x931D, 0x92FA, 0x9313, 0x92F9,
- 0x92F7, 0x9334, 0x9302, 0x9324, 0x92FF, 0x9329, 0x9339, 0x9335,
- 0x932A, 0x9314, 0x930C, 0x930B, 0x92FE, 0x9309, 0x9300, 0x92FB,
- 0x9316, 0x95BC, 0x95CD, 0x95BE, 0x95B9, 0x95BA, 0x95B6, 0x95BF,
- 0x95B5, 0x95BD, 0x96A9, 0x96D4, 0x970B, 0x9712, 0x9710, 0x9799,
- 0x9797, 0x9794, 0x97F0, 0x97F8, 0x9835, 0x982F, 0x9832, 0x9924,
- 0x991F, 0x9927, 0x9929, 0x999E, 0x99EE, 0x99EC, 0x99E5, 0x99E4,
- 0x99F0, 0x99E3, 0x99EA, 0x99E9, 0x99E7, 0x9AB9, 0x9ABF, 0x9AB4,
- 0x9ABB, 0x9AF6, 0x9AFA, 0x9AF9, 0x9AF7, 0x9B33, 0x9B80, 0x9B85,
- 0x9B87, 0x9B7C, 0x9B7E, 0x9B7B, 0x9B82, 0x9B93, 0x9B92, 0x9B90,
- 0x9B7A, 0x9B95, 0x9B7D, 0x9B88, 0x9D25, 0x9D17, 0x9D20, 0x9D1E,
- 0x9D14, 0x9D29, 0x9D1D, 0x9D18, 0x9D22, 0x9D10, 0x9D19, 0x9D1F,
- 0x9E88, 0x9E86, 0x9E87, 0x9EAE, 0x9EAD, 0x9ED5, 0x9ED6, 0x9EFA,
- 0x9F12, 0x9F3D, 0x5126, 0x5125, 0x5122, 0x5124, 0x5120, 0x5129,
- 0x52F4, 0x5693, 0x568C, 0x568D, 0x5686, 0x5684, 0x5683, 0x567E,
- 0x5682, 0x567F, 0x5681, 0x58D6, 0x58D4, 0x58CF, 0x58D2, 0x5B2D,
- 0x5B25, 0x5B32, 0x5B23, 0x5B2C, 0x5B27, 0x5B26, 0x5B2F, 0x5B2E,
- 0x5B7B, 0x5BF1, 0x5BF2, 0x5DB7, 0x5E6C, 0x5E6A, 0x5FBE, 0x61C3,
- 0x61B5, 0x61BC, 0x61E7, 0x61E0, 0x61E5, 0x61E4, 0x61E8, 0x61DE,
- 0x64EF, 0x64E9, 0x64E3, 0x64EB, 0x64E4, 0x64E8, 0x6581, 0x6580,
- 0x65B6, 0x65DA, 0x66D2, 0x6A8D, 0x6A96, 0x6A81, 0x6AA5, 0x6A89,
- 0x6A9F, 0x6A9B, 0x6AA1, 0x6A9E, 0x6A87, 0x6A93, 0x6A8E, 0x6A95,
- 0x6A83, 0x6AA8, 0x6AA4, 0x6A91, 0x6A7F, 0x6AA6, 0x6A9A, 0x6A85,
- 0x6A8C, 0x6A92, 0x6B5B, 0x6BAD, 0x6C09, 0x6FCC, 0x6FA9, 0x6FF4,
- 0x6FD4, 0x6FE3, 0x6FDC, 0x6FED, 0x6FE7, 0x6FE6, 0x6FDE, 0x6FF2,
- 0x6FDD, 0x6FE2, 0x6FE8, 0x71E1, 0x71F1, 0x71E8, 0x71F2, 0x71E4,
- 0x71F0, 0x71E2, 0x7373, 0x736E, 0x736F, 0x7497, 0x74B2, 0x74AB,
- 0x7490, 0x74AA, 0x74AD, 0x74B1, 0x74A5, 0x74AF, 0x7510, 0x7511,
- 0x7512, 0x750F, 0x7584, 0x7643, 0x7648, 0x7649, 0x7647, 0x76A4,
- 0x76E9, 0x77B5, 0x77AB, 0x77B2, 0x77B7, 0x77B6, 0x77B4, 0x77B1,
- 0x77A8, 0x77F0, 0x78F3, 0x78FD, 0x7902, 0x78FB, 0x78FC, 0x78FF,
- 0x78F2, 0x7905, 0x78F9, 0x78FE, 0x7904, 0x79AB, 0x79A8, 0x7A5C,
- 0x7A5B, 0x7A56, 0x7A58, 0x7A54, 0x7A5A, 0x7ABE, 0x7AC0, 0x7AC1,
- 0x7C05, 0x7C0F, 0x7BF2, 0x7C00, 0x7BFF, 0x7BFB, 0x7C0E, 0x7BF4,
- 0x7C0B, 0x7BF3, 0x7C02, 0x7C09, 0x7C03, 0x7C01, 0x7BF8, 0x7BFD,
- 0x7C06, 0x7BF0, 0x7BF1, 0x7C10, 0x7C0A, 0x7CE8, 0x7E2D, 0x7E3C,
- 0x7E42, 0x7E33, 0x9848, 0x7E38, 0x7E2A, 0x7E49, 0x7E40, 0x7E47,
- 0x7E29, 0x7E4C, 0x7E30, 0x7E3B, 0x7E36, 0x7E44, 0x7E3A, 0x7F45,
- 0x7F7F, 0x7F7E, 0x7F7D, 0x7FF4, 0x7FF2, 0x802C, 0x81BB, 0x81C4,
- 0x81CC, 0x81CA, 0x81C5, 0x81C7, 0x81BC, 0x81E9, 0x825B, 0x825A,
- 0x825C, 0x8583, 0x8580, 0x858F, 0x85A7, 0x8595, 0x85A0, 0x858B,
- 0x85A3, 0x857B, 0x85A4, 0x859A, 0x859E, 0x8577, 0x857C, 0x8589,
- 0x85A1, 0x857A, 0x8578, 0x8557, 0x858E, 0x8596, 0x8586, 0x858D,
- 0x8599, 0x859D, 0x8581, 0x85A2, 0x8582, 0x8588, 0x8585, 0x8579,
- 0x8576, 0x8598, 0x8590, 0x859F, 0x8668, 0x87BE, 0x87AA, 0x87AD,
- 0x87C5, 0x87B0, 0x87AC, 0x87B9, 0x87B5, 0x87BC, 0x87AE, 0x87C9,
- 0x87C3, 0x87C2, 0x87CC, 0x87B7, 0x87AF, 0x87C4, 0x87CA, 0x87B4,
- 0x87B6, 0x87BF, 0x87B8, 0x87BD, 0x87DE, 0x87B2, 0x8935, 0x8933,
- 0x893C, 0x893E, 0x8941, 0x8952, 0x8937, 0x8942, 0x89AD, 0x89AF,
- 0x89AE, 0x89F2, 0x89F3, 0x8B1E, 0x8B18, 0x8B16, 0x8B11, 0x8B05,
- 0x8B0B, 0x8B22, 0x8B0F, 0x8B12, 0x8B15, 0x8B07, 0x8B0D, 0x8B08,
- 0x8B06, 0x8B1C, 0x8B13, 0x8B1A, 0x8C4F, 0x8C70, 0x8C72, 0x8C71,
- 0x8C6F, 0x8C95, 0x8C94, 0x8CF9, 0x8D6F, 0x8E4E, 0x8E4D, 0x8E53,
- 0x8E50, 0x8E4C, 0x8E47, 0x8F43, 0x8F40, 0x9085, 0x907E, 0x9138,
- 0x919A, 0x91A2, 0x919B, 0x9199, 0x919F, 0x91A1, 0x919D, 0x91A0,
- 0x93A1, 0x9383, 0x93AF, 0x9364, 0x9356, 0x9347, 0x937C, 0x9358,
- 0x935C, 0x9376, 0x9349, 0x9350, 0x9351, 0x9360, 0x936D, 0x938F,
- 0x934C, 0x936A, 0x9379, 0x9357, 0x9355, 0x9352, 0x934F, 0x9371,
- 0x9377, 0x937B, 0x9361, 0x935E, 0x9363, 0x9367, 0x934E, 0x9359,
- 0x95C7, 0x95C0, 0x95C9, 0x95C3, 0x95C5, 0x95B7, 0x96AE, 0x96B0,
- 0x96AC, 0x9720, 0x971F, 0x9718, 0x971D, 0x9719, 0x979A, 0x97A1,
- 0x979C, 0x979E, 0x979D, 0x97D5, 0x97D4, 0x97F1, 0x9841, 0x9844,
- 0x984A, 0x9849, 0x9845, 0x9843, 0x9925, 0x992B, 0x992C, 0x992A,
- 0x9933, 0x9932, 0x992F, 0x992D, 0x9931, 0x9930, 0x9998, 0x99A3,
- 0x99A1, 0x9A02, 0x99FA, 0x99F4, 0x99F7, 0x99F9, 0x99F8, 0x99F6,
- 0x99FB, 0x99FD, 0x99FE, 0x99FC, 0x9A03, 0x9ABE, 0x9AFE, 0x9AFD,
- 0x9B01, 0x9AFC, 0x9B48, 0x9B9A, 0x9BA8, 0x9B9E, 0x9B9B, 0x9BA6,
- 0x9BA1, 0x9BA5, 0x9BA4, 0x9B86, 0x9BA2, 0x9BA0, 0x9BAF, 0x9D33,
- 0x9D41, 0x9D67, 0x9D36, 0x9D2E, 0x9D2F, 0x9D31, 0x9D38, 0x9D30,
- 0x9D45, 0x9D42, 0x9D43, 0x9D3E, 0x9D37, 0x9D40, 0x9D3D, 0x7FF5,
- 0x9D2D, 0x9E8A, 0x9E89, 0x9E8D, 0x9EB0, 0x9EC8, 0x9EDA, 0x9EFB,
- 0x9EFF, 0x9F24, 0x9F23, 0x9F22, 0x9F54, 0x9FA0, 0x5131, 0x512D,
- 0x512E, 0x5698, 0x569C, 0x5697, 0x569A, 0x569D, 0x5699, 0x5970,
- 0x5B3C, 0x5C69, 0x5C6A, 0x5DC0, 0x5E6D, 0x5E6E, 0x61D8, 0x61DF,
- 0x61ED, 0x61EE, 0x61F1, 0x61EA, 0x61F0, 0x61EB, 0x61D6, 0x61E9,
- 0x64FF, 0x6504, 0x64FD, 0x64F8, 0x6501, 0x6503, 0x64FC, 0x6594,
- 0x65DB, 0x66DA, 0x66DB, 0x66D8, 0x6AC5, 0x6AB9, 0x6ABD, 0x6AE1,
- 0x6AC6, 0x6ABA, 0x6AB6, 0x6AB7, 0x6AC7, 0x6AB4, 0x6AAD, 0x6B5E,
- 0x6BC9, 0x6C0B, 0x7007, 0x700C, 0x700D, 0x7001, 0x7005, 0x7014,
- 0x700E, 0x6FFF, 0x7000, 0x6FFB, 0x7026, 0x6FFC, 0x6FF7, 0x700A,
- 0x7201, 0x71FF, 0x71F9, 0x7203, 0x71FD, 0x7376, 0x74B8, 0x74C0,
- 0x74B5, 0x74C1, 0x74BE, 0x74B6, 0x74BB, 0x74C2, 0x7514, 0x7513,
- 0x765C, 0x7664, 0x7659, 0x7650, 0x7653, 0x7657, 0x765A, 0x76A6,
- 0x76BD, 0x76EC, 0x77C2, 0x77BA, 0x790C, 0x7913, 0x7914, 0x7909,
- 0x7910, 0x7912, 0x7911, 0x79AD, 0x79AC, 0x7A5F, 0x7C1C, 0x7C29,
- 0x7C19, 0x7C20, 0x7C1F, 0x7C2D, 0x7C1D, 0x7C26, 0x7C28, 0x7C22,
- 0x7C25, 0x7C30, 0x7E5C, 0x7E50, 0x7E56, 0x7E63, 0x7E58, 0x7E62,
- 0x7E5F, 0x7E51, 0x7E60, 0x7E57, 0x7E53, 0x7FB5, 0x7FB3, 0x7FF7,
- 0x7FF8, 0x8075, 0x81D1, 0x81D2, 0x81D0, 0x825F, 0x825E, 0x85B4,
- 0x85C6, 0x85C0, 0x85C3, 0x85C2, 0x85B3, 0x85B5, 0x85BD, 0x85C7,
- 0x85C4, 0x85BF, 0x85CB, 0x85CE, 0x85C8, 0x85C5, 0x85B1, 0x85B6,
- 0x85D2, 0x8624, 0x85B8, 0x85B7, 0x85BE, 0x8669, 0x87E7, 0x87E6,
- 0x87E2, 0x87DB, 0x87EB, 0x87EA, 0x87E5, 0x87DF, 0x87F3, 0x87E4,
- 0x87D4, 0x87DC, 0x87D3, 0x87ED, 0x87D8, 0x87E3, 0x87D7, 0x87D9,
- 0x8801, 0x87F4, 0x87E8, 0x87DD, 0x8953, 0x894B, 0x894F, 0x894C,
- 0x8946, 0x8950, 0x8951, 0x8949, 0x8B2A, 0x8B27, 0x8B23, 0x8B33,
- 0x8B30, 0x8B35, 0x8B47, 0x8B2F, 0x8B3C, 0x8B3E, 0x8B31, 0x8B25,
- 0x8B37, 0x8B26, 0x8B36, 0x8B2E, 0x8B24, 0x8B3B, 0x8B3D, 0x8B3A,
- 0x8C42, 0x8C75, 0x8C99, 0x8C98, 0x8C97, 0x8CFE, 0x8D04, 0x8D02,
- 0x8D00, 0x8E5C, 0x8E62, 0x8E60, 0x8E57, 0x8E56, 0x8E5E, 0x8E65,
- 0x8E67, 0x8E5B, 0x8E5A, 0x8E61, 0x8E5D, 0x8E69, 0x8E54, 0x8F46,
- 0x8F47, 0x8F48, 0x8F4B, 0x9128, 0x913A, 0x913B, 0x913E, 0x91A8,
- 0x91A5, 0x91A7, 0x91AF, 0x91AA, 0x93B5, 0x938C, 0x9392, 0x93B7,
- 0x939B, 0x939D, 0x9389, 0x93A7, 0x938E, 0x93AA, 0x939E, 0x93A6,
- 0x9395, 0x9388, 0x9399, 0x939F, 0x9380, 0x938D, 0x93B1, 0x9391,
- 0x93B2, 0x93A4, 0x93A8, 0x93B4, 0x93A3, 0x95D2, 0x95D3, 0x95D1,
- 0x96B3, 0x96D7, 0x96DA, 0x5DC2, 0x96DF, 0x96D8, 0x96DD, 0x9723,
- 0x9722, 0x9725, 0x97AC, 0x97AE, 0x97A8, 0x97AB, 0x97A4, 0x97AA,
- 0x97A2, 0x97A5, 0x97D7, 0x97D9, 0x97D6, 0x97D8, 0x97FA, 0x9850,
- 0x9851, 0x9852, 0x98B8, 0x9941, 0x993C, 0x993A, 0x9A0F, 0x9A0B,
- 0x9A09, 0x9A0D, 0x9A04, 0x9A11, 0x9A0A, 0x9A05, 0x9A07, 0x9A06,
- 0x9AC0, 0x9ADC, 0x9B08, 0x9B04, 0x9B05, 0x9B29, 0x9B35, 0x9B4A,
- 0x9B4C, 0x9B4B, 0x9BC7, 0x9BC6, 0x9BC3, 0x9BBF, 0x9BC1, 0x9BB5,
- 0x9BB8, 0x9BD3, 0x9BB6, 0x9BC4, 0x9BB9, 0x9BBD, 0x9D5C, 0x9D53,
- 0x9D4F, 0x9D4A, 0x9D5B, 0x9D4B, 0x9D59, 0x9D56, 0x9D4C, 0x9D57,
- 0x9D52, 0x9D54, 0x9D5F, 0x9D58, 0x9D5A, 0x9E8E, 0x9E8C, 0x9EDF,
- 0x9F01, 0x9F00, 0x9F16, 0x9F25, 0x9F2B, 0x9F2A, 0x9F29, 0x9F28,
- 0x9F4C, 0x9F55, 0x5134, 0x5135, 0x5296, 0x52F7, 0x53B4, 0x56AB,
- 0x56AD, 0x56A6, 0x56A7, 0x56AA, 0x56AC, 0x58DA, 0x58DD, 0x58DB,
- 0x5912, 0x5B3D, 0x5B3E, 0x5B3F, 0x5DC3, 0x5E70, 0x5FBF, 0x61FB,
- 0x6507, 0x6510, 0x650D, 0x6509, 0x650C, 0x650E, 0x6584, 0x65DE,
- 0x65DD, 0x66DE, 0x6AE7, 0x6AE0, 0x6ACC, 0x6AD1, 0x6AD9, 0x6ACB,
- 0x6ADF, 0x6ADC, 0x6AD0, 0x6AEB, 0x6ACF, 0x6ACD, 0x6ADE, 0x6B60,
- 0x6BB0, 0x6C0C, 0x7019, 0x7027, 0x7020, 0x7016, 0x702B, 0x7021,
- 0x7022, 0x7023, 0x7029, 0x7017, 0x7024, 0x701C, 0x720C, 0x720A,
- 0x7207, 0x7202, 0x7205, 0x72A5, 0x72A6, 0x72A4, 0x72A3, 0x72A1,
- 0x74CB, 0x74C5, 0x74B7, 0x74C3, 0x7516, 0x7660, 0x77C9, 0x77CA,
- 0x77C4, 0x77F1, 0x791D, 0x791B, 0x7921, 0x791C, 0x7917, 0x791E,
- 0x79B0, 0x7A67, 0x7A68, 0x7C33, 0x7C3C, 0x7C39, 0x7C2C, 0x7C3B,
- 0x7CEC, 0x7CEA, 0x7E76, 0x7E75, 0x7E78, 0x7E70, 0x7E77, 0x7E6F,
- 0x7E7A, 0x7E72, 0x7E74, 0x7E68, 0x7F4B, 0x7F4A, 0x7F83, 0x7F86,
- 0x7FB7, 0x7FFD, 0x7FFE, 0x8078, 0x81D7, 0x81D5, 0x820B, 0x8264,
- 0x8261, 0x8263, 0x85EB, 0x85F1, 0x85ED, 0x85D9, 0x85E1, 0x85E8,
- 0x85DA, 0x85D7, 0x85EC, 0x85F2, 0x85F8, 0x85D8, 0x85DF, 0x85E3,
- 0x85DC, 0x85D1, 0x85F0, 0x85E6, 0x85EF, 0x85DE, 0x85E2, 0x8800,
- 0x87FA, 0x8803, 0x87F6, 0x87F7, 0x8809, 0x880C, 0x880B, 0x8806,
- 0x87FC, 0x8808, 0x87FF, 0x880A, 0x8802, 0x8962, 0x895A, 0x895B,
- 0x8957, 0x8961, 0x895C, 0x8958, 0x895D, 0x8959, 0x8988, 0x89B7,
- 0x89B6, 0x89F6, 0x8B50, 0x8B48, 0x8B4A, 0x8B40, 0x8B53, 0x8B56,
- 0x8B54, 0x8B4B, 0x8B55, 0x8B51, 0x8B42, 0x8B52, 0x8B57, 0x8C43,
- 0x8C77, 0x8C76, 0x8C9A, 0x8D06, 0x8D07, 0x8D09, 0x8DAC, 0x8DAA,
- 0x8DAD, 0x8DAB, 0x8E6D, 0x8E78, 0x8E73, 0x8E6A, 0x8E6F, 0x8E7B,
- 0x8EC2, 0x8F52, 0x8F51, 0x8F4F, 0x8F50, 0x8F53, 0x8FB4, 0x9140,
- 0x913F, 0x91B0, 0x91AD, 0x93DE, 0x93C7, 0x93CF, 0x93C2, 0x93DA,
- 0x93D0, 0x93F9, 0x93EC, 0x93CC, 0x93D9, 0x93A9, 0x93E6, 0x93CA,
- 0x93D4, 0x93EE, 0x93E3, 0x93D5, 0x93C4, 0x93CE, 0x93C0, 0x93D2,
- 0x93A5, 0x93E7, 0x957D, 0x95DA, 0x95DB, 0x96E1, 0x9729, 0x972B,
- 0x972C, 0x9728, 0x9726, 0x97B3, 0x97B7, 0x97B6, 0x97DD, 0x97DE,
- 0x97DF, 0x985C, 0x9859, 0x985D, 0x9857, 0x98BF, 0x98BD, 0x98BB,
- 0x98BE, 0x9948, 0x9947, 0x9943, 0x99A6, 0x99A7, 0x9A1A, 0x9A15,
- 0x9A25, 0x9A1D, 0x9A24, 0x9A1B, 0x9A22, 0x9A20, 0x9A27, 0x9A23,
- 0x9A1E, 0x9A1C, 0x9A14, 0x9AC2, 0x9B0B, 0x9B0A, 0x9B0E, 0x9B0C,
- 0x9B37, 0x9BEA, 0x9BEB, 0x9BE0, 0x9BDE, 0x9BE4, 0x9BE6, 0x9BE2,
- 0x9BF0, 0x9BD4, 0x9BD7, 0x9BEC, 0x9BDC, 0x9BD9, 0x9BE5, 0x9BD5,
- 0x9BE1, 0x9BDA, 0x9D77, 0x9D81, 0x9D8A, 0x9D84, 0x9D88, 0x9D71,
- 0x9D80, 0x9D78, 0x9D86, 0x9D8B, 0x9D8C, 0x9D7D, 0x9D6B, 0x9D74,
- 0x9D75, 0x9D70, 0x9D69, 0x9D85, 0x9D73, 0x9D7B, 0x9D82, 0x9D6F,
- 0x9D79, 0x9D7F, 0x9D87, 0x9D68, 0x9E94, 0x9E91, 0x9EC0, 0x9EFC,
- 0x9F2D, 0x9F40, 0x9F41, 0x9F4D, 0x9F56, 0x9F57, 0x9F58, 0x5337,
- 0x56B2, 0x56B5, 0x56B3, 0x58E3, 0x5B45, 0x5DC6, 0x5DC7, 0x5EEE,
- 0x5EEF, 0x5FC0, 0x5FC1, 0x61F9, 0x6517, 0x6516, 0x6515, 0x6513,
- 0x65DF, 0x66E8, 0x66E3, 0x66E4, 0x6AF3, 0x6AF0, 0x6AEA, 0x6AE8,
- 0x6AF9, 0x6AF1, 0x6AEE, 0x6AEF, 0x703C, 0x7035, 0x702F, 0x7037,
- 0x7034, 0x7031, 0x7042, 0x7038, 0x703F, 0x703A, 0x7039, 0x702A,
- 0x7040, 0x703B, 0x7033, 0x7041, 0x7213, 0x7214, 0x72A8, 0x737D,
- 0x737C, 0x74BA, 0x76AB, 0x76AA, 0x76BE, 0x76ED, 0x77CC, 0x77CE,
- 0x77CF, 0x77CD, 0x77F2, 0x7925, 0x7923, 0x7927, 0x7928, 0x7924,
- 0x7929, 0x79B2, 0x7A6E, 0x7A6C, 0x7A6D, 0x7AF7, 0x7C49, 0x7C48,
- 0x7C4A, 0x7C47, 0x7C45, 0x7CEE, 0x7E7B, 0x7E7E, 0x7E81, 0x7E80,
- 0x7FBA, 0x7FFF, 0x8079, 0x81DB, 0x81D9, 0x8268, 0x8269, 0x8622,
- 0x85FF, 0x8601, 0x85FE, 0x861B, 0x8600, 0x85F6, 0x8604, 0x8609,
- 0x8605, 0x860C, 0x85FD, 0x8819, 0x8810, 0x8811, 0x8817, 0x8813,
- 0x8816, 0x8963, 0x8966, 0x89B9, 0x89F7, 0x8B60, 0x8B6A, 0x8B5D,
- 0x8B68, 0x8B63, 0x8B65, 0x8B67, 0x8B6D, 0x8DAE, 0x8E86, 0x8E88,
- 0x8E84, 0x8F59, 0x8F56, 0x8F57, 0x8F55, 0x8F58, 0x8F5A, 0x908D,
- 0x9143, 0x9141, 0x91B7, 0x91B5, 0x91B2, 0x91B3, 0x940B, 0x9413,
- 0x93FB, 0x9420, 0x940F, 0x9414, 0x93FE, 0x9415, 0x9410, 0x9428,
- 0x9419, 0x940D, 0x93F5, 0x9400, 0x93F7, 0x9407, 0x940E, 0x9416,
- 0x9412, 0x93FA, 0x9409, 0x93F8, 0x943C, 0x940A, 0x93FF, 0x93FC,
- 0x940C, 0x93F6, 0x9411, 0x9406, 0x95DE, 0x95E0, 0x95DF, 0x972E,
- 0x972F, 0x97B9, 0x97BB, 0x97FD, 0x97FE, 0x9860, 0x9862, 0x9863,
- 0x985F, 0x98C1, 0x98C2, 0x9950, 0x994E, 0x9959, 0x994C, 0x994B,
- 0x9953, 0x9A32, 0x9A34, 0x9A31, 0x9A2C, 0x9A2A, 0x9A36, 0x9A29,
- 0x9A2E, 0x9A38, 0x9A2D, 0x9AC7, 0x9ACA, 0x9AC6, 0x9B10, 0x9B12,
- 0x9B11, 0x9C0B, 0x9C08, 0x9BF7, 0x9C05, 0x9C12, 0x9BF8, 0x9C40,
- 0x9C07, 0x9C0E, 0x9C06, 0x9C17, 0x9C14, 0x9C09, 0x9D9F, 0x9D99,
- 0x9DA4, 0x9D9D, 0x9D92, 0x9D98, 0x9D90, 0x9D9B, 0x9DA0, 0x9D94,
- 0x9D9C, 0x9DAA, 0x9D97, 0x9DA1, 0x9D9A, 0x9DA2, 0x9DA8, 0x9D9E,
- 0x9DA3, 0x9DBF, 0x9DA9, 0x9D96, 0x9DA6, 0x9DA7, 0x9E99, 0x9E9B,
- 0x9E9A, 0x9EE5, 0x9EE4, 0x9EE7, 0x9EE6, 0x9F30, 0x9F2E, 0x9F5B,
- 0x9F60, 0x9F5E, 0x9F5D, 0x9F59, 0x9F91, 0x513A, 0x5139, 0x5298,
- 0x5297, 0x56C3, 0x56BD, 0x56BE, 0x5B48, 0x5B47, 0x5DCB, 0x5DCF,
- 0x5EF1, 0x61FD, 0x651B, 0x6B02, 0x6AFC, 0x6B03, 0x6AF8, 0x6B00,
- 0x7043, 0x7044, 0x704A, 0x7048, 0x7049, 0x7045, 0x7046, 0x721D,
- 0x721A, 0x7219, 0x737E, 0x7517, 0x766A, 0x77D0, 0x792D, 0x7931,
- 0x792F, 0x7C54, 0x7C53, 0x7CF2, 0x7E8A, 0x7E87, 0x7E88, 0x7E8B,
- 0x7E86, 0x7E8D, 0x7F4D, 0x7FBB, 0x8030, 0x81DD, 0x8618, 0x862A,
- 0x8626, 0x861F, 0x8623, 0x861C, 0x8619, 0x8627, 0x862E, 0x8621,
- 0x8620, 0x8629, 0x861E, 0x8625, 0x8829, 0x881D, 0x881B, 0x8820,
- 0x8824, 0x881C, 0x882B, 0x884A, 0x896D, 0x8969, 0x896E, 0x896B,
- 0x89FA, 0x8B79, 0x8B78, 0x8B45, 0x8B7A, 0x8B7B, 0x8D10, 0x8D14,
- 0x8DAF, 0x8E8E, 0x8E8C, 0x8F5E, 0x8F5B, 0x8F5D, 0x9146, 0x9144,
- 0x9145, 0x91B9, 0x943F, 0x943B, 0x9436, 0x9429, 0x943D, 0x9430,
- 0x9439, 0x942A, 0x9437, 0x942C, 0x9440, 0x9431, 0x95E5, 0x95E4,
- 0x95E3, 0x9735, 0x973A, 0x97BF, 0x97E1, 0x9864, 0x98C9, 0x98C6,
- 0x98C0, 0x9958, 0x9956, 0x9A39, 0x9A3D, 0x9A46, 0x9A44, 0x9A42,
- 0x9A41, 0x9A3A, 0x9A3F, 0x9ACD, 0x9B15, 0x9B17, 0x9B18, 0x9B16,
- 0x9B3A, 0x9B52, 0x9C2B, 0x9C1D, 0x9C1C, 0x9C2C, 0x9C23, 0x9C28,
- 0x9C29, 0x9C24, 0x9C21, 0x9DB7, 0x9DB6, 0x9DBC, 0x9DC1, 0x9DC7,
- 0x9DCA, 0x9DCF, 0x9DBE, 0x9DC5, 0x9DC3, 0x9DBB, 0x9DB5, 0x9DCE,
- 0x9DB9, 0x9DBA, 0x9DAC, 0x9DC8, 0x9DB1, 0x9DAD, 0x9DCC, 0x9DB3,
- 0x9DCD, 0x9DB2, 0x9E7A, 0x9E9C, 0x9EEB, 0x9EEE, 0x9EED, 0x9F1B,
- 0x9F18, 0x9F1A, 0x9F31, 0x9F4E, 0x9F65, 0x9F64, 0x9F92, 0x4EB9,
- 0x56C6, 0x56C5, 0x56CB, 0x5971, 0x5B4B, 0x5B4C, 0x5DD5, 0x5DD1,
- 0x5EF2, 0x6521, 0x6520, 0x6526, 0x6522, 0x6B0B, 0x6B08, 0x6B09,
- 0x6C0D, 0x7055, 0x7056, 0x7057, 0x7052, 0x721E, 0x721F, 0x72A9,
- 0x737F, 0x74D8, 0x74D5, 0x74D9, 0x74D7, 0x766D, 0x76AD, 0x7935,
- 0x79B4, 0x7A70, 0x7A71, 0x7C57, 0x7C5C, 0x7C59, 0x7C5B, 0x7C5A,
- 0x7CF4, 0x7CF1, 0x7E91, 0x7F4F, 0x7F87, 0x81DE, 0x826B, 0x8634,
- 0x8635, 0x8633, 0x862C, 0x8632, 0x8636, 0x882C, 0x8828, 0x8826,
- 0x882A, 0x8825, 0x8971, 0x89BF, 0x89BE, 0x89FB, 0x8B7E, 0x8B84,
- 0x8B82, 0x8B86, 0x8B85, 0x8B7F, 0x8D15, 0x8E95, 0x8E94, 0x8E9A,
- 0x8E92, 0x8E90, 0x8E96, 0x8E97, 0x8F60, 0x8F62, 0x9147, 0x944C,
- 0x9450, 0x944A, 0x944B, 0x944F, 0x9447, 0x9445, 0x9448, 0x9449,
- 0x9446, 0x973F, 0x97E3, 0x986A, 0x9869, 0x98CB, 0x9954, 0x995B,
- 0x9A4E, 0x9A53, 0x9A54, 0x9A4C, 0x9A4F, 0x9A48, 0x9A4A, 0x9A49,
- 0x9A52, 0x9A50, 0x9AD0, 0x9B19, 0x9B2B, 0x9B3B, 0x9B56, 0x9B55,
- 0x9C46, 0x9C48, 0x9C3F, 0x9C44, 0x9C39, 0x9C33, 0x9C41, 0x9C3C,
- 0x9C37, 0x9C34, 0x9C32, 0x9C3D, 0x9C36, 0x9DDB, 0x9DD2, 0x9DDE,
- 0x9DDA, 0x9DCB, 0x9DD0, 0x9DDC, 0x9DD1, 0x9DDF, 0x9DE9, 0x9DD9,
- 0x9DD8, 0x9DD6, 0x9DF5, 0x9DD5, 0x9DDD, 0x9EB6, 0x9EF0, 0x9F35,
- 0x9F33, 0x9F32, 0x9F42, 0x9F6B, 0x9F95, 0x9FA2, 0x513D, 0x5299,
- 0x58E8, 0x58E7, 0x5972, 0x5B4D, 0x5DD8, 0x882F, 0x5F4F, 0x6201,
- 0x6203, 0x6204, 0x6529, 0x6525, 0x6596, 0x66EB, 0x6B11, 0x6B12,
- 0x6B0F, 0x6BCA, 0x705B, 0x705A, 0x7222, 0x7382, 0x7381, 0x7383,
- 0x7670, 0x77D4, 0x7C67, 0x7C66, 0x7E95, 0x826C, 0x863A, 0x8640,
- 0x8639, 0x863C, 0x8631, 0x863B, 0x863E, 0x8830, 0x8832, 0x882E,
- 0x8833, 0x8976, 0x8974, 0x8973, 0x89FE, 0x8B8C, 0x8B8E, 0x8B8B,
- 0x8B88, 0x8C45, 0x8D19, 0x8E98, 0x8F64, 0x8F63, 0x91BC, 0x9462,
- 0x9455, 0x945D, 0x9457, 0x945E, 0x97C4, 0x97C5, 0x9800, 0x9A56,
- 0x9A59, 0x9B1E, 0x9B1F, 0x9B20, 0x9C52, 0x9C58, 0x9C50, 0x9C4A,
- 0x9C4D, 0x9C4B, 0x9C55, 0x9C59, 0x9C4C, 0x9C4E, 0x9DFB, 0x9DF7,
- 0x9DEF, 0x9DE3, 0x9DEB, 0x9DF8, 0x9DE4, 0x9DF6, 0x9DE1, 0x9DEE,
- 0x9DE6, 0x9DF2, 0x9DF0, 0x9DE2, 0x9DEC, 0x9DF4, 0x9DF3, 0x9DE8,
- 0x9DED, 0x9EC2, 0x9ED0, 0x9EF2, 0x9EF3, 0x9F06, 0x9F1C, 0x9F38,
- 0x9F37, 0x9F36, 0x9F43, 0x9F4F, 0x9F71, 0x9F70, 0x9F6E, 0x9F6F,
- 0x56D3, 0x56CD, 0x5B4E, 0x5C6D, 0x652D, 0x66ED, 0x66EE, 0x6B13,
- 0x705F, 0x7061, 0x705D, 0x7060, 0x7223, 0x74DB, 0x74E5, 0x77D5,
- 0x7938, 0x79B7, 0x79B6, 0x7C6A, 0x7E97, 0x7F89, 0x826D, 0x8643,
- 0x8838, 0x8837, 0x8835, 0x884B, 0x8B94, 0x8B95, 0x8E9E, 0x8E9F,
- 0x8EA0, 0x8E9D, 0x91BE, 0x91BD, 0x91C2, 0x946B, 0x9468, 0x9469,
- 0x96E5, 0x9746, 0x9743, 0x9747, 0x97C7, 0x97E5, 0x9A5E, 0x9AD5,
- 0x9B59, 0x9C63, 0x9C67, 0x9C66, 0x9C62, 0x9C5E, 0x9C60, 0x9E02,
- 0x9DFE, 0x9E07, 0x9E03, 0x9E06, 0x9E05, 0x9E00, 0x9E01, 0x9E09,
- 0x9DFF, 0x9DFD, 0x9E04, 0x9EA0, 0x9F1E, 0x9F46, 0x9F74, 0x9F75,
- 0x9F76, 0x56D4, 0x652E, 0x65B8, 0x6B18, 0x6B19, 0x6B17, 0x6B1A,
- 0x7062, 0x7226, 0x72AA, 0x77D8, 0x77D9, 0x7939, 0x7C69, 0x7C6B,
- 0x7CF6, 0x7E9A, 0x7E98, 0x7E9B, 0x7E99, 0x81E0, 0x81E1, 0x8646,
- 0x8647, 0x8648, 0x8979, 0x897A, 0x897C, 0x897B, 0x89FF, 0x8B98,
- 0x8B99, 0x8EA5, 0x8EA4, 0x8EA3, 0x946E, 0x946D, 0x946F, 0x9471,
- 0x9473, 0x9749, 0x9872, 0x995F, 0x9C68, 0x9C6E, 0x9C6D, 0x9E0B,
- 0x9E0D, 0x9E10, 0x9E0F, 0x9E12, 0x9E11, 0x9EA1, 0x9EF5, 0x9F09,
- 0x9F47, 0x9F78, 0x9F7B, 0x9F7A, 0x9F79, 0x571E, 0x7066, 0x7C6F,
- 0x883C, 0x8DB2, 0x8EA6, 0x91C3, 0x9474, 0x9478, 0x9476, 0x9475,
- 0x9A60, 0x9B2E, 0x9C74, 0x9C73, 0x9C71, 0x9C75, 0x9E14, 0x9E13,
- 0x9EF6, 0x9F0A, 0x9FA4, 0x7068, 0x7065, 0x7CF7, 0x866A, 0x883E,
- 0x883D, 0x883F, 0x8B9E, 0x8C9C, 0x8EA9, 0x8EC9, 0x974B, 0x9873,
- 0x9874, 0x98CC, 0x9961, 0x99AB, 0x9A64, 0x9A66, 0x9A67, 0x9B24,
- 0x9E15, 0x9E17, 0x9F48, 0x6207, 0x6B1E, 0x7227, 0x864C, 0x8EA8,
- 0x9482, 0x9480, 0x9481, 0x9A69, 0x9A68, 0x9E19, 0x864B, 0x8B9F,
- 0x9483, 0x9C79, 0x9EB7, 0x7675, 0x9A6B, 0x9C7A, 0x9E1D, 0x7069,
- 0x706A, 0x7229, 0x9EA4, 0x9F7E, 0x9F49, 0x9F98, 0xFE19, 0x223C,
- 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, 0xFE33,
- 0x2574, 0xFE34, 0xFE4F, 0x0308, 0xFF3E, 0x30FD, 0x30FE, 0x309D,
- 0x309E, 0xFFFD, 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, 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,
- 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, 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, 0x4E41,
- 0x0000, 0x4E5A, 0x0000, 0x5202, 0x4491, 0x9FB0, 0x5188, 0x9FB1,
- 0x0000, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD,
- 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD,
- 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD,
- 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD,
- 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD,
- 0xFFFD, 0x00AC, 0xFFE4, 0xFF07, 0xFF02, 0x3231, 0x2116, 0x2121,
- 0x7881, 0x92B9, 0x88CF, 0x58BB, 0x6052, 0x7CA7, 0x5AFA, 0x2554,
- 0x2566, 0x2557, 0x2560, 0x256C, 0x2563, 0x255A, 0x2569, 0x255D,
- 0x2552, 0x2564, 0x2555, 0xFFFD, 0xFFFD, 0xFFFD, 0x2558, 0x2567,
- 0x255B, 0x2553, 0x2565, 0x2556, 0x255F, 0x256B, 0x2562, 0x2559,
- 0x2568, 0x255C, 0x2551, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD,
- 0x2593, 0xFFFD, 0xFFFD, 0xFE10, 0xFE11, 0xFE12, 0xFFFD, 0xFE14,
- 0xFE13, 0xFE16, 0xFE15, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD,
- 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD,
- 0xFFFD, 0xFFFD, 0xFFFD, 0x0000, 0x57BE, 0x0000, 0x713E, 0x0000,
- 0x69A2, 0x0000, 0x5B74, 0x7A49, 0x0000, 0x0000, 0x7A65, 0x7A7D,
- 0x0000, 0x7ABB, 0x7AB0, 0x7AC2, 0x7AC3, 0x71D1, 0x0000, 0x41CA,
- 0x7ADA, 0x7ADD, 0x7AEA, 0x41EF, 0x54B2, 0x0000, 0x7B0B, 0x7B55,
- 0x7B29, 0x0000, 0x0000, 0x7BA2, 0x7B6F, 0x839C, 0x0000, 0x0000,
- 0x7BD0, 0x8421, 0x7B92, 0xFFFD, 0x0000, 0xFFFD, 0x8492, 0x7BFA,
- 0xFFFD, 0x7C35, 0x0000, 0x7C44, 0x7C83, 0x0000, 0x7CA6, 0x0000,
- 0x7CC9, 0x7CC7, 0x7CE6, 0xFFFD, 0x7CF3, 0x7CF5, 0x7E67, 0x451D,
- 0x0000, 0x7D5D, 0x0000, 0x7D89, 0x7DAB, 0x7135, 0x7DB3, 0x7DD6,
- 0x0000, 0x0000, 0x7DE4, 0x3D13, 0x7DF5, 0x0000, 0x7DE5, 0x0000,
- 0xFFFD, 0x0000, 0x0000, 0x7E6E, 0xFFFD, 0x432B, 0x946C, 0x7E27,
- 0x7F40, 0x7F41, 0x7F47, 0x7936, 0x0000, 0x99E1, 0x7F97, 0x0000,
- 0x7FA3, 0x0000, 0x0000, 0x455C, 0x0000, 0x0000, 0x7FFA, 0x0000,
- 0xFA5B, 0x8008, 0x801D, 0xFFFD, 0x802F, 0x0000, 0x0000, 0x803B,
- 0x803C, 0x8061, 0x0000, 0x4989, 0x0000, 0x0000, 0x0000, 0x6725,
- 0x80A7, 0x0000, 0x8107, 0x811A, 0x58B0, 0x0000, 0x6C7F, 0x0000,
- 0x64E7, 0x0000, 0x8218, 0x0000, 0x6A53, 0x0000, 0x0000, 0x447A,
- 0x8229, 0x0000, 0x0000, 0x4FF9, 0x0000, 0x84E2, 0x8362, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x82AA, 0x691B, 0x0000, 0x41DB,
- 0x854B, 0x82D0, 0x831A, 0x0000, 0x0000, 0x36C1, 0x0000, 0x0000,
- 0x827B, 0x82E2, 0x8318, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x3DBF, 0x831D, 0x55EC, 0x8385, 0x450B, 0x0000, 0x83AC, 0xFFFD,
- 0x83D3, 0x0000, 0x6A57, 0x855A, 0x3496, 0x0000, 0x8458, 0x0000,
- 0x8471, 0x3DD3, 0x44E4, 0x6AA7, 0x844A, 0x7958, 0xFFFD, 0x0000,
- 0x0000, 0x0000, 0x84DE, 0xFFFD, 0x8391, 0x44A0, 0x8493, 0x84E4,
- 0x0000, 0x4240, 0x0000, 0x4543, 0x8534, 0x5AF2, 0x4523, 0x4527,
- 0x8573, 0x4516, 0x67BF, 0x8616, 0x0000, 0x0000, 0x85C1, 0x0000,
- 0x8602, 0x0000, 0x0000, 0x0000, 0x456A, 0x8628, 0x3648, 0x0000,
- 0x53F7, 0x0000, 0x867E, 0xFFFD, 0x0000, 0x87EE, 0x0000, 0x87B1,
- 0x87DA, 0x880F, 0x5661, 0x866C, 0x6856, 0x460F, 0x8845, 0x8846,
- 0x0000, 0x0000, 0x0000, 0x885E, 0x889C, 0x465B, 0x88B4, 0x88B5,
- 0x88C5, 0x0000, 0x8987, 0xFFFD, 0xFFFD, 0xFFFD, 0x89A7, 0x89BC,
- 0x0000, 0x89E7, 0x0000, 0x0000, 0x8A9C, 0x7793, 0x91FE, 0x8A90,
- 0x0000, 0x7AE9, 0x0000, 0x4713, 0x0000, 0x717C, 0x8B0C, 0x8B1F,
- 0x0000, 0x0000, 0x8B3F, 0xFFFD, 0x8B4D, 0x8AA9, 0x0000, 0x8B90,
- 0x8B9B, 0x8AAF, 0x0000, 0x4615, 0x884F, 0x8C9B, 0x0000, 0x0000,
- 0x0000, 0x3725, 0x0000, 0x8CD6, 0x0000, 0x0000, 0x8D12, 0x8D03,
- 0x0000, 0x8CDB, 0x705C, 0x8D11, 0x3ED0, 0x0000, 0x8DA9, 0x0000,
- 0x0000, 0x0000, 0x3B7C, 0x0000, 0x0000, 0x7AE7, 0x8EAD, 0x8EB6,
- 0x8EC3, 0x92D4, 0x8F19, 0x8F2D, 0x0000, 0x0000, 0x8FA5, 0x9303,
- 0x0000, 0x0000, 0x8FB3, 0xFFFD, 0x0000, 0x0000, 0x0000, 0x5EF8,
- 0x0000, 0x8FF9, 0xFFFD, 0x0000, 0x3980, 0x0000, 0x9037, 0x0000,
- 0x0000, 0x9061, 0x0000, 0x0000, 0x90A8, 0x0000, 0x90C4, 0x0000,
- 0x90AE, 0xFA26, 0x9167, 0x91A9, 0x91C4, 0x7CAC, 0x0000, 0x0000,
- 0x920E, 0x6C9F, 0x9241, 0x9262, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x932C, 0x936B, 0x0000, 0x0000, 0x5AC3, 0x0000,
- 0x0000, 0x4965, 0x9244, 0x0000, 0x0000, 0x0000, 0x9373, 0x945B,
- 0x8EBC, 0x9585, 0x95A6, 0x9426, 0x95A0, 0x6FF6, 0x42B9, 0x0000,
- 0x0000, 0x0000, 0x49DF, 0x6C1C, 0x967B, 0x9696, 0x416C, 0x96A3,
- 0x0000, 0x61DA, 0xE4AD, 0x78F5, 0x0000, 0x96BD, 0x53CC, 0x49A1,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x9731, 0x8642, 0x9736, 0x4A0F, 0x453D, 0x4585, 0x0000, 0x7075,
- 0x5B41, 0x971B, 0xFFFD, 0x0000, 0x9757, 0x5B4A, 0x0000, 0x975F,
- 0x9425, 0x50D0, 0x0000, 0x0000, 0x9789, 0x979F, 0x97B1, 0x97BE,
- 0x97C0, 0x97D2, 0x97E0, 0x0000, 0x97EE, 0x741C, 0x0000, 0xFFFD,
- 0x97F5, 0x0000, 0x0000, 0x4AD1, 0x9834, 0x9833, 0x984B, 0x9866,
- 0x3B0E, 0x0000, 0x3D51, 0x0000, 0x0000, 0x0000, 0x98CA, 0x98B7,
- 0x98C8, 0x98C7, 0x4AFF, 0x0000, 0x0000, 0x55B0, 0x98E1, 0x98E6,
- 0x98EC, 0x9378, 0x9939, 0x0000, 0x4B72, 0x0000, 0x0000, 0x99F5,
- 0x9A0C, 0x9A3B, 0x9A10, 0x9A58, 0x0000, 0x36C4, 0x0000, 0x0000,
- 0x9AE0, 0x9AE2, 0x0000, 0x9AF4, 0x4C0E, 0x9B14, 0x9B2D, 0x0000,
- 0x5034, 0x9B34, 0x38C3, 0x0000, 0x9B50, 0x9B40, 0x0000, 0x5A45,
- 0x0000, 0x9B8E, 0x9C02, 0x9BFF, 0x9C0C, 0x0000, 0x9DD4, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9D7E, 0x9D83, 0x0000,
- 0x9E0E, 0x9DC4, 0x0000, 0x0000, 0x0000, 0x0000, 0x9D39, 0x0000,
- 0x0000, 0x9E90, 0x9E95, 0x9E9E, 0x9EA2, 0x4D34, 0x9EAA, 0x9EAF,
- 0x0000, 0x9EC1, 0x3B60, 0x39E5, 0x3D1D, 0x4F32, 0x37BE, 0x0000,
- 0x9F02, 0x9F08, 0x4B96, 0x9424, 0x0000, 0x9F17, 0x0000, 0x9F39,
- 0x569F, 0x568A, 0x9F45, 0x99B8, 0x0000, 0x97F2, 0x847F, 0xFFFD,
- 0x9F69, 0x7ADC, 0x9F8E, 0x7216, 0x4BBE, 0x0000, 0x0000, 0x7177,
- 0x0000, 0x0000, 0x0000, 0x739E, 0x0000, 0x0000, 0x799F, 0x0000,
- 0x0000, 0x9369, 0x93F3, 0x0000, 0x92EC, 0x9381, 0x93CB, 0x0000,
- 0x0000, 0x7217, 0x3EEB, 0x7772, 0x7A43, 0x70D0, 0x0000, 0x0000,
- 0x717E, 0x0000, 0x70A3, 0x0000, 0x0000, 0x3EC7, 0x0000, 0x0000,
- 0x0000, 0x3722, 0x0000, 0x0000, 0x36E1, 0x0000, 0x0000, 0x0000,
- 0x3723, 0x0000, 0x575B, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x8503, 0x0000, 0xFFFD, 0x8455, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x44F4, 0x0000, 0x0000, 0x0000, 0x67F9, 0x3733,
- 0x3C15, 0x3DE7, 0x586C, 0x0000, 0x6810, 0x4057, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x54CB, 0x569E, 0x0000, 0x5692, 0x0000,
- 0x0000, 0x0000, 0xFFFD, 0x0000, 0x939C, 0x4EF8, 0x512B, 0x3819,
- 0x0000, 0x4EBC, 0x0000, 0xFFFD, 0x4F4B, 0x4F8A, 0x0000, 0x5A68,
- 0x0000, 0x0000, 0x3999, 0x0000, 0x0000, 0x3435, 0x4F29, 0x0000,
- 0x0000, 0x0000, 0x8ADA, 0x0000, 0x4E98, 0x50CD, 0x510D, 0x4FA2,
- 0x4F03, 0x0000, 0x0000, 0x4F42, 0x502E, 0x506C, 0x5081, 0x4FCC,
- 0x4FE5, 0x5058, 0x50FC, 0x6E76, 0x0000, 0x0000, 0x0000, 0x6D72,
- 0x0000, 0x0000, 0x51A8, 0x51C3, 0x0000, 0x44DD, 0x0000, 0x0000,
- 0x0000, 0x8D7A, 0x0000, 0x0000, 0x5259, 0x52A4, 0x0000, 0x52E1,
- 0xFFFD, 0x467A, 0x718C, 0x0000, 0x0000, 0x0000, 0x0000, 0x69D1,
- 0x0000, 0xFFFD, 0x3EDE, 0x7499, 0x7414, 0x7456, 0x7398, 0x4B8E,
- 0x0000, 0x0000, 0x53D0, 0x3584, 0x720F, 0x0000, 0x55B4, 0x0000,
- 0x54CD, 0x0000, 0x571D, 0x925D, 0x96F4, 0x57DD, 0x578D, 0x577F,
- 0x363E, 0x58CB, 0x5A99, 0x0000, 0x0000, 0x0000, 0x0000, 0x5A2C,
- 0x59B8, 0x5A7E, 0x5ACF, 0x5A12, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x36F5, 0x6D05, 0x7443, 0x5A21, 0x0000, 0x5A81, 0x0000, 0x0000,
- 0x93E0, 0x748C, 0x0000, 0x7105, 0x4972, 0x9408, 0x0000, 0x93BD,
- 0x37A0, 0x5C1E, 0x5C9E, 0x5E5E, 0x5E48, 0x0000, 0x0000, 0x0000,
- 0x5ECD, 0x5B4F, 0x0000, 0x0000, 0x3701, 0x0000, 0x36DD, 0x0000,
- 0x36D3, 0x812A, 0x0000, 0x0000, 0x0000, 0x0000, 0x5F0C, 0x5F0E,
- 0x0000, 0x0000, 0x5A6B, 0x0000, 0x5B44, 0x0000, 0x8860, 0x607E,
- 0x0000, 0x0000, 0x5FDB, 0x3EB8, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x61C0, 0x0000, 0x0000, 0x0000, 0x6199, 0x6198, 0x6075, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x6471, 0x0000, 0x0000, 0x3A29, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x6337, 0x64B6, 0x6331, 0x63D1, 0x0000,
- 0x0000, 0x62A4, 0x0000, 0x643B, 0x656B, 0x6972, 0x3BF4, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x550D, 0x0000, 0x0000, 0x0000, 0x66CE,
- 0x0000, 0x0000, 0x3AE0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x78EE, 0x0000, 0x0000, 0x0000, 0x3464, 0x0000, 0x0000,
- 0x0000, 0x668E, 0x0000, 0x666B, 0x4B93, 0x6630, 0x0000, 0x0000,
- 0x6663, 0x0000, 0x0000, 0x661E, 0x0000, 0x38D1, 0x0000, 0x0000,
- 0x3B99, 0x0000, 0x0000, 0x74D0, 0x3B96, 0x0000, 0x68B6, 0xFFFD,
- 0x3BC4, 0x6ABE, 0x0000, 0x0000, 0x6A33, 0x6A52, 0x6AC9, 0x6B05,
- 0x0000, 0x6511, 0x6898, 0x6A4C, 0x3BD7, 0x6A7A, 0x6B57, 0x0000,
- 0x0000, 0x93A0, 0x92F2, 0x0000, 0x0000, 0x9289, 0x0000, 0x0000,
- 0x9467, 0x6DA5, 0x6F0B, 0xFFFD, 0x0000, 0x3D8F, 0x6E04, 0x0000,
- 0x5A3D, 0x6E0A, 0x5847, 0x6D24, 0x7842, 0x713B, 0x0000, 0x0000,
- 0x70F1, 0x7250, 0x7287, 0x7294, 0x0000, 0x0000, 0x5179, 0x0000,
- 0x0000, 0x747A, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3F06,
- 0x3EB1, 0x0000, 0x0000, 0x0000, 0x60A7, 0x3EF3, 0x74CC, 0x743C,
- 0x9387, 0x7437, 0x449F, 0x0000, 0x4551, 0x7583, 0x3F63, 0x0000,
- 0x0000, 0x3F58, 0x7555, 0x7673, 0x0000, 0xFFFD, 0x7468, 0x0000,
- 0x0000, 0x0000, 0x3AFB, 0x3DCD, 0x0000, 0x3EFF, 0x0000, 0x0000,
- 0x91FA, 0x5732, 0x9342, 0x0000, 0x0000, 0x50DF, 0x0000, 0x0000,
- 0x7778, 0x0000, 0x770E, 0x770F, 0x777B, 0x0000, 0x0000, 0x3A5E,
- 0x0000, 0x7438, 0x749B, 0x3EBF, 0x0000, 0x0000, 0x40C8, 0x0000,
- 0x0000, 0x9307, 0x0000, 0x781E, 0x788D, 0x7888, 0x78D2, 0x73D0,
- 0x7959, 0x0000, 0x0000, 0x410E, 0xFFFD, 0xFFFD, 0x79A5, 0x6A2D,
- 0x0000, 0x7A3A, 0x79F4, 0x416E, 0x0000, 0x4132, 0x9235, 0x79F1,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3597, 0x556B, 0x3570,
- 0x36AA, 0x0000, 0x0000, 0x7AE2, 0x5A59, 0x0000, 0x0000, 0x0000,
- 0x5A0D, 0x0000, 0x78F0, 0x5A2A, 0x0000, 0x7AFE, 0x41F9, 0x7C5D,
- 0x7C6D, 0x4211, 0x0000, 0x0000, 0x0000, 0x7CCD, 0x0000, 0x0000,
- 0x7C8E, 0x7C7C, 0x7CAE, 0x6AB2, 0x7DDC, 0x7E07, 0x7DD3, 0x7F4E,
- 0x0000, 0x0000, 0x0000, 0x7D97, 0x0000, 0x426A, 0x0000, 0x0000,
- 0x67D6, 0x0000, 0x0000, 0x57C4, 0x0000, 0x0000, 0x7FDD, 0x7B27,
- 0x0000, 0x0000, 0x0000, 0x7B0C, 0x0000, 0x99E6, 0x8645, 0x9A63,
- 0x6A1C, 0x0000, 0x0000, 0x0000, 0x9A1F, 0x0000, 0x8495, 0x0000,
- 0x0000, 0x44EA, 0x8137, 0x4402, 0x80C6, 0x8109, 0x8142, 0x0000,
- 0x98C3, 0x0000, 0x8262, 0x8265, 0x0000, 0x8453, 0x0000, 0x8610,
- 0x0000, 0x5A86, 0x417F, 0x0000, 0x5B2B, 0x0000, 0x5AE4, 0x0000,
- 0x86A0, 0x0000, 0x0000, 0x882D, 0x0000, 0x5A02, 0x886E, 0x4F45,
- 0x8887, 0x88BF, 0x88E6, 0x8965, 0x894D, 0x0000, 0x8954, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3EAD, 0x84A3, 0x46F5,
- 0x46CF, 0x37F2, 0x8A3D, 0x8A1C, 0x0000, 0x5F4D, 0x922B, 0x0000,
- 0x65D4, 0x7129, 0x70C4, 0x0000, 0x9D6D, 0x8C9F, 0x8CE9, 0x0000,
- 0x599A, 0x77C3, 0x59F0, 0x36D4, 0x8E2A, 0x8EA7, 0x0000, 0x8F30,
- 0x8F4A, 0x42F4, 0x6C58, 0x6FBB, 0x0000, 0x489B, 0x6F79, 0x6E8B,
- 0x0000, 0x9BE9, 0x36B5, 0x0000, 0x90BB, 0x48B4, 0x5571, 0x4906,
- 0x91BB, 0x9404, 0x0000, 0x4062, 0x0000, 0x9427, 0x0000, 0x0000,
- 0x84E5, 0x8A2B, 0x9599, 0x95A7, 0x9597, 0x9596, 0x0000, 0x7445,
- 0x3EC2, 0x0000, 0x0000, 0x0000, 0x3EE7, 0x0000, 0x968F, 0x0000,
- 0x0000, 0x0000, 0x3ECC, 0x0000, 0x0000, 0x0000, 0x7412, 0x746B,
- 0x3EFC, 0x9741, 0x0000, 0x6847, 0x4A1D, 0x0000, 0x0000, 0xFFFD,
- 0x9368, 0x0000, 0x0000, 0x0000, 0x0000, 0x92BA, 0x5B11, 0x8B69,
- 0x493C, 0x73F9, 0x0000, 0x979B, 0xFFFD, 0x9938, 0x0000, 0x5DC1,
- 0x0000, 0x0000, 0x981F, 0x0000, 0x92F6, 0x0000, 0x91E5, 0x44C0,
- 0x0000, 0x0000, 0x0000, 0x98DC, 0x0000, 0x3F00, 0x922A, 0x4925,
- 0x8414, 0x993B, 0x994D, 0x0000, 0x3DFD, 0xFFFD, 0x4B6F, 0x99AA,
- 0x9A5C, 0x0000, 0x0000, 0x6A8F, 0x9A21, 0x5AFE, 0x9A2F, 0x0000,
- 0x4B90, 0x0000, 0x99BC, 0x4BBD, 0x4B97, 0x937D, 0x5872, 0x0000,
- 0x5822, 0x0000, 0x0000, 0x7844, 0x0000, 0x0000, 0x68C5, 0x3D7D,
- 0x9458, 0x3927, 0x6150, 0x0000, 0x0000, 0x6107, 0x9C4F, 0x9C53,
- 0x9C7B, 0x9C35, 0x9C10, 0x9B7F, 0x9BCF, 0x0000, 0x9B9F, 0x0000,
- 0x0000, 0x9D21, 0x4CAE, 0x0000, 0x9E18, 0x4CB0, 0x9D0C, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x9DA5, 0x84BD, 0x0000, 0x0000, 0x0000,
- 0x85FC, 0x4533, 0x0000, 0x0000, 0x0000, 0x8420, 0x85EE, 0x0000,
- 0x0000, 0x0000, 0x79E2, 0x0000, 0x0000, 0x0000, 0x3D62, 0x93DB,
- 0x92BE, 0x9348, 0x0000, 0x78B9, 0x9277, 0x944D, 0x4FE4, 0x3440,
- 0x9064, 0x0000, 0x783D, 0x7854, 0x78B6, 0x784B, 0x0000, 0x0000,
- 0x0000, 0x369A, 0x4F72, 0x6FDA, 0x6FD9, 0xFFFD, 0x701E, 0x5414,
- 0x0000, 0x57BB, 0x58F3, 0x578A, 0x9D16, 0x57D7, 0x7134, 0x34AF,
- 0x0000, 0x71EB, 0x0000, 0x0000, 0xFFFD, 0x0000, 0x0000, 0x610C,
- 0x5ACE, 0x5A0B, 0x42BC, 0x0000, 0x372C, 0x4B7B, 0x0000, 0x93BB,
- 0x93B8, 0x0000, 0x0000, 0x8472, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x5994, 0x0000, 0x0000, 0x7DA8, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x92E5, 0x73E2, 0x3EE9, 0x74B4, 0x0000, 0x0000,
- 0x3EE1, 0x0000, 0x6AD8, 0x73F3, 0x73FB, 0x3ED6, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7448, 0x0000, 0x70A5,
- 0x0000, 0x9284, 0x73E6, 0x935F, 0x0000, 0x9331, 0x0000, 0x0000,
- 0x9386, 0x0000, 0x0000, 0x4935, 0x0000, 0x716B, 0x0000, 0x0000,
- 0x56A4, 0x0000, 0x0000, 0x0000, 0x5502, 0x79C4, 0x0000, 0x7DFE,
- 0x0000, 0x0000, 0x0000, 0x452E, 0x9401, 0x370A, 0x0000, 0x0000,
- 0x59B0, 0x0000, 0x0000, 0x0000, 0x5AA1, 0x36E2, 0x0000, 0x36B0,
- 0x925F, 0x5A79, 0x0000, 0x0000, 0x9374, 0x3CCD, 0x0000, 0x4A96,
- 0x398A, 0x50F4, 0x3D69, 0x3D4C, 0x0000, 0x7175, 0x42FB, 0x0000,
- 0x6E0F, 0x0000, 0x44EB, 0x6D57, 0x0000, 0x7067, 0x6CAF, 0x3CD6,
- 0x0000, 0x0000, 0x6E02, 0x6F0C, 0x3D6F, 0x0000, 0x7551, 0x36BC,
- 0x34C8, 0x4680, 0x3EDA, 0x4871, 0x59C4, 0x926E, 0x493E, 0x8F41,
- 0x0000, 0x0000, 0x5812, 0x57C8, 0x36D6, 0x0000, 0x70FE, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x68B9, 0x6967, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6A1A, 0x0000,
- 0x0000, 0x843E, 0x44DF, 0x44CE, 0x0000, 0x0000, 0x0000, 0x0000,
- 0xFFFD, 0xFFFD, 0x833D, 0x0000, 0x83ED, 0x0000, 0x0000, 0x0000,
- 0x5989, 0x5A82, 0x0000, 0x5A61, 0x5A71, 0x0000, 0x0000, 0x372D,
- 0x59EF, 0x0000, 0x36C7, 0x718E, 0x9390, 0x669A, 0x0000, 0x5A6E,
- 0x5A2B, 0x0000, 0x6A2B, 0x0000, 0x0000, 0x0000, 0x0000, 0x711D,
- 0x0000, 0x0000, 0x4FB0, 0x0000, 0x5CC2, 0x0000, 0x0000, 0x0000,
- 0x6A0C, 0x0000, 0x0000, 0xFFFD, 0x7133, 0x0000, 0x3DA5, 0x6CDF,
- 0x0000, 0x59EB, 0x5F5C, 0x0000, 0x7CD3, 0x0000, 0x0000, 0x0000,
- 0x906C, 0x81F6, 0x770C, 0x6CA2, 0x56FD, 0x5869, 0x6761, 0x5C5E,
- 0x58F2, 0x70B9, 0x6803, 0x8FBB, 0x8FBC, 0x4E21, 0x7B39, 0x3DCC,
- 0x732A, 0x7560, 0x583A, 0x82A6, 0x698A, 0x60E3, 0x4EEE, 0x99C4,
- 0x9EBF, 0x5301, 0x67A0, 0x60E8, 0x51B4, 0x7A83, 0x9C3A, 0x7AC8,
- 0x691A, 0x59AC, 0x5840, 0x546A, 0x60E7, 0x567A, 0x6955, 0x9C2F,
- 0x87A5, 0x5C20, 0x5E0B, 0x671E, 0x84AD, 0x8B81, 0x4E78, 0x62C3,
- 0x6855, 0xFFFD, 0x82FD, 0x89A5, 0x8FA0, 0x97B8, 0x9847, 0x9ABD,
- 0x5FB1, 0x6648, 0x66BF, 0x0000, 0xFFFD, 0x0000, 0xFFFD, 0xFFFD,
- 0x0000, 0x670E, 0x6918, 0x0000, 0x0000, 0x0000, 0x0000, 0x48D0,
- 0x4AB8, 0x0000, 0x0000, 0x0000, 0x0000, 0x51D2, 0x0000, 0x599F,
- 0x0000, 0x3BBE, 0x0000, 0x399B, 0x0000, 0x0000, 0x3762, 0x0000,
- 0x8B5E, 0x0000, 0xFFFD, 0x7209, 0x0000, 0x0000, 0x8EDA, 0x528F,
- 0x7171, 0x0000, 0x0000, 0x55BC, 0x0000, 0x3473, 0x0000, 0x4718,
- 0x0000, 0x5066, 0x34FB, 0x0000, 0xFFFD, 0x477C, 0x0000, 0x0000,
- 0xFFFD, 0x0000, 0x9056, 0x0000, 0x8B62, 0x5D5B, 0x0000, 0xFFFD,
- 0x0000, 0x8AEA, 0x0000, 0x0000, 0x4BC0, 0x0000, 0x9465, 0x0000,
- 0x6195, 0x5A27, 0x0000, 0x0000, 0x0000, 0x4E6A, 0x0000, 0x9656,
- 0x6D8F, 0x0000, 0x8977, 0x0000, 0xFFFD, 0x7B42, 0x0000, 0x0000,
- 0xFFFD, 0x7A45, 0x9A26, 0x365F, 0x0000, 0x0000, 0x7983, 0x5D2C,
- 0x0000, 0xFFFD, 0x46D0, 0x753B, 0x8865, 0x58B6, 0x371C, 0x0000,
- 0x3C54, 0x9281, 0x0000, 0x9330, 0x0000, 0x6C39, 0x0000, 0x8827,
- 0x88F5, 0x0000, 0x0000, 0x0000, 0x6EB8, 0x0000, 0x0000, 0x39A4,
- 0xFFFD, 0xFFFD, 0x453F, 0x66B6, 0x0000, 0x0000, 0x8943, 0x40DF,
- 0x0000, 0x39A1, 0x0000, 0x0000, 0x0000, 0x71AD, 0x8366, 0x0000,
- 0xFFFD, 0x4CB7, 0x0000, 0x0000, 0x0000, 0x7B43, 0x797E, 0x6FB5,
- 0x0000, 0x6A03, 0x0000, 0x53A2, 0x0000, 0x93BF, 0x6836, 0x975D,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x5D85, 0x0000, 0x5715, 0x9823,
- 0x0000, 0x5DAB, 0x0000, 0x65BE, 0x69D5, 0x53D2, 0x0000, 0x0000,
- 0x3C11, 0x6736, 0x0000, 0x35CA, 0x48FA, 0xFFFD, 0x7808, 0x9255,
- 0x43F2, 0x43DF, 0x59F8, 0xFFFD, 0x568B, 0x0000, 0x9012, 0x55C1,
- 0x4509, 0x7E7F, 0x6F56, 0x6AB1, 0x34E4, 0x0000, 0x373A, 0xFFFD,
- 0x0000, 0x0000, 0x3DEB, 0x0000, 0x0000, 0x56BF, 0x8E0E, 0x5B6D,
- 0x63DE, 0xFFFD, 0x6530, 0x562D, 0x541A, 0x0000, 0x4C7D, 0x5622,
- 0x561E, 0x7F49, 0x5975, 0x0000, 0x8770, 0x8117, 0x9D5E, 0x8D18,
- 0x763B, 0x9C45, 0x764E, 0x77B9, 0x9345, 0x5432, 0x8148, 0x82F7,
- 0x5625, 0x8132, 0x8418, 0x80BD, 0x55EA, 0x7962, 0x5643, 0x5416,
- 0x0000, 0x35CE, 0x5605, 0x55F1, 0x66F1, 0x0000, 0x362D, 0x7534,
- 0x55F0, 0x55BA, 0x5497, 0x5572, 0x0000, 0x0000, 0x5ED0, 0x0000,
- 0x0000, 0x0000, 0x9EAB, 0x7D5A, 0xFFFD, 0x0000, 0x629D, 0x976D,
- 0x5494, 0x8CCD, 0x71F6, 0x9176, 0x63FC, 0x63B9, 0x63FE, 0x5569,
- 0x0000, 0x9C72, 0x0000, 0x519A, 0x34DF, 0x0000, 0x51A7, 0x544D,
- 0x551E, 0x5513, 0x7666, 0x8E2D, 0x0000, 0x75B1, 0x80B6, 0x8804,
- 0xFFFD, 0x88C7, 0x81B6, 0x841C, 0x44EC, 0x7304, 0x830B, 0x567B,
- 0x9170, 0x9208, 0x0000, 0x7266, 0x474E, 0x0000, 0x40FA, 0x9C5D,
- 0x651F, 0x48F3, 0x0000, 0x0000, 0xFFFD, 0x0000, 0xED2B, 0x0000,
- 0x71A3, 0x7E8E, 0x9D50, 0x3577, 0x6CB2, 0x5367, 0x39DC, 0x0000,
- 0x822D, 0x544B, 0xED43, 0x3A52, 0x7374, 0x0000, 0x4D09, 0x9BED,
- 0xFFFD, 0x4C5B, 0x0000, 0x845C, 0x0000, 0x632E, 0x7D25, 0x3A2A,
- 0x9008, 0x52CC, 0x3E74, 0x367A, 0x45E9, 0x0000, 0x7640, 0x5AF0,
- 0x0000, 0x787A, 0x0000, 0x58A7, 0x40BF, 0x567C, 0x9B8B, 0x5D74,
- 0x7654, 0x0000, 0x9E85, 0x4CE1, 0xFFFD, 0x37FB, 0x6119, 0x0000,
- 0xED73, 0x565D, 0x0000, 0x5234, 0x35AD, 0xFFFD, 0x9D7C, 0x7C56,
- 0x9B39, 0x57DE, 0x5C53, 0x64D3, 0x0000, 0x0000, 0x86AD, 0x0000,
- 0x0000, 0xED8C, 0x51FE, 0x0000, 0x5D8E, 0x9703, 0x0000, 0x9E81,
- 0x904C, 0x7B1F, 0x9B02, 0x5CD1, 0x7BA3, 0x6268, 0x6335, 0x9AFF,
- 0x7BCF, 0x9B2A, 0x7C7E, 0xFFFD, 0x7C42, 0x7C86, 0x9C15, 0x7BFC,
- 0x9B09, 0xFFFD, 0x9C2E, 0x9F5A, 0x5573, 0x5BC3, 0x4FFD, 0x9E98,
- 0x4FF2, 0x5260, 0x52D1, 0x5767, 0x5056, 0x59B7, 0x5E12, 0x97C8,
- 0x9DAB, 0x8F5C, 0x5469, 0x97B4, 0x9940, 0x97BA, 0x532C, 0x6130,
- 0x692C, 0x53DA, 0x9C0A, 0x9D02, 0x4C3B, 0x9641, 0x6980, 0x50A6,
- 0x7546, 0x0000, 0x99DA, 0x5273, 0xEDC9, 0x9159, 0x9681, 0x915C,
- 0xEDCD, 0x9151, 0x0000, 0x637F, 0x6ACA, 0x5611, 0x918E, 0x757A,
- 0x6285, 0x734F, 0x7C70, 0x0000, 0xEDDC, 0x76D6, 0x9B9D, 0x4E2A,
- 0x0000, 0x83BE, 0x8842, 0xEDE4, 0x5C4A, 0x69C0, 0xFFFD, 0xFFFD,
- 0x521F, 0x5DF5, 0x4ECE, 0x6C31, 0x0000, 0x4F39, 0x549C, 0xFFFD,
- 0x529A, 0x8D82, 0x35FE, 0xFFFD, 0x35F3, 0xEDF6, 0x6B52, 0x917C,
- 0x9FA5, 0x9B97, 0x982E, 0x98B4, 0x9ABA, 0x9EA8, 0x9E84, 0x7B14,
- 0xEE02, 0x6BFA, 0x8818, 0x7F78, 0xEE06, 0x5620, 0x0000, 0x8E77,
- 0x9F53, 0xEE0B, 0x8DD4, 0x8E4F, 0x9E1C, 0x8E01, 0x6282, 0x0000,
- 0x8E28, 0x8E75, 0x7AD3, 0x7A3E, 0x78D8, 0x6CEA, 0x8A67, 0x7607,
- 0x9F26, 0x6CCE, 0x87D6, 0x75C3, 0x0000, 0x7853, 0x8D0C, 0x72E2,
- 0x7371, 0x8B2D, 0x7302, 0x74F1, 0x8CEB, 0x0000, 0x862F, 0x5FBA,
- 0x88A0, 0x44B7, 0xEE2F, 0x0000, 0xEE32, 0x8A7E, 0x0000, 0xEE35,
- 0x60FD, 0x7667, 0x9AD7, 0x9D44, 0x936E, 0x9B8F, 0x87F5, 0xEE3D,
- 0xFFFD, 0x8CF7, 0x732C, 0x9721, 0x9BB0, 0x35D6, 0x72B2, 0x4C07,
- 0x7C51, 0x994A, 0x6159, 0x4C04, 0x9E96, 0x617D, 0xEE4D, 0x575F,
- 0x616F, 0x62A6, 0x6239, 0xFFFD, 0x3A5C, 0x61E2, 0x53AA, 0x6364,
- 0x6802, 0x35D2, 0x5D57, 0x8FDA, 0x0000, 0xEE5E, 0x50D9, 0x7906,
- 0x5332, 0x9638, 0x0000, 0x4065, 0xEE66, 0x77FE, 0xEE68, 0x7CC2,
- 0x0000, 0x7CDA, 0x7A2D, 0x8066, 0x8063, 0x7D4D, 0x7505, 0x74F2,
- 0x8994, 0x821A, 0x670C, 0x8062, 0x0000, 0x805B, 0x74F0, 0x8103,
- 0x7724, 0x8989, 0x0000, 0x7553, 0x87A9, 0x87CE, 0x81C8, 0x878C,
- 0x8A49, 0x8CAD, 0x8B43, 0x772B, 0x74F8, 0x84DA, 0x69B2, 0x8DA6,
- 0xEE8C, 0x89A9, 0xFFFD, 0x6DB9, 0x87C1, 0x0000, 0x74E7, 0x3DDB,
- 0x7176, 0x60A4, 0x619C, 0x3CD1, 0xFFFD, 0x6077, 0xEE9A, 0x7F71,
- 0x0000, 0x60E9, 0x4B7E, 0x0000, 0x92DB, 0x0000, 0x0000, 0x854C,
- 0x42B5, 0x73EF, 0x51B5, 0x3649, 0x0000, 0x0000, 0x9344, 0x0000,
- 0x82EE, 0x0000, 0x783C, 0x6744, 0x62DF, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x4FAB, 0x0000, 0x5008, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0xFFFD, 0x0000, 0x5FA4, 0x0000, 0x0000, 0x6EDB,
- 0x0000, 0x50DE, 0x5101, 0x347A, 0x510E, 0x986C, 0x3743, 0x8416,
- 0x0000, 0x0000, 0x5160, 0x0000, 0x516A, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x5B82, 0x877D, 0x0000, 0x0000,
- 0x51B2, 0x51B8, 0x9D34, 0x51C9, 0x51CF, 0x51D1, 0x3CDC, 0x51D3,
- 0x0000, 0x51B3, 0xFFFD, 0xFFFD, 0x51ED, 0x83CD, 0x693E, 0x0000,
- 0x5F7B, 0x520B, 0x5226, 0x523C, 0x52B5, 0x5257, 0x5294, 0x52B9,
- 0x52C5, 0x7C15, 0x8542, 0x52E0, 0x860D, 0x0000, 0x0000, 0x0000,
- 0x5549, 0x6ED9, 0x0000, 0x0000, 0x0000, 0x5333, 0xFFFD, 0x0000,
- 0x6CCB, 0x0000, 0x681B, 0x73D5, 0x604A, 0x3EAA, 0x38CC, 0x0000,
- 0x71DD, 0x44A2, 0x536D, 0x5374, 0x0000, 0x537E, 0x0000, 0x0000,
- 0x0000, 0x77E6, 0x5393, 0x0000, 0x53A0, 0x53AB, 0x53AE, 0x73A7,
- 0x0000, 0x3F59, 0x739C, 0x53C1, 0x53C5, 0x6C49, 0x4E49, 0x57FE,
- 0x53D9, 0x3AAB, 0x0000, 0x53E0, 0x0000, 0x0000, 0x53F6, 0x0000,
- 0x5413, 0x7079, 0x552B, 0x6657, 0x6D5B, 0x546D, 0x0000, 0x0000,
- 0x555D, 0x548F, 0x54A4, 0x47A6, 0x0000, 0x0000, 0x3DB4, 0x0000,
- 0x0000, 0x0000, 0x5547, 0x4CED, 0x542F, 0x7417, 0x5586, 0x55A9,
- 0xFFFD, 0x0000, 0x0000, 0x4552, 0x0000, 0x66B3, 0x0000, 0x5637,
- 0x66CD, 0x0000, 0x66A4, 0xFFFD, 0x564D, 0x564F, 0x78F1, 0x56F1,
- 0x9787, 0x53FE, 0x5700, 0x56EF, 0x56ED, 0x0000, 0x3623, 0x0000,
- 0x5746, 0x0000, 0x6C6E, 0x708B, 0x5742, 0x36B1, 0x0000, 0x57E6,
- 0x0000, 0x5803, 0x0000, 0x0000, 0x5826, 0x0000, 0x581F, 0x58AA,
- 0x3561, 0x58E0, 0x58DC, 0x0000, 0x58FB, 0x5BFF, 0x5743, 0x0000,
- 0x0000, 0x93D3, 0x35A1, 0x591F, 0x68A6, 0x36C3, 0x6E59, 0x0000,
- 0x5A24, 0xFFFD, 0x0000, 0x8505, 0x59C9, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x59D9, 0x0000, 0x0000, 0x0000, 0x6D71, 0x0000, 0x0000,
- 0x59F9, 0x0000, 0x5AAB, 0x5A63, 0x36E6, 0x0000, 0xFFFD, 0x3708,
- 0x5A96, 0x7465, 0x5AD3, 0x0000, 0x0000, 0x0000, 0x3732, 0x0000,
- 0x5E83, 0x52D0, 0x5B76, 0x6588, 0x5B7C, 0x0000, 0x4004, 0x485D,
- 0x0000, 0x5BD5, 0x0000, 0x0000, 0x0000, 0x5BF3, 0x5B9D, 0x4D10,
- 0x5C05, 0x0000, 0x5C13, 0x73CE, 0x5C14, 0x0000, 0x0000, 0x5C49,
- 0x48DD, 0x5C85, 0x5CE9, 0x5CEF, 0x5D8B, 0x0000, 0x0000, 0x5D10,
- 0x5D18, 0x5D46, 0x0000, 0x5CBA, 0x5DD7, 0x82FC, 0x382D, 0x0000,
- 0x0000, 0x0000, 0x8287, 0x3836, 0x3BC2, 0x5E2E, 0x6A8A, 0xFFFD,
- 0xE12F, 0x0000, 0x0000, 0x53A6, 0x4EB7, 0xFFFD, 0x53A8, 0x0000,
- 0x5E09, 0xE138, 0x0000, 0x5EF9, 0x5EFB, 0x38A0, 0x5EFC, 0x683E,
- 0x941B, 0x5F0D, 0x0000, 0x0000, 0x3ADE, 0x0000, 0x5F3A, 0x0000,
- 0x0000, 0x0000, 0x5F63, 0x0000, 0x5F72, 0x9340, 0x0000, 0x5FA7,
- 0x5DB6, 0x3D5F, 0x0000, 0x0000, 0x0000, 0x0000, 0x91D6, 0x0000,
- 0x0000, 0x6031, 0x6685, 0x3963, 0x3DC7, 0x3639, 0x5790, 0x0000,
- 0x7971, 0x3E40, 0x609E, 0xFFFD, 0x60EA, 0x0000, 0x0000, 0x0000,
- 0x74A4, 0x50E1, 0x5AA0, 0x6164, 0x6142, 0x0000, 0x0000, 0x6181,
- 0x51F4, 0x0000, 0x6187, 0x5BAA, 0x0000, 0x0000, 0x61D3, 0x0000,
- 0x0000, 0x61D0, 0x3932, 0x0000, 0x0000, 0x6023, 0x615C, 0x651E,
- 0x638B, 0x0000, 0x62C5, 0x0000, 0x62D5, 0x0000, 0x636C, 0x0000,
- 0x3A17, 0x6438, 0x63F8, 0x0000, 0x0000, 0x6F8A, 0x0000, 0xFFFD,
- 0x0000, 0x64E1, 0x64E5, 0x947B, 0x3A66, 0x643A, 0x3A57, 0x654D,
- 0x6F16, 0x0000, 0x0000, 0x6585, 0x656D, 0x655F, 0xFFFD, 0x65B5,
- 0x0000, 0x4B37, 0x65D1, 0x40D8, 0x0000, 0xE1AB, 0x65E3, 0x5FDF,
- 0x0000, 0x6618, 0x0000, 0x0000, 0x6644, 0x0000, 0x0000, 0x664B,
- 0x0000, 0x6667, 0x0000, 0x6673, 0xFA12, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x77C5, 0x0000, 0x99A4, 0x6702, 0x0000, 0x0000, 0x69FA,
- 0x0000, 0x0000, 0x6767, 0x6762, 0x0000, 0x0000, 0x67D7, 0x44E9,
- 0x6822, 0x6E50, 0x923C, 0x6801, 0x0000, 0x0000, 0x685D, 0x0000,
- 0x69E1, 0x6A0B, 0x0000, 0x6973, 0x68C3, 0x0000, 0x6901, 0x6900,
- 0x3A01, 0x0000, 0x3B80, 0x67AC, 0x6961, 0x0000, 0x42FC, 0x6936,
- 0x6998, 0x3BA1, 0x0000, 0x8363, 0x5090, 0x69F9, 0x0000, 0x0000,
- 0x6A45, 0x0000, 0x6A9D, 0x3BF3, 0x67B1, 0x6AC8, 0x0000, 0x3C0D,
- 0x6B1D, 0x0000, 0x60DE, 0x6B35, 0x6B74, 0x0000, 0x6EB5, 0x0000,
- 0xFFFD, 0x0000, 0x3740, 0x5421, 0x0000, 0x6BE1, 0x0000, 0x6BDC,
- 0x6C37, 0x0000, 0x0000, 0x0000, 0x6C5A, 0x8226, 0x6C79, 0x0000,
- 0x44C5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x36E5, 0x3CEB,
- 0x0000, 0x9B83, 0x0000, 0x0000, 0x7F8F, 0x6837, 0x0000, 0x0000,
- 0x0000, 0x6D96, 0x6D5C, 0x6E7C, 0x6F04, 0x0000, 0x0000, 0x0000,
- 0x8533, 0x0000, 0x51C7, 0xFFFD, 0xFFFD, 0x842E, 0x0000, 0x0000,
- 0x0000, 0x7453, 0x0000, 0x79CC, 0x6E4F, 0x5A91, 0x0000, 0x6FF8,
- 0x370D, 0x6F9D, 0x0000, 0x6EFA, 0x0000, 0x0000, 0x4555, 0x93F0,
- 0x6F44, 0x6F5C, 0x3D4E, 0x6F74, 0x0000, 0x3D3B, 0x6F9F, 0x0000,
- 0x6FD3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x51DF,
- 0xE251, 0xE252, 0x0000, 0x0000, 0x704B, 0x707E, 0x70A7, 0xFFFD,
- 0x70CC, 0x70D5, 0x70D6, 0x70DF, 0x4104, 0x3DE8, 0x71B4, 0x7196,
- 0x0000, 0x712B, 0x7145, 0x5A88, 0x714A, 0xFA48, 0x0000, 0x714F,
- 0x9362, 0x0000, 0x712C, 0x0000, 0x0000, 0x0000, 0x71BA, 0x0000,
- 0x70BD, 0x720E, 0x9442, 0x7215, 0x5911, 0x9443, 0x7224, 0x9341,
- 0x0000, 0x722E, 0x7240, 0x0000, 0x68BD, 0x7255, 0x7257, 0x3E55,
- 0x0000, 0x680D, 0x6F3D, 0x7282, 0xFFFD, 0x732B, 0x0000, 0x0000,
- 0x48ED, 0x0000, 0x7328, 0x732E, 0x73CF, 0x73AA, 0x0000, 0x0000,
- 0x73C9, 0x7449, 0x0000, 0x0000, 0x0000, 0x6623, 0x36C5, 0x0000,
- 0x0000, 0x0000, 0x73F7, 0x7415, 0x6903, 0x0000, 0x7439, 0x3ED7,
- 0x0000, 0x0000, 0x7460, 0x0000, 0x7447, 0x73E4, 0x7476, 0x83B9,
- 0x746C, 0x7474, 0x93F1, 0x6A2C, 0x7482, 0x4953, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x5B46, 0x0000, 0x0000, 0x74C8, 0x0000, 0x750E,
- 0x751E, 0x0000, 0x0000, 0x5BD7, 0x0000, 0x9385, 0x754D, 0x754A,
- 0x7567, 0x756E, 0x0000, 0x3F04, 0x0000, 0x758E, 0x745D, 0x759E,
- 0x75B4, 0x7602, 0x762C, 0x7651, 0x764F, 0x766F, 0xE2D3, 0x0000,
- 0x7690, 0x81EF, 0x37F8, 0x0000, 0x0000, 0x76A1, 0x76A5, 0x76B7,
- 0x76CC, 0x0000, 0x8462, 0x0000, 0x0000, 0x0000, 0x771E, 0x7726,
- 0x7740, 0x64AF, 0x0000, 0x7758, 0x0000, 0x77AF, 0x0000, 0x0000,
- 0x0000, 0x77F4, 0xFFFD, 0x68CA, 0x78AF, 0x78C7, 0x78D3, 0x96A5,
- 0x792E, 0x0000, 0x78D7, 0x7934, 0x78B1, 0x0000, 0x8FB8, 0x8884,
- 0x0000, 0x7986, 0x8900, 0x6902, 0x7980, 0x0000, 0x799D, 0x0000,
- 0x793C, 0x79A9, 0x6E2A, 0x0000, 0x3EA8, 0x79C6, 0x0000, 0x79D4,
- 0xFFFD, 0x5525, 0xFFFD, 0x0000, 0x0000, 0x0000, 0x5590, 0x0000,
- 0x39EC, 0x0000, 0x8E46, 0x0000, 0x0000, 0xFFFD, 0x0000, 0x777A,
- 0x0000, 0x3A34, 0x47D5, 0x0000, 0x0000, 0x0000, 0x64DD, 0x0000,
- 0x0000, 0x0000, 0xFFFD, 0x648D, 0x8E7E, 0x0000, 0xFFFD, 0x0000,
- 0x0000, 0x0000, 0x0000, 0xFFFD, 0x0000, 0x0000, 0x0000, 0x47F4,
- 0x0000, 0x0000, 0x9AB2, 0x3A67, 0x0000, 0x3FED, 0x3506, 0x0000,
- 0x0000, 0xFFFD, 0x0000, 0x9D6E, 0x9815, 0xFFFD, 0x43D9, 0xFFFD,
- 0x64B4, 0x54E3, 0xFFFD, 0x0000, 0xFFFD, 0x39FB, 0xFFFD, 0x0000,
- 0x0000, 0x0000, 0x64EA, 0x0000, 0x0000, 0x8E68, 0xFFFD, 0x0000,
- 0x0000, 0xFFFD, 0x480B, 0x0000, 0x3FFA, 0x5873, 0x0000, 0xFFFD,
- 0x0000, 0x0000, 0x0000, 0x0000, 0xFFFD, 0x5579, 0xFFFD, 0x43BA,
- 0xFFFD, 0x4AB4, 0x0000, 0x0000, 0x81AA, 0x98F5, 0x0000, 0x6379,
- 0x39FE, 0x0000, 0x8DC0, 0x56A1, 0x647C, 0x3E43, 0xFFFD, 0x0000,
- 0x0000, 0x0000, 0xFFFD, 0xFFFD, 0x0000, 0x0000, 0x3992, 0x3A06,
- 0x0000, 0x3578, 0x0000, 0x0000, 0xFFFD, 0xFFFD, 0x0000, 0x0000,
- 0x34BC, 0x6C3D, 0x0000, 0xFFFD, 0xFFFD, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3A18,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x95AA, 0xFFFD, 0x0000,
- 0x7140, 0xFFFD, 0x5156, 0x4EFE, 0x5088, 0xFFFD, 0x3493, 0x5186,
- 0x5E42, 0x5205, 0x5227, 0x5279, 0x0000, 0x3553, 0x53C2, 0x535F,
- 0xFFFD, 0x553F, 0xFFFD, 0x55D8, 0x35DD, 0x5621, 0xFFFD, 0x5654,
- 0x0000, 0xFFFD, 0x0000, 0xFFFD, 0x0000, 0xFFFD, 0xFFFD, 0x37B9,
- 0x5CC1, 0x5D15, 0x5D56, 0x3838, 0x4E81, 0x5EBD, 0x3914, 0x61B9,
- 0x6290, 0x6318, 0x645A, 0x6491, 0x816D, 0x8184, 0x8193, 0x6800,
- 0x3BBC, 0x728F, 0x72CD, 0x0000, 0x7339, 0x7542, 0x75DC, 0x3FC0,
- 0x0000, 0x3FD7, 0xFFFD, 0x7680, 0x768C, 0x40A8, 0x7839, 0x4103,
- 0x7A91, 0x7C1B, 0x7CED, 0x7F93, 0x7FAE, 0xFFFD, 0x82FF, 0x585F,
- 0x86B2, 0x45AC, 0x878B, 0x8947, 0xFFFD, 0x8A29, 0xFFFD, 0x8E71,
- 0x0000, 0x8EB0, 0xFFFD, 0x915E, 0x918C, 0x990E, 0x991C, 0xFFFD,
- 0xFFFD, 0x9B81, 0x9DC0, 0x9D93, 0x9EAC, 0x4D91, 0xFFFD, 0x93BA,
- 0x9E7B, 0x7089, 0x7348, 0xFFFD, 0x7999, 0x8FB7, 0xFFFD, 0x9942,
- 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, 0x00A9,
- 0x2122, 0x2026, 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, 0x20AC, 0x20AC, 0x2110, 0x20AC, 0x20AC, 0x309B, 0x309C,
- 0x2E80, 0x31C0, 0x31C1, 0x31C2, 0x31C3, 0x31C4, 0x0000, 0x31C5,
- 0x0000, 0x0000, 0x31C6, 0x31C7, 0x0000, 0x0000, 0x31C8, 0x0000,
- 0x31C9, 0x31CA, 0x31CB, 0x31CC, 0x0000, 0x31CD, 0x31CE, 0xF538,
- 0xF539, 0x0000, 0x0000, 0x9751, 0x0000, 0x4E5B, 0x4EBB, 0x353E,
- 0x5C23, 0x5F51, 0x5FC4, 0x38FA, 0x624C, 0x6535, 0x6B7A, 0x6C35,
- 0x6C3A, 0x706C, 0x722B, 0x4E2C, 0x72AD, 0x0000, 0x7F52, 0x793B,
- 0x7CF9, 0x7F53, 0x0000, 0x34C1, 0x0000, 0x8002, 0x8080, 0x0000,
- 0x0000, 0x535D, 0x8864, 0x89C1, 0x0000, 0x8BA0, 0x8D1D, 0x9485,
- 0x9578, 0x957F, 0x95E8, 0x0000, 0x97E6, 0x9875, 0x98CE, 0x98DE,
- 0x9963, 0x0000, 0x9C7C, 0x9E1F, 0x9EC4, 0x6B6F, 0xF907, 0x4E37,
- 0x0000, 0x961D, 0x6237, 0x94A2, 0x2E84, 0x2E86, 0x2E87, 0x2E88,
- 0x2E8A, 0x2E8C, 0x2E8D, 0x2E95, 0x2E9C, 0x2EA5, 0x2EA7, 0x2EAA,
- 0x2EAC, 0x2EAE, 0x2EB6, 0x2EBC, 0x2EBE, 0x2ECA, 0x2ECC, 0x2ECD,
- 0x2ECF, 0x2ED6, 0x2ED7, 0x2EDE, 0x0000, 0x0000, 0x650A, 0x4E3D,
- 0x6EDD, 0x9D4E, 0x91DF, 0x0000, 0x4F1A, 0x4F28, 0x4FA8, 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, 0x7411, 0x7CFC, 0x7DCD, 0x6946,
- 0x7AC9, 0x78B8, 0x80BC, 0x8D0B, 0x80F6, 0x0000, 0x809F, 0x9EC7,
- 0x4CCD, 0x9DC9, 0x9E0C, 0x4C3E, 0x0000, 0x0000, 0x9E0A, 0x0000,
- 0x35C1, 0x6E9A, 0x823E, 0x7519, 0x4911, 0x9A6C, 0x9A8F, 0x9F99,
- 0x7987, 0x0000, 0x0000, 0x0000, 0x0000, 0x4E24, 0x4E80, 0x4E87,
- 0x4EBF, 0x4EEB, 0x4F37, 0x344C, 0x4FBD, 0x3E48, 0x5003, 0x347D,
- 0x34A5, 0x5905, 0x51DB, 0x51FC, 0x4E89, 0x5290, 0x5327, 0x35C7,
- 0x53A9, 0x3551, 0x53B0, 0x5423, 0x356D, 0x3572, 0x3681, 0x5493,
- 0x54A3, 0x54B4, 0x54B9, 0x54D0, 0x54EF, 0x5518, 0x5523, 0x5528,
- 0x3598, 0x35A5, 0x35BF, 0x55D7, 0x35C5, 0x0000, 0x4053, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x40BB, 0x0000, 0x5652, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x35FB, 0x0000, 0x0000, 0x0000, 0x0000, 0x3F93, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3FF9,
- 0x0000, 0x6432, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x54CC, 0x82C4, 0x55B9, 0x0000, 0x9C26, 0x9AB6,
- 0x0000, 0x80EC, 0x5C1C, 0x0000, 0x8134, 0x3797, 0x0000, 0x91B6,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3609, 0x0000, 0x56AF,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x5A54, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x579C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3703,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x5899, 0x5268, 0x361A, 0x0000, 0x7BB2, 0x5B68, 0x4800, 0x4B2C,
- 0x9F27, 0x49E7, 0x9C1F, 0x9B8D, 0x0000, 0x0000, 0x55FB, 0x35F2,
- 0x5689, 0x5D3E, 0x5D48, 0x3DFC, 0x380F, 0x5DA4, 0x5DB9, 0x3820,
- 0x5F25, 0x5F83, 0x3908, 0x393F, 0x394D, 0x60D7, 0x613D, 0x5CE5,
- 0x3989, 0x61B7, 0x61CF, 0x39B8, 0x622C, 0x62E5, 0x39F8, 0x56B1,
- 0x3A03, 0x63E2, 0x63FB, 0x6407, 0x3A4B, 0x64C0, 0x9F9F, 0x3A97,
- 0x6586, 0x3ABD, 0x65FF, 0x6653, 0x3AF2, 0x6692, 0x3B22, 0x6716,
- 0x3B42, 0x67A4, 0x3B58, 0x684A, 0x6884, 0x3B72, 0x3B71, 0x3B7B,
- 0x6909, 0x6943, 0x725C, 0x6964, 0x699F, 0x6985, 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, 0x0000, 0x6EBB, 0x6EE2, 0x6EDA,
- 0x9F7F, 0x6EE8, 0x6EE9, 0x6F24, 0x6F34, 0x3D46, 0x0000, 0x6F81,
- 0x6FBE, 0x3D6A, 0x3D75, 0x71B7, 0x5C99, 0x3D8A, 0x702C, 0x3D91,
- 0x7050, 0x7054, 0x706F, 0x707F, 0x0000, 0x43C1, 0x35F1, 0x0000,
- 0x364E, 0x3DAD, 0x0000, 0x667D, 0x7C74, 0x748D, 0x7E92, 0x4503,
- 0x0000, 0x0000, 0x0000, 0x347E, 0x0000, 0x0000, 0x0000, 0x8771,
- 0x63C1, 0x7777, 0x898A, 0x0000, 0x8B4C, 0x0000, 0x492A, 0x0000,
- 0x0000, 0x0000, 0x3AF0, 0x708F, 0x0000, 0x0000, 0x0000, 0x6888,
- 0x0000, 0x9F62, 0x93C6, 0x0000, 0x9366, 0x928F, 0x8614, 0x0000,
- 0x4190, 0x678F, 0x681E, 0x3863, 0x0000, 0x3B19, 0x8496, 0x0000,
- 0x39E2, 0x8480, 0x436E, 0x9771, 0x999B, 0x492D, 0x6F17, 0x0000,
- 0x70A6, 0x0000, 0x7E65, 0x5D2F, 0x3DF3, 0x0000, 0x0000, 0x7DA4,
- 0x8426, 0x5485, 0x0000, 0x0000, 0x577E, 0x0000, 0x0000, 0x3FE5,
- 0x0000, 0x0000, 0x7003, 0x0000, 0x5D70, 0x738F, 0x0000, 0x0000,
- 0x4FC8, 0x7FE7, 0x7310, 0x7338, 0x7341, 0x3EA9, 0x71F5, 0x0000,
- 0x73E1, 0x3ECA, 0x3ED1, 0x7419, 0x741E, 0x741F, 0x3EE2, 0x3EF0,
- 0x3EF4, 0x3EFA, 0x74D3, 0x3F0E, 0x3F53, 0x756D, 0x7572, 0x758D,
- 0x3F7C, 0x75C8, 0x764D, 0x7674, 0x3FDC, 0x767A, 0x7188, 0x5623,
- 0x8980, 0x401D, 0x7743, 0x4039, 0x4045, 0x35DB, 0x7798, 0x406A,
- 0x406F, 0x77BE, 0x77CB, 0x7818, 0x781C, 0x7847, 0x7851, 0x7866,
- 0x8448, 0x0000, 0x7933, 0x7932, 0x4109, 0x7991, 0x7A06, 0x4167,
- 0x41B2, 0x7ABC, 0x8279, 0x41C4, 0x7ACF, 0x7ADB, 0x41CF, 0x7B62,
- 0x7B6C, 0x7B7B, 0x7C12, 0x4260, 0x427A, 0x7C7B, 0x7C9C, 0x428C,
- 0x7CB8, 0x4294, 0x8F93, 0x70C0, 0x0000, 0x7DCF, 0x7DD4, 0x7DD0,
- 0x7DFD, 0x7FB4, 0x729F, 0x4397, 0x8020, 0x8025, 0x802E, 0x8031,
- 0x8054, 0x57B4, 0x70A0, 0x80B7, 0x80E9, 0x43ED, 0x810C, 0x810E,
- 0x8112, 0x8114, 0x4401, 0x3B39, 0x8156, 0x8159, 0x815A, 0x4413,
- 0x817C, 0x4425, 0x442D, 0x81A5, 0x57EF, 0x81C1, 0x81E4, 0x8254,
- 0x448F, 0x8276, 0x82CA, 0x82D8, 0x44B0, 0x8357, 0x9669, 0x8405,
- 0x70F5, 0x8464, 0x8488, 0x4504, 0x84BE, 0x84E1, 0x84F8, 0x8510,
- 0x8538, 0x8552, 0x453B, 0x856F, 0x8570, 0x85E0, 0x4577, 0x8672,
- 0x8692, 0x86EF, 0x9645, 0x4606, 0x4617, 0x88AE, 0x88FF, 0x8924,
- 0x8991, 0x0000, 0x8A38, 0x8A94, 0x8AB4, 0x8C51, 0x8CD4, 0x8CF2,
- 0x8D1C, 0x4798, 0x8DC3, 0x47ED, 0x8E3A, 0x5754, 0x55F5, 0x4837,
- 0x8ECE, 0x8EE2, 0x8EE4, 0x8EED, 0x8EF2, 0x8FC1, 0x8FCA, 0x8FCC,
- 0x9033, 0x48AD, 0x98E0, 0x9213, 0x491E, 0x9228, 0x9258, 0x926B,
- 0x92B1, 0x92AE, 0x92BF, 0x92E3, 0x92EB, 0x92F3, 0x92F4, 0x92FD,
- 0x9343, 0x9384, 0x93AD, 0x4945, 0x4951, 0x9417, 0x941D, 0x942D,
- 0x943E, 0x496A, 0x9454, 0x9479, 0x952D, 0x95A2, 0x49A7, 0x95F4,
- 0x9633, 0x49E5, 0x4A24, 0x9740, 0x4A35, 0x97B2, 0x97C2, 0x4AE4,
- 0x98B9, 0x4B19, 0x98F1, 0x5844, 0x9919, 0x9937, 0x995D, 0x9962,
- 0x4B70, 0x99C5, 0x4B9D, 0x9A3C, 0x9B0F, 0x9B69, 0x9BDD, 0x9BF1,
- 0x9BF4, 0x4C6D, 0x9C20, 0x376F, 0x0000, 0x9D49, 0x9EFE, 0x5650,
- 0x9DBD, 0x9DFC, 0x94F6, 0x8FB6, 0x9EB1, 0x9EBD, 0x9EC6, 0x94DC,
- 0x9EE2, 0x9EF1, 0x9EF8, 0x9F44, 0x0000, 0x0000, 0x0000, 0x94C3,
- 0x0000, 0x94C1, 0x0000, 0x0000, 0x0000, 0x0000, 0x5757, 0x7173,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x549E, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3647, 0x0000,
- 0x0000, 0x0000, 0x5364, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x70BB, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7198, 0x0000, 0x69E9,
- 0x36C8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x58B5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x5788, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x5965, 0x0000, 0x0000, 0x573F, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x57A1, 0x7151, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x56B9,
- 0x0000, 0x3618, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x949F, 0x0000, 0x36B9,
- 0x0000, 0x0000, 0x56D6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x63E6,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x3DF7, 0x0000, 0x0000, 0x8FD0, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x7E9F, 0x0000, 0x0000, 0x4CA4, 0x9547,
- 0x0000, 0x71A2, 0x0000, 0x0000, 0x4D9C, 0x0000, 0x8FBE, 0x8FBA,
- 0x0000, 0x8FB9, 0x0000, 0x4EEA, 0x0000, 0x8E80, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4E9A, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3DC6, 0x0000,
- 0x4E1C, 0x0000, 0x0000, 0x0000, 0x0000, 0x55DE, 0x8786, 0x0000,
- 0x0000, 0x5B90, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4E1A, 0x4E04, 0x5B0D,
- 0x36AC, 0x537D, 0x36A5, 0x589A, 0x0000, 0x57AA, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x57A7, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x9C1B, 0x0000, 0x3E06, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x577A, 0x54DA, 0x717A, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3635, 0x0000,
- 0x5220, 0x3C18, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x4562, 0x5B1F, 0x0000, 0x9F50, 0x9EA6, 0x0000, 0x51E2, 0x5342,
- 0x66AD, 0x585C, 0x5553, 0x3D85, 0x6160, 0x48AE, 0x97BD, 0x0000,
- 0x60B3, 0x8424, 0x9814, 0x0000, 0x0000, 0x0000, 0x3B2B, 0x3D32,
- 0x0000, 0x7081, 0x5C9C, 0x0000, 0x3730, 0x0000, 0x0000, 0x0000,
- 0x0000, 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, 0x01DC, 0x00FC, 0xF344, 0x1EBF, 0xF346, 0x1EC1,
- 0x00EA, 0x0261, 0x0283, 0x0250, 0x025B, 0x0254, 0x0275, 0x0153,
- 0x00F8, 0x014B, 0x028A, 0x026A, 0x23DA, 0x23DB, 0x2E9D, 0x2EC6,
- 0x2EE3, 0x503B, 0x6DFE, 0x0000, 0x9FA6, 0x3DC9, 0x888F, 0x0000,
- 0x7077, 0x5CF5, 0x4B20, 0x0000, 0x3559, 0x0000, 0x6122, 0x0000,
- 0x8FA7, 0x91F6, 0x7191, 0x6719, 0x73BA, 0x0000, 0x0000, 0x3C8B,
- 0x0000, 0x4B10, 0x78E4, 0x7402, 0x51AE, 0x0000, 0x4009, 0x6A63,
- 0x0000, 0x4223, 0x860F, 0x7A2A, 0x0000, 0x0000, 0x9755, 0x704D,
- 0x5324, 0x0000, 0x93F4, 0x76D9, 0x0000, 0x9FA7, 0x77DD, 0x4EA3,
- 0x4FF0, 0x50BC, 0x4E2F, 0x4F17, 0x9FA8, 0x5434, 0x7D8B, 0x5892,
- 0x58D0, 0x0000, 0x5E92, 0x5E99, 0x5FC2, 0x0000, 0x658B, 0x0000,
- 0x6919, 0x6A43, 0x0000, 0x6CFF, 0x7200, 0x0000, 0x738C, 0x3EDB,
- 0x0000, 0x5B15, 0x74B9, 0x8B83, 0x0000, 0x0000, 0x7A93, 0x7BEC,
- 0x7CC3, 0x7E6C, 0x82F8, 0x8597, 0x9FA9, 0x8890, 0x9FAA, 0x8EB9,
- 0x9FAB, 0x8FCF, 0x855F, 0x99E0, 0x9221, 0x9FAC, 0x0000, 0x0000,
- 0x4071, 0x42A2, 0x5A1A, 0x9868, 0x676B, 0x4276, 0x573D, 0x85D6,
- 0x0000, 0x82BF, 0x0000, 0x4C81, 0x0000, 0x5D7B, 0x0000, 0x0000,
- 0x9FAD, 0x9FAE, 0x5B96, 0x9FAF, 0x7E5B, 0x43F0, 0x4C32, 0x4603,
- 0x45A6, 0x4578, 0x0000, 0x4D77, 0x45B3, 0x0000, 0x4CE2, 0x0000,
- 0x3B95, 0x4736, 0x4744, 0x4C47, 0x4C40, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x4C57, 0x0000, 0x474F, 0x45DA, 0x4C85, 0x0000,
- 0x4D07, 0x4AA4, 0x46A1, 0x0000, 0x7225, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x664D, 0x56FB, 0x7D95, 0x591D, 0x0000, 0x3DF4, 0x9734,
- 0x0000, 0x5BDB, 0x0000, 0x5AA4, 0x3625, 0x0000, 0x5AD1, 0x5BB7,
- 0x5CFC, 0x676E, 0x8593, 0x0000, 0x7461, 0x749D, 0x0000, 0x66E7,
- 0x6E57, 0x79CA, 0x3D88, 0x44C3, 0x0000, 0x0000, 0x439A, 0x4536,
- 0x5CD5, 0x0000, 0x8AF9, 0x5C78, 0x3D12, 0x0000, 0x5D78, 0x9FB2,
- 0x7157, 0x4558, 0x0000, 0x0000, 0x4C77, 0x3978, 0x344A, 0x0000,
- 0x0000, 0x8ACC, 0x4FB4, 0x0000, 0x59BF, 0x816C, 0x9856, 0x0000,
- 0x5F3B, 0x0000, 0x0000, 0x0000, 0x4102, 0x46BB, 0x0000, 0x3F07,
- 0x9FB3, 0x0000, 0x40F8, 0x37D6, 0x46F7, 0x0000, 0x417C, 0x0000,
- 0x0000, 0x456D, 0x38D4, 0x0000, 0x4561, 0x451B, 0x4D89, 0x4C7B,
+ 0xFFFD, 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, 0x00A9, 0x2122, 0x2026,
+ 0x3000, 0xFF0C, 0x3001, 0x3002, 0xFF0E, 0x2027, 0xFF1B, 0xFF1A, 0xFF1F,
+ 0xFF01, 0xFE30, 0x22EF, 0x2025, 0xFE50, 0xFE51, 0xFE52, 0x00B7, 0xFE54,
+ 0xFE55, 0xFE56, 0xFE57, 0xFF5C, 0x2013, 0xFE31, 0x2014, 0xFFFD, 0xFFFD,
+ 0xFFFD, 0xFFFD, 0xFF08, 0xFF09, 0xFE35, 0xFE36, 0xFF5B, 0xFF5D, 0xFE37,
+ 0xFE38, 0x3014, 0x3015, 0xFE39, 0xFE3A, 0x3010, 0x3011, 0xFE3B, 0xFE3C,
+ 0x300A, 0x300B, 0xFE3D, 0xFE3E, 0x3008, 0x3009, 0xFE3F, 0xFE40, 0x300C,
+ 0x300D, 0xFE41, 0xFE42, 0x300E, 0x300F, 0xFE43, 0xFE44, 0xFE59, 0xFE5A,
+ 0xFE5B, 0xFE5C, 0xFE5D, 0xFE5E, 0x2018, 0x2019, 0x201C, 0x201D, 0x301D,
+ 0x301E, 0x2035, 0x2032, 0xFF03, 0xFF06, 0xFF0A, 0x203B, 0x00A7, 0x3003,
+ 0x25CB, 0x25CF, 0x25B3, 0x25B2, 0x25CE, 0x2606, 0x2605, 0x25C7, 0x25C6,
+ 0x25A1, 0x25A0, 0x25BD, 0x25BC, 0x32A3, 0x2105, 0x203E, 0xFFE3, 0xFF3F,
+ 0x02CD, 0xFE49, 0xFE4A, 0xFE4D, 0xFE4E, 0xFE4B, 0xFE4C, 0xFE5F, 0xFE60,
+ 0xFE61, 0xFF0B, 0xFF0D, 0x00D7, 0x00F7, 0x00B1, 0x221A, 0xFF1C, 0xFF1E,
+ 0xFF1D, 0x2266, 0x2267, 0x2260, 0x221E, 0x2252, 0x2261, 0xFE62, 0xFE63,
+ 0xFE64, 0xFE65, 0xFE66, 0x223C, 0x2229, 0x222A, 0x22A5, 0x2220, 0x221F,
+ 0x22BF, 0x33D2, 0x33D1, 0x222B, 0x222E, 0x2235, 0x2234, 0x2640, 0x2642,
+ 0x2295, 0x2609, 0x2191, 0x2193, 0x2192, 0x2190, 0x2196, 0x2197, 0x2199,
+ 0x2198, 0x2225, 0x2223, 0xFF0F, 0xFF3C, 0xFF0F, 0xFF3C, 0xFF04, 0x00A5,
+ 0x3012, 0x00A2, 0x00A3, 0xFF05, 0xFF20, 0x2103, 0x2109, 0xFE69, 0xFE6A,
+ 0xFE6B, 0x33D5, 0x339C, 0x339D, 0x339E, 0x33CE, 0x33A1, 0x338E, 0x338F,
+ 0x33C4, 0x00B0, 0x5159, 0x515B, 0x515E, 0x515D, 0x5161, 0x5163, 0x55E7,
+ 0x74E9, 0x7CCE, 0x2581, 0x2582, 0x2583, 0x2584, 0x2585, 0x2586, 0x2587,
+ 0x2588, 0x258F, 0x258E, 0x258D, 0x258C, 0x258B, 0x258A, 0x2589, 0x253C,
+ 0x2534, 0x252C, 0x2524, 0x251C, 0x2594, 0x2500, 0x2502, 0x2595, 0x250C,
+ 0x2510, 0x2514, 0x2518, 0x256D, 0x256E, 0x2570, 0x256F, 0x2550, 0x255E,
+ 0x256A, 0x2561, 0x25E2, 0x25E3, 0x25E5, 0x25E4, 0x2571, 0x2572, 0x2573,
+ 0xFF10, 0xFF11, 0xFF12, 0xFF13, 0xFF14, 0xFF15, 0xFF16, 0xFF17, 0xFF18,
+ 0xFF19, 0x2160, 0x2161, 0x2162, 0x2163, 0x2164, 0x2165, 0x2166, 0x2167,
+ 0x2168, 0x2169, 0x3021, 0x3022, 0x3023, 0x3024, 0x3025, 0x3026, 0x3027,
+ 0x3028, 0x3029, 0x3038, 0x5344, 0x303A, 0xFF21, 0xFF22, 0xFF23, 0xFF24,
+ 0xFF25, 0xFF26, 0xFF27, 0xFF28, 0xFF29, 0xFF2A, 0xFF2B, 0xFF2C, 0xFF2D,
+ 0xFF2E, 0xFF2F, 0xFF30, 0xFF31, 0xFF32, 0xFF33, 0xFF34, 0xFF35, 0xFF36,
+ 0xFF37, 0xFF38, 0xFF39, 0xFF3A, 0xFF41, 0xFF42, 0xFF43, 0xFF44, 0xFF45,
+ 0xFF46, 0xFF47, 0xFF48, 0xFF49, 0xFF4A, 0xFF4B, 0xFF4C, 0xFF4D, 0xFF4E,
+ 0xFF4F, 0xFF50, 0xFF51, 0xFF52, 0xFF53, 0xFF54, 0xFF55, 0xFF56, 0xFF57,
+ 0xFF58, 0xFF59, 0xFF5A, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396,
+ 0x0397, 0x0398, 0x0399, 0x039A, 0x039B, 0x039C, 0x039D, 0x039E, 0x039F,
+ 0x03A0, 0x03A1, 0x03A3, 0x03A4, 0x03A5, 0x03A6, 0x03A7, 0x03A8, 0x03A9,
+ 0x03B1, 0x03B2, 0x03B3, 0x03B4, 0x03B5, 0x03B6, 0x03B7, 0x03B8, 0x03B9,
+ 0x03BA, 0x03BB, 0x03BC, 0x03BD, 0x03BE, 0x03BF, 0x03C0, 0x03C1, 0x03C3,
+ 0x03C4, 0x03C5, 0x03C6, 0x03C7, 0x03C8, 0x03C9, 0x3105, 0x3106, 0x3107,
+ 0x3108, 0x3109, 0x310A, 0x310B, 0x310C, 0x310D, 0x310E, 0x310F, 0x3110,
+ 0x3111, 0x3112, 0x3113, 0x3114, 0x3115, 0x3116, 0x3117, 0x3118, 0x3119,
+ 0x311A, 0x311B, 0x311C, 0x311D, 0x311E, 0x311F, 0x3120, 0x3121, 0x3122,
+ 0x3123, 0x3124, 0x3125, 0x3126, 0x3127, 0x3128, 0x3129, 0x02D9, 0x02CA,
+ 0x02C7, 0x02CB, 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, 0x4E28, 0x4E36, 0x4E3F, 0x4E85,
+ 0x4EA0, 0x5182, 0x5196, 0x51AB, 0x52F9, 0x5338, 0x5369, 0x53B6, 0x5902,
+ 0x5B80, 0x5DDB, 0x5E7A, 0x5E7F, 0x5EF4, 0x5F50, 0x5F61, 0x6534, 0x65E0,
+ 0x7592, 0x7676, 0x8FB5, 0x96B6, 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, 0x4E00, 0x4E59, 0x4E01, 0x4E03, 0x4E43, 0x4E5D, 0x4E86, 0x4E8C,
+ 0x4EBA, 0x513F, 0x5165, 0x516B, 0x51E0, 0x5200, 0x5201, 0x529B, 0x5315,
+ 0x5341, 0x535C, 0x53C8, 0x4E09, 0x4E0B, 0x4E08, 0x4E0A, 0x4E2B, 0x4E38,
+ 0x51E1, 0x4E45, 0x4E48, 0x4E5F, 0x4E5E, 0x4E8E, 0x4EA1, 0x5140, 0x5203,
+ 0x52FA, 0x5343, 0x53C9, 0x53E3, 0x571F, 0x58EB, 0x5915, 0x5927, 0x5973,
+ 0x5B50, 0x5B51, 0x5B53, 0x5BF8, 0x5C0F, 0x5C22, 0x5C38, 0x5C71, 0x5DDD,
+ 0x5DE5, 0x5DF1, 0x5DF2, 0x5DF3, 0x5DFE, 0x5E72, 0x5EFE, 0x5F0B, 0x5F13,
+ 0x624D, 0x4E11, 0x4E10, 0x4E0D, 0x4E2D, 0x4E30, 0x4E39, 0x4E4B, 0x5C39,
+ 0x4E88, 0x4E91, 0x4E95, 0x4E92, 0x4E94, 0x4EA2, 0x4EC1, 0x4EC0, 0x4EC3,
+ 0x4EC6, 0x4EC7, 0x4ECD, 0x4ECA, 0x4ECB, 0x4EC4, 0x5143, 0x5141, 0x5167,
+ 0x516D, 0x516E, 0x516C, 0x5197, 0x51F6, 0x5206, 0x5207, 0x5208, 0x52FB,
+ 0x52FE, 0x52FF, 0x5316, 0x5339, 0x5348, 0x5347, 0x5345, 0x535E, 0x5384,
+ 0x53CB, 0x53CA, 0x53CD, 0x58EC, 0x5929, 0x592B, 0x592A, 0x592D, 0x5B54,
+ 0x5C11, 0x5C24, 0x5C3A, 0x5C6F, 0x5DF4, 0x5E7B, 0x5EFF, 0x5F14, 0x5F15,
+ 0x5FC3, 0x6208, 0x6236, 0x624B, 0x624E, 0x652F, 0x6587, 0x6597, 0x65A4,
+ 0x65B9, 0x65E5, 0x66F0, 0x6708, 0x6728, 0x6B20, 0x6B62, 0x6B79, 0x6BCB,
+ 0x6BD4, 0x6BDB, 0x6C0F, 0x6C34, 0x706B, 0x722A, 0x7236, 0x723B, 0x7247,
+ 0x7259, 0x725B, 0x72AC, 0x738B, 0x4E19, 0x4E16, 0x4E15, 0x4E14, 0x4E18,
+ 0x4E3B, 0x4E4D, 0x4E4F, 0x4E4E, 0x4EE5, 0x4ED8, 0x4ED4, 0x4ED5, 0x4ED6,
+ 0x4ED7, 0x4EE3, 0x4EE4, 0x4ED9, 0x4EDE, 0x5145, 0x5144, 0x5189, 0x518A,
+ 0x51AC, 0x51F9, 0x51FA, 0x51F8, 0x520A, 0x52A0, 0x529F, 0x5305, 0x5306,
+ 0x5317, 0x531D, 0x4EDF, 0x534A, 0x5349, 0x5361, 0x5360, 0x536F, 0x536E,
+ 0x53BB, 0x53EF, 0x53E4, 0x53F3, 0x53EC, 0x53EE, 0x53E9, 0x53E8, 0x53FC,
+ 0x53F8, 0x53F5, 0x53EB, 0x53E6, 0x53EA, 0x53F2, 0x53F1, 0x53F0, 0x53E5,
+ 0x53ED, 0x53FB, 0x56DB, 0x56DA, 0x5916, 0x592E, 0x5931, 0x5974, 0x5976,
+ 0x5B55, 0x5B83, 0x5C3C, 0x5DE8, 0x5DE7, 0x5DE6, 0x5E02, 0x5E03, 0x5E73,
+ 0x5E7C, 0x5F01, 0x5F18, 0x5F17, 0x5FC5, 0x620A, 0x6253, 0x6254, 0x6252,
+ 0x6251, 0x65A5, 0x65E6, 0x672E, 0x672C, 0x672A, 0x672B, 0x672D, 0x6B63,
+ 0x6BCD, 0x6C11, 0x6C10, 0x6C38, 0x6C41, 0x6C40, 0x6C3E, 0x72AF, 0x7384,
+ 0x7389, 0x74DC, 0x74E6, 0x7518, 0x751F, 0x7528, 0x7529, 0x7530, 0x7531,
+ 0x7532, 0x7533, 0x758B, 0x767D, 0x76AE, 0x76BF, 0x76EE, 0x77DB, 0x77E2,
+ 0x77F3, 0x793A, 0x79BE, 0x7A74, 0x7ACB, 0x4E1E, 0x4E1F, 0x4E52, 0x4E53,
+ 0x4E69, 0x4E99, 0x4EA4, 0x4EA6, 0x4EA5, 0x4EFF, 0x4F09, 0x4F19, 0x4F0A,
+ 0x4F15, 0x4F0D, 0x4F10, 0x4F11, 0x4F0F, 0x4EF2, 0x4EF6, 0x4EFB, 0x4EF0,
+ 0x4EF3, 0x4EFD, 0x4F01, 0x4F0B, 0x5149, 0x5147, 0x5146, 0x5148, 0x5168,
+ 0x5171, 0x518D, 0x51B0, 0x5217, 0x5211, 0x5212, 0x520E, 0x5216, 0x52A3,
+ 0x5308, 0x5321, 0x5320, 0x5370, 0x5371, 0x5409, 0x540F, 0x540C, 0x540A,
+ 0x5410, 0x5401, 0x540B, 0x5404, 0x5411, 0x540D, 0x5408, 0x5403, 0x540E,
+ 0x5406, 0x5412, 0x56E0, 0x56DE, 0x56DD, 0x5733, 0x5730, 0x5728, 0x572D,
+ 0x572C, 0x572F, 0x5729, 0x5919, 0x591A, 0x5937, 0x5938, 0x5984, 0x5978,
+ 0x5983, 0x597D, 0x5979, 0x5982, 0x5981, 0x5B57, 0x5B58, 0x5B87, 0x5B88,
+ 0x5B85, 0x5B89, 0x5BFA, 0x5C16, 0x5C79, 0x5DDE, 0x5E06, 0x5E76, 0x5E74,
+ 0x5F0F, 0x5F1B, 0x5FD9, 0x5FD6, 0x620E, 0x620C, 0x620D, 0x6210, 0x6263,
+ 0x625B, 0x6258, 0x6536, 0x65E9, 0x65E8, 0x65EC, 0x65ED, 0x66F2, 0x66F3,
+ 0x6709, 0x673D, 0x6734, 0x6731, 0x6735, 0x6B21, 0x6B64, 0x6B7B, 0x6C16,
+ 0x6C5D, 0x6C57, 0x6C59, 0x6C5F, 0x6C60, 0x6C50, 0x6C55, 0x6C61, 0x6C5B,
+ 0x6C4D, 0x6C4E, 0x7070, 0x725F, 0x725D, 0x767E, 0x7AF9, 0x7C73, 0x7CF8,
+ 0x7F36, 0x7F8A, 0x7FBD, 0x8001, 0x8003, 0x800C, 0x8012, 0x8033, 0x807F,
+ 0x8089, 0x808B, 0x808C, 0x81E3, 0x81EA, 0x81F3, 0x81FC, 0x820C, 0x821B,
+ 0x821F, 0x826E, 0x8272, 0x827E, 0x866B, 0x8840, 0x884C, 0x8863, 0x897F,
+ 0x9621, 0x4E32, 0x4EA8, 0x4F4D, 0x4F4F, 0x4F47, 0x4F57, 0x4F5E, 0x4F34,
+ 0x4F5B, 0x4F55, 0x4F30, 0x4F50, 0x4F51, 0x4F3D, 0x4F3A, 0x4F38, 0x4F43,
+ 0x4F54, 0x4F3C, 0x4F46, 0x4F63, 0x4F5C, 0x4F60, 0x4F2F, 0x4F4E, 0x4F36,
+ 0x4F59, 0x4F5D, 0x4F48, 0x4F5A, 0x514C, 0x514B, 0x514D, 0x5175, 0x51B6,
+ 0x51B7, 0x5225, 0x5224, 0x5229, 0x522A, 0x5228, 0x52AB, 0x52A9, 0x52AA,
+ 0x52AC, 0x5323, 0x5373, 0x5375, 0x541D, 0x542D, 0x541E, 0x543E, 0x5426,
+ 0x544E, 0x5427, 0x5446, 0x5443, 0x5433, 0x5448, 0x5442, 0x541B, 0x5429,
+ 0x544A, 0x5439, 0x543B, 0x5438, 0x542E, 0x5435, 0x5436, 0x5420, 0x543C,
+ 0x5440, 0x5431, 0x542B, 0x541F, 0x542C, 0x56EA, 0x56F0, 0x56E4, 0x56EB,
+ 0x574A, 0x5751, 0x5740, 0x574D, 0x5747, 0x574E, 0x573E, 0x5750, 0x574F,
+ 0x573B, 0x58EF, 0x593E, 0x599D, 0x5992, 0x59A8, 0x599E, 0x59A3, 0x5999,
+ 0x5996, 0x598D, 0x59A4, 0x5993, 0x598A, 0x59A5, 0x5B5D, 0x5B5C, 0x5B5A,
+ 0x5B5B, 0x5B8C, 0x5B8B, 0x5B8F, 0x5C2C, 0x5C40, 0x5C41, 0x5C3F, 0x5C3E,
+ 0x5C90, 0x5C91, 0x5C94, 0x5C8C, 0x5DEB, 0x5E0C, 0x5E8F, 0x5E87, 0x5E8A,
+ 0x5EF7, 0x5F04, 0x5F1F, 0x5F64, 0x5F62, 0x5F77, 0x5F79, 0x5FD8, 0x5FCC,
+ 0x5FD7, 0x5FCD, 0x5FF1, 0x5FEB, 0x5FF8, 0x5FEA, 0x6212, 0x6211, 0x6284,
+ 0x6297, 0x6296, 0x6280, 0x6276, 0x6289, 0x626D, 0x628A, 0x627C, 0x627E,
+ 0x6279, 0x6273, 0x6292, 0x626F, 0x6298, 0x626E, 0x6295, 0x6293, 0x6291,
+ 0x6286, 0x6539, 0x653B, 0x6538, 0x65F1, 0x66F4, 0x675F, 0x674E, 0x674F,
+ 0x6750, 0x6751, 0x675C, 0x6756, 0x675E, 0x6749, 0x6746, 0x6760, 0x6753,
+ 0x6757, 0x6B65, 0x6BCF, 0x6C42, 0x6C5E, 0x6C99, 0x6C81, 0x6C88, 0x6C89,
+ 0x6C85, 0x6C9B, 0x6C6A, 0x6C7A, 0x6C90, 0x6C70, 0x6C8C, 0x6C68, 0x6C96,
+ 0x6C92, 0x6C7D, 0x6C83, 0x6C72, 0x6C7E, 0x6C74, 0x6C86, 0x6C76, 0x6C8D,
+ 0x6C94, 0x6C98, 0x6C82, 0x7076, 0x707C, 0x707D, 0x7078, 0x7262, 0x7261,
+ 0x7260, 0x72C4, 0x72C2, 0x7396, 0x752C, 0x752B, 0x7537, 0x7538, 0x7682,
+ 0x76EF, 0x77E3, 0x79C1, 0x79C0, 0x79BF, 0x7A76, 0x7CFB, 0x7F55, 0x8096,
+ 0x8093, 0x809D, 0x8098, 0x809B, 0x809A, 0x80B2, 0x826F, 0x8292, 0x828B,
+ 0x828D, 0x898B, 0x89D2, 0x8A00, 0x8C37, 0x8C46, 0x8C55, 0x8C9D, 0x8D64,
+ 0x8D70, 0x8DB3, 0x8EAB, 0x8ECA, 0x8F9B, 0x8FB0, 0x8FC2, 0x8FC6, 0x8FC5,
+ 0x8FC4, 0x5DE1, 0x9091, 0x90A2, 0x90AA, 0x90A6, 0x90A3, 0x9149, 0x91C6,
+ 0x91CC, 0x9632, 0x962E, 0x9631, 0x962A, 0x962C, 0x4E26, 0x4E56, 0x4E73,
+ 0x4E8B, 0x4E9B, 0x4E9E, 0x4EAB, 0x4EAC, 0x4F6F, 0x4F9D, 0x4F8D, 0x4F73,
+ 0x4F7F, 0x4F6C, 0x4F9B, 0x4F8B, 0x4F86, 0x4F83, 0x4F70, 0x4F75, 0x4F88,
+ 0x4F69, 0x4F7B, 0x4F96, 0x4F7E, 0x4F8F, 0x4F91, 0x4F7A, 0x5154, 0x5152,
+ 0x5155, 0x5169, 0x5177, 0x5176, 0x5178, 0x51BD, 0x51FD, 0x523B, 0x5238,
+ 0x5237, 0x523A, 0x5230, 0x522E, 0x5236, 0x5241, 0x52BE, 0x52BB, 0x5352,
+ 0x5354, 0x5353, 0x5351, 0x5366, 0x5377, 0x5378, 0x5379, 0x53D6, 0x53D4,
+ 0x53D7, 0x5473, 0x5475, 0x5496, 0x5478, 0x5495, 0x5480, 0x547B, 0x5477,
+ 0x5484, 0x5492, 0x5486, 0x547C, 0x5490, 0x5471, 0x5476, 0x548C, 0x549A,
+ 0x5462, 0x5468, 0x548B, 0x547D, 0x548E, 0x56FA, 0x5783, 0x5777, 0x576A,
+ 0x5769, 0x5761, 0x5766, 0x5764, 0x577C, 0x591C, 0x5949, 0x5947, 0x5948,
+ 0x5944, 0x5954, 0x59BE, 0x59BB, 0x59D4, 0x59B9, 0x59AE, 0x59D1, 0x59C6,
+ 0x59D0, 0x59CD, 0x59CB, 0x59D3, 0x59CA, 0x59AF, 0x59B3, 0x59D2, 0x59C5,
+ 0x5B5F, 0x5B64, 0x5B63, 0x5B97, 0x5B9A, 0x5B98, 0x5B9C, 0x5B99, 0x5B9B,
+ 0x5C1A, 0x5C48, 0x5C45, 0x5C46, 0x5CB7, 0x5CA1, 0x5CB8, 0x5CA9, 0x5CAB,
+ 0x5CB1, 0x5CB3, 0x5E18, 0x5E1A, 0x5E16, 0x5E15, 0x5E1B, 0x5E11, 0x5E78,
+ 0x5E9A, 0x5E97, 0x5E9C, 0x5E95, 0x5E96, 0x5EF6, 0x5F26, 0x5F27, 0x5F29,
+ 0x5F80, 0x5F81, 0x5F7F, 0x5F7C, 0x5FDD, 0x5FE0, 0x5FFD, 0x5FF5, 0x5FFF,
+ 0x600F, 0x6014, 0x602F, 0x6035, 0x6016, 0x602A, 0x6015, 0x6021, 0x6027,
+ 0x6029, 0x602B, 0x601B, 0x6216, 0x6215, 0x623F, 0x623E, 0x6240, 0x627F,
+ 0x62C9, 0x62CC, 0x62C4, 0x62BF, 0x62C2, 0x62B9, 0x62D2, 0x62DB, 0x62AB,
+ 0x62D3, 0x62D4, 0x62CB, 0x62C8, 0x62A8, 0x62BD, 0x62BC, 0x62D0, 0x62D9,
+ 0x62C7, 0x62CD, 0x62B5, 0x62DA, 0x62B1, 0x62D8, 0x62D6, 0x62D7, 0x62C6,
+ 0x62AC, 0x62CE, 0x653E, 0x65A7, 0x65BC, 0x65FA, 0x6614, 0x6613, 0x660C,
+ 0x6606, 0x6602, 0x660E, 0x6600, 0x660F, 0x6615, 0x660A, 0x6607, 0x670D,
+ 0x670B, 0x676D, 0x678B, 0x6795, 0x6771, 0x679C, 0x6773, 0x6777, 0x6787,
+ 0x679D, 0x6797, 0x676F, 0x6770, 0x677F, 0x6789, 0x677E, 0x6790, 0x6775,
+ 0x679A, 0x6793, 0x677C, 0x676A, 0x6772, 0x6B23, 0x6B66, 0x6B67, 0x6B7F,
+ 0x6C13, 0x6C1B, 0x6CE3, 0x6CE8, 0x6CF3, 0x6CB1, 0x6CCC, 0x6CE5, 0x6CB3,
+ 0x6CBD, 0x6CBE, 0x6CBC, 0x6CE2, 0x6CAB, 0x6CD5, 0x6CD3, 0x6CB8, 0x6CC4,
+ 0x6CB9, 0x6CC1, 0x6CAE, 0x6CD7, 0x6CC5, 0x6CF1, 0x6CBF, 0x6CBB, 0x6CE1,
+ 0x6CDB, 0x6CCA, 0x6CAC, 0x6CEF, 0x6CDC, 0x6CD6, 0x6CE0, 0x7095, 0x708E,
+ 0x7092, 0x708A, 0x7099, 0x722C, 0x722D, 0x7238, 0x7248, 0x7267, 0x7269,
+ 0x72C0, 0x72CE, 0x72D9, 0x72D7, 0x72D0, 0x73A9, 0x73A8, 0x739F, 0x73AB,
+ 0x73A5, 0x753D, 0x759D, 0x7599, 0x759A, 0x7684, 0x76C2, 0x76F2, 0x76F4,
+ 0x77E5, 0x77FD, 0x793E, 0x7940, 0x7941, 0x79C9, 0x79C8, 0x7A7A, 0x7A79,
+ 0x7AFA, 0x7CFE, 0x7F54, 0x7F8C, 0x7F8B, 0x8005, 0x80BA, 0x80A5, 0x80A2,
+ 0x80B1, 0x80A1, 0x80AB, 0x80A9, 0x80B4, 0x80AA, 0x80AF, 0x81E5, 0x81FE,
+ 0x820D, 0x82B3, 0x829D, 0x8299, 0x82AD, 0x82BD, 0x829F, 0x82B9, 0x82B1,
+ 0x82AC, 0x82A5, 0x82AF, 0x82B8, 0x82A3, 0x82B0, 0x82BE, 0x82B7, 0x864E,
+ 0x8671, 0x521D, 0x8868, 0x8ECB, 0x8FCE, 0x8FD4, 0x8FD1, 0x90B5, 0x90B8,
+ 0x90B1, 0x90B6, 0x91C7, 0x91D1, 0x9577, 0x9580, 0x961C, 0x9640, 0x963F,
+ 0x963B, 0x9644, 0x9642, 0x96B9, 0x96E8, 0x9752, 0x975E, 0x4E9F, 0x4EAD,
+ 0x4EAE, 0x4FE1, 0x4FB5, 0x4FAF, 0x4FBF, 0x4FE0, 0x4FD1, 0x4FCF, 0x4FDD,
+ 0x4FC3, 0x4FB6, 0x4FD8, 0x4FDF, 0x4FCA, 0x4FD7, 0x4FAE, 0x4FD0, 0x4FC4,
+ 0x4FC2, 0x4FDA, 0x4FCE, 0x4FDE, 0x4FB7, 0x5157, 0x5192, 0x5191, 0x51A0,
+ 0x524E, 0x5243, 0x524A, 0x524D, 0x524C, 0x524B, 0x5247, 0x52C7, 0x52C9,
+ 0x52C3, 0x52C1, 0x530D, 0x5357, 0x537B, 0x539A, 0x53DB, 0x54AC, 0x54C0,
+ 0x54A8, 0x54CE, 0x54C9, 0x54B8, 0x54A6, 0x54B3, 0x54C7, 0x54C2, 0x54BD,
+ 0x54AA, 0x54C1, 0x54C4, 0x54C8, 0x54AF, 0x54AB, 0x54B1, 0x54BB, 0x54A9,
+ 0x54A7, 0x54BF, 0x56FF, 0x5782, 0x578B, 0x57A0, 0x57A3, 0x57A2, 0x57CE,
+ 0x57AE, 0x5793, 0x5955, 0x5951, 0x594F, 0x594E, 0x5950, 0x59DC, 0x59D8,
+ 0x59FF, 0x59E3, 0x59E8, 0x5A03, 0x59E5, 0x59EA, 0x59DA, 0x59E6, 0x5A01,
+ 0x59FB, 0x5B69, 0x5BA3, 0x5BA6, 0x5BA4, 0x5BA2, 0x5BA5, 0x5C01, 0x5C4E,
+ 0x5C4F, 0x5C4D, 0x5C4B, 0x5CD9, 0x5CD2, 0x5DF7, 0x5E1D, 0x5E25, 0x5E1F,
+ 0x5E7D, 0x5EA0, 0x5EA6, 0x5EFA, 0x5F08, 0x5F2D, 0x5F65, 0x5F88, 0x5F85,
+ 0x5F8A, 0x5F8B, 0x5F87, 0x5F8C, 0x5F89, 0x6012, 0x601D, 0x6020, 0x6025,
+ 0x600E, 0x6028, 0x604D, 0x6070, 0x6068, 0x6062, 0x6046, 0x6043, 0x606C,
+ 0x606B, 0x606A, 0x6064, 0x6241, 0x62DC, 0x6316, 0x6309, 0x62FC, 0x62ED,
+ 0x6301, 0x62EE, 0x62FD, 0x6307, 0x62F1, 0x62F7, 0x62EF, 0x62EC, 0x62FE,
+ 0x62F4, 0x6311, 0x6302, 0x653F, 0x6545, 0x65AB, 0x65BD, 0x65E2, 0x6625,
+ 0x662D, 0x6620, 0x6627, 0x662F, 0x661F, 0x6628, 0x6631, 0x6624, 0x66F7,
+ 0x67FF, 0x67D3, 0x67F1, 0x67D4, 0x67D0, 0x67EC, 0x67B6, 0x67AF, 0x67F5,
+ 0x67E9, 0x67EF, 0x67C4, 0x67D1, 0x67B4, 0x67DA, 0x67E5, 0x67B8, 0x67CF,
+ 0x67DE, 0x67F3, 0x67B0, 0x67D9, 0x67E2, 0x67DD, 0x67D2, 0x6B6A, 0x6B83,
+ 0x6B86, 0x6BB5, 0x6BD2, 0x6BD7, 0x6C1F, 0x6CC9, 0x6D0B, 0x6D32, 0x6D2A,
+ 0x6D41, 0x6D25, 0x6D0C, 0x6D31, 0x6D1E, 0x6D17, 0x6D3B, 0x6D3D, 0x6D3E,
+ 0x6D36, 0x6D1B, 0x6CF5, 0x6D39, 0x6D27, 0x6D38, 0x6D29, 0x6D2E, 0x6D35,
+ 0x6D0E, 0x6D2B, 0x70AB, 0x70BA, 0x70B3, 0x70AC, 0x70AF, 0x70AD, 0x70B8,
+ 0x70AE, 0x70A4, 0x7230, 0x7272, 0x726F, 0x7274, 0x72E9, 0x72E0, 0x72E1,
+ 0x73B7, 0x73CA, 0x73BB, 0x73B2, 0x73CD, 0x73C0, 0x73B3, 0x751A, 0x752D,
+ 0x754F, 0x754C, 0x754E, 0x754B, 0x75AB, 0x75A4, 0x75A5, 0x75A2, 0x75A3,
+ 0x7678, 0x7686, 0x7687, 0x7688, 0x76C8, 0x76C6, 0x76C3, 0x76C5, 0x7701,
+ 0x76F9, 0x76F8, 0x7709, 0x770B, 0x76FE, 0x76FC, 0x7707, 0x77DC, 0x7802,
+ 0x7814, 0x780C, 0x780D, 0x7946, 0x7949, 0x7948, 0x7947, 0x79B9, 0x79BA,
+ 0x79D1, 0x79D2, 0x79CB, 0x7A7F, 0x7A81, 0x7AFF, 0x7AFD, 0x7C7D, 0x7D02,
+ 0x7D05, 0x7D00, 0x7D09, 0x7D07, 0x7D04, 0x7D06, 0x7F38, 0x7F8E, 0x7FBF,
+ 0x8010, 0x800D, 0x8011, 0x8036, 0x80D6, 0x80E5, 0x80DA, 0x80C3, 0x80C4,
+ 0x80CC, 0x80E1, 0x80DB, 0x80CE, 0x80DE, 0x80E4, 0x80DD, 0x81F4, 0x8222,
+ 0x82E7, 0x8303, 0x8305, 0x82E3, 0x82DB, 0x82E6, 0x8304, 0x82E5, 0x8302,
+ 0x8309, 0x82D2, 0x82D7, 0x82F1, 0x8301, 0x82DC, 0x82D4, 0x82D1, 0x82DE,
+ 0x82D3, 0x82DF, 0x82EF, 0x8306, 0x8650, 0x8679, 0x867B, 0x867A, 0x884D,
+ 0x886B, 0x8981, 0x89D4, 0x8A08, 0x8A02, 0x8A03, 0x8C9E, 0x8CA0, 0x8D74,
+ 0x8D73, 0x8DB4, 0x8ECD, 0x8ECC, 0x8FF0, 0x8FE6, 0x8FE2, 0x8FEA, 0x8FE5,
+ 0x8FED, 0x8FEB, 0x8FE4, 0x8FE8, 0x90CA, 0x90CE, 0x90C1, 0x90C3, 0x914B,
+ 0x914A, 0x91CD, 0x9582, 0x9650, 0x964B, 0x964C, 0x964D, 0x9762, 0x9769,
+ 0x97CB, 0x97ED, 0x97F3, 0x9801, 0x98A8, 0x98DB, 0x98DF, 0x9996, 0x9999,
+ 0x4E58, 0x4EB3, 0x500C, 0x500D, 0x5023, 0x4FEF, 0x5026, 0x5025, 0x4FF8,
+ 0x5029, 0x5016, 0x5006, 0x503C, 0x501F, 0x501A, 0x5012, 0x5011, 0x4FFA,
+ 0x5000, 0x5014, 0x5028, 0x4FF1, 0x5021, 0x500B, 0x5019, 0x5018, 0x4FF3,
+ 0x4FEE, 0x502D, 0x502A, 0x4FFE, 0x502B, 0x5009, 0x517C, 0x51A4, 0x51A5,
+ 0x51A2, 0x51CD, 0x51CC, 0x51C6, 0x51CB, 0x5256, 0x525C, 0x5254, 0x525B,
+ 0x525D, 0x532A, 0x537F, 0x539F, 0x539D, 0x53DF, 0x54E8, 0x5510, 0x5501,
+ 0x5537, 0x54FC, 0x54E5, 0x54F2, 0x5506, 0x54FA, 0x5514, 0x54E9, 0x54ED,
+ 0x54E1, 0x5509, 0x54EE, 0x54EA, 0x54E6, 0x5527, 0x5507, 0x54FD, 0x550F,
+ 0x5703, 0x5704, 0x57C2, 0x57D4, 0x57CB, 0x57C3, 0x5809, 0x590F, 0x5957,
+ 0x5958, 0x595A, 0x5A11, 0x5A18, 0x5A1C, 0x5A1F, 0x5A1B, 0x5A13, 0x59EC,
+ 0x5A20, 0x5A23, 0x5A29, 0x5A25, 0x5A0C, 0x5A09, 0x5B6B, 0x5C58, 0x5BB0,
+ 0x5BB3, 0x5BB6, 0x5BB4, 0x5BAE, 0x5BB5, 0x5BB9, 0x5BB8, 0x5C04, 0x5C51,
+ 0x5C55, 0x5C50, 0x5CED, 0x5CFD, 0x5CFB, 0x5CEA, 0x5CE8, 0x5CF0, 0x5CF6,
+ 0x5D01, 0x5CF4, 0x5DEE, 0x5E2D, 0x5E2B, 0x5EAB, 0x5EAD, 0x5EA7, 0x5F31,
+ 0x5F92, 0x5F91, 0x5F90, 0x6059, 0x6063, 0x6065, 0x6050, 0x6055, 0x606D,
+ 0x6069, 0x606F, 0x6084, 0x609F, 0x609A, 0x608D, 0x6094, 0x608C, 0x6085,
+ 0x6096, 0x6247, 0x62F3, 0x6308, 0x62FF, 0x634E, 0x633E, 0x632F, 0x6355,
+ 0x6342, 0x6346, 0x634F, 0x6349, 0x633A, 0x6350, 0x633D, 0x632A, 0x632B,
+ 0x6328, 0x634D, 0x634C, 0x6548, 0x6549, 0x6599, 0x65C1, 0x65C5, 0x6642,
+ 0x6649, 0x664F, 0x6643, 0x6652, 0x664C, 0x6645, 0x6641, 0x66F8, 0x6714,
+ 0x6715, 0x6717, 0x6821, 0x6838, 0x6848, 0x6846, 0x6853, 0x6839, 0x6842,
+ 0x6854, 0x6829, 0x68B3, 0x6817, 0x684C, 0x6851, 0x683D, 0x67F4, 0x6850,
+ 0x6840, 0x683C, 0x6843, 0x682A, 0x6845, 0x6813, 0x6818, 0x6841, 0x6B8A,
+ 0x6B89, 0x6BB7, 0x6C23, 0x6C27, 0x6C28, 0x6C26, 0x6C24, 0x6CF0, 0x6D6A,
+ 0x6D95, 0x6D88, 0x6D87, 0x6D66, 0x6D78, 0x6D77, 0x6D59, 0x6D93, 0x6D6C,
+ 0x6D89, 0x6D6E, 0x6D5A, 0x6D74, 0x6D69, 0x6D8C, 0x6D8A, 0x6D79, 0x6D85,
+ 0x6D65, 0x6D94, 0x70CA, 0x70D8, 0x70E4, 0x70D9, 0x70C8, 0x70CF, 0x7239,
+ 0x7279, 0x72FC, 0x72F9, 0x72FD, 0x72F8, 0x72F7, 0x7386, 0x73ED, 0x7409,
+ 0x73EE, 0x73E0, 0x73EA, 0x73DE, 0x7554, 0x755D, 0x755C, 0x755A, 0x7559,
+ 0x75BE, 0x75C5, 0x75C7, 0x75B2, 0x75B3, 0x75BD, 0x75BC, 0x75B9, 0x75C2,
+ 0x75B8, 0x768B, 0x76B0, 0x76CA, 0x76CD, 0x76CE, 0x7729, 0x771F, 0x7720,
+ 0x7728, 0x77E9, 0x7830, 0x7827, 0x7838, 0x781D, 0x7834, 0x7837, 0x7825,
+ 0x782D, 0x7820, 0x781F, 0x7832, 0x7955, 0x7950, 0x7960, 0x795F, 0x7956,
+ 0x795E, 0x795D, 0x7957, 0x795A, 0x79E4, 0x79E3, 0x79E7, 0x79DF, 0x79E6,
+ 0x79E9, 0x79D8, 0x7A84, 0x7A88, 0x7AD9, 0x7B06, 0x7B11, 0x7C89, 0x7D21,
+ 0x7D17, 0x7D0B, 0x7D0A, 0x7D20, 0x7D22, 0x7D14, 0x7D10, 0x7D15, 0x7D1A,
+ 0x7D1C, 0x7D0D, 0x7D19, 0x7D1B, 0x7F3A, 0x7F5F, 0x7F94, 0x7FC5, 0x7FC1,
+ 0x8006, 0x8004, 0x8018, 0x8015, 0x8019, 0x8017, 0x803D, 0x803F, 0x80F1,
+ 0x8102, 0x80F0, 0x8105, 0x80ED, 0x80F4, 0x8106, 0x80F8, 0x80F3, 0x8108,
+ 0x80FD, 0x810A, 0x80FC, 0x80EF, 0x81ED, 0x81EC, 0x8200, 0x8210, 0x822A,
+ 0x822B, 0x8228, 0x822C, 0x82BB, 0x832B, 0x8352, 0x8354, 0x834A, 0x8338,
+ 0x8350, 0x8349, 0x8335, 0x8334, 0x834F, 0x8332, 0x8339, 0x8336, 0x8317,
+ 0x8340, 0x8331, 0x8328, 0x8343, 0x8654, 0x868A, 0x86AA, 0x8693, 0x86A4,
+ 0x86A9, 0x868C, 0x86A3, 0x869C, 0x8870, 0x8877, 0x8881, 0x8882, 0x887D,
+ 0x8879, 0x8A18, 0x8A10, 0x8A0E, 0x8A0C, 0x8A15, 0x8A0A, 0x8A17, 0x8A13,
+ 0x8A16, 0x8A0F, 0x8A11, 0x8C48, 0x8C7A, 0x8C79, 0x8CA1, 0x8CA2, 0x8D77,
+ 0x8EAC, 0x8ED2, 0x8ED4, 0x8ECF, 0x8FB1, 0x9001, 0x9006, 0x8FF7, 0x9000,
+ 0x8FFA, 0x8FF4, 0x9003, 0x8FFD, 0x9005, 0x8FF8, 0x9095, 0x90E1, 0x90DD,
+ 0x90E2, 0x9152, 0x914D, 0x914C, 0x91D8, 0x91DD, 0x91D7, 0x91DC, 0x91D9,
+ 0x9583, 0x9662, 0x9663, 0x9661, 0x965B, 0x965D, 0x9664, 0x9658, 0x965E,
+ 0x96BB, 0x98E2, 0x99AC, 0x9AA8, 0x9AD8, 0x9B25, 0x9B32, 0x9B3C, 0x4E7E,
+ 0x507A, 0x507D, 0x505C, 0x5047, 0x5043, 0x504C, 0x505A, 0x5049, 0x5065,
+ 0x5076, 0x504E, 0x5055, 0x5075, 0x5074, 0x5077, 0x504F, 0x500F, 0x506F,
+ 0x506D, 0x515C, 0x5195, 0x51F0, 0x526A, 0x526F, 0x52D2, 0x52D9, 0x52D8,
+ 0x52D5, 0x5310, 0x530F, 0x5319, 0x533F, 0x5340, 0x533E, 0x53C3, 0x66FC,
+ 0x5546, 0x556A, 0x5566, 0x5544, 0x555E, 0x5561, 0x5543, 0x554A, 0x5531,
+ 0x5556, 0x554F, 0x5555, 0x552F, 0x5564, 0x5538, 0x552E, 0x555C, 0x552C,
+ 0x5563, 0x5533, 0x5541, 0x5557, 0x5708, 0x570B, 0x5709, 0x57DF, 0x5805,
+ 0x580A, 0x5806, 0x57E0, 0x57E4, 0x57FA, 0x5802, 0x5835, 0x57F7, 0x57F9,
+ 0x5920, 0x5962, 0x5A36, 0x5A41, 0x5A49, 0x5A66, 0x5A6A, 0x5A40, 0x5A3C,
+ 0x5A62, 0x5A5A, 0x5A46, 0x5A4A, 0x5B70, 0x5BC7, 0x5BC5, 0x5BC4, 0x5BC2,
+ 0x5BBF, 0x5BC6, 0x5C09, 0x5C08, 0x5C07, 0x5C60, 0x5C5C, 0x5C5D, 0x5D07,
+ 0x5D06, 0x5D0E, 0x5D1B, 0x5D16, 0x5D22, 0x5D11, 0x5D29, 0x5D14, 0x5D19,
+ 0x5D24, 0x5D27, 0x5D17, 0x5DE2, 0x5E38, 0x5E36, 0x5E33, 0x5E37, 0x5EB7,
+ 0x5EB8, 0x5EB6, 0x5EB5, 0x5EBE, 0x5F35, 0x5F37, 0x5F57, 0x5F6C, 0x5F69,
+ 0x5F6B, 0x5F97, 0x5F99, 0x5F9E, 0x5F98, 0x5FA1, 0x5FA0, 0x5F9C, 0x607F,
+ 0x60A3, 0x6089, 0x60A0, 0x60A8, 0x60CB, 0x60B4, 0x60E6, 0x60BD, 0x60C5,
+ 0x60BB, 0x60B5, 0x60DC, 0x60BC, 0x60D8, 0x60D5, 0x60C6, 0x60DF, 0x60B8,
+ 0x60DA, 0x60C7, 0x621A, 0x621B, 0x6248, 0x63A0, 0x63A7, 0x6372, 0x6396,
+ 0x63A2, 0x63A5, 0x6377, 0x6367, 0x6398, 0x63AA, 0x6371, 0x63A9, 0x6389,
+ 0x6383, 0x639B, 0x636B, 0x63A8, 0x6384, 0x6388, 0x6399, 0x63A1, 0x63AC,
+ 0x6392, 0x638F, 0x6380, 0x637B, 0x6369, 0x6368, 0x637A, 0x655D, 0x6556,
+ 0x6551, 0x6559, 0x6557, 0x555F, 0x654F, 0x6558, 0x6555, 0x6554, 0x659C,
+ 0x659B, 0x65AC, 0x65CF, 0x65CB, 0x65CC, 0x65CE, 0x665D, 0x665A, 0x6664,
+ 0x6668, 0x6666, 0x665E, 0x66F9, 0x52D7, 0x671B, 0x6881, 0x68AF, 0x68A2,
+ 0x6893, 0x68B5, 0x687F, 0x6876, 0x68B1, 0x68A7, 0x6897, 0x68B0, 0x6883,
+ 0x68C4, 0x68AD, 0x6886, 0x6885, 0x6894, 0x689D, 0x68A8, 0x689F, 0x68A1,
+ 0x6882, 0x6B32, 0x6BBA, 0x6BEB, 0x6BEC, 0x6C2B, 0x6D8E, 0x6DBC, 0x6DF3,
+ 0x6DD9, 0x6DB2, 0x6DE1, 0x6DCC, 0x6DE4, 0x6DFB, 0x6DFA, 0x6E05, 0x6DC7,
+ 0x6DCB, 0x6DAF, 0x6DD1, 0x6DAE, 0x6DDE, 0x6DF9, 0x6DB8, 0x6DF7, 0x6DF5,
+ 0x6DC5, 0x6DD2, 0x6E1A, 0x6DB5, 0x6DDA, 0x6DEB, 0x6DD8, 0x6DEA, 0x6DF1,
+ 0x6DEE, 0x6DE8, 0x6DC6, 0x6DC4, 0x6DAA, 0x6DEC, 0x6DBF, 0x6DE6, 0x70F9,
+ 0x7109, 0x710A, 0x70FD, 0x70EF, 0x723D, 0x727D, 0x7281, 0x731C, 0x731B,
+ 0x7316, 0x7313, 0x7319, 0x7387, 0x7405, 0x740A, 0x7403, 0x7406, 0x73FE,
+ 0x740D, 0x74E0, 0x74F6, 0x74F7, 0x751C, 0x7522, 0x7565, 0x7566, 0x7562,
+ 0x7570, 0x758F, 0x75D4, 0x75D5, 0x75B5, 0x75CA, 0x75CD, 0x768E, 0x76D4,
+ 0x76D2, 0x76DB, 0x7737, 0x773E, 0x773C, 0x7736, 0x7738, 0x773A, 0x786B,
+ 0x7843, 0x784E, 0x7965, 0x7968, 0x796D, 0x79FB, 0x7A92, 0x7A95, 0x7B20,
+ 0x7B28, 0x7B1B, 0x7B2C, 0x7B26, 0x7B19, 0x7B1E, 0x7B2E, 0x7C92, 0x7C97,
+ 0x7C95, 0x7D46, 0x7D43, 0x7D71, 0x7D2E, 0x7D39, 0x7D3C, 0x7D40, 0x7D30,
+ 0x7D33, 0x7D44, 0x7D2F, 0x7D42, 0x7D32, 0x7D31, 0x7F3D, 0x7F9E, 0x7F9A,
+ 0x7FCC, 0x7FCE, 0x7FD2, 0x801C, 0x804A, 0x8046, 0x812F, 0x8116, 0x8123,
+ 0x812B, 0x8129, 0x8130, 0x8124, 0x8202, 0x8235, 0x8237, 0x8236, 0x8239,
+ 0x838E, 0x839E, 0x8398, 0x8378, 0x83A2, 0x8396, 0x83BD, 0x83AB, 0x8392,
+ 0x838A, 0x8393, 0x8389, 0x83A0, 0x8377, 0x837B, 0x837C, 0x8386, 0x83A7,
+ 0x8655, 0x5F6A, 0x86C7, 0x86C0, 0x86B6, 0x86C4, 0x86B5, 0x86C6, 0x86CB,
+ 0x86B1, 0x86AF, 0x86C9, 0x8853, 0x889E, 0x8888, 0x88AB, 0x8892, 0x8896,
+ 0x888D, 0x888B, 0x8993, 0x898F, 0x8A2A, 0x8A1D, 0x8A23, 0x8A25, 0x8A31,
+ 0x8A2D, 0x8A1F, 0x8A1B, 0x8A22, 0x8C49, 0x8C5A, 0x8CA9, 0x8CAC, 0x8CAB,
+ 0x8CA8, 0x8CAA, 0x8CA7, 0x8D67, 0x8D66, 0x8DBE, 0x8DBA, 0x8EDB, 0x8EDF,
+ 0x9019, 0x900D, 0x901A, 0x9017, 0x9023, 0x901F, 0x901D, 0x9010, 0x9015,
+ 0x901E, 0x9020, 0x900F, 0x9022, 0x9016, 0x901B, 0x9014, 0x90E8, 0x90ED,
+ 0x90FD, 0x9157, 0x91CE, 0x91F5, 0x91E6, 0x91E3, 0x91E7, 0x91ED, 0x91E9,
+ 0x9589, 0x966A, 0x9675, 0x9673, 0x9678, 0x9670, 0x9674, 0x9676, 0x9677,
+ 0x966C, 0x96C0, 0x96EA, 0x96E9, 0x7AE0, 0x7ADF, 0x9802, 0x9803, 0x9B5A,
+ 0x9CE5, 0x9E75, 0x9E7F, 0x9EA5, 0x9EBB, 0x50A2, 0x508D, 0x5085, 0x5099,
+ 0x5091, 0x5080, 0x5096, 0x5098, 0x509A, 0x6700, 0x51F1, 0x5272, 0x5274,
+ 0x5275, 0x5269, 0x52DE, 0x52DD, 0x52DB, 0x535A, 0x53A5, 0x557B, 0x5580,
+ 0x55A7, 0x557C, 0x558A, 0x559D, 0x5598, 0x5582, 0x559C, 0x55AA, 0x5594,
+ 0x5587, 0x558B, 0x5583, 0x55B3, 0x55AE, 0x559F, 0x553E, 0x55B2, 0x559A,
+ 0x55BB, 0x55AC, 0x55B1, 0x557E, 0x5589, 0x55AB, 0x5599, 0x570D, 0x582F,
+ 0x582A, 0x5834, 0x5824, 0x5830, 0x5831, 0x5821, 0x581D, 0x5820, 0x58F9,
+ 0x58FA, 0x5960, 0x5A77, 0x5A9A, 0x5A7F, 0x5A92, 0x5A9B, 0x5AA7, 0x5B73,
+ 0x5B71, 0x5BD2, 0x5BCC, 0x5BD3, 0x5BD0, 0x5C0A, 0x5C0B, 0x5C31, 0x5D4C,
+ 0x5D50, 0x5D34, 0x5D47, 0x5DFD, 0x5E45, 0x5E3D, 0x5E40, 0x5E43, 0x5E7E,
+ 0x5ECA, 0x5EC1, 0x5EC2, 0x5EC4, 0x5F3C, 0x5F6D, 0x5FA9, 0x5FAA, 0x5FA8,
+ 0x60D1, 0x60E1, 0x60B2, 0x60B6, 0x60E0, 0x611C, 0x6123, 0x60FA, 0x6115,
+ 0x60F0, 0x60FB, 0x60F4, 0x6168, 0x60F1, 0x610E, 0x60F6, 0x6109, 0x6100,
+ 0x6112, 0x621F, 0x6249, 0x63A3, 0x638C, 0x63CF, 0x63C0, 0x63E9, 0x63C9,
+ 0x63C6, 0x63CD, 0x63D2, 0x63E3, 0x63D0, 0x63E1, 0x63D6, 0x63ED, 0x63EE,
+ 0x6376, 0x63F4, 0x63EA, 0x63DB, 0x6452, 0x63DA, 0x63F9, 0x655E, 0x6566,
+ 0x6562, 0x6563, 0x6591, 0x6590, 0x65AF, 0x666E, 0x6670, 0x6674, 0x6676,
+ 0x666F, 0x6691, 0x667A, 0x667E, 0x6677, 0x66FE, 0x66FF, 0x671F, 0x671D,
+ 0x68FA, 0x68D5, 0x68E0, 0x68D8, 0x68D7, 0x6905, 0x68DF, 0x68F5, 0x68EE,
+ 0x68E7, 0x68F9, 0x68D2, 0x68F2, 0x68E3, 0x68CB, 0x68CD, 0x690D, 0x6912,
+ 0x690E, 0x68C9, 0x68DA, 0x696E, 0x68FB, 0x6B3E, 0x6B3A, 0x6B3D, 0x6B98,
+ 0x6B96, 0x6BBC, 0x6BEF, 0x6C2E, 0x6C2F, 0x6C2C, 0x6E2F, 0x6E38, 0x6E54,
+ 0x6E21, 0x6E32, 0x6E67, 0x6E4A, 0x6E20, 0x6E25, 0x6E23, 0x6E1B, 0x6E5B,
+ 0x6E58, 0x6E24, 0x6E56, 0x6E6E, 0x6E2D, 0x6E26, 0x6E6F, 0x6E34, 0x6E4D,
+ 0x6E3A, 0x6E2C, 0x6E43, 0x6E1D, 0x6E3E, 0x6ECB, 0x6E89, 0x6E19, 0x6E4E,
+ 0x6E63, 0x6E44, 0x6E72, 0x6E69, 0x6E5F, 0x7119, 0x711A, 0x7126, 0x7130,
+ 0x7121, 0x7136, 0x716E, 0x711C, 0x724C, 0x7284, 0x7280, 0x7336, 0x7325,
+ 0x7334, 0x7329, 0x743A, 0x742A, 0x7433, 0x7422, 0x7425, 0x7435, 0x7436,
+ 0x7434, 0x742F, 0x741B, 0x7426, 0x7428, 0x7525, 0x7526, 0x756B, 0x756A,
+ 0x75E2, 0x75DB, 0x75E3, 0x75D9, 0x75D8, 0x75DE, 0x75E0, 0x767B, 0x767C,
+ 0x7696, 0x7693, 0x76B4, 0x76DC, 0x774F, 0x77ED, 0x785D, 0x786C, 0x786F,
+ 0x7A0D, 0x7A08, 0x7A0B, 0x7A05, 0x7A00, 0x7A98, 0x7A97, 0x7A96, 0x7AE5,
+ 0x7AE3, 0x7B49, 0x7B56, 0x7B46, 0x7B50, 0x7B52, 0x7B54, 0x7B4D, 0x7B4B,
+ 0x7B4F, 0x7B51, 0x7C9F, 0x7CA5, 0x7D5E, 0x7D50, 0x7D68, 0x7D55, 0x7D2B,
+ 0x7D6E, 0x7D72, 0x7D61, 0x7D66, 0x7D62, 0x7D70, 0x7D73, 0x5584, 0x7FD4,
+ 0x7FD5, 0x800B, 0x8052, 0x8085, 0x8155, 0x8154, 0x814B, 0x8151, 0x814E,
+ 0x8139, 0x8146, 0x813E, 0x814C, 0x8153, 0x8174, 0x8212, 0x821C, 0x83E9,
+ 0x8403, 0x83F8, 0x840D, 0x83E0, 0x83C5, 0x840B, 0x83C1, 0x83EF, 0x83F1,
+ 0x83F4, 0x8457, 0x840A, 0x83F0, 0x840C, 0x83CC, 0x83FD, 0x83F2, 0x83CA,
+ 0x8438, 0x840E, 0x8404, 0x83DC, 0x8407, 0x83D4, 0x83DF, 0x865B, 0x86DF,
+ 0x86D9, 0x86ED, 0x86D4, 0x86DB, 0x86E4, 0x86D0, 0x86DE, 0x8857, 0x88C1,
+ 0x88C2, 0x88B1, 0x8983, 0x8996, 0x8A3B, 0x8A60, 0x8A55, 0x8A5E, 0x8A3C,
+ 0x8A41, 0x8A54, 0x8A5B, 0x8A50, 0x8A46, 0x8A34, 0x8A3A, 0x8A36, 0x8A56,
+ 0x8C61, 0x8C82, 0x8CAF, 0x8CBC, 0x8CB3, 0x8CBD, 0x8CC1, 0x8CBB, 0x8CC0,
+ 0x8CB4, 0x8CB7, 0x8CB6, 0x8CBF, 0x8CB8, 0x8D8A, 0x8D85, 0x8D81, 0x8DCE,
+ 0x8DDD, 0x8DCB, 0x8DDA, 0x8DD1, 0x8DCC, 0x8DDB, 0x8DC6, 0x8EFB, 0x8EF8,
+ 0x8EFC, 0x8F9C, 0x902E, 0x9035, 0x9031, 0x9038, 0x9032, 0x9036, 0x9102,
+ 0x90F5, 0x9109, 0x90FE, 0x9163, 0x9165, 0x91CF, 0x9214, 0x9215, 0x9223,
+ 0x9209, 0x921E, 0x920D, 0x9210, 0x9207, 0x9211, 0x9594, 0x958F, 0x958B,
+ 0x9591, 0x9593, 0x9592, 0x958E, 0x968A, 0x968E, 0x968B, 0x967D, 0x9685,
+ 0x9686, 0x968D, 0x9672, 0x9684, 0x96C1, 0x96C5, 0x96C4, 0x96C6, 0x96C7,
+ 0x96EF, 0x96F2, 0x97CC, 0x9805, 0x9806, 0x9808, 0x98E7, 0x98EA, 0x98EF,
+ 0x98E9, 0x98F2, 0x98ED, 0x99AE, 0x99AD, 0x9EC3, 0x9ECD, 0x9ED1, 0x4E82,
+ 0x50AD, 0x50B5, 0x50B2, 0x50B3, 0x50C5, 0x50BE, 0x50AC, 0x50B7, 0x50BB,
+ 0x50AF, 0x50C7, 0x527F, 0x5277, 0x527D, 0x52DF, 0x52E6, 0x52E4, 0x52E2,
+ 0x52E3, 0x532F, 0x55DF, 0x55E8, 0x55D3, 0x55E6, 0x55CE, 0x55DC, 0x55C7,
+ 0x55D1, 0x55E3, 0x55E4, 0x55EF, 0x55DA, 0x55E1, 0x55C5, 0x55C6, 0x55E5,
+ 0x55C9, 0x5712, 0x5713, 0x585E, 0x5851, 0x5858, 0x5857, 0x585A, 0x5854,
+ 0x586B, 0x584C, 0x586D, 0x584A, 0x5862, 0x5852, 0x584B, 0x5967, 0x5AC1,
+ 0x5AC9, 0x5ACC, 0x5ABE, 0x5ABD, 0x5ABC, 0x5AB3, 0x5AC2, 0x5AB2, 0x5D69,
+ 0x5D6F, 0x5E4C, 0x5E79, 0x5EC9, 0x5EC8, 0x5F12, 0x5F59, 0x5FAC, 0x5FAE,
+ 0x611A, 0x610F, 0x6148, 0x611F, 0x60F3, 0x611B, 0x60F9, 0x6101, 0x6108,
+ 0x614E, 0x614C, 0x6144, 0x614D, 0x613E, 0x6134, 0x6127, 0x610D, 0x6106,
+ 0x6137, 0x6221, 0x6222, 0x6413, 0x643E, 0x641E, 0x642A, 0x642D, 0x643D,
+ 0x642C, 0x640F, 0x641C, 0x6414, 0x640D, 0x6436, 0x6416, 0x6417, 0x6406,
+ 0x656C, 0x659F, 0x65B0, 0x6697, 0x6689, 0x6687, 0x6688, 0x6696, 0x6684,
+ 0x6698, 0x668D, 0x6703, 0x6994, 0x696D, 0x695A, 0x6977, 0x6960, 0x6954,
+ 0x6975, 0x6930, 0x6982, 0x694A, 0x6968, 0x696B, 0x695E, 0x6953, 0x6979,
+ 0x6986, 0x695D, 0x6963, 0x695B, 0x6B47, 0x6B72, 0x6BC0, 0x6BBF, 0x6BD3,
+ 0x6BFD, 0x6EA2, 0x6EAF, 0x6ED3, 0x6EB6, 0x6EC2, 0x6E90, 0x6E9D, 0x6EC7,
+ 0x6EC5, 0x6EA5, 0x6E98, 0x6EBC, 0x6EBA, 0x6EAB, 0x6ED1, 0x6E96, 0x6E9C,
+ 0x6EC4, 0x6ED4, 0x6EAA, 0x6EA7, 0x6EB4, 0x714E, 0x7159, 0x7169, 0x7164,
+ 0x7149, 0x7167, 0x715C, 0x716C, 0x7166, 0x714C, 0x7165, 0x715E, 0x7146,
+ 0x7168, 0x7156, 0x723A, 0x7252, 0x7337, 0x7345, 0x733F, 0x733E, 0x746F,
+ 0x745A, 0x7455, 0x745F, 0x745E, 0x7441, 0x743F, 0x7459, 0x745B, 0x745C,
+ 0x7576, 0x7578, 0x7600, 0x75F0, 0x7601, 0x75F2, 0x75F1, 0x75FA, 0x75FF,
+ 0x75F4, 0x75F3, 0x76DE, 0x76DF, 0x775B, 0x776B, 0x7766, 0x775E, 0x7763,
+ 0x7779, 0x776A, 0x776C, 0x775C, 0x7765, 0x7768, 0x7762, 0x77EE, 0x788E,
+ 0x78B0, 0x7897, 0x7898, 0x788C, 0x7889, 0x787C, 0x7891, 0x7893, 0x787F,
+ 0x797A, 0x797F, 0x7981, 0x842C, 0x79BD, 0x7A1C, 0x7A1A, 0x7A20, 0x7A14,
+ 0x7A1F, 0x7A1E, 0x7A9F, 0x7AA0, 0x7B77, 0x7BC0, 0x7B60, 0x7B6E, 0x7B67,
+ 0x7CB1, 0x7CB3, 0x7CB5, 0x7D93, 0x7D79, 0x7D91, 0x7D81, 0x7D8F, 0x7D5B,
+ 0x7F6E, 0x7F69, 0x7F6A, 0x7F72, 0x7FA9, 0x7FA8, 0x7FA4, 0x8056, 0x8058,
+ 0x8086, 0x8084, 0x8171, 0x8170, 0x8178, 0x8165, 0x816E, 0x8173, 0x816B,
+ 0x8179, 0x817A, 0x8166, 0x8205, 0x8247, 0x8482, 0x8477, 0x843D, 0x8431,
+ 0x8475, 0x8466, 0x846B, 0x8449, 0x846C, 0x845B, 0x843C, 0x8435, 0x8461,
+ 0x8463, 0x8469, 0x846D, 0x8446, 0x865E, 0x865C, 0x865F, 0x86F9, 0x8713,
+ 0x8708, 0x8707, 0x8700, 0x86FE, 0x86FB, 0x8702, 0x8703, 0x8706, 0x870A,
+ 0x8859, 0x88DF, 0x88D4, 0x88D9, 0x88DC, 0x88D8, 0x88DD, 0x88E1, 0x88CA,
+ 0x88D5, 0x88D2, 0x899C, 0x89E3, 0x8A6B, 0x8A72, 0x8A73, 0x8A66, 0x8A69,
+ 0x8A70, 0x8A87, 0x8A7C, 0x8A63, 0x8AA0, 0x8A71, 0x8A85, 0x8A6D, 0x8A62,
+ 0x8A6E, 0x8A6C, 0x8A79, 0x8A7B, 0x8A3E, 0x8A68, 0x8C62, 0x8C8A, 0x8C89,
+ 0x8CCA, 0x8CC7, 0x8CC8, 0x8CC4, 0x8CB2, 0x8CC3, 0x8CC2, 0x8CC5, 0x8DE1,
+ 0x8DDF, 0x8DE8, 0x8DEF, 0x8DF3, 0x8DFA, 0x8DEA, 0x8DE4, 0x8DE6, 0x8EB2,
+ 0x8F03, 0x8F09, 0x8EFE, 0x8F0A, 0x8F9F, 0x8FB2, 0x904B, 0x904A, 0x9053,
+ 0x9042, 0x9054, 0x903C, 0x9055, 0x9050, 0x9047, 0x904F, 0x904E, 0x904D,
+ 0x9051, 0x903E, 0x9041, 0x9112, 0x9117, 0x916C, 0x916A, 0x9169, 0x91C9,
+ 0x9237, 0x9257, 0x9238, 0x923D, 0x9240, 0x923E, 0x925B, 0x924B, 0x9264,
+ 0x9251, 0x9234, 0x9249, 0x924D, 0x9245, 0x9239, 0x923F, 0x925A, 0x9598,
+ 0x9698, 0x9694, 0x9695, 0x96CD, 0x96CB, 0x96C9, 0x96CA, 0x96F7, 0x96FB,
+ 0x96F9, 0x96F6, 0x9756, 0x9774, 0x9776, 0x9810, 0x9811, 0x9813, 0x980A,
+ 0x9812, 0x980C, 0x98FC, 0x98F4, 0x98FD, 0x98FE, 0x99B3, 0x99B1, 0x99B4,
+ 0x9AE1, 0x9CE9, 0x9E82, 0x9F0E, 0x9F13, 0x9F20, 0x50E7, 0x50EE, 0x50E5,
+ 0x50D6, 0x50ED, 0x50DA, 0x50D5, 0x50CF, 0x50D1, 0x50F1, 0x50CE, 0x50E9,
+ 0x5162, 0x51F3, 0x5283, 0x5282, 0x5331, 0x53AD, 0x55FE, 0x5600, 0x561B,
+ 0x5617, 0x55FD, 0x5614, 0x5606, 0x5609, 0x560D, 0x560E, 0x55F7, 0x5616,
+ 0x561F, 0x5608, 0x5610, 0x55F6, 0x5718, 0x5716, 0x5875, 0x587E, 0x5883,
+ 0x5893, 0x588A, 0x5879, 0x5885, 0x587D, 0x58FD, 0x5925, 0x5922, 0x5924,
+ 0x596A, 0x5969, 0x5AE1, 0x5AE6, 0x5AE9, 0x5AD7, 0x5AD6, 0x5AD8, 0x5AE3,
+ 0x5B75, 0x5BDE, 0x5BE7, 0x5BE1, 0x5BE5, 0x5BE6, 0x5BE8, 0x5BE2, 0x5BE4,
+ 0x5BDF, 0x5C0D, 0x5C62, 0x5D84, 0x5D87, 0x5E5B, 0x5E63, 0x5E55, 0x5E57,
+ 0x5E54, 0x5ED3, 0x5ED6, 0x5F0A, 0x5F46, 0x5F70, 0x5FB9, 0x6147, 0x613F,
+ 0x614B, 0x6177, 0x6162, 0x6163, 0x615F, 0x615A, 0x6158, 0x6175, 0x622A,
+ 0x6487, 0x6458, 0x6454, 0x64A4, 0x6478, 0x645F, 0x647A, 0x6451, 0x6467,
+ 0x6434, 0x646D, 0x647B, 0x6572, 0x65A1, 0x65D7, 0x65D6, 0x66A2, 0x66A8,
+ 0x669D, 0x699C, 0x69A8, 0x6995, 0x69C1, 0x69AE, 0x69D3, 0x69CB, 0x699B,
+ 0x69B7, 0x69BB, 0x69AB, 0x69B4, 0x69D0, 0x69CD, 0x69AD, 0x69CC, 0x69A6,
+ 0x69C3, 0x69A3, 0x6B49, 0x6B4C, 0x6C33, 0x6F33, 0x6F14, 0x6EFE, 0x6F13,
+ 0x6EF4, 0x6F29, 0x6F3E, 0x6F20, 0x6F2C, 0x6F0F, 0x6F02, 0x6F22, 0x6EFF,
+ 0x6EEF, 0x6F06, 0x6F31, 0x6F38, 0x6F32, 0x6F23, 0x6F15, 0x6F2B, 0x6F2F,
+ 0x6F88, 0x6F2A, 0x6EEC, 0x6F01, 0x6EF2, 0x6ECC, 0x6EF7, 0x7194, 0x7199,
+ 0x717D, 0x718A, 0x7184, 0x7192, 0x723E, 0x7292, 0x7296, 0x7344, 0x7350,
+ 0x7464, 0x7463, 0x746A, 0x7470, 0x746D, 0x7504, 0x7591, 0x7627, 0x760D,
+ 0x760B, 0x7609, 0x7613, 0x76E1, 0x76E3, 0x7784, 0x777D, 0x777F, 0x7761,
+ 0x78C1, 0x789F, 0x78A7, 0x78B3, 0x78A9, 0x78A3, 0x798E, 0x798F, 0x798D,
+ 0x7A2E, 0x7A31, 0x7AAA, 0x7AA9, 0x7AED, 0x7AEF, 0x7BA1, 0x7B95, 0x7B8B,
+ 0x7B75, 0x7B97, 0x7B9D, 0x7B94, 0x7B8F, 0x7BB8, 0x7B87, 0x7B84, 0x7CB9,
+ 0x7CBD, 0x7CBE, 0x7DBB, 0x7DB0, 0x7D9C, 0x7DBD, 0x7DBE, 0x7DA0, 0x7DCA,
+ 0x7DB4, 0x7DB2, 0x7DB1, 0x7DBA, 0x7DA2, 0x7DBF, 0x7DB5, 0x7DB8, 0x7DAD,
+ 0x7DD2, 0x7DC7, 0x7DAC, 0x7F70, 0x7FE0, 0x7FE1, 0x7FDF, 0x805E, 0x805A,
+ 0x8087, 0x8150, 0x8180, 0x818F, 0x8188, 0x818A, 0x817F, 0x8182, 0x81E7,
+ 0x81FA, 0x8207, 0x8214, 0x821E, 0x824B, 0x84C9, 0x84BF, 0x84C6, 0x84C4,
+ 0x8499, 0x849E, 0x84B2, 0x849C, 0x84CB, 0x84B8, 0x84C0, 0x84D3, 0x8490,
+ 0x84BC, 0x84D1, 0x84CA, 0x873F, 0x871C, 0x873B, 0x8722, 0x8725, 0x8734,
+ 0x8718, 0x8755, 0x8737, 0x8729, 0x88F3, 0x8902, 0x88F4, 0x88F9, 0x88F8,
+ 0x88FD, 0x88E8, 0x891A, 0x88EF, 0x8AA6, 0x8A8C, 0x8A9E, 0x8AA3, 0x8A8D,
+ 0x8AA1, 0x8A93, 0x8AA4, 0x8AAA, 0x8AA5, 0x8AA8, 0x8A98, 0x8A91, 0x8A9A,
+ 0x8AA7, 0x8C6A, 0x8C8D, 0x8C8C, 0x8CD3, 0x8CD1, 0x8CD2, 0x8D6B, 0x8D99,
+ 0x8D95, 0x8DFC, 0x8F14, 0x8F12, 0x8F15, 0x8F13, 0x8FA3, 0x9060, 0x9058,
+ 0x905C, 0x9063, 0x9059, 0x905E, 0x9062, 0x905D, 0x905B, 0x9119, 0x9118,
+ 0x911E, 0x9175, 0x9178, 0x9177, 0x9174, 0x9278, 0x92AC, 0x9280, 0x9285,
+ 0x9298, 0x9296, 0x927B, 0x9293, 0x929C, 0x92A8, 0x927C, 0x9291, 0x95A1,
+ 0x95A8, 0x95A9, 0x95A3, 0x95A5, 0x95A4, 0x9699, 0x969C, 0x969B, 0x96CC,
+ 0x96D2, 0x9700, 0x977C, 0x9785, 0x97F6, 0x9817, 0x9818, 0x98AF, 0x98B1,
+ 0x9903, 0x9905, 0x990C, 0x9909, 0x99C1, 0x9AAF, 0x9AB0, 0x9AE6, 0x9B41,
+ 0x9B42, 0x9CF4, 0x9CF6, 0x9CF3, 0x9EBC, 0x9F3B, 0x9F4A, 0x5104, 0x5100,
+ 0x50FB, 0x50F5, 0x50F9, 0x5102, 0x5108, 0x5109, 0x5105, 0x51DC, 0x5287,
+ 0x5288, 0x5289, 0x528D, 0x528A, 0x52F0, 0x53B2, 0x562E, 0x563B, 0x5639,
+ 0x5632, 0x563F, 0x5634, 0x5629, 0x5653, 0x564E, 0x5657, 0x5674, 0x5636,
+ 0x562F, 0x5630, 0x5880, 0x589F, 0x589E, 0x58B3, 0x589C, 0x58AE, 0x58A9,
+ 0x58A6, 0x596D, 0x5B09, 0x5AFB, 0x5B0B, 0x5AF5, 0x5B0C, 0x5B08, 0x5BEE,
+ 0x5BEC, 0x5BE9, 0x5BEB, 0x5C64, 0x5C65, 0x5D9D, 0x5D94, 0x5E62, 0x5E5F,
+ 0x5E61, 0x5EE2, 0x5EDA, 0x5EDF, 0x5EDD, 0x5EE3, 0x5EE0, 0x5F48, 0x5F71,
+ 0x5FB7, 0x5FB5, 0x6176, 0x6167, 0x616E, 0x615D, 0x6155, 0x6182, 0x617C,
+ 0x6170, 0x616B, 0x617E, 0x61A7, 0x6190, 0x61AB, 0x618E, 0x61AC, 0x619A,
+ 0x61A4, 0x6194, 0x61AE, 0x622E, 0x6469, 0x646F, 0x6479, 0x649E, 0x64B2,
+ 0x6488, 0x6490, 0x64B0, 0x64A5, 0x6493, 0x6495, 0x64A9, 0x6492, 0x64AE,
+ 0x64AD, 0x64AB, 0x649A, 0x64AC, 0x6499, 0x64A2, 0x64B3, 0x6575, 0x6577,
+ 0x6578, 0x66AE, 0x66AB, 0x66B4, 0x66B1, 0x6A23, 0x6A1F, 0x69E8, 0x6A01,
+ 0x6A1E, 0x6A19, 0x69FD, 0x6A21, 0x6A13, 0x6A0A, 0x69F3, 0x6A02, 0x6A05,
+ 0x69ED, 0x6A11, 0x6B50, 0x6B4E, 0x6BA4, 0x6BC5, 0x6BC6, 0x6F3F, 0x6F7C,
+ 0x6F84, 0x6F51, 0x6F66, 0x6F54, 0x6F86, 0x6F6D, 0x6F5B, 0x6F78, 0x6F6E,
+ 0x6F8E, 0x6F7A, 0x6F70, 0x6F64, 0x6F97, 0x6F58, 0x6ED5, 0x6F6F, 0x6F60,
+ 0x6F5F, 0x719F, 0x71AC, 0x71B1, 0x71A8, 0x7256, 0x729B, 0x734E, 0x7357,
+ 0x7469, 0x748B, 0x7483, 0x747E, 0x7480, 0x757F, 0x7620, 0x7629, 0x761F,
+ 0x7624, 0x7626, 0x7621, 0x7622, 0x769A, 0x76BA, 0x76E4, 0x778E, 0x7787,
+ 0x778C, 0x7791, 0x778B, 0x78CB, 0x78C5, 0x78BA, 0x78CA, 0x78BE, 0x78D5,
+ 0x78BC, 0x78D0, 0x7A3F, 0x7A3C, 0x7A40, 0x7A3D, 0x7A37, 0x7A3B, 0x7AAF,
+ 0x7AAE, 0x7BAD, 0x7BB1, 0x7BC4, 0x7BB4, 0x7BC6, 0x7BC7, 0x7BC1, 0x7BA0,
+ 0x7BCC, 0x7CCA, 0x7DE0, 0x7DF4, 0x7DEF, 0x7DFB, 0x7DD8, 0x7DEC, 0x7DDD,
+ 0x7DE8, 0x7DE3, 0x7DDA, 0x7DDE, 0x7DE9, 0x7D9E, 0x7DD9, 0x7DF2, 0x7DF9,
+ 0x7F75, 0x7F77, 0x7FAF, 0x7FE9, 0x8026, 0x819B, 0x819C, 0x819D, 0x81A0,
+ 0x819A, 0x8198, 0x8517, 0x853D, 0x851A, 0x84EE, 0x852C, 0x852D, 0x8513,
+ 0x8511, 0x8523, 0x8521, 0x8514, 0x84EC, 0x8525, 0x84FF, 0x8506, 0x8782,
+ 0x8774, 0x8776, 0x8760, 0x8766, 0x8778, 0x8768, 0x8759, 0x8757, 0x874C,
+ 0x8753, 0x885B, 0x885D, 0x8910, 0x8907, 0x8912, 0x8913, 0x8915, 0x890A,
+ 0x8ABC, 0x8AD2, 0x8AC7, 0x8AC4, 0x8A95, 0x8ACB, 0x8AF8, 0x8AB2, 0x8AC9,
+ 0x8AC2, 0x8ABF, 0x8AB0, 0x8AD6, 0x8ACD, 0x8AB6, 0x8AB9, 0x8ADB, 0x8C4C,
+ 0x8C4E, 0x8C6C, 0x8CE0, 0x8CDE, 0x8CE6, 0x8CE4, 0x8CEC, 0x8CED, 0x8CE2,
+ 0x8CE3, 0x8CDC, 0x8CEA, 0x8CE1, 0x8D6D, 0x8D9F, 0x8DA3, 0x8E2B, 0x8E10,
+ 0x8E1D, 0x8E22, 0x8E0F, 0x8E29, 0x8E1F, 0x8E21, 0x8E1E, 0x8EBA, 0x8F1D,
+ 0x8F1B, 0x8F1F, 0x8F29, 0x8F26, 0x8F2A, 0x8F1C, 0x8F1E, 0x8F25, 0x9069,
+ 0x906E, 0x9068, 0x906D, 0x9077, 0x9130, 0x912D, 0x9127, 0x9131, 0x9187,
+ 0x9189, 0x918B, 0x9183, 0x92C5, 0x92BB, 0x92B7, 0x92EA, 0x92E4, 0x92C1,
+ 0x92B3, 0x92BC, 0x92D2, 0x92C7, 0x92F0, 0x92B2, 0x95AD, 0x95B1, 0x9704,
+ 0x9706, 0x9707, 0x9709, 0x9760, 0x978D, 0x978B, 0x978F, 0x9821, 0x982B,
+ 0x981C, 0x98B3, 0x990A, 0x9913, 0x9912, 0x9918, 0x99DD, 0x99D0, 0x99DF,
+ 0x99DB, 0x99D1, 0x99D5, 0x99D2, 0x99D9, 0x9AB7, 0x9AEE, 0x9AEF, 0x9B27,
+ 0x9B45, 0x9B44, 0x9B77, 0x9B6F, 0x9D06, 0x9D09, 0x9D03, 0x9EA9, 0x9EBE,
+ 0x9ECE, 0x58A8, 0x9F52, 0x5112, 0x5118, 0x5114, 0x5110, 0x5115, 0x5180,
+ 0x51AA, 0x51DD, 0x5291, 0x5293, 0x52F3, 0x5659, 0x566B, 0x5679, 0x5669,
+ 0x5664, 0x5678, 0x566A, 0x5668, 0x5665, 0x5671, 0x566F, 0x566C, 0x5662,
+ 0x5676, 0x58C1, 0x58BE, 0x58C7, 0x58C5, 0x596E, 0x5B1D, 0x5B34, 0x5B78,
+ 0x5BF0, 0x5C0E, 0x5F4A, 0x61B2, 0x6191, 0x61A9, 0x618A, 0x61CD, 0x61B6,
+ 0x61BE, 0x61CA, 0x61C8, 0x6230, 0x64C5, 0x64C1, 0x64CB, 0x64BB, 0x64BC,
+ 0x64DA, 0x64C4, 0x64C7, 0x64C2, 0x64CD, 0x64BF, 0x64D2, 0x64D4, 0x64BE,
+ 0x6574, 0x66C6, 0x66C9, 0x66B9, 0x66C4, 0x66C7, 0x66B8, 0x6A3D, 0x6A38,
+ 0x6A3A, 0x6A59, 0x6A6B, 0x6A58, 0x6A39, 0x6A44, 0x6A62, 0x6A61, 0x6A4B,
+ 0x6A47, 0x6A35, 0x6A5F, 0x6A48, 0x6B59, 0x6B77, 0x6C05, 0x6FC2, 0x6FB1,
+ 0x6FA1, 0x6FC3, 0x6FA4, 0x6FC1, 0x6FA7, 0x6FB3, 0x6FC0, 0x6FB9, 0x6FB6,
+ 0x6FA6, 0x6FA0, 0x6FB4, 0x71BE, 0x71C9, 0x71D0, 0x71D2, 0x71C8, 0x71D5,
+ 0x71B9, 0x71CE, 0x71D9, 0x71DC, 0x71C3, 0x71C4, 0x7368, 0x749C, 0x74A3,
+ 0x7498, 0x749F, 0x749E, 0x74E2, 0x750C, 0x750D, 0x7634, 0x7638, 0x763A,
+ 0x76E7, 0x76E5, 0x77A0, 0x779E, 0x779F, 0x77A5, 0x78E8, 0x78DA, 0x78EC,
+ 0x78E7, 0x79A6, 0x7A4D, 0x7A4E, 0x7A46, 0x7A4C, 0x7A4B, 0x7ABA, 0x7BD9,
+ 0x7C11, 0x7BC9, 0x7BE4, 0x7BDB, 0x7BE1, 0x7BE9, 0x7BE6, 0x7CD5, 0x7CD6,
+ 0x7E0A, 0x7E11, 0x7E08, 0x7E1B, 0x7E23, 0x7E1E, 0x7E1D, 0x7E09, 0x7E10,
+ 0x7F79, 0x7FB2, 0x7FF0, 0x7FF1, 0x7FEE, 0x8028, 0x81B3, 0x81A9, 0x81A8,
+ 0x81FB, 0x8208, 0x8258, 0x8259, 0x854A, 0x8559, 0x8548, 0x8568, 0x8569,
+ 0x8543, 0x8549, 0x856D, 0x856A, 0x855E, 0x8783, 0x879F, 0x879E, 0x87A2,
+ 0x878D, 0x8861, 0x892A, 0x8932, 0x8925, 0x892B, 0x8921, 0x89AA, 0x89A6,
+ 0x8AE6, 0x8AFA, 0x8AEB, 0x8AF1, 0x8B00, 0x8ADC, 0x8AE7, 0x8AEE, 0x8AFE,
+ 0x8B01, 0x8B02, 0x8AF7, 0x8AED, 0x8AF3, 0x8AF6, 0x8AFC, 0x8C6B, 0x8C6D,
+ 0x8C93, 0x8CF4, 0x8E44, 0x8E31, 0x8E34, 0x8E42, 0x8E39, 0x8E35, 0x8F3B,
+ 0x8F2F, 0x8F38, 0x8F33, 0x8FA8, 0x8FA6, 0x9075, 0x9074, 0x9078, 0x9072,
+ 0x907C, 0x907A, 0x9134, 0x9192, 0x9320, 0x9336, 0x92F8, 0x9333, 0x932F,
+ 0x9322, 0x92FC, 0x932B, 0x9304, 0x931A, 0x9310, 0x9326, 0x9321, 0x9315,
+ 0x932E, 0x9319, 0x95BB, 0x96A7, 0x96A8, 0x96AA, 0x96D5, 0x970E, 0x9711,
+ 0x9716, 0x970D, 0x9713, 0x970F, 0x975B, 0x975C, 0x9766, 0x9798, 0x9830,
+ 0x9838, 0x983B, 0x9837, 0x982D, 0x9839, 0x9824, 0x9910, 0x9928, 0x991E,
+ 0x991B, 0x9921, 0x991A, 0x99ED, 0x99E2, 0x99F1, 0x9AB8, 0x9ABC, 0x9AFB,
+ 0x9AED, 0x9B28, 0x9B91, 0x9D15, 0x9D23, 0x9D26, 0x9D28, 0x9D12, 0x9D1B,
+ 0x9ED8, 0x9ED4, 0x9F8D, 0x9F9C, 0x512A, 0x511F, 0x5121, 0x5132, 0x52F5,
+ 0x568E, 0x5680, 0x5690, 0x5685, 0x5687, 0x568F, 0x58D5, 0x58D3, 0x58D1,
+ 0x58CE, 0x5B30, 0x5B2A, 0x5B24, 0x5B7A, 0x5C37, 0x5C68, 0x5DBC, 0x5DBA,
+ 0x5DBD, 0x5DB8, 0x5E6B, 0x5F4C, 0x5FBD, 0x61C9, 0x61C2, 0x61C7, 0x61E6,
+ 0x61CB, 0x6232, 0x6234, 0x64CE, 0x64CA, 0x64D8, 0x64E0, 0x64F0, 0x64E6,
+ 0x64EC, 0x64F1, 0x64E2, 0x64ED, 0x6582, 0x6583, 0x66D9, 0x66D6, 0x6A80,
+ 0x6A94, 0x6A84, 0x6AA2, 0x6A9C, 0x6ADB, 0x6AA3, 0x6A7E, 0x6A97, 0x6A90,
+ 0x6AA0, 0x6B5C, 0x6BAE, 0x6BDA, 0x6C08, 0x6FD8, 0x6FF1, 0x6FDF, 0x6FE0,
+ 0x6FDB, 0x6FE4, 0x6FEB, 0x6FEF, 0x6F80, 0x6FEC, 0x6FE1, 0x6FE9, 0x6FD5,
+ 0x6FEE, 0x6FF0, 0x71E7, 0x71DF, 0x71EE, 0x71E6, 0x71E5, 0x71ED, 0x71EC,
+ 0x71F4, 0x71E0, 0x7235, 0x7246, 0x7370, 0x7372, 0x74A9, 0x74B0, 0x74A6,
+ 0x74A8, 0x7646, 0x7642, 0x764C, 0x76EA, 0x77B3, 0x77AA, 0x77B0, 0x77AC,
+ 0x77A7, 0x77AD, 0x77EF, 0x78F7, 0x78FA, 0x78F4, 0x78EF, 0x7901, 0x79A7,
+ 0x79AA, 0x7A57, 0x7ABF, 0x7C07, 0x7C0D, 0x7BFE, 0x7BF7, 0x7C0C, 0x7BE0,
+ 0x7CE0, 0x7CDC, 0x7CDE, 0x7CE2, 0x7CDF, 0x7CD9, 0x7CDD, 0x7E2E, 0x7E3E,
+ 0x7E46, 0x7E37, 0x7E32, 0x7E43, 0x7E2B, 0x7E3D, 0x7E31, 0x7E45, 0x7E41,
+ 0x7E34, 0x7E39, 0x7E48, 0x7E35, 0x7E3F, 0x7E2F, 0x7F44, 0x7FF3, 0x7FFC,
+ 0x8071, 0x8072, 0x8070, 0x806F, 0x8073, 0x81C6, 0x81C3, 0x81BA, 0x81C2,
+ 0x81C0, 0x81BF, 0x81BD, 0x81C9, 0x81BE, 0x81E8, 0x8209, 0x8271, 0x85AA,
+ 0x8584, 0x857E, 0x859C, 0x8591, 0x8594, 0x85AF, 0x859B, 0x8587, 0x85A8,
+ 0x858A, 0x85A6, 0x8667, 0x87C0, 0x87D1, 0x87B3, 0x87D2, 0x87C6, 0x87AB,
+ 0x87BB, 0x87BA, 0x87C8, 0x87CB, 0x893B, 0x8936, 0x8944, 0x8938, 0x893D,
+ 0x89AC, 0x8B0E, 0x8B17, 0x8B19, 0x8B1B, 0x8B0A, 0x8B20, 0x8B1D, 0x8B04,
+ 0x8B10, 0x8C41, 0x8C3F, 0x8C73, 0x8CFA, 0x8CFD, 0x8CFC, 0x8CF8, 0x8CFB,
+ 0x8DA8, 0x8E49, 0x8E4B, 0x8E48, 0x8E4A, 0x8F44, 0x8F3E, 0x8F42, 0x8F45,
+ 0x8F3F, 0x907F, 0x907D, 0x9084, 0x9081, 0x9082, 0x9080, 0x9139, 0x91A3,
+ 0x919E, 0x919C, 0x934D, 0x9382, 0x9328, 0x9375, 0x934A, 0x9365, 0x934B,
+ 0x9318, 0x937E, 0x936C, 0x935B, 0x9370, 0x935A, 0x9354, 0x95CA, 0x95CB,
+ 0x95CC, 0x95C8, 0x95C6, 0x96B1, 0x96B8, 0x96D6, 0x971C, 0x971E, 0x97A0,
+ 0x97D3, 0x9846, 0x98B6, 0x9935, 0x9A01, 0x99FF, 0x9BAE, 0x9BAB, 0x9BAA,
+ 0x9BAD, 0x9D3B, 0x9D3F, 0x9E8B, 0x9ECF, 0x9EDE, 0x9EDC, 0x9EDD, 0x9EDB,
+ 0x9F3E, 0x9F4B, 0x53E2, 0x5695, 0x56AE, 0x58D9, 0x58D8, 0x5B38, 0x5F5D,
+ 0x61E3, 0x6233, 0x64F4, 0x64F2, 0x64FE, 0x6506, 0x64FA, 0x64FB, 0x64F7,
+ 0x65B7, 0x66DC, 0x6726, 0x6AB3, 0x6AAC, 0x6AC3, 0x6ABB, 0x6AB8, 0x6AC2,
+ 0x6AAE, 0x6AAF, 0x6B5F, 0x6B78, 0x6BAF, 0x7009, 0x700B, 0x6FFE, 0x7006,
+ 0x6FFA, 0x7011, 0x700F, 0x71FB, 0x71FC, 0x71FE, 0x71F8, 0x7377, 0x7375,
+ 0x74A7, 0x74BF, 0x7515, 0x7656, 0x7658, 0x7652, 0x77BD, 0x77BF, 0x77BB,
+ 0x77BC, 0x790E, 0x79AE, 0x7A61, 0x7A62, 0x7A60, 0x7AC4, 0x7AC5, 0x7C2B,
+ 0x7C27, 0x7C2A, 0x7C1E, 0x7C23, 0x7C21, 0x7CE7, 0x7E54, 0x7E55, 0x7E5E,
+ 0x7E5A, 0x7E61, 0x7E52, 0x7E59, 0x7F48, 0x7FF9, 0x7FFB, 0x8077, 0x8076,
+ 0x81CD, 0x81CF, 0x820A, 0x85CF, 0x85A9, 0x85CD, 0x85D0, 0x85C9, 0x85B0,
+ 0x85BA, 0x85B9, 0x87EF, 0x87EC, 0x87F2, 0x87E0, 0x8986, 0x89B2, 0x89F4,
+ 0x8B28, 0x8B39, 0x8B2C, 0x8B2B, 0x8C50, 0x8D05, 0x8E59, 0x8E63, 0x8E66,
+ 0x8E64, 0x8E5F, 0x8E55, 0x8EC0, 0x8F49, 0x8F4D, 0x9087, 0x9083, 0x9088,
+ 0x91AB, 0x91AC, 0x91D0, 0x9394, 0x938A, 0x9396, 0x93A2, 0x93B3, 0x93AE,
+ 0x93AC, 0x93B0, 0x9398, 0x939A, 0x9397, 0x95D4, 0x95D6, 0x95D0, 0x95D5,
+ 0x96E2, 0x96DC, 0x96D9, 0x96DB, 0x96DE, 0x9724, 0x97A3, 0x97A6, 0x97AD,
+ 0x97F9, 0x984D, 0x984F, 0x984C, 0x984E, 0x9853, 0x98BA, 0x993E, 0x993F,
+ 0x993D, 0x992E, 0x99A5, 0x9A0E, 0x9AC1, 0x9B03, 0x9B06, 0x9B4F, 0x9B4E,
+ 0x9B4D, 0x9BCA, 0x9BC9, 0x9BFD, 0x9BC8, 0x9BC0, 0x9D51, 0x9D5D, 0x9D60,
+ 0x9EE0, 0x9F15, 0x9F2C, 0x5133, 0x56A5, 0x56A8, 0x58DE, 0x58DF, 0x58E2,
+ 0x5BF5, 0x9F90, 0x5EEC, 0x61F2, 0x61F7, 0x61F6, 0x61F5, 0x6500, 0x650F,
+ 0x66E0, 0x66DD, 0x6AE5, 0x6ADD, 0x6ADA, 0x6AD3, 0x701B, 0x701F, 0x7028,
+ 0x701A, 0x701D, 0x7015, 0x7018, 0x7206, 0x720D, 0x7258, 0x72A2, 0x7378,
+ 0x737A, 0x74BD, 0x74CA, 0x74E3, 0x7587, 0x7586, 0x765F, 0x7661, 0x77C7,
+ 0x7919, 0x79B1, 0x7A6B, 0x7A69, 0x7C3E, 0x7C3F, 0x7C38, 0x7C3D, 0x7C37,
+ 0x7C40, 0x7E6B, 0x7E6D, 0x7E79, 0x7E69, 0x7E6A, 0x7E73, 0x7F85, 0x7FB6,
+ 0x7FB9, 0x7FB8, 0x81D8, 0x85E9, 0x85DD, 0x85EA, 0x85D5, 0x85E4, 0x85E5,
+ 0x85F7, 0x87FB, 0x8805, 0x880D, 0x87F9, 0x87FE, 0x8960, 0x895F, 0x8956,
+ 0x895E, 0x8B41, 0x8B5C, 0x8B58, 0x8B49, 0x8B5A, 0x8B4E, 0x8B4F, 0x8B46,
+ 0x8B59, 0x8D08, 0x8D0A, 0x8E7C, 0x8E72, 0x8E87, 0x8E76, 0x8E6C, 0x8E7A,
+ 0x8E74, 0x8F54, 0x8F4E, 0x8FAD, 0x908A, 0x908B, 0x91B1, 0x91AE, 0x93E1,
+ 0x93D1, 0x93DF, 0x93C3, 0x93C8, 0x93DC, 0x93DD, 0x93D6, 0x93E2, 0x93CD,
+ 0x93D8, 0x93E4, 0x93D7, 0x93E8, 0x95DC, 0x96B4, 0x96E3, 0x972A, 0x9727,
+ 0x9761, 0x97DC, 0x97FB, 0x985E, 0x9858, 0x985B, 0x98BC, 0x9945, 0x9949,
+ 0x9A16, 0x9A19, 0x9B0D, 0x9BE8, 0x9BE7, 0x9BD6, 0x9BDB, 0x9D89, 0x9D61,
+ 0x9D72, 0x9D6A, 0x9D6C, 0x9E92, 0x9E97, 0x9E93, 0x9EB4, 0x52F8, 0x56B7,
+ 0x56B6, 0x56B4, 0x56BC, 0x58E4, 0x5B40, 0x5B43, 0x5B7D, 0x5BF6, 0x5DC9,
+ 0x61F8, 0x61FA, 0x6518, 0x6514, 0x6519, 0x66E6, 0x6727, 0x6AEC, 0x703E,
+ 0x7030, 0x7032, 0x7210, 0x737B, 0x74CF, 0x7662, 0x7665, 0x7926, 0x792A,
+ 0x792C, 0x792B, 0x7AC7, 0x7AF6, 0x7C4C, 0x7C43, 0x7C4D, 0x7CEF, 0x7CF0,
+ 0x8FAE, 0x7E7D, 0x7E7C, 0x7E82, 0x7F4C, 0x8000, 0x81DA, 0x8266, 0x85FB,
+ 0x85F9, 0x8611, 0x85FA, 0x8606, 0x860B, 0x8607, 0x860A, 0x8814, 0x8815,
+ 0x8964, 0x89BA, 0x89F8, 0x8B70, 0x8B6C, 0x8B66, 0x8B6F, 0x8B5F, 0x8B6B,
+ 0x8D0F, 0x8D0D, 0x8E89, 0x8E81, 0x8E85, 0x8E82, 0x91B4, 0x91CB, 0x9418,
+ 0x9403, 0x93FD, 0x95E1, 0x9730, 0x98C4, 0x9952, 0x9951, 0x99A8, 0x9A2B,
+ 0x9A30, 0x9A37, 0x9A35, 0x9C13, 0x9C0D, 0x9E79, 0x9EB5, 0x9EE8, 0x9F2F,
+ 0x9F5F, 0x9F63, 0x9F61, 0x5137, 0x5138, 0x56C1, 0x56C0, 0x56C2, 0x5914,
+ 0x5C6C, 0x5DCD, 0x61FC, 0x61FE, 0x651D, 0x651C, 0x6595, 0x66E9, 0x6AFB,
+ 0x6B04, 0x6AFA, 0x6BB2, 0x704C, 0x721B, 0x72A7, 0x74D6, 0x74D4, 0x7669,
+ 0x77D3, 0x7C50, 0x7E8F, 0x7E8C, 0x7FBC, 0x8617, 0x862D, 0x861A, 0x8823,
+ 0x8822, 0x8821, 0x881F, 0x896A, 0x896C, 0x89BD, 0x8B74, 0x8B77, 0x8B7D,
+ 0x8D13, 0x8E8A, 0x8E8D, 0x8E8B, 0x8F5F, 0x8FAF, 0x91BA, 0x942E, 0x9433,
+ 0x9435, 0x943A, 0x9438, 0x9432, 0x942B, 0x95E2, 0x9738, 0x9739, 0x9732,
+ 0x97FF, 0x9867, 0x9865, 0x9957, 0x9A45, 0x9A43, 0x9A40, 0x9A3E, 0x9ACF,
+ 0x9B54, 0x9B51, 0x9C2D, 0x9C25, 0x9DAF, 0x9DB4, 0x9DC2, 0x9DB8, 0x9E9D,
+ 0x9EEF, 0x9F19, 0x9F5C, 0x9F66, 0x9F67, 0x513C, 0x513B, 0x56C8, 0x56CA,
+ 0x56C9, 0x5B7F, 0x5DD4, 0x5DD2, 0x5F4E, 0x61FF, 0x6524, 0x6B0A, 0x6B61,
+ 0x7051, 0x7058, 0x7380, 0x74E4, 0x758A, 0x766E, 0x766C, 0x79B3, 0x7C60,
+ 0x7C5F, 0x807E, 0x807D, 0x81DF, 0x8972, 0x896F, 0x89FC, 0x8B80, 0x8D16,
+ 0x8D17, 0x8E91, 0x8E93, 0x8F61, 0x9148, 0x9444, 0x9451, 0x9452, 0x973D,
+ 0x973E, 0x97C3, 0x97C1, 0x986B, 0x9955, 0x9A55, 0x9A4D, 0x9AD2, 0x9B1A,
+ 0x9C49, 0x9C31, 0x9C3E, 0x9C3B, 0x9DD3, 0x9DD7, 0x9F34, 0x9F6C, 0x9F6A,
+ 0x9F94, 0x56CC, 0x5DD6, 0x6200, 0x6523, 0x652B, 0x652A, 0x66EC, 0x6B10,
+ 0x74DA, 0x7ACA, 0x7C64, 0x7C63, 0x7C65, 0x7E93, 0x7E96, 0x7E94, 0x81E2,
+ 0x8638, 0x863F, 0x8831, 0x8B8A, 0x9090, 0x908F, 0x9463, 0x9460, 0x9464,
+ 0x9768, 0x986F, 0x995C, 0x9A5A, 0x9A5B, 0x9A57, 0x9AD3, 0x9AD4, 0x9AD1,
+ 0x9C54, 0x9C57, 0x9C56, 0x9DE5, 0x9E9F, 0x9EF4, 0x56D1, 0x58E9, 0x652C,
+ 0x705E, 0x7671, 0x7672, 0x77D7, 0x7F50, 0x7F88, 0x8836, 0x8839, 0x8862,
+ 0x8B93, 0x8B92, 0x8B96, 0x8277, 0x8D1B, 0x91C0, 0x946A, 0x9742, 0x9748,
+ 0x9744, 0x97C6, 0x9870, 0x9A5F, 0x9B22, 0x9B58, 0x9C5F, 0x9DF9, 0x9DFA,
+ 0x9E7C, 0x9E7D, 0x9F07, 0x9F77, 0x9F72, 0x5EF3, 0x6B16, 0x7063, 0x7C6C,
+ 0x7C6E, 0x883B, 0x89C0, 0x8EA1, 0x91C1, 0x9472, 0x9470, 0x9871, 0x995E,
+ 0x9AD6, 0x9B23, 0x9ECC, 0x7064, 0x77DA, 0x8B9A, 0x9477, 0x97C9, 0x9A62,
+ 0x9A65, 0x7E9C, 0x8B9C, 0x8EAA, 0x91C5, 0x947D, 0x947E, 0x947C, 0x9C77,
+ 0x9C78, 0x9EF7, 0x8C54, 0x947F, 0x9E1A, 0x7228, 0x9A6A, 0x9B31, 0x9E1B,
+ 0x9E1E, 0x7C72, 0x4E42, 0x4E5C, 0x51F5, 0x531A, 0x5382, 0x4E07, 0x4E0C,
+ 0x4E47, 0x4E8D, 0x56D7, 0x5C6E, 0x5F73, 0x4E0F, 0x5187, 0x4E0E, 0x4E2E,
+ 0x4E93, 0x4EC2, 0x4EC9, 0x4EC8, 0x5198, 0x52FC, 0x536C, 0x53B9, 0x5720,
+ 0x5903, 0x592C, 0x5C10, 0x5DFF, 0x65E1, 0x6BB3, 0x6BCC, 0x6C14, 0x723F,
+ 0x4E31, 0x4E3C, 0x4EE8, 0x4EDC, 0x4EE9, 0x4EE1, 0x4EDD, 0x4EDA, 0x520C,
+ 0x5209, 0x531C, 0x534C, 0x5722, 0x5723, 0x5917, 0x592F, 0x5B81, 0x5B84,
+ 0x5C12, 0x5C3B, 0x5C74, 0x5C73, 0x5E04, 0x5E80, 0x5E82, 0x5FC9, 0x6209,
+ 0x6250, 0x6C15, 0x6C36, 0x6C43, 0x6C3F, 0x6C3B, 0x72AE, 0x72B0, 0x738A,
+ 0x79B8, 0x808A, 0x961E, 0x4F0E, 0x4F18, 0x4F2C, 0x4EF5, 0x4F14, 0x4EF1,
+ 0x4F00, 0x4EF7, 0x4F08, 0x4F1D, 0x4F02, 0x4F05, 0x4F22, 0x4F13, 0x4F04,
+ 0x4EF4, 0x4F12, 0x51B1, 0x5213, 0x5210, 0x52A6, 0x5322, 0x531F, 0x534D,
+ 0x538A, 0x5407, 0x56E1, 0x56DF, 0x572E, 0x572A, 0x5734, 0x593C, 0x5980,
+ 0x597C, 0x5985, 0x597B, 0x597E, 0x5977, 0x597F, 0x5B56, 0x5C15, 0x5C25,
+ 0x5C7C, 0x5C7A, 0x5C7B, 0x5C7E, 0x5DDF, 0x5E75, 0x5E84, 0x5F02, 0x5F1A,
+ 0x5F74, 0x5FD5, 0x5FD4, 0x5FCF, 0x625C, 0x625E, 0x6264, 0x6261, 0x6266,
+ 0x6262, 0x6259, 0x6260, 0x625A, 0x6265, 0x6537, 0x65EF, 0x65EE, 0x673E,
+ 0x6739, 0x6738, 0x673B, 0x673A, 0x673F, 0x673C, 0x6733, 0x6C18, 0x6C46,
+ 0x6C52, 0x6C5C, 0x6C4F, 0x6C4A, 0x6C54, 0x6C4B, 0x6C4C, 0x7071, 0x725E,
+ 0x72B4, 0x72B5, 0x738E, 0x752A, 0x767F, 0x7A75, 0x7F51, 0x8278, 0x827C,
+ 0x8280, 0x827D, 0x827F, 0x864D, 0x897E, 0x9099, 0x9097, 0x9098, 0x909B,
+ 0x9094, 0x9622, 0x9624, 0x9620, 0x9623, 0x4F56, 0x4F3B, 0x4F62, 0x4F49,
+ 0x4F53, 0x4F64, 0x4F3E, 0x4F67, 0x4F52, 0x4F5F, 0x4F41, 0x4F58, 0x4F2D,
+ 0x4F33, 0x4F3F, 0x4F61, 0x518F, 0x51B9, 0x521C, 0x521E, 0x5221, 0x52AD,
+ 0x52AE, 0x5309, 0x5363, 0x5372, 0x538E, 0x538F, 0x5430, 0x5437, 0x542A,
+ 0x5454, 0x5445, 0x5419, 0x541C, 0x5425, 0x5418, 0x543D, 0x544F, 0x5441,
+ 0x5428, 0x5424, 0x5447, 0x56EE, 0x56E7, 0x56E5, 0x5741, 0x5745, 0x574C,
+ 0x5749, 0x574B, 0x5752, 0x5906, 0x5940, 0x59A6, 0x5998, 0x59A0, 0x5997,
+ 0x598E, 0x59A2, 0x5990, 0x598F, 0x59A7, 0x59A1, 0x5B8E, 0x5B92, 0x5C28,
+ 0x5C2A, 0x5C8D, 0x5C8F, 0x5C88, 0x5C8B, 0x5C89, 0x5C92, 0x5C8A, 0x5C86,
+ 0x5C93, 0x5C95, 0x5DE0, 0x5E0A, 0x5E0E, 0x5E8B, 0x5E89, 0x5E8C, 0x5E88,
+ 0x5E8D, 0x5F05, 0x5F1D, 0x5F78, 0x5F76, 0x5FD2, 0x5FD1, 0x5FD0, 0x5FED,
+ 0x5FE8, 0x5FEE, 0x5FF3, 0x5FE1, 0x5FE4, 0x5FE3, 0x5FFA, 0x5FEF, 0x5FF7,
+ 0x5FFB, 0x6000, 0x5FF4, 0x623A, 0x6283, 0x628C, 0x628E, 0x628F, 0x6294,
+ 0x6287, 0x6271, 0x627B, 0x627A, 0x6270, 0x6281, 0x6288, 0x6277, 0x627D,
+ 0x6272, 0x6274, 0x65F0, 0x65F4, 0x65F3, 0x65F2, 0x65F5, 0x6745, 0x6747,
+ 0x6759, 0x6755, 0x674C, 0x6748, 0x675D, 0x674D, 0x675A, 0x674B, 0x6BD0,
+ 0x6C19, 0x6C1A, 0x6C78, 0x6C67, 0x6C6B, 0x6C84, 0x6C8B, 0x6C8F, 0x6C71,
+ 0x6C6F, 0x6C69, 0x6C9A, 0x6C6D, 0x6C87, 0x6C95, 0x6C9C, 0x6C66, 0x6C73,
+ 0x6C65, 0x6C7B, 0x6C8E, 0x7074, 0x707A, 0x7263, 0x72BF, 0x72BD, 0x72C3,
+ 0x72C6, 0x72C1, 0x72BA, 0x72C5, 0x7395, 0x7397, 0x7393, 0x7394, 0x7392,
+ 0x753A, 0x7539, 0x7594, 0x7595, 0x7681, 0x793D, 0x8034, 0x8095, 0x8099,
+ 0x8090, 0x8092, 0x809C, 0x8290, 0x828F, 0x8285, 0x828E, 0x8291, 0x8293,
+ 0x828A, 0x8283, 0x8284, 0x8C78, 0x8FC9, 0x8FBF, 0x909F, 0x90A1, 0x90A5,
+ 0x909E, 0x90A7, 0x90A0, 0x9630, 0x9628, 0x962F, 0x962D, 0x4E33, 0x4F98,
+ 0x4F7C, 0x4F85, 0x4F7D, 0x4F80, 0x4F87, 0x4F76, 0x4F74, 0x4F89, 0x4F84,
+ 0x4F77, 0x4F4C, 0x4F97, 0x4F6A, 0x4F9A, 0x4F79, 0x4F81, 0x4F78, 0x4F90,
+ 0x4F9C, 0x4F94, 0x4F9E, 0x4F92, 0x4F82, 0x4F95, 0x4F6B, 0x4F6E, 0x519E,
+ 0x51BC, 0x51BE, 0x5235, 0x5232, 0x5233, 0x5246, 0x5231, 0x52BC, 0x530A,
+ 0x530B, 0x533C, 0x5392, 0x5394, 0x5487, 0x547F, 0x5481, 0x5491, 0x5482,
+ 0x5488, 0x546B, 0x547A, 0x547E, 0x5465, 0x546C, 0x5474, 0x5466, 0x548D,
+ 0x546F, 0x5461, 0x5460, 0x5498, 0x5463, 0x5467, 0x5464, 0x56F7, 0x56F9,
+ 0x576F, 0x5772, 0x576D, 0x576B, 0x5771, 0x5770, 0x5776, 0x5780, 0x5775,
+ 0x577B, 0x5773, 0x5774, 0x5762, 0x5768, 0x577D, 0x590C, 0x5945, 0x59B5,
+ 0x59BA, 0x59CF, 0x59CE, 0x59B2, 0x59CC, 0x59C1, 0x59B6, 0x59BC, 0x59C3,
+ 0x59D6, 0x59B1, 0x59BD, 0x59C0, 0x59C8, 0x59B4, 0x59C7, 0x5B62, 0x5B65,
+ 0x5B93, 0x5B95, 0x5C44, 0x5C47, 0x5CAE, 0x5CA4, 0x5CA0, 0x5CB5, 0x5CAF,
+ 0x5CA8, 0x5CAC, 0x5C9F, 0x5CA3, 0x5CAD, 0x5CA2, 0x5CAA, 0x5CA7, 0x5C9D,
+ 0x5CA5, 0x5CB6, 0x5CB0, 0x5CA6, 0x5E17, 0x5E14, 0x5E19, 0x5F28, 0x5F22,
+ 0x5F23, 0x5F24, 0x5F54, 0x5F82, 0x5F7E, 0x5F7D, 0x5FDE, 0x5FE5, 0x602D,
+ 0x6026, 0x6019, 0x6032, 0x600B, 0x6034, 0x600A, 0x6017, 0x6033, 0x601A,
+ 0x601E, 0x602C, 0x6022, 0x600D, 0x6010, 0x602E, 0x6013, 0x6011, 0x600C,
+ 0x6009, 0x601C, 0x6214, 0x623D, 0x62AD, 0x62B4, 0x62D1, 0x62BE, 0x62AA,
+ 0x62B6, 0x62CA, 0x62AE, 0x62B3, 0x62AF, 0x62BB, 0x62A9, 0x62B0, 0x62B8,
+ 0x653D, 0x65A8, 0x65BB, 0x6609, 0x65FC, 0x6604, 0x6612, 0x6608, 0x65FB,
+ 0x6603, 0x660B, 0x660D, 0x6605, 0x65FD, 0x6611, 0x6610, 0x66F6, 0x670A,
+ 0x6785, 0x676C, 0x678E, 0x6792, 0x6776, 0x677B, 0x6798, 0x6786, 0x6784,
+ 0x6774, 0x678D, 0x678C, 0x677A, 0x679F, 0x6791, 0x6799, 0x6783, 0x677D,
+ 0x6781, 0x6778, 0x6779, 0x6794, 0x6B25, 0x6B80, 0x6B7E, 0x6BDE, 0x6C1D,
+ 0x6C93, 0x6CEC, 0x6CEB, 0x6CEE, 0x6CD9, 0x6CB6, 0x6CD4, 0x6CAD, 0x6CE7,
+ 0x6CB7, 0x6CD0, 0x6CC2, 0x6CBA, 0x6CC3, 0x6CC6, 0x6CED, 0x6CF2, 0x6CD2,
+ 0x6CDD, 0x6CB4, 0x6C8A, 0x6C9D, 0x6C80, 0x6CDE, 0x6CC0, 0x6D30, 0x6CCD,
+ 0x6CC7, 0x6CB0, 0x6CF9, 0x6CCF, 0x6CE9, 0x6CD1, 0x7094, 0x7098, 0x7085,
+ 0x7093, 0x7086, 0x7084, 0x7091, 0x7096, 0x7082, 0x709A, 0x7083, 0x726A,
+ 0x72D6, 0x72CB, 0x72D8, 0x72C9, 0x72DC, 0x72D2, 0x72D4, 0x72DA, 0x72CC,
+ 0x72D1, 0x73A4, 0x73A1, 0x73AD, 0x73A6, 0x73A2, 0x73A0, 0x73AC, 0x739D,
+ 0x74DD, 0x74E8, 0x753F, 0x7540, 0x753E, 0x758C, 0x7598, 0x76AF, 0x76F3,
+ 0x76F1, 0x76F0, 0x76F5, 0x77F8, 0x77FC, 0x77F9, 0x77FB, 0x77FA, 0x77F7,
+ 0x7942, 0x793F, 0x79C5, 0x7A78, 0x7A7B, 0x7AFB, 0x7C75, 0x7CFD, 0x8035,
+ 0x808F, 0x80AE, 0x80A3, 0x80B8, 0x80B5, 0x80AD, 0x8220, 0x82A0, 0x82C0,
+ 0x82AB, 0x829A, 0x8298, 0x829B, 0x82B5, 0x82A7, 0x82AE, 0x82BC, 0x829E,
+ 0x82BA, 0x82B4, 0x82A8, 0x82A1, 0x82A9, 0x82C2, 0x82A4, 0x82C3, 0x82B6,
+ 0x82A2, 0x8670, 0x866F, 0x866D, 0x866E, 0x8C56, 0x8FD2, 0x8FCB, 0x8FD3,
+ 0x8FCD, 0x8FD6, 0x8FD5, 0x8FD7, 0x90B2, 0x90B4, 0x90AF, 0x90B3, 0x90B0,
+ 0x9639, 0x963D, 0x963C, 0x963A, 0x9643, 0x4FCD, 0x4FC5, 0x4FD3, 0x4FB2,
+ 0x4FC9, 0x4FCB, 0x4FC1, 0x4FD4, 0x4FDC, 0x4FD9, 0x4FBB, 0x4FB3, 0x4FDB,
+ 0x4FC7, 0x4FD6, 0x4FBA, 0x4FC0, 0x4FB9, 0x4FEC, 0x5244, 0x5249, 0x52C0,
+ 0x52C2, 0x533D, 0x537C, 0x5397, 0x5396, 0x5399, 0x5398, 0x54BA, 0x54A1,
+ 0x54AD, 0x54A5, 0x54CF, 0x54C3, 0x830D, 0x54B7, 0x54AE, 0x54D6, 0x54B6,
+ 0x54C5, 0x54C6, 0x54A0, 0x5470, 0x54BC, 0x54A2, 0x54BE, 0x5472, 0x54DE,
+ 0x54B0, 0x57B5, 0x579E, 0x579F, 0x57A4, 0x578C, 0x5797, 0x579D, 0x579B,
+ 0x5794, 0x5798, 0x578F, 0x5799, 0x57A5, 0x579A, 0x5795, 0x58F4, 0x590D,
+ 0x5953, 0x59E1, 0x59DE, 0x59EE, 0x5A00, 0x59F1, 0x59DD, 0x59FA, 0x59FD,
+ 0x59FC, 0x59F6, 0x59E4, 0x59F2, 0x59F7, 0x59DB, 0x59E9, 0x59F3, 0x59F5,
+ 0x59E0, 0x59FE, 0x59F4, 0x59ED, 0x5BA8, 0x5C4C, 0x5CD0, 0x5CD8, 0x5CCC,
+ 0x5CD7, 0x5CCB, 0x5CDB, 0x5CDE, 0x5CDA, 0x5CC9, 0x5CC7, 0x5CCA, 0x5CD6,
+ 0x5CD3, 0x5CD4, 0x5CCF, 0x5CC8, 0x5CC6, 0x5CCE, 0x5CDF, 0x5CF8, 0x5DF9,
+ 0x5E21, 0x5E22, 0x5E23, 0x5E20, 0x5E24, 0x5EB0, 0x5EA4, 0x5EA2, 0x5E9B,
+ 0x5EA3, 0x5EA5, 0x5F07, 0x5F2E, 0x5F56, 0x5F86, 0x6037, 0x6039, 0x6054,
+ 0x6072, 0x605E, 0x6045, 0x6053, 0x6047, 0x6049, 0x605B, 0x604C, 0x6040,
+ 0x6042, 0x605F, 0x6024, 0x6044, 0x6058, 0x6066, 0x606E, 0x6242, 0x6243,
+ 0x62CF, 0x630D, 0x630B, 0x62F5, 0x630E, 0x6303, 0x62EB, 0x62F9, 0x630F,
+ 0x630C, 0x62F8, 0x62F6, 0x6300, 0x6313, 0x6314, 0x62FA, 0x6315, 0x62FB,
+ 0x62F0, 0x6541, 0x6543, 0x65AA, 0x65BF, 0x6636, 0x6621, 0x6632, 0x6635,
+ 0x661C, 0x6626, 0x6622, 0x6633, 0x662B, 0x663A, 0x661D, 0x6634, 0x6639,
+ 0x662E, 0x670F, 0x6710, 0x67C1, 0x67F2, 0x67C8, 0x67BA, 0x67DC, 0x67BB,
+ 0x67F8, 0x67D8, 0x67C0, 0x67B7, 0x67C5, 0x67EB, 0x67E4, 0x67DF, 0x67B5,
+ 0x67CD, 0x67B3, 0x67F7, 0x67F6, 0x67EE, 0x67E3, 0x67C2, 0x67B9, 0x67CE,
+ 0x67E7, 0x67F0, 0x67B2, 0x67FC, 0x67C6, 0x67ED, 0x67CC, 0x67AE, 0x67E6,
+ 0x67DB, 0x67FA, 0x67C9, 0x67CA, 0x67C3, 0x67EA, 0x67CB, 0x6B28, 0x6B82,
+ 0x6B84, 0x6BB6, 0x6BD6, 0x6BD8, 0x6BE0, 0x6C20, 0x6C21, 0x6D28, 0x6D34,
+ 0x6D2D, 0x6D1F, 0x6D3C, 0x6D3F, 0x6D12, 0x6D0A, 0x6CDA, 0x6D33, 0x6D04,
+ 0x6D19, 0x6D3A, 0x6D1A, 0x6D11, 0x6D00, 0x6D1D, 0x6D42, 0x6D01, 0x6D18,
+ 0x6D37, 0x6D03, 0x6D0F, 0x6D40, 0x6D07, 0x6D20, 0x6D2C, 0x6D08, 0x6D22,
+ 0x6D09, 0x6D10, 0x70B7, 0x709F, 0x70BE, 0x70B1, 0x70B0, 0x70A1, 0x70B4,
+ 0x70B5, 0x70A9, 0x7241, 0x7249, 0x724A, 0x726C, 0x7270, 0x7273, 0x726E,
+ 0x72CA, 0x72E4, 0x72E8, 0x72EB, 0x72DF, 0x72EA, 0x72E6, 0x72E3, 0x7385,
+ 0x73CC, 0x73C2, 0x73C8, 0x73C5, 0x73B9, 0x73B6, 0x73B5, 0x73B4, 0x73EB,
+ 0x73BF, 0x73C7, 0x73BE, 0x73C3, 0x73C6, 0x73B8, 0x73CB, 0x74EC, 0x74EE,
+ 0x752E, 0x7547, 0x7548, 0x75A7, 0x75AA, 0x7679, 0x76C4, 0x7708, 0x7703,
+ 0x7704, 0x7705, 0x770A, 0x76F7, 0x76FB, 0x76FA, 0x77E7, 0x77E8, 0x7806,
+ 0x7811, 0x7812, 0x7805, 0x7810, 0x780F, 0x780E, 0x7809, 0x7803, 0x7813,
+ 0x794A, 0x794C, 0x794B, 0x7945, 0x7944, 0x79D5, 0x79CD, 0x79CF, 0x79D6,
+ 0x79CE, 0x7A80, 0x7A7E, 0x7AD1, 0x7B00, 0x7B01, 0x7C7A, 0x7C78, 0x7C79,
+ 0x7C7F, 0x7C80, 0x7C81, 0x7D03, 0x7D08, 0x7D01, 0x7F58, 0x7F91, 0x7F8D,
+ 0x7FBE, 0x8007, 0x800E, 0x800F, 0x8014, 0x8037, 0x80D8, 0x80C7, 0x80E0,
+ 0x80D1, 0x80C8, 0x80C2, 0x80D0, 0x80C5, 0x80E3, 0x80D9, 0x80DC, 0x80CA,
+ 0x80D5, 0x80C9, 0x80CF, 0x80D7, 0x80E6, 0x80CD, 0x81FF, 0x8221, 0x8294,
+ 0x82D9, 0x82FE, 0x82F9, 0x8307, 0x82E8, 0x8300, 0x82D5, 0x833A, 0x82EB,
+ 0x82D6, 0x82F4, 0x82EC, 0x82E1, 0x82F2, 0x82F5, 0x830C, 0x82FB, 0x82F6,
+ 0x82F0, 0x82EA, 0x82E4, 0x82E0, 0x82FA, 0x82F3, 0x82ED, 0x8677, 0x8674,
+ 0x867C, 0x8673, 0x8841, 0x884E, 0x8867, 0x886A, 0x8869, 0x89D3, 0x8A04,
+ 0x8A07, 0x8D72, 0x8FE3, 0x8FE1, 0x8FEE, 0x8FE0, 0x90F1, 0x90BD, 0x90BF,
+ 0x90D5, 0x90C5, 0x90BE, 0x90C7, 0x90CB, 0x90C8, 0x91D4, 0x91D3, 0x9654,
+ 0x964F, 0x9651, 0x9653, 0x964A, 0x964E, 0x501E, 0x5005, 0x5007, 0x5013,
+ 0x5022, 0x5030, 0x501B, 0x4FF5, 0x4FF4, 0x5033, 0x5037, 0x502C, 0x4FF6,
+ 0x4FF7, 0x5017, 0x501C, 0x5020, 0x5027, 0x5035, 0x502F, 0x5031, 0x500E,
+ 0x515A, 0x5194, 0x5193, 0x51CA, 0x51C4, 0x51C5, 0x51C8, 0x51CE, 0x5261,
+ 0x525A, 0x5252, 0x525E, 0x525F, 0x5255, 0x5262, 0x52CD, 0x530E, 0x539E,
+ 0x5526, 0x54E2, 0x5517, 0x5512, 0x54E7, 0x54F3, 0x54E4, 0x551A, 0x54FF,
+ 0x5504, 0x5508, 0x54EB, 0x5511, 0x5505, 0x54F1, 0x550A, 0x54FB, 0x54F7,
+ 0x54F8, 0x54E0, 0x550E, 0x5503, 0x550B, 0x5701, 0x5702, 0x57CC, 0x5832,
+ 0x57D5, 0x57D2, 0x57BA, 0x57C6, 0x57BD, 0x57BC, 0x57B8, 0x57B6, 0x57BF,
+ 0x57C7, 0x57D0, 0x57B9, 0x57C1, 0x590E, 0x594A, 0x5A19, 0x5A16, 0x5A2D,
+ 0x5A2E, 0x5A15, 0x5A0F, 0x5A17, 0x5A0A, 0x5A1E, 0x5A33, 0x5B6C, 0x5BA7,
+ 0x5BAD, 0x5BAC, 0x5C03, 0x5C56, 0x5C54, 0x5CEC, 0x5CFF, 0x5CEE, 0x5CF1,
+ 0x5CF7, 0x5D00, 0x5CF9, 0x5E29, 0x5E28, 0x5EA8, 0x5EAE, 0x5EAA, 0x5EAC,
+ 0x5F33, 0x5F30, 0x5F67, 0x605D, 0x605A, 0x6067, 0x6041, 0x60A2, 0x6088,
+ 0x6080, 0x6092, 0x6081, 0x609D, 0x6083, 0x6095, 0x609B, 0x6097, 0x6087,
+ 0x609C, 0x608E, 0x6219, 0x6246, 0x62F2, 0x6310, 0x6356, 0x632C, 0x6344,
+ 0x6345, 0x6336, 0x6343, 0x63E4, 0x6339, 0x634B, 0x634A, 0x633C, 0x6329,
+ 0x6341, 0x6334, 0x6358, 0x6354, 0x6359, 0x632D, 0x6347, 0x6333, 0x635A,
+ 0x6351, 0x6338, 0x6357, 0x6340, 0x6348, 0x654A, 0x6546, 0x65C6, 0x65C3,
+ 0x65C4, 0x65C2, 0x664A, 0x665F, 0x6647, 0x6651, 0x6712, 0x6713, 0x681F,
+ 0x681A, 0x6849, 0x6832, 0x6833, 0x683B, 0x684B, 0x684F, 0x6816, 0x6831,
+ 0x681C, 0x6835, 0x682B, 0x682D, 0x682F, 0x684E, 0x6844, 0x6834, 0x681D,
+ 0x6812, 0x6814, 0x6826, 0x6828, 0x682E, 0x684D, 0x683A, 0x6825, 0x6820,
+ 0x6B2C, 0x6B2F, 0x6B2D, 0x6B31, 0x6B34, 0x6B6D, 0x8082, 0x6B88, 0x6BE6,
+ 0x6BE4, 0x6BE8, 0x6BE3, 0x6BE2, 0x6BE7, 0x6C25, 0x6D7A, 0x6D63, 0x6D64,
+ 0x6D76, 0x6D0D, 0x6D61, 0x6D92, 0x6D58, 0x6D62, 0x6D6D, 0x6D6F, 0x6D91,
+ 0x6D8D, 0x6DEF, 0x6D7F, 0x6D86, 0x6D5E, 0x6D67, 0x6D60, 0x6D97, 0x6D70,
+ 0x6D7C, 0x6D5F, 0x6D82, 0x6D98, 0x6D2F, 0x6D68, 0x6D8B, 0x6D7E, 0x6D80,
+ 0x6D84, 0x6D16, 0x6D83, 0x6D7B, 0x6D7D, 0x6D75, 0x6D90, 0x70DC, 0x70D3,
+ 0x70D1, 0x70DD, 0x70CB, 0x7F39, 0x70E2, 0x70D7, 0x70D2, 0x70DE, 0x70E0,
+ 0x70D4, 0x70CD, 0x70C5, 0x70C6, 0x70C7, 0x70DA, 0x70CE, 0x70E1, 0x7242,
+ 0x7278, 0x7277, 0x7276, 0x7300, 0x72FA, 0x72F4, 0x72FE, 0x72F6, 0x72F3,
+ 0x72FB, 0x7301, 0x73D3, 0x73D9, 0x73E5, 0x73D6, 0x73BC, 0x73E7, 0x73E3,
+ 0x73E9, 0x73DC, 0x73D2, 0x73DB, 0x73D4, 0x73DD, 0x73DA, 0x73D7, 0x73D8,
+ 0x73E8, 0x74DE, 0x74DF, 0x74F4, 0x74F5, 0x7521, 0x755B, 0x755F, 0x75B0,
+ 0x75C1, 0x75BB, 0x75C4, 0x75C0, 0x75BF, 0x75B6, 0x75BA, 0x768A, 0x76C9,
+ 0x771D, 0x771B, 0x7710, 0x7713, 0x7712, 0x7723, 0x7711, 0x7715, 0x7719,
+ 0x771A, 0x7722, 0x7727, 0x7823, 0x782C, 0x7822, 0x7835, 0x782F, 0x7828,
+ 0x782E, 0x782B, 0x7821, 0x7829, 0x7833, 0x782A, 0x7831, 0x7954, 0x795B,
+ 0x794F, 0x795C, 0x7953, 0x7952, 0x7951, 0x79EB, 0x79EC, 0x79E0, 0x79EE,
+ 0x79ED, 0x79EA, 0x79DC, 0x79DE, 0x79DD, 0x7A86, 0x7A89, 0x7A85, 0x7A8B,
+ 0x7A8C, 0x7A8A, 0x7A87, 0x7AD8, 0x7B10, 0x7B04, 0x7B13, 0x7B05, 0x7B0F,
+ 0x7B08, 0x7B0A, 0x7B0E, 0x7B09, 0x7B12, 0x7C84, 0x7C91, 0x7C8A, 0x7C8C,
+ 0x7C88, 0x7C8D, 0x7C85, 0x7D1E, 0x7D1D, 0x7D11, 0x7D0E, 0x7D18, 0x7D16,
+ 0x7D13, 0x7D1F, 0x7D12, 0x7D0F, 0x7D0C, 0x7F5C, 0x7F61, 0x7F5E, 0x7F60,
+ 0x7F5D, 0x7F5B, 0x7F96, 0x7F92, 0x7FC3, 0x7FC2, 0x7FC0, 0x8016, 0x803E,
+ 0x8039, 0x80FA, 0x80F2, 0x80F9, 0x80F5, 0x8101, 0x80FB, 0x8100, 0x8201,
+ 0x822F, 0x8225, 0x8333, 0x832D, 0x8344, 0x8319, 0x8351, 0x8325, 0x8356,
+ 0x833F, 0x8341, 0x8326, 0x831C, 0x8322, 0x8342, 0x834E, 0x831B, 0x832A,
+ 0x8308, 0x833C, 0x834D, 0x8316, 0x8324, 0x8320, 0x8337, 0x832F, 0x8329,
+ 0x8347, 0x8345, 0x834C, 0x8353, 0x831E, 0x832C, 0x834B, 0x8327, 0x8348,
+ 0x8653, 0x8652, 0x86A2, 0x86A8, 0x8696, 0x868D, 0x8691, 0x869E, 0x8687,
+ 0x8697, 0x8686, 0x868B, 0x869A, 0x8685, 0x86A5, 0x8699, 0x86A1, 0x86A7,
+ 0x8695, 0x8698, 0x868E, 0x869D, 0x8690, 0x8694, 0x8843, 0x8844, 0x886D,
+ 0x8875, 0x8876, 0x8872, 0x8880, 0x8871, 0x887F, 0x886F, 0x8883, 0x887E,
+ 0x8874, 0x887C, 0x8A12, 0x8C47, 0x8C57, 0x8C7B, 0x8CA4, 0x8CA3, 0x8D76,
+ 0x8D78, 0x8DB5, 0x8DB7, 0x8DB6, 0x8ED1, 0x8ED3, 0x8FFE, 0x8FF5, 0x9002,
+ 0x8FFF, 0x8FFB, 0x9004, 0x8FFC, 0x8FF6, 0x90D6, 0x90E0, 0x90D9, 0x90DA,
+ 0x90E3, 0x90DF, 0x90E5, 0x90D8, 0x90DB, 0x90D7, 0x90DC, 0x90E4, 0x9150,
+ 0x914E, 0x914F, 0x91D5, 0x91E2, 0x91DA, 0x965C, 0x965F, 0x96BC, 0x98E3,
+ 0x9ADF, 0x9B2F, 0x4E7F, 0x5070, 0x506A, 0x5061, 0x505E, 0x5060, 0x5053,
+ 0x504B, 0x505D, 0x5072, 0x5048, 0x504D, 0x5041, 0x505B, 0x504A, 0x5062,
+ 0x5015, 0x5045, 0x505F, 0x5069, 0x506B, 0x5063, 0x5064, 0x5046, 0x5040,
+ 0x506E, 0x5073, 0x5057, 0x5051, 0x51D0, 0x526B, 0x526D, 0x526C, 0x526E,
+ 0x52D6, 0x52D3, 0x532D, 0x539C, 0x5575, 0x5576, 0x553C, 0x554D, 0x5550,
+ 0x5534, 0x552A, 0x5551, 0x5562, 0x5536, 0x5535, 0x5530, 0x5552, 0x5545,
+ 0x550C, 0x5532, 0x5565, 0x554E, 0x5539, 0x5548, 0x552D, 0x553B, 0x5540,
+ 0x554B, 0x570A, 0x5707, 0x57FB, 0x5814, 0x57E2, 0x57F6, 0x57DC, 0x57F4,
+ 0x5800, 0x57ED, 0x57FD, 0x5808, 0x57F8, 0x580B, 0x57F3, 0x57CF, 0x5807,
+ 0x57EE, 0x57E3, 0x57F2, 0x57E5, 0x57EC, 0x57E1, 0x580E, 0x57FC, 0x5810,
+ 0x57E7, 0x5801, 0x580C, 0x57F1, 0x57E9, 0x57F0, 0x580D, 0x5804, 0x595C,
+ 0x5A60, 0x5A58, 0x5A55, 0x5A67, 0x5A5E, 0x5A38, 0x5A35, 0x5A6D, 0x5A50,
+ 0x5A5F, 0x5A65, 0x5A6C, 0x5A53, 0x5A64, 0x5A57, 0x5A43, 0x5A5D, 0x5A52,
+ 0x5A44, 0x5A5B, 0x5A48, 0x5A8E, 0x5A3E, 0x5A4D, 0x5A39, 0x5A4C, 0x5A70,
+ 0x5A69, 0x5A47, 0x5A51, 0x5A56, 0x5A42, 0x5A5C, 0x5B72, 0x5B6E, 0x5BC1,
+ 0x5BC0, 0x5C59, 0x5D1E, 0x5D0B, 0x5D1D, 0x5D1A, 0x5D20, 0x5D0C, 0x5D28,
+ 0x5D0D, 0x5D26, 0x5D25, 0x5D0F, 0x5D30, 0x5D12, 0x5D23, 0x5D1F, 0x5D2E,
+ 0x5E3E, 0x5E34, 0x5EB1, 0x5EB4, 0x5EB9, 0x5EB2, 0x5EB3, 0x5F36, 0x5F38,
+ 0x5F9B, 0x5F96, 0x5F9F, 0x608A, 0x6090, 0x6086, 0x60BE, 0x60B0, 0x60BA,
+ 0x60D3, 0x60D4, 0x60CF, 0x60E4, 0x60D9, 0x60DD, 0x60C8, 0x60B1, 0x60DB,
+ 0x60B7, 0x60CA, 0x60BF, 0x60C3, 0x60CD, 0x60C0, 0x6332, 0x6365, 0x638A,
+ 0x6382, 0x637D, 0x63BD, 0x639E, 0x63AD, 0x639D, 0x6397, 0x63AB, 0x638E,
+ 0x636F, 0x6387, 0x6390, 0x636E, 0x63AF, 0x6375, 0x639C, 0x636D, 0x63AE,
+ 0x637C, 0x63A4, 0x633B, 0x639F, 0x6378, 0x6385, 0x6381, 0x6391, 0x638D,
+ 0x6370, 0x6553, 0x65CD, 0x6665, 0x6661, 0x665B, 0x6659, 0x665C, 0x6662,
+ 0x6718, 0x6879, 0x6887, 0x6890, 0x689C, 0x686D, 0x686E, 0x68AE, 0x68AB,
+ 0x6956, 0x686F, 0x68A3, 0x68AC, 0x68A9, 0x6875, 0x6874, 0x68B2, 0x688F,
+ 0x6877, 0x6892, 0x687C, 0x686B, 0x6872, 0x68AA, 0x6880, 0x6871, 0x687E,
+ 0x689B, 0x6896, 0x688B, 0x68A0, 0x6889, 0x68A4, 0x6878, 0x687B, 0x6891,
+ 0x688C, 0x688A, 0x687D, 0x6B36, 0x6B33, 0x6B37, 0x6B38, 0x6B91, 0x6B8F,
+ 0x6B8D, 0x6B8E, 0x6B8C, 0x6C2A, 0x6DC0, 0x6DAB, 0x6DB4, 0x6DB3, 0x6E74,
+ 0x6DAC, 0x6DE9, 0x6DE2, 0x6DB7, 0x6DF6, 0x6DD4, 0x6E00, 0x6DC8, 0x6DE0,
+ 0x6DDF, 0x6DD6, 0x6DBE, 0x6DE5, 0x6DDC, 0x6DDD, 0x6DDB, 0x6DF4, 0x6DCA,
+ 0x6DBD, 0x6DED, 0x6DF0, 0x6DBA, 0x6DD5, 0x6DC2, 0x6DCF, 0x6DC9, 0x6DD0,
+ 0x6DF2, 0x6DD3, 0x6DFD, 0x6DD7, 0x6DCD, 0x6DE3, 0x6DBB, 0x70FA, 0x710D,
+ 0x70F7, 0x7117, 0x70F4, 0x710C, 0x70F0, 0x7104, 0x70F3, 0x7110, 0x70FC,
+ 0x70FF, 0x7106, 0x7113, 0x7100, 0x70F8, 0x70F6, 0x710B, 0x7102, 0x710E,
+ 0x727E, 0x727B, 0x727C, 0x727F, 0x731D, 0x7317, 0x7307, 0x7311, 0x7318,
+ 0x730A, 0x7308, 0x72FF, 0x730F, 0x731E, 0x7388, 0x73F6, 0x73F8, 0x73F5,
+ 0x7404, 0x7401, 0x73FD, 0x7407, 0x7400, 0x73FA, 0x73FC, 0x73FF, 0x740C,
+ 0x740B, 0x73F4, 0x7408, 0x7564, 0x7563, 0x75CE, 0x75D2, 0x75CF, 0x75CB,
+ 0x75CC, 0x75D1, 0x75D0, 0x768F, 0x7689, 0x76D3, 0x7739, 0x772F, 0x772D,
+ 0x7731, 0x7732, 0x7734, 0x7733, 0x773D, 0x7725, 0x773B, 0x7735, 0x7848,
+ 0x7852, 0x7849, 0x784D, 0x784A, 0x784C, 0x7826, 0x7845, 0x7850, 0x7964,
+ 0x7967, 0x7969, 0x796A, 0x7963, 0x796B, 0x7961, 0x79BB, 0x79FA, 0x79F8,
+ 0x79F6, 0x79F7, 0x7A8F, 0x7A94, 0x7A90, 0x7B35, 0x7B3B, 0x7B34, 0x7B25,
+ 0x7B30, 0x7B22, 0x7B24, 0x7B33, 0x7B18, 0x7B2A, 0x7B1D, 0x7B31, 0x7B2B,
+ 0x7B2D, 0x7B2F, 0x7B32, 0x7B38, 0x7B1A, 0x7B23, 0x7C94, 0x7C98, 0x7C96,
+ 0x7CA3, 0x7D35, 0x7D3D, 0x7D38, 0x7D36, 0x7D3A, 0x7D45, 0x7D2C, 0x7D29,
+ 0x7D41, 0x7D47, 0x7D3E, 0x7D3F, 0x7D4A, 0x7D3B, 0x7D28, 0x7F63, 0x7F95,
+ 0x7F9C, 0x7F9D, 0x7F9B, 0x7FCA, 0x7FCB, 0x7FCD, 0x7FD0, 0x7FD1, 0x7FC7,
+ 0x7FCF, 0x7FC9, 0x801F, 0x801E, 0x801B, 0x8047, 0x8043, 0x8048, 0x8118,
+ 0x8125, 0x8119, 0x811B, 0x812D, 0x811F, 0x812C, 0x811E, 0x8121, 0x8115,
+ 0x8127, 0x811D, 0x8122, 0x8211, 0x8238, 0x8233, 0x823A, 0x8234, 0x8232,
+ 0x8274, 0x8390, 0x83A3, 0x83A8, 0x838D, 0x837A, 0x8373, 0x83A4, 0x8374,
+ 0x838F, 0x8381, 0x8395, 0x8399, 0x8375, 0x8394, 0x83A9, 0x837D, 0x8383,
+ 0x838C, 0x839D, 0x839B, 0x83AA, 0x838B, 0x837E, 0x83A5, 0x83AF, 0x8388,
+ 0x8397, 0x83B0, 0x837F, 0x83A6, 0x8387, 0x83AE, 0x8376, 0x8659, 0x8656,
+ 0x86BF, 0x86B7, 0x86C2, 0x86C1, 0x86C5, 0x86BA, 0x86B0, 0x86C8, 0x86B9,
+ 0x86B3, 0x86B8, 0x86CC, 0x86B4, 0x86BB, 0x86BC, 0x86C3, 0x86BD, 0x86BE,
+ 0x8852, 0x8889, 0x8895, 0x88A8, 0x88A2, 0x88AA, 0x889A, 0x8891, 0x88A1,
+ 0x889F, 0x8898, 0x88A7, 0x8899, 0x889B, 0x8897, 0x88A4, 0x88AC, 0x888C,
+ 0x8893, 0x888E, 0x8982, 0x89D6, 0x89D9, 0x89D5, 0x8A30, 0x8A27, 0x8A2C,
+ 0x8A1E, 0x8C39, 0x8C3B, 0x8C5C, 0x8C5D, 0x8C7D, 0x8CA5, 0x8D7D, 0x8D7B,
+ 0x8D79, 0x8DBC, 0x8DC2, 0x8DB9, 0x8DBF, 0x8DC1, 0x8ED8, 0x8EDE, 0x8EDD,
+ 0x8EDC, 0x8ED7, 0x8EE0, 0x8EE1, 0x9024, 0x900B, 0x9011, 0x901C, 0x900C,
+ 0x9021, 0x90EF, 0x90EA, 0x90F0, 0x90F4, 0x90F2, 0x90F3, 0x90D4, 0x90EB,
+ 0x90EC, 0x90E9, 0x9156, 0x9158, 0x915A, 0x9153, 0x9155, 0x91EC, 0x91F4,
+ 0x91F1, 0x91F3, 0x91F8, 0x91E4, 0x91F9, 0x91EA, 0x91EB, 0x91F7, 0x91E8,
+ 0x91EE, 0x957A, 0x9586, 0x9588, 0x967C, 0x966D, 0x966B, 0x9671, 0x966F,
+ 0x96BF, 0x976A, 0x9804, 0x98E5, 0x9997, 0x509B, 0x5095, 0x5094, 0x509E,
+ 0x508B, 0x50A3, 0x5083, 0x508C, 0x508E, 0x509D, 0x5068, 0x509C, 0x5092,
+ 0x5082, 0x5087, 0x515F, 0x51D4, 0x5312, 0x5311, 0x53A4, 0x53A7, 0x5591,
+ 0x55A8, 0x55A5, 0x55AD, 0x5577, 0x5645, 0x55A2, 0x5593, 0x5588, 0x558F,
+ 0x55B5, 0x5581, 0x55A3, 0x5592, 0x55A4, 0x557D, 0x558C, 0x55A6, 0x557F,
+ 0x5595, 0x55A1, 0x558E, 0x570C, 0x5829, 0x5837, 0x5819, 0x581E, 0x5827,
+ 0x5823, 0x5828, 0x57F5, 0x5848, 0x5825, 0x581C, 0x581B, 0x5833, 0x583F,
+ 0x5836, 0x582E, 0x5839, 0x5838, 0x582D, 0x582C, 0x583B, 0x5961, 0x5AAF,
+ 0x5A94, 0x5A9F, 0x5A7A, 0x5AA2, 0x5A9E, 0x5A78, 0x5AA6, 0x5A7C, 0x5AA5,
+ 0x5AAC, 0x5A95, 0x5AAE, 0x5A37, 0x5A84, 0x5A8A, 0x5A97, 0x5A83, 0x5A8B,
+ 0x5AA9, 0x5A7B, 0x5A7D, 0x5A8C, 0x5A9C, 0x5A8F, 0x5A93, 0x5A9D, 0x5BEA,
+ 0x5BCD, 0x5BCB, 0x5BD4, 0x5BD1, 0x5BCA, 0x5BCE, 0x5C0C, 0x5C30, 0x5D37,
+ 0x5D43, 0x5D6B, 0x5D41, 0x5D4B, 0x5D3F, 0x5D35, 0x5D51, 0x5D4E, 0x5D55,
+ 0x5D33, 0x5D3A, 0x5D52, 0x5D3D, 0x5D31, 0x5D59, 0x5D42, 0x5D39, 0x5D49,
+ 0x5D38, 0x5D3C, 0x5D32, 0x5D36, 0x5D40, 0x5D45, 0x5E44, 0x5E41, 0x5F58,
+ 0x5FA6, 0x5FA5, 0x5FAB, 0x60C9, 0x60B9, 0x60CC, 0x60E2, 0x60CE, 0x60C4,
+ 0x6114, 0x60F2, 0x610A, 0x6116, 0x6105, 0x60F5, 0x6113, 0x60F8, 0x60FC,
+ 0x60FE, 0x60C1, 0x6103, 0x6118, 0x611D, 0x6110, 0x60FF, 0x6104, 0x610B,
+ 0x624A, 0x6394, 0x63B1, 0x63B0, 0x63CE, 0x63E5, 0x63E8, 0x63EF, 0x63C3,
+ 0x649D, 0x63F3, 0x63CA, 0x63E0, 0x63F6, 0x63D5, 0x63F2, 0x63F5, 0x6461,
+ 0x63DF, 0x63BE, 0x63DD, 0x63DC, 0x63C4, 0x63D8, 0x63D3, 0x63C2, 0x63C7,
+ 0x63CC, 0x63CB, 0x63C8, 0x63F0, 0x63D7, 0x63D9, 0x6532, 0x6567, 0x656A,
+ 0x6564, 0x655C, 0x6568, 0x6565, 0x658C, 0x659D, 0x659E, 0x65AE, 0x65D0,
+ 0x65D2, 0x667C, 0x666C, 0x667B, 0x6680, 0x6671, 0x6679, 0x666A, 0x6672,
+ 0x6701, 0x690C, 0x68D3, 0x6904, 0x68DC, 0x692A, 0x68EC, 0x68EA, 0x68F1,
+ 0x690F, 0x68D6, 0x68F7, 0x68EB, 0x68E4, 0x68F6, 0x6913, 0x6910, 0x68F3,
+ 0x68E1, 0x6907, 0x68CC, 0x6908, 0x6970, 0x68B4, 0x6911, 0x68EF, 0x68C6,
+ 0x6914, 0x68F8, 0x68D0, 0x68FD, 0x68FC, 0x68E8, 0x690B, 0x690A, 0x6917,
+ 0x68CE, 0x68C8, 0x68DD, 0x68DE, 0x68E6, 0x68F4, 0x68D1, 0x6906, 0x68D4,
+ 0x68E9, 0x6915, 0x6925, 0x68C7, 0x6B39, 0x6B3B, 0x6B3F, 0x6B3C, 0x6B94,
+ 0x6B97, 0x6B99, 0x6B95, 0x6BBD, 0x6BF0, 0x6BF2, 0x6BF3, 0x6C30, 0x6DFC,
+ 0x6E46, 0x6E47, 0x6E1F, 0x6E49, 0x6E88, 0x6E3C, 0x6E3D, 0x6E45, 0x6E62,
+ 0x6E2B, 0x6E3F, 0x6E41, 0x6E5D, 0x6E73, 0x6E1C, 0x6E33, 0x6E4B, 0x6E40,
+ 0x6E51, 0x6E3B, 0x6E03, 0x6E2E, 0x6E5E, 0x6E68, 0x6E5C, 0x6E61, 0x6E31,
+ 0x6E28, 0x6E60, 0x6E71, 0x6E6B, 0x6E39, 0x6E22, 0x6E30, 0x6E53, 0x6E65,
+ 0x6E27, 0x6E78, 0x6E64, 0x6E77, 0x6E55, 0x6E79, 0x6E52, 0x6E66, 0x6E35,
+ 0x6E36, 0x6E5A, 0x7120, 0x711E, 0x712F, 0x70FB, 0x712E, 0x7131, 0x7123,
+ 0x7125, 0x7122, 0x7132, 0x711F, 0x7128, 0x713A, 0x711B, 0x724B, 0x725A,
+ 0x7288, 0x7289, 0x7286, 0x7285, 0x728B, 0x7312, 0x730B, 0x7330, 0x7322,
+ 0x7331, 0x7333, 0x7327, 0x7332, 0x732D, 0x7326, 0x7323, 0x7335, 0x730C,
+ 0x742E, 0x742C, 0x7430, 0x742B, 0x7416, 0x741A, 0x7421, 0x742D, 0x7431,
+ 0x7424, 0x7423, 0x741D, 0x7429, 0x7420, 0x7432, 0x74FB, 0x752F, 0x756F,
+ 0x756C, 0x75E7, 0x75DA, 0x75E1, 0x75E6, 0x75DD, 0x75DF, 0x75E4, 0x75D7,
+ 0x7695, 0x7692, 0x76DA, 0x7746, 0x7747, 0x7744, 0x774D, 0x7745, 0x774A,
+ 0x774E, 0x774B, 0x774C, 0x77DE, 0x77EC, 0x7860, 0x7864, 0x7865, 0x785C,
+ 0x786D, 0x7871, 0x786A, 0x786E, 0x7870, 0x7869, 0x7868, 0x785E, 0x7862,
+ 0x7974, 0x7973, 0x7972, 0x7970, 0x7A02, 0x7A0A, 0x7A03, 0x7A0C, 0x7A04,
+ 0x7A99, 0x7AE6, 0x7AE4, 0x7B4A, 0x7B47, 0x7B44, 0x7B48, 0x7B4C, 0x7B4E,
+ 0x7B40, 0x7B58, 0x7B45, 0x7CA2, 0x7C9E, 0x7CA8, 0x7CA1, 0x7D58, 0x7D6F,
+ 0x7D63, 0x7D53, 0x7D56, 0x7D67, 0x7D6A, 0x7D4F, 0x7D6D, 0x7D5C, 0x7D6B,
+ 0x7D52, 0x7D54, 0x7D69, 0x7D51, 0x7D5F, 0x7D4E, 0x7F3E, 0x7F3F, 0x7F65,
+ 0x7F66, 0x7FA2, 0x7FA0, 0x7FA1, 0x7FD7, 0x8051, 0x804F, 0x8050, 0x80FE,
+ 0x80D4, 0x8143, 0x814A, 0x8152, 0x814F, 0x8147, 0x813D, 0x814D, 0x813A,
+ 0x81E6, 0x81EE, 0x81F7, 0x81F8, 0x81F9, 0x8204, 0x823C, 0x823D, 0x823F,
+ 0x8275, 0x833B, 0x83CF, 0x83F9, 0x8423, 0x83C0, 0x83E8, 0x8412, 0x83E7,
+ 0x83E4, 0x83FC, 0x83F6, 0x8410, 0x83C6, 0x83C8, 0x83EB, 0x83E3, 0x83BF,
+ 0x8401, 0x83DD, 0x83E5, 0x83D8, 0x83FF, 0x83E1, 0x83CB, 0x83CE, 0x83D6,
+ 0x83F5, 0x83C9, 0x8409, 0x840F, 0x83DE, 0x8411, 0x8406, 0x83C2, 0x83F3,
+ 0x83D5, 0x83FA, 0x83C7, 0x83D1, 0x83EA, 0x8413, 0x839A, 0x83C3, 0x83EC,
+ 0x83EE, 0x83C4, 0x83FB, 0x83D7, 0x83E2, 0x841B, 0x83DB, 0x83FE, 0x86D8,
+ 0x86E2, 0x86E6, 0x86D3, 0x86E3, 0x86DA, 0x86EA, 0x86DD, 0x86EB, 0x86DC,
+ 0x86EC, 0x86E9, 0x86D7, 0x86E8, 0x86D1, 0x8848, 0x8856, 0x8855, 0x88BA,
+ 0x88D7, 0x88B9, 0x88B8, 0x88C0, 0x88BE, 0x88B6, 0x88BC, 0x88B7, 0x88BD,
+ 0x88B2, 0x8901, 0x88C9, 0x8995, 0x8998, 0x8997, 0x89DD, 0x89DA, 0x89DB,
+ 0x8A4E, 0x8A4D, 0x8A39, 0x8A59, 0x8A40, 0x8A57, 0x8A58, 0x8A44, 0x8A45,
+ 0x8A52, 0x8A48, 0x8A51, 0x8A4A, 0x8A4C, 0x8A4F, 0x8C5F, 0x8C81, 0x8C80,
+ 0x8CBA, 0x8CBE, 0x8CB0, 0x8CB9, 0x8CB5, 0x8D84, 0x8D80, 0x8D89, 0x8DD8,
+ 0x8DD3, 0x8DCD, 0x8DC7, 0x8DD6, 0x8DDC, 0x8DCF, 0x8DD5, 0x8DD9, 0x8DC8,
+ 0x8DD7, 0x8DC5, 0x8EEF, 0x8EF7, 0x8EFA, 0x8EF9, 0x8EE6, 0x8EEE, 0x8EE5,
+ 0x8EF5, 0x8EE7, 0x8EE8, 0x8EF6, 0x8EEB, 0x8EF1, 0x8EEC, 0x8EF4, 0x8EE9,
+ 0x902D, 0x9034, 0x902F, 0x9106, 0x912C, 0x9104, 0x90FF, 0x90FC, 0x9108,
+ 0x90F9, 0x90FB, 0x9101, 0x9100, 0x9107, 0x9105, 0x9103, 0x9161, 0x9164,
+ 0x915F, 0x9162, 0x9160, 0x9201, 0x920A, 0x9225, 0x9203, 0x921A, 0x9226,
+ 0x920F, 0x920C, 0x9200, 0x9212, 0x91FF, 0x91FD, 0x9206, 0x9204, 0x9227,
+ 0x9202, 0x921C, 0x9224, 0x9219, 0x9217, 0x9205, 0x9216, 0x957B, 0x958D,
+ 0x958C, 0x9590, 0x9687, 0x967E, 0x9688, 0x9689, 0x9683, 0x9680, 0x96C2,
+ 0x96C8, 0x96C3, 0x96F1, 0x96F0, 0x976C, 0x9770, 0x976E, 0x9807, 0x98A9,
+ 0x98EB, 0x9CE6, 0x9EF9, 0x4E83, 0x4E84, 0x4EB6, 0x50BD, 0x50BF, 0x50C6,
+ 0x50AE, 0x50C4, 0x50CA, 0x50B4, 0x50C8, 0x50C2, 0x50B0, 0x50C1, 0x50BA,
+ 0x50B1, 0x50CB, 0x50C9, 0x50B6, 0x50B8, 0x51D7, 0x527A, 0x5278, 0x527B,
+ 0x527C, 0x55C3, 0x55DB, 0x55CC, 0x55D0, 0x55CB, 0x55CA, 0x55DD, 0x55C0,
+ 0x55D4, 0x55C4, 0x55E9, 0x55BF, 0x55D2, 0x558D, 0x55CF, 0x55D5, 0x55E2,
+ 0x55D6, 0x55C8, 0x55F2, 0x55CD, 0x55D9, 0x55C2, 0x5714, 0x5853, 0x5868,
+ 0x5864, 0x584F, 0x584D, 0x5849, 0x586F, 0x5855, 0x584E, 0x585D, 0x5859,
+ 0x5865, 0x585B, 0x583D, 0x5863, 0x5871, 0x58FC, 0x5AC7, 0x5AC4, 0x5ACB,
+ 0x5ABA, 0x5AB8, 0x5AB1, 0x5AB5, 0x5AB0, 0x5ABF, 0x5AC8, 0x5ABB, 0x5AC6,
+ 0x5AB7, 0x5AC0, 0x5ACA, 0x5AB4, 0x5AB6, 0x5ACD, 0x5AB9, 0x5A90, 0x5BD6,
+ 0x5BD8, 0x5BD9, 0x5C1F, 0x5C33, 0x5D71, 0x5D63, 0x5D4A, 0x5D65, 0x5D72,
+ 0x5D6C, 0x5D5E, 0x5D68, 0x5D67, 0x5D62, 0x5DF0, 0x5E4F, 0x5E4E, 0x5E4A,
+ 0x5E4D, 0x5E4B, 0x5EC5, 0x5ECC, 0x5EC6, 0x5ECB, 0x5EC7, 0x5F40, 0x5FAF,
+ 0x5FAD, 0x60F7, 0x6149, 0x614A, 0x612B, 0x6145, 0x6136, 0x6132, 0x612E,
+ 0x6146, 0x612F, 0x614F, 0x6129, 0x6140, 0x6220, 0x9168, 0x6223, 0x6225,
+ 0x6224, 0x63C5, 0x63F1, 0x63EB, 0x6410, 0x6412, 0x6409, 0x6420, 0x6424,
+ 0x6433, 0x6443, 0x641F, 0x6415, 0x6418, 0x6439, 0x6437, 0x6422, 0x6423,
+ 0x640C, 0x6426, 0x6430, 0x6428, 0x6441, 0x6435, 0x642F, 0x640A, 0x641A,
+ 0x6440, 0x6425, 0x6427, 0x640B, 0x63E7, 0x641B, 0x642E, 0x6421, 0x640E,
+ 0x656F, 0x6592, 0x65D3, 0x6686, 0x668C, 0x6695, 0x6690, 0x668B, 0x668A,
+ 0x6699, 0x6694, 0x6678, 0x6720, 0x6966, 0x695F, 0x6938, 0x694E, 0x6962,
+ 0x6971, 0x693F, 0x6945, 0x696A, 0x6939, 0x6942, 0x6957, 0x6959, 0x697A,
+ 0x6948, 0x6949, 0x6935, 0x696C, 0x6933, 0x693D, 0x6965, 0x68F0, 0x6978,
+ 0x6934, 0x6969, 0x6940, 0x696F, 0x6944, 0x6976, 0x6958, 0x6941, 0x6974,
+ 0x694C, 0x693B, 0x694B, 0x6937, 0x695C, 0x694F, 0x6951, 0x6932, 0x6952,
+ 0x692F, 0x697B, 0x693C, 0x6B46, 0x6B45, 0x6B43, 0x6B42, 0x6B48, 0x6B41,
+ 0x6B9B, 0x6BFB, 0x6BFC, 0x6BF9, 0x6BF7, 0x6BF8, 0x6E9B, 0x6ED6, 0x6EC8,
+ 0x6E8F, 0x6EC0, 0x6E9F, 0x6E93, 0x6E94, 0x6EA0, 0x6EB1, 0x6EB9, 0x6EC6,
+ 0x6ED2, 0x6EBD, 0x6EC1, 0x6E9E, 0x6EC9, 0x6EB7, 0x6EB0, 0x6ECD, 0x6EA6,
+ 0x6ECF, 0x6EB2, 0x6EBE, 0x6EC3, 0x6EDC, 0x6ED8, 0x6E99, 0x6E92, 0x6E8E,
+ 0x6E8D, 0x6EA4, 0x6EA1, 0x6EBF, 0x6EB3, 0x6ED0, 0x6ECA, 0x6E97, 0x6EAE,
+ 0x6EA3, 0x7147, 0x7154, 0x7152, 0x7163, 0x7160, 0x7141, 0x715D, 0x7162,
+ 0x7172, 0x7178, 0x716A, 0x7161, 0x7142, 0x7158, 0x7143, 0x714B, 0x7170,
+ 0x715F, 0x7150, 0x7153, 0x7144, 0x714D, 0x715A, 0x724F, 0x728D, 0x728C,
+ 0x7291, 0x7290, 0x728E, 0x733C, 0x7342, 0x733B, 0x733A, 0x7340, 0x734A,
+ 0x7349, 0x7444, 0x744A, 0x744B, 0x7452, 0x7451, 0x7457, 0x7440, 0x744F,
+ 0x7450, 0x744E, 0x7442, 0x7446, 0x744D, 0x7454, 0x74E1, 0x74FF, 0x74FE,
+ 0x74FD, 0x751D, 0x7579, 0x7577, 0x6983, 0x75EF, 0x760F, 0x7603, 0x75F7,
+ 0x75FE, 0x75FC, 0x75F9, 0x75F8, 0x7610, 0x75FB, 0x75F6, 0x75ED, 0x75F5,
+ 0x75FD, 0x7699, 0x76B5, 0x76DD, 0x7755, 0x775F, 0x7760, 0x7752, 0x7756,
+ 0x775A, 0x7769, 0x7767, 0x7754, 0x7759, 0x776D, 0x77E0, 0x7887, 0x789A,
+ 0x7894, 0x788F, 0x7884, 0x7895, 0x7885, 0x7886, 0x78A1, 0x7883, 0x7879,
+ 0x7899, 0x7880, 0x7896, 0x787B, 0x797C, 0x7982, 0x797D, 0x7979, 0x7A11,
+ 0x7A18, 0x7A19, 0x7A12, 0x7A17, 0x7A15, 0x7A22, 0x7A13, 0x7A1B, 0x7A10,
+ 0x7AA3, 0x7AA2, 0x7A9E, 0x7AEB, 0x7B66, 0x7B64, 0x7B6D, 0x7B74, 0x7B69,
+ 0x7B72, 0x7B65, 0x7B73, 0x7B71, 0x7B70, 0x7B61, 0x7B78, 0x7B76, 0x7B63,
+ 0x7CB2, 0x7CB4, 0x7CAF, 0x7D88, 0x7D86, 0x7D80, 0x7D8D, 0x7D7F, 0x7D85,
+ 0x7D7A, 0x7D8E, 0x7D7B, 0x7D83, 0x7D7C, 0x7D8C, 0x7D94, 0x7D84, 0x7D7D,
+ 0x7D92, 0x7F6D, 0x7F6B, 0x7F67, 0x7F68, 0x7F6C, 0x7FA6, 0x7FA5, 0x7FA7,
+ 0x7FDB, 0x7FDC, 0x8021, 0x8164, 0x8160, 0x8177, 0x815C, 0x8169, 0x815B,
+ 0x8162, 0x8172, 0x6721, 0x815E, 0x8176, 0x8167, 0x816F, 0x8144, 0x8161,
+ 0x821D, 0x8249, 0x8244, 0x8240, 0x8242, 0x8245, 0x84F1, 0x843F, 0x8456,
+ 0x8476, 0x8479, 0x848F, 0x848D, 0x8465, 0x8451, 0x8440, 0x8486, 0x8467,
+ 0x8430, 0x844D, 0x847D, 0x845A, 0x8459, 0x8474, 0x8473, 0x845D, 0x8507,
+ 0x845E, 0x8437, 0x843A, 0x8434, 0x847A, 0x8443, 0x8478, 0x8432, 0x8445,
+ 0x8429, 0x83D9, 0x844B, 0x842F, 0x8442, 0x842D, 0x845F, 0x8470, 0x8439,
+ 0x844E, 0x844C, 0x8452, 0x846F, 0x84C5, 0x848E, 0x843B, 0x8447, 0x8436,
+ 0x8433, 0x8468, 0x847E, 0x8444, 0x842B, 0x8460, 0x8454, 0x846E, 0x8450,
+ 0x870B, 0x8704, 0x86F7, 0x870C, 0x86FA, 0x86D6, 0x86F5, 0x874D, 0x86F8,
+ 0x870E, 0x8709, 0x8701, 0x86F6, 0x870D, 0x8705, 0x88D6, 0x88CB, 0x88CD,
+ 0x88CE, 0x88DE, 0x88DB, 0x88DA, 0x88CC, 0x88D0, 0x8985, 0x899B, 0x89DF,
+ 0x89E5, 0x89E4, 0x89E1, 0x89E0, 0x89E2, 0x89DC, 0x89E6, 0x8A76, 0x8A86,
+ 0x8A7F, 0x8A61, 0x8A3F, 0x8A77, 0x8A82, 0x8A84, 0x8A75, 0x8A83, 0x8A81,
+ 0x8A74, 0x8A7A, 0x8C3C, 0x8C4B, 0x8C4A, 0x8C65, 0x8C64, 0x8C66, 0x8C86,
+ 0x8C84, 0x8C85, 0x8CCC, 0x8D68, 0x8D69, 0x8D91, 0x8D8C, 0x8D8E, 0x8D8F,
+ 0x8D8D, 0x8D93, 0x8D94, 0x8D90, 0x8D92, 0x8DF0, 0x8DE0, 0x8DEC, 0x8DF1,
+ 0x8DEE, 0x8DD0, 0x8DE9, 0x8DE3, 0x8DE2, 0x8DE7, 0x8DF2, 0x8DEB, 0x8DF4,
+ 0x8F06, 0x8EFF, 0x8F01, 0x8F00, 0x8F05, 0x8F07, 0x8F08, 0x8F02, 0x8F0B,
+ 0x9052, 0x903F, 0x9044, 0x9049, 0x903D, 0x9110, 0x910D, 0x910F, 0x9111,
+ 0x9116, 0x9114, 0x910B, 0x910E, 0x916E, 0x916F, 0x9248, 0x9252, 0x9230,
+ 0x923A, 0x9266, 0x9233, 0x9265, 0x925E, 0x9283, 0x922E, 0x924A, 0x9246,
+ 0x926D, 0x926C, 0x924F, 0x9260, 0x9267, 0x926F, 0x9236, 0x9261, 0x9270,
+ 0x9231, 0x9254, 0x9263, 0x9250, 0x9272, 0x924E, 0x9253, 0x924C, 0x9256,
+ 0x9232, 0x959F, 0x959C, 0x959E, 0x959B, 0x9692, 0x9693, 0x9691, 0x9697,
+ 0x96CE, 0x96FA, 0x96FD, 0x96F8, 0x96F5, 0x9773, 0x9777, 0x9778, 0x9772,
+ 0x980F, 0x980D, 0x980E, 0x98AC, 0x98F6, 0x98F9, 0x99AF, 0x99B2, 0x99B0,
+ 0x99B5, 0x9AAD, 0x9AAB, 0x9B5B, 0x9CEA, 0x9CED, 0x9CE7, 0x9E80, 0x9EFD,
+ 0x50E6, 0x50D4, 0x50D7, 0x50E8, 0x50F3, 0x50DB, 0x50EA, 0x50DD, 0x50E4,
+ 0x50D3, 0x50EC, 0x50F0, 0x50EF, 0x50E3, 0x50E0, 0x51D8, 0x5280, 0x5281,
+ 0x52E9, 0x52EB, 0x5330, 0x53AC, 0x5627, 0x5615, 0x560C, 0x5612, 0x55FC,
+ 0x560F, 0x561C, 0x5601, 0x5613, 0x5602, 0x55FA, 0x561D, 0x5604, 0x55FF,
+ 0x55F9, 0x5889, 0x587C, 0x5890, 0x5898, 0x5886, 0x5881, 0x587F, 0x5874,
+ 0x588B, 0x587A, 0x5887, 0x5891, 0x588E, 0x5876, 0x5882, 0x5888, 0x587B,
+ 0x5894, 0x588F, 0x58FE, 0x596B, 0x5ADC, 0x5AEE, 0x5AE5, 0x5AD5, 0x5AEA,
+ 0x5ADA, 0x5AED, 0x5AEB, 0x5AF3, 0x5AE2, 0x5AE0, 0x5ADB, 0x5AEC, 0x5ADE,
+ 0x5ADD, 0x5AD9, 0x5AE8, 0x5ADF, 0x5B77, 0x5BE0, 0x5BE3, 0x5C63, 0x5D82,
+ 0x5D80, 0x5D7D, 0x5D86, 0x5D7A, 0x5D81, 0x5D77, 0x5D8A, 0x5D89, 0x5D88,
+ 0x5D7E, 0x5D7C, 0x5D8D, 0x5D79, 0x5D7F, 0x5E58, 0x5E59, 0x5E53, 0x5ED8,
+ 0x5ED1, 0x5ED7, 0x5ECE, 0x5EDC, 0x5ED5, 0x5ED9, 0x5ED2, 0x5ED4, 0x5F44,
+ 0x5F43, 0x5F6F, 0x5FB6, 0x612C, 0x6128, 0x6141, 0x615E, 0x6171, 0x6173,
+ 0x6152, 0x6153, 0x6172, 0x616C, 0x6180, 0x6174, 0x6154, 0x617A, 0x615B,
+ 0x6165, 0x613B, 0x616A, 0x6161, 0x6156, 0x6229, 0x6227, 0x622B, 0x642B,
+ 0x644D, 0x645B, 0x645D, 0x6474, 0x6476, 0x6472, 0x6473, 0x647D, 0x6475,
+ 0x6466, 0x64A6, 0x644E, 0x6482, 0x645E, 0x645C, 0x644B, 0x6453, 0x6460,
+ 0x6450, 0x647F, 0x643F, 0x646C, 0x646B, 0x6459, 0x6465, 0x6477, 0x6573,
+ 0x65A0, 0x66A1, 0x66A0, 0x669F, 0x6705, 0x6704, 0x6722, 0x69B1, 0x69B6,
+ 0x69C9, 0x69A0, 0x69CE, 0x6996, 0x69B0, 0x69AC, 0x69BC, 0x6991, 0x6999,
+ 0x698E, 0x69A7, 0x698D, 0x69A9, 0x69BE, 0x69AF, 0x69BF, 0x69C4, 0x69BD,
+ 0x69A4, 0x69D4, 0x69B9, 0x69CA, 0x699A, 0x69CF, 0x69B3, 0x6993, 0x69AA,
+ 0x69A1, 0x699E, 0x69D9, 0x6997, 0x6990, 0x69C2, 0x69B5, 0x69A5, 0x69C6,
+ 0x6B4A, 0x6B4D, 0x6B4B, 0x6B9E, 0x6B9F, 0x6BA0, 0x6BC3, 0x6BC4, 0x6BFE,
+ 0x6ECE, 0x6EF5, 0x6EF1, 0x6F03, 0x6F25, 0x6EF8, 0x6F37, 0x6EFB, 0x6F2E,
+ 0x6F09, 0x6F4E, 0x6F19, 0x6F1A, 0x6F27, 0x6F18, 0x6F3B, 0x6F12, 0x6EED,
+ 0x6F0A, 0x6F36, 0x6F73, 0x6EF9, 0x6EEE, 0x6F2D, 0x6F40, 0x6F30, 0x6F3C,
+ 0x6F35, 0x6EEB, 0x6F07, 0x6F0E, 0x6F43, 0x6F05, 0x6EFD, 0x6EF6, 0x6F39,
+ 0x6F1C, 0x6EFC, 0x6F3A, 0x6F1F, 0x6F0D, 0x6F1E, 0x6F08, 0x6F21, 0x7187,
+ 0x7190, 0x7189, 0x7180, 0x7185, 0x7182, 0x718F, 0x717B, 0x7186, 0x7181,
+ 0x7197, 0x7244, 0x7253, 0x7297, 0x7295, 0x7293, 0x7343, 0x734D, 0x7351,
+ 0x734C, 0x7462, 0x7473, 0x7471, 0x7475, 0x7472, 0x7467, 0x746E, 0x7500,
+ 0x7502, 0x7503, 0x757D, 0x7590, 0x7616, 0x7608, 0x760C, 0x7615, 0x7611,
+ 0x760A, 0x7614, 0x76B8, 0x7781, 0x777C, 0x7785, 0x7782, 0x776E, 0x7780,
+ 0x776F, 0x777E, 0x7783, 0x78B2, 0x78AA, 0x78B4, 0x78AD, 0x78A8, 0x787E,
+ 0x78AB, 0x789E, 0x78A5, 0x78A0, 0x78AC, 0x78A2, 0x78A4, 0x7998, 0x798A,
+ 0x798B, 0x7996, 0x7995, 0x7994, 0x7993, 0x7997, 0x7988, 0x7992, 0x7990,
+ 0x7A2B, 0x7A4A, 0x7A30, 0x7A2F, 0x7A28, 0x7A26, 0x7AA8, 0x7AAB, 0x7AAC,
+ 0x7AEE, 0x7B88, 0x7B9C, 0x7B8A, 0x7B91, 0x7B90, 0x7B96, 0x7B8D, 0x7B8C,
+ 0x7B9B, 0x7B8E, 0x7B85, 0x7B98, 0x5284, 0x7B99, 0x7BA4, 0x7B82, 0x7CBB,
+ 0x7CBF, 0x7CBC, 0x7CBA, 0x7DA7, 0x7DB7, 0x7DC2, 0x7DA3, 0x7DAA, 0x7DC1,
+ 0x7DC0, 0x7DC5, 0x7D9D, 0x7DCE, 0x7DC4, 0x7DC6, 0x7DCB, 0x7DCC, 0x7DAF,
+ 0x7DB9, 0x7D96, 0x7DBC, 0x7D9F, 0x7DA6, 0x7DAE, 0x7DA9, 0x7DA1, 0x7DC9,
+ 0x7F73, 0x7FE2, 0x7FE3, 0x7FE5, 0x7FDE, 0x8024, 0x805D, 0x805C, 0x8189,
+ 0x8186, 0x8183, 0x8187, 0x818D, 0x818C, 0x818B, 0x8215, 0x8497, 0x84A4,
+ 0x84A1, 0x849F, 0x84BA, 0x84CE, 0x84C2, 0x84AC, 0x84AE, 0x84AB, 0x84B9,
+ 0x84B4, 0x84C1, 0x84CD, 0x84AA, 0x849A, 0x84B1, 0x84D0, 0x849D, 0x84A7,
+ 0x84BB, 0x84A2, 0x8494, 0x84C7, 0x84CC, 0x849B, 0x84A9, 0x84AF, 0x84A8,
+ 0x84D6, 0x8498, 0x84B6, 0x84CF, 0x84A0, 0x84D7, 0x84D4, 0x84D2, 0x84DB,
+ 0x84B0, 0x8491, 0x8661, 0x8733, 0x8723, 0x8728, 0x876B, 0x8740, 0x872E,
+ 0x871E, 0x8721, 0x8719, 0x871B, 0x8743, 0x872C, 0x8741, 0x873E, 0x8746,
+ 0x8720, 0x8732, 0x872A, 0x872D, 0x873C, 0x8712, 0x873A, 0x8731, 0x8735,
+ 0x8742, 0x8726, 0x8727, 0x8738, 0x8724, 0x871A, 0x8730, 0x8711, 0x88F7,
+ 0x88E7, 0x88F1, 0x88F2, 0x88FA, 0x88FE, 0x88EE, 0x88FC, 0x88F6, 0x88FB,
+ 0x88F0, 0x88EC, 0x88EB, 0x899D, 0x89A1, 0x899F, 0x899E, 0x89E9, 0x89EB,
+ 0x89E8, 0x8AAB, 0x8A99, 0x8A8B, 0x8A92, 0x8A8F, 0x8A96, 0x8C3D, 0x8C68,
+ 0x8C69, 0x8CD5, 0x8CCF, 0x8CD7, 0x8D96, 0x8E09, 0x8E02, 0x8DFF, 0x8E0D,
+ 0x8DFD, 0x8E0A, 0x8E03, 0x8E07, 0x8E06, 0x8E05, 0x8DFE, 0x8E00, 0x8E04,
+ 0x8F10, 0x8F11, 0x8F0E, 0x8F0D, 0x9123, 0x911C, 0x9120, 0x9122, 0x911F,
+ 0x911D, 0x911A, 0x9124, 0x9121, 0x911B, 0x917A, 0x9172, 0x9179, 0x9173,
+ 0x92A5, 0x92A4, 0x9276, 0x929B, 0x927A, 0x92A0, 0x9294, 0x92AA, 0x928D,
+ 0x92A6, 0x929A, 0x92AB, 0x9279, 0x9297, 0x927F, 0x92A3, 0x92EE, 0x928E,
+ 0x9282, 0x9295, 0x92A2, 0x927D, 0x9288, 0x92A1, 0x928A, 0x9286, 0x928C,
+ 0x9299, 0x92A7, 0x927E, 0x9287, 0x92A9, 0x929D, 0x928B, 0x922D, 0x969E,
+ 0x96A1, 0x96FF, 0x9758, 0x977D, 0x977A, 0x977E, 0x9783, 0x9780, 0x9782,
+ 0x977B, 0x9784, 0x9781, 0x977F, 0x97CE, 0x97CD, 0x9816, 0x98AD, 0x98AE,
+ 0x9902, 0x9900, 0x9907, 0x999D, 0x999C, 0x99C3, 0x99B9, 0x99BB, 0x99BA,
+ 0x99C2, 0x99BD, 0x99C7, 0x9AB1, 0x9AE3, 0x9AE7, 0x9B3E, 0x9B3F, 0x9B60,
+ 0x9B61, 0x9B5F, 0x9CF1, 0x9CF2, 0x9CF5, 0x9EA7, 0x50FF, 0x5103, 0x5130,
+ 0x50F8, 0x5106, 0x5107, 0x50F6, 0x50FE, 0x510B, 0x510C, 0x50FD, 0x510A,
+ 0x528B, 0x528C, 0x52F1, 0x52EF, 0x5648, 0x5642, 0x564C, 0x5635, 0x5641,
+ 0x564A, 0x5649, 0x5646, 0x5658, 0x565A, 0x5640, 0x5633, 0x563D, 0x562C,
+ 0x563E, 0x5638, 0x562A, 0x563A, 0x571A, 0x58AB, 0x589D, 0x58B1, 0x58A0,
+ 0x58A3, 0x58AF, 0x58AC, 0x58A5, 0x58A1, 0x58FF, 0x5AFF, 0x5AF4, 0x5AFD,
+ 0x5AF7, 0x5AF6, 0x5B03, 0x5AF8, 0x5B02, 0x5AF9, 0x5B01, 0x5B07, 0x5B05,
+ 0x5B0F, 0x5C67, 0x5D99, 0x5D97, 0x5D9F, 0x5D92, 0x5DA2, 0x5D93, 0x5D95,
+ 0x5DA0, 0x5D9C, 0x5DA1, 0x5D9A, 0x5D9E, 0x5E69, 0x5E5D, 0x5E60, 0x5E5C,
+ 0x7DF3, 0x5EDB, 0x5EDE, 0x5EE1, 0x5F49, 0x5FB2, 0x618B, 0x6183, 0x6179,
+ 0x61B1, 0x61B0, 0x61A2, 0x6189, 0x619B, 0x6193, 0x61AF, 0x61AD, 0x619F,
+ 0x6192, 0x61AA, 0x61A1, 0x618D, 0x6166, 0x61B3, 0x622D, 0x646E, 0x6470,
+ 0x6496, 0x64A0, 0x6485, 0x6497, 0x649C, 0x648F, 0x648B, 0x648A, 0x648C,
+ 0x64A3, 0x649F, 0x6468, 0x64B1, 0x6498, 0x6576, 0x657A, 0x6579, 0x657B,
+ 0x65B2, 0x65B3, 0x66B5, 0x66B0, 0x66A9, 0x66B2, 0x66B7, 0x66AA, 0x66AF,
+ 0x6A00, 0x6A06, 0x6A17, 0x69E5, 0x69F8, 0x6A15, 0x69F1, 0x69E4, 0x6A20,
+ 0x69FF, 0x69EC, 0x69E2, 0x6A1B, 0x6A1D, 0x69FE, 0x6A27, 0x69F2, 0x69EE,
+ 0x6A14, 0x69F7, 0x69E7, 0x6A40, 0x6A08, 0x69E6, 0x69FB, 0x6A0D, 0x69FC,
+ 0x69EB, 0x6A09, 0x6A04, 0x6A18, 0x6A25, 0x6A0F, 0x69F6, 0x6A26, 0x6A07,
+ 0x69F4, 0x6A16, 0x6B51, 0x6BA5, 0x6BA3, 0x6BA2, 0x6BA6, 0x6C01, 0x6C00,
+ 0x6BFF, 0x6C02, 0x6F41, 0x6F26, 0x6F7E, 0x6F87, 0x6FC6, 0x6F92, 0x6F8D,
+ 0x6F89, 0x6F8C, 0x6F62, 0x6F4F, 0x6F85, 0x6F5A, 0x6F96, 0x6F76, 0x6F6C,
+ 0x6F82, 0x6F55, 0x6F72, 0x6F52, 0x6F50, 0x6F57, 0x6F94, 0x6F93, 0x6F5D,
+ 0x6F00, 0x6F61, 0x6F6B, 0x6F7D, 0x6F67, 0x6F90, 0x6F53, 0x6F8B, 0x6F69,
+ 0x6F7F, 0x6F95, 0x6F63, 0x6F77, 0x6F6A, 0x6F7B, 0x71B2, 0x71AF, 0x719B,
+ 0x71B0, 0x71A0, 0x719A, 0x71A9, 0x71B5, 0x719D, 0x71A5, 0x719E, 0x71A4,
+ 0x71A1, 0x71AA, 0x719C, 0x71A7, 0x71B3, 0x7298, 0x729A, 0x7358, 0x7352,
+ 0x735E, 0x735F, 0x7360, 0x735D, 0x735B, 0x7361, 0x735A, 0x7359, 0x7362,
+ 0x7487, 0x7489, 0x748A, 0x7486, 0x7481, 0x747D, 0x7485, 0x7488, 0x747C,
+ 0x7479, 0x7508, 0x7507, 0x757E, 0x7625, 0x761E, 0x7619, 0x761D, 0x761C,
+ 0x7623, 0x761A, 0x7628, 0x761B, 0x769C, 0x769D, 0x769E, 0x769B, 0x778D,
+ 0x778F, 0x7789, 0x7788, 0x78CD, 0x78BB, 0x78CF, 0x78CC, 0x78D1, 0x78CE,
+ 0x78D4, 0x78C8, 0x78C3, 0x78C4, 0x78C9, 0x799A, 0x79A1, 0x79A0, 0x799C,
+ 0x79A2, 0x799B, 0x6B76, 0x7A39, 0x7AB2, 0x7AB4, 0x7AB3, 0x7BB7, 0x7BCB,
+ 0x7BBE, 0x7BAC, 0x7BCE, 0x7BAF, 0x7BB9, 0x7BCA, 0x7BB5, 0x7CC5, 0x7CC8,
+ 0x7CCC, 0x7CCB, 0x7DF7, 0x7DDB, 0x7DEA, 0x7DE7, 0x7DD7, 0x7DE1, 0x7E03,
+ 0x7DFA, 0x7DE6, 0x7DF6, 0x7DF1, 0x7DF0, 0x7DEE, 0x7DDF, 0x7F76, 0x7FAC,
+ 0x7FB0, 0x7FAD, 0x7FED, 0x7FEB, 0x7FEA, 0x7FEC, 0x7FE6, 0x7FE8, 0x8064,
+ 0x8067, 0x81A3, 0x819F, 0x819E, 0x8195, 0x81A2, 0x8199, 0x8197, 0x8216,
+ 0x824F, 0x8253, 0x8252, 0x8250, 0x824E, 0x8251, 0x8524, 0x853B, 0x850F,
+ 0x8500, 0x8529, 0x850E, 0x8509, 0x850D, 0x851F, 0x850A, 0x8527, 0x851C,
+ 0x84FB, 0x852B, 0x84FA, 0x8508, 0x850C, 0x84F4, 0x852A, 0x84F2, 0x8515,
+ 0x84F7, 0x84EB, 0x84F3, 0x84FC, 0x8512, 0x84EA, 0x84E9, 0x8516, 0x84FE,
+ 0x8528, 0x851D, 0x852E, 0x8502, 0x84FD, 0x851E, 0x84F6, 0x8531, 0x8526,
+ 0x84E7, 0x84E8, 0x84F0, 0x84EF, 0x84F9, 0x8518, 0x8520, 0x8530, 0x850B,
+ 0x8519, 0x852F, 0x8662, 0x8756, 0x8763, 0x8764, 0x8777, 0x87E1, 0x8773,
+ 0x8758, 0x8754, 0x875B, 0x8752, 0x8761, 0x875A, 0x8751, 0x875E, 0x876D,
+ 0x876A, 0x8750, 0x874E, 0x875F, 0x875D, 0x876F, 0x876C, 0x877A, 0x876E,
+ 0x875C, 0x8765, 0x874F, 0x877B, 0x8775, 0x8762, 0x8767, 0x8769, 0x885A,
+ 0x8905, 0x890C, 0x8914, 0x890B, 0x8917, 0x8918, 0x8919, 0x8906, 0x8916,
+ 0x8911, 0x890E, 0x8909, 0x89A2, 0x89A4, 0x89A3, 0x89ED, 0x89F0, 0x89EC,
+ 0x8ACF, 0x8AC6, 0x8AB8, 0x8AD3, 0x8AD1, 0x8AD4, 0x8AD5, 0x8ABB, 0x8AD7,
+ 0x8ABE, 0x8AC0, 0x8AC5, 0x8AD8, 0x8AC3, 0x8ABA, 0x8ABD, 0x8AD9, 0x8C3E,
+ 0x8C4D, 0x8C8F, 0x8CE5, 0x8CDF, 0x8CD9, 0x8CE8, 0x8CDA, 0x8CDD, 0x8CE7,
+ 0x8DA0, 0x8D9C, 0x8DA1, 0x8D9B, 0x8E20, 0x8E23, 0x8E25, 0x8E24, 0x8E2E,
+ 0x8E15, 0x8E1B, 0x8E16, 0x8E11, 0x8E19, 0x8E26, 0x8E27, 0x8E14, 0x8E12,
+ 0x8E18, 0x8E13, 0x8E1C, 0x8E17, 0x8E1A, 0x8F2C, 0x8F24, 0x8F18, 0x8F1A,
+ 0x8F20, 0x8F23, 0x8F16, 0x8F17, 0x9073, 0x9070, 0x906F, 0x9067, 0x906B,
+ 0x912F, 0x912B, 0x9129, 0x912A, 0x9132, 0x9126, 0x912E, 0x9185, 0x9186,
+ 0x918A, 0x9181, 0x9182, 0x9184, 0x9180, 0x92D0, 0x92C3, 0x92C4, 0x92C0,
+ 0x92D9, 0x92B6, 0x92CF, 0x92F1, 0x92DF, 0x92D8, 0x92E9, 0x92D7, 0x92DD,
+ 0x92CC, 0x92EF, 0x92C2, 0x92E8, 0x92CA, 0x92C8, 0x92CE, 0x92E6, 0x92CD,
+ 0x92D5, 0x92C9, 0x92E0, 0x92DE, 0x92E7, 0x92D1, 0x92D3, 0x92B5, 0x92E1,
+ 0x9325, 0x92C6, 0x92B4, 0x957C, 0x95AC, 0x95AB, 0x95AE, 0x95B0, 0x96A4,
+ 0x96A2, 0x96D3, 0x9705, 0x9708, 0x9702, 0x975A, 0x978A, 0x978E, 0x9788,
+ 0x97D0, 0x97CF, 0x981E, 0x981D, 0x9826, 0x9829, 0x9828, 0x9820, 0x981B,
+ 0x9827, 0x98B2, 0x9908, 0x98FA, 0x9911, 0x9914, 0x9916, 0x9917, 0x9915,
+ 0x99DC, 0x99CD, 0x99CF, 0x99D3, 0x99D4, 0x99CE, 0x99C9, 0x99D6, 0x99D8,
+ 0x99CB, 0x99D7, 0x99CC, 0x9AB3, 0x9AEC, 0x9AEB, 0x9AF3, 0x9AF2, 0x9AF1,
+ 0x9B46, 0x9B43, 0x9B67, 0x9B74, 0x9B71, 0x9B66, 0x9B76, 0x9B75, 0x9B70,
+ 0x9B68, 0x9B64, 0x9B6C, 0x9CFC, 0x9CFA, 0x9CFD, 0x9CFF, 0x9CF7, 0x9D07,
+ 0x9D00, 0x9CF9, 0x9CFB, 0x9D08, 0x9D05, 0x9D04, 0x9E83, 0x9ED3, 0x9F0F,
+ 0x9F10, 0x511C, 0x5113, 0x5117, 0x511A, 0x5111, 0x51DE, 0x5334, 0x53E1,
+ 0x5670, 0x5660, 0x566E, 0x5673, 0x5666, 0x5663, 0x566D, 0x5672, 0x565E,
+ 0x5677, 0x571C, 0x571B, 0x58C8, 0x58BD, 0x58C9, 0x58BF, 0x58BA, 0x58C2,
+ 0x58BC, 0x58C6, 0x5B17, 0x5B19, 0x5B1B, 0x5B21, 0x5B14, 0x5B13, 0x5B10,
+ 0x5B16, 0x5B28, 0x5B1A, 0x5B20, 0x5B1E, 0x5BEF, 0x5DAC, 0x5DB1, 0x5DA9,
+ 0x5DA7, 0x5DB5, 0x5DB0, 0x5DAE, 0x5DAA, 0x5DA8, 0x5DB2, 0x5DAD, 0x5DAF,
+ 0x5DB4, 0x5E67, 0x5E68, 0x5E66, 0x5E6F, 0x5EE9, 0x5EE7, 0x5EE6, 0x5EE8,
+ 0x5EE5, 0x5F4B, 0x5FBC, 0x5FBB, 0x619D, 0x61A8, 0x6196, 0x61C5, 0x61B4,
+ 0x61C6, 0x61C1, 0x61CC, 0x61BA, 0x61BF, 0x61B8, 0x618C, 0x64D7, 0x64D6,
+ 0x64D0, 0x64CF, 0x64C9, 0x64BD, 0x6489, 0x64C3, 0x64DB, 0x64F3, 0x64D9,
+ 0x6533, 0x657F, 0x657C, 0x65A2, 0x66C8, 0x66BE, 0x66C0, 0x66CA, 0x66CB,
+ 0x66CF, 0x66BD, 0x66BB, 0x66BA, 0x66CC, 0x6723, 0x6A34, 0x6A66, 0x6A49,
+ 0x6A67, 0x6A32, 0x6A68, 0x6A3E, 0x6A5D, 0x6A6D, 0x6A76, 0x6A5B, 0x6A51,
+ 0x6A28, 0x6A5A, 0x6A3B, 0x6A3F, 0x6A41, 0x6A6A, 0x6A64, 0x6A50, 0x6A4F,
+ 0x6A54, 0x6A6F, 0x6A69, 0x6A60, 0x6A3C, 0x6A5E, 0x6A56, 0x6A55, 0x6A4D,
+ 0x6A4E, 0x6A46, 0x6B55, 0x6B54, 0x6B56, 0x6BA7, 0x6BAA, 0x6BAB, 0x6BC8,
+ 0x6BC7, 0x6C04, 0x6C03, 0x6C06, 0x6FAD, 0x6FCB, 0x6FA3, 0x6FC7, 0x6FBC,
+ 0x6FCE, 0x6FC8, 0x6F5E, 0x6FC4, 0x6FBD, 0x6F9E, 0x6FCA, 0x6FA8, 0x7004,
+ 0x6FA5, 0x6FAE, 0x6FBA, 0x6FAC, 0x6FAA, 0x6FCF, 0x6FBF, 0x6FB8, 0x6FA2,
+ 0x6FC9, 0x6FAB, 0x6FCD, 0x6FAF, 0x6FB2, 0x6FB0, 0x71C5, 0x71C2, 0x71BF,
+ 0x71B8, 0x71D6, 0x71C0, 0x71C1, 0x71CB, 0x71D4, 0x71CA, 0x71C7, 0x71CF,
+ 0x71BD, 0x71D8, 0x71BC, 0x71C6, 0x71DA, 0x71DB, 0x729D, 0x729E, 0x7369,
+ 0x7366, 0x7367, 0x736C, 0x7365, 0x736B, 0x736A, 0x747F, 0x749A, 0x74A0,
+ 0x7494, 0x7492, 0x7495, 0x74A1, 0x750B, 0x7580, 0x762F, 0x762D, 0x7631,
+ 0x763D, 0x7633, 0x763C, 0x7635, 0x7632, 0x7630, 0x76BB, 0x76E6, 0x779A,
+ 0x779D, 0x77A1, 0x779C, 0x779B, 0x77A2, 0x77A3, 0x7795, 0x7799, 0x7797,
+ 0x78DD, 0x78E9, 0x78E5, 0x78EA, 0x78DE, 0x78E3, 0x78DB, 0x78E1, 0x78E2,
+ 0x78ED, 0x78DF, 0x78E0, 0x79A4, 0x7A44, 0x7A48, 0x7A47, 0x7AB6, 0x7AB8,
+ 0x7AB5, 0x7AB1, 0x7AB7, 0x7BDE, 0x7BE3, 0x7BE7, 0x7BDD, 0x7BD5, 0x7BE5,
+ 0x7BDA, 0x7BE8, 0x7BF9, 0x7BD4, 0x7BEA, 0x7BE2, 0x7BDC, 0x7BEB, 0x7BD8,
+ 0x7BDF, 0x7CD2, 0x7CD4, 0x7CD7, 0x7CD0, 0x7CD1, 0x7E12, 0x7E21, 0x7E17,
+ 0x7E0C, 0x7E1F, 0x7E20, 0x7E13, 0x7E0E, 0x7E1C, 0x7E15, 0x7E1A, 0x7E22,
+ 0x7E0B, 0x7E0F, 0x7E16, 0x7E0D, 0x7E14, 0x7E25, 0x7E24, 0x7F43, 0x7F7B,
+ 0x7F7C, 0x7F7A, 0x7FB1, 0x7FEF, 0x802A, 0x8029, 0x806C, 0x81B1, 0x81A6,
+ 0x81AE, 0x81B9, 0x81B5, 0x81AB, 0x81B0, 0x81AC, 0x81B4, 0x81B2, 0x81B7,
+ 0x81A7, 0x81F2, 0x8255, 0x8256, 0x8257, 0x8556, 0x8545, 0x856B, 0x854D,
+ 0x8553, 0x8561, 0x8558, 0x8540, 0x8546, 0x8564, 0x8541, 0x8562, 0x8544,
+ 0x8551, 0x8547, 0x8563, 0x853E, 0x855B, 0x8571, 0x854E, 0x856E, 0x8575,
+ 0x8555, 0x8567, 0x8560, 0x858C, 0x8566, 0x855D, 0x8554, 0x8565, 0x856C,
+ 0x8663, 0x8665, 0x8664, 0x87A4, 0x879B, 0x878F, 0x8797, 0x8793, 0x8792,
+ 0x8788, 0x8781, 0x8796, 0x8798, 0x8779, 0x8787, 0x87A3, 0x8785, 0x8790,
+ 0x8791, 0x879D, 0x8784, 0x8794, 0x879C, 0x879A, 0x8789, 0x891E, 0x8926,
+ 0x8930, 0x892D, 0x892E, 0x8927, 0x8931, 0x8922, 0x8929, 0x8923, 0x892F,
+ 0x892C, 0x891F, 0x89F1, 0x8AE0, 0x8AE2, 0x8AF2, 0x8AF4, 0x8AF5, 0x8ADD,
+ 0x8B14, 0x8AE4, 0x8ADF, 0x8AF0, 0x8AC8, 0x8ADE, 0x8AE1, 0x8AE8, 0x8AFF,
+ 0x8AEF, 0x8AFB, 0x8C91, 0x8C92, 0x8C90, 0x8CF5, 0x8CEE, 0x8CF1, 0x8CF0,
+ 0x8CF3, 0x8D6C, 0x8D6E, 0x8DA5, 0x8DA7, 0x8E33, 0x8E3E, 0x8E38, 0x8E40,
+ 0x8E45, 0x8E36, 0x8E3C, 0x8E3D, 0x8E41, 0x8E30, 0x8E3F, 0x8EBD, 0x8F36,
+ 0x8F2E, 0x8F35, 0x8F32, 0x8F39, 0x8F37, 0x8F34, 0x9076, 0x9079, 0x907B,
+ 0x9086, 0x90FA, 0x9133, 0x9135, 0x9136, 0x9193, 0x9190, 0x9191, 0x918D,
+ 0x918F, 0x9327, 0x931E, 0x9308, 0x931F, 0x9306, 0x930F, 0x937A, 0x9338,
+ 0x933C, 0x931B, 0x9323, 0x9312, 0x9301, 0x9346, 0x932D, 0x930E, 0x930D,
+ 0x92CB, 0x931D, 0x92FA, 0x9313, 0x92F9, 0x92F7, 0x9334, 0x9302, 0x9324,
+ 0x92FF, 0x9329, 0x9339, 0x9335, 0x932A, 0x9314, 0x930C, 0x930B, 0x92FE,
+ 0x9309, 0x9300, 0x92FB, 0x9316, 0x95BC, 0x95CD, 0x95BE, 0x95B9, 0x95BA,
+ 0x95B6, 0x95BF, 0x95B5, 0x95BD, 0x96A9, 0x96D4, 0x970B, 0x9712, 0x9710,
+ 0x9799, 0x9797, 0x9794, 0x97F0, 0x97F8, 0x9835, 0x982F, 0x9832, 0x9924,
+ 0x991F, 0x9927, 0x9929, 0x999E, 0x99EE, 0x99EC, 0x99E5, 0x99E4, 0x99F0,
+ 0x99E3, 0x99EA, 0x99E9, 0x99E7, 0x9AB9, 0x9ABF, 0x9AB4, 0x9ABB, 0x9AF6,
+ 0x9AFA, 0x9AF9, 0x9AF7, 0x9B33, 0x9B80, 0x9B85, 0x9B87, 0x9B7C, 0x9B7E,
+ 0x9B7B, 0x9B82, 0x9B93, 0x9B92, 0x9B90, 0x9B7A, 0x9B95, 0x9B7D, 0x9B88,
+ 0x9D25, 0x9D17, 0x9D20, 0x9D1E, 0x9D14, 0x9D29, 0x9D1D, 0x9D18, 0x9D22,
+ 0x9D10, 0x9D19, 0x9D1F, 0x9E88, 0x9E86, 0x9E87, 0x9EAE, 0x9EAD, 0x9ED5,
+ 0x9ED6, 0x9EFA, 0x9F12, 0x9F3D, 0x5126, 0x5125, 0x5122, 0x5124, 0x5120,
+ 0x5129, 0x52F4, 0x5693, 0x568C, 0x568D, 0x5686, 0x5684, 0x5683, 0x567E,
+ 0x5682, 0x567F, 0x5681, 0x58D6, 0x58D4, 0x58CF, 0x58D2, 0x5B2D, 0x5B25,
+ 0x5B32, 0x5B23, 0x5B2C, 0x5B27, 0x5B26, 0x5B2F, 0x5B2E, 0x5B7B, 0x5BF1,
+ 0x5BF2, 0x5DB7, 0x5E6C, 0x5E6A, 0x5FBE, 0x61C3, 0x61B5, 0x61BC, 0x61E7,
+ 0x61E0, 0x61E5, 0x61E4, 0x61E8, 0x61DE, 0x64EF, 0x64E9, 0x64E3, 0x64EB,
+ 0x64E4, 0x64E8, 0x6581, 0x6580, 0x65B6, 0x65DA, 0x66D2, 0x6A8D, 0x6A96,
+ 0x6A81, 0x6AA5, 0x6A89, 0x6A9F, 0x6A9B, 0x6AA1, 0x6A9E, 0x6A87, 0x6A93,
+ 0x6A8E, 0x6A95, 0x6A83, 0x6AA8, 0x6AA4, 0x6A91, 0x6A7F, 0x6AA6, 0x6A9A,
+ 0x6A85, 0x6A8C, 0x6A92, 0x6B5B, 0x6BAD, 0x6C09, 0x6FCC, 0x6FA9, 0x6FF4,
+ 0x6FD4, 0x6FE3, 0x6FDC, 0x6FED, 0x6FE7, 0x6FE6, 0x6FDE, 0x6FF2, 0x6FDD,
+ 0x6FE2, 0x6FE8, 0x71E1, 0x71F1, 0x71E8, 0x71F2, 0x71E4, 0x71F0, 0x71E2,
+ 0x7373, 0x736E, 0x736F, 0x7497, 0x74B2, 0x74AB, 0x7490, 0x74AA, 0x74AD,
+ 0x74B1, 0x74A5, 0x74AF, 0x7510, 0x7511, 0x7512, 0x750F, 0x7584, 0x7643,
+ 0x7648, 0x7649, 0x7647, 0x76A4, 0x76E9, 0x77B5, 0x77AB, 0x77B2, 0x77B7,
+ 0x77B6, 0x77B4, 0x77B1, 0x77A8, 0x77F0, 0x78F3, 0x78FD, 0x7902, 0x78FB,
+ 0x78FC, 0x78FF, 0x78F2, 0x7905, 0x78F9, 0x78FE, 0x7904, 0x79AB, 0x79A8,
+ 0x7A5C, 0x7A5B, 0x7A56, 0x7A58, 0x7A54, 0x7A5A, 0x7ABE, 0x7AC0, 0x7AC1,
+ 0x7C05, 0x7C0F, 0x7BF2, 0x7C00, 0x7BFF, 0x7BFB, 0x7C0E, 0x7BF4, 0x7C0B,
+ 0x7BF3, 0x7C02, 0x7C09, 0x7C03, 0x7C01, 0x7BF8, 0x7BFD, 0x7C06, 0x7BF0,
+ 0x7BF1, 0x7C10, 0x7C0A, 0x7CE8, 0x7E2D, 0x7E3C, 0x7E42, 0x7E33, 0x9848,
+ 0x7E38, 0x7E2A, 0x7E49, 0x7E40, 0x7E47, 0x7E29, 0x7E4C, 0x7E30, 0x7E3B,
+ 0x7E36, 0x7E44, 0x7E3A, 0x7F45, 0x7F7F, 0x7F7E, 0x7F7D, 0x7FF4, 0x7FF2,
+ 0x802C, 0x81BB, 0x81C4, 0x81CC, 0x81CA, 0x81C5, 0x81C7, 0x81BC, 0x81E9,
+ 0x825B, 0x825A, 0x825C, 0x8583, 0x8580, 0x858F, 0x85A7, 0x8595, 0x85A0,
+ 0x858B, 0x85A3, 0x857B, 0x85A4, 0x859A, 0x859E, 0x8577, 0x857C, 0x8589,
+ 0x85A1, 0x857A, 0x8578, 0x8557, 0x858E, 0x8596, 0x8586, 0x858D, 0x8599,
+ 0x859D, 0x8581, 0x85A2, 0x8582, 0x8588, 0x8585, 0x8579, 0x8576, 0x8598,
+ 0x8590, 0x859F, 0x8668, 0x87BE, 0x87AA, 0x87AD, 0x87C5, 0x87B0, 0x87AC,
+ 0x87B9, 0x87B5, 0x87BC, 0x87AE, 0x87C9, 0x87C3, 0x87C2, 0x87CC, 0x87B7,
+ 0x87AF, 0x87C4, 0x87CA, 0x87B4, 0x87B6, 0x87BF, 0x87B8, 0x87BD, 0x87DE,
+ 0x87B2, 0x8935, 0x8933, 0x893C, 0x893E, 0x8941, 0x8952, 0x8937, 0x8942,
+ 0x89AD, 0x89AF, 0x89AE, 0x89F2, 0x89F3, 0x8B1E, 0x8B18, 0x8B16, 0x8B11,
+ 0x8B05, 0x8B0B, 0x8B22, 0x8B0F, 0x8B12, 0x8B15, 0x8B07, 0x8B0D, 0x8B08,
+ 0x8B06, 0x8B1C, 0x8B13, 0x8B1A, 0x8C4F, 0x8C70, 0x8C72, 0x8C71, 0x8C6F,
+ 0x8C95, 0x8C94, 0x8CF9, 0x8D6F, 0x8E4E, 0x8E4D, 0x8E53, 0x8E50, 0x8E4C,
+ 0x8E47, 0x8F43, 0x8F40, 0x9085, 0x907E, 0x9138, 0x919A, 0x91A2, 0x919B,
+ 0x9199, 0x919F, 0x91A1, 0x919D, 0x91A0, 0x93A1, 0x9383, 0x93AF, 0x9364,
+ 0x9356, 0x9347, 0x937C, 0x9358, 0x935C, 0x9376, 0x9349, 0x9350, 0x9351,
+ 0x9360, 0x936D, 0x938F, 0x934C, 0x936A, 0x9379, 0x9357, 0x9355, 0x9352,
+ 0x934F, 0x9371, 0x9377, 0x937B, 0x9361, 0x935E, 0x9363, 0x9367, 0x934E,
+ 0x9359, 0x95C7, 0x95C0, 0x95C9, 0x95C3, 0x95C5, 0x95B7, 0x96AE, 0x96B0,
+ 0x96AC, 0x9720, 0x971F, 0x9718, 0x971D, 0x9719, 0x979A, 0x97A1, 0x979C,
+ 0x979E, 0x979D, 0x97D5, 0x97D4, 0x97F1, 0x9841, 0x9844, 0x984A, 0x9849,
+ 0x9845, 0x9843, 0x9925, 0x992B, 0x992C, 0x992A, 0x9933, 0x9932, 0x992F,
+ 0x992D, 0x9931, 0x9930, 0x9998, 0x99A3, 0x99A1, 0x9A02, 0x99FA, 0x99F4,
+ 0x99F7, 0x99F9, 0x99F8, 0x99F6, 0x99FB, 0x99FD, 0x99FE, 0x99FC, 0x9A03,
+ 0x9ABE, 0x9AFE, 0x9AFD, 0x9B01, 0x9AFC, 0x9B48, 0x9B9A, 0x9BA8, 0x9B9E,
+ 0x9B9B, 0x9BA6, 0x9BA1, 0x9BA5, 0x9BA4, 0x9B86, 0x9BA2, 0x9BA0, 0x9BAF,
+ 0x9D33, 0x9D41, 0x9D67, 0x9D36, 0x9D2E, 0x9D2F, 0x9D31, 0x9D38, 0x9D30,
+ 0x9D45, 0x9D42, 0x9D43, 0x9D3E, 0x9D37, 0x9D40, 0x9D3D, 0x7FF5, 0x9D2D,
+ 0x9E8A, 0x9E89, 0x9E8D, 0x9EB0, 0x9EC8, 0x9EDA, 0x9EFB, 0x9EFF, 0x9F24,
+ 0x9F23, 0x9F22, 0x9F54, 0x9FA0, 0x5131, 0x512D, 0x512E, 0x5698, 0x569C,
+ 0x5697, 0x569A, 0x569D, 0x5699, 0x5970, 0x5B3C, 0x5C69, 0x5C6A, 0x5DC0,
+ 0x5E6D, 0x5E6E, 0x61D8, 0x61DF, 0x61ED, 0x61EE, 0x61F1, 0x61EA, 0x61F0,
+ 0x61EB, 0x61D6, 0x61E9, 0x64FF, 0x6504, 0x64FD, 0x64F8, 0x6501, 0x6503,
+ 0x64FC, 0x6594, 0x65DB, 0x66DA, 0x66DB, 0x66D8, 0x6AC5, 0x6AB9, 0x6ABD,
+ 0x6AE1, 0x6AC6, 0x6ABA, 0x6AB6, 0x6AB7, 0x6AC7, 0x6AB4, 0x6AAD, 0x6B5E,
+ 0x6BC9, 0x6C0B, 0x7007, 0x700C, 0x700D, 0x7001, 0x7005, 0x7014, 0x700E,
+ 0x6FFF, 0x7000, 0x6FFB, 0x7026, 0x6FFC, 0x6FF7, 0x700A, 0x7201, 0x71FF,
+ 0x71F9, 0x7203, 0x71FD, 0x7376, 0x74B8, 0x74C0, 0x74B5, 0x74C1, 0x74BE,
+ 0x74B6, 0x74BB, 0x74C2, 0x7514, 0x7513, 0x765C, 0x7664, 0x7659, 0x7650,
+ 0x7653, 0x7657, 0x765A, 0x76A6, 0x76BD, 0x76EC, 0x77C2, 0x77BA, 0x790C,
+ 0x7913, 0x7914, 0x7909, 0x7910, 0x7912, 0x7911, 0x79AD, 0x79AC, 0x7A5F,
+ 0x7C1C, 0x7C29, 0x7C19, 0x7C20, 0x7C1F, 0x7C2D, 0x7C1D, 0x7C26, 0x7C28,
+ 0x7C22, 0x7C25, 0x7C30, 0x7E5C, 0x7E50, 0x7E56, 0x7E63, 0x7E58, 0x7E62,
+ 0x7E5F, 0x7E51, 0x7E60, 0x7E57, 0x7E53, 0x7FB5, 0x7FB3, 0x7FF7, 0x7FF8,
+ 0x8075, 0x81D1, 0x81D2, 0x81D0, 0x825F, 0x825E, 0x85B4, 0x85C6, 0x85C0,
+ 0x85C3, 0x85C2, 0x85B3, 0x85B5, 0x85BD, 0x85C7, 0x85C4, 0x85BF, 0x85CB,
+ 0x85CE, 0x85C8, 0x85C5, 0x85B1, 0x85B6, 0x85D2, 0x8624, 0x85B8, 0x85B7,
+ 0x85BE, 0x8669, 0x87E7, 0x87E6, 0x87E2, 0x87DB, 0x87EB, 0x87EA, 0x87E5,
+ 0x87DF, 0x87F3, 0x87E4, 0x87D4, 0x87DC, 0x87D3, 0x87ED, 0x87D8, 0x87E3,
+ 0x87D7, 0x87D9, 0x8801, 0x87F4, 0x87E8, 0x87DD, 0x8953, 0x894B, 0x894F,
+ 0x894C, 0x8946, 0x8950, 0x8951, 0x8949, 0x8B2A, 0x8B27, 0x8B23, 0x8B33,
+ 0x8B30, 0x8B35, 0x8B47, 0x8B2F, 0x8B3C, 0x8B3E, 0x8B31, 0x8B25, 0x8B37,
+ 0x8B26, 0x8B36, 0x8B2E, 0x8B24, 0x8B3B, 0x8B3D, 0x8B3A, 0x8C42, 0x8C75,
+ 0x8C99, 0x8C98, 0x8C97, 0x8CFE, 0x8D04, 0x8D02, 0x8D00, 0x8E5C, 0x8E62,
+ 0x8E60, 0x8E57, 0x8E56, 0x8E5E, 0x8E65, 0x8E67, 0x8E5B, 0x8E5A, 0x8E61,
+ 0x8E5D, 0x8E69, 0x8E54, 0x8F46, 0x8F47, 0x8F48, 0x8F4B, 0x9128, 0x913A,
+ 0x913B, 0x913E, 0x91A8, 0x91A5, 0x91A7, 0x91AF, 0x91AA, 0x93B5, 0x938C,
+ 0x9392, 0x93B7, 0x939B, 0x939D, 0x9389, 0x93A7, 0x938E, 0x93AA, 0x939E,
+ 0x93A6, 0x9395, 0x9388, 0x9399, 0x939F, 0x9380, 0x938D, 0x93B1, 0x9391,
+ 0x93B2, 0x93A4, 0x93A8, 0x93B4, 0x93A3, 0x95D2, 0x95D3, 0x95D1, 0x96B3,
+ 0x96D7, 0x96DA, 0x5DC2, 0x96DF, 0x96D8, 0x96DD, 0x9723, 0x9722, 0x9725,
+ 0x97AC, 0x97AE, 0x97A8, 0x97AB, 0x97A4, 0x97AA, 0x97A2, 0x97A5, 0x97D7,
+ 0x97D9, 0x97D6, 0x97D8, 0x97FA, 0x9850, 0x9851, 0x9852, 0x98B8, 0x9941,
+ 0x993C, 0x993A, 0x9A0F, 0x9A0B, 0x9A09, 0x9A0D, 0x9A04, 0x9A11, 0x9A0A,
+ 0x9A05, 0x9A07, 0x9A06, 0x9AC0, 0x9ADC, 0x9B08, 0x9B04, 0x9B05, 0x9B29,
+ 0x9B35, 0x9B4A, 0x9B4C, 0x9B4B, 0x9BC7, 0x9BC6, 0x9BC3, 0x9BBF, 0x9BC1,
+ 0x9BB5, 0x9BB8, 0x9BD3, 0x9BB6, 0x9BC4, 0x9BB9, 0x9BBD, 0x9D5C, 0x9D53,
+ 0x9D4F, 0x9D4A, 0x9D5B, 0x9D4B, 0x9D59, 0x9D56, 0x9D4C, 0x9D57, 0x9D52,
+ 0x9D54, 0x9D5F, 0x9D58, 0x9D5A, 0x9E8E, 0x9E8C, 0x9EDF, 0x9F01, 0x9F00,
+ 0x9F16, 0x9F25, 0x9F2B, 0x9F2A, 0x9F29, 0x9F28, 0x9F4C, 0x9F55, 0x5134,
+ 0x5135, 0x5296, 0x52F7, 0x53B4, 0x56AB, 0x56AD, 0x56A6, 0x56A7, 0x56AA,
+ 0x56AC, 0x58DA, 0x58DD, 0x58DB, 0x5912, 0x5B3D, 0x5B3E, 0x5B3F, 0x5DC3,
+ 0x5E70, 0x5FBF, 0x61FB, 0x6507, 0x6510, 0x650D, 0x6509, 0x650C, 0x650E,
+ 0x6584, 0x65DE, 0x65DD, 0x66DE, 0x6AE7, 0x6AE0, 0x6ACC, 0x6AD1, 0x6AD9,
+ 0x6ACB, 0x6ADF, 0x6ADC, 0x6AD0, 0x6AEB, 0x6ACF, 0x6ACD, 0x6ADE, 0x6B60,
+ 0x6BB0, 0x6C0C, 0x7019, 0x7027, 0x7020, 0x7016, 0x702B, 0x7021, 0x7022,
+ 0x7023, 0x7029, 0x7017, 0x7024, 0x701C, 0x720C, 0x720A, 0x7207, 0x7202,
+ 0x7205, 0x72A5, 0x72A6, 0x72A4, 0x72A3, 0x72A1, 0x74CB, 0x74C5, 0x74B7,
+ 0x74C3, 0x7516, 0x7660, 0x77C9, 0x77CA, 0x77C4, 0x77F1, 0x791D, 0x791B,
+ 0x7921, 0x791C, 0x7917, 0x791E, 0x79B0, 0x7A67, 0x7A68, 0x7C33, 0x7C3C,
+ 0x7C39, 0x7C2C, 0x7C3B, 0x7CEC, 0x7CEA, 0x7E76, 0x7E75, 0x7E78, 0x7E70,
+ 0x7E77, 0x7E6F, 0x7E7A, 0x7E72, 0x7E74, 0x7E68, 0x7F4B, 0x7F4A, 0x7F83,
+ 0x7F86, 0x7FB7, 0x7FFD, 0x7FFE, 0x8078, 0x81D7, 0x81D5, 0x820B, 0x8264,
+ 0x8261, 0x8263, 0x85EB, 0x85F1, 0x85ED, 0x85D9, 0x85E1, 0x85E8, 0x85DA,
+ 0x85D7, 0x85EC, 0x85F2, 0x85F8, 0x85D8, 0x85DF, 0x85E3, 0x85DC, 0x85D1,
+ 0x85F0, 0x85E6, 0x85EF, 0x85DE, 0x85E2, 0x8800, 0x87FA, 0x8803, 0x87F6,
+ 0x87F7, 0x8809, 0x880C, 0x880B, 0x8806, 0x87FC, 0x8808, 0x87FF, 0x880A,
+ 0x8802, 0x8962, 0x895A, 0x895B, 0x8957, 0x8961, 0x895C, 0x8958, 0x895D,
+ 0x8959, 0x8988, 0x89B7, 0x89B6, 0x89F6, 0x8B50, 0x8B48, 0x8B4A, 0x8B40,
+ 0x8B53, 0x8B56, 0x8B54, 0x8B4B, 0x8B55, 0x8B51, 0x8B42, 0x8B52, 0x8B57,
+ 0x8C43, 0x8C77, 0x8C76, 0x8C9A, 0x8D06, 0x8D07, 0x8D09, 0x8DAC, 0x8DAA,
+ 0x8DAD, 0x8DAB, 0x8E6D, 0x8E78, 0x8E73, 0x8E6A, 0x8E6F, 0x8E7B, 0x8EC2,
+ 0x8F52, 0x8F51, 0x8F4F, 0x8F50, 0x8F53, 0x8FB4, 0x9140, 0x913F, 0x91B0,
+ 0x91AD, 0x93DE, 0x93C7, 0x93CF, 0x93C2, 0x93DA, 0x93D0, 0x93F9, 0x93EC,
+ 0x93CC, 0x93D9, 0x93A9, 0x93E6, 0x93CA, 0x93D4, 0x93EE, 0x93E3, 0x93D5,
+ 0x93C4, 0x93CE, 0x93C0, 0x93D2, 0x93A5, 0x93E7, 0x957D, 0x95DA, 0x95DB,
+ 0x96E1, 0x9729, 0x972B, 0x972C, 0x9728, 0x9726, 0x97B3, 0x97B7, 0x97B6,
+ 0x97DD, 0x97DE, 0x97DF, 0x985C, 0x9859, 0x985D, 0x9857, 0x98BF, 0x98BD,
+ 0x98BB, 0x98BE, 0x9948, 0x9947, 0x9943, 0x99A6, 0x99A7, 0x9A1A, 0x9A15,
+ 0x9A25, 0x9A1D, 0x9A24, 0x9A1B, 0x9A22, 0x9A20, 0x9A27, 0x9A23, 0x9A1E,
+ 0x9A1C, 0x9A14, 0x9AC2, 0x9B0B, 0x9B0A, 0x9B0E, 0x9B0C, 0x9B37, 0x9BEA,
+ 0x9BEB, 0x9BE0, 0x9BDE, 0x9BE4, 0x9BE6, 0x9BE2, 0x9BF0, 0x9BD4, 0x9BD7,
+ 0x9BEC, 0x9BDC, 0x9BD9, 0x9BE5, 0x9BD5, 0x9BE1, 0x9BDA, 0x9D77, 0x9D81,
+ 0x9D8A, 0x9D84, 0x9D88, 0x9D71, 0x9D80, 0x9D78, 0x9D86, 0x9D8B, 0x9D8C,
+ 0x9D7D, 0x9D6B, 0x9D74, 0x9D75, 0x9D70, 0x9D69, 0x9D85, 0x9D73, 0x9D7B,
+ 0x9D82, 0x9D6F, 0x9D79, 0x9D7F, 0x9D87, 0x9D68, 0x9E94, 0x9E91, 0x9EC0,
+ 0x9EFC, 0x9F2D, 0x9F40, 0x9F41, 0x9F4D, 0x9F56, 0x9F57, 0x9F58, 0x5337,
+ 0x56B2, 0x56B5, 0x56B3, 0x58E3, 0x5B45, 0x5DC6, 0x5DC7, 0x5EEE, 0x5EEF,
+ 0x5FC0, 0x5FC1, 0x61F9, 0x6517, 0x6516, 0x6515, 0x6513, 0x65DF, 0x66E8,
+ 0x66E3, 0x66E4, 0x6AF3, 0x6AF0, 0x6AEA, 0x6AE8, 0x6AF9, 0x6AF1, 0x6AEE,
+ 0x6AEF, 0x703C, 0x7035, 0x702F, 0x7037, 0x7034, 0x7031, 0x7042, 0x7038,
+ 0x703F, 0x703A, 0x7039, 0x702A, 0x7040, 0x703B, 0x7033, 0x7041, 0x7213,
+ 0x7214, 0x72A8, 0x737D, 0x737C, 0x74BA, 0x76AB, 0x76AA, 0x76BE, 0x76ED,
+ 0x77CC, 0x77CE, 0x77CF, 0x77CD, 0x77F2, 0x7925, 0x7923, 0x7927, 0x7928,
+ 0x7924, 0x7929, 0x79B2, 0x7A6E, 0x7A6C, 0x7A6D, 0x7AF7, 0x7C49, 0x7C48,
+ 0x7C4A, 0x7C47, 0x7C45, 0x7CEE, 0x7E7B, 0x7E7E, 0x7E81, 0x7E80, 0x7FBA,
+ 0x7FFF, 0x8079, 0x81DB, 0x81D9, 0x8268, 0x8269, 0x8622, 0x85FF, 0x8601,
+ 0x85FE, 0x861B, 0x8600, 0x85F6, 0x8604, 0x8609, 0x8605, 0x860C, 0x85FD,
+ 0x8819, 0x8810, 0x8811, 0x8817, 0x8813, 0x8816, 0x8963, 0x8966, 0x89B9,
+ 0x89F7, 0x8B60, 0x8B6A, 0x8B5D, 0x8B68, 0x8B63, 0x8B65, 0x8B67, 0x8B6D,
+ 0x8DAE, 0x8E86, 0x8E88, 0x8E84, 0x8F59, 0x8F56, 0x8F57, 0x8F55, 0x8F58,
+ 0x8F5A, 0x908D, 0x9143, 0x9141, 0x91B7, 0x91B5, 0x91B2, 0x91B3, 0x940B,
+ 0x9413, 0x93FB, 0x9420, 0x940F, 0x9414, 0x93FE, 0x9415, 0x9410, 0x9428,
+ 0x9419, 0x940D, 0x93F5, 0x9400, 0x93F7, 0x9407, 0x940E, 0x9416, 0x9412,
+ 0x93FA, 0x9409, 0x93F8, 0x943C, 0x940A, 0x93FF, 0x93FC, 0x940C, 0x93F6,
+ 0x9411, 0x9406, 0x95DE, 0x95E0, 0x95DF, 0x972E, 0x972F, 0x97B9, 0x97BB,
+ 0x97FD, 0x97FE, 0x9860, 0x9862, 0x9863, 0x985F, 0x98C1, 0x98C2, 0x9950,
+ 0x994E, 0x9959, 0x994C, 0x994B, 0x9953, 0x9A32, 0x9A34, 0x9A31, 0x9A2C,
+ 0x9A2A, 0x9A36, 0x9A29, 0x9A2E, 0x9A38, 0x9A2D, 0x9AC7, 0x9ACA, 0x9AC6,
+ 0x9B10, 0x9B12, 0x9B11, 0x9C0B, 0x9C08, 0x9BF7, 0x9C05, 0x9C12, 0x9BF8,
+ 0x9C40, 0x9C07, 0x9C0E, 0x9C06, 0x9C17, 0x9C14, 0x9C09, 0x9D9F, 0x9D99,
+ 0x9DA4, 0x9D9D, 0x9D92, 0x9D98, 0x9D90, 0x9D9B, 0x9DA0, 0x9D94, 0x9D9C,
+ 0x9DAA, 0x9D97, 0x9DA1, 0x9D9A, 0x9DA2, 0x9DA8, 0x9D9E, 0x9DA3, 0x9DBF,
+ 0x9DA9, 0x9D96, 0x9DA6, 0x9DA7, 0x9E99, 0x9E9B, 0x9E9A, 0x9EE5, 0x9EE4,
+ 0x9EE7, 0x9EE6, 0x9F30, 0x9F2E, 0x9F5B, 0x9F60, 0x9F5E, 0x9F5D, 0x9F59,
+ 0x9F91, 0x513A, 0x5139, 0x5298, 0x5297, 0x56C3, 0x56BD, 0x56BE, 0x5B48,
+ 0x5B47, 0x5DCB, 0x5DCF, 0x5EF1, 0x61FD, 0x651B, 0x6B02, 0x6AFC, 0x6B03,
+ 0x6AF8, 0x6B00, 0x7043, 0x7044, 0x704A, 0x7048, 0x7049, 0x7045, 0x7046,
+ 0x721D, 0x721A, 0x7219, 0x737E, 0x7517, 0x766A, 0x77D0, 0x792D, 0x7931,
+ 0x792F, 0x7C54, 0x7C53, 0x7CF2, 0x7E8A, 0x7E87, 0x7E88, 0x7E8B, 0x7E86,
+ 0x7E8D, 0x7F4D, 0x7FBB, 0x8030, 0x81DD, 0x8618, 0x862A, 0x8626, 0x861F,
+ 0x8623, 0x861C, 0x8619, 0x8627, 0x862E, 0x8621, 0x8620, 0x8629, 0x861E,
+ 0x8625, 0x8829, 0x881D, 0x881B, 0x8820, 0x8824, 0x881C, 0x882B, 0x884A,
+ 0x896D, 0x8969, 0x896E, 0x896B, 0x89FA, 0x8B79, 0x8B78, 0x8B45, 0x8B7A,
+ 0x8B7B, 0x8D10, 0x8D14, 0x8DAF, 0x8E8E, 0x8E8C, 0x8F5E, 0x8F5B, 0x8F5D,
+ 0x9146, 0x9144, 0x9145, 0x91B9, 0x943F, 0x943B, 0x9436, 0x9429, 0x943D,
+ 0x9430, 0x9439, 0x942A, 0x9437, 0x942C, 0x9440, 0x9431, 0x95E5, 0x95E4,
+ 0x95E3, 0x9735, 0x973A, 0x97BF, 0x97E1, 0x9864, 0x98C9, 0x98C6, 0x98C0,
+ 0x9958, 0x9956, 0x9A39, 0x9A3D, 0x9A46, 0x9A44, 0x9A42, 0x9A41, 0x9A3A,
+ 0x9A3F, 0x9ACD, 0x9B15, 0x9B17, 0x9B18, 0x9B16, 0x9B3A, 0x9B52, 0x9C2B,
+ 0x9C1D, 0x9C1C, 0x9C2C, 0x9C23, 0x9C28, 0x9C29, 0x9C24, 0x9C21, 0x9DB7,
+ 0x9DB6, 0x9DBC, 0x9DC1, 0x9DC7, 0x9DCA, 0x9DCF, 0x9DBE, 0x9DC5, 0x9DC3,
+ 0x9DBB, 0x9DB5, 0x9DCE, 0x9DB9, 0x9DBA, 0x9DAC, 0x9DC8, 0x9DB1, 0x9DAD,
+ 0x9DCC, 0x9DB3, 0x9DCD, 0x9DB2, 0x9E7A, 0x9E9C, 0x9EEB, 0x9EEE, 0x9EED,
+ 0x9F1B, 0x9F18, 0x9F1A, 0x9F31, 0x9F4E, 0x9F65, 0x9F64, 0x9F92, 0x4EB9,
+ 0x56C6, 0x56C5, 0x56CB, 0x5971, 0x5B4B, 0x5B4C, 0x5DD5, 0x5DD1, 0x5EF2,
+ 0x6521, 0x6520, 0x6526, 0x6522, 0x6B0B, 0x6B08, 0x6B09, 0x6C0D, 0x7055,
+ 0x7056, 0x7057, 0x7052, 0x721E, 0x721F, 0x72A9, 0x737F, 0x74D8, 0x74D5,
+ 0x74D9, 0x74D7, 0x766D, 0x76AD, 0x7935, 0x79B4, 0x7A70, 0x7A71, 0x7C57,
+ 0x7C5C, 0x7C59, 0x7C5B, 0x7C5A, 0x7CF4, 0x7CF1, 0x7E91, 0x7F4F, 0x7F87,
+ 0x81DE, 0x826B, 0x8634, 0x8635, 0x8633, 0x862C, 0x8632, 0x8636, 0x882C,
+ 0x8828, 0x8826, 0x882A, 0x8825, 0x8971, 0x89BF, 0x89BE, 0x89FB, 0x8B7E,
+ 0x8B84, 0x8B82, 0x8B86, 0x8B85, 0x8B7F, 0x8D15, 0x8E95, 0x8E94, 0x8E9A,
+ 0x8E92, 0x8E90, 0x8E96, 0x8E97, 0x8F60, 0x8F62, 0x9147, 0x944C, 0x9450,
+ 0x944A, 0x944B, 0x944F, 0x9447, 0x9445, 0x9448, 0x9449, 0x9446, 0x973F,
+ 0x97E3, 0x986A, 0x9869, 0x98CB, 0x9954, 0x995B, 0x9A4E, 0x9A53, 0x9A54,
+ 0x9A4C, 0x9A4F, 0x9A48, 0x9A4A, 0x9A49, 0x9A52, 0x9A50, 0x9AD0, 0x9B19,
+ 0x9B2B, 0x9B3B, 0x9B56, 0x9B55, 0x9C46, 0x9C48, 0x9C3F, 0x9C44, 0x9C39,
+ 0x9C33, 0x9C41, 0x9C3C, 0x9C37, 0x9C34, 0x9C32, 0x9C3D, 0x9C36, 0x9DDB,
+ 0x9DD2, 0x9DDE, 0x9DDA, 0x9DCB, 0x9DD0, 0x9DDC, 0x9DD1, 0x9DDF, 0x9DE9,
+ 0x9DD9, 0x9DD8, 0x9DD6, 0x9DF5, 0x9DD5, 0x9DDD, 0x9EB6, 0x9EF0, 0x9F35,
+ 0x9F33, 0x9F32, 0x9F42, 0x9F6B, 0x9F95, 0x9FA2, 0x513D, 0x5299, 0x58E8,
+ 0x58E7, 0x5972, 0x5B4D, 0x5DD8, 0x882F, 0x5F4F, 0x6201, 0x6203, 0x6204,
+ 0x6529, 0x6525, 0x6596, 0x66EB, 0x6B11, 0x6B12, 0x6B0F, 0x6BCA, 0x705B,
+ 0x705A, 0x7222, 0x7382, 0x7381, 0x7383, 0x7670, 0x77D4, 0x7C67, 0x7C66,
+ 0x7E95, 0x826C, 0x863A, 0x8640, 0x8639, 0x863C, 0x8631, 0x863B, 0x863E,
+ 0x8830, 0x8832, 0x882E, 0x8833, 0x8976, 0x8974, 0x8973, 0x89FE, 0x8B8C,
+ 0x8B8E, 0x8B8B, 0x8B88, 0x8C45, 0x8D19, 0x8E98, 0x8F64, 0x8F63, 0x91BC,
+ 0x9462, 0x9455, 0x945D, 0x9457, 0x945E, 0x97C4, 0x97C5, 0x9800, 0x9A56,
+ 0x9A59, 0x9B1E, 0x9B1F, 0x9B20, 0x9C52, 0x9C58, 0x9C50, 0x9C4A, 0x9C4D,
+ 0x9C4B, 0x9C55, 0x9C59, 0x9C4C, 0x9C4E, 0x9DFB, 0x9DF7, 0x9DEF, 0x9DE3,
+ 0x9DEB, 0x9DF8, 0x9DE4, 0x9DF6, 0x9DE1, 0x9DEE, 0x9DE6, 0x9DF2, 0x9DF0,
+ 0x9DE2, 0x9DEC, 0x9DF4, 0x9DF3, 0x9DE8, 0x9DED, 0x9EC2, 0x9ED0, 0x9EF2,
+ 0x9EF3, 0x9F06, 0x9F1C, 0x9F38, 0x9F37, 0x9F36, 0x9F43, 0x9F4F, 0x9F71,
+ 0x9F70, 0x9F6E, 0x9F6F, 0x56D3, 0x56CD, 0x5B4E, 0x5C6D, 0x652D, 0x66ED,
+ 0x66EE, 0x6B13, 0x705F, 0x7061, 0x705D, 0x7060, 0x7223, 0x74DB, 0x74E5,
+ 0x77D5, 0x7938, 0x79B7, 0x79B6, 0x7C6A, 0x7E97, 0x7F89, 0x826D, 0x8643,
+ 0x8838, 0x8837, 0x8835, 0x884B, 0x8B94, 0x8B95, 0x8E9E, 0x8E9F, 0x8EA0,
+ 0x8E9D, 0x91BE, 0x91BD, 0x91C2, 0x946B, 0x9468, 0x9469, 0x96E5, 0x9746,
+ 0x9743, 0x9747, 0x97C7, 0x97E5, 0x9A5E, 0x9AD5, 0x9B59, 0x9C63, 0x9C67,
+ 0x9C66, 0x9C62, 0x9C5E, 0x9C60, 0x9E02, 0x9DFE, 0x9E07, 0x9E03, 0x9E06,
+ 0x9E05, 0x9E00, 0x9E01, 0x9E09, 0x9DFF, 0x9DFD, 0x9E04, 0x9EA0, 0x9F1E,
+ 0x9F46, 0x9F74, 0x9F75, 0x9F76, 0x56D4, 0x652E, 0x65B8, 0x6B18, 0x6B19,
+ 0x6B17, 0x6B1A, 0x7062, 0x7226, 0x72AA, 0x77D8, 0x77D9, 0x7939, 0x7C69,
+ 0x7C6B, 0x7CF6, 0x7E9A, 0x7E98, 0x7E9B, 0x7E99, 0x81E0, 0x81E1, 0x8646,
+ 0x8647, 0x8648, 0x8979, 0x897A, 0x897C, 0x897B, 0x89FF, 0x8B98, 0x8B99,
+ 0x8EA5, 0x8EA4, 0x8EA3, 0x946E, 0x946D, 0x946F, 0x9471, 0x9473, 0x9749,
+ 0x9872, 0x995F, 0x9C68, 0x9C6E, 0x9C6D, 0x9E0B, 0x9E0D, 0x9E10, 0x9E0F,
+ 0x9E12, 0x9E11, 0x9EA1, 0x9EF5, 0x9F09, 0x9F47, 0x9F78, 0x9F7B, 0x9F7A,
+ 0x9F79, 0x571E, 0x7066, 0x7C6F, 0x883C, 0x8DB2, 0x8EA6, 0x91C3, 0x9474,
+ 0x9478, 0x9476, 0x9475, 0x9A60, 0x9B2E, 0x9C74, 0x9C73, 0x9C71, 0x9C75,
+ 0x9E14, 0x9E13, 0x9EF6, 0x9F0A, 0x9FA4, 0x7068, 0x7065, 0x7CF7, 0x866A,
+ 0x883E, 0x883D, 0x883F, 0x8B9E, 0x8C9C, 0x8EA9, 0x8EC9, 0x974B, 0x9873,
+ 0x9874, 0x98CC, 0x9961, 0x99AB, 0x9A64, 0x9A66, 0x9A67, 0x9B24, 0x9E15,
+ 0x9E17, 0x9F48, 0x6207, 0x6B1E, 0x7227, 0x864C, 0x8EA8, 0x9482, 0x9480,
+ 0x9481, 0x9A69, 0x9A68, 0x9E19, 0x864B, 0x8B9F, 0x9483, 0x9C79, 0x9EB7,
+ 0x7675, 0x9A6B, 0x9C7A, 0x9E1D, 0x7069, 0x706A, 0x7229, 0x9EA4, 0x9F7E,
+ 0x9F49, 0x9F98, 0xFE19, 0x223C, 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,
+ 0xFE33, 0x2574, 0xFE34, 0xFE4F, 0x0308, 0xFF3E, 0x30FD, 0x30FE, 0x309D,
+ 0x309E, 0xFFFD, 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, 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, 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, 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, 0x4E41, 0x0000, 0x4E5A, 0x0000, 0x5202,
+ 0x4491, 0x9FB0, 0x5188, 0x9FB1, 0x0000, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD,
+ 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD,
+ 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD,
+ 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD,
+ 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD,
+ 0x00AC, 0xFFE4, 0xFF07, 0xFF02, 0x3231, 0x2116, 0x2121, 0x7881, 0x92B9,
+ 0x88CF, 0x58BB, 0x6052, 0x7CA7, 0x5AFA, 0x2554, 0x2566, 0x2557, 0x2560,
+ 0x256C, 0x2563, 0x255A, 0x2569, 0x255D, 0x2552, 0x2564, 0x2555, 0xFFFD,
+ 0xFFFD, 0xFFFD, 0x2558, 0x2567, 0x255B, 0x2553, 0x2565, 0x2556, 0x255F,
+ 0x256B, 0x2562, 0x2559, 0x2568, 0x255C, 0x2551, 0xFFFD, 0xFFFD, 0xFFFD,
+ 0xFFFD, 0xFFFD, 0x2593, 0xFFFD, 0xFFFD, 0xFE10, 0xFE11, 0xFE12, 0xFFFD,
+ 0xFE14, 0xFE13, 0xFE16, 0xFE15, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD,
+ 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD,
+ 0xFFFD, 0xFFFD, 0x0000, 0x57BE, 0x0000, 0x713E, 0x0000, 0x69A2, 0x0000,
+ 0x5B74, 0x7A49, 0x0000, 0x0000, 0x7A65, 0x7A7D, 0x0000, 0x7ABB, 0x7AB0,
+ 0x7AC2, 0x7AC3, 0x71D1, 0x0000, 0x41CA, 0x7ADA, 0x7ADD, 0x7AEA, 0x41EF,
+ 0x54B2, 0x0000, 0x7B0B, 0x7B55, 0x7B29, 0x0000, 0x0000, 0x7BA2, 0x7B6F,
+ 0x839C, 0x0000, 0x0000, 0x7BD0, 0x8421, 0x7B92, 0xFFFD, 0x0000, 0xFFFD,
+ 0x8492, 0x7BFA, 0xFFFD, 0x7C35, 0x0000, 0x7C44, 0x7C83, 0x0000, 0x7CA6,
+ 0x0000, 0x7CC9, 0x7CC7, 0x7CE6, 0xFFFD, 0x7CF3, 0x7CF5, 0x7E67, 0x451D,
+ 0x0000, 0x7D5D, 0x0000, 0x7D89, 0x7DAB, 0x7135, 0x7DB3, 0x7DD6, 0x0000,
+ 0x0000, 0x7DE4, 0x3D13, 0x7DF5, 0x0000, 0x7DE5, 0x0000, 0xFFFD, 0x0000,
+ 0x0000, 0x7E6E, 0xFFFD, 0x432B, 0x946C, 0x7E27, 0x7F40, 0x7F41, 0x7F47,
+ 0x7936, 0x0000, 0x99E1, 0x7F97, 0x0000, 0x7FA3, 0x0000, 0x0000, 0x455C,
+ 0x0000, 0x0000, 0x7FFA, 0x0000, 0xFA5B, 0x8008, 0x801D, 0xFFFD, 0x802F,
+ 0x0000, 0x0000, 0x803B, 0x803C, 0x8061, 0x0000, 0x4989, 0x0000, 0x0000,
+ 0x0000, 0x6725, 0x80A7, 0x0000, 0x8107, 0x811A, 0x58B0, 0x0000, 0x6C7F,
+ 0x0000, 0x64E7, 0x0000, 0x8218, 0x0000, 0x6A53, 0x0000, 0x0000, 0x447A,
+ 0x8229, 0x0000, 0x0000, 0x4FF9, 0x0000, 0x84E2, 0x8362, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x82AA, 0x691B, 0x0000, 0x41DB, 0x854B, 0x82D0,
+ 0x831A, 0x0000, 0x0000, 0x36C1, 0x0000, 0x0000, 0x827B, 0x82E2, 0x8318,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3DBF, 0x831D, 0x55EC, 0x8385,
+ 0x450B, 0x0000, 0x83AC, 0xFFFD, 0x83D3, 0x0000, 0x6A57, 0x855A, 0x3496,
+ 0x0000, 0x8458, 0x0000, 0x8471, 0x3DD3, 0x44E4, 0x6AA7, 0x844A, 0x7958,
+ 0xFFFD, 0x0000, 0x0000, 0x0000, 0x84DE, 0xFFFD, 0x8391, 0x44A0, 0x8493,
+ 0x84E4, 0x0000, 0x4240, 0x0000, 0x4543, 0x8534, 0x5AF2, 0x4523, 0x4527,
+ 0x8573, 0x4516, 0x67BF, 0x8616, 0x0000, 0x0000, 0x85C1, 0x0000, 0x8602,
+ 0x0000, 0x0000, 0x0000, 0x456A, 0x8628, 0x3648, 0x0000, 0x53F7, 0x0000,
+ 0x867E, 0xFFFD, 0x0000, 0x87EE, 0x0000, 0x87B1, 0x87DA, 0x880F, 0x5661,
+ 0x866C, 0x6856, 0x460F, 0x8845, 0x8846, 0x0000, 0x0000, 0x0000, 0x885E,
+ 0x889C, 0x465B, 0x88B4, 0x88B5, 0x88C5, 0x0000, 0x8987, 0xFFFD, 0xFFFD,
+ 0xFFFD, 0x89A7, 0x89BC, 0x0000, 0x89E7, 0x0000, 0x0000, 0x8A9C, 0x7793,
+ 0x91FE, 0x8A90, 0x0000, 0x7AE9, 0x0000, 0x4713, 0x0000, 0x717C, 0x8B0C,
+ 0x8B1F, 0x0000, 0x0000, 0x8B3F, 0xFFFD, 0x8B4D, 0x8AA9, 0x0000, 0x8B90,
+ 0x8B9B, 0x8AAF, 0x0000, 0x4615, 0x884F, 0x8C9B, 0x0000, 0x0000, 0x0000,
+ 0x3725, 0x0000, 0x8CD6, 0x0000, 0x0000, 0x8D12, 0x8D03, 0x0000, 0x8CDB,
+ 0x705C, 0x8D11, 0x3ED0, 0x0000, 0x8DA9, 0x0000, 0x0000, 0x0000, 0x3B7C,
+ 0x0000, 0x0000, 0x7AE7, 0x8EAD, 0x8EB6, 0x8EC3, 0x92D4, 0x8F19, 0x8F2D,
+ 0x0000, 0x0000, 0x8FA5, 0x9303, 0x0000, 0x0000, 0x8FB3, 0xFFFD, 0x0000,
+ 0x0000, 0x0000, 0x5EF8, 0x0000, 0x8FF9, 0xFFFD, 0x0000, 0x3980, 0x0000,
+ 0x9037, 0x0000, 0x0000, 0x9061, 0x0000, 0x0000, 0x90A8, 0x0000, 0x90C4,
+ 0x0000, 0x90AE, 0xFA26, 0x9167, 0x91A9, 0x91C4, 0x7CAC, 0x0000, 0x0000,
+ 0x920E, 0x6C9F, 0x9241, 0x9262, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x932C, 0x936B, 0x0000, 0x0000, 0x5AC3, 0x0000, 0x0000, 0x4965,
+ 0x9244, 0x0000, 0x0000, 0x0000, 0x9373, 0x945B, 0x8EBC, 0x9585, 0x95A6,
+ 0x9426, 0x95A0, 0x6FF6, 0x42B9, 0x0000, 0x0000, 0x0000, 0x49DF, 0x6C1C,
+ 0x967B, 0x9696, 0x416C, 0x96A3, 0x0000, 0x61DA, 0xE4AD, 0x78F5, 0x0000,
+ 0x96BD, 0x53CC, 0x49A1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x9731, 0x8642, 0x9736, 0x4A0F, 0x453D, 0x4585, 0x0000,
+ 0x7075, 0x5B41, 0x971B, 0xFFFD, 0x0000, 0x9757, 0x5B4A, 0x0000, 0x975F,
+ 0x9425, 0x50D0, 0x0000, 0x0000, 0x9789, 0x979F, 0x97B1, 0x97BE, 0x97C0,
+ 0x97D2, 0x97E0, 0x0000, 0x97EE, 0x741C, 0x0000, 0xFFFD, 0x97F5, 0x0000,
+ 0x0000, 0x4AD1, 0x9834, 0x9833, 0x984B, 0x9866, 0x3B0E, 0x0000, 0x3D51,
+ 0x0000, 0x0000, 0x0000, 0x98CA, 0x98B7, 0x98C8, 0x98C7, 0x4AFF, 0x0000,
+ 0x0000, 0x55B0, 0x98E1, 0x98E6, 0x98EC, 0x9378, 0x9939, 0x0000, 0x4B72,
+ 0x0000, 0x0000, 0x99F5, 0x9A0C, 0x9A3B, 0x9A10, 0x9A58, 0x0000, 0x36C4,
+ 0x0000, 0x0000, 0x9AE0, 0x9AE2, 0x0000, 0x9AF4, 0x4C0E, 0x9B14, 0x9B2D,
+ 0x0000, 0x5034, 0x9B34, 0x38C3, 0x0000, 0x9B50, 0x9B40, 0x0000, 0x5A45,
+ 0x0000, 0x9B8E, 0x9C02, 0x9BFF, 0x9C0C, 0x0000, 0x9DD4, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x9D7E, 0x9D83, 0x0000, 0x9E0E, 0x9DC4,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x9D39, 0x0000, 0x0000, 0x9E90, 0x9E95,
+ 0x9E9E, 0x9EA2, 0x4D34, 0x9EAA, 0x9EAF, 0x0000, 0x9EC1, 0x3B60, 0x39E5,
+ 0x3D1D, 0x4F32, 0x37BE, 0x0000, 0x9F02, 0x9F08, 0x4B96, 0x9424, 0x0000,
+ 0x9F17, 0x0000, 0x9F39, 0x569F, 0x568A, 0x9F45, 0x99B8, 0x0000, 0x97F2,
+ 0x847F, 0xFFFD, 0x9F69, 0x7ADC, 0x9F8E, 0x7216, 0x4BBE, 0x0000, 0x0000,
+ 0x7177, 0x0000, 0x0000, 0x0000, 0x739E, 0x0000, 0x0000, 0x799F, 0x0000,
+ 0x0000, 0x9369, 0x93F3, 0x0000, 0x92EC, 0x9381, 0x93CB, 0x0000, 0x0000,
+ 0x7217, 0x3EEB, 0x7772, 0x7A43, 0x70D0, 0x0000, 0x0000, 0x717E, 0x0000,
+ 0x70A3, 0x0000, 0x0000, 0x3EC7, 0x0000, 0x0000, 0x0000, 0x3722, 0x0000,
+ 0x0000, 0x36E1, 0x0000, 0x0000, 0x0000, 0x3723, 0x0000, 0x575B, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x8503, 0x0000, 0xFFFD, 0x8455, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x44F4, 0x0000, 0x0000, 0x0000,
+ 0x67F9, 0x3733, 0x3C15, 0x3DE7, 0x586C, 0x0000, 0x6810, 0x4057, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x54CB, 0x569E, 0x0000, 0x5692, 0x0000,
+ 0x0000, 0x0000, 0xFFFD, 0x0000, 0x939C, 0x4EF8, 0x512B, 0x3819, 0x0000,
+ 0x4EBC, 0x0000, 0xFFFD, 0x4F4B, 0x4F8A, 0x0000, 0x5A68, 0x0000, 0x0000,
+ 0x3999, 0x0000, 0x0000, 0x3435, 0x4F29, 0x0000, 0x0000, 0x0000, 0x8ADA,
+ 0x0000, 0x4E98, 0x50CD, 0x510D, 0x4FA2, 0x4F03, 0x0000, 0x0000, 0x4F42,
+ 0x502E, 0x506C, 0x5081, 0x4FCC, 0x4FE5, 0x5058, 0x50FC, 0x6E76, 0x0000,
+ 0x0000, 0x0000, 0x6D72, 0x0000, 0x0000, 0x51A8, 0x51C3, 0x0000, 0x44DD,
+ 0x0000, 0x0000, 0x0000, 0x8D7A, 0x0000, 0x0000, 0x5259, 0x52A4, 0x0000,
+ 0x52E1, 0xFFFD, 0x467A, 0x718C, 0x0000, 0x0000, 0x0000, 0x0000, 0x69D1,
+ 0x0000, 0xFFFD, 0x3EDE, 0x7499, 0x7414, 0x7456, 0x7398, 0x4B8E, 0x0000,
+ 0x0000, 0x53D0, 0x3584, 0x720F, 0x0000, 0x55B4, 0x0000, 0x54CD, 0x0000,
+ 0x571D, 0x925D, 0x96F4, 0x57DD, 0x578D, 0x577F, 0x363E, 0x58CB, 0x5A99,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x5A2C, 0x59B8, 0x5A7E, 0x5ACF, 0x5A12,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x36F5, 0x6D05, 0x7443, 0x5A21, 0x0000,
+ 0x5A81, 0x0000, 0x0000, 0x93E0, 0x748C, 0x0000, 0x7105, 0x4972, 0x9408,
+ 0x0000, 0x93BD, 0x37A0, 0x5C1E, 0x5C9E, 0x5E5E, 0x5E48, 0x0000, 0x0000,
+ 0x0000, 0x5ECD, 0x5B4F, 0x0000, 0x0000, 0x3701, 0x0000, 0x36DD, 0x0000,
+ 0x36D3, 0x812A, 0x0000, 0x0000, 0x0000, 0x0000, 0x5F0C, 0x5F0E, 0x0000,
+ 0x0000, 0x5A6B, 0x0000, 0x5B44, 0x0000, 0x8860, 0x607E, 0x0000, 0x0000,
+ 0x5FDB, 0x3EB8, 0x0000, 0x0000, 0x0000, 0x0000, 0x61C0, 0x0000, 0x0000,
+ 0x0000, 0x6199, 0x6198, 0x6075, 0x0000, 0x0000, 0x0000, 0x0000, 0x6471,
+ 0x0000, 0x0000, 0x3A29, 0x0000, 0x0000, 0x0000, 0x0000, 0x6337, 0x64B6,
+ 0x6331, 0x63D1, 0x0000, 0x0000, 0x62A4, 0x0000, 0x643B, 0x656B, 0x6972,
+ 0x3BF4, 0x0000, 0x0000, 0x0000, 0x0000, 0x550D, 0x0000, 0x0000, 0x0000,
+ 0x66CE, 0x0000, 0x0000, 0x3AE0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x78EE, 0x0000, 0x0000, 0x0000, 0x3464, 0x0000, 0x0000, 0x0000,
+ 0x668E, 0x0000, 0x666B, 0x4B93, 0x6630, 0x0000, 0x0000, 0x6663, 0x0000,
+ 0x0000, 0x661E, 0x0000, 0x38D1, 0x0000, 0x0000, 0x3B99, 0x0000, 0x0000,
+ 0x74D0, 0x3B96, 0x0000, 0x68B6, 0xFFFD, 0x3BC4, 0x6ABE, 0x0000, 0x0000,
+ 0x6A33, 0x6A52, 0x6AC9, 0x6B05, 0x0000, 0x6511, 0x6898, 0x6A4C, 0x3BD7,
+ 0x6A7A, 0x6B57, 0x0000, 0x0000, 0x93A0, 0x92F2, 0x0000, 0x0000, 0x9289,
+ 0x0000, 0x0000, 0x9467, 0x6DA5, 0x6F0B, 0xFFFD, 0x0000, 0x3D8F, 0x6E04,
+ 0x0000, 0x5A3D, 0x6E0A, 0x5847, 0x6D24, 0x7842, 0x713B, 0x0000, 0x0000,
+ 0x70F1, 0x7250, 0x7287, 0x7294, 0x0000, 0x0000, 0x5179, 0x0000, 0x0000,
+ 0x747A, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3F06, 0x3EB1, 0x0000,
+ 0x0000, 0x0000, 0x60A7, 0x3EF3, 0x74CC, 0x743C, 0x9387, 0x7437, 0x449F,
+ 0x0000, 0x4551, 0x7583, 0x3F63, 0x0000, 0x0000, 0x3F58, 0x7555, 0x7673,
+ 0x0000, 0xFFFD, 0x7468, 0x0000, 0x0000, 0x0000, 0x3AFB, 0x3DCD, 0x0000,
+ 0x3EFF, 0x0000, 0x0000, 0x91FA, 0x5732, 0x9342, 0x0000, 0x0000, 0x50DF,
+ 0x0000, 0x0000, 0x7778, 0x0000, 0x770E, 0x770F, 0x777B, 0x0000, 0x0000,
+ 0x3A5E, 0x0000, 0x7438, 0x749B, 0x3EBF, 0x0000, 0x0000, 0x40C8, 0x0000,
+ 0x0000, 0x9307, 0x0000, 0x781E, 0x788D, 0x7888, 0x78D2, 0x73D0, 0x7959,
+ 0x0000, 0x0000, 0x410E, 0xFFFD, 0xFFFD, 0x79A5, 0x6A2D, 0x0000, 0x7A3A,
+ 0x79F4, 0x416E, 0x0000, 0x4132, 0x9235, 0x79F1, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x3597, 0x556B, 0x3570, 0x36AA, 0x0000, 0x0000, 0x7AE2,
+ 0x5A59, 0x0000, 0x0000, 0x0000, 0x5A0D, 0x0000, 0x78F0, 0x5A2A, 0x0000,
+ 0x7AFE, 0x41F9, 0x7C5D, 0x7C6D, 0x4211, 0x0000, 0x0000, 0x0000, 0x7CCD,
+ 0x0000, 0x0000, 0x7C8E, 0x7C7C, 0x7CAE, 0x6AB2, 0x7DDC, 0x7E07, 0x7DD3,
+ 0x7F4E, 0x0000, 0x0000, 0x0000, 0x7D97, 0x0000, 0x426A, 0x0000, 0x0000,
+ 0x67D6, 0x0000, 0x0000, 0x57C4, 0x0000, 0x0000, 0x7FDD, 0x7B27, 0x0000,
+ 0x0000, 0x0000, 0x7B0C, 0x0000, 0x99E6, 0x8645, 0x9A63, 0x6A1C, 0x0000,
+ 0x0000, 0x0000, 0x9A1F, 0x0000, 0x8495, 0x0000, 0x0000, 0x44EA, 0x8137,
+ 0x4402, 0x80C6, 0x8109, 0x8142, 0x0000, 0x98C3, 0x0000, 0x8262, 0x8265,
+ 0x0000, 0x8453, 0x0000, 0x8610, 0x0000, 0x5A86, 0x417F, 0x0000, 0x5B2B,
+ 0x0000, 0x5AE4, 0x0000, 0x86A0, 0x0000, 0x0000, 0x882D, 0x0000, 0x5A02,
+ 0x886E, 0x4F45, 0x8887, 0x88BF, 0x88E6, 0x8965, 0x894D, 0x0000, 0x8954,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3EAD, 0x84A3, 0x46F5,
+ 0x46CF, 0x37F2, 0x8A3D, 0x8A1C, 0x0000, 0x5F4D, 0x922B, 0x0000, 0x65D4,
+ 0x7129, 0x70C4, 0x0000, 0x9D6D, 0x8C9F, 0x8CE9, 0x0000, 0x599A, 0x77C3,
+ 0x59F0, 0x36D4, 0x8E2A, 0x8EA7, 0x0000, 0x8F30, 0x8F4A, 0x42F4, 0x6C58,
+ 0x6FBB, 0x0000, 0x489B, 0x6F79, 0x6E8B, 0x0000, 0x9BE9, 0x36B5, 0x0000,
+ 0x90BB, 0x48B4, 0x5571, 0x4906, 0x91BB, 0x9404, 0x0000, 0x4062, 0x0000,
+ 0x9427, 0x0000, 0x0000, 0x84E5, 0x8A2B, 0x9599, 0x95A7, 0x9597, 0x9596,
+ 0x0000, 0x7445, 0x3EC2, 0x0000, 0x0000, 0x0000, 0x3EE7, 0x0000, 0x968F,
+ 0x0000, 0x0000, 0x0000, 0x3ECC, 0x0000, 0x0000, 0x0000, 0x7412, 0x746B,
+ 0x3EFC, 0x9741, 0x0000, 0x6847, 0x4A1D, 0x0000, 0x0000, 0xFFFD, 0x9368,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x92BA, 0x5B11, 0x8B69, 0x493C, 0x73F9,
+ 0x0000, 0x979B, 0xFFFD, 0x9938, 0x0000, 0x5DC1, 0x0000, 0x0000, 0x981F,
+ 0x0000, 0x92F6, 0x0000, 0x91E5, 0x44C0, 0x0000, 0x0000, 0x0000, 0x98DC,
+ 0x0000, 0x3F00, 0x922A, 0x4925, 0x8414, 0x993B, 0x994D, 0x0000, 0x3DFD,
+ 0xFFFD, 0x4B6F, 0x99AA, 0x9A5C, 0x0000, 0x0000, 0x6A8F, 0x9A21, 0x5AFE,
+ 0x9A2F, 0x0000, 0x4B90, 0x0000, 0x99BC, 0x4BBD, 0x4B97, 0x937D, 0x5872,
+ 0x0000, 0x5822, 0x0000, 0x0000, 0x7844, 0x0000, 0x0000, 0x68C5, 0x3D7D,
+ 0x9458, 0x3927, 0x6150, 0x0000, 0x0000, 0x6107, 0x9C4F, 0x9C53, 0x9C7B,
+ 0x9C35, 0x9C10, 0x9B7F, 0x9BCF, 0x0000, 0x9B9F, 0x0000, 0x0000, 0x9D21,
+ 0x4CAE, 0x0000, 0x9E18, 0x4CB0, 0x9D0C, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x9DA5, 0x84BD, 0x0000, 0x0000, 0x0000, 0x85FC, 0x4533, 0x0000, 0x0000,
+ 0x0000, 0x8420, 0x85EE, 0x0000, 0x0000, 0x0000, 0x79E2, 0x0000, 0x0000,
+ 0x0000, 0x3D62, 0x93DB, 0x92BE, 0x9348, 0x0000, 0x78B9, 0x9277, 0x944D,
+ 0x4FE4, 0x3440, 0x9064, 0x0000, 0x783D, 0x7854, 0x78B6, 0x784B, 0x0000,
+ 0x0000, 0x0000, 0x369A, 0x4F72, 0x6FDA, 0x6FD9, 0xFFFD, 0x701E, 0x5414,
+ 0x0000, 0x57BB, 0x58F3, 0x578A, 0x9D16, 0x57D7, 0x7134, 0x34AF, 0x0000,
+ 0x71EB, 0x0000, 0x0000, 0xFFFD, 0x0000, 0x0000, 0x610C, 0x5ACE, 0x5A0B,
+ 0x42BC, 0x0000, 0x372C, 0x4B7B, 0x0000, 0x93BB, 0x93B8, 0x0000, 0x0000,
+ 0x8472, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5994, 0x0000, 0x0000,
+ 0x7DA8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x92E5, 0x73E2, 0x3EE9,
+ 0x74B4, 0x0000, 0x0000, 0x3EE1, 0x0000, 0x6AD8, 0x73F3, 0x73FB, 0x3ED6,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7448, 0x0000,
+ 0x70A5, 0x0000, 0x9284, 0x73E6, 0x935F, 0x0000, 0x9331, 0x0000, 0x0000,
+ 0x9386, 0x0000, 0x0000, 0x4935, 0x0000, 0x716B, 0x0000, 0x0000, 0x56A4,
+ 0x0000, 0x0000, 0x0000, 0x5502, 0x79C4, 0x0000, 0x7DFE, 0x0000, 0x0000,
+ 0x0000, 0x452E, 0x9401, 0x370A, 0x0000, 0x0000, 0x59B0, 0x0000, 0x0000,
+ 0x0000, 0x5AA1, 0x36E2, 0x0000, 0x36B0, 0x925F, 0x5A79, 0x0000, 0x0000,
+ 0x9374, 0x3CCD, 0x0000, 0x4A96, 0x398A, 0x50F4, 0x3D69, 0x3D4C, 0x0000,
+ 0x7175, 0x42FB, 0x0000, 0x6E0F, 0x0000, 0x44EB, 0x6D57, 0x0000, 0x7067,
+ 0x6CAF, 0x3CD6, 0x0000, 0x0000, 0x6E02, 0x6F0C, 0x3D6F, 0x0000, 0x7551,
+ 0x36BC, 0x34C8, 0x4680, 0x3EDA, 0x4871, 0x59C4, 0x926E, 0x493E, 0x8F41,
+ 0x0000, 0x0000, 0x5812, 0x57C8, 0x36D6, 0x0000, 0x70FE, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x68B9, 0x6967, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x6A1A, 0x0000, 0x0000, 0x843E, 0x44DF,
+ 0x44CE, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFFD, 0xFFFD, 0x833D, 0x0000,
+ 0x83ED, 0x0000, 0x0000, 0x0000, 0x5989, 0x5A82, 0x0000, 0x5A61, 0x5A71,
+ 0x0000, 0x0000, 0x372D, 0x59EF, 0x0000, 0x36C7, 0x718E, 0x9390, 0x669A,
+ 0x0000, 0x5A6E, 0x5A2B, 0x0000, 0x6A2B, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x711D, 0x0000, 0x0000, 0x4FB0, 0x0000, 0x5CC2, 0x0000, 0x0000, 0x0000,
+ 0x6A0C, 0x0000, 0x0000, 0xFFFD, 0x7133, 0x0000, 0x3DA5, 0x6CDF, 0x0000,
+ 0x59EB, 0x5F5C, 0x0000, 0x7CD3, 0x0000, 0x0000, 0x0000, 0x906C, 0x81F6,
+ 0x770C, 0x6CA2, 0x56FD, 0x5869, 0x6761, 0x5C5E, 0x58F2, 0x70B9, 0x6803,
+ 0x8FBB, 0x8FBC, 0x4E21, 0x7B39, 0x3DCC, 0x732A, 0x7560, 0x583A, 0x82A6,
+ 0x698A, 0x60E3, 0x4EEE, 0x99C4, 0x9EBF, 0x5301, 0x67A0, 0x60E8, 0x51B4,
+ 0x7A83, 0x9C3A, 0x7AC8, 0x691A, 0x59AC, 0x5840, 0x546A, 0x60E7, 0x567A,
+ 0x6955, 0x9C2F, 0x87A5, 0x5C20, 0x5E0B, 0x671E, 0x84AD, 0x8B81, 0x4E78,
+ 0x62C3, 0x6855, 0xFFFD, 0x82FD, 0x89A5, 0x8FA0, 0x97B8, 0x9847, 0x9ABD,
+ 0x5FB1, 0x6648, 0x66BF, 0x0000, 0xFFFD, 0x0000, 0xFFFD, 0xFFFD, 0x0000,
+ 0x670E, 0x6918, 0x0000, 0x0000, 0x0000, 0x0000, 0x48D0, 0x4AB8, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x51D2, 0x0000, 0x599F, 0x0000, 0x3BBE, 0x0000,
+ 0x399B, 0x0000, 0x0000, 0x3762, 0x0000, 0x8B5E, 0x0000, 0xFFFD, 0x7209,
+ 0x0000, 0x0000, 0x8EDA, 0x528F, 0x7171, 0x0000, 0x0000, 0x55BC, 0x0000,
+ 0x3473, 0x0000, 0x4718, 0x0000, 0x5066, 0x34FB, 0x0000, 0xFFFD, 0x477C,
+ 0x0000, 0x0000, 0xFFFD, 0x0000, 0x9056, 0x0000, 0x8B62, 0x5D5B, 0x0000,
+ 0xFFFD, 0x0000, 0x8AEA, 0x0000, 0x0000, 0x4BC0, 0x0000, 0x9465, 0x0000,
+ 0x6195, 0x5A27, 0x0000, 0x0000, 0x0000, 0x4E6A, 0x0000, 0x9656, 0x6D8F,
+ 0x0000, 0x8977, 0x0000, 0xFFFD, 0x7B42, 0x0000, 0x0000, 0xFFFD, 0x7A45,
+ 0x9A26, 0x365F, 0x0000, 0x0000, 0x7983, 0x5D2C, 0x0000, 0xFFFD, 0x46D0,
+ 0x753B, 0x8865, 0x58B6, 0x371C, 0x0000, 0x3C54, 0x9281, 0x0000, 0x9330,
+ 0x0000, 0x6C39, 0x0000, 0x8827, 0x88F5, 0x0000, 0x0000, 0x0000, 0x6EB8,
+ 0x0000, 0x0000, 0x39A4, 0xFFFD, 0xFFFD, 0x453F, 0x66B6, 0x0000, 0x0000,
+ 0x8943, 0x40DF, 0x0000, 0x39A1, 0x0000, 0x0000, 0x0000, 0x71AD, 0x8366,
+ 0x0000, 0xFFFD, 0x4CB7, 0x0000, 0x0000, 0x0000, 0x7B43, 0x797E, 0x6FB5,
+ 0x0000, 0x6A03, 0x0000, 0x53A2, 0x0000, 0x93BF, 0x6836, 0x975D, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x5D85, 0x0000, 0x5715, 0x9823, 0x0000, 0x5DAB,
+ 0x0000, 0x65BE, 0x69D5, 0x53D2, 0x0000, 0x0000, 0x3C11, 0x6736, 0x0000,
+ 0x35CA, 0x48FA, 0xFFFD, 0x7808, 0x9255, 0x43F2, 0x43DF, 0x59F8, 0xFFFD,
+ 0x568B, 0x0000, 0x9012, 0x55C1, 0x4509, 0x7E7F, 0x6F56, 0x6AB1, 0x34E4,
+ 0x0000, 0x373A, 0xFFFD, 0x0000, 0x0000, 0x3DEB, 0x0000, 0x0000, 0x56BF,
+ 0x8E0E, 0x5B6D, 0x63DE, 0xFFFD, 0x6530, 0x562D, 0x541A, 0x0000, 0x4C7D,
+ 0x5622, 0x561E, 0x7F49, 0x5975, 0x0000, 0x8770, 0x8117, 0x9D5E, 0x8D18,
+ 0x763B, 0x9C45, 0x764E, 0x77B9, 0x9345, 0x5432, 0x8148, 0x82F7, 0x5625,
+ 0x8132, 0x8418, 0x80BD, 0x55EA, 0x7962, 0x5643, 0x5416, 0x0000, 0x35CE,
+ 0x5605, 0x55F1, 0x66F1, 0x0000, 0x362D, 0x7534, 0x55F0, 0x55BA, 0x5497,
+ 0x5572, 0x0000, 0x0000, 0x5ED0, 0x0000, 0x0000, 0x0000, 0x9EAB, 0x7D5A,
+ 0xFFFD, 0x0000, 0x629D, 0x976D, 0x5494, 0x8CCD, 0x71F6, 0x9176, 0x63FC,
+ 0x63B9, 0x63FE, 0x5569, 0x0000, 0x9C72, 0x0000, 0x519A, 0x34DF, 0x0000,
+ 0x51A7, 0x544D, 0x551E, 0x5513, 0x7666, 0x8E2D, 0x0000, 0x75B1, 0x80B6,
+ 0x8804, 0xFFFD, 0x88C7, 0x81B6, 0x841C, 0x44EC, 0x7304, 0x830B, 0x567B,
+ 0x9170, 0x9208, 0x0000, 0x7266, 0x474E, 0x0000, 0x40FA, 0x9C5D, 0x651F,
+ 0x48F3, 0x0000, 0x0000, 0xFFFD, 0x0000, 0xED2B, 0x0000, 0x71A3, 0x7E8E,
+ 0x9D50, 0x3577, 0x6CB2, 0x5367, 0x39DC, 0x0000, 0x822D, 0x544B, 0xED43,
+ 0x3A52, 0x7374, 0x0000, 0x4D09, 0x9BED, 0xFFFD, 0x4C5B, 0x0000, 0x845C,
+ 0x0000, 0x632E, 0x7D25, 0x3A2A, 0x9008, 0x52CC, 0x3E74, 0x367A, 0x45E9,
+ 0x0000, 0x7640, 0x5AF0, 0x0000, 0x787A, 0x0000, 0x58A7, 0x40BF, 0x567C,
+ 0x9B8B, 0x5D74, 0x7654, 0x0000, 0x9E85, 0x4CE1, 0xFFFD, 0x37FB, 0x6119,
+ 0x0000, 0xED73, 0x565D, 0x0000, 0x5234, 0x35AD, 0xFFFD, 0x9D7C, 0x7C56,
+ 0x9B39, 0x57DE, 0x5C53, 0x64D3, 0x0000, 0x0000, 0x86AD, 0x0000, 0x0000,
+ 0xED8C, 0x51FE, 0x0000, 0x5D8E, 0x9703, 0x0000, 0x9E81, 0x904C, 0x7B1F,
+ 0x9B02, 0x5CD1, 0x7BA3, 0x6268, 0x6335, 0x9AFF, 0x7BCF, 0x9B2A, 0x7C7E,
+ 0xFFFD, 0x7C42, 0x7C86, 0x9C15, 0x7BFC, 0x9B09, 0xFFFD, 0x9C2E, 0x9F5A,
+ 0x5573, 0x5BC3, 0x4FFD, 0x9E98, 0x4FF2, 0x5260, 0x52D1, 0x5767, 0x5056,
+ 0x59B7, 0x5E12, 0x97C8, 0x9DAB, 0x8F5C, 0x5469, 0x97B4, 0x9940, 0x97BA,
+ 0x532C, 0x6130, 0x692C, 0x53DA, 0x9C0A, 0x9D02, 0x4C3B, 0x9641, 0x6980,
+ 0x50A6, 0x7546, 0x0000, 0x99DA, 0x5273, 0xEDC9, 0x9159, 0x9681, 0x915C,
+ 0xEDCD, 0x9151, 0x0000, 0x637F, 0x6ACA, 0x5611, 0x918E, 0x757A, 0x6285,
+ 0x734F, 0x7C70, 0x0000, 0xEDDC, 0x76D6, 0x9B9D, 0x4E2A, 0x0000, 0x83BE,
+ 0x8842, 0xEDE4, 0x5C4A, 0x69C0, 0xFFFD, 0xFFFD, 0x521F, 0x5DF5, 0x4ECE,
+ 0x6C31, 0x0000, 0x4F39, 0x549C, 0xFFFD, 0x529A, 0x8D82, 0x35FE, 0xFFFD,
+ 0x35F3, 0xEDF6, 0x6B52, 0x917C, 0x9FA5, 0x9B97, 0x982E, 0x98B4, 0x9ABA,
+ 0x9EA8, 0x9E84, 0x7B14, 0xEE02, 0x6BFA, 0x8818, 0x7F78, 0xEE06, 0x5620,
+ 0x0000, 0x8E77, 0x9F53, 0xEE0B, 0x8DD4, 0x8E4F, 0x9E1C, 0x8E01, 0x6282,
+ 0x0000, 0x8E28, 0x8E75, 0x7AD3, 0x7A3E, 0x78D8, 0x6CEA, 0x8A67, 0x7607,
+ 0x9F26, 0x6CCE, 0x87D6, 0x75C3, 0x0000, 0x7853, 0x8D0C, 0x72E2, 0x7371,
+ 0x8B2D, 0x7302, 0x74F1, 0x8CEB, 0x0000, 0x862F, 0x5FBA, 0x88A0, 0x44B7,
+ 0xEE2F, 0x0000, 0xEE32, 0x8A7E, 0x0000, 0xEE35, 0x60FD, 0x7667, 0x9AD7,
+ 0x9D44, 0x936E, 0x9B8F, 0x87F5, 0xEE3D, 0xFFFD, 0x8CF7, 0x732C, 0x9721,
+ 0x9BB0, 0x35D6, 0x72B2, 0x4C07, 0x7C51, 0x994A, 0x6159, 0x4C04, 0x9E96,
+ 0x617D, 0xEE4D, 0x575F, 0x616F, 0x62A6, 0x6239, 0xFFFD, 0x3A5C, 0x61E2,
+ 0x53AA, 0x6364, 0x6802, 0x35D2, 0x5D57, 0x8FDA, 0x0000, 0xEE5E, 0x50D9,
+ 0x7906, 0x5332, 0x9638, 0x0000, 0x4065, 0xEE66, 0x77FE, 0xEE68, 0x7CC2,
+ 0x0000, 0x7CDA, 0x7A2D, 0x8066, 0x8063, 0x7D4D, 0x7505, 0x74F2, 0x8994,
+ 0x821A, 0x670C, 0x8062, 0x0000, 0x805B, 0x74F0, 0x8103, 0x7724, 0x8989,
+ 0x0000, 0x7553, 0x87A9, 0x87CE, 0x81C8, 0x878C, 0x8A49, 0x8CAD, 0x8B43,
+ 0x772B, 0x74F8, 0x84DA, 0x69B2, 0x8DA6, 0xEE8C, 0x89A9, 0xFFFD, 0x6DB9,
+ 0x87C1, 0x0000, 0x74E7, 0x3DDB, 0x7176, 0x60A4, 0x619C, 0x3CD1, 0xFFFD,
+ 0x6077, 0xEE9A, 0x7F71, 0x0000, 0x60E9, 0x4B7E, 0x0000, 0x92DB, 0x0000,
+ 0x0000, 0x854C, 0x42B5, 0x73EF, 0x51B5, 0x3649, 0x0000, 0x0000, 0x9344,
+ 0x0000, 0x82EE, 0x0000, 0x783C, 0x6744, 0x62DF, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x4FAB, 0x0000, 0x5008, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xFFFD, 0x0000, 0x5FA4, 0x0000, 0x0000, 0x6EDB, 0x0000, 0x50DE,
+ 0x5101, 0x347A, 0x510E, 0x986C, 0x3743, 0x8416, 0x0000, 0x0000, 0x5160,
+ 0x0000, 0x516A, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x5B82, 0x877D, 0x0000, 0x0000, 0x51B2, 0x51B8, 0x9D34, 0x51C9, 0x51CF,
+ 0x51D1, 0x3CDC, 0x51D3, 0x0000, 0x51B3, 0xFFFD, 0xFFFD, 0x51ED, 0x83CD,
+ 0x693E, 0x0000, 0x5F7B, 0x520B, 0x5226, 0x523C, 0x52B5, 0x5257, 0x5294,
+ 0x52B9, 0x52C5, 0x7C15, 0x8542, 0x52E0, 0x860D, 0x0000, 0x0000, 0x0000,
+ 0x5549, 0x6ED9, 0x0000, 0x0000, 0x0000, 0x5333, 0xFFFD, 0x0000, 0x6CCB,
+ 0x0000, 0x681B, 0x73D5, 0x604A, 0x3EAA, 0x38CC, 0x0000, 0x71DD, 0x44A2,
+ 0x536D, 0x5374, 0x0000, 0x537E, 0x0000, 0x0000, 0x0000, 0x77E6, 0x5393,
+ 0x0000, 0x53A0, 0x53AB, 0x53AE, 0x73A7, 0x0000, 0x3F59, 0x739C, 0x53C1,
+ 0x53C5, 0x6C49, 0x4E49, 0x57FE, 0x53D9, 0x3AAB, 0x0000, 0x53E0, 0x0000,
+ 0x0000, 0x53F6, 0x0000, 0x5413, 0x7079, 0x552B, 0x6657, 0x6D5B, 0x546D,
+ 0x0000, 0x0000, 0x555D, 0x548F, 0x54A4, 0x47A6, 0x0000, 0x0000, 0x3DB4,
+ 0x0000, 0x0000, 0x0000, 0x5547, 0x4CED, 0x542F, 0x7417, 0x5586, 0x55A9,
+ 0xFFFD, 0x0000, 0x0000, 0x4552, 0x0000, 0x66B3, 0x0000, 0x5637, 0x66CD,
+ 0x0000, 0x66A4, 0xFFFD, 0x564D, 0x564F, 0x78F1, 0x56F1, 0x9787, 0x53FE,
+ 0x5700, 0x56EF, 0x56ED, 0x0000, 0x3623, 0x0000, 0x5746, 0x0000, 0x6C6E,
+ 0x708B, 0x5742, 0x36B1, 0x0000, 0x57E6, 0x0000, 0x5803, 0x0000, 0x0000,
+ 0x5826, 0x0000, 0x581F, 0x58AA, 0x3561, 0x58E0, 0x58DC, 0x0000, 0x58FB,
+ 0x5BFF, 0x5743, 0x0000, 0x0000, 0x93D3, 0x35A1, 0x591F, 0x68A6, 0x36C3,
+ 0x6E59, 0x0000, 0x5A24, 0xFFFD, 0x0000, 0x8505, 0x59C9, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x59D9, 0x0000, 0x0000, 0x0000, 0x6D71, 0x0000, 0x0000,
+ 0x59F9, 0x0000, 0x5AAB, 0x5A63, 0x36E6, 0x0000, 0xFFFD, 0x3708, 0x5A96,
+ 0x7465, 0x5AD3, 0x0000, 0x0000, 0x0000, 0x3732, 0x0000, 0x5E83, 0x52D0,
+ 0x5B76, 0x6588, 0x5B7C, 0x0000, 0x4004, 0x485D, 0x0000, 0x5BD5, 0x0000,
+ 0x0000, 0x0000, 0x5BF3, 0x5B9D, 0x4D10, 0x5C05, 0x0000, 0x5C13, 0x73CE,
+ 0x5C14, 0x0000, 0x0000, 0x5C49, 0x48DD, 0x5C85, 0x5CE9, 0x5CEF, 0x5D8B,
+ 0x0000, 0x0000, 0x5D10, 0x5D18, 0x5D46, 0x0000, 0x5CBA, 0x5DD7, 0x82FC,
+ 0x382D, 0x0000, 0x0000, 0x0000, 0x8287, 0x3836, 0x3BC2, 0x5E2E, 0x6A8A,
+ 0xFFFD, 0xE12F, 0x0000, 0x0000, 0x53A6, 0x4EB7, 0xFFFD, 0x53A8, 0x0000,
+ 0x5E09, 0xE138, 0x0000, 0x5EF9, 0x5EFB, 0x38A0, 0x5EFC, 0x683E, 0x941B,
+ 0x5F0D, 0x0000, 0x0000, 0x3ADE, 0x0000, 0x5F3A, 0x0000, 0x0000, 0x0000,
+ 0x5F63, 0x0000, 0x5F72, 0x9340, 0x0000, 0x5FA7, 0x5DB6, 0x3D5F, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x91D6, 0x0000, 0x0000, 0x6031, 0x6685, 0x3963,
+ 0x3DC7, 0x3639, 0x5790, 0x0000, 0x7971, 0x3E40, 0x609E, 0xFFFD, 0x60EA,
+ 0x0000, 0x0000, 0x0000, 0x74A4, 0x50E1, 0x5AA0, 0x6164, 0x6142, 0x0000,
+ 0x0000, 0x6181, 0x51F4, 0x0000, 0x6187, 0x5BAA, 0x0000, 0x0000, 0x61D3,
+ 0x0000, 0x0000, 0x61D0, 0x3932, 0x0000, 0x0000, 0x6023, 0x615C, 0x651E,
+ 0x638B, 0x0000, 0x62C5, 0x0000, 0x62D5, 0x0000, 0x636C, 0x0000, 0x3A17,
+ 0x6438, 0x63F8, 0x0000, 0x0000, 0x6F8A, 0x0000, 0xFFFD, 0x0000, 0x64E1,
+ 0x64E5, 0x947B, 0x3A66, 0x643A, 0x3A57, 0x654D, 0x6F16, 0x0000, 0x0000,
+ 0x6585, 0x656D, 0x655F, 0xFFFD, 0x65B5, 0x0000, 0x4B37, 0x65D1, 0x40D8,
+ 0x0000, 0xE1AB, 0x65E3, 0x5FDF, 0x0000, 0x6618, 0x0000, 0x0000, 0x6644,
+ 0x0000, 0x0000, 0x664B, 0x0000, 0x6667, 0x0000, 0x6673, 0xFA12, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x77C5, 0x0000, 0x99A4, 0x6702, 0x0000, 0x0000,
+ 0x69FA, 0x0000, 0x0000, 0x6767, 0x6762, 0x0000, 0x0000, 0x67D7, 0x44E9,
+ 0x6822, 0x6E50, 0x923C, 0x6801, 0x0000, 0x0000, 0x685D, 0x0000, 0x69E1,
+ 0x6A0B, 0x0000, 0x6973, 0x68C3, 0x0000, 0x6901, 0x6900, 0x3A01, 0x0000,
+ 0x3B80, 0x67AC, 0x6961, 0x0000, 0x42FC, 0x6936, 0x6998, 0x3BA1, 0x0000,
+ 0x8363, 0x5090, 0x69F9, 0x0000, 0x0000, 0x6A45, 0x0000, 0x6A9D, 0x3BF3,
+ 0x67B1, 0x6AC8, 0x0000, 0x3C0D, 0x6B1D, 0x0000, 0x60DE, 0x6B35, 0x6B74,
+ 0x0000, 0x6EB5, 0x0000, 0xFFFD, 0x0000, 0x3740, 0x5421, 0x0000, 0x6BE1,
+ 0x0000, 0x6BDC, 0x6C37, 0x0000, 0x0000, 0x0000, 0x6C5A, 0x8226, 0x6C79,
+ 0x0000, 0x44C5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x36E5, 0x3CEB,
+ 0x0000, 0x9B83, 0x0000, 0x0000, 0x7F8F, 0x6837, 0x0000, 0x0000, 0x0000,
+ 0x6D96, 0x6D5C, 0x6E7C, 0x6F04, 0x0000, 0x0000, 0x0000, 0x8533, 0x0000,
+ 0x51C7, 0xFFFD, 0xFFFD, 0x842E, 0x0000, 0x0000, 0x0000, 0x7453, 0x0000,
+ 0x79CC, 0x6E4F, 0x5A91, 0x0000, 0x6FF8, 0x370D, 0x6F9D, 0x0000, 0x6EFA,
+ 0x0000, 0x0000, 0x4555, 0x93F0, 0x6F44, 0x6F5C, 0x3D4E, 0x6F74, 0x0000,
+ 0x3D3B, 0x6F9F, 0x0000, 0x6FD3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x51DF, 0xE251, 0xE252, 0x0000, 0x0000, 0x704B, 0x707E, 0x70A7,
+ 0xFFFD, 0x70CC, 0x70D5, 0x70D6, 0x70DF, 0x4104, 0x3DE8, 0x71B4, 0x7196,
+ 0x0000, 0x712B, 0x7145, 0x5A88, 0x714A, 0xFA48, 0x0000, 0x714F, 0x9362,
+ 0x0000, 0x712C, 0x0000, 0x0000, 0x0000, 0x71BA, 0x0000, 0x70BD, 0x720E,
+ 0x9442, 0x7215, 0x5911, 0x9443, 0x7224, 0x9341, 0x0000, 0x722E, 0x7240,
+ 0x0000, 0x68BD, 0x7255, 0x7257, 0x3E55, 0x0000, 0x680D, 0x6F3D, 0x7282,
+ 0xFFFD, 0x732B, 0x0000, 0x0000, 0x48ED, 0x0000, 0x7328, 0x732E, 0x73CF,
+ 0x73AA, 0x0000, 0x0000, 0x73C9, 0x7449, 0x0000, 0x0000, 0x0000, 0x6623,
+ 0x36C5, 0x0000, 0x0000, 0x0000, 0x73F7, 0x7415, 0x6903, 0x0000, 0x7439,
+ 0x3ED7, 0x0000, 0x0000, 0x7460, 0x0000, 0x7447, 0x73E4, 0x7476, 0x83B9,
+ 0x746C, 0x7474, 0x93F1, 0x6A2C, 0x7482, 0x4953, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x5B46, 0x0000, 0x0000, 0x74C8, 0x0000, 0x750E, 0x751E, 0x0000,
+ 0x0000, 0x5BD7, 0x0000, 0x9385, 0x754D, 0x754A, 0x7567, 0x756E, 0x0000,
+ 0x3F04, 0x0000, 0x758E, 0x745D, 0x759E, 0x75B4, 0x7602, 0x762C, 0x7651,
+ 0x764F, 0x766F, 0xE2D3, 0x0000, 0x7690, 0x81EF, 0x37F8, 0x0000, 0x0000,
+ 0x76A1, 0x76A5, 0x76B7, 0x76CC, 0x0000, 0x8462, 0x0000, 0x0000, 0x0000,
+ 0x771E, 0x7726, 0x7740, 0x64AF, 0x0000, 0x7758, 0x0000, 0x77AF, 0x0000,
+ 0x0000, 0x0000, 0x77F4, 0xFFFD, 0x68CA, 0x78AF, 0x78C7, 0x78D3, 0x96A5,
+ 0x792E, 0x0000, 0x78D7, 0x7934, 0x78B1, 0x0000, 0x8FB8, 0x8884, 0x0000,
+ 0x7986, 0x8900, 0x6902, 0x7980, 0x0000, 0x799D, 0x0000, 0x793C, 0x79A9,
+ 0x6E2A, 0x0000, 0x3EA8, 0x79C6, 0x0000, 0x79D4, 0xFFFD, 0x5525, 0xFFFD,
+ 0x0000, 0x0000, 0x0000, 0x5590, 0x0000, 0x39EC, 0x0000, 0x8E46, 0x0000,
+ 0x0000, 0xFFFD, 0x0000, 0x777A, 0x0000, 0x3A34, 0x47D5, 0x0000, 0x0000,
+ 0x0000, 0x64DD, 0x0000, 0x0000, 0x0000, 0xFFFD, 0x648D, 0x8E7E, 0x0000,
+ 0xFFFD, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFFD, 0x0000, 0x0000, 0x0000,
+ 0x47F4, 0x0000, 0x0000, 0x9AB2, 0x3A67, 0x0000, 0x3FED, 0x3506, 0x0000,
+ 0x0000, 0xFFFD, 0x0000, 0x9D6E, 0x9815, 0xFFFD, 0x43D9, 0xFFFD, 0x64B4,
+ 0x54E3, 0xFFFD, 0x0000, 0xFFFD, 0x39FB, 0xFFFD, 0x0000, 0x0000, 0x0000,
+ 0x64EA, 0x0000, 0x0000, 0x8E68, 0xFFFD, 0x0000, 0x0000, 0xFFFD, 0x480B,
+ 0x0000, 0x3FFA, 0x5873, 0x0000, 0xFFFD, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xFFFD, 0x5579, 0xFFFD, 0x43BA, 0xFFFD, 0x4AB4, 0x0000, 0x0000, 0x81AA,
+ 0x98F5, 0x0000, 0x6379, 0x39FE, 0x0000, 0x8DC0, 0x56A1, 0x647C, 0x3E43,
+ 0xFFFD, 0x0000, 0x0000, 0x0000, 0xFFFD, 0xFFFD, 0x0000, 0x0000, 0x3992,
+ 0x3A06, 0x0000, 0x3578, 0x0000, 0x0000, 0xFFFD, 0xFFFD, 0x0000, 0x0000,
+ 0x34BC, 0x6C3D, 0x0000, 0xFFFD, 0xFFFD, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3A18, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x95AA, 0xFFFD, 0x0000, 0x7140, 0xFFFD, 0x5156,
+ 0x4EFE, 0x5088, 0xFFFD, 0x3493, 0x5186, 0x5E42, 0x5205, 0x5227, 0x5279,
+ 0x0000, 0x3553, 0x53C2, 0x535F, 0xFFFD, 0x553F, 0xFFFD, 0x55D8, 0x35DD,
+ 0x5621, 0xFFFD, 0x5654, 0x0000, 0xFFFD, 0x0000, 0xFFFD, 0x0000, 0xFFFD,
+ 0xFFFD, 0x37B9, 0x5CC1, 0x5D15, 0x5D56, 0x3838, 0x4E81, 0x5EBD, 0x3914,
+ 0x61B9, 0x6290, 0x6318, 0x645A, 0x6491, 0x816D, 0x8184, 0x8193, 0x6800,
+ 0x3BBC, 0x728F, 0x72CD, 0x0000, 0x7339, 0x7542, 0x75DC, 0x3FC0, 0x0000,
+ 0x3FD7, 0xFFFD, 0x7680, 0x768C, 0x40A8, 0x7839, 0x4103, 0x7A91, 0x7C1B,
+ 0x7CED, 0x7F93, 0x7FAE, 0xFFFD, 0x82FF, 0x585F, 0x86B2, 0x45AC, 0x878B,
+ 0x8947, 0xFFFD, 0x8A29, 0xFFFD, 0x8E71, 0x0000, 0x8EB0, 0xFFFD, 0x915E,
+ 0x918C, 0x990E, 0x991C, 0xFFFD, 0xFFFD, 0x9B81, 0x9DC0, 0x9D93, 0x9EAC,
+ 0x4D91, 0xFFFD, 0x93BA, 0x9E7B, 0x7089, 0x7348, 0xFFFD, 0x7999, 0x8FB7,
+ 0xFFFD, 0x9942, 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, 0x00A9, 0x2122,
+ 0x2026, 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, 0x20AC, 0x20AC, 0x2110,
+ 0x20AC, 0x20AC, 0x309B, 0x309C, 0x2E80, 0x31C0, 0x31C1, 0x31C2, 0x31C3,
+ 0x31C4, 0x0000, 0x31C5, 0x0000, 0x0000, 0x31C6, 0x31C7, 0x0000, 0x0000,
+ 0x31C8, 0x0000, 0x31C9, 0x31CA, 0x31CB, 0x31CC, 0x0000, 0x31CD, 0x31CE,
+ 0xF538, 0xF539, 0x0000, 0x0000, 0x9751, 0x0000, 0x4E5B, 0x4EBB, 0x353E,
+ 0x5C23, 0x5F51, 0x5FC4, 0x38FA, 0x624C, 0x6535, 0x6B7A, 0x6C35, 0x6C3A,
+ 0x706C, 0x722B, 0x4E2C, 0x72AD, 0x0000, 0x7F52, 0x793B, 0x7CF9, 0x7F53,
+ 0x0000, 0x34C1, 0x0000, 0x8002, 0x8080, 0x0000, 0x0000, 0x535D, 0x8864,
+ 0x89C1, 0x0000, 0x8BA0, 0x8D1D, 0x9485, 0x9578, 0x957F, 0x95E8, 0x0000,
+ 0x97E6, 0x9875, 0x98CE, 0x98DE, 0x9963, 0x0000, 0x9C7C, 0x9E1F, 0x9EC4,
+ 0x6B6F, 0xF907, 0x4E37, 0x0000, 0x961D, 0x6237, 0x94A2, 0x2E84, 0x2E86,
+ 0x2E87, 0x2E88, 0x2E8A, 0x2E8C, 0x2E8D, 0x2E95, 0x2E9C, 0x2EA5, 0x2EA7,
+ 0x2EAA, 0x2EAC, 0x2EAE, 0x2EB6, 0x2EBC, 0x2EBE, 0x2ECA, 0x2ECC, 0x2ECD,
+ 0x2ECF, 0x2ED6, 0x2ED7, 0x2EDE, 0x0000, 0x0000, 0x650A, 0x4E3D, 0x6EDD,
+ 0x9D4E, 0x91DF, 0x0000, 0x4F1A, 0x4F28, 0x4FA8, 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, 0x7411, 0x7CFC, 0x7DCD,
+ 0x6946, 0x7AC9, 0x78B8, 0x80BC, 0x8D0B, 0x80F6, 0x0000, 0x809F, 0x9EC7,
+ 0x4CCD, 0x9DC9, 0x9E0C, 0x4C3E, 0x0000, 0x0000, 0x9E0A, 0x0000, 0x35C1,
+ 0x6E9A, 0x823E, 0x7519, 0x4911, 0x9A6C, 0x9A8F, 0x9F99, 0x7987, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x4E24, 0x4E80, 0x4E87, 0x4EBF, 0x4EEB, 0x4F37,
+ 0x344C, 0x4FBD, 0x3E48, 0x5003, 0x347D, 0x34A5, 0x5905, 0x51DB, 0x51FC,
+ 0x4E89, 0x5290, 0x5327, 0x35C7, 0x53A9, 0x3551, 0x53B0, 0x5423, 0x356D,
+ 0x3572, 0x3681, 0x5493, 0x54A3, 0x54B4, 0x54B9, 0x54D0, 0x54EF, 0x5518,
+ 0x5523, 0x5528, 0x3598, 0x35A5, 0x35BF, 0x55D7, 0x35C5, 0x0000, 0x4053,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x40BB, 0x0000, 0x5652, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x35FB,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x3F93, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3FF9, 0x0000, 0x6432, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x54CC, 0x82C4,
+ 0x55B9, 0x0000, 0x9C26, 0x9AB6, 0x0000, 0x80EC, 0x5C1C, 0x0000, 0x8134,
+ 0x3797, 0x0000, 0x91B6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3609,
+ 0x0000, 0x56AF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x5A54, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x579C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3703, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5899, 0x5268,
+ 0x361A, 0x0000, 0x7BB2, 0x5B68, 0x4800, 0x4B2C, 0x9F27, 0x49E7, 0x9C1F,
+ 0x9B8D, 0x0000, 0x0000, 0x55FB, 0x35F2, 0x5689, 0x5D3E, 0x5D48, 0x3DFC,
+ 0x380F, 0x5DA4, 0x5DB9, 0x3820, 0x5F25, 0x5F83, 0x3908, 0x393F, 0x394D,
+ 0x60D7, 0x613D, 0x5CE5, 0x3989, 0x61B7, 0x61CF, 0x39B8, 0x622C, 0x62E5,
+ 0x39F8, 0x56B1, 0x3A03, 0x63E2, 0x63FB, 0x6407, 0x3A4B, 0x64C0, 0x9F9F,
+ 0x3A97, 0x6586, 0x3ABD, 0x65FF, 0x6653, 0x3AF2, 0x6692, 0x3B22, 0x6716,
+ 0x3B42, 0x67A4, 0x3B58, 0x684A, 0x6884, 0x3B72, 0x3B71, 0x3B7B, 0x6909,
+ 0x6943, 0x725C, 0x6964, 0x699F, 0x6985, 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, 0x0000,
+ 0x6EBB, 0x6EE2, 0x6EDA, 0x9F7F, 0x6EE8, 0x6EE9, 0x6F24, 0x6F34, 0x3D46,
+ 0x0000, 0x6F81, 0x6FBE, 0x3D6A, 0x3D75, 0x71B7, 0x5C99, 0x3D8A, 0x702C,
+ 0x3D91, 0x7050, 0x7054, 0x706F, 0x707F, 0x0000, 0x43C1, 0x35F1, 0x0000,
+ 0x364E, 0x3DAD, 0x0000, 0x667D, 0x7C74, 0x748D, 0x7E92, 0x4503, 0x0000,
+ 0x0000, 0x0000, 0x347E, 0x0000, 0x0000, 0x0000, 0x8771, 0x63C1, 0x7777,
+ 0x898A, 0x0000, 0x8B4C, 0x0000, 0x492A, 0x0000, 0x0000, 0x0000, 0x3AF0,
+ 0x708F, 0x0000, 0x0000, 0x0000, 0x6888, 0x0000, 0x9F62, 0x93C6, 0x0000,
+ 0x9366, 0x928F, 0x8614, 0x0000, 0x4190, 0x678F, 0x681E, 0x3863, 0x0000,
+ 0x3B19, 0x8496, 0x0000, 0x39E2, 0x8480, 0x436E, 0x9771, 0x999B, 0x492D,
+ 0x6F17, 0x0000, 0x70A6, 0x0000, 0x7E65, 0x5D2F, 0x3DF3, 0x0000, 0x0000,
+ 0x7DA4, 0x8426, 0x5485, 0x0000, 0x0000, 0x577E, 0x0000, 0x0000, 0x3FE5,
+ 0x0000, 0x0000, 0x7003, 0x0000, 0x5D70, 0x738F, 0x0000, 0x0000, 0x4FC8,
+ 0x7FE7, 0x7310, 0x7338, 0x7341, 0x3EA9, 0x71F5, 0x0000, 0x73E1, 0x3ECA,
+ 0x3ED1, 0x7419, 0x741E, 0x741F, 0x3EE2, 0x3EF0, 0x3EF4, 0x3EFA, 0x74D3,
+ 0x3F0E, 0x3F53, 0x756D, 0x7572, 0x758D, 0x3F7C, 0x75C8, 0x764D, 0x7674,
+ 0x3FDC, 0x767A, 0x7188, 0x5623, 0x8980, 0x401D, 0x7743, 0x4039, 0x4045,
+ 0x35DB, 0x7798, 0x406A, 0x406F, 0x77BE, 0x77CB, 0x7818, 0x781C, 0x7847,
+ 0x7851, 0x7866, 0x8448, 0x0000, 0x7933, 0x7932, 0x4109, 0x7991, 0x7A06,
+ 0x4167, 0x41B2, 0x7ABC, 0x8279, 0x41C4, 0x7ACF, 0x7ADB, 0x41CF, 0x7B62,
+ 0x7B6C, 0x7B7B, 0x7C12, 0x4260, 0x427A, 0x7C7B, 0x7C9C, 0x428C, 0x7CB8,
+ 0x4294, 0x8F93, 0x70C0, 0x0000, 0x7DCF, 0x7DD4, 0x7DD0, 0x7DFD, 0x7FB4,
+ 0x729F, 0x4397, 0x8020, 0x8025, 0x802E, 0x8031, 0x8054, 0x57B4, 0x70A0,
+ 0x80B7, 0x80E9, 0x43ED, 0x810C, 0x810E, 0x8112, 0x8114, 0x4401, 0x3B39,
+ 0x8156, 0x8159, 0x815A, 0x4413, 0x817C, 0x4425, 0x442D, 0x81A5, 0x57EF,
+ 0x81C1, 0x81E4, 0x8254, 0x448F, 0x8276, 0x82CA, 0x82D8, 0x44B0, 0x8357,
+ 0x9669, 0x8405, 0x70F5, 0x8464, 0x8488, 0x4504, 0x84BE, 0x84E1, 0x84F8,
+ 0x8510, 0x8538, 0x8552, 0x453B, 0x856F, 0x8570, 0x85E0, 0x4577, 0x8672,
+ 0x8692, 0x86EF, 0x9645, 0x4606, 0x4617, 0x88AE, 0x88FF, 0x8924, 0x8991,
+ 0x0000, 0x8A38, 0x8A94, 0x8AB4, 0x8C51, 0x8CD4, 0x8CF2, 0x8D1C, 0x4798,
+ 0x8DC3, 0x47ED, 0x8E3A, 0x5754, 0x55F5, 0x4837, 0x8ECE, 0x8EE2, 0x8EE4,
+ 0x8EED, 0x8EF2, 0x8FC1, 0x8FCA, 0x8FCC, 0x9033, 0x48AD, 0x98E0, 0x9213,
+ 0x491E, 0x9228, 0x9258, 0x926B, 0x92B1, 0x92AE, 0x92BF, 0x92E3, 0x92EB,
+ 0x92F3, 0x92F4, 0x92FD, 0x9343, 0x9384, 0x93AD, 0x4945, 0x4951, 0x9417,
+ 0x941D, 0x942D, 0x943E, 0x496A, 0x9454, 0x9479, 0x952D, 0x95A2, 0x49A7,
+ 0x95F4, 0x9633, 0x49E5, 0x4A24, 0x9740, 0x4A35, 0x97B2, 0x97C2, 0x4AE4,
+ 0x98B9, 0x4B19, 0x98F1, 0x5844, 0x9919, 0x9937, 0x995D, 0x9962, 0x4B70,
+ 0x99C5, 0x4B9D, 0x9A3C, 0x9B0F, 0x9B69, 0x9BDD, 0x9BF1, 0x9BF4, 0x4C6D,
+ 0x9C20, 0x376F, 0x0000, 0x9D49, 0x9EFE, 0x5650, 0x9DBD, 0x9DFC, 0x94F6,
+ 0x8FB6, 0x9EB1, 0x9EBD, 0x9EC6, 0x94DC, 0x9EE2, 0x9EF1, 0x9EF8, 0x9F44,
+ 0x0000, 0x0000, 0x0000, 0x94C3, 0x0000, 0x94C1, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x5757, 0x7173, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x549E,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3647, 0x0000, 0x0000,
+ 0x0000, 0x5364, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x70BB, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x7198, 0x0000, 0x69E9, 0x36C8, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x58B5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x5788, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x5965, 0x0000, 0x0000, 0x573F, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x57A1, 0x7151, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x56B9, 0x0000, 0x3618, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x949F, 0x0000,
+ 0x36B9, 0x0000, 0x0000, 0x56D6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x63E6, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x3DF7, 0x0000, 0x0000, 0x8FD0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7E9F, 0x0000,
+ 0x0000, 0x4CA4, 0x9547, 0x0000, 0x71A2, 0x0000, 0x0000, 0x4D9C, 0x0000,
+ 0x8FBE, 0x8FBA, 0x0000, 0x8FB9, 0x0000, 0x4EEA, 0x0000, 0x8E80, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4E9A, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3DC6, 0x0000, 0x4E1C,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x55DE, 0x8786, 0x0000, 0x0000, 0x5B90,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x4E1A, 0x4E04, 0x5B0D, 0x36AC, 0x537D, 0x36A5, 0x589A, 0x0000,
+ 0x57AA, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x57A7, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x9C1B, 0x0000, 0x3E06, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x577A, 0x54DA, 0x717A, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3635, 0x0000, 0x5220, 0x3C18,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4562, 0x5B1F, 0x0000, 0x9F50,
+ 0x9EA6, 0x0000, 0x51E2, 0x5342, 0x66AD, 0x585C, 0x5553, 0x3D85, 0x6160,
+ 0x48AE, 0x97BD, 0x0000, 0x60B3, 0x8424, 0x9814, 0x0000, 0x0000, 0x0000,
+ 0x3B2B, 0x3D32, 0x0000, 0x7081, 0x5C9C, 0x0000, 0x3730, 0x0000, 0x0000,
+ 0x0000, 0x0000, 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, 0x01DC, 0x00FC,
+ 0xF344, 0x1EBF, 0xF346, 0x1EC1, 0x00EA, 0x0261, 0x0283, 0x0250, 0x025B,
+ 0x0254, 0x0275, 0x0153, 0x00F8, 0x014B, 0x028A, 0x026A, 0x23DA, 0x23DB,
+ 0x2E9D, 0x2EC6, 0x2EE3, 0x503B, 0x6DFE, 0x0000, 0x9FA6, 0x3DC9, 0x888F,
+ 0x0000, 0x7077, 0x5CF5, 0x4B20, 0x0000, 0x3559, 0x0000, 0x6122, 0x0000,
+ 0x8FA7, 0x91F6, 0x7191, 0x6719, 0x73BA, 0x0000, 0x0000, 0x3C8B, 0x0000,
+ 0x4B10, 0x78E4, 0x7402, 0x51AE, 0x0000, 0x4009, 0x6A63, 0x0000, 0x4223,
+ 0x860F, 0x7A2A, 0x0000, 0x0000, 0x9755, 0x704D, 0x5324, 0x0000, 0x93F4,
+ 0x76D9, 0x0000, 0x9FA7, 0x77DD, 0x4EA3, 0x4FF0, 0x50BC, 0x4E2F, 0x4F17,
+ 0x9FA8, 0x5434, 0x7D8B, 0x5892, 0x58D0, 0x0000, 0x5E92, 0x5E99, 0x5FC2,
+ 0x0000, 0x658B, 0x0000, 0x6919, 0x6A43, 0x0000, 0x6CFF, 0x7200, 0x0000,
+ 0x738C, 0x3EDB, 0x0000, 0x5B15, 0x74B9, 0x8B83, 0x0000, 0x0000, 0x7A93,
+ 0x7BEC, 0x7CC3, 0x7E6C, 0x82F8, 0x8597, 0x9FA9, 0x8890, 0x9FAA, 0x8EB9,
+ 0x9FAB, 0x8FCF, 0x855F, 0x99E0, 0x9221, 0x9FAC, 0x0000, 0x0000, 0x4071,
+ 0x42A2, 0x5A1A, 0x9868, 0x676B, 0x4276, 0x573D, 0x85D6, 0x0000, 0x82BF,
+ 0x0000, 0x4C81, 0x0000, 0x5D7B, 0x0000, 0x0000, 0x9FAD, 0x9FAE, 0x5B96,
+ 0x9FAF, 0x7E5B, 0x43F0, 0x4C32, 0x4603, 0x45A6, 0x4578, 0x0000, 0x4D77,
+ 0x45B3, 0x0000, 0x4CE2, 0x0000, 0x3B95, 0x4736, 0x4744, 0x4C47, 0x4C40,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4C57, 0x0000, 0x474F, 0x45DA,
+ 0x4C85, 0x0000, 0x4D07, 0x4AA4, 0x46A1, 0x0000, 0x7225, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x664D, 0x56FB, 0x7D95, 0x591D, 0x0000, 0x3DF4, 0x9734,
+ 0x0000, 0x5BDB, 0x0000, 0x5AA4, 0x3625, 0x0000, 0x5AD1, 0x5BB7, 0x5CFC,
+ 0x676E, 0x8593, 0x0000, 0x7461, 0x749D, 0x0000, 0x66E7, 0x6E57, 0x79CA,
+ 0x3D88, 0x44C3, 0x0000, 0x0000, 0x439A, 0x4536, 0x5CD5, 0x0000, 0x8AF9,
+ 0x5C78, 0x3D12, 0x0000, 0x5D78, 0x9FB2, 0x7157, 0x4558, 0x0000, 0x0000,
+ 0x4C77, 0x3978, 0x344A, 0x0000, 0x0000, 0x8ACC, 0x4FB4, 0x0000, 0x59BF,
+ 0x816C, 0x9856, 0x0000, 0x5F3B, 0x0000, 0x0000, 0x0000, 0x4102, 0x46BB,
+ 0x0000, 0x3F07, 0x9FB3, 0x0000, 0x40F8, 0x37D6, 0x46F7, 0x0000, 0x417C,
+ 0x0000, 0x0000, 0x456D, 0x38D4, 0x0000, 0x4561, 0x451B, 0x4D89, 0x4C7B,
0x4D76, 0x45EA, 0x3FC8, 0x0000, 0x3661, 0x44DE, 0x44BD, 0x41ED,
};
diff --git a/core/src/fpdfapi/fpdf_cmaps/CNS1/CNS-EUC-H_0.cpp b/core/src/fpdfapi/fpdf_cmaps/CNS1/CNS-EUC-H_0.cpp
index 723095bc81..8881c91679 100644
--- a/core/src/fpdfapi/fpdf_cmaps/CNS1/CNS-EUC-H_0.cpp
+++ b/core/src/fpdfapi/fpdf_cmaps/CNS1/CNS-EUC-H_0.cpp
@@ -63,123 +63,110 @@ const FX_WORD g_FXCMAP_CNS_EUC_H_0[157 * 3] = {
};
const FX_WORD g_FXCMAP_CNS_EUC_H_0_DWord[238 * 4] = {
- 0x8EA1, 0xA1A1, 0xA1FE, 0x0063, 0x8EA1, 0xA2A1, 0xA2FE, 0x00C1,
- 0x8EA1, 0xA3A1, 0xA3CE, 0x011F, 0x8EA1, 0xA4A1, 0xA4FE, 0x014D,
- 0x8EA1, 0xA5A1, 0xA5EC, 0x01AB, 0x8EA1, 0xA5EE, 0xA5F0, 0x01F7,
- 0x8EA1, 0xA6A1, 0xA6BE, 0x01FA, 0x8EA1, 0xA7A1, 0xA7A1, 0x0253,
- 0x8EA1, 0xA7A2, 0xA7A4, 0x0218, 0x8EA1, 0xA7A5, 0xA7A5, 0x0254,
- 0x8EA1, 0xA7A6, 0xA7A6, 0x021B, 0x8EA1, 0xA7A7, 0xA7A7, 0x025A,
- 0x8EA1, 0xA7A8, 0xA7A8, 0x021C, 0x8EA1, 0xA7A9, 0xA7AC, 0x025B,
- 0x8EA1, 0xA7AD, 0xA7AF, 0x021D, 0x8EA1, 0xA7B0, 0xA7B0, 0x025F,
- 0x8EA1, 0xA7B1, 0xA7B1, 0x176E, 0x8EA1, 0xA7B2, 0xA7B2, 0x0260,
- 0x8EA1, 0xA7B3, 0xA7B3, 0x0262, 0x8EA1, 0xA7B4, 0xA7B4, 0x0220,
- 0x8EA1, 0xA7B5, 0xA7B5, 0x0263, 0x8EA1, 0xA7B6, 0xA7B6, 0x176F,
- 0x8EA1, 0xA7B7, 0xA7B7, 0x0221, 0x8EA1, 0xA7B8, 0xA7B9, 0x0264,
- 0x8EA1, 0xA7BA, 0xA7BA, 0x0222, 0x8EA1, 0xA7BB, 0xA7BB, 0x1770,
- 0x8EA1, 0xA7BC, 0xA7BC, 0x0223, 0x8EA1, 0xA7BD, 0xA7BD, 0x0266,
- 0x8EA1, 0xA7BE, 0xA7BE, 0x0279, 0x8EA1, 0xA7BF, 0xA7BF, 0x1775,
- 0x8EA1, 0xA7C0, 0xA7C1, 0x027A, 0x8EA1, 0xA7C2, 0xA7C2, 0x0224,
- 0x8EA1, 0xA7C3, 0xA7C6, 0x027C, 0x8EA1, 0xA7C7, 0xA7C7, 0x0225,
- 0x8EA1, 0xA7C8, 0xA7CB, 0x0282, 0x8EA1, 0xA7CC, 0xA7CC, 0x1776,
- 0x8EA1, 0xA7CD, 0xA7CD, 0x0286, 0x8EA1, 0xA7CE, 0xA7CE, 0x0226,
- 0x8EA1, 0xA7CF, 0xA7D0, 0x0288, 0x8EA1, 0xA7D1, 0xA7D2, 0x028C,
- 0x8EA1, 0xA7D3, 0xA7D5, 0x0227, 0x8EA1, 0xA7D6, 0xA7D8, 0x028E,
- 0x8EA1, 0xA7D9, 0xA7DA, 0x022A, 0x8EA1, 0xA7DB, 0xA7DB, 0x1777,
- 0x8EA1, 0xA7DC, 0xA7DF, 0x02D0, 0x8EA1, 0xA7E0, 0xA7E0, 0x02D5,
- 0x8EA1, 0xA7E1, 0xA7E1, 0x022C, 0x8EA1, 0xA7E2, 0xA7E5, 0x02D6,
- 0x8EA1, 0xA7E6, 0xA7E6, 0x022D, 0x8EA1, 0xA7E7, 0xA7ED, 0x02DA,
- 0x8EA1, 0xA7EE, 0xA7EE, 0x178A, 0x8EA1, 0xA7EF, 0xA7F2, 0x02E1,
- 0x8EA1, 0xA7F3, 0xA7F3, 0x178C, 0x8EA1, 0xA7F4, 0xA7F8, 0x02E5,
- 0x8EA1, 0xA7F9, 0xA7F9, 0x178D, 0x8EA1, 0xA7FA, 0xA7FD, 0x02EA,
- 0x8EA1, 0xA7FE, 0xA7FE, 0x0356, 0x8EA1, 0xA8A1, 0xA8A6, 0x0357,
- 0x8EA1, 0xA8A7, 0xA8A7, 0x035E, 0x8EA1, 0xA8A8, 0xA8A8, 0x0362,
- 0x8EA1, 0xA8A9, 0xA8AA, 0x022E, 0x8EA1, 0xA8AB, 0xA8B2, 0x0363,
- 0x8EA1, 0xA8B3, 0xA8B3, 0x17B2, 0x8EA1, 0xA8B4, 0xA8B6, 0x036B,
- 0x8EA1, 0xA8B7, 0xA8BA, 0x03F6, 0x8EA1, 0xA8BB, 0xA8BB, 0x1812,
- 0x8EA1, 0xA8BC, 0xA8BE, 0x03FA, 0x8EA1, 0xA8BF, 0xA8C3, 0x03FE,
- 0x8EA1, 0xA8C4, 0xA8CC, 0x0405, 0x8EA1, 0xA8CD, 0xA8CD, 0x1813,
- 0x8EA1, 0xA8CE, 0xA8CE, 0x1818, 0x8EA1, 0xA8CF, 0xA8D2, 0x040F,
- 0x8EA1, 0xA8D3, 0xA8D3, 0x1819, 0x8EA1, 0xA8D4, 0xA8D9, 0x0508,
- 0x8EA1, 0xA8DA, 0xA8DA, 0x18E7, 0x8EA1, 0xA8DB, 0xA8E2, 0x050E,
- 0x8EA1, 0xA8E3, 0xA8E3, 0x0230, 0x8EA1, 0xA8E4, 0xA8E4, 0x051B,
- 0x8EA1, 0xA8E5, 0xA8E7, 0x0520, 0x8EA1, 0xA8E8, 0xA8EB, 0x0696,
- 0x8EA1, 0xA8EC, 0xA8EC, 0x0231, 0x8EA1, 0xA8ED, 0xA8F0, 0x069F,
- 0x8EA1, 0xA8F1, 0xA8FB, 0x0826, 0x8EA1, 0xA8FC, 0xA8FE, 0x09F5,
- 0x8EA1, 0xA9A1, 0xA9A1, 0x1E33, 0x8EA1, 0xA9A2, 0xA9A2, 0x09F8,
- 0x8EA1, 0xA9A3, 0xA9A3, 0x1E34, 0x8EA1, 0xA9A4, 0xA9A5, 0x09F9,
- 0x8EA1, 0xA9A6, 0xA9AB, 0x0BE1, 0x8EA1, 0xA9AC, 0xA9AE, 0x0DBB,
- 0x8EA1, 0xA9AF, 0xA9AF, 0x2360, 0x8EA1, 0xA9B0, 0xA9B0, 0x2612,
- 0x8EA1, 0xA9B1, 0xA9B3, 0x0F7B, 0x8EA1, 0xA9B4, 0xA9B5, 0x1100,
- 0x8EA1, 0xA9B6, 0xA9B6, 0x1289, 0x8EA1, 0xA9B7, 0xA9B8, 0x13B2,
- 0x8EA1, 0xA9B9, 0xA9B9, 0x2F0D, 0x8EA1, 0xC2A1, 0xC2C1, 0x0232,
- 0x8EA1, 0xC4A1, 0xC4FE, 0x0253, 0x8EA1, 0xC5A1, 0xC5FE, 0x02B1,
- 0x8EA1, 0xC6A1, 0xC6FE, 0x030F, 0x8EA1, 0xC7A1, 0xC7FE, 0x036D,
- 0x8EA1, 0xC8A1, 0xC8FE, 0x03CB, 0x8EA1, 0xC9A1, 0xC9FE, 0x0429,
- 0x8EA1, 0xCAA1, 0xCAFE, 0x0487, 0x8EA1, 0xCBA1, 0xCBFE, 0x04E5,
- 0x8EA1, 0xCCA1, 0xCCFE, 0x0543, 0x8EA1, 0xCDA1, 0xCDFE, 0x05A1,
- 0x8EA1, 0xCEA1, 0xCEFE, 0x05FF, 0x8EA1, 0xCFA1, 0xCFFE, 0x065D,
- 0x8EA1, 0xD0A1, 0xD0FE, 0x06BB, 0x8EA1, 0xD1A1, 0xD1FE, 0x0719,
- 0x8EA1, 0xD2A1, 0xD2FE, 0x0777, 0x8EA1, 0xD3A1, 0xD3FE, 0x07D5,
- 0x8EA1, 0xD4A1, 0xD4FE, 0x0833, 0x8EA1, 0xD5A1, 0xD5FE, 0x0891,
- 0x8EA1, 0xD6A1, 0xD6FE, 0x08EF, 0x8EA1, 0xD7A1, 0xD7FE, 0x094D,
- 0x8EA1, 0xD8A1, 0xD8FE, 0x09AB, 0x8EA1, 0xD9A1, 0xD9FE, 0x0A09,
- 0x8EA1, 0xDAA1, 0xDAFE, 0x0A67, 0x8EA1, 0xDBA1, 0xDBFE, 0x0AC5,
- 0x8EA1, 0xDCA1, 0xDCFE, 0x0B23, 0x8EA1, 0xDDA1, 0xDDFE, 0x0B81,
- 0x8EA1, 0xDEA1, 0xDEFE, 0x0BDF, 0x8EA1, 0xDFA1, 0xDFFE, 0x0C3D,
- 0x8EA1, 0xE0A1, 0xE0FE, 0x0C9B, 0x8EA1, 0xE1A1, 0xE1FE, 0x0CF9,
- 0x8EA1, 0xE2A1, 0xE2FE, 0x0D57, 0x8EA1, 0xE3A1, 0xE3FE, 0x0DB5,
- 0x8EA1, 0xE4A1, 0xE4FE, 0x0E13, 0x8EA1, 0xE5A1, 0xE5FE, 0x0E71,
- 0x8EA1, 0xE6A1, 0xE6FE, 0x0ECF, 0x8EA1, 0xE7A1, 0xE7FE, 0x0F2D,
- 0x8EA1, 0xE8A1, 0xE8FE, 0x0F8B, 0x8EA1, 0xE9A1, 0xE9FE, 0x0FE9,
- 0x8EA1, 0xEAA1, 0xEAFE, 0x1047, 0x8EA1, 0xEBA1, 0xEBFE, 0x10A5,
- 0x8EA1, 0xECA1, 0xECFE, 0x1103, 0x8EA1, 0xEDA1, 0xEDFE, 0x1161,
- 0x8EA1, 0xEEA1, 0xEEFE, 0x11BF, 0x8EA1, 0xEFA1, 0xEFFE, 0x121D,
- 0x8EA1, 0xF0A1, 0xF0FE, 0x127B, 0x8EA1, 0xF1A1, 0xF1FE, 0x12D9,
- 0x8EA1, 0xF2A1, 0xF2FE, 0x1337, 0x8EA1, 0xF3A1, 0xF3FE, 0x1395,
- 0x8EA1, 0xF4A1, 0xF4FE, 0x13F3, 0x8EA1, 0xF5A1, 0xF5FE, 0x1451,
- 0x8EA1, 0xF6A1, 0xF6FE, 0x14AF, 0x8EA1, 0xF7A1, 0xF7FE, 0x150D,
- 0x8EA1, 0xF8A1, 0xF8FE, 0x156B, 0x8EA1, 0xF9A1, 0xF9FE, 0x15C9,
- 0x8EA1, 0xFAA1, 0xFAFE, 0x1627, 0x8EA1, 0xFBA1, 0xFBFE, 0x1685,
- 0x8EA1, 0xFCA1, 0xFCFE, 0x16E3, 0x8EA1, 0xFDA1, 0xFDCB, 0x1741,
- 0x8EA2, 0xA1A1, 0xA1FE, 0x176C, 0x8EA2, 0xA2A1, 0xA2FE, 0x17CA,
- 0x8EA2, 0xA3A1, 0xA3FE, 0x1828, 0x8EA2, 0xA4A1, 0xA4FE, 0x1886,
- 0x8EA2, 0xA5A1, 0xA5FE, 0x18E4, 0x8EA2, 0xA6A1, 0xA6FE, 0x1942,
- 0x8EA2, 0xA7A1, 0xA7FE, 0x19A0, 0x8EA2, 0xA8A1, 0xA8FE, 0x19FE,
- 0x8EA2, 0xA9A1, 0xA9FE, 0x1A5C, 0x8EA2, 0xAAA1, 0xAAFE, 0x1ABA,
- 0x8EA2, 0xABA1, 0xABFE, 0x1B18, 0x8EA2, 0xACA1, 0xACFE, 0x1B76,
- 0x8EA2, 0xADA1, 0xADFE, 0x1BD4, 0x8EA2, 0xAEA1, 0xAEFE, 0x1C32,
- 0x8EA2, 0xAFA1, 0xAFFE, 0x1C90, 0x8EA2, 0xB0A1, 0xB0FE, 0x1CEE,
- 0x8EA2, 0xB1A1, 0xB1FE, 0x1D4C, 0x8EA2, 0xB2A1, 0xB2FE, 0x1DAA,
- 0x8EA2, 0xB3A1, 0xB3FE, 0x1E08, 0x8EA2, 0xB4A1, 0xB4FE, 0x1E66,
- 0x8EA2, 0xB5A1, 0xB5FE, 0x1EC4, 0x8EA2, 0xB6A1, 0xB6FE, 0x1F22,
- 0x8EA2, 0xB7A1, 0xB7FE, 0x1F80, 0x8EA2, 0xB8A1, 0xB8FE, 0x1FDE,
- 0x8EA2, 0xB9A1, 0xB9FE, 0x203C, 0x8EA2, 0xBAA1, 0xBAFE, 0x209A,
- 0x8EA2, 0xBBA1, 0xBBFE, 0x20F8, 0x8EA2, 0xBCA1, 0xBCFE, 0x2156,
- 0x8EA2, 0xBDA1, 0xBDFE, 0x21B4, 0x8EA2, 0xBEA1, 0xBEFE, 0x2212,
- 0x8EA2, 0xBFA1, 0xBFFE, 0x2270, 0x8EA2, 0xC0A1, 0xC0FE, 0x22CE,
- 0x8EA2, 0xC1A1, 0xC1FE, 0x232C, 0x8EA2, 0xC2A1, 0xC2FE, 0x238A,
- 0x8EA2, 0xC3A1, 0xC3FE, 0x23E8, 0x8EA2, 0xC4A1, 0xC4FE, 0x2446,
- 0x8EA2, 0xC5A1, 0xC5FE, 0x24A4, 0x8EA2, 0xC6A1, 0xC6FE, 0x2502,
- 0x8EA2, 0xC7A1, 0xC7FE, 0x2560, 0x8EA2, 0xC8A1, 0xC8FE, 0x25BE,
- 0x8EA2, 0xC9A1, 0xC9FE, 0x261C, 0x8EA2, 0xCAA1, 0xCAFE, 0x267A,
- 0x8EA2, 0xCBA1, 0xCBFE, 0x26D8, 0x8EA2, 0xCCA1, 0xCCFE, 0x2736,
- 0x8EA2, 0xCDA1, 0xCDFE, 0x2794, 0x8EA2, 0xCEA1, 0xCEFE, 0x27F2,
- 0x8EA2, 0xCFA1, 0xCFFE, 0x2850, 0x8EA2, 0xD0A1, 0xD0FE, 0x28AE,
- 0x8EA2, 0xD1A1, 0xD1FE, 0x290C, 0x8EA2, 0xD2A1, 0xD2FE, 0x296A,
- 0x8EA2, 0xD3A1, 0xD3FE, 0x29C8, 0x8EA2, 0xD4A1, 0xD4FE, 0x2A26,
- 0x8EA2, 0xD5A1, 0xD5FE, 0x2A84, 0x8EA2, 0xD6A1, 0xD6FE, 0x2AE2,
- 0x8EA2, 0xD7A1, 0xD7FE, 0x2B40, 0x8EA2, 0xD8A1, 0xD8FE, 0x2B9E,
- 0x8EA2, 0xD9A1, 0xD9FE, 0x2BFC, 0x8EA2, 0xDAA1, 0xDAFE, 0x2C5A,
- 0x8EA2, 0xDBA1, 0xDBFE, 0x2CB8, 0x8EA2, 0xDCA1, 0xDCFE, 0x2D16,
- 0x8EA2, 0xDDA1, 0xDDFE, 0x2D74, 0x8EA2, 0xDEA1, 0xDEFE, 0x2DD2,
- 0x8EA2, 0xDFA1, 0xDFFE, 0x2E30, 0x8EA2, 0xE0A1, 0xE0FE, 0x2E8E,
- 0x8EA2, 0xE1A1, 0xE1FE, 0x2EEC, 0x8EA2, 0xE2A1, 0xE2FE, 0x2F4A,
- 0x8EA2, 0xE3A1, 0xE3FE, 0x2FA8, 0x8EA2, 0xE4A1, 0xE4FE, 0x3006,
- 0x8EA2, 0xE5A1, 0xE5FE, 0x3064, 0x8EA2, 0xE6A1, 0xE6FE, 0x30C2,
- 0x8EA2, 0xE7A1, 0xE7FE, 0x3120, 0x8EA2, 0xE8A1, 0xE8FE, 0x317E,
- 0x8EA2, 0xE9A1, 0xE9FE, 0x31DC, 0x8EA2, 0xEAA1, 0xEAFE, 0x323A,
- 0x8EA2, 0xEBA1, 0xEBFE, 0x3298, 0x8EA2, 0xECA1, 0xECFE, 0x32F6,
- 0x8EA2, 0xEDA1, 0xEDFE, 0x3354, 0x8EA2, 0xEEA1, 0xEEFE, 0x33B2,
- 0x8EA2, 0xEFA1, 0xEFFE, 0x3410, 0x8EA2, 0xF0A1, 0xF0FE, 0x346E,
- 0x8EA2, 0xF1A1, 0xF1FE, 0x34CC, 0x8EA2, 0xF2A1, 0xF2C4, 0x352A,
+ 0x8EA1, 0xA1A1, 0xA1FE, 0x0063, 0x8EA1, 0xA2A1, 0xA2FE, 0x00C1, 0x8EA1,
+ 0xA3A1, 0xA3CE, 0x011F, 0x8EA1, 0xA4A1, 0xA4FE, 0x014D, 0x8EA1, 0xA5A1,
+ 0xA5EC, 0x01AB, 0x8EA1, 0xA5EE, 0xA5F0, 0x01F7, 0x8EA1, 0xA6A1, 0xA6BE,
+ 0x01FA, 0x8EA1, 0xA7A1, 0xA7A1, 0x0253, 0x8EA1, 0xA7A2, 0xA7A4, 0x0218,
+ 0x8EA1, 0xA7A5, 0xA7A5, 0x0254, 0x8EA1, 0xA7A6, 0xA7A6, 0x021B, 0x8EA1,
+ 0xA7A7, 0xA7A7, 0x025A, 0x8EA1, 0xA7A8, 0xA7A8, 0x021C, 0x8EA1, 0xA7A9,
+ 0xA7AC, 0x025B, 0x8EA1, 0xA7AD, 0xA7AF, 0x021D, 0x8EA1, 0xA7B0, 0xA7B0,
+ 0x025F, 0x8EA1, 0xA7B1, 0xA7B1, 0x176E, 0x8EA1, 0xA7B2, 0xA7B2, 0x0260,
+ 0x8EA1, 0xA7B3, 0xA7B3, 0x0262, 0x8EA1, 0xA7B4, 0xA7B4, 0x0220, 0x8EA1,
+ 0xA7B5, 0xA7B5, 0x0263, 0x8EA1, 0xA7B6, 0xA7B6, 0x176F, 0x8EA1, 0xA7B7,
+ 0xA7B7, 0x0221, 0x8EA1, 0xA7B8, 0xA7B9, 0x0264, 0x8EA1, 0xA7BA, 0xA7BA,
+ 0x0222, 0x8EA1, 0xA7BB, 0xA7BB, 0x1770, 0x8EA1, 0xA7BC, 0xA7BC, 0x0223,
+ 0x8EA1, 0xA7BD, 0xA7BD, 0x0266, 0x8EA1, 0xA7BE, 0xA7BE, 0x0279, 0x8EA1,
+ 0xA7BF, 0xA7BF, 0x1775, 0x8EA1, 0xA7C0, 0xA7C1, 0x027A, 0x8EA1, 0xA7C2,
+ 0xA7C2, 0x0224, 0x8EA1, 0xA7C3, 0xA7C6, 0x027C, 0x8EA1, 0xA7C7, 0xA7C7,
+ 0x0225, 0x8EA1, 0xA7C8, 0xA7CB, 0x0282, 0x8EA1, 0xA7CC, 0xA7CC, 0x1776,
+ 0x8EA1, 0xA7CD, 0xA7CD, 0x0286, 0x8EA1, 0xA7CE, 0xA7CE, 0x0226, 0x8EA1,
+ 0xA7CF, 0xA7D0, 0x0288, 0x8EA1, 0xA7D1, 0xA7D2, 0x028C, 0x8EA1, 0xA7D3,
+ 0xA7D5, 0x0227, 0x8EA1, 0xA7D6, 0xA7D8, 0x028E, 0x8EA1, 0xA7D9, 0xA7DA,
+ 0x022A, 0x8EA1, 0xA7DB, 0xA7DB, 0x1777, 0x8EA1, 0xA7DC, 0xA7DF, 0x02D0,
+ 0x8EA1, 0xA7E0, 0xA7E0, 0x02D5, 0x8EA1, 0xA7E1, 0xA7E1, 0x022C, 0x8EA1,
+ 0xA7E2, 0xA7E5, 0x02D6, 0x8EA1, 0xA7E6, 0xA7E6, 0x022D, 0x8EA1, 0xA7E7,
+ 0xA7ED, 0x02DA, 0x8EA1, 0xA7EE, 0xA7EE, 0x178A, 0x8EA1, 0xA7EF, 0xA7F2,
+ 0x02E1, 0x8EA1, 0xA7F3, 0xA7F3, 0x178C, 0x8EA1, 0xA7F4, 0xA7F8, 0x02E5,
+ 0x8EA1, 0xA7F9, 0xA7F9, 0x178D, 0x8EA1, 0xA7FA, 0xA7FD, 0x02EA, 0x8EA1,
+ 0xA7FE, 0xA7FE, 0x0356, 0x8EA1, 0xA8A1, 0xA8A6, 0x0357, 0x8EA1, 0xA8A7,
+ 0xA8A7, 0x035E, 0x8EA1, 0xA8A8, 0xA8A8, 0x0362, 0x8EA1, 0xA8A9, 0xA8AA,
+ 0x022E, 0x8EA1, 0xA8AB, 0xA8B2, 0x0363, 0x8EA1, 0xA8B3, 0xA8B3, 0x17B2,
+ 0x8EA1, 0xA8B4, 0xA8B6, 0x036B, 0x8EA1, 0xA8B7, 0xA8BA, 0x03F6, 0x8EA1,
+ 0xA8BB, 0xA8BB, 0x1812, 0x8EA1, 0xA8BC, 0xA8BE, 0x03FA, 0x8EA1, 0xA8BF,
+ 0xA8C3, 0x03FE, 0x8EA1, 0xA8C4, 0xA8CC, 0x0405, 0x8EA1, 0xA8CD, 0xA8CD,
+ 0x1813, 0x8EA1, 0xA8CE, 0xA8CE, 0x1818, 0x8EA1, 0xA8CF, 0xA8D2, 0x040F,
+ 0x8EA1, 0xA8D3, 0xA8D3, 0x1819, 0x8EA1, 0xA8D4, 0xA8D9, 0x0508, 0x8EA1,
+ 0xA8DA, 0xA8DA, 0x18E7, 0x8EA1, 0xA8DB, 0xA8E2, 0x050E, 0x8EA1, 0xA8E3,
+ 0xA8E3, 0x0230, 0x8EA1, 0xA8E4, 0xA8E4, 0x051B, 0x8EA1, 0xA8E5, 0xA8E7,
+ 0x0520, 0x8EA1, 0xA8E8, 0xA8EB, 0x0696, 0x8EA1, 0xA8EC, 0xA8EC, 0x0231,
+ 0x8EA1, 0xA8ED, 0xA8F0, 0x069F, 0x8EA1, 0xA8F1, 0xA8FB, 0x0826, 0x8EA1,
+ 0xA8FC, 0xA8FE, 0x09F5, 0x8EA1, 0xA9A1, 0xA9A1, 0x1E33, 0x8EA1, 0xA9A2,
+ 0xA9A2, 0x09F8, 0x8EA1, 0xA9A3, 0xA9A3, 0x1E34, 0x8EA1, 0xA9A4, 0xA9A5,
+ 0x09F9, 0x8EA1, 0xA9A6, 0xA9AB, 0x0BE1, 0x8EA1, 0xA9AC, 0xA9AE, 0x0DBB,
+ 0x8EA1, 0xA9AF, 0xA9AF, 0x2360, 0x8EA1, 0xA9B0, 0xA9B0, 0x2612, 0x8EA1,
+ 0xA9B1, 0xA9B3, 0x0F7B, 0x8EA1, 0xA9B4, 0xA9B5, 0x1100, 0x8EA1, 0xA9B6,
+ 0xA9B6, 0x1289, 0x8EA1, 0xA9B7, 0xA9B8, 0x13B2, 0x8EA1, 0xA9B9, 0xA9B9,
+ 0x2F0D, 0x8EA1, 0xC2A1, 0xC2C1, 0x0232, 0x8EA1, 0xC4A1, 0xC4FE, 0x0253,
+ 0x8EA1, 0xC5A1, 0xC5FE, 0x02B1, 0x8EA1, 0xC6A1, 0xC6FE, 0x030F, 0x8EA1,
+ 0xC7A1, 0xC7FE, 0x036D, 0x8EA1, 0xC8A1, 0xC8FE, 0x03CB, 0x8EA1, 0xC9A1,
+ 0xC9FE, 0x0429, 0x8EA1, 0xCAA1, 0xCAFE, 0x0487, 0x8EA1, 0xCBA1, 0xCBFE,
+ 0x04E5, 0x8EA1, 0xCCA1, 0xCCFE, 0x0543, 0x8EA1, 0xCDA1, 0xCDFE, 0x05A1,
+ 0x8EA1, 0xCEA1, 0xCEFE, 0x05FF, 0x8EA1, 0xCFA1, 0xCFFE, 0x065D, 0x8EA1,
+ 0xD0A1, 0xD0FE, 0x06BB, 0x8EA1, 0xD1A1, 0xD1FE, 0x0719, 0x8EA1, 0xD2A1,
+ 0xD2FE, 0x0777, 0x8EA1, 0xD3A1, 0xD3FE, 0x07D5, 0x8EA1, 0xD4A1, 0xD4FE,
+ 0x0833, 0x8EA1, 0xD5A1, 0xD5FE, 0x0891, 0x8EA1, 0xD6A1, 0xD6FE, 0x08EF,
+ 0x8EA1, 0xD7A1, 0xD7FE, 0x094D, 0x8EA1, 0xD8A1, 0xD8FE, 0x09AB, 0x8EA1,
+ 0xD9A1, 0xD9FE, 0x0A09, 0x8EA1, 0xDAA1, 0xDAFE, 0x0A67, 0x8EA1, 0xDBA1,
+ 0xDBFE, 0x0AC5, 0x8EA1, 0xDCA1, 0xDCFE, 0x0B23, 0x8EA1, 0xDDA1, 0xDDFE,
+ 0x0B81, 0x8EA1, 0xDEA1, 0xDEFE, 0x0BDF, 0x8EA1, 0xDFA1, 0xDFFE, 0x0C3D,
+ 0x8EA1, 0xE0A1, 0xE0FE, 0x0C9B, 0x8EA1, 0xE1A1, 0xE1FE, 0x0CF9, 0x8EA1,
+ 0xE2A1, 0xE2FE, 0x0D57, 0x8EA1, 0xE3A1, 0xE3FE, 0x0DB5, 0x8EA1, 0xE4A1,
+ 0xE4FE, 0x0E13, 0x8EA1, 0xE5A1, 0xE5FE, 0x0E71, 0x8EA1, 0xE6A1, 0xE6FE,
+ 0x0ECF, 0x8EA1, 0xE7A1, 0xE7FE, 0x0F2D, 0x8EA1, 0xE8A1, 0xE8FE, 0x0F8B,
+ 0x8EA1, 0xE9A1, 0xE9FE, 0x0FE9, 0x8EA1, 0xEAA1, 0xEAFE, 0x1047, 0x8EA1,
+ 0xEBA1, 0xEBFE, 0x10A5, 0x8EA1, 0xECA1, 0xECFE, 0x1103, 0x8EA1, 0xEDA1,
+ 0xEDFE, 0x1161, 0x8EA1, 0xEEA1, 0xEEFE, 0x11BF, 0x8EA1, 0xEFA1, 0xEFFE,
+ 0x121D, 0x8EA1, 0xF0A1, 0xF0FE, 0x127B, 0x8EA1, 0xF1A1, 0xF1FE, 0x12D9,
+ 0x8EA1, 0xF2A1, 0xF2FE, 0x1337, 0x8EA1, 0xF3A1, 0xF3FE, 0x1395, 0x8EA1,
+ 0xF4A1, 0xF4FE, 0x13F3, 0x8EA1, 0xF5A1, 0xF5FE, 0x1451, 0x8EA1, 0xF6A1,
+ 0xF6FE, 0x14AF, 0x8EA1, 0xF7A1, 0xF7FE, 0x150D, 0x8EA1, 0xF8A1, 0xF8FE,
+ 0x156B, 0x8EA1, 0xF9A1, 0xF9FE, 0x15C9, 0x8EA1, 0xFAA1, 0xFAFE, 0x1627,
+ 0x8EA1, 0xFBA1, 0xFBFE, 0x1685, 0x8EA1, 0xFCA1, 0xFCFE, 0x16E3, 0x8EA1,
+ 0xFDA1, 0xFDCB, 0x1741, 0x8EA2, 0xA1A1, 0xA1FE, 0x176C, 0x8EA2, 0xA2A1,
+ 0xA2FE, 0x17CA, 0x8EA2, 0xA3A1, 0xA3FE, 0x1828, 0x8EA2, 0xA4A1, 0xA4FE,
+ 0x1886, 0x8EA2, 0xA5A1, 0xA5FE, 0x18E4, 0x8EA2, 0xA6A1, 0xA6FE, 0x1942,
+ 0x8EA2, 0xA7A1, 0xA7FE, 0x19A0, 0x8EA2, 0xA8A1, 0xA8FE, 0x19FE, 0x8EA2,
+ 0xA9A1, 0xA9FE, 0x1A5C, 0x8EA2, 0xAAA1, 0xAAFE, 0x1ABA, 0x8EA2, 0xABA1,
+ 0xABFE, 0x1B18, 0x8EA2, 0xACA1, 0xACFE, 0x1B76, 0x8EA2, 0xADA1, 0xADFE,
+ 0x1BD4, 0x8EA2, 0xAEA1, 0xAEFE, 0x1C32, 0x8EA2, 0xAFA1, 0xAFFE, 0x1C90,
+ 0x8EA2, 0xB0A1, 0xB0FE, 0x1CEE, 0x8EA2, 0xB1A1, 0xB1FE, 0x1D4C, 0x8EA2,
+ 0xB2A1, 0xB2FE, 0x1DAA, 0x8EA2, 0xB3A1, 0xB3FE, 0x1E08, 0x8EA2, 0xB4A1,
+ 0xB4FE, 0x1E66, 0x8EA2, 0xB5A1, 0xB5FE, 0x1EC4, 0x8EA2, 0xB6A1, 0xB6FE,
+ 0x1F22, 0x8EA2, 0xB7A1, 0xB7FE, 0x1F80, 0x8EA2, 0xB8A1, 0xB8FE, 0x1FDE,
+ 0x8EA2, 0xB9A1, 0xB9FE, 0x203C, 0x8EA2, 0xBAA1, 0xBAFE, 0x209A, 0x8EA2,
+ 0xBBA1, 0xBBFE, 0x20F8, 0x8EA2, 0xBCA1, 0xBCFE, 0x2156, 0x8EA2, 0xBDA1,
+ 0xBDFE, 0x21B4, 0x8EA2, 0xBEA1, 0xBEFE, 0x2212, 0x8EA2, 0xBFA1, 0xBFFE,
+ 0x2270, 0x8EA2, 0xC0A1, 0xC0FE, 0x22CE, 0x8EA2, 0xC1A1, 0xC1FE, 0x232C,
+ 0x8EA2, 0xC2A1, 0xC2FE, 0x238A, 0x8EA2, 0xC3A1, 0xC3FE, 0x23E8, 0x8EA2,
+ 0xC4A1, 0xC4FE, 0x2446, 0x8EA2, 0xC5A1, 0xC5FE, 0x24A4, 0x8EA2, 0xC6A1,
+ 0xC6FE, 0x2502, 0x8EA2, 0xC7A1, 0xC7FE, 0x2560, 0x8EA2, 0xC8A1, 0xC8FE,
+ 0x25BE, 0x8EA2, 0xC9A1, 0xC9FE, 0x261C, 0x8EA2, 0xCAA1, 0xCAFE, 0x267A,
+ 0x8EA2, 0xCBA1, 0xCBFE, 0x26D8, 0x8EA2, 0xCCA1, 0xCCFE, 0x2736, 0x8EA2,
+ 0xCDA1, 0xCDFE, 0x2794, 0x8EA2, 0xCEA1, 0xCEFE, 0x27F2, 0x8EA2, 0xCFA1,
+ 0xCFFE, 0x2850, 0x8EA2, 0xD0A1, 0xD0FE, 0x28AE, 0x8EA2, 0xD1A1, 0xD1FE,
+ 0x290C, 0x8EA2, 0xD2A1, 0xD2FE, 0x296A, 0x8EA2, 0xD3A1, 0xD3FE, 0x29C8,
+ 0x8EA2, 0xD4A1, 0xD4FE, 0x2A26, 0x8EA2, 0xD5A1, 0xD5FE, 0x2A84, 0x8EA2,
+ 0xD6A1, 0xD6FE, 0x2AE2, 0x8EA2, 0xD7A1, 0xD7FE, 0x2B40, 0x8EA2, 0xD8A1,
+ 0xD8FE, 0x2B9E, 0x8EA2, 0xD9A1, 0xD9FE, 0x2BFC, 0x8EA2, 0xDAA1, 0xDAFE,
+ 0x2C5A, 0x8EA2, 0xDBA1, 0xDBFE, 0x2CB8, 0x8EA2, 0xDCA1, 0xDCFE, 0x2D16,
+ 0x8EA2, 0xDDA1, 0xDDFE, 0x2D74, 0x8EA2, 0xDEA1, 0xDEFE, 0x2DD2, 0x8EA2,
+ 0xDFA1, 0xDFFE, 0x2E30, 0x8EA2, 0xE0A1, 0xE0FE, 0x2E8E, 0x8EA2, 0xE1A1,
+ 0xE1FE, 0x2EEC, 0x8EA2, 0xE2A1, 0xE2FE, 0x2F4A, 0x8EA2, 0xE3A1, 0xE3FE,
+ 0x2FA8, 0x8EA2, 0xE4A1, 0xE4FE, 0x3006, 0x8EA2, 0xE5A1, 0xE5FE, 0x3064,
+ 0x8EA2, 0xE6A1, 0xE6FE, 0x30C2, 0x8EA2, 0xE7A1, 0xE7FE, 0x3120, 0x8EA2,
+ 0xE8A1, 0xE8FE, 0x317E, 0x8EA2, 0xE9A1, 0xE9FE, 0x31DC, 0x8EA2, 0xEAA1,
+ 0xEAFE, 0x323A, 0x8EA2, 0xEBA1, 0xEBFE, 0x3298, 0x8EA2, 0xECA1, 0xECFE,
+ 0x32F6, 0x8EA2, 0xEDA1, 0xEDFE, 0x3354, 0x8EA2, 0xEEA1, 0xEEFE, 0x33B2,
+ 0x8EA2, 0xEFA1, 0xEFFE, 0x3410, 0x8EA2, 0xF0A1, 0xF0FE, 0x346E, 0x8EA2,
+ 0xF1A1, 0xF1FE, 0x34CC, 0x8EA2, 0xF2A1, 0xF2C4, 0x352A,
};
diff --git a/core/src/fpdfapi/fpdf_cmaps/CNS1/CNS-EUC-V_0.cpp b/core/src/fpdfapi/fpdf_cmaps/CNS1/CNS-EUC-V_0.cpp
index 858ed5d269..38ad6ab908 100644
--- a/core/src/fpdfapi/fpdf_cmaps/CNS1/CNS-EUC-V_0.cpp
+++ b/core/src/fpdfapi/fpdf_cmaps/CNS1/CNS-EUC-V_0.cpp
@@ -70,135 +70,120 @@ const FX_WORD g_FXCMAP_CNS_EUC_V_0[180 * 3] = {
};
const FX_WORD g_FXCMAP_CNS_EUC_V_0_DWord[261 * 4] = {
- 0x8EA1, 0xA1A1, 0xA1AB, 0x0063, 0x8EA1, 0xA1AC, 0xA1AC, 0x354E,
- 0x8EA1, 0xA1AD, 0xA1BA, 0x006F, 0x8EA1, 0xA1BB, 0xA1BB, 0x007C,
- 0x8EA1, 0xA1BC, 0xA1BC, 0x007E, 0x8EA1, 0xA1BD, 0xA1BD, 0x007E,
- 0x8EA1, 0xA1BE, 0xA1BF, 0x0082, 0x8EA1, 0xA1C0, 0xA1C1, 0x0082,
- 0x8EA1, 0xA1C2, 0xA1C3, 0x0086, 0x8EA1, 0xA1C4, 0xA1C5, 0x0086,
- 0x8EA1, 0xA1C6, 0xA1C7, 0x008A, 0x8EA1, 0xA1C8, 0xA1C9, 0x008A,
- 0x8EA1, 0xA1CA, 0xA1CB, 0x008E, 0x8EA1, 0xA1CC, 0xA1CD, 0x008E,
- 0x8EA1, 0xA1CE, 0xA1CF, 0x0092, 0x8EA1, 0xA1D0, 0xA1D1, 0x0092,
- 0x8EA1, 0xA1D2, 0xA1D3, 0x0096, 0x8EA1, 0xA1D4, 0xA1D5, 0x0096,
- 0x8EA1, 0xA1D6, 0xA1D7, 0x009A, 0x8EA1, 0xA1D8, 0xA1D9, 0x009A,
- 0x8EA1, 0xA1DA, 0xA1DB, 0x009E, 0x8EA1, 0xA1DC, 0xA1FE, 0x009E,
- 0x8EA1, 0xA2A1, 0xA2C3, 0x00C1, 0x8EA1, 0xA2C4, 0xA2C4, 0x354F,
- 0x8EA1, 0xA2C5, 0xA2FE, 0x00E5, 0x8EA1, 0xA3A1, 0xA3CE, 0x011F,
- 0x8EA1, 0xA4A1, 0xA4FE, 0x014D, 0x8EA1, 0xA5A1, 0xA5EC, 0x01AB,
- 0x8EA1, 0xA5EE, 0xA5F0, 0x01F7, 0x8EA1, 0xA6A1, 0xA6BE, 0x01FA,
- 0x8EA1, 0xA7A1, 0xA7A1, 0x0253, 0x8EA1, 0xA7A2, 0xA7A4, 0x0218,
- 0x8EA1, 0xA7A5, 0xA7A5, 0x0254, 0x8EA1, 0xA7A6, 0xA7A6, 0x021B,
- 0x8EA1, 0xA7A7, 0xA7A7, 0x025A, 0x8EA1, 0xA7A8, 0xA7A8, 0x021C,
- 0x8EA1, 0xA7A9, 0xA7AC, 0x025B, 0x8EA1, 0xA7AD, 0xA7AF, 0x021D,
- 0x8EA1, 0xA7B0, 0xA7B0, 0x025F, 0x8EA1, 0xA7B1, 0xA7B1, 0x176E,
- 0x8EA1, 0xA7B2, 0xA7B2, 0x0260, 0x8EA1, 0xA7B3, 0xA7B3, 0x0262,
- 0x8EA1, 0xA7B4, 0xA7B4, 0x0220, 0x8EA1, 0xA7B5, 0xA7B5, 0x0263,
- 0x8EA1, 0xA7B6, 0xA7B6, 0x176F, 0x8EA1, 0xA7B7, 0xA7B7, 0x0221,
- 0x8EA1, 0xA7B8, 0xA7B9, 0x0264, 0x8EA1, 0xA7BA, 0xA7BA, 0x0222,
- 0x8EA1, 0xA7BB, 0xA7BB, 0x1770, 0x8EA1, 0xA7BC, 0xA7BC, 0x0223,
- 0x8EA1, 0xA7BD, 0xA7BD, 0x0266, 0x8EA1, 0xA7BE, 0xA7BE, 0x0279,
- 0x8EA1, 0xA7BF, 0xA7BF, 0x1775, 0x8EA1, 0xA7C0, 0xA7C1, 0x027A,
- 0x8EA1, 0xA7C2, 0xA7C2, 0x0224, 0x8EA1, 0xA7C3, 0xA7C6, 0x027C,
- 0x8EA1, 0xA7C7, 0xA7C7, 0x0225, 0x8EA1, 0xA7C8, 0xA7CB, 0x0282,
- 0x8EA1, 0xA7CC, 0xA7CC, 0x1776, 0x8EA1, 0xA7CD, 0xA7CD, 0x0286,
- 0x8EA1, 0xA7CE, 0xA7CE, 0x0226, 0x8EA1, 0xA7CF, 0xA7D0, 0x0288,
- 0x8EA1, 0xA7D1, 0xA7D2, 0x028C, 0x8EA1, 0xA7D3, 0xA7D5, 0x0227,
- 0x8EA1, 0xA7D6, 0xA7D8, 0x028E, 0x8EA1, 0xA7D9, 0xA7DA, 0x022A,
- 0x8EA1, 0xA7DB, 0xA7DB, 0x1777, 0x8EA1, 0xA7DC, 0xA7DF, 0x02D0,
- 0x8EA1, 0xA7E0, 0xA7E0, 0x02D5, 0x8EA1, 0xA7E1, 0xA7E1, 0x022C,
- 0x8EA1, 0xA7E2, 0xA7E5, 0x02D6, 0x8EA1, 0xA7E6, 0xA7E6, 0x022D,
- 0x8EA1, 0xA7E7, 0xA7ED, 0x02DA, 0x8EA1, 0xA7EE, 0xA7EE, 0x178A,
- 0x8EA1, 0xA7EF, 0xA7F2, 0x02E1, 0x8EA1, 0xA7F3, 0xA7F3, 0x178C,
- 0x8EA1, 0xA7F4, 0xA7F8, 0x02E5, 0x8EA1, 0xA7F9, 0xA7F9, 0x178D,
- 0x8EA1, 0xA7FA, 0xA7FD, 0x02EA, 0x8EA1, 0xA7FE, 0xA7FE, 0x0356,
- 0x8EA1, 0xA8A1, 0xA8A6, 0x0357, 0x8EA1, 0xA8A7, 0xA8A7, 0x035E,
- 0x8EA1, 0xA8A8, 0xA8A8, 0x0362, 0x8EA1, 0xA8A9, 0xA8AA, 0x022E,
- 0x8EA1, 0xA8AB, 0xA8B2, 0x0363, 0x8EA1, 0xA8B3, 0xA8B3, 0x17B2,
- 0x8EA1, 0xA8B4, 0xA8B6, 0x036B, 0x8EA1, 0xA8B7, 0xA8BA, 0x03F6,
- 0x8EA1, 0xA8BB, 0xA8BB, 0x1812, 0x8EA1, 0xA8BC, 0xA8BE, 0x03FA,
- 0x8EA1, 0xA8BF, 0xA8C3, 0x03FE, 0x8EA1, 0xA8C4, 0xA8CC, 0x0405,
- 0x8EA1, 0xA8CD, 0xA8CD, 0x1813, 0x8EA1, 0xA8CE, 0xA8CE, 0x1818,
- 0x8EA1, 0xA8CF, 0xA8D2, 0x040F, 0x8EA1, 0xA8D3, 0xA8D3, 0x1819,
- 0x8EA1, 0xA8D4, 0xA8D9, 0x0508, 0x8EA1, 0xA8DA, 0xA8DA, 0x18E7,
- 0x8EA1, 0xA8DB, 0xA8E2, 0x050E, 0x8EA1, 0xA8E3, 0xA8E3, 0x0230,
- 0x8EA1, 0xA8E4, 0xA8E4, 0x051B, 0x8EA1, 0xA8E5, 0xA8E7, 0x0520,
- 0x8EA1, 0xA8E8, 0xA8EB, 0x0696, 0x8EA1, 0xA8EC, 0xA8EC, 0x0231,
- 0x8EA1, 0xA8ED, 0xA8F0, 0x069F, 0x8EA1, 0xA8F1, 0xA8FB, 0x0826,
- 0x8EA1, 0xA8FC, 0xA8FE, 0x09F5, 0x8EA1, 0xA9A1, 0xA9A1, 0x1E33,
- 0x8EA1, 0xA9A2, 0xA9A2, 0x09F8, 0x8EA1, 0xA9A3, 0xA9A3, 0x1E34,
- 0x8EA1, 0xA9A4, 0xA9A5, 0x09F9, 0x8EA1, 0xA9A6, 0xA9AB, 0x0BE1,
- 0x8EA1, 0xA9AC, 0xA9AE, 0x0DBB, 0x8EA1, 0xA9AF, 0xA9AF, 0x2360,
- 0x8EA1, 0xA9B0, 0xA9B0, 0x2612, 0x8EA1, 0xA9B1, 0xA9B3, 0x0F7B,
- 0x8EA1, 0xA9B4, 0xA9B5, 0x1100, 0x8EA1, 0xA9B6, 0xA9B6, 0x1289,
- 0x8EA1, 0xA9B7, 0xA9B8, 0x13B2, 0x8EA1, 0xA9B9, 0xA9B9, 0x2F0D,
- 0x8EA1, 0xC2A1, 0xC2C1, 0x0232, 0x8EA1, 0xC4A1, 0xC4FE, 0x0253,
- 0x8EA1, 0xC5A1, 0xC5FE, 0x02B1, 0x8EA1, 0xC6A1, 0xC6FE, 0x030F,
- 0x8EA1, 0xC7A1, 0xC7FE, 0x036D, 0x8EA1, 0xC8A1, 0xC8FE, 0x03CB,
- 0x8EA1, 0xC9A1, 0xC9FE, 0x0429, 0x8EA1, 0xCAA1, 0xCAFE, 0x0487,
- 0x8EA1, 0xCBA1, 0xCBFE, 0x04E5, 0x8EA1, 0xCCA1, 0xCCFE, 0x0543,
- 0x8EA1, 0xCDA1, 0xCDFE, 0x05A1, 0x8EA1, 0xCEA1, 0xCEFE, 0x05FF,
- 0x8EA1, 0xCFA1, 0xCFFE, 0x065D, 0x8EA1, 0xD0A1, 0xD0FE, 0x06BB,
- 0x8EA1, 0xD1A1, 0xD1FE, 0x0719, 0x8EA1, 0xD2A1, 0xD2FE, 0x0777,
- 0x8EA1, 0xD3A1, 0xD3FE, 0x07D5, 0x8EA1, 0xD4A1, 0xD4FE, 0x0833,
- 0x8EA1, 0xD5A1, 0xD5FE, 0x0891, 0x8EA1, 0xD6A1, 0xD6FE, 0x08EF,
- 0x8EA1, 0xD7A1, 0xD7FE, 0x094D, 0x8EA1, 0xD8A1, 0xD8FE, 0x09AB,
- 0x8EA1, 0xD9A1, 0xD9FE, 0x0A09, 0x8EA1, 0xDAA1, 0xDAFE, 0x0A67,
- 0x8EA1, 0xDBA1, 0xDBFE, 0x0AC5, 0x8EA1, 0xDCA1, 0xDCFE, 0x0B23,
- 0x8EA1, 0xDDA1, 0xDDFE, 0x0B81, 0x8EA1, 0xDEA1, 0xDEFE, 0x0BDF,
- 0x8EA1, 0xDFA1, 0xDFFE, 0x0C3D, 0x8EA1, 0xE0A1, 0xE0FE, 0x0C9B,
- 0x8EA1, 0xE1A1, 0xE1FE, 0x0CF9, 0x8EA1, 0xE2A1, 0xE2FE, 0x0D57,
- 0x8EA1, 0xE3A1, 0xE3FE, 0x0DB5, 0x8EA1, 0xE4A1, 0xE4FE, 0x0E13,
- 0x8EA1, 0xE5A1, 0xE5FE, 0x0E71, 0x8EA1, 0xE6A1, 0xE6FE, 0x0ECF,
- 0x8EA1, 0xE7A1, 0xE7FE, 0x0F2D, 0x8EA1, 0xE8A1, 0xE8FE, 0x0F8B,
- 0x8EA1, 0xE9A1, 0xE9FE, 0x0FE9, 0x8EA1, 0xEAA1, 0xEAFE, 0x1047,
- 0x8EA1, 0xEBA1, 0xEBFE, 0x10A5, 0x8EA1, 0xECA1, 0xECFE, 0x1103,
- 0x8EA1, 0xEDA1, 0xEDFE, 0x1161, 0x8EA1, 0xEEA1, 0xEEFE, 0x11BF,
- 0x8EA1, 0xEFA1, 0xEFFE, 0x121D, 0x8EA1, 0xF0A1, 0xF0FE, 0x127B,
- 0x8EA1, 0xF1A1, 0xF1FE, 0x12D9, 0x8EA1, 0xF2A1, 0xF2FE, 0x1337,
- 0x8EA1, 0xF3A1, 0xF3FE, 0x1395, 0x8EA1, 0xF4A1, 0xF4FE, 0x13F3,
- 0x8EA1, 0xF5A1, 0xF5FE, 0x1451, 0x8EA1, 0xF6A1, 0xF6FE, 0x14AF,
- 0x8EA1, 0xF7A1, 0xF7FE, 0x150D, 0x8EA1, 0xF8A1, 0xF8FE, 0x156B,
- 0x8EA1, 0xF9A1, 0xF9FE, 0x15C9, 0x8EA1, 0xFAA1, 0xFAFE, 0x1627,
- 0x8EA1, 0xFBA1, 0xFBFE, 0x1685, 0x8EA1, 0xFCA1, 0xFCFE, 0x16E3,
- 0x8EA1, 0xFDA1, 0xFDCB, 0x1741, 0x8EA2, 0xA1A1, 0xA1FE, 0x176C,
- 0x8EA2, 0xA2A1, 0xA2FE, 0x17CA, 0x8EA2, 0xA3A1, 0xA3FE, 0x1828,
- 0x8EA2, 0xA4A1, 0xA4FE, 0x1886, 0x8EA2, 0xA5A1, 0xA5FE, 0x18E4,
- 0x8EA2, 0xA6A1, 0xA6FE, 0x1942, 0x8EA2, 0xA7A1, 0xA7FE, 0x19A0,
- 0x8EA2, 0xA8A1, 0xA8FE, 0x19FE, 0x8EA2, 0xA9A1, 0xA9FE, 0x1A5C,
- 0x8EA2, 0xAAA1, 0xAAFE, 0x1ABA, 0x8EA2, 0xABA1, 0xABFE, 0x1B18,
- 0x8EA2, 0xACA1, 0xACFE, 0x1B76, 0x8EA2, 0xADA1, 0xADFE, 0x1BD4,
- 0x8EA2, 0xAEA1, 0xAEFE, 0x1C32, 0x8EA2, 0xAFA1, 0xAFFE, 0x1C90,
- 0x8EA2, 0xB0A1, 0xB0FE, 0x1CEE, 0x8EA2, 0xB1A1, 0xB1FE, 0x1D4C,
- 0x8EA2, 0xB2A1, 0xB2FE, 0x1DAA, 0x8EA2, 0xB3A1, 0xB3FE, 0x1E08,
- 0x8EA2, 0xB4A1, 0xB4FE, 0x1E66, 0x8EA2, 0xB5A1, 0xB5FE, 0x1EC4,
- 0x8EA2, 0xB6A1, 0xB6FE, 0x1F22, 0x8EA2, 0xB7A1, 0xB7FE, 0x1F80,
- 0x8EA2, 0xB8A1, 0xB8FE, 0x1FDE, 0x8EA2, 0xB9A1, 0xB9FE, 0x203C,
- 0x8EA2, 0xBAA1, 0xBAFE, 0x209A, 0x8EA2, 0xBBA1, 0xBBFE, 0x20F8,
- 0x8EA2, 0xBCA1, 0xBCFE, 0x2156, 0x8EA2, 0xBDA1, 0xBDFE, 0x21B4,
- 0x8EA2, 0xBEA1, 0xBEFE, 0x2212, 0x8EA2, 0xBFA1, 0xBFFE, 0x2270,
- 0x8EA2, 0xC0A1, 0xC0FE, 0x22CE, 0x8EA2, 0xC1A1, 0xC1FE, 0x232C,
- 0x8EA2, 0xC2A1, 0xC2FE, 0x238A, 0x8EA2, 0xC3A1, 0xC3FE, 0x23E8,
- 0x8EA2, 0xC4A1, 0xC4FE, 0x2446, 0x8EA2, 0xC5A1, 0xC5FE, 0x24A4,
- 0x8EA2, 0xC6A1, 0xC6FE, 0x2502, 0x8EA2, 0xC7A1, 0xC7FE, 0x2560,
- 0x8EA2, 0xC8A1, 0xC8FE, 0x25BE, 0x8EA2, 0xC9A1, 0xC9FE, 0x261C,
- 0x8EA2, 0xCAA1, 0xCAFE, 0x267A, 0x8EA2, 0xCBA1, 0xCBFE, 0x26D8,
- 0x8EA2, 0xCCA1, 0xCCFE, 0x2736, 0x8EA2, 0xCDA1, 0xCDFE, 0x2794,
- 0x8EA2, 0xCEA1, 0xCEFE, 0x27F2, 0x8EA2, 0xCFA1, 0xCFFE, 0x2850,
- 0x8EA2, 0xD0A1, 0xD0FE, 0x28AE, 0x8EA2, 0xD1A1, 0xD1FE, 0x290C,
- 0x8EA2, 0xD2A1, 0xD2FE, 0x296A, 0x8EA2, 0xD3A1, 0xD3FE, 0x29C8,
- 0x8EA2, 0xD4A1, 0xD4FE, 0x2A26, 0x8EA2, 0xD5A1, 0xD5FE, 0x2A84,
- 0x8EA2, 0xD6A1, 0xD6FE, 0x2AE2, 0x8EA2, 0xD7A1, 0xD7FE, 0x2B40,
- 0x8EA2, 0xD8A1, 0xD8FE, 0x2B9E, 0x8EA2, 0xD9A1, 0xD9FE, 0x2BFC,
- 0x8EA2, 0xDAA1, 0xDAFE, 0x2C5A, 0x8EA2, 0xDBA1, 0xDBFE, 0x2CB8,
- 0x8EA2, 0xDCA1, 0xDCFE, 0x2D16, 0x8EA2, 0xDDA1, 0xDDFE, 0x2D74,
- 0x8EA2, 0xDEA1, 0xDEFE, 0x2DD2, 0x8EA2, 0xDFA1, 0xDFFE, 0x2E30,
- 0x8EA2, 0xE0A1, 0xE0FE, 0x2E8E, 0x8EA2, 0xE1A1, 0xE1FE, 0x2EEC,
- 0x8EA2, 0xE2A1, 0xE2FE, 0x2F4A, 0x8EA2, 0xE3A1, 0xE3FE, 0x2FA8,
- 0x8EA2, 0xE4A1, 0xE4FE, 0x3006, 0x8EA2, 0xE5A1, 0xE5FE, 0x3064,
- 0x8EA2, 0xE6A1, 0xE6FE, 0x30C2, 0x8EA2, 0xE7A1, 0xE7FE, 0x3120,
- 0x8EA2, 0xE8A1, 0xE8FE, 0x317E, 0x8EA2, 0xE9A1, 0xE9FE, 0x31DC,
- 0x8EA2, 0xEAA1, 0xEAFE, 0x323A, 0x8EA2, 0xEBA1, 0xEBFE, 0x3298,
- 0x8EA2, 0xECA1, 0xECFE, 0x32F6, 0x8EA2, 0xEDA1, 0xEDFE, 0x3354,
- 0x8EA2, 0xEEA1, 0xEEFE, 0x33B2, 0x8EA2, 0xEFA1, 0xEFFE, 0x3410,
- 0x8EA2, 0xF0A1, 0xF0FE, 0x346E, 0x8EA2, 0xF1A1, 0xF1FE, 0x34CC,
- 0x8EA2, 0xF2A1, 0xF2C4, 0x352A,
+ 0x8EA1, 0xA1A1, 0xA1AB, 0x0063, 0x8EA1, 0xA1AC, 0xA1AC, 0x354E, 0x8EA1,
+ 0xA1AD, 0xA1BA, 0x006F, 0x8EA1, 0xA1BB, 0xA1BB, 0x007C, 0x8EA1, 0xA1BC,
+ 0xA1BC, 0x007E, 0x8EA1, 0xA1BD, 0xA1BD, 0x007E, 0x8EA1, 0xA1BE, 0xA1BF,
+ 0x0082, 0x8EA1, 0xA1C0, 0xA1C1, 0x0082, 0x8EA1, 0xA1C2, 0xA1C3, 0x0086,
+ 0x8EA1, 0xA1C4, 0xA1C5, 0x0086, 0x8EA1, 0xA1C6, 0xA1C7, 0x008A, 0x8EA1,
+ 0xA1C8, 0xA1C9, 0x008A, 0x8EA1, 0xA1CA, 0xA1CB, 0x008E, 0x8EA1, 0xA1CC,
+ 0xA1CD, 0x008E, 0x8EA1, 0xA1CE, 0xA1CF, 0x0092, 0x8EA1, 0xA1D0, 0xA1D1,
+ 0x0092, 0x8EA1, 0xA1D2, 0xA1D3, 0x0096, 0x8EA1, 0xA1D4, 0xA1D5, 0x0096,
+ 0x8EA1, 0xA1D6, 0xA1D7, 0x009A, 0x8EA1, 0xA1D8, 0xA1D9, 0x009A, 0x8EA1,
+ 0xA1DA, 0xA1DB, 0x009E, 0x8EA1, 0xA1DC, 0xA1FE, 0x009E, 0x8EA1, 0xA2A1,
+ 0xA2C3, 0x00C1, 0x8EA1, 0xA2C4, 0xA2C4, 0x354F, 0x8EA1, 0xA2C5, 0xA2FE,
+ 0x00E5, 0x8EA1, 0xA3A1, 0xA3CE, 0x011F, 0x8EA1, 0xA4A1, 0xA4FE, 0x014D,
+ 0x8EA1, 0xA5A1, 0xA5EC, 0x01AB, 0x8EA1, 0xA5EE, 0xA5F0, 0x01F7, 0x8EA1,
+ 0xA6A1, 0xA6BE, 0x01FA, 0x8EA1, 0xA7A1, 0xA7A1, 0x0253, 0x8EA1, 0xA7A2,
+ 0xA7A4, 0x0218, 0x8EA1, 0xA7A5, 0xA7A5, 0x0254, 0x8EA1, 0xA7A6, 0xA7A6,
+ 0x021B, 0x8EA1, 0xA7A7, 0xA7A7, 0x025A, 0x8EA1, 0xA7A8, 0xA7A8, 0x021C,
+ 0x8EA1, 0xA7A9, 0xA7AC, 0x025B, 0x8EA1, 0xA7AD, 0xA7AF, 0x021D, 0x8EA1,
+ 0xA7B0, 0xA7B0, 0x025F, 0x8EA1, 0xA7B1, 0xA7B1, 0x176E, 0x8EA1, 0xA7B2,
+ 0xA7B2, 0x0260, 0x8EA1, 0xA7B3, 0xA7B3, 0x0262, 0x8EA1, 0xA7B4, 0xA7B4,
+ 0x0220, 0x8EA1, 0xA7B5, 0xA7B5, 0x0263, 0x8EA1, 0xA7B6, 0xA7B6, 0x176F,
+ 0x8EA1, 0xA7B7, 0xA7B7, 0x0221, 0x8EA1, 0xA7B8, 0xA7B9, 0x0264, 0x8EA1,
+ 0xA7BA, 0xA7BA, 0x0222, 0x8EA1, 0xA7BB, 0xA7BB, 0x1770, 0x8EA1, 0xA7BC,
+ 0xA7BC, 0x0223, 0x8EA1, 0xA7BD, 0xA7BD, 0x0266, 0x8EA1, 0xA7BE, 0xA7BE,
+ 0x0279, 0x8EA1, 0xA7BF, 0xA7BF, 0x1775, 0x8EA1, 0xA7C0, 0xA7C1, 0x027A,
+ 0x8EA1, 0xA7C2, 0xA7C2, 0x0224, 0x8EA1, 0xA7C3, 0xA7C6, 0x027C, 0x8EA1,
+ 0xA7C7, 0xA7C7, 0x0225, 0x8EA1, 0xA7C8, 0xA7CB, 0x0282, 0x8EA1, 0xA7CC,
+ 0xA7CC, 0x1776, 0x8EA1, 0xA7CD, 0xA7CD, 0x0286, 0x8EA1, 0xA7CE, 0xA7CE,
+ 0x0226, 0x8EA1, 0xA7CF, 0xA7D0, 0x0288, 0x8EA1, 0xA7D1, 0xA7D2, 0x028C,
+ 0x8EA1, 0xA7D3, 0xA7D5, 0x0227, 0x8EA1, 0xA7D6, 0xA7D8, 0x028E, 0x8EA1,
+ 0xA7D9, 0xA7DA, 0x022A, 0x8EA1, 0xA7DB, 0xA7DB, 0x1777, 0x8EA1, 0xA7DC,
+ 0xA7DF, 0x02D0, 0x8EA1, 0xA7E0, 0xA7E0, 0x02D5, 0x8EA1, 0xA7E1, 0xA7E1,
+ 0x022C, 0x8EA1, 0xA7E2, 0xA7E5, 0x02D6, 0x8EA1, 0xA7E6, 0xA7E6, 0x022D,
+ 0x8EA1, 0xA7E7, 0xA7ED, 0x02DA, 0x8EA1, 0xA7EE, 0xA7EE, 0x178A, 0x8EA1,
+ 0xA7EF, 0xA7F2, 0x02E1, 0x8EA1, 0xA7F3, 0xA7F3, 0x178C, 0x8EA1, 0xA7F4,
+ 0xA7F8, 0x02E5, 0x8EA1, 0xA7F9, 0xA7F9, 0x178D, 0x8EA1, 0xA7FA, 0xA7FD,
+ 0x02EA, 0x8EA1, 0xA7FE, 0xA7FE, 0x0356, 0x8EA1, 0xA8A1, 0xA8A6, 0x0357,
+ 0x8EA1, 0xA8A7, 0xA8A7, 0x035E, 0x8EA1, 0xA8A8, 0xA8A8, 0x0362, 0x8EA1,
+ 0xA8A9, 0xA8AA, 0x022E, 0x8EA1, 0xA8AB, 0xA8B2, 0x0363, 0x8EA1, 0xA8B3,
+ 0xA8B3, 0x17B2, 0x8EA1, 0xA8B4, 0xA8B6, 0x036B, 0x8EA1, 0xA8B7, 0xA8BA,
+ 0x03F6, 0x8EA1, 0xA8BB, 0xA8BB, 0x1812, 0x8EA1, 0xA8BC, 0xA8BE, 0x03FA,
+ 0x8EA1, 0xA8BF, 0xA8C3, 0x03FE, 0x8EA1, 0xA8C4, 0xA8CC, 0x0405, 0x8EA1,
+ 0xA8CD, 0xA8CD, 0x1813, 0x8EA1, 0xA8CE, 0xA8CE, 0x1818, 0x8EA1, 0xA8CF,
+ 0xA8D2, 0x040F, 0x8EA1, 0xA8D3, 0xA8D3, 0x1819, 0x8EA1, 0xA8D4, 0xA8D9,
+ 0x0508, 0x8EA1, 0xA8DA, 0xA8DA, 0x18E7, 0x8EA1, 0xA8DB, 0xA8E2, 0x050E,
+ 0x8EA1, 0xA8E3, 0xA8E3, 0x0230, 0x8EA1, 0xA8E4, 0xA8E4, 0x051B, 0x8EA1,
+ 0xA8E5, 0xA8E7, 0x0520, 0x8EA1, 0xA8E8, 0xA8EB, 0x0696, 0x8EA1, 0xA8EC,
+ 0xA8EC, 0x0231, 0x8EA1, 0xA8ED, 0xA8F0, 0x069F, 0x8EA1, 0xA8F1, 0xA8FB,
+ 0x0826, 0x8EA1, 0xA8FC, 0xA8FE, 0x09F5, 0x8EA1, 0xA9A1, 0xA9A1, 0x1E33,
+ 0x8EA1, 0xA9A2, 0xA9A2, 0x09F8, 0x8EA1, 0xA9A3, 0xA9A3, 0x1E34, 0x8EA1,
+ 0xA9A4, 0xA9A5, 0x09F9, 0x8EA1, 0xA9A6, 0xA9AB, 0x0BE1, 0x8EA1, 0xA9AC,
+ 0xA9AE, 0x0DBB, 0x8EA1, 0xA9AF, 0xA9AF, 0x2360, 0x8EA1, 0xA9B0, 0xA9B0,
+ 0x2612, 0x8EA1, 0xA9B1, 0xA9B3, 0x0F7B, 0x8EA1, 0xA9B4, 0xA9B5, 0x1100,
+ 0x8EA1, 0xA9B6, 0xA9B6, 0x1289, 0x8EA1, 0xA9B7, 0xA9B8, 0x13B2, 0x8EA1,
+ 0xA9B9, 0xA9B9, 0x2F0D, 0x8EA1, 0xC2A1, 0xC2C1, 0x0232, 0x8EA1, 0xC4A1,
+ 0xC4FE, 0x0253, 0x8EA1, 0xC5A1, 0xC5FE, 0x02B1, 0x8EA1, 0xC6A1, 0xC6FE,
+ 0x030F, 0x8EA1, 0xC7A1, 0xC7FE, 0x036D, 0x8EA1, 0xC8A1, 0xC8FE, 0x03CB,
+ 0x8EA1, 0xC9A1, 0xC9FE, 0x0429, 0x8EA1, 0xCAA1, 0xCAFE, 0x0487, 0x8EA1,
+ 0xCBA1, 0xCBFE, 0x04E5, 0x8EA1, 0xCCA1, 0xCCFE, 0x0543, 0x8EA1, 0xCDA1,
+ 0xCDFE, 0x05A1, 0x8EA1, 0xCEA1, 0xCEFE, 0x05FF, 0x8EA1, 0xCFA1, 0xCFFE,
+ 0x065D, 0x8EA1, 0xD0A1, 0xD0FE, 0x06BB, 0x8EA1, 0xD1A1, 0xD1FE, 0x0719,
+ 0x8EA1, 0xD2A1, 0xD2FE, 0x0777, 0x8EA1, 0xD3A1, 0xD3FE, 0x07D5, 0x8EA1,
+ 0xD4A1, 0xD4FE, 0x0833, 0x8EA1, 0xD5A1, 0xD5FE, 0x0891, 0x8EA1, 0xD6A1,
+ 0xD6FE, 0x08EF, 0x8EA1, 0xD7A1, 0xD7FE, 0x094D, 0x8EA1, 0xD8A1, 0xD8FE,
+ 0x09AB, 0x8EA1, 0xD9A1, 0xD9FE, 0x0A09, 0x8EA1, 0xDAA1, 0xDAFE, 0x0A67,
+ 0x8EA1, 0xDBA1, 0xDBFE, 0x0AC5, 0x8EA1, 0xDCA1, 0xDCFE, 0x0B23, 0x8EA1,
+ 0xDDA1, 0xDDFE, 0x0B81, 0x8EA1, 0xDEA1, 0xDEFE, 0x0BDF, 0x8EA1, 0xDFA1,
+ 0xDFFE, 0x0C3D, 0x8EA1, 0xE0A1, 0xE0FE, 0x0C9B, 0x8EA1, 0xE1A1, 0xE1FE,
+ 0x0CF9, 0x8EA1, 0xE2A1, 0xE2FE, 0x0D57, 0x8EA1, 0xE3A1, 0xE3FE, 0x0DB5,
+ 0x8EA1, 0xE4A1, 0xE4FE, 0x0E13, 0x8EA1, 0xE5A1, 0xE5FE, 0x0E71, 0x8EA1,
+ 0xE6A1, 0xE6FE, 0x0ECF, 0x8EA1, 0xE7A1, 0xE7FE, 0x0F2D, 0x8EA1, 0xE8A1,
+ 0xE8FE, 0x0F8B, 0x8EA1, 0xE9A1, 0xE9FE, 0x0FE9, 0x8EA1, 0xEAA1, 0xEAFE,
+ 0x1047, 0x8EA1, 0xEBA1, 0xEBFE, 0x10A5, 0x8EA1, 0xECA1, 0xECFE, 0x1103,
+ 0x8EA1, 0xEDA1, 0xEDFE, 0x1161, 0x8EA1, 0xEEA1, 0xEEFE, 0x11BF, 0x8EA1,
+ 0xEFA1, 0xEFFE, 0x121D, 0x8EA1, 0xF0A1, 0xF0FE, 0x127B, 0x8EA1, 0xF1A1,
+ 0xF1FE, 0x12D9, 0x8EA1, 0xF2A1, 0xF2FE, 0x1337, 0x8EA1, 0xF3A1, 0xF3FE,
+ 0x1395, 0x8EA1, 0xF4A1, 0xF4FE, 0x13F3, 0x8EA1, 0xF5A1, 0xF5FE, 0x1451,
+ 0x8EA1, 0xF6A1, 0xF6FE, 0x14AF, 0x8EA1, 0xF7A1, 0xF7FE, 0x150D, 0x8EA1,
+ 0xF8A1, 0xF8FE, 0x156B, 0x8EA1, 0xF9A1, 0xF9FE, 0x15C9, 0x8EA1, 0xFAA1,
+ 0xFAFE, 0x1627, 0x8EA1, 0xFBA1, 0xFBFE, 0x1685, 0x8EA1, 0xFCA1, 0xFCFE,
+ 0x16E3, 0x8EA1, 0xFDA1, 0xFDCB, 0x1741, 0x8EA2, 0xA1A1, 0xA1FE, 0x176C,
+ 0x8EA2, 0xA2A1, 0xA2FE, 0x17CA, 0x8EA2, 0xA3A1, 0xA3FE, 0x1828, 0x8EA2,
+ 0xA4A1, 0xA4FE, 0x1886, 0x8EA2, 0xA5A1, 0xA5FE, 0x18E4, 0x8EA2, 0xA6A1,
+ 0xA6FE, 0x1942, 0x8EA2, 0xA7A1, 0xA7FE, 0x19A0, 0x8EA2, 0xA8A1, 0xA8FE,
+ 0x19FE, 0x8EA2, 0xA9A1, 0xA9FE, 0x1A5C, 0x8EA2, 0xAAA1, 0xAAFE, 0x1ABA,
+ 0x8EA2, 0xABA1, 0xABFE, 0x1B18, 0x8EA2, 0xACA1, 0xACFE, 0x1B76, 0x8EA2,
+ 0xADA1, 0xADFE, 0x1BD4, 0x8EA2, 0xAEA1, 0xAEFE, 0x1C32, 0x8EA2, 0xAFA1,
+ 0xAFFE, 0x1C90, 0x8EA2, 0xB0A1, 0xB0FE, 0x1CEE, 0x8EA2, 0xB1A1, 0xB1FE,
+ 0x1D4C, 0x8EA2, 0xB2A1, 0xB2FE, 0x1DAA, 0x8EA2, 0xB3A1, 0xB3FE, 0x1E08,
+ 0x8EA2, 0xB4A1, 0xB4FE, 0x1E66, 0x8EA2, 0xB5A1, 0xB5FE, 0x1EC4, 0x8EA2,
+ 0xB6A1, 0xB6FE, 0x1F22, 0x8EA2, 0xB7A1, 0xB7FE, 0x1F80, 0x8EA2, 0xB8A1,
+ 0xB8FE, 0x1FDE, 0x8EA2, 0xB9A1, 0xB9FE, 0x203C, 0x8EA2, 0xBAA1, 0xBAFE,
+ 0x209A, 0x8EA2, 0xBBA1, 0xBBFE, 0x20F8, 0x8EA2, 0xBCA1, 0xBCFE, 0x2156,
+ 0x8EA2, 0xBDA1, 0xBDFE, 0x21B4, 0x8EA2, 0xBEA1, 0xBEFE, 0x2212, 0x8EA2,
+ 0xBFA1, 0xBFFE, 0x2270, 0x8EA2, 0xC0A1, 0xC0FE, 0x22CE, 0x8EA2, 0xC1A1,
+ 0xC1FE, 0x232C, 0x8EA2, 0xC2A1, 0xC2FE, 0x238A, 0x8EA2, 0xC3A1, 0xC3FE,
+ 0x23E8, 0x8EA2, 0xC4A1, 0xC4FE, 0x2446, 0x8EA2, 0xC5A1, 0xC5FE, 0x24A4,
+ 0x8EA2, 0xC6A1, 0xC6FE, 0x2502, 0x8EA2, 0xC7A1, 0xC7FE, 0x2560, 0x8EA2,
+ 0xC8A1, 0xC8FE, 0x25BE, 0x8EA2, 0xC9A1, 0xC9FE, 0x261C, 0x8EA2, 0xCAA1,
+ 0xCAFE, 0x267A, 0x8EA2, 0xCBA1, 0xCBFE, 0x26D8, 0x8EA2, 0xCCA1, 0xCCFE,
+ 0x2736, 0x8EA2, 0xCDA1, 0xCDFE, 0x2794, 0x8EA2, 0xCEA1, 0xCEFE, 0x27F2,
+ 0x8EA2, 0xCFA1, 0xCFFE, 0x2850, 0x8EA2, 0xD0A1, 0xD0FE, 0x28AE, 0x8EA2,
+ 0xD1A1, 0xD1FE, 0x290C, 0x8EA2, 0xD2A1, 0xD2FE, 0x296A, 0x8EA2, 0xD3A1,
+ 0xD3FE, 0x29C8, 0x8EA2, 0xD4A1, 0xD4FE, 0x2A26, 0x8EA2, 0xD5A1, 0xD5FE,
+ 0x2A84, 0x8EA2, 0xD6A1, 0xD6FE, 0x2AE2, 0x8EA2, 0xD7A1, 0xD7FE, 0x2B40,
+ 0x8EA2, 0xD8A1, 0xD8FE, 0x2B9E, 0x8EA2, 0xD9A1, 0xD9FE, 0x2BFC, 0x8EA2,
+ 0xDAA1, 0xDAFE, 0x2C5A, 0x8EA2, 0xDBA1, 0xDBFE, 0x2CB8, 0x8EA2, 0xDCA1,
+ 0xDCFE, 0x2D16, 0x8EA2, 0xDDA1, 0xDDFE, 0x2D74, 0x8EA2, 0xDEA1, 0xDEFE,
+ 0x2DD2, 0x8EA2, 0xDFA1, 0xDFFE, 0x2E30, 0x8EA2, 0xE0A1, 0xE0FE, 0x2E8E,
+ 0x8EA2, 0xE1A1, 0xE1FE, 0x2EEC, 0x8EA2, 0xE2A1, 0xE2FE, 0x2F4A, 0x8EA2,
+ 0xE3A1, 0xE3FE, 0x2FA8, 0x8EA2, 0xE4A1, 0xE4FE, 0x3006, 0x8EA2, 0xE5A1,
+ 0xE5FE, 0x3064, 0x8EA2, 0xE6A1, 0xE6FE, 0x30C2, 0x8EA2, 0xE7A1, 0xE7FE,
+ 0x3120, 0x8EA2, 0xE8A1, 0xE8FE, 0x317E, 0x8EA2, 0xE9A1, 0xE9FE, 0x31DC,
+ 0x8EA2, 0xEAA1, 0xEAFE, 0x323A, 0x8EA2, 0xEBA1, 0xEBFE, 0x3298, 0x8EA2,
+ 0xECA1, 0xECFE, 0x32F6, 0x8EA2, 0xEDA1, 0xEDFE, 0x3354, 0x8EA2, 0xEEA1,
+ 0xEEFE, 0x33B2, 0x8EA2, 0xEFA1, 0xEFFE, 0x3410, 0x8EA2, 0xF0A1, 0xF0FE,
+ 0x346E, 0x8EA2, 0xF1A1, 0xF1FE, 0x34CC, 0x8EA2, 0xF2A1, 0xF2C4, 0x352A,
};
diff --git a/core/src/fpdfapi/fpdf_cmaps/CNS1/ETen-B5-V_0.cpp b/core/src/fpdfapi/fpdf_cmaps/CNS1/ETen-B5-V_0.cpp
index eb1f19ccca..f098b1850e 100644
--- a/core/src/fpdfapi/fpdf_cmaps/CNS1/ETen-B5-V_0.cpp
+++ b/core/src/fpdfapi/fpdf_cmaps/CNS1/ETen-B5-V_0.cpp
@@ -7,9 +7,9 @@
#include "cmaps_cns1.h"
const FX_WORD g_FXCMAP_ETen_B5_V_0[13 * 3] = {
- 0xA14B, 0xA14B, 0x354E, 0xA15A, 0xA15A, 0x35AF, 0xA15C, 0xA15C, 0x35B1,
- 0xA15D, 0xA15E, 0x0082, 0xA161, 0xA162, 0x0086, 0xA165, 0xA166, 0x008A,
- 0xA169, 0xA16A, 0x008E, 0xA16D, 0xA16E, 0x0092, 0xA171, 0xA172, 0x0096,
- 0xA175, 0xA176, 0x009A, 0xA179, 0xA17A, 0x009E, 0xA1E3, 0xA1E3, 0x354F,
- 0xC6E4, 0xC6E5, 0x3711,
+ 0xA14B, 0xA14B, 0x354E, 0xA15A, 0xA15A, 0x35AF, 0xA15C, 0xA15C,
+ 0x35B1, 0xA15D, 0xA15E, 0x0082, 0xA161, 0xA162, 0x0086, 0xA165,
+ 0xA166, 0x008A, 0xA169, 0xA16A, 0x008E, 0xA16D, 0xA16E, 0x0092,
+ 0xA171, 0xA172, 0x0096, 0xA175, 0xA176, 0x009A, 0xA179, 0xA17A,
+ 0x009E, 0xA1E3, 0xA1E3, 0x354F, 0xC6E4, 0xC6E5, 0x3711,
};
diff --git a/core/src/fpdfapi/fpdf_cmaps/CNS1/HKscs-B5-V_5.cpp b/core/src/fpdfapi/fpdf_cmaps/CNS1/HKscs-B5-V_5.cpp
index c6ffe71e68..4dbcc38a94 100644
--- a/core/src/fpdfapi/fpdf_cmaps/CNS1/HKscs-B5-V_5.cpp
+++ b/core/src/fpdfapi/fpdf_cmaps/CNS1/HKscs-B5-V_5.cpp
@@ -7,9 +7,9 @@
#include "cmaps_cns1.h"
const FX_WORD g_FXCMAP_HKscs_B5_V_5[13 * 3] = {
- 0xA14B, 0xA14B, 0x354E, 0xA15A, 0xA15A, 0x35AF, 0xA15C, 0xA15C, 0x35B1,
- 0xA15D, 0xA15E, 0x0082, 0xA161, 0xA162, 0x0086, 0xA165, 0xA166, 0x008A,
- 0xA169, 0xA16A, 0x008E, 0xA16D, 0xA16E, 0x0092, 0xA171, 0xA172, 0x0096,
- 0xA175, 0xA176, 0x009A, 0xA179, 0xA17A, 0x009E, 0xA1E3, 0xA1E3, 0x354F,
- 0xC6E4, 0xC6E5, 0x3711,
+ 0xA14B, 0xA14B, 0x354E, 0xA15A, 0xA15A, 0x35AF, 0xA15C, 0xA15C,
+ 0x35B1, 0xA15D, 0xA15E, 0x0082, 0xA161, 0xA162, 0x0086, 0xA165,
+ 0xA166, 0x008A, 0xA169, 0xA16A, 0x008E, 0xA16D, 0xA16E, 0x0092,
+ 0xA171, 0xA172, 0x0096, 0xA175, 0xA176, 0x009A, 0xA179, 0xA17A,
+ 0x009E, 0xA1E3, 0xA1E3, 0x354F, 0xC6E4, 0xC6E5, 0x3711,
};
diff --git a/core/src/fpdfapi/fpdf_cmaps/CNS1/UniCNS-UCS2-V_3.cpp b/core/src/fpdfapi/fpdf_cmaps/CNS1/UniCNS-UCS2-V_3.cpp
index f45d064be1..2ec788ebf5 100644
--- a/core/src/fpdfapi/fpdf_cmaps/CNS1/UniCNS-UCS2-V_3.cpp
+++ b/core/src/fpdfapi/fpdf_cmaps/CNS1/UniCNS-UCS2-V_3.cpp
@@ -7,9 +7,9 @@
#include "cmaps_cns1.h"
const FX_WORD g_FXCMAP_UniCNS_UCS2_V_3[13 * 3] = {
- 0x2013, 0x2013, 0x0078, 0x2014, 0x2014, 0x007A, 0x2025, 0x2025, 0x006D,
- 0x3008, 0x3009, 0x0096, 0x300A, 0x300B, 0x0092, 0x300C, 0x300D, 0x009A,
- 0x300E, 0x300F, 0x009E, 0x3010, 0x3011, 0x008E, 0x3014, 0x3015, 0x008A,
- 0xFE4F, 0xFE4F, 0x35B1, 0xFF08, 0xFF09, 0x0082, 0xFF5B, 0xFF5B, 0x0086,
- 0xFF5D, 0xFF5D, 0x0087,
+ 0x2013, 0x2013, 0x0078, 0x2014, 0x2014, 0x007A, 0x2025, 0x2025,
+ 0x006D, 0x3008, 0x3009, 0x0096, 0x300A, 0x300B, 0x0092, 0x300C,
+ 0x300D, 0x009A, 0x300E, 0x300F, 0x009E, 0x3010, 0x3011, 0x008E,
+ 0x3014, 0x3015, 0x008A, 0xFE4F, 0xFE4F, 0x35B1, 0xFF08, 0xFF09,
+ 0x0082, 0xFF5B, 0xFF5B, 0x0086, 0xFF5D, 0xFF5D, 0x0087,
};
diff --git a/core/src/fpdfapi/fpdf_cmaps/CNS1/UniCNS-UTF16-H_0.cpp b/core/src/fpdfapi/fpdf_cmaps/CNS1/UniCNS-UTF16-H_0.cpp
index 86ba7dc511..f4ff8d6719 100644
--- a/core/src/fpdfapi/fpdf_cmaps/CNS1/UniCNS-UTF16-H_0.cpp
+++ b/core/src/fpdfapi/fpdf_cmaps/CNS1/UniCNS-UTF16-H_0.cpp
@@ -7,3646 +7,3241 @@
#include "cmaps_cns1.h"
const FX_WORD g_FXCMAP_UniCNS_UTF16_H_0[14557 * 2] = {
- 0x0020, 0x0001, 0x0021, 0x0002, 0x0022, 0x0003, 0x0023, 0x0004,
- 0x0024, 0x0005, 0x0025, 0x0006, 0x0026, 0x0007, 0x0027, 0x0008,
- 0x0028, 0x0009, 0x0029, 0x000A, 0x002A, 0x000B, 0x002B, 0x000C,
- 0x002C, 0x000D, 0x002D, 0x000E, 0x002E, 0x000F, 0x002F, 0x0010,
- 0x0030, 0x0011, 0x0031, 0x0012, 0x0032, 0x0013, 0x0033, 0x0014,
- 0x0034, 0x0015, 0x0035, 0x0016, 0x0036, 0x0017, 0x0037, 0x0018,
- 0x0038, 0x0019, 0x0039, 0x001A, 0x003A, 0x001B, 0x003B, 0x001C,
- 0x003C, 0x001D, 0x003D, 0x001E, 0x003E, 0x001F, 0x003F, 0x0020,
- 0x0040, 0x0021, 0x0041, 0x0022, 0x0042, 0x0023, 0x0043, 0x0024,
- 0x0044, 0x0025, 0x0045, 0x0026, 0x0046, 0x0027, 0x0047, 0x0028,
- 0x0048, 0x0029, 0x0049, 0x002A, 0x004A, 0x002B, 0x004B, 0x002C,
- 0x004C, 0x002D, 0x004D, 0x002E, 0x004E, 0x002F, 0x004F, 0x0030,
- 0x0050, 0x0031, 0x0051, 0x0032, 0x0052, 0x0033, 0x0053, 0x0034,
- 0x0054, 0x0035, 0x0055, 0x0036, 0x0056, 0x0037, 0x0057, 0x0038,
- 0x0058, 0x0039, 0x0059, 0x003A, 0x005A, 0x003B, 0x005B, 0x003C,
- 0x005C, 0x003D, 0x005D, 0x003E, 0x005E, 0x003F, 0x005F, 0x0040,
- 0x0060, 0x0041, 0x0061, 0x0042, 0x0062, 0x0043, 0x0063, 0x0044,
- 0x0064, 0x0045, 0x0065, 0x0046, 0x0066, 0x0047, 0x0067, 0x0048,
- 0x0068, 0x0049, 0x0069, 0x004A, 0x006A, 0x004B, 0x006B, 0x004C,
- 0x006C, 0x004D, 0x006D, 0x004E, 0x006E, 0x004F, 0x006F, 0x0050,
- 0x0070, 0x0051, 0x0071, 0x0052, 0x0072, 0x0053, 0x0073, 0x0054,
- 0x0074, 0x0055, 0x0075, 0x0056, 0x0076, 0x0057, 0x0077, 0x0058,
- 0x0078, 0x0059, 0x0079, 0x005A, 0x007A, 0x005B, 0x007B, 0x005C,
- 0x007C, 0x005D, 0x007D, 0x005E, 0x007E, 0x005F, 0x00A2, 0x0106,
- 0x00A3, 0x0107, 0x00A5, 0x0104, 0x00A7, 0x00B2, 0x00A8, 0x35B3,
- 0x00AC, 0x36E1, 0x00AF, 0x00C3, 0x00B0, 0x0118, 0x00B1, 0x00D4,
- 0x00B7, 0x0073, 0x00D7, 0x00D2, 0x00F7, 0x00D3, 0x02C6, 0x35B4,
- 0x02C7, 0x01F8, 0x02CA, 0x01F7, 0x02CB, 0x01F9, 0x02CD, 0x00C6,
- 0x02D9, 0x01F6, 0x0308, 0x35B3, 0x0391, 0x01A1, 0x0392, 0x01A2,
- 0x0393, 0x01A3, 0x0394, 0x01A4, 0x0395, 0x01A5, 0x0396, 0x01A6,
- 0x0397, 0x01A7, 0x0398, 0x01A8, 0x0399, 0x01A9, 0x039A, 0x01AA,
- 0x039B, 0x01AB, 0x039C, 0x01AC, 0x039D, 0x01AD, 0x039E, 0x01AE,
- 0x039F, 0x01AF, 0x03A0, 0x01B0, 0x03A1, 0x01B1, 0x03A3, 0x01B2,
- 0x03A4, 0x01B3, 0x03A5, 0x01B4, 0x03A6, 0x01B5, 0x03A7, 0x01B6,
- 0x03A8, 0x01B7, 0x03A9, 0x01B8, 0x03B1, 0x01B9, 0x03B2, 0x01BA,
- 0x03B3, 0x01BB, 0x03B4, 0x01BC, 0x03B5, 0x01BD, 0x03B6, 0x01BE,
- 0x03B7, 0x01BF, 0x03B8, 0x01C0, 0x03B9, 0x01C1, 0x03BA, 0x01C2,
- 0x03BB, 0x01C3, 0x03BC, 0x01C4, 0x03BD, 0x01C5, 0x03BE, 0x01C6,
- 0x03BF, 0x01C7, 0x03C0, 0x01C8, 0x03C1, 0x01C9, 0x03C3, 0x01CA,
- 0x03C4, 0x01CB, 0x03C5, 0x01CC, 0x03C6, 0x01CD, 0x03C7, 0x01CE,
- 0x03C8, 0x01CF, 0x03C9, 0x01D0, 0x0401, 0x3670, 0x0410, 0x366A,
- 0x0411, 0x366B, 0x0412, 0x366C, 0x0413, 0x366D, 0x0414, 0x366E,
- 0x0415, 0x366F, 0x0416, 0x3671, 0x0417, 0x3672, 0x0418, 0x3673,
- 0x0419, 0x3674, 0x041A, 0x3675, 0x041B, 0x3676, 0x041C, 0x3677,
- 0x041D, 0x3678, 0x041E, 0x3679, 0x041F, 0x367A, 0x0420, 0x367B,
- 0x0421, 0x367C, 0x0422, 0x367D, 0x0423, 0x367E, 0x0424, 0x367F,
- 0x0425, 0x3680, 0x0426, 0x3681, 0x0427, 0x3682, 0x0428, 0x3683,
- 0x0429, 0x3684, 0x042A, 0x3685, 0x042B, 0x3686, 0x042C, 0x3687,
- 0x042D, 0x3688, 0x042E, 0x3689, 0x042F, 0x368A, 0x0430, 0x368B,
- 0x0431, 0x368C, 0x0432, 0x368D, 0x0433, 0x368E, 0x0434, 0x368F,
- 0x0435, 0x3690, 0x0436, 0x3692, 0x0437, 0x3693, 0x0438, 0x3694,
- 0x0439, 0x3695, 0x043A, 0x3696, 0x043B, 0x3697, 0x043C, 0x3698,
- 0x043D, 0x3699, 0x043E, 0x369A, 0x043F, 0x369B, 0x0440, 0x369C,
- 0x0441, 0x369D, 0x0442, 0x369E, 0x0443, 0x369F, 0x0444, 0x36A0,
- 0x0445, 0x36A1, 0x0446, 0x36A2, 0x0447, 0x36A3, 0x0448, 0x36A4,
- 0x0449, 0x36A5, 0x044A, 0x36A6, 0x044B, 0x36A7, 0x044C, 0x36A8,
- 0x044D, 0x36A9, 0x044E, 0x36AA, 0x044F, 0x36AB, 0x0451, 0x3691,
- 0x2013, 0x0079, 0x2014, 0x007B, 0x2018, 0x00A6, 0x2019, 0x00A7,
- 0x201C, 0x00A8, 0x201D, 0x00A9, 0x2022, 0x0068, 0x2025, 0x006F,
- 0x2026, 0x006E, 0x2027, 0x0068, 0x2032, 0x00AD, 0x2035, 0x00AC,
- 0x203B, 0x00B1, 0x203E, 0x00C3, 0x2103, 0x010A, 0x2105, 0x00C2,
- 0x2109, 0x010B, 0x2116, 0x36E6, 0x2121, 0x36E7, 0x2160, 0x0157,
- 0x2161, 0x0158, 0x2162, 0x0159, 0x2163, 0x015A, 0x2164, 0x015B,
- 0x2165, 0x015C, 0x2166, 0x015D, 0x2167, 0x015E, 0x2168, 0x015F,
- 0x2169, 0x0160, 0x2170, 0x020E, 0x2171, 0x020F, 0x2172, 0x0210,
- 0x2173, 0x0211, 0x2174, 0x0212, 0x2175, 0x0213, 0x2176, 0x0214,
- 0x2177, 0x0215, 0x2178, 0x0216, 0x2179, 0x0217, 0x2190, 0x00F8,
- 0x2191, 0x00F5, 0x2192, 0x00F7, 0x2193, 0x00F6, 0x2196, 0x00F9,
- 0x2197, 0x00FA, 0x2198, 0x00FC, 0x2199, 0x00FB, 0x21B8, 0x36AD,
- 0x21B9, 0x36AE, 0x21E7, 0x36AC, 0x2215, 0x0101, 0x221A, 0x00D5,
- 0x221E, 0x00DC, 0x221F, 0x00E9, 0x2220, 0x00E8, 0x2223, 0x00FE,
- 0x2225, 0x00FD, 0x2229, 0x00E5, 0x222A, 0x00E6, 0x222B, 0x00ED,
- 0x222E, 0x00EE, 0x2234, 0x00F0, 0x2235, 0x00EF, 0x223C, 0x00E4,
- 0x2252, 0x00DD, 0x2260, 0x00DB, 0x2261, 0x00DE, 0x2266, 0x00D9,
- 0x2267, 0x00DA, 0x2295, 0x00F3, 0x2299, 0x00F4, 0x22A5, 0x00E7,
- 0x22BF, 0x00EA, 0x22EF, 0x006E, 0x2400, 0x0232, 0x2401, 0x0233,
- 0x2402, 0x0234, 0x2403, 0x0235, 0x2404, 0x0236, 0x2405, 0x0237,
- 0x2406, 0x0238, 0x2407, 0x0239, 0x2408, 0x023A, 0x2409, 0x023B,
- 0x240A, 0x023C, 0x240B, 0x023D, 0x240C, 0x023E, 0x240D, 0x023F,
- 0x240E, 0x0240, 0x240F, 0x0241, 0x2410, 0x0242, 0x2411, 0x0243,
- 0x2412, 0x0244, 0x2413, 0x0245, 0x2414, 0x0246, 0x2415, 0x0247,
- 0x2416, 0x0248, 0x2417, 0x0249, 0x2418, 0x024A, 0x2419, 0x024B,
- 0x241A, 0x024C, 0x241B, 0x024D, 0x241C, 0x024E, 0x241D, 0x024F,
- 0x241E, 0x0250, 0x241F, 0x0251, 0x2421, 0x0252, 0x2460, 0x01FA,
- 0x2461, 0x01FB, 0x2462, 0x01FC, 0x2463, 0x01FD, 0x2464, 0x01FE,
- 0x2465, 0x01FF, 0x2466, 0x0200, 0x2467, 0x0201, 0x2468, 0x0202,
- 0x2469, 0x0203, 0x2474, 0x0204, 0x2475, 0x0205, 0x2476, 0x0206,
- 0x2477, 0x0207, 0x2478, 0x0208, 0x2479, 0x0209, 0x247A, 0x020A,
- 0x247B, 0x020B, 0x247C, 0x020C, 0x247D, 0x020D, 0x2500, 0x0137,
- 0x2502, 0x0138, 0x250C, 0x013A, 0x2510, 0x013B, 0x2514, 0x013C,
- 0x2518, 0x013D, 0x251C, 0x0135, 0x2524, 0x0134, 0x252C, 0x0133,
- 0x2534, 0x0132, 0x253C, 0x0131, 0x2550, 0x0142, 0x2551, 0x370A,
- 0x2552, 0x36F8, 0x2553, 0x3701, 0x2554, 0x36EF, 0x2555, 0x36FA,
- 0x2556, 0x3703, 0x2557, 0x36F1, 0x2558, 0x36FE, 0x2559, 0x3707,
- 0x255A, 0x36F5, 0x255B, 0x3700, 0x255C, 0x3709, 0x255D, 0x36F7,
- 0x255E, 0x0143, 0x255F, 0x3704, 0x2560, 0x36F2, 0x2561, 0x0145,
- 0x2562, 0x3706, 0x2563, 0x36F4, 0x2564, 0x36F9, 0x2565, 0x3702,
- 0x2566, 0x36F0, 0x2567, 0x36FF, 0x2568, 0x3708, 0x2569, 0x36F6,
- 0x256A, 0x0144, 0x256B, 0x3705, 0x256C, 0x36F3, 0x256D, 0x013E,
- 0x256E, 0x013F, 0x256F, 0x0141, 0x2570, 0x0140, 0x2571, 0x014A,
- 0x2572, 0x014B, 0x2573, 0x014C, 0x2574, 0x35B0, 0x2581, 0x0122,
- 0x2582, 0x0123, 0x2583, 0x0124, 0x2584, 0x0125, 0x2585, 0x0126,
- 0x2586, 0x0127, 0x2587, 0x0128, 0x2588, 0x0129, 0x2589, 0x0130,
- 0x258A, 0x012F, 0x258B, 0x012E, 0x258C, 0x012D, 0x258D, 0x012C,
- 0x258E, 0x012B, 0x258F, 0x012A, 0x2593, 0x3710, 0x2594, 0x0136,
- 0x2595, 0x0139, 0x25A0, 0x00BE, 0x25A1, 0x00BD, 0x25B2, 0x00B7,
- 0x25B3, 0x00B6, 0x25BC, 0x00C0, 0x25BD, 0x00BF, 0x25C6, 0x00BC,
- 0x25C7, 0x00BB, 0x25CB, 0x00B4, 0x25CE, 0x00B8, 0x25CF, 0x00B5,
- 0x25E2, 0x0146, 0x25E3, 0x0147, 0x25E4, 0x0149, 0x25E5, 0x0148,
- 0x2605, 0x00BA, 0x2606, 0x00B9, 0x2609, 0x00F4, 0x2640, 0x00F1,
- 0x2641, 0x00F3, 0x2642, 0x00F2, 0x273D, 0x35C0, 0x2F00, 0x0253,
- 0x2F01, 0x0218, 0x2F02, 0x0219, 0x2F03, 0x021A, 0x2F04, 0x0254,
- 0x2F05, 0x021B, 0x2F06, 0x025A, 0x2F07, 0x021C, 0x2F08, 0x025B,
- 0x2F09, 0x025C, 0x2F0A, 0x025D, 0x2F0B, 0x025E, 0x2F0C, 0x021D,
- 0x2F0D, 0x021E, 0x2F0E, 0x021F, 0x2F0F, 0x025F, 0x2F10, 0x176E,
- 0x2F11, 0x0260, 0x2F12, 0x0262, 0x2F13, 0x0220, 0x2F14, 0x0263,
- 0x2F15, 0x176F, 0x2F16, 0x0221, 0x2F17, 0x0264, 0x2F18, 0x0265,
- 0x2F19, 0x0222, 0x2F1A, 0x1770, 0x2F1B, 0x0223, 0x2F1C, 0x0266,
- 0x2F1D, 0x0279, 0x2F1E, 0x1775, 0x2F1F, 0x027A, 0x2F20, 0x027B,
- 0x2F21, 0x0224, 0x2F22, 0x0224, 0x2F23, 0x027C, 0x2F24, 0x027D,
- 0x2F25, 0x027E, 0x2F26, 0x027F, 0x2F27, 0x0225, 0x2F28, 0x0282,
- 0x2F29, 0x0283, 0x2F2A, 0x0284, 0x2F2B, 0x0285, 0x2F2C, 0x1776,
- 0x2F2D, 0x0286, 0x2F2E, 0x0226, 0x2F2F, 0x0288, 0x2F30, 0x0289,
- 0x2F31, 0x028C, 0x2F32, 0x028D, 0x2F33, 0x0227, 0x2F34, 0x0228,
- 0x2F35, 0x0229, 0x2F36, 0x028E, 0x2F37, 0x028F, 0x2F38, 0x0290,
- 0x2F39, 0x022A, 0x2F3A, 0x022B, 0x2F3B, 0x1777, 0x2F3C, 0x02D0,
- 0x2F3D, 0x02D1, 0x2F3E, 0x02D2, 0x2F3F, 0x02D3, 0x2F40, 0x02D5,
- 0x2F41, 0x022C, 0x2F42, 0x02D6, 0x2F43, 0x02D7, 0x2F44, 0x02D8,
- 0x2F45, 0x02D9, 0x2F46, 0x022D, 0x2F47, 0x02DA, 0x2F48, 0x02DB,
- 0x2F49, 0x02DC, 0x2F4A, 0x02DD, 0x2F4B, 0x02DE, 0x2F4C, 0x02DF,
- 0x2F4D, 0x02E0, 0x2F4E, 0x178A, 0x2F4F, 0x02E1, 0x2F50, 0x02E2,
- 0x2F51, 0x02E3, 0x2F52, 0x02E4, 0x2F53, 0x178C, 0x2F54, 0x02E5,
- 0x2F55, 0x02E6, 0x2F56, 0x02E7, 0x2F57, 0x02E8, 0x2F58, 0x02E9,
- 0x2F59, 0x178D, 0x2F5A, 0x02EA, 0x2F5B, 0x02EB, 0x2F5C, 0x02EC,
- 0x2F5D, 0x02ED, 0x2F5E, 0x0356, 0x2F5F, 0x0357, 0x2F60, 0x0358,
- 0x2F61, 0x0359, 0x2F62, 0x035A, 0x2F63, 0x035B, 0x2F64, 0x035C,
- 0x2F65, 0x035E, 0x2F66, 0x0362, 0x2F67, 0x022E, 0x2F68, 0x022F,
- 0x2F69, 0x0363, 0x2F6A, 0x0364, 0x2F6B, 0x0365, 0x2F6C, 0x0366,
- 0x2F6D, 0x0367, 0x2F6E, 0x0368, 0x2F6F, 0x0369, 0x2F70, 0x036A,
- 0x2F71, 0x17B2, 0x2F72, 0x036B, 0x2F73, 0x036C, 0x2F74, 0x036D,
- 0x2F75, 0x03F6, 0x2F76, 0x03F7, 0x2F77, 0x03F8, 0x2F78, 0x03F9,
- 0x2F79, 0x1812, 0x2F7A, 0x03FA, 0x2F7B, 0x03FB, 0x2F7C, 0x03FC,
- 0x2F7D, 0x03FE, 0x2F7E, 0x03FF, 0x2F7F, 0x0400, 0x2F80, 0x0401,
- 0x2F81, 0x0402, 0x2F82, 0x0405, 0x2F83, 0x0406, 0x2F84, 0x0407,
- 0x2F85, 0x0408, 0x2F86, 0x0409, 0x2F87, 0x040A, 0x2F88, 0x040B,
- 0x2F89, 0x040C, 0x2F8A, 0x040D, 0x2F8B, 0x1813, 0x2F8C, 0x1818,
- 0x2F8D, 0x040F, 0x2F8E, 0x0410, 0x2F8F, 0x0411, 0x2F90, 0x0412,
- 0x2F91, 0x1819, 0x2F92, 0x0508, 0x2F93, 0x0509, 0x2F94, 0x050A,
- 0x2F95, 0x050B, 0x2F96, 0x050C, 0x2F97, 0x050D, 0x2F98, 0x18E7,
- 0x2F99, 0x050E, 0x2F9A, 0x050F, 0x2F9B, 0x0510, 0x2F9C, 0x0511,
- 0x2F9D, 0x0512, 0x2F9E, 0x0513, 0x2F9F, 0x0514, 0x2FA0, 0x0515,
- 0x2FA1, 0x0230, 0x2FA2, 0x051B, 0x2FA3, 0x0520, 0x2FA4, 0x0521,
- 0x2FA5, 0x0522, 0x2FA6, 0x0696, 0x2FA7, 0x0697, 0x2FA8, 0x0698,
- 0x2FA9, 0x0699, 0x2FAA, 0x0231, 0x2FAB, 0x069F, 0x2FAC, 0x06A0,
- 0x2FAE, 0x06A2, 0x2FAF, 0x0826, 0x2FB0, 0x0827, 0x2FB1, 0x0828,
- 0x2FB2, 0x0829, 0x2FB3, 0x082A, 0x2FB4, 0x082B, 0x2FB5, 0x082C,
- 0x2FB6, 0x082D, 0x2FB7, 0x082E, 0x2FB8, 0x082F, 0x2FB9, 0x0830,
- 0x2FBA, 0x09F5, 0x2FBB, 0x09F6, 0x2FBC, 0x09F7, 0x2FBD, 0x1E33,
- 0x2FBE, 0x09F8, 0x2FBF, 0x1E34, 0x2FC0, 0x09F9, 0x2FC1, 0x09FA,
- 0x2FC2, 0x0BE1, 0x2FC3, 0x0BE2, 0x2FC4, 0x0BE3, 0x2FC5, 0x0BE4,
- 0x2FC6, 0x0BE5, 0x2FC7, 0x0BE6, 0x2FC8, 0x0DBB, 0x2FC9, 0x0DBC,
- 0x2FCA, 0x0DBD, 0x2FCB, 0x2360, 0x2FCC, 0x2612, 0x2FCD, 0x0F7B,
- 0x2FCE, 0x0F7C, 0x2FCF, 0x0F7D, 0x2FD0, 0x1100, 0x2FD1, 0x1101,
- 0x2FD2, 0x1289, 0x2FD3, 0x13B2, 0x2FD4, 0x13B3, 0x2FD5, 0x2F0D,
- 0x3000, 0x0063, 0x3001, 0x0065, 0x3002, 0x0066, 0x3003, 0x00B3,
- 0x3005, 0x35BA, 0x3006, 0x35BB, 0x3007, 0x35BC, 0x3008, 0x0094,
- 0x3009, 0x0095, 0x300A, 0x0090, 0x300B, 0x0091, 0x300C, 0x0098,
- 0x300D, 0x0099, 0x300E, 0x009C, 0x300F, 0x009D, 0x3010, 0x008C,
- 0x3011, 0x008D, 0x3012, 0x0105, 0x3014, 0x0088, 0x3015, 0x0089,
- 0x301D, 0x00AA, 0x301E, 0x00AB, 0x3021, 0x0161, 0x3022, 0x0162,
- 0x3023, 0x0163, 0x3024, 0x0164, 0x3025, 0x0165, 0x3026, 0x0166,
- 0x3027, 0x0167, 0x3028, 0x0168, 0x3029, 0x0169, 0x3038, 0x016A,
- 0x3039, 0x016B, 0x303A, 0x016C, 0x3041, 0x35C1, 0x3042, 0x35C2,
- 0x3043, 0x35C3, 0x3044, 0x35C4, 0x3045, 0x35C5, 0x3046, 0x35C6,
- 0x3047, 0x35C7, 0x3048, 0x35C8, 0x3049, 0x35C9, 0x304A, 0x35CA,
- 0x304B, 0x35CB, 0x304C, 0x35CC, 0x304D, 0x35CD, 0x304E, 0x35CE,
- 0x304F, 0x35CF, 0x3050, 0x35D0, 0x3051, 0x35D1, 0x3052, 0x35D2,
- 0x3053, 0x35D3, 0x3054, 0x35D4, 0x3055, 0x35D5, 0x3056, 0x35D6,
- 0x3057, 0x35D7, 0x3058, 0x35D8, 0x3059, 0x35D9, 0x305A, 0x35DA,
- 0x305B, 0x35DB, 0x305C, 0x35DC, 0x305D, 0x35DD, 0x305E, 0x35DE,
- 0x305F, 0x35DF, 0x3060, 0x35E0, 0x3061, 0x35E1, 0x3062, 0x35E2,
- 0x3063, 0x35E3, 0x3064, 0x35E4, 0x3065, 0x35E5, 0x3066, 0x35E6,
- 0x3067, 0x35E7, 0x3068, 0x35E8, 0x3069, 0x35E9, 0x306A, 0x35EA,
- 0x306B, 0x35EB, 0x306C, 0x35EC, 0x306D, 0x35ED, 0x306E, 0x35EE,
- 0x306F, 0x35EF, 0x3070, 0x35F0, 0x3071, 0x35F1, 0x3072, 0x35F2,
- 0x3073, 0x35F3, 0x3074, 0x35F4, 0x3075, 0x35F5, 0x3076, 0x35F6,
- 0x3077, 0x35F7, 0x3078, 0x35F8, 0x3079, 0x35F9, 0x307A, 0x35FA,
- 0x307B, 0x35FB, 0x307C, 0x35FC, 0x307D, 0x35FD, 0x307E, 0x35FE,
- 0x307F, 0x35FF, 0x3080, 0x3600, 0x3081, 0x3601, 0x3082, 0x3602,
- 0x3083, 0x3603, 0x3084, 0x3604, 0x3085, 0x3605, 0x3086, 0x3606,
- 0x3087, 0x3607, 0x3088, 0x3608, 0x3089, 0x3609, 0x308A, 0x360A,
- 0x308B, 0x360B, 0x308C, 0x360C, 0x308D, 0x360D, 0x308E, 0x360E,
- 0x308F, 0x360F, 0x3090, 0x3610, 0x3091, 0x3611, 0x3092, 0x3612,
- 0x3093, 0x3613, 0x309D, 0x35B7, 0x309E, 0x35B8, 0x30A1, 0x3614,
- 0x30A2, 0x3615, 0x30A3, 0x3616, 0x30A4, 0x3617, 0x30A5, 0x3618,
- 0x30A6, 0x3619, 0x30A7, 0x361A, 0x30A8, 0x361B, 0x30A9, 0x361C,
- 0x30AA, 0x361D, 0x30AB, 0x361E, 0x30AC, 0x361F, 0x30AD, 0x3620,
- 0x30AE, 0x3621, 0x30AF, 0x3622, 0x30B0, 0x3623, 0x30B1, 0x3624,
- 0x30B2, 0x3625, 0x30B3, 0x3626, 0x30B4, 0x3627, 0x30B5, 0x3628,
- 0x30B6, 0x3629, 0x30B7, 0x362A, 0x30B8, 0x362B, 0x30B9, 0x362C,
- 0x30BA, 0x362D, 0x30BB, 0x362E, 0x30BC, 0x362F, 0x30BD, 0x3630,
- 0x30BE, 0x3631, 0x30BF, 0x3632, 0x30C0, 0x3633, 0x30C1, 0x3634,
- 0x30C2, 0x3635, 0x30C3, 0x3636, 0x30C4, 0x3637, 0x30C5, 0x3638,
- 0x30C6, 0x3639, 0x30C7, 0x363A, 0x30C8, 0x363B, 0x30C9, 0x363C,
- 0x30CA, 0x363D, 0x30CB, 0x363E, 0x30CC, 0x363F, 0x30CD, 0x3640,
- 0x30CE, 0x3641, 0x30CF, 0x3642, 0x30D0, 0x3643, 0x30D1, 0x3644,
- 0x30D2, 0x3645, 0x30D3, 0x3646, 0x30D4, 0x3647, 0x30D5, 0x3648,
- 0x30D6, 0x3649, 0x30D7, 0x364A, 0x30D8, 0x364B, 0x30D9, 0x364C,
- 0x30DA, 0x364D, 0x30DB, 0x364E, 0x30DC, 0x364F, 0x30DD, 0x3650,
- 0x30DE, 0x3651, 0x30DF, 0x3652, 0x30E0, 0x3653, 0x30E1, 0x3654,
- 0x30E2, 0x3655, 0x30E3, 0x3656, 0x30E4, 0x3657, 0x30E5, 0x3658,
- 0x30E6, 0x3659, 0x30E7, 0x365A, 0x30E8, 0x365B, 0x30E9, 0x365C,
- 0x30EA, 0x365D, 0x30EB, 0x365E, 0x30EC, 0x365F, 0x30ED, 0x3660,
- 0x30EE, 0x3661, 0x30EF, 0x3662, 0x30F0, 0x3663, 0x30F1, 0x3664,
- 0x30F2, 0x3665, 0x30F3, 0x3666, 0x30F4, 0x3667, 0x30F5, 0x3668,
- 0x30F6, 0x3669, 0x30FC, 0x35BD, 0x30FD, 0x35B5, 0x30FE, 0x35B6,
- 0x3105, 0x01D1, 0x3106, 0x01D2, 0x3107, 0x01D3, 0x3108, 0x01D4,
- 0x3109, 0x01D5, 0x310A, 0x01D6, 0x310B, 0x01D7, 0x310C, 0x01D8,
- 0x310D, 0x01D9, 0x310E, 0x01DA, 0x310F, 0x01DB, 0x3110, 0x01DC,
- 0x3111, 0x01DD, 0x3112, 0x01DE, 0x3113, 0x01DF, 0x3114, 0x01E0,
- 0x3115, 0x01E1, 0x3116, 0x01E2, 0x3117, 0x01E3, 0x3118, 0x01E4,
- 0x3119, 0x01E5, 0x311A, 0x01E6, 0x311B, 0x01E7, 0x311C, 0x01E8,
- 0x311D, 0x01E9, 0x311E, 0x01EA, 0x311F, 0x01EB, 0x3120, 0x01EC,
- 0x3121, 0x01ED, 0x3122, 0x01EE, 0x3123, 0x01EF, 0x3124, 0x01F0,
- 0x3125, 0x01F1, 0x3126, 0x01F2, 0x3127, 0x01F3, 0x3128, 0x01F4,
- 0x3129, 0x01F5, 0x3231, 0x36E5, 0x32A3, 0x00C1, 0x338E, 0x0115,
- 0x338F, 0x0116, 0x339C, 0x0110, 0x339D, 0x0111, 0x339E, 0x0112,
- 0x33A1, 0x0114, 0x33C4, 0x0117, 0x33CE, 0x0113, 0x33D1, 0x00EC,
- 0x33D2, 0x00EB, 0x33D5, 0x010F, 0x361D, 0x36B7, 0x4491, 0x36B4,
- 0x4E00, 0x0253, 0x4E01, 0x0255, 0x4E03, 0x0256, 0x4E07, 0x1771,
- 0x4E08, 0x0269, 0x4E09, 0x0267, 0x4E0A, 0x026A, 0x4E0B, 0x0268,
- 0x4E0C, 0x1772, 0x4E0D, 0x0294, 0x4E0E, 0x177A, 0x4E0F, 0x1778,
- 0x4E10, 0x0293, 0x4E11, 0x0292, 0x4E14, 0x02F2, 0x4E15, 0x02F1,
- 0x4E16, 0x02F0, 0x4E18, 0x02F3, 0x4E19, 0x02EF, 0x4E1E, 0x036E,
- 0x4E1F, 0x036F, 0x4E26, 0x0528, 0x4E28, 0x0218, 0x4E2B, 0x026B,
- 0x4E2D, 0x0295, 0x4E2E, 0x177B, 0x4E30, 0x0296, 0x4E31, 0x178E,
- 0x4E32, 0x0415, 0x4E33, 0x18F4, 0x4E36, 0x0219, 0x4E38, 0x026C,
- 0x4E39, 0x0297, 0x4E3B, 0x02F4, 0x4E3C, 0x178F, 0x4E3F, 0x021A,
- 0x4E41, 0x36AF, 0x4E42, 0x176C, 0x4E43, 0x0257, 0x4E45, 0x026E,
- 0x4E47, 0x1773, 0x4E48, 0x026F, 0x4E4B, 0x0298, 0x4E4D, 0x02F5,
- 0x4E4E, 0x02F7, 0x4E4F, 0x02F6, 0x4E52, 0x0370, 0x4E53, 0x0371,
- 0x4E56, 0x0529, 0x4E58, 0x0831, 0x4E59, 0x0254, 0x4E5A, 0x36B1,
- 0x4E5C, 0x176D, 0x4E5D, 0x0258, 0x4E5E, 0x0271, 0x4E5F, 0x0270,
- 0x4E69, 0x0372, 0x4E73, 0x052A, 0x4E7E, 0x09FB, 0x4E7F, 0x1E35,
- 0x4E82, 0x0DBE, 0x4E83, 0x2361, 0x4E84, 0x2362, 0x4E85, 0x021B,
- 0x4E86, 0x0259, 0x4E88, 0x029A, 0x4E8B, 0x052B, 0x4E8C, 0x025A,
- 0x4E8D, 0x1774, 0x4E8E, 0x0272, 0x4E91, 0x029B, 0x4E92, 0x029D,
- 0x4E93, 0x177C, 0x4E94, 0x029E, 0x4E95, 0x029C, 0x4E99, 0x0373,
- 0x4E9B, 0x052C, 0x4E9E, 0x052D, 0x4E9F, 0x06A3, 0x4EA0, 0x021C,
- 0x4EA1, 0x0273, 0x4EA2, 0x029F, 0x4EA4, 0x0374, 0x4EA5, 0x0376,
- 0x4EA6, 0x0375, 0x4EA8, 0x0416, 0x4EAB, 0x052E, 0x4EAC, 0x052F,
- 0x4EAD, 0x06A4, 0x4EAE, 0x06A5, 0x4EB3, 0x0832, 0x4EB6, 0x2363,
- 0x4EB9, 0x3377, 0x4EBA, 0x025B, 0x4EC0, 0x02A1, 0x4EC1, 0x02A0,
- 0x4EC2, 0x177D, 0x4EC3, 0x02A2, 0x4EC4, 0x02A8, 0x4EC6, 0x02A3,
- 0x4EC7, 0x02A4, 0x4EC8, 0x177F, 0x4EC9, 0x177E, 0x4ECA, 0x02A6,
- 0x4ECB, 0x02A7, 0x4ECD, 0x02A5, 0x4ED4, 0x02FA, 0x4ED5, 0x02FB,
- 0x4ED6, 0x02FC, 0x4ED7, 0x02FD, 0x4ED8, 0x02F9, 0x4ED9, 0x0300,
- 0x4EDA, 0x1795, 0x4EDC, 0x1791, 0x4EDD, 0x1794, 0x4EDE, 0x0301,
- 0x4EDF, 0x0311, 0x4EE1, 0x1793, 0x4EE3, 0x02FE, 0x4EE4, 0x02FF,
- 0x4EE5, 0x02F8, 0x4EE8, 0x1790, 0x4EE9, 0x1792, 0x4EF0, 0x0383,
- 0x4EF1, 0x17BA, 0x4EF2, 0x0380, 0x4EF3, 0x0384, 0x4EF4, 0x17C4,
- 0x4EF5, 0x17B8, 0x4EF6, 0x0381, 0x4EF7, 0x17BC, 0x4EFB, 0x0382,
- 0x4EFD, 0x0385, 0x4EFF, 0x0377, 0x4F00, 0x17BB, 0x4F01, 0x0386,
- 0x4F02, 0x17BF, 0x4F04, 0x17C3, 0x4F05, 0x17C0, 0x4F08, 0x17BD,
- 0x4F09, 0x0378, 0x4F0A, 0x037A, 0x4F0B, 0x0387, 0x4F0D, 0x037C,
- 0x4F0E, 0x17B5, 0x4F0F, 0x037F, 0x4F10, 0x037D, 0x4F11, 0x037E,
- 0x4F12, 0x17C5, 0x4F13, 0x17C2, 0x4F14, 0x17B9, 0x4F15, 0x037B,
- 0x4F18, 0x17B6, 0x4F19, 0x0379, 0x4F1D, 0x17BE, 0x4F22, 0x17C1,
- 0x4F2C, 0x17B7, 0x4F2D, 0x182F, 0x4F2F, 0x042C, 0x4F30, 0x041F,
- 0x4F33, 0x1830, 0x4F34, 0x041C, 0x4F36, 0x042E, 0x4F38, 0x0424,
- 0x4F3A, 0x0423, 0x4F3B, 0x1824, 0x4F3C, 0x0427, 0x4F3D, 0x0422,
- 0x4F3E, 0x1829, 0x4F3F, 0x1831, 0x4F41, 0x182D, 0x4F43, 0x0425,
- 0x4F46, 0x0428, 0x4F47, 0x0419, 0x4F48, 0x0431, 0x4F49, 0x1826,
- 0x4F4C, 0x1900, 0x4F4D, 0x0417, 0x4F4E, 0x042D, 0x4F4F, 0x0418,
- 0x4F50, 0x0420, 0x4F51, 0x0421, 0x4F52, 0x182B, 0x4F53, 0x1827,
- 0x4F54, 0x0426, 0x4F55, 0x041E, 0x4F56, 0x1823, 0x4F57, 0x041A,
- 0x4F58, 0x182E, 0x4F59, 0x042F, 0x4F5A, 0x0432, 0x4F5B, 0x041D,
- 0x4F5C, 0x042A, 0x4F5D, 0x0430, 0x4F5E, 0x041B, 0x4F5F, 0x182C,
- 0x4F60, 0x042B, 0x4F61, 0x1832, 0x4F62, 0x1825, 0x4F63, 0x0429,
- 0x4F64, 0x1828, 0x4F67, 0x182A, 0x4F69, 0x053D, 0x4F6A, 0x1902,
- 0x4F6B, 0x190E, 0x4F6C, 0x0535, 0x4F6E, 0x190F, 0x4F6F, 0x0530,
- 0x4F70, 0x053A, 0x4F73, 0x0533, 0x4F74, 0x18FC, 0x4F75, 0x053B,
- 0x4F76, 0x18FB, 0x4F77, 0x18FF, 0x4F78, 0x1906, 0x4F79, 0x1904,
- 0x4F7A, 0x0543, 0x4F7B, 0x053E, 0x4F7C, 0x18F6, 0x4F7D, 0x18F8,
- 0x4F7E, 0x0540, 0x4F7F, 0x0534, 0x4F80, 0x18F9, 0x4F81, 0x1905,
- 0x4F82, 0x190C, 0x4F83, 0x0539, 0x4F84, 0x18FE, 0x4F85, 0x18F7,
- 0x4F86, 0x0538, 0x4F87, 0x18FA, 0x4F88, 0x053C, 0x4F89, 0x18FD,
- 0x4F8B, 0x0537, 0x4F8D, 0x0532, 0x4F8F, 0x0541, 0x4F90, 0x1907,
- 0x4F91, 0x0542, 0x4F92, 0x190B, 0x4F94, 0x1909, 0x4F95, 0x190D,
- 0x4F96, 0x053F, 0x4F97, 0x1901, 0x4F98, 0x18F5, 0x4F9A, 0x1903,
- 0x4F9B, 0x0536, 0x4F9C, 0x1908, 0x4F9D, 0x0531, 0x4F9E, 0x190A,
- 0x4FAE, 0x06B4, 0x4FAF, 0x06A8, 0x4FB2, 0x1A5D, 0x4FB3, 0x1A65,
- 0x4FB5, 0x06A7, 0x4FB6, 0x06AF, 0x4FB7, 0x06BB, 0x4FB9, 0x1A6B,
- 0x4FBA, 0x1A69, 0x4FBB, 0x1A64, 0x4FBF, 0x06A9, 0x4FC0, 0x1A6A,
- 0x4FC1, 0x1A60, 0x4FC2, 0x06B7, 0x4FC3, 0x06AE, 0x4FC4, 0x06B6,
- 0x4FC5, 0x1A5B, 0x4FC7, 0x1A67, 0x4FC9, 0x1A5E, 0x4FCA, 0x06B2,
- 0x4FCB, 0x1A5F, 0x4FCD, 0x1A5A, 0x4FCE, 0x06B9, 0x4FCF, 0x06AC,
- 0x4FD0, 0x06B5, 0x4FD1, 0x06AB, 0x4FD3, 0x1A5C, 0x4FD4, 0x1A61,
- 0x4FD6, 0x1A68, 0x4FD7, 0x06B3, 0x4FD8, 0x06B0, 0x4FD9, 0x1A63,
- 0x4FDA, 0x06B8, 0x4FDB, 0x1A66, 0x4FDC, 0x1A62, 0x4FDD, 0x06AD,
- 0x4FDE, 0x06BA, 0x4FDF, 0x06B1, 0x4FE0, 0x06AA, 0x4FE1, 0x06A6,
- 0x4FEC, 0x1A6C, 0x4FEE, 0x084C, 0x4FEF, 0x0836, 0x4FF1, 0x0846,
- 0x4FF3, 0x084B, 0x4FF4, 0x1C24, 0x4FF5, 0x1C23, 0x4FF6, 0x1C28,
- 0x4FF7, 0x1C29, 0x4FF8, 0x0839, 0x4FFA, 0x0842, 0x4FFE, 0x084F,
- 0x5000, 0x0843, 0x5005, 0x1C1D, 0x5006, 0x083C, 0x5007, 0x1C1E,
- 0x5009, 0x0851, 0x500B, 0x0848, 0x500C, 0x0833, 0x500D, 0x0834,
- 0x500E, 0x1C31, 0x500F, 0x0A0C, 0x5011, 0x0841, 0x5012, 0x0840,
- 0x5013, 0x1C1F, 0x5014, 0x0844, 0x5015, 0x1E45, 0x5016, 0x083B,
- 0x5017, 0x1C2A, 0x5018, 0x084A, 0x5019, 0x0849, 0x501A, 0x083F,
- 0x501B, 0x1C22, 0x501C, 0x1C2B, 0x501E, 0x1C1C, 0x501F, 0x083E,
- 0x5020, 0x1C2C, 0x5021, 0x0847, 0x5022, 0x1C20, 0x5023, 0x0835,
- 0x5025, 0x0838, 0x5026, 0x0837, 0x5027, 0x1C2D, 0x5028, 0x0845,
- 0x5029, 0x083A, 0x502A, 0x084E, 0x502B, 0x0850, 0x502C, 0x1C27,
- 0x502D, 0x084D, 0x502F, 0x1C2F, 0x5030, 0x1C21, 0x5031, 0x1C30,
- 0x5033, 0x1C25, 0x5035, 0x1C2E, 0x5037, 0x1C26, 0x503C, 0x083D,
- 0x5040, 0x1E4D, 0x5041, 0x1E41, 0x5043, 0x0A00, 0x5045, 0x1E46,
- 0x5046, 0x1E4C, 0x5047, 0x09FF, 0x5048, 0x1E3F, 0x5049, 0x0A03,
- 0x504A, 0x1E43, 0x504B, 0x1E3C, 0x504C, 0x0A01, 0x504D, 0x1E40,
- 0x504E, 0x0A06, 0x504F, 0x0A0B, 0x5051, 0x1E51, 0x5053, 0x1E3B,
- 0x5055, 0x0A07, 0x5057, 0x1E50, 0x505A, 0x0A02, 0x505B, 0x1E42,
- 0x505C, 0x09FE, 0x505D, 0x1E3D, 0x505E, 0x1E39, 0x505F, 0x1E47,
- 0x5060, 0x1E3A, 0x5061, 0x1E38, 0x5062, 0x1E44, 0x5063, 0x1E4A,
- 0x5064, 0x1E4B, 0x5065, 0x0A04, 0x5068, 0x20B8, 0x5069, 0x1E48,
- 0x506A, 0x1E37, 0x506B, 0x1E49, 0x506D, 0x0A0E, 0x506E, 0x1E4E,
- 0x506F, 0x0A0D, 0x5070, 0x1E36, 0x5072, 0x1E3E, 0x5073, 0x1E4F,
- 0x5074, 0x0A09, 0x5075, 0x0A08, 0x5076, 0x0A05, 0x5077, 0x0A0A,
- 0x507A, 0x09FC, 0x507D, 0x09FD, 0x5080, 0x0BEC, 0x5082, 0x20BB,
- 0x5083, 0x20B4, 0x5085, 0x0BE9, 0x5087, 0x20BC, 0x508B, 0x20B2,
- 0x508C, 0x20B5, 0x508D, 0x0BE8, 0x508E, 0x20B6, 0x5091, 0x0BEB,
- 0x5092, 0x20BA, 0x5094, 0x20B0, 0x5095, 0x20AF, 0x5096, 0x0BED,
- 0x5098, 0x0BEE, 0x5099, 0x0BEA, 0x509A, 0x0BEF, 0x509B, 0x20AE,
- 0x509C, 0x20B9, 0x509D, 0x20B7, 0x509E, 0x20B1, 0x50A2, 0x0BE7,
- 0x50A3, 0x20B3, 0x50AC, 0x0DC5, 0x50AD, 0x0DBF, 0x50AE, 0x2367,
- 0x50AF, 0x0DC8, 0x50B0, 0x236D, 0x50B1, 0x2370, 0x50B2, 0x0DC1,
- 0x50B3, 0x0DC2, 0x50B4, 0x236A, 0x50B5, 0x0DC0, 0x50B6, 0x2373,
- 0x50B7, 0x0DC6, 0x50B8, 0x2374, 0x50BA, 0x236F, 0x50BB, 0x0DC7,
- 0x50BD, 0x2364, 0x50BE, 0x0DC4, 0x50BF, 0x2365, 0x50C1, 0x236E,
- 0x50C2, 0x236C, 0x50C4, 0x2368, 0x50C5, 0x0DC3, 0x50C6, 0x2366,
- 0x50C7, 0x0DC9, 0x50C8, 0x236B, 0x50C9, 0x2372, 0x50CA, 0x2369,
- 0x50CB, 0x2371, 0x50CE, 0x0F88, 0x50CF, 0x0F85, 0x50D1, 0x0F86,
- 0x50D3, 0x261C, 0x50D4, 0x2614, 0x50D5, 0x0F84, 0x50D6, 0x0F81,
- 0x50D7, 0x2615, 0x50DA, 0x0F83, 0x50DB, 0x2618, 0x50DD, 0x261A,
- 0x50E0, 0x2621, 0x50E3, 0x2620, 0x50E4, 0x261B, 0x50E5, 0x0F80,
- 0x50E6, 0x2613, 0x50E7, 0x0F7E, 0x50E8, 0x2616, 0x50E9, 0x0F89,
- 0x50EA, 0x2619, 0x50EC, 0x261D, 0x50ED, 0x0F82, 0x50EE, 0x0F7F,
- 0x50EF, 0x261F, 0x50F0, 0x261E, 0x50F1, 0x0F87, 0x50F3, 0x2617,
- 0x50F5, 0x1105, 0x50F6, 0x2883, 0x50F8, 0x2880, 0x50F9, 0x1106,
- 0x50FB, 0x1104, 0x50FD, 0x2887, 0x50FE, 0x2884, 0x50FF, 0x287D,
- 0x5100, 0x1103, 0x5102, 0x1107, 0x5103, 0x287E, 0x5104, 0x1102,
- 0x5105, 0x110A, 0x5106, 0x2881, 0x5107, 0x2882, 0x5108, 0x1108,
- 0x5109, 0x1109, 0x510A, 0x2888, 0x510B, 0x2885, 0x510C, 0x2886,
- 0x5110, 0x128D, 0x5111, 0x2B04, 0x5112, 0x128A, 0x5113, 0x2B01,
- 0x5114, 0x128C, 0x5115, 0x128E, 0x5117, 0x2B02, 0x5118, 0x128B,
- 0x511A, 0x2B03, 0x511C, 0x2B00, 0x511F, 0x13B5, 0x5120, 0x2D3E,
- 0x5121, 0x13B6, 0x5122, 0x2D3C, 0x5124, 0x2D3D, 0x5125, 0x2D3B,
- 0x5126, 0x2D3A, 0x5129, 0x2D3F, 0x512A, 0x13B4, 0x512D, 0x2F0F,
- 0x512E, 0x2F10, 0x5130, 0x287F, 0x5131, 0x2F0E, 0x5132, 0x13B7,
- 0x5133, 0x1575, 0x5134, 0x307A, 0x5135, 0x307B, 0x5137, 0x1668,
- 0x5138, 0x1669, 0x5139, 0x32C6, 0x513A, 0x32C5, 0x513B, 0x16BC,
- 0x513C, 0x16BB, 0x513D, 0x340E, 0x513F, 0x025C, 0x5140, 0x0274,
- 0x5141, 0x02AA, 0x5143, 0x02A9, 0x5144, 0x0303, 0x5145, 0x0302,
- 0x5146, 0x038A, 0x5147, 0x0389, 0x5148, 0x038B, 0x5149, 0x0388,
- 0x514B, 0x0434, 0x514C, 0x0433, 0x514D, 0x0435, 0x5152, 0x0545,
- 0x5154, 0x0544, 0x5155, 0x0546, 0x5157, 0x06BC, 0x5159, 0x0119,
- 0x515A, 0x1C32, 0x515B, 0x011A, 0x515C, 0x0A0F, 0x515D, 0x011C,
- 0x515E, 0x011B, 0x515F, 0x20BD, 0x5161, 0x011D, 0x5162, 0x0F8A,
- 0x5163, 0x011E, 0x5165, 0x025D, 0x5167, 0x02AB, 0x5168, 0x038C,
- 0x5169, 0x0547, 0x516B, 0x025E, 0x516C, 0x02AE, 0x516D, 0x02AC,
- 0x516E, 0x02AD, 0x5171, 0x038D, 0x5175, 0x0436, 0x5176, 0x0549,
- 0x5177, 0x0548, 0x5178, 0x054A, 0x517C, 0x0852, 0x5180, 0x128F,
- 0x5182, 0x021D, 0x5187, 0x1779, 0x5188, 0x36B6, 0x5189, 0x0304,
- 0x518A, 0x0305, 0x518D, 0x038E, 0x518F, 0x1833, 0x5191, 0x06BE,
- 0x5192, 0x06BD, 0x5193, 0x1C34, 0x5194, 0x1C33, 0x5195, 0x0A10,
- 0x5196, 0x021E, 0x5197, 0x02AF, 0x5198, 0x1780, 0x519E, 0x1910,
- 0x51A0, 0x06BF, 0x51A2, 0x0855, 0x51A4, 0x0853, 0x51A5, 0x0854,
- 0x51AA, 0x1290, 0x51AB, 0x021F, 0x51AC, 0x0306, 0x51B0, 0x038F,
- 0x51B1, 0x17C6, 0x51B6, 0x0437, 0x51B7, 0x0438, 0x51B9, 0x1834,
- 0x51BC, 0x1911, 0x51BD, 0x054B, 0x51BE, 0x1912, 0x51C4, 0x1C36,
- 0x51C5, 0x1C37, 0x51C6, 0x0858, 0x51C8, 0x1C38, 0x51CA, 0x1C35,
- 0x51CB, 0x0859, 0x51CC, 0x0857, 0x51CD, 0x0856, 0x51CE, 0x1C39,
- 0x51D0, 0x1E52, 0x51D4, 0x20BE, 0x51D7, 0x2375, 0x51D8, 0x2622,
- 0x51DC, 0x110B, 0x51DD, 0x1291, 0x51DE, 0x2B05, 0x51E0, 0x025F,
- 0x51E1, 0x026D, 0x51F0, 0x0A11, 0x51F1, 0x0BF1, 0x51F3, 0x0F8B,
- 0x51F5, 0x176E, 0x51F6, 0x02B0, 0x51F8, 0x0309, 0x51F9, 0x0307,
- 0x51FA, 0x0308, 0x51FD, 0x054C, 0x5200, 0x0260, 0x5201, 0x0261,
- 0x5202, 0x36B3, 0x5203, 0x0275, 0x5206, 0x02B1, 0x5207, 0x02B2,
- 0x5208, 0x02B3, 0x5209, 0x1797, 0x520A, 0x030A, 0x520C, 0x1796,
- 0x520E, 0x0393, 0x5210, 0x17C8, 0x5211, 0x0391, 0x5212, 0x0392,
- 0x5213, 0x17C7, 0x5216, 0x0394, 0x5217, 0x0390, 0x521C, 0x1835,
- 0x521D, 0x068B, 0x521E, 0x1836, 0x5221, 0x1837, 0x5224, 0x043A,
- 0x5225, 0x0439, 0x5228, 0x043D, 0x5229, 0x043B, 0x522A, 0x043C,
- 0x522E, 0x0552, 0x5230, 0x0551, 0x5231, 0x1917, 0x5232, 0x1914,
- 0x5233, 0x1915, 0x5235, 0x1913, 0x5236, 0x0553, 0x5237, 0x054F,
- 0x5238, 0x054E, 0x523A, 0x0550, 0x523B, 0x054D, 0x5241, 0x0554,
- 0x5243, 0x06C1, 0x5244, 0x1A6D, 0x5246, 0x1916, 0x5247, 0x06C6,
- 0x5249, 0x1A6E, 0x524A, 0x06C2, 0x524B, 0x06C5, 0x524C, 0x06C4,
- 0x524D, 0x06C3, 0x524E, 0x06C0, 0x5252, 0x1C3C, 0x5254, 0x085C,
- 0x5255, 0x1C3F, 0x5256, 0x085A, 0x525A, 0x1C3B, 0x525B, 0x085D,
- 0x525C, 0x085B, 0x525D, 0x085E, 0x525E, 0x1C3D, 0x525F, 0x1C3E,
- 0x5261, 0x1C3A, 0x5262, 0x1C40, 0x5269, 0x0BF5, 0x526A, 0x0A12,
- 0x526B, 0x1E53, 0x526C, 0x1E55, 0x526D, 0x1E54, 0x526E, 0x1E56,
- 0x526F, 0x0A13, 0x5272, 0x0BF2, 0x5274, 0x0BF3, 0x5275, 0x0BF4,
- 0x5277, 0x0DCB, 0x5278, 0x2377, 0x527A, 0x2376, 0x527B, 0x2378,
- 0x527C, 0x2379, 0x527D, 0x0DCC, 0x527F, 0x0DCA, 0x5280, 0x2623,
- 0x5281, 0x2624, 0x5282, 0x0F8D, 0x5283, 0x0F8C, 0x5284, 0x2776,
- 0x5287, 0x110C, 0x5288, 0x110D, 0x5289, 0x110E, 0x528A, 0x1110,
- 0x528B, 0x2889, 0x528C, 0x288A, 0x528D, 0x110F, 0x5291, 0x1292,
- 0x5293, 0x1293, 0x5296, 0x307C, 0x5297, 0x32C8, 0x5298, 0x32C7,
- 0x5299, 0x340F, 0x529B, 0x0262, 0x529F, 0x030C, 0x52A0, 0x030B,
- 0x52A3, 0x0395, 0x52A6, 0x17C9, 0x52A9, 0x043F, 0x52AA, 0x0440,
- 0x52AB, 0x043E, 0x52AC, 0x0441, 0x52AD, 0x1838, 0x52AE, 0x1839,
- 0x52BB, 0x0556, 0x52BC, 0x1918, 0x52BE, 0x0555, 0x52C0, 0x1A6F,
- 0x52C1, 0x06CA, 0x52C2, 0x1A70, 0x52C3, 0x06C9, 0x52C7, 0x06C7,
- 0x52C9, 0x06C8, 0x52CD, 0x1C41, 0x52D2, 0x0A14, 0x52D3, 0x1E58,
- 0x52D5, 0x0A17, 0x52D6, 0x1E57, 0x52D7, 0x0ACF, 0x52D8, 0x0A16,
- 0x52D9, 0x0A15, 0x52DB, 0x0BF8, 0x52DD, 0x0BF7, 0x52DE, 0x0BF6,
- 0x52DF, 0x0DCD, 0x52E2, 0x0DD0, 0x52E3, 0x0DD1, 0x52E4, 0x0DCF,
- 0x52E6, 0x0DCE, 0x52E9, 0x2625, 0x52EB, 0x2626, 0x52EF, 0x288C,
- 0x52F0, 0x1111, 0x52F1, 0x288B, 0x52F3, 0x1294, 0x52F4, 0x2D40,
- 0x52F5, 0x13B8, 0x52F7, 0x307D, 0x52F8, 0x1609, 0x52F9, 0x0220,
- 0x52FA, 0x0276, 0x52FB, 0x02B4, 0x52FC, 0x1781, 0x52FE, 0x02B5,
- 0x52FF, 0x02B6, 0x5305, 0x030D, 0x5306, 0x030E, 0x5308, 0x0396,
- 0x5309, 0x183A, 0x530A, 0x1919, 0x530B, 0x191A, 0x530D, 0x06CB,
- 0x530E, 0x1C42, 0x530F, 0x0A19, 0x5310, 0x0A18, 0x5311, 0x20C0,
- 0x5312, 0x20BF, 0x5315, 0x0263, 0x5316, 0x02B7, 0x5317, 0x030F,
- 0x5319, 0x0A1A, 0x531A, 0x176F, 0x531C, 0x1798, 0x531D, 0x0310,
- 0x531F, 0x17CB, 0x5320, 0x0398, 0x5321, 0x0397, 0x5322, 0x17CA,
- 0x5323, 0x0442, 0x532A, 0x085F, 0x532D, 0x1E59, 0x532F, 0x0DD2,
- 0x5330, 0x2627, 0x5331, 0x0F8E, 0x5334, 0x2B06, 0x5337, 0x31C7,
- 0x5338, 0x0221, 0x5339, 0x02B8, 0x533C, 0x191B, 0x533D, 0x1A71,
- 0x533E, 0x0A1D, 0x533F, 0x0A1B, 0x5340, 0x0A1C, 0x5341, 0x0264,
- 0x5343, 0x0277, 0x5344, 0x016B, 0x5345, 0x02BB, 0x5347, 0x02BA,
- 0x5348, 0x02B9, 0x5349, 0x0313, 0x534A, 0x0312, 0x534C, 0x1799,
- 0x534D, 0x17CC, 0x5351, 0x055A, 0x5352, 0x0557, 0x5353, 0x0559,
- 0x5354, 0x0558, 0x5357, 0x06CC, 0x535A, 0x0BF9, 0x535C, 0x0265,
- 0x535E, 0x02BC, 0x5360, 0x0315, 0x5361, 0x0314, 0x5363, 0x183B,
- 0x5366, 0x055B, 0x5369, 0x0222, 0x536C, 0x1782, 0x536E, 0x0317,
- 0x536F, 0x0316, 0x5370, 0x0399, 0x5371, 0x039A, 0x5372, 0x183C,
- 0x5373, 0x0443, 0x5375, 0x0444, 0x5377, 0x055C, 0x5378, 0x055D,
- 0x5379, 0x055E, 0x537B, 0x06CD, 0x537C, 0x1A72, 0x537F, 0x0860,
- 0x5382, 0x1770, 0x5384, 0x02BD, 0x538A, 0x17CD, 0x538E, 0x183D,
- 0x538F, 0x183E, 0x5392, 0x191C, 0x5394, 0x191D, 0x5396, 0x1A74,
- 0x5397, 0x1A73, 0x5398, 0x1A76, 0x5399, 0x1A75, 0x539A, 0x06CE,
- 0x539C, 0x1E5A, 0x539D, 0x0862, 0x539E, 0x1C43, 0x539F, 0x0861,
- 0x53A4, 0x20C1, 0x53A5, 0x0BFA, 0x53A7, 0x20C2, 0x53AC, 0x2628,
- 0x53AD, 0x0F8F, 0x53B2, 0x1112, 0x53B4, 0x307E, 0x53B6, 0x0223,
- 0x53B9, 0x1783, 0x53BB, 0x0318, 0x53C3, 0x0A1E, 0x53C8, 0x0266,
- 0x53C9, 0x0278, 0x53CA, 0x02BF, 0x53CB, 0x02BE, 0x53CD, 0x02C0,
- 0x53D4, 0x0560, 0x53D6, 0x055F, 0x53D7, 0x0561, 0x53DB, 0x06CF,
- 0x53DF, 0x0863, 0x53E1, 0x2B07, 0x53E2, 0x14C9, 0x53E3, 0x0279,
- 0x53E4, 0x031A, 0x53E5, 0x0329, 0x53E6, 0x0324, 0x53E8, 0x031F,
- 0x53E9, 0x031E, 0x53EA, 0x0325, 0x53EB, 0x0323, 0x53EC, 0x031C,
- 0x53ED, 0x032A, 0x53EE, 0x031D, 0x53EF, 0x0319, 0x53F0, 0x0328,
- 0x53F1, 0x0327, 0x53F2, 0x0326, 0x53F3, 0x031B, 0x53F5, 0x0322,
- 0x53F8, 0x0321, 0x53FB, 0x032B, 0x53FC, 0x0320, 0x5401, 0x03A0,
- 0x5403, 0x03A6, 0x5404, 0x03A2, 0x5406, 0x03A8, 0x5407, 0x17CE,
- 0x5408, 0x03A5, 0x5409, 0x039B, 0x540A, 0x039E, 0x540B, 0x03A1,
- 0x540C, 0x039D, 0x540D, 0x03A4, 0x540E, 0x03A7, 0x540F, 0x039C,
- 0x5410, 0x039F, 0x5411, 0x03A3, 0x5412, 0x03A9, 0x5418, 0x1847,
- 0x5419, 0x1844, 0x541B, 0x0451, 0x541C, 0x1845, 0x541D, 0x0445,
- 0x541E, 0x0447, 0x541F, 0x045F, 0x5420, 0x045A, 0x5424, 0x184C,
- 0x5425, 0x1846, 0x5426, 0x0449, 0x5427, 0x044B, 0x5428, 0x184B,
- 0x5429, 0x0452, 0x542A, 0x1841, 0x542B, 0x045E, 0x542C, 0x0460,
- 0x542D, 0x0446, 0x542E, 0x0457, 0x5430, 0x183F, 0x5431, 0x045D,
- 0x5433, 0x044E, 0x5435, 0x0458, 0x5436, 0x0459, 0x5437, 0x1840,
- 0x5438, 0x0456, 0x5439, 0x0454, 0x543B, 0x0455, 0x543C, 0x045B,
- 0x543D, 0x1848, 0x543E, 0x0448, 0x5440, 0x045C, 0x5441, 0x184A,
- 0x5442, 0x0450, 0x5443, 0x044D, 0x5445, 0x1843, 0x5446, 0x044C,
- 0x5447, 0x184D, 0x5448, 0x044F, 0x544A, 0x0453, 0x544E, 0x044A,
- 0x544F, 0x1849, 0x5454, 0x1842, 0x5460, 0x192E, 0x5461, 0x192D,
- 0x5462, 0x0573, 0x5463, 0x1930, 0x5464, 0x1932, 0x5465, 0x1927,
- 0x5466, 0x192A, 0x5467, 0x1931, 0x5468, 0x0574, 0x546B, 0x1924,
- 0x546C, 0x1928, 0x546F, 0x192C, 0x5470, 0x1A85, 0x5471, 0x056F,
- 0x5472, 0x1A89, 0x5473, 0x0562, 0x5474, 0x1929, 0x5475, 0x0563,
- 0x5476, 0x0570, 0x5477, 0x0569, 0x5478, 0x0565, 0x547A, 0x1925,
- 0x547B, 0x0568, 0x547C, 0x056D, 0x547D, 0x0576, 0x547E, 0x1926,
- 0x547F, 0x191F, 0x5480, 0x0567, 0x5481, 0x1920, 0x5482, 0x1922,
- 0x5484, 0x056A, 0x5486, 0x056C, 0x5487, 0x191E, 0x5488, 0x1923,
- 0x548B, 0x0575, 0x548C, 0x0571, 0x548D, 0x192B, 0x548E, 0x0577,
- 0x5490, 0x056E, 0x5491, 0x1921, 0x5492, 0x056B, 0x5495, 0x0566,
- 0x5496, 0x0564, 0x5498, 0x192F, 0x549A, 0x0572, 0x54A0, 0x1A84,
- 0x54A1, 0x1A78, 0x54A2, 0x1A87, 0x54A5, 0x1A7A, 0x54A6, 0x06D6,
- 0x54A7, 0x06E4, 0x54A8, 0x06D2, 0x54A9, 0x06E3, 0x54AA, 0x06DB,
- 0x54AB, 0x06E0, 0x54AC, 0x06D0, 0x54AD, 0x1A79, 0x54AE, 0x1A7F,
- 0x54AF, 0x06DF, 0x54B0, 0x1A8B, 0x54B1, 0x06E1, 0x54B3, 0x06D7,
- 0x54B6, 0x1A81, 0x54B7, 0x1A7E, 0x54B8, 0x06D5, 0x54BA, 0x1A77,
- 0x54BB, 0x06E2, 0x54BC, 0x1A86, 0x54BD, 0x06DA, 0x54BE, 0x1A88,
- 0x54BF, 0x06E5, 0x54C0, 0x06D1, 0x54C1, 0x06DC, 0x54C2, 0x06D9,
- 0x54C3, 0x1A7C, 0x54C4, 0x06DD, 0x54C5, 0x1A82, 0x54C6, 0x1A83,
- 0x54C7, 0x06D8, 0x54C8, 0x06DE, 0x54C9, 0x06D4, 0x54CE, 0x06D3,
- 0x54CF, 0x1A7B, 0x54D6, 0x1A80, 0x54DE, 0x1A8A, 0x54E0, 0x1C57,
- 0x54E1, 0x0870, 0x54E2, 0x1C45, 0x54E4, 0x1C4A, 0x54E5, 0x0869,
- 0x54E6, 0x0874, 0x54E7, 0x1C48, 0x54E8, 0x0864, 0x54E9, 0x086E,
- 0x54EA, 0x0873, 0x54EB, 0x1C4F, 0x54ED, 0x086F, 0x54EE, 0x0872,
- 0x54F1, 0x1C52, 0x54F2, 0x086A, 0x54F3, 0x1C49, 0x54F7, 0x1C55,
- 0x54F8, 0x1C56, 0x54FA, 0x086C, 0x54FB, 0x1C54, 0x54FC, 0x0868,
- 0x54FD, 0x0877, 0x54FF, 0x1C4C, 0x5501, 0x0866, 0x5503, 0x1C59,
- 0x5504, 0x1C4D, 0x5505, 0x1C51, 0x5506, 0x086B, 0x5507, 0x0876,
- 0x5508, 0x1C4E, 0x5509, 0x0871, 0x550A, 0x1C53, 0x550B, 0x1C5A,
- 0x550C, 0x1E69, 0x550E, 0x1C58, 0x550F, 0x0878, 0x5510, 0x0865,
- 0x5511, 0x1C50, 0x5512, 0x1C47, 0x5514, 0x086D, 0x5517, 0x1C46,
- 0x551A, 0x1C4B, 0x5526, 0x1C44, 0x5527, 0x0875, 0x552A, 0x1E61,
- 0x552C, 0x0A31, 0x552D, 0x1E6F, 0x552E, 0x0A2F, 0x552F, 0x0A2C,
- 0x5530, 0x1E66, 0x5531, 0x0A28, 0x5532, 0x1E6A, 0x5533, 0x0A33,
- 0x5534, 0x1E60, 0x5535, 0x1E65, 0x5536, 0x1E64, 0x5537, 0x0867,
- 0x5538, 0x0A2E, 0x5539, 0x1E6D, 0x553B, 0x1E70, 0x553C, 0x1E5D,
- 0x553E, 0x0C0C, 0x5540, 0x1E71, 0x5541, 0x0A34, 0x5543, 0x0A26,
- 0x5544, 0x0A23, 0x5545, 0x1E68, 0x5546, 0x0A20, 0x5548, 0x1E6E,
- 0x554A, 0x0A27, 0x554B, 0x1E72, 0x554D, 0x1E5E, 0x554E, 0x1E6C,
- 0x554F, 0x0A2A, 0x5550, 0x1E5F, 0x5551, 0x1E62, 0x5552, 0x1E67,
- 0x5555, 0x0A2B, 0x5556, 0x0A29, 0x5557, 0x0A35, 0x555C, 0x0A30,
- 0x555E, 0x0A24, 0x555F, 0x0ABC, 0x5561, 0x0A25, 0x5562, 0x1E63,
- 0x5563, 0x0A32, 0x5564, 0x0A2D, 0x5565, 0x1E6B, 0x5566, 0x0A22,
- 0x556A, 0x0A21, 0x5575, 0x1E5B, 0x5576, 0x1E5C, 0x5577, 0x20C7,
- 0x557B, 0x0BFB, 0x557C, 0x0BFE, 0x557D, 0x20D2, 0x557E, 0x0C12,
- 0x557F, 0x20D5, 0x5580, 0x0BFC, 0x5581, 0x20CE, 0x5582, 0x0C02,
- 0x5583, 0x0C08, 0x5584, 0x0D1B, 0x5587, 0x0C06, 0x5588, 0x20CB,
- 0x5589, 0x0C13, 0x558A, 0x0BFF, 0x558B, 0x0C07, 0x558C, 0x20D3,
- 0x558D, 0x2387, 0x558E, 0x20D8, 0x558F, 0x20CC, 0x5591, 0x20C3,
- 0x5592, 0x20D0, 0x5593, 0x20CA, 0x5594, 0x0C05, 0x5595, 0x20D6,
- 0x5598, 0x0C01, 0x5599, 0x0C15, 0x559A, 0x0C0E, 0x559C, 0x0C03,
- 0x559D, 0x0C00, 0x559F, 0x0C0B, 0x55A1, 0x20D7, 0x55A2, 0x20C9,
- 0x55A3, 0x20CF, 0x55A4, 0x20D1, 0x55A5, 0x20C5, 0x55A6, 0x20D4,
- 0x55A7, 0x0BFD, 0x55A8, 0x20C4, 0x55AA, 0x0C04, 0x55AB, 0x0C14,
- 0x55AC, 0x0C10, 0x55AD, 0x20C6, 0x55AE, 0x0C0A, 0x55B1, 0x0C11,
- 0x55B2, 0x0C0D, 0x55B3, 0x0C09, 0x55B5, 0x20CD, 0x55BB, 0x0C0F,
- 0x55BF, 0x2385, 0x55C0, 0x2381, 0x55C2, 0x2390, 0x55C3, 0x237A,
- 0x55C4, 0x2383, 0x55C5, 0x0DE0, 0x55C6, 0x0DE1, 0x55C7, 0x0DD9,
- 0x55C8, 0x238C, 0x55C9, 0x0DE3, 0x55CA, 0x237F, 0x55CB, 0x237E,
- 0x55CC, 0x237C, 0x55CD, 0x238E, 0x55CE, 0x0DD7, 0x55CF, 0x2388,
- 0x55D0, 0x237D, 0x55D1, 0x0DDA, 0x55D2, 0x2386, 0x55D3, 0x0DD5,
- 0x55D4, 0x2382, 0x55D5, 0x2389, 0x55D6, 0x238B, 0x55D9, 0x238F,
- 0x55DA, 0x0DDE, 0x55DB, 0x237B, 0x55DC, 0x0DD8, 0x55DD, 0x2380,
- 0x55DF, 0x0DD3, 0x55E1, 0x0DDF, 0x55E2, 0x238A, 0x55E3, 0x0DDB,
- 0x55E4, 0x0DDC, 0x55E5, 0x0DE2, 0x55E6, 0x0DD6, 0x55E7, 0x011F,
- 0x55E8, 0x0DD4, 0x55E9, 0x2384, 0x55EF, 0x0DDD, 0x55F2, 0x238D,
- 0x55F6, 0x0F9F, 0x55F7, 0x0F9A, 0x55F9, 0x2637, 0x55FA, 0x2633,
- 0x55FC, 0x262D, 0x55FD, 0x0F94, 0x55FE, 0x0F90, 0x55FF, 0x2636,
- 0x5600, 0x0F91, 0x5601, 0x2630, 0x5602, 0x2632, 0x5604, 0x2635,
- 0x5606, 0x0F96, 0x5608, 0x0F9D, 0x5609, 0x0F97, 0x560C, 0x262B,
- 0x560D, 0x0F98, 0x560E, 0x0F99, 0x560F, 0x262E, 0x5610, 0x0F9E,
- 0x5612, 0x262C, 0x5613, 0x2631, 0x5614, 0x0F95, 0x5615, 0x262A,
- 0x5616, 0x0F9B, 0x5617, 0x0F93, 0x561B, 0x0F92, 0x561C, 0x262F,
- 0x561D, 0x2634, 0x561F, 0x0F9C, 0x5627, 0x2629, 0x5629, 0x1119,
- 0x562A, 0x289D, 0x562C, 0x289A, 0x562E, 0x1113, 0x562F, 0x111F,
- 0x5630, 0x1120, 0x5632, 0x1116, 0x5633, 0x2898, 0x5634, 0x1118,
- 0x5635, 0x2890, 0x5636, 0x111E, 0x5638, 0x289C, 0x5639, 0x1115,
- 0x563A, 0x289E, 0x563B, 0x1114, 0x563D, 0x2899, 0x563E, 0x289B,
- 0x563F, 0x1117, 0x5640, 0x2897, 0x5641, 0x2891, 0x5642, 0x288E,
- 0x5645, 0x20C8, 0x5646, 0x2894, 0x5648, 0x288D, 0x5649, 0x2893,
- 0x564A, 0x2892, 0x564C, 0x288F, 0x564E, 0x111B, 0x5653, 0x111A,
- 0x5657, 0x111C, 0x5658, 0x2895, 0x5659, 0x1295, 0x565A, 0x2896,
- 0x565E, 0x2B10, 0x5660, 0x2B09, 0x5662, 0x12A1, 0x5663, 0x2B0D,
- 0x5664, 0x1299, 0x5665, 0x129D, 0x5666, 0x2B0C, 0x5668, 0x129C,
- 0x5669, 0x1298, 0x566A, 0x129B, 0x566B, 0x1296, 0x566C, 0x12A0,
- 0x566D, 0x2B0E, 0x566E, 0x2B0A, 0x566F, 0x129F, 0x5670, 0x2B08,
- 0x5671, 0x129E, 0x5672, 0x2B0F, 0x5673, 0x2B0B, 0x5674, 0x111D,
- 0x5676, 0x12A2, 0x5677, 0x2B11, 0x5678, 0x129A, 0x5679, 0x1297,
- 0x567E, 0x2D47, 0x567F, 0x2D49, 0x5680, 0x13BA, 0x5681, 0x2D4A,
- 0x5682, 0x2D48, 0x5683, 0x2D46, 0x5684, 0x2D45, 0x5685, 0x13BC,
- 0x5686, 0x2D44, 0x5687, 0x13BD, 0x568C, 0x2D42, 0x568D, 0x2D43,
- 0x568E, 0x13B9, 0x568F, 0x13BE, 0x5690, 0x13BB, 0x5693, 0x2D41,
- 0x5695, 0x14CA, 0x5697, 0x2F13, 0x5698, 0x2F11, 0x5699, 0x2F16,
- 0x569A, 0x2F14, 0x569C, 0x2F12, 0x569D, 0x2F15, 0x56A5, 0x1576,
- 0x56A6, 0x3081, 0x56A7, 0x3082, 0x56A8, 0x1577, 0x56AA, 0x3083,
- 0x56AB, 0x307F, 0x56AC, 0x3084, 0x56AD, 0x3080, 0x56AE, 0x14CB,
- 0x56B2, 0x31C8, 0x56B3, 0x31CA, 0x56B4, 0x160C, 0x56B5, 0x31C9,
- 0x56B6, 0x160B, 0x56B7, 0x160A, 0x56BC, 0x160D, 0x56BD, 0x32CA,
- 0x56BE, 0x32CB, 0x56C0, 0x166B, 0x56C1, 0x166A, 0x56C2, 0x166C,
- 0x56C3, 0x32C9, 0x56C5, 0x3379, 0x56C6, 0x3378, 0x56C8, 0x16BD,
- 0x56C9, 0x16BF, 0x56CA, 0x16BE, 0x56CB, 0x337A, 0x56CC, 0x16F6,
- 0x56CD, 0x3481, 0x56D1, 0x171F, 0x56D3, 0x3480, 0x56D4, 0x34C9,
- 0x56D7, 0x1775, 0x56DA, 0x032D, 0x56DB, 0x032C, 0x56DD, 0x03AC,
- 0x56DE, 0x03AB, 0x56DF, 0x17D0, 0x56E0, 0x03AA, 0x56E1, 0x17CF,
- 0x56E4, 0x0463, 0x56E5, 0x1850, 0x56E7, 0x184F, 0x56EA, 0x0461,
- 0x56EB, 0x0464, 0x56EE, 0x184E, 0x56F0, 0x0462, 0x56F7, 0x1933,
- 0x56F9, 0x1934, 0x56FA, 0x0578, 0x56FF, 0x06E6, 0x5701, 0x1C5B,
- 0x5702, 0x1C5C, 0x5703, 0x0879, 0x5704, 0x087A, 0x5707, 0x1E74,
- 0x5708, 0x0A36, 0x5709, 0x0A38, 0x570A, 0x1E73, 0x570B, 0x0A37,
- 0x570C, 0x20D9, 0x570D, 0x0C16, 0x5712, 0x0DE4, 0x5713, 0x0DE5,
- 0x5714, 0x2391, 0x5716, 0x0FA1, 0x5718, 0x0FA0, 0x571A, 0x289F,
- 0x571B, 0x2B13, 0x571C, 0x2B12, 0x571E, 0x3505, 0x571F, 0x027A,
- 0x5720, 0x1784, 0x5722, 0x179A, 0x5723, 0x179B, 0x5728, 0x03AF,
- 0x5729, 0x03B3, 0x572A, 0x17D2, 0x572C, 0x03B1, 0x572D, 0x03B0,
- 0x572E, 0x17D1, 0x572F, 0x03B2, 0x5730, 0x03AE, 0x5733, 0x03AD,
- 0x5734, 0x17D3, 0x573B, 0x046E, 0x573E, 0x046B, 0x5740, 0x0467,
- 0x5741, 0x1851, 0x5745, 0x1852, 0x5747, 0x0469, 0x5749, 0x1854,
- 0x574A, 0x0465, 0x574B, 0x1855, 0x574C, 0x1853, 0x574D, 0x0468,
- 0x574E, 0x046A, 0x574F, 0x046D, 0x5750, 0x046C, 0x5751, 0x0466,
- 0x5752, 0x1856, 0x5761, 0x057D, 0x5762, 0x1941, 0x5764, 0x057F,
- 0x5766, 0x057E, 0x5768, 0x1942, 0x5769, 0x057C, 0x576A, 0x057B,
- 0x576B, 0x1938, 0x576D, 0x1937, 0x576F, 0x1935, 0x5770, 0x193A,
- 0x5771, 0x1939, 0x5772, 0x1936, 0x5773, 0x193F, 0x5774, 0x1940,
- 0x5775, 0x193D, 0x5776, 0x193B, 0x5777, 0x057A, 0x577B, 0x193E,
- 0x577C, 0x0580, 0x577D, 0x1943, 0x5780, 0x193C, 0x5782, 0x06E7,
- 0x5783, 0x0579, 0x578B, 0x06E8, 0x578C, 0x1A90, 0x578F, 0x1A96,
- 0x5793, 0x06EE, 0x5794, 0x1A94, 0x5795, 0x1A9A, 0x5797, 0x1A91,
- 0x5798, 0x1A95, 0x5799, 0x1A97, 0x579A, 0x1A99, 0x579B, 0x1A93,
- 0x579D, 0x1A92, 0x579E, 0x1A8D, 0x579F, 0x1A8E, 0x57A0, 0x06E9,
- 0x57A2, 0x06EB, 0x57A3, 0x06EA, 0x57A4, 0x1A8F, 0x57A5, 0x1A98,
- 0x57AE, 0x06ED, 0x57B5, 0x1A8C, 0x57B6, 0x1C66, 0x57B8, 0x1C65,
- 0x57B9, 0x1C6A, 0x57BA, 0x1C61, 0x57BC, 0x1C64, 0x57BD, 0x1C63,
- 0x57BF, 0x1C67, 0x57C1, 0x1C6B, 0x57C2, 0x087B, 0x57C3, 0x087E,
- 0x57C6, 0x1C62, 0x57C7, 0x1C68, 0x57CB, 0x087D, 0x57CC, 0x1C5D,
- 0x57CE, 0x06EC, 0x57CF, 0x1E82, 0x57D0, 0x1C69, 0x57D2, 0x1C60,
- 0x57D4, 0x087C, 0x57D5, 0x1C5F, 0x57DC, 0x1E79, 0x57DF, 0x0A39,
- 0x57E0, 0x0A3D, 0x57E1, 0x1E89, 0x57E2, 0x1E77, 0x57E3, 0x1E85,
- 0x57E4, 0x0A3E, 0x57E5, 0x1E87, 0x57E7, 0x1E8D, 0x57E9, 0x1E91,
- 0x57EC, 0x1E88, 0x57ED, 0x1E7C, 0x57EE, 0x1E84, 0x57F0, 0x1E92,
- 0x57F1, 0x1E90, 0x57F2, 0x1E86, 0x57F3, 0x1E81, 0x57F4, 0x1E7A,
- 0x57F5, 0x20E1, 0x57F6, 0x1E78, 0x57F7, 0x0A42, 0x57F8, 0x1E7F,
- 0x57F9, 0x0A43, 0x57FA, 0x0A3F, 0x57FB, 0x1E75, 0x57FC, 0x1E8B,
- 0x57FD, 0x1E7D, 0x5800, 0x1E7B, 0x5801, 0x1E8E, 0x5802, 0x0A40,
- 0x5804, 0x1E94, 0x5805, 0x0A3A, 0x5806, 0x0A3C, 0x5807, 0x1E83,
- 0x5808, 0x1E7E, 0x5809, 0x087F, 0x580A, 0x0A3B, 0x580B, 0x1E80,
- 0x580C, 0x1E8F, 0x580D, 0x1E93, 0x580E, 0x1E8A, 0x5810, 0x1E8C,
- 0x5814, 0x1E76, 0x5819, 0x20DC, 0x581B, 0x20E5, 0x581C, 0x20E4,
- 0x581D, 0x0C1E, 0x581E, 0x20DD, 0x5820, 0x0C1F, 0x5821, 0x0C1D,
- 0x5823, 0x20DF, 0x5824, 0x0C1A, 0x5825, 0x20E3, 0x5827, 0x20DE,
- 0x5828, 0x20E0, 0x5829, 0x20DA, 0x582A, 0x0C18, 0x582C, 0x20ED,
- 0x582D, 0x20EC, 0x582E, 0x20E9, 0x582F, 0x0C17, 0x5830, 0x0C1B,
- 0x5831, 0x0C1C, 0x5832, 0x1C5E, 0x5833, 0x20E6, 0x5834, 0x0C19,
- 0x5835, 0x0A41, 0x5836, 0x20E8, 0x5837, 0x20DB, 0x5838, 0x20EB,
- 0x5839, 0x20EA, 0x583B, 0x20EE, 0x583D, 0x239F, 0x583F, 0x20E7,
- 0x5848, 0x20E2, 0x5849, 0x2397, 0x584A, 0x0DEF, 0x584B, 0x0DF2,
- 0x584C, 0x0DED, 0x584D, 0x2396, 0x584E, 0x239A, 0x584F, 0x2395,
- 0x5851, 0x0DE7, 0x5852, 0x0DF1, 0x5853, 0x2392, 0x5854, 0x0DEB,
- 0x5855, 0x2399, 0x5857, 0x0DE9, 0x5858, 0x0DE8, 0x5859, 0x239C,
- 0x585A, 0x0DEA, 0x585B, 0x239E, 0x585D, 0x239B, 0x585E, 0x0DE6,
- 0x5862, 0x0DF0, 0x5863, 0x23A0, 0x5864, 0x2394, 0x5865, 0x239D,
- 0x5868, 0x2393, 0x586B, 0x0DEC, 0x586D, 0x0DEE, 0x586F, 0x2398,
- 0x5871, 0x23A1, 0x5874, 0x263F, 0x5875, 0x0FA2, 0x5876, 0x2645,
- 0x5879, 0x0FA7, 0x587A, 0x2641, 0x587B, 0x2648, 0x587C, 0x2639,
- 0x587D, 0x0FA9, 0x587E, 0x0FA3, 0x587F, 0x263E, 0x5880, 0x1121,
- 0x5881, 0x263D, 0x5882, 0x2646, 0x5883, 0x0FA4, 0x5885, 0x0FA8,
- 0x5886, 0x263C, 0x5887, 0x2642, 0x5888, 0x2647, 0x5889, 0x2638,
- 0x588A, 0x0FA6, 0x588B, 0x2640, 0x588E, 0x2644, 0x588F, 0x264A,
- 0x5890, 0x263A, 0x5891, 0x2643, 0x5893, 0x0FA5, 0x5894, 0x2649,
- 0x5898, 0x263B, 0x589C, 0x1125, 0x589D, 0x28A1, 0x589E, 0x1123,
- 0x589F, 0x1122, 0x58A0, 0x28A3, 0x58A1, 0x28A8, 0x58A3, 0x28A4,
- 0x58A5, 0x28A7, 0x58A6, 0x1128, 0x58A8, 0x1288, 0x58A9, 0x1127,
- 0x58AB, 0x28A0, 0x58AC, 0x28A6, 0x58AE, 0x1126, 0x58AF, 0x28A5,
- 0x58B1, 0x28A2, 0x58B3, 0x1124, 0x58BA, 0x2B18, 0x58BB, 0x36EB,
- 0x58BC, 0x2B1A, 0x58BD, 0x2B15, 0x58BE, 0x12A4, 0x58BF, 0x2B17,
- 0x58C1, 0x12A3, 0x58C2, 0x2B19, 0x58C5, 0x12A6, 0x58C6, 0x2B1B,
- 0x58C7, 0x12A5, 0x58C8, 0x2B14, 0x58C9, 0x2B16, 0x58CE, 0x13C2,
- 0x58CF, 0x2D4D, 0x58D1, 0x13C1, 0x58D2, 0x2D4E, 0x58D3, 0x13C0,
- 0x58D4, 0x2D4C, 0x58D5, 0x13BF, 0x58D6, 0x2D4B, 0x58D8, 0x14CD,
- 0x58D9, 0x14CC, 0x58DA, 0x3085, 0x58DB, 0x3087, 0x58DD, 0x3086,
- 0x58DE, 0x1578, 0x58DF, 0x1579, 0x58E2, 0x157A, 0x58E3, 0x31CB,
- 0x58E4, 0x160E, 0x58E7, 0x3411, 0x58E8, 0x3410, 0x58E9, 0x1720,
- 0x58EB, 0x027B, 0x58EC, 0x02C1, 0x58EF, 0x046F, 0x58F4, 0x1A9B,
- 0x58F9, 0x0C20, 0x58FA, 0x0C21, 0x58FC, 0x23A2, 0x58FD, 0x0FAA,
- 0x58FE, 0x264B, 0x58FF, 0x28A9, 0x5902, 0x0224, 0x5903, 0x1785,
- 0x5906, 0x1857, 0x590A, 0x0224, 0x590C, 0x1944, 0x590D, 0x1A9C,
- 0x590E, 0x1C6C, 0x590F, 0x0880, 0x5912, 0x3088, 0x5914, 0x166D,
- 0x5915, 0x027C, 0x5916, 0x032E, 0x5917, 0x179C, 0x5919, 0x03B4,
- 0x591A, 0x03B5, 0x591C, 0x0581, 0x5920, 0x0A44, 0x5922, 0x0FAC,
- 0x5924, 0x0FAD, 0x5925, 0x0FAB, 0x5927, 0x027D, 0x5929, 0x02C2,
- 0x592A, 0x02C4, 0x592B, 0x02C3, 0x592C, 0x1786, 0x592D, 0x02C5,
- 0x592E, 0x032F, 0x592F, 0x179D, 0x5931, 0x0330, 0x5937, 0x03B6,
- 0x5938, 0x03B7, 0x593C, 0x17D4, 0x593E, 0x0470, 0x5940, 0x1858,
- 0x5944, 0x0585, 0x5945, 0x1945, 0x5947, 0x0583, 0x5948, 0x0584,
- 0x5949, 0x0582, 0x594A, 0x1C6D, 0x594E, 0x06F2, 0x594F, 0x06F1,
- 0x5950, 0x06F3, 0x5951, 0x06F0, 0x5953, 0x1A9D, 0x5954, 0x0586,
- 0x5955, 0x06EF, 0x5957, 0x0881, 0x5958, 0x0882, 0x595A, 0x0883,
- 0x595C, 0x1E95, 0x5960, 0x0C22, 0x5961, 0x20EF, 0x5962, 0x0A45,
- 0x5967, 0x0DF3, 0x5969, 0x0FAF, 0x596A, 0x0FAE, 0x596B, 0x264C,
- 0x596D, 0x1129, 0x596E, 0x12A7, 0x5970, 0x2F17, 0x5971, 0x337B,
- 0x5972, 0x3412, 0x5973, 0x027E, 0x5974, 0x0331, 0x5976, 0x0332,
- 0x5977, 0x17DA, 0x5978, 0x03B9, 0x5979, 0x03BC, 0x597B, 0x17D8,
- 0x597C, 0x17D6, 0x597D, 0x03BB, 0x597E, 0x17D9, 0x597F, 0x17DB,
- 0x5980, 0x17D5, 0x5981, 0x03BE, 0x5982, 0x03BD, 0x5983, 0x03BA,
- 0x5984, 0x03B8, 0x5985, 0x17D7, 0x598A, 0x047B, 0x598D, 0x0478,
- 0x598E, 0x185D, 0x598F, 0x1860, 0x5990, 0x185F, 0x5992, 0x0472,
- 0x5993, 0x047A, 0x5996, 0x0477, 0x5997, 0x185C, 0x5998, 0x185A,
- 0x5999, 0x0476, 0x599D, 0x0471, 0x599E, 0x0474, 0x59A0, 0x185B,
- 0x59A1, 0x1862, 0x59A2, 0x185E, 0x59A3, 0x0475, 0x59A4, 0x0479,
- 0x59A5, 0x047C, 0x59A6, 0x1859, 0x59A7, 0x1861, 0x59A8, 0x0473,
- 0x59AE, 0x058B, 0x59AF, 0x0593, 0x59B1, 0x1951, 0x59B2, 0x194A,
- 0x59B3, 0x0594, 0x59B4, 0x1955, 0x59B5, 0x1946, 0x59B6, 0x194D,
- 0x59B9, 0x058A, 0x59BA, 0x1947, 0x59BB, 0x0588, 0x59BC, 0x194E,
- 0x59BD, 0x1952, 0x59BE, 0x0587, 0x59C0, 0x1953, 0x59C1, 0x194C,
- 0x59C3, 0x194F, 0x59C5, 0x0596, 0x59C6, 0x058D, 0x59C7, 0x1956,
- 0x59C8, 0x1954, 0x59CA, 0x0592, 0x59CB, 0x0590, 0x59CC, 0x194B,
- 0x59CD, 0x058F, 0x59CE, 0x1949, 0x59CF, 0x1948, 0x59D0, 0x058E,
- 0x59D1, 0x058C, 0x59D2, 0x0595, 0x59D3, 0x0591, 0x59D4, 0x0589,
- 0x59D6, 0x1950, 0x59D8, 0x06F5, 0x59DA, 0x06FC, 0x59DB, 0x1AAB,
- 0x59DC, 0x06F4, 0x59DD, 0x1AA3, 0x59DE, 0x1A9F, 0x59E0, 0x1AAF,
- 0x59E1, 0x1A9E, 0x59E3, 0x06F7, 0x59E4, 0x1AA8, 0x59E5, 0x06FA,
- 0x59E6, 0x06FD, 0x59E8, 0x06F8, 0x59E9, 0x1AAC, 0x59EA, 0x06FB,
- 0x59EC, 0x088A, 0x59ED, 0x1AB2, 0x59EE, 0x1AA0, 0x59F1, 0x1AA2,
- 0x59F2, 0x1AA9, 0x59F3, 0x1AAD, 0x59F4, 0x1AB1, 0x59F5, 0x1AAE,
- 0x59F6, 0x1AA7, 0x59F7, 0x1AAA, 0x59FA, 0x1AA4, 0x59FB, 0x06FF,
- 0x59FC, 0x1AA6, 0x59FD, 0x1AA5, 0x59FE, 0x1AB0, 0x59FF, 0x06F6,
- 0x5A00, 0x1AA1, 0x5A01, 0x06FE, 0x5A03, 0x06F9, 0x5A09, 0x0890,
- 0x5A0A, 0x1C75, 0x5A0C, 0x088F, 0x5A0F, 0x1C73, 0x5A11, 0x0884,
- 0x5A13, 0x0889, 0x5A15, 0x1C72, 0x5A16, 0x1C6F, 0x5A17, 0x1C74,
- 0x5A18, 0x0885, 0x5A19, 0x1C6E, 0x5A1B, 0x0888, 0x5A1C, 0x0886,
- 0x5A1E, 0x1C76, 0x5A1F, 0x0887, 0x5A20, 0x088B, 0x5A23, 0x088C,
- 0x5A25, 0x088E, 0x5A29, 0x088D, 0x5A2D, 0x1C70, 0x5A2E, 0x1C71,
- 0x5A33, 0x1C77, 0x5A35, 0x1E9C, 0x5A36, 0x0A46, 0x5A37, 0x20FD,
- 0x5A38, 0x1E9B, 0x5A39, 0x1EAE, 0x5A3C, 0x0A4C, 0x5A3E, 0x1EAC,
- 0x5A40, 0x0A4B, 0x5A41, 0x0A47, 0x5A42, 0x1EB5, 0x5A43, 0x1EA5,
- 0x5A44, 0x1EA8, 0x5A46, 0x0A4F, 0x5A47, 0x1EB2, 0x5A48, 0x1EAA,
- 0x5A49, 0x0A48, 0x5A4A, 0x0A50, 0x5A4C, 0x1EAF, 0x5A4D, 0x1EAD,
- 0x5A50, 0x1E9E, 0x5A51, 0x1EB3, 0x5A52, 0x1EA7, 0x5A53, 0x1EA2,
- 0x5A55, 0x1E98, 0x5A56, 0x1EB4, 0x5A57, 0x1EA4, 0x5A58, 0x1E97,
- 0x5A5A, 0x0A4E, 0x5A5B, 0x1EA9, 0x5A5C, 0x1EB6, 0x5A5D, 0x1EA6,
- 0x5A5E, 0x1E9A, 0x5A5F, 0x1E9F, 0x5A60, 0x1E96, 0x5A62, 0x0A4D,
- 0x5A64, 0x1EA3, 0x5A65, 0x1EA0, 0x5A66, 0x0A49, 0x5A67, 0x1E99,
- 0x5A69, 0x1EB1, 0x5A6A, 0x0A4A, 0x5A6C, 0x1EA1, 0x5A6D, 0x1E9D,
- 0x5A70, 0x1EB0, 0x5A77, 0x0C23, 0x5A78, 0x20F6, 0x5A7A, 0x20F3,
- 0x5A7B, 0x2104, 0x5A7C, 0x20F8, 0x5A7D, 0x2105, 0x5A7F, 0x0C25,
- 0x5A83, 0x2101, 0x5A84, 0x20FE, 0x5A8A, 0x20FF, 0x5A8B, 0x2102,
- 0x5A8C, 0x2106, 0x5A8E, 0x1EAB, 0x5A8F, 0x2108, 0x5A90, 0x23B6,
- 0x5A92, 0x0C26, 0x5A93, 0x2109, 0x5A94, 0x20F1, 0x5A95, 0x20FB,
- 0x5A97, 0x2100, 0x5A9A, 0x0C24, 0x5A9B, 0x0C27, 0x5A9C, 0x2107,
- 0x5A9D, 0x210A, 0x5A9E, 0x20F5, 0x5A9F, 0x20F2, 0x5AA2, 0x20F4,
- 0x5AA5, 0x20F9, 0x5AA6, 0x20F7, 0x5AA7, 0x0C28, 0x5AA9, 0x2103,
- 0x5AAC, 0x20FA, 0x5AAE, 0x20FC, 0x5AAF, 0x20F0, 0x5AB0, 0x23AA,
- 0x5AB1, 0x23A8, 0x5AB2, 0x0DFC, 0x5AB3, 0x0DFA, 0x5AB4, 0x23B2,
- 0x5AB5, 0x23A9, 0x5AB6, 0x23B3, 0x5AB7, 0x23AF, 0x5AB8, 0x23A7,
- 0x5AB9, 0x23B5, 0x5ABA, 0x23A6, 0x5ABB, 0x23AD, 0x5ABC, 0x0DF9,
- 0x5ABD, 0x0DF8, 0x5ABE, 0x0DF7, 0x5ABF, 0x23AB, 0x5AC0, 0x23B0,
- 0x5AC1, 0x0DF4, 0x5AC2, 0x0DFB, 0x5AC4, 0x23A4, 0x5AC6, 0x23AE,
- 0x5AC7, 0x23A3, 0x5AC8, 0x23AC, 0x5AC9, 0x0DF5, 0x5ACA, 0x23B1,
- 0x5ACB, 0x23A5, 0x5ACC, 0x0DF6, 0x5ACD, 0x23B4, 0x5AD5, 0x2650,
- 0x5AD6, 0x0FB4, 0x5AD7, 0x0FB3, 0x5AD8, 0x0FB5, 0x5AD9, 0x265C,
- 0x5ADA, 0x2652, 0x5ADB, 0x2658, 0x5ADC, 0x264D, 0x5ADD, 0x265B,
- 0x5ADE, 0x265A, 0x5ADF, 0x265E, 0x5AE0, 0x2657, 0x5AE1, 0x0FB0,
- 0x5AE2, 0x2656, 0x5AE3, 0x0FB6, 0x5AE5, 0x264F, 0x5AE6, 0x0FB1,
- 0x5AE8, 0x265D, 0x5AE9, 0x0FB2, 0x5AEA, 0x2651, 0x5AEB, 0x2654,
- 0x5AEC, 0x2659, 0x5AED, 0x2653, 0x5AEE, 0x264E, 0x5AF3, 0x2655,
- 0x5AF4, 0x28AB, 0x5AF5, 0x112D, 0x5AF6, 0x28AE, 0x5AF7, 0x28AD,
- 0x5AF8, 0x28B0, 0x5AF9, 0x28B2, 0x5AFA, 0x36EE, 0x5AFB, 0x112B,
- 0x5AFD, 0x28AC, 0x5AFF, 0x28AA, 0x5B01, 0x28B3, 0x5B02, 0x28B1,
- 0x5B03, 0x28AF, 0x5B05, 0x28B5, 0x5B07, 0x28B4, 0x5B08, 0x112F,
- 0x5B09, 0x112A, 0x5B0B, 0x112C, 0x5B0C, 0x112E, 0x5B0F, 0x28B6,
- 0x5B10, 0x2B22, 0x5B13, 0x2B21, 0x5B14, 0x2B20, 0x5B16, 0x2B23,
- 0x5B17, 0x2B1C, 0x5B19, 0x2B1D, 0x5B1A, 0x2B25, 0x5B1B, 0x2B1E,
- 0x5B1D, 0x12A8, 0x5B1E, 0x2B27, 0x5B20, 0x2B26, 0x5B21, 0x2B1F,
- 0x5B23, 0x2D52, 0x5B24, 0x13C5, 0x5B25, 0x2D50, 0x5B26, 0x2D55,
- 0x5B27, 0x2D54, 0x5B28, 0x2B24, 0x5B2A, 0x13C4, 0x5B2C, 0x2D53,
- 0x5B2D, 0x2D4F, 0x5B2E, 0x2D57, 0x5B2F, 0x2D56, 0x5B30, 0x13C3,
- 0x5B32, 0x2D51, 0x5B34, 0x12A9, 0x5B38, 0x14CE, 0x5B3C, 0x2F18,
- 0x5B3D, 0x3089, 0x5B3E, 0x308A, 0x5B3F, 0x308B, 0x5B40, 0x160F,
- 0x5B43, 0x1610, 0x5B45, 0x31CC, 0x5B47, 0x32CD, 0x5B48, 0x32CC,
- 0x5B4B, 0x337C, 0x5B4C, 0x337D, 0x5B4D, 0x3413, 0x5B4E, 0x3482,
- 0x5B50, 0x027F, 0x5B51, 0x0280, 0x5B53, 0x0281, 0x5B54, 0x02C6,
- 0x5B55, 0x0333, 0x5B56, 0x17DC, 0x5B57, 0x03BF, 0x5B58, 0x03C0,
- 0x5B5A, 0x047F, 0x5B5B, 0x0480, 0x5B5C, 0x047E, 0x5B5D, 0x047D,
- 0x5B5F, 0x0597, 0x5B62, 0x1957, 0x5B63, 0x0599, 0x5B64, 0x0598,
- 0x5B65, 0x1958, 0x5B69, 0x0700, 0x5B6B, 0x0891, 0x5B6C, 0x1C78,
- 0x5B6E, 0x1EB8, 0x5B70, 0x0A51, 0x5B71, 0x0C2A, 0x5B72, 0x1EB7,
- 0x5B73, 0x0C29, 0x5B75, 0x0FB7, 0x5B77, 0x265F, 0x5B78, 0x12AA,
- 0x5B7A, 0x13C6, 0x5B7B, 0x2D58, 0x5B7D, 0x1611, 0x5B7F, 0x16C0,
- 0x5B80, 0x0225, 0x5B81, 0x179E, 0x5B83, 0x0334, 0x5B84, 0x179F,
- 0x5B85, 0x03C3, 0x5B87, 0x03C1, 0x5B88, 0x03C2, 0x5B89, 0x03C4,
- 0x5B8B, 0x0482, 0x5B8C, 0x0481, 0x5B8E, 0x1863, 0x5B8F, 0x0483,
- 0x5B92, 0x1864, 0x5B93, 0x1959, 0x5B95, 0x195A, 0x5B97, 0x059A,
- 0x5B98, 0x059C, 0x5B99, 0x059E, 0x5B9A, 0x059B, 0x5B9B, 0x059F,
- 0x5B9C, 0x059D, 0x5BA2, 0x0704, 0x5BA3, 0x0701, 0x5BA4, 0x0703,
- 0x5BA5, 0x0705, 0x5BA6, 0x0702, 0x5BA7, 0x1C79, 0x5BA8, 0x1AB3,
- 0x5BAC, 0x1C7B, 0x5BAD, 0x1C7A, 0x5BAE, 0x0897, 0x5BB0, 0x0893,
- 0x5BB3, 0x0894, 0x5BB4, 0x0896, 0x5BB5, 0x0898, 0x5BB6, 0x0895,
- 0x5BB8, 0x089A, 0x5BB9, 0x0899, 0x5BBF, 0x0A56, 0x5BC0, 0x1EBA,
- 0x5BC1, 0x1EB9, 0x5BC2, 0x0A55, 0x5BC4, 0x0A54, 0x5BC5, 0x0A53,
- 0x5BC6, 0x0A57, 0x5BC7, 0x0A52, 0x5BCA, 0x2110, 0x5BCB, 0x210D,
- 0x5BCC, 0x0C2C, 0x5BCD, 0x210C, 0x5BCE, 0x2111, 0x5BD0, 0x0C2E,
- 0x5BD1, 0x210F, 0x5BD2, 0x0C2B, 0x5BD3, 0x0C2D, 0x5BD4, 0x210E,
- 0x5BD6, 0x23B7, 0x5BD8, 0x23B8, 0x5BD9, 0x23B9, 0x5BDE, 0x0FB8,
- 0x5BDF, 0x0FC0, 0x5BE0, 0x2660, 0x5BE1, 0x0FBA, 0x5BE2, 0x0FBE,
- 0x5BE3, 0x2661, 0x5BE4, 0x0FBF, 0x5BE5, 0x0FBB, 0x5BE6, 0x0FBC,
- 0x5BE7, 0x0FB9, 0x5BE8, 0x0FBD, 0x5BE9, 0x1132, 0x5BEA, 0x210B,
- 0x5BEB, 0x1133, 0x5BEC, 0x1131, 0x5BEE, 0x1130, 0x5BEF, 0x2B28,
- 0x5BF0, 0x12AB, 0x5BF1, 0x2D59, 0x5BF2, 0x2D5A, 0x5BF5, 0x157B,
- 0x5BF6, 0x1612, 0x5BF8, 0x0282, 0x5BFA, 0x03C5, 0x5C01, 0x0706,
- 0x5C03, 0x1C7C, 0x5C04, 0x089B, 0x5C07, 0x0A5A, 0x5C08, 0x0A59,
- 0x5C09, 0x0A58, 0x5C0A, 0x0C2F, 0x5C0B, 0x0C30, 0x5C0C, 0x2112,
- 0x5C0D, 0x0FC1, 0x5C0E, 0x12AC, 0x5C0F, 0x0283, 0x5C10, 0x1787,
- 0x5C11, 0x02C7, 0x5C12, 0x17A0, 0x5C15, 0x17DD, 0x5C16, 0x03C6,
- 0x5C1A, 0x05A0, 0x5C1F, 0x23BA, 0x5C22, 0x0284, 0x5C24, 0x02C8,
- 0x5C25, 0x17DE, 0x5C28, 0x1865, 0x5C2A, 0x1866, 0x5C2C, 0x0484,
- 0x5C30, 0x2113, 0x5C31, 0x0C31, 0x5C33, 0x23BB, 0x5C37, 0x13C7,
- 0x5C38, 0x0285, 0x5C39, 0x0299, 0x5C3A, 0x02C9, 0x5C3B, 0x17A1,
- 0x5C3C, 0x0335, 0x5C3E, 0x0488, 0x5C3F, 0x0487, 0x5C40, 0x0485,
- 0x5C41, 0x0486, 0x5C44, 0x195B, 0x5C45, 0x05A2, 0x5C46, 0x05A3,
- 0x5C47, 0x195C, 0x5C48, 0x05A1, 0x5C4B, 0x070A, 0x5C4C, 0x1AB4,
- 0x5C4D, 0x0709, 0x5C4E, 0x0707, 0x5C4F, 0x0708, 0x5C50, 0x089E,
- 0x5C51, 0x089C, 0x5C54, 0x1C7E, 0x5C55, 0x089D, 0x5C56, 0x1C7D,
- 0x5C58, 0x0892, 0x5C59, 0x1EBB, 0x5C5C, 0x0A5C, 0x5C5D, 0x0A5D,
- 0x5C60, 0x0A5B, 0x5C62, 0x0FC2, 0x5C63, 0x2662, 0x5C64, 0x1134,
- 0x5C65, 0x1135, 0x5C67, 0x28B7, 0x5C68, 0x13C8, 0x5C69, 0x2F19,
- 0x5C6A, 0x2F1A, 0x5C6C, 0x166E, 0x5C6D, 0x3483, 0x5C6E, 0x1776,
- 0x5C6F, 0x02CA, 0x5C71, 0x0286, 0x5C73, 0x17A3, 0x5C74, 0x17A2,
- 0x5C79, 0x03C7, 0x5C7A, 0x17E0, 0x5C7B, 0x17E1, 0x5C7C, 0x17DF,
- 0x5C7E, 0x17E2, 0x5C86, 0x186E, 0x5C88, 0x1869, 0x5C89, 0x186B,
- 0x5C8A, 0x186D, 0x5C8B, 0x186A, 0x5C8C, 0x048C, 0x5C8D, 0x1867,
- 0x5C8F, 0x1868, 0x5C90, 0x0489, 0x5C91, 0x048A, 0x5C92, 0x186C,
- 0x5C93, 0x186F, 0x5C94, 0x048B, 0x5C95, 0x1870, 0x5C9D, 0x196A,
- 0x5C9F, 0x1964, 0x5CA0, 0x195F, 0x5CA1, 0x05A5, 0x5CA2, 0x1967,
- 0x5CA3, 0x1965, 0x5CA4, 0x195E, 0x5CA5, 0x196B, 0x5CA6, 0x196E,
- 0x5CA7, 0x1969, 0x5CA8, 0x1962, 0x5CA9, 0x05A7, 0x5CAA, 0x1968,
- 0x5CAB, 0x05A8, 0x5CAC, 0x1963, 0x5CAD, 0x1966, 0x5CAE, 0x195D,
- 0x5CAF, 0x1961, 0x5CB0, 0x196D, 0x5CB1, 0x05A9, 0x5CB3, 0x05AA,
- 0x5CB5, 0x1960, 0x5CB6, 0x196C, 0x5CB7, 0x05A4, 0x5CB8, 0x05A6,
- 0x5CC6, 0x1AC5, 0x5CC7, 0x1ABE, 0x5CC8, 0x1AC4, 0x5CC9, 0x1ABD,
- 0x5CCA, 0x1ABF, 0x5CCB, 0x1AB9, 0x5CCC, 0x1AB7, 0x5CCE, 0x1AC6,
- 0x5CCF, 0x1AC3, 0x5CD0, 0x1AB5, 0x5CD2, 0x070C, 0x5CD3, 0x1AC1,
- 0x5CD4, 0x1AC2, 0x5CD6, 0x1AC0, 0x5CD7, 0x1AB8, 0x5CD8, 0x1AB6,
- 0x5CD9, 0x070B, 0x5CDA, 0x1ABC, 0x5CDB, 0x1ABA, 0x5CDE, 0x1ABB,
- 0x5CDF, 0x1AC7, 0x5CE8, 0x08A3, 0x5CEA, 0x08A2, 0x5CEC, 0x1C7F,
- 0x5CED, 0x089F, 0x5CEE, 0x1C81, 0x5CF0, 0x08A4, 0x5CF1, 0x1C82,
- 0x5CF4, 0x08A7, 0x5CF6, 0x08A5, 0x5CF7, 0x1C83, 0x5CF8, 0x1AC8,
- 0x5CF9, 0x1C85, 0x5CFB, 0x08A1, 0x5CFD, 0x08A0, 0x5CFF, 0x1C80,
- 0x5D00, 0x1C84, 0x5D01, 0x08A6, 0x5D06, 0x0A5F, 0x5D07, 0x0A5E,
- 0x5D0B, 0x1EBD, 0x5D0C, 0x1EC1, 0x5D0D, 0x1EC3, 0x5D0E, 0x0A60,
- 0x5D0F, 0x1EC6, 0x5D11, 0x0A64, 0x5D12, 0x1EC8, 0x5D14, 0x0A66,
- 0x5D16, 0x0A62, 0x5D17, 0x0A6A, 0x5D19, 0x0A67, 0x5D1A, 0x1EBF,
- 0x5D1B, 0x0A61, 0x5D1D, 0x1EBE, 0x5D1E, 0x1EBC, 0x5D1F, 0x1ECA,
- 0x5D20, 0x1EC0, 0x5D22, 0x0A63, 0x5D23, 0x1EC9, 0x5D24, 0x0A68,
- 0x5D25, 0x1EC5, 0x5D26, 0x1EC4, 0x5D27, 0x0A69, 0x5D28, 0x1EC2,
- 0x5D29, 0x0A65, 0x5D2E, 0x1ECB, 0x5D30, 0x1EC7, 0x5D31, 0x2122,
- 0x5D32, 0x2129, 0x5D33, 0x211E, 0x5D34, 0x0C34, 0x5D35, 0x211A,
- 0x5D36, 0x212A, 0x5D37, 0x2114, 0x5D38, 0x2127, 0x5D39, 0x2125,
- 0x5D3A, 0x211F, 0x5D3C, 0x2128, 0x5D3D, 0x2121, 0x5D3F, 0x2119,
- 0x5D40, 0x212B, 0x5D41, 0x2117, 0x5D42, 0x2124, 0x5D43, 0x2115,
- 0x5D45, 0x212C, 0x5D47, 0x0C35, 0x5D49, 0x2126, 0x5D4A, 0x23BE,
- 0x5D4B, 0x2118, 0x5D4C, 0x0C32, 0x5D4E, 0x211C, 0x5D50, 0x0C33,
- 0x5D51, 0x211B, 0x5D52, 0x2120, 0x5D55, 0x211D, 0x5D59, 0x2123,
- 0x5D5E, 0x23C2, 0x5D62, 0x23C5, 0x5D63, 0x23BD, 0x5D65, 0x23BF,
- 0x5D67, 0x23C4, 0x5D68, 0x23C3, 0x5D69, 0x0DFD, 0x5D6B, 0x2116,
- 0x5D6C, 0x23C1, 0x5D6F, 0x0DFE, 0x5D71, 0x23BC, 0x5D72, 0x23C0,
- 0x5D77, 0x2669, 0x5D79, 0x2670, 0x5D7A, 0x2667, 0x5D7C, 0x266E,
- 0x5D7D, 0x2665, 0x5D7E, 0x266D, 0x5D7F, 0x2671, 0x5D80, 0x2664,
- 0x5D81, 0x2668, 0x5D82, 0x2663, 0x5D84, 0x0FC3, 0x5D86, 0x2666,
- 0x5D87, 0x0FC4, 0x5D88, 0x266C, 0x5D89, 0x266B, 0x5D8A, 0x266A,
- 0x5D8D, 0x266F, 0x5D92, 0x28BB, 0x5D93, 0x28BD, 0x5D94, 0x1137,
- 0x5D95, 0x28BE, 0x5D97, 0x28B9, 0x5D99, 0x28B8, 0x5D9A, 0x28C2,
- 0x5D9C, 0x28C0, 0x5D9D, 0x1136, 0x5D9E, 0x28C3, 0x5D9F, 0x28BA,
- 0x5DA0, 0x28BF, 0x5DA1, 0x28C1, 0x5DA2, 0x28BC, 0x5DA7, 0x2B2C,
- 0x5DA8, 0x2B31, 0x5DA9, 0x2B2B, 0x5DAA, 0x2B30, 0x5DAC, 0x2B29,
- 0x5DAD, 0x2B33, 0x5DAE, 0x2B2F, 0x5DAF, 0x2B34, 0x5DB0, 0x2B2E,
- 0x5DB1, 0x2B2A, 0x5DB2, 0x2B32, 0x5DB4, 0x2B35, 0x5DB5, 0x2B2D,
- 0x5DB7, 0x2D5B, 0x5DB8, 0x13CC, 0x5DBA, 0x13CA, 0x5DBC, 0x13C9,
- 0x5DBD, 0x13CB, 0x5DC0, 0x2F1B, 0x5DC2, 0x3023, 0x5DC3, 0x308C,
- 0x5DC6, 0x31CD, 0x5DC7, 0x31CE, 0x5DC9, 0x1613, 0x5DCB, 0x32CE,
- 0x5DCD, 0x166F, 0x5DCF, 0x32CF, 0x5DD1, 0x337F, 0x5DD2, 0x16C2,
- 0x5DD4, 0x16C1, 0x5DD5, 0x337E, 0x5DD6, 0x16F7, 0x5DD8, 0x3414,
- 0x5DDB, 0x0226, 0x5DDD, 0x0287, 0x5DDE, 0x03C8, 0x5DDF, 0x17E3,
- 0x5DE0, 0x1871, 0x5DE1, 0x051A, 0x5DE2, 0x0A6B, 0x5DE5, 0x0288,
- 0x5DE6, 0x0338, 0x5DE7, 0x0337, 0x5DE8, 0x0336, 0x5DEB, 0x048D,
- 0x5DEE, 0x08A8, 0x5DF0, 0x23C6, 0x5DF1, 0x0289, 0x5DF2, 0x028A,
- 0x5DF3, 0x028B, 0x5DF4, 0x02CB, 0x5DF7, 0x070D, 0x5DF9, 0x1AC9,
- 0x5DFD, 0x0C36, 0x5DFE, 0x028C, 0x5DFF, 0x1788, 0x5E02, 0x0339,
- 0x5E03, 0x033A, 0x5E04, 0x17A4, 0x5E06, 0x03C9, 0x5E0A, 0x1872,
- 0x5E0C, 0x048E, 0x5E0E, 0x1873, 0x5E11, 0x05B0, 0x5E14, 0x1970,
- 0x5E15, 0x05AE, 0x5E16, 0x05AD, 0x5E17, 0x196F, 0x5E18, 0x05AB,
- 0x5E19, 0x1971, 0x5E1A, 0x05AC, 0x5E1B, 0x05AF, 0x5E1D, 0x070E,
- 0x5E1F, 0x0710, 0x5E20, 0x1ACD, 0x5E21, 0x1ACA, 0x5E22, 0x1ACB,
- 0x5E23, 0x1ACC, 0x5E24, 0x1ACE, 0x5E25, 0x070F, 0x5E28, 0x1C87,
- 0x5E29, 0x1C86, 0x5E2B, 0x08AA, 0x5E2D, 0x08A9, 0x5E33, 0x0A6E,
- 0x5E34, 0x1ECD, 0x5E36, 0x0A6D, 0x5E37, 0x0A6F, 0x5E38, 0x0A6C,
- 0x5E3D, 0x0C38, 0x5E3E, 0x1ECC, 0x5E40, 0x0C39, 0x5E41, 0x212E,
- 0x5E43, 0x0C3A, 0x5E44, 0x212D, 0x5E45, 0x0C37, 0x5E4A, 0x23C9,
- 0x5E4B, 0x23CB, 0x5E4C, 0x0DFF, 0x5E4D, 0x23CA, 0x5E4E, 0x23C8,
- 0x5E4F, 0x23C7, 0x5E53, 0x2674, 0x5E54, 0x0FC9, 0x5E55, 0x0FC7,
- 0x5E57, 0x0FC8, 0x5E58, 0x2672, 0x5E59, 0x2673, 0x5E5B, 0x0FC5,
- 0x5E5C, 0x28C7, 0x5E5D, 0x28C5, 0x5E5F, 0x1139, 0x5E60, 0x28C6,
- 0x5E61, 0x113A, 0x5E62, 0x1138, 0x5E63, 0x0FC6, 0x5E66, 0x2B38,
- 0x5E67, 0x2B36, 0x5E68, 0x2B37, 0x5E69, 0x28C4, 0x5E6A, 0x2D5D,
- 0x5E6B, 0x13CD, 0x5E6C, 0x2D5C, 0x5E6D, 0x2F1C, 0x5E6E, 0x2F1D,
- 0x5E6F, 0x2B39, 0x5E70, 0x308D, 0x5E72, 0x028D, 0x5E73, 0x033B,
- 0x5E74, 0x03CB, 0x5E75, 0x17E4, 0x5E76, 0x03CA, 0x5E78, 0x05B1,
- 0x5E79, 0x0E00, 0x5E7A, 0x0227, 0x5E7B, 0x02CC, 0x5E7C, 0x033C,
- 0x5E7D, 0x0711, 0x5E7E, 0x0C3B, 0x5E7F, 0x0228, 0x5E80, 0x17A5,
- 0x5E82, 0x17A6, 0x5E84, 0x17E5, 0x5E87, 0x0490, 0x5E88, 0x1877,
- 0x5E89, 0x1875, 0x5E8A, 0x0491, 0x5E8B, 0x1874, 0x5E8C, 0x1876,
- 0x5E8D, 0x1878, 0x5E8F, 0x048F, 0x5E95, 0x05B5, 0x5E96, 0x05B6,
- 0x5E97, 0x05B3, 0x5E9A, 0x05B2, 0x5E9B, 0x1AD2, 0x5E9C, 0x05B4,
- 0x5EA0, 0x0712, 0x5EA2, 0x1AD1, 0x5EA3, 0x1AD3, 0x5EA4, 0x1AD0,
- 0x5EA5, 0x1AD4, 0x5EA6, 0x0713, 0x5EA7, 0x08AD, 0x5EA8, 0x1C88,
- 0x5EAA, 0x1C8A, 0x5EAB, 0x08AB, 0x5EAC, 0x1C8B, 0x5EAD, 0x08AC,
- 0x5EAE, 0x1C89, 0x5EB0, 0x1ACF, 0x5EB1, 0x1ECE, 0x5EB2, 0x1ED1,
- 0x5EB3, 0x1ED2, 0x5EB4, 0x1ECF, 0x5EB5, 0x0A73, 0x5EB6, 0x0A72,
- 0x5EB7, 0x0A70, 0x5EB8, 0x0A71, 0x5EB9, 0x1ED0, 0x5EBE, 0x0A74,
- 0x5EC1, 0x0C3D, 0x5EC2, 0x0C3E, 0x5EC4, 0x0C3F, 0x5EC5, 0x23CC,
- 0x5EC6, 0x23CE, 0x5EC7, 0x23D0, 0x5EC8, 0x0E02, 0x5EC9, 0x0E01,
- 0x5ECA, 0x0C3C, 0x5ECB, 0x23CF, 0x5ECC, 0x23CD, 0x5ECE, 0x2678,
- 0x5ED1, 0x2676, 0x5ED2, 0x267C, 0x5ED3, 0x0FCA, 0x5ED4, 0x267D,
- 0x5ED5, 0x267A, 0x5ED6, 0x0FCB, 0x5ED7, 0x2677, 0x5ED8, 0x2675,
- 0x5ED9, 0x267B, 0x5EDA, 0x113C, 0x5EDB, 0x28C9, 0x5EDC, 0x2679,
- 0x5EDD, 0x113E, 0x5EDE, 0x28CA, 0x5EDF, 0x113D, 0x5EE0, 0x1140,
- 0x5EE1, 0x28CB, 0x5EE2, 0x113B, 0x5EE3, 0x113F, 0x5EE5, 0x2B3E,
- 0x5EE6, 0x2B3C, 0x5EE7, 0x2B3B, 0x5EE8, 0x2B3D, 0x5EE9, 0x2B3A,
- 0x5EEC, 0x157D, 0x5EEE, 0x31CF, 0x5EEF, 0x31D0, 0x5EF1, 0x32D0,
- 0x5EF2, 0x3380, 0x5EF3, 0x1742, 0x5EF4, 0x0229, 0x5EF6, 0x05B7,
- 0x5EF7, 0x0492, 0x5EFA, 0x0714, 0x5EFE, 0x028E, 0x5EFF, 0x02CD,
- 0x5F01, 0x033D, 0x5F02, 0x17E6, 0x5F04, 0x0493, 0x5F05, 0x1879,
- 0x5F07, 0x1AD5, 0x5F08, 0x0715, 0x5F0A, 0x0FCC, 0x5F0B, 0x028F,
- 0x5F0F, 0x03CC, 0x5F12, 0x0E03, 0x5F13, 0x0290, 0x5F14, 0x02CE,
- 0x5F15, 0x02CF, 0x5F17, 0x033F, 0x5F18, 0x033E, 0x5F1A, 0x17E7,
- 0x5F1B, 0x03CD, 0x5F1D, 0x187A, 0x5F1F, 0x0494, 0x5F22, 0x1973,
- 0x5F23, 0x1974, 0x5F24, 0x1975, 0x5F26, 0x05B8, 0x5F27, 0x05B9,
- 0x5F28, 0x1972, 0x5F29, 0x05BA, 0x5F2D, 0x0716, 0x5F2E, 0x1AD6,
- 0x5F30, 0x1C8D, 0x5F31, 0x08AE, 0x5F33, 0x1C8C, 0x5F35, 0x0A75,
- 0x5F36, 0x1ED3, 0x5F37, 0x0A76, 0x5F38, 0x1ED4, 0x5F3C, 0x0C40,
- 0x5F40, 0x23D1, 0x5F43, 0x267F, 0x5F44, 0x267E, 0x5F46, 0x0FCD,
- 0x5F48, 0x1141, 0x5F49, 0x28CC, 0x5F4A, 0x12AD, 0x5F4B, 0x2B3F,
- 0x5F4C, 0x13CE, 0x5F4E, 0x16C3, 0x5F4F, 0x3416, 0x5F50, 0x022A,
- 0x5F54, 0x1976, 0x5F56, 0x1AD7, 0x5F57, 0x0A77, 0x5F58, 0x212F,
- 0x5F59, 0x0E04, 0x5F5D, 0x14CF, 0x5F61, 0x022B, 0x5F62, 0x0496,
- 0x5F64, 0x0495, 0x5F65, 0x0717, 0x5F67, 0x1C8E, 0x5F69, 0x0A79,
- 0x5F6A, 0x0B89, 0x5F6B, 0x0A7A, 0x5F6C, 0x0A78, 0x5F6D, 0x0C41,
- 0x5F6F, 0x2680, 0x5F70, 0x0FCE, 0x5F71, 0x1142, 0x5F73, 0x1777,
- 0x5F74, 0x17E8, 0x5F76, 0x187C, 0x5F77, 0x0497, 0x5F78, 0x187B,
- 0x5F79, 0x0498, 0x5F7C, 0x05BE, 0x5F7D, 0x1979, 0x5F7E, 0x1978,
- 0x5F7F, 0x05BD, 0x5F80, 0x05BB, 0x5F81, 0x05BC, 0x5F82, 0x1977,
- 0x5F85, 0x0719, 0x5F86, 0x1AD8, 0x5F87, 0x071C, 0x5F88, 0x0718,
- 0x5F89, 0x071E, 0x5F8A, 0x071A, 0x5F8B, 0x071B, 0x5F8C, 0x071D,
- 0x5F90, 0x08B1, 0x5F91, 0x08B0, 0x5F92, 0x08AF, 0x5F96, 0x1ED6,
- 0x5F97, 0x0A7B, 0x5F98, 0x0A7E, 0x5F99, 0x0A7C, 0x5F9B, 0x1ED5,
- 0x5F9C, 0x0A81, 0x5F9E, 0x0A7D, 0x5F9F, 0x1ED7, 0x5FA0, 0x0A80,
- 0x5FA1, 0x0A7F, 0x5FA5, 0x2131, 0x5FA6, 0x2130, 0x5FA8, 0x0C44,
- 0x5FA9, 0x0C42, 0x5FAA, 0x0C43, 0x5FAB, 0x2132, 0x5FAC, 0x0E05,
- 0x5FAD, 0x23D3, 0x5FAE, 0x0E06, 0x5FAF, 0x23D2, 0x5FB2, 0x28CD,
- 0x5FB5, 0x1144, 0x5FB6, 0x2681, 0x5FB7, 0x1143, 0x5FB9, 0x0FCF,
- 0x5FBB, 0x2B41, 0x5FBC, 0x2B40, 0x5FBD, 0x13CF, 0x5FBE, 0x2D5E,
- 0x5FBF, 0x308E, 0x5FC0, 0x31D1, 0x5FC1, 0x31D2, 0x5FC3, 0x02D0,
- 0x5FC5, 0x0340, 0x5FC9, 0x17A7, 0x5FCC, 0x049A, 0x5FCD, 0x049C,
- 0x5FCF, 0x17EB, 0x5FD0, 0x187F, 0x5FD1, 0x187E, 0x5FD2, 0x187D,
- 0x5FD4, 0x17EA, 0x5FD5, 0x17E9, 0x5FD6, 0x03CF, 0x5FD7, 0x049B,
- 0x5FD8, 0x0499, 0x5FD9, 0x03CE, 0x5FDD, 0x05BF, 0x5FDE, 0x197A,
- 0x5FE0, 0x05C0, 0x5FE1, 0x1884, 0x5FE3, 0x1886, 0x5FE4, 0x1885,
- 0x5FE5, 0x197B, 0x5FE8, 0x1881, 0x5FEA, 0x04A0, 0x5FEB, 0x049E,
- 0x5FED, 0x1880, 0x5FEE, 0x1882, 0x5FEF, 0x1888, 0x5FF1, 0x049D,
- 0x5FF3, 0x1883, 0x5FF4, 0x188C, 0x5FF5, 0x05C2, 0x5FF7, 0x1889,
- 0x5FF8, 0x049F, 0x5FFA, 0x1887, 0x5FFB, 0x188A, 0x5FFD, 0x05C1,
- 0x5FFF, 0x05C3, 0x6000, 0x188B, 0x6009, 0x198F, 0x600A, 0x1982,
- 0x600B, 0x1980, 0x600C, 0x198E, 0x600D, 0x1989, 0x600E, 0x0723,
- 0x600F, 0x05C4, 0x6010, 0x198A, 0x6011, 0x198D, 0x6012, 0x071F,
- 0x6013, 0x198C, 0x6014, 0x05C5, 0x6015, 0x05CA, 0x6016, 0x05C8,
- 0x6017, 0x1983, 0x6019, 0x197E, 0x601A, 0x1985, 0x601B, 0x05CF,
- 0x601C, 0x1990, 0x601D, 0x0720, 0x601E, 0x1986, 0x6020, 0x0721,
- 0x6021, 0x05CB, 0x6022, 0x1988, 0x6024, 0x1AE7, 0x6025, 0x0722,
- 0x6026, 0x197D, 0x6027, 0x05CC, 0x6028, 0x0724, 0x6029, 0x05CD,
- 0x602A, 0x05C9, 0x602B, 0x05CE, 0x602C, 0x1987, 0x602D, 0x197C,
- 0x602E, 0x198B, 0x602F, 0x05C6, 0x6032, 0x197F, 0x6033, 0x1984,
- 0x6034, 0x1981, 0x6035, 0x05C7, 0x6037, 0x1AD9, 0x6039, 0x1ADA,
- 0x6040, 0x1AE4, 0x6041, 0x1C92, 0x6042, 0x1AE5, 0x6043, 0x072A,
- 0x6044, 0x1AE8, 0x6045, 0x1ADE, 0x6046, 0x0729, 0x6047, 0x1AE0,
- 0x6049, 0x1AE1, 0x604C, 0x1AE3, 0x604D, 0x0725, 0x6050, 0x08B5,
- 0x6052, 0x36EC, 0x6053, 0x1ADF, 0x6054, 0x1ADB, 0x6055, 0x08B6,
- 0x6058, 0x1AE9, 0x6059, 0x08B2, 0x605A, 0x1C90, 0x605B, 0x1AE2,
- 0x605D, 0x1C8F, 0x605E, 0x1ADD, 0x605F, 0x1AE6, 0x6062, 0x0728,
- 0x6063, 0x08B3, 0x6064, 0x072E, 0x6065, 0x08B4, 0x6066, 0x1AEA,
- 0x6067, 0x1C91, 0x6068, 0x0727, 0x6069, 0x08B8, 0x606A, 0x072D,
- 0x606B, 0x072C, 0x606C, 0x072B, 0x606D, 0x08B7, 0x606E, 0x1AEB,
- 0x606F, 0x08B9, 0x6070, 0x0726, 0x6072, 0x1ADC, 0x607F, 0x0A82,
- 0x6080, 0x1C95, 0x6081, 0x1C97, 0x6083, 0x1C99, 0x6084, 0x08BA,
- 0x6085, 0x08C0, 0x6086, 0x1EDA, 0x6087, 0x1C9D, 0x6088, 0x1C94,
- 0x6089, 0x0A84, 0x608A, 0x1ED8, 0x608C, 0x08BF, 0x608D, 0x08BD,
- 0x608E, 0x1C9F, 0x6090, 0x1ED9, 0x6092, 0x1C96, 0x6094, 0x08BE,
- 0x6095, 0x1C9A, 0x6096, 0x08C1, 0x6097, 0x1C9C, 0x609A, 0x08BC,
- 0x609B, 0x1C9B, 0x609C, 0x1C9E, 0x609D, 0x1C98, 0x609F, 0x08BB,
- 0x60A0, 0x0A85, 0x60A2, 0x1C93, 0x60A3, 0x0A83, 0x60A8, 0x0A86,
- 0x60B0, 0x1EDC, 0x60B1, 0x1EE5, 0x60B2, 0x0C47, 0x60B4, 0x0A88,
- 0x60B5, 0x0A8D, 0x60B6, 0x0C48, 0x60B7, 0x1EE7, 0x60B8, 0x0A94,
- 0x60B9, 0x2134, 0x60BA, 0x1EDD, 0x60BB, 0x0A8C, 0x60BC, 0x0A8F,
- 0x60BD, 0x0A8A, 0x60BE, 0x1EDB, 0x60BF, 0x1EE9, 0x60C0, 0x1EEC,
- 0x60C1, 0x2143, 0x60C3, 0x1EEA, 0x60C4, 0x2138, 0x60C5, 0x0A8B,
- 0x60C6, 0x0A92, 0x60C7, 0x0A96, 0x60C8, 0x1EE4, 0x60C9, 0x2133,
- 0x60CA, 0x1EE8, 0x60CB, 0x0A87, 0x60CC, 0x2135, 0x60CD, 0x1EEB,
- 0x60CE, 0x2137, 0x60CF, 0x1EE0, 0x60D1, 0x0C45, 0x60D3, 0x1EDE,
- 0x60D4, 0x1EDF, 0x60D5, 0x0A91, 0x60D8, 0x0A90, 0x60D9, 0x1EE2,
- 0x60DA, 0x0A95, 0x60DB, 0x1EE6, 0x60DC, 0x0A8E, 0x60DD, 0x1EE3,
- 0x60DF, 0x0A93, 0x60E0, 0x0C49, 0x60E1, 0x0C46, 0x60E2, 0x2136,
- 0x60E4, 0x1EE1, 0x60E6, 0x0A89, 0x60F0, 0x0C4E, 0x60F1, 0x0C52,
- 0x60F2, 0x213A, 0x60F3, 0x0E0B, 0x60F4, 0x0C50, 0x60F5, 0x213E,
- 0x60F6, 0x0C54, 0x60F7, 0x23D4, 0x60F8, 0x2140, 0x60F9, 0x0E0D,
- 0x60FA, 0x0C4C, 0x60FB, 0x0C4F, 0x60FC, 0x2141, 0x60FE, 0x2142,
- 0x60FF, 0x2148, 0x6100, 0x0C56, 0x6101, 0x0E0E, 0x6103, 0x2144,
- 0x6104, 0x2149, 0x6105, 0x213D, 0x6106, 0x0E18, 0x6108, 0x0E0F,
- 0x6109, 0x0C55, 0x610A, 0x213B, 0x610B, 0x214A, 0x610D, 0x0E17,
- 0x610E, 0x0C53, 0x610F, 0x0E08, 0x6110, 0x2147, 0x6112, 0x0C57,
- 0x6113, 0x213F, 0x6114, 0x2139, 0x6115, 0x0C4D, 0x6116, 0x213C,
- 0x6118, 0x2145, 0x611A, 0x0E07, 0x611B, 0x0E0C, 0x611C, 0x0C4A,
- 0x611D, 0x2146, 0x611F, 0x0E0A, 0x6123, 0x0C4B, 0x6127, 0x0E16,
- 0x6128, 0x2683, 0x6129, 0x23DF, 0x612B, 0x23D7, 0x612C, 0x2682,
- 0x612E, 0x23DB, 0x612F, 0x23DD, 0x6132, 0x23DA, 0x6134, 0x0E15,
- 0x6136, 0x23D9, 0x6137, 0x0E19, 0x613B, 0x2692, 0x613E, 0x0E14,
- 0x613F, 0x0FD1, 0x6140, 0x23E0, 0x6141, 0x2684, 0x6144, 0x0E12,
- 0x6145, 0x23D8, 0x6146, 0x23DC, 0x6147, 0x0FD0, 0x6148, 0x0E09,
- 0x6149, 0x23D5, 0x614A, 0x23D6, 0x614B, 0x0FD2, 0x614C, 0x0E11,
- 0x614D, 0x0E13, 0x614E, 0x0E10, 0x614F, 0x23DE, 0x6152, 0x2688,
- 0x6153, 0x2689, 0x6154, 0x268E, 0x6155, 0x1149, 0x6156, 0x2695,
- 0x6158, 0x0FD8, 0x615A, 0x0FD7, 0x615B, 0x2690, 0x615D, 0x1148,
- 0x615E, 0x2685, 0x615F, 0x0FD6, 0x6161, 0x2694, 0x6162, 0x0FD4,
- 0x6163, 0x0FD5, 0x6165, 0x2691, 0x6166, 0x28DE, 0x6167, 0x1146,
- 0x6168, 0x0C51, 0x616A, 0x2693, 0x616B, 0x114D, 0x616C, 0x268B,
- 0x616E, 0x1147, 0x6170, 0x114C, 0x6171, 0x2686, 0x6172, 0x268A,
- 0x6173, 0x2687, 0x6174, 0x268D, 0x6175, 0x0FD9, 0x6176, 0x1145,
- 0x6177, 0x0FD3, 0x6179, 0x28D0, 0x617A, 0x268F, 0x617C, 0x114B,
- 0x617E, 0x114E, 0x6180, 0x268C, 0x6182, 0x114A, 0x6183, 0x28CF,
- 0x6189, 0x28D4, 0x618A, 0x12B1, 0x618B, 0x28CE, 0x618C, 0x2B4D,
- 0x618D, 0x28DD, 0x618E, 0x1152, 0x6190, 0x1150, 0x6191, 0x12AF,
- 0x6192, 0x28DA, 0x6193, 0x28D6, 0x6194, 0x1156, 0x6196, 0x2B44,
- 0x619A, 0x1154, 0x619B, 0x28D5, 0x619D, 0x2B42, 0x619F, 0x28D9,
- 0x61A1, 0x28DC, 0x61A2, 0x28D3, 0x61A4, 0x1155, 0x61A7, 0x114F,
- 0x61A8, 0x2B43, 0x61A9, 0x12B0, 0x61AA, 0x28DB, 0x61AB, 0x1151,
- 0x61AC, 0x1153, 0x61AD, 0x28D8, 0x61AE, 0x1157, 0x61AF, 0x28D7,
- 0x61B0, 0x28D2, 0x61B1, 0x28D1, 0x61B2, 0x12AE, 0x61B3, 0x28DF,
- 0x61B4, 0x2B46, 0x61B5, 0x2D60, 0x61B6, 0x12B3, 0x61B8, 0x2B4C,
- 0x61BA, 0x2B4A, 0x61BC, 0x2D61, 0x61BE, 0x12B4, 0x61BF, 0x2B4B,
- 0x61C1, 0x2B48, 0x61C2, 0x13D1, 0x61C3, 0x2D5F, 0x61C5, 0x2B45,
- 0x61C6, 0x2B47, 0x61C7, 0x13D2, 0x61C8, 0x12B6, 0x61C9, 0x13D0,
- 0x61CA, 0x12B5, 0x61CB, 0x13D4, 0x61CC, 0x2B49, 0x61CD, 0x12B2,
- 0x61D6, 0x2F26, 0x61D8, 0x2F1E, 0x61DE, 0x2D67, 0x61DF, 0x2F1F,
- 0x61E0, 0x2D63, 0x61E3, 0x14D0, 0x61E4, 0x2D65, 0x61E5, 0x2D64,
- 0x61E6, 0x13D3, 0x61E7, 0x2D62, 0x61E8, 0x2D66, 0x61E9, 0x2F27,
- 0x61EA, 0x2F23, 0x61EB, 0x2F25, 0x61ED, 0x2F20, 0x61EE, 0x2F21,
- 0x61F0, 0x2F24, 0x61F1, 0x2F22, 0x61F2, 0x157E, 0x61F5, 0x1581,
- 0x61F6, 0x1580, 0x61F7, 0x157F, 0x61F8, 0x1614, 0x61F9, 0x31D3,
- 0x61FA, 0x1615, 0x61FB, 0x308F, 0x61FC, 0x1670, 0x61FD, 0x32D1,
- 0x61FE, 0x1671, 0x61FF, 0x16C4, 0x6200, 0x16F8, 0x6201, 0x3417,
- 0x6203, 0x3418, 0x6204, 0x3419, 0x6207, 0x3533, 0x6208, 0x02D1,
- 0x6209, 0x17A8, 0x620A, 0x0341, 0x620C, 0x03D1, 0x620D, 0x03D2,
- 0x620E, 0x03D0, 0x6210, 0x03D3, 0x6211, 0x04A2, 0x6212, 0x04A1,
- 0x6214, 0x1991, 0x6215, 0x05D1, 0x6216, 0x05D0, 0x6219, 0x1CA0,
- 0x621A, 0x0A97, 0x621B, 0x0A98, 0x621F, 0x0C58, 0x6220, 0x23E1,
- 0x6221, 0x0E1A, 0x6222, 0x0E1B, 0x6223, 0x23E3, 0x6224, 0x23E5,
- 0x6225, 0x23E4, 0x6227, 0x2697, 0x6229, 0x2696, 0x622A, 0x0FDA,
- 0x622B, 0x2698, 0x622D, 0x28E0, 0x622E, 0x1158, 0x6230, 0x12B7,
- 0x6232, 0x13D5, 0x6233, 0x14D1, 0x6234, 0x13D6, 0x6236, 0x02D2,
- 0x623A, 0x188D, 0x623D, 0x1992, 0x623E, 0x05D3, 0x623F, 0x05D2,
- 0x6240, 0x05D4, 0x6241, 0x072F, 0x6242, 0x1AEC, 0x6243, 0x1AED,
- 0x6246, 0x1CA1, 0x6247, 0x08C2, 0x6248, 0x0A99, 0x6249, 0x0C59,
- 0x624A, 0x214B, 0x624B, 0x02D3, 0x624D, 0x0291, 0x624E, 0x02D4,
- 0x6250, 0x17A9, 0x6251, 0x0345, 0x6252, 0x0344, 0x6253, 0x0342,
- 0x6254, 0x0343, 0x6258, 0x03D6, 0x6259, 0x17F2, 0x625A, 0x17F4,
- 0x625B, 0x03D5, 0x625C, 0x17EC, 0x625E, 0x17ED, 0x6260, 0x17F3,
- 0x6261, 0x17EF, 0x6262, 0x17F1, 0x6263, 0x03D4, 0x6264, 0x17EE,
- 0x6265, 0x17F5, 0x6266, 0x17F0, 0x626D, 0x04A9, 0x626E, 0x04B2,
- 0x626F, 0x04B0, 0x6270, 0x1897, 0x6271, 0x1894, 0x6272, 0x189C,
- 0x6273, 0x04AE, 0x6274, 0x189D, 0x6276, 0x04A7, 0x6277, 0x189A,
- 0x6279, 0x04AD, 0x627A, 0x1896, 0x627B, 0x1895, 0x627C, 0x04AB,
- 0x627D, 0x189B, 0x627E, 0x04AC, 0x627F, 0x05D5, 0x6280, 0x04A6,
- 0x6281, 0x1898, 0x6283, 0x188E, 0x6284, 0x04A3, 0x6286, 0x04B6,
- 0x6287, 0x1893, 0x6288, 0x1899, 0x6289, 0x04A8, 0x628A, 0x04AA,
- 0x628C, 0x188F, 0x628E, 0x1890, 0x628F, 0x1891, 0x6291, 0x04B5,
- 0x6292, 0x04AF, 0x6293, 0x04B4, 0x6294, 0x1892, 0x6295, 0x04B3,
- 0x6296, 0x04A5, 0x6297, 0x04A4, 0x6298, 0x04B1, 0x62A8, 0x05E3,
- 0x62A9, 0x199E, 0x62AA, 0x1997, 0x62AB, 0x05DE, 0x62AC, 0x05F1,
- 0x62AD, 0x1993, 0x62AE, 0x199A, 0x62AF, 0x199C, 0x62B0, 0x199F,
- 0x62B1, 0x05EC, 0x62B3, 0x199B, 0x62B4, 0x1994, 0x62B5, 0x05EA,
- 0x62B6, 0x1998, 0x62B8, 0x19A0, 0x62B9, 0x05DB, 0x62BB, 0x199D,
- 0x62BC, 0x05E5, 0x62BD, 0x05E4, 0x62BE, 0x1996, 0x62BF, 0x05D9,
- 0x62C2, 0x05DA, 0x62C4, 0x05D8, 0x62C6, 0x05F0, 0x62C7, 0x05E8,
- 0x62C8, 0x05E2, 0x62C9, 0x05D6, 0x62CA, 0x1999, 0x62CB, 0x05E1,
- 0x62CC, 0x05D7, 0x62CD, 0x05E9, 0x62CE, 0x05F2, 0x62CF, 0x1AEE,
- 0x62D0, 0x05E6, 0x62D1, 0x1995, 0x62D2, 0x05DC, 0x62D3, 0x05DF,
- 0x62D4, 0x05E0, 0x62D6, 0x05EE, 0x62D7, 0x05EF, 0x62D8, 0x05ED,
- 0x62D9, 0x05E7, 0x62DA, 0x05EB, 0x62DB, 0x05DD, 0x62DC, 0x0730,
- 0x62EB, 0x1AF4, 0x62EC, 0x073C, 0x62ED, 0x0734, 0x62EE, 0x0736,
- 0x62EF, 0x073B, 0x62F0, 0x1B00, 0x62F1, 0x0739, 0x62F2, 0x1CA2,
- 0x62F3, 0x08C3, 0x62F4, 0x073E, 0x62F5, 0x1AF1, 0x62F6, 0x1AF9,
- 0x62F7, 0x073A, 0x62F8, 0x1AF8, 0x62F9, 0x1AF5, 0x62FA, 0x1AFD,
- 0x62FB, 0x1AFF, 0x62FC, 0x0733, 0x62FD, 0x0737, 0x62FE, 0x073D,
- 0x62FF, 0x08C5, 0x6300, 0x1AFA, 0x6301, 0x0735, 0x6302, 0x0740,
- 0x6303, 0x1AF3, 0x6307, 0x0738, 0x6308, 0x08C4, 0x6309, 0x0732,
- 0x630B, 0x1AF0, 0x630C, 0x1AF7, 0x630D, 0x1AEF, 0x630E, 0x1AF2,
- 0x630F, 0x1AF6, 0x6310, 0x1CA3, 0x6311, 0x073F, 0x6313, 0x1AFB,
- 0x6314, 0x1AFC, 0x6315, 0x1AFE, 0x6316, 0x0731, 0x6328, 0x08D3,
- 0x6329, 0x1CAF, 0x632A, 0x08D1, 0x632B, 0x08D2, 0x632C, 0x1CA5,
- 0x632D, 0x1CB5, 0x632F, 0x08C8, 0x6332, 0x1EED, 0x6333, 0x1CB7,
- 0x6334, 0x1CB1, 0x6336, 0x1CA8, 0x6338, 0x1CBA, 0x6339, 0x1CAB,
- 0x633A, 0x08CE, 0x633B, 0x1F04, 0x633C, 0x1CAE, 0x633D, 0x08D0,
- 0x633E, 0x08C7, 0x6340, 0x1CBC, 0x6341, 0x1CB0, 0x6342, 0x08CA,
- 0x6343, 0x1CA9, 0x6344, 0x1CA6, 0x6345, 0x1CA7, 0x6346, 0x08CB,
- 0x6347, 0x1CB6, 0x6348, 0x1CBD, 0x6349, 0x08CD, 0x634A, 0x1CAD,
- 0x634B, 0x1CAC, 0x634C, 0x08D5, 0x634D, 0x08D4, 0x634E, 0x08C6,
- 0x634F, 0x08CC, 0x6350, 0x08CF, 0x6351, 0x1CB9, 0x6354, 0x1CB3,
- 0x6355, 0x08C9, 0x6356, 0x1CA4, 0x6357, 0x1CBB, 0x6358, 0x1CB2,
- 0x6359, 0x1CB4, 0x635A, 0x1CB8, 0x6365, 0x1EEE, 0x6367, 0x0AA1,
- 0x6368, 0x0AB5, 0x6369, 0x0AB4, 0x636B, 0x0AA9, 0x636D, 0x1F00,
- 0x636E, 0x1EFC, 0x636F, 0x1EF9, 0x6370, 0x1F0B, 0x6371, 0x0AA4,
- 0x6372, 0x0A9C, 0x6375, 0x1EFE, 0x6376, 0x0C69, 0x6377, 0x0AA0,
- 0x6378, 0x1F06, 0x637A, 0x0AB6, 0x637B, 0x0AB3, 0x637C, 0x1F02,
- 0x637D, 0x1EF1, 0x6380, 0x0AB2, 0x6381, 0x1F08, 0x6382, 0x1EF0,
- 0x6383, 0x0AA7, 0x6384, 0x0AAB, 0x6385, 0x1F07, 0x6387, 0x1EFA,
- 0x6388, 0x0AAC, 0x6389, 0x0AA6, 0x638A, 0x1EEF, 0x638C, 0x0C5B,
- 0x638D, 0x1F0A, 0x638E, 0x1EF8, 0x638F, 0x0AB1, 0x6390, 0x1EFB,
- 0x6391, 0x1F09, 0x6392, 0x0AB0, 0x6394, 0x214C, 0x6396, 0x0A9D,
- 0x6397, 0x1EF6, 0x6398, 0x0AA2, 0x6399, 0x0AAD, 0x639B, 0x0AA8,
- 0x639C, 0x1EFF, 0x639D, 0x1EF5, 0x639E, 0x1EF3, 0x639F, 0x1F05,
- 0x63A0, 0x0A9A, 0x63A1, 0x0AAE, 0x63A2, 0x0A9E, 0x63A3, 0x0C5A,
- 0x63A4, 0x1F03, 0x63A5, 0x0A9F, 0x63A7, 0x0A9B, 0x63A8, 0x0AAA,
- 0x63A9, 0x0AA5, 0x63AA, 0x0AA3, 0x63AB, 0x1EF7, 0x63AC, 0x0AAF,
- 0x63AD, 0x1EF4, 0x63AE, 0x1F01, 0x63AF, 0x1EFD, 0x63B0, 0x214E,
- 0x63B1, 0x214D, 0x63BD, 0x1EF2, 0x63BE, 0x215E, 0x63C0, 0x0C5D,
- 0x63C2, 0x2164, 0x63C3, 0x2153, 0x63C4, 0x2161, 0x63C5, 0x23E6,
- 0x63C6, 0x0C60, 0x63C7, 0x2165, 0x63C8, 0x2168, 0x63C9, 0x0C5F,
- 0x63CA, 0x2156, 0x63CB, 0x2167, 0x63CC, 0x2166, 0x63CD, 0x0C61,
- 0x63CE, 0x214F, 0x63CF, 0x0C5C, 0x63D0, 0x0C64, 0x63D2, 0x0C62,
- 0x63D3, 0x2163, 0x63D5, 0x2159, 0x63D6, 0x0C66, 0x63D7, 0x216A,
- 0x63D8, 0x2162, 0x63D9, 0x216B, 0x63DA, 0x0C6E, 0x63DB, 0x0C6C,
- 0x63DC, 0x2160, 0x63DD, 0x215F, 0x63DF, 0x215D, 0x63E0, 0x2157,
- 0x63E1, 0x0C65, 0x63E3, 0x0C63, 0x63E4, 0x1CAA, 0x63E5, 0x2150,
- 0x63E7, 0x2404, 0x63E8, 0x2151, 0x63E9, 0x0C5E, 0x63EA, 0x0C6B,
- 0x63EB, 0x23E8, 0x63ED, 0x0C67, 0x63EE, 0x0C68, 0x63EF, 0x2152,
- 0x63F0, 0x2169, 0x63F1, 0x23E7, 0x63F2, 0x215A, 0x63F3, 0x2155,
- 0x63F4, 0x0C6A, 0x63F5, 0x215B, 0x63F6, 0x2158, 0x63F9, 0x0C6F,
- 0x6406, 0x0E2A, 0x6409, 0x23EB, 0x640A, 0x23FE, 0x640B, 0x2403,
- 0x640C, 0x23F7, 0x640D, 0x0E26, 0x640E, 0x2408, 0x640F, 0x0E23,
- 0x6410, 0x23E9, 0x6412, 0x23EA, 0x6413, 0x0E1C, 0x6414, 0x0E25,
- 0x6415, 0x23F1, 0x6416, 0x0E28, 0x6417, 0x0E29, 0x6418, 0x23F2,
- 0x641A, 0x23FF, 0x641B, 0x2405, 0x641C, 0x0E24, 0x641E, 0x0E1E,
- 0x641F, 0x23F0, 0x6420, 0x23EC, 0x6421, 0x2407, 0x6422, 0x23F5,
- 0x6423, 0x23F6, 0x6424, 0x23ED, 0x6425, 0x2401, 0x6426, 0x23F8,
- 0x6427, 0x2402, 0x6428, 0x23FA, 0x642A, 0x0E1F, 0x642B, 0x2699,
- 0x642C, 0x0E22, 0x642D, 0x0E20, 0x642E, 0x2406, 0x642F, 0x23FD,
- 0x6430, 0x23F9, 0x6433, 0x23EE, 0x6434, 0x0FE4, 0x6435, 0x23FC,
- 0x6436, 0x0E27, 0x6437, 0x23F4, 0x6439, 0x23F3, 0x643D, 0x0E21,
- 0x643E, 0x0E1D, 0x643F, 0x26AE, 0x6440, 0x2400, 0x6441, 0x23FB,
- 0x6443, 0x23EF, 0x644B, 0x26A9, 0x644D, 0x269A, 0x644E, 0x26A5,
- 0x6450, 0x26AC, 0x6451, 0x0FE2, 0x6452, 0x0C6D, 0x6453, 0x26AA,
- 0x6454, 0x0FDD, 0x6458, 0x0FDC, 0x6459, 0x26B1, 0x645B, 0x269B,
- 0x645C, 0x26A8, 0x645D, 0x269C, 0x645E, 0x26A7, 0x645F, 0x0FE0,
- 0x6460, 0x26AB, 0x6461, 0x215C, 0x6465, 0x26B2, 0x6466, 0x26A3,
- 0x6467, 0x0FE3, 0x6468, 0x28EE, 0x6469, 0x1159, 0x646B, 0x26B0,
- 0x646C, 0x26AF, 0x646D, 0x0FE5, 0x646E, 0x28E1, 0x646F, 0x115A,
- 0x6470, 0x28E2, 0x6472, 0x269F, 0x6473, 0x26A0, 0x6474, 0x269D,
- 0x6475, 0x26A2, 0x6476, 0x269E, 0x6477, 0x26B3, 0x6478, 0x0FDF,
- 0x6479, 0x115B, 0x647A, 0x0FE1, 0x647B, 0x0FE6, 0x647D, 0x26A1,
- 0x647F, 0x26AD, 0x6482, 0x26A6, 0x6485, 0x28E5, 0x6487, 0x0FDB,
- 0x6488, 0x115E, 0x6489, 0x2B54, 0x648A, 0x28EA, 0x648B, 0x28E9,
- 0x648C, 0x28EB, 0x648F, 0x28E8, 0x6490, 0x115F, 0x6492, 0x1165,
- 0x6493, 0x1162, 0x6495, 0x1163, 0x6496, 0x28E3, 0x6497, 0x28E6,
- 0x6498, 0x28F0, 0x6499, 0x116B, 0x649A, 0x1169, 0x649C, 0x28E7,
- 0x649D, 0x2154, 0x649E, 0x115C, 0x649F, 0x28ED, 0x64A0, 0x28E4,
- 0x64A2, 0x116C, 0x64A3, 0x28EC, 0x64A4, 0x0FDE, 0x64A5, 0x1161,
- 0x64A6, 0x26A4, 0x64A9, 0x1164, 0x64AB, 0x1168, 0x64AC, 0x116A,
- 0x64AD, 0x1167, 0x64AE, 0x1166, 0x64B0, 0x1160, 0x64B1, 0x28EF,
- 0x64B2, 0x115D, 0x64B3, 0x116D, 0x64BB, 0x12BB, 0x64BC, 0x12BC,
- 0x64BD, 0x2B53, 0x64BE, 0x12C5, 0x64BF, 0x12C2, 0x64C1, 0x12B9,
- 0x64C2, 0x12C0, 0x64C3, 0x2B55, 0x64C4, 0x12BE, 0x64C5, 0x12B8,
- 0x64C7, 0x12BF, 0x64C9, 0x2B52, 0x64CA, 0x13D8, 0x64CB, 0x12BA,
- 0x64CD, 0x12C1, 0x64CE, 0x13D7, 0x64CF, 0x2B51, 0x64D0, 0x2B50,
- 0x64D2, 0x12C3, 0x64D4, 0x12C4, 0x64D6, 0x2B4F, 0x64D7, 0x2B4E,
- 0x64D8, 0x13D9, 0x64D9, 0x2B58, 0x64DA, 0x12BD, 0x64DB, 0x2B56,
- 0x64E0, 0x13DA, 0x64E2, 0x13DF, 0x64E3, 0x2D6A, 0x64E4, 0x2D6C,
- 0x64E6, 0x13DC, 0x64E8, 0x2D6D, 0x64E9, 0x2D69, 0x64EB, 0x2D6B,
- 0x64EC, 0x13DD, 0x64ED, 0x13E0, 0x64EF, 0x2D68, 0x64F0, 0x13DB,
- 0x64F1, 0x13DE, 0x64F2, 0x14D3, 0x64F3, 0x2B57, 0x64F4, 0x14D2,
- 0x64F7, 0x14D8, 0x64F8, 0x2F2B, 0x64FA, 0x14D6, 0x64FB, 0x14D7,
- 0x64FC, 0x2F2E, 0x64FD, 0x2F2A, 0x64FE, 0x14D4, 0x64FF, 0x2F28,
- 0x6500, 0x1582, 0x6501, 0x2F2C, 0x6503, 0x2F2D, 0x6504, 0x2F29,
- 0x6506, 0x14D5, 0x6507, 0x3090, 0x6509, 0x3093, 0x650C, 0x3094,
- 0x650D, 0x3092, 0x650E, 0x3095, 0x650F, 0x1583, 0x6510, 0x3091,
- 0x6513, 0x31D7, 0x6514, 0x1617, 0x6515, 0x31D6, 0x6516, 0x31D5,
- 0x6517, 0x31D4, 0x6518, 0x1616, 0x6519, 0x1618, 0x651B, 0x32D2,
- 0x651C, 0x1673, 0x651D, 0x1672, 0x6520, 0x3382, 0x6521, 0x3381,
- 0x6522, 0x3384, 0x6523, 0x16F9, 0x6524, 0x16C5, 0x6525, 0x341B,
- 0x6526, 0x3383, 0x6529, 0x341A, 0x652A, 0x16FB, 0x652B, 0x16FA,
- 0x652C, 0x1721, 0x652D, 0x3484, 0x652E, 0x34CA, 0x652F, 0x02D5,
- 0x6532, 0x216C, 0x6533, 0x2B59, 0x6534, 0x022C, 0x6536, 0x03D7,
- 0x6537, 0x17F6, 0x6538, 0x04B9, 0x6539, 0x04B7, 0x653B, 0x04B8,
- 0x653D, 0x19A1, 0x653E, 0x05F3, 0x653F, 0x0741, 0x6541, 0x1B01,
- 0x6543, 0x1B02, 0x6545, 0x0742, 0x6546, 0x1CBF, 0x6548, 0x08D6,
- 0x6549, 0x08D7, 0x654A, 0x1CBE, 0x654F, 0x0ABD, 0x6551, 0x0AB9,
- 0x6553, 0x1F0C, 0x6554, 0x0AC0, 0x6555, 0x0ABF, 0x6556, 0x0AB8,
- 0x6557, 0x0ABB, 0x6558, 0x0ABE, 0x6559, 0x0ABA, 0x655C, 0x2170,
- 0x655D, 0x0AB7, 0x655E, 0x0C70, 0x6562, 0x0C72, 0x6563, 0x0C73,
- 0x6564, 0x216F, 0x6565, 0x2172, 0x6566, 0x0C71, 0x6567, 0x216D,
- 0x6568, 0x2171, 0x656A, 0x216E, 0x656C, 0x0E2B, 0x656F, 0x2409,
- 0x6572, 0x0FE7, 0x6573, 0x26B4, 0x6574, 0x12C6, 0x6575, 0x116E,
- 0x6576, 0x28F1, 0x6577, 0x116F, 0x6578, 0x1170, 0x6579, 0x28F3,
- 0x657A, 0x28F2, 0x657B, 0x28F4, 0x657C, 0x2B5B, 0x657F, 0x2B5A,
- 0x6580, 0x2D6F, 0x6581, 0x2D6E, 0x6582, 0x13E1, 0x6583, 0x13E2,
- 0x6584, 0x3096, 0x6587, 0x02D6, 0x658C, 0x2173, 0x6590, 0x0C75,
- 0x6591, 0x0C74, 0x6592, 0x240A, 0x6594, 0x2F2F, 0x6595, 0x1674,
- 0x6596, 0x341C, 0x6597, 0x02D7, 0x6599, 0x08D8, 0x659B, 0x0AC2,
- 0x659C, 0x0AC1, 0x659D, 0x2174, 0x659E, 0x2175, 0x659F, 0x0E2C,
- 0x65A0, 0x26B5, 0x65A1, 0x0FE8, 0x65A2, 0x2B5C, 0x65A4, 0x02D8,
- 0x65A5, 0x0346, 0x65A7, 0x05F4, 0x65A8, 0x19A2, 0x65AA, 0x1B03,
- 0x65AB, 0x0743, 0x65AC, 0x0AC3, 0x65AE, 0x2176, 0x65AF, 0x0C76,
- 0x65B0, 0x0E2D, 0x65B2, 0x28F5, 0x65B3, 0x28F6, 0x65B6, 0x2D70,
- 0x65B7, 0x14D9, 0x65B8, 0x34CB, 0x65B9, 0x02D9, 0x65BB, 0x19A3,
- 0x65BC, 0x05F5, 0x65BD, 0x0744, 0x65BF, 0x1B04, 0x65C1, 0x08D9,
- 0x65C2, 0x1CC3, 0x65C3, 0x1CC1, 0x65C4, 0x1CC2, 0x65C5, 0x08DA,
- 0x65C6, 0x1CC0, 0x65CB, 0x0AC5, 0x65CC, 0x0AC6, 0x65CD, 0x1F0D,
- 0x65CE, 0x0AC7, 0x65CF, 0x0AC4, 0x65D0, 0x2177, 0x65D2, 0x2178,
- 0x65D3, 0x240B, 0x65D6, 0x0FEA, 0x65D7, 0x0FE9, 0x65DA, 0x2D71,
- 0x65DB, 0x2F30, 0x65DD, 0x3098, 0x65DE, 0x3097, 0x65DF, 0x31D8,
- 0x65E0, 0x022D, 0x65E1, 0x1789, 0x65E2, 0x0745, 0x65E5, 0x02DA,
- 0x65E6, 0x0347, 0x65E8, 0x03D9, 0x65E9, 0x03D8, 0x65EC, 0x03DA,
- 0x65ED, 0x03DB, 0x65EE, 0x17F8, 0x65EF, 0x17F7, 0x65F0, 0x189E,
- 0x65F1, 0x04BA, 0x65F2, 0x18A1, 0x65F3, 0x18A0, 0x65F4, 0x189F,
- 0x65F5, 0x18A2, 0x65FA, 0x05F6, 0x65FB, 0x19A9, 0x65FC, 0x19A5,
- 0x65FD, 0x19AE, 0x6600, 0x05FD, 0x6602, 0x05FB, 0x6603, 0x19AA,
- 0x6604, 0x19A6, 0x6605, 0x19AD, 0x6606, 0x05FA, 0x6607, 0x0601,
- 0x6608, 0x19A8, 0x6609, 0x19A4, 0x660A, 0x0600, 0x660B, 0x19AB,
- 0x660C, 0x05F9, 0x660D, 0x19AC, 0x660E, 0x05FC, 0x660F, 0x05FE,
- 0x6610, 0x19B0, 0x6611, 0x19AF, 0x6612, 0x19A7, 0x6613, 0x05F8,
- 0x6614, 0x05F7, 0x6615, 0x05FF, 0x661C, 0x1B09, 0x661D, 0x1B0F,
- 0x661F, 0x074B, 0x6620, 0x0748, 0x6621, 0x1B06, 0x6622, 0x1B0B,
- 0x6624, 0x074E, 0x6625, 0x0746, 0x6626, 0x1B0A, 0x6627, 0x0749,
- 0x6628, 0x074C, 0x662B, 0x1B0D, 0x662D, 0x0747, 0x662E, 0x1B12,
- 0x662F, 0x074A, 0x6631, 0x074D, 0x6632, 0x1B07, 0x6633, 0x1B0C,
- 0x6634, 0x1B10, 0x6635, 0x1B08, 0x6636, 0x1B05, 0x6639, 0x1B11,
- 0x663A, 0x1B0E, 0x6641, 0x08E2, 0x6642, 0x08DB, 0x6643, 0x08DE,
- 0x6645, 0x08E1, 0x6647, 0x1CC6, 0x6649, 0x08DC, 0x664A, 0x1CC4,
- 0x664C, 0x08E0, 0x664F, 0x08DD, 0x6651, 0x1CC7, 0x6652, 0x08DF,
- 0x6659, 0x1F11, 0x665A, 0x0AC9, 0x665B, 0x1F10, 0x665C, 0x1F12,
- 0x665D, 0x0AC8, 0x665E, 0x0ACD, 0x665F, 0x1CC5, 0x6661, 0x1F0F,
- 0x6662, 0x1F13, 0x6664, 0x0ACA, 0x6665, 0x1F0E, 0x6666, 0x0ACC,
- 0x6668, 0x0ACB, 0x666A, 0x217F, 0x666C, 0x217A, 0x666E, 0x0C77,
- 0x666F, 0x0C7B, 0x6670, 0x0C78, 0x6671, 0x217D, 0x6672, 0x2180,
- 0x6674, 0x0C79, 0x6676, 0x0C7A, 0x6677, 0x0C7F, 0x6678, 0x2414,
- 0x6679, 0x217E, 0x667A, 0x0C7D, 0x667B, 0x217B, 0x667C, 0x2179,
- 0x667E, 0x0C7E, 0x6680, 0x217C, 0x6684, 0x0E33, 0x6686, 0x240C,
- 0x6687, 0x0E30, 0x6688, 0x0E31, 0x6689, 0x0E2F, 0x668A, 0x2411,
- 0x668B, 0x2410, 0x668C, 0x240D, 0x668D, 0x0E35, 0x6690, 0x240F,
- 0x6691, 0x0C7C, 0x6694, 0x2413, 0x6695, 0x240E, 0x6696, 0x0E32,
- 0x6697, 0x0E2E, 0x6698, 0x0E34, 0x6699, 0x2412, 0x669D, 0x0FED,
- 0x669F, 0x26B8, 0x66A0, 0x26B7, 0x66A1, 0x26B6, 0x66A2, 0x0FEB,
- 0x66A8, 0x0FEC, 0x66A9, 0x28F9, 0x66AA, 0x28FC, 0x66AB, 0x1172,
- 0x66AE, 0x1171, 0x66AF, 0x28FD, 0x66B0, 0x28F8, 0x66B1, 0x1174,
- 0x66B2, 0x28FA, 0x66B4, 0x1173, 0x66B5, 0x28F7, 0x66B7, 0x28FB,
- 0x66B8, 0x12CC, 0x66B9, 0x12C9, 0x66BA, 0x2B65, 0x66BB, 0x2B64,
- 0x66BD, 0x2B63, 0x66BE, 0x2B5E, 0x66C0, 0x2B5F, 0x66C4, 0x12CA,
- 0x66C6, 0x12C7, 0x66C7, 0x12CB, 0x66C8, 0x2B5D, 0x66C9, 0x12C8,
- 0x66CA, 0x2B60, 0x66CB, 0x2B61, 0x66CC, 0x2B66, 0x66CF, 0x2B62,
- 0x66D2, 0x2D72, 0x66D6, 0x13E4, 0x66D8, 0x2F33, 0x66D9, 0x13E3,
- 0x66DA, 0x2F31, 0x66DB, 0x2F32, 0x66DC, 0x14DA, 0x66DD, 0x1585,
- 0x66DE, 0x3099, 0x66E0, 0x1584, 0x66E3, 0x31DA, 0x66E4, 0x31DB,
- 0x66E6, 0x1619, 0x66E8, 0x31D9, 0x66E9, 0x1675, 0x66EB, 0x341D,
- 0x66EC, 0x16FC, 0x66ED, 0x3485, 0x66EE, 0x3486, 0x66F0, 0x02DB,
- 0x66F2, 0x03DC, 0x66F3, 0x03DD, 0x66F4, 0x04BB, 0x66F6, 0x19B1,
- 0x66F7, 0x074F, 0x66F8, 0x08E3, 0x66F9, 0x0ACE, 0x66FC, 0x0A1F,
- 0x66FE, 0x0C80, 0x66FF, 0x0C81, 0x6700, 0x0BF0, 0x6701, 0x2181,
- 0x6703, 0x0E36, 0x6704, 0x26BA, 0x6705, 0x26B9, 0x6708, 0x02DC,
- 0x6709, 0x03DE, 0x670A, 0x19B2, 0x670B, 0x0603, 0x670D, 0x0602,
- 0x670F, 0x1B13, 0x6710, 0x1B14, 0x6712, 0x1CC8, 0x6713, 0x1CC9,
- 0x6714, 0x08E4, 0x6715, 0x08E5, 0x6717, 0x08E6, 0x6718, 0x1F14,
- 0x671B, 0x0AD0, 0x671D, 0x0C83, 0x671F, 0x0C82, 0x6720, 0x2415,
- 0x6721, 0x2522, 0x6722, 0x26BB, 0x6723, 0x2B67, 0x6726, 0x14DB,
- 0x6727, 0x161A, 0x6728, 0x02DD, 0x672A, 0x034A, 0x672B, 0x034B,
- 0x672C, 0x0349, 0x672D, 0x034C, 0x672E, 0x0348, 0x6731, 0x03E1,
- 0x6733, 0x1800, 0x6734, 0x03E0, 0x6735, 0x03E2, 0x6738, 0x17FB,
- 0x6739, 0x17FA, 0x673A, 0x17FD, 0x673B, 0x17FC, 0x673C, 0x17FF,
- 0x673D, 0x03DF, 0x673E, 0x17F9, 0x673F, 0x17FE, 0x6745, 0x18A3,
- 0x6746, 0x04C5, 0x6747, 0x18A4, 0x6748, 0x18A8, 0x6749, 0x04C4,
- 0x674B, 0x18AC, 0x674C, 0x18A7, 0x674D, 0x18AA, 0x674E, 0x04BD,
- 0x674F, 0x04BE, 0x6750, 0x04BF, 0x6751, 0x04C0, 0x6753, 0x04C7,
- 0x6755, 0x18A6, 0x6756, 0x04C2, 0x6757, 0x04C8, 0x6759, 0x18A5,
- 0x675A, 0x18AB, 0x675C, 0x04C1, 0x675D, 0x18A9, 0x675E, 0x04C3,
- 0x675F, 0x04BC, 0x6760, 0x04C6, 0x676A, 0x0618, 0x676C, 0x19B4,
- 0x676D, 0x0604, 0x676F, 0x060E, 0x6770, 0x060F, 0x6771, 0x0607,
- 0x6772, 0x0619, 0x6773, 0x0609, 0x6774, 0x19BC, 0x6775, 0x0614,
- 0x6776, 0x19B7, 0x6777, 0x060A, 0x6778, 0x19C6, 0x6779, 0x19C7,
- 0x677A, 0x19BF, 0x677B, 0x19B8, 0x677C, 0x0617, 0x677D, 0x19C4,
- 0x677E, 0x0612, 0x677F, 0x0610, 0x6781, 0x19C5, 0x6783, 0x19C3,
- 0x6784, 0x19BB, 0x6785, 0x19B3, 0x6786, 0x19BA, 0x6787, 0x060B,
- 0x6789, 0x0611, 0x678B, 0x0605, 0x678C, 0x19BE, 0x678D, 0x19BD,
- 0x678E, 0x19B5, 0x6790, 0x0613, 0x6791, 0x19C1, 0x6792, 0x19B6,
- 0x6793, 0x0616, 0x6794, 0x19C8, 0x6795, 0x0606, 0x6797, 0x060D,
- 0x6798, 0x19B9, 0x6799, 0x19C2, 0x679A, 0x0615, 0x679C, 0x0608,
- 0x679D, 0x060C, 0x679F, 0x19C0, 0x67AE, 0x1B34, 0x67AF, 0x0757,
- 0x67B0, 0x0764, 0x67B2, 0x1B2F, 0x67B3, 0x1B25, 0x67B4, 0x075D,
- 0x67B5, 0x1B23, 0x67B6, 0x0756, 0x67B7, 0x1B1E, 0x67B8, 0x0760,
- 0x67B9, 0x1B2B, 0x67BA, 0x1B18, 0x67BB, 0x1B1A, 0x67C0, 0x1B1D,
- 0x67C1, 0x1B15, 0x67C2, 0x1B2A, 0x67C3, 0x1B3A, 0x67C4, 0x075B,
- 0x67C5, 0x1B1F, 0x67C6, 0x1B31, 0x67C8, 0x1B17, 0x67C9, 0x1B38,
- 0x67CA, 0x1B39, 0x67CB, 0x1B3C, 0x67CC, 0x1B33, 0x67CD, 0x1B24,
- 0x67CE, 0x1B2C, 0x67CF, 0x0761, 0x67D0, 0x0754, 0x67D1, 0x075C,
- 0x67D2, 0x0768, 0x67D3, 0x0751, 0x67D4, 0x0753, 0x67D8, 0x1B1C,
- 0x67D9, 0x0765, 0x67DA, 0x075E, 0x67DB, 0x1B36, 0x67DC, 0x1B19,
- 0x67DD, 0x0767, 0x67DE, 0x0762, 0x67DF, 0x1B22, 0x67E2, 0x0766,
- 0x67E3, 0x1B29, 0x67E4, 0x1B21, 0x67E5, 0x075F, 0x67E6, 0x1B35,
- 0x67E7, 0x1B2D, 0x67E9, 0x0759, 0x67EA, 0x1B3B, 0x67EB, 0x1B20,
- 0x67EC, 0x0755, 0x67ED, 0x1B32, 0x67EE, 0x1B28, 0x67EF, 0x075A,
- 0x67F0, 0x1B2E, 0x67F1, 0x0752, 0x67F2, 0x1B16, 0x67F3, 0x0763,
- 0x67F4, 0x08F5, 0x67F5, 0x0758, 0x67F6, 0x1B27, 0x67F7, 0x1B26,
- 0x67F8, 0x1B1B, 0x67FA, 0x1B37, 0x67FC, 0x1B30, 0x67FF, 0x0750,
- 0x6812, 0x1CDD, 0x6813, 0x08FC, 0x6814, 0x1CDE, 0x6816, 0x1CD2,
- 0x6817, 0x08F1, 0x6818, 0x08FD, 0x681A, 0x1CCB, 0x681C, 0x1CD4,
- 0x681D, 0x1CDC, 0x681F, 0x1CCA, 0x6820, 0x1CE5, 0x6821, 0x08E7,
- 0x6825, 0x1CE4, 0x6826, 0x1CDF, 0x6828, 0x1CE0, 0x6829, 0x08EF,
- 0x682A, 0x08FA, 0x682B, 0x1CD6, 0x682D, 0x1CD7, 0x682E, 0x1CE1,
- 0x682F, 0x1CD8, 0x6831, 0x1CD3, 0x6832, 0x1CCD, 0x6833, 0x1CCE,
- 0x6834, 0x1CDB, 0x6835, 0x1CD5, 0x6838, 0x08E8, 0x6839, 0x08EC,
- 0x683A, 0x1CE3, 0x683B, 0x1CCF, 0x683C, 0x08F8, 0x683D, 0x08F4,
- 0x6840, 0x08F7, 0x6841, 0x08FE, 0x6842, 0x08ED, 0x6843, 0x08F9,
- 0x6844, 0x1CDA, 0x6845, 0x08FB, 0x6846, 0x08EA, 0x6848, 0x08E9,
- 0x6849, 0x1CCC, 0x684B, 0x1CD0, 0x684C, 0x08F2, 0x684D, 0x1CE2,
- 0x684E, 0x1CD9, 0x684F, 0x1CD1, 0x6850, 0x08F6, 0x6851, 0x08F3,
- 0x6853, 0x08EB, 0x6854, 0x08EE, 0x686B, 0x1F29, 0x686D, 0x1F19,
- 0x686E, 0x1F1A, 0x686F, 0x1F1E, 0x6871, 0x1F2D, 0x6872, 0x1F2A,
- 0x6874, 0x1F23, 0x6875, 0x1F22, 0x6876, 0x0AD7, 0x6877, 0x1F26,
- 0x6878, 0x1F35, 0x6879, 0x1F15, 0x687B, 0x1F36, 0x687C, 0x1F28,
- 0x687D, 0x1F3A, 0x687E, 0x1F2E, 0x687F, 0x0AD6, 0x6880, 0x1F2C,
- 0x6881, 0x0AD1, 0x6882, 0x0AE6, 0x6883, 0x0ADC, 0x6885, 0x0AE0,
- 0x6886, 0x0ADF, 0x6887, 0x1F16, 0x6889, 0x1F33, 0x688A, 0x1F39,
- 0x688B, 0x1F31, 0x688C, 0x1F38, 0x688F, 0x1F25, 0x6890, 0x1F17,
- 0x6891, 0x1F37, 0x6892, 0x1F27, 0x6893, 0x0AD4, 0x6894, 0x0AE1,
- 0x6896, 0x1F30, 0x6897, 0x0ADA, 0x689B, 0x1F2F, 0x689C, 0x1F18,
- 0x689D, 0x0AE2, 0x689F, 0x0AE4, 0x68A0, 0x1F32, 0x68A1, 0x0AE5,
- 0x68A2, 0x0AD3, 0x68A3, 0x1F1F, 0x68A4, 0x1F34, 0x68A7, 0x0AD9,
- 0x68A8, 0x0AE3, 0x68A9, 0x1F21, 0x68AA, 0x1F2B, 0x68AB, 0x1F1C,
- 0x68AC, 0x1F20, 0x68AD, 0x0ADE, 0x68AE, 0x1F1B, 0x68AF, 0x0AD2,
- 0x68B0, 0x0ADB, 0x68B1, 0x0AD8, 0x68B2, 0x1F24, 0x68B3, 0x08F0,
- 0x68B4, 0x2198, 0x68B5, 0x0AD5, 0x68C4, 0x0ADD, 0x68C6, 0x219B,
- 0x68C7, 0x21B1, 0x68C8, 0x21A6, 0x68C9, 0x0C97, 0x68CB, 0x0C92,
- 0x68CC, 0x2195, 0x68CD, 0x0C93, 0x68CE, 0x21A5, 0x68D0, 0x219E,
- 0x68D1, 0x21AB, 0x68D2, 0x0C8F, 0x68D3, 0x2183, 0x68D4, 0x21AD,
- 0x68D5, 0x0C85, 0x68D6, 0x218B, 0x68D7, 0x0C88, 0x68D8, 0x0C87,
- 0x68DA, 0x0C98, 0x68DC, 0x2185, 0x68DD, 0x21A7, 0x68DE, 0x21A8,
- 0x68DF, 0x0C8A, 0x68E0, 0x0C86, 0x68E1, 0x2193, 0x68E3, 0x0C91,
- 0x68E4, 0x218E, 0x68E6, 0x21A9, 0x68E7, 0x0C8D, 0x68E8, 0x21A1,
- 0x68E9, 0x21AE, 0x68EA, 0x2188, 0x68EB, 0x218D, 0x68EC, 0x2187,
- 0x68EE, 0x0C8C, 0x68EF, 0x219A, 0x68F0, 0x242B, 0x68F1, 0x2189,
- 0x68F2, 0x0C90, 0x68F3, 0x2192, 0x68F4, 0x21AA, 0x68F5, 0x0C8B,
- 0x68F6, 0x218F, 0x68F7, 0x218C, 0x68F8, 0x219D, 0x68F9, 0x0C8E,
- 0x68FA, 0x0C84, 0x68FB, 0x0C9A, 0x68FC, 0x21A0, 0x68FD, 0x219F,
- 0x6904, 0x2184, 0x6905, 0x0C89, 0x6906, 0x21AC, 0x6907, 0x2194,
- 0x6908, 0x2196, 0x690A, 0x21A3, 0x690B, 0x21A2, 0x690C, 0x2182,
- 0x690D, 0x0C94, 0x690E, 0x0C96, 0x690F, 0x218A, 0x6910, 0x2191,
- 0x6911, 0x2199, 0x6912, 0x0C95, 0x6913, 0x2190, 0x6914, 0x219C,
- 0x6915, 0x21AF, 0x6917, 0x21A4, 0x6925, 0x21B0, 0x692A, 0x2186,
- 0x692F, 0x243F, 0x6930, 0x0E3E, 0x6932, 0x243D, 0x6933, 0x2428,
- 0x6934, 0x242D, 0x6935, 0x2426, 0x6937, 0x2439, 0x6938, 0x2418,
- 0x6939, 0x241F, 0x693B, 0x2437, 0x693C, 0x2441, 0x693D, 0x2429,
- 0x693F, 0x241C, 0x6940, 0x242F, 0x6941, 0x2434, 0x6942, 0x2420,
- 0x6944, 0x2431, 0x6945, 0x241D, 0x6948, 0x2424, 0x6949, 0x2425,
- 0x694A, 0x0E40, 0x694B, 0x2438, 0x694C, 0x2436, 0x694E, 0x2419,
- 0x694F, 0x243B, 0x6951, 0x243C, 0x6952, 0x243E, 0x6953, 0x0E44,
- 0x6954, 0x0E3C, 0x6956, 0x1F1D, 0x6957, 0x2421, 0x6958, 0x2433,
- 0x6959, 0x2422, 0x695A, 0x0E39, 0x695B, 0x0E49, 0x695C, 0x243A,
- 0x695D, 0x0E47, 0x695E, 0x0E43, 0x695F, 0x2417, 0x6960, 0x0E3B,
- 0x6962, 0x241A, 0x6963, 0x0E48, 0x6965, 0x242A, 0x6966, 0x2416,
- 0x6968, 0x0E41, 0x6969, 0x242E, 0x696A, 0x241E, 0x696B, 0x0E42,
- 0x696C, 0x2427, 0x696D, 0x0E38, 0x696E, 0x0C99, 0x696F, 0x2430,
- 0x6970, 0x2197, 0x6971, 0x241B, 0x6974, 0x2435, 0x6975, 0x0E3D,
- 0x6976, 0x2432, 0x6977, 0x0E3A, 0x6978, 0x242C, 0x6979, 0x0E45,
- 0x697A, 0x2423, 0x697B, 0x2440, 0x6982, 0x0E3F, 0x6983, 0x24AF,
- 0x6986, 0x0E46, 0x698D, 0x26C9, 0x698E, 0x26C7, 0x6990, 0x26DD,
- 0x6991, 0x26C5, 0x6993, 0x26D7, 0x6994, 0x0E37, 0x6995, 0x0FF0,
- 0x6996, 0x26C1, 0x6997, 0x26DC, 0x6999, 0x26C6, 0x699A, 0x26D4,
- 0x699B, 0x0FF5, 0x699C, 0x0FEE, 0x699E, 0x26DA, 0x69A0, 0x26BF,
- 0x69A1, 0x26D9, 0x69A3, 0x1000, 0x69A4, 0x26D0, 0x69A5, 0x26E0,
- 0x69A6, 0x0FFE, 0x69A7, 0x26C8, 0x69A8, 0x0FEF, 0x69A9, 0x26CA,
- 0x69AA, 0x26D8, 0x69AB, 0x0FF8, 0x69AC, 0x26C3, 0x69AD, 0x0FFC,
- 0x69AE, 0x0FF2, 0x69AF, 0x26CC, 0x69B0, 0x26C2, 0x69B1, 0x26BC,
- 0x69B3, 0x26D6, 0x69B4, 0x0FF9, 0x69B5, 0x26DF, 0x69B6, 0x26BD,
- 0x69B7, 0x0FF6, 0x69B9, 0x26D2, 0x69BB, 0x0FF7, 0x69BC, 0x26C4,
- 0x69BD, 0x26CF, 0x69BE, 0x26CB, 0x69BF, 0x26CD, 0x69C1, 0x0FF1,
- 0x69C2, 0x26DE, 0x69C3, 0x0FFF, 0x69C4, 0x26CE, 0x69C6, 0x26E1,
- 0x69C9, 0x26BE, 0x69CA, 0x26D3, 0x69CB, 0x0FF4, 0x69CC, 0x0FFD,
- 0x69CD, 0x0FFB, 0x69CE, 0x26C0, 0x69CF, 0x26D5, 0x69D0, 0x0FFA,
- 0x69D3, 0x0FF3, 0x69D4, 0x26D1, 0x69D9, 0x26DB, 0x69E2, 0x2909,
- 0x69E4, 0x2905, 0x69E5, 0x2901, 0x69E6, 0x2915, 0x69E7, 0x2912,
- 0x69E8, 0x1177, 0x69EB, 0x2919, 0x69EC, 0x2908, 0x69ED, 0x1182,
- 0x69EE, 0x290F, 0x69F1, 0x2904, 0x69F2, 0x290E, 0x69F3, 0x117F,
- 0x69F4, 0x2922, 0x69F6, 0x291F, 0x69F7, 0x2911, 0x69F8, 0x2902,
- 0x69FB, 0x2916, 0x69FC, 0x2918, 0x69FD, 0x117B, 0x69FE, 0x290C,
- 0x69FF, 0x2907, 0x6A00, 0x28FE, 0x6A01, 0x1178, 0x6A02, 0x1180,
- 0x6A04, 0x291B, 0x6A05, 0x1181, 0x6A06, 0x28FF, 0x6A07, 0x2921,
- 0x6A08, 0x2914, 0x6A09, 0x291A, 0x6A0A, 0x117E, 0x6A0D, 0x2917,
- 0x6A0F, 0x291E, 0x6A11, 0x1183, 0x6A13, 0x117D, 0x6A14, 0x2910,
- 0x6A15, 0x2903, 0x6A16, 0x2923, 0x6A17, 0x2900, 0x6A18, 0x291C,
- 0x6A19, 0x117A, 0x6A1B, 0x290A, 0x6A1D, 0x290B, 0x6A1E, 0x1179,
- 0x6A1F, 0x1176, 0x6A20, 0x2906, 0x6A21, 0x117C, 0x6A23, 0x1175,
- 0x6A25, 0x291D, 0x6A26, 0x2920, 0x6A27, 0x290D, 0x6A28, 0x2B74,
- 0x6A32, 0x2B6C, 0x6A34, 0x2B68, 0x6A35, 0x12D9, 0x6A38, 0x12CE,
- 0x6A39, 0x12D3, 0x6A3A, 0x12CF, 0x6A3B, 0x2B76, 0x6A3C, 0x2B81,
- 0x6A3D, 0x12CD, 0x6A3E, 0x2B6E, 0x6A3F, 0x2B77, 0x6A40, 0x2913,
- 0x6A41, 0x2B78, 0x6A44, 0x12D4, 0x6A46, 0x2B87, 0x6A47, 0x12D8,
- 0x6A48, 0x12DB, 0x6A49, 0x2B6A, 0x6A4B, 0x12D7, 0x6A4D, 0x2B85,
- 0x6A4E, 0x2B86, 0x6A4F, 0x2B7C, 0x6A50, 0x2B7B, 0x6A51, 0x2B73,
- 0x6A54, 0x2B7D, 0x6A55, 0x2B84, 0x6A56, 0x2B83, 0x6A58, 0x12D2,
- 0x6A59, 0x12D0, 0x6A5A, 0x2B75, 0x6A5B, 0x2B72, 0x6A5D, 0x2B6F,
- 0x6A5E, 0x2B82, 0x6A5F, 0x12DA, 0x6A60, 0x2B80, 0x6A61, 0x12D6,
- 0x6A62, 0x12D5, 0x6A64, 0x2B7A, 0x6A66, 0x2B69, 0x6A67, 0x2B6B,
- 0x6A68, 0x2B6D, 0x6A69, 0x2B7F, 0x6A6A, 0x2B79, 0x6A6B, 0x12D1,
- 0x6A6D, 0x2B70, 0x6A6F, 0x2B7E, 0x6A76, 0x2B71, 0x6A7E, 0x13EC,
- 0x6A7F, 0x2D84, 0x6A80, 0x13E5, 0x6A81, 0x2D75, 0x6A83, 0x2D80,
- 0x6A84, 0x13E7, 0x6A85, 0x2D87, 0x6A87, 0x2D7C, 0x6A89, 0x2D77,
- 0x6A8C, 0x2D88, 0x6A8D, 0x2D73, 0x6A8E, 0x2D7E, 0x6A90, 0x13EE,
- 0x6A91, 0x2D83, 0x6A92, 0x2D89, 0x6A93, 0x2D7D, 0x6A94, 0x13E6,
- 0x6A95, 0x2D7F, 0x6A96, 0x2D74, 0x6A97, 0x13ED, 0x6A9A, 0x2D86,
- 0x6A9B, 0x2D79, 0x6A9C, 0x13E9, 0x6A9E, 0x2D7B, 0x6A9F, 0x2D78,
- 0x6AA0, 0x13EF, 0x6AA1, 0x2D7A, 0x6AA2, 0x13E8, 0x6AA3, 0x13EB,
- 0x6AA4, 0x2D82, 0x6AA5, 0x2D76, 0x6AA6, 0x2D85, 0x6AA8, 0x2D81,
- 0x6AAC, 0x14DD, 0x6AAD, 0x2F3E, 0x6AAE, 0x14E2, 0x6AAF, 0x14E3,
- 0x6AB3, 0x14DC, 0x6AB4, 0x2F3D, 0x6AB6, 0x2F3A, 0x6AB7, 0x2F3B,
- 0x6AB8, 0x14E0, 0x6AB9, 0x2F35, 0x6ABA, 0x2F39, 0x6ABB, 0x14DF,
- 0x6ABD, 0x2F36, 0x6AC2, 0x14E1, 0x6AC3, 0x14DE, 0x6AC5, 0x2F34,
- 0x6AC6, 0x2F38, 0x6AC7, 0x2F3C, 0x6ACB, 0x309F, 0x6ACC, 0x309C,
- 0x6ACD, 0x30A5, 0x6ACF, 0x30A4, 0x6AD0, 0x30A2, 0x6AD1, 0x309D,
- 0x6AD3, 0x1589, 0x6AD9, 0x309E, 0x6ADA, 0x1588, 0x6ADB, 0x13EA,
- 0x6ADC, 0x30A1, 0x6ADD, 0x1587, 0x6ADE, 0x30A6, 0x6ADF, 0x30A0,
- 0x6AE0, 0x309B, 0x6AE1, 0x2F37, 0x6AE5, 0x1586, 0x6AE7, 0x309A,
- 0x6AE8, 0x31DF, 0x6AEA, 0x31DE, 0x6AEB, 0x30A3, 0x6AEC, 0x161B,
- 0x6AEE, 0x31E2, 0x6AEF, 0x31E3, 0x6AF0, 0x31DD, 0x6AF1, 0x31E1,
- 0x6AF3, 0x31DC, 0x6AF8, 0x32D6, 0x6AF9, 0x31E0, 0x6AFA, 0x1678,
- 0x6AFB, 0x1676, 0x6AFC, 0x32D4, 0x6B00, 0x32D7, 0x6B02, 0x32D3,
- 0x6B03, 0x32D5, 0x6B04, 0x1677, 0x6B08, 0x3386, 0x6B09, 0x3387,
- 0x6B0A, 0x16C6, 0x6B0B, 0x3385, 0x6B0F, 0x3420, 0x6B10, 0x16FD,
- 0x6B11, 0x341E, 0x6B12, 0x341F, 0x6B13, 0x3487, 0x6B16, 0x1743,
- 0x6B17, 0x34CE, 0x6B18, 0x34CC, 0x6B19, 0x34CD, 0x6B1A, 0x34CF,
- 0x6B1E, 0x3534, 0x6B20, 0x02DE, 0x6B21, 0x03E3, 0x6B23, 0x061A,
- 0x6B25, 0x19C9, 0x6B28, 0x1B3D, 0x6B2C, 0x1CE6, 0x6B2D, 0x1CE8,
- 0x6B2F, 0x1CE7, 0x6B31, 0x1CE9, 0x6B32, 0x0AE7, 0x6B33, 0x1F3C,
- 0x6B34, 0x1CEA, 0x6B36, 0x1F3B, 0x6B37, 0x1F3D, 0x6B38, 0x1F3E,
- 0x6B39, 0x21B2, 0x6B3A, 0x0C9C, 0x6B3B, 0x21B3, 0x6B3C, 0x21B5,
- 0x6B3D, 0x0C9D, 0x6B3E, 0x0C9B, 0x6B3F, 0x21B4, 0x6B41, 0x2447,
- 0x6B42, 0x2445, 0x6B43, 0x2444, 0x6B45, 0x2443, 0x6B46, 0x2442,
- 0x6B47, 0x0E4A, 0x6B48, 0x2446, 0x6B49, 0x1001, 0x6B4A, 0x26E2,
- 0x6B4B, 0x26E4, 0x6B4C, 0x1002, 0x6B4D, 0x26E3, 0x6B4E, 0x1185,
- 0x6B50, 0x1184, 0x6B51, 0x2924, 0x6B54, 0x2B89, 0x6B55, 0x2B88,
- 0x6B56, 0x2B8A, 0x6B59, 0x12DC, 0x6B5B, 0x2D8A, 0x6B5C, 0x13F0,
- 0x6B5E, 0x2F3F, 0x6B5F, 0x14E4, 0x6B60, 0x30A7, 0x6B61, 0x16C7,
- 0x6B62, 0x02DF, 0x6B63, 0x034D, 0x6B64, 0x03E4, 0x6B65, 0x04C9,
- 0x6B66, 0x061B, 0x6B67, 0x061C, 0x6B6A, 0x0769, 0x6B6D, 0x1CEB,
- 0x6B72, 0x0E4B, 0x6B76, 0x29A2, 0x6B77, 0x12DD, 0x6B78, 0x14E5,
- 0x6B79, 0x02E0, 0x6B7B, 0x03E5, 0x6B7E, 0x19CB, 0x6B7F, 0x061D,
- 0x6B80, 0x19CA, 0x6B82, 0x1B3E, 0x6B83, 0x076A, 0x6B84, 0x1B3F,
- 0x6B86, 0x076B, 0x6B88, 0x1CED, 0x6B89, 0x0900, 0x6B8A, 0x08FF,
- 0x6B8C, 0x1F43, 0x6B8D, 0x1F41, 0x6B8E, 0x1F42, 0x6B8F, 0x1F40,
- 0x6B91, 0x1F3F, 0x6B94, 0x21B6, 0x6B95, 0x21B9, 0x6B96, 0x0C9F,
- 0x6B97, 0x21B7, 0x6B98, 0x0C9E, 0x6B99, 0x21B8, 0x6B9B, 0x2448,
- 0x6B9E, 0x26E5, 0x6B9F, 0x26E6, 0x6BA0, 0x26E7, 0x6BA2, 0x2927,
- 0x6BA3, 0x2926, 0x6BA4, 0x1186, 0x6BA5, 0x2925, 0x6BA6, 0x2928,
- 0x6BA7, 0x2B8B, 0x6BAA, 0x2B8C, 0x6BAB, 0x2B8D, 0x6BAD, 0x2D8B,
- 0x6BAE, 0x13F1, 0x6BAF, 0x14E6, 0x6BB0, 0x30A8, 0x6BB2, 0x1679,
- 0x6BB3, 0x178A, 0x6BB5, 0x076C, 0x6BB6, 0x1B40, 0x6BB7, 0x0901,
- 0x6BBA, 0x0AE8, 0x6BBC, 0x0CA0, 0x6BBD, 0x21BA, 0x6BBF, 0x0E4D,
- 0x6BC0, 0x0E4C, 0x6BC3, 0x26E8, 0x6BC4, 0x26E9, 0x6BC5, 0x1187,
- 0x6BC6, 0x1188, 0x6BC7, 0x2B8F, 0x6BC8, 0x2B8E, 0x6BC9, 0x2F40,
- 0x6BCA, 0x3421, 0x6BCB, 0x02E1, 0x6BCC, 0x178B, 0x6BCD, 0x034E,
- 0x6BCF, 0x04CA, 0x6BD0, 0x18AD, 0x6BD2, 0x076D, 0x6BD3, 0x0E4E,
- 0x6BD4, 0x02E2, 0x6BD6, 0x1B41, 0x6BD7, 0x076E, 0x6BD8, 0x1B42,
- 0x6BDA, 0x13F2, 0x6BDB, 0x02E3, 0x6BDE, 0x19CC, 0x6BE0, 0x1B43,
- 0x6BE2, 0x1CF2, 0x6BE3, 0x1CF1, 0x6BE4, 0x1CEF, 0x6BE6, 0x1CEE,
- 0x6BE7, 0x1CF3, 0x6BE8, 0x1CF0, 0x6BEB, 0x0AE9, 0x6BEC, 0x0AEA,
- 0x6BEF, 0x0CA1, 0x6BF0, 0x21BB, 0x6BF2, 0x21BC, 0x6BF3, 0x21BD,
- 0x6BF7, 0x244C, 0x6BF8, 0x244D, 0x6BF9, 0x244B, 0x6BFB, 0x2449,
- 0x6BFC, 0x244A, 0x6BFD, 0x0E4F, 0x6BFE, 0x26EA, 0x6BFF, 0x292B,
- 0x6C00, 0x292A, 0x6C01, 0x2929, 0x6C02, 0x292C, 0x6C03, 0x2B91,
- 0x6C04, 0x2B90, 0x6C05, 0x12DE, 0x6C06, 0x2B92, 0x6C08, 0x13F3,
- 0x6C09, 0x2D8C, 0x6C0B, 0x2F41, 0x6C0C, 0x30A9, 0x6C0D, 0x3388,
- 0x6C0F, 0x02E4, 0x6C10, 0x0350, 0x6C11, 0x034F, 0x6C13, 0x061E,
- 0x6C14, 0x178C, 0x6C15, 0x17AA, 0x6C16, 0x03E6, 0x6C18, 0x1801,
- 0x6C19, 0x18AE, 0x6C1A, 0x18AF, 0x6C1B, 0x061F, 0x6C1D, 0x19CD,
- 0x6C1F, 0x076F, 0x6C20, 0x1B44, 0x6C21, 0x1B45, 0x6C23, 0x0902,
- 0x6C24, 0x0906, 0x6C25, 0x1CF4, 0x6C26, 0x0905, 0x6C27, 0x0903,
- 0x6C28, 0x0904, 0x6C2A, 0x1F44, 0x6C2B, 0x0AEB, 0x6C2C, 0x0CA4,
- 0x6C2E, 0x0CA2, 0x6C2F, 0x0CA3, 0x6C30, 0x21BE, 0x6C33, 0x1003,
- 0x6C34, 0x02E5, 0x6C36, 0x17AB, 0x6C38, 0x0351, 0x6C3B, 0x17AE,
- 0x6C3E, 0x0354, 0x6C3F, 0x17AD, 0x6C40, 0x0353, 0x6C41, 0x0352,
- 0x6C42, 0x04CB, 0x6C43, 0x17AC, 0x6C46, 0x1802, 0x6C4A, 0x1806,
- 0x6C4B, 0x1808, 0x6C4C, 0x1809, 0x6C4D, 0x03F0, 0x6C4E, 0x03F1,
- 0x6C4F, 0x1805, 0x6C50, 0x03EC, 0x6C52, 0x1803, 0x6C54, 0x1807,
- 0x6C55, 0x03ED, 0x6C57, 0x03E8, 0x6C59, 0x03E9, 0x6C5B, 0x03EF,
- 0x6C5C, 0x1804, 0x6C5D, 0x03E7, 0x6C5E, 0x04CC, 0x6C5F, 0x03EA,
- 0x6C60, 0x03EB, 0x6C61, 0x03EE, 0x6C65, 0x18C0, 0x6C66, 0x18BE,
- 0x6C67, 0x18B1, 0x6C68, 0x04D8, 0x6C69, 0x18B8, 0x6C6A, 0x04D3,
- 0x6C6B, 0x18B2, 0x6C6D, 0x18BA, 0x6C6F, 0x18B7, 0x6C70, 0x04D6,
- 0x6C71, 0x18B6, 0x6C72, 0x04DD, 0x6C73, 0x18BF, 0x6C74, 0x04DF,
- 0x6C76, 0x04E1, 0x6C78, 0x18B0, 0x6C7A, 0x04D4, 0x6C7B, 0x18C1,
- 0x6C7D, 0x04DB, 0x6C7E, 0x04DE, 0x6C80, 0x19E4, 0x6C81, 0x04CE,
- 0x6C82, 0x04E5, 0x6C83, 0x04DC, 0x6C84, 0x18B3, 0x6C85, 0x04D1,
- 0x6C86, 0x04E0, 0x6C87, 0x18BB, 0x6C88, 0x04CF, 0x6C89, 0x04D0,
- 0x6C8A, 0x19E2, 0x6C8B, 0x18B4, 0x6C8C, 0x04D7, 0x6C8D, 0x04E2,
- 0x6C8E, 0x18C2, 0x6C8F, 0x18B5, 0x6C90, 0x04D5, 0x6C92, 0x04DA,
- 0x6C93, 0x19CE, 0x6C94, 0x04E3, 0x6C95, 0x18BC, 0x6C96, 0x04D9,
- 0x6C98, 0x04E4, 0x6C99, 0x04CD, 0x6C9A, 0x18B9, 0x6C9B, 0x04D2,
- 0x6C9C, 0x18BD, 0x6C9D, 0x19E3, 0x6CAB, 0x062B, 0x6CAC, 0x063B,
- 0x6CAD, 0x19D5, 0x6CAE, 0x0632, 0x6CB0, 0x19EA, 0x6CB1, 0x0623,
- 0x6CB3, 0x0626, 0x6CB4, 0x19E1, 0x6CB6, 0x19D3, 0x6CB7, 0x19D7,
- 0x6CB8, 0x062E, 0x6CB9, 0x0630, 0x6CBA, 0x19DA, 0x6CBB, 0x0637,
- 0x6CBC, 0x0629, 0x6CBD, 0x0627, 0x6CBE, 0x0628, 0x6CBF, 0x0636,
- 0x6CC0, 0x19E6, 0x6CC1, 0x0631, 0x6CC2, 0x19D9, 0x6CC3, 0x19DB,
- 0x6CC4, 0x062F, 0x6CC5, 0x0634, 0x6CC6, 0x19DC, 0x6CC7, 0x19E9,
- 0x6CC9, 0x0770, 0x6CCA, 0x063A, 0x6CCC, 0x0624, 0x6CCD, 0x19E8,
- 0x6CCF, 0x19EC, 0x6CD0, 0x19D8, 0x6CD1, 0x19EE, 0x6CD2, 0x19DF,
- 0x6CD3, 0x062D, 0x6CD4, 0x19D4, 0x6CD5, 0x062C, 0x6CD6, 0x063E,
- 0x6CD7, 0x0633, 0x6CD9, 0x19D2, 0x6CDA, 0x1B4E, 0x6CDB, 0x0639,
- 0x6CDC, 0x063D, 0x6CDD, 0x19E0, 0x6CDE, 0x19E5, 0x6CE0, 0x063F,
- 0x6CE1, 0x0638, 0x6CE2, 0x062A, 0x6CE3, 0x0620, 0x6CE5, 0x0625,
- 0x6CE7, 0x19D6, 0x6CE8, 0x0621, 0x6CE9, 0x19ED, 0x6CEB, 0x19D0,
- 0x6CEC, 0x19CF, 0x6CED, 0x19DD, 0x6CEE, 0x19D1, 0x6CEF, 0x063C,
- 0x6CF0, 0x0907, 0x6CF1, 0x0635, 0x6CF2, 0x19DE, 0x6CF3, 0x0622,
- 0x6CF5, 0x077F, 0x6CF9, 0x19EB, 0x6D00, 0x1B55, 0x6D01, 0x1B58,
- 0x6D03, 0x1B5B, 0x6D04, 0x1B50, 0x6D07, 0x1B5E, 0x6D08, 0x1B61,
- 0x6D09, 0x1B63, 0x6D0A, 0x1B4D, 0x6D0B, 0x0771, 0x6D0C, 0x0776,
- 0x6D0D, 0x1CF9, 0x6D0E, 0x0786, 0x6D0F, 0x1B5C, 0x6D10, 0x1B64,
- 0x6D11, 0x1B54, 0x6D12, 0x1B4C, 0x6D16, 0x1D14, 0x6D17, 0x0779,
- 0x6D18, 0x1B59, 0x6D19, 0x1B51, 0x6D1A, 0x1B53, 0x6D1B, 0x077E,
- 0x6D1D, 0x1B56, 0x6D1E, 0x0778, 0x6D1F, 0x1B49, 0x6D20, 0x1B5F,
- 0x6D22, 0x1B62, 0x6D25, 0x0775, 0x6D27, 0x0781, 0x6D28, 0x1B46,
- 0x6D29, 0x0783, 0x6D2A, 0x0773, 0x6D2B, 0x0787, 0x6D2C, 0x1B60,
- 0x6D2D, 0x1B48, 0x6D2E, 0x0784, 0x6D2F, 0x1D0E, 0x6D30, 0x19E7,
- 0x6D31, 0x0777, 0x6D32, 0x0772, 0x6D33, 0x1B4F, 0x6D34, 0x1B47,
- 0x6D35, 0x0785, 0x6D36, 0x077D, 0x6D37, 0x1B5A, 0x6D38, 0x0782,
- 0x6D39, 0x0780, 0x6D3A, 0x1B52, 0x6D3B, 0x077A, 0x6D3C, 0x1B4A,
- 0x6D3D, 0x077B, 0x6D3E, 0x077C, 0x6D3F, 0x1B4B, 0x6D40, 0x1B5D,
- 0x6D41, 0x0774, 0x6D42, 0x1B57, 0x6D58, 0x1CFC, 0x6D59, 0x090F,
- 0x6D5A, 0x0914, 0x6D5E, 0x1D05, 0x6D5F, 0x1D0B, 0x6D60, 0x1D07,
- 0x6D61, 0x1CFA, 0x6D62, 0x1CFD, 0x6D63, 0x1CF6, 0x6D64, 0x1CF7,
- 0x6D65, 0x091B, 0x6D66, 0x090C, 0x6D67, 0x1D06, 0x6D68, 0x1D0F,
- 0x6D69, 0x0916, 0x6D6A, 0x0908, 0x6D6C, 0x0911, 0x6D6D, 0x1CFE,
- 0x6D6E, 0x0913, 0x6D6F, 0x1CFF, 0x6D70, 0x1D09, 0x6D74, 0x0915,
- 0x6D75, 0x1D18, 0x6D76, 0x1CF8, 0x6D77, 0x090E, 0x6D78, 0x090D,
- 0x6D79, 0x0919, 0x6D7A, 0x1CF5, 0x6D7B, 0x1D16, 0x6D7C, 0x1D0A,
- 0x6D7D, 0x1D17, 0x6D7E, 0x1D11, 0x6D7F, 0x1D03, 0x6D80, 0x1D12,
- 0x6D82, 0x1D0C, 0x6D83, 0x1D15, 0x6D84, 0x1D13, 0x6D85, 0x091A,
- 0x6D86, 0x1D04, 0x6D87, 0x090B, 0x6D88, 0x090A, 0x6D89, 0x0912,
- 0x6D8A, 0x0918, 0x6D8B, 0x1D10, 0x6D8C, 0x0917, 0x6D8D, 0x1D01,
- 0x6D8E, 0x0AEC, 0x6D90, 0x1D19, 0x6D91, 0x1D00, 0x6D92, 0x1CFB,
- 0x6D93, 0x0910, 0x6D94, 0x091C, 0x6D95, 0x0909, 0x6D97, 0x1D08,
- 0x6D98, 0x1D0D, 0x6DAA, 0x0B0E, 0x6DAB, 0x1F46, 0x6DAC, 0x1F4A,
- 0x6DAE, 0x0AFB, 0x6DAF, 0x0AF9, 0x6DB2, 0x0AF0, 0x6DB3, 0x1F48,
- 0x6DB4, 0x1F47, 0x6DB5, 0x0B04, 0x6DB7, 0x1F4D, 0x6DB8, 0x0AFE,
- 0x6DBA, 0x1F5F, 0x6DBB, 0x1F6B, 0x6DBC, 0x0AED, 0x6DBD, 0x1F5C,
- 0x6DBE, 0x1F55, 0x6DBF, 0x0B10, 0x6DC0, 0x1F45, 0x6DC2, 0x1F61,
- 0x6DC4, 0x0B0D, 0x6DC5, 0x0B01, 0x6DC6, 0x0B0C, 0x6DC7, 0x0AF7,
- 0x6DC8, 0x1F51, 0x6DC9, 0x1F63, 0x6DCA, 0x1F5B, 0x6DCB, 0x0AF8,
- 0x6DCC, 0x0AF2, 0x6DCD, 0x1F69, 0x6DCF, 0x1F62, 0x6DD0, 0x1F64,
- 0x6DD1, 0x0AFA, 0x6DD2, 0x0B02, 0x6DD3, 0x1F66, 0x6DD4, 0x1F4F,
- 0x6DD5, 0x1F60, 0x6DD6, 0x1F54, 0x6DD7, 0x1F68, 0x6DD8, 0x0B07,
- 0x6DD9, 0x0AEF, 0x6DDA, 0x0B05, 0x6DDB, 0x1F59, 0x6DDC, 0x1F57,
- 0x6DDD, 0x1F58, 0x6DDE, 0x0AFC, 0x6DDF, 0x1F53, 0x6DE0, 0x1F52,
- 0x6DE1, 0x0AF1, 0x6DE2, 0x1F4C, 0x6DE3, 0x1F6A, 0x6DE4, 0x0AF3,
- 0x6DE5, 0x1F56, 0x6DE6, 0x0B11, 0x6DE8, 0x0B0B, 0x6DE9, 0x1F4B,
- 0x6DEA, 0x0B08, 0x6DEB, 0x0B06, 0x6DEC, 0x0B0F, 0x6DED, 0x1F5D,
- 0x6DEE, 0x0B0A, 0x6DEF, 0x1D02, 0x6DF0, 0x1F5E, 0x6DF1, 0x0B09,
- 0x6DF2, 0x1F65, 0x6DF3, 0x0AEE, 0x6DF4, 0x1F5A, 0x6DF5, 0x0B00,
- 0x6DF6, 0x1F4E, 0x6DF7, 0x0AFF, 0x6DF9, 0x0AFD, 0x6DFA, 0x0AF5,
- 0x6DFB, 0x0AF4, 0x6DFC, 0x21BF, 0x6DFD, 0x1F67, 0x6E00, 0x1F50,
- 0x6E03, 0x21D4, 0x6E05, 0x0AF6, 0x6E19, 0x0CC1, 0x6E1A, 0x0B03,
- 0x6E1B, 0x0CAF, 0x6E1C, 0x21CE, 0x6E1D, 0x0CBD, 0x6E1F, 0x21C2,
- 0x6E20, 0x0CAC, 0x6E21, 0x0CA8, 0x6E22, 0x21E0, 0x6E23, 0x0CAE,
- 0x6E24, 0x0CB2, 0x6E25, 0x0CAD, 0x6E26, 0x0CB6, 0x6E27, 0x21E4,
- 0x6E28, 0x21DB, 0x6E2B, 0x21C9, 0x6E2C, 0x0CBB, 0x6E2D, 0x0CB5,
- 0x6E2E, 0x21D5, 0x6E2F, 0x0CA5, 0x6E30, 0x21E1, 0x6E31, 0x21DA,
- 0x6E32, 0x0CA9, 0x6E33, 0x21CF, 0x6E34, 0x0CB8, 0x6E35, 0x21EC,
- 0x6E36, 0x21ED, 0x6E38, 0x0CA6, 0x6E39, 0x21DF, 0x6E3A, 0x0CBA,
- 0x6E3B, 0x21D3, 0x6E3C, 0x21C5, 0x6E3D, 0x21C6, 0x6E3E, 0x0CBE,
- 0x6E3F, 0x21CA, 0x6E40, 0x21D1, 0x6E41, 0x21CB, 0x6E43, 0x0CBC,
- 0x6E44, 0x0CC4, 0x6E45, 0x21C7, 0x6E46, 0x21C0, 0x6E47, 0x21C1,
- 0x6E49, 0x21C3, 0x6E4A, 0x0CAB, 0x6E4B, 0x21D0, 0x6E4D, 0x0CB9,
- 0x6E4E, 0x0CC2, 0x6E51, 0x21D2, 0x6E52, 0x21EA, 0x6E53, 0x21E2,
- 0x6E54, 0x0CA7, 0x6E55, 0x21E8, 0x6E56, 0x0CB3, 0x6E58, 0x0CB1,
- 0x6E5A, 0x21EE, 0x6E5B, 0x0CB0, 0x6E5C, 0x21D8, 0x6E5D, 0x21CC,
- 0x6E5E, 0x21D6, 0x6E5F, 0x0CC7, 0x6E60, 0x21DC, 0x6E61, 0x21D9,
- 0x6E62, 0x21C8, 0x6E63, 0x0CC3, 0x6E64, 0x21E6, 0x6E65, 0x21E3,
- 0x6E66, 0x21EB, 0x6E67, 0x0CAA, 0x6E68, 0x21D7, 0x6E69, 0x0CC6,
- 0x6E6B, 0x21DE, 0x6E6E, 0x0CB4, 0x6E6F, 0x0CB7, 0x6E71, 0x21DD,
- 0x6E72, 0x0CC5, 0x6E73, 0x21CD, 0x6E74, 0x1F49, 0x6E77, 0x21E7,
- 0x6E78, 0x21E5, 0x6E79, 0x21E9, 0x6E88, 0x21C4, 0x6E89, 0x0CC0,
- 0x6E8D, 0x246C, 0x6E8E, 0x246B, 0x6E8F, 0x2451, 0x6E90, 0x0E55,
- 0x6E92, 0x246A, 0x6E93, 0x2454, 0x6E94, 0x2455, 0x6E96, 0x0E5F,
- 0x6E97, 0x2473, 0x6E98, 0x0E5A, 0x6E99, 0x2469, 0x6E9B, 0x244E,
- 0x6E9C, 0x0E60, 0x6E9D, 0x0E56, 0x6E9E, 0x245D, 0x6E9F, 0x2453,
- 0x6EA0, 0x2456, 0x6EA1, 0x246E, 0x6EA2, 0x0E50, 0x6EA3, 0x2475,
- 0x6EA4, 0x246D, 0x6EA5, 0x0E59, 0x6EA6, 0x2462, 0x6EA7, 0x0E64,
- 0x6EAA, 0x0E63, 0x6EAB, 0x0E5D, 0x6EAE, 0x2474, 0x6EAF, 0x0E51,
- 0x6EB0, 0x2460, 0x6EB1, 0x2457, 0x6EB2, 0x2464, 0x6EB3, 0x2470,
- 0x6EB4, 0x0E65, 0x6EB6, 0x0E53, 0x6EB7, 0x245F, 0x6EB9, 0x2458,
- 0x6EBA, 0x0E5C, 0x6EBC, 0x0E5B, 0x6EBD, 0x245B, 0x6EBE, 0x2465,
- 0x6EBF, 0x246F, 0x6EC0, 0x2452, 0x6EC1, 0x245C, 0x6EC2, 0x0E54,
- 0x6EC3, 0x2466, 0x6EC4, 0x0E61, 0x6EC5, 0x0E58, 0x6EC6, 0x2459,
- 0x6EC7, 0x0E57, 0x6EC8, 0x2450, 0x6EC9, 0x245E, 0x6ECA, 0x2472,
- 0x6ECB, 0x0CBF, 0x6ECC, 0x101F, 0x6ECD, 0x2461, 0x6ECE, 0x26EB,
- 0x6ECF, 0x2463, 0x6ED0, 0x2471, 0x6ED1, 0x0E5E, 0x6ED2, 0x245A,
- 0x6ED3, 0x0E52, 0x6ED4, 0x0E62, 0x6ED5, 0x119A, 0x6ED6, 0x244F,
- 0x6ED8, 0x2468, 0x6EDC, 0x2467, 0x6EEB, 0x2707, 0x6EEC, 0x101C,
- 0x6EED, 0x26FC, 0x6EEE, 0x2701, 0x6EEF, 0x1011, 0x6EF1, 0x26ED,
- 0x6EF2, 0x101E, 0x6EF4, 0x1008, 0x6EF5, 0x26EC, 0x6EF6, 0x270D,
- 0x6EF7, 0x1020, 0x6EF8, 0x26F0, 0x6EF9, 0x2700, 0x6EFB, 0x26F2,
- 0x6EFC, 0x2710, 0x6EFD, 0x270C, 0x6EFE, 0x1006, 0x6EFF, 0x1010,
- 0x6F00, 0x2946, 0x6F01, 0x101D, 0x6F02, 0x100E, 0x6F03, 0x26EE,
- 0x6F05, 0x270B, 0x6F06, 0x1012, 0x6F07, 0x2708, 0x6F08, 0x2715,
- 0x6F09, 0x26F4, 0x6F0A, 0x26FD, 0x6F0D, 0x2713, 0x6F0E, 0x2709,
- 0x6F0F, 0x100D, 0x6F12, 0x26FB, 0x6F13, 0x1007, 0x6F14, 0x1005,
- 0x6F15, 0x1017, 0x6F18, 0x26F9, 0x6F19, 0x26F6, 0x6F1A, 0x26F7,
- 0x6F1C, 0x270F, 0x6F1E, 0x2714, 0x6F1F, 0x2712, 0x6F20, 0x100B,
- 0x6F21, 0x2716, 0x6F22, 0x100F, 0x6F23, 0x1016, 0x6F25, 0x26EF,
- 0x6F26, 0x292E, 0x6F27, 0x26F8, 0x6F29, 0x1009, 0x6F2A, 0x101B,
- 0x6F2B, 0x1018, 0x6F2C, 0x100C, 0x6F2D, 0x2702, 0x6F2E, 0x26F3,
- 0x6F2F, 0x1019, 0x6F30, 0x2704, 0x6F31, 0x1013, 0x6F32, 0x1015,
- 0x6F33, 0x1004, 0x6F35, 0x2706, 0x6F36, 0x26FE, 0x6F37, 0x26F1,
- 0x6F38, 0x1014, 0x6F39, 0x270E, 0x6F3A, 0x2711, 0x6F3B, 0x26FA,
- 0x6F3C, 0x2705, 0x6F3E, 0x100A, 0x6F3F, 0x1189, 0x6F40, 0x2703,
- 0x6F41, 0x292D, 0x6F43, 0x270A, 0x6F4E, 0x26F5, 0x6F4F, 0x2937,
- 0x6F50, 0x2941, 0x6F51, 0x118C, 0x6F52, 0x2940, 0x6F53, 0x294C,
- 0x6F54, 0x118E, 0x6F55, 0x293E, 0x6F57, 0x2942, 0x6F58, 0x1199,
- 0x6F5A, 0x2939, 0x6F5B, 0x1191, 0x6F5D, 0x2945, 0x6F5E, 0x2B9A,
- 0x6F5F, 0x119D, 0x6F60, 0x119C, 0x6F61, 0x2947, 0x6F62, 0x2936,
- 0x6F63, 0x2951, 0x6F64, 0x1197, 0x6F66, 0x118D, 0x6F67, 0x294A,
- 0x6F69, 0x294E, 0x6F6A, 0x2953, 0x6F6B, 0x2948, 0x6F6C, 0x293C,
- 0x6F6D, 0x1190, 0x6F6E, 0x1193, 0x6F6F, 0x119B, 0x6F70, 0x1196,
- 0x6F72, 0x293F, 0x6F73, 0x26FF, 0x6F76, 0x293B, 0x6F77, 0x2952,
- 0x6F78, 0x1192, 0x6F7A, 0x1195, 0x6F7B, 0x2954, 0x6F7C, 0x118A,
- 0x6F7D, 0x2949, 0x6F7E, 0x292F, 0x6F7F, 0x294F, 0x6F80, 0x13FC,
- 0x6F82, 0x293D, 0x6F84, 0x118B, 0x6F85, 0x2938, 0x6F86, 0x118F,
- 0x6F87, 0x2930, 0x6F88, 0x101A, 0x6F89, 0x2934, 0x6F8B, 0x294D,
- 0x6F8C, 0x2935, 0x6F8D, 0x2933, 0x6F8E, 0x1194, 0x6F90, 0x294B,
- 0x6F92, 0x2932, 0x6F93, 0x2944, 0x6F94, 0x2943, 0x6F95, 0x2950,
- 0x6F96, 0x293A, 0x6F97, 0x1198, 0x6F9E, 0x2B9D, 0x6FA0, 0x12EB,
- 0x6FA1, 0x12E1, 0x6FA2, 0x2BA9, 0x6FA3, 0x2B95, 0x6FA4, 0x12E3,
- 0x6FA5, 0x2BA1, 0x6FA6, 0x12EA, 0x6FA7, 0x12E5, 0x6FA8, 0x2B9F,
- 0x6FA9, 0x2D8E, 0x6FAA, 0x2BA5, 0x6FAB, 0x2BAB, 0x6FAC, 0x2BA4,
- 0x6FAD, 0x2B93, 0x6FAE, 0x2BA2, 0x6FAF, 0x2BAD, 0x6FB0, 0x2BAF,
- 0x6FB1, 0x12E0, 0x6FB2, 0x2BAE, 0x6FB3, 0x12E6, 0x6FB4, 0x12EC,
- 0x6FB6, 0x12E9, 0x6FB8, 0x2BA8, 0x6FB9, 0x12E8, 0x6FBA, 0x2BA3,
- 0x6FBC, 0x2B97, 0x6FBD, 0x2B9C, 0x6FBF, 0x2BA7, 0x6FC0, 0x12E7,
- 0x6FC1, 0x12E4, 0x6FC2, 0x12DF, 0x6FC3, 0x12E2, 0x6FC4, 0x2B9B,
- 0x6FC6, 0x2931, 0x6FC7, 0x2B96, 0x6FC8, 0x2B99, 0x6FC9, 0x2BAA,
- 0x6FCA, 0x2B9E, 0x6FCB, 0x2B94, 0x6FCC, 0x2D8D, 0x6FCD, 0x2BAC,
- 0x6FCE, 0x2B98, 0x6FCF, 0x2BA6, 0x6FD4, 0x2D90, 0x6FD5, 0x1400,
- 0x6FD8, 0x13F4, 0x6FDB, 0x13F8, 0x6FDC, 0x2D92, 0x6FDD, 0x2D98,
- 0x6FDE, 0x2D96, 0x6FDF, 0x13F6, 0x6FE0, 0x13F7, 0x6FE1, 0x13FE,
- 0x6FE2, 0x2D99, 0x6FE3, 0x2D91, 0x6FE4, 0x13F9, 0x6FE6, 0x2D95,
- 0x6FE7, 0x2D94, 0x6FE8, 0x2D9A, 0x6FE9, 0x13FF, 0x6FEB, 0x13FA,
- 0x6FEC, 0x13FD, 0x6FED, 0x2D93, 0x6FEE, 0x1401, 0x6FEF, 0x13FB,
- 0x6FF0, 0x1402, 0x6FF1, 0x13F5, 0x6FF2, 0x2D97, 0x6FF4, 0x2D8F,
- 0x6FF7, 0x2F4E, 0x6FFA, 0x14EB, 0x6FFB, 0x2F4B, 0x6FFC, 0x2F4D,
- 0x6FFE, 0x14E9, 0x6FFF, 0x2F49, 0x7000, 0x2F4A, 0x7001, 0x2F45,
- 0x7004, 0x2BA0, 0x7005, 0x2F46, 0x7006, 0x14EA, 0x7007, 0x2F42,
- 0x7009, 0x14E7, 0x700A, 0x2F4F, 0x700B, 0x14E8, 0x700C, 0x2F43,
- 0x700D, 0x2F44, 0x700E, 0x2F48, 0x700F, 0x14ED, 0x7011, 0x14EC,
- 0x7014, 0x2F47, 0x7015, 0x158F, 0x7016, 0x30AD, 0x7017, 0x30B3,
- 0x7018, 0x1590, 0x7019, 0x30AA, 0x701A, 0x158D, 0x701B, 0x158A,
- 0x701C, 0x30B5, 0x701D, 0x158E, 0x701F, 0x158B, 0x7020, 0x30AC,
- 0x7021, 0x30AF, 0x7022, 0x30B0, 0x7023, 0x30B1, 0x7024, 0x30B4,
- 0x7026, 0x2F4C, 0x7027, 0x30AB, 0x7028, 0x158C, 0x7029, 0x30B2,
- 0x702A, 0x31EF, 0x702B, 0x30AE, 0x702F, 0x31E6, 0x7030, 0x161D,
- 0x7031, 0x31E9, 0x7032, 0x161E, 0x7033, 0x31F2, 0x7034, 0x31E8,
- 0x7035, 0x31E5, 0x7037, 0x31E7, 0x7038, 0x31EB, 0x7039, 0x31EE,
- 0x703A, 0x31ED, 0x703B, 0x31F1, 0x703C, 0x31E4, 0x703E, 0x161C,
- 0x703F, 0x31EC, 0x7040, 0x31F0, 0x7041, 0x31F3, 0x7042, 0x31EA,
- 0x7043, 0x32D8, 0x7044, 0x32D9, 0x7045, 0x32DD, 0x7046, 0x32DE,
- 0x7048, 0x32DB, 0x7049, 0x32DC, 0x704A, 0x32DA, 0x704C, 0x167A,
- 0x7051, 0x16C8, 0x7052, 0x338C, 0x7055, 0x3389, 0x7056, 0x338A,
- 0x7057, 0x338B, 0x7058, 0x16C9, 0x705A, 0x3423, 0x705B, 0x3422,
- 0x705D, 0x348A, 0x705E, 0x1722, 0x705F, 0x3488, 0x7060, 0x348B,
- 0x7061, 0x3489, 0x7062, 0x34D0, 0x7063, 0x1744, 0x7064, 0x1752,
- 0x7065, 0x351C, 0x7066, 0x3506, 0x7068, 0x351B, 0x7069, 0x3547,
- 0x706A, 0x3548, 0x706B, 0x02E6, 0x7070, 0x03F2, 0x7071, 0x180A,
- 0x7074, 0x18C3, 0x7076, 0x04E6, 0x7078, 0x04E9, 0x707A, 0x18C4,
- 0x707C, 0x04E7, 0x707D, 0x04E8, 0x7082, 0x19F7, 0x7083, 0x19F9,
- 0x7084, 0x19F4, 0x7085, 0x19F1, 0x7086, 0x19F3, 0x708A, 0x0643,
- 0x708E, 0x0641, 0x7091, 0x19F5, 0x7092, 0x0642, 0x7093, 0x19F2,
- 0x7094, 0x19EF, 0x7095, 0x0640, 0x7096, 0x19F6, 0x7098, 0x19F0,
- 0x7099, 0x0644, 0x709A, 0x19F8, 0x709F, 0x1B66, 0x70A1, 0x1B6A,
- 0x70A4, 0x0790, 0x70A9, 0x1B6D, 0x70AB, 0x0788, 0x70AC, 0x078B,
- 0x70AD, 0x078D, 0x70AE, 0x078F, 0x70AF, 0x078C, 0x70B0, 0x1B69,
- 0x70B1, 0x1B68, 0x70B3, 0x078A, 0x70B4, 0x1B6B, 0x70B5, 0x1B6C,
- 0x70B7, 0x1B65, 0x70B8, 0x078E, 0x70BA, 0x0789, 0x70BE, 0x1B67,
- 0x70C5, 0x1D27, 0x70C6, 0x1D28, 0x70C7, 0x1D29, 0x70C8, 0x0921,
- 0x70CA, 0x091D, 0x70CB, 0x1D1E, 0x70CD, 0x1D26, 0x70CE, 0x1D2B,
- 0x70CF, 0x0922, 0x70D1, 0x1D1C, 0x70D2, 0x1D22, 0x70D3, 0x1D1B,
- 0x70D4, 0x1D25, 0x70D7, 0x1D21, 0x70D8, 0x091E, 0x70D9, 0x0920,
- 0x70DA, 0x1D2A, 0x70DC, 0x1D1A, 0x70DD, 0x1D1D, 0x70DE, 0x1D23,
- 0x70E0, 0x1D24, 0x70E1, 0x1D2C, 0x70E2, 0x1D20, 0x70E4, 0x091F,
- 0x70EF, 0x0B16, 0x70F0, 0x1F72, 0x70F3, 0x1F74, 0x70F4, 0x1F70,
- 0x70F6, 0x1F7C, 0x70F7, 0x1F6E, 0x70F8, 0x1F7B, 0x70F9, 0x0B12,
- 0x70FA, 0x1F6C, 0x70FB, 0x21F2, 0x70FC, 0x1F76, 0x70FD, 0x0B15,
- 0x70FF, 0x1F77, 0x7100, 0x1F7A, 0x7102, 0x1F7E, 0x7104, 0x1F73,
- 0x7106, 0x1F78, 0x7109, 0x0B13, 0x710A, 0x0B14, 0x710B, 0x1F7D,
- 0x710C, 0x1F71, 0x710D, 0x1F6D, 0x710E, 0x1F7F, 0x7110, 0x1F75,
- 0x7113, 0x1F79, 0x7117, 0x1F6F, 0x7119, 0x0CC8, 0x711A, 0x0CC9,
- 0x711B, 0x21FC, 0x711C, 0x0CCF, 0x711E, 0x21F0, 0x711F, 0x21F9,
- 0x7120, 0x21EF, 0x7121, 0x0CCC, 0x7122, 0x21F7, 0x7123, 0x21F5,
- 0x7125, 0x21F6, 0x7126, 0x0CCA, 0x7128, 0x21FA, 0x712E, 0x21F3,
- 0x712F, 0x21F1, 0x7130, 0x0CCB, 0x7131, 0x21F4, 0x7132, 0x21F8,
- 0x7136, 0x0CCD, 0x713A, 0x21FB, 0x7141, 0x247B, 0x7142, 0x2482,
- 0x7143, 0x2484, 0x7144, 0x248A, 0x7146, 0x0E72, 0x7147, 0x2476,
- 0x7149, 0x0E6A, 0x714B, 0x2485, 0x714C, 0x0E6F, 0x714D, 0x248B,
- 0x714E, 0x0E66, 0x7150, 0x2488, 0x7152, 0x2478, 0x7153, 0x2489,
- 0x7154, 0x2477, 0x7156, 0x0E74, 0x7158, 0x2483, 0x7159, 0x0E67,
- 0x715A, 0x248C, 0x715C, 0x0E6C, 0x715D, 0x247C, 0x715E, 0x0E71,
- 0x715F, 0x2487, 0x7160, 0x247A, 0x7161, 0x2481, 0x7162, 0x247D,
- 0x7163, 0x2479, 0x7164, 0x0E69, 0x7165, 0x0E70, 0x7166, 0x0E6E,
- 0x7167, 0x0E6B, 0x7168, 0x0E73, 0x7169, 0x0E68, 0x716A, 0x2480,
- 0x716C, 0x0E6D, 0x716E, 0x0CCE, 0x7170, 0x2486, 0x7172, 0x247E,
- 0x7178, 0x247F, 0x717B, 0x271E, 0x717D, 0x1023, 0x7180, 0x271A,
- 0x7181, 0x2720, 0x7182, 0x271C, 0x7184, 0x1025, 0x7185, 0x271B,
- 0x7186, 0x271F, 0x7187, 0x2717, 0x7189, 0x2719, 0x718A, 0x1024,
- 0x718F, 0x271D, 0x7190, 0x2718, 0x7192, 0x1026, 0x7194, 0x1021,
- 0x7197, 0x2721, 0x7199, 0x1022, 0x719A, 0x295A, 0x719B, 0x2957,
- 0x719C, 0x2963, 0x719D, 0x295D, 0x719E, 0x295F, 0x719F, 0x119E,
- 0x71A0, 0x2959, 0x71A1, 0x2961, 0x71A4, 0x2960, 0x71A5, 0x295E,
- 0x71A7, 0x2964, 0x71A8, 0x11A1, 0x71A9, 0x295B, 0x71AA, 0x2962,
- 0x71AC, 0x119F, 0x71AF, 0x2956, 0x71B0, 0x2958, 0x71B1, 0x11A0,
- 0x71B2, 0x2955, 0x71B3, 0x2965, 0x71B5, 0x295C, 0x71B8, 0x2BB3,
- 0x71B9, 0x12F3, 0x71BC, 0x2BBE, 0x71BD, 0x2BBC, 0x71BE, 0x12ED,
- 0x71BF, 0x2BB2, 0x71C0, 0x2BB5, 0x71C1, 0x2BB6, 0x71C2, 0x2BB1,
- 0x71C3, 0x12F7, 0x71C4, 0x12F8, 0x71C5, 0x2BB0, 0x71C6, 0x2BBF,
- 0x71C7, 0x2BBA, 0x71C8, 0x12F1, 0x71C9, 0x12EE, 0x71CA, 0x2BB9,
- 0x71CB, 0x2BB7, 0x71CE, 0x12F4, 0x71CF, 0x2BBB, 0x71D0, 0x12EF,
- 0x71D2, 0x12F0, 0x71D4, 0x2BB8, 0x71D5, 0x12F2, 0x71D6, 0x2BB4,
- 0x71D8, 0x2BBD, 0x71D9, 0x12F5, 0x71DA, 0x2BC0, 0x71DB, 0x2BC1,
- 0x71DC, 0x12F6, 0x71DF, 0x1404, 0x71E0, 0x140B, 0x71E1, 0x2D9B,
- 0x71E2, 0x2DA1, 0x71E4, 0x2D9F, 0x71E5, 0x1407, 0x71E6, 0x1406,
- 0x71E7, 0x1403, 0x71E8, 0x2D9D, 0x71EC, 0x1409, 0x71ED, 0x1408,
- 0x71EE, 0x1405, 0x71F0, 0x2DA0, 0x71F1, 0x2D9C, 0x71F2, 0x2D9E,
- 0x71F4, 0x140A, 0x71F8, 0x14F1, 0x71F9, 0x2F52, 0x71FB, 0x14EE,
- 0x71FC, 0x14EF, 0x71FD, 0x2F54, 0x71FE, 0x14F0, 0x71FF, 0x2F51,
- 0x7201, 0x2F50, 0x7202, 0x30B9, 0x7203, 0x2F53, 0x7205, 0x30BA,
- 0x7206, 0x1591, 0x7207, 0x30B8, 0x720A, 0x30B7, 0x720C, 0x30B6,
- 0x720D, 0x1592, 0x7210, 0x161F, 0x7213, 0x31F4, 0x7214, 0x31F5,
- 0x7219, 0x32E1, 0x721A, 0x32E0, 0x721B, 0x167B, 0x721D, 0x32DF,
- 0x721E, 0x338D, 0x721F, 0x338E, 0x7222, 0x3424, 0x7223, 0x348C,
- 0x7226, 0x34D1, 0x7227, 0x3535, 0x7228, 0x1766, 0x7229, 0x3549,
- 0x722A, 0x02E7, 0x722C, 0x0645, 0x722D, 0x0646, 0x7230, 0x0791,
- 0x7235, 0x140C, 0x7236, 0x02E8, 0x7238, 0x0647, 0x7239, 0x0923,
- 0x723A, 0x0E75, 0x723B, 0x02E9, 0x723D, 0x0B17, 0x723E, 0x1027,
- 0x723F, 0x178D, 0x7241, 0x1B6E, 0x7242, 0x1D2D, 0x7244, 0x2722,
- 0x7246, 0x140D, 0x7247, 0x02EA, 0x7248, 0x0648, 0x7249, 0x1B6F,
- 0x724A, 0x1B70, 0x724B, 0x21FD, 0x724C, 0x0CD0, 0x724F, 0x248D,
- 0x7252, 0x0E76, 0x7253, 0x2723, 0x7256, 0x11A2, 0x7258, 0x1593,
- 0x7259, 0x02EB, 0x725A, 0x21FE, 0x725B, 0x02EC, 0x725D, 0x03F4,
- 0x725E, 0x180B, 0x725F, 0x03F3, 0x7260, 0x04EC, 0x7261, 0x04EB,
- 0x7262, 0x04EA, 0x7263, 0x18C5, 0x7267, 0x0649, 0x7269, 0x064A,
- 0x726A, 0x19FA, 0x726C, 0x1B71, 0x726E, 0x1B74, 0x726F, 0x0793,
- 0x7270, 0x1B72, 0x7272, 0x0792, 0x7273, 0x1B73, 0x7274, 0x0794,
- 0x7276, 0x1D30, 0x7277, 0x1D2F, 0x7278, 0x1D2E, 0x7279, 0x0924,
- 0x727B, 0x1F81, 0x727C, 0x1F82, 0x727D, 0x0B18, 0x727E, 0x1F80,
- 0x727F, 0x1F83, 0x7280, 0x0CD2, 0x7281, 0x0B19, 0x7284, 0x0CD1,
- 0x7285, 0x2202, 0x7286, 0x2201, 0x7288, 0x21FF, 0x7289, 0x2200,
- 0x728B, 0x2203, 0x728C, 0x248F, 0x728D, 0x248E, 0x728E, 0x2492,
- 0x7290, 0x2491, 0x7291, 0x2490, 0x7292, 0x1028, 0x7293, 0x2726,
- 0x7295, 0x2725, 0x7296, 0x1029, 0x7297, 0x2724, 0x7298, 0x2966,
- 0x729A, 0x2967, 0x729B, 0x11A3, 0x729D, 0x2BC2, 0x729E, 0x2BC3,
- 0x72A1, 0x30BF, 0x72A2, 0x1594, 0x72A3, 0x30BE, 0x72A4, 0x30BD,
- 0x72A5, 0x30BB, 0x72A6, 0x30BC, 0x72A7, 0x167C, 0x72A8, 0x31F6,
- 0x72A9, 0x338F, 0x72AA, 0x34D2, 0x72AC, 0x02ED, 0x72AE, 0x17AF,
- 0x72AF, 0x0355, 0x72B0, 0x17B0, 0x72B4, 0x180C, 0x72B5, 0x180D,
- 0x72BA, 0x18CB, 0x72BD, 0x18C7, 0x72BF, 0x18C6, 0x72C0, 0x064B,
- 0x72C1, 0x18CA, 0x72C2, 0x04EE, 0x72C3, 0x18C8, 0x72C4, 0x04ED,
- 0x72C5, 0x18CC, 0x72C6, 0x18C9, 0x72C9, 0x19FE, 0x72CA, 0x1B75,
- 0x72CB, 0x19FC, 0x72CC, 0x1A03, 0x72CE, 0x064C, 0x72D0, 0x064F,
- 0x72D1, 0x1A04, 0x72D2, 0x1A00, 0x72D4, 0x1A01, 0x72D6, 0x19FB,
- 0x72D7, 0x064E, 0x72D8, 0x19FD, 0x72D9, 0x064D, 0x72DA, 0x1A02,
- 0x72DC, 0x19FF, 0x72DF, 0x1B79, 0x72E0, 0x0796, 0x72E1, 0x0797,
- 0x72E3, 0x1B7C, 0x72E4, 0x1B76, 0x72E6, 0x1B7B, 0x72E8, 0x1B77,
- 0x72E9, 0x0795, 0x72EA, 0x1B7A, 0x72EB, 0x1B78, 0x72F3, 0x1D36,
- 0x72F4, 0x1D33, 0x72F6, 0x1D35, 0x72F7, 0x0929, 0x72F8, 0x0928,
- 0x72F9, 0x0926, 0x72FA, 0x1D32, 0x72FB, 0x1D37, 0x72FC, 0x0925,
- 0x72FD, 0x0927, 0x72FE, 0x1D34, 0x72FF, 0x1F8B, 0x7300, 0x1D31,
- 0x7301, 0x1D38, 0x7307, 0x1F86, 0x7308, 0x1F8A, 0x730A, 0x1F89,
- 0x730B, 0x2205, 0x730C, 0x2210, 0x730F, 0x1F8C, 0x7311, 0x1F87,
- 0x7312, 0x2204, 0x7313, 0x0B1D, 0x7316, 0x0B1C, 0x7317, 0x1F85,
- 0x7318, 0x1F88, 0x7319, 0x0B1E, 0x731B, 0x0B1B, 0x731C, 0x0B1A,
- 0x731D, 0x1F84, 0x731E, 0x1F8D, 0x7322, 0x2207, 0x7323, 0x220E,
- 0x7325, 0x0CD4, 0x7326, 0x220D, 0x7327, 0x220A, 0x7329, 0x0CD6,
- 0x732D, 0x220C, 0x7330, 0x2206, 0x7331, 0x2208, 0x7332, 0x220B,
- 0x7333, 0x2209, 0x7334, 0x0CD5, 0x7335, 0x220F, 0x7336, 0x0CD3,
- 0x7337, 0x0E77, 0x733A, 0x2496, 0x733B, 0x2495, 0x733C, 0x2493,
- 0x733E, 0x0E7A, 0x733F, 0x0E79, 0x7340, 0x2497, 0x7342, 0x2494,
- 0x7343, 0x2727, 0x7344, 0x102A, 0x7345, 0x0E78, 0x7349, 0x2499,
- 0x734A, 0x2498, 0x734C, 0x272A, 0x734D, 0x2728, 0x734E, 0x11A4,
- 0x7350, 0x102B, 0x7351, 0x2729, 0x7352, 0x2969, 0x7357, 0x11A5,
- 0x7358, 0x2968, 0x7359, 0x2971, 0x735A, 0x2970, 0x735B, 0x296E,
- 0x735D, 0x296D, 0x735E, 0x296A, 0x735F, 0x296B, 0x7360, 0x296C,
- 0x7361, 0x296F, 0x7362, 0x2972, 0x7365, 0x2BC8, 0x7366, 0x2BC5,
- 0x7367, 0x2BC6, 0x7368, 0x12F9, 0x7369, 0x2BC4, 0x736A, 0x2BCA,
- 0x736B, 0x2BC9, 0x736C, 0x2BC7, 0x736E, 0x2DA3, 0x736F, 0x2DA4,
- 0x7370, 0x140E, 0x7372, 0x140F, 0x7373, 0x2DA2, 0x7375, 0x14F3,
- 0x7376, 0x2F55, 0x7377, 0x14F2, 0x7378, 0x1595, 0x737A, 0x1596,
- 0x737B, 0x1620, 0x737C, 0x31F8, 0x737D, 0x31F7, 0x737E, 0x32E2,
- 0x737F, 0x3390, 0x7380, 0x16CA, 0x7381, 0x3426, 0x7382, 0x3425,
- 0x7383, 0x3427, 0x7384, 0x0356, 0x7385, 0x1B7D, 0x7386, 0x092A,
- 0x7387, 0x0B1F, 0x7388, 0x1F8E, 0x7389, 0x0357, 0x738A, 0x17B1,
- 0x738B, 0x02EE, 0x738E, 0x180E, 0x7392, 0x18D1, 0x7393, 0x18CF,
- 0x7394, 0x18D0, 0x7395, 0x18CD, 0x7396, 0x04EF, 0x7397, 0x18CE,
- 0x739D, 0x1A0C, 0x739F, 0x0652, 0x73A0, 0x1A0A, 0x73A1, 0x1A06,
- 0x73A2, 0x1A09, 0x73A4, 0x1A05, 0x73A5, 0x0654, 0x73A6, 0x1A08,
- 0x73A8, 0x0651, 0x73A9, 0x0650, 0x73AB, 0x0653, 0x73AC, 0x1A0B,
- 0x73AD, 0x1A07, 0x73B2, 0x079B, 0x73B3, 0x079E, 0x73B4, 0x1B85,
- 0x73B5, 0x1B84, 0x73B6, 0x1B83, 0x73B7, 0x0798, 0x73B8, 0x1B8C,
- 0x73B9, 0x1B82, 0x73BB, 0x079A, 0x73BC, 0x1D3D, 0x73BE, 0x1B89,
- 0x73BF, 0x1B87, 0x73C0, 0x079D, 0x73C2, 0x1B7F, 0x73C3, 0x1B8A,
- 0x73C5, 0x1B81, 0x73C6, 0x1B8B, 0x73C7, 0x1B88, 0x73C8, 0x1B80,
- 0x73CA, 0x0799, 0x73CB, 0x1B8D, 0x73CC, 0x1B7E, 0x73CD, 0x079C,
- 0x73D2, 0x1D42, 0x73D3, 0x1D39, 0x73D4, 0x1D44, 0x73D6, 0x1D3C,
- 0x73D7, 0x1D47, 0x73D8, 0x1D48, 0x73D9, 0x1D3A, 0x73DA, 0x1D46,
- 0x73DB, 0x1D43, 0x73DC, 0x1D41, 0x73DD, 0x1D45, 0x73DE, 0x0930,
- 0x73E0, 0x092E, 0x73E3, 0x1D3F, 0x73E5, 0x1D3B, 0x73E7, 0x1D3E,
- 0x73E8, 0x1D49, 0x73E9, 0x1D40, 0x73EA, 0x092F, 0x73EB, 0x1B86,
- 0x73ED, 0x092B, 0x73EE, 0x092D, 0x73F4, 0x1F9C, 0x73F5, 0x1F91,
- 0x73F6, 0x1F8F, 0x73F8, 0x1F90, 0x73FA, 0x1F97, 0x73FC, 0x1F98,
- 0x73FD, 0x1F94, 0x73FE, 0x0B24, 0x73FF, 0x1F99, 0x7400, 0x1F96,
- 0x7401, 0x1F93, 0x7403, 0x0B22, 0x7404, 0x1F92, 0x7405, 0x0B20,
- 0x7406, 0x0B23, 0x7407, 0x1F95, 0x7408, 0x1F9D, 0x7409, 0x092C,
- 0x740A, 0x0B21, 0x740B, 0x1F9B, 0x740C, 0x1F9A, 0x740D, 0x0B25,
- 0x7416, 0x2215, 0x741A, 0x2216, 0x741B, 0x0CE0, 0x741D, 0x221C,
- 0x7420, 0x221E, 0x7421, 0x2217, 0x7422, 0x0CDA, 0x7423, 0x221B,
- 0x7424, 0x221A, 0x7425, 0x0CDB, 0x7426, 0x0CE1, 0x7428, 0x0CE2,
- 0x7429, 0x221D, 0x742A, 0x0CD8, 0x742B, 0x2214, 0x742C, 0x2212,
- 0x742D, 0x2218, 0x742E, 0x2211, 0x742F, 0x0CDF, 0x7430, 0x2213,
- 0x7431, 0x2219, 0x7432, 0x221F, 0x7433, 0x0CD9, 0x7434, 0x0CDE,
- 0x7435, 0x0CDC, 0x7436, 0x0CDD, 0x743A, 0x0CD7, 0x743F, 0x0E81,
- 0x7440, 0x24A0, 0x7441, 0x0E80, 0x7442, 0x24A4, 0x7444, 0x249A,
- 0x7446, 0x24A5, 0x744A, 0x249B, 0x744B, 0x249C, 0x744D, 0x24A6,
- 0x744E, 0x24A3, 0x744F, 0x24A1, 0x7450, 0x24A2, 0x7451, 0x249E,
- 0x7452, 0x249D, 0x7454, 0x24A7, 0x7455, 0x0E7D, 0x7457, 0x249F,
- 0x7459, 0x0E82, 0x745A, 0x0E7C, 0x745B, 0x0E83, 0x745C, 0x0E84,
- 0x745E, 0x0E7F, 0x745F, 0x0E7E, 0x7462, 0x272B, 0x7463, 0x102D,
- 0x7464, 0x102C, 0x7467, 0x2730, 0x7469, 0x11A6, 0x746A, 0x102E,
- 0x746D, 0x1030, 0x746E, 0x2731, 0x746F, 0x0E7B, 0x7470, 0x102F,
- 0x7471, 0x272D, 0x7472, 0x272F, 0x7473, 0x272C, 0x7475, 0x272E,
- 0x7479, 0x297C, 0x747C, 0x297B, 0x747D, 0x2978, 0x747E, 0x11A9,
- 0x747F, 0x2BCB, 0x7480, 0x11AA, 0x7481, 0x2977, 0x7483, 0x11A8,
- 0x7485, 0x2979, 0x7486, 0x2976, 0x7487, 0x2973, 0x7488, 0x297A,
- 0x7489, 0x2974, 0x748A, 0x2975, 0x748B, 0x11A7, 0x7490, 0x2DA8,
- 0x7492, 0x2BCF, 0x7494, 0x2BCE, 0x7495, 0x2BD0, 0x7497, 0x2DA5,
- 0x7498, 0x12FC, 0x749A, 0x2BCC, 0x749C, 0x12FA, 0x749E, 0x12FE,
- 0x749F, 0x12FD, 0x74A0, 0x2BCD, 0x74A1, 0x2BD1, 0x74A3, 0x12FB,
- 0x74A5, 0x2DAC, 0x74A6, 0x1412, 0x74A7, 0x14F4, 0x74A8, 0x1413,
- 0x74A9, 0x1410, 0x74AA, 0x2DA9, 0x74AB, 0x2DA7, 0x74AD, 0x2DAA,
- 0x74AF, 0x2DAD, 0x74B0, 0x1411, 0x74B1, 0x2DAB, 0x74B2, 0x2DA6,
- 0x74B5, 0x2F58, 0x74B6, 0x2F5B, 0x74B7, 0x30C2, 0x74B8, 0x2F56,
- 0x74BA, 0x31F9, 0x74BB, 0x2F5C, 0x74BD, 0x1597, 0x74BE, 0x2F5A,
- 0x74BF, 0x14F5, 0x74C0, 0x2F57, 0x74C1, 0x2F59, 0x74C2, 0x2F5D,
- 0x74C3, 0x30C3, 0x74C5, 0x30C1, 0x74CA, 0x1598, 0x74CB, 0x30C0,
- 0x74CF, 0x1621, 0x74D4, 0x167E, 0x74D5, 0x3392, 0x74D6, 0x167D,
- 0x74D7, 0x3394, 0x74D8, 0x3391, 0x74D9, 0x3393, 0x74DA, 0x16FE,
- 0x74DB, 0x348D, 0x74DC, 0x0358, 0x74DD, 0x1A0D, 0x74DE, 0x1D4A,
- 0x74DF, 0x1D4B, 0x74E0, 0x0B26, 0x74E1, 0x24A8, 0x74E2, 0x12FF,
- 0x74E3, 0x1599, 0x74E4, 0x16CB, 0x74E5, 0x348E, 0x74E6, 0x0359,
- 0x74E8, 0x1A0E, 0x74E9, 0x0120, 0x74EC, 0x1B8E, 0x74EE, 0x1B8F,
- 0x74F4, 0x1D4C, 0x74F5, 0x1D4D, 0x74F6, 0x0B27, 0x74F7, 0x0B28,
- 0x74FB, 0x2220, 0x74FD, 0x24AB, 0x74FE, 0x24AA, 0x74FF, 0x24A9,
- 0x7500, 0x2732, 0x7502, 0x2733, 0x7503, 0x2734, 0x7504, 0x1031,
- 0x7507, 0x297E, 0x7508, 0x297D, 0x750B, 0x2BD2, 0x750C, 0x1300,
- 0x750D, 0x1301, 0x750F, 0x2DB1, 0x7510, 0x2DAE, 0x7511, 0x2DAF,
- 0x7512, 0x2DB0, 0x7513, 0x2F5F, 0x7514, 0x2F5E, 0x7515, 0x14F6,
- 0x7516, 0x30C4, 0x7517, 0x32E3, 0x7518, 0x035A, 0x751A, 0x079F,
- 0x751C, 0x0B29, 0x751D, 0x24AC, 0x751F, 0x035B, 0x7521, 0x1D4E,
- 0x7522, 0x0B2A, 0x7525, 0x0CE3, 0x7526, 0x0CE4, 0x7528, 0x035C,
- 0x7529, 0x035D, 0x752A, 0x180F, 0x752B, 0x04F1, 0x752C, 0x04F0,
- 0x752D, 0x07A0, 0x752E, 0x1B90, 0x752F, 0x2221, 0x7530, 0x035E,
- 0x7531, 0x035F, 0x7532, 0x0360, 0x7533, 0x0361, 0x7537, 0x04F2,
- 0x7538, 0x04F3, 0x7539, 0x18D3, 0x753A, 0x18D2, 0x753D, 0x0655,
- 0x753E, 0x1A11, 0x753F, 0x1A0F, 0x7540, 0x1A10, 0x7547, 0x1B91,
- 0x7548, 0x1B92, 0x754B, 0x07A4, 0x754C, 0x07A2, 0x754E, 0x07A3,
- 0x754F, 0x07A1, 0x7554, 0x0931, 0x7559, 0x0935, 0x755A, 0x0934,
- 0x755B, 0x1D4F, 0x755C, 0x0933, 0x755D, 0x0932, 0x755F, 0x1D50,
- 0x7562, 0x0B2D, 0x7563, 0x1F9F, 0x7564, 0x1F9E, 0x7565, 0x0B2B,
- 0x7566, 0x0B2C, 0x756A, 0x0CE6, 0x756B, 0x0CE5, 0x756C, 0x2223,
- 0x756F, 0x2222, 0x7570, 0x0B2E, 0x7576, 0x0E85, 0x7577, 0x24AE,
- 0x7578, 0x0E86, 0x7579, 0x24AD, 0x757D, 0x2735, 0x757E, 0x297F,
- 0x757F, 0x11AB, 0x7580, 0x2BD3, 0x7584, 0x2DB2, 0x7586, 0x159B,
- 0x7587, 0x159A, 0x758A, 0x16CC, 0x758B, 0x0362, 0x758C, 0x1A12,
- 0x758F, 0x0B2F, 0x7590, 0x2736, 0x7591, 0x1032, 0x7592, 0x022E,
- 0x7594, 0x18D4, 0x7595, 0x18D5, 0x7598, 0x1A13, 0x7599, 0x0657,
- 0x759A, 0x0658, 0x759D, 0x0656, 0x75A2, 0x07A8, 0x75A3, 0x07A9,
- 0x75A4, 0x07A6, 0x75A5, 0x07A7, 0x75A7, 0x1B93, 0x75AA, 0x1B94,
- 0x75AB, 0x07A5, 0x75B0, 0x1D51, 0x75B2, 0x0939, 0x75B3, 0x093A,
- 0x75B5, 0x0B32, 0x75B6, 0x1D57, 0x75B8, 0x093F, 0x75B9, 0x093D,
- 0x75BA, 0x1D58, 0x75BB, 0x1D53, 0x75BC, 0x093C, 0x75BD, 0x093B,
- 0x75BE, 0x0936, 0x75BF, 0x1D56, 0x75C0, 0x1D55, 0x75C1, 0x1D52,
- 0x75C2, 0x093E, 0x75C4, 0x1D54, 0x75C5, 0x0937, 0x75C7, 0x0938,
- 0x75CA, 0x0B33, 0x75CB, 0x1FA3, 0x75CC, 0x1FA4, 0x75CD, 0x0B34,
- 0x75CE, 0x1FA0, 0x75CF, 0x1FA2, 0x75D0, 0x1FA6, 0x75D1, 0x1FA5,
- 0x75D2, 0x1FA1, 0x75D4, 0x0B30, 0x75D5, 0x0B31, 0x75D7, 0x222B,
- 0x75D8, 0x0CEB, 0x75D9, 0x0CEA, 0x75DA, 0x2225, 0x75DB, 0x0CE8,
- 0x75DD, 0x2228, 0x75DE, 0x0CEC, 0x75DF, 0x2229, 0x75E0, 0x0CED,
- 0x75E1, 0x2226, 0x75E2, 0x0CE7, 0x75E3, 0x0CE9, 0x75E4, 0x222A,
- 0x75E6, 0x2227, 0x75E7, 0x2224, 0x75ED, 0x24BB, 0x75EF, 0x24B0,
- 0x75F0, 0x0E88, 0x75F1, 0x0E8B, 0x75F2, 0x0E8A, 0x75F3, 0x0E8F,
- 0x75F4, 0x0E8E, 0x75F5, 0x24BC, 0x75F6, 0x24BA, 0x75F7, 0x24B3,
- 0x75F8, 0x24B7, 0x75F9, 0x24B6, 0x75FA, 0x0E8C, 0x75FB, 0x24B9,
- 0x75FC, 0x24B5, 0x75FD, 0x24BD, 0x75FE, 0x24B4, 0x75FF, 0x0E8D,
- 0x7600, 0x0E87, 0x7601, 0x0E89, 0x7603, 0x24B2, 0x7608, 0x2738,
- 0x7609, 0x1036, 0x760A, 0x273C, 0x760B, 0x1035, 0x760C, 0x2739,
- 0x760D, 0x1034, 0x760F, 0x24B1, 0x7610, 0x24B8, 0x7611, 0x273B,
- 0x7613, 0x1037, 0x7614, 0x273D, 0x7615, 0x273A, 0x7616, 0x2737,
- 0x7619, 0x2982, 0x761A, 0x2986, 0x761B, 0x2988, 0x761C, 0x2984,
- 0x761D, 0x2983, 0x761E, 0x2981, 0x761F, 0x11AE, 0x7620, 0x11AC,
- 0x7621, 0x11B1, 0x7622, 0x11B2, 0x7623, 0x2985, 0x7624, 0x11AF,
- 0x7625, 0x2980, 0x7626, 0x11B0, 0x7627, 0x1033, 0x7628, 0x2987,
- 0x7629, 0x11AD, 0x762D, 0x2BD5, 0x762F, 0x2BD4, 0x7630, 0x2BDC,
- 0x7631, 0x2BD6, 0x7632, 0x2BDB, 0x7633, 0x2BD8, 0x7634, 0x1302,
- 0x7635, 0x2BDA, 0x7638, 0x1303, 0x763A, 0x1304, 0x763C, 0x2BD9,
- 0x763D, 0x2BD7, 0x7642, 0x1415, 0x7643, 0x2DB3, 0x7646, 0x1414,
- 0x7647, 0x2DB6, 0x7648, 0x2DB4, 0x7649, 0x2DB5, 0x764C, 0x1416,
- 0x7650, 0x2F63, 0x7652, 0x14F9, 0x7653, 0x2F64, 0x7656, 0x14F7,
- 0x7657, 0x2F65, 0x7658, 0x14F8, 0x7659, 0x2F62, 0x765A, 0x2F66,
- 0x765C, 0x2F60, 0x765F, 0x159C, 0x7660, 0x30C5, 0x7661, 0x159D,
- 0x7662, 0x1622, 0x7664, 0x2F61, 0x7665, 0x1623, 0x7669, 0x167F,
- 0x766A, 0x32E4, 0x766C, 0x16CE, 0x766D, 0x3395, 0x766E, 0x16CD,
- 0x7670, 0x3428, 0x7671, 0x1723, 0x7672, 0x1724, 0x7675, 0x3543,
- 0x7676, 0x022F, 0x7678, 0x07AA, 0x7679, 0x1B95, 0x767B, 0x0CEE,
- 0x767C, 0x0CEF, 0x767D, 0x0363, 0x767E, 0x03F5, 0x767F, 0x1810,
- 0x7681, 0x18D6, 0x7682, 0x04F4, 0x7684, 0x0659, 0x7686, 0x07AB,
- 0x7687, 0x07AC, 0x7688, 0x07AD, 0x7689, 0x1FA8, 0x768A, 0x1D59,
- 0x768B, 0x0940, 0x768E, 0x0B35, 0x768F, 0x1FA7, 0x7692, 0x222D,
- 0x7693, 0x0CF1, 0x7695, 0x222C, 0x7696, 0x0CF0, 0x7699, 0x24BE,
- 0x769A, 0x11B3, 0x769B, 0x298C, 0x769C, 0x2989, 0x769D, 0x298A,
- 0x769E, 0x298B, 0x76A4, 0x2DB7, 0x76A6, 0x2F67, 0x76AA, 0x31FB,
- 0x76AB, 0x31FA, 0x76AD, 0x3396, 0x76AE, 0x0364, 0x76AF, 0x1A14,
- 0x76B0, 0x0941, 0x76B4, 0x0CF2, 0x76B5, 0x24BF, 0x76B8, 0x273E,
- 0x76BA, 0x11B4, 0x76BB, 0x2BDD, 0x76BD, 0x2F68, 0x76BE, 0x31FC,
- 0x76BF, 0x0365, 0x76C2, 0x065A, 0x76C3, 0x07B0, 0x76C4, 0x1B96,
- 0x76C5, 0x07B1, 0x76C6, 0x07AF, 0x76C8, 0x07AE, 0x76C9, 0x1D5A,
- 0x76CA, 0x0942, 0x76CD, 0x0943, 0x76CE, 0x0944, 0x76D2, 0x0B37,
- 0x76D3, 0x1FA9, 0x76D4, 0x0B36, 0x76DA, 0x222E, 0x76DB, 0x0B38,
- 0x76DC, 0x0CF3, 0x76DD, 0x24C0, 0x76DE, 0x0E90, 0x76DF, 0x0E91,
- 0x76E1, 0x1038, 0x76E3, 0x1039, 0x76E4, 0x11B5, 0x76E5, 0x1306,
- 0x76E6, 0x2BDE, 0x76E7, 0x1305, 0x76E9, 0x2DB8, 0x76EA, 0x1417,
- 0x76EC, 0x2F69, 0x76ED, 0x31FD, 0x76EE, 0x0366, 0x76EF, 0x04F5,
- 0x76F0, 0x1A17, 0x76F1, 0x1A16, 0x76F2, 0x065B, 0x76F3, 0x1A15,
- 0x76F4, 0x065C, 0x76F5, 0x1A18, 0x76F7, 0x1B9C, 0x76F8, 0x07B4,
- 0x76F9, 0x07B3, 0x76FA, 0x1B9E, 0x76FB, 0x1B9D, 0x76FC, 0x07B8,
- 0x76FE, 0x07B7, 0x7701, 0x07B2, 0x7703, 0x1B98, 0x7704, 0x1B99,
- 0x7705, 0x1B9A, 0x7707, 0x07B9, 0x7708, 0x1B97, 0x7709, 0x07B5,
- 0x770A, 0x1B9B, 0x770B, 0x07B6, 0x7710, 0x1D5D, 0x7711, 0x1D61,
- 0x7712, 0x1D5F, 0x7713, 0x1D5E, 0x7715, 0x1D62, 0x7719, 0x1D63,
- 0x771A, 0x1D64, 0x771B, 0x1D5C, 0x771D, 0x1D5B, 0x771F, 0x0946,
- 0x7720, 0x0947, 0x7722, 0x1D65, 0x7723, 0x1D60, 0x7725, 0x1FB2,
- 0x7727, 0x1D66, 0x7728, 0x0948, 0x7729, 0x0945, 0x772D, 0x1FAC,
- 0x772F, 0x1FAB, 0x7731, 0x1FAD, 0x7732, 0x1FAE, 0x7733, 0x1FB0,
- 0x7734, 0x1FAF, 0x7735, 0x1FB4, 0x7736, 0x0B3C, 0x7737, 0x0B39,
- 0x7738, 0x0B3D, 0x7739, 0x1FAA, 0x773A, 0x0B3E, 0x773B, 0x1FB3,
- 0x773C, 0x0B3B, 0x773D, 0x1FB1, 0x773E, 0x0B3A, 0x7744, 0x2231,
- 0x7745, 0x2233, 0x7746, 0x222F, 0x7747, 0x2230, 0x774A, 0x2234,
- 0x774B, 0x2236, 0x774C, 0x2237, 0x774D, 0x2232, 0x774E, 0x2235,
- 0x774F, 0x0CF4, 0x7752, 0x24C4, 0x7754, 0x24C9, 0x7755, 0x24C1,
- 0x7756, 0x24C5, 0x7759, 0x24CA, 0x775A, 0x24C6, 0x775B, 0x0E92,
- 0x775C, 0x0E9A, 0x775E, 0x0E95, 0x775F, 0x24C2, 0x7760, 0x24C3,
- 0x7761, 0x103D, 0x7762, 0x0E9D, 0x7763, 0x0E96, 0x7765, 0x0E9B,
- 0x7766, 0x0E94, 0x7767, 0x24C8, 0x7768, 0x0E9C, 0x7769, 0x24C7,
- 0x776A, 0x0E98, 0x776B, 0x0E93, 0x776C, 0x0E99, 0x776D, 0x24CB,
- 0x776E, 0x2743, 0x776F, 0x2745, 0x7779, 0x0E97, 0x777C, 0x2740,
- 0x777D, 0x103B, 0x777E, 0x2746, 0x777F, 0x103C, 0x7780, 0x2744,
- 0x7781, 0x273F, 0x7782, 0x2742, 0x7783, 0x2747, 0x7784, 0x103A,
- 0x7785, 0x2741, 0x7787, 0x11B7, 0x7788, 0x2990, 0x7789, 0x298F,
- 0x778B, 0x11BA, 0x778C, 0x11B8, 0x778D, 0x298D, 0x778E, 0x11B6,
- 0x778F, 0x298E, 0x7791, 0x11B9, 0x7795, 0x2BE6, 0x7797, 0x2BE8,
- 0x7799, 0x2BE7, 0x779A, 0x2BDF, 0x779B, 0x2BE3, 0x779C, 0x2BE2,
- 0x779D, 0x2BE0, 0x779E, 0x1308, 0x779F, 0x1309, 0x77A0, 0x1307,
- 0x77A1, 0x2BE1, 0x77A2, 0x2BE4, 0x77A3, 0x2BE5, 0x77A5, 0x130A,
- 0x77A7, 0x141C, 0x77A8, 0x2DC0, 0x77AA, 0x1419, 0x77AB, 0x2DBA,
- 0x77AC, 0x141B, 0x77AD, 0x141D, 0x77B0, 0x141A, 0x77B1, 0x2DBF,
- 0x77B2, 0x2DBB, 0x77B3, 0x1418, 0x77B4, 0x2DBE, 0x77B5, 0x2DB9,
- 0x77B6, 0x2DBD, 0x77B7, 0x2DBC, 0x77BA, 0x2F6B, 0x77BB, 0x14FC,
- 0x77BC, 0x14FD, 0x77BD, 0x14FA, 0x77BF, 0x14FB, 0x77C2, 0x2F6A,
- 0x77C4, 0x30C8, 0x77C7, 0x159E, 0x77C9, 0x30C6, 0x77CA, 0x30C7,
- 0x77CC, 0x31FE, 0x77CD, 0x3201, 0x77CE, 0x31FF, 0x77CF, 0x3200,
- 0x77D0, 0x32E5, 0x77D3, 0x1680, 0x77D4, 0x3429, 0x77D5, 0x348F,
- 0x77D7, 0x1725, 0x77D8, 0x34D3, 0x77D9, 0x34D4, 0x77DA, 0x1753,
- 0x77DB, 0x0367, 0x77DC, 0x07BA, 0x77DE, 0x2238, 0x77E0, 0x24CC,
- 0x77E2, 0x0368, 0x77E3, 0x04F6, 0x77E5, 0x065D, 0x77E7, 0x1B9F,
- 0x77E8, 0x1BA0, 0x77E9, 0x0949, 0x77EC, 0x2239, 0x77ED, 0x0CF5,
- 0x77EE, 0x0E9E, 0x77EF, 0x141E, 0x77F0, 0x2DC1, 0x77F1, 0x30C9,
- 0x77F2, 0x3202, 0x77F3, 0x0369, 0x77F7, 0x1A1E, 0x77F8, 0x1A19,
- 0x77F9, 0x1A1B, 0x77FA, 0x1A1D, 0x77FB, 0x1A1C, 0x77FC, 0x1A1A,
- 0x77FD, 0x065E, 0x7802, 0x07BB, 0x7803, 0x1BA9, 0x7805, 0x1BA4,
- 0x7806, 0x1BA1, 0x7809, 0x1BA8, 0x780C, 0x07BD, 0x780D, 0x07BE,
- 0x780E, 0x1BA7, 0x780F, 0x1BA6, 0x7810, 0x1BA5, 0x7811, 0x1BA2,
- 0x7812, 0x1BA3, 0x7813, 0x1BAA, 0x7814, 0x07BC, 0x781D, 0x094D,
- 0x781F, 0x0953, 0x7820, 0x0952, 0x7821, 0x1D6F, 0x7822, 0x1D69,
- 0x7823, 0x1D67, 0x7825, 0x0950, 0x7826, 0x1FBB, 0x7827, 0x094B,
- 0x7828, 0x1D6C, 0x7829, 0x1D70, 0x782A, 0x1D72, 0x782B, 0x1D6E,
- 0x782C, 0x1D68, 0x782D, 0x0951, 0x782E, 0x1D6D, 0x782F, 0x1D6B,
- 0x7830, 0x094A, 0x7831, 0x1D73, 0x7832, 0x0954, 0x7833, 0x1D71,
- 0x7834, 0x094E, 0x7835, 0x1D6A, 0x7837, 0x094F, 0x7838, 0x094C,
- 0x7843, 0x0B40, 0x7845, 0x1FBC, 0x7848, 0x1FB5, 0x7849, 0x1FB7,
- 0x784A, 0x1FB9, 0x784C, 0x1FBA, 0x784D, 0x1FB8, 0x784E, 0x0B41,
- 0x7850, 0x1FBD, 0x7852, 0x1FB6, 0x785C, 0x223D, 0x785D, 0x0CF6,
- 0x785E, 0x2245, 0x7860, 0x223A, 0x7862, 0x2246, 0x7864, 0x223B,
- 0x7865, 0x223C, 0x7868, 0x2244, 0x7869, 0x2243, 0x786A, 0x2240,
- 0x786B, 0x0B3F, 0x786C, 0x0CF7, 0x786D, 0x223E, 0x786E, 0x2241,
- 0x786F, 0x0CF8, 0x7870, 0x2242, 0x7871, 0x223F, 0x7879, 0x24D7,
- 0x787B, 0x24DB, 0x787C, 0x0EA5, 0x787E, 0x274D, 0x787F, 0x0EA8,
- 0x7880, 0x24D9, 0x7881, 0x36E8, 0x7883, 0x24D6, 0x7884, 0x24D1,
- 0x7885, 0x24D3, 0x7886, 0x24D4, 0x7887, 0x24CD, 0x7889, 0x0EA4,
- 0x788C, 0x0EA3, 0x788E, 0x0E9F, 0x788F, 0x24D0, 0x7891, 0x0EA6,
- 0x7893, 0x0EA7, 0x7894, 0x24CF, 0x7895, 0x24D2, 0x7896, 0x24DA,
- 0x7897, 0x0EA1, 0x7898, 0x0EA2, 0x7899, 0x24D8, 0x789A, 0x24CE,
- 0x789E, 0x274F, 0x789F, 0x103F, 0x78A0, 0x2751, 0x78A1, 0x24D5,
- 0x78A2, 0x2753, 0x78A3, 0x1043, 0x78A4, 0x2754, 0x78A5, 0x2750,
- 0x78A7, 0x1040, 0x78A8, 0x274C, 0x78A9, 0x1042, 0x78AA, 0x2749,
- 0x78AB, 0x274E, 0x78AC, 0x2752, 0x78AD, 0x274B, 0x78B0, 0x0EA0,
- 0x78B2, 0x2748, 0x78B3, 0x1041, 0x78B4, 0x274A, 0x78BA, 0x11BD,
- 0x78BB, 0x2992, 0x78BC, 0x11C1, 0x78BE, 0x11BF, 0x78C1, 0x103E,
- 0x78C3, 0x2999, 0x78C4, 0x299A, 0x78C5, 0x11BC, 0x78C8, 0x2998,
- 0x78C9, 0x299B, 0x78CA, 0x11BE, 0x78CB, 0x11BB, 0x78CC, 0x2994,
- 0x78CD, 0x2991, 0x78CE, 0x2996, 0x78CF, 0x2993, 0x78D0, 0x11C2,
- 0x78D1, 0x2995, 0x78D4, 0x2997, 0x78D5, 0x11C0, 0x78DA, 0x130C,
- 0x78DB, 0x2BEF, 0x78DD, 0x2BE9, 0x78DE, 0x2BED, 0x78DF, 0x2BF3,
- 0x78E0, 0x2BF4, 0x78E1, 0x2BF0, 0x78E2, 0x2BF1, 0x78E3, 0x2BEE,
- 0x78E5, 0x2BEB, 0x78E7, 0x130E, 0x78E8, 0x130B, 0x78E9, 0x2BEA,
- 0x78EA, 0x2BEC, 0x78EC, 0x130D, 0x78ED, 0x2BF2, 0x78EF, 0x1422,
- 0x78F2, 0x2DC8, 0x78F3, 0x2DC2, 0x78F4, 0x1421, 0x78F7, 0x141F,
- 0x78F9, 0x2DCA, 0x78FA, 0x1420, 0x78FB, 0x2DC5, 0x78FC, 0x2DC6,
- 0x78FD, 0x2DC3, 0x78FE, 0x2DCB, 0x78FF, 0x2DC7, 0x7901, 0x1423,
- 0x7902, 0x2DC4, 0x7904, 0x2DCC, 0x7905, 0x2DC9, 0x7909, 0x2F6F,
- 0x790C, 0x2F6C, 0x790E, 0x14FE, 0x7910, 0x2F70, 0x7911, 0x2F72,
- 0x7912, 0x2F71, 0x7913, 0x2F6D, 0x7914, 0x2F6E, 0x7917, 0x30CE,
- 0x7919, 0x159F, 0x791B, 0x30CB, 0x791C, 0x30CD, 0x791D, 0x30CA,
- 0x791E, 0x30CF, 0x7921, 0x30CC, 0x7923, 0x3204, 0x7924, 0x3207,
- 0x7925, 0x3203, 0x7926, 0x1624, 0x7927, 0x3205, 0x7928, 0x3206,
- 0x7929, 0x3208, 0x792A, 0x1625, 0x792B, 0x1627, 0x792C, 0x1626,
- 0x792D, 0x32E6, 0x792F, 0x32E8, 0x7931, 0x32E7, 0x7935, 0x3397,
- 0x7938, 0x3490, 0x7939, 0x34D5, 0x793A, 0x036A, 0x793D, 0x18D7,
- 0x793E, 0x065F, 0x793F, 0x1A20, 0x7940, 0x0660, 0x7941, 0x0661,
- 0x7942, 0x1A1F, 0x7944, 0x1BAF, 0x7945, 0x1BAE, 0x7946, 0x07BF,
- 0x7947, 0x07C2, 0x7948, 0x07C1, 0x7949, 0x07C0, 0x794A, 0x1BAB,
- 0x794B, 0x1BAD, 0x794C, 0x1BAC, 0x794F, 0x1D76, 0x7950, 0x0956,
- 0x7951, 0x1D7A, 0x7952, 0x1D79, 0x7953, 0x1D78, 0x7954, 0x1D74,
- 0x7955, 0x0955, 0x7956, 0x0959, 0x7957, 0x095C, 0x795A, 0x095D,
- 0x795B, 0x1D75, 0x795C, 0x1D77, 0x795D, 0x095B, 0x795E, 0x095A,
- 0x795F, 0x0958, 0x7960, 0x0957, 0x7961, 0x1FC4, 0x7963, 0x1FC2,
- 0x7964, 0x1FBE, 0x7965, 0x0B42, 0x7967, 0x1FBF, 0x7968, 0x0B43,
- 0x7969, 0x1FC0, 0x796A, 0x1FC1, 0x796B, 0x1FC3, 0x796D, 0x0B44,
- 0x7970, 0x224A, 0x7972, 0x2249, 0x7973, 0x2248, 0x7974, 0x2247,
- 0x7979, 0x24DF, 0x797A, 0x0EA9, 0x797C, 0x24DC, 0x797D, 0x24DE,
- 0x797F, 0x0EAA, 0x7981, 0x0EAB, 0x7982, 0x24DD, 0x7988, 0x275D,
- 0x798A, 0x2756, 0x798B, 0x2757, 0x798D, 0x1046, 0x798E, 0x1044,
- 0x798F, 0x1045, 0x7990, 0x275F, 0x7992, 0x275E, 0x7993, 0x275B,
- 0x7994, 0x275A, 0x7995, 0x2759, 0x7996, 0x2758, 0x7997, 0x275C,
- 0x7998, 0x2755, 0x799A, 0x299C, 0x799B, 0x29A1, 0x799C, 0x299F,
- 0x79A0, 0x299E, 0x79A1, 0x299D, 0x79A2, 0x29A0, 0x79A4, 0x2BF5,
- 0x79A6, 0x130F, 0x79A7, 0x1424, 0x79A8, 0x2DCE, 0x79AA, 0x1425,
- 0x79AB, 0x2DCD, 0x79AC, 0x2F74, 0x79AD, 0x2F73, 0x79AE, 0x14FF,
- 0x79B0, 0x30D0, 0x79B1, 0x15A0, 0x79B2, 0x3209, 0x79B3, 0x16CF,
- 0x79B4, 0x3398, 0x79B6, 0x3492, 0x79B7, 0x3491, 0x79B8, 0x17B2,
- 0x79B9, 0x07C3, 0x79BA, 0x07C4, 0x79BB, 0x1FC5, 0x79BD, 0x0EAD,
- 0x79BE, 0x036B, 0x79BF, 0x04F9, 0x79C0, 0x04F8, 0x79C1, 0x04F7,
- 0x79C5, 0x1A21, 0x79C8, 0x0663, 0x79C9, 0x0662, 0x79CB, 0x07C7,
- 0x79CD, 0x1BB1, 0x79CE, 0x1BB4, 0x79CF, 0x1BB2, 0x79D1, 0x07C5,
- 0x79D2, 0x07C6, 0x79D5, 0x1BB0, 0x79D6, 0x1BB3, 0x79D8, 0x0964,
- 0x79DC, 0x1D81, 0x79DD, 0x1D83, 0x79DE, 0x1D82, 0x79DF, 0x0961,
- 0x79E0, 0x1D7D, 0x79E3, 0x095F, 0x79E4, 0x095E, 0x79E6, 0x0962,
- 0x79E7, 0x0960, 0x79E9, 0x0963, 0x79EA, 0x1D80, 0x79EB, 0x1D7B,
- 0x79EC, 0x1D7C, 0x79ED, 0x1D7F, 0x79EE, 0x1D7E, 0x79F6, 0x1FC8,
- 0x79F7, 0x1FC9, 0x79F8, 0x1FC7, 0x79FA, 0x1FC6, 0x79FB, 0x0B45,
- 0x7A00, 0x0CFD, 0x7A02, 0x224B, 0x7A03, 0x224D, 0x7A04, 0x224F,
- 0x7A05, 0x0CFC, 0x7A08, 0x0CFA, 0x7A0A, 0x224C, 0x7A0B, 0x0CFB,
- 0x7A0C, 0x224E, 0x7A0D, 0x0CF9, 0x7A10, 0x24E9, 0x7A11, 0x24E0,
- 0x7A12, 0x24E3, 0x7A13, 0x24E7, 0x7A14, 0x0EB1, 0x7A15, 0x24E5,
- 0x7A17, 0x24E4, 0x7A18, 0x24E1, 0x7A19, 0x24E2, 0x7A1A, 0x0EAF,
- 0x7A1B, 0x24E8, 0x7A1C, 0x0EAE, 0x7A1E, 0x0EB3, 0x7A1F, 0x0EB2,
- 0x7A20, 0x0EB0, 0x7A22, 0x24E6, 0x7A26, 0x2765, 0x7A28, 0x2764,
- 0x7A2B, 0x2760, 0x7A2E, 0x1047, 0x7A2F, 0x2763, 0x7A30, 0x2762,
- 0x7A31, 0x1048, 0x7A37, 0x11C7, 0x7A39, 0x29A3, 0x7A3B, 0x11C8,
- 0x7A3C, 0x11C4, 0x7A3D, 0x11C6, 0x7A3F, 0x11C3, 0x7A40, 0x11C5,
- 0x7A44, 0x2BF6, 0x7A46, 0x1312, 0x7A47, 0x2BF8, 0x7A48, 0x2BF7,
- 0x7A4A, 0x2761, 0x7A4B, 0x1314, 0x7A4C, 0x1313, 0x7A4D, 0x1310,
- 0x7A4E, 0x1311, 0x7A54, 0x2DD3, 0x7A56, 0x2DD1, 0x7A57, 0x1426,
- 0x7A58, 0x2DD2, 0x7A5A, 0x2DD4, 0x7A5B, 0x2DD0, 0x7A5C, 0x2DCF,
- 0x7A5F, 0x2F75, 0x7A60, 0x1502, 0x7A61, 0x1500, 0x7A62, 0x1501,
- 0x7A67, 0x30D1, 0x7A68, 0x30D2, 0x7A69, 0x15A2, 0x7A6B, 0x15A1,
- 0x7A6C, 0x320B, 0x7A6D, 0x320C, 0x7A6E, 0x320A, 0x7A70, 0x3399,
- 0x7A71, 0x339A, 0x7A74, 0x036C, 0x7A75, 0x1811, 0x7A76, 0x04FA,
- 0x7A78, 0x1A22, 0x7A79, 0x0665, 0x7A7A, 0x0664, 0x7A7B, 0x1A23,
- 0x7A7E, 0x1BB6, 0x7A7F, 0x07C8, 0x7A80, 0x1BB5, 0x7A81, 0x07C9,
- 0x7A84, 0x0965, 0x7A85, 0x1D86, 0x7A86, 0x1D84, 0x7A87, 0x1D8A,
- 0x7A88, 0x0966, 0x7A89, 0x1D85, 0x7A8A, 0x1D89, 0x7A8B, 0x1D87,
- 0x7A8C, 0x1D88, 0x7A8F, 0x1FCA, 0x7A90, 0x1FCC, 0x7A92, 0x0B46,
- 0x7A94, 0x1FCB, 0x7A95, 0x0B47, 0x7A96, 0x0D00, 0x7A97, 0x0CFF,
- 0x7A98, 0x0CFE, 0x7A99, 0x2250, 0x7A9E, 0x24EC, 0x7A9F, 0x0EB4,
- 0x7AA0, 0x0EB5, 0x7AA2, 0x24EB, 0x7AA3, 0x24EA, 0x7AA8, 0x2766,
- 0x7AA9, 0x104A, 0x7AAA, 0x1049, 0x7AAB, 0x2767, 0x7AAC, 0x2768,
- 0x7AAE, 0x11CA, 0x7AAF, 0x11C9, 0x7AB1, 0x2BFC, 0x7AB2, 0x29A4,
- 0x7AB3, 0x29A6, 0x7AB4, 0x29A5, 0x7AB5, 0x2BFB, 0x7AB6, 0x2BF9,
- 0x7AB7, 0x2BFD, 0x7AB8, 0x2BFA, 0x7ABA, 0x1315, 0x7ABE, 0x2DD5,
- 0x7ABF, 0x1427, 0x7AC0, 0x2DD6, 0x7AC1, 0x2DD7, 0x7AC4, 0x1503,
- 0x7AC5, 0x1504, 0x7AC7, 0x1628, 0x7ACA, 0x16FF, 0x7ACB, 0x036D,
- 0x7AD1, 0x1BB7, 0x7AD8, 0x1D8B, 0x7AD9, 0x0967, 0x7ADF, 0x0BDE,
- 0x7AE0, 0x0BDD, 0x7AE3, 0x0D02, 0x7AE4, 0x2252, 0x7AE5, 0x0D01,
- 0x7AE6, 0x2251, 0x7AEB, 0x24ED, 0x7AED, 0x104B, 0x7AEE, 0x2769,
- 0x7AEF, 0x104C, 0x7AF6, 0x1629, 0x7AF7, 0x320D, 0x7AF9, 0x03F6,
- 0x7AFA, 0x0666, 0x7AFB, 0x1A24, 0x7AFD, 0x07CB, 0x7AFF, 0x07CA,
- 0x7B00, 0x1BB8, 0x7B01, 0x1BB9, 0x7B04, 0x1D8D, 0x7B05, 0x1D8F,
- 0x7B06, 0x0968, 0x7B08, 0x1D91, 0x7B09, 0x1D94, 0x7B0A, 0x1D92,
- 0x7B0E, 0x1D93, 0x7B0F, 0x1D90, 0x7B10, 0x1D8C, 0x7B11, 0x0969,
- 0x7B12, 0x1D95, 0x7B13, 0x1D8E, 0x7B18, 0x1FD5, 0x7B19, 0x0B4D,
- 0x7B1A, 0x1FDE, 0x7B1B, 0x0B4A, 0x7B1D, 0x1FD7, 0x7B1E, 0x0B4E,
- 0x7B20, 0x0B48, 0x7B22, 0x1FD2, 0x7B23, 0x1FDF, 0x7B24, 0x1FD3,
- 0x7B25, 0x1FD0, 0x7B26, 0x0B4C, 0x7B28, 0x0B49, 0x7B2A, 0x1FD6,
- 0x7B2B, 0x1FD9, 0x7B2C, 0x0B4B, 0x7B2D, 0x1FDA, 0x7B2E, 0x0B4F,
- 0x7B2F, 0x1FDB, 0x7B30, 0x1FD1, 0x7B31, 0x1FD8, 0x7B32, 0x1FDC,
- 0x7B33, 0x1FD4, 0x7B34, 0x1FCF, 0x7B35, 0x1FCD, 0x7B38, 0x1FDD,
- 0x7B3B, 0x1FCE, 0x7B40, 0x2259, 0x7B44, 0x2255, 0x7B45, 0x225B,
- 0x7B46, 0x0D05, 0x7B47, 0x2254, 0x7B48, 0x2256, 0x7B49, 0x0D03,
- 0x7B4A, 0x2253, 0x7B4B, 0x0D0A, 0x7B4C, 0x2257, 0x7B4D, 0x0D09,
- 0x7B4E, 0x2258, 0x7B4F, 0x0D0B, 0x7B50, 0x0D06, 0x7B51, 0x0D0C,
- 0x7B52, 0x0D07, 0x7B54, 0x0D08, 0x7B56, 0x0D04, 0x7B58, 0x225A,
- 0x7B60, 0x0EB8, 0x7B61, 0x24F8, 0x7B63, 0x24FB, 0x7B64, 0x24EF,
- 0x7B65, 0x24F4, 0x7B66, 0x24EE, 0x7B67, 0x0EBA, 0x7B69, 0x24F2,
- 0x7B6D, 0x24F0, 0x7B6E, 0x0EB9, 0x7B70, 0x24F7, 0x7B71, 0x24F6,
- 0x7B72, 0x24F3, 0x7B73, 0x24F5, 0x7B74, 0x24F1, 0x7B75, 0x1050,
- 0x7B76, 0x24FA, 0x7B77, 0x0EB6, 0x7B78, 0x24F9, 0x7B82, 0x2779,
- 0x7B84, 0x1057, 0x7B85, 0x2774, 0x7B87, 0x1056, 0x7B88, 0x276A,
- 0x7B8A, 0x276C, 0x7B8B, 0x104F, 0x7B8C, 0x2771, 0x7B8D, 0x2770,
- 0x7B8E, 0x2773, 0x7B8F, 0x1054, 0x7B90, 0x276E, 0x7B91, 0x276D,
- 0x7B94, 0x1053, 0x7B95, 0x104E, 0x7B96, 0x276F, 0x7B97, 0x1051,
- 0x7B98, 0x2775, 0x7B99, 0x2777, 0x7B9B, 0x2772, 0x7B9C, 0x276B,
- 0x7B9D, 0x1052, 0x7BA0, 0x11D2, 0x7BA1, 0x104D, 0x7BA4, 0x2778,
- 0x7BAC, 0x29AA, 0x7BAD, 0x11CB, 0x7BAF, 0x29AC, 0x7BB1, 0x11CC,
- 0x7BB4, 0x11CE, 0x7BB5, 0x29AF, 0x7BB7, 0x29A7, 0x7BB8, 0x1055,
- 0x7BB9, 0x29AD, 0x7BBE, 0x29A9, 0x7BC0, 0x0EB7, 0x7BC1, 0x11D1,
- 0x7BC4, 0x11CD, 0x7BC6, 0x11CF, 0x7BC7, 0x11D0, 0x7BC9, 0x1318,
- 0x7BCA, 0x29AE, 0x7BCB, 0x29A8, 0x7BCC, 0x11D3, 0x7BCE, 0x29AB,
- 0x7BD4, 0x2C07, 0x7BD5, 0x2C02, 0x7BD8, 0x2C0C, 0x7BD9, 0x1316,
- 0x7BDA, 0x2C04, 0x7BDB, 0x131A, 0x7BDC, 0x2C0A, 0x7BDD, 0x2C01,
- 0x7BDE, 0x2BFE, 0x7BDF, 0x2C0D, 0x7BE0, 0x142D, 0x7BE1, 0x131B,
- 0x7BE2, 0x2C09, 0x7BE3, 0x2BFF, 0x7BE4, 0x1319, 0x7BE5, 0x2C03,
- 0x7BE6, 0x131D, 0x7BE7, 0x2C00, 0x7BE8, 0x2C05, 0x7BE9, 0x131C,
- 0x7BEA, 0x2C08, 0x7BEB, 0x2C0B, 0x7BF0, 0x2DE9, 0x7BF1, 0x2DEA,
- 0x7BF2, 0x2DDA, 0x7BF3, 0x2DE1, 0x7BF4, 0x2DDF, 0x7BF7, 0x142B,
- 0x7BF8, 0x2DE6, 0x7BF9, 0x2C06, 0x7BFB, 0x2DDD, 0x7BFD, 0x2DE7,
- 0x7BFE, 0x142A, 0x7BFF, 0x2DDC, 0x7C00, 0x2DDB, 0x7C01, 0x2DE5,
- 0x7C02, 0x2DE2, 0x7C03, 0x2DE4, 0x7C05, 0x2DD8, 0x7C06, 0x2DE8,
- 0x7C07, 0x1428, 0x7C09, 0x2DE3, 0x7C0A, 0x2DEC, 0x7C0B, 0x2DE0,
- 0x7C0C, 0x142C, 0x7C0D, 0x1429, 0x7C0E, 0x2DDE, 0x7C0F, 0x2DD9,
- 0x7C10, 0x2DEB, 0x7C11, 0x1317, 0x7C19, 0x2F78, 0x7C1C, 0x2F76,
- 0x7C1D, 0x2F7C, 0x7C1E, 0x1508, 0x7C1F, 0x2F7A, 0x7C20, 0x2F79,
- 0x7C21, 0x150A, 0x7C22, 0x2F7F, 0x7C23, 0x1509, 0x7C25, 0x2F80,
- 0x7C26, 0x2F7D, 0x7C27, 0x1506, 0x7C28, 0x2F7E, 0x7C29, 0x2F77,
- 0x7C2A, 0x1507, 0x7C2B, 0x1505, 0x7C2C, 0x30D6, 0x7C2D, 0x2F7B,
- 0x7C30, 0x2F81, 0x7C33, 0x30D3, 0x7C37, 0x15A7, 0x7C38, 0x15A5,
- 0x7C39, 0x30D5, 0x7C3B, 0x30D7, 0x7C3C, 0x30D4, 0x7C3D, 0x15A6,
- 0x7C3E, 0x15A3, 0x7C3F, 0x15A4, 0x7C40, 0x15A8, 0x7C43, 0x162B,
- 0x7C45, 0x3212, 0x7C47, 0x3211, 0x7C48, 0x320F, 0x7C49, 0x320E,
- 0x7C4A, 0x3210, 0x7C4C, 0x162A, 0x7C4D, 0x162C, 0x7C50, 0x1681,
- 0x7C53, 0x32EA, 0x7C54, 0x32E9, 0x7C57, 0x339B, 0x7C59, 0x339D,
- 0x7C5A, 0x339F, 0x7C5B, 0x339E, 0x7C5C, 0x339C, 0x7C5F, 0x16D1,
- 0x7C60, 0x16D0, 0x7C63, 0x1701, 0x7C64, 0x1700, 0x7C65, 0x1702,
- 0x7C66, 0x342B, 0x7C67, 0x342A, 0x7C69, 0x34D6, 0x7C6A, 0x3493,
- 0x7C6B, 0x34D7, 0x7C6C, 0x1745, 0x7C6E, 0x1746, 0x7C6F, 0x3507,
- 0x7C72, 0x176B, 0x7C73, 0x03F7, 0x7C75, 0x1A25, 0x7C78, 0x1BBB,
- 0x7C79, 0x1BBC, 0x7C7A, 0x1BBA, 0x7C7D, 0x07CC, 0x7C7F, 0x1BBD,
- 0x7C80, 0x1BBE, 0x7C81, 0x1BBF, 0x7C84, 0x1D96, 0x7C85, 0x1D9C,
- 0x7C88, 0x1D9A, 0x7C89, 0x096A, 0x7C8A, 0x1D98, 0x7C8C, 0x1D99,
- 0x7C8D, 0x1D9B, 0x7C91, 0x1D97, 0x7C92, 0x0B50, 0x7C94, 0x1FE0,
- 0x7C95, 0x0B52, 0x7C96, 0x1FE2, 0x7C97, 0x0B51, 0x7C98, 0x1FE1,
- 0x7C9E, 0x225D, 0x7C9F, 0x0D0D, 0x7CA1, 0x225F, 0x7CA2, 0x225C,
- 0x7CA3, 0x1FE3, 0x7CA5, 0x0D0E, 0x7CA7, 0x36ED, 0x7CA8, 0x225E,
- 0x7CAF, 0x24FE, 0x7CB1, 0x0EBB, 0x7CB2, 0x24FC, 0x7CB3, 0x0EBC,
- 0x7CB4, 0x24FD, 0x7CB5, 0x0EBD, 0x7CB9, 0x1058, 0x7CBA, 0x277D,
- 0x7CBB, 0x277A, 0x7CBC, 0x277C, 0x7CBD, 0x1059, 0x7CBE, 0x105A,
- 0x7CBF, 0x277B, 0x7CC5, 0x29B0, 0x7CC8, 0x29B1, 0x7CCA, 0x11D4,
- 0x7CCB, 0x29B3, 0x7CCC, 0x29B2, 0x7CCE, 0x0121, 0x7CD0, 0x2C11,
- 0x7CD1, 0x2C12, 0x7CD2, 0x2C0E, 0x7CD4, 0x2C0F, 0x7CD5, 0x131E,
- 0x7CD6, 0x131F, 0x7CD7, 0x2C10, 0x7CD9, 0x1433, 0x7CDC, 0x142F,
- 0x7CDD, 0x1434, 0x7CDE, 0x1430, 0x7CDF, 0x1432, 0x7CE0, 0x142E,
- 0x7CE2, 0x1431, 0x7CE7, 0x150B, 0x7CE8, 0x2DED, 0x7CEA, 0x30D9,
- 0x7CEC, 0x30D8, 0x7CEE, 0x3213, 0x7CEF, 0x162D, 0x7CF0, 0x162E,
- 0x7CF1, 0x33A1, 0x7CF2, 0x32EB, 0x7CF4, 0x33A0, 0x7CF6, 0x34D8,
- 0x7CF7, 0x351D, 0x7CF8, 0x03F8, 0x7CFB, 0x04FB, 0x7CFD, 0x1A26,
- 0x7CFE, 0x0667, 0x7D00, 0x07CF, 0x7D01, 0x1BC2, 0x7D02, 0x07CD,
- 0x7D03, 0x1BC0, 0x7D04, 0x07D2, 0x7D05, 0x07CE, 0x7D06, 0x07D3,
- 0x7D07, 0x07D1, 0x7D08, 0x1BC1, 0x7D09, 0x07D0, 0x7D0A, 0x096E,
- 0x7D0B, 0x096D, 0x7D0C, 0x1DA7, 0x7D0D, 0x0976, 0x7D0E, 0x1DA0,
- 0x7D0F, 0x1DA6, 0x7D10, 0x0972, 0x7D11, 0x1D9F, 0x7D12, 0x1DA5,
- 0x7D13, 0x1DA3, 0x7D14, 0x0971, 0x7D15, 0x0973, 0x7D16, 0x1DA2,
- 0x7D17, 0x096C, 0x7D18, 0x1DA1, 0x7D19, 0x0977, 0x7D1A, 0x0974,
- 0x7D1B, 0x0978, 0x7D1C, 0x0975, 0x7D1D, 0x1D9E, 0x7D1E, 0x1D9D,
- 0x7D1F, 0x1DA4, 0x7D20, 0x096F, 0x7D21, 0x096B, 0x7D22, 0x0970,
- 0x7D28, 0x1FF2, 0x7D29, 0x1FEB, 0x7D2B, 0x0D13, 0x7D2C, 0x1FEA,
- 0x7D2E, 0x0B56, 0x7D2F, 0x0B5D, 0x7D30, 0x0B5A, 0x7D31, 0x0B60,
- 0x7D32, 0x0B5F, 0x7D33, 0x0B5B, 0x7D35, 0x1FE4, 0x7D36, 0x1FE7,
- 0x7D38, 0x1FE6, 0x7D39, 0x0B57, 0x7D3A, 0x1FE8, 0x7D3B, 0x1FF1,
- 0x7D3C, 0x0B58, 0x7D3D, 0x1FE5, 0x7D3E, 0x1FEE, 0x7D3F, 0x1FEF,
- 0x7D40, 0x0B59, 0x7D41, 0x1FEC, 0x7D42, 0x0B5E, 0x7D43, 0x0B54,
- 0x7D44, 0x0B5C, 0x7D45, 0x1FE9, 0x7D46, 0x0B53, 0x7D47, 0x1FED,
- 0x7D4A, 0x1FF0, 0x7D4E, 0x2270, 0x7D4F, 0x2267, 0x7D50, 0x0D10,
- 0x7D51, 0x226E, 0x7D52, 0x226B, 0x7D53, 0x2263, 0x7D54, 0x226C,
- 0x7D55, 0x0D12, 0x7D56, 0x2264, 0x7D58, 0x2260, 0x7D5B, 0x0EC3,
- 0x7D5C, 0x2269, 0x7D5E, 0x0D0F, 0x7D5F, 0x226F, 0x7D61, 0x0D16,
- 0x7D62, 0x0D18, 0x7D63, 0x2262, 0x7D66, 0x0D17, 0x7D67, 0x2265,
- 0x7D68, 0x0D11, 0x7D69, 0x226D, 0x7D6A, 0x2266, 0x7D6B, 0x226A,
- 0x7D6D, 0x2268, 0x7D6E, 0x0D14, 0x7D6F, 0x2261, 0x7D70, 0x0D19,
- 0x7D71, 0x0B55, 0x7D72, 0x0D15, 0x7D73, 0x0D1A, 0x7D79, 0x0EBF,
- 0x7D7A, 0x2505, 0x7D7B, 0x2507, 0x7D7C, 0x2509, 0x7D7D, 0x250D,
- 0x7D7F, 0x2503, 0x7D80, 0x2501, 0x7D81, 0x0EC1, 0x7D83, 0x2508,
- 0x7D84, 0x250C, 0x7D85, 0x2504, 0x7D86, 0x2500, 0x7D88, 0x24FF,
- 0x7D8C, 0x250A, 0x7D8D, 0x2502, 0x7D8E, 0x2506, 0x7D8F, 0x0EC2,
- 0x7D91, 0x0EC0, 0x7D92, 0x250E, 0x7D93, 0x0EBE, 0x7D94, 0x250B,
- 0x7D96, 0x278E, 0x7D9C, 0x105D, 0x7D9D, 0x2786, 0x7D9E, 0x11E1,
- 0x7D9F, 0x2790, 0x7DA0, 0x1060, 0x7DA1, 0x2794, 0x7DA2, 0x1066,
- 0x7DA3, 0x2781, 0x7DA6, 0x2791, 0x7DA7, 0x277E, 0x7DA9, 0x2793,
- 0x7DAA, 0x2782, 0x7DAC, 0x106D, 0x7DAD, 0x106A, 0x7DAE, 0x2792,
- 0x7DAF, 0x278C, 0x7DB0, 0x105C, 0x7DB1, 0x1064, 0x7DB2, 0x1063,
- 0x7DB4, 0x1062, 0x7DB5, 0x1068, 0x7DB7, 0x277F, 0x7DB8, 0x1069,
- 0x7DB9, 0x278D, 0x7DBA, 0x1065, 0x7DBB, 0x105B, 0x7DBC, 0x278F,
- 0x7DBD, 0x105E, 0x7DBE, 0x105F, 0x7DBF, 0x1067, 0x7DC0, 0x2784,
- 0x7DC1, 0x2783, 0x7DC2, 0x2780, 0x7DC4, 0x2788, 0x7DC5, 0x2785,
- 0x7DC6, 0x2789, 0x7DC7, 0x106C, 0x7DC9, 0x2795, 0x7DCA, 0x1061,
- 0x7DCB, 0x278A, 0x7DCC, 0x278B, 0x7DCE, 0x2787, 0x7DD2, 0x106B,
- 0x7DD7, 0x29B8, 0x7DD8, 0x11D9, 0x7DD9, 0x11E2, 0x7DDA, 0x11DE,
- 0x7DDB, 0x29B5, 0x7DDD, 0x11DB, 0x7DDE, 0x11DF, 0x7DDF, 0x29C1,
- 0x7DE0, 0x11D5, 0x7DE1, 0x29B9, 0x7DE3, 0x11DD, 0x7DE6, 0x29BC,
- 0x7DE7, 0x29B7, 0x7DE8, 0x11DC, 0x7DE9, 0x11E0, 0x7DEA, 0x29B6,
- 0x7DEC, 0x11DA, 0x7DEE, 0x29C0, 0x7DEF, 0x11D7, 0x7DF0, 0x29BF,
- 0x7DF1, 0x29BE, 0x7DF2, 0x11E3, 0x7DF3, 0x28C8, 0x7DF4, 0x11D6,
- 0x7DF6, 0x29BD, 0x7DF7, 0x29B4, 0x7DF9, 0x11E4, 0x7DFA, 0x29BB,
- 0x7DFB, 0x11D8, 0x7E03, 0x29BA, 0x7E08, 0x1322, 0x7E09, 0x1327,
- 0x7E0A, 0x1320, 0x7E0B, 0x2C1F, 0x7E0C, 0x2C16, 0x7E0D, 0x2C22,
- 0x7E0E, 0x2C1A, 0x7E0F, 0x2C20, 0x7E10, 0x1328, 0x7E11, 0x1321,
- 0x7E12, 0x2C13, 0x7E13, 0x2C19, 0x7E14, 0x2C23, 0x7E15, 0x2C1C,
- 0x7E16, 0x2C21, 0x7E17, 0x2C15, 0x7E1A, 0x2C1D, 0x7E1B, 0x1323,
- 0x7E1C, 0x2C1B, 0x7E1D, 0x1326, 0x7E1E, 0x1325, 0x7E1F, 0x2C17,
- 0x7E20, 0x2C18, 0x7E21, 0x2C14, 0x7E22, 0x2C1E, 0x7E23, 0x1324,
- 0x7E24, 0x2C25, 0x7E25, 0x2C24, 0x7E29, 0x2DF8, 0x7E2A, 0x2DF4,
- 0x7E2B, 0x143B, 0x7E2D, 0x2DEE, 0x7E2E, 0x1435, 0x7E2F, 0x1445,
- 0x7E30, 0x2DFA, 0x7E31, 0x143D, 0x7E32, 0x1439, 0x7E33, 0x2DF1,
- 0x7E34, 0x1440, 0x7E35, 0x1443, 0x7E36, 0x2DFC, 0x7E37, 0x1438,
- 0x7E38, 0x2DF3, 0x7E39, 0x1441, 0x7E3A, 0x2DFE, 0x7E3B, 0x2DFB,
- 0x7E3C, 0x2DEF, 0x7E3D, 0x143C, 0x7E3E, 0x1436, 0x7E3F, 0x1444,
- 0x7E40, 0x2DF6, 0x7E41, 0x143F, 0x7E42, 0x2DF0, 0x7E43, 0x143A,
- 0x7E44, 0x2DFD, 0x7E45, 0x143E, 0x7E46, 0x1437, 0x7E47, 0x2DF7,
- 0x7E48, 0x1442, 0x7E49, 0x2DF5, 0x7E4C, 0x2DF9, 0x7E50, 0x2F83,
- 0x7E51, 0x2F89, 0x7E52, 0x1511, 0x7E53, 0x2F8C, 0x7E54, 0x150C,
- 0x7E55, 0x150D, 0x7E56, 0x2F84, 0x7E57, 0x2F8B, 0x7E58, 0x2F86,
- 0x7E59, 0x1512, 0x7E5A, 0x150F, 0x7E5C, 0x2F82, 0x7E5E, 0x150E,
- 0x7E5F, 0x2F88, 0x7E60, 0x2F8A, 0x7E61, 0x1510, 0x7E62, 0x2F87,
- 0x7E63, 0x2F85, 0x7E68, 0x30E3, 0x7E69, 0x15AC, 0x7E6A, 0x15AD,
- 0x7E6B, 0x15A9, 0x7E6D, 0x15AA, 0x7E6F, 0x30DF, 0x7E70, 0x30DD,
- 0x7E72, 0x30E1, 0x7E73, 0x15AE, 0x7E74, 0x30E2, 0x7E75, 0x30DB,
- 0x7E76, 0x30DA, 0x7E77, 0x30DE, 0x7E78, 0x30DC, 0x7E79, 0x15AB,
- 0x7E7A, 0x30E0, 0x7E7B, 0x3214, 0x7E7C, 0x1631, 0x7E7D, 0x1630,
- 0x7E7E, 0x3215, 0x7E80, 0x3217, 0x7E81, 0x3216, 0x7E82, 0x1632,
- 0x7E86, 0x32F0, 0x7E87, 0x32ED, 0x7E88, 0x32EE, 0x7E8A, 0x32EC,
- 0x7E8B, 0x32EF, 0x7E8C, 0x1683, 0x7E8D, 0x32F1, 0x7E8F, 0x1682,
- 0x7E91, 0x33A2, 0x7E93, 0x1703, 0x7E94, 0x1705, 0x7E95, 0x342C,
- 0x7E96, 0x1704, 0x7E97, 0x3494, 0x7E98, 0x34DA, 0x7E99, 0x34DC,
- 0x7E9A, 0x34D9, 0x7E9B, 0x34DB, 0x7E9C, 0x1759, 0x7F36, 0x03F9,
- 0x7F38, 0x07D4, 0x7F39, 0x1D1F, 0x7F3A, 0x0979, 0x7F3D, 0x0B61,
- 0x7F3E, 0x2271, 0x7F3F, 0x2272, 0x7F43, 0x2C26, 0x7F44, 0x1446,
- 0x7F45, 0x2DFF, 0x7F48, 0x1513, 0x7F4A, 0x30E5, 0x7F4B, 0x30E4,
- 0x7F4C, 0x1633, 0x7F4D, 0x32F2, 0x7F4F, 0x33A3, 0x7F50, 0x1726,
- 0x7F51, 0x1812, 0x7F54, 0x0668, 0x7F55, 0x04FC, 0x7F58, 0x1BC3,
- 0x7F5B, 0x1DAD, 0x7F5C, 0x1DA8, 0x7F5D, 0x1DAC, 0x7F5E, 0x1DAA,
- 0x7F5F, 0x097A, 0x7F60, 0x1DAB, 0x7F61, 0x1DA9, 0x7F63, 0x1FF3,
- 0x7F65, 0x2273, 0x7F66, 0x2274, 0x7F67, 0x2511, 0x7F68, 0x2512,
- 0x7F69, 0x0EC5, 0x7F6A, 0x0EC6, 0x7F6B, 0x2510, 0x7F6C, 0x2513,
- 0x7F6D, 0x250F, 0x7F6E, 0x0EC4, 0x7F70, 0x106E, 0x7F72, 0x0EC7,
- 0x7F73, 0x2796, 0x7F75, 0x11E5, 0x7F76, 0x29C2, 0x7F77, 0x11E6,
- 0x7F79, 0x1329, 0x7F7A, 0x2C29, 0x7F7B, 0x2C27, 0x7F7C, 0x2C28,
- 0x7F7D, 0x2E02, 0x7F7E, 0x2E01, 0x7F7F, 0x2E00, 0x7F83, 0x30E6,
- 0x7F85, 0x15AF, 0x7F86, 0x30E7, 0x7F87, 0x33A4, 0x7F88, 0x1727,
- 0x7F89, 0x3495, 0x7F8A, 0x03FA, 0x7F8B, 0x066A, 0x7F8C, 0x0669,
- 0x7F8D, 0x1BC5, 0x7F8E, 0x07D5, 0x7F91, 0x1BC4, 0x7F92, 0x1DAF,
- 0x7F94, 0x097B, 0x7F95, 0x1FF4, 0x7F96, 0x1DAE, 0x7F9A, 0x0B63,
- 0x7F9B, 0x1FF7, 0x7F9C, 0x1FF5, 0x7F9D, 0x1FF6, 0x7F9E, 0x0B62,
- 0x7FA0, 0x2276, 0x7FA1, 0x2277, 0x7FA2, 0x2275, 0x7FA4, 0x0ECA,
- 0x7FA5, 0x2515, 0x7FA6, 0x2514, 0x7FA7, 0x2516, 0x7FA8, 0x0EC9,
- 0x7FA9, 0x0EC8, 0x7FAC, 0x29C3, 0x7FAD, 0x29C5, 0x7FAF, 0x11E7,
- 0x7FB0, 0x29C4, 0x7FB1, 0x2C2A, 0x7FB2, 0x132A, 0x7FB3, 0x2F8E,
- 0x7FB5, 0x2F8D, 0x7FB6, 0x15B0, 0x7FB7, 0x30E8, 0x7FB8, 0x15B2,
- 0x7FB9, 0x15B1, 0x7FBA, 0x3218, 0x7FBB, 0x32F3, 0x7FBC, 0x1684,
- 0x7FBD, 0x03FB, 0x7FBE, 0x1BC6, 0x7FBF, 0x07D6, 0x7FC0, 0x1DB2,
- 0x7FC1, 0x097D, 0x7FC2, 0x1DB1, 0x7FC3, 0x1DB0, 0x7FC5, 0x097C,
- 0x7FC7, 0x1FFD, 0x7FC9, 0x1FFF, 0x7FCA, 0x1FF8, 0x7FCB, 0x1FF9,
- 0x7FCC, 0x0B64, 0x7FCD, 0x1FFA, 0x7FCE, 0x0B65, 0x7FCF, 0x1FFE,
- 0x7FD0, 0x1FFB, 0x7FD1, 0x1FFC, 0x7FD2, 0x0B66, 0x7FD4, 0x0D1C,
- 0x7FD5, 0x0D1D, 0x7FD7, 0x2278, 0x7FDB, 0x2517, 0x7FDC, 0x2518,
- 0x7FDE, 0x279A, 0x7FDF, 0x1071, 0x7FE0, 0x106F, 0x7FE1, 0x1070,
- 0x7FE2, 0x2797, 0x7FE3, 0x2798, 0x7FE5, 0x2799, 0x7FE6, 0x29CA,
- 0x7FE8, 0x29CB, 0x7FE9, 0x11E8, 0x7FEA, 0x29C8, 0x7FEB, 0x29C7,
- 0x7FEC, 0x29C9, 0x7FED, 0x29C6, 0x7FEE, 0x132D, 0x7FEF, 0x2C2B,
- 0x7FF0, 0x132B, 0x7FF1, 0x132C, 0x7FF2, 0x2E04, 0x7FF3, 0x1447,
- 0x7FF4, 0x2E03, 0x7FF5, 0x2EFF, 0x7FF7, 0x2F8F, 0x7FF8, 0x2F90,
- 0x7FF9, 0x1514, 0x7FFB, 0x1515, 0x7FFC, 0x1448, 0x7FFD, 0x30E9,
- 0x7FFE, 0x30EA, 0x7FFF, 0x3219, 0x8000, 0x1634, 0x8001, 0x03FC,
- 0x8003, 0x03FD, 0x8004, 0x097F, 0x8005, 0x066B, 0x8006, 0x097E,
- 0x8007, 0x1BC7, 0x800B, 0x0D1E, 0x800C, 0x03FE, 0x800D, 0x07D8,
- 0x800E, 0x1BC8, 0x800F, 0x1BC9, 0x8010, 0x07D7, 0x8011, 0x07D9,
- 0x8012, 0x03FF, 0x8014, 0x1BCA, 0x8015, 0x0981, 0x8016, 0x1DB3,
- 0x8017, 0x0983, 0x8018, 0x0980, 0x8019, 0x0982, 0x801B, 0x2002,
- 0x801C, 0x0B67, 0x801E, 0x2001, 0x801F, 0x2000, 0x8021, 0x2519,
- 0x8024, 0x279B, 0x8026, 0x11E9, 0x8028, 0x132E, 0x8029, 0x2C2D,
- 0x802A, 0x2C2C, 0x802C, 0x2E05, 0x8030, 0x32F4, 0x8033, 0x0400,
- 0x8034, 0x18D8, 0x8035, 0x1A27, 0x8036, 0x07DA, 0x8037, 0x1BCB,
- 0x8039, 0x1DB5, 0x803D, 0x0984, 0x803E, 0x1DB4, 0x803F, 0x0985,
- 0x8043, 0x2004, 0x8046, 0x0B69, 0x8047, 0x2003, 0x8048, 0x2005,
- 0x804A, 0x0B68, 0x804F, 0x227A, 0x8050, 0x227B, 0x8051, 0x2279,
- 0x8052, 0x0D1F, 0x8056, 0x0ECB, 0x8058, 0x0ECC, 0x805A, 0x1073,
- 0x805C, 0x279D, 0x805D, 0x279C, 0x805E, 0x1072, 0x8064, 0x29CC,
- 0x8067, 0x29CD, 0x806C, 0x2C2E, 0x806F, 0x144C, 0x8070, 0x144B,
- 0x8071, 0x1449, 0x8072, 0x144A, 0x8073, 0x144D, 0x8075, 0x2F91,
- 0x8076, 0x1517, 0x8077, 0x1516, 0x8078, 0x30EB, 0x8079, 0x321A,
- 0x807D, 0x16D3, 0x807E, 0x16D2, 0x807F, 0x0401, 0x8082, 0x1CEC,
- 0x8084, 0x0ECE, 0x8085, 0x0D20, 0x8086, 0x0ECD, 0x8087, 0x1074,
- 0x8089, 0x0402, 0x808A, 0x17B3, 0x808B, 0x0403, 0x808C, 0x0404,
- 0x808F, 0x1A28, 0x8090, 0x18DB, 0x8092, 0x18DC, 0x8093, 0x04FE,
- 0x8095, 0x18D9, 0x8096, 0x04FD, 0x8098, 0x0500, 0x8099, 0x18DA,
- 0x809A, 0x0502, 0x809B, 0x0501, 0x809C, 0x18DD, 0x809D, 0x04FF,
- 0x80A1, 0x0670, 0x80A2, 0x066E, 0x80A3, 0x1A2A, 0x80A5, 0x066D,
- 0x80A9, 0x0672, 0x80AA, 0x0674, 0x80AB, 0x0671, 0x80AD, 0x1A2D,
- 0x80AE, 0x1A29, 0x80AF, 0x0675, 0x80B1, 0x066F, 0x80B2, 0x0503,
- 0x80B4, 0x0673, 0x80B5, 0x1A2C, 0x80B8, 0x1A2B, 0x80BA, 0x066C,
- 0x80C2, 0x1BD1, 0x80C3, 0x07DE, 0x80C4, 0x07DF, 0x80C5, 0x1BD3,
- 0x80C7, 0x1BCD, 0x80C8, 0x1BD0, 0x80C9, 0x1BD9, 0x80CA, 0x1BD7,
- 0x80CC, 0x07E0, 0x80CD, 0x1BDD, 0x80CE, 0x07E3, 0x80CF, 0x1BDA,
- 0x80D0, 0x1BD2, 0x80D1, 0x1BCF, 0x80D4, 0x227D, 0x80D5, 0x1BD8,
- 0x80D6, 0x07DB, 0x80D7, 0x1BDB, 0x80D8, 0x1BCC, 0x80D9, 0x1BD5,
- 0x80DA, 0x07DD, 0x80DB, 0x07E2, 0x80DC, 0x1BD6, 0x80DD, 0x07E6,
- 0x80DE, 0x07E4, 0x80E0, 0x1BCE, 0x80E1, 0x07E1, 0x80E3, 0x1BD4,
- 0x80E4, 0x07E5, 0x80E5, 0x07DC, 0x80E6, 0x1BDC, 0x80ED, 0x098A,
- 0x80EF, 0x0993, 0x80F0, 0x0988, 0x80F1, 0x0986, 0x80F2, 0x1DB7,
- 0x80F3, 0x098E, 0x80F4, 0x098B, 0x80F5, 0x1DB9, 0x80F8, 0x098D,
- 0x80F9, 0x1DB8, 0x80FA, 0x1DB6, 0x80FB, 0x1DBB, 0x80FC, 0x0992,
- 0x80FD, 0x0990, 0x80FE, 0x227C, 0x8100, 0x1DBC, 0x8101, 0x1DBA,
- 0x8102, 0x0987, 0x8105, 0x0989, 0x8106, 0x098C, 0x8108, 0x098F,
- 0x810A, 0x0991, 0x8115, 0x200F, 0x8116, 0x0B6B, 0x8118, 0x2006,
- 0x8119, 0x2008, 0x811B, 0x2009, 0x811D, 0x2011, 0x811E, 0x200D,
- 0x811F, 0x200B, 0x8121, 0x200E, 0x8122, 0x2012, 0x8123, 0x0B6C,
- 0x8124, 0x0B70, 0x8125, 0x2007, 0x8127, 0x2010, 0x8129, 0x0B6E,
- 0x812B, 0x0B6D, 0x812C, 0x200C, 0x812D, 0x200A, 0x812F, 0x0B6A,
- 0x8130, 0x0B6F, 0x8139, 0x0D26, 0x813A, 0x2285, 0x813D, 0x2283,
- 0x813E, 0x0D28, 0x8143, 0x227E, 0x8144, 0x2527, 0x8146, 0x0D27,
- 0x8147, 0x2282, 0x814A, 0x227F, 0x814B, 0x0D23, 0x814C, 0x0D29,
- 0x814D, 0x2284, 0x814E, 0x0D25, 0x814F, 0x2281, 0x8150, 0x1075,
- 0x8151, 0x0D24, 0x8152, 0x2280, 0x8153, 0x0D2A, 0x8154, 0x0D22,
- 0x8155, 0x0D21, 0x815B, 0x251F, 0x815C, 0x251D, 0x815E, 0x2523,
- 0x8160, 0x251B, 0x8161, 0x2528, 0x8162, 0x2520, 0x8164, 0x251A,
- 0x8165, 0x0ED2, 0x8166, 0x0ED8, 0x8167, 0x2525, 0x8169, 0x251E,
- 0x816B, 0x0ED5, 0x816E, 0x0ED3, 0x816F, 0x2526, 0x8170, 0x0ED0,
- 0x8171, 0x0ECF, 0x8172, 0x2521, 0x8173, 0x0ED4, 0x8174, 0x0D2B,
- 0x8176, 0x2524, 0x8177, 0x251C, 0x8178, 0x0ED1, 0x8179, 0x0ED6,
- 0x817A, 0x0ED7, 0x817F, 0x107A, 0x8180, 0x1076, 0x8182, 0x107B,
- 0x8183, 0x27A0, 0x8186, 0x279F, 0x8187, 0x27A1, 0x8188, 0x1078,
- 0x8189, 0x279E, 0x818A, 0x1079, 0x818B, 0x27A4, 0x818C, 0x27A3,
- 0x818D, 0x27A2, 0x818F, 0x1077, 0x8195, 0x29D1, 0x8197, 0x29D4,
- 0x8198, 0x11EF, 0x8199, 0x29D3, 0x819A, 0x11EE, 0x819B, 0x11EA,
- 0x819C, 0x11EB, 0x819D, 0x11EC, 0x819E, 0x29D0, 0x819F, 0x29CF,
- 0x81A0, 0x11ED, 0x81A2, 0x29D2, 0x81A3, 0x29CE, 0x81A6, 0x2C30,
- 0x81A7, 0x2C3A, 0x81A8, 0x1331, 0x81A9, 0x1330, 0x81AB, 0x2C34,
- 0x81AC, 0x2C36, 0x81AE, 0x2C31, 0x81B0, 0x2C35, 0x81B1, 0x2C2F,
- 0x81B2, 0x2C38, 0x81B3, 0x132F, 0x81B4, 0x2C37, 0x81B5, 0x2C33,
- 0x81B7, 0x2C39, 0x81B9, 0x2C32, 0x81BA, 0x1450, 0x81BB, 0x2E06,
- 0x81BC, 0x2E0C, 0x81BD, 0x1454, 0x81BE, 0x1456, 0x81BF, 0x1453,
- 0x81C0, 0x1452, 0x81C2, 0x1451, 0x81C3, 0x144F, 0x81C4, 0x2E07,
- 0x81C5, 0x2E0A, 0x81C6, 0x144E, 0x81C7, 0x2E0B, 0x81C9, 0x1455,
- 0x81CA, 0x2E09, 0x81CC, 0x2E08, 0x81CD, 0x1518, 0x81CF, 0x1519,
- 0x81D0, 0x2F94, 0x81D1, 0x2F92, 0x81D2, 0x2F93, 0x81D5, 0x30ED,
- 0x81D7, 0x30EC, 0x81D8, 0x15B3, 0x81D9, 0x321C, 0x81DA, 0x1635,
- 0x81DB, 0x321B, 0x81DD, 0x32F5, 0x81DE, 0x33A5, 0x81DF, 0x16D4,
- 0x81E0, 0x34DD, 0x81E1, 0x34DE, 0x81E2, 0x1706, 0x81E3, 0x0405,
- 0x81E5, 0x0676, 0x81E6, 0x2286, 0x81E7, 0x107C, 0x81E8, 0x1457,
- 0x81E9, 0x2E0D, 0x81EA, 0x0406, 0x81EC, 0x0995, 0x81ED, 0x0994,
- 0x81EE, 0x2287, 0x81F2, 0x2C3B, 0x81F3, 0x0407, 0x81F4, 0x07E7,
- 0x81F7, 0x2288, 0x81F8, 0x2289, 0x81F9, 0x228A, 0x81FA, 0x107D,
- 0x81FB, 0x1332, 0x81FC, 0x0408, 0x81FE, 0x0677, 0x81FF, 0x1BDE,
- 0x8200, 0x0996, 0x8201, 0x1DBD, 0x8202, 0x0B71, 0x8204, 0x228B,
- 0x8205, 0x0ED9, 0x8207, 0x107E, 0x8208, 0x1333, 0x8209, 0x1458,
- 0x820A, 0x151A, 0x820B, 0x30EE, 0x820C, 0x0409, 0x820D, 0x0678,
- 0x8210, 0x0997, 0x8211, 0x2013, 0x8212, 0x0D2C, 0x8214, 0x107F,
- 0x8215, 0x27A5, 0x8216, 0x29D5, 0x821B, 0x040A, 0x821C, 0x0D2D,
- 0x821D, 0x2529, 0x821E, 0x1080, 0x821F, 0x040B, 0x8220, 0x1A2E,
- 0x8221, 0x1BDF, 0x8222, 0x07E8, 0x8225, 0x1DBF, 0x8228, 0x099A,
- 0x822A, 0x0998, 0x822B, 0x0999, 0x822C, 0x099B, 0x822F, 0x1DBE,
- 0x8232, 0x2018, 0x8233, 0x2015, 0x8234, 0x2017, 0x8235, 0x0B72,
- 0x8236, 0x0B74, 0x8237, 0x0B73, 0x8238, 0x2014, 0x8239, 0x0B75,
- 0x823A, 0x2016, 0x823C, 0x228C, 0x823D, 0x228D, 0x823F, 0x228E,
- 0x8240, 0x252C, 0x8242, 0x252D, 0x8244, 0x252B, 0x8245, 0x252E,
- 0x8247, 0x0EDA, 0x8249, 0x252A, 0x824B, 0x1081, 0x824E, 0x29DA,
- 0x824F, 0x29D6, 0x8250, 0x29D9, 0x8251, 0x29DB, 0x8252, 0x29D8,
- 0x8253, 0x29D7, 0x8255, 0x2C3C, 0x8256, 0x2C3D, 0x8257, 0x2C3E,
- 0x8258, 0x1334, 0x8259, 0x1335, 0x825A, 0x2E0F, 0x825B, 0x2E0E,
- 0x825C, 0x2E10, 0x825E, 0x2F96, 0x825F, 0x2F95, 0x8261, 0x30F0,
- 0x8263, 0x30F1, 0x8264, 0x30EF, 0x8266, 0x1636, 0x8268, 0x321D,
- 0x8269, 0x321E, 0x826B, 0x33A6, 0x826C, 0x342D, 0x826D, 0x3496,
- 0x826E, 0x040C, 0x826F, 0x0504, 0x8271, 0x1459, 0x8272, 0x040D,
- 0x8274, 0x2019, 0x8275, 0x228F, 0x8277, 0x172E, 0x8278, 0x1813,
- 0x827C, 0x1814, 0x827D, 0x1816, 0x827E, 0x040E, 0x827F, 0x1817,
- 0x8280, 0x1815, 0x8283, 0x18E5, 0x8284, 0x18E6, 0x8285, 0x18E0,
- 0x828A, 0x18E4, 0x828B, 0x0506, 0x828D, 0x0507, 0x828E, 0x18E1,
- 0x828F, 0x18DF, 0x8290, 0x18DE, 0x8291, 0x18E2, 0x8292, 0x0505,
- 0x8293, 0x18E3, 0x8294, 0x1BE0, 0x8298, 0x1A33, 0x8299, 0x067B,
- 0x829A, 0x1A32, 0x829B, 0x1A34, 0x829D, 0x067A, 0x829E, 0x1A39,
- 0x829F, 0x067E, 0x82A0, 0x1A2F, 0x82A1, 0x1A3D, 0x82A2, 0x1A43,
- 0x82A3, 0x0685, 0x82A4, 0x1A40, 0x82A5, 0x0682, 0x82A7, 0x1A36,
- 0x82A8, 0x1A3C, 0x82A9, 0x1A3E, 0x82AB, 0x1A31, 0x82AC, 0x0681,
- 0x82AD, 0x067C, 0x82AE, 0x1A37, 0x82AF, 0x0683, 0x82B0, 0x0686,
- 0x82B1, 0x0680, 0x82B3, 0x0679, 0x82B4, 0x1A3B, 0x82B5, 0x1A35,
- 0x82B6, 0x1A42, 0x82B7, 0x0688, 0x82B8, 0x0684, 0x82B9, 0x067F,
- 0x82BA, 0x1A3A, 0x82BB, 0x099C, 0x82BC, 0x1A38, 0x82BD, 0x067D,
- 0x82BE, 0x0687, 0x82C0, 0x1A30, 0x82C2, 0x1A3F, 0x82C3, 0x1A41,
- 0x82D1, 0x07F9, 0x82D2, 0x07F3, 0x82D3, 0x07FB, 0x82D4, 0x07F8,
- 0x82D5, 0x1BE7, 0x82D6, 0x1BEA, 0x82D7, 0x07F4, 0x82D9, 0x1BE1,
- 0x82DB, 0x07ED, 0x82DC, 0x07F7, 0x82DE, 0x07FA, 0x82DF, 0x07FC,
- 0x82E0, 0x1BF6, 0x82E1, 0x1BED, 0x82E3, 0x07EC, 0x82E4, 0x1BF5,
- 0x82E5, 0x07F0, 0x82E6, 0x07EE, 0x82E7, 0x07E9, 0x82E8, 0x1BE5,
- 0x82EA, 0x1BF4, 0x82EB, 0x1BE9, 0x82EC, 0x1BEC, 0x82ED, 0x1BF9,
- 0x82EF, 0x07FD, 0x82F0, 0x1BF3, 0x82F1, 0x07F5, 0x82F2, 0x1BEE,
- 0x82F3, 0x1BF8, 0x82F4, 0x1BEB, 0x82F5, 0x1BEF, 0x82F6, 0x1BF2,
- 0x82F9, 0x1BE3, 0x82FA, 0x1BF7, 0x82FB, 0x1BF1, 0x82FE, 0x1BE2,
- 0x8300, 0x1BE6, 0x8301, 0x07F6, 0x8302, 0x07F1, 0x8303, 0x07EA,
- 0x8304, 0x07EF, 0x8305, 0x07EB, 0x8306, 0x07FE, 0x8307, 0x1BE4,
- 0x8308, 0x1DD0, 0x8309, 0x07F2, 0x830C, 0x1BF0, 0x830D, 0x1A7D,
- 0x8316, 0x1DD3, 0x8317, 0x09AA, 0x8319, 0x1DC3, 0x831B, 0x1DCE,
- 0x831C, 0x1DCA, 0x831E, 0x1DDD, 0x8320, 0x1DD5, 0x8322, 0x1DCB,
- 0x8324, 0x1DD4, 0x8325, 0x1DC5, 0x8326, 0x1DC9, 0x8327, 0x1DE0,
- 0x8328, 0x09AD, 0x8329, 0x1DD8, 0x832A, 0x1DCF, 0x832B, 0x099D,
- 0x832C, 0x1DDE, 0x832D, 0x1DC1, 0x832F, 0x1DD7, 0x8331, 0x09AC,
- 0x8332, 0x09A7, 0x8333, 0x1DC0, 0x8334, 0x09A5, 0x8335, 0x09A4,
- 0x8336, 0x09A9, 0x8337, 0x1DD6, 0x8338, 0x09A1, 0x8339, 0x09A8,
- 0x833A, 0x1BE8, 0x833B, 0x2290, 0x833C, 0x1DD1, 0x833F, 0x1DC7,
- 0x8340, 0x09AB, 0x8341, 0x1DC8, 0x8342, 0x1DCC, 0x8343, 0x09AE,
- 0x8344, 0x1DC2, 0x8345, 0x1DDA, 0x8347, 0x1DD9, 0x8348, 0x1DE1,
- 0x8349, 0x09A3, 0x834A, 0x09A0, 0x834B, 0x1DDF, 0x834C, 0x1DDB,
- 0x834D, 0x1DD2, 0x834E, 0x1DCD, 0x834F, 0x09A6, 0x8350, 0x09A2,
- 0x8351, 0x1DC4, 0x8352, 0x099E, 0x8353, 0x1DDC, 0x8354, 0x099F,
- 0x8356, 0x1DC6, 0x8373, 0x201F, 0x8374, 0x2021, 0x8375, 0x2026,
- 0x8376, 0x203A, 0x8377, 0x0B83, 0x8378, 0x0B79, 0x837A, 0x201E,
- 0x837B, 0x0B84, 0x837C, 0x0B85, 0x837D, 0x2029, 0x837E, 0x2030,
- 0x837F, 0x2036, 0x8381, 0x2023, 0x8383, 0x202A, 0x8386, 0x0B86,
- 0x8387, 0x2038, 0x8388, 0x2033, 0x8389, 0x0B81, 0x838A, 0x0B7F,
- 0x838B, 0x202F, 0x838C, 0x202B, 0x838D, 0x201D, 0x838E, 0x0B76,
- 0x838F, 0x2022, 0x8390, 0x201A, 0x8392, 0x0B7E, 0x8393, 0x0B80,
- 0x8394, 0x2027, 0x8395, 0x2024, 0x8396, 0x0B7B, 0x8397, 0x2034,
- 0x8398, 0x0B78, 0x8399, 0x2025, 0x839A, 0x22B9, 0x839B, 0x202D,
- 0x839D, 0x202C, 0x839E, 0x0B77, 0x83A0, 0x0B82, 0x83A2, 0x0B7A,
- 0x83A3, 0x201B, 0x83A4, 0x2020, 0x83A5, 0x2031, 0x83A6, 0x2037,
- 0x83A7, 0x0B87, 0x83A8, 0x201C, 0x83A9, 0x2028, 0x83AA, 0x202E,
- 0x83AB, 0x0B7D, 0x83AE, 0x2039, 0x83AF, 0x2032, 0x83B0, 0x2035,
- 0x83BD, 0x0B7C, 0x83BF, 0x22A0, 0x83C0, 0x2294, 0x83C1, 0x0D35,
- 0x83C2, 0x22B1, 0x83C3, 0x22BA, 0x83C4, 0x22BD, 0x83C5, 0x0D33,
- 0x83C6, 0x229C, 0x83C7, 0x22B5, 0x83C8, 0x229D, 0x83C9, 0x22AB,
- 0x83CA, 0x0D40, 0x83CB, 0x22A7, 0x83CC, 0x0D3D, 0x83CE, 0x22A8,
- 0x83CF, 0x2291, 0x83D1, 0x22B6, 0x83D4, 0x0D46, 0x83D5, 0x22B3,
- 0x83D6, 0x22A9, 0x83D7, 0x22BF, 0x83D8, 0x22A4, 0x83D9, 0x254E,
- 0x83DB, 0x22C2, 0x83DC, 0x0D44, 0x83DD, 0x22A2, 0x83DE, 0x22AE,
- 0x83DF, 0x0D47, 0x83E0, 0x0D32, 0x83E1, 0x22A6, 0x83E2, 0x22C0,
- 0x83E3, 0x229F, 0x83E4, 0x2298, 0x83E5, 0x22A3, 0x83E7, 0x2297,
- 0x83E8, 0x2295, 0x83E9, 0x0D2E, 0x83EA, 0x22B7, 0x83EB, 0x229E,
- 0x83EC, 0x22BB, 0x83EE, 0x22BC, 0x83EF, 0x0D36, 0x83F0, 0x0D3B,
- 0x83F1, 0x0D37, 0x83F2, 0x0D3F, 0x83F3, 0x22B2, 0x83F4, 0x0D38,
- 0x83F5, 0x22AA, 0x83F6, 0x229A, 0x83F8, 0x0D30, 0x83F9, 0x2292,
- 0x83FA, 0x22B4, 0x83FB, 0x22BE, 0x83FC, 0x2299, 0x83FD, 0x0D3E,
- 0x83FE, 0x22C3, 0x83FF, 0x22A5, 0x8401, 0x22A1, 0x8403, 0x0D2F,
- 0x8404, 0x0D43, 0x8406, 0x22B0, 0x8407, 0x0D45, 0x8409, 0x22AC,
- 0x840A, 0x0D3A, 0x840B, 0x0D34, 0x840C, 0x0D3C, 0x840D, 0x0D31,
- 0x840E, 0x0D42, 0x840F, 0x22AD, 0x8410, 0x229B, 0x8411, 0x22AF,
- 0x8412, 0x2296, 0x8413, 0x22B8, 0x841B, 0x22C1, 0x8423, 0x2293,
- 0x8429, 0x254D, 0x842B, 0x2563, 0x842C, 0x0EAC, 0x842D, 0x2552,
- 0x842F, 0x2550, 0x8430, 0x253B, 0x8431, 0x0EDE, 0x8432, 0x254B,
- 0x8433, 0x255F, 0x8434, 0x2547, 0x8435, 0x0EE6, 0x8436, 0x255E,
- 0x8437, 0x2545, 0x8438, 0x0D41, 0x8439, 0x2555, 0x843A, 0x2546,
- 0x843B, 0x255C, 0x843C, 0x0EE5, 0x843D, 0x0EDD, 0x843F, 0x2530,
- 0x8440, 0x2538, 0x8442, 0x2551, 0x8443, 0x2549, 0x8444, 0x2562,
- 0x8445, 0x254C, 0x8446, 0x0EEB, 0x8447, 0x255D, 0x8449, 0x0EE2,
- 0x844B, 0x254F, 0x844C, 0x2557, 0x844D, 0x253C, 0x844E, 0x2556,
- 0x8450, 0x2567, 0x8451, 0x2537, 0x8452, 0x2558, 0x8454, 0x2565,
- 0x8456, 0x2531, 0x8457, 0x0D39, 0x8459, 0x253F, 0x845A, 0x253E,
- 0x845B, 0x0EE4, 0x845D, 0x2542, 0x845E, 0x2544, 0x845F, 0x2553,
- 0x8460, 0x2564, 0x8461, 0x0EE7, 0x8463, 0x0EE8, 0x8465, 0x2536,
- 0x8466, 0x0EE0, 0x8467, 0x253A, 0x8468, 0x2560, 0x8469, 0x0EE9,
- 0x846B, 0x0EE1, 0x846C, 0x0EE3, 0x846D, 0x0EEA, 0x846E, 0x2566,
- 0x846F, 0x2559, 0x8470, 0x2554, 0x8473, 0x2541, 0x8474, 0x2540,
- 0x8475, 0x0EDF, 0x8476, 0x2532, 0x8477, 0x0EDC, 0x8478, 0x254A,
- 0x8479, 0x2533, 0x847A, 0x2548, 0x847D, 0x253D, 0x847E, 0x2561,
- 0x8482, 0x0EDB, 0x8486, 0x2539, 0x848D, 0x2535, 0x848E, 0x255B,
- 0x848F, 0x2534, 0x8490, 0x108E, 0x8491, 0x27CD, 0x8494, 0x27BC,
- 0x8497, 0x27A6, 0x8498, 0x27C4, 0x8499, 0x1086, 0x849A, 0x27B5,
- 0x849B, 0x27BF, 0x849C, 0x1089, 0x849D, 0x27B8, 0x849E, 0x1087,
- 0x849F, 0x27A9, 0x84A0, 0x27C7, 0x84A1, 0x27A8, 0x84A2, 0x27BB,
- 0x84A4, 0x27A7, 0x84A7, 0x27B9, 0x84A8, 0x27C2, 0x84A9, 0x27C0,
- 0x84AA, 0x27B4, 0x84AB, 0x27AF, 0x84AC, 0x27AD, 0x84AE, 0x27AE,
- 0x84AF, 0x27C1, 0x84B0, 0x27CC, 0x84B1, 0x27B6, 0x84B2, 0x1088,
- 0x84B4, 0x27B1, 0x84B6, 0x27C5, 0x84B8, 0x108B, 0x84B9, 0x27B0,
- 0x84BA, 0x27AA, 0x84BB, 0x27BA, 0x84BC, 0x108F, 0x84BF, 0x1083,
- 0x84C0, 0x108C, 0x84C1, 0x27B2, 0x84C2, 0x27AC, 0x84C4, 0x1085,
- 0x84C5, 0x255A, 0x84C6, 0x1084, 0x84C7, 0x27BD, 0x84C9, 0x1082,
- 0x84CA, 0x1091, 0x84CB, 0x108A, 0x84CC, 0x27BE, 0x84CD, 0x27B3,
- 0x84CE, 0x27AB, 0x84CF, 0x27C6, 0x84D0, 0x27B7, 0x84D1, 0x1090,
- 0x84D2, 0x27CA, 0x84D3, 0x108D, 0x84D4, 0x27C9, 0x84D6, 0x27C3,
- 0x84D7, 0x27C8, 0x84DB, 0x27CB, 0x84E7, 0x2A03, 0x84E8, 0x2A04,
- 0x84E9, 0x29F7, 0x84EA, 0x29F6, 0x84EB, 0x29F2, 0x84EC, 0x11FB,
- 0x84EE, 0x11F3, 0x84EF, 0x2A06, 0x84F0, 0x2A05, 0x84F1, 0x252F,
- 0x84F2, 0x29EF, 0x84F3, 0x29F3, 0x84F4, 0x29ED, 0x84F6, 0x2A00,
- 0x84F7, 0x29F1, 0x84F9, 0x2A07, 0x84FA, 0x29EA, 0x84FB, 0x29E8,
- 0x84FC, 0x29F4, 0x84FD, 0x29FE, 0x84FE, 0x29F9, 0x84FF, 0x11FD,
- 0x8500, 0x29DF, 0x8502, 0x29FD, 0x8506, 0x11FE, 0x8507, 0x2543,
- 0x8508, 0x29EB, 0x8509, 0x29E2, 0x850A, 0x29E5, 0x850B, 0x2A0B,
- 0x850C, 0x29EC, 0x850D, 0x29E3, 0x850E, 0x29E1, 0x850F, 0x29DE,
- 0x8511, 0x11F7, 0x8512, 0x29F5, 0x8513, 0x11F6, 0x8514, 0x11FA,
- 0x8515, 0x29F0, 0x8516, 0x29F8, 0x8517, 0x11F0, 0x8518, 0x2A08,
- 0x8519, 0x2A0C, 0x851A, 0x11F2, 0x851C, 0x29E7, 0x851D, 0x29FB,
- 0x851E, 0x29FF, 0x851F, 0x29E4, 0x8520, 0x2A09, 0x8521, 0x11F9,
- 0x8523, 0x11F8, 0x8524, 0x29DC, 0x8525, 0x11FC, 0x8526, 0x2A02,
- 0x8527, 0x29E6, 0x8528, 0x29FA, 0x8529, 0x29E0, 0x852A, 0x29EE,
- 0x852B, 0x29E9, 0x852C, 0x11F4, 0x852D, 0x11F5, 0x852E, 0x29FC,
- 0x852F, 0x2A0D, 0x8530, 0x2A0A, 0x8531, 0x2A01, 0x853B, 0x29DD,
- 0x853D, 0x11F1, 0x853E, 0x2C4F, 0x8540, 0x2C46, 0x8541, 0x2C49,
- 0x8543, 0x133B, 0x8544, 0x2C4B, 0x8545, 0x2C40, 0x8546, 0x2C47,
- 0x8547, 0x2C4D, 0x8548, 0x1338, 0x8549, 0x133C, 0x854A, 0x1336,
- 0x854D, 0x2C42, 0x854E, 0x2C52, 0x8551, 0x2C4C, 0x8553, 0x2C43,
- 0x8554, 0x2C5B, 0x8555, 0x2C55, 0x8556, 0x2C3F, 0x8557, 0x2E23,
- 0x8558, 0x2C45, 0x8559, 0x1337, 0x855B, 0x2C50, 0x855D, 0x2C5A,
- 0x855E, 0x133F, 0x8560, 0x2C57, 0x8561, 0x2C44, 0x8562, 0x2C4A,
- 0x8563, 0x2C4E, 0x8564, 0x2C48, 0x8565, 0x2C5C, 0x8566, 0x2C59,
- 0x8567, 0x2C56, 0x8568, 0x1339, 0x8569, 0x133A, 0x856A, 0x133E,
- 0x856B, 0x2C41, 0x856C, 0x2C5D, 0x856D, 0x133D, 0x856E, 0x2C53,
- 0x8571, 0x2C51, 0x8575, 0x2C54, 0x8576, 0x2E30, 0x8577, 0x2E1D,
- 0x8578, 0x2E22, 0x8579, 0x2E2F, 0x857A, 0x2E21, 0x857B, 0x2E19,
- 0x857C, 0x2E1E, 0x857E, 0x145C, 0x8580, 0x2E12, 0x8581, 0x2E2A,
- 0x8582, 0x2E2C, 0x8583, 0x2E11, 0x8584, 0x145B, 0x8585, 0x2E2E,
- 0x8586, 0x2E26, 0x8587, 0x1462, 0x8588, 0x2E2D, 0x8589, 0x2E1F,
- 0x858A, 0x1464, 0x858B, 0x2E17, 0x858C, 0x2C58, 0x858D, 0x2E27,
- 0x858E, 0x2E24, 0x858F, 0x2E13, 0x8590, 0x2E32, 0x8591, 0x145E,
- 0x8594, 0x145F, 0x8595, 0x2E15, 0x8596, 0x2E25, 0x8598, 0x2E31,
- 0x8599, 0x2E28, 0x859A, 0x2E1B, 0x859B, 0x1461, 0x859C, 0x145D,
- 0x859D, 0x2E29, 0x859E, 0x2E1C, 0x859F, 0x2E33, 0x85A0, 0x2E16,
- 0x85A1, 0x2E20, 0x85A2, 0x2E2B, 0x85A3, 0x2E18, 0x85A4, 0x2E1A,
- 0x85A6, 0x1465, 0x85A7, 0x2E14, 0x85A8, 0x1463, 0x85A9, 0x151C,
- 0x85AA, 0x145A, 0x85AF, 0x1460, 0x85B0, 0x1520, 0x85B1, 0x2FA6,
- 0x85B3, 0x2F9C, 0x85B4, 0x2F97, 0x85B5, 0x2F9D, 0x85B6, 0x2FA7,
- 0x85B7, 0x2FAB, 0x85B8, 0x2FAA, 0x85B9, 0x1522, 0x85BA, 0x1521,
- 0x85BD, 0x2F9E, 0x85BE, 0x2FAC, 0x85BF, 0x2FA1, 0x85C0, 0x2F99,
- 0x85C2, 0x2F9B, 0x85C3, 0x2F9A, 0x85C4, 0x2FA0, 0x85C5, 0x2FA5,
- 0x85C6, 0x2F98, 0x85C7, 0x2F9F, 0x85C8, 0x2FA4, 0x85C9, 0x151F,
- 0x85CB, 0x2FA2, 0x85CD, 0x151D, 0x85CE, 0x2FA3, 0x85CF, 0x151B,
- 0x85D0, 0x151E, 0x85D1, 0x3101, 0x85D2, 0x2FA8, 0x85D5, 0x15B7,
- 0x85D7, 0x30F9, 0x85D8, 0x30FD, 0x85D9, 0x30F5, 0x85DA, 0x30F8,
- 0x85DC, 0x3100, 0x85DD, 0x15B5, 0x85DE, 0x3105, 0x85DF, 0x30FE,
- 0x85E1, 0x30F6, 0x85E2, 0x3106, 0x85E3, 0x30FF, 0x85E4, 0x15B8,
- 0x85E5, 0x15B9, 0x85E6, 0x3103, 0x85E8, 0x30F7, 0x85E9, 0x15B4,
- 0x85EA, 0x15B6, 0x85EB, 0x30F2, 0x85EC, 0x30FA, 0x85ED, 0x30F4,
- 0x85EF, 0x3104, 0x85F0, 0x3102, 0x85F1, 0x30F3, 0x85F2, 0x30FB,
- 0x85F6, 0x3225, 0x85F7, 0x15BA, 0x85F8, 0x30FC, 0x85F9, 0x1638,
- 0x85FA, 0x163A, 0x85FB, 0x1637, 0x85FD, 0x322A, 0x85FE, 0x3222,
- 0x85FF, 0x3220, 0x8600, 0x3224, 0x8601, 0x3221, 0x8604, 0x3226,
- 0x8605, 0x3228, 0x8606, 0x163B, 0x8607, 0x163D, 0x8609, 0x3227,
- 0x860A, 0x163E, 0x860B, 0x163C, 0x860C, 0x3229, 0x8611, 0x1639,
- 0x8617, 0x1685, 0x8618, 0x32F6, 0x8619, 0x32FC, 0x861A, 0x1687,
- 0x861B, 0x3223, 0x861C, 0x32FB, 0x861E, 0x3302, 0x861F, 0x32F9,
- 0x8620, 0x3300, 0x8621, 0x32FF, 0x8622, 0x321F, 0x8623, 0x32FA,
- 0x8624, 0x2FA9, 0x8625, 0x3303, 0x8626, 0x32F8, 0x8627, 0x32FD,
- 0x8629, 0x3301, 0x862A, 0x32F7, 0x862C, 0x33AA, 0x862D, 0x1686,
- 0x862E, 0x32FE, 0x8631, 0x3432, 0x8632, 0x33AB, 0x8633, 0x33A9,
- 0x8634, 0x33A7, 0x8635, 0x33A8, 0x8636, 0x33AC, 0x8638, 0x1707,
- 0x8639, 0x3430, 0x863A, 0x342E, 0x863B, 0x3433, 0x863C, 0x3431,
- 0x863E, 0x3434, 0x863F, 0x1708, 0x8640, 0x342F, 0x8643, 0x3497,
- 0x8646, 0x34DF, 0x8647, 0x34E0, 0x8648, 0x34E1, 0x864B, 0x353E,
- 0x864C, 0x3536, 0x864D, 0x1818, 0x864E, 0x0689, 0x8650, 0x07FF,
- 0x8652, 0x1DE3, 0x8653, 0x1DE2, 0x8654, 0x09AF, 0x8655, 0x0B88,
- 0x8656, 0x203C, 0x8659, 0x203B, 0x865B, 0x0D48, 0x865C, 0x0EED,
- 0x865E, 0x0EEC, 0x865F, 0x0EEE, 0x8661, 0x27CE, 0x8662, 0x2A0E,
- 0x8663, 0x2C5E, 0x8664, 0x2C60, 0x8665, 0x2C5F, 0x8667, 0x1466,
- 0x8668, 0x2E34, 0x8669, 0x2FAD, 0x866A, 0x351E, 0x866B, 0x040F,
- 0x866D, 0x1A46, 0x866E, 0x1A47, 0x866F, 0x1A45, 0x8670, 0x1A44,
- 0x8671, 0x068A, 0x8673, 0x1BFD, 0x8674, 0x1BFB, 0x8677, 0x1BFA,
- 0x8679, 0x0800, 0x867A, 0x0802, 0x867B, 0x0801, 0x867C, 0x1BFC,
- 0x8685, 0x1DEF, 0x8686, 0x1DEC, 0x8687, 0x1DEA, 0x868A, 0x09B0,
- 0x868B, 0x1DED, 0x868C, 0x09B5, 0x868D, 0x1DE7, 0x868E, 0x1DF6,
- 0x8690, 0x1DF8, 0x8691, 0x1DE8, 0x8693, 0x09B2, 0x8694, 0x1DF9,
- 0x8695, 0x1DF4, 0x8696, 0x1DE6, 0x8697, 0x1DEB, 0x8698, 0x1DF5,
- 0x8699, 0x1DF1, 0x869A, 0x1DEE, 0x869C, 0x09B7, 0x869D, 0x1DF7,
- 0x869E, 0x1DE9, 0x86A1, 0x1DF2, 0x86A2, 0x1DE4, 0x86A3, 0x09B6,
- 0x86A4, 0x09B3, 0x86A5, 0x1DF0, 0x86A7, 0x1DF3, 0x86A8, 0x1DE5,
- 0x86A9, 0x09B4, 0x86AA, 0x09B1, 0x86AF, 0x0B92, 0x86B0, 0x2043,
- 0x86B1, 0x0B91, 0x86B3, 0x2046, 0x86B4, 0x2049, 0x86B5, 0x0B8E,
- 0x86B6, 0x0B8C, 0x86B7, 0x203E, 0x86B8, 0x2047, 0x86B9, 0x2045,
- 0x86BA, 0x2042, 0x86BB, 0x204A, 0x86BC, 0x204B, 0x86BD, 0x204D,
- 0x86BE, 0x204E, 0x86BF, 0x203D, 0x86C0, 0x0B8B, 0x86C1, 0x2040,
- 0x86C2, 0x203F, 0x86C3, 0x204C, 0x86C4, 0x0B8D, 0x86C5, 0x2041,
- 0x86C6, 0x0B8F, 0x86C7, 0x0B8A, 0x86C8, 0x2044, 0x86C9, 0x0B93,
- 0x86CB, 0x0B90, 0x86CC, 0x2048, 0x86D0, 0x0D4F, 0x86D1, 0x22D2,
- 0x86D3, 0x22C7, 0x86D4, 0x0D4C, 0x86D6, 0x256D, 0x86D7, 0x22D0,
- 0x86D8, 0x22C4, 0x86D9, 0x0D4A, 0x86DA, 0x22C9, 0x86DB, 0x0D4D,
- 0x86DC, 0x22CD, 0x86DD, 0x22CB, 0x86DE, 0x0D50, 0x86DF, 0x0D49,
- 0x86E2, 0x22C5, 0x86E3, 0x22C8, 0x86E4, 0x0D4E, 0x86E6, 0x22C6,
- 0x86E8, 0x22D1, 0x86E9, 0x22CF, 0x86EA, 0x22CA, 0x86EB, 0x22CC,
- 0x86EC, 0x22CE, 0x86ED, 0x0D4B, 0x86F5, 0x256E, 0x86F6, 0x2574,
- 0x86F7, 0x256A, 0x86F8, 0x2570, 0x86F9, 0x0EEF, 0x86FA, 0x256C,
- 0x86FB, 0x0EF5, 0x86FE, 0x0EF4, 0x8700, 0x0EF3, 0x8701, 0x2573,
- 0x8702, 0x0EF6, 0x8703, 0x0EF7, 0x8704, 0x2569, 0x8705, 0x2576,
- 0x8706, 0x0EF8, 0x8707, 0x0EF2, 0x8708, 0x0EF1, 0x8709, 0x2572,
- 0x870A, 0x0EF9, 0x870B, 0x2568, 0x870C, 0x256B, 0x870D, 0x2575,
- 0x870E, 0x2571, 0x8711, 0x27EE, 0x8712, 0x27E3, 0x8713, 0x0EF0,
- 0x8718, 0x1098, 0x8719, 0x27D7, 0x871A, 0x27EC, 0x871B, 0x27D8,
- 0x871C, 0x1093, 0x871E, 0x27D5, 0x8720, 0x27DE, 0x8721, 0x27D6,
- 0x8722, 0x1095, 0x8723, 0x27D0, 0x8724, 0x27EB, 0x8725, 0x1096,
- 0x8726, 0x27E8, 0x8727, 0x27E9, 0x8728, 0x27D1, 0x8729, 0x109B,
- 0x872A, 0x27E0, 0x872C, 0x27DA, 0x872D, 0x27E1, 0x872E, 0x27D4,
- 0x8730, 0x27ED, 0x8731, 0x27E5, 0x8732, 0x27DF, 0x8733, 0x27CF,
- 0x8734, 0x1097, 0x8735, 0x27E6, 0x8737, 0x109A, 0x8738, 0x27EA,
- 0x873A, 0x27E4, 0x873B, 0x1094, 0x873C, 0x27E2, 0x873E, 0x27DC,
- 0x873F, 0x1092, 0x8740, 0x27D3, 0x8741, 0x27DB, 0x8742, 0x27E7,
- 0x8743, 0x27D9, 0x8746, 0x27DD, 0x874C, 0x1208, 0x874D, 0x256F,
- 0x874E, 0x2A20, 0x874F, 0x2A29, 0x8750, 0x2A1F, 0x8751, 0x2A1B,
- 0x8752, 0x2A18, 0x8753, 0x1209, 0x8754, 0x2A16, 0x8755, 0x1099,
- 0x8756, 0x2A0F, 0x8757, 0x1207, 0x8758, 0x2A15, 0x8759, 0x1206,
- 0x875A, 0x2A1A, 0x875B, 0x2A17, 0x875C, 0x2A27, 0x875D, 0x2A22,
- 0x875E, 0x2A1C, 0x875F, 0x2A21, 0x8760, 0x1202, 0x8761, 0x2A19,
- 0x8762, 0x2A2C, 0x8763, 0x2A10, 0x8764, 0x2A11, 0x8765, 0x2A28,
- 0x8766, 0x1203, 0x8767, 0x2A2D, 0x8768, 0x1205, 0x8769, 0x2A2E,
- 0x876A, 0x2A1E, 0x876B, 0x27D2, 0x876C, 0x2A24, 0x876D, 0x2A1D,
- 0x876E, 0x2A26, 0x876F, 0x2A23, 0x8773, 0x2A14, 0x8774, 0x1200,
- 0x8775, 0x2A2B, 0x8776, 0x1201, 0x8777, 0x2A12, 0x8778, 0x1204,
- 0x8779, 0x2C6B, 0x877A, 0x2A25, 0x877B, 0x2A2A, 0x8781, 0x2C68,
- 0x8782, 0x11FF, 0x8783, 0x1340, 0x8784, 0x2C72, 0x8785, 0x2C6E,
- 0x8787, 0x2C6C, 0x8788, 0x2C67, 0x8789, 0x2C76, 0x878D, 0x1344,
- 0x878F, 0x2C63, 0x8790, 0x2C6F, 0x8791, 0x2C70, 0x8792, 0x2C66,
- 0x8793, 0x2C65, 0x8794, 0x2C73, 0x8796, 0x2C69, 0x8797, 0x2C64,
- 0x8798, 0x2C6A, 0x879A, 0x2C75, 0x879B, 0x2C62, 0x879C, 0x2C74,
- 0x879D, 0x2C71, 0x879E, 0x1342, 0x879F, 0x1341, 0x87A2, 0x1343,
- 0x87A3, 0x2C6D, 0x87A4, 0x2C61, 0x87AA, 0x2E36, 0x87AB, 0x146C,
- 0x87AC, 0x2E3A, 0x87AD, 0x2E37, 0x87AE, 0x2E3E, 0x87AF, 0x2E44,
- 0x87B0, 0x2E39, 0x87B2, 0x2E4D, 0x87B3, 0x1469, 0x87B4, 0x2E47,
- 0x87B5, 0x2E3C, 0x87B6, 0x2E48, 0x87B7, 0x2E43, 0x87B8, 0x2E4A,
- 0x87B9, 0x2E3B, 0x87BA, 0x146E, 0x87BB, 0x146D, 0x87BC, 0x2E3D,
- 0x87BD, 0x2E4B, 0x87BE, 0x2E35, 0x87BF, 0x2E49, 0x87C0, 0x1467,
- 0x87C2, 0x2E41, 0x87C3, 0x2E40, 0x87C4, 0x2E45, 0x87C5, 0x2E38,
- 0x87C6, 0x146B, 0x87C8, 0x146F, 0x87C9, 0x2E3F, 0x87CA, 0x2E46,
- 0x87CB, 0x1470, 0x87CC, 0x2E42, 0x87D1, 0x1468, 0x87D2, 0x146A,
- 0x87D3, 0x2FBA, 0x87D4, 0x2FB8, 0x87D7, 0x2FBE, 0x87D8, 0x2FBC,
- 0x87D9, 0x2FBF, 0x87DB, 0x2FB1, 0x87DC, 0x2FB9, 0x87DD, 0x2FC3,
- 0x87DE, 0x2E4C, 0x87DF, 0x2FB5, 0x87E0, 0x1526, 0x87E1, 0x2A13,
- 0x87E2, 0x2FB0, 0x87E3, 0x2FBD, 0x87E4, 0x2FB7, 0x87E5, 0x2FB4,
- 0x87E6, 0x2FAF, 0x87E7, 0x2FAE, 0x87E8, 0x2FC2, 0x87EA, 0x2FB3,
- 0x87EB, 0x2FB2, 0x87EC, 0x1524, 0x87ED, 0x2FBB, 0x87EF, 0x1523,
- 0x87F2, 0x1525, 0x87F3, 0x2FB6, 0x87F4, 0x2FC1, 0x87F6, 0x310A,
- 0x87F7, 0x310B, 0x87F9, 0x15BE, 0x87FA, 0x3108, 0x87FB, 0x15BB,
- 0x87FC, 0x3110, 0x87FE, 0x15BF, 0x87FF, 0x3112, 0x8800, 0x3107,
- 0x8801, 0x2FC0, 0x8802, 0x3114, 0x8803, 0x3109, 0x8805, 0x15BC,
- 0x8806, 0x310F, 0x8808, 0x3111, 0x8809, 0x310C, 0x880A, 0x3113,
- 0x880B, 0x310E, 0x880C, 0x310D, 0x880D, 0x15BD, 0x8810, 0x322C,
- 0x8811, 0x322D, 0x8813, 0x322F, 0x8814, 0x163F, 0x8815, 0x1640,
- 0x8816, 0x3230, 0x8817, 0x322E, 0x8819, 0x322B, 0x881B, 0x3306,
- 0x881C, 0x3309, 0x881D, 0x3305, 0x881F, 0x168B, 0x8820, 0x3307,
- 0x8821, 0x168A, 0x8822, 0x1689, 0x8823, 0x1688, 0x8824, 0x3308,
- 0x8825, 0x33B1, 0x8826, 0x33AF, 0x8828, 0x33AE, 0x8829, 0x3304,
- 0x882A, 0x33B0, 0x882B, 0x330A, 0x882C, 0x33AD, 0x882E, 0x3437,
- 0x882F, 0x3415, 0x8830, 0x3435, 0x8831, 0x1709, 0x8832, 0x3436,
- 0x8833, 0x3438, 0x8835, 0x349A, 0x8836, 0x1728, 0x8837, 0x3499,
- 0x8838, 0x3498, 0x8839, 0x1729, 0x883B, 0x1747, 0x883C, 0x3508,
- 0x883D, 0x3520, 0x883E, 0x351F, 0x883F, 0x3521, 0x8840, 0x0410,
- 0x8841, 0x1BFE, 0x8843, 0x1DFA, 0x8844, 0x1DFB, 0x8848, 0x22D3,
- 0x884A, 0x330B, 0x884B, 0x349B, 0x884C, 0x0411, 0x884D, 0x0803,
- 0x884E, 0x1BFF, 0x8852, 0x204F, 0x8853, 0x0B94, 0x8855, 0x22D5,
- 0x8856, 0x22D4, 0x8857, 0x0D51, 0x8859, 0x0EFA, 0x885A, 0x2A2F,
- 0x885B, 0x120A, 0x885D, 0x120B, 0x8861, 0x1345, 0x8862, 0x172A,
- 0x8863, 0x0412, 0x8867, 0x1C00, 0x8868, 0x068C, 0x8869, 0x1C02,
- 0x886A, 0x1C01, 0x886B, 0x0804, 0x886D, 0x1DFC, 0x886F, 0x1E03,
- 0x8870, 0x09B8, 0x8871, 0x1E01, 0x8872, 0x1DFF, 0x8874, 0x1E06,
- 0x8875, 0x1DFD, 0x8876, 0x1DFE, 0x8877, 0x09B9, 0x8879, 0x09BD,
- 0x887C, 0x1E07, 0x887D, 0x09BC, 0x887E, 0x1E05, 0x887F, 0x1E02,
- 0x8880, 0x1E00, 0x8881, 0x09BA, 0x8882, 0x09BB, 0x8883, 0x1E04,
- 0x8888, 0x0B96, 0x8889, 0x2050, 0x888B, 0x0B9B, 0x888C, 0x2060,
- 0x888D, 0x0B9A, 0x888E, 0x2062, 0x8891, 0x2056, 0x8892, 0x0B98,
- 0x8893, 0x2061, 0x8895, 0x2051, 0x8896, 0x0B99, 0x8897, 0x205D,
- 0x8898, 0x2059, 0x8899, 0x205B, 0x889A, 0x2055, 0x889B, 0x205C,
- 0x889E, 0x0B95, 0x889F, 0x2058, 0x88A1, 0x2057, 0x88A2, 0x2053,
- 0x88A4, 0x205E, 0x88A7, 0x205A, 0x88A8, 0x2052, 0x88AA, 0x2054,
- 0x88AB, 0x0B97, 0x88AC, 0x205F, 0x88B1, 0x0D54, 0x88B2, 0x22E0,
- 0x88B6, 0x22DC, 0x88B7, 0x22DE, 0x88B8, 0x22D9, 0x88B9, 0x22D8,
- 0x88BA, 0x22D6, 0x88BC, 0x22DD, 0x88BD, 0x22DF, 0x88BE, 0x22DB,
- 0x88C0, 0x22DA, 0x88C1, 0x0D52, 0x88C2, 0x0D53, 0x88C9, 0x22E2,
- 0x88CA, 0x0F02, 0x88CB, 0x2578, 0x88CC, 0x257E, 0x88CD, 0x2579,
- 0x88CE, 0x257A, 0x88CF, 0x36EA, 0x88D0, 0x257F, 0x88D2, 0x0F04,
- 0x88D4, 0x0EFC, 0x88D5, 0x0F03, 0x88D6, 0x2577, 0x88D7, 0x22D7,
- 0x88D8, 0x0EFF, 0x88D9, 0x0EFD, 0x88DA, 0x257D, 0x88DB, 0x257C,
- 0x88DC, 0x0EFE, 0x88DD, 0x0F00, 0x88DE, 0x257B, 0x88DF, 0x0EFB,
- 0x88E1, 0x0F01, 0x88E7, 0x27F0, 0x88E8, 0x10A2, 0x88EB, 0x27FB,
- 0x88EC, 0x27FA, 0x88EE, 0x27F5, 0x88EF, 0x10A4, 0x88F0, 0x27F9,
- 0x88F1, 0x27F1, 0x88F2, 0x27F2, 0x88F3, 0x109C, 0x88F4, 0x109E,
- 0x88F6, 0x27F7, 0x88F7, 0x27EF, 0x88F8, 0x10A0, 0x88F9, 0x109F,
- 0x88FA, 0x27F3, 0x88FB, 0x27F8, 0x88FC, 0x27F6, 0x88FD, 0x10A1,
- 0x88FE, 0x27F4, 0x8901, 0x22E1, 0x8902, 0x109D, 0x8905, 0x2A30,
- 0x8906, 0x2A37, 0x8907, 0x120D, 0x8909, 0x2A3B, 0x890A, 0x1211,
- 0x890B, 0x2A33, 0x890C, 0x2A31, 0x890E, 0x2A3A, 0x8910, 0x120C,
- 0x8911, 0x2A39, 0x8912, 0x120E, 0x8913, 0x120F, 0x8914, 0x2A32,
- 0x8915, 0x1210, 0x8916, 0x2A38, 0x8917, 0x2A34, 0x8918, 0x2A35,
- 0x8919, 0x2A36, 0x891A, 0x10A3, 0x891E, 0x2C77, 0x891F, 0x2C83,
- 0x8921, 0x134A, 0x8922, 0x2C7E, 0x8923, 0x2C80, 0x8925, 0x1348,
- 0x8926, 0x2C78, 0x8927, 0x2C7C, 0x8929, 0x2C7F, 0x892A, 0x1346,
- 0x892B, 0x1349, 0x892C, 0x2C82, 0x892D, 0x2C7A, 0x892E, 0x2C7B,
- 0x892F, 0x2C81, 0x8930, 0x2C79, 0x8931, 0x2C7D, 0x8932, 0x1347,
- 0x8933, 0x2E4F, 0x8935, 0x2E4E, 0x8936, 0x1472, 0x8937, 0x2E54,
- 0x8938, 0x1474, 0x893B, 0x1471, 0x893C, 0x2E50, 0x893D, 0x1475,
- 0x893E, 0x2E51, 0x8941, 0x2E52, 0x8942, 0x2E55, 0x8944, 0x1473,
- 0x8946, 0x2FC8, 0x8949, 0x2FCB, 0x894B, 0x2FC5, 0x894C, 0x2FC7,
- 0x894F, 0x2FC6, 0x8950, 0x2FC9, 0x8951, 0x2FCA, 0x8952, 0x2E53,
- 0x8953, 0x2FC4, 0x8956, 0x15C2, 0x8957, 0x3118, 0x8958, 0x311B,
- 0x8959, 0x311D, 0x895A, 0x3116, 0x895B, 0x3117, 0x895C, 0x311A,
- 0x895D, 0x311C, 0x895E, 0x15C3, 0x895F, 0x15C1, 0x8960, 0x15C0,
- 0x8961, 0x3119, 0x8962, 0x3115, 0x8963, 0x3231, 0x8964, 0x1641,
- 0x8966, 0x3232, 0x8969, 0x330D, 0x896A, 0x168C, 0x896B, 0x330F,
- 0x896C, 0x168D, 0x896D, 0x330C, 0x896E, 0x330E, 0x896F, 0x16D6,
- 0x8971, 0x33B2, 0x8972, 0x16D5, 0x8973, 0x343B, 0x8974, 0x343A,
- 0x8976, 0x3439, 0x8979, 0x34E2, 0x897A, 0x34E3, 0x897B, 0x34E5,
- 0x897C, 0x34E4, 0x897E, 0x1819, 0x897F, 0x0413, 0x8981, 0x0805,
- 0x8982, 0x2063, 0x8983, 0x0D55, 0x8985, 0x2580, 0x8986, 0x1527,
- 0x8988, 0x311E, 0x898B, 0x0508, 0x898F, 0x0B9D, 0x8993, 0x0B9C,
- 0x8995, 0x22E3, 0x8996, 0x0D56, 0x8997, 0x22E5, 0x8998, 0x22E4,
- 0x899B, 0x2581, 0x899C, 0x0F05, 0x899D, 0x27FC, 0x899E, 0x27FF,
- 0x899F, 0x27FE, 0x89A1, 0x27FD, 0x89A2, 0x2A3C, 0x89A3, 0x2A3E,
- 0x89A4, 0x2A3D, 0x89A6, 0x134C, 0x89AA, 0x134B, 0x89AC, 0x1476,
- 0x89AD, 0x2E56, 0x89AE, 0x2E58, 0x89AF, 0x2E57, 0x89B2, 0x1528,
- 0x89B6, 0x3120, 0x89B7, 0x311F, 0x89B9, 0x3233, 0x89BA, 0x1642,
- 0x89BD, 0x168E, 0x89BE, 0x33B4, 0x89BF, 0x33B3, 0x89C0, 0x1748,
- 0x89D2, 0x0509, 0x89D3, 0x1C03, 0x89D4, 0x0806, 0x89D5, 0x2066,
- 0x89D6, 0x2064, 0x89D9, 0x2065, 0x89DA, 0x22E7, 0x89DB, 0x22E8,
- 0x89DC, 0x2588, 0x89DD, 0x22E6, 0x89DF, 0x2582, 0x89E0, 0x2586,
- 0x89E1, 0x2585, 0x89E2, 0x2587, 0x89E3, 0x0F06, 0x89E4, 0x2584,
- 0x89E5, 0x2583, 0x89E6, 0x2589, 0x89E8, 0x2802, 0x89E9, 0x2800,
- 0x89EB, 0x2801, 0x89EC, 0x2A41, 0x89ED, 0x2A3F, 0x89F0, 0x2A40,
- 0x89F1, 0x2C84, 0x89F2, 0x2E59, 0x89F3, 0x2E5A, 0x89F4, 0x1529,
- 0x89F6, 0x3121, 0x89F7, 0x3234, 0x89F8, 0x1643, 0x89FA, 0x3310,
- 0x89FB, 0x33B5, 0x89FC, 0x16D7, 0x89FE, 0x343C, 0x89FF, 0x34E6,
- 0x8A00, 0x050A, 0x8A02, 0x0808, 0x8A03, 0x0809, 0x8A04, 0x1C04,
- 0x8A07, 0x1C05, 0x8A08, 0x0807, 0x8A0A, 0x09C3, 0x8A0C, 0x09C1,
- 0x8A0E, 0x09C0, 0x8A0F, 0x09C7, 0x8A10, 0x09BF, 0x8A11, 0x09C8,
- 0x8A12, 0x1E08, 0x8A13, 0x09C5, 0x8A15, 0x09C2, 0x8A16, 0x09C6,
- 0x8A17, 0x09C4, 0x8A18, 0x09BE, 0x8A1B, 0x0BA5, 0x8A1D, 0x0B9F,
- 0x8A1E, 0x206A, 0x8A1F, 0x0BA4, 0x8A22, 0x0BA6, 0x8A23, 0x0BA0,
- 0x8A25, 0x0BA1, 0x8A27, 0x2068, 0x8A2A, 0x0B9E, 0x8A2C, 0x2069,
- 0x8A2D, 0x0BA3, 0x8A30, 0x2067, 0x8A31, 0x0BA2, 0x8A34, 0x0D61,
- 0x8A36, 0x0D63, 0x8A39, 0x22EB, 0x8A3A, 0x0D62, 0x8A3B, 0x0D57,
- 0x8A3C, 0x0D5B, 0x8A3E, 0x0F19, 0x8A3F, 0x258E, 0x8A40, 0x22ED,
- 0x8A41, 0x0D5C, 0x8A44, 0x22F0, 0x8A45, 0x22F1, 0x8A46, 0x0D60,
- 0x8A48, 0x22F3, 0x8A4A, 0x22F5, 0x8A4C, 0x22F6, 0x8A4D, 0x22EA,
- 0x8A4E, 0x22E9, 0x8A4F, 0x22F7, 0x8A50, 0x0D5F, 0x8A51, 0x22F4,
- 0x8A52, 0x22F2, 0x8A54, 0x0D5D, 0x8A55, 0x0D59, 0x8A56, 0x0D64,
- 0x8A57, 0x22EE, 0x8A58, 0x22EF, 0x8A59, 0x22EC, 0x8A5B, 0x0D5E,
- 0x8A5E, 0x0D5A, 0x8A60, 0x0D58, 0x8A61, 0x258D, 0x8A62, 0x0F14,
- 0x8A63, 0x0F0F, 0x8A66, 0x0F0A, 0x8A68, 0x0F1A, 0x8A69, 0x0F0B,
- 0x8A6B, 0x0F07, 0x8A6C, 0x0F16, 0x8A6D, 0x0F13, 0x8A6E, 0x0F15,
- 0x8A70, 0x0F0C, 0x8A71, 0x0F11, 0x8A72, 0x0F08, 0x8A73, 0x0F09,
- 0x8A74, 0x2595, 0x8A75, 0x2592, 0x8A76, 0x258A, 0x8A77, 0x258F,
- 0x8A79, 0x0F17, 0x8A7A, 0x2596, 0x8A7B, 0x0F18, 0x8A7C, 0x0F0E,
- 0x8A7F, 0x258C, 0x8A81, 0x2594, 0x8A82, 0x2590, 0x8A83, 0x2593,
- 0x8A84, 0x2591, 0x8A85, 0x0F12, 0x8A86, 0x258B, 0x8A87, 0x0F0D,
- 0x8A8B, 0x2805, 0x8A8C, 0x10A6, 0x8A8D, 0x10A9, 0x8A8F, 0x2807,
- 0x8A91, 0x10B1, 0x8A92, 0x2806, 0x8A93, 0x10AB, 0x8A95, 0x1216,
- 0x8A96, 0x2808, 0x8A98, 0x10B0, 0x8A99, 0x2804, 0x8A9A, 0x10B2,
- 0x8A9E, 0x10A7, 0x8AA0, 0x0F10, 0x8AA1, 0x10AA, 0x8AA3, 0x10A8,
- 0x8AA4, 0x10AC, 0x8AA5, 0x10AE, 0x8AA6, 0x10A5, 0x8AA7, 0x10B3,
- 0x8AA8, 0x10AF, 0x8AAA, 0x10AD, 0x8AAB, 0x2803, 0x8AB0, 0x121D,
- 0x8AB2, 0x1219, 0x8AB6, 0x1220, 0x8AB8, 0x2A44, 0x8AB9, 0x1221,
- 0x8ABA, 0x2A50, 0x8ABB, 0x2A49, 0x8ABC, 0x1212, 0x8ABD, 0x2A51,
- 0x8ABE, 0x2A4B, 0x8ABF, 0x121C, 0x8AC0, 0x2A4C, 0x8AC2, 0x121B,
- 0x8AC3, 0x2A4F, 0x8AC4, 0x1215, 0x8AC5, 0x2A4D, 0x8AC6, 0x2A43,
- 0x8AC7, 0x1214, 0x8AC8, 0x2C8F, 0x8AC9, 0x121A, 0x8ACB, 0x1217,
- 0x8ACD, 0x121F, 0x8ACF, 0x2A42, 0x8AD1, 0x2A46, 0x8AD2, 0x1213,
- 0x8AD3, 0x2A45, 0x8AD4, 0x2A47, 0x8AD5, 0x2A48, 0x8AD6, 0x121E,
- 0x8AD7, 0x2A4A, 0x8AD8, 0x2A4E, 0x8AD9, 0x2A52, 0x8ADB, 0x1222,
- 0x8ADC, 0x1352, 0x8ADD, 0x2C8A, 0x8ADE, 0x2C90, 0x8ADF, 0x2C8D,
- 0x8AE0, 0x2C85, 0x8AE1, 0x2C91, 0x8AE2, 0x2C86, 0x8AE4, 0x2C8C,
- 0x8AE6, 0x134D, 0x8AE7, 0x1353, 0x8AE8, 0x2C92, 0x8AEB, 0x134F,
- 0x8AED, 0x1359, 0x8AEE, 0x1354, 0x8AEF, 0x2C94, 0x8AF0, 0x2C8E,
- 0x8AF1, 0x1350, 0x8AF2, 0x2C87, 0x8AF3, 0x135A, 0x8AF4, 0x2C88,
- 0x8AF5, 0x2C89, 0x8AF6, 0x135B, 0x8AF7, 0x1358, 0x8AF8, 0x1218,
- 0x8AFA, 0x134E, 0x8AFB, 0x2C95, 0x8AFC, 0x135C, 0x8AFE, 0x1355,
- 0x8AFF, 0x2C93, 0x8B00, 0x1351, 0x8B01, 0x1356, 0x8B02, 0x1357,
- 0x8B04, 0x147E, 0x8B05, 0x2E5F, 0x8B06, 0x2E68, 0x8B07, 0x2E65,
- 0x8B08, 0x2E67, 0x8B0A, 0x147B, 0x8B0B, 0x2E60, 0x8B0D, 0x2E66,
- 0x8B0E, 0x1477, 0x8B0F, 0x2E62, 0x8B10, 0x147F, 0x8B11, 0x2E5E,
- 0x8B12, 0x2E63, 0x8B13, 0x2E6A, 0x8B14, 0x2C8B, 0x8B15, 0x2E64,
- 0x8B16, 0x2E5D, 0x8B17, 0x1478, 0x8B18, 0x2E5C, 0x8B19, 0x1479,
- 0x8B1A, 0x2E6B, 0x8B1B, 0x147A, 0x8B1C, 0x2E69, 0x8B1D, 0x147D,
- 0x8B1E, 0x2E5B, 0x8B20, 0x147C, 0x8B22, 0x2E61, 0x8B23, 0x2FCE,
- 0x8B24, 0x2FDC, 0x8B25, 0x2FD7, 0x8B26, 0x2FD9, 0x8B27, 0x2FCD,
- 0x8B28, 0x152A, 0x8B2A, 0x2FCC, 0x8B2B, 0x152D, 0x8B2C, 0x152C,
- 0x8B2E, 0x2FDB, 0x8B2F, 0x2FD3, 0x8B30, 0x2FD0, 0x8B31, 0x2FD6,
- 0x8B33, 0x2FCF, 0x8B35, 0x2FD1, 0x8B36, 0x2FDA, 0x8B37, 0x2FD8,
- 0x8B39, 0x152B, 0x8B3A, 0x2FDF, 0x8B3B, 0x2FDD, 0x8B3C, 0x2FD4,
- 0x8B3D, 0x2FDE, 0x8B3E, 0x2FD5, 0x8B40, 0x3125, 0x8B41, 0x15C4,
- 0x8B42, 0x312C, 0x8B45, 0x3313, 0x8B46, 0x15CB, 0x8B47, 0x2FD2,
- 0x8B48, 0x3123, 0x8B49, 0x15C7, 0x8B4A, 0x3124, 0x8B4B, 0x3129,
- 0x8B4E, 0x15C9, 0x8B4F, 0x15CA, 0x8B50, 0x3122, 0x8B51, 0x312B,
- 0x8B52, 0x312D, 0x8B53, 0x3126, 0x8B54, 0x3128, 0x8B55, 0x312A,
- 0x8B56, 0x3127, 0x8B57, 0x312E, 0x8B58, 0x15C6, 0x8B59, 0x15CC,
- 0x8B5A, 0x15C8, 0x8B5C, 0x15C5, 0x8B5D, 0x3237, 0x8B5F, 0x1648,
- 0x8B60, 0x3235, 0x8B63, 0x3239, 0x8B65, 0x323A, 0x8B66, 0x1646,
- 0x8B67, 0x323B, 0x8B68, 0x3238, 0x8B6A, 0x3236, 0x8B6B, 0x1649,
- 0x8B6C, 0x1645, 0x8B6D, 0x323C, 0x8B6F, 0x1647, 0x8B70, 0x1644,
- 0x8B74, 0x168F, 0x8B77, 0x1690, 0x8B78, 0x3312, 0x8B79, 0x3311,
- 0x8B7A, 0x3314, 0x8B7B, 0x3315, 0x8B7D, 0x1691, 0x8B7E, 0x33B6,
- 0x8B7F, 0x33BB, 0x8B80, 0x16D8, 0x8B82, 0x33B8, 0x8B84, 0x33B7,
- 0x8B85, 0x33BA, 0x8B86, 0x33B9, 0x8B88, 0x3440, 0x8B8A, 0x170A,
- 0x8B8B, 0x343F, 0x8B8C, 0x343D, 0x8B8E, 0x343E, 0x8B92, 0x172C,
- 0x8B93, 0x172B, 0x8B94, 0x349C, 0x8B95, 0x349D, 0x8B96, 0x172D,
- 0x8B98, 0x34E7, 0x8B99, 0x34E8, 0x8B9A, 0x1754, 0x8B9C, 0x175A,
- 0x8B9E, 0x3522, 0x8B9F, 0x353F, 0x8C37, 0x050B, 0x8C39, 0x206B,
- 0x8C3B, 0x206C, 0x8C3C, 0x2597, 0x8C3D, 0x2809, 0x8C3E, 0x2A53,
- 0x8C3F, 0x1481, 0x8C41, 0x1480, 0x8C42, 0x2FE0, 0x8C43, 0x312F,
- 0x8C45, 0x3441, 0x8C46, 0x050C, 0x8C47, 0x1E09, 0x8C48, 0x09C9,
- 0x8C49, 0x0BA7, 0x8C4A, 0x2599, 0x8C4B, 0x2598, 0x8C4C, 0x1223,
- 0x8C4D, 0x2A54, 0x8C4E, 0x1224, 0x8C4F, 0x2E6C, 0x8C50, 0x152E,
- 0x8C54, 0x1763, 0x8C55, 0x050D, 0x8C56, 0x1A48, 0x8C57, 0x1E0A,
- 0x8C5A, 0x0BA8, 0x8C5C, 0x206D, 0x8C5D, 0x206E, 0x8C5F, 0x22F8,
- 0x8C61, 0x0D65, 0x8C62, 0x0F1B, 0x8C64, 0x259B, 0x8C65, 0x259A,
- 0x8C66, 0x259C, 0x8C68, 0x280A, 0x8C69, 0x280B, 0x8C6A, 0x10B4,
- 0x8C6B, 0x135D, 0x8C6C, 0x1225, 0x8C6D, 0x135E, 0x8C6F, 0x2E70,
- 0x8C70, 0x2E6D, 0x8C71, 0x2E6F, 0x8C72, 0x2E6E, 0x8C73, 0x1482,
- 0x8C75, 0x2FE1, 0x8C76, 0x3131, 0x8C77, 0x3130, 0x8C78, 0x18E7,
- 0x8C79, 0x09CB, 0x8C7A, 0x09CA, 0x8C7B, 0x1E0B, 0x8C7D, 0x206F,
- 0x8C80, 0x22FA, 0x8C81, 0x22F9, 0x8C82, 0x0D66, 0x8C84, 0x259E,
- 0x8C85, 0x259F, 0x8C86, 0x259D, 0x8C89, 0x0F1D, 0x8C8A, 0x0F1C,
- 0x8C8C, 0x10B6, 0x8C8D, 0x10B5, 0x8C8F, 0x2A55, 0x8C90, 0x2C98,
- 0x8C91, 0x2C96, 0x8C92, 0x2C97, 0x8C93, 0x135F, 0x8C94, 0x2E72,
- 0x8C95, 0x2E71, 0x8C97, 0x2FE4, 0x8C98, 0x2FE3, 0x8C99, 0x2FE2,
- 0x8C9A, 0x3132, 0x8C9C, 0x3523, 0x8C9D, 0x050E, 0x8C9E, 0x080A,
- 0x8CA0, 0x080B, 0x8CA1, 0x09CC, 0x8CA2, 0x09CD, 0x8CA3, 0x1E0D,
- 0x8CA4, 0x1E0C, 0x8CA5, 0x2070, 0x8CA7, 0x0BAE, 0x8CA8, 0x0BAC,
- 0x8CA9, 0x0BA9, 0x8CAA, 0x0BAD, 0x8CAB, 0x0BAB, 0x8CAC, 0x0BAA,
- 0x8CAF, 0x0D67, 0x8CB0, 0x22FD, 0x8CB2, 0x0F22, 0x8CB3, 0x0D69,
- 0x8CB4, 0x0D6E, 0x8CB5, 0x22FF, 0x8CB6, 0x0D70, 0x8CB7, 0x0D6F,
- 0x8CB8, 0x0D72, 0x8CB9, 0x22FE, 0x8CBA, 0x22FB, 0x8CBB, 0x0D6C,
- 0x8CBC, 0x0D68, 0x8CBD, 0x0D6A, 0x8CBE, 0x22FC, 0x8CBF, 0x0D71,
- 0x8CC0, 0x0D6D, 0x8CC1, 0x0D6B, 0x8CC2, 0x0F24, 0x8CC3, 0x0F23,
- 0x8CC4, 0x0F21, 0x8CC5, 0x0F25, 0x8CC7, 0x0F1F, 0x8CC8, 0x0F20,
- 0x8CCA, 0x0F1E, 0x8CCC, 0x25A0, 0x8CCF, 0x280D, 0x8CD1, 0x10B8,
- 0x8CD2, 0x10B9, 0x8CD3, 0x10B7, 0x8CD5, 0x280C, 0x8CD7, 0x280E,
- 0x8CD9, 0x2A58, 0x8CDA, 0x2A5A, 0x8CDC, 0x122E, 0x8CDD, 0x2A5B,
- 0x8CDE, 0x1227, 0x8CDF, 0x2A57, 0x8CE0, 0x1226, 0x8CE1, 0x1230,
- 0x8CE2, 0x122C, 0x8CE3, 0x122D, 0x8CE4, 0x1229, 0x8CE5, 0x2A56,
- 0x8CE6, 0x1228, 0x8CE7, 0x2A5C, 0x8CE8, 0x2A59, 0x8CEA, 0x122F,
- 0x8CEC, 0x122A, 0x8CED, 0x122B, 0x8CEE, 0x2C9A, 0x8CF0, 0x2C9C,
- 0x8CF1, 0x2C9B, 0x8CF3, 0x2C9D, 0x8CF4, 0x1360, 0x8CF5, 0x2C99,
- 0x8CF8, 0x1486, 0x8CF9, 0x2E73, 0x8CFA, 0x1483, 0x8CFB, 0x1487,
- 0x8CFC, 0x1485, 0x8CFD, 0x1484, 0x8CFE, 0x2FE5, 0x8D00, 0x2FE8,
- 0x8D02, 0x2FE7, 0x8D04, 0x2FE6, 0x8D05, 0x152F, 0x8D06, 0x3133,
- 0x8D07, 0x3134, 0x8D08, 0x15CD, 0x8D09, 0x3135, 0x8D0A, 0x15CE,
- 0x8D0D, 0x164B, 0x8D0F, 0x164A, 0x8D10, 0x3316, 0x8D13, 0x1692,
- 0x8D14, 0x3317, 0x8D15, 0x33BC, 0x8D16, 0x16D9, 0x8D17, 0x16DA,
- 0x8D19, 0x3442, 0x8D1B, 0x172F, 0x8D64, 0x050F, 0x8D66, 0x0BB0,
- 0x8D67, 0x0BAF, 0x8D68, 0x25A1, 0x8D69, 0x25A2, 0x8D6B, 0x10BA,
- 0x8D6C, 0x2C9E, 0x8D6D, 0x1231, 0x8D6E, 0x2C9F, 0x8D6F, 0x2E74,
- 0x8D70, 0x0510, 0x8D72, 0x1C06, 0x8D73, 0x080D, 0x8D74, 0x080C,
- 0x8D76, 0x1E0E, 0x8D77, 0x09CE, 0x8D78, 0x1E0F, 0x8D79, 0x2073,
- 0x8D7B, 0x2072, 0x8D7D, 0x2071, 0x8D80, 0x2301, 0x8D81, 0x0D75,
- 0x8D84, 0x2300, 0x8D85, 0x0D74, 0x8D89, 0x2302, 0x8D8A, 0x0D73,
- 0x8D8C, 0x25A4, 0x8D8D, 0x25A7, 0x8D8E, 0x25A5, 0x8D8F, 0x25A6,
- 0x8D90, 0x25AA, 0x8D91, 0x25A3, 0x8D92, 0x25AB, 0x8D93, 0x25A8,
- 0x8D94, 0x25A9, 0x8D95, 0x10BC, 0x8D96, 0x280F, 0x8D99, 0x10BB,
- 0x8D9B, 0x2A60, 0x8D9C, 0x2A5E, 0x8D9F, 0x1232, 0x8DA0, 0x2A5D,
- 0x8DA1, 0x2A5F, 0x8DA3, 0x1233, 0x8DA5, 0x2CA0, 0x8DA7, 0x2CA1,
- 0x8DA8, 0x1488, 0x8DAA, 0x3137, 0x8DAB, 0x3139, 0x8DAC, 0x3136,
- 0x8DAD, 0x3138, 0x8DAE, 0x323D, 0x8DAF, 0x3318, 0x8DB2, 0x3509,
- 0x8DB3, 0x0511, 0x8DB4, 0x080E, 0x8DB5, 0x1E10, 0x8DB6, 0x1E12,
- 0x8DB7, 0x1E11, 0x8DB9, 0x2076, 0x8DBA, 0x0BB2, 0x8DBC, 0x2074,
- 0x8DBE, 0x0BB1, 0x8DBF, 0x2077, 0x8DC1, 0x2078, 0x8DC2, 0x2075,
- 0x8DC5, 0x230E, 0x8DC6, 0x0D7D, 0x8DC7, 0x2306, 0x8DC8, 0x230C,
- 0x8DCB, 0x0D78, 0x8DCC, 0x0D7B, 0x8DCD, 0x2305, 0x8DCE, 0x0D76,
- 0x8DCF, 0x2309, 0x8DD0, 0x25B1, 0x8DD1, 0x0D7A, 0x8DD3, 0x2304,
- 0x8DD5, 0x230A, 0x8DD6, 0x2307, 0x8DD7, 0x230D, 0x8DD8, 0x2303,
- 0x8DD9, 0x230B, 0x8DDA, 0x0D79, 0x8DDB, 0x0D7C, 0x8DDC, 0x2308,
- 0x8DDD, 0x0D77, 0x8DDF, 0x0F27, 0x8DE0, 0x25AD, 0x8DE1, 0x0F26,
- 0x8DE2, 0x25B4, 0x8DE3, 0x25B3, 0x8DE4, 0x0F2D, 0x8DE6, 0x0F2E,
- 0x8DE7, 0x25B5, 0x8DE8, 0x0F28, 0x8DE9, 0x25B2, 0x8DEA, 0x0F2C,
- 0x8DEB, 0x25B7, 0x8DEC, 0x25AE, 0x8DEE, 0x25B0, 0x8DEF, 0x0F29,
- 0x8DF0, 0x25AC, 0x8DF1, 0x25AF, 0x8DF2, 0x25B6, 0x8DF3, 0x0F2A,
- 0x8DF4, 0x25B8, 0x8DFA, 0x0F2B, 0x8DFC, 0x10BD, 0x8DFD, 0x2814,
- 0x8DFE, 0x281A, 0x8DFF, 0x2812, 0x8E00, 0x281B, 0x8E02, 0x2811,
- 0x8E03, 0x2816, 0x8E04, 0x281C, 0x8E05, 0x2819, 0x8E06, 0x2818,
- 0x8E07, 0x2817, 0x8E09, 0x2810, 0x8E0A, 0x2815, 0x8E0D, 0x2813,
- 0x8E0F, 0x1238, 0x8E10, 0x1235, 0x8E11, 0x2A69, 0x8E12, 0x2A6E,
- 0x8E13, 0x2A70, 0x8E14, 0x2A6D, 0x8E15, 0x2A66, 0x8E16, 0x2A68,
- 0x8E17, 0x2A72, 0x8E18, 0x2A6F, 0x8E19, 0x2A6A, 0x8E1A, 0x2A73,
- 0x8E1B, 0x2A67, 0x8E1C, 0x2A71, 0x8E1D, 0x1236, 0x8E1E, 0x123C,
- 0x8E1F, 0x123A, 0x8E20, 0x2A61, 0x8E21, 0x123B, 0x8E22, 0x1237,
- 0x8E23, 0x2A62, 0x8E24, 0x2A64, 0x8E25, 0x2A63, 0x8E26, 0x2A6B,
- 0x8E27, 0x2A6C, 0x8E29, 0x1239, 0x8E2B, 0x1234, 0x8E2E, 0x2A65,
- 0x8E30, 0x2CAB, 0x8E31, 0x1362, 0x8E33, 0x2CA2, 0x8E34, 0x1363,
- 0x8E35, 0x1366, 0x8E36, 0x2CA7, 0x8E38, 0x2CA4, 0x8E39, 0x1365,
- 0x8E3C, 0x2CA8, 0x8E3D, 0x2CA9, 0x8E3E, 0x2CA3, 0x8E3F, 0x2CAC,
- 0x8E40, 0x2CA5, 0x8E41, 0x2CAA, 0x8E42, 0x1364, 0x8E44, 0x1361,
- 0x8E45, 0x2CA6, 0x8E47, 0x2E7A, 0x8E48, 0x148B, 0x8E49, 0x1489,
- 0x8E4A, 0x148C, 0x8E4B, 0x148A, 0x8E4C, 0x2E79, 0x8E4D, 0x2E76,
- 0x8E4E, 0x2E75, 0x8E50, 0x2E78, 0x8E53, 0x2E77, 0x8E54, 0x2FF6,
- 0x8E55, 0x1535, 0x8E56, 0x2FED, 0x8E57, 0x2FEC, 0x8E59, 0x1530,
- 0x8E5A, 0x2FF2, 0x8E5B, 0x2FF1, 0x8E5C, 0x2FE9, 0x8E5D, 0x2FF4,
- 0x8E5E, 0x2FEE, 0x8E5F, 0x1534, 0x8E60, 0x2FEB, 0x8E61, 0x2FF3,
- 0x8E62, 0x2FEA, 0x8E63, 0x1531, 0x8E64, 0x1533, 0x8E65, 0x2FEF,
- 0x8E66, 0x1532, 0x8E67, 0x2FF0, 0x8E69, 0x2FF5, 0x8E6A, 0x313D,
- 0x8E6C, 0x15D3, 0x8E6D, 0x313A, 0x8E6F, 0x313E, 0x8E72, 0x15D0,
- 0x8E73, 0x313C, 0x8E74, 0x15D5, 0x8E76, 0x15D2, 0x8E78, 0x313B,
- 0x8E7A, 0x15D4, 0x8E7B, 0x313F, 0x8E7C, 0x15CF, 0x8E81, 0x164D,
- 0x8E82, 0x164F, 0x8E84, 0x3240, 0x8E85, 0x164E, 0x8E86, 0x323E,
- 0x8E87, 0x15D1, 0x8E88, 0x323F, 0x8E89, 0x164C, 0x8E8A, 0x1693,
- 0x8E8B, 0x1695, 0x8E8C, 0x331A, 0x8E8D, 0x1694, 0x8E8E, 0x3319,
- 0x8E90, 0x33C1, 0x8E91, 0x16DB, 0x8E92, 0x33C0, 0x8E93, 0x16DC,
- 0x8E94, 0x33BE, 0x8E95, 0x33BD, 0x8E96, 0x33C2, 0x8E97, 0x33C3,
- 0x8E98, 0x3443, 0x8E9A, 0x33BF, 0x8E9D, 0x34A1, 0x8E9E, 0x349E,
- 0x8E9F, 0x349F, 0x8EA0, 0x34A0, 0x8EA1, 0x1749, 0x8EA3, 0x34EB,
- 0x8EA4, 0x34EA, 0x8EA5, 0x34E9, 0x8EA6, 0x350A, 0x8EA8, 0x3537,
- 0x8EA9, 0x3524, 0x8EAA, 0x175B, 0x8EAB, 0x0512, 0x8EAC, 0x09CF,
- 0x8EB2, 0x0F2F, 0x8EBA, 0x123D, 0x8EBD, 0x2CAD, 0x8EC0, 0x1536,
- 0x8EC2, 0x3140, 0x8EC9, 0x3525, 0x8ECA, 0x0513, 0x8ECB, 0x068D,
- 0x8ECC, 0x0810, 0x8ECD, 0x080F, 0x8ECF, 0x09D2, 0x8ED1, 0x1E13,
- 0x8ED2, 0x09D0, 0x8ED3, 0x1E14, 0x8ED4, 0x09D1, 0x8ED7, 0x207D,
- 0x8ED8, 0x2079, 0x8EDB, 0x0BB3, 0x8EDC, 0x207C, 0x8EDD, 0x207B,
- 0x8EDE, 0x207A, 0x8EDF, 0x0BB4, 0x8EE0, 0x207E, 0x8EE1, 0x207F,
- 0x8EE5, 0x2315, 0x8EE6, 0x2313, 0x8EE7, 0x2317, 0x8EE8, 0x2318,
- 0x8EE9, 0x231E, 0x8EEB, 0x231A, 0x8EEC, 0x231C, 0x8EEE, 0x2314,
- 0x8EEF, 0x230F, 0x8EF1, 0x231B, 0x8EF4, 0x231D, 0x8EF5, 0x2316,
- 0x8EF6, 0x2319, 0x8EF7, 0x2310, 0x8EF8, 0x0D7F, 0x8EF9, 0x2312,
- 0x8EFA, 0x2311, 0x8EFB, 0x0D7E, 0x8EFC, 0x0D80, 0x8EFE, 0x0F32,
- 0x8EFF, 0x25BA, 0x8F00, 0x25BC, 0x8F01, 0x25BB, 0x8F02, 0x25C0,
- 0x8F03, 0x0F30, 0x8F05, 0x25BD, 0x8F06, 0x25B9, 0x8F07, 0x25BE,
- 0x8F08, 0x25BF, 0x8F09, 0x0F31, 0x8F0A, 0x0F33, 0x8F0B, 0x25C1,
- 0x8F0D, 0x2820, 0x8F0E, 0x281F, 0x8F10, 0x281D, 0x8F11, 0x281E,
- 0x8F12, 0x10BF, 0x8F13, 0x10C1, 0x8F14, 0x10BE, 0x8F15, 0x10C0,
- 0x8F16, 0x2A7A, 0x8F17, 0x2A7B, 0x8F18, 0x2A76, 0x8F1A, 0x2A77,
- 0x8F1B, 0x123F, 0x8F1C, 0x1244, 0x8F1D, 0x123E, 0x8F1E, 0x1245,
- 0x8F1F, 0x1240, 0x8F20, 0x2A78, 0x8F23, 0x2A79, 0x8F24, 0x2A75,
- 0x8F25, 0x1246, 0x8F26, 0x1242, 0x8F29, 0x1241, 0x8F2A, 0x1243,
- 0x8F2C, 0x2A74, 0x8F2E, 0x2CAF, 0x8F2F, 0x1368, 0x8F32, 0x2CB1,
- 0x8F33, 0x136A, 0x8F34, 0x2CB4, 0x8F35, 0x2CB0, 0x8F36, 0x2CAE,
- 0x8F37, 0x2CB3, 0x8F38, 0x1369, 0x8F39, 0x2CB2, 0x8F3B, 0x1367,
- 0x8F3E, 0x148E, 0x8F3F, 0x1491, 0x8F40, 0x2E7C, 0x8F42, 0x148F,
- 0x8F43, 0x2E7B, 0x8F44, 0x148D, 0x8F45, 0x1490, 0x8F46, 0x2FF7,
- 0x8F47, 0x2FF8, 0x8F48, 0x2FF9, 0x8F49, 0x1537, 0x8F4B, 0x2FFA,
- 0x8F4D, 0x1538, 0x8F4E, 0x15D7, 0x8F4F, 0x3143, 0x8F50, 0x3144,
- 0x8F51, 0x3142, 0x8F52, 0x3141, 0x8F53, 0x3145, 0x8F54, 0x15D6,
- 0x8F55, 0x3244, 0x8F56, 0x3242, 0x8F57, 0x3243, 0x8F58, 0x3245,
- 0x8F59, 0x3241, 0x8F5A, 0x3246, 0x8F5B, 0x331C, 0x8F5D, 0x331D,
- 0x8F5E, 0x331B, 0x8F5F, 0x1696, 0x8F60, 0x33C4, 0x8F61, 0x16DD,
- 0x8F62, 0x33C5, 0x8F63, 0x3445, 0x8F64, 0x3444, 0x8F9B, 0x0514,
- 0x8F9C, 0x0D81, 0x8F9F, 0x0F34, 0x8FA3, 0x10C2, 0x8FA6, 0x136C,
- 0x8FA8, 0x136B, 0x8FAD, 0x15D8, 0x8FAE, 0x162F, 0x8FAF, 0x1697,
- 0x8FB0, 0x0515, 0x8FB1, 0x09D3, 0x8FB2, 0x0F35, 0x8FB4, 0x3146,
- 0x8FB5, 0x0230, 0x8FBF, 0x18E9, 0x8FC2, 0x0516, 0x8FC4, 0x0519,
- 0x8FC5, 0x0518, 0x8FC6, 0x0517, 0x8FC9, 0x18E8, 0x8FCB, 0x1A4A,
- 0x8FCD, 0x1A4C, 0x8FCE, 0x068E, 0x8FD1, 0x0690, 0x8FD2, 0x1A49,
- 0x8FD3, 0x1A4B, 0x8FD4, 0x068F, 0x8FD5, 0x1A4E, 0x8FD6, 0x1A4D,
- 0x8FD7, 0x1A4F, 0x8FE0, 0x1C0A, 0x8FE1, 0x1C08, 0x8FE2, 0x0813,
- 0x8FE3, 0x1C07, 0x8FE4, 0x0818, 0x8FE5, 0x0815, 0x8FE6, 0x0812,
- 0x8FE8, 0x0819, 0x8FEA, 0x0814, 0x8FEB, 0x0817, 0x8FED, 0x0816,
- 0x8FEE, 0x1C09, 0x8FF0, 0x0811, 0x8FF4, 0x09D9, 0x8FF5, 0x1E16,
- 0x8FF6, 0x1E1C, 0x8FF7, 0x09D6, 0x8FF8, 0x09DD, 0x8FFA, 0x09D8,
- 0x8FFB, 0x1E19, 0x8FFC, 0x1E1B, 0x8FFD, 0x09DB, 0x8FFE, 0x1E15,
- 0x8FFF, 0x1E18, 0x9000, 0x09D7, 0x9001, 0x09D4, 0x9002, 0x1E17,
- 0x9003, 0x09DA, 0x9004, 0x1E1A, 0x9005, 0x09DC, 0x9006, 0x09D5,
- 0x900B, 0x2081, 0x900C, 0x2084, 0x900D, 0x0BB6, 0x900F, 0x0BC0,
- 0x9010, 0x0BBC, 0x9011, 0x2082, 0x9014, 0x0BC4, 0x9015, 0x0BBD,
- 0x9016, 0x0BC2, 0x9017, 0x0BB8, 0x9019, 0x0BB5, 0x901A, 0x0BB7,
- 0x901B, 0x0BC3, 0x901C, 0x2083, 0x901D, 0x0BBB, 0x901E, 0x0BBE,
- 0x901F, 0x0BBA, 0x9020, 0x0BBF, 0x9021, 0x2085, 0x9022, 0x0BC1,
- 0x9023, 0x0BB9, 0x9024, 0x2080, 0x902D, 0x231F, 0x902E, 0x0D82,
- 0x902F, 0x2321, 0x9031, 0x0D84, 0x9032, 0x0D86, 0x9034, 0x2320,
- 0x9035, 0x0D83, 0x9036, 0x0D87, 0x9038, 0x0D85, 0x903C, 0x0F3B,
- 0x903D, 0x25C6, 0x903E, 0x0F43, 0x903F, 0x25C3, 0x9041, 0x0F44,
- 0x9042, 0x0F39, 0x9044, 0x25C4, 0x9047, 0x0F3E, 0x9049, 0x25C5,
- 0x904A, 0x0F37, 0x904B, 0x0F36, 0x904D, 0x0F41, 0x904E, 0x0F40,
- 0x904F, 0x0F3F, 0x9050, 0x0F3D, 0x9051, 0x0F42, 0x9052, 0x25C2,
- 0x9053, 0x0F38, 0x9054, 0x0F3A, 0x9055, 0x0F3C, 0x9058, 0x10C4,
- 0x9059, 0x10C7, 0x905B, 0x10CB, 0x905C, 0x10C5, 0x905D, 0x10CA,
- 0x905E, 0x10C8, 0x9060, 0x10C3, 0x9062, 0x10C9, 0x9063, 0x10C6,
- 0x9067, 0x2A7F, 0x9068, 0x1249, 0x9069, 0x1247, 0x906B, 0x2A80,
- 0x906D, 0x124A, 0x906E, 0x1248, 0x906F, 0x2A7E, 0x9070, 0x2A7D,
- 0x9072, 0x1370, 0x9073, 0x2A7C, 0x9074, 0x136E, 0x9075, 0x136D,
- 0x9076, 0x2CB5, 0x9077, 0x124B, 0x9078, 0x136F, 0x9079, 0x2CB6,
- 0x907A, 0x1372, 0x907B, 0x2CB7, 0x907C, 0x1371, 0x907D, 0x1493,
- 0x907E, 0x2E7E, 0x907F, 0x1492, 0x9080, 0x1497, 0x9081, 0x1495,
- 0x9082, 0x1496, 0x9083, 0x153A, 0x9084, 0x1494, 0x9085, 0x2E7D,
- 0x9086, 0x2CB8, 0x9087, 0x1539, 0x9088, 0x153B, 0x908A, 0x15D9,
- 0x908B, 0x15DA, 0x908D, 0x3247, 0x908F, 0x170C, 0x9090, 0x170B,
- 0x9091, 0x051B, 0x9094, 0x181E, 0x9095, 0x09DE, 0x9097, 0x181B,
- 0x9098, 0x181C, 0x9099, 0x181A, 0x909B, 0x181D, 0x909E, 0x18ED,
- 0x909F, 0x18EA, 0x90A0, 0x18EF, 0x90A1, 0x18EB, 0x90A2, 0x051C,
- 0x90A3, 0x051F, 0x90A5, 0x18EC, 0x90A6, 0x051E, 0x90A7, 0x18EE,
- 0x90AA, 0x051D, 0x90AF, 0x1A52, 0x90B0, 0x1A54, 0x90B1, 0x0693,
- 0x90B2, 0x1A50, 0x90B3, 0x1A53, 0x90B4, 0x1A51, 0x90B5, 0x0691,
- 0x90B6, 0x0694, 0x90B8, 0x0692, 0x90BD, 0x1C0C, 0x90BE, 0x1C10,
- 0x90BF, 0x1C0D, 0x90C1, 0x081C, 0x90C3, 0x081D, 0x90C5, 0x1C0F,
- 0x90C7, 0x1C11, 0x90C8, 0x1C13, 0x90CA, 0x081A, 0x90CB, 0x1C12,
- 0x90CE, 0x081B, 0x90D4, 0x208C, 0x90D5, 0x1C0E, 0x90D6, 0x1E1D,
- 0x90D7, 0x1E26, 0x90D8, 0x1E24, 0x90D9, 0x1E1F, 0x90DA, 0x1E20,
- 0x90DB, 0x1E25, 0x90DC, 0x1E27, 0x90DD, 0x09E0, 0x90DF, 0x1E22,
- 0x90E0, 0x1E1E, 0x90E1, 0x09DF, 0x90E2, 0x09E1, 0x90E3, 0x1E21,
- 0x90E4, 0x1E28, 0x90E5, 0x1E23, 0x90E8, 0x0BC5, 0x90E9, 0x208F,
- 0x90EA, 0x2087, 0x90EB, 0x208D, 0x90EC, 0x208E, 0x90ED, 0x0BC6,
- 0x90EF, 0x2086, 0x90F0, 0x2088, 0x90F1, 0x1C0B, 0x90F2, 0x208A,
- 0x90F3, 0x208B, 0x90F4, 0x2089, 0x90F5, 0x0D89, 0x90F9, 0x2328,
- 0x90FA, 0x2CB9, 0x90FB, 0x2329, 0x90FC, 0x2326, 0x90FD, 0x0BC7,
- 0x90FE, 0x0D8B, 0x90FF, 0x2325, 0x9100, 0x232B, 0x9101, 0x232A,
- 0x9102, 0x0D88, 0x9103, 0x232E, 0x9104, 0x2324, 0x9105, 0x232D,
- 0x9106, 0x2322, 0x9107, 0x232C, 0x9108, 0x2327, 0x9109, 0x0D8A,
- 0x910B, 0x25CD, 0x910D, 0x25C8, 0x910E, 0x25CE, 0x910F, 0x25C9,
- 0x9110, 0x25C7, 0x9111, 0x25CA, 0x9112, 0x0F45, 0x9114, 0x25CC,
- 0x9116, 0x25CB, 0x9117, 0x0F46, 0x9118, 0x10CD, 0x9119, 0x10CC,
- 0x911A, 0x2827, 0x911B, 0x282A, 0x911C, 0x2822, 0x911D, 0x2826,
- 0x911E, 0x10CE, 0x911F, 0x2825, 0x9120, 0x2823, 0x9121, 0x2829,
- 0x9122, 0x2824, 0x9123, 0x2821, 0x9124, 0x2828, 0x9126, 0x2A86,
- 0x9127, 0x124E, 0x9128, 0x2FFB, 0x9129, 0x2A83, 0x912A, 0x2A84,
- 0x912B, 0x2A82, 0x912C, 0x2323, 0x912D, 0x124D, 0x912E, 0x2A87,
- 0x912F, 0x2A81, 0x9130, 0x124C, 0x9131, 0x124F, 0x9132, 0x2A85,
- 0x9133, 0x2CBA, 0x9134, 0x1373, 0x9135, 0x2CBB, 0x9136, 0x2CBC,
- 0x9138, 0x2E7F, 0x9139, 0x1498, 0x913A, 0x2FFC, 0x913B, 0x2FFD,
- 0x913E, 0x2FFE, 0x913F, 0x3148, 0x9140, 0x3147, 0x9141, 0x3249,
- 0x9143, 0x3248, 0x9144, 0x331F, 0x9145, 0x3320, 0x9146, 0x331E,
- 0x9147, 0x33C6, 0x9148, 0x16DE, 0x9149, 0x0520, 0x914A, 0x081F,
- 0x914B, 0x081E, 0x914C, 0x09E4, 0x914D, 0x09E3, 0x914E, 0x1E2A,
- 0x914F, 0x1E2B, 0x9150, 0x1E29, 0x9152, 0x09E2, 0x9153, 0x2093,
- 0x9155, 0x2094, 0x9156, 0x2090, 0x9157, 0x0BC8, 0x9158, 0x2091,
- 0x915A, 0x2092, 0x915F, 0x2331, 0x9160, 0x2333, 0x9161, 0x232F,
- 0x9162, 0x2332, 0x9163, 0x0D8C, 0x9164, 0x2330, 0x9165, 0x0D8D,
- 0x9168, 0x23E2, 0x9169, 0x0F49, 0x916A, 0x0F48, 0x916C, 0x0F47,
- 0x916E, 0x25CF, 0x916F, 0x25D0, 0x9172, 0x282C, 0x9173, 0x282E,
- 0x9174, 0x10D2, 0x9175, 0x10CF, 0x9177, 0x10D1, 0x9178, 0x10D0,
- 0x9179, 0x282D, 0x917A, 0x282B, 0x9180, 0x2A8E, 0x9181, 0x2A8B,
- 0x9182, 0x2A8C, 0x9183, 0x1253, 0x9184, 0x2A8D, 0x9185, 0x2A88,
- 0x9186, 0x2A89, 0x9187, 0x1250, 0x9189, 0x1251, 0x918A, 0x2A8A,
- 0x918B, 0x1252, 0x918D, 0x2CC0, 0x918F, 0x2CC1, 0x9190, 0x2CBE,
- 0x9191, 0x2CBF, 0x9192, 0x1374, 0x9193, 0x2CBD, 0x9199, 0x2E83,
- 0x919A, 0x2E80, 0x919B, 0x2E82, 0x919C, 0x149B, 0x919D, 0x2E86,
- 0x919E, 0x149A, 0x919F, 0x2E84, 0x91A0, 0x2E87, 0x91A1, 0x2E85,
- 0x91A2, 0x2E81, 0x91A3, 0x1499, 0x91A5, 0x3000, 0x91A7, 0x3001,
- 0x91A8, 0x2FFF, 0x91AA, 0x3003, 0x91AB, 0x153C, 0x91AC, 0x153D,
- 0x91AD, 0x314A, 0x91AE, 0x15DC, 0x91AF, 0x3002, 0x91B0, 0x3149,
- 0x91B1, 0x15DB, 0x91B2, 0x324C, 0x91B3, 0x324D, 0x91B4, 0x1650,
- 0x91B5, 0x324B, 0x91B7, 0x324A, 0x91B9, 0x3321, 0x91BA, 0x1698,
- 0x91BC, 0x3446, 0x91BD, 0x34A3, 0x91BE, 0x34A2, 0x91C0, 0x1730,
- 0x91C1, 0x174A, 0x91C2, 0x34A4, 0x91C3, 0x350B, 0x91C5, 0x175C,
- 0x91C6, 0x0521, 0x91C7, 0x0695, 0x91C9, 0x0F4A, 0x91CB, 0x1651,
- 0x91CC, 0x0522, 0x91CD, 0x0820, 0x91CE, 0x0BC9, 0x91CF, 0x0D8E,
- 0x91D0, 0x153E, 0x91D1, 0x0696, 0x91D3, 0x1C15, 0x91D4, 0x1C14,
- 0x91D5, 0x1E2C, 0x91D7, 0x09E7, 0x91D8, 0x09E5, 0x91D9, 0x09E9,
- 0x91DA, 0x1E2E, 0x91DC, 0x09E8, 0x91DD, 0x09E6, 0x91E2, 0x1E2D,
- 0x91E3, 0x0BCC, 0x91E4, 0x209A, 0x91E6, 0x0BCB, 0x91E7, 0x0BCD,
- 0x91E8, 0x209F, 0x91E9, 0x0BCF, 0x91EA, 0x209C, 0x91EB, 0x209D,
- 0x91EC, 0x2095, 0x91ED, 0x0BCE, 0x91EE, 0x20A0, 0x91F1, 0x2097,
- 0x91F3, 0x2098, 0x91F4, 0x2096, 0x91F5, 0x0BCA, 0x91F7, 0x209E,
- 0x91F8, 0x2099, 0x91F9, 0x209B, 0x91FD, 0x233F, 0x91FF, 0x233E,
- 0x9200, 0x233C, 0x9201, 0x2334, 0x9202, 0x2343, 0x9203, 0x2337,
- 0x9204, 0x2341, 0x9205, 0x2348, 0x9206, 0x2340, 0x9207, 0x0D96,
- 0x9209, 0x0D92, 0x920A, 0x2335, 0x920C, 0x233B, 0x920D, 0x0D94,
- 0x920F, 0x233A, 0x9210, 0x0D95, 0x9211, 0x0D97, 0x9212, 0x233D,
- 0x9214, 0x0D8F, 0x9215, 0x0D90, 0x9216, 0x2349, 0x9217, 0x2347,
- 0x9219, 0x2346, 0x921A, 0x2338, 0x921C, 0x2344, 0x921E, 0x0D93,
- 0x9223, 0x0D91, 0x9224, 0x2345, 0x9225, 0x2336, 0x9226, 0x2339,
- 0x9227, 0x2342, 0x922D, 0x2851, 0x922E, 0x25DA, 0x9230, 0x25D3,
- 0x9231, 0x25E6, 0x9232, 0x25EF, 0x9233, 0x25D6, 0x9234, 0x0F55,
- 0x9236, 0x25E3, 0x9237, 0x0F4B, 0x9238, 0x0F4D, 0x9239, 0x0F59,
- 0x923A, 0x25D4, 0x923D, 0x0F4E, 0x923E, 0x0F50, 0x923F, 0x0F5A,
- 0x9240, 0x0F4F, 0x9245, 0x0F58, 0x9246, 0x25DC, 0x9248, 0x25D1,
- 0x9249, 0x0F56, 0x924A, 0x25DB, 0x924B, 0x0F52, 0x924C, 0x25ED,
- 0x924D, 0x0F57, 0x924E, 0x25EB, 0x924F, 0x25DF, 0x9250, 0x25E9,
- 0x9251, 0x0F54, 0x9252, 0x25D2, 0x9253, 0x25EC, 0x9254, 0x25E7,
- 0x9256, 0x25EE, 0x9257, 0x0F4C, 0x925A, 0x0F5B, 0x925B, 0x0F51,
- 0x925E, 0x25D8, 0x9260, 0x25E0, 0x9261, 0x25E4, 0x9263, 0x25E8,
- 0x9264, 0x0F53, 0x9265, 0x25D7, 0x9266, 0x25D5, 0x9267, 0x25E1,
- 0x926C, 0x25DE, 0x926D, 0x25DD, 0x926F, 0x25E2, 0x9270, 0x25E5,
- 0x9272, 0x25EA, 0x9276, 0x2831, 0x9278, 0x10D3, 0x9279, 0x283B,
- 0x927A, 0x2833, 0x927B, 0x10D9, 0x927C, 0x10DD, 0x927D, 0x2844,
- 0x927E, 0x284C, 0x927F, 0x283D, 0x9280, 0x10D5, 0x9282, 0x2841,
- 0x9283, 0x25D9, 0x9285, 0x10D6, 0x9286, 0x2848, 0x9287, 0x284D,
- 0x9288, 0x2845, 0x928A, 0x2847, 0x928B, 0x2850, 0x928C, 0x2849,
- 0x928D, 0x2837, 0x928E, 0x2840, 0x9291, 0x10DE, 0x9293, 0x10DA,
- 0x9294, 0x2835, 0x9295, 0x2842, 0x9296, 0x10D8, 0x9297, 0x283C,
- 0x9298, 0x10D7, 0x9299, 0x284A, 0x929A, 0x2839, 0x929B, 0x2832,
- 0x929C, 0x10DB, 0x929D, 0x284F, 0x92A0, 0x2834, 0x92A1, 0x2846,
- 0x92A2, 0x2843, 0x92A3, 0x283E, 0x92A4, 0x2830, 0x92A5, 0x282F,
- 0x92A6, 0x2838, 0x92A7, 0x284B, 0x92A8, 0x10DC, 0x92A9, 0x284E,
- 0x92AA, 0x2836, 0x92AB, 0x283A, 0x92AC, 0x10D4, 0x92B2, 0x125F,
- 0x92B3, 0x125A, 0x92B4, 0x2AB0, 0x92B5, 0x2AAC, 0x92B6, 0x2A94,
- 0x92B7, 0x1256, 0x92B9, 0x36E9, 0x92BB, 0x1255, 0x92BC, 0x125B,
- 0x92C0, 0x2A92, 0x92C1, 0x1259, 0x92C2, 0x2A9E, 0x92C3, 0x2A90,
- 0x92C4, 0x2A91, 0x92C5, 0x1254, 0x92C6, 0x2AAF, 0x92C7, 0x125D,
- 0x92C8, 0x2AA1, 0x92C9, 0x2AA6, 0x92CA, 0x2AA0, 0x92CB, 0x2CD3,
- 0x92CC, 0x2A9C, 0x92CD, 0x2AA4, 0x92CE, 0x2AA2, 0x92CF, 0x2A95,
- 0x92D0, 0x2A8F, 0x92D1, 0x2AAA, 0x92D2, 0x125C, 0x92D3, 0x2AAB,
- 0x92D5, 0x2AA5, 0x92D7, 0x2A9A, 0x92D8, 0x2A98, 0x92D9, 0x2A93,
- 0x92DD, 0x2A9B, 0x92DE, 0x2AA8, 0x92DF, 0x2A97, 0x92E0, 0x2AA7,
- 0x92E1, 0x2AAD, 0x92E4, 0x1258, 0x92E6, 0x2AA3, 0x92E7, 0x2AA9,
- 0x92E8, 0x2A9F, 0x92E9, 0x2A99, 0x92EA, 0x1257, 0x92EE, 0x283F,
- 0x92EF, 0x2A9D, 0x92F0, 0x125E, 0x92F1, 0x2A96, 0x92F7, 0x2CD8,
- 0x92F8, 0x1377, 0x92F9, 0x2CD7, 0x92FA, 0x2CD5, 0x92FB, 0x2CE7,
- 0x92FC, 0x137B, 0x92FE, 0x2CE4, 0x92FF, 0x2CDC, 0x9300, 0x2CE6,
- 0x9301, 0x2CCE, 0x9302, 0x2CDA, 0x9304, 0x137D, 0x9306, 0x2CC6,
- 0x9308, 0x2CC4, 0x9309, 0x2CE5, 0x930B, 0x2CE3, 0x930C, 0x2CE2,
- 0x930D, 0x2CD2, 0x930E, 0x2CD1, 0x930F, 0x2CC7, 0x9310, 0x137F,
- 0x9312, 0x2CCD, 0x9313, 0x2CD6, 0x9314, 0x2CE1, 0x9315, 0x1382,
- 0x9316, 0x2CE8, 0x9318, 0x14A3, 0x9319, 0x1384, 0x931A, 0x137E,
- 0x931B, 0x2CCB, 0x931D, 0x2CD4, 0x931E, 0x2CC3, 0x931F, 0x2CC5,
- 0x9320, 0x1375, 0x9321, 0x1381, 0x9322, 0x137A, 0x9323, 0x2CCC,
- 0x9324, 0x2CDB, 0x9325, 0x2AAE, 0x9326, 0x1380, 0x9327, 0x2CC2,
- 0x9328, 0x149E, 0x9329, 0x2CDD, 0x932A, 0x2CE0, 0x932B, 0x137C,
- 0x932D, 0x2CD0, 0x932E, 0x1383, 0x932F, 0x1379, 0x9333, 0x1378,
- 0x9334, 0x2CD9, 0x9335, 0x2CDF, 0x9336, 0x1376, 0x9338, 0x2CC9,
- 0x9339, 0x2CDE, 0x933C, 0x2CCA, 0x9346, 0x2CCF, 0x9347, 0x2E8D,
- 0x9349, 0x2E92, 0x934A, 0x14A0, 0x934B, 0x14A2, 0x934C, 0x2E98,
- 0x934D, 0x149C, 0x934E, 0x2EA6, 0x934F, 0x2E9E, 0x9350, 0x2E93,
- 0x9351, 0x2E94, 0x9352, 0x2E9D, 0x9354, 0x14A9, 0x9355, 0x2E9C,
- 0x9356, 0x2E8C, 0x9357, 0x2E9B, 0x9358, 0x2E8F, 0x9359, 0x2EA7,
- 0x935A, 0x14A8, 0x935B, 0x14A6, 0x935C, 0x2E90, 0x935E, 0x2EA3,
- 0x9360, 0x2E95, 0x9361, 0x2EA2, 0x9363, 0x2EA4, 0x9364, 0x2E8B,
- 0x9365, 0x14A1, 0x9367, 0x2EA5, 0x936A, 0x2E99, 0x936C, 0x14A5,
- 0x936D, 0x2E96, 0x9370, 0x14A7, 0x9371, 0x2E9F, 0x9375, 0x149F,
- 0x9376, 0x2E91, 0x9377, 0x2EA0, 0x9379, 0x2E9A, 0x937A, 0x2CC8,
- 0x937B, 0x2EA1, 0x937C, 0x2E8E, 0x937E, 0x14A4, 0x9380, 0x3014,
- 0x9382, 0x149D, 0x9383, 0x2E89, 0x9388, 0x3011, 0x9389, 0x300A,
- 0x938A, 0x1540, 0x938C, 0x3005, 0x938D, 0x3015, 0x938E, 0x300C,
- 0x938F, 0x2E97, 0x9391, 0x3017, 0x9392, 0x3006, 0x9394, 0x153F,
- 0x9395, 0x3010, 0x9396, 0x1541, 0x9397, 0x1549, 0x9398, 0x1547,
- 0x9399, 0x3012, 0x939A, 0x1548, 0x939B, 0x3008, 0x939D, 0x3009,
- 0x939E, 0x300E, 0x939F, 0x3013, 0x93A1, 0x2E88, 0x93A2, 0x1542,
- 0x93A3, 0x301C, 0x93A4, 0x3019, 0x93A5, 0x3160, 0x93A6, 0x300F,
- 0x93A7, 0x300B, 0x93A8, 0x301A, 0x93A9, 0x3155, 0x93AA, 0x300D,
- 0x93AC, 0x1545, 0x93AE, 0x1544, 0x93AF, 0x2E8A, 0x93B0, 0x1546,
- 0x93B1, 0x3016, 0x93B2, 0x3018, 0x93B3, 0x1543, 0x93B4, 0x301B,
- 0x93B5, 0x3004, 0x93B7, 0x3007, 0x93C0, 0x315E, 0x93C2, 0x314E,
- 0x93C3, 0x15E0, 0x93C4, 0x315C, 0x93C7, 0x314C, 0x93C8, 0x15E1,
- 0x93CA, 0x3157, 0x93CC, 0x3153, 0x93CD, 0x15E6, 0x93CE, 0x315D,
- 0x93CF, 0x314D, 0x93D0, 0x3150, 0x93D1, 0x15DE, 0x93D2, 0x315F,
- 0x93D4, 0x3158, 0x93D5, 0x315B, 0x93D6, 0x15E4, 0x93D7, 0x15E9,
- 0x93D8, 0x15E7, 0x93D9, 0x3154, 0x93DA, 0x314F, 0x93DC, 0x15E2,
- 0x93DD, 0x15E3, 0x93DE, 0x314B, 0x93DF, 0x15DF, 0x93E1, 0x15DD,
- 0x93E2, 0x15E5, 0x93E3, 0x315A, 0x93E4, 0x15E8, 0x93E6, 0x3156,
- 0x93E7, 0x3161, 0x93E8, 0x15EA, 0x93EC, 0x3152, 0x93EE, 0x3159,
- 0x93F5, 0x325A, 0x93F6, 0x3269, 0x93F7, 0x325C, 0x93F8, 0x3263,
- 0x93F9, 0x3151, 0x93FA, 0x3261, 0x93FB, 0x3250, 0x93FC, 0x3267,
- 0x93FD, 0x1654, 0x93FE, 0x3254, 0x93FF, 0x3266, 0x9400, 0x325B,
- 0x9403, 0x1653, 0x9406, 0x326B, 0x9407, 0x325D, 0x9409, 0x3262,
- 0x940A, 0x3265, 0x940B, 0x324E, 0x940C, 0x3268, 0x940D, 0x3259,
- 0x940E, 0x325E, 0x940F, 0x3252, 0x9410, 0x3256, 0x9411, 0x326A,
- 0x9412, 0x3260, 0x9413, 0x324F, 0x9414, 0x3253, 0x9415, 0x3255,
- 0x9416, 0x325F, 0x9418, 0x1652, 0x9419, 0x3258, 0x9420, 0x3251,
- 0x9428, 0x3257, 0x9429, 0x3325, 0x942A, 0x3329, 0x942B, 0x169F,
- 0x942C, 0x332B, 0x942E, 0x1699, 0x9430, 0x3327, 0x9431, 0x332D,
- 0x9432, 0x169E, 0x9433, 0x169A, 0x9435, 0x169B, 0x9436, 0x3324,
- 0x9437, 0x332A, 0x9438, 0x169D, 0x9439, 0x3328, 0x943A, 0x169C,
- 0x943B, 0x3323, 0x943C, 0x3264, 0x943D, 0x3326, 0x943F, 0x3322,
- 0x9440, 0x332C, 0x9444, 0x16DF, 0x9445, 0x33CD, 0x9446, 0x33D0,
- 0x9447, 0x33CC, 0x9448, 0x33CE, 0x9449, 0x33CF, 0x944A, 0x33C9,
- 0x944B, 0x33CA, 0x944C, 0x33C7, 0x944F, 0x33CB, 0x9450, 0x33C8,
- 0x9451, 0x16E0, 0x9452, 0x16E1, 0x9455, 0x3448, 0x9457, 0x344A,
- 0x945D, 0x3449, 0x945E, 0x344B, 0x9460, 0x170E, 0x9462, 0x3447,
- 0x9463, 0x170D, 0x9464, 0x170F, 0x9468, 0x34A6, 0x9469, 0x34A7,
- 0x946A, 0x1731, 0x946B, 0x34A5, 0x946D, 0x34ED, 0x946E, 0x34EC,
- 0x946F, 0x34EE, 0x9470, 0x174C, 0x9471, 0x34EF, 0x9472, 0x174B,
- 0x9473, 0x34F0, 0x9474, 0x350C, 0x9475, 0x350F, 0x9476, 0x350E,
- 0x9477, 0x1755, 0x9478, 0x350D, 0x947C, 0x175F, 0x947D, 0x175D,
- 0x947E, 0x175E, 0x947F, 0x1764, 0x9480, 0x3539, 0x9481, 0x353A,
- 0x9482, 0x3538, 0x9483, 0x3540, 0x9577, 0x0697, 0x957A, 0x20A1,
- 0x957B, 0x234A, 0x957C, 0x2AB1, 0x957D, 0x3162, 0x9580, 0x0698,
- 0x9582, 0x0821, 0x9583, 0x09EA, 0x9586, 0x20A2, 0x9588, 0x20A3,
- 0x9589, 0x0BD0, 0x958B, 0x0D9A, 0x958C, 0x234C, 0x958D, 0x234B,
- 0x958E, 0x0D9E, 0x958F, 0x0D99, 0x9590, 0x234D, 0x9591, 0x0D9B,
- 0x9592, 0x0D9D, 0x9593, 0x0D9C, 0x9594, 0x0D98, 0x9598, 0x0F5C,
- 0x959B, 0x25F3, 0x959C, 0x25F1, 0x959E, 0x25F2, 0x959F, 0x25F0,
- 0x95A1, 0x10DF, 0x95A3, 0x10E2, 0x95A4, 0x10E4, 0x95A5, 0x10E3,
- 0x95A8, 0x10E0, 0x95A9, 0x10E1, 0x95AB, 0x2AB3, 0x95AC, 0x2AB2,
- 0x95AD, 0x1260, 0x95AE, 0x2AB4, 0x95B0, 0x2AB5, 0x95B1, 0x1261,
- 0x95B5, 0x2CF0, 0x95B6, 0x2CEE, 0x95B7, 0x2EAD, 0x95B9, 0x2CEC,
- 0x95BA, 0x2CED, 0x95BB, 0x1385, 0x95BC, 0x2CE9, 0x95BD, 0x2CF1,
- 0x95BE, 0x2CEB, 0x95BF, 0x2CEF, 0x95C0, 0x2EA9, 0x95C3, 0x2EAB,
- 0x95C5, 0x2EAC, 0x95C6, 0x14AE, 0x95C7, 0x2EA8, 0x95C8, 0x14AD,
- 0x95C9, 0x2EAA, 0x95CA, 0x14AA, 0x95CB, 0x14AB, 0x95CC, 0x14AC,
- 0x95CD, 0x2CEA, 0x95D0, 0x154C, 0x95D1, 0x301F, 0x95D2, 0x301D,
- 0x95D3, 0x301E, 0x95D4, 0x154A, 0x95D5, 0x154D, 0x95D6, 0x154B,
- 0x95DA, 0x3163, 0x95DB, 0x3164, 0x95DC, 0x15EB, 0x95DE, 0x326C,
- 0x95DF, 0x326E, 0x95E0, 0x326D, 0x95E1, 0x1655, 0x95E2, 0x16A0,
- 0x95E3, 0x3330, 0x95E4, 0x332F, 0x95E5, 0x332E, 0x961C, 0x0699,
- 0x961E, 0x17B4, 0x9620, 0x1821, 0x9621, 0x0414, 0x9622, 0x181F,
- 0x9623, 0x1822, 0x9624, 0x1820, 0x9628, 0x18F1, 0x962A, 0x0526,
- 0x962C, 0x0527, 0x962D, 0x18F3, 0x962E, 0x0524, 0x962F, 0x18F2,
- 0x9630, 0x18F0, 0x9631, 0x0525, 0x9632, 0x0523, 0x9639, 0x1A55,
- 0x963A, 0x1A58, 0x963B, 0x069C, 0x963C, 0x1A57, 0x963D, 0x1A56,
- 0x963F, 0x069B, 0x9640, 0x069A, 0x9642, 0x069E, 0x9643, 0x1A59,
- 0x9644, 0x069D, 0x964A, 0x1C1A, 0x964B, 0x0823, 0x964C, 0x0824,
- 0x964D, 0x0825, 0x964E, 0x1C1B, 0x964F, 0x1C17, 0x9650, 0x0822,
- 0x9651, 0x1C18, 0x9653, 0x1C19, 0x9654, 0x1C16, 0x9658, 0x09F1,
- 0x965B, 0x09EE, 0x965C, 0x1E2F, 0x965D, 0x09EF, 0x965E, 0x09F2,
- 0x965F, 0x1E30, 0x9661, 0x09ED, 0x9662, 0x09EB, 0x9663, 0x09EC,
- 0x9664, 0x09F0, 0x966A, 0x0BD1, 0x966B, 0x20A6, 0x966C, 0x0BD9,
- 0x966D, 0x20A5, 0x966F, 0x20A8, 0x9670, 0x0BD5, 0x9671, 0x20A7,
- 0x9672, 0x0DA6, 0x9673, 0x0BD3, 0x9674, 0x0BD6, 0x9675, 0x0BD2,
- 0x9676, 0x0BD7, 0x9677, 0x0BD8, 0x9678, 0x0BD4, 0x967C, 0x20A4,
- 0x967D, 0x0DA2, 0x967E, 0x234F, 0x9680, 0x2353, 0x9683, 0x2352,
- 0x9684, 0x0DA7, 0x9685, 0x0DA3, 0x9686, 0x0DA4, 0x9687, 0x234E,
- 0x9688, 0x2350, 0x9689, 0x2351, 0x968A, 0x0D9F, 0x968B, 0x0DA1,
- 0x968D, 0x0DA5, 0x968E, 0x0DA0, 0x9691, 0x25F6, 0x9692, 0x25F4,
- 0x9693, 0x25F5, 0x9694, 0x0F5E, 0x9695, 0x0F5F, 0x9697, 0x25F7,
- 0x9698, 0x0F5D, 0x9699, 0x10E5, 0x969B, 0x10E7, 0x969C, 0x10E6,
- 0x969E, 0x2852, 0x96A1, 0x2853, 0x96A2, 0x2AB7, 0x96A4, 0x2AB6,
- 0x96A7, 0x1386, 0x96A8, 0x1387, 0x96A9, 0x2CF2, 0x96AA, 0x1388,
- 0x96AC, 0x2EB0, 0x96AE, 0x2EAE, 0x96B0, 0x2EAF, 0x96B1, 0x14AF,
- 0x96B3, 0x3020, 0x96B4, 0x15EC, 0x96B6, 0x0231, 0x96B8, 0x14B0,
- 0x96B9, 0x069F, 0x96BB, 0x09F3, 0x96BC, 0x1E31, 0x96BF, 0x20A9,
- 0x96C0, 0x0BDA, 0x96C1, 0x0DA8, 0x96C2, 0x2354, 0x96C3, 0x2356,
- 0x96C4, 0x0DAA, 0x96C5, 0x0DA9, 0x96C6, 0x0DAB, 0x96C7, 0x0DAC,
- 0x96C8, 0x2355, 0x96C9, 0x0F62, 0x96CA, 0x0F63, 0x96CB, 0x0F61,
- 0x96CC, 0x10E8, 0x96CD, 0x0F60, 0x96CE, 0x25F8, 0x96D2, 0x10E9,
- 0x96D3, 0x2AB8, 0x96D4, 0x2CF3, 0x96D5, 0x1389, 0x96D6, 0x14B1,
- 0x96D7, 0x3021, 0x96D8, 0x3025, 0x96D9, 0x1550, 0x96DA, 0x3022,
- 0x96DB, 0x1551, 0x96DC, 0x154F, 0x96DD, 0x3026, 0x96DE, 0x1552,
- 0x96DF, 0x3024, 0x96E1, 0x3165, 0x96E2, 0x154E, 0x96E3, 0x15ED,
- 0x96E5, 0x34A8, 0x96E8, 0x06A0, 0x96E9, 0x0BDC, 0x96EA, 0x0BDB,
- 0x96EF, 0x0DAD, 0x96F0, 0x2358, 0x96F1, 0x2357, 0x96F2, 0x0DAE,
- 0x96F5, 0x25FC, 0x96F6, 0x0F67, 0x96F7, 0x0F64, 0x96F8, 0x25FB,
- 0x96F9, 0x0F66, 0x96FA, 0x25F9, 0x96FB, 0x0F65, 0x96FD, 0x25FA,
- 0x96FF, 0x2854, 0x9700, 0x10EA, 0x9702, 0x2ABB, 0x9704, 0x1262,
- 0x9705, 0x2AB9, 0x9706, 0x1263, 0x9707, 0x1264, 0x9708, 0x2ABA,
- 0x9709, 0x1265, 0x970B, 0x2CF4, 0x970D, 0x138D, 0x970E, 0x138A,
- 0x970F, 0x138F, 0x9710, 0x2CF6, 0x9711, 0x138B, 0x9712, 0x2CF5,
- 0x9713, 0x138E, 0x9716, 0x138C, 0x9718, 0x2EB3, 0x9719, 0x2EB5,
- 0x971C, 0x14B2, 0x971D, 0x2EB4, 0x971E, 0x14B3, 0x971F, 0x2EB2,
- 0x9720, 0x2EB1, 0x9722, 0x3028, 0x9723, 0x3027, 0x9724, 0x1553,
- 0x9725, 0x3029, 0x9726, 0x316A, 0x9727, 0x15EF, 0x9728, 0x3169,
- 0x9729, 0x3166, 0x972A, 0x15EE, 0x972B, 0x3167, 0x972C, 0x3168,
- 0x972E, 0x326F, 0x972F, 0x3270, 0x9730, 0x1656, 0x9732, 0x16A3,
- 0x9735, 0x3331, 0x9738, 0x16A1, 0x9739, 0x16A2, 0x973A, 0x3332,
- 0x973D, 0x16E2, 0x973E, 0x16E3, 0x973F, 0x33D1, 0x9742, 0x1732,
- 0x9743, 0x34AA, 0x9744, 0x1734, 0x9746, 0x34A9, 0x9747, 0x34AB,
- 0x9748, 0x1733, 0x9749, 0x34F1, 0x974B, 0x3526, 0x9752, 0x06A1,
- 0x9756, 0x0F68, 0x9758, 0x2855, 0x975A, 0x2ABC, 0x975B, 0x1390,
- 0x975C, 0x1391, 0x975E, 0x06A2, 0x9760, 0x1266, 0x9761, 0x15F0,
- 0x9762, 0x0826, 0x9766, 0x1392, 0x9768, 0x1710, 0x9769, 0x0827,
- 0x976A, 0x20AA, 0x976C, 0x2359, 0x976E, 0x235B, 0x9770, 0x235A,
- 0x9772, 0x2600, 0x9773, 0x25FD, 0x9774, 0x0F69, 0x9776, 0x0F6A,
- 0x9777, 0x25FE, 0x9778, 0x25FF, 0x977A, 0x2857, 0x977B, 0x285C,
- 0x977C, 0x10EB, 0x977D, 0x2856, 0x977E, 0x2858, 0x977F, 0x285F,
- 0x9780, 0x285A, 0x9781, 0x285E, 0x9782, 0x285B, 0x9783, 0x2859,
- 0x9784, 0x285D, 0x9785, 0x10EC, 0x9788, 0x2ABF, 0x978A, 0x2ABD,
- 0x978B, 0x1268, 0x978D, 0x1267, 0x978E, 0x2ABE, 0x978F, 0x1269,
- 0x9794, 0x2CF9, 0x9797, 0x2CF8, 0x9798, 0x1393, 0x9799, 0x2CF7,
- 0x979A, 0x2EB6, 0x979C, 0x2EB8, 0x979D, 0x2EBA, 0x979E, 0x2EB9,
- 0x97A0, 0x14B4, 0x97A1, 0x2EB7, 0x97A2, 0x3030, 0x97A3, 0x1554,
- 0x97A4, 0x302E, 0x97A5, 0x3031, 0x97A6, 0x1555, 0x97A8, 0x302C,
- 0x97AA, 0x302F, 0x97AB, 0x302D, 0x97AC, 0x302A, 0x97AD, 0x1556,
- 0x97AE, 0x302B, 0x97B3, 0x316B, 0x97B6, 0x316D, 0x97B7, 0x316C,
- 0x97B9, 0x3271, 0x97BB, 0x3272, 0x97BF, 0x3333, 0x97C1, 0x16E5,
- 0x97C3, 0x16E4, 0x97C4, 0x344C, 0x97C5, 0x344D, 0x97C6, 0x1735,
- 0x97C7, 0x34AC, 0x97C9, 0x1756, 0x97CB, 0x0828, 0x97CC, 0x0DAF,
- 0x97CD, 0x2861, 0x97CE, 0x2860, 0x97CF, 0x2AC1, 0x97D0, 0x2AC0,
- 0x97D3, 0x14B5, 0x97D4, 0x2EBC, 0x97D5, 0x2EBB, 0x97D6, 0x3034,
- 0x97D7, 0x3032, 0x97D8, 0x3035, 0x97D9, 0x3033, 0x97DC, 0x15F1,
- 0x97DD, 0x316E, 0x97DE, 0x316F, 0x97DF, 0x3170, 0x97E1, 0x3334,
- 0x97E3, 0x33D2, 0x97E5, 0x34AD, 0x97ED, 0x0829, 0x97F0, 0x2CFA,
- 0x97F1, 0x2EBD, 0x97F3, 0x082A, 0x97F6, 0x10ED, 0x97F8, 0x2CFB,
- 0x97F9, 0x1557, 0x97FA, 0x3036, 0x97FB, 0x15F2, 0x97FD, 0x3273,
- 0x97FE, 0x3274, 0x97FF, 0x16A4, 0x9800, 0x344E, 0x9801, 0x082B,
- 0x9802, 0x0BDF, 0x9803, 0x0BE0, 0x9804, 0x20AB, 0x9805, 0x0DB0,
- 0x9806, 0x0DB1, 0x9807, 0x235C, 0x9808, 0x0DB2, 0x980A, 0x0F6E,
- 0x980C, 0x0F70, 0x980D, 0x2602, 0x980E, 0x2603, 0x980F, 0x2601,
- 0x9810, 0x0F6B, 0x9811, 0x0F6C, 0x9812, 0x0F6F, 0x9813, 0x0F6D,
- 0x9816, 0x2862, 0x9817, 0x10EE, 0x9818, 0x10EF, 0x981B, 0x2AC8,
- 0x981C, 0x126C, 0x981D, 0x2AC3, 0x981E, 0x2AC2, 0x9820, 0x2AC7,
- 0x9821, 0x126A, 0x9824, 0x139A, 0x9826, 0x2AC4, 0x9827, 0x2AC9,
- 0x9828, 0x2AC6, 0x9829, 0x2AC5, 0x982B, 0x126B, 0x982D, 0x1398,
- 0x982F, 0x2CFD, 0x9830, 0x1394, 0x9832, 0x2CFE, 0x9835, 0x2CFC,
- 0x9837, 0x1397, 0x9838, 0x1395, 0x9839, 0x1399, 0x983B, 0x1396,
- 0x9841, 0x2EBE, 0x9843, 0x2EC3, 0x9844, 0x2EBF, 0x9845, 0x2EC2,
- 0x9846, 0x14B6, 0x9848, 0x2DF2, 0x9849, 0x2EC1, 0x984A, 0x2EC0,
- 0x984C, 0x155A, 0x984D, 0x1558, 0x984E, 0x155B, 0x984F, 0x1559,
- 0x9850, 0x3037, 0x9851, 0x3038, 0x9852, 0x3039, 0x9853, 0x155C,
- 0x9857, 0x3174, 0x9858, 0x15F4, 0x9859, 0x3172, 0x985B, 0x15F5,
- 0x985C, 0x3171, 0x985D, 0x3173, 0x985E, 0x15F3, 0x985F, 0x3278,
- 0x9860, 0x3275, 0x9862, 0x3276, 0x9863, 0x3277, 0x9864, 0x3335,
- 0x9865, 0x16A6, 0x9867, 0x16A5, 0x9869, 0x33D4, 0x986A, 0x33D3,
- 0x986B, 0x16E6, 0x986F, 0x1711, 0x9870, 0x1736, 0x9871, 0x174D,
- 0x9872, 0x34F2, 0x9873, 0x3527, 0x9874, 0x3528, 0x98A8, 0x082C,
- 0x98A9, 0x235D, 0x98AC, 0x2604, 0x98AD, 0x2863, 0x98AE, 0x2864,
- 0x98AF, 0x10F0, 0x98B1, 0x10F1, 0x98B2, 0x2ACA, 0x98B3, 0x126D,
- 0x98B6, 0x14B7, 0x98B8, 0x303A, 0x98BA, 0x155D, 0x98BB, 0x3177,
- 0x98BC, 0x15F6, 0x98BD, 0x3176, 0x98BE, 0x3178, 0x98BF, 0x3175,
- 0x98C0, 0x3338, 0x98C1, 0x3279, 0x98C2, 0x327A, 0x98C4, 0x1657,
- 0x98C6, 0x3337, 0x98C9, 0x3336, 0x98CB, 0x33D5, 0x98CC, 0x3529,
- 0x98DB, 0x082D, 0x98DF, 0x082E, 0x98E2, 0x09F4, 0x98E3, 0x1E32,
- 0x98E5, 0x20AC, 0x98E7, 0x0DB3, 0x98E9, 0x0DB6, 0x98EA, 0x0DB4,
- 0x98EB, 0x235E, 0x98ED, 0x0DB8, 0x98EF, 0x0DB5, 0x98F2, 0x0DB7,
- 0x98F4, 0x0F72, 0x98F6, 0x2605, 0x98F9, 0x2606, 0x98FA, 0x2ACC,
- 0x98FC, 0x0F71, 0x98FD, 0x0F73, 0x98FE, 0x0F74, 0x9900, 0x2866,
- 0x9902, 0x2865, 0x9903, 0x10F2, 0x9905, 0x10F3, 0x9907, 0x2867,
- 0x9908, 0x2ACB, 0x9909, 0x10F5, 0x990A, 0x126E, 0x990C, 0x10F4,
- 0x9910, 0x139B, 0x9911, 0x2ACD, 0x9912, 0x1270, 0x9913, 0x126F,
- 0x9914, 0x2ACE, 0x9915, 0x2AD1, 0x9916, 0x2ACF, 0x9917, 0x2AD0,
- 0x9918, 0x1271, 0x991A, 0x13A0, 0x991B, 0x139E, 0x991E, 0x139D,
- 0x991F, 0x2D00, 0x9921, 0x139F, 0x9924, 0x2CFF, 0x9925, 0x2EC4,
- 0x9927, 0x2D01, 0x9928, 0x139C, 0x9929, 0x2D02, 0x992A, 0x2EC7,
- 0x992B, 0x2EC5, 0x992C, 0x2EC6, 0x992D, 0x2ECB, 0x992E, 0x1561,
- 0x992F, 0x2ECA, 0x9930, 0x2ECD, 0x9931, 0x2ECC, 0x9932, 0x2EC9,
- 0x9933, 0x2EC8, 0x9935, 0x14B8, 0x993A, 0x303D, 0x993C, 0x303C,
- 0x993D, 0x1560, 0x993E, 0x155E, 0x993F, 0x155F, 0x9941, 0x303B,
- 0x9943, 0x317B, 0x9945, 0x15F7, 0x9947, 0x317A, 0x9948, 0x3179,
- 0x9949, 0x15F8, 0x994B, 0x327F, 0x994C, 0x327E, 0x994E, 0x327C,
- 0x9950, 0x327B, 0x9951, 0x1659, 0x9952, 0x1658, 0x9953, 0x3280,
- 0x9954, 0x33D6, 0x9955, 0x16E7, 0x9956, 0x333A, 0x9957, 0x16A7,
- 0x9958, 0x3339, 0x9959, 0x327D, 0x995B, 0x33D7, 0x995C, 0x1712,
- 0x995E, 0x174E, 0x995F, 0x34F3, 0x9961, 0x352A, 0x9996, 0x082F,
- 0x9997, 0x20AD, 0x9998, 0x2ECE, 0x9999, 0x0830, 0x999C, 0x2869,
- 0x999D, 0x2868, 0x999E, 0x2D03, 0x99A1, 0x2ED0, 0x99A3, 0x2ECF,
- 0x99A5, 0x1562, 0x99A6, 0x317C, 0x99A7, 0x317D, 0x99A8, 0x165A,
- 0x99AB, 0x352B, 0x99AC, 0x09F5, 0x99AD, 0x0DBA, 0x99AE, 0x0DB9,
- 0x99AF, 0x2607, 0x99B0, 0x2609, 0x99B1, 0x0F76, 0x99B2, 0x2608,
- 0x99B3, 0x0F75, 0x99B4, 0x0F77, 0x99B5, 0x260A, 0x99B9, 0x286B,
- 0x99BA, 0x286D, 0x99BB, 0x286C, 0x99BD, 0x286F, 0x99C1, 0x10F6,
- 0x99C2, 0x286E, 0x99C3, 0x286A, 0x99C7, 0x2870, 0x99C9, 0x2AD8,
- 0x99CB, 0x2ADB, 0x99CC, 0x2ADD, 0x99CD, 0x2AD3, 0x99CE, 0x2AD7,
- 0x99CF, 0x2AD4, 0x99D0, 0x1273, 0x99D1, 0x1276, 0x99D2, 0x1278,
- 0x99D3, 0x2AD5, 0x99D4, 0x2AD6, 0x99D5, 0x1277, 0x99D6, 0x2AD9,
- 0x99D7, 0x2ADC, 0x99D8, 0x2ADA, 0x99D9, 0x1279, 0x99DB, 0x1275,
- 0x99DC, 0x2AD2, 0x99DD, 0x1272, 0x99DF, 0x1274, 0x99E2, 0x13A2,
- 0x99E3, 0x2D09, 0x99E4, 0x2D07, 0x99E5, 0x2D06, 0x99E7, 0x2D0C,
- 0x99E9, 0x2D0B, 0x99EA, 0x2D0A, 0x99EC, 0x2D05, 0x99ED, 0x13A1,
- 0x99EE, 0x2D04, 0x99F0, 0x2D08, 0x99F1, 0x13A3, 0x99F4, 0x2ED3,
- 0x99F6, 0x2ED7, 0x99F7, 0x2ED4, 0x99F8, 0x2ED6, 0x99F9, 0x2ED5,
- 0x99FA, 0x2ED2, 0x99FB, 0x2ED8, 0x99FC, 0x2EDB, 0x99FD, 0x2ED9,
- 0x99FE, 0x2EDA, 0x99FF, 0x14BA, 0x9A01, 0x14B9, 0x9A02, 0x2ED1,
- 0x9A03, 0x2EDC, 0x9A04, 0x3042, 0x9A05, 0x3045, 0x9A06, 0x3047,
- 0x9A07, 0x3046, 0x9A09, 0x3040, 0x9A0A, 0x3044, 0x9A0B, 0x303F,
- 0x9A0D, 0x3041, 0x9A0E, 0x1563, 0x9A0F, 0x303E, 0x9A11, 0x3043,
- 0x9A14, 0x318A, 0x9A15, 0x317F, 0x9A16, 0x15F9, 0x9A19, 0x15FA,
- 0x9A1A, 0x317E, 0x9A1B, 0x3183, 0x9A1C, 0x3189, 0x9A1D, 0x3181,
- 0x9A1E, 0x3188, 0x9A20, 0x3185, 0x9A22, 0x3184, 0x9A23, 0x3187,
- 0x9A24, 0x3182, 0x9A25, 0x3180, 0x9A27, 0x3186, 0x9A29, 0x3287,
- 0x9A2A, 0x3285, 0x9A2B, 0x165B, 0x9A2C, 0x3284, 0x9A2D, 0x328A,
- 0x9A2E, 0x3288, 0x9A30, 0x165C, 0x9A31, 0x3283, 0x9A32, 0x3281,
- 0x9A34, 0x3282, 0x9A35, 0x165E, 0x9A36, 0x3286, 0x9A37, 0x165D,
- 0x9A38, 0x3289, 0x9A39, 0x333B, 0x9A3A, 0x3341, 0x9A3D, 0x333C,
- 0x9A3E, 0x16AB, 0x9A3F, 0x3342, 0x9A40, 0x16AA, 0x9A41, 0x3340,
- 0x9A42, 0x333F, 0x9A43, 0x16A9, 0x9A44, 0x333E, 0x9A45, 0x16A8,
- 0x9A46, 0x333D, 0x9A48, 0x33DD, 0x9A49, 0x33DF, 0x9A4A, 0x33DE,
- 0x9A4C, 0x33DB, 0x9A4D, 0x16E9, 0x9A4E, 0x33D8, 0x9A4F, 0x33DC,
- 0x9A50, 0x33E1, 0x9A52, 0x33E0, 0x9A53, 0x33D9, 0x9A54, 0x33DA,
- 0x9A55, 0x16E8, 0x9A56, 0x344F, 0x9A57, 0x1715, 0x9A59, 0x3450,
- 0x9A5A, 0x1713, 0x9A5B, 0x1714, 0x9A5E, 0x34AE, 0x9A5F, 0x1737,
- 0x9A60, 0x3510, 0x9A62, 0x1757, 0x9A64, 0x352C, 0x9A65, 0x1758,
- 0x9A66, 0x352D, 0x9A67, 0x352E, 0x9A68, 0x353C, 0x9A69, 0x353B,
- 0x9A6A, 0x1767, 0x9A6B, 0x3544, 0x9AA8, 0x09F6, 0x9AAB, 0x260C,
- 0x9AAD, 0x260B, 0x9AAF, 0x10F7, 0x9AB0, 0x10F8, 0x9AB1, 0x2871,
- 0x9AB3, 0x2ADE, 0x9AB4, 0x2D0F, 0x9AB7, 0x127A, 0x9AB8, 0x13A4,
- 0x9AB9, 0x2D0D, 0x9ABB, 0x2D10, 0x9ABC, 0x13A5, 0x9ABE, 0x2EDD,
- 0x9ABF, 0x2D0E, 0x9AC0, 0x3048, 0x9AC1, 0x1564, 0x9AC2, 0x318B,
- 0x9AC6, 0x328D, 0x9AC7, 0x328B, 0x9ACA, 0x328C, 0x9ACD, 0x3343,
- 0x9ACF, 0x16AC, 0x9AD0, 0x33E2, 0x9AD1, 0x1718, 0x9AD2, 0x16EA,
- 0x9AD3, 0x1716, 0x9AD4, 0x1717, 0x9AD5, 0x34AF, 0x9AD6, 0x174F,
- 0x9AD8, 0x09F7, 0x9ADC, 0x3049, 0x9ADF, 0x1E33, 0x9AE1, 0x0F78,
- 0x9AE3, 0x2872, 0x9AE6, 0x10F9, 0x9AE7, 0x2873, 0x9AEB, 0x2AE0,
- 0x9AEC, 0x2ADF, 0x9AED, 0x13A7, 0x9AEE, 0x127B, 0x9AEF, 0x127C,
- 0x9AF1, 0x2AE3, 0x9AF2, 0x2AE2, 0x9AF3, 0x2AE1, 0x9AF6, 0x2D11,
- 0x9AF7, 0x2D14, 0x9AF9, 0x2D13, 0x9AFA, 0x2D12, 0x9AFB, 0x13A6,
- 0x9AFC, 0x2EE1, 0x9AFD, 0x2EDF, 0x9AFE, 0x2EDE, 0x9B01, 0x2EE0,
- 0x9B03, 0x1565, 0x9B04, 0x304B, 0x9B05, 0x304C, 0x9B06, 0x1566,
- 0x9B08, 0x304A, 0x9B0A, 0x318D, 0x9B0B, 0x318C, 0x9B0C, 0x318F,
- 0x9B0D, 0x15FB, 0x9B0E, 0x318E, 0x9B10, 0x328E, 0x9B11, 0x3290,
- 0x9B12, 0x328F, 0x9B15, 0x3344, 0x9B16, 0x3347, 0x9B17, 0x3345,
- 0x9B18, 0x3346, 0x9B19, 0x33E3, 0x9B1A, 0x16EB, 0x9B1E, 0x3451,
- 0x9B1F, 0x3452, 0x9B20, 0x3453, 0x9B22, 0x1738, 0x9B23, 0x1750,
- 0x9B24, 0x352F, 0x9B25, 0x09F8, 0x9B27, 0x127D, 0x9B28, 0x13A8,
- 0x9B29, 0x304D, 0x9B2B, 0x33E4, 0x9B2E, 0x3511, 0x9B2F, 0x1E34,
- 0x9B31, 0x1768, 0x9B32, 0x09F9, 0x9B33, 0x2D15, 0x9B35, 0x304E,
- 0x9B37, 0x3190, 0x9B3A, 0x3348, 0x9B3B, 0x33E5, 0x9B3C, 0x09FA,
- 0x9B3E, 0x2874, 0x9B3F, 0x2875, 0x9B41, 0x10FA, 0x9B42, 0x10FB,
- 0x9B43, 0x2AE5, 0x9B44, 0x127F, 0x9B45, 0x127E, 0x9B46, 0x2AE4,
- 0x9B48, 0x2EE2, 0x9B4A, 0x304F, 0x9B4B, 0x3051, 0x9B4C, 0x3050,
- 0x9B4D, 0x1569, 0x9B4E, 0x1568, 0x9B4F, 0x1567, 0x9B51, 0x16AE,
- 0x9B52, 0x3349, 0x9B54, 0x16AD, 0x9B55, 0x33E7, 0x9B56, 0x33E6,
- 0x9B58, 0x1739, 0x9B59, 0x34B0, 0x9B5A, 0x0BE1, 0x9B5B, 0x260D,
- 0x9B5F, 0x2878, 0x9B60, 0x2876, 0x9B61, 0x2877, 0x9B64, 0x2AEE,
- 0x9B66, 0x2AE9, 0x9B67, 0x2AE6, 0x9B68, 0x2AED, 0x9B6C, 0x2AEF,
- 0x9B6F, 0x1281, 0x9B70, 0x2AEC, 0x9B71, 0x2AE8, 0x9B74, 0x2AE7,
- 0x9B75, 0x2AEB, 0x9B76, 0x2AEA, 0x9B77, 0x1280, 0x9B7A, 0x2D20,
- 0x9B7B, 0x2D1B, 0x9B7C, 0x2D19, 0x9B7D, 0x2D22, 0x9B7E, 0x2D1A,
- 0x9B80, 0x2D16, 0x9B82, 0x2D1C, 0x9B85, 0x2D17, 0x9B86, 0x2EEB,
- 0x9B87, 0x2D18, 0x9B88, 0x2D23, 0x9B90, 0x2D1F, 0x9B91, 0x13A9,
- 0x9B92, 0x2D1E, 0x9B93, 0x2D1D, 0x9B95, 0x2D21, 0x9B9A, 0x2EE3,
- 0x9B9B, 0x2EE6, 0x9B9E, 0x2EE5, 0x9BA0, 0x2EED, 0x9BA1, 0x2EE8,
- 0x9BA2, 0x2EEC, 0x9BA4, 0x2EEA, 0x9BA5, 0x2EE9, 0x9BA6, 0x2EE7,
- 0x9BA8, 0x2EE4, 0x9BAA, 0x14BD, 0x9BAB, 0x14BC, 0x9BAD, 0x14BE,
- 0x9BAE, 0x14BB, 0x9BAF, 0x2EEE, 0x9BB5, 0x3057, 0x9BB6, 0x305A,
- 0x9BB8, 0x3058, 0x9BB9, 0x305C, 0x9BBD, 0x305D, 0x9BBF, 0x3055,
- 0x9BC0, 0x156E, 0x9BC1, 0x3056, 0x9BC3, 0x3054, 0x9BC4, 0x305B,
- 0x9BC6, 0x3053, 0x9BC7, 0x3052, 0x9BC8, 0x156D, 0x9BC9, 0x156B,
- 0x9BCA, 0x156A, 0x9BD3, 0x3059, 0x9BD4, 0x3199, 0x9BD5, 0x319F,
- 0x9BD6, 0x15FE, 0x9BD7, 0x319A, 0x9BD9, 0x319D, 0x9BDA, 0x31A1,
- 0x9BDB, 0x15FF, 0x9BDC, 0x319C, 0x9BDE, 0x3194, 0x9BE0, 0x3193,
- 0x9BE1, 0x31A0, 0x9BE2, 0x3197, 0x9BE4, 0x3195, 0x9BE5, 0x319E,
- 0x9BE6, 0x3196, 0x9BE7, 0x15FD, 0x9BE8, 0x15FC, 0x9BEA, 0x3191,
- 0x9BEB, 0x3192, 0x9BEC, 0x319B, 0x9BF0, 0x3198, 0x9BF7, 0x3293,
- 0x9BF8, 0x3296, 0x9BFD, 0x156C, 0x9C05, 0x3294, 0x9C06, 0x329A,
- 0x9C07, 0x3298, 0x9C08, 0x3292, 0x9C09, 0x329D, 0x9C0B, 0x3291,
- 0x9C0D, 0x1660, 0x9C0E, 0x3299, 0x9C12, 0x3295, 0x9C13, 0x165F,
- 0x9C14, 0x329C, 0x9C17, 0x329B, 0x9C1C, 0x334C, 0x9C1D, 0x334B,
- 0x9C21, 0x3352, 0x9C23, 0x334E, 0x9C24, 0x3351, 0x9C25, 0x16B0,
- 0x9C28, 0x334F, 0x9C29, 0x3350, 0x9C2B, 0x334A, 0x9C2C, 0x334D,
- 0x9C2D, 0x16AF, 0x9C31, 0x16ED, 0x9C32, 0x33F2, 0x9C33, 0x33ED,
- 0x9C34, 0x33F1, 0x9C36, 0x33F4, 0x9C37, 0x33F0, 0x9C39, 0x33EC,
- 0x9C3B, 0x16EF, 0x9C3C, 0x33EF, 0x9C3D, 0x33F3, 0x9C3E, 0x16EE,
- 0x9C3F, 0x33EA, 0x9C40, 0x3297, 0x9C41, 0x33EE, 0x9C44, 0x33EB,
- 0x9C46, 0x33E8, 0x9C48, 0x33E9, 0x9C49, 0x16EC, 0x9C4A, 0x3457,
- 0x9C4B, 0x3459, 0x9C4C, 0x345C, 0x9C4D, 0x3458, 0x9C4E, 0x345D,
- 0x9C50, 0x3456, 0x9C52, 0x3454, 0x9C54, 0x1719, 0x9C55, 0x345A,
- 0x9C56, 0x171B, 0x9C57, 0x171A, 0x9C58, 0x3455, 0x9C59, 0x345B,
- 0x9C5E, 0x34B5, 0x9C5F, 0x173A, 0x9C60, 0x34B6, 0x9C62, 0x34B4,
- 0x9C63, 0x34B1, 0x9C66, 0x34B3, 0x9C67, 0x34B2, 0x9C68, 0x34F4,
- 0x9C6D, 0x34F6, 0x9C6E, 0x34F5, 0x9C71, 0x3514, 0x9C73, 0x3513,
- 0x9C74, 0x3512, 0x9C75, 0x3515, 0x9C77, 0x1760, 0x9C78, 0x1761,
- 0x9C79, 0x3541, 0x9C7A, 0x3545, 0x9CE5, 0x0BE2, 0x9CE6, 0x235F,
- 0x9CE7, 0x2610, 0x9CE9, 0x0F79, 0x9CEA, 0x260E, 0x9CED, 0x260F,
- 0x9CF1, 0x2879, 0x9CF2, 0x287A, 0x9CF3, 0x10FE, 0x9CF4, 0x10FC,
- 0x9CF5, 0x287B, 0x9CF6, 0x10FD, 0x9CF7, 0x2AF4, 0x9CF9, 0x2AF7,
- 0x9CFA, 0x2AF1, 0x9CFB, 0x2AF8, 0x9CFC, 0x2AF0, 0x9CFD, 0x2AF2,
- 0x9CFF, 0x2AF3, 0x9D00, 0x2AF6, 0x9D03, 0x1284, 0x9D04, 0x2AFB,
- 0x9D05, 0x2AFA, 0x9D06, 0x1282, 0x9D07, 0x2AF5, 0x9D08, 0x2AF9,
- 0x9D09, 0x1283, 0x9D10, 0x2D2D, 0x9D12, 0x13AE, 0x9D14, 0x2D28,
- 0x9D15, 0x13AA, 0x9D17, 0x2D25, 0x9D18, 0x2D2B, 0x9D19, 0x2D2E,
- 0x9D1B, 0x13AF, 0x9D1D, 0x2D2A, 0x9D1E, 0x2D27, 0x9D1F, 0x2D2F,
- 0x9D20, 0x2D26, 0x9D22, 0x2D2C, 0x9D23, 0x13AB, 0x9D25, 0x2D24,
- 0x9D26, 0x13AC, 0x9D28, 0x13AD, 0x9D29, 0x2D29, 0x9D2D, 0x2F00,
- 0x9D2E, 0x2EF3, 0x9D2F, 0x2EF4, 0x9D30, 0x2EF7, 0x9D31, 0x2EF5,
- 0x9D33, 0x2EEF, 0x9D36, 0x2EF2, 0x9D37, 0x2EFC, 0x9D38, 0x2EF6,
- 0x9D3B, 0x14BF, 0x9D3D, 0x2EFE, 0x9D3E, 0x2EFB, 0x9D3F, 0x14C0,
- 0x9D40, 0x2EFD, 0x9D41, 0x2EF0, 0x9D42, 0x2EF9, 0x9D43, 0x2EFA,
- 0x9D45, 0x2EF8, 0x9D4A, 0x3061, 0x9D4B, 0x3063, 0x9D4C, 0x3066,
- 0x9D4F, 0x3060, 0x9D51, 0x156F, 0x9D52, 0x3068, 0x9D53, 0x305F,
- 0x9D54, 0x3069, 0x9D56, 0x3065, 0x9D57, 0x3067, 0x9D58, 0x306B,
- 0x9D59, 0x3064, 0x9D5A, 0x306C, 0x9D5B, 0x3062, 0x9D5C, 0x305E,
- 0x9D5D, 0x1570, 0x9D5F, 0x306A, 0x9D60, 0x1571, 0x9D61, 0x1601,
- 0x9D67, 0x2EF1, 0x9D68, 0x31BB, 0x9D69, 0x31B2, 0x9D6A, 0x1603,
- 0x9D6B, 0x31AE, 0x9D6C, 0x1604, 0x9D6F, 0x31B7, 0x9D70, 0x31B1,
- 0x9D71, 0x31A7, 0x9D72, 0x1602, 0x9D73, 0x31B4, 0x9D74, 0x31AF,
- 0x9D75, 0x31B0, 0x9D77, 0x31A2, 0x9D78, 0x31A9, 0x9D79, 0x31B8,
- 0x9D7B, 0x31B5, 0x9D7D, 0x31AD, 0x9D7F, 0x31B9, 0x9D80, 0x31A8,
- 0x9D81, 0x31A3, 0x9D82, 0x31B6, 0x9D84, 0x31A5, 0x9D85, 0x31B3,
- 0x9D86, 0x31AA, 0x9D87, 0x31BA, 0x9D88, 0x31A6, 0x9D89, 0x1600,
- 0x9D8A, 0x31A4, 0x9D8B, 0x31AB, 0x9D8C, 0x31AC, 0x9D90, 0x32A4,
- 0x9D92, 0x32A2, 0x9D94, 0x32A7, 0x9D96, 0x32B3, 0x9D97, 0x32AA,
- 0x9D98, 0x32A3, 0x9D99, 0x329F, 0x9D9A, 0x32AC, 0x9D9B, 0x32A5,
- 0x9D9C, 0x32A8, 0x9D9D, 0x32A1, 0x9D9E, 0x32AF, 0x9D9F, 0x329E,
- 0x9DA0, 0x32A6, 0x9DA1, 0x32AB, 0x9DA2, 0x32AD, 0x9DA3, 0x32B0,
- 0x9DA4, 0x32A0, 0x9DA6, 0x32B4, 0x9DA7, 0x32B5, 0x9DA8, 0x32AE,
- 0x9DA9, 0x32B2, 0x9DAA, 0x32A9, 0x9DAC, 0x3362, 0x9DAD, 0x3365,
- 0x9DAF, 0x16B1, 0x9DB1, 0x3364, 0x9DB2, 0x3369, 0x9DB3, 0x3367,
- 0x9DB4, 0x16B2, 0x9DB5, 0x335E, 0x9DB6, 0x3354, 0x9DB7, 0x3353,
- 0x9DB8, 0x16B4, 0x9DB9, 0x3360, 0x9DBA, 0x3361, 0x9DBB, 0x335D,
- 0x9DBC, 0x3355, 0x9DBE, 0x335A, 0x9DBF, 0x32B1, 0x9DC1, 0x3356,
- 0x9DC2, 0x16B3, 0x9DC3, 0x335C, 0x9DC5, 0x335B, 0x9DC7, 0x3357,
- 0x9DC8, 0x3363, 0x9DCA, 0x3358, 0x9DCB, 0x33F9, 0x9DCC, 0x3366,
- 0x9DCD, 0x3368, 0x9DCE, 0x335F, 0x9DCF, 0x3359, 0x9DD0, 0x33FA,
- 0x9DD1, 0x33FC, 0x9DD2, 0x33F6, 0x9DD3, 0x16F0, 0x9DD5, 0x3403,
- 0x9DD6, 0x3401, 0x9DD7, 0x16F1, 0x9DD8, 0x3400, 0x9DD9, 0x33FF,
- 0x9DDA, 0x33F8, 0x9DDB, 0x33F5, 0x9DDC, 0x33FB, 0x9DDD, 0x3404,
- 0x9DDE, 0x33F7, 0x9DDF, 0x33FD, 0x9DE1, 0x3466, 0x9DE2, 0x346B,
- 0x9DE3, 0x3461, 0x9DE4, 0x3464, 0x9DE5, 0x171C, 0x9DE6, 0x3468,
- 0x9DE8, 0x346F, 0x9DE9, 0x33FE, 0x9DEB, 0x3462, 0x9DEC, 0x346C,
- 0x9DED, 0x3470, 0x9DEE, 0x3467, 0x9DEF, 0x3460, 0x9DF0, 0x346A,
- 0x9DF2, 0x3469, 0x9DF3, 0x346E, 0x9DF4, 0x346D, 0x9DF5, 0x3402,
- 0x9DF6, 0x3465, 0x9DF7, 0x345F, 0x9DF8, 0x3463, 0x9DF9, 0x173B,
- 0x9DFA, 0x173C, 0x9DFB, 0x345E, 0x9DFD, 0x34C1, 0x9DFE, 0x34B8,
- 0x9DFF, 0x34C0, 0x9E00, 0x34BD, 0x9E01, 0x34BE, 0x9E02, 0x34B7,
- 0x9E03, 0x34BA, 0x9E04, 0x34C2, 0x9E05, 0x34BC, 0x9E06, 0x34BB,
- 0x9E07, 0x34B9, 0x9E09, 0x34BF, 0x9E0B, 0x34F7, 0x9E0D, 0x34F8,
- 0x9E0F, 0x34FA, 0x9E10, 0x34F9, 0x9E11, 0x34FC, 0x9E12, 0x34FB,
- 0x9E13, 0x3517, 0x9E14, 0x3516, 0x9E15, 0x3530, 0x9E17, 0x3531,
- 0x9E19, 0x353D, 0x9E1A, 0x1765, 0x9E1B, 0x1769, 0x9E1D, 0x3546,
- 0x9E1E, 0x176A, 0x9E75, 0x0BE3, 0x9E79, 0x1661, 0x9E7A, 0x336A,
- 0x9E7C, 0x173D, 0x9E7D, 0x173E, 0x9E7F, 0x0BE4, 0x9E80, 0x2611,
- 0x9E82, 0x0F7A, 0x9E83, 0x2AFC, 0x9E86, 0x2D31, 0x9E87, 0x2D32,
- 0x9E88, 0x2D30, 0x9E89, 0x2F02, 0x9E8A, 0x2F01, 0x9E8B, 0x14C1,
- 0x9E8C, 0x306E, 0x9E8D, 0x2F03, 0x9E8E, 0x306D, 0x9E91, 0x31BD,
- 0x9E92, 0x1605, 0x9E93, 0x1607, 0x9E94, 0x31BC, 0x9E97, 0x1606,
- 0x9E99, 0x32B6, 0x9E9A, 0x32B8, 0x9E9B, 0x32B7, 0x9E9C, 0x336B,
- 0x9E9D, 0x16B5, 0x9E9F, 0x171D, 0x9EA0, 0x34C3, 0x9EA1, 0x34FD,
- 0x9EA4, 0x354A, 0x9EA5, 0x0BE5, 0x9EA7, 0x287C, 0x9EA9, 0x1285,
- 0x9EAD, 0x2D34, 0x9EAE, 0x2D33, 0x9EB0, 0x2F04, 0x9EB4, 0x1608,
- 0x9EB5, 0x1662, 0x9EB6, 0x3405, 0x9EB7, 0x3542, 0x9EBB, 0x0BE6,
- 0x9EBC, 0x10FF, 0x9EBE, 0x1286, 0x9EC0, 0x31BE, 0x9EC2, 0x3471,
- 0x9EC3, 0x0DBB, 0x9EC8, 0x2F05, 0x9ECC, 0x1751, 0x9ECD, 0x0DBC,
- 0x9ECE, 0x1287, 0x9ECF, 0x14C2, 0x9ED0, 0x3472, 0x9ED1, 0x0DBD,
- 0x9ED3, 0x2AFD, 0x9ED4, 0x13B1, 0x9ED5, 0x2D35, 0x9ED6, 0x2D36,
- 0x9ED8, 0x13B0, 0x9EDA, 0x2F06, 0x9EDB, 0x14C6, 0x9EDC, 0x14C4,
- 0x9EDD, 0x14C5, 0x9EDE, 0x14C3, 0x9EDF, 0x306F, 0x9EE0, 0x1572,
- 0x9EE4, 0x32BA, 0x9EE5, 0x32B9, 0x9EE6, 0x32BC, 0x9EE7, 0x32BB,
- 0x9EE8, 0x1663, 0x9EEB, 0x336C, 0x9EED, 0x336E, 0x9EEE, 0x336D,
- 0x9EEF, 0x16B6, 0x9EF0, 0x3406, 0x9EF2, 0x3473, 0x9EF3, 0x3474,
- 0x9EF4, 0x171E, 0x9EF5, 0x34FE, 0x9EF6, 0x3518, 0x9EF7, 0x1762,
- 0x9EF9, 0x2360, 0x9EFA, 0x2D37, 0x9EFB, 0x2F07, 0x9EFC, 0x31BF,
- 0x9EFD, 0x2612, 0x9EFF, 0x2F08, 0x9F00, 0x3071, 0x9F01, 0x3070,
- 0x9F06, 0x3475, 0x9F07, 0x173F, 0x9F09, 0x34FF, 0x9F0A, 0x3519,
- 0x9F0E, 0x0F7B, 0x9F0F, 0x2AFE, 0x9F10, 0x2AFF, 0x9F12, 0x2D38,
- 0x9F13, 0x0F7C, 0x9F15, 0x1573, 0x9F16, 0x3072, 0x9F18, 0x3370,
- 0x9F19, 0x16B7, 0x9F1A, 0x3371, 0x9F1B, 0x336F, 0x9F1C, 0x3476,
- 0x9F1E, 0x34C4, 0x9F20, 0x0F7D, 0x9F22, 0x2F0B, 0x9F23, 0x2F0A,
- 0x9F24, 0x2F09, 0x9F25, 0x3073, 0x9F28, 0x3077, 0x9F29, 0x3076,
- 0x9F2A, 0x3075, 0x9F2B, 0x3074, 0x9F2C, 0x1574, 0x9F2D, 0x31C0,
- 0x9F2E, 0x32BE, 0x9F2F, 0x1664, 0x9F30, 0x32BD, 0x9F31, 0x3372,
- 0x9F32, 0x3409, 0x9F33, 0x3408, 0x9F34, 0x16F2, 0x9F35, 0x3407,
- 0x9F36, 0x3479, 0x9F37, 0x3478, 0x9F38, 0x3477, 0x9F3B, 0x1100,
- 0x9F3D, 0x2D39, 0x9F3E, 0x14C7, 0x9F40, 0x31C1, 0x9F41, 0x31C2,
- 0x9F42, 0x340A, 0x9F43, 0x347A, 0x9F46, 0x34C5, 0x9F47, 0x3500,
- 0x9F48, 0x3532, 0x9F49, 0x354C, 0x9F4A, 0x1101, 0x9F4B, 0x14C8,
- 0x9F4C, 0x3078, 0x9F4D, 0x31C3, 0x9F4E, 0x3373, 0x9F4F, 0x347B,
- 0x9F52, 0x1289, 0x9F54, 0x2F0C, 0x9F55, 0x3079, 0x9F56, 0x31C4,
- 0x9F57, 0x31C5, 0x9F58, 0x31C6, 0x9F59, 0x32C3, 0x9F5B, 0x32BF,
- 0x9F5C, 0x16B8, 0x9F5D, 0x32C2, 0x9F5E, 0x32C1, 0x9F5F, 0x1665,
- 0x9F60, 0x32C0, 0x9F61, 0x1667, 0x9F63, 0x1666, 0x9F64, 0x3375,
- 0x9F65, 0x3374, 0x9F66, 0x16B9, 0x9F67, 0x16BA, 0x9F6A, 0x16F4,
- 0x9F6B, 0x340B, 0x9F6C, 0x16F3, 0x9F6E, 0x347E, 0x9F6F, 0x347F,
- 0x9F70, 0x347D, 0x9F71, 0x347C, 0x9F72, 0x1741, 0x9F74, 0x34C6,
- 0x9F75, 0x34C7, 0x9F76, 0x34C8, 0x9F77, 0x1740, 0x9F78, 0x3501,
- 0x9F79, 0x3504, 0x9F7A, 0x3503, 0x9F7B, 0x3502, 0x9F7E, 0x354B,
- 0x9F8D, 0x13B2, 0x9F90, 0x157C, 0x9F91, 0x32C4, 0x9F92, 0x3376,
- 0x9F94, 0x16F5, 0x9F95, 0x340C, 0x9F98, 0x354D, 0x9F9C, 0x13B3,
- 0x9FA0, 0x2F0D, 0x9FA2, 0x340D, 0x9FA4, 0x351A, 0xE01F, 0x083A,
- 0xE026, 0x09FD, 0xE05B, 0x030D, 0xE063, 0x016B, 0xE073, 0x0860,
- 0xE0F3, 0x0C23, 0xE12E, 0x17E4, 0xE149, 0x212F, 0xE191, 0x115F,
- 0xE1BA, 0x0C79, 0xE1C9, 0x04C3, 0xE22C, 0x18BD, 0xE22D, 0x0CBD,
- 0xE230, 0x0CA5, 0xE266, 0x0CCE, 0xE2A3, 0x0E84, 0xE2BC, 0x0120,
- 0xE2EF, 0x1BA8, 0xE33A, 0x1055, 0xE340, 0x2DE8, 0xE34F, 0x0121,
- 0xE35A, 0x106B, 0xE363, 0x1326, 0xE37C, 0x066B, 0xE37F, 0x132E,
- 0xE3C5, 0x0D35, 0xE3D7, 0x27C2, 0xE3DC, 0x22AD, 0xE417, 0x134C,
- 0xE44A, 0x09CE, 0xE478, 0x0BC7, 0xE485, 0x36E9, 0xE4C5, 0x1391,
- 0xE4DA, 0x16A4, 0xE545, 0x3072, 0xE5D2, 0x0119, 0xE5D3, 0x011A,
- 0xE5D4, 0x011C, 0xE5D5, 0x011B, 0xE5F4, 0x297C, 0xE6C6, 0x1D06,
- 0xE727, 0x29A1, 0xE7D3, 0x181B, 0xE893, 0x2B24, 0xEB40, 0x2F50,
- 0xEB42, 0x1725, 0xEB45, 0x32ED, 0xEB6E, 0x2AD9, 0xEB86, 0x1C14,
- 0xEB9E, 0x12E9, 0xEBA9, 0x2CAE, 0xEBBA, 0x1A64, 0xEBC9, 0x1404,
- 0xEBCF, 0x2324, 0xEBD2, 0x346A, 0xEBDE, 0x2291, 0xEC01, 0x1787,
- 0xEC02, 0x095F, 0xEC15, 0x1E99, 0xEC5B, 0x25C1, 0xEC5E, 0x0D0C,
- 0xECA6, 0x05E6, 0xED28, 0x0728, 0xED6E, 0x24B6, 0xED7C, 0x1806,
- 0xED9E, 0x3511, 0xEDE7, 0x0F82, 0xEE52, 0x05F2, 0xEE98, 0x247D,
- 0xF6B1, 0x01FA, 0xF6B2, 0x01FB, 0xF6B3, 0x01FC, 0xF6B4, 0x01FD,
- 0xF6B5, 0x01FE, 0xF6B6, 0x01FF, 0xF6B7, 0x0200, 0xF6B8, 0x0201,
- 0xF6B9, 0x0202, 0xF6BA, 0x0203, 0xF6BB, 0x0204, 0xF6BC, 0x0205,
- 0xF6BD, 0x0206, 0xF6BE, 0x0207, 0xF6BF, 0x0208, 0xF6C0, 0x0209,
- 0xF6C1, 0x020A, 0xF6C2, 0x020B, 0xF6C3, 0x020C, 0xF6C4, 0x020D,
- 0xF6C5, 0x020E, 0xF6C6, 0x020F, 0xF6C7, 0x0210, 0xF6C8, 0x0211,
- 0xF6C9, 0x0212, 0xF6CA, 0x0213, 0xF6CB, 0x0214, 0xF6CC, 0x0215,
- 0xF6CD, 0x0216, 0xF6CE, 0x0217, 0xF6CF, 0x0219, 0xF6D0, 0x021A,
- 0xF6D1, 0x021B, 0xF6D2, 0x021C, 0xF6D3, 0x021D, 0xF6D4, 0x021E,
- 0xF6D5, 0x021F, 0xF6D6, 0x0220, 0xF6D7, 0x0221, 0xF6D8, 0x0222,
- 0xF6D9, 0x0223, 0xF6DA, 0x0224, 0xF6DB, 0x0225, 0xF6DC, 0x0226,
- 0xF6DD, 0x0227, 0xF6DE, 0x0228, 0xF6E0, 0x022A, 0xF6E1, 0x022B,
- 0xF6E2, 0x022C, 0xF6E4, 0x022E, 0xF6E6, 0x0230, 0xF6E8, 0x35B3,
- 0xF6E9, 0x35B4, 0xF6EA, 0x35B5, 0xF6EB, 0x35B6, 0xF6EC, 0x35B7,
- 0xF6ED, 0x35B8, 0xF6F0, 0x35BA, 0xF6F1, 0x35BB, 0xF6F2, 0x35BC,
- 0xF6F3, 0x35BD, 0xF6F4, 0x35BE, 0xF6F5, 0x35BF, 0xF6F6, 0x35C0,
- 0xF6F7, 0x35C1, 0xF6F8, 0x35C2, 0xF6F9, 0x35C3, 0xF6FA, 0x35C4,
- 0xF6FB, 0x35C5, 0xF6FC, 0x35C6, 0xF6FD, 0x35C7, 0xF6FE, 0x35C8,
- 0xF6FF, 0x35C9, 0xF700, 0x35CA, 0xF701, 0x35CB, 0xF702, 0x35CC,
- 0xF703, 0x35CD, 0xF704, 0x35CE, 0xF705, 0x35CF, 0xF706, 0x35D0,
- 0xF707, 0x35D1, 0xF708, 0x35D2, 0xF709, 0x35D3, 0xF70A, 0x35D4,
- 0xF70B, 0x35D5, 0xF70C, 0x35D6, 0xF70D, 0x35D7, 0xF70E, 0x35D8,
- 0xF70F, 0x35D9, 0xF710, 0x35DA, 0xF711, 0x35DB, 0xF712, 0x35DC,
- 0xF713, 0x35DD, 0xF714, 0x35DE, 0xF715, 0x35DF, 0xF716, 0x35E0,
- 0xF717, 0x35E1, 0xF718, 0x35E2, 0xF719, 0x35E3, 0xF71A, 0x35E4,
- 0xF71B, 0x35E5, 0xF71C, 0x35E6, 0xF71D, 0x35E7, 0xF71E, 0x35E8,
- 0xF71F, 0x35E9, 0xF720, 0x35EA, 0xF721, 0x35EB, 0xF722, 0x35EC,
- 0xF723, 0x35ED, 0xF724, 0x35EE, 0xF725, 0x35EF, 0xF726, 0x35F0,
- 0xF727, 0x35F1, 0xF728, 0x35F2, 0xF729, 0x35F3, 0xF72A, 0x35F4,
- 0xF72B, 0x35F5, 0xF72C, 0x35F6, 0xF72D, 0x35F7, 0xF72E, 0x35F8,
- 0xF72F, 0x35F9, 0xF730, 0x35FA, 0xF731, 0x35FB, 0xF732, 0x35FC,
- 0xF733, 0x35FD, 0xF734, 0x35FE, 0xF735, 0x35FF, 0xF736, 0x3600,
- 0xF737, 0x3601, 0xF738, 0x3602, 0xF739, 0x3603, 0xF73A, 0x3604,
- 0xF73B, 0x3605, 0xF73C, 0x3606, 0xF73D, 0x3607, 0xF73E, 0x3608,
- 0xF73F, 0x3609, 0xF740, 0x360A, 0xF741, 0x360B, 0xF742, 0x360C,
- 0xF743, 0x360D, 0xF744, 0x360E, 0xF745, 0x360F, 0xF746, 0x3610,
- 0xF747, 0x3611, 0xF748, 0x3612, 0xF749, 0x3613, 0xF74A, 0x3614,
- 0xF74B, 0x3615, 0xF74C, 0x3616, 0xF74D, 0x3617, 0xF74E, 0x3618,
- 0xF74F, 0x3619, 0xF750, 0x361A, 0xF751, 0x361B, 0xF752, 0x361C,
- 0xF753, 0x361D, 0xF754, 0x361E, 0xF755, 0x361F, 0xF756, 0x3620,
- 0xF757, 0x3621, 0xF758, 0x3622, 0xF759, 0x3623, 0xF75A, 0x3624,
- 0xF75B, 0x3625, 0xF75C, 0x3626, 0xF75D, 0x3627, 0xF75E, 0x3628,
- 0xF75F, 0x3629, 0xF760, 0x362A, 0xF761, 0x362B, 0xF762, 0x362C,
- 0xF763, 0x362D, 0xF764, 0x362E, 0xF765, 0x362F, 0xF766, 0x3630,
- 0xF767, 0x3631, 0xF768, 0x3632, 0xF769, 0x3633, 0xF76A, 0x3634,
- 0xF76B, 0x3635, 0xF76C, 0x3636, 0xF76D, 0x3637, 0xF76E, 0x3638,
- 0xF76F, 0x3639, 0xF770, 0x363A, 0xF771, 0x363B, 0xF772, 0x363C,
- 0xF773, 0x363D, 0xF774, 0x363E, 0xF775, 0x363F, 0xF776, 0x3640,
- 0xF777, 0x3641, 0xF778, 0x3642, 0xF779, 0x3643, 0xF77A, 0x3644,
- 0xF77B, 0x3645, 0xF77C, 0x3646, 0xF77D, 0x3647, 0xF77E, 0x3648,
- 0xF77F, 0x3649, 0xF780, 0x364A, 0xF781, 0x364B, 0xF782, 0x364C,
- 0xF783, 0x364D, 0xF784, 0x364E, 0xF785, 0x364F, 0xF786, 0x3650,
- 0xF787, 0x3651, 0xF788, 0x3652, 0xF789, 0x3653, 0xF78A, 0x3654,
- 0xF78B, 0x3655, 0xF78C, 0x3656, 0xF78D, 0x3657, 0xF78E, 0x3658,
- 0xF78F, 0x3659, 0xF790, 0x365A, 0xF791, 0x365B, 0xF792, 0x365C,
- 0xF793, 0x365D, 0xF794, 0x365E, 0xF795, 0x365F, 0xF796, 0x3660,
- 0xF797, 0x3661, 0xF798, 0x3662, 0xF799, 0x3663, 0xF79A, 0x3664,
- 0xF79B, 0x3665, 0xF79C, 0x3666, 0xF79D, 0x3667, 0xF79E, 0x3668,
- 0xF79F, 0x3669, 0xF7A0, 0x366A, 0xF7A1, 0x366B, 0xF7A2, 0x366C,
- 0xF7A3, 0x366D, 0xF7A4, 0x366E, 0xF7A5, 0x366F, 0xF7A6, 0x3670,
- 0xF7A7, 0x3671, 0xF7A8, 0x3672, 0xF7A9, 0x3673, 0xF7AA, 0x3674,
- 0xF7AB, 0x3675, 0xF7AC, 0x3676, 0xF7AD, 0x3677, 0xF7AE, 0x3678,
- 0xF7AF, 0x3679, 0xF7B0, 0x367A, 0xF7B1, 0x367B, 0xF7B2, 0x367C,
- 0xF7B3, 0x367D, 0xF7B4, 0x367E, 0xF7B5, 0x367F, 0xF7B6, 0x3680,
- 0xF7B7, 0x3681, 0xF7B8, 0x3682, 0xF7B9, 0x3683, 0xF7BA, 0x3684,
- 0xF7BB, 0x3685, 0xF7BC, 0x3686, 0xF7BD, 0x3687, 0xF7BE, 0x3688,
- 0xF7BF, 0x3689, 0xF7C0, 0x368A, 0xF7C1, 0x368B, 0xF7C2, 0x368C,
- 0xF7C3, 0x368D, 0xF7C4, 0x368E, 0xF7C5, 0x368F, 0xF7C6, 0x3690,
- 0xF7C7, 0x3691, 0xF7C8, 0x3692, 0xF7C9, 0x3693, 0xF7CA, 0x3694,
- 0xF7CB, 0x3695, 0xF7CC, 0x3696, 0xF7CD, 0x3697, 0xF7CE, 0x3698,
- 0xF7CF, 0x3699, 0xF7D0, 0x369A, 0xF7D1, 0x369B, 0xF7D2, 0x369C,
- 0xF7D3, 0x369D, 0xF7D4, 0x369E, 0xF7D5, 0x369F, 0xF7D6, 0x36A0,
- 0xF7D7, 0x36A1, 0xF7D8, 0x36A2, 0xF7D9, 0x36A3, 0xF7DA, 0x36A4,
- 0xF7DB, 0x36A5, 0xF7DC, 0x36A6, 0xF7DD, 0x36A7, 0xF7DE, 0x36A8,
- 0xF7DF, 0x36A9, 0xF7E0, 0x36AA, 0xF7E1, 0x36AB, 0xF7E2, 0x36AC,
- 0xF7E3, 0x36AD, 0xF7E4, 0x36AE, 0xF7E5, 0x36AF, 0xF7E6, 0x36B0,
- 0xF7E7, 0x36B1, 0xF7E8, 0x36B2, 0xF7E9, 0x36B3, 0xF7EA, 0x36B4,
- 0xF7EB, 0x36B5, 0xF7EC, 0x36B6, 0xF7ED, 0x36B7, 0xF7EE, 0x36B8,
- 0xF817, 0x36E1, 0xF818, 0x36E2, 0xF819, 0x36E3, 0xF81A, 0x36E4,
- 0xF81B, 0x36E5, 0xF81C, 0x36E6, 0xF81D, 0x36E7, 0xFA0C, 0x0274,
- 0xFA0D, 0x2381, 0xFE30, 0x006D, 0xFE31, 0x007A, 0xFE33, 0x35AF,
- 0xFE34, 0x35B1, 0xFE35, 0x0082, 0xFE36, 0x0083, 0xFE37, 0x0086,
- 0xFE38, 0x0087, 0xFE39, 0x008A, 0xFE3A, 0x008B, 0xFE3B, 0x008E,
- 0xFE3C, 0x008F, 0xFE3D, 0x0092, 0xFE3E, 0x0093, 0xFE3F, 0x0096,
- 0xFE40, 0x0097, 0xFE41, 0x009A, 0xFE42, 0x009B, 0xFE43, 0x009E,
- 0xFE44, 0x009F, 0xFE49, 0x00C7, 0xFE4A, 0x00C8, 0xFE4B, 0x00CB,
- 0xFE4C, 0x00CC, 0xFE4D, 0x00C9, 0xFE4E, 0x00CA, 0xFE4F, 0x35B2,
- 0xFE50, 0x0070, 0xFE51, 0x0071, 0xFE52, 0x0072, 0xFE54, 0x0074,
- 0xFE55, 0x0075, 0xFE56, 0x0076, 0xFE57, 0x0077, 0xFE59, 0x00A0,
- 0xFE5A, 0x00A1, 0xFE5B, 0x00A2, 0xFE5C, 0x00A3, 0xFE5D, 0x00A4,
- 0xFE5E, 0x00A5, 0xFE5F, 0x00CD, 0xFE60, 0x00CE, 0xFE61, 0x00CF,
- 0xFE62, 0x00DF, 0xFE63, 0x00E0, 0xFE64, 0x00E1, 0xFE65, 0x00E2,
- 0xFE66, 0x00E3, 0xFE68, 0x0102, 0xFE69, 0x010C, 0xFE6A, 0x010D,
- 0xFE6B, 0x010E, 0xFF01, 0x006C, 0xFF02, 0x36E4, 0xFF03, 0x00AE,
- 0xFF04, 0x0103, 0xFF05, 0x0108, 0xFF06, 0x00AF, 0xFF07, 0x36E3,
- 0xFF08, 0x0080, 0xFF09, 0x0081, 0xFF0A, 0x00B0, 0xFF0B, 0x00D0,
- 0xFF0C, 0x0064, 0xFF0D, 0x00D1, 0xFF0E, 0x0067, 0xFF0F, 0x0101,
- 0xFF10, 0x014D, 0xFF11, 0x014E, 0xFF12, 0x014F, 0xFF13, 0x0150,
- 0xFF14, 0x0151, 0xFF15, 0x0152, 0xFF16, 0x0153, 0xFF17, 0x0154,
- 0xFF18, 0x0155, 0xFF19, 0x0156, 0xFF1A, 0x006A, 0xFF1B, 0x0069,
- 0xFF1C, 0x00D6, 0xFF1D, 0x00D8, 0xFF1E, 0x00D7, 0xFF1F, 0x006B,
- 0xFF20, 0x0109, 0xFF21, 0x016D, 0xFF22, 0x016E, 0xFF23, 0x016F,
- 0xFF24, 0x0170, 0xFF25, 0x0171, 0xFF26, 0x0172, 0xFF27, 0x0173,
- 0xFF28, 0x0174, 0xFF29, 0x0175, 0xFF2A, 0x0176, 0xFF2B, 0x0177,
- 0xFF2C, 0x0178, 0xFF2D, 0x0179, 0xFF2E, 0x017A, 0xFF2F, 0x017B,
- 0xFF30, 0x017C, 0xFF31, 0x017D, 0xFF32, 0x017E, 0xFF33, 0x017F,
- 0xFF34, 0x0180, 0xFF35, 0x0181, 0xFF36, 0x0182, 0xFF37, 0x0183,
- 0xFF38, 0x0184, 0xFF39, 0x0185, 0xFF3A, 0x0186, 0xFF3B, 0x35BE,
- 0xFF3C, 0x0102, 0xFF3D, 0x35BF, 0xFF3E, 0x35B4, 0xFF3F, 0x00C5,
- 0xFF41, 0x0187, 0xFF42, 0x0188, 0xFF43, 0x0189, 0xFF44, 0x018A,
- 0xFF45, 0x018B, 0xFF46, 0x018C, 0xFF47, 0x018D, 0xFF48, 0x018E,
- 0xFF49, 0x018F, 0xFF4A, 0x0190, 0xFF4B, 0x0191, 0xFF4C, 0x0192,
- 0xFF4D, 0x0193, 0xFF4E, 0x0194, 0xFF4F, 0x0195, 0xFF50, 0x0196,
- 0xFF51, 0x0197, 0xFF52, 0x0198, 0xFF53, 0x0199, 0xFF54, 0x019A,
- 0xFF55, 0x019B, 0xFF56, 0x019C, 0xFF57, 0x019D, 0xFF58, 0x019E,
- 0xFF59, 0x019F, 0xFF5A, 0x01A0, 0xFF5B, 0x0084, 0xFF5C, 0x0078,
- 0xFF5D, 0x0085, 0xFF5E, 0x00E4, 0xFF64, 0x0071, 0xFFE0, 0x0106,
- 0xFFE1, 0x0107, 0xFFE2, 0x36E1, 0xFFE3, 0x00C4, 0xFFE4, 0x36E2,
- 0xFFE5, 0x0104,
+ 0x0020, 0x0001, 0x0021, 0x0002, 0x0022, 0x0003, 0x0023, 0x0004, 0x0024,
+ 0x0005, 0x0025, 0x0006, 0x0026, 0x0007, 0x0027, 0x0008, 0x0028, 0x0009,
+ 0x0029, 0x000A, 0x002A, 0x000B, 0x002B, 0x000C, 0x002C, 0x000D, 0x002D,
+ 0x000E, 0x002E, 0x000F, 0x002F, 0x0010, 0x0030, 0x0011, 0x0031, 0x0012,
+ 0x0032, 0x0013, 0x0033, 0x0014, 0x0034, 0x0015, 0x0035, 0x0016, 0x0036,
+ 0x0017, 0x0037, 0x0018, 0x0038, 0x0019, 0x0039, 0x001A, 0x003A, 0x001B,
+ 0x003B, 0x001C, 0x003C, 0x001D, 0x003D, 0x001E, 0x003E, 0x001F, 0x003F,
+ 0x0020, 0x0040, 0x0021, 0x0041, 0x0022, 0x0042, 0x0023, 0x0043, 0x0024,
+ 0x0044, 0x0025, 0x0045, 0x0026, 0x0046, 0x0027, 0x0047, 0x0028, 0x0048,
+ 0x0029, 0x0049, 0x002A, 0x004A, 0x002B, 0x004B, 0x002C, 0x004C, 0x002D,
+ 0x004D, 0x002E, 0x004E, 0x002F, 0x004F, 0x0030, 0x0050, 0x0031, 0x0051,
+ 0x0032, 0x0052, 0x0033, 0x0053, 0x0034, 0x0054, 0x0035, 0x0055, 0x0036,
+ 0x0056, 0x0037, 0x0057, 0x0038, 0x0058, 0x0039, 0x0059, 0x003A, 0x005A,
+ 0x003B, 0x005B, 0x003C, 0x005C, 0x003D, 0x005D, 0x003E, 0x005E, 0x003F,
+ 0x005F, 0x0040, 0x0060, 0x0041, 0x0061, 0x0042, 0x0062, 0x0043, 0x0063,
+ 0x0044, 0x0064, 0x0045, 0x0065, 0x0046, 0x0066, 0x0047, 0x0067, 0x0048,
+ 0x0068, 0x0049, 0x0069, 0x004A, 0x006A, 0x004B, 0x006B, 0x004C, 0x006C,
+ 0x004D, 0x006D, 0x004E, 0x006E, 0x004F, 0x006F, 0x0050, 0x0070, 0x0051,
+ 0x0071, 0x0052, 0x0072, 0x0053, 0x0073, 0x0054, 0x0074, 0x0055, 0x0075,
+ 0x0056, 0x0076, 0x0057, 0x0077, 0x0058, 0x0078, 0x0059, 0x0079, 0x005A,
+ 0x007A, 0x005B, 0x007B, 0x005C, 0x007C, 0x005D, 0x007D, 0x005E, 0x007E,
+ 0x005F, 0x00A2, 0x0106, 0x00A3, 0x0107, 0x00A5, 0x0104, 0x00A7, 0x00B2,
+ 0x00A8, 0x35B3, 0x00AC, 0x36E1, 0x00AF, 0x00C3, 0x00B0, 0x0118, 0x00B1,
+ 0x00D4, 0x00B7, 0x0073, 0x00D7, 0x00D2, 0x00F7, 0x00D3, 0x02C6, 0x35B4,
+ 0x02C7, 0x01F8, 0x02CA, 0x01F7, 0x02CB, 0x01F9, 0x02CD, 0x00C6, 0x02D9,
+ 0x01F6, 0x0308, 0x35B3, 0x0391, 0x01A1, 0x0392, 0x01A2, 0x0393, 0x01A3,
+ 0x0394, 0x01A4, 0x0395, 0x01A5, 0x0396, 0x01A6, 0x0397, 0x01A7, 0x0398,
+ 0x01A8, 0x0399, 0x01A9, 0x039A, 0x01AA, 0x039B, 0x01AB, 0x039C, 0x01AC,
+ 0x039D, 0x01AD, 0x039E, 0x01AE, 0x039F, 0x01AF, 0x03A0, 0x01B0, 0x03A1,
+ 0x01B1, 0x03A3, 0x01B2, 0x03A4, 0x01B3, 0x03A5, 0x01B4, 0x03A6, 0x01B5,
+ 0x03A7, 0x01B6, 0x03A8, 0x01B7, 0x03A9, 0x01B8, 0x03B1, 0x01B9, 0x03B2,
+ 0x01BA, 0x03B3, 0x01BB, 0x03B4, 0x01BC, 0x03B5, 0x01BD, 0x03B6, 0x01BE,
+ 0x03B7, 0x01BF, 0x03B8, 0x01C0, 0x03B9, 0x01C1, 0x03BA, 0x01C2, 0x03BB,
+ 0x01C3, 0x03BC, 0x01C4, 0x03BD, 0x01C5, 0x03BE, 0x01C6, 0x03BF, 0x01C7,
+ 0x03C0, 0x01C8, 0x03C1, 0x01C9, 0x03C3, 0x01CA, 0x03C4, 0x01CB, 0x03C5,
+ 0x01CC, 0x03C6, 0x01CD, 0x03C7, 0x01CE, 0x03C8, 0x01CF, 0x03C9, 0x01D0,
+ 0x0401, 0x3670, 0x0410, 0x366A, 0x0411, 0x366B, 0x0412, 0x366C, 0x0413,
+ 0x366D, 0x0414, 0x366E, 0x0415, 0x366F, 0x0416, 0x3671, 0x0417, 0x3672,
+ 0x0418, 0x3673, 0x0419, 0x3674, 0x041A, 0x3675, 0x041B, 0x3676, 0x041C,
+ 0x3677, 0x041D, 0x3678, 0x041E, 0x3679, 0x041F, 0x367A, 0x0420, 0x367B,
+ 0x0421, 0x367C, 0x0422, 0x367D, 0x0423, 0x367E, 0x0424, 0x367F, 0x0425,
+ 0x3680, 0x0426, 0x3681, 0x0427, 0x3682, 0x0428, 0x3683, 0x0429, 0x3684,
+ 0x042A, 0x3685, 0x042B, 0x3686, 0x042C, 0x3687, 0x042D, 0x3688, 0x042E,
+ 0x3689, 0x042F, 0x368A, 0x0430, 0x368B, 0x0431, 0x368C, 0x0432, 0x368D,
+ 0x0433, 0x368E, 0x0434, 0x368F, 0x0435, 0x3690, 0x0436, 0x3692, 0x0437,
+ 0x3693, 0x0438, 0x3694, 0x0439, 0x3695, 0x043A, 0x3696, 0x043B, 0x3697,
+ 0x043C, 0x3698, 0x043D, 0x3699, 0x043E, 0x369A, 0x043F, 0x369B, 0x0440,
+ 0x369C, 0x0441, 0x369D, 0x0442, 0x369E, 0x0443, 0x369F, 0x0444, 0x36A0,
+ 0x0445, 0x36A1, 0x0446, 0x36A2, 0x0447, 0x36A3, 0x0448, 0x36A4, 0x0449,
+ 0x36A5, 0x044A, 0x36A6, 0x044B, 0x36A7, 0x044C, 0x36A8, 0x044D, 0x36A9,
+ 0x044E, 0x36AA, 0x044F, 0x36AB, 0x0451, 0x3691, 0x2013, 0x0079, 0x2014,
+ 0x007B, 0x2018, 0x00A6, 0x2019, 0x00A7, 0x201C, 0x00A8, 0x201D, 0x00A9,
+ 0x2022, 0x0068, 0x2025, 0x006F, 0x2026, 0x006E, 0x2027, 0x0068, 0x2032,
+ 0x00AD, 0x2035, 0x00AC, 0x203B, 0x00B1, 0x203E, 0x00C3, 0x2103, 0x010A,
+ 0x2105, 0x00C2, 0x2109, 0x010B, 0x2116, 0x36E6, 0x2121, 0x36E7, 0x2160,
+ 0x0157, 0x2161, 0x0158, 0x2162, 0x0159, 0x2163, 0x015A, 0x2164, 0x015B,
+ 0x2165, 0x015C, 0x2166, 0x015D, 0x2167, 0x015E, 0x2168, 0x015F, 0x2169,
+ 0x0160, 0x2170, 0x020E, 0x2171, 0x020F, 0x2172, 0x0210, 0x2173, 0x0211,
+ 0x2174, 0x0212, 0x2175, 0x0213, 0x2176, 0x0214, 0x2177, 0x0215, 0x2178,
+ 0x0216, 0x2179, 0x0217, 0x2190, 0x00F8, 0x2191, 0x00F5, 0x2192, 0x00F7,
+ 0x2193, 0x00F6, 0x2196, 0x00F9, 0x2197, 0x00FA, 0x2198, 0x00FC, 0x2199,
+ 0x00FB, 0x21B8, 0x36AD, 0x21B9, 0x36AE, 0x21E7, 0x36AC, 0x2215, 0x0101,
+ 0x221A, 0x00D5, 0x221E, 0x00DC, 0x221F, 0x00E9, 0x2220, 0x00E8, 0x2223,
+ 0x00FE, 0x2225, 0x00FD, 0x2229, 0x00E5, 0x222A, 0x00E6, 0x222B, 0x00ED,
+ 0x222E, 0x00EE, 0x2234, 0x00F0, 0x2235, 0x00EF, 0x223C, 0x00E4, 0x2252,
+ 0x00DD, 0x2260, 0x00DB, 0x2261, 0x00DE, 0x2266, 0x00D9, 0x2267, 0x00DA,
+ 0x2295, 0x00F3, 0x2299, 0x00F4, 0x22A5, 0x00E7, 0x22BF, 0x00EA, 0x22EF,
+ 0x006E, 0x2400, 0x0232, 0x2401, 0x0233, 0x2402, 0x0234, 0x2403, 0x0235,
+ 0x2404, 0x0236, 0x2405, 0x0237, 0x2406, 0x0238, 0x2407, 0x0239, 0x2408,
+ 0x023A, 0x2409, 0x023B, 0x240A, 0x023C, 0x240B, 0x023D, 0x240C, 0x023E,
+ 0x240D, 0x023F, 0x240E, 0x0240, 0x240F, 0x0241, 0x2410, 0x0242, 0x2411,
+ 0x0243, 0x2412, 0x0244, 0x2413, 0x0245, 0x2414, 0x0246, 0x2415, 0x0247,
+ 0x2416, 0x0248, 0x2417, 0x0249, 0x2418, 0x024A, 0x2419, 0x024B, 0x241A,
+ 0x024C, 0x241B, 0x024D, 0x241C, 0x024E, 0x241D, 0x024F, 0x241E, 0x0250,
+ 0x241F, 0x0251, 0x2421, 0x0252, 0x2460, 0x01FA, 0x2461, 0x01FB, 0x2462,
+ 0x01FC, 0x2463, 0x01FD, 0x2464, 0x01FE, 0x2465, 0x01FF, 0x2466, 0x0200,
+ 0x2467, 0x0201, 0x2468, 0x0202, 0x2469, 0x0203, 0x2474, 0x0204, 0x2475,
+ 0x0205, 0x2476, 0x0206, 0x2477, 0x0207, 0x2478, 0x0208, 0x2479, 0x0209,
+ 0x247A, 0x020A, 0x247B, 0x020B, 0x247C, 0x020C, 0x247D, 0x020D, 0x2500,
+ 0x0137, 0x2502, 0x0138, 0x250C, 0x013A, 0x2510, 0x013B, 0x2514, 0x013C,
+ 0x2518, 0x013D, 0x251C, 0x0135, 0x2524, 0x0134, 0x252C, 0x0133, 0x2534,
+ 0x0132, 0x253C, 0x0131, 0x2550, 0x0142, 0x2551, 0x370A, 0x2552, 0x36F8,
+ 0x2553, 0x3701, 0x2554, 0x36EF, 0x2555, 0x36FA, 0x2556, 0x3703, 0x2557,
+ 0x36F1, 0x2558, 0x36FE, 0x2559, 0x3707, 0x255A, 0x36F5, 0x255B, 0x3700,
+ 0x255C, 0x3709, 0x255D, 0x36F7, 0x255E, 0x0143, 0x255F, 0x3704, 0x2560,
+ 0x36F2, 0x2561, 0x0145, 0x2562, 0x3706, 0x2563, 0x36F4, 0x2564, 0x36F9,
+ 0x2565, 0x3702, 0x2566, 0x36F0, 0x2567, 0x36FF, 0x2568, 0x3708, 0x2569,
+ 0x36F6, 0x256A, 0x0144, 0x256B, 0x3705, 0x256C, 0x36F3, 0x256D, 0x013E,
+ 0x256E, 0x013F, 0x256F, 0x0141, 0x2570, 0x0140, 0x2571, 0x014A, 0x2572,
+ 0x014B, 0x2573, 0x014C, 0x2574, 0x35B0, 0x2581, 0x0122, 0x2582, 0x0123,
+ 0x2583, 0x0124, 0x2584, 0x0125, 0x2585, 0x0126, 0x2586, 0x0127, 0x2587,
+ 0x0128, 0x2588, 0x0129, 0x2589, 0x0130, 0x258A, 0x012F, 0x258B, 0x012E,
+ 0x258C, 0x012D, 0x258D, 0x012C, 0x258E, 0x012B, 0x258F, 0x012A, 0x2593,
+ 0x3710, 0x2594, 0x0136, 0x2595, 0x0139, 0x25A0, 0x00BE, 0x25A1, 0x00BD,
+ 0x25B2, 0x00B7, 0x25B3, 0x00B6, 0x25BC, 0x00C0, 0x25BD, 0x00BF, 0x25C6,
+ 0x00BC, 0x25C7, 0x00BB, 0x25CB, 0x00B4, 0x25CE, 0x00B8, 0x25CF, 0x00B5,
+ 0x25E2, 0x0146, 0x25E3, 0x0147, 0x25E4, 0x0149, 0x25E5, 0x0148, 0x2605,
+ 0x00BA, 0x2606, 0x00B9, 0x2609, 0x00F4, 0x2640, 0x00F1, 0x2641, 0x00F3,
+ 0x2642, 0x00F2, 0x273D, 0x35C0, 0x2F00, 0x0253, 0x2F01, 0x0218, 0x2F02,
+ 0x0219, 0x2F03, 0x021A, 0x2F04, 0x0254, 0x2F05, 0x021B, 0x2F06, 0x025A,
+ 0x2F07, 0x021C, 0x2F08, 0x025B, 0x2F09, 0x025C, 0x2F0A, 0x025D, 0x2F0B,
+ 0x025E, 0x2F0C, 0x021D, 0x2F0D, 0x021E, 0x2F0E, 0x021F, 0x2F0F, 0x025F,
+ 0x2F10, 0x176E, 0x2F11, 0x0260, 0x2F12, 0x0262, 0x2F13, 0x0220, 0x2F14,
+ 0x0263, 0x2F15, 0x176F, 0x2F16, 0x0221, 0x2F17, 0x0264, 0x2F18, 0x0265,
+ 0x2F19, 0x0222, 0x2F1A, 0x1770, 0x2F1B, 0x0223, 0x2F1C, 0x0266, 0x2F1D,
+ 0x0279, 0x2F1E, 0x1775, 0x2F1F, 0x027A, 0x2F20, 0x027B, 0x2F21, 0x0224,
+ 0x2F22, 0x0224, 0x2F23, 0x027C, 0x2F24, 0x027D, 0x2F25, 0x027E, 0x2F26,
+ 0x027F, 0x2F27, 0x0225, 0x2F28, 0x0282, 0x2F29, 0x0283, 0x2F2A, 0x0284,
+ 0x2F2B, 0x0285, 0x2F2C, 0x1776, 0x2F2D, 0x0286, 0x2F2E, 0x0226, 0x2F2F,
+ 0x0288, 0x2F30, 0x0289, 0x2F31, 0x028C, 0x2F32, 0x028D, 0x2F33, 0x0227,
+ 0x2F34, 0x0228, 0x2F35, 0x0229, 0x2F36, 0x028E, 0x2F37, 0x028F, 0x2F38,
+ 0x0290, 0x2F39, 0x022A, 0x2F3A, 0x022B, 0x2F3B, 0x1777, 0x2F3C, 0x02D0,
+ 0x2F3D, 0x02D1, 0x2F3E, 0x02D2, 0x2F3F, 0x02D3, 0x2F40, 0x02D5, 0x2F41,
+ 0x022C, 0x2F42, 0x02D6, 0x2F43, 0x02D7, 0x2F44, 0x02D8, 0x2F45, 0x02D9,
+ 0x2F46, 0x022D, 0x2F47, 0x02DA, 0x2F48, 0x02DB, 0x2F49, 0x02DC, 0x2F4A,
+ 0x02DD, 0x2F4B, 0x02DE, 0x2F4C, 0x02DF, 0x2F4D, 0x02E0, 0x2F4E, 0x178A,
+ 0x2F4F, 0x02E1, 0x2F50, 0x02E2, 0x2F51, 0x02E3, 0x2F52, 0x02E4, 0x2F53,
+ 0x178C, 0x2F54, 0x02E5, 0x2F55, 0x02E6, 0x2F56, 0x02E7, 0x2F57, 0x02E8,
+ 0x2F58, 0x02E9, 0x2F59, 0x178D, 0x2F5A, 0x02EA, 0x2F5B, 0x02EB, 0x2F5C,
+ 0x02EC, 0x2F5D, 0x02ED, 0x2F5E, 0x0356, 0x2F5F, 0x0357, 0x2F60, 0x0358,
+ 0x2F61, 0x0359, 0x2F62, 0x035A, 0x2F63, 0x035B, 0x2F64, 0x035C, 0x2F65,
+ 0x035E, 0x2F66, 0x0362, 0x2F67, 0x022E, 0x2F68, 0x022F, 0x2F69, 0x0363,
+ 0x2F6A, 0x0364, 0x2F6B, 0x0365, 0x2F6C, 0x0366, 0x2F6D, 0x0367, 0x2F6E,
+ 0x0368, 0x2F6F, 0x0369, 0x2F70, 0x036A, 0x2F71, 0x17B2, 0x2F72, 0x036B,
+ 0x2F73, 0x036C, 0x2F74, 0x036D, 0x2F75, 0x03F6, 0x2F76, 0x03F7, 0x2F77,
+ 0x03F8, 0x2F78, 0x03F9, 0x2F79, 0x1812, 0x2F7A, 0x03FA, 0x2F7B, 0x03FB,
+ 0x2F7C, 0x03FC, 0x2F7D, 0x03FE, 0x2F7E, 0x03FF, 0x2F7F, 0x0400, 0x2F80,
+ 0x0401, 0x2F81, 0x0402, 0x2F82, 0x0405, 0x2F83, 0x0406, 0x2F84, 0x0407,
+ 0x2F85, 0x0408, 0x2F86, 0x0409, 0x2F87, 0x040A, 0x2F88, 0x040B, 0x2F89,
+ 0x040C, 0x2F8A, 0x040D, 0x2F8B, 0x1813, 0x2F8C, 0x1818, 0x2F8D, 0x040F,
+ 0x2F8E, 0x0410, 0x2F8F, 0x0411, 0x2F90, 0x0412, 0x2F91, 0x1819, 0x2F92,
+ 0x0508, 0x2F93, 0x0509, 0x2F94, 0x050A, 0x2F95, 0x050B, 0x2F96, 0x050C,
+ 0x2F97, 0x050D, 0x2F98, 0x18E7, 0x2F99, 0x050E, 0x2F9A, 0x050F, 0x2F9B,
+ 0x0510, 0x2F9C, 0x0511, 0x2F9D, 0x0512, 0x2F9E, 0x0513, 0x2F9F, 0x0514,
+ 0x2FA0, 0x0515, 0x2FA1, 0x0230, 0x2FA2, 0x051B, 0x2FA3, 0x0520, 0x2FA4,
+ 0x0521, 0x2FA5, 0x0522, 0x2FA6, 0x0696, 0x2FA7, 0x0697, 0x2FA8, 0x0698,
+ 0x2FA9, 0x0699, 0x2FAA, 0x0231, 0x2FAB, 0x069F, 0x2FAC, 0x06A0, 0x2FAE,
+ 0x06A2, 0x2FAF, 0x0826, 0x2FB0, 0x0827, 0x2FB1, 0x0828, 0x2FB2, 0x0829,
+ 0x2FB3, 0x082A, 0x2FB4, 0x082B, 0x2FB5, 0x082C, 0x2FB6, 0x082D, 0x2FB7,
+ 0x082E, 0x2FB8, 0x082F, 0x2FB9, 0x0830, 0x2FBA, 0x09F5, 0x2FBB, 0x09F6,
+ 0x2FBC, 0x09F7, 0x2FBD, 0x1E33, 0x2FBE, 0x09F8, 0x2FBF, 0x1E34, 0x2FC0,
+ 0x09F9, 0x2FC1, 0x09FA, 0x2FC2, 0x0BE1, 0x2FC3, 0x0BE2, 0x2FC4, 0x0BE3,
+ 0x2FC5, 0x0BE4, 0x2FC6, 0x0BE5, 0x2FC7, 0x0BE6, 0x2FC8, 0x0DBB, 0x2FC9,
+ 0x0DBC, 0x2FCA, 0x0DBD, 0x2FCB, 0x2360, 0x2FCC, 0x2612, 0x2FCD, 0x0F7B,
+ 0x2FCE, 0x0F7C, 0x2FCF, 0x0F7D, 0x2FD0, 0x1100, 0x2FD1, 0x1101, 0x2FD2,
+ 0x1289, 0x2FD3, 0x13B2, 0x2FD4, 0x13B3, 0x2FD5, 0x2F0D, 0x3000, 0x0063,
+ 0x3001, 0x0065, 0x3002, 0x0066, 0x3003, 0x00B3, 0x3005, 0x35BA, 0x3006,
+ 0x35BB, 0x3007, 0x35BC, 0x3008, 0x0094, 0x3009, 0x0095, 0x300A, 0x0090,
+ 0x300B, 0x0091, 0x300C, 0x0098, 0x300D, 0x0099, 0x300E, 0x009C, 0x300F,
+ 0x009D, 0x3010, 0x008C, 0x3011, 0x008D, 0x3012, 0x0105, 0x3014, 0x0088,
+ 0x3015, 0x0089, 0x301D, 0x00AA, 0x301E, 0x00AB, 0x3021, 0x0161, 0x3022,
+ 0x0162, 0x3023, 0x0163, 0x3024, 0x0164, 0x3025, 0x0165, 0x3026, 0x0166,
+ 0x3027, 0x0167, 0x3028, 0x0168, 0x3029, 0x0169, 0x3038, 0x016A, 0x3039,
+ 0x016B, 0x303A, 0x016C, 0x3041, 0x35C1, 0x3042, 0x35C2, 0x3043, 0x35C3,
+ 0x3044, 0x35C4, 0x3045, 0x35C5, 0x3046, 0x35C6, 0x3047, 0x35C7, 0x3048,
+ 0x35C8, 0x3049, 0x35C9, 0x304A, 0x35CA, 0x304B, 0x35CB, 0x304C, 0x35CC,
+ 0x304D, 0x35CD, 0x304E, 0x35CE, 0x304F, 0x35CF, 0x3050, 0x35D0, 0x3051,
+ 0x35D1, 0x3052, 0x35D2, 0x3053, 0x35D3, 0x3054, 0x35D4, 0x3055, 0x35D5,
+ 0x3056, 0x35D6, 0x3057, 0x35D7, 0x3058, 0x35D8, 0x3059, 0x35D9, 0x305A,
+ 0x35DA, 0x305B, 0x35DB, 0x305C, 0x35DC, 0x305D, 0x35DD, 0x305E, 0x35DE,
+ 0x305F, 0x35DF, 0x3060, 0x35E0, 0x3061, 0x35E1, 0x3062, 0x35E2, 0x3063,
+ 0x35E3, 0x3064, 0x35E4, 0x3065, 0x35E5, 0x3066, 0x35E6, 0x3067, 0x35E7,
+ 0x3068, 0x35E8, 0x3069, 0x35E9, 0x306A, 0x35EA, 0x306B, 0x35EB, 0x306C,
+ 0x35EC, 0x306D, 0x35ED, 0x306E, 0x35EE, 0x306F, 0x35EF, 0x3070, 0x35F0,
+ 0x3071, 0x35F1, 0x3072, 0x35F2, 0x3073, 0x35F3, 0x3074, 0x35F4, 0x3075,
+ 0x35F5, 0x3076, 0x35F6, 0x3077, 0x35F7, 0x3078, 0x35F8, 0x3079, 0x35F9,
+ 0x307A, 0x35FA, 0x307B, 0x35FB, 0x307C, 0x35FC, 0x307D, 0x35FD, 0x307E,
+ 0x35FE, 0x307F, 0x35FF, 0x3080, 0x3600, 0x3081, 0x3601, 0x3082, 0x3602,
+ 0x3083, 0x3603, 0x3084, 0x3604, 0x3085, 0x3605, 0x3086, 0x3606, 0x3087,
+ 0x3607, 0x3088, 0x3608, 0x3089, 0x3609, 0x308A, 0x360A, 0x308B, 0x360B,
+ 0x308C, 0x360C, 0x308D, 0x360D, 0x308E, 0x360E, 0x308F, 0x360F, 0x3090,
+ 0x3610, 0x3091, 0x3611, 0x3092, 0x3612, 0x3093, 0x3613, 0x309D, 0x35B7,
+ 0x309E, 0x35B8, 0x30A1, 0x3614, 0x30A2, 0x3615, 0x30A3, 0x3616, 0x30A4,
+ 0x3617, 0x30A5, 0x3618, 0x30A6, 0x3619, 0x30A7, 0x361A, 0x30A8, 0x361B,
+ 0x30A9, 0x361C, 0x30AA, 0x361D, 0x30AB, 0x361E, 0x30AC, 0x361F, 0x30AD,
+ 0x3620, 0x30AE, 0x3621, 0x30AF, 0x3622, 0x30B0, 0x3623, 0x30B1, 0x3624,
+ 0x30B2, 0x3625, 0x30B3, 0x3626, 0x30B4, 0x3627, 0x30B5, 0x3628, 0x30B6,
+ 0x3629, 0x30B7, 0x362A, 0x30B8, 0x362B, 0x30B9, 0x362C, 0x30BA, 0x362D,
+ 0x30BB, 0x362E, 0x30BC, 0x362F, 0x30BD, 0x3630, 0x30BE, 0x3631, 0x30BF,
+ 0x3632, 0x30C0, 0x3633, 0x30C1, 0x3634, 0x30C2, 0x3635, 0x30C3, 0x3636,
+ 0x30C4, 0x3637, 0x30C5, 0x3638, 0x30C6, 0x3639, 0x30C7, 0x363A, 0x30C8,
+ 0x363B, 0x30C9, 0x363C, 0x30CA, 0x363D, 0x30CB, 0x363E, 0x30CC, 0x363F,
+ 0x30CD, 0x3640, 0x30CE, 0x3641, 0x30CF, 0x3642, 0x30D0, 0x3643, 0x30D1,
+ 0x3644, 0x30D2, 0x3645, 0x30D3, 0x3646, 0x30D4, 0x3647, 0x30D5, 0x3648,
+ 0x30D6, 0x3649, 0x30D7, 0x364A, 0x30D8, 0x364B, 0x30D9, 0x364C, 0x30DA,
+ 0x364D, 0x30DB, 0x364E, 0x30DC, 0x364F, 0x30DD, 0x3650, 0x30DE, 0x3651,
+ 0x30DF, 0x3652, 0x30E0, 0x3653, 0x30E1, 0x3654, 0x30E2, 0x3655, 0x30E3,
+ 0x3656, 0x30E4, 0x3657, 0x30E5, 0x3658, 0x30E6, 0x3659, 0x30E7, 0x365A,
+ 0x30E8, 0x365B, 0x30E9, 0x365C, 0x30EA, 0x365D, 0x30EB, 0x365E, 0x30EC,
+ 0x365F, 0x30ED, 0x3660, 0x30EE, 0x3661, 0x30EF, 0x3662, 0x30F0, 0x3663,
+ 0x30F1, 0x3664, 0x30F2, 0x3665, 0x30F3, 0x3666, 0x30F4, 0x3667, 0x30F5,
+ 0x3668, 0x30F6, 0x3669, 0x30FC, 0x35BD, 0x30FD, 0x35B5, 0x30FE, 0x35B6,
+ 0x3105, 0x01D1, 0x3106, 0x01D2, 0x3107, 0x01D3, 0x3108, 0x01D4, 0x3109,
+ 0x01D5, 0x310A, 0x01D6, 0x310B, 0x01D7, 0x310C, 0x01D8, 0x310D, 0x01D9,
+ 0x310E, 0x01DA, 0x310F, 0x01DB, 0x3110, 0x01DC, 0x3111, 0x01DD, 0x3112,
+ 0x01DE, 0x3113, 0x01DF, 0x3114, 0x01E0, 0x3115, 0x01E1, 0x3116, 0x01E2,
+ 0x3117, 0x01E3, 0x3118, 0x01E4, 0x3119, 0x01E5, 0x311A, 0x01E6, 0x311B,
+ 0x01E7, 0x311C, 0x01E8, 0x311D, 0x01E9, 0x311E, 0x01EA, 0x311F, 0x01EB,
+ 0x3120, 0x01EC, 0x3121, 0x01ED, 0x3122, 0x01EE, 0x3123, 0x01EF, 0x3124,
+ 0x01F0, 0x3125, 0x01F1, 0x3126, 0x01F2, 0x3127, 0x01F3, 0x3128, 0x01F4,
+ 0x3129, 0x01F5, 0x3231, 0x36E5, 0x32A3, 0x00C1, 0x338E, 0x0115, 0x338F,
+ 0x0116, 0x339C, 0x0110, 0x339D, 0x0111, 0x339E, 0x0112, 0x33A1, 0x0114,
+ 0x33C4, 0x0117, 0x33CE, 0x0113, 0x33D1, 0x00EC, 0x33D2, 0x00EB, 0x33D5,
+ 0x010F, 0x361D, 0x36B7, 0x4491, 0x36B4, 0x4E00, 0x0253, 0x4E01, 0x0255,
+ 0x4E03, 0x0256, 0x4E07, 0x1771, 0x4E08, 0x0269, 0x4E09, 0x0267, 0x4E0A,
+ 0x026A, 0x4E0B, 0x0268, 0x4E0C, 0x1772, 0x4E0D, 0x0294, 0x4E0E, 0x177A,
+ 0x4E0F, 0x1778, 0x4E10, 0x0293, 0x4E11, 0x0292, 0x4E14, 0x02F2, 0x4E15,
+ 0x02F1, 0x4E16, 0x02F0, 0x4E18, 0x02F3, 0x4E19, 0x02EF, 0x4E1E, 0x036E,
+ 0x4E1F, 0x036F, 0x4E26, 0x0528, 0x4E28, 0x0218, 0x4E2B, 0x026B, 0x4E2D,
+ 0x0295, 0x4E2E, 0x177B, 0x4E30, 0x0296, 0x4E31, 0x178E, 0x4E32, 0x0415,
+ 0x4E33, 0x18F4, 0x4E36, 0x0219, 0x4E38, 0x026C, 0x4E39, 0x0297, 0x4E3B,
+ 0x02F4, 0x4E3C, 0x178F, 0x4E3F, 0x021A, 0x4E41, 0x36AF, 0x4E42, 0x176C,
+ 0x4E43, 0x0257, 0x4E45, 0x026E, 0x4E47, 0x1773, 0x4E48, 0x026F, 0x4E4B,
+ 0x0298, 0x4E4D, 0x02F5, 0x4E4E, 0x02F7, 0x4E4F, 0x02F6, 0x4E52, 0x0370,
+ 0x4E53, 0x0371, 0x4E56, 0x0529, 0x4E58, 0x0831, 0x4E59, 0x0254, 0x4E5A,
+ 0x36B1, 0x4E5C, 0x176D, 0x4E5D, 0x0258, 0x4E5E, 0x0271, 0x4E5F, 0x0270,
+ 0x4E69, 0x0372, 0x4E73, 0x052A, 0x4E7E, 0x09FB, 0x4E7F, 0x1E35, 0x4E82,
+ 0x0DBE, 0x4E83, 0x2361, 0x4E84, 0x2362, 0x4E85, 0x021B, 0x4E86, 0x0259,
+ 0x4E88, 0x029A, 0x4E8B, 0x052B, 0x4E8C, 0x025A, 0x4E8D, 0x1774, 0x4E8E,
+ 0x0272, 0x4E91, 0x029B, 0x4E92, 0x029D, 0x4E93, 0x177C, 0x4E94, 0x029E,
+ 0x4E95, 0x029C, 0x4E99, 0x0373, 0x4E9B, 0x052C, 0x4E9E, 0x052D, 0x4E9F,
+ 0x06A3, 0x4EA0, 0x021C, 0x4EA1, 0x0273, 0x4EA2, 0x029F, 0x4EA4, 0x0374,
+ 0x4EA5, 0x0376, 0x4EA6, 0x0375, 0x4EA8, 0x0416, 0x4EAB, 0x052E, 0x4EAC,
+ 0x052F, 0x4EAD, 0x06A4, 0x4EAE, 0x06A5, 0x4EB3, 0x0832, 0x4EB6, 0x2363,
+ 0x4EB9, 0x3377, 0x4EBA, 0x025B, 0x4EC0, 0x02A1, 0x4EC1, 0x02A0, 0x4EC2,
+ 0x177D, 0x4EC3, 0x02A2, 0x4EC4, 0x02A8, 0x4EC6, 0x02A3, 0x4EC7, 0x02A4,
+ 0x4EC8, 0x177F, 0x4EC9, 0x177E, 0x4ECA, 0x02A6, 0x4ECB, 0x02A7, 0x4ECD,
+ 0x02A5, 0x4ED4, 0x02FA, 0x4ED5, 0x02FB, 0x4ED6, 0x02FC, 0x4ED7, 0x02FD,
+ 0x4ED8, 0x02F9, 0x4ED9, 0x0300, 0x4EDA, 0x1795, 0x4EDC, 0x1791, 0x4EDD,
+ 0x1794, 0x4EDE, 0x0301, 0x4EDF, 0x0311, 0x4EE1, 0x1793, 0x4EE3, 0x02FE,
+ 0x4EE4, 0x02FF, 0x4EE5, 0x02F8, 0x4EE8, 0x1790, 0x4EE9, 0x1792, 0x4EF0,
+ 0x0383, 0x4EF1, 0x17BA, 0x4EF2, 0x0380, 0x4EF3, 0x0384, 0x4EF4, 0x17C4,
+ 0x4EF5, 0x17B8, 0x4EF6, 0x0381, 0x4EF7, 0x17BC, 0x4EFB, 0x0382, 0x4EFD,
+ 0x0385, 0x4EFF, 0x0377, 0x4F00, 0x17BB, 0x4F01, 0x0386, 0x4F02, 0x17BF,
+ 0x4F04, 0x17C3, 0x4F05, 0x17C0, 0x4F08, 0x17BD, 0x4F09, 0x0378, 0x4F0A,
+ 0x037A, 0x4F0B, 0x0387, 0x4F0D, 0x037C, 0x4F0E, 0x17B5, 0x4F0F, 0x037F,
+ 0x4F10, 0x037D, 0x4F11, 0x037E, 0x4F12, 0x17C5, 0x4F13, 0x17C2, 0x4F14,
+ 0x17B9, 0x4F15, 0x037B, 0x4F18, 0x17B6, 0x4F19, 0x0379, 0x4F1D, 0x17BE,
+ 0x4F22, 0x17C1, 0x4F2C, 0x17B7, 0x4F2D, 0x182F, 0x4F2F, 0x042C, 0x4F30,
+ 0x041F, 0x4F33, 0x1830, 0x4F34, 0x041C, 0x4F36, 0x042E, 0x4F38, 0x0424,
+ 0x4F3A, 0x0423, 0x4F3B, 0x1824, 0x4F3C, 0x0427, 0x4F3D, 0x0422, 0x4F3E,
+ 0x1829, 0x4F3F, 0x1831, 0x4F41, 0x182D, 0x4F43, 0x0425, 0x4F46, 0x0428,
+ 0x4F47, 0x0419, 0x4F48, 0x0431, 0x4F49, 0x1826, 0x4F4C, 0x1900, 0x4F4D,
+ 0x0417, 0x4F4E, 0x042D, 0x4F4F, 0x0418, 0x4F50, 0x0420, 0x4F51, 0x0421,
+ 0x4F52, 0x182B, 0x4F53, 0x1827, 0x4F54, 0x0426, 0x4F55, 0x041E, 0x4F56,
+ 0x1823, 0x4F57, 0x041A, 0x4F58, 0x182E, 0x4F59, 0x042F, 0x4F5A, 0x0432,
+ 0x4F5B, 0x041D, 0x4F5C, 0x042A, 0x4F5D, 0x0430, 0x4F5E, 0x041B, 0x4F5F,
+ 0x182C, 0x4F60, 0x042B, 0x4F61, 0x1832, 0x4F62, 0x1825, 0x4F63, 0x0429,
+ 0x4F64, 0x1828, 0x4F67, 0x182A, 0x4F69, 0x053D, 0x4F6A, 0x1902, 0x4F6B,
+ 0x190E, 0x4F6C, 0x0535, 0x4F6E, 0x190F, 0x4F6F, 0x0530, 0x4F70, 0x053A,
+ 0x4F73, 0x0533, 0x4F74, 0x18FC, 0x4F75, 0x053B, 0x4F76, 0x18FB, 0x4F77,
+ 0x18FF, 0x4F78, 0x1906, 0x4F79, 0x1904, 0x4F7A, 0x0543, 0x4F7B, 0x053E,
+ 0x4F7C, 0x18F6, 0x4F7D, 0x18F8, 0x4F7E, 0x0540, 0x4F7F, 0x0534, 0x4F80,
+ 0x18F9, 0x4F81, 0x1905, 0x4F82, 0x190C, 0x4F83, 0x0539, 0x4F84, 0x18FE,
+ 0x4F85, 0x18F7, 0x4F86, 0x0538, 0x4F87, 0x18FA, 0x4F88, 0x053C, 0x4F89,
+ 0x18FD, 0x4F8B, 0x0537, 0x4F8D, 0x0532, 0x4F8F, 0x0541, 0x4F90, 0x1907,
+ 0x4F91, 0x0542, 0x4F92, 0x190B, 0x4F94, 0x1909, 0x4F95, 0x190D, 0x4F96,
+ 0x053F, 0x4F97, 0x1901, 0x4F98, 0x18F5, 0x4F9A, 0x1903, 0x4F9B, 0x0536,
+ 0x4F9C, 0x1908, 0x4F9D, 0x0531, 0x4F9E, 0x190A, 0x4FAE, 0x06B4, 0x4FAF,
+ 0x06A8, 0x4FB2, 0x1A5D, 0x4FB3, 0x1A65, 0x4FB5, 0x06A7, 0x4FB6, 0x06AF,
+ 0x4FB7, 0x06BB, 0x4FB9, 0x1A6B, 0x4FBA, 0x1A69, 0x4FBB, 0x1A64, 0x4FBF,
+ 0x06A9, 0x4FC0, 0x1A6A, 0x4FC1, 0x1A60, 0x4FC2, 0x06B7, 0x4FC3, 0x06AE,
+ 0x4FC4, 0x06B6, 0x4FC5, 0x1A5B, 0x4FC7, 0x1A67, 0x4FC9, 0x1A5E, 0x4FCA,
+ 0x06B2, 0x4FCB, 0x1A5F, 0x4FCD, 0x1A5A, 0x4FCE, 0x06B9, 0x4FCF, 0x06AC,
+ 0x4FD0, 0x06B5, 0x4FD1, 0x06AB, 0x4FD3, 0x1A5C, 0x4FD4, 0x1A61, 0x4FD6,
+ 0x1A68, 0x4FD7, 0x06B3, 0x4FD8, 0x06B0, 0x4FD9, 0x1A63, 0x4FDA, 0x06B8,
+ 0x4FDB, 0x1A66, 0x4FDC, 0x1A62, 0x4FDD, 0x06AD, 0x4FDE, 0x06BA, 0x4FDF,
+ 0x06B1, 0x4FE0, 0x06AA, 0x4FE1, 0x06A6, 0x4FEC, 0x1A6C, 0x4FEE, 0x084C,
+ 0x4FEF, 0x0836, 0x4FF1, 0x0846, 0x4FF3, 0x084B, 0x4FF4, 0x1C24, 0x4FF5,
+ 0x1C23, 0x4FF6, 0x1C28, 0x4FF7, 0x1C29, 0x4FF8, 0x0839, 0x4FFA, 0x0842,
+ 0x4FFE, 0x084F, 0x5000, 0x0843, 0x5005, 0x1C1D, 0x5006, 0x083C, 0x5007,
+ 0x1C1E, 0x5009, 0x0851, 0x500B, 0x0848, 0x500C, 0x0833, 0x500D, 0x0834,
+ 0x500E, 0x1C31, 0x500F, 0x0A0C, 0x5011, 0x0841, 0x5012, 0x0840, 0x5013,
+ 0x1C1F, 0x5014, 0x0844, 0x5015, 0x1E45, 0x5016, 0x083B, 0x5017, 0x1C2A,
+ 0x5018, 0x084A, 0x5019, 0x0849, 0x501A, 0x083F, 0x501B, 0x1C22, 0x501C,
+ 0x1C2B, 0x501E, 0x1C1C, 0x501F, 0x083E, 0x5020, 0x1C2C, 0x5021, 0x0847,
+ 0x5022, 0x1C20, 0x5023, 0x0835, 0x5025, 0x0838, 0x5026, 0x0837, 0x5027,
+ 0x1C2D, 0x5028, 0x0845, 0x5029, 0x083A, 0x502A, 0x084E, 0x502B, 0x0850,
+ 0x502C, 0x1C27, 0x502D, 0x084D, 0x502F, 0x1C2F, 0x5030, 0x1C21, 0x5031,
+ 0x1C30, 0x5033, 0x1C25, 0x5035, 0x1C2E, 0x5037, 0x1C26, 0x503C, 0x083D,
+ 0x5040, 0x1E4D, 0x5041, 0x1E41, 0x5043, 0x0A00, 0x5045, 0x1E46, 0x5046,
+ 0x1E4C, 0x5047, 0x09FF, 0x5048, 0x1E3F, 0x5049, 0x0A03, 0x504A, 0x1E43,
+ 0x504B, 0x1E3C, 0x504C, 0x0A01, 0x504D, 0x1E40, 0x504E, 0x0A06, 0x504F,
+ 0x0A0B, 0x5051, 0x1E51, 0x5053, 0x1E3B, 0x5055, 0x0A07, 0x5057, 0x1E50,
+ 0x505A, 0x0A02, 0x505B, 0x1E42, 0x505C, 0x09FE, 0x505D, 0x1E3D, 0x505E,
+ 0x1E39, 0x505F, 0x1E47, 0x5060, 0x1E3A, 0x5061, 0x1E38, 0x5062, 0x1E44,
+ 0x5063, 0x1E4A, 0x5064, 0x1E4B, 0x5065, 0x0A04, 0x5068, 0x20B8, 0x5069,
+ 0x1E48, 0x506A, 0x1E37, 0x506B, 0x1E49, 0x506D, 0x0A0E, 0x506E, 0x1E4E,
+ 0x506F, 0x0A0D, 0x5070, 0x1E36, 0x5072, 0x1E3E, 0x5073, 0x1E4F, 0x5074,
+ 0x0A09, 0x5075, 0x0A08, 0x5076, 0x0A05, 0x5077, 0x0A0A, 0x507A, 0x09FC,
+ 0x507D, 0x09FD, 0x5080, 0x0BEC, 0x5082, 0x20BB, 0x5083, 0x20B4, 0x5085,
+ 0x0BE9, 0x5087, 0x20BC, 0x508B, 0x20B2, 0x508C, 0x20B5, 0x508D, 0x0BE8,
+ 0x508E, 0x20B6, 0x5091, 0x0BEB, 0x5092, 0x20BA, 0x5094, 0x20B0, 0x5095,
+ 0x20AF, 0x5096, 0x0BED, 0x5098, 0x0BEE, 0x5099, 0x0BEA, 0x509A, 0x0BEF,
+ 0x509B, 0x20AE, 0x509C, 0x20B9, 0x509D, 0x20B7, 0x509E, 0x20B1, 0x50A2,
+ 0x0BE7, 0x50A3, 0x20B3, 0x50AC, 0x0DC5, 0x50AD, 0x0DBF, 0x50AE, 0x2367,
+ 0x50AF, 0x0DC8, 0x50B0, 0x236D, 0x50B1, 0x2370, 0x50B2, 0x0DC1, 0x50B3,
+ 0x0DC2, 0x50B4, 0x236A, 0x50B5, 0x0DC0, 0x50B6, 0x2373, 0x50B7, 0x0DC6,
+ 0x50B8, 0x2374, 0x50BA, 0x236F, 0x50BB, 0x0DC7, 0x50BD, 0x2364, 0x50BE,
+ 0x0DC4, 0x50BF, 0x2365, 0x50C1, 0x236E, 0x50C2, 0x236C, 0x50C4, 0x2368,
+ 0x50C5, 0x0DC3, 0x50C6, 0x2366, 0x50C7, 0x0DC9, 0x50C8, 0x236B, 0x50C9,
+ 0x2372, 0x50CA, 0x2369, 0x50CB, 0x2371, 0x50CE, 0x0F88, 0x50CF, 0x0F85,
+ 0x50D1, 0x0F86, 0x50D3, 0x261C, 0x50D4, 0x2614, 0x50D5, 0x0F84, 0x50D6,
+ 0x0F81, 0x50D7, 0x2615, 0x50DA, 0x0F83, 0x50DB, 0x2618, 0x50DD, 0x261A,
+ 0x50E0, 0x2621, 0x50E3, 0x2620, 0x50E4, 0x261B, 0x50E5, 0x0F80, 0x50E6,
+ 0x2613, 0x50E7, 0x0F7E, 0x50E8, 0x2616, 0x50E9, 0x0F89, 0x50EA, 0x2619,
+ 0x50EC, 0x261D, 0x50ED, 0x0F82, 0x50EE, 0x0F7F, 0x50EF, 0x261F, 0x50F0,
+ 0x261E, 0x50F1, 0x0F87, 0x50F3, 0x2617, 0x50F5, 0x1105, 0x50F6, 0x2883,
+ 0x50F8, 0x2880, 0x50F9, 0x1106, 0x50FB, 0x1104, 0x50FD, 0x2887, 0x50FE,
+ 0x2884, 0x50FF, 0x287D, 0x5100, 0x1103, 0x5102, 0x1107, 0x5103, 0x287E,
+ 0x5104, 0x1102, 0x5105, 0x110A, 0x5106, 0x2881, 0x5107, 0x2882, 0x5108,
+ 0x1108, 0x5109, 0x1109, 0x510A, 0x2888, 0x510B, 0x2885, 0x510C, 0x2886,
+ 0x5110, 0x128D, 0x5111, 0x2B04, 0x5112, 0x128A, 0x5113, 0x2B01, 0x5114,
+ 0x128C, 0x5115, 0x128E, 0x5117, 0x2B02, 0x5118, 0x128B, 0x511A, 0x2B03,
+ 0x511C, 0x2B00, 0x511F, 0x13B5, 0x5120, 0x2D3E, 0x5121, 0x13B6, 0x5122,
+ 0x2D3C, 0x5124, 0x2D3D, 0x5125, 0x2D3B, 0x5126, 0x2D3A, 0x5129, 0x2D3F,
+ 0x512A, 0x13B4, 0x512D, 0x2F0F, 0x512E, 0x2F10, 0x5130, 0x287F, 0x5131,
+ 0x2F0E, 0x5132, 0x13B7, 0x5133, 0x1575, 0x5134, 0x307A, 0x5135, 0x307B,
+ 0x5137, 0x1668, 0x5138, 0x1669, 0x5139, 0x32C6, 0x513A, 0x32C5, 0x513B,
+ 0x16BC, 0x513C, 0x16BB, 0x513D, 0x340E, 0x513F, 0x025C, 0x5140, 0x0274,
+ 0x5141, 0x02AA, 0x5143, 0x02A9, 0x5144, 0x0303, 0x5145, 0x0302, 0x5146,
+ 0x038A, 0x5147, 0x0389, 0x5148, 0x038B, 0x5149, 0x0388, 0x514B, 0x0434,
+ 0x514C, 0x0433, 0x514D, 0x0435, 0x5152, 0x0545, 0x5154, 0x0544, 0x5155,
+ 0x0546, 0x5157, 0x06BC, 0x5159, 0x0119, 0x515A, 0x1C32, 0x515B, 0x011A,
+ 0x515C, 0x0A0F, 0x515D, 0x011C, 0x515E, 0x011B, 0x515F, 0x20BD, 0x5161,
+ 0x011D, 0x5162, 0x0F8A, 0x5163, 0x011E, 0x5165, 0x025D, 0x5167, 0x02AB,
+ 0x5168, 0x038C, 0x5169, 0x0547, 0x516B, 0x025E, 0x516C, 0x02AE, 0x516D,
+ 0x02AC, 0x516E, 0x02AD, 0x5171, 0x038D, 0x5175, 0x0436, 0x5176, 0x0549,
+ 0x5177, 0x0548, 0x5178, 0x054A, 0x517C, 0x0852, 0x5180, 0x128F, 0x5182,
+ 0x021D, 0x5187, 0x1779, 0x5188, 0x36B6, 0x5189, 0x0304, 0x518A, 0x0305,
+ 0x518D, 0x038E, 0x518F, 0x1833, 0x5191, 0x06BE, 0x5192, 0x06BD, 0x5193,
+ 0x1C34, 0x5194, 0x1C33, 0x5195, 0x0A10, 0x5196, 0x021E, 0x5197, 0x02AF,
+ 0x5198, 0x1780, 0x519E, 0x1910, 0x51A0, 0x06BF, 0x51A2, 0x0855, 0x51A4,
+ 0x0853, 0x51A5, 0x0854, 0x51AA, 0x1290, 0x51AB, 0x021F, 0x51AC, 0x0306,
+ 0x51B0, 0x038F, 0x51B1, 0x17C6, 0x51B6, 0x0437, 0x51B7, 0x0438, 0x51B9,
+ 0x1834, 0x51BC, 0x1911, 0x51BD, 0x054B, 0x51BE, 0x1912, 0x51C4, 0x1C36,
+ 0x51C5, 0x1C37, 0x51C6, 0x0858, 0x51C8, 0x1C38, 0x51CA, 0x1C35, 0x51CB,
+ 0x0859, 0x51CC, 0x0857, 0x51CD, 0x0856, 0x51CE, 0x1C39, 0x51D0, 0x1E52,
+ 0x51D4, 0x20BE, 0x51D7, 0x2375, 0x51D8, 0x2622, 0x51DC, 0x110B, 0x51DD,
+ 0x1291, 0x51DE, 0x2B05, 0x51E0, 0x025F, 0x51E1, 0x026D, 0x51F0, 0x0A11,
+ 0x51F1, 0x0BF1, 0x51F3, 0x0F8B, 0x51F5, 0x176E, 0x51F6, 0x02B0, 0x51F8,
+ 0x0309, 0x51F9, 0x0307, 0x51FA, 0x0308, 0x51FD, 0x054C, 0x5200, 0x0260,
+ 0x5201, 0x0261, 0x5202, 0x36B3, 0x5203, 0x0275, 0x5206, 0x02B1, 0x5207,
+ 0x02B2, 0x5208, 0x02B3, 0x5209, 0x1797, 0x520A, 0x030A, 0x520C, 0x1796,
+ 0x520E, 0x0393, 0x5210, 0x17C8, 0x5211, 0x0391, 0x5212, 0x0392, 0x5213,
+ 0x17C7, 0x5216, 0x0394, 0x5217, 0x0390, 0x521C, 0x1835, 0x521D, 0x068B,
+ 0x521E, 0x1836, 0x5221, 0x1837, 0x5224, 0x043A, 0x5225, 0x0439, 0x5228,
+ 0x043D, 0x5229, 0x043B, 0x522A, 0x043C, 0x522E, 0x0552, 0x5230, 0x0551,
+ 0x5231, 0x1917, 0x5232, 0x1914, 0x5233, 0x1915, 0x5235, 0x1913, 0x5236,
+ 0x0553, 0x5237, 0x054F, 0x5238, 0x054E, 0x523A, 0x0550, 0x523B, 0x054D,
+ 0x5241, 0x0554, 0x5243, 0x06C1, 0x5244, 0x1A6D, 0x5246, 0x1916, 0x5247,
+ 0x06C6, 0x5249, 0x1A6E, 0x524A, 0x06C2, 0x524B, 0x06C5, 0x524C, 0x06C4,
+ 0x524D, 0x06C3, 0x524E, 0x06C0, 0x5252, 0x1C3C, 0x5254, 0x085C, 0x5255,
+ 0x1C3F, 0x5256, 0x085A, 0x525A, 0x1C3B, 0x525B, 0x085D, 0x525C, 0x085B,
+ 0x525D, 0x085E, 0x525E, 0x1C3D, 0x525F, 0x1C3E, 0x5261, 0x1C3A, 0x5262,
+ 0x1C40, 0x5269, 0x0BF5, 0x526A, 0x0A12, 0x526B, 0x1E53, 0x526C, 0x1E55,
+ 0x526D, 0x1E54, 0x526E, 0x1E56, 0x526F, 0x0A13, 0x5272, 0x0BF2, 0x5274,
+ 0x0BF3, 0x5275, 0x0BF4, 0x5277, 0x0DCB, 0x5278, 0x2377, 0x527A, 0x2376,
+ 0x527B, 0x2378, 0x527C, 0x2379, 0x527D, 0x0DCC, 0x527F, 0x0DCA, 0x5280,
+ 0x2623, 0x5281, 0x2624, 0x5282, 0x0F8D, 0x5283, 0x0F8C, 0x5284, 0x2776,
+ 0x5287, 0x110C, 0x5288, 0x110D, 0x5289, 0x110E, 0x528A, 0x1110, 0x528B,
+ 0x2889, 0x528C, 0x288A, 0x528D, 0x110F, 0x5291, 0x1292, 0x5293, 0x1293,
+ 0x5296, 0x307C, 0x5297, 0x32C8, 0x5298, 0x32C7, 0x5299, 0x340F, 0x529B,
+ 0x0262, 0x529F, 0x030C, 0x52A0, 0x030B, 0x52A3, 0x0395, 0x52A6, 0x17C9,
+ 0x52A9, 0x043F, 0x52AA, 0x0440, 0x52AB, 0x043E, 0x52AC, 0x0441, 0x52AD,
+ 0x1838, 0x52AE, 0x1839, 0x52BB, 0x0556, 0x52BC, 0x1918, 0x52BE, 0x0555,
+ 0x52C0, 0x1A6F, 0x52C1, 0x06CA, 0x52C2, 0x1A70, 0x52C3, 0x06C9, 0x52C7,
+ 0x06C7, 0x52C9, 0x06C8, 0x52CD, 0x1C41, 0x52D2, 0x0A14, 0x52D3, 0x1E58,
+ 0x52D5, 0x0A17, 0x52D6, 0x1E57, 0x52D7, 0x0ACF, 0x52D8, 0x0A16, 0x52D9,
+ 0x0A15, 0x52DB, 0x0BF8, 0x52DD, 0x0BF7, 0x52DE, 0x0BF6, 0x52DF, 0x0DCD,
+ 0x52E2, 0x0DD0, 0x52E3, 0x0DD1, 0x52E4, 0x0DCF, 0x52E6, 0x0DCE, 0x52E9,
+ 0x2625, 0x52EB, 0x2626, 0x52EF, 0x288C, 0x52F0, 0x1111, 0x52F1, 0x288B,
+ 0x52F3, 0x1294, 0x52F4, 0x2D40, 0x52F5, 0x13B8, 0x52F7, 0x307D, 0x52F8,
+ 0x1609, 0x52F9, 0x0220, 0x52FA, 0x0276, 0x52FB, 0x02B4, 0x52FC, 0x1781,
+ 0x52FE, 0x02B5, 0x52FF, 0x02B6, 0x5305, 0x030D, 0x5306, 0x030E, 0x5308,
+ 0x0396, 0x5309, 0x183A, 0x530A, 0x1919, 0x530B, 0x191A, 0x530D, 0x06CB,
+ 0x530E, 0x1C42, 0x530F, 0x0A19, 0x5310, 0x0A18, 0x5311, 0x20C0, 0x5312,
+ 0x20BF, 0x5315, 0x0263, 0x5316, 0x02B7, 0x5317, 0x030F, 0x5319, 0x0A1A,
+ 0x531A, 0x176F, 0x531C, 0x1798, 0x531D, 0x0310, 0x531F, 0x17CB, 0x5320,
+ 0x0398, 0x5321, 0x0397, 0x5322, 0x17CA, 0x5323, 0x0442, 0x532A, 0x085F,
+ 0x532D, 0x1E59, 0x532F, 0x0DD2, 0x5330, 0x2627, 0x5331, 0x0F8E, 0x5334,
+ 0x2B06, 0x5337, 0x31C7, 0x5338, 0x0221, 0x5339, 0x02B8, 0x533C, 0x191B,
+ 0x533D, 0x1A71, 0x533E, 0x0A1D, 0x533F, 0x0A1B, 0x5340, 0x0A1C, 0x5341,
+ 0x0264, 0x5343, 0x0277, 0x5344, 0x016B, 0x5345, 0x02BB, 0x5347, 0x02BA,
+ 0x5348, 0x02B9, 0x5349, 0x0313, 0x534A, 0x0312, 0x534C, 0x1799, 0x534D,
+ 0x17CC, 0x5351, 0x055A, 0x5352, 0x0557, 0x5353, 0x0559, 0x5354, 0x0558,
+ 0x5357, 0x06CC, 0x535A, 0x0BF9, 0x535C, 0x0265, 0x535E, 0x02BC, 0x5360,
+ 0x0315, 0x5361, 0x0314, 0x5363, 0x183B, 0x5366, 0x055B, 0x5369, 0x0222,
+ 0x536C, 0x1782, 0x536E, 0x0317, 0x536F, 0x0316, 0x5370, 0x0399, 0x5371,
+ 0x039A, 0x5372, 0x183C, 0x5373, 0x0443, 0x5375, 0x0444, 0x5377, 0x055C,
+ 0x5378, 0x055D, 0x5379, 0x055E, 0x537B, 0x06CD, 0x537C, 0x1A72, 0x537F,
+ 0x0860, 0x5382, 0x1770, 0x5384, 0x02BD, 0x538A, 0x17CD, 0x538E, 0x183D,
+ 0x538F, 0x183E, 0x5392, 0x191C, 0x5394, 0x191D, 0x5396, 0x1A74, 0x5397,
+ 0x1A73, 0x5398, 0x1A76, 0x5399, 0x1A75, 0x539A, 0x06CE, 0x539C, 0x1E5A,
+ 0x539D, 0x0862, 0x539E, 0x1C43, 0x539F, 0x0861, 0x53A4, 0x20C1, 0x53A5,
+ 0x0BFA, 0x53A7, 0x20C2, 0x53AC, 0x2628, 0x53AD, 0x0F8F, 0x53B2, 0x1112,
+ 0x53B4, 0x307E, 0x53B6, 0x0223, 0x53B9, 0x1783, 0x53BB, 0x0318, 0x53C3,
+ 0x0A1E, 0x53C8, 0x0266, 0x53C9, 0x0278, 0x53CA, 0x02BF, 0x53CB, 0x02BE,
+ 0x53CD, 0x02C0, 0x53D4, 0x0560, 0x53D6, 0x055F, 0x53D7, 0x0561, 0x53DB,
+ 0x06CF, 0x53DF, 0x0863, 0x53E1, 0x2B07, 0x53E2, 0x14C9, 0x53E3, 0x0279,
+ 0x53E4, 0x031A, 0x53E5, 0x0329, 0x53E6, 0x0324, 0x53E8, 0x031F, 0x53E9,
+ 0x031E, 0x53EA, 0x0325, 0x53EB, 0x0323, 0x53EC, 0x031C, 0x53ED, 0x032A,
+ 0x53EE, 0x031D, 0x53EF, 0x0319, 0x53F0, 0x0328, 0x53F1, 0x0327, 0x53F2,
+ 0x0326, 0x53F3, 0x031B, 0x53F5, 0x0322, 0x53F8, 0x0321, 0x53FB, 0x032B,
+ 0x53FC, 0x0320, 0x5401, 0x03A0, 0x5403, 0x03A6, 0x5404, 0x03A2, 0x5406,
+ 0x03A8, 0x5407, 0x17CE, 0x5408, 0x03A5, 0x5409, 0x039B, 0x540A, 0x039E,
+ 0x540B, 0x03A1, 0x540C, 0x039D, 0x540D, 0x03A4, 0x540E, 0x03A7, 0x540F,
+ 0x039C, 0x5410, 0x039F, 0x5411, 0x03A3, 0x5412, 0x03A9, 0x5418, 0x1847,
+ 0x5419, 0x1844, 0x541B, 0x0451, 0x541C, 0x1845, 0x541D, 0x0445, 0x541E,
+ 0x0447, 0x541F, 0x045F, 0x5420, 0x045A, 0x5424, 0x184C, 0x5425, 0x1846,
+ 0x5426, 0x0449, 0x5427, 0x044B, 0x5428, 0x184B, 0x5429, 0x0452, 0x542A,
+ 0x1841, 0x542B, 0x045E, 0x542C, 0x0460, 0x542D, 0x0446, 0x542E, 0x0457,
+ 0x5430, 0x183F, 0x5431, 0x045D, 0x5433, 0x044E, 0x5435, 0x0458, 0x5436,
+ 0x0459, 0x5437, 0x1840, 0x5438, 0x0456, 0x5439, 0x0454, 0x543B, 0x0455,
+ 0x543C, 0x045B, 0x543D, 0x1848, 0x543E, 0x0448, 0x5440, 0x045C, 0x5441,
+ 0x184A, 0x5442, 0x0450, 0x5443, 0x044D, 0x5445, 0x1843, 0x5446, 0x044C,
+ 0x5447, 0x184D, 0x5448, 0x044F, 0x544A, 0x0453, 0x544E, 0x044A, 0x544F,
+ 0x1849, 0x5454, 0x1842, 0x5460, 0x192E, 0x5461, 0x192D, 0x5462, 0x0573,
+ 0x5463, 0x1930, 0x5464, 0x1932, 0x5465, 0x1927, 0x5466, 0x192A, 0x5467,
+ 0x1931, 0x5468, 0x0574, 0x546B, 0x1924, 0x546C, 0x1928, 0x546F, 0x192C,
+ 0x5470, 0x1A85, 0x5471, 0x056F, 0x5472, 0x1A89, 0x5473, 0x0562, 0x5474,
+ 0x1929, 0x5475, 0x0563, 0x5476, 0x0570, 0x5477, 0x0569, 0x5478, 0x0565,
+ 0x547A, 0x1925, 0x547B, 0x0568, 0x547C, 0x056D, 0x547D, 0x0576, 0x547E,
+ 0x1926, 0x547F, 0x191F, 0x5480, 0x0567, 0x5481, 0x1920, 0x5482, 0x1922,
+ 0x5484, 0x056A, 0x5486, 0x056C, 0x5487, 0x191E, 0x5488, 0x1923, 0x548B,
+ 0x0575, 0x548C, 0x0571, 0x548D, 0x192B, 0x548E, 0x0577, 0x5490, 0x056E,
+ 0x5491, 0x1921, 0x5492, 0x056B, 0x5495, 0x0566, 0x5496, 0x0564, 0x5498,
+ 0x192F, 0x549A, 0x0572, 0x54A0, 0x1A84, 0x54A1, 0x1A78, 0x54A2, 0x1A87,
+ 0x54A5, 0x1A7A, 0x54A6, 0x06D6, 0x54A7, 0x06E4, 0x54A8, 0x06D2, 0x54A9,
+ 0x06E3, 0x54AA, 0x06DB, 0x54AB, 0x06E0, 0x54AC, 0x06D0, 0x54AD, 0x1A79,
+ 0x54AE, 0x1A7F, 0x54AF, 0x06DF, 0x54B0, 0x1A8B, 0x54B1, 0x06E1, 0x54B3,
+ 0x06D7, 0x54B6, 0x1A81, 0x54B7, 0x1A7E, 0x54B8, 0x06D5, 0x54BA, 0x1A77,
+ 0x54BB, 0x06E2, 0x54BC, 0x1A86, 0x54BD, 0x06DA, 0x54BE, 0x1A88, 0x54BF,
+ 0x06E5, 0x54C0, 0x06D1, 0x54C1, 0x06DC, 0x54C2, 0x06D9, 0x54C3, 0x1A7C,
+ 0x54C4, 0x06DD, 0x54C5, 0x1A82, 0x54C6, 0x1A83, 0x54C7, 0x06D8, 0x54C8,
+ 0x06DE, 0x54C9, 0x06D4, 0x54CE, 0x06D3, 0x54CF, 0x1A7B, 0x54D6, 0x1A80,
+ 0x54DE, 0x1A8A, 0x54E0, 0x1C57, 0x54E1, 0x0870, 0x54E2, 0x1C45, 0x54E4,
+ 0x1C4A, 0x54E5, 0x0869, 0x54E6, 0x0874, 0x54E7, 0x1C48, 0x54E8, 0x0864,
+ 0x54E9, 0x086E, 0x54EA, 0x0873, 0x54EB, 0x1C4F, 0x54ED, 0x086F, 0x54EE,
+ 0x0872, 0x54F1, 0x1C52, 0x54F2, 0x086A, 0x54F3, 0x1C49, 0x54F7, 0x1C55,
+ 0x54F8, 0x1C56, 0x54FA, 0x086C, 0x54FB, 0x1C54, 0x54FC, 0x0868, 0x54FD,
+ 0x0877, 0x54FF, 0x1C4C, 0x5501, 0x0866, 0x5503, 0x1C59, 0x5504, 0x1C4D,
+ 0x5505, 0x1C51, 0x5506, 0x086B, 0x5507, 0x0876, 0x5508, 0x1C4E, 0x5509,
+ 0x0871, 0x550A, 0x1C53, 0x550B, 0x1C5A, 0x550C, 0x1E69, 0x550E, 0x1C58,
+ 0x550F, 0x0878, 0x5510, 0x0865, 0x5511, 0x1C50, 0x5512, 0x1C47, 0x5514,
+ 0x086D, 0x5517, 0x1C46, 0x551A, 0x1C4B, 0x5526, 0x1C44, 0x5527, 0x0875,
+ 0x552A, 0x1E61, 0x552C, 0x0A31, 0x552D, 0x1E6F, 0x552E, 0x0A2F, 0x552F,
+ 0x0A2C, 0x5530, 0x1E66, 0x5531, 0x0A28, 0x5532, 0x1E6A, 0x5533, 0x0A33,
+ 0x5534, 0x1E60, 0x5535, 0x1E65, 0x5536, 0x1E64, 0x5537, 0x0867, 0x5538,
+ 0x0A2E, 0x5539, 0x1E6D, 0x553B, 0x1E70, 0x553C, 0x1E5D, 0x553E, 0x0C0C,
+ 0x5540, 0x1E71, 0x5541, 0x0A34, 0x5543, 0x0A26, 0x5544, 0x0A23, 0x5545,
+ 0x1E68, 0x5546, 0x0A20, 0x5548, 0x1E6E, 0x554A, 0x0A27, 0x554B, 0x1E72,
+ 0x554D, 0x1E5E, 0x554E, 0x1E6C, 0x554F, 0x0A2A, 0x5550, 0x1E5F, 0x5551,
+ 0x1E62, 0x5552, 0x1E67, 0x5555, 0x0A2B, 0x5556, 0x0A29, 0x5557, 0x0A35,
+ 0x555C, 0x0A30, 0x555E, 0x0A24, 0x555F, 0x0ABC, 0x5561, 0x0A25, 0x5562,
+ 0x1E63, 0x5563, 0x0A32, 0x5564, 0x0A2D, 0x5565, 0x1E6B, 0x5566, 0x0A22,
+ 0x556A, 0x0A21, 0x5575, 0x1E5B, 0x5576, 0x1E5C, 0x5577, 0x20C7, 0x557B,
+ 0x0BFB, 0x557C, 0x0BFE, 0x557D, 0x20D2, 0x557E, 0x0C12, 0x557F, 0x20D5,
+ 0x5580, 0x0BFC, 0x5581, 0x20CE, 0x5582, 0x0C02, 0x5583, 0x0C08, 0x5584,
+ 0x0D1B, 0x5587, 0x0C06, 0x5588, 0x20CB, 0x5589, 0x0C13, 0x558A, 0x0BFF,
+ 0x558B, 0x0C07, 0x558C, 0x20D3, 0x558D, 0x2387, 0x558E, 0x20D8, 0x558F,
+ 0x20CC, 0x5591, 0x20C3, 0x5592, 0x20D0, 0x5593, 0x20CA, 0x5594, 0x0C05,
+ 0x5595, 0x20D6, 0x5598, 0x0C01, 0x5599, 0x0C15, 0x559A, 0x0C0E, 0x559C,
+ 0x0C03, 0x559D, 0x0C00, 0x559F, 0x0C0B, 0x55A1, 0x20D7, 0x55A2, 0x20C9,
+ 0x55A3, 0x20CF, 0x55A4, 0x20D1, 0x55A5, 0x20C5, 0x55A6, 0x20D4, 0x55A7,
+ 0x0BFD, 0x55A8, 0x20C4, 0x55AA, 0x0C04, 0x55AB, 0x0C14, 0x55AC, 0x0C10,
+ 0x55AD, 0x20C6, 0x55AE, 0x0C0A, 0x55B1, 0x0C11, 0x55B2, 0x0C0D, 0x55B3,
+ 0x0C09, 0x55B5, 0x20CD, 0x55BB, 0x0C0F, 0x55BF, 0x2385, 0x55C0, 0x2381,
+ 0x55C2, 0x2390, 0x55C3, 0x237A, 0x55C4, 0x2383, 0x55C5, 0x0DE0, 0x55C6,
+ 0x0DE1, 0x55C7, 0x0DD9, 0x55C8, 0x238C, 0x55C9, 0x0DE3, 0x55CA, 0x237F,
+ 0x55CB, 0x237E, 0x55CC, 0x237C, 0x55CD, 0x238E, 0x55CE, 0x0DD7, 0x55CF,
+ 0x2388, 0x55D0, 0x237D, 0x55D1, 0x0DDA, 0x55D2, 0x2386, 0x55D3, 0x0DD5,
+ 0x55D4, 0x2382, 0x55D5, 0x2389, 0x55D6, 0x238B, 0x55D9, 0x238F, 0x55DA,
+ 0x0DDE, 0x55DB, 0x237B, 0x55DC, 0x0DD8, 0x55DD, 0x2380, 0x55DF, 0x0DD3,
+ 0x55E1, 0x0DDF, 0x55E2, 0x238A, 0x55E3, 0x0DDB, 0x55E4, 0x0DDC, 0x55E5,
+ 0x0DE2, 0x55E6, 0x0DD6, 0x55E7, 0x011F, 0x55E8, 0x0DD4, 0x55E9, 0x2384,
+ 0x55EF, 0x0DDD, 0x55F2, 0x238D, 0x55F6, 0x0F9F, 0x55F7, 0x0F9A, 0x55F9,
+ 0x2637, 0x55FA, 0x2633, 0x55FC, 0x262D, 0x55FD, 0x0F94, 0x55FE, 0x0F90,
+ 0x55FF, 0x2636, 0x5600, 0x0F91, 0x5601, 0x2630, 0x5602, 0x2632, 0x5604,
+ 0x2635, 0x5606, 0x0F96, 0x5608, 0x0F9D, 0x5609, 0x0F97, 0x560C, 0x262B,
+ 0x560D, 0x0F98, 0x560E, 0x0F99, 0x560F, 0x262E, 0x5610, 0x0F9E, 0x5612,
+ 0x262C, 0x5613, 0x2631, 0x5614, 0x0F95, 0x5615, 0x262A, 0x5616, 0x0F9B,
+ 0x5617, 0x0F93, 0x561B, 0x0F92, 0x561C, 0x262F, 0x561D, 0x2634, 0x561F,
+ 0x0F9C, 0x5627, 0x2629, 0x5629, 0x1119, 0x562A, 0x289D, 0x562C, 0x289A,
+ 0x562E, 0x1113, 0x562F, 0x111F, 0x5630, 0x1120, 0x5632, 0x1116, 0x5633,
+ 0x2898, 0x5634, 0x1118, 0x5635, 0x2890, 0x5636, 0x111E, 0x5638, 0x289C,
+ 0x5639, 0x1115, 0x563A, 0x289E, 0x563B, 0x1114, 0x563D, 0x2899, 0x563E,
+ 0x289B, 0x563F, 0x1117, 0x5640, 0x2897, 0x5641, 0x2891, 0x5642, 0x288E,
+ 0x5645, 0x20C8, 0x5646, 0x2894, 0x5648, 0x288D, 0x5649, 0x2893, 0x564A,
+ 0x2892, 0x564C, 0x288F, 0x564E, 0x111B, 0x5653, 0x111A, 0x5657, 0x111C,
+ 0x5658, 0x2895, 0x5659, 0x1295, 0x565A, 0x2896, 0x565E, 0x2B10, 0x5660,
+ 0x2B09, 0x5662, 0x12A1, 0x5663, 0x2B0D, 0x5664, 0x1299, 0x5665, 0x129D,
+ 0x5666, 0x2B0C, 0x5668, 0x129C, 0x5669, 0x1298, 0x566A, 0x129B, 0x566B,
+ 0x1296, 0x566C, 0x12A0, 0x566D, 0x2B0E, 0x566E, 0x2B0A, 0x566F, 0x129F,
+ 0x5670, 0x2B08, 0x5671, 0x129E, 0x5672, 0x2B0F, 0x5673, 0x2B0B, 0x5674,
+ 0x111D, 0x5676, 0x12A2, 0x5677, 0x2B11, 0x5678, 0x129A, 0x5679, 0x1297,
+ 0x567E, 0x2D47, 0x567F, 0x2D49, 0x5680, 0x13BA, 0x5681, 0x2D4A, 0x5682,
+ 0x2D48, 0x5683, 0x2D46, 0x5684, 0x2D45, 0x5685, 0x13BC, 0x5686, 0x2D44,
+ 0x5687, 0x13BD, 0x568C, 0x2D42, 0x568D, 0x2D43, 0x568E, 0x13B9, 0x568F,
+ 0x13BE, 0x5690, 0x13BB, 0x5693, 0x2D41, 0x5695, 0x14CA, 0x5697, 0x2F13,
+ 0x5698, 0x2F11, 0x5699, 0x2F16, 0x569A, 0x2F14, 0x569C, 0x2F12, 0x569D,
+ 0x2F15, 0x56A5, 0x1576, 0x56A6, 0x3081, 0x56A7, 0x3082, 0x56A8, 0x1577,
+ 0x56AA, 0x3083, 0x56AB, 0x307F, 0x56AC, 0x3084, 0x56AD, 0x3080, 0x56AE,
+ 0x14CB, 0x56B2, 0x31C8, 0x56B3, 0x31CA, 0x56B4, 0x160C, 0x56B5, 0x31C9,
+ 0x56B6, 0x160B, 0x56B7, 0x160A, 0x56BC, 0x160D, 0x56BD, 0x32CA, 0x56BE,
+ 0x32CB, 0x56C0, 0x166B, 0x56C1, 0x166A, 0x56C2, 0x166C, 0x56C3, 0x32C9,
+ 0x56C5, 0x3379, 0x56C6, 0x3378, 0x56C8, 0x16BD, 0x56C9, 0x16BF, 0x56CA,
+ 0x16BE, 0x56CB, 0x337A, 0x56CC, 0x16F6, 0x56CD, 0x3481, 0x56D1, 0x171F,
+ 0x56D3, 0x3480, 0x56D4, 0x34C9, 0x56D7, 0x1775, 0x56DA, 0x032D, 0x56DB,
+ 0x032C, 0x56DD, 0x03AC, 0x56DE, 0x03AB, 0x56DF, 0x17D0, 0x56E0, 0x03AA,
+ 0x56E1, 0x17CF, 0x56E4, 0x0463, 0x56E5, 0x1850, 0x56E7, 0x184F, 0x56EA,
+ 0x0461, 0x56EB, 0x0464, 0x56EE, 0x184E, 0x56F0, 0x0462, 0x56F7, 0x1933,
+ 0x56F9, 0x1934, 0x56FA, 0x0578, 0x56FF, 0x06E6, 0x5701, 0x1C5B, 0x5702,
+ 0x1C5C, 0x5703, 0x0879, 0x5704, 0x087A, 0x5707, 0x1E74, 0x5708, 0x0A36,
+ 0x5709, 0x0A38, 0x570A, 0x1E73, 0x570B, 0x0A37, 0x570C, 0x20D9, 0x570D,
+ 0x0C16, 0x5712, 0x0DE4, 0x5713, 0x0DE5, 0x5714, 0x2391, 0x5716, 0x0FA1,
+ 0x5718, 0x0FA0, 0x571A, 0x289F, 0x571B, 0x2B13, 0x571C, 0x2B12, 0x571E,
+ 0x3505, 0x571F, 0x027A, 0x5720, 0x1784, 0x5722, 0x179A, 0x5723, 0x179B,
+ 0x5728, 0x03AF, 0x5729, 0x03B3, 0x572A, 0x17D2, 0x572C, 0x03B1, 0x572D,
+ 0x03B0, 0x572E, 0x17D1, 0x572F, 0x03B2, 0x5730, 0x03AE, 0x5733, 0x03AD,
+ 0x5734, 0x17D3, 0x573B, 0x046E, 0x573E, 0x046B, 0x5740, 0x0467, 0x5741,
+ 0x1851, 0x5745, 0x1852, 0x5747, 0x0469, 0x5749, 0x1854, 0x574A, 0x0465,
+ 0x574B, 0x1855, 0x574C, 0x1853, 0x574D, 0x0468, 0x574E, 0x046A, 0x574F,
+ 0x046D, 0x5750, 0x046C, 0x5751, 0x0466, 0x5752, 0x1856, 0x5761, 0x057D,
+ 0x5762, 0x1941, 0x5764, 0x057F, 0x5766, 0x057E, 0x5768, 0x1942, 0x5769,
+ 0x057C, 0x576A, 0x057B, 0x576B, 0x1938, 0x576D, 0x1937, 0x576F, 0x1935,
+ 0x5770, 0x193A, 0x5771, 0x1939, 0x5772, 0x1936, 0x5773, 0x193F, 0x5774,
+ 0x1940, 0x5775, 0x193D, 0x5776, 0x193B, 0x5777, 0x057A, 0x577B, 0x193E,
+ 0x577C, 0x0580, 0x577D, 0x1943, 0x5780, 0x193C, 0x5782, 0x06E7, 0x5783,
+ 0x0579, 0x578B, 0x06E8, 0x578C, 0x1A90, 0x578F, 0x1A96, 0x5793, 0x06EE,
+ 0x5794, 0x1A94, 0x5795, 0x1A9A, 0x5797, 0x1A91, 0x5798, 0x1A95, 0x5799,
+ 0x1A97, 0x579A, 0x1A99, 0x579B, 0x1A93, 0x579D, 0x1A92, 0x579E, 0x1A8D,
+ 0x579F, 0x1A8E, 0x57A0, 0x06E9, 0x57A2, 0x06EB, 0x57A3, 0x06EA, 0x57A4,
+ 0x1A8F, 0x57A5, 0x1A98, 0x57AE, 0x06ED, 0x57B5, 0x1A8C, 0x57B6, 0x1C66,
+ 0x57B8, 0x1C65, 0x57B9, 0x1C6A, 0x57BA, 0x1C61, 0x57BC, 0x1C64, 0x57BD,
+ 0x1C63, 0x57BF, 0x1C67, 0x57C1, 0x1C6B, 0x57C2, 0x087B, 0x57C3, 0x087E,
+ 0x57C6, 0x1C62, 0x57C7, 0x1C68, 0x57CB, 0x087D, 0x57CC, 0x1C5D, 0x57CE,
+ 0x06EC, 0x57CF, 0x1E82, 0x57D0, 0x1C69, 0x57D2, 0x1C60, 0x57D4, 0x087C,
+ 0x57D5, 0x1C5F, 0x57DC, 0x1E79, 0x57DF, 0x0A39, 0x57E0, 0x0A3D, 0x57E1,
+ 0x1E89, 0x57E2, 0x1E77, 0x57E3, 0x1E85, 0x57E4, 0x0A3E, 0x57E5, 0x1E87,
+ 0x57E7, 0x1E8D, 0x57E9, 0x1E91, 0x57EC, 0x1E88, 0x57ED, 0x1E7C, 0x57EE,
+ 0x1E84, 0x57F0, 0x1E92, 0x57F1, 0x1E90, 0x57F2, 0x1E86, 0x57F3, 0x1E81,
+ 0x57F4, 0x1E7A, 0x57F5, 0x20E1, 0x57F6, 0x1E78, 0x57F7, 0x0A42, 0x57F8,
+ 0x1E7F, 0x57F9, 0x0A43, 0x57FA, 0x0A3F, 0x57FB, 0x1E75, 0x57FC, 0x1E8B,
+ 0x57FD, 0x1E7D, 0x5800, 0x1E7B, 0x5801, 0x1E8E, 0x5802, 0x0A40, 0x5804,
+ 0x1E94, 0x5805, 0x0A3A, 0x5806, 0x0A3C, 0x5807, 0x1E83, 0x5808, 0x1E7E,
+ 0x5809, 0x087F, 0x580A, 0x0A3B, 0x580B, 0x1E80, 0x580C, 0x1E8F, 0x580D,
+ 0x1E93, 0x580E, 0x1E8A, 0x5810, 0x1E8C, 0x5814, 0x1E76, 0x5819, 0x20DC,
+ 0x581B, 0x20E5, 0x581C, 0x20E4, 0x581D, 0x0C1E, 0x581E, 0x20DD, 0x5820,
+ 0x0C1F, 0x5821, 0x0C1D, 0x5823, 0x20DF, 0x5824, 0x0C1A, 0x5825, 0x20E3,
+ 0x5827, 0x20DE, 0x5828, 0x20E0, 0x5829, 0x20DA, 0x582A, 0x0C18, 0x582C,
+ 0x20ED, 0x582D, 0x20EC, 0x582E, 0x20E9, 0x582F, 0x0C17, 0x5830, 0x0C1B,
+ 0x5831, 0x0C1C, 0x5832, 0x1C5E, 0x5833, 0x20E6, 0x5834, 0x0C19, 0x5835,
+ 0x0A41, 0x5836, 0x20E8, 0x5837, 0x20DB, 0x5838, 0x20EB, 0x5839, 0x20EA,
+ 0x583B, 0x20EE, 0x583D, 0x239F, 0x583F, 0x20E7, 0x5848, 0x20E2, 0x5849,
+ 0x2397, 0x584A, 0x0DEF, 0x584B, 0x0DF2, 0x584C, 0x0DED, 0x584D, 0x2396,
+ 0x584E, 0x239A, 0x584F, 0x2395, 0x5851, 0x0DE7, 0x5852, 0x0DF1, 0x5853,
+ 0x2392, 0x5854, 0x0DEB, 0x5855, 0x2399, 0x5857, 0x0DE9, 0x5858, 0x0DE8,
+ 0x5859, 0x239C, 0x585A, 0x0DEA, 0x585B, 0x239E, 0x585D, 0x239B, 0x585E,
+ 0x0DE6, 0x5862, 0x0DF0, 0x5863, 0x23A0, 0x5864, 0x2394, 0x5865, 0x239D,
+ 0x5868, 0x2393, 0x586B, 0x0DEC, 0x586D, 0x0DEE, 0x586F, 0x2398, 0x5871,
+ 0x23A1, 0x5874, 0x263F, 0x5875, 0x0FA2, 0x5876, 0x2645, 0x5879, 0x0FA7,
+ 0x587A, 0x2641, 0x587B, 0x2648, 0x587C, 0x2639, 0x587D, 0x0FA9, 0x587E,
+ 0x0FA3, 0x587F, 0x263E, 0x5880, 0x1121, 0x5881, 0x263D, 0x5882, 0x2646,
+ 0x5883, 0x0FA4, 0x5885, 0x0FA8, 0x5886, 0x263C, 0x5887, 0x2642, 0x5888,
+ 0x2647, 0x5889, 0x2638, 0x588A, 0x0FA6, 0x588B, 0x2640, 0x588E, 0x2644,
+ 0x588F, 0x264A, 0x5890, 0x263A, 0x5891, 0x2643, 0x5893, 0x0FA5, 0x5894,
+ 0x2649, 0x5898, 0x263B, 0x589C, 0x1125, 0x589D, 0x28A1, 0x589E, 0x1123,
+ 0x589F, 0x1122, 0x58A0, 0x28A3, 0x58A1, 0x28A8, 0x58A3, 0x28A4, 0x58A5,
+ 0x28A7, 0x58A6, 0x1128, 0x58A8, 0x1288, 0x58A9, 0x1127, 0x58AB, 0x28A0,
+ 0x58AC, 0x28A6, 0x58AE, 0x1126, 0x58AF, 0x28A5, 0x58B1, 0x28A2, 0x58B3,
+ 0x1124, 0x58BA, 0x2B18, 0x58BB, 0x36EB, 0x58BC, 0x2B1A, 0x58BD, 0x2B15,
+ 0x58BE, 0x12A4, 0x58BF, 0x2B17, 0x58C1, 0x12A3, 0x58C2, 0x2B19, 0x58C5,
+ 0x12A6, 0x58C6, 0x2B1B, 0x58C7, 0x12A5, 0x58C8, 0x2B14, 0x58C9, 0x2B16,
+ 0x58CE, 0x13C2, 0x58CF, 0x2D4D, 0x58D1, 0x13C1, 0x58D2, 0x2D4E, 0x58D3,
+ 0x13C0, 0x58D4, 0x2D4C, 0x58D5, 0x13BF, 0x58D6, 0x2D4B, 0x58D8, 0x14CD,
+ 0x58D9, 0x14CC, 0x58DA, 0x3085, 0x58DB, 0x3087, 0x58DD, 0x3086, 0x58DE,
+ 0x1578, 0x58DF, 0x1579, 0x58E2, 0x157A, 0x58E3, 0x31CB, 0x58E4, 0x160E,
+ 0x58E7, 0x3411, 0x58E8, 0x3410, 0x58E9, 0x1720, 0x58EB, 0x027B, 0x58EC,
+ 0x02C1, 0x58EF, 0x046F, 0x58F4, 0x1A9B, 0x58F9, 0x0C20, 0x58FA, 0x0C21,
+ 0x58FC, 0x23A2, 0x58FD, 0x0FAA, 0x58FE, 0x264B, 0x58FF, 0x28A9, 0x5902,
+ 0x0224, 0x5903, 0x1785, 0x5906, 0x1857, 0x590A, 0x0224, 0x590C, 0x1944,
+ 0x590D, 0x1A9C, 0x590E, 0x1C6C, 0x590F, 0x0880, 0x5912, 0x3088, 0x5914,
+ 0x166D, 0x5915, 0x027C, 0x5916, 0x032E, 0x5917, 0x179C, 0x5919, 0x03B4,
+ 0x591A, 0x03B5, 0x591C, 0x0581, 0x5920, 0x0A44, 0x5922, 0x0FAC, 0x5924,
+ 0x0FAD, 0x5925, 0x0FAB, 0x5927, 0x027D, 0x5929, 0x02C2, 0x592A, 0x02C4,
+ 0x592B, 0x02C3, 0x592C, 0x1786, 0x592D, 0x02C5, 0x592E, 0x032F, 0x592F,
+ 0x179D, 0x5931, 0x0330, 0x5937, 0x03B6, 0x5938, 0x03B7, 0x593C, 0x17D4,
+ 0x593E, 0x0470, 0x5940, 0x1858, 0x5944, 0x0585, 0x5945, 0x1945, 0x5947,
+ 0x0583, 0x5948, 0x0584, 0x5949, 0x0582, 0x594A, 0x1C6D, 0x594E, 0x06F2,
+ 0x594F, 0x06F1, 0x5950, 0x06F3, 0x5951, 0x06F0, 0x5953, 0x1A9D, 0x5954,
+ 0x0586, 0x5955, 0x06EF, 0x5957, 0x0881, 0x5958, 0x0882, 0x595A, 0x0883,
+ 0x595C, 0x1E95, 0x5960, 0x0C22, 0x5961, 0x20EF, 0x5962, 0x0A45, 0x5967,
+ 0x0DF3, 0x5969, 0x0FAF, 0x596A, 0x0FAE, 0x596B, 0x264C, 0x596D, 0x1129,
+ 0x596E, 0x12A7, 0x5970, 0x2F17, 0x5971, 0x337B, 0x5972, 0x3412, 0x5973,
+ 0x027E, 0x5974, 0x0331, 0x5976, 0x0332, 0x5977, 0x17DA, 0x5978, 0x03B9,
+ 0x5979, 0x03BC, 0x597B, 0x17D8, 0x597C, 0x17D6, 0x597D, 0x03BB, 0x597E,
+ 0x17D9, 0x597F, 0x17DB, 0x5980, 0x17D5, 0x5981, 0x03BE, 0x5982, 0x03BD,
+ 0x5983, 0x03BA, 0x5984, 0x03B8, 0x5985, 0x17D7, 0x598A, 0x047B, 0x598D,
+ 0x0478, 0x598E, 0x185D, 0x598F, 0x1860, 0x5990, 0x185F, 0x5992, 0x0472,
+ 0x5993, 0x047A, 0x5996, 0x0477, 0x5997, 0x185C, 0x5998, 0x185A, 0x5999,
+ 0x0476, 0x599D, 0x0471, 0x599E, 0x0474, 0x59A0, 0x185B, 0x59A1, 0x1862,
+ 0x59A2, 0x185E, 0x59A3, 0x0475, 0x59A4, 0x0479, 0x59A5, 0x047C, 0x59A6,
+ 0x1859, 0x59A7, 0x1861, 0x59A8, 0x0473, 0x59AE, 0x058B, 0x59AF, 0x0593,
+ 0x59B1, 0x1951, 0x59B2, 0x194A, 0x59B3, 0x0594, 0x59B4, 0x1955, 0x59B5,
+ 0x1946, 0x59B6, 0x194D, 0x59B9, 0x058A, 0x59BA, 0x1947, 0x59BB, 0x0588,
+ 0x59BC, 0x194E, 0x59BD, 0x1952, 0x59BE, 0x0587, 0x59C0, 0x1953, 0x59C1,
+ 0x194C, 0x59C3, 0x194F, 0x59C5, 0x0596, 0x59C6, 0x058D, 0x59C7, 0x1956,
+ 0x59C8, 0x1954, 0x59CA, 0x0592, 0x59CB, 0x0590, 0x59CC, 0x194B, 0x59CD,
+ 0x058F, 0x59CE, 0x1949, 0x59CF, 0x1948, 0x59D0, 0x058E, 0x59D1, 0x058C,
+ 0x59D2, 0x0595, 0x59D3, 0x0591, 0x59D4, 0x0589, 0x59D6, 0x1950, 0x59D8,
+ 0x06F5, 0x59DA, 0x06FC, 0x59DB, 0x1AAB, 0x59DC, 0x06F4, 0x59DD, 0x1AA3,
+ 0x59DE, 0x1A9F, 0x59E0, 0x1AAF, 0x59E1, 0x1A9E, 0x59E3, 0x06F7, 0x59E4,
+ 0x1AA8, 0x59E5, 0x06FA, 0x59E6, 0x06FD, 0x59E8, 0x06F8, 0x59E9, 0x1AAC,
+ 0x59EA, 0x06FB, 0x59EC, 0x088A, 0x59ED, 0x1AB2, 0x59EE, 0x1AA0, 0x59F1,
+ 0x1AA2, 0x59F2, 0x1AA9, 0x59F3, 0x1AAD, 0x59F4, 0x1AB1, 0x59F5, 0x1AAE,
+ 0x59F6, 0x1AA7, 0x59F7, 0x1AAA, 0x59FA, 0x1AA4, 0x59FB, 0x06FF, 0x59FC,
+ 0x1AA6, 0x59FD, 0x1AA5, 0x59FE, 0x1AB0, 0x59FF, 0x06F6, 0x5A00, 0x1AA1,
+ 0x5A01, 0x06FE, 0x5A03, 0x06F9, 0x5A09, 0x0890, 0x5A0A, 0x1C75, 0x5A0C,
+ 0x088F, 0x5A0F, 0x1C73, 0x5A11, 0x0884, 0x5A13, 0x0889, 0x5A15, 0x1C72,
+ 0x5A16, 0x1C6F, 0x5A17, 0x1C74, 0x5A18, 0x0885, 0x5A19, 0x1C6E, 0x5A1B,
+ 0x0888, 0x5A1C, 0x0886, 0x5A1E, 0x1C76, 0x5A1F, 0x0887, 0x5A20, 0x088B,
+ 0x5A23, 0x088C, 0x5A25, 0x088E, 0x5A29, 0x088D, 0x5A2D, 0x1C70, 0x5A2E,
+ 0x1C71, 0x5A33, 0x1C77, 0x5A35, 0x1E9C, 0x5A36, 0x0A46, 0x5A37, 0x20FD,
+ 0x5A38, 0x1E9B, 0x5A39, 0x1EAE, 0x5A3C, 0x0A4C, 0x5A3E, 0x1EAC, 0x5A40,
+ 0x0A4B, 0x5A41, 0x0A47, 0x5A42, 0x1EB5, 0x5A43, 0x1EA5, 0x5A44, 0x1EA8,
+ 0x5A46, 0x0A4F, 0x5A47, 0x1EB2, 0x5A48, 0x1EAA, 0x5A49, 0x0A48, 0x5A4A,
+ 0x0A50, 0x5A4C, 0x1EAF, 0x5A4D, 0x1EAD, 0x5A50, 0x1E9E, 0x5A51, 0x1EB3,
+ 0x5A52, 0x1EA7, 0x5A53, 0x1EA2, 0x5A55, 0x1E98, 0x5A56, 0x1EB4, 0x5A57,
+ 0x1EA4, 0x5A58, 0x1E97, 0x5A5A, 0x0A4E, 0x5A5B, 0x1EA9, 0x5A5C, 0x1EB6,
+ 0x5A5D, 0x1EA6, 0x5A5E, 0x1E9A, 0x5A5F, 0x1E9F, 0x5A60, 0x1E96, 0x5A62,
+ 0x0A4D, 0x5A64, 0x1EA3, 0x5A65, 0x1EA0, 0x5A66, 0x0A49, 0x5A67, 0x1E99,
+ 0x5A69, 0x1EB1, 0x5A6A, 0x0A4A, 0x5A6C, 0x1EA1, 0x5A6D, 0x1E9D, 0x5A70,
+ 0x1EB0, 0x5A77, 0x0C23, 0x5A78, 0x20F6, 0x5A7A, 0x20F3, 0x5A7B, 0x2104,
+ 0x5A7C, 0x20F8, 0x5A7D, 0x2105, 0x5A7F, 0x0C25, 0x5A83, 0x2101, 0x5A84,
+ 0x20FE, 0x5A8A, 0x20FF, 0x5A8B, 0x2102, 0x5A8C, 0x2106, 0x5A8E, 0x1EAB,
+ 0x5A8F, 0x2108, 0x5A90, 0x23B6, 0x5A92, 0x0C26, 0x5A93, 0x2109, 0x5A94,
+ 0x20F1, 0x5A95, 0x20FB, 0x5A97, 0x2100, 0x5A9A, 0x0C24, 0x5A9B, 0x0C27,
+ 0x5A9C, 0x2107, 0x5A9D, 0x210A, 0x5A9E, 0x20F5, 0x5A9F, 0x20F2, 0x5AA2,
+ 0x20F4, 0x5AA5, 0x20F9, 0x5AA6, 0x20F7, 0x5AA7, 0x0C28, 0x5AA9, 0x2103,
+ 0x5AAC, 0x20FA, 0x5AAE, 0x20FC, 0x5AAF, 0x20F0, 0x5AB0, 0x23AA, 0x5AB1,
+ 0x23A8, 0x5AB2, 0x0DFC, 0x5AB3, 0x0DFA, 0x5AB4, 0x23B2, 0x5AB5, 0x23A9,
+ 0x5AB6, 0x23B3, 0x5AB7, 0x23AF, 0x5AB8, 0x23A7, 0x5AB9, 0x23B5, 0x5ABA,
+ 0x23A6, 0x5ABB, 0x23AD, 0x5ABC, 0x0DF9, 0x5ABD, 0x0DF8, 0x5ABE, 0x0DF7,
+ 0x5ABF, 0x23AB, 0x5AC0, 0x23B0, 0x5AC1, 0x0DF4, 0x5AC2, 0x0DFB, 0x5AC4,
+ 0x23A4, 0x5AC6, 0x23AE, 0x5AC7, 0x23A3, 0x5AC8, 0x23AC, 0x5AC9, 0x0DF5,
+ 0x5ACA, 0x23B1, 0x5ACB, 0x23A5, 0x5ACC, 0x0DF6, 0x5ACD, 0x23B4, 0x5AD5,
+ 0x2650, 0x5AD6, 0x0FB4, 0x5AD7, 0x0FB3, 0x5AD8, 0x0FB5, 0x5AD9, 0x265C,
+ 0x5ADA, 0x2652, 0x5ADB, 0x2658, 0x5ADC, 0x264D, 0x5ADD, 0x265B, 0x5ADE,
+ 0x265A, 0x5ADF, 0x265E, 0x5AE0, 0x2657, 0x5AE1, 0x0FB0, 0x5AE2, 0x2656,
+ 0x5AE3, 0x0FB6, 0x5AE5, 0x264F, 0x5AE6, 0x0FB1, 0x5AE8, 0x265D, 0x5AE9,
+ 0x0FB2, 0x5AEA, 0x2651, 0x5AEB, 0x2654, 0x5AEC, 0x2659, 0x5AED, 0x2653,
+ 0x5AEE, 0x264E, 0x5AF3, 0x2655, 0x5AF4, 0x28AB, 0x5AF5, 0x112D, 0x5AF6,
+ 0x28AE, 0x5AF7, 0x28AD, 0x5AF8, 0x28B0, 0x5AF9, 0x28B2, 0x5AFA, 0x36EE,
+ 0x5AFB, 0x112B, 0x5AFD, 0x28AC, 0x5AFF, 0x28AA, 0x5B01, 0x28B3, 0x5B02,
+ 0x28B1, 0x5B03, 0x28AF, 0x5B05, 0x28B5, 0x5B07, 0x28B4, 0x5B08, 0x112F,
+ 0x5B09, 0x112A, 0x5B0B, 0x112C, 0x5B0C, 0x112E, 0x5B0F, 0x28B6, 0x5B10,
+ 0x2B22, 0x5B13, 0x2B21, 0x5B14, 0x2B20, 0x5B16, 0x2B23, 0x5B17, 0x2B1C,
+ 0x5B19, 0x2B1D, 0x5B1A, 0x2B25, 0x5B1B, 0x2B1E, 0x5B1D, 0x12A8, 0x5B1E,
+ 0x2B27, 0x5B20, 0x2B26, 0x5B21, 0x2B1F, 0x5B23, 0x2D52, 0x5B24, 0x13C5,
+ 0x5B25, 0x2D50, 0x5B26, 0x2D55, 0x5B27, 0x2D54, 0x5B28, 0x2B24, 0x5B2A,
+ 0x13C4, 0x5B2C, 0x2D53, 0x5B2D, 0x2D4F, 0x5B2E, 0x2D57, 0x5B2F, 0x2D56,
+ 0x5B30, 0x13C3, 0x5B32, 0x2D51, 0x5B34, 0x12A9, 0x5B38, 0x14CE, 0x5B3C,
+ 0x2F18, 0x5B3D, 0x3089, 0x5B3E, 0x308A, 0x5B3F, 0x308B, 0x5B40, 0x160F,
+ 0x5B43, 0x1610, 0x5B45, 0x31CC, 0x5B47, 0x32CD, 0x5B48, 0x32CC, 0x5B4B,
+ 0x337C, 0x5B4C, 0x337D, 0x5B4D, 0x3413, 0x5B4E, 0x3482, 0x5B50, 0x027F,
+ 0x5B51, 0x0280, 0x5B53, 0x0281, 0x5B54, 0x02C6, 0x5B55, 0x0333, 0x5B56,
+ 0x17DC, 0x5B57, 0x03BF, 0x5B58, 0x03C0, 0x5B5A, 0x047F, 0x5B5B, 0x0480,
+ 0x5B5C, 0x047E, 0x5B5D, 0x047D, 0x5B5F, 0x0597, 0x5B62, 0x1957, 0x5B63,
+ 0x0599, 0x5B64, 0x0598, 0x5B65, 0x1958, 0x5B69, 0x0700, 0x5B6B, 0x0891,
+ 0x5B6C, 0x1C78, 0x5B6E, 0x1EB8, 0x5B70, 0x0A51, 0x5B71, 0x0C2A, 0x5B72,
+ 0x1EB7, 0x5B73, 0x0C29, 0x5B75, 0x0FB7, 0x5B77, 0x265F, 0x5B78, 0x12AA,
+ 0x5B7A, 0x13C6, 0x5B7B, 0x2D58, 0x5B7D, 0x1611, 0x5B7F, 0x16C0, 0x5B80,
+ 0x0225, 0x5B81, 0x179E, 0x5B83, 0x0334, 0x5B84, 0x179F, 0x5B85, 0x03C3,
+ 0x5B87, 0x03C1, 0x5B88, 0x03C2, 0x5B89, 0x03C4, 0x5B8B, 0x0482, 0x5B8C,
+ 0x0481, 0x5B8E, 0x1863, 0x5B8F, 0x0483, 0x5B92, 0x1864, 0x5B93, 0x1959,
+ 0x5B95, 0x195A, 0x5B97, 0x059A, 0x5B98, 0x059C, 0x5B99, 0x059E, 0x5B9A,
+ 0x059B, 0x5B9B, 0x059F, 0x5B9C, 0x059D, 0x5BA2, 0x0704, 0x5BA3, 0x0701,
+ 0x5BA4, 0x0703, 0x5BA5, 0x0705, 0x5BA6, 0x0702, 0x5BA7, 0x1C79, 0x5BA8,
+ 0x1AB3, 0x5BAC, 0x1C7B, 0x5BAD, 0x1C7A, 0x5BAE, 0x0897, 0x5BB0, 0x0893,
+ 0x5BB3, 0x0894, 0x5BB4, 0x0896, 0x5BB5, 0x0898, 0x5BB6, 0x0895, 0x5BB8,
+ 0x089A, 0x5BB9, 0x0899, 0x5BBF, 0x0A56, 0x5BC0, 0x1EBA, 0x5BC1, 0x1EB9,
+ 0x5BC2, 0x0A55, 0x5BC4, 0x0A54, 0x5BC5, 0x0A53, 0x5BC6, 0x0A57, 0x5BC7,
+ 0x0A52, 0x5BCA, 0x2110, 0x5BCB, 0x210D, 0x5BCC, 0x0C2C, 0x5BCD, 0x210C,
+ 0x5BCE, 0x2111, 0x5BD0, 0x0C2E, 0x5BD1, 0x210F, 0x5BD2, 0x0C2B, 0x5BD3,
+ 0x0C2D, 0x5BD4, 0x210E, 0x5BD6, 0x23B7, 0x5BD8, 0x23B8, 0x5BD9, 0x23B9,
+ 0x5BDE, 0x0FB8, 0x5BDF, 0x0FC0, 0x5BE0, 0x2660, 0x5BE1, 0x0FBA, 0x5BE2,
+ 0x0FBE, 0x5BE3, 0x2661, 0x5BE4, 0x0FBF, 0x5BE5, 0x0FBB, 0x5BE6, 0x0FBC,
+ 0x5BE7, 0x0FB9, 0x5BE8, 0x0FBD, 0x5BE9, 0x1132, 0x5BEA, 0x210B, 0x5BEB,
+ 0x1133, 0x5BEC, 0x1131, 0x5BEE, 0x1130, 0x5BEF, 0x2B28, 0x5BF0, 0x12AB,
+ 0x5BF1, 0x2D59, 0x5BF2, 0x2D5A, 0x5BF5, 0x157B, 0x5BF6, 0x1612, 0x5BF8,
+ 0x0282, 0x5BFA, 0x03C5, 0x5C01, 0x0706, 0x5C03, 0x1C7C, 0x5C04, 0x089B,
+ 0x5C07, 0x0A5A, 0x5C08, 0x0A59, 0x5C09, 0x0A58, 0x5C0A, 0x0C2F, 0x5C0B,
+ 0x0C30, 0x5C0C, 0x2112, 0x5C0D, 0x0FC1, 0x5C0E, 0x12AC, 0x5C0F, 0x0283,
+ 0x5C10, 0x1787, 0x5C11, 0x02C7, 0x5C12, 0x17A0, 0x5C15, 0x17DD, 0x5C16,
+ 0x03C6, 0x5C1A, 0x05A0, 0x5C1F, 0x23BA, 0x5C22, 0x0284, 0x5C24, 0x02C8,
+ 0x5C25, 0x17DE, 0x5C28, 0x1865, 0x5C2A, 0x1866, 0x5C2C, 0x0484, 0x5C30,
+ 0x2113, 0x5C31, 0x0C31, 0x5C33, 0x23BB, 0x5C37, 0x13C7, 0x5C38, 0x0285,
+ 0x5C39, 0x0299, 0x5C3A, 0x02C9, 0x5C3B, 0x17A1, 0x5C3C, 0x0335, 0x5C3E,
+ 0x0488, 0x5C3F, 0x0487, 0x5C40, 0x0485, 0x5C41, 0x0486, 0x5C44, 0x195B,
+ 0x5C45, 0x05A2, 0x5C46, 0x05A3, 0x5C47, 0x195C, 0x5C48, 0x05A1, 0x5C4B,
+ 0x070A, 0x5C4C, 0x1AB4, 0x5C4D, 0x0709, 0x5C4E, 0x0707, 0x5C4F, 0x0708,
+ 0x5C50, 0x089E, 0x5C51, 0x089C, 0x5C54, 0x1C7E, 0x5C55, 0x089D, 0x5C56,
+ 0x1C7D, 0x5C58, 0x0892, 0x5C59, 0x1EBB, 0x5C5C, 0x0A5C, 0x5C5D, 0x0A5D,
+ 0x5C60, 0x0A5B, 0x5C62, 0x0FC2, 0x5C63, 0x2662, 0x5C64, 0x1134, 0x5C65,
+ 0x1135, 0x5C67, 0x28B7, 0x5C68, 0x13C8, 0x5C69, 0x2F19, 0x5C6A, 0x2F1A,
+ 0x5C6C, 0x166E, 0x5C6D, 0x3483, 0x5C6E, 0x1776, 0x5C6F, 0x02CA, 0x5C71,
+ 0x0286, 0x5C73, 0x17A3, 0x5C74, 0x17A2, 0x5C79, 0x03C7, 0x5C7A, 0x17E0,
+ 0x5C7B, 0x17E1, 0x5C7C, 0x17DF, 0x5C7E, 0x17E2, 0x5C86, 0x186E, 0x5C88,
+ 0x1869, 0x5C89, 0x186B, 0x5C8A, 0x186D, 0x5C8B, 0x186A, 0x5C8C, 0x048C,
+ 0x5C8D, 0x1867, 0x5C8F, 0x1868, 0x5C90, 0x0489, 0x5C91, 0x048A, 0x5C92,
+ 0x186C, 0x5C93, 0x186F, 0x5C94, 0x048B, 0x5C95, 0x1870, 0x5C9D, 0x196A,
+ 0x5C9F, 0x1964, 0x5CA0, 0x195F, 0x5CA1, 0x05A5, 0x5CA2, 0x1967, 0x5CA3,
+ 0x1965, 0x5CA4, 0x195E, 0x5CA5, 0x196B, 0x5CA6, 0x196E, 0x5CA7, 0x1969,
+ 0x5CA8, 0x1962, 0x5CA9, 0x05A7, 0x5CAA, 0x1968, 0x5CAB, 0x05A8, 0x5CAC,
+ 0x1963, 0x5CAD, 0x1966, 0x5CAE, 0x195D, 0x5CAF, 0x1961, 0x5CB0, 0x196D,
+ 0x5CB1, 0x05A9, 0x5CB3, 0x05AA, 0x5CB5, 0x1960, 0x5CB6, 0x196C, 0x5CB7,
+ 0x05A4, 0x5CB8, 0x05A6, 0x5CC6, 0x1AC5, 0x5CC7, 0x1ABE, 0x5CC8, 0x1AC4,
+ 0x5CC9, 0x1ABD, 0x5CCA, 0x1ABF, 0x5CCB, 0x1AB9, 0x5CCC, 0x1AB7, 0x5CCE,
+ 0x1AC6, 0x5CCF, 0x1AC3, 0x5CD0, 0x1AB5, 0x5CD2, 0x070C, 0x5CD3, 0x1AC1,
+ 0x5CD4, 0x1AC2, 0x5CD6, 0x1AC0, 0x5CD7, 0x1AB8, 0x5CD8, 0x1AB6, 0x5CD9,
+ 0x070B, 0x5CDA, 0x1ABC, 0x5CDB, 0x1ABA, 0x5CDE, 0x1ABB, 0x5CDF, 0x1AC7,
+ 0x5CE8, 0x08A3, 0x5CEA, 0x08A2, 0x5CEC, 0x1C7F, 0x5CED, 0x089F, 0x5CEE,
+ 0x1C81, 0x5CF0, 0x08A4, 0x5CF1, 0x1C82, 0x5CF4, 0x08A7, 0x5CF6, 0x08A5,
+ 0x5CF7, 0x1C83, 0x5CF8, 0x1AC8, 0x5CF9, 0x1C85, 0x5CFB, 0x08A1, 0x5CFD,
+ 0x08A0, 0x5CFF, 0x1C80, 0x5D00, 0x1C84, 0x5D01, 0x08A6, 0x5D06, 0x0A5F,
+ 0x5D07, 0x0A5E, 0x5D0B, 0x1EBD, 0x5D0C, 0x1EC1, 0x5D0D, 0x1EC3, 0x5D0E,
+ 0x0A60, 0x5D0F, 0x1EC6, 0x5D11, 0x0A64, 0x5D12, 0x1EC8, 0x5D14, 0x0A66,
+ 0x5D16, 0x0A62, 0x5D17, 0x0A6A, 0x5D19, 0x0A67, 0x5D1A, 0x1EBF, 0x5D1B,
+ 0x0A61, 0x5D1D, 0x1EBE, 0x5D1E, 0x1EBC, 0x5D1F, 0x1ECA, 0x5D20, 0x1EC0,
+ 0x5D22, 0x0A63, 0x5D23, 0x1EC9, 0x5D24, 0x0A68, 0x5D25, 0x1EC5, 0x5D26,
+ 0x1EC4, 0x5D27, 0x0A69, 0x5D28, 0x1EC2, 0x5D29, 0x0A65, 0x5D2E, 0x1ECB,
+ 0x5D30, 0x1EC7, 0x5D31, 0x2122, 0x5D32, 0x2129, 0x5D33, 0x211E, 0x5D34,
+ 0x0C34, 0x5D35, 0x211A, 0x5D36, 0x212A, 0x5D37, 0x2114, 0x5D38, 0x2127,
+ 0x5D39, 0x2125, 0x5D3A, 0x211F, 0x5D3C, 0x2128, 0x5D3D, 0x2121, 0x5D3F,
+ 0x2119, 0x5D40, 0x212B, 0x5D41, 0x2117, 0x5D42, 0x2124, 0x5D43, 0x2115,
+ 0x5D45, 0x212C, 0x5D47, 0x0C35, 0x5D49, 0x2126, 0x5D4A, 0x23BE, 0x5D4B,
+ 0x2118, 0x5D4C, 0x0C32, 0x5D4E, 0x211C, 0x5D50, 0x0C33, 0x5D51, 0x211B,
+ 0x5D52, 0x2120, 0x5D55, 0x211D, 0x5D59, 0x2123, 0x5D5E, 0x23C2, 0x5D62,
+ 0x23C5, 0x5D63, 0x23BD, 0x5D65, 0x23BF, 0x5D67, 0x23C4, 0x5D68, 0x23C3,
+ 0x5D69, 0x0DFD, 0x5D6B, 0x2116, 0x5D6C, 0x23C1, 0x5D6F, 0x0DFE, 0x5D71,
+ 0x23BC, 0x5D72, 0x23C0, 0x5D77, 0x2669, 0x5D79, 0x2670, 0x5D7A, 0x2667,
+ 0x5D7C, 0x266E, 0x5D7D, 0x2665, 0x5D7E, 0x266D, 0x5D7F, 0x2671, 0x5D80,
+ 0x2664, 0x5D81, 0x2668, 0x5D82, 0x2663, 0x5D84, 0x0FC3, 0x5D86, 0x2666,
+ 0x5D87, 0x0FC4, 0x5D88, 0x266C, 0x5D89, 0x266B, 0x5D8A, 0x266A, 0x5D8D,
+ 0x266F, 0x5D92, 0x28BB, 0x5D93, 0x28BD, 0x5D94, 0x1137, 0x5D95, 0x28BE,
+ 0x5D97, 0x28B9, 0x5D99, 0x28B8, 0x5D9A, 0x28C2, 0x5D9C, 0x28C0, 0x5D9D,
+ 0x1136, 0x5D9E, 0x28C3, 0x5D9F, 0x28BA, 0x5DA0, 0x28BF, 0x5DA1, 0x28C1,
+ 0x5DA2, 0x28BC, 0x5DA7, 0x2B2C, 0x5DA8, 0x2B31, 0x5DA9, 0x2B2B, 0x5DAA,
+ 0x2B30, 0x5DAC, 0x2B29, 0x5DAD, 0x2B33, 0x5DAE, 0x2B2F, 0x5DAF, 0x2B34,
+ 0x5DB0, 0x2B2E, 0x5DB1, 0x2B2A, 0x5DB2, 0x2B32, 0x5DB4, 0x2B35, 0x5DB5,
+ 0x2B2D, 0x5DB7, 0x2D5B, 0x5DB8, 0x13CC, 0x5DBA, 0x13CA, 0x5DBC, 0x13C9,
+ 0x5DBD, 0x13CB, 0x5DC0, 0x2F1B, 0x5DC2, 0x3023, 0x5DC3, 0x308C, 0x5DC6,
+ 0x31CD, 0x5DC7, 0x31CE, 0x5DC9, 0x1613, 0x5DCB, 0x32CE, 0x5DCD, 0x166F,
+ 0x5DCF, 0x32CF, 0x5DD1, 0x337F, 0x5DD2, 0x16C2, 0x5DD4, 0x16C1, 0x5DD5,
+ 0x337E, 0x5DD6, 0x16F7, 0x5DD8, 0x3414, 0x5DDB, 0x0226, 0x5DDD, 0x0287,
+ 0x5DDE, 0x03C8, 0x5DDF, 0x17E3, 0x5DE0, 0x1871, 0x5DE1, 0x051A, 0x5DE2,
+ 0x0A6B, 0x5DE5, 0x0288, 0x5DE6, 0x0338, 0x5DE7, 0x0337, 0x5DE8, 0x0336,
+ 0x5DEB, 0x048D, 0x5DEE, 0x08A8, 0x5DF0, 0x23C6, 0x5DF1, 0x0289, 0x5DF2,
+ 0x028A, 0x5DF3, 0x028B, 0x5DF4, 0x02CB, 0x5DF7, 0x070D, 0x5DF9, 0x1AC9,
+ 0x5DFD, 0x0C36, 0x5DFE, 0x028C, 0x5DFF, 0x1788, 0x5E02, 0x0339, 0x5E03,
+ 0x033A, 0x5E04, 0x17A4, 0x5E06, 0x03C9, 0x5E0A, 0x1872, 0x5E0C, 0x048E,
+ 0x5E0E, 0x1873, 0x5E11, 0x05B0, 0x5E14, 0x1970, 0x5E15, 0x05AE, 0x5E16,
+ 0x05AD, 0x5E17, 0x196F, 0x5E18, 0x05AB, 0x5E19, 0x1971, 0x5E1A, 0x05AC,
+ 0x5E1B, 0x05AF, 0x5E1D, 0x070E, 0x5E1F, 0x0710, 0x5E20, 0x1ACD, 0x5E21,
+ 0x1ACA, 0x5E22, 0x1ACB, 0x5E23, 0x1ACC, 0x5E24, 0x1ACE, 0x5E25, 0x070F,
+ 0x5E28, 0x1C87, 0x5E29, 0x1C86, 0x5E2B, 0x08AA, 0x5E2D, 0x08A9, 0x5E33,
+ 0x0A6E, 0x5E34, 0x1ECD, 0x5E36, 0x0A6D, 0x5E37, 0x0A6F, 0x5E38, 0x0A6C,
+ 0x5E3D, 0x0C38, 0x5E3E, 0x1ECC, 0x5E40, 0x0C39, 0x5E41, 0x212E, 0x5E43,
+ 0x0C3A, 0x5E44, 0x212D, 0x5E45, 0x0C37, 0x5E4A, 0x23C9, 0x5E4B, 0x23CB,
+ 0x5E4C, 0x0DFF, 0x5E4D, 0x23CA, 0x5E4E, 0x23C8, 0x5E4F, 0x23C7, 0x5E53,
+ 0x2674, 0x5E54, 0x0FC9, 0x5E55, 0x0FC7, 0x5E57, 0x0FC8, 0x5E58, 0x2672,
+ 0x5E59, 0x2673, 0x5E5B, 0x0FC5, 0x5E5C, 0x28C7, 0x5E5D, 0x28C5, 0x5E5F,
+ 0x1139, 0x5E60, 0x28C6, 0x5E61, 0x113A, 0x5E62, 0x1138, 0x5E63, 0x0FC6,
+ 0x5E66, 0x2B38, 0x5E67, 0x2B36, 0x5E68, 0x2B37, 0x5E69, 0x28C4, 0x5E6A,
+ 0x2D5D, 0x5E6B, 0x13CD, 0x5E6C, 0x2D5C, 0x5E6D, 0x2F1C, 0x5E6E, 0x2F1D,
+ 0x5E6F, 0x2B39, 0x5E70, 0x308D, 0x5E72, 0x028D, 0x5E73, 0x033B, 0x5E74,
+ 0x03CB, 0x5E75, 0x17E4, 0x5E76, 0x03CA, 0x5E78, 0x05B1, 0x5E79, 0x0E00,
+ 0x5E7A, 0x0227, 0x5E7B, 0x02CC, 0x5E7C, 0x033C, 0x5E7D, 0x0711, 0x5E7E,
+ 0x0C3B, 0x5E7F, 0x0228, 0x5E80, 0x17A5, 0x5E82, 0x17A6, 0x5E84, 0x17E5,
+ 0x5E87, 0x0490, 0x5E88, 0x1877, 0x5E89, 0x1875, 0x5E8A, 0x0491, 0x5E8B,
+ 0x1874, 0x5E8C, 0x1876, 0x5E8D, 0x1878, 0x5E8F, 0x048F, 0x5E95, 0x05B5,
+ 0x5E96, 0x05B6, 0x5E97, 0x05B3, 0x5E9A, 0x05B2, 0x5E9B, 0x1AD2, 0x5E9C,
+ 0x05B4, 0x5EA0, 0x0712, 0x5EA2, 0x1AD1, 0x5EA3, 0x1AD3, 0x5EA4, 0x1AD0,
+ 0x5EA5, 0x1AD4, 0x5EA6, 0x0713, 0x5EA7, 0x08AD, 0x5EA8, 0x1C88, 0x5EAA,
+ 0x1C8A, 0x5EAB, 0x08AB, 0x5EAC, 0x1C8B, 0x5EAD, 0x08AC, 0x5EAE, 0x1C89,
+ 0x5EB0, 0x1ACF, 0x5EB1, 0x1ECE, 0x5EB2, 0x1ED1, 0x5EB3, 0x1ED2, 0x5EB4,
+ 0x1ECF, 0x5EB5, 0x0A73, 0x5EB6, 0x0A72, 0x5EB7, 0x0A70, 0x5EB8, 0x0A71,
+ 0x5EB9, 0x1ED0, 0x5EBE, 0x0A74, 0x5EC1, 0x0C3D, 0x5EC2, 0x0C3E, 0x5EC4,
+ 0x0C3F, 0x5EC5, 0x23CC, 0x5EC6, 0x23CE, 0x5EC7, 0x23D0, 0x5EC8, 0x0E02,
+ 0x5EC9, 0x0E01, 0x5ECA, 0x0C3C, 0x5ECB, 0x23CF, 0x5ECC, 0x23CD, 0x5ECE,
+ 0x2678, 0x5ED1, 0x2676, 0x5ED2, 0x267C, 0x5ED3, 0x0FCA, 0x5ED4, 0x267D,
+ 0x5ED5, 0x267A, 0x5ED6, 0x0FCB, 0x5ED7, 0x2677, 0x5ED8, 0x2675, 0x5ED9,
+ 0x267B, 0x5EDA, 0x113C, 0x5EDB, 0x28C9, 0x5EDC, 0x2679, 0x5EDD, 0x113E,
+ 0x5EDE, 0x28CA, 0x5EDF, 0x113D, 0x5EE0, 0x1140, 0x5EE1, 0x28CB, 0x5EE2,
+ 0x113B, 0x5EE3, 0x113F, 0x5EE5, 0x2B3E, 0x5EE6, 0x2B3C, 0x5EE7, 0x2B3B,
+ 0x5EE8, 0x2B3D, 0x5EE9, 0x2B3A, 0x5EEC, 0x157D, 0x5EEE, 0x31CF, 0x5EEF,
+ 0x31D0, 0x5EF1, 0x32D0, 0x5EF2, 0x3380, 0x5EF3, 0x1742, 0x5EF4, 0x0229,
+ 0x5EF6, 0x05B7, 0x5EF7, 0x0492, 0x5EFA, 0x0714, 0x5EFE, 0x028E, 0x5EFF,
+ 0x02CD, 0x5F01, 0x033D, 0x5F02, 0x17E6, 0x5F04, 0x0493, 0x5F05, 0x1879,
+ 0x5F07, 0x1AD5, 0x5F08, 0x0715, 0x5F0A, 0x0FCC, 0x5F0B, 0x028F, 0x5F0F,
+ 0x03CC, 0x5F12, 0x0E03, 0x5F13, 0x0290, 0x5F14, 0x02CE, 0x5F15, 0x02CF,
+ 0x5F17, 0x033F, 0x5F18, 0x033E, 0x5F1A, 0x17E7, 0x5F1B, 0x03CD, 0x5F1D,
+ 0x187A, 0x5F1F, 0x0494, 0x5F22, 0x1973, 0x5F23, 0x1974, 0x5F24, 0x1975,
+ 0x5F26, 0x05B8, 0x5F27, 0x05B9, 0x5F28, 0x1972, 0x5F29, 0x05BA, 0x5F2D,
+ 0x0716, 0x5F2E, 0x1AD6, 0x5F30, 0x1C8D, 0x5F31, 0x08AE, 0x5F33, 0x1C8C,
+ 0x5F35, 0x0A75, 0x5F36, 0x1ED3, 0x5F37, 0x0A76, 0x5F38, 0x1ED4, 0x5F3C,
+ 0x0C40, 0x5F40, 0x23D1, 0x5F43, 0x267F, 0x5F44, 0x267E, 0x5F46, 0x0FCD,
+ 0x5F48, 0x1141, 0x5F49, 0x28CC, 0x5F4A, 0x12AD, 0x5F4B, 0x2B3F, 0x5F4C,
+ 0x13CE, 0x5F4E, 0x16C3, 0x5F4F, 0x3416, 0x5F50, 0x022A, 0x5F54, 0x1976,
+ 0x5F56, 0x1AD7, 0x5F57, 0x0A77, 0x5F58, 0x212F, 0x5F59, 0x0E04, 0x5F5D,
+ 0x14CF, 0x5F61, 0x022B, 0x5F62, 0x0496, 0x5F64, 0x0495, 0x5F65, 0x0717,
+ 0x5F67, 0x1C8E, 0x5F69, 0x0A79, 0x5F6A, 0x0B89, 0x5F6B, 0x0A7A, 0x5F6C,
+ 0x0A78, 0x5F6D, 0x0C41, 0x5F6F, 0x2680, 0x5F70, 0x0FCE, 0x5F71, 0x1142,
+ 0x5F73, 0x1777, 0x5F74, 0x17E8, 0x5F76, 0x187C, 0x5F77, 0x0497, 0x5F78,
+ 0x187B, 0x5F79, 0x0498, 0x5F7C, 0x05BE, 0x5F7D, 0x1979, 0x5F7E, 0x1978,
+ 0x5F7F, 0x05BD, 0x5F80, 0x05BB, 0x5F81, 0x05BC, 0x5F82, 0x1977, 0x5F85,
+ 0x0719, 0x5F86, 0x1AD8, 0x5F87, 0x071C, 0x5F88, 0x0718, 0x5F89, 0x071E,
+ 0x5F8A, 0x071A, 0x5F8B, 0x071B, 0x5F8C, 0x071D, 0x5F90, 0x08B1, 0x5F91,
+ 0x08B0, 0x5F92, 0x08AF, 0x5F96, 0x1ED6, 0x5F97, 0x0A7B, 0x5F98, 0x0A7E,
+ 0x5F99, 0x0A7C, 0x5F9B, 0x1ED5, 0x5F9C, 0x0A81, 0x5F9E, 0x0A7D, 0x5F9F,
+ 0x1ED7, 0x5FA0, 0x0A80, 0x5FA1, 0x0A7F, 0x5FA5, 0x2131, 0x5FA6, 0x2130,
+ 0x5FA8, 0x0C44, 0x5FA9, 0x0C42, 0x5FAA, 0x0C43, 0x5FAB, 0x2132, 0x5FAC,
+ 0x0E05, 0x5FAD, 0x23D3, 0x5FAE, 0x0E06, 0x5FAF, 0x23D2, 0x5FB2, 0x28CD,
+ 0x5FB5, 0x1144, 0x5FB6, 0x2681, 0x5FB7, 0x1143, 0x5FB9, 0x0FCF, 0x5FBB,
+ 0x2B41, 0x5FBC, 0x2B40, 0x5FBD, 0x13CF, 0x5FBE, 0x2D5E, 0x5FBF, 0x308E,
+ 0x5FC0, 0x31D1, 0x5FC1, 0x31D2, 0x5FC3, 0x02D0, 0x5FC5, 0x0340, 0x5FC9,
+ 0x17A7, 0x5FCC, 0x049A, 0x5FCD, 0x049C, 0x5FCF, 0x17EB, 0x5FD0, 0x187F,
+ 0x5FD1, 0x187E, 0x5FD2, 0x187D, 0x5FD4, 0x17EA, 0x5FD5, 0x17E9, 0x5FD6,
+ 0x03CF, 0x5FD7, 0x049B, 0x5FD8, 0x0499, 0x5FD9, 0x03CE, 0x5FDD, 0x05BF,
+ 0x5FDE, 0x197A, 0x5FE0, 0x05C0, 0x5FE1, 0x1884, 0x5FE3, 0x1886, 0x5FE4,
+ 0x1885, 0x5FE5, 0x197B, 0x5FE8, 0x1881, 0x5FEA, 0x04A0, 0x5FEB, 0x049E,
+ 0x5FED, 0x1880, 0x5FEE, 0x1882, 0x5FEF, 0x1888, 0x5FF1, 0x049D, 0x5FF3,
+ 0x1883, 0x5FF4, 0x188C, 0x5FF5, 0x05C2, 0x5FF7, 0x1889, 0x5FF8, 0x049F,
+ 0x5FFA, 0x1887, 0x5FFB, 0x188A, 0x5FFD, 0x05C1, 0x5FFF, 0x05C3, 0x6000,
+ 0x188B, 0x6009, 0x198F, 0x600A, 0x1982, 0x600B, 0x1980, 0x600C, 0x198E,
+ 0x600D, 0x1989, 0x600E, 0x0723, 0x600F, 0x05C4, 0x6010, 0x198A, 0x6011,
+ 0x198D, 0x6012, 0x071F, 0x6013, 0x198C, 0x6014, 0x05C5, 0x6015, 0x05CA,
+ 0x6016, 0x05C8, 0x6017, 0x1983, 0x6019, 0x197E, 0x601A, 0x1985, 0x601B,
+ 0x05CF, 0x601C, 0x1990, 0x601D, 0x0720, 0x601E, 0x1986, 0x6020, 0x0721,
+ 0x6021, 0x05CB, 0x6022, 0x1988, 0x6024, 0x1AE7, 0x6025, 0x0722, 0x6026,
+ 0x197D, 0x6027, 0x05CC, 0x6028, 0x0724, 0x6029, 0x05CD, 0x602A, 0x05C9,
+ 0x602B, 0x05CE, 0x602C, 0x1987, 0x602D, 0x197C, 0x602E, 0x198B, 0x602F,
+ 0x05C6, 0x6032, 0x197F, 0x6033, 0x1984, 0x6034, 0x1981, 0x6035, 0x05C7,
+ 0x6037, 0x1AD9, 0x6039, 0x1ADA, 0x6040, 0x1AE4, 0x6041, 0x1C92, 0x6042,
+ 0x1AE5, 0x6043, 0x072A, 0x6044, 0x1AE8, 0x6045, 0x1ADE, 0x6046, 0x0729,
+ 0x6047, 0x1AE0, 0x6049, 0x1AE1, 0x604C, 0x1AE3, 0x604D, 0x0725, 0x6050,
+ 0x08B5, 0x6052, 0x36EC, 0x6053, 0x1ADF, 0x6054, 0x1ADB, 0x6055, 0x08B6,
+ 0x6058, 0x1AE9, 0x6059, 0x08B2, 0x605A, 0x1C90, 0x605B, 0x1AE2, 0x605D,
+ 0x1C8F, 0x605E, 0x1ADD, 0x605F, 0x1AE6, 0x6062, 0x0728, 0x6063, 0x08B3,
+ 0x6064, 0x072E, 0x6065, 0x08B4, 0x6066, 0x1AEA, 0x6067, 0x1C91, 0x6068,
+ 0x0727, 0x6069, 0x08B8, 0x606A, 0x072D, 0x606B, 0x072C, 0x606C, 0x072B,
+ 0x606D, 0x08B7, 0x606E, 0x1AEB, 0x606F, 0x08B9, 0x6070, 0x0726, 0x6072,
+ 0x1ADC, 0x607F, 0x0A82, 0x6080, 0x1C95, 0x6081, 0x1C97, 0x6083, 0x1C99,
+ 0x6084, 0x08BA, 0x6085, 0x08C0, 0x6086, 0x1EDA, 0x6087, 0x1C9D, 0x6088,
+ 0x1C94, 0x6089, 0x0A84, 0x608A, 0x1ED8, 0x608C, 0x08BF, 0x608D, 0x08BD,
+ 0x608E, 0x1C9F, 0x6090, 0x1ED9, 0x6092, 0x1C96, 0x6094, 0x08BE, 0x6095,
+ 0x1C9A, 0x6096, 0x08C1, 0x6097, 0x1C9C, 0x609A, 0x08BC, 0x609B, 0x1C9B,
+ 0x609C, 0x1C9E, 0x609D, 0x1C98, 0x609F, 0x08BB, 0x60A0, 0x0A85, 0x60A2,
+ 0x1C93, 0x60A3, 0x0A83, 0x60A8, 0x0A86, 0x60B0, 0x1EDC, 0x60B1, 0x1EE5,
+ 0x60B2, 0x0C47, 0x60B4, 0x0A88, 0x60B5, 0x0A8D, 0x60B6, 0x0C48, 0x60B7,
+ 0x1EE7, 0x60B8, 0x0A94, 0x60B9, 0x2134, 0x60BA, 0x1EDD, 0x60BB, 0x0A8C,
+ 0x60BC, 0x0A8F, 0x60BD, 0x0A8A, 0x60BE, 0x1EDB, 0x60BF, 0x1EE9, 0x60C0,
+ 0x1EEC, 0x60C1, 0x2143, 0x60C3, 0x1EEA, 0x60C4, 0x2138, 0x60C5, 0x0A8B,
+ 0x60C6, 0x0A92, 0x60C7, 0x0A96, 0x60C8, 0x1EE4, 0x60C9, 0x2133, 0x60CA,
+ 0x1EE8, 0x60CB, 0x0A87, 0x60CC, 0x2135, 0x60CD, 0x1EEB, 0x60CE, 0x2137,
+ 0x60CF, 0x1EE0, 0x60D1, 0x0C45, 0x60D3, 0x1EDE, 0x60D4, 0x1EDF, 0x60D5,
+ 0x0A91, 0x60D8, 0x0A90, 0x60D9, 0x1EE2, 0x60DA, 0x0A95, 0x60DB, 0x1EE6,
+ 0x60DC, 0x0A8E, 0x60DD, 0x1EE3, 0x60DF, 0x0A93, 0x60E0, 0x0C49, 0x60E1,
+ 0x0C46, 0x60E2, 0x2136, 0x60E4, 0x1EE1, 0x60E6, 0x0A89, 0x60F0, 0x0C4E,
+ 0x60F1, 0x0C52, 0x60F2, 0x213A, 0x60F3, 0x0E0B, 0x60F4, 0x0C50, 0x60F5,
+ 0x213E, 0x60F6, 0x0C54, 0x60F7, 0x23D4, 0x60F8, 0x2140, 0x60F9, 0x0E0D,
+ 0x60FA, 0x0C4C, 0x60FB, 0x0C4F, 0x60FC, 0x2141, 0x60FE, 0x2142, 0x60FF,
+ 0x2148, 0x6100, 0x0C56, 0x6101, 0x0E0E, 0x6103, 0x2144, 0x6104, 0x2149,
+ 0x6105, 0x213D, 0x6106, 0x0E18, 0x6108, 0x0E0F, 0x6109, 0x0C55, 0x610A,
+ 0x213B, 0x610B, 0x214A, 0x610D, 0x0E17, 0x610E, 0x0C53, 0x610F, 0x0E08,
+ 0x6110, 0x2147, 0x6112, 0x0C57, 0x6113, 0x213F, 0x6114, 0x2139, 0x6115,
+ 0x0C4D, 0x6116, 0x213C, 0x6118, 0x2145, 0x611A, 0x0E07, 0x611B, 0x0E0C,
+ 0x611C, 0x0C4A, 0x611D, 0x2146, 0x611F, 0x0E0A, 0x6123, 0x0C4B, 0x6127,
+ 0x0E16, 0x6128, 0x2683, 0x6129, 0x23DF, 0x612B, 0x23D7, 0x612C, 0x2682,
+ 0x612E, 0x23DB, 0x612F, 0x23DD, 0x6132, 0x23DA, 0x6134, 0x0E15, 0x6136,
+ 0x23D9, 0x6137, 0x0E19, 0x613B, 0x2692, 0x613E, 0x0E14, 0x613F, 0x0FD1,
+ 0x6140, 0x23E0, 0x6141, 0x2684, 0x6144, 0x0E12, 0x6145, 0x23D8, 0x6146,
+ 0x23DC, 0x6147, 0x0FD0, 0x6148, 0x0E09, 0x6149, 0x23D5, 0x614A, 0x23D6,
+ 0x614B, 0x0FD2, 0x614C, 0x0E11, 0x614D, 0x0E13, 0x614E, 0x0E10, 0x614F,
+ 0x23DE, 0x6152, 0x2688, 0x6153, 0x2689, 0x6154, 0x268E, 0x6155, 0x1149,
+ 0x6156, 0x2695, 0x6158, 0x0FD8, 0x615A, 0x0FD7, 0x615B, 0x2690, 0x615D,
+ 0x1148, 0x615E, 0x2685, 0x615F, 0x0FD6, 0x6161, 0x2694, 0x6162, 0x0FD4,
+ 0x6163, 0x0FD5, 0x6165, 0x2691, 0x6166, 0x28DE, 0x6167, 0x1146, 0x6168,
+ 0x0C51, 0x616A, 0x2693, 0x616B, 0x114D, 0x616C, 0x268B, 0x616E, 0x1147,
+ 0x6170, 0x114C, 0x6171, 0x2686, 0x6172, 0x268A, 0x6173, 0x2687, 0x6174,
+ 0x268D, 0x6175, 0x0FD9, 0x6176, 0x1145, 0x6177, 0x0FD3, 0x6179, 0x28D0,
+ 0x617A, 0x268F, 0x617C, 0x114B, 0x617E, 0x114E, 0x6180, 0x268C, 0x6182,
+ 0x114A, 0x6183, 0x28CF, 0x6189, 0x28D4, 0x618A, 0x12B1, 0x618B, 0x28CE,
+ 0x618C, 0x2B4D, 0x618D, 0x28DD, 0x618E, 0x1152, 0x6190, 0x1150, 0x6191,
+ 0x12AF, 0x6192, 0x28DA, 0x6193, 0x28D6, 0x6194, 0x1156, 0x6196, 0x2B44,
+ 0x619A, 0x1154, 0x619B, 0x28D5, 0x619D, 0x2B42, 0x619F, 0x28D9, 0x61A1,
+ 0x28DC, 0x61A2, 0x28D3, 0x61A4, 0x1155, 0x61A7, 0x114F, 0x61A8, 0x2B43,
+ 0x61A9, 0x12B0, 0x61AA, 0x28DB, 0x61AB, 0x1151, 0x61AC, 0x1153, 0x61AD,
+ 0x28D8, 0x61AE, 0x1157, 0x61AF, 0x28D7, 0x61B0, 0x28D2, 0x61B1, 0x28D1,
+ 0x61B2, 0x12AE, 0x61B3, 0x28DF, 0x61B4, 0x2B46, 0x61B5, 0x2D60, 0x61B6,
+ 0x12B3, 0x61B8, 0x2B4C, 0x61BA, 0x2B4A, 0x61BC, 0x2D61, 0x61BE, 0x12B4,
+ 0x61BF, 0x2B4B, 0x61C1, 0x2B48, 0x61C2, 0x13D1, 0x61C3, 0x2D5F, 0x61C5,
+ 0x2B45, 0x61C6, 0x2B47, 0x61C7, 0x13D2, 0x61C8, 0x12B6, 0x61C9, 0x13D0,
+ 0x61CA, 0x12B5, 0x61CB, 0x13D4, 0x61CC, 0x2B49, 0x61CD, 0x12B2, 0x61D6,
+ 0x2F26, 0x61D8, 0x2F1E, 0x61DE, 0x2D67, 0x61DF, 0x2F1F, 0x61E0, 0x2D63,
+ 0x61E3, 0x14D0, 0x61E4, 0x2D65, 0x61E5, 0x2D64, 0x61E6, 0x13D3, 0x61E7,
+ 0x2D62, 0x61E8, 0x2D66, 0x61E9, 0x2F27, 0x61EA, 0x2F23, 0x61EB, 0x2F25,
+ 0x61ED, 0x2F20, 0x61EE, 0x2F21, 0x61F0, 0x2F24, 0x61F1, 0x2F22, 0x61F2,
+ 0x157E, 0x61F5, 0x1581, 0x61F6, 0x1580, 0x61F7, 0x157F, 0x61F8, 0x1614,
+ 0x61F9, 0x31D3, 0x61FA, 0x1615, 0x61FB, 0x308F, 0x61FC, 0x1670, 0x61FD,
+ 0x32D1, 0x61FE, 0x1671, 0x61FF, 0x16C4, 0x6200, 0x16F8, 0x6201, 0x3417,
+ 0x6203, 0x3418, 0x6204, 0x3419, 0x6207, 0x3533, 0x6208, 0x02D1, 0x6209,
+ 0x17A8, 0x620A, 0x0341, 0x620C, 0x03D1, 0x620D, 0x03D2, 0x620E, 0x03D0,
+ 0x6210, 0x03D3, 0x6211, 0x04A2, 0x6212, 0x04A1, 0x6214, 0x1991, 0x6215,
+ 0x05D1, 0x6216, 0x05D0, 0x6219, 0x1CA0, 0x621A, 0x0A97, 0x621B, 0x0A98,
+ 0x621F, 0x0C58, 0x6220, 0x23E1, 0x6221, 0x0E1A, 0x6222, 0x0E1B, 0x6223,
+ 0x23E3, 0x6224, 0x23E5, 0x6225, 0x23E4, 0x6227, 0x2697, 0x6229, 0x2696,
+ 0x622A, 0x0FDA, 0x622B, 0x2698, 0x622D, 0x28E0, 0x622E, 0x1158, 0x6230,
+ 0x12B7, 0x6232, 0x13D5, 0x6233, 0x14D1, 0x6234, 0x13D6, 0x6236, 0x02D2,
+ 0x623A, 0x188D, 0x623D, 0x1992, 0x623E, 0x05D3, 0x623F, 0x05D2, 0x6240,
+ 0x05D4, 0x6241, 0x072F, 0x6242, 0x1AEC, 0x6243, 0x1AED, 0x6246, 0x1CA1,
+ 0x6247, 0x08C2, 0x6248, 0x0A99, 0x6249, 0x0C59, 0x624A, 0x214B, 0x624B,
+ 0x02D3, 0x624D, 0x0291, 0x624E, 0x02D4, 0x6250, 0x17A9, 0x6251, 0x0345,
+ 0x6252, 0x0344, 0x6253, 0x0342, 0x6254, 0x0343, 0x6258, 0x03D6, 0x6259,
+ 0x17F2, 0x625A, 0x17F4, 0x625B, 0x03D5, 0x625C, 0x17EC, 0x625E, 0x17ED,
+ 0x6260, 0x17F3, 0x6261, 0x17EF, 0x6262, 0x17F1, 0x6263, 0x03D4, 0x6264,
+ 0x17EE, 0x6265, 0x17F5, 0x6266, 0x17F0, 0x626D, 0x04A9, 0x626E, 0x04B2,
+ 0x626F, 0x04B0, 0x6270, 0x1897, 0x6271, 0x1894, 0x6272, 0x189C, 0x6273,
+ 0x04AE, 0x6274, 0x189D, 0x6276, 0x04A7, 0x6277, 0x189A, 0x6279, 0x04AD,
+ 0x627A, 0x1896, 0x627B, 0x1895, 0x627C, 0x04AB, 0x627D, 0x189B, 0x627E,
+ 0x04AC, 0x627F, 0x05D5, 0x6280, 0x04A6, 0x6281, 0x1898, 0x6283, 0x188E,
+ 0x6284, 0x04A3, 0x6286, 0x04B6, 0x6287, 0x1893, 0x6288, 0x1899, 0x6289,
+ 0x04A8, 0x628A, 0x04AA, 0x628C, 0x188F, 0x628E, 0x1890, 0x628F, 0x1891,
+ 0x6291, 0x04B5, 0x6292, 0x04AF, 0x6293, 0x04B4, 0x6294, 0x1892, 0x6295,
+ 0x04B3, 0x6296, 0x04A5, 0x6297, 0x04A4, 0x6298, 0x04B1, 0x62A8, 0x05E3,
+ 0x62A9, 0x199E, 0x62AA, 0x1997, 0x62AB, 0x05DE, 0x62AC, 0x05F1, 0x62AD,
+ 0x1993, 0x62AE, 0x199A, 0x62AF, 0x199C, 0x62B0, 0x199F, 0x62B1, 0x05EC,
+ 0x62B3, 0x199B, 0x62B4, 0x1994, 0x62B5, 0x05EA, 0x62B6, 0x1998, 0x62B8,
+ 0x19A0, 0x62B9, 0x05DB, 0x62BB, 0x199D, 0x62BC, 0x05E5, 0x62BD, 0x05E4,
+ 0x62BE, 0x1996, 0x62BF, 0x05D9, 0x62C2, 0x05DA, 0x62C4, 0x05D8, 0x62C6,
+ 0x05F0, 0x62C7, 0x05E8, 0x62C8, 0x05E2, 0x62C9, 0x05D6, 0x62CA, 0x1999,
+ 0x62CB, 0x05E1, 0x62CC, 0x05D7, 0x62CD, 0x05E9, 0x62CE, 0x05F2, 0x62CF,
+ 0x1AEE, 0x62D0, 0x05E6, 0x62D1, 0x1995, 0x62D2, 0x05DC, 0x62D3, 0x05DF,
+ 0x62D4, 0x05E0, 0x62D6, 0x05EE, 0x62D7, 0x05EF, 0x62D8, 0x05ED, 0x62D9,
+ 0x05E7, 0x62DA, 0x05EB, 0x62DB, 0x05DD, 0x62DC, 0x0730, 0x62EB, 0x1AF4,
+ 0x62EC, 0x073C, 0x62ED, 0x0734, 0x62EE, 0x0736, 0x62EF, 0x073B, 0x62F0,
+ 0x1B00, 0x62F1, 0x0739, 0x62F2, 0x1CA2, 0x62F3, 0x08C3, 0x62F4, 0x073E,
+ 0x62F5, 0x1AF1, 0x62F6, 0x1AF9, 0x62F7, 0x073A, 0x62F8, 0x1AF8, 0x62F9,
+ 0x1AF5, 0x62FA, 0x1AFD, 0x62FB, 0x1AFF, 0x62FC, 0x0733, 0x62FD, 0x0737,
+ 0x62FE, 0x073D, 0x62FF, 0x08C5, 0x6300, 0x1AFA, 0x6301, 0x0735, 0x6302,
+ 0x0740, 0x6303, 0x1AF3, 0x6307, 0x0738, 0x6308, 0x08C4, 0x6309, 0x0732,
+ 0x630B, 0x1AF0, 0x630C, 0x1AF7, 0x630D, 0x1AEF, 0x630E, 0x1AF2, 0x630F,
+ 0x1AF6, 0x6310, 0x1CA3, 0x6311, 0x073F, 0x6313, 0x1AFB, 0x6314, 0x1AFC,
+ 0x6315, 0x1AFE, 0x6316, 0x0731, 0x6328, 0x08D3, 0x6329, 0x1CAF, 0x632A,
+ 0x08D1, 0x632B, 0x08D2, 0x632C, 0x1CA5, 0x632D, 0x1CB5, 0x632F, 0x08C8,
+ 0x6332, 0x1EED, 0x6333, 0x1CB7, 0x6334, 0x1CB1, 0x6336, 0x1CA8, 0x6338,
+ 0x1CBA, 0x6339, 0x1CAB, 0x633A, 0x08CE, 0x633B, 0x1F04, 0x633C, 0x1CAE,
+ 0x633D, 0x08D0, 0x633E, 0x08C7, 0x6340, 0x1CBC, 0x6341, 0x1CB0, 0x6342,
+ 0x08CA, 0x6343, 0x1CA9, 0x6344, 0x1CA6, 0x6345, 0x1CA7, 0x6346, 0x08CB,
+ 0x6347, 0x1CB6, 0x6348, 0x1CBD, 0x6349, 0x08CD, 0x634A, 0x1CAD, 0x634B,
+ 0x1CAC, 0x634C, 0x08D5, 0x634D, 0x08D4, 0x634E, 0x08C6, 0x634F, 0x08CC,
+ 0x6350, 0x08CF, 0x6351, 0x1CB9, 0x6354, 0x1CB3, 0x6355, 0x08C9, 0x6356,
+ 0x1CA4, 0x6357, 0x1CBB, 0x6358, 0x1CB2, 0x6359, 0x1CB4, 0x635A, 0x1CB8,
+ 0x6365, 0x1EEE, 0x6367, 0x0AA1, 0x6368, 0x0AB5, 0x6369, 0x0AB4, 0x636B,
+ 0x0AA9, 0x636D, 0x1F00, 0x636E, 0x1EFC, 0x636F, 0x1EF9, 0x6370, 0x1F0B,
+ 0x6371, 0x0AA4, 0x6372, 0x0A9C, 0x6375, 0x1EFE, 0x6376, 0x0C69, 0x6377,
+ 0x0AA0, 0x6378, 0x1F06, 0x637A, 0x0AB6, 0x637B, 0x0AB3, 0x637C, 0x1F02,
+ 0x637D, 0x1EF1, 0x6380, 0x0AB2, 0x6381, 0x1F08, 0x6382, 0x1EF0, 0x6383,
+ 0x0AA7, 0x6384, 0x0AAB, 0x6385, 0x1F07, 0x6387, 0x1EFA, 0x6388, 0x0AAC,
+ 0x6389, 0x0AA6, 0x638A, 0x1EEF, 0x638C, 0x0C5B, 0x638D, 0x1F0A, 0x638E,
+ 0x1EF8, 0x638F, 0x0AB1, 0x6390, 0x1EFB, 0x6391, 0x1F09, 0x6392, 0x0AB0,
+ 0x6394, 0x214C, 0x6396, 0x0A9D, 0x6397, 0x1EF6, 0x6398, 0x0AA2, 0x6399,
+ 0x0AAD, 0x639B, 0x0AA8, 0x639C, 0x1EFF, 0x639D, 0x1EF5, 0x639E, 0x1EF3,
+ 0x639F, 0x1F05, 0x63A0, 0x0A9A, 0x63A1, 0x0AAE, 0x63A2, 0x0A9E, 0x63A3,
+ 0x0C5A, 0x63A4, 0x1F03, 0x63A5, 0x0A9F, 0x63A7, 0x0A9B, 0x63A8, 0x0AAA,
+ 0x63A9, 0x0AA5, 0x63AA, 0x0AA3, 0x63AB, 0x1EF7, 0x63AC, 0x0AAF, 0x63AD,
+ 0x1EF4, 0x63AE, 0x1F01, 0x63AF, 0x1EFD, 0x63B0, 0x214E, 0x63B1, 0x214D,
+ 0x63BD, 0x1EF2, 0x63BE, 0x215E, 0x63C0, 0x0C5D, 0x63C2, 0x2164, 0x63C3,
+ 0x2153, 0x63C4, 0x2161, 0x63C5, 0x23E6, 0x63C6, 0x0C60, 0x63C7, 0x2165,
+ 0x63C8, 0x2168, 0x63C9, 0x0C5F, 0x63CA, 0x2156, 0x63CB, 0x2167, 0x63CC,
+ 0x2166, 0x63CD, 0x0C61, 0x63CE, 0x214F, 0x63CF, 0x0C5C, 0x63D0, 0x0C64,
+ 0x63D2, 0x0C62, 0x63D3, 0x2163, 0x63D5, 0x2159, 0x63D6, 0x0C66, 0x63D7,
+ 0x216A, 0x63D8, 0x2162, 0x63D9, 0x216B, 0x63DA, 0x0C6E, 0x63DB, 0x0C6C,
+ 0x63DC, 0x2160, 0x63DD, 0x215F, 0x63DF, 0x215D, 0x63E0, 0x2157, 0x63E1,
+ 0x0C65, 0x63E3, 0x0C63, 0x63E4, 0x1CAA, 0x63E5, 0x2150, 0x63E7, 0x2404,
+ 0x63E8, 0x2151, 0x63E9, 0x0C5E, 0x63EA, 0x0C6B, 0x63EB, 0x23E8, 0x63ED,
+ 0x0C67, 0x63EE, 0x0C68, 0x63EF, 0x2152, 0x63F0, 0x2169, 0x63F1, 0x23E7,
+ 0x63F2, 0x215A, 0x63F3, 0x2155, 0x63F4, 0x0C6A, 0x63F5, 0x215B, 0x63F6,
+ 0x2158, 0x63F9, 0x0C6F, 0x6406, 0x0E2A, 0x6409, 0x23EB, 0x640A, 0x23FE,
+ 0x640B, 0x2403, 0x640C, 0x23F7, 0x640D, 0x0E26, 0x640E, 0x2408, 0x640F,
+ 0x0E23, 0x6410, 0x23E9, 0x6412, 0x23EA, 0x6413, 0x0E1C, 0x6414, 0x0E25,
+ 0x6415, 0x23F1, 0x6416, 0x0E28, 0x6417, 0x0E29, 0x6418, 0x23F2, 0x641A,
+ 0x23FF, 0x641B, 0x2405, 0x641C, 0x0E24, 0x641E, 0x0E1E, 0x641F, 0x23F0,
+ 0x6420, 0x23EC, 0x6421, 0x2407, 0x6422, 0x23F5, 0x6423, 0x23F6, 0x6424,
+ 0x23ED, 0x6425, 0x2401, 0x6426, 0x23F8, 0x6427, 0x2402, 0x6428, 0x23FA,
+ 0x642A, 0x0E1F, 0x642B, 0x2699, 0x642C, 0x0E22, 0x642D, 0x0E20, 0x642E,
+ 0x2406, 0x642F, 0x23FD, 0x6430, 0x23F9, 0x6433, 0x23EE, 0x6434, 0x0FE4,
+ 0x6435, 0x23FC, 0x6436, 0x0E27, 0x6437, 0x23F4, 0x6439, 0x23F3, 0x643D,
+ 0x0E21, 0x643E, 0x0E1D, 0x643F, 0x26AE, 0x6440, 0x2400, 0x6441, 0x23FB,
+ 0x6443, 0x23EF, 0x644B, 0x26A9, 0x644D, 0x269A, 0x644E, 0x26A5, 0x6450,
+ 0x26AC, 0x6451, 0x0FE2, 0x6452, 0x0C6D, 0x6453, 0x26AA, 0x6454, 0x0FDD,
+ 0x6458, 0x0FDC, 0x6459, 0x26B1, 0x645B, 0x269B, 0x645C, 0x26A8, 0x645D,
+ 0x269C, 0x645E, 0x26A7, 0x645F, 0x0FE0, 0x6460, 0x26AB, 0x6461, 0x215C,
+ 0x6465, 0x26B2, 0x6466, 0x26A3, 0x6467, 0x0FE3, 0x6468, 0x28EE, 0x6469,
+ 0x1159, 0x646B, 0x26B0, 0x646C, 0x26AF, 0x646D, 0x0FE5, 0x646E, 0x28E1,
+ 0x646F, 0x115A, 0x6470, 0x28E2, 0x6472, 0x269F, 0x6473, 0x26A0, 0x6474,
+ 0x269D, 0x6475, 0x26A2, 0x6476, 0x269E, 0x6477, 0x26B3, 0x6478, 0x0FDF,
+ 0x6479, 0x115B, 0x647A, 0x0FE1, 0x647B, 0x0FE6, 0x647D, 0x26A1, 0x647F,
+ 0x26AD, 0x6482, 0x26A6, 0x6485, 0x28E5, 0x6487, 0x0FDB, 0x6488, 0x115E,
+ 0x6489, 0x2B54, 0x648A, 0x28EA, 0x648B, 0x28E9, 0x648C, 0x28EB, 0x648F,
+ 0x28E8, 0x6490, 0x115F, 0x6492, 0x1165, 0x6493, 0x1162, 0x6495, 0x1163,
+ 0x6496, 0x28E3, 0x6497, 0x28E6, 0x6498, 0x28F0, 0x6499, 0x116B, 0x649A,
+ 0x1169, 0x649C, 0x28E7, 0x649D, 0x2154, 0x649E, 0x115C, 0x649F, 0x28ED,
+ 0x64A0, 0x28E4, 0x64A2, 0x116C, 0x64A3, 0x28EC, 0x64A4, 0x0FDE, 0x64A5,
+ 0x1161, 0x64A6, 0x26A4, 0x64A9, 0x1164, 0x64AB, 0x1168, 0x64AC, 0x116A,
+ 0x64AD, 0x1167, 0x64AE, 0x1166, 0x64B0, 0x1160, 0x64B1, 0x28EF, 0x64B2,
+ 0x115D, 0x64B3, 0x116D, 0x64BB, 0x12BB, 0x64BC, 0x12BC, 0x64BD, 0x2B53,
+ 0x64BE, 0x12C5, 0x64BF, 0x12C2, 0x64C1, 0x12B9, 0x64C2, 0x12C0, 0x64C3,
+ 0x2B55, 0x64C4, 0x12BE, 0x64C5, 0x12B8, 0x64C7, 0x12BF, 0x64C9, 0x2B52,
+ 0x64CA, 0x13D8, 0x64CB, 0x12BA, 0x64CD, 0x12C1, 0x64CE, 0x13D7, 0x64CF,
+ 0x2B51, 0x64D0, 0x2B50, 0x64D2, 0x12C3, 0x64D4, 0x12C4, 0x64D6, 0x2B4F,
+ 0x64D7, 0x2B4E, 0x64D8, 0x13D9, 0x64D9, 0x2B58, 0x64DA, 0x12BD, 0x64DB,
+ 0x2B56, 0x64E0, 0x13DA, 0x64E2, 0x13DF, 0x64E3, 0x2D6A, 0x64E4, 0x2D6C,
+ 0x64E6, 0x13DC, 0x64E8, 0x2D6D, 0x64E9, 0x2D69, 0x64EB, 0x2D6B, 0x64EC,
+ 0x13DD, 0x64ED, 0x13E0, 0x64EF, 0x2D68, 0x64F0, 0x13DB, 0x64F1, 0x13DE,
+ 0x64F2, 0x14D3, 0x64F3, 0x2B57, 0x64F4, 0x14D2, 0x64F7, 0x14D8, 0x64F8,
+ 0x2F2B, 0x64FA, 0x14D6, 0x64FB, 0x14D7, 0x64FC, 0x2F2E, 0x64FD, 0x2F2A,
+ 0x64FE, 0x14D4, 0x64FF, 0x2F28, 0x6500, 0x1582, 0x6501, 0x2F2C, 0x6503,
+ 0x2F2D, 0x6504, 0x2F29, 0x6506, 0x14D5, 0x6507, 0x3090, 0x6509, 0x3093,
+ 0x650C, 0x3094, 0x650D, 0x3092, 0x650E, 0x3095, 0x650F, 0x1583, 0x6510,
+ 0x3091, 0x6513, 0x31D7, 0x6514, 0x1617, 0x6515, 0x31D6, 0x6516, 0x31D5,
+ 0x6517, 0x31D4, 0x6518, 0x1616, 0x6519, 0x1618, 0x651B, 0x32D2, 0x651C,
+ 0x1673, 0x651D, 0x1672, 0x6520, 0x3382, 0x6521, 0x3381, 0x6522, 0x3384,
+ 0x6523, 0x16F9, 0x6524, 0x16C5, 0x6525, 0x341B, 0x6526, 0x3383, 0x6529,
+ 0x341A, 0x652A, 0x16FB, 0x652B, 0x16FA, 0x652C, 0x1721, 0x652D, 0x3484,
+ 0x652E, 0x34CA, 0x652F, 0x02D5, 0x6532, 0x216C, 0x6533, 0x2B59, 0x6534,
+ 0x022C, 0x6536, 0x03D7, 0x6537, 0x17F6, 0x6538, 0x04B9, 0x6539, 0x04B7,
+ 0x653B, 0x04B8, 0x653D, 0x19A1, 0x653E, 0x05F3, 0x653F, 0x0741, 0x6541,
+ 0x1B01, 0x6543, 0x1B02, 0x6545, 0x0742, 0x6546, 0x1CBF, 0x6548, 0x08D6,
+ 0x6549, 0x08D7, 0x654A, 0x1CBE, 0x654F, 0x0ABD, 0x6551, 0x0AB9, 0x6553,
+ 0x1F0C, 0x6554, 0x0AC0, 0x6555, 0x0ABF, 0x6556, 0x0AB8, 0x6557, 0x0ABB,
+ 0x6558, 0x0ABE, 0x6559, 0x0ABA, 0x655C, 0x2170, 0x655D, 0x0AB7, 0x655E,
+ 0x0C70, 0x6562, 0x0C72, 0x6563, 0x0C73, 0x6564, 0x216F, 0x6565, 0x2172,
+ 0x6566, 0x0C71, 0x6567, 0x216D, 0x6568, 0x2171, 0x656A, 0x216E, 0x656C,
+ 0x0E2B, 0x656F, 0x2409, 0x6572, 0x0FE7, 0x6573, 0x26B4, 0x6574, 0x12C6,
+ 0x6575, 0x116E, 0x6576, 0x28F1, 0x6577, 0x116F, 0x6578, 0x1170, 0x6579,
+ 0x28F3, 0x657A, 0x28F2, 0x657B, 0x28F4, 0x657C, 0x2B5B, 0x657F, 0x2B5A,
+ 0x6580, 0x2D6F, 0x6581, 0x2D6E, 0x6582, 0x13E1, 0x6583, 0x13E2, 0x6584,
+ 0x3096, 0x6587, 0x02D6, 0x658C, 0x2173, 0x6590, 0x0C75, 0x6591, 0x0C74,
+ 0x6592, 0x240A, 0x6594, 0x2F2F, 0x6595, 0x1674, 0x6596, 0x341C, 0x6597,
+ 0x02D7, 0x6599, 0x08D8, 0x659B, 0x0AC2, 0x659C, 0x0AC1, 0x659D, 0x2174,
+ 0x659E, 0x2175, 0x659F, 0x0E2C, 0x65A0, 0x26B5, 0x65A1, 0x0FE8, 0x65A2,
+ 0x2B5C, 0x65A4, 0x02D8, 0x65A5, 0x0346, 0x65A7, 0x05F4, 0x65A8, 0x19A2,
+ 0x65AA, 0x1B03, 0x65AB, 0x0743, 0x65AC, 0x0AC3, 0x65AE, 0x2176, 0x65AF,
+ 0x0C76, 0x65B0, 0x0E2D, 0x65B2, 0x28F5, 0x65B3, 0x28F6, 0x65B6, 0x2D70,
+ 0x65B7, 0x14D9, 0x65B8, 0x34CB, 0x65B9, 0x02D9, 0x65BB, 0x19A3, 0x65BC,
+ 0x05F5, 0x65BD, 0x0744, 0x65BF, 0x1B04, 0x65C1, 0x08D9, 0x65C2, 0x1CC3,
+ 0x65C3, 0x1CC1, 0x65C4, 0x1CC2, 0x65C5, 0x08DA, 0x65C6, 0x1CC0, 0x65CB,
+ 0x0AC5, 0x65CC, 0x0AC6, 0x65CD, 0x1F0D, 0x65CE, 0x0AC7, 0x65CF, 0x0AC4,
+ 0x65D0, 0x2177, 0x65D2, 0x2178, 0x65D3, 0x240B, 0x65D6, 0x0FEA, 0x65D7,
+ 0x0FE9, 0x65DA, 0x2D71, 0x65DB, 0x2F30, 0x65DD, 0x3098, 0x65DE, 0x3097,
+ 0x65DF, 0x31D8, 0x65E0, 0x022D, 0x65E1, 0x1789, 0x65E2, 0x0745, 0x65E5,
+ 0x02DA, 0x65E6, 0x0347, 0x65E8, 0x03D9, 0x65E9, 0x03D8, 0x65EC, 0x03DA,
+ 0x65ED, 0x03DB, 0x65EE, 0x17F8, 0x65EF, 0x17F7, 0x65F0, 0x189E, 0x65F1,
+ 0x04BA, 0x65F2, 0x18A1, 0x65F3, 0x18A0, 0x65F4, 0x189F, 0x65F5, 0x18A2,
+ 0x65FA, 0x05F6, 0x65FB, 0x19A9, 0x65FC, 0x19A5, 0x65FD, 0x19AE, 0x6600,
+ 0x05FD, 0x6602, 0x05FB, 0x6603, 0x19AA, 0x6604, 0x19A6, 0x6605, 0x19AD,
+ 0x6606, 0x05FA, 0x6607, 0x0601, 0x6608, 0x19A8, 0x6609, 0x19A4, 0x660A,
+ 0x0600, 0x660B, 0x19AB, 0x660C, 0x05F9, 0x660D, 0x19AC, 0x660E, 0x05FC,
+ 0x660F, 0x05FE, 0x6610, 0x19B0, 0x6611, 0x19AF, 0x6612, 0x19A7, 0x6613,
+ 0x05F8, 0x6614, 0x05F7, 0x6615, 0x05FF, 0x661C, 0x1B09, 0x661D, 0x1B0F,
+ 0x661F, 0x074B, 0x6620, 0x0748, 0x6621, 0x1B06, 0x6622, 0x1B0B, 0x6624,
+ 0x074E, 0x6625, 0x0746, 0x6626, 0x1B0A, 0x6627, 0x0749, 0x6628, 0x074C,
+ 0x662B, 0x1B0D, 0x662D, 0x0747, 0x662E, 0x1B12, 0x662F, 0x074A, 0x6631,
+ 0x074D, 0x6632, 0x1B07, 0x6633, 0x1B0C, 0x6634, 0x1B10, 0x6635, 0x1B08,
+ 0x6636, 0x1B05, 0x6639, 0x1B11, 0x663A, 0x1B0E, 0x6641, 0x08E2, 0x6642,
+ 0x08DB, 0x6643, 0x08DE, 0x6645, 0x08E1, 0x6647, 0x1CC6, 0x6649, 0x08DC,
+ 0x664A, 0x1CC4, 0x664C, 0x08E0, 0x664F, 0x08DD, 0x6651, 0x1CC7, 0x6652,
+ 0x08DF, 0x6659, 0x1F11, 0x665A, 0x0AC9, 0x665B, 0x1F10, 0x665C, 0x1F12,
+ 0x665D, 0x0AC8, 0x665E, 0x0ACD, 0x665F, 0x1CC5, 0x6661, 0x1F0F, 0x6662,
+ 0x1F13, 0x6664, 0x0ACA, 0x6665, 0x1F0E, 0x6666, 0x0ACC, 0x6668, 0x0ACB,
+ 0x666A, 0x217F, 0x666C, 0x217A, 0x666E, 0x0C77, 0x666F, 0x0C7B, 0x6670,
+ 0x0C78, 0x6671, 0x217D, 0x6672, 0x2180, 0x6674, 0x0C79, 0x6676, 0x0C7A,
+ 0x6677, 0x0C7F, 0x6678, 0x2414, 0x6679, 0x217E, 0x667A, 0x0C7D, 0x667B,
+ 0x217B, 0x667C, 0x2179, 0x667E, 0x0C7E, 0x6680, 0x217C, 0x6684, 0x0E33,
+ 0x6686, 0x240C, 0x6687, 0x0E30, 0x6688, 0x0E31, 0x6689, 0x0E2F, 0x668A,
+ 0x2411, 0x668B, 0x2410, 0x668C, 0x240D, 0x668D, 0x0E35, 0x6690, 0x240F,
+ 0x6691, 0x0C7C, 0x6694, 0x2413, 0x6695, 0x240E, 0x6696, 0x0E32, 0x6697,
+ 0x0E2E, 0x6698, 0x0E34, 0x6699, 0x2412, 0x669D, 0x0FED, 0x669F, 0x26B8,
+ 0x66A0, 0x26B7, 0x66A1, 0x26B6, 0x66A2, 0x0FEB, 0x66A8, 0x0FEC, 0x66A9,
+ 0x28F9, 0x66AA, 0x28FC, 0x66AB, 0x1172, 0x66AE, 0x1171, 0x66AF, 0x28FD,
+ 0x66B0, 0x28F8, 0x66B1, 0x1174, 0x66B2, 0x28FA, 0x66B4, 0x1173, 0x66B5,
+ 0x28F7, 0x66B7, 0x28FB, 0x66B8, 0x12CC, 0x66B9, 0x12C9, 0x66BA, 0x2B65,
+ 0x66BB, 0x2B64, 0x66BD, 0x2B63, 0x66BE, 0x2B5E, 0x66C0, 0x2B5F, 0x66C4,
+ 0x12CA, 0x66C6, 0x12C7, 0x66C7, 0x12CB, 0x66C8, 0x2B5D, 0x66C9, 0x12C8,
+ 0x66CA, 0x2B60, 0x66CB, 0x2B61, 0x66CC, 0x2B66, 0x66CF, 0x2B62, 0x66D2,
+ 0x2D72, 0x66D6, 0x13E4, 0x66D8, 0x2F33, 0x66D9, 0x13E3, 0x66DA, 0x2F31,
+ 0x66DB, 0x2F32, 0x66DC, 0x14DA, 0x66DD, 0x1585, 0x66DE, 0x3099, 0x66E0,
+ 0x1584, 0x66E3, 0x31DA, 0x66E4, 0x31DB, 0x66E6, 0x1619, 0x66E8, 0x31D9,
+ 0x66E9, 0x1675, 0x66EB, 0x341D, 0x66EC, 0x16FC, 0x66ED, 0x3485, 0x66EE,
+ 0x3486, 0x66F0, 0x02DB, 0x66F2, 0x03DC, 0x66F3, 0x03DD, 0x66F4, 0x04BB,
+ 0x66F6, 0x19B1, 0x66F7, 0x074F, 0x66F8, 0x08E3, 0x66F9, 0x0ACE, 0x66FC,
+ 0x0A1F, 0x66FE, 0x0C80, 0x66FF, 0x0C81, 0x6700, 0x0BF0, 0x6701, 0x2181,
+ 0x6703, 0x0E36, 0x6704, 0x26BA, 0x6705, 0x26B9, 0x6708, 0x02DC, 0x6709,
+ 0x03DE, 0x670A, 0x19B2, 0x670B, 0x0603, 0x670D, 0x0602, 0x670F, 0x1B13,
+ 0x6710, 0x1B14, 0x6712, 0x1CC8, 0x6713, 0x1CC9, 0x6714, 0x08E4, 0x6715,
+ 0x08E5, 0x6717, 0x08E6, 0x6718, 0x1F14, 0x671B, 0x0AD0, 0x671D, 0x0C83,
+ 0x671F, 0x0C82, 0x6720, 0x2415, 0x6721, 0x2522, 0x6722, 0x26BB, 0x6723,
+ 0x2B67, 0x6726, 0x14DB, 0x6727, 0x161A, 0x6728, 0x02DD, 0x672A, 0x034A,
+ 0x672B, 0x034B, 0x672C, 0x0349, 0x672D, 0x034C, 0x672E, 0x0348, 0x6731,
+ 0x03E1, 0x6733, 0x1800, 0x6734, 0x03E0, 0x6735, 0x03E2, 0x6738, 0x17FB,
+ 0x6739, 0x17FA, 0x673A, 0x17FD, 0x673B, 0x17FC, 0x673C, 0x17FF, 0x673D,
+ 0x03DF, 0x673E, 0x17F9, 0x673F, 0x17FE, 0x6745, 0x18A3, 0x6746, 0x04C5,
+ 0x6747, 0x18A4, 0x6748, 0x18A8, 0x6749, 0x04C4, 0x674B, 0x18AC, 0x674C,
+ 0x18A7, 0x674D, 0x18AA, 0x674E, 0x04BD, 0x674F, 0x04BE, 0x6750, 0x04BF,
+ 0x6751, 0x04C0, 0x6753, 0x04C7, 0x6755, 0x18A6, 0x6756, 0x04C2, 0x6757,
+ 0x04C8, 0x6759, 0x18A5, 0x675A, 0x18AB, 0x675C, 0x04C1, 0x675D, 0x18A9,
+ 0x675E, 0x04C3, 0x675F, 0x04BC, 0x6760, 0x04C6, 0x676A, 0x0618, 0x676C,
+ 0x19B4, 0x676D, 0x0604, 0x676F, 0x060E, 0x6770, 0x060F, 0x6771, 0x0607,
+ 0x6772, 0x0619, 0x6773, 0x0609, 0x6774, 0x19BC, 0x6775, 0x0614, 0x6776,
+ 0x19B7, 0x6777, 0x060A, 0x6778, 0x19C6, 0x6779, 0x19C7, 0x677A, 0x19BF,
+ 0x677B, 0x19B8, 0x677C, 0x0617, 0x677D, 0x19C4, 0x677E, 0x0612, 0x677F,
+ 0x0610, 0x6781, 0x19C5, 0x6783, 0x19C3, 0x6784, 0x19BB, 0x6785, 0x19B3,
+ 0x6786, 0x19BA, 0x6787, 0x060B, 0x6789, 0x0611, 0x678B, 0x0605, 0x678C,
+ 0x19BE, 0x678D, 0x19BD, 0x678E, 0x19B5, 0x6790, 0x0613, 0x6791, 0x19C1,
+ 0x6792, 0x19B6, 0x6793, 0x0616, 0x6794, 0x19C8, 0x6795, 0x0606, 0x6797,
+ 0x060D, 0x6798, 0x19B9, 0x6799, 0x19C2, 0x679A, 0x0615, 0x679C, 0x0608,
+ 0x679D, 0x060C, 0x679F, 0x19C0, 0x67AE, 0x1B34, 0x67AF, 0x0757, 0x67B0,
+ 0x0764, 0x67B2, 0x1B2F, 0x67B3, 0x1B25, 0x67B4, 0x075D, 0x67B5, 0x1B23,
+ 0x67B6, 0x0756, 0x67B7, 0x1B1E, 0x67B8, 0x0760, 0x67B9, 0x1B2B, 0x67BA,
+ 0x1B18, 0x67BB, 0x1B1A, 0x67C0, 0x1B1D, 0x67C1, 0x1B15, 0x67C2, 0x1B2A,
+ 0x67C3, 0x1B3A, 0x67C4, 0x075B, 0x67C5, 0x1B1F, 0x67C6, 0x1B31, 0x67C8,
+ 0x1B17, 0x67C9, 0x1B38, 0x67CA, 0x1B39, 0x67CB, 0x1B3C, 0x67CC, 0x1B33,
+ 0x67CD, 0x1B24, 0x67CE, 0x1B2C, 0x67CF, 0x0761, 0x67D0, 0x0754, 0x67D1,
+ 0x075C, 0x67D2, 0x0768, 0x67D3, 0x0751, 0x67D4, 0x0753, 0x67D8, 0x1B1C,
+ 0x67D9, 0x0765, 0x67DA, 0x075E, 0x67DB, 0x1B36, 0x67DC, 0x1B19, 0x67DD,
+ 0x0767, 0x67DE, 0x0762, 0x67DF, 0x1B22, 0x67E2, 0x0766, 0x67E3, 0x1B29,
+ 0x67E4, 0x1B21, 0x67E5, 0x075F, 0x67E6, 0x1B35, 0x67E7, 0x1B2D, 0x67E9,
+ 0x0759, 0x67EA, 0x1B3B, 0x67EB, 0x1B20, 0x67EC, 0x0755, 0x67ED, 0x1B32,
+ 0x67EE, 0x1B28, 0x67EF, 0x075A, 0x67F0, 0x1B2E, 0x67F1, 0x0752, 0x67F2,
+ 0x1B16, 0x67F3, 0x0763, 0x67F4, 0x08F5, 0x67F5, 0x0758, 0x67F6, 0x1B27,
+ 0x67F7, 0x1B26, 0x67F8, 0x1B1B, 0x67FA, 0x1B37, 0x67FC, 0x1B30, 0x67FF,
+ 0x0750, 0x6812, 0x1CDD, 0x6813, 0x08FC, 0x6814, 0x1CDE, 0x6816, 0x1CD2,
+ 0x6817, 0x08F1, 0x6818, 0x08FD, 0x681A, 0x1CCB, 0x681C, 0x1CD4, 0x681D,
+ 0x1CDC, 0x681F, 0x1CCA, 0x6820, 0x1CE5, 0x6821, 0x08E7, 0x6825, 0x1CE4,
+ 0x6826, 0x1CDF, 0x6828, 0x1CE0, 0x6829, 0x08EF, 0x682A, 0x08FA, 0x682B,
+ 0x1CD6, 0x682D, 0x1CD7, 0x682E, 0x1CE1, 0x682F, 0x1CD8, 0x6831, 0x1CD3,
+ 0x6832, 0x1CCD, 0x6833, 0x1CCE, 0x6834, 0x1CDB, 0x6835, 0x1CD5, 0x6838,
+ 0x08E8, 0x6839, 0x08EC, 0x683A, 0x1CE3, 0x683B, 0x1CCF, 0x683C, 0x08F8,
+ 0x683D, 0x08F4, 0x6840, 0x08F7, 0x6841, 0x08FE, 0x6842, 0x08ED, 0x6843,
+ 0x08F9, 0x6844, 0x1CDA, 0x6845, 0x08FB, 0x6846, 0x08EA, 0x6848, 0x08E9,
+ 0x6849, 0x1CCC, 0x684B, 0x1CD0, 0x684C, 0x08F2, 0x684D, 0x1CE2, 0x684E,
+ 0x1CD9, 0x684F, 0x1CD1, 0x6850, 0x08F6, 0x6851, 0x08F3, 0x6853, 0x08EB,
+ 0x6854, 0x08EE, 0x686B, 0x1F29, 0x686D, 0x1F19, 0x686E, 0x1F1A, 0x686F,
+ 0x1F1E, 0x6871, 0x1F2D, 0x6872, 0x1F2A, 0x6874, 0x1F23, 0x6875, 0x1F22,
+ 0x6876, 0x0AD7, 0x6877, 0x1F26, 0x6878, 0x1F35, 0x6879, 0x1F15, 0x687B,
+ 0x1F36, 0x687C, 0x1F28, 0x687D, 0x1F3A, 0x687E, 0x1F2E, 0x687F, 0x0AD6,
+ 0x6880, 0x1F2C, 0x6881, 0x0AD1, 0x6882, 0x0AE6, 0x6883, 0x0ADC, 0x6885,
+ 0x0AE0, 0x6886, 0x0ADF, 0x6887, 0x1F16, 0x6889, 0x1F33, 0x688A, 0x1F39,
+ 0x688B, 0x1F31, 0x688C, 0x1F38, 0x688F, 0x1F25, 0x6890, 0x1F17, 0x6891,
+ 0x1F37, 0x6892, 0x1F27, 0x6893, 0x0AD4, 0x6894, 0x0AE1, 0x6896, 0x1F30,
+ 0x6897, 0x0ADA, 0x689B, 0x1F2F, 0x689C, 0x1F18, 0x689D, 0x0AE2, 0x689F,
+ 0x0AE4, 0x68A0, 0x1F32, 0x68A1, 0x0AE5, 0x68A2, 0x0AD3, 0x68A3, 0x1F1F,
+ 0x68A4, 0x1F34, 0x68A7, 0x0AD9, 0x68A8, 0x0AE3, 0x68A9, 0x1F21, 0x68AA,
+ 0x1F2B, 0x68AB, 0x1F1C, 0x68AC, 0x1F20, 0x68AD, 0x0ADE, 0x68AE, 0x1F1B,
+ 0x68AF, 0x0AD2, 0x68B0, 0x0ADB, 0x68B1, 0x0AD8, 0x68B2, 0x1F24, 0x68B3,
+ 0x08F0, 0x68B4, 0x2198, 0x68B5, 0x0AD5, 0x68C4, 0x0ADD, 0x68C6, 0x219B,
+ 0x68C7, 0x21B1, 0x68C8, 0x21A6, 0x68C9, 0x0C97, 0x68CB, 0x0C92, 0x68CC,
+ 0x2195, 0x68CD, 0x0C93, 0x68CE, 0x21A5, 0x68D0, 0x219E, 0x68D1, 0x21AB,
+ 0x68D2, 0x0C8F, 0x68D3, 0x2183, 0x68D4, 0x21AD, 0x68D5, 0x0C85, 0x68D6,
+ 0x218B, 0x68D7, 0x0C88, 0x68D8, 0x0C87, 0x68DA, 0x0C98, 0x68DC, 0x2185,
+ 0x68DD, 0x21A7, 0x68DE, 0x21A8, 0x68DF, 0x0C8A, 0x68E0, 0x0C86, 0x68E1,
+ 0x2193, 0x68E3, 0x0C91, 0x68E4, 0x218E, 0x68E6, 0x21A9, 0x68E7, 0x0C8D,
+ 0x68E8, 0x21A1, 0x68E9, 0x21AE, 0x68EA, 0x2188, 0x68EB, 0x218D, 0x68EC,
+ 0x2187, 0x68EE, 0x0C8C, 0x68EF, 0x219A, 0x68F0, 0x242B, 0x68F1, 0x2189,
+ 0x68F2, 0x0C90, 0x68F3, 0x2192, 0x68F4, 0x21AA, 0x68F5, 0x0C8B, 0x68F6,
+ 0x218F, 0x68F7, 0x218C, 0x68F8, 0x219D, 0x68F9, 0x0C8E, 0x68FA, 0x0C84,
+ 0x68FB, 0x0C9A, 0x68FC, 0x21A0, 0x68FD, 0x219F, 0x6904, 0x2184, 0x6905,
+ 0x0C89, 0x6906, 0x21AC, 0x6907, 0x2194, 0x6908, 0x2196, 0x690A, 0x21A3,
+ 0x690B, 0x21A2, 0x690C, 0x2182, 0x690D, 0x0C94, 0x690E, 0x0C96, 0x690F,
+ 0x218A, 0x6910, 0x2191, 0x6911, 0x2199, 0x6912, 0x0C95, 0x6913, 0x2190,
+ 0x6914, 0x219C, 0x6915, 0x21AF, 0x6917, 0x21A4, 0x6925, 0x21B0, 0x692A,
+ 0x2186, 0x692F, 0x243F, 0x6930, 0x0E3E, 0x6932, 0x243D, 0x6933, 0x2428,
+ 0x6934, 0x242D, 0x6935, 0x2426, 0x6937, 0x2439, 0x6938, 0x2418, 0x6939,
+ 0x241F, 0x693B, 0x2437, 0x693C, 0x2441, 0x693D, 0x2429, 0x693F, 0x241C,
+ 0x6940, 0x242F, 0x6941, 0x2434, 0x6942, 0x2420, 0x6944, 0x2431, 0x6945,
+ 0x241D, 0x6948, 0x2424, 0x6949, 0x2425, 0x694A, 0x0E40, 0x694B, 0x2438,
+ 0x694C, 0x2436, 0x694E, 0x2419, 0x694F, 0x243B, 0x6951, 0x243C, 0x6952,
+ 0x243E, 0x6953, 0x0E44, 0x6954, 0x0E3C, 0x6956, 0x1F1D, 0x6957, 0x2421,
+ 0x6958, 0x2433, 0x6959, 0x2422, 0x695A, 0x0E39, 0x695B, 0x0E49, 0x695C,
+ 0x243A, 0x695D, 0x0E47, 0x695E, 0x0E43, 0x695F, 0x2417, 0x6960, 0x0E3B,
+ 0x6962, 0x241A, 0x6963, 0x0E48, 0x6965, 0x242A, 0x6966, 0x2416, 0x6968,
+ 0x0E41, 0x6969, 0x242E, 0x696A, 0x241E, 0x696B, 0x0E42, 0x696C, 0x2427,
+ 0x696D, 0x0E38, 0x696E, 0x0C99, 0x696F, 0x2430, 0x6970, 0x2197, 0x6971,
+ 0x241B, 0x6974, 0x2435, 0x6975, 0x0E3D, 0x6976, 0x2432, 0x6977, 0x0E3A,
+ 0x6978, 0x242C, 0x6979, 0x0E45, 0x697A, 0x2423, 0x697B, 0x2440, 0x6982,
+ 0x0E3F, 0x6983, 0x24AF, 0x6986, 0x0E46, 0x698D, 0x26C9, 0x698E, 0x26C7,
+ 0x6990, 0x26DD, 0x6991, 0x26C5, 0x6993, 0x26D7, 0x6994, 0x0E37, 0x6995,
+ 0x0FF0, 0x6996, 0x26C1, 0x6997, 0x26DC, 0x6999, 0x26C6, 0x699A, 0x26D4,
+ 0x699B, 0x0FF5, 0x699C, 0x0FEE, 0x699E, 0x26DA, 0x69A0, 0x26BF, 0x69A1,
+ 0x26D9, 0x69A3, 0x1000, 0x69A4, 0x26D0, 0x69A5, 0x26E0, 0x69A6, 0x0FFE,
+ 0x69A7, 0x26C8, 0x69A8, 0x0FEF, 0x69A9, 0x26CA, 0x69AA, 0x26D8, 0x69AB,
+ 0x0FF8, 0x69AC, 0x26C3, 0x69AD, 0x0FFC, 0x69AE, 0x0FF2, 0x69AF, 0x26CC,
+ 0x69B0, 0x26C2, 0x69B1, 0x26BC, 0x69B3, 0x26D6, 0x69B4, 0x0FF9, 0x69B5,
+ 0x26DF, 0x69B6, 0x26BD, 0x69B7, 0x0FF6, 0x69B9, 0x26D2, 0x69BB, 0x0FF7,
+ 0x69BC, 0x26C4, 0x69BD, 0x26CF, 0x69BE, 0x26CB, 0x69BF, 0x26CD, 0x69C1,
+ 0x0FF1, 0x69C2, 0x26DE, 0x69C3, 0x0FFF, 0x69C4, 0x26CE, 0x69C6, 0x26E1,
+ 0x69C9, 0x26BE, 0x69CA, 0x26D3, 0x69CB, 0x0FF4, 0x69CC, 0x0FFD, 0x69CD,
+ 0x0FFB, 0x69CE, 0x26C0, 0x69CF, 0x26D5, 0x69D0, 0x0FFA, 0x69D3, 0x0FF3,
+ 0x69D4, 0x26D1, 0x69D9, 0x26DB, 0x69E2, 0x2909, 0x69E4, 0x2905, 0x69E5,
+ 0x2901, 0x69E6, 0x2915, 0x69E7, 0x2912, 0x69E8, 0x1177, 0x69EB, 0x2919,
+ 0x69EC, 0x2908, 0x69ED, 0x1182, 0x69EE, 0x290F, 0x69F1, 0x2904, 0x69F2,
+ 0x290E, 0x69F3, 0x117F, 0x69F4, 0x2922, 0x69F6, 0x291F, 0x69F7, 0x2911,
+ 0x69F8, 0x2902, 0x69FB, 0x2916, 0x69FC, 0x2918, 0x69FD, 0x117B, 0x69FE,
+ 0x290C, 0x69FF, 0x2907, 0x6A00, 0x28FE, 0x6A01, 0x1178, 0x6A02, 0x1180,
+ 0x6A04, 0x291B, 0x6A05, 0x1181, 0x6A06, 0x28FF, 0x6A07, 0x2921, 0x6A08,
+ 0x2914, 0x6A09, 0x291A, 0x6A0A, 0x117E, 0x6A0D, 0x2917, 0x6A0F, 0x291E,
+ 0x6A11, 0x1183, 0x6A13, 0x117D, 0x6A14, 0x2910, 0x6A15, 0x2903, 0x6A16,
+ 0x2923, 0x6A17, 0x2900, 0x6A18, 0x291C, 0x6A19, 0x117A, 0x6A1B, 0x290A,
+ 0x6A1D, 0x290B, 0x6A1E, 0x1179, 0x6A1F, 0x1176, 0x6A20, 0x2906, 0x6A21,
+ 0x117C, 0x6A23, 0x1175, 0x6A25, 0x291D, 0x6A26, 0x2920, 0x6A27, 0x290D,
+ 0x6A28, 0x2B74, 0x6A32, 0x2B6C, 0x6A34, 0x2B68, 0x6A35, 0x12D9, 0x6A38,
+ 0x12CE, 0x6A39, 0x12D3, 0x6A3A, 0x12CF, 0x6A3B, 0x2B76, 0x6A3C, 0x2B81,
+ 0x6A3D, 0x12CD, 0x6A3E, 0x2B6E, 0x6A3F, 0x2B77, 0x6A40, 0x2913, 0x6A41,
+ 0x2B78, 0x6A44, 0x12D4, 0x6A46, 0x2B87, 0x6A47, 0x12D8, 0x6A48, 0x12DB,
+ 0x6A49, 0x2B6A, 0x6A4B, 0x12D7, 0x6A4D, 0x2B85, 0x6A4E, 0x2B86, 0x6A4F,
+ 0x2B7C, 0x6A50, 0x2B7B, 0x6A51, 0x2B73, 0x6A54, 0x2B7D, 0x6A55, 0x2B84,
+ 0x6A56, 0x2B83, 0x6A58, 0x12D2, 0x6A59, 0x12D0, 0x6A5A, 0x2B75, 0x6A5B,
+ 0x2B72, 0x6A5D, 0x2B6F, 0x6A5E, 0x2B82, 0x6A5F, 0x12DA, 0x6A60, 0x2B80,
+ 0x6A61, 0x12D6, 0x6A62, 0x12D5, 0x6A64, 0x2B7A, 0x6A66, 0x2B69, 0x6A67,
+ 0x2B6B, 0x6A68, 0x2B6D, 0x6A69, 0x2B7F, 0x6A6A, 0x2B79, 0x6A6B, 0x12D1,
+ 0x6A6D, 0x2B70, 0x6A6F, 0x2B7E, 0x6A76, 0x2B71, 0x6A7E, 0x13EC, 0x6A7F,
+ 0x2D84, 0x6A80, 0x13E5, 0x6A81, 0x2D75, 0x6A83, 0x2D80, 0x6A84, 0x13E7,
+ 0x6A85, 0x2D87, 0x6A87, 0x2D7C, 0x6A89, 0x2D77, 0x6A8C, 0x2D88, 0x6A8D,
+ 0x2D73, 0x6A8E, 0x2D7E, 0x6A90, 0x13EE, 0x6A91, 0x2D83, 0x6A92, 0x2D89,
+ 0x6A93, 0x2D7D, 0x6A94, 0x13E6, 0x6A95, 0x2D7F, 0x6A96, 0x2D74, 0x6A97,
+ 0x13ED, 0x6A9A, 0x2D86, 0x6A9B, 0x2D79, 0x6A9C, 0x13E9, 0x6A9E, 0x2D7B,
+ 0x6A9F, 0x2D78, 0x6AA0, 0x13EF, 0x6AA1, 0x2D7A, 0x6AA2, 0x13E8, 0x6AA3,
+ 0x13EB, 0x6AA4, 0x2D82, 0x6AA5, 0x2D76, 0x6AA6, 0x2D85, 0x6AA8, 0x2D81,
+ 0x6AAC, 0x14DD, 0x6AAD, 0x2F3E, 0x6AAE, 0x14E2, 0x6AAF, 0x14E3, 0x6AB3,
+ 0x14DC, 0x6AB4, 0x2F3D, 0x6AB6, 0x2F3A, 0x6AB7, 0x2F3B, 0x6AB8, 0x14E0,
+ 0x6AB9, 0x2F35, 0x6ABA, 0x2F39, 0x6ABB, 0x14DF, 0x6ABD, 0x2F36, 0x6AC2,
+ 0x14E1, 0x6AC3, 0x14DE, 0x6AC5, 0x2F34, 0x6AC6, 0x2F38, 0x6AC7, 0x2F3C,
+ 0x6ACB, 0x309F, 0x6ACC, 0x309C, 0x6ACD, 0x30A5, 0x6ACF, 0x30A4, 0x6AD0,
+ 0x30A2, 0x6AD1, 0x309D, 0x6AD3, 0x1589, 0x6AD9, 0x309E, 0x6ADA, 0x1588,
+ 0x6ADB, 0x13EA, 0x6ADC, 0x30A1, 0x6ADD, 0x1587, 0x6ADE, 0x30A6, 0x6ADF,
+ 0x30A0, 0x6AE0, 0x309B, 0x6AE1, 0x2F37, 0x6AE5, 0x1586, 0x6AE7, 0x309A,
+ 0x6AE8, 0x31DF, 0x6AEA, 0x31DE, 0x6AEB, 0x30A3, 0x6AEC, 0x161B, 0x6AEE,
+ 0x31E2, 0x6AEF, 0x31E3, 0x6AF0, 0x31DD, 0x6AF1, 0x31E1, 0x6AF3, 0x31DC,
+ 0x6AF8, 0x32D6, 0x6AF9, 0x31E0, 0x6AFA, 0x1678, 0x6AFB, 0x1676, 0x6AFC,
+ 0x32D4, 0x6B00, 0x32D7, 0x6B02, 0x32D3, 0x6B03, 0x32D5, 0x6B04, 0x1677,
+ 0x6B08, 0x3386, 0x6B09, 0x3387, 0x6B0A, 0x16C6, 0x6B0B, 0x3385, 0x6B0F,
+ 0x3420, 0x6B10, 0x16FD, 0x6B11, 0x341E, 0x6B12, 0x341F, 0x6B13, 0x3487,
+ 0x6B16, 0x1743, 0x6B17, 0x34CE, 0x6B18, 0x34CC, 0x6B19, 0x34CD, 0x6B1A,
+ 0x34CF, 0x6B1E, 0x3534, 0x6B20, 0x02DE, 0x6B21, 0x03E3, 0x6B23, 0x061A,
+ 0x6B25, 0x19C9, 0x6B28, 0x1B3D, 0x6B2C, 0x1CE6, 0x6B2D, 0x1CE8, 0x6B2F,
+ 0x1CE7, 0x6B31, 0x1CE9, 0x6B32, 0x0AE7, 0x6B33, 0x1F3C, 0x6B34, 0x1CEA,
+ 0x6B36, 0x1F3B, 0x6B37, 0x1F3D, 0x6B38, 0x1F3E, 0x6B39, 0x21B2, 0x6B3A,
+ 0x0C9C, 0x6B3B, 0x21B3, 0x6B3C, 0x21B5, 0x6B3D, 0x0C9D, 0x6B3E, 0x0C9B,
+ 0x6B3F, 0x21B4, 0x6B41, 0x2447, 0x6B42, 0x2445, 0x6B43, 0x2444, 0x6B45,
+ 0x2443, 0x6B46, 0x2442, 0x6B47, 0x0E4A, 0x6B48, 0x2446, 0x6B49, 0x1001,
+ 0x6B4A, 0x26E2, 0x6B4B, 0x26E4, 0x6B4C, 0x1002, 0x6B4D, 0x26E3, 0x6B4E,
+ 0x1185, 0x6B50, 0x1184, 0x6B51, 0x2924, 0x6B54, 0x2B89, 0x6B55, 0x2B88,
+ 0x6B56, 0x2B8A, 0x6B59, 0x12DC, 0x6B5B, 0x2D8A, 0x6B5C, 0x13F0, 0x6B5E,
+ 0x2F3F, 0x6B5F, 0x14E4, 0x6B60, 0x30A7, 0x6B61, 0x16C7, 0x6B62, 0x02DF,
+ 0x6B63, 0x034D, 0x6B64, 0x03E4, 0x6B65, 0x04C9, 0x6B66, 0x061B, 0x6B67,
+ 0x061C, 0x6B6A, 0x0769, 0x6B6D, 0x1CEB, 0x6B72, 0x0E4B, 0x6B76, 0x29A2,
+ 0x6B77, 0x12DD, 0x6B78, 0x14E5, 0x6B79, 0x02E0, 0x6B7B, 0x03E5, 0x6B7E,
+ 0x19CB, 0x6B7F, 0x061D, 0x6B80, 0x19CA, 0x6B82, 0x1B3E, 0x6B83, 0x076A,
+ 0x6B84, 0x1B3F, 0x6B86, 0x076B, 0x6B88, 0x1CED, 0x6B89, 0x0900, 0x6B8A,
+ 0x08FF, 0x6B8C, 0x1F43, 0x6B8D, 0x1F41, 0x6B8E, 0x1F42, 0x6B8F, 0x1F40,
+ 0x6B91, 0x1F3F, 0x6B94, 0x21B6, 0x6B95, 0x21B9, 0x6B96, 0x0C9F, 0x6B97,
+ 0x21B7, 0x6B98, 0x0C9E, 0x6B99, 0x21B8, 0x6B9B, 0x2448, 0x6B9E, 0x26E5,
+ 0x6B9F, 0x26E6, 0x6BA0, 0x26E7, 0x6BA2, 0x2927, 0x6BA3, 0x2926, 0x6BA4,
+ 0x1186, 0x6BA5, 0x2925, 0x6BA6, 0x2928, 0x6BA7, 0x2B8B, 0x6BAA, 0x2B8C,
+ 0x6BAB, 0x2B8D, 0x6BAD, 0x2D8B, 0x6BAE, 0x13F1, 0x6BAF, 0x14E6, 0x6BB0,
+ 0x30A8, 0x6BB2, 0x1679, 0x6BB3, 0x178A, 0x6BB5, 0x076C, 0x6BB6, 0x1B40,
+ 0x6BB7, 0x0901, 0x6BBA, 0x0AE8, 0x6BBC, 0x0CA0, 0x6BBD, 0x21BA, 0x6BBF,
+ 0x0E4D, 0x6BC0, 0x0E4C, 0x6BC3, 0x26E8, 0x6BC4, 0x26E9, 0x6BC5, 0x1187,
+ 0x6BC6, 0x1188, 0x6BC7, 0x2B8F, 0x6BC8, 0x2B8E, 0x6BC9, 0x2F40, 0x6BCA,
+ 0x3421, 0x6BCB, 0x02E1, 0x6BCC, 0x178B, 0x6BCD, 0x034E, 0x6BCF, 0x04CA,
+ 0x6BD0, 0x18AD, 0x6BD2, 0x076D, 0x6BD3, 0x0E4E, 0x6BD4, 0x02E2, 0x6BD6,
+ 0x1B41, 0x6BD7, 0x076E, 0x6BD8, 0x1B42, 0x6BDA, 0x13F2, 0x6BDB, 0x02E3,
+ 0x6BDE, 0x19CC, 0x6BE0, 0x1B43, 0x6BE2, 0x1CF2, 0x6BE3, 0x1CF1, 0x6BE4,
+ 0x1CEF, 0x6BE6, 0x1CEE, 0x6BE7, 0x1CF3, 0x6BE8, 0x1CF0, 0x6BEB, 0x0AE9,
+ 0x6BEC, 0x0AEA, 0x6BEF, 0x0CA1, 0x6BF0, 0x21BB, 0x6BF2, 0x21BC, 0x6BF3,
+ 0x21BD, 0x6BF7, 0x244C, 0x6BF8, 0x244D, 0x6BF9, 0x244B, 0x6BFB, 0x2449,
+ 0x6BFC, 0x244A, 0x6BFD, 0x0E4F, 0x6BFE, 0x26EA, 0x6BFF, 0x292B, 0x6C00,
+ 0x292A, 0x6C01, 0x2929, 0x6C02, 0x292C, 0x6C03, 0x2B91, 0x6C04, 0x2B90,
+ 0x6C05, 0x12DE, 0x6C06, 0x2B92, 0x6C08, 0x13F3, 0x6C09, 0x2D8C, 0x6C0B,
+ 0x2F41, 0x6C0C, 0x30A9, 0x6C0D, 0x3388, 0x6C0F, 0x02E4, 0x6C10, 0x0350,
+ 0x6C11, 0x034F, 0x6C13, 0x061E, 0x6C14, 0x178C, 0x6C15, 0x17AA, 0x6C16,
+ 0x03E6, 0x6C18, 0x1801, 0x6C19, 0x18AE, 0x6C1A, 0x18AF, 0x6C1B, 0x061F,
+ 0x6C1D, 0x19CD, 0x6C1F, 0x076F, 0x6C20, 0x1B44, 0x6C21, 0x1B45, 0x6C23,
+ 0x0902, 0x6C24, 0x0906, 0x6C25, 0x1CF4, 0x6C26, 0x0905, 0x6C27, 0x0903,
+ 0x6C28, 0x0904, 0x6C2A, 0x1F44, 0x6C2B, 0x0AEB, 0x6C2C, 0x0CA4, 0x6C2E,
+ 0x0CA2, 0x6C2F, 0x0CA3, 0x6C30, 0x21BE, 0x6C33, 0x1003, 0x6C34, 0x02E5,
+ 0x6C36, 0x17AB, 0x6C38, 0x0351, 0x6C3B, 0x17AE, 0x6C3E, 0x0354, 0x6C3F,
+ 0x17AD, 0x6C40, 0x0353, 0x6C41, 0x0352, 0x6C42, 0x04CB, 0x6C43, 0x17AC,
+ 0x6C46, 0x1802, 0x6C4A, 0x1806, 0x6C4B, 0x1808, 0x6C4C, 0x1809, 0x6C4D,
+ 0x03F0, 0x6C4E, 0x03F1, 0x6C4F, 0x1805, 0x6C50, 0x03EC, 0x6C52, 0x1803,
+ 0x6C54, 0x1807, 0x6C55, 0x03ED, 0x6C57, 0x03E8, 0x6C59, 0x03E9, 0x6C5B,
+ 0x03EF, 0x6C5C, 0x1804, 0x6C5D, 0x03E7, 0x6C5E, 0x04CC, 0x6C5F, 0x03EA,
+ 0x6C60, 0x03EB, 0x6C61, 0x03EE, 0x6C65, 0x18C0, 0x6C66, 0x18BE, 0x6C67,
+ 0x18B1, 0x6C68, 0x04D8, 0x6C69, 0x18B8, 0x6C6A, 0x04D3, 0x6C6B, 0x18B2,
+ 0x6C6D, 0x18BA, 0x6C6F, 0x18B7, 0x6C70, 0x04D6, 0x6C71, 0x18B6, 0x6C72,
+ 0x04DD, 0x6C73, 0x18BF, 0x6C74, 0x04DF, 0x6C76, 0x04E1, 0x6C78, 0x18B0,
+ 0x6C7A, 0x04D4, 0x6C7B, 0x18C1, 0x6C7D, 0x04DB, 0x6C7E, 0x04DE, 0x6C80,
+ 0x19E4, 0x6C81, 0x04CE, 0x6C82, 0x04E5, 0x6C83, 0x04DC, 0x6C84, 0x18B3,
+ 0x6C85, 0x04D1, 0x6C86, 0x04E0, 0x6C87, 0x18BB, 0x6C88, 0x04CF, 0x6C89,
+ 0x04D0, 0x6C8A, 0x19E2, 0x6C8B, 0x18B4, 0x6C8C, 0x04D7, 0x6C8D, 0x04E2,
+ 0x6C8E, 0x18C2, 0x6C8F, 0x18B5, 0x6C90, 0x04D5, 0x6C92, 0x04DA, 0x6C93,
+ 0x19CE, 0x6C94, 0x04E3, 0x6C95, 0x18BC, 0x6C96, 0x04D9, 0x6C98, 0x04E4,
+ 0x6C99, 0x04CD, 0x6C9A, 0x18B9, 0x6C9B, 0x04D2, 0x6C9C, 0x18BD, 0x6C9D,
+ 0x19E3, 0x6CAB, 0x062B, 0x6CAC, 0x063B, 0x6CAD, 0x19D5, 0x6CAE, 0x0632,
+ 0x6CB0, 0x19EA, 0x6CB1, 0x0623, 0x6CB3, 0x0626, 0x6CB4, 0x19E1, 0x6CB6,
+ 0x19D3, 0x6CB7, 0x19D7, 0x6CB8, 0x062E, 0x6CB9, 0x0630, 0x6CBA, 0x19DA,
+ 0x6CBB, 0x0637, 0x6CBC, 0x0629, 0x6CBD, 0x0627, 0x6CBE, 0x0628, 0x6CBF,
+ 0x0636, 0x6CC0, 0x19E6, 0x6CC1, 0x0631, 0x6CC2, 0x19D9, 0x6CC3, 0x19DB,
+ 0x6CC4, 0x062F, 0x6CC5, 0x0634, 0x6CC6, 0x19DC, 0x6CC7, 0x19E9, 0x6CC9,
+ 0x0770, 0x6CCA, 0x063A, 0x6CCC, 0x0624, 0x6CCD, 0x19E8, 0x6CCF, 0x19EC,
+ 0x6CD0, 0x19D8, 0x6CD1, 0x19EE, 0x6CD2, 0x19DF, 0x6CD3, 0x062D, 0x6CD4,
+ 0x19D4, 0x6CD5, 0x062C, 0x6CD6, 0x063E, 0x6CD7, 0x0633, 0x6CD9, 0x19D2,
+ 0x6CDA, 0x1B4E, 0x6CDB, 0x0639, 0x6CDC, 0x063D, 0x6CDD, 0x19E0, 0x6CDE,
+ 0x19E5, 0x6CE0, 0x063F, 0x6CE1, 0x0638, 0x6CE2, 0x062A, 0x6CE3, 0x0620,
+ 0x6CE5, 0x0625, 0x6CE7, 0x19D6, 0x6CE8, 0x0621, 0x6CE9, 0x19ED, 0x6CEB,
+ 0x19D0, 0x6CEC, 0x19CF, 0x6CED, 0x19DD, 0x6CEE, 0x19D1, 0x6CEF, 0x063C,
+ 0x6CF0, 0x0907, 0x6CF1, 0x0635, 0x6CF2, 0x19DE, 0x6CF3, 0x0622, 0x6CF5,
+ 0x077F, 0x6CF9, 0x19EB, 0x6D00, 0x1B55, 0x6D01, 0x1B58, 0x6D03, 0x1B5B,
+ 0x6D04, 0x1B50, 0x6D07, 0x1B5E, 0x6D08, 0x1B61, 0x6D09, 0x1B63, 0x6D0A,
+ 0x1B4D, 0x6D0B, 0x0771, 0x6D0C, 0x0776, 0x6D0D, 0x1CF9, 0x6D0E, 0x0786,
+ 0x6D0F, 0x1B5C, 0x6D10, 0x1B64, 0x6D11, 0x1B54, 0x6D12, 0x1B4C, 0x6D16,
+ 0x1D14, 0x6D17, 0x0779, 0x6D18, 0x1B59, 0x6D19, 0x1B51, 0x6D1A, 0x1B53,
+ 0x6D1B, 0x077E, 0x6D1D, 0x1B56, 0x6D1E, 0x0778, 0x6D1F, 0x1B49, 0x6D20,
+ 0x1B5F, 0x6D22, 0x1B62, 0x6D25, 0x0775, 0x6D27, 0x0781, 0x6D28, 0x1B46,
+ 0x6D29, 0x0783, 0x6D2A, 0x0773, 0x6D2B, 0x0787, 0x6D2C, 0x1B60, 0x6D2D,
+ 0x1B48, 0x6D2E, 0x0784, 0x6D2F, 0x1D0E, 0x6D30, 0x19E7, 0x6D31, 0x0777,
+ 0x6D32, 0x0772, 0x6D33, 0x1B4F, 0x6D34, 0x1B47, 0x6D35, 0x0785, 0x6D36,
+ 0x077D, 0x6D37, 0x1B5A, 0x6D38, 0x0782, 0x6D39, 0x0780, 0x6D3A, 0x1B52,
+ 0x6D3B, 0x077A, 0x6D3C, 0x1B4A, 0x6D3D, 0x077B, 0x6D3E, 0x077C, 0x6D3F,
+ 0x1B4B, 0x6D40, 0x1B5D, 0x6D41, 0x0774, 0x6D42, 0x1B57, 0x6D58, 0x1CFC,
+ 0x6D59, 0x090F, 0x6D5A, 0x0914, 0x6D5E, 0x1D05, 0x6D5F, 0x1D0B, 0x6D60,
+ 0x1D07, 0x6D61, 0x1CFA, 0x6D62, 0x1CFD, 0x6D63, 0x1CF6, 0x6D64, 0x1CF7,
+ 0x6D65, 0x091B, 0x6D66, 0x090C, 0x6D67, 0x1D06, 0x6D68, 0x1D0F, 0x6D69,
+ 0x0916, 0x6D6A, 0x0908, 0x6D6C, 0x0911, 0x6D6D, 0x1CFE, 0x6D6E, 0x0913,
+ 0x6D6F, 0x1CFF, 0x6D70, 0x1D09, 0x6D74, 0x0915, 0x6D75, 0x1D18, 0x6D76,
+ 0x1CF8, 0x6D77, 0x090E, 0x6D78, 0x090D, 0x6D79, 0x0919, 0x6D7A, 0x1CF5,
+ 0x6D7B, 0x1D16, 0x6D7C, 0x1D0A, 0x6D7D, 0x1D17, 0x6D7E, 0x1D11, 0x6D7F,
+ 0x1D03, 0x6D80, 0x1D12, 0x6D82, 0x1D0C, 0x6D83, 0x1D15, 0x6D84, 0x1D13,
+ 0x6D85, 0x091A, 0x6D86, 0x1D04, 0x6D87, 0x090B, 0x6D88, 0x090A, 0x6D89,
+ 0x0912, 0x6D8A, 0x0918, 0x6D8B, 0x1D10, 0x6D8C, 0x0917, 0x6D8D, 0x1D01,
+ 0x6D8E, 0x0AEC, 0x6D90, 0x1D19, 0x6D91, 0x1D00, 0x6D92, 0x1CFB, 0x6D93,
+ 0x0910, 0x6D94, 0x091C, 0x6D95, 0x0909, 0x6D97, 0x1D08, 0x6D98, 0x1D0D,
+ 0x6DAA, 0x0B0E, 0x6DAB, 0x1F46, 0x6DAC, 0x1F4A, 0x6DAE, 0x0AFB, 0x6DAF,
+ 0x0AF9, 0x6DB2, 0x0AF0, 0x6DB3, 0x1F48, 0x6DB4, 0x1F47, 0x6DB5, 0x0B04,
+ 0x6DB7, 0x1F4D, 0x6DB8, 0x0AFE, 0x6DBA, 0x1F5F, 0x6DBB, 0x1F6B, 0x6DBC,
+ 0x0AED, 0x6DBD, 0x1F5C, 0x6DBE, 0x1F55, 0x6DBF, 0x0B10, 0x6DC0, 0x1F45,
+ 0x6DC2, 0x1F61, 0x6DC4, 0x0B0D, 0x6DC5, 0x0B01, 0x6DC6, 0x0B0C, 0x6DC7,
+ 0x0AF7, 0x6DC8, 0x1F51, 0x6DC9, 0x1F63, 0x6DCA, 0x1F5B, 0x6DCB, 0x0AF8,
+ 0x6DCC, 0x0AF2, 0x6DCD, 0x1F69, 0x6DCF, 0x1F62, 0x6DD0, 0x1F64, 0x6DD1,
+ 0x0AFA, 0x6DD2, 0x0B02, 0x6DD3, 0x1F66, 0x6DD4, 0x1F4F, 0x6DD5, 0x1F60,
+ 0x6DD6, 0x1F54, 0x6DD7, 0x1F68, 0x6DD8, 0x0B07, 0x6DD9, 0x0AEF, 0x6DDA,
+ 0x0B05, 0x6DDB, 0x1F59, 0x6DDC, 0x1F57, 0x6DDD, 0x1F58, 0x6DDE, 0x0AFC,
+ 0x6DDF, 0x1F53, 0x6DE0, 0x1F52, 0x6DE1, 0x0AF1, 0x6DE2, 0x1F4C, 0x6DE3,
+ 0x1F6A, 0x6DE4, 0x0AF3, 0x6DE5, 0x1F56, 0x6DE6, 0x0B11, 0x6DE8, 0x0B0B,
+ 0x6DE9, 0x1F4B, 0x6DEA, 0x0B08, 0x6DEB, 0x0B06, 0x6DEC, 0x0B0F, 0x6DED,
+ 0x1F5D, 0x6DEE, 0x0B0A, 0x6DEF, 0x1D02, 0x6DF0, 0x1F5E, 0x6DF1, 0x0B09,
+ 0x6DF2, 0x1F65, 0x6DF3, 0x0AEE, 0x6DF4, 0x1F5A, 0x6DF5, 0x0B00, 0x6DF6,
+ 0x1F4E, 0x6DF7, 0x0AFF, 0x6DF9, 0x0AFD, 0x6DFA, 0x0AF5, 0x6DFB, 0x0AF4,
+ 0x6DFC, 0x21BF, 0x6DFD, 0x1F67, 0x6E00, 0x1F50, 0x6E03, 0x21D4, 0x6E05,
+ 0x0AF6, 0x6E19, 0x0CC1, 0x6E1A, 0x0B03, 0x6E1B, 0x0CAF, 0x6E1C, 0x21CE,
+ 0x6E1D, 0x0CBD, 0x6E1F, 0x21C2, 0x6E20, 0x0CAC, 0x6E21, 0x0CA8, 0x6E22,
+ 0x21E0, 0x6E23, 0x0CAE, 0x6E24, 0x0CB2, 0x6E25, 0x0CAD, 0x6E26, 0x0CB6,
+ 0x6E27, 0x21E4, 0x6E28, 0x21DB, 0x6E2B, 0x21C9, 0x6E2C, 0x0CBB, 0x6E2D,
+ 0x0CB5, 0x6E2E, 0x21D5, 0x6E2F, 0x0CA5, 0x6E30, 0x21E1, 0x6E31, 0x21DA,
+ 0x6E32, 0x0CA9, 0x6E33, 0x21CF, 0x6E34, 0x0CB8, 0x6E35, 0x21EC, 0x6E36,
+ 0x21ED, 0x6E38, 0x0CA6, 0x6E39, 0x21DF, 0x6E3A, 0x0CBA, 0x6E3B, 0x21D3,
+ 0x6E3C, 0x21C5, 0x6E3D, 0x21C6, 0x6E3E, 0x0CBE, 0x6E3F, 0x21CA, 0x6E40,
+ 0x21D1, 0x6E41, 0x21CB, 0x6E43, 0x0CBC, 0x6E44, 0x0CC4, 0x6E45, 0x21C7,
+ 0x6E46, 0x21C0, 0x6E47, 0x21C1, 0x6E49, 0x21C3, 0x6E4A, 0x0CAB, 0x6E4B,
+ 0x21D0, 0x6E4D, 0x0CB9, 0x6E4E, 0x0CC2, 0x6E51, 0x21D2, 0x6E52, 0x21EA,
+ 0x6E53, 0x21E2, 0x6E54, 0x0CA7, 0x6E55, 0x21E8, 0x6E56, 0x0CB3, 0x6E58,
+ 0x0CB1, 0x6E5A, 0x21EE, 0x6E5B, 0x0CB0, 0x6E5C, 0x21D8, 0x6E5D, 0x21CC,
+ 0x6E5E, 0x21D6, 0x6E5F, 0x0CC7, 0x6E60, 0x21DC, 0x6E61, 0x21D9, 0x6E62,
+ 0x21C8, 0x6E63, 0x0CC3, 0x6E64, 0x21E6, 0x6E65, 0x21E3, 0x6E66, 0x21EB,
+ 0x6E67, 0x0CAA, 0x6E68, 0x21D7, 0x6E69, 0x0CC6, 0x6E6B, 0x21DE, 0x6E6E,
+ 0x0CB4, 0x6E6F, 0x0CB7, 0x6E71, 0x21DD, 0x6E72, 0x0CC5, 0x6E73, 0x21CD,
+ 0x6E74, 0x1F49, 0x6E77, 0x21E7, 0x6E78, 0x21E5, 0x6E79, 0x21E9, 0x6E88,
+ 0x21C4, 0x6E89, 0x0CC0, 0x6E8D, 0x246C, 0x6E8E, 0x246B, 0x6E8F, 0x2451,
+ 0x6E90, 0x0E55, 0x6E92, 0x246A, 0x6E93, 0x2454, 0x6E94, 0x2455, 0x6E96,
+ 0x0E5F, 0x6E97, 0x2473, 0x6E98, 0x0E5A, 0x6E99, 0x2469, 0x6E9B, 0x244E,
+ 0x6E9C, 0x0E60, 0x6E9D, 0x0E56, 0x6E9E, 0x245D, 0x6E9F, 0x2453, 0x6EA0,
+ 0x2456, 0x6EA1, 0x246E, 0x6EA2, 0x0E50, 0x6EA3, 0x2475, 0x6EA4, 0x246D,
+ 0x6EA5, 0x0E59, 0x6EA6, 0x2462, 0x6EA7, 0x0E64, 0x6EAA, 0x0E63, 0x6EAB,
+ 0x0E5D, 0x6EAE, 0x2474, 0x6EAF, 0x0E51, 0x6EB0, 0x2460, 0x6EB1, 0x2457,
+ 0x6EB2, 0x2464, 0x6EB3, 0x2470, 0x6EB4, 0x0E65, 0x6EB6, 0x0E53, 0x6EB7,
+ 0x245F, 0x6EB9, 0x2458, 0x6EBA, 0x0E5C, 0x6EBC, 0x0E5B, 0x6EBD, 0x245B,
+ 0x6EBE, 0x2465, 0x6EBF, 0x246F, 0x6EC0, 0x2452, 0x6EC1, 0x245C, 0x6EC2,
+ 0x0E54, 0x6EC3, 0x2466, 0x6EC4, 0x0E61, 0x6EC5, 0x0E58, 0x6EC6, 0x2459,
+ 0x6EC7, 0x0E57, 0x6EC8, 0x2450, 0x6EC9, 0x245E, 0x6ECA, 0x2472, 0x6ECB,
+ 0x0CBF, 0x6ECC, 0x101F, 0x6ECD, 0x2461, 0x6ECE, 0x26EB, 0x6ECF, 0x2463,
+ 0x6ED0, 0x2471, 0x6ED1, 0x0E5E, 0x6ED2, 0x245A, 0x6ED3, 0x0E52, 0x6ED4,
+ 0x0E62, 0x6ED5, 0x119A, 0x6ED6, 0x244F, 0x6ED8, 0x2468, 0x6EDC, 0x2467,
+ 0x6EEB, 0x2707, 0x6EEC, 0x101C, 0x6EED, 0x26FC, 0x6EEE, 0x2701, 0x6EEF,
+ 0x1011, 0x6EF1, 0x26ED, 0x6EF2, 0x101E, 0x6EF4, 0x1008, 0x6EF5, 0x26EC,
+ 0x6EF6, 0x270D, 0x6EF7, 0x1020, 0x6EF8, 0x26F0, 0x6EF9, 0x2700, 0x6EFB,
+ 0x26F2, 0x6EFC, 0x2710, 0x6EFD, 0x270C, 0x6EFE, 0x1006, 0x6EFF, 0x1010,
+ 0x6F00, 0x2946, 0x6F01, 0x101D, 0x6F02, 0x100E, 0x6F03, 0x26EE, 0x6F05,
+ 0x270B, 0x6F06, 0x1012, 0x6F07, 0x2708, 0x6F08, 0x2715, 0x6F09, 0x26F4,
+ 0x6F0A, 0x26FD, 0x6F0D, 0x2713, 0x6F0E, 0x2709, 0x6F0F, 0x100D, 0x6F12,
+ 0x26FB, 0x6F13, 0x1007, 0x6F14, 0x1005, 0x6F15, 0x1017, 0x6F18, 0x26F9,
+ 0x6F19, 0x26F6, 0x6F1A, 0x26F7, 0x6F1C, 0x270F, 0x6F1E, 0x2714, 0x6F1F,
+ 0x2712, 0x6F20, 0x100B, 0x6F21, 0x2716, 0x6F22, 0x100F, 0x6F23, 0x1016,
+ 0x6F25, 0x26EF, 0x6F26, 0x292E, 0x6F27, 0x26F8, 0x6F29, 0x1009, 0x6F2A,
+ 0x101B, 0x6F2B, 0x1018, 0x6F2C, 0x100C, 0x6F2D, 0x2702, 0x6F2E, 0x26F3,
+ 0x6F2F, 0x1019, 0x6F30, 0x2704, 0x6F31, 0x1013, 0x6F32, 0x1015, 0x6F33,
+ 0x1004, 0x6F35, 0x2706, 0x6F36, 0x26FE, 0x6F37, 0x26F1, 0x6F38, 0x1014,
+ 0x6F39, 0x270E, 0x6F3A, 0x2711, 0x6F3B, 0x26FA, 0x6F3C, 0x2705, 0x6F3E,
+ 0x100A, 0x6F3F, 0x1189, 0x6F40, 0x2703, 0x6F41, 0x292D, 0x6F43, 0x270A,
+ 0x6F4E, 0x26F5, 0x6F4F, 0x2937, 0x6F50, 0x2941, 0x6F51, 0x118C, 0x6F52,
+ 0x2940, 0x6F53, 0x294C, 0x6F54, 0x118E, 0x6F55, 0x293E, 0x6F57, 0x2942,
+ 0x6F58, 0x1199, 0x6F5A, 0x2939, 0x6F5B, 0x1191, 0x6F5D, 0x2945, 0x6F5E,
+ 0x2B9A, 0x6F5F, 0x119D, 0x6F60, 0x119C, 0x6F61, 0x2947, 0x6F62, 0x2936,
+ 0x6F63, 0x2951, 0x6F64, 0x1197, 0x6F66, 0x118D, 0x6F67, 0x294A, 0x6F69,
+ 0x294E, 0x6F6A, 0x2953, 0x6F6B, 0x2948, 0x6F6C, 0x293C, 0x6F6D, 0x1190,
+ 0x6F6E, 0x1193, 0x6F6F, 0x119B, 0x6F70, 0x1196, 0x6F72, 0x293F, 0x6F73,
+ 0x26FF, 0x6F76, 0x293B, 0x6F77, 0x2952, 0x6F78, 0x1192, 0x6F7A, 0x1195,
+ 0x6F7B, 0x2954, 0x6F7C, 0x118A, 0x6F7D, 0x2949, 0x6F7E, 0x292F, 0x6F7F,
+ 0x294F, 0x6F80, 0x13FC, 0x6F82, 0x293D, 0x6F84, 0x118B, 0x6F85, 0x2938,
+ 0x6F86, 0x118F, 0x6F87, 0x2930, 0x6F88, 0x101A, 0x6F89, 0x2934, 0x6F8B,
+ 0x294D, 0x6F8C, 0x2935, 0x6F8D, 0x2933, 0x6F8E, 0x1194, 0x6F90, 0x294B,
+ 0x6F92, 0x2932, 0x6F93, 0x2944, 0x6F94, 0x2943, 0x6F95, 0x2950, 0x6F96,
+ 0x293A, 0x6F97, 0x1198, 0x6F9E, 0x2B9D, 0x6FA0, 0x12EB, 0x6FA1, 0x12E1,
+ 0x6FA2, 0x2BA9, 0x6FA3, 0x2B95, 0x6FA4, 0x12E3, 0x6FA5, 0x2BA1, 0x6FA6,
+ 0x12EA, 0x6FA7, 0x12E5, 0x6FA8, 0x2B9F, 0x6FA9, 0x2D8E, 0x6FAA, 0x2BA5,
+ 0x6FAB, 0x2BAB, 0x6FAC, 0x2BA4, 0x6FAD, 0x2B93, 0x6FAE, 0x2BA2, 0x6FAF,
+ 0x2BAD, 0x6FB0, 0x2BAF, 0x6FB1, 0x12E0, 0x6FB2, 0x2BAE, 0x6FB3, 0x12E6,
+ 0x6FB4, 0x12EC, 0x6FB6, 0x12E9, 0x6FB8, 0x2BA8, 0x6FB9, 0x12E8, 0x6FBA,
+ 0x2BA3, 0x6FBC, 0x2B97, 0x6FBD, 0x2B9C, 0x6FBF, 0x2BA7, 0x6FC0, 0x12E7,
+ 0x6FC1, 0x12E4, 0x6FC2, 0x12DF, 0x6FC3, 0x12E2, 0x6FC4, 0x2B9B, 0x6FC6,
+ 0x2931, 0x6FC7, 0x2B96, 0x6FC8, 0x2B99, 0x6FC9, 0x2BAA, 0x6FCA, 0x2B9E,
+ 0x6FCB, 0x2B94, 0x6FCC, 0x2D8D, 0x6FCD, 0x2BAC, 0x6FCE, 0x2B98, 0x6FCF,
+ 0x2BA6, 0x6FD4, 0x2D90, 0x6FD5, 0x1400, 0x6FD8, 0x13F4, 0x6FDB, 0x13F8,
+ 0x6FDC, 0x2D92, 0x6FDD, 0x2D98, 0x6FDE, 0x2D96, 0x6FDF, 0x13F6, 0x6FE0,
+ 0x13F7, 0x6FE1, 0x13FE, 0x6FE2, 0x2D99, 0x6FE3, 0x2D91, 0x6FE4, 0x13F9,
+ 0x6FE6, 0x2D95, 0x6FE7, 0x2D94, 0x6FE8, 0x2D9A, 0x6FE9, 0x13FF, 0x6FEB,
+ 0x13FA, 0x6FEC, 0x13FD, 0x6FED, 0x2D93, 0x6FEE, 0x1401, 0x6FEF, 0x13FB,
+ 0x6FF0, 0x1402, 0x6FF1, 0x13F5, 0x6FF2, 0x2D97, 0x6FF4, 0x2D8F, 0x6FF7,
+ 0x2F4E, 0x6FFA, 0x14EB, 0x6FFB, 0x2F4B, 0x6FFC, 0x2F4D, 0x6FFE, 0x14E9,
+ 0x6FFF, 0x2F49, 0x7000, 0x2F4A, 0x7001, 0x2F45, 0x7004, 0x2BA0, 0x7005,
+ 0x2F46, 0x7006, 0x14EA, 0x7007, 0x2F42, 0x7009, 0x14E7, 0x700A, 0x2F4F,
+ 0x700B, 0x14E8, 0x700C, 0x2F43, 0x700D, 0x2F44, 0x700E, 0x2F48, 0x700F,
+ 0x14ED, 0x7011, 0x14EC, 0x7014, 0x2F47, 0x7015, 0x158F, 0x7016, 0x30AD,
+ 0x7017, 0x30B3, 0x7018, 0x1590, 0x7019, 0x30AA, 0x701A, 0x158D, 0x701B,
+ 0x158A, 0x701C, 0x30B5, 0x701D, 0x158E, 0x701F, 0x158B, 0x7020, 0x30AC,
+ 0x7021, 0x30AF, 0x7022, 0x30B0, 0x7023, 0x30B1, 0x7024, 0x30B4, 0x7026,
+ 0x2F4C, 0x7027, 0x30AB, 0x7028, 0x158C, 0x7029, 0x30B2, 0x702A, 0x31EF,
+ 0x702B, 0x30AE, 0x702F, 0x31E6, 0x7030, 0x161D, 0x7031, 0x31E9, 0x7032,
+ 0x161E, 0x7033, 0x31F2, 0x7034, 0x31E8, 0x7035, 0x31E5, 0x7037, 0x31E7,
+ 0x7038, 0x31EB, 0x7039, 0x31EE, 0x703A, 0x31ED, 0x703B, 0x31F1, 0x703C,
+ 0x31E4, 0x703E, 0x161C, 0x703F, 0x31EC, 0x7040, 0x31F0, 0x7041, 0x31F3,
+ 0x7042, 0x31EA, 0x7043, 0x32D8, 0x7044, 0x32D9, 0x7045, 0x32DD, 0x7046,
+ 0x32DE, 0x7048, 0x32DB, 0x7049, 0x32DC, 0x704A, 0x32DA, 0x704C, 0x167A,
+ 0x7051, 0x16C8, 0x7052, 0x338C, 0x7055, 0x3389, 0x7056, 0x338A, 0x7057,
+ 0x338B, 0x7058, 0x16C9, 0x705A, 0x3423, 0x705B, 0x3422, 0x705D, 0x348A,
+ 0x705E, 0x1722, 0x705F, 0x3488, 0x7060, 0x348B, 0x7061, 0x3489, 0x7062,
+ 0x34D0, 0x7063, 0x1744, 0x7064, 0x1752, 0x7065, 0x351C, 0x7066, 0x3506,
+ 0x7068, 0x351B, 0x7069, 0x3547, 0x706A, 0x3548, 0x706B, 0x02E6, 0x7070,
+ 0x03F2, 0x7071, 0x180A, 0x7074, 0x18C3, 0x7076, 0x04E6, 0x7078, 0x04E9,
+ 0x707A, 0x18C4, 0x707C, 0x04E7, 0x707D, 0x04E8, 0x7082, 0x19F7, 0x7083,
+ 0x19F9, 0x7084, 0x19F4, 0x7085, 0x19F1, 0x7086, 0x19F3, 0x708A, 0x0643,
+ 0x708E, 0x0641, 0x7091, 0x19F5, 0x7092, 0x0642, 0x7093, 0x19F2, 0x7094,
+ 0x19EF, 0x7095, 0x0640, 0x7096, 0x19F6, 0x7098, 0x19F0, 0x7099, 0x0644,
+ 0x709A, 0x19F8, 0x709F, 0x1B66, 0x70A1, 0x1B6A, 0x70A4, 0x0790, 0x70A9,
+ 0x1B6D, 0x70AB, 0x0788, 0x70AC, 0x078B, 0x70AD, 0x078D, 0x70AE, 0x078F,
+ 0x70AF, 0x078C, 0x70B0, 0x1B69, 0x70B1, 0x1B68, 0x70B3, 0x078A, 0x70B4,
+ 0x1B6B, 0x70B5, 0x1B6C, 0x70B7, 0x1B65, 0x70B8, 0x078E, 0x70BA, 0x0789,
+ 0x70BE, 0x1B67, 0x70C5, 0x1D27, 0x70C6, 0x1D28, 0x70C7, 0x1D29, 0x70C8,
+ 0x0921, 0x70CA, 0x091D, 0x70CB, 0x1D1E, 0x70CD, 0x1D26, 0x70CE, 0x1D2B,
+ 0x70CF, 0x0922, 0x70D1, 0x1D1C, 0x70D2, 0x1D22, 0x70D3, 0x1D1B, 0x70D4,
+ 0x1D25, 0x70D7, 0x1D21, 0x70D8, 0x091E, 0x70D9, 0x0920, 0x70DA, 0x1D2A,
+ 0x70DC, 0x1D1A, 0x70DD, 0x1D1D, 0x70DE, 0x1D23, 0x70E0, 0x1D24, 0x70E1,
+ 0x1D2C, 0x70E2, 0x1D20, 0x70E4, 0x091F, 0x70EF, 0x0B16, 0x70F0, 0x1F72,
+ 0x70F3, 0x1F74, 0x70F4, 0x1F70, 0x70F6, 0x1F7C, 0x70F7, 0x1F6E, 0x70F8,
+ 0x1F7B, 0x70F9, 0x0B12, 0x70FA, 0x1F6C, 0x70FB, 0x21F2, 0x70FC, 0x1F76,
+ 0x70FD, 0x0B15, 0x70FF, 0x1F77, 0x7100, 0x1F7A, 0x7102, 0x1F7E, 0x7104,
+ 0x1F73, 0x7106, 0x1F78, 0x7109, 0x0B13, 0x710A, 0x0B14, 0x710B, 0x1F7D,
+ 0x710C, 0x1F71, 0x710D, 0x1F6D, 0x710E, 0x1F7F, 0x7110, 0x1F75, 0x7113,
+ 0x1F79, 0x7117, 0x1F6F, 0x7119, 0x0CC8, 0x711A, 0x0CC9, 0x711B, 0x21FC,
+ 0x711C, 0x0CCF, 0x711E, 0x21F0, 0x711F, 0x21F9, 0x7120, 0x21EF, 0x7121,
+ 0x0CCC, 0x7122, 0x21F7, 0x7123, 0x21F5, 0x7125, 0x21F6, 0x7126, 0x0CCA,
+ 0x7128, 0x21FA, 0x712E, 0x21F3, 0x712F, 0x21F1, 0x7130, 0x0CCB, 0x7131,
+ 0x21F4, 0x7132, 0x21F8, 0x7136, 0x0CCD, 0x713A, 0x21FB, 0x7141, 0x247B,
+ 0x7142, 0x2482, 0x7143, 0x2484, 0x7144, 0x248A, 0x7146, 0x0E72, 0x7147,
+ 0x2476, 0x7149, 0x0E6A, 0x714B, 0x2485, 0x714C, 0x0E6F, 0x714D, 0x248B,
+ 0x714E, 0x0E66, 0x7150, 0x2488, 0x7152, 0x2478, 0x7153, 0x2489, 0x7154,
+ 0x2477, 0x7156, 0x0E74, 0x7158, 0x2483, 0x7159, 0x0E67, 0x715A, 0x248C,
+ 0x715C, 0x0E6C, 0x715D, 0x247C, 0x715E, 0x0E71, 0x715F, 0x2487, 0x7160,
+ 0x247A, 0x7161, 0x2481, 0x7162, 0x247D, 0x7163, 0x2479, 0x7164, 0x0E69,
+ 0x7165, 0x0E70, 0x7166, 0x0E6E, 0x7167, 0x0E6B, 0x7168, 0x0E73, 0x7169,
+ 0x0E68, 0x716A, 0x2480, 0x716C, 0x0E6D, 0x716E, 0x0CCE, 0x7170, 0x2486,
+ 0x7172, 0x247E, 0x7178, 0x247F, 0x717B, 0x271E, 0x717D, 0x1023, 0x7180,
+ 0x271A, 0x7181, 0x2720, 0x7182, 0x271C, 0x7184, 0x1025, 0x7185, 0x271B,
+ 0x7186, 0x271F, 0x7187, 0x2717, 0x7189, 0x2719, 0x718A, 0x1024, 0x718F,
+ 0x271D, 0x7190, 0x2718, 0x7192, 0x1026, 0x7194, 0x1021, 0x7197, 0x2721,
+ 0x7199, 0x1022, 0x719A, 0x295A, 0x719B, 0x2957, 0x719C, 0x2963, 0x719D,
+ 0x295D, 0x719E, 0x295F, 0x719F, 0x119E, 0x71A0, 0x2959, 0x71A1, 0x2961,
+ 0x71A4, 0x2960, 0x71A5, 0x295E, 0x71A7, 0x2964, 0x71A8, 0x11A1, 0x71A9,
+ 0x295B, 0x71AA, 0x2962, 0x71AC, 0x119F, 0x71AF, 0x2956, 0x71B0, 0x2958,
+ 0x71B1, 0x11A0, 0x71B2, 0x2955, 0x71B3, 0x2965, 0x71B5, 0x295C, 0x71B8,
+ 0x2BB3, 0x71B9, 0x12F3, 0x71BC, 0x2BBE, 0x71BD, 0x2BBC, 0x71BE, 0x12ED,
+ 0x71BF, 0x2BB2, 0x71C0, 0x2BB5, 0x71C1, 0x2BB6, 0x71C2, 0x2BB1, 0x71C3,
+ 0x12F7, 0x71C4, 0x12F8, 0x71C5, 0x2BB0, 0x71C6, 0x2BBF, 0x71C7, 0x2BBA,
+ 0x71C8, 0x12F1, 0x71C9, 0x12EE, 0x71CA, 0x2BB9, 0x71CB, 0x2BB7, 0x71CE,
+ 0x12F4, 0x71CF, 0x2BBB, 0x71D0, 0x12EF, 0x71D2, 0x12F0, 0x71D4, 0x2BB8,
+ 0x71D5, 0x12F2, 0x71D6, 0x2BB4, 0x71D8, 0x2BBD, 0x71D9, 0x12F5, 0x71DA,
+ 0x2BC0, 0x71DB, 0x2BC1, 0x71DC, 0x12F6, 0x71DF, 0x1404, 0x71E0, 0x140B,
+ 0x71E1, 0x2D9B, 0x71E2, 0x2DA1, 0x71E4, 0x2D9F, 0x71E5, 0x1407, 0x71E6,
+ 0x1406, 0x71E7, 0x1403, 0x71E8, 0x2D9D, 0x71EC, 0x1409, 0x71ED, 0x1408,
+ 0x71EE, 0x1405, 0x71F0, 0x2DA0, 0x71F1, 0x2D9C, 0x71F2, 0x2D9E, 0x71F4,
+ 0x140A, 0x71F8, 0x14F1, 0x71F9, 0x2F52, 0x71FB, 0x14EE, 0x71FC, 0x14EF,
+ 0x71FD, 0x2F54, 0x71FE, 0x14F0, 0x71FF, 0x2F51, 0x7201, 0x2F50, 0x7202,
+ 0x30B9, 0x7203, 0x2F53, 0x7205, 0x30BA, 0x7206, 0x1591, 0x7207, 0x30B8,
+ 0x720A, 0x30B7, 0x720C, 0x30B6, 0x720D, 0x1592, 0x7210, 0x161F, 0x7213,
+ 0x31F4, 0x7214, 0x31F5, 0x7219, 0x32E1, 0x721A, 0x32E0, 0x721B, 0x167B,
+ 0x721D, 0x32DF, 0x721E, 0x338D, 0x721F, 0x338E, 0x7222, 0x3424, 0x7223,
+ 0x348C, 0x7226, 0x34D1, 0x7227, 0x3535, 0x7228, 0x1766, 0x7229, 0x3549,
+ 0x722A, 0x02E7, 0x722C, 0x0645, 0x722D, 0x0646, 0x7230, 0x0791, 0x7235,
+ 0x140C, 0x7236, 0x02E8, 0x7238, 0x0647, 0x7239, 0x0923, 0x723A, 0x0E75,
+ 0x723B, 0x02E9, 0x723D, 0x0B17, 0x723E, 0x1027, 0x723F, 0x178D, 0x7241,
+ 0x1B6E, 0x7242, 0x1D2D, 0x7244, 0x2722, 0x7246, 0x140D, 0x7247, 0x02EA,
+ 0x7248, 0x0648, 0x7249, 0x1B6F, 0x724A, 0x1B70, 0x724B, 0x21FD, 0x724C,
+ 0x0CD0, 0x724F, 0x248D, 0x7252, 0x0E76, 0x7253, 0x2723, 0x7256, 0x11A2,
+ 0x7258, 0x1593, 0x7259, 0x02EB, 0x725A, 0x21FE, 0x725B, 0x02EC, 0x725D,
+ 0x03F4, 0x725E, 0x180B, 0x725F, 0x03F3, 0x7260, 0x04EC, 0x7261, 0x04EB,
+ 0x7262, 0x04EA, 0x7263, 0x18C5, 0x7267, 0x0649, 0x7269, 0x064A, 0x726A,
+ 0x19FA, 0x726C, 0x1B71, 0x726E, 0x1B74, 0x726F, 0x0793, 0x7270, 0x1B72,
+ 0x7272, 0x0792, 0x7273, 0x1B73, 0x7274, 0x0794, 0x7276, 0x1D30, 0x7277,
+ 0x1D2F, 0x7278, 0x1D2E, 0x7279, 0x0924, 0x727B, 0x1F81, 0x727C, 0x1F82,
+ 0x727D, 0x0B18, 0x727E, 0x1F80, 0x727F, 0x1F83, 0x7280, 0x0CD2, 0x7281,
+ 0x0B19, 0x7284, 0x0CD1, 0x7285, 0x2202, 0x7286, 0x2201, 0x7288, 0x21FF,
+ 0x7289, 0x2200, 0x728B, 0x2203, 0x728C, 0x248F, 0x728D, 0x248E, 0x728E,
+ 0x2492, 0x7290, 0x2491, 0x7291, 0x2490, 0x7292, 0x1028, 0x7293, 0x2726,
+ 0x7295, 0x2725, 0x7296, 0x1029, 0x7297, 0x2724, 0x7298, 0x2966, 0x729A,
+ 0x2967, 0x729B, 0x11A3, 0x729D, 0x2BC2, 0x729E, 0x2BC3, 0x72A1, 0x30BF,
+ 0x72A2, 0x1594, 0x72A3, 0x30BE, 0x72A4, 0x30BD, 0x72A5, 0x30BB, 0x72A6,
+ 0x30BC, 0x72A7, 0x167C, 0x72A8, 0x31F6, 0x72A9, 0x338F, 0x72AA, 0x34D2,
+ 0x72AC, 0x02ED, 0x72AE, 0x17AF, 0x72AF, 0x0355, 0x72B0, 0x17B0, 0x72B4,
+ 0x180C, 0x72B5, 0x180D, 0x72BA, 0x18CB, 0x72BD, 0x18C7, 0x72BF, 0x18C6,
+ 0x72C0, 0x064B, 0x72C1, 0x18CA, 0x72C2, 0x04EE, 0x72C3, 0x18C8, 0x72C4,
+ 0x04ED, 0x72C5, 0x18CC, 0x72C6, 0x18C9, 0x72C9, 0x19FE, 0x72CA, 0x1B75,
+ 0x72CB, 0x19FC, 0x72CC, 0x1A03, 0x72CE, 0x064C, 0x72D0, 0x064F, 0x72D1,
+ 0x1A04, 0x72D2, 0x1A00, 0x72D4, 0x1A01, 0x72D6, 0x19FB, 0x72D7, 0x064E,
+ 0x72D8, 0x19FD, 0x72D9, 0x064D, 0x72DA, 0x1A02, 0x72DC, 0x19FF, 0x72DF,
+ 0x1B79, 0x72E0, 0x0796, 0x72E1, 0x0797, 0x72E3, 0x1B7C, 0x72E4, 0x1B76,
+ 0x72E6, 0x1B7B, 0x72E8, 0x1B77, 0x72E9, 0x0795, 0x72EA, 0x1B7A, 0x72EB,
+ 0x1B78, 0x72F3, 0x1D36, 0x72F4, 0x1D33, 0x72F6, 0x1D35, 0x72F7, 0x0929,
+ 0x72F8, 0x0928, 0x72F9, 0x0926, 0x72FA, 0x1D32, 0x72FB, 0x1D37, 0x72FC,
+ 0x0925, 0x72FD, 0x0927, 0x72FE, 0x1D34, 0x72FF, 0x1F8B, 0x7300, 0x1D31,
+ 0x7301, 0x1D38, 0x7307, 0x1F86, 0x7308, 0x1F8A, 0x730A, 0x1F89, 0x730B,
+ 0x2205, 0x730C, 0x2210, 0x730F, 0x1F8C, 0x7311, 0x1F87, 0x7312, 0x2204,
+ 0x7313, 0x0B1D, 0x7316, 0x0B1C, 0x7317, 0x1F85, 0x7318, 0x1F88, 0x7319,
+ 0x0B1E, 0x731B, 0x0B1B, 0x731C, 0x0B1A, 0x731D, 0x1F84, 0x731E, 0x1F8D,
+ 0x7322, 0x2207, 0x7323, 0x220E, 0x7325, 0x0CD4, 0x7326, 0x220D, 0x7327,
+ 0x220A, 0x7329, 0x0CD6, 0x732D, 0x220C, 0x7330, 0x2206, 0x7331, 0x2208,
+ 0x7332, 0x220B, 0x7333, 0x2209, 0x7334, 0x0CD5, 0x7335, 0x220F, 0x7336,
+ 0x0CD3, 0x7337, 0x0E77, 0x733A, 0x2496, 0x733B, 0x2495, 0x733C, 0x2493,
+ 0x733E, 0x0E7A, 0x733F, 0x0E79, 0x7340, 0x2497, 0x7342, 0x2494, 0x7343,
+ 0x2727, 0x7344, 0x102A, 0x7345, 0x0E78, 0x7349, 0x2499, 0x734A, 0x2498,
+ 0x734C, 0x272A, 0x734D, 0x2728, 0x734E, 0x11A4, 0x7350, 0x102B, 0x7351,
+ 0x2729, 0x7352, 0x2969, 0x7357, 0x11A5, 0x7358, 0x2968, 0x7359, 0x2971,
+ 0x735A, 0x2970, 0x735B, 0x296E, 0x735D, 0x296D, 0x735E, 0x296A, 0x735F,
+ 0x296B, 0x7360, 0x296C, 0x7361, 0x296F, 0x7362, 0x2972, 0x7365, 0x2BC8,
+ 0x7366, 0x2BC5, 0x7367, 0x2BC6, 0x7368, 0x12F9, 0x7369, 0x2BC4, 0x736A,
+ 0x2BCA, 0x736B, 0x2BC9, 0x736C, 0x2BC7, 0x736E, 0x2DA3, 0x736F, 0x2DA4,
+ 0x7370, 0x140E, 0x7372, 0x140F, 0x7373, 0x2DA2, 0x7375, 0x14F3, 0x7376,
+ 0x2F55, 0x7377, 0x14F2, 0x7378, 0x1595, 0x737A, 0x1596, 0x737B, 0x1620,
+ 0x737C, 0x31F8, 0x737D, 0x31F7, 0x737E, 0x32E2, 0x737F, 0x3390, 0x7380,
+ 0x16CA, 0x7381, 0x3426, 0x7382, 0x3425, 0x7383, 0x3427, 0x7384, 0x0356,
+ 0x7385, 0x1B7D, 0x7386, 0x092A, 0x7387, 0x0B1F, 0x7388, 0x1F8E, 0x7389,
+ 0x0357, 0x738A, 0x17B1, 0x738B, 0x02EE, 0x738E, 0x180E, 0x7392, 0x18D1,
+ 0x7393, 0x18CF, 0x7394, 0x18D0, 0x7395, 0x18CD, 0x7396, 0x04EF, 0x7397,
+ 0x18CE, 0x739D, 0x1A0C, 0x739F, 0x0652, 0x73A0, 0x1A0A, 0x73A1, 0x1A06,
+ 0x73A2, 0x1A09, 0x73A4, 0x1A05, 0x73A5, 0x0654, 0x73A6, 0x1A08, 0x73A8,
+ 0x0651, 0x73A9, 0x0650, 0x73AB, 0x0653, 0x73AC, 0x1A0B, 0x73AD, 0x1A07,
+ 0x73B2, 0x079B, 0x73B3, 0x079E, 0x73B4, 0x1B85, 0x73B5, 0x1B84, 0x73B6,
+ 0x1B83, 0x73B7, 0x0798, 0x73B8, 0x1B8C, 0x73B9, 0x1B82, 0x73BB, 0x079A,
+ 0x73BC, 0x1D3D, 0x73BE, 0x1B89, 0x73BF, 0x1B87, 0x73C0, 0x079D, 0x73C2,
+ 0x1B7F, 0x73C3, 0x1B8A, 0x73C5, 0x1B81, 0x73C6, 0x1B8B, 0x73C7, 0x1B88,
+ 0x73C8, 0x1B80, 0x73CA, 0x0799, 0x73CB, 0x1B8D, 0x73CC, 0x1B7E, 0x73CD,
+ 0x079C, 0x73D2, 0x1D42, 0x73D3, 0x1D39, 0x73D4, 0x1D44, 0x73D6, 0x1D3C,
+ 0x73D7, 0x1D47, 0x73D8, 0x1D48, 0x73D9, 0x1D3A, 0x73DA, 0x1D46, 0x73DB,
+ 0x1D43, 0x73DC, 0x1D41, 0x73DD, 0x1D45, 0x73DE, 0x0930, 0x73E0, 0x092E,
+ 0x73E3, 0x1D3F, 0x73E5, 0x1D3B, 0x73E7, 0x1D3E, 0x73E8, 0x1D49, 0x73E9,
+ 0x1D40, 0x73EA, 0x092F, 0x73EB, 0x1B86, 0x73ED, 0x092B, 0x73EE, 0x092D,
+ 0x73F4, 0x1F9C, 0x73F5, 0x1F91, 0x73F6, 0x1F8F, 0x73F8, 0x1F90, 0x73FA,
+ 0x1F97, 0x73FC, 0x1F98, 0x73FD, 0x1F94, 0x73FE, 0x0B24, 0x73FF, 0x1F99,
+ 0x7400, 0x1F96, 0x7401, 0x1F93, 0x7403, 0x0B22, 0x7404, 0x1F92, 0x7405,
+ 0x0B20, 0x7406, 0x0B23, 0x7407, 0x1F95, 0x7408, 0x1F9D, 0x7409, 0x092C,
+ 0x740A, 0x0B21, 0x740B, 0x1F9B, 0x740C, 0x1F9A, 0x740D, 0x0B25, 0x7416,
+ 0x2215, 0x741A, 0x2216, 0x741B, 0x0CE0, 0x741D, 0x221C, 0x7420, 0x221E,
+ 0x7421, 0x2217, 0x7422, 0x0CDA, 0x7423, 0x221B, 0x7424, 0x221A, 0x7425,
+ 0x0CDB, 0x7426, 0x0CE1, 0x7428, 0x0CE2, 0x7429, 0x221D, 0x742A, 0x0CD8,
+ 0x742B, 0x2214, 0x742C, 0x2212, 0x742D, 0x2218, 0x742E, 0x2211, 0x742F,
+ 0x0CDF, 0x7430, 0x2213, 0x7431, 0x2219, 0x7432, 0x221F, 0x7433, 0x0CD9,
+ 0x7434, 0x0CDE, 0x7435, 0x0CDC, 0x7436, 0x0CDD, 0x743A, 0x0CD7, 0x743F,
+ 0x0E81, 0x7440, 0x24A0, 0x7441, 0x0E80, 0x7442, 0x24A4, 0x7444, 0x249A,
+ 0x7446, 0x24A5, 0x744A, 0x249B, 0x744B, 0x249C, 0x744D, 0x24A6, 0x744E,
+ 0x24A3, 0x744F, 0x24A1, 0x7450, 0x24A2, 0x7451, 0x249E, 0x7452, 0x249D,
+ 0x7454, 0x24A7, 0x7455, 0x0E7D, 0x7457, 0x249F, 0x7459, 0x0E82, 0x745A,
+ 0x0E7C, 0x745B, 0x0E83, 0x745C, 0x0E84, 0x745E, 0x0E7F, 0x745F, 0x0E7E,
+ 0x7462, 0x272B, 0x7463, 0x102D, 0x7464, 0x102C, 0x7467, 0x2730, 0x7469,
+ 0x11A6, 0x746A, 0x102E, 0x746D, 0x1030, 0x746E, 0x2731, 0x746F, 0x0E7B,
+ 0x7470, 0x102F, 0x7471, 0x272D, 0x7472, 0x272F, 0x7473, 0x272C, 0x7475,
+ 0x272E, 0x7479, 0x297C, 0x747C, 0x297B, 0x747D, 0x2978, 0x747E, 0x11A9,
+ 0x747F, 0x2BCB, 0x7480, 0x11AA, 0x7481, 0x2977, 0x7483, 0x11A8, 0x7485,
+ 0x2979, 0x7486, 0x2976, 0x7487, 0x2973, 0x7488, 0x297A, 0x7489, 0x2974,
+ 0x748A, 0x2975, 0x748B, 0x11A7, 0x7490, 0x2DA8, 0x7492, 0x2BCF, 0x7494,
+ 0x2BCE, 0x7495, 0x2BD0, 0x7497, 0x2DA5, 0x7498, 0x12FC, 0x749A, 0x2BCC,
+ 0x749C, 0x12FA, 0x749E, 0x12FE, 0x749F, 0x12FD, 0x74A0, 0x2BCD, 0x74A1,
+ 0x2BD1, 0x74A3, 0x12FB, 0x74A5, 0x2DAC, 0x74A6, 0x1412, 0x74A7, 0x14F4,
+ 0x74A8, 0x1413, 0x74A9, 0x1410, 0x74AA, 0x2DA9, 0x74AB, 0x2DA7, 0x74AD,
+ 0x2DAA, 0x74AF, 0x2DAD, 0x74B0, 0x1411, 0x74B1, 0x2DAB, 0x74B2, 0x2DA6,
+ 0x74B5, 0x2F58, 0x74B6, 0x2F5B, 0x74B7, 0x30C2, 0x74B8, 0x2F56, 0x74BA,
+ 0x31F9, 0x74BB, 0x2F5C, 0x74BD, 0x1597, 0x74BE, 0x2F5A, 0x74BF, 0x14F5,
+ 0x74C0, 0x2F57, 0x74C1, 0x2F59, 0x74C2, 0x2F5D, 0x74C3, 0x30C3, 0x74C5,
+ 0x30C1, 0x74CA, 0x1598, 0x74CB, 0x30C0, 0x74CF, 0x1621, 0x74D4, 0x167E,
+ 0x74D5, 0x3392, 0x74D6, 0x167D, 0x74D7, 0x3394, 0x74D8, 0x3391, 0x74D9,
+ 0x3393, 0x74DA, 0x16FE, 0x74DB, 0x348D, 0x74DC, 0x0358, 0x74DD, 0x1A0D,
+ 0x74DE, 0x1D4A, 0x74DF, 0x1D4B, 0x74E0, 0x0B26, 0x74E1, 0x24A8, 0x74E2,
+ 0x12FF, 0x74E3, 0x1599, 0x74E4, 0x16CB, 0x74E5, 0x348E, 0x74E6, 0x0359,
+ 0x74E8, 0x1A0E, 0x74E9, 0x0120, 0x74EC, 0x1B8E, 0x74EE, 0x1B8F, 0x74F4,
+ 0x1D4C, 0x74F5, 0x1D4D, 0x74F6, 0x0B27, 0x74F7, 0x0B28, 0x74FB, 0x2220,
+ 0x74FD, 0x24AB, 0x74FE, 0x24AA, 0x74FF, 0x24A9, 0x7500, 0x2732, 0x7502,
+ 0x2733, 0x7503, 0x2734, 0x7504, 0x1031, 0x7507, 0x297E, 0x7508, 0x297D,
+ 0x750B, 0x2BD2, 0x750C, 0x1300, 0x750D, 0x1301, 0x750F, 0x2DB1, 0x7510,
+ 0x2DAE, 0x7511, 0x2DAF, 0x7512, 0x2DB0, 0x7513, 0x2F5F, 0x7514, 0x2F5E,
+ 0x7515, 0x14F6, 0x7516, 0x30C4, 0x7517, 0x32E3, 0x7518, 0x035A, 0x751A,
+ 0x079F, 0x751C, 0x0B29, 0x751D, 0x24AC, 0x751F, 0x035B, 0x7521, 0x1D4E,
+ 0x7522, 0x0B2A, 0x7525, 0x0CE3, 0x7526, 0x0CE4, 0x7528, 0x035C, 0x7529,
+ 0x035D, 0x752A, 0x180F, 0x752B, 0x04F1, 0x752C, 0x04F0, 0x752D, 0x07A0,
+ 0x752E, 0x1B90, 0x752F, 0x2221, 0x7530, 0x035E, 0x7531, 0x035F, 0x7532,
+ 0x0360, 0x7533, 0x0361, 0x7537, 0x04F2, 0x7538, 0x04F3, 0x7539, 0x18D3,
+ 0x753A, 0x18D2, 0x753D, 0x0655, 0x753E, 0x1A11, 0x753F, 0x1A0F, 0x7540,
+ 0x1A10, 0x7547, 0x1B91, 0x7548, 0x1B92, 0x754B, 0x07A4, 0x754C, 0x07A2,
+ 0x754E, 0x07A3, 0x754F, 0x07A1, 0x7554, 0x0931, 0x7559, 0x0935, 0x755A,
+ 0x0934, 0x755B, 0x1D4F, 0x755C, 0x0933, 0x755D, 0x0932, 0x755F, 0x1D50,
+ 0x7562, 0x0B2D, 0x7563, 0x1F9F, 0x7564, 0x1F9E, 0x7565, 0x0B2B, 0x7566,
+ 0x0B2C, 0x756A, 0x0CE6, 0x756B, 0x0CE5, 0x756C, 0x2223, 0x756F, 0x2222,
+ 0x7570, 0x0B2E, 0x7576, 0x0E85, 0x7577, 0x24AE, 0x7578, 0x0E86, 0x7579,
+ 0x24AD, 0x757D, 0x2735, 0x757E, 0x297F, 0x757F, 0x11AB, 0x7580, 0x2BD3,
+ 0x7584, 0x2DB2, 0x7586, 0x159B, 0x7587, 0x159A, 0x758A, 0x16CC, 0x758B,
+ 0x0362, 0x758C, 0x1A12, 0x758F, 0x0B2F, 0x7590, 0x2736, 0x7591, 0x1032,
+ 0x7592, 0x022E, 0x7594, 0x18D4, 0x7595, 0x18D5, 0x7598, 0x1A13, 0x7599,
+ 0x0657, 0x759A, 0x0658, 0x759D, 0x0656, 0x75A2, 0x07A8, 0x75A3, 0x07A9,
+ 0x75A4, 0x07A6, 0x75A5, 0x07A7, 0x75A7, 0x1B93, 0x75AA, 0x1B94, 0x75AB,
+ 0x07A5, 0x75B0, 0x1D51, 0x75B2, 0x0939, 0x75B3, 0x093A, 0x75B5, 0x0B32,
+ 0x75B6, 0x1D57, 0x75B8, 0x093F, 0x75B9, 0x093D, 0x75BA, 0x1D58, 0x75BB,
+ 0x1D53, 0x75BC, 0x093C, 0x75BD, 0x093B, 0x75BE, 0x0936, 0x75BF, 0x1D56,
+ 0x75C0, 0x1D55, 0x75C1, 0x1D52, 0x75C2, 0x093E, 0x75C4, 0x1D54, 0x75C5,
+ 0x0937, 0x75C7, 0x0938, 0x75CA, 0x0B33, 0x75CB, 0x1FA3, 0x75CC, 0x1FA4,
+ 0x75CD, 0x0B34, 0x75CE, 0x1FA0, 0x75CF, 0x1FA2, 0x75D0, 0x1FA6, 0x75D1,
+ 0x1FA5, 0x75D2, 0x1FA1, 0x75D4, 0x0B30, 0x75D5, 0x0B31, 0x75D7, 0x222B,
+ 0x75D8, 0x0CEB, 0x75D9, 0x0CEA, 0x75DA, 0x2225, 0x75DB, 0x0CE8, 0x75DD,
+ 0x2228, 0x75DE, 0x0CEC, 0x75DF, 0x2229, 0x75E0, 0x0CED, 0x75E1, 0x2226,
+ 0x75E2, 0x0CE7, 0x75E3, 0x0CE9, 0x75E4, 0x222A, 0x75E6, 0x2227, 0x75E7,
+ 0x2224, 0x75ED, 0x24BB, 0x75EF, 0x24B0, 0x75F0, 0x0E88, 0x75F1, 0x0E8B,
+ 0x75F2, 0x0E8A, 0x75F3, 0x0E8F, 0x75F4, 0x0E8E, 0x75F5, 0x24BC, 0x75F6,
+ 0x24BA, 0x75F7, 0x24B3, 0x75F8, 0x24B7, 0x75F9, 0x24B6, 0x75FA, 0x0E8C,
+ 0x75FB, 0x24B9, 0x75FC, 0x24B5, 0x75FD, 0x24BD, 0x75FE, 0x24B4, 0x75FF,
+ 0x0E8D, 0x7600, 0x0E87, 0x7601, 0x0E89, 0x7603, 0x24B2, 0x7608, 0x2738,
+ 0x7609, 0x1036, 0x760A, 0x273C, 0x760B, 0x1035, 0x760C, 0x2739, 0x760D,
+ 0x1034, 0x760F, 0x24B1, 0x7610, 0x24B8, 0x7611, 0x273B, 0x7613, 0x1037,
+ 0x7614, 0x273D, 0x7615, 0x273A, 0x7616, 0x2737, 0x7619, 0x2982, 0x761A,
+ 0x2986, 0x761B, 0x2988, 0x761C, 0x2984, 0x761D, 0x2983, 0x761E, 0x2981,
+ 0x761F, 0x11AE, 0x7620, 0x11AC, 0x7621, 0x11B1, 0x7622, 0x11B2, 0x7623,
+ 0x2985, 0x7624, 0x11AF, 0x7625, 0x2980, 0x7626, 0x11B0, 0x7627, 0x1033,
+ 0x7628, 0x2987, 0x7629, 0x11AD, 0x762D, 0x2BD5, 0x762F, 0x2BD4, 0x7630,
+ 0x2BDC, 0x7631, 0x2BD6, 0x7632, 0x2BDB, 0x7633, 0x2BD8, 0x7634, 0x1302,
+ 0x7635, 0x2BDA, 0x7638, 0x1303, 0x763A, 0x1304, 0x763C, 0x2BD9, 0x763D,
+ 0x2BD7, 0x7642, 0x1415, 0x7643, 0x2DB3, 0x7646, 0x1414, 0x7647, 0x2DB6,
+ 0x7648, 0x2DB4, 0x7649, 0x2DB5, 0x764C, 0x1416, 0x7650, 0x2F63, 0x7652,
+ 0x14F9, 0x7653, 0x2F64, 0x7656, 0x14F7, 0x7657, 0x2F65, 0x7658, 0x14F8,
+ 0x7659, 0x2F62, 0x765A, 0x2F66, 0x765C, 0x2F60, 0x765F, 0x159C, 0x7660,
+ 0x30C5, 0x7661, 0x159D, 0x7662, 0x1622, 0x7664, 0x2F61, 0x7665, 0x1623,
+ 0x7669, 0x167F, 0x766A, 0x32E4, 0x766C, 0x16CE, 0x766D, 0x3395, 0x766E,
+ 0x16CD, 0x7670, 0x3428, 0x7671, 0x1723, 0x7672, 0x1724, 0x7675, 0x3543,
+ 0x7676, 0x022F, 0x7678, 0x07AA, 0x7679, 0x1B95, 0x767B, 0x0CEE, 0x767C,
+ 0x0CEF, 0x767D, 0x0363, 0x767E, 0x03F5, 0x767F, 0x1810, 0x7681, 0x18D6,
+ 0x7682, 0x04F4, 0x7684, 0x0659, 0x7686, 0x07AB, 0x7687, 0x07AC, 0x7688,
+ 0x07AD, 0x7689, 0x1FA8, 0x768A, 0x1D59, 0x768B, 0x0940, 0x768E, 0x0B35,
+ 0x768F, 0x1FA7, 0x7692, 0x222D, 0x7693, 0x0CF1, 0x7695, 0x222C, 0x7696,
+ 0x0CF0, 0x7699, 0x24BE, 0x769A, 0x11B3, 0x769B, 0x298C, 0x769C, 0x2989,
+ 0x769D, 0x298A, 0x769E, 0x298B, 0x76A4, 0x2DB7, 0x76A6, 0x2F67, 0x76AA,
+ 0x31FB, 0x76AB, 0x31FA, 0x76AD, 0x3396, 0x76AE, 0x0364, 0x76AF, 0x1A14,
+ 0x76B0, 0x0941, 0x76B4, 0x0CF2, 0x76B5, 0x24BF, 0x76B8, 0x273E, 0x76BA,
+ 0x11B4, 0x76BB, 0x2BDD, 0x76BD, 0x2F68, 0x76BE, 0x31FC, 0x76BF, 0x0365,
+ 0x76C2, 0x065A, 0x76C3, 0x07B0, 0x76C4, 0x1B96, 0x76C5, 0x07B1, 0x76C6,
+ 0x07AF, 0x76C8, 0x07AE, 0x76C9, 0x1D5A, 0x76CA, 0x0942, 0x76CD, 0x0943,
+ 0x76CE, 0x0944, 0x76D2, 0x0B37, 0x76D3, 0x1FA9, 0x76D4, 0x0B36, 0x76DA,
+ 0x222E, 0x76DB, 0x0B38, 0x76DC, 0x0CF3, 0x76DD, 0x24C0, 0x76DE, 0x0E90,
+ 0x76DF, 0x0E91, 0x76E1, 0x1038, 0x76E3, 0x1039, 0x76E4, 0x11B5, 0x76E5,
+ 0x1306, 0x76E6, 0x2BDE, 0x76E7, 0x1305, 0x76E9, 0x2DB8, 0x76EA, 0x1417,
+ 0x76EC, 0x2F69, 0x76ED, 0x31FD, 0x76EE, 0x0366, 0x76EF, 0x04F5, 0x76F0,
+ 0x1A17, 0x76F1, 0x1A16, 0x76F2, 0x065B, 0x76F3, 0x1A15, 0x76F4, 0x065C,
+ 0x76F5, 0x1A18, 0x76F7, 0x1B9C, 0x76F8, 0x07B4, 0x76F9, 0x07B3, 0x76FA,
+ 0x1B9E, 0x76FB, 0x1B9D, 0x76FC, 0x07B8, 0x76FE, 0x07B7, 0x7701, 0x07B2,
+ 0x7703, 0x1B98, 0x7704, 0x1B99, 0x7705, 0x1B9A, 0x7707, 0x07B9, 0x7708,
+ 0x1B97, 0x7709, 0x07B5, 0x770A, 0x1B9B, 0x770B, 0x07B6, 0x7710, 0x1D5D,
+ 0x7711, 0x1D61, 0x7712, 0x1D5F, 0x7713, 0x1D5E, 0x7715, 0x1D62, 0x7719,
+ 0x1D63, 0x771A, 0x1D64, 0x771B, 0x1D5C, 0x771D, 0x1D5B, 0x771F, 0x0946,
+ 0x7720, 0x0947, 0x7722, 0x1D65, 0x7723, 0x1D60, 0x7725, 0x1FB2, 0x7727,
+ 0x1D66, 0x7728, 0x0948, 0x7729, 0x0945, 0x772D, 0x1FAC, 0x772F, 0x1FAB,
+ 0x7731, 0x1FAD, 0x7732, 0x1FAE, 0x7733, 0x1FB0, 0x7734, 0x1FAF, 0x7735,
+ 0x1FB4, 0x7736, 0x0B3C, 0x7737, 0x0B39, 0x7738, 0x0B3D, 0x7739, 0x1FAA,
+ 0x773A, 0x0B3E, 0x773B, 0x1FB3, 0x773C, 0x0B3B, 0x773D, 0x1FB1, 0x773E,
+ 0x0B3A, 0x7744, 0x2231, 0x7745, 0x2233, 0x7746, 0x222F, 0x7747, 0x2230,
+ 0x774A, 0x2234, 0x774B, 0x2236, 0x774C, 0x2237, 0x774D, 0x2232, 0x774E,
+ 0x2235, 0x774F, 0x0CF4, 0x7752, 0x24C4, 0x7754, 0x24C9, 0x7755, 0x24C1,
+ 0x7756, 0x24C5, 0x7759, 0x24CA, 0x775A, 0x24C6, 0x775B, 0x0E92, 0x775C,
+ 0x0E9A, 0x775E, 0x0E95, 0x775F, 0x24C2, 0x7760, 0x24C3, 0x7761, 0x103D,
+ 0x7762, 0x0E9D, 0x7763, 0x0E96, 0x7765, 0x0E9B, 0x7766, 0x0E94, 0x7767,
+ 0x24C8, 0x7768, 0x0E9C, 0x7769, 0x24C7, 0x776A, 0x0E98, 0x776B, 0x0E93,
+ 0x776C, 0x0E99, 0x776D, 0x24CB, 0x776E, 0x2743, 0x776F, 0x2745, 0x7779,
+ 0x0E97, 0x777C, 0x2740, 0x777D, 0x103B, 0x777E, 0x2746, 0x777F, 0x103C,
+ 0x7780, 0x2744, 0x7781, 0x273F, 0x7782, 0x2742, 0x7783, 0x2747, 0x7784,
+ 0x103A, 0x7785, 0x2741, 0x7787, 0x11B7, 0x7788, 0x2990, 0x7789, 0x298F,
+ 0x778B, 0x11BA, 0x778C, 0x11B8, 0x778D, 0x298D, 0x778E, 0x11B6, 0x778F,
+ 0x298E, 0x7791, 0x11B9, 0x7795, 0x2BE6, 0x7797, 0x2BE8, 0x7799, 0x2BE7,
+ 0x779A, 0x2BDF, 0x779B, 0x2BE3, 0x779C, 0x2BE2, 0x779D, 0x2BE0, 0x779E,
+ 0x1308, 0x779F, 0x1309, 0x77A0, 0x1307, 0x77A1, 0x2BE1, 0x77A2, 0x2BE4,
+ 0x77A3, 0x2BE5, 0x77A5, 0x130A, 0x77A7, 0x141C, 0x77A8, 0x2DC0, 0x77AA,
+ 0x1419, 0x77AB, 0x2DBA, 0x77AC, 0x141B, 0x77AD, 0x141D, 0x77B0, 0x141A,
+ 0x77B1, 0x2DBF, 0x77B2, 0x2DBB, 0x77B3, 0x1418, 0x77B4, 0x2DBE, 0x77B5,
+ 0x2DB9, 0x77B6, 0x2DBD, 0x77B7, 0x2DBC, 0x77BA, 0x2F6B, 0x77BB, 0x14FC,
+ 0x77BC, 0x14FD, 0x77BD, 0x14FA, 0x77BF, 0x14FB, 0x77C2, 0x2F6A, 0x77C4,
+ 0x30C8, 0x77C7, 0x159E, 0x77C9, 0x30C6, 0x77CA, 0x30C7, 0x77CC, 0x31FE,
+ 0x77CD, 0x3201, 0x77CE, 0x31FF, 0x77CF, 0x3200, 0x77D0, 0x32E5, 0x77D3,
+ 0x1680, 0x77D4, 0x3429, 0x77D5, 0x348F, 0x77D7, 0x1725, 0x77D8, 0x34D3,
+ 0x77D9, 0x34D4, 0x77DA, 0x1753, 0x77DB, 0x0367, 0x77DC, 0x07BA, 0x77DE,
+ 0x2238, 0x77E0, 0x24CC, 0x77E2, 0x0368, 0x77E3, 0x04F6, 0x77E5, 0x065D,
+ 0x77E7, 0x1B9F, 0x77E8, 0x1BA0, 0x77E9, 0x0949, 0x77EC, 0x2239, 0x77ED,
+ 0x0CF5, 0x77EE, 0x0E9E, 0x77EF, 0x141E, 0x77F0, 0x2DC1, 0x77F1, 0x30C9,
+ 0x77F2, 0x3202, 0x77F3, 0x0369, 0x77F7, 0x1A1E, 0x77F8, 0x1A19, 0x77F9,
+ 0x1A1B, 0x77FA, 0x1A1D, 0x77FB, 0x1A1C, 0x77FC, 0x1A1A, 0x77FD, 0x065E,
+ 0x7802, 0x07BB, 0x7803, 0x1BA9, 0x7805, 0x1BA4, 0x7806, 0x1BA1, 0x7809,
+ 0x1BA8, 0x780C, 0x07BD, 0x780D, 0x07BE, 0x780E, 0x1BA7, 0x780F, 0x1BA6,
+ 0x7810, 0x1BA5, 0x7811, 0x1BA2, 0x7812, 0x1BA3, 0x7813, 0x1BAA, 0x7814,
+ 0x07BC, 0x781D, 0x094D, 0x781F, 0x0953, 0x7820, 0x0952, 0x7821, 0x1D6F,
+ 0x7822, 0x1D69, 0x7823, 0x1D67, 0x7825, 0x0950, 0x7826, 0x1FBB, 0x7827,
+ 0x094B, 0x7828, 0x1D6C, 0x7829, 0x1D70, 0x782A, 0x1D72, 0x782B, 0x1D6E,
+ 0x782C, 0x1D68, 0x782D, 0x0951, 0x782E, 0x1D6D, 0x782F, 0x1D6B, 0x7830,
+ 0x094A, 0x7831, 0x1D73, 0x7832, 0x0954, 0x7833, 0x1D71, 0x7834, 0x094E,
+ 0x7835, 0x1D6A, 0x7837, 0x094F, 0x7838, 0x094C, 0x7843, 0x0B40, 0x7845,
+ 0x1FBC, 0x7848, 0x1FB5, 0x7849, 0x1FB7, 0x784A, 0x1FB9, 0x784C, 0x1FBA,
+ 0x784D, 0x1FB8, 0x784E, 0x0B41, 0x7850, 0x1FBD, 0x7852, 0x1FB6, 0x785C,
+ 0x223D, 0x785D, 0x0CF6, 0x785E, 0x2245, 0x7860, 0x223A, 0x7862, 0x2246,
+ 0x7864, 0x223B, 0x7865, 0x223C, 0x7868, 0x2244, 0x7869, 0x2243, 0x786A,
+ 0x2240, 0x786B, 0x0B3F, 0x786C, 0x0CF7, 0x786D, 0x223E, 0x786E, 0x2241,
+ 0x786F, 0x0CF8, 0x7870, 0x2242, 0x7871, 0x223F, 0x7879, 0x24D7, 0x787B,
+ 0x24DB, 0x787C, 0x0EA5, 0x787E, 0x274D, 0x787F, 0x0EA8, 0x7880, 0x24D9,
+ 0x7881, 0x36E8, 0x7883, 0x24D6, 0x7884, 0x24D1, 0x7885, 0x24D3, 0x7886,
+ 0x24D4, 0x7887, 0x24CD, 0x7889, 0x0EA4, 0x788C, 0x0EA3, 0x788E, 0x0E9F,
+ 0x788F, 0x24D0, 0x7891, 0x0EA6, 0x7893, 0x0EA7, 0x7894, 0x24CF, 0x7895,
+ 0x24D2, 0x7896, 0x24DA, 0x7897, 0x0EA1, 0x7898, 0x0EA2, 0x7899, 0x24D8,
+ 0x789A, 0x24CE, 0x789E, 0x274F, 0x789F, 0x103F, 0x78A0, 0x2751, 0x78A1,
+ 0x24D5, 0x78A2, 0x2753, 0x78A3, 0x1043, 0x78A4, 0x2754, 0x78A5, 0x2750,
+ 0x78A7, 0x1040, 0x78A8, 0x274C, 0x78A9, 0x1042, 0x78AA, 0x2749, 0x78AB,
+ 0x274E, 0x78AC, 0x2752, 0x78AD, 0x274B, 0x78B0, 0x0EA0, 0x78B2, 0x2748,
+ 0x78B3, 0x1041, 0x78B4, 0x274A, 0x78BA, 0x11BD, 0x78BB, 0x2992, 0x78BC,
+ 0x11C1, 0x78BE, 0x11BF, 0x78C1, 0x103E, 0x78C3, 0x2999, 0x78C4, 0x299A,
+ 0x78C5, 0x11BC, 0x78C8, 0x2998, 0x78C9, 0x299B, 0x78CA, 0x11BE, 0x78CB,
+ 0x11BB, 0x78CC, 0x2994, 0x78CD, 0x2991, 0x78CE, 0x2996, 0x78CF, 0x2993,
+ 0x78D0, 0x11C2, 0x78D1, 0x2995, 0x78D4, 0x2997, 0x78D5, 0x11C0, 0x78DA,
+ 0x130C, 0x78DB, 0x2BEF, 0x78DD, 0x2BE9, 0x78DE, 0x2BED, 0x78DF, 0x2BF3,
+ 0x78E0, 0x2BF4, 0x78E1, 0x2BF0, 0x78E2, 0x2BF1, 0x78E3, 0x2BEE, 0x78E5,
+ 0x2BEB, 0x78E7, 0x130E, 0x78E8, 0x130B, 0x78E9, 0x2BEA, 0x78EA, 0x2BEC,
+ 0x78EC, 0x130D, 0x78ED, 0x2BF2, 0x78EF, 0x1422, 0x78F2, 0x2DC8, 0x78F3,
+ 0x2DC2, 0x78F4, 0x1421, 0x78F7, 0x141F, 0x78F9, 0x2DCA, 0x78FA, 0x1420,
+ 0x78FB, 0x2DC5, 0x78FC, 0x2DC6, 0x78FD, 0x2DC3, 0x78FE, 0x2DCB, 0x78FF,
+ 0x2DC7, 0x7901, 0x1423, 0x7902, 0x2DC4, 0x7904, 0x2DCC, 0x7905, 0x2DC9,
+ 0x7909, 0x2F6F, 0x790C, 0x2F6C, 0x790E, 0x14FE, 0x7910, 0x2F70, 0x7911,
+ 0x2F72, 0x7912, 0x2F71, 0x7913, 0x2F6D, 0x7914, 0x2F6E, 0x7917, 0x30CE,
+ 0x7919, 0x159F, 0x791B, 0x30CB, 0x791C, 0x30CD, 0x791D, 0x30CA, 0x791E,
+ 0x30CF, 0x7921, 0x30CC, 0x7923, 0x3204, 0x7924, 0x3207, 0x7925, 0x3203,
+ 0x7926, 0x1624, 0x7927, 0x3205, 0x7928, 0x3206, 0x7929, 0x3208, 0x792A,
+ 0x1625, 0x792B, 0x1627, 0x792C, 0x1626, 0x792D, 0x32E6, 0x792F, 0x32E8,
+ 0x7931, 0x32E7, 0x7935, 0x3397, 0x7938, 0x3490, 0x7939, 0x34D5, 0x793A,
+ 0x036A, 0x793D, 0x18D7, 0x793E, 0x065F, 0x793F, 0x1A20, 0x7940, 0x0660,
+ 0x7941, 0x0661, 0x7942, 0x1A1F, 0x7944, 0x1BAF, 0x7945, 0x1BAE, 0x7946,
+ 0x07BF, 0x7947, 0x07C2, 0x7948, 0x07C1, 0x7949, 0x07C0, 0x794A, 0x1BAB,
+ 0x794B, 0x1BAD, 0x794C, 0x1BAC, 0x794F, 0x1D76, 0x7950, 0x0956, 0x7951,
+ 0x1D7A, 0x7952, 0x1D79, 0x7953, 0x1D78, 0x7954, 0x1D74, 0x7955, 0x0955,
+ 0x7956, 0x0959, 0x7957, 0x095C, 0x795A, 0x095D, 0x795B, 0x1D75, 0x795C,
+ 0x1D77, 0x795D, 0x095B, 0x795E, 0x095A, 0x795F, 0x0958, 0x7960, 0x0957,
+ 0x7961, 0x1FC4, 0x7963, 0x1FC2, 0x7964, 0x1FBE, 0x7965, 0x0B42, 0x7967,
+ 0x1FBF, 0x7968, 0x0B43, 0x7969, 0x1FC0, 0x796A, 0x1FC1, 0x796B, 0x1FC3,
+ 0x796D, 0x0B44, 0x7970, 0x224A, 0x7972, 0x2249, 0x7973, 0x2248, 0x7974,
+ 0x2247, 0x7979, 0x24DF, 0x797A, 0x0EA9, 0x797C, 0x24DC, 0x797D, 0x24DE,
+ 0x797F, 0x0EAA, 0x7981, 0x0EAB, 0x7982, 0x24DD, 0x7988, 0x275D, 0x798A,
+ 0x2756, 0x798B, 0x2757, 0x798D, 0x1046, 0x798E, 0x1044, 0x798F, 0x1045,
+ 0x7990, 0x275F, 0x7992, 0x275E, 0x7993, 0x275B, 0x7994, 0x275A, 0x7995,
+ 0x2759, 0x7996, 0x2758, 0x7997, 0x275C, 0x7998, 0x2755, 0x799A, 0x299C,
+ 0x799B, 0x29A1, 0x799C, 0x299F, 0x79A0, 0x299E, 0x79A1, 0x299D, 0x79A2,
+ 0x29A0, 0x79A4, 0x2BF5, 0x79A6, 0x130F, 0x79A7, 0x1424, 0x79A8, 0x2DCE,
+ 0x79AA, 0x1425, 0x79AB, 0x2DCD, 0x79AC, 0x2F74, 0x79AD, 0x2F73, 0x79AE,
+ 0x14FF, 0x79B0, 0x30D0, 0x79B1, 0x15A0, 0x79B2, 0x3209, 0x79B3, 0x16CF,
+ 0x79B4, 0x3398, 0x79B6, 0x3492, 0x79B7, 0x3491, 0x79B8, 0x17B2, 0x79B9,
+ 0x07C3, 0x79BA, 0x07C4, 0x79BB, 0x1FC5, 0x79BD, 0x0EAD, 0x79BE, 0x036B,
+ 0x79BF, 0x04F9, 0x79C0, 0x04F8, 0x79C1, 0x04F7, 0x79C5, 0x1A21, 0x79C8,
+ 0x0663, 0x79C9, 0x0662, 0x79CB, 0x07C7, 0x79CD, 0x1BB1, 0x79CE, 0x1BB4,
+ 0x79CF, 0x1BB2, 0x79D1, 0x07C5, 0x79D2, 0x07C6, 0x79D5, 0x1BB0, 0x79D6,
+ 0x1BB3, 0x79D8, 0x0964, 0x79DC, 0x1D81, 0x79DD, 0x1D83, 0x79DE, 0x1D82,
+ 0x79DF, 0x0961, 0x79E0, 0x1D7D, 0x79E3, 0x095F, 0x79E4, 0x095E, 0x79E6,
+ 0x0962, 0x79E7, 0x0960, 0x79E9, 0x0963, 0x79EA, 0x1D80, 0x79EB, 0x1D7B,
+ 0x79EC, 0x1D7C, 0x79ED, 0x1D7F, 0x79EE, 0x1D7E, 0x79F6, 0x1FC8, 0x79F7,
+ 0x1FC9, 0x79F8, 0x1FC7, 0x79FA, 0x1FC6, 0x79FB, 0x0B45, 0x7A00, 0x0CFD,
+ 0x7A02, 0x224B, 0x7A03, 0x224D, 0x7A04, 0x224F, 0x7A05, 0x0CFC, 0x7A08,
+ 0x0CFA, 0x7A0A, 0x224C, 0x7A0B, 0x0CFB, 0x7A0C, 0x224E, 0x7A0D, 0x0CF9,
+ 0x7A10, 0x24E9, 0x7A11, 0x24E0, 0x7A12, 0x24E3, 0x7A13, 0x24E7, 0x7A14,
+ 0x0EB1, 0x7A15, 0x24E5, 0x7A17, 0x24E4, 0x7A18, 0x24E1, 0x7A19, 0x24E2,
+ 0x7A1A, 0x0EAF, 0x7A1B, 0x24E8, 0x7A1C, 0x0EAE, 0x7A1E, 0x0EB3, 0x7A1F,
+ 0x0EB2, 0x7A20, 0x0EB0, 0x7A22, 0x24E6, 0x7A26, 0x2765, 0x7A28, 0x2764,
+ 0x7A2B, 0x2760, 0x7A2E, 0x1047, 0x7A2F, 0x2763, 0x7A30, 0x2762, 0x7A31,
+ 0x1048, 0x7A37, 0x11C7, 0x7A39, 0x29A3, 0x7A3B, 0x11C8, 0x7A3C, 0x11C4,
+ 0x7A3D, 0x11C6, 0x7A3F, 0x11C3, 0x7A40, 0x11C5, 0x7A44, 0x2BF6, 0x7A46,
+ 0x1312, 0x7A47, 0x2BF8, 0x7A48, 0x2BF7, 0x7A4A, 0x2761, 0x7A4B, 0x1314,
+ 0x7A4C, 0x1313, 0x7A4D, 0x1310, 0x7A4E, 0x1311, 0x7A54, 0x2DD3, 0x7A56,
+ 0x2DD1, 0x7A57, 0x1426, 0x7A58, 0x2DD2, 0x7A5A, 0x2DD4, 0x7A5B, 0x2DD0,
+ 0x7A5C, 0x2DCF, 0x7A5F, 0x2F75, 0x7A60, 0x1502, 0x7A61, 0x1500, 0x7A62,
+ 0x1501, 0x7A67, 0x30D1, 0x7A68, 0x30D2, 0x7A69, 0x15A2, 0x7A6B, 0x15A1,
+ 0x7A6C, 0x320B, 0x7A6D, 0x320C, 0x7A6E, 0x320A, 0x7A70, 0x3399, 0x7A71,
+ 0x339A, 0x7A74, 0x036C, 0x7A75, 0x1811, 0x7A76, 0x04FA, 0x7A78, 0x1A22,
+ 0x7A79, 0x0665, 0x7A7A, 0x0664, 0x7A7B, 0x1A23, 0x7A7E, 0x1BB6, 0x7A7F,
+ 0x07C8, 0x7A80, 0x1BB5, 0x7A81, 0x07C9, 0x7A84, 0x0965, 0x7A85, 0x1D86,
+ 0x7A86, 0x1D84, 0x7A87, 0x1D8A, 0x7A88, 0x0966, 0x7A89, 0x1D85, 0x7A8A,
+ 0x1D89, 0x7A8B, 0x1D87, 0x7A8C, 0x1D88, 0x7A8F, 0x1FCA, 0x7A90, 0x1FCC,
+ 0x7A92, 0x0B46, 0x7A94, 0x1FCB, 0x7A95, 0x0B47, 0x7A96, 0x0D00, 0x7A97,
+ 0x0CFF, 0x7A98, 0x0CFE, 0x7A99, 0x2250, 0x7A9E, 0x24EC, 0x7A9F, 0x0EB4,
+ 0x7AA0, 0x0EB5, 0x7AA2, 0x24EB, 0x7AA3, 0x24EA, 0x7AA8, 0x2766, 0x7AA9,
+ 0x104A, 0x7AAA, 0x1049, 0x7AAB, 0x2767, 0x7AAC, 0x2768, 0x7AAE, 0x11CA,
+ 0x7AAF, 0x11C9, 0x7AB1, 0x2BFC, 0x7AB2, 0x29A4, 0x7AB3, 0x29A6, 0x7AB4,
+ 0x29A5, 0x7AB5, 0x2BFB, 0x7AB6, 0x2BF9, 0x7AB7, 0x2BFD, 0x7AB8, 0x2BFA,
+ 0x7ABA, 0x1315, 0x7ABE, 0x2DD5, 0x7ABF, 0x1427, 0x7AC0, 0x2DD6, 0x7AC1,
+ 0x2DD7, 0x7AC4, 0x1503, 0x7AC5, 0x1504, 0x7AC7, 0x1628, 0x7ACA, 0x16FF,
+ 0x7ACB, 0x036D, 0x7AD1, 0x1BB7, 0x7AD8, 0x1D8B, 0x7AD9, 0x0967, 0x7ADF,
+ 0x0BDE, 0x7AE0, 0x0BDD, 0x7AE3, 0x0D02, 0x7AE4, 0x2252, 0x7AE5, 0x0D01,
+ 0x7AE6, 0x2251, 0x7AEB, 0x24ED, 0x7AED, 0x104B, 0x7AEE, 0x2769, 0x7AEF,
+ 0x104C, 0x7AF6, 0x1629, 0x7AF7, 0x320D, 0x7AF9, 0x03F6, 0x7AFA, 0x0666,
+ 0x7AFB, 0x1A24, 0x7AFD, 0x07CB, 0x7AFF, 0x07CA, 0x7B00, 0x1BB8, 0x7B01,
+ 0x1BB9, 0x7B04, 0x1D8D, 0x7B05, 0x1D8F, 0x7B06, 0x0968, 0x7B08, 0x1D91,
+ 0x7B09, 0x1D94, 0x7B0A, 0x1D92, 0x7B0E, 0x1D93, 0x7B0F, 0x1D90, 0x7B10,
+ 0x1D8C, 0x7B11, 0x0969, 0x7B12, 0x1D95, 0x7B13, 0x1D8E, 0x7B18, 0x1FD5,
+ 0x7B19, 0x0B4D, 0x7B1A, 0x1FDE, 0x7B1B, 0x0B4A, 0x7B1D, 0x1FD7, 0x7B1E,
+ 0x0B4E, 0x7B20, 0x0B48, 0x7B22, 0x1FD2, 0x7B23, 0x1FDF, 0x7B24, 0x1FD3,
+ 0x7B25, 0x1FD0, 0x7B26, 0x0B4C, 0x7B28, 0x0B49, 0x7B2A, 0x1FD6, 0x7B2B,
+ 0x1FD9, 0x7B2C, 0x0B4B, 0x7B2D, 0x1FDA, 0x7B2E, 0x0B4F, 0x7B2F, 0x1FDB,
+ 0x7B30, 0x1FD1, 0x7B31, 0x1FD8, 0x7B32, 0x1FDC, 0x7B33, 0x1FD4, 0x7B34,
+ 0x1FCF, 0x7B35, 0x1FCD, 0x7B38, 0x1FDD, 0x7B3B, 0x1FCE, 0x7B40, 0x2259,
+ 0x7B44, 0x2255, 0x7B45, 0x225B, 0x7B46, 0x0D05, 0x7B47, 0x2254, 0x7B48,
+ 0x2256, 0x7B49, 0x0D03, 0x7B4A, 0x2253, 0x7B4B, 0x0D0A, 0x7B4C, 0x2257,
+ 0x7B4D, 0x0D09, 0x7B4E, 0x2258, 0x7B4F, 0x0D0B, 0x7B50, 0x0D06, 0x7B51,
+ 0x0D0C, 0x7B52, 0x0D07, 0x7B54, 0x0D08, 0x7B56, 0x0D04, 0x7B58, 0x225A,
+ 0x7B60, 0x0EB8, 0x7B61, 0x24F8, 0x7B63, 0x24FB, 0x7B64, 0x24EF, 0x7B65,
+ 0x24F4, 0x7B66, 0x24EE, 0x7B67, 0x0EBA, 0x7B69, 0x24F2, 0x7B6D, 0x24F0,
+ 0x7B6E, 0x0EB9, 0x7B70, 0x24F7, 0x7B71, 0x24F6, 0x7B72, 0x24F3, 0x7B73,
+ 0x24F5, 0x7B74, 0x24F1, 0x7B75, 0x1050, 0x7B76, 0x24FA, 0x7B77, 0x0EB6,
+ 0x7B78, 0x24F9, 0x7B82, 0x2779, 0x7B84, 0x1057, 0x7B85, 0x2774, 0x7B87,
+ 0x1056, 0x7B88, 0x276A, 0x7B8A, 0x276C, 0x7B8B, 0x104F, 0x7B8C, 0x2771,
+ 0x7B8D, 0x2770, 0x7B8E, 0x2773, 0x7B8F, 0x1054, 0x7B90, 0x276E, 0x7B91,
+ 0x276D, 0x7B94, 0x1053, 0x7B95, 0x104E, 0x7B96, 0x276F, 0x7B97, 0x1051,
+ 0x7B98, 0x2775, 0x7B99, 0x2777, 0x7B9B, 0x2772, 0x7B9C, 0x276B, 0x7B9D,
+ 0x1052, 0x7BA0, 0x11D2, 0x7BA1, 0x104D, 0x7BA4, 0x2778, 0x7BAC, 0x29AA,
+ 0x7BAD, 0x11CB, 0x7BAF, 0x29AC, 0x7BB1, 0x11CC, 0x7BB4, 0x11CE, 0x7BB5,
+ 0x29AF, 0x7BB7, 0x29A7, 0x7BB8, 0x1055, 0x7BB9, 0x29AD, 0x7BBE, 0x29A9,
+ 0x7BC0, 0x0EB7, 0x7BC1, 0x11D1, 0x7BC4, 0x11CD, 0x7BC6, 0x11CF, 0x7BC7,
+ 0x11D0, 0x7BC9, 0x1318, 0x7BCA, 0x29AE, 0x7BCB, 0x29A8, 0x7BCC, 0x11D3,
+ 0x7BCE, 0x29AB, 0x7BD4, 0x2C07, 0x7BD5, 0x2C02, 0x7BD8, 0x2C0C, 0x7BD9,
+ 0x1316, 0x7BDA, 0x2C04, 0x7BDB, 0x131A, 0x7BDC, 0x2C0A, 0x7BDD, 0x2C01,
+ 0x7BDE, 0x2BFE, 0x7BDF, 0x2C0D, 0x7BE0, 0x142D, 0x7BE1, 0x131B, 0x7BE2,
+ 0x2C09, 0x7BE3, 0x2BFF, 0x7BE4, 0x1319, 0x7BE5, 0x2C03, 0x7BE6, 0x131D,
+ 0x7BE7, 0x2C00, 0x7BE8, 0x2C05, 0x7BE9, 0x131C, 0x7BEA, 0x2C08, 0x7BEB,
+ 0x2C0B, 0x7BF0, 0x2DE9, 0x7BF1, 0x2DEA, 0x7BF2, 0x2DDA, 0x7BF3, 0x2DE1,
+ 0x7BF4, 0x2DDF, 0x7BF7, 0x142B, 0x7BF8, 0x2DE6, 0x7BF9, 0x2C06, 0x7BFB,
+ 0x2DDD, 0x7BFD, 0x2DE7, 0x7BFE, 0x142A, 0x7BFF, 0x2DDC, 0x7C00, 0x2DDB,
+ 0x7C01, 0x2DE5, 0x7C02, 0x2DE2, 0x7C03, 0x2DE4, 0x7C05, 0x2DD8, 0x7C06,
+ 0x2DE8, 0x7C07, 0x1428, 0x7C09, 0x2DE3, 0x7C0A, 0x2DEC, 0x7C0B, 0x2DE0,
+ 0x7C0C, 0x142C, 0x7C0D, 0x1429, 0x7C0E, 0x2DDE, 0x7C0F, 0x2DD9, 0x7C10,
+ 0x2DEB, 0x7C11, 0x1317, 0x7C19, 0x2F78, 0x7C1C, 0x2F76, 0x7C1D, 0x2F7C,
+ 0x7C1E, 0x1508, 0x7C1F, 0x2F7A, 0x7C20, 0x2F79, 0x7C21, 0x150A, 0x7C22,
+ 0x2F7F, 0x7C23, 0x1509, 0x7C25, 0x2F80, 0x7C26, 0x2F7D, 0x7C27, 0x1506,
+ 0x7C28, 0x2F7E, 0x7C29, 0x2F77, 0x7C2A, 0x1507, 0x7C2B, 0x1505, 0x7C2C,
+ 0x30D6, 0x7C2D, 0x2F7B, 0x7C30, 0x2F81, 0x7C33, 0x30D3, 0x7C37, 0x15A7,
+ 0x7C38, 0x15A5, 0x7C39, 0x30D5, 0x7C3B, 0x30D7, 0x7C3C, 0x30D4, 0x7C3D,
+ 0x15A6, 0x7C3E, 0x15A3, 0x7C3F, 0x15A4, 0x7C40, 0x15A8, 0x7C43, 0x162B,
+ 0x7C45, 0x3212, 0x7C47, 0x3211, 0x7C48, 0x320F, 0x7C49, 0x320E, 0x7C4A,
+ 0x3210, 0x7C4C, 0x162A, 0x7C4D, 0x162C, 0x7C50, 0x1681, 0x7C53, 0x32EA,
+ 0x7C54, 0x32E9, 0x7C57, 0x339B, 0x7C59, 0x339D, 0x7C5A, 0x339F, 0x7C5B,
+ 0x339E, 0x7C5C, 0x339C, 0x7C5F, 0x16D1, 0x7C60, 0x16D0, 0x7C63, 0x1701,
+ 0x7C64, 0x1700, 0x7C65, 0x1702, 0x7C66, 0x342B, 0x7C67, 0x342A, 0x7C69,
+ 0x34D6, 0x7C6A, 0x3493, 0x7C6B, 0x34D7, 0x7C6C, 0x1745, 0x7C6E, 0x1746,
+ 0x7C6F, 0x3507, 0x7C72, 0x176B, 0x7C73, 0x03F7, 0x7C75, 0x1A25, 0x7C78,
+ 0x1BBB, 0x7C79, 0x1BBC, 0x7C7A, 0x1BBA, 0x7C7D, 0x07CC, 0x7C7F, 0x1BBD,
+ 0x7C80, 0x1BBE, 0x7C81, 0x1BBF, 0x7C84, 0x1D96, 0x7C85, 0x1D9C, 0x7C88,
+ 0x1D9A, 0x7C89, 0x096A, 0x7C8A, 0x1D98, 0x7C8C, 0x1D99, 0x7C8D, 0x1D9B,
+ 0x7C91, 0x1D97, 0x7C92, 0x0B50, 0x7C94, 0x1FE0, 0x7C95, 0x0B52, 0x7C96,
+ 0x1FE2, 0x7C97, 0x0B51, 0x7C98, 0x1FE1, 0x7C9E, 0x225D, 0x7C9F, 0x0D0D,
+ 0x7CA1, 0x225F, 0x7CA2, 0x225C, 0x7CA3, 0x1FE3, 0x7CA5, 0x0D0E, 0x7CA7,
+ 0x36ED, 0x7CA8, 0x225E, 0x7CAF, 0x24FE, 0x7CB1, 0x0EBB, 0x7CB2, 0x24FC,
+ 0x7CB3, 0x0EBC, 0x7CB4, 0x24FD, 0x7CB5, 0x0EBD, 0x7CB9, 0x1058, 0x7CBA,
+ 0x277D, 0x7CBB, 0x277A, 0x7CBC, 0x277C, 0x7CBD, 0x1059, 0x7CBE, 0x105A,
+ 0x7CBF, 0x277B, 0x7CC5, 0x29B0, 0x7CC8, 0x29B1, 0x7CCA, 0x11D4, 0x7CCB,
+ 0x29B3, 0x7CCC, 0x29B2, 0x7CCE, 0x0121, 0x7CD0, 0x2C11, 0x7CD1, 0x2C12,
+ 0x7CD2, 0x2C0E, 0x7CD4, 0x2C0F, 0x7CD5, 0x131E, 0x7CD6, 0x131F, 0x7CD7,
+ 0x2C10, 0x7CD9, 0x1433, 0x7CDC, 0x142F, 0x7CDD, 0x1434, 0x7CDE, 0x1430,
+ 0x7CDF, 0x1432, 0x7CE0, 0x142E, 0x7CE2, 0x1431, 0x7CE7, 0x150B, 0x7CE8,
+ 0x2DED, 0x7CEA, 0x30D9, 0x7CEC, 0x30D8, 0x7CEE, 0x3213, 0x7CEF, 0x162D,
+ 0x7CF0, 0x162E, 0x7CF1, 0x33A1, 0x7CF2, 0x32EB, 0x7CF4, 0x33A0, 0x7CF6,
+ 0x34D8, 0x7CF7, 0x351D, 0x7CF8, 0x03F8, 0x7CFB, 0x04FB, 0x7CFD, 0x1A26,
+ 0x7CFE, 0x0667, 0x7D00, 0x07CF, 0x7D01, 0x1BC2, 0x7D02, 0x07CD, 0x7D03,
+ 0x1BC0, 0x7D04, 0x07D2, 0x7D05, 0x07CE, 0x7D06, 0x07D3, 0x7D07, 0x07D1,
+ 0x7D08, 0x1BC1, 0x7D09, 0x07D0, 0x7D0A, 0x096E, 0x7D0B, 0x096D, 0x7D0C,
+ 0x1DA7, 0x7D0D, 0x0976, 0x7D0E, 0x1DA0, 0x7D0F, 0x1DA6, 0x7D10, 0x0972,
+ 0x7D11, 0x1D9F, 0x7D12, 0x1DA5, 0x7D13, 0x1DA3, 0x7D14, 0x0971, 0x7D15,
+ 0x0973, 0x7D16, 0x1DA2, 0x7D17, 0x096C, 0x7D18, 0x1DA1, 0x7D19, 0x0977,
+ 0x7D1A, 0x0974, 0x7D1B, 0x0978, 0x7D1C, 0x0975, 0x7D1D, 0x1D9E, 0x7D1E,
+ 0x1D9D, 0x7D1F, 0x1DA4, 0x7D20, 0x096F, 0x7D21, 0x096B, 0x7D22, 0x0970,
+ 0x7D28, 0x1FF2, 0x7D29, 0x1FEB, 0x7D2B, 0x0D13, 0x7D2C, 0x1FEA, 0x7D2E,
+ 0x0B56, 0x7D2F, 0x0B5D, 0x7D30, 0x0B5A, 0x7D31, 0x0B60, 0x7D32, 0x0B5F,
+ 0x7D33, 0x0B5B, 0x7D35, 0x1FE4, 0x7D36, 0x1FE7, 0x7D38, 0x1FE6, 0x7D39,
+ 0x0B57, 0x7D3A, 0x1FE8, 0x7D3B, 0x1FF1, 0x7D3C, 0x0B58, 0x7D3D, 0x1FE5,
+ 0x7D3E, 0x1FEE, 0x7D3F, 0x1FEF, 0x7D40, 0x0B59, 0x7D41, 0x1FEC, 0x7D42,
+ 0x0B5E, 0x7D43, 0x0B54, 0x7D44, 0x0B5C, 0x7D45, 0x1FE9, 0x7D46, 0x0B53,
+ 0x7D47, 0x1FED, 0x7D4A, 0x1FF0, 0x7D4E, 0x2270, 0x7D4F, 0x2267, 0x7D50,
+ 0x0D10, 0x7D51, 0x226E, 0x7D52, 0x226B, 0x7D53, 0x2263, 0x7D54, 0x226C,
+ 0x7D55, 0x0D12, 0x7D56, 0x2264, 0x7D58, 0x2260, 0x7D5B, 0x0EC3, 0x7D5C,
+ 0x2269, 0x7D5E, 0x0D0F, 0x7D5F, 0x226F, 0x7D61, 0x0D16, 0x7D62, 0x0D18,
+ 0x7D63, 0x2262, 0x7D66, 0x0D17, 0x7D67, 0x2265, 0x7D68, 0x0D11, 0x7D69,
+ 0x226D, 0x7D6A, 0x2266, 0x7D6B, 0x226A, 0x7D6D, 0x2268, 0x7D6E, 0x0D14,
+ 0x7D6F, 0x2261, 0x7D70, 0x0D19, 0x7D71, 0x0B55, 0x7D72, 0x0D15, 0x7D73,
+ 0x0D1A, 0x7D79, 0x0EBF, 0x7D7A, 0x2505, 0x7D7B, 0x2507, 0x7D7C, 0x2509,
+ 0x7D7D, 0x250D, 0x7D7F, 0x2503, 0x7D80, 0x2501, 0x7D81, 0x0EC1, 0x7D83,
+ 0x2508, 0x7D84, 0x250C, 0x7D85, 0x2504, 0x7D86, 0x2500, 0x7D88, 0x24FF,
+ 0x7D8C, 0x250A, 0x7D8D, 0x2502, 0x7D8E, 0x2506, 0x7D8F, 0x0EC2, 0x7D91,
+ 0x0EC0, 0x7D92, 0x250E, 0x7D93, 0x0EBE, 0x7D94, 0x250B, 0x7D96, 0x278E,
+ 0x7D9C, 0x105D, 0x7D9D, 0x2786, 0x7D9E, 0x11E1, 0x7D9F, 0x2790, 0x7DA0,
+ 0x1060, 0x7DA1, 0x2794, 0x7DA2, 0x1066, 0x7DA3, 0x2781, 0x7DA6, 0x2791,
+ 0x7DA7, 0x277E, 0x7DA9, 0x2793, 0x7DAA, 0x2782, 0x7DAC, 0x106D, 0x7DAD,
+ 0x106A, 0x7DAE, 0x2792, 0x7DAF, 0x278C, 0x7DB0, 0x105C, 0x7DB1, 0x1064,
+ 0x7DB2, 0x1063, 0x7DB4, 0x1062, 0x7DB5, 0x1068, 0x7DB7, 0x277F, 0x7DB8,
+ 0x1069, 0x7DB9, 0x278D, 0x7DBA, 0x1065, 0x7DBB, 0x105B, 0x7DBC, 0x278F,
+ 0x7DBD, 0x105E, 0x7DBE, 0x105F, 0x7DBF, 0x1067, 0x7DC0, 0x2784, 0x7DC1,
+ 0x2783, 0x7DC2, 0x2780, 0x7DC4, 0x2788, 0x7DC5, 0x2785, 0x7DC6, 0x2789,
+ 0x7DC7, 0x106C, 0x7DC9, 0x2795, 0x7DCA, 0x1061, 0x7DCB, 0x278A, 0x7DCC,
+ 0x278B, 0x7DCE, 0x2787, 0x7DD2, 0x106B, 0x7DD7, 0x29B8, 0x7DD8, 0x11D9,
+ 0x7DD9, 0x11E2, 0x7DDA, 0x11DE, 0x7DDB, 0x29B5, 0x7DDD, 0x11DB, 0x7DDE,
+ 0x11DF, 0x7DDF, 0x29C1, 0x7DE0, 0x11D5, 0x7DE1, 0x29B9, 0x7DE3, 0x11DD,
+ 0x7DE6, 0x29BC, 0x7DE7, 0x29B7, 0x7DE8, 0x11DC, 0x7DE9, 0x11E0, 0x7DEA,
+ 0x29B6, 0x7DEC, 0x11DA, 0x7DEE, 0x29C0, 0x7DEF, 0x11D7, 0x7DF0, 0x29BF,
+ 0x7DF1, 0x29BE, 0x7DF2, 0x11E3, 0x7DF3, 0x28C8, 0x7DF4, 0x11D6, 0x7DF6,
+ 0x29BD, 0x7DF7, 0x29B4, 0x7DF9, 0x11E4, 0x7DFA, 0x29BB, 0x7DFB, 0x11D8,
+ 0x7E03, 0x29BA, 0x7E08, 0x1322, 0x7E09, 0x1327, 0x7E0A, 0x1320, 0x7E0B,
+ 0x2C1F, 0x7E0C, 0x2C16, 0x7E0D, 0x2C22, 0x7E0E, 0x2C1A, 0x7E0F, 0x2C20,
+ 0x7E10, 0x1328, 0x7E11, 0x1321, 0x7E12, 0x2C13, 0x7E13, 0x2C19, 0x7E14,
+ 0x2C23, 0x7E15, 0x2C1C, 0x7E16, 0x2C21, 0x7E17, 0x2C15, 0x7E1A, 0x2C1D,
+ 0x7E1B, 0x1323, 0x7E1C, 0x2C1B, 0x7E1D, 0x1326, 0x7E1E, 0x1325, 0x7E1F,
+ 0x2C17, 0x7E20, 0x2C18, 0x7E21, 0x2C14, 0x7E22, 0x2C1E, 0x7E23, 0x1324,
+ 0x7E24, 0x2C25, 0x7E25, 0x2C24, 0x7E29, 0x2DF8, 0x7E2A, 0x2DF4, 0x7E2B,
+ 0x143B, 0x7E2D, 0x2DEE, 0x7E2E, 0x1435, 0x7E2F, 0x1445, 0x7E30, 0x2DFA,
+ 0x7E31, 0x143D, 0x7E32, 0x1439, 0x7E33, 0x2DF1, 0x7E34, 0x1440, 0x7E35,
+ 0x1443, 0x7E36, 0x2DFC, 0x7E37, 0x1438, 0x7E38, 0x2DF3, 0x7E39, 0x1441,
+ 0x7E3A, 0x2DFE, 0x7E3B, 0x2DFB, 0x7E3C, 0x2DEF, 0x7E3D, 0x143C, 0x7E3E,
+ 0x1436, 0x7E3F, 0x1444, 0x7E40, 0x2DF6, 0x7E41, 0x143F, 0x7E42, 0x2DF0,
+ 0x7E43, 0x143A, 0x7E44, 0x2DFD, 0x7E45, 0x143E, 0x7E46, 0x1437, 0x7E47,
+ 0x2DF7, 0x7E48, 0x1442, 0x7E49, 0x2DF5, 0x7E4C, 0x2DF9, 0x7E50, 0x2F83,
+ 0x7E51, 0x2F89, 0x7E52, 0x1511, 0x7E53, 0x2F8C, 0x7E54, 0x150C, 0x7E55,
+ 0x150D, 0x7E56, 0x2F84, 0x7E57, 0x2F8B, 0x7E58, 0x2F86, 0x7E59, 0x1512,
+ 0x7E5A, 0x150F, 0x7E5C, 0x2F82, 0x7E5E, 0x150E, 0x7E5F, 0x2F88, 0x7E60,
+ 0x2F8A, 0x7E61, 0x1510, 0x7E62, 0x2F87, 0x7E63, 0x2F85, 0x7E68, 0x30E3,
+ 0x7E69, 0x15AC, 0x7E6A, 0x15AD, 0x7E6B, 0x15A9, 0x7E6D, 0x15AA, 0x7E6F,
+ 0x30DF, 0x7E70, 0x30DD, 0x7E72, 0x30E1, 0x7E73, 0x15AE, 0x7E74, 0x30E2,
+ 0x7E75, 0x30DB, 0x7E76, 0x30DA, 0x7E77, 0x30DE, 0x7E78, 0x30DC, 0x7E79,
+ 0x15AB, 0x7E7A, 0x30E0, 0x7E7B, 0x3214, 0x7E7C, 0x1631, 0x7E7D, 0x1630,
+ 0x7E7E, 0x3215, 0x7E80, 0x3217, 0x7E81, 0x3216, 0x7E82, 0x1632, 0x7E86,
+ 0x32F0, 0x7E87, 0x32ED, 0x7E88, 0x32EE, 0x7E8A, 0x32EC, 0x7E8B, 0x32EF,
+ 0x7E8C, 0x1683, 0x7E8D, 0x32F1, 0x7E8F, 0x1682, 0x7E91, 0x33A2, 0x7E93,
+ 0x1703, 0x7E94, 0x1705, 0x7E95, 0x342C, 0x7E96, 0x1704, 0x7E97, 0x3494,
+ 0x7E98, 0x34DA, 0x7E99, 0x34DC, 0x7E9A, 0x34D9, 0x7E9B, 0x34DB, 0x7E9C,
+ 0x1759, 0x7F36, 0x03F9, 0x7F38, 0x07D4, 0x7F39, 0x1D1F, 0x7F3A, 0x0979,
+ 0x7F3D, 0x0B61, 0x7F3E, 0x2271, 0x7F3F, 0x2272, 0x7F43, 0x2C26, 0x7F44,
+ 0x1446, 0x7F45, 0x2DFF, 0x7F48, 0x1513, 0x7F4A, 0x30E5, 0x7F4B, 0x30E4,
+ 0x7F4C, 0x1633, 0x7F4D, 0x32F2, 0x7F4F, 0x33A3, 0x7F50, 0x1726, 0x7F51,
+ 0x1812, 0x7F54, 0x0668, 0x7F55, 0x04FC, 0x7F58, 0x1BC3, 0x7F5B, 0x1DAD,
+ 0x7F5C, 0x1DA8, 0x7F5D, 0x1DAC, 0x7F5E, 0x1DAA, 0x7F5F, 0x097A, 0x7F60,
+ 0x1DAB, 0x7F61, 0x1DA9, 0x7F63, 0x1FF3, 0x7F65, 0x2273, 0x7F66, 0x2274,
+ 0x7F67, 0x2511, 0x7F68, 0x2512, 0x7F69, 0x0EC5, 0x7F6A, 0x0EC6, 0x7F6B,
+ 0x2510, 0x7F6C, 0x2513, 0x7F6D, 0x250F, 0x7F6E, 0x0EC4, 0x7F70, 0x106E,
+ 0x7F72, 0x0EC7, 0x7F73, 0x2796, 0x7F75, 0x11E5, 0x7F76, 0x29C2, 0x7F77,
+ 0x11E6, 0x7F79, 0x1329, 0x7F7A, 0x2C29, 0x7F7B, 0x2C27, 0x7F7C, 0x2C28,
+ 0x7F7D, 0x2E02, 0x7F7E, 0x2E01, 0x7F7F, 0x2E00, 0x7F83, 0x30E6, 0x7F85,
+ 0x15AF, 0x7F86, 0x30E7, 0x7F87, 0x33A4, 0x7F88, 0x1727, 0x7F89, 0x3495,
+ 0x7F8A, 0x03FA, 0x7F8B, 0x066A, 0x7F8C, 0x0669, 0x7F8D, 0x1BC5, 0x7F8E,
+ 0x07D5, 0x7F91, 0x1BC4, 0x7F92, 0x1DAF, 0x7F94, 0x097B, 0x7F95, 0x1FF4,
+ 0x7F96, 0x1DAE, 0x7F9A, 0x0B63, 0x7F9B, 0x1FF7, 0x7F9C, 0x1FF5, 0x7F9D,
+ 0x1FF6, 0x7F9E, 0x0B62, 0x7FA0, 0x2276, 0x7FA1, 0x2277, 0x7FA2, 0x2275,
+ 0x7FA4, 0x0ECA, 0x7FA5, 0x2515, 0x7FA6, 0x2514, 0x7FA7, 0x2516, 0x7FA8,
+ 0x0EC9, 0x7FA9, 0x0EC8, 0x7FAC, 0x29C3, 0x7FAD, 0x29C5, 0x7FAF, 0x11E7,
+ 0x7FB0, 0x29C4, 0x7FB1, 0x2C2A, 0x7FB2, 0x132A, 0x7FB3, 0x2F8E, 0x7FB5,
+ 0x2F8D, 0x7FB6, 0x15B0, 0x7FB7, 0x30E8, 0x7FB8, 0x15B2, 0x7FB9, 0x15B1,
+ 0x7FBA, 0x3218, 0x7FBB, 0x32F3, 0x7FBC, 0x1684, 0x7FBD, 0x03FB, 0x7FBE,
+ 0x1BC6, 0x7FBF, 0x07D6, 0x7FC0, 0x1DB2, 0x7FC1, 0x097D, 0x7FC2, 0x1DB1,
+ 0x7FC3, 0x1DB0, 0x7FC5, 0x097C, 0x7FC7, 0x1FFD, 0x7FC9, 0x1FFF, 0x7FCA,
+ 0x1FF8, 0x7FCB, 0x1FF9, 0x7FCC, 0x0B64, 0x7FCD, 0x1FFA, 0x7FCE, 0x0B65,
+ 0x7FCF, 0x1FFE, 0x7FD0, 0x1FFB, 0x7FD1, 0x1FFC, 0x7FD2, 0x0B66, 0x7FD4,
+ 0x0D1C, 0x7FD5, 0x0D1D, 0x7FD7, 0x2278, 0x7FDB, 0x2517, 0x7FDC, 0x2518,
+ 0x7FDE, 0x279A, 0x7FDF, 0x1071, 0x7FE0, 0x106F, 0x7FE1, 0x1070, 0x7FE2,
+ 0x2797, 0x7FE3, 0x2798, 0x7FE5, 0x2799, 0x7FE6, 0x29CA, 0x7FE8, 0x29CB,
+ 0x7FE9, 0x11E8, 0x7FEA, 0x29C8, 0x7FEB, 0x29C7, 0x7FEC, 0x29C9, 0x7FED,
+ 0x29C6, 0x7FEE, 0x132D, 0x7FEF, 0x2C2B, 0x7FF0, 0x132B, 0x7FF1, 0x132C,
+ 0x7FF2, 0x2E04, 0x7FF3, 0x1447, 0x7FF4, 0x2E03, 0x7FF5, 0x2EFF, 0x7FF7,
+ 0x2F8F, 0x7FF8, 0x2F90, 0x7FF9, 0x1514, 0x7FFB, 0x1515, 0x7FFC, 0x1448,
+ 0x7FFD, 0x30E9, 0x7FFE, 0x30EA, 0x7FFF, 0x3219, 0x8000, 0x1634, 0x8001,
+ 0x03FC, 0x8003, 0x03FD, 0x8004, 0x097F, 0x8005, 0x066B, 0x8006, 0x097E,
+ 0x8007, 0x1BC7, 0x800B, 0x0D1E, 0x800C, 0x03FE, 0x800D, 0x07D8, 0x800E,
+ 0x1BC8, 0x800F, 0x1BC9, 0x8010, 0x07D7, 0x8011, 0x07D9, 0x8012, 0x03FF,
+ 0x8014, 0x1BCA, 0x8015, 0x0981, 0x8016, 0x1DB3, 0x8017, 0x0983, 0x8018,
+ 0x0980, 0x8019, 0x0982, 0x801B, 0x2002, 0x801C, 0x0B67, 0x801E, 0x2001,
+ 0x801F, 0x2000, 0x8021, 0x2519, 0x8024, 0x279B, 0x8026, 0x11E9, 0x8028,
+ 0x132E, 0x8029, 0x2C2D, 0x802A, 0x2C2C, 0x802C, 0x2E05, 0x8030, 0x32F4,
+ 0x8033, 0x0400, 0x8034, 0x18D8, 0x8035, 0x1A27, 0x8036, 0x07DA, 0x8037,
+ 0x1BCB, 0x8039, 0x1DB5, 0x803D, 0x0984, 0x803E, 0x1DB4, 0x803F, 0x0985,
+ 0x8043, 0x2004, 0x8046, 0x0B69, 0x8047, 0x2003, 0x8048, 0x2005, 0x804A,
+ 0x0B68, 0x804F, 0x227A, 0x8050, 0x227B, 0x8051, 0x2279, 0x8052, 0x0D1F,
+ 0x8056, 0x0ECB, 0x8058, 0x0ECC, 0x805A, 0x1073, 0x805C, 0x279D, 0x805D,
+ 0x279C, 0x805E, 0x1072, 0x8064, 0x29CC, 0x8067, 0x29CD, 0x806C, 0x2C2E,
+ 0x806F, 0x144C, 0x8070, 0x144B, 0x8071, 0x1449, 0x8072, 0x144A, 0x8073,
+ 0x144D, 0x8075, 0x2F91, 0x8076, 0x1517, 0x8077, 0x1516, 0x8078, 0x30EB,
+ 0x8079, 0x321A, 0x807D, 0x16D3, 0x807E, 0x16D2, 0x807F, 0x0401, 0x8082,
+ 0x1CEC, 0x8084, 0x0ECE, 0x8085, 0x0D20, 0x8086, 0x0ECD, 0x8087, 0x1074,
+ 0x8089, 0x0402, 0x808A, 0x17B3, 0x808B, 0x0403, 0x808C, 0x0404, 0x808F,
+ 0x1A28, 0x8090, 0x18DB, 0x8092, 0x18DC, 0x8093, 0x04FE, 0x8095, 0x18D9,
+ 0x8096, 0x04FD, 0x8098, 0x0500, 0x8099, 0x18DA, 0x809A, 0x0502, 0x809B,
+ 0x0501, 0x809C, 0x18DD, 0x809D, 0x04FF, 0x80A1, 0x0670, 0x80A2, 0x066E,
+ 0x80A3, 0x1A2A, 0x80A5, 0x066D, 0x80A9, 0x0672, 0x80AA, 0x0674, 0x80AB,
+ 0x0671, 0x80AD, 0x1A2D, 0x80AE, 0x1A29, 0x80AF, 0x0675, 0x80B1, 0x066F,
+ 0x80B2, 0x0503, 0x80B4, 0x0673, 0x80B5, 0x1A2C, 0x80B8, 0x1A2B, 0x80BA,
+ 0x066C, 0x80C2, 0x1BD1, 0x80C3, 0x07DE, 0x80C4, 0x07DF, 0x80C5, 0x1BD3,
+ 0x80C7, 0x1BCD, 0x80C8, 0x1BD0, 0x80C9, 0x1BD9, 0x80CA, 0x1BD7, 0x80CC,
+ 0x07E0, 0x80CD, 0x1BDD, 0x80CE, 0x07E3, 0x80CF, 0x1BDA, 0x80D0, 0x1BD2,
+ 0x80D1, 0x1BCF, 0x80D4, 0x227D, 0x80D5, 0x1BD8, 0x80D6, 0x07DB, 0x80D7,
+ 0x1BDB, 0x80D8, 0x1BCC, 0x80D9, 0x1BD5, 0x80DA, 0x07DD, 0x80DB, 0x07E2,
+ 0x80DC, 0x1BD6, 0x80DD, 0x07E6, 0x80DE, 0x07E4, 0x80E0, 0x1BCE, 0x80E1,
+ 0x07E1, 0x80E3, 0x1BD4, 0x80E4, 0x07E5, 0x80E5, 0x07DC, 0x80E6, 0x1BDC,
+ 0x80ED, 0x098A, 0x80EF, 0x0993, 0x80F0, 0x0988, 0x80F1, 0x0986, 0x80F2,
+ 0x1DB7, 0x80F3, 0x098E, 0x80F4, 0x098B, 0x80F5, 0x1DB9, 0x80F8, 0x098D,
+ 0x80F9, 0x1DB8, 0x80FA, 0x1DB6, 0x80FB, 0x1DBB, 0x80FC, 0x0992, 0x80FD,
+ 0x0990, 0x80FE, 0x227C, 0x8100, 0x1DBC, 0x8101, 0x1DBA, 0x8102, 0x0987,
+ 0x8105, 0x0989, 0x8106, 0x098C, 0x8108, 0x098F, 0x810A, 0x0991, 0x8115,
+ 0x200F, 0x8116, 0x0B6B, 0x8118, 0x2006, 0x8119, 0x2008, 0x811B, 0x2009,
+ 0x811D, 0x2011, 0x811E, 0x200D, 0x811F, 0x200B, 0x8121, 0x200E, 0x8122,
+ 0x2012, 0x8123, 0x0B6C, 0x8124, 0x0B70, 0x8125, 0x2007, 0x8127, 0x2010,
+ 0x8129, 0x0B6E, 0x812B, 0x0B6D, 0x812C, 0x200C, 0x812D, 0x200A, 0x812F,
+ 0x0B6A, 0x8130, 0x0B6F, 0x8139, 0x0D26, 0x813A, 0x2285, 0x813D, 0x2283,
+ 0x813E, 0x0D28, 0x8143, 0x227E, 0x8144, 0x2527, 0x8146, 0x0D27, 0x8147,
+ 0x2282, 0x814A, 0x227F, 0x814B, 0x0D23, 0x814C, 0x0D29, 0x814D, 0x2284,
+ 0x814E, 0x0D25, 0x814F, 0x2281, 0x8150, 0x1075, 0x8151, 0x0D24, 0x8152,
+ 0x2280, 0x8153, 0x0D2A, 0x8154, 0x0D22, 0x8155, 0x0D21, 0x815B, 0x251F,
+ 0x815C, 0x251D, 0x815E, 0x2523, 0x8160, 0x251B, 0x8161, 0x2528, 0x8162,
+ 0x2520, 0x8164, 0x251A, 0x8165, 0x0ED2, 0x8166, 0x0ED8, 0x8167, 0x2525,
+ 0x8169, 0x251E, 0x816B, 0x0ED5, 0x816E, 0x0ED3, 0x816F, 0x2526, 0x8170,
+ 0x0ED0, 0x8171, 0x0ECF, 0x8172, 0x2521, 0x8173, 0x0ED4, 0x8174, 0x0D2B,
+ 0x8176, 0x2524, 0x8177, 0x251C, 0x8178, 0x0ED1, 0x8179, 0x0ED6, 0x817A,
+ 0x0ED7, 0x817F, 0x107A, 0x8180, 0x1076, 0x8182, 0x107B, 0x8183, 0x27A0,
+ 0x8186, 0x279F, 0x8187, 0x27A1, 0x8188, 0x1078, 0x8189, 0x279E, 0x818A,
+ 0x1079, 0x818B, 0x27A4, 0x818C, 0x27A3, 0x818D, 0x27A2, 0x818F, 0x1077,
+ 0x8195, 0x29D1, 0x8197, 0x29D4, 0x8198, 0x11EF, 0x8199, 0x29D3, 0x819A,
+ 0x11EE, 0x819B, 0x11EA, 0x819C, 0x11EB, 0x819D, 0x11EC, 0x819E, 0x29D0,
+ 0x819F, 0x29CF, 0x81A0, 0x11ED, 0x81A2, 0x29D2, 0x81A3, 0x29CE, 0x81A6,
+ 0x2C30, 0x81A7, 0x2C3A, 0x81A8, 0x1331, 0x81A9, 0x1330, 0x81AB, 0x2C34,
+ 0x81AC, 0x2C36, 0x81AE, 0x2C31, 0x81B0, 0x2C35, 0x81B1, 0x2C2F, 0x81B2,
+ 0x2C38, 0x81B3, 0x132F, 0x81B4, 0x2C37, 0x81B5, 0x2C33, 0x81B7, 0x2C39,
+ 0x81B9, 0x2C32, 0x81BA, 0x1450, 0x81BB, 0x2E06, 0x81BC, 0x2E0C, 0x81BD,
+ 0x1454, 0x81BE, 0x1456, 0x81BF, 0x1453, 0x81C0, 0x1452, 0x81C2, 0x1451,
+ 0x81C3, 0x144F, 0x81C4, 0x2E07, 0x81C5, 0x2E0A, 0x81C6, 0x144E, 0x81C7,
+ 0x2E0B, 0x81C9, 0x1455, 0x81CA, 0x2E09, 0x81CC, 0x2E08, 0x81CD, 0x1518,
+ 0x81CF, 0x1519, 0x81D0, 0x2F94, 0x81D1, 0x2F92, 0x81D2, 0x2F93, 0x81D5,
+ 0x30ED, 0x81D7, 0x30EC, 0x81D8, 0x15B3, 0x81D9, 0x321C, 0x81DA, 0x1635,
+ 0x81DB, 0x321B, 0x81DD, 0x32F5, 0x81DE, 0x33A5, 0x81DF, 0x16D4, 0x81E0,
+ 0x34DD, 0x81E1, 0x34DE, 0x81E2, 0x1706, 0x81E3, 0x0405, 0x81E5, 0x0676,
+ 0x81E6, 0x2286, 0x81E7, 0x107C, 0x81E8, 0x1457, 0x81E9, 0x2E0D, 0x81EA,
+ 0x0406, 0x81EC, 0x0995, 0x81ED, 0x0994, 0x81EE, 0x2287, 0x81F2, 0x2C3B,
+ 0x81F3, 0x0407, 0x81F4, 0x07E7, 0x81F7, 0x2288, 0x81F8, 0x2289, 0x81F9,
+ 0x228A, 0x81FA, 0x107D, 0x81FB, 0x1332, 0x81FC, 0x0408, 0x81FE, 0x0677,
+ 0x81FF, 0x1BDE, 0x8200, 0x0996, 0x8201, 0x1DBD, 0x8202, 0x0B71, 0x8204,
+ 0x228B, 0x8205, 0x0ED9, 0x8207, 0x107E, 0x8208, 0x1333, 0x8209, 0x1458,
+ 0x820A, 0x151A, 0x820B, 0x30EE, 0x820C, 0x0409, 0x820D, 0x0678, 0x8210,
+ 0x0997, 0x8211, 0x2013, 0x8212, 0x0D2C, 0x8214, 0x107F, 0x8215, 0x27A5,
+ 0x8216, 0x29D5, 0x821B, 0x040A, 0x821C, 0x0D2D, 0x821D, 0x2529, 0x821E,
+ 0x1080, 0x821F, 0x040B, 0x8220, 0x1A2E, 0x8221, 0x1BDF, 0x8222, 0x07E8,
+ 0x8225, 0x1DBF, 0x8228, 0x099A, 0x822A, 0x0998, 0x822B, 0x0999, 0x822C,
+ 0x099B, 0x822F, 0x1DBE, 0x8232, 0x2018, 0x8233, 0x2015, 0x8234, 0x2017,
+ 0x8235, 0x0B72, 0x8236, 0x0B74, 0x8237, 0x0B73, 0x8238, 0x2014, 0x8239,
+ 0x0B75, 0x823A, 0x2016, 0x823C, 0x228C, 0x823D, 0x228D, 0x823F, 0x228E,
+ 0x8240, 0x252C, 0x8242, 0x252D, 0x8244, 0x252B, 0x8245, 0x252E, 0x8247,
+ 0x0EDA, 0x8249, 0x252A, 0x824B, 0x1081, 0x824E, 0x29DA, 0x824F, 0x29D6,
+ 0x8250, 0x29D9, 0x8251, 0x29DB, 0x8252, 0x29D8, 0x8253, 0x29D7, 0x8255,
+ 0x2C3C, 0x8256, 0x2C3D, 0x8257, 0x2C3E, 0x8258, 0x1334, 0x8259, 0x1335,
+ 0x825A, 0x2E0F, 0x825B, 0x2E0E, 0x825C, 0x2E10, 0x825E, 0x2F96, 0x825F,
+ 0x2F95, 0x8261, 0x30F0, 0x8263, 0x30F1, 0x8264, 0x30EF, 0x8266, 0x1636,
+ 0x8268, 0x321D, 0x8269, 0x321E, 0x826B, 0x33A6, 0x826C, 0x342D, 0x826D,
+ 0x3496, 0x826E, 0x040C, 0x826F, 0x0504, 0x8271, 0x1459, 0x8272, 0x040D,
+ 0x8274, 0x2019, 0x8275, 0x228F, 0x8277, 0x172E, 0x8278, 0x1813, 0x827C,
+ 0x1814, 0x827D, 0x1816, 0x827E, 0x040E, 0x827F, 0x1817, 0x8280, 0x1815,
+ 0x8283, 0x18E5, 0x8284, 0x18E6, 0x8285, 0x18E0, 0x828A, 0x18E4, 0x828B,
+ 0x0506, 0x828D, 0x0507, 0x828E, 0x18E1, 0x828F, 0x18DF, 0x8290, 0x18DE,
+ 0x8291, 0x18E2, 0x8292, 0x0505, 0x8293, 0x18E3, 0x8294, 0x1BE0, 0x8298,
+ 0x1A33, 0x8299, 0x067B, 0x829A, 0x1A32, 0x829B, 0x1A34, 0x829D, 0x067A,
+ 0x829E, 0x1A39, 0x829F, 0x067E, 0x82A0, 0x1A2F, 0x82A1, 0x1A3D, 0x82A2,
+ 0x1A43, 0x82A3, 0x0685, 0x82A4, 0x1A40, 0x82A5, 0x0682, 0x82A7, 0x1A36,
+ 0x82A8, 0x1A3C, 0x82A9, 0x1A3E, 0x82AB, 0x1A31, 0x82AC, 0x0681, 0x82AD,
+ 0x067C, 0x82AE, 0x1A37, 0x82AF, 0x0683, 0x82B0, 0x0686, 0x82B1, 0x0680,
+ 0x82B3, 0x0679, 0x82B4, 0x1A3B, 0x82B5, 0x1A35, 0x82B6, 0x1A42, 0x82B7,
+ 0x0688, 0x82B8, 0x0684, 0x82B9, 0x067F, 0x82BA, 0x1A3A, 0x82BB, 0x099C,
+ 0x82BC, 0x1A38, 0x82BD, 0x067D, 0x82BE, 0x0687, 0x82C0, 0x1A30, 0x82C2,
+ 0x1A3F, 0x82C3, 0x1A41, 0x82D1, 0x07F9, 0x82D2, 0x07F3, 0x82D3, 0x07FB,
+ 0x82D4, 0x07F8, 0x82D5, 0x1BE7, 0x82D6, 0x1BEA, 0x82D7, 0x07F4, 0x82D9,
+ 0x1BE1, 0x82DB, 0x07ED, 0x82DC, 0x07F7, 0x82DE, 0x07FA, 0x82DF, 0x07FC,
+ 0x82E0, 0x1BF6, 0x82E1, 0x1BED, 0x82E3, 0x07EC, 0x82E4, 0x1BF5, 0x82E5,
+ 0x07F0, 0x82E6, 0x07EE, 0x82E7, 0x07E9, 0x82E8, 0x1BE5, 0x82EA, 0x1BF4,
+ 0x82EB, 0x1BE9, 0x82EC, 0x1BEC, 0x82ED, 0x1BF9, 0x82EF, 0x07FD, 0x82F0,
+ 0x1BF3, 0x82F1, 0x07F5, 0x82F2, 0x1BEE, 0x82F3, 0x1BF8, 0x82F4, 0x1BEB,
+ 0x82F5, 0x1BEF, 0x82F6, 0x1BF2, 0x82F9, 0x1BE3, 0x82FA, 0x1BF7, 0x82FB,
+ 0x1BF1, 0x82FE, 0x1BE2, 0x8300, 0x1BE6, 0x8301, 0x07F6, 0x8302, 0x07F1,
+ 0x8303, 0x07EA, 0x8304, 0x07EF, 0x8305, 0x07EB, 0x8306, 0x07FE, 0x8307,
+ 0x1BE4, 0x8308, 0x1DD0, 0x8309, 0x07F2, 0x830C, 0x1BF0, 0x830D, 0x1A7D,
+ 0x8316, 0x1DD3, 0x8317, 0x09AA, 0x8319, 0x1DC3, 0x831B, 0x1DCE, 0x831C,
+ 0x1DCA, 0x831E, 0x1DDD, 0x8320, 0x1DD5, 0x8322, 0x1DCB, 0x8324, 0x1DD4,
+ 0x8325, 0x1DC5, 0x8326, 0x1DC9, 0x8327, 0x1DE0, 0x8328, 0x09AD, 0x8329,
+ 0x1DD8, 0x832A, 0x1DCF, 0x832B, 0x099D, 0x832C, 0x1DDE, 0x832D, 0x1DC1,
+ 0x832F, 0x1DD7, 0x8331, 0x09AC, 0x8332, 0x09A7, 0x8333, 0x1DC0, 0x8334,
+ 0x09A5, 0x8335, 0x09A4, 0x8336, 0x09A9, 0x8337, 0x1DD6, 0x8338, 0x09A1,
+ 0x8339, 0x09A8, 0x833A, 0x1BE8, 0x833B, 0x2290, 0x833C, 0x1DD1, 0x833F,
+ 0x1DC7, 0x8340, 0x09AB, 0x8341, 0x1DC8, 0x8342, 0x1DCC, 0x8343, 0x09AE,
+ 0x8344, 0x1DC2, 0x8345, 0x1DDA, 0x8347, 0x1DD9, 0x8348, 0x1DE1, 0x8349,
+ 0x09A3, 0x834A, 0x09A0, 0x834B, 0x1DDF, 0x834C, 0x1DDB, 0x834D, 0x1DD2,
+ 0x834E, 0x1DCD, 0x834F, 0x09A6, 0x8350, 0x09A2, 0x8351, 0x1DC4, 0x8352,
+ 0x099E, 0x8353, 0x1DDC, 0x8354, 0x099F, 0x8356, 0x1DC6, 0x8373, 0x201F,
+ 0x8374, 0x2021, 0x8375, 0x2026, 0x8376, 0x203A, 0x8377, 0x0B83, 0x8378,
+ 0x0B79, 0x837A, 0x201E, 0x837B, 0x0B84, 0x837C, 0x0B85, 0x837D, 0x2029,
+ 0x837E, 0x2030, 0x837F, 0x2036, 0x8381, 0x2023, 0x8383, 0x202A, 0x8386,
+ 0x0B86, 0x8387, 0x2038, 0x8388, 0x2033, 0x8389, 0x0B81, 0x838A, 0x0B7F,
+ 0x838B, 0x202F, 0x838C, 0x202B, 0x838D, 0x201D, 0x838E, 0x0B76, 0x838F,
+ 0x2022, 0x8390, 0x201A, 0x8392, 0x0B7E, 0x8393, 0x0B80, 0x8394, 0x2027,
+ 0x8395, 0x2024, 0x8396, 0x0B7B, 0x8397, 0x2034, 0x8398, 0x0B78, 0x8399,
+ 0x2025, 0x839A, 0x22B9, 0x839B, 0x202D, 0x839D, 0x202C, 0x839E, 0x0B77,
+ 0x83A0, 0x0B82, 0x83A2, 0x0B7A, 0x83A3, 0x201B, 0x83A4, 0x2020, 0x83A5,
+ 0x2031, 0x83A6, 0x2037, 0x83A7, 0x0B87, 0x83A8, 0x201C, 0x83A9, 0x2028,
+ 0x83AA, 0x202E, 0x83AB, 0x0B7D, 0x83AE, 0x2039, 0x83AF, 0x2032, 0x83B0,
+ 0x2035, 0x83BD, 0x0B7C, 0x83BF, 0x22A0, 0x83C0, 0x2294, 0x83C1, 0x0D35,
+ 0x83C2, 0x22B1, 0x83C3, 0x22BA, 0x83C4, 0x22BD, 0x83C5, 0x0D33, 0x83C6,
+ 0x229C, 0x83C7, 0x22B5, 0x83C8, 0x229D, 0x83C9, 0x22AB, 0x83CA, 0x0D40,
+ 0x83CB, 0x22A7, 0x83CC, 0x0D3D, 0x83CE, 0x22A8, 0x83CF, 0x2291, 0x83D1,
+ 0x22B6, 0x83D4, 0x0D46, 0x83D5, 0x22B3, 0x83D6, 0x22A9, 0x83D7, 0x22BF,
+ 0x83D8, 0x22A4, 0x83D9, 0x254E, 0x83DB, 0x22C2, 0x83DC, 0x0D44, 0x83DD,
+ 0x22A2, 0x83DE, 0x22AE, 0x83DF, 0x0D47, 0x83E0, 0x0D32, 0x83E1, 0x22A6,
+ 0x83E2, 0x22C0, 0x83E3, 0x229F, 0x83E4, 0x2298, 0x83E5, 0x22A3, 0x83E7,
+ 0x2297, 0x83E8, 0x2295, 0x83E9, 0x0D2E, 0x83EA, 0x22B7, 0x83EB, 0x229E,
+ 0x83EC, 0x22BB, 0x83EE, 0x22BC, 0x83EF, 0x0D36, 0x83F0, 0x0D3B, 0x83F1,
+ 0x0D37, 0x83F2, 0x0D3F, 0x83F3, 0x22B2, 0x83F4, 0x0D38, 0x83F5, 0x22AA,
+ 0x83F6, 0x229A, 0x83F8, 0x0D30, 0x83F9, 0x2292, 0x83FA, 0x22B4, 0x83FB,
+ 0x22BE, 0x83FC, 0x2299, 0x83FD, 0x0D3E, 0x83FE, 0x22C3, 0x83FF, 0x22A5,
+ 0x8401, 0x22A1, 0x8403, 0x0D2F, 0x8404, 0x0D43, 0x8406, 0x22B0, 0x8407,
+ 0x0D45, 0x8409, 0x22AC, 0x840A, 0x0D3A, 0x840B, 0x0D34, 0x840C, 0x0D3C,
+ 0x840D, 0x0D31, 0x840E, 0x0D42, 0x840F, 0x22AD, 0x8410, 0x229B, 0x8411,
+ 0x22AF, 0x8412, 0x2296, 0x8413, 0x22B8, 0x841B, 0x22C1, 0x8423, 0x2293,
+ 0x8429, 0x254D, 0x842B, 0x2563, 0x842C, 0x0EAC, 0x842D, 0x2552, 0x842F,
+ 0x2550, 0x8430, 0x253B, 0x8431, 0x0EDE, 0x8432, 0x254B, 0x8433, 0x255F,
+ 0x8434, 0x2547, 0x8435, 0x0EE6, 0x8436, 0x255E, 0x8437, 0x2545, 0x8438,
+ 0x0D41, 0x8439, 0x2555, 0x843A, 0x2546, 0x843B, 0x255C, 0x843C, 0x0EE5,
+ 0x843D, 0x0EDD, 0x843F, 0x2530, 0x8440, 0x2538, 0x8442, 0x2551, 0x8443,
+ 0x2549, 0x8444, 0x2562, 0x8445, 0x254C, 0x8446, 0x0EEB, 0x8447, 0x255D,
+ 0x8449, 0x0EE2, 0x844B, 0x254F, 0x844C, 0x2557, 0x844D, 0x253C, 0x844E,
+ 0x2556, 0x8450, 0x2567, 0x8451, 0x2537, 0x8452, 0x2558, 0x8454, 0x2565,
+ 0x8456, 0x2531, 0x8457, 0x0D39, 0x8459, 0x253F, 0x845A, 0x253E, 0x845B,
+ 0x0EE4, 0x845D, 0x2542, 0x845E, 0x2544, 0x845F, 0x2553, 0x8460, 0x2564,
+ 0x8461, 0x0EE7, 0x8463, 0x0EE8, 0x8465, 0x2536, 0x8466, 0x0EE0, 0x8467,
+ 0x253A, 0x8468, 0x2560, 0x8469, 0x0EE9, 0x846B, 0x0EE1, 0x846C, 0x0EE3,
+ 0x846D, 0x0EEA, 0x846E, 0x2566, 0x846F, 0x2559, 0x8470, 0x2554, 0x8473,
+ 0x2541, 0x8474, 0x2540, 0x8475, 0x0EDF, 0x8476, 0x2532, 0x8477, 0x0EDC,
+ 0x8478, 0x254A, 0x8479, 0x2533, 0x847A, 0x2548, 0x847D, 0x253D, 0x847E,
+ 0x2561, 0x8482, 0x0EDB, 0x8486, 0x2539, 0x848D, 0x2535, 0x848E, 0x255B,
+ 0x848F, 0x2534, 0x8490, 0x108E, 0x8491, 0x27CD, 0x8494, 0x27BC, 0x8497,
+ 0x27A6, 0x8498, 0x27C4, 0x8499, 0x1086, 0x849A, 0x27B5, 0x849B, 0x27BF,
+ 0x849C, 0x1089, 0x849D, 0x27B8, 0x849E, 0x1087, 0x849F, 0x27A9, 0x84A0,
+ 0x27C7, 0x84A1, 0x27A8, 0x84A2, 0x27BB, 0x84A4, 0x27A7, 0x84A7, 0x27B9,
+ 0x84A8, 0x27C2, 0x84A9, 0x27C0, 0x84AA, 0x27B4, 0x84AB, 0x27AF, 0x84AC,
+ 0x27AD, 0x84AE, 0x27AE, 0x84AF, 0x27C1, 0x84B0, 0x27CC, 0x84B1, 0x27B6,
+ 0x84B2, 0x1088, 0x84B4, 0x27B1, 0x84B6, 0x27C5, 0x84B8, 0x108B, 0x84B9,
+ 0x27B0, 0x84BA, 0x27AA, 0x84BB, 0x27BA, 0x84BC, 0x108F, 0x84BF, 0x1083,
+ 0x84C0, 0x108C, 0x84C1, 0x27B2, 0x84C2, 0x27AC, 0x84C4, 0x1085, 0x84C5,
+ 0x255A, 0x84C6, 0x1084, 0x84C7, 0x27BD, 0x84C9, 0x1082, 0x84CA, 0x1091,
+ 0x84CB, 0x108A, 0x84CC, 0x27BE, 0x84CD, 0x27B3, 0x84CE, 0x27AB, 0x84CF,
+ 0x27C6, 0x84D0, 0x27B7, 0x84D1, 0x1090, 0x84D2, 0x27CA, 0x84D3, 0x108D,
+ 0x84D4, 0x27C9, 0x84D6, 0x27C3, 0x84D7, 0x27C8, 0x84DB, 0x27CB, 0x84E7,
+ 0x2A03, 0x84E8, 0x2A04, 0x84E9, 0x29F7, 0x84EA, 0x29F6, 0x84EB, 0x29F2,
+ 0x84EC, 0x11FB, 0x84EE, 0x11F3, 0x84EF, 0x2A06, 0x84F0, 0x2A05, 0x84F1,
+ 0x252F, 0x84F2, 0x29EF, 0x84F3, 0x29F3, 0x84F4, 0x29ED, 0x84F6, 0x2A00,
+ 0x84F7, 0x29F1, 0x84F9, 0x2A07, 0x84FA, 0x29EA, 0x84FB, 0x29E8, 0x84FC,
+ 0x29F4, 0x84FD, 0x29FE, 0x84FE, 0x29F9, 0x84FF, 0x11FD, 0x8500, 0x29DF,
+ 0x8502, 0x29FD, 0x8506, 0x11FE, 0x8507, 0x2543, 0x8508, 0x29EB, 0x8509,
+ 0x29E2, 0x850A, 0x29E5, 0x850B, 0x2A0B, 0x850C, 0x29EC, 0x850D, 0x29E3,
+ 0x850E, 0x29E1, 0x850F, 0x29DE, 0x8511, 0x11F7, 0x8512, 0x29F5, 0x8513,
+ 0x11F6, 0x8514, 0x11FA, 0x8515, 0x29F0, 0x8516, 0x29F8, 0x8517, 0x11F0,
+ 0x8518, 0x2A08, 0x8519, 0x2A0C, 0x851A, 0x11F2, 0x851C, 0x29E7, 0x851D,
+ 0x29FB, 0x851E, 0x29FF, 0x851F, 0x29E4, 0x8520, 0x2A09, 0x8521, 0x11F9,
+ 0x8523, 0x11F8, 0x8524, 0x29DC, 0x8525, 0x11FC, 0x8526, 0x2A02, 0x8527,
+ 0x29E6, 0x8528, 0x29FA, 0x8529, 0x29E0, 0x852A, 0x29EE, 0x852B, 0x29E9,
+ 0x852C, 0x11F4, 0x852D, 0x11F5, 0x852E, 0x29FC, 0x852F, 0x2A0D, 0x8530,
+ 0x2A0A, 0x8531, 0x2A01, 0x853B, 0x29DD, 0x853D, 0x11F1, 0x853E, 0x2C4F,
+ 0x8540, 0x2C46, 0x8541, 0x2C49, 0x8543, 0x133B, 0x8544, 0x2C4B, 0x8545,
+ 0x2C40, 0x8546, 0x2C47, 0x8547, 0x2C4D, 0x8548, 0x1338, 0x8549, 0x133C,
+ 0x854A, 0x1336, 0x854D, 0x2C42, 0x854E, 0x2C52, 0x8551, 0x2C4C, 0x8553,
+ 0x2C43, 0x8554, 0x2C5B, 0x8555, 0x2C55, 0x8556, 0x2C3F, 0x8557, 0x2E23,
+ 0x8558, 0x2C45, 0x8559, 0x1337, 0x855B, 0x2C50, 0x855D, 0x2C5A, 0x855E,
+ 0x133F, 0x8560, 0x2C57, 0x8561, 0x2C44, 0x8562, 0x2C4A, 0x8563, 0x2C4E,
+ 0x8564, 0x2C48, 0x8565, 0x2C5C, 0x8566, 0x2C59, 0x8567, 0x2C56, 0x8568,
+ 0x1339, 0x8569, 0x133A, 0x856A, 0x133E, 0x856B, 0x2C41, 0x856C, 0x2C5D,
+ 0x856D, 0x133D, 0x856E, 0x2C53, 0x8571, 0x2C51, 0x8575, 0x2C54, 0x8576,
+ 0x2E30, 0x8577, 0x2E1D, 0x8578, 0x2E22, 0x8579, 0x2E2F, 0x857A, 0x2E21,
+ 0x857B, 0x2E19, 0x857C, 0x2E1E, 0x857E, 0x145C, 0x8580, 0x2E12, 0x8581,
+ 0x2E2A, 0x8582, 0x2E2C, 0x8583, 0x2E11, 0x8584, 0x145B, 0x8585, 0x2E2E,
+ 0x8586, 0x2E26, 0x8587, 0x1462, 0x8588, 0x2E2D, 0x8589, 0x2E1F, 0x858A,
+ 0x1464, 0x858B, 0x2E17, 0x858C, 0x2C58, 0x858D, 0x2E27, 0x858E, 0x2E24,
+ 0x858F, 0x2E13, 0x8590, 0x2E32, 0x8591, 0x145E, 0x8594, 0x145F, 0x8595,
+ 0x2E15, 0x8596, 0x2E25, 0x8598, 0x2E31, 0x8599, 0x2E28, 0x859A, 0x2E1B,
+ 0x859B, 0x1461, 0x859C, 0x145D, 0x859D, 0x2E29, 0x859E, 0x2E1C, 0x859F,
+ 0x2E33, 0x85A0, 0x2E16, 0x85A1, 0x2E20, 0x85A2, 0x2E2B, 0x85A3, 0x2E18,
+ 0x85A4, 0x2E1A, 0x85A6, 0x1465, 0x85A7, 0x2E14, 0x85A8, 0x1463, 0x85A9,
+ 0x151C, 0x85AA, 0x145A, 0x85AF, 0x1460, 0x85B0, 0x1520, 0x85B1, 0x2FA6,
+ 0x85B3, 0x2F9C, 0x85B4, 0x2F97, 0x85B5, 0x2F9D, 0x85B6, 0x2FA7, 0x85B7,
+ 0x2FAB, 0x85B8, 0x2FAA, 0x85B9, 0x1522, 0x85BA, 0x1521, 0x85BD, 0x2F9E,
+ 0x85BE, 0x2FAC, 0x85BF, 0x2FA1, 0x85C0, 0x2F99, 0x85C2, 0x2F9B, 0x85C3,
+ 0x2F9A, 0x85C4, 0x2FA0, 0x85C5, 0x2FA5, 0x85C6, 0x2F98, 0x85C7, 0x2F9F,
+ 0x85C8, 0x2FA4, 0x85C9, 0x151F, 0x85CB, 0x2FA2, 0x85CD, 0x151D, 0x85CE,
+ 0x2FA3, 0x85CF, 0x151B, 0x85D0, 0x151E, 0x85D1, 0x3101, 0x85D2, 0x2FA8,
+ 0x85D5, 0x15B7, 0x85D7, 0x30F9, 0x85D8, 0x30FD, 0x85D9, 0x30F5, 0x85DA,
+ 0x30F8, 0x85DC, 0x3100, 0x85DD, 0x15B5, 0x85DE, 0x3105, 0x85DF, 0x30FE,
+ 0x85E1, 0x30F6, 0x85E2, 0x3106, 0x85E3, 0x30FF, 0x85E4, 0x15B8, 0x85E5,
+ 0x15B9, 0x85E6, 0x3103, 0x85E8, 0x30F7, 0x85E9, 0x15B4, 0x85EA, 0x15B6,
+ 0x85EB, 0x30F2, 0x85EC, 0x30FA, 0x85ED, 0x30F4, 0x85EF, 0x3104, 0x85F0,
+ 0x3102, 0x85F1, 0x30F3, 0x85F2, 0x30FB, 0x85F6, 0x3225, 0x85F7, 0x15BA,
+ 0x85F8, 0x30FC, 0x85F9, 0x1638, 0x85FA, 0x163A, 0x85FB, 0x1637, 0x85FD,
+ 0x322A, 0x85FE, 0x3222, 0x85FF, 0x3220, 0x8600, 0x3224, 0x8601, 0x3221,
+ 0x8604, 0x3226, 0x8605, 0x3228, 0x8606, 0x163B, 0x8607, 0x163D, 0x8609,
+ 0x3227, 0x860A, 0x163E, 0x860B, 0x163C, 0x860C, 0x3229, 0x8611, 0x1639,
+ 0x8617, 0x1685, 0x8618, 0x32F6, 0x8619, 0x32FC, 0x861A, 0x1687, 0x861B,
+ 0x3223, 0x861C, 0x32FB, 0x861E, 0x3302, 0x861F, 0x32F9, 0x8620, 0x3300,
+ 0x8621, 0x32FF, 0x8622, 0x321F, 0x8623, 0x32FA, 0x8624, 0x2FA9, 0x8625,
+ 0x3303, 0x8626, 0x32F8, 0x8627, 0x32FD, 0x8629, 0x3301, 0x862A, 0x32F7,
+ 0x862C, 0x33AA, 0x862D, 0x1686, 0x862E, 0x32FE, 0x8631, 0x3432, 0x8632,
+ 0x33AB, 0x8633, 0x33A9, 0x8634, 0x33A7, 0x8635, 0x33A8, 0x8636, 0x33AC,
+ 0x8638, 0x1707, 0x8639, 0x3430, 0x863A, 0x342E, 0x863B, 0x3433, 0x863C,
+ 0x3431, 0x863E, 0x3434, 0x863F, 0x1708, 0x8640, 0x342F, 0x8643, 0x3497,
+ 0x8646, 0x34DF, 0x8647, 0x34E0, 0x8648, 0x34E1, 0x864B, 0x353E, 0x864C,
+ 0x3536, 0x864D, 0x1818, 0x864E, 0x0689, 0x8650, 0x07FF, 0x8652, 0x1DE3,
+ 0x8653, 0x1DE2, 0x8654, 0x09AF, 0x8655, 0x0B88, 0x8656, 0x203C, 0x8659,
+ 0x203B, 0x865B, 0x0D48, 0x865C, 0x0EED, 0x865E, 0x0EEC, 0x865F, 0x0EEE,
+ 0x8661, 0x27CE, 0x8662, 0x2A0E, 0x8663, 0x2C5E, 0x8664, 0x2C60, 0x8665,
+ 0x2C5F, 0x8667, 0x1466, 0x8668, 0x2E34, 0x8669, 0x2FAD, 0x866A, 0x351E,
+ 0x866B, 0x040F, 0x866D, 0x1A46, 0x866E, 0x1A47, 0x866F, 0x1A45, 0x8670,
+ 0x1A44, 0x8671, 0x068A, 0x8673, 0x1BFD, 0x8674, 0x1BFB, 0x8677, 0x1BFA,
+ 0x8679, 0x0800, 0x867A, 0x0802, 0x867B, 0x0801, 0x867C, 0x1BFC, 0x8685,
+ 0x1DEF, 0x8686, 0x1DEC, 0x8687, 0x1DEA, 0x868A, 0x09B0, 0x868B, 0x1DED,
+ 0x868C, 0x09B5, 0x868D, 0x1DE7, 0x868E, 0x1DF6, 0x8690, 0x1DF8, 0x8691,
+ 0x1DE8, 0x8693, 0x09B2, 0x8694, 0x1DF9, 0x8695, 0x1DF4, 0x8696, 0x1DE6,
+ 0x8697, 0x1DEB, 0x8698, 0x1DF5, 0x8699, 0x1DF1, 0x869A, 0x1DEE, 0x869C,
+ 0x09B7, 0x869D, 0x1DF7, 0x869E, 0x1DE9, 0x86A1, 0x1DF2, 0x86A2, 0x1DE4,
+ 0x86A3, 0x09B6, 0x86A4, 0x09B3, 0x86A5, 0x1DF0, 0x86A7, 0x1DF3, 0x86A8,
+ 0x1DE5, 0x86A9, 0x09B4, 0x86AA, 0x09B1, 0x86AF, 0x0B92, 0x86B0, 0x2043,
+ 0x86B1, 0x0B91, 0x86B3, 0x2046, 0x86B4, 0x2049, 0x86B5, 0x0B8E, 0x86B6,
+ 0x0B8C, 0x86B7, 0x203E, 0x86B8, 0x2047, 0x86B9, 0x2045, 0x86BA, 0x2042,
+ 0x86BB, 0x204A, 0x86BC, 0x204B, 0x86BD, 0x204D, 0x86BE, 0x204E, 0x86BF,
+ 0x203D, 0x86C0, 0x0B8B, 0x86C1, 0x2040, 0x86C2, 0x203F, 0x86C3, 0x204C,
+ 0x86C4, 0x0B8D, 0x86C5, 0x2041, 0x86C6, 0x0B8F, 0x86C7, 0x0B8A, 0x86C8,
+ 0x2044, 0x86C9, 0x0B93, 0x86CB, 0x0B90, 0x86CC, 0x2048, 0x86D0, 0x0D4F,
+ 0x86D1, 0x22D2, 0x86D3, 0x22C7, 0x86D4, 0x0D4C, 0x86D6, 0x256D, 0x86D7,
+ 0x22D0, 0x86D8, 0x22C4, 0x86D9, 0x0D4A, 0x86DA, 0x22C9, 0x86DB, 0x0D4D,
+ 0x86DC, 0x22CD, 0x86DD, 0x22CB, 0x86DE, 0x0D50, 0x86DF, 0x0D49, 0x86E2,
+ 0x22C5, 0x86E3, 0x22C8, 0x86E4, 0x0D4E, 0x86E6, 0x22C6, 0x86E8, 0x22D1,
+ 0x86E9, 0x22CF, 0x86EA, 0x22CA, 0x86EB, 0x22CC, 0x86EC, 0x22CE, 0x86ED,
+ 0x0D4B, 0x86F5, 0x256E, 0x86F6, 0x2574, 0x86F7, 0x256A, 0x86F8, 0x2570,
+ 0x86F9, 0x0EEF, 0x86FA, 0x256C, 0x86FB, 0x0EF5, 0x86FE, 0x0EF4, 0x8700,
+ 0x0EF3, 0x8701, 0x2573, 0x8702, 0x0EF6, 0x8703, 0x0EF7, 0x8704, 0x2569,
+ 0x8705, 0x2576, 0x8706, 0x0EF8, 0x8707, 0x0EF2, 0x8708, 0x0EF1, 0x8709,
+ 0x2572, 0x870A, 0x0EF9, 0x870B, 0x2568, 0x870C, 0x256B, 0x870D, 0x2575,
+ 0x870E, 0x2571, 0x8711, 0x27EE, 0x8712, 0x27E3, 0x8713, 0x0EF0, 0x8718,
+ 0x1098, 0x8719, 0x27D7, 0x871A, 0x27EC, 0x871B, 0x27D8, 0x871C, 0x1093,
+ 0x871E, 0x27D5, 0x8720, 0x27DE, 0x8721, 0x27D6, 0x8722, 0x1095, 0x8723,
+ 0x27D0, 0x8724, 0x27EB, 0x8725, 0x1096, 0x8726, 0x27E8, 0x8727, 0x27E9,
+ 0x8728, 0x27D1, 0x8729, 0x109B, 0x872A, 0x27E0, 0x872C, 0x27DA, 0x872D,
+ 0x27E1, 0x872E, 0x27D4, 0x8730, 0x27ED, 0x8731, 0x27E5, 0x8732, 0x27DF,
+ 0x8733, 0x27CF, 0x8734, 0x1097, 0x8735, 0x27E6, 0x8737, 0x109A, 0x8738,
+ 0x27EA, 0x873A, 0x27E4, 0x873B, 0x1094, 0x873C, 0x27E2, 0x873E, 0x27DC,
+ 0x873F, 0x1092, 0x8740, 0x27D3, 0x8741, 0x27DB, 0x8742, 0x27E7, 0x8743,
+ 0x27D9, 0x8746, 0x27DD, 0x874C, 0x1208, 0x874D, 0x256F, 0x874E, 0x2A20,
+ 0x874F, 0x2A29, 0x8750, 0x2A1F, 0x8751, 0x2A1B, 0x8752, 0x2A18, 0x8753,
+ 0x1209, 0x8754, 0x2A16, 0x8755, 0x1099, 0x8756, 0x2A0F, 0x8757, 0x1207,
+ 0x8758, 0x2A15, 0x8759, 0x1206, 0x875A, 0x2A1A, 0x875B, 0x2A17, 0x875C,
+ 0x2A27, 0x875D, 0x2A22, 0x875E, 0x2A1C, 0x875F, 0x2A21, 0x8760, 0x1202,
+ 0x8761, 0x2A19, 0x8762, 0x2A2C, 0x8763, 0x2A10, 0x8764, 0x2A11, 0x8765,
+ 0x2A28, 0x8766, 0x1203, 0x8767, 0x2A2D, 0x8768, 0x1205, 0x8769, 0x2A2E,
+ 0x876A, 0x2A1E, 0x876B, 0x27D2, 0x876C, 0x2A24, 0x876D, 0x2A1D, 0x876E,
+ 0x2A26, 0x876F, 0x2A23, 0x8773, 0x2A14, 0x8774, 0x1200, 0x8775, 0x2A2B,
+ 0x8776, 0x1201, 0x8777, 0x2A12, 0x8778, 0x1204, 0x8779, 0x2C6B, 0x877A,
+ 0x2A25, 0x877B, 0x2A2A, 0x8781, 0x2C68, 0x8782, 0x11FF, 0x8783, 0x1340,
+ 0x8784, 0x2C72, 0x8785, 0x2C6E, 0x8787, 0x2C6C, 0x8788, 0x2C67, 0x8789,
+ 0x2C76, 0x878D, 0x1344, 0x878F, 0x2C63, 0x8790, 0x2C6F, 0x8791, 0x2C70,
+ 0x8792, 0x2C66, 0x8793, 0x2C65, 0x8794, 0x2C73, 0x8796, 0x2C69, 0x8797,
+ 0x2C64, 0x8798, 0x2C6A, 0x879A, 0x2C75, 0x879B, 0x2C62, 0x879C, 0x2C74,
+ 0x879D, 0x2C71, 0x879E, 0x1342, 0x879F, 0x1341, 0x87A2, 0x1343, 0x87A3,
+ 0x2C6D, 0x87A4, 0x2C61, 0x87AA, 0x2E36, 0x87AB, 0x146C, 0x87AC, 0x2E3A,
+ 0x87AD, 0x2E37, 0x87AE, 0x2E3E, 0x87AF, 0x2E44, 0x87B0, 0x2E39, 0x87B2,
+ 0x2E4D, 0x87B3, 0x1469, 0x87B4, 0x2E47, 0x87B5, 0x2E3C, 0x87B6, 0x2E48,
+ 0x87B7, 0x2E43, 0x87B8, 0x2E4A, 0x87B9, 0x2E3B, 0x87BA, 0x146E, 0x87BB,
+ 0x146D, 0x87BC, 0x2E3D, 0x87BD, 0x2E4B, 0x87BE, 0x2E35, 0x87BF, 0x2E49,
+ 0x87C0, 0x1467, 0x87C2, 0x2E41, 0x87C3, 0x2E40, 0x87C4, 0x2E45, 0x87C5,
+ 0x2E38, 0x87C6, 0x146B, 0x87C8, 0x146F, 0x87C9, 0x2E3F, 0x87CA, 0x2E46,
+ 0x87CB, 0x1470, 0x87CC, 0x2E42, 0x87D1, 0x1468, 0x87D2, 0x146A, 0x87D3,
+ 0x2FBA, 0x87D4, 0x2FB8, 0x87D7, 0x2FBE, 0x87D8, 0x2FBC, 0x87D9, 0x2FBF,
+ 0x87DB, 0x2FB1, 0x87DC, 0x2FB9, 0x87DD, 0x2FC3, 0x87DE, 0x2E4C, 0x87DF,
+ 0x2FB5, 0x87E0, 0x1526, 0x87E1, 0x2A13, 0x87E2, 0x2FB0, 0x87E3, 0x2FBD,
+ 0x87E4, 0x2FB7, 0x87E5, 0x2FB4, 0x87E6, 0x2FAF, 0x87E7, 0x2FAE, 0x87E8,
+ 0x2FC2, 0x87EA, 0x2FB3, 0x87EB, 0x2FB2, 0x87EC, 0x1524, 0x87ED, 0x2FBB,
+ 0x87EF, 0x1523, 0x87F2, 0x1525, 0x87F3, 0x2FB6, 0x87F4, 0x2FC1, 0x87F6,
+ 0x310A, 0x87F7, 0x310B, 0x87F9, 0x15BE, 0x87FA, 0x3108, 0x87FB, 0x15BB,
+ 0x87FC, 0x3110, 0x87FE, 0x15BF, 0x87FF, 0x3112, 0x8800, 0x3107, 0x8801,
+ 0x2FC0, 0x8802, 0x3114, 0x8803, 0x3109, 0x8805, 0x15BC, 0x8806, 0x310F,
+ 0x8808, 0x3111, 0x8809, 0x310C, 0x880A, 0x3113, 0x880B, 0x310E, 0x880C,
+ 0x310D, 0x880D, 0x15BD, 0x8810, 0x322C, 0x8811, 0x322D, 0x8813, 0x322F,
+ 0x8814, 0x163F, 0x8815, 0x1640, 0x8816, 0x3230, 0x8817, 0x322E, 0x8819,
+ 0x322B, 0x881B, 0x3306, 0x881C, 0x3309, 0x881D, 0x3305, 0x881F, 0x168B,
+ 0x8820, 0x3307, 0x8821, 0x168A, 0x8822, 0x1689, 0x8823, 0x1688, 0x8824,
+ 0x3308, 0x8825, 0x33B1, 0x8826, 0x33AF, 0x8828, 0x33AE, 0x8829, 0x3304,
+ 0x882A, 0x33B0, 0x882B, 0x330A, 0x882C, 0x33AD, 0x882E, 0x3437, 0x882F,
+ 0x3415, 0x8830, 0x3435, 0x8831, 0x1709, 0x8832, 0x3436, 0x8833, 0x3438,
+ 0x8835, 0x349A, 0x8836, 0x1728, 0x8837, 0x3499, 0x8838, 0x3498, 0x8839,
+ 0x1729, 0x883B, 0x1747, 0x883C, 0x3508, 0x883D, 0x3520, 0x883E, 0x351F,
+ 0x883F, 0x3521, 0x8840, 0x0410, 0x8841, 0x1BFE, 0x8843, 0x1DFA, 0x8844,
+ 0x1DFB, 0x8848, 0x22D3, 0x884A, 0x330B, 0x884B, 0x349B, 0x884C, 0x0411,
+ 0x884D, 0x0803, 0x884E, 0x1BFF, 0x8852, 0x204F, 0x8853, 0x0B94, 0x8855,
+ 0x22D5, 0x8856, 0x22D4, 0x8857, 0x0D51, 0x8859, 0x0EFA, 0x885A, 0x2A2F,
+ 0x885B, 0x120A, 0x885D, 0x120B, 0x8861, 0x1345, 0x8862, 0x172A, 0x8863,
+ 0x0412, 0x8867, 0x1C00, 0x8868, 0x068C, 0x8869, 0x1C02, 0x886A, 0x1C01,
+ 0x886B, 0x0804, 0x886D, 0x1DFC, 0x886F, 0x1E03, 0x8870, 0x09B8, 0x8871,
+ 0x1E01, 0x8872, 0x1DFF, 0x8874, 0x1E06, 0x8875, 0x1DFD, 0x8876, 0x1DFE,
+ 0x8877, 0x09B9, 0x8879, 0x09BD, 0x887C, 0x1E07, 0x887D, 0x09BC, 0x887E,
+ 0x1E05, 0x887F, 0x1E02, 0x8880, 0x1E00, 0x8881, 0x09BA, 0x8882, 0x09BB,
+ 0x8883, 0x1E04, 0x8888, 0x0B96, 0x8889, 0x2050, 0x888B, 0x0B9B, 0x888C,
+ 0x2060, 0x888D, 0x0B9A, 0x888E, 0x2062, 0x8891, 0x2056, 0x8892, 0x0B98,
+ 0x8893, 0x2061, 0x8895, 0x2051, 0x8896, 0x0B99, 0x8897, 0x205D, 0x8898,
+ 0x2059, 0x8899, 0x205B, 0x889A, 0x2055, 0x889B, 0x205C, 0x889E, 0x0B95,
+ 0x889F, 0x2058, 0x88A1, 0x2057, 0x88A2, 0x2053, 0x88A4, 0x205E, 0x88A7,
+ 0x205A, 0x88A8, 0x2052, 0x88AA, 0x2054, 0x88AB, 0x0B97, 0x88AC, 0x205F,
+ 0x88B1, 0x0D54, 0x88B2, 0x22E0, 0x88B6, 0x22DC, 0x88B7, 0x22DE, 0x88B8,
+ 0x22D9, 0x88B9, 0x22D8, 0x88BA, 0x22D6, 0x88BC, 0x22DD, 0x88BD, 0x22DF,
+ 0x88BE, 0x22DB, 0x88C0, 0x22DA, 0x88C1, 0x0D52, 0x88C2, 0x0D53, 0x88C9,
+ 0x22E2, 0x88CA, 0x0F02, 0x88CB, 0x2578, 0x88CC, 0x257E, 0x88CD, 0x2579,
+ 0x88CE, 0x257A, 0x88CF, 0x36EA, 0x88D0, 0x257F, 0x88D2, 0x0F04, 0x88D4,
+ 0x0EFC, 0x88D5, 0x0F03, 0x88D6, 0x2577, 0x88D7, 0x22D7, 0x88D8, 0x0EFF,
+ 0x88D9, 0x0EFD, 0x88DA, 0x257D, 0x88DB, 0x257C, 0x88DC, 0x0EFE, 0x88DD,
+ 0x0F00, 0x88DE, 0x257B, 0x88DF, 0x0EFB, 0x88E1, 0x0F01, 0x88E7, 0x27F0,
+ 0x88E8, 0x10A2, 0x88EB, 0x27FB, 0x88EC, 0x27FA, 0x88EE, 0x27F5, 0x88EF,
+ 0x10A4, 0x88F0, 0x27F9, 0x88F1, 0x27F1, 0x88F2, 0x27F2, 0x88F3, 0x109C,
+ 0x88F4, 0x109E, 0x88F6, 0x27F7, 0x88F7, 0x27EF, 0x88F8, 0x10A0, 0x88F9,
+ 0x109F, 0x88FA, 0x27F3, 0x88FB, 0x27F8, 0x88FC, 0x27F6, 0x88FD, 0x10A1,
+ 0x88FE, 0x27F4, 0x8901, 0x22E1, 0x8902, 0x109D, 0x8905, 0x2A30, 0x8906,
+ 0x2A37, 0x8907, 0x120D, 0x8909, 0x2A3B, 0x890A, 0x1211, 0x890B, 0x2A33,
+ 0x890C, 0x2A31, 0x890E, 0x2A3A, 0x8910, 0x120C, 0x8911, 0x2A39, 0x8912,
+ 0x120E, 0x8913, 0x120F, 0x8914, 0x2A32, 0x8915, 0x1210, 0x8916, 0x2A38,
+ 0x8917, 0x2A34, 0x8918, 0x2A35, 0x8919, 0x2A36, 0x891A, 0x10A3, 0x891E,
+ 0x2C77, 0x891F, 0x2C83, 0x8921, 0x134A, 0x8922, 0x2C7E, 0x8923, 0x2C80,
+ 0x8925, 0x1348, 0x8926, 0x2C78, 0x8927, 0x2C7C, 0x8929, 0x2C7F, 0x892A,
+ 0x1346, 0x892B, 0x1349, 0x892C, 0x2C82, 0x892D, 0x2C7A, 0x892E, 0x2C7B,
+ 0x892F, 0x2C81, 0x8930, 0x2C79, 0x8931, 0x2C7D, 0x8932, 0x1347, 0x8933,
+ 0x2E4F, 0x8935, 0x2E4E, 0x8936, 0x1472, 0x8937, 0x2E54, 0x8938, 0x1474,
+ 0x893B, 0x1471, 0x893C, 0x2E50, 0x893D, 0x1475, 0x893E, 0x2E51, 0x8941,
+ 0x2E52, 0x8942, 0x2E55, 0x8944, 0x1473, 0x8946, 0x2FC8, 0x8949, 0x2FCB,
+ 0x894B, 0x2FC5, 0x894C, 0x2FC7, 0x894F, 0x2FC6, 0x8950, 0x2FC9, 0x8951,
+ 0x2FCA, 0x8952, 0x2E53, 0x8953, 0x2FC4, 0x8956, 0x15C2, 0x8957, 0x3118,
+ 0x8958, 0x311B, 0x8959, 0x311D, 0x895A, 0x3116, 0x895B, 0x3117, 0x895C,
+ 0x311A, 0x895D, 0x311C, 0x895E, 0x15C3, 0x895F, 0x15C1, 0x8960, 0x15C0,
+ 0x8961, 0x3119, 0x8962, 0x3115, 0x8963, 0x3231, 0x8964, 0x1641, 0x8966,
+ 0x3232, 0x8969, 0x330D, 0x896A, 0x168C, 0x896B, 0x330F, 0x896C, 0x168D,
+ 0x896D, 0x330C, 0x896E, 0x330E, 0x896F, 0x16D6, 0x8971, 0x33B2, 0x8972,
+ 0x16D5, 0x8973, 0x343B, 0x8974, 0x343A, 0x8976, 0x3439, 0x8979, 0x34E2,
+ 0x897A, 0x34E3, 0x897B, 0x34E5, 0x897C, 0x34E4, 0x897E, 0x1819, 0x897F,
+ 0x0413, 0x8981, 0x0805, 0x8982, 0x2063, 0x8983, 0x0D55, 0x8985, 0x2580,
+ 0x8986, 0x1527, 0x8988, 0x311E, 0x898B, 0x0508, 0x898F, 0x0B9D, 0x8993,
+ 0x0B9C, 0x8995, 0x22E3, 0x8996, 0x0D56, 0x8997, 0x22E5, 0x8998, 0x22E4,
+ 0x899B, 0x2581, 0x899C, 0x0F05, 0x899D, 0x27FC, 0x899E, 0x27FF, 0x899F,
+ 0x27FE, 0x89A1, 0x27FD, 0x89A2, 0x2A3C, 0x89A3, 0x2A3E, 0x89A4, 0x2A3D,
+ 0x89A6, 0x134C, 0x89AA, 0x134B, 0x89AC, 0x1476, 0x89AD, 0x2E56, 0x89AE,
+ 0x2E58, 0x89AF, 0x2E57, 0x89B2, 0x1528, 0x89B6, 0x3120, 0x89B7, 0x311F,
+ 0x89B9, 0x3233, 0x89BA, 0x1642, 0x89BD, 0x168E, 0x89BE, 0x33B4, 0x89BF,
+ 0x33B3, 0x89C0, 0x1748, 0x89D2, 0x0509, 0x89D3, 0x1C03, 0x89D4, 0x0806,
+ 0x89D5, 0x2066, 0x89D6, 0x2064, 0x89D9, 0x2065, 0x89DA, 0x22E7, 0x89DB,
+ 0x22E8, 0x89DC, 0x2588, 0x89DD, 0x22E6, 0x89DF, 0x2582, 0x89E0, 0x2586,
+ 0x89E1, 0x2585, 0x89E2, 0x2587, 0x89E3, 0x0F06, 0x89E4, 0x2584, 0x89E5,
+ 0x2583, 0x89E6, 0x2589, 0x89E8, 0x2802, 0x89E9, 0x2800, 0x89EB, 0x2801,
+ 0x89EC, 0x2A41, 0x89ED, 0x2A3F, 0x89F0, 0x2A40, 0x89F1, 0x2C84, 0x89F2,
+ 0x2E59, 0x89F3, 0x2E5A, 0x89F4, 0x1529, 0x89F6, 0x3121, 0x89F7, 0x3234,
+ 0x89F8, 0x1643, 0x89FA, 0x3310, 0x89FB, 0x33B5, 0x89FC, 0x16D7, 0x89FE,
+ 0x343C, 0x89FF, 0x34E6, 0x8A00, 0x050A, 0x8A02, 0x0808, 0x8A03, 0x0809,
+ 0x8A04, 0x1C04, 0x8A07, 0x1C05, 0x8A08, 0x0807, 0x8A0A, 0x09C3, 0x8A0C,
+ 0x09C1, 0x8A0E, 0x09C0, 0x8A0F, 0x09C7, 0x8A10, 0x09BF, 0x8A11, 0x09C8,
+ 0x8A12, 0x1E08, 0x8A13, 0x09C5, 0x8A15, 0x09C2, 0x8A16, 0x09C6, 0x8A17,
+ 0x09C4, 0x8A18, 0x09BE, 0x8A1B, 0x0BA5, 0x8A1D, 0x0B9F, 0x8A1E, 0x206A,
+ 0x8A1F, 0x0BA4, 0x8A22, 0x0BA6, 0x8A23, 0x0BA0, 0x8A25, 0x0BA1, 0x8A27,
+ 0x2068, 0x8A2A, 0x0B9E, 0x8A2C, 0x2069, 0x8A2D, 0x0BA3, 0x8A30, 0x2067,
+ 0x8A31, 0x0BA2, 0x8A34, 0x0D61, 0x8A36, 0x0D63, 0x8A39, 0x22EB, 0x8A3A,
+ 0x0D62, 0x8A3B, 0x0D57, 0x8A3C, 0x0D5B, 0x8A3E, 0x0F19, 0x8A3F, 0x258E,
+ 0x8A40, 0x22ED, 0x8A41, 0x0D5C, 0x8A44, 0x22F0, 0x8A45, 0x22F1, 0x8A46,
+ 0x0D60, 0x8A48, 0x22F3, 0x8A4A, 0x22F5, 0x8A4C, 0x22F6, 0x8A4D, 0x22EA,
+ 0x8A4E, 0x22E9, 0x8A4F, 0x22F7, 0x8A50, 0x0D5F, 0x8A51, 0x22F4, 0x8A52,
+ 0x22F2, 0x8A54, 0x0D5D, 0x8A55, 0x0D59, 0x8A56, 0x0D64, 0x8A57, 0x22EE,
+ 0x8A58, 0x22EF, 0x8A59, 0x22EC, 0x8A5B, 0x0D5E, 0x8A5E, 0x0D5A, 0x8A60,
+ 0x0D58, 0x8A61, 0x258D, 0x8A62, 0x0F14, 0x8A63, 0x0F0F, 0x8A66, 0x0F0A,
+ 0x8A68, 0x0F1A, 0x8A69, 0x0F0B, 0x8A6B, 0x0F07, 0x8A6C, 0x0F16, 0x8A6D,
+ 0x0F13, 0x8A6E, 0x0F15, 0x8A70, 0x0F0C, 0x8A71, 0x0F11, 0x8A72, 0x0F08,
+ 0x8A73, 0x0F09, 0x8A74, 0x2595, 0x8A75, 0x2592, 0x8A76, 0x258A, 0x8A77,
+ 0x258F, 0x8A79, 0x0F17, 0x8A7A, 0x2596, 0x8A7B, 0x0F18, 0x8A7C, 0x0F0E,
+ 0x8A7F, 0x258C, 0x8A81, 0x2594, 0x8A82, 0x2590, 0x8A83, 0x2593, 0x8A84,
+ 0x2591, 0x8A85, 0x0F12, 0x8A86, 0x258B, 0x8A87, 0x0F0D, 0x8A8B, 0x2805,
+ 0x8A8C, 0x10A6, 0x8A8D, 0x10A9, 0x8A8F, 0x2807, 0x8A91, 0x10B1, 0x8A92,
+ 0x2806, 0x8A93, 0x10AB, 0x8A95, 0x1216, 0x8A96, 0x2808, 0x8A98, 0x10B0,
+ 0x8A99, 0x2804, 0x8A9A, 0x10B2, 0x8A9E, 0x10A7, 0x8AA0, 0x0F10, 0x8AA1,
+ 0x10AA, 0x8AA3, 0x10A8, 0x8AA4, 0x10AC, 0x8AA5, 0x10AE, 0x8AA6, 0x10A5,
+ 0x8AA7, 0x10B3, 0x8AA8, 0x10AF, 0x8AAA, 0x10AD, 0x8AAB, 0x2803, 0x8AB0,
+ 0x121D, 0x8AB2, 0x1219, 0x8AB6, 0x1220, 0x8AB8, 0x2A44, 0x8AB9, 0x1221,
+ 0x8ABA, 0x2A50, 0x8ABB, 0x2A49, 0x8ABC, 0x1212, 0x8ABD, 0x2A51, 0x8ABE,
+ 0x2A4B, 0x8ABF, 0x121C, 0x8AC0, 0x2A4C, 0x8AC2, 0x121B, 0x8AC3, 0x2A4F,
+ 0x8AC4, 0x1215, 0x8AC5, 0x2A4D, 0x8AC6, 0x2A43, 0x8AC7, 0x1214, 0x8AC8,
+ 0x2C8F, 0x8AC9, 0x121A, 0x8ACB, 0x1217, 0x8ACD, 0x121F, 0x8ACF, 0x2A42,
+ 0x8AD1, 0x2A46, 0x8AD2, 0x1213, 0x8AD3, 0x2A45, 0x8AD4, 0x2A47, 0x8AD5,
+ 0x2A48, 0x8AD6, 0x121E, 0x8AD7, 0x2A4A, 0x8AD8, 0x2A4E, 0x8AD9, 0x2A52,
+ 0x8ADB, 0x1222, 0x8ADC, 0x1352, 0x8ADD, 0x2C8A, 0x8ADE, 0x2C90, 0x8ADF,
+ 0x2C8D, 0x8AE0, 0x2C85, 0x8AE1, 0x2C91, 0x8AE2, 0x2C86, 0x8AE4, 0x2C8C,
+ 0x8AE6, 0x134D, 0x8AE7, 0x1353, 0x8AE8, 0x2C92, 0x8AEB, 0x134F, 0x8AED,
+ 0x1359, 0x8AEE, 0x1354, 0x8AEF, 0x2C94, 0x8AF0, 0x2C8E, 0x8AF1, 0x1350,
+ 0x8AF2, 0x2C87, 0x8AF3, 0x135A, 0x8AF4, 0x2C88, 0x8AF5, 0x2C89, 0x8AF6,
+ 0x135B, 0x8AF7, 0x1358, 0x8AF8, 0x1218, 0x8AFA, 0x134E, 0x8AFB, 0x2C95,
+ 0x8AFC, 0x135C, 0x8AFE, 0x1355, 0x8AFF, 0x2C93, 0x8B00, 0x1351, 0x8B01,
+ 0x1356, 0x8B02, 0x1357, 0x8B04, 0x147E, 0x8B05, 0x2E5F, 0x8B06, 0x2E68,
+ 0x8B07, 0x2E65, 0x8B08, 0x2E67, 0x8B0A, 0x147B, 0x8B0B, 0x2E60, 0x8B0D,
+ 0x2E66, 0x8B0E, 0x1477, 0x8B0F, 0x2E62, 0x8B10, 0x147F, 0x8B11, 0x2E5E,
+ 0x8B12, 0x2E63, 0x8B13, 0x2E6A, 0x8B14, 0x2C8B, 0x8B15, 0x2E64, 0x8B16,
+ 0x2E5D, 0x8B17, 0x1478, 0x8B18, 0x2E5C, 0x8B19, 0x1479, 0x8B1A, 0x2E6B,
+ 0x8B1B, 0x147A, 0x8B1C, 0x2E69, 0x8B1D, 0x147D, 0x8B1E, 0x2E5B, 0x8B20,
+ 0x147C, 0x8B22, 0x2E61, 0x8B23, 0x2FCE, 0x8B24, 0x2FDC, 0x8B25, 0x2FD7,
+ 0x8B26, 0x2FD9, 0x8B27, 0x2FCD, 0x8B28, 0x152A, 0x8B2A, 0x2FCC, 0x8B2B,
+ 0x152D, 0x8B2C, 0x152C, 0x8B2E, 0x2FDB, 0x8B2F, 0x2FD3, 0x8B30, 0x2FD0,
+ 0x8B31, 0x2FD6, 0x8B33, 0x2FCF, 0x8B35, 0x2FD1, 0x8B36, 0x2FDA, 0x8B37,
+ 0x2FD8, 0x8B39, 0x152B, 0x8B3A, 0x2FDF, 0x8B3B, 0x2FDD, 0x8B3C, 0x2FD4,
+ 0x8B3D, 0x2FDE, 0x8B3E, 0x2FD5, 0x8B40, 0x3125, 0x8B41, 0x15C4, 0x8B42,
+ 0x312C, 0x8B45, 0x3313, 0x8B46, 0x15CB, 0x8B47, 0x2FD2, 0x8B48, 0x3123,
+ 0x8B49, 0x15C7, 0x8B4A, 0x3124, 0x8B4B, 0x3129, 0x8B4E, 0x15C9, 0x8B4F,
+ 0x15CA, 0x8B50, 0x3122, 0x8B51, 0x312B, 0x8B52, 0x312D, 0x8B53, 0x3126,
+ 0x8B54, 0x3128, 0x8B55, 0x312A, 0x8B56, 0x3127, 0x8B57, 0x312E, 0x8B58,
+ 0x15C6, 0x8B59, 0x15CC, 0x8B5A, 0x15C8, 0x8B5C, 0x15C5, 0x8B5D, 0x3237,
+ 0x8B5F, 0x1648, 0x8B60, 0x3235, 0x8B63, 0x3239, 0x8B65, 0x323A, 0x8B66,
+ 0x1646, 0x8B67, 0x323B, 0x8B68, 0x3238, 0x8B6A, 0x3236, 0x8B6B, 0x1649,
+ 0x8B6C, 0x1645, 0x8B6D, 0x323C, 0x8B6F, 0x1647, 0x8B70, 0x1644, 0x8B74,
+ 0x168F, 0x8B77, 0x1690, 0x8B78, 0x3312, 0x8B79, 0x3311, 0x8B7A, 0x3314,
+ 0x8B7B, 0x3315, 0x8B7D, 0x1691, 0x8B7E, 0x33B6, 0x8B7F, 0x33BB, 0x8B80,
+ 0x16D8, 0x8B82, 0x33B8, 0x8B84, 0x33B7, 0x8B85, 0x33BA, 0x8B86, 0x33B9,
+ 0x8B88, 0x3440, 0x8B8A, 0x170A, 0x8B8B, 0x343F, 0x8B8C, 0x343D, 0x8B8E,
+ 0x343E, 0x8B92, 0x172C, 0x8B93, 0x172B, 0x8B94, 0x349C, 0x8B95, 0x349D,
+ 0x8B96, 0x172D, 0x8B98, 0x34E7, 0x8B99, 0x34E8, 0x8B9A, 0x1754, 0x8B9C,
+ 0x175A, 0x8B9E, 0x3522, 0x8B9F, 0x353F, 0x8C37, 0x050B, 0x8C39, 0x206B,
+ 0x8C3B, 0x206C, 0x8C3C, 0x2597, 0x8C3D, 0x2809, 0x8C3E, 0x2A53, 0x8C3F,
+ 0x1481, 0x8C41, 0x1480, 0x8C42, 0x2FE0, 0x8C43, 0x312F, 0x8C45, 0x3441,
+ 0x8C46, 0x050C, 0x8C47, 0x1E09, 0x8C48, 0x09C9, 0x8C49, 0x0BA7, 0x8C4A,
+ 0x2599, 0x8C4B, 0x2598, 0x8C4C, 0x1223, 0x8C4D, 0x2A54, 0x8C4E, 0x1224,
+ 0x8C4F, 0x2E6C, 0x8C50, 0x152E, 0x8C54, 0x1763, 0x8C55, 0x050D, 0x8C56,
+ 0x1A48, 0x8C57, 0x1E0A, 0x8C5A, 0x0BA8, 0x8C5C, 0x206D, 0x8C5D, 0x206E,
+ 0x8C5F, 0x22F8, 0x8C61, 0x0D65, 0x8C62, 0x0F1B, 0x8C64, 0x259B, 0x8C65,
+ 0x259A, 0x8C66, 0x259C, 0x8C68, 0x280A, 0x8C69, 0x280B, 0x8C6A, 0x10B4,
+ 0x8C6B, 0x135D, 0x8C6C, 0x1225, 0x8C6D, 0x135E, 0x8C6F, 0x2E70, 0x8C70,
+ 0x2E6D, 0x8C71, 0x2E6F, 0x8C72, 0x2E6E, 0x8C73, 0x1482, 0x8C75, 0x2FE1,
+ 0x8C76, 0x3131, 0x8C77, 0x3130, 0x8C78, 0x18E7, 0x8C79, 0x09CB, 0x8C7A,
+ 0x09CA, 0x8C7B, 0x1E0B, 0x8C7D, 0x206F, 0x8C80, 0x22FA, 0x8C81, 0x22F9,
+ 0x8C82, 0x0D66, 0x8C84, 0x259E, 0x8C85, 0x259F, 0x8C86, 0x259D, 0x8C89,
+ 0x0F1D, 0x8C8A, 0x0F1C, 0x8C8C, 0x10B6, 0x8C8D, 0x10B5, 0x8C8F, 0x2A55,
+ 0x8C90, 0x2C98, 0x8C91, 0x2C96, 0x8C92, 0x2C97, 0x8C93, 0x135F, 0x8C94,
+ 0x2E72, 0x8C95, 0x2E71, 0x8C97, 0x2FE4, 0x8C98, 0x2FE3, 0x8C99, 0x2FE2,
+ 0x8C9A, 0x3132, 0x8C9C, 0x3523, 0x8C9D, 0x050E, 0x8C9E, 0x080A, 0x8CA0,
+ 0x080B, 0x8CA1, 0x09CC, 0x8CA2, 0x09CD, 0x8CA3, 0x1E0D, 0x8CA4, 0x1E0C,
+ 0x8CA5, 0x2070, 0x8CA7, 0x0BAE, 0x8CA8, 0x0BAC, 0x8CA9, 0x0BA9, 0x8CAA,
+ 0x0BAD, 0x8CAB, 0x0BAB, 0x8CAC, 0x0BAA, 0x8CAF, 0x0D67, 0x8CB0, 0x22FD,
+ 0x8CB2, 0x0F22, 0x8CB3, 0x0D69, 0x8CB4, 0x0D6E, 0x8CB5, 0x22FF, 0x8CB6,
+ 0x0D70, 0x8CB7, 0x0D6F, 0x8CB8, 0x0D72, 0x8CB9, 0x22FE, 0x8CBA, 0x22FB,
+ 0x8CBB, 0x0D6C, 0x8CBC, 0x0D68, 0x8CBD, 0x0D6A, 0x8CBE, 0x22FC, 0x8CBF,
+ 0x0D71, 0x8CC0, 0x0D6D, 0x8CC1, 0x0D6B, 0x8CC2, 0x0F24, 0x8CC3, 0x0F23,
+ 0x8CC4, 0x0F21, 0x8CC5, 0x0F25, 0x8CC7, 0x0F1F, 0x8CC8, 0x0F20, 0x8CCA,
+ 0x0F1E, 0x8CCC, 0x25A0, 0x8CCF, 0x280D, 0x8CD1, 0x10B8, 0x8CD2, 0x10B9,
+ 0x8CD3, 0x10B7, 0x8CD5, 0x280C, 0x8CD7, 0x280E, 0x8CD9, 0x2A58, 0x8CDA,
+ 0x2A5A, 0x8CDC, 0x122E, 0x8CDD, 0x2A5B, 0x8CDE, 0x1227, 0x8CDF, 0x2A57,
+ 0x8CE0, 0x1226, 0x8CE1, 0x1230, 0x8CE2, 0x122C, 0x8CE3, 0x122D, 0x8CE4,
+ 0x1229, 0x8CE5, 0x2A56, 0x8CE6, 0x1228, 0x8CE7, 0x2A5C, 0x8CE8, 0x2A59,
+ 0x8CEA, 0x122F, 0x8CEC, 0x122A, 0x8CED, 0x122B, 0x8CEE, 0x2C9A, 0x8CF0,
+ 0x2C9C, 0x8CF1, 0x2C9B, 0x8CF3, 0x2C9D, 0x8CF4, 0x1360, 0x8CF5, 0x2C99,
+ 0x8CF8, 0x1486, 0x8CF9, 0x2E73, 0x8CFA, 0x1483, 0x8CFB, 0x1487, 0x8CFC,
+ 0x1485, 0x8CFD, 0x1484, 0x8CFE, 0x2FE5, 0x8D00, 0x2FE8, 0x8D02, 0x2FE7,
+ 0x8D04, 0x2FE6, 0x8D05, 0x152F, 0x8D06, 0x3133, 0x8D07, 0x3134, 0x8D08,
+ 0x15CD, 0x8D09, 0x3135, 0x8D0A, 0x15CE, 0x8D0D, 0x164B, 0x8D0F, 0x164A,
+ 0x8D10, 0x3316, 0x8D13, 0x1692, 0x8D14, 0x3317, 0x8D15, 0x33BC, 0x8D16,
+ 0x16D9, 0x8D17, 0x16DA, 0x8D19, 0x3442, 0x8D1B, 0x172F, 0x8D64, 0x050F,
+ 0x8D66, 0x0BB0, 0x8D67, 0x0BAF, 0x8D68, 0x25A1, 0x8D69, 0x25A2, 0x8D6B,
+ 0x10BA, 0x8D6C, 0x2C9E, 0x8D6D, 0x1231, 0x8D6E, 0x2C9F, 0x8D6F, 0x2E74,
+ 0x8D70, 0x0510, 0x8D72, 0x1C06, 0x8D73, 0x080D, 0x8D74, 0x080C, 0x8D76,
+ 0x1E0E, 0x8D77, 0x09CE, 0x8D78, 0x1E0F, 0x8D79, 0x2073, 0x8D7B, 0x2072,
+ 0x8D7D, 0x2071, 0x8D80, 0x2301, 0x8D81, 0x0D75, 0x8D84, 0x2300, 0x8D85,
+ 0x0D74, 0x8D89, 0x2302, 0x8D8A, 0x0D73, 0x8D8C, 0x25A4, 0x8D8D, 0x25A7,
+ 0x8D8E, 0x25A5, 0x8D8F, 0x25A6, 0x8D90, 0x25AA, 0x8D91, 0x25A3, 0x8D92,
+ 0x25AB, 0x8D93, 0x25A8, 0x8D94, 0x25A9, 0x8D95, 0x10BC, 0x8D96, 0x280F,
+ 0x8D99, 0x10BB, 0x8D9B, 0x2A60, 0x8D9C, 0x2A5E, 0x8D9F, 0x1232, 0x8DA0,
+ 0x2A5D, 0x8DA1, 0x2A5F, 0x8DA3, 0x1233, 0x8DA5, 0x2CA0, 0x8DA7, 0x2CA1,
+ 0x8DA8, 0x1488, 0x8DAA, 0x3137, 0x8DAB, 0x3139, 0x8DAC, 0x3136, 0x8DAD,
+ 0x3138, 0x8DAE, 0x323D, 0x8DAF, 0x3318, 0x8DB2, 0x3509, 0x8DB3, 0x0511,
+ 0x8DB4, 0x080E, 0x8DB5, 0x1E10, 0x8DB6, 0x1E12, 0x8DB7, 0x1E11, 0x8DB9,
+ 0x2076, 0x8DBA, 0x0BB2, 0x8DBC, 0x2074, 0x8DBE, 0x0BB1, 0x8DBF, 0x2077,
+ 0x8DC1, 0x2078, 0x8DC2, 0x2075, 0x8DC5, 0x230E, 0x8DC6, 0x0D7D, 0x8DC7,
+ 0x2306, 0x8DC8, 0x230C, 0x8DCB, 0x0D78, 0x8DCC, 0x0D7B, 0x8DCD, 0x2305,
+ 0x8DCE, 0x0D76, 0x8DCF, 0x2309, 0x8DD0, 0x25B1, 0x8DD1, 0x0D7A, 0x8DD3,
+ 0x2304, 0x8DD5, 0x230A, 0x8DD6, 0x2307, 0x8DD7, 0x230D, 0x8DD8, 0x2303,
+ 0x8DD9, 0x230B, 0x8DDA, 0x0D79, 0x8DDB, 0x0D7C, 0x8DDC, 0x2308, 0x8DDD,
+ 0x0D77, 0x8DDF, 0x0F27, 0x8DE0, 0x25AD, 0x8DE1, 0x0F26, 0x8DE2, 0x25B4,
+ 0x8DE3, 0x25B3, 0x8DE4, 0x0F2D, 0x8DE6, 0x0F2E, 0x8DE7, 0x25B5, 0x8DE8,
+ 0x0F28, 0x8DE9, 0x25B2, 0x8DEA, 0x0F2C, 0x8DEB, 0x25B7, 0x8DEC, 0x25AE,
+ 0x8DEE, 0x25B0, 0x8DEF, 0x0F29, 0x8DF0, 0x25AC, 0x8DF1, 0x25AF, 0x8DF2,
+ 0x25B6, 0x8DF3, 0x0F2A, 0x8DF4, 0x25B8, 0x8DFA, 0x0F2B, 0x8DFC, 0x10BD,
+ 0x8DFD, 0x2814, 0x8DFE, 0x281A, 0x8DFF, 0x2812, 0x8E00, 0x281B, 0x8E02,
+ 0x2811, 0x8E03, 0x2816, 0x8E04, 0x281C, 0x8E05, 0x2819, 0x8E06, 0x2818,
+ 0x8E07, 0x2817, 0x8E09, 0x2810, 0x8E0A, 0x2815, 0x8E0D, 0x2813, 0x8E0F,
+ 0x1238, 0x8E10, 0x1235, 0x8E11, 0x2A69, 0x8E12, 0x2A6E, 0x8E13, 0x2A70,
+ 0x8E14, 0x2A6D, 0x8E15, 0x2A66, 0x8E16, 0x2A68, 0x8E17, 0x2A72, 0x8E18,
+ 0x2A6F, 0x8E19, 0x2A6A, 0x8E1A, 0x2A73, 0x8E1B, 0x2A67, 0x8E1C, 0x2A71,
+ 0x8E1D, 0x1236, 0x8E1E, 0x123C, 0x8E1F, 0x123A, 0x8E20, 0x2A61, 0x8E21,
+ 0x123B, 0x8E22, 0x1237, 0x8E23, 0x2A62, 0x8E24, 0x2A64, 0x8E25, 0x2A63,
+ 0x8E26, 0x2A6B, 0x8E27, 0x2A6C, 0x8E29, 0x1239, 0x8E2B, 0x1234, 0x8E2E,
+ 0x2A65, 0x8E30, 0x2CAB, 0x8E31, 0x1362, 0x8E33, 0x2CA2, 0x8E34, 0x1363,
+ 0x8E35, 0x1366, 0x8E36, 0x2CA7, 0x8E38, 0x2CA4, 0x8E39, 0x1365, 0x8E3C,
+ 0x2CA8, 0x8E3D, 0x2CA9, 0x8E3E, 0x2CA3, 0x8E3F, 0x2CAC, 0x8E40, 0x2CA5,
+ 0x8E41, 0x2CAA, 0x8E42, 0x1364, 0x8E44, 0x1361, 0x8E45, 0x2CA6, 0x8E47,
+ 0x2E7A, 0x8E48, 0x148B, 0x8E49, 0x1489, 0x8E4A, 0x148C, 0x8E4B, 0x148A,
+ 0x8E4C, 0x2E79, 0x8E4D, 0x2E76, 0x8E4E, 0x2E75, 0x8E50, 0x2E78, 0x8E53,
+ 0x2E77, 0x8E54, 0x2FF6, 0x8E55, 0x1535, 0x8E56, 0x2FED, 0x8E57, 0x2FEC,
+ 0x8E59, 0x1530, 0x8E5A, 0x2FF2, 0x8E5B, 0x2FF1, 0x8E5C, 0x2FE9, 0x8E5D,
+ 0x2FF4, 0x8E5E, 0x2FEE, 0x8E5F, 0x1534, 0x8E60, 0x2FEB, 0x8E61, 0x2FF3,
+ 0x8E62, 0x2FEA, 0x8E63, 0x1531, 0x8E64, 0x1533, 0x8E65, 0x2FEF, 0x8E66,
+ 0x1532, 0x8E67, 0x2FF0, 0x8E69, 0x2FF5, 0x8E6A, 0x313D, 0x8E6C, 0x15D3,
+ 0x8E6D, 0x313A, 0x8E6F, 0x313E, 0x8E72, 0x15D0, 0x8E73, 0x313C, 0x8E74,
+ 0x15D5, 0x8E76, 0x15D2, 0x8E78, 0x313B, 0x8E7A, 0x15D4, 0x8E7B, 0x313F,
+ 0x8E7C, 0x15CF, 0x8E81, 0x164D, 0x8E82, 0x164F, 0x8E84, 0x3240, 0x8E85,
+ 0x164E, 0x8E86, 0x323E, 0x8E87, 0x15D1, 0x8E88, 0x323F, 0x8E89, 0x164C,
+ 0x8E8A, 0x1693, 0x8E8B, 0x1695, 0x8E8C, 0x331A, 0x8E8D, 0x1694, 0x8E8E,
+ 0x3319, 0x8E90, 0x33C1, 0x8E91, 0x16DB, 0x8E92, 0x33C0, 0x8E93, 0x16DC,
+ 0x8E94, 0x33BE, 0x8E95, 0x33BD, 0x8E96, 0x33C2, 0x8E97, 0x33C3, 0x8E98,
+ 0x3443, 0x8E9A, 0x33BF, 0x8E9D, 0x34A1, 0x8E9E, 0x349E, 0x8E9F, 0x349F,
+ 0x8EA0, 0x34A0, 0x8EA1, 0x1749, 0x8EA3, 0x34EB, 0x8EA4, 0x34EA, 0x8EA5,
+ 0x34E9, 0x8EA6, 0x350A, 0x8EA8, 0x3537, 0x8EA9, 0x3524, 0x8EAA, 0x175B,
+ 0x8EAB, 0x0512, 0x8EAC, 0x09CF, 0x8EB2, 0x0F2F, 0x8EBA, 0x123D, 0x8EBD,
+ 0x2CAD, 0x8EC0, 0x1536, 0x8EC2, 0x3140, 0x8EC9, 0x3525, 0x8ECA, 0x0513,
+ 0x8ECB, 0x068D, 0x8ECC, 0x0810, 0x8ECD, 0x080F, 0x8ECF, 0x09D2, 0x8ED1,
+ 0x1E13, 0x8ED2, 0x09D0, 0x8ED3, 0x1E14, 0x8ED4, 0x09D1, 0x8ED7, 0x207D,
+ 0x8ED8, 0x2079, 0x8EDB, 0x0BB3, 0x8EDC, 0x207C, 0x8EDD, 0x207B, 0x8EDE,
+ 0x207A, 0x8EDF, 0x0BB4, 0x8EE0, 0x207E, 0x8EE1, 0x207F, 0x8EE5, 0x2315,
+ 0x8EE6, 0x2313, 0x8EE7, 0x2317, 0x8EE8, 0x2318, 0x8EE9, 0x231E, 0x8EEB,
+ 0x231A, 0x8EEC, 0x231C, 0x8EEE, 0x2314, 0x8EEF, 0x230F, 0x8EF1, 0x231B,
+ 0x8EF4, 0x231D, 0x8EF5, 0x2316, 0x8EF6, 0x2319, 0x8EF7, 0x2310, 0x8EF8,
+ 0x0D7F, 0x8EF9, 0x2312, 0x8EFA, 0x2311, 0x8EFB, 0x0D7E, 0x8EFC, 0x0D80,
+ 0x8EFE, 0x0F32, 0x8EFF, 0x25BA, 0x8F00, 0x25BC, 0x8F01, 0x25BB, 0x8F02,
+ 0x25C0, 0x8F03, 0x0F30, 0x8F05, 0x25BD, 0x8F06, 0x25B9, 0x8F07, 0x25BE,
+ 0x8F08, 0x25BF, 0x8F09, 0x0F31, 0x8F0A, 0x0F33, 0x8F0B, 0x25C1, 0x8F0D,
+ 0x2820, 0x8F0E, 0x281F, 0x8F10, 0x281D, 0x8F11, 0x281E, 0x8F12, 0x10BF,
+ 0x8F13, 0x10C1, 0x8F14, 0x10BE, 0x8F15, 0x10C0, 0x8F16, 0x2A7A, 0x8F17,
+ 0x2A7B, 0x8F18, 0x2A76, 0x8F1A, 0x2A77, 0x8F1B, 0x123F, 0x8F1C, 0x1244,
+ 0x8F1D, 0x123E, 0x8F1E, 0x1245, 0x8F1F, 0x1240, 0x8F20, 0x2A78, 0x8F23,
+ 0x2A79, 0x8F24, 0x2A75, 0x8F25, 0x1246, 0x8F26, 0x1242, 0x8F29, 0x1241,
+ 0x8F2A, 0x1243, 0x8F2C, 0x2A74, 0x8F2E, 0x2CAF, 0x8F2F, 0x1368, 0x8F32,
+ 0x2CB1, 0x8F33, 0x136A, 0x8F34, 0x2CB4, 0x8F35, 0x2CB0, 0x8F36, 0x2CAE,
+ 0x8F37, 0x2CB3, 0x8F38, 0x1369, 0x8F39, 0x2CB2, 0x8F3B, 0x1367, 0x8F3E,
+ 0x148E, 0x8F3F, 0x1491, 0x8F40, 0x2E7C, 0x8F42, 0x148F, 0x8F43, 0x2E7B,
+ 0x8F44, 0x148D, 0x8F45, 0x1490, 0x8F46, 0x2FF7, 0x8F47, 0x2FF8, 0x8F48,
+ 0x2FF9, 0x8F49, 0x1537, 0x8F4B, 0x2FFA, 0x8F4D, 0x1538, 0x8F4E, 0x15D7,
+ 0x8F4F, 0x3143, 0x8F50, 0x3144, 0x8F51, 0x3142, 0x8F52, 0x3141, 0x8F53,
+ 0x3145, 0x8F54, 0x15D6, 0x8F55, 0x3244, 0x8F56, 0x3242, 0x8F57, 0x3243,
+ 0x8F58, 0x3245, 0x8F59, 0x3241, 0x8F5A, 0x3246, 0x8F5B, 0x331C, 0x8F5D,
+ 0x331D, 0x8F5E, 0x331B, 0x8F5F, 0x1696, 0x8F60, 0x33C4, 0x8F61, 0x16DD,
+ 0x8F62, 0x33C5, 0x8F63, 0x3445, 0x8F64, 0x3444, 0x8F9B, 0x0514, 0x8F9C,
+ 0x0D81, 0x8F9F, 0x0F34, 0x8FA3, 0x10C2, 0x8FA6, 0x136C, 0x8FA8, 0x136B,
+ 0x8FAD, 0x15D8, 0x8FAE, 0x162F, 0x8FAF, 0x1697, 0x8FB0, 0x0515, 0x8FB1,
+ 0x09D3, 0x8FB2, 0x0F35, 0x8FB4, 0x3146, 0x8FB5, 0x0230, 0x8FBF, 0x18E9,
+ 0x8FC2, 0x0516, 0x8FC4, 0x0519, 0x8FC5, 0x0518, 0x8FC6, 0x0517, 0x8FC9,
+ 0x18E8, 0x8FCB, 0x1A4A, 0x8FCD, 0x1A4C, 0x8FCE, 0x068E, 0x8FD1, 0x0690,
+ 0x8FD2, 0x1A49, 0x8FD3, 0x1A4B, 0x8FD4, 0x068F, 0x8FD5, 0x1A4E, 0x8FD6,
+ 0x1A4D, 0x8FD7, 0x1A4F, 0x8FE0, 0x1C0A, 0x8FE1, 0x1C08, 0x8FE2, 0x0813,
+ 0x8FE3, 0x1C07, 0x8FE4, 0x0818, 0x8FE5, 0x0815, 0x8FE6, 0x0812, 0x8FE8,
+ 0x0819, 0x8FEA, 0x0814, 0x8FEB, 0x0817, 0x8FED, 0x0816, 0x8FEE, 0x1C09,
+ 0x8FF0, 0x0811, 0x8FF4, 0x09D9, 0x8FF5, 0x1E16, 0x8FF6, 0x1E1C, 0x8FF7,
+ 0x09D6, 0x8FF8, 0x09DD, 0x8FFA, 0x09D8, 0x8FFB, 0x1E19, 0x8FFC, 0x1E1B,
+ 0x8FFD, 0x09DB, 0x8FFE, 0x1E15, 0x8FFF, 0x1E18, 0x9000, 0x09D7, 0x9001,
+ 0x09D4, 0x9002, 0x1E17, 0x9003, 0x09DA, 0x9004, 0x1E1A, 0x9005, 0x09DC,
+ 0x9006, 0x09D5, 0x900B, 0x2081, 0x900C, 0x2084, 0x900D, 0x0BB6, 0x900F,
+ 0x0BC0, 0x9010, 0x0BBC, 0x9011, 0x2082, 0x9014, 0x0BC4, 0x9015, 0x0BBD,
+ 0x9016, 0x0BC2, 0x9017, 0x0BB8, 0x9019, 0x0BB5, 0x901A, 0x0BB7, 0x901B,
+ 0x0BC3, 0x901C, 0x2083, 0x901D, 0x0BBB, 0x901E, 0x0BBE, 0x901F, 0x0BBA,
+ 0x9020, 0x0BBF, 0x9021, 0x2085, 0x9022, 0x0BC1, 0x9023, 0x0BB9, 0x9024,
+ 0x2080, 0x902D, 0x231F, 0x902E, 0x0D82, 0x902F, 0x2321, 0x9031, 0x0D84,
+ 0x9032, 0x0D86, 0x9034, 0x2320, 0x9035, 0x0D83, 0x9036, 0x0D87, 0x9038,
+ 0x0D85, 0x903C, 0x0F3B, 0x903D, 0x25C6, 0x903E, 0x0F43, 0x903F, 0x25C3,
+ 0x9041, 0x0F44, 0x9042, 0x0F39, 0x9044, 0x25C4, 0x9047, 0x0F3E, 0x9049,
+ 0x25C5, 0x904A, 0x0F37, 0x904B, 0x0F36, 0x904D, 0x0F41, 0x904E, 0x0F40,
+ 0x904F, 0x0F3F, 0x9050, 0x0F3D, 0x9051, 0x0F42, 0x9052, 0x25C2, 0x9053,
+ 0x0F38, 0x9054, 0x0F3A, 0x9055, 0x0F3C, 0x9058, 0x10C4, 0x9059, 0x10C7,
+ 0x905B, 0x10CB, 0x905C, 0x10C5, 0x905D, 0x10CA, 0x905E, 0x10C8, 0x9060,
+ 0x10C3, 0x9062, 0x10C9, 0x9063, 0x10C6, 0x9067, 0x2A7F, 0x9068, 0x1249,
+ 0x9069, 0x1247, 0x906B, 0x2A80, 0x906D, 0x124A, 0x906E, 0x1248, 0x906F,
+ 0x2A7E, 0x9070, 0x2A7D, 0x9072, 0x1370, 0x9073, 0x2A7C, 0x9074, 0x136E,
+ 0x9075, 0x136D, 0x9076, 0x2CB5, 0x9077, 0x124B, 0x9078, 0x136F, 0x9079,
+ 0x2CB6, 0x907A, 0x1372, 0x907B, 0x2CB7, 0x907C, 0x1371, 0x907D, 0x1493,
+ 0x907E, 0x2E7E, 0x907F, 0x1492, 0x9080, 0x1497, 0x9081, 0x1495, 0x9082,
+ 0x1496, 0x9083, 0x153A, 0x9084, 0x1494, 0x9085, 0x2E7D, 0x9086, 0x2CB8,
+ 0x9087, 0x1539, 0x9088, 0x153B, 0x908A, 0x15D9, 0x908B, 0x15DA, 0x908D,
+ 0x3247, 0x908F, 0x170C, 0x9090, 0x170B, 0x9091, 0x051B, 0x9094, 0x181E,
+ 0x9095, 0x09DE, 0x9097, 0x181B, 0x9098, 0x181C, 0x9099, 0x181A, 0x909B,
+ 0x181D, 0x909E, 0x18ED, 0x909F, 0x18EA, 0x90A0, 0x18EF, 0x90A1, 0x18EB,
+ 0x90A2, 0x051C, 0x90A3, 0x051F, 0x90A5, 0x18EC, 0x90A6, 0x051E, 0x90A7,
+ 0x18EE, 0x90AA, 0x051D, 0x90AF, 0x1A52, 0x90B0, 0x1A54, 0x90B1, 0x0693,
+ 0x90B2, 0x1A50, 0x90B3, 0x1A53, 0x90B4, 0x1A51, 0x90B5, 0x0691, 0x90B6,
+ 0x0694, 0x90B8, 0x0692, 0x90BD, 0x1C0C, 0x90BE, 0x1C10, 0x90BF, 0x1C0D,
+ 0x90C1, 0x081C, 0x90C3, 0x081D, 0x90C5, 0x1C0F, 0x90C7, 0x1C11, 0x90C8,
+ 0x1C13, 0x90CA, 0x081A, 0x90CB, 0x1C12, 0x90CE, 0x081B, 0x90D4, 0x208C,
+ 0x90D5, 0x1C0E, 0x90D6, 0x1E1D, 0x90D7, 0x1E26, 0x90D8, 0x1E24, 0x90D9,
+ 0x1E1F, 0x90DA, 0x1E20, 0x90DB, 0x1E25, 0x90DC, 0x1E27, 0x90DD, 0x09E0,
+ 0x90DF, 0x1E22, 0x90E0, 0x1E1E, 0x90E1, 0x09DF, 0x90E2, 0x09E1, 0x90E3,
+ 0x1E21, 0x90E4, 0x1E28, 0x90E5, 0x1E23, 0x90E8, 0x0BC5, 0x90E9, 0x208F,
+ 0x90EA, 0x2087, 0x90EB, 0x208D, 0x90EC, 0x208E, 0x90ED, 0x0BC6, 0x90EF,
+ 0x2086, 0x90F0, 0x2088, 0x90F1, 0x1C0B, 0x90F2, 0x208A, 0x90F3, 0x208B,
+ 0x90F4, 0x2089, 0x90F5, 0x0D89, 0x90F9, 0x2328, 0x90FA, 0x2CB9, 0x90FB,
+ 0x2329, 0x90FC, 0x2326, 0x90FD, 0x0BC7, 0x90FE, 0x0D8B, 0x90FF, 0x2325,
+ 0x9100, 0x232B, 0x9101, 0x232A, 0x9102, 0x0D88, 0x9103, 0x232E, 0x9104,
+ 0x2324, 0x9105, 0x232D, 0x9106, 0x2322, 0x9107, 0x232C, 0x9108, 0x2327,
+ 0x9109, 0x0D8A, 0x910B, 0x25CD, 0x910D, 0x25C8, 0x910E, 0x25CE, 0x910F,
+ 0x25C9, 0x9110, 0x25C7, 0x9111, 0x25CA, 0x9112, 0x0F45, 0x9114, 0x25CC,
+ 0x9116, 0x25CB, 0x9117, 0x0F46, 0x9118, 0x10CD, 0x9119, 0x10CC, 0x911A,
+ 0x2827, 0x911B, 0x282A, 0x911C, 0x2822, 0x911D, 0x2826, 0x911E, 0x10CE,
+ 0x911F, 0x2825, 0x9120, 0x2823, 0x9121, 0x2829, 0x9122, 0x2824, 0x9123,
+ 0x2821, 0x9124, 0x2828, 0x9126, 0x2A86, 0x9127, 0x124E, 0x9128, 0x2FFB,
+ 0x9129, 0x2A83, 0x912A, 0x2A84, 0x912B, 0x2A82, 0x912C, 0x2323, 0x912D,
+ 0x124D, 0x912E, 0x2A87, 0x912F, 0x2A81, 0x9130, 0x124C, 0x9131, 0x124F,
+ 0x9132, 0x2A85, 0x9133, 0x2CBA, 0x9134, 0x1373, 0x9135, 0x2CBB, 0x9136,
+ 0x2CBC, 0x9138, 0x2E7F, 0x9139, 0x1498, 0x913A, 0x2FFC, 0x913B, 0x2FFD,
+ 0x913E, 0x2FFE, 0x913F, 0x3148, 0x9140, 0x3147, 0x9141, 0x3249, 0x9143,
+ 0x3248, 0x9144, 0x331F, 0x9145, 0x3320, 0x9146, 0x331E, 0x9147, 0x33C6,
+ 0x9148, 0x16DE, 0x9149, 0x0520, 0x914A, 0x081F, 0x914B, 0x081E, 0x914C,
+ 0x09E4, 0x914D, 0x09E3, 0x914E, 0x1E2A, 0x914F, 0x1E2B, 0x9150, 0x1E29,
+ 0x9152, 0x09E2, 0x9153, 0x2093, 0x9155, 0x2094, 0x9156, 0x2090, 0x9157,
+ 0x0BC8, 0x9158, 0x2091, 0x915A, 0x2092, 0x915F, 0x2331, 0x9160, 0x2333,
+ 0x9161, 0x232F, 0x9162, 0x2332, 0x9163, 0x0D8C, 0x9164, 0x2330, 0x9165,
+ 0x0D8D, 0x9168, 0x23E2, 0x9169, 0x0F49, 0x916A, 0x0F48, 0x916C, 0x0F47,
+ 0x916E, 0x25CF, 0x916F, 0x25D0, 0x9172, 0x282C, 0x9173, 0x282E, 0x9174,
+ 0x10D2, 0x9175, 0x10CF, 0x9177, 0x10D1, 0x9178, 0x10D0, 0x9179, 0x282D,
+ 0x917A, 0x282B, 0x9180, 0x2A8E, 0x9181, 0x2A8B, 0x9182, 0x2A8C, 0x9183,
+ 0x1253, 0x9184, 0x2A8D, 0x9185, 0x2A88, 0x9186, 0x2A89, 0x9187, 0x1250,
+ 0x9189, 0x1251, 0x918A, 0x2A8A, 0x918B, 0x1252, 0x918D, 0x2CC0, 0x918F,
+ 0x2CC1, 0x9190, 0x2CBE, 0x9191, 0x2CBF, 0x9192, 0x1374, 0x9193, 0x2CBD,
+ 0x9199, 0x2E83, 0x919A, 0x2E80, 0x919B, 0x2E82, 0x919C, 0x149B, 0x919D,
+ 0x2E86, 0x919E, 0x149A, 0x919F, 0x2E84, 0x91A0, 0x2E87, 0x91A1, 0x2E85,
+ 0x91A2, 0x2E81, 0x91A3, 0x1499, 0x91A5, 0x3000, 0x91A7, 0x3001, 0x91A8,
+ 0x2FFF, 0x91AA, 0x3003, 0x91AB, 0x153C, 0x91AC, 0x153D, 0x91AD, 0x314A,
+ 0x91AE, 0x15DC, 0x91AF, 0x3002, 0x91B0, 0x3149, 0x91B1, 0x15DB, 0x91B2,
+ 0x324C, 0x91B3, 0x324D, 0x91B4, 0x1650, 0x91B5, 0x324B, 0x91B7, 0x324A,
+ 0x91B9, 0x3321, 0x91BA, 0x1698, 0x91BC, 0x3446, 0x91BD, 0x34A3, 0x91BE,
+ 0x34A2, 0x91C0, 0x1730, 0x91C1, 0x174A, 0x91C2, 0x34A4, 0x91C3, 0x350B,
+ 0x91C5, 0x175C, 0x91C6, 0x0521, 0x91C7, 0x0695, 0x91C9, 0x0F4A, 0x91CB,
+ 0x1651, 0x91CC, 0x0522, 0x91CD, 0x0820, 0x91CE, 0x0BC9, 0x91CF, 0x0D8E,
+ 0x91D0, 0x153E, 0x91D1, 0x0696, 0x91D3, 0x1C15, 0x91D4, 0x1C14, 0x91D5,
+ 0x1E2C, 0x91D7, 0x09E7, 0x91D8, 0x09E5, 0x91D9, 0x09E9, 0x91DA, 0x1E2E,
+ 0x91DC, 0x09E8, 0x91DD, 0x09E6, 0x91E2, 0x1E2D, 0x91E3, 0x0BCC, 0x91E4,
+ 0x209A, 0x91E6, 0x0BCB, 0x91E7, 0x0BCD, 0x91E8, 0x209F, 0x91E9, 0x0BCF,
+ 0x91EA, 0x209C, 0x91EB, 0x209D, 0x91EC, 0x2095, 0x91ED, 0x0BCE, 0x91EE,
+ 0x20A0, 0x91F1, 0x2097, 0x91F3, 0x2098, 0x91F4, 0x2096, 0x91F5, 0x0BCA,
+ 0x91F7, 0x209E, 0x91F8, 0x2099, 0x91F9, 0x209B, 0x91FD, 0x233F, 0x91FF,
+ 0x233E, 0x9200, 0x233C, 0x9201, 0x2334, 0x9202, 0x2343, 0x9203, 0x2337,
+ 0x9204, 0x2341, 0x9205, 0x2348, 0x9206, 0x2340, 0x9207, 0x0D96, 0x9209,
+ 0x0D92, 0x920A, 0x2335, 0x920C, 0x233B, 0x920D, 0x0D94, 0x920F, 0x233A,
+ 0x9210, 0x0D95, 0x9211, 0x0D97, 0x9212, 0x233D, 0x9214, 0x0D8F, 0x9215,
+ 0x0D90, 0x9216, 0x2349, 0x9217, 0x2347, 0x9219, 0x2346, 0x921A, 0x2338,
+ 0x921C, 0x2344, 0x921E, 0x0D93, 0x9223, 0x0D91, 0x9224, 0x2345, 0x9225,
+ 0x2336, 0x9226, 0x2339, 0x9227, 0x2342, 0x922D, 0x2851, 0x922E, 0x25DA,
+ 0x9230, 0x25D3, 0x9231, 0x25E6, 0x9232, 0x25EF, 0x9233, 0x25D6, 0x9234,
+ 0x0F55, 0x9236, 0x25E3, 0x9237, 0x0F4B, 0x9238, 0x0F4D, 0x9239, 0x0F59,
+ 0x923A, 0x25D4, 0x923D, 0x0F4E, 0x923E, 0x0F50, 0x923F, 0x0F5A, 0x9240,
+ 0x0F4F, 0x9245, 0x0F58, 0x9246, 0x25DC, 0x9248, 0x25D1, 0x9249, 0x0F56,
+ 0x924A, 0x25DB, 0x924B, 0x0F52, 0x924C, 0x25ED, 0x924D, 0x0F57, 0x924E,
+ 0x25EB, 0x924F, 0x25DF, 0x9250, 0x25E9, 0x9251, 0x0F54, 0x9252, 0x25D2,
+ 0x9253, 0x25EC, 0x9254, 0x25E7, 0x9256, 0x25EE, 0x9257, 0x0F4C, 0x925A,
+ 0x0F5B, 0x925B, 0x0F51, 0x925E, 0x25D8, 0x9260, 0x25E0, 0x9261, 0x25E4,
+ 0x9263, 0x25E8, 0x9264, 0x0F53, 0x9265, 0x25D7, 0x9266, 0x25D5, 0x9267,
+ 0x25E1, 0x926C, 0x25DE, 0x926D, 0x25DD, 0x926F, 0x25E2, 0x9270, 0x25E5,
+ 0x9272, 0x25EA, 0x9276, 0x2831, 0x9278, 0x10D3, 0x9279, 0x283B, 0x927A,
+ 0x2833, 0x927B, 0x10D9, 0x927C, 0x10DD, 0x927D, 0x2844, 0x927E, 0x284C,
+ 0x927F, 0x283D, 0x9280, 0x10D5, 0x9282, 0x2841, 0x9283, 0x25D9, 0x9285,
+ 0x10D6, 0x9286, 0x2848, 0x9287, 0x284D, 0x9288, 0x2845, 0x928A, 0x2847,
+ 0x928B, 0x2850, 0x928C, 0x2849, 0x928D, 0x2837, 0x928E, 0x2840, 0x9291,
+ 0x10DE, 0x9293, 0x10DA, 0x9294, 0x2835, 0x9295, 0x2842, 0x9296, 0x10D8,
+ 0x9297, 0x283C, 0x9298, 0x10D7, 0x9299, 0x284A, 0x929A, 0x2839, 0x929B,
+ 0x2832, 0x929C, 0x10DB, 0x929D, 0x284F, 0x92A0, 0x2834, 0x92A1, 0x2846,
+ 0x92A2, 0x2843, 0x92A3, 0x283E, 0x92A4, 0x2830, 0x92A5, 0x282F, 0x92A6,
+ 0x2838, 0x92A7, 0x284B, 0x92A8, 0x10DC, 0x92A9, 0x284E, 0x92AA, 0x2836,
+ 0x92AB, 0x283A, 0x92AC, 0x10D4, 0x92B2, 0x125F, 0x92B3, 0x125A, 0x92B4,
+ 0x2AB0, 0x92B5, 0x2AAC, 0x92B6, 0x2A94, 0x92B7, 0x1256, 0x92B9, 0x36E9,
+ 0x92BB, 0x1255, 0x92BC, 0x125B, 0x92C0, 0x2A92, 0x92C1, 0x1259, 0x92C2,
+ 0x2A9E, 0x92C3, 0x2A90, 0x92C4, 0x2A91, 0x92C5, 0x1254, 0x92C6, 0x2AAF,
+ 0x92C7, 0x125D, 0x92C8, 0x2AA1, 0x92C9, 0x2AA6, 0x92CA, 0x2AA0, 0x92CB,
+ 0x2CD3, 0x92CC, 0x2A9C, 0x92CD, 0x2AA4, 0x92CE, 0x2AA2, 0x92CF, 0x2A95,
+ 0x92D0, 0x2A8F, 0x92D1, 0x2AAA, 0x92D2, 0x125C, 0x92D3, 0x2AAB, 0x92D5,
+ 0x2AA5, 0x92D7, 0x2A9A, 0x92D8, 0x2A98, 0x92D9, 0x2A93, 0x92DD, 0x2A9B,
+ 0x92DE, 0x2AA8, 0x92DF, 0x2A97, 0x92E0, 0x2AA7, 0x92E1, 0x2AAD, 0x92E4,
+ 0x1258, 0x92E6, 0x2AA3, 0x92E7, 0x2AA9, 0x92E8, 0x2A9F, 0x92E9, 0x2A99,
+ 0x92EA, 0x1257, 0x92EE, 0x283F, 0x92EF, 0x2A9D, 0x92F0, 0x125E, 0x92F1,
+ 0x2A96, 0x92F7, 0x2CD8, 0x92F8, 0x1377, 0x92F9, 0x2CD7, 0x92FA, 0x2CD5,
+ 0x92FB, 0x2CE7, 0x92FC, 0x137B, 0x92FE, 0x2CE4, 0x92FF, 0x2CDC, 0x9300,
+ 0x2CE6, 0x9301, 0x2CCE, 0x9302, 0x2CDA, 0x9304, 0x137D, 0x9306, 0x2CC6,
+ 0x9308, 0x2CC4, 0x9309, 0x2CE5, 0x930B, 0x2CE3, 0x930C, 0x2CE2, 0x930D,
+ 0x2CD2, 0x930E, 0x2CD1, 0x930F, 0x2CC7, 0x9310, 0x137F, 0x9312, 0x2CCD,
+ 0x9313, 0x2CD6, 0x9314, 0x2CE1, 0x9315, 0x1382, 0x9316, 0x2CE8, 0x9318,
+ 0x14A3, 0x9319, 0x1384, 0x931A, 0x137E, 0x931B, 0x2CCB, 0x931D, 0x2CD4,
+ 0x931E, 0x2CC3, 0x931F, 0x2CC5, 0x9320, 0x1375, 0x9321, 0x1381, 0x9322,
+ 0x137A, 0x9323, 0x2CCC, 0x9324, 0x2CDB, 0x9325, 0x2AAE, 0x9326, 0x1380,
+ 0x9327, 0x2CC2, 0x9328, 0x149E, 0x9329, 0x2CDD, 0x932A, 0x2CE0, 0x932B,
+ 0x137C, 0x932D, 0x2CD0, 0x932E, 0x1383, 0x932F, 0x1379, 0x9333, 0x1378,
+ 0x9334, 0x2CD9, 0x9335, 0x2CDF, 0x9336, 0x1376, 0x9338, 0x2CC9, 0x9339,
+ 0x2CDE, 0x933C, 0x2CCA, 0x9346, 0x2CCF, 0x9347, 0x2E8D, 0x9349, 0x2E92,
+ 0x934A, 0x14A0, 0x934B, 0x14A2, 0x934C, 0x2E98, 0x934D, 0x149C, 0x934E,
+ 0x2EA6, 0x934F, 0x2E9E, 0x9350, 0x2E93, 0x9351, 0x2E94, 0x9352, 0x2E9D,
+ 0x9354, 0x14A9, 0x9355, 0x2E9C, 0x9356, 0x2E8C, 0x9357, 0x2E9B, 0x9358,
+ 0x2E8F, 0x9359, 0x2EA7, 0x935A, 0x14A8, 0x935B, 0x14A6, 0x935C, 0x2E90,
+ 0x935E, 0x2EA3, 0x9360, 0x2E95, 0x9361, 0x2EA2, 0x9363, 0x2EA4, 0x9364,
+ 0x2E8B, 0x9365, 0x14A1, 0x9367, 0x2EA5, 0x936A, 0x2E99, 0x936C, 0x14A5,
+ 0x936D, 0x2E96, 0x9370, 0x14A7, 0x9371, 0x2E9F, 0x9375, 0x149F, 0x9376,
+ 0x2E91, 0x9377, 0x2EA0, 0x9379, 0x2E9A, 0x937A, 0x2CC8, 0x937B, 0x2EA1,
+ 0x937C, 0x2E8E, 0x937E, 0x14A4, 0x9380, 0x3014, 0x9382, 0x149D, 0x9383,
+ 0x2E89, 0x9388, 0x3011, 0x9389, 0x300A, 0x938A, 0x1540, 0x938C, 0x3005,
+ 0x938D, 0x3015, 0x938E, 0x300C, 0x938F, 0x2E97, 0x9391, 0x3017, 0x9392,
+ 0x3006, 0x9394, 0x153F, 0x9395, 0x3010, 0x9396, 0x1541, 0x9397, 0x1549,
+ 0x9398, 0x1547, 0x9399, 0x3012, 0x939A, 0x1548, 0x939B, 0x3008, 0x939D,
+ 0x3009, 0x939E, 0x300E, 0x939F, 0x3013, 0x93A1, 0x2E88, 0x93A2, 0x1542,
+ 0x93A3, 0x301C, 0x93A4, 0x3019, 0x93A5, 0x3160, 0x93A6, 0x300F, 0x93A7,
+ 0x300B, 0x93A8, 0x301A, 0x93A9, 0x3155, 0x93AA, 0x300D, 0x93AC, 0x1545,
+ 0x93AE, 0x1544, 0x93AF, 0x2E8A, 0x93B0, 0x1546, 0x93B1, 0x3016, 0x93B2,
+ 0x3018, 0x93B3, 0x1543, 0x93B4, 0x301B, 0x93B5, 0x3004, 0x93B7, 0x3007,
+ 0x93C0, 0x315E, 0x93C2, 0x314E, 0x93C3, 0x15E0, 0x93C4, 0x315C, 0x93C7,
+ 0x314C, 0x93C8, 0x15E1, 0x93CA, 0x3157, 0x93CC, 0x3153, 0x93CD, 0x15E6,
+ 0x93CE, 0x315D, 0x93CF, 0x314D, 0x93D0, 0x3150, 0x93D1, 0x15DE, 0x93D2,
+ 0x315F, 0x93D4, 0x3158, 0x93D5, 0x315B, 0x93D6, 0x15E4, 0x93D7, 0x15E9,
+ 0x93D8, 0x15E7, 0x93D9, 0x3154, 0x93DA, 0x314F, 0x93DC, 0x15E2, 0x93DD,
+ 0x15E3, 0x93DE, 0x314B, 0x93DF, 0x15DF, 0x93E1, 0x15DD, 0x93E2, 0x15E5,
+ 0x93E3, 0x315A, 0x93E4, 0x15E8, 0x93E6, 0x3156, 0x93E7, 0x3161, 0x93E8,
+ 0x15EA, 0x93EC, 0x3152, 0x93EE, 0x3159, 0x93F5, 0x325A, 0x93F6, 0x3269,
+ 0x93F7, 0x325C, 0x93F8, 0x3263, 0x93F9, 0x3151, 0x93FA, 0x3261, 0x93FB,
+ 0x3250, 0x93FC, 0x3267, 0x93FD, 0x1654, 0x93FE, 0x3254, 0x93FF, 0x3266,
+ 0x9400, 0x325B, 0x9403, 0x1653, 0x9406, 0x326B, 0x9407, 0x325D, 0x9409,
+ 0x3262, 0x940A, 0x3265, 0x940B, 0x324E, 0x940C, 0x3268, 0x940D, 0x3259,
+ 0x940E, 0x325E, 0x940F, 0x3252, 0x9410, 0x3256, 0x9411, 0x326A, 0x9412,
+ 0x3260, 0x9413, 0x324F, 0x9414, 0x3253, 0x9415, 0x3255, 0x9416, 0x325F,
+ 0x9418, 0x1652, 0x9419, 0x3258, 0x9420, 0x3251, 0x9428, 0x3257, 0x9429,
+ 0x3325, 0x942A, 0x3329, 0x942B, 0x169F, 0x942C, 0x332B, 0x942E, 0x1699,
+ 0x9430, 0x3327, 0x9431, 0x332D, 0x9432, 0x169E, 0x9433, 0x169A, 0x9435,
+ 0x169B, 0x9436, 0x3324, 0x9437, 0x332A, 0x9438, 0x169D, 0x9439, 0x3328,
+ 0x943A, 0x169C, 0x943B, 0x3323, 0x943C, 0x3264, 0x943D, 0x3326, 0x943F,
+ 0x3322, 0x9440, 0x332C, 0x9444, 0x16DF, 0x9445, 0x33CD, 0x9446, 0x33D0,
+ 0x9447, 0x33CC, 0x9448, 0x33CE, 0x9449, 0x33CF, 0x944A, 0x33C9, 0x944B,
+ 0x33CA, 0x944C, 0x33C7, 0x944F, 0x33CB, 0x9450, 0x33C8, 0x9451, 0x16E0,
+ 0x9452, 0x16E1, 0x9455, 0x3448, 0x9457, 0x344A, 0x945D, 0x3449, 0x945E,
+ 0x344B, 0x9460, 0x170E, 0x9462, 0x3447, 0x9463, 0x170D, 0x9464, 0x170F,
+ 0x9468, 0x34A6, 0x9469, 0x34A7, 0x946A, 0x1731, 0x946B, 0x34A5, 0x946D,
+ 0x34ED, 0x946E, 0x34EC, 0x946F, 0x34EE, 0x9470, 0x174C, 0x9471, 0x34EF,
+ 0x9472, 0x174B, 0x9473, 0x34F0, 0x9474, 0x350C, 0x9475, 0x350F, 0x9476,
+ 0x350E, 0x9477, 0x1755, 0x9478, 0x350D, 0x947C, 0x175F, 0x947D, 0x175D,
+ 0x947E, 0x175E, 0x947F, 0x1764, 0x9480, 0x3539, 0x9481, 0x353A, 0x9482,
+ 0x3538, 0x9483, 0x3540, 0x9577, 0x0697, 0x957A, 0x20A1, 0x957B, 0x234A,
+ 0x957C, 0x2AB1, 0x957D, 0x3162, 0x9580, 0x0698, 0x9582, 0x0821, 0x9583,
+ 0x09EA, 0x9586, 0x20A2, 0x9588, 0x20A3, 0x9589, 0x0BD0, 0x958B, 0x0D9A,
+ 0x958C, 0x234C, 0x958D, 0x234B, 0x958E, 0x0D9E, 0x958F, 0x0D99, 0x9590,
+ 0x234D, 0x9591, 0x0D9B, 0x9592, 0x0D9D, 0x9593, 0x0D9C, 0x9594, 0x0D98,
+ 0x9598, 0x0F5C, 0x959B, 0x25F3, 0x959C, 0x25F1, 0x959E, 0x25F2, 0x959F,
+ 0x25F0, 0x95A1, 0x10DF, 0x95A3, 0x10E2, 0x95A4, 0x10E4, 0x95A5, 0x10E3,
+ 0x95A8, 0x10E0, 0x95A9, 0x10E1, 0x95AB, 0x2AB3, 0x95AC, 0x2AB2, 0x95AD,
+ 0x1260, 0x95AE, 0x2AB4, 0x95B0, 0x2AB5, 0x95B1, 0x1261, 0x95B5, 0x2CF0,
+ 0x95B6, 0x2CEE, 0x95B7, 0x2EAD, 0x95B9, 0x2CEC, 0x95BA, 0x2CED, 0x95BB,
+ 0x1385, 0x95BC, 0x2CE9, 0x95BD, 0x2CF1, 0x95BE, 0x2CEB, 0x95BF, 0x2CEF,
+ 0x95C0, 0x2EA9, 0x95C3, 0x2EAB, 0x95C5, 0x2EAC, 0x95C6, 0x14AE, 0x95C7,
+ 0x2EA8, 0x95C8, 0x14AD, 0x95C9, 0x2EAA, 0x95CA, 0x14AA, 0x95CB, 0x14AB,
+ 0x95CC, 0x14AC, 0x95CD, 0x2CEA, 0x95D0, 0x154C, 0x95D1, 0x301F, 0x95D2,
+ 0x301D, 0x95D3, 0x301E, 0x95D4, 0x154A, 0x95D5, 0x154D, 0x95D6, 0x154B,
+ 0x95DA, 0x3163, 0x95DB, 0x3164, 0x95DC, 0x15EB, 0x95DE, 0x326C, 0x95DF,
+ 0x326E, 0x95E0, 0x326D, 0x95E1, 0x1655, 0x95E2, 0x16A0, 0x95E3, 0x3330,
+ 0x95E4, 0x332F, 0x95E5, 0x332E, 0x961C, 0x0699, 0x961E, 0x17B4, 0x9620,
+ 0x1821, 0x9621, 0x0414, 0x9622, 0x181F, 0x9623, 0x1822, 0x9624, 0x1820,
+ 0x9628, 0x18F1, 0x962A, 0x0526, 0x962C, 0x0527, 0x962D, 0x18F3, 0x962E,
+ 0x0524, 0x962F, 0x18F2, 0x9630, 0x18F0, 0x9631, 0x0525, 0x9632, 0x0523,
+ 0x9639, 0x1A55, 0x963A, 0x1A58, 0x963B, 0x069C, 0x963C, 0x1A57, 0x963D,
+ 0x1A56, 0x963F, 0x069B, 0x9640, 0x069A, 0x9642, 0x069E, 0x9643, 0x1A59,
+ 0x9644, 0x069D, 0x964A, 0x1C1A, 0x964B, 0x0823, 0x964C, 0x0824, 0x964D,
+ 0x0825, 0x964E, 0x1C1B, 0x964F, 0x1C17, 0x9650, 0x0822, 0x9651, 0x1C18,
+ 0x9653, 0x1C19, 0x9654, 0x1C16, 0x9658, 0x09F1, 0x965B, 0x09EE, 0x965C,
+ 0x1E2F, 0x965D, 0x09EF, 0x965E, 0x09F2, 0x965F, 0x1E30, 0x9661, 0x09ED,
+ 0x9662, 0x09EB, 0x9663, 0x09EC, 0x9664, 0x09F0, 0x966A, 0x0BD1, 0x966B,
+ 0x20A6, 0x966C, 0x0BD9, 0x966D, 0x20A5, 0x966F, 0x20A8, 0x9670, 0x0BD5,
+ 0x9671, 0x20A7, 0x9672, 0x0DA6, 0x9673, 0x0BD3, 0x9674, 0x0BD6, 0x9675,
+ 0x0BD2, 0x9676, 0x0BD7, 0x9677, 0x0BD8, 0x9678, 0x0BD4, 0x967C, 0x20A4,
+ 0x967D, 0x0DA2, 0x967E, 0x234F, 0x9680, 0x2353, 0x9683, 0x2352, 0x9684,
+ 0x0DA7, 0x9685, 0x0DA3, 0x9686, 0x0DA4, 0x9687, 0x234E, 0x9688, 0x2350,
+ 0x9689, 0x2351, 0x968A, 0x0D9F, 0x968B, 0x0DA1, 0x968D, 0x0DA5, 0x968E,
+ 0x0DA0, 0x9691, 0x25F6, 0x9692, 0x25F4, 0x9693, 0x25F5, 0x9694, 0x0F5E,
+ 0x9695, 0x0F5F, 0x9697, 0x25F7, 0x9698, 0x0F5D, 0x9699, 0x10E5, 0x969B,
+ 0x10E7, 0x969C, 0x10E6, 0x969E, 0x2852, 0x96A1, 0x2853, 0x96A2, 0x2AB7,
+ 0x96A4, 0x2AB6, 0x96A7, 0x1386, 0x96A8, 0x1387, 0x96A9, 0x2CF2, 0x96AA,
+ 0x1388, 0x96AC, 0x2EB0, 0x96AE, 0x2EAE, 0x96B0, 0x2EAF, 0x96B1, 0x14AF,
+ 0x96B3, 0x3020, 0x96B4, 0x15EC, 0x96B6, 0x0231, 0x96B8, 0x14B0, 0x96B9,
+ 0x069F, 0x96BB, 0x09F3, 0x96BC, 0x1E31, 0x96BF, 0x20A9, 0x96C0, 0x0BDA,
+ 0x96C1, 0x0DA8, 0x96C2, 0x2354, 0x96C3, 0x2356, 0x96C4, 0x0DAA, 0x96C5,
+ 0x0DA9, 0x96C6, 0x0DAB, 0x96C7, 0x0DAC, 0x96C8, 0x2355, 0x96C9, 0x0F62,
+ 0x96CA, 0x0F63, 0x96CB, 0x0F61, 0x96CC, 0x10E8, 0x96CD, 0x0F60, 0x96CE,
+ 0x25F8, 0x96D2, 0x10E9, 0x96D3, 0x2AB8, 0x96D4, 0x2CF3, 0x96D5, 0x1389,
+ 0x96D6, 0x14B1, 0x96D7, 0x3021, 0x96D8, 0x3025, 0x96D9, 0x1550, 0x96DA,
+ 0x3022, 0x96DB, 0x1551, 0x96DC, 0x154F, 0x96DD, 0x3026, 0x96DE, 0x1552,
+ 0x96DF, 0x3024, 0x96E1, 0x3165, 0x96E2, 0x154E, 0x96E3, 0x15ED, 0x96E5,
+ 0x34A8, 0x96E8, 0x06A0, 0x96E9, 0x0BDC, 0x96EA, 0x0BDB, 0x96EF, 0x0DAD,
+ 0x96F0, 0x2358, 0x96F1, 0x2357, 0x96F2, 0x0DAE, 0x96F5, 0x25FC, 0x96F6,
+ 0x0F67, 0x96F7, 0x0F64, 0x96F8, 0x25FB, 0x96F9, 0x0F66, 0x96FA, 0x25F9,
+ 0x96FB, 0x0F65, 0x96FD, 0x25FA, 0x96FF, 0x2854, 0x9700, 0x10EA, 0x9702,
+ 0x2ABB, 0x9704, 0x1262, 0x9705, 0x2AB9, 0x9706, 0x1263, 0x9707, 0x1264,
+ 0x9708, 0x2ABA, 0x9709, 0x1265, 0x970B, 0x2CF4, 0x970D, 0x138D, 0x970E,
+ 0x138A, 0x970F, 0x138F, 0x9710, 0x2CF6, 0x9711, 0x138B, 0x9712, 0x2CF5,
+ 0x9713, 0x138E, 0x9716, 0x138C, 0x9718, 0x2EB3, 0x9719, 0x2EB5, 0x971C,
+ 0x14B2, 0x971D, 0x2EB4, 0x971E, 0x14B3, 0x971F, 0x2EB2, 0x9720, 0x2EB1,
+ 0x9722, 0x3028, 0x9723, 0x3027, 0x9724, 0x1553, 0x9725, 0x3029, 0x9726,
+ 0x316A, 0x9727, 0x15EF, 0x9728, 0x3169, 0x9729, 0x3166, 0x972A, 0x15EE,
+ 0x972B, 0x3167, 0x972C, 0x3168, 0x972E, 0x326F, 0x972F, 0x3270, 0x9730,
+ 0x1656, 0x9732, 0x16A3, 0x9735, 0x3331, 0x9738, 0x16A1, 0x9739, 0x16A2,
+ 0x973A, 0x3332, 0x973D, 0x16E2, 0x973E, 0x16E3, 0x973F, 0x33D1, 0x9742,
+ 0x1732, 0x9743, 0x34AA, 0x9744, 0x1734, 0x9746, 0x34A9, 0x9747, 0x34AB,
+ 0x9748, 0x1733, 0x9749, 0x34F1, 0x974B, 0x3526, 0x9752, 0x06A1, 0x9756,
+ 0x0F68, 0x9758, 0x2855, 0x975A, 0x2ABC, 0x975B, 0x1390, 0x975C, 0x1391,
+ 0x975E, 0x06A2, 0x9760, 0x1266, 0x9761, 0x15F0, 0x9762, 0x0826, 0x9766,
+ 0x1392, 0x9768, 0x1710, 0x9769, 0x0827, 0x976A, 0x20AA, 0x976C, 0x2359,
+ 0x976E, 0x235B, 0x9770, 0x235A, 0x9772, 0x2600, 0x9773, 0x25FD, 0x9774,
+ 0x0F69, 0x9776, 0x0F6A, 0x9777, 0x25FE, 0x9778, 0x25FF, 0x977A, 0x2857,
+ 0x977B, 0x285C, 0x977C, 0x10EB, 0x977D, 0x2856, 0x977E, 0x2858, 0x977F,
+ 0x285F, 0x9780, 0x285A, 0x9781, 0x285E, 0x9782, 0x285B, 0x9783, 0x2859,
+ 0x9784, 0x285D, 0x9785, 0x10EC, 0x9788, 0x2ABF, 0x978A, 0x2ABD, 0x978B,
+ 0x1268, 0x978D, 0x1267, 0x978E, 0x2ABE, 0x978F, 0x1269, 0x9794, 0x2CF9,
+ 0x9797, 0x2CF8, 0x9798, 0x1393, 0x9799, 0x2CF7, 0x979A, 0x2EB6, 0x979C,
+ 0x2EB8, 0x979D, 0x2EBA, 0x979E, 0x2EB9, 0x97A0, 0x14B4, 0x97A1, 0x2EB7,
+ 0x97A2, 0x3030, 0x97A3, 0x1554, 0x97A4, 0x302E, 0x97A5, 0x3031, 0x97A6,
+ 0x1555, 0x97A8, 0x302C, 0x97AA, 0x302F, 0x97AB, 0x302D, 0x97AC, 0x302A,
+ 0x97AD, 0x1556, 0x97AE, 0x302B, 0x97B3, 0x316B, 0x97B6, 0x316D, 0x97B7,
+ 0x316C, 0x97B9, 0x3271, 0x97BB, 0x3272, 0x97BF, 0x3333, 0x97C1, 0x16E5,
+ 0x97C3, 0x16E4, 0x97C4, 0x344C, 0x97C5, 0x344D, 0x97C6, 0x1735, 0x97C7,
+ 0x34AC, 0x97C9, 0x1756, 0x97CB, 0x0828, 0x97CC, 0x0DAF, 0x97CD, 0x2861,
+ 0x97CE, 0x2860, 0x97CF, 0x2AC1, 0x97D0, 0x2AC0, 0x97D3, 0x14B5, 0x97D4,
+ 0x2EBC, 0x97D5, 0x2EBB, 0x97D6, 0x3034, 0x97D7, 0x3032, 0x97D8, 0x3035,
+ 0x97D9, 0x3033, 0x97DC, 0x15F1, 0x97DD, 0x316E, 0x97DE, 0x316F, 0x97DF,
+ 0x3170, 0x97E1, 0x3334, 0x97E3, 0x33D2, 0x97E5, 0x34AD, 0x97ED, 0x0829,
+ 0x97F0, 0x2CFA, 0x97F1, 0x2EBD, 0x97F3, 0x082A, 0x97F6, 0x10ED, 0x97F8,
+ 0x2CFB, 0x97F9, 0x1557, 0x97FA, 0x3036, 0x97FB, 0x15F2, 0x97FD, 0x3273,
+ 0x97FE, 0x3274, 0x97FF, 0x16A4, 0x9800, 0x344E, 0x9801, 0x082B, 0x9802,
+ 0x0BDF, 0x9803, 0x0BE0, 0x9804, 0x20AB, 0x9805, 0x0DB0, 0x9806, 0x0DB1,
+ 0x9807, 0x235C, 0x9808, 0x0DB2, 0x980A, 0x0F6E, 0x980C, 0x0F70, 0x980D,
+ 0x2602, 0x980E, 0x2603, 0x980F, 0x2601, 0x9810, 0x0F6B, 0x9811, 0x0F6C,
+ 0x9812, 0x0F6F, 0x9813, 0x0F6D, 0x9816, 0x2862, 0x9817, 0x10EE, 0x9818,
+ 0x10EF, 0x981B, 0x2AC8, 0x981C, 0x126C, 0x981D, 0x2AC3, 0x981E, 0x2AC2,
+ 0x9820, 0x2AC7, 0x9821, 0x126A, 0x9824, 0x139A, 0x9826, 0x2AC4, 0x9827,
+ 0x2AC9, 0x9828, 0x2AC6, 0x9829, 0x2AC5, 0x982B, 0x126B, 0x982D, 0x1398,
+ 0x982F, 0x2CFD, 0x9830, 0x1394, 0x9832, 0x2CFE, 0x9835, 0x2CFC, 0x9837,
+ 0x1397, 0x9838, 0x1395, 0x9839, 0x1399, 0x983B, 0x1396, 0x9841, 0x2EBE,
+ 0x9843, 0x2EC3, 0x9844, 0x2EBF, 0x9845, 0x2EC2, 0x9846, 0x14B6, 0x9848,
+ 0x2DF2, 0x9849, 0x2EC1, 0x984A, 0x2EC0, 0x984C, 0x155A, 0x984D, 0x1558,
+ 0x984E, 0x155B, 0x984F, 0x1559, 0x9850, 0x3037, 0x9851, 0x3038, 0x9852,
+ 0x3039, 0x9853, 0x155C, 0x9857, 0x3174, 0x9858, 0x15F4, 0x9859, 0x3172,
+ 0x985B, 0x15F5, 0x985C, 0x3171, 0x985D, 0x3173, 0x985E, 0x15F3, 0x985F,
+ 0x3278, 0x9860, 0x3275, 0x9862, 0x3276, 0x9863, 0x3277, 0x9864, 0x3335,
+ 0x9865, 0x16A6, 0x9867, 0x16A5, 0x9869, 0x33D4, 0x986A, 0x33D3, 0x986B,
+ 0x16E6, 0x986F, 0x1711, 0x9870, 0x1736, 0x9871, 0x174D, 0x9872, 0x34F2,
+ 0x9873, 0x3527, 0x9874, 0x3528, 0x98A8, 0x082C, 0x98A9, 0x235D, 0x98AC,
+ 0x2604, 0x98AD, 0x2863, 0x98AE, 0x2864, 0x98AF, 0x10F0, 0x98B1, 0x10F1,
+ 0x98B2, 0x2ACA, 0x98B3, 0x126D, 0x98B6, 0x14B7, 0x98B8, 0x303A, 0x98BA,
+ 0x155D, 0x98BB, 0x3177, 0x98BC, 0x15F6, 0x98BD, 0x3176, 0x98BE, 0x3178,
+ 0x98BF, 0x3175, 0x98C0, 0x3338, 0x98C1, 0x3279, 0x98C2, 0x327A, 0x98C4,
+ 0x1657, 0x98C6, 0x3337, 0x98C9, 0x3336, 0x98CB, 0x33D5, 0x98CC, 0x3529,
+ 0x98DB, 0x082D, 0x98DF, 0x082E, 0x98E2, 0x09F4, 0x98E3, 0x1E32, 0x98E5,
+ 0x20AC, 0x98E7, 0x0DB3, 0x98E9, 0x0DB6, 0x98EA, 0x0DB4, 0x98EB, 0x235E,
+ 0x98ED, 0x0DB8, 0x98EF, 0x0DB5, 0x98F2, 0x0DB7, 0x98F4, 0x0F72, 0x98F6,
+ 0x2605, 0x98F9, 0x2606, 0x98FA, 0x2ACC, 0x98FC, 0x0F71, 0x98FD, 0x0F73,
+ 0x98FE, 0x0F74, 0x9900, 0x2866, 0x9902, 0x2865, 0x9903, 0x10F2, 0x9905,
+ 0x10F3, 0x9907, 0x2867, 0x9908, 0x2ACB, 0x9909, 0x10F5, 0x990A, 0x126E,
+ 0x990C, 0x10F4, 0x9910, 0x139B, 0x9911, 0x2ACD, 0x9912, 0x1270, 0x9913,
+ 0x126F, 0x9914, 0x2ACE, 0x9915, 0x2AD1, 0x9916, 0x2ACF, 0x9917, 0x2AD0,
+ 0x9918, 0x1271, 0x991A, 0x13A0, 0x991B, 0x139E, 0x991E, 0x139D, 0x991F,
+ 0x2D00, 0x9921, 0x139F, 0x9924, 0x2CFF, 0x9925, 0x2EC4, 0x9927, 0x2D01,
+ 0x9928, 0x139C, 0x9929, 0x2D02, 0x992A, 0x2EC7, 0x992B, 0x2EC5, 0x992C,
+ 0x2EC6, 0x992D, 0x2ECB, 0x992E, 0x1561, 0x992F, 0x2ECA, 0x9930, 0x2ECD,
+ 0x9931, 0x2ECC, 0x9932, 0x2EC9, 0x9933, 0x2EC8, 0x9935, 0x14B8, 0x993A,
+ 0x303D, 0x993C, 0x303C, 0x993D, 0x1560, 0x993E, 0x155E, 0x993F, 0x155F,
+ 0x9941, 0x303B, 0x9943, 0x317B, 0x9945, 0x15F7, 0x9947, 0x317A, 0x9948,
+ 0x3179, 0x9949, 0x15F8, 0x994B, 0x327F, 0x994C, 0x327E, 0x994E, 0x327C,
+ 0x9950, 0x327B, 0x9951, 0x1659, 0x9952, 0x1658, 0x9953, 0x3280, 0x9954,
+ 0x33D6, 0x9955, 0x16E7, 0x9956, 0x333A, 0x9957, 0x16A7, 0x9958, 0x3339,
+ 0x9959, 0x327D, 0x995B, 0x33D7, 0x995C, 0x1712, 0x995E, 0x174E, 0x995F,
+ 0x34F3, 0x9961, 0x352A, 0x9996, 0x082F, 0x9997, 0x20AD, 0x9998, 0x2ECE,
+ 0x9999, 0x0830, 0x999C, 0x2869, 0x999D, 0x2868, 0x999E, 0x2D03, 0x99A1,
+ 0x2ED0, 0x99A3, 0x2ECF, 0x99A5, 0x1562, 0x99A6, 0x317C, 0x99A7, 0x317D,
+ 0x99A8, 0x165A, 0x99AB, 0x352B, 0x99AC, 0x09F5, 0x99AD, 0x0DBA, 0x99AE,
+ 0x0DB9, 0x99AF, 0x2607, 0x99B0, 0x2609, 0x99B1, 0x0F76, 0x99B2, 0x2608,
+ 0x99B3, 0x0F75, 0x99B4, 0x0F77, 0x99B5, 0x260A, 0x99B9, 0x286B, 0x99BA,
+ 0x286D, 0x99BB, 0x286C, 0x99BD, 0x286F, 0x99C1, 0x10F6, 0x99C2, 0x286E,
+ 0x99C3, 0x286A, 0x99C7, 0x2870, 0x99C9, 0x2AD8, 0x99CB, 0x2ADB, 0x99CC,
+ 0x2ADD, 0x99CD, 0x2AD3, 0x99CE, 0x2AD7, 0x99CF, 0x2AD4, 0x99D0, 0x1273,
+ 0x99D1, 0x1276, 0x99D2, 0x1278, 0x99D3, 0x2AD5, 0x99D4, 0x2AD6, 0x99D5,
+ 0x1277, 0x99D6, 0x2AD9, 0x99D7, 0x2ADC, 0x99D8, 0x2ADA, 0x99D9, 0x1279,
+ 0x99DB, 0x1275, 0x99DC, 0x2AD2, 0x99DD, 0x1272, 0x99DF, 0x1274, 0x99E2,
+ 0x13A2, 0x99E3, 0x2D09, 0x99E4, 0x2D07, 0x99E5, 0x2D06, 0x99E7, 0x2D0C,
+ 0x99E9, 0x2D0B, 0x99EA, 0x2D0A, 0x99EC, 0x2D05, 0x99ED, 0x13A1, 0x99EE,
+ 0x2D04, 0x99F0, 0x2D08, 0x99F1, 0x13A3, 0x99F4, 0x2ED3, 0x99F6, 0x2ED7,
+ 0x99F7, 0x2ED4, 0x99F8, 0x2ED6, 0x99F9, 0x2ED5, 0x99FA, 0x2ED2, 0x99FB,
+ 0x2ED8, 0x99FC, 0x2EDB, 0x99FD, 0x2ED9, 0x99FE, 0x2EDA, 0x99FF, 0x14BA,
+ 0x9A01, 0x14B9, 0x9A02, 0x2ED1, 0x9A03, 0x2EDC, 0x9A04, 0x3042, 0x9A05,
+ 0x3045, 0x9A06, 0x3047, 0x9A07, 0x3046, 0x9A09, 0x3040, 0x9A0A, 0x3044,
+ 0x9A0B, 0x303F, 0x9A0D, 0x3041, 0x9A0E, 0x1563, 0x9A0F, 0x303E, 0x9A11,
+ 0x3043, 0x9A14, 0x318A, 0x9A15, 0x317F, 0x9A16, 0x15F9, 0x9A19, 0x15FA,
+ 0x9A1A, 0x317E, 0x9A1B, 0x3183, 0x9A1C, 0x3189, 0x9A1D, 0x3181, 0x9A1E,
+ 0x3188, 0x9A20, 0x3185, 0x9A22, 0x3184, 0x9A23, 0x3187, 0x9A24, 0x3182,
+ 0x9A25, 0x3180, 0x9A27, 0x3186, 0x9A29, 0x3287, 0x9A2A, 0x3285, 0x9A2B,
+ 0x165B, 0x9A2C, 0x3284, 0x9A2D, 0x328A, 0x9A2E, 0x3288, 0x9A30, 0x165C,
+ 0x9A31, 0x3283, 0x9A32, 0x3281, 0x9A34, 0x3282, 0x9A35, 0x165E, 0x9A36,
+ 0x3286, 0x9A37, 0x165D, 0x9A38, 0x3289, 0x9A39, 0x333B, 0x9A3A, 0x3341,
+ 0x9A3D, 0x333C, 0x9A3E, 0x16AB, 0x9A3F, 0x3342, 0x9A40, 0x16AA, 0x9A41,
+ 0x3340, 0x9A42, 0x333F, 0x9A43, 0x16A9, 0x9A44, 0x333E, 0x9A45, 0x16A8,
+ 0x9A46, 0x333D, 0x9A48, 0x33DD, 0x9A49, 0x33DF, 0x9A4A, 0x33DE, 0x9A4C,
+ 0x33DB, 0x9A4D, 0x16E9, 0x9A4E, 0x33D8, 0x9A4F, 0x33DC, 0x9A50, 0x33E1,
+ 0x9A52, 0x33E0, 0x9A53, 0x33D9, 0x9A54, 0x33DA, 0x9A55, 0x16E8, 0x9A56,
+ 0x344F, 0x9A57, 0x1715, 0x9A59, 0x3450, 0x9A5A, 0x1713, 0x9A5B, 0x1714,
+ 0x9A5E, 0x34AE, 0x9A5F, 0x1737, 0x9A60, 0x3510, 0x9A62, 0x1757, 0x9A64,
+ 0x352C, 0x9A65, 0x1758, 0x9A66, 0x352D, 0x9A67, 0x352E, 0x9A68, 0x353C,
+ 0x9A69, 0x353B, 0x9A6A, 0x1767, 0x9A6B, 0x3544, 0x9AA8, 0x09F6, 0x9AAB,
+ 0x260C, 0x9AAD, 0x260B, 0x9AAF, 0x10F7, 0x9AB0, 0x10F8, 0x9AB1, 0x2871,
+ 0x9AB3, 0x2ADE, 0x9AB4, 0x2D0F, 0x9AB7, 0x127A, 0x9AB8, 0x13A4, 0x9AB9,
+ 0x2D0D, 0x9ABB, 0x2D10, 0x9ABC, 0x13A5, 0x9ABE, 0x2EDD, 0x9ABF, 0x2D0E,
+ 0x9AC0, 0x3048, 0x9AC1, 0x1564, 0x9AC2, 0x318B, 0x9AC6, 0x328D, 0x9AC7,
+ 0x328B, 0x9ACA, 0x328C, 0x9ACD, 0x3343, 0x9ACF, 0x16AC, 0x9AD0, 0x33E2,
+ 0x9AD1, 0x1718, 0x9AD2, 0x16EA, 0x9AD3, 0x1716, 0x9AD4, 0x1717, 0x9AD5,
+ 0x34AF, 0x9AD6, 0x174F, 0x9AD8, 0x09F7, 0x9ADC, 0x3049, 0x9ADF, 0x1E33,
+ 0x9AE1, 0x0F78, 0x9AE3, 0x2872, 0x9AE6, 0x10F9, 0x9AE7, 0x2873, 0x9AEB,
+ 0x2AE0, 0x9AEC, 0x2ADF, 0x9AED, 0x13A7, 0x9AEE, 0x127B, 0x9AEF, 0x127C,
+ 0x9AF1, 0x2AE3, 0x9AF2, 0x2AE2, 0x9AF3, 0x2AE1, 0x9AF6, 0x2D11, 0x9AF7,
+ 0x2D14, 0x9AF9, 0x2D13, 0x9AFA, 0x2D12, 0x9AFB, 0x13A6, 0x9AFC, 0x2EE1,
+ 0x9AFD, 0x2EDF, 0x9AFE, 0x2EDE, 0x9B01, 0x2EE0, 0x9B03, 0x1565, 0x9B04,
+ 0x304B, 0x9B05, 0x304C, 0x9B06, 0x1566, 0x9B08, 0x304A, 0x9B0A, 0x318D,
+ 0x9B0B, 0x318C, 0x9B0C, 0x318F, 0x9B0D, 0x15FB, 0x9B0E, 0x318E, 0x9B10,
+ 0x328E, 0x9B11, 0x3290, 0x9B12, 0x328F, 0x9B15, 0x3344, 0x9B16, 0x3347,
+ 0x9B17, 0x3345, 0x9B18, 0x3346, 0x9B19, 0x33E3, 0x9B1A, 0x16EB, 0x9B1E,
+ 0x3451, 0x9B1F, 0x3452, 0x9B20, 0x3453, 0x9B22, 0x1738, 0x9B23, 0x1750,
+ 0x9B24, 0x352F, 0x9B25, 0x09F8, 0x9B27, 0x127D, 0x9B28, 0x13A8, 0x9B29,
+ 0x304D, 0x9B2B, 0x33E4, 0x9B2E, 0x3511, 0x9B2F, 0x1E34, 0x9B31, 0x1768,
+ 0x9B32, 0x09F9, 0x9B33, 0x2D15, 0x9B35, 0x304E, 0x9B37, 0x3190, 0x9B3A,
+ 0x3348, 0x9B3B, 0x33E5, 0x9B3C, 0x09FA, 0x9B3E, 0x2874, 0x9B3F, 0x2875,
+ 0x9B41, 0x10FA, 0x9B42, 0x10FB, 0x9B43, 0x2AE5, 0x9B44, 0x127F, 0x9B45,
+ 0x127E, 0x9B46, 0x2AE4, 0x9B48, 0x2EE2, 0x9B4A, 0x304F, 0x9B4B, 0x3051,
+ 0x9B4C, 0x3050, 0x9B4D, 0x1569, 0x9B4E, 0x1568, 0x9B4F, 0x1567, 0x9B51,
+ 0x16AE, 0x9B52, 0x3349, 0x9B54, 0x16AD, 0x9B55, 0x33E7, 0x9B56, 0x33E6,
+ 0x9B58, 0x1739, 0x9B59, 0x34B0, 0x9B5A, 0x0BE1, 0x9B5B, 0x260D, 0x9B5F,
+ 0x2878, 0x9B60, 0x2876, 0x9B61, 0x2877, 0x9B64, 0x2AEE, 0x9B66, 0x2AE9,
+ 0x9B67, 0x2AE6, 0x9B68, 0x2AED, 0x9B6C, 0x2AEF, 0x9B6F, 0x1281, 0x9B70,
+ 0x2AEC, 0x9B71, 0x2AE8, 0x9B74, 0x2AE7, 0x9B75, 0x2AEB, 0x9B76, 0x2AEA,
+ 0x9B77, 0x1280, 0x9B7A, 0x2D20, 0x9B7B, 0x2D1B, 0x9B7C, 0x2D19, 0x9B7D,
+ 0x2D22, 0x9B7E, 0x2D1A, 0x9B80, 0x2D16, 0x9B82, 0x2D1C, 0x9B85, 0x2D17,
+ 0x9B86, 0x2EEB, 0x9B87, 0x2D18, 0x9B88, 0x2D23, 0x9B90, 0x2D1F, 0x9B91,
+ 0x13A9, 0x9B92, 0x2D1E, 0x9B93, 0x2D1D, 0x9B95, 0x2D21, 0x9B9A, 0x2EE3,
+ 0x9B9B, 0x2EE6, 0x9B9E, 0x2EE5, 0x9BA0, 0x2EED, 0x9BA1, 0x2EE8, 0x9BA2,
+ 0x2EEC, 0x9BA4, 0x2EEA, 0x9BA5, 0x2EE9, 0x9BA6, 0x2EE7, 0x9BA8, 0x2EE4,
+ 0x9BAA, 0x14BD, 0x9BAB, 0x14BC, 0x9BAD, 0x14BE, 0x9BAE, 0x14BB, 0x9BAF,
+ 0x2EEE, 0x9BB5, 0x3057, 0x9BB6, 0x305A, 0x9BB8, 0x3058, 0x9BB9, 0x305C,
+ 0x9BBD, 0x305D, 0x9BBF, 0x3055, 0x9BC0, 0x156E, 0x9BC1, 0x3056, 0x9BC3,
+ 0x3054, 0x9BC4, 0x305B, 0x9BC6, 0x3053, 0x9BC7, 0x3052, 0x9BC8, 0x156D,
+ 0x9BC9, 0x156B, 0x9BCA, 0x156A, 0x9BD3, 0x3059, 0x9BD4, 0x3199, 0x9BD5,
+ 0x319F, 0x9BD6, 0x15FE, 0x9BD7, 0x319A, 0x9BD9, 0x319D, 0x9BDA, 0x31A1,
+ 0x9BDB, 0x15FF, 0x9BDC, 0x319C, 0x9BDE, 0x3194, 0x9BE0, 0x3193, 0x9BE1,
+ 0x31A0, 0x9BE2, 0x3197, 0x9BE4, 0x3195, 0x9BE5, 0x319E, 0x9BE6, 0x3196,
+ 0x9BE7, 0x15FD, 0x9BE8, 0x15FC, 0x9BEA, 0x3191, 0x9BEB, 0x3192, 0x9BEC,
+ 0x319B, 0x9BF0, 0x3198, 0x9BF7, 0x3293, 0x9BF8, 0x3296, 0x9BFD, 0x156C,
+ 0x9C05, 0x3294, 0x9C06, 0x329A, 0x9C07, 0x3298, 0x9C08, 0x3292, 0x9C09,
+ 0x329D, 0x9C0B, 0x3291, 0x9C0D, 0x1660, 0x9C0E, 0x3299, 0x9C12, 0x3295,
+ 0x9C13, 0x165F, 0x9C14, 0x329C, 0x9C17, 0x329B, 0x9C1C, 0x334C, 0x9C1D,
+ 0x334B, 0x9C21, 0x3352, 0x9C23, 0x334E, 0x9C24, 0x3351, 0x9C25, 0x16B0,
+ 0x9C28, 0x334F, 0x9C29, 0x3350, 0x9C2B, 0x334A, 0x9C2C, 0x334D, 0x9C2D,
+ 0x16AF, 0x9C31, 0x16ED, 0x9C32, 0x33F2, 0x9C33, 0x33ED, 0x9C34, 0x33F1,
+ 0x9C36, 0x33F4, 0x9C37, 0x33F0, 0x9C39, 0x33EC, 0x9C3B, 0x16EF, 0x9C3C,
+ 0x33EF, 0x9C3D, 0x33F3, 0x9C3E, 0x16EE, 0x9C3F, 0x33EA, 0x9C40, 0x3297,
+ 0x9C41, 0x33EE, 0x9C44, 0x33EB, 0x9C46, 0x33E8, 0x9C48, 0x33E9, 0x9C49,
+ 0x16EC, 0x9C4A, 0x3457, 0x9C4B, 0x3459, 0x9C4C, 0x345C, 0x9C4D, 0x3458,
+ 0x9C4E, 0x345D, 0x9C50, 0x3456, 0x9C52, 0x3454, 0x9C54, 0x1719, 0x9C55,
+ 0x345A, 0x9C56, 0x171B, 0x9C57, 0x171A, 0x9C58, 0x3455, 0x9C59, 0x345B,
+ 0x9C5E, 0x34B5, 0x9C5F, 0x173A, 0x9C60, 0x34B6, 0x9C62, 0x34B4, 0x9C63,
+ 0x34B1, 0x9C66, 0x34B3, 0x9C67, 0x34B2, 0x9C68, 0x34F4, 0x9C6D, 0x34F6,
+ 0x9C6E, 0x34F5, 0x9C71, 0x3514, 0x9C73, 0x3513, 0x9C74, 0x3512, 0x9C75,
+ 0x3515, 0x9C77, 0x1760, 0x9C78, 0x1761, 0x9C79, 0x3541, 0x9C7A, 0x3545,
+ 0x9CE5, 0x0BE2, 0x9CE6, 0x235F, 0x9CE7, 0x2610, 0x9CE9, 0x0F79, 0x9CEA,
+ 0x260E, 0x9CED, 0x260F, 0x9CF1, 0x2879, 0x9CF2, 0x287A, 0x9CF3, 0x10FE,
+ 0x9CF4, 0x10FC, 0x9CF5, 0x287B, 0x9CF6, 0x10FD, 0x9CF7, 0x2AF4, 0x9CF9,
+ 0x2AF7, 0x9CFA, 0x2AF1, 0x9CFB, 0x2AF8, 0x9CFC, 0x2AF0, 0x9CFD, 0x2AF2,
+ 0x9CFF, 0x2AF3, 0x9D00, 0x2AF6, 0x9D03, 0x1284, 0x9D04, 0x2AFB, 0x9D05,
+ 0x2AFA, 0x9D06, 0x1282, 0x9D07, 0x2AF5, 0x9D08, 0x2AF9, 0x9D09, 0x1283,
+ 0x9D10, 0x2D2D, 0x9D12, 0x13AE, 0x9D14, 0x2D28, 0x9D15, 0x13AA, 0x9D17,
+ 0x2D25, 0x9D18, 0x2D2B, 0x9D19, 0x2D2E, 0x9D1B, 0x13AF, 0x9D1D, 0x2D2A,
+ 0x9D1E, 0x2D27, 0x9D1F, 0x2D2F, 0x9D20, 0x2D26, 0x9D22, 0x2D2C, 0x9D23,
+ 0x13AB, 0x9D25, 0x2D24, 0x9D26, 0x13AC, 0x9D28, 0x13AD, 0x9D29, 0x2D29,
+ 0x9D2D, 0x2F00, 0x9D2E, 0x2EF3, 0x9D2F, 0x2EF4, 0x9D30, 0x2EF7, 0x9D31,
+ 0x2EF5, 0x9D33, 0x2EEF, 0x9D36, 0x2EF2, 0x9D37, 0x2EFC, 0x9D38, 0x2EF6,
+ 0x9D3B, 0x14BF, 0x9D3D, 0x2EFE, 0x9D3E, 0x2EFB, 0x9D3F, 0x14C0, 0x9D40,
+ 0x2EFD, 0x9D41, 0x2EF0, 0x9D42, 0x2EF9, 0x9D43, 0x2EFA, 0x9D45, 0x2EF8,
+ 0x9D4A, 0x3061, 0x9D4B, 0x3063, 0x9D4C, 0x3066, 0x9D4F, 0x3060, 0x9D51,
+ 0x156F, 0x9D52, 0x3068, 0x9D53, 0x305F, 0x9D54, 0x3069, 0x9D56, 0x3065,
+ 0x9D57, 0x3067, 0x9D58, 0x306B, 0x9D59, 0x3064, 0x9D5A, 0x306C, 0x9D5B,
+ 0x3062, 0x9D5C, 0x305E, 0x9D5D, 0x1570, 0x9D5F, 0x306A, 0x9D60, 0x1571,
+ 0x9D61, 0x1601, 0x9D67, 0x2EF1, 0x9D68, 0x31BB, 0x9D69, 0x31B2, 0x9D6A,
+ 0x1603, 0x9D6B, 0x31AE, 0x9D6C, 0x1604, 0x9D6F, 0x31B7, 0x9D70, 0x31B1,
+ 0x9D71, 0x31A7, 0x9D72, 0x1602, 0x9D73, 0x31B4, 0x9D74, 0x31AF, 0x9D75,
+ 0x31B0, 0x9D77, 0x31A2, 0x9D78, 0x31A9, 0x9D79, 0x31B8, 0x9D7B, 0x31B5,
+ 0x9D7D, 0x31AD, 0x9D7F, 0x31B9, 0x9D80, 0x31A8, 0x9D81, 0x31A3, 0x9D82,
+ 0x31B6, 0x9D84, 0x31A5, 0x9D85, 0x31B3, 0x9D86, 0x31AA, 0x9D87, 0x31BA,
+ 0x9D88, 0x31A6, 0x9D89, 0x1600, 0x9D8A, 0x31A4, 0x9D8B, 0x31AB, 0x9D8C,
+ 0x31AC, 0x9D90, 0x32A4, 0x9D92, 0x32A2, 0x9D94, 0x32A7, 0x9D96, 0x32B3,
+ 0x9D97, 0x32AA, 0x9D98, 0x32A3, 0x9D99, 0x329F, 0x9D9A, 0x32AC, 0x9D9B,
+ 0x32A5, 0x9D9C, 0x32A8, 0x9D9D, 0x32A1, 0x9D9E, 0x32AF, 0x9D9F, 0x329E,
+ 0x9DA0, 0x32A6, 0x9DA1, 0x32AB, 0x9DA2, 0x32AD, 0x9DA3, 0x32B0, 0x9DA4,
+ 0x32A0, 0x9DA6, 0x32B4, 0x9DA7, 0x32B5, 0x9DA8, 0x32AE, 0x9DA9, 0x32B2,
+ 0x9DAA, 0x32A9, 0x9DAC, 0x3362, 0x9DAD, 0x3365, 0x9DAF, 0x16B1, 0x9DB1,
+ 0x3364, 0x9DB2, 0x3369, 0x9DB3, 0x3367, 0x9DB4, 0x16B2, 0x9DB5, 0x335E,
+ 0x9DB6, 0x3354, 0x9DB7, 0x3353, 0x9DB8, 0x16B4, 0x9DB9, 0x3360, 0x9DBA,
+ 0x3361, 0x9DBB, 0x335D, 0x9DBC, 0x3355, 0x9DBE, 0x335A, 0x9DBF, 0x32B1,
+ 0x9DC1, 0x3356, 0x9DC2, 0x16B3, 0x9DC3, 0x335C, 0x9DC5, 0x335B, 0x9DC7,
+ 0x3357, 0x9DC8, 0x3363, 0x9DCA, 0x3358, 0x9DCB, 0x33F9, 0x9DCC, 0x3366,
+ 0x9DCD, 0x3368, 0x9DCE, 0x335F, 0x9DCF, 0x3359, 0x9DD0, 0x33FA, 0x9DD1,
+ 0x33FC, 0x9DD2, 0x33F6, 0x9DD3, 0x16F0, 0x9DD5, 0x3403, 0x9DD6, 0x3401,
+ 0x9DD7, 0x16F1, 0x9DD8, 0x3400, 0x9DD9, 0x33FF, 0x9DDA, 0x33F8, 0x9DDB,
+ 0x33F5, 0x9DDC, 0x33FB, 0x9DDD, 0x3404, 0x9DDE, 0x33F7, 0x9DDF, 0x33FD,
+ 0x9DE1, 0x3466, 0x9DE2, 0x346B, 0x9DE3, 0x3461, 0x9DE4, 0x3464, 0x9DE5,
+ 0x171C, 0x9DE6, 0x3468, 0x9DE8, 0x346F, 0x9DE9, 0x33FE, 0x9DEB, 0x3462,
+ 0x9DEC, 0x346C, 0x9DED, 0x3470, 0x9DEE, 0x3467, 0x9DEF, 0x3460, 0x9DF0,
+ 0x346A, 0x9DF2, 0x3469, 0x9DF3, 0x346E, 0x9DF4, 0x346D, 0x9DF5, 0x3402,
+ 0x9DF6, 0x3465, 0x9DF7, 0x345F, 0x9DF8, 0x3463, 0x9DF9, 0x173B, 0x9DFA,
+ 0x173C, 0x9DFB, 0x345E, 0x9DFD, 0x34C1, 0x9DFE, 0x34B8, 0x9DFF, 0x34C0,
+ 0x9E00, 0x34BD, 0x9E01, 0x34BE, 0x9E02, 0x34B7, 0x9E03, 0x34BA, 0x9E04,
+ 0x34C2, 0x9E05, 0x34BC, 0x9E06, 0x34BB, 0x9E07, 0x34B9, 0x9E09, 0x34BF,
+ 0x9E0B, 0x34F7, 0x9E0D, 0x34F8, 0x9E0F, 0x34FA, 0x9E10, 0x34F9, 0x9E11,
+ 0x34FC, 0x9E12, 0x34FB, 0x9E13, 0x3517, 0x9E14, 0x3516, 0x9E15, 0x3530,
+ 0x9E17, 0x3531, 0x9E19, 0x353D, 0x9E1A, 0x1765, 0x9E1B, 0x1769, 0x9E1D,
+ 0x3546, 0x9E1E, 0x176A, 0x9E75, 0x0BE3, 0x9E79, 0x1661, 0x9E7A, 0x336A,
+ 0x9E7C, 0x173D, 0x9E7D, 0x173E, 0x9E7F, 0x0BE4, 0x9E80, 0x2611, 0x9E82,
+ 0x0F7A, 0x9E83, 0x2AFC, 0x9E86, 0x2D31, 0x9E87, 0x2D32, 0x9E88, 0x2D30,
+ 0x9E89, 0x2F02, 0x9E8A, 0x2F01, 0x9E8B, 0x14C1, 0x9E8C, 0x306E, 0x9E8D,
+ 0x2F03, 0x9E8E, 0x306D, 0x9E91, 0x31BD, 0x9E92, 0x1605, 0x9E93, 0x1607,
+ 0x9E94, 0x31BC, 0x9E97, 0x1606, 0x9E99, 0x32B6, 0x9E9A, 0x32B8, 0x9E9B,
+ 0x32B7, 0x9E9C, 0x336B, 0x9E9D, 0x16B5, 0x9E9F, 0x171D, 0x9EA0, 0x34C3,
+ 0x9EA1, 0x34FD, 0x9EA4, 0x354A, 0x9EA5, 0x0BE5, 0x9EA7, 0x287C, 0x9EA9,
+ 0x1285, 0x9EAD, 0x2D34, 0x9EAE, 0x2D33, 0x9EB0, 0x2F04, 0x9EB4, 0x1608,
+ 0x9EB5, 0x1662, 0x9EB6, 0x3405, 0x9EB7, 0x3542, 0x9EBB, 0x0BE6, 0x9EBC,
+ 0x10FF, 0x9EBE, 0x1286, 0x9EC0, 0x31BE, 0x9EC2, 0x3471, 0x9EC3, 0x0DBB,
+ 0x9EC8, 0x2F05, 0x9ECC, 0x1751, 0x9ECD, 0x0DBC, 0x9ECE, 0x1287, 0x9ECF,
+ 0x14C2, 0x9ED0, 0x3472, 0x9ED1, 0x0DBD, 0x9ED3, 0x2AFD, 0x9ED4, 0x13B1,
+ 0x9ED5, 0x2D35, 0x9ED6, 0x2D36, 0x9ED8, 0x13B0, 0x9EDA, 0x2F06, 0x9EDB,
+ 0x14C6, 0x9EDC, 0x14C4, 0x9EDD, 0x14C5, 0x9EDE, 0x14C3, 0x9EDF, 0x306F,
+ 0x9EE0, 0x1572, 0x9EE4, 0x32BA, 0x9EE5, 0x32B9, 0x9EE6, 0x32BC, 0x9EE7,
+ 0x32BB, 0x9EE8, 0x1663, 0x9EEB, 0x336C, 0x9EED, 0x336E, 0x9EEE, 0x336D,
+ 0x9EEF, 0x16B6, 0x9EF0, 0x3406, 0x9EF2, 0x3473, 0x9EF3, 0x3474, 0x9EF4,
+ 0x171E, 0x9EF5, 0x34FE, 0x9EF6, 0x3518, 0x9EF7, 0x1762, 0x9EF9, 0x2360,
+ 0x9EFA, 0x2D37, 0x9EFB, 0x2F07, 0x9EFC, 0x31BF, 0x9EFD, 0x2612, 0x9EFF,
+ 0x2F08, 0x9F00, 0x3071, 0x9F01, 0x3070, 0x9F06, 0x3475, 0x9F07, 0x173F,
+ 0x9F09, 0x34FF, 0x9F0A, 0x3519, 0x9F0E, 0x0F7B, 0x9F0F, 0x2AFE, 0x9F10,
+ 0x2AFF, 0x9F12, 0x2D38, 0x9F13, 0x0F7C, 0x9F15, 0x1573, 0x9F16, 0x3072,
+ 0x9F18, 0x3370, 0x9F19, 0x16B7, 0x9F1A, 0x3371, 0x9F1B, 0x336F, 0x9F1C,
+ 0x3476, 0x9F1E, 0x34C4, 0x9F20, 0x0F7D, 0x9F22, 0x2F0B, 0x9F23, 0x2F0A,
+ 0x9F24, 0x2F09, 0x9F25, 0x3073, 0x9F28, 0x3077, 0x9F29, 0x3076, 0x9F2A,
+ 0x3075, 0x9F2B, 0x3074, 0x9F2C, 0x1574, 0x9F2D, 0x31C0, 0x9F2E, 0x32BE,
+ 0x9F2F, 0x1664, 0x9F30, 0x32BD, 0x9F31, 0x3372, 0x9F32, 0x3409, 0x9F33,
+ 0x3408, 0x9F34, 0x16F2, 0x9F35, 0x3407, 0x9F36, 0x3479, 0x9F37, 0x3478,
+ 0x9F38, 0x3477, 0x9F3B, 0x1100, 0x9F3D, 0x2D39, 0x9F3E, 0x14C7, 0x9F40,
+ 0x31C1, 0x9F41, 0x31C2, 0x9F42, 0x340A, 0x9F43, 0x347A, 0x9F46, 0x34C5,
+ 0x9F47, 0x3500, 0x9F48, 0x3532, 0x9F49, 0x354C, 0x9F4A, 0x1101, 0x9F4B,
+ 0x14C8, 0x9F4C, 0x3078, 0x9F4D, 0x31C3, 0x9F4E, 0x3373, 0x9F4F, 0x347B,
+ 0x9F52, 0x1289, 0x9F54, 0x2F0C, 0x9F55, 0x3079, 0x9F56, 0x31C4, 0x9F57,
+ 0x31C5, 0x9F58, 0x31C6, 0x9F59, 0x32C3, 0x9F5B, 0x32BF, 0x9F5C, 0x16B8,
+ 0x9F5D, 0x32C2, 0x9F5E, 0x32C1, 0x9F5F, 0x1665, 0x9F60, 0x32C0, 0x9F61,
+ 0x1667, 0x9F63, 0x1666, 0x9F64, 0x3375, 0x9F65, 0x3374, 0x9F66, 0x16B9,
+ 0x9F67, 0x16BA, 0x9F6A, 0x16F4, 0x9F6B, 0x340B, 0x9F6C, 0x16F3, 0x9F6E,
+ 0x347E, 0x9F6F, 0x347F, 0x9F70, 0x347D, 0x9F71, 0x347C, 0x9F72, 0x1741,
+ 0x9F74, 0x34C6, 0x9F75, 0x34C7, 0x9F76, 0x34C8, 0x9F77, 0x1740, 0x9F78,
+ 0x3501, 0x9F79, 0x3504, 0x9F7A, 0x3503, 0x9F7B, 0x3502, 0x9F7E, 0x354B,
+ 0x9F8D, 0x13B2, 0x9F90, 0x157C, 0x9F91, 0x32C4, 0x9F92, 0x3376, 0x9F94,
+ 0x16F5, 0x9F95, 0x340C, 0x9F98, 0x354D, 0x9F9C, 0x13B3, 0x9FA0, 0x2F0D,
+ 0x9FA2, 0x340D, 0x9FA4, 0x351A, 0xE01F, 0x083A, 0xE026, 0x09FD, 0xE05B,
+ 0x030D, 0xE063, 0x016B, 0xE073, 0x0860, 0xE0F3, 0x0C23, 0xE12E, 0x17E4,
+ 0xE149, 0x212F, 0xE191, 0x115F, 0xE1BA, 0x0C79, 0xE1C9, 0x04C3, 0xE22C,
+ 0x18BD, 0xE22D, 0x0CBD, 0xE230, 0x0CA5, 0xE266, 0x0CCE, 0xE2A3, 0x0E84,
+ 0xE2BC, 0x0120, 0xE2EF, 0x1BA8, 0xE33A, 0x1055, 0xE340, 0x2DE8, 0xE34F,
+ 0x0121, 0xE35A, 0x106B, 0xE363, 0x1326, 0xE37C, 0x066B, 0xE37F, 0x132E,
+ 0xE3C5, 0x0D35, 0xE3D7, 0x27C2, 0xE3DC, 0x22AD, 0xE417, 0x134C, 0xE44A,
+ 0x09CE, 0xE478, 0x0BC7, 0xE485, 0x36E9, 0xE4C5, 0x1391, 0xE4DA, 0x16A4,
+ 0xE545, 0x3072, 0xE5D2, 0x0119, 0xE5D3, 0x011A, 0xE5D4, 0x011C, 0xE5D5,
+ 0x011B, 0xE5F4, 0x297C, 0xE6C6, 0x1D06, 0xE727, 0x29A1, 0xE7D3, 0x181B,
+ 0xE893, 0x2B24, 0xEB40, 0x2F50, 0xEB42, 0x1725, 0xEB45, 0x32ED, 0xEB6E,
+ 0x2AD9, 0xEB86, 0x1C14, 0xEB9E, 0x12E9, 0xEBA9, 0x2CAE, 0xEBBA, 0x1A64,
+ 0xEBC9, 0x1404, 0xEBCF, 0x2324, 0xEBD2, 0x346A, 0xEBDE, 0x2291, 0xEC01,
+ 0x1787, 0xEC02, 0x095F, 0xEC15, 0x1E99, 0xEC5B, 0x25C1, 0xEC5E, 0x0D0C,
+ 0xECA6, 0x05E6, 0xED28, 0x0728, 0xED6E, 0x24B6, 0xED7C, 0x1806, 0xED9E,
+ 0x3511, 0xEDE7, 0x0F82, 0xEE52, 0x05F2, 0xEE98, 0x247D, 0xF6B1, 0x01FA,
+ 0xF6B2, 0x01FB, 0xF6B3, 0x01FC, 0xF6B4, 0x01FD, 0xF6B5, 0x01FE, 0xF6B6,
+ 0x01FF, 0xF6B7, 0x0200, 0xF6B8, 0x0201, 0xF6B9, 0x0202, 0xF6BA, 0x0203,
+ 0xF6BB, 0x0204, 0xF6BC, 0x0205, 0xF6BD, 0x0206, 0xF6BE, 0x0207, 0xF6BF,
+ 0x0208, 0xF6C0, 0x0209, 0xF6C1, 0x020A, 0xF6C2, 0x020B, 0xF6C3, 0x020C,
+ 0xF6C4, 0x020D, 0xF6C5, 0x020E, 0xF6C6, 0x020F, 0xF6C7, 0x0210, 0xF6C8,
+ 0x0211, 0xF6C9, 0x0212, 0xF6CA, 0x0213, 0xF6CB, 0x0214, 0xF6CC, 0x0215,
+ 0xF6CD, 0x0216, 0xF6CE, 0x0217, 0xF6CF, 0x0219, 0xF6D0, 0x021A, 0xF6D1,
+ 0x021B, 0xF6D2, 0x021C, 0xF6D3, 0x021D, 0xF6D4, 0x021E, 0xF6D5, 0x021F,
+ 0xF6D6, 0x0220, 0xF6D7, 0x0221, 0xF6D8, 0x0222, 0xF6D9, 0x0223, 0xF6DA,
+ 0x0224, 0xF6DB, 0x0225, 0xF6DC, 0x0226, 0xF6DD, 0x0227, 0xF6DE, 0x0228,
+ 0xF6E0, 0x022A, 0xF6E1, 0x022B, 0xF6E2, 0x022C, 0xF6E4, 0x022E, 0xF6E6,
+ 0x0230, 0xF6E8, 0x35B3, 0xF6E9, 0x35B4, 0xF6EA, 0x35B5, 0xF6EB, 0x35B6,
+ 0xF6EC, 0x35B7, 0xF6ED, 0x35B8, 0xF6F0, 0x35BA, 0xF6F1, 0x35BB, 0xF6F2,
+ 0x35BC, 0xF6F3, 0x35BD, 0xF6F4, 0x35BE, 0xF6F5, 0x35BF, 0xF6F6, 0x35C0,
+ 0xF6F7, 0x35C1, 0xF6F8, 0x35C2, 0xF6F9, 0x35C3, 0xF6FA, 0x35C4, 0xF6FB,
+ 0x35C5, 0xF6FC, 0x35C6, 0xF6FD, 0x35C7, 0xF6FE, 0x35C8, 0xF6FF, 0x35C9,
+ 0xF700, 0x35CA, 0xF701, 0x35CB, 0xF702, 0x35CC, 0xF703, 0x35CD, 0xF704,
+ 0x35CE, 0xF705, 0x35CF, 0xF706, 0x35D0, 0xF707, 0x35D1, 0xF708, 0x35D2,
+ 0xF709, 0x35D3, 0xF70A, 0x35D4, 0xF70B, 0x35D5, 0xF70C, 0x35D6, 0xF70D,
+ 0x35D7, 0xF70E, 0x35D8, 0xF70F, 0x35D9, 0xF710, 0x35DA, 0xF711, 0x35DB,
+ 0xF712, 0x35DC, 0xF713, 0x35DD, 0xF714, 0x35DE, 0xF715, 0x35DF, 0xF716,
+ 0x35E0, 0xF717, 0x35E1, 0xF718, 0x35E2, 0xF719, 0x35E3, 0xF71A, 0x35E4,
+ 0xF71B, 0x35E5, 0xF71C, 0x35E6, 0xF71D, 0x35E7, 0xF71E, 0x35E8, 0xF71F,
+ 0x35E9, 0xF720, 0x35EA, 0xF721, 0x35EB, 0xF722, 0x35EC, 0xF723, 0x35ED,
+ 0xF724, 0x35EE, 0xF725, 0x35EF, 0xF726, 0x35F0, 0xF727, 0x35F1, 0xF728,
+ 0x35F2, 0xF729, 0x35F3, 0xF72A, 0x35F4, 0xF72B, 0x35F5, 0xF72C, 0x35F6,
+ 0xF72D, 0x35F7, 0xF72E, 0x35F8, 0xF72F, 0x35F9, 0xF730, 0x35FA, 0xF731,
+ 0x35FB, 0xF732, 0x35FC, 0xF733, 0x35FD, 0xF734, 0x35FE, 0xF735, 0x35FF,
+ 0xF736, 0x3600, 0xF737, 0x3601, 0xF738, 0x3602, 0xF739, 0x3603, 0xF73A,
+ 0x3604, 0xF73B, 0x3605, 0xF73C, 0x3606, 0xF73D, 0x3607, 0xF73E, 0x3608,
+ 0xF73F, 0x3609, 0xF740, 0x360A, 0xF741, 0x360B, 0xF742, 0x360C, 0xF743,
+ 0x360D, 0xF744, 0x360E, 0xF745, 0x360F, 0xF746, 0x3610, 0xF747, 0x3611,
+ 0xF748, 0x3612, 0xF749, 0x3613, 0xF74A, 0x3614, 0xF74B, 0x3615, 0xF74C,
+ 0x3616, 0xF74D, 0x3617, 0xF74E, 0x3618, 0xF74F, 0x3619, 0xF750, 0x361A,
+ 0xF751, 0x361B, 0xF752, 0x361C, 0xF753, 0x361D, 0xF754, 0x361E, 0xF755,
+ 0x361F, 0xF756, 0x3620, 0xF757, 0x3621, 0xF758, 0x3622, 0xF759, 0x3623,
+ 0xF75A, 0x3624, 0xF75B, 0x3625, 0xF75C, 0x3626, 0xF75D, 0x3627, 0xF75E,
+ 0x3628, 0xF75F, 0x3629, 0xF760, 0x362A, 0xF761, 0x362B, 0xF762, 0x362C,
+ 0xF763, 0x362D, 0xF764, 0x362E, 0xF765, 0x362F, 0xF766, 0x3630, 0xF767,
+ 0x3631, 0xF768, 0x3632, 0xF769, 0x3633, 0xF76A, 0x3634, 0xF76B, 0x3635,
+ 0xF76C, 0x3636, 0xF76D, 0x3637, 0xF76E, 0x3638, 0xF76F, 0x3639, 0xF770,
+ 0x363A, 0xF771, 0x363B, 0xF772, 0x363C, 0xF773, 0x363D, 0xF774, 0x363E,
+ 0xF775, 0x363F, 0xF776, 0x3640, 0xF777, 0x3641, 0xF778, 0x3642, 0xF779,
+ 0x3643, 0xF77A, 0x3644, 0xF77B, 0x3645, 0xF77C, 0x3646, 0xF77D, 0x3647,
+ 0xF77E, 0x3648, 0xF77F, 0x3649, 0xF780, 0x364A, 0xF781, 0x364B, 0xF782,
+ 0x364C, 0xF783, 0x364D, 0xF784, 0x364E, 0xF785, 0x364F, 0xF786, 0x3650,
+ 0xF787, 0x3651, 0xF788, 0x3652, 0xF789, 0x3653, 0xF78A, 0x3654, 0xF78B,
+ 0x3655, 0xF78C, 0x3656, 0xF78D, 0x3657, 0xF78E, 0x3658, 0xF78F, 0x3659,
+ 0xF790, 0x365A, 0xF791, 0x365B, 0xF792, 0x365C, 0xF793, 0x365D, 0xF794,
+ 0x365E, 0xF795, 0x365F, 0xF796, 0x3660, 0xF797, 0x3661, 0xF798, 0x3662,
+ 0xF799, 0x3663, 0xF79A, 0x3664, 0xF79B, 0x3665, 0xF79C, 0x3666, 0xF79D,
+ 0x3667, 0xF79E, 0x3668, 0xF79F, 0x3669, 0xF7A0, 0x366A, 0xF7A1, 0x366B,
+ 0xF7A2, 0x366C, 0xF7A3, 0x366D, 0xF7A4, 0x366E, 0xF7A5, 0x366F, 0xF7A6,
+ 0x3670, 0xF7A7, 0x3671, 0xF7A8, 0x3672, 0xF7A9, 0x3673, 0xF7AA, 0x3674,
+ 0xF7AB, 0x3675, 0xF7AC, 0x3676, 0xF7AD, 0x3677, 0xF7AE, 0x3678, 0xF7AF,
+ 0x3679, 0xF7B0, 0x367A, 0xF7B1, 0x367B, 0xF7B2, 0x367C, 0xF7B3, 0x367D,
+ 0xF7B4, 0x367E, 0xF7B5, 0x367F, 0xF7B6, 0x3680, 0xF7B7, 0x3681, 0xF7B8,
+ 0x3682, 0xF7B9, 0x3683, 0xF7BA, 0x3684, 0xF7BB, 0x3685, 0xF7BC, 0x3686,
+ 0xF7BD, 0x3687, 0xF7BE, 0x3688, 0xF7BF, 0x3689, 0xF7C0, 0x368A, 0xF7C1,
+ 0x368B, 0xF7C2, 0x368C, 0xF7C3, 0x368D, 0xF7C4, 0x368E, 0xF7C5, 0x368F,
+ 0xF7C6, 0x3690, 0xF7C7, 0x3691, 0xF7C8, 0x3692, 0xF7C9, 0x3693, 0xF7CA,
+ 0x3694, 0xF7CB, 0x3695, 0xF7CC, 0x3696, 0xF7CD, 0x3697, 0xF7CE, 0x3698,
+ 0xF7CF, 0x3699, 0xF7D0, 0x369A, 0xF7D1, 0x369B, 0xF7D2, 0x369C, 0xF7D3,
+ 0x369D, 0xF7D4, 0x369E, 0xF7D5, 0x369F, 0xF7D6, 0x36A0, 0xF7D7, 0x36A1,
+ 0xF7D8, 0x36A2, 0xF7D9, 0x36A3, 0xF7DA, 0x36A4, 0xF7DB, 0x36A5, 0xF7DC,
+ 0x36A6, 0xF7DD, 0x36A7, 0xF7DE, 0x36A8, 0xF7DF, 0x36A9, 0xF7E0, 0x36AA,
+ 0xF7E1, 0x36AB, 0xF7E2, 0x36AC, 0xF7E3, 0x36AD, 0xF7E4, 0x36AE, 0xF7E5,
+ 0x36AF, 0xF7E6, 0x36B0, 0xF7E7, 0x36B1, 0xF7E8, 0x36B2, 0xF7E9, 0x36B3,
+ 0xF7EA, 0x36B4, 0xF7EB, 0x36B5, 0xF7EC, 0x36B6, 0xF7ED, 0x36B7, 0xF7EE,
+ 0x36B8, 0xF817, 0x36E1, 0xF818, 0x36E2, 0xF819, 0x36E3, 0xF81A, 0x36E4,
+ 0xF81B, 0x36E5, 0xF81C, 0x36E6, 0xF81D, 0x36E7, 0xFA0C, 0x0274, 0xFA0D,
+ 0x2381, 0xFE30, 0x006D, 0xFE31, 0x007A, 0xFE33, 0x35AF, 0xFE34, 0x35B1,
+ 0xFE35, 0x0082, 0xFE36, 0x0083, 0xFE37, 0x0086, 0xFE38, 0x0087, 0xFE39,
+ 0x008A, 0xFE3A, 0x008B, 0xFE3B, 0x008E, 0xFE3C, 0x008F, 0xFE3D, 0x0092,
+ 0xFE3E, 0x0093, 0xFE3F, 0x0096, 0xFE40, 0x0097, 0xFE41, 0x009A, 0xFE42,
+ 0x009B, 0xFE43, 0x009E, 0xFE44, 0x009F, 0xFE49, 0x00C7, 0xFE4A, 0x00C8,
+ 0xFE4B, 0x00CB, 0xFE4C, 0x00CC, 0xFE4D, 0x00C9, 0xFE4E, 0x00CA, 0xFE4F,
+ 0x35B2, 0xFE50, 0x0070, 0xFE51, 0x0071, 0xFE52, 0x0072, 0xFE54, 0x0074,
+ 0xFE55, 0x0075, 0xFE56, 0x0076, 0xFE57, 0x0077, 0xFE59, 0x00A0, 0xFE5A,
+ 0x00A1, 0xFE5B, 0x00A2, 0xFE5C, 0x00A3, 0xFE5D, 0x00A4, 0xFE5E, 0x00A5,
+ 0xFE5F, 0x00CD, 0xFE60, 0x00CE, 0xFE61, 0x00CF, 0xFE62, 0x00DF, 0xFE63,
+ 0x00E0, 0xFE64, 0x00E1, 0xFE65, 0x00E2, 0xFE66, 0x00E3, 0xFE68, 0x0102,
+ 0xFE69, 0x010C, 0xFE6A, 0x010D, 0xFE6B, 0x010E, 0xFF01, 0x006C, 0xFF02,
+ 0x36E4, 0xFF03, 0x00AE, 0xFF04, 0x0103, 0xFF05, 0x0108, 0xFF06, 0x00AF,
+ 0xFF07, 0x36E3, 0xFF08, 0x0080, 0xFF09, 0x0081, 0xFF0A, 0x00B0, 0xFF0B,
+ 0x00D0, 0xFF0C, 0x0064, 0xFF0D, 0x00D1, 0xFF0E, 0x0067, 0xFF0F, 0x0101,
+ 0xFF10, 0x014D, 0xFF11, 0x014E, 0xFF12, 0x014F, 0xFF13, 0x0150, 0xFF14,
+ 0x0151, 0xFF15, 0x0152, 0xFF16, 0x0153, 0xFF17, 0x0154, 0xFF18, 0x0155,
+ 0xFF19, 0x0156, 0xFF1A, 0x006A, 0xFF1B, 0x0069, 0xFF1C, 0x00D6, 0xFF1D,
+ 0x00D8, 0xFF1E, 0x00D7, 0xFF1F, 0x006B, 0xFF20, 0x0109, 0xFF21, 0x016D,
+ 0xFF22, 0x016E, 0xFF23, 0x016F, 0xFF24, 0x0170, 0xFF25, 0x0171, 0xFF26,
+ 0x0172, 0xFF27, 0x0173, 0xFF28, 0x0174, 0xFF29, 0x0175, 0xFF2A, 0x0176,
+ 0xFF2B, 0x0177, 0xFF2C, 0x0178, 0xFF2D, 0x0179, 0xFF2E, 0x017A, 0xFF2F,
+ 0x017B, 0xFF30, 0x017C, 0xFF31, 0x017D, 0xFF32, 0x017E, 0xFF33, 0x017F,
+ 0xFF34, 0x0180, 0xFF35, 0x0181, 0xFF36, 0x0182, 0xFF37, 0x0183, 0xFF38,
+ 0x0184, 0xFF39, 0x0185, 0xFF3A, 0x0186, 0xFF3B, 0x35BE, 0xFF3C, 0x0102,
+ 0xFF3D, 0x35BF, 0xFF3E, 0x35B4, 0xFF3F, 0x00C5, 0xFF41, 0x0187, 0xFF42,
+ 0x0188, 0xFF43, 0x0189, 0xFF44, 0x018A, 0xFF45, 0x018B, 0xFF46, 0x018C,
+ 0xFF47, 0x018D, 0xFF48, 0x018E, 0xFF49, 0x018F, 0xFF4A, 0x0190, 0xFF4B,
+ 0x0191, 0xFF4C, 0x0192, 0xFF4D, 0x0193, 0xFF4E, 0x0194, 0xFF4F, 0x0195,
+ 0xFF50, 0x0196, 0xFF51, 0x0197, 0xFF52, 0x0198, 0xFF53, 0x0199, 0xFF54,
+ 0x019A, 0xFF55, 0x019B, 0xFF56, 0x019C, 0xFF57, 0x019D, 0xFF58, 0x019E,
+ 0xFF59, 0x019F, 0xFF5A, 0x01A0, 0xFF5B, 0x0084, 0xFF5C, 0x0078, 0xFF5D,
+ 0x0085, 0xFF5E, 0x00E4, 0xFF64, 0x0071, 0xFFE0, 0x0106, 0xFFE1, 0x0107,
+ 0xFFE2, 0x36E1, 0xFFE3, 0x00C4, 0xFFE4, 0x36E2, 0xFFE5, 0x0104,
};
const FX_WORD g_FXCMAP_UniCNS_UTF16_H_0_DWord[3 * 3] = {
diff --git a/core/src/fpdfapi/fpdf_cmaps/CNS1/cmaps_cns1.cpp b/core/src/fpdfapi/fpdf_cmaps/CNS1/cmaps_cns1.cpp
index 15d3a83fbf..94617a4ab9 100644
--- a/core/src/fpdfapi/fpdf_cmaps/CNS1/cmaps_cns1.cpp
+++ b/core/src/fpdfapi/fpdf_cmaps/CNS1/cmaps_cns1.cpp
@@ -12,27 +12,44 @@
#include "cmaps_cns1.h"
static const FXCMAP_CMap g_FXCMAP_CNS1_cmaps[] = {
- { "B5pc-H", FXCMAP_CMap::Range, g_FXCMAP_B5pc_H_0, 247, FXCMAP_CMap::None, NULL, 0, 0 },
- { "B5pc-V", FXCMAP_CMap::Range, g_FXCMAP_B5pc_V_0, 12, FXCMAP_CMap::None, NULL, 0, -1 },
- { "HKscs-B5-H", FXCMAP_CMap::Range, g_FXCMAP_HKscs_B5_H_5, 1210, FXCMAP_CMap::None, NULL, 0, 0 },
- { "HKscs-B5-V", FXCMAP_CMap::Range, g_FXCMAP_HKscs_B5_V_5, 13, FXCMAP_CMap::None, NULL, 0, -1 },
- { "ETen-B5-H", FXCMAP_CMap::Range, g_FXCMAP_ETen_B5_H_0, 254, FXCMAP_CMap::None, NULL, 0, 0 },
- { "ETen-B5-V", FXCMAP_CMap::Range, g_FXCMAP_ETen_B5_V_0, 13, FXCMAP_CMap::None, NULL, 0, -1 },
- { "ETenms-B5-H", FXCMAP_CMap::Range, g_FXCMAP_ETenms_B5_H_0, 1, FXCMAP_CMap::None, NULL, 0, -2 },
- { "ETenms-B5-V", FXCMAP_CMap::Range, g_FXCMAP_ETenms_B5_V_0, 18, FXCMAP_CMap::None, NULL, 0, -1 },
- { "CNS-EUC-H", FXCMAP_CMap::Range, g_FXCMAP_CNS_EUC_H_0, 157, FXCMAP_CMap::Range, g_FXCMAP_CNS_EUC_H_0_DWord, 238, 0 },
- { "CNS-EUC-V", FXCMAP_CMap::Range, g_FXCMAP_CNS_EUC_V_0, 180, FXCMAP_CMap::Range, g_FXCMAP_CNS_EUC_V_0_DWord, 261, 0 },
- { "UniCNS-UCS2-H", FXCMAP_CMap::Range, g_FXCMAP_UniCNS_UCS2_H_3, 16418, FXCMAP_CMap::None, NULL, 0, 0 },
- { "UniCNS-UCS2-V", FXCMAP_CMap::Range, g_FXCMAP_UniCNS_UCS2_V_3, 13, FXCMAP_CMap::None, NULL, 0, -1 },
- { "UniCNS-UTF16-H", FXCMAP_CMap::Single, g_FXCMAP_UniCNS_UTF16_H_0, 14557, FXCMAP_CMap::None, NULL, 0, 0 },
- { "UniCNS-UTF16-V", FXCMAP_CMap::Range, g_FXCMAP_UniCNS_UCS2_V_3, 13, FXCMAP_CMap::None, NULL, 0, -1 },
+ {"B5pc-H", FXCMAP_CMap::Range, g_FXCMAP_B5pc_H_0, 247, FXCMAP_CMap::None,
+ NULL, 0, 0},
+ {"B5pc-V", FXCMAP_CMap::Range, g_FXCMAP_B5pc_V_0, 12, FXCMAP_CMap::None,
+ NULL, 0, -1},
+ {"HKscs-B5-H", FXCMAP_CMap::Range, g_FXCMAP_HKscs_B5_H_5, 1210,
+ FXCMAP_CMap::None, NULL, 0, 0},
+ {"HKscs-B5-V", FXCMAP_CMap::Range, g_FXCMAP_HKscs_B5_V_5, 13,
+ FXCMAP_CMap::None, NULL, 0, -1},
+ {"ETen-B5-H", FXCMAP_CMap::Range, g_FXCMAP_ETen_B5_H_0, 254,
+ FXCMAP_CMap::None, NULL, 0, 0},
+ {"ETen-B5-V", FXCMAP_CMap::Range, g_FXCMAP_ETen_B5_V_0, 13,
+ FXCMAP_CMap::None, NULL, 0, -1},
+ {"ETenms-B5-H", FXCMAP_CMap::Range, g_FXCMAP_ETenms_B5_H_0, 1,
+ FXCMAP_CMap::None, NULL, 0, -2},
+ {"ETenms-B5-V", FXCMAP_CMap::Range, g_FXCMAP_ETenms_B5_V_0, 18,
+ FXCMAP_CMap::None, NULL, 0, -1},
+ {"CNS-EUC-H", FXCMAP_CMap::Range, g_FXCMAP_CNS_EUC_H_0, 157,
+ FXCMAP_CMap::Range, g_FXCMAP_CNS_EUC_H_0_DWord, 238, 0},
+ {"CNS-EUC-V", FXCMAP_CMap::Range, g_FXCMAP_CNS_EUC_V_0, 180,
+ FXCMAP_CMap::Range, g_FXCMAP_CNS_EUC_V_0_DWord, 261, 0},
+ {"UniCNS-UCS2-H", FXCMAP_CMap::Range, g_FXCMAP_UniCNS_UCS2_H_3, 16418,
+ FXCMAP_CMap::None, NULL, 0, 0},
+ {"UniCNS-UCS2-V", FXCMAP_CMap::Range, g_FXCMAP_UniCNS_UCS2_V_3, 13,
+ FXCMAP_CMap::None, NULL, 0, -1},
+ {"UniCNS-UTF16-H", FXCMAP_CMap::Single, g_FXCMAP_UniCNS_UTF16_H_0, 14557,
+ FXCMAP_CMap::None, NULL, 0, 0},
+ {"UniCNS-UTF16-V", FXCMAP_CMap::Range, g_FXCMAP_UniCNS_UCS2_V_3, 13,
+ FXCMAP_CMap::None, NULL, 0, -1},
};
-void CPDF_ModuleMgr::LoadEmbeddedCNS1CMaps()
-{
- CPDF_FontGlobals* pFontGlobals = CPDF_ModuleMgr::Get()->GetPageModule()->GetFontGlobals();
- pFontGlobals->m_EmbeddedCharsets[CIDSET_CNS1].m_pMapList = g_FXCMAP_CNS1_cmaps;
- pFontGlobals->m_EmbeddedCharsets[CIDSET_CNS1].m_Count = FX_ArraySize(g_FXCMAP_CNS1_cmaps);
- pFontGlobals->m_EmbeddedToUnicodes[CIDSET_CNS1].m_pMap = g_FXCMAP_CNS1CID2Unicode_5;
- pFontGlobals->m_EmbeddedToUnicodes[CIDSET_CNS1].m_Count = 19088;
+void CPDF_ModuleMgr::LoadEmbeddedCNS1CMaps() {
+ CPDF_FontGlobals* pFontGlobals =
+ CPDF_ModuleMgr::Get()->GetPageModule()->GetFontGlobals();
+ pFontGlobals->m_EmbeddedCharsets[CIDSET_CNS1].m_pMapList =
+ g_FXCMAP_CNS1_cmaps;
+ pFontGlobals->m_EmbeddedCharsets[CIDSET_CNS1].m_Count =
+ FX_ArraySize(g_FXCMAP_CNS1_cmaps);
+ pFontGlobals->m_EmbeddedToUnicodes[CIDSET_CNS1].m_pMap =
+ g_FXCMAP_CNS1CID2Unicode_5;
+ pFontGlobals->m_EmbeddedToUnicodes[CIDSET_CNS1].m_Count = 19088;
}
diff --git a/core/src/fpdfapi/fpdf_cmaps/GB1/Adobe-GB1-UCS2_5.cpp b/core/src/fpdfapi/fpdf_cmaps/GB1/Adobe-GB1-UCS2_5.cpp
index 92cec8f382..c3d67eaeab 100644
--- a/core/src/fpdfapi/fpdf_cmaps/GB1/Adobe-GB1-UCS2_5.cpp
+++ b/core/src/fpdfapi/fpdf_cmaps/GB1/Adobe-GB1-UCS2_5.cpp
@@ -7,3790 +7,3369 @@
#include "cmaps_gb1.h"
const FX_WORD g_FXCMAP_GB1CID2Unicode_5[30284] = {
- 0xFFFD, 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,
- 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, 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,
- 0x3220, 0x3221, 0x3222, 0x3223, 0x3224, 0x3225, 0x3226, 0x3227,
- 0x3228, 0x3229, 0x2160, 0x2161, 0x2162, 0x2163, 0x2164, 0x2165,
- 0x2166, 0x2167, 0x2168, 0x2169, 0x216A, 0x216B, 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, 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, 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, 0x0391, 0x0392, 0x0393,
- 0x0394, 0x0395, 0x0396, 0x0397, 0x0398, 0x0399, 0x039A, 0x039B,
- 0x039C, 0x039D, 0x039E, 0x039F, 0x03A0, 0x03A1, 0x03A3, 0x03A4,
- 0x03A5, 0x03A6, 0x03A7, 0x03A8, 0x03A9, 0x03B1, 0x03B2, 0x03B3,
- 0x03B4, 0x03B5, 0x03B6, 0x03B7, 0x03B8, 0x03B9, 0x03BA, 0x03BB,
- 0x03BC, 0x03BD, 0x03BE, 0x03BF, 0x03C0, 0x03C1, 0x03C3, 0x03C4,
- 0x03C5, 0x03C6, 0x03C7, 0x03C8, 0x03C9, 0xFF0C, 0x3002, 0x3001,
- 0xFF1A, 0xFF1B, 0xFF01, 0xFF1F, 0xFE35, 0xFE36, 0xFE39, 0xFE3A,
- 0xFE3F, 0xFE40, 0xFE3D, 0xFE3E, 0xFE41, 0xFE42, 0xFE43, 0xFE44,
- 0x3016, 0x3017, 0xFE3B, 0xFE3C, 0xFE37, 0xFE38, 0xFE31, 0x2026,
- 0xFE33, 0xFE34, 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, 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, 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, 0x1E3F,
- 0x0144, 0x0148, 0x01F9, 0x0261, 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, 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, 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, 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, 0x1E3F,
- 0x0144, 0x0148, 0x01F9, 0x0261, 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, 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,
- 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, 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, 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, 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,
- 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, 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, 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, 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,
- 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, 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, 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, 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,
- 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, 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, 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, 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,
- 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, 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, 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, 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,
- 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, 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, 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, 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,
- 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, 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, 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, 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,
- 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, 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, 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, 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,
- 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, 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, 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, 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,
- 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 0x3007,
- 0xFF5E, 0x2016, 0x3013, 0xFF0E, 0xFF1D, 0xFF3B, 0xFF3D, 0xFFE3,
- 0x00FC, 0x00A9, 0x2122, 0x2026, 0x0020, 0x769A, 0x85F9, 0x7919,
- 0x611B, 0x9AAF, 0x8956, 0x58E9, 0x7F77, 0x64FA, 0x6557, 0x9812,
- 0x8FA6, 0x7D46, 0x5E6B, 0x7D81, 0x938A, 0x8B17, 0x98FD, 0x5BF6,
- 0x5831, 0x9B91, 0x8F29, 0x8C9D, 0x92C7, 0x72FD, 0x5099, 0x618A,
- 0x7DB3, 0x7B46, 0x7562, 0x6583, 0x5E63, 0x9589, 0x908A, 0x7DE8,
- 0x8CB6, 0x8B8A, 0x8FAF, 0x8FAE, 0x6A19, 0x9C49, 0x765F, 0x7015,
- 0x6FF1, 0x8CD3, 0x64EF, 0x9905, 0x64A5, 0x9262, 0x9251, 0x99C1,
- 0x88DC, 0x8CA1, 0x53C3, 0x8836, 0x6B98, 0x615A, 0x6158, 0x71E6,
- 0x84BC, 0x8259, 0x5009, 0x6EC4, 0x53A0, 0x5074, 0x6E2C, 0x5C64,
- 0x8A6B, 0x6519, 0x647B, 0x87EC, 0x995E, 0x8B92, 0x7E8F, 0x93DF,
- 0x7523, 0x95E1, 0x986B, 0x5834, 0x5617, 0x9577, 0x511F, 0x8178,
- 0x5EE0, 0x66A2, 0x9214, 0x8ECA, 0x5FB9, 0x5875, 0x9673, 0x896F,
- 0x7A31, 0x61F2, 0x8AA0, 0x9A01, 0x9072, 0x99B3, 0x9F52, 0x71BE,
- 0x885D, 0x87F2, 0x5BF5, 0x7587, 0x8E8A, 0x7C4C, 0x7DA2, 0x919C,
- 0x92E4, 0x96DB, 0x790E, 0x5132, 0x89F8, 0x8655, 0x50B3, 0x7621,
- 0x95D6, 0x5275, 0x9318, 0x7D14, 0x7DBD, 0x8FAD, 0x8A5E, 0x8CDC,
- 0x8070, 0x5F9E, 0x53E2, 0x8EA5, 0x7AC4, 0x932F, 0x9054, 0x5E36,
- 0x8CB8, 0x64D4, 0x55AE, 0x9132, 0x64A3, 0x81BD, 0x619A, 0x8A95,
- 0x5F48, 0x7576, 0x64CB, 0x9EE8, 0x8569, 0x6A94, 0x6417, 0x5CF6,
- 0x79B1, 0x5C0E, 0x71C8, 0x9127, 0x6575, 0x6ECC, 0x905E, 0x7DE0,
- 0x985B, 0x9EDE, 0x588A, 0x96FB, 0x6FB1, 0x91E3, 0x8ABF, 0x8ADC,
- 0x91D8, 0x9802, 0x9320, 0x8A02, 0x6771, 0x52D5, 0x68DF, 0x51CD,
- 0x9B25, 0x72A2, 0x7368, 0x8B80, 0x8CED, 0x934D, 0x935B, 0x65B7,
- 0x7DDE, 0x968A, 0x5C0D, 0x5678, 0x9813, 0x920D, 0x596A, 0x58AE,
- 0x9D5D, 0x984D, 0x8A1B, 0x60E1, 0x9913, 0x5152, 0x723E, 0x990C,
- 0x8CB3, 0x767C, 0x7F70, 0x95A5, 0x792C, 0x91E9, 0x7169, 0x7BC4,
- 0x8CA9, 0x98EF, 0x8A2A, 0x7D21, 0x98DB, 0x8AB9, 0x5EE2, 0x8CBB,
- 0x7D1B, 0x58B3, 0x596E, 0x61A4, 0x7CDE, 0x8C50, 0x6953, 0x92D2,
- 0x98A8, 0x760B, 0x99AE, 0x7E2B, 0x8AF7, 0x9CF3, 0x819A, 0x8F3B,
- 0x64AB, 0x8F14, 0x8CE6, 0x5FA9, 0x8CA0, 0x8A03, 0x5A66, 0x7E1B,
- 0x8A72, 0x9223, 0x84CB, 0x5E79, 0x8D95, 0x8D1B, 0x5CA1, 0x525B,
- 0x92FC, 0x7DB1, 0x5D17, 0x93AC, 0x64F1, 0x9D3F, 0x95A3, 0x927B,
- 0x500B, 0x7D66, 0x9F94, 0x978F, 0x8CA2, 0x920E, 0x6E9D, 0x69CB,
- 0x8CFC, 0x8831, 0x9867, 0x526E, 0x95DC, 0x89C0, 0x9928, 0x6163,
- 0x8CAB, 0x5EE3, 0x898F, 0x6B78, 0x9F9C, 0x95A8, 0x8ECC, 0x8A6D,
- 0x6AC3, 0x8CB4, 0x528A, 0x8F25, 0x934B, 0x570B, 0x904E, 0x99ED,
- 0x97D3, 0x6F22, 0x865F, 0x95A1, 0x9DB4, 0x8CC0, 0x8F5F, 0x9D3B,
- 0x7D05, 0x58FA, 0x8B77, 0x6EEC, 0x5629, 0x83EF, 0x756B, 0x5283,
- 0x8A71, 0x61F7, 0x58DE, 0x6B61, 0x74B0, 0x9084, 0x7DE9, 0x8B0A,
- 0x63EE, 0x8F1D, 0x8CC4, 0x7A62, 0x6703, 0x71F4, 0x532F, 0x8AF1,
- 0x8AA8, 0x7E6A, 0x8477, 0x6E3E, 0x7372, 0x8CA8, 0x798D, 0x64CA,
- 0x6A5F, 0x7A4D, 0x9951, 0x8B4F, 0x9DC4, 0x7E3E, 0x7DDD, 0x6975,
- 0x8F2F, 0x7D1A, 0x64E0, 0x5E7E, 0x858A, 0x5291, 0x6FDF, 0x8A08,
- 0x8A18, 0x969B, 0x7E7C, 0x7D00, 0x593E, 0x83A2, 0x9830, 0x8CC8,
- 0x9240, 0x50F9, 0x99D5, 0x6BB2, 0x76E3, 0x5805, 0x7B8B, 0x9593,
- 0x8271, 0x7DD8, 0x7E6D, 0x6AA2, 0x9E7C, 0x63C0, 0x64BF, 0x7C21,
- 0x5109, 0x85A6, 0x6ABB, 0x9452, 0x8E10, 0x8CE4, 0x898B, 0x9375,
- 0x8266, 0x528D, 0x991E, 0x6F38, 0x6FFA, 0x6F97, 0x5C07, 0x6F3F,
- 0x8523, 0x69F3, 0x596C, 0x8B1B, 0x91AC, 0x81A0, 0x6F86, 0x9A55,
- 0x5B0C, 0x652A, 0x9278, 0x77EF, 0x50E5, 0x9903, 0x7E73, 0x7D5E,
- 0x8F4E, 0x8F03, 0x968E, 0x7BC0, 0x6F54, 0x7D50, 0x8AA1, 0x7DCA,
- 0x9326, 0x50C5, 0x8B39, 0x9032, 0x71FC, 0x76E1, 0x52C1, 0x8396,
- 0x9BE8, 0x9A5A, 0x7D93, 0x9838, 0x93E1, 0x5F91, 0x75D9, 0x7AF6,
- 0x7CFE, 0x820A, 0x99D2, 0x8209, 0x64DA, 0x92F8, 0x61FC, 0x5287,
- 0x9D51, 0x7D79, 0x89BA, 0x8A23, 0x7D76, 0x921E, 0x8ECD, 0x99FF,
- 0x958B, 0x51F1, 0x9846, 0x6BBB, 0x8AB2, 0x58BE, 0x61C7, 0x6473,
- 0x5EAB, 0x8932, 0x8A87, 0x584A, 0x5108, 0x5BEC, 0x7926, 0x66E0,
- 0x8667, 0x5DCB, 0x7ABA, 0x994B, 0x6F70, 0x64F4, 0x95CA, 0x881F,
- 0x81D8, 0x840A, 0x4F86, 0x8CF4, 0x85CD, 0x6B04, 0x6514, 0x7C43,
- 0x95CC, 0x862D, 0x703E, 0x8B95, 0x652C, 0x89BD, 0x61F6, 0x7E9C,
- 0x721B, 0x6FEB, 0x6488, 0x52DE, 0x6F87, 0x6A02, 0x9433, 0x58D8,
- 0x985E, 0x7C6C, 0x96E2, 0x7055, 0x88CF, 0x9BC9, 0x79AE, 0x9E97,
- 0x53B2, 0x52F5, 0x792B, 0x6B77, 0x701D, 0x96B8, 0x5006, 0x806F,
- 0x84EE, 0x9023, 0x942E, 0x6190, 0x6F23, 0x7C3E, 0x6582, 0x81C9,
- 0x93C8, 0x6200, 0x7149, 0x7DF4, 0x7CE7, 0x5169, 0x8F1B, 0x8AD2,
- 0x7642, 0x907C, 0x9410, 0x7375, 0x81E8, 0x9130, 0x9C57, 0x8CC3,
- 0x9F61, 0x9234, 0x9748, 0x5DBA, 0x9818, 0x993E, 0x5289, 0x9F8D,
- 0x807E, 0x56A8, 0x7C60, 0x58DF, 0x650F, 0x96B4, 0x6A13, 0x5A41,
- 0x645F, 0x7C0D, 0x8606, 0x76E7, 0x9871, 0x5EEC, 0x7210, 0x64C4,
- 0x6EF7, 0x865C, 0x9B6F, 0x8CC2, 0x9332, 0x9678, 0x9A62, 0x92C1,
- 0x5C62, 0x7E37, 0x616E, 0x6FFE, 0x7DD1, 0x5DD2, 0x6523, 0x5B7F,
- 0x7064, 0x4E82, 0x6384, 0x8F2A, 0x502B, 0x4F96, 0x6DEA, 0x7DB8,
- 0x8AD6, 0x863F, 0x7F85, 0x908F, 0x947C, 0x7C6E, 0x9A3E, 0x99F1,
- 0x7D61, 0x5ABD, 0x746A, 0x78BC, 0x879E, 0x99AC, 0x99E1, 0x55CE,
- 0x8CB7, 0x9EA5, 0x8CE3, 0x9081, 0x779E, 0x9945, 0x883B, 0x6EFF,
- 0x8B3E, 0x9328, 0x925A, 0x8CBF, 0x9382, 0x9580, 0x60B6, 0x5011,
- 0x9333, 0x5922, 0x8B0E, 0x5F4C, 0x8993, 0x7DBF, 0x7DEC, 0x5EDF,
- 0x6EC5, 0x61AB, 0x95A9, 0x9CF4, 0x9298, 0x8B2C, 0x8B00, 0x755D,
- 0x9209, 0x7D0D, 0x96E3, 0x6493, 0x8166, 0x60F1, 0x9B27, 0x9912,
- 0x64EC, 0x81A9, 0x6506, 0x91C0, 0x9CE5, 0x8076, 0x5699, 0x9477,
- 0x93B3, 0x6AB8, 0x7370, 0x5BE7, 0x64F0, 0x6FD8, 0x9215, 0x7D10,
- 0x81BF, 0x6FC3, 0x8FB2, 0x7627, 0x8AFE, 0x6B50, 0x9DD7, 0x6BC6,
- 0x5614, 0x6F1A, 0x76E4, 0x9F90, 0x8CE0, 0x5674, 0x9D6C, 0x9A19,
- 0x98C4, 0x983B, 0x8CA7, 0x860B, 0x6191, 0x8A55, 0x6F51, 0x9817,
- 0x64B2, 0x92EA, 0x50D5, 0x6A38, 0x8B5C, 0x81CD, 0x9F4A, 0x9A0E,
- 0x8C48, 0x5553, 0x6C23, 0x8A16, 0x727D, 0x91FA, 0x925B, 0x9077,
- 0x7C3D, 0x8B19, 0x9322, 0x9257, 0x6DFA, 0x8B74, 0x5879, 0x69CD,
- 0x55C6, 0x58BB, 0x8594, 0x6436, 0x936C, 0x6A4B, 0x55AC, 0x50D1,
- 0x7FF9, 0x7AC5, 0x7ACA, 0x6B3D, 0x89AA, 0x5BE2, 0x8F15, 0x6C2B,
- 0x50BE, 0x9803, 0x8ACB, 0x6176, 0x74CA, 0x7AAE, 0x8DA8, 0x5340,
- 0x8EC0, 0x9A45, 0x9F72, 0x9874, 0x6B0A, 0x52F8, 0x9D72, 0x78BA,
- 0x8B93, 0x9952, 0x64FE, 0x7E5E, 0x71B1, 0x97CC, 0x8A8D, 0x7D09,
- 0x69AE, 0x7D68, 0x8EDF, 0x92ED, 0x958F, 0x6F64, 0x7051, 0x85A9,
- 0x9C13, 0x8CFD, 0x5098, 0x55AA, 0x9A37, 0x6383, 0x6F80, 0x6BBA,
- 0x7D17, 0x7BE9, 0x66EC, 0x9583, 0x965D, 0x8D0D, 0x7E55, 0x50B7,
- 0x8CDE, 0x71D2, 0x7D39, 0x8CD2, 0x6368, 0x651D, 0x61FE, 0x8A2D,
- 0x7D33, 0x5BE9, 0x5B38, 0x814E, 0x6EF2, 0x8072, 0x7E69, 0x52DD,
- 0x8056, 0x5E2B, 0x7345, 0x6FD5, 0x8A69, 0x6642, 0x8755, 0x5BE6,
- 0x8B58, 0x99DB, 0x52E2, 0x9069, 0x91CB, 0x98FE, 0x8996, 0x8A66,
- 0x58FD, 0x7378, 0x6A1E, 0x8F38, 0x66F8, 0x8D16, 0x5C6C, 0x8853,
- 0x6A39, 0x7AEA, 0x6578, 0x5E25, 0x96D9, 0x8AB0, 0x9806, 0x8AAC,
- 0x78A9, 0x720D, 0x7D72, 0x98FC, 0x9B06, 0x8073, 0x616B, 0x980C,
- 0x8A1F, 0x8AA6, 0x64FB, 0x8607, 0x8A34, 0x8085, 0x96D6, 0x96A8,
- 0x7D8F, 0x6B72, 0x5B6B, 0x640D, 0x7E2E, 0x7463, 0x9396, 0x737A,
- 0x64BB, 0x81FA, 0x614B, 0x6524, 0x8CAA, 0x7671, 0x7058, 0x58C7,
- 0x8B5A, 0x8AC7, 0x5606, 0x6E6F, 0x71D9, 0x6FE4, 0x7E27, 0x8A0E,
- 0x9A30, 0x8B04, 0x92BB, 0x984C, 0x9AD4, 0x689D, 0x8CBC, 0x9435,
- 0x5EF3, 0x807D, 0x70F4, 0x9285, 0x7D71, 0x982D, 0x5716, 0x5857,
- 0x5718, 0x983D, 0x9D15, 0x99B1, 0x99DD, 0x6A62, 0x7AAA, 0x896A,
- 0x5F4E, 0x7063, 0x9811, 0x842C, 0x7DB2, 0x97CB, 0x9055, 0x570D,
- 0x7232, 0x6FF0, 0x7DAD, 0x8466, 0x5049, 0x50DE, 0x7DEF, 0x8B02,
- 0x885B, 0x805E, 0x7D0B, 0x7A69, 0x554F, 0x64BE, 0x8778, 0x6E26,
- 0x7AA9, 0x55DA, 0x93A2, 0x70CF, 0x8AA3, 0x7121, 0x856A, 0x5862,
- 0x9727, 0x52D9, 0x8AA4, 0x932B, 0x72A7, 0x8972, 0x7FD2, 0x9291,
- 0x6232, 0x7D30, 0x8766, 0x8F44, 0x5CFD, 0x4FE0, 0x72F9, 0x5687,
- 0x9341, 0x9BAE, 0x7E96, 0x8CE2, 0x929C, 0x9591, 0x986F, 0x96AA,
- 0x73FE, 0x737B, 0x7E23, 0x9921, 0x61B2, 0x7DAB, 0x9472, 0x9109,
- 0x8A73, 0x97FF, 0x9805, 0x856D, 0x56C2, 0x92B7, 0x66C9, 0x562F,
- 0x5354, 0x633E, 0x8105, 0x8AE7, 0x5BEB, 0x7009, 0x8B1D, 0x92C5,
- 0x91C1, 0x8208, 0x92B9, 0x7D89, 0x9808, 0x8A31, 0x7DD2, 0x7E8C,
- 0x8ED2, 0x61F8, 0x9078, 0x766C, 0x7D62, 0x5B78, 0x52DB, 0x8A62,
- 0x5C0B, 0x99B4, 0x8A13, 0x8A0A, 0x905C, 0x58D3, 0x9D09, 0x9D28,
- 0x555E, 0x4E9E, 0x8A1D, 0x95B9, 0x9E7D, 0x56B4, 0x9854, 0x95BB,
- 0x8277, 0x53AD, 0x786F, 0x8AFA, 0x9A57, 0x9D26, 0x694A, 0x63DA,
- 0x760D, 0x967D, 0x7662, 0x990A, 0x6A23, 0x582F, 0x8B21, 0x85E5,
- 0x723A, 0x9801, 0x696D, 0x8449, 0x91AB, 0x92A5, 0x9824, 0x907A,
- 0x5100, 0x87FB, 0x85DD, 0x5104, 0x61B6, 0x7FA9, 0x8A63, 0x8B70,
- 0x8ABC, 0x8B6F, 0x7E79, 0x852D, 0x9670, 0x9280, 0x98F2, 0x96B1,
- 0x6AFB, 0x5B30, 0x9DF9, 0x61C9, 0x7E93, 0x7469, 0x87A2, 0x71DF,
- 0x7192, 0x8805, 0x8D0F, 0x7A4E, 0x55B2, 0x64C1, 0x50AD, 0x7670,
- 0x8E34, 0x512A, 0x6182, 0x90F5, 0x923E, 0x7336, 0x8A98, 0x8F3F,
- 0x9918, 0x9B5A, 0x6F01, 0x8207, 0x5DBC, 0x8A9E, 0x9B31, 0x7344,
- 0x8B7D, 0x9810, 0x99AD, 0x9D1B, 0x6DF5, 0x8F45, 0x5712, 0x54E1,
- 0x5713, 0x7DE3, 0x9060, 0x9858, 0x7D04, 0x8E8D, 0x9470, 0x95B2,
- 0x96F2, 0x9116, 0x9695, 0x904B, 0x85F4, 0x9196, 0x6688, 0x96DC,
- 0x8F09, 0x6522, 0x66AB, 0x8D0A, 0x8D1C, 0x81DF, 0x947F, 0x68D7,
- 0x7AC8, 0x8CAC, 0x64C7, 0x5247, 0x6FA4, 0x8CCA, 0x8D08, 0x8ECB,
- 0x9358, 0x9598, 0x8A50, 0x9F4B, 0x50B5, 0x6C08, 0x76DE, 0x65AC,
- 0x8F3E, 0x5D84, 0x68E7, 0x6230, 0x7DBB, 0x5F35, 0x6F32, 0x5E33,
- 0x8CEC, 0x8139, 0x8D99, 0x87C4, 0x8F4D, 0x937A, 0x9019, 0x8C9E,
- 0x91DD, 0x5075, 0x8A3A, 0x93AE, 0x9663, 0x5E40, 0x7665, 0x912D,
- 0x8B49, 0x7E54, 0x8077, 0x57F7, 0x8879, 0x7D19, 0x646F, 0x64F2,
- 0x5E5F, 0x8CEA, 0x6EEF, 0x9418, 0x7D42, 0x7A2E, 0x816B, 0x8846,
- 0x8B05, 0x8EF8, 0x76BA, 0x665D, 0x9A5F, 0x8AF8, 0x8A85, 0x71ED,
- 0x77DA, 0x56D1, 0x8CAF, 0x9444, 0x7BC9, 0x99D0, 0x5C08, 0x78DA,
- 0x8F49, 0x8CFA, 0x6A01, 0x838A, 0x88DD, 0x599D, 0x58EF, 0x72C0,
- 0x9310, 0x8D05, 0x589C, 0x7DB4, 0x8AC4, 0x6E96, 0x6FC1, 0x8CC7,
- 0x6F2C, 0x7D9C, 0x7E3D, 0x7E31, 0x9112, 0x8A5B, 0x7D44, 0x947D,
- 0x55C7, 0x5399, 0x53B4, 0x9768, 0x8D0B, 0x532D, 0x5331, 0x8CFE,
- 0x5244, 0x528C, 0x5274, 0x50B4, 0x5000, 0x5096, 0x5115, 0x5102,
- 0x5114, 0x513C, 0x5137, 0x50E8, 0x50C2, 0x513B, 0x5110, 0x513A,
- 0x50C9, 0x7CF4, 0x9ECC, 0x56C5, 0x9CEC, 0x893B, 0x81E0, 0x8A01,
- 0x8A10, 0x8A0C, 0x8A15, 0x8B33, 0x8A4E, 0x8A25, 0x8A41, 0x8A36,
- 0x8A46, 0x8A54, 0x8A58, 0x8A52, 0x8A86, 0x8A84, 0x8A7F, 0x8A70,
- 0x8A7C, 0x8A75, 0x8A6C, 0x8A6E, 0x8ACD, 0x8AE2, 0x8A61, 0x8A9A,
- 0x8AA5, 0x8A91, 0x8A92, 0x8ACF, 0x8AD1, 0x8AC9, 0x8ADB, 0x8AD7,
- 0x8AC2, 0x8AB6, 0x8AF6, 0x8AEB, 0x8B14, 0x8B01, 0x8AE4, 0x8AED,
- 0x8AFC, 0x8AF3, 0x8AE6, 0x8AEE, 0x8ADE, 0x8B28, 0x8B9C, 0x8B16,
- 0x8B1A, 0x8B10, 0x8B2B, 0x8B2D, 0x8B56, 0x8B59, 0x8B4E, 0x8B9E,
- 0x8B6B, 0x8B96, 0x9658, 0x913A, 0x9114, 0x9134, 0x90DF, 0x9136,
- 0x9106, 0x9148, 0x82BB, 0x52F1, 0x5DF0, 0x580A, 0x58D9, 0x58E2,
- 0x58E0, 0x58DA, 0x57E1, 0x584F, 0x5816, 0x5852, 0x581D, 0x5864,
- 0x858C, 0x8553, 0x85F6, 0x83A7, 0x8407, 0x84EF, 0x82E7, 0x8622,
- 0x8526, 0x584B, 0x7162, 0x8558, 0x84FD, 0x854E, 0x8588, 0x85BA,
- 0x7296, 0x6ECE, 0x8541, 0x85CE, 0x8552, 0x84C0, 0x8452, 0x8464,
- 0x8494, 0x8435, 0x859F, 0x8555, 0x9DAF, 0x8493, 0x7E08, 0x8546,
- 0x8562, 0x851E, 0x9A40, 0x863A, 0x93A3, 0x8577, 0x861E, 0x85FA,
- 0x8604, 0x85EA, 0x861A, 0x5969, 0x5C37, 0x636B, 0x6476, 0x649F,
- 0x6451, 0x645C, 0x64B3, 0x6504, 0x6516, 0x64F7, 0x64FC, 0x651B,
- 0x5630, 0x5638, 0x56C8, 0x56A6, 0x5504, 0x54BC, 0x5680, 0x565D,
- 0x5660, 0x5635, 0x55F6, 0x5666, 0x5672, 0x568C, 0x5665, 0x561C,
- 0x562E, 0x55E9, 0x5616, 0x56C0, 0x560D, 0x56B3, 0x56C1, 0x566F,
- 0x8F61, 0x56B6, 0x5695, 0x5707, 0x5E43, 0x5E6C, 0x5E58, 0x5E57,
- 0x5D87, 0x5CF4, 0x5D50, 0x5D2C, 0x5DA7, 0x5DA0, 0x5D97, 0x5D0D,
- 0x5DB8, 0x5D81, 0x5DD4, 0x5FA0, 0x7377, 0x7341, 0x736A, 0x733B,
- 0x736B, 0x7380, 0x737C, 0x98E0, 0x9933, 0x98E9, 0x993C, 0x98EA,
- 0x98EB, 0x98ED, 0x98F4, 0x9909, 0x9911, 0x991B, 0x9937, 0x993F,
- 0x9943, 0x9948, 0x9949, 0x994A, 0x994C, 0x9962, 0x5EE1, 0x8CE1,
- 0x61FA, 0x61AE, 0x616A, 0x613E, 0x60B5, 0x6134, 0x61CC, 0x615F,
- 0x61E8, 0x60FB, 0x6137, 0x60F2, 0x6173, 0x611C, 0x6192, 0x9582,
- 0x9586, 0x95C8, 0x958E, 0x9594, 0x958C, 0x95E5, 0x95AD, 0x95AB,
- 0x9B2E, 0x95AC, 0x95BE, 0x95B6, 0x9B29, 0x95BF, 0x95BD, 0x95BC,
- 0x95C3, 0x95CB, 0x95D4, 0x95D0, 0x95D5, 0x95DE, 0x7043, 0x6F59,
- 0x7027, 0x7018, 0x6FFC, 0x6D87, 0x6D79, 0x6E5E, 0x6FAE, 0x700F,
- 0x6EF8, 0x6F6F, 0x6DF6, 0x6F7F, 0x7006, 0x6FA0, 0x700B, 0x7067,
- 0x7044, 0x7005, 0x6F77, 0x7020, 0x701F, 0x7032, 0x7028, 0x705D,
- 0x9A2B, 0x9087, 0x9015, 0x9090, 0x5C68, 0x5F33, 0x5AF5, 0x5AD7,
- 0x5B00, 0x5A6D, 0x5B08, 0x5B4C, 0x5AA7, 0x5AFB, 0x5B0B, 0x5B21,
- 0x5B2A, 0x5B19, 0x99D4, 0x99DF, 0x99D9, 0x9A36, 0x9A5B, 0x99D1,
- 0x99D8, 0x9A4D, 0x9A4A, 0x99E2, 0x9A6A, 0x9A0F, 0x9A0D, 0x9A05,
- 0x9A42, 0x9A2D, 0x9A16, 0x9A41, 0x9A2E, 0x9A38, 0x9A43, 0x9A44,
- 0x9A4F, 0x9A65, 0x9A64, 0x7CF9, 0x7D06, 0x7D02, 0x7D07, 0x7D08,
- 0x7E8A, 0x7D1C, 0x7D15, 0x7D13, 0x7D3A, 0x7D32, 0x7D31, 0x7E10,
- 0x7D3C, 0x7D40, 0x7D3F, 0x7D5D, 0x7D4E, 0x7D73, 0x7D86, 0x7D83,
- 0x7D88, 0x7DBE, 0x7DBA, 0x7DCB, 0x7DD4, 0x7DC4, 0x7D9E, 0x7DAC,
- 0x7DB9, 0x7DA3, 0x7DB0, 0x7DC7, 0x7DD9, 0x7DD7, 0x7DF9, 0x7DF2,
- 0x7E62, 0x7DE6, 0x7DF6, 0x7DF1, 0x7E0B, 0x7DE1, 0x7E09, 0x7E1D,
- 0x7E1F, 0x7E1E, 0x7E2D, 0x7E0A, 0x7E11, 0x7E7D, 0x7E39, 0x7E35,
- 0x7E32, 0x7E46, 0x7E45, 0x7E88, 0x7E5A, 0x7E52, 0x7E6E, 0x7E7E,
- 0x7E70, 0x7E6F, 0x7E98, 0x74A3, 0x744B, 0x74CF, 0x980A, 0x74BD,
- 0x743F, 0x7489, 0x74A6, 0x74D4, 0x74DA, 0x97D9, 0x97DE, 0x97DC,
- 0x69AA, 0x6AEA, 0x6898, 0x68D6, 0x6A05, 0x689F, 0x6ADB, 0x6AF3,
- 0x6AE8, 0x6ADF, 0x6A89, 0x690F, 0x6A48, 0x6968, 0x69BF, 0x6A3A,
- 0x6A9C, 0x6B12, 0x6B1E, 0x6ADD, 0x69E7, 0x6B0F, 0x6B16, 0x6AEC,
- 0x6ADA, 0x6AF8, 0x6AB3, 0x6AE7, 0x6AA3, 0x6AD3, 0x6ADE, 0x6BA4,
- 0x6B9E, 0x6BAE, 0x6BAB, 0x6BAF, 0x8ED4, 0x8EDB, 0x8EF2, 0x8EFB,
- 0x8F64, 0x8EF9, 0x8EFC, 0x8EEB, 0x8EE4, 0x8F62, 0x8EFA, 0x8EFE,
- 0x8F0A, 0x8F07, 0x8F05, 0x8F12, 0x8F26, 0x8F1E, 0x8F1F, 0x8F1C,
- 0x8F33, 0x8F46, 0x8F54, 0x6214, 0x6227, 0x750C, 0x66C7, 0x66C4,
- 0x6689, 0x66D6, 0x8CC1, 0x8CB0, 0x8CBA, 0x8CBD, 0x8D04, 0x8CB2,
- 0x8CC5, 0x8D10, 0x8CD1, 0x8CDA, 0x8CD5, 0x8CEB, 0x8CE7, 0x8CFB,
- 0x8998, 0x89AC, 0x89A1, 0x89BF, 0x89A6, 0x89AF, 0x89B2, 0x89B7,
- 0x6BFF, 0x6C0C, 0x6C2C, 0x7258, 0x6727, 0x8156, 0x81DA, 0x811B,
- 0x81BE, 0x8161, 0x81CF, 0x6B5F, 0x98AE, 0x98AF, 0x98B6, 0x98BC,
- 0x98C6, 0x98C8, 0x8F42, 0x9F4F, 0x6595, 0x716C, 0x7152, 0x7197,
- 0x71C1, 0x71DC, 0x71FE, 0x79B0, 0x798E, 0x79AA, 0x61DF, 0x6164,
- 0x61E3, 0x6207, 0x6FA9, 0x78EF, 0x78AD, 0x7868, 0x78B8, 0x792A,
- 0x7931, 0x7864, 0x78FD, 0x78E7, 0x78E3, 0x9F95, 0x7798, 0x775E,
- 0x77BC, 0x7F86, 0x7F88, 0x91D2, 0x91D3, 0x91D4, 0x91D9, 0x91D7,
- 0x91D5, 0x91F7, 0x91E7, 0x91E4, 0x9346, 0x91F5, 0x91F9, 0x9208,
- 0x9226, 0x9245, 0x9211, 0x9210, 0x9201, 0x9227, 0x9204, 0x9225,
- 0x9200, 0x923A, 0x9266, 0x9237, 0x9233, 0x9255, 0x923D, 0x9238,
- 0x925E, 0x926C, 0x926D, 0x923F, 0x9460, 0x9230, 0x9249, 0x9248,
- 0x924D, 0x922E, 0x9239, 0x9438, 0x92AC, 0x92A0, 0x927A, 0x92AA,
- 0x92EE, 0x92CF, 0x9403, 0x92E3, 0x943A, 0x92B1, 0x92A6, 0x93A7,
- 0x9296, 0x92CC, 0x92A9, 0x93F5, 0x9293, 0x927F, 0x93A9, 0x929A,
- 0x931A, 0x92AB, 0x9283, 0x940B, 0x92A8, 0x92A3, 0x9412, 0x9338,
- 0x92F1, 0x93D7, 0x92E5, 0x92F0, 0x92EF, 0x92E8, 0x92BC, 0x92DD,
- 0x92F6, 0x9426, 0x9427, 0x92C3, 0x92DF, 0x92E6, 0x9312, 0x9306,
- 0x9369, 0x931B, 0x9340, 0x9301, 0x9315, 0x932E, 0x9343, 0x9307,
- 0x9308, 0x931F, 0x9319, 0x9365, 0x9347, 0x9376, 0x9354, 0x9364,
- 0x93AA, 0x9370, 0x9384, 0x93E4, 0x93D8, 0x9428, 0x9387, 0x93CC,
- 0x9398, 0x93B8, 0x93BF, 0x93A6, 0x93B0, 0x93B5, 0x944C, 0x93E2,
- 0x93DC, 0x93DD, 0x93CD, 0x93DE, 0x93C3, 0x93C7, 0x93D1, 0x9414,
- 0x941D, 0x93F7, 0x9465, 0x9413, 0x946D, 0x9420, 0x9479, 0x93F9,
- 0x9419, 0x944A, 0x9432, 0x943F, 0x9454, 0x9463, 0x937E, 0x7A61,
- 0x9CE9, 0x9CF6, 0x9D07, 0x9D06, 0x9D23, 0x9D87, 0x9E15, 0x9D1D,
- 0x9D1F, 0x9DE5, 0x9D2F, 0x9DD9, 0x9D30, 0x9D42, 0x9E1E, 0x9D53,
- 0x9E1D, 0x9D60, 0x9D52, 0x9DF3, 0x9D5C, 0x9D61, 0x9D93, 0x9D6A,
- 0x9D6F, 0x9D89, 0x9D98, 0x9D9A, 0x9DC0, 0x9DA5, 0x9DA9, 0x9DC2,
- 0x9DBC, 0x9E1A, 0x9DD3, 0x9DDA, 0x9DEF, 0x9DE6, 0x9DF2, 0x9DF8,
- 0x9E0C, 0x9DFA, 0x9E1B, 0x7664, 0x7658, 0x7667, 0x7602, 0x7646,
- 0x7647, 0x7649, 0x761E, 0x763B, 0x766D, 0x766E, 0x7669, 0x7672,
- 0x7AC7, 0x7AB6, 0x8960, 0x8933, 0x895D, 0x8947, 0x8938, 0x8964,
- 0x76B8, 0x802E, 0x802C, 0x8079, 0x8075, 0x9807, 0x980E, 0x980F,
- 0x9821, 0x981C, 0x6F41, 0x9826, 0x9837, 0x984E, 0x9853, 0x9873,
- 0x9862, 0x9859, 0x9865, 0x986C, 0x9870, 0x87E3, 0x8806, 0x8706,
- 0x8823, 0x87F6, 0x86FA, 0x87EF, 0x8784, 0x8810, 0x87C8, 0x8811,
- 0x87BB, 0x87CE, 0x7F4C, 0x7BE4, 0x7B67, 0x7C69, 0x7BF3, 0x7C00,
- 0x7BCB, 0x7C5C, 0x7C1E, 0x7C2B, 0x7C23, 0x7C6A, 0x7C5F, 0x8264,
- 0x826B, 0x88CA, 0x7FA5, 0x7CF2, 0x7CF6, 0x7CDD, 0x7E36, 0x9EA9,
- 0x8DB2, 0x91C5, 0x91C3, 0x9E7A, 0x8E89, 0x8E4C, 0x8E92, 0x8E7A,
- 0x8E55, 0x8E9A, 0x8E8B, 0x8E93, 0x8E91, 0x8EA1, 0x8E63, 0x8EAA,
- 0x8EA6, 0x89F4, 0x89F6, 0x975A, 0x9742, 0x973D, 0x9744, 0x9F54,
- 0x9F5F, 0x9F59, 0x9F60, 0x9F5C, 0x9F66, 0x9F6C, 0x9F6A, 0x9F77,
- 0x9EFD, 0x9EFF, 0x9F09, 0x8B8E, 0x947E, 0x93E8, 0x9B77, 0x9B74,
- 0x9B81, 0x9B83, 0x9B8E, 0x9C78, 0x7A4C, 0x9B92, 0x9C5F, 0x9B90,
- 0x9BAD, 0x9B9A, 0x9BAA, 0x9B9E, 0x9C6D, 0x9BAB, 0x9B9D, 0x9C58,
- 0x9BC1, 0x9C7A, 0x9C31, 0x9C39, 0x9C23, 0x9C37, 0x9BC0, 0x9BCA,
- 0x9BC7, 0x9BFD, 0x9BD6, 0x9BEA, 0x9BEB, 0x9BE1, 0x9BE4, 0x9BE7,
- 0x9BDD, 0x9BE2, 0x9BF0, 0x9BDB, 0x9BF4, 0x9BD4, 0x9C5D, 0x9C08,
- 0x9C10, 0x9C0D, 0x9C12, 0x9C09, 0x9BFF, 0x9C20, 0x9C32, 0x9C2D,
- 0x9C28, 0x9C25, 0x9C29, 0x9C33, 0x9C3E, 0x9C48, 0x9C3B, 0x9C35,
- 0x9C45, 0x9C56, 0x9C54, 0x9C52, 0x9C67, 0x97C3, 0x97BD, 0x97C9,
- 0x9DBB, 0x9ACF, 0x9AD6, 0x9AD5, 0x9B58, 0x9B4E, 0x9957, 0x995C,
- 0x9B22, 0x9EF7, 0x9EF2, 0x896C, 0x95C6, 0x9336, 0x5F46, 0x8514,
- 0x7E94, 0x9F63, 0x5679, 0x9F15, 0x5641, 0x9AEE, 0x8907, 0x7A40,
- 0x98B3, 0x95A4, 0x9B0D, 0x8FF4, 0x5F59, 0x7A6B, 0x98E2, 0x50A2,
- 0x8591, 0x5118, 0x6372, 0x524B, 0x774F, 0x7E8D, 0x66C6, 0x77AD,
- 0x9E75, 0x56C9, 0x9EF4, 0x6FDB, 0x61DE, 0x77C7, 0x7030, 0x9EB5,
- 0x884A, 0x95E2, 0x97C6, 0x7C64, 0x7E34, 0x97A6, 0x9EAF, 0x56CC,
- 0x98B1, 0x6AAF, 0x7F4E, 0x7CF0, 0x4FC2, 0x7E6B, 0x9E79, 0x56AE,
- 0x9B1A, 0x846F, 0x79A6, 0x7C72, 0x9AD2, 0x96BB, 0x7DFB, 0x88FD,
- 0x7843, 0x2170, 0x2171, 0x2172, 0x2173, 0x2174, 0x2175, 0x2176,
- 0x2177, 0x2178, 0x2179, 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,
- 0x3021, 0x3022, 0x3023, 0x3024, 0x3025, 0x3026, 0x3027, 0x3028,
- 0x3029, 0x32A3, 0x338E, 0x338F, 0x339C, 0x339D, 0x339E, 0x33A1,
- 0x33C4, 0x33CE, 0x33D1, 0x33D2, 0x33D5, 0xFE30, 0xFFE2, 0xFFE4,
- 0x2121, 0x3231, 0x2010, 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,
- 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, 0x4E83, 0x4E84, 0x4E85, 0x4E87, 0x4E8A, 0x4E90, 0x4E96,
- 0x4E97, 0x4E99, 0x4E9C, 0x4E9D, 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, 0x4F87, 0x4F8A, 0x4F8C, 0x4F8E, 0x4F90, 0x4F92,
- 0x4F93, 0x4F95, 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, 0x4FC6, 0x4FC7, 0x4FC8,
- 0x4FC9, 0x4FCB, 0x4FCC, 0x4FCD, 0x4FD2, 0x4FD3, 0x4FD4, 0x4FD5,
- 0x4FD6, 0x4FD9, 0x4FDB, 0x4FE2, 0x4FE4, 0x4FE5, 0x4FE7, 0x4FEB,
- 0x4FEC, 0x4FF0, 0x4FF2, 0x4FF4, 0x4FF5, 0x4FF6, 0x4FF7, 0x4FF9,
- 0x4FFB, 0x4FFC, 0x4FFD, 0x4FFF, 0x5001, 0x5002, 0x5003, 0x5004,
- 0x5005, 0x5007, 0x5008, 0x500A, 0x500E, 0x5010, 0x5013, 0x5015,
- 0x5016, 0x5017, 0x501B, 0x501D, 0x501E, 0x5020, 0x5022, 0x5023,
- 0x5024, 0x5027, 0x502F, 0x5030, 0x5031, 0x5032, 0x5033, 0x5034,
- 0x5035, 0x5036, 0x5037, 0x5038, 0x5039, 0x503B, 0x503D, 0x503F,
- 0x5040, 0x5041, 0x5042, 0x5044, 0x5045, 0x5046, 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,
- 0x5078, 0x5079, 0x507A, 0x507C, 0x507D, 0x5081, 0x5082, 0x5083,
- 0x5084, 0x5086, 0x5087, 0x5089, 0x508A, 0x508B, 0x508C, 0x508E,
- 0x508F, 0x5090, 0x5091, 0x5092, 0x5093, 0x5094, 0x5095, 0x5097,
- 0x509A, 0x509B, 0x509C, 0x509D, 0x509E, 0x509F, 0x50A0, 0x50A1,
- 0x50A4, 0x50A6, 0x50AA, 0x50AB, 0x50AE, 0x50AF, 0x50B0, 0x50B1,
- 0x50B6, 0x50B8, 0x50B9, 0x50BC, 0x50BD, 0x50BF, 0x50C0, 0x50C1,
- 0x50C3, 0x50C4, 0x50C6, 0x50C7, 0x50C8, 0x50CA, 0x50CB, 0x50CC,
- 0x50CD, 0x50CE, 0x50D0, 0x50D2, 0x50D3, 0x50D4, 0x50D7, 0x50D8,
- 0x50D9, 0x50DB, 0x50DC, 0x50DD, 0x50DF, 0x50E0, 0x50E1, 0x50E2,
- 0x50E3, 0x50E4, 0x50E9, 0x50EA, 0x50EB, 0x50EF, 0x50F0, 0x50F1,
- 0x50F2, 0x50F4, 0x50F6, 0x50F7, 0x50F8, 0x50FA, 0x50FC, 0x50FD,
- 0x50FE, 0x50FF, 0x5101, 0x5103, 0x5105, 0x510A, 0x510C, 0x510D,
- 0x510E, 0x510F, 0x5111, 0x5113, 0x5116, 0x5117, 0x5119, 0x511A,
- 0x511B, 0x511C, 0x511D, 0x511E, 0x5120, 0x5122, 0x5123, 0x5124,
- 0x5125, 0x5126, 0x5127, 0x5128, 0x5129, 0x512B, 0x512C, 0x512D,
- 0x512E, 0x512F, 0x5130, 0x5131, 0x5133, 0x5134, 0x5135, 0x5136,
- 0x5138, 0x5139, 0x513D, 0x513E, 0x5142, 0x5147, 0x514A, 0x514C,
- 0x514E, 0x514F, 0x5150, 0x5153, 0x5157, 0x5158, 0x5159, 0x515B,
- 0x515D, 0x515E, 0x515F, 0x5160, 0x5161, 0x5163, 0x5164, 0x5166,
- 0x5167, 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, 0x51CE, 0x51D0, 0x51D2,
- 0x51D3, 0x51D4, 0x51D5, 0x51D6, 0x51D7, 0x51D8, 0x51D9, 0x51DA,
- 0x51DC, 0x51DE, 0x51DF, 0x51E2, 0x51E3, 0x51E5, 0x51E6, 0x51E7,
- 0x51E8, 0x51E9, 0x51EA, 0x51EC, 0x51EE, 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, 0x5245, 0x5246, 0x5248,
- 0x5249, 0x524E, 0x524F, 0x5252, 0x5253, 0x5255, 0x5257, 0x5258,
- 0x5259, 0x525A, 0x525D, 0x525F, 0x5260, 0x5262, 0x5263, 0x5264,
- 0x5266, 0x5268, 0x526B, 0x526C, 0x526D, 0x5270, 0x5271, 0x5273,
- 0x5276, 0x5277, 0x5278, 0x5279, 0x527A, 0x527B, 0x527C, 0x527E,
- 0x5280, 0x5284, 0x5285, 0x5286, 0x528B, 0x528E, 0x528F, 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, 0x52C2, 0x52C4, 0x52C5, 0x52C6, 0x52C8, 0x52CA,
- 0x52CC, 0x52CD, 0x52CE, 0x52CF, 0x52D1, 0x52D3, 0x52D4, 0x52D7,
- 0x52DA, 0x52DC, 0x52E0, 0x52E1, 0x52E3, 0x52E5, 0x52E6, 0x52E7,
- 0x52E8, 0x52E9, 0x52EA, 0x52EB, 0x52EC, 0x52ED, 0x52EE, 0x52EF,
- 0x52F2, 0x52F3, 0x52F4, 0x52F6, 0x52F7, 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, 0x5330, 0x5332, 0x5333, 0x5334, 0x5335,
- 0x5336, 0x5337, 0x5338, 0x533C, 0x533D, 0x5342, 0x5344, 0x5346,
- 0x534B, 0x534C, 0x534D, 0x5350, 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, 0x539B, 0x539C, 0x539E, 0x53A1, 0x53A4,
- 0x53A7, 0x53AA, 0x53AB, 0x53AC, 0x53AF, 0x53B0, 0x53B1, 0x53B3,
- 0x53B5, 0x53B7, 0x53B8, 0x53B9, 0x53BA, 0x53BC, 0x53BD, 0x53BE,
- 0x53C0, 0x53C4, 0x53C5, 0x53C6, 0x53C7, 0x53CE, 0x53CF, 0x53D0,
- 0x53D2, 0x53D3, 0x53D5, 0x53DA, 0x53DC, 0x53DD, 0x53DE, 0x53E1,
- 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, 0x54BE, 0x54C3,
- 0x54C5, 0x54CA, 0x54CB, 0x54D6, 0x54D8, 0x54DB, 0x54E0, 0x54E2,
- 0x54E3, 0x54E4, 0x54EB, 0x54EC, 0x54EF, 0x54F0, 0x54F1, 0x54F4,
- 0x54F5, 0x54F6, 0x54F7, 0x54F8, 0x54F9, 0x54FB, 0x54FE, 0x5500,
- 0x5502, 0x5503, 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, 0x5551, 0x5552,
- 0x5554, 0x5557, 0x5558, 0x5559, 0x555A, 0x555B, 0x555D, 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, 0x55AB,
- 0x55AD, 0x55AF, 0x55B0, 0x55B4, 0x55B6, 0x55B8, 0x55BA, 0x55BC,
- 0x55BF, 0x55C0, 0x55C1, 0x55C2, 0x55C3, 0x55C8, 0x55CA, 0x55CB,
- 0x55CF, 0x55D0, 0x55D5, 0x55D7, 0x55D8, 0x55D9, 0x55DB, 0x55DE,
- 0x55E0, 0x55E2, 0x55E7, 0x55ED, 0x55EE, 0x55F0, 0x55F1, 0x55F4,
- 0x55F8, 0x55F9, 0x55FA, 0x55FB, 0x55FC, 0x55FF, 0x5602, 0x5603,
- 0x5604, 0x5605, 0x5607, 0x560A, 0x560B, 0x5610, 0x5611, 0x5612,
- 0x5613, 0x5615, 0x5619, 0x561A, 0x561D, 0x5620, 0x5621, 0x5622,
- 0x5625, 0x5626, 0x5628, 0x562A, 0x562B, 0x5633, 0x5637, 0x563A,
- 0x563C, 0x563D, 0x563E, 0x5640, 0x5642, 0x5643, 0x5644, 0x5645,
- 0x5646, 0x5647, 0x5648, 0x5649, 0x564A, 0x564B, 0x564F, 0x5650,
- 0x5651, 0x5652, 0x5653, 0x5655, 0x5656, 0x565A, 0x565B, 0x565E,
- 0x565F, 0x5661, 0x5663, 0x5667, 0x566D, 0x566E, 0x5670, 0x5673,
- 0x5675, 0x5677, 0x567A, 0x567D, 0x567E, 0x567F, 0x5681, 0x5682,
- 0x5683, 0x5684, 0x5688, 0x5689, 0x568A, 0x568B, 0x568D, 0x5690,
- 0x5691, 0x5692, 0x5694, 0x5696, 0x5697, 0x5698, 0x569A, 0x569B,
- 0x569C, 0x569D, 0x569E, 0x569F, 0x56A0, 0x56A1, 0x56A2, 0x56A4,
- 0x56A5, 0x56A7, 0x56A9, 0x56AA, 0x56AB, 0x56AC, 0x56AD, 0x56B0,
- 0x56B1, 0x56B2, 0x56B5, 0x56B8, 0x56B9, 0x56BA, 0x56BB, 0x56BD,
- 0x56BE, 0x56BF, 0x56C3, 0x56C4, 0x56C6, 0x56C7, 0x56CB, 0x56CD,
- 0x56CE, 0x56CF, 0x56D0, 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, 0x570C,
- 0x570E, 0x570F, 0x5710, 0x5711, 0x5714, 0x5715, 0x5717, 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, 0x57E2, 0x57E3, 0x57E5, 0x57E6, 0x57E7, 0x57E8, 0x57E9,
- 0x57EA, 0x57EB, 0x57EC, 0x57EE, 0x57F0, 0x57F1, 0x57F2, 0x57F3,
- 0x57F5, 0x57F6, 0x57FB, 0x57FC, 0x57FE, 0x57FF, 0x5801, 0x5803,
- 0x5804, 0x5808, 0x5809, 0x580C, 0x580E, 0x580F, 0x5810, 0x5812,
- 0x5813, 0x5814, 0x5817, 0x5818, 0x581A, 0x581B, 0x581C, 0x581F,
- 0x5822, 0x5823, 0x5825, 0x5826, 0x5827, 0x5828, 0x5829, 0x582B,
- 0x582C, 0x582D, 0x582E, 0x5832, 0x5833, 0x5836, 0x5837, 0x5838,
- 0x5839, 0x583A, 0x583B, 0x583C, 0x583D, 0x583E, 0x583F, 0x5840,
- 0x5841, 0x5842, 0x5843, 0x5845, 0x5846, 0x5847, 0x5848, 0x5849,
- 0x584E, 0x5850, 0x5853, 0x5855, 0x5856, 0x5859, 0x585A, 0x585B,
- 0x585C, 0x585D, 0x585F, 0x5860, 0x5861, 0x5863, 0x5866, 0x5867,
- 0x5868, 0x5869, 0x586A, 0x586D, 0x586E, 0x586F, 0x5870, 0x5871,
- 0x5872, 0x5873, 0x5874, 0x5876, 0x5877, 0x5878, 0x587A, 0x587B,
- 0x587C, 0x587D, 0x587F, 0x5882, 0x5884, 0x5886, 0x5887, 0x5888,
- 0x588B, 0x588C, 0x588D, 0x588E, 0x588F, 0x5890, 0x5891, 0x5894,
- 0x5895, 0x5896, 0x5897, 0x5898, 0x589B, 0x589D, 0x58A0, 0x58A1,
- 0x58A2, 0x58A3, 0x58A4, 0x58A5, 0x58A6, 0x58A7, 0x58AA, 0x58AB,
- 0x58AC, 0x58AD, 0x58AF, 0x58B0, 0x58B1, 0x58B2, 0x58B4, 0x58B5,
- 0x58B6, 0x58B7, 0x58B8, 0x58B9, 0x58BA, 0x58BD, 0x58BF, 0x58C0,
- 0x58C2, 0x58C3, 0x58C4, 0x58C6, 0x58C8, 0x58C9, 0x58CA, 0x58CB,
- 0x58CC, 0x58CD, 0x58CE, 0x58CF, 0x58D0, 0x58D2, 0x58D4, 0x58D6,
- 0x58D7, 0x58DB, 0x58DC, 0x58DD, 0x58E1, 0x58E3, 0x58E5, 0x58E6,
- 0x58E7, 0x58E8, 0x58EA, 0x58ED, 0x58F1, 0x58F2, 0x58F4, 0x58F5,
- 0x58F7, 0x58F8, 0x58FB, 0x58FC, 0x58FE, 0x58FF, 0x5900, 0x5901,
- 0x5903, 0x5905, 0x5906, 0x5908, 0x5909, 0x590A, 0x590B, 0x590C,
- 0x590E, 0x5910, 0x5911, 0x5912, 0x5913, 0x5917, 0x5918, 0x591B,
- 0x591D, 0x591E, 0x5920, 0x5921, 0x5923, 0x5926, 0x5928, 0x592C,
- 0x5930, 0x5932, 0x5933, 0x5935, 0x5936, 0x593B, 0x593D, 0x593F,
- 0x5940, 0x5943, 0x5945, 0x5946, 0x594A, 0x594C, 0x594D, 0x5950,
- 0x5952, 0x5953, 0x5959, 0x595B, 0x595C, 0x595D, 0x595E, 0x595F,
- 0x5961, 0x5963, 0x5964, 0x5966, 0x5967, 0x5968, 0x596B, 0x596D,
- 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, 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, 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, 0x5A68, 0x5A69, 0x5A6B, 0x5A6C, 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, 0x5AA8, 0x5AA9, 0x5AAB,
- 0x5AAC, 0x5AAD, 0x5AAE, 0x5AAF, 0x5AB0, 0x5AB1, 0x5AB4, 0x5AB6,
- 0x5AB7, 0x5AB9, 0x5ABA, 0x5ABB, 0x5ABC, 0x5ABF, 0x5AC0, 0x5AC3,
- 0x5AC4, 0x5AC5, 0x5AC6, 0x5AC7, 0x5AC8, 0x5ACA, 0x5ACB, 0x5ACD,
- 0x5ACE, 0x5ACF, 0x5AD0, 0x5AD1, 0x5AD3, 0x5AD5, 0x5AD9, 0x5ADA,
- 0x5ADB, 0x5ADD, 0x5ADE, 0x5ADF, 0x5AE2, 0x5AE4, 0x5AE5, 0x5AE7,
- 0x5AE8, 0x5AEA, 0x5AEC, 0x5AED, 0x5AEE, 0x5AEF, 0x5AF0, 0x5AF2,
- 0x5AF3, 0x5AF4, 0x5AF6, 0x5AF7, 0x5AF8, 0x5AF9, 0x5AFA, 0x5AFC,
- 0x5AFD, 0x5AFE, 0x5AFF, 0x5B01, 0x5B02, 0x5B03, 0x5B04, 0x5B05,
- 0x5B06, 0x5B07, 0x5B0A, 0x5B0D, 0x5B0E, 0x5B0F, 0x5B10, 0x5B11,
- 0x5B12, 0x5B13, 0x5B14, 0x5B15, 0x5B18, 0x5B1A, 0x5B1B, 0x5B1C,
- 0x5B1D, 0x5B1E, 0x5B1F, 0x5B20, 0x5B22, 0x5B23, 0x5B24, 0x5B25,
- 0x5B26, 0x5B27, 0x5B28, 0x5B29, 0x5B2B, 0x5B2C, 0x5B2D, 0x5B2E,
- 0x5B2F, 0x5B31, 0x5B33, 0x5B35, 0x5B36, 0x5B39, 0x5B3A, 0x5B3B,
- 0x5B3C, 0x5B3D, 0x5B3E, 0x5B3F, 0x5B41, 0x5B42, 0x5B43, 0x5B44,
- 0x5B45, 0x5B46, 0x5B47, 0x5B48, 0x5B49, 0x5B4A, 0x5B4B, 0x5B4D,
- 0x5B4E, 0x5B4F, 0x5B52, 0x5B56, 0x5B5E, 0x5B60, 0x5B61, 0x5B67,
- 0x5B68, 0x5B6D, 0x5B6E, 0x5B6F, 0x5B72, 0x5B74, 0x5B76, 0x5B77,
- 0x5B79, 0x5B7B, 0x5B7C, 0x5B7E, 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, 0x5BE3, 0x5BEA, 0x5BED, 0x5BEF, 0x5BF1, 0x5BF2, 0x5BF3,
- 0x5BF4, 0x5BF7, 0x5BFD, 0x5BFE, 0x5C00, 0x5C02, 0x5C03, 0x5C05,
- 0x5C0C, 0x5C10, 0x5C12, 0x5C13, 0x5C17, 0x5C19, 0x5C1B, 0x5C1E,
- 0x5C1F, 0x5C20, 0x5C21, 0x5C23, 0x5C26, 0x5C28, 0x5C29, 0x5C2A,
- 0x5C2B, 0x5C2D, 0x5C2E, 0x5C2F, 0x5C30, 0x5C32, 0x5C33, 0x5C35,
- 0x5C36, 0x5C43, 0x5C44, 0x5C46, 0x5C47, 0x5C4C, 0x5C4D, 0x5C52,
- 0x5C53, 0x5C54, 0x5C56, 0x5C57, 0x5C58, 0x5C5A, 0x5C5B, 0x5C5C,
- 0x5C5D, 0x5C5F, 0x5C67, 0x5C69, 0x5C6A, 0x5C6B, 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, 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, 0x5CF5, 0x5CF7, 0x5CF8,
- 0x5CF9, 0x5CFA, 0x5CFC, 0x5CFE, 0x5CFF, 0x5D00, 0x5D01, 0x5D04,
- 0x5D05, 0x5D08, 0x5D09, 0x5D0A, 0x5D0B, 0x5D0C, 0x5D0F, 0x5D10,
- 0x5D11, 0x5D12, 0x5D13, 0x5D15, 0x5D18, 0x5D19, 0x5D1A, 0x5D1C,
- 0x5D1D, 0x5D1F, 0x5D20, 0x5D21, 0x5D22, 0x5D23, 0x5D25, 0x5D28,
- 0x5D2A, 0x5D2B, 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, 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, 0x5D83, 0x5D85, 0x5D86, 0x5D88,
- 0x5D89, 0x5D8A, 0x5D8B, 0x5D8C, 0x5D8D, 0x5D8E, 0x5D8F, 0x5D90,
- 0x5D91, 0x5D92, 0x5D93, 0x5D94, 0x5D95, 0x5D96, 0x5D98, 0x5D9A,
- 0x5D9B, 0x5D9C, 0x5D9E, 0x5D9F, 0x5DA1, 0x5DA2, 0x5DA3, 0x5DA4,
- 0x5DA5, 0x5DA6, 0x5DA8, 0x5DA9, 0x5DAA, 0x5DAB, 0x5DAC, 0x5DAD,
- 0x5DAE, 0x5DAF, 0x5DB0, 0x5DB1, 0x5DB2, 0x5DB3, 0x5DB4, 0x5DB5,
- 0x5DB6, 0x5DB9, 0x5DBB, 0x5DBD, 0x5DBE, 0x5DBF, 0x5DC0, 0x5DC1,
- 0x5DC2, 0x5DC3, 0x5DC4, 0x5DC6, 0x5DC7, 0x5DC8, 0x5DC9, 0x5DCA,
- 0x5DCC, 0x5DCE, 0x5DCF, 0x5DD0, 0x5DD1, 0x5DD3, 0x5DD5, 0x5DD6,
- 0x5DD7, 0x5DD8, 0x5DD9, 0x5DDA, 0x5DDC, 0x5DDF, 0x5DE0, 0x5DE3,
- 0x5DE4, 0x5DEA, 0x5DEC, 0x5DED, 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, 0x5E28, 0x5E29,
- 0x5E2A, 0x5E2C, 0x5E2F, 0x5E30, 0x5E32, 0x5E34, 0x5E35, 0x5E39,
- 0x5E3A, 0x5E3E, 0x5E3F, 0x5E41, 0x5E46, 0x5E47, 0x5E48, 0x5E49,
- 0x5E4A, 0x5E4B, 0x5E4D, 0x5E4E, 0x5E4F, 0x5E50, 0x5E51, 0x5E52,
- 0x5E53, 0x5E56, 0x5E59, 0x5E5A, 0x5E5C, 0x5E5D, 0x5E60, 0x5E64,
- 0x5E65, 0x5E66, 0x5E67, 0x5E68, 0x5E69, 0x5E6A, 0x5E6D, 0x5E6E,
- 0x5E6F, 0x5E70, 0x5E71, 0x5E75, 0x5E77, 0x5E81, 0x5E82, 0x5E83,
- 0x5E85, 0x5E88, 0x5E89, 0x5E8C, 0x5E8D, 0x5E8E, 0x5E92, 0x5E98,
- 0x5E9B, 0x5E9D, 0x5EA1, 0x5EA2, 0x5EA3, 0x5EA4, 0x5EA8, 0x5EA9,
- 0x5EAA, 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, 0x5EE4, 0x5EE5, 0x5EE6,
- 0x5EE7, 0x5EE9, 0x5EEB, 0x5EED, 0x5EEE, 0x5EEF, 0x5EF0, 0x5EF1,
- 0x5EF2, 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, 0x5F34, 0x5F36, 0x5F37, 0x5F38, 0x5F3B, 0x5F3D, 0x5F3E,
- 0x5F3F, 0x5F41, 0x5F42, 0x5F43, 0x5F44, 0x5F45, 0x5F47, 0x5F49,
- 0x5F4A, 0x5F4B, 0x5F4D, 0x5F4F, 0x5F51, 0x5F54, 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, 0x5F93, 0x5F94, 0x5F96, 0x5F9A, 0x5F9B, 0x5F9D, 0x5F9F,
- 0x5FA2, 0x5FA3, 0x5FA4, 0x5FA5, 0x5FA6, 0x5FA7, 0x5FAB, 0x5FAC,
- 0x5FAF, 0x5FB0, 0x5FB1, 0x5FB2, 0x5FB3, 0x5FB4, 0x5FB6, 0x5FB8,
- 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, 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, 0x60E2, 0x60E3, 0x60E4,
- 0x60E5, 0x60EA, 0x60F5, 0x60F7, 0x60F8, 0x60FC, 0x60FD, 0x60FE,
- 0x60FF, 0x6102, 0x6103, 0x6104, 0x6105, 0x6107, 0x610A, 0x610B,
- 0x610C, 0x6110, 0x6111, 0x6112, 0x6113, 0x6114, 0x6116, 0x6117,
- 0x6118, 0x6119, 0x611D, 0x611E, 0x6121, 0x6122, 0x6125, 0x6128,
- 0x6129, 0x612A, 0x612C, 0x612D, 0x612E, 0x612F, 0x6130, 0x6131,
- 0x6132, 0x6133, 0x6135, 0x6136, 0x6138, 0x6139, 0x613A, 0x613B,
- 0x613C, 0x613D, 0x6140, 0x6141, 0x6142, 0x6143, 0x6144, 0x6145,
- 0x6146, 0x6147, 0x6149, 0x614D, 0x614F, 0x6150, 0x6152, 0x6153,
- 0x6154, 0x6156, 0x6157, 0x6159, 0x615B, 0x615C, 0x615E, 0x6160,
- 0x6161, 0x6165, 0x6166, 0x6169, 0x616C, 0x616D, 0x616F, 0x6171,
- 0x6172, 0x6174, 0x6178, 0x6179, 0x617A, 0x617B, 0x617C, 0x617D,
- 0x617E, 0x617F, 0x6180, 0x6181, 0x6183, 0x6184, 0x6185, 0x6186,
- 0x6187, 0x6188, 0x6189, 0x618C, 0x618D, 0x618F, 0x6193, 0x6195,
- 0x6196, 0x6197, 0x6198, 0x6199, 0x619B, 0x619C, 0x619E, 0x619F,
- 0x61A0, 0x61A1, 0x61A2, 0x61A3, 0x61A5, 0x61A6, 0x61AA, 0x61AD,
- 0x61AF, 0x61B0, 0x61B1, 0x61B3, 0x61B4, 0x61B5, 0x61B8, 0x61B9,
- 0x61BA, 0x61BB, 0x61BC, 0x61BD, 0x61BF, 0x61C0, 0x61C1, 0x61C3,
- 0x61C4, 0x61C5, 0x61C6, 0x61CD, 0x61CE, 0x61CF, 0x61D0, 0x61D3,
- 0x61D5, 0x61D6, 0x61D7, 0x61D8, 0x61D9, 0x61DA, 0x61DB, 0x61DC,
- 0x61DD, 0x61E0, 0x61E1, 0x61E2, 0x61E4, 0x61E5, 0x61E7, 0x61E9,
- 0x61EA, 0x61EB, 0x61EC, 0x61ED, 0x61EE, 0x61EF, 0x61F0, 0x61F1,
- 0x61F3, 0x61F4, 0x61F9, 0x61FB, 0x61FD, 0x6201, 0x6202, 0x6203,
- 0x6204, 0x6205, 0x6209, 0x6213, 0x6219, 0x621C, 0x621D, 0x621E,
- 0x6220, 0x6223, 0x6226, 0x6228, 0x6229, 0x622B, 0x622D, 0x622F,
- 0x6231, 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, 0x633F, 0x6340, 0x6341, 0x6344, 0x6347, 0x6348,
- 0x634A, 0x6351, 0x6352, 0x6353, 0x6354, 0x6356, 0x6357, 0x6358,
- 0x6359, 0x635A, 0x635B, 0x635C, 0x635D, 0x6360, 0x6364, 0x6365,
- 0x6366, 0x636A, 0x636C, 0x636F, 0x6370, 0x6373, 0x6374, 0x6375,
- 0x6378, 0x6379, 0x637C, 0x637D, 0x637E, 0x637F, 0x6381, 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, 0x63C1, 0x63C2, 0x63C3, 0x63C5,
- 0x63C7, 0x63C8, 0x63CA, 0x63CB, 0x63CC, 0x63D1, 0x63D3, 0x63D4,
- 0x63D5, 0x63D7, 0x63D8, 0x63D9, 0x63DB, 0x63DC, 0x63DD, 0x63DF,
- 0x63E2, 0x63E4, 0x63E5, 0x63E6, 0x63E7, 0x63E8, 0x63EB, 0x63EC,
- 0x63EF, 0x63F0, 0x63F1, 0x63F3, 0x63F5, 0x63F7, 0x63F9, 0x63FA,
- 0x63FB, 0x63FC, 0x63FE, 0x6403, 0x6404, 0x6406, 0x6407, 0x6408,
- 0x6409, 0x640A, 0x640E, 0x6411, 0x6412, 0x6415, 0x6416, 0x6418,
- 0x6419, 0x641A, 0x641D, 0x641F, 0x6422, 0x6423, 0x6424, 0x6425,
- 0x6427, 0x6428, 0x6429, 0x642B, 0x642E, 0x642F, 0x6430, 0x6431,
- 0x6432, 0x6433, 0x6435, 0x6437, 0x6438, 0x6439, 0x643B, 0x643C,
- 0x643E, 0x6440, 0x6442, 0x6443, 0x6449, 0x644B, 0x644C, 0x644D,
- 0x644E, 0x644F, 0x6450, 0x6453, 0x6455, 0x6456, 0x6457, 0x6459,
- 0x645A, 0x645B, 0x645D, 0x6460, 0x6461, 0x6462, 0x6463, 0x6464,
- 0x6465, 0x6466, 0x6468, 0x646A, 0x646B, 0x646C, 0x646E, 0x6470,
- 0x6471, 0x6472, 0x6474, 0x6475, 0x6477, 0x647C, 0x647D, 0x647E,
- 0x647F, 0x6480, 0x6481, 0x6483, 0x6486, 0x6489, 0x648A, 0x648B,
- 0x648C, 0x648D, 0x648E, 0x648F, 0x6490, 0x6494, 0x6497, 0x6498,
- 0x649A, 0x649B, 0x649C, 0x649D, 0x64A0, 0x64A1, 0x64A2, 0x64A6,
- 0x64A7, 0x64A8, 0x64AA, 0x64AF, 0x64B1, 0x64B4, 0x64B6, 0x64B9,
- 0x64BD, 0x64C3, 0x64C6, 0x64C8, 0x64C9, 0x64CC, 0x64CF, 0x64D1,
- 0x64D3, 0x64D5, 0x64D6, 0x64D9, 0x64DB, 0x64DC, 0x64DD, 0x64DF,
- 0x64E1, 0x64E3, 0x64E5, 0x64E7, 0x64E8, 0x64E9, 0x64EA, 0x64EB,
- 0x64ED, 0x64EE, 0x64F3, 0x64F5, 0x64F6, 0x64F8, 0x64F9, 0x64FD,
- 0x64FF, 0x6501, 0x6502, 0x6503, 0x6505, 0x6507, 0x6508, 0x650A,
- 0x650B, 0x650C, 0x650D, 0x650E, 0x6510, 0x6511, 0x6513, 0x6515,
- 0x6517, 0x651A, 0x651C, 0x651E, 0x651F, 0x6520, 0x6521, 0x6526,
- 0x6527, 0x6528, 0x6529, 0x652D, 0x6530, 0x6531, 0x6532, 0x6533,
- 0x6537, 0x653A, 0x653C, 0x653D, 0x6540, 0x6541, 0x6542, 0x6543,
- 0x6544, 0x6546, 0x6547, 0x654A, 0x654B, 0x654D, 0x654E, 0x6550,
- 0x6552, 0x6553, 0x6554, 0x6558, 0x655A, 0x655C, 0x655F, 0x6560,
- 0x6561, 0x6564, 0x6565, 0x6567, 0x6568, 0x6569, 0x656A, 0x656D,
- 0x656E, 0x656F, 0x6571, 0x6573, 0x6576, 0x6579, 0x657A, 0x657B,
- 0x657C, 0x657D, 0x657E, 0x657F, 0x6580, 0x6581, 0x6584, 0x6585,
- 0x6586, 0x6588, 0x6589, 0x658A, 0x658D, 0x658E, 0x658F, 0x6592,
- 0x6594, 0x6596, 0x6598, 0x659A, 0x659D, 0x659E, 0x65A0, 0x65A2,
- 0x65A3, 0x65A6, 0x65A8, 0x65AA, 0x65AE, 0x65B1, 0x65B2, 0x65B3,
- 0x65B4, 0x65B5, 0x65B6, 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, 0x6644, 0x6645, 0x6646, 0x6647, 0x6648,
- 0x6649, 0x664A, 0x664D, 0x664E, 0x6650, 0x6651, 0x6658, 0x6659,
- 0x665B, 0x665C, 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, 0x668A, 0x668B, 0x668D, 0x668E,
- 0x668F, 0x6690, 0x6692, 0x6693, 0x6694, 0x6695, 0x6698, 0x6699,
- 0x669A, 0x669B, 0x669C, 0x669E, 0x669F, 0x66A0, 0x66A1, 0x66A3,
- 0x66A4, 0x66A5, 0x66A6, 0x66A9, 0x66AA, 0x66AC, 0x66AD, 0x66AF,
- 0x66B0, 0x66B1, 0x66B2, 0x66B3, 0x66B5, 0x66B6, 0x66B7, 0x66B8,
- 0x66BA, 0x66BB, 0x66BC, 0x66BD, 0x66BF, 0x66C0, 0x66C1, 0x66C2,
- 0x66C3, 0x66C5, 0x66C8, 0x66CA, 0x66CB, 0x66CC, 0x66CD, 0x66CE,
- 0x66CF, 0x66D0, 0x66D1, 0x66D2, 0x66D3, 0x66D4, 0x66D5, 0x66D7,
- 0x66D8, 0x66DA, 0x66DE, 0x66DF, 0x66E1, 0x66E2, 0x66E3, 0x66E4,
- 0x66E5, 0x66E7, 0x66E8, 0x66EA, 0x66EB, 0x66ED, 0x66EE, 0x66EF,
- 0x66F1, 0x66F5, 0x66F6, 0x66FA, 0x66FB, 0x66FD, 0x6701, 0x6702,
- 0x6704, 0x6705, 0x6706, 0x6707, 0x670C, 0x670E, 0x670F, 0x6711,
- 0x6712, 0x6713, 0x6716, 0x6718, 0x6719, 0x671A, 0x671C, 0x671E,
- 0x6720, 0x6721, 0x6722, 0x6723, 0x6724, 0x6725, 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, 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, 0x6899, 0x689A, 0x689B, 0x689C, 0x689E,
- 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, 0x68D9, 0x68DB,
- 0x68DC, 0x68DD, 0x68DE, 0x68E1, 0x68E2, 0x68E4, 0x68E5, 0x68E6,
- 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, 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, 0x694B, 0x694C, 0x694D, 0x694E, 0x694F, 0x6950, 0x6951,
- 0x6952, 0x6955, 0x6956, 0x6958, 0x6959, 0x695B, 0x695C, 0x695F,
- 0x6961, 0x6962, 0x6964, 0x6965, 0x6967, 0x6969, 0x696A, 0x696C,
- 0x696F, 0x6970, 0x6972, 0x6973, 0x6974, 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, 0x69AC, 0x69AF,
- 0x69B0, 0x69B2, 0x69B3, 0x69B5, 0x69B6, 0x69B8, 0x69B9, 0x69BA,
- 0x69BC, 0x69BD, 0x69BE, 0x69C0, 0x69C2, 0x69C3, 0x69C4, 0x69C5,
- 0x69C6, 0x69C7, 0x69C8, 0x69C9, 0x69CF, 0x69D1, 0x69D2, 0x69D3,
- 0x69D5, 0x69D6, 0x69D7, 0x69D8, 0x69D9, 0x69DA, 0x69DC, 0x69DD,
- 0x69DE, 0x69E1, 0x69E2, 0x69E3, 0x69E4, 0x69E5, 0x69E6, 0x69E8,
- 0x69E9, 0x69EA, 0x69EB, 0x69EC, 0x69EE, 0x69EF, 0x69F0, 0x69F1,
- 0x69F4, 0x69F5, 0x69F6, 0x69F7, 0x69F8, 0x69F9, 0x69FA, 0x69FB,
- 0x69FC, 0x69FE, 0x6A00, 0x6A03, 0x6A04, 0x6A06, 0x6A07, 0x6A08,
- 0x6A09, 0x6A0B, 0x6A0C, 0x6A0D, 0x6A0E, 0x6A0F, 0x6A10, 0x6A11,
- 0x6A12, 0x6A14, 0x6A15, 0x6A16, 0x6A1A, 0x6A1B, 0x6A1C, 0x6A1D,
- 0x6A20, 0x6A22, 0x6A24, 0x6A25, 0x6A26, 0x6A27, 0x6A29, 0x6A2B,
- 0x6A2C, 0x6A2D, 0x6A2E, 0x6A30, 0x6A32, 0x6A33, 0x6A34, 0x6A36,
- 0x6A37, 0x6A3B, 0x6A3C, 0x6A3F, 0x6A40, 0x6A41, 0x6A42, 0x6A43,
- 0x6A45, 0x6A46, 0x6A49, 0x6A4A, 0x6A4C, 0x6A4D, 0x6A4E, 0x6A4F,
- 0x6A51, 0x6A52, 0x6A53, 0x6A54, 0x6A55, 0x6A56, 0x6A57, 0x6A5A,
- 0x6A5C, 0x6A5D, 0x6A5E, 0x6A60, 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, 0x6A8A, 0x6A8B, 0x6A8C, 0x6A8D,
- 0x6A8F, 0x6A92, 0x6A93, 0x6A95, 0x6A96, 0x6A98, 0x6A99, 0x6A9A,
- 0x6A9B, 0x6A9D, 0x6A9E, 0x6A9F, 0x6AA1, 0x6AA4, 0x6AA5, 0x6AA6,
- 0x6AA7, 0x6AA8, 0x6AAA, 0x6AAD, 0x6AAE, 0x6AB0, 0x6AB1, 0x6AB2,
- 0x6AB4, 0x6AB5, 0x6AB6, 0x6AB7, 0x6AB9, 0x6ABA, 0x6ABC, 0x6ABD,
- 0x6ABE, 0x6ABF, 0x6AC0, 0x6AC1, 0x6AC2, 0x6AC4, 0x6AC5, 0x6AC6,
- 0x6AC7, 0x6AC8, 0x6AC9, 0x6ACA, 0x6ACB, 0x6ACC, 0x6ACD, 0x6ACE,
- 0x6ACF, 0x6AD0, 0x6AD1, 0x6AD2, 0x6AD4, 0x6AD5, 0x6AD6, 0x6AD7,
- 0x6AD8, 0x6AD9, 0x6ADC, 0x6AE0, 0x6AE1, 0x6AE2, 0x6AE3, 0x6AE4,
- 0x6AE5, 0x6AE6, 0x6AE9, 0x6AEB, 0x6AED, 0x6AEE, 0x6AEF, 0x6AF0,
- 0x6AF1, 0x6AF2, 0x6AF4, 0x6AF5, 0x6AF6, 0x6AF7, 0x6AF9, 0x6AFA,
- 0x6AFC, 0x6AFD, 0x6AFE, 0x6AFF, 0x6B00, 0x6B01, 0x6B02, 0x6B03,
- 0x6B05, 0x6B06, 0x6B07, 0x6B08, 0x6B09, 0x6B0B, 0x6B0C, 0x6B0D,
- 0x6B0E, 0x6B10, 0x6B11, 0x6B13, 0x6B14, 0x6B15, 0x6B17, 0x6B18,
- 0x6B19, 0x6B1A, 0x6B1B, 0x6B1C, 0x6B1D, 0x6B1F, 0x6B25, 0x6B26,
- 0x6B28, 0x6B29, 0x6B2A, 0x6B2B, 0x6B2C, 0x6B2D, 0x6B2E, 0x6B2F,
- 0x6B30, 0x6B31, 0x6B33, 0x6B34, 0x6B35, 0x6B36, 0x6B38, 0x6B3B,
- 0x6B3C, 0x6B3F, 0x6B40, 0x6B41, 0x6B42, 0x6B44, 0x6B45, 0x6B48,
- 0x6B4A, 0x6B4B, 0x6B4D, 0x6B4E, 0x6B4F, 0x6B51, 0x6B52, 0x6B53,
- 0x6B54, 0x6B55, 0x6B56, 0x6B57, 0x6B58, 0x6B5A, 0x6B5B, 0x6B5C,
- 0x6B5D, 0x6B5E, 0x6B60, 0x6B68, 0x6B69, 0x6B6B, 0x6B6C, 0x6B6D,
- 0x6B6E, 0x6B6F, 0x6B70, 0x6B71, 0x6B73, 0x6B74, 0x6B75, 0x6B76,
- 0x6B7A, 0x6B7D, 0x6B7E, 0x6B7F, 0x6B80, 0x6B85, 0x6B88, 0x6B8C,
- 0x6B8E, 0x6B8F, 0x6B90, 0x6B91, 0x6B94, 0x6B95, 0x6B97, 0x6B99,
- 0x6B9C, 0x6B9D, 0x6B9F, 0x6BA0, 0x6BA2, 0x6BA3, 0x6BA5, 0x6BA6,
- 0x6BA7, 0x6BA8, 0x6BA9, 0x6BAC, 0x6BAD, 0x6BB0, 0x6BB1, 0x6BB6,
- 0x6BB8, 0x6BB9, 0x6BBC, 0x6BBD, 0x6BBE, 0x6BC0, 0x6BC3, 0x6BC4,
- 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, 0x6C00, 0x6C01, 0x6C02,
- 0x6C03, 0x6C04, 0x6C09, 0x6C0A, 0x6C0B, 0x6C0E, 0x6C12, 0x6C17,
- 0x6C1C, 0x6C1D, 0x6C1E, 0x6C20, 0x6C25, 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, 0x6D7A, 0x6D7B,
- 0x6D7D, 0x6D7E, 0x6D7F, 0x6D80, 0x6D81, 0x6D83, 0x6D84, 0x6D86,
- 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, 0x6DED, 0x6DEF, 0x6DF0,
- 0x6DF2, 0x6DF4, 0x6DF8, 0x6DFD, 0x6DFE, 0x6DFF, 0x6E00, 0x6E01,
- 0x6E02, 0x6E03, 0x6E04, 0x6E06, 0x6E07, 0x6E08, 0x6E09, 0x6E0B,
- 0x6E0F, 0x6E12, 0x6E13, 0x6E15, 0x6E18, 0x6E19, 0x6E1B, 0x6E1C,
- 0x6E1E, 0x6E1F, 0x6E22, 0x6E27, 0x6E28, 0x6E2A, 0x6E2E, 0x6E30,
- 0x6E31, 0x6E33, 0x6E35, 0x6E36, 0x6E37, 0x6E39, 0x6E3B, 0x6E3C,
- 0x6E3D, 0x6E3F, 0x6E40, 0x6E41, 0x6E42, 0x6E45, 0x6E46, 0x6E47,
- 0x6E48, 0x6E49, 0x6E4A, 0x6E4B, 0x6E4C, 0x6E4F, 0x6E50, 0x6E51,
- 0x6E52, 0x6E55, 0x6E57, 0x6E59, 0x6E5A, 0x6E5C, 0x6E5D, 0x6E60,
- 0x6E61, 0x6E62, 0x6E63, 0x6E64, 0x6E65, 0x6E66, 0x6E67, 0x6E68,
- 0x6E69, 0x6E6A, 0x6E6C, 0x6E6D, 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, 0x6E97, 0x6E99, 0x6E9A, 0x6E9B, 0x6E9E, 0x6EA0,
- 0x6EA1, 0x6EA3, 0x6EA4, 0x6EA6, 0x6EA8, 0x6EA9, 0x6EAB, 0x6EAC,
- 0x6EAD, 0x6EAE, 0x6EB0, 0x6EB3, 0x6EB5, 0x6EB8, 0x6EB9, 0x6EBC,
- 0x6EBE, 0x6EBF, 0x6EC0, 0x6EC3, 0x6EC6, 0x6EC8, 0x6EC9, 0x6ECA,
- 0x6ECD, 0x6ED0, 0x6ED2, 0x6ED6, 0x6ED8, 0x6ED9, 0x6EDB, 0x6EDC,
- 0x6EDD, 0x6EE3, 0x6EE7, 0x6EEA, 0x6EEB, 0x6EED, 0x6EEE, 0x6EF0,
- 0x6EF1, 0x6EF3, 0x6EF5, 0x6EF6, 0x6EFA, 0x6EFB, 0x6EFC, 0x6EFD,
- 0x6EFE, 0x6F00, 0x6F03, 0x6F04, 0x6F05, 0x6F07, 0x6F08, 0x6F0A,
- 0x6F0B, 0x6F0C, 0x6F0D, 0x6F0E, 0x6F10, 0x6F11, 0x6F12, 0x6F16,
- 0x6F17, 0x6F18, 0x6F19, 0x6F1B, 0x6F1C, 0x6F1D, 0x6F1E, 0x6F1F,
- 0x6F21, 0x6F25, 0x6F26, 0x6F27, 0x6F28, 0x6F2E, 0x6F30, 0x6F34,
- 0x6F35, 0x6F37, 0x6F39, 0x6F3A, 0x6F3B, 0x6F3C, 0x6F3D, 0x6F40,
- 0x6F42, 0x6F43, 0x6F44, 0x6F45, 0x6F48, 0x6F49, 0x6F4A, 0x6F4C,
- 0x6F4E, 0x6F4F, 0x6F50, 0x6F52, 0x6F53, 0x6F55, 0x6F56, 0x6F57,
- 0x6F5A, 0x6F5B, 0x6F5D, 0x6F5F, 0x6F60, 0x6F61, 0x6F63, 0x6F65,
- 0x6F67, 0x6F68, 0x6F69, 0x6F6A, 0x6F6B, 0x6F6C, 0x6F71, 0x6F73,
- 0x6F75, 0x6F76, 0x6F79, 0x6F7B, 0x6F7D, 0x6F7E, 0x6F81, 0x6F82,
- 0x6F83, 0x6F85, 0x6F8A, 0x6F8B, 0x6F8F, 0x6F90, 0x6F91, 0x6F92,
- 0x6F93, 0x6F94, 0x6F95, 0x6F96, 0x6F98, 0x6F99, 0x6F9A, 0x6F9B,
- 0x6F9D, 0x6F9E, 0x6F9F, 0x6FA2, 0x6FA3, 0x6FA5, 0x6FA6, 0x6FA8,
- 0x6FAA, 0x6FAB, 0x6FAC, 0x6FAD, 0x6FAF, 0x6FB0, 0x6FB2, 0x6FB4,
- 0x6FB5, 0x6FB7, 0x6FB8, 0x6FBA, 0x6FBB, 0x6FBC, 0x6FBD, 0x6FBE,
- 0x6FBF, 0x6FC4, 0x6FC5, 0x6FC6, 0x6FC7, 0x6FC8, 0x6FCA, 0x6FCB,
- 0x6FCC, 0x6FCD, 0x6FCE, 0x6FCF, 0x6FD0, 0x6FD3, 0x6FD4, 0x6FD6,
- 0x6FD7, 0x6FD9, 0x6FDA, 0x6FDC, 0x6FDD, 0x6FE2, 0x6FE3, 0x6FE5,
- 0x6FE6, 0x6FE7, 0x6FE8, 0x6FE9, 0x6FEA, 0x6FEC, 0x6FED, 0x6FF2,
- 0x6FF3, 0x6FF4, 0x6FF5, 0x6FF6, 0x6FF7, 0x6FF8, 0x6FF9, 0x6FFB,
- 0x6FFD, 0x6FFF, 0x7000, 0x7001, 0x7002, 0x7003, 0x7004, 0x7007,
- 0x7008, 0x700A, 0x700C, 0x700D, 0x700E, 0x7010, 0x7012, 0x7013,
- 0x7014, 0x7016, 0x7017, 0x7019, 0x701C, 0x701E, 0x7021, 0x7022,
- 0x7024, 0x7025, 0x7026, 0x7029, 0x702A, 0x702B, 0x702C, 0x702D,
- 0x702E, 0x702F, 0x7031, 0x7033, 0x7034, 0x7036, 0x7037, 0x7038,
- 0x703A, 0x703B, 0x703C, 0x703D, 0x703F, 0x7040, 0x7041, 0x7042,
- 0x7045, 0x7046, 0x7047, 0x7048, 0x7049, 0x704A, 0x704B, 0x704D,
- 0x704E, 0x7050, 0x7052, 0x7053, 0x7054, 0x7056, 0x7057, 0x7059,
- 0x705A, 0x705B, 0x705C, 0x705F, 0x7060, 0x7061, 0x7062, 0x7065,
- 0x7066, 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, 0x70D0, 0x70D1,
- 0x70D2, 0x70D3, 0x70D4, 0x70D5, 0x70D6, 0x70D7, 0x70DA, 0x70DC,
- 0x70DD, 0x70DE, 0x70E0, 0x70E1, 0x70E2, 0x70E3, 0x70E5, 0x70EA,
- 0x70EE, 0x70F0, 0x70F1, 0x70F2, 0x70F3, 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, 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, 0x714B, 0x714D,
- 0x714F, 0x7150, 0x7151, 0x7153, 0x7154, 0x7155, 0x7156, 0x7157,
- 0x7158, 0x7159, 0x715A, 0x715B, 0x715D, 0x715F, 0x7160, 0x7161,
- 0x7163, 0x7165, 0x716A, 0x716B, 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,
- 0x7193, 0x7195, 0x7196, 0x719A, 0x719B, 0x719C, 0x719D, 0x719E,
- 0x71A1, 0x71A2, 0x71A3, 0x71A4, 0x71A5, 0x71A6, 0x71A7, 0x71A9,
- 0x71AA, 0x71AB, 0x71AD, 0x71AE, 0x71AF, 0x71B0, 0x71B2, 0x71B4,
- 0x71B6, 0x71B7, 0x71B8, 0x71BA, 0x71BB, 0x71BC, 0x71BD, 0x71BF,
- 0x71C0, 0x71C2, 0x71C4, 0x71C5, 0x71C6, 0x71C7, 0x71C9, 0x71CA,
- 0x71CB, 0x71CC, 0x71CD, 0x71CF, 0x71D0, 0x71D1, 0x71D3, 0x71D6,
- 0x71D7, 0x71D8, 0x71DA, 0x71DB, 0x71DD, 0x71DE, 0x71E1, 0x71E2,
- 0x71E3, 0x71E4, 0x71E8, 0x71E9, 0x71EA, 0x71EB, 0x71EC, 0x71EF,
- 0x71F0, 0x71F1, 0x71F2, 0x71F3, 0x71F5, 0x71F6, 0x71F7, 0x71F8,
- 0x71FA, 0x71FB, 0x71FD, 0x71FF, 0x7200, 0x7201, 0x7202, 0x7203,
- 0x7204, 0x7205, 0x7207, 0x7208, 0x7209, 0x720A, 0x720B, 0x720C,
- 0x720E, 0x720F, 0x7211, 0x7212, 0x7213, 0x7214, 0x7215, 0x7216,
- 0x7217, 0x7218, 0x7219, 0x721A, 0x721C, 0x721E, 0x721F, 0x7220,
- 0x7221, 0x7222, 0x7223, 0x7224, 0x7225, 0x7226, 0x7227, 0x7229,
- 0x722B, 0x722D, 0x722E, 0x722F, 0x7233, 0x7234, 0x723C, 0x7240,
- 0x7241, 0x7242, 0x7243, 0x7244, 0x7245, 0x7246, 0x7249, 0x724A,
- 0x724B, 0x724E, 0x724F, 0x7250, 0x7251, 0x7253, 0x7254, 0x7255,
- 0x7257, 0x725A, 0x725C, 0x725E, 0x7260, 0x7263, 0x7264, 0x7265,
- 0x7268, 0x726A, 0x726B, 0x726C, 0x726D, 0x7270, 0x7271, 0x7273,
- 0x7274, 0x7276, 0x7277, 0x7278, 0x727B, 0x727C, 0x7282, 0x7283,
- 0x7285, 0x7286, 0x7287, 0x7288, 0x7289, 0x728C, 0x728E, 0x7290,
- 0x7291, 0x7293, 0x7294, 0x7295, 0x7297, 0x7298, 0x7299, 0x729A,
- 0x729B, 0x729C, 0x729D, 0x729E, 0x72A0, 0x72A1, 0x72A3, 0x72A4,
- 0x72A5, 0x72A6, 0x72A8, 0x72A9, 0x72AA, 0x72AB, 0x72AE, 0x72B1,
- 0x72B2, 0x72B3, 0x72B5, 0x72BA, 0x72BB, 0x72BC, 0x72BD, 0x72BE,
- 0x72BF, 0x72C5, 0x72C6, 0x72C7, 0x72C9, 0x72CA, 0x72CB, 0x72CC,
- 0x72CF, 0x72D1, 0x72D3, 0x72D4, 0x72D5, 0x72D6, 0x72D8, 0x72DA,
- 0x72DB, 0x72DC, 0x72DD, 0x72DF, 0x72E2, 0x72E3, 0x72E4, 0x72E5,
- 0x72E6, 0x72E7, 0x72EA, 0x72EB, 0x72F5, 0x72F6, 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,
- 0x733A, 0x733C, 0x733D, 0x7340, 0x7342, 0x7343, 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, 0x7369, 0x736E, 0x7371, 0x7373, 0x7374,
- 0x7376, 0x7379, 0x737D, 0x737F, 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, 0x73F8, 0x73F9,
- 0x73FA, 0x73FB, 0x73FC, 0x73FD, 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, 0x7440, 0x7442,
- 0x7443, 0x7444, 0x7445, 0x7446, 0x7447, 0x7448, 0x7449, 0x744A,
- 0x744C, 0x744D, 0x744E, 0x744F, 0x7450, 0x7451, 0x7452, 0x7453,
- 0x7454, 0x7456, 0x7458, 0x745D, 0x7460, 0x7461, 0x7462, 0x7464,
- 0x7465, 0x7466, 0x7467, 0x7468, 0x746B, 0x746C, 0x746E, 0x746F,
- 0x7471, 0x7472, 0x7473, 0x7474, 0x7475, 0x7478, 0x7479, 0x747A,
- 0x747B, 0x747C, 0x747D, 0x747F, 0x7482, 0x7484, 0x7485, 0x7486,
- 0x7488, 0x748A, 0x748C, 0x748D, 0x748F, 0x7491, 0x7492, 0x7493,
- 0x7494, 0x7495, 0x7496, 0x7497, 0x7498, 0x7499, 0x749A, 0x749B,
- 0x749D, 0x749F, 0x74A0, 0x74A1, 0x74A2, 0x74A4, 0x74A5, 0x74AA,
- 0x74AB, 0x74AC, 0x74AD, 0x74AE, 0x74AF, 0x74B1, 0x74B2, 0x74B3,
- 0x74B4, 0x74B5, 0x74B6, 0x74B7, 0x74B8, 0x74B9, 0x74BB, 0x74BC,
- 0x74BE, 0x74BF, 0x74C0, 0x74C1, 0x74C2, 0x74C3, 0x74C4, 0x74C5,
- 0x74C6, 0x74C7, 0x74C8, 0x74C9, 0x74CB, 0x74CC, 0x74CD, 0x74CE,
- 0x74D0, 0x74D1, 0x74D3, 0x74D5, 0x74D6, 0x74D7, 0x74D8, 0x74D9,
- 0x74DB, 0x74DD, 0x74DF, 0x74E1, 0x74E5, 0x74E7, 0x74E8, 0x74E9,
- 0x74EA, 0x74EB, 0x74EC, 0x74ED, 0x74F0, 0x74F1, 0x74F2, 0x74F3,
- 0x74F5, 0x74F8, 0x74F9, 0x74FA, 0x74FB, 0x74FC, 0x74FD, 0x74FE,
- 0x7500, 0x7501, 0x7502, 0x7503, 0x7505, 0x7506, 0x7507, 0x7508,
- 0x7509, 0x750A, 0x750B, 0x750E, 0x7510, 0x7512, 0x7514, 0x7515,
- 0x7516, 0x7517, 0x751B, 0x751D, 0x751E, 0x7520, 0x7521, 0x7522,
- 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, 0x755E, 0x755F, 0x7560, 0x7561,
- 0x7563, 0x7564, 0x7567, 0x7568, 0x7569, 0x756C, 0x756D, 0x756E,
- 0x756F, 0x7570, 0x7571, 0x7573, 0x7575, 0x7577, 0x757A, 0x757B,
- 0x757C, 0x757D, 0x757E, 0x7580, 0x7581, 0x7582, 0x7584, 0x7585,
- 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, 0x75DA, 0x75DC, 0x75DD, 0x75DF,
- 0x75E0, 0x75E1, 0x75E5, 0x75E9, 0x75EC, 0x75ED, 0x75EE, 0x75EF,
- 0x75F2, 0x75F3, 0x75F5, 0x75F6, 0x75F7, 0x75F8, 0x75FA, 0x75FB,
- 0x75FD, 0x75FE, 0x7604, 0x7606, 0x7607, 0x7608, 0x7609, 0x760E,
- 0x760F, 0x7611, 0x7612, 0x7613, 0x7614, 0x7616, 0x761A, 0x761C,
- 0x761D, 0x7623, 0x7628, 0x762C, 0x762E, 0x762F, 0x7631, 0x7632,
- 0x7636, 0x7637, 0x7639, 0x763A, 0x763D, 0x7641, 0x7644, 0x7645,
- 0x7648, 0x764A, 0x764B, 0x764E, 0x764F, 0x7650, 0x7651, 0x7652,
- 0x7653, 0x7655, 0x7657, 0x7659, 0x765A, 0x765B, 0x765D, 0x7660,
- 0x7661, 0x7666, 0x7668, 0x766A, 0x7673, 0x7674, 0x7675, 0x7676,
- 0x7677, 0x7679, 0x767A, 0x767F, 0x7680, 0x7681, 0x7683, 0x7685,
- 0x7689, 0x768A, 0x768C, 0x768D, 0x768F, 0x7690, 0x7692, 0x7694,
- 0x7695, 0x7697, 0x7698, 0x769B, 0x769C, 0x769D, 0x769E, 0x769F,
- 0x76A0, 0x76A1, 0x76A2, 0x76A3, 0x76A5, 0x76A6, 0x76A7, 0x76A8,
- 0x76A9, 0x76AA, 0x76AB, 0x76AC, 0x76AD, 0x76AF, 0x76B0, 0x76B3,
- 0x76B5, 0x76B6, 0x76B7, 0x76B9, 0x76BB, 0x76BC, 0x76BD, 0x76BE,
- 0x76C0, 0x76C1, 0x76C3, 0x76C4, 0x76C7, 0x76C9, 0x76CB, 0x76CC,
- 0x76D3, 0x76D5, 0x76D9, 0x76DA, 0x76DC, 0x76DD, 0x76E0, 0x76E2,
- 0x76E6, 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, 0x7752, 0x7753, 0x7754, 0x7755,
- 0x7756, 0x7757, 0x7758, 0x7759, 0x775C, 0x775D, 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, 0x7799, 0x779A, 0x779B, 0x779C, 0x779D,
- 0x77A1, 0x77A3, 0x77A4, 0x77A6, 0x77A8, 0x77AB, 0x77AE, 0x77AF,
- 0x77B1, 0x77B2, 0x77B4, 0x77B6, 0x77B7, 0x77B8, 0x77B9, 0x77BA,
- 0x77BE, 0x77C0, 0x77C1, 0x77C2, 0x77C3, 0x77C4, 0x77C5, 0x77C6,
- 0x77C8, 0x77C9, 0x77CA, 0x77CB, 0x77CC, 0x77CE, 0x77CF, 0x77D0,
- 0x77D1, 0x77D2, 0x77D3, 0x77D4, 0x77D5, 0x77D6, 0x77D8, 0x77D9,
- 0x77DD, 0x77DE, 0x77DF, 0x77E0, 0x77E1, 0x77E4, 0x77E6, 0x77E8,
- 0x77EA, 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, 0x7844, 0x7846, 0x7848,
- 0x7849, 0x784A, 0x784B, 0x784D, 0x784F, 0x7851, 0x7853, 0x7854,
- 0x7858, 0x7859, 0x785A, 0x785B, 0x785C, 0x785E, 0x785F, 0x7860,
- 0x7861, 0x7862, 0x7863, 0x7865, 0x7866, 0x7867, 0x7869, 0x7870,
- 0x7871, 0x7872, 0x7873, 0x7874, 0x7875, 0x7876, 0x7878, 0x7879,
- 0x787A, 0x787B, 0x787D, 0x787E, 0x787F, 0x7880, 0x7881, 0x7882,
- 0x7883, 0x7884, 0x7885, 0x7886, 0x7888, 0x788A, 0x788B, 0x788F,
- 0x7890, 0x7892, 0x7894, 0x7895, 0x7896, 0x7899, 0x789D, 0x789E,
- 0x78A0, 0x78A2, 0x78A4, 0x78A6, 0x78A8, 0x78AA, 0x78AB, 0x78AC,
- 0x78AE, 0x78AF, 0x78B5, 0x78B6, 0x78B7, 0x78BB, 0x78BD, 0x78BF,
- 0x78C0, 0x78C2, 0x78C3, 0x78C4, 0x78C6, 0x78C7, 0x78C8, 0x78CC,
- 0x78CD, 0x78CE, 0x78CF, 0x78D1, 0x78D2, 0x78D3, 0x78D6, 0x78D7,
- 0x78D8, 0x78DB, 0x78DC, 0x78DD, 0x78DE, 0x78DF, 0x78E0, 0x78E1,
- 0x78E2, 0x78E4, 0x78E5, 0x78E6, 0x78E9, 0x78EA, 0x78EB, 0x78ED,
- 0x78EE, 0x78F0, 0x78F1, 0x78F3, 0x78F5, 0x78F6, 0x78F8, 0x78F9,
- 0x78FB, 0x78FC, 0x78FE, 0x78FF, 0x7900, 0x7902, 0x7903, 0x7904,
- 0x7906, 0x7907, 0x7908, 0x7909, 0x790A, 0x790B, 0x790C, 0x790D,
- 0x790F, 0x7910, 0x7911, 0x7912, 0x7914, 0x7915, 0x7916, 0x7917,
- 0x7918, 0x791A, 0x791B, 0x791C, 0x791D, 0x791F, 0x7920, 0x7921,
- 0x7922, 0x7923, 0x7925, 0x7927, 0x7928, 0x7929, 0x792D, 0x792E,
- 0x792F, 0x7930, 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, 0x7990, 0x7991, 0x7992, 0x7993, 0x7994,
- 0x7995, 0x7996, 0x7997, 0x7998, 0x7999, 0x799B, 0x799C, 0x799D,
- 0x799E, 0x799F, 0x79A0, 0x79A1, 0x79A2, 0x79A3, 0x79A4, 0x79A5,
- 0x79A8, 0x79A9, 0x79AB, 0x79AC, 0x79AD, 0x79AF, 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, 0x7A1D, 0x7A1F, 0x7A21, 0x7A22, 0x7A24, 0x7A25, 0x7A26,
- 0x7A27, 0x7A28, 0x7A29, 0x7A2A, 0x7A2B, 0x7A2C, 0x7A2D, 0x7A2F,
- 0x7A30, 0x7A32, 0x7A34, 0x7A35, 0x7A36, 0x7A38, 0x7A3A, 0x7A3E,
- 0x7A41, 0x7A42, 0x7A43, 0x7A44, 0x7A45, 0x7A47, 0x7A48, 0x7A49,
- 0x7A4A, 0x7A4B, 0x7A4F, 0x7A50, 0x7A52, 0x7A53, 0x7A54, 0x7A55,
- 0x7A56, 0x7A58, 0x7A59, 0x7A5A, 0x7A5B, 0x7A5C, 0x7A5D, 0x7A5E,
- 0x7A5F, 0x7A60, 0x7A63, 0x7A64, 0x7A65, 0x7A66, 0x7A67, 0x7A68,
- 0x7A6A, 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, 0x7AA3,
- 0x7AA4, 0x7AA7, 0x7AAB, 0x7AAF, 0x7AB0, 0x7AB1, 0x7AB2, 0x7AB4,
- 0x7AB5, 0x7AB7, 0x7AB8, 0x7AB9, 0x7ABB, 0x7ABC, 0x7ABD, 0x7ABE,
- 0x7AC0, 0x7AC1, 0x7AC2, 0x7AC3, 0x7AC6, 0x7AC9, 0x7ACC, 0x7ACD,
- 0x7ACE, 0x7ACF, 0x7AD0, 0x7AD1, 0x7AD2, 0x7AD3, 0x7AD4, 0x7AD5,
- 0x7AD7, 0x7AD8, 0x7ADA, 0x7ADB, 0x7ADC, 0x7ADD, 0x7AE1, 0x7AE2,
- 0x7AE4, 0x7AE7, 0x7AE8, 0x7AE9, 0x7AEB, 0x7AEC, 0x7AEE, 0x7AF0,
- 0x7AF1, 0x7AF2, 0x7AF3, 0x7AF4, 0x7AF5, 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, 0x7B2F, 0x7B30, 0x7B32, 0x7B34, 0x7B35,
- 0x7B36, 0x7B37, 0x7B39, 0x7B3B, 0x7B3D, 0x7B3F, 0x7B40, 0x7B41,
- 0x7B42, 0x7B43, 0x7B44, 0x7B48, 0x7B4A, 0x7B4D, 0x7B4E, 0x7B53,
- 0x7B55, 0x7B57, 0x7B59, 0x7B5C, 0x7B5E, 0x7B5F, 0x7B61, 0x7B63,
- 0x7B64, 0x7B65, 0x7B66, 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, 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, 0x7BC2, 0x7BC3, 0x7BC5, 0x7BC8,
- 0x7BCA, 0x7BCD, 0x7BCE, 0x7BCF, 0x7BD0, 0x7BD2, 0x7BD4, 0x7BD5,
- 0x7BD6, 0x7BD7, 0x7BD8, 0x7BDB, 0x7BDC, 0x7BDE, 0x7BDF, 0x7BE0,
- 0x7BE2, 0x7BE3, 0x7BE7, 0x7BE8, 0x7BEB, 0x7BEC, 0x7BED, 0x7BEF,
- 0x7BF0, 0x7BF2, 0x7BF4, 0x7BF5, 0x7BF6, 0x7BF8, 0x7BF9, 0x7BFA,
- 0x7BFB, 0x7BFD, 0x7BFF, 0x7C01, 0x7C02, 0x7C03, 0x7C04, 0x7C05,
- 0x7C06, 0x7C08, 0x7C09, 0x7C0A, 0x7C0E, 0x7C10, 0x7C11, 0x7C12,
- 0x7C13, 0x7C14, 0x7C15, 0x7C17, 0x7C18, 0x7C19, 0x7C1A, 0x7C1B,
- 0x7C1C, 0x7C1D, 0x7C20, 0x7C22, 0x7C24, 0x7C25, 0x7C28, 0x7C29,
- 0x7C2C, 0x7C2D, 0x7C2E, 0x7C2F, 0x7C30, 0x7C31, 0x7C32, 0x7C33,
- 0x7C34, 0x7C35, 0x7C36, 0x7C37, 0x7C39, 0x7C3A, 0x7C3B, 0x7C3C,
- 0x7C42, 0x7C44, 0x7C45, 0x7C46, 0x7C47, 0x7C48, 0x7C49, 0x7C4A,
- 0x7C4B, 0x7C4E, 0x7C4F, 0x7C50, 0x7C51, 0x7C52, 0x7C53, 0x7C54,
- 0x7C55, 0x7C56, 0x7C57, 0x7C58, 0x7C59, 0x7C5A, 0x7C5B, 0x7C5D,
- 0x7C5E, 0x7C61, 0x7C62, 0x7C63, 0x7C65, 0x7C66, 0x7C67, 0x7C68,
- 0x7C6B, 0x7C6D, 0x7C6F, 0x7C70, 0x7C71, 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, 0x7CBF, 0x7CC0,
- 0x7CC2, 0x7CC3, 0x7CC4, 0x7CC6, 0x7CC9, 0x7CCB, 0x7CCE, 0x7CCF,
- 0x7CD0, 0x7CD1, 0x7CD2, 0x7CD3, 0x7CD4, 0x7CD8, 0x7CDA, 0x7CDB,
- 0x7CE1, 0x7CE2, 0x7CE3, 0x7CE4, 0x7CE5, 0x7CE6, 0x7CE9, 0x7CEA,
- 0x7CEB, 0x7CEC, 0x7CED, 0x7CEE, 0x7CF1, 0x7CF3, 0x7CF5, 0x7CF7,
- 0x7CFA, 0x7CFC, 0x7CFD, 0x7CFF, 0x7D01, 0x7D03, 0x7D0C, 0x7D0E,
- 0x7D0F, 0x7D11, 0x7D12, 0x7D16, 0x7D18, 0x7D1D, 0x7D1E, 0x7D1F,
- 0x7D23, 0x7D24, 0x7D25, 0x7D26, 0x7D28, 0x7D29, 0x7D2A, 0x7D2C,
- 0x7D2D, 0x7D2E, 0x7D34, 0x7D35, 0x7D36, 0x7D37, 0x7D38, 0x7D3B,
- 0x7D3D, 0x7D3E, 0x7D41, 0x7D43, 0x7D45, 0x7D47, 0x7D48, 0x7D49,
- 0x7D4A, 0x7D4B, 0x7D4C, 0x7D4D, 0x7D4F, 0x7D51, 0x7D52, 0x7D53,
- 0x7D54, 0x7D55, 0x7D56, 0x7D57, 0x7D58, 0x7D59, 0x7D5A, 0x7D5B,
- 0x7D5C, 0x7D5F, 0x7D60, 0x7D63, 0x7D64, 0x7D65, 0x7D67, 0x7D69,
- 0x7D6A, 0x7D6B, 0x7D6C, 0x7D6D, 0x7D6F, 0x7D70, 0x7D74, 0x7D75,
- 0x7D78, 0x7D7A, 0x7D7B, 0x7D7C, 0x7D7D, 0x7D7E, 0x7D7F, 0x7D80,
- 0x7D82, 0x7D84, 0x7D85, 0x7D87, 0x7D8A, 0x7D8B, 0x7D8C, 0x7D8D,
- 0x7D8E, 0x7D90, 0x7D91, 0x7D92, 0x7D94, 0x7D95, 0x7D96, 0x7D97,
- 0x7D98, 0x7D99, 0x7D9A, 0x7D9B, 0x7D9D, 0x7D9F, 0x7DA0, 0x7DA1,
- 0x7DA4, 0x7DA5, 0x7DA7, 0x7DA8, 0x7DA9, 0x7DAA, 0x7DAF, 0x7DB5,
- 0x7DB6, 0x7DB7, 0x7DBC, 0x7DC0, 0x7DC1, 0x7DC2, 0x7DC3, 0x7DC5,
- 0x7DC6, 0x7DC8, 0x7DC9, 0x7DCC, 0x7DCD, 0x7DCE, 0x7DCF, 0x7DD0,
- 0x7DD3, 0x7DD5, 0x7DD6, 0x7DDA, 0x7DDB, 0x7DDC, 0x7DDF, 0x7DE2,
- 0x7DE4, 0x7DE5, 0x7DE7, 0x7DEA, 0x7DEB, 0x7DED, 0x7DEE, 0x7DF0,
- 0x7DF3, 0x7DF5, 0x7DF7, 0x7DF8, 0x7DFA, 0x7DFC, 0x7DFD, 0x7DFE,
- 0x7DFF, 0x7E00, 0x7E01, 0x7E02, 0x7E03, 0x7E04, 0x7E05, 0x7E06,
- 0x7E07, 0x7E0C, 0x7E0D, 0x7E0E, 0x7E0F, 0x7E12, 0x7E13, 0x7E14,
- 0x7E15, 0x7E16, 0x7E17, 0x7E18, 0x7E19, 0x7E1A, 0x7E1C, 0x7E20,
- 0x7E21, 0x7E22, 0x7E24, 0x7E25, 0x7E26, 0x7E28, 0x7E29, 0x7E2A,
- 0x7E2C, 0x7E2F, 0x7E30, 0x7E33, 0x7E38, 0x7E3A, 0x7E3C, 0x7E3F,
- 0x7E40, 0x7E42, 0x7E43, 0x7E44, 0x7E48, 0x7E49, 0x7E4A, 0x7E4B,
- 0x7E4C, 0x7E4D, 0x7E4E, 0x7E4F, 0x7E50, 0x7E51, 0x7E53, 0x7E56,
- 0x7E57, 0x7E58, 0x7E59, 0x7E5B, 0x7E5C, 0x7E5D, 0x7E5F, 0x7E60,
- 0x7E61, 0x7E63, 0x7E64, 0x7E65, 0x7E66, 0x7E67, 0x7E68, 0x7E6C,
- 0x7E71, 0x7E72, 0x7E74, 0x7E75, 0x7E76, 0x7E77, 0x7E78, 0x7E7A,
- 0x7E7B, 0x7E7F, 0x7E80, 0x7E81, 0x7E83, 0x7E84, 0x7E85, 0x7E86,
- 0x7E87, 0x7E89, 0x7E8B, 0x7E8E, 0x7E90, 0x7E91, 0x7E92, 0x7E95,
- 0x7E97, 0x7E99, 0x7E9A, 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,
- 0x7F4D, 0x7F4F, 0x7F52, 0x7F53, 0x7F56, 0x7F59, 0x7F5B, 0x7F5C,
- 0x7F5D, 0x7F5E, 0x7F60, 0x7F63, 0x7F64, 0x7F65, 0x7F66, 0x7F67,
- 0x7F6B, 0x7F6C, 0x7F6D, 0x7F6F, 0x7F73, 0x7F75, 0x7F76, 0x7F78,
- 0x7F7A, 0x7F7B, 0x7F7C, 0x7F7D, 0x7F7F, 0x7F80, 0x7F82, 0x7F83,
- 0x7F84, 0x7F87, 0x7F89, 0x7F8B, 0x7F8D, 0x7F8F, 0x7F90, 0x7F91,
- 0x7F92, 0x7F93, 0x7F95, 0x7F96, 0x7F97, 0x7F98, 0x7F99, 0x7F9B,
- 0x7F9C, 0x7FA0, 0x7FA2, 0x7FA3, 0x7FA6, 0x7FA8, 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, 0x7FD3, 0x7FD6, 0x7FD7, 0x7FD9, 0x7FDA, 0x7FDB, 0x7FDC,
- 0x7FDD, 0x7FDE, 0x7FE2, 0x7FE3, 0x7FE4, 0x7FE7, 0x7FE8, 0x7FEA,
- 0x7FEB, 0x7FEC, 0x7FED, 0x7FEF, 0x7FF2, 0x7FF4, 0x7FF5, 0x7FF6,
- 0x7FF7, 0x7FF8, 0x7FFA, 0x7FFD, 0x7FFE, 0x7FFF, 0x8002, 0x8007,
- 0x8008, 0x8009, 0x800A, 0x800E, 0x800F, 0x8011, 0x8013, 0x801A,
- 0x801B, 0x801D, 0x801E, 0x801F, 0x8021, 0x8023, 0x8024, 0x802B,
- 0x802D, 0x802F, 0x8030, 0x8032, 0x8034, 0x8039, 0x803A, 0x803C,
- 0x803E, 0x8040, 0x8041, 0x8044, 0x8045, 0x8047, 0x8048, 0x8049,
- 0x804E, 0x804F, 0x8050, 0x8051, 0x8053, 0x8055, 0x8057, 0x8059,
- 0x805B, 0x805C, 0x805D, 0x805F, 0x8060, 0x8061, 0x8062, 0x8063,
- 0x8064, 0x8065, 0x8066, 0x8067, 0x8068, 0x806B, 0x806C, 0x806D,
- 0x806E, 0x8074, 0x8078, 0x807A, 0x807B, 0x807C, 0x8081, 0x8082,
- 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, 0x8107,
- 0x8108, 0x810B, 0x810C, 0x8115, 0x8117, 0x8119, 0x811C, 0x811D,
- 0x811F, 0x8120, 0x8121, 0x8122, 0x8123, 0x8124, 0x8125, 0x8126,
- 0x8127, 0x8128, 0x8129, 0x812A, 0x812B, 0x812D, 0x812E, 0x8130,
- 0x8133, 0x8134, 0x8135, 0x8137, 0x813A, 0x813B, 0x813C, 0x813D,
- 0x813F, 0x8140, 0x8141, 0x8142, 0x8143, 0x8144, 0x8145, 0x8147,
- 0x8149, 0x814D, 0x814F, 0x8152, 0x8157, 0x8158, 0x815B, 0x815C,
- 0x815D, 0x815E, 0x815F, 0x8162, 0x8163, 0x8164, 0x8168, 0x816A,
- 0x816C, 0x816F, 0x8172, 0x8173, 0x8175, 0x8176, 0x8177, 0x8181,
- 0x8183, 0x8184, 0x8185, 0x8186, 0x8187, 0x8189, 0x818B, 0x818C,
- 0x818D, 0x818E, 0x8190, 0x8192, 0x8193, 0x8194, 0x8195, 0x8196,
- 0x8197, 0x8199, 0x819E, 0x819F, 0x81A1, 0x81A2, 0x81A4, 0x81A5,
- 0x81A7, 0x81AB, 0x81AC, 0x81AD, 0x81AE, 0x81AF, 0x81B0, 0x81B1,
- 0x81B2, 0x81B4, 0x81B5, 0x81B6, 0x81B7, 0x81B8, 0x81B9, 0x81BC,
- 0x81C4, 0x81C5, 0x81C7, 0x81C8, 0x81CB, 0x81CE, 0x81D0, 0x81D1,
- 0x81D2, 0x81D3, 0x81D4, 0x81D5, 0x81D6, 0x81D7, 0x81D9, 0x81DB,
- 0x81DC, 0x81DD, 0x81DE, 0x81E1, 0x81E2, 0x81E4, 0x81E5, 0x81E6,
- 0x81E9, 0x81EB, 0x81EE, 0x81EF, 0x81F0, 0x81F1, 0x81F2, 0x81F5,
- 0x81F6, 0x81F7, 0x81F8, 0x81F9, 0x81FD, 0x81FF, 0x8203, 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, 0x825B, 0x825C, 0x825D, 0x825E, 0x8260, 0x8261,
- 0x8262, 0x8263, 0x8265, 0x8267, 0x8269, 0x826A, 0x826C, 0x826D,
- 0x8275, 0x8276, 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, 0x82BC, 0x82BF, 0x82C0,
- 0x82C2, 0x82C3, 0x82C5, 0x82C6, 0x82C9, 0x82D0, 0x82D6, 0x82D9,
- 0x82DA, 0x82DD, 0x82E2, 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,
- 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, 0x838B, 0x838C,
- 0x838D, 0x838F, 0x8390, 0x8391, 0x8394, 0x8395, 0x8397, 0x8399,
- 0x839A, 0x839D, 0x839F, 0x83A1, 0x83A3, 0x83A4, 0x83A5, 0x83A6,
- 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, 0x83EE, 0x83F3, 0x83F4, 0x83F5,
- 0x83F6, 0x83F7, 0x83FA, 0x83FB, 0x83FC, 0x83FE, 0x83FF, 0x8400,
- 0x8402, 0x8405, 0x8408, 0x8409, 0x8410, 0x8412, 0x8413, 0x8414,
- 0x8415, 0x8416, 0x8417, 0x8419, 0x841A, 0x841B, 0x841E, 0x841F,
- 0x8420, 0x8421, 0x8422, 0x8423, 0x8429, 0x842A, 0x842B, 0x842D,
- 0x842E, 0x842F, 0x8430, 0x8432, 0x8433, 0x8434, 0x8436, 0x8437,
- 0x8439, 0x843A, 0x843B, 0x843E, 0x843F, 0x8440, 0x8441, 0x8442,
- 0x8443, 0x8444, 0x8445, 0x8447, 0x8448, 0x844A, 0x844B, 0x844C,
- 0x844D, 0x844E, 0x844F, 0x8450, 0x8453, 0x8454, 0x8455, 0x8456,
- 0x8458, 0x845D, 0x845E, 0x845F, 0x8460, 0x8462, 0x8465, 0x8467,
- 0x8468, 0x846A, 0x846E, 0x8470, 0x8472, 0x8474, 0x8479, 0x847B,
- 0x847C, 0x847D, 0x847E, 0x847F, 0x8480, 0x8481, 0x8483, 0x8484,
- 0x8485, 0x8486, 0x848A, 0x848D, 0x848F, 0x8490, 0x8491, 0x8492,
- 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, 0x84BE, 0x84C2, 0x84C3,
- 0x84C5, 0x84C6, 0x84C7, 0x84C8, 0x84CC, 0x84CE, 0x84CF, 0x84D2,
- 0x84D4, 0x84D5, 0x84D7, 0x84D8, 0x84D9, 0x84DA, 0x84DB, 0x84DC,
- 0x84DE, 0x84E1, 0x84E2, 0x84E4, 0x84E7, 0x84E8, 0x84E9, 0x84EA,
- 0x84EB, 0x84ED, 0x84F1, 0x84F2, 0x84F3, 0x84F4, 0x84F5, 0x84F6,
- 0x84F7, 0x84F8, 0x84F9, 0x84FA, 0x84FB, 0x84FE, 0x8500, 0x8501,
- 0x8502, 0x8503, 0x8504, 0x8505, 0x8506, 0x8507, 0x8508, 0x8509,
- 0x850A, 0x850B, 0x850D, 0x850E, 0x850F, 0x8510, 0x8512, 0x8515,
- 0x8516, 0x8518, 0x8519, 0x851B, 0x851C, 0x851D, 0x8520, 0x8522,
- 0x8524, 0x8525, 0x8527, 0x8528, 0x8529, 0x852A, 0x852E, 0x852F,
- 0x8530, 0x8531, 0x8532, 0x8533, 0x8534, 0x8535, 0x8536, 0x853E,
- 0x853F, 0x8540, 0x8542, 0x8544, 0x8545, 0x8547, 0x854B, 0x854C,
- 0x854D, 0x854F, 0x8550, 0x8551, 0x8554, 0x8557, 0x855A, 0x855B,
- 0x855C, 0x855D, 0x855F, 0x8560, 0x8561, 0x8563, 0x8565, 0x8566,
- 0x8567, 0x856B, 0x856C, 0x856E, 0x856F, 0x8570, 0x8571, 0x8573,
- 0x8575, 0x8576, 0x8578, 0x857C, 0x857D, 0x857F, 0x8580, 0x8581,
- 0x8582, 0x8583, 0x8586, 0x8589, 0x858B, 0x858D, 0x858E, 0x8590,
- 0x8592, 0x8593, 0x8595, 0x8596, 0x8597, 0x8598, 0x8599, 0x859A,
- 0x859D, 0x859E, 0x85A0, 0x85A1, 0x85A2, 0x85A3, 0x85A5, 0x85A7,
- 0x85AB, 0x85AC, 0x85AD, 0x85B1, 0x85B2, 0x85B3, 0x85B4, 0x85B5,
- 0x85B6, 0x85B8, 0x85BB, 0x85BC, 0x85BD, 0x85BE, 0x85BF, 0x85C0,
- 0x85C2, 0x85C3, 0x85C4, 0x85C5, 0x85C6, 0x85C7, 0x85C8, 0x85CA,
- 0x85CB, 0x85CC, 0x85D1, 0x85D2, 0x85D4, 0x85D6, 0x85D7, 0x85D8,
- 0x85D9, 0x85DA, 0x85DB, 0x85DE, 0x85DF, 0x85E0, 0x85E1, 0x85E2,
- 0x85E3, 0x85E6, 0x85E7, 0x85E8, 0x85EB, 0x85EC, 0x85ED, 0x85EE,
- 0x85EF, 0x85F0, 0x85F1, 0x85F2, 0x85F3, 0x85F5, 0x85F7, 0x85F8,
- 0x85FC, 0x85FD, 0x85FE, 0x8600, 0x8601, 0x8602, 0x8603, 0x8608,
- 0x8609, 0x860A, 0x860C, 0x860D, 0x860E, 0x860F, 0x8610, 0x8612,
- 0x8613, 0x8614, 0x8615, 0x8617, 0x8618, 0x8619, 0x861B, 0x861C,
- 0x861D, 0x861F, 0x8620, 0x8621, 0x8623, 0x8624, 0x8625, 0x8626,
- 0x8628, 0x862A, 0x862B, 0x862C, 0x862E, 0x862F, 0x8630, 0x8631,
- 0x8632, 0x8633, 0x8634, 0x8635, 0x8636, 0x8637, 0x8639, 0x863B,
- 0x863D, 0x863E, 0x8640, 0x8641, 0x8642, 0x8643, 0x8644, 0x8645,
- 0x8646, 0x8647, 0x8648, 0x8649, 0x864A, 0x864B, 0x864C, 0x8652,
- 0x8653, 0x8656, 0x8657, 0x8658, 0x8659, 0x865B, 0x865D, 0x8660,
- 0x8661, 0x8663, 0x8664, 0x8665, 0x8666, 0x8668, 0x8669, 0x866A,
- 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, 0x86FB,
- 0x86FC, 0x86FD, 0x86FF, 0x8701, 0x8704, 0x8705, 0x870B, 0x870C,
- 0x870E, 0x870F, 0x8710, 0x8711, 0x8714, 0x8716, 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, 0x8756, 0x8758, 0x875A,
- 0x875B, 0x875C, 0x875D, 0x875E, 0x875F, 0x8761, 0x8762, 0x8767,
- 0x8768, 0x8769, 0x876A, 0x876B, 0x876C, 0x876D, 0x876F, 0x8771,
- 0x8772, 0x8773, 0x8775, 0x8777, 0x8779, 0x877A, 0x877F, 0x8780,
- 0x8781, 0x8786, 0x8787, 0x8789, 0x878A, 0x878C, 0x878E, 0x878F,
- 0x8790, 0x8791, 0x8792, 0x8794, 0x8795, 0x8796, 0x8798, 0x8799,
- 0x879A, 0x879B, 0x879C, 0x879D, 0x87A0, 0x87A1, 0x87A3, 0x87A4,
- 0x87A5, 0x87A6, 0x87A7, 0x87A9, 0x87AA, 0x87AE, 0x87B0, 0x87B1,
- 0x87B2, 0x87B4, 0x87B6, 0x87B7, 0x87B8, 0x87B9, 0x87BC, 0x87BE,
- 0x87BF, 0x87C1, 0x87C2, 0x87C3, 0x87C5, 0x87C7, 0x87C9, 0x87CC,
- 0x87CD, 0x87CF, 0x87D0, 0x87D4, 0x87D5, 0x87D6, 0x87D7, 0x87D8,
- 0x87D9, 0x87DA, 0x87DC, 0x87DD, 0x87DE, 0x87DF, 0x87E1, 0x87E2,
- 0x87E4, 0x87E6, 0x87E7, 0x87E8, 0x87E9, 0x87EB, 0x87ED, 0x87F0,
- 0x87F1, 0x87F3, 0x87F4, 0x87F5, 0x87F7, 0x87F8, 0x87FA, 0x87FC,
- 0x87FD, 0x87FF, 0x8800, 0x8801, 0x8802, 0x8804, 0x8807, 0x8808,
- 0x8809, 0x880B, 0x880C, 0x880D, 0x880E, 0x880F, 0x8812, 0x8814,
- 0x8817, 0x8818, 0x8819, 0x881A, 0x881C, 0x881D, 0x881E, 0x8820,
- 0x8824, 0x8825, 0x8826, 0x8827, 0x8828, 0x8829, 0x882A, 0x882B,
- 0x882C, 0x882D, 0x882E, 0x882F, 0x8830, 0x8833, 0x8834, 0x8835,
- 0x8837, 0x8838, 0x883A, 0x883D, 0x883E, 0x883F, 0x8841, 0x8842,
- 0x8843, 0x8847, 0x8848, 0x8849, 0x884B, 0x884E, 0x884F, 0x8850,
- 0x8851, 0x8852, 0x8855, 0x8856, 0x8858, 0x885A, 0x885C, 0x885E,
- 0x885F, 0x8860, 0x8866, 0x8867, 0x886A, 0x886D, 0x886F, 0x8871,
- 0x8873, 0x8874, 0x8875, 0x8876, 0x8878, 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, 0x88AC,
- 0x88AE, 0x88AF, 0x88B0, 0x88B2, 0x88B3, 0x88B4, 0x88B5, 0x88B6,
- 0x88B8, 0x88B9, 0x88BA, 0x88BB, 0x88BD, 0x88BE, 0x88BF, 0x88C0,
- 0x88C3, 0x88C4, 0x88C7, 0x88C8, 0x88CB, 0x88CC, 0x88CD, 0x88D0,
- 0x88D1, 0x88D3, 0x88D6, 0x88D7, 0x88DA, 0x88DB, 0x88DE, 0x88E0,
- 0x88E1, 0x88E6, 0x88E7, 0x88E9, 0x88EA, 0x88EB, 0x88EC, 0x88ED,
- 0x88EE, 0x88EF, 0x88F2, 0x88F5, 0x88F6, 0x88F7, 0x88FA, 0x88FB,
- 0x88FF, 0x8900, 0x8901, 0x8903, 0x8904, 0x8905, 0x8906, 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, 0x8935, 0x8937, 0x8939,
- 0x893A, 0x893C, 0x893D, 0x893E, 0x893F, 0x8940, 0x8942, 0x8943,
- 0x8945, 0x8946, 0x8948, 0x8949, 0x894A, 0x894B, 0x894C, 0x894D,
- 0x894E, 0x894F, 0x8950, 0x8951, 0x8952, 0x8953, 0x8954, 0x8955,
- 0x8957, 0x8958, 0x8959, 0x895A, 0x895B, 0x895C, 0x8961, 0x8962,
- 0x8963, 0x8965, 0x8967, 0x8968, 0x8969, 0x896B, 0x896D, 0x896E,
- 0x8970, 0x8971, 0x8973, 0x8974, 0x8975, 0x8976, 0x8977, 0x8978,
- 0x8979, 0x897A, 0x897C, 0x897D, 0x897E, 0x8980, 0x8982, 0x8984,
- 0x8985, 0x8987, 0x8988, 0x8989, 0x898A, 0x898C, 0x898D, 0x898E,
- 0x8990, 0x8991, 0x8992, 0x8994, 0x8995, 0x8997, 0x8999, 0x899A,
- 0x899B, 0x899C, 0x899D, 0x899E, 0x899F, 0x89A0, 0x89A2, 0x89A3,
- 0x89A4, 0x89A5, 0x89A7, 0x89A8, 0x89A9, 0x89AB, 0x89AD, 0x89AE,
- 0x89B0, 0x89B1, 0x89B3, 0x89B4, 0x89B5, 0x89B6, 0x89B8, 0x89B9,
- 0x89BB, 0x89BC, 0x89BE, 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, 0x89F5, 0x89F7, 0x89F9, 0x89FA,
- 0x89FB, 0x89FC, 0x89FD, 0x89FE, 0x89FF, 0x8A04, 0x8A05, 0x8A06,
- 0x8A09, 0x8A0B, 0x8A0D, 0x8A0F, 0x8A11, 0x8A12, 0x8A14, 0x8A17,
- 0x8A19, 0x8A1A, 0x8A1C, 0x8A1E, 0x8A20, 0x8A21, 0x8A22, 0x8A24,
- 0x8A26, 0x8A27, 0x8A28, 0x8A29, 0x8A2B, 0x8A2C, 0x8A2E, 0x8A2F,
- 0x8A30, 0x8A32, 0x8A33, 0x8A35, 0x8A37, 0x8A38, 0x8A39, 0x8A3B,
- 0x8A3C, 0x8A3D, 0x8A3F, 0x8A40, 0x8A42, 0x8A43, 0x8A44, 0x8A45,
- 0x8A47, 0x8A49, 0x8A4A, 0x8A4B, 0x8A4C, 0x8A4D, 0x8A4F, 0x8A51,
- 0x8A53, 0x8A56, 0x8A57, 0x8A59, 0x8A5A, 0x8A5C, 0x8A5D, 0x8A5F,
- 0x8A60, 0x8A64, 0x8A65, 0x8A67, 0x8A68, 0x8A6A, 0x8A6F, 0x8A74,
- 0x8A76, 0x8A77, 0x8A78, 0x8A7A, 0x8A7B, 0x8A7D, 0x8A7E, 0x8A80,
- 0x8A81, 0x8A82, 0x8A83, 0x8A88, 0x8A8B, 0x8A8C, 0x8A8E, 0x8A8F,
- 0x8A90, 0x8A94, 0x8A96, 0x8A97, 0x8A99, 0x8A9B, 0x8A9C, 0x8A9D,
- 0x8A9F, 0x8AA2, 0x8AA7, 0x8AA9, 0x8AAA, 0x8AAB, 0x8AAD, 0x8AAE,
- 0x8AAF, 0x8AB1, 0x8AB3, 0x8AB4, 0x8AB5, 0x8AB7, 0x8AB8, 0x8ABA,
- 0x8ABB, 0x8ABD, 0x8ABE, 0x8AC0, 0x8AC1, 0x8AC3, 0x8AC5, 0x8AC6,
- 0x8AC8, 0x8ACA, 0x8ACC, 0x8ACE, 0x8AD0, 0x8AD3, 0x8AD4, 0x8AD5,
- 0x8AD8, 0x8AD9, 0x8ADA, 0x8ADD, 0x8ADF, 0x8AE0, 0x8AE1, 0x8AE3,
- 0x8AE5, 0x8AE8, 0x8AE9, 0x8AEA, 0x8AEC, 0x8AEF, 0x8AF0, 0x8AF2,
- 0x8AF4, 0x8AF5, 0x8AF9, 0x8AFB, 0x8AFD, 0x8AFF, 0x8B03, 0x8B06,
- 0x8B08, 0x8B09, 0x8B0B, 0x8B0C, 0x8B0D, 0x8B0F, 0x8B11, 0x8B12,
- 0x8B13, 0x8B15, 0x8B18, 0x8B1C, 0x8B1E, 0x8B1F, 0x8B20, 0x8B22,
- 0x8B23, 0x8B24, 0x8B25, 0x8B27, 0x8B29, 0x8B2A, 0x8B2E, 0x8B2F,
- 0x8B30, 0x8B31, 0x8B32, 0x8B34, 0x8B35, 0x8B36, 0x8B37, 0x8B38,
- 0x8B3A, 0x8B3B, 0x8B3C, 0x8B3D, 0x8B3F, 0x8B40, 0x8B41, 0x8B42,
- 0x8B43, 0x8B44, 0x8B45, 0x8B46, 0x8B47, 0x8B48, 0x8B4A, 0x8B4B,
- 0x8B4C, 0x8B4D, 0x8B50, 0x8B51, 0x8B52, 0x8B53, 0x8B54, 0x8B55,
- 0x8B57, 0x8B5B, 0x8B5D, 0x8B5E, 0x8B5F, 0x8B60, 0x8B61, 0x8B62,
- 0x8B63, 0x8B64, 0x8B65, 0x8B67, 0x8B68, 0x8B69, 0x8B6A, 0x8B6D,
- 0x8B6E, 0x8B71, 0x8B72, 0x8B73, 0x8B75, 0x8B76, 0x8B78, 0x8B79,
- 0x8B7A, 0x8B7B, 0x8B7C, 0x8B7E, 0x8B7F, 0x8B81, 0x8B82, 0x8B83,
- 0x8B84, 0x8B85, 0x8B86, 0x8B87, 0x8B88, 0x8B89, 0x8B8B, 0x8B8C,
- 0x8B8D, 0x8B8F, 0x8B90, 0x8B91, 0x8B94, 0x8B97, 0x8B98, 0x8B99,
- 0x8B9A, 0x8B9B, 0x8B9D, 0x8B9F, 0x8BAC, 0x8BB1, 0x8BBB, 0x8BC7,
- 0x8BD0, 0x8BEA, 0x8C09, 0x8C1E, 0x8C38, 0x8C39, 0x8C3A, 0x8C3B,
- 0x8C3C, 0x8C3D, 0x8C3E, 0x8C3F, 0x8C40, 0x8C42, 0x8C43, 0x8C44,
- 0x8C45, 0x8C4A, 0x8C4B, 0x8C4D, 0x8C4E, 0x8C4F, 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, 0x8C9F, 0x8CA3, 0x8CA4, 0x8CA5, 0x8CA6, 0x8CAD, 0x8CAE,
- 0x8CB1, 0x8CB5, 0x8CB9, 0x8CBE, 0x8CC6, 0x8CC9, 0x8CCB, 0x8CCC,
- 0x8CCD, 0x8CCE, 0x8CCF, 0x8CD0, 0x8CD4, 0x8CD6, 0x8CD7, 0x8CD8,
- 0x8CD9, 0x8CDB, 0x8CDD, 0x8CDF, 0x8CE5, 0x8CE8, 0x8CE9, 0x8CEE,
- 0x8CEF, 0x8CF0, 0x8CF1, 0x8CF2, 0x8CF3, 0x8CF5, 0x8CF6, 0x8CF7,
- 0x8CF8, 0x8CF9, 0x8CFF, 0x8D00, 0x8D01, 0x8D02, 0x8D03, 0x8D06,
- 0x8D07, 0x8D09, 0x8D0C, 0x8D0E, 0x8D11, 0x8D12, 0x8D13, 0x8D14,
- 0x8D15, 0x8D17, 0x8D18, 0x8D19, 0x8D1A, 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, 0x8D96, 0x8D97, 0x8D98, 0x8D9A, 0x8D9B, 0x8D9C, 0x8D9D,
- 0x8D9E, 0x8DA0, 0x8DA1, 0x8DA2, 0x8DA4, 0x8DA5, 0x8DA6, 0x8DA7,
- 0x8DA9, 0x8DAA, 0x8DAB, 0x8DAC, 0x8DAD, 0x8DAE, 0x8DAF, 0x8DB0,
- 0x8DB6, 0x8DB7, 0x8DB9, 0x8DBB, 0x8DBD, 0x8DC0, 0x8DC1, 0x8DC2,
- 0x8DC5, 0x8DC7, 0x8DC8, 0x8DC9, 0x8DCA, 0x8DCD, 0x8DD0, 0x8DD2,
- 0x8DD3, 0x8DD4, 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, 0x8E11, 0x8E12, 0x8E13, 0x8E15, 0x8E16, 0x8E17,
- 0x8E18, 0x8E19, 0x8E1A, 0x8E1B, 0x8E1C, 0x8E20, 0x8E21, 0x8E24,
- 0x8E25, 0x8E26, 0x8E27, 0x8E28, 0x8E2B, 0x8E2D, 0x8E30, 0x8E32,
- 0x8E33, 0x8E36, 0x8E37, 0x8E38, 0x8E3B, 0x8E3C, 0x8E3E, 0x8E3F,
- 0x8E43, 0x8E45, 0x8E46, 0x8E4D, 0x8E4E, 0x8E4F, 0x8E50, 0x8E53,
- 0x8E54, 0x8E56, 0x8E57, 0x8E58, 0x8E5A, 0x8E5B, 0x8E5C, 0x8E5D,
- 0x8E5E, 0x8E5F, 0x8E60, 0x8E61, 0x8E62, 0x8E64, 0x8E65, 0x8E67,
- 0x8E68, 0x8E6A, 0x8E6B, 0x8E6E, 0x8E71, 0x8E73, 0x8E75, 0x8E77,
- 0x8E78, 0x8E79, 0x8E7B, 0x8E7D, 0x8E7E, 0x8E80, 0x8E82, 0x8E83,
- 0x8E84, 0x8E86, 0x8E88, 0x8E8C, 0x8E8E, 0x8E95, 0x8E96, 0x8E97,
- 0x8E98, 0x8E99, 0x8E9B, 0x8E9D, 0x8E9F, 0x8EA0, 0x8EA2, 0x8EA3,
- 0x8EA4, 0x8EA7, 0x8EA8, 0x8EA9, 0x8EAD, 0x8EAE, 0x8EB0, 0x8EB1,
- 0x8EB3, 0x8EB4, 0x8EB5, 0x8EB6, 0x8EB7, 0x8EB8, 0x8EB9, 0x8EBB,
- 0x8EBC, 0x8EBD, 0x8EBE, 0x8EBF, 0x8EC1, 0x8EC2, 0x8EC3, 0x8EC4,
- 0x8EC5, 0x8EC6, 0x8EC7, 0x8EC8, 0x8EC9, 0x8ECF, 0x8ED0, 0x8ED1,
- 0x8ED3, 0x8ED5, 0x8ED6, 0x8ED7, 0x8ED8, 0x8ED9, 0x8EDA, 0x8EDC,
- 0x8EDD, 0x8EDE, 0x8EE0, 0x8EE1, 0x8EE2, 0x8EE3, 0x8EE5, 0x8EE6,
- 0x8EE7, 0x8EE8, 0x8EE9, 0x8EEA, 0x8EEC, 0x8EED, 0x8EEE, 0x8EEF,
- 0x8EF0, 0x8EF1, 0x8EF3, 0x8EF4, 0x8EF5, 0x8EF6, 0x8EF7, 0x8EFD,
- 0x8EFF, 0x8F00, 0x8F01, 0x8F02, 0x8F04, 0x8F06, 0x8F08, 0x8F0B,
- 0x8F0C, 0x8F0D, 0x8F0E, 0x8F0F, 0x8F10, 0x8F11, 0x8F13, 0x8F16,
- 0x8F17, 0x8F18, 0x8F19, 0x8F1A, 0x8F20, 0x8F21, 0x8F22, 0x8F23,
- 0x8F24, 0x8F27, 0x8F28, 0x8F2B, 0x8F2C, 0x8F2D, 0x8F2E, 0x8F30,
- 0x8F31, 0x8F32, 0x8F34, 0x8F35, 0x8F36, 0x8F37, 0x8F39, 0x8F3A,
- 0x8F3C, 0x8F3D, 0x8F40, 0x8F41, 0x8F43, 0x8F47, 0x8F48, 0x8F4A,
- 0x8F4B, 0x8F4C, 0x8F4F, 0x8F50, 0x8F51, 0x8F52, 0x8F53, 0x8F55,
- 0x8F56, 0x8F57, 0x8F58, 0x8F59, 0x8F5A, 0x8F5B, 0x8F5C, 0x8F5D,
- 0x8F5E, 0x8F60, 0x8F63, 0x8F65, 0x8F6A, 0x8F80, 0x8F8C, 0x8F92,
- 0x8F9D, 0x8FA0, 0x8FA1, 0x8FA2, 0x8FA4, 0x8FA5, 0x8FA7, 0x8FAA,
- 0x8FAC, 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, 0x8FF5,
- 0x8FF6, 0x8FFA, 0x8FFB, 0x8FFC, 0x8FFE, 0x8FFF, 0x9007, 0x9008,
- 0x900C, 0x900E, 0x9013, 0x9018, 0x901C, 0x9024, 0x9025, 0x9027,
- 0x9028, 0x9029, 0x902A, 0x902B, 0x902C, 0x9030, 0x9031, 0x9033,
- 0x9034, 0x9037, 0x9039, 0x903A, 0x903D, 0x903F, 0x9040, 0x9043,
- 0x9045, 0x9046, 0x9048, 0x9049, 0x904A, 0x904C, 0x9056, 0x9059,
- 0x905A, 0x905D, 0x905F, 0x9061, 0x9064, 0x9066, 0x9067, 0x906A,
- 0x906B, 0x906C, 0x906F, 0x9070, 0x9071, 0x9073, 0x9076, 0x9079,
- 0x907B, 0x907E, 0x9085, 0x9086, 0x9089, 0x908C, 0x908D, 0x908E,
- 0x9092, 0x9094, 0x9096, 0x9098, 0x909A, 0x909C, 0x909E, 0x909F,
- 0x90A0, 0x90A4, 0x90A5, 0x90A7, 0x90A8, 0x90A9, 0x90AB, 0x90AD,
- 0x90B2, 0x90B7, 0x90BC, 0x90BD, 0x90BF, 0x90C0, 0x90C2, 0x90C3,
- 0x90C6, 0x90C8, 0x90C9, 0x90CB, 0x90CC, 0x90CD, 0x90D2, 0x90D4,
- 0x90D5, 0x90D6, 0x90D8, 0x90D9, 0x90DA, 0x90DE, 0x90E0, 0x90E3,
- 0x90E4, 0x90E5, 0x90E9, 0x90EA, 0x90EC, 0x90EE, 0x90F0, 0x90F1,
- 0x90F2, 0x90F3, 0x90F6, 0x90F7, 0x90F9, 0x90FA, 0x90FB, 0x90FC,
- 0x90FF, 0x9100, 0x9101, 0x9103, 0x9105, 0x9107, 0x9108, 0x910A,
- 0x910B, 0x910C, 0x910D, 0x910E, 0x910F, 0x9110, 0x9111, 0x9113,
- 0x9115, 0x9117, 0x9118, 0x911A, 0x911B, 0x911C, 0x911D, 0x911F,
- 0x9120, 0x9121, 0x9124, 0x9125, 0x9126, 0x9128, 0x9129, 0x912A,
- 0x912B, 0x912C, 0x912E, 0x9133, 0x9135, 0x9137, 0x9138, 0x913B,
- 0x913C, 0x913D, 0x913E, 0x913F, 0x9140, 0x9141, 0x9142, 0x9144,
- 0x9145, 0x9147, 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, 0x9197, 0x9198, 0x9199, 0x919D, 0x919E,
- 0x919F, 0x91A0, 0x91A1, 0x91A4, 0x91A5, 0x91A6, 0x91A7, 0x91A8,
- 0x91A9, 0x91B0, 0x91B1, 0x91B2, 0x91B3, 0x91B6, 0x91B7, 0x91B8,
- 0x91B9, 0x91BB, 0x91BC, 0x91BD, 0x91BE, 0x91BF, 0x91C2, 0x91C4,
- 0x91C6, 0x91C8, 0x91D0, 0x91D6, 0x91DA, 0x91DB, 0x91DE, 0x91DF,
- 0x91E0, 0x91E1, 0x91E2, 0x91E5, 0x91E6, 0x91E8, 0x91EA, 0x91EB,
- 0x91EC, 0x91ED, 0x91EE, 0x91EF, 0x91F0, 0x91F1, 0x91F2, 0x91F3,
- 0x91F4, 0x91F6, 0x91F8, 0x91FB, 0x91FC, 0x91FD, 0x91FE, 0x91FF,
- 0x9202, 0x9203, 0x9205, 0x9206, 0x9207, 0x920A, 0x920B, 0x920C,
- 0x920F, 0x9212, 0x9213, 0x9216, 0x9217, 0x9218, 0x9219, 0x921A,
- 0x921B, 0x921C, 0x921D, 0x921F, 0x9220, 0x9221, 0x9222, 0x9224,
- 0x9228, 0x9229, 0x922A, 0x922B, 0x922C, 0x922D, 0x922F, 0x9231,
- 0x9232, 0x9235, 0x9236, 0x923B, 0x923C, 0x9241, 0x9242, 0x9243,
- 0x9244, 0x9246, 0x9247, 0x924A, 0x924B, 0x924C, 0x924E, 0x924F,
- 0x9250, 0x9252, 0x9253, 0x9254, 0x9256, 0x9258, 0x9259, 0x925C,
- 0x925D, 0x925F, 0x9260, 0x9261, 0x9263, 0x9264, 0x9265, 0x9267,
- 0x9268, 0x9269, 0x926A, 0x926B, 0x926E, 0x926F, 0x9270, 0x9271,
- 0x9272, 0x9273, 0x9275, 0x9276, 0x9277, 0x9279, 0x927C, 0x927D,
- 0x927E, 0x9281, 0x9282, 0x9284, 0x9286, 0x9287, 0x9288, 0x9289,
- 0x928A, 0x928B, 0x928C, 0x928D, 0x928F, 0x9290, 0x9292, 0x9294,
- 0x9295, 0x9297, 0x9299, 0x929B, 0x929D, 0x929E, 0x929F, 0x92A1,
- 0x92A2, 0x92A4, 0x92A7, 0x92AD, 0x92AF, 0x92B0, 0x92B2, 0x92B3,
- 0x92B4, 0x92B5, 0x92B6, 0x92B8, 0x92BA, 0x92BD, 0x92BE, 0x92BF,
- 0x92C0, 0x92C2, 0x92C4, 0x92C6, 0x92C9, 0x92CA, 0x92CB, 0x92CD,
- 0x92CE, 0x92D0, 0x92D1, 0x92D3, 0x92D4, 0x92D5, 0x92D6, 0x92D7,
- 0x92D8, 0x92D9, 0x92DA, 0x92DB, 0x92DC, 0x92DE, 0x92E0, 0x92E1,
- 0x92E2, 0x92E7, 0x92E9, 0x92EB, 0x92EC, 0x92F2, 0x92F3, 0x92F4,
- 0x92F5, 0x92F7, 0x92F9, 0x92FA, 0x92FB, 0x92FD, 0x92FE, 0x92FF,
- 0x9300, 0x9302, 0x9303, 0x9304, 0x9305, 0x9309, 0x930A, 0x930B,
- 0x930C, 0x930D, 0x930E, 0x930F, 0x9311, 0x9313, 0x9314, 0x9316,
- 0x9317, 0x931C, 0x931D, 0x931E, 0x9321, 0x9323, 0x9324, 0x9325,
- 0x9327, 0x9329, 0x932A, 0x932C, 0x932D, 0x9330, 0x9331, 0x9334,
- 0x9335, 0x9337, 0x9339, 0x933A, 0x933B, 0x933C, 0x933D, 0x933F,
- 0x9342, 0x9344, 0x9345, 0x9348, 0x9349, 0x934A, 0x934C, 0x934E,
- 0x934F, 0x9350, 0x9351, 0x9352, 0x9353, 0x9355, 0x9356, 0x9357,
- 0x9359, 0x935A, 0x935C, 0x935D, 0x935E, 0x935F, 0x9360, 0x9361,
- 0x9362, 0x9363, 0x9366, 0x9367, 0x9368, 0x936B, 0x936D, 0x936E,
- 0x936F, 0x9371, 0x9372, 0x9373, 0x9374, 0x9377, 0x9378, 0x9379,
- 0x937B, 0x937C, 0x937D, 0x937F, 0x9380, 0x9381, 0x9383, 0x9385,
- 0x9386, 0x9388, 0x9389, 0x938B, 0x938C, 0x938D, 0x938E, 0x9390,
- 0x9391, 0x9392, 0x9393, 0x9394, 0x9395, 0x9397, 0x9399, 0x939A,
- 0x939B, 0x939C, 0x939D, 0x939E, 0x939F, 0x93A0, 0x93A1, 0x93A4,
- 0x93A5, 0x93A8, 0x93AB, 0x93AD, 0x93AF, 0x93B1, 0x93B2, 0x93B4,
- 0x93B6, 0x93B7, 0x93B9, 0x93BA, 0x93BB, 0x93BC, 0x93BD, 0x93BE,
- 0x93C0, 0x93C1, 0x93C2, 0x93C4, 0x93C5, 0x93C6, 0x93C9, 0x93CB,
- 0x93CE, 0x93CF, 0x93D0, 0x93D2, 0x93D3, 0x93D4, 0x93D5, 0x93D9,
- 0x93DA, 0x93DB, 0x93E0, 0x93E3, 0x93E5, 0x93E6, 0x93E7, 0x93E9,
- 0x93EA, 0x93EB, 0x93EC, 0x93ED, 0x93EE, 0x93EF, 0x93F0, 0x93F1,
- 0x93F2, 0x93F3, 0x93F4, 0x93F6, 0x93F8, 0x93FA, 0x93FB, 0x93FC,
- 0x93FD, 0x93FE, 0x93FF, 0x9400, 0x9401, 0x9402, 0x9404, 0x9405,
- 0x9406, 0x9407, 0x9408, 0x9409, 0x940A, 0x940C, 0x940D, 0x940E,
- 0x940F, 0x9411, 0x9415, 0x9416, 0x9417, 0x941A, 0x941B, 0x941C,
- 0x941E, 0x941F, 0x9421, 0x9422, 0x9423, 0x9424, 0x9425, 0x9429,
- 0x942A, 0x942B, 0x942C, 0x942D, 0x942F, 0x9430, 0x9431, 0x9434,
- 0x9436, 0x9437, 0x9439, 0x943B, 0x943C, 0x943D, 0x9440, 0x9441,
- 0x9442, 0x9443, 0x9445, 0x9446, 0x9447, 0x9448, 0x9449, 0x944B,
- 0x944D, 0x944E, 0x944F, 0x9450, 0x9451, 0x9453, 0x9455, 0x9456,
- 0x9457, 0x9458, 0x9459, 0x945A, 0x945B, 0x945C, 0x945D, 0x945E,
- 0x945F, 0x9461, 0x9462, 0x9464, 0x9466, 0x9467, 0x9468, 0x9469,
- 0x946A, 0x946C, 0x946E, 0x946F, 0x9471, 0x9473, 0x9474, 0x9475,
- 0x9476, 0x9478, 0x947A, 0x947B, 0x9480, 0x9481, 0x9482, 0x9483,
- 0x9484, 0x9491, 0x9496, 0x9498, 0x94C7, 0x94CF, 0x94D3, 0x94D4,
- 0x94DA, 0x94E6, 0x94FB, 0x951C, 0x9520, 0x9527, 0x9533, 0x953D,
- 0x9543, 0x9548, 0x954B, 0x9555, 0x955A, 0x9560, 0x956E, 0x9574,
- 0x9575, 0x9578, 0x9579, 0x957A, 0x957B, 0x957C, 0x957D, 0x957E,
- 0x9581, 0x9584, 0x9585, 0x9587, 0x9588, 0x958A, 0x958D, 0x9590,
- 0x9592, 0x9595, 0x9596, 0x9597, 0x9599, 0x959A, 0x959B, 0x959C,
- 0x959D, 0x959E, 0x959F, 0x95A0, 0x95A2, 0x95A6, 0x95A7, 0x95AA,
- 0x95AE, 0x95AF, 0x95B0, 0x95B1, 0x95B3, 0x95B4, 0x95B5, 0x95B7,
- 0x95B8, 0x95BA, 0x95C0, 0x95C1, 0x95C2, 0x95C4, 0x95C5, 0x95C7,
- 0x95C9, 0x95CD, 0x95CE, 0x95CF, 0x95D1, 0x95D2, 0x95D3, 0x95D7,
- 0x95D8, 0x95D9, 0x95DA, 0x95DB, 0x95DD, 0x95DF, 0x95E0, 0x95E3,
- 0x95E4, 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, 0x9659, 0x965A,
- 0x965C, 0x965E, 0x9660, 0x9665, 0x9666, 0x966B, 0x966D, 0x966E,
- 0x966F, 0x9671, 0x9679, 0x967A, 0x967B, 0x967C, 0x967E, 0x967F,
- 0x9680, 0x9681, 0x9682, 0x9683, 0x9684, 0x9687, 0x9689, 0x968C,
- 0x9691, 0x9692, 0x9693, 0x9696, 0x969A, 0x969D, 0x969E, 0x969F,
- 0x96A0, 0x96A1, 0x96A2, 0x96A3, 0x96A4, 0x96A5, 0x96A6, 0x96A9,
- 0x96AB, 0x96AC, 0x96AD, 0x96AE, 0x96AF, 0x96B2, 0x96B5, 0x96B7,
- 0x96BA, 0x96BF, 0x96C2, 0x96C3, 0x96C8, 0x96CA, 0x96CB, 0x96D0,
- 0x96D1, 0x96D3, 0x96D4, 0x96D7, 0x96D8, 0x96DA, 0x96DD, 0x96DE,
- 0x96DF, 0x96E1, 0x96E4, 0x96E5, 0x96E6, 0x96E7, 0x96EB, 0x96EC,
- 0x96ED, 0x96EE, 0x96F0, 0x96F1, 0x96F4, 0x96F5, 0x96F8, 0x96FA,
- 0x96FC, 0x96FD, 0x96FF, 0x9702, 0x9703, 0x9705, 0x970A, 0x970B,
- 0x970C, 0x9710, 0x9711, 0x9712, 0x9714, 0x9715, 0x9717, 0x9718,
- 0x9719, 0x971A, 0x971B, 0x971D, 0x971F, 0x9720, 0x9721, 0x9722,
- 0x9723, 0x9724, 0x9725, 0x9726, 0x9728, 0x9729, 0x972B, 0x972C,
- 0x972E, 0x972F, 0x9731, 0x9733, 0x9734, 0x9735, 0x9736, 0x9737,
- 0x973A, 0x973B, 0x973C, 0x973F, 0x9740, 0x9741, 0x9743, 0x9745,
- 0x9746, 0x9747, 0x9749, 0x974A, 0x974B, 0x974C, 0x974D, 0x974E,
- 0x974F, 0x9750, 0x9751, 0x9754, 0x9755, 0x9757, 0x9758, 0x975C,
- 0x975D, 0x975F, 0x9763, 0x9764, 0x9766, 0x9767, 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, 0x9790, 0x9793, 0x9795, 0x9796,
- 0x9797, 0x9799, 0x979A, 0x979B, 0x979C, 0x979D, 0x979E, 0x979F,
- 0x97A1, 0x97A2, 0x97A4, 0x97A5, 0x97A7, 0x97A8, 0x97A9, 0x97AA,
- 0x97AC, 0x97AE, 0x97B0, 0x97B1, 0x97B3, 0x97B5, 0x97B6, 0x97B7,
- 0x97B8, 0x97B9, 0x97BA, 0x97BB, 0x97BC, 0x97BE, 0x97BF, 0x97C0,
- 0x97C1, 0x97C2, 0x97C4, 0x97C5, 0x97C7, 0x97C8, 0x97CA, 0x97CD,
- 0x97CE, 0x97CF, 0x97D0, 0x97D1, 0x97D2, 0x97D4, 0x97D5, 0x97D6,
- 0x97D7, 0x97D8, 0x97DA, 0x97DB, 0x97DD, 0x97DF, 0x97E0, 0x97E1,
- 0x97E2, 0x97E3, 0x97E4, 0x97E5, 0x97E8, 0x97EE, 0x97EF, 0x97F0,
- 0x97F1, 0x97F2, 0x97F4, 0x97F7, 0x97F8, 0x97F9, 0x97FA, 0x97FB,
- 0x97FC, 0x97FD, 0x97FE, 0x9800, 0x9804, 0x9809, 0x980B, 0x980D,
- 0x9814, 0x9815, 0x9816, 0x9819, 0x981A, 0x981B, 0x981D, 0x981E,
- 0x981F, 0x9820, 0x9822, 0x9823, 0x9825, 0x9827, 0x9828, 0x9829,
- 0x982A, 0x982B, 0x982C, 0x982E, 0x982F, 0x9831, 0x9832, 0x9833,
- 0x9834, 0x9835, 0x9836, 0x9839, 0x983A, 0x983C, 0x983E, 0x983F,
- 0x9840, 0x9841, 0x9842, 0x9843, 0x9844, 0x9845, 0x9847, 0x9848,
- 0x9849, 0x984A, 0x984B, 0x984F, 0x9850, 0x9851, 0x9852, 0x9855,
- 0x9856, 0x9857, 0x985A, 0x985C, 0x985D, 0x985F, 0x9860, 0x9861,
- 0x9863, 0x9864, 0x9866, 0x9868, 0x9869, 0x986A, 0x986D, 0x986E,
- 0x9872, 0x988B, 0x988E, 0x9892, 0x9895, 0x9899, 0x98A3, 0x98A9,
- 0x98AA, 0x98AB, 0x98AC, 0x98AD, 0x98B0, 0x98B2, 0x98B4, 0x98B5,
- 0x98B7, 0x98B8, 0x98B9, 0x98BA, 0x98BB, 0x98BD, 0x98BE, 0x98BF,
- 0x98C0, 0x98C1, 0x98C2, 0x98C3, 0x98C5, 0x98C7, 0x98C9, 0x98CA,
- 0x98CB, 0x98CC, 0x98CD, 0x98CF, 0x98D0, 0x98D4, 0x98D6, 0x98D7,
- 0x98DC, 0x98DD, 0x98E1, 0x98E3, 0x98E4, 0x98E5, 0x98E6, 0x98EC,
- 0x98EE, 0x98F0, 0x98F1, 0x98F3, 0x98F5, 0x98F6, 0x98F7, 0x98F8,
- 0x98F9, 0x98FA, 0x98FB, 0x98FF, 0x9900, 0x9901, 0x9902, 0x9904,
- 0x9906, 0x9907, 0x9908, 0x990B, 0x990E, 0x990F, 0x9914, 0x9915,
- 0x9916, 0x9917, 0x9919, 0x991A, 0x991C, 0x991D, 0x991F, 0x9920,
- 0x9922, 0x9923, 0x9924, 0x9925, 0x9926, 0x9927, 0x9929, 0x992A,
- 0x992B, 0x992C, 0x992D, 0x992F, 0x9930, 0x9931, 0x9932, 0x9934,
- 0x9935, 0x9936, 0x9938, 0x9939, 0x993A, 0x993B, 0x993D, 0x9940,
- 0x9941, 0x9942, 0x9944, 0x9946, 0x9947, 0x994D, 0x994E, 0x994F,
- 0x9950, 0x9953, 0x9956, 0x9958, 0x9959, 0x995A, 0x995B, 0x995D,
- 0x995F, 0x9960, 0x9961, 0x9964, 0x9966, 0x9973, 0x9978, 0x9979,
- 0x997B, 0x997E, 0x9982, 0x9983, 0x9989, 0x998C, 0x998E, 0x999A,
- 0x999B, 0x999C, 0x999D, 0x999E, 0x999F, 0x99A0, 0x99A1, 0x99A2,
- 0x99A3, 0x99A4, 0x99A6, 0x99A7, 0x99A9, 0x99AA, 0x99AB, 0x99AF,
- 0x99B0, 0x99B2, 0x99B5, 0x99B6, 0x99B7, 0x99B8, 0x99B9, 0x99BA,
- 0x99BB, 0x99BC, 0x99BD, 0x99BE, 0x99BF, 0x99C0, 0x99C2, 0x99C3,
- 0x99C4, 0x99C5, 0x99C6, 0x99C7, 0x99C8, 0x99C9, 0x99CA, 0x99CB,
- 0x99CC, 0x99CD, 0x99CE, 0x99CF, 0x99D3, 0x99D6, 0x99D7, 0x99DA,
- 0x99DC, 0x99DE, 0x99E0, 0x99E3, 0x99E4, 0x99E5, 0x99E6, 0x99E7,
- 0x99E8, 0x99E9, 0x99EA, 0x99EB, 0x99EC, 0x99EE, 0x99EF, 0x99F0,
- 0x99F2, 0x99F3, 0x99F4, 0x99F5, 0x99F6, 0x99F7, 0x99F8, 0x99F9,
- 0x99FA, 0x99FB, 0x99FC, 0x99FD, 0x99FE, 0x9A00, 0x9A02, 0x9A03,
- 0x9A04, 0x9A06, 0x9A07, 0x9A08, 0x9A09, 0x9A0A, 0x9A0B, 0x9A0C,
- 0x9A10, 0x9A11, 0x9A12, 0x9A13, 0x9A14, 0x9A15, 0x9A17, 0x9A18,
- 0x9A1A, 0x9A1B, 0x9A1C, 0x9A1D, 0x9A1E, 0x9A1F, 0x9A20, 0x9A21,
- 0x9A22, 0x9A23, 0x9A24, 0x9A25, 0x9A26, 0x9A27, 0x9A28, 0x9A29,
- 0x9A2A, 0x9A2C, 0x9A2F, 0x9A31, 0x9A32, 0x9A33, 0x9A34, 0x9A35,
- 0x9A39, 0x9A3A, 0x9A3B, 0x9A3C, 0x9A3D, 0x9A3F, 0x9A46, 0x9A47,
- 0x9A48, 0x9A49, 0x9A4B, 0x9A4C, 0x9A4E, 0x9A50, 0x9A51, 0x9A52,
- 0x9A53, 0x9A54, 0x9A56, 0x9A58, 0x9A59, 0x9A5C, 0x9A5D, 0x9A5E,
- 0x9A60, 0x9A61, 0x9A63, 0x9A66, 0x9A67, 0x9A68, 0x9A69, 0x9A6B,
- 0x9A72, 0x9A83, 0x9A89, 0x9A8D, 0x9A8E, 0x9A94, 0x9A95, 0x9A99,
- 0x9AA6, 0x9AA9, 0x9AAA, 0x9AAB, 0x9AAC, 0x9AAD, 0x9AAE, 0x9AB2,
- 0x9AB3, 0x9AB4, 0x9AB5, 0x9AB9, 0x9ABB, 0x9ABD, 0x9ABE, 0x9ABF,
- 0x9AC3, 0x9AC4, 0x9AC6, 0x9AC7, 0x9AC8, 0x9AC9, 0x9ACA, 0x9ACD,
- 0x9ACE, 0x9AD0, 0x9AD7, 0x9AD9, 0x9ADA, 0x9ADB, 0x9ADC, 0x9ADD,
- 0x9ADE, 0x9AE0, 0x9AE2, 0x9AE3, 0x9AE4, 0x9AE5, 0x9AE7, 0x9AE8,
- 0x9AE9, 0x9AEA, 0x9AEC, 0x9AF0, 0x9AF1, 0x9AF2, 0x9AF3, 0x9AF4,
- 0x9AF5, 0x9AF6, 0x9AF7, 0x9AF8, 0x9AFA, 0x9AFC, 0x9AFD, 0x9AFE,
- 0x9AFF, 0x9B00, 0x9B01, 0x9B02, 0x9B04, 0x9B05, 0x9B07, 0x9B09,
- 0x9B0A, 0x9B0B, 0x9B0C, 0x9B0E, 0x9B10, 0x9B11, 0x9B12, 0x9B14,
- 0x9B15, 0x9B16, 0x9B17, 0x9B18, 0x9B19, 0x9B1B, 0x9B1C, 0x9B1D,
- 0x9B1E, 0x9B20, 0x9B21, 0x9B24, 0x9B26, 0x9B28, 0x9B2A, 0x9B2B,
- 0x9B2C, 0x9B2D, 0x9B30, 0x9B33, 0x9B34, 0x9B35, 0x9B36, 0x9B37,
- 0x9B38, 0x9B39, 0x9B3A, 0x9B3D, 0x9B3E, 0x9B3F, 0x9B40, 0x9B46,
- 0x9B4A, 0x9B4B, 0x9B4C, 0x9B50, 0x9B52, 0x9B53, 0x9B55, 0x9B56,
- 0x9B57, 0x9B59, 0x9B5B, 0x9B5C, 0x9B5D, 0x9B5E, 0x9B5F, 0x9B60,
- 0x9B61, 0x9B62, 0x9B63, 0x9B64, 0x9B65, 0x9B66, 0x9B67, 0x9B68,
- 0x9B69, 0x9B6A, 0x9B6B, 0x9B6C, 0x9B6D, 0x9B6E, 0x9B70, 0x9B71,
- 0x9B72, 0x9B73, 0x9B75, 0x9B76, 0x9B78, 0x9B79, 0x9B7A, 0x9B7B,
- 0x9B7C, 0x9B7D, 0x9B7E, 0x9B7F, 0x9B80, 0x9B82, 0x9B84, 0x9B85,
- 0x9B86, 0x9B87, 0x9B88, 0x9B89, 0x9B8A, 0x9B8B, 0x9B8C, 0x9B8D,
- 0x9B8F, 0x9B93, 0x9B94, 0x9B95, 0x9B96, 0x9B97, 0x9B98, 0x9B99,
- 0x9B9B, 0x9B9C, 0x9B9F, 0x9BA0, 0x9BA1, 0x9BA2, 0x9BA3, 0x9BA4,
- 0x9BA5, 0x9BA6, 0x9BA7, 0x9BA8, 0x9BA9, 0x9BAC, 0x9BAF, 0x9BB0,
- 0x9BB1, 0x9BB2, 0x9BB3, 0x9BB4, 0x9BB5, 0x9BB6, 0x9BB7, 0x9BB8,
- 0x9BB9, 0x9BBA, 0x9BBB, 0x9BBC, 0x9BBD, 0x9BBE, 0x9BBF, 0x9BC2,
- 0x9BC3, 0x9BC4, 0x9BC5, 0x9BC6, 0x9BC8, 0x9BCB, 0x9BCC, 0x9BCD,
- 0x9BCE, 0x9BCF, 0x9BD0, 0x9BD1, 0x9BD2, 0x9BD3, 0x9BD5, 0x9BD7,
- 0x9BD8, 0x9BD9, 0x9BDA, 0x9BDC, 0x9BDE, 0x9BDF, 0x9BE0, 0x9BE3,
- 0x9BE5, 0x9BE6, 0x9BE9, 0x9BEC, 0x9BED, 0x9BEE, 0x9BEF, 0x9BF1,
- 0x9BF2, 0x9BF3, 0x9BF5, 0x9BF6, 0x9BF7, 0x9BF8, 0x9BF9, 0x9BFA,
- 0x9BFB, 0x9BFC, 0x9BFE, 0x9C00, 0x9C01, 0x9C02, 0x9C03, 0x9C04,
- 0x9C05, 0x9C06, 0x9C07, 0x9C0A, 0x9C0B, 0x9C0C, 0x9C0E, 0x9C0F,
- 0x9C11, 0x9C14, 0x9C15, 0x9C16, 0x9C17, 0x9C18, 0x9C19, 0x9C1A,
- 0x9C1B, 0x9C1C, 0x9C1D, 0x9C1E, 0x9C1F, 0x9C21, 0x9C22, 0x9C24,
- 0x9C26, 0x9C27, 0x9C2A, 0x9C2B, 0x9C2C, 0x9C2E, 0x9C2F, 0x9C30,
- 0x9C34, 0x9C36, 0x9C38, 0x9C3A, 0x9C3C, 0x9C3D, 0x9C3F, 0x9C40,
- 0x9C41, 0x9C42, 0x9C43, 0x9C44, 0x9C46, 0x9C47, 0x9C4A, 0x9C4B,
- 0x9C4C, 0x9C4D, 0x9C4E, 0x9C4F, 0x9C50, 0x9C51, 0x9C53, 0x9C55,
- 0x9C59, 0x9C5A, 0x9C5B, 0x9C5C, 0x9C5E, 0x9C60, 0x9C61, 0x9C62,
- 0x9C63, 0x9C64, 0x9C65, 0x9C66, 0x9C68, 0x9C69, 0x9C6A, 0x9C6B,
- 0x9C6C, 0x9C6E, 0x9C6F, 0x9C70, 0x9C71, 0x9C72, 0x9C73, 0x9C74,
- 0x9C75, 0x9C76, 0x9C77, 0x9C79, 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, 0x9CE3, 0x9CE4, 0x9CE6,
- 0x9CE7, 0x9CE8, 0x9CEA, 0x9CEB, 0x9CED, 0x9CEE, 0x9CEF, 0x9CF0,
- 0x9CF1, 0x9CF2, 0x9CF5, 0x9CF7, 0x9CF8, 0x9CF9, 0x9CFA, 0x9CFB,
- 0x9CFC, 0x9CFD, 0x9CFE, 0x9CFF, 0x9D00, 0x9D01, 0x9D02, 0x9D03,
- 0x9D04, 0x9D05, 0x9D08, 0x9D0A, 0x9D0B, 0x9D0C, 0x9D0D, 0x9D0E,
- 0x9D0F, 0x9D10, 0x9D11, 0x9D12, 0x9D13, 0x9D14, 0x9D16, 0x9D17,
- 0x9D18, 0x9D19, 0x9D1A, 0x9D1C, 0x9D1E, 0x9D20, 0x9D21, 0x9D22,
- 0x9D24, 0x9D25, 0x9D27, 0x9D29, 0x9D2A, 0x9D2B, 0x9D2C, 0x9D2D,
- 0x9D2E, 0x9D31, 0x9D32, 0x9D33, 0x9D34, 0x9D35, 0x9D36, 0x9D37,
- 0x9D38, 0x9D39, 0x9D3A, 0x9D3C, 0x9D3D, 0x9D3E, 0x9D40, 0x9D41,
- 0x9D43, 0x9D44, 0x9D45, 0x9D46, 0x9D47, 0x9D48, 0x9D49, 0x9D4A,
- 0x9D4B, 0x9D4C, 0x9D4D, 0x9D4E, 0x9D4F, 0x9D50, 0x9D54, 0x9D55,
- 0x9D56, 0x9D57, 0x9D58, 0x9D59, 0x9D5A, 0x9D5B, 0x9D5E, 0x9D5F,
- 0x9D62, 0x9D63, 0x9D64, 0x9D65, 0x9D66, 0x9D67, 0x9D68, 0x9D69,
- 0x9D6B, 0x9D6D, 0x9D6E, 0x9D70, 0x9D71, 0x9D73, 0x9D74, 0x9D75,
- 0x9D76, 0x9D77, 0x9D78, 0x9D79, 0x9D7A, 0x9D7B, 0x9D7C, 0x9D7D,
- 0x9D7E, 0x9D7F, 0x9D80, 0x9D81, 0x9D82, 0x9D83, 0x9D84, 0x9D85,
- 0x9D86, 0x9D88, 0x9D8A, 0x9D8B, 0x9D8C, 0x9D8D, 0x9D8E, 0x9D8F,
- 0x9D90, 0x9D91, 0x9D92, 0x9D94, 0x9D95, 0x9D96, 0x9D97, 0x9D99,
- 0x9D9B, 0x9D9C, 0x9D9D, 0x9D9E, 0x9D9F, 0x9DA0, 0x9DA1, 0x9DA2,
- 0x9DA3, 0x9DA4, 0x9DA6, 0x9DA7, 0x9DA8, 0x9DAA, 0x9DAB, 0x9DAC,
- 0x9DAD, 0x9DAE, 0x9DB0, 0x9DB1, 0x9DB2, 0x9DB3, 0x9DB5, 0x9DB6,
- 0x9DB7, 0x9DB8, 0x9DB9, 0x9DBA, 0x9DBD, 0x9DBE, 0x9DBF, 0x9DC1,
- 0x9DC3, 0x9DC5, 0x9DC6, 0x9DC7, 0x9DC8, 0x9DC9, 0x9DCA, 0x9DCB,
- 0x9DCC, 0x9DCD, 0x9DCE, 0x9DCF, 0x9DD0, 0x9DD1, 0x9DD2, 0x9DD4,
- 0x9DD5, 0x9DD6, 0x9DD8, 0x9DDB, 0x9DDC, 0x9DDD, 0x9DDE, 0x9DDF,
- 0x9DE0, 0x9DE1, 0x9DE2, 0x9DE3, 0x9DE4, 0x9DE7, 0x9DE8, 0x9DE9,
- 0x9DEA, 0x9DEB, 0x9DEC, 0x9DED, 0x9DEE, 0x9DF0, 0x9DF1, 0x9DF4,
- 0x9DF5, 0x9DF6, 0x9DF7, 0x9DFB, 0x9DFC, 0x9DFD, 0x9DFE, 0x9DFF,
- 0x9E00, 0x9E01, 0x9E02, 0x9E03, 0x9E04, 0x9E05, 0x9E06, 0x9E07,
- 0x9E08, 0x9E09, 0x9E0A, 0x9E0B, 0x9E0D, 0x9E0E, 0x9E0F, 0x9E10,
- 0x9E11, 0x9E12, 0x9E13, 0x9E14, 0x9E16, 0x9E17, 0x9E18, 0x9E19,
- 0x9E1C, 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, 0x9E76, 0x9E77, 0x9E78, 0x9E7B, 0x9E80, 0x9E81,
- 0x9E83, 0x9E84, 0x9E85, 0x9E86, 0x9E89, 0x9E8A, 0x9E8C, 0x9E8D,
- 0x9E8E, 0x9E8F, 0x9E90, 0x9E91, 0x9E94, 0x9E95, 0x9E96, 0x9E98,
- 0x9E99, 0x9E9A, 0x9E9B, 0x9E9C, 0x9E9E, 0x9EA0, 0x9EA1, 0x9EA2,
- 0x9EA3, 0x9EA4, 0x9EA7, 0x9EA8, 0x9EAA, 0x9EAB, 0x9EAC, 0x9EAD,
- 0x9EAE, 0x9EB0, 0x9EB1, 0x9EB2, 0x9EB3, 0x9EB6, 0x9EB7, 0x9EB9,
- 0x9EBA, 0x9EBC, 0x9EBF, 0x9EC0, 0x9EC1, 0x9EC2, 0x9EC3, 0x9EC5,
- 0x9EC6, 0x9EC7, 0x9EC8, 0x9ECA, 0x9ECB, 0x9ED0, 0x9ED2, 0x9ED3,
- 0x9ED5, 0x9ED6, 0x9ED7, 0x9ED9, 0x9EDA, 0x9EE1, 0x9EE3, 0x9EE4,
- 0x9EE6, 0x9EEB, 0x9EEC, 0x9EED, 0x9EEE, 0x9EF0, 0x9EF1, 0x9EF3,
- 0x9EF5, 0x9EF6, 0x9EF8, 0x9EFA, 0x9F00, 0x9F01, 0x9F02, 0x9F03,
- 0x9F04, 0x9F05, 0x9F06, 0x9F07, 0x9F08, 0x9F0A, 0x9F0C, 0x9F0F,
- 0x9F11, 0x9F12, 0x9F14, 0x9F16, 0x9F18, 0x9F1A, 0x9F1B, 0x9F1C,
- 0x9F1D, 0x9F1E, 0x9F1F, 0x9F21, 0x9F23, 0x9F24, 0x9F25, 0x9F26,
- 0x9F27, 0x9F28, 0x9F29, 0x9F2A, 0x9F2B, 0x9F2D, 0x9F2E, 0x9F30,
- 0x9F31, 0x9F32, 0x9F33, 0x9F34, 0x9F35, 0x9F36, 0x9F38, 0x9F3A,
- 0x9F3C, 0x9F3F, 0x9F40, 0x9F41, 0x9F42, 0x9F43, 0x9F45, 0x9F46,
- 0x9F47, 0x9F48, 0x9F49, 0x9F4C, 0x9F4D, 0x9F4E, 0x9F53, 0x9F55,
- 0x9F56, 0x9F57, 0x9F58, 0x9F5A, 0x9F5B, 0x9F5D, 0x9F5E, 0x9F62,
- 0x9F64, 0x9F65, 0x9F67, 0x9F68, 0x9F69, 0x9F6B, 0x9F6D, 0x9F6E,
- 0x9F6F, 0x9F70, 0x9F71, 0x9F73, 0x9F74, 0x9F75, 0x9F76, 0x9F78,
- 0x9F79, 0x9F7A, 0x9F7B, 0x9F7C, 0x9F7D, 0x9F7E, 0x9F81, 0x9F82,
- 0x9F8E, 0x9F8F, 0x9F91, 0x9F92, 0x9F93, 0x9F96, 0x9F97, 0x9F98,
- 0x9F9D, 0x9F9E, 0x9FA1, 0x9FA2, 0x9FA3, 0x9FA4, 0x9FA5, 0xF92C,
- 0xFA0D, 0xFA0E, 0xFA0F, 0xFA11, 0xFA13, 0xFA14, 0xFA18, 0xFA1F,
- 0xFA20, 0xFA21, 0xFA23, 0xFA24, 0xFA27, 0xFA28, 0xFA29, 0x2E81,
- 0x0000, 0x0000, 0x0000, 0x2E84, 0x3473, 0x3447, 0x2E88, 0x2E8B,
- 0x9FB4, 0x359E, 0x361A, 0x360E, 0x2E8C, 0x2E97, 0x396E, 0x3918,
- 0x9FB5, 0x39CF, 0x39DF, 0x3A73, 0x39D0, 0x9FB6, 0x9FB7, 0x3B4E,
- 0x3C6E, 0x3CE0, 0x2EA7, 0x0000, 0x9FB8, 0x2EAA, 0x4056, 0x415F,
- 0x2EAE, 0x4337, 0x2EB3, 0x2EB6, 0x2EB7, 0x0000, 0x43B1, 0x43AC,
- 0x2EBB, 0x43DD, 0x44D6, 0x4661, 0x464C, 0x9FB9, 0x4723, 0x4729,
- 0x477C, 0x478D, 0x2ECA, 0x4947, 0x497A, 0x497D, 0x4982, 0x4983,
- 0x4985, 0x4986, 0x499F, 0x499B, 0x49B7, 0x49B6, 0x9FBA, 0x0000,
- 0x4CA3, 0x4C9F, 0x4CA0, 0x4CA1, 0x4C77, 0x4CA2, 0x4D13, 0x4D14,
- 0x4D15, 0x4D16, 0x4D17, 0x4D18, 0x4D19, 0x4DAE, 0x9FBB, 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, 0x00FC, 0x00A9,
- 0x2122, 0x2026, 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,
- 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, 0x1E3F, 0x0144, 0x0148, 0x01F9, 0x0261,
- 0x0020, 0x20AC, 0x00A5, 0x20AC, 0x0024, 0x303F, 0x20AC, 0x3041,
- 0x3047, 0x3043, 0x304B, 0x304B, 0x3051, 0x3051, 0x3053, 0x3053,
- 0x3049, 0x3064, 0x3045, 0x308E, 0x3083, 0x3087, 0x3085, 0x3094,
- 0x30A1, 0x30A7, 0x30A3, 0x30F5, 0x30F6, 0x30B3, 0x30B3, 0x30A9,
- 0x30C3, 0x30A5, 0x30EE, 0x30E3, 0x30E7, 0x30E5, 0x30F7, 0x30F9,
- 0x30F8, 0x30FA, 0x30FC, 0x3033, 0x3034, 0x3035, 0x3038, 0x3039,
- 0x303A, 0x312A, 0x312B, 0x312C, 0x31A0, 0x31A1, 0x31A2, 0x31A3,
- 0x31A4, 0x31A5, 0x31A6, 0x31A7, 0x31A8, 0x31A9, 0x31AA, 0x31AB,
- 0x31AC, 0x31AD, 0x31AE, 0x31AF, 0x31B0, 0x31B1, 0x31B2, 0x31B3,
- 0x31B4, 0x31B5, 0x31B6, 0x31B7, 0x2E80, 0x2E82, 0x2E83, 0x2E85,
- 0x2E86, 0x2E87, 0x2E89, 0x2E8A, 0x2E8D, 0x2E8E, 0x2E8F, 0x2E90,
- 0x2E91, 0x2E92, 0x2E93, 0x2E94, 0x2E95, 0x2E96, 0x2E98, 0x2E99,
- 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, 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, 0x361B,
- 0x361C, 0x361D, 0x361E, 0x361F, 0x3620, 0x3621, 0x3622, 0x3623,
- 0x3624, 0x3625, 0x3626, 0x3627, 0x3628, 0x3629, 0x362A, 0x362B,
- 0x362C, 0x362D, 0x362E, 0x362F, 0x3630, 0x3631, 0x3632, 0x3633,
- 0x3634, 0x3635, 0x3636, 0x3637, 0x3638, 0x3639, 0x363A, 0x363B,
- 0x363C, 0x363D, 0x363E, 0x363F, 0x3640, 0x3641, 0x3642, 0x3643,
- 0x3644, 0x3645, 0x3646, 0x3647, 0x3648, 0x3649, 0x364A, 0x364B,
- 0x364C, 0x364D, 0x364E, 0x364F, 0x3650, 0x3651, 0x3652, 0x3653,
- 0x3654, 0x3655, 0x3656, 0x3657, 0x3658, 0x3659, 0x365A, 0x365B,
- 0x365C, 0x365D, 0x365E, 0x365F, 0x3660, 0x3661, 0x3662, 0x3663,
- 0x3664, 0x3665, 0x3666, 0x3667, 0x3668, 0x3669, 0x366A, 0x366B,
- 0x366C, 0x366D, 0x366E, 0x366F, 0x3670, 0x3671, 0x3672, 0x3673,
- 0x3674, 0x3675, 0x3676, 0x3677, 0x3678, 0x3679, 0x367A, 0x367B,
- 0x367C, 0x367D, 0x367E, 0x367F, 0x3680, 0x3681, 0x3682, 0x3683,
- 0x3684, 0x3685, 0x3686, 0x3687, 0x3688, 0x3689, 0x368A, 0x368B,
- 0x368C, 0x368D, 0x368E, 0x368F, 0x3690, 0x3691, 0x3692, 0x3693,
- 0x3694, 0x3695, 0x3696, 0x3697, 0x3698, 0x3699, 0x369A, 0x369B,
- 0x369C, 0x369D, 0x369E, 0x369F, 0x36A0, 0x36A1, 0x36A2, 0x36A3,
- 0x36A4, 0x36A5, 0x36A6, 0x36A7, 0x36A8, 0x36A9, 0x36AA, 0x36AB,
- 0x36AC, 0x36AD, 0x36AE, 0x36AF, 0x36B0, 0x36B1, 0x36B2, 0x36B3,
- 0x36B4, 0x36B5, 0x36B6, 0x36B7, 0x36B8, 0x36B9, 0x36BA, 0x36BB,
- 0x36BC, 0x36BD, 0x36BE, 0x36BF, 0x36C0, 0x36C1, 0x36C2, 0x36C3,
- 0x36C4, 0x36C5, 0x36C6, 0x36C7, 0x36C8, 0x36C9, 0x36CA, 0x36CB,
- 0x36CC, 0x36CD, 0x36CE, 0x36CF, 0x36D0, 0x36D1, 0x36D2, 0x36D3,
- 0x36D4, 0x36D5, 0x36D6, 0x36D7, 0x36D8, 0x36D9, 0x36DA, 0x36DB,
- 0x36DC, 0x36DD, 0x36DE, 0x36DF, 0x36E0, 0x36E1, 0x36E2, 0x36E3,
- 0x36E4, 0x36E5, 0x36E6, 0x36E7, 0x36E8, 0x36E9, 0x36EA, 0x36EB,
- 0x36EC, 0x36ED, 0x36EE, 0x36EF, 0x36F0, 0x36F1, 0x36F2, 0x36F3,
- 0x36F4, 0x36F5, 0x36F6, 0x36F7, 0x36F8, 0x36F9, 0x36FA, 0x36FB,
- 0x36FC, 0x36FD, 0x36FE, 0x36FF, 0x3700, 0x3701, 0x3702, 0x3703,
- 0x3704, 0x3705, 0x3706, 0x3707, 0x3708, 0x3709, 0x370A, 0x370B,
- 0x370C, 0x370D, 0x370E, 0x370F, 0x3710, 0x3711, 0x3712, 0x3713,
- 0x3714, 0x3715, 0x3716, 0x3717, 0x3718, 0x3719, 0x371A, 0x371B,
- 0x371C, 0x371D, 0x371E, 0x371F, 0x3720, 0x3721, 0x3722, 0x3723,
- 0x3724, 0x3725, 0x3726, 0x3727, 0x3728, 0x3729, 0x372A, 0x372B,
- 0x372C, 0x372D, 0x372E, 0x372F, 0x3730, 0x3731, 0x3732, 0x3733,
- 0x3734, 0x3735, 0x3736, 0x3737, 0x3738, 0x3739, 0x373A, 0x373B,
- 0x373C, 0x373D, 0x373E, 0x373F, 0x3740, 0x3741, 0x3742, 0x3743,
- 0x3744, 0x3745, 0x3746, 0x3747, 0x3748, 0x3749, 0x374A, 0x374B,
- 0x374C, 0x374D, 0x374E, 0x374F, 0x3750, 0x3751, 0x3752, 0x3753,
- 0x3754, 0x3755, 0x3756, 0x3757, 0x3758, 0x3759, 0x375A, 0x375B,
- 0x375C, 0x375D, 0x375E, 0x375F, 0x3760, 0x3761, 0x3762, 0x3763,
- 0x3764, 0x3765, 0x3766, 0x3767, 0x3768, 0x3769, 0x376A, 0x376B,
- 0x376C, 0x376D, 0x376E, 0x376F, 0x3770, 0x3771, 0x3772, 0x3773,
- 0x3774, 0x3775, 0x3776, 0x3777, 0x3778, 0x3779, 0x377A, 0x377B,
- 0x377C, 0x377D, 0x377E, 0x377F, 0x3780, 0x3781, 0x3782, 0x3783,
- 0x3784, 0x3785, 0x3786, 0x3787, 0x3788, 0x3789, 0x378A, 0x378B,
- 0x378C, 0x378D, 0x378E, 0x378F, 0x3790, 0x3791, 0x3792, 0x3793,
- 0x3794, 0x3795, 0x3796, 0x3797, 0x3798, 0x3799, 0x379A, 0x379B,
- 0x379C, 0x379D, 0x379E, 0x379F, 0x37A0, 0x37A1, 0x37A2, 0x37A3,
- 0x37A4, 0x37A5, 0x37A6, 0x37A7, 0x37A8, 0x37A9, 0x37AA, 0x37AB,
- 0x37AC, 0x37AD, 0x37AE, 0x37AF, 0x37B0, 0x37B1, 0x37B2, 0x37B3,
- 0x37B4, 0x37B5, 0x37B6, 0x37B7, 0x37B8, 0x37B9, 0x37BA, 0x37BB,
- 0x37BC, 0x37BD, 0x37BE, 0x37BF, 0x37C0, 0x37C1, 0x37C2, 0x37C3,
- 0x37C4, 0x37C5, 0x37C6, 0x37C7, 0x37C8, 0x37C9, 0x37CA, 0x37CB,
- 0x37CC, 0x37CD, 0x37CE, 0x37CF, 0x37D0, 0x37D1, 0x37D2, 0x37D3,
- 0x37D4, 0x37D5, 0x37D6, 0x37D7, 0x37D8, 0x37D9, 0x37DA, 0x37DB,
- 0x37DC, 0x37DD, 0x37DE, 0x37DF, 0x37E0, 0x37E1, 0x37E2, 0x37E3,
- 0x37E4, 0x37E5, 0x37E6, 0x37E7, 0x37E8, 0x37E9, 0x37EA, 0x37EB,
- 0x37EC, 0x37ED, 0x37EE, 0x37EF, 0x37F0, 0x37F1, 0x37F2, 0x37F3,
- 0x37F4, 0x37F5, 0x37F6, 0x37F7, 0x37F8, 0x37F9, 0x37FA, 0x37FB,
- 0x37FC, 0x37FD, 0x37FE, 0x37FF, 0x3800, 0x3801, 0x3802, 0x3803,
- 0x3804, 0x3805, 0x3806, 0x3807, 0x3808, 0x3809, 0x380A, 0x380B,
- 0x380C, 0x380D, 0x380E, 0x380F, 0x3810, 0x3811, 0x3812, 0x3813,
- 0x3814, 0x3815, 0x3816, 0x3817, 0x3818, 0x3819, 0x381A, 0x381B,
- 0x381C, 0x381D, 0x381E, 0x381F, 0x3820, 0x3821, 0x3822, 0x3823,
- 0x3824, 0x3825, 0x3826, 0x3827, 0x3828, 0x3829, 0x382A, 0x382B,
- 0x382C, 0x382D, 0x382E, 0x382F, 0x3830, 0x3831, 0x3832, 0x3833,
- 0x3834, 0x3835, 0x3836, 0x3837, 0x3838, 0x3839, 0x383A, 0x383B,
- 0x383C, 0x383D, 0x383E, 0x383F, 0x3840, 0x3841, 0x3842, 0x3843,
- 0x3844, 0x3845, 0x3846, 0x3847, 0x3848, 0x3849, 0x384A, 0x384B,
- 0x384C, 0x384D, 0x384E, 0x384F, 0x3850, 0x3851, 0x3852, 0x3853,
- 0x3854, 0x3855, 0x3856, 0x3857, 0x3858, 0x3859, 0x385A, 0x385B,
- 0x385C, 0x385D, 0x385E, 0x385F, 0x3860, 0x3861, 0x3862, 0x3863,
- 0x3864, 0x3865, 0x3866, 0x3867, 0x3868, 0x3869, 0x386A, 0x386B,
- 0x386C, 0x386D, 0x386E, 0x386F, 0x3870, 0x3871, 0x3872, 0x3873,
- 0x3874, 0x3875, 0x3876, 0x3877, 0x3878, 0x3879, 0x387A, 0x387B,
- 0x387C, 0x387D, 0x387E, 0x387F, 0x3880, 0x3881, 0x3882, 0x3883,
- 0x3884, 0x3885, 0x3886, 0x3887, 0x3888, 0x3889, 0x388A, 0x388B,
- 0x388C, 0x388D, 0x388E, 0x388F, 0x3890, 0x3891, 0x3892, 0x3893,
- 0x3894, 0x3895, 0x3896, 0x3897, 0x3898, 0x3899, 0x389A, 0x389B,
- 0x389C, 0x389D, 0x389E, 0x389F, 0x38A0, 0x38A1, 0x38A2, 0x38A3,
- 0x38A4, 0x38A5, 0x38A6, 0x38A7, 0x38A8, 0x38A9, 0x38AA, 0x38AB,
- 0x38AC, 0x38AD, 0x38AE, 0x38AF, 0x38B0, 0x38B1, 0x38B2, 0x38B3,
- 0x38B4, 0x38B5, 0x38B6, 0x38B7, 0x38B8, 0x38B9, 0x38BA, 0x38BB,
- 0x38BC, 0x38BD, 0x38BE, 0x38BF, 0x38C0, 0x38C1, 0x38C2, 0x38C3,
- 0x38C4, 0x38C5, 0x38C6, 0x38C7, 0x38C8, 0x38C9, 0x38CA, 0x38CB,
- 0x38CC, 0x38CD, 0x38CE, 0x38CF, 0x38D0, 0x38D1, 0x38D2, 0x38D3,
- 0x38D4, 0x38D5, 0x38D6, 0x38D7, 0x38D8, 0x38D9, 0x38DA, 0x38DB,
- 0x38DC, 0x38DD, 0x38DE, 0x38DF, 0x38E0, 0x38E1, 0x38E2, 0x38E3,
- 0x38E4, 0x38E5, 0x38E6, 0x38E7, 0x38E8, 0x38E9, 0x38EA, 0x38EB,
- 0x38EC, 0x38ED, 0x38EE, 0x38EF, 0x38F0, 0x38F1, 0x38F2, 0x38F3,
- 0x38F4, 0x38F5, 0x38F6, 0x38F7, 0x38F8, 0x38F9, 0x38FA, 0x38FB,
- 0x38FC, 0x38FD, 0x38FE, 0x38FF, 0x3900, 0x3901, 0x3902, 0x3903,
- 0x3904, 0x3905, 0x3906, 0x3907, 0x3908, 0x3909, 0x390A, 0x390B,
- 0x390C, 0x390D, 0x390E, 0x390F, 0x3910, 0x3911, 0x3912, 0x3913,
- 0x3914, 0x3915, 0x3916, 0x3917, 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, 0x3CE1, 0x3CE2, 0x3CE3, 0x3CE4,
- 0x3CE5, 0x3CE6, 0x3CE7, 0x3CE8, 0x3CE9, 0x3CEA, 0x3CEB, 0x3CEC,
- 0x3CED, 0x3CEE, 0x3CEF, 0x3CF0, 0x3CF1, 0x3CF2, 0x3CF3, 0x3CF4,
- 0x3CF5, 0x3CF6, 0x3CF7, 0x3CF8, 0x3CF9, 0x3CFA, 0x3CFB, 0x3CFC,
- 0x3CFD, 0x3CFE, 0x3CFF, 0x3D00, 0x3D01, 0x3D02, 0x3D03, 0x3D04,
- 0x3D05, 0x3D06, 0x3D07, 0x3D08, 0x3D09, 0x3D0A, 0x3D0B, 0x3D0C,
- 0x3D0D, 0x3D0E, 0x3D0F, 0x3D10, 0x3D11, 0x3D12, 0x3D13, 0x3D14,
- 0x3D15, 0x3D16, 0x3D17, 0x3D18, 0x3D19, 0x3D1A, 0x3D1B, 0x3D1C,
- 0x3D1D, 0x3D1E, 0x3D1F, 0x3D20, 0x3D21, 0x3D22, 0x3D23, 0x3D24,
- 0x3D25, 0x3D26, 0x3D27, 0x3D28, 0x3D29, 0x3D2A, 0x3D2B, 0x3D2C,
- 0x3D2D, 0x3D2E, 0x3D2F, 0x3D30, 0x3D31, 0x3D32, 0x3D33, 0x3D34,
- 0x3D35, 0x3D36, 0x3D37, 0x3D38, 0x3D39, 0x3D3A, 0x3D3B, 0x3D3C,
- 0x3D3D, 0x3D3E, 0x3D3F, 0x3D40, 0x3D41, 0x3D42, 0x3D43, 0x3D44,
- 0x3D45, 0x3D46, 0x3D47, 0x3D48, 0x3D49, 0x3D4A, 0x3D4B, 0x3D4C,
- 0x3D4D, 0x3D4E, 0x3D4F, 0x3D50, 0x3D51, 0x3D52, 0x3D53, 0x3D54,
- 0x3D55, 0x3D56, 0x3D57, 0x3D58, 0x3D59, 0x3D5A, 0x3D5B, 0x3D5C,
- 0x3D5D, 0x3D5E, 0x3D5F, 0x3D60, 0x3D61, 0x3D62, 0x3D63, 0x3D64,
- 0x3D65, 0x3D66, 0x3D67, 0x3D68, 0x3D69, 0x3D6A, 0x3D6B, 0x3D6C,
- 0x3D6D, 0x3D6E, 0x3D6F, 0x3D70, 0x3D71, 0x3D72, 0x3D73, 0x3D74,
- 0x3D75, 0x3D76, 0x3D77, 0x3D78, 0x3D79, 0x3D7A, 0x3D7B, 0x3D7C,
- 0x3D7D, 0x3D7E, 0x3D7F, 0x3D80, 0x3D81, 0x3D82, 0x3D83, 0x3D84,
- 0x3D85, 0x3D86, 0x3D87, 0x3D88, 0x3D89, 0x3D8A, 0x3D8B, 0x3D8C,
- 0x3D8D, 0x3D8E, 0x3D8F, 0x3D90, 0x3D91, 0x3D92, 0x3D93, 0x3D94,
- 0x3D95, 0x3D96, 0x3D97, 0x3D98, 0x3D99, 0x3D9A, 0x3D9B, 0x3D9C,
- 0x3D9D, 0x3D9E, 0x3D9F, 0x3DA0, 0x3DA1, 0x3DA2, 0x3DA3, 0x3DA4,
- 0x3DA5, 0x3DA6, 0x3DA7, 0x3DA8, 0x3DA9, 0x3DAA, 0x3DAB, 0x3DAC,
- 0x3DAD, 0x3DAE, 0x3DAF, 0x3DB0, 0x3DB1, 0x3DB2, 0x3DB3, 0x3DB4,
- 0x3DB5, 0x3DB6, 0x3DB7, 0x3DB8, 0x3DB9, 0x3DBA, 0x3DBB, 0x3DBC,
- 0x3DBD, 0x3DBE, 0x3DBF, 0x3DC0, 0x3DC1, 0x3DC2, 0x3DC3, 0x3DC4,
- 0x3DC5, 0x3DC6, 0x3DC7, 0x3DC8, 0x3DC9, 0x3DCA, 0x3DCB, 0x3DCC,
- 0x3DCD, 0x3DCE, 0x3DCF, 0x3DD0, 0x3DD1, 0x3DD2, 0x3DD3, 0x3DD4,
- 0x3DD5, 0x3DD6, 0x3DD7, 0x3DD8, 0x3DD9, 0x3DDA, 0x3DDB, 0x3DDC,
- 0x3DDD, 0x3DDE, 0x3DDF, 0x3DE0, 0x3DE1, 0x3DE2, 0x3DE3, 0x3DE4,
- 0x3DE5, 0x3DE6, 0x3DE7, 0x3DE8, 0x3DE9, 0x3DEA, 0x3DEB, 0x3DEC,
- 0x3DED, 0x3DEE, 0x3DEF, 0x3DF0, 0x3DF1, 0x3DF2, 0x3DF3, 0x3DF4,
- 0x3DF5, 0x3DF6, 0x3DF7, 0x3DF8, 0x3DF9, 0x3DFA, 0x3DFB, 0x3DFC,
- 0x3DFD, 0x3DFE, 0x3DFF, 0x3E00, 0x3E01, 0x3E02, 0x3E03, 0x3E04,
- 0x3E05, 0x3E06, 0x3E07, 0x3E08, 0x3E09, 0x3E0A, 0x3E0B, 0x3E0C,
- 0x3E0D, 0x3E0E, 0x3E0F, 0x3E10, 0x3E11, 0x3E12, 0x3E13, 0x3E14,
- 0x3E15, 0x3E16, 0x3E17, 0x3E18, 0x3E19, 0x3E1A, 0x3E1B, 0x3E1C,
- 0x3E1D, 0x3E1E, 0x3E1F, 0x3E20, 0x3E21, 0x3E22, 0x3E23, 0x3E24,
- 0x3E25, 0x3E26, 0x3E27, 0x3E28, 0x3E29, 0x3E2A, 0x3E2B, 0x3E2C,
- 0x3E2D, 0x3E2E, 0x3E2F, 0x3E30, 0x3E31, 0x3E32, 0x3E33, 0x3E34,
- 0x3E35, 0x3E36, 0x3E37, 0x3E38, 0x3E39, 0x3E3A, 0x3E3B, 0x3E3C,
- 0x3E3D, 0x3E3E, 0x3E3F, 0x3E40, 0x3E41, 0x3E42, 0x3E43, 0x3E44,
- 0x3E45, 0x3E46, 0x3E47, 0x3E48, 0x3E49, 0x3E4A, 0x3E4B, 0x3E4C,
- 0x3E4D, 0x3E4E, 0x3E4F, 0x3E50, 0x3E51, 0x3E52, 0x3E53, 0x3E54,
- 0x3E55, 0x3E56, 0x3E57, 0x3E58, 0x3E59, 0x3E5A, 0x3E5B, 0x3E5C,
- 0x3E5D, 0x3E5E, 0x3E5F, 0x3E60, 0x3E61, 0x3E62, 0x3E63, 0x3E64,
- 0x3E65, 0x3E66, 0x3E67, 0x3E68, 0x3E69, 0x3E6A, 0x3E6B, 0x3E6C,
- 0x3E6D, 0x3E6E, 0x3E6F, 0x3E70, 0x3E71, 0x3E72, 0x3E73, 0x3E74,
- 0x3E75, 0x3E76, 0x3E77, 0x3E78, 0x3E79, 0x3E7A, 0x3E7B, 0x3E7C,
- 0x3E7D, 0x3E7E, 0x3E7F, 0x3E80, 0x3E81, 0x3E82, 0x3E83, 0x3E84,
- 0x3E85, 0x3E86, 0x3E87, 0x3E88, 0x3E89, 0x3E8A, 0x3E8B, 0x3E8C,
- 0x3E8D, 0x3E8E, 0x3E8F, 0x3E90, 0x3E91, 0x3E92, 0x3E93, 0x3E94,
- 0x3E95, 0x3E96, 0x3E97, 0x3E98, 0x3E99, 0x3E9A, 0x3E9B, 0x3E9C,
- 0x3E9D, 0x3E9E, 0x3E9F, 0x3EA0, 0x3EA1, 0x3EA2, 0x3EA3, 0x3EA4,
- 0x3EA5, 0x3EA6, 0x3EA7, 0x3EA8, 0x3EA9, 0x3EAA, 0x3EAB, 0x3EAC,
- 0x3EAD, 0x3EAE, 0x3EAF, 0x3EB0, 0x3EB1, 0x3EB2, 0x3EB3, 0x3EB4,
- 0x3EB5, 0x3EB6, 0x3EB7, 0x3EB8, 0x3EB9, 0x3EBA, 0x3EBB, 0x3EBC,
- 0x3EBD, 0x3EBE, 0x3EBF, 0x3EC0, 0x3EC1, 0x3EC2, 0x3EC3, 0x3EC4,
- 0x3EC5, 0x3EC6, 0x3EC7, 0x3EC8, 0x3EC9, 0x3ECA, 0x3ECB, 0x3ECC,
- 0x3ECD, 0x3ECE, 0x3ECF, 0x3ED0, 0x3ED1, 0x3ED2, 0x3ED3, 0x3ED4,
- 0x3ED5, 0x3ED6, 0x3ED7, 0x3ED8, 0x3ED9, 0x3EDA, 0x3EDB, 0x3EDC,
- 0x3EDD, 0x3EDE, 0x3EDF, 0x3EE0, 0x3EE1, 0x3EE2, 0x3EE3, 0x3EE4,
- 0x3EE5, 0x3EE6, 0x3EE7, 0x3EE8, 0x3EE9, 0x3EEA, 0x3EEB, 0x3EEC,
- 0x3EED, 0x3EEE, 0x3EEF, 0x3EF0, 0x3EF1, 0x3EF2, 0x3EF3, 0x3EF4,
- 0x3EF5, 0x3EF6, 0x3EF7, 0x3EF8, 0x3EF9, 0x3EFA, 0x3EFB, 0x3EFC,
- 0x3EFD, 0x3EFE, 0x3EFF, 0x3F00, 0x3F01, 0x3F02, 0x3F03, 0x3F04,
- 0x3F05, 0x3F06, 0x3F07, 0x3F08, 0x3F09, 0x3F0A, 0x3F0B, 0x3F0C,
- 0x3F0D, 0x3F0E, 0x3F0F, 0x3F10, 0x3F11, 0x3F12, 0x3F13, 0x3F14,
- 0x3F15, 0x3F16, 0x3F17, 0x3F18, 0x3F19, 0x3F1A, 0x3F1B, 0x3F1C,
- 0x3F1D, 0x3F1E, 0x3F1F, 0x3F20, 0x3F21, 0x3F22, 0x3F23, 0x3F24,
- 0x3F25, 0x3F26, 0x3F27, 0x3F28, 0x3F29, 0x3F2A, 0x3F2B, 0x3F2C,
- 0x3F2D, 0x3F2E, 0x3F2F, 0x3F30, 0x3F31, 0x3F32, 0x3F33, 0x3F34,
- 0x3F35, 0x3F36, 0x3F37, 0x3F38, 0x3F39, 0x3F3A, 0x3F3B, 0x3F3C,
- 0x3F3D, 0x3F3E, 0x3F3F, 0x3F40, 0x3F41, 0x3F42, 0x3F43, 0x3F44,
- 0x3F45, 0x3F46, 0x3F47, 0x3F48, 0x3F49, 0x3F4A, 0x3F4B, 0x3F4C,
- 0x3F4D, 0x3F4E, 0x3F4F, 0x3F50, 0x3F51, 0x3F52, 0x3F53, 0x3F54,
- 0x3F55, 0x3F56, 0x3F57, 0x3F58, 0x3F59, 0x3F5A, 0x3F5B, 0x3F5C,
- 0x3F5D, 0x3F5E, 0x3F5F, 0x3F60, 0x3F61, 0x3F62, 0x3F63, 0x3F64,
- 0x3F65, 0x3F66, 0x3F67, 0x3F68, 0x3F69, 0x3F6A, 0x3F6B, 0x3F6C,
- 0x3F6D, 0x3F6E, 0x3F6F, 0x3F70, 0x3F71, 0x3F72, 0x3F73, 0x3F74,
- 0x3F75, 0x3F76, 0x3F77, 0x3F78, 0x3F79, 0x3F7A, 0x3F7B, 0x3F7C,
- 0x3F7D, 0x3F7E, 0x3F7F, 0x3F80, 0x3F81, 0x3F82, 0x3F83, 0x3F84,
- 0x3F85, 0x3F86, 0x3F87, 0x3F88, 0x3F89, 0x3F8A, 0x3F8B, 0x3F8C,
- 0x3F8D, 0x3F8E, 0x3F8F, 0x3F90, 0x3F91, 0x3F92, 0x3F93, 0x3F94,
- 0x3F95, 0x3F96, 0x3F97, 0x3F98, 0x3F99, 0x3F9A, 0x3F9B, 0x3F9C,
- 0x3F9D, 0x3F9E, 0x3F9F, 0x3FA0, 0x3FA1, 0x3FA2, 0x3FA3, 0x3FA4,
- 0x3FA5, 0x3FA6, 0x3FA7, 0x3FA8, 0x3FA9, 0x3FAA, 0x3FAB, 0x3FAC,
- 0x3FAD, 0x3FAE, 0x3FAF, 0x3FB0, 0x3FB1, 0x3FB2, 0x3FB3, 0x3FB4,
- 0x3FB5, 0x3FB6, 0x3FB7, 0x3FB8, 0x3FB9, 0x3FBA, 0x3FBB, 0x3FBC,
- 0x3FBD, 0x3FBE, 0x3FBF, 0x3FC0, 0x3FC1, 0x3FC2, 0x3FC3, 0x3FC4,
- 0x3FC5, 0x3FC6, 0x3FC7, 0x3FC8, 0x3FC9, 0x3FCA, 0x3FCB, 0x3FCC,
- 0x3FCD, 0x3FCE, 0x3FCF, 0x3FD0, 0x3FD1, 0x3FD2, 0x3FD3, 0x3FD4,
- 0x3FD5, 0x3FD6, 0x3FD7, 0x3FD8, 0x3FD9, 0x3FDA, 0x3FDB, 0x3FDC,
- 0x3FDD, 0x3FDE, 0x3FDF, 0x3FE0, 0x3FE1, 0x3FE2, 0x3FE3, 0x3FE4,
- 0x3FE5, 0x3FE6, 0x3FE7, 0x3FE8, 0x3FE9, 0x3FEA, 0x3FEB, 0x3FEC,
- 0x3FED, 0x3FEE, 0x3FEF, 0x3FF0, 0x3FF1, 0x3FF2, 0x3FF3, 0x3FF4,
- 0x3FF5, 0x3FF6, 0x3FF7, 0x3FF8, 0x3FF9, 0x3FFA, 0x3FFB, 0x3FFC,
- 0x3FFD, 0x3FFE, 0x3FFF, 0x4000, 0x4001, 0x4002, 0x4003, 0x4004,
- 0x4005, 0x4006, 0x4007, 0x4008, 0x4009, 0x400A, 0x400B, 0x400C,
- 0x400D, 0x400E, 0x400F, 0x4010, 0x4011, 0x4012, 0x4013, 0x4014,
- 0x4015, 0x4016, 0x4017, 0x4018, 0x4019, 0x401A, 0x401B, 0x401C,
- 0x401D, 0x401E, 0x401F, 0x4020, 0x4021, 0x4022, 0x4023, 0x4024,
- 0x4025, 0x4026, 0x4027, 0x4028, 0x4029, 0x402A, 0x402B, 0x402C,
- 0x402D, 0x402E, 0x402F, 0x4030, 0x4031, 0x4032, 0x4033, 0x4034,
- 0x4035, 0x4036, 0x4037, 0x4038, 0x4039, 0x403A, 0x403B, 0x403C,
- 0x403D, 0x403E, 0x403F, 0x4040, 0x4041, 0x4042, 0x4043, 0x4044,
- 0x4045, 0x4046, 0x4047, 0x4048, 0x4049, 0x404A, 0x404B, 0x404C,
- 0x404D, 0x404E, 0x404F, 0x4050, 0x4051, 0x4052, 0x4053, 0x4054,
- 0x4055, 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, 0x4160, 0x4161, 0x4162, 0x4163, 0x4164, 0x4165, 0x4166,
- 0x4167, 0x4168, 0x4169, 0x416A, 0x416B, 0x416C, 0x416D, 0x416E,
- 0x416F, 0x4170, 0x4171, 0x4172, 0x4173, 0x4174, 0x4175, 0x4176,
- 0x4177, 0x4178, 0x4179, 0x417A, 0x417B, 0x417C, 0x417D, 0x417E,
- 0x417F, 0x4180, 0x4181, 0x4182, 0x4183, 0x4184, 0x4185, 0x4186,
- 0x4187, 0x4188, 0x4189, 0x418A, 0x418B, 0x418C, 0x418D, 0x418E,
- 0x418F, 0x4190, 0x4191, 0x4192, 0x4193, 0x4194, 0x4195, 0x4196,
- 0x4197, 0x4198, 0x4199, 0x419A, 0x419B, 0x419C, 0x419D, 0x419E,
- 0x419F, 0x41A0, 0x41A1, 0x41A2, 0x41A3, 0x41A4, 0x41A5, 0x41A6,
- 0x41A7, 0x41A8, 0x41A9, 0x41AA, 0x41AB, 0x41AC, 0x41AD, 0x41AE,
- 0x41AF, 0x41B0, 0x41B1, 0x41B2, 0x41B3, 0x41B4, 0x41B5, 0x41B6,
- 0x41B7, 0x41B8, 0x41B9, 0x41BA, 0x41BB, 0x41BC, 0x41BD, 0x41BE,
- 0x41BF, 0x41C0, 0x41C1, 0x41C2, 0x41C3, 0x41C4, 0x41C5, 0x41C6,
- 0x41C7, 0x41C8, 0x41C9, 0x41CA, 0x41CB, 0x41CC, 0x41CD, 0x41CE,
- 0x41CF, 0x41D0, 0x41D1, 0x41D2, 0x41D3, 0x41D4, 0x41D5, 0x41D6,
- 0x41D7, 0x41D8, 0x41D9, 0x41DA, 0x41DB, 0x41DC, 0x41DD, 0x41DE,
- 0x41DF, 0x41E0, 0x41E1, 0x41E2, 0x41E3, 0x41E4, 0x41E5, 0x41E6,
- 0x41E7, 0x41E8, 0x41E9, 0x41EA, 0x41EB, 0x41EC, 0x41ED, 0x41EE,
- 0x41EF, 0x41F0, 0x41F1, 0x41F2, 0x41F3, 0x41F4, 0x41F5, 0x41F6,
- 0x41F7, 0x41F8, 0x41F9, 0x41FA, 0x41FB, 0x41FC, 0x41FD, 0x41FE,
- 0x41FF, 0x4200, 0x4201, 0x4202, 0x4203, 0x4204, 0x4205, 0x4206,
- 0x4207, 0x4208, 0x4209, 0x420A, 0x420B, 0x420C, 0x420D, 0x420E,
- 0x420F, 0x4210, 0x4211, 0x4212, 0x4213, 0x4214, 0x4215, 0x4216,
- 0x4217, 0x4218, 0x4219, 0x421A, 0x421B, 0x421C, 0x421D, 0x421E,
- 0x421F, 0x4220, 0x4221, 0x4222, 0x4223, 0x4224, 0x4225, 0x4226,
- 0x4227, 0x4228, 0x4229, 0x422A, 0x422B, 0x422C, 0x422D, 0x422E,
- 0x422F, 0x4230, 0x4231, 0x4232, 0x4233, 0x4234, 0x4235, 0x4236,
- 0x4237, 0x4238, 0x4239, 0x423A, 0x423B, 0x423C, 0x423D, 0x423E,
- 0x423F, 0x4240, 0x4241, 0x4242, 0x4243, 0x4244, 0x4245, 0x4246,
- 0x4247, 0x4248, 0x4249, 0x424A, 0x424B, 0x424C, 0x424D, 0x424E,
- 0x424F, 0x4250, 0x4251, 0x4252, 0x4253, 0x4254, 0x4255, 0x4256,
- 0x4257, 0x4258, 0x4259, 0x425A, 0x425B, 0x425C, 0x425D, 0x425E,
- 0x425F, 0x4260, 0x4261, 0x4262, 0x4263, 0x4264, 0x4265, 0x4266,
- 0x4267, 0x4268, 0x4269, 0x426A, 0x426B, 0x426C, 0x426D, 0x426E,
- 0x426F, 0x4270, 0x4271, 0x4272, 0x4273, 0x4274, 0x4275, 0x4276,
- 0x4277, 0x4278, 0x4279, 0x427A, 0x427B, 0x427C, 0x427D, 0x427E,
- 0x427F, 0x4280, 0x4281, 0x4282, 0x4283, 0x4284, 0x4285, 0x4286,
- 0x4287, 0x4288, 0x4289, 0x428A, 0x428B, 0x428C, 0x428D, 0x428E,
- 0x428F, 0x4290, 0x4291, 0x4292, 0x4293, 0x4294, 0x4295, 0x4296,
- 0x4297, 0x4298, 0x4299, 0x429A, 0x429B, 0x429C, 0x429D, 0x429E,
- 0x429F, 0x42A0, 0x42A1, 0x42A2, 0x42A3, 0x42A4, 0x42A5, 0x42A6,
- 0x42A7, 0x42A8, 0x42A9, 0x42AA, 0x42AB, 0x42AC, 0x42AD, 0x42AE,
- 0x42AF, 0x42B0, 0x42B1, 0x42B2, 0x42B3, 0x42B4, 0x42B5, 0x42B6,
- 0x42B7, 0x42B8, 0x42B9, 0x42BA, 0x42BB, 0x42BC, 0x42BD, 0x42BE,
- 0x42BF, 0x42C0, 0x42C1, 0x42C2, 0x42C3, 0x42C4, 0x42C5, 0x42C6,
- 0x42C7, 0x42C8, 0x42C9, 0x42CA, 0x42CB, 0x42CC, 0x42CD, 0x42CE,
- 0x42CF, 0x42D0, 0x42D1, 0x42D2, 0x42D3, 0x42D4, 0x42D5, 0x42D6,
- 0x42D7, 0x42D8, 0x42D9, 0x42DA, 0x42DB, 0x42DC, 0x42DD, 0x42DE,
- 0x42DF, 0x42E0, 0x42E1, 0x42E2, 0x42E3, 0x42E4, 0x42E5, 0x42E6,
- 0x42E7, 0x42E8, 0x42E9, 0x42EA, 0x42EB, 0x42EC, 0x42ED, 0x42EE,
- 0x42EF, 0x42F0, 0x42F1, 0x42F2, 0x42F3, 0x42F4, 0x42F5, 0x42F6,
- 0x42F7, 0x42F8, 0x42F9, 0x42FA, 0x42FB, 0x42FC, 0x42FD, 0x42FE,
- 0x42FF, 0x4300, 0x4301, 0x4302, 0x4303, 0x4304, 0x4305, 0x4306,
- 0x4307, 0x4308, 0x4309, 0x430A, 0x430B, 0x430C, 0x430D, 0x430E,
- 0x430F, 0x4310, 0x4311, 0x4312, 0x4313, 0x4314, 0x4315, 0x4316,
- 0x4317, 0x4318, 0x4319, 0x431A, 0x431B, 0x431C, 0x431D, 0x431E,
- 0x431F, 0x4320, 0x4321, 0x4322, 0x4323, 0x4324, 0x4325, 0x4326,
- 0x4327, 0x4328, 0x4329, 0x432A, 0x432B, 0x432C, 0x432D, 0x432E,
- 0x432F, 0x4330, 0x4331, 0x4332, 0x4333, 0x4334, 0x4335, 0x4336,
- 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, 0x44D7, 0x44D8, 0x44D9, 0x44DA, 0x44DB,
- 0x44DC, 0x44DD, 0x44DE, 0x44DF, 0x44E0, 0x44E1, 0x44E2, 0x44E3,
- 0x44E4, 0x44E5, 0x44E6, 0x44E7, 0x44E8, 0x44E9, 0x44EA, 0x44EB,
- 0x44EC, 0x44ED, 0x44EE, 0x44EF, 0x44F0, 0x44F1, 0x44F2, 0x44F3,
- 0x44F4, 0x44F5, 0x44F6, 0x44F7, 0x44F8, 0x44F9, 0x44FA, 0x44FB,
- 0x44FC, 0x44FD, 0x44FE, 0x44FF, 0x4500, 0x4501, 0x4502, 0x4503,
- 0x4504, 0x4505, 0x4506, 0x4507, 0x4508, 0x4509, 0x450A, 0x450B,
- 0x450C, 0x450D, 0x450E, 0x450F, 0x4510, 0x4511, 0x4512, 0x4513,
- 0x4514, 0x4515, 0x4516, 0x4517, 0x4518, 0x4519, 0x451A, 0x451B,
- 0x451C, 0x451D, 0x451E, 0x451F, 0x4520, 0x4521, 0x4522, 0x4523,
- 0x4524, 0x4525, 0x4526, 0x4527, 0x4528, 0x4529, 0x452A, 0x452B,
- 0x452C, 0x452D, 0x452E, 0x452F, 0x4530, 0x4531, 0x4532, 0x4533,
- 0x4534, 0x4535, 0x4536, 0x4537, 0x4538, 0x4539, 0x453A, 0x453B,
- 0x453C, 0x453D, 0x453E, 0x453F, 0x4540, 0x4541, 0x4542, 0x4543,
- 0x4544, 0x4545, 0x4546, 0x4547, 0x4548, 0x4549, 0x454A, 0x454B,
- 0x454C, 0x454D, 0x454E, 0x454F, 0x4550, 0x4551, 0x4552, 0x4553,
- 0x4554, 0x4555, 0x4556, 0x4557, 0x4558, 0x4559, 0x455A, 0x455B,
- 0x455C, 0x455D, 0x455E, 0x455F, 0x4560, 0x4561, 0x4562, 0x4563,
- 0x4564, 0x4565, 0x4566, 0x4567, 0x4568, 0x4569, 0x456A, 0x456B,
- 0x456C, 0x456D, 0x456E, 0x456F, 0x4570, 0x4571, 0x4572, 0x4573,
- 0x4574, 0x4575, 0x4576, 0x4577, 0x4578, 0x4579, 0x457A, 0x457B,
- 0x457C, 0x457D, 0x457E, 0x457F, 0x4580, 0x4581, 0x4582, 0x4583,
- 0x4584, 0x4585, 0x4586, 0x4587, 0x4588, 0x4589, 0x458A, 0x458B,
- 0x458C, 0x458D, 0x458E, 0x458F, 0x4590, 0x4591, 0x4592, 0x4593,
- 0x4594, 0x4595, 0x4596, 0x4597, 0x4598, 0x4599, 0x459A, 0x459B,
- 0x459C, 0x459D, 0x459E, 0x459F, 0x45A0, 0x45A1, 0x45A2, 0x45A3,
- 0x45A4, 0x45A5, 0x45A6, 0x45A7, 0x45A8, 0x45A9, 0x45AA, 0x45AB,
- 0x45AC, 0x45AD, 0x45AE, 0x45AF, 0x45B0, 0x45B1, 0x45B2, 0x45B3,
- 0x45B4, 0x45B5, 0x45B6, 0x45B7, 0x45B8, 0x45B9, 0x45BA, 0x45BB,
- 0x45BC, 0x45BD, 0x45BE, 0x45BF, 0x45C0, 0x45C1, 0x45C2, 0x45C3,
- 0x45C4, 0x45C5, 0x45C6, 0x45C7, 0x45C8, 0x45C9, 0x45CA, 0x45CB,
- 0x45CC, 0x45CD, 0x45CE, 0x45CF, 0x45D0, 0x45D1, 0x45D2, 0x45D3,
- 0x45D4, 0x45D5, 0x45D6, 0x45D7, 0x45D8, 0x45D9, 0x45DA, 0x45DB,
- 0x45DC, 0x45DD, 0x45DE, 0x45DF, 0x45E0, 0x45E1, 0x45E2, 0x45E3,
- 0x45E4, 0x45E5, 0x45E6, 0x45E7, 0x45E8, 0x45E9, 0x45EA, 0x45EB,
- 0x45EC, 0x45ED, 0x45EE, 0x45EF, 0x45F0, 0x45F1, 0x45F2, 0x45F3,
- 0x45F4, 0x45F5, 0x45F6, 0x45F7, 0x45F8, 0x45F9, 0x45FA, 0x45FB,
- 0x45FC, 0x45FD, 0x45FE, 0x45FF, 0x4600, 0x4601, 0x4602, 0x4603,
- 0x4604, 0x4605, 0x4606, 0x4607, 0x4608, 0x4609, 0x460A, 0x460B,
- 0x460C, 0x460D, 0x460E, 0x460F, 0x4610, 0x4611, 0x4612, 0x4613,
- 0x4614, 0x4615, 0x4616, 0x4617, 0x4618, 0x4619, 0x461A, 0x461B,
- 0x461C, 0x461D, 0x461E, 0x461F, 0x4620, 0x4621, 0x4622, 0x4623,
- 0x4624, 0x4625, 0x4626, 0x4627, 0x4628, 0x4629, 0x462A, 0x462B,
- 0x462C, 0x462D, 0x462E, 0x462F, 0x4630, 0x4631, 0x4632, 0x4633,
- 0x4634, 0x4635, 0x4636, 0x4637, 0x4638, 0x4639, 0x463A, 0x463B,
- 0x463C, 0x463D, 0x463E, 0x463F, 0x4640, 0x4641, 0x4642, 0x4643,
- 0x4644, 0x4645, 0x4646, 0x4647, 0x4648, 0x4649, 0x464A, 0x464B,
- 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, 0x478E, 0x478F, 0x4790, 0x4791,
- 0x4792, 0x4793, 0x4794, 0x4795, 0x4796, 0x4797, 0x4798, 0x4799,
- 0x479A, 0x479B, 0x479C, 0x479D, 0x479E, 0x479F, 0x47A0, 0x47A1,
- 0x47A2, 0x47A3, 0x47A4, 0x47A5, 0x47A6, 0x47A7, 0x47A8, 0x47A9,
- 0x47AA, 0x47AB, 0x47AC, 0x47AD, 0x47AE, 0x47AF, 0x47B0, 0x47B1,
- 0x47B2, 0x47B3, 0x47B4, 0x47B5, 0x47B6, 0x47B7, 0x47B8, 0x47B9,
- 0x47BA, 0x47BB, 0x47BC, 0x47BD, 0x47BE, 0x47BF, 0x47C0, 0x47C1,
- 0x47C2, 0x47C3, 0x47C4, 0x47C5, 0x47C6, 0x47C7, 0x47C8, 0x47C9,
- 0x47CA, 0x47CB, 0x47CC, 0x47CD, 0x47CE, 0x47CF, 0x47D0, 0x47D1,
- 0x47D2, 0x47D3, 0x47D4, 0x47D5, 0x47D6, 0x47D7, 0x47D8, 0x47D9,
- 0x47DA, 0x47DB, 0x47DC, 0x47DD, 0x47DE, 0x47DF, 0x47E0, 0x47E1,
- 0x47E2, 0x47E3, 0x47E4, 0x47E5, 0x47E6, 0x47E7, 0x47E8, 0x47E9,
- 0x47EA, 0x47EB, 0x47EC, 0x47ED, 0x47EE, 0x47EF, 0x47F0, 0x47F1,
- 0x47F2, 0x47F3, 0x47F4, 0x47F5, 0x47F6, 0x47F7, 0x47F8, 0x47F9,
- 0x47FA, 0x47FB, 0x47FC, 0x47FD, 0x47FE, 0x47FF, 0x4800, 0x4801,
- 0x4802, 0x4803, 0x4804, 0x4805, 0x4806, 0x4807, 0x4808, 0x4809,
- 0x480A, 0x480B, 0x480C, 0x480D, 0x480E, 0x480F, 0x4810, 0x4811,
- 0x4812, 0x4813, 0x4814, 0x4815, 0x4816, 0x4817, 0x4818, 0x4819,
- 0x481A, 0x481B, 0x481C, 0x481D, 0x481E, 0x481F, 0x4820, 0x4821,
- 0x4822, 0x4823, 0x4824, 0x4825, 0x4826, 0x4827, 0x4828, 0x4829,
- 0x482A, 0x482B, 0x482C, 0x482D, 0x482E, 0x482F, 0x4830, 0x4831,
- 0x4832, 0x4833, 0x4834, 0x4835, 0x4836, 0x4837, 0x4838, 0x4839,
- 0x483A, 0x483B, 0x483C, 0x483D, 0x483E, 0x483F, 0x4840, 0x4841,
- 0x4842, 0x4843, 0x4844, 0x4845, 0x4846, 0x4847, 0x4848, 0x4849,
- 0x484A, 0x484B, 0x484C, 0x484D, 0x484E, 0x484F, 0x4850, 0x4851,
- 0x4852, 0x4853, 0x4854, 0x4855, 0x4856, 0x4857, 0x4858, 0x4859,
- 0x485A, 0x485B, 0x485C, 0x485D, 0x485E, 0x485F, 0x4860, 0x4861,
- 0x4862, 0x4863, 0x4864, 0x4865, 0x4866, 0x4867, 0x4868, 0x4869,
- 0x486A, 0x486B, 0x486C, 0x486D, 0x486E, 0x486F, 0x4870, 0x4871,
- 0x4872, 0x4873, 0x4874, 0x4875, 0x4876, 0x4877, 0x4878, 0x4879,
- 0x487A, 0x487B, 0x487C, 0x487D, 0x487E, 0x487F, 0x4880, 0x4881,
- 0x4882, 0x4883, 0x4884, 0x4885, 0x4886, 0x4887, 0x4888, 0x4889,
- 0x488A, 0x488B, 0x488C, 0x488D, 0x488E, 0x488F, 0x4890, 0x4891,
- 0x4892, 0x4893, 0x4894, 0x4895, 0x4896, 0x4897, 0x4898, 0x4899,
- 0x489A, 0x489B, 0x489C, 0x489D, 0x489E, 0x489F, 0x48A0, 0x48A1,
- 0x48A2, 0x48A3, 0x48A4, 0x48A5, 0x48A6, 0x48A7, 0x48A8, 0x48A9,
- 0x48AA, 0x48AB, 0x48AC, 0x48AD, 0x48AE, 0x48AF, 0x48B0, 0x48B1,
- 0x48B2, 0x48B3, 0x48B4, 0x48B5, 0x48B6, 0x48B7, 0x48B8, 0x48B9,
- 0x48BA, 0x48BB, 0x48BC, 0x48BD, 0x48BE, 0x48BF, 0x48C0, 0x48C1,
- 0x48C2, 0x48C3, 0x48C4, 0x48C5, 0x48C6, 0x48C7, 0x48C8, 0x48C9,
- 0x48CA, 0x48CB, 0x48CC, 0x48CD, 0x48CE, 0x48CF, 0x48D0, 0x48D1,
- 0x48D2, 0x48D3, 0x48D4, 0x48D5, 0x48D6, 0x48D7, 0x48D8, 0x48D9,
- 0x48DA, 0x48DB, 0x48DC, 0x48DD, 0x48DE, 0x48DF, 0x48E0, 0x48E1,
- 0x48E2, 0x48E3, 0x48E4, 0x48E5, 0x48E6, 0x48E7, 0x48E8, 0x48E9,
- 0x48EA, 0x48EB, 0x48EC, 0x48ED, 0x48EE, 0x48EF, 0x48F0, 0x48F1,
- 0x48F2, 0x48F3, 0x48F4, 0x48F5, 0x48F6, 0x48F7, 0x48F8, 0x48F9,
- 0x48FA, 0x48FB, 0x48FC, 0x48FD, 0x48FE, 0x48FF, 0x4900, 0x4901,
- 0x4902, 0x4903, 0x4904, 0x4905, 0x4906, 0x4907, 0x4908, 0x4909,
- 0x490A, 0x490B, 0x490C, 0x490D, 0x490E, 0x490F, 0x4910, 0x4911,
- 0x4912, 0x4913, 0x4914, 0x4915, 0x4916, 0x4917, 0x4918, 0x4919,
- 0x491A, 0x491B, 0x491C, 0x491D, 0x491E, 0x491F, 0x4920, 0x4921,
- 0x4922, 0x4923, 0x4924, 0x4925, 0x4926, 0x4927, 0x4928, 0x4929,
- 0x492A, 0x492B, 0x492C, 0x492D, 0x492E, 0x492F, 0x4930, 0x4931,
- 0x4932, 0x4933, 0x4934, 0x4935, 0x4936, 0x4937, 0x4938, 0x4939,
- 0x493A, 0x493B, 0x493C, 0x493D, 0x493E, 0x493F, 0x4940, 0x4941,
- 0x4942, 0x4943, 0x4944, 0x4945, 0x4946, 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, 0x49B8, 0x49B9, 0x49BA, 0x49BB, 0x49BC,
- 0x49BD, 0x49BE, 0x49BF, 0x49C0, 0x49C1, 0x49C2, 0x49C3, 0x49C4,
- 0x49C5, 0x49C6, 0x49C7, 0x49C8, 0x49C9, 0x49CA, 0x49CB, 0x49CC,
- 0x49CD, 0x49CE, 0x49CF, 0x49D0, 0x49D1, 0x49D2, 0x49D3, 0x49D4,
- 0x49D5, 0x49D6, 0x49D7, 0x49D8, 0x49D9, 0x49DA, 0x49DB, 0x49DC,
- 0x49DD, 0x49DE, 0x49DF, 0x49E0, 0x49E1, 0x49E2, 0x49E3, 0x49E4,
- 0x49E5, 0x49E6, 0x49E7, 0x49E8, 0x49E9, 0x49EA, 0x49EB, 0x49EC,
- 0x49ED, 0x49EE, 0x49EF, 0x49F0, 0x49F1, 0x49F2, 0x49F3, 0x49F4,
- 0x49F5, 0x49F6, 0x49F7, 0x49F8, 0x49F9, 0x49FA, 0x49FB, 0x49FC,
- 0x49FD, 0x49FE, 0x49FF, 0x4A00, 0x4A01, 0x4A02, 0x4A03, 0x4A04,
- 0x4A05, 0x4A06, 0x4A07, 0x4A08, 0x4A09, 0x4A0A, 0x4A0B, 0x4A0C,
- 0x4A0D, 0x4A0E, 0x4A0F, 0x4A10, 0x4A11, 0x4A12, 0x4A13, 0x4A14,
- 0x4A15, 0x4A16, 0x4A17, 0x4A18, 0x4A19, 0x4A1A, 0x4A1B, 0x4A1C,
- 0x4A1D, 0x4A1E, 0x4A1F, 0x4A20, 0x4A21, 0x4A22, 0x4A23, 0x4A24,
- 0x4A25, 0x4A26, 0x4A27, 0x4A28, 0x4A29, 0x4A2A, 0x4A2B, 0x4A2C,
- 0x4A2D, 0x4A2E, 0x4A2F, 0x4A30, 0x4A31, 0x4A32, 0x4A33, 0x4A34,
- 0x4A35, 0x4A36, 0x4A37, 0x4A38, 0x4A39, 0x4A3A, 0x4A3B, 0x4A3C,
- 0x4A3D, 0x4A3E, 0x4A3F, 0x4A40, 0x4A41, 0x4A42, 0x4A43, 0x4A44,
- 0x4A45, 0x4A46, 0x4A47, 0x4A48, 0x4A49, 0x4A4A, 0x4A4B, 0x4A4C,
- 0x4A4D, 0x4A4E, 0x4A4F, 0x4A50, 0x4A51, 0x4A52, 0x4A53, 0x4A54,
- 0x4A55, 0x4A56, 0x4A57, 0x4A58, 0x4A59, 0x4A5A, 0x4A5B, 0x4A5C,
- 0x4A5D, 0x4A5E, 0x4A5F, 0x4A60, 0x4A61, 0x4A62, 0x4A63, 0x4A64,
- 0x4A65, 0x4A66, 0x4A67, 0x4A68, 0x4A69, 0x4A6A, 0x4A6B, 0x4A6C,
- 0x4A6D, 0x4A6E, 0x4A6F, 0x4A70, 0x4A71, 0x4A72, 0x4A73, 0x4A74,
- 0x4A75, 0x4A76, 0x4A77, 0x4A78, 0x4A79, 0x4A7A, 0x4A7B, 0x4A7C,
- 0x4A7D, 0x4A7E, 0x4A7F, 0x4A80, 0x4A81, 0x4A82, 0x4A83, 0x4A84,
- 0x4A85, 0x4A86, 0x4A87, 0x4A88, 0x4A89, 0x4A8A, 0x4A8B, 0x4A8C,
- 0x4A8D, 0x4A8E, 0x4A8F, 0x4A90, 0x4A91, 0x4A92, 0x4A93, 0x4A94,
- 0x4A95, 0x4A96, 0x4A97, 0x4A98, 0x4A99, 0x4A9A, 0x4A9B, 0x4A9C,
- 0x4A9D, 0x4A9E, 0x4A9F, 0x4AA0, 0x4AA1, 0x4AA2, 0x4AA3, 0x4AA4,
- 0x4AA5, 0x4AA6, 0x4AA7, 0x4AA8, 0x4AA9, 0x4AAA, 0x4AAB, 0x4AAC,
- 0x4AAD, 0x4AAE, 0x4AAF, 0x4AB0, 0x4AB1, 0x4AB2, 0x4AB3, 0x4AB4,
- 0x4AB5, 0x4AB6, 0x4AB7, 0x4AB8, 0x4AB9, 0x4ABA, 0x4ABB, 0x4ABC,
- 0x4ABD, 0x4ABE, 0x4ABF, 0x4AC0, 0x4AC1, 0x4AC2, 0x4AC3, 0x4AC4,
- 0x4AC5, 0x4AC6, 0x4AC7, 0x4AC8, 0x4AC9, 0x4ACA, 0x4ACB, 0x4ACC,
- 0x4ACD, 0x4ACE, 0x4ACF, 0x4AD0, 0x4AD1, 0x4AD2, 0x4AD3, 0x4AD4,
- 0x4AD5, 0x4AD6, 0x4AD7, 0x4AD8, 0x4AD9, 0x4ADA, 0x4ADB, 0x4ADC,
- 0x4ADD, 0x4ADE, 0x4ADF, 0x4AE0, 0x4AE1, 0x4AE2, 0x4AE3, 0x4AE4,
- 0x4AE5, 0x4AE6, 0x4AE7, 0x4AE8, 0x4AE9, 0x4AEA, 0x4AEB, 0x4AEC,
- 0x4AED, 0x4AEE, 0x4AEF, 0x4AF0, 0x4AF1, 0x4AF2, 0x4AF3, 0x4AF4,
- 0x4AF5, 0x4AF6, 0x4AF7, 0x4AF8, 0x4AF9, 0x4AFA, 0x4AFB, 0x4AFC,
- 0x4AFD, 0x4AFE, 0x4AFF, 0x4B00, 0x4B01, 0x4B02, 0x4B03, 0x4B04,
- 0x4B05, 0x4B06, 0x4B07, 0x4B08, 0x4B09, 0x4B0A, 0x4B0B, 0x4B0C,
- 0x4B0D, 0x4B0E, 0x4B0F, 0x4B10, 0x4B11, 0x4B12, 0x4B13, 0x4B14,
- 0x4B15, 0x4B16, 0x4B17, 0x4B18, 0x4B19, 0x4B1A, 0x4B1B, 0x4B1C,
- 0x4B1D, 0x4B1E, 0x4B1F, 0x4B20, 0x4B21, 0x4B22, 0x4B23, 0x4B24,
- 0x4B25, 0x4B26, 0x4B27, 0x4B28, 0x4B29, 0x4B2A, 0x4B2B, 0x4B2C,
- 0x4B2D, 0x4B2E, 0x4B2F, 0x4B30, 0x4B31, 0x4B32, 0x4B33, 0x4B34,
- 0x4B35, 0x4B36, 0x4B37, 0x4B38, 0x4B39, 0x4B3A, 0x4B3B, 0x4B3C,
- 0x4B3D, 0x4B3E, 0x4B3F, 0x4B40, 0x4B41, 0x4B42, 0x4B43, 0x4B44,
- 0x4B45, 0x4B46, 0x4B47, 0x4B48, 0x4B49, 0x4B4A, 0x4B4B, 0x4B4C,
- 0x4B4D, 0x4B4E, 0x4B4F, 0x4B50, 0x4B51, 0x4B52, 0x4B53, 0x4B54,
- 0x4B55, 0x4B56, 0x4B57, 0x4B58, 0x4B59, 0x4B5A, 0x4B5B, 0x4B5C,
- 0x4B5D, 0x4B5E, 0x4B5F, 0x4B60, 0x4B61, 0x4B62, 0x4B63, 0x4B64,
- 0x4B65, 0x4B66, 0x4B67, 0x4B68, 0x4B69, 0x4B6A, 0x4B6B, 0x4B6C,
- 0x4B6D, 0x4B6E, 0x4B6F, 0x4B70, 0x4B71, 0x4B72, 0x4B73, 0x4B74,
- 0x4B75, 0x4B76, 0x4B77, 0x4B78, 0x4B79, 0x4B7A, 0x4B7B, 0x4B7C,
- 0x4B7D, 0x4B7E, 0x4B7F, 0x4B80, 0x4B81, 0x4B82, 0x4B83, 0x4B84,
- 0x4B85, 0x4B86, 0x4B87, 0x4B88, 0x4B89, 0x4B8A, 0x4B8B, 0x4B8C,
- 0x4B8D, 0x4B8E, 0x4B8F, 0x4B90, 0x4B91, 0x4B92, 0x4B93, 0x4B94,
- 0x4B95, 0x4B96, 0x4B97, 0x4B98, 0x4B99, 0x4B9A, 0x4B9B, 0x4B9C,
- 0x4B9D, 0x4B9E, 0x4B9F, 0x4BA0, 0x4BA1, 0x4BA2, 0x4BA3, 0x4BA4,
- 0x4BA5, 0x4BA6, 0x4BA7, 0x4BA8, 0x4BA9, 0x4BAA, 0x4BAB, 0x4BAC,
- 0x4BAD, 0x4BAE, 0x4BAF, 0x4BB0, 0x4BB1, 0x4BB2, 0x4BB3, 0x4BB4,
- 0x4BB5, 0x4BB6, 0x4BB7, 0x4BB8, 0x4BB9, 0x4BBA, 0x4BBB, 0x4BBC,
- 0x4BBD, 0x4BBE, 0x4BBF, 0x4BC0, 0x4BC1, 0x4BC2, 0x4BC3, 0x4BC4,
- 0x4BC5, 0x4BC6, 0x4BC7, 0x4BC8, 0x4BC9, 0x4BCA, 0x4BCB, 0x4BCC,
- 0x4BCD, 0x4BCE, 0x4BCF, 0x4BD0, 0x4BD1, 0x4BD2, 0x4BD3, 0x4BD4,
- 0x4BD5, 0x4BD6, 0x4BD7, 0x4BD8, 0x4BD9, 0x4BDA, 0x4BDB, 0x4BDC,
- 0x4BDD, 0x4BDE, 0x4BDF, 0x4BE0, 0x4BE1, 0x4BE2, 0x4BE3, 0x4BE4,
- 0x4BE5, 0x4BE6, 0x4BE7, 0x4BE8, 0x4BE9, 0x4BEA, 0x4BEB, 0x4BEC,
- 0x4BED, 0x4BEE, 0x4BEF, 0x4BF0, 0x4BF1, 0x4BF2, 0x4BF3, 0x4BF4,
- 0x4BF5, 0x4BF6, 0x4BF7, 0x4BF8, 0x4BF9, 0x4BFA, 0x4BFB, 0x4BFC,
- 0x4BFD, 0x4BFE, 0x4BFF, 0x4C00, 0x4C01, 0x4C02, 0x4C03, 0x4C04,
- 0x4C05, 0x4C06, 0x4C07, 0x4C08, 0x4C09, 0x4C0A, 0x4C0B, 0x4C0C,
- 0x4C0D, 0x4C0E, 0x4C0F, 0x4C10, 0x4C11, 0x4C12, 0x4C13, 0x4C14,
- 0x4C15, 0x4C16, 0x4C17, 0x4C18, 0x4C19, 0x4C1A, 0x4C1B, 0x4C1C,
- 0x4C1D, 0x4C1E, 0x4C1F, 0x4C20, 0x4C21, 0x4C22, 0x4C23, 0x4C24,
- 0x4C25, 0x4C26, 0x4C27, 0x4C28, 0x4C29, 0x4C2A, 0x4C2B, 0x4C2C,
- 0x4C2D, 0x4C2E, 0x4C2F, 0x4C30, 0x4C31, 0x4C32, 0x4C33, 0x4C34,
- 0x4C35, 0x4C36, 0x4C37, 0x4C38, 0x4C39, 0x4C3A, 0x4C3B, 0x4C3C,
- 0x4C3D, 0x4C3E, 0x4C3F, 0x4C40, 0x4C41, 0x4C42, 0x4C43, 0x4C44,
- 0x4C45, 0x4C46, 0x4C47, 0x4C48, 0x4C49, 0x4C4A, 0x4C4B, 0x4C4C,
- 0x4C4D, 0x4C4E, 0x4C4F, 0x4C50, 0x4C51, 0x4C52, 0x4C53, 0x4C54,
- 0x4C55, 0x4C56, 0x4C57, 0x4C58, 0x4C59, 0x4C5A, 0x4C5B, 0x4C5C,
- 0x4C5D, 0x4C5E, 0x4C5F, 0x4C60, 0x4C61, 0x4C62, 0x4C63, 0x4C64,
- 0x4C65, 0x4C66, 0x4C67, 0x4C68, 0x4C69, 0x4C6A, 0x4C6B, 0x4C6C,
- 0x4C6D, 0x4C6E, 0x4C6F, 0x4C70, 0x4C71, 0x4C72, 0x4C73, 0x4C74,
- 0x4C75, 0x4C76, 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, 0x20AC, 0x00A5, 0x20AC, 0x0024, 0x303F,
- 0xA000, 0xA001, 0xA002, 0xA003, 0xA004, 0xA005, 0xA006, 0xA007,
- 0xA008, 0xA009, 0xA00A, 0xA00B, 0xA00C, 0xA00D, 0xA00E, 0xA00F,
- 0xA010, 0xA011, 0xA012, 0xA013, 0xA014, 0xA015, 0xA016, 0xA017,
- 0xA018, 0xA019, 0xA01A, 0xA01B, 0xA01C, 0xA01D, 0xA01E, 0xA01F,
- 0xA020, 0xA021, 0xA022, 0xA023, 0xA024, 0xA025, 0xA026, 0xA027,
- 0xA028, 0xA029, 0xA02A, 0xA02B, 0xA02C, 0xA02D, 0xA02E, 0xA02F,
- 0xA030, 0xA031, 0xA032, 0xA033, 0xA034, 0xA035, 0xA036, 0xA037,
- 0xA038, 0xA039, 0xA03A, 0xA03B, 0xA03C, 0xA03D, 0xA03E, 0xA03F,
- 0xA040, 0xA041, 0xA042, 0xA043, 0xA044, 0xA045, 0xA046, 0xA047,
- 0xA048, 0xA049, 0xA04A, 0xA04B, 0xA04C, 0xA04D, 0xA04E, 0xA04F,
- 0xA050, 0xA051, 0xA052, 0xA053, 0xA054, 0xA055, 0xA056, 0xA057,
- 0xA058, 0xA059, 0xA05A, 0xA05B, 0xA05C, 0xA05D, 0xA05E, 0xA05F,
- 0xA060, 0xA061, 0xA062, 0xA063, 0xA064, 0xA065, 0xA066, 0xA067,
- 0xA068, 0xA069, 0xA06A, 0xA06B, 0xA06C, 0xA06D, 0xA06E, 0xA06F,
- 0xA070, 0xA071, 0xA072, 0xA073, 0xA074, 0xA075, 0xA076, 0xA077,
- 0xA078, 0xA079, 0xA07A, 0xA07B, 0xA07C, 0xA07D, 0xA07E, 0xA07F,
- 0xA080, 0xA081, 0xA082, 0xA083, 0xA084, 0xA085, 0xA086, 0xA087,
- 0xA088, 0xA089, 0xA08A, 0xA08B, 0xA08C, 0xA08D, 0xA08E, 0xA08F,
- 0xA090, 0xA091, 0xA092, 0xA093, 0xA094, 0xA095, 0xA096, 0xA097,
- 0xA098, 0xA099, 0xA09A, 0xA09B, 0xA09C, 0xA09D, 0xA09E, 0xA09F,
- 0xA0A0, 0xA0A1, 0xA0A2, 0xA0A3, 0xA0A4, 0xA0A5, 0xA0A6, 0xA0A7,
- 0xA0A8, 0xA0A9, 0xA0AA, 0xA0AB, 0xA0AC, 0xA0AD, 0xA0AE, 0xA0AF,
- 0xA0B0, 0xA0B1, 0xA0B2, 0xA0B3, 0xA0B4, 0xA0B5, 0xA0B6, 0xA0B7,
- 0xA0B8, 0xA0B9, 0xA0BA, 0xA0BB, 0xA0BC, 0xA0BD, 0xA0BE, 0xA0BF,
- 0xA0C0, 0xA0C1, 0xA0C2, 0xA0C3, 0xA0C4, 0xA0C5, 0xA0C6, 0xA0C7,
- 0xA0C8, 0xA0C9, 0xA0CA, 0xA0CB, 0xA0CC, 0xA0CD, 0xA0CE, 0xA0CF,
- 0xA0D0, 0xA0D1, 0xA0D2, 0xA0D3, 0xA0D4, 0xA0D5, 0xA0D6, 0xA0D7,
- 0xA0D8, 0xA0D9, 0xA0DA, 0xA0DB, 0xA0DC, 0xA0DD, 0xA0DE, 0xA0DF,
- 0xA0E0, 0xA0E1, 0xA0E2, 0xA0E3, 0xA0E4, 0xA0E5, 0xA0E6, 0xA0E7,
- 0xA0E8, 0xA0E9, 0xA0EA, 0xA0EB, 0xA0EC, 0xA0ED, 0xA0EE, 0xA0EF,
- 0xA0F0, 0xA0F1, 0xA0F2, 0xA0F3, 0xA0F4, 0xA0F5, 0xA0F6, 0xA0F7,
- 0xA0F8, 0xA0F9, 0xA0FA, 0xA0FB, 0xA0FC, 0xA0FD, 0xA0FE, 0xA0FF,
- 0xA100, 0xA101, 0xA102, 0xA103, 0xA104, 0xA105, 0xA106, 0xA107,
- 0xA108, 0xA109, 0xA10A, 0xA10B, 0xA10C, 0xA10D, 0xA10E, 0xA10F,
- 0xA110, 0xA111, 0xA112, 0xA113, 0xA114, 0xA115, 0xA116, 0xA117,
- 0xA118, 0xA119, 0xA11A, 0xA11B, 0xA11C, 0xA11D, 0xA11E, 0xA11F,
- 0xA120, 0xA121, 0xA122, 0xA123, 0xA124, 0xA125, 0xA126, 0xA127,
- 0xA128, 0xA129, 0xA12A, 0xA12B, 0xA12C, 0xA12D, 0xA12E, 0xA12F,
- 0xA130, 0xA131, 0xA132, 0xA133, 0xA134, 0xA135, 0xA136, 0xA137,
- 0xA138, 0xA139, 0xA13A, 0xA13B, 0xA13C, 0xA13D, 0xA13E, 0xA13F,
- 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, 0xA17F,
- 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, 0xA1A1, 0xA1A2, 0xA1A3, 0xA1A4, 0xA1A5, 0xA1A6, 0xA1A7,
- 0xA1A8, 0xA1A9, 0xA1AA, 0xA1AB, 0xA1AC, 0xA1AD, 0xA1AE, 0xA1AF,
- 0xA1B0, 0xA1B1, 0xA1B2, 0xA1B3, 0xA1B4, 0xA1B5, 0xA1B6, 0xA1B7,
- 0xA1B8, 0xA1B9, 0xA1BA, 0xA1BB, 0xA1BC, 0xA1BD, 0xA1BE, 0xA1BF,
- 0xA1C0, 0xA1C1, 0xA1C2, 0xA1C3, 0xA1C4, 0xA1C5, 0xA1C6, 0xA1C7,
- 0xA1C8, 0xA1C9, 0xA1CA, 0xA1CB, 0xA1CC, 0xA1CD, 0xA1CE, 0xA1CF,
- 0xA1D0, 0xA1D1, 0xA1D2, 0xA1D3, 0xA1D4, 0xA1D5, 0xA1D6, 0xA1D7,
- 0xA1D8, 0xA1D9, 0xA1DA, 0xA1DB, 0xA1DC, 0xA1DD, 0xA1DE, 0xA1DF,
- 0xA1E0, 0xA1E1, 0xA1E2, 0xA1E3, 0xA1E4, 0xA1E5, 0xA1E6, 0xA1E7,
- 0xA1E8, 0xA1E9, 0xA1EA, 0xA1EB, 0xA1EC, 0xA1ED, 0xA1EE, 0xA1EF,
- 0xA1F0, 0xA1F1, 0xA1F2, 0xA1F3, 0xA1F4, 0xA1F5, 0xA1F6, 0xA1F7,
- 0xA1F8, 0xA1F9, 0xA1FA, 0xA1FB, 0xA1FC, 0xA1FD, 0xA1FE, 0xA1FF,
- 0xA200, 0xA201, 0xA202, 0xA203, 0xA204, 0xA205, 0xA206, 0xA207,
- 0xA208, 0xA209, 0xA20A, 0xA20B, 0xA20C, 0xA20D, 0xA20E, 0xA20F,
- 0xA210, 0xA211, 0xA212, 0xA213, 0xA214, 0xA215, 0xA216, 0xA217,
- 0xA218, 0xA219, 0xA21A, 0xA21B, 0xA21C, 0xA21D, 0xA21E, 0xA21F,
- 0xA220, 0xA221, 0xA222, 0xA223, 0xA224, 0xA225, 0xA226, 0xA227,
- 0xA228, 0xA229, 0xA22A, 0xA22B, 0xA22C, 0xA22D, 0xA22E, 0xA22F,
- 0xA230, 0xA231, 0xA232, 0xA233, 0xA234, 0xA235, 0xA236, 0xA237,
- 0xA238, 0xA239, 0xA23A, 0xA23B, 0xA23C, 0xA23D, 0xA23E, 0xA23F,
- 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, 0xA27F,
- 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, 0xA2A1, 0xA2A2, 0xA2A3, 0xA2A4, 0xA2A5, 0xA2A6, 0xA2A7,
- 0xA2A8, 0xA2A9, 0xA2AA, 0xA2AB, 0xA2AC, 0xA2AD, 0xA2AE, 0xA2AF,
- 0xA2B0, 0xA2B1, 0xA2B2, 0xA2B3, 0xA2B4, 0xA2B5, 0xA2B6, 0xA2B7,
- 0xA2B8, 0xA2B9, 0xA2BA, 0xA2BB, 0xA2BC, 0xA2BD, 0xA2BE, 0xA2BF,
- 0xA2C0, 0xA2C1, 0xA2C2, 0xA2C3, 0xA2C4, 0xA2C5, 0xA2C6, 0xA2C7,
- 0xA2C8, 0xA2C9, 0xA2CA, 0xA2CB, 0xA2CC, 0xA2CD, 0xA2CE, 0xA2CF,
- 0xA2D0, 0xA2D1, 0xA2D2, 0xA2D3, 0xA2D4, 0xA2D5, 0xA2D6, 0xA2D7,
- 0xA2D8, 0xA2D9, 0xA2DA, 0xA2DB, 0xA2DC, 0xA2DD, 0xA2DE, 0xA2DF,
- 0xA2E0, 0xA2E1, 0xA2E2, 0xA2E3, 0xA2E4, 0xA2E5, 0xA2E6, 0xA2E7,
- 0xA2E8, 0xA2E9, 0xA2EA, 0xA2EB, 0xA2EC, 0xA2ED, 0xA2EE, 0xA2EF,
- 0xA2F0, 0xA2F1, 0xA2F2, 0xA2F3, 0xA2F4, 0xA2F5, 0xA2F6, 0xA2F7,
- 0xA2F8, 0xA2F9, 0xA2FA, 0xA2FB, 0xA2FC, 0xA2FD, 0xA2FE, 0xA2FF,
- 0xA300, 0xA301, 0xA302, 0xA303, 0xA304, 0xA305, 0xA306, 0xA307,
- 0xA308, 0xA309, 0xA30A, 0xA30B, 0xA30C, 0xA30D, 0xA30E, 0xA30F,
- 0xA310, 0xA311, 0xA312, 0xA313, 0xA314, 0xA315, 0xA316, 0xA317,
- 0xA318, 0xA319, 0xA31A, 0xA31B, 0xA31C, 0xA31D, 0xA31E, 0xA31F,
- 0xA320, 0xA321, 0xA322, 0xA323, 0xA324, 0xA325, 0xA326, 0xA327,
- 0xA328, 0xA329, 0xA32A, 0xA32B, 0xA32C, 0xA32D, 0xA32E, 0xA32F,
- 0xA330, 0xA331, 0xA332, 0xA333, 0xA334, 0xA335, 0xA336, 0xA337,
- 0xA338, 0xA339, 0xA33A, 0xA33B, 0xA33C, 0xA33D, 0xA33E, 0xA33F,
- 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, 0xA37F,
- 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, 0xA3A1, 0xA3A2, 0xA3A3, 0xA3A4, 0xA3A5, 0xA3A6, 0xA3A7,
- 0xA3A8, 0xA3A9, 0xA3AA, 0xA3AB, 0xA3AC, 0xA3AD, 0xA3AE, 0xA3AF,
- 0xA3B0, 0xA3B1, 0xA3B2, 0xA3B3, 0xA3B4, 0xA3B5, 0xA3B6, 0xA3B7,
- 0xA3B8, 0xA3B9, 0xA3BA, 0xA3BB, 0xA3BC, 0xA3BD, 0xA3BE, 0xA3BF,
- 0xA3C0, 0xA3C1, 0xA3C2, 0xA3C3, 0xA3C4, 0xA3C5, 0xA3C6, 0xA3C7,
- 0xA3C8, 0xA3C9, 0xA3CA, 0xA3CB, 0xA3CC, 0xA3CD, 0xA3CE, 0xA3CF,
- 0xA3D0, 0xA3D1, 0xA3D2, 0xA3D3, 0xA3D4, 0xA3D5, 0xA3D6, 0xA3D7,
- 0xA3D8, 0xA3D9, 0xA3DA, 0xA3DB, 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, 0xA3FE, 0xA3FF,
- 0xA400, 0xA401, 0xA402, 0xA403, 0xA404, 0xA405, 0xA406, 0xA407,
- 0xA408, 0xA409, 0xA40A, 0xA40B, 0xA40C, 0xA40D, 0xA40E, 0xA40F,
- 0xA410, 0xA411, 0xA412, 0xA413, 0xA414, 0xA415, 0xA416, 0xA417,
- 0xA418, 0xA419, 0xA41A, 0xA41B, 0xA41C, 0xA41D, 0xA41E, 0xA41F,
- 0xA420, 0xA421, 0xA422, 0xA423, 0xA424, 0xA425, 0xA426, 0xA427,
- 0xA428, 0xA429, 0xA42A, 0xA42B, 0xA42C, 0xA42D, 0xA42E, 0xA42F,
- 0xA430, 0xA431, 0xA432, 0xA433, 0xA434, 0xA435, 0xA436, 0xA437,
- 0xA438, 0xA439, 0xA43A, 0xA43B, 0xA43C, 0xA43D, 0xA43E, 0xA43F,
- 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, 0xA47F,
- 0xA480, 0xA481, 0xA482, 0xA483, 0xA484, 0xA485, 0xA486, 0xA487,
- 0xA488, 0xA489, 0xA48A, 0xA48B, 0xA48C, 0xA490, 0xA491, 0xA492,
- 0xA493, 0xA494, 0xA495, 0xA496, 0xA497, 0xA498, 0xA499, 0xA49A,
- 0xA49B, 0xA49C, 0xA49D, 0xA49E, 0xA49F, 0xA4A0, 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,
+ 0xFFFD, 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, 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, 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, 0x3220, 0x3221, 0x3222,
+ 0x3223, 0x3224, 0x3225, 0x3226, 0x3227, 0x3228, 0x3229, 0x2160, 0x2161,
+ 0x2162, 0x2163, 0x2164, 0x2165, 0x2166, 0x2167, 0x2168, 0x2169, 0x216A,
+ 0x216B, 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, 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, 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, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396,
+ 0x0397, 0x0398, 0x0399, 0x039A, 0x039B, 0x039C, 0x039D, 0x039E, 0x039F,
+ 0x03A0, 0x03A1, 0x03A3, 0x03A4, 0x03A5, 0x03A6, 0x03A7, 0x03A8, 0x03A9,
+ 0x03B1, 0x03B2, 0x03B3, 0x03B4, 0x03B5, 0x03B6, 0x03B7, 0x03B8, 0x03B9,
+ 0x03BA, 0x03BB, 0x03BC, 0x03BD, 0x03BE, 0x03BF, 0x03C0, 0x03C1, 0x03C3,
+ 0x03C4, 0x03C5, 0x03C6, 0x03C7, 0x03C8, 0x03C9, 0xFF0C, 0x3002, 0x3001,
+ 0xFF1A, 0xFF1B, 0xFF01, 0xFF1F, 0xFE35, 0xFE36, 0xFE39, 0xFE3A, 0xFE3F,
+ 0xFE40, 0xFE3D, 0xFE3E, 0xFE41, 0xFE42, 0xFE43, 0xFE44, 0x3016, 0x3017,
+ 0xFE3B, 0xFE3C, 0xFE37, 0xFE38, 0xFE31, 0x2026, 0xFE33, 0xFE34, 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, 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, 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, 0x1E3F, 0x0144, 0x0148, 0x01F9, 0x0261, 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,
+ 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, 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, 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, 0x1E3F,
+ 0x0144, 0x0148, 0x01F9, 0x0261, 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, 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, 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, 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, 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, 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, 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, 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,
+ 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, 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, 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, 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, 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, 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, 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, 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, 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,
+ 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, 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, 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, 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, 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, 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, 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, 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, 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,
+ 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, 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, 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, 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, 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, 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, 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, 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, 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,
+ 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, 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, 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, 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, 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, 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, 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, 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,
+ 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, 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, 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, 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, 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, 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, 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, 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, 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,
+ 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, 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, 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, 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, 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, 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, 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, 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, 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,
+ 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, 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, 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, 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, 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, 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, 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, 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, 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,
+ 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, 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, 0x3007,
+ 0xFF5E, 0x2016, 0x3013, 0xFF0E, 0xFF1D, 0xFF3B, 0xFF3D, 0xFFE3, 0x00FC,
+ 0x00A9, 0x2122, 0x2026, 0x0020, 0x769A, 0x85F9, 0x7919, 0x611B, 0x9AAF,
+ 0x8956, 0x58E9, 0x7F77, 0x64FA, 0x6557, 0x9812, 0x8FA6, 0x7D46, 0x5E6B,
+ 0x7D81, 0x938A, 0x8B17, 0x98FD, 0x5BF6, 0x5831, 0x9B91, 0x8F29, 0x8C9D,
+ 0x92C7, 0x72FD, 0x5099, 0x618A, 0x7DB3, 0x7B46, 0x7562, 0x6583, 0x5E63,
+ 0x9589, 0x908A, 0x7DE8, 0x8CB6, 0x8B8A, 0x8FAF, 0x8FAE, 0x6A19, 0x9C49,
+ 0x765F, 0x7015, 0x6FF1, 0x8CD3, 0x64EF, 0x9905, 0x64A5, 0x9262, 0x9251,
+ 0x99C1, 0x88DC, 0x8CA1, 0x53C3, 0x8836, 0x6B98, 0x615A, 0x6158, 0x71E6,
+ 0x84BC, 0x8259, 0x5009, 0x6EC4, 0x53A0, 0x5074, 0x6E2C, 0x5C64, 0x8A6B,
+ 0x6519, 0x647B, 0x87EC, 0x995E, 0x8B92, 0x7E8F, 0x93DF, 0x7523, 0x95E1,
+ 0x986B, 0x5834, 0x5617, 0x9577, 0x511F, 0x8178, 0x5EE0, 0x66A2, 0x9214,
+ 0x8ECA, 0x5FB9, 0x5875, 0x9673, 0x896F, 0x7A31, 0x61F2, 0x8AA0, 0x9A01,
+ 0x9072, 0x99B3, 0x9F52, 0x71BE, 0x885D, 0x87F2, 0x5BF5, 0x7587, 0x8E8A,
+ 0x7C4C, 0x7DA2, 0x919C, 0x92E4, 0x96DB, 0x790E, 0x5132, 0x89F8, 0x8655,
+ 0x50B3, 0x7621, 0x95D6, 0x5275, 0x9318, 0x7D14, 0x7DBD, 0x8FAD, 0x8A5E,
+ 0x8CDC, 0x8070, 0x5F9E, 0x53E2, 0x8EA5, 0x7AC4, 0x932F, 0x9054, 0x5E36,
+ 0x8CB8, 0x64D4, 0x55AE, 0x9132, 0x64A3, 0x81BD, 0x619A, 0x8A95, 0x5F48,
+ 0x7576, 0x64CB, 0x9EE8, 0x8569, 0x6A94, 0x6417, 0x5CF6, 0x79B1, 0x5C0E,
+ 0x71C8, 0x9127, 0x6575, 0x6ECC, 0x905E, 0x7DE0, 0x985B, 0x9EDE, 0x588A,
+ 0x96FB, 0x6FB1, 0x91E3, 0x8ABF, 0x8ADC, 0x91D8, 0x9802, 0x9320, 0x8A02,
+ 0x6771, 0x52D5, 0x68DF, 0x51CD, 0x9B25, 0x72A2, 0x7368, 0x8B80, 0x8CED,
+ 0x934D, 0x935B, 0x65B7, 0x7DDE, 0x968A, 0x5C0D, 0x5678, 0x9813, 0x920D,
+ 0x596A, 0x58AE, 0x9D5D, 0x984D, 0x8A1B, 0x60E1, 0x9913, 0x5152, 0x723E,
+ 0x990C, 0x8CB3, 0x767C, 0x7F70, 0x95A5, 0x792C, 0x91E9, 0x7169, 0x7BC4,
+ 0x8CA9, 0x98EF, 0x8A2A, 0x7D21, 0x98DB, 0x8AB9, 0x5EE2, 0x8CBB, 0x7D1B,
+ 0x58B3, 0x596E, 0x61A4, 0x7CDE, 0x8C50, 0x6953, 0x92D2, 0x98A8, 0x760B,
+ 0x99AE, 0x7E2B, 0x8AF7, 0x9CF3, 0x819A, 0x8F3B, 0x64AB, 0x8F14, 0x8CE6,
+ 0x5FA9, 0x8CA0, 0x8A03, 0x5A66, 0x7E1B, 0x8A72, 0x9223, 0x84CB, 0x5E79,
+ 0x8D95, 0x8D1B, 0x5CA1, 0x525B, 0x92FC, 0x7DB1, 0x5D17, 0x93AC, 0x64F1,
+ 0x9D3F, 0x95A3, 0x927B, 0x500B, 0x7D66, 0x9F94, 0x978F, 0x8CA2, 0x920E,
+ 0x6E9D, 0x69CB, 0x8CFC, 0x8831, 0x9867, 0x526E, 0x95DC, 0x89C0, 0x9928,
+ 0x6163, 0x8CAB, 0x5EE3, 0x898F, 0x6B78, 0x9F9C, 0x95A8, 0x8ECC, 0x8A6D,
+ 0x6AC3, 0x8CB4, 0x528A, 0x8F25, 0x934B, 0x570B, 0x904E, 0x99ED, 0x97D3,
+ 0x6F22, 0x865F, 0x95A1, 0x9DB4, 0x8CC0, 0x8F5F, 0x9D3B, 0x7D05, 0x58FA,
+ 0x8B77, 0x6EEC, 0x5629, 0x83EF, 0x756B, 0x5283, 0x8A71, 0x61F7, 0x58DE,
+ 0x6B61, 0x74B0, 0x9084, 0x7DE9, 0x8B0A, 0x63EE, 0x8F1D, 0x8CC4, 0x7A62,
+ 0x6703, 0x71F4, 0x532F, 0x8AF1, 0x8AA8, 0x7E6A, 0x8477, 0x6E3E, 0x7372,
+ 0x8CA8, 0x798D, 0x64CA, 0x6A5F, 0x7A4D, 0x9951, 0x8B4F, 0x9DC4, 0x7E3E,
+ 0x7DDD, 0x6975, 0x8F2F, 0x7D1A, 0x64E0, 0x5E7E, 0x858A, 0x5291, 0x6FDF,
+ 0x8A08, 0x8A18, 0x969B, 0x7E7C, 0x7D00, 0x593E, 0x83A2, 0x9830, 0x8CC8,
+ 0x9240, 0x50F9, 0x99D5, 0x6BB2, 0x76E3, 0x5805, 0x7B8B, 0x9593, 0x8271,
+ 0x7DD8, 0x7E6D, 0x6AA2, 0x9E7C, 0x63C0, 0x64BF, 0x7C21, 0x5109, 0x85A6,
+ 0x6ABB, 0x9452, 0x8E10, 0x8CE4, 0x898B, 0x9375, 0x8266, 0x528D, 0x991E,
+ 0x6F38, 0x6FFA, 0x6F97, 0x5C07, 0x6F3F, 0x8523, 0x69F3, 0x596C, 0x8B1B,
+ 0x91AC, 0x81A0, 0x6F86, 0x9A55, 0x5B0C, 0x652A, 0x9278, 0x77EF, 0x50E5,
+ 0x9903, 0x7E73, 0x7D5E, 0x8F4E, 0x8F03, 0x968E, 0x7BC0, 0x6F54, 0x7D50,
+ 0x8AA1, 0x7DCA, 0x9326, 0x50C5, 0x8B39, 0x9032, 0x71FC, 0x76E1, 0x52C1,
+ 0x8396, 0x9BE8, 0x9A5A, 0x7D93, 0x9838, 0x93E1, 0x5F91, 0x75D9, 0x7AF6,
+ 0x7CFE, 0x820A, 0x99D2, 0x8209, 0x64DA, 0x92F8, 0x61FC, 0x5287, 0x9D51,
+ 0x7D79, 0x89BA, 0x8A23, 0x7D76, 0x921E, 0x8ECD, 0x99FF, 0x958B, 0x51F1,
+ 0x9846, 0x6BBB, 0x8AB2, 0x58BE, 0x61C7, 0x6473, 0x5EAB, 0x8932, 0x8A87,
+ 0x584A, 0x5108, 0x5BEC, 0x7926, 0x66E0, 0x8667, 0x5DCB, 0x7ABA, 0x994B,
+ 0x6F70, 0x64F4, 0x95CA, 0x881F, 0x81D8, 0x840A, 0x4F86, 0x8CF4, 0x85CD,
+ 0x6B04, 0x6514, 0x7C43, 0x95CC, 0x862D, 0x703E, 0x8B95, 0x652C, 0x89BD,
+ 0x61F6, 0x7E9C, 0x721B, 0x6FEB, 0x6488, 0x52DE, 0x6F87, 0x6A02, 0x9433,
+ 0x58D8, 0x985E, 0x7C6C, 0x96E2, 0x7055, 0x88CF, 0x9BC9, 0x79AE, 0x9E97,
+ 0x53B2, 0x52F5, 0x792B, 0x6B77, 0x701D, 0x96B8, 0x5006, 0x806F, 0x84EE,
+ 0x9023, 0x942E, 0x6190, 0x6F23, 0x7C3E, 0x6582, 0x81C9, 0x93C8, 0x6200,
+ 0x7149, 0x7DF4, 0x7CE7, 0x5169, 0x8F1B, 0x8AD2, 0x7642, 0x907C, 0x9410,
+ 0x7375, 0x81E8, 0x9130, 0x9C57, 0x8CC3, 0x9F61, 0x9234, 0x9748, 0x5DBA,
+ 0x9818, 0x993E, 0x5289, 0x9F8D, 0x807E, 0x56A8, 0x7C60, 0x58DF, 0x650F,
+ 0x96B4, 0x6A13, 0x5A41, 0x645F, 0x7C0D, 0x8606, 0x76E7, 0x9871, 0x5EEC,
+ 0x7210, 0x64C4, 0x6EF7, 0x865C, 0x9B6F, 0x8CC2, 0x9332, 0x9678, 0x9A62,
+ 0x92C1, 0x5C62, 0x7E37, 0x616E, 0x6FFE, 0x7DD1, 0x5DD2, 0x6523, 0x5B7F,
+ 0x7064, 0x4E82, 0x6384, 0x8F2A, 0x502B, 0x4F96, 0x6DEA, 0x7DB8, 0x8AD6,
+ 0x863F, 0x7F85, 0x908F, 0x947C, 0x7C6E, 0x9A3E, 0x99F1, 0x7D61, 0x5ABD,
+ 0x746A, 0x78BC, 0x879E, 0x99AC, 0x99E1, 0x55CE, 0x8CB7, 0x9EA5, 0x8CE3,
+ 0x9081, 0x779E, 0x9945, 0x883B, 0x6EFF, 0x8B3E, 0x9328, 0x925A, 0x8CBF,
+ 0x9382, 0x9580, 0x60B6, 0x5011, 0x9333, 0x5922, 0x8B0E, 0x5F4C, 0x8993,
+ 0x7DBF, 0x7DEC, 0x5EDF, 0x6EC5, 0x61AB, 0x95A9, 0x9CF4, 0x9298, 0x8B2C,
+ 0x8B00, 0x755D, 0x9209, 0x7D0D, 0x96E3, 0x6493, 0x8166, 0x60F1, 0x9B27,
+ 0x9912, 0x64EC, 0x81A9, 0x6506, 0x91C0, 0x9CE5, 0x8076, 0x5699, 0x9477,
+ 0x93B3, 0x6AB8, 0x7370, 0x5BE7, 0x64F0, 0x6FD8, 0x9215, 0x7D10, 0x81BF,
+ 0x6FC3, 0x8FB2, 0x7627, 0x8AFE, 0x6B50, 0x9DD7, 0x6BC6, 0x5614, 0x6F1A,
+ 0x76E4, 0x9F90, 0x8CE0, 0x5674, 0x9D6C, 0x9A19, 0x98C4, 0x983B, 0x8CA7,
+ 0x860B, 0x6191, 0x8A55, 0x6F51, 0x9817, 0x64B2, 0x92EA, 0x50D5, 0x6A38,
+ 0x8B5C, 0x81CD, 0x9F4A, 0x9A0E, 0x8C48, 0x5553, 0x6C23, 0x8A16, 0x727D,
+ 0x91FA, 0x925B, 0x9077, 0x7C3D, 0x8B19, 0x9322, 0x9257, 0x6DFA, 0x8B74,
+ 0x5879, 0x69CD, 0x55C6, 0x58BB, 0x8594, 0x6436, 0x936C, 0x6A4B, 0x55AC,
+ 0x50D1, 0x7FF9, 0x7AC5, 0x7ACA, 0x6B3D, 0x89AA, 0x5BE2, 0x8F15, 0x6C2B,
+ 0x50BE, 0x9803, 0x8ACB, 0x6176, 0x74CA, 0x7AAE, 0x8DA8, 0x5340, 0x8EC0,
+ 0x9A45, 0x9F72, 0x9874, 0x6B0A, 0x52F8, 0x9D72, 0x78BA, 0x8B93, 0x9952,
+ 0x64FE, 0x7E5E, 0x71B1, 0x97CC, 0x8A8D, 0x7D09, 0x69AE, 0x7D68, 0x8EDF,
+ 0x92ED, 0x958F, 0x6F64, 0x7051, 0x85A9, 0x9C13, 0x8CFD, 0x5098, 0x55AA,
+ 0x9A37, 0x6383, 0x6F80, 0x6BBA, 0x7D17, 0x7BE9, 0x66EC, 0x9583, 0x965D,
+ 0x8D0D, 0x7E55, 0x50B7, 0x8CDE, 0x71D2, 0x7D39, 0x8CD2, 0x6368, 0x651D,
+ 0x61FE, 0x8A2D, 0x7D33, 0x5BE9, 0x5B38, 0x814E, 0x6EF2, 0x8072, 0x7E69,
+ 0x52DD, 0x8056, 0x5E2B, 0x7345, 0x6FD5, 0x8A69, 0x6642, 0x8755, 0x5BE6,
+ 0x8B58, 0x99DB, 0x52E2, 0x9069, 0x91CB, 0x98FE, 0x8996, 0x8A66, 0x58FD,
+ 0x7378, 0x6A1E, 0x8F38, 0x66F8, 0x8D16, 0x5C6C, 0x8853, 0x6A39, 0x7AEA,
+ 0x6578, 0x5E25, 0x96D9, 0x8AB0, 0x9806, 0x8AAC, 0x78A9, 0x720D, 0x7D72,
+ 0x98FC, 0x9B06, 0x8073, 0x616B, 0x980C, 0x8A1F, 0x8AA6, 0x64FB, 0x8607,
+ 0x8A34, 0x8085, 0x96D6, 0x96A8, 0x7D8F, 0x6B72, 0x5B6B, 0x640D, 0x7E2E,
+ 0x7463, 0x9396, 0x737A, 0x64BB, 0x81FA, 0x614B, 0x6524, 0x8CAA, 0x7671,
+ 0x7058, 0x58C7, 0x8B5A, 0x8AC7, 0x5606, 0x6E6F, 0x71D9, 0x6FE4, 0x7E27,
+ 0x8A0E, 0x9A30, 0x8B04, 0x92BB, 0x984C, 0x9AD4, 0x689D, 0x8CBC, 0x9435,
+ 0x5EF3, 0x807D, 0x70F4, 0x9285, 0x7D71, 0x982D, 0x5716, 0x5857, 0x5718,
+ 0x983D, 0x9D15, 0x99B1, 0x99DD, 0x6A62, 0x7AAA, 0x896A, 0x5F4E, 0x7063,
+ 0x9811, 0x842C, 0x7DB2, 0x97CB, 0x9055, 0x570D, 0x7232, 0x6FF0, 0x7DAD,
+ 0x8466, 0x5049, 0x50DE, 0x7DEF, 0x8B02, 0x885B, 0x805E, 0x7D0B, 0x7A69,
+ 0x554F, 0x64BE, 0x8778, 0x6E26, 0x7AA9, 0x55DA, 0x93A2, 0x70CF, 0x8AA3,
+ 0x7121, 0x856A, 0x5862, 0x9727, 0x52D9, 0x8AA4, 0x932B, 0x72A7, 0x8972,
+ 0x7FD2, 0x9291, 0x6232, 0x7D30, 0x8766, 0x8F44, 0x5CFD, 0x4FE0, 0x72F9,
+ 0x5687, 0x9341, 0x9BAE, 0x7E96, 0x8CE2, 0x929C, 0x9591, 0x986F, 0x96AA,
+ 0x73FE, 0x737B, 0x7E23, 0x9921, 0x61B2, 0x7DAB, 0x9472, 0x9109, 0x8A73,
+ 0x97FF, 0x9805, 0x856D, 0x56C2, 0x92B7, 0x66C9, 0x562F, 0x5354, 0x633E,
+ 0x8105, 0x8AE7, 0x5BEB, 0x7009, 0x8B1D, 0x92C5, 0x91C1, 0x8208, 0x92B9,
+ 0x7D89, 0x9808, 0x8A31, 0x7DD2, 0x7E8C, 0x8ED2, 0x61F8, 0x9078, 0x766C,
+ 0x7D62, 0x5B78, 0x52DB, 0x8A62, 0x5C0B, 0x99B4, 0x8A13, 0x8A0A, 0x905C,
+ 0x58D3, 0x9D09, 0x9D28, 0x555E, 0x4E9E, 0x8A1D, 0x95B9, 0x9E7D, 0x56B4,
+ 0x9854, 0x95BB, 0x8277, 0x53AD, 0x786F, 0x8AFA, 0x9A57, 0x9D26, 0x694A,
+ 0x63DA, 0x760D, 0x967D, 0x7662, 0x990A, 0x6A23, 0x582F, 0x8B21, 0x85E5,
+ 0x723A, 0x9801, 0x696D, 0x8449, 0x91AB, 0x92A5, 0x9824, 0x907A, 0x5100,
+ 0x87FB, 0x85DD, 0x5104, 0x61B6, 0x7FA9, 0x8A63, 0x8B70, 0x8ABC, 0x8B6F,
+ 0x7E79, 0x852D, 0x9670, 0x9280, 0x98F2, 0x96B1, 0x6AFB, 0x5B30, 0x9DF9,
+ 0x61C9, 0x7E93, 0x7469, 0x87A2, 0x71DF, 0x7192, 0x8805, 0x8D0F, 0x7A4E,
+ 0x55B2, 0x64C1, 0x50AD, 0x7670, 0x8E34, 0x512A, 0x6182, 0x90F5, 0x923E,
+ 0x7336, 0x8A98, 0x8F3F, 0x9918, 0x9B5A, 0x6F01, 0x8207, 0x5DBC, 0x8A9E,
+ 0x9B31, 0x7344, 0x8B7D, 0x9810, 0x99AD, 0x9D1B, 0x6DF5, 0x8F45, 0x5712,
+ 0x54E1, 0x5713, 0x7DE3, 0x9060, 0x9858, 0x7D04, 0x8E8D, 0x9470, 0x95B2,
+ 0x96F2, 0x9116, 0x9695, 0x904B, 0x85F4, 0x9196, 0x6688, 0x96DC, 0x8F09,
+ 0x6522, 0x66AB, 0x8D0A, 0x8D1C, 0x81DF, 0x947F, 0x68D7, 0x7AC8, 0x8CAC,
+ 0x64C7, 0x5247, 0x6FA4, 0x8CCA, 0x8D08, 0x8ECB, 0x9358, 0x9598, 0x8A50,
+ 0x9F4B, 0x50B5, 0x6C08, 0x76DE, 0x65AC, 0x8F3E, 0x5D84, 0x68E7, 0x6230,
+ 0x7DBB, 0x5F35, 0x6F32, 0x5E33, 0x8CEC, 0x8139, 0x8D99, 0x87C4, 0x8F4D,
+ 0x937A, 0x9019, 0x8C9E, 0x91DD, 0x5075, 0x8A3A, 0x93AE, 0x9663, 0x5E40,
+ 0x7665, 0x912D, 0x8B49, 0x7E54, 0x8077, 0x57F7, 0x8879, 0x7D19, 0x646F,
+ 0x64F2, 0x5E5F, 0x8CEA, 0x6EEF, 0x9418, 0x7D42, 0x7A2E, 0x816B, 0x8846,
+ 0x8B05, 0x8EF8, 0x76BA, 0x665D, 0x9A5F, 0x8AF8, 0x8A85, 0x71ED, 0x77DA,
+ 0x56D1, 0x8CAF, 0x9444, 0x7BC9, 0x99D0, 0x5C08, 0x78DA, 0x8F49, 0x8CFA,
+ 0x6A01, 0x838A, 0x88DD, 0x599D, 0x58EF, 0x72C0, 0x9310, 0x8D05, 0x589C,
+ 0x7DB4, 0x8AC4, 0x6E96, 0x6FC1, 0x8CC7, 0x6F2C, 0x7D9C, 0x7E3D, 0x7E31,
+ 0x9112, 0x8A5B, 0x7D44, 0x947D, 0x55C7, 0x5399, 0x53B4, 0x9768, 0x8D0B,
+ 0x532D, 0x5331, 0x8CFE, 0x5244, 0x528C, 0x5274, 0x50B4, 0x5000, 0x5096,
+ 0x5115, 0x5102, 0x5114, 0x513C, 0x5137, 0x50E8, 0x50C2, 0x513B, 0x5110,
+ 0x513A, 0x50C9, 0x7CF4, 0x9ECC, 0x56C5, 0x9CEC, 0x893B, 0x81E0, 0x8A01,
+ 0x8A10, 0x8A0C, 0x8A15, 0x8B33, 0x8A4E, 0x8A25, 0x8A41, 0x8A36, 0x8A46,
+ 0x8A54, 0x8A58, 0x8A52, 0x8A86, 0x8A84, 0x8A7F, 0x8A70, 0x8A7C, 0x8A75,
+ 0x8A6C, 0x8A6E, 0x8ACD, 0x8AE2, 0x8A61, 0x8A9A, 0x8AA5, 0x8A91, 0x8A92,
+ 0x8ACF, 0x8AD1, 0x8AC9, 0x8ADB, 0x8AD7, 0x8AC2, 0x8AB6, 0x8AF6, 0x8AEB,
+ 0x8B14, 0x8B01, 0x8AE4, 0x8AED, 0x8AFC, 0x8AF3, 0x8AE6, 0x8AEE, 0x8ADE,
+ 0x8B28, 0x8B9C, 0x8B16, 0x8B1A, 0x8B10, 0x8B2B, 0x8B2D, 0x8B56, 0x8B59,
+ 0x8B4E, 0x8B9E, 0x8B6B, 0x8B96, 0x9658, 0x913A, 0x9114, 0x9134, 0x90DF,
+ 0x9136, 0x9106, 0x9148, 0x82BB, 0x52F1, 0x5DF0, 0x580A, 0x58D9, 0x58E2,
+ 0x58E0, 0x58DA, 0x57E1, 0x584F, 0x5816, 0x5852, 0x581D, 0x5864, 0x858C,
+ 0x8553, 0x85F6, 0x83A7, 0x8407, 0x84EF, 0x82E7, 0x8622, 0x8526, 0x584B,
+ 0x7162, 0x8558, 0x84FD, 0x854E, 0x8588, 0x85BA, 0x7296, 0x6ECE, 0x8541,
+ 0x85CE, 0x8552, 0x84C0, 0x8452, 0x8464, 0x8494, 0x8435, 0x859F, 0x8555,
+ 0x9DAF, 0x8493, 0x7E08, 0x8546, 0x8562, 0x851E, 0x9A40, 0x863A, 0x93A3,
+ 0x8577, 0x861E, 0x85FA, 0x8604, 0x85EA, 0x861A, 0x5969, 0x5C37, 0x636B,
+ 0x6476, 0x649F, 0x6451, 0x645C, 0x64B3, 0x6504, 0x6516, 0x64F7, 0x64FC,
+ 0x651B, 0x5630, 0x5638, 0x56C8, 0x56A6, 0x5504, 0x54BC, 0x5680, 0x565D,
+ 0x5660, 0x5635, 0x55F6, 0x5666, 0x5672, 0x568C, 0x5665, 0x561C, 0x562E,
+ 0x55E9, 0x5616, 0x56C0, 0x560D, 0x56B3, 0x56C1, 0x566F, 0x8F61, 0x56B6,
+ 0x5695, 0x5707, 0x5E43, 0x5E6C, 0x5E58, 0x5E57, 0x5D87, 0x5CF4, 0x5D50,
+ 0x5D2C, 0x5DA7, 0x5DA0, 0x5D97, 0x5D0D, 0x5DB8, 0x5D81, 0x5DD4, 0x5FA0,
+ 0x7377, 0x7341, 0x736A, 0x733B, 0x736B, 0x7380, 0x737C, 0x98E0, 0x9933,
+ 0x98E9, 0x993C, 0x98EA, 0x98EB, 0x98ED, 0x98F4, 0x9909, 0x9911, 0x991B,
+ 0x9937, 0x993F, 0x9943, 0x9948, 0x9949, 0x994A, 0x994C, 0x9962, 0x5EE1,
+ 0x8CE1, 0x61FA, 0x61AE, 0x616A, 0x613E, 0x60B5, 0x6134, 0x61CC, 0x615F,
+ 0x61E8, 0x60FB, 0x6137, 0x60F2, 0x6173, 0x611C, 0x6192, 0x9582, 0x9586,
+ 0x95C8, 0x958E, 0x9594, 0x958C, 0x95E5, 0x95AD, 0x95AB, 0x9B2E, 0x95AC,
+ 0x95BE, 0x95B6, 0x9B29, 0x95BF, 0x95BD, 0x95BC, 0x95C3, 0x95CB, 0x95D4,
+ 0x95D0, 0x95D5, 0x95DE, 0x7043, 0x6F59, 0x7027, 0x7018, 0x6FFC, 0x6D87,
+ 0x6D79, 0x6E5E, 0x6FAE, 0x700F, 0x6EF8, 0x6F6F, 0x6DF6, 0x6F7F, 0x7006,
+ 0x6FA0, 0x700B, 0x7067, 0x7044, 0x7005, 0x6F77, 0x7020, 0x701F, 0x7032,
+ 0x7028, 0x705D, 0x9A2B, 0x9087, 0x9015, 0x9090, 0x5C68, 0x5F33, 0x5AF5,
+ 0x5AD7, 0x5B00, 0x5A6D, 0x5B08, 0x5B4C, 0x5AA7, 0x5AFB, 0x5B0B, 0x5B21,
+ 0x5B2A, 0x5B19, 0x99D4, 0x99DF, 0x99D9, 0x9A36, 0x9A5B, 0x99D1, 0x99D8,
+ 0x9A4D, 0x9A4A, 0x99E2, 0x9A6A, 0x9A0F, 0x9A0D, 0x9A05, 0x9A42, 0x9A2D,
+ 0x9A16, 0x9A41, 0x9A2E, 0x9A38, 0x9A43, 0x9A44, 0x9A4F, 0x9A65, 0x9A64,
+ 0x7CF9, 0x7D06, 0x7D02, 0x7D07, 0x7D08, 0x7E8A, 0x7D1C, 0x7D15, 0x7D13,
+ 0x7D3A, 0x7D32, 0x7D31, 0x7E10, 0x7D3C, 0x7D40, 0x7D3F, 0x7D5D, 0x7D4E,
+ 0x7D73, 0x7D86, 0x7D83, 0x7D88, 0x7DBE, 0x7DBA, 0x7DCB, 0x7DD4, 0x7DC4,
+ 0x7D9E, 0x7DAC, 0x7DB9, 0x7DA3, 0x7DB0, 0x7DC7, 0x7DD9, 0x7DD7, 0x7DF9,
+ 0x7DF2, 0x7E62, 0x7DE6, 0x7DF6, 0x7DF1, 0x7E0B, 0x7DE1, 0x7E09, 0x7E1D,
+ 0x7E1F, 0x7E1E, 0x7E2D, 0x7E0A, 0x7E11, 0x7E7D, 0x7E39, 0x7E35, 0x7E32,
+ 0x7E46, 0x7E45, 0x7E88, 0x7E5A, 0x7E52, 0x7E6E, 0x7E7E, 0x7E70, 0x7E6F,
+ 0x7E98, 0x74A3, 0x744B, 0x74CF, 0x980A, 0x74BD, 0x743F, 0x7489, 0x74A6,
+ 0x74D4, 0x74DA, 0x97D9, 0x97DE, 0x97DC, 0x69AA, 0x6AEA, 0x6898, 0x68D6,
+ 0x6A05, 0x689F, 0x6ADB, 0x6AF3, 0x6AE8, 0x6ADF, 0x6A89, 0x690F, 0x6A48,
+ 0x6968, 0x69BF, 0x6A3A, 0x6A9C, 0x6B12, 0x6B1E, 0x6ADD, 0x69E7, 0x6B0F,
+ 0x6B16, 0x6AEC, 0x6ADA, 0x6AF8, 0x6AB3, 0x6AE7, 0x6AA3, 0x6AD3, 0x6ADE,
+ 0x6BA4, 0x6B9E, 0x6BAE, 0x6BAB, 0x6BAF, 0x8ED4, 0x8EDB, 0x8EF2, 0x8EFB,
+ 0x8F64, 0x8EF9, 0x8EFC, 0x8EEB, 0x8EE4, 0x8F62, 0x8EFA, 0x8EFE, 0x8F0A,
+ 0x8F07, 0x8F05, 0x8F12, 0x8F26, 0x8F1E, 0x8F1F, 0x8F1C, 0x8F33, 0x8F46,
+ 0x8F54, 0x6214, 0x6227, 0x750C, 0x66C7, 0x66C4, 0x6689, 0x66D6, 0x8CC1,
+ 0x8CB0, 0x8CBA, 0x8CBD, 0x8D04, 0x8CB2, 0x8CC5, 0x8D10, 0x8CD1, 0x8CDA,
+ 0x8CD5, 0x8CEB, 0x8CE7, 0x8CFB, 0x8998, 0x89AC, 0x89A1, 0x89BF, 0x89A6,
+ 0x89AF, 0x89B2, 0x89B7, 0x6BFF, 0x6C0C, 0x6C2C, 0x7258, 0x6727, 0x8156,
+ 0x81DA, 0x811B, 0x81BE, 0x8161, 0x81CF, 0x6B5F, 0x98AE, 0x98AF, 0x98B6,
+ 0x98BC, 0x98C6, 0x98C8, 0x8F42, 0x9F4F, 0x6595, 0x716C, 0x7152, 0x7197,
+ 0x71C1, 0x71DC, 0x71FE, 0x79B0, 0x798E, 0x79AA, 0x61DF, 0x6164, 0x61E3,
+ 0x6207, 0x6FA9, 0x78EF, 0x78AD, 0x7868, 0x78B8, 0x792A, 0x7931, 0x7864,
+ 0x78FD, 0x78E7, 0x78E3, 0x9F95, 0x7798, 0x775E, 0x77BC, 0x7F86, 0x7F88,
+ 0x91D2, 0x91D3, 0x91D4, 0x91D9, 0x91D7, 0x91D5, 0x91F7, 0x91E7, 0x91E4,
+ 0x9346, 0x91F5, 0x91F9, 0x9208, 0x9226, 0x9245, 0x9211, 0x9210, 0x9201,
+ 0x9227, 0x9204, 0x9225, 0x9200, 0x923A, 0x9266, 0x9237, 0x9233, 0x9255,
+ 0x923D, 0x9238, 0x925E, 0x926C, 0x926D, 0x923F, 0x9460, 0x9230, 0x9249,
+ 0x9248, 0x924D, 0x922E, 0x9239, 0x9438, 0x92AC, 0x92A0, 0x927A, 0x92AA,
+ 0x92EE, 0x92CF, 0x9403, 0x92E3, 0x943A, 0x92B1, 0x92A6, 0x93A7, 0x9296,
+ 0x92CC, 0x92A9, 0x93F5, 0x9293, 0x927F, 0x93A9, 0x929A, 0x931A, 0x92AB,
+ 0x9283, 0x940B, 0x92A8, 0x92A3, 0x9412, 0x9338, 0x92F1, 0x93D7, 0x92E5,
+ 0x92F0, 0x92EF, 0x92E8, 0x92BC, 0x92DD, 0x92F6, 0x9426, 0x9427, 0x92C3,
+ 0x92DF, 0x92E6, 0x9312, 0x9306, 0x9369, 0x931B, 0x9340, 0x9301, 0x9315,
+ 0x932E, 0x9343, 0x9307, 0x9308, 0x931F, 0x9319, 0x9365, 0x9347, 0x9376,
+ 0x9354, 0x9364, 0x93AA, 0x9370, 0x9384, 0x93E4, 0x93D8, 0x9428, 0x9387,
+ 0x93CC, 0x9398, 0x93B8, 0x93BF, 0x93A6, 0x93B0, 0x93B5, 0x944C, 0x93E2,
+ 0x93DC, 0x93DD, 0x93CD, 0x93DE, 0x93C3, 0x93C7, 0x93D1, 0x9414, 0x941D,
+ 0x93F7, 0x9465, 0x9413, 0x946D, 0x9420, 0x9479, 0x93F9, 0x9419, 0x944A,
+ 0x9432, 0x943F, 0x9454, 0x9463, 0x937E, 0x7A61, 0x9CE9, 0x9CF6, 0x9D07,
+ 0x9D06, 0x9D23, 0x9D87, 0x9E15, 0x9D1D, 0x9D1F, 0x9DE5, 0x9D2F, 0x9DD9,
+ 0x9D30, 0x9D42, 0x9E1E, 0x9D53, 0x9E1D, 0x9D60, 0x9D52, 0x9DF3, 0x9D5C,
+ 0x9D61, 0x9D93, 0x9D6A, 0x9D6F, 0x9D89, 0x9D98, 0x9D9A, 0x9DC0, 0x9DA5,
+ 0x9DA9, 0x9DC2, 0x9DBC, 0x9E1A, 0x9DD3, 0x9DDA, 0x9DEF, 0x9DE6, 0x9DF2,
+ 0x9DF8, 0x9E0C, 0x9DFA, 0x9E1B, 0x7664, 0x7658, 0x7667, 0x7602, 0x7646,
+ 0x7647, 0x7649, 0x761E, 0x763B, 0x766D, 0x766E, 0x7669, 0x7672, 0x7AC7,
+ 0x7AB6, 0x8960, 0x8933, 0x895D, 0x8947, 0x8938, 0x8964, 0x76B8, 0x802E,
+ 0x802C, 0x8079, 0x8075, 0x9807, 0x980E, 0x980F, 0x9821, 0x981C, 0x6F41,
+ 0x9826, 0x9837, 0x984E, 0x9853, 0x9873, 0x9862, 0x9859, 0x9865, 0x986C,
+ 0x9870, 0x87E3, 0x8806, 0x8706, 0x8823, 0x87F6, 0x86FA, 0x87EF, 0x8784,
+ 0x8810, 0x87C8, 0x8811, 0x87BB, 0x87CE, 0x7F4C, 0x7BE4, 0x7B67, 0x7C69,
+ 0x7BF3, 0x7C00, 0x7BCB, 0x7C5C, 0x7C1E, 0x7C2B, 0x7C23, 0x7C6A, 0x7C5F,
+ 0x8264, 0x826B, 0x88CA, 0x7FA5, 0x7CF2, 0x7CF6, 0x7CDD, 0x7E36, 0x9EA9,
+ 0x8DB2, 0x91C5, 0x91C3, 0x9E7A, 0x8E89, 0x8E4C, 0x8E92, 0x8E7A, 0x8E55,
+ 0x8E9A, 0x8E8B, 0x8E93, 0x8E91, 0x8EA1, 0x8E63, 0x8EAA, 0x8EA6, 0x89F4,
+ 0x89F6, 0x975A, 0x9742, 0x973D, 0x9744, 0x9F54, 0x9F5F, 0x9F59, 0x9F60,
+ 0x9F5C, 0x9F66, 0x9F6C, 0x9F6A, 0x9F77, 0x9EFD, 0x9EFF, 0x9F09, 0x8B8E,
+ 0x947E, 0x93E8, 0x9B77, 0x9B74, 0x9B81, 0x9B83, 0x9B8E, 0x9C78, 0x7A4C,
+ 0x9B92, 0x9C5F, 0x9B90, 0x9BAD, 0x9B9A, 0x9BAA, 0x9B9E, 0x9C6D, 0x9BAB,
+ 0x9B9D, 0x9C58, 0x9BC1, 0x9C7A, 0x9C31, 0x9C39, 0x9C23, 0x9C37, 0x9BC0,
+ 0x9BCA, 0x9BC7, 0x9BFD, 0x9BD6, 0x9BEA, 0x9BEB, 0x9BE1, 0x9BE4, 0x9BE7,
+ 0x9BDD, 0x9BE2, 0x9BF0, 0x9BDB, 0x9BF4, 0x9BD4, 0x9C5D, 0x9C08, 0x9C10,
+ 0x9C0D, 0x9C12, 0x9C09, 0x9BFF, 0x9C20, 0x9C32, 0x9C2D, 0x9C28, 0x9C25,
+ 0x9C29, 0x9C33, 0x9C3E, 0x9C48, 0x9C3B, 0x9C35, 0x9C45, 0x9C56, 0x9C54,
+ 0x9C52, 0x9C67, 0x97C3, 0x97BD, 0x97C9, 0x9DBB, 0x9ACF, 0x9AD6, 0x9AD5,
+ 0x9B58, 0x9B4E, 0x9957, 0x995C, 0x9B22, 0x9EF7, 0x9EF2, 0x896C, 0x95C6,
+ 0x9336, 0x5F46, 0x8514, 0x7E94, 0x9F63, 0x5679, 0x9F15, 0x5641, 0x9AEE,
+ 0x8907, 0x7A40, 0x98B3, 0x95A4, 0x9B0D, 0x8FF4, 0x5F59, 0x7A6B, 0x98E2,
+ 0x50A2, 0x8591, 0x5118, 0x6372, 0x524B, 0x774F, 0x7E8D, 0x66C6, 0x77AD,
+ 0x9E75, 0x56C9, 0x9EF4, 0x6FDB, 0x61DE, 0x77C7, 0x7030, 0x9EB5, 0x884A,
+ 0x95E2, 0x97C6, 0x7C64, 0x7E34, 0x97A6, 0x9EAF, 0x56CC, 0x98B1, 0x6AAF,
+ 0x7F4E, 0x7CF0, 0x4FC2, 0x7E6B, 0x9E79, 0x56AE, 0x9B1A, 0x846F, 0x79A6,
+ 0x7C72, 0x9AD2, 0x96BB, 0x7DFB, 0x88FD, 0x7843, 0x2170, 0x2171, 0x2172,
+ 0x2173, 0x2174, 0x2175, 0x2176, 0x2177, 0x2178, 0x2179, 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, 0x3021, 0x3022, 0x3023, 0x3024, 0x3025, 0x3026, 0x3027,
+ 0x3028, 0x3029, 0x32A3, 0x338E, 0x338F, 0x339C, 0x339D, 0x339E, 0x33A1,
+ 0x33C4, 0x33CE, 0x33D1, 0x33D2, 0x33D5, 0xFE30, 0xFFE2, 0xFFE4, 0x2121,
+ 0x3231, 0x2010, 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, 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, 0x4E83, 0x4E84, 0x4E85, 0x4E87, 0x4E8A,
+ 0x4E90, 0x4E96, 0x4E97, 0x4E99, 0x4E9C, 0x4E9D, 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,
+ 0x4F87, 0x4F8A, 0x4F8C, 0x4F8E, 0x4F90, 0x4F92, 0x4F93, 0x4F95, 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, 0x4FC6,
+ 0x4FC7, 0x4FC8, 0x4FC9, 0x4FCB, 0x4FCC, 0x4FCD, 0x4FD2, 0x4FD3, 0x4FD4,
+ 0x4FD5, 0x4FD6, 0x4FD9, 0x4FDB, 0x4FE2, 0x4FE4, 0x4FE5, 0x4FE7, 0x4FEB,
+ 0x4FEC, 0x4FF0, 0x4FF2, 0x4FF4, 0x4FF5, 0x4FF6, 0x4FF7, 0x4FF9, 0x4FFB,
+ 0x4FFC, 0x4FFD, 0x4FFF, 0x5001, 0x5002, 0x5003, 0x5004, 0x5005, 0x5007,
+ 0x5008, 0x500A, 0x500E, 0x5010, 0x5013, 0x5015, 0x5016, 0x5017, 0x501B,
+ 0x501D, 0x501E, 0x5020, 0x5022, 0x5023, 0x5024, 0x5027, 0x502F, 0x5030,
+ 0x5031, 0x5032, 0x5033, 0x5034, 0x5035, 0x5036, 0x5037, 0x5038, 0x5039,
+ 0x503B, 0x503D, 0x503F, 0x5040, 0x5041, 0x5042, 0x5044, 0x5045, 0x5046,
+ 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, 0x5078, 0x5079,
+ 0x507A, 0x507C, 0x507D, 0x5081, 0x5082, 0x5083, 0x5084, 0x5086, 0x5087,
+ 0x5089, 0x508A, 0x508B, 0x508C, 0x508E, 0x508F, 0x5090, 0x5091, 0x5092,
+ 0x5093, 0x5094, 0x5095, 0x5097, 0x509A, 0x509B, 0x509C, 0x509D, 0x509E,
+ 0x509F, 0x50A0, 0x50A1, 0x50A4, 0x50A6, 0x50AA, 0x50AB, 0x50AE, 0x50AF,
+ 0x50B0, 0x50B1, 0x50B6, 0x50B8, 0x50B9, 0x50BC, 0x50BD, 0x50BF, 0x50C0,
+ 0x50C1, 0x50C3, 0x50C4, 0x50C6, 0x50C7, 0x50C8, 0x50CA, 0x50CB, 0x50CC,
+ 0x50CD, 0x50CE, 0x50D0, 0x50D2, 0x50D3, 0x50D4, 0x50D7, 0x50D8, 0x50D9,
+ 0x50DB, 0x50DC, 0x50DD, 0x50DF, 0x50E0, 0x50E1, 0x50E2, 0x50E3, 0x50E4,
+ 0x50E9, 0x50EA, 0x50EB, 0x50EF, 0x50F0, 0x50F1, 0x50F2, 0x50F4, 0x50F6,
+ 0x50F7, 0x50F8, 0x50FA, 0x50FC, 0x50FD, 0x50FE, 0x50FF, 0x5101, 0x5103,
+ 0x5105, 0x510A, 0x510C, 0x510D, 0x510E, 0x510F, 0x5111, 0x5113, 0x5116,
+ 0x5117, 0x5119, 0x511A, 0x511B, 0x511C, 0x511D, 0x511E, 0x5120, 0x5122,
+ 0x5123, 0x5124, 0x5125, 0x5126, 0x5127, 0x5128, 0x5129, 0x512B, 0x512C,
+ 0x512D, 0x512E, 0x512F, 0x5130, 0x5131, 0x5133, 0x5134, 0x5135, 0x5136,
+ 0x5138, 0x5139, 0x513D, 0x513E, 0x5142, 0x5147, 0x514A, 0x514C, 0x514E,
+ 0x514F, 0x5150, 0x5153, 0x5157, 0x5158, 0x5159, 0x515B, 0x515D, 0x515E,
+ 0x515F, 0x5160, 0x5161, 0x5163, 0x5164, 0x5166, 0x5167, 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, 0x51CE, 0x51D0, 0x51D2,
+ 0x51D3, 0x51D4, 0x51D5, 0x51D6, 0x51D7, 0x51D8, 0x51D9, 0x51DA, 0x51DC,
+ 0x51DE, 0x51DF, 0x51E2, 0x51E3, 0x51E5, 0x51E6, 0x51E7, 0x51E8, 0x51E9,
+ 0x51EA, 0x51EC, 0x51EE, 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, 0x5245,
+ 0x5246, 0x5248, 0x5249, 0x524E, 0x524F, 0x5252, 0x5253, 0x5255, 0x5257,
+ 0x5258, 0x5259, 0x525A, 0x525D, 0x525F, 0x5260, 0x5262, 0x5263, 0x5264,
+ 0x5266, 0x5268, 0x526B, 0x526C, 0x526D, 0x5270, 0x5271, 0x5273, 0x5276,
+ 0x5277, 0x5278, 0x5279, 0x527A, 0x527B, 0x527C, 0x527E, 0x5280, 0x5284,
+ 0x5285, 0x5286, 0x528B, 0x528E, 0x528F, 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, 0x52C2, 0x52C4, 0x52C5, 0x52C6,
+ 0x52C8, 0x52CA, 0x52CC, 0x52CD, 0x52CE, 0x52CF, 0x52D1, 0x52D3, 0x52D4,
+ 0x52D7, 0x52DA, 0x52DC, 0x52E0, 0x52E1, 0x52E3, 0x52E5, 0x52E6, 0x52E7,
+ 0x52E8, 0x52E9, 0x52EA, 0x52EB, 0x52EC, 0x52ED, 0x52EE, 0x52EF, 0x52F2,
+ 0x52F3, 0x52F4, 0x52F6, 0x52F7, 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, 0x5330, 0x5332,
+ 0x5333, 0x5334, 0x5335, 0x5336, 0x5337, 0x5338, 0x533C, 0x533D, 0x5342,
+ 0x5344, 0x5346, 0x534B, 0x534C, 0x534D, 0x5350, 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, 0x539B, 0x539C, 0x539E, 0x53A1, 0x53A4, 0x53A7, 0x53AA, 0x53AB,
+ 0x53AC, 0x53AF, 0x53B0, 0x53B1, 0x53B3, 0x53B5, 0x53B7, 0x53B8, 0x53B9,
+ 0x53BA, 0x53BC, 0x53BD, 0x53BE, 0x53C0, 0x53C4, 0x53C5, 0x53C6, 0x53C7,
+ 0x53CE, 0x53CF, 0x53D0, 0x53D2, 0x53D3, 0x53D5, 0x53DA, 0x53DC, 0x53DD,
+ 0x53DE, 0x53E1, 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, 0x54BE, 0x54C3,
+ 0x54C5, 0x54CA, 0x54CB, 0x54D6, 0x54D8, 0x54DB, 0x54E0, 0x54E2, 0x54E3,
+ 0x54E4, 0x54EB, 0x54EC, 0x54EF, 0x54F0, 0x54F1, 0x54F4, 0x54F5, 0x54F6,
+ 0x54F7, 0x54F8, 0x54F9, 0x54FB, 0x54FE, 0x5500, 0x5502, 0x5503, 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, 0x5551, 0x5552,
+ 0x5554, 0x5557, 0x5558, 0x5559, 0x555A, 0x555B, 0x555D, 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, 0x55AB, 0x55AD, 0x55AF, 0x55B0, 0x55B4, 0x55B6, 0x55B8,
+ 0x55BA, 0x55BC, 0x55BF, 0x55C0, 0x55C1, 0x55C2, 0x55C3, 0x55C8, 0x55CA,
+ 0x55CB, 0x55CF, 0x55D0, 0x55D5, 0x55D7, 0x55D8, 0x55D9, 0x55DB, 0x55DE,
+ 0x55E0, 0x55E2, 0x55E7, 0x55ED, 0x55EE, 0x55F0, 0x55F1, 0x55F4, 0x55F8,
+ 0x55F9, 0x55FA, 0x55FB, 0x55FC, 0x55FF, 0x5602, 0x5603, 0x5604, 0x5605,
+ 0x5607, 0x560A, 0x560B, 0x5610, 0x5611, 0x5612, 0x5613, 0x5615, 0x5619,
+ 0x561A, 0x561D, 0x5620, 0x5621, 0x5622, 0x5625, 0x5626, 0x5628, 0x562A,
+ 0x562B, 0x5633, 0x5637, 0x563A, 0x563C, 0x563D, 0x563E, 0x5640, 0x5642,
+ 0x5643, 0x5644, 0x5645, 0x5646, 0x5647, 0x5648, 0x5649, 0x564A, 0x564B,
+ 0x564F, 0x5650, 0x5651, 0x5652, 0x5653, 0x5655, 0x5656, 0x565A, 0x565B,
+ 0x565E, 0x565F, 0x5661, 0x5663, 0x5667, 0x566D, 0x566E, 0x5670, 0x5673,
+ 0x5675, 0x5677, 0x567A, 0x567D, 0x567E, 0x567F, 0x5681, 0x5682, 0x5683,
+ 0x5684, 0x5688, 0x5689, 0x568A, 0x568B, 0x568D, 0x5690, 0x5691, 0x5692,
+ 0x5694, 0x5696, 0x5697, 0x5698, 0x569A, 0x569B, 0x569C, 0x569D, 0x569E,
+ 0x569F, 0x56A0, 0x56A1, 0x56A2, 0x56A4, 0x56A5, 0x56A7, 0x56A9, 0x56AA,
+ 0x56AB, 0x56AC, 0x56AD, 0x56B0, 0x56B1, 0x56B2, 0x56B5, 0x56B8, 0x56B9,
+ 0x56BA, 0x56BB, 0x56BD, 0x56BE, 0x56BF, 0x56C3, 0x56C4, 0x56C6, 0x56C7,
+ 0x56CB, 0x56CD, 0x56CE, 0x56CF, 0x56D0, 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, 0x570C, 0x570E, 0x570F,
+ 0x5710, 0x5711, 0x5714, 0x5715, 0x5717, 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, 0x57E2, 0x57E3, 0x57E5, 0x57E6, 0x57E7, 0x57E8, 0x57E9,
+ 0x57EA, 0x57EB, 0x57EC, 0x57EE, 0x57F0, 0x57F1, 0x57F2, 0x57F3, 0x57F5,
+ 0x57F6, 0x57FB, 0x57FC, 0x57FE, 0x57FF, 0x5801, 0x5803, 0x5804, 0x5808,
+ 0x5809, 0x580C, 0x580E, 0x580F, 0x5810, 0x5812, 0x5813, 0x5814, 0x5817,
+ 0x5818, 0x581A, 0x581B, 0x581C, 0x581F, 0x5822, 0x5823, 0x5825, 0x5826,
+ 0x5827, 0x5828, 0x5829, 0x582B, 0x582C, 0x582D, 0x582E, 0x5832, 0x5833,
+ 0x5836, 0x5837, 0x5838, 0x5839, 0x583A, 0x583B, 0x583C, 0x583D, 0x583E,
+ 0x583F, 0x5840, 0x5841, 0x5842, 0x5843, 0x5845, 0x5846, 0x5847, 0x5848,
+ 0x5849, 0x584E, 0x5850, 0x5853, 0x5855, 0x5856, 0x5859, 0x585A, 0x585B,
+ 0x585C, 0x585D, 0x585F, 0x5860, 0x5861, 0x5863, 0x5866, 0x5867, 0x5868,
+ 0x5869, 0x586A, 0x586D, 0x586E, 0x586F, 0x5870, 0x5871, 0x5872, 0x5873,
+ 0x5874, 0x5876, 0x5877, 0x5878, 0x587A, 0x587B, 0x587C, 0x587D, 0x587F,
+ 0x5882, 0x5884, 0x5886, 0x5887, 0x5888, 0x588B, 0x588C, 0x588D, 0x588E,
+ 0x588F, 0x5890, 0x5891, 0x5894, 0x5895, 0x5896, 0x5897, 0x5898, 0x589B,
+ 0x589D, 0x58A0, 0x58A1, 0x58A2, 0x58A3, 0x58A4, 0x58A5, 0x58A6, 0x58A7,
+ 0x58AA, 0x58AB, 0x58AC, 0x58AD, 0x58AF, 0x58B0, 0x58B1, 0x58B2, 0x58B4,
+ 0x58B5, 0x58B6, 0x58B7, 0x58B8, 0x58B9, 0x58BA, 0x58BD, 0x58BF, 0x58C0,
+ 0x58C2, 0x58C3, 0x58C4, 0x58C6, 0x58C8, 0x58C9, 0x58CA, 0x58CB, 0x58CC,
+ 0x58CD, 0x58CE, 0x58CF, 0x58D0, 0x58D2, 0x58D4, 0x58D6, 0x58D7, 0x58DB,
+ 0x58DC, 0x58DD, 0x58E1, 0x58E3, 0x58E5, 0x58E6, 0x58E7, 0x58E8, 0x58EA,
+ 0x58ED, 0x58F1, 0x58F2, 0x58F4, 0x58F5, 0x58F7, 0x58F8, 0x58FB, 0x58FC,
+ 0x58FE, 0x58FF, 0x5900, 0x5901, 0x5903, 0x5905, 0x5906, 0x5908, 0x5909,
+ 0x590A, 0x590B, 0x590C, 0x590E, 0x5910, 0x5911, 0x5912, 0x5913, 0x5917,
+ 0x5918, 0x591B, 0x591D, 0x591E, 0x5920, 0x5921, 0x5923, 0x5926, 0x5928,
+ 0x592C, 0x5930, 0x5932, 0x5933, 0x5935, 0x5936, 0x593B, 0x593D, 0x593F,
+ 0x5940, 0x5943, 0x5945, 0x5946, 0x594A, 0x594C, 0x594D, 0x5950, 0x5952,
+ 0x5953, 0x5959, 0x595B, 0x595C, 0x595D, 0x595E, 0x595F, 0x5961, 0x5963,
+ 0x5964, 0x5966, 0x5967, 0x5968, 0x596B, 0x596D, 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, 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, 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, 0x5A68, 0x5A69, 0x5A6B, 0x5A6C,
+ 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, 0x5AA8, 0x5AA9, 0x5AAB, 0x5AAC, 0x5AAD, 0x5AAE,
+ 0x5AAF, 0x5AB0, 0x5AB1, 0x5AB4, 0x5AB6, 0x5AB7, 0x5AB9, 0x5ABA, 0x5ABB,
+ 0x5ABC, 0x5ABF, 0x5AC0, 0x5AC3, 0x5AC4, 0x5AC5, 0x5AC6, 0x5AC7, 0x5AC8,
+ 0x5ACA, 0x5ACB, 0x5ACD, 0x5ACE, 0x5ACF, 0x5AD0, 0x5AD1, 0x5AD3, 0x5AD5,
+ 0x5AD9, 0x5ADA, 0x5ADB, 0x5ADD, 0x5ADE, 0x5ADF, 0x5AE2, 0x5AE4, 0x5AE5,
+ 0x5AE7, 0x5AE8, 0x5AEA, 0x5AEC, 0x5AED, 0x5AEE, 0x5AEF, 0x5AF0, 0x5AF2,
+ 0x5AF3, 0x5AF4, 0x5AF6, 0x5AF7, 0x5AF8, 0x5AF9, 0x5AFA, 0x5AFC, 0x5AFD,
+ 0x5AFE, 0x5AFF, 0x5B01, 0x5B02, 0x5B03, 0x5B04, 0x5B05, 0x5B06, 0x5B07,
+ 0x5B0A, 0x5B0D, 0x5B0E, 0x5B0F, 0x5B10, 0x5B11, 0x5B12, 0x5B13, 0x5B14,
+ 0x5B15, 0x5B18, 0x5B1A, 0x5B1B, 0x5B1C, 0x5B1D, 0x5B1E, 0x5B1F, 0x5B20,
+ 0x5B22, 0x5B23, 0x5B24, 0x5B25, 0x5B26, 0x5B27, 0x5B28, 0x5B29, 0x5B2B,
+ 0x5B2C, 0x5B2D, 0x5B2E, 0x5B2F, 0x5B31, 0x5B33, 0x5B35, 0x5B36, 0x5B39,
+ 0x5B3A, 0x5B3B, 0x5B3C, 0x5B3D, 0x5B3E, 0x5B3F, 0x5B41, 0x5B42, 0x5B43,
+ 0x5B44, 0x5B45, 0x5B46, 0x5B47, 0x5B48, 0x5B49, 0x5B4A, 0x5B4B, 0x5B4D,
+ 0x5B4E, 0x5B4F, 0x5B52, 0x5B56, 0x5B5E, 0x5B60, 0x5B61, 0x5B67, 0x5B68,
+ 0x5B6D, 0x5B6E, 0x5B6F, 0x5B72, 0x5B74, 0x5B76, 0x5B77, 0x5B79, 0x5B7B,
+ 0x5B7C, 0x5B7E, 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, 0x5BE3, 0x5BEA, 0x5BED, 0x5BEF, 0x5BF1, 0x5BF2, 0x5BF3,
+ 0x5BF4, 0x5BF7, 0x5BFD, 0x5BFE, 0x5C00, 0x5C02, 0x5C03, 0x5C05, 0x5C0C,
+ 0x5C10, 0x5C12, 0x5C13, 0x5C17, 0x5C19, 0x5C1B, 0x5C1E, 0x5C1F, 0x5C20,
+ 0x5C21, 0x5C23, 0x5C26, 0x5C28, 0x5C29, 0x5C2A, 0x5C2B, 0x5C2D, 0x5C2E,
+ 0x5C2F, 0x5C30, 0x5C32, 0x5C33, 0x5C35, 0x5C36, 0x5C43, 0x5C44, 0x5C46,
+ 0x5C47, 0x5C4C, 0x5C4D, 0x5C52, 0x5C53, 0x5C54, 0x5C56, 0x5C57, 0x5C58,
+ 0x5C5A, 0x5C5B, 0x5C5C, 0x5C5D, 0x5C5F, 0x5C67, 0x5C69, 0x5C6A, 0x5C6B,
+ 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, 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, 0x5CF5, 0x5CF7, 0x5CF8,
+ 0x5CF9, 0x5CFA, 0x5CFC, 0x5CFE, 0x5CFF, 0x5D00, 0x5D01, 0x5D04, 0x5D05,
+ 0x5D08, 0x5D09, 0x5D0A, 0x5D0B, 0x5D0C, 0x5D0F, 0x5D10, 0x5D11, 0x5D12,
+ 0x5D13, 0x5D15, 0x5D18, 0x5D19, 0x5D1A, 0x5D1C, 0x5D1D, 0x5D1F, 0x5D20,
+ 0x5D21, 0x5D22, 0x5D23, 0x5D25, 0x5D28, 0x5D2A, 0x5D2B, 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, 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, 0x5D83, 0x5D85, 0x5D86, 0x5D88, 0x5D89, 0x5D8A, 0x5D8B, 0x5D8C,
+ 0x5D8D, 0x5D8E, 0x5D8F, 0x5D90, 0x5D91, 0x5D92, 0x5D93, 0x5D94, 0x5D95,
+ 0x5D96, 0x5D98, 0x5D9A, 0x5D9B, 0x5D9C, 0x5D9E, 0x5D9F, 0x5DA1, 0x5DA2,
+ 0x5DA3, 0x5DA4, 0x5DA5, 0x5DA6, 0x5DA8, 0x5DA9, 0x5DAA, 0x5DAB, 0x5DAC,
+ 0x5DAD, 0x5DAE, 0x5DAF, 0x5DB0, 0x5DB1, 0x5DB2, 0x5DB3, 0x5DB4, 0x5DB5,
+ 0x5DB6, 0x5DB9, 0x5DBB, 0x5DBD, 0x5DBE, 0x5DBF, 0x5DC0, 0x5DC1, 0x5DC2,
+ 0x5DC3, 0x5DC4, 0x5DC6, 0x5DC7, 0x5DC8, 0x5DC9, 0x5DCA, 0x5DCC, 0x5DCE,
+ 0x5DCF, 0x5DD0, 0x5DD1, 0x5DD3, 0x5DD5, 0x5DD6, 0x5DD7, 0x5DD8, 0x5DD9,
+ 0x5DDA, 0x5DDC, 0x5DDF, 0x5DE0, 0x5DE3, 0x5DE4, 0x5DEA, 0x5DEC, 0x5DED,
+ 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, 0x5E28,
+ 0x5E29, 0x5E2A, 0x5E2C, 0x5E2F, 0x5E30, 0x5E32, 0x5E34, 0x5E35, 0x5E39,
+ 0x5E3A, 0x5E3E, 0x5E3F, 0x5E41, 0x5E46, 0x5E47, 0x5E48, 0x5E49, 0x5E4A,
+ 0x5E4B, 0x5E4D, 0x5E4E, 0x5E4F, 0x5E50, 0x5E51, 0x5E52, 0x5E53, 0x5E56,
+ 0x5E59, 0x5E5A, 0x5E5C, 0x5E5D, 0x5E60, 0x5E64, 0x5E65, 0x5E66, 0x5E67,
+ 0x5E68, 0x5E69, 0x5E6A, 0x5E6D, 0x5E6E, 0x5E6F, 0x5E70, 0x5E71, 0x5E75,
+ 0x5E77, 0x5E81, 0x5E82, 0x5E83, 0x5E85, 0x5E88, 0x5E89, 0x5E8C, 0x5E8D,
+ 0x5E8E, 0x5E92, 0x5E98, 0x5E9B, 0x5E9D, 0x5EA1, 0x5EA2, 0x5EA3, 0x5EA4,
+ 0x5EA8, 0x5EA9, 0x5EAA, 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, 0x5EE4, 0x5EE5, 0x5EE6, 0x5EE7, 0x5EE9, 0x5EEB,
+ 0x5EED, 0x5EEE, 0x5EEF, 0x5EF0, 0x5EF1, 0x5EF2, 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, 0x5F34, 0x5F36, 0x5F37, 0x5F38, 0x5F3B, 0x5F3D, 0x5F3E,
+ 0x5F3F, 0x5F41, 0x5F42, 0x5F43, 0x5F44, 0x5F45, 0x5F47, 0x5F49, 0x5F4A,
+ 0x5F4B, 0x5F4D, 0x5F4F, 0x5F51, 0x5F54, 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, 0x5F93, 0x5F94, 0x5F96, 0x5F9A,
+ 0x5F9B, 0x5F9D, 0x5F9F, 0x5FA2, 0x5FA3, 0x5FA4, 0x5FA5, 0x5FA6, 0x5FA7,
+ 0x5FAB, 0x5FAC, 0x5FAF, 0x5FB0, 0x5FB1, 0x5FB2, 0x5FB3, 0x5FB4, 0x5FB6,
+ 0x5FB8, 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, 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, 0x60E2, 0x60E3, 0x60E4, 0x60E5,
+ 0x60EA, 0x60F5, 0x60F7, 0x60F8, 0x60FC, 0x60FD, 0x60FE, 0x60FF, 0x6102,
+ 0x6103, 0x6104, 0x6105, 0x6107, 0x610A, 0x610B, 0x610C, 0x6110, 0x6111,
+ 0x6112, 0x6113, 0x6114, 0x6116, 0x6117, 0x6118, 0x6119, 0x611D, 0x611E,
+ 0x6121, 0x6122, 0x6125, 0x6128, 0x6129, 0x612A, 0x612C, 0x612D, 0x612E,
+ 0x612F, 0x6130, 0x6131, 0x6132, 0x6133, 0x6135, 0x6136, 0x6138, 0x6139,
+ 0x613A, 0x613B, 0x613C, 0x613D, 0x6140, 0x6141, 0x6142, 0x6143, 0x6144,
+ 0x6145, 0x6146, 0x6147, 0x6149, 0x614D, 0x614F, 0x6150, 0x6152, 0x6153,
+ 0x6154, 0x6156, 0x6157, 0x6159, 0x615B, 0x615C, 0x615E, 0x6160, 0x6161,
+ 0x6165, 0x6166, 0x6169, 0x616C, 0x616D, 0x616F, 0x6171, 0x6172, 0x6174,
+ 0x6178, 0x6179, 0x617A, 0x617B, 0x617C, 0x617D, 0x617E, 0x617F, 0x6180,
+ 0x6181, 0x6183, 0x6184, 0x6185, 0x6186, 0x6187, 0x6188, 0x6189, 0x618C,
+ 0x618D, 0x618F, 0x6193, 0x6195, 0x6196, 0x6197, 0x6198, 0x6199, 0x619B,
+ 0x619C, 0x619E, 0x619F, 0x61A0, 0x61A1, 0x61A2, 0x61A3, 0x61A5, 0x61A6,
+ 0x61AA, 0x61AD, 0x61AF, 0x61B0, 0x61B1, 0x61B3, 0x61B4, 0x61B5, 0x61B8,
+ 0x61B9, 0x61BA, 0x61BB, 0x61BC, 0x61BD, 0x61BF, 0x61C0, 0x61C1, 0x61C3,
+ 0x61C4, 0x61C5, 0x61C6, 0x61CD, 0x61CE, 0x61CF, 0x61D0, 0x61D3, 0x61D5,
+ 0x61D6, 0x61D7, 0x61D8, 0x61D9, 0x61DA, 0x61DB, 0x61DC, 0x61DD, 0x61E0,
+ 0x61E1, 0x61E2, 0x61E4, 0x61E5, 0x61E7, 0x61E9, 0x61EA, 0x61EB, 0x61EC,
+ 0x61ED, 0x61EE, 0x61EF, 0x61F0, 0x61F1, 0x61F3, 0x61F4, 0x61F9, 0x61FB,
+ 0x61FD, 0x6201, 0x6202, 0x6203, 0x6204, 0x6205, 0x6209, 0x6213, 0x6219,
+ 0x621C, 0x621D, 0x621E, 0x6220, 0x6223, 0x6226, 0x6228, 0x6229, 0x622B,
+ 0x622D, 0x622F, 0x6231, 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, 0x633F, 0x6340, 0x6341,
+ 0x6344, 0x6347, 0x6348, 0x634A, 0x6351, 0x6352, 0x6353, 0x6354, 0x6356,
+ 0x6357, 0x6358, 0x6359, 0x635A, 0x635B, 0x635C, 0x635D, 0x6360, 0x6364,
+ 0x6365, 0x6366, 0x636A, 0x636C, 0x636F, 0x6370, 0x6373, 0x6374, 0x6375,
+ 0x6378, 0x6379, 0x637C, 0x637D, 0x637E, 0x637F, 0x6381, 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,
+ 0x63C1, 0x63C2, 0x63C3, 0x63C5, 0x63C7, 0x63C8, 0x63CA, 0x63CB, 0x63CC,
+ 0x63D1, 0x63D3, 0x63D4, 0x63D5, 0x63D7, 0x63D8, 0x63D9, 0x63DB, 0x63DC,
+ 0x63DD, 0x63DF, 0x63E2, 0x63E4, 0x63E5, 0x63E6, 0x63E7, 0x63E8, 0x63EB,
+ 0x63EC, 0x63EF, 0x63F0, 0x63F1, 0x63F3, 0x63F5, 0x63F7, 0x63F9, 0x63FA,
+ 0x63FB, 0x63FC, 0x63FE, 0x6403, 0x6404, 0x6406, 0x6407, 0x6408, 0x6409,
+ 0x640A, 0x640E, 0x6411, 0x6412, 0x6415, 0x6416, 0x6418, 0x6419, 0x641A,
+ 0x641D, 0x641F, 0x6422, 0x6423, 0x6424, 0x6425, 0x6427, 0x6428, 0x6429,
+ 0x642B, 0x642E, 0x642F, 0x6430, 0x6431, 0x6432, 0x6433, 0x6435, 0x6437,
+ 0x6438, 0x6439, 0x643B, 0x643C, 0x643E, 0x6440, 0x6442, 0x6443, 0x6449,
+ 0x644B, 0x644C, 0x644D, 0x644E, 0x644F, 0x6450, 0x6453, 0x6455, 0x6456,
+ 0x6457, 0x6459, 0x645A, 0x645B, 0x645D, 0x6460, 0x6461, 0x6462, 0x6463,
+ 0x6464, 0x6465, 0x6466, 0x6468, 0x646A, 0x646B, 0x646C, 0x646E, 0x6470,
+ 0x6471, 0x6472, 0x6474, 0x6475, 0x6477, 0x647C, 0x647D, 0x647E, 0x647F,
+ 0x6480, 0x6481, 0x6483, 0x6486, 0x6489, 0x648A, 0x648B, 0x648C, 0x648D,
+ 0x648E, 0x648F, 0x6490, 0x6494, 0x6497, 0x6498, 0x649A, 0x649B, 0x649C,
+ 0x649D, 0x64A0, 0x64A1, 0x64A2, 0x64A6, 0x64A7, 0x64A8, 0x64AA, 0x64AF,
+ 0x64B1, 0x64B4, 0x64B6, 0x64B9, 0x64BD, 0x64C3, 0x64C6, 0x64C8, 0x64C9,
+ 0x64CC, 0x64CF, 0x64D1, 0x64D3, 0x64D5, 0x64D6, 0x64D9, 0x64DB, 0x64DC,
+ 0x64DD, 0x64DF, 0x64E1, 0x64E3, 0x64E5, 0x64E7, 0x64E8, 0x64E9, 0x64EA,
+ 0x64EB, 0x64ED, 0x64EE, 0x64F3, 0x64F5, 0x64F6, 0x64F8, 0x64F9, 0x64FD,
+ 0x64FF, 0x6501, 0x6502, 0x6503, 0x6505, 0x6507, 0x6508, 0x650A, 0x650B,
+ 0x650C, 0x650D, 0x650E, 0x6510, 0x6511, 0x6513, 0x6515, 0x6517, 0x651A,
+ 0x651C, 0x651E, 0x651F, 0x6520, 0x6521, 0x6526, 0x6527, 0x6528, 0x6529,
+ 0x652D, 0x6530, 0x6531, 0x6532, 0x6533, 0x6537, 0x653A, 0x653C, 0x653D,
+ 0x6540, 0x6541, 0x6542, 0x6543, 0x6544, 0x6546, 0x6547, 0x654A, 0x654B,
+ 0x654D, 0x654E, 0x6550, 0x6552, 0x6553, 0x6554, 0x6558, 0x655A, 0x655C,
+ 0x655F, 0x6560, 0x6561, 0x6564, 0x6565, 0x6567, 0x6568, 0x6569, 0x656A,
+ 0x656D, 0x656E, 0x656F, 0x6571, 0x6573, 0x6576, 0x6579, 0x657A, 0x657B,
+ 0x657C, 0x657D, 0x657E, 0x657F, 0x6580, 0x6581, 0x6584, 0x6585, 0x6586,
+ 0x6588, 0x6589, 0x658A, 0x658D, 0x658E, 0x658F, 0x6592, 0x6594, 0x6596,
+ 0x6598, 0x659A, 0x659D, 0x659E, 0x65A0, 0x65A2, 0x65A3, 0x65A6, 0x65A8,
+ 0x65AA, 0x65AE, 0x65B1, 0x65B2, 0x65B3, 0x65B4, 0x65B5, 0x65B6, 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, 0x6644, 0x6645,
+ 0x6646, 0x6647, 0x6648, 0x6649, 0x664A, 0x664D, 0x664E, 0x6650, 0x6651,
+ 0x6658, 0x6659, 0x665B, 0x665C, 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, 0x668A, 0x668B, 0x668D, 0x668E, 0x668F, 0x6690,
+ 0x6692, 0x6693, 0x6694, 0x6695, 0x6698, 0x6699, 0x669A, 0x669B, 0x669C,
+ 0x669E, 0x669F, 0x66A0, 0x66A1, 0x66A3, 0x66A4, 0x66A5, 0x66A6, 0x66A9,
+ 0x66AA, 0x66AC, 0x66AD, 0x66AF, 0x66B0, 0x66B1, 0x66B2, 0x66B3, 0x66B5,
+ 0x66B6, 0x66B7, 0x66B8, 0x66BA, 0x66BB, 0x66BC, 0x66BD, 0x66BF, 0x66C0,
+ 0x66C1, 0x66C2, 0x66C3, 0x66C5, 0x66C8, 0x66CA, 0x66CB, 0x66CC, 0x66CD,
+ 0x66CE, 0x66CF, 0x66D0, 0x66D1, 0x66D2, 0x66D3, 0x66D4, 0x66D5, 0x66D7,
+ 0x66D8, 0x66DA, 0x66DE, 0x66DF, 0x66E1, 0x66E2, 0x66E3, 0x66E4, 0x66E5,
+ 0x66E7, 0x66E8, 0x66EA, 0x66EB, 0x66ED, 0x66EE, 0x66EF, 0x66F1, 0x66F5,
+ 0x66F6, 0x66FA, 0x66FB, 0x66FD, 0x6701, 0x6702, 0x6704, 0x6705, 0x6706,
+ 0x6707, 0x670C, 0x670E, 0x670F, 0x6711, 0x6712, 0x6713, 0x6716, 0x6718,
+ 0x6719, 0x671A, 0x671C, 0x671E, 0x6720, 0x6721, 0x6722, 0x6723, 0x6724,
+ 0x6725, 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, 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, 0x6899,
+ 0x689A, 0x689B, 0x689C, 0x689E, 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, 0x68D9, 0x68DB, 0x68DC,
+ 0x68DD, 0x68DE, 0x68E1, 0x68E2, 0x68E4, 0x68E5, 0x68E6, 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, 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, 0x694B,
+ 0x694C, 0x694D, 0x694E, 0x694F, 0x6950, 0x6951, 0x6952, 0x6955, 0x6956,
+ 0x6958, 0x6959, 0x695B, 0x695C, 0x695F, 0x6961, 0x6962, 0x6964, 0x6965,
+ 0x6967, 0x6969, 0x696A, 0x696C, 0x696F, 0x6970, 0x6972, 0x6973, 0x6974,
+ 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, 0x69AC, 0x69AF, 0x69B0,
+ 0x69B2, 0x69B3, 0x69B5, 0x69B6, 0x69B8, 0x69B9, 0x69BA, 0x69BC, 0x69BD,
+ 0x69BE, 0x69C0, 0x69C2, 0x69C3, 0x69C4, 0x69C5, 0x69C6, 0x69C7, 0x69C8,
+ 0x69C9, 0x69CF, 0x69D1, 0x69D2, 0x69D3, 0x69D5, 0x69D6, 0x69D7, 0x69D8,
+ 0x69D9, 0x69DA, 0x69DC, 0x69DD, 0x69DE, 0x69E1, 0x69E2, 0x69E3, 0x69E4,
+ 0x69E5, 0x69E6, 0x69E8, 0x69E9, 0x69EA, 0x69EB, 0x69EC, 0x69EE, 0x69EF,
+ 0x69F0, 0x69F1, 0x69F4, 0x69F5, 0x69F6, 0x69F7, 0x69F8, 0x69F9, 0x69FA,
+ 0x69FB, 0x69FC, 0x69FE, 0x6A00, 0x6A03, 0x6A04, 0x6A06, 0x6A07, 0x6A08,
+ 0x6A09, 0x6A0B, 0x6A0C, 0x6A0D, 0x6A0E, 0x6A0F, 0x6A10, 0x6A11, 0x6A12,
+ 0x6A14, 0x6A15, 0x6A16, 0x6A1A, 0x6A1B, 0x6A1C, 0x6A1D, 0x6A20, 0x6A22,
+ 0x6A24, 0x6A25, 0x6A26, 0x6A27, 0x6A29, 0x6A2B, 0x6A2C, 0x6A2D, 0x6A2E,
+ 0x6A30, 0x6A32, 0x6A33, 0x6A34, 0x6A36, 0x6A37, 0x6A3B, 0x6A3C, 0x6A3F,
+ 0x6A40, 0x6A41, 0x6A42, 0x6A43, 0x6A45, 0x6A46, 0x6A49, 0x6A4A, 0x6A4C,
+ 0x6A4D, 0x6A4E, 0x6A4F, 0x6A51, 0x6A52, 0x6A53, 0x6A54, 0x6A55, 0x6A56,
+ 0x6A57, 0x6A5A, 0x6A5C, 0x6A5D, 0x6A5E, 0x6A60, 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, 0x6A8A, 0x6A8B, 0x6A8C, 0x6A8D, 0x6A8F, 0x6A92, 0x6A93,
+ 0x6A95, 0x6A96, 0x6A98, 0x6A99, 0x6A9A, 0x6A9B, 0x6A9D, 0x6A9E, 0x6A9F,
+ 0x6AA1, 0x6AA4, 0x6AA5, 0x6AA6, 0x6AA7, 0x6AA8, 0x6AAA, 0x6AAD, 0x6AAE,
+ 0x6AB0, 0x6AB1, 0x6AB2, 0x6AB4, 0x6AB5, 0x6AB6, 0x6AB7, 0x6AB9, 0x6ABA,
+ 0x6ABC, 0x6ABD, 0x6ABE, 0x6ABF, 0x6AC0, 0x6AC1, 0x6AC2, 0x6AC4, 0x6AC5,
+ 0x6AC6, 0x6AC7, 0x6AC8, 0x6AC9, 0x6ACA, 0x6ACB, 0x6ACC, 0x6ACD, 0x6ACE,
+ 0x6ACF, 0x6AD0, 0x6AD1, 0x6AD2, 0x6AD4, 0x6AD5, 0x6AD6, 0x6AD7, 0x6AD8,
+ 0x6AD9, 0x6ADC, 0x6AE0, 0x6AE1, 0x6AE2, 0x6AE3, 0x6AE4, 0x6AE5, 0x6AE6,
+ 0x6AE9, 0x6AEB, 0x6AED, 0x6AEE, 0x6AEF, 0x6AF0, 0x6AF1, 0x6AF2, 0x6AF4,
+ 0x6AF5, 0x6AF6, 0x6AF7, 0x6AF9, 0x6AFA, 0x6AFC, 0x6AFD, 0x6AFE, 0x6AFF,
+ 0x6B00, 0x6B01, 0x6B02, 0x6B03, 0x6B05, 0x6B06, 0x6B07, 0x6B08, 0x6B09,
+ 0x6B0B, 0x6B0C, 0x6B0D, 0x6B0E, 0x6B10, 0x6B11, 0x6B13, 0x6B14, 0x6B15,
+ 0x6B17, 0x6B18, 0x6B19, 0x6B1A, 0x6B1B, 0x6B1C, 0x6B1D, 0x6B1F, 0x6B25,
+ 0x6B26, 0x6B28, 0x6B29, 0x6B2A, 0x6B2B, 0x6B2C, 0x6B2D, 0x6B2E, 0x6B2F,
+ 0x6B30, 0x6B31, 0x6B33, 0x6B34, 0x6B35, 0x6B36, 0x6B38, 0x6B3B, 0x6B3C,
+ 0x6B3F, 0x6B40, 0x6B41, 0x6B42, 0x6B44, 0x6B45, 0x6B48, 0x6B4A, 0x6B4B,
+ 0x6B4D, 0x6B4E, 0x6B4F, 0x6B51, 0x6B52, 0x6B53, 0x6B54, 0x6B55, 0x6B56,
+ 0x6B57, 0x6B58, 0x6B5A, 0x6B5B, 0x6B5C, 0x6B5D, 0x6B5E, 0x6B60, 0x6B68,
+ 0x6B69, 0x6B6B, 0x6B6C, 0x6B6D, 0x6B6E, 0x6B6F, 0x6B70, 0x6B71, 0x6B73,
+ 0x6B74, 0x6B75, 0x6B76, 0x6B7A, 0x6B7D, 0x6B7E, 0x6B7F, 0x6B80, 0x6B85,
+ 0x6B88, 0x6B8C, 0x6B8E, 0x6B8F, 0x6B90, 0x6B91, 0x6B94, 0x6B95, 0x6B97,
+ 0x6B99, 0x6B9C, 0x6B9D, 0x6B9F, 0x6BA0, 0x6BA2, 0x6BA3, 0x6BA5, 0x6BA6,
+ 0x6BA7, 0x6BA8, 0x6BA9, 0x6BAC, 0x6BAD, 0x6BB0, 0x6BB1, 0x6BB6, 0x6BB8,
+ 0x6BB9, 0x6BBC, 0x6BBD, 0x6BBE, 0x6BC0, 0x6BC3, 0x6BC4, 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, 0x6C00,
+ 0x6C01, 0x6C02, 0x6C03, 0x6C04, 0x6C09, 0x6C0A, 0x6C0B, 0x6C0E, 0x6C12,
+ 0x6C17, 0x6C1C, 0x6C1D, 0x6C1E, 0x6C20, 0x6C25, 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, 0x6D7A, 0x6D7B, 0x6D7D, 0x6D7E, 0x6D7F,
+ 0x6D80, 0x6D81, 0x6D83, 0x6D84, 0x6D86, 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, 0x6DED, 0x6DEF, 0x6DF0, 0x6DF2, 0x6DF4,
+ 0x6DF8, 0x6DFD, 0x6DFE, 0x6DFF, 0x6E00, 0x6E01, 0x6E02, 0x6E03, 0x6E04,
+ 0x6E06, 0x6E07, 0x6E08, 0x6E09, 0x6E0B, 0x6E0F, 0x6E12, 0x6E13, 0x6E15,
+ 0x6E18, 0x6E19, 0x6E1B, 0x6E1C, 0x6E1E, 0x6E1F, 0x6E22, 0x6E27, 0x6E28,
+ 0x6E2A, 0x6E2E, 0x6E30, 0x6E31, 0x6E33, 0x6E35, 0x6E36, 0x6E37, 0x6E39,
+ 0x6E3B, 0x6E3C, 0x6E3D, 0x6E3F, 0x6E40, 0x6E41, 0x6E42, 0x6E45, 0x6E46,
+ 0x6E47, 0x6E48, 0x6E49, 0x6E4A, 0x6E4B, 0x6E4C, 0x6E4F, 0x6E50, 0x6E51,
+ 0x6E52, 0x6E55, 0x6E57, 0x6E59, 0x6E5A, 0x6E5C, 0x6E5D, 0x6E60, 0x6E61,
+ 0x6E62, 0x6E63, 0x6E64, 0x6E65, 0x6E66, 0x6E67, 0x6E68, 0x6E69, 0x6E6A,
+ 0x6E6C, 0x6E6D, 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, 0x6E97, 0x6E99, 0x6E9A, 0x6E9B,
+ 0x6E9E, 0x6EA0, 0x6EA1, 0x6EA3, 0x6EA4, 0x6EA6, 0x6EA8, 0x6EA9, 0x6EAB,
+ 0x6EAC, 0x6EAD, 0x6EAE, 0x6EB0, 0x6EB3, 0x6EB5, 0x6EB8, 0x6EB9, 0x6EBC,
+ 0x6EBE, 0x6EBF, 0x6EC0, 0x6EC3, 0x6EC6, 0x6EC8, 0x6EC9, 0x6ECA, 0x6ECD,
+ 0x6ED0, 0x6ED2, 0x6ED6, 0x6ED8, 0x6ED9, 0x6EDB, 0x6EDC, 0x6EDD, 0x6EE3,
+ 0x6EE7, 0x6EEA, 0x6EEB, 0x6EED, 0x6EEE, 0x6EF0, 0x6EF1, 0x6EF3, 0x6EF5,
+ 0x6EF6, 0x6EFA, 0x6EFB, 0x6EFC, 0x6EFD, 0x6EFE, 0x6F00, 0x6F03, 0x6F04,
+ 0x6F05, 0x6F07, 0x6F08, 0x6F0A, 0x6F0B, 0x6F0C, 0x6F0D, 0x6F0E, 0x6F10,
+ 0x6F11, 0x6F12, 0x6F16, 0x6F17, 0x6F18, 0x6F19, 0x6F1B, 0x6F1C, 0x6F1D,
+ 0x6F1E, 0x6F1F, 0x6F21, 0x6F25, 0x6F26, 0x6F27, 0x6F28, 0x6F2E, 0x6F30,
+ 0x6F34, 0x6F35, 0x6F37, 0x6F39, 0x6F3A, 0x6F3B, 0x6F3C, 0x6F3D, 0x6F40,
+ 0x6F42, 0x6F43, 0x6F44, 0x6F45, 0x6F48, 0x6F49, 0x6F4A, 0x6F4C, 0x6F4E,
+ 0x6F4F, 0x6F50, 0x6F52, 0x6F53, 0x6F55, 0x6F56, 0x6F57, 0x6F5A, 0x6F5B,
+ 0x6F5D, 0x6F5F, 0x6F60, 0x6F61, 0x6F63, 0x6F65, 0x6F67, 0x6F68, 0x6F69,
+ 0x6F6A, 0x6F6B, 0x6F6C, 0x6F71, 0x6F73, 0x6F75, 0x6F76, 0x6F79, 0x6F7B,
+ 0x6F7D, 0x6F7E, 0x6F81, 0x6F82, 0x6F83, 0x6F85, 0x6F8A, 0x6F8B, 0x6F8F,
+ 0x6F90, 0x6F91, 0x6F92, 0x6F93, 0x6F94, 0x6F95, 0x6F96, 0x6F98, 0x6F99,
+ 0x6F9A, 0x6F9B, 0x6F9D, 0x6F9E, 0x6F9F, 0x6FA2, 0x6FA3, 0x6FA5, 0x6FA6,
+ 0x6FA8, 0x6FAA, 0x6FAB, 0x6FAC, 0x6FAD, 0x6FAF, 0x6FB0, 0x6FB2, 0x6FB4,
+ 0x6FB5, 0x6FB7, 0x6FB8, 0x6FBA, 0x6FBB, 0x6FBC, 0x6FBD, 0x6FBE, 0x6FBF,
+ 0x6FC4, 0x6FC5, 0x6FC6, 0x6FC7, 0x6FC8, 0x6FCA, 0x6FCB, 0x6FCC, 0x6FCD,
+ 0x6FCE, 0x6FCF, 0x6FD0, 0x6FD3, 0x6FD4, 0x6FD6, 0x6FD7, 0x6FD9, 0x6FDA,
+ 0x6FDC, 0x6FDD, 0x6FE2, 0x6FE3, 0x6FE5, 0x6FE6, 0x6FE7, 0x6FE8, 0x6FE9,
+ 0x6FEA, 0x6FEC, 0x6FED, 0x6FF2, 0x6FF3, 0x6FF4, 0x6FF5, 0x6FF6, 0x6FF7,
+ 0x6FF8, 0x6FF9, 0x6FFB, 0x6FFD, 0x6FFF, 0x7000, 0x7001, 0x7002, 0x7003,
+ 0x7004, 0x7007, 0x7008, 0x700A, 0x700C, 0x700D, 0x700E, 0x7010, 0x7012,
+ 0x7013, 0x7014, 0x7016, 0x7017, 0x7019, 0x701C, 0x701E, 0x7021, 0x7022,
+ 0x7024, 0x7025, 0x7026, 0x7029, 0x702A, 0x702B, 0x702C, 0x702D, 0x702E,
+ 0x702F, 0x7031, 0x7033, 0x7034, 0x7036, 0x7037, 0x7038, 0x703A, 0x703B,
+ 0x703C, 0x703D, 0x703F, 0x7040, 0x7041, 0x7042, 0x7045, 0x7046, 0x7047,
+ 0x7048, 0x7049, 0x704A, 0x704B, 0x704D, 0x704E, 0x7050, 0x7052, 0x7053,
+ 0x7054, 0x7056, 0x7057, 0x7059, 0x705A, 0x705B, 0x705C, 0x705F, 0x7060,
+ 0x7061, 0x7062, 0x7065, 0x7066, 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, 0x70D0, 0x70D1, 0x70D2, 0x70D3, 0x70D4, 0x70D5, 0x70D6,
+ 0x70D7, 0x70DA, 0x70DC, 0x70DD, 0x70DE, 0x70E0, 0x70E1, 0x70E2, 0x70E3,
+ 0x70E5, 0x70EA, 0x70EE, 0x70F0, 0x70F1, 0x70F2, 0x70F3, 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, 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,
+ 0x714B, 0x714D, 0x714F, 0x7150, 0x7151, 0x7153, 0x7154, 0x7155, 0x7156,
+ 0x7157, 0x7158, 0x7159, 0x715A, 0x715B, 0x715D, 0x715F, 0x7160, 0x7161,
+ 0x7163, 0x7165, 0x716A, 0x716B, 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, 0x7193, 0x7195, 0x7196, 0x719A,
+ 0x719B, 0x719C, 0x719D, 0x719E, 0x71A1, 0x71A2, 0x71A3, 0x71A4, 0x71A5,
+ 0x71A6, 0x71A7, 0x71A9, 0x71AA, 0x71AB, 0x71AD, 0x71AE, 0x71AF, 0x71B0,
+ 0x71B2, 0x71B4, 0x71B6, 0x71B7, 0x71B8, 0x71BA, 0x71BB, 0x71BC, 0x71BD,
+ 0x71BF, 0x71C0, 0x71C2, 0x71C4, 0x71C5, 0x71C6, 0x71C7, 0x71C9, 0x71CA,
+ 0x71CB, 0x71CC, 0x71CD, 0x71CF, 0x71D0, 0x71D1, 0x71D3, 0x71D6, 0x71D7,
+ 0x71D8, 0x71DA, 0x71DB, 0x71DD, 0x71DE, 0x71E1, 0x71E2, 0x71E3, 0x71E4,
+ 0x71E8, 0x71E9, 0x71EA, 0x71EB, 0x71EC, 0x71EF, 0x71F0, 0x71F1, 0x71F2,
+ 0x71F3, 0x71F5, 0x71F6, 0x71F7, 0x71F8, 0x71FA, 0x71FB, 0x71FD, 0x71FF,
+ 0x7200, 0x7201, 0x7202, 0x7203, 0x7204, 0x7205, 0x7207, 0x7208, 0x7209,
+ 0x720A, 0x720B, 0x720C, 0x720E, 0x720F, 0x7211, 0x7212, 0x7213, 0x7214,
+ 0x7215, 0x7216, 0x7217, 0x7218, 0x7219, 0x721A, 0x721C, 0x721E, 0x721F,
+ 0x7220, 0x7221, 0x7222, 0x7223, 0x7224, 0x7225, 0x7226, 0x7227, 0x7229,
+ 0x722B, 0x722D, 0x722E, 0x722F, 0x7233, 0x7234, 0x723C, 0x7240, 0x7241,
+ 0x7242, 0x7243, 0x7244, 0x7245, 0x7246, 0x7249, 0x724A, 0x724B, 0x724E,
+ 0x724F, 0x7250, 0x7251, 0x7253, 0x7254, 0x7255, 0x7257, 0x725A, 0x725C,
+ 0x725E, 0x7260, 0x7263, 0x7264, 0x7265, 0x7268, 0x726A, 0x726B, 0x726C,
+ 0x726D, 0x7270, 0x7271, 0x7273, 0x7274, 0x7276, 0x7277, 0x7278, 0x727B,
+ 0x727C, 0x7282, 0x7283, 0x7285, 0x7286, 0x7287, 0x7288, 0x7289, 0x728C,
+ 0x728E, 0x7290, 0x7291, 0x7293, 0x7294, 0x7295, 0x7297, 0x7298, 0x7299,
+ 0x729A, 0x729B, 0x729C, 0x729D, 0x729E, 0x72A0, 0x72A1, 0x72A3, 0x72A4,
+ 0x72A5, 0x72A6, 0x72A8, 0x72A9, 0x72AA, 0x72AB, 0x72AE, 0x72B1, 0x72B2,
+ 0x72B3, 0x72B5, 0x72BA, 0x72BB, 0x72BC, 0x72BD, 0x72BE, 0x72BF, 0x72C5,
+ 0x72C6, 0x72C7, 0x72C9, 0x72CA, 0x72CB, 0x72CC, 0x72CF, 0x72D1, 0x72D3,
+ 0x72D4, 0x72D5, 0x72D6, 0x72D8, 0x72DA, 0x72DB, 0x72DC, 0x72DD, 0x72DF,
+ 0x72E2, 0x72E3, 0x72E4, 0x72E5, 0x72E6, 0x72E7, 0x72EA, 0x72EB, 0x72F5,
+ 0x72F6, 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, 0x733A,
+ 0x733C, 0x733D, 0x7340, 0x7342, 0x7343, 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, 0x7369, 0x736E,
+ 0x7371, 0x7373, 0x7374, 0x7376, 0x7379, 0x737D, 0x737F, 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, 0x73F8,
+ 0x73F9, 0x73FA, 0x73FB, 0x73FC, 0x73FD, 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, 0x7440, 0x7442, 0x7443, 0x7444, 0x7445, 0x7446, 0x7447,
+ 0x7448, 0x7449, 0x744A, 0x744C, 0x744D, 0x744E, 0x744F, 0x7450, 0x7451,
+ 0x7452, 0x7453, 0x7454, 0x7456, 0x7458, 0x745D, 0x7460, 0x7461, 0x7462,
+ 0x7464, 0x7465, 0x7466, 0x7467, 0x7468, 0x746B, 0x746C, 0x746E, 0x746F,
+ 0x7471, 0x7472, 0x7473, 0x7474, 0x7475, 0x7478, 0x7479, 0x747A, 0x747B,
+ 0x747C, 0x747D, 0x747F, 0x7482, 0x7484, 0x7485, 0x7486, 0x7488, 0x748A,
+ 0x748C, 0x748D, 0x748F, 0x7491, 0x7492, 0x7493, 0x7494, 0x7495, 0x7496,
+ 0x7497, 0x7498, 0x7499, 0x749A, 0x749B, 0x749D, 0x749F, 0x74A0, 0x74A1,
+ 0x74A2, 0x74A4, 0x74A5, 0x74AA, 0x74AB, 0x74AC, 0x74AD, 0x74AE, 0x74AF,
+ 0x74B1, 0x74B2, 0x74B3, 0x74B4, 0x74B5, 0x74B6, 0x74B7, 0x74B8, 0x74B9,
+ 0x74BB, 0x74BC, 0x74BE, 0x74BF, 0x74C0, 0x74C1, 0x74C2, 0x74C3, 0x74C4,
+ 0x74C5, 0x74C6, 0x74C7, 0x74C8, 0x74C9, 0x74CB, 0x74CC, 0x74CD, 0x74CE,
+ 0x74D0, 0x74D1, 0x74D3, 0x74D5, 0x74D6, 0x74D7, 0x74D8, 0x74D9, 0x74DB,
+ 0x74DD, 0x74DF, 0x74E1, 0x74E5, 0x74E7, 0x74E8, 0x74E9, 0x74EA, 0x74EB,
+ 0x74EC, 0x74ED, 0x74F0, 0x74F1, 0x74F2, 0x74F3, 0x74F5, 0x74F8, 0x74F9,
+ 0x74FA, 0x74FB, 0x74FC, 0x74FD, 0x74FE, 0x7500, 0x7501, 0x7502, 0x7503,
+ 0x7505, 0x7506, 0x7507, 0x7508, 0x7509, 0x750A, 0x750B, 0x750E, 0x7510,
+ 0x7512, 0x7514, 0x7515, 0x7516, 0x7517, 0x751B, 0x751D, 0x751E, 0x7520,
+ 0x7521, 0x7522, 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, 0x755E, 0x755F, 0x7560, 0x7561, 0x7563, 0x7564,
+ 0x7567, 0x7568, 0x7569, 0x756C, 0x756D, 0x756E, 0x756F, 0x7570, 0x7571,
+ 0x7573, 0x7575, 0x7577, 0x757A, 0x757B, 0x757C, 0x757D, 0x757E, 0x7580,
+ 0x7581, 0x7582, 0x7584, 0x7585, 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, 0x75DA, 0x75DC, 0x75DD, 0x75DF, 0x75E0,
+ 0x75E1, 0x75E5, 0x75E9, 0x75EC, 0x75ED, 0x75EE, 0x75EF, 0x75F2, 0x75F3,
+ 0x75F5, 0x75F6, 0x75F7, 0x75F8, 0x75FA, 0x75FB, 0x75FD, 0x75FE, 0x7604,
+ 0x7606, 0x7607, 0x7608, 0x7609, 0x760E, 0x760F, 0x7611, 0x7612, 0x7613,
+ 0x7614, 0x7616, 0x761A, 0x761C, 0x761D, 0x7623, 0x7628, 0x762C, 0x762E,
+ 0x762F, 0x7631, 0x7632, 0x7636, 0x7637, 0x7639, 0x763A, 0x763D, 0x7641,
+ 0x7644, 0x7645, 0x7648, 0x764A, 0x764B, 0x764E, 0x764F, 0x7650, 0x7651,
+ 0x7652, 0x7653, 0x7655, 0x7657, 0x7659, 0x765A, 0x765B, 0x765D, 0x7660,
+ 0x7661, 0x7666, 0x7668, 0x766A, 0x7673, 0x7674, 0x7675, 0x7676, 0x7677,
+ 0x7679, 0x767A, 0x767F, 0x7680, 0x7681, 0x7683, 0x7685, 0x7689, 0x768A,
+ 0x768C, 0x768D, 0x768F, 0x7690, 0x7692, 0x7694, 0x7695, 0x7697, 0x7698,
+ 0x769B, 0x769C, 0x769D, 0x769E, 0x769F, 0x76A0, 0x76A1, 0x76A2, 0x76A3,
+ 0x76A5, 0x76A6, 0x76A7, 0x76A8, 0x76A9, 0x76AA, 0x76AB, 0x76AC, 0x76AD,
+ 0x76AF, 0x76B0, 0x76B3, 0x76B5, 0x76B6, 0x76B7, 0x76B9, 0x76BB, 0x76BC,
+ 0x76BD, 0x76BE, 0x76C0, 0x76C1, 0x76C3, 0x76C4, 0x76C7, 0x76C9, 0x76CB,
+ 0x76CC, 0x76D3, 0x76D5, 0x76D9, 0x76DA, 0x76DC, 0x76DD, 0x76E0, 0x76E2,
+ 0x76E6, 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, 0x7752, 0x7753, 0x7754, 0x7755,
+ 0x7756, 0x7757, 0x7758, 0x7759, 0x775C, 0x775D, 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, 0x7799, 0x779A,
+ 0x779B, 0x779C, 0x779D, 0x77A1, 0x77A3, 0x77A4, 0x77A6, 0x77A8, 0x77AB,
+ 0x77AE, 0x77AF, 0x77B1, 0x77B2, 0x77B4, 0x77B6, 0x77B7, 0x77B8, 0x77B9,
+ 0x77BA, 0x77BE, 0x77C0, 0x77C1, 0x77C2, 0x77C3, 0x77C4, 0x77C5, 0x77C6,
+ 0x77C8, 0x77C9, 0x77CA, 0x77CB, 0x77CC, 0x77CE, 0x77CF, 0x77D0, 0x77D1,
+ 0x77D2, 0x77D3, 0x77D4, 0x77D5, 0x77D6, 0x77D8, 0x77D9, 0x77DD, 0x77DE,
+ 0x77DF, 0x77E0, 0x77E1, 0x77E4, 0x77E6, 0x77E8, 0x77EA, 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, 0x7844, 0x7846, 0x7848,
+ 0x7849, 0x784A, 0x784B, 0x784D, 0x784F, 0x7851, 0x7853, 0x7854, 0x7858,
+ 0x7859, 0x785A, 0x785B, 0x785C, 0x785E, 0x785F, 0x7860, 0x7861, 0x7862,
+ 0x7863, 0x7865, 0x7866, 0x7867, 0x7869, 0x7870, 0x7871, 0x7872, 0x7873,
+ 0x7874, 0x7875, 0x7876, 0x7878, 0x7879, 0x787A, 0x787B, 0x787D, 0x787E,
+ 0x787F, 0x7880, 0x7881, 0x7882, 0x7883, 0x7884, 0x7885, 0x7886, 0x7888,
+ 0x788A, 0x788B, 0x788F, 0x7890, 0x7892, 0x7894, 0x7895, 0x7896, 0x7899,
+ 0x789D, 0x789E, 0x78A0, 0x78A2, 0x78A4, 0x78A6, 0x78A8, 0x78AA, 0x78AB,
+ 0x78AC, 0x78AE, 0x78AF, 0x78B5, 0x78B6, 0x78B7, 0x78BB, 0x78BD, 0x78BF,
+ 0x78C0, 0x78C2, 0x78C3, 0x78C4, 0x78C6, 0x78C7, 0x78C8, 0x78CC, 0x78CD,
+ 0x78CE, 0x78CF, 0x78D1, 0x78D2, 0x78D3, 0x78D6, 0x78D7, 0x78D8, 0x78DB,
+ 0x78DC, 0x78DD, 0x78DE, 0x78DF, 0x78E0, 0x78E1, 0x78E2, 0x78E4, 0x78E5,
+ 0x78E6, 0x78E9, 0x78EA, 0x78EB, 0x78ED, 0x78EE, 0x78F0, 0x78F1, 0x78F3,
+ 0x78F5, 0x78F6, 0x78F8, 0x78F9, 0x78FB, 0x78FC, 0x78FE, 0x78FF, 0x7900,
+ 0x7902, 0x7903, 0x7904, 0x7906, 0x7907, 0x7908, 0x7909, 0x790A, 0x790B,
+ 0x790C, 0x790D, 0x790F, 0x7910, 0x7911, 0x7912, 0x7914, 0x7915, 0x7916,
+ 0x7917, 0x7918, 0x791A, 0x791B, 0x791C, 0x791D, 0x791F, 0x7920, 0x7921,
+ 0x7922, 0x7923, 0x7925, 0x7927, 0x7928, 0x7929, 0x792D, 0x792E, 0x792F,
+ 0x7930, 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, 0x7990, 0x7991, 0x7992, 0x7993, 0x7994,
+ 0x7995, 0x7996, 0x7997, 0x7998, 0x7999, 0x799B, 0x799C, 0x799D, 0x799E,
+ 0x799F, 0x79A0, 0x79A1, 0x79A2, 0x79A3, 0x79A4, 0x79A5, 0x79A8, 0x79A9,
+ 0x79AB, 0x79AC, 0x79AD, 0x79AF, 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, 0x7A1D,
+ 0x7A1F, 0x7A21, 0x7A22, 0x7A24, 0x7A25, 0x7A26, 0x7A27, 0x7A28, 0x7A29,
+ 0x7A2A, 0x7A2B, 0x7A2C, 0x7A2D, 0x7A2F, 0x7A30, 0x7A32, 0x7A34, 0x7A35,
+ 0x7A36, 0x7A38, 0x7A3A, 0x7A3E, 0x7A41, 0x7A42, 0x7A43, 0x7A44, 0x7A45,
+ 0x7A47, 0x7A48, 0x7A49, 0x7A4A, 0x7A4B, 0x7A4F, 0x7A50, 0x7A52, 0x7A53,
+ 0x7A54, 0x7A55, 0x7A56, 0x7A58, 0x7A59, 0x7A5A, 0x7A5B, 0x7A5C, 0x7A5D,
+ 0x7A5E, 0x7A5F, 0x7A60, 0x7A63, 0x7A64, 0x7A65, 0x7A66, 0x7A67, 0x7A68,
+ 0x7A6A, 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, 0x7AA3, 0x7AA4, 0x7AA7, 0x7AAB, 0x7AAF,
+ 0x7AB0, 0x7AB1, 0x7AB2, 0x7AB4, 0x7AB5, 0x7AB7, 0x7AB8, 0x7AB9, 0x7ABB,
+ 0x7ABC, 0x7ABD, 0x7ABE, 0x7AC0, 0x7AC1, 0x7AC2, 0x7AC3, 0x7AC6, 0x7AC9,
+ 0x7ACC, 0x7ACD, 0x7ACE, 0x7ACF, 0x7AD0, 0x7AD1, 0x7AD2, 0x7AD3, 0x7AD4,
+ 0x7AD5, 0x7AD7, 0x7AD8, 0x7ADA, 0x7ADB, 0x7ADC, 0x7ADD, 0x7AE1, 0x7AE2,
+ 0x7AE4, 0x7AE7, 0x7AE8, 0x7AE9, 0x7AEB, 0x7AEC, 0x7AEE, 0x7AF0, 0x7AF1,
+ 0x7AF2, 0x7AF3, 0x7AF4, 0x7AF5, 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, 0x7B2F, 0x7B30,
+ 0x7B32, 0x7B34, 0x7B35, 0x7B36, 0x7B37, 0x7B39, 0x7B3B, 0x7B3D, 0x7B3F,
+ 0x7B40, 0x7B41, 0x7B42, 0x7B43, 0x7B44, 0x7B48, 0x7B4A, 0x7B4D, 0x7B4E,
+ 0x7B53, 0x7B55, 0x7B57, 0x7B59, 0x7B5C, 0x7B5E, 0x7B5F, 0x7B61, 0x7B63,
+ 0x7B64, 0x7B65, 0x7B66, 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, 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, 0x7BC2, 0x7BC3, 0x7BC5,
+ 0x7BC8, 0x7BCA, 0x7BCD, 0x7BCE, 0x7BCF, 0x7BD0, 0x7BD2, 0x7BD4, 0x7BD5,
+ 0x7BD6, 0x7BD7, 0x7BD8, 0x7BDB, 0x7BDC, 0x7BDE, 0x7BDF, 0x7BE0, 0x7BE2,
+ 0x7BE3, 0x7BE7, 0x7BE8, 0x7BEB, 0x7BEC, 0x7BED, 0x7BEF, 0x7BF0, 0x7BF2,
+ 0x7BF4, 0x7BF5, 0x7BF6, 0x7BF8, 0x7BF9, 0x7BFA, 0x7BFB, 0x7BFD, 0x7BFF,
+ 0x7C01, 0x7C02, 0x7C03, 0x7C04, 0x7C05, 0x7C06, 0x7C08, 0x7C09, 0x7C0A,
+ 0x7C0E, 0x7C10, 0x7C11, 0x7C12, 0x7C13, 0x7C14, 0x7C15, 0x7C17, 0x7C18,
+ 0x7C19, 0x7C1A, 0x7C1B, 0x7C1C, 0x7C1D, 0x7C20, 0x7C22, 0x7C24, 0x7C25,
+ 0x7C28, 0x7C29, 0x7C2C, 0x7C2D, 0x7C2E, 0x7C2F, 0x7C30, 0x7C31, 0x7C32,
+ 0x7C33, 0x7C34, 0x7C35, 0x7C36, 0x7C37, 0x7C39, 0x7C3A, 0x7C3B, 0x7C3C,
+ 0x7C42, 0x7C44, 0x7C45, 0x7C46, 0x7C47, 0x7C48, 0x7C49, 0x7C4A, 0x7C4B,
+ 0x7C4E, 0x7C4F, 0x7C50, 0x7C51, 0x7C52, 0x7C53, 0x7C54, 0x7C55, 0x7C56,
+ 0x7C57, 0x7C58, 0x7C59, 0x7C5A, 0x7C5B, 0x7C5D, 0x7C5E, 0x7C61, 0x7C62,
+ 0x7C63, 0x7C65, 0x7C66, 0x7C67, 0x7C68, 0x7C6B, 0x7C6D, 0x7C6F, 0x7C70,
+ 0x7C71, 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, 0x7CBF, 0x7CC0, 0x7CC2, 0x7CC3,
+ 0x7CC4, 0x7CC6, 0x7CC9, 0x7CCB, 0x7CCE, 0x7CCF, 0x7CD0, 0x7CD1, 0x7CD2,
+ 0x7CD3, 0x7CD4, 0x7CD8, 0x7CDA, 0x7CDB, 0x7CE1, 0x7CE2, 0x7CE3, 0x7CE4,
+ 0x7CE5, 0x7CE6, 0x7CE9, 0x7CEA, 0x7CEB, 0x7CEC, 0x7CED, 0x7CEE, 0x7CF1,
+ 0x7CF3, 0x7CF5, 0x7CF7, 0x7CFA, 0x7CFC, 0x7CFD, 0x7CFF, 0x7D01, 0x7D03,
+ 0x7D0C, 0x7D0E, 0x7D0F, 0x7D11, 0x7D12, 0x7D16, 0x7D18, 0x7D1D, 0x7D1E,
+ 0x7D1F, 0x7D23, 0x7D24, 0x7D25, 0x7D26, 0x7D28, 0x7D29, 0x7D2A, 0x7D2C,
+ 0x7D2D, 0x7D2E, 0x7D34, 0x7D35, 0x7D36, 0x7D37, 0x7D38, 0x7D3B, 0x7D3D,
+ 0x7D3E, 0x7D41, 0x7D43, 0x7D45, 0x7D47, 0x7D48, 0x7D49, 0x7D4A, 0x7D4B,
+ 0x7D4C, 0x7D4D, 0x7D4F, 0x7D51, 0x7D52, 0x7D53, 0x7D54, 0x7D55, 0x7D56,
+ 0x7D57, 0x7D58, 0x7D59, 0x7D5A, 0x7D5B, 0x7D5C, 0x7D5F, 0x7D60, 0x7D63,
+ 0x7D64, 0x7D65, 0x7D67, 0x7D69, 0x7D6A, 0x7D6B, 0x7D6C, 0x7D6D, 0x7D6F,
+ 0x7D70, 0x7D74, 0x7D75, 0x7D78, 0x7D7A, 0x7D7B, 0x7D7C, 0x7D7D, 0x7D7E,
+ 0x7D7F, 0x7D80, 0x7D82, 0x7D84, 0x7D85, 0x7D87, 0x7D8A, 0x7D8B, 0x7D8C,
+ 0x7D8D, 0x7D8E, 0x7D90, 0x7D91, 0x7D92, 0x7D94, 0x7D95, 0x7D96, 0x7D97,
+ 0x7D98, 0x7D99, 0x7D9A, 0x7D9B, 0x7D9D, 0x7D9F, 0x7DA0, 0x7DA1, 0x7DA4,
+ 0x7DA5, 0x7DA7, 0x7DA8, 0x7DA9, 0x7DAA, 0x7DAF, 0x7DB5, 0x7DB6, 0x7DB7,
+ 0x7DBC, 0x7DC0, 0x7DC1, 0x7DC2, 0x7DC3, 0x7DC5, 0x7DC6, 0x7DC8, 0x7DC9,
+ 0x7DCC, 0x7DCD, 0x7DCE, 0x7DCF, 0x7DD0, 0x7DD3, 0x7DD5, 0x7DD6, 0x7DDA,
+ 0x7DDB, 0x7DDC, 0x7DDF, 0x7DE2, 0x7DE4, 0x7DE5, 0x7DE7, 0x7DEA, 0x7DEB,
+ 0x7DED, 0x7DEE, 0x7DF0, 0x7DF3, 0x7DF5, 0x7DF7, 0x7DF8, 0x7DFA, 0x7DFC,
+ 0x7DFD, 0x7DFE, 0x7DFF, 0x7E00, 0x7E01, 0x7E02, 0x7E03, 0x7E04, 0x7E05,
+ 0x7E06, 0x7E07, 0x7E0C, 0x7E0D, 0x7E0E, 0x7E0F, 0x7E12, 0x7E13, 0x7E14,
+ 0x7E15, 0x7E16, 0x7E17, 0x7E18, 0x7E19, 0x7E1A, 0x7E1C, 0x7E20, 0x7E21,
+ 0x7E22, 0x7E24, 0x7E25, 0x7E26, 0x7E28, 0x7E29, 0x7E2A, 0x7E2C, 0x7E2F,
+ 0x7E30, 0x7E33, 0x7E38, 0x7E3A, 0x7E3C, 0x7E3F, 0x7E40, 0x7E42, 0x7E43,
+ 0x7E44, 0x7E48, 0x7E49, 0x7E4A, 0x7E4B, 0x7E4C, 0x7E4D, 0x7E4E, 0x7E4F,
+ 0x7E50, 0x7E51, 0x7E53, 0x7E56, 0x7E57, 0x7E58, 0x7E59, 0x7E5B, 0x7E5C,
+ 0x7E5D, 0x7E5F, 0x7E60, 0x7E61, 0x7E63, 0x7E64, 0x7E65, 0x7E66, 0x7E67,
+ 0x7E68, 0x7E6C, 0x7E71, 0x7E72, 0x7E74, 0x7E75, 0x7E76, 0x7E77, 0x7E78,
+ 0x7E7A, 0x7E7B, 0x7E7F, 0x7E80, 0x7E81, 0x7E83, 0x7E84, 0x7E85, 0x7E86,
+ 0x7E87, 0x7E89, 0x7E8B, 0x7E8E, 0x7E90, 0x7E91, 0x7E92, 0x7E95, 0x7E97,
+ 0x7E99, 0x7E9A, 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, 0x7F4D, 0x7F4F, 0x7F52, 0x7F53, 0x7F56,
+ 0x7F59, 0x7F5B, 0x7F5C, 0x7F5D, 0x7F5E, 0x7F60, 0x7F63, 0x7F64, 0x7F65,
+ 0x7F66, 0x7F67, 0x7F6B, 0x7F6C, 0x7F6D, 0x7F6F, 0x7F73, 0x7F75, 0x7F76,
+ 0x7F78, 0x7F7A, 0x7F7B, 0x7F7C, 0x7F7D, 0x7F7F, 0x7F80, 0x7F82, 0x7F83,
+ 0x7F84, 0x7F87, 0x7F89, 0x7F8B, 0x7F8D, 0x7F8F, 0x7F90, 0x7F91, 0x7F92,
+ 0x7F93, 0x7F95, 0x7F96, 0x7F97, 0x7F98, 0x7F99, 0x7F9B, 0x7F9C, 0x7FA0,
+ 0x7FA2, 0x7FA3, 0x7FA6, 0x7FA8, 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, 0x7FD3, 0x7FD6, 0x7FD7, 0x7FD9, 0x7FDA,
+ 0x7FDB, 0x7FDC, 0x7FDD, 0x7FDE, 0x7FE2, 0x7FE3, 0x7FE4, 0x7FE7, 0x7FE8,
+ 0x7FEA, 0x7FEB, 0x7FEC, 0x7FED, 0x7FEF, 0x7FF2, 0x7FF4, 0x7FF5, 0x7FF6,
+ 0x7FF7, 0x7FF8, 0x7FFA, 0x7FFD, 0x7FFE, 0x7FFF, 0x8002, 0x8007, 0x8008,
+ 0x8009, 0x800A, 0x800E, 0x800F, 0x8011, 0x8013, 0x801A, 0x801B, 0x801D,
+ 0x801E, 0x801F, 0x8021, 0x8023, 0x8024, 0x802B, 0x802D, 0x802F, 0x8030,
+ 0x8032, 0x8034, 0x8039, 0x803A, 0x803C, 0x803E, 0x8040, 0x8041, 0x8044,
+ 0x8045, 0x8047, 0x8048, 0x8049, 0x804E, 0x804F, 0x8050, 0x8051, 0x8053,
+ 0x8055, 0x8057, 0x8059, 0x805B, 0x805C, 0x805D, 0x805F, 0x8060, 0x8061,
+ 0x8062, 0x8063, 0x8064, 0x8065, 0x8066, 0x8067, 0x8068, 0x806B, 0x806C,
+ 0x806D, 0x806E, 0x8074, 0x8078, 0x807A, 0x807B, 0x807C, 0x8081, 0x8082,
+ 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, 0x8107, 0x8108, 0x810B, 0x810C, 0x8115, 0x8117, 0x8119, 0x811C,
+ 0x811D, 0x811F, 0x8120, 0x8121, 0x8122, 0x8123, 0x8124, 0x8125, 0x8126,
+ 0x8127, 0x8128, 0x8129, 0x812A, 0x812B, 0x812D, 0x812E, 0x8130, 0x8133,
+ 0x8134, 0x8135, 0x8137, 0x813A, 0x813B, 0x813C, 0x813D, 0x813F, 0x8140,
+ 0x8141, 0x8142, 0x8143, 0x8144, 0x8145, 0x8147, 0x8149, 0x814D, 0x814F,
+ 0x8152, 0x8157, 0x8158, 0x815B, 0x815C, 0x815D, 0x815E, 0x815F, 0x8162,
+ 0x8163, 0x8164, 0x8168, 0x816A, 0x816C, 0x816F, 0x8172, 0x8173, 0x8175,
+ 0x8176, 0x8177, 0x8181, 0x8183, 0x8184, 0x8185, 0x8186, 0x8187, 0x8189,
+ 0x818B, 0x818C, 0x818D, 0x818E, 0x8190, 0x8192, 0x8193, 0x8194, 0x8195,
+ 0x8196, 0x8197, 0x8199, 0x819E, 0x819F, 0x81A1, 0x81A2, 0x81A4, 0x81A5,
+ 0x81A7, 0x81AB, 0x81AC, 0x81AD, 0x81AE, 0x81AF, 0x81B0, 0x81B1, 0x81B2,
+ 0x81B4, 0x81B5, 0x81B6, 0x81B7, 0x81B8, 0x81B9, 0x81BC, 0x81C4, 0x81C5,
+ 0x81C7, 0x81C8, 0x81CB, 0x81CE, 0x81D0, 0x81D1, 0x81D2, 0x81D3, 0x81D4,
+ 0x81D5, 0x81D6, 0x81D7, 0x81D9, 0x81DB, 0x81DC, 0x81DD, 0x81DE, 0x81E1,
+ 0x81E2, 0x81E4, 0x81E5, 0x81E6, 0x81E9, 0x81EB, 0x81EE, 0x81EF, 0x81F0,
+ 0x81F1, 0x81F2, 0x81F5, 0x81F6, 0x81F7, 0x81F8, 0x81F9, 0x81FD, 0x81FF,
+ 0x8203, 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, 0x825B,
+ 0x825C, 0x825D, 0x825E, 0x8260, 0x8261, 0x8262, 0x8263, 0x8265, 0x8267,
+ 0x8269, 0x826A, 0x826C, 0x826D, 0x8275, 0x8276, 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, 0x82BC, 0x82BF, 0x82C0,
+ 0x82C2, 0x82C3, 0x82C5, 0x82C6, 0x82C9, 0x82D0, 0x82D6, 0x82D9, 0x82DA,
+ 0x82DD, 0x82E2, 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, 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, 0x838B, 0x838C, 0x838D, 0x838F, 0x8390,
+ 0x8391, 0x8394, 0x8395, 0x8397, 0x8399, 0x839A, 0x839D, 0x839F, 0x83A1,
+ 0x83A3, 0x83A4, 0x83A5, 0x83A6, 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, 0x83EE, 0x83F3, 0x83F4, 0x83F5, 0x83F6,
+ 0x83F7, 0x83FA, 0x83FB, 0x83FC, 0x83FE, 0x83FF, 0x8400, 0x8402, 0x8405,
+ 0x8408, 0x8409, 0x8410, 0x8412, 0x8413, 0x8414, 0x8415, 0x8416, 0x8417,
+ 0x8419, 0x841A, 0x841B, 0x841E, 0x841F, 0x8420, 0x8421, 0x8422, 0x8423,
+ 0x8429, 0x842A, 0x842B, 0x842D, 0x842E, 0x842F, 0x8430, 0x8432, 0x8433,
+ 0x8434, 0x8436, 0x8437, 0x8439, 0x843A, 0x843B, 0x843E, 0x843F, 0x8440,
+ 0x8441, 0x8442, 0x8443, 0x8444, 0x8445, 0x8447, 0x8448, 0x844A, 0x844B,
+ 0x844C, 0x844D, 0x844E, 0x844F, 0x8450, 0x8453, 0x8454, 0x8455, 0x8456,
+ 0x8458, 0x845D, 0x845E, 0x845F, 0x8460, 0x8462, 0x8465, 0x8467, 0x8468,
+ 0x846A, 0x846E, 0x8470, 0x8472, 0x8474, 0x8479, 0x847B, 0x847C, 0x847D,
+ 0x847E, 0x847F, 0x8480, 0x8481, 0x8483, 0x8484, 0x8485, 0x8486, 0x848A,
+ 0x848D, 0x848F, 0x8490, 0x8491, 0x8492, 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, 0x84BE, 0x84C2,
+ 0x84C3, 0x84C5, 0x84C6, 0x84C7, 0x84C8, 0x84CC, 0x84CE, 0x84CF, 0x84D2,
+ 0x84D4, 0x84D5, 0x84D7, 0x84D8, 0x84D9, 0x84DA, 0x84DB, 0x84DC, 0x84DE,
+ 0x84E1, 0x84E2, 0x84E4, 0x84E7, 0x84E8, 0x84E9, 0x84EA, 0x84EB, 0x84ED,
+ 0x84F1, 0x84F2, 0x84F3, 0x84F4, 0x84F5, 0x84F6, 0x84F7, 0x84F8, 0x84F9,
+ 0x84FA, 0x84FB, 0x84FE, 0x8500, 0x8501, 0x8502, 0x8503, 0x8504, 0x8505,
+ 0x8506, 0x8507, 0x8508, 0x8509, 0x850A, 0x850B, 0x850D, 0x850E, 0x850F,
+ 0x8510, 0x8512, 0x8515, 0x8516, 0x8518, 0x8519, 0x851B, 0x851C, 0x851D,
+ 0x8520, 0x8522, 0x8524, 0x8525, 0x8527, 0x8528, 0x8529, 0x852A, 0x852E,
+ 0x852F, 0x8530, 0x8531, 0x8532, 0x8533, 0x8534, 0x8535, 0x8536, 0x853E,
+ 0x853F, 0x8540, 0x8542, 0x8544, 0x8545, 0x8547, 0x854B, 0x854C, 0x854D,
+ 0x854F, 0x8550, 0x8551, 0x8554, 0x8557, 0x855A, 0x855B, 0x855C, 0x855D,
+ 0x855F, 0x8560, 0x8561, 0x8563, 0x8565, 0x8566, 0x8567, 0x856B, 0x856C,
+ 0x856E, 0x856F, 0x8570, 0x8571, 0x8573, 0x8575, 0x8576, 0x8578, 0x857C,
+ 0x857D, 0x857F, 0x8580, 0x8581, 0x8582, 0x8583, 0x8586, 0x8589, 0x858B,
+ 0x858D, 0x858E, 0x8590, 0x8592, 0x8593, 0x8595, 0x8596, 0x8597, 0x8598,
+ 0x8599, 0x859A, 0x859D, 0x859E, 0x85A0, 0x85A1, 0x85A2, 0x85A3, 0x85A5,
+ 0x85A7, 0x85AB, 0x85AC, 0x85AD, 0x85B1, 0x85B2, 0x85B3, 0x85B4, 0x85B5,
+ 0x85B6, 0x85B8, 0x85BB, 0x85BC, 0x85BD, 0x85BE, 0x85BF, 0x85C0, 0x85C2,
+ 0x85C3, 0x85C4, 0x85C5, 0x85C6, 0x85C7, 0x85C8, 0x85CA, 0x85CB, 0x85CC,
+ 0x85D1, 0x85D2, 0x85D4, 0x85D6, 0x85D7, 0x85D8, 0x85D9, 0x85DA, 0x85DB,
+ 0x85DE, 0x85DF, 0x85E0, 0x85E1, 0x85E2, 0x85E3, 0x85E6, 0x85E7, 0x85E8,
+ 0x85EB, 0x85EC, 0x85ED, 0x85EE, 0x85EF, 0x85F0, 0x85F1, 0x85F2, 0x85F3,
+ 0x85F5, 0x85F7, 0x85F8, 0x85FC, 0x85FD, 0x85FE, 0x8600, 0x8601, 0x8602,
+ 0x8603, 0x8608, 0x8609, 0x860A, 0x860C, 0x860D, 0x860E, 0x860F, 0x8610,
+ 0x8612, 0x8613, 0x8614, 0x8615, 0x8617, 0x8618, 0x8619, 0x861B, 0x861C,
+ 0x861D, 0x861F, 0x8620, 0x8621, 0x8623, 0x8624, 0x8625, 0x8626, 0x8628,
+ 0x862A, 0x862B, 0x862C, 0x862E, 0x862F, 0x8630, 0x8631, 0x8632, 0x8633,
+ 0x8634, 0x8635, 0x8636, 0x8637, 0x8639, 0x863B, 0x863D, 0x863E, 0x8640,
+ 0x8641, 0x8642, 0x8643, 0x8644, 0x8645, 0x8646, 0x8647, 0x8648, 0x8649,
+ 0x864A, 0x864B, 0x864C, 0x8652, 0x8653, 0x8656, 0x8657, 0x8658, 0x8659,
+ 0x865B, 0x865D, 0x8660, 0x8661, 0x8663, 0x8664, 0x8665, 0x8666, 0x8668,
+ 0x8669, 0x866A, 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,
+ 0x86FB, 0x86FC, 0x86FD, 0x86FF, 0x8701, 0x8704, 0x8705, 0x870B, 0x870C,
+ 0x870E, 0x870F, 0x8710, 0x8711, 0x8714, 0x8716, 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,
+ 0x8756, 0x8758, 0x875A, 0x875B, 0x875C, 0x875D, 0x875E, 0x875F, 0x8761,
+ 0x8762, 0x8767, 0x8768, 0x8769, 0x876A, 0x876B, 0x876C, 0x876D, 0x876F,
+ 0x8771, 0x8772, 0x8773, 0x8775, 0x8777, 0x8779, 0x877A, 0x877F, 0x8780,
+ 0x8781, 0x8786, 0x8787, 0x8789, 0x878A, 0x878C, 0x878E, 0x878F, 0x8790,
+ 0x8791, 0x8792, 0x8794, 0x8795, 0x8796, 0x8798, 0x8799, 0x879A, 0x879B,
+ 0x879C, 0x879D, 0x87A0, 0x87A1, 0x87A3, 0x87A4, 0x87A5, 0x87A6, 0x87A7,
+ 0x87A9, 0x87AA, 0x87AE, 0x87B0, 0x87B1, 0x87B2, 0x87B4, 0x87B6, 0x87B7,
+ 0x87B8, 0x87B9, 0x87BC, 0x87BE, 0x87BF, 0x87C1, 0x87C2, 0x87C3, 0x87C5,
+ 0x87C7, 0x87C9, 0x87CC, 0x87CD, 0x87CF, 0x87D0, 0x87D4, 0x87D5, 0x87D6,
+ 0x87D7, 0x87D8, 0x87D9, 0x87DA, 0x87DC, 0x87DD, 0x87DE, 0x87DF, 0x87E1,
+ 0x87E2, 0x87E4, 0x87E6, 0x87E7, 0x87E8, 0x87E9, 0x87EB, 0x87ED, 0x87F0,
+ 0x87F1, 0x87F3, 0x87F4, 0x87F5, 0x87F7, 0x87F8, 0x87FA, 0x87FC, 0x87FD,
+ 0x87FF, 0x8800, 0x8801, 0x8802, 0x8804, 0x8807, 0x8808, 0x8809, 0x880B,
+ 0x880C, 0x880D, 0x880E, 0x880F, 0x8812, 0x8814, 0x8817, 0x8818, 0x8819,
+ 0x881A, 0x881C, 0x881D, 0x881E, 0x8820, 0x8824, 0x8825, 0x8826, 0x8827,
+ 0x8828, 0x8829, 0x882A, 0x882B, 0x882C, 0x882D, 0x882E, 0x882F, 0x8830,
+ 0x8833, 0x8834, 0x8835, 0x8837, 0x8838, 0x883A, 0x883D, 0x883E, 0x883F,
+ 0x8841, 0x8842, 0x8843, 0x8847, 0x8848, 0x8849, 0x884B, 0x884E, 0x884F,
+ 0x8850, 0x8851, 0x8852, 0x8855, 0x8856, 0x8858, 0x885A, 0x885C, 0x885E,
+ 0x885F, 0x8860, 0x8866, 0x8867, 0x886A, 0x886D, 0x886F, 0x8871, 0x8873,
+ 0x8874, 0x8875, 0x8876, 0x8878, 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, 0x88AC, 0x88AE, 0x88AF, 0x88B0, 0x88B2, 0x88B3, 0x88B4,
+ 0x88B5, 0x88B6, 0x88B8, 0x88B9, 0x88BA, 0x88BB, 0x88BD, 0x88BE, 0x88BF,
+ 0x88C0, 0x88C3, 0x88C4, 0x88C7, 0x88C8, 0x88CB, 0x88CC, 0x88CD, 0x88D0,
+ 0x88D1, 0x88D3, 0x88D6, 0x88D7, 0x88DA, 0x88DB, 0x88DE, 0x88E0, 0x88E1,
+ 0x88E6, 0x88E7, 0x88E9, 0x88EA, 0x88EB, 0x88EC, 0x88ED, 0x88EE, 0x88EF,
+ 0x88F2, 0x88F5, 0x88F6, 0x88F7, 0x88FA, 0x88FB, 0x88FF, 0x8900, 0x8901,
+ 0x8903, 0x8904, 0x8905, 0x8906, 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, 0x8935, 0x8937,
+ 0x8939, 0x893A, 0x893C, 0x893D, 0x893E, 0x893F, 0x8940, 0x8942, 0x8943,
+ 0x8945, 0x8946, 0x8948, 0x8949, 0x894A, 0x894B, 0x894C, 0x894D, 0x894E,
+ 0x894F, 0x8950, 0x8951, 0x8952, 0x8953, 0x8954, 0x8955, 0x8957, 0x8958,
+ 0x8959, 0x895A, 0x895B, 0x895C, 0x8961, 0x8962, 0x8963, 0x8965, 0x8967,
+ 0x8968, 0x8969, 0x896B, 0x896D, 0x896E, 0x8970, 0x8971, 0x8973, 0x8974,
+ 0x8975, 0x8976, 0x8977, 0x8978, 0x8979, 0x897A, 0x897C, 0x897D, 0x897E,
+ 0x8980, 0x8982, 0x8984, 0x8985, 0x8987, 0x8988, 0x8989, 0x898A, 0x898C,
+ 0x898D, 0x898E, 0x8990, 0x8991, 0x8992, 0x8994, 0x8995, 0x8997, 0x8999,
+ 0x899A, 0x899B, 0x899C, 0x899D, 0x899E, 0x899F, 0x89A0, 0x89A2, 0x89A3,
+ 0x89A4, 0x89A5, 0x89A7, 0x89A8, 0x89A9, 0x89AB, 0x89AD, 0x89AE, 0x89B0,
+ 0x89B1, 0x89B3, 0x89B4, 0x89B5, 0x89B6, 0x89B8, 0x89B9, 0x89BB, 0x89BC,
+ 0x89BE, 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, 0x89F5,
+ 0x89F7, 0x89F9, 0x89FA, 0x89FB, 0x89FC, 0x89FD, 0x89FE, 0x89FF, 0x8A04,
+ 0x8A05, 0x8A06, 0x8A09, 0x8A0B, 0x8A0D, 0x8A0F, 0x8A11, 0x8A12, 0x8A14,
+ 0x8A17, 0x8A19, 0x8A1A, 0x8A1C, 0x8A1E, 0x8A20, 0x8A21, 0x8A22, 0x8A24,
+ 0x8A26, 0x8A27, 0x8A28, 0x8A29, 0x8A2B, 0x8A2C, 0x8A2E, 0x8A2F, 0x8A30,
+ 0x8A32, 0x8A33, 0x8A35, 0x8A37, 0x8A38, 0x8A39, 0x8A3B, 0x8A3C, 0x8A3D,
+ 0x8A3F, 0x8A40, 0x8A42, 0x8A43, 0x8A44, 0x8A45, 0x8A47, 0x8A49, 0x8A4A,
+ 0x8A4B, 0x8A4C, 0x8A4D, 0x8A4F, 0x8A51, 0x8A53, 0x8A56, 0x8A57, 0x8A59,
+ 0x8A5A, 0x8A5C, 0x8A5D, 0x8A5F, 0x8A60, 0x8A64, 0x8A65, 0x8A67, 0x8A68,
+ 0x8A6A, 0x8A6F, 0x8A74, 0x8A76, 0x8A77, 0x8A78, 0x8A7A, 0x8A7B, 0x8A7D,
+ 0x8A7E, 0x8A80, 0x8A81, 0x8A82, 0x8A83, 0x8A88, 0x8A8B, 0x8A8C, 0x8A8E,
+ 0x8A8F, 0x8A90, 0x8A94, 0x8A96, 0x8A97, 0x8A99, 0x8A9B, 0x8A9C, 0x8A9D,
+ 0x8A9F, 0x8AA2, 0x8AA7, 0x8AA9, 0x8AAA, 0x8AAB, 0x8AAD, 0x8AAE, 0x8AAF,
+ 0x8AB1, 0x8AB3, 0x8AB4, 0x8AB5, 0x8AB7, 0x8AB8, 0x8ABA, 0x8ABB, 0x8ABD,
+ 0x8ABE, 0x8AC0, 0x8AC1, 0x8AC3, 0x8AC5, 0x8AC6, 0x8AC8, 0x8ACA, 0x8ACC,
+ 0x8ACE, 0x8AD0, 0x8AD3, 0x8AD4, 0x8AD5, 0x8AD8, 0x8AD9, 0x8ADA, 0x8ADD,
+ 0x8ADF, 0x8AE0, 0x8AE1, 0x8AE3, 0x8AE5, 0x8AE8, 0x8AE9, 0x8AEA, 0x8AEC,
+ 0x8AEF, 0x8AF0, 0x8AF2, 0x8AF4, 0x8AF5, 0x8AF9, 0x8AFB, 0x8AFD, 0x8AFF,
+ 0x8B03, 0x8B06, 0x8B08, 0x8B09, 0x8B0B, 0x8B0C, 0x8B0D, 0x8B0F, 0x8B11,
+ 0x8B12, 0x8B13, 0x8B15, 0x8B18, 0x8B1C, 0x8B1E, 0x8B1F, 0x8B20, 0x8B22,
+ 0x8B23, 0x8B24, 0x8B25, 0x8B27, 0x8B29, 0x8B2A, 0x8B2E, 0x8B2F, 0x8B30,
+ 0x8B31, 0x8B32, 0x8B34, 0x8B35, 0x8B36, 0x8B37, 0x8B38, 0x8B3A, 0x8B3B,
+ 0x8B3C, 0x8B3D, 0x8B3F, 0x8B40, 0x8B41, 0x8B42, 0x8B43, 0x8B44, 0x8B45,
+ 0x8B46, 0x8B47, 0x8B48, 0x8B4A, 0x8B4B, 0x8B4C, 0x8B4D, 0x8B50, 0x8B51,
+ 0x8B52, 0x8B53, 0x8B54, 0x8B55, 0x8B57, 0x8B5B, 0x8B5D, 0x8B5E, 0x8B5F,
+ 0x8B60, 0x8B61, 0x8B62, 0x8B63, 0x8B64, 0x8B65, 0x8B67, 0x8B68, 0x8B69,
+ 0x8B6A, 0x8B6D, 0x8B6E, 0x8B71, 0x8B72, 0x8B73, 0x8B75, 0x8B76, 0x8B78,
+ 0x8B79, 0x8B7A, 0x8B7B, 0x8B7C, 0x8B7E, 0x8B7F, 0x8B81, 0x8B82, 0x8B83,
+ 0x8B84, 0x8B85, 0x8B86, 0x8B87, 0x8B88, 0x8B89, 0x8B8B, 0x8B8C, 0x8B8D,
+ 0x8B8F, 0x8B90, 0x8B91, 0x8B94, 0x8B97, 0x8B98, 0x8B99, 0x8B9A, 0x8B9B,
+ 0x8B9D, 0x8B9F, 0x8BAC, 0x8BB1, 0x8BBB, 0x8BC7, 0x8BD0, 0x8BEA, 0x8C09,
+ 0x8C1E, 0x8C38, 0x8C39, 0x8C3A, 0x8C3B, 0x8C3C, 0x8C3D, 0x8C3E, 0x8C3F,
+ 0x8C40, 0x8C42, 0x8C43, 0x8C44, 0x8C45, 0x8C4A, 0x8C4B, 0x8C4D, 0x8C4E,
+ 0x8C4F, 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, 0x8C9F, 0x8CA3, 0x8CA4,
+ 0x8CA5, 0x8CA6, 0x8CAD, 0x8CAE, 0x8CB1, 0x8CB5, 0x8CB9, 0x8CBE, 0x8CC6,
+ 0x8CC9, 0x8CCB, 0x8CCC, 0x8CCD, 0x8CCE, 0x8CCF, 0x8CD0, 0x8CD4, 0x8CD6,
+ 0x8CD7, 0x8CD8, 0x8CD9, 0x8CDB, 0x8CDD, 0x8CDF, 0x8CE5, 0x8CE8, 0x8CE9,
+ 0x8CEE, 0x8CEF, 0x8CF0, 0x8CF1, 0x8CF2, 0x8CF3, 0x8CF5, 0x8CF6, 0x8CF7,
+ 0x8CF8, 0x8CF9, 0x8CFF, 0x8D00, 0x8D01, 0x8D02, 0x8D03, 0x8D06, 0x8D07,
+ 0x8D09, 0x8D0C, 0x8D0E, 0x8D11, 0x8D12, 0x8D13, 0x8D14, 0x8D15, 0x8D17,
+ 0x8D18, 0x8D19, 0x8D1A, 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, 0x8D96, 0x8D97, 0x8D98, 0x8D9A, 0x8D9B, 0x8D9C,
+ 0x8D9D, 0x8D9E, 0x8DA0, 0x8DA1, 0x8DA2, 0x8DA4, 0x8DA5, 0x8DA6, 0x8DA7,
+ 0x8DA9, 0x8DAA, 0x8DAB, 0x8DAC, 0x8DAD, 0x8DAE, 0x8DAF, 0x8DB0, 0x8DB6,
+ 0x8DB7, 0x8DB9, 0x8DBB, 0x8DBD, 0x8DC0, 0x8DC1, 0x8DC2, 0x8DC5, 0x8DC7,
+ 0x8DC8, 0x8DC9, 0x8DCA, 0x8DCD, 0x8DD0, 0x8DD2, 0x8DD3, 0x8DD4, 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, 0x8E11, 0x8E12, 0x8E13, 0x8E15, 0x8E16,
+ 0x8E17, 0x8E18, 0x8E19, 0x8E1A, 0x8E1B, 0x8E1C, 0x8E20, 0x8E21, 0x8E24,
+ 0x8E25, 0x8E26, 0x8E27, 0x8E28, 0x8E2B, 0x8E2D, 0x8E30, 0x8E32, 0x8E33,
+ 0x8E36, 0x8E37, 0x8E38, 0x8E3B, 0x8E3C, 0x8E3E, 0x8E3F, 0x8E43, 0x8E45,
+ 0x8E46, 0x8E4D, 0x8E4E, 0x8E4F, 0x8E50, 0x8E53, 0x8E54, 0x8E56, 0x8E57,
+ 0x8E58, 0x8E5A, 0x8E5B, 0x8E5C, 0x8E5D, 0x8E5E, 0x8E5F, 0x8E60, 0x8E61,
+ 0x8E62, 0x8E64, 0x8E65, 0x8E67, 0x8E68, 0x8E6A, 0x8E6B, 0x8E6E, 0x8E71,
+ 0x8E73, 0x8E75, 0x8E77, 0x8E78, 0x8E79, 0x8E7B, 0x8E7D, 0x8E7E, 0x8E80,
+ 0x8E82, 0x8E83, 0x8E84, 0x8E86, 0x8E88, 0x8E8C, 0x8E8E, 0x8E95, 0x8E96,
+ 0x8E97, 0x8E98, 0x8E99, 0x8E9B, 0x8E9D, 0x8E9F, 0x8EA0, 0x8EA2, 0x8EA3,
+ 0x8EA4, 0x8EA7, 0x8EA8, 0x8EA9, 0x8EAD, 0x8EAE, 0x8EB0, 0x8EB1, 0x8EB3,
+ 0x8EB4, 0x8EB5, 0x8EB6, 0x8EB7, 0x8EB8, 0x8EB9, 0x8EBB, 0x8EBC, 0x8EBD,
+ 0x8EBE, 0x8EBF, 0x8EC1, 0x8EC2, 0x8EC3, 0x8EC4, 0x8EC5, 0x8EC6, 0x8EC7,
+ 0x8EC8, 0x8EC9, 0x8ECF, 0x8ED0, 0x8ED1, 0x8ED3, 0x8ED5, 0x8ED6, 0x8ED7,
+ 0x8ED8, 0x8ED9, 0x8EDA, 0x8EDC, 0x8EDD, 0x8EDE, 0x8EE0, 0x8EE1, 0x8EE2,
+ 0x8EE3, 0x8EE5, 0x8EE6, 0x8EE7, 0x8EE8, 0x8EE9, 0x8EEA, 0x8EEC, 0x8EED,
+ 0x8EEE, 0x8EEF, 0x8EF0, 0x8EF1, 0x8EF3, 0x8EF4, 0x8EF5, 0x8EF6, 0x8EF7,
+ 0x8EFD, 0x8EFF, 0x8F00, 0x8F01, 0x8F02, 0x8F04, 0x8F06, 0x8F08, 0x8F0B,
+ 0x8F0C, 0x8F0D, 0x8F0E, 0x8F0F, 0x8F10, 0x8F11, 0x8F13, 0x8F16, 0x8F17,
+ 0x8F18, 0x8F19, 0x8F1A, 0x8F20, 0x8F21, 0x8F22, 0x8F23, 0x8F24, 0x8F27,
+ 0x8F28, 0x8F2B, 0x8F2C, 0x8F2D, 0x8F2E, 0x8F30, 0x8F31, 0x8F32, 0x8F34,
+ 0x8F35, 0x8F36, 0x8F37, 0x8F39, 0x8F3A, 0x8F3C, 0x8F3D, 0x8F40, 0x8F41,
+ 0x8F43, 0x8F47, 0x8F48, 0x8F4A, 0x8F4B, 0x8F4C, 0x8F4F, 0x8F50, 0x8F51,
+ 0x8F52, 0x8F53, 0x8F55, 0x8F56, 0x8F57, 0x8F58, 0x8F59, 0x8F5A, 0x8F5B,
+ 0x8F5C, 0x8F5D, 0x8F5E, 0x8F60, 0x8F63, 0x8F65, 0x8F6A, 0x8F80, 0x8F8C,
+ 0x8F92, 0x8F9D, 0x8FA0, 0x8FA1, 0x8FA2, 0x8FA4, 0x8FA5, 0x8FA7, 0x8FAA,
+ 0x8FAC, 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, 0x8FF5, 0x8FF6, 0x8FFA, 0x8FFB, 0x8FFC,
+ 0x8FFE, 0x8FFF, 0x9007, 0x9008, 0x900C, 0x900E, 0x9013, 0x9018, 0x901C,
+ 0x9024, 0x9025, 0x9027, 0x9028, 0x9029, 0x902A, 0x902B, 0x902C, 0x9030,
+ 0x9031, 0x9033, 0x9034, 0x9037, 0x9039, 0x903A, 0x903D, 0x903F, 0x9040,
+ 0x9043, 0x9045, 0x9046, 0x9048, 0x9049, 0x904A, 0x904C, 0x9056, 0x9059,
+ 0x905A, 0x905D, 0x905F, 0x9061, 0x9064, 0x9066, 0x9067, 0x906A, 0x906B,
+ 0x906C, 0x906F, 0x9070, 0x9071, 0x9073, 0x9076, 0x9079, 0x907B, 0x907E,
+ 0x9085, 0x9086, 0x9089, 0x908C, 0x908D, 0x908E, 0x9092, 0x9094, 0x9096,
+ 0x9098, 0x909A, 0x909C, 0x909E, 0x909F, 0x90A0, 0x90A4, 0x90A5, 0x90A7,
+ 0x90A8, 0x90A9, 0x90AB, 0x90AD, 0x90B2, 0x90B7, 0x90BC, 0x90BD, 0x90BF,
+ 0x90C0, 0x90C2, 0x90C3, 0x90C6, 0x90C8, 0x90C9, 0x90CB, 0x90CC, 0x90CD,
+ 0x90D2, 0x90D4, 0x90D5, 0x90D6, 0x90D8, 0x90D9, 0x90DA, 0x90DE, 0x90E0,
+ 0x90E3, 0x90E4, 0x90E5, 0x90E9, 0x90EA, 0x90EC, 0x90EE, 0x90F0, 0x90F1,
+ 0x90F2, 0x90F3, 0x90F6, 0x90F7, 0x90F9, 0x90FA, 0x90FB, 0x90FC, 0x90FF,
+ 0x9100, 0x9101, 0x9103, 0x9105, 0x9107, 0x9108, 0x910A, 0x910B, 0x910C,
+ 0x910D, 0x910E, 0x910F, 0x9110, 0x9111, 0x9113, 0x9115, 0x9117, 0x9118,
+ 0x911A, 0x911B, 0x911C, 0x911D, 0x911F, 0x9120, 0x9121, 0x9124, 0x9125,
+ 0x9126, 0x9128, 0x9129, 0x912A, 0x912B, 0x912C, 0x912E, 0x9133, 0x9135,
+ 0x9137, 0x9138, 0x913B, 0x913C, 0x913D, 0x913E, 0x913F, 0x9140, 0x9141,
+ 0x9142, 0x9144, 0x9145, 0x9147, 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, 0x9197, 0x9198, 0x9199, 0x919D, 0x919E, 0x919F, 0x91A0, 0x91A1,
+ 0x91A4, 0x91A5, 0x91A6, 0x91A7, 0x91A8, 0x91A9, 0x91B0, 0x91B1, 0x91B2,
+ 0x91B3, 0x91B6, 0x91B7, 0x91B8, 0x91B9, 0x91BB, 0x91BC, 0x91BD, 0x91BE,
+ 0x91BF, 0x91C2, 0x91C4, 0x91C6, 0x91C8, 0x91D0, 0x91D6, 0x91DA, 0x91DB,
+ 0x91DE, 0x91DF, 0x91E0, 0x91E1, 0x91E2, 0x91E5, 0x91E6, 0x91E8, 0x91EA,
+ 0x91EB, 0x91EC, 0x91ED, 0x91EE, 0x91EF, 0x91F0, 0x91F1, 0x91F2, 0x91F3,
+ 0x91F4, 0x91F6, 0x91F8, 0x91FB, 0x91FC, 0x91FD, 0x91FE, 0x91FF, 0x9202,
+ 0x9203, 0x9205, 0x9206, 0x9207, 0x920A, 0x920B, 0x920C, 0x920F, 0x9212,
+ 0x9213, 0x9216, 0x9217, 0x9218, 0x9219, 0x921A, 0x921B, 0x921C, 0x921D,
+ 0x921F, 0x9220, 0x9221, 0x9222, 0x9224, 0x9228, 0x9229, 0x922A, 0x922B,
+ 0x922C, 0x922D, 0x922F, 0x9231, 0x9232, 0x9235, 0x9236, 0x923B, 0x923C,
+ 0x9241, 0x9242, 0x9243, 0x9244, 0x9246, 0x9247, 0x924A, 0x924B, 0x924C,
+ 0x924E, 0x924F, 0x9250, 0x9252, 0x9253, 0x9254, 0x9256, 0x9258, 0x9259,
+ 0x925C, 0x925D, 0x925F, 0x9260, 0x9261, 0x9263, 0x9264, 0x9265, 0x9267,
+ 0x9268, 0x9269, 0x926A, 0x926B, 0x926E, 0x926F, 0x9270, 0x9271, 0x9272,
+ 0x9273, 0x9275, 0x9276, 0x9277, 0x9279, 0x927C, 0x927D, 0x927E, 0x9281,
+ 0x9282, 0x9284, 0x9286, 0x9287, 0x9288, 0x9289, 0x928A, 0x928B, 0x928C,
+ 0x928D, 0x928F, 0x9290, 0x9292, 0x9294, 0x9295, 0x9297, 0x9299, 0x929B,
+ 0x929D, 0x929E, 0x929F, 0x92A1, 0x92A2, 0x92A4, 0x92A7, 0x92AD, 0x92AF,
+ 0x92B0, 0x92B2, 0x92B3, 0x92B4, 0x92B5, 0x92B6, 0x92B8, 0x92BA, 0x92BD,
+ 0x92BE, 0x92BF, 0x92C0, 0x92C2, 0x92C4, 0x92C6, 0x92C9, 0x92CA, 0x92CB,
+ 0x92CD, 0x92CE, 0x92D0, 0x92D1, 0x92D3, 0x92D4, 0x92D5, 0x92D6, 0x92D7,
+ 0x92D8, 0x92D9, 0x92DA, 0x92DB, 0x92DC, 0x92DE, 0x92E0, 0x92E1, 0x92E2,
+ 0x92E7, 0x92E9, 0x92EB, 0x92EC, 0x92F2, 0x92F3, 0x92F4, 0x92F5, 0x92F7,
+ 0x92F9, 0x92FA, 0x92FB, 0x92FD, 0x92FE, 0x92FF, 0x9300, 0x9302, 0x9303,
+ 0x9304, 0x9305, 0x9309, 0x930A, 0x930B, 0x930C, 0x930D, 0x930E, 0x930F,
+ 0x9311, 0x9313, 0x9314, 0x9316, 0x9317, 0x931C, 0x931D, 0x931E, 0x9321,
+ 0x9323, 0x9324, 0x9325, 0x9327, 0x9329, 0x932A, 0x932C, 0x932D, 0x9330,
+ 0x9331, 0x9334, 0x9335, 0x9337, 0x9339, 0x933A, 0x933B, 0x933C, 0x933D,
+ 0x933F, 0x9342, 0x9344, 0x9345, 0x9348, 0x9349, 0x934A, 0x934C, 0x934E,
+ 0x934F, 0x9350, 0x9351, 0x9352, 0x9353, 0x9355, 0x9356, 0x9357, 0x9359,
+ 0x935A, 0x935C, 0x935D, 0x935E, 0x935F, 0x9360, 0x9361, 0x9362, 0x9363,
+ 0x9366, 0x9367, 0x9368, 0x936B, 0x936D, 0x936E, 0x936F, 0x9371, 0x9372,
+ 0x9373, 0x9374, 0x9377, 0x9378, 0x9379, 0x937B, 0x937C, 0x937D, 0x937F,
+ 0x9380, 0x9381, 0x9383, 0x9385, 0x9386, 0x9388, 0x9389, 0x938B, 0x938C,
+ 0x938D, 0x938E, 0x9390, 0x9391, 0x9392, 0x9393, 0x9394, 0x9395, 0x9397,
+ 0x9399, 0x939A, 0x939B, 0x939C, 0x939D, 0x939E, 0x939F, 0x93A0, 0x93A1,
+ 0x93A4, 0x93A5, 0x93A8, 0x93AB, 0x93AD, 0x93AF, 0x93B1, 0x93B2, 0x93B4,
+ 0x93B6, 0x93B7, 0x93B9, 0x93BA, 0x93BB, 0x93BC, 0x93BD, 0x93BE, 0x93C0,
+ 0x93C1, 0x93C2, 0x93C4, 0x93C5, 0x93C6, 0x93C9, 0x93CB, 0x93CE, 0x93CF,
+ 0x93D0, 0x93D2, 0x93D3, 0x93D4, 0x93D5, 0x93D9, 0x93DA, 0x93DB, 0x93E0,
+ 0x93E3, 0x93E5, 0x93E6, 0x93E7, 0x93E9, 0x93EA, 0x93EB, 0x93EC, 0x93ED,
+ 0x93EE, 0x93EF, 0x93F0, 0x93F1, 0x93F2, 0x93F3, 0x93F4, 0x93F6, 0x93F8,
+ 0x93FA, 0x93FB, 0x93FC, 0x93FD, 0x93FE, 0x93FF, 0x9400, 0x9401, 0x9402,
+ 0x9404, 0x9405, 0x9406, 0x9407, 0x9408, 0x9409, 0x940A, 0x940C, 0x940D,
+ 0x940E, 0x940F, 0x9411, 0x9415, 0x9416, 0x9417, 0x941A, 0x941B, 0x941C,
+ 0x941E, 0x941F, 0x9421, 0x9422, 0x9423, 0x9424, 0x9425, 0x9429, 0x942A,
+ 0x942B, 0x942C, 0x942D, 0x942F, 0x9430, 0x9431, 0x9434, 0x9436, 0x9437,
+ 0x9439, 0x943B, 0x943C, 0x943D, 0x9440, 0x9441, 0x9442, 0x9443, 0x9445,
+ 0x9446, 0x9447, 0x9448, 0x9449, 0x944B, 0x944D, 0x944E, 0x944F, 0x9450,
+ 0x9451, 0x9453, 0x9455, 0x9456, 0x9457, 0x9458, 0x9459, 0x945A, 0x945B,
+ 0x945C, 0x945D, 0x945E, 0x945F, 0x9461, 0x9462, 0x9464, 0x9466, 0x9467,
+ 0x9468, 0x9469, 0x946A, 0x946C, 0x946E, 0x946F, 0x9471, 0x9473, 0x9474,
+ 0x9475, 0x9476, 0x9478, 0x947A, 0x947B, 0x9480, 0x9481, 0x9482, 0x9483,
+ 0x9484, 0x9491, 0x9496, 0x9498, 0x94C7, 0x94CF, 0x94D3, 0x94D4, 0x94DA,
+ 0x94E6, 0x94FB, 0x951C, 0x9520, 0x9527, 0x9533, 0x953D, 0x9543, 0x9548,
+ 0x954B, 0x9555, 0x955A, 0x9560, 0x956E, 0x9574, 0x9575, 0x9578, 0x9579,
+ 0x957A, 0x957B, 0x957C, 0x957D, 0x957E, 0x9581, 0x9584, 0x9585, 0x9587,
+ 0x9588, 0x958A, 0x958D, 0x9590, 0x9592, 0x9595, 0x9596, 0x9597, 0x9599,
+ 0x959A, 0x959B, 0x959C, 0x959D, 0x959E, 0x959F, 0x95A0, 0x95A2, 0x95A6,
+ 0x95A7, 0x95AA, 0x95AE, 0x95AF, 0x95B0, 0x95B1, 0x95B3, 0x95B4, 0x95B5,
+ 0x95B7, 0x95B8, 0x95BA, 0x95C0, 0x95C1, 0x95C2, 0x95C4, 0x95C5, 0x95C7,
+ 0x95C9, 0x95CD, 0x95CE, 0x95CF, 0x95D1, 0x95D2, 0x95D3, 0x95D7, 0x95D8,
+ 0x95D9, 0x95DA, 0x95DB, 0x95DD, 0x95DF, 0x95E0, 0x95E3, 0x95E4, 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,
+ 0x9659, 0x965A, 0x965C, 0x965E, 0x9660, 0x9665, 0x9666, 0x966B, 0x966D,
+ 0x966E, 0x966F, 0x9671, 0x9679, 0x967A, 0x967B, 0x967C, 0x967E, 0x967F,
+ 0x9680, 0x9681, 0x9682, 0x9683, 0x9684, 0x9687, 0x9689, 0x968C, 0x9691,
+ 0x9692, 0x9693, 0x9696, 0x969A, 0x969D, 0x969E, 0x969F, 0x96A0, 0x96A1,
+ 0x96A2, 0x96A3, 0x96A4, 0x96A5, 0x96A6, 0x96A9, 0x96AB, 0x96AC, 0x96AD,
+ 0x96AE, 0x96AF, 0x96B2, 0x96B5, 0x96B7, 0x96BA, 0x96BF, 0x96C2, 0x96C3,
+ 0x96C8, 0x96CA, 0x96CB, 0x96D0, 0x96D1, 0x96D3, 0x96D4, 0x96D7, 0x96D8,
+ 0x96DA, 0x96DD, 0x96DE, 0x96DF, 0x96E1, 0x96E4, 0x96E5, 0x96E6, 0x96E7,
+ 0x96EB, 0x96EC, 0x96ED, 0x96EE, 0x96F0, 0x96F1, 0x96F4, 0x96F5, 0x96F8,
+ 0x96FA, 0x96FC, 0x96FD, 0x96FF, 0x9702, 0x9703, 0x9705, 0x970A, 0x970B,
+ 0x970C, 0x9710, 0x9711, 0x9712, 0x9714, 0x9715, 0x9717, 0x9718, 0x9719,
+ 0x971A, 0x971B, 0x971D, 0x971F, 0x9720, 0x9721, 0x9722, 0x9723, 0x9724,
+ 0x9725, 0x9726, 0x9728, 0x9729, 0x972B, 0x972C, 0x972E, 0x972F, 0x9731,
+ 0x9733, 0x9734, 0x9735, 0x9736, 0x9737, 0x973A, 0x973B, 0x973C, 0x973F,
+ 0x9740, 0x9741, 0x9743, 0x9745, 0x9746, 0x9747, 0x9749, 0x974A, 0x974B,
+ 0x974C, 0x974D, 0x974E, 0x974F, 0x9750, 0x9751, 0x9754, 0x9755, 0x9757,
+ 0x9758, 0x975C, 0x975D, 0x975F, 0x9763, 0x9764, 0x9766, 0x9767, 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, 0x9790, 0x9793, 0x9795, 0x9796, 0x9797, 0x9799, 0x979A,
+ 0x979B, 0x979C, 0x979D, 0x979E, 0x979F, 0x97A1, 0x97A2, 0x97A4, 0x97A5,
+ 0x97A7, 0x97A8, 0x97A9, 0x97AA, 0x97AC, 0x97AE, 0x97B0, 0x97B1, 0x97B3,
+ 0x97B5, 0x97B6, 0x97B7, 0x97B8, 0x97B9, 0x97BA, 0x97BB, 0x97BC, 0x97BE,
+ 0x97BF, 0x97C0, 0x97C1, 0x97C2, 0x97C4, 0x97C5, 0x97C7, 0x97C8, 0x97CA,
+ 0x97CD, 0x97CE, 0x97CF, 0x97D0, 0x97D1, 0x97D2, 0x97D4, 0x97D5, 0x97D6,
+ 0x97D7, 0x97D8, 0x97DA, 0x97DB, 0x97DD, 0x97DF, 0x97E0, 0x97E1, 0x97E2,
+ 0x97E3, 0x97E4, 0x97E5, 0x97E8, 0x97EE, 0x97EF, 0x97F0, 0x97F1, 0x97F2,
+ 0x97F4, 0x97F7, 0x97F8, 0x97F9, 0x97FA, 0x97FB, 0x97FC, 0x97FD, 0x97FE,
+ 0x9800, 0x9804, 0x9809, 0x980B, 0x980D, 0x9814, 0x9815, 0x9816, 0x9819,
+ 0x981A, 0x981B, 0x981D, 0x981E, 0x981F, 0x9820, 0x9822, 0x9823, 0x9825,
+ 0x9827, 0x9828, 0x9829, 0x982A, 0x982B, 0x982C, 0x982E, 0x982F, 0x9831,
+ 0x9832, 0x9833, 0x9834, 0x9835, 0x9836, 0x9839, 0x983A, 0x983C, 0x983E,
+ 0x983F, 0x9840, 0x9841, 0x9842, 0x9843, 0x9844, 0x9845, 0x9847, 0x9848,
+ 0x9849, 0x984A, 0x984B, 0x984F, 0x9850, 0x9851, 0x9852, 0x9855, 0x9856,
+ 0x9857, 0x985A, 0x985C, 0x985D, 0x985F, 0x9860, 0x9861, 0x9863, 0x9864,
+ 0x9866, 0x9868, 0x9869, 0x986A, 0x986D, 0x986E, 0x9872, 0x988B, 0x988E,
+ 0x9892, 0x9895, 0x9899, 0x98A3, 0x98A9, 0x98AA, 0x98AB, 0x98AC, 0x98AD,
+ 0x98B0, 0x98B2, 0x98B4, 0x98B5, 0x98B7, 0x98B8, 0x98B9, 0x98BA, 0x98BB,
+ 0x98BD, 0x98BE, 0x98BF, 0x98C0, 0x98C1, 0x98C2, 0x98C3, 0x98C5, 0x98C7,
+ 0x98C9, 0x98CA, 0x98CB, 0x98CC, 0x98CD, 0x98CF, 0x98D0, 0x98D4, 0x98D6,
+ 0x98D7, 0x98DC, 0x98DD, 0x98E1, 0x98E3, 0x98E4, 0x98E5, 0x98E6, 0x98EC,
+ 0x98EE, 0x98F0, 0x98F1, 0x98F3, 0x98F5, 0x98F6, 0x98F7, 0x98F8, 0x98F9,
+ 0x98FA, 0x98FB, 0x98FF, 0x9900, 0x9901, 0x9902, 0x9904, 0x9906, 0x9907,
+ 0x9908, 0x990B, 0x990E, 0x990F, 0x9914, 0x9915, 0x9916, 0x9917, 0x9919,
+ 0x991A, 0x991C, 0x991D, 0x991F, 0x9920, 0x9922, 0x9923, 0x9924, 0x9925,
+ 0x9926, 0x9927, 0x9929, 0x992A, 0x992B, 0x992C, 0x992D, 0x992F, 0x9930,
+ 0x9931, 0x9932, 0x9934, 0x9935, 0x9936, 0x9938, 0x9939, 0x993A, 0x993B,
+ 0x993D, 0x9940, 0x9941, 0x9942, 0x9944, 0x9946, 0x9947, 0x994D, 0x994E,
+ 0x994F, 0x9950, 0x9953, 0x9956, 0x9958, 0x9959, 0x995A, 0x995B, 0x995D,
+ 0x995F, 0x9960, 0x9961, 0x9964, 0x9966, 0x9973, 0x9978, 0x9979, 0x997B,
+ 0x997E, 0x9982, 0x9983, 0x9989, 0x998C, 0x998E, 0x999A, 0x999B, 0x999C,
+ 0x999D, 0x999E, 0x999F, 0x99A0, 0x99A1, 0x99A2, 0x99A3, 0x99A4, 0x99A6,
+ 0x99A7, 0x99A9, 0x99AA, 0x99AB, 0x99AF, 0x99B0, 0x99B2, 0x99B5, 0x99B6,
+ 0x99B7, 0x99B8, 0x99B9, 0x99BA, 0x99BB, 0x99BC, 0x99BD, 0x99BE, 0x99BF,
+ 0x99C0, 0x99C2, 0x99C3, 0x99C4, 0x99C5, 0x99C6, 0x99C7, 0x99C8, 0x99C9,
+ 0x99CA, 0x99CB, 0x99CC, 0x99CD, 0x99CE, 0x99CF, 0x99D3, 0x99D6, 0x99D7,
+ 0x99DA, 0x99DC, 0x99DE, 0x99E0, 0x99E3, 0x99E4, 0x99E5, 0x99E6, 0x99E7,
+ 0x99E8, 0x99E9, 0x99EA, 0x99EB, 0x99EC, 0x99EE, 0x99EF, 0x99F0, 0x99F2,
+ 0x99F3, 0x99F4, 0x99F5, 0x99F6, 0x99F7, 0x99F8, 0x99F9, 0x99FA, 0x99FB,
+ 0x99FC, 0x99FD, 0x99FE, 0x9A00, 0x9A02, 0x9A03, 0x9A04, 0x9A06, 0x9A07,
+ 0x9A08, 0x9A09, 0x9A0A, 0x9A0B, 0x9A0C, 0x9A10, 0x9A11, 0x9A12, 0x9A13,
+ 0x9A14, 0x9A15, 0x9A17, 0x9A18, 0x9A1A, 0x9A1B, 0x9A1C, 0x9A1D, 0x9A1E,
+ 0x9A1F, 0x9A20, 0x9A21, 0x9A22, 0x9A23, 0x9A24, 0x9A25, 0x9A26, 0x9A27,
+ 0x9A28, 0x9A29, 0x9A2A, 0x9A2C, 0x9A2F, 0x9A31, 0x9A32, 0x9A33, 0x9A34,
+ 0x9A35, 0x9A39, 0x9A3A, 0x9A3B, 0x9A3C, 0x9A3D, 0x9A3F, 0x9A46, 0x9A47,
+ 0x9A48, 0x9A49, 0x9A4B, 0x9A4C, 0x9A4E, 0x9A50, 0x9A51, 0x9A52, 0x9A53,
+ 0x9A54, 0x9A56, 0x9A58, 0x9A59, 0x9A5C, 0x9A5D, 0x9A5E, 0x9A60, 0x9A61,
+ 0x9A63, 0x9A66, 0x9A67, 0x9A68, 0x9A69, 0x9A6B, 0x9A72, 0x9A83, 0x9A89,
+ 0x9A8D, 0x9A8E, 0x9A94, 0x9A95, 0x9A99, 0x9AA6, 0x9AA9, 0x9AAA, 0x9AAB,
+ 0x9AAC, 0x9AAD, 0x9AAE, 0x9AB2, 0x9AB3, 0x9AB4, 0x9AB5, 0x9AB9, 0x9ABB,
+ 0x9ABD, 0x9ABE, 0x9ABF, 0x9AC3, 0x9AC4, 0x9AC6, 0x9AC7, 0x9AC8, 0x9AC9,
+ 0x9ACA, 0x9ACD, 0x9ACE, 0x9AD0, 0x9AD7, 0x9AD9, 0x9ADA, 0x9ADB, 0x9ADC,
+ 0x9ADD, 0x9ADE, 0x9AE0, 0x9AE2, 0x9AE3, 0x9AE4, 0x9AE5, 0x9AE7, 0x9AE8,
+ 0x9AE9, 0x9AEA, 0x9AEC, 0x9AF0, 0x9AF1, 0x9AF2, 0x9AF3, 0x9AF4, 0x9AF5,
+ 0x9AF6, 0x9AF7, 0x9AF8, 0x9AFA, 0x9AFC, 0x9AFD, 0x9AFE, 0x9AFF, 0x9B00,
+ 0x9B01, 0x9B02, 0x9B04, 0x9B05, 0x9B07, 0x9B09, 0x9B0A, 0x9B0B, 0x9B0C,
+ 0x9B0E, 0x9B10, 0x9B11, 0x9B12, 0x9B14, 0x9B15, 0x9B16, 0x9B17, 0x9B18,
+ 0x9B19, 0x9B1B, 0x9B1C, 0x9B1D, 0x9B1E, 0x9B20, 0x9B21, 0x9B24, 0x9B26,
+ 0x9B28, 0x9B2A, 0x9B2B, 0x9B2C, 0x9B2D, 0x9B30, 0x9B33, 0x9B34, 0x9B35,
+ 0x9B36, 0x9B37, 0x9B38, 0x9B39, 0x9B3A, 0x9B3D, 0x9B3E, 0x9B3F, 0x9B40,
+ 0x9B46, 0x9B4A, 0x9B4B, 0x9B4C, 0x9B50, 0x9B52, 0x9B53, 0x9B55, 0x9B56,
+ 0x9B57, 0x9B59, 0x9B5B, 0x9B5C, 0x9B5D, 0x9B5E, 0x9B5F, 0x9B60, 0x9B61,
+ 0x9B62, 0x9B63, 0x9B64, 0x9B65, 0x9B66, 0x9B67, 0x9B68, 0x9B69, 0x9B6A,
+ 0x9B6B, 0x9B6C, 0x9B6D, 0x9B6E, 0x9B70, 0x9B71, 0x9B72, 0x9B73, 0x9B75,
+ 0x9B76, 0x9B78, 0x9B79, 0x9B7A, 0x9B7B, 0x9B7C, 0x9B7D, 0x9B7E, 0x9B7F,
+ 0x9B80, 0x9B82, 0x9B84, 0x9B85, 0x9B86, 0x9B87, 0x9B88, 0x9B89, 0x9B8A,
+ 0x9B8B, 0x9B8C, 0x9B8D, 0x9B8F, 0x9B93, 0x9B94, 0x9B95, 0x9B96, 0x9B97,
+ 0x9B98, 0x9B99, 0x9B9B, 0x9B9C, 0x9B9F, 0x9BA0, 0x9BA1, 0x9BA2, 0x9BA3,
+ 0x9BA4, 0x9BA5, 0x9BA6, 0x9BA7, 0x9BA8, 0x9BA9, 0x9BAC, 0x9BAF, 0x9BB0,
+ 0x9BB1, 0x9BB2, 0x9BB3, 0x9BB4, 0x9BB5, 0x9BB6, 0x9BB7, 0x9BB8, 0x9BB9,
+ 0x9BBA, 0x9BBB, 0x9BBC, 0x9BBD, 0x9BBE, 0x9BBF, 0x9BC2, 0x9BC3, 0x9BC4,
+ 0x9BC5, 0x9BC6, 0x9BC8, 0x9BCB, 0x9BCC, 0x9BCD, 0x9BCE, 0x9BCF, 0x9BD0,
+ 0x9BD1, 0x9BD2, 0x9BD3, 0x9BD5, 0x9BD7, 0x9BD8, 0x9BD9, 0x9BDA, 0x9BDC,
+ 0x9BDE, 0x9BDF, 0x9BE0, 0x9BE3, 0x9BE5, 0x9BE6, 0x9BE9, 0x9BEC, 0x9BED,
+ 0x9BEE, 0x9BEF, 0x9BF1, 0x9BF2, 0x9BF3, 0x9BF5, 0x9BF6, 0x9BF7, 0x9BF8,
+ 0x9BF9, 0x9BFA, 0x9BFB, 0x9BFC, 0x9BFE, 0x9C00, 0x9C01, 0x9C02, 0x9C03,
+ 0x9C04, 0x9C05, 0x9C06, 0x9C07, 0x9C0A, 0x9C0B, 0x9C0C, 0x9C0E, 0x9C0F,
+ 0x9C11, 0x9C14, 0x9C15, 0x9C16, 0x9C17, 0x9C18, 0x9C19, 0x9C1A, 0x9C1B,
+ 0x9C1C, 0x9C1D, 0x9C1E, 0x9C1F, 0x9C21, 0x9C22, 0x9C24, 0x9C26, 0x9C27,
+ 0x9C2A, 0x9C2B, 0x9C2C, 0x9C2E, 0x9C2F, 0x9C30, 0x9C34, 0x9C36, 0x9C38,
+ 0x9C3A, 0x9C3C, 0x9C3D, 0x9C3F, 0x9C40, 0x9C41, 0x9C42, 0x9C43, 0x9C44,
+ 0x9C46, 0x9C47, 0x9C4A, 0x9C4B, 0x9C4C, 0x9C4D, 0x9C4E, 0x9C4F, 0x9C50,
+ 0x9C51, 0x9C53, 0x9C55, 0x9C59, 0x9C5A, 0x9C5B, 0x9C5C, 0x9C5E, 0x9C60,
+ 0x9C61, 0x9C62, 0x9C63, 0x9C64, 0x9C65, 0x9C66, 0x9C68, 0x9C69, 0x9C6A,
+ 0x9C6B, 0x9C6C, 0x9C6E, 0x9C6F, 0x9C70, 0x9C71, 0x9C72, 0x9C73, 0x9C74,
+ 0x9C75, 0x9C76, 0x9C77, 0x9C79, 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, 0x9CE3, 0x9CE4, 0x9CE6, 0x9CE7, 0x9CE8, 0x9CEA, 0x9CEB, 0x9CED,
+ 0x9CEE, 0x9CEF, 0x9CF0, 0x9CF1, 0x9CF2, 0x9CF5, 0x9CF7, 0x9CF8, 0x9CF9,
+ 0x9CFA, 0x9CFB, 0x9CFC, 0x9CFD, 0x9CFE, 0x9CFF, 0x9D00, 0x9D01, 0x9D02,
+ 0x9D03, 0x9D04, 0x9D05, 0x9D08, 0x9D0A, 0x9D0B, 0x9D0C, 0x9D0D, 0x9D0E,
+ 0x9D0F, 0x9D10, 0x9D11, 0x9D12, 0x9D13, 0x9D14, 0x9D16, 0x9D17, 0x9D18,
+ 0x9D19, 0x9D1A, 0x9D1C, 0x9D1E, 0x9D20, 0x9D21, 0x9D22, 0x9D24, 0x9D25,
+ 0x9D27, 0x9D29, 0x9D2A, 0x9D2B, 0x9D2C, 0x9D2D, 0x9D2E, 0x9D31, 0x9D32,
+ 0x9D33, 0x9D34, 0x9D35, 0x9D36, 0x9D37, 0x9D38, 0x9D39, 0x9D3A, 0x9D3C,
+ 0x9D3D, 0x9D3E, 0x9D40, 0x9D41, 0x9D43, 0x9D44, 0x9D45, 0x9D46, 0x9D47,
+ 0x9D48, 0x9D49, 0x9D4A, 0x9D4B, 0x9D4C, 0x9D4D, 0x9D4E, 0x9D4F, 0x9D50,
+ 0x9D54, 0x9D55, 0x9D56, 0x9D57, 0x9D58, 0x9D59, 0x9D5A, 0x9D5B, 0x9D5E,
+ 0x9D5F, 0x9D62, 0x9D63, 0x9D64, 0x9D65, 0x9D66, 0x9D67, 0x9D68, 0x9D69,
+ 0x9D6B, 0x9D6D, 0x9D6E, 0x9D70, 0x9D71, 0x9D73, 0x9D74, 0x9D75, 0x9D76,
+ 0x9D77, 0x9D78, 0x9D79, 0x9D7A, 0x9D7B, 0x9D7C, 0x9D7D, 0x9D7E, 0x9D7F,
+ 0x9D80, 0x9D81, 0x9D82, 0x9D83, 0x9D84, 0x9D85, 0x9D86, 0x9D88, 0x9D8A,
+ 0x9D8B, 0x9D8C, 0x9D8D, 0x9D8E, 0x9D8F, 0x9D90, 0x9D91, 0x9D92, 0x9D94,
+ 0x9D95, 0x9D96, 0x9D97, 0x9D99, 0x9D9B, 0x9D9C, 0x9D9D, 0x9D9E, 0x9D9F,
+ 0x9DA0, 0x9DA1, 0x9DA2, 0x9DA3, 0x9DA4, 0x9DA6, 0x9DA7, 0x9DA8, 0x9DAA,
+ 0x9DAB, 0x9DAC, 0x9DAD, 0x9DAE, 0x9DB0, 0x9DB1, 0x9DB2, 0x9DB3, 0x9DB5,
+ 0x9DB6, 0x9DB7, 0x9DB8, 0x9DB9, 0x9DBA, 0x9DBD, 0x9DBE, 0x9DBF, 0x9DC1,
+ 0x9DC3, 0x9DC5, 0x9DC6, 0x9DC7, 0x9DC8, 0x9DC9, 0x9DCA, 0x9DCB, 0x9DCC,
+ 0x9DCD, 0x9DCE, 0x9DCF, 0x9DD0, 0x9DD1, 0x9DD2, 0x9DD4, 0x9DD5, 0x9DD6,
+ 0x9DD8, 0x9DDB, 0x9DDC, 0x9DDD, 0x9DDE, 0x9DDF, 0x9DE0, 0x9DE1, 0x9DE2,
+ 0x9DE3, 0x9DE4, 0x9DE7, 0x9DE8, 0x9DE9, 0x9DEA, 0x9DEB, 0x9DEC, 0x9DED,
+ 0x9DEE, 0x9DF0, 0x9DF1, 0x9DF4, 0x9DF5, 0x9DF6, 0x9DF7, 0x9DFB, 0x9DFC,
+ 0x9DFD, 0x9DFE, 0x9DFF, 0x9E00, 0x9E01, 0x9E02, 0x9E03, 0x9E04, 0x9E05,
+ 0x9E06, 0x9E07, 0x9E08, 0x9E09, 0x9E0A, 0x9E0B, 0x9E0D, 0x9E0E, 0x9E0F,
+ 0x9E10, 0x9E11, 0x9E12, 0x9E13, 0x9E14, 0x9E16, 0x9E17, 0x9E18, 0x9E19,
+ 0x9E1C, 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, 0x9E76,
+ 0x9E77, 0x9E78, 0x9E7B, 0x9E80, 0x9E81, 0x9E83, 0x9E84, 0x9E85, 0x9E86,
+ 0x9E89, 0x9E8A, 0x9E8C, 0x9E8D, 0x9E8E, 0x9E8F, 0x9E90, 0x9E91, 0x9E94,
+ 0x9E95, 0x9E96, 0x9E98, 0x9E99, 0x9E9A, 0x9E9B, 0x9E9C, 0x9E9E, 0x9EA0,
+ 0x9EA1, 0x9EA2, 0x9EA3, 0x9EA4, 0x9EA7, 0x9EA8, 0x9EAA, 0x9EAB, 0x9EAC,
+ 0x9EAD, 0x9EAE, 0x9EB0, 0x9EB1, 0x9EB2, 0x9EB3, 0x9EB6, 0x9EB7, 0x9EB9,
+ 0x9EBA, 0x9EBC, 0x9EBF, 0x9EC0, 0x9EC1, 0x9EC2, 0x9EC3, 0x9EC5, 0x9EC6,
+ 0x9EC7, 0x9EC8, 0x9ECA, 0x9ECB, 0x9ED0, 0x9ED2, 0x9ED3, 0x9ED5, 0x9ED6,
+ 0x9ED7, 0x9ED9, 0x9EDA, 0x9EE1, 0x9EE3, 0x9EE4, 0x9EE6, 0x9EEB, 0x9EEC,
+ 0x9EED, 0x9EEE, 0x9EF0, 0x9EF1, 0x9EF3, 0x9EF5, 0x9EF6, 0x9EF8, 0x9EFA,
+ 0x9F00, 0x9F01, 0x9F02, 0x9F03, 0x9F04, 0x9F05, 0x9F06, 0x9F07, 0x9F08,
+ 0x9F0A, 0x9F0C, 0x9F0F, 0x9F11, 0x9F12, 0x9F14, 0x9F16, 0x9F18, 0x9F1A,
+ 0x9F1B, 0x9F1C, 0x9F1D, 0x9F1E, 0x9F1F, 0x9F21, 0x9F23, 0x9F24, 0x9F25,
+ 0x9F26, 0x9F27, 0x9F28, 0x9F29, 0x9F2A, 0x9F2B, 0x9F2D, 0x9F2E, 0x9F30,
+ 0x9F31, 0x9F32, 0x9F33, 0x9F34, 0x9F35, 0x9F36, 0x9F38, 0x9F3A, 0x9F3C,
+ 0x9F3F, 0x9F40, 0x9F41, 0x9F42, 0x9F43, 0x9F45, 0x9F46, 0x9F47, 0x9F48,
+ 0x9F49, 0x9F4C, 0x9F4D, 0x9F4E, 0x9F53, 0x9F55, 0x9F56, 0x9F57, 0x9F58,
+ 0x9F5A, 0x9F5B, 0x9F5D, 0x9F5E, 0x9F62, 0x9F64, 0x9F65, 0x9F67, 0x9F68,
+ 0x9F69, 0x9F6B, 0x9F6D, 0x9F6E, 0x9F6F, 0x9F70, 0x9F71, 0x9F73, 0x9F74,
+ 0x9F75, 0x9F76, 0x9F78, 0x9F79, 0x9F7A, 0x9F7B, 0x9F7C, 0x9F7D, 0x9F7E,
+ 0x9F81, 0x9F82, 0x9F8E, 0x9F8F, 0x9F91, 0x9F92, 0x9F93, 0x9F96, 0x9F97,
+ 0x9F98, 0x9F9D, 0x9F9E, 0x9FA1, 0x9FA2, 0x9FA3, 0x9FA4, 0x9FA5, 0xF92C,
+ 0xFA0D, 0xFA0E, 0xFA0F, 0xFA11, 0xFA13, 0xFA14, 0xFA18, 0xFA1F, 0xFA20,
+ 0xFA21, 0xFA23, 0xFA24, 0xFA27, 0xFA28, 0xFA29, 0x2E81, 0x0000, 0x0000,
+ 0x0000, 0x2E84, 0x3473, 0x3447, 0x2E88, 0x2E8B, 0x9FB4, 0x359E, 0x361A,
+ 0x360E, 0x2E8C, 0x2E97, 0x396E, 0x3918, 0x9FB5, 0x39CF, 0x39DF, 0x3A73,
+ 0x39D0, 0x9FB6, 0x9FB7, 0x3B4E, 0x3C6E, 0x3CE0, 0x2EA7, 0x0000, 0x9FB8,
+ 0x2EAA, 0x4056, 0x415F, 0x2EAE, 0x4337, 0x2EB3, 0x2EB6, 0x2EB7, 0x0000,
+ 0x43B1, 0x43AC, 0x2EBB, 0x43DD, 0x44D6, 0x4661, 0x464C, 0x9FB9, 0x4723,
+ 0x4729, 0x477C, 0x478D, 0x2ECA, 0x4947, 0x497A, 0x497D, 0x4982, 0x4983,
+ 0x4985, 0x4986, 0x499F, 0x499B, 0x49B7, 0x49B6, 0x9FBA, 0x0000, 0x4CA3,
+ 0x4C9F, 0x4CA0, 0x4CA1, 0x4C77, 0x4CA2, 0x4D13, 0x4D14, 0x4D15, 0x4D16,
+ 0x4D17, 0x4D18, 0x4D19, 0x4DAE, 0x9FBB, 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, 0x00FC, 0x00A9, 0x2122, 0x2026, 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,
+ 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,
+ 0x1E3F, 0x0144, 0x0148, 0x01F9, 0x0261, 0x0020, 0x20AC, 0x00A5, 0x20AC,
+ 0x0024, 0x303F, 0x20AC, 0x3041, 0x3047, 0x3043, 0x304B, 0x304B, 0x3051,
+ 0x3051, 0x3053, 0x3053, 0x3049, 0x3064, 0x3045, 0x308E, 0x3083, 0x3087,
+ 0x3085, 0x3094, 0x30A1, 0x30A7, 0x30A3, 0x30F5, 0x30F6, 0x30B3, 0x30B3,
+ 0x30A9, 0x30C3, 0x30A5, 0x30EE, 0x30E3, 0x30E7, 0x30E5, 0x30F7, 0x30F9,
+ 0x30F8, 0x30FA, 0x30FC, 0x3033, 0x3034, 0x3035, 0x3038, 0x3039, 0x303A,
+ 0x312A, 0x312B, 0x312C, 0x31A0, 0x31A1, 0x31A2, 0x31A3, 0x31A4, 0x31A5,
+ 0x31A6, 0x31A7, 0x31A8, 0x31A9, 0x31AA, 0x31AB, 0x31AC, 0x31AD, 0x31AE,
+ 0x31AF, 0x31B0, 0x31B1, 0x31B2, 0x31B3, 0x31B4, 0x31B5, 0x31B6, 0x31B7,
+ 0x2E80, 0x2E82, 0x2E83, 0x2E85, 0x2E86, 0x2E87, 0x2E89, 0x2E8A, 0x2E8D,
+ 0x2E8E, 0x2E8F, 0x2E90, 0x2E91, 0x2E92, 0x2E93, 0x2E94, 0x2E95, 0x2E96,
+ 0x2E98, 0x2E99, 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, 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, 0x361B, 0x361C, 0x361D, 0x361E,
+ 0x361F, 0x3620, 0x3621, 0x3622, 0x3623, 0x3624, 0x3625, 0x3626, 0x3627,
+ 0x3628, 0x3629, 0x362A, 0x362B, 0x362C, 0x362D, 0x362E, 0x362F, 0x3630,
+ 0x3631, 0x3632, 0x3633, 0x3634, 0x3635, 0x3636, 0x3637, 0x3638, 0x3639,
+ 0x363A, 0x363B, 0x363C, 0x363D, 0x363E, 0x363F, 0x3640, 0x3641, 0x3642,
+ 0x3643, 0x3644, 0x3645, 0x3646, 0x3647, 0x3648, 0x3649, 0x364A, 0x364B,
+ 0x364C, 0x364D, 0x364E, 0x364F, 0x3650, 0x3651, 0x3652, 0x3653, 0x3654,
+ 0x3655, 0x3656, 0x3657, 0x3658, 0x3659, 0x365A, 0x365B, 0x365C, 0x365D,
+ 0x365E, 0x365F, 0x3660, 0x3661, 0x3662, 0x3663, 0x3664, 0x3665, 0x3666,
+ 0x3667, 0x3668, 0x3669, 0x366A, 0x366B, 0x366C, 0x366D, 0x366E, 0x366F,
+ 0x3670, 0x3671, 0x3672, 0x3673, 0x3674, 0x3675, 0x3676, 0x3677, 0x3678,
+ 0x3679, 0x367A, 0x367B, 0x367C, 0x367D, 0x367E, 0x367F, 0x3680, 0x3681,
+ 0x3682, 0x3683, 0x3684, 0x3685, 0x3686, 0x3687, 0x3688, 0x3689, 0x368A,
+ 0x368B, 0x368C, 0x368D, 0x368E, 0x368F, 0x3690, 0x3691, 0x3692, 0x3693,
+ 0x3694, 0x3695, 0x3696, 0x3697, 0x3698, 0x3699, 0x369A, 0x369B, 0x369C,
+ 0x369D, 0x369E, 0x369F, 0x36A0, 0x36A1, 0x36A2, 0x36A3, 0x36A4, 0x36A5,
+ 0x36A6, 0x36A7, 0x36A8, 0x36A9, 0x36AA, 0x36AB, 0x36AC, 0x36AD, 0x36AE,
+ 0x36AF, 0x36B0, 0x36B1, 0x36B2, 0x36B3, 0x36B4, 0x36B5, 0x36B6, 0x36B7,
+ 0x36B8, 0x36B9, 0x36BA, 0x36BB, 0x36BC, 0x36BD, 0x36BE, 0x36BF, 0x36C0,
+ 0x36C1, 0x36C2, 0x36C3, 0x36C4, 0x36C5, 0x36C6, 0x36C7, 0x36C8, 0x36C9,
+ 0x36CA, 0x36CB, 0x36CC, 0x36CD, 0x36CE, 0x36CF, 0x36D0, 0x36D1, 0x36D2,
+ 0x36D3, 0x36D4, 0x36D5, 0x36D6, 0x36D7, 0x36D8, 0x36D9, 0x36DA, 0x36DB,
+ 0x36DC, 0x36DD, 0x36DE, 0x36DF, 0x36E0, 0x36E1, 0x36E2, 0x36E3, 0x36E4,
+ 0x36E5, 0x36E6, 0x36E7, 0x36E8, 0x36E9, 0x36EA, 0x36EB, 0x36EC, 0x36ED,
+ 0x36EE, 0x36EF, 0x36F0, 0x36F1, 0x36F2, 0x36F3, 0x36F4, 0x36F5, 0x36F6,
+ 0x36F7, 0x36F8, 0x36F9, 0x36FA, 0x36FB, 0x36FC, 0x36FD, 0x36FE, 0x36FF,
+ 0x3700, 0x3701, 0x3702, 0x3703, 0x3704, 0x3705, 0x3706, 0x3707, 0x3708,
+ 0x3709, 0x370A, 0x370B, 0x370C, 0x370D, 0x370E, 0x370F, 0x3710, 0x3711,
+ 0x3712, 0x3713, 0x3714, 0x3715, 0x3716, 0x3717, 0x3718, 0x3719, 0x371A,
+ 0x371B, 0x371C, 0x371D, 0x371E, 0x371F, 0x3720, 0x3721, 0x3722, 0x3723,
+ 0x3724, 0x3725, 0x3726, 0x3727, 0x3728, 0x3729, 0x372A, 0x372B, 0x372C,
+ 0x372D, 0x372E, 0x372F, 0x3730, 0x3731, 0x3732, 0x3733, 0x3734, 0x3735,
+ 0x3736, 0x3737, 0x3738, 0x3739, 0x373A, 0x373B, 0x373C, 0x373D, 0x373E,
+ 0x373F, 0x3740, 0x3741, 0x3742, 0x3743, 0x3744, 0x3745, 0x3746, 0x3747,
+ 0x3748, 0x3749, 0x374A, 0x374B, 0x374C, 0x374D, 0x374E, 0x374F, 0x3750,
+ 0x3751, 0x3752, 0x3753, 0x3754, 0x3755, 0x3756, 0x3757, 0x3758, 0x3759,
+ 0x375A, 0x375B, 0x375C, 0x375D, 0x375E, 0x375F, 0x3760, 0x3761, 0x3762,
+ 0x3763, 0x3764, 0x3765, 0x3766, 0x3767, 0x3768, 0x3769, 0x376A, 0x376B,
+ 0x376C, 0x376D, 0x376E, 0x376F, 0x3770, 0x3771, 0x3772, 0x3773, 0x3774,
+ 0x3775, 0x3776, 0x3777, 0x3778, 0x3779, 0x377A, 0x377B, 0x377C, 0x377D,
+ 0x377E, 0x377F, 0x3780, 0x3781, 0x3782, 0x3783, 0x3784, 0x3785, 0x3786,
+ 0x3787, 0x3788, 0x3789, 0x378A, 0x378B, 0x378C, 0x378D, 0x378E, 0x378F,
+ 0x3790, 0x3791, 0x3792, 0x3793, 0x3794, 0x3795, 0x3796, 0x3797, 0x3798,
+ 0x3799, 0x379A, 0x379B, 0x379C, 0x379D, 0x379E, 0x379F, 0x37A0, 0x37A1,
+ 0x37A2, 0x37A3, 0x37A4, 0x37A5, 0x37A6, 0x37A7, 0x37A8, 0x37A9, 0x37AA,
+ 0x37AB, 0x37AC, 0x37AD, 0x37AE, 0x37AF, 0x37B0, 0x37B1, 0x37B2, 0x37B3,
+ 0x37B4, 0x37B5, 0x37B6, 0x37B7, 0x37B8, 0x37B9, 0x37BA, 0x37BB, 0x37BC,
+ 0x37BD, 0x37BE, 0x37BF, 0x37C0, 0x37C1, 0x37C2, 0x37C3, 0x37C4, 0x37C5,
+ 0x37C6, 0x37C7, 0x37C8, 0x37C9, 0x37CA, 0x37CB, 0x37CC, 0x37CD, 0x37CE,
+ 0x37CF, 0x37D0, 0x37D1, 0x37D2, 0x37D3, 0x37D4, 0x37D5, 0x37D6, 0x37D7,
+ 0x37D8, 0x37D9, 0x37DA, 0x37DB, 0x37DC, 0x37DD, 0x37DE, 0x37DF, 0x37E0,
+ 0x37E1, 0x37E2, 0x37E3, 0x37E4, 0x37E5, 0x37E6, 0x37E7, 0x37E8, 0x37E9,
+ 0x37EA, 0x37EB, 0x37EC, 0x37ED, 0x37EE, 0x37EF, 0x37F0, 0x37F1, 0x37F2,
+ 0x37F3, 0x37F4, 0x37F5, 0x37F6, 0x37F7, 0x37F8, 0x37F9, 0x37FA, 0x37FB,
+ 0x37FC, 0x37FD, 0x37FE, 0x37FF, 0x3800, 0x3801, 0x3802, 0x3803, 0x3804,
+ 0x3805, 0x3806, 0x3807, 0x3808, 0x3809, 0x380A, 0x380B, 0x380C, 0x380D,
+ 0x380E, 0x380F, 0x3810, 0x3811, 0x3812, 0x3813, 0x3814, 0x3815, 0x3816,
+ 0x3817, 0x3818, 0x3819, 0x381A, 0x381B, 0x381C, 0x381D, 0x381E, 0x381F,
+ 0x3820, 0x3821, 0x3822, 0x3823, 0x3824, 0x3825, 0x3826, 0x3827, 0x3828,
+ 0x3829, 0x382A, 0x382B, 0x382C, 0x382D, 0x382E, 0x382F, 0x3830, 0x3831,
+ 0x3832, 0x3833, 0x3834, 0x3835, 0x3836, 0x3837, 0x3838, 0x3839, 0x383A,
+ 0x383B, 0x383C, 0x383D, 0x383E, 0x383F, 0x3840, 0x3841, 0x3842, 0x3843,
+ 0x3844, 0x3845, 0x3846, 0x3847, 0x3848, 0x3849, 0x384A, 0x384B, 0x384C,
+ 0x384D, 0x384E, 0x384F, 0x3850, 0x3851, 0x3852, 0x3853, 0x3854, 0x3855,
+ 0x3856, 0x3857, 0x3858, 0x3859, 0x385A, 0x385B, 0x385C, 0x385D, 0x385E,
+ 0x385F, 0x3860, 0x3861, 0x3862, 0x3863, 0x3864, 0x3865, 0x3866, 0x3867,
+ 0x3868, 0x3869, 0x386A, 0x386B, 0x386C, 0x386D, 0x386E, 0x386F, 0x3870,
+ 0x3871, 0x3872, 0x3873, 0x3874, 0x3875, 0x3876, 0x3877, 0x3878, 0x3879,
+ 0x387A, 0x387B, 0x387C, 0x387D, 0x387E, 0x387F, 0x3880, 0x3881, 0x3882,
+ 0x3883, 0x3884, 0x3885, 0x3886, 0x3887, 0x3888, 0x3889, 0x388A, 0x388B,
+ 0x388C, 0x388D, 0x388E, 0x388F, 0x3890, 0x3891, 0x3892, 0x3893, 0x3894,
+ 0x3895, 0x3896, 0x3897, 0x3898, 0x3899, 0x389A, 0x389B, 0x389C, 0x389D,
+ 0x389E, 0x389F, 0x38A0, 0x38A1, 0x38A2, 0x38A3, 0x38A4, 0x38A5, 0x38A6,
+ 0x38A7, 0x38A8, 0x38A9, 0x38AA, 0x38AB, 0x38AC, 0x38AD, 0x38AE, 0x38AF,
+ 0x38B0, 0x38B1, 0x38B2, 0x38B3, 0x38B4, 0x38B5, 0x38B6, 0x38B7, 0x38B8,
+ 0x38B9, 0x38BA, 0x38BB, 0x38BC, 0x38BD, 0x38BE, 0x38BF, 0x38C0, 0x38C1,
+ 0x38C2, 0x38C3, 0x38C4, 0x38C5, 0x38C6, 0x38C7, 0x38C8, 0x38C9, 0x38CA,
+ 0x38CB, 0x38CC, 0x38CD, 0x38CE, 0x38CF, 0x38D0, 0x38D1, 0x38D2, 0x38D3,
+ 0x38D4, 0x38D5, 0x38D6, 0x38D7, 0x38D8, 0x38D9, 0x38DA, 0x38DB, 0x38DC,
+ 0x38DD, 0x38DE, 0x38DF, 0x38E0, 0x38E1, 0x38E2, 0x38E3, 0x38E4, 0x38E5,
+ 0x38E6, 0x38E7, 0x38E8, 0x38E9, 0x38EA, 0x38EB, 0x38EC, 0x38ED, 0x38EE,
+ 0x38EF, 0x38F0, 0x38F1, 0x38F2, 0x38F3, 0x38F4, 0x38F5, 0x38F6, 0x38F7,
+ 0x38F8, 0x38F9, 0x38FA, 0x38FB, 0x38FC, 0x38FD, 0x38FE, 0x38FF, 0x3900,
+ 0x3901, 0x3902, 0x3903, 0x3904, 0x3905, 0x3906, 0x3907, 0x3908, 0x3909,
+ 0x390A, 0x390B, 0x390C, 0x390D, 0x390E, 0x390F, 0x3910, 0x3911, 0x3912,
+ 0x3913, 0x3914, 0x3915, 0x3916, 0x3917, 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, 0x3CE1, 0x3CE2, 0x3CE3, 0x3CE4, 0x3CE5, 0x3CE6, 0x3CE7,
+ 0x3CE8, 0x3CE9, 0x3CEA, 0x3CEB, 0x3CEC, 0x3CED, 0x3CEE, 0x3CEF, 0x3CF0,
+ 0x3CF1, 0x3CF2, 0x3CF3, 0x3CF4, 0x3CF5, 0x3CF6, 0x3CF7, 0x3CF8, 0x3CF9,
+ 0x3CFA, 0x3CFB, 0x3CFC, 0x3CFD, 0x3CFE, 0x3CFF, 0x3D00, 0x3D01, 0x3D02,
+ 0x3D03, 0x3D04, 0x3D05, 0x3D06, 0x3D07, 0x3D08, 0x3D09, 0x3D0A, 0x3D0B,
+ 0x3D0C, 0x3D0D, 0x3D0E, 0x3D0F, 0x3D10, 0x3D11, 0x3D12, 0x3D13, 0x3D14,
+ 0x3D15, 0x3D16, 0x3D17, 0x3D18, 0x3D19, 0x3D1A, 0x3D1B, 0x3D1C, 0x3D1D,
+ 0x3D1E, 0x3D1F, 0x3D20, 0x3D21, 0x3D22, 0x3D23, 0x3D24, 0x3D25, 0x3D26,
+ 0x3D27, 0x3D28, 0x3D29, 0x3D2A, 0x3D2B, 0x3D2C, 0x3D2D, 0x3D2E, 0x3D2F,
+ 0x3D30, 0x3D31, 0x3D32, 0x3D33, 0x3D34, 0x3D35, 0x3D36, 0x3D37, 0x3D38,
+ 0x3D39, 0x3D3A, 0x3D3B, 0x3D3C, 0x3D3D, 0x3D3E, 0x3D3F, 0x3D40, 0x3D41,
+ 0x3D42, 0x3D43, 0x3D44, 0x3D45, 0x3D46, 0x3D47, 0x3D48, 0x3D49, 0x3D4A,
+ 0x3D4B, 0x3D4C, 0x3D4D, 0x3D4E, 0x3D4F, 0x3D50, 0x3D51, 0x3D52, 0x3D53,
+ 0x3D54, 0x3D55, 0x3D56, 0x3D57, 0x3D58, 0x3D59, 0x3D5A, 0x3D5B, 0x3D5C,
+ 0x3D5D, 0x3D5E, 0x3D5F, 0x3D60, 0x3D61, 0x3D62, 0x3D63, 0x3D64, 0x3D65,
+ 0x3D66, 0x3D67, 0x3D68, 0x3D69, 0x3D6A, 0x3D6B, 0x3D6C, 0x3D6D, 0x3D6E,
+ 0x3D6F, 0x3D70, 0x3D71, 0x3D72, 0x3D73, 0x3D74, 0x3D75, 0x3D76, 0x3D77,
+ 0x3D78, 0x3D79, 0x3D7A, 0x3D7B, 0x3D7C, 0x3D7D, 0x3D7E, 0x3D7F, 0x3D80,
+ 0x3D81, 0x3D82, 0x3D83, 0x3D84, 0x3D85, 0x3D86, 0x3D87, 0x3D88, 0x3D89,
+ 0x3D8A, 0x3D8B, 0x3D8C, 0x3D8D, 0x3D8E, 0x3D8F, 0x3D90, 0x3D91, 0x3D92,
+ 0x3D93, 0x3D94, 0x3D95, 0x3D96, 0x3D97, 0x3D98, 0x3D99, 0x3D9A, 0x3D9B,
+ 0x3D9C, 0x3D9D, 0x3D9E, 0x3D9F, 0x3DA0, 0x3DA1, 0x3DA2, 0x3DA3, 0x3DA4,
+ 0x3DA5, 0x3DA6, 0x3DA7, 0x3DA8, 0x3DA9, 0x3DAA, 0x3DAB, 0x3DAC, 0x3DAD,
+ 0x3DAE, 0x3DAF, 0x3DB0, 0x3DB1, 0x3DB2, 0x3DB3, 0x3DB4, 0x3DB5, 0x3DB6,
+ 0x3DB7, 0x3DB8, 0x3DB9, 0x3DBA, 0x3DBB, 0x3DBC, 0x3DBD, 0x3DBE, 0x3DBF,
+ 0x3DC0, 0x3DC1, 0x3DC2, 0x3DC3, 0x3DC4, 0x3DC5, 0x3DC6, 0x3DC7, 0x3DC8,
+ 0x3DC9, 0x3DCA, 0x3DCB, 0x3DCC, 0x3DCD, 0x3DCE, 0x3DCF, 0x3DD0, 0x3DD1,
+ 0x3DD2, 0x3DD3, 0x3DD4, 0x3DD5, 0x3DD6, 0x3DD7, 0x3DD8, 0x3DD9, 0x3DDA,
+ 0x3DDB, 0x3DDC, 0x3DDD, 0x3DDE, 0x3DDF, 0x3DE0, 0x3DE1, 0x3DE2, 0x3DE3,
+ 0x3DE4, 0x3DE5, 0x3DE6, 0x3DE7, 0x3DE8, 0x3DE9, 0x3DEA, 0x3DEB, 0x3DEC,
+ 0x3DED, 0x3DEE, 0x3DEF, 0x3DF0, 0x3DF1, 0x3DF2, 0x3DF3, 0x3DF4, 0x3DF5,
+ 0x3DF6, 0x3DF7, 0x3DF8, 0x3DF9, 0x3DFA, 0x3DFB, 0x3DFC, 0x3DFD, 0x3DFE,
+ 0x3DFF, 0x3E00, 0x3E01, 0x3E02, 0x3E03, 0x3E04, 0x3E05, 0x3E06, 0x3E07,
+ 0x3E08, 0x3E09, 0x3E0A, 0x3E0B, 0x3E0C, 0x3E0D, 0x3E0E, 0x3E0F, 0x3E10,
+ 0x3E11, 0x3E12, 0x3E13, 0x3E14, 0x3E15, 0x3E16, 0x3E17, 0x3E18, 0x3E19,
+ 0x3E1A, 0x3E1B, 0x3E1C, 0x3E1D, 0x3E1E, 0x3E1F, 0x3E20, 0x3E21, 0x3E22,
+ 0x3E23, 0x3E24, 0x3E25, 0x3E26, 0x3E27, 0x3E28, 0x3E29, 0x3E2A, 0x3E2B,
+ 0x3E2C, 0x3E2D, 0x3E2E, 0x3E2F, 0x3E30, 0x3E31, 0x3E32, 0x3E33, 0x3E34,
+ 0x3E35, 0x3E36, 0x3E37, 0x3E38, 0x3E39, 0x3E3A, 0x3E3B, 0x3E3C, 0x3E3D,
+ 0x3E3E, 0x3E3F, 0x3E40, 0x3E41, 0x3E42, 0x3E43, 0x3E44, 0x3E45, 0x3E46,
+ 0x3E47, 0x3E48, 0x3E49, 0x3E4A, 0x3E4B, 0x3E4C, 0x3E4D, 0x3E4E, 0x3E4F,
+ 0x3E50, 0x3E51, 0x3E52, 0x3E53, 0x3E54, 0x3E55, 0x3E56, 0x3E57, 0x3E58,
+ 0x3E59, 0x3E5A, 0x3E5B, 0x3E5C, 0x3E5D, 0x3E5E, 0x3E5F, 0x3E60, 0x3E61,
+ 0x3E62, 0x3E63, 0x3E64, 0x3E65, 0x3E66, 0x3E67, 0x3E68, 0x3E69, 0x3E6A,
+ 0x3E6B, 0x3E6C, 0x3E6D, 0x3E6E, 0x3E6F, 0x3E70, 0x3E71, 0x3E72, 0x3E73,
+ 0x3E74, 0x3E75, 0x3E76, 0x3E77, 0x3E78, 0x3E79, 0x3E7A, 0x3E7B, 0x3E7C,
+ 0x3E7D, 0x3E7E, 0x3E7F, 0x3E80, 0x3E81, 0x3E82, 0x3E83, 0x3E84, 0x3E85,
+ 0x3E86, 0x3E87, 0x3E88, 0x3E89, 0x3E8A, 0x3E8B, 0x3E8C, 0x3E8D, 0x3E8E,
+ 0x3E8F, 0x3E90, 0x3E91, 0x3E92, 0x3E93, 0x3E94, 0x3E95, 0x3E96, 0x3E97,
+ 0x3E98, 0x3E99, 0x3E9A, 0x3E9B, 0x3E9C, 0x3E9D, 0x3E9E, 0x3E9F, 0x3EA0,
+ 0x3EA1, 0x3EA2, 0x3EA3, 0x3EA4, 0x3EA5, 0x3EA6, 0x3EA7, 0x3EA8, 0x3EA9,
+ 0x3EAA, 0x3EAB, 0x3EAC, 0x3EAD, 0x3EAE, 0x3EAF, 0x3EB0, 0x3EB1, 0x3EB2,
+ 0x3EB3, 0x3EB4, 0x3EB5, 0x3EB6, 0x3EB7, 0x3EB8, 0x3EB9, 0x3EBA, 0x3EBB,
+ 0x3EBC, 0x3EBD, 0x3EBE, 0x3EBF, 0x3EC0, 0x3EC1, 0x3EC2, 0x3EC3, 0x3EC4,
+ 0x3EC5, 0x3EC6, 0x3EC7, 0x3EC8, 0x3EC9, 0x3ECA, 0x3ECB, 0x3ECC, 0x3ECD,
+ 0x3ECE, 0x3ECF, 0x3ED0, 0x3ED1, 0x3ED2, 0x3ED3, 0x3ED4, 0x3ED5, 0x3ED6,
+ 0x3ED7, 0x3ED8, 0x3ED9, 0x3EDA, 0x3EDB, 0x3EDC, 0x3EDD, 0x3EDE, 0x3EDF,
+ 0x3EE0, 0x3EE1, 0x3EE2, 0x3EE3, 0x3EE4, 0x3EE5, 0x3EE6, 0x3EE7, 0x3EE8,
+ 0x3EE9, 0x3EEA, 0x3EEB, 0x3EEC, 0x3EED, 0x3EEE, 0x3EEF, 0x3EF0, 0x3EF1,
+ 0x3EF2, 0x3EF3, 0x3EF4, 0x3EF5, 0x3EF6, 0x3EF7, 0x3EF8, 0x3EF9, 0x3EFA,
+ 0x3EFB, 0x3EFC, 0x3EFD, 0x3EFE, 0x3EFF, 0x3F00, 0x3F01, 0x3F02, 0x3F03,
+ 0x3F04, 0x3F05, 0x3F06, 0x3F07, 0x3F08, 0x3F09, 0x3F0A, 0x3F0B, 0x3F0C,
+ 0x3F0D, 0x3F0E, 0x3F0F, 0x3F10, 0x3F11, 0x3F12, 0x3F13, 0x3F14, 0x3F15,
+ 0x3F16, 0x3F17, 0x3F18, 0x3F19, 0x3F1A, 0x3F1B, 0x3F1C, 0x3F1D, 0x3F1E,
+ 0x3F1F, 0x3F20, 0x3F21, 0x3F22, 0x3F23, 0x3F24, 0x3F25, 0x3F26, 0x3F27,
+ 0x3F28, 0x3F29, 0x3F2A, 0x3F2B, 0x3F2C, 0x3F2D, 0x3F2E, 0x3F2F, 0x3F30,
+ 0x3F31, 0x3F32, 0x3F33, 0x3F34, 0x3F35, 0x3F36, 0x3F37, 0x3F38, 0x3F39,
+ 0x3F3A, 0x3F3B, 0x3F3C, 0x3F3D, 0x3F3E, 0x3F3F, 0x3F40, 0x3F41, 0x3F42,
+ 0x3F43, 0x3F44, 0x3F45, 0x3F46, 0x3F47, 0x3F48, 0x3F49, 0x3F4A, 0x3F4B,
+ 0x3F4C, 0x3F4D, 0x3F4E, 0x3F4F, 0x3F50, 0x3F51, 0x3F52, 0x3F53, 0x3F54,
+ 0x3F55, 0x3F56, 0x3F57, 0x3F58, 0x3F59, 0x3F5A, 0x3F5B, 0x3F5C, 0x3F5D,
+ 0x3F5E, 0x3F5F, 0x3F60, 0x3F61, 0x3F62, 0x3F63, 0x3F64, 0x3F65, 0x3F66,
+ 0x3F67, 0x3F68, 0x3F69, 0x3F6A, 0x3F6B, 0x3F6C, 0x3F6D, 0x3F6E, 0x3F6F,
+ 0x3F70, 0x3F71, 0x3F72, 0x3F73, 0x3F74, 0x3F75, 0x3F76, 0x3F77, 0x3F78,
+ 0x3F79, 0x3F7A, 0x3F7B, 0x3F7C, 0x3F7D, 0x3F7E, 0x3F7F, 0x3F80, 0x3F81,
+ 0x3F82, 0x3F83, 0x3F84, 0x3F85, 0x3F86, 0x3F87, 0x3F88, 0x3F89, 0x3F8A,
+ 0x3F8B, 0x3F8C, 0x3F8D, 0x3F8E, 0x3F8F, 0x3F90, 0x3F91, 0x3F92, 0x3F93,
+ 0x3F94, 0x3F95, 0x3F96, 0x3F97, 0x3F98, 0x3F99, 0x3F9A, 0x3F9B, 0x3F9C,
+ 0x3F9D, 0x3F9E, 0x3F9F, 0x3FA0, 0x3FA1, 0x3FA2, 0x3FA3, 0x3FA4, 0x3FA5,
+ 0x3FA6, 0x3FA7, 0x3FA8, 0x3FA9, 0x3FAA, 0x3FAB, 0x3FAC, 0x3FAD, 0x3FAE,
+ 0x3FAF, 0x3FB0, 0x3FB1, 0x3FB2, 0x3FB3, 0x3FB4, 0x3FB5, 0x3FB6, 0x3FB7,
+ 0x3FB8, 0x3FB9, 0x3FBA, 0x3FBB, 0x3FBC, 0x3FBD, 0x3FBE, 0x3FBF, 0x3FC0,
+ 0x3FC1, 0x3FC2, 0x3FC3, 0x3FC4, 0x3FC5, 0x3FC6, 0x3FC7, 0x3FC8, 0x3FC9,
+ 0x3FCA, 0x3FCB, 0x3FCC, 0x3FCD, 0x3FCE, 0x3FCF, 0x3FD0, 0x3FD1, 0x3FD2,
+ 0x3FD3, 0x3FD4, 0x3FD5, 0x3FD6, 0x3FD7, 0x3FD8, 0x3FD9, 0x3FDA, 0x3FDB,
+ 0x3FDC, 0x3FDD, 0x3FDE, 0x3FDF, 0x3FE0, 0x3FE1, 0x3FE2, 0x3FE3, 0x3FE4,
+ 0x3FE5, 0x3FE6, 0x3FE7, 0x3FE8, 0x3FE9, 0x3FEA, 0x3FEB, 0x3FEC, 0x3FED,
+ 0x3FEE, 0x3FEF, 0x3FF0, 0x3FF1, 0x3FF2, 0x3FF3, 0x3FF4, 0x3FF5, 0x3FF6,
+ 0x3FF7, 0x3FF8, 0x3FF9, 0x3FFA, 0x3FFB, 0x3FFC, 0x3FFD, 0x3FFE, 0x3FFF,
+ 0x4000, 0x4001, 0x4002, 0x4003, 0x4004, 0x4005, 0x4006, 0x4007, 0x4008,
+ 0x4009, 0x400A, 0x400B, 0x400C, 0x400D, 0x400E, 0x400F, 0x4010, 0x4011,
+ 0x4012, 0x4013, 0x4014, 0x4015, 0x4016, 0x4017, 0x4018, 0x4019, 0x401A,
+ 0x401B, 0x401C, 0x401D, 0x401E, 0x401F, 0x4020, 0x4021, 0x4022, 0x4023,
+ 0x4024, 0x4025, 0x4026, 0x4027, 0x4028, 0x4029, 0x402A, 0x402B, 0x402C,
+ 0x402D, 0x402E, 0x402F, 0x4030, 0x4031, 0x4032, 0x4033, 0x4034, 0x4035,
+ 0x4036, 0x4037, 0x4038, 0x4039, 0x403A, 0x403B, 0x403C, 0x403D, 0x403E,
+ 0x403F, 0x4040, 0x4041, 0x4042, 0x4043, 0x4044, 0x4045, 0x4046, 0x4047,
+ 0x4048, 0x4049, 0x404A, 0x404B, 0x404C, 0x404D, 0x404E, 0x404F, 0x4050,
+ 0x4051, 0x4052, 0x4053, 0x4054, 0x4055, 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, 0x4160,
+ 0x4161, 0x4162, 0x4163, 0x4164, 0x4165, 0x4166, 0x4167, 0x4168, 0x4169,
+ 0x416A, 0x416B, 0x416C, 0x416D, 0x416E, 0x416F, 0x4170, 0x4171, 0x4172,
+ 0x4173, 0x4174, 0x4175, 0x4176, 0x4177, 0x4178, 0x4179, 0x417A, 0x417B,
+ 0x417C, 0x417D, 0x417E, 0x417F, 0x4180, 0x4181, 0x4182, 0x4183, 0x4184,
+ 0x4185, 0x4186, 0x4187, 0x4188, 0x4189, 0x418A, 0x418B, 0x418C, 0x418D,
+ 0x418E, 0x418F, 0x4190, 0x4191, 0x4192, 0x4193, 0x4194, 0x4195, 0x4196,
+ 0x4197, 0x4198, 0x4199, 0x419A, 0x419B, 0x419C, 0x419D, 0x419E, 0x419F,
+ 0x41A0, 0x41A1, 0x41A2, 0x41A3, 0x41A4, 0x41A5, 0x41A6, 0x41A7, 0x41A8,
+ 0x41A9, 0x41AA, 0x41AB, 0x41AC, 0x41AD, 0x41AE, 0x41AF, 0x41B0, 0x41B1,
+ 0x41B2, 0x41B3, 0x41B4, 0x41B5, 0x41B6, 0x41B7, 0x41B8, 0x41B9, 0x41BA,
+ 0x41BB, 0x41BC, 0x41BD, 0x41BE, 0x41BF, 0x41C0, 0x41C1, 0x41C2, 0x41C3,
+ 0x41C4, 0x41C5, 0x41C6, 0x41C7, 0x41C8, 0x41C9, 0x41CA, 0x41CB, 0x41CC,
+ 0x41CD, 0x41CE, 0x41CF, 0x41D0, 0x41D1, 0x41D2, 0x41D3, 0x41D4, 0x41D5,
+ 0x41D6, 0x41D7, 0x41D8, 0x41D9, 0x41DA, 0x41DB, 0x41DC, 0x41DD, 0x41DE,
+ 0x41DF, 0x41E0, 0x41E1, 0x41E2, 0x41E3, 0x41E4, 0x41E5, 0x41E6, 0x41E7,
+ 0x41E8, 0x41E9, 0x41EA, 0x41EB, 0x41EC, 0x41ED, 0x41EE, 0x41EF, 0x41F0,
+ 0x41F1, 0x41F2, 0x41F3, 0x41F4, 0x41F5, 0x41F6, 0x41F7, 0x41F8, 0x41F9,
+ 0x41FA, 0x41FB, 0x41FC, 0x41FD, 0x41FE, 0x41FF, 0x4200, 0x4201, 0x4202,
+ 0x4203, 0x4204, 0x4205, 0x4206, 0x4207, 0x4208, 0x4209, 0x420A, 0x420B,
+ 0x420C, 0x420D, 0x420E, 0x420F, 0x4210, 0x4211, 0x4212, 0x4213, 0x4214,
+ 0x4215, 0x4216, 0x4217, 0x4218, 0x4219, 0x421A, 0x421B, 0x421C, 0x421D,
+ 0x421E, 0x421F, 0x4220, 0x4221, 0x4222, 0x4223, 0x4224, 0x4225, 0x4226,
+ 0x4227, 0x4228, 0x4229, 0x422A, 0x422B, 0x422C, 0x422D, 0x422E, 0x422F,
+ 0x4230, 0x4231, 0x4232, 0x4233, 0x4234, 0x4235, 0x4236, 0x4237, 0x4238,
+ 0x4239, 0x423A, 0x423B, 0x423C, 0x423D, 0x423E, 0x423F, 0x4240, 0x4241,
+ 0x4242, 0x4243, 0x4244, 0x4245, 0x4246, 0x4247, 0x4248, 0x4249, 0x424A,
+ 0x424B, 0x424C, 0x424D, 0x424E, 0x424F, 0x4250, 0x4251, 0x4252, 0x4253,
+ 0x4254, 0x4255, 0x4256, 0x4257, 0x4258, 0x4259, 0x425A, 0x425B, 0x425C,
+ 0x425D, 0x425E, 0x425F, 0x4260, 0x4261, 0x4262, 0x4263, 0x4264, 0x4265,
+ 0x4266, 0x4267, 0x4268, 0x4269, 0x426A, 0x426B, 0x426C, 0x426D, 0x426E,
+ 0x426F, 0x4270, 0x4271, 0x4272, 0x4273, 0x4274, 0x4275, 0x4276, 0x4277,
+ 0x4278, 0x4279, 0x427A, 0x427B, 0x427C, 0x427D, 0x427E, 0x427F, 0x4280,
+ 0x4281, 0x4282, 0x4283, 0x4284, 0x4285, 0x4286, 0x4287, 0x4288, 0x4289,
+ 0x428A, 0x428B, 0x428C, 0x428D, 0x428E, 0x428F, 0x4290, 0x4291, 0x4292,
+ 0x4293, 0x4294, 0x4295, 0x4296, 0x4297, 0x4298, 0x4299, 0x429A, 0x429B,
+ 0x429C, 0x429D, 0x429E, 0x429F, 0x42A0, 0x42A1, 0x42A2, 0x42A3, 0x42A4,
+ 0x42A5, 0x42A6, 0x42A7, 0x42A8, 0x42A9, 0x42AA, 0x42AB, 0x42AC, 0x42AD,
+ 0x42AE, 0x42AF, 0x42B0, 0x42B1, 0x42B2, 0x42B3, 0x42B4, 0x42B5, 0x42B6,
+ 0x42B7, 0x42B8, 0x42B9, 0x42BA, 0x42BB, 0x42BC, 0x42BD, 0x42BE, 0x42BF,
+ 0x42C0, 0x42C1, 0x42C2, 0x42C3, 0x42C4, 0x42C5, 0x42C6, 0x42C7, 0x42C8,
+ 0x42C9, 0x42CA, 0x42CB, 0x42CC, 0x42CD, 0x42CE, 0x42CF, 0x42D0, 0x42D1,
+ 0x42D2, 0x42D3, 0x42D4, 0x42D5, 0x42D6, 0x42D7, 0x42D8, 0x42D9, 0x42DA,
+ 0x42DB, 0x42DC, 0x42DD, 0x42DE, 0x42DF, 0x42E0, 0x42E1, 0x42E2, 0x42E3,
+ 0x42E4, 0x42E5, 0x42E6, 0x42E7, 0x42E8, 0x42E9, 0x42EA, 0x42EB, 0x42EC,
+ 0x42ED, 0x42EE, 0x42EF, 0x42F0, 0x42F1, 0x42F2, 0x42F3, 0x42F4, 0x42F5,
+ 0x42F6, 0x42F7, 0x42F8, 0x42F9, 0x42FA, 0x42FB, 0x42FC, 0x42FD, 0x42FE,
+ 0x42FF, 0x4300, 0x4301, 0x4302, 0x4303, 0x4304, 0x4305, 0x4306, 0x4307,
+ 0x4308, 0x4309, 0x430A, 0x430B, 0x430C, 0x430D, 0x430E, 0x430F, 0x4310,
+ 0x4311, 0x4312, 0x4313, 0x4314, 0x4315, 0x4316, 0x4317, 0x4318, 0x4319,
+ 0x431A, 0x431B, 0x431C, 0x431D, 0x431E, 0x431F, 0x4320, 0x4321, 0x4322,
+ 0x4323, 0x4324, 0x4325, 0x4326, 0x4327, 0x4328, 0x4329, 0x432A, 0x432B,
+ 0x432C, 0x432D, 0x432E, 0x432F, 0x4330, 0x4331, 0x4332, 0x4333, 0x4334,
+ 0x4335, 0x4336, 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, 0x44D7,
+ 0x44D8, 0x44D9, 0x44DA, 0x44DB, 0x44DC, 0x44DD, 0x44DE, 0x44DF, 0x44E0,
+ 0x44E1, 0x44E2, 0x44E3, 0x44E4, 0x44E5, 0x44E6, 0x44E7, 0x44E8, 0x44E9,
+ 0x44EA, 0x44EB, 0x44EC, 0x44ED, 0x44EE, 0x44EF, 0x44F0, 0x44F1, 0x44F2,
+ 0x44F3, 0x44F4, 0x44F5, 0x44F6, 0x44F7, 0x44F8, 0x44F9, 0x44FA, 0x44FB,
+ 0x44FC, 0x44FD, 0x44FE, 0x44FF, 0x4500, 0x4501, 0x4502, 0x4503, 0x4504,
+ 0x4505, 0x4506, 0x4507, 0x4508, 0x4509, 0x450A, 0x450B, 0x450C, 0x450D,
+ 0x450E, 0x450F, 0x4510, 0x4511, 0x4512, 0x4513, 0x4514, 0x4515, 0x4516,
+ 0x4517, 0x4518, 0x4519, 0x451A, 0x451B, 0x451C, 0x451D, 0x451E, 0x451F,
+ 0x4520, 0x4521, 0x4522, 0x4523, 0x4524, 0x4525, 0x4526, 0x4527, 0x4528,
+ 0x4529, 0x452A, 0x452B, 0x452C, 0x452D, 0x452E, 0x452F, 0x4530, 0x4531,
+ 0x4532, 0x4533, 0x4534, 0x4535, 0x4536, 0x4537, 0x4538, 0x4539, 0x453A,
+ 0x453B, 0x453C, 0x453D, 0x453E, 0x453F, 0x4540, 0x4541, 0x4542, 0x4543,
+ 0x4544, 0x4545, 0x4546, 0x4547, 0x4548, 0x4549, 0x454A, 0x454B, 0x454C,
+ 0x454D, 0x454E, 0x454F, 0x4550, 0x4551, 0x4552, 0x4553, 0x4554, 0x4555,
+ 0x4556, 0x4557, 0x4558, 0x4559, 0x455A, 0x455B, 0x455C, 0x455D, 0x455E,
+ 0x455F, 0x4560, 0x4561, 0x4562, 0x4563, 0x4564, 0x4565, 0x4566, 0x4567,
+ 0x4568, 0x4569, 0x456A, 0x456B, 0x456C, 0x456D, 0x456E, 0x456F, 0x4570,
+ 0x4571, 0x4572, 0x4573, 0x4574, 0x4575, 0x4576, 0x4577, 0x4578, 0x4579,
+ 0x457A, 0x457B, 0x457C, 0x457D, 0x457E, 0x457F, 0x4580, 0x4581, 0x4582,
+ 0x4583, 0x4584, 0x4585, 0x4586, 0x4587, 0x4588, 0x4589, 0x458A, 0x458B,
+ 0x458C, 0x458D, 0x458E, 0x458F, 0x4590, 0x4591, 0x4592, 0x4593, 0x4594,
+ 0x4595, 0x4596, 0x4597, 0x4598, 0x4599, 0x459A, 0x459B, 0x459C, 0x459D,
+ 0x459E, 0x459F, 0x45A0, 0x45A1, 0x45A2, 0x45A3, 0x45A4, 0x45A5, 0x45A6,
+ 0x45A7, 0x45A8, 0x45A9, 0x45AA, 0x45AB, 0x45AC, 0x45AD, 0x45AE, 0x45AF,
+ 0x45B0, 0x45B1, 0x45B2, 0x45B3, 0x45B4, 0x45B5, 0x45B6, 0x45B7, 0x45B8,
+ 0x45B9, 0x45BA, 0x45BB, 0x45BC, 0x45BD, 0x45BE, 0x45BF, 0x45C0, 0x45C1,
+ 0x45C2, 0x45C3, 0x45C4, 0x45C5, 0x45C6, 0x45C7, 0x45C8, 0x45C9, 0x45CA,
+ 0x45CB, 0x45CC, 0x45CD, 0x45CE, 0x45CF, 0x45D0, 0x45D1, 0x45D2, 0x45D3,
+ 0x45D4, 0x45D5, 0x45D6, 0x45D7, 0x45D8, 0x45D9, 0x45DA, 0x45DB, 0x45DC,
+ 0x45DD, 0x45DE, 0x45DF, 0x45E0, 0x45E1, 0x45E2, 0x45E3, 0x45E4, 0x45E5,
+ 0x45E6, 0x45E7, 0x45E8, 0x45E9, 0x45EA, 0x45EB, 0x45EC, 0x45ED, 0x45EE,
+ 0x45EF, 0x45F0, 0x45F1, 0x45F2, 0x45F3, 0x45F4, 0x45F5, 0x45F6, 0x45F7,
+ 0x45F8, 0x45F9, 0x45FA, 0x45FB, 0x45FC, 0x45FD, 0x45FE, 0x45FF, 0x4600,
+ 0x4601, 0x4602, 0x4603, 0x4604, 0x4605, 0x4606, 0x4607, 0x4608, 0x4609,
+ 0x460A, 0x460B, 0x460C, 0x460D, 0x460E, 0x460F, 0x4610, 0x4611, 0x4612,
+ 0x4613, 0x4614, 0x4615, 0x4616, 0x4617, 0x4618, 0x4619, 0x461A, 0x461B,
+ 0x461C, 0x461D, 0x461E, 0x461F, 0x4620, 0x4621, 0x4622, 0x4623, 0x4624,
+ 0x4625, 0x4626, 0x4627, 0x4628, 0x4629, 0x462A, 0x462B, 0x462C, 0x462D,
+ 0x462E, 0x462F, 0x4630, 0x4631, 0x4632, 0x4633, 0x4634, 0x4635, 0x4636,
+ 0x4637, 0x4638, 0x4639, 0x463A, 0x463B, 0x463C, 0x463D, 0x463E, 0x463F,
+ 0x4640, 0x4641, 0x4642, 0x4643, 0x4644, 0x4645, 0x4646, 0x4647, 0x4648,
+ 0x4649, 0x464A, 0x464B, 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, 0x478E, 0x478F, 0x4790, 0x4791, 0x4792,
+ 0x4793, 0x4794, 0x4795, 0x4796, 0x4797, 0x4798, 0x4799, 0x479A, 0x479B,
+ 0x479C, 0x479D, 0x479E, 0x479F, 0x47A0, 0x47A1, 0x47A2, 0x47A3, 0x47A4,
+ 0x47A5, 0x47A6, 0x47A7, 0x47A8, 0x47A9, 0x47AA, 0x47AB, 0x47AC, 0x47AD,
+ 0x47AE, 0x47AF, 0x47B0, 0x47B1, 0x47B2, 0x47B3, 0x47B4, 0x47B5, 0x47B6,
+ 0x47B7, 0x47B8, 0x47B9, 0x47BA, 0x47BB, 0x47BC, 0x47BD, 0x47BE, 0x47BF,
+ 0x47C0, 0x47C1, 0x47C2, 0x47C3, 0x47C4, 0x47C5, 0x47C6, 0x47C7, 0x47C8,
+ 0x47C9, 0x47CA, 0x47CB, 0x47CC, 0x47CD, 0x47CE, 0x47CF, 0x47D0, 0x47D1,
+ 0x47D2, 0x47D3, 0x47D4, 0x47D5, 0x47D6, 0x47D7, 0x47D8, 0x47D9, 0x47DA,
+ 0x47DB, 0x47DC, 0x47DD, 0x47DE, 0x47DF, 0x47E0, 0x47E1, 0x47E2, 0x47E3,
+ 0x47E4, 0x47E5, 0x47E6, 0x47E7, 0x47E8, 0x47E9, 0x47EA, 0x47EB, 0x47EC,
+ 0x47ED, 0x47EE, 0x47EF, 0x47F0, 0x47F1, 0x47F2, 0x47F3, 0x47F4, 0x47F5,
+ 0x47F6, 0x47F7, 0x47F8, 0x47F9, 0x47FA, 0x47FB, 0x47FC, 0x47FD, 0x47FE,
+ 0x47FF, 0x4800, 0x4801, 0x4802, 0x4803, 0x4804, 0x4805, 0x4806, 0x4807,
+ 0x4808, 0x4809, 0x480A, 0x480B, 0x480C, 0x480D, 0x480E, 0x480F, 0x4810,
+ 0x4811, 0x4812, 0x4813, 0x4814, 0x4815, 0x4816, 0x4817, 0x4818, 0x4819,
+ 0x481A, 0x481B, 0x481C, 0x481D, 0x481E, 0x481F, 0x4820, 0x4821, 0x4822,
+ 0x4823, 0x4824, 0x4825, 0x4826, 0x4827, 0x4828, 0x4829, 0x482A, 0x482B,
+ 0x482C, 0x482D, 0x482E, 0x482F, 0x4830, 0x4831, 0x4832, 0x4833, 0x4834,
+ 0x4835, 0x4836, 0x4837, 0x4838, 0x4839, 0x483A, 0x483B, 0x483C, 0x483D,
+ 0x483E, 0x483F, 0x4840, 0x4841, 0x4842, 0x4843, 0x4844, 0x4845, 0x4846,
+ 0x4847, 0x4848, 0x4849, 0x484A, 0x484B, 0x484C, 0x484D, 0x484E, 0x484F,
+ 0x4850, 0x4851, 0x4852, 0x4853, 0x4854, 0x4855, 0x4856, 0x4857, 0x4858,
+ 0x4859, 0x485A, 0x485B, 0x485C, 0x485D, 0x485E, 0x485F, 0x4860, 0x4861,
+ 0x4862, 0x4863, 0x4864, 0x4865, 0x4866, 0x4867, 0x4868, 0x4869, 0x486A,
+ 0x486B, 0x486C, 0x486D, 0x486E, 0x486F, 0x4870, 0x4871, 0x4872, 0x4873,
+ 0x4874, 0x4875, 0x4876, 0x4877, 0x4878, 0x4879, 0x487A, 0x487B, 0x487C,
+ 0x487D, 0x487E, 0x487F, 0x4880, 0x4881, 0x4882, 0x4883, 0x4884, 0x4885,
+ 0x4886, 0x4887, 0x4888, 0x4889, 0x488A, 0x488B, 0x488C, 0x488D, 0x488E,
+ 0x488F, 0x4890, 0x4891, 0x4892, 0x4893, 0x4894, 0x4895, 0x4896, 0x4897,
+ 0x4898, 0x4899, 0x489A, 0x489B, 0x489C, 0x489D, 0x489E, 0x489F, 0x48A0,
+ 0x48A1, 0x48A2, 0x48A3, 0x48A4, 0x48A5, 0x48A6, 0x48A7, 0x48A8, 0x48A9,
+ 0x48AA, 0x48AB, 0x48AC, 0x48AD, 0x48AE, 0x48AF, 0x48B0, 0x48B1, 0x48B2,
+ 0x48B3, 0x48B4, 0x48B5, 0x48B6, 0x48B7, 0x48B8, 0x48B9, 0x48BA, 0x48BB,
+ 0x48BC, 0x48BD, 0x48BE, 0x48BF, 0x48C0, 0x48C1, 0x48C2, 0x48C3, 0x48C4,
+ 0x48C5, 0x48C6, 0x48C7, 0x48C8, 0x48C9, 0x48CA, 0x48CB, 0x48CC, 0x48CD,
+ 0x48CE, 0x48CF, 0x48D0, 0x48D1, 0x48D2, 0x48D3, 0x48D4, 0x48D5, 0x48D6,
+ 0x48D7, 0x48D8, 0x48D9, 0x48DA, 0x48DB, 0x48DC, 0x48DD, 0x48DE, 0x48DF,
+ 0x48E0, 0x48E1, 0x48E2, 0x48E3, 0x48E4, 0x48E5, 0x48E6, 0x48E7, 0x48E8,
+ 0x48E9, 0x48EA, 0x48EB, 0x48EC, 0x48ED, 0x48EE, 0x48EF, 0x48F0, 0x48F1,
+ 0x48F2, 0x48F3, 0x48F4, 0x48F5, 0x48F6, 0x48F7, 0x48F8, 0x48F9, 0x48FA,
+ 0x48FB, 0x48FC, 0x48FD, 0x48FE, 0x48FF, 0x4900, 0x4901, 0x4902, 0x4903,
+ 0x4904, 0x4905, 0x4906, 0x4907, 0x4908, 0x4909, 0x490A, 0x490B, 0x490C,
+ 0x490D, 0x490E, 0x490F, 0x4910, 0x4911, 0x4912, 0x4913, 0x4914, 0x4915,
+ 0x4916, 0x4917, 0x4918, 0x4919, 0x491A, 0x491B, 0x491C, 0x491D, 0x491E,
+ 0x491F, 0x4920, 0x4921, 0x4922, 0x4923, 0x4924, 0x4925, 0x4926, 0x4927,
+ 0x4928, 0x4929, 0x492A, 0x492B, 0x492C, 0x492D, 0x492E, 0x492F, 0x4930,
+ 0x4931, 0x4932, 0x4933, 0x4934, 0x4935, 0x4936, 0x4937, 0x4938, 0x4939,
+ 0x493A, 0x493B, 0x493C, 0x493D, 0x493E, 0x493F, 0x4940, 0x4941, 0x4942,
+ 0x4943, 0x4944, 0x4945, 0x4946, 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, 0x49B8, 0x49B9,
+ 0x49BA, 0x49BB, 0x49BC, 0x49BD, 0x49BE, 0x49BF, 0x49C0, 0x49C1, 0x49C2,
+ 0x49C3, 0x49C4, 0x49C5, 0x49C6, 0x49C7, 0x49C8, 0x49C9, 0x49CA, 0x49CB,
+ 0x49CC, 0x49CD, 0x49CE, 0x49CF, 0x49D0, 0x49D1, 0x49D2, 0x49D3, 0x49D4,
+ 0x49D5, 0x49D6, 0x49D7, 0x49D8, 0x49D9, 0x49DA, 0x49DB, 0x49DC, 0x49DD,
+ 0x49DE, 0x49DF, 0x49E0, 0x49E1, 0x49E2, 0x49E3, 0x49E4, 0x49E5, 0x49E6,
+ 0x49E7, 0x49E8, 0x49E9, 0x49EA, 0x49EB, 0x49EC, 0x49ED, 0x49EE, 0x49EF,
+ 0x49F0, 0x49F1, 0x49F2, 0x49F3, 0x49F4, 0x49F5, 0x49F6, 0x49F7, 0x49F8,
+ 0x49F9, 0x49FA, 0x49FB, 0x49FC, 0x49FD, 0x49FE, 0x49FF, 0x4A00, 0x4A01,
+ 0x4A02, 0x4A03, 0x4A04, 0x4A05, 0x4A06, 0x4A07, 0x4A08, 0x4A09, 0x4A0A,
+ 0x4A0B, 0x4A0C, 0x4A0D, 0x4A0E, 0x4A0F, 0x4A10, 0x4A11, 0x4A12, 0x4A13,
+ 0x4A14, 0x4A15, 0x4A16, 0x4A17, 0x4A18, 0x4A19, 0x4A1A, 0x4A1B, 0x4A1C,
+ 0x4A1D, 0x4A1E, 0x4A1F, 0x4A20, 0x4A21, 0x4A22, 0x4A23, 0x4A24, 0x4A25,
+ 0x4A26, 0x4A27, 0x4A28, 0x4A29, 0x4A2A, 0x4A2B, 0x4A2C, 0x4A2D, 0x4A2E,
+ 0x4A2F, 0x4A30, 0x4A31, 0x4A32, 0x4A33, 0x4A34, 0x4A35, 0x4A36, 0x4A37,
+ 0x4A38, 0x4A39, 0x4A3A, 0x4A3B, 0x4A3C, 0x4A3D, 0x4A3E, 0x4A3F, 0x4A40,
+ 0x4A41, 0x4A42, 0x4A43, 0x4A44, 0x4A45, 0x4A46, 0x4A47, 0x4A48, 0x4A49,
+ 0x4A4A, 0x4A4B, 0x4A4C, 0x4A4D, 0x4A4E, 0x4A4F, 0x4A50, 0x4A51, 0x4A52,
+ 0x4A53, 0x4A54, 0x4A55, 0x4A56, 0x4A57, 0x4A58, 0x4A59, 0x4A5A, 0x4A5B,
+ 0x4A5C, 0x4A5D, 0x4A5E, 0x4A5F, 0x4A60, 0x4A61, 0x4A62, 0x4A63, 0x4A64,
+ 0x4A65, 0x4A66, 0x4A67, 0x4A68, 0x4A69, 0x4A6A, 0x4A6B, 0x4A6C, 0x4A6D,
+ 0x4A6E, 0x4A6F, 0x4A70, 0x4A71, 0x4A72, 0x4A73, 0x4A74, 0x4A75, 0x4A76,
+ 0x4A77, 0x4A78, 0x4A79, 0x4A7A, 0x4A7B, 0x4A7C, 0x4A7D, 0x4A7E, 0x4A7F,
+ 0x4A80, 0x4A81, 0x4A82, 0x4A83, 0x4A84, 0x4A85, 0x4A86, 0x4A87, 0x4A88,
+ 0x4A89, 0x4A8A, 0x4A8B, 0x4A8C, 0x4A8D, 0x4A8E, 0x4A8F, 0x4A90, 0x4A91,
+ 0x4A92, 0x4A93, 0x4A94, 0x4A95, 0x4A96, 0x4A97, 0x4A98, 0x4A99, 0x4A9A,
+ 0x4A9B, 0x4A9C, 0x4A9D, 0x4A9E, 0x4A9F, 0x4AA0, 0x4AA1, 0x4AA2, 0x4AA3,
+ 0x4AA4, 0x4AA5, 0x4AA6, 0x4AA7, 0x4AA8, 0x4AA9, 0x4AAA, 0x4AAB, 0x4AAC,
+ 0x4AAD, 0x4AAE, 0x4AAF, 0x4AB0, 0x4AB1, 0x4AB2, 0x4AB3, 0x4AB4, 0x4AB5,
+ 0x4AB6, 0x4AB7, 0x4AB8, 0x4AB9, 0x4ABA, 0x4ABB, 0x4ABC, 0x4ABD, 0x4ABE,
+ 0x4ABF, 0x4AC0, 0x4AC1, 0x4AC2, 0x4AC3, 0x4AC4, 0x4AC5, 0x4AC6, 0x4AC7,
+ 0x4AC8, 0x4AC9, 0x4ACA, 0x4ACB, 0x4ACC, 0x4ACD, 0x4ACE, 0x4ACF, 0x4AD0,
+ 0x4AD1, 0x4AD2, 0x4AD3, 0x4AD4, 0x4AD5, 0x4AD6, 0x4AD7, 0x4AD8, 0x4AD9,
+ 0x4ADA, 0x4ADB, 0x4ADC, 0x4ADD, 0x4ADE, 0x4ADF, 0x4AE0, 0x4AE1, 0x4AE2,
+ 0x4AE3, 0x4AE4, 0x4AE5, 0x4AE6, 0x4AE7, 0x4AE8, 0x4AE9, 0x4AEA, 0x4AEB,
+ 0x4AEC, 0x4AED, 0x4AEE, 0x4AEF, 0x4AF0, 0x4AF1, 0x4AF2, 0x4AF3, 0x4AF4,
+ 0x4AF5, 0x4AF6, 0x4AF7, 0x4AF8, 0x4AF9, 0x4AFA, 0x4AFB, 0x4AFC, 0x4AFD,
+ 0x4AFE, 0x4AFF, 0x4B00, 0x4B01, 0x4B02, 0x4B03, 0x4B04, 0x4B05, 0x4B06,
+ 0x4B07, 0x4B08, 0x4B09, 0x4B0A, 0x4B0B, 0x4B0C, 0x4B0D, 0x4B0E, 0x4B0F,
+ 0x4B10, 0x4B11, 0x4B12, 0x4B13, 0x4B14, 0x4B15, 0x4B16, 0x4B17, 0x4B18,
+ 0x4B19, 0x4B1A, 0x4B1B, 0x4B1C, 0x4B1D, 0x4B1E, 0x4B1F, 0x4B20, 0x4B21,
+ 0x4B22, 0x4B23, 0x4B24, 0x4B25, 0x4B26, 0x4B27, 0x4B28, 0x4B29, 0x4B2A,
+ 0x4B2B, 0x4B2C, 0x4B2D, 0x4B2E, 0x4B2F, 0x4B30, 0x4B31, 0x4B32, 0x4B33,
+ 0x4B34, 0x4B35, 0x4B36, 0x4B37, 0x4B38, 0x4B39, 0x4B3A, 0x4B3B, 0x4B3C,
+ 0x4B3D, 0x4B3E, 0x4B3F, 0x4B40, 0x4B41, 0x4B42, 0x4B43, 0x4B44, 0x4B45,
+ 0x4B46, 0x4B47, 0x4B48, 0x4B49, 0x4B4A, 0x4B4B, 0x4B4C, 0x4B4D, 0x4B4E,
+ 0x4B4F, 0x4B50, 0x4B51, 0x4B52, 0x4B53, 0x4B54, 0x4B55, 0x4B56, 0x4B57,
+ 0x4B58, 0x4B59, 0x4B5A, 0x4B5B, 0x4B5C, 0x4B5D, 0x4B5E, 0x4B5F, 0x4B60,
+ 0x4B61, 0x4B62, 0x4B63, 0x4B64, 0x4B65, 0x4B66, 0x4B67, 0x4B68, 0x4B69,
+ 0x4B6A, 0x4B6B, 0x4B6C, 0x4B6D, 0x4B6E, 0x4B6F, 0x4B70, 0x4B71, 0x4B72,
+ 0x4B73, 0x4B74, 0x4B75, 0x4B76, 0x4B77, 0x4B78, 0x4B79, 0x4B7A, 0x4B7B,
+ 0x4B7C, 0x4B7D, 0x4B7E, 0x4B7F, 0x4B80, 0x4B81, 0x4B82, 0x4B83, 0x4B84,
+ 0x4B85, 0x4B86, 0x4B87, 0x4B88, 0x4B89, 0x4B8A, 0x4B8B, 0x4B8C, 0x4B8D,
+ 0x4B8E, 0x4B8F, 0x4B90, 0x4B91, 0x4B92, 0x4B93, 0x4B94, 0x4B95, 0x4B96,
+ 0x4B97, 0x4B98, 0x4B99, 0x4B9A, 0x4B9B, 0x4B9C, 0x4B9D, 0x4B9E, 0x4B9F,
+ 0x4BA0, 0x4BA1, 0x4BA2, 0x4BA3, 0x4BA4, 0x4BA5, 0x4BA6, 0x4BA7, 0x4BA8,
+ 0x4BA9, 0x4BAA, 0x4BAB, 0x4BAC, 0x4BAD, 0x4BAE, 0x4BAF, 0x4BB0, 0x4BB1,
+ 0x4BB2, 0x4BB3, 0x4BB4, 0x4BB5, 0x4BB6, 0x4BB7, 0x4BB8, 0x4BB9, 0x4BBA,
+ 0x4BBB, 0x4BBC, 0x4BBD, 0x4BBE, 0x4BBF, 0x4BC0, 0x4BC1, 0x4BC2, 0x4BC3,
+ 0x4BC4, 0x4BC5, 0x4BC6, 0x4BC7, 0x4BC8, 0x4BC9, 0x4BCA, 0x4BCB, 0x4BCC,
+ 0x4BCD, 0x4BCE, 0x4BCF, 0x4BD0, 0x4BD1, 0x4BD2, 0x4BD3, 0x4BD4, 0x4BD5,
+ 0x4BD6, 0x4BD7, 0x4BD8, 0x4BD9, 0x4BDA, 0x4BDB, 0x4BDC, 0x4BDD, 0x4BDE,
+ 0x4BDF, 0x4BE0, 0x4BE1, 0x4BE2, 0x4BE3, 0x4BE4, 0x4BE5, 0x4BE6, 0x4BE7,
+ 0x4BE8, 0x4BE9, 0x4BEA, 0x4BEB, 0x4BEC, 0x4BED, 0x4BEE, 0x4BEF, 0x4BF0,
+ 0x4BF1, 0x4BF2, 0x4BF3, 0x4BF4, 0x4BF5, 0x4BF6, 0x4BF7, 0x4BF8, 0x4BF9,
+ 0x4BFA, 0x4BFB, 0x4BFC, 0x4BFD, 0x4BFE, 0x4BFF, 0x4C00, 0x4C01, 0x4C02,
+ 0x4C03, 0x4C04, 0x4C05, 0x4C06, 0x4C07, 0x4C08, 0x4C09, 0x4C0A, 0x4C0B,
+ 0x4C0C, 0x4C0D, 0x4C0E, 0x4C0F, 0x4C10, 0x4C11, 0x4C12, 0x4C13, 0x4C14,
+ 0x4C15, 0x4C16, 0x4C17, 0x4C18, 0x4C19, 0x4C1A, 0x4C1B, 0x4C1C, 0x4C1D,
+ 0x4C1E, 0x4C1F, 0x4C20, 0x4C21, 0x4C22, 0x4C23, 0x4C24, 0x4C25, 0x4C26,
+ 0x4C27, 0x4C28, 0x4C29, 0x4C2A, 0x4C2B, 0x4C2C, 0x4C2D, 0x4C2E, 0x4C2F,
+ 0x4C30, 0x4C31, 0x4C32, 0x4C33, 0x4C34, 0x4C35, 0x4C36, 0x4C37, 0x4C38,
+ 0x4C39, 0x4C3A, 0x4C3B, 0x4C3C, 0x4C3D, 0x4C3E, 0x4C3F, 0x4C40, 0x4C41,
+ 0x4C42, 0x4C43, 0x4C44, 0x4C45, 0x4C46, 0x4C47, 0x4C48, 0x4C49, 0x4C4A,
+ 0x4C4B, 0x4C4C, 0x4C4D, 0x4C4E, 0x4C4F, 0x4C50, 0x4C51, 0x4C52, 0x4C53,
+ 0x4C54, 0x4C55, 0x4C56, 0x4C57, 0x4C58, 0x4C59, 0x4C5A, 0x4C5B, 0x4C5C,
+ 0x4C5D, 0x4C5E, 0x4C5F, 0x4C60, 0x4C61, 0x4C62, 0x4C63, 0x4C64, 0x4C65,
+ 0x4C66, 0x4C67, 0x4C68, 0x4C69, 0x4C6A, 0x4C6B, 0x4C6C, 0x4C6D, 0x4C6E,
+ 0x4C6F, 0x4C70, 0x4C71, 0x4C72, 0x4C73, 0x4C74, 0x4C75, 0x4C76, 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, 0x20AC, 0x00A5,
+ 0x20AC, 0x0024, 0x303F, 0xA000, 0xA001, 0xA002, 0xA003, 0xA004, 0xA005,
+ 0xA006, 0xA007, 0xA008, 0xA009, 0xA00A, 0xA00B, 0xA00C, 0xA00D, 0xA00E,
+ 0xA00F, 0xA010, 0xA011, 0xA012, 0xA013, 0xA014, 0xA015, 0xA016, 0xA017,
+ 0xA018, 0xA019, 0xA01A, 0xA01B, 0xA01C, 0xA01D, 0xA01E, 0xA01F, 0xA020,
+ 0xA021, 0xA022, 0xA023, 0xA024, 0xA025, 0xA026, 0xA027, 0xA028, 0xA029,
+ 0xA02A, 0xA02B, 0xA02C, 0xA02D, 0xA02E, 0xA02F, 0xA030, 0xA031, 0xA032,
+ 0xA033, 0xA034, 0xA035, 0xA036, 0xA037, 0xA038, 0xA039, 0xA03A, 0xA03B,
+ 0xA03C, 0xA03D, 0xA03E, 0xA03F, 0xA040, 0xA041, 0xA042, 0xA043, 0xA044,
+ 0xA045, 0xA046, 0xA047, 0xA048, 0xA049, 0xA04A, 0xA04B, 0xA04C, 0xA04D,
+ 0xA04E, 0xA04F, 0xA050, 0xA051, 0xA052, 0xA053, 0xA054, 0xA055, 0xA056,
+ 0xA057, 0xA058, 0xA059, 0xA05A, 0xA05B, 0xA05C, 0xA05D, 0xA05E, 0xA05F,
+ 0xA060, 0xA061, 0xA062, 0xA063, 0xA064, 0xA065, 0xA066, 0xA067, 0xA068,
+ 0xA069, 0xA06A, 0xA06B, 0xA06C, 0xA06D, 0xA06E, 0xA06F, 0xA070, 0xA071,
+ 0xA072, 0xA073, 0xA074, 0xA075, 0xA076, 0xA077, 0xA078, 0xA079, 0xA07A,
+ 0xA07B, 0xA07C, 0xA07D, 0xA07E, 0xA07F, 0xA080, 0xA081, 0xA082, 0xA083,
+ 0xA084, 0xA085, 0xA086, 0xA087, 0xA088, 0xA089, 0xA08A, 0xA08B, 0xA08C,
+ 0xA08D, 0xA08E, 0xA08F, 0xA090, 0xA091, 0xA092, 0xA093, 0xA094, 0xA095,
+ 0xA096, 0xA097, 0xA098, 0xA099, 0xA09A, 0xA09B, 0xA09C, 0xA09D, 0xA09E,
+ 0xA09F, 0xA0A0, 0xA0A1, 0xA0A2, 0xA0A3, 0xA0A4, 0xA0A5, 0xA0A6, 0xA0A7,
+ 0xA0A8, 0xA0A9, 0xA0AA, 0xA0AB, 0xA0AC, 0xA0AD, 0xA0AE, 0xA0AF, 0xA0B0,
+ 0xA0B1, 0xA0B2, 0xA0B3, 0xA0B4, 0xA0B5, 0xA0B6, 0xA0B7, 0xA0B8, 0xA0B9,
+ 0xA0BA, 0xA0BB, 0xA0BC, 0xA0BD, 0xA0BE, 0xA0BF, 0xA0C0, 0xA0C1, 0xA0C2,
+ 0xA0C3, 0xA0C4, 0xA0C5, 0xA0C6, 0xA0C7, 0xA0C8, 0xA0C9, 0xA0CA, 0xA0CB,
+ 0xA0CC, 0xA0CD, 0xA0CE, 0xA0CF, 0xA0D0, 0xA0D1, 0xA0D2, 0xA0D3, 0xA0D4,
+ 0xA0D5, 0xA0D6, 0xA0D7, 0xA0D8, 0xA0D9, 0xA0DA, 0xA0DB, 0xA0DC, 0xA0DD,
+ 0xA0DE, 0xA0DF, 0xA0E0, 0xA0E1, 0xA0E2, 0xA0E3, 0xA0E4, 0xA0E5, 0xA0E6,
+ 0xA0E7, 0xA0E8, 0xA0E9, 0xA0EA, 0xA0EB, 0xA0EC, 0xA0ED, 0xA0EE, 0xA0EF,
+ 0xA0F0, 0xA0F1, 0xA0F2, 0xA0F3, 0xA0F4, 0xA0F5, 0xA0F6, 0xA0F7, 0xA0F8,
+ 0xA0F9, 0xA0FA, 0xA0FB, 0xA0FC, 0xA0FD, 0xA0FE, 0xA0FF, 0xA100, 0xA101,
+ 0xA102, 0xA103, 0xA104, 0xA105, 0xA106, 0xA107, 0xA108, 0xA109, 0xA10A,
+ 0xA10B, 0xA10C, 0xA10D, 0xA10E, 0xA10F, 0xA110, 0xA111, 0xA112, 0xA113,
+ 0xA114, 0xA115, 0xA116, 0xA117, 0xA118, 0xA119, 0xA11A, 0xA11B, 0xA11C,
+ 0xA11D, 0xA11E, 0xA11F, 0xA120, 0xA121, 0xA122, 0xA123, 0xA124, 0xA125,
+ 0xA126, 0xA127, 0xA128, 0xA129, 0xA12A, 0xA12B, 0xA12C, 0xA12D, 0xA12E,
+ 0xA12F, 0xA130, 0xA131, 0xA132, 0xA133, 0xA134, 0xA135, 0xA136, 0xA137,
+ 0xA138, 0xA139, 0xA13A, 0xA13B, 0xA13C, 0xA13D, 0xA13E, 0xA13F, 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, 0xA17F,
+ 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, 0xA1A1, 0xA1A2, 0xA1A3,
+ 0xA1A4, 0xA1A5, 0xA1A6, 0xA1A7, 0xA1A8, 0xA1A9, 0xA1AA, 0xA1AB, 0xA1AC,
+ 0xA1AD, 0xA1AE, 0xA1AF, 0xA1B0, 0xA1B1, 0xA1B2, 0xA1B3, 0xA1B4, 0xA1B5,
+ 0xA1B6, 0xA1B7, 0xA1B8, 0xA1B9, 0xA1BA, 0xA1BB, 0xA1BC, 0xA1BD, 0xA1BE,
+ 0xA1BF, 0xA1C0, 0xA1C1, 0xA1C2, 0xA1C3, 0xA1C4, 0xA1C5, 0xA1C6, 0xA1C7,
+ 0xA1C8, 0xA1C9, 0xA1CA, 0xA1CB, 0xA1CC, 0xA1CD, 0xA1CE, 0xA1CF, 0xA1D0,
+ 0xA1D1, 0xA1D2, 0xA1D3, 0xA1D4, 0xA1D5, 0xA1D6, 0xA1D7, 0xA1D8, 0xA1D9,
+ 0xA1DA, 0xA1DB, 0xA1DC, 0xA1DD, 0xA1DE, 0xA1DF, 0xA1E0, 0xA1E1, 0xA1E2,
+ 0xA1E3, 0xA1E4, 0xA1E5, 0xA1E6, 0xA1E7, 0xA1E8, 0xA1E9, 0xA1EA, 0xA1EB,
+ 0xA1EC, 0xA1ED, 0xA1EE, 0xA1EF, 0xA1F0, 0xA1F1, 0xA1F2, 0xA1F3, 0xA1F4,
+ 0xA1F5, 0xA1F6, 0xA1F7, 0xA1F8, 0xA1F9, 0xA1FA, 0xA1FB, 0xA1FC, 0xA1FD,
+ 0xA1FE, 0xA1FF, 0xA200, 0xA201, 0xA202, 0xA203, 0xA204, 0xA205, 0xA206,
+ 0xA207, 0xA208, 0xA209, 0xA20A, 0xA20B, 0xA20C, 0xA20D, 0xA20E, 0xA20F,
+ 0xA210, 0xA211, 0xA212, 0xA213, 0xA214, 0xA215, 0xA216, 0xA217, 0xA218,
+ 0xA219, 0xA21A, 0xA21B, 0xA21C, 0xA21D, 0xA21E, 0xA21F, 0xA220, 0xA221,
+ 0xA222, 0xA223, 0xA224, 0xA225, 0xA226, 0xA227, 0xA228, 0xA229, 0xA22A,
+ 0xA22B, 0xA22C, 0xA22D, 0xA22E, 0xA22F, 0xA230, 0xA231, 0xA232, 0xA233,
+ 0xA234, 0xA235, 0xA236, 0xA237, 0xA238, 0xA239, 0xA23A, 0xA23B, 0xA23C,
+ 0xA23D, 0xA23E, 0xA23F, 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, 0xA27F, 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, 0xA2A1, 0xA2A2, 0xA2A3, 0xA2A4, 0xA2A5, 0xA2A6, 0xA2A7, 0xA2A8,
+ 0xA2A9, 0xA2AA, 0xA2AB, 0xA2AC, 0xA2AD, 0xA2AE, 0xA2AF, 0xA2B0, 0xA2B1,
+ 0xA2B2, 0xA2B3, 0xA2B4, 0xA2B5, 0xA2B6, 0xA2B7, 0xA2B8, 0xA2B9, 0xA2BA,
+ 0xA2BB, 0xA2BC, 0xA2BD, 0xA2BE, 0xA2BF, 0xA2C0, 0xA2C1, 0xA2C2, 0xA2C3,
+ 0xA2C4, 0xA2C5, 0xA2C6, 0xA2C7, 0xA2C8, 0xA2C9, 0xA2CA, 0xA2CB, 0xA2CC,
+ 0xA2CD, 0xA2CE, 0xA2CF, 0xA2D0, 0xA2D1, 0xA2D2, 0xA2D3, 0xA2D4, 0xA2D5,
+ 0xA2D6, 0xA2D7, 0xA2D8, 0xA2D9, 0xA2DA, 0xA2DB, 0xA2DC, 0xA2DD, 0xA2DE,
+ 0xA2DF, 0xA2E0, 0xA2E1, 0xA2E2, 0xA2E3, 0xA2E4, 0xA2E5, 0xA2E6, 0xA2E7,
+ 0xA2E8, 0xA2E9, 0xA2EA, 0xA2EB, 0xA2EC, 0xA2ED, 0xA2EE, 0xA2EF, 0xA2F0,
+ 0xA2F1, 0xA2F2, 0xA2F3, 0xA2F4, 0xA2F5, 0xA2F6, 0xA2F7, 0xA2F8, 0xA2F9,
+ 0xA2FA, 0xA2FB, 0xA2FC, 0xA2FD, 0xA2FE, 0xA2FF, 0xA300, 0xA301, 0xA302,
+ 0xA303, 0xA304, 0xA305, 0xA306, 0xA307, 0xA308, 0xA309, 0xA30A, 0xA30B,
+ 0xA30C, 0xA30D, 0xA30E, 0xA30F, 0xA310, 0xA311, 0xA312, 0xA313, 0xA314,
+ 0xA315, 0xA316, 0xA317, 0xA318, 0xA319, 0xA31A, 0xA31B, 0xA31C, 0xA31D,
+ 0xA31E, 0xA31F, 0xA320, 0xA321, 0xA322, 0xA323, 0xA324, 0xA325, 0xA326,
+ 0xA327, 0xA328, 0xA329, 0xA32A, 0xA32B, 0xA32C, 0xA32D, 0xA32E, 0xA32F,
+ 0xA330, 0xA331, 0xA332, 0xA333, 0xA334, 0xA335, 0xA336, 0xA337, 0xA338,
+ 0xA339, 0xA33A, 0xA33B, 0xA33C, 0xA33D, 0xA33E, 0xA33F, 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, 0xA37F, 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, 0xA3A1, 0xA3A2, 0xA3A3, 0xA3A4,
+ 0xA3A5, 0xA3A6, 0xA3A7, 0xA3A8, 0xA3A9, 0xA3AA, 0xA3AB, 0xA3AC, 0xA3AD,
+ 0xA3AE, 0xA3AF, 0xA3B0, 0xA3B1, 0xA3B2, 0xA3B3, 0xA3B4, 0xA3B5, 0xA3B6,
+ 0xA3B7, 0xA3B8, 0xA3B9, 0xA3BA, 0xA3BB, 0xA3BC, 0xA3BD, 0xA3BE, 0xA3BF,
+ 0xA3C0, 0xA3C1, 0xA3C2, 0xA3C3, 0xA3C4, 0xA3C5, 0xA3C6, 0xA3C7, 0xA3C8,
+ 0xA3C9, 0xA3CA, 0xA3CB, 0xA3CC, 0xA3CD, 0xA3CE, 0xA3CF, 0xA3D0, 0xA3D1,
+ 0xA3D2, 0xA3D3, 0xA3D4, 0xA3D5, 0xA3D6, 0xA3D7, 0xA3D8, 0xA3D9, 0xA3DA,
+ 0xA3DB, 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, 0xA3FE,
+ 0xA3FF, 0xA400, 0xA401, 0xA402, 0xA403, 0xA404, 0xA405, 0xA406, 0xA407,
+ 0xA408, 0xA409, 0xA40A, 0xA40B, 0xA40C, 0xA40D, 0xA40E, 0xA40F, 0xA410,
+ 0xA411, 0xA412, 0xA413, 0xA414, 0xA415, 0xA416, 0xA417, 0xA418, 0xA419,
+ 0xA41A, 0xA41B, 0xA41C, 0xA41D, 0xA41E, 0xA41F, 0xA420, 0xA421, 0xA422,
+ 0xA423, 0xA424, 0xA425, 0xA426, 0xA427, 0xA428, 0xA429, 0xA42A, 0xA42B,
+ 0xA42C, 0xA42D, 0xA42E, 0xA42F, 0xA430, 0xA431, 0xA432, 0xA433, 0xA434,
+ 0xA435, 0xA436, 0xA437, 0xA438, 0xA439, 0xA43A, 0xA43B, 0xA43C, 0xA43D,
+ 0xA43E, 0xA43F, 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, 0xA47F, 0xA480, 0xA481, 0xA482, 0xA483, 0xA484, 0xA485,
+ 0xA486, 0xA487, 0xA488, 0xA489, 0xA48A, 0xA48B, 0xA48C, 0xA490, 0xA491,
+ 0xA492, 0xA493, 0xA494, 0xA495, 0xA496, 0xA497, 0xA498, 0xA499, 0xA49A,
+ 0xA49B, 0xA49C, 0xA49D, 0xA49E, 0xA49F, 0xA4A0, 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,
};
diff --git a/core/src/fpdfapi/fpdf_cmaps/GB1/GBK2K-H_5.cpp b/core/src/fpdfapi/fpdf_cmaps/GB1/GBK2K-H_5.cpp
index 01555a64da..47514d3c8e 100644
--- a/core/src/fpdfapi/fpdf_cmaps/GB1/GBK2K-H_5.cpp
+++ b/core/src/fpdfapi/fpdf_cmaps/GB1/GBK2K-H_5.cpp
@@ -1367,343 +1367,456 @@ const FX_WORD g_FXCMAP_GBK2K_H_5[4071 * 3] = {
};
const FX_WORD g_FXCMAP_GBK2K_H_5_DWord[1017 * 4] = {
- 0x8130, 0x8436, 0x8436, 0x5752, 0x8138, 0xFD38, 0xFD39, 0x579C, 0x8138, 0xFE30, 0xFE39, 0x579E,
- 0x8139, 0x8130, 0x8137, 0x57A8, 0x8139, 0x8139, 0x8139, 0x57B0, 0x8139, 0x8230, 0x8239, 0x57B1,
- 0x8139, 0x8330, 0x8339, 0x57BB, 0x8139, 0x8430, 0x8439, 0x57C5, 0x8139, 0x8530, 0x8539, 0x57CF,
- 0x8139, 0x8630, 0x8639, 0x57D9, 0x8139, 0x8730, 0x8739, 0x57E3, 0x8139, 0x8830, 0x8839, 0x57ED,
- 0x8139, 0x8930, 0x8939, 0x57F7, 0x8139, 0x8B32, 0x8B32, 0x1042, 0x8139, 0x8B33, 0x8B33, 0x1263,
- 0x8139, 0x8B34, 0x8B34, 0x1272, 0x8139, 0x8B35, 0x8B35, 0x1265, 0x8139, 0x8B36, 0x8B36, 0x1059,
- 0x8139, 0x8B37, 0x8B37, 0x2793, 0x8139, 0x8B38, 0x8B38, 0x063D, 0x8139, 0x8B39, 0x8B39, 0x1303,
- 0x8139, 0x8C30, 0x8C30, 0x0CA6, 0x8139, 0x8C31, 0x8C31, 0x0638, 0x8139, 0x8C32, 0x8C32, 0x0CC6,
- 0x8139, 0x8C33, 0x8C33, 0x03D6, 0x8139, 0x8C34, 0x8C34, 0x129D, 0x8139, 0x8C35, 0x8C35, 0x1314,
- 0x8139, 0x8C36, 0x8C36, 0x130F, 0x8139, 0x8C37, 0x8C37, 0x082B, 0x8139, 0x8C38, 0x8C38, 0x1399,
- 0x8139, 0x8C39, 0x8C39, 0x0597, 0x8139, 0x8D30, 0x8D30, 0x09EF, 0x8139, 0x8D31, 0x8D31, 0x12FC,
- 0x8139, 0x8D32, 0x8D32, 0x1266, 0x8139, 0x8D33, 0x8D33, 0x1284, 0x8139, 0x8D34, 0x8D34, 0x2A1A,
- 0x8139, 0x8D35, 0x8D35, 0x0D45, 0x8139, 0x8D36, 0x8D36, 0x047E, 0x8139, 0x8D37, 0x8D37, 0x1352,
- 0x8139, 0x8D38, 0x8D38, 0x04CC, 0x8139, 0x8D39, 0x8D39, 0x139C, 0x8139, 0x8E30, 0x8E30, 0x10BB,
- 0x8139, 0x8E31, 0x8E31, 0x0967, 0x8139, 0x8E32, 0x8E32, 0x1593, 0x8139, 0x8E33, 0x8E33, 0x0E72,
- 0x8139, 0x8E34, 0x8E34, 0x0D56, 0x8139, 0x8E35, 0x8E35, 0x161C, 0x8139, 0x8E36, 0x8E36, 0x2D2D,
- 0x8139, 0x8E37, 0x8E37, 0x0F13, 0x8139, 0x8E38, 0x8E38, 0x0576, 0x8139, 0x8E39, 0x8E39, 0x0B6F,
- 0x8139, 0x8F30, 0x8F30, 0x1230, 0x8139, 0x8F31, 0x8F31, 0x172E, 0x8139, 0x8F32, 0x8F32, 0x056A,
- 0x8139, 0x8F33, 0x8F33, 0x0F6C, 0x8139, 0x8F34, 0x8F34, 0x14B6, 0x8139, 0x8F35, 0x8F35, 0x0D43,
- 0x8139, 0x8F36, 0x8F36, 0x1774, 0x8139, 0x8F37, 0x8F37, 0x0CF6, 0x8139, 0x8F38, 0x8F38, 0x1815,
- 0x8139, 0x8F39, 0x8F39, 0x06FD, 0x8139, 0x9030, 0x9030, 0x082D, 0x8139, 0x9031, 0x9031, 0x08BE,
- 0x8139, 0x9032, 0x9032, 0x06C4, 0x8139, 0x9033, 0x9033, 0x1813, 0x8139, 0x9034, 0x9034, 0x073C,
- 0x8139, 0x9035, 0x9035, 0x1398, 0x8139, 0x9036, 0x9036, 0x14AD, 0x8139, 0x9037, 0x9037, 0x14F6,
- 0x8139, 0x9038, 0x9038, 0x0706, 0x8139, 0x9039, 0x9039, 0x1762, 0x8139, 0x9130, 0x9130, 0x15EE,
- 0x8139, 0x9131, 0x9131, 0x15E0, 0x8139, 0x9132, 0x9132, 0x0F8F, 0x8139, 0x9133, 0x9133, 0x06E5,
- 0x8139, 0x9134, 0x9134, 0x3292, 0x8139, 0x9135, 0x9135, 0x0D6D, 0x8139, 0x9136, 0x9136, 0x11A6,
- 0x8139, 0x9137, 0x9137, 0x1909, 0x8139, 0x9138, 0x9138, 0x0ED3, 0x8139, 0x9139, 0x9139, 0x05F6,
- 0x8139, 0x9230, 0x9230, 0x08C0, 0x8139, 0x9231, 0x9231, 0x065A, 0x8139, 0x9232, 0x9232, 0x0EED,
- 0x8139, 0x9233, 0x9233, 0x0CB0, 0x8139, 0x9234, 0x9234, 0x10FE, 0x8139, 0x9235, 0x9235, 0x1105,
- 0x8139, 0x9236, 0x9236, 0x0B21, 0x8139, 0x9237, 0x9237, 0x0C34, 0x8139, 0x9238, 0x9238, 0x11B8,
- 0x8139, 0x9239, 0x9239, 0x0578, 0x8139, 0x9330, 0x9330, 0x19BD, 0x8139, 0x9331, 0x9331, 0x0EF2,
- 0x8139, 0x9332, 0x9332, 0x0431, 0x8139, 0x9333, 0x9333, 0x0AB0, 0x8139, 0x9334, 0x9334, 0x0D66,
- 0x8139, 0x9335, 0x9335, 0x0C17, 0x8139, 0x9336, 0x9336, 0x0DA3, 0x8139, 0x9337, 0x9337, 0x0805,
- 0x8139, 0x9338, 0x9338, 0x1203, 0x8139, 0x9339, 0x9339, 0x06B3, 0x8139, 0x9430, 0x9430, 0x1269,
- 0x8139, 0x9431, 0x9431, 0x169D, 0x8139, 0x9432, 0x9432, 0x0BCB, 0x8139, 0x9433, 0x9433, 0x0FE9,
- 0x8139, 0x9434, 0x9434, 0x0B64, 0x8139, 0x9435, 0x9435, 0x0C89, 0x8139, 0x9436, 0x9436, 0x0FC9,
- 0x8139, 0x9437, 0x9437, 0x10D6, 0x8139, 0x9438, 0x9438, 0x0728, 0x8139, 0x9439, 0x9439, 0x0E90,
- 0x8139, 0x9530, 0x9530, 0x06C5, 0x8139, 0x9531, 0x9531, 0x0D33, 0x8139, 0x9532, 0x9532, 0x10A8,
- 0x8139, 0x9533, 0x9533, 0x0E42, 0x8139, 0x9534, 0x9534, 0x1BC6, 0x8139, 0x9535, 0x9535, 0x1B60,
- 0x8139, 0x9536, 0x9536, 0x3EBF, 0x8139, 0x9537, 0x9537, 0x03E2, 0x8139, 0x9538, 0x9538, 0x0BC3,
- 0x8139, 0x9539, 0x9539, 0x0AF8, 0x8139, 0x9630, 0x9630, 0x0B22, 0x8139, 0x9631, 0x9631, 0x0AB1,
- 0x8139, 0x9632, 0x9632, 0x0D4F, 0x8139, 0x9633, 0x9633, 0x0D46, 0x8139, 0x9634, 0x9634, 0x0D55,
- 0x8139, 0x9635, 0x9635, 0x40CB, 0x8139, 0x9636, 0x9636, 0x0783, 0x8139, 0x9637, 0x9637, 0x0FD1,
- 0x8139, 0x9638, 0x9638, 0x09EB, 0x8139, 0x9639, 0x9639, 0x11F0, 0x8139, 0x9730, 0x9730, 0x0ADC,
- 0x8139, 0x9731, 0x9731, 0x1CE7, 0x8139, 0x9732, 0x9732, 0x1C5E, 0x8139, 0x9733, 0x9733, 0x0EA9,
- 0x8139, 0x9734, 0x9734, 0x101B, 0x8139, 0x9735, 0x9735, 0x10D5, 0x8139, 0x9736, 0x9736, 0x09BA,
- 0x8139, 0x9737, 0x9737, 0x0637, 0x8139, 0x9738, 0x9738, 0x1BCB, 0x8139, 0x9739, 0x9739, 0x0639,
- 0x8139, 0x9830, 0x9830, 0x1A1E, 0x8139, 0x9831, 0x9831, 0x0CBD, 0x8139, 0x9832, 0x9832, 0x04E1,
- 0x8139, 0x9833, 0x9833, 0x1231, 0x8139, 0x9834, 0x9834, 0x11C0, 0x8139, 0x9835, 0x9835, 0x08F9,
- 0x8139, 0x9836, 0x9836, 0x0D19, 0x8139, 0x9837, 0x9837, 0x1618, 0x8139, 0x9838, 0x9838, 0x11DA,
- 0x8139, 0x9839, 0x9839, 0x1CDC, 0x8139, 0x9930, 0x9930, 0x0CE4, 0x8139, 0x9931, 0x9931, 0x45A2,
- 0x8139, 0x9932, 0x9932, 0x1BF0, 0x8139, 0x9933, 0x9933, 0x050B, 0x8139, 0x9934, 0x9934, 0x0FD3,
- 0x8139, 0x9935, 0x9935, 0x0F9B, 0x8139, 0x9936, 0x9936, 0x1049, 0x8139, 0x9937, 0x9937, 0x49DC,
- 0x8139, 0x9938, 0x9938, 0x1F96, 0x8139, 0x9939, 0x9939, 0x0898, 0x8139, 0x9A30, 0x9A30, 0x0FFD,
- 0x8139, 0x9A31, 0x9A31, 0x0721, 0x8139, 0x9A32, 0x9A32, 0x05F8, 0x8139, 0x9A33, 0x9A33, 0x1D15,
- 0x8139, 0x9A34, 0x9A34, 0x1D50, 0x8139, 0x9A35, 0x9A35, 0x1E3B, 0x8139, 0x9A36, 0x9A36, 0x0505,
- 0x8139, 0x9A37, 0x9A37, 0x123C, 0x8139, 0x9A38, 0x9A38, 0x1240, 0x8139, 0x9A39, 0x9A39, 0x0D26,
- 0x8139, 0x9B30, 0x9B30, 0x1E7B, 0x8139, 0x9B31, 0x9B31, 0x0F8C, 0x8139, 0x9B32, 0x9B32, 0x04E2,
- 0x8139, 0x9B33, 0x9B33, 0x4D13, 0x8139, 0x9B34, 0x9B34, 0x105F, 0x8139, 0x9B35, 0x9B35, 0x10B4,
- 0x8139, 0x9B36, 0x9B36, 0x4E18, 0x8139, 0x9B37, 0x9B37, 0x09DA, 0x8139, 0x9B38, 0x9B38, 0x08C1,
- 0x8139, 0x9B39, 0x9B39, 0x1E75, 0x8139, 0x9C30, 0x9C30, 0x207D, 0x8139, 0x9C31, 0x9C31, 0x06B2,
- 0x8139, 0x9C32, 0x9C32, 0x09EE, 0x8139, 0x9C33, 0x9C33, 0x1D79, 0x8139, 0x9C34, 0x9C34, 0x10CF,
- 0x8139, 0x9C35, 0x9C35, 0x50EA, 0x8139, 0x9C36, 0x9C36, 0x0664, 0x8139, 0x9C37, 0x9C37, 0x0AEB,
- 0x8139, 0x9C38, 0x9C38, 0x06EA, 0x8139, 0x9C39, 0x9C39, 0x218D, 0x8139, 0x9D30, 0x9D30, 0x08F1,
- 0x8139, 0x9D31, 0x9D31, 0x107B, 0x8139, 0x9D32, 0x9D32, 0x2209, 0x8139, 0x9D33, 0x9D33, 0x1F00,
- 0x8139, 0x9D34, 0x9D34, 0x1EF4, 0x8139, 0x9D35, 0x9D35, 0x0D4A, 0x8139, 0x9D36, 0x9D36, 0x0D6E,
- 0x8139, 0x9D37, 0x9D37, 0x0F50, 0x8139, 0x9D38, 0x9D38, 0x206D, 0x8139, 0x9D39, 0x9D39, 0x0720,
- 0x8139, 0x9E30, 0x9E30, 0x06DA, 0x8139, 0x9E31, 0x9E31, 0x1DEC, 0x8139, 0x9E32, 0x9E32, 0x1ED0,
- 0x8139, 0x9E33, 0x9E33, 0x139B, 0x8139, 0x9E34, 0x9E34, 0x1260, 0x8139, 0x9E35, 0x9E35, 0x0746,
- 0x8139, 0x9E36, 0x9E36, 0x2239, 0x8139, 0x9E37, 0x9E37, 0x209C, 0x8139, 0x9E38, 0x9E38, 0x2688,
- 0x8139, 0x9E39, 0x9E39, 0x0A60, 0x8139, 0x9F30, 0x9F30, 0x2071, 0x8139, 0x9F31, 0x9F31, 0x0A90,
- 0x8139, 0x9F32, 0x9F32, 0x5586, 0x8139, 0x9F33, 0x9F33, 0x0D89, 0x8139, 0x9F34, 0x9F34, 0x0791,
- 0x8139, 0x9F35, 0x9F35, 0x1A55, 0x8139, 0x9F36, 0x9F36, 0x2618, 0x8139, 0x9F37, 0x9F37, 0x05E5,
- 0x8139, 0x9F38, 0x9F38, 0x071D, 0x8139, 0x9F39, 0x9F39, 0x0D8A, 0x8139, 0xA030, 0xA030, 0x0430,
- 0x8139, 0xA031, 0xA031, 0x20C6, 0x8139, 0xA032, 0xA032, 0x1E86, 0x8139, 0xA033, 0xA033, 0x2037,
- 0x8139, 0xA034, 0xA034, 0x1F34, 0x8139, 0xA035, 0xA035, 0x12F3, 0x8139, 0xA533, 0xA535, 0x577B,
- 0x8139, 0xA538, 0xA539, 0x577E, 0x8139, 0xA630, 0xA630, 0x5780, 0x8139, 0xA634, 0xA634, 0x5755,
- 0x8139, 0xA636, 0xA636, 0x5767, 0x8139, 0xA735, 0xA735, 0x5776, 0x8139, 0xA736, 0xA736, 0x5778,
- 0x8139, 0xA737, 0xA737, 0x5777, 0x8139, 0xA738, 0xA738, 0x5779, 0x8139, 0xA836, 0xA838, 0x5781,
- 0x8139, 0xB434, 0xB439, 0x5784, 0x8139, 0xB530, 0xB539, 0x578A, 0x8139, 0xB630, 0xB637, 0x5794,
- 0x8139, 0xEE39, 0xEE39, 0x5801, 0x8139, 0xEF30, 0xEF39, 0x5802, 0x8139, 0xF030, 0xF039, 0x580C,
- 0x8139, 0xF130, 0xF139, 0x5816, 0x8139, 0xF230, 0xF239, 0x5820, 0x8139, 0xF330, 0xF339, 0x582A,
- 0x8139, 0xF430, 0xF439, 0x5834, 0x8139, 0xF530, 0xF539, 0x583E, 0x8139, 0xF630, 0xF639, 0x5848,
- 0x8139, 0xF730, 0xF739, 0x5852, 0x8139, 0xF830, 0xF839, 0x585C, 0x8139, 0xF930, 0xF939, 0x5866,
- 0x8139, 0xFA30, 0xFA39, 0x5870, 0x8139, 0xFB30, 0xFB39, 0x587A, 0x8139, 0xFC30, 0xFC39, 0x5884,
- 0x8139, 0xFD30, 0xFD39, 0x588E, 0x8139, 0xFE30, 0xFE39, 0x5898, 0x8230, 0x8130, 0x8139, 0x58A2,
- 0x8230, 0x8230, 0x8239, 0x58AC, 0x8230, 0x8330, 0x8339, 0x58B6, 0x8230, 0x8430, 0x8439, 0x58C0,
- 0x8230, 0x8530, 0x8539, 0x58CA, 0x8230, 0x8630, 0x8639, 0x58D4, 0x8230, 0x8730, 0x8739, 0x58DE,
- 0x8230, 0x8830, 0x8839, 0x58E8, 0x8230, 0x8930, 0x8939, 0x58F2, 0x8230, 0x8A30, 0x8A39, 0x58FC,
- 0x8230, 0x8B30, 0x8B39, 0x5906, 0x8230, 0x8C30, 0x8C39, 0x5910, 0x8230, 0x8D30, 0x8D39, 0x591A,
- 0x8230, 0x8E30, 0x8E39, 0x5924, 0x8230, 0x8F30, 0x8F39, 0x592E, 0x8230, 0x9030, 0x9039, 0x5938,
- 0x8230, 0x9130, 0x9139, 0x5942, 0x8230, 0x9230, 0x9239, 0x594C, 0x8230, 0x9330, 0x9339, 0x5956,
- 0x8230, 0x9430, 0x9439, 0x5960, 0x8230, 0x9530, 0x9539, 0x596A, 0x8230, 0x9630, 0x9639, 0x5974,
- 0x8230, 0x9730, 0x9739, 0x597E, 0x8230, 0x9830, 0x9839, 0x5988, 0x8230, 0x9930, 0x9939, 0x5992,
- 0x8230, 0x9A30, 0x9A39, 0x599C, 0x8230, 0x9B30, 0x9B39, 0x59A6, 0x8230, 0x9C30, 0x9C39, 0x59B0,
- 0x8230, 0x9D30, 0x9D39, 0x59BA, 0x8230, 0x9E30, 0x9E39, 0x59C4, 0x8230, 0x9F30, 0x9F39, 0x59CE,
- 0x8230, 0xA030, 0xA039, 0x59D8, 0x8230, 0xA130, 0xA139, 0x59E2, 0x8230, 0xA230, 0xA239, 0x59EC,
- 0x8230, 0xA330, 0xA339, 0x59F6, 0x8230, 0xA430, 0xA439, 0x5A00, 0x8230, 0xA530, 0xA539, 0x5A0A,
- 0x8230, 0xA630, 0xA639, 0x5A14, 0x8230, 0xA730, 0xA739, 0x5A1E, 0x8230, 0xA830, 0xA839, 0x5A28,
- 0x8230, 0xA930, 0xA939, 0x5A32, 0x8230, 0xAA30, 0xAA39, 0x5A3C, 0x8230, 0xAB30, 0xAB39, 0x5A46,
- 0x8230, 0xAC30, 0xAC39, 0x5A50, 0x8230, 0xAD30, 0xAD39, 0x5A5A, 0x8230, 0xAE30, 0xAE39, 0x5A64,
- 0x8230, 0xAF30, 0xAF39, 0x5A6E, 0x8230, 0xB030, 0xB039, 0x5A78, 0x8230, 0xB130, 0xB139, 0x5A82,
- 0x8230, 0xB230, 0xB239, 0x5A8C, 0x8230, 0xB330, 0xB339, 0x5A96, 0x8230, 0xB430, 0xB439, 0x5AA0,
- 0x8230, 0xB530, 0xB539, 0x5AAA, 0x8230, 0xB630, 0xB639, 0x5AB4, 0x8230, 0xB730, 0xB739, 0x5ABE,
- 0x8230, 0xB830, 0xB839, 0x5AC8, 0x8230, 0xB930, 0xB939, 0x5AD2, 0x8230, 0xBA30, 0xBA39, 0x5ADC,
- 0x8230, 0xBB30, 0xBB39, 0x5AE6, 0x8230, 0xBC30, 0xBC39, 0x5AF0, 0x8230, 0xBD30, 0xBD39, 0x5AFA,
- 0x8230, 0xBE30, 0xBE39, 0x5B04, 0x8230, 0xBF30, 0xBF39, 0x5B0E, 0x8230, 0xC030, 0xC039, 0x5B18,
- 0x8230, 0xC130, 0xC139, 0x5B22, 0x8230, 0xC230, 0xC239, 0x5B2C, 0x8230, 0xC330, 0xC339, 0x5B36,
- 0x8230, 0xC430, 0xC439, 0x5B40, 0x8230, 0xC530, 0xC539, 0x5B4A, 0x8230, 0xC630, 0xC639, 0x5B54,
- 0x8230, 0xC730, 0xC739, 0x5B5E, 0x8230, 0xC830, 0xC839, 0x5B68, 0x8230, 0xC930, 0xC939, 0x5B72,
- 0x8230, 0xCA30, 0xCA39, 0x5B7C, 0x8230, 0xCB30, 0xCB39, 0x5B86, 0x8230, 0xCC30, 0xCC39, 0x5B90,
- 0x8230, 0xCD30, 0xCD39, 0x5B9A, 0x8230, 0xCE30, 0xCE39, 0x5BA4, 0x8230, 0xCF30, 0xCF39, 0x5BAE,
- 0x8230, 0xD030, 0xD039, 0x5BB8, 0x8230, 0xD130, 0xD139, 0x5BC2, 0x8230, 0xD230, 0xD239, 0x5BCC,
- 0x8230, 0xD330, 0xD339, 0x5BD6, 0x8230, 0xD430, 0xD439, 0x5BE0, 0x8230, 0xD530, 0xD539, 0x5BEA,
- 0x8230, 0xD630, 0xD639, 0x5BF4, 0x8230, 0xD730, 0xD739, 0x5BFE, 0x8230, 0xD830, 0xD839, 0x5C08,
- 0x8230, 0xD930, 0xD939, 0x5C12, 0x8230, 0xDA30, 0xDA39, 0x5C1C, 0x8230, 0xDB30, 0xDB39, 0x5C26,
- 0x8230, 0xDC30, 0xDC39, 0x5C30, 0x8230, 0xDD30, 0xDD39, 0x5C3A, 0x8230, 0xDE30, 0xDE39, 0x5C44,
- 0x8230, 0xDF30, 0xDF39, 0x5C4E, 0x8230, 0xE030, 0xE039, 0x5C58, 0x8230, 0xE130, 0xE139, 0x5C62,
- 0x8230, 0xE230, 0xE239, 0x5C6C, 0x8230, 0xE330, 0xE339, 0x5C76, 0x8230, 0xE430, 0xE439, 0x5C80,
- 0x8230, 0xE530, 0xE539, 0x5C8A, 0x8230, 0xE630, 0xE639, 0x5C94, 0x8230, 0xE730, 0xE739, 0x5C9E,
- 0x8230, 0xE830, 0xE839, 0x5CA8, 0x8230, 0xE930, 0xE939, 0x5CB2, 0x8230, 0xEA30, 0xEA39, 0x5CBC,
- 0x8230, 0xEB30, 0xEB39, 0x5CC6, 0x8230, 0xEC30, 0xEC39, 0x5CD0, 0x8230, 0xED30, 0xED39, 0x5CDA,
- 0x8230, 0xEE30, 0xEE39, 0x5CE4, 0x8230, 0xEF30, 0xEF39, 0x5CEE, 0x8230, 0xF030, 0xF039, 0x5CF8,
- 0x8230, 0xF130, 0xF139, 0x5D02, 0x8230, 0xF230, 0xF239, 0x5D0C, 0x8230, 0xF330, 0xF339, 0x5D16,
- 0x8230, 0xF430, 0xF439, 0x5D20, 0x8230, 0xF530, 0xF539, 0x5D2A, 0x8230, 0xF630, 0xF639, 0x5D34,
- 0x8230, 0xF730, 0xF739, 0x5D3E, 0x8230, 0xF830, 0xF839, 0x5D48, 0x8230, 0xF930, 0xF939, 0x5D52,
- 0x8230, 0xFA30, 0xFA39, 0x5D5C, 0x8230, 0xFB30, 0xFB39, 0x5D66, 0x8230, 0xFC30, 0xFC39, 0x5D70,
- 0x8230, 0xFD30, 0xFD39, 0x5D7A, 0x8230, 0xFE30, 0xFE39, 0x5D84, 0x8231, 0x8130, 0x8139, 0x5D8E,
- 0x8231, 0x8230, 0x8239, 0x5D98, 0x8231, 0x8330, 0x8339, 0x5DA2, 0x8231, 0x8430, 0x8439, 0x5DAC,
- 0x8231, 0x8530, 0x8539, 0x5DB6, 0x8231, 0x8630, 0x8639, 0x5DC0, 0x8231, 0x8730, 0x8739, 0x5DCA,
- 0x8231, 0x8830, 0x8839, 0x5DD4, 0x8231, 0x8930, 0x8939, 0x5DDE, 0x8231, 0x8A30, 0x8A39, 0x5DE8,
- 0x8231, 0x8B30, 0x8B39, 0x5DF2, 0x8231, 0x8C30, 0x8C39, 0x5DFC, 0x8231, 0x8D30, 0x8D39, 0x5E06,
- 0x8231, 0x8E30, 0x8E39, 0x5E10, 0x8231, 0x8F30, 0x8F39, 0x5E1A, 0x8231, 0x9030, 0x9039, 0x5E24,
- 0x8231, 0x9130, 0x9139, 0x5E2E, 0x8231, 0x9230, 0x9239, 0x5E38, 0x8231, 0x9330, 0x9339, 0x5E42,
- 0x8231, 0x9430, 0x9439, 0x5E4C, 0x8231, 0x9530, 0x9539, 0x5E56, 0x8231, 0x9630, 0x9639, 0x5E60,
- 0x8231, 0x9730, 0x9739, 0x5E6A, 0x8231, 0x9830, 0x9839, 0x5E74, 0x8231, 0x9930, 0x9939, 0x5E7E,
- 0x8231, 0x9A30, 0x9A39, 0x5E88, 0x8231, 0x9B30, 0x9B39, 0x5E92, 0x8231, 0x9C30, 0x9C39, 0x5E9C,
- 0x8231, 0x9D30, 0x9D39, 0x5EA6, 0x8231, 0x9E30, 0x9E39, 0x5EB0, 0x8231, 0x9F30, 0x9F39, 0x5EBA,
- 0x8231, 0xA030, 0xA039, 0x5EC4, 0x8231, 0xA130, 0xA139, 0x5ECE, 0x8231, 0xA230, 0xA239, 0x5ED8,
- 0x8231, 0xA330, 0xA339, 0x5EE2, 0x8231, 0xA430, 0xA439, 0x5EEC, 0x8231, 0xA530, 0xA539, 0x5EF6,
- 0x8231, 0xA630, 0xA639, 0x5F00, 0x8231, 0xA730, 0xA739, 0x5F0A, 0x8231, 0xA830, 0xA839, 0x5F14,
- 0x8231, 0xA930, 0xA939, 0x5F1E, 0x8231, 0xAA30, 0xAA39, 0x5F28, 0x8231, 0xAB30, 0xAB39, 0x5F32,
- 0x8231, 0xAC30, 0xAC39, 0x5F3C, 0x8231, 0xAD30, 0xAD39, 0x5F46, 0x8231, 0xAE30, 0xAE39, 0x5F50,
- 0x8231, 0xAF30, 0xAF39, 0x5F5A, 0x8231, 0xB030, 0xB039, 0x5F64, 0x8231, 0xB130, 0xB139, 0x5F6E,
- 0x8231, 0xB230, 0xB239, 0x5F78, 0x8231, 0xB330, 0xB339, 0x5F82, 0x8231, 0xB430, 0xB439, 0x5F8C,
- 0x8231, 0xB530, 0xB539, 0x5F96, 0x8231, 0xB630, 0xB639, 0x5FA0, 0x8231, 0xB730, 0xB739, 0x5FAA,
- 0x8231, 0xB830, 0xB839, 0x5FB4, 0x8231, 0xB930, 0xB939, 0x5FBE, 0x8231, 0xBA30, 0xBA39, 0x5FC8,
- 0x8231, 0xBB30, 0xBB39, 0x5FD2, 0x8231, 0xBC30, 0xBC39, 0x5FDC, 0x8231, 0xBD30, 0xBD39, 0x5FE6,
- 0x8231, 0xBE30, 0xBE39, 0x5FF0, 0x8231, 0xBF30, 0xBF39, 0x5FFA, 0x8231, 0xC030, 0xC039, 0x6004,
- 0x8231, 0xC130, 0xC139, 0x600E, 0x8231, 0xC230, 0xC239, 0x6018, 0x8231, 0xC330, 0xC339, 0x6022,
- 0x8231, 0xC430, 0xC439, 0x602C, 0x8231, 0xC530, 0xC539, 0x6036, 0x8231, 0xC630, 0xC639, 0x6040,
- 0x8231, 0xC730, 0xC739, 0x604A, 0x8231, 0xC830, 0xC839, 0x6054, 0x8231, 0xC930, 0xC939, 0x605E,
- 0x8231, 0xCA30, 0xCA39, 0x6068, 0x8231, 0xCB30, 0xCB39, 0x6072, 0x8231, 0xCC30, 0xCC39, 0x607C,
- 0x8231, 0xCD30, 0xCD39, 0x6086, 0x8231, 0xCE30, 0xCE39, 0x6090, 0x8231, 0xCF30, 0xCF39, 0x609A,
- 0x8231, 0xD030, 0xD039, 0x60A4, 0x8231, 0xD130, 0xD139, 0x60AE, 0x8231, 0xD230, 0xD239, 0x60B8,
- 0x8231, 0xD330, 0xD339, 0x60C2, 0x8231, 0xD430, 0xD439, 0x60CC, 0x8231, 0xD530, 0xD539, 0x60D6,
- 0x8231, 0xD630, 0xD639, 0x60E0, 0x8231, 0xD730, 0xD739, 0x60EA, 0x8231, 0xD830, 0xD839, 0x60F4,
- 0x8231, 0xD930, 0xD939, 0x60FE, 0x8231, 0xDA30, 0xDA39, 0x6108, 0x8231, 0xDB30, 0xDB39, 0x6112,
- 0x8231, 0xDC30, 0xDC39, 0x611C, 0x8231, 0xDD30, 0xDD39, 0x6126, 0x8231, 0xDE30, 0xDE39, 0x6130,
- 0x8231, 0xDF30, 0xDF39, 0x613A, 0x8231, 0xE030, 0xE039, 0x6144, 0x8231, 0xE130, 0xE139, 0x614E,
- 0x8231, 0xE230, 0xE239, 0x6158, 0x8231, 0xE330, 0xE339, 0x6162, 0x8231, 0xE430, 0xE439, 0x616C,
- 0x8231, 0xE530, 0xE539, 0x6176, 0x8231, 0xE630, 0xE639, 0x6180, 0x8231, 0xE730, 0xE739, 0x618A,
- 0x8231, 0xE830, 0xE839, 0x6194, 0x8231, 0xE930, 0xE939, 0x619E, 0x8231, 0xEA30, 0xEA39, 0x61A8,
- 0x8231, 0xEB30, 0xEB39, 0x61B2, 0x8231, 0xEC30, 0xEC39, 0x61BC, 0x8231, 0xED30, 0xED39, 0x61C6,
- 0x8231, 0xEE30, 0xEE39, 0x61D0, 0x8231, 0xEF30, 0xEF39, 0x61DA, 0x8231, 0xF030, 0xF039, 0x61E4,
- 0x8231, 0xF130, 0xF139, 0x61EE, 0x8231, 0xF230, 0xF239, 0x61F8, 0x8231, 0xF330, 0xF339, 0x6202,
- 0x8231, 0xF430, 0xF439, 0x620C, 0x8231, 0xF530, 0xF539, 0x6216, 0x8231, 0xF630, 0xF639, 0x6220,
- 0x8231, 0xF730, 0xF739, 0x622A, 0x8231, 0xF830, 0xF839, 0x6234, 0x8231, 0xF930, 0xF939, 0x623E,
- 0x8231, 0xFA30, 0xFA39, 0x6248, 0x8231, 0xFB30, 0xFB39, 0x6252, 0x8231, 0xFC30, 0xFC39, 0x625C,
- 0x8231, 0xFD30, 0xFD39, 0x6266, 0x8231, 0xFE30, 0xFE39, 0x6270, 0x8232, 0x8130, 0x8139, 0x627A,
- 0x8232, 0x8230, 0x8239, 0x6284, 0x8232, 0x8330, 0x8339, 0x628E, 0x8232, 0x8430, 0x8439, 0x6298,
- 0x8232, 0x8530, 0x8539, 0x62A2, 0x8232, 0x8630, 0x8639, 0x62AC, 0x8232, 0x8730, 0x8739, 0x62B6,
- 0x8232, 0x8830, 0x8839, 0x62C0, 0x8232, 0x8930, 0x8939, 0x62CA, 0x8232, 0x8A30, 0x8A39, 0x62D4,
- 0x8232, 0x8B30, 0x8B39, 0x62DE, 0x8232, 0x8C30, 0x8C39, 0x62E8, 0x8232, 0x8D30, 0x8D39, 0x62F2,
- 0x8232, 0x8E30, 0x8E39, 0x62FC, 0x8232, 0x8F30, 0x8F39, 0x6306, 0x8232, 0x9030, 0x9039, 0x6310,
- 0x8232, 0x9130, 0x9139, 0x631A, 0x8232, 0x9230, 0x9239, 0x6324, 0x8232, 0x9330, 0x9339, 0x632E,
- 0x8232, 0x9430, 0x9439, 0x6338, 0x8232, 0x9530, 0x9539, 0x6342, 0x8232, 0x9630, 0x9639, 0x634C,
- 0x8232, 0x9730, 0x9739, 0x6356, 0x8232, 0x9830, 0x9839, 0x6360, 0x8232, 0x9930, 0x9939, 0x636A,
- 0x8232, 0x9A30, 0x9A39, 0x6374, 0x8232, 0x9B30, 0x9B39, 0x637E, 0x8232, 0x9C30, 0x9C39, 0x6388,
- 0x8232, 0x9D30, 0x9D39, 0x6392, 0x8232, 0x9E30, 0x9E39, 0x639C, 0x8232, 0x9F30, 0x9F39, 0x63A6,
- 0x8232, 0xA030, 0xA039, 0x63B0, 0x8232, 0xA130, 0xA139, 0x63BA, 0x8232, 0xA230, 0xA239, 0x63C4,
- 0x8232, 0xA330, 0xA339, 0x63CE, 0x8232, 0xA430, 0xA439, 0x63D8, 0x8232, 0xA530, 0xA539, 0x63E2,
- 0x8232, 0xA630, 0xA639, 0x63EC, 0x8232, 0xA730, 0xA739, 0x63F6, 0x8232, 0xA830, 0xA839, 0x6400,
- 0x8232, 0xA930, 0xA939, 0x640A, 0x8232, 0xAA30, 0xAA39, 0x6414, 0x8232, 0xAB30, 0xAB39, 0x641E,
- 0x8232, 0xAC30, 0xAC39, 0x6428, 0x8232, 0xAD30, 0xAD39, 0x6432, 0x8232, 0xAE30, 0xAE39, 0x643C,
- 0x8232, 0xAF30, 0xAF39, 0x6446, 0x8232, 0xB030, 0xB039, 0x6450, 0x8232, 0xB130, 0xB139, 0x645A,
- 0x8232, 0xB230, 0xB239, 0x6464, 0x8232, 0xB330, 0xB339, 0x646E, 0x8232, 0xB430, 0xB439, 0x6478,
- 0x8232, 0xB530, 0xB539, 0x6482, 0x8232, 0xB630, 0xB639, 0x648C, 0x8232, 0xB730, 0xB739, 0x6496,
- 0x8232, 0xB830, 0xB839, 0x64A0, 0x8232, 0xB930, 0xB939, 0x64AA, 0x8232, 0xBA30, 0xBA39, 0x64B4,
- 0x8232, 0xBB30, 0xBB39, 0x64BE, 0x8232, 0xBC30, 0xBC39, 0x64C8, 0x8232, 0xBD30, 0xBD39, 0x64D2,
- 0x8232, 0xBE30, 0xBE39, 0x64DC, 0x8232, 0xBF30, 0xBF39, 0x64E6, 0x8232, 0xC030, 0xC039, 0x64F0,
- 0x8232, 0xC130, 0xC139, 0x64FA, 0x8232, 0xC230, 0xC239, 0x6504, 0x8232, 0xC330, 0xC339, 0x650E,
- 0x8232, 0xC430, 0xC439, 0x6518, 0x8232, 0xC530, 0xC539, 0x6522, 0x8232, 0xC630, 0xC639, 0x652C,
- 0x8232, 0xC730, 0xC739, 0x6536, 0x8232, 0xC830, 0xC839, 0x6540, 0x8232, 0xC930, 0xC939, 0x654A,
- 0x8232, 0xCA30, 0xCA39, 0x6554, 0x8232, 0xCB30, 0xCB39, 0x655E, 0x8232, 0xCC30, 0xCC39, 0x6568,
- 0x8232, 0xCD30, 0xCD39, 0x6572, 0x8232, 0xCE30, 0xCE39, 0x657C, 0x8232, 0xCF30, 0xCF39, 0x6586,
- 0x8232, 0xD030, 0xD039, 0x6590, 0x8232, 0xD130, 0xD139, 0x659A, 0x8232, 0xD230, 0xD239, 0x65A4,
- 0x8232, 0xD330, 0xD339, 0x65AE, 0x8232, 0xD430, 0xD439, 0x65B8, 0x8232, 0xD530, 0xD539, 0x65C2,
- 0x8232, 0xD630, 0xD639, 0x65CC, 0x8232, 0xD730, 0xD739, 0x65D6, 0x8232, 0xD830, 0xD839, 0x65E0,
- 0x8232, 0xD930, 0xD939, 0x65EA, 0x8232, 0xDA30, 0xDA39, 0x65F4, 0x8232, 0xDB30, 0xDB39, 0x65FE,
- 0x8232, 0xDC30, 0xDC39, 0x6608, 0x8232, 0xDD30, 0xDD39, 0x6612, 0x8232, 0xDE30, 0xDE39, 0x661C,
- 0x8232, 0xDF30, 0xDF39, 0x6626, 0x8232, 0xE030, 0xE039, 0x6630, 0x8232, 0xE130, 0xE139, 0x663A,
- 0x8232, 0xE230, 0xE239, 0x6644, 0x8232, 0xE330, 0xE339, 0x664E, 0x8232, 0xE430, 0xE439, 0x6658,
- 0x8232, 0xE530, 0xE539, 0x6662, 0x8232, 0xE630, 0xE639, 0x666C, 0x8232, 0xE730, 0xE739, 0x6676,
- 0x8232, 0xE830, 0xE839, 0x6680, 0x8232, 0xE930, 0xE939, 0x668A, 0x8232, 0xEA30, 0xEA39, 0x6694,
- 0x8232, 0xEB30, 0xEB39, 0x669E, 0x8232, 0xEC30, 0xEC39, 0x66A8, 0x8232, 0xED30, 0xED39, 0x66B2,
- 0x8232, 0xEE30, 0xEE39, 0x66BC, 0x8232, 0xEF30, 0xEF39, 0x66C6, 0x8232, 0xF030, 0xF039, 0x66D0,
- 0x8232, 0xF130, 0xF139, 0x66DA, 0x8232, 0xF230, 0xF239, 0x66E4, 0x8232, 0xF330, 0xF339, 0x66EE,
- 0x8232, 0xF430, 0xF439, 0x66F8, 0x8232, 0xF530, 0xF539, 0x6702, 0x8232, 0xF630, 0xF639, 0x670C,
- 0x8232, 0xF730, 0xF739, 0x6716, 0x8232, 0xF830, 0xF839, 0x6720, 0x8232, 0xF930, 0xF939, 0x672A,
- 0x8232, 0xFA30, 0xFA39, 0x6734, 0x8232, 0xFB30, 0xFB39, 0x673E, 0x8232, 0xFC30, 0xFC39, 0x6748,
- 0x8232, 0xFD30, 0xFD39, 0x6752, 0x8232, 0xFE30, 0xFE39, 0x675C, 0x8233, 0x8130, 0x8139, 0x6766,
- 0x8233, 0x8230, 0x8239, 0x6770, 0x8233, 0x8330, 0x8339, 0x677A, 0x8233, 0x8430, 0x8439, 0x6784,
- 0x8233, 0x8530, 0x8539, 0x678E, 0x8233, 0x8630, 0x8639, 0x6798, 0x8233, 0x8730, 0x8739, 0x67A2,
- 0x8233, 0x8830, 0x8839, 0x67AC, 0x8233, 0x8930, 0x8939, 0x67B6, 0x8233, 0x8A30, 0x8A39, 0x67C0,
- 0x8233, 0x8B30, 0x8B39, 0x67CA, 0x8233, 0x8C30, 0x8C39, 0x67D4, 0x8233, 0x8D30, 0x8D39, 0x67DE,
- 0x8233, 0x8E30, 0x8E39, 0x67E8, 0x8233, 0x8F30, 0x8F39, 0x67F2, 0x8233, 0x9030, 0x9039, 0x67FC,
- 0x8233, 0x9130, 0x9139, 0x6806, 0x8233, 0x9230, 0x9239, 0x6810, 0x8233, 0x9330, 0x9339, 0x681A,
- 0x8233, 0x9430, 0x9439, 0x6824, 0x8233, 0x9530, 0x9539, 0x682E, 0x8233, 0x9630, 0x9639, 0x6838,
- 0x8233, 0x9730, 0x9739, 0x6842, 0x8233, 0x9830, 0x9839, 0x684C, 0x8233, 0x9930, 0x9939, 0x6856,
- 0x8233, 0x9A30, 0x9A39, 0x6860, 0x8233, 0x9B30, 0x9B39, 0x686A, 0x8233, 0x9C30, 0x9C39, 0x6874,
- 0x8233, 0x9D30, 0x9D39, 0x687E, 0x8233, 0x9E30, 0x9E39, 0x6888, 0x8233, 0x9F30, 0x9F39, 0x6892,
- 0x8233, 0xA030, 0xA039, 0x689C, 0x8233, 0xA130, 0xA139, 0x68A6, 0x8233, 0xA230, 0xA239, 0x68B0,
- 0x8233, 0xA330, 0xA339, 0x68BA, 0x8233, 0xA430, 0xA439, 0x68C4, 0x8233, 0xA530, 0xA539, 0x68CE,
- 0x8233, 0xA630, 0xA639, 0x68D8, 0x8233, 0xA730, 0xA739, 0x68E2, 0x8233, 0xA830, 0xA839, 0x68EC,
- 0x8233, 0xA930, 0xA939, 0x68F6, 0x8233, 0xAA30, 0xAA39, 0x6900, 0x8233, 0xAB30, 0xAB39, 0x690A,
- 0x8233, 0xAC30, 0xAC39, 0x6914, 0x8233, 0xAD30, 0xAD39, 0x691E, 0x8233, 0xAE30, 0xAE39, 0x6928,
- 0x8233, 0xAF30, 0xAF39, 0x6932, 0x8233, 0xB030, 0xB039, 0x693C, 0x8233, 0xB130, 0xB139, 0x6946,
- 0x8233, 0xB230, 0xB239, 0x6950, 0x8233, 0xB330, 0xB339, 0x695A, 0x8233, 0xB430, 0xB439, 0x6964,
- 0x8233, 0xB530, 0xB539, 0x696E, 0x8233, 0xB630, 0xB639, 0x6978, 0x8233, 0xB730, 0xB739, 0x6982,
- 0x8233, 0xB830, 0xB839, 0x698C, 0x8233, 0xB930, 0xB939, 0x6996, 0x8233, 0xBA30, 0xBA39, 0x69A0,
- 0x8233, 0xBB30, 0xBB39, 0x69AA, 0x8233, 0xBC30, 0xBC39, 0x69B4, 0x8233, 0xBD30, 0xBD39, 0x69BE,
- 0x8233, 0xBE30, 0xBE39, 0x69C8, 0x8233, 0xBF30, 0xBF39, 0x69D2, 0x8233, 0xC030, 0xC039, 0x69DC,
- 0x8233, 0xC130, 0xC139, 0x69E6, 0x8233, 0xC230, 0xC239, 0x69F0, 0x8233, 0xC330, 0xC339, 0x69FA,
- 0x8233, 0xC430, 0xC439, 0x6A04, 0x8233, 0xC530, 0xC539, 0x6A0E, 0x8233, 0xC630, 0xC639, 0x6A18,
- 0x8233, 0xC730, 0xC739, 0x6A22, 0x8233, 0xC830, 0xC839, 0x6A2C, 0x8233, 0xC930, 0xC939, 0x6A36,
- 0x8233, 0xCA30, 0xCA39, 0x6A40, 0x8233, 0xCB30, 0xCB39, 0x6A4A, 0x8233, 0xCC30, 0xCC39, 0x6A54,
- 0x8233, 0xCD30, 0xCD39, 0x6A5E, 0x8233, 0xCE30, 0xCE39, 0x6A68, 0x8233, 0xCF30, 0xCF39, 0x6A72,
- 0x8233, 0xD030, 0xD039, 0x6A7C, 0x8233, 0xD130, 0xD139, 0x6A86, 0x8233, 0xD230, 0xD239, 0x6A90,
- 0x8233, 0xD330, 0xD339, 0x6A9A, 0x8233, 0xD430, 0xD439, 0x6AA4, 0x8233, 0xD530, 0xD539, 0x6AAE,
- 0x8233, 0xD630, 0xD639, 0x6AB8, 0x8233, 0xD730, 0xD739, 0x6AC2, 0x8233, 0xD830, 0xD839, 0x6ACC,
- 0x8233, 0xD930, 0xD939, 0x6AD6, 0x8233, 0xDA30, 0xDA39, 0x6AE0, 0x8233, 0xDB30, 0xDB39, 0x6AEA,
- 0x8233, 0xDC30, 0xDC39, 0x6AF4, 0x8233, 0xDD30, 0xDD39, 0x6AFE, 0x8233, 0xDE30, 0xDE39, 0x6B08,
- 0x8233, 0xDF30, 0xDF39, 0x6B12, 0x8233, 0xE030, 0xE039, 0x6B1C, 0x8233, 0xE130, 0xE139, 0x6B26,
- 0x8233, 0xE230, 0xE239, 0x6B30, 0x8233, 0xE330, 0xE339, 0x6B3A, 0x8233, 0xE430, 0xE439, 0x6B44,
- 0x8233, 0xE530, 0xE539, 0x6B4E, 0x8233, 0xE630, 0xE639, 0x6B58, 0x8233, 0xE730, 0xE739, 0x6B62,
- 0x8233, 0xE830, 0xE839, 0x6B6C, 0x8233, 0xE930, 0xE939, 0x6B76, 0x8233, 0xEA30, 0xEA39, 0x6B80,
- 0x8233, 0xEB30, 0xEB39, 0x6B8A, 0x8233, 0xEC30, 0xEC39, 0x6B94, 0x8233, 0xED30, 0xED39, 0x6B9E,
- 0x8233, 0xEE30, 0xEE39, 0x6BA8, 0x8233, 0xEF30, 0xEF39, 0x6BB2, 0x8233, 0xF030, 0xF039, 0x6BBC,
- 0x8233, 0xF130, 0xF139, 0x6BC6, 0x8233, 0xF230, 0xF239, 0x6BD0, 0x8233, 0xF330, 0xF339, 0x6BDA,
- 0x8233, 0xF430, 0xF439, 0x6BE4, 0x8233, 0xF530, 0xF539, 0x6BEE, 0x8233, 0xF630, 0xF639, 0x6BF8,
- 0x8233, 0xF730, 0xF739, 0x6C02, 0x8233, 0xF830, 0xF839, 0x6C0C, 0x8233, 0xF930, 0xF939, 0x6C16,
- 0x8233, 0xFA30, 0xFA39, 0x6C20, 0x8233, 0xFB30, 0xFB39, 0x6C2A, 0x8233, 0xFC30, 0xFC39, 0x6C34,
- 0x8233, 0xFD30, 0xFD39, 0x6C3E, 0x8233, 0xFE30, 0xFE39, 0x6C48, 0x8234, 0x8130, 0x8139, 0x6C52,
- 0x8234, 0x8230, 0x8239, 0x6C5C, 0x8234, 0x8330, 0x8339, 0x6C66, 0x8234, 0x8430, 0x8439, 0x6C70,
- 0x8234, 0x8530, 0x8539, 0x6C7A, 0x8234, 0x8630, 0x8639, 0x6C84, 0x8234, 0x8730, 0x8739, 0x6C8E,
- 0x8234, 0x8830, 0x8839, 0x6C98, 0x8234, 0x8930, 0x8939, 0x6CA2, 0x8234, 0x8A30, 0x8A39, 0x6CAC,
- 0x8234, 0x8B30, 0x8B39, 0x6CB6, 0x8234, 0x8C30, 0x8C39, 0x6CC0, 0x8234, 0x8D30, 0x8D39, 0x6CCA,
- 0x8234, 0x8E30, 0x8E39, 0x6CD4, 0x8234, 0x8F30, 0x8F39, 0x6CDE, 0x8234, 0x9030, 0x9039, 0x6CE8,
- 0x8234, 0x9130, 0x9139, 0x6CF2, 0x8234, 0x9230, 0x9239, 0x6CFC, 0x8234, 0x9330, 0x9339, 0x6D06,
- 0x8234, 0x9430, 0x9439, 0x6D10, 0x8234, 0x9530, 0x9539, 0x6D1A, 0x8234, 0x9630, 0x9639, 0x6D24,
- 0x8234, 0x9730, 0x9739, 0x6D2E, 0x8234, 0x9830, 0x9839, 0x6D38, 0x8234, 0x9930, 0x9939, 0x6D42,
- 0x8234, 0x9A30, 0x9A39, 0x6D4C, 0x8234, 0x9B30, 0x9B39, 0x6D56, 0x8234, 0x9C30, 0x9C39, 0x6D60,
- 0x8234, 0x9D30, 0x9D39, 0x6D6A, 0x8234, 0x9E30, 0x9E39, 0x6D74, 0x8234, 0x9F30, 0x9F39, 0x6D7E,
- 0x8234, 0xA030, 0xA039, 0x6D88, 0x8234, 0xA130, 0xA139, 0x6D92, 0x8234, 0xA230, 0xA239, 0x6D9C,
- 0x8234, 0xA330, 0xA339, 0x6DA6, 0x8234, 0xA430, 0xA439, 0x6DB0, 0x8234, 0xA530, 0xA539, 0x6DBA,
- 0x8234, 0xA630, 0xA639, 0x6DC4, 0x8234, 0xA730, 0xA739, 0x6DCE, 0x8234, 0xA830, 0xA839, 0x6DD8,
- 0x8234, 0xA930, 0xA939, 0x6DE2, 0x8234, 0xAA30, 0xAA39, 0x6DEC, 0x8234, 0xAB30, 0xAB39, 0x6DF6,
- 0x8234, 0xAC30, 0xAC39, 0x6E00, 0x8234, 0xAD30, 0xAD39, 0x6E0A, 0x8234, 0xAE30, 0xAE39, 0x6E14,
- 0x8234, 0xAF30, 0xAF39, 0x6E1E, 0x8234, 0xB030, 0xB039, 0x6E28, 0x8234, 0xB130, 0xB139, 0x6E32,
- 0x8234, 0xB230, 0xB239, 0x6E3C, 0x8234, 0xB330, 0xB339, 0x6E46, 0x8234, 0xB430, 0xB439, 0x6E50,
- 0x8234, 0xB530, 0xB539, 0x6E5A, 0x8234, 0xB630, 0xB639, 0x6E64, 0x8234, 0xB730, 0xB739, 0x6E6E,
- 0x8234, 0xB830, 0xB839, 0x6E78, 0x8234, 0xB930, 0xB939, 0x6E82, 0x8234, 0xBA30, 0xBA39, 0x6E8C,
- 0x8234, 0xBB30, 0xBB39, 0x6E96, 0x8234, 0xBC30, 0xBC39, 0x6EA0, 0x8234, 0xBD30, 0xBD39, 0x6EAA,
- 0x8234, 0xBE30, 0xBE39, 0x6EB4, 0x8234, 0xBF30, 0xBF39, 0x6EBE, 0x8234, 0xC030, 0xC039, 0x6EC8,
- 0x8234, 0xC130, 0xC139, 0x6ED2, 0x8234, 0xC230, 0xC239, 0x6EDC, 0x8234, 0xC330, 0xC339, 0x6EE6,
- 0x8234, 0xC430, 0xC439, 0x6EF0, 0x8234, 0xC530, 0xC539, 0x6EFA, 0x8234, 0xC630, 0xC639, 0x6F04,
- 0x8234, 0xC730, 0xC739, 0x6F0E, 0x8234, 0xC830, 0xC839, 0x6F18, 0x8234, 0xC930, 0xC939, 0x6F22,
- 0x8234, 0xCA30, 0xCA39, 0x6F2C, 0x8234, 0xCB30, 0xCB39, 0x6F36, 0x8234, 0xCC30, 0xCC39, 0x6F40,
- 0x8234, 0xCD30, 0xCD39, 0x6F4A, 0x8234, 0xCE30, 0xCE39, 0x6F54, 0x8234, 0xCF30, 0xCF39, 0x6F5E,
- 0x8234, 0xD030, 0xD039, 0x6F68, 0x8234, 0xD130, 0xD139, 0x6F72, 0x8234, 0xD230, 0xD239, 0x6F7C,
- 0x8234, 0xD330, 0xD339, 0x6F86, 0x8234, 0xD430, 0xD439, 0x6F90, 0x8234, 0xD530, 0xD539, 0x6F9A,
- 0x8234, 0xD630, 0xD639, 0x6FA4, 0x8234, 0xD730, 0xD739, 0x6FAE, 0x8234, 0xD830, 0xD839, 0x6FB8,
- 0x8234, 0xD930, 0xD939, 0x6FC2, 0x8234, 0xDA30, 0xDA39, 0x6FCC, 0x8234, 0xDB30, 0xDB39, 0x6FD6,
- 0x8234, 0xDC30, 0xDC39, 0x6FE0, 0x8234, 0xDD30, 0xDD39, 0x6FEA, 0x8234, 0xDE30, 0xDE39, 0x6FF4,
- 0x8234, 0xDF30, 0xDF39, 0x6FFE, 0x8234, 0xE030, 0xE039, 0x7008, 0x8234, 0xE130, 0xE139, 0x7012,
- 0x8234, 0xE230, 0xE239, 0x701C, 0x8234, 0xE330, 0xE339, 0x7026, 0x8234, 0xE430, 0xE439, 0x7030,
- 0x8234, 0xE530, 0xE539, 0x703A, 0x8234, 0xE630, 0xE639, 0x7044, 0x8234, 0xE730, 0xE739, 0x704E,
- 0x8234, 0xE830, 0xE839, 0x7058, 0x8234, 0xE930, 0xE939, 0x7062, 0x8234, 0xEA30, 0xEA39, 0x706C,
- 0x8234, 0xEB30, 0xEB39, 0x7076, 0x8234, 0xEC30, 0xEC39, 0x7080, 0x8234, 0xED30, 0xED39, 0x708A,
- 0x8234, 0xEE30, 0xEE39, 0x7094, 0x8234, 0xEF30, 0xEF39, 0x709E, 0x8234, 0xF030, 0xF039, 0x70A8,
- 0x8234, 0xF130, 0xF139, 0x70B2, 0x8234, 0xF230, 0xF239, 0x70BC, 0x8234, 0xF330, 0xF339, 0x70C6,
- 0x8234, 0xF430, 0xF439, 0x70D0, 0x8234, 0xF530, 0xF539, 0x70DA, 0x8234, 0xF630, 0xF639, 0x70E4,
- 0x8234, 0xF730, 0xF739, 0x70EE, 0x8234, 0xF830, 0xF839, 0x70F8, 0x8234, 0xF930, 0xF939, 0x7102,
- 0x8234, 0xFA30, 0xFA39, 0x710C, 0x8234, 0xFB30, 0xFB39, 0x7116, 0x8234, 0xFC30, 0xFC39, 0x7120,
- 0x8234, 0xFD30, 0xFD39, 0x712A, 0x8234, 0xFE30, 0xFE39, 0x7134, 0x8235, 0x8130, 0x8139, 0x713E,
- 0x8235, 0x8230, 0x8239, 0x7148, 0x8235, 0x8330, 0x8339, 0x7152, 0x8235, 0x8430, 0x8439, 0x715C,
- 0x8235, 0x8530, 0x8539, 0x7166, 0x8235, 0x8630, 0x8639, 0x7170, 0x8235, 0x8730, 0x8738, 0x717A,
- 0x8235, 0x9833, 0x9839, 0x7188, 0x8235, 0x9930, 0x9939, 0x718F, 0x8235, 0x9A30, 0x9A39, 0x7199,
- 0x8235, 0x9B30, 0x9B39, 0x71A3, 0x8235, 0x9C30, 0x9C39, 0x71AD, 0x8235, 0x9D30, 0x9D39, 0x71B7,
- 0x8235, 0x9E30, 0x9E39, 0x71C1, 0x8235, 0x9F30, 0x9F39, 0x71CB, 0x8235, 0xA030, 0xA039, 0x71D5,
- 0x8235, 0xA130, 0xA139, 0x71DF, 0x8235, 0xA230, 0xA239, 0x71E9, 0x8235, 0xA330, 0xA339, 0x71F3,
- 0x8235, 0xA430, 0xA439, 0x71FD, 0x8235, 0xA530, 0xA539, 0x7207, 0x8235, 0xA630, 0xA639, 0x7211,
- 0x8235, 0xA730, 0xA739, 0x721B, 0x8235, 0xA830, 0xA839, 0x7225, 0x8235, 0xA930, 0xA939, 0x722F,
- 0x8235, 0xAA30, 0xAA39, 0x7239, 0x8235, 0xAB30, 0xAB39, 0x7243, 0x8235, 0xAC30, 0xAC39, 0x724D,
- 0x8235, 0xAD30, 0xAD39, 0x7257, 0x8235, 0xAE30, 0xAE39, 0x7261, 0x8235, 0xAF30, 0xAF39, 0x726B,
- 0x8235, 0xB030, 0xB039, 0x7275, 0x8235, 0xB130, 0xB139, 0x727F, 0x8235, 0xB230, 0xB239, 0x7289,
- 0x8235, 0xB330, 0xB339, 0x7293, 0x8235, 0xB430, 0xB439, 0x729D, 0x8235, 0xB530, 0xB539, 0x72A7,
- 0x8235, 0xB630, 0xB639, 0x72B1, 0x8235, 0xB730, 0xB739, 0x72BB, 0x8235, 0xB830, 0xB839, 0x72C5,
- 0x8235, 0xB930, 0xB939, 0x72CF, 0x8235, 0xBA30, 0xBA39, 0x72D9, 0x8235, 0xBB30, 0xBB39, 0x72E3,
- 0x8235, 0xBC30, 0xBC39, 0x72ED, 0x8235, 0xBD30, 0xBD39, 0x72F7, 0x8235, 0xBE30, 0xBE39, 0x7301,
- 0x8235, 0xBF30, 0xBF39, 0x730B, 0x8235, 0xC030, 0xC039, 0x7315, 0x8235, 0xC130, 0xC139, 0x731F,
- 0x8235, 0xC230, 0xC239, 0x7329, 0x8235, 0xC330, 0xC339, 0x7333, 0x8235, 0xC430, 0xC439, 0x733D,
- 0x8235, 0xC530, 0xC539, 0x7347, 0x8235, 0xC630, 0xC639, 0x7351, 0x8235, 0xC730, 0xC739, 0x735B,
- 0x8235, 0xC830, 0xC839, 0x7365, 0x8235, 0xC930, 0xC939, 0x736F, 0x8235, 0xCA30, 0xCA39, 0x7379,
- 0x8235, 0xCB30, 0xCB39, 0x7383, 0x8235, 0xCC30, 0xCC39, 0x738D, 0x8235, 0xCD30, 0xCD39, 0x7397,
- 0x8235, 0xCE30, 0xCE39, 0x73A1, 0x8235, 0xCF30, 0xCF39, 0x73AB, 0x8235, 0xD030, 0xD039, 0x73B5,
- 0x8235, 0xD130, 0xD139, 0x73BF, 0x8235, 0xD230, 0xD239, 0x73C9, 0x8235, 0xD330, 0xD339, 0x73D3,
- 0x8235, 0xD430, 0xD439, 0x73DD, 0x8235, 0xD530, 0xD539, 0x73E7, 0x8235, 0xD630, 0xD639, 0x73F1,
- 0x8235, 0xD730, 0xD739, 0x73FB, 0x8235, 0xD830, 0xD839, 0x7405, 0x8235, 0xD930, 0xD939, 0x740F,
- 0x8235, 0xDA30, 0xDA39, 0x7419, 0x8235, 0xDB30, 0xDB39, 0x7423, 0x8235, 0xDC30, 0xDC39, 0x742D,
- 0x8235, 0xDD30, 0xDD39, 0x7437, 0x8235, 0xDE30, 0xDE39, 0x7441, 0x8235, 0xDF30, 0xDF39, 0x744B,
- 0x8235, 0xE030, 0xE039, 0x7455, 0x8235, 0xE130, 0xE139, 0x745F, 0x8235, 0xE230, 0xE239, 0x7469,
- 0x8235, 0xE330, 0xE339, 0x7473, 0x8235, 0xE430, 0xE439, 0x747D, 0x8235, 0xE530, 0xE539, 0x7487,
- 0x8235, 0xE630, 0xE639, 0x7491, 0x8235, 0xE730, 0xE739, 0x749B, 0x8235, 0xE830, 0xE839, 0x74A5,
- 0x8235, 0xE930, 0xE939, 0x74AF, 0x8235, 0xEA30, 0xEA39, 0x74B9, 0x8235, 0xEB30, 0xEB39, 0x74C3,
- 0x8235, 0xEC30, 0xEC39, 0x74CD, 0x8235, 0xED30, 0xED39, 0x74D7, 0x8235, 0xEE30, 0xEE39, 0x74E1,
- 0x8235, 0xEF30, 0xEF39, 0x74EB, 0x8235, 0xF030, 0xF039, 0x74F5, 0x8235, 0xF130, 0xF139, 0x74FF,
- 0x8235, 0xF230, 0xF239, 0x7509, 0x8235, 0xF330, 0xF339, 0x7513, 0x8235, 0xF430, 0xF439, 0x751D,
- 0x8235, 0xF530, 0xF539, 0x7527, 0x8235, 0xF630, 0xF639, 0x7531, 0x8235, 0xF730, 0xF739, 0x753B,
- 0x8235, 0xF830, 0xF839, 0x7545, 0x8235, 0xF930, 0xF939, 0x754F, 0x8235, 0xFA30, 0xFA39, 0x7559,
- 0x8235, 0xFB30, 0xFB39, 0x7563, 0x8235, 0xFC30, 0xFC39, 0x756D, 0x8235, 0xFD30, 0xFD39, 0x7577,
- 0x8235, 0xFE30, 0xFE39, 0x7581, 0x8236, 0x8130, 0x8139, 0x758B, 0x8236, 0x8230, 0x8239, 0x7595,
- 0x8236, 0x8330, 0x8339, 0x759F, 0x8236, 0x8430, 0x8439, 0x75A9, 0x8236, 0x8530, 0x8539, 0x75B3,
- 0x8236, 0x8630, 0x8639, 0x75BD, 0x8236, 0x8730, 0x8739, 0x75C7, 0x8236, 0x8830, 0x8839, 0x75D1,
- 0x8236, 0x8930, 0x8939, 0x75DB, 0x8236, 0x8A30, 0x8A39, 0x75E5, 0x8236, 0x8B30, 0x8B39, 0x75EF,
- 0x8236, 0x8C30, 0x8C39, 0x75F9, 0x8236, 0x8D30, 0x8D39, 0x7603, 0x8236, 0x8E30, 0x8E37, 0x760D,
- 0x8236, 0x8F31, 0x8F39, 0x7615, 0x8236, 0x9030, 0x9039, 0x761E, 0x8236, 0x9130, 0x9139, 0x7628,
- 0x8236, 0x9230, 0x9239, 0x7632, 0x8236, 0x9330, 0x9339, 0x763C, 0x8236, 0x9430, 0x9435, 0x7646,
+ 0x8130, 0x8436, 0x8436, 0x5752, 0x8138, 0xFD38, 0xFD39, 0x579C, 0x8138,
+ 0xFE30, 0xFE39, 0x579E, 0x8139, 0x8130, 0x8137, 0x57A8, 0x8139, 0x8139,
+ 0x8139, 0x57B0, 0x8139, 0x8230, 0x8239, 0x57B1, 0x8139, 0x8330, 0x8339,
+ 0x57BB, 0x8139, 0x8430, 0x8439, 0x57C5, 0x8139, 0x8530, 0x8539, 0x57CF,
+ 0x8139, 0x8630, 0x8639, 0x57D9, 0x8139, 0x8730, 0x8739, 0x57E3, 0x8139,
+ 0x8830, 0x8839, 0x57ED, 0x8139, 0x8930, 0x8939, 0x57F7, 0x8139, 0x8B32,
+ 0x8B32, 0x1042, 0x8139, 0x8B33, 0x8B33, 0x1263, 0x8139, 0x8B34, 0x8B34,
+ 0x1272, 0x8139, 0x8B35, 0x8B35, 0x1265, 0x8139, 0x8B36, 0x8B36, 0x1059,
+ 0x8139, 0x8B37, 0x8B37, 0x2793, 0x8139, 0x8B38, 0x8B38, 0x063D, 0x8139,
+ 0x8B39, 0x8B39, 0x1303, 0x8139, 0x8C30, 0x8C30, 0x0CA6, 0x8139, 0x8C31,
+ 0x8C31, 0x0638, 0x8139, 0x8C32, 0x8C32, 0x0CC6, 0x8139, 0x8C33, 0x8C33,
+ 0x03D6, 0x8139, 0x8C34, 0x8C34, 0x129D, 0x8139, 0x8C35, 0x8C35, 0x1314,
+ 0x8139, 0x8C36, 0x8C36, 0x130F, 0x8139, 0x8C37, 0x8C37, 0x082B, 0x8139,
+ 0x8C38, 0x8C38, 0x1399, 0x8139, 0x8C39, 0x8C39, 0x0597, 0x8139, 0x8D30,
+ 0x8D30, 0x09EF, 0x8139, 0x8D31, 0x8D31, 0x12FC, 0x8139, 0x8D32, 0x8D32,
+ 0x1266, 0x8139, 0x8D33, 0x8D33, 0x1284, 0x8139, 0x8D34, 0x8D34, 0x2A1A,
+ 0x8139, 0x8D35, 0x8D35, 0x0D45, 0x8139, 0x8D36, 0x8D36, 0x047E, 0x8139,
+ 0x8D37, 0x8D37, 0x1352, 0x8139, 0x8D38, 0x8D38, 0x04CC, 0x8139, 0x8D39,
+ 0x8D39, 0x139C, 0x8139, 0x8E30, 0x8E30, 0x10BB, 0x8139, 0x8E31, 0x8E31,
+ 0x0967, 0x8139, 0x8E32, 0x8E32, 0x1593, 0x8139, 0x8E33, 0x8E33, 0x0E72,
+ 0x8139, 0x8E34, 0x8E34, 0x0D56, 0x8139, 0x8E35, 0x8E35, 0x161C, 0x8139,
+ 0x8E36, 0x8E36, 0x2D2D, 0x8139, 0x8E37, 0x8E37, 0x0F13, 0x8139, 0x8E38,
+ 0x8E38, 0x0576, 0x8139, 0x8E39, 0x8E39, 0x0B6F, 0x8139, 0x8F30, 0x8F30,
+ 0x1230, 0x8139, 0x8F31, 0x8F31, 0x172E, 0x8139, 0x8F32, 0x8F32, 0x056A,
+ 0x8139, 0x8F33, 0x8F33, 0x0F6C, 0x8139, 0x8F34, 0x8F34, 0x14B6, 0x8139,
+ 0x8F35, 0x8F35, 0x0D43, 0x8139, 0x8F36, 0x8F36, 0x1774, 0x8139, 0x8F37,
+ 0x8F37, 0x0CF6, 0x8139, 0x8F38, 0x8F38, 0x1815, 0x8139, 0x8F39, 0x8F39,
+ 0x06FD, 0x8139, 0x9030, 0x9030, 0x082D, 0x8139, 0x9031, 0x9031, 0x08BE,
+ 0x8139, 0x9032, 0x9032, 0x06C4, 0x8139, 0x9033, 0x9033, 0x1813, 0x8139,
+ 0x9034, 0x9034, 0x073C, 0x8139, 0x9035, 0x9035, 0x1398, 0x8139, 0x9036,
+ 0x9036, 0x14AD, 0x8139, 0x9037, 0x9037, 0x14F6, 0x8139, 0x9038, 0x9038,
+ 0x0706, 0x8139, 0x9039, 0x9039, 0x1762, 0x8139, 0x9130, 0x9130, 0x15EE,
+ 0x8139, 0x9131, 0x9131, 0x15E0, 0x8139, 0x9132, 0x9132, 0x0F8F, 0x8139,
+ 0x9133, 0x9133, 0x06E5, 0x8139, 0x9134, 0x9134, 0x3292, 0x8139, 0x9135,
+ 0x9135, 0x0D6D, 0x8139, 0x9136, 0x9136, 0x11A6, 0x8139, 0x9137, 0x9137,
+ 0x1909, 0x8139, 0x9138, 0x9138, 0x0ED3, 0x8139, 0x9139, 0x9139, 0x05F6,
+ 0x8139, 0x9230, 0x9230, 0x08C0, 0x8139, 0x9231, 0x9231, 0x065A, 0x8139,
+ 0x9232, 0x9232, 0x0EED, 0x8139, 0x9233, 0x9233, 0x0CB0, 0x8139, 0x9234,
+ 0x9234, 0x10FE, 0x8139, 0x9235, 0x9235, 0x1105, 0x8139, 0x9236, 0x9236,
+ 0x0B21, 0x8139, 0x9237, 0x9237, 0x0C34, 0x8139, 0x9238, 0x9238, 0x11B8,
+ 0x8139, 0x9239, 0x9239, 0x0578, 0x8139, 0x9330, 0x9330, 0x19BD, 0x8139,
+ 0x9331, 0x9331, 0x0EF2, 0x8139, 0x9332, 0x9332, 0x0431, 0x8139, 0x9333,
+ 0x9333, 0x0AB0, 0x8139, 0x9334, 0x9334, 0x0D66, 0x8139, 0x9335, 0x9335,
+ 0x0C17, 0x8139, 0x9336, 0x9336, 0x0DA3, 0x8139, 0x9337, 0x9337, 0x0805,
+ 0x8139, 0x9338, 0x9338, 0x1203, 0x8139, 0x9339, 0x9339, 0x06B3, 0x8139,
+ 0x9430, 0x9430, 0x1269, 0x8139, 0x9431, 0x9431, 0x169D, 0x8139, 0x9432,
+ 0x9432, 0x0BCB, 0x8139, 0x9433, 0x9433, 0x0FE9, 0x8139, 0x9434, 0x9434,
+ 0x0B64, 0x8139, 0x9435, 0x9435, 0x0C89, 0x8139, 0x9436, 0x9436, 0x0FC9,
+ 0x8139, 0x9437, 0x9437, 0x10D6, 0x8139, 0x9438, 0x9438, 0x0728, 0x8139,
+ 0x9439, 0x9439, 0x0E90, 0x8139, 0x9530, 0x9530, 0x06C5, 0x8139, 0x9531,
+ 0x9531, 0x0D33, 0x8139, 0x9532, 0x9532, 0x10A8, 0x8139, 0x9533, 0x9533,
+ 0x0E42, 0x8139, 0x9534, 0x9534, 0x1BC6, 0x8139, 0x9535, 0x9535, 0x1B60,
+ 0x8139, 0x9536, 0x9536, 0x3EBF, 0x8139, 0x9537, 0x9537, 0x03E2, 0x8139,
+ 0x9538, 0x9538, 0x0BC3, 0x8139, 0x9539, 0x9539, 0x0AF8, 0x8139, 0x9630,
+ 0x9630, 0x0B22, 0x8139, 0x9631, 0x9631, 0x0AB1, 0x8139, 0x9632, 0x9632,
+ 0x0D4F, 0x8139, 0x9633, 0x9633, 0x0D46, 0x8139, 0x9634, 0x9634, 0x0D55,
+ 0x8139, 0x9635, 0x9635, 0x40CB, 0x8139, 0x9636, 0x9636, 0x0783, 0x8139,
+ 0x9637, 0x9637, 0x0FD1, 0x8139, 0x9638, 0x9638, 0x09EB, 0x8139, 0x9639,
+ 0x9639, 0x11F0, 0x8139, 0x9730, 0x9730, 0x0ADC, 0x8139, 0x9731, 0x9731,
+ 0x1CE7, 0x8139, 0x9732, 0x9732, 0x1C5E, 0x8139, 0x9733, 0x9733, 0x0EA9,
+ 0x8139, 0x9734, 0x9734, 0x101B, 0x8139, 0x9735, 0x9735, 0x10D5, 0x8139,
+ 0x9736, 0x9736, 0x09BA, 0x8139, 0x9737, 0x9737, 0x0637, 0x8139, 0x9738,
+ 0x9738, 0x1BCB, 0x8139, 0x9739, 0x9739, 0x0639, 0x8139, 0x9830, 0x9830,
+ 0x1A1E, 0x8139, 0x9831, 0x9831, 0x0CBD, 0x8139, 0x9832, 0x9832, 0x04E1,
+ 0x8139, 0x9833, 0x9833, 0x1231, 0x8139, 0x9834, 0x9834, 0x11C0, 0x8139,
+ 0x9835, 0x9835, 0x08F9, 0x8139, 0x9836, 0x9836, 0x0D19, 0x8139, 0x9837,
+ 0x9837, 0x1618, 0x8139, 0x9838, 0x9838, 0x11DA, 0x8139, 0x9839, 0x9839,
+ 0x1CDC, 0x8139, 0x9930, 0x9930, 0x0CE4, 0x8139, 0x9931, 0x9931, 0x45A2,
+ 0x8139, 0x9932, 0x9932, 0x1BF0, 0x8139, 0x9933, 0x9933, 0x050B, 0x8139,
+ 0x9934, 0x9934, 0x0FD3, 0x8139, 0x9935, 0x9935, 0x0F9B, 0x8139, 0x9936,
+ 0x9936, 0x1049, 0x8139, 0x9937, 0x9937, 0x49DC, 0x8139, 0x9938, 0x9938,
+ 0x1F96, 0x8139, 0x9939, 0x9939, 0x0898, 0x8139, 0x9A30, 0x9A30, 0x0FFD,
+ 0x8139, 0x9A31, 0x9A31, 0x0721, 0x8139, 0x9A32, 0x9A32, 0x05F8, 0x8139,
+ 0x9A33, 0x9A33, 0x1D15, 0x8139, 0x9A34, 0x9A34, 0x1D50, 0x8139, 0x9A35,
+ 0x9A35, 0x1E3B, 0x8139, 0x9A36, 0x9A36, 0x0505, 0x8139, 0x9A37, 0x9A37,
+ 0x123C, 0x8139, 0x9A38, 0x9A38, 0x1240, 0x8139, 0x9A39, 0x9A39, 0x0D26,
+ 0x8139, 0x9B30, 0x9B30, 0x1E7B, 0x8139, 0x9B31, 0x9B31, 0x0F8C, 0x8139,
+ 0x9B32, 0x9B32, 0x04E2, 0x8139, 0x9B33, 0x9B33, 0x4D13, 0x8139, 0x9B34,
+ 0x9B34, 0x105F, 0x8139, 0x9B35, 0x9B35, 0x10B4, 0x8139, 0x9B36, 0x9B36,
+ 0x4E18, 0x8139, 0x9B37, 0x9B37, 0x09DA, 0x8139, 0x9B38, 0x9B38, 0x08C1,
+ 0x8139, 0x9B39, 0x9B39, 0x1E75, 0x8139, 0x9C30, 0x9C30, 0x207D, 0x8139,
+ 0x9C31, 0x9C31, 0x06B2, 0x8139, 0x9C32, 0x9C32, 0x09EE, 0x8139, 0x9C33,
+ 0x9C33, 0x1D79, 0x8139, 0x9C34, 0x9C34, 0x10CF, 0x8139, 0x9C35, 0x9C35,
+ 0x50EA, 0x8139, 0x9C36, 0x9C36, 0x0664, 0x8139, 0x9C37, 0x9C37, 0x0AEB,
+ 0x8139, 0x9C38, 0x9C38, 0x06EA, 0x8139, 0x9C39, 0x9C39, 0x218D, 0x8139,
+ 0x9D30, 0x9D30, 0x08F1, 0x8139, 0x9D31, 0x9D31, 0x107B, 0x8139, 0x9D32,
+ 0x9D32, 0x2209, 0x8139, 0x9D33, 0x9D33, 0x1F00, 0x8139, 0x9D34, 0x9D34,
+ 0x1EF4, 0x8139, 0x9D35, 0x9D35, 0x0D4A, 0x8139, 0x9D36, 0x9D36, 0x0D6E,
+ 0x8139, 0x9D37, 0x9D37, 0x0F50, 0x8139, 0x9D38, 0x9D38, 0x206D, 0x8139,
+ 0x9D39, 0x9D39, 0x0720, 0x8139, 0x9E30, 0x9E30, 0x06DA, 0x8139, 0x9E31,
+ 0x9E31, 0x1DEC, 0x8139, 0x9E32, 0x9E32, 0x1ED0, 0x8139, 0x9E33, 0x9E33,
+ 0x139B, 0x8139, 0x9E34, 0x9E34, 0x1260, 0x8139, 0x9E35, 0x9E35, 0x0746,
+ 0x8139, 0x9E36, 0x9E36, 0x2239, 0x8139, 0x9E37, 0x9E37, 0x209C, 0x8139,
+ 0x9E38, 0x9E38, 0x2688, 0x8139, 0x9E39, 0x9E39, 0x0A60, 0x8139, 0x9F30,
+ 0x9F30, 0x2071, 0x8139, 0x9F31, 0x9F31, 0x0A90, 0x8139, 0x9F32, 0x9F32,
+ 0x5586, 0x8139, 0x9F33, 0x9F33, 0x0D89, 0x8139, 0x9F34, 0x9F34, 0x0791,
+ 0x8139, 0x9F35, 0x9F35, 0x1A55, 0x8139, 0x9F36, 0x9F36, 0x2618, 0x8139,
+ 0x9F37, 0x9F37, 0x05E5, 0x8139, 0x9F38, 0x9F38, 0x071D, 0x8139, 0x9F39,
+ 0x9F39, 0x0D8A, 0x8139, 0xA030, 0xA030, 0x0430, 0x8139, 0xA031, 0xA031,
+ 0x20C6, 0x8139, 0xA032, 0xA032, 0x1E86, 0x8139, 0xA033, 0xA033, 0x2037,
+ 0x8139, 0xA034, 0xA034, 0x1F34, 0x8139, 0xA035, 0xA035, 0x12F3, 0x8139,
+ 0xA533, 0xA535, 0x577B, 0x8139, 0xA538, 0xA539, 0x577E, 0x8139, 0xA630,
+ 0xA630, 0x5780, 0x8139, 0xA634, 0xA634, 0x5755, 0x8139, 0xA636, 0xA636,
+ 0x5767, 0x8139, 0xA735, 0xA735, 0x5776, 0x8139, 0xA736, 0xA736, 0x5778,
+ 0x8139, 0xA737, 0xA737, 0x5777, 0x8139, 0xA738, 0xA738, 0x5779, 0x8139,
+ 0xA836, 0xA838, 0x5781, 0x8139, 0xB434, 0xB439, 0x5784, 0x8139, 0xB530,
+ 0xB539, 0x578A, 0x8139, 0xB630, 0xB637, 0x5794, 0x8139, 0xEE39, 0xEE39,
+ 0x5801, 0x8139, 0xEF30, 0xEF39, 0x5802, 0x8139, 0xF030, 0xF039, 0x580C,
+ 0x8139, 0xF130, 0xF139, 0x5816, 0x8139, 0xF230, 0xF239, 0x5820, 0x8139,
+ 0xF330, 0xF339, 0x582A, 0x8139, 0xF430, 0xF439, 0x5834, 0x8139, 0xF530,
+ 0xF539, 0x583E, 0x8139, 0xF630, 0xF639, 0x5848, 0x8139, 0xF730, 0xF739,
+ 0x5852, 0x8139, 0xF830, 0xF839, 0x585C, 0x8139, 0xF930, 0xF939, 0x5866,
+ 0x8139, 0xFA30, 0xFA39, 0x5870, 0x8139, 0xFB30, 0xFB39, 0x587A, 0x8139,
+ 0xFC30, 0xFC39, 0x5884, 0x8139, 0xFD30, 0xFD39, 0x588E, 0x8139, 0xFE30,
+ 0xFE39, 0x5898, 0x8230, 0x8130, 0x8139, 0x58A2, 0x8230, 0x8230, 0x8239,
+ 0x58AC, 0x8230, 0x8330, 0x8339, 0x58B6, 0x8230, 0x8430, 0x8439, 0x58C0,
+ 0x8230, 0x8530, 0x8539, 0x58CA, 0x8230, 0x8630, 0x8639, 0x58D4, 0x8230,
+ 0x8730, 0x8739, 0x58DE, 0x8230, 0x8830, 0x8839, 0x58E8, 0x8230, 0x8930,
+ 0x8939, 0x58F2, 0x8230, 0x8A30, 0x8A39, 0x58FC, 0x8230, 0x8B30, 0x8B39,
+ 0x5906, 0x8230, 0x8C30, 0x8C39, 0x5910, 0x8230, 0x8D30, 0x8D39, 0x591A,
+ 0x8230, 0x8E30, 0x8E39, 0x5924, 0x8230, 0x8F30, 0x8F39, 0x592E, 0x8230,
+ 0x9030, 0x9039, 0x5938, 0x8230, 0x9130, 0x9139, 0x5942, 0x8230, 0x9230,
+ 0x9239, 0x594C, 0x8230, 0x9330, 0x9339, 0x5956, 0x8230, 0x9430, 0x9439,
+ 0x5960, 0x8230, 0x9530, 0x9539, 0x596A, 0x8230, 0x9630, 0x9639, 0x5974,
+ 0x8230, 0x9730, 0x9739, 0x597E, 0x8230, 0x9830, 0x9839, 0x5988, 0x8230,
+ 0x9930, 0x9939, 0x5992, 0x8230, 0x9A30, 0x9A39, 0x599C, 0x8230, 0x9B30,
+ 0x9B39, 0x59A6, 0x8230, 0x9C30, 0x9C39, 0x59B0, 0x8230, 0x9D30, 0x9D39,
+ 0x59BA, 0x8230, 0x9E30, 0x9E39, 0x59C4, 0x8230, 0x9F30, 0x9F39, 0x59CE,
+ 0x8230, 0xA030, 0xA039, 0x59D8, 0x8230, 0xA130, 0xA139, 0x59E2, 0x8230,
+ 0xA230, 0xA239, 0x59EC, 0x8230, 0xA330, 0xA339, 0x59F6, 0x8230, 0xA430,
+ 0xA439, 0x5A00, 0x8230, 0xA530, 0xA539, 0x5A0A, 0x8230, 0xA630, 0xA639,
+ 0x5A14, 0x8230, 0xA730, 0xA739, 0x5A1E, 0x8230, 0xA830, 0xA839, 0x5A28,
+ 0x8230, 0xA930, 0xA939, 0x5A32, 0x8230, 0xAA30, 0xAA39, 0x5A3C, 0x8230,
+ 0xAB30, 0xAB39, 0x5A46, 0x8230, 0xAC30, 0xAC39, 0x5A50, 0x8230, 0xAD30,
+ 0xAD39, 0x5A5A, 0x8230, 0xAE30, 0xAE39, 0x5A64, 0x8230, 0xAF30, 0xAF39,
+ 0x5A6E, 0x8230, 0xB030, 0xB039, 0x5A78, 0x8230, 0xB130, 0xB139, 0x5A82,
+ 0x8230, 0xB230, 0xB239, 0x5A8C, 0x8230, 0xB330, 0xB339, 0x5A96, 0x8230,
+ 0xB430, 0xB439, 0x5AA0, 0x8230, 0xB530, 0xB539, 0x5AAA, 0x8230, 0xB630,
+ 0xB639, 0x5AB4, 0x8230, 0xB730, 0xB739, 0x5ABE, 0x8230, 0xB830, 0xB839,
+ 0x5AC8, 0x8230, 0xB930, 0xB939, 0x5AD2, 0x8230, 0xBA30, 0xBA39, 0x5ADC,
+ 0x8230, 0xBB30, 0xBB39, 0x5AE6, 0x8230, 0xBC30, 0xBC39, 0x5AF0, 0x8230,
+ 0xBD30, 0xBD39, 0x5AFA, 0x8230, 0xBE30, 0xBE39, 0x5B04, 0x8230, 0xBF30,
+ 0xBF39, 0x5B0E, 0x8230, 0xC030, 0xC039, 0x5B18, 0x8230, 0xC130, 0xC139,
+ 0x5B22, 0x8230, 0xC230, 0xC239, 0x5B2C, 0x8230, 0xC330, 0xC339, 0x5B36,
+ 0x8230, 0xC430, 0xC439, 0x5B40, 0x8230, 0xC530, 0xC539, 0x5B4A, 0x8230,
+ 0xC630, 0xC639, 0x5B54, 0x8230, 0xC730, 0xC739, 0x5B5E, 0x8230, 0xC830,
+ 0xC839, 0x5B68, 0x8230, 0xC930, 0xC939, 0x5B72, 0x8230, 0xCA30, 0xCA39,
+ 0x5B7C, 0x8230, 0xCB30, 0xCB39, 0x5B86, 0x8230, 0xCC30, 0xCC39, 0x5B90,
+ 0x8230, 0xCD30, 0xCD39, 0x5B9A, 0x8230, 0xCE30, 0xCE39, 0x5BA4, 0x8230,
+ 0xCF30, 0xCF39, 0x5BAE, 0x8230, 0xD030, 0xD039, 0x5BB8, 0x8230, 0xD130,
+ 0xD139, 0x5BC2, 0x8230, 0xD230, 0xD239, 0x5BCC, 0x8230, 0xD330, 0xD339,
+ 0x5BD6, 0x8230, 0xD430, 0xD439, 0x5BE0, 0x8230, 0xD530, 0xD539, 0x5BEA,
+ 0x8230, 0xD630, 0xD639, 0x5BF4, 0x8230, 0xD730, 0xD739, 0x5BFE, 0x8230,
+ 0xD830, 0xD839, 0x5C08, 0x8230, 0xD930, 0xD939, 0x5C12, 0x8230, 0xDA30,
+ 0xDA39, 0x5C1C, 0x8230, 0xDB30, 0xDB39, 0x5C26, 0x8230, 0xDC30, 0xDC39,
+ 0x5C30, 0x8230, 0xDD30, 0xDD39, 0x5C3A, 0x8230, 0xDE30, 0xDE39, 0x5C44,
+ 0x8230, 0xDF30, 0xDF39, 0x5C4E, 0x8230, 0xE030, 0xE039, 0x5C58, 0x8230,
+ 0xE130, 0xE139, 0x5C62, 0x8230, 0xE230, 0xE239, 0x5C6C, 0x8230, 0xE330,
+ 0xE339, 0x5C76, 0x8230, 0xE430, 0xE439, 0x5C80, 0x8230, 0xE530, 0xE539,
+ 0x5C8A, 0x8230, 0xE630, 0xE639, 0x5C94, 0x8230, 0xE730, 0xE739, 0x5C9E,
+ 0x8230, 0xE830, 0xE839, 0x5CA8, 0x8230, 0xE930, 0xE939, 0x5CB2, 0x8230,
+ 0xEA30, 0xEA39, 0x5CBC, 0x8230, 0xEB30, 0xEB39, 0x5CC6, 0x8230, 0xEC30,
+ 0xEC39, 0x5CD0, 0x8230, 0xED30, 0xED39, 0x5CDA, 0x8230, 0xEE30, 0xEE39,
+ 0x5CE4, 0x8230, 0xEF30, 0xEF39, 0x5CEE, 0x8230, 0xF030, 0xF039, 0x5CF8,
+ 0x8230, 0xF130, 0xF139, 0x5D02, 0x8230, 0xF230, 0xF239, 0x5D0C, 0x8230,
+ 0xF330, 0xF339, 0x5D16, 0x8230, 0xF430, 0xF439, 0x5D20, 0x8230, 0xF530,
+ 0xF539, 0x5D2A, 0x8230, 0xF630, 0xF639, 0x5D34, 0x8230, 0xF730, 0xF739,
+ 0x5D3E, 0x8230, 0xF830, 0xF839, 0x5D48, 0x8230, 0xF930, 0xF939, 0x5D52,
+ 0x8230, 0xFA30, 0xFA39, 0x5D5C, 0x8230, 0xFB30, 0xFB39, 0x5D66, 0x8230,
+ 0xFC30, 0xFC39, 0x5D70, 0x8230, 0xFD30, 0xFD39, 0x5D7A, 0x8230, 0xFE30,
+ 0xFE39, 0x5D84, 0x8231, 0x8130, 0x8139, 0x5D8E, 0x8231, 0x8230, 0x8239,
+ 0x5D98, 0x8231, 0x8330, 0x8339, 0x5DA2, 0x8231, 0x8430, 0x8439, 0x5DAC,
+ 0x8231, 0x8530, 0x8539, 0x5DB6, 0x8231, 0x8630, 0x8639, 0x5DC0, 0x8231,
+ 0x8730, 0x8739, 0x5DCA, 0x8231, 0x8830, 0x8839, 0x5DD4, 0x8231, 0x8930,
+ 0x8939, 0x5DDE, 0x8231, 0x8A30, 0x8A39, 0x5DE8, 0x8231, 0x8B30, 0x8B39,
+ 0x5DF2, 0x8231, 0x8C30, 0x8C39, 0x5DFC, 0x8231, 0x8D30, 0x8D39, 0x5E06,
+ 0x8231, 0x8E30, 0x8E39, 0x5E10, 0x8231, 0x8F30, 0x8F39, 0x5E1A, 0x8231,
+ 0x9030, 0x9039, 0x5E24, 0x8231, 0x9130, 0x9139, 0x5E2E, 0x8231, 0x9230,
+ 0x9239, 0x5E38, 0x8231, 0x9330, 0x9339, 0x5E42, 0x8231, 0x9430, 0x9439,
+ 0x5E4C, 0x8231, 0x9530, 0x9539, 0x5E56, 0x8231, 0x9630, 0x9639, 0x5E60,
+ 0x8231, 0x9730, 0x9739, 0x5E6A, 0x8231, 0x9830, 0x9839, 0x5E74, 0x8231,
+ 0x9930, 0x9939, 0x5E7E, 0x8231, 0x9A30, 0x9A39, 0x5E88, 0x8231, 0x9B30,
+ 0x9B39, 0x5E92, 0x8231, 0x9C30, 0x9C39, 0x5E9C, 0x8231, 0x9D30, 0x9D39,
+ 0x5EA6, 0x8231, 0x9E30, 0x9E39, 0x5EB0, 0x8231, 0x9F30, 0x9F39, 0x5EBA,
+ 0x8231, 0xA030, 0xA039, 0x5EC4, 0x8231, 0xA130, 0xA139, 0x5ECE, 0x8231,
+ 0xA230, 0xA239, 0x5ED8, 0x8231, 0xA330, 0xA339, 0x5EE2, 0x8231, 0xA430,
+ 0xA439, 0x5EEC, 0x8231, 0xA530, 0xA539, 0x5EF6, 0x8231, 0xA630, 0xA639,
+ 0x5F00, 0x8231, 0xA730, 0xA739, 0x5F0A, 0x8231, 0xA830, 0xA839, 0x5F14,
+ 0x8231, 0xA930, 0xA939, 0x5F1E, 0x8231, 0xAA30, 0xAA39, 0x5F28, 0x8231,
+ 0xAB30, 0xAB39, 0x5F32, 0x8231, 0xAC30, 0xAC39, 0x5F3C, 0x8231, 0xAD30,
+ 0xAD39, 0x5F46, 0x8231, 0xAE30, 0xAE39, 0x5F50, 0x8231, 0xAF30, 0xAF39,
+ 0x5F5A, 0x8231, 0xB030, 0xB039, 0x5F64, 0x8231, 0xB130, 0xB139, 0x5F6E,
+ 0x8231, 0xB230, 0xB239, 0x5F78, 0x8231, 0xB330, 0xB339, 0x5F82, 0x8231,
+ 0xB430, 0xB439, 0x5F8C, 0x8231, 0xB530, 0xB539, 0x5F96, 0x8231, 0xB630,
+ 0xB639, 0x5FA0, 0x8231, 0xB730, 0xB739, 0x5FAA, 0x8231, 0xB830, 0xB839,
+ 0x5FB4, 0x8231, 0xB930, 0xB939, 0x5FBE, 0x8231, 0xBA30, 0xBA39, 0x5FC8,
+ 0x8231, 0xBB30, 0xBB39, 0x5FD2, 0x8231, 0xBC30, 0xBC39, 0x5FDC, 0x8231,
+ 0xBD30, 0xBD39, 0x5FE6, 0x8231, 0xBE30, 0xBE39, 0x5FF0, 0x8231, 0xBF30,
+ 0xBF39, 0x5FFA, 0x8231, 0xC030, 0xC039, 0x6004, 0x8231, 0xC130, 0xC139,
+ 0x600E, 0x8231, 0xC230, 0xC239, 0x6018, 0x8231, 0xC330, 0xC339, 0x6022,
+ 0x8231, 0xC430, 0xC439, 0x602C, 0x8231, 0xC530, 0xC539, 0x6036, 0x8231,
+ 0xC630, 0xC639, 0x6040, 0x8231, 0xC730, 0xC739, 0x604A, 0x8231, 0xC830,
+ 0xC839, 0x6054, 0x8231, 0xC930, 0xC939, 0x605E, 0x8231, 0xCA30, 0xCA39,
+ 0x6068, 0x8231, 0xCB30, 0xCB39, 0x6072, 0x8231, 0xCC30, 0xCC39, 0x607C,
+ 0x8231, 0xCD30, 0xCD39, 0x6086, 0x8231, 0xCE30, 0xCE39, 0x6090, 0x8231,
+ 0xCF30, 0xCF39, 0x609A, 0x8231, 0xD030, 0xD039, 0x60A4, 0x8231, 0xD130,
+ 0xD139, 0x60AE, 0x8231, 0xD230, 0xD239, 0x60B8, 0x8231, 0xD330, 0xD339,
+ 0x60C2, 0x8231, 0xD430, 0xD439, 0x60CC, 0x8231, 0xD530, 0xD539, 0x60D6,
+ 0x8231, 0xD630, 0xD639, 0x60E0, 0x8231, 0xD730, 0xD739, 0x60EA, 0x8231,
+ 0xD830, 0xD839, 0x60F4, 0x8231, 0xD930, 0xD939, 0x60FE, 0x8231, 0xDA30,
+ 0xDA39, 0x6108, 0x8231, 0xDB30, 0xDB39, 0x6112, 0x8231, 0xDC30, 0xDC39,
+ 0x611C, 0x8231, 0xDD30, 0xDD39, 0x6126, 0x8231, 0xDE30, 0xDE39, 0x6130,
+ 0x8231, 0xDF30, 0xDF39, 0x613A, 0x8231, 0xE030, 0xE039, 0x6144, 0x8231,
+ 0xE130, 0xE139, 0x614E, 0x8231, 0xE230, 0xE239, 0x6158, 0x8231, 0xE330,
+ 0xE339, 0x6162, 0x8231, 0xE430, 0xE439, 0x616C, 0x8231, 0xE530, 0xE539,
+ 0x6176, 0x8231, 0xE630, 0xE639, 0x6180, 0x8231, 0xE730, 0xE739, 0x618A,
+ 0x8231, 0xE830, 0xE839, 0x6194, 0x8231, 0xE930, 0xE939, 0x619E, 0x8231,
+ 0xEA30, 0xEA39, 0x61A8, 0x8231, 0xEB30, 0xEB39, 0x61B2, 0x8231, 0xEC30,
+ 0xEC39, 0x61BC, 0x8231, 0xED30, 0xED39, 0x61C6, 0x8231, 0xEE30, 0xEE39,
+ 0x61D0, 0x8231, 0xEF30, 0xEF39, 0x61DA, 0x8231, 0xF030, 0xF039, 0x61E4,
+ 0x8231, 0xF130, 0xF139, 0x61EE, 0x8231, 0xF230, 0xF239, 0x61F8, 0x8231,
+ 0xF330, 0xF339, 0x6202, 0x8231, 0xF430, 0xF439, 0x620C, 0x8231, 0xF530,
+ 0xF539, 0x6216, 0x8231, 0xF630, 0xF639, 0x6220, 0x8231, 0xF730, 0xF739,
+ 0x622A, 0x8231, 0xF830, 0xF839, 0x6234, 0x8231, 0xF930, 0xF939, 0x623E,
+ 0x8231, 0xFA30, 0xFA39, 0x6248, 0x8231, 0xFB30, 0xFB39, 0x6252, 0x8231,
+ 0xFC30, 0xFC39, 0x625C, 0x8231, 0xFD30, 0xFD39, 0x6266, 0x8231, 0xFE30,
+ 0xFE39, 0x6270, 0x8232, 0x8130, 0x8139, 0x627A, 0x8232, 0x8230, 0x8239,
+ 0x6284, 0x8232, 0x8330, 0x8339, 0x628E, 0x8232, 0x8430, 0x8439, 0x6298,
+ 0x8232, 0x8530, 0x8539, 0x62A2, 0x8232, 0x8630, 0x8639, 0x62AC, 0x8232,
+ 0x8730, 0x8739, 0x62B6, 0x8232, 0x8830, 0x8839, 0x62C0, 0x8232, 0x8930,
+ 0x8939, 0x62CA, 0x8232, 0x8A30, 0x8A39, 0x62D4, 0x8232, 0x8B30, 0x8B39,
+ 0x62DE, 0x8232, 0x8C30, 0x8C39, 0x62E8, 0x8232, 0x8D30, 0x8D39, 0x62F2,
+ 0x8232, 0x8E30, 0x8E39, 0x62FC, 0x8232, 0x8F30, 0x8F39, 0x6306, 0x8232,
+ 0x9030, 0x9039, 0x6310, 0x8232, 0x9130, 0x9139, 0x631A, 0x8232, 0x9230,
+ 0x9239, 0x6324, 0x8232, 0x9330, 0x9339, 0x632E, 0x8232, 0x9430, 0x9439,
+ 0x6338, 0x8232, 0x9530, 0x9539, 0x6342, 0x8232, 0x9630, 0x9639, 0x634C,
+ 0x8232, 0x9730, 0x9739, 0x6356, 0x8232, 0x9830, 0x9839, 0x6360, 0x8232,
+ 0x9930, 0x9939, 0x636A, 0x8232, 0x9A30, 0x9A39, 0x6374, 0x8232, 0x9B30,
+ 0x9B39, 0x637E, 0x8232, 0x9C30, 0x9C39, 0x6388, 0x8232, 0x9D30, 0x9D39,
+ 0x6392, 0x8232, 0x9E30, 0x9E39, 0x639C, 0x8232, 0x9F30, 0x9F39, 0x63A6,
+ 0x8232, 0xA030, 0xA039, 0x63B0, 0x8232, 0xA130, 0xA139, 0x63BA, 0x8232,
+ 0xA230, 0xA239, 0x63C4, 0x8232, 0xA330, 0xA339, 0x63CE, 0x8232, 0xA430,
+ 0xA439, 0x63D8, 0x8232, 0xA530, 0xA539, 0x63E2, 0x8232, 0xA630, 0xA639,
+ 0x63EC, 0x8232, 0xA730, 0xA739, 0x63F6, 0x8232, 0xA830, 0xA839, 0x6400,
+ 0x8232, 0xA930, 0xA939, 0x640A, 0x8232, 0xAA30, 0xAA39, 0x6414, 0x8232,
+ 0xAB30, 0xAB39, 0x641E, 0x8232, 0xAC30, 0xAC39, 0x6428, 0x8232, 0xAD30,
+ 0xAD39, 0x6432, 0x8232, 0xAE30, 0xAE39, 0x643C, 0x8232, 0xAF30, 0xAF39,
+ 0x6446, 0x8232, 0xB030, 0xB039, 0x6450, 0x8232, 0xB130, 0xB139, 0x645A,
+ 0x8232, 0xB230, 0xB239, 0x6464, 0x8232, 0xB330, 0xB339, 0x646E, 0x8232,
+ 0xB430, 0xB439, 0x6478, 0x8232, 0xB530, 0xB539, 0x6482, 0x8232, 0xB630,
+ 0xB639, 0x648C, 0x8232, 0xB730, 0xB739, 0x6496, 0x8232, 0xB830, 0xB839,
+ 0x64A0, 0x8232, 0xB930, 0xB939, 0x64AA, 0x8232, 0xBA30, 0xBA39, 0x64B4,
+ 0x8232, 0xBB30, 0xBB39, 0x64BE, 0x8232, 0xBC30, 0xBC39, 0x64C8, 0x8232,
+ 0xBD30, 0xBD39, 0x64D2, 0x8232, 0xBE30, 0xBE39, 0x64DC, 0x8232, 0xBF30,
+ 0xBF39, 0x64E6, 0x8232, 0xC030, 0xC039, 0x64F0, 0x8232, 0xC130, 0xC139,
+ 0x64FA, 0x8232, 0xC230, 0xC239, 0x6504, 0x8232, 0xC330, 0xC339, 0x650E,
+ 0x8232, 0xC430, 0xC439, 0x6518, 0x8232, 0xC530, 0xC539, 0x6522, 0x8232,
+ 0xC630, 0xC639, 0x652C, 0x8232, 0xC730, 0xC739, 0x6536, 0x8232, 0xC830,
+ 0xC839, 0x6540, 0x8232, 0xC930, 0xC939, 0x654A, 0x8232, 0xCA30, 0xCA39,
+ 0x6554, 0x8232, 0xCB30, 0xCB39, 0x655E, 0x8232, 0xCC30, 0xCC39, 0x6568,
+ 0x8232, 0xCD30, 0xCD39, 0x6572, 0x8232, 0xCE30, 0xCE39, 0x657C, 0x8232,
+ 0xCF30, 0xCF39, 0x6586, 0x8232, 0xD030, 0xD039, 0x6590, 0x8232, 0xD130,
+ 0xD139, 0x659A, 0x8232, 0xD230, 0xD239, 0x65A4, 0x8232, 0xD330, 0xD339,
+ 0x65AE, 0x8232, 0xD430, 0xD439, 0x65B8, 0x8232, 0xD530, 0xD539, 0x65C2,
+ 0x8232, 0xD630, 0xD639, 0x65CC, 0x8232, 0xD730, 0xD739, 0x65D6, 0x8232,
+ 0xD830, 0xD839, 0x65E0, 0x8232, 0xD930, 0xD939, 0x65EA, 0x8232, 0xDA30,
+ 0xDA39, 0x65F4, 0x8232, 0xDB30, 0xDB39, 0x65FE, 0x8232, 0xDC30, 0xDC39,
+ 0x6608, 0x8232, 0xDD30, 0xDD39, 0x6612, 0x8232, 0xDE30, 0xDE39, 0x661C,
+ 0x8232, 0xDF30, 0xDF39, 0x6626, 0x8232, 0xE030, 0xE039, 0x6630, 0x8232,
+ 0xE130, 0xE139, 0x663A, 0x8232, 0xE230, 0xE239, 0x6644, 0x8232, 0xE330,
+ 0xE339, 0x664E, 0x8232, 0xE430, 0xE439, 0x6658, 0x8232, 0xE530, 0xE539,
+ 0x6662, 0x8232, 0xE630, 0xE639, 0x666C, 0x8232, 0xE730, 0xE739, 0x6676,
+ 0x8232, 0xE830, 0xE839, 0x6680, 0x8232, 0xE930, 0xE939, 0x668A, 0x8232,
+ 0xEA30, 0xEA39, 0x6694, 0x8232, 0xEB30, 0xEB39, 0x669E, 0x8232, 0xEC30,
+ 0xEC39, 0x66A8, 0x8232, 0xED30, 0xED39, 0x66B2, 0x8232, 0xEE30, 0xEE39,
+ 0x66BC, 0x8232, 0xEF30, 0xEF39, 0x66C6, 0x8232, 0xF030, 0xF039, 0x66D0,
+ 0x8232, 0xF130, 0xF139, 0x66DA, 0x8232, 0xF230, 0xF239, 0x66E4, 0x8232,
+ 0xF330, 0xF339, 0x66EE, 0x8232, 0xF430, 0xF439, 0x66F8, 0x8232, 0xF530,
+ 0xF539, 0x6702, 0x8232, 0xF630, 0xF639, 0x670C, 0x8232, 0xF730, 0xF739,
+ 0x6716, 0x8232, 0xF830, 0xF839, 0x6720, 0x8232, 0xF930, 0xF939, 0x672A,
+ 0x8232, 0xFA30, 0xFA39, 0x6734, 0x8232, 0xFB30, 0xFB39, 0x673E, 0x8232,
+ 0xFC30, 0xFC39, 0x6748, 0x8232, 0xFD30, 0xFD39, 0x6752, 0x8232, 0xFE30,
+ 0xFE39, 0x675C, 0x8233, 0x8130, 0x8139, 0x6766, 0x8233, 0x8230, 0x8239,
+ 0x6770, 0x8233, 0x8330, 0x8339, 0x677A, 0x8233, 0x8430, 0x8439, 0x6784,
+ 0x8233, 0x8530, 0x8539, 0x678E, 0x8233, 0x8630, 0x8639, 0x6798, 0x8233,
+ 0x8730, 0x8739, 0x67A2, 0x8233, 0x8830, 0x8839, 0x67AC, 0x8233, 0x8930,
+ 0x8939, 0x67B6, 0x8233, 0x8A30, 0x8A39, 0x67C0, 0x8233, 0x8B30, 0x8B39,
+ 0x67CA, 0x8233, 0x8C30, 0x8C39, 0x67D4, 0x8233, 0x8D30, 0x8D39, 0x67DE,
+ 0x8233, 0x8E30, 0x8E39, 0x67E8, 0x8233, 0x8F30, 0x8F39, 0x67F2, 0x8233,
+ 0x9030, 0x9039, 0x67FC, 0x8233, 0x9130, 0x9139, 0x6806, 0x8233, 0x9230,
+ 0x9239, 0x6810, 0x8233, 0x9330, 0x9339, 0x681A, 0x8233, 0x9430, 0x9439,
+ 0x6824, 0x8233, 0x9530, 0x9539, 0x682E, 0x8233, 0x9630, 0x9639, 0x6838,
+ 0x8233, 0x9730, 0x9739, 0x6842, 0x8233, 0x9830, 0x9839, 0x684C, 0x8233,
+ 0x9930, 0x9939, 0x6856, 0x8233, 0x9A30, 0x9A39, 0x6860, 0x8233, 0x9B30,
+ 0x9B39, 0x686A, 0x8233, 0x9C30, 0x9C39, 0x6874, 0x8233, 0x9D30, 0x9D39,
+ 0x687E, 0x8233, 0x9E30, 0x9E39, 0x6888, 0x8233, 0x9F30, 0x9F39, 0x6892,
+ 0x8233, 0xA030, 0xA039, 0x689C, 0x8233, 0xA130, 0xA139, 0x68A6, 0x8233,
+ 0xA230, 0xA239, 0x68B0, 0x8233, 0xA330, 0xA339, 0x68BA, 0x8233, 0xA430,
+ 0xA439, 0x68C4, 0x8233, 0xA530, 0xA539, 0x68CE, 0x8233, 0xA630, 0xA639,
+ 0x68D8, 0x8233, 0xA730, 0xA739, 0x68E2, 0x8233, 0xA830, 0xA839, 0x68EC,
+ 0x8233, 0xA930, 0xA939, 0x68F6, 0x8233, 0xAA30, 0xAA39, 0x6900, 0x8233,
+ 0xAB30, 0xAB39, 0x690A, 0x8233, 0xAC30, 0xAC39, 0x6914, 0x8233, 0xAD30,
+ 0xAD39, 0x691E, 0x8233, 0xAE30, 0xAE39, 0x6928, 0x8233, 0xAF30, 0xAF39,
+ 0x6932, 0x8233, 0xB030, 0xB039, 0x693C, 0x8233, 0xB130, 0xB139, 0x6946,
+ 0x8233, 0xB230, 0xB239, 0x6950, 0x8233, 0xB330, 0xB339, 0x695A, 0x8233,
+ 0xB430, 0xB439, 0x6964, 0x8233, 0xB530, 0xB539, 0x696E, 0x8233, 0xB630,
+ 0xB639, 0x6978, 0x8233, 0xB730, 0xB739, 0x6982, 0x8233, 0xB830, 0xB839,
+ 0x698C, 0x8233, 0xB930, 0xB939, 0x6996, 0x8233, 0xBA30, 0xBA39, 0x69A0,
+ 0x8233, 0xBB30, 0xBB39, 0x69AA, 0x8233, 0xBC30, 0xBC39, 0x69B4, 0x8233,
+ 0xBD30, 0xBD39, 0x69BE, 0x8233, 0xBE30, 0xBE39, 0x69C8, 0x8233, 0xBF30,
+ 0xBF39, 0x69D2, 0x8233, 0xC030, 0xC039, 0x69DC, 0x8233, 0xC130, 0xC139,
+ 0x69E6, 0x8233, 0xC230, 0xC239, 0x69F0, 0x8233, 0xC330, 0xC339, 0x69FA,
+ 0x8233, 0xC430, 0xC439, 0x6A04, 0x8233, 0xC530, 0xC539, 0x6A0E, 0x8233,
+ 0xC630, 0xC639, 0x6A18, 0x8233, 0xC730, 0xC739, 0x6A22, 0x8233, 0xC830,
+ 0xC839, 0x6A2C, 0x8233, 0xC930, 0xC939, 0x6A36, 0x8233, 0xCA30, 0xCA39,
+ 0x6A40, 0x8233, 0xCB30, 0xCB39, 0x6A4A, 0x8233, 0xCC30, 0xCC39, 0x6A54,
+ 0x8233, 0xCD30, 0xCD39, 0x6A5E, 0x8233, 0xCE30, 0xCE39, 0x6A68, 0x8233,
+ 0xCF30, 0xCF39, 0x6A72, 0x8233, 0xD030, 0xD039, 0x6A7C, 0x8233, 0xD130,
+ 0xD139, 0x6A86, 0x8233, 0xD230, 0xD239, 0x6A90, 0x8233, 0xD330, 0xD339,
+ 0x6A9A, 0x8233, 0xD430, 0xD439, 0x6AA4, 0x8233, 0xD530, 0xD539, 0x6AAE,
+ 0x8233, 0xD630, 0xD639, 0x6AB8, 0x8233, 0xD730, 0xD739, 0x6AC2, 0x8233,
+ 0xD830, 0xD839, 0x6ACC, 0x8233, 0xD930, 0xD939, 0x6AD6, 0x8233, 0xDA30,
+ 0xDA39, 0x6AE0, 0x8233, 0xDB30, 0xDB39, 0x6AEA, 0x8233, 0xDC30, 0xDC39,
+ 0x6AF4, 0x8233, 0xDD30, 0xDD39, 0x6AFE, 0x8233, 0xDE30, 0xDE39, 0x6B08,
+ 0x8233, 0xDF30, 0xDF39, 0x6B12, 0x8233, 0xE030, 0xE039, 0x6B1C, 0x8233,
+ 0xE130, 0xE139, 0x6B26, 0x8233, 0xE230, 0xE239, 0x6B30, 0x8233, 0xE330,
+ 0xE339, 0x6B3A, 0x8233, 0xE430, 0xE439, 0x6B44, 0x8233, 0xE530, 0xE539,
+ 0x6B4E, 0x8233, 0xE630, 0xE639, 0x6B58, 0x8233, 0xE730, 0xE739, 0x6B62,
+ 0x8233, 0xE830, 0xE839, 0x6B6C, 0x8233, 0xE930, 0xE939, 0x6B76, 0x8233,
+ 0xEA30, 0xEA39, 0x6B80, 0x8233, 0xEB30, 0xEB39, 0x6B8A, 0x8233, 0xEC30,
+ 0xEC39, 0x6B94, 0x8233, 0xED30, 0xED39, 0x6B9E, 0x8233, 0xEE30, 0xEE39,
+ 0x6BA8, 0x8233, 0xEF30, 0xEF39, 0x6BB2, 0x8233, 0xF030, 0xF039, 0x6BBC,
+ 0x8233, 0xF130, 0xF139, 0x6BC6, 0x8233, 0xF230, 0xF239, 0x6BD0, 0x8233,
+ 0xF330, 0xF339, 0x6BDA, 0x8233, 0xF430, 0xF439, 0x6BE4, 0x8233, 0xF530,
+ 0xF539, 0x6BEE, 0x8233, 0xF630, 0xF639, 0x6BF8, 0x8233, 0xF730, 0xF739,
+ 0x6C02, 0x8233, 0xF830, 0xF839, 0x6C0C, 0x8233, 0xF930, 0xF939, 0x6C16,
+ 0x8233, 0xFA30, 0xFA39, 0x6C20, 0x8233, 0xFB30, 0xFB39, 0x6C2A, 0x8233,
+ 0xFC30, 0xFC39, 0x6C34, 0x8233, 0xFD30, 0xFD39, 0x6C3E, 0x8233, 0xFE30,
+ 0xFE39, 0x6C48, 0x8234, 0x8130, 0x8139, 0x6C52, 0x8234, 0x8230, 0x8239,
+ 0x6C5C, 0x8234, 0x8330, 0x8339, 0x6C66, 0x8234, 0x8430, 0x8439, 0x6C70,
+ 0x8234, 0x8530, 0x8539, 0x6C7A, 0x8234, 0x8630, 0x8639, 0x6C84, 0x8234,
+ 0x8730, 0x8739, 0x6C8E, 0x8234, 0x8830, 0x8839, 0x6C98, 0x8234, 0x8930,
+ 0x8939, 0x6CA2, 0x8234, 0x8A30, 0x8A39, 0x6CAC, 0x8234, 0x8B30, 0x8B39,
+ 0x6CB6, 0x8234, 0x8C30, 0x8C39, 0x6CC0, 0x8234, 0x8D30, 0x8D39, 0x6CCA,
+ 0x8234, 0x8E30, 0x8E39, 0x6CD4, 0x8234, 0x8F30, 0x8F39, 0x6CDE, 0x8234,
+ 0x9030, 0x9039, 0x6CE8, 0x8234, 0x9130, 0x9139, 0x6CF2, 0x8234, 0x9230,
+ 0x9239, 0x6CFC, 0x8234, 0x9330, 0x9339, 0x6D06, 0x8234, 0x9430, 0x9439,
+ 0x6D10, 0x8234, 0x9530, 0x9539, 0x6D1A, 0x8234, 0x9630, 0x9639, 0x6D24,
+ 0x8234, 0x9730, 0x9739, 0x6D2E, 0x8234, 0x9830, 0x9839, 0x6D38, 0x8234,
+ 0x9930, 0x9939, 0x6D42, 0x8234, 0x9A30, 0x9A39, 0x6D4C, 0x8234, 0x9B30,
+ 0x9B39, 0x6D56, 0x8234, 0x9C30, 0x9C39, 0x6D60, 0x8234, 0x9D30, 0x9D39,
+ 0x6D6A, 0x8234, 0x9E30, 0x9E39, 0x6D74, 0x8234, 0x9F30, 0x9F39, 0x6D7E,
+ 0x8234, 0xA030, 0xA039, 0x6D88, 0x8234, 0xA130, 0xA139, 0x6D92, 0x8234,
+ 0xA230, 0xA239, 0x6D9C, 0x8234, 0xA330, 0xA339, 0x6DA6, 0x8234, 0xA430,
+ 0xA439, 0x6DB0, 0x8234, 0xA530, 0xA539, 0x6DBA, 0x8234, 0xA630, 0xA639,
+ 0x6DC4, 0x8234, 0xA730, 0xA739, 0x6DCE, 0x8234, 0xA830, 0xA839, 0x6DD8,
+ 0x8234, 0xA930, 0xA939, 0x6DE2, 0x8234, 0xAA30, 0xAA39, 0x6DEC, 0x8234,
+ 0xAB30, 0xAB39, 0x6DF6, 0x8234, 0xAC30, 0xAC39, 0x6E00, 0x8234, 0xAD30,
+ 0xAD39, 0x6E0A, 0x8234, 0xAE30, 0xAE39, 0x6E14, 0x8234, 0xAF30, 0xAF39,
+ 0x6E1E, 0x8234, 0xB030, 0xB039, 0x6E28, 0x8234, 0xB130, 0xB139, 0x6E32,
+ 0x8234, 0xB230, 0xB239, 0x6E3C, 0x8234, 0xB330, 0xB339, 0x6E46, 0x8234,
+ 0xB430, 0xB439, 0x6E50, 0x8234, 0xB530, 0xB539, 0x6E5A, 0x8234, 0xB630,
+ 0xB639, 0x6E64, 0x8234, 0xB730, 0xB739, 0x6E6E, 0x8234, 0xB830, 0xB839,
+ 0x6E78, 0x8234, 0xB930, 0xB939, 0x6E82, 0x8234, 0xBA30, 0xBA39, 0x6E8C,
+ 0x8234, 0xBB30, 0xBB39, 0x6E96, 0x8234, 0xBC30, 0xBC39, 0x6EA0, 0x8234,
+ 0xBD30, 0xBD39, 0x6EAA, 0x8234, 0xBE30, 0xBE39, 0x6EB4, 0x8234, 0xBF30,
+ 0xBF39, 0x6EBE, 0x8234, 0xC030, 0xC039, 0x6EC8, 0x8234, 0xC130, 0xC139,
+ 0x6ED2, 0x8234, 0xC230, 0xC239, 0x6EDC, 0x8234, 0xC330, 0xC339, 0x6EE6,
+ 0x8234, 0xC430, 0xC439, 0x6EF0, 0x8234, 0xC530, 0xC539, 0x6EFA, 0x8234,
+ 0xC630, 0xC639, 0x6F04, 0x8234, 0xC730, 0xC739, 0x6F0E, 0x8234, 0xC830,
+ 0xC839, 0x6F18, 0x8234, 0xC930, 0xC939, 0x6F22, 0x8234, 0xCA30, 0xCA39,
+ 0x6F2C, 0x8234, 0xCB30, 0xCB39, 0x6F36, 0x8234, 0xCC30, 0xCC39, 0x6F40,
+ 0x8234, 0xCD30, 0xCD39, 0x6F4A, 0x8234, 0xCE30, 0xCE39, 0x6F54, 0x8234,
+ 0xCF30, 0xCF39, 0x6F5E, 0x8234, 0xD030, 0xD039, 0x6F68, 0x8234, 0xD130,
+ 0xD139, 0x6F72, 0x8234, 0xD230, 0xD239, 0x6F7C, 0x8234, 0xD330, 0xD339,
+ 0x6F86, 0x8234, 0xD430, 0xD439, 0x6F90, 0x8234, 0xD530, 0xD539, 0x6F9A,
+ 0x8234, 0xD630, 0xD639, 0x6FA4, 0x8234, 0xD730, 0xD739, 0x6FAE, 0x8234,
+ 0xD830, 0xD839, 0x6FB8, 0x8234, 0xD930, 0xD939, 0x6FC2, 0x8234, 0xDA30,
+ 0xDA39, 0x6FCC, 0x8234, 0xDB30, 0xDB39, 0x6FD6, 0x8234, 0xDC30, 0xDC39,
+ 0x6FE0, 0x8234, 0xDD30, 0xDD39, 0x6FEA, 0x8234, 0xDE30, 0xDE39, 0x6FF4,
+ 0x8234, 0xDF30, 0xDF39, 0x6FFE, 0x8234, 0xE030, 0xE039, 0x7008, 0x8234,
+ 0xE130, 0xE139, 0x7012, 0x8234, 0xE230, 0xE239, 0x701C, 0x8234, 0xE330,
+ 0xE339, 0x7026, 0x8234, 0xE430, 0xE439, 0x7030, 0x8234, 0xE530, 0xE539,
+ 0x703A, 0x8234, 0xE630, 0xE639, 0x7044, 0x8234, 0xE730, 0xE739, 0x704E,
+ 0x8234, 0xE830, 0xE839, 0x7058, 0x8234, 0xE930, 0xE939, 0x7062, 0x8234,
+ 0xEA30, 0xEA39, 0x706C, 0x8234, 0xEB30, 0xEB39, 0x7076, 0x8234, 0xEC30,
+ 0xEC39, 0x7080, 0x8234, 0xED30, 0xED39, 0x708A, 0x8234, 0xEE30, 0xEE39,
+ 0x7094, 0x8234, 0xEF30, 0xEF39, 0x709E, 0x8234, 0xF030, 0xF039, 0x70A8,
+ 0x8234, 0xF130, 0xF139, 0x70B2, 0x8234, 0xF230, 0xF239, 0x70BC, 0x8234,
+ 0xF330, 0xF339, 0x70C6, 0x8234, 0xF430, 0xF439, 0x70D0, 0x8234, 0xF530,
+ 0xF539, 0x70DA, 0x8234, 0xF630, 0xF639, 0x70E4, 0x8234, 0xF730, 0xF739,
+ 0x70EE, 0x8234, 0xF830, 0xF839, 0x70F8, 0x8234, 0xF930, 0xF939, 0x7102,
+ 0x8234, 0xFA30, 0xFA39, 0x710C, 0x8234, 0xFB30, 0xFB39, 0x7116, 0x8234,
+ 0xFC30, 0xFC39, 0x7120, 0x8234, 0xFD30, 0xFD39, 0x712A, 0x8234, 0xFE30,
+ 0xFE39, 0x7134, 0x8235, 0x8130, 0x8139, 0x713E, 0x8235, 0x8230, 0x8239,
+ 0x7148, 0x8235, 0x8330, 0x8339, 0x7152, 0x8235, 0x8430, 0x8439, 0x715C,
+ 0x8235, 0x8530, 0x8539, 0x7166, 0x8235, 0x8630, 0x8639, 0x7170, 0x8235,
+ 0x8730, 0x8738, 0x717A, 0x8235, 0x9833, 0x9839, 0x7188, 0x8235, 0x9930,
+ 0x9939, 0x718F, 0x8235, 0x9A30, 0x9A39, 0x7199, 0x8235, 0x9B30, 0x9B39,
+ 0x71A3, 0x8235, 0x9C30, 0x9C39, 0x71AD, 0x8235, 0x9D30, 0x9D39, 0x71B7,
+ 0x8235, 0x9E30, 0x9E39, 0x71C1, 0x8235, 0x9F30, 0x9F39, 0x71CB, 0x8235,
+ 0xA030, 0xA039, 0x71D5, 0x8235, 0xA130, 0xA139, 0x71DF, 0x8235, 0xA230,
+ 0xA239, 0x71E9, 0x8235, 0xA330, 0xA339, 0x71F3, 0x8235, 0xA430, 0xA439,
+ 0x71FD, 0x8235, 0xA530, 0xA539, 0x7207, 0x8235, 0xA630, 0xA639, 0x7211,
+ 0x8235, 0xA730, 0xA739, 0x721B, 0x8235, 0xA830, 0xA839, 0x7225, 0x8235,
+ 0xA930, 0xA939, 0x722F, 0x8235, 0xAA30, 0xAA39, 0x7239, 0x8235, 0xAB30,
+ 0xAB39, 0x7243, 0x8235, 0xAC30, 0xAC39, 0x724D, 0x8235, 0xAD30, 0xAD39,
+ 0x7257, 0x8235, 0xAE30, 0xAE39, 0x7261, 0x8235, 0xAF30, 0xAF39, 0x726B,
+ 0x8235, 0xB030, 0xB039, 0x7275, 0x8235, 0xB130, 0xB139, 0x727F, 0x8235,
+ 0xB230, 0xB239, 0x7289, 0x8235, 0xB330, 0xB339, 0x7293, 0x8235, 0xB430,
+ 0xB439, 0x729D, 0x8235, 0xB530, 0xB539, 0x72A7, 0x8235, 0xB630, 0xB639,
+ 0x72B1, 0x8235, 0xB730, 0xB739, 0x72BB, 0x8235, 0xB830, 0xB839, 0x72C5,
+ 0x8235, 0xB930, 0xB939, 0x72CF, 0x8235, 0xBA30, 0xBA39, 0x72D9, 0x8235,
+ 0xBB30, 0xBB39, 0x72E3, 0x8235, 0xBC30, 0xBC39, 0x72ED, 0x8235, 0xBD30,
+ 0xBD39, 0x72F7, 0x8235, 0xBE30, 0xBE39, 0x7301, 0x8235, 0xBF30, 0xBF39,
+ 0x730B, 0x8235, 0xC030, 0xC039, 0x7315, 0x8235, 0xC130, 0xC139, 0x731F,
+ 0x8235, 0xC230, 0xC239, 0x7329, 0x8235, 0xC330, 0xC339, 0x7333, 0x8235,
+ 0xC430, 0xC439, 0x733D, 0x8235, 0xC530, 0xC539, 0x7347, 0x8235, 0xC630,
+ 0xC639, 0x7351, 0x8235, 0xC730, 0xC739, 0x735B, 0x8235, 0xC830, 0xC839,
+ 0x7365, 0x8235, 0xC930, 0xC939, 0x736F, 0x8235, 0xCA30, 0xCA39, 0x7379,
+ 0x8235, 0xCB30, 0xCB39, 0x7383, 0x8235, 0xCC30, 0xCC39, 0x738D, 0x8235,
+ 0xCD30, 0xCD39, 0x7397, 0x8235, 0xCE30, 0xCE39, 0x73A1, 0x8235, 0xCF30,
+ 0xCF39, 0x73AB, 0x8235, 0xD030, 0xD039, 0x73B5, 0x8235, 0xD130, 0xD139,
+ 0x73BF, 0x8235, 0xD230, 0xD239, 0x73C9, 0x8235, 0xD330, 0xD339, 0x73D3,
+ 0x8235, 0xD430, 0xD439, 0x73DD, 0x8235, 0xD530, 0xD539, 0x73E7, 0x8235,
+ 0xD630, 0xD639, 0x73F1, 0x8235, 0xD730, 0xD739, 0x73FB, 0x8235, 0xD830,
+ 0xD839, 0x7405, 0x8235, 0xD930, 0xD939, 0x740F, 0x8235, 0xDA30, 0xDA39,
+ 0x7419, 0x8235, 0xDB30, 0xDB39, 0x7423, 0x8235, 0xDC30, 0xDC39, 0x742D,
+ 0x8235, 0xDD30, 0xDD39, 0x7437, 0x8235, 0xDE30, 0xDE39, 0x7441, 0x8235,
+ 0xDF30, 0xDF39, 0x744B, 0x8235, 0xE030, 0xE039, 0x7455, 0x8235, 0xE130,
+ 0xE139, 0x745F, 0x8235, 0xE230, 0xE239, 0x7469, 0x8235, 0xE330, 0xE339,
+ 0x7473, 0x8235, 0xE430, 0xE439, 0x747D, 0x8235, 0xE530, 0xE539, 0x7487,
+ 0x8235, 0xE630, 0xE639, 0x7491, 0x8235, 0xE730, 0xE739, 0x749B, 0x8235,
+ 0xE830, 0xE839, 0x74A5, 0x8235, 0xE930, 0xE939, 0x74AF, 0x8235, 0xEA30,
+ 0xEA39, 0x74B9, 0x8235, 0xEB30, 0xEB39, 0x74C3, 0x8235, 0xEC30, 0xEC39,
+ 0x74CD, 0x8235, 0xED30, 0xED39, 0x74D7, 0x8235, 0xEE30, 0xEE39, 0x74E1,
+ 0x8235, 0xEF30, 0xEF39, 0x74EB, 0x8235, 0xF030, 0xF039, 0x74F5, 0x8235,
+ 0xF130, 0xF139, 0x74FF, 0x8235, 0xF230, 0xF239, 0x7509, 0x8235, 0xF330,
+ 0xF339, 0x7513, 0x8235, 0xF430, 0xF439, 0x751D, 0x8235, 0xF530, 0xF539,
+ 0x7527, 0x8235, 0xF630, 0xF639, 0x7531, 0x8235, 0xF730, 0xF739, 0x753B,
+ 0x8235, 0xF830, 0xF839, 0x7545, 0x8235, 0xF930, 0xF939, 0x754F, 0x8235,
+ 0xFA30, 0xFA39, 0x7559, 0x8235, 0xFB30, 0xFB39, 0x7563, 0x8235, 0xFC30,
+ 0xFC39, 0x756D, 0x8235, 0xFD30, 0xFD39, 0x7577, 0x8235, 0xFE30, 0xFE39,
+ 0x7581, 0x8236, 0x8130, 0x8139, 0x758B, 0x8236, 0x8230, 0x8239, 0x7595,
+ 0x8236, 0x8330, 0x8339, 0x759F, 0x8236, 0x8430, 0x8439, 0x75A9, 0x8236,
+ 0x8530, 0x8539, 0x75B3, 0x8236, 0x8630, 0x8639, 0x75BD, 0x8236, 0x8730,
+ 0x8739, 0x75C7, 0x8236, 0x8830, 0x8839, 0x75D1, 0x8236, 0x8930, 0x8939,
+ 0x75DB, 0x8236, 0x8A30, 0x8A39, 0x75E5, 0x8236, 0x8B30, 0x8B39, 0x75EF,
+ 0x8236, 0x8C30, 0x8C39, 0x75F9, 0x8236, 0x8D30, 0x8D39, 0x7603, 0x8236,
+ 0x8E30, 0x8E37, 0x760D, 0x8236, 0x8F31, 0x8F39, 0x7615, 0x8236, 0x9030,
+ 0x9039, 0x761E, 0x8236, 0x9130, 0x9139, 0x7628, 0x8236, 0x9230, 0x9239,
+ 0x7632, 0x8236, 0x9330, 0x9339, 0x763C, 0x8236, 0x9430, 0x9435, 0x7646,
};
diff --git a/core/src/fpdfapi/fpdf_cmaps/GB1/cmaps_gb1.cpp b/core/src/fpdfapi/fpdf_cmaps/GB1/cmaps_gb1.cpp
index 26d4cd6358..bf79ced6e6 100644
--- a/core/src/fpdfapi/fpdf_cmaps/GB1/cmaps_gb1.cpp
+++ b/core/src/fpdfapi/fpdf_cmaps/GB1/cmaps_gb1.cpp
@@ -12,27 +12,43 @@
#include "cmaps_gb1.h"
static const FXCMAP_CMap g_FXCMAP_GB1_cmaps[] = {
- { "GB-EUC-H", FXCMAP_CMap::Range, g_FXCMAP_GB_EUC_H_0, 90, FXCMAP_CMap::None, NULL, 0, 0 },
- { "GB-EUC-V", FXCMAP_CMap::Range, g_FXCMAP_GB_EUC_V_0, 20, FXCMAP_CMap::None, NULL, 0, -1 },
- { "GBpc-EUC-H", FXCMAP_CMap::Range, g_FXCMAP_GBpc_EUC_H_0, 91, FXCMAP_CMap::None, NULL, 0, 0 },
- { "GBpc-EUC-V", FXCMAP_CMap::Range, g_FXCMAP_GBpc_EUC_V_0, 20, FXCMAP_CMap::None, NULL, 0, -1 },
- { "GBK-EUC-H", FXCMAP_CMap::Range, g_FXCMAP_GBK_EUC_H_2, 4071, FXCMAP_CMap::None, NULL, 0, 0 },
- { "GBK-EUC-V", FXCMAP_CMap::Range, g_FXCMAP_GBK_EUC_V_2, 20, FXCMAP_CMap::None, NULL, 0, -1 },
- { "GBKp-EUC-H", FXCMAP_CMap::Range, g_FXCMAP_GBKp_EUC_H_2, 4070, FXCMAP_CMap::None, NULL, 0, -2 },
- { "GBKp-EUC-V", FXCMAP_CMap::Range, g_FXCMAP_GBKp_EUC_V_2, 20, FXCMAP_CMap::None, NULL, 0, -1 },
- { "GBK2K-H", FXCMAP_CMap::Range, g_FXCMAP_GBK2K_H_5, 4071, FXCMAP_CMap::Single, g_FXCMAP_GBK2K_H_5_DWord, 1017, -4 },
- { "GBK2K-V", FXCMAP_CMap::Range, g_FXCMAP_GBK2K_V_5, 41, FXCMAP_CMap::None, NULL, 0, -1 },
- { "UniGB-UCS2-H", FXCMAP_CMap::Range, g_FXCMAP_UniGB_UCS2_H_4, 13825, FXCMAP_CMap::None, NULL, 0, 0 },
- { "UniGB-UCS2-V", FXCMAP_CMap::Range, g_FXCMAP_UniGB_UCS2_V_4, 24, FXCMAP_CMap::None, NULL, 0, -1 },
- { "UniGB-UTF16-H", FXCMAP_CMap::Range, g_FXCMAP_UniGB_UCS2_H_4, 13825, FXCMAP_CMap::None, NULL, 0, 0 },
- { "UniGB-UTF16-V", FXCMAP_CMap::Range, g_FXCMAP_UniGB_UCS2_V_4, 24, FXCMAP_CMap::None, NULL, 0, -1 },
+ {"GB-EUC-H", FXCMAP_CMap::Range, g_FXCMAP_GB_EUC_H_0, 90, FXCMAP_CMap::None,
+ NULL, 0, 0},
+ {"GB-EUC-V", FXCMAP_CMap::Range, g_FXCMAP_GB_EUC_V_0, 20, FXCMAP_CMap::None,
+ NULL, 0, -1},
+ {"GBpc-EUC-H", FXCMAP_CMap::Range, g_FXCMAP_GBpc_EUC_H_0, 91,
+ FXCMAP_CMap::None, NULL, 0, 0},
+ {"GBpc-EUC-V", FXCMAP_CMap::Range, g_FXCMAP_GBpc_EUC_V_0, 20,
+ FXCMAP_CMap::None, NULL, 0, -1},
+ {"GBK-EUC-H", FXCMAP_CMap::Range, g_FXCMAP_GBK_EUC_H_2, 4071,
+ FXCMAP_CMap::None, NULL, 0, 0},
+ {"GBK-EUC-V", FXCMAP_CMap::Range, g_FXCMAP_GBK_EUC_V_2, 20,
+ FXCMAP_CMap::None, NULL, 0, -1},
+ {"GBKp-EUC-H", FXCMAP_CMap::Range, g_FXCMAP_GBKp_EUC_H_2, 4070,
+ FXCMAP_CMap::None, NULL, 0, -2},
+ {"GBKp-EUC-V", FXCMAP_CMap::Range, g_FXCMAP_GBKp_EUC_V_2, 20,
+ FXCMAP_CMap::None, NULL, 0, -1},
+ {"GBK2K-H", FXCMAP_CMap::Range, g_FXCMAP_GBK2K_H_5, 4071,
+ FXCMAP_CMap::Single, g_FXCMAP_GBK2K_H_5_DWord, 1017, -4},
+ {"GBK2K-V", FXCMAP_CMap::Range, g_FXCMAP_GBK2K_V_5, 41, FXCMAP_CMap::None,
+ NULL, 0, -1},
+ {"UniGB-UCS2-H", FXCMAP_CMap::Range, g_FXCMAP_UniGB_UCS2_H_4, 13825,
+ FXCMAP_CMap::None, NULL, 0, 0},
+ {"UniGB-UCS2-V", FXCMAP_CMap::Range, g_FXCMAP_UniGB_UCS2_V_4, 24,
+ FXCMAP_CMap::None, NULL, 0, -1},
+ {"UniGB-UTF16-H", FXCMAP_CMap::Range, g_FXCMAP_UniGB_UCS2_H_4, 13825,
+ FXCMAP_CMap::None, NULL, 0, 0},
+ {"UniGB-UTF16-V", FXCMAP_CMap::Range, g_FXCMAP_UniGB_UCS2_V_4, 24,
+ FXCMAP_CMap::None, NULL, 0, -1},
};
-void CPDF_ModuleMgr::LoadEmbeddedGB1CMaps()
-{
- CPDF_FontGlobals* pFontGlobals = CPDF_ModuleMgr::Get()->GetPageModule()->GetFontGlobals();
- pFontGlobals->m_EmbeddedCharsets[CIDSET_GB1].m_pMapList = g_FXCMAP_GB1_cmaps;
- pFontGlobals->m_EmbeddedCharsets[CIDSET_GB1].m_Count = FX_ArraySize(g_FXCMAP_GB1_cmaps);
- pFontGlobals->m_EmbeddedToUnicodes[CIDSET_GB1].m_pMap = g_FXCMAP_GB1CID2Unicode_5;
- pFontGlobals->m_EmbeddedToUnicodes[CIDSET_GB1].m_Count = 30284;
+void CPDF_ModuleMgr::LoadEmbeddedGB1CMaps() {
+ CPDF_FontGlobals* pFontGlobals =
+ CPDF_ModuleMgr::Get()->GetPageModule()->GetFontGlobals();
+ pFontGlobals->m_EmbeddedCharsets[CIDSET_GB1].m_pMapList = g_FXCMAP_GB1_cmaps;
+ pFontGlobals->m_EmbeddedCharsets[CIDSET_GB1].m_Count =
+ FX_ArraySize(g_FXCMAP_GB1_cmaps);
+ pFontGlobals->m_EmbeddedToUnicodes[CIDSET_GB1].m_pMap =
+ g_FXCMAP_GB1CID2Unicode_5;
+ pFontGlobals->m_EmbeddedToUnicodes[CIDSET_GB1].m_Count = 30284;
}
diff --git a/core/src/fpdfapi/fpdf_cmaps/Japan1/Adobe-Japan1-UCS2_4.cpp b/core/src/fpdfapi/fpdf_cmaps/Japan1/Adobe-Japan1-UCS2_4.cpp
index 94e2cd2665..d6dadd51c7 100644
--- a/core/src/fpdfapi/fpdf_cmaps/Japan1/Adobe-Japan1-UCS2_4.cpp
+++ b/core/src/fpdfapi/fpdf_cmaps/Japan1/Adobe-Japan1-UCS2_4.cpp
@@ -7,1935 +7,1720 @@
#include "cmaps_japan1.h"
const FX_WORD g_FXCMAP_Japan1CID2Unicode_4[15444] = {
- 0xFFFD, 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, 0x00A5, 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, 0x00A6, 0x007D, 0x0303,
- 0x02BC, 0x005C, 0x02BB, 0x007C, 0x007E, 0x00A1, 0x00A2, 0x00A3,
- 0x2044, 0x0192, 0x00A7, 0x00A4, 0x201C, 0x00AB, 0x2039, 0x203A,
- 0xFB01, 0xFB02, 0x2012, 0x2020, 0x2021, 0x00B7, 0x00B6, 0x2022,
- 0x201A, 0x201E, 0x201D, 0x00BB, 0x2026, 0x2030, 0x00BF, 0x0301,
- 0x0302, 0x00AF, 0x0306, 0x0307, 0x0308, 0x030A, 0x00B8, 0x030B,
- 0x0328, 0x030C, 0x0336, 0x00C6, 0x00AA, 0x0141, 0x00D8, 0x0152,
- 0x00BA, 0x00E6, 0x0131, 0x0142, 0x00F8, 0x0153, 0x00DF, 0x002D,
- 0x00A9, 0x00AC, 0x00AE, 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B5,
- 0x00B9, 0x00BC, 0x00BD, 0x00BE, 0x00C0, 0x00C1, 0x00C2, 0x00C3,
- 0x00C4, 0x00C5, 0x00C7, 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC,
- 0x00CD, 0x00CE, 0x00CF, 0x00D0, 0x00D1, 0x00D2, 0x00D3, 0x00D4,
- 0x00D5, 0x00D6, 0x00D7, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x00DD,
- 0x00DE, 0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E7,
- 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF,
- 0x00F0, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x00F7,
- 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x00FD, 0x00FE, 0x00FF, 0x0160,
- 0x0178, 0x017D, 0x0305, 0x0161, 0x2122, 0x017E, 0x0030, 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, 0x00A5, 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, 0x203E, 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, 0xFF40, 0x30F0,
- 0x30F1, 0x30EE, 0x30AB, 0x30B1, 0x30F4, 0x30AC, 0x30AE, 0x30B0,
- 0x30B2, 0x30B4, 0x30B6, 0x30B8, 0x30BA, 0x30BC, 0x30BE, 0x30C0,
- 0x30C2, 0x30C5, 0x30C7, 0x30C9, 0x30D0, 0x30D1, 0x30D3, 0x30D4,
- 0x30D6, 0x30D7, 0x30D9, 0x30DA, 0x30DC, 0x30DD, 0xFF60, 0x301D,
- 0x301E, 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, 0x2032, 0x00A8, 0x2036,
- 0x005B, 0x005D, 0x3008, 0x3009, 0x300A, 0x300B, 0x300E, 0x300F,
- 0x3010, 0x3011, 0x2012, 0xFF60, 0x3092, 0x3041, 0x3043, 0x3045,
- 0x3047, 0x3049, 0x3083, 0x3085, 0x3087, 0x3063, 0x3042, 0x3044,
- 0x3046, 0x3048, 0x304A, 0x304B, 0x304D, 0x304F, 0x3051, 0x3053,
- 0x3055, 0x3057, 0x3059, 0x305B, 0x305D, 0x305F, 0x3061, 0x3064,
- 0x3066, 0x3068, 0x306A, 0x306B, 0x306C, 0x306D, 0x306E, 0x306F,
- 0x3072, 0x3075, 0x3078, 0x307B, 0x307E, 0x307F, 0x3080, 0x3081,
- 0x3082, 0x3084, 0x3086, 0x3088, 0x3089, 0x308A, 0x308B, 0x308C,
- 0x308D, 0x308F, 0x3093, 0x3090, 0x3091, 0x308E, 0x304C, 0x304E,
- 0x3050, 0x3052, 0x3054, 0x3056, 0x3068, 0x305A, 0x305C, 0x305E,
- 0x3060, 0x3062, 0x3065, 0x3067, 0x3069, 0x3070, 0x3071, 0x3073,
- 0x3074, 0x3076, 0x3077, 0x3079, 0x307A, 0x307C, 0x307D, 0x00C4,
- 0x00F9, 0x00E9, 0x00ED, 0x00DF, 0x00E7, 0x00C7, 0x00D1, 0x00F1,
- 0x00A2, 0x00A3, 0x00F3, 0x00FA, 0x00A1, 0x00BF, 0x00BD, 0x00D6,
- 0x00DC, 0x00E4, 0x00EB, 0x00EF, 0x00F6, 0x00DC, 0x00E2, 0x00EA,
- 0x00EE, 0x00F4, 0x00FC, 0x00E0, 0x00E9, 0x25B2, 0x00E1, 0x007E,
- 0x0030, 0x3000, 0x3001, 0x3002, 0xFF0C, 0xFF0E, 0x30FB, 0xFF1A,
- 0xFF1B, 0xFF1F, 0xFF01, 0x309B, 0x309C, 0x00B4, 0xFF40, 0x00A8,
- 0xFF3E, 0x203E, 0xFF3F, 0x30FD, 0x30FE, 0x309D, 0x309E, 0x3003,
- 0x4EDD, 0x3005, 0x3006, 0x3007, 0x30FC, 0x2015, 0x2010, 0xFF0F,
- 0xFF3C, 0xFF5E, 0x2016, 0xFF5C, 0x2026, 0x2025, 0x2018, 0x2019,
- 0x201C, 0x201D, 0xFF08, 0xFF09, 0x3014, 0x3015, 0xFF3B, 0xFF3D,
- 0xFF5B, 0xFF5D, 0x3008, 0x3009, 0x300A, 0x300B, 0x300C, 0x300D,
- 0x300E, 0x300F, 0x3010, 0x3011, 0xFF0B, 0xFF0D, 0x00B1, 0x00D7,
- 0x00F7, 0xFF1D, 0x2260, 0xFF1C, 0xFF1E, 0x2266, 0x2267, 0x221E,
- 0x2234, 0x2642, 0x2640, 0x00B0, 0x2032, 0x2033, 0x2103, 0xFFE5,
- 0xFF04, 0x00A2, 0x00A3, 0xFF05, 0xFF03, 0xFF06, 0xFF0A, 0xFF20,
- 0x00A7, 0x2606, 0x2605, 0x25CB, 0x25CF, 0x25CE, 0x25C7, 0x25C6,
- 0x25A1, 0x25A0, 0x25B3, 0x25B2, 0x25BD, 0x25BC, 0x203B, 0x3012,
- 0x2192, 0x2190, 0x2191, 0x2193, 0x3013, 0x2208, 0x220B, 0x2286,
- 0x2287, 0x2282, 0x2283, 0x222A, 0x2229, 0x2227, 0x2228, 0x00AC,
- 0x21D2, 0x21D4, 0x2200, 0x2203, 0x2220, 0x22A5, 0x2312, 0x2202,
- 0x2207, 0x2261, 0x2252, 0x226A, 0x226B, 0x221A, 0x223D, 0x221D,
- 0x2235, 0x222B, 0x222C, 0x212B, 0x2030, 0x266F, 0x266D, 0x266A,
- 0x2020, 0x2021, 0x00B6, 0x25EF, 0xFF10, 0xFF11, 0xFF12, 0xFF13,
- 0xFF14, 0xFF15, 0xFF16, 0xFF17, 0xFF18, 0xFF19, 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, 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, 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, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395,
- 0x0396, 0x0397, 0x0398, 0x0399, 0x039A, 0x039B, 0x039C, 0x039D,
- 0x039E, 0x039F, 0x03A0, 0x03A1, 0x03A3, 0x03A4, 0x03A5, 0x03A6,
- 0x03A7, 0x03A8, 0x03A9, 0x03B1, 0x03B2, 0x03B3, 0x03B4, 0x03B5,
- 0x03B6, 0x03B7, 0x03B8, 0x03B9, 0x03BA, 0x03BB, 0x03BC, 0x03BD,
- 0x03BE, 0x03BF, 0x03C0, 0x03C1, 0x03C3, 0x03C4, 0x03C5, 0x03C6,
- 0x03C7, 0x03C8, 0x03C9, 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, 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, 0x4E9C, 0x5516, 0x5A03,
- 0x963F, 0x54C0, 0x611B, 0x6328, 0x59F6, 0x9022, 0x8475, 0x831C,
- 0x7A50, 0x60AA, 0x63E1, 0x6E25, 0x65ED, 0x8466, 0x82A6, 0x9BF5,
- 0x6893, 0x5727, 0x65A1, 0x6271, 0x5B9B, 0x59D0, 0x867B, 0x98F4,
- 0x7D62, 0x7DBE, 0x9B8E, 0x6216, 0x7C9F, 0x88B7, 0x5B89, 0x5EB5,
- 0x6309, 0x6697, 0x6848, 0x95C7, 0x978D, 0x674F, 0x4EE5, 0x4F0A,
- 0x4F4D, 0x4F9D, 0x5049, 0x56F2, 0x5937, 0x59D4, 0x5A01, 0x5C09,
- 0x60DF, 0x610F, 0x6170, 0x6613, 0x6905, 0x70BA, 0x754F, 0x7570,
- 0x79FB, 0x7DAD, 0x7DEF, 0x80C3, 0x840E, 0x8863, 0x8B02, 0x9055,
- 0x907A, 0x533B, 0x4E95, 0x4EA5, 0x57DF, 0x80B2, 0x90C1, 0x78EF,
- 0x4E00, 0x58F1, 0x6EA2, 0x9038, 0x7A32, 0x8328, 0x828B, 0x9C2F,
- 0x5141, 0x5370, 0x54BD, 0x54E1, 0x56E0, 0x59FB, 0x5F15, 0x98F2,
- 0x6DEB, 0x80E4, 0x852D, 0x9662, 0x9670, 0x96A0, 0x97FB, 0x540B,
- 0x53F3, 0x5B87, 0x70CF, 0x7FBD, 0x8FC2, 0x96E8, 0x536F, 0x9D5C,
- 0x7ABA, 0x4E11, 0x7893, 0x81FC, 0x6E26, 0x5618, 0x5504, 0x6B1D,
- 0x851A, 0x9C3B, 0x59E5, 0x53A9, 0x6D66, 0x74DC, 0x958F, 0x5642,
- 0x4E91, 0x904B, 0x96F2, 0x834F, 0x990C, 0x53E1, 0x55B6, 0x5B30,
- 0x5F71, 0x6620, 0x66F3, 0x6804, 0x6C38, 0x6CF3, 0x6D29, 0x745B,
- 0x76C8, 0x7A4E, 0x9834, 0x82F1, 0x885B, 0x8A60, 0x92ED, 0x6DB2,
- 0x75AB, 0x76CA, 0x99C5, 0x60A6, 0x8B01, 0x8D8A, 0x95B2, 0x698E,
- 0x53AD, 0x5186, 0x5712, 0x5830, 0x5944, 0x5BB4, 0x5EF6, 0x6028,
- 0x63A9, 0x63F4, 0x6CBF, 0x6F14, 0x708E, 0x7114, 0x7159, 0x71D5,
- 0x733F, 0x7E01, 0x8276, 0x82D1, 0x8597, 0x9060, 0x925B, 0x9D1B,
- 0x5869, 0x65BC, 0x6C5A, 0x7525, 0x51F9, 0x592E, 0x5965, 0x5F80,
- 0x5FDC, 0x62BC, 0x65FA, 0x6A2A, 0x6B27, 0x6BB4, 0x738B, 0x7FC1,
- 0x8956, 0x9D2C, 0x9D0E, 0x9EC4, 0x5CA1, 0x6C96, 0x837B, 0x5104,
- 0x5C4B, 0x61B6, 0x81C6, 0x6876, 0x7261, 0x4E59, 0x4FFA, 0x5378,
- 0x6069, 0x6E29, 0x7A4F, 0x97F3, 0x4E0B, 0x5316, 0x4EEE, 0x4F55,
- 0x4F3D, 0x4FA1, 0x4F73, 0x52A0, 0x53EF, 0x5609, 0x590F, 0x5AC1,
- 0x5BB6, 0x5BE1, 0x79D1, 0x6687, 0x679C, 0x67B6, 0x6B4C, 0x6CB3,
- 0x706B, 0x73C2, 0x798D, 0x79BE, 0x7A3C, 0x7B87, 0x82B1, 0x82DB,
- 0x8304, 0x8377, 0x83EF, 0x83D3, 0x8766, 0x8AB2, 0x5629, 0x8CA8,
- 0x8FE6, 0x904E, 0x971E, 0x868A, 0x4FC4, 0x5CE8, 0x6211, 0x7259,
- 0x753B, 0x81E5, 0x82BD, 0x86FE, 0x8CC0, 0x96C5, 0x9913, 0x99D5,
- 0x4ECB, 0x4F1A, 0x89E3, 0x56DE, 0x584A, 0x58CA, 0x5EFB, 0x5FEB,
- 0x602A, 0x6094, 0x6062, 0x61D0, 0x6212, 0x62D0, 0x6539, 0x9B41,
- 0x6666, 0x68B0, 0x6D77, 0x7070, 0x754C, 0x7686, 0x7D75, 0x82A5,
- 0x87F9, 0x958B, 0x968E, 0x8C9D, 0x51F1, 0x52BE, 0x5916, 0x54B3,
- 0x5BB3, 0x5D16, 0x6168, 0x6982, 0x6DAF, 0x788D, 0x84CB, 0x8857,
- 0x8A72, 0x93A7, 0x9AB8, 0x6D6C, 0x99A8, 0x86D9, 0x57A3, 0x67FF,
- 0x86CE, 0x920E, 0x5283, 0x5687, 0x5404, 0x5ED3, 0x62E1, 0x64B9,
- 0x683C, 0x6838, 0x6BBB, 0x7372, 0x78BA, 0x7A6B, 0x899A, 0x89D2,
- 0x8D6B, 0x8F03, 0x90ED, 0x95A3, 0x9694, 0x9769, 0x5B66, 0x5CB3,
- 0x697D, 0x984D, 0x984E, 0x639B, 0x7B20, 0x6A2B, 0x6A7F, 0x68B6,
- 0x9C0D, 0x6F5F, 0x5272, 0x559D, 0x6070, 0x62EC, 0x6D3B, 0x6E07,
- 0x6ED1, 0x845B, 0x8910, 0x8F44, 0x4E14, 0x9C39, 0x53F6, 0x691B,
- 0x6A3A, 0x9784, 0x682A, 0x515C, 0x7AC3, 0x84B2, 0x91DC, 0x938C,
- 0x565B, 0x9D28, 0x6822, 0x8305, 0x8431, 0x7CA5, 0x5208, 0x82C5,
- 0x74E6, 0x4E7E, 0x4F83, 0x51A0, 0x5BD2, 0x520A, 0x52D8, 0x52E7,
- 0x5DFB, 0x559A, 0x582A, 0x59E6, 0x5B8C, 0x5B98, 0x5BDB, 0x5E72,
- 0x5E79, 0x60A3, 0x611F, 0x6163, 0x61BE, 0x63DB, 0x6562, 0x67D1,
- 0x6853, 0x68FA, 0x6B3E, 0x6B53, 0x6C57, 0x6F22, 0x6F97, 0x6F45,
- 0x74B0, 0x7518, 0x76E3, 0x770B, 0x7AFF, 0x7BA1, 0x7C21, 0x7DE9,
- 0x7F36, 0x7FF0, 0x809D, 0x8266, 0x839E, 0x89B3, 0x8ACC, 0x8CAB,
- 0x9084, 0x9451, 0x9593, 0x9591, 0x95A2, 0x9665, 0x97D3, 0x9928,
- 0x8218, 0x4E38, 0x542B, 0x5CB8, 0x5DCC, 0x73A9, 0x764C, 0x773C,
- 0x5CA9, 0x7FEB, 0x8D0B, 0x96C1, 0x9811, 0x9854, 0x9858, 0x4F01,
- 0x4F0E, 0x5371, 0x559C, 0x5668, 0x57FA, 0x5947, 0x5B09, 0x5BC4,
- 0x5C90, 0x5E0C, 0x5E7E, 0x5FCC, 0x63EE, 0x673A, 0x65D7, 0x65E2,
- 0x671F, 0x68CB, 0x68C4, 0x6A5F, 0x5E30, 0x6BC5, 0x6C17, 0x6C7D,
- 0x757F, 0x7948, 0x5B63, 0x7A00, 0x7D00, 0x5FBD, 0x898F, 0x8A18,
- 0x8CB4, 0x8D77, 0x8ECC, 0x8F1D, 0x98E2, 0x9A0E, 0x9B3C, 0x4E80,
- 0x507D, 0x5100, 0x5993, 0x5B9C, 0x622F, 0x6280, 0x64EC, 0x6B3A,
- 0x72A0, 0x7591, 0x7947, 0x7FA9, 0x87FB, 0x8ABC, 0x8B70, 0x63AC,
- 0x83CA, 0x97A0, 0x5409, 0x5403, 0x55AB, 0x6854, 0x6A58, 0x8A70,
- 0x7827, 0x6775, 0x9ECD, 0x5374, 0x5BA2, 0x811A, 0x8650, 0x9006,
- 0x4E18, 0x4E45, 0x4EC7, 0x4F11, 0x53CA, 0x5438, 0x5BAE, 0x5F13,
- 0x6025, 0x6551, 0x673D, 0x6C42, 0x6C72, 0x6CE3, 0x7078, 0x7403,
- 0x7A76, 0x7AAE, 0x7B08, 0x7D1A, 0x7CFE, 0x7D66, 0x65E7, 0x725B,
- 0x53BB, 0x5C45, 0x5DE8, 0x62D2, 0x62E0, 0x6319, 0x6E20, 0x865A,
- 0x8A31, 0x8DDD, 0x92F8, 0x6F01, 0x79A6, 0x9B5A, 0x4EA8, 0x4EAB,
- 0x4EAC, 0x4F9B, 0x4FA0, 0x50D1, 0x5147, 0x7AF6, 0x5171, 0x51F6,
- 0x5354, 0x5321, 0x537F, 0x53EB, 0x55AC, 0x5883, 0x5CE1, 0x5F37,
- 0x5F4A, 0x602F, 0x6050, 0x606D, 0x631F, 0x6559, 0x6A4B, 0x6CC1,
- 0x72C2, 0x72ED, 0x77EF, 0x80F8, 0x8105, 0x8208, 0x854E, 0x90F7,
- 0x93E1, 0x97FF, 0x9957, 0x9A5A, 0x4EF0, 0x51DD, 0x5C2D, 0x6681,
- 0x696D, 0x5C40, 0x66F2, 0x6975, 0x7389, 0x6850, 0x7C81, 0x50C5,
- 0x52E4, 0x5747, 0x5DFE, 0x9326, 0x65A4, 0x6B23, 0x6B3D, 0x7434,
- 0x7981, 0x79BD, 0x7B4B, 0x7DCA, 0x82B9, 0x83CC, 0x887F, 0x895F,
- 0x8B39, 0x8FD1, 0x91D1, 0x541F, 0x9280, 0x4E5D, 0x5036, 0x53E5,
- 0x533A, 0x72D7, 0x7396, 0x77E9, 0x82E6, 0x8EAF, 0x99C6, 0x99C8,
- 0x99D2, 0x5177, 0x611A, 0x865E, 0x55B0, 0x7A7A, 0x5076, 0x5BD3,
- 0x9047, 0x9685, 0x4E32, 0x6ADB, 0x91E7, 0x5C51, 0x5C48, 0x6398,
- 0x7A9F, 0x6C93, 0x9774, 0x8F61, 0x7AAA, 0x718A, 0x9688, 0x7C82,
- 0x6817, 0x7E70, 0x6851, 0x936C, 0x52F2, 0x541B, 0x85AB, 0x8A13,
- 0x7FA4, 0x8ECD, 0x90E1, 0x5366, 0x8888, 0x7941, 0x4FC2, 0x50BE,
- 0x5211, 0x5144, 0x5553, 0x572D, 0x73EA, 0x578B, 0x5951, 0x5F62,
- 0x5F84, 0x6075, 0x6176, 0x6167, 0x61A9, 0x63B2, 0x643A, 0x656C,
- 0x666F, 0x6842, 0x6E13, 0x7566, 0x7A3D, 0x7CFB, 0x7D4C, 0x7D99,
- 0x7E4B, 0x7F6B, 0x830E, 0x834A, 0x86CD, 0x8A08, 0x8A63, 0x8B66,
- 0x8EFD, 0x981A, 0x9D8F, 0x82B8, 0x8FCE, 0x9BE8, 0x5287, 0x621F,
- 0x6483, 0x6FC0, 0x9699, 0x6841, 0x5091, 0x6B20, 0x6C7A, 0x6F54,
- 0x7A74, 0x7D50, 0x8840, 0x8A23, 0x6708, 0x4EF6, 0x5039, 0x5026,
- 0x5065, 0x517C, 0x5238, 0x5263, 0x55A7, 0x570F, 0x5805, 0x5ACC,
- 0x5EFA, 0x61B2, 0x61F8, 0x62F3, 0x6372, 0x691C, 0x6A29, 0x727D,
- 0x72AC, 0x732E, 0x7814, 0x786F, 0x7D79, 0x770C, 0x80A9, 0x898B,
- 0x8B19, 0x8CE2, 0x8ED2, 0x9063, 0x9375, 0x967A, 0x9855, 0x9A13,
- 0x9E78, 0x5143, 0x539F, 0x53B3, 0x5E7B, 0x5F26, 0x6E1B, 0x6E90,
- 0x7384, 0x73FE, 0x7D43, 0x8237, 0x8A00, 0x8AFA, 0x9650, 0x4E4E,
- 0x500B, 0x53E4, 0x547C, 0x56FA, 0x59D1, 0x5B64, 0x5DF1, 0x5EAB,
- 0x5F27, 0x6238, 0x6545, 0x67AF, 0x6E56, 0x72D0, 0x7CCA, 0x88B4,
- 0x80A1, 0x80E1, 0x83F0, 0x864E, 0x8A87, 0x8DE8, 0x9237, 0x96C7,
- 0x9867, 0x9F13, 0x4E94, 0x4E92, 0x4F0D, 0x5348, 0x5449, 0x543E,
- 0x5A2F, 0x5F8C, 0x5FA1, 0x609F, 0x68A7, 0x6A8E, 0x745A, 0x7881,
- 0x8A9E, 0x8AA4, 0x8B77, 0x9190, 0x4E5E, 0x9BC9, 0x4EA4, 0x4F7C,
- 0x4FAF, 0x5019, 0x5016, 0x5149, 0x516C, 0x529F, 0x52B9, 0x52FE,
- 0x539A, 0x53E3, 0x5411, 0x540E, 0x5589, 0x5751, 0x57A2, 0x597D,
- 0x5B54, 0x5B5D, 0x5B8F, 0x5DE5, 0x5DE7, 0x5DF7, 0x5E78, 0x5E83,
- 0x5E9A, 0x5EB7, 0x5F18, 0x6052, 0x614C, 0x6297, 0x62D8, 0x63A7,
- 0x653B, 0x6602, 0x6643, 0x66F4, 0x676D, 0x6821, 0x6897, 0x69CB,
- 0x6C5F, 0x6D2A, 0x6D69, 0x6E2F, 0x6E9D, 0x7532, 0x7687, 0x786C,
- 0x7A3F, 0x7CE0, 0x7D05, 0x7D18, 0x7D5E, 0x7DB1, 0x8015, 0x8003,
- 0x80AF, 0x80B1, 0x8154, 0x818F, 0x822A, 0x8352, 0x884C, 0x8861,
- 0x8B1B, 0x8CA2, 0x8CFC, 0x90CA, 0x9175, 0x9271, 0x783F, 0x92FC,
- 0x95A4, 0x964D, 0x9805, 0x9999, 0x9AD8, 0x9D3B, 0x525B, 0x52AB,
- 0x53F7, 0x5408, 0x58D5, 0x62F7, 0x6FE0, 0x8C6A, 0x8F5F, 0x9EB9,
- 0x514B, 0x523B, 0x544A, 0x56FD, 0x7A40, 0x9177, 0x9D60, 0x9ED2,
- 0x7344, 0x6F09, 0x8170, 0x7511, 0x5FFD, 0x60DA, 0x9AA8, 0x72DB,
- 0x8FBC, 0x6B64, 0x9803, 0x4ECA, 0x56F0, 0x5764, 0x58BE, 0x5A5A,
- 0x6068, 0x61C7, 0x660F, 0x6606, 0x6839, 0x68B1, 0x6DF7, 0x75D5,
- 0x7D3A, 0x826E, 0x9B42, 0x4E9B, 0x4F50, 0x53C9, 0x5506, 0x5D6F,
- 0x5DE6, 0x5DEE, 0x67FB, 0x6C99, 0x7473, 0x7802, 0x8A50, 0x9396,
- 0x88DF, 0x5750, 0x5EA7, 0x632B, 0x50B5, 0x50AC, 0x518D, 0x6700,
- 0x54C9, 0x585E, 0x59BB, 0x5BB0, 0x5F69, 0x624D, 0x63A1, 0x683D,
- 0x6B73, 0x6E08, 0x707D, 0x91C7, 0x7280, 0x7815, 0x7826, 0x796D,
- 0x658E, 0x7D30, 0x83DC, 0x88C1, 0x8F09, 0x969B, 0x5264, 0x5728,
- 0x6750, 0x7F6A, 0x8CA1, 0x51B4, 0x5742, 0x962A, 0x583A, 0x698A,
- 0x80B4, 0x54B2, 0x5D0E, 0x57FC, 0x7895, 0x9DFA, 0x4F5C, 0x524A,
- 0x548B, 0x643E, 0x6628, 0x6714, 0x67F5, 0x7A84, 0x7B56, 0x7D22,
- 0x932F, 0x685C, 0x9BAD, 0x7B39, 0x5319, 0x518A, 0x5237, 0x5BDF,
- 0x62F6, 0x64AE, 0x64E6, 0x672D, 0x6BBA, 0x85A9, 0x96D1, 0x7690,
- 0x9BD6, 0x634C, 0x9306, 0x9BAB, 0x76BF, 0x6652, 0x4E09, 0x5098,
- 0x53C2, 0x5C71, 0x60E8, 0x6492, 0x6563, 0x685F, 0x71E6, 0x73CA,
- 0x7523, 0x7B97, 0x7E82, 0x8695, 0x8B83, 0x8CDB, 0x9178, 0x9910,
- 0x65AC, 0x66AB, 0x6B8B, 0x4ED5, 0x4ED4, 0x4F3A, 0x4F7F, 0x523A,
- 0x53F8, 0x53F2, 0x55E3, 0x56DB, 0x58EB, 0x59CB, 0x59C9, 0x59FF,
- 0x5B50, 0x5C4D, 0x5E02, 0x5E2B, 0x5FD7, 0x601D, 0x6307, 0x652F,
- 0x5B5C, 0x65AF, 0x65BD, 0x65E8, 0x679D, 0x6B62, 0x6B7B, 0x6C0F,
- 0x7345, 0x7949, 0x79C1, 0x7CF8, 0x7D19, 0x7D2B, 0x80A2, 0x8102,
- 0x81F3, 0x8996, 0x8A5E, 0x8A69, 0x8A66, 0x8A8C, 0x8AEE, 0x8CC7,
- 0x8CDC, 0x96CC, 0x98FC, 0x6B6F, 0x4E8B, 0x4F3C, 0x4F8D, 0x5150,
- 0x5B57, 0x5BFA, 0x6148, 0x6301, 0x6642, 0x6B21, 0x6ECB, 0x6CBB,
- 0x723E, 0x74BD, 0x75D4, 0x78C1, 0x793A, 0x800C, 0x8033, 0x81EA,
- 0x8494, 0x8F9E, 0x6C50, 0x9E7F, 0x5F0F, 0x8B58, 0x9D2B, 0x7AFA,
- 0x8EF8, 0x5B8D, 0x96EB, 0x4E03, 0x53F1, 0x57F7, 0x5931, 0x5AC9,
- 0x5BA4, 0x6089, 0x6E7F, 0x6F06, 0x75BE, 0x8CEA, 0x5B9F, 0x8500,
- 0x7BE0, 0x5072, 0x67F4, 0x829D, 0x5C61, 0x854A, 0x7E1E, 0x820E,
- 0x5199, 0x5C04, 0x6368, 0x8D66, 0x659C, 0x716E, 0x793E, 0x7D17,
- 0x8005, 0x8B1D, 0x8ECA, 0x906E, 0x86C7, 0x90AA, 0x501F, 0x52FA,
- 0x5C3A, 0x6753, 0x707C, 0x7235, 0x914C, 0x91C8, 0x932B, 0x82E5,
- 0x5BC2, 0x5F31, 0x60F9, 0x4E3B, 0x53D6, 0x5B88, 0x624B, 0x6731,
- 0x6B8A, 0x72E9, 0x73E0, 0x7A2E, 0x816B, 0x8DA3, 0x9152, 0x9996,
- 0x5112, 0x53D7, 0x546A, 0x5BFF, 0x6388, 0x6A39, 0x7DAC, 0x9700,
- 0x56DA, 0x53CE, 0x5468, 0x5B97, 0x5C31, 0x5DDE, 0x4FEE, 0x6101,
- 0x62FE, 0x6D32, 0x79C0, 0x79CB, 0x7D42, 0x7E4D, 0x7FD2, 0x81ED,
- 0x821F, 0x8490, 0x8846, 0x8972, 0x8B90, 0x8E74, 0x8F2F, 0x9031,
- 0x914B, 0x916C, 0x96C6, 0x919C, 0x4EC0, 0x4F4F, 0x5145, 0x5341,
- 0x5F93, 0x620E, 0x67D4, 0x6C41, 0x6E0B, 0x7363, 0x7E26, 0x91CD,
- 0x9283, 0x53D4, 0x5919, 0x5BBF, 0x6DD1, 0x795D, 0x7E2E, 0x7C9B,
- 0x587E, 0x719F, 0x51FA, 0x8853, 0x8FF0, 0x4FCA, 0x5CFB, 0x6625,
- 0x77AC, 0x7AE3, 0x821C, 0x99FF, 0x51C6, 0x5FAA, 0x65EC, 0x696F,
- 0x6B89, 0x6DF3, 0x6E96, 0x6F64, 0x76FE, 0x7D14, 0x5DE1, 0x9075,
- 0x9187, 0x9806, 0x51E6, 0x521D, 0x6240, 0x6691, 0x66D9, 0x6E1A,
- 0x5EB6, 0x7DD2, 0x7F72, 0x66F8, 0x85AF, 0x85F7, 0x8AF8, 0x52A9,
- 0x53D9, 0x5973, 0x5E8F, 0x5F90, 0x6055, 0x92E4, 0x9664, 0x50B7,
- 0x511F, 0x52DD, 0x5320, 0x5347, 0x53EC, 0x54E8, 0x5546, 0x5531,
- 0x5617, 0x5968, 0x59BE, 0x5A3C, 0x5BB5, 0x5C06, 0x5C0F, 0x5C11,
- 0x5C1A, 0x5E84, 0x5E8A, 0x5EE0, 0x5F70, 0x627F, 0x6284, 0x62DB,
- 0x638C, 0x6377, 0x6607, 0x660C, 0x662D, 0x6676, 0x677E, 0x68A2,
- 0x6A1F, 0x6A35, 0x6CBC, 0x6D88, 0x6E09, 0x6E58, 0x713C, 0x7126,
- 0x7167, 0x75C7, 0x7701, 0x785D, 0x7901, 0x7965, 0x79F0, 0x7AE0,
- 0x7B11, 0x7CA7, 0x7D39, 0x8096, 0x83D6, 0x848B, 0x8549, 0x885D,
- 0x88F3, 0x8A1F, 0x8A3C, 0x8A54, 0x8A73, 0x8C61, 0x8CDE, 0x91A4,
- 0x9266, 0x937E, 0x9418, 0x969C, 0x9798, 0x4E0A, 0x4E08, 0x4E1E,
- 0x4E57, 0x5197, 0x5270, 0x57CE, 0x5834, 0x58CC, 0x5B22, 0x5E38,
- 0x60C5, 0x64FE, 0x6761, 0x6756, 0x6D44, 0x72B6, 0x7573, 0x7A63,
- 0x84B8, 0x8B72, 0x91B8, 0x9320, 0x5631, 0x57F4, 0x98FE, 0x62ED,
- 0x690D, 0x6B96, 0x71ED, 0x7E54, 0x8077, 0x8272, 0x89E6, 0x98DF,
- 0x8755, 0x8FB1, 0x5C3B, 0x4F38, 0x4FE1, 0x4FB5, 0x5507, 0x5A20,
- 0x5BDD, 0x5BE9, 0x5FC3, 0x614E, 0x632F, 0x65B0, 0x664B, 0x68EE,
- 0x699B, 0x6D78, 0x6DF1, 0x7533, 0x75B9, 0x771F, 0x795E, 0x79E6,
- 0x7D33, 0x81E3, 0x82AF, 0x85AA, 0x89AA, 0x8A3A, 0x8EAB, 0x8F9B,
- 0x9032, 0x91DD, 0x9707, 0x4EBA, 0x4EC1, 0x5203, 0x5875, 0x58EC,
- 0x5C0B, 0x751A, 0x5C3D, 0x814E, 0x8A0A, 0x8FC5, 0x9663, 0x976D,
- 0x7B25, 0x8ACF, 0x9808, 0x9162, 0x56F3, 0x53A8, 0x9017, 0x5439,
- 0x5782, 0x5E25, 0x63A8, 0x6C34, 0x708A, 0x7761, 0x7C8B, 0x7FE0,
- 0x8870, 0x9042, 0x9154, 0x9310, 0x9318, 0x968F, 0x745E, 0x9AC4,
- 0x5D07, 0x5D69, 0x6570, 0x67A2, 0x8DA8, 0x96DB, 0x636E, 0x6749,
- 0x6919, 0x83C5, 0x9817, 0x96C0, 0x88FE, 0x6F84, 0x647A, 0x5BF8,
- 0x4E16, 0x702C, 0x755D, 0x662F, 0x51C4, 0x5236, 0x52E2, 0x59D3,
- 0x5F81, 0x6027, 0x6210, 0x653F, 0x6574, 0x661F, 0x6674, 0x68F2,
- 0x6816, 0x6B63, 0x6E05, 0x7272, 0x751F, 0x76DB, 0x7CBE, 0x8056,
- 0x58F0, 0x88FD, 0x897F, 0x8AA0, 0x8A93, 0x8ACB, 0x901D, 0x9192,
- 0x9752, 0x9759, 0x6589, 0x7A0E, 0x8106, 0x96BB, 0x5E2D, 0x60DC,
- 0x621A, 0x65A5, 0x6614, 0x6790, 0x77F3, 0x7A4D, 0x7C4D, 0x7E3E,
- 0x810A, 0x8CAC, 0x8D64, 0x8DE1, 0x8E5F, 0x78A9, 0x5207, 0x62D9,
- 0x63A5, 0x6442, 0x6298, 0x8A2D, 0x7A83, 0x7BC0, 0x8AAC, 0x96EA,
- 0x7D76, 0x820C, 0x8749, 0x4ED9, 0x5148, 0x5343, 0x5360, 0x5BA3,
- 0x5C02, 0x5C16, 0x5DDD, 0x6226, 0x6247, 0x64B0, 0x6813, 0x6834,
- 0x6CC9, 0x6D45, 0x6D17, 0x67D3, 0x6F5C, 0x714E, 0x717D, 0x65CB,
- 0x7A7F, 0x7BAD, 0x7DDA, 0x7E4A, 0x7FA8, 0x817A, 0x821B, 0x8239,
- 0x85A6, 0x8A6E, 0x8CCE, 0x8DF5, 0x9078, 0x9077, 0x92AD, 0x9291,
- 0x9583, 0x9BAE, 0x524D, 0x5584, 0x6F38, 0x7136, 0x5168, 0x7985,
- 0x7E55, 0x81B3, 0x7CCE, 0x564C, 0x5851, 0x5CA8, 0x63AA, 0x66FE,
- 0x66FD, 0x695A, 0x72D9, 0x758F, 0x758E, 0x790E, 0x7956, 0x79DF,
- 0x7C97, 0x7D20, 0x7D44, 0x8607, 0x8A34, 0x963B, 0x9061, 0x9F20,
- 0x50E7, 0x5275, 0x53CC, 0x53E2, 0x5009, 0x55AA, 0x58EE, 0x594F,
- 0x723D, 0x5B8B, 0x5C64, 0x531D, 0x60E3, 0x60F3, 0x635C, 0x6383,
- 0x633F, 0x63BB, 0x64CD, 0x65E9, 0x66F9, 0x5DE3, 0x69CD, 0x69FD,
- 0x6F15, 0x71E5, 0x4E89, 0x75E9, 0x76F8, 0x7A93, 0x7CDF, 0x7DCF,
- 0x7D9C, 0x8061, 0x8349, 0x8358, 0x846C, 0x84BC, 0x85FB, 0x88C5,
- 0x8D70, 0x9001, 0x906D, 0x9397, 0x971C, 0x9A12, 0x50CF, 0x5897,
- 0x618E, 0x81D3, 0x8535, 0x8D08, 0x9020, 0x4FC3, 0x5074, 0x5247,
- 0x5373, 0x606F, 0x6349, 0x675F, 0x6E2C, 0x8DB3, 0x901F, 0x4FD7,
- 0x5C5E, 0x8CCA, 0x65CF, 0x7D9A, 0x5352, 0x8896, 0x5176, 0x63C3,
- 0x5B58, 0x5B6B, 0x5C0A, 0x640D, 0x6751, 0x905C, 0x4ED6, 0x591A,
- 0x592A, 0x6C70, 0x8A51, 0x553E, 0x5815, 0x59A5, 0x60F0, 0x6253,
- 0x67C1, 0x8235, 0x6955, 0x9640, 0x99C4, 0x9A28, 0x4F53, 0x5806,
- 0x5BFE, 0x8010, 0x5CB1, 0x5E2F, 0x5F85, 0x6020, 0x614B, 0x6234,
- 0x66FF, 0x6CF0, 0x6EDE, 0x80CE, 0x817F, 0x82D4, 0x888B, 0x8CB8,
- 0x9000, 0x902E, 0x968A, 0x9EDB, 0x9BDB, 0x4EE3, 0x53F0, 0x5927,
- 0x7B2C, 0x918D, 0x984C, 0x9DF9, 0x6EDD, 0x7027, 0x5353, 0x5544,
- 0x5B85, 0x6258, 0x629E, 0x62D3, 0x6CA2, 0x6FEF, 0x7422, 0x8A17,
- 0x9438, 0x6FC1, 0x8AFE, 0x8338, 0x51E7, 0x86F8, 0x53EA, 0x53E9,
- 0x4F46, 0x9054, 0x8FB0, 0x596A, 0x8131, 0x5DFD, 0x7AEA, 0x8FBF,
- 0x68DA, 0x8C37, 0x72F8, 0x9C48, 0x6A3D, 0x8AB0, 0x4E39, 0x5358,
- 0x5606, 0x5766, 0x62C5, 0x63A2, 0x65E6, 0x6B4E, 0x6DE1, 0x6E5B,
- 0x70AD, 0x77ED, 0x7AEF, 0x7BAA, 0x7DBB, 0x803D, 0x80C6, 0x86CB,
- 0x8A95, 0x935B, 0x56E3, 0x58C7, 0x5F3E, 0x65AD, 0x6696, 0x6A80,
- 0x6BB5, 0x7537, 0x8AC7, 0x5024, 0x77E5, 0x5730, 0x5F1B, 0x6065,
- 0x667A, 0x6C60, 0x75F4, 0x7A1A, 0x7F6E, 0x81F4, 0x8718, 0x9045,
- 0x99B3, 0x7BC9, 0x755C, 0x7AF9, 0x7B51, 0x84C4, 0x9010, 0x79E9,
- 0x7A92, 0x8336, 0x5AE1, 0x7740, 0x4E2D, 0x4EF2, 0x5B99, 0x5FE0,
- 0x62BD, 0x663C, 0x67F1, 0x6CE8, 0x866B, 0x8877, 0x8A3B, 0x914E,
- 0x92F3, 0x99D0, 0x6A17, 0x7026, 0x732A, 0x82E7, 0x8457, 0x8CAF,
- 0x4E01, 0x5146, 0x51CB, 0x558B, 0x5BF5, 0x5E16, 0x5E33, 0x5E81,
- 0x5F14, 0x5F35, 0x5F6B, 0x5FB4, 0x61F2, 0x6311, 0x66A2, 0x671D,
- 0x6F6E, 0x7252, 0x753A, 0x773A, 0x8074, 0x8139, 0x8178, 0x8776,
- 0x8ABF, 0x8ADC, 0x8D85, 0x8DF3, 0x929A, 0x9577, 0x9802, 0x9CE5,
- 0x52C5, 0x6357, 0x76F4, 0x6715, 0x6C88, 0x73CD, 0x8CC3, 0x93AE,
- 0x9673, 0x6D25, 0x589C, 0x690E, 0x69CC, 0x8FFD, 0x939A, 0x75DB,
- 0x901A, 0x585A, 0x6802, 0x63B4, 0x69FB, 0x4F43, 0x6F2C, 0x67D8,
- 0x8FBB, 0x8526, 0x7DB4, 0x9354, 0x693F, 0x6F70, 0x576A, 0x58F7,
- 0x5B2C, 0x7D2C, 0x722A, 0x540A, 0x91E3, 0x9DB4, 0x4EAD, 0x4F4E,
- 0x505C, 0x5075, 0x5243, 0x8C9E, 0x5448, 0x5824, 0x5B9A, 0x5E1D,
- 0x5E95, 0x5EAD, 0x5EF7, 0x5F1F, 0x608C, 0x62B5, 0x633A, 0x63D0,
- 0x68AF, 0x6C40, 0x7887, 0x798E, 0x7A0B, 0x7DE0, 0x8247, 0x8A02,
- 0x8AE6, 0x8E44, 0x9013, 0x90B8, 0x912D, 0x91D8, 0x9F0E, 0x6CE5,
- 0x6458, 0x64E2, 0x6575, 0x6EF4, 0x7684, 0x7B1B, 0x9069, 0x93D1,
- 0x6EBA, 0x54F2, 0x5FB9, 0x64A4, 0x8F4D, 0x8FED, 0x9244, 0x5178,
- 0x586B, 0x5929, 0x5C55, 0x5E97, 0x6DFB, 0x7E8F, 0x751C, 0x8CBC,
- 0x8EE2, 0x985B, 0x70B9, 0x4F1D, 0x6BBF, 0x6FB1, 0x7530, 0x96FB,
- 0x514E, 0x5410, 0x5835, 0x5857, 0x59AC, 0x5C60, 0x5F92, 0x6597,
- 0x675C, 0x6E21, 0x767B, 0x83DF, 0x8CED, 0x9014, 0x90FD, 0x934D,
- 0x7825, 0x783A, 0x52AA, 0x5EA6, 0x571F, 0x5974, 0x6012, 0x5012,
- 0x515A, 0x51AC, 0x51CD, 0x5200, 0x5510, 0x5854, 0x5858, 0x5957,
- 0x5B95, 0x5CF6, 0x5D8B, 0x60BC, 0x6295, 0x642D, 0x6771, 0x6843,
- 0x68BC, 0x68DF, 0x76D7, 0x6DD8, 0x6E6F, 0x6D9B, 0x706F, 0x71C8,
- 0x5F53, 0x75D8, 0x7977, 0x7B49, 0x7B54, 0x7B52, 0x7CD6, 0x7D71,
- 0x5230, 0x8463, 0x8569, 0x85E4, 0x8A0E, 0x8B04, 0x8C46, 0x8E0F,
- 0x9003, 0x900F, 0x9419, 0x9676, 0x982D, 0x9A30, 0x95D8, 0x50CD,
- 0x52D5, 0x540C, 0x5802, 0x5C0E, 0x61A7, 0x649E, 0x6D1E, 0x77B3,
- 0x7AE5, 0x80F4, 0x8404, 0x9053, 0x9285, 0x5CE0, 0x9D07, 0x533F,
- 0x5F97, 0x5FB3, 0x6D9C, 0x7279, 0x7763, 0x79BF, 0x7BE4, 0x6BD2,
- 0x72EC, 0x8AAD, 0x6803, 0x6A61, 0x51F8, 0x7A81, 0x6934, 0x5C4A,
- 0x9CF6, 0x82EB, 0x5BC5, 0x9149, 0x701E, 0x5678, 0x5C6F, 0x60C7,
- 0x6566, 0x6C8C, 0x8C5A, 0x9041, 0x9813, 0x5451, 0x66C7, 0x920D,
- 0x5948, 0x90A3, 0x5185, 0x4E4D, 0x51EA, 0x8599, 0x8B0E, 0x7058,
- 0x637A, 0x934B, 0x6962, 0x99B4, 0x7E04, 0x7577, 0x5357, 0x6960,
- 0x8EDF, 0x96E3, 0x6C5D, 0x4E8C, 0x5C3C, 0x5F10, 0x8FE9, 0x5302,
- 0x8CD1, 0x8089, 0x8679, 0x5EFF, 0x65E5, 0x4E73, 0x5165, 0x5982,
- 0x5C3F, 0x97EE, 0x4EFB, 0x598A, 0x5FCD, 0x8A8D, 0x6FE1, 0x79B0,
- 0x7962, 0x5BE7, 0x8471, 0x732B, 0x71B1, 0x5E74, 0x5FF5, 0x637B,
- 0x649A, 0x71C3, 0x7C98, 0x4E43, 0x5EFC, 0x4E4B, 0x57DC, 0x56A2,
- 0x60A9, 0x6FC3, 0x7D0D, 0x80FD, 0x8133, 0x81BF, 0x8FB2, 0x8997,
- 0x86A4, 0x5DF4, 0x628A, 0x64AD, 0x8987, 0x6777, 0x6CE2, 0x6D3E,
- 0x7436, 0x7834, 0x5A46, 0x7F75, 0x82AD, 0x99AC, 0x4FF3, 0x5EC3,
- 0x62DD, 0x6392, 0x6557, 0x676F, 0x76C3, 0x724C, 0x80CC, 0x80BA,
- 0x8F29, 0x914D, 0x500D, 0x57F9, 0x5A92, 0x6885, 0x6973, 0x7164,
- 0x72FD, 0x8CB7, 0x58F2, 0x8CE0, 0x966A, 0x9019, 0x877F, 0x79E4,
- 0x77E7, 0x8429, 0x4F2F, 0x5265, 0x535A, 0x62CD, 0x67CF, 0x6CCA,
- 0x767D, 0x7B94, 0x7C95, 0x8236, 0x8584, 0x8FEB, 0x66DD, 0x6F20,
- 0x7206, 0x7E1B, 0x83AB, 0x99C1, 0x9EA6, 0x51FD, 0x7BB1, 0x7872,
- 0x7BB8, 0x8087, 0x7B48, 0x6AE8, 0x5E61, 0x808C, 0x7551, 0x7560,
- 0x516B, 0x9262, 0x6E8C, 0x767A, 0x9197, 0x9AEA, 0x4F10, 0x7F70,
- 0x629C, 0x7B4F, 0x95A5, 0x9CE9, 0x567A, 0x5859, 0x86E4, 0x96BC,
- 0x4F34, 0x5224, 0x534A, 0x53CD, 0x53DB, 0x5E06, 0x642C, 0x6591,
- 0x677F, 0x6C3E, 0x6C4E, 0x7248, 0x72AF, 0x73ED, 0x7554, 0x7E41,
- 0x822C, 0x85E9, 0x8CA9, 0x7BC4, 0x91C6, 0x7169, 0x9812, 0x98EF,
- 0x633D, 0x6669, 0x756A, 0x76E4, 0x78D0, 0x8543, 0x86EE, 0x532A,
- 0x5351, 0x5426, 0x5983, 0x5E87, 0x5F7C, 0x60B2, 0x6249, 0x6279,
- 0x62AB, 0x6590, 0x6BD4, 0x6CCC, 0x75B2, 0x76AE, 0x7891, 0x79D8,
- 0x7DCB, 0x7F77, 0x80A5, 0x88AB, 0x8AB9, 0x8CBB, 0x907F, 0x975E,
- 0x98DB, 0x6A0B, 0x7C38, 0x5099, 0x5C3E, 0x5FAE, 0x6787, 0x6BD8,
- 0x7435, 0x7709, 0x7F8E, 0x9F3B, 0x67CA, 0x7A17, 0x5339, 0x758B,
- 0x9AED, 0x5F66, 0x819D, 0x83F1, 0x8098, 0x5F3C, 0x5FC5, 0x7562,
- 0x7B46, 0x903C, 0x6867, 0x59EB, 0x5A9B, 0x7D10, 0x767E, 0x8B2C,
- 0x4FF5, 0x5F6A, 0x6A19, 0x6C37, 0x6F02, 0x74E2, 0x7968, 0x8868,
- 0x8A55, 0x8C79, 0x5EDF, 0x63CF, 0x75C5, 0x79D2, 0x82D7, 0x9328,
- 0x92F2, 0x849C, 0x86ED, 0x9C2D, 0x54C1, 0x5F6C, 0x658C, 0x6D5C,
- 0x7015, 0x8CA7, 0x8CD3, 0x983B, 0x654F, 0x74F6, 0x4E0D, 0x4ED8,
- 0x57E0, 0x592B, 0x5A66, 0x5BCC, 0x51A8, 0x5E03, 0x5E9C, 0x6016,
- 0x6276, 0x6577, 0x65A7, 0x666E, 0x6D6E, 0x7236, 0x7B26, 0x8150,
- 0x819A, 0x8299, 0x8B5C, 0x8CA0, 0x8CE6, 0x8D74, 0x961C, 0x9644,
- 0x4FAE, 0x64AB, 0x6B66, 0x821E, 0x8461, 0x856A, 0x90E8, 0x5C01,
- 0x6953, 0x98A8, 0x847A, 0x8557, 0x4F0F, 0x526F, 0x5FA9, 0x5E45,
- 0x670D, 0x798F, 0x8179, 0x8907, 0x8986, 0x6DF5, 0x5F17, 0x6255,
- 0x6CB8, 0x4ECF, 0x7269, 0x9B92, 0x5206, 0x543B, 0x5674, 0x58B3,
- 0x61A4, 0x626E, 0x711A, 0x596E, 0x7C89, 0x7CDE, 0x7D1B, 0x96F0,
- 0x6587, 0x805E, 0x4E19, 0x4F75, 0x5175, 0x5840, 0x5E63, 0x5E73,
- 0x5F0A, 0x67C4, 0x4E26, 0x853D, 0x9589, 0x965B, 0x7C73, 0x9801,
- 0x50FB, 0x58C1, 0x7656, 0x78A7, 0x5225, 0x77A5, 0x8511, 0x7B86,
- 0x504F, 0x5909, 0x7247, 0x7BC7, 0x7DE8, 0x8FBA, 0x8FD4, 0x904D,
- 0x4FBF, 0x52C9, 0x5A29, 0x5F01, 0x97AD, 0x4FDD, 0x8217, 0x92EA,
- 0x5703, 0x6355, 0x6B69, 0x752B, 0x88DC, 0x8F14, 0x7A42, 0x52DF,
- 0x5893, 0x6155, 0x620A, 0x66AE, 0x6BCD, 0x7C3F, 0x83E9, 0x5023,
- 0x4FF8, 0x5305, 0x5446, 0x5831, 0x5949, 0x5B9D, 0x5CF0, 0x5CEF,
- 0x5D29, 0x5E96, 0x62B1, 0x6367, 0x653E, 0x65B9, 0x670B, 0x6CD5,
- 0x6CE1, 0x70F9, 0x7832, 0x7E2B, 0x80DE, 0x82B3, 0x840C, 0x84EC,
- 0x8702, 0x8912, 0x8A2A, 0x8C4A, 0x90A6, 0x92D2, 0x98FD, 0x9CF3,
- 0x9D6C, 0x4E4F, 0x4EA1, 0x508D, 0x5256, 0x574A, 0x59A8, 0x5E3D,
- 0x5FD8, 0x5FD9, 0x623F, 0x66B4, 0x671B, 0x67D0, 0x68D2, 0x5192,
- 0x7D21, 0x80AA, 0x81A8, 0x8B00, 0x8C8C, 0x8CBF, 0x927E, 0x9632,
- 0x5420, 0x982C, 0x5317, 0x50D5, 0x535C, 0x58A8, 0x64B2, 0x6734,
- 0x7267, 0x7766, 0x7A46, 0x91E6, 0x52C3, 0x6CA1, 0x6B86, 0x5800,
- 0x5E4C, 0x5954, 0x672C, 0x7FFB, 0x51E1, 0x76C6, 0x6469, 0x78E8,
- 0x9B54, 0x9EBB, 0x57CB, 0x59B9, 0x6627, 0x679A, 0x6BCE, 0x54E9,
- 0x69D9, 0x5E55, 0x819C, 0x6795, 0x9BAA, 0x67FE, 0x9C52, 0x685D,
- 0x4EA6, 0x4FE3, 0x53C8, 0x62B9, 0x672B, 0x6CAB, 0x8FC4, 0x4FAD,
- 0x7E6D, 0x9EBF, 0x4E07, 0x6162, 0x6E80, 0x6F2B, 0x8513, 0x5473,
- 0x672A, 0x9B45, 0x5DF3, 0x7B95, 0x5CAC, 0x5BC6, 0x871C, 0x6E4A,
- 0x84D1, 0x7A14, 0x8108, 0x5999, 0x7C8D, 0x6C11, 0x7720, 0x52D9,
- 0x5922, 0x7121, 0x725F, 0x77DB, 0x9727, 0x9D61, 0x690B, 0x5A7F,
- 0x5A18, 0x51A5, 0x540D, 0x547D, 0x660E, 0x76DF, 0x8FF7, 0x9298,
- 0x9CF4, 0x59EA, 0x725D, 0x6EC5, 0x514D, 0x68C9, 0x7DBF, 0x7DEC,
- 0x9762, 0x9EBA, 0x6478, 0x6A21, 0x8302, 0x5984, 0x5B5F, 0x6BDB,
- 0x731B, 0x76F2, 0x7DB2, 0x8017, 0x8499, 0x5132, 0x6728, 0x9ED9,
- 0x76EE, 0x6762, 0x52FF, 0x9905, 0x5C24, 0x623B, 0x7C7E, 0x8CB0,
- 0x554F, 0x60B6, 0x7D0B, 0x9580, 0x5301, 0x4E5F, 0x51B6, 0x591C,
- 0x723A, 0x8036, 0x91CE, 0x5F25, 0x77E2, 0x5384, 0x5F79, 0x7D04,
- 0x85AC, 0x8A33, 0x8E8D, 0x9756, 0x67F3, 0x85AE, 0x9453, 0x6109,
- 0x6108, 0x6CB9, 0x7652, 0x8AED, 0x8F38, 0x552F, 0x4F51, 0x512A,
- 0x52C7, 0x53CB, 0x5BA5, 0x5E7D, 0x60A0, 0x6182, 0x63D6, 0x6709,
- 0x67DA, 0x6E67, 0x6D8C, 0x7336, 0x7337, 0x7531, 0x7950, 0x88D5,
- 0x8A98, 0x904A, 0x9091, 0x90F5, 0x96C4, 0x878D, 0x5915, 0x4E88,
- 0x4F59, 0x4E0E, 0x8A89, 0x8F3F, 0x9810, 0x50AD, 0x5E7C, 0x5996,
- 0x5BB9, 0x5EB8, 0x63DA, 0x63FA, 0x64C1, 0x66DC, 0x694A, 0x69D8,
- 0x6D0B, 0x6EB6, 0x7194, 0x7528, 0x7AAF, 0x7F8A, 0x8000, 0x8449,
- 0x84C9, 0x8981, 0x8B21, 0x8E0A, 0x9065, 0x967D, 0x990A, 0x617E,
- 0x6291, 0x6B32, 0x6C83, 0x6D74, 0x7FCC, 0x7FFC, 0x6DC0, 0x7F85,
- 0x87BA, 0x88F8, 0x6765, 0x83B1, 0x983C, 0x96F7, 0x6D1B, 0x7D61,
- 0x843D, 0x916A, 0x4E71, 0x5375, 0x5D50, 0x6B04, 0x6FEB, 0x85CD,
- 0x862D, 0x89A7, 0x5229, 0x540F, 0x5C65, 0x674E, 0x68A8, 0x7406,
- 0x7483, 0x75E2, 0x88CF, 0x88E1, 0x91CC, 0x96E2, 0x9678, 0x5F8B,
- 0x7387, 0x7ACB, 0x844E, 0x63A0, 0x7565, 0x5289, 0x6D41, 0x6E9C,
- 0x7409, 0x7559, 0x786B, 0x7C92, 0x9686, 0x7ADC, 0x9F8D, 0x4FB6,
- 0x616E, 0x65C5, 0x865C, 0x4E86, 0x4EAE, 0x50DA, 0x4E21, 0x51CC,
- 0x5BEE, 0x6599, 0x6881, 0x6DBC, 0x731F, 0x7642, 0x77AD, 0x7A1C,
- 0x7CE7, 0x826F, 0x8AD2, 0x907C, 0x91CF, 0x9675, 0x9818, 0x529B,
- 0x7DD1, 0x502B, 0x5398, 0x6797, 0x6DCB, 0x71D0, 0x7433, 0x81E8,
- 0x8F2A, 0x96A3, 0x9C57, 0x9E9F, 0x7460, 0x5841, 0x6D99, 0x7D2F,
- 0x985E, 0x4EE4, 0x4F36, 0x4F8B, 0x51B7, 0x52B1, 0x5DBA, 0x601C,
- 0x73B2, 0x793C, 0x82D3, 0x9234, 0x96B7, 0x96F6, 0x970A, 0x9E97,
- 0x9F62, 0x66A6, 0x6B74, 0x5217, 0x52A3, 0x70C8, 0x88C2, 0x5EC9,
- 0x604B, 0x6190, 0x6F23, 0x7149, 0x7C3E, 0x7DF4, 0x806F, 0x84EE,
- 0x9023, 0x932C, 0x5442, 0x9B6F, 0x6AD3, 0x7089, 0x8CC2, 0x8DEF,
- 0x9732, 0x52B4, 0x5A41, 0x5ECA, 0x5F04, 0x6717, 0x697C, 0x6994,
- 0x6D6A, 0x6F0F, 0x7262, 0x72FC, 0x7BED, 0x8001, 0x807E, 0x874B,
- 0x90CE, 0x516D, 0x9E93, 0x7984, 0x808B, 0x9332, 0x8AD6, 0x502D,
- 0x548C, 0x8A71, 0x6B6A, 0x8CC4, 0x8107, 0x60D1, 0x67A0, 0x9DF2,
- 0x4E99, 0x4E98, 0x9C10, 0x8A6B, 0x85C1, 0x8568, 0x6900, 0x6E7E,
- 0x7897, 0x8155, 0x5F0C, 0x4E10, 0x4E15, 0x4E2A, 0x4E31, 0x4E36,
- 0x4E3C, 0x4E3F, 0x4E42, 0x4E56, 0x4E58, 0x4E82, 0x4E85, 0x8C6B,
- 0x4E8A, 0x8212, 0x5F0D, 0x4E8E, 0x4E9E, 0x4E9F, 0x4EA0, 0x4EA2,
- 0x4EB0, 0x4EB3, 0x4EB6, 0x4ECE, 0x4ECD, 0x4EC4, 0x4EC6, 0x4EC2,
- 0x4ED7, 0x4EDE, 0x4EED, 0x4EDF, 0x4EF7, 0x4F09, 0x4F5A, 0x4F30,
- 0x4F5B, 0x4F5D, 0x4F57, 0x4F47, 0x4F76, 0x4F88, 0x4F8F, 0x4F98,
- 0x4F7B, 0x4F69, 0x4F70, 0x4F91, 0x4F6F, 0x4F86, 0x4F96, 0x5118,
- 0x4FD4, 0x4FDF, 0x4FCE, 0x4FD8, 0x4FDB, 0x4FD1, 0x4FDA, 0x4FD0,
- 0x4FE4, 0x4FE5, 0x501A, 0x5028, 0x5014, 0x502A, 0x5025, 0x5005,
- 0x4F1C, 0x4FF6, 0x5021, 0x5029, 0x502C, 0x4FFE, 0x4FEF, 0x5011,
- 0x5006, 0x5043, 0x5047, 0x6703, 0x5055, 0x5050, 0x5048, 0x505A,
- 0x5056, 0x506C, 0x5078, 0x5080, 0x509A, 0x5085, 0x50B4, 0x50B2,
- 0x50C9, 0x50CA, 0x50B3, 0x50C2, 0x50D6, 0x50DE, 0x50E5, 0x50ED,
- 0x50E3, 0x50EE, 0x50F9, 0x50F5, 0x5109, 0x5101, 0x5102, 0x5116,
- 0x5115, 0x5114, 0x511A, 0x5121, 0x513A, 0x5137, 0x513C, 0x513B,
- 0x513F, 0x5140, 0x5152, 0x514C, 0x5154, 0x5162, 0x7AF8, 0x5169,
- 0x516A, 0x516E, 0x5180, 0x5182, 0x56D8, 0x518C, 0x5189, 0x518F,
- 0x5191, 0x5193, 0x5195, 0x5196, 0x51A4, 0x51A6, 0x51A2, 0x51A9,
- 0x51AA, 0x51AB, 0x51B3, 0x51B1, 0x51B2, 0x51B0, 0x51B5, 0x51BD,
- 0x51C5, 0x51C9, 0x51DB, 0x51E0, 0x8655, 0x51E9, 0x51ED, 0x51F0,
- 0x51F5, 0x51FE, 0x5204, 0x520B, 0x5214, 0x520E, 0x5227, 0x522A,
- 0x522E, 0x5233, 0x5239, 0x524F, 0x5244, 0x524B, 0x524C, 0x525E,
- 0x5254, 0x526A, 0x5274, 0x5269, 0x5273, 0x527F, 0x527D, 0x528D,
- 0x5294, 0x5292, 0x5271, 0x5288, 0x5291, 0x8FA8, 0x8FA7, 0x52AC,
- 0x52AD, 0x52BC, 0x52B5, 0x52C1, 0x52CD, 0x52D7, 0x52DE, 0x52E3,
- 0x52E6, 0x98ED, 0x52E0, 0x52F3, 0x52F5, 0x52F8, 0x52F9, 0x5306,
- 0x5308, 0x7538, 0x530D, 0x5310, 0x530F, 0x5315, 0x531A, 0x5323,
- 0x532F, 0x5331, 0x5333, 0x5338, 0x5340, 0x5346, 0x5345, 0x4E17,
- 0x5349, 0x534D, 0x51D6, 0x535E, 0x5369, 0x536E, 0x5918, 0x537B,
- 0x5377, 0x5382, 0x5396, 0x53A0, 0x53A6, 0x53A5, 0x53AE, 0x53B0,
- 0x53B6, 0x53C3, 0x7C12, 0x96D9, 0x53DF, 0x66FC, 0x71EE, 0x53EE,
- 0x53E8, 0x53ED, 0x53FA, 0x5401, 0x543D, 0x5440, 0x542C, 0x542D,
- 0x543C, 0x542E, 0x5436, 0x5429, 0x541D, 0x544E, 0x548F, 0x5475,
- 0x548E, 0x545F, 0x5471, 0x5477, 0x5470, 0x5492, 0x547B, 0x5480,
- 0x5476, 0x5484, 0x5490, 0x5486, 0x54C7, 0x54A2, 0x54B8, 0x54A5,
- 0x54AC, 0x54C4, 0x54C8, 0x54A8, 0x54AB, 0x54C2, 0x54A4, 0x54BE,
- 0x54BC, 0x54D8, 0x54E5, 0x54E6, 0x550F, 0x5514, 0x54FD, 0x54EE,
- 0x54ED, 0x54FA, 0x54E2, 0x5539, 0x5540, 0x5563, 0x554C, 0x552E,
- 0x555C, 0x5545, 0x5556, 0x5557, 0x5538, 0x5533, 0x555D, 0x5599,
- 0x5580, 0x54AF, 0x558A, 0x559F, 0x557B, 0x557E, 0x5598, 0x559E,
- 0x55AE, 0x557C, 0x5583, 0x55A9, 0x5587, 0x55A8, 0x55DA, 0x55C5,
- 0x55DF, 0x55C4, 0x55DC, 0x55E4, 0x55D4, 0x5614, 0x55F7, 0x5616,
- 0x55FE, 0x55FD, 0x561B, 0x55F9, 0x564E, 0x5650, 0x71DF, 0x5634,
- 0x5636, 0x5632, 0x5638, 0x566B, 0x5664, 0x562F, 0x566C, 0x566A,
- 0x5686, 0x5680, 0x568A, 0x56A0, 0x5694, 0x568F, 0x56A5, 0x56AE,
- 0x56B6, 0x56B4, 0x56C2, 0x56BC, 0x56C1, 0x56C3, 0x56C0, 0x56C8,
- 0x56CE, 0x56D1, 0x56D3, 0x56D7, 0x56EE, 0x56F9, 0x5700, 0x56FF,
- 0x5704, 0x5709, 0x5708, 0x570B, 0x570D, 0x5713, 0x5718, 0x5716,
- 0x55C7, 0x571C, 0x5726, 0x5737, 0x5738, 0x574E, 0x573B, 0x5740,
- 0x574F, 0x5769, 0x57C0, 0x5788, 0x5761, 0x577F, 0x5789, 0x5793,
- 0x57A0, 0x57B3, 0x57A4, 0x57AA, 0x57B0, 0x57C3, 0x57C6, 0x57D4,
- 0x57D2, 0x57D3, 0x580A, 0x57D6, 0x57E3, 0x580B, 0x5819, 0x581D,
- 0x5872, 0x5821, 0x5862, 0x584B, 0x5870, 0x6BC0, 0x5852, 0x583D,
- 0x5879, 0x5885, 0x58B9, 0x589F, 0x58AB, 0x58BA, 0x58DE, 0x58BB,
- 0x58B8, 0x58AE, 0x58C5, 0x58D3, 0x58D1, 0x58D7, 0x58D9, 0x58D8,
- 0x58E5, 0x58DC, 0x58E4, 0x58DF, 0x58EF, 0x58FA, 0x58F9, 0x58FB,
- 0x58FC, 0x58FD, 0x5902, 0x590A, 0x5910, 0x591B, 0x68A6, 0x5925,
- 0x592C, 0x592D, 0x5932, 0x5938, 0x593E, 0x7AD2, 0x5955, 0x5950,
- 0x594E, 0x595A, 0x5958, 0x5962, 0x5960, 0x5967, 0x596C, 0x5969,
- 0x5978, 0x5981, 0x599D, 0x4F5E, 0x4FAB, 0x59A3, 0x59B2, 0x59C6,
- 0x59E8, 0x59DC, 0x598D, 0x59D9, 0x59DA, 0x5A25, 0x5A1F, 0x5A11,
- 0x5A1C, 0x5A09, 0x5A1A, 0x5A40, 0x5A6C, 0x5A49, 0x5A35, 0x5A36,
- 0x5A62, 0x5A6A, 0x5A9A, 0x5ABC, 0x5ABE, 0x5ACB, 0x5AC2, 0x5ABD,
- 0x5AE3, 0x5AD7, 0x5AE6, 0x5AE9, 0x5AD6, 0x5AFA, 0x5AFB, 0x5B0C,
- 0x5B0B, 0x5B16, 0x5B32, 0x5AD0, 0x5B2A, 0x5B36, 0x5B3E, 0x5B43,
- 0x5B45, 0x5B40, 0x5B51, 0x5B55, 0x5B5A, 0x5B5B, 0x5B65, 0x5B69,
- 0x5B70, 0x5B73, 0x5B75, 0x5B78, 0x6588, 0x5B7A, 0x5B80, 0x5B83,
- 0x5BA6, 0x5BB8, 0x5BC3, 0x5BC7, 0x5BC9, 0x5BD4, 0x5BD0, 0x5BE4,
- 0x5BE6, 0x5BE2, 0x5BDE, 0x5BE5, 0x5BEB, 0x5BF0, 0x5BF6, 0x5BF3,
- 0x5C05, 0x5C07, 0x5C08, 0x5C0D, 0x5C13, 0x5C20, 0x5C22, 0x5C28,
- 0x5C38, 0x5C39, 0x5C41, 0x5C46, 0x5C4E, 0x5C53, 0x5C50, 0x5C4F,
- 0x5B71, 0x5C6C, 0x5C6E, 0x4E62, 0x5C76, 0x5C79, 0x5C8C, 0x5C91,
- 0x5C94, 0x599B, 0x5CAB, 0x5CBB, 0x5CB6, 0x5CBC, 0x5CB7, 0x5CC5,
- 0x5CBE, 0x5CC7, 0x5CD9, 0x5CE9, 0x5CFD, 0x5CFA, 0x5CED, 0x5D8C,
- 0x5CEA, 0x5D0B, 0x5D15, 0x5D17, 0x5D5C, 0x5D1F, 0x5D1B, 0x5D11,
- 0x5D14, 0x5D22, 0x5D1A, 0x5D19, 0x5D18, 0x5D4C, 0x5D52, 0x5D4E,
- 0x5D4B, 0x5D6C, 0x5D73, 0x5D76, 0x5D87, 0x5D84, 0x5D82, 0x5DA2,
- 0x5D9D, 0x5DAC, 0x5DAE, 0x5DBD, 0x5D90, 0x5DB7, 0x5DBC, 0x5DC9,
- 0x5DCD, 0x5DD3, 0x5DD2, 0x5DD6, 0x5DDB, 0x5DEB, 0x5DF2, 0x5DF5,
- 0x5E0B, 0x5E1A, 0x5E19, 0x5E11, 0x5E1B, 0x5E36, 0x5E37, 0x5E44,
- 0x5E43, 0x5E40, 0x5E4E, 0x5E57, 0x5E54, 0x5E5F, 0x5E62, 0x5E64,
- 0x5E47, 0x5E75, 0x5E76, 0x5E7A, 0x9EBC, 0x5E7F, 0x5EA0, 0x5EC1,
- 0x5EC2, 0x5EC8, 0x5ED0, 0x5ECF, 0x5ED6, 0x5EE3, 0x5EDD, 0x5EDA,
- 0x5EDB, 0x5EE2, 0x5EE1, 0x5EE8, 0x5EE9, 0x5EEC, 0x5EF1, 0x5EF3,
- 0x5EF0, 0x5EF4, 0x5EF8, 0x5EFE, 0x5F03, 0x5F09, 0x5F5D, 0x5F5C,
- 0x5F0B, 0x5F11, 0x5F16, 0x5F29, 0x5F2D, 0x5F38, 0x5F41, 0x5F48,
- 0x5F4C, 0x5F4E, 0x5F2F, 0x5F51, 0x5F56, 0x5F57, 0x5F59, 0x5F61,
- 0x5F6D, 0x5F73, 0x5F77, 0x5F83, 0x5F82, 0x5F7F, 0x5F8A, 0x5F88,
- 0x5F91, 0x5F87, 0x5F9E, 0x5F99, 0x5F98, 0x5FA0, 0x5FA8, 0x5FAD,
- 0x5FBC, 0x5FD6, 0x5FFB, 0x5FE4, 0x5FF8, 0x5FF1, 0x5FDD, 0x60B3,
- 0x5FFF, 0x6021, 0x6060, 0x6019, 0x6010, 0x6029, 0x600E, 0x6031,
- 0x601B, 0x6015, 0x602B, 0x6026, 0x600F, 0x603A, 0x605A, 0x6041,
- 0x606A, 0x6077, 0x605F, 0x604A, 0x6046, 0x604D, 0x6063, 0x6043,
- 0x6064, 0x6042, 0x606C, 0x606B, 0x6059, 0x6081, 0x608D, 0x60E7,
- 0x6083, 0x609A, 0x6084, 0x609B, 0x6096, 0x6097, 0x6092, 0x60A7,
- 0x608B, 0x60E1, 0x60B8, 0x60E0, 0x60D3, 0x60B4, 0x5FF0, 0x60BD,
- 0x60C6, 0x60B5, 0x60D8, 0x614D, 0x6115, 0x6106, 0x60F6, 0x60F7,
- 0x6100, 0x60F4, 0x60FA, 0x6103, 0x6121, 0x60FB, 0x60F1, 0x610D,
- 0x610E, 0x6147, 0x613E, 0x6128, 0x6127, 0x614A, 0x613F, 0x613C,
- 0x612C, 0x6134, 0x613D, 0x6142, 0x6144, 0x6173, 0x6177, 0x6158,
- 0x6159, 0x615A, 0x616B, 0x6174, 0x616F, 0x6165, 0x6171, 0x615F,
- 0x615D, 0x6153, 0x6175, 0x6199, 0x6196, 0x6187, 0x61AC, 0x6194,
- 0x619A, 0x618A, 0x6191, 0x61AB, 0x61AE, 0x61CC, 0x61CA, 0x61C9,
- 0x61F7, 0x61C8, 0x61C3, 0x61C6, 0x61BA, 0x61CB, 0x7F79, 0x61CD,
- 0x61E6, 0x61E3, 0x61F6, 0x61FA, 0x61F4, 0x61FF, 0x61FD, 0x61FC,
- 0x61FE, 0x6200, 0x6208, 0x6209, 0x620D, 0x620C, 0x6214, 0x621B,
- 0x621E, 0x6221, 0x622A, 0x622E, 0x6230, 0x6232, 0x6233, 0x6241,
- 0x624E, 0x625E, 0x6263, 0x625B, 0x6260, 0x6268, 0x627C, 0x6282,
- 0x6289, 0x627E, 0x6292, 0x6293, 0x6296, 0x62D4, 0x6283, 0x6294,
- 0x62D7, 0x62D1, 0x62BB, 0x62CF, 0x62FF, 0x62C6, 0x64D4, 0x62C8,
- 0x62DC, 0x62CC, 0x62CA, 0x62C2, 0x62C7, 0x629B, 0x62C9, 0x630C,
- 0x62EE, 0x62F1, 0x6327, 0x6302, 0x6308, 0x62EF, 0x62F5, 0x6350,
- 0x633E, 0x634D, 0x641C, 0x634F, 0x6396, 0x638E, 0x6380, 0x63AB,
- 0x6376, 0x63A3, 0x638F, 0x6389, 0x639F, 0x63B5, 0x636B, 0x6369,
- 0x63BE, 0x63E9, 0x63C0, 0x63C6, 0x63E3, 0x63C9, 0x63D2, 0x63F6,
- 0x63C4, 0x6416, 0x6434, 0x6406, 0x6413, 0x6426, 0x6436, 0x651D,
- 0x6417, 0x6428, 0x640F, 0x6467, 0x646F, 0x6476, 0x644E, 0x652A,
- 0x6495, 0x6493, 0x64A5, 0x64A9, 0x6488, 0x64BC, 0x64DA, 0x64D2,
- 0x64C5, 0x64C7, 0x64BB, 0x64D8, 0x64C2, 0x64F1, 0x64E7, 0x8209,
- 0x64E0, 0x64E1, 0x62AC, 0x64E3, 0x64EF, 0x652C, 0x64F6, 0x64F4,
- 0x64F2, 0x64FA, 0x6500, 0x64FD, 0x6518, 0x651C, 0x6505, 0x6524,
- 0x6523, 0x652B, 0x6534, 0x6535, 0x6537, 0x6536, 0x6538, 0x754B,
- 0x6548, 0x6556, 0x6555, 0x654D, 0x6558, 0x655E, 0x655D, 0x6572,
- 0x6578, 0x6582, 0x6583, 0x8B8A, 0x659B, 0x659F, 0x65AB, 0x65B7,
- 0x65C3, 0x65C6, 0x65C1, 0x65C4, 0x65CC, 0x65D2, 0x65DB, 0x65D9,
- 0x65E0, 0x65E1, 0x65F1, 0x6772, 0x660A, 0x6603, 0x65FB, 0x6773,
- 0x6635, 0x6636, 0x6634, 0x661C, 0x664F, 0x6644, 0x6649, 0x6641,
- 0x665E, 0x665D, 0x6664, 0x6667, 0x6668, 0x665F, 0x6662, 0x6670,
- 0x6683, 0x6688, 0x668E, 0x6689, 0x6684, 0x6698, 0x669D, 0x66C1,
- 0x66B9, 0x66C9, 0x66BE, 0x66BC, 0x66C4, 0x66B8, 0x66D6, 0x66DA,
- 0x66E0, 0x663F, 0x66E6, 0x66E9, 0x66F0, 0x66F5, 0x66F7, 0x670F,
- 0x6716, 0x671E, 0x6726, 0x6727, 0x9738, 0x672E, 0x673F, 0x6736,
- 0x6741, 0x6738, 0x6737, 0x6746, 0x675E, 0x6760, 0x6759, 0x6763,
- 0x6764, 0x6789, 0x6770, 0x67A9, 0x677C, 0x676A, 0x678C, 0x678B,
- 0x67A6, 0x67A1, 0x6785, 0x67B7, 0x67EF, 0x67B4, 0x67EC, 0x67B3,
- 0x67E9, 0x67B8, 0x67E4, 0x67DE, 0x67DD, 0x67E2, 0x67EE, 0x67B9,
- 0x67CE, 0x67C6, 0x67E7, 0x6A9C, 0x681E, 0x6846, 0x6829, 0x6840,
- 0x684D, 0x6832, 0x684E, 0x68B3, 0x682B, 0x6859, 0x6863, 0x6877,
- 0x687F, 0x689F, 0x688F, 0x68AD, 0x6894, 0x689D, 0x689B, 0x6883,
- 0x6AAE, 0x68B9, 0x6874, 0x68B5, 0x68A0, 0x68BA, 0x690F, 0x688D,
- 0x687E, 0x6901, 0x68CA, 0x6908, 0x68D8, 0x6922, 0x6926, 0x68E1,
- 0x690C, 0x68CD, 0x68D4, 0x68E7, 0x68D5, 0x6936, 0x6912, 0x6904,
- 0x68D7, 0x68E3, 0x6925, 0x68F9, 0x68E0, 0x68EF, 0x6928, 0x692A,
- 0x691A, 0x6923, 0x6921, 0x68C6, 0x6979, 0x6977, 0x695C, 0x6978,
- 0x696B, 0x6954, 0x697E, 0x696E, 0x6939, 0x6974, 0x693D, 0x6959,
- 0x6930, 0x6961, 0x695E, 0x695D, 0x6981, 0x696A, 0x69B2, 0x69AE,
- 0x69D0, 0x69BF, 0x69C1, 0x69D3, 0x69BE, 0x69CE, 0x5BE8, 0x69CA,
- 0x69DD, 0x69BB, 0x69C3, 0x69A7, 0x6A2E, 0x6991, 0x69A0, 0x699C,
- 0x6995, 0x69B4, 0x69DE, 0x69E8, 0x6A02, 0x6A1B, 0x69FF, 0x6B0A,
- 0x69F9, 0x69F2, 0x69E7, 0x6A05, 0x69B1, 0x6A1E, 0x69ED, 0x6A14,
- 0x69EB, 0x6A0A, 0x6A12, 0x6AC1, 0x6A23, 0x6A13, 0x6A44, 0x6A0C,
- 0x6A72, 0x6A36, 0x6A78, 0x6A47, 0x6A62, 0x6A59, 0x6A66, 0x6A48,
- 0x6A38, 0x6A22, 0x6A90, 0x6A8D, 0x6AA0, 0x6A84, 0x6AA2, 0x6AA3,
- 0x6A97, 0x8617, 0x6ABB, 0x6AC3, 0x6AC2, 0x6AB8, 0x6AB3, 0x6AAC,
- 0x6ADE, 0x6AD1, 0x6ADF, 0x6AAA, 0x6ADA, 0x6AEA, 0x6AFB, 0x6B05,
- 0x8616, 0x6AFA, 0x6B12, 0x6B16, 0x9B31, 0x6B1F, 0x6B38, 0x6B37,
- 0x76DC, 0x6B39, 0x98EE, 0x6B47, 0x6B43, 0x6B49, 0x6B50, 0x6B59,
- 0x6B54, 0x6B5B, 0x6B5F, 0x6B61, 0x6B78, 0x6B79, 0x6B7F, 0x6B80,
- 0x6B84, 0x6B83, 0x6B8D, 0x6B98, 0x6B95, 0x6B9E, 0x6BA4, 0x6BAA,
- 0x6BAB, 0x6BAF, 0x6BB2, 0x6BB1, 0x6BB3, 0x6BB7, 0x6BBC, 0x6BC6,
- 0x6BCB, 0x6BD3, 0x6BDF, 0x6BEC, 0x6BEB, 0x6BF3, 0x6BEF, 0x9EBE,
- 0x6C08, 0x6C13, 0x6C14, 0x6C1B, 0x6C24, 0x6C23, 0x6C5E, 0x6C55,
- 0x6C62, 0x6C6A, 0x6C82, 0x6C8D, 0x6C9A, 0x6C81, 0x6C9B, 0x6C7E,
- 0x6C68, 0x6C73, 0x6C92, 0x6C90, 0x6CC4, 0x6CF1, 0x6CD3, 0x6CBD,
- 0x6CD7, 0x6CC5, 0x6CDD, 0x6CAE, 0x6CB1, 0x6CBE, 0x6CBA, 0x6CDB,
- 0x6CEF, 0x6CD9, 0x6CEA, 0x6D1F, 0x884D, 0x6D36, 0x6D2B, 0x6D3D,
- 0x6D38, 0x6D19, 0x6D35, 0x6D33, 0x6D12, 0x6D0C, 0x6D63, 0x6D93,
- 0x6D64, 0x6D5A, 0x6D79, 0x6D59, 0x6D8E, 0x6D95, 0x6FE4, 0x6D85,
- 0x6DF9, 0x6E15, 0x6E0A, 0x6DB5, 0x6DC7, 0x6DE6, 0x6DB8, 0x6DC6,
- 0x6DEC, 0x6DDE, 0x6DCC, 0x6DE8, 0x6DD2, 0x6DC5, 0x6DFA, 0x6DD9,
- 0x6DE4, 0x6DD5, 0x6DEA, 0x6DEE, 0x6E2D, 0x6E6E, 0x6E2E, 0x6E19,
- 0x6E72, 0x6E5F, 0x6E3E, 0x6E23, 0x6E6B, 0x6E2B, 0x6E76, 0x6E4D,
- 0x6E1F, 0x6E43, 0x6E3A, 0x6E4E, 0x6E24, 0x6EFF, 0x6E1D, 0x6E38,
- 0x6E82, 0x6EAA, 0x6E98, 0x6EC9, 0x6EB7, 0x6ED3, 0x6EBD, 0x6EAF,
- 0x6EC4, 0x6EB2, 0x6ED4, 0x6ED5, 0x6E8F, 0x6EA5, 0x6EC2, 0x6E9F,
- 0x6F41, 0x6F11, 0x704C, 0x6EEC, 0x6EF8, 0x6EFE, 0x6F3F, 0x6EF2,
- 0x6F31, 0x6EEF, 0x6F32, 0x6ECC, 0x6F3E, 0x6F13, 0x6EF7, 0x6F86,
- 0x6F7A, 0x6F78, 0x6F81, 0x6F80, 0x6F6F, 0x6F5B, 0x6FF3, 0x6F6D,
- 0x6F82, 0x6F7C, 0x6F58, 0x6F8E, 0x6F91, 0x6FC2, 0x6F66, 0x6FB3,
- 0x6FA3, 0x6FA1, 0x6FA4, 0x6FB9, 0x6FC6, 0x6FAA, 0x6FDF, 0x6FD5,
- 0x6FEC, 0x6FD4, 0x6FD8, 0x6FF1, 0x6FEE, 0x6FDB, 0x7009, 0x700B,
- 0x6FFA, 0x7011, 0x7001, 0x700F, 0x6FFE, 0x701B, 0x701A, 0x6F74,
- 0x701D, 0x7018, 0x701F, 0x7030, 0x703E, 0x7032, 0x7051, 0x7063,
- 0x7099, 0x7092, 0x70AF, 0x70F1, 0x70AC, 0x70B8, 0x70B3, 0x70AE,
- 0x70DF, 0x70CB, 0x70DD, 0x70D9, 0x7109, 0x70FD, 0x711C, 0x7119,
- 0x7165, 0x7155, 0x7188, 0x7166, 0x7162, 0x714C, 0x7156, 0x716C,
- 0x718F, 0x71FB, 0x7184, 0x7195, 0x71A8, 0x71AC, 0x71D7, 0x71B9,
- 0x71BE, 0x71D2, 0x71C9, 0x71D4, 0x71CE, 0x71E0, 0x71EC, 0x71E7,
- 0x71F5, 0x71FC, 0x71F9, 0x71FF, 0x720D, 0x7210, 0x721B, 0x7228,
- 0x722D, 0x722C, 0x7230, 0x7232, 0x723B, 0x723C, 0x723F, 0x7240,
- 0x7246, 0x724B, 0x7258, 0x7274, 0x727E, 0x7282, 0x7281, 0x7287,
- 0x7292, 0x7296, 0x72A2, 0x72A7, 0x72B9, 0x72B2, 0x72C3, 0x72C6,
- 0x72C4, 0x72CE, 0x72D2, 0x72E2, 0x72E0, 0x72E1, 0x72F9, 0x72F7,
- 0x500F, 0x7317, 0x730A, 0x731C, 0x7316, 0x731D, 0x7334, 0x732F,
- 0x7329, 0x7325, 0x733E, 0x734E, 0x734F, 0x9ED8, 0x7357, 0x736A,
- 0x7368, 0x7370, 0x7378, 0x7375, 0x737B, 0x737A, 0x73C8, 0x73B3,
- 0x73CE, 0x73BB, 0x73C0, 0x73E5, 0x73EE, 0x73DE, 0x74A2, 0x7405,
- 0x746F, 0x7425, 0x73F8, 0x7432, 0x743A, 0x7455, 0x743F, 0x745F,
- 0x7459, 0x7441, 0x745C, 0x7469, 0x7470, 0x7463, 0x746A, 0x7476,
- 0x747E, 0x748B, 0x749E, 0x74A7, 0x74CA, 0x74CF, 0x74D4, 0x73F1,
- 0x74E0, 0x74E3, 0x74E7, 0x74E9, 0x74EE, 0x74F2, 0x74F0, 0x74F1,
- 0x74F8, 0x74F7, 0x7504, 0x7503, 0x7505, 0x750C, 0x750E, 0x750D,
- 0x7515, 0x7513, 0x751E, 0x7526, 0x752C, 0x753C, 0x7544, 0x754D,
- 0x754A, 0x7549, 0x755B, 0x7546, 0x755A, 0x7569, 0x7564, 0x7567,
- 0x756B, 0x756D, 0x7578, 0x7576, 0x7586, 0x7587, 0x7574, 0x758A,
- 0x7589, 0x7582, 0x7594, 0x759A, 0x759D, 0x75A5, 0x75A3, 0x75C2,
- 0x75B3, 0x75C3, 0x75B5, 0x75BD, 0x75B8, 0x75BC, 0x75B1, 0x75CD,
- 0x75CA, 0x75D2, 0x75D9, 0x75E3, 0x75DE, 0x75FE, 0x75FF, 0x75FC,
- 0x7601, 0x75F0, 0x75FA, 0x75F2, 0x75F3, 0x760B, 0x760D, 0x7609,
- 0x761F, 0x7627, 0x7620, 0x7621, 0x7622, 0x7624, 0x7634, 0x7630,
- 0x763B, 0x7647, 0x7648, 0x7646, 0x765C, 0x7658, 0x7661, 0x7662,
- 0x7668, 0x7669, 0x766A, 0x7667, 0x766C, 0x7670, 0x7672, 0x7676,
- 0x7678, 0x767C, 0x7680, 0x7683, 0x7688, 0x768B, 0x768E, 0x7696,
- 0x7693, 0x7699, 0x769A, 0x76B0, 0x76B4, 0x76B8, 0x76B9, 0x76BA,
- 0x76C2, 0x76CD, 0x76D6, 0x76D2, 0x76DE, 0x76E1, 0x76E5, 0x76E7,
- 0x76EA, 0x862F, 0x76FB, 0x7708, 0x7707, 0x7704, 0x7729, 0x7724,
- 0x771E, 0x7725, 0x7726, 0x771B, 0x7737, 0x7738, 0x7747, 0x775A,
- 0x7768, 0x776B, 0x775B, 0x7765, 0x777F, 0x777E, 0x7779, 0x778E,
- 0x778B, 0x7791, 0x77A0, 0x779E, 0x77B0, 0x77B6, 0x77B9, 0x77BF,
- 0x77BC, 0x77BD, 0x77BB, 0x77C7, 0x77CD, 0x77D7, 0x77DA, 0x77DC,
- 0x77E3, 0x77EE, 0x77FC, 0x780C, 0x7812, 0x7926, 0x7820, 0x792A,
- 0x7845, 0x788E, 0x7874, 0x7886, 0x787C, 0x789A, 0x788C, 0x78A3,
- 0x78B5, 0x78AA, 0x78AF, 0x78D1, 0x78C6, 0x78CB, 0x78D4, 0x78BE,
- 0x78BC, 0x78C5, 0x78CA, 0x78EC, 0x78E7, 0x78DA, 0x78FD, 0x78F4,
- 0x7907, 0x7912, 0x7911, 0x7919, 0x792C, 0x792B, 0x7940, 0x7960,
- 0x7957, 0x795F, 0x795A, 0x7955, 0x7953, 0x797A, 0x797F, 0x798A,
- 0x799D, 0x79A7, 0x9F4B, 0x79AA, 0x79AE, 0x79B3, 0x79B9, 0x79BA,
- 0x79C9, 0x79D5, 0x79E7, 0x79EC, 0x79E1, 0x79E3, 0x7A08, 0x7A0D,
- 0x7A18, 0x7A19, 0x7A20, 0x7A1F, 0x7980, 0x7A31, 0x7A3B, 0x7A3E,
- 0x7A37, 0x7A43, 0x7A57, 0x7A49, 0x7A61, 0x7A62, 0x7A69, 0x9F9D,
- 0x7A70, 0x7A79, 0x7A7D, 0x7A88, 0x7A97, 0x7A95, 0x7A98, 0x7A96,
- 0x7AA9, 0x7AC8, 0x7AB0, 0x7AB6, 0x7AC5, 0x7AC4, 0x7ABF, 0x9083,
- 0x7AC7, 0x7ACA, 0x7ACD, 0x7ACF, 0x7AD5, 0x7AD3, 0x7AD9, 0x7ADA,
- 0x7ADD, 0x7AE1, 0x7AE2, 0x7AE6, 0x7AED, 0x7AF0, 0x7B02, 0x7B0F,
- 0x7B0A, 0x7B06, 0x7B33, 0x7B18, 0x7B19, 0x7B1E, 0x7B35, 0x7B28,
- 0x7B36, 0x7B50, 0x7B7A, 0x7B04, 0x7B4D, 0x7B0B, 0x7B4C, 0x7B45,
- 0x7B75, 0x7B65, 0x7B74, 0x7B67, 0x7B70, 0x7B71, 0x7B6C, 0x7B6E,
- 0x7B9D, 0x7B98, 0x7B9F, 0x7B8D, 0x7B9C, 0x7B9A, 0x7B8B, 0x7B92,
- 0x7B8F, 0x7B5D, 0x7B99, 0x7BCB, 0x7BC1, 0x7BCC, 0x7BCF, 0x7BB4,
- 0x7BC6, 0x7BDD, 0x7BE9, 0x7C11, 0x7C14, 0x7BE6, 0x7BE5, 0x7C60,
- 0x7C00, 0x7C07, 0x7C13, 0x7BF3, 0x7BF7, 0x7C17, 0x7C0D, 0x7BF6,
- 0x7C23, 0x7C27, 0x7C2A, 0x7C1F, 0x7C37, 0x7C2B, 0x7C3D, 0x7C4C,
- 0x7C43, 0x7C54, 0x7C4F, 0x7C40, 0x7C50, 0x7C58, 0x7C5F, 0x7C64,
- 0x7C56, 0x7C65, 0x7C6C, 0x7C75, 0x7C83, 0x7C90, 0x7CA4, 0x7CAD,
- 0x7CA2, 0x7CAB, 0x7CA1, 0x7CA8, 0x7CB3, 0x7CB2, 0x7CB1, 0x7CAE,
- 0x7CB9, 0x7CBD, 0x7CC0, 0x7CC5, 0x7CC2, 0x7CD8, 0x7CD2, 0x7CDC,
- 0x7CE2, 0x9B3B, 0x7CEF, 0x7CF2, 0x7CF4, 0x7CF6, 0x7CFA, 0x7D06,
- 0x7D02, 0x7D1C, 0x7D15, 0x7D0A, 0x7D45, 0x7D4B, 0x7D2E, 0x7D32,
- 0x7D3F, 0x7D35, 0x7D46, 0x7D73, 0x7D56, 0x7D4E, 0x7D72, 0x7D68,
- 0x7D6E, 0x7D4F, 0x7D63, 0x7D93, 0x7D89, 0x7D5B, 0x7D8F, 0x7D7D,
- 0x7D9B, 0x7DBA, 0x7DAE, 0x7DA3, 0x7DB5, 0x7DC7, 0x7DBD, 0x7DAB,
- 0x7E3D, 0x7DA2, 0x7DAF, 0x7DDC, 0x7DB8, 0x7D9F, 0x7DB0, 0x7DD8,
- 0x7DDD, 0x7DE4, 0x7DDE, 0x7DFB, 0x7DF2, 0x7DE1, 0x7E05, 0x7E0A,
- 0x7E23, 0x7E21, 0x7E12, 0x7E31, 0x7E1F, 0x7E09, 0x7E0B, 0x7E22,
- 0x7E46, 0x7E66, 0x7E3B, 0x7E35, 0x7E39, 0x7E43, 0x7E37, 0x7E32,
- 0x7E3A, 0x7E67, 0x7E5D, 0x7E56, 0x7E5E, 0x7E59, 0x7E5A, 0x7E79,
- 0x7E6A, 0x7E69, 0x7E7C, 0x7E7B, 0x7E83, 0x7DD5, 0x7E7D, 0x8FAE,
- 0x7E7F, 0x7E88, 0x7E89, 0x7E8C, 0x7E92, 0x7E90, 0x7E93, 0x7E94,
- 0x7E96, 0x7E8E, 0x7E9B, 0x7E9C, 0x7F38, 0x7F3A, 0x7F45, 0x7F4C,
- 0x7F4D, 0x7F4E, 0x7F50, 0x7F51, 0x7F55, 0x7F54, 0x7F58, 0x7F5F,
- 0x7F60, 0x7F68, 0x7F69, 0x7F67, 0x7F78, 0x7F82, 0x7F86, 0x7F83,
- 0x7F88, 0x7F87, 0x7F8C, 0x7F94, 0x7F9E, 0x7F9D, 0x7F9A, 0x7FA3,
- 0x7FAF, 0x7FB2, 0x7FB9, 0x7FAE, 0x7FB6, 0x7FB8, 0x8B71, 0x7FC5,
- 0x7FC6, 0x7FCA, 0x7FD5, 0x7FD4, 0x7FE1, 0x7FE6, 0x7FE9, 0x7FF3,
- 0x7FF9, 0x98DC, 0x8006, 0x8004, 0x800B, 0x8012, 0x8018, 0x8019,
- 0x801C, 0x8021, 0x8028, 0x803F, 0x803B, 0x804A, 0x8046, 0x8052,
- 0x8058, 0x805A, 0x805F, 0x8062, 0x8068, 0x8073, 0x8072, 0x8070,
- 0x8076, 0x8079, 0x807D, 0x807F, 0x8084, 0x8086, 0x8085, 0x809B,
- 0x8093, 0x809A, 0x80AD, 0x5190, 0x80AC, 0x80DB, 0x80E5, 0x80D9,
- 0x80DD, 0x80C4, 0x80DA, 0x80D6, 0x8109, 0x80EF, 0x80F1, 0x811B,
- 0x8129, 0x8123, 0x812F, 0x814B, 0x968B, 0x8146, 0x813E, 0x8153,
- 0x8151, 0x80FC, 0x8171, 0x816E, 0x8165, 0x8166, 0x8174, 0x8183,
- 0x8188, 0x818A, 0x8180, 0x8182, 0x81A0, 0x8195, 0x81A4, 0x81A3,
- 0x815F, 0x8193, 0x81A9, 0x81B0, 0x81B5, 0x81BE, 0x81B8, 0x81BD,
- 0x81C0, 0x81C2, 0x81BA, 0x81C9, 0x81CD, 0x81D1, 0x81D9, 0x81D8,
- 0x81C8, 0x81DA, 0x81DF, 0x81E0, 0x81E7, 0x81FA, 0x81FB, 0x81FE,
- 0x8201, 0x8202, 0x8205, 0x8207, 0x820A, 0x820D, 0x8210, 0x8216,
- 0x8229, 0x822B, 0x8238, 0x8233, 0x8240, 0x8259, 0x8258, 0x825D,
- 0x825A, 0x825F, 0x8264, 0x8262, 0x8268, 0x826A, 0x826B, 0x822E,
- 0x8271, 0x8277, 0x8278, 0x827E, 0x828D, 0x8292, 0x82AB, 0x829F,
- 0x82BB, 0x82AC, 0x82E1, 0x82E3, 0x82DF, 0x82D2, 0x82F4, 0x82F3,
- 0x82FA, 0x8393, 0x8303, 0x82FB, 0x82F9, 0x82DE, 0x8306, 0x82DC,
- 0x8309, 0x82D9, 0x8335, 0x8334, 0x8316, 0x8332, 0x8331, 0x8340,
- 0x8339, 0x8350, 0x8345, 0x832F, 0x832B, 0x8317, 0x8318, 0x8385,
- 0x839A, 0x83AA, 0x839F, 0x83A2, 0x8396, 0x8323, 0x838E, 0x8387,
- 0x838A, 0x837C, 0x83B5, 0x8373, 0x8375, 0x83A0, 0x8389, 0x83A8,
- 0x83F4, 0x8413, 0x83EB, 0x83CE, 0x83FD, 0x8403, 0x83D8, 0x840B,
- 0x83C1, 0x83F7, 0x8407, 0x83E0, 0x83F2, 0x840D, 0x8422, 0x8420,
- 0x83BD, 0x8438, 0x8506, 0x83FB, 0x846D, 0x842A, 0x843C, 0x855A,
- 0x8484, 0x8477, 0x846B, 0x84AD, 0x846E, 0x8482, 0x8469, 0x8446,
- 0x842C, 0x846F, 0x8479, 0x8435, 0x84CA, 0x8462, 0x84B9, 0x84BF,
- 0x849F, 0x84D9, 0x84CD, 0x84BB, 0x84DA, 0x84D0, 0x84C1, 0x84C6,
- 0x84D6, 0x84A1, 0x8521, 0x84FF, 0x84F4, 0x8517, 0x8518, 0x852C,
- 0x851F, 0x8515, 0x8514, 0x84FC, 0x8540, 0x8563, 0x8558, 0x8548,
- 0x8541, 0x8602, 0x854B, 0x8555, 0x8580, 0x85A4, 0x8588, 0x8591,
- 0x858A, 0x85A8, 0x856D, 0x8594, 0x859B, 0x85EA, 0x8587, 0x859C,
- 0x8577, 0x857E, 0x8590, 0x85C9, 0x85BA, 0x85CF, 0x85B9, 0x85D0,
- 0x85D5, 0x85DD, 0x85E5, 0x85DC, 0x85F9, 0x860A, 0x8613, 0x860B,
- 0x85FE, 0x85FA, 0x8606, 0x8622, 0x861A, 0x8630, 0x863F, 0x864D,
- 0x4E55, 0x8654, 0x865F, 0x8667, 0x8671, 0x8693, 0x86A3, 0x86A9,
- 0x86AA, 0x868B, 0x868C, 0x86B6, 0x86AF, 0x86C4, 0x86C6, 0x86B0,
- 0x86C9, 0x8823, 0x86AB, 0x86D4, 0x86DE, 0x86E9, 0x86EC, 0x86DF,
- 0x86DB, 0x86EF, 0x8712, 0x8706, 0x8708, 0x8700, 0x8703, 0x86FB,
- 0x8711, 0x8709, 0x870D, 0x86F9, 0x870A, 0x8734, 0x873F, 0x8737,
- 0x873B, 0x8725, 0x8729, 0x871A, 0x8760, 0x875F, 0x8778, 0x874C,
- 0x874E, 0x8774, 0x8757, 0x8768, 0x876E, 0x8759, 0x8753, 0x8763,
- 0x876A, 0x8805, 0x87A2, 0x879F, 0x8782, 0x87AF, 0x87CB, 0x87BD,
- 0x87C0, 0x87D0, 0x96D6, 0x87AB, 0x87C4, 0x87B3, 0x87C7, 0x87C6,
- 0x87BB, 0x87EF, 0x87F2, 0x87E0, 0x880F, 0x880D, 0x87FE, 0x87F6,
- 0x87F7, 0x880E, 0x87D2, 0x8811, 0x8816, 0x8815, 0x8822, 0x8821,
- 0x8831, 0x8836, 0x8839, 0x8827, 0x883B, 0x8844, 0x8842, 0x8852,
- 0x8859, 0x885E, 0x8862, 0x886B, 0x8881, 0x887E, 0x889E, 0x8875,
- 0x887D, 0x88B5, 0x8872, 0x8882, 0x8897, 0x8892, 0x88AE, 0x8899,
- 0x88A2, 0x888D, 0x88A4, 0x88B0, 0x88BF, 0x88B1, 0x88C3, 0x88C4,
- 0x88D4, 0x88D8, 0x88D9, 0x88DD, 0x88F9, 0x8902, 0x88FC, 0x88F4,
- 0x88E8, 0x88F2, 0x8904, 0x890C, 0x890A, 0x8913, 0x8943, 0x891E,
- 0x8925, 0x892A, 0x892B, 0x8941, 0x8944, 0x893B, 0x8936, 0x8938,
- 0x894C, 0x891D, 0x8960, 0x895E, 0x8966, 0x8964, 0x896D, 0x896A,
- 0x896F, 0x8974, 0x8977, 0x897E, 0x8983, 0x8988, 0x898A, 0x8993,
- 0x8998, 0x89A1, 0x89A9, 0x89A6, 0x89AC, 0x89AF, 0x89B2, 0x89BA,
- 0x89BD, 0x89BF, 0x89C0, 0x89DA, 0x89DC, 0x89DD, 0x89E7, 0x89F4,
- 0x89F8, 0x8A03, 0x8A16, 0x8A10, 0x8A0C, 0x8A1B, 0x8A1D, 0x8A25,
- 0x8A36, 0x8A41, 0x8A5B, 0x8A52, 0x8A46, 0x8A48, 0x8A7C, 0x8A6D,
- 0x8A6C, 0x8A62, 0x8A85, 0x8A82, 0x8A84, 0x8AA8, 0x8AA1, 0x8A91,
- 0x8AA5, 0x8AA6, 0x8A9A, 0x8AA3, 0x8AC4, 0x8ACD, 0x8AC2, 0x8ADA,
- 0x8AEB, 0x8AF3, 0x8AE7, 0x8AE4, 0x8AF1, 0x8B14, 0x8AE0, 0x8AE2,
- 0x8AF7, 0x8ADE, 0x8ADB, 0x8B0C, 0x8B07, 0x8B1A, 0x8AE1, 0x8B16,
- 0x8B10, 0x8B17, 0x8B20, 0x8B33, 0x97AB, 0x8B26, 0x8B2B, 0x8B3E,
- 0x8B28, 0x8B41, 0x8B4C, 0x8B4F, 0x8B4E, 0x8B49, 0x8B56, 0x8B5B,
- 0x8B5A, 0x8B6B, 0x8B5F, 0x8B6C, 0x8B6F, 0x8B74, 0x8B7D, 0x8B80,
- 0x8B8C, 0x8B8E, 0x8B92, 0x8B93, 0x8B96, 0x8B99, 0x8B9A, 0x8C3A,
- 0x8C41, 0x8C3F, 0x8C48, 0x8C4C, 0x8C4E, 0x8C50, 0x8C55, 0x8C62,
- 0x8C6C, 0x8C78, 0x8C7A, 0x8C82, 0x8C89, 0x8C85, 0x8C8A, 0x8C8D,
- 0x8C8E, 0x8C94, 0x8C7C, 0x8C98, 0x621D, 0x8CAD, 0x8CAA, 0x8CBD,
- 0x8CB2, 0x8CB3, 0x8CAE, 0x8CB6, 0x8CC8, 0x8CC1, 0x8CE4, 0x8CE3,
- 0x8CDA, 0x8CFD, 0x8CFA, 0x8CFB, 0x8D04, 0x8D05, 0x8D0A, 0x8D07,
- 0x8D0F, 0x8D0D, 0x8D10, 0x9F4E, 0x8D13, 0x8CCD, 0x8D14, 0x8D16,
- 0x8D67, 0x8D6D, 0x8D71, 0x8D73, 0x8D81, 0x8D99, 0x8DC2, 0x8DBE,
- 0x8DBA, 0x8DCF, 0x8DDA, 0x8DD6, 0x8DCC, 0x8DDB, 0x8DCB, 0x8DEA,
- 0x8DEB, 0x8DDF, 0x8DE3, 0x8DFC, 0x8E08, 0x8E09, 0x8DFF, 0x8E1D,
- 0x8E1E, 0x8E10, 0x8E1F, 0x8E42, 0x8E35, 0x8E30, 0x8E34, 0x8E4A,
- 0x8E47, 0x8E49, 0x8E4C, 0x8E50, 0x8E48, 0x8E59, 0x8E64, 0x8E60,
- 0x8E2A, 0x8E63, 0x8E55, 0x8E76, 0x8E72, 0x8E7C, 0x8E81, 0x8E87,
- 0x8E85, 0x8E84, 0x8E8B, 0x8E8A, 0x8E93, 0x8E91, 0x8E94, 0x8E99,
- 0x8EAA, 0x8EA1, 0x8EAC, 0x8EB0, 0x8EC6, 0x8EB1, 0x8EBE, 0x8EC5,
- 0x8EC8, 0x8ECB, 0x8EDB, 0x8EE3, 0x8EFC, 0x8EFB, 0x8EEB, 0x8EFE,
- 0x8F0A, 0x8F05, 0x8F15, 0x8F12, 0x8F19, 0x8F13, 0x8F1C, 0x8F1F,
- 0x8F1B, 0x8F0C, 0x8F26, 0x8F33, 0x8F3B, 0x8F39, 0x8F45, 0x8F42,
- 0x8F3E, 0x8F4C, 0x8F49, 0x8F46, 0x8F4E, 0x8F57, 0x8F5C, 0x8F62,
- 0x8F63, 0x8F64, 0x8F9C, 0x8F9F, 0x8FA3, 0x8FAD, 0x8FAF, 0x8FB7,
- 0x8FDA, 0x8FE5, 0x8FE2, 0x8FEA, 0x8FEF, 0x9087, 0x8FF4, 0x9005,
- 0x8FF9, 0x8FFA, 0x9011, 0x9015, 0x9021, 0x900D, 0x901E, 0x9016,
- 0x900B, 0x9027, 0x9036, 0x9035, 0x9039, 0x8FF8, 0x904F, 0x9050,
- 0x9051, 0x9052, 0x900E, 0x9049, 0x903E, 0x9056, 0x9058, 0x905E,
- 0x9068, 0x906F, 0x9076, 0x96A8, 0x9072, 0x9082, 0x907D, 0x9081,
- 0x9080, 0x908A, 0x9089, 0x908F, 0x90A8, 0x90AF, 0x90B1, 0x90B5,
- 0x90E2, 0x90E4, 0x6248, 0x90DB, 0x9102, 0x9112, 0x9119, 0x9132,
- 0x9130, 0x914A, 0x9156, 0x9158, 0x9163, 0x9165, 0x9169, 0x9173,
- 0x9172, 0x918B, 0x9189, 0x9182, 0x91A2, 0x91AB, 0x91AF, 0x91AA,
- 0x91B5, 0x91B4, 0x91BA, 0x91C0, 0x91C1, 0x91C9, 0x91CB, 0x91D0,
- 0x91D6, 0x91DF, 0x91E1, 0x91DB, 0x91FC, 0x91F5, 0x91F6, 0x921E,
- 0x91FF, 0x9214, 0x922C, 0x9215, 0x9211, 0x925E, 0x9257, 0x9245,
- 0x9249, 0x9264, 0x9248, 0x9295, 0x923F, 0x924B, 0x9250, 0x929C,
- 0x9296, 0x9293, 0x929B, 0x925A, 0x92CF, 0x92B9, 0x92B7, 0x92E9,
- 0x930F, 0x92FA, 0x9344, 0x932E, 0x9319, 0x9322, 0x931A, 0x9323,
- 0x933A, 0x9335, 0x933B, 0x935C, 0x9360, 0x937C, 0x936E, 0x9356,
- 0x93B0, 0x93AC, 0x93AD, 0x9394, 0x93B9, 0x93D6, 0x93D7, 0x93E8,
- 0x93E5, 0x93D8, 0x93C3, 0x93DD, 0x93D0, 0x93C8, 0x93E4, 0x941A,
- 0x9414, 0x9413, 0x9403, 0x9407, 0x9410, 0x9436, 0x942B, 0x9435,
- 0x9421, 0x943A, 0x9441, 0x9452, 0x9444, 0x945B, 0x9460, 0x9462,
- 0x945E, 0x946A, 0x9229, 0x9470, 0x9475, 0x9477, 0x947D, 0x945A,
- 0x947C, 0x947E, 0x9481, 0x947F, 0x9582, 0x9587, 0x958A, 0x9594,
- 0x9596, 0x9598, 0x9599, 0x95A0, 0x95A8, 0x95A7, 0x95AD, 0x95BC,
- 0x95BB, 0x95B9, 0x95BE, 0x95CA, 0x6FF6, 0x95C3, 0x95CD, 0x95CC,
- 0x95D5, 0x95D4, 0x95D6, 0x95DC, 0x95E1, 0x95E5, 0x95E2, 0x9621,
- 0x9628, 0x962E, 0x962F, 0x9642, 0x964C, 0x964F, 0x964B, 0x9677,
- 0x965C, 0x965E, 0x965D, 0x965F, 0x9666, 0x9672, 0x966C, 0x968D,
- 0x9698, 0x9695, 0x9697, 0x96AA, 0x96A7, 0x96B1, 0x96B2, 0x96B0,
- 0x96B4, 0x96B6, 0x96B8, 0x96B9, 0x96CE, 0x96CB, 0x96C9, 0x96CD,
- 0x894D, 0x96DC, 0x970D, 0x96D5, 0x96F9, 0x9704, 0x9706, 0x9708,
- 0x9713, 0x970E, 0x9711, 0x970F, 0x9716, 0x9719, 0x9724, 0x972A,
- 0x9730, 0x9739, 0x973D, 0x973E, 0x9744, 0x9746, 0x9748, 0x9742,
- 0x9749, 0x975C, 0x9760, 0x9764, 0x9766, 0x9768, 0x52D2, 0x976B,
- 0x9771, 0x9779, 0x9785, 0x977C, 0x9781, 0x977A, 0x9786, 0x978B,
- 0x978F, 0x9790, 0x979C, 0x97A8, 0x97A6, 0x97A3, 0x97B3, 0x97B4,
- 0x97C3, 0x97C6, 0x97C8, 0x97CB, 0x97DC, 0x97ED, 0x9F4F, 0x97F2,
- 0x7ADF, 0x97F6, 0x97F5, 0x980F, 0x980C, 0x9838, 0x9824, 0x9821,
- 0x9837, 0x983D, 0x9846, 0x984F, 0x984B, 0x986B, 0x986F, 0x9870,
- 0x9871, 0x9874, 0x9873, 0x98AA, 0x98AF, 0x98B1, 0x98B6, 0x98C4,
- 0x98C3, 0x98C6, 0x98E9, 0x98EB, 0x9903, 0x9909, 0x9912, 0x9914,
- 0x9918, 0x9921, 0x991D, 0x991E, 0x9924, 0x9920, 0x992C, 0x992E,
- 0x993D, 0x993E, 0x9942, 0x9949, 0x9945, 0x9950, 0x994B, 0x9951,
- 0x9952, 0x994C, 0x9955, 0x9997, 0x9998, 0x99A5, 0x99AD, 0x99AE,
- 0x99BC, 0x99DF, 0x99DB, 0x99DD, 0x99D8, 0x99D1, 0x99ED, 0x99EE,
- 0x99F1, 0x99F2, 0x99FB, 0x99F8, 0x9A01, 0x9A0F, 0x9A05, 0x99E2,
- 0x9A19, 0x9A2B, 0x9A37, 0x9A45, 0x9A42, 0x9A40, 0x9A43, 0x9A3E,
- 0x9A55, 0x9A4D, 0x9A5B, 0x9A57, 0x9A5F, 0x9A62, 0x9A65, 0x9A64,
- 0x9A69, 0x9A6B, 0x9A6A, 0x9AAD, 0x9AB0, 0x9ABC, 0x9AC0, 0x9ACF,
- 0x9AD1, 0x9AD3, 0x9AD4, 0x9ADE, 0x9ADF, 0x9AE2, 0x9AE3, 0x9AE6,
- 0x9AEF, 0x9AEB, 0x9AEE, 0x9AF4, 0x9AF1, 0x9AF7, 0x9AFB, 0x9B06,
- 0x9B18, 0x9B1A, 0x9B1F, 0x9B22, 0x9B23, 0x9B25, 0x9B27, 0x9B28,
- 0x9B29, 0x9B2A, 0x9B2E, 0x9B2F, 0x9B32, 0x9B44, 0x9B43, 0x9B4F,
- 0x9B4D, 0x9B4E, 0x9B51, 0x9B58, 0x9B74, 0x9B93, 0x9B83, 0x9B91,
- 0x9B96, 0x9B97, 0x9B9F, 0x9BA0, 0x9BA8, 0x9BB4, 0x9BC0, 0x9BCA,
- 0x9BB9, 0x9BC6, 0x9BCF, 0x9BD1, 0x9BD2, 0x9BE3, 0x9BE2, 0x9BE4,
- 0x9BD4, 0x9BE1, 0x9C3A, 0x9BF2, 0x9BF1, 0x9BF0, 0x9C15, 0x9C14,
- 0x9C09, 0x9C13, 0x9C0C, 0x9C06, 0x9C08, 0x9C12, 0x9C0A, 0x9C04,
- 0x9C2E, 0x9C1B, 0x9C25, 0x9C24, 0x9C21, 0x9C30, 0x9C47, 0x9C32,
- 0x9C46, 0x9C3E, 0x9C5A, 0x9C60, 0x9C67, 0x9C76, 0x9C78, 0x9CE7,
- 0x9CEC, 0x9CF0, 0x9D09, 0x9D08, 0x9CEB, 0x9D03, 0x9D06, 0x9D2A,
- 0x9D26, 0x9DAF, 0x9D23, 0x9D1F, 0x9D44, 0x9D15, 0x9D12, 0x9D41,
- 0x9D3F, 0x9D3E, 0x9D46, 0x9D48, 0x9D5D, 0x9D5E, 0x9D64, 0x9D51,
- 0x9D50, 0x9D59, 0x9D72, 0x9D89, 0x9D87, 0x9DAB, 0x9D6F, 0x9D7A,
- 0x9D9A, 0x9DA4, 0x9DA9, 0x9DB2, 0x9DC4, 0x9DC1, 0x9DBB, 0x9DB8,
- 0x9DBA, 0x9DC6, 0x9DCF, 0x9DC2, 0x9DD9, 0x9DD3, 0x9DF8, 0x9DE6,
- 0x9DED, 0x9DEF, 0x9DFD, 0x9E1A, 0x9E1B, 0x9E1E, 0x9E75, 0x9E79,
- 0x9E7D, 0x9E81, 0x9E88, 0x9E8B, 0x9E8C, 0x9E92, 0x9E95, 0x9E91,
- 0x9E9D, 0x9EA5, 0x9EA9, 0x9EB8, 0x9EAA, 0x9EAD, 0x9761, 0x9ECC,
- 0x9ECE, 0x9ECF, 0x9ED0, 0x9ED4, 0x9EDC, 0x9EDE, 0x9EDD, 0x9EE0,
- 0x9EE5, 0x9EE8, 0x9EEF, 0x9EF4, 0x9EF6, 0x9EF7, 0x9EF9, 0x9EFB,
- 0x9EFC, 0x9EFD, 0x9F07, 0x9F08, 0x76B7, 0x9F15, 0x9F21, 0x9F2C,
- 0x9F3E, 0x9F4A, 0x9F52, 0x9F54, 0x9F63, 0x9F5F, 0x9F60, 0x9F61,
- 0x9F66, 0x9F67, 0x9F6C, 0x9F6A, 0x9F77, 0x9F72, 0x9F76, 0x9F95,
- 0x9F9C, 0x9FA0, 0x582F, 0x69C7, 0x9059, 0x7464, 0x2642, 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, 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,
- 0x301D, 0x301F, 0x2116, 0x33CD, 0x2121, 0x32A4, 0x32A5, 0x32A6,
- 0x32A7, 0x32A8, 0x3231, 0x3232, 0x3239, 0x337E, 0x337D, 0x337C,
- 0x222E, 0x2211, 0x221A, 0x22A5, 0x2220, 0x221F, 0x22BF, 0x2229,
- 0x222A, 0x555E, 0x98F4, 0x6EA2, 0x9C2F, 0x6DEB, 0x8FC2, 0x6B1D,
- 0x53A9, 0x958F, 0x5642, 0x990C, 0x7130, 0x8956, 0x9DD7, 0x8FE6,
- 0x6062, 0x62D0, 0x6666, 0x559D, 0x845B, 0x9784, 0x5699, 0x6F97,
- 0x7FF0, 0x7FEB, 0x5FBD, 0x7947, 0x4FE0, 0x537F, 0x50C5, 0x8EC0,
- 0x55B0, 0x6ADB, 0x5C51, 0x9774, 0x7941, 0x6167, 0x7A3D, 0x7E6B,
- 0x834A, 0x9699, 0x5026, 0x5ACC, 0x6372, 0x9E7C, 0x8AFA, 0x5DF7,
- 0x663B, 0x6E9D, 0x9EB4, 0x9D60, 0x7511, 0x91C7, 0x698A, 0x6805,
- 0x85A9, 0x9BD6, 0x9306, 0x73CA, 0x53F1, 0x5C62, 0x906E, 0x6753,
- 0x707C, 0x7E61, 0x914B, 0x66D9, 0x6E1A, 0x85AF, 0x85F7, 0x54E8,
- 0x5EE0, 0x68A2, 0x8523, 0x91AC, 0x9798, 0x8755, 0x9771, 0x9017,
- 0x7FE0, 0x647A, 0x901D, 0x87EC, 0x64B0, 0x6813, 0x714E, 0x717D,
- 0x8A6E, 0x564C, 0x9061, 0x5275, 0x6414, 0x7626, 0x905C, 0x9A52,
- 0x817F, 0x9EDB, 0x5544, 0x6FEF, 0x7422, 0x86F8, 0x5DFD, 0x8FBF,
- 0x68DA, 0x9C48, 0x6A3D, 0x7C1E, 0x8A3B, 0x7026, 0x51CB, 0x6357,
- 0x69CC, 0x939A, 0x585A, 0x6451, 0x912D, 0x64E2, 0x6EBA, 0x5861,
- 0x985A, 0x5835, 0x5C60, 0x83DF, 0x8CED, 0x5858, 0x79B1, 0x9D07,
- 0x7006, 0x701E, 0x5678, 0x9041, 0x9813, 0x90A3, 0x8B0E, 0x7058,
- 0x6962, 0x79B0, 0x56CA, 0x724C, 0x9019, 0x79E4, 0x525D, 0x7BB8,
- 0x6F51, 0x91B1, 0x633D, 0x6249, 0x6A0B, 0x67CA, 0x7A17, 0x903C,
- 0x5A9B, 0x8B2C, 0x5EDF, 0x7015, 0x983B, 0x853D, 0x77A5, 0x5A29,
- 0x5E96, 0x6CE1, 0x84EC, 0x9830, 0x9C52, 0x9EB5, 0x5132, 0x9905,
- 0x7C7E, 0x9453, 0x6108, 0x7652, 0x7337, 0x7194, 0x8000, 0x840A,
- 0x907C, 0x6F23, 0x7149, 0x84EE, 0x6994, 0x881F, 0x5154, 0x5189,
- 0x5195, 0x51A4, 0x5539, 0x5533, 0x55E4, 0x5632, 0x56A5, 0x580B,
- 0x5ABE, 0x5BC3, 0x5C5B, 0x5E64, 0x6097, 0x6369, 0x6406, 0x6522,
- 0x6583, 0x67A6, 0x67B4, 0x689B, 0x688E, 0x6E6E, 0x71D7, 0x7228,
- 0x73CE, 0x7504, 0x750D, 0x7515, 0x7693, 0x787C, 0x7A31, 0x9F9D,
- 0x7B99, 0x7C90, 0x7CAE, 0x7D9B, 0x7DAE, 0x7D9F, 0x7FD4, 0x822E,
- 0x828D, 0x82D2, 0x8323, 0x8375, 0x8517, 0x853E, 0x8782, 0x87D2,
- 0x890A, 0x89AF, 0x8ADE, 0x8B41, 0x8DDA, 0x8E09, 0x8F13, 0x8FEA,
- 0x8FE9, 0x9058, 0x6248, 0x91C1, 0x95BB, 0x7762, 0x9724, 0x9760,
- 0x976D, 0x9824, 0x9B2E, 0x9B97, 0x9BF2, 0x9EAA, 0x9F9C, 0x3001,
- 0x3002, 0x203E, 0xFF3F, 0x30FC, 0x2015, 0x2010, 0x301C, 0x2016,
- 0xFF5C, 0x2026, 0x2025, 0xFF08, 0xFF09, 0x3014, 0x3015, 0xFF3B,
- 0xFF3D, 0xFF5B, 0xFF5D, 0x3008, 0x3009, 0x300A, 0x300B, 0x300C,
- 0x300D, 0x300E, 0x300F, 0x3010, 0x3011, 0xFF1D, 0x3041, 0x3043,
- 0x3045, 0x3047, 0x3049, 0x3063, 0x3083, 0x3085, 0x3087, 0x308E,
- 0x30A1, 0x30A3, 0x30A5, 0x30A7, 0x30A9, 0x30C3, 0x30E3, 0x30E5,
- 0x30E7, 0x30EE, 0x30F5, 0x30F6, 0x3349, 0x3314, 0x3322, 0x334D,
- 0x3318, 0x3327, 0x3303, 0x3336, 0x3351, 0x3357, 0x330D, 0x3326,
- 0x3323, 0x332B, 0x334A, 0x333B, 0x301D, 0x301E, 0x3094, 0x304B,
- 0x3051, 0x82A6, 0x8328, 0x5653, 0x53A9, 0x7259, 0x6C72, 0x7B08,
- 0x9957, 0x62F3, 0x9910, 0x976D, 0x717D, 0x7A7F, 0x7BAD, 0x63C3,
- 0x83DF, 0x7962, 0x53DB, 0x7BC7, 0x8FC4, 0x7C3E, 0x50CA, 0x5315,
- 0x55A9, 0x56AE, 0x5819, 0x591B, 0x5C28, 0x5ED0, 0x5ECF, 0x6241,
- 0x66C1, 0x6C08, 0x6E23, 0x6EEC, 0x7A97, 0x7BDD, 0x7FE9, 0x8422,
- 0x8759, 0x880E, 0x87D2, 0x9A19, 0x9EAD, 0xFFE4, 0xFF07, 0xFF02,
- 0x11A8, 0x25C1, 0x25B7, 0x21E9, 0x21E7, 0x21E6, 0x21E8, 0x25A2,
- 0x2667, 0x2661, 0x2664, 0x2662, 0x33A0, 0x33A2, 0x33A4, 0x33A5,
- 0x3397, 0x2113, 0x3398, 0x33B3, 0x33B2, 0x33B1, 0x33B0, 0x3385,
- 0x3386, 0x3387, 0x33CB, 0x3390, 0x33D4, 0x3396, 0x3322, 0x3316,
- 0x3318, 0x3315, 0x3303, 0x3323, 0x3357, 0x3342, 0x3339, 0x333B,
- 0x3300, 0x3331, 0x3347, 0x331E, 0x332A, 0x33CD, 0x337F, 0x2121,
- 0x260E, 0x3036, 0x3020, 0x00A9, 0x00AE, 0x0000, 0x2488, 0x2489,
- 0x248A, 0x248B, 0x248C, 0x248D, 0x248E, 0x248F, 0x2490, 0x2474,
- 0x2475, 0x2476, 0x2477, 0x2478, 0x2479, 0x247A, 0x247B, 0x247C,
- 0x247D, 0x247E, 0x247F, 0x2480, 0x2481, 0x2482, 0x2483, 0x2484,
- 0x2485, 0x2486, 0x2487, 0x3251, 0x2170, 0x2171, 0x2172, 0x2173,
- 0x2174, 0x2175, 0x2176, 0x2177, 0x2178, 0x2179, 0x3252, 0x3253,
- 0x3254, 0x3255, 0x3256, 0x3257, 0x3258, 0x3259, 0x325A, 0x325B,
- 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, 0x3243, 0x323D, 0x323F, 0x3234, 0x3238, 0x3233,
- 0x323C, 0x3242, 0x323E, 0x3236, 0x3235, 0x323B, 0x3240, 0x323A,
- 0x32B0, 0x32AD, 0x32A9, 0x32AF, 0x3294, 0x32AA, 0x3298, 0x32AB,
- 0x3292, 0x3291, 0x3293, 0x32AC, 0x32AE, 0x3296, 0x23A9, 0x23A8,
- 0x23A7, 0xFE38, 0x23AD, 0x23AC, 0x23AB, 0xFE38, 0x23AB, 0x23AC,
- 0x23AD, 0xFE38, 0x23A7, 0x23A8, 0x23A9, 0xFE38, 0x33CC, 0x3305,
- 0x00BD, 0x00BC, 0x339F, 0x33A3, 0x33A6, 0xFFFD, 0xFFFD, 0x329E,
- 0x3388, 0x3389, 0x33C8, 0x222D, 0x5370, 0x3230, 0x322A, 0x322B,
- 0x322C, 0x322D, 0x322E, 0x322F, 0x3237, 0x3241, 0x27A1, 0x21E6,
- 0x21E7, 0x21E9, 0x25C9, 0x2660, 0x2665, 0x2663, 0x2666, 0x2600,
- 0x2601, 0x2602, 0x2603, 0x261E, 0x261C, 0x261D, 0x261F, 0x3299,
- 0x24EA, 0x216A, 0x216B, 0xFF10, 0xFF10, 0x3000, 0x2581, 0x2582,
- 0x2583, 0x2584, 0x2585, 0x2586, 0x2587, 0x2588, 0x258F, 0x258E,
- 0x258D, 0x258C, 0x258B, 0x258A, 0x2589, 0x2594, 0x2595, 0x256D,
- 0x256E, 0x2570, 0x256F, 0x2550, 0x255E, 0x256A, 0x2561, 0x25E2,
- 0x25E3, 0x25E5, 0x25E4, 0x25CF, 0x0ED0, 0x2571, 0x2572, 0x2573,
- 0x304B, 0x3051, 0x9022, 0x8FBB, 0xFF0C, 0x00B0, 0x3013, 0x309C,
- 0x309B, 0x02CF, 0xFF0E, 0x2018, 0x2019, 0x201C, 0x201D, 0x201C,
- 0x201E, 0x2018, 0x201A, 0x02BA, 0x51DC, 0x7199, 0x2776, 0x2777,
- 0x2778, 0x2779, 0x277A, 0x277B, 0x277C, 0x277D, 0x277E, 0x0000,
- 0x0000, 0x0000, 0x217A, 0x217B, 0x0000, 0x0000, 0x0000, 0x217F,
- 0x210A, 0x2109, 0x0000, 0x0000, 0x3004, 0x21C6, 0x21C4, 0x21C5,
- 0x0000, 0x30F7, 0x30F8, 0x30F9, 0x30FA, 0x5927, 0x5C0F, 0x329D,
- 0x63A7, 0x0000, 0x0000, 0x337B, 0x337F, 0x0000, 0x0000, 0x3333,
- 0x334E, 0x3322, 0x3316, 0x3305, 0x3305, 0x3305, 0x3333, 0x334E,
- 0x334E, 0x334E, 0x3303, 0x3318, 0x3315, 0x3339, 0x3339, 0x3339,
- 0x3357, 0x3342, 0x3342, 0x3342, 0x3323, 0x333B, 0x3300, 0x331E,
- 0x331E, 0x331E, 0x332A, 0x332A, 0x332A, 0x3347, 0x3331, 0x7E8A,
- 0x891C, 0x9348, 0x9288, 0x84DC, 0x4FC9, 0x70BB, 0x6631, 0x68C8,
- 0x92F9, 0x66FB, 0x5F45, 0x4E28, 0x4EE1, 0x4EFC, 0x4F00, 0x4F03,
- 0x4F39, 0x4F56, 0x4F92, 0x4F8A, 0x4F9A, 0x4F94, 0x4FCD, 0x5040,
- 0x5022, 0x4FFF, 0x501E, 0x5046, 0x5070, 0x5042, 0x5094, 0x50F4,
- 0x50D8, 0x514A, 0x5164, 0x519D, 0x51BE, 0x51EC, 0x5215, 0x529C,
- 0x52A6, 0x52C0, 0x52DB, 0x5300, 0x5307, 0x5324, 0x5372, 0x5393,
- 0x53B2, 0x53DD, 0xFA0E, 0x549C, 0x548A, 0x54A9, 0x54FF, 0x5586,
- 0x5759, 0x5765, 0x57AC, 0x57C8, 0x57C7, 0xFA0F, 0xFA10, 0x589E,
- 0x58B2, 0x590B, 0x5953, 0x595B, 0x595D, 0x5963, 0x59A4, 0x59BA,
- 0x5B56, 0x5BC0, 0x752F, 0x5BD8, 0x5BEC, 0x5C1E, 0x5CA6, 0x5CBA,
- 0x5CF5, 0x5D27, 0x5D53, 0xFA11, 0x5D42, 0x5D6D, 0x5DB8, 0x5DB9,
- 0x5DD0, 0x5F21, 0x5F34, 0x5F67, 0x5FB7, 0x5FDE, 0x605D, 0x6085,
- 0x608A, 0x60DE, 0x60D5, 0x6120, 0x60F2, 0x6111, 0x6137, 0x6130,
- 0x6198, 0x6213, 0x62A6, 0x63F5, 0x6460, 0x649D, 0x64CE, 0x654E,
- 0x6600, 0x6615, 0x6609, 0x662E, 0x661E, 0x6624, 0x6665, 0x6657,
- 0x6659, 0xFA12, 0x6673, 0x6699, 0x66A0, 0x66B2, 0x66BF, 0x66FA,
- 0x670E, 0xF929, 0x6766, 0x67BB, 0x6852, 0x67C0, 0x6801, 0x6844,
- 0x68CF, 0xFA13, 0x6968, 0xFA14, 0x6998, 0x69E2, 0x6A30, 0x6A6B,
- 0x6A46, 0x6A73, 0x6A7E, 0x6AE2, 0x6AE4, 0x6BD6, 0x6C3F, 0x6C5C,
- 0x6C86, 0x6C6F, 0x6CDA, 0x6D04, 0x6D87, 0x6D6F, 0x6D96, 0x6DAC,
- 0x6DCF, 0x6DF8, 0x6DF2, 0x6DFC, 0x6E39, 0x6E5C, 0x6E27, 0x6E3C,
- 0x6EBF, 0x6F88, 0x6FB5, 0x6FF5, 0x7005, 0x7007, 0x7028, 0x7085,
- 0x70AB, 0x710F, 0x7104, 0x715C, 0x7146, 0x7147, 0xFA15, 0x71C1,
- 0x71FE, 0x72B1, 0x72BE, 0x7324, 0xFA16, 0x7377, 0x73BD, 0x73C9,
- 0x73D6, 0x73E3, 0x73D2, 0x7407, 0x73F5, 0x7426, 0x742A, 0x7429,
- 0x742E, 0x7462, 0x7489, 0x749F, 0x7501, 0x756F, 0x7682, 0x769C,
- 0x769E, 0x769B, 0x76A6, 0xFA17, 0x7746, 0x52AF, 0x7821, 0x784E,
- 0x7864, 0x787A, 0x7930, 0xFA18, 0xFA19, 0xFA1A, 0x7994, 0xFA1B,
- 0x799B, 0x7AD1, 0x7AE7, 0xFA1C, 0x7AEB, 0x7B9E, 0xFA1D, 0x7D48,
- 0x7D5C, 0x7DB7, 0x7DA0, 0x7DD6, 0x7E52, 0x7F47, 0x7FA1, 0xFA1E,
- 0x8301, 0x8362, 0x837F, 0x83C7, 0x83F6, 0x8448, 0x84B4, 0x8553,
- 0x8559, 0x856B, 0xFA1F, 0x85B0, 0xFA20, 0xFA21, 0x8807, 0x88F5,
- 0x8A12, 0x8A37, 0x8A79, 0x8AA7, 0x8ABE, 0x8ADF, 0xFA22, 0x8AF6,
- 0x8B53, 0x8B7F, 0x8CF0, 0x8CF4, 0x8D12, 0x8D76, 0xFA23, 0x8ECF,
- 0xFA24, 0xFA25, 0x9067, 0x90DE, 0xFA26, 0x9115, 0x9127, 0x91DA,
- 0x91D7, 0x91DE, 0x91ED, 0x91EE, 0x91E4, 0x91E5, 0x9206, 0x9210,
- 0x920A, 0x923A, 0x9240, 0x923C, 0x924E, 0x9259, 0x9251, 0x9239,
- 0x9267, 0x92A7, 0x9277, 0x9278, 0x92E7, 0x92D7, 0x92D9, 0x92D0,
- 0xFA27, 0x92D5, 0x92E0, 0x92D3, 0x9325, 0x9321, 0x92FB, 0xFA28,
- 0x931E, 0x92FF, 0x931D, 0x9302, 0x9370, 0x9357, 0x93A4, 0x93C6,
- 0x93DE, 0x93F8, 0x9431, 0x9445, 0x9448, 0x9592, 0xF9DC, 0xFA29,
- 0x969D, 0x96AF, 0x9733, 0x973B, 0x9743, 0x974D, 0x974F, 0x9751,
- 0x9755, 0x9857, 0x9865, 0xFA2A, 0xFA2B, 0x9927, 0xFA2C, 0x999E,
- 0x9A4E, 0x9AD9, 0x9ADC, 0x9B75, 0x9B72, 0x9B8F, 0x9BB1, 0x9BBB,
- 0x9C00, 0x9D70, 0x9D6B, 0xFA2D, 0x9E19, 0x9ED1, 0x00AC, 0x005C,
- 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, 0x00A5, 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, 0x00A6, 0x007D, 0x0303, 0x02BC,
- 0x005C, 0x02BB, 0x007C, 0x007E, 0x00A1, 0x00A2, 0x00A3, 0x2044,
- 0x0192, 0x00A7, 0x00A4, 0x201C, 0x00AB, 0x2039, 0x203A, 0xFB01,
- 0xFB02, 0x2012, 0x2020, 0x2021, 0x00B7, 0x00B6, 0x2022, 0x201A,
- 0x201E, 0x201D, 0x00BB, 0x2026, 0x2030, 0x00BF, 0x0301, 0x0302,
- 0x00AF, 0x0306, 0x0307, 0x0308, 0x030A, 0x00B8, 0x030B, 0x0328,
- 0x030C, 0x0336, 0x00C6, 0x00AA, 0x0141, 0x00D8, 0x0152, 0x00BA,
- 0x00E6, 0x0131, 0x0142, 0x00F8, 0x0153, 0x00DF, 0x002D, 0x00A9,
- 0x00AC, 0x00AE, 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B5, 0x00B9,
- 0x00BC, 0x00BD, 0x00BE, 0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4,
- 0x00C5, 0x00C7, 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD,
- 0x00CE, 0x00CF, 0x00D0, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5,
- 0x00D6, 0x00D7, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x00DD, 0x00DE,
- 0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E7, 0x00E8,
- 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF, 0x00F0,
- 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x00F7, 0x00F9,
- 0x00FA, 0x00FB, 0x00FC, 0x00FD, 0x00FE, 0x00FF, 0x0160, 0x0178,
- 0x017D, 0x0305, 0x0161, 0x2122, 0x017E, 0x0030, 0x2002, 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, 0x00A5, 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, 0x203E, 0xFF40, 0x2032, 0x00A8,
- 0x2036, 0x00C4, 0x00F9, 0x00E9, 0x00ED, 0x00DF, 0x00E7, 0x00C7,
- 0x00D1, 0x00F1, 0x00A2, 0x00A3, 0x00F3, 0x00FA, 0x00A1, 0x00BF,
- 0x00BD, 0x00D6, 0x00DC, 0x00E4, 0x00EB, 0x00EF, 0x00F6, 0x00DC,
- 0x00E2, 0x00EA, 0x00EE, 0x00F4, 0x00FC, 0x00E0, 0x00E9, 0x00E1,
- 0x007E, 0x0030, 0x00AC, 0x005C, 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, 0x30F0, 0x30F1, 0x30EE, 0x30AB,
- 0x30B1, 0x30F4, 0x30AC, 0x30AE, 0x30B0, 0x30B2, 0x30B4, 0x30B6,
- 0x30B8, 0x30BA, 0x30BC, 0x30BE, 0x30C0, 0x30C2, 0x30C5, 0x30C7,
- 0x30C9, 0x30D0, 0x30D1, 0x30D3, 0x30D4, 0x30D6, 0x30D7, 0x30D9,
- 0x30DA, 0x30DC, 0x30DD, 0xFF60, 0x3092, 0x3041, 0x3043, 0x3045,
- 0x3047, 0x3049, 0x3083, 0x3085, 0x3087, 0x3063, 0x3042, 0x3044,
- 0x3046, 0x3048, 0x304A, 0x304B, 0x304D, 0x304F, 0x3051, 0x3053,
- 0x3055, 0x3057, 0x3059, 0x305B, 0x305D, 0x305F, 0x3061, 0x3064,
- 0x3066, 0x3068, 0x306A, 0x306B, 0x306C, 0x306D, 0x306E, 0x306F,
- 0x3072, 0x3075, 0x3078, 0x307B, 0x307E, 0x307F, 0x3080, 0x3081,
- 0x3082, 0x3084, 0x3086, 0x3088, 0x3089, 0x308A, 0x308B, 0x308C,
- 0x308D, 0x308F, 0x3093, 0x3090, 0x3091, 0x308E, 0x304C, 0x304E,
- 0x3050, 0x3052, 0x3054, 0x3056, 0x3068, 0x305A, 0x305C, 0x305E,
- 0x3060, 0x3062, 0x3065, 0x3067, 0x3069, 0x3070, 0x3071, 0x3073,
- 0x3074, 0x3076, 0x3077, 0x3079, 0x307A, 0x307C, 0x307D, 0x301D,
- 0x301E, 0x005B, 0x005D, 0x3008, 0x3009, 0x300A, 0x300B, 0x300E,
- 0x300F, 0x3010, 0x3011, 0x2012, 0xFF60, 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, 0x25B2, 0x20AC, 0x2126, 0x2032, 0x2033, 0xFB00, 0xFB03,
- 0xFB04, 0x0101, 0x012B, 0x016B, 0x0113, 0x014D, 0x0100, 0x012A,
- 0x016A, 0x0112, 0x014C, 0x215B, 0x215C, 0x215D, 0x215E, 0x2153,
- 0x2154, 0x2070, 0x2074, 0x2075, 0x2076, 0x2077, 0x2078, 0x2079,
- 0x2080, 0x2081, 0x2082, 0x2083, 0x2084, 0x2085, 0x2086, 0x2087,
- 0x2088, 0x2089, 0x01CD, 0x011A, 0x0000, 0x1EBC, 0x01CF, 0x0000,
- 0x0128, 0x01D1, 0x0000, 0x01D3, 0x016E, 0x0168, 0x01CE, 0x011B,
- 0x0000, 0x1EBD, 0x01D0, 0x0000, 0x0129, 0x01D2, 0x0000, 0x01D4,
- 0x016F, 0x0169, 0x0251, 0x0251, 0x0251, 0x01FD, 0x00E6, 0x0254,
- 0x0254, 0x0254, 0x0259, 0x0259, 0x0259, 0x025A, 0x025A, 0x025A,
- 0x025B, 0x025B, 0x025B, 0x006A, 0x014B, 0x0275, 0x028C, 0x028C,
- 0x028C, 0x0292, 0x0283, 0x02D0, 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,
- 0x00A5, 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,
- 0x00A6, 0x007D, 0x0303, 0x02BC, 0x005C, 0x02BB, 0x007C, 0x007E,
- 0x00A1, 0x00A2, 0x00A3, 0x2044, 0x0192, 0x00A7, 0x00A4, 0x201C,
- 0x00AB, 0x2039, 0x203A, 0xFB01, 0xFB02, 0x2012, 0x2020, 0x2021,
- 0x00B7, 0x00B6, 0x2022, 0x201A, 0x201E, 0x201D, 0x00BB, 0x2026,
- 0x2030, 0x00BF, 0x0301, 0x0302, 0x00AF, 0x0306, 0x0307, 0x0308,
- 0x030A, 0x00B8, 0x030B, 0x0328, 0x030C, 0x0336, 0x00C6, 0x00AA,
- 0x0141, 0x00D8, 0x0152, 0x00BA, 0x00E6, 0x0131, 0x0142, 0x00F8,
- 0x0153, 0x00DF, 0x002D, 0x00A9, 0x00AC, 0x00AE, 0x00B0, 0x00B1,
- 0x00B2, 0x00B3, 0x00B5, 0x00B9, 0x00BC, 0x00BD, 0x00BE, 0x00C0,
- 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C7, 0x00C8, 0x00C9,
- 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF, 0x00D0, 0x00D1,
- 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7, 0x00D9, 0x00DA,
- 0x00DB, 0x00DC, 0x00DD, 0x00DE, 0x00E0, 0x00E1, 0x00E2, 0x00E3,
- 0x00E4, 0x00E5, 0x00E7, 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC,
- 0x00ED, 0x00EE, 0x00EF, 0x00F0, 0x00F1, 0x00F2, 0x00F3, 0x00F4,
- 0x00F5, 0x00F6, 0x00F7, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x00FD,
- 0x00FE, 0x00FF, 0x0160, 0x0178, 0x017D, 0x0305, 0x0161, 0x2122,
- 0x017E, 0x0030, 0x20AC, 0x2126, 0x2032, 0x2033, 0xFB00, 0xFB03,
- 0xFB04, 0x0101, 0x012B, 0x016B, 0x0113, 0x014D, 0x0100, 0x012A,
- 0x016A, 0x0112, 0x014C, 0x215B, 0x215C, 0x215D, 0x215E, 0x2153,
- 0x2154, 0x2070, 0x2074, 0x2075, 0x2076, 0x2077, 0x2078, 0x2079,
- 0x2080, 0x2081, 0x2082, 0x2083, 0x2084, 0x2085, 0x2086, 0x2087,
- 0x2088, 0x2089, 0x01CD, 0x011A, 0x0000, 0x1EBC, 0x01CF, 0x0000,
- 0x0128, 0x01D1, 0x0000, 0x01D3, 0x016E, 0x0168, 0x01CE, 0x011B,
- 0x0000, 0x1EBD, 0x01D0, 0x0000, 0x0129, 0x01D2, 0x0000, 0x01D4,
- 0x016F, 0x0169, 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035,
- 0x0036, 0x0037, 0x0038, 0x0039, 0x0336, 0x002D, 0x003D, 0x002C,
- 0x0028, 0x0029, 0x002E, 0x002F, 0x003A, 0x003B, 0x0030, 0x0031,
- 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039,
- 0x0336, 0x002D, 0x003D, 0x002C, 0x0028, 0x0029, 0x002E, 0x002F,
- 0x003A, 0x003B, 0x00B7, 0x20AC, 0x0000, 0x2153, 0x2154, 0x00BE,
- 0x2155, 0x2156, 0x2157, 0x2158, 0x2159, 0x215A, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x215B, 0x215C, 0x215D, 0x215E,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
- 0x0038, 0x0039, 0x0030, 0x2163, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2170, 0x2171,
- 0x2172, 0x2173, 0x2174, 0x2175, 0x2176, 0x2177, 0x2178, 0x2179,
- 0x217A, 0x217B, 0x0000, 0x0000, 0x0000, 0x2160, 0x2161, 0x2162,
- 0x2163, 0x2164, 0x2165, 0x2166, 0x2167, 0x2168, 0x2169, 0x216A,
- 0x216B, 0x0000, 0x0000, 0x0000, 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, 0x3042, 0x3044,
- 0x3046, 0x3048, 0x304A, 0x304B, 0x304D, 0x304F, 0x3051, 0x3053,
- 0x3055, 0x3057, 0x3059, 0x305B, 0x305D, 0x305F, 0x3061, 0x3064,
- 0x3066, 0x3068, 0x306A, 0x306B, 0x306C, 0x306D, 0x306E, 0x306F,
- 0x3072, 0x3075, 0x3078, 0x307B, 0x307E, 0x307F, 0x3080, 0x3081,
- 0x3082, 0x3084, 0x3086, 0x3088, 0x3089, 0x308A, 0x308B, 0x308C,
- 0x308D, 0x308F, 0x3090, 0x3091, 0x3092, 0x3093, 0x30A2, 0x30A4,
- 0x30A6, 0x30A8, 0x30AA, 0x30AB, 0x30AD, 0x30AF, 0x30B1, 0x30B3,
- 0x30B5, 0x30B7, 0x30B9, 0x30BB, 0x30BD, 0x30BF, 0x30C1, 0x30C4,
- 0x30C6, 0x30C8, 0x30CA, 0x30CB, 0x30CC, 0x30CD, 0x30CE, 0x30CF,
- 0x30D2, 0x30D5, 0x30D8, 0x30DB, 0x30DE, 0x30DF, 0x30E0, 0x30E1,
- 0x30E2, 0x30E4, 0x30E6, 0x30E8, 0x30E9, 0x30EA, 0x30EB, 0x30EC,
- 0x30ED, 0x30EF, 0x30F0, 0x30F1, 0x30F2, 0x30F3, 0x3220, 0x3221,
- 0x3222, 0x3223, 0x3224, 0x3225, 0x3226, 0x3227, 0x3228, 0x3229,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x55B6, 0x5408, 0x6CEB, 0x554F, 0x7B54, 0x4F8B,
- 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
- 0x0038, 0x0039, 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035,
- 0x0036, 0x0037, 0x0038, 0x0039, 0x3063, 0x624D, 0x3007, 0x4E00,
- 0x4E8C, 0x4E09, 0x56DB, 0x4E94, 0x516D, 0x4E03, 0x516B, 0x4E5D,
- 0x5341, 0x3007, 0x4E00, 0x4E8C, 0x4E09, 0x56DB, 0x4E94, 0x516D,
- 0x4E03, 0x516B, 0x4E5D, 0x5341, 0x3007, 0x4E00, 0x4E8C, 0x4E09,
- 0x56DB, 0x4E94, 0x516D, 0x4E03, 0x516B, 0x4E5D, 0x3064, 0x624D,
- 0x4E00, 0x4E8C, 0x4E09, 0x56DB, 0x4E94, 0x516D, 0x4E03, 0x516B,
- 0x4E5D, 0x5341, 0x3007, 0x4E00, 0x4E8C, 0x4E09, 0x56DB, 0x4E94,
- 0x516D, 0x4E03, 0x516B, 0x4E5D, 0x5341, 0x30B3, 0x3063, 0x30C3,
- 0x30A9, 0x0000, 0x0000, 0x2460, 0x2461, 0x2462, 0x2463, 0x2464,
- 0x2465, 0x2466, 0x2467, 0x2468, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 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, 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, 0x3042, 0x3044, 0x3046,
- 0x3048, 0x304A, 0x304B, 0x304D, 0x304F, 0x3051, 0x3053, 0x3055,
- 0x3057, 0x3059, 0x305B, 0x305D, 0x305F, 0x3061, 0x3064, 0x3066,
- 0x3068, 0x306A, 0x306B, 0x306C, 0x306D, 0x306E, 0x306F, 0x3072,
- 0x3075, 0x3078, 0x307B, 0x307E, 0x307F, 0x3080, 0x3081, 0x3082,
- 0x3084, 0x3086, 0x3088, 0x3089, 0x308A, 0x308B, 0x308C, 0x308D,
- 0x308F, 0x3090, 0x3091, 0x3092, 0x3093, 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, 0x30F3, 0x3280, 0x3281, 0x3282,
- 0x3283, 0x3284, 0x3285, 0x3286, 0x3287, 0x3288, 0x3289, 0x3290,
- 0x328A, 0x328B, 0x328C, 0x328D, 0x328E, 0x328F, 0x8ABF, 0x329F,
- 0x526F, 0x6E1B, 0x6A19, 0x6B20, 0x57FA, 0x7981, 0x32A0, 0x32A1,
- 0x329B, 0x329A, 0x32A3, 0x32A2, 0x3297, 0x51FA, 0x329C, 0x3295,
- 0x6E08, 0x5897, 0x554F, 0x7B54, 0x4F8B, 0x96FB, 0x25CC, 0x0030,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 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, 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, 0x3042, 0x3044, 0x3046, 0x3048, 0x304A, 0x304B, 0x304D,
- 0x304F, 0x3051, 0x3053, 0x3055, 0x3057, 0x3059, 0x305B, 0x305D,
- 0x305F, 0x3061, 0x3064, 0x3066, 0x3068, 0x306A, 0x306B, 0x306C,
- 0x306D, 0x306E, 0x306F, 0x3072, 0x3075, 0x3078, 0x307B, 0x307E,
- 0x307F, 0x3080, 0x3081, 0x3082, 0x3084, 0x3086, 0x3088, 0x3089,
- 0x308A, 0x308B, 0x308C, 0x308D, 0x308F, 0x3090, 0x3091, 0x3092,
- 0x3093, 0x30A2, 0x30A4, 0x30A6, 0x30A8, 0x30AA, 0x30AB, 0x30AD,
- 0x30AF, 0x30B1, 0x30B3, 0x30B5, 0x30B7, 0x30B9, 0x30BB, 0x30BD,
- 0x30BF, 0x30C1, 0x30C4, 0x30C6, 0x30C8, 0x30CA, 0x30CB, 0x30CC,
- 0x30CD, 0x30CE, 0x30CF, 0x30D2, 0x30D5, 0x30D8, 0x30DB, 0x30DE,
- 0x30DF, 0x30E0, 0x30E1, 0x30E2, 0x30E4, 0x30E6, 0x30E8, 0x30E9,
- 0x30EA, 0x30EB, 0x30EC, 0x30ED, 0x30EF, 0x30F0, 0x30F1, 0x30F2,
- 0x30F3, 0x65E5, 0x6708, 0x706B, 0x6C34, 0x6728, 0x91D1, 0x571F,
- 0x554F, 0x7B54, 0x4F8B, 0x25CF, 0x0030, 0x0000, 0x0031, 0x0000,
- 0x0032, 0x0000, 0x0033, 0x0000, 0x0034, 0x0000, 0x0035, 0x0000,
- 0x0036, 0x0000, 0x0037, 0x0000, 0x0038, 0x0000, 0x0039, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 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, 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, 0x3042,
- 0x3044, 0x3046, 0x3048, 0x304A, 0x304B, 0x304D, 0x304F, 0x3051,
- 0x3053, 0x3055, 0x3057, 0x3059, 0x305B, 0x305D, 0x305F, 0x3061,
- 0x3064, 0x3066, 0x3068, 0x306A, 0x306B, 0x306C, 0x306D, 0x306E,
- 0x306F, 0x3072, 0x3075, 0x3078, 0x307B, 0x307E, 0x307F, 0x3080,
- 0x3081, 0x3082, 0x3084, 0x3086, 0x3088, 0x3089, 0x308A, 0x308B,
- 0x308C, 0x308D, 0x308F, 0x3090, 0x3091, 0x3092, 0x3093, 0x30A2,
- 0x30A4, 0x30A6, 0x30A8, 0x30AA, 0x30AB, 0x30AD, 0x30AF, 0x30B1,
- 0x30B3, 0x30B5, 0x30B7, 0x30B9, 0x30BB, 0x30BD, 0x30BF, 0x30C1,
- 0x30C4, 0x30C6, 0x30C8, 0x30CA, 0x30CB, 0x30CC, 0x30CD, 0x30CE,
- 0x30CF, 0x30D2, 0x30D5, 0x30D8, 0x30DB, 0x30DE, 0x30DF, 0x30E0,
- 0x30E1, 0x30E2, 0x30E4, 0x30E6, 0x30E8, 0x30E9, 0x30EA, 0x30EB,
- 0x30EC, 0x30ED, 0x30EF, 0x30F0, 0x30F1, 0x30F2, 0x30F3, 0x65E5,
- 0x6708, 0x706B, 0x6C34, 0x6728, 0x91D1, 0x571F, 0x8CA0, 0x52DD,
- 0x554F, 0x7B54, 0x4F8B, 0x25A1, 0x25A1, 0x0030, 0x0000, 0x0031,
- 0x0000, 0x0032, 0x0000, 0x0033, 0x0000, 0x0034, 0x0000, 0x0035,
- 0x0000, 0x0036, 0x0000, 0x0037, 0x0000, 0x0038, 0x0000, 0x0039,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 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, 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,
- 0x3042, 0x3044, 0x3046, 0x3048, 0x304A, 0x304B, 0x304D, 0x304F,
- 0x3051, 0x3053, 0x3055, 0x3057, 0x3059, 0x305B, 0x305D, 0x305F,
- 0x3061, 0x3064, 0x3066, 0x3068, 0x306A, 0x306B, 0x306C, 0x306D,
- 0x306E, 0x306F, 0x3072, 0x3075, 0x3078, 0x307B, 0x307E, 0x307F,
- 0x3080, 0x3081, 0x3082, 0x3084, 0x3086, 0x3088, 0x3089, 0x308A,
- 0x308B, 0x308C, 0x308D, 0x308F, 0x3090, 0x3091, 0x3092, 0x3093,
- 0x30A2, 0x30A4, 0x30A6, 0x30A8, 0x30AA, 0x30AB, 0x30AD, 0x30AF,
- 0x30B1, 0x30B3, 0x30B5, 0x30B7, 0x30B9, 0x30BB, 0x30BD, 0x30BF,
- 0x30C1, 0x30C4, 0x30C6, 0x30C8, 0x30CA, 0x30CB, 0x30CC, 0x30CD,
- 0x30CE, 0x30CF, 0x30D2, 0x30D5, 0x30D8, 0x30DB, 0x30DE, 0x30DF,
- 0x30E0, 0x30E1, 0x30E2, 0x30E4, 0x30E6, 0x30E8, 0x30E9, 0x30EA,
- 0x30EB, 0x30EC, 0x30ED, 0x30EF, 0x30F0, 0x30F1, 0x30F2, 0x30F3,
- 0x65E5, 0x6708, 0x706B, 0x6C34, 0x6728, 0x91D1, 0x571F, 0x554F,
- 0x7B54, 0x4F8B, 0x25A0, 0x0030, 0x0000, 0x0031, 0x0000, 0x0032,
- 0x0000, 0x0033, 0x0000, 0x0034, 0x0000, 0x0035, 0x0000, 0x0036,
- 0x0000, 0x0037, 0x0000, 0x0038, 0x0000, 0x0039, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 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, 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, 0x3042, 0x3044,
- 0x3046, 0x3048, 0x304A, 0x304B, 0x304D, 0x304F, 0x3051, 0x3053,
- 0x3055, 0x3057, 0x3059, 0x305B, 0x305D, 0x305F, 0x3061, 0x3064,
- 0x3066, 0x3068, 0x306A, 0x306B, 0x306C, 0x306D, 0x306E, 0x306F,
- 0x3072, 0x3075, 0x3078, 0x307B, 0x307E, 0x307F, 0x3080, 0x3081,
- 0x3082, 0x3084, 0x3086, 0x3088, 0x3089, 0x308A, 0x308B, 0x308C,
- 0x308D, 0x308F, 0x3090, 0x3091, 0x3092, 0x3093, 0x30A2, 0x30A4,
- 0x30A6, 0x30A8, 0x30AA, 0x30AB, 0x30AD, 0x30AF, 0x30B1, 0x30B3,
- 0x30B5, 0x30B7, 0x30B9, 0x30BB, 0x30BD, 0x30BF, 0x30C1, 0x30C4,
- 0x30C6, 0x30C8, 0x30CA, 0x30CB, 0x30CC, 0x30CD, 0x30CE, 0x30CF,
- 0x30D2, 0x30D5, 0x30D8, 0x30DB, 0x30DE, 0x30DF, 0x30E0, 0x30E1,
- 0x30E2, 0x30E4, 0x30E6, 0x30E8, 0x30E9, 0x30EA, 0x30EB, 0x30EC,
- 0x30ED, 0x30EF, 0x30F0, 0x30F1, 0x30F2, 0x30F3, 0x65E5, 0x6708,
- 0x706B, 0x6C34, 0x6728, 0x91D1, 0x571F, 0x554F, 0x7B54, 0x4F8B,
- 0x0030, 0x0000, 0x0031, 0x0000, 0x0032, 0x0000, 0x0033, 0x0000,
- 0x0034, 0x0000, 0x0035, 0x0000, 0x0036, 0x0000, 0x0037, 0x0000,
- 0x0038, 0x0000, 0x0039, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 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, 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, 0x3042, 0x3044, 0x3046, 0x3048, 0x304A,
- 0x304B, 0x304D, 0x304F, 0x3051, 0x3053, 0x3055, 0x3057, 0x3059,
- 0x305B, 0x305D, 0x305F, 0x3061, 0x3064, 0x3066, 0x3068, 0x306A,
- 0x306B, 0x306C, 0x306D, 0x306E, 0x306F, 0x3072, 0x3075, 0x3078,
- 0x307B, 0x307E, 0x307F, 0x3080, 0x3081, 0x3082, 0x3084, 0x3086,
- 0x3088, 0x3089, 0x308A, 0x308B, 0x308C, 0x308D, 0x308F, 0x3090,
- 0x3091, 0x3092, 0x3093, 0x30A2, 0x30A4, 0x30A6, 0x30A8, 0x30AA,
- 0x30AB, 0x30AD, 0x30AF, 0x30B1, 0x30B3, 0x30B5, 0x30B7, 0x30B9,
- 0x30BB, 0x30BD, 0x30BF, 0x30C1, 0x30C4, 0x30C6, 0x30C8, 0x30CA,
- 0x30CB, 0x30CC, 0x30CD, 0x30CE, 0x30CF, 0x30D2, 0x30D5, 0x30D8,
- 0x30DB, 0x30DE, 0x30DF, 0x30E0, 0x30E1, 0x30E2, 0x30E4, 0x30E6,
- 0x30E8, 0x30E9, 0x30EA, 0x30EB, 0x30EC, 0x30ED, 0x30EF, 0x30F0,
- 0x30F1, 0x30F2, 0x30F3, 0x65E5, 0x6708, 0x706B, 0x6C34, 0x6728,
- 0x91D1, 0x571F, 0x554F, 0x7B54, 0x4F8B, 0x25A0, 0x33C2, 0x33CD,
- 0x2116, 0x0000, 0x33D8, 0x33DA, 0x2121, 0x2122, 0x0000, 0x2100,
- 0x33C2, 0x0000, 0x33C4, 0x2105, 0x3397, 0x3371, 0x3398, 0x2113,
- 0x338D, 0x339B, 0x3396, 0x0000, 0x0000, 0x33D7, 0x33D8, 0x0000,
- 0x0000, 0x0000, 0x3301, 0x3302, 0x3304, 0x3306, 0x0000, 0x3308,
- 0x0000, 0x3307, 0x330A, 0x0000, 0x3309, 0x0000, 0x330B, 0x0000,
- 0x330C, 0x330E, 0x330F, 0x3310, 0x3311, 0x3312, 0x3313, 0x0000,
- 0x3317, 0x0000, 0x3319, 0x0000, 0x331A, 0x331B, 0x331C, 0x331D,
- 0x331F, 0x3320, 0x3321, 0x3324, 0x0000, 0x3325, 0x0000, 0x0000,
- 0x3328, 0x3329, 0x0000, 0x332D, 0x0000, 0x0000, 0x332E, 0x332F,
- 0x3330, 0x3332, 0x0000, 0x0000, 0x3334, 0x3335, 0x333C, 0x0000,
- 0x0000, 0x0000, 0x3337, 0x0000, 0x3338, 0x333A, 0x333D, 0x3341,
- 0x333E, 0x333F, 0x3340, 0x3343, 0x3344, 0x3345, 0x3346, 0x3348,
- 0x334B, 0x334C, 0x334F, 0x3350, 0x0000, 0x0000, 0x3352, 0x3354,
- 0x0000, 0x0000, 0x3353, 0x3355, 0x3356, 0x0000, 0x3301, 0x3302,
- 0x3304, 0x3306, 0x0000, 0x3308, 0x0000, 0x3307, 0x330A, 0x0000,
- 0x3309, 0x0000, 0x330B, 0x0000, 0x330C, 0x330E, 0x330F, 0x3310,
- 0x3311, 0x3312, 0x3313, 0x0000, 0x3317, 0x0000, 0x3319, 0x0000,
- 0x331A, 0x331B, 0x331C, 0x331D, 0x331F, 0x3320, 0x3321, 0x3324,
- 0x0000, 0x3325, 0x0000, 0x0000, 0x3328, 0x3329, 0x0000, 0x332D,
- 0x0000, 0x0000, 0x332E, 0x332F, 0x3330, 0x3332, 0x0000, 0x0000,
- 0x3334, 0x3335, 0x333C, 0x0000, 0x0000, 0x0000, 0x3337, 0x0000,
- 0x3338, 0x333A, 0x333D, 0x3341, 0x333E, 0x333F, 0x3340, 0x3343,
- 0x3344, 0x3345, 0x3346, 0x3348, 0x334B, 0x334C, 0x334F, 0x3350,
- 0x0000, 0x0000, 0x3352, 0x3354, 0x0000, 0x0000, 0x3353, 0x3355,
- 0x3356, 0x337E, 0x337D, 0x337C, 0x337B, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x002D,
- 0x003D, 0x2103, 0x2640, 0x2642, 0x3013, 0x3012, 0x300C, 0x300D,
- 0x300E, 0x300F, 0x301A, 0x301B, 0x3018, 0x3019, 0xFF08, 0xFF09,
- 0x301D, 0x301E, 0x2018, 0x2019, 0x201C, 0x201D, 0x0027, 0x0022,
- 0x0000, 0x2135, 0x03D0, 0x220A, 0x210F, 0x00B5, 0x03C6, 0x03DB,
- 0x03D1, 0xFFFD, 0x2668, 0x2669, 0x266C, 0xFF1A, 0x00A9, 0x00A9,
- 0x00AE, 0x00AE, 0x303B, 0x303B, 0x3033, 0x3034, 0x3035, 0x203C,
- 0x2049, 0x0021, 0x203C, 0x2049, 0x244A, 0x0000, 0x2213, 0x2260,
- 0x2243, 0x2272, 0x2273, 0x300C, 0x300D, 0x300E, 0x300F, 0x301A,
- 0x301B, 0x3018, 0x3019, 0xFF5F, 0xFF60, 0x300C, 0x300D, 0x300E,
- 0x300F, 0x301A, 0x301B, 0x3018, 0x3019, 0xFF5F, 0xFF60, 0x239B,
- 0x239D, 0x239E, 0x23A0, 0x239D, 0x239B, 0x23A0, 0x239E, 0x23A1,
- 0x23A3, 0x23A4, 0x23A6, 0x23A3, 0x23A1, 0x23A6, 0x23A4, 0x23A1,
- 0x23A3, 0x23A4, 0x23A6, 0x23A3, 0x23A1, 0x23A6, 0x23A4, 0xFF5C,
- 0x2015, 0x301D, 0x301E, 0x2018, 0x2019, 0x2018, 0x2019, 0x2702,
- 0x2702, 0x2702, 0x2702, 0x303D, 0x3012, 0x309F, 0x534D, 0x2207,
- 0x2205, 0x22A0, 0x2296, 0x2298, 0x2295, 0x2297, 0x229E, 0x2295,
- 0x0021, 0x25B3, 0x25C0, 0x25B6, 0x21E6, 0x21E8, 0x21E7, 0x21E9,
- 0x21D0, 0x2194, 0x2198, 0x2199, 0x2196, 0x2197, 0x21CC, 0x21C6,
- 0x21C4, 0x21C5, 0x2190, 0x2192, 0x2191, 0x2193, 0x2194, 0x2195,
- 0x2504, 0x2506, 0x3030, 0x2307, 0x3030, 0x2307, 0x3030, 0x2307,
- 0x3030, 0x2307, 0x3030, 0x2307, 0x2740, 0x273F, 0x25A1, 0x25A0,
- 0x25A1, 0x25A1, 0x25A1, 0x25A1, 0x25A1, 0x25AB, 0x25A0, 0x25AA,
- 0x271A, 0x271A, 0x25C7, 0x25C6, 0x25C7, 0x25C7, 0x25C7, 0x25C7,
- 0x25C7, 0x25C6, 0x25C6, 0x25CE, 0x25C9, 0x25CB, 0x25E6, 0x25CF,
- 0x2022, 0x2756, 0x2756, 0x2756, 0x2756, 0x3008, 0x3009, 0x3008,
- 0x3009, 0x300A, 0x300B, 0x300A, 0x300B, 0x3053, 0x3053, 0x30B3,
- 0x30B3, 0x309D, 0x309E, 0x3041, 0x3042, 0x3043, 0x3044, 0x3045,
- 0x3046, 0x3047, 0x3048, 0x3049, 0x304A, 0x304B, 0x304B, 0x304C,
- 0x304D, 0x304E, 0x304F, 0x3050, 0x3051, 0x3051, 0x3052, 0x3053,
- 0x3053, 0x3054, 0x3055, 0x3056, 0x3057, 0x3058, 0x3059, 0x305A,
- 0x305B, 0x305C, 0x305D, 0x305E, 0x305F, 0x3060, 0x3061, 0x3062,
- 0x3063, 0x3064, 0x3065, 0x3066, 0x3067, 0x3068, 0x3069, 0x306A,
- 0x306B, 0x306C, 0x306D, 0x306E, 0x306F, 0x3070, 0x3071, 0x3072,
- 0x3073, 0x3074, 0x3075, 0x3076, 0x3077, 0x3078, 0x3079, 0x307A,
- 0x307B, 0x307C, 0x307D, 0x307E, 0x307F, 0x3080, 0x3081, 0x3082,
- 0x3083, 0x3084, 0x3085, 0x3086, 0x3087, 0x3088, 0x3089, 0x308A,
- 0x308B, 0x308C, 0x308D, 0x308E, 0x308F, 0x3090, 0x3091, 0x3092,
- 0x3093, 0x3094, 0x30FD, 0x30FE, 0x30FC, 0x30A1, 0x30A2, 0x30A3,
- 0x30A4, 0x30A5, 0x30A6, 0x30A7, 0x30A8, 0x30A9, 0x30AA, 0x30F5,
- 0x30AB, 0x30AC, 0x30AD, 0x30AE, 0x30AF, 0x30B0, 0x30F6, 0x30B1,
- 0x30B2, 0x30B3, 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, 0x30F7, 0x30F8, 0x30F9, 0x30FA,
- 0x309D, 0x309E, 0x3041, 0x3042, 0x3043, 0x3044, 0x3045, 0x3046,
- 0x3047, 0x3048, 0x3049, 0x304A, 0x304B, 0x304B, 0x304C, 0x304D,
- 0x304E, 0x304F, 0x3050, 0x3051, 0x3051, 0x3052, 0x3053, 0x3053,
- 0x3054, 0x3055, 0x3056, 0x3057, 0x3058, 0x3059, 0x305A, 0x305B,
- 0x305C, 0x305D, 0x305E, 0x305F, 0x3060, 0x3061, 0x3062, 0x3063,
- 0x3064, 0x3065, 0x3066, 0x3067, 0x3068, 0x3069, 0x306A, 0x306B,
- 0x306C, 0x306D, 0x306E, 0x306F, 0x3070, 0x3071, 0x3072, 0x3073,
- 0x3074, 0x3075, 0x3076, 0x3077, 0x3078, 0x3079, 0x307A, 0x307B,
- 0x307C, 0x307D, 0x307E, 0x307F, 0x3080, 0x3081, 0x3082, 0x3083,
- 0x3084, 0x3085, 0x3086, 0x3087, 0x3088, 0x3089, 0x308A, 0x308B,
- 0x308C, 0x308D, 0x308E, 0x308F, 0x3090, 0x3091, 0x3092, 0x3093,
- 0x3094, 0x30FD, 0x30FE, 0x30FC, 0x30A1, 0x30A2, 0x30A3, 0x30A4,
- 0x30A5, 0x30A6, 0x30A7, 0x30A8, 0x30A9, 0x30AA, 0x30F5, 0x30AB,
- 0x30AC, 0x30AD, 0x30AE, 0x30AF, 0x30B0, 0x30F6, 0x30B1, 0x30B2,
- 0x30B3, 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, 0x30F7, 0x30F8, 0x30F9, 0x30FA, 0x3001,
- 0x3002, 0x30FB, 0xFF0A, 0x203B, 0x25CB, 0x25CE, 0x25C9, 0x25B3,
- 0x25B2, 0x30FD, 0x30FE, 0x309D, 0x309E, 0xFF08, 0xFF09, 0x3014,
- 0x3015, 0xFF08, 0xFF09, 0x3014, 0x3015, 0x0030, 0x0031, 0x0032,
- 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x3041,
- 0x3042, 0x3043, 0x3044, 0x3045, 0x3046, 0x3047, 0x3048, 0x3049,
- 0x304A, 0x304B, 0x304B, 0x304C, 0x304D, 0x304E, 0x304F, 0x3050,
- 0x3051, 0x3051, 0x3052, 0x3053, 0x3054, 0x3055, 0x3056, 0x3057,
- 0x3058, 0x3059, 0x305A, 0x305B, 0x305C, 0x305D, 0x305E, 0x305F,
- 0x3060, 0x3061, 0x3062, 0x3063, 0x3064, 0x3065, 0x3066, 0x3067,
- 0x3068, 0x3069, 0x306A, 0x306B, 0x306C, 0x306D, 0x306E, 0x306F,
- 0x3070, 0x3071, 0x3072, 0x3073, 0x3074, 0x3075, 0x3076, 0x3077,
- 0x3078, 0x3079, 0x307A, 0x307B, 0x307C, 0x307D, 0x307E, 0x307F,
- 0x3080, 0x3081, 0x3082, 0x3083, 0x3084, 0x3085, 0x3086, 0x3087,
- 0x3088, 0x3089, 0x308A, 0x308B, 0x308C, 0x308D, 0x308E, 0x308F,
- 0x3090, 0x3091, 0x3092, 0x3093, 0x3094, 0x3041, 0x3043, 0x3045,
- 0x3047, 0x3049, 0x304B, 0x3051, 0x3063, 0x3083, 0x3085, 0x3087,
- 0x308E, 0x30A1, 0x30A2, 0x30A3, 0x30A4, 0x30A5, 0x30A6, 0x30A7,
- 0x30A8, 0x30A9, 0x30AA, 0x30AB, 0x30F5, 0x30AC, 0x30AD, 0x30AE,
- 0x30AF, 0x30B0, 0x30B1, 0x30F6, 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, 0x30A1,
- 0x30A3, 0x30A5, 0x30A7, 0x30A9, 0x30F5, 0x30F6, 0x30C3, 0x30E3,
- 0x30E5, 0x30E7, 0x30EE, 0x30FC, 0x30FC, 0x6CE8, 0x20AC, 0x2126,
- 0x2032, 0x2033, 0xFB00, 0xFB03, 0xFB04, 0x0101, 0x012B, 0x016B,
- 0x0113, 0x014D, 0x0100, 0x012A, 0x016A, 0x0112, 0x014C, 0x215B,
- 0x215C, 0x215D, 0x215E, 0x2153, 0x2154, 0x2070, 0x2074, 0x2075,
- 0x2076, 0x2077, 0x2078, 0x2079, 0x2080, 0x2081, 0x2082, 0x2083,
- 0x2084, 0x2085, 0x2086, 0x2087, 0x2088, 0x2089, 0x01CD, 0x011A,
- 0x0000, 0x1EBC, 0x01CF, 0x0000, 0x0128, 0x01D1, 0x0000, 0x01D3,
- 0x016E, 0x0168, 0x01CE, 0x011B, 0x0000, 0x1EBD, 0x01D0, 0x0000,
- 0x0129, 0x01D2, 0x0000, 0x01D4, 0x016F, 0x0169, 0x0251, 0x0251,
- 0x0251, 0x01FD, 0x00E6, 0x0254, 0x0254, 0x0254, 0x0259, 0x0259,
- 0x0259, 0x025A, 0x025A, 0x025A, 0x025B, 0x025B, 0x025B, 0x006A,
- 0x014B, 0x0275, 0x028C, 0x028C, 0x028C, 0x0292, 0x0283, 0x02D0,
- 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, 0x00A5, 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, 0x00A6, 0x007D, 0x0303, 0x02BC,
- 0x005C, 0x02BB, 0x007C, 0x007E, 0x00A1, 0x00A2, 0x00A3, 0x2044,
- 0x0192, 0x00A7, 0x00A4, 0x201C, 0x00AB, 0x2039, 0x203A, 0xFB01,
- 0xFB02, 0x2012, 0x2020, 0x2021, 0x00B7, 0x00B6, 0x2022, 0x201A,
- 0x201E, 0x201D, 0x00BB, 0x2026, 0x2030, 0x00BF, 0x0301, 0x0302,
- 0x00AF, 0x0306, 0x0307, 0x0308, 0x030A, 0x00B8, 0x030B, 0x0328,
- 0x030C, 0x0336, 0x00C6, 0x00AA, 0x0141, 0x00D8, 0x0152, 0x00BA,
- 0x00E6, 0x0131, 0x0142, 0x00F8, 0x0153, 0x00DF, 0x002D, 0x00A9,
- 0x00AC, 0x00AE, 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B5, 0x00B9,
- 0x00BC, 0x00BD, 0x00BE, 0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4,
- 0x00C5, 0x00C7, 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD,
- 0x00CE, 0x00CF, 0x00D0, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5,
- 0x00D6, 0x00D7, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x00DD, 0x00DE,
- 0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E7, 0x00E8,
- 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF, 0x00F0,
- 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x00F7, 0x00F9,
- 0x00FA, 0x00FB, 0x00FC, 0x00FD, 0x00FE, 0x00FF, 0x0160, 0x0178,
- 0x017D, 0x0305, 0x0161, 0x2122, 0x017E, 0x0030, 0x20AC, 0x2126,
- 0x2032, 0x2033, 0xFB00, 0xFB03, 0xFB04, 0x0101, 0x012B, 0x016B,
- 0x0113, 0x014D, 0x0100, 0x012A, 0x016A, 0x0112, 0x014C, 0x215B,
- 0x215C, 0x215D, 0x215E, 0x2153, 0x2154, 0x2070, 0x2074, 0x2075,
- 0x2076, 0x2077, 0x2078, 0x2079, 0x2080, 0x2081, 0x2082, 0x2083,
- 0x2084, 0x2085, 0x2086, 0x2087, 0x2088, 0x2089, 0x01CD, 0x011A,
- 0x0000, 0x1EBC, 0x01CF, 0x0000, 0x0128, 0x01D1, 0x0000, 0x01D3,
- 0x016E, 0x0168, 0x01CE, 0x011B, 0x0000, 0x1EBD, 0x01D0, 0x0000,
- 0x0129, 0x01D2, 0x0000, 0x01D4, 0x016F, 0x0169, 0x0030, 0x0031,
- 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039,
- 0x0336, 0x002D, 0x003D, 0x002C, 0x0028, 0x0029, 0x002E, 0x002F,
- 0x003A, 0x003B, 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035,
- 0x0036, 0x0037, 0x0038, 0x0039, 0x0336, 0x002D, 0x003D, 0x002C,
- 0x0028, 0x0029, 0x002E, 0x002F, 0x003A, 0x003B, 0x00B7, 0x002D,
- 0x003D, 0x2103, 0x2640, 0x2642, 0x3013, 0x3012, 0x300C, 0x300D,
- 0x300E, 0x300F, 0x301A, 0x301B, 0x3018, 0x3019, 0xFF08, 0xFF09,
- 0x301D, 0x301E, 0x2018, 0x2019, 0x201C, 0x201D, 0x0027, 0x0022,
- 0x9038, 0x8B01, 0x7DE3, 0x9EC3, 0x6EAB, 0x798D, 0x6094, 0x6D77,
- 0x6168, 0x6982, 0x6E34, 0x8910, 0x6F22, 0x5668, 0x65E2, 0x7948,
- 0x865B, 0x97FF, 0x52E4, 0x8B39, 0x63ED, 0x64CA, 0x784F, 0x7A40,
- 0x6BBA, 0x7949, 0x8996, 0x716E, 0x793E, 0x8005, 0x81ED, 0x795D,
- 0x6691, 0x7F72, 0x6D89, 0x72C0, 0x613C, 0x771E, 0x7BC0, 0x7956,
- 0x50E7, 0x5C64, 0x5DE2, 0x618E, 0x8D08, 0x537D, 0x5606, 0x8457,
- 0x5FB5, 0x61F2, 0x93AD, 0x798E, 0x9B2D, 0x7A81, 0x96E3, 0x6885,
- 0x7E41, 0x6669, 0x5351, 0x7891, 0x8CD3, 0x654F, 0x4FAE, 0x5002,
- 0x5840, 0x52C9, 0x6B65, 0x58A8, 0x6BCF, 0x514D, 0x623E, 0x7950,
- 0x6B04, 0x9686, 0x865C, 0x6DDA, 0x985E, 0x66C6, 0x6B77, 0x7DF4,
- 0x934A, 0x5ECA, 0x9304, 0x6982, 0x51B4, 0x634C, 0x86DB, 0x9089,
- 0x9022, 0x5049, 0x7DEF, 0x9055, 0x53A9, 0x990C, 0x885B, 0x5EF6,
- 0x6CBF, 0x925B, 0x7FC1, 0x82BD, 0x96C5, 0x5BB3, 0x6168, 0x6982,
- 0x6BBB, 0x6562, 0x8CAB, 0x5DCC, 0x9811, 0x5E30, 0x8ECC, 0x7AAE,
- 0x5747, 0x5091, 0x7A74, 0x5065, 0x5EFA, 0x9237, 0x6A8E, 0x4EA4,
- 0x516C, 0x66F4, 0x6821, 0x786C, 0x7D5E, 0x8003, 0x8CFC, 0x964D,
- 0x62F7, 0x7F6A, 0x4F7F, 0x53F2, 0x59C9, 0x8B1D, 0x90AA, 0x53CE,
- 0x8F2F, 0x67D4, 0x77AC, 0x821C, 0x696F, 0x677E, 0x8A1F, 0x4E08,
- 0x57F4, 0x690D, 0x8077, 0x89AA, 0x9042, 0x636E, 0x6442, 0x8239,
- 0x7DCF, 0x8061, 0x50CF, 0x8A95, 0x6065, 0x5146, 0x773A, 0x8074,
- 0x8DF3, 0x5EAD, 0x5EF7, 0x8247, 0x6843, 0x9003, 0x6D3E, 0x6392,
- 0x8F29, 0x73ED, 0x9812, 0x60B2, 0x6249, 0x6590, 0x7DCB, 0x8AB9,
- 0x8CA7, 0x7236, 0x847A, 0x5206, 0x5674, 0x61A4, 0x7C89, 0x7D1B,
- 0x96F0, 0x853D, 0x4FBF, 0x6367, 0x76C6, 0x685D, 0x8108, 0x8036,
- 0x7FFC, 0x540F, 0x96A3, 0x9E9F, 0x9E97, 0x806F, 0x807E, 0x6E7E,
- 0x5085, 0x5193, 0x51DB, 0x5315, 0x5340, 0x96D9, 0x55A9, 0x56C1,
- 0x570D, 0x58AB, 0x59DA, 0x5A36, 0x5ABE, 0x5D4E, 0x5D87, 0x5DC9,
- 0x5DD3, 0x5F2D, 0x5F98, 0x60D8, 0x613D, 0x61FE, 0x6268, 0x62CF,
- 0x651D, 0x640F, 0x64F2, 0x655D, 0x665F, 0x67A9, 0x67E7, 0x696B,
- 0x6930, 0x69A7, 0x6A44, 0x6A90, 0x6C08, 0x6C13, 0x6E23, 0x6F11,
- 0x6EFE, 0x6F3E, 0x71FF, 0x73E5, 0x7432, 0x745F, 0x74E0, 0x750C,
- 0x7672, 0x792A, 0x78D4, 0x79BA, 0x7A19, 0x7A95, 0x7CF2, 0x7D73,
- 0x7DDD, 0x7E35, 0x7FAE, 0x7FE1, 0x805A, 0x805F, 0x8073, 0x8070,
- 0x8076, 0x8153, 0x818A, 0x81B5, 0x81CD, 0x83F2, 0x8555, 0x85D5,
- 0x871A, 0x8836, 0x889E, 0x88D8, 0x88F4, 0x892B, 0x893B, 0x896A,
- 0x896F, 0x8A1D, 0x8D05, 0x8D0F, 0x9F4E, 0x8E91, 0x8EA1, 0x9052,
- 0x900E, 0x9130, 0x9156, 0x9158, 0x9165, 0x9173, 0x9172, 0x91A2,
- 0x91AF, 0x91AA, 0x91B4, 0x91BA, 0x9477, 0x9698, 0x973D, 0x9760,
- 0x9771, 0x980C, 0x9873, 0x98C3, 0x9A45, 0x9B4D, 0x9B58, 0x9BC6,
- 0x9BE1, 0x9BF1, 0x9D48, 0x9DCF, 0x9F08, 0x6271, 0x6697, 0x610F,
- 0x8863, 0x9055, 0x907A, 0x78EF, 0x54E1, 0x2ED7, 0x2EBD, 0x53A9,
- 0x74DC, 0x904B, 0x990C, 0x885E, 0x92B3, 0x95B1, 0x5EF6, 0x63F4,
- 0x6CBF, 0x7159, 0x9060, 0x925B, 0x65BC, 0x5F80, 0x7FC1, 0x5378,
- 0x97F3, 0x5316, 0x82B1, 0x83D3, 0x8CA8, 0x904E, 0x82BD, 0x96C5,
- 0x9913, 0x5EFB, 0x7070, 0x5BB3, 0x6168, 0x6168, 0x6168, 0x69EA,
- 0x6982, 0x676E, 0x89D2, 0x9694, 0x5272, 0x8F44, 0x938C, 0x82C5,
- 0x5BD2, 0x74B0, 0x7DE9, 0x7F36, 0x9084, 0x9592, 0x97D3, 0x8218,
- 0x5371, 0x559C, 0x3402, 0x3402, 0x5E7E, 0x65E3, 0x671F, 0x6A5F,
- 0x8D77, 0x98E2, 0x5409, 0x55AB, 0x8650, 0x9006, 0x53CA, 0x5438,
- 0x6025, 0x7D1A, 0x5DE8, 0x62D2, 0x8DDD, 0x9B5A, 0x9B5A, 0x537F,
- 0x5F3A, 0x6050, 0x69C1, 0x6A4B, 0x6A4B, 0x9115, 0x97FF, 0x9957,
- 0x6681, 0x2EA9, 0x8FD1, 0x5036, 0x77E9, 0x5177, 0x865E, 0x7A7A,
- 0x9047, 0x6ADB, 0x5553, 0x5951, 0x6075, 0x6167, 0x8FCE, 0x5091,
- 0x6F54, 0x7A74, 0x2EBC, 0x2EBC, 0x517C, 0x5238, 0x61B2, 0x6743,
- 0x80A9, 0x8B19, 0x9063, 0x539F, 0x8A01, 0x6236, 0x96C7, 0x9867,
- 0x5433, 0x5A1B, 0x8AA4, 0x5DE5, 0x614C, 0x6285, 0x63A7, 0x69CB,
- 0x6D69, 0x6E2F, 0x8015, 0x8154, 0x8352, 0x8B1B, 0x8CFC, 0x543F,
- 0x9177, 0x8170, 0x7511, 0x8FBC, 0x4ECA, 0x9396, 0x5EA7, 0x5F69,
- 0x63A1, 0x6B72, 0x83DC, 0x51B4, 0x54B2, 0x524A, 0x7522, 0x9910,
- 0x59FF, 0x59FF, 0x5DFF, 0x8AEE, 0x8AEE, 0x8CC7, 0x8CC7, 0x6B21,
- 0x6B21, 0x6ECB, 0x73BA, 0x53F1, 0x6368, 0x659C, 0x90AA, 0x52FA,
- 0x7235, 0x7235, 0x914C, 0x5F31, 0x4E3B, 0x53D7, 0x6388, 0x5468,
- 0x7D42, 0x7FD2, 0x8846, 0x9031, 0x4F4F, 0x8853, 0x8FF0, 0x5DE1,
- 0x9075, 0x9075, 0x6240, 0x66F8, 0x5973, 0x52DD, 0x5546, 0x5BB5,
- 0x5C06, 0x2E8C, 0x2E8D, 0x5C19, 0x6D88, 0x785D, 0x8096, 0x4E08,
- 0x5B82, 0x57CE, 0x60C5, 0x57F4, 0x98FE, 0x690D, 0x6B96, 0x98DF,
- 0x98E0, 0x2EDE, 0x378D, 0x4FB5, 0x2E97, 0x6D78, 0x771F, 0x9032,
- 0x4EBB, 0x4EBA, 0x5203, 0x5C0B, 0x8A0A, 0x8A0A, 0x8FC5, 0x8870,
- 0x9042, 0x351F, 0x52E2, 0x6210, 0x76DB, 0x8056, 0x8980, 0x8AA0,
- 0x8ACB, 0x975C, 0x975C, 0x7A05, 0x8106, 0x96BB, 0x7C4D, 0x7BC0,
- 0x8AAA, 0x96EA, 0x7D76, 0x6247, 0x6F98, 0x7FA1, 0x8239, 0x9078,
- 0x9077, 0x524D, 0x5168, 0x6383, 0x63F7, 0x7626, 0x8D70, 0x9001,
- 0x906D, 0x9020, 0x2ECA, 0x901F, 0x8CCA, 0x5C0A, 0x5C0A, 0x59A5,
- 0x6CF0, 0x9000, 0x902E, 0x968A, 0x9BDB, 0x5927, 0x3427, 0x7027,
- 0x9054, 0x812B, 0x4E39, 0x6B4E, 0x70AD, 0x8A95, 0x6696, 0x5024,
- 0x7F6E, 0x7BC9, 0x2EAE, 0x7B51, 0x9010, 0x67F1, 0x6CE8, 0x99D0,
- 0x5F6B, 0x5FB5, 0x61F2, 0x671D, 0x6F6E, 0x8ABF, 0x76F4, 0x6715,
- 0x6715, 0x589C, 0x8FFD, 0x901A, 0x576A, 0x91E3, 0x5448, 0x5E1D,
- 0x7A0B, 0x7684, 0x9069, 0x8FED, 0x6DFB, 0x514E, 0x9014, 0x783A,
- 0x5721, 0x571F, 0x51AC, 0x5510, 0x7CD6, 0x85E4, 0x8B04, 0x9003,
- 0x900F, 0x9A30, 0x5C0E, 0x9053, 0x5451, 0x3B88, 0x5167, 0x8089,
- 0x4E73, 0x5FCD, 0x8A8D, 0x5BE7, 0x7D0D, 0x8987, 0x6D3E, 0x80BA,
- 0x535A, 0x8584, 0x8FEB, 0x7E1B, 0x8087, 0x4E37, 0x6F51, 0x91B1,
- 0x4F34, 0x5224, 0x534A, 0x5E06, 0x7554, 0x6669, 0x8543, 0x907F,
- 0x5FAE, 0x9F3B, 0x5339, 0x2EAA, 0x5F65, 0x59EC, 0x59EB, 0x8A55,
- 0x5E99, 0x75C5, 0x5A66, 0x6577, 0x6D6E, 0x8CA0, 0x8CA0, 0x670D,
- 0x8986, 0x4E19, 0x5E63, 0x5E73, 0x5F0A, 0x8511, 0x504F, 0x7DE8,
- 0x8FD4, 0x904D, 0x7C3F, 0x5305, 0x5D29, 0x62B1, 0x670B, 0x7832,
- 0x7E2B, 0x80DE, 0x840C, 0x90A6, 0x90A6, 0x98FD, 0x9D6C, 0x4EA1,
- 0x5E3D, 0x5FD8, 0x5FD9, 0x623F, 0x671B, 0x671B, 0x5192, 0x6469,
- 0x7FFB, 0x51E1, 0x78E8, 0x9B54, 0x2FC7, 0x69D9, 0x685D, 0x4FE3,
- 0x53C8, 0x7E6D, 0x9EBF, 0x8108, 0x660E, 0x76DF, 0x8FF7, 0x5984,
- 0x52D0, 0x76F2, 0x8017, 0x623E, 0x7D0B, 0x9580, 0x7D04, 0x8E8D,
- 0x687A, 0x687A, 0x6801, 0x6109, 0x8AED, 0x8F38, 0x52C7, 0x6709,
- 0x7336, 0x7336, 0x7337, 0x88D5, 0x904A, 0x66DC, 0x2EB7, 0x8981,
- 0x990A, 0x7FCC, 0x7FFC, 0x8EB6, 0x862D, 0x7387, 0x9F8D, 0x9F8D,
- 0x65C5, 0x6881, 0x71D0, 0x96A3, 0x9C57, 0x9E9F, 0x7C7B, 0x5EC9,
- 0x6190, 0x9023, 0x6717, 0x8002, 0x8107, 0x50CA, 0x511A, 0x5154,
- 0x5195, 0x2E87, 0x528D, 0x52D7, 0x52F9, 0x5349, 0x353E, 0x53DF,
- 0x66FC, 0x5533, 0x55E4, 0x5455, 0x56C0, 0x5939, 0x5A1C, 0x5AC2,
- 0x5B73, 0x5BC3, 0x5C14, 0x37E2, 0x5CE6, 0x5E54, 0x4E48, 0x5EE3,
- 0x6097, 0x62D4, 0x62CC, 0x641C, 0x63C6, 0x6428, 0x8209, 0x631B,
- 0x665F, 0x665F, 0x6663, 0x66F5, 0x675E, 0x689D, 0x688D, 0x69F6,
- 0x6961, 0x5BE8, 0x5BE8, 0x69BB, 0x6BCC, 0x6F11, 0x6E17, 0x6F98,
- 0x6CAA, 0x6CAA, 0x701B, 0x7162, 0x723B, 0x4E2C, 0x731C, 0x74CA,
- 0x74EF, 0x7575, 0x75EC, 0x764E, 0x3FB1, 0x776A, 0x77A9, 0x7940,
- 0x7953, 0x7953, 0x9F4B, 0x79AE, 0x9083, 0x7B53, 0x7C11, 0x7C14,
- 0x4264, 0x7C50, 0x7C58, 0x7D46, 0x7D63, 0x7E22, 0x7E22, 0x7E48,
- 0x7E35, 0x7E43, 0x7E8C, 0x7F50, 0x7F51, 0x7F51, 0x7F51, 0x7FC5,
- 0x7FC6, 0x7FE9, 0x8141, 0x4453, 0x8258, 0x8279, 0x2EBF, 0x2EC0,
- 0x82E3, 0x5179, 0x83A2, 0x8420, 0x83BD, 0x84F4, 0x856D, 0x8587,
- 0x85F4, 0x4E55, 0x8737, 0x873B, 0x8805, 0x87BD, 0x867D, 0x8836,
- 0x8944, 0x88C6, 0x89BD, 0x8ADB, 0x8B3E, 0x8B5A, 0x8D73, 0x8D99,
- 0x8DCB, 0x8E34, 0x8E4A, 0x8FEF, 0x9087, 0x8FFA, 0x901E, 0x9035,
- 0x9050, 0x8FC8, 0x9081, 0x908A, 0x908A, 0x908A, 0x908A, 0x908A,
- 0x908A, 0x9089, 0x9089, 0x9089, 0x9089, 0x9089, 0x9089, 0x9089,
- 0x9089, 0x9089, 0x9089, 0x9089, 0x9089, 0x92CF, 0x93DD, 0x95BC,
- 0x9621, 0x96B2, 0x975C, 0x9839, 0x98EB, 0x9903, 0x9909, 0x9945,
- 0x9945, 0x994B, 0x9A08, 0x9A5F, 0x9A65, 0x9AEF, 0x9B18, 0x9BDF,
- 0x9D09, 0x9D08, 0x9EA5, 0x9ECC, 0x9F08, 0x9F4A, 0x9F63, 0x9F67,
- 0x9F6C, 0x7199, 0x7199, 0x891C, 0x68C8, 0x66FB, 0x5F45, 0x5300,
- 0x5389, 0x5953, 0xFA11, 0x6852, 0x6A73, 0x6D87, 0xFA15, 0x8A12,
- 0x4E04, 0x4E05, 0x4E1F, 0x4E2B, 0x4E2F, 0x4E30, 0x4E40, 0x4E41,
- 0x4E44, 0x4E5A, 0x4E7F, 0x4E8D, 0x4E96, 0x4EB9, 0x4ED0, 0x4EE0,
- 0x4EFD, 0x4EFF, 0x4F0B, 0x4F15, 0x4F60, 0x4F3B, 0x4F49, 0x4F54,
- 0x4F7A, 0x4F7D, 0x4F7E, 0x4F97, 0x4FBE, 0x4FCF, 0x4FFD, 0x5000,
- 0x5001, 0x5010, 0x501B, 0x5027, 0x502E, 0x5057, 0x5066, 0x506A,
- 0x503B, 0x508F, 0x5096, 0x509C, 0x50CC, 0x50E6, 0x50E9, 0x50EF,
- 0x5108, 0x510B, 0x5110, 0x511B, 0x511E, 0x515F, 0x51A1, 0x51BC,
- 0x51DE, 0x51EE, 0x51F4, 0x5201, 0x5202, 0x5213, 0x5249, 0x5261,
- 0x5266, 0x5293, 0x52C8, 0x52F0, 0x530A, 0x530B, 0x533E, 0x534C,
- 0x534B, 0x5361, 0x536C, 0x53AB, 0x53DA, 0x53E6, 0x53F5, 0x5427,
- 0x544D, 0x5466, 0x546B, 0x5474, 0x548D, 0x5496, 0x54A1, 0x54AD,
- 0x54B9, 0x54BF, 0x54C6, 0x54CD, 0x550E, 0x552B, 0x5535, 0x554A,
- 0x5560, 0x5561, 0x5588, 0x558E, 0x5608, 0x560E, 0x560F, 0x5637,
- 0x563F, 0x5649, 0x564B, 0x564F, 0x5666, 0x5669, 0x566F, 0x5671,
- 0x5672, 0x5695, 0x569A, 0x56AC, 0x56AD, 0x56B1, 0x56C9, 0x56DD,
- 0x56E4, 0x570A, 0x5715, 0x5723, 0x572F, 0x5733, 0x5734, 0x574C,
- 0x5770, 0x578C, 0x579C, 0x57B8, 0x57E6, 0x57ED, 0x57F5, 0x57F6,
- 0x57FF, 0x5809, 0x5820, 0x5832, 0x587C, 0x5880, 0x58A9, 0x58CE,
- 0x58D0, 0x58D4, 0x58DA, 0x58E9, 0x590C, 0x5924, 0x592F, 0x5961,
- 0x596D, 0x59CA, 0x59D2, 0x59DD, 0x59E3, 0x59E4, 0x5A04, 0x5A0C,
- 0x5A23, 0x5A47, 0x5A55, 0x5A63, 0x5A6D, 0x5A7E, 0x5A9E, 0x5AA7,
- 0x5AAC, 0x5AB3, 0x5AE0, 0x5B00, 0x5B19, 0x5B25, 0x5B2D, 0x5B41,
- 0x5B7C, 0x5B7E, 0x5B7F, 0x5B8A, 0x5C23, 0x5C2B, 0x5C30, 0x5C63,
- 0x5C69, 0x5C7C, 0x5CCB, 0x5CD2, 0x5CF4, 0x5D24, 0x5D26, 0x5D43,
- 0x5D46, 0x5D4A, 0x5D92, 0x5D94, 0x5D99, 0x5DA0, 0x5DD8, 0x5DE0,
- 0x5DF8, 0x5E00, 0x5E12, 0x5E14, 0x5E15, 0x5E18, 0x5E2E, 0x5E58,
- 0x5E6B, 0x5E6C, 0x5EA8, 0x5EAA, 0x5EBE, 0x5EBF, 0x5ECB, 0x5ED2,
- 0x5F07, 0x5F0E, 0x5F1C, 0x5F1D, 0x5F22, 0x5F28, 0x5F36, 0x5F3B,
- 0x5F40, 0x5F50, 0x5F58, 0x5F64, 0x5F89, 0x5F9C, 0x5FA7, 0x5FA4,
- 0x5FAF, 0x5FB8, 0x5FC4, 0x5FC9, 0x5FE1, 0x5FE9, 0x5FED, 0x5FFC,
- 0x6017, 0x601A, 0x6033, 0x6061, 0x607F, 0x609E, 0x60A4, 0x60B0,
- 0x60CB, 0x60DB, 0x60F8, 0x6112, 0x6113, 0x6114, 0x611C, 0x617C,
- 0x618D, 0x619F, 0x61A8, 0x61C2, 0x61DF, 0x6215, 0x6229, 0x6243,
- 0x6246, 0x624C, 0x6251, 0x6256, 0x62C4, 0x62FC, 0x630A, 0x630D,
- 0x6318, 0x6339, 0x6342, 0x6343, 0x6365, 0x6374, 0x637D, 0x6384,
- 0x6387, 0x6390, 0x639E, 0x63D1, 0x63DC, 0x6409, 0x6410, 0x6422,
- 0x6454, 0x645B, 0x646D, 0x647B, 0x64BE, 0x64BF, 0x64E5, 0x64F7,
- 0x64FB, 0x6504, 0x6516, 0x6519, 0x6547, 0x6567, 0x6581, 0x6585,
- 0x65C2, 0x65F0, 0x65F2, 0x662C, 0x664C, 0x665B, 0x665C, 0x6661,
- 0x666B, 0x6677, 0x66A4, 0x66C8, 0x66EC, 0x6705, 0x6713, 0x6733,
- 0x6748, 0x674C, 0x6776, 0x677B, 0x67B0, 0x67B2, 0x67F9, 0x67D7,
- 0x67D9, 0x67F0, 0x682C, 0x6830, 0x6831, 0x685B, 0x6872, 0x6875,
- 0x687A, 0x6884, 0x68A5, 0x68B2, 0x68D0, 0x68D6, 0x68E8, 0x68ED,
- 0x68F0, 0x68F1, 0x68FC, 0x6911, 0x6913, 0x6935, 0x693B, 0x6957,
- 0x6963, 0x6972, 0x697F, 0x6980, 0x69A6, 0x69AD, 0x69B7, 0x69D6,
- 0x69D7, 0x6A01, 0x6A0F, 0x6A15, 0x6A28, 0x6A34, 0x6A3E, 0x6A45,
- 0x6A50, 0x6A51, 0x6A56, 0x6A5B, 0x6A83, 0x6A89, 0x6A91, 0x6A9D,
- 0x6A9E, 0x6A9F, 0x6ADC, 0x6AE7, 0x6AEC, 0x6B1E, 0x6B24, 0x6B35,
- 0x6B46, 0x6B56, 0x6B60, 0x6B82, 0x6BBE, 0x6BE1, 0x6BF1, 0x6C10,
- 0x6C33, 0x6C35, 0x6C3A, 0x6C59, 0x6C76, 0x6C7B, 0x6C85, 0x6C95,
- 0x6C9C, 0x6CD0, 0x6CD4, 0x6CD6, 0x6CE0, 0x6CEB, 0x6CEC, 0x6CEE,
- 0x6D0A, 0x6D0E, 0x6D11, 0x6D2E, 0x6D57, 0x6D5E, 0x6D65, 0x6D82,
- 0x6DBF, 0x6DC4, 0x6DCA, 0x6DD6, 0x6DE9, 0x6E22, 0x6E51, 0x6EC7,
- 0x6ECA, 0x6ECE, 0x6EFD, 0x6F1A, 0x6F2A, 0x6F2F, 0x6F33, 0x6F5A,
- 0x6F5E, 0x6F62, 0x6F7D, 0x6F8B, 0x6F8D, 0x6F92, 0x6F94, 0x6F9A,
- 0x6FA7, 0x6FA8, 0x6FB6, 0x6FDA, 0x6FDE, 0x6FF9, 0x7039, 0x703C,
- 0x704A, 0x7054, 0x705D, 0x705E, 0x7064, 0x706C, 0x707E, 0x7081,
- 0x7095, 0x70B7, 0x70D3, 0x70D4, 0x70D8, 0x70DC, 0x7107, 0x7120,
- 0x7131, 0x714A, 0x7152, 0x7160, 0x7179, 0x7192, 0x71B3, 0x71CB,
- 0x71D3, 0x71D6, 0x7200, 0x721D, 0x722B, 0x7238, 0x7241, 0x7253,
- 0x7255, 0x7256, 0x725C, 0x728D, 0x72AD, 0x72B4, 0x72C7, 0x72FB,
- 0x7304, 0x7305, 0x7328, 0x7331, 0x7343, 0x736C, 0x737C, 0x7383,
- 0x7385, 0x7386, 0x7395, 0x739E, 0x739F, 0x73A0, 0x73A6, 0x73AB,
- 0x73B5, 0x73B7, 0x73BC, 0x73CF, 0x73D9, 0x73E9, 0x73F4, 0x73FD,
- 0x7404, 0x740A, 0x741A, 0x741B, 0x7424, 0x7428, 0x742C, 0x742F,
- 0x7430, 0x7431, 0x7439, 0x7444, 0x7447, 0x744B, 0x744D, 0x7451,
- 0x7457, 0x7466, 0x746B, 0x7471, 0x7480, 0x7485, 0x7486, 0x7487,
- 0x7490, 0x7498, 0x749C, 0x74A0, 0x74A3, 0x74A8, 0x74AB, 0x74B5,
- 0x74BF, 0x74C8, 0x74DA, 0x74DE, 0x754E, 0x7579, 0x7581, 0x7590,
- 0x7592, 0x7593, 0x75B4, 0x75E4, 0x75F9, 0x7600, 0x760A, 0x7615,
- 0x7616, 0x7619, 0x761E, 0x762D, 0x7635, 0x7643, 0x764B, 0x7665,
- 0x766D, 0x766F, 0x7671, 0x7674, 0x76A4, 0x76A5, 0x76C5, 0x76CC,
- 0x76EC, 0x76FC, 0x7734, 0x7736, 0x775C, 0x775F, 0x7760, 0x7772,
- 0x777D, 0x7795, 0x77AA, 0x77E6, 0x77F0, 0x77F4, 0x7806, 0x7822,
- 0x782D, 0x782E, 0x7830, 0x7835, 0x7868, 0x789E, 0x78C8, 0x78CC,
- 0x78CE, 0x78E4, 0x78E0, 0x78E1, 0x78F2, 0x78F7, 0x78FB, 0x7931,
- 0x7934, 0x793B, 0x793D, 0x7945, 0x795B, 0x795C, 0x798B, 0x7996,
- 0x7998, 0x79B8, 0x79BB, 0x79CA, 0x79DA, 0x7A03, 0x7A09, 0x7A11,
- 0x7A1E, 0x7A2D, 0x7A39, 0x7A45, 0x7A4C, 0x7A5D, 0x7A60, 0x7A6D,
- 0x7A78, 0x7AA0, 0x7AA3, 0x7AB3, 0x7ABB, 0x7ABC, 0x7AC6, 0x7B07,
- 0x7B14, 0x7B27, 0x7B31, 0x7B47, 0x7B4E, 0x7B60, 0x7B69, 0x7B6D,
- 0x7B72, 0x7B91, 0x7BAF, 0x7BD7, 0x7BD9, 0x7C0B, 0x7C0F, 0x7C20,
- 0x7C26, 0x7C31, 0x7C36, 0x7C51, 0x7C59, 0x7C67, 0x7C6E, 0x7C70,
- 0x7CBC, 0x7CBF, 0x7CC8, 0x7CC9, 0x7CD7, 0x7CD9, 0x7CDD, 0x7CEB,
- 0x7D07, 0x7D08, 0x7D09, 0x7D13, 0x7D1D, 0x7D23, 0x7D41, 0x7D53,
- 0x7D59, 0x7D5D, 0x7D7A, 0x7D86, 0x7D8B, 0x7D8C, 0x7DCC, 0x7DEB,
- 0x7DF1, 0x7DF9, 0x7E08, 0x7E11, 0x7E15, 0x7E20, 0x7E47, 0x7E62,
- 0x7E6E, 0x7E73, 0x7E8D, 0x7E91, 0x7E98, 0x7F44, 0x7F4F, 0x7F52,
- 0x7F53, 0x7F61, 0x7F91, 0x7FBF, 0x7FCE, 0x7FDF, 0x7FE5, 0x7FEC,
- 0x7FEE, 0x7FEF, 0x7FFA, 0x800E, 0x8011, 0x8014, 0x8024, 0x8026,
- 0x803A, 0x803C, 0x8060, 0x8071, 0x8075, 0x809E, 0x80A6, 0x80AB,
- 0x80D7, 0x80D8, 0x8116, 0x8118, 0x813A, 0x814A, 0x814C, 0x8181,
- 0x8184, 0x81B4, 0x81CF, 0x81F9, 0x8203, 0x8221, 0x8232, 0x8234,
- 0x8246, 0x824B, 0x824F, 0x828E, 0x82AE, 0x82B7, 0x82BE, 0x82C6,
- 0x82FE, 0x8343, 0x8351, 0x8355, 0x8386, 0x838D, 0x8392, 0x8398,
- 0x83A9, 0x83BF, 0x83C0, 0x83EA, 0x840F, 0x8411, 0x844A, 0x8476,
- 0x84A8, 0x84AF, 0x84C0, 0x84C2, 0x84F0, 0x84FD, 0x850C, 0x8534,
- 0x855E, 0x858F, 0x85B7, 0x85CE, 0x85AD, 0x8612, 0x8629, 0x8652,
- 0x8663, 0x866C, 0x866F, 0x867A, 0x868D, 0x8691, 0x8698, 0x86A7,
- 0x86A8, 0x86FA, 0x86FD, 0x870B, 0x8713, 0x8719, 0x871E, 0x8728,
- 0x873E, 0x8771, 0x8788, 0x8799, 0x87AC, 0x87AD, 0x87B5, 0x87D6,
- 0x87EB, 0x87ED, 0x8801, 0x8803, 0x8806, 0x880B, 0x8814, 0x881C,
- 0x8856, 0x885F, 0x8864, 0x8898, 0x88AA, 0x88BD, 0x88BE, 0x88CA,
- 0x88D2, 0x88DB, 0x88F0, 0x88F1, 0x8906, 0x8918, 0x8919, 0x891A,
- 0x8927, 0x8930, 0x893E, 0x897B, 0x89D4, 0x89D6, 0x89E5, 0x89F1,
- 0x8A07, 0x8A0F, 0x8A15, 0x8A22, 0x8A4E, 0x8A7F, 0x8AF4, 0x8B1F,
- 0x8B37, 0x8B43, 0x8B44, 0x8B54, 0x8B9C, 0x8B9E, 0x8C47, 0x8C54,
- 0x8C73, 0x8CA4, 0x8CD9, 0x8CE1, 0x8CF8, 0x8CFE, 0x8D1B, 0x8D69,
- 0x8D6C, 0x8D84, 0x8D8D, 0x8D95, 0x8DA6, 0x8DC6, 0x8DCE, 0x8DE4,
- 0x8DEC, 0x8E20, 0x8E4B, 0x8E6C, 0x8E70, 0x8E7A, 0x8E92, 0x8EAE,
- 0x8EB3, 0x8ED1, 0x8ED4, 0x8EF9, 0x8F17, 0x8F36, 0x8FA6, 0x8FB5,
- 0x8FB6, 0x8FC6, 0x8FE0, 0x8FE4, 0x8FF6, 0x9002, 0x902C, 0x9044,
- 0x9088, 0x9095, 0x9099, 0x909B, 0x90A2, 0x90B4, 0x90D7, 0x90DD,
- 0x90F4, 0x9117, 0x911C, 0x9131, 0x913A, 0x913D, 0x9148, 0x915B,
- 0x9161, 0x9164, 0x918E, 0x919E, 0x91A8, 0x91AD, 0x91AE, 0x91B2,
- 0x91BC, 0x91F0, 0x91F7, 0x91FB, 0x9207, 0x9228, 0x9233, 0x9238,
- 0x9243, 0x9247, 0x924F, 0x9260, 0x92C2, 0x92CB, 0x92CC, 0x92DF,
- 0x930D, 0x9315, 0x931F, 0x9327, 0x9347, 0x9352, 0x9365, 0x936A,
- 0x936D, 0x939B, 0x93BA, 0x93A9, 0x93C1, 0x93CA, 0x93E2, 0x93FA,
- 0x93FD, 0x940F, 0x9434, 0x943F, 0x9455, 0x946B, 0x9472, 0x9578,
- 0x95A6, 0x95A9, 0x95AB, 0x95B4, 0x95BD, 0x95DA, 0x961D, 0x9641,
- 0x9658, 0x9684, 0x96A4, 0x96A9, 0x96D2, 0x5DB2, 0x96DE, 0x96E9,
- 0x96F1, 0x9702, 0x9709, 0x975A, 0x9763, 0x976E, 0x9773, 0x979A,
- 0x97A2, 0x97B5, 0x97B6, 0x97D9, 0x97DE, 0x97F4, 0x980A, 0x980E,
- 0x981E, 0x9823, 0x982B, 0x983E, 0x9852, 0x9853, 0x9859, 0x986C,
- 0x98B8, 0x98BA, 0x98BF, 0x98C8, 0x98E5, 0x9932, 0x9933, 0x9940,
- 0x994D, 0x995C, 0x995F, 0x99B1, 0x99B9, 0x99BA, 0x99C9, 0x9A02,
- 0x9A16, 0x9A24, 0x9A27, 0x9A2D, 0x9A2E, 0x9A36, 0x9A38, 0x9A4A,
- 0x9A56, 0x9AB5, 0x9AB6, 0x9AF9, 0x9B03, 0x9B20, 0x9B33, 0x9B34,
- 0x9B73, 0x9B79, 0x9BA7, 0x9BC1, 0x9BC7, 0x9BD7, 0x9BE7, 0x9BEB,
- 0x9BF7, 0x9BFA, 0x9BFD, 0x9C0B, 0x9C27, 0x9C2A, 0x9C36, 0x9C41,
- 0x9C53, 0x9C63, 0x9C6A, 0x9C77, 0x9D02, 0x9D42, 0x9D47, 0x9D63,
- 0x9D69, 0x9D7C, 0x9D7E, 0x9D8D, 0x9DB1, 0x9DC3, 0x9DC7, 0x9DD6,
- 0x9DDF, 0x9DEB, 0x9DF4, 0x9E15, 0x9E1D, 0x9EA4, 0x9EA8, 0x9EAC,
- 0x9EE7, 0x9EEE, 0x9F10, 0x9F12, 0x9F17, 0x9F19, 0x9F2F, 0x9F37,
- 0x9F39, 0x9F41, 0x9F45, 0x9F57, 0x9F68, 0x9F71, 0x9F75, 0x9F90,
- 0x9F94, 0x9FA2, 0x4E30, 0x3405, 0x4F60, 0x5620, 0x5ECB, 0x2E95,
- 0x60A4, 0x69D7, 0x6B24, 0x6FF9, 0x6EE6, 0x71B3, 0x2EA4, 0x7AC6,
- 0x7F61, 0x8071, 0x809E, 0x2ECC, 0x91F0, 0x5DB2, 0x97DE, 0x4FD3,
- 0x50D9, 0x50F0, 0x51C3, 0x5676, 0x6A54, 0x6D01, 0x6DD0, 0x6E42,
- 0x6ED9, 0x73E4, 0x7421, 0x756C, 0x7851, 0x87F5, 0xFFFD, 0x73A8,
- 0x3AF3, 0x34DB, 0x440C, 0x3E8A, 0xFFFD, 0xFFFD, 0x4BE8, 0xFFFD,
- 0x3EDA, 0x3B22, 0xFFFD, 0x457A, 0x4093, 0xFFFD, 0x4665, 0x4103,
- 0x4293, 0x46AE, 0x3488, 0xFFFD,
+ 0xFFFD, 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, 0x00A5, 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, 0x00A6, 0x007D, 0x0303, 0x02BC, 0x005C, 0x02BB,
+ 0x007C, 0x007E, 0x00A1, 0x00A2, 0x00A3, 0x2044, 0x0192, 0x00A7, 0x00A4,
+ 0x201C, 0x00AB, 0x2039, 0x203A, 0xFB01, 0xFB02, 0x2012, 0x2020, 0x2021,
+ 0x00B7, 0x00B6, 0x2022, 0x201A, 0x201E, 0x201D, 0x00BB, 0x2026, 0x2030,
+ 0x00BF, 0x0301, 0x0302, 0x00AF, 0x0306, 0x0307, 0x0308, 0x030A, 0x00B8,
+ 0x030B, 0x0328, 0x030C, 0x0336, 0x00C6, 0x00AA, 0x0141, 0x00D8, 0x0152,
+ 0x00BA, 0x00E6, 0x0131, 0x0142, 0x00F8, 0x0153, 0x00DF, 0x002D, 0x00A9,
+ 0x00AC, 0x00AE, 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B5, 0x00B9, 0x00BC,
+ 0x00BD, 0x00BE, 0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C7,
+ 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF, 0x00D0,
+ 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7, 0x00D9, 0x00DA,
+ 0x00DB, 0x00DC, 0x00DD, 0x00DE, 0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4,
+ 0x00E5, 0x00E7, 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE,
+ 0x00EF, 0x00F0, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x00F7,
+ 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x00FD, 0x00FE, 0x00FF, 0x0160, 0x0178,
+ 0x017D, 0x0305, 0x0161, 0x2122, 0x017E, 0x0030, 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, 0x00A5, 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, 0x203E, 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, 0xFF40, 0x30F0, 0x30F1, 0x30EE, 0x30AB, 0x30B1,
+ 0x30F4, 0x30AC, 0x30AE, 0x30B0, 0x30B2, 0x30B4, 0x30B6, 0x30B8, 0x30BA,
+ 0x30BC, 0x30BE, 0x30C0, 0x30C2, 0x30C5, 0x30C7, 0x30C9, 0x30D0, 0x30D1,
+ 0x30D3, 0x30D4, 0x30D6, 0x30D7, 0x30D9, 0x30DA, 0x30DC, 0x30DD, 0xFF60,
+ 0x301D, 0x301E, 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, 0x2032, 0x00A8, 0x2036,
+ 0x005B, 0x005D, 0x3008, 0x3009, 0x300A, 0x300B, 0x300E, 0x300F, 0x3010,
+ 0x3011, 0x2012, 0xFF60, 0x3092, 0x3041, 0x3043, 0x3045, 0x3047, 0x3049,
+ 0x3083, 0x3085, 0x3087, 0x3063, 0x3042, 0x3044, 0x3046, 0x3048, 0x304A,
+ 0x304B, 0x304D, 0x304F, 0x3051, 0x3053, 0x3055, 0x3057, 0x3059, 0x305B,
+ 0x305D, 0x305F, 0x3061, 0x3064, 0x3066, 0x3068, 0x306A, 0x306B, 0x306C,
+ 0x306D, 0x306E, 0x306F, 0x3072, 0x3075, 0x3078, 0x307B, 0x307E, 0x307F,
+ 0x3080, 0x3081, 0x3082, 0x3084, 0x3086, 0x3088, 0x3089, 0x308A, 0x308B,
+ 0x308C, 0x308D, 0x308F, 0x3093, 0x3090, 0x3091, 0x308E, 0x304C, 0x304E,
+ 0x3050, 0x3052, 0x3054, 0x3056, 0x3068, 0x305A, 0x305C, 0x305E, 0x3060,
+ 0x3062, 0x3065, 0x3067, 0x3069, 0x3070, 0x3071, 0x3073, 0x3074, 0x3076,
+ 0x3077, 0x3079, 0x307A, 0x307C, 0x307D, 0x00C4, 0x00F9, 0x00E9, 0x00ED,
+ 0x00DF, 0x00E7, 0x00C7, 0x00D1, 0x00F1, 0x00A2, 0x00A3, 0x00F3, 0x00FA,
+ 0x00A1, 0x00BF, 0x00BD, 0x00D6, 0x00DC, 0x00E4, 0x00EB, 0x00EF, 0x00F6,
+ 0x00DC, 0x00E2, 0x00EA, 0x00EE, 0x00F4, 0x00FC, 0x00E0, 0x00E9, 0x25B2,
+ 0x00E1, 0x007E, 0x0030, 0x3000, 0x3001, 0x3002, 0xFF0C, 0xFF0E, 0x30FB,
+ 0xFF1A, 0xFF1B, 0xFF1F, 0xFF01, 0x309B, 0x309C, 0x00B4, 0xFF40, 0x00A8,
+ 0xFF3E, 0x203E, 0xFF3F, 0x30FD, 0x30FE, 0x309D, 0x309E, 0x3003, 0x4EDD,
+ 0x3005, 0x3006, 0x3007, 0x30FC, 0x2015, 0x2010, 0xFF0F, 0xFF3C, 0xFF5E,
+ 0x2016, 0xFF5C, 0x2026, 0x2025, 0x2018, 0x2019, 0x201C, 0x201D, 0xFF08,
+ 0xFF09, 0x3014, 0x3015, 0xFF3B, 0xFF3D, 0xFF5B, 0xFF5D, 0x3008, 0x3009,
+ 0x300A, 0x300B, 0x300C, 0x300D, 0x300E, 0x300F, 0x3010, 0x3011, 0xFF0B,
+ 0xFF0D, 0x00B1, 0x00D7, 0x00F7, 0xFF1D, 0x2260, 0xFF1C, 0xFF1E, 0x2266,
+ 0x2267, 0x221E, 0x2234, 0x2642, 0x2640, 0x00B0, 0x2032, 0x2033, 0x2103,
+ 0xFFE5, 0xFF04, 0x00A2, 0x00A3, 0xFF05, 0xFF03, 0xFF06, 0xFF0A, 0xFF20,
+ 0x00A7, 0x2606, 0x2605, 0x25CB, 0x25CF, 0x25CE, 0x25C7, 0x25C6, 0x25A1,
+ 0x25A0, 0x25B3, 0x25B2, 0x25BD, 0x25BC, 0x203B, 0x3012, 0x2192, 0x2190,
+ 0x2191, 0x2193, 0x3013, 0x2208, 0x220B, 0x2286, 0x2287, 0x2282, 0x2283,
+ 0x222A, 0x2229, 0x2227, 0x2228, 0x00AC, 0x21D2, 0x21D4, 0x2200, 0x2203,
+ 0x2220, 0x22A5, 0x2312, 0x2202, 0x2207, 0x2261, 0x2252, 0x226A, 0x226B,
+ 0x221A, 0x223D, 0x221D, 0x2235, 0x222B, 0x222C, 0x212B, 0x2030, 0x266F,
+ 0x266D, 0x266A, 0x2020, 0x2021, 0x00B6, 0x25EF, 0xFF10, 0xFF11, 0xFF12,
+ 0xFF13, 0xFF14, 0xFF15, 0xFF16, 0xFF17, 0xFF18, 0xFF19, 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, 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, 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, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396,
+ 0x0397, 0x0398, 0x0399, 0x039A, 0x039B, 0x039C, 0x039D, 0x039E, 0x039F,
+ 0x03A0, 0x03A1, 0x03A3, 0x03A4, 0x03A5, 0x03A6, 0x03A7, 0x03A8, 0x03A9,
+ 0x03B1, 0x03B2, 0x03B3, 0x03B4, 0x03B5, 0x03B6, 0x03B7, 0x03B8, 0x03B9,
+ 0x03BA, 0x03BB, 0x03BC, 0x03BD, 0x03BE, 0x03BF, 0x03C0, 0x03C1, 0x03C3,
+ 0x03C4, 0x03C5, 0x03C6, 0x03C7, 0x03C8, 0x03C9, 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, 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,
+ 0x4E9C, 0x5516, 0x5A03, 0x963F, 0x54C0, 0x611B, 0x6328, 0x59F6, 0x9022,
+ 0x8475, 0x831C, 0x7A50, 0x60AA, 0x63E1, 0x6E25, 0x65ED, 0x8466, 0x82A6,
+ 0x9BF5, 0x6893, 0x5727, 0x65A1, 0x6271, 0x5B9B, 0x59D0, 0x867B, 0x98F4,
+ 0x7D62, 0x7DBE, 0x9B8E, 0x6216, 0x7C9F, 0x88B7, 0x5B89, 0x5EB5, 0x6309,
+ 0x6697, 0x6848, 0x95C7, 0x978D, 0x674F, 0x4EE5, 0x4F0A, 0x4F4D, 0x4F9D,
+ 0x5049, 0x56F2, 0x5937, 0x59D4, 0x5A01, 0x5C09, 0x60DF, 0x610F, 0x6170,
+ 0x6613, 0x6905, 0x70BA, 0x754F, 0x7570, 0x79FB, 0x7DAD, 0x7DEF, 0x80C3,
+ 0x840E, 0x8863, 0x8B02, 0x9055, 0x907A, 0x533B, 0x4E95, 0x4EA5, 0x57DF,
+ 0x80B2, 0x90C1, 0x78EF, 0x4E00, 0x58F1, 0x6EA2, 0x9038, 0x7A32, 0x8328,
+ 0x828B, 0x9C2F, 0x5141, 0x5370, 0x54BD, 0x54E1, 0x56E0, 0x59FB, 0x5F15,
+ 0x98F2, 0x6DEB, 0x80E4, 0x852D, 0x9662, 0x9670, 0x96A0, 0x97FB, 0x540B,
+ 0x53F3, 0x5B87, 0x70CF, 0x7FBD, 0x8FC2, 0x96E8, 0x536F, 0x9D5C, 0x7ABA,
+ 0x4E11, 0x7893, 0x81FC, 0x6E26, 0x5618, 0x5504, 0x6B1D, 0x851A, 0x9C3B,
+ 0x59E5, 0x53A9, 0x6D66, 0x74DC, 0x958F, 0x5642, 0x4E91, 0x904B, 0x96F2,
+ 0x834F, 0x990C, 0x53E1, 0x55B6, 0x5B30, 0x5F71, 0x6620, 0x66F3, 0x6804,
+ 0x6C38, 0x6CF3, 0x6D29, 0x745B, 0x76C8, 0x7A4E, 0x9834, 0x82F1, 0x885B,
+ 0x8A60, 0x92ED, 0x6DB2, 0x75AB, 0x76CA, 0x99C5, 0x60A6, 0x8B01, 0x8D8A,
+ 0x95B2, 0x698E, 0x53AD, 0x5186, 0x5712, 0x5830, 0x5944, 0x5BB4, 0x5EF6,
+ 0x6028, 0x63A9, 0x63F4, 0x6CBF, 0x6F14, 0x708E, 0x7114, 0x7159, 0x71D5,
+ 0x733F, 0x7E01, 0x8276, 0x82D1, 0x8597, 0x9060, 0x925B, 0x9D1B, 0x5869,
+ 0x65BC, 0x6C5A, 0x7525, 0x51F9, 0x592E, 0x5965, 0x5F80, 0x5FDC, 0x62BC,
+ 0x65FA, 0x6A2A, 0x6B27, 0x6BB4, 0x738B, 0x7FC1, 0x8956, 0x9D2C, 0x9D0E,
+ 0x9EC4, 0x5CA1, 0x6C96, 0x837B, 0x5104, 0x5C4B, 0x61B6, 0x81C6, 0x6876,
+ 0x7261, 0x4E59, 0x4FFA, 0x5378, 0x6069, 0x6E29, 0x7A4F, 0x97F3, 0x4E0B,
+ 0x5316, 0x4EEE, 0x4F55, 0x4F3D, 0x4FA1, 0x4F73, 0x52A0, 0x53EF, 0x5609,
+ 0x590F, 0x5AC1, 0x5BB6, 0x5BE1, 0x79D1, 0x6687, 0x679C, 0x67B6, 0x6B4C,
+ 0x6CB3, 0x706B, 0x73C2, 0x798D, 0x79BE, 0x7A3C, 0x7B87, 0x82B1, 0x82DB,
+ 0x8304, 0x8377, 0x83EF, 0x83D3, 0x8766, 0x8AB2, 0x5629, 0x8CA8, 0x8FE6,
+ 0x904E, 0x971E, 0x868A, 0x4FC4, 0x5CE8, 0x6211, 0x7259, 0x753B, 0x81E5,
+ 0x82BD, 0x86FE, 0x8CC0, 0x96C5, 0x9913, 0x99D5, 0x4ECB, 0x4F1A, 0x89E3,
+ 0x56DE, 0x584A, 0x58CA, 0x5EFB, 0x5FEB, 0x602A, 0x6094, 0x6062, 0x61D0,
+ 0x6212, 0x62D0, 0x6539, 0x9B41, 0x6666, 0x68B0, 0x6D77, 0x7070, 0x754C,
+ 0x7686, 0x7D75, 0x82A5, 0x87F9, 0x958B, 0x968E, 0x8C9D, 0x51F1, 0x52BE,
+ 0x5916, 0x54B3, 0x5BB3, 0x5D16, 0x6168, 0x6982, 0x6DAF, 0x788D, 0x84CB,
+ 0x8857, 0x8A72, 0x93A7, 0x9AB8, 0x6D6C, 0x99A8, 0x86D9, 0x57A3, 0x67FF,
+ 0x86CE, 0x920E, 0x5283, 0x5687, 0x5404, 0x5ED3, 0x62E1, 0x64B9, 0x683C,
+ 0x6838, 0x6BBB, 0x7372, 0x78BA, 0x7A6B, 0x899A, 0x89D2, 0x8D6B, 0x8F03,
+ 0x90ED, 0x95A3, 0x9694, 0x9769, 0x5B66, 0x5CB3, 0x697D, 0x984D, 0x984E,
+ 0x639B, 0x7B20, 0x6A2B, 0x6A7F, 0x68B6, 0x9C0D, 0x6F5F, 0x5272, 0x559D,
+ 0x6070, 0x62EC, 0x6D3B, 0x6E07, 0x6ED1, 0x845B, 0x8910, 0x8F44, 0x4E14,
+ 0x9C39, 0x53F6, 0x691B, 0x6A3A, 0x9784, 0x682A, 0x515C, 0x7AC3, 0x84B2,
+ 0x91DC, 0x938C, 0x565B, 0x9D28, 0x6822, 0x8305, 0x8431, 0x7CA5, 0x5208,
+ 0x82C5, 0x74E6, 0x4E7E, 0x4F83, 0x51A0, 0x5BD2, 0x520A, 0x52D8, 0x52E7,
+ 0x5DFB, 0x559A, 0x582A, 0x59E6, 0x5B8C, 0x5B98, 0x5BDB, 0x5E72, 0x5E79,
+ 0x60A3, 0x611F, 0x6163, 0x61BE, 0x63DB, 0x6562, 0x67D1, 0x6853, 0x68FA,
+ 0x6B3E, 0x6B53, 0x6C57, 0x6F22, 0x6F97, 0x6F45, 0x74B0, 0x7518, 0x76E3,
+ 0x770B, 0x7AFF, 0x7BA1, 0x7C21, 0x7DE9, 0x7F36, 0x7FF0, 0x809D, 0x8266,
+ 0x839E, 0x89B3, 0x8ACC, 0x8CAB, 0x9084, 0x9451, 0x9593, 0x9591, 0x95A2,
+ 0x9665, 0x97D3, 0x9928, 0x8218, 0x4E38, 0x542B, 0x5CB8, 0x5DCC, 0x73A9,
+ 0x764C, 0x773C, 0x5CA9, 0x7FEB, 0x8D0B, 0x96C1, 0x9811, 0x9854, 0x9858,
+ 0x4F01, 0x4F0E, 0x5371, 0x559C, 0x5668, 0x57FA, 0x5947, 0x5B09, 0x5BC4,
+ 0x5C90, 0x5E0C, 0x5E7E, 0x5FCC, 0x63EE, 0x673A, 0x65D7, 0x65E2, 0x671F,
+ 0x68CB, 0x68C4, 0x6A5F, 0x5E30, 0x6BC5, 0x6C17, 0x6C7D, 0x757F, 0x7948,
+ 0x5B63, 0x7A00, 0x7D00, 0x5FBD, 0x898F, 0x8A18, 0x8CB4, 0x8D77, 0x8ECC,
+ 0x8F1D, 0x98E2, 0x9A0E, 0x9B3C, 0x4E80, 0x507D, 0x5100, 0x5993, 0x5B9C,
+ 0x622F, 0x6280, 0x64EC, 0x6B3A, 0x72A0, 0x7591, 0x7947, 0x7FA9, 0x87FB,
+ 0x8ABC, 0x8B70, 0x63AC, 0x83CA, 0x97A0, 0x5409, 0x5403, 0x55AB, 0x6854,
+ 0x6A58, 0x8A70, 0x7827, 0x6775, 0x9ECD, 0x5374, 0x5BA2, 0x811A, 0x8650,
+ 0x9006, 0x4E18, 0x4E45, 0x4EC7, 0x4F11, 0x53CA, 0x5438, 0x5BAE, 0x5F13,
+ 0x6025, 0x6551, 0x673D, 0x6C42, 0x6C72, 0x6CE3, 0x7078, 0x7403, 0x7A76,
+ 0x7AAE, 0x7B08, 0x7D1A, 0x7CFE, 0x7D66, 0x65E7, 0x725B, 0x53BB, 0x5C45,
+ 0x5DE8, 0x62D2, 0x62E0, 0x6319, 0x6E20, 0x865A, 0x8A31, 0x8DDD, 0x92F8,
+ 0x6F01, 0x79A6, 0x9B5A, 0x4EA8, 0x4EAB, 0x4EAC, 0x4F9B, 0x4FA0, 0x50D1,
+ 0x5147, 0x7AF6, 0x5171, 0x51F6, 0x5354, 0x5321, 0x537F, 0x53EB, 0x55AC,
+ 0x5883, 0x5CE1, 0x5F37, 0x5F4A, 0x602F, 0x6050, 0x606D, 0x631F, 0x6559,
+ 0x6A4B, 0x6CC1, 0x72C2, 0x72ED, 0x77EF, 0x80F8, 0x8105, 0x8208, 0x854E,
+ 0x90F7, 0x93E1, 0x97FF, 0x9957, 0x9A5A, 0x4EF0, 0x51DD, 0x5C2D, 0x6681,
+ 0x696D, 0x5C40, 0x66F2, 0x6975, 0x7389, 0x6850, 0x7C81, 0x50C5, 0x52E4,
+ 0x5747, 0x5DFE, 0x9326, 0x65A4, 0x6B23, 0x6B3D, 0x7434, 0x7981, 0x79BD,
+ 0x7B4B, 0x7DCA, 0x82B9, 0x83CC, 0x887F, 0x895F, 0x8B39, 0x8FD1, 0x91D1,
+ 0x541F, 0x9280, 0x4E5D, 0x5036, 0x53E5, 0x533A, 0x72D7, 0x7396, 0x77E9,
+ 0x82E6, 0x8EAF, 0x99C6, 0x99C8, 0x99D2, 0x5177, 0x611A, 0x865E, 0x55B0,
+ 0x7A7A, 0x5076, 0x5BD3, 0x9047, 0x9685, 0x4E32, 0x6ADB, 0x91E7, 0x5C51,
+ 0x5C48, 0x6398, 0x7A9F, 0x6C93, 0x9774, 0x8F61, 0x7AAA, 0x718A, 0x9688,
+ 0x7C82, 0x6817, 0x7E70, 0x6851, 0x936C, 0x52F2, 0x541B, 0x85AB, 0x8A13,
+ 0x7FA4, 0x8ECD, 0x90E1, 0x5366, 0x8888, 0x7941, 0x4FC2, 0x50BE, 0x5211,
+ 0x5144, 0x5553, 0x572D, 0x73EA, 0x578B, 0x5951, 0x5F62, 0x5F84, 0x6075,
+ 0x6176, 0x6167, 0x61A9, 0x63B2, 0x643A, 0x656C, 0x666F, 0x6842, 0x6E13,
+ 0x7566, 0x7A3D, 0x7CFB, 0x7D4C, 0x7D99, 0x7E4B, 0x7F6B, 0x830E, 0x834A,
+ 0x86CD, 0x8A08, 0x8A63, 0x8B66, 0x8EFD, 0x981A, 0x9D8F, 0x82B8, 0x8FCE,
+ 0x9BE8, 0x5287, 0x621F, 0x6483, 0x6FC0, 0x9699, 0x6841, 0x5091, 0x6B20,
+ 0x6C7A, 0x6F54, 0x7A74, 0x7D50, 0x8840, 0x8A23, 0x6708, 0x4EF6, 0x5039,
+ 0x5026, 0x5065, 0x517C, 0x5238, 0x5263, 0x55A7, 0x570F, 0x5805, 0x5ACC,
+ 0x5EFA, 0x61B2, 0x61F8, 0x62F3, 0x6372, 0x691C, 0x6A29, 0x727D, 0x72AC,
+ 0x732E, 0x7814, 0x786F, 0x7D79, 0x770C, 0x80A9, 0x898B, 0x8B19, 0x8CE2,
+ 0x8ED2, 0x9063, 0x9375, 0x967A, 0x9855, 0x9A13, 0x9E78, 0x5143, 0x539F,
+ 0x53B3, 0x5E7B, 0x5F26, 0x6E1B, 0x6E90, 0x7384, 0x73FE, 0x7D43, 0x8237,
+ 0x8A00, 0x8AFA, 0x9650, 0x4E4E, 0x500B, 0x53E4, 0x547C, 0x56FA, 0x59D1,
+ 0x5B64, 0x5DF1, 0x5EAB, 0x5F27, 0x6238, 0x6545, 0x67AF, 0x6E56, 0x72D0,
+ 0x7CCA, 0x88B4, 0x80A1, 0x80E1, 0x83F0, 0x864E, 0x8A87, 0x8DE8, 0x9237,
+ 0x96C7, 0x9867, 0x9F13, 0x4E94, 0x4E92, 0x4F0D, 0x5348, 0x5449, 0x543E,
+ 0x5A2F, 0x5F8C, 0x5FA1, 0x609F, 0x68A7, 0x6A8E, 0x745A, 0x7881, 0x8A9E,
+ 0x8AA4, 0x8B77, 0x9190, 0x4E5E, 0x9BC9, 0x4EA4, 0x4F7C, 0x4FAF, 0x5019,
+ 0x5016, 0x5149, 0x516C, 0x529F, 0x52B9, 0x52FE, 0x539A, 0x53E3, 0x5411,
+ 0x540E, 0x5589, 0x5751, 0x57A2, 0x597D, 0x5B54, 0x5B5D, 0x5B8F, 0x5DE5,
+ 0x5DE7, 0x5DF7, 0x5E78, 0x5E83, 0x5E9A, 0x5EB7, 0x5F18, 0x6052, 0x614C,
+ 0x6297, 0x62D8, 0x63A7, 0x653B, 0x6602, 0x6643, 0x66F4, 0x676D, 0x6821,
+ 0x6897, 0x69CB, 0x6C5F, 0x6D2A, 0x6D69, 0x6E2F, 0x6E9D, 0x7532, 0x7687,
+ 0x786C, 0x7A3F, 0x7CE0, 0x7D05, 0x7D18, 0x7D5E, 0x7DB1, 0x8015, 0x8003,
+ 0x80AF, 0x80B1, 0x8154, 0x818F, 0x822A, 0x8352, 0x884C, 0x8861, 0x8B1B,
+ 0x8CA2, 0x8CFC, 0x90CA, 0x9175, 0x9271, 0x783F, 0x92FC, 0x95A4, 0x964D,
+ 0x9805, 0x9999, 0x9AD8, 0x9D3B, 0x525B, 0x52AB, 0x53F7, 0x5408, 0x58D5,
+ 0x62F7, 0x6FE0, 0x8C6A, 0x8F5F, 0x9EB9, 0x514B, 0x523B, 0x544A, 0x56FD,
+ 0x7A40, 0x9177, 0x9D60, 0x9ED2, 0x7344, 0x6F09, 0x8170, 0x7511, 0x5FFD,
+ 0x60DA, 0x9AA8, 0x72DB, 0x8FBC, 0x6B64, 0x9803, 0x4ECA, 0x56F0, 0x5764,
+ 0x58BE, 0x5A5A, 0x6068, 0x61C7, 0x660F, 0x6606, 0x6839, 0x68B1, 0x6DF7,
+ 0x75D5, 0x7D3A, 0x826E, 0x9B42, 0x4E9B, 0x4F50, 0x53C9, 0x5506, 0x5D6F,
+ 0x5DE6, 0x5DEE, 0x67FB, 0x6C99, 0x7473, 0x7802, 0x8A50, 0x9396, 0x88DF,
+ 0x5750, 0x5EA7, 0x632B, 0x50B5, 0x50AC, 0x518D, 0x6700, 0x54C9, 0x585E,
+ 0x59BB, 0x5BB0, 0x5F69, 0x624D, 0x63A1, 0x683D, 0x6B73, 0x6E08, 0x707D,
+ 0x91C7, 0x7280, 0x7815, 0x7826, 0x796D, 0x658E, 0x7D30, 0x83DC, 0x88C1,
+ 0x8F09, 0x969B, 0x5264, 0x5728, 0x6750, 0x7F6A, 0x8CA1, 0x51B4, 0x5742,
+ 0x962A, 0x583A, 0x698A, 0x80B4, 0x54B2, 0x5D0E, 0x57FC, 0x7895, 0x9DFA,
+ 0x4F5C, 0x524A, 0x548B, 0x643E, 0x6628, 0x6714, 0x67F5, 0x7A84, 0x7B56,
+ 0x7D22, 0x932F, 0x685C, 0x9BAD, 0x7B39, 0x5319, 0x518A, 0x5237, 0x5BDF,
+ 0x62F6, 0x64AE, 0x64E6, 0x672D, 0x6BBA, 0x85A9, 0x96D1, 0x7690, 0x9BD6,
+ 0x634C, 0x9306, 0x9BAB, 0x76BF, 0x6652, 0x4E09, 0x5098, 0x53C2, 0x5C71,
+ 0x60E8, 0x6492, 0x6563, 0x685F, 0x71E6, 0x73CA, 0x7523, 0x7B97, 0x7E82,
+ 0x8695, 0x8B83, 0x8CDB, 0x9178, 0x9910, 0x65AC, 0x66AB, 0x6B8B, 0x4ED5,
+ 0x4ED4, 0x4F3A, 0x4F7F, 0x523A, 0x53F8, 0x53F2, 0x55E3, 0x56DB, 0x58EB,
+ 0x59CB, 0x59C9, 0x59FF, 0x5B50, 0x5C4D, 0x5E02, 0x5E2B, 0x5FD7, 0x601D,
+ 0x6307, 0x652F, 0x5B5C, 0x65AF, 0x65BD, 0x65E8, 0x679D, 0x6B62, 0x6B7B,
+ 0x6C0F, 0x7345, 0x7949, 0x79C1, 0x7CF8, 0x7D19, 0x7D2B, 0x80A2, 0x8102,
+ 0x81F3, 0x8996, 0x8A5E, 0x8A69, 0x8A66, 0x8A8C, 0x8AEE, 0x8CC7, 0x8CDC,
+ 0x96CC, 0x98FC, 0x6B6F, 0x4E8B, 0x4F3C, 0x4F8D, 0x5150, 0x5B57, 0x5BFA,
+ 0x6148, 0x6301, 0x6642, 0x6B21, 0x6ECB, 0x6CBB, 0x723E, 0x74BD, 0x75D4,
+ 0x78C1, 0x793A, 0x800C, 0x8033, 0x81EA, 0x8494, 0x8F9E, 0x6C50, 0x9E7F,
+ 0x5F0F, 0x8B58, 0x9D2B, 0x7AFA, 0x8EF8, 0x5B8D, 0x96EB, 0x4E03, 0x53F1,
+ 0x57F7, 0x5931, 0x5AC9, 0x5BA4, 0x6089, 0x6E7F, 0x6F06, 0x75BE, 0x8CEA,
+ 0x5B9F, 0x8500, 0x7BE0, 0x5072, 0x67F4, 0x829D, 0x5C61, 0x854A, 0x7E1E,
+ 0x820E, 0x5199, 0x5C04, 0x6368, 0x8D66, 0x659C, 0x716E, 0x793E, 0x7D17,
+ 0x8005, 0x8B1D, 0x8ECA, 0x906E, 0x86C7, 0x90AA, 0x501F, 0x52FA, 0x5C3A,
+ 0x6753, 0x707C, 0x7235, 0x914C, 0x91C8, 0x932B, 0x82E5, 0x5BC2, 0x5F31,
+ 0x60F9, 0x4E3B, 0x53D6, 0x5B88, 0x624B, 0x6731, 0x6B8A, 0x72E9, 0x73E0,
+ 0x7A2E, 0x816B, 0x8DA3, 0x9152, 0x9996, 0x5112, 0x53D7, 0x546A, 0x5BFF,
+ 0x6388, 0x6A39, 0x7DAC, 0x9700, 0x56DA, 0x53CE, 0x5468, 0x5B97, 0x5C31,
+ 0x5DDE, 0x4FEE, 0x6101, 0x62FE, 0x6D32, 0x79C0, 0x79CB, 0x7D42, 0x7E4D,
+ 0x7FD2, 0x81ED, 0x821F, 0x8490, 0x8846, 0x8972, 0x8B90, 0x8E74, 0x8F2F,
+ 0x9031, 0x914B, 0x916C, 0x96C6, 0x919C, 0x4EC0, 0x4F4F, 0x5145, 0x5341,
+ 0x5F93, 0x620E, 0x67D4, 0x6C41, 0x6E0B, 0x7363, 0x7E26, 0x91CD, 0x9283,
+ 0x53D4, 0x5919, 0x5BBF, 0x6DD1, 0x795D, 0x7E2E, 0x7C9B, 0x587E, 0x719F,
+ 0x51FA, 0x8853, 0x8FF0, 0x4FCA, 0x5CFB, 0x6625, 0x77AC, 0x7AE3, 0x821C,
+ 0x99FF, 0x51C6, 0x5FAA, 0x65EC, 0x696F, 0x6B89, 0x6DF3, 0x6E96, 0x6F64,
+ 0x76FE, 0x7D14, 0x5DE1, 0x9075, 0x9187, 0x9806, 0x51E6, 0x521D, 0x6240,
+ 0x6691, 0x66D9, 0x6E1A, 0x5EB6, 0x7DD2, 0x7F72, 0x66F8, 0x85AF, 0x85F7,
+ 0x8AF8, 0x52A9, 0x53D9, 0x5973, 0x5E8F, 0x5F90, 0x6055, 0x92E4, 0x9664,
+ 0x50B7, 0x511F, 0x52DD, 0x5320, 0x5347, 0x53EC, 0x54E8, 0x5546, 0x5531,
+ 0x5617, 0x5968, 0x59BE, 0x5A3C, 0x5BB5, 0x5C06, 0x5C0F, 0x5C11, 0x5C1A,
+ 0x5E84, 0x5E8A, 0x5EE0, 0x5F70, 0x627F, 0x6284, 0x62DB, 0x638C, 0x6377,
+ 0x6607, 0x660C, 0x662D, 0x6676, 0x677E, 0x68A2, 0x6A1F, 0x6A35, 0x6CBC,
+ 0x6D88, 0x6E09, 0x6E58, 0x713C, 0x7126, 0x7167, 0x75C7, 0x7701, 0x785D,
+ 0x7901, 0x7965, 0x79F0, 0x7AE0, 0x7B11, 0x7CA7, 0x7D39, 0x8096, 0x83D6,
+ 0x848B, 0x8549, 0x885D, 0x88F3, 0x8A1F, 0x8A3C, 0x8A54, 0x8A73, 0x8C61,
+ 0x8CDE, 0x91A4, 0x9266, 0x937E, 0x9418, 0x969C, 0x9798, 0x4E0A, 0x4E08,
+ 0x4E1E, 0x4E57, 0x5197, 0x5270, 0x57CE, 0x5834, 0x58CC, 0x5B22, 0x5E38,
+ 0x60C5, 0x64FE, 0x6761, 0x6756, 0x6D44, 0x72B6, 0x7573, 0x7A63, 0x84B8,
+ 0x8B72, 0x91B8, 0x9320, 0x5631, 0x57F4, 0x98FE, 0x62ED, 0x690D, 0x6B96,
+ 0x71ED, 0x7E54, 0x8077, 0x8272, 0x89E6, 0x98DF, 0x8755, 0x8FB1, 0x5C3B,
+ 0x4F38, 0x4FE1, 0x4FB5, 0x5507, 0x5A20, 0x5BDD, 0x5BE9, 0x5FC3, 0x614E,
+ 0x632F, 0x65B0, 0x664B, 0x68EE, 0x699B, 0x6D78, 0x6DF1, 0x7533, 0x75B9,
+ 0x771F, 0x795E, 0x79E6, 0x7D33, 0x81E3, 0x82AF, 0x85AA, 0x89AA, 0x8A3A,
+ 0x8EAB, 0x8F9B, 0x9032, 0x91DD, 0x9707, 0x4EBA, 0x4EC1, 0x5203, 0x5875,
+ 0x58EC, 0x5C0B, 0x751A, 0x5C3D, 0x814E, 0x8A0A, 0x8FC5, 0x9663, 0x976D,
+ 0x7B25, 0x8ACF, 0x9808, 0x9162, 0x56F3, 0x53A8, 0x9017, 0x5439, 0x5782,
+ 0x5E25, 0x63A8, 0x6C34, 0x708A, 0x7761, 0x7C8B, 0x7FE0, 0x8870, 0x9042,
+ 0x9154, 0x9310, 0x9318, 0x968F, 0x745E, 0x9AC4, 0x5D07, 0x5D69, 0x6570,
+ 0x67A2, 0x8DA8, 0x96DB, 0x636E, 0x6749, 0x6919, 0x83C5, 0x9817, 0x96C0,
+ 0x88FE, 0x6F84, 0x647A, 0x5BF8, 0x4E16, 0x702C, 0x755D, 0x662F, 0x51C4,
+ 0x5236, 0x52E2, 0x59D3, 0x5F81, 0x6027, 0x6210, 0x653F, 0x6574, 0x661F,
+ 0x6674, 0x68F2, 0x6816, 0x6B63, 0x6E05, 0x7272, 0x751F, 0x76DB, 0x7CBE,
+ 0x8056, 0x58F0, 0x88FD, 0x897F, 0x8AA0, 0x8A93, 0x8ACB, 0x901D, 0x9192,
+ 0x9752, 0x9759, 0x6589, 0x7A0E, 0x8106, 0x96BB, 0x5E2D, 0x60DC, 0x621A,
+ 0x65A5, 0x6614, 0x6790, 0x77F3, 0x7A4D, 0x7C4D, 0x7E3E, 0x810A, 0x8CAC,
+ 0x8D64, 0x8DE1, 0x8E5F, 0x78A9, 0x5207, 0x62D9, 0x63A5, 0x6442, 0x6298,
+ 0x8A2D, 0x7A83, 0x7BC0, 0x8AAC, 0x96EA, 0x7D76, 0x820C, 0x8749, 0x4ED9,
+ 0x5148, 0x5343, 0x5360, 0x5BA3, 0x5C02, 0x5C16, 0x5DDD, 0x6226, 0x6247,
+ 0x64B0, 0x6813, 0x6834, 0x6CC9, 0x6D45, 0x6D17, 0x67D3, 0x6F5C, 0x714E,
+ 0x717D, 0x65CB, 0x7A7F, 0x7BAD, 0x7DDA, 0x7E4A, 0x7FA8, 0x817A, 0x821B,
+ 0x8239, 0x85A6, 0x8A6E, 0x8CCE, 0x8DF5, 0x9078, 0x9077, 0x92AD, 0x9291,
+ 0x9583, 0x9BAE, 0x524D, 0x5584, 0x6F38, 0x7136, 0x5168, 0x7985, 0x7E55,
+ 0x81B3, 0x7CCE, 0x564C, 0x5851, 0x5CA8, 0x63AA, 0x66FE, 0x66FD, 0x695A,
+ 0x72D9, 0x758F, 0x758E, 0x790E, 0x7956, 0x79DF, 0x7C97, 0x7D20, 0x7D44,
+ 0x8607, 0x8A34, 0x963B, 0x9061, 0x9F20, 0x50E7, 0x5275, 0x53CC, 0x53E2,
+ 0x5009, 0x55AA, 0x58EE, 0x594F, 0x723D, 0x5B8B, 0x5C64, 0x531D, 0x60E3,
+ 0x60F3, 0x635C, 0x6383, 0x633F, 0x63BB, 0x64CD, 0x65E9, 0x66F9, 0x5DE3,
+ 0x69CD, 0x69FD, 0x6F15, 0x71E5, 0x4E89, 0x75E9, 0x76F8, 0x7A93, 0x7CDF,
+ 0x7DCF, 0x7D9C, 0x8061, 0x8349, 0x8358, 0x846C, 0x84BC, 0x85FB, 0x88C5,
+ 0x8D70, 0x9001, 0x906D, 0x9397, 0x971C, 0x9A12, 0x50CF, 0x5897, 0x618E,
+ 0x81D3, 0x8535, 0x8D08, 0x9020, 0x4FC3, 0x5074, 0x5247, 0x5373, 0x606F,
+ 0x6349, 0x675F, 0x6E2C, 0x8DB3, 0x901F, 0x4FD7, 0x5C5E, 0x8CCA, 0x65CF,
+ 0x7D9A, 0x5352, 0x8896, 0x5176, 0x63C3, 0x5B58, 0x5B6B, 0x5C0A, 0x640D,
+ 0x6751, 0x905C, 0x4ED6, 0x591A, 0x592A, 0x6C70, 0x8A51, 0x553E, 0x5815,
+ 0x59A5, 0x60F0, 0x6253, 0x67C1, 0x8235, 0x6955, 0x9640, 0x99C4, 0x9A28,
+ 0x4F53, 0x5806, 0x5BFE, 0x8010, 0x5CB1, 0x5E2F, 0x5F85, 0x6020, 0x614B,
+ 0x6234, 0x66FF, 0x6CF0, 0x6EDE, 0x80CE, 0x817F, 0x82D4, 0x888B, 0x8CB8,
+ 0x9000, 0x902E, 0x968A, 0x9EDB, 0x9BDB, 0x4EE3, 0x53F0, 0x5927, 0x7B2C,
+ 0x918D, 0x984C, 0x9DF9, 0x6EDD, 0x7027, 0x5353, 0x5544, 0x5B85, 0x6258,
+ 0x629E, 0x62D3, 0x6CA2, 0x6FEF, 0x7422, 0x8A17, 0x9438, 0x6FC1, 0x8AFE,
+ 0x8338, 0x51E7, 0x86F8, 0x53EA, 0x53E9, 0x4F46, 0x9054, 0x8FB0, 0x596A,
+ 0x8131, 0x5DFD, 0x7AEA, 0x8FBF, 0x68DA, 0x8C37, 0x72F8, 0x9C48, 0x6A3D,
+ 0x8AB0, 0x4E39, 0x5358, 0x5606, 0x5766, 0x62C5, 0x63A2, 0x65E6, 0x6B4E,
+ 0x6DE1, 0x6E5B, 0x70AD, 0x77ED, 0x7AEF, 0x7BAA, 0x7DBB, 0x803D, 0x80C6,
+ 0x86CB, 0x8A95, 0x935B, 0x56E3, 0x58C7, 0x5F3E, 0x65AD, 0x6696, 0x6A80,
+ 0x6BB5, 0x7537, 0x8AC7, 0x5024, 0x77E5, 0x5730, 0x5F1B, 0x6065, 0x667A,
+ 0x6C60, 0x75F4, 0x7A1A, 0x7F6E, 0x81F4, 0x8718, 0x9045, 0x99B3, 0x7BC9,
+ 0x755C, 0x7AF9, 0x7B51, 0x84C4, 0x9010, 0x79E9, 0x7A92, 0x8336, 0x5AE1,
+ 0x7740, 0x4E2D, 0x4EF2, 0x5B99, 0x5FE0, 0x62BD, 0x663C, 0x67F1, 0x6CE8,
+ 0x866B, 0x8877, 0x8A3B, 0x914E, 0x92F3, 0x99D0, 0x6A17, 0x7026, 0x732A,
+ 0x82E7, 0x8457, 0x8CAF, 0x4E01, 0x5146, 0x51CB, 0x558B, 0x5BF5, 0x5E16,
+ 0x5E33, 0x5E81, 0x5F14, 0x5F35, 0x5F6B, 0x5FB4, 0x61F2, 0x6311, 0x66A2,
+ 0x671D, 0x6F6E, 0x7252, 0x753A, 0x773A, 0x8074, 0x8139, 0x8178, 0x8776,
+ 0x8ABF, 0x8ADC, 0x8D85, 0x8DF3, 0x929A, 0x9577, 0x9802, 0x9CE5, 0x52C5,
+ 0x6357, 0x76F4, 0x6715, 0x6C88, 0x73CD, 0x8CC3, 0x93AE, 0x9673, 0x6D25,
+ 0x589C, 0x690E, 0x69CC, 0x8FFD, 0x939A, 0x75DB, 0x901A, 0x585A, 0x6802,
+ 0x63B4, 0x69FB, 0x4F43, 0x6F2C, 0x67D8, 0x8FBB, 0x8526, 0x7DB4, 0x9354,
+ 0x693F, 0x6F70, 0x576A, 0x58F7, 0x5B2C, 0x7D2C, 0x722A, 0x540A, 0x91E3,
+ 0x9DB4, 0x4EAD, 0x4F4E, 0x505C, 0x5075, 0x5243, 0x8C9E, 0x5448, 0x5824,
+ 0x5B9A, 0x5E1D, 0x5E95, 0x5EAD, 0x5EF7, 0x5F1F, 0x608C, 0x62B5, 0x633A,
+ 0x63D0, 0x68AF, 0x6C40, 0x7887, 0x798E, 0x7A0B, 0x7DE0, 0x8247, 0x8A02,
+ 0x8AE6, 0x8E44, 0x9013, 0x90B8, 0x912D, 0x91D8, 0x9F0E, 0x6CE5, 0x6458,
+ 0x64E2, 0x6575, 0x6EF4, 0x7684, 0x7B1B, 0x9069, 0x93D1, 0x6EBA, 0x54F2,
+ 0x5FB9, 0x64A4, 0x8F4D, 0x8FED, 0x9244, 0x5178, 0x586B, 0x5929, 0x5C55,
+ 0x5E97, 0x6DFB, 0x7E8F, 0x751C, 0x8CBC, 0x8EE2, 0x985B, 0x70B9, 0x4F1D,
+ 0x6BBF, 0x6FB1, 0x7530, 0x96FB, 0x514E, 0x5410, 0x5835, 0x5857, 0x59AC,
+ 0x5C60, 0x5F92, 0x6597, 0x675C, 0x6E21, 0x767B, 0x83DF, 0x8CED, 0x9014,
+ 0x90FD, 0x934D, 0x7825, 0x783A, 0x52AA, 0x5EA6, 0x571F, 0x5974, 0x6012,
+ 0x5012, 0x515A, 0x51AC, 0x51CD, 0x5200, 0x5510, 0x5854, 0x5858, 0x5957,
+ 0x5B95, 0x5CF6, 0x5D8B, 0x60BC, 0x6295, 0x642D, 0x6771, 0x6843, 0x68BC,
+ 0x68DF, 0x76D7, 0x6DD8, 0x6E6F, 0x6D9B, 0x706F, 0x71C8, 0x5F53, 0x75D8,
+ 0x7977, 0x7B49, 0x7B54, 0x7B52, 0x7CD6, 0x7D71, 0x5230, 0x8463, 0x8569,
+ 0x85E4, 0x8A0E, 0x8B04, 0x8C46, 0x8E0F, 0x9003, 0x900F, 0x9419, 0x9676,
+ 0x982D, 0x9A30, 0x95D8, 0x50CD, 0x52D5, 0x540C, 0x5802, 0x5C0E, 0x61A7,
+ 0x649E, 0x6D1E, 0x77B3, 0x7AE5, 0x80F4, 0x8404, 0x9053, 0x9285, 0x5CE0,
+ 0x9D07, 0x533F, 0x5F97, 0x5FB3, 0x6D9C, 0x7279, 0x7763, 0x79BF, 0x7BE4,
+ 0x6BD2, 0x72EC, 0x8AAD, 0x6803, 0x6A61, 0x51F8, 0x7A81, 0x6934, 0x5C4A,
+ 0x9CF6, 0x82EB, 0x5BC5, 0x9149, 0x701E, 0x5678, 0x5C6F, 0x60C7, 0x6566,
+ 0x6C8C, 0x8C5A, 0x9041, 0x9813, 0x5451, 0x66C7, 0x920D, 0x5948, 0x90A3,
+ 0x5185, 0x4E4D, 0x51EA, 0x8599, 0x8B0E, 0x7058, 0x637A, 0x934B, 0x6962,
+ 0x99B4, 0x7E04, 0x7577, 0x5357, 0x6960, 0x8EDF, 0x96E3, 0x6C5D, 0x4E8C,
+ 0x5C3C, 0x5F10, 0x8FE9, 0x5302, 0x8CD1, 0x8089, 0x8679, 0x5EFF, 0x65E5,
+ 0x4E73, 0x5165, 0x5982, 0x5C3F, 0x97EE, 0x4EFB, 0x598A, 0x5FCD, 0x8A8D,
+ 0x6FE1, 0x79B0, 0x7962, 0x5BE7, 0x8471, 0x732B, 0x71B1, 0x5E74, 0x5FF5,
+ 0x637B, 0x649A, 0x71C3, 0x7C98, 0x4E43, 0x5EFC, 0x4E4B, 0x57DC, 0x56A2,
+ 0x60A9, 0x6FC3, 0x7D0D, 0x80FD, 0x8133, 0x81BF, 0x8FB2, 0x8997, 0x86A4,
+ 0x5DF4, 0x628A, 0x64AD, 0x8987, 0x6777, 0x6CE2, 0x6D3E, 0x7436, 0x7834,
+ 0x5A46, 0x7F75, 0x82AD, 0x99AC, 0x4FF3, 0x5EC3, 0x62DD, 0x6392, 0x6557,
+ 0x676F, 0x76C3, 0x724C, 0x80CC, 0x80BA, 0x8F29, 0x914D, 0x500D, 0x57F9,
+ 0x5A92, 0x6885, 0x6973, 0x7164, 0x72FD, 0x8CB7, 0x58F2, 0x8CE0, 0x966A,
+ 0x9019, 0x877F, 0x79E4, 0x77E7, 0x8429, 0x4F2F, 0x5265, 0x535A, 0x62CD,
+ 0x67CF, 0x6CCA, 0x767D, 0x7B94, 0x7C95, 0x8236, 0x8584, 0x8FEB, 0x66DD,
+ 0x6F20, 0x7206, 0x7E1B, 0x83AB, 0x99C1, 0x9EA6, 0x51FD, 0x7BB1, 0x7872,
+ 0x7BB8, 0x8087, 0x7B48, 0x6AE8, 0x5E61, 0x808C, 0x7551, 0x7560, 0x516B,
+ 0x9262, 0x6E8C, 0x767A, 0x9197, 0x9AEA, 0x4F10, 0x7F70, 0x629C, 0x7B4F,
+ 0x95A5, 0x9CE9, 0x567A, 0x5859, 0x86E4, 0x96BC, 0x4F34, 0x5224, 0x534A,
+ 0x53CD, 0x53DB, 0x5E06, 0x642C, 0x6591, 0x677F, 0x6C3E, 0x6C4E, 0x7248,
+ 0x72AF, 0x73ED, 0x7554, 0x7E41, 0x822C, 0x85E9, 0x8CA9, 0x7BC4, 0x91C6,
+ 0x7169, 0x9812, 0x98EF, 0x633D, 0x6669, 0x756A, 0x76E4, 0x78D0, 0x8543,
+ 0x86EE, 0x532A, 0x5351, 0x5426, 0x5983, 0x5E87, 0x5F7C, 0x60B2, 0x6249,
+ 0x6279, 0x62AB, 0x6590, 0x6BD4, 0x6CCC, 0x75B2, 0x76AE, 0x7891, 0x79D8,
+ 0x7DCB, 0x7F77, 0x80A5, 0x88AB, 0x8AB9, 0x8CBB, 0x907F, 0x975E, 0x98DB,
+ 0x6A0B, 0x7C38, 0x5099, 0x5C3E, 0x5FAE, 0x6787, 0x6BD8, 0x7435, 0x7709,
+ 0x7F8E, 0x9F3B, 0x67CA, 0x7A17, 0x5339, 0x758B, 0x9AED, 0x5F66, 0x819D,
+ 0x83F1, 0x8098, 0x5F3C, 0x5FC5, 0x7562, 0x7B46, 0x903C, 0x6867, 0x59EB,
+ 0x5A9B, 0x7D10, 0x767E, 0x8B2C, 0x4FF5, 0x5F6A, 0x6A19, 0x6C37, 0x6F02,
+ 0x74E2, 0x7968, 0x8868, 0x8A55, 0x8C79, 0x5EDF, 0x63CF, 0x75C5, 0x79D2,
+ 0x82D7, 0x9328, 0x92F2, 0x849C, 0x86ED, 0x9C2D, 0x54C1, 0x5F6C, 0x658C,
+ 0x6D5C, 0x7015, 0x8CA7, 0x8CD3, 0x983B, 0x654F, 0x74F6, 0x4E0D, 0x4ED8,
+ 0x57E0, 0x592B, 0x5A66, 0x5BCC, 0x51A8, 0x5E03, 0x5E9C, 0x6016, 0x6276,
+ 0x6577, 0x65A7, 0x666E, 0x6D6E, 0x7236, 0x7B26, 0x8150, 0x819A, 0x8299,
+ 0x8B5C, 0x8CA0, 0x8CE6, 0x8D74, 0x961C, 0x9644, 0x4FAE, 0x64AB, 0x6B66,
+ 0x821E, 0x8461, 0x856A, 0x90E8, 0x5C01, 0x6953, 0x98A8, 0x847A, 0x8557,
+ 0x4F0F, 0x526F, 0x5FA9, 0x5E45, 0x670D, 0x798F, 0x8179, 0x8907, 0x8986,
+ 0x6DF5, 0x5F17, 0x6255, 0x6CB8, 0x4ECF, 0x7269, 0x9B92, 0x5206, 0x543B,
+ 0x5674, 0x58B3, 0x61A4, 0x626E, 0x711A, 0x596E, 0x7C89, 0x7CDE, 0x7D1B,
+ 0x96F0, 0x6587, 0x805E, 0x4E19, 0x4F75, 0x5175, 0x5840, 0x5E63, 0x5E73,
+ 0x5F0A, 0x67C4, 0x4E26, 0x853D, 0x9589, 0x965B, 0x7C73, 0x9801, 0x50FB,
+ 0x58C1, 0x7656, 0x78A7, 0x5225, 0x77A5, 0x8511, 0x7B86, 0x504F, 0x5909,
+ 0x7247, 0x7BC7, 0x7DE8, 0x8FBA, 0x8FD4, 0x904D, 0x4FBF, 0x52C9, 0x5A29,
+ 0x5F01, 0x97AD, 0x4FDD, 0x8217, 0x92EA, 0x5703, 0x6355, 0x6B69, 0x752B,
+ 0x88DC, 0x8F14, 0x7A42, 0x52DF, 0x5893, 0x6155, 0x620A, 0x66AE, 0x6BCD,
+ 0x7C3F, 0x83E9, 0x5023, 0x4FF8, 0x5305, 0x5446, 0x5831, 0x5949, 0x5B9D,
+ 0x5CF0, 0x5CEF, 0x5D29, 0x5E96, 0x62B1, 0x6367, 0x653E, 0x65B9, 0x670B,
+ 0x6CD5, 0x6CE1, 0x70F9, 0x7832, 0x7E2B, 0x80DE, 0x82B3, 0x840C, 0x84EC,
+ 0x8702, 0x8912, 0x8A2A, 0x8C4A, 0x90A6, 0x92D2, 0x98FD, 0x9CF3, 0x9D6C,
+ 0x4E4F, 0x4EA1, 0x508D, 0x5256, 0x574A, 0x59A8, 0x5E3D, 0x5FD8, 0x5FD9,
+ 0x623F, 0x66B4, 0x671B, 0x67D0, 0x68D2, 0x5192, 0x7D21, 0x80AA, 0x81A8,
+ 0x8B00, 0x8C8C, 0x8CBF, 0x927E, 0x9632, 0x5420, 0x982C, 0x5317, 0x50D5,
+ 0x535C, 0x58A8, 0x64B2, 0x6734, 0x7267, 0x7766, 0x7A46, 0x91E6, 0x52C3,
+ 0x6CA1, 0x6B86, 0x5800, 0x5E4C, 0x5954, 0x672C, 0x7FFB, 0x51E1, 0x76C6,
+ 0x6469, 0x78E8, 0x9B54, 0x9EBB, 0x57CB, 0x59B9, 0x6627, 0x679A, 0x6BCE,
+ 0x54E9, 0x69D9, 0x5E55, 0x819C, 0x6795, 0x9BAA, 0x67FE, 0x9C52, 0x685D,
+ 0x4EA6, 0x4FE3, 0x53C8, 0x62B9, 0x672B, 0x6CAB, 0x8FC4, 0x4FAD, 0x7E6D,
+ 0x9EBF, 0x4E07, 0x6162, 0x6E80, 0x6F2B, 0x8513, 0x5473, 0x672A, 0x9B45,
+ 0x5DF3, 0x7B95, 0x5CAC, 0x5BC6, 0x871C, 0x6E4A, 0x84D1, 0x7A14, 0x8108,
+ 0x5999, 0x7C8D, 0x6C11, 0x7720, 0x52D9, 0x5922, 0x7121, 0x725F, 0x77DB,
+ 0x9727, 0x9D61, 0x690B, 0x5A7F, 0x5A18, 0x51A5, 0x540D, 0x547D, 0x660E,
+ 0x76DF, 0x8FF7, 0x9298, 0x9CF4, 0x59EA, 0x725D, 0x6EC5, 0x514D, 0x68C9,
+ 0x7DBF, 0x7DEC, 0x9762, 0x9EBA, 0x6478, 0x6A21, 0x8302, 0x5984, 0x5B5F,
+ 0x6BDB, 0x731B, 0x76F2, 0x7DB2, 0x8017, 0x8499, 0x5132, 0x6728, 0x9ED9,
+ 0x76EE, 0x6762, 0x52FF, 0x9905, 0x5C24, 0x623B, 0x7C7E, 0x8CB0, 0x554F,
+ 0x60B6, 0x7D0B, 0x9580, 0x5301, 0x4E5F, 0x51B6, 0x591C, 0x723A, 0x8036,
+ 0x91CE, 0x5F25, 0x77E2, 0x5384, 0x5F79, 0x7D04, 0x85AC, 0x8A33, 0x8E8D,
+ 0x9756, 0x67F3, 0x85AE, 0x9453, 0x6109, 0x6108, 0x6CB9, 0x7652, 0x8AED,
+ 0x8F38, 0x552F, 0x4F51, 0x512A, 0x52C7, 0x53CB, 0x5BA5, 0x5E7D, 0x60A0,
+ 0x6182, 0x63D6, 0x6709, 0x67DA, 0x6E67, 0x6D8C, 0x7336, 0x7337, 0x7531,
+ 0x7950, 0x88D5, 0x8A98, 0x904A, 0x9091, 0x90F5, 0x96C4, 0x878D, 0x5915,
+ 0x4E88, 0x4F59, 0x4E0E, 0x8A89, 0x8F3F, 0x9810, 0x50AD, 0x5E7C, 0x5996,
+ 0x5BB9, 0x5EB8, 0x63DA, 0x63FA, 0x64C1, 0x66DC, 0x694A, 0x69D8, 0x6D0B,
+ 0x6EB6, 0x7194, 0x7528, 0x7AAF, 0x7F8A, 0x8000, 0x8449, 0x84C9, 0x8981,
+ 0x8B21, 0x8E0A, 0x9065, 0x967D, 0x990A, 0x617E, 0x6291, 0x6B32, 0x6C83,
+ 0x6D74, 0x7FCC, 0x7FFC, 0x6DC0, 0x7F85, 0x87BA, 0x88F8, 0x6765, 0x83B1,
+ 0x983C, 0x96F7, 0x6D1B, 0x7D61, 0x843D, 0x916A, 0x4E71, 0x5375, 0x5D50,
+ 0x6B04, 0x6FEB, 0x85CD, 0x862D, 0x89A7, 0x5229, 0x540F, 0x5C65, 0x674E,
+ 0x68A8, 0x7406, 0x7483, 0x75E2, 0x88CF, 0x88E1, 0x91CC, 0x96E2, 0x9678,
+ 0x5F8B, 0x7387, 0x7ACB, 0x844E, 0x63A0, 0x7565, 0x5289, 0x6D41, 0x6E9C,
+ 0x7409, 0x7559, 0x786B, 0x7C92, 0x9686, 0x7ADC, 0x9F8D, 0x4FB6, 0x616E,
+ 0x65C5, 0x865C, 0x4E86, 0x4EAE, 0x50DA, 0x4E21, 0x51CC, 0x5BEE, 0x6599,
+ 0x6881, 0x6DBC, 0x731F, 0x7642, 0x77AD, 0x7A1C, 0x7CE7, 0x826F, 0x8AD2,
+ 0x907C, 0x91CF, 0x9675, 0x9818, 0x529B, 0x7DD1, 0x502B, 0x5398, 0x6797,
+ 0x6DCB, 0x71D0, 0x7433, 0x81E8, 0x8F2A, 0x96A3, 0x9C57, 0x9E9F, 0x7460,
+ 0x5841, 0x6D99, 0x7D2F, 0x985E, 0x4EE4, 0x4F36, 0x4F8B, 0x51B7, 0x52B1,
+ 0x5DBA, 0x601C, 0x73B2, 0x793C, 0x82D3, 0x9234, 0x96B7, 0x96F6, 0x970A,
+ 0x9E97, 0x9F62, 0x66A6, 0x6B74, 0x5217, 0x52A3, 0x70C8, 0x88C2, 0x5EC9,
+ 0x604B, 0x6190, 0x6F23, 0x7149, 0x7C3E, 0x7DF4, 0x806F, 0x84EE, 0x9023,
+ 0x932C, 0x5442, 0x9B6F, 0x6AD3, 0x7089, 0x8CC2, 0x8DEF, 0x9732, 0x52B4,
+ 0x5A41, 0x5ECA, 0x5F04, 0x6717, 0x697C, 0x6994, 0x6D6A, 0x6F0F, 0x7262,
+ 0x72FC, 0x7BED, 0x8001, 0x807E, 0x874B, 0x90CE, 0x516D, 0x9E93, 0x7984,
+ 0x808B, 0x9332, 0x8AD6, 0x502D, 0x548C, 0x8A71, 0x6B6A, 0x8CC4, 0x8107,
+ 0x60D1, 0x67A0, 0x9DF2, 0x4E99, 0x4E98, 0x9C10, 0x8A6B, 0x85C1, 0x8568,
+ 0x6900, 0x6E7E, 0x7897, 0x8155, 0x5F0C, 0x4E10, 0x4E15, 0x4E2A, 0x4E31,
+ 0x4E36, 0x4E3C, 0x4E3F, 0x4E42, 0x4E56, 0x4E58, 0x4E82, 0x4E85, 0x8C6B,
+ 0x4E8A, 0x8212, 0x5F0D, 0x4E8E, 0x4E9E, 0x4E9F, 0x4EA0, 0x4EA2, 0x4EB0,
+ 0x4EB3, 0x4EB6, 0x4ECE, 0x4ECD, 0x4EC4, 0x4EC6, 0x4EC2, 0x4ED7, 0x4EDE,
+ 0x4EED, 0x4EDF, 0x4EF7, 0x4F09, 0x4F5A, 0x4F30, 0x4F5B, 0x4F5D, 0x4F57,
+ 0x4F47, 0x4F76, 0x4F88, 0x4F8F, 0x4F98, 0x4F7B, 0x4F69, 0x4F70, 0x4F91,
+ 0x4F6F, 0x4F86, 0x4F96, 0x5118, 0x4FD4, 0x4FDF, 0x4FCE, 0x4FD8, 0x4FDB,
+ 0x4FD1, 0x4FDA, 0x4FD0, 0x4FE4, 0x4FE5, 0x501A, 0x5028, 0x5014, 0x502A,
+ 0x5025, 0x5005, 0x4F1C, 0x4FF6, 0x5021, 0x5029, 0x502C, 0x4FFE, 0x4FEF,
+ 0x5011, 0x5006, 0x5043, 0x5047, 0x6703, 0x5055, 0x5050, 0x5048, 0x505A,
+ 0x5056, 0x506C, 0x5078, 0x5080, 0x509A, 0x5085, 0x50B4, 0x50B2, 0x50C9,
+ 0x50CA, 0x50B3, 0x50C2, 0x50D6, 0x50DE, 0x50E5, 0x50ED, 0x50E3, 0x50EE,
+ 0x50F9, 0x50F5, 0x5109, 0x5101, 0x5102, 0x5116, 0x5115, 0x5114, 0x511A,
+ 0x5121, 0x513A, 0x5137, 0x513C, 0x513B, 0x513F, 0x5140, 0x5152, 0x514C,
+ 0x5154, 0x5162, 0x7AF8, 0x5169, 0x516A, 0x516E, 0x5180, 0x5182, 0x56D8,
+ 0x518C, 0x5189, 0x518F, 0x5191, 0x5193, 0x5195, 0x5196, 0x51A4, 0x51A6,
+ 0x51A2, 0x51A9, 0x51AA, 0x51AB, 0x51B3, 0x51B1, 0x51B2, 0x51B0, 0x51B5,
+ 0x51BD, 0x51C5, 0x51C9, 0x51DB, 0x51E0, 0x8655, 0x51E9, 0x51ED, 0x51F0,
+ 0x51F5, 0x51FE, 0x5204, 0x520B, 0x5214, 0x520E, 0x5227, 0x522A, 0x522E,
+ 0x5233, 0x5239, 0x524F, 0x5244, 0x524B, 0x524C, 0x525E, 0x5254, 0x526A,
+ 0x5274, 0x5269, 0x5273, 0x527F, 0x527D, 0x528D, 0x5294, 0x5292, 0x5271,
+ 0x5288, 0x5291, 0x8FA8, 0x8FA7, 0x52AC, 0x52AD, 0x52BC, 0x52B5, 0x52C1,
+ 0x52CD, 0x52D7, 0x52DE, 0x52E3, 0x52E6, 0x98ED, 0x52E0, 0x52F3, 0x52F5,
+ 0x52F8, 0x52F9, 0x5306, 0x5308, 0x7538, 0x530D, 0x5310, 0x530F, 0x5315,
+ 0x531A, 0x5323, 0x532F, 0x5331, 0x5333, 0x5338, 0x5340, 0x5346, 0x5345,
+ 0x4E17, 0x5349, 0x534D, 0x51D6, 0x535E, 0x5369, 0x536E, 0x5918, 0x537B,
+ 0x5377, 0x5382, 0x5396, 0x53A0, 0x53A6, 0x53A5, 0x53AE, 0x53B0, 0x53B6,
+ 0x53C3, 0x7C12, 0x96D9, 0x53DF, 0x66FC, 0x71EE, 0x53EE, 0x53E8, 0x53ED,
+ 0x53FA, 0x5401, 0x543D, 0x5440, 0x542C, 0x542D, 0x543C, 0x542E, 0x5436,
+ 0x5429, 0x541D, 0x544E, 0x548F, 0x5475, 0x548E, 0x545F, 0x5471, 0x5477,
+ 0x5470, 0x5492, 0x547B, 0x5480, 0x5476, 0x5484, 0x5490, 0x5486, 0x54C7,
+ 0x54A2, 0x54B8, 0x54A5, 0x54AC, 0x54C4, 0x54C8, 0x54A8, 0x54AB, 0x54C2,
+ 0x54A4, 0x54BE, 0x54BC, 0x54D8, 0x54E5, 0x54E6, 0x550F, 0x5514, 0x54FD,
+ 0x54EE, 0x54ED, 0x54FA, 0x54E2, 0x5539, 0x5540, 0x5563, 0x554C, 0x552E,
+ 0x555C, 0x5545, 0x5556, 0x5557, 0x5538, 0x5533, 0x555D, 0x5599, 0x5580,
+ 0x54AF, 0x558A, 0x559F, 0x557B, 0x557E, 0x5598, 0x559E, 0x55AE, 0x557C,
+ 0x5583, 0x55A9, 0x5587, 0x55A8, 0x55DA, 0x55C5, 0x55DF, 0x55C4, 0x55DC,
+ 0x55E4, 0x55D4, 0x5614, 0x55F7, 0x5616, 0x55FE, 0x55FD, 0x561B, 0x55F9,
+ 0x564E, 0x5650, 0x71DF, 0x5634, 0x5636, 0x5632, 0x5638, 0x566B, 0x5664,
+ 0x562F, 0x566C, 0x566A, 0x5686, 0x5680, 0x568A, 0x56A0, 0x5694, 0x568F,
+ 0x56A5, 0x56AE, 0x56B6, 0x56B4, 0x56C2, 0x56BC, 0x56C1, 0x56C3, 0x56C0,
+ 0x56C8, 0x56CE, 0x56D1, 0x56D3, 0x56D7, 0x56EE, 0x56F9, 0x5700, 0x56FF,
+ 0x5704, 0x5709, 0x5708, 0x570B, 0x570D, 0x5713, 0x5718, 0x5716, 0x55C7,
+ 0x571C, 0x5726, 0x5737, 0x5738, 0x574E, 0x573B, 0x5740, 0x574F, 0x5769,
+ 0x57C0, 0x5788, 0x5761, 0x577F, 0x5789, 0x5793, 0x57A0, 0x57B3, 0x57A4,
+ 0x57AA, 0x57B0, 0x57C3, 0x57C6, 0x57D4, 0x57D2, 0x57D3, 0x580A, 0x57D6,
+ 0x57E3, 0x580B, 0x5819, 0x581D, 0x5872, 0x5821, 0x5862, 0x584B, 0x5870,
+ 0x6BC0, 0x5852, 0x583D, 0x5879, 0x5885, 0x58B9, 0x589F, 0x58AB, 0x58BA,
+ 0x58DE, 0x58BB, 0x58B8, 0x58AE, 0x58C5, 0x58D3, 0x58D1, 0x58D7, 0x58D9,
+ 0x58D8, 0x58E5, 0x58DC, 0x58E4, 0x58DF, 0x58EF, 0x58FA, 0x58F9, 0x58FB,
+ 0x58FC, 0x58FD, 0x5902, 0x590A, 0x5910, 0x591B, 0x68A6, 0x5925, 0x592C,
+ 0x592D, 0x5932, 0x5938, 0x593E, 0x7AD2, 0x5955, 0x5950, 0x594E, 0x595A,
+ 0x5958, 0x5962, 0x5960, 0x5967, 0x596C, 0x5969, 0x5978, 0x5981, 0x599D,
+ 0x4F5E, 0x4FAB, 0x59A3, 0x59B2, 0x59C6, 0x59E8, 0x59DC, 0x598D, 0x59D9,
+ 0x59DA, 0x5A25, 0x5A1F, 0x5A11, 0x5A1C, 0x5A09, 0x5A1A, 0x5A40, 0x5A6C,
+ 0x5A49, 0x5A35, 0x5A36, 0x5A62, 0x5A6A, 0x5A9A, 0x5ABC, 0x5ABE, 0x5ACB,
+ 0x5AC2, 0x5ABD, 0x5AE3, 0x5AD7, 0x5AE6, 0x5AE9, 0x5AD6, 0x5AFA, 0x5AFB,
+ 0x5B0C, 0x5B0B, 0x5B16, 0x5B32, 0x5AD0, 0x5B2A, 0x5B36, 0x5B3E, 0x5B43,
+ 0x5B45, 0x5B40, 0x5B51, 0x5B55, 0x5B5A, 0x5B5B, 0x5B65, 0x5B69, 0x5B70,
+ 0x5B73, 0x5B75, 0x5B78, 0x6588, 0x5B7A, 0x5B80, 0x5B83, 0x5BA6, 0x5BB8,
+ 0x5BC3, 0x5BC7, 0x5BC9, 0x5BD4, 0x5BD0, 0x5BE4, 0x5BE6, 0x5BE2, 0x5BDE,
+ 0x5BE5, 0x5BEB, 0x5BF0, 0x5BF6, 0x5BF3, 0x5C05, 0x5C07, 0x5C08, 0x5C0D,
+ 0x5C13, 0x5C20, 0x5C22, 0x5C28, 0x5C38, 0x5C39, 0x5C41, 0x5C46, 0x5C4E,
+ 0x5C53, 0x5C50, 0x5C4F, 0x5B71, 0x5C6C, 0x5C6E, 0x4E62, 0x5C76, 0x5C79,
+ 0x5C8C, 0x5C91, 0x5C94, 0x599B, 0x5CAB, 0x5CBB, 0x5CB6, 0x5CBC, 0x5CB7,
+ 0x5CC5, 0x5CBE, 0x5CC7, 0x5CD9, 0x5CE9, 0x5CFD, 0x5CFA, 0x5CED, 0x5D8C,
+ 0x5CEA, 0x5D0B, 0x5D15, 0x5D17, 0x5D5C, 0x5D1F, 0x5D1B, 0x5D11, 0x5D14,
+ 0x5D22, 0x5D1A, 0x5D19, 0x5D18, 0x5D4C, 0x5D52, 0x5D4E, 0x5D4B, 0x5D6C,
+ 0x5D73, 0x5D76, 0x5D87, 0x5D84, 0x5D82, 0x5DA2, 0x5D9D, 0x5DAC, 0x5DAE,
+ 0x5DBD, 0x5D90, 0x5DB7, 0x5DBC, 0x5DC9, 0x5DCD, 0x5DD3, 0x5DD2, 0x5DD6,
+ 0x5DDB, 0x5DEB, 0x5DF2, 0x5DF5, 0x5E0B, 0x5E1A, 0x5E19, 0x5E11, 0x5E1B,
+ 0x5E36, 0x5E37, 0x5E44, 0x5E43, 0x5E40, 0x5E4E, 0x5E57, 0x5E54, 0x5E5F,
+ 0x5E62, 0x5E64, 0x5E47, 0x5E75, 0x5E76, 0x5E7A, 0x9EBC, 0x5E7F, 0x5EA0,
+ 0x5EC1, 0x5EC2, 0x5EC8, 0x5ED0, 0x5ECF, 0x5ED6, 0x5EE3, 0x5EDD, 0x5EDA,
+ 0x5EDB, 0x5EE2, 0x5EE1, 0x5EE8, 0x5EE9, 0x5EEC, 0x5EF1, 0x5EF3, 0x5EF0,
+ 0x5EF4, 0x5EF8, 0x5EFE, 0x5F03, 0x5F09, 0x5F5D, 0x5F5C, 0x5F0B, 0x5F11,
+ 0x5F16, 0x5F29, 0x5F2D, 0x5F38, 0x5F41, 0x5F48, 0x5F4C, 0x5F4E, 0x5F2F,
+ 0x5F51, 0x5F56, 0x5F57, 0x5F59, 0x5F61, 0x5F6D, 0x5F73, 0x5F77, 0x5F83,
+ 0x5F82, 0x5F7F, 0x5F8A, 0x5F88, 0x5F91, 0x5F87, 0x5F9E, 0x5F99, 0x5F98,
+ 0x5FA0, 0x5FA8, 0x5FAD, 0x5FBC, 0x5FD6, 0x5FFB, 0x5FE4, 0x5FF8, 0x5FF1,
+ 0x5FDD, 0x60B3, 0x5FFF, 0x6021, 0x6060, 0x6019, 0x6010, 0x6029, 0x600E,
+ 0x6031, 0x601B, 0x6015, 0x602B, 0x6026, 0x600F, 0x603A, 0x605A, 0x6041,
+ 0x606A, 0x6077, 0x605F, 0x604A, 0x6046, 0x604D, 0x6063, 0x6043, 0x6064,
+ 0x6042, 0x606C, 0x606B, 0x6059, 0x6081, 0x608D, 0x60E7, 0x6083, 0x609A,
+ 0x6084, 0x609B, 0x6096, 0x6097, 0x6092, 0x60A7, 0x608B, 0x60E1, 0x60B8,
+ 0x60E0, 0x60D3, 0x60B4, 0x5FF0, 0x60BD, 0x60C6, 0x60B5, 0x60D8, 0x614D,
+ 0x6115, 0x6106, 0x60F6, 0x60F7, 0x6100, 0x60F4, 0x60FA, 0x6103, 0x6121,
+ 0x60FB, 0x60F1, 0x610D, 0x610E, 0x6147, 0x613E, 0x6128, 0x6127, 0x614A,
+ 0x613F, 0x613C, 0x612C, 0x6134, 0x613D, 0x6142, 0x6144, 0x6173, 0x6177,
+ 0x6158, 0x6159, 0x615A, 0x616B, 0x6174, 0x616F, 0x6165, 0x6171, 0x615F,
+ 0x615D, 0x6153, 0x6175, 0x6199, 0x6196, 0x6187, 0x61AC, 0x6194, 0x619A,
+ 0x618A, 0x6191, 0x61AB, 0x61AE, 0x61CC, 0x61CA, 0x61C9, 0x61F7, 0x61C8,
+ 0x61C3, 0x61C6, 0x61BA, 0x61CB, 0x7F79, 0x61CD, 0x61E6, 0x61E3, 0x61F6,
+ 0x61FA, 0x61F4, 0x61FF, 0x61FD, 0x61FC, 0x61FE, 0x6200, 0x6208, 0x6209,
+ 0x620D, 0x620C, 0x6214, 0x621B, 0x621E, 0x6221, 0x622A, 0x622E, 0x6230,
+ 0x6232, 0x6233, 0x6241, 0x624E, 0x625E, 0x6263, 0x625B, 0x6260, 0x6268,
+ 0x627C, 0x6282, 0x6289, 0x627E, 0x6292, 0x6293, 0x6296, 0x62D4, 0x6283,
+ 0x6294, 0x62D7, 0x62D1, 0x62BB, 0x62CF, 0x62FF, 0x62C6, 0x64D4, 0x62C8,
+ 0x62DC, 0x62CC, 0x62CA, 0x62C2, 0x62C7, 0x629B, 0x62C9, 0x630C, 0x62EE,
+ 0x62F1, 0x6327, 0x6302, 0x6308, 0x62EF, 0x62F5, 0x6350, 0x633E, 0x634D,
+ 0x641C, 0x634F, 0x6396, 0x638E, 0x6380, 0x63AB, 0x6376, 0x63A3, 0x638F,
+ 0x6389, 0x639F, 0x63B5, 0x636B, 0x6369, 0x63BE, 0x63E9, 0x63C0, 0x63C6,
+ 0x63E3, 0x63C9, 0x63D2, 0x63F6, 0x63C4, 0x6416, 0x6434, 0x6406, 0x6413,
+ 0x6426, 0x6436, 0x651D, 0x6417, 0x6428, 0x640F, 0x6467, 0x646F, 0x6476,
+ 0x644E, 0x652A, 0x6495, 0x6493, 0x64A5, 0x64A9, 0x6488, 0x64BC, 0x64DA,
+ 0x64D2, 0x64C5, 0x64C7, 0x64BB, 0x64D8, 0x64C2, 0x64F1, 0x64E7, 0x8209,
+ 0x64E0, 0x64E1, 0x62AC, 0x64E3, 0x64EF, 0x652C, 0x64F6, 0x64F4, 0x64F2,
+ 0x64FA, 0x6500, 0x64FD, 0x6518, 0x651C, 0x6505, 0x6524, 0x6523, 0x652B,
+ 0x6534, 0x6535, 0x6537, 0x6536, 0x6538, 0x754B, 0x6548, 0x6556, 0x6555,
+ 0x654D, 0x6558, 0x655E, 0x655D, 0x6572, 0x6578, 0x6582, 0x6583, 0x8B8A,
+ 0x659B, 0x659F, 0x65AB, 0x65B7, 0x65C3, 0x65C6, 0x65C1, 0x65C4, 0x65CC,
+ 0x65D2, 0x65DB, 0x65D9, 0x65E0, 0x65E1, 0x65F1, 0x6772, 0x660A, 0x6603,
+ 0x65FB, 0x6773, 0x6635, 0x6636, 0x6634, 0x661C, 0x664F, 0x6644, 0x6649,
+ 0x6641, 0x665E, 0x665D, 0x6664, 0x6667, 0x6668, 0x665F, 0x6662, 0x6670,
+ 0x6683, 0x6688, 0x668E, 0x6689, 0x6684, 0x6698, 0x669D, 0x66C1, 0x66B9,
+ 0x66C9, 0x66BE, 0x66BC, 0x66C4, 0x66B8, 0x66D6, 0x66DA, 0x66E0, 0x663F,
+ 0x66E6, 0x66E9, 0x66F0, 0x66F5, 0x66F7, 0x670F, 0x6716, 0x671E, 0x6726,
+ 0x6727, 0x9738, 0x672E, 0x673F, 0x6736, 0x6741, 0x6738, 0x6737, 0x6746,
+ 0x675E, 0x6760, 0x6759, 0x6763, 0x6764, 0x6789, 0x6770, 0x67A9, 0x677C,
+ 0x676A, 0x678C, 0x678B, 0x67A6, 0x67A1, 0x6785, 0x67B7, 0x67EF, 0x67B4,
+ 0x67EC, 0x67B3, 0x67E9, 0x67B8, 0x67E4, 0x67DE, 0x67DD, 0x67E2, 0x67EE,
+ 0x67B9, 0x67CE, 0x67C6, 0x67E7, 0x6A9C, 0x681E, 0x6846, 0x6829, 0x6840,
+ 0x684D, 0x6832, 0x684E, 0x68B3, 0x682B, 0x6859, 0x6863, 0x6877, 0x687F,
+ 0x689F, 0x688F, 0x68AD, 0x6894, 0x689D, 0x689B, 0x6883, 0x6AAE, 0x68B9,
+ 0x6874, 0x68B5, 0x68A0, 0x68BA, 0x690F, 0x688D, 0x687E, 0x6901, 0x68CA,
+ 0x6908, 0x68D8, 0x6922, 0x6926, 0x68E1, 0x690C, 0x68CD, 0x68D4, 0x68E7,
+ 0x68D5, 0x6936, 0x6912, 0x6904, 0x68D7, 0x68E3, 0x6925, 0x68F9, 0x68E0,
+ 0x68EF, 0x6928, 0x692A, 0x691A, 0x6923, 0x6921, 0x68C6, 0x6979, 0x6977,
+ 0x695C, 0x6978, 0x696B, 0x6954, 0x697E, 0x696E, 0x6939, 0x6974, 0x693D,
+ 0x6959, 0x6930, 0x6961, 0x695E, 0x695D, 0x6981, 0x696A, 0x69B2, 0x69AE,
+ 0x69D0, 0x69BF, 0x69C1, 0x69D3, 0x69BE, 0x69CE, 0x5BE8, 0x69CA, 0x69DD,
+ 0x69BB, 0x69C3, 0x69A7, 0x6A2E, 0x6991, 0x69A0, 0x699C, 0x6995, 0x69B4,
+ 0x69DE, 0x69E8, 0x6A02, 0x6A1B, 0x69FF, 0x6B0A, 0x69F9, 0x69F2, 0x69E7,
+ 0x6A05, 0x69B1, 0x6A1E, 0x69ED, 0x6A14, 0x69EB, 0x6A0A, 0x6A12, 0x6AC1,
+ 0x6A23, 0x6A13, 0x6A44, 0x6A0C, 0x6A72, 0x6A36, 0x6A78, 0x6A47, 0x6A62,
+ 0x6A59, 0x6A66, 0x6A48, 0x6A38, 0x6A22, 0x6A90, 0x6A8D, 0x6AA0, 0x6A84,
+ 0x6AA2, 0x6AA3, 0x6A97, 0x8617, 0x6ABB, 0x6AC3, 0x6AC2, 0x6AB8, 0x6AB3,
+ 0x6AAC, 0x6ADE, 0x6AD1, 0x6ADF, 0x6AAA, 0x6ADA, 0x6AEA, 0x6AFB, 0x6B05,
+ 0x8616, 0x6AFA, 0x6B12, 0x6B16, 0x9B31, 0x6B1F, 0x6B38, 0x6B37, 0x76DC,
+ 0x6B39, 0x98EE, 0x6B47, 0x6B43, 0x6B49, 0x6B50, 0x6B59, 0x6B54, 0x6B5B,
+ 0x6B5F, 0x6B61, 0x6B78, 0x6B79, 0x6B7F, 0x6B80, 0x6B84, 0x6B83, 0x6B8D,
+ 0x6B98, 0x6B95, 0x6B9E, 0x6BA4, 0x6BAA, 0x6BAB, 0x6BAF, 0x6BB2, 0x6BB1,
+ 0x6BB3, 0x6BB7, 0x6BBC, 0x6BC6, 0x6BCB, 0x6BD3, 0x6BDF, 0x6BEC, 0x6BEB,
+ 0x6BF3, 0x6BEF, 0x9EBE, 0x6C08, 0x6C13, 0x6C14, 0x6C1B, 0x6C24, 0x6C23,
+ 0x6C5E, 0x6C55, 0x6C62, 0x6C6A, 0x6C82, 0x6C8D, 0x6C9A, 0x6C81, 0x6C9B,
+ 0x6C7E, 0x6C68, 0x6C73, 0x6C92, 0x6C90, 0x6CC4, 0x6CF1, 0x6CD3, 0x6CBD,
+ 0x6CD7, 0x6CC5, 0x6CDD, 0x6CAE, 0x6CB1, 0x6CBE, 0x6CBA, 0x6CDB, 0x6CEF,
+ 0x6CD9, 0x6CEA, 0x6D1F, 0x884D, 0x6D36, 0x6D2B, 0x6D3D, 0x6D38, 0x6D19,
+ 0x6D35, 0x6D33, 0x6D12, 0x6D0C, 0x6D63, 0x6D93, 0x6D64, 0x6D5A, 0x6D79,
+ 0x6D59, 0x6D8E, 0x6D95, 0x6FE4, 0x6D85, 0x6DF9, 0x6E15, 0x6E0A, 0x6DB5,
+ 0x6DC7, 0x6DE6, 0x6DB8, 0x6DC6, 0x6DEC, 0x6DDE, 0x6DCC, 0x6DE8, 0x6DD2,
+ 0x6DC5, 0x6DFA, 0x6DD9, 0x6DE4, 0x6DD5, 0x6DEA, 0x6DEE, 0x6E2D, 0x6E6E,
+ 0x6E2E, 0x6E19, 0x6E72, 0x6E5F, 0x6E3E, 0x6E23, 0x6E6B, 0x6E2B, 0x6E76,
+ 0x6E4D, 0x6E1F, 0x6E43, 0x6E3A, 0x6E4E, 0x6E24, 0x6EFF, 0x6E1D, 0x6E38,
+ 0x6E82, 0x6EAA, 0x6E98, 0x6EC9, 0x6EB7, 0x6ED3, 0x6EBD, 0x6EAF, 0x6EC4,
+ 0x6EB2, 0x6ED4, 0x6ED5, 0x6E8F, 0x6EA5, 0x6EC2, 0x6E9F, 0x6F41, 0x6F11,
+ 0x704C, 0x6EEC, 0x6EF8, 0x6EFE, 0x6F3F, 0x6EF2, 0x6F31, 0x6EEF, 0x6F32,
+ 0x6ECC, 0x6F3E, 0x6F13, 0x6EF7, 0x6F86, 0x6F7A, 0x6F78, 0x6F81, 0x6F80,
+ 0x6F6F, 0x6F5B, 0x6FF3, 0x6F6D, 0x6F82, 0x6F7C, 0x6F58, 0x6F8E, 0x6F91,
+ 0x6FC2, 0x6F66, 0x6FB3, 0x6FA3, 0x6FA1, 0x6FA4, 0x6FB9, 0x6FC6, 0x6FAA,
+ 0x6FDF, 0x6FD5, 0x6FEC, 0x6FD4, 0x6FD8, 0x6FF1, 0x6FEE, 0x6FDB, 0x7009,
+ 0x700B, 0x6FFA, 0x7011, 0x7001, 0x700F, 0x6FFE, 0x701B, 0x701A, 0x6F74,
+ 0x701D, 0x7018, 0x701F, 0x7030, 0x703E, 0x7032, 0x7051, 0x7063, 0x7099,
+ 0x7092, 0x70AF, 0x70F1, 0x70AC, 0x70B8, 0x70B3, 0x70AE, 0x70DF, 0x70CB,
+ 0x70DD, 0x70D9, 0x7109, 0x70FD, 0x711C, 0x7119, 0x7165, 0x7155, 0x7188,
+ 0x7166, 0x7162, 0x714C, 0x7156, 0x716C, 0x718F, 0x71FB, 0x7184, 0x7195,
+ 0x71A8, 0x71AC, 0x71D7, 0x71B9, 0x71BE, 0x71D2, 0x71C9, 0x71D4, 0x71CE,
+ 0x71E0, 0x71EC, 0x71E7, 0x71F5, 0x71FC, 0x71F9, 0x71FF, 0x720D, 0x7210,
+ 0x721B, 0x7228, 0x722D, 0x722C, 0x7230, 0x7232, 0x723B, 0x723C, 0x723F,
+ 0x7240, 0x7246, 0x724B, 0x7258, 0x7274, 0x727E, 0x7282, 0x7281, 0x7287,
+ 0x7292, 0x7296, 0x72A2, 0x72A7, 0x72B9, 0x72B2, 0x72C3, 0x72C6, 0x72C4,
+ 0x72CE, 0x72D2, 0x72E2, 0x72E0, 0x72E1, 0x72F9, 0x72F7, 0x500F, 0x7317,
+ 0x730A, 0x731C, 0x7316, 0x731D, 0x7334, 0x732F, 0x7329, 0x7325, 0x733E,
+ 0x734E, 0x734F, 0x9ED8, 0x7357, 0x736A, 0x7368, 0x7370, 0x7378, 0x7375,
+ 0x737B, 0x737A, 0x73C8, 0x73B3, 0x73CE, 0x73BB, 0x73C0, 0x73E5, 0x73EE,
+ 0x73DE, 0x74A2, 0x7405, 0x746F, 0x7425, 0x73F8, 0x7432, 0x743A, 0x7455,
+ 0x743F, 0x745F, 0x7459, 0x7441, 0x745C, 0x7469, 0x7470, 0x7463, 0x746A,
+ 0x7476, 0x747E, 0x748B, 0x749E, 0x74A7, 0x74CA, 0x74CF, 0x74D4, 0x73F1,
+ 0x74E0, 0x74E3, 0x74E7, 0x74E9, 0x74EE, 0x74F2, 0x74F0, 0x74F1, 0x74F8,
+ 0x74F7, 0x7504, 0x7503, 0x7505, 0x750C, 0x750E, 0x750D, 0x7515, 0x7513,
+ 0x751E, 0x7526, 0x752C, 0x753C, 0x7544, 0x754D, 0x754A, 0x7549, 0x755B,
+ 0x7546, 0x755A, 0x7569, 0x7564, 0x7567, 0x756B, 0x756D, 0x7578, 0x7576,
+ 0x7586, 0x7587, 0x7574, 0x758A, 0x7589, 0x7582, 0x7594, 0x759A, 0x759D,
+ 0x75A5, 0x75A3, 0x75C2, 0x75B3, 0x75C3, 0x75B5, 0x75BD, 0x75B8, 0x75BC,
+ 0x75B1, 0x75CD, 0x75CA, 0x75D2, 0x75D9, 0x75E3, 0x75DE, 0x75FE, 0x75FF,
+ 0x75FC, 0x7601, 0x75F0, 0x75FA, 0x75F2, 0x75F3, 0x760B, 0x760D, 0x7609,
+ 0x761F, 0x7627, 0x7620, 0x7621, 0x7622, 0x7624, 0x7634, 0x7630, 0x763B,
+ 0x7647, 0x7648, 0x7646, 0x765C, 0x7658, 0x7661, 0x7662, 0x7668, 0x7669,
+ 0x766A, 0x7667, 0x766C, 0x7670, 0x7672, 0x7676, 0x7678, 0x767C, 0x7680,
+ 0x7683, 0x7688, 0x768B, 0x768E, 0x7696, 0x7693, 0x7699, 0x769A, 0x76B0,
+ 0x76B4, 0x76B8, 0x76B9, 0x76BA, 0x76C2, 0x76CD, 0x76D6, 0x76D2, 0x76DE,
+ 0x76E1, 0x76E5, 0x76E7, 0x76EA, 0x862F, 0x76FB, 0x7708, 0x7707, 0x7704,
+ 0x7729, 0x7724, 0x771E, 0x7725, 0x7726, 0x771B, 0x7737, 0x7738, 0x7747,
+ 0x775A, 0x7768, 0x776B, 0x775B, 0x7765, 0x777F, 0x777E, 0x7779, 0x778E,
+ 0x778B, 0x7791, 0x77A0, 0x779E, 0x77B0, 0x77B6, 0x77B9, 0x77BF, 0x77BC,
+ 0x77BD, 0x77BB, 0x77C7, 0x77CD, 0x77D7, 0x77DA, 0x77DC, 0x77E3, 0x77EE,
+ 0x77FC, 0x780C, 0x7812, 0x7926, 0x7820, 0x792A, 0x7845, 0x788E, 0x7874,
+ 0x7886, 0x787C, 0x789A, 0x788C, 0x78A3, 0x78B5, 0x78AA, 0x78AF, 0x78D1,
+ 0x78C6, 0x78CB, 0x78D4, 0x78BE, 0x78BC, 0x78C5, 0x78CA, 0x78EC, 0x78E7,
+ 0x78DA, 0x78FD, 0x78F4, 0x7907, 0x7912, 0x7911, 0x7919, 0x792C, 0x792B,
+ 0x7940, 0x7960, 0x7957, 0x795F, 0x795A, 0x7955, 0x7953, 0x797A, 0x797F,
+ 0x798A, 0x799D, 0x79A7, 0x9F4B, 0x79AA, 0x79AE, 0x79B3, 0x79B9, 0x79BA,
+ 0x79C9, 0x79D5, 0x79E7, 0x79EC, 0x79E1, 0x79E3, 0x7A08, 0x7A0D, 0x7A18,
+ 0x7A19, 0x7A20, 0x7A1F, 0x7980, 0x7A31, 0x7A3B, 0x7A3E, 0x7A37, 0x7A43,
+ 0x7A57, 0x7A49, 0x7A61, 0x7A62, 0x7A69, 0x9F9D, 0x7A70, 0x7A79, 0x7A7D,
+ 0x7A88, 0x7A97, 0x7A95, 0x7A98, 0x7A96, 0x7AA9, 0x7AC8, 0x7AB0, 0x7AB6,
+ 0x7AC5, 0x7AC4, 0x7ABF, 0x9083, 0x7AC7, 0x7ACA, 0x7ACD, 0x7ACF, 0x7AD5,
+ 0x7AD3, 0x7AD9, 0x7ADA, 0x7ADD, 0x7AE1, 0x7AE2, 0x7AE6, 0x7AED, 0x7AF0,
+ 0x7B02, 0x7B0F, 0x7B0A, 0x7B06, 0x7B33, 0x7B18, 0x7B19, 0x7B1E, 0x7B35,
+ 0x7B28, 0x7B36, 0x7B50, 0x7B7A, 0x7B04, 0x7B4D, 0x7B0B, 0x7B4C, 0x7B45,
+ 0x7B75, 0x7B65, 0x7B74, 0x7B67, 0x7B70, 0x7B71, 0x7B6C, 0x7B6E, 0x7B9D,
+ 0x7B98, 0x7B9F, 0x7B8D, 0x7B9C, 0x7B9A, 0x7B8B, 0x7B92, 0x7B8F, 0x7B5D,
+ 0x7B99, 0x7BCB, 0x7BC1, 0x7BCC, 0x7BCF, 0x7BB4, 0x7BC6, 0x7BDD, 0x7BE9,
+ 0x7C11, 0x7C14, 0x7BE6, 0x7BE5, 0x7C60, 0x7C00, 0x7C07, 0x7C13, 0x7BF3,
+ 0x7BF7, 0x7C17, 0x7C0D, 0x7BF6, 0x7C23, 0x7C27, 0x7C2A, 0x7C1F, 0x7C37,
+ 0x7C2B, 0x7C3D, 0x7C4C, 0x7C43, 0x7C54, 0x7C4F, 0x7C40, 0x7C50, 0x7C58,
+ 0x7C5F, 0x7C64, 0x7C56, 0x7C65, 0x7C6C, 0x7C75, 0x7C83, 0x7C90, 0x7CA4,
+ 0x7CAD, 0x7CA2, 0x7CAB, 0x7CA1, 0x7CA8, 0x7CB3, 0x7CB2, 0x7CB1, 0x7CAE,
+ 0x7CB9, 0x7CBD, 0x7CC0, 0x7CC5, 0x7CC2, 0x7CD8, 0x7CD2, 0x7CDC, 0x7CE2,
+ 0x9B3B, 0x7CEF, 0x7CF2, 0x7CF4, 0x7CF6, 0x7CFA, 0x7D06, 0x7D02, 0x7D1C,
+ 0x7D15, 0x7D0A, 0x7D45, 0x7D4B, 0x7D2E, 0x7D32, 0x7D3F, 0x7D35, 0x7D46,
+ 0x7D73, 0x7D56, 0x7D4E, 0x7D72, 0x7D68, 0x7D6E, 0x7D4F, 0x7D63, 0x7D93,
+ 0x7D89, 0x7D5B, 0x7D8F, 0x7D7D, 0x7D9B, 0x7DBA, 0x7DAE, 0x7DA3, 0x7DB5,
+ 0x7DC7, 0x7DBD, 0x7DAB, 0x7E3D, 0x7DA2, 0x7DAF, 0x7DDC, 0x7DB8, 0x7D9F,
+ 0x7DB0, 0x7DD8, 0x7DDD, 0x7DE4, 0x7DDE, 0x7DFB, 0x7DF2, 0x7DE1, 0x7E05,
+ 0x7E0A, 0x7E23, 0x7E21, 0x7E12, 0x7E31, 0x7E1F, 0x7E09, 0x7E0B, 0x7E22,
+ 0x7E46, 0x7E66, 0x7E3B, 0x7E35, 0x7E39, 0x7E43, 0x7E37, 0x7E32, 0x7E3A,
+ 0x7E67, 0x7E5D, 0x7E56, 0x7E5E, 0x7E59, 0x7E5A, 0x7E79, 0x7E6A, 0x7E69,
+ 0x7E7C, 0x7E7B, 0x7E83, 0x7DD5, 0x7E7D, 0x8FAE, 0x7E7F, 0x7E88, 0x7E89,
+ 0x7E8C, 0x7E92, 0x7E90, 0x7E93, 0x7E94, 0x7E96, 0x7E8E, 0x7E9B, 0x7E9C,
+ 0x7F38, 0x7F3A, 0x7F45, 0x7F4C, 0x7F4D, 0x7F4E, 0x7F50, 0x7F51, 0x7F55,
+ 0x7F54, 0x7F58, 0x7F5F, 0x7F60, 0x7F68, 0x7F69, 0x7F67, 0x7F78, 0x7F82,
+ 0x7F86, 0x7F83, 0x7F88, 0x7F87, 0x7F8C, 0x7F94, 0x7F9E, 0x7F9D, 0x7F9A,
+ 0x7FA3, 0x7FAF, 0x7FB2, 0x7FB9, 0x7FAE, 0x7FB6, 0x7FB8, 0x8B71, 0x7FC5,
+ 0x7FC6, 0x7FCA, 0x7FD5, 0x7FD4, 0x7FE1, 0x7FE6, 0x7FE9, 0x7FF3, 0x7FF9,
+ 0x98DC, 0x8006, 0x8004, 0x800B, 0x8012, 0x8018, 0x8019, 0x801C, 0x8021,
+ 0x8028, 0x803F, 0x803B, 0x804A, 0x8046, 0x8052, 0x8058, 0x805A, 0x805F,
+ 0x8062, 0x8068, 0x8073, 0x8072, 0x8070, 0x8076, 0x8079, 0x807D, 0x807F,
+ 0x8084, 0x8086, 0x8085, 0x809B, 0x8093, 0x809A, 0x80AD, 0x5190, 0x80AC,
+ 0x80DB, 0x80E5, 0x80D9, 0x80DD, 0x80C4, 0x80DA, 0x80D6, 0x8109, 0x80EF,
+ 0x80F1, 0x811B, 0x8129, 0x8123, 0x812F, 0x814B, 0x968B, 0x8146, 0x813E,
+ 0x8153, 0x8151, 0x80FC, 0x8171, 0x816E, 0x8165, 0x8166, 0x8174, 0x8183,
+ 0x8188, 0x818A, 0x8180, 0x8182, 0x81A0, 0x8195, 0x81A4, 0x81A3, 0x815F,
+ 0x8193, 0x81A9, 0x81B0, 0x81B5, 0x81BE, 0x81B8, 0x81BD, 0x81C0, 0x81C2,
+ 0x81BA, 0x81C9, 0x81CD, 0x81D1, 0x81D9, 0x81D8, 0x81C8, 0x81DA, 0x81DF,
+ 0x81E0, 0x81E7, 0x81FA, 0x81FB, 0x81FE, 0x8201, 0x8202, 0x8205, 0x8207,
+ 0x820A, 0x820D, 0x8210, 0x8216, 0x8229, 0x822B, 0x8238, 0x8233, 0x8240,
+ 0x8259, 0x8258, 0x825D, 0x825A, 0x825F, 0x8264, 0x8262, 0x8268, 0x826A,
+ 0x826B, 0x822E, 0x8271, 0x8277, 0x8278, 0x827E, 0x828D, 0x8292, 0x82AB,
+ 0x829F, 0x82BB, 0x82AC, 0x82E1, 0x82E3, 0x82DF, 0x82D2, 0x82F4, 0x82F3,
+ 0x82FA, 0x8393, 0x8303, 0x82FB, 0x82F9, 0x82DE, 0x8306, 0x82DC, 0x8309,
+ 0x82D9, 0x8335, 0x8334, 0x8316, 0x8332, 0x8331, 0x8340, 0x8339, 0x8350,
+ 0x8345, 0x832F, 0x832B, 0x8317, 0x8318, 0x8385, 0x839A, 0x83AA, 0x839F,
+ 0x83A2, 0x8396, 0x8323, 0x838E, 0x8387, 0x838A, 0x837C, 0x83B5, 0x8373,
+ 0x8375, 0x83A0, 0x8389, 0x83A8, 0x83F4, 0x8413, 0x83EB, 0x83CE, 0x83FD,
+ 0x8403, 0x83D8, 0x840B, 0x83C1, 0x83F7, 0x8407, 0x83E0, 0x83F2, 0x840D,
+ 0x8422, 0x8420, 0x83BD, 0x8438, 0x8506, 0x83FB, 0x846D, 0x842A, 0x843C,
+ 0x855A, 0x8484, 0x8477, 0x846B, 0x84AD, 0x846E, 0x8482, 0x8469, 0x8446,
+ 0x842C, 0x846F, 0x8479, 0x8435, 0x84CA, 0x8462, 0x84B9, 0x84BF, 0x849F,
+ 0x84D9, 0x84CD, 0x84BB, 0x84DA, 0x84D0, 0x84C1, 0x84C6, 0x84D6, 0x84A1,
+ 0x8521, 0x84FF, 0x84F4, 0x8517, 0x8518, 0x852C, 0x851F, 0x8515, 0x8514,
+ 0x84FC, 0x8540, 0x8563, 0x8558, 0x8548, 0x8541, 0x8602, 0x854B, 0x8555,
+ 0x8580, 0x85A4, 0x8588, 0x8591, 0x858A, 0x85A8, 0x856D, 0x8594, 0x859B,
+ 0x85EA, 0x8587, 0x859C, 0x8577, 0x857E, 0x8590, 0x85C9, 0x85BA, 0x85CF,
+ 0x85B9, 0x85D0, 0x85D5, 0x85DD, 0x85E5, 0x85DC, 0x85F9, 0x860A, 0x8613,
+ 0x860B, 0x85FE, 0x85FA, 0x8606, 0x8622, 0x861A, 0x8630, 0x863F, 0x864D,
+ 0x4E55, 0x8654, 0x865F, 0x8667, 0x8671, 0x8693, 0x86A3, 0x86A9, 0x86AA,
+ 0x868B, 0x868C, 0x86B6, 0x86AF, 0x86C4, 0x86C6, 0x86B0, 0x86C9, 0x8823,
+ 0x86AB, 0x86D4, 0x86DE, 0x86E9, 0x86EC, 0x86DF, 0x86DB, 0x86EF, 0x8712,
+ 0x8706, 0x8708, 0x8700, 0x8703, 0x86FB, 0x8711, 0x8709, 0x870D, 0x86F9,
+ 0x870A, 0x8734, 0x873F, 0x8737, 0x873B, 0x8725, 0x8729, 0x871A, 0x8760,
+ 0x875F, 0x8778, 0x874C, 0x874E, 0x8774, 0x8757, 0x8768, 0x876E, 0x8759,
+ 0x8753, 0x8763, 0x876A, 0x8805, 0x87A2, 0x879F, 0x8782, 0x87AF, 0x87CB,
+ 0x87BD, 0x87C0, 0x87D0, 0x96D6, 0x87AB, 0x87C4, 0x87B3, 0x87C7, 0x87C6,
+ 0x87BB, 0x87EF, 0x87F2, 0x87E0, 0x880F, 0x880D, 0x87FE, 0x87F6, 0x87F7,
+ 0x880E, 0x87D2, 0x8811, 0x8816, 0x8815, 0x8822, 0x8821, 0x8831, 0x8836,
+ 0x8839, 0x8827, 0x883B, 0x8844, 0x8842, 0x8852, 0x8859, 0x885E, 0x8862,
+ 0x886B, 0x8881, 0x887E, 0x889E, 0x8875, 0x887D, 0x88B5, 0x8872, 0x8882,
+ 0x8897, 0x8892, 0x88AE, 0x8899, 0x88A2, 0x888D, 0x88A4, 0x88B0, 0x88BF,
+ 0x88B1, 0x88C3, 0x88C4, 0x88D4, 0x88D8, 0x88D9, 0x88DD, 0x88F9, 0x8902,
+ 0x88FC, 0x88F4, 0x88E8, 0x88F2, 0x8904, 0x890C, 0x890A, 0x8913, 0x8943,
+ 0x891E, 0x8925, 0x892A, 0x892B, 0x8941, 0x8944, 0x893B, 0x8936, 0x8938,
+ 0x894C, 0x891D, 0x8960, 0x895E, 0x8966, 0x8964, 0x896D, 0x896A, 0x896F,
+ 0x8974, 0x8977, 0x897E, 0x8983, 0x8988, 0x898A, 0x8993, 0x8998, 0x89A1,
+ 0x89A9, 0x89A6, 0x89AC, 0x89AF, 0x89B2, 0x89BA, 0x89BD, 0x89BF, 0x89C0,
+ 0x89DA, 0x89DC, 0x89DD, 0x89E7, 0x89F4, 0x89F8, 0x8A03, 0x8A16, 0x8A10,
+ 0x8A0C, 0x8A1B, 0x8A1D, 0x8A25, 0x8A36, 0x8A41, 0x8A5B, 0x8A52, 0x8A46,
+ 0x8A48, 0x8A7C, 0x8A6D, 0x8A6C, 0x8A62, 0x8A85, 0x8A82, 0x8A84, 0x8AA8,
+ 0x8AA1, 0x8A91, 0x8AA5, 0x8AA6, 0x8A9A, 0x8AA3, 0x8AC4, 0x8ACD, 0x8AC2,
+ 0x8ADA, 0x8AEB, 0x8AF3, 0x8AE7, 0x8AE4, 0x8AF1, 0x8B14, 0x8AE0, 0x8AE2,
+ 0x8AF7, 0x8ADE, 0x8ADB, 0x8B0C, 0x8B07, 0x8B1A, 0x8AE1, 0x8B16, 0x8B10,
+ 0x8B17, 0x8B20, 0x8B33, 0x97AB, 0x8B26, 0x8B2B, 0x8B3E, 0x8B28, 0x8B41,
+ 0x8B4C, 0x8B4F, 0x8B4E, 0x8B49, 0x8B56, 0x8B5B, 0x8B5A, 0x8B6B, 0x8B5F,
+ 0x8B6C, 0x8B6F, 0x8B74, 0x8B7D, 0x8B80, 0x8B8C, 0x8B8E, 0x8B92, 0x8B93,
+ 0x8B96, 0x8B99, 0x8B9A, 0x8C3A, 0x8C41, 0x8C3F, 0x8C48, 0x8C4C, 0x8C4E,
+ 0x8C50, 0x8C55, 0x8C62, 0x8C6C, 0x8C78, 0x8C7A, 0x8C82, 0x8C89, 0x8C85,
+ 0x8C8A, 0x8C8D, 0x8C8E, 0x8C94, 0x8C7C, 0x8C98, 0x621D, 0x8CAD, 0x8CAA,
+ 0x8CBD, 0x8CB2, 0x8CB3, 0x8CAE, 0x8CB6, 0x8CC8, 0x8CC1, 0x8CE4, 0x8CE3,
+ 0x8CDA, 0x8CFD, 0x8CFA, 0x8CFB, 0x8D04, 0x8D05, 0x8D0A, 0x8D07, 0x8D0F,
+ 0x8D0D, 0x8D10, 0x9F4E, 0x8D13, 0x8CCD, 0x8D14, 0x8D16, 0x8D67, 0x8D6D,
+ 0x8D71, 0x8D73, 0x8D81, 0x8D99, 0x8DC2, 0x8DBE, 0x8DBA, 0x8DCF, 0x8DDA,
+ 0x8DD6, 0x8DCC, 0x8DDB, 0x8DCB, 0x8DEA, 0x8DEB, 0x8DDF, 0x8DE3, 0x8DFC,
+ 0x8E08, 0x8E09, 0x8DFF, 0x8E1D, 0x8E1E, 0x8E10, 0x8E1F, 0x8E42, 0x8E35,
+ 0x8E30, 0x8E34, 0x8E4A, 0x8E47, 0x8E49, 0x8E4C, 0x8E50, 0x8E48, 0x8E59,
+ 0x8E64, 0x8E60, 0x8E2A, 0x8E63, 0x8E55, 0x8E76, 0x8E72, 0x8E7C, 0x8E81,
+ 0x8E87, 0x8E85, 0x8E84, 0x8E8B, 0x8E8A, 0x8E93, 0x8E91, 0x8E94, 0x8E99,
+ 0x8EAA, 0x8EA1, 0x8EAC, 0x8EB0, 0x8EC6, 0x8EB1, 0x8EBE, 0x8EC5, 0x8EC8,
+ 0x8ECB, 0x8EDB, 0x8EE3, 0x8EFC, 0x8EFB, 0x8EEB, 0x8EFE, 0x8F0A, 0x8F05,
+ 0x8F15, 0x8F12, 0x8F19, 0x8F13, 0x8F1C, 0x8F1F, 0x8F1B, 0x8F0C, 0x8F26,
+ 0x8F33, 0x8F3B, 0x8F39, 0x8F45, 0x8F42, 0x8F3E, 0x8F4C, 0x8F49, 0x8F46,
+ 0x8F4E, 0x8F57, 0x8F5C, 0x8F62, 0x8F63, 0x8F64, 0x8F9C, 0x8F9F, 0x8FA3,
+ 0x8FAD, 0x8FAF, 0x8FB7, 0x8FDA, 0x8FE5, 0x8FE2, 0x8FEA, 0x8FEF, 0x9087,
+ 0x8FF4, 0x9005, 0x8FF9, 0x8FFA, 0x9011, 0x9015, 0x9021, 0x900D, 0x901E,
+ 0x9016, 0x900B, 0x9027, 0x9036, 0x9035, 0x9039, 0x8FF8, 0x904F, 0x9050,
+ 0x9051, 0x9052, 0x900E, 0x9049, 0x903E, 0x9056, 0x9058, 0x905E, 0x9068,
+ 0x906F, 0x9076, 0x96A8, 0x9072, 0x9082, 0x907D, 0x9081, 0x9080, 0x908A,
+ 0x9089, 0x908F, 0x90A8, 0x90AF, 0x90B1, 0x90B5, 0x90E2, 0x90E4, 0x6248,
+ 0x90DB, 0x9102, 0x9112, 0x9119, 0x9132, 0x9130, 0x914A, 0x9156, 0x9158,
+ 0x9163, 0x9165, 0x9169, 0x9173, 0x9172, 0x918B, 0x9189, 0x9182, 0x91A2,
+ 0x91AB, 0x91AF, 0x91AA, 0x91B5, 0x91B4, 0x91BA, 0x91C0, 0x91C1, 0x91C9,
+ 0x91CB, 0x91D0, 0x91D6, 0x91DF, 0x91E1, 0x91DB, 0x91FC, 0x91F5, 0x91F6,
+ 0x921E, 0x91FF, 0x9214, 0x922C, 0x9215, 0x9211, 0x925E, 0x9257, 0x9245,
+ 0x9249, 0x9264, 0x9248, 0x9295, 0x923F, 0x924B, 0x9250, 0x929C, 0x9296,
+ 0x9293, 0x929B, 0x925A, 0x92CF, 0x92B9, 0x92B7, 0x92E9, 0x930F, 0x92FA,
+ 0x9344, 0x932E, 0x9319, 0x9322, 0x931A, 0x9323, 0x933A, 0x9335, 0x933B,
+ 0x935C, 0x9360, 0x937C, 0x936E, 0x9356, 0x93B0, 0x93AC, 0x93AD, 0x9394,
+ 0x93B9, 0x93D6, 0x93D7, 0x93E8, 0x93E5, 0x93D8, 0x93C3, 0x93DD, 0x93D0,
+ 0x93C8, 0x93E4, 0x941A, 0x9414, 0x9413, 0x9403, 0x9407, 0x9410, 0x9436,
+ 0x942B, 0x9435, 0x9421, 0x943A, 0x9441, 0x9452, 0x9444, 0x945B, 0x9460,
+ 0x9462, 0x945E, 0x946A, 0x9229, 0x9470, 0x9475, 0x9477, 0x947D, 0x945A,
+ 0x947C, 0x947E, 0x9481, 0x947F, 0x9582, 0x9587, 0x958A, 0x9594, 0x9596,
+ 0x9598, 0x9599, 0x95A0, 0x95A8, 0x95A7, 0x95AD, 0x95BC, 0x95BB, 0x95B9,
+ 0x95BE, 0x95CA, 0x6FF6, 0x95C3, 0x95CD, 0x95CC, 0x95D5, 0x95D4, 0x95D6,
+ 0x95DC, 0x95E1, 0x95E5, 0x95E2, 0x9621, 0x9628, 0x962E, 0x962F, 0x9642,
+ 0x964C, 0x964F, 0x964B, 0x9677, 0x965C, 0x965E, 0x965D, 0x965F, 0x9666,
+ 0x9672, 0x966C, 0x968D, 0x9698, 0x9695, 0x9697, 0x96AA, 0x96A7, 0x96B1,
+ 0x96B2, 0x96B0, 0x96B4, 0x96B6, 0x96B8, 0x96B9, 0x96CE, 0x96CB, 0x96C9,
+ 0x96CD, 0x894D, 0x96DC, 0x970D, 0x96D5, 0x96F9, 0x9704, 0x9706, 0x9708,
+ 0x9713, 0x970E, 0x9711, 0x970F, 0x9716, 0x9719, 0x9724, 0x972A, 0x9730,
+ 0x9739, 0x973D, 0x973E, 0x9744, 0x9746, 0x9748, 0x9742, 0x9749, 0x975C,
+ 0x9760, 0x9764, 0x9766, 0x9768, 0x52D2, 0x976B, 0x9771, 0x9779, 0x9785,
+ 0x977C, 0x9781, 0x977A, 0x9786, 0x978B, 0x978F, 0x9790, 0x979C, 0x97A8,
+ 0x97A6, 0x97A3, 0x97B3, 0x97B4, 0x97C3, 0x97C6, 0x97C8, 0x97CB, 0x97DC,
+ 0x97ED, 0x9F4F, 0x97F2, 0x7ADF, 0x97F6, 0x97F5, 0x980F, 0x980C, 0x9838,
+ 0x9824, 0x9821, 0x9837, 0x983D, 0x9846, 0x984F, 0x984B, 0x986B, 0x986F,
+ 0x9870, 0x9871, 0x9874, 0x9873, 0x98AA, 0x98AF, 0x98B1, 0x98B6, 0x98C4,
+ 0x98C3, 0x98C6, 0x98E9, 0x98EB, 0x9903, 0x9909, 0x9912, 0x9914, 0x9918,
+ 0x9921, 0x991D, 0x991E, 0x9924, 0x9920, 0x992C, 0x992E, 0x993D, 0x993E,
+ 0x9942, 0x9949, 0x9945, 0x9950, 0x994B, 0x9951, 0x9952, 0x994C, 0x9955,
+ 0x9997, 0x9998, 0x99A5, 0x99AD, 0x99AE, 0x99BC, 0x99DF, 0x99DB, 0x99DD,
+ 0x99D8, 0x99D1, 0x99ED, 0x99EE, 0x99F1, 0x99F2, 0x99FB, 0x99F8, 0x9A01,
+ 0x9A0F, 0x9A05, 0x99E2, 0x9A19, 0x9A2B, 0x9A37, 0x9A45, 0x9A42, 0x9A40,
+ 0x9A43, 0x9A3E, 0x9A55, 0x9A4D, 0x9A5B, 0x9A57, 0x9A5F, 0x9A62, 0x9A65,
+ 0x9A64, 0x9A69, 0x9A6B, 0x9A6A, 0x9AAD, 0x9AB0, 0x9ABC, 0x9AC0, 0x9ACF,
+ 0x9AD1, 0x9AD3, 0x9AD4, 0x9ADE, 0x9ADF, 0x9AE2, 0x9AE3, 0x9AE6, 0x9AEF,
+ 0x9AEB, 0x9AEE, 0x9AF4, 0x9AF1, 0x9AF7, 0x9AFB, 0x9B06, 0x9B18, 0x9B1A,
+ 0x9B1F, 0x9B22, 0x9B23, 0x9B25, 0x9B27, 0x9B28, 0x9B29, 0x9B2A, 0x9B2E,
+ 0x9B2F, 0x9B32, 0x9B44, 0x9B43, 0x9B4F, 0x9B4D, 0x9B4E, 0x9B51, 0x9B58,
+ 0x9B74, 0x9B93, 0x9B83, 0x9B91, 0x9B96, 0x9B97, 0x9B9F, 0x9BA0, 0x9BA8,
+ 0x9BB4, 0x9BC0, 0x9BCA, 0x9BB9, 0x9BC6, 0x9BCF, 0x9BD1, 0x9BD2, 0x9BE3,
+ 0x9BE2, 0x9BE4, 0x9BD4, 0x9BE1, 0x9C3A, 0x9BF2, 0x9BF1, 0x9BF0, 0x9C15,
+ 0x9C14, 0x9C09, 0x9C13, 0x9C0C, 0x9C06, 0x9C08, 0x9C12, 0x9C0A, 0x9C04,
+ 0x9C2E, 0x9C1B, 0x9C25, 0x9C24, 0x9C21, 0x9C30, 0x9C47, 0x9C32, 0x9C46,
+ 0x9C3E, 0x9C5A, 0x9C60, 0x9C67, 0x9C76, 0x9C78, 0x9CE7, 0x9CEC, 0x9CF0,
+ 0x9D09, 0x9D08, 0x9CEB, 0x9D03, 0x9D06, 0x9D2A, 0x9D26, 0x9DAF, 0x9D23,
+ 0x9D1F, 0x9D44, 0x9D15, 0x9D12, 0x9D41, 0x9D3F, 0x9D3E, 0x9D46, 0x9D48,
+ 0x9D5D, 0x9D5E, 0x9D64, 0x9D51, 0x9D50, 0x9D59, 0x9D72, 0x9D89, 0x9D87,
+ 0x9DAB, 0x9D6F, 0x9D7A, 0x9D9A, 0x9DA4, 0x9DA9, 0x9DB2, 0x9DC4, 0x9DC1,
+ 0x9DBB, 0x9DB8, 0x9DBA, 0x9DC6, 0x9DCF, 0x9DC2, 0x9DD9, 0x9DD3, 0x9DF8,
+ 0x9DE6, 0x9DED, 0x9DEF, 0x9DFD, 0x9E1A, 0x9E1B, 0x9E1E, 0x9E75, 0x9E79,
+ 0x9E7D, 0x9E81, 0x9E88, 0x9E8B, 0x9E8C, 0x9E92, 0x9E95, 0x9E91, 0x9E9D,
+ 0x9EA5, 0x9EA9, 0x9EB8, 0x9EAA, 0x9EAD, 0x9761, 0x9ECC, 0x9ECE, 0x9ECF,
+ 0x9ED0, 0x9ED4, 0x9EDC, 0x9EDE, 0x9EDD, 0x9EE0, 0x9EE5, 0x9EE8, 0x9EEF,
+ 0x9EF4, 0x9EF6, 0x9EF7, 0x9EF9, 0x9EFB, 0x9EFC, 0x9EFD, 0x9F07, 0x9F08,
+ 0x76B7, 0x9F15, 0x9F21, 0x9F2C, 0x9F3E, 0x9F4A, 0x9F52, 0x9F54, 0x9F63,
+ 0x9F5F, 0x9F60, 0x9F61, 0x9F66, 0x9F67, 0x9F6C, 0x9F6A, 0x9F77, 0x9F72,
+ 0x9F76, 0x9F95, 0x9F9C, 0x9FA0, 0x582F, 0x69C7, 0x9059, 0x7464, 0x2642,
+ 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, 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, 0x301D, 0x301F, 0x2116, 0x33CD, 0x2121, 0x32A4,
+ 0x32A5, 0x32A6, 0x32A7, 0x32A8, 0x3231, 0x3232, 0x3239, 0x337E, 0x337D,
+ 0x337C, 0x222E, 0x2211, 0x221A, 0x22A5, 0x2220, 0x221F, 0x22BF, 0x2229,
+ 0x222A, 0x555E, 0x98F4, 0x6EA2, 0x9C2F, 0x6DEB, 0x8FC2, 0x6B1D, 0x53A9,
+ 0x958F, 0x5642, 0x990C, 0x7130, 0x8956, 0x9DD7, 0x8FE6, 0x6062, 0x62D0,
+ 0x6666, 0x559D, 0x845B, 0x9784, 0x5699, 0x6F97, 0x7FF0, 0x7FEB, 0x5FBD,
+ 0x7947, 0x4FE0, 0x537F, 0x50C5, 0x8EC0, 0x55B0, 0x6ADB, 0x5C51, 0x9774,
+ 0x7941, 0x6167, 0x7A3D, 0x7E6B, 0x834A, 0x9699, 0x5026, 0x5ACC, 0x6372,
+ 0x9E7C, 0x8AFA, 0x5DF7, 0x663B, 0x6E9D, 0x9EB4, 0x9D60, 0x7511, 0x91C7,
+ 0x698A, 0x6805, 0x85A9, 0x9BD6, 0x9306, 0x73CA, 0x53F1, 0x5C62, 0x906E,
+ 0x6753, 0x707C, 0x7E61, 0x914B, 0x66D9, 0x6E1A, 0x85AF, 0x85F7, 0x54E8,
+ 0x5EE0, 0x68A2, 0x8523, 0x91AC, 0x9798, 0x8755, 0x9771, 0x9017, 0x7FE0,
+ 0x647A, 0x901D, 0x87EC, 0x64B0, 0x6813, 0x714E, 0x717D, 0x8A6E, 0x564C,
+ 0x9061, 0x5275, 0x6414, 0x7626, 0x905C, 0x9A52, 0x817F, 0x9EDB, 0x5544,
+ 0x6FEF, 0x7422, 0x86F8, 0x5DFD, 0x8FBF, 0x68DA, 0x9C48, 0x6A3D, 0x7C1E,
+ 0x8A3B, 0x7026, 0x51CB, 0x6357, 0x69CC, 0x939A, 0x585A, 0x6451, 0x912D,
+ 0x64E2, 0x6EBA, 0x5861, 0x985A, 0x5835, 0x5C60, 0x83DF, 0x8CED, 0x5858,
+ 0x79B1, 0x9D07, 0x7006, 0x701E, 0x5678, 0x9041, 0x9813, 0x90A3, 0x8B0E,
+ 0x7058, 0x6962, 0x79B0, 0x56CA, 0x724C, 0x9019, 0x79E4, 0x525D, 0x7BB8,
+ 0x6F51, 0x91B1, 0x633D, 0x6249, 0x6A0B, 0x67CA, 0x7A17, 0x903C, 0x5A9B,
+ 0x8B2C, 0x5EDF, 0x7015, 0x983B, 0x853D, 0x77A5, 0x5A29, 0x5E96, 0x6CE1,
+ 0x84EC, 0x9830, 0x9C52, 0x9EB5, 0x5132, 0x9905, 0x7C7E, 0x9453, 0x6108,
+ 0x7652, 0x7337, 0x7194, 0x8000, 0x840A, 0x907C, 0x6F23, 0x7149, 0x84EE,
+ 0x6994, 0x881F, 0x5154, 0x5189, 0x5195, 0x51A4, 0x5539, 0x5533, 0x55E4,
+ 0x5632, 0x56A5, 0x580B, 0x5ABE, 0x5BC3, 0x5C5B, 0x5E64, 0x6097, 0x6369,
+ 0x6406, 0x6522, 0x6583, 0x67A6, 0x67B4, 0x689B, 0x688E, 0x6E6E, 0x71D7,
+ 0x7228, 0x73CE, 0x7504, 0x750D, 0x7515, 0x7693, 0x787C, 0x7A31, 0x9F9D,
+ 0x7B99, 0x7C90, 0x7CAE, 0x7D9B, 0x7DAE, 0x7D9F, 0x7FD4, 0x822E, 0x828D,
+ 0x82D2, 0x8323, 0x8375, 0x8517, 0x853E, 0x8782, 0x87D2, 0x890A, 0x89AF,
+ 0x8ADE, 0x8B41, 0x8DDA, 0x8E09, 0x8F13, 0x8FEA, 0x8FE9, 0x9058, 0x6248,
+ 0x91C1, 0x95BB, 0x7762, 0x9724, 0x9760, 0x976D, 0x9824, 0x9B2E, 0x9B97,
+ 0x9BF2, 0x9EAA, 0x9F9C, 0x3001, 0x3002, 0x203E, 0xFF3F, 0x30FC, 0x2015,
+ 0x2010, 0x301C, 0x2016, 0xFF5C, 0x2026, 0x2025, 0xFF08, 0xFF09, 0x3014,
+ 0x3015, 0xFF3B, 0xFF3D, 0xFF5B, 0xFF5D, 0x3008, 0x3009, 0x300A, 0x300B,
+ 0x300C, 0x300D, 0x300E, 0x300F, 0x3010, 0x3011, 0xFF1D, 0x3041, 0x3043,
+ 0x3045, 0x3047, 0x3049, 0x3063, 0x3083, 0x3085, 0x3087, 0x308E, 0x30A1,
+ 0x30A3, 0x30A5, 0x30A7, 0x30A9, 0x30C3, 0x30E3, 0x30E5, 0x30E7, 0x30EE,
+ 0x30F5, 0x30F6, 0x3349, 0x3314, 0x3322, 0x334D, 0x3318, 0x3327, 0x3303,
+ 0x3336, 0x3351, 0x3357, 0x330D, 0x3326, 0x3323, 0x332B, 0x334A, 0x333B,
+ 0x301D, 0x301E, 0x3094, 0x304B, 0x3051, 0x82A6, 0x8328, 0x5653, 0x53A9,
+ 0x7259, 0x6C72, 0x7B08, 0x9957, 0x62F3, 0x9910, 0x976D, 0x717D, 0x7A7F,
+ 0x7BAD, 0x63C3, 0x83DF, 0x7962, 0x53DB, 0x7BC7, 0x8FC4, 0x7C3E, 0x50CA,
+ 0x5315, 0x55A9, 0x56AE, 0x5819, 0x591B, 0x5C28, 0x5ED0, 0x5ECF, 0x6241,
+ 0x66C1, 0x6C08, 0x6E23, 0x6EEC, 0x7A97, 0x7BDD, 0x7FE9, 0x8422, 0x8759,
+ 0x880E, 0x87D2, 0x9A19, 0x9EAD, 0xFFE4, 0xFF07, 0xFF02, 0x11A8, 0x25C1,
+ 0x25B7, 0x21E9, 0x21E7, 0x21E6, 0x21E8, 0x25A2, 0x2667, 0x2661, 0x2664,
+ 0x2662, 0x33A0, 0x33A2, 0x33A4, 0x33A5, 0x3397, 0x2113, 0x3398, 0x33B3,
+ 0x33B2, 0x33B1, 0x33B0, 0x3385, 0x3386, 0x3387, 0x33CB, 0x3390, 0x33D4,
+ 0x3396, 0x3322, 0x3316, 0x3318, 0x3315, 0x3303, 0x3323, 0x3357, 0x3342,
+ 0x3339, 0x333B, 0x3300, 0x3331, 0x3347, 0x331E, 0x332A, 0x33CD, 0x337F,
+ 0x2121, 0x260E, 0x3036, 0x3020, 0x00A9, 0x00AE, 0x0000, 0x2488, 0x2489,
+ 0x248A, 0x248B, 0x248C, 0x248D, 0x248E, 0x248F, 0x2490, 0x2474, 0x2475,
+ 0x2476, 0x2477, 0x2478, 0x2479, 0x247A, 0x247B, 0x247C, 0x247D, 0x247E,
+ 0x247F, 0x2480, 0x2481, 0x2482, 0x2483, 0x2484, 0x2485, 0x2486, 0x2487,
+ 0x3251, 0x2170, 0x2171, 0x2172, 0x2173, 0x2174, 0x2175, 0x2176, 0x2177,
+ 0x2178, 0x2179, 0x3252, 0x3253, 0x3254, 0x3255, 0x3256, 0x3257, 0x3258,
+ 0x3259, 0x325A, 0x325B, 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, 0x3243, 0x323D, 0x323F, 0x3234, 0x3238, 0x3233, 0x323C,
+ 0x3242, 0x323E, 0x3236, 0x3235, 0x323B, 0x3240, 0x323A, 0x32B0, 0x32AD,
+ 0x32A9, 0x32AF, 0x3294, 0x32AA, 0x3298, 0x32AB, 0x3292, 0x3291, 0x3293,
+ 0x32AC, 0x32AE, 0x3296, 0x23A9, 0x23A8, 0x23A7, 0xFE38, 0x23AD, 0x23AC,
+ 0x23AB, 0xFE38, 0x23AB, 0x23AC, 0x23AD, 0xFE38, 0x23A7, 0x23A8, 0x23A9,
+ 0xFE38, 0x33CC, 0x3305, 0x00BD, 0x00BC, 0x339F, 0x33A3, 0x33A6, 0xFFFD,
+ 0xFFFD, 0x329E, 0x3388, 0x3389, 0x33C8, 0x222D, 0x5370, 0x3230, 0x322A,
+ 0x322B, 0x322C, 0x322D, 0x322E, 0x322F, 0x3237, 0x3241, 0x27A1, 0x21E6,
+ 0x21E7, 0x21E9, 0x25C9, 0x2660, 0x2665, 0x2663, 0x2666, 0x2600, 0x2601,
+ 0x2602, 0x2603, 0x261E, 0x261C, 0x261D, 0x261F, 0x3299, 0x24EA, 0x216A,
+ 0x216B, 0xFF10, 0xFF10, 0x3000, 0x2581, 0x2582, 0x2583, 0x2584, 0x2585,
+ 0x2586, 0x2587, 0x2588, 0x258F, 0x258E, 0x258D, 0x258C, 0x258B, 0x258A,
+ 0x2589, 0x2594, 0x2595, 0x256D, 0x256E, 0x2570, 0x256F, 0x2550, 0x255E,
+ 0x256A, 0x2561, 0x25E2, 0x25E3, 0x25E5, 0x25E4, 0x25CF, 0x0ED0, 0x2571,
+ 0x2572, 0x2573, 0x304B, 0x3051, 0x9022, 0x8FBB, 0xFF0C, 0x00B0, 0x3013,
+ 0x309C, 0x309B, 0x02CF, 0xFF0E, 0x2018, 0x2019, 0x201C, 0x201D, 0x201C,
+ 0x201E, 0x2018, 0x201A, 0x02BA, 0x51DC, 0x7199, 0x2776, 0x2777, 0x2778,
+ 0x2779, 0x277A, 0x277B, 0x277C, 0x277D, 0x277E, 0x0000, 0x0000, 0x0000,
+ 0x217A, 0x217B, 0x0000, 0x0000, 0x0000, 0x217F, 0x210A, 0x2109, 0x0000,
+ 0x0000, 0x3004, 0x21C6, 0x21C4, 0x21C5, 0x0000, 0x30F7, 0x30F8, 0x30F9,
+ 0x30FA, 0x5927, 0x5C0F, 0x329D, 0x63A7, 0x0000, 0x0000, 0x337B, 0x337F,
+ 0x0000, 0x0000, 0x3333, 0x334E, 0x3322, 0x3316, 0x3305, 0x3305, 0x3305,
+ 0x3333, 0x334E, 0x334E, 0x334E, 0x3303, 0x3318, 0x3315, 0x3339, 0x3339,
+ 0x3339, 0x3357, 0x3342, 0x3342, 0x3342, 0x3323, 0x333B, 0x3300, 0x331E,
+ 0x331E, 0x331E, 0x332A, 0x332A, 0x332A, 0x3347, 0x3331, 0x7E8A, 0x891C,
+ 0x9348, 0x9288, 0x84DC, 0x4FC9, 0x70BB, 0x6631, 0x68C8, 0x92F9, 0x66FB,
+ 0x5F45, 0x4E28, 0x4EE1, 0x4EFC, 0x4F00, 0x4F03, 0x4F39, 0x4F56, 0x4F92,
+ 0x4F8A, 0x4F9A, 0x4F94, 0x4FCD, 0x5040, 0x5022, 0x4FFF, 0x501E, 0x5046,
+ 0x5070, 0x5042, 0x5094, 0x50F4, 0x50D8, 0x514A, 0x5164, 0x519D, 0x51BE,
+ 0x51EC, 0x5215, 0x529C, 0x52A6, 0x52C0, 0x52DB, 0x5300, 0x5307, 0x5324,
+ 0x5372, 0x5393, 0x53B2, 0x53DD, 0xFA0E, 0x549C, 0x548A, 0x54A9, 0x54FF,
+ 0x5586, 0x5759, 0x5765, 0x57AC, 0x57C8, 0x57C7, 0xFA0F, 0xFA10, 0x589E,
+ 0x58B2, 0x590B, 0x5953, 0x595B, 0x595D, 0x5963, 0x59A4, 0x59BA, 0x5B56,
+ 0x5BC0, 0x752F, 0x5BD8, 0x5BEC, 0x5C1E, 0x5CA6, 0x5CBA, 0x5CF5, 0x5D27,
+ 0x5D53, 0xFA11, 0x5D42, 0x5D6D, 0x5DB8, 0x5DB9, 0x5DD0, 0x5F21, 0x5F34,
+ 0x5F67, 0x5FB7, 0x5FDE, 0x605D, 0x6085, 0x608A, 0x60DE, 0x60D5, 0x6120,
+ 0x60F2, 0x6111, 0x6137, 0x6130, 0x6198, 0x6213, 0x62A6, 0x63F5, 0x6460,
+ 0x649D, 0x64CE, 0x654E, 0x6600, 0x6615, 0x6609, 0x662E, 0x661E, 0x6624,
+ 0x6665, 0x6657, 0x6659, 0xFA12, 0x6673, 0x6699, 0x66A0, 0x66B2, 0x66BF,
+ 0x66FA, 0x670E, 0xF929, 0x6766, 0x67BB, 0x6852, 0x67C0, 0x6801, 0x6844,
+ 0x68CF, 0xFA13, 0x6968, 0xFA14, 0x6998, 0x69E2, 0x6A30, 0x6A6B, 0x6A46,
+ 0x6A73, 0x6A7E, 0x6AE2, 0x6AE4, 0x6BD6, 0x6C3F, 0x6C5C, 0x6C86, 0x6C6F,
+ 0x6CDA, 0x6D04, 0x6D87, 0x6D6F, 0x6D96, 0x6DAC, 0x6DCF, 0x6DF8, 0x6DF2,
+ 0x6DFC, 0x6E39, 0x6E5C, 0x6E27, 0x6E3C, 0x6EBF, 0x6F88, 0x6FB5, 0x6FF5,
+ 0x7005, 0x7007, 0x7028, 0x7085, 0x70AB, 0x710F, 0x7104, 0x715C, 0x7146,
+ 0x7147, 0xFA15, 0x71C1, 0x71FE, 0x72B1, 0x72BE, 0x7324, 0xFA16, 0x7377,
+ 0x73BD, 0x73C9, 0x73D6, 0x73E3, 0x73D2, 0x7407, 0x73F5, 0x7426, 0x742A,
+ 0x7429, 0x742E, 0x7462, 0x7489, 0x749F, 0x7501, 0x756F, 0x7682, 0x769C,
+ 0x769E, 0x769B, 0x76A6, 0xFA17, 0x7746, 0x52AF, 0x7821, 0x784E, 0x7864,
+ 0x787A, 0x7930, 0xFA18, 0xFA19, 0xFA1A, 0x7994, 0xFA1B, 0x799B, 0x7AD1,
+ 0x7AE7, 0xFA1C, 0x7AEB, 0x7B9E, 0xFA1D, 0x7D48, 0x7D5C, 0x7DB7, 0x7DA0,
+ 0x7DD6, 0x7E52, 0x7F47, 0x7FA1, 0xFA1E, 0x8301, 0x8362, 0x837F, 0x83C7,
+ 0x83F6, 0x8448, 0x84B4, 0x8553, 0x8559, 0x856B, 0xFA1F, 0x85B0, 0xFA20,
+ 0xFA21, 0x8807, 0x88F5, 0x8A12, 0x8A37, 0x8A79, 0x8AA7, 0x8ABE, 0x8ADF,
+ 0xFA22, 0x8AF6, 0x8B53, 0x8B7F, 0x8CF0, 0x8CF4, 0x8D12, 0x8D76, 0xFA23,
+ 0x8ECF, 0xFA24, 0xFA25, 0x9067, 0x90DE, 0xFA26, 0x9115, 0x9127, 0x91DA,
+ 0x91D7, 0x91DE, 0x91ED, 0x91EE, 0x91E4, 0x91E5, 0x9206, 0x9210, 0x920A,
+ 0x923A, 0x9240, 0x923C, 0x924E, 0x9259, 0x9251, 0x9239, 0x9267, 0x92A7,
+ 0x9277, 0x9278, 0x92E7, 0x92D7, 0x92D9, 0x92D0, 0xFA27, 0x92D5, 0x92E0,
+ 0x92D3, 0x9325, 0x9321, 0x92FB, 0xFA28, 0x931E, 0x92FF, 0x931D, 0x9302,
+ 0x9370, 0x9357, 0x93A4, 0x93C6, 0x93DE, 0x93F8, 0x9431, 0x9445, 0x9448,
+ 0x9592, 0xF9DC, 0xFA29, 0x969D, 0x96AF, 0x9733, 0x973B, 0x9743, 0x974D,
+ 0x974F, 0x9751, 0x9755, 0x9857, 0x9865, 0xFA2A, 0xFA2B, 0x9927, 0xFA2C,
+ 0x999E, 0x9A4E, 0x9AD9, 0x9ADC, 0x9B75, 0x9B72, 0x9B8F, 0x9BB1, 0x9BBB,
+ 0x9C00, 0x9D70, 0x9D6B, 0xFA2D, 0x9E19, 0x9ED1, 0x00AC, 0x005C, 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, 0x00A5, 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, 0x00A6, 0x007D, 0x0303, 0x02BC, 0x005C, 0x02BB, 0x007C, 0x007E,
+ 0x00A1, 0x00A2, 0x00A3, 0x2044, 0x0192, 0x00A7, 0x00A4, 0x201C, 0x00AB,
+ 0x2039, 0x203A, 0xFB01, 0xFB02, 0x2012, 0x2020, 0x2021, 0x00B7, 0x00B6,
+ 0x2022, 0x201A, 0x201E, 0x201D, 0x00BB, 0x2026, 0x2030, 0x00BF, 0x0301,
+ 0x0302, 0x00AF, 0x0306, 0x0307, 0x0308, 0x030A, 0x00B8, 0x030B, 0x0328,
+ 0x030C, 0x0336, 0x00C6, 0x00AA, 0x0141, 0x00D8, 0x0152, 0x00BA, 0x00E6,
+ 0x0131, 0x0142, 0x00F8, 0x0153, 0x00DF, 0x002D, 0x00A9, 0x00AC, 0x00AE,
+ 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B5, 0x00B9, 0x00BC, 0x00BD, 0x00BE,
+ 0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C7, 0x00C8, 0x00C9,
+ 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF, 0x00D0, 0x00D1, 0x00D2,
+ 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7, 0x00D9, 0x00DA, 0x00DB, 0x00DC,
+ 0x00DD, 0x00DE, 0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E7,
+ 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF, 0x00F0,
+ 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x00F7, 0x00F9, 0x00FA,
+ 0x00FB, 0x00FC, 0x00FD, 0x00FE, 0x00FF, 0x0160, 0x0178, 0x017D, 0x0305,
+ 0x0161, 0x2122, 0x017E, 0x0030, 0x2002, 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, 0x00A5, 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, 0x203E,
+ 0xFF40, 0x2032, 0x00A8, 0x2036, 0x00C4, 0x00F9, 0x00E9, 0x00ED, 0x00DF,
+ 0x00E7, 0x00C7, 0x00D1, 0x00F1, 0x00A2, 0x00A3, 0x00F3, 0x00FA, 0x00A1,
+ 0x00BF, 0x00BD, 0x00D6, 0x00DC, 0x00E4, 0x00EB, 0x00EF, 0x00F6, 0x00DC,
+ 0x00E2, 0x00EA, 0x00EE, 0x00F4, 0x00FC, 0x00E0, 0x00E9, 0x00E1, 0x007E,
+ 0x0030, 0x00AC, 0x005C, 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, 0x30F0, 0x30F1, 0x30EE, 0x30AB, 0x30B1,
+ 0x30F4, 0x30AC, 0x30AE, 0x30B0, 0x30B2, 0x30B4, 0x30B6, 0x30B8, 0x30BA,
+ 0x30BC, 0x30BE, 0x30C0, 0x30C2, 0x30C5, 0x30C7, 0x30C9, 0x30D0, 0x30D1,
+ 0x30D3, 0x30D4, 0x30D6, 0x30D7, 0x30D9, 0x30DA, 0x30DC, 0x30DD, 0xFF60,
+ 0x3092, 0x3041, 0x3043, 0x3045, 0x3047, 0x3049, 0x3083, 0x3085, 0x3087,
+ 0x3063, 0x3042, 0x3044, 0x3046, 0x3048, 0x304A, 0x304B, 0x304D, 0x304F,
+ 0x3051, 0x3053, 0x3055, 0x3057, 0x3059, 0x305B, 0x305D, 0x305F, 0x3061,
+ 0x3064, 0x3066, 0x3068, 0x306A, 0x306B, 0x306C, 0x306D, 0x306E, 0x306F,
+ 0x3072, 0x3075, 0x3078, 0x307B, 0x307E, 0x307F, 0x3080, 0x3081, 0x3082,
+ 0x3084, 0x3086, 0x3088, 0x3089, 0x308A, 0x308B, 0x308C, 0x308D, 0x308F,
+ 0x3093, 0x3090, 0x3091, 0x308E, 0x304C, 0x304E, 0x3050, 0x3052, 0x3054,
+ 0x3056, 0x3068, 0x305A, 0x305C, 0x305E, 0x3060, 0x3062, 0x3065, 0x3067,
+ 0x3069, 0x3070, 0x3071, 0x3073, 0x3074, 0x3076, 0x3077, 0x3079, 0x307A,
+ 0x307C, 0x307D, 0x301D, 0x301E, 0x005B, 0x005D, 0x3008, 0x3009, 0x300A,
+ 0x300B, 0x300E, 0x300F, 0x3010, 0x3011, 0x2012, 0xFF60, 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, 0x25B2, 0x20AC, 0x2126, 0x2032, 0x2033, 0xFB00, 0xFB03,
+ 0xFB04, 0x0101, 0x012B, 0x016B, 0x0113, 0x014D, 0x0100, 0x012A, 0x016A,
+ 0x0112, 0x014C, 0x215B, 0x215C, 0x215D, 0x215E, 0x2153, 0x2154, 0x2070,
+ 0x2074, 0x2075, 0x2076, 0x2077, 0x2078, 0x2079, 0x2080, 0x2081, 0x2082,
+ 0x2083, 0x2084, 0x2085, 0x2086, 0x2087, 0x2088, 0x2089, 0x01CD, 0x011A,
+ 0x0000, 0x1EBC, 0x01CF, 0x0000, 0x0128, 0x01D1, 0x0000, 0x01D3, 0x016E,
+ 0x0168, 0x01CE, 0x011B, 0x0000, 0x1EBD, 0x01D0, 0x0000, 0x0129, 0x01D2,
+ 0x0000, 0x01D4, 0x016F, 0x0169, 0x0251, 0x0251, 0x0251, 0x01FD, 0x00E6,
+ 0x0254, 0x0254, 0x0254, 0x0259, 0x0259, 0x0259, 0x025A, 0x025A, 0x025A,
+ 0x025B, 0x025B, 0x025B, 0x006A, 0x014B, 0x0275, 0x028C, 0x028C, 0x028C,
+ 0x0292, 0x0283, 0x02D0, 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,
+ 0x00A5, 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, 0x00A6, 0x007D, 0x0303, 0x02BC,
+ 0x005C, 0x02BB, 0x007C, 0x007E, 0x00A1, 0x00A2, 0x00A3, 0x2044, 0x0192,
+ 0x00A7, 0x00A4, 0x201C, 0x00AB, 0x2039, 0x203A, 0xFB01, 0xFB02, 0x2012,
+ 0x2020, 0x2021, 0x00B7, 0x00B6, 0x2022, 0x201A, 0x201E, 0x201D, 0x00BB,
+ 0x2026, 0x2030, 0x00BF, 0x0301, 0x0302, 0x00AF, 0x0306, 0x0307, 0x0308,
+ 0x030A, 0x00B8, 0x030B, 0x0328, 0x030C, 0x0336, 0x00C6, 0x00AA, 0x0141,
+ 0x00D8, 0x0152, 0x00BA, 0x00E6, 0x0131, 0x0142, 0x00F8, 0x0153, 0x00DF,
+ 0x002D, 0x00A9, 0x00AC, 0x00AE, 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B5,
+ 0x00B9, 0x00BC, 0x00BD, 0x00BE, 0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4,
+ 0x00C5, 0x00C7, 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE,
+ 0x00CF, 0x00D0, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7,
+ 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x00DD, 0x00DE, 0x00E0, 0x00E1, 0x00E2,
+ 0x00E3, 0x00E4, 0x00E5, 0x00E7, 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC,
+ 0x00ED, 0x00EE, 0x00EF, 0x00F0, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5,
+ 0x00F6, 0x00F7, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x00FD, 0x00FE, 0x00FF,
+ 0x0160, 0x0178, 0x017D, 0x0305, 0x0161, 0x2122, 0x017E, 0x0030, 0x20AC,
+ 0x2126, 0x2032, 0x2033, 0xFB00, 0xFB03, 0xFB04, 0x0101, 0x012B, 0x016B,
+ 0x0113, 0x014D, 0x0100, 0x012A, 0x016A, 0x0112, 0x014C, 0x215B, 0x215C,
+ 0x215D, 0x215E, 0x2153, 0x2154, 0x2070, 0x2074, 0x2075, 0x2076, 0x2077,
+ 0x2078, 0x2079, 0x2080, 0x2081, 0x2082, 0x2083, 0x2084, 0x2085, 0x2086,
+ 0x2087, 0x2088, 0x2089, 0x01CD, 0x011A, 0x0000, 0x1EBC, 0x01CF, 0x0000,
+ 0x0128, 0x01D1, 0x0000, 0x01D3, 0x016E, 0x0168, 0x01CE, 0x011B, 0x0000,
+ 0x1EBD, 0x01D0, 0x0000, 0x0129, 0x01D2, 0x0000, 0x01D4, 0x016F, 0x0169,
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038,
+ 0x0039, 0x0336, 0x002D, 0x003D, 0x002C, 0x0028, 0x0029, 0x002E, 0x002F,
+ 0x003A, 0x003B, 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036,
+ 0x0037, 0x0038, 0x0039, 0x0336, 0x002D, 0x003D, 0x002C, 0x0028, 0x0029,
+ 0x002E, 0x002F, 0x003A, 0x003B, 0x00B7, 0x20AC, 0x0000, 0x2153, 0x2154,
+ 0x00BE, 0x2155, 0x2156, 0x2157, 0x2158, 0x2159, 0x215A, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x215B, 0x215C, 0x215D, 0x215E, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0030,
+ 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039,
+ 0x0030, 0x2163, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x2170, 0x2171, 0x2172, 0x2173, 0x2174, 0x2175, 0x2176,
+ 0x2177, 0x2178, 0x2179, 0x217A, 0x217B, 0x0000, 0x0000, 0x0000, 0x2160,
+ 0x2161, 0x2162, 0x2163, 0x2164, 0x2165, 0x2166, 0x2167, 0x2168, 0x2169,
+ 0x216A, 0x216B, 0x0000, 0x0000, 0x0000, 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, 0x3042, 0x3044, 0x3046, 0x3048, 0x304A,
+ 0x304B, 0x304D, 0x304F, 0x3051, 0x3053, 0x3055, 0x3057, 0x3059, 0x305B,
+ 0x305D, 0x305F, 0x3061, 0x3064, 0x3066, 0x3068, 0x306A, 0x306B, 0x306C,
+ 0x306D, 0x306E, 0x306F, 0x3072, 0x3075, 0x3078, 0x307B, 0x307E, 0x307F,
+ 0x3080, 0x3081, 0x3082, 0x3084, 0x3086, 0x3088, 0x3089, 0x308A, 0x308B,
+ 0x308C, 0x308D, 0x308F, 0x3090, 0x3091, 0x3092, 0x3093, 0x30A2, 0x30A4,
+ 0x30A6, 0x30A8, 0x30AA, 0x30AB, 0x30AD, 0x30AF, 0x30B1, 0x30B3, 0x30B5,
+ 0x30B7, 0x30B9, 0x30BB, 0x30BD, 0x30BF, 0x30C1, 0x30C4, 0x30C6, 0x30C8,
+ 0x30CA, 0x30CB, 0x30CC, 0x30CD, 0x30CE, 0x30CF, 0x30D2, 0x30D5, 0x30D8,
+ 0x30DB, 0x30DE, 0x30DF, 0x30E0, 0x30E1, 0x30E2, 0x30E4, 0x30E6, 0x30E8,
+ 0x30E9, 0x30EA, 0x30EB, 0x30EC, 0x30ED, 0x30EF, 0x30F0, 0x30F1, 0x30F2,
+ 0x30F3, 0x3220, 0x3221, 0x3222, 0x3223, 0x3224, 0x3225, 0x3226, 0x3227,
+ 0x3228, 0x3229, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x55B6, 0x5408, 0x6CEB, 0x554F, 0x7B54, 0x4F8B,
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038,
+ 0x0039, 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x3063, 0x624D, 0x3007, 0x4E00, 0x4E8C, 0x4E09, 0x56DB,
+ 0x4E94, 0x516D, 0x4E03, 0x516B, 0x4E5D, 0x5341, 0x3007, 0x4E00, 0x4E8C,
+ 0x4E09, 0x56DB, 0x4E94, 0x516D, 0x4E03, 0x516B, 0x4E5D, 0x5341, 0x3007,
+ 0x4E00, 0x4E8C, 0x4E09, 0x56DB, 0x4E94, 0x516D, 0x4E03, 0x516B, 0x4E5D,
+ 0x3064, 0x624D, 0x4E00, 0x4E8C, 0x4E09, 0x56DB, 0x4E94, 0x516D, 0x4E03,
+ 0x516B, 0x4E5D, 0x5341, 0x3007, 0x4E00, 0x4E8C, 0x4E09, 0x56DB, 0x4E94,
+ 0x516D, 0x4E03, 0x516B, 0x4E5D, 0x5341, 0x30B3, 0x3063, 0x30C3, 0x30A9,
+ 0x0000, 0x0000, 0x2460, 0x2461, 0x2462, 0x2463, 0x2464, 0x2465, 0x2466,
+ 0x2467, 0x2468, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 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, 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, 0x3042, 0x3044, 0x3046,
+ 0x3048, 0x304A, 0x304B, 0x304D, 0x304F, 0x3051, 0x3053, 0x3055, 0x3057,
+ 0x3059, 0x305B, 0x305D, 0x305F, 0x3061, 0x3064, 0x3066, 0x3068, 0x306A,
+ 0x306B, 0x306C, 0x306D, 0x306E, 0x306F, 0x3072, 0x3075, 0x3078, 0x307B,
+ 0x307E, 0x307F, 0x3080, 0x3081, 0x3082, 0x3084, 0x3086, 0x3088, 0x3089,
+ 0x308A, 0x308B, 0x308C, 0x308D, 0x308F, 0x3090, 0x3091, 0x3092, 0x3093,
+ 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, 0x30F3, 0x3280, 0x3281, 0x3282, 0x3283, 0x3284, 0x3285,
+ 0x3286, 0x3287, 0x3288, 0x3289, 0x3290, 0x328A, 0x328B, 0x328C, 0x328D,
+ 0x328E, 0x328F, 0x8ABF, 0x329F, 0x526F, 0x6E1B, 0x6A19, 0x6B20, 0x57FA,
+ 0x7981, 0x32A0, 0x32A1, 0x329B, 0x329A, 0x32A3, 0x32A2, 0x3297, 0x51FA,
+ 0x329C, 0x3295, 0x6E08, 0x5897, 0x554F, 0x7B54, 0x4F8B, 0x96FB, 0x25CC,
+ 0x0030, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 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, 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, 0x3042, 0x3044, 0x3046, 0x3048, 0x304A, 0x304B, 0x304D, 0x304F,
+ 0x3051, 0x3053, 0x3055, 0x3057, 0x3059, 0x305B, 0x305D, 0x305F, 0x3061,
+ 0x3064, 0x3066, 0x3068, 0x306A, 0x306B, 0x306C, 0x306D, 0x306E, 0x306F,
+ 0x3072, 0x3075, 0x3078, 0x307B, 0x307E, 0x307F, 0x3080, 0x3081, 0x3082,
+ 0x3084, 0x3086, 0x3088, 0x3089, 0x308A, 0x308B, 0x308C, 0x308D, 0x308F,
+ 0x3090, 0x3091, 0x3092, 0x3093, 0x30A2, 0x30A4, 0x30A6, 0x30A8, 0x30AA,
+ 0x30AB, 0x30AD, 0x30AF, 0x30B1, 0x30B3, 0x30B5, 0x30B7, 0x30B9, 0x30BB,
+ 0x30BD, 0x30BF, 0x30C1, 0x30C4, 0x30C6, 0x30C8, 0x30CA, 0x30CB, 0x30CC,
+ 0x30CD, 0x30CE, 0x30CF, 0x30D2, 0x30D5, 0x30D8, 0x30DB, 0x30DE, 0x30DF,
+ 0x30E0, 0x30E1, 0x30E2, 0x30E4, 0x30E6, 0x30E8, 0x30E9, 0x30EA, 0x30EB,
+ 0x30EC, 0x30ED, 0x30EF, 0x30F0, 0x30F1, 0x30F2, 0x30F3, 0x65E5, 0x6708,
+ 0x706B, 0x6C34, 0x6728, 0x91D1, 0x571F, 0x554F, 0x7B54, 0x4F8B, 0x25CF,
+ 0x0030, 0x0000, 0x0031, 0x0000, 0x0032, 0x0000, 0x0033, 0x0000, 0x0034,
+ 0x0000, 0x0035, 0x0000, 0x0036, 0x0000, 0x0037, 0x0000, 0x0038, 0x0000,
+ 0x0039, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 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, 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, 0x3042, 0x3044, 0x3046, 0x3048, 0x304A, 0x304B, 0x304D, 0x304F,
+ 0x3051, 0x3053, 0x3055, 0x3057, 0x3059, 0x305B, 0x305D, 0x305F, 0x3061,
+ 0x3064, 0x3066, 0x3068, 0x306A, 0x306B, 0x306C, 0x306D, 0x306E, 0x306F,
+ 0x3072, 0x3075, 0x3078, 0x307B, 0x307E, 0x307F, 0x3080, 0x3081, 0x3082,
+ 0x3084, 0x3086, 0x3088, 0x3089, 0x308A, 0x308B, 0x308C, 0x308D, 0x308F,
+ 0x3090, 0x3091, 0x3092, 0x3093, 0x30A2, 0x30A4, 0x30A6, 0x30A8, 0x30AA,
+ 0x30AB, 0x30AD, 0x30AF, 0x30B1, 0x30B3, 0x30B5, 0x30B7, 0x30B9, 0x30BB,
+ 0x30BD, 0x30BF, 0x30C1, 0x30C4, 0x30C6, 0x30C8, 0x30CA, 0x30CB, 0x30CC,
+ 0x30CD, 0x30CE, 0x30CF, 0x30D2, 0x30D5, 0x30D8, 0x30DB, 0x30DE, 0x30DF,
+ 0x30E0, 0x30E1, 0x30E2, 0x30E4, 0x30E6, 0x30E8, 0x30E9, 0x30EA, 0x30EB,
+ 0x30EC, 0x30ED, 0x30EF, 0x30F0, 0x30F1, 0x30F2, 0x30F3, 0x65E5, 0x6708,
+ 0x706B, 0x6C34, 0x6728, 0x91D1, 0x571F, 0x8CA0, 0x52DD, 0x554F, 0x7B54,
+ 0x4F8B, 0x25A1, 0x25A1, 0x0030, 0x0000, 0x0031, 0x0000, 0x0032, 0x0000,
+ 0x0033, 0x0000, 0x0034, 0x0000, 0x0035, 0x0000, 0x0036, 0x0000, 0x0037,
+ 0x0000, 0x0038, 0x0000, 0x0039, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 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, 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, 0x3042, 0x3044, 0x3046, 0x3048, 0x304A,
+ 0x304B, 0x304D, 0x304F, 0x3051, 0x3053, 0x3055, 0x3057, 0x3059, 0x305B,
+ 0x305D, 0x305F, 0x3061, 0x3064, 0x3066, 0x3068, 0x306A, 0x306B, 0x306C,
+ 0x306D, 0x306E, 0x306F, 0x3072, 0x3075, 0x3078, 0x307B, 0x307E, 0x307F,
+ 0x3080, 0x3081, 0x3082, 0x3084, 0x3086, 0x3088, 0x3089, 0x308A, 0x308B,
+ 0x308C, 0x308D, 0x308F, 0x3090, 0x3091, 0x3092, 0x3093, 0x30A2, 0x30A4,
+ 0x30A6, 0x30A8, 0x30AA, 0x30AB, 0x30AD, 0x30AF, 0x30B1, 0x30B3, 0x30B5,
+ 0x30B7, 0x30B9, 0x30BB, 0x30BD, 0x30BF, 0x30C1, 0x30C4, 0x30C6, 0x30C8,
+ 0x30CA, 0x30CB, 0x30CC, 0x30CD, 0x30CE, 0x30CF, 0x30D2, 0x30D5, 0x30D8,
+ 0x30DB, 0x30DE, 0x30DF, 0x30E0, 0x30E1, 0x30E2, 0x30E4, 0x30E6, 0x30E8,
+ 0x30E9, 0x30EA, 0x30EB, 0x30EC, 0x30ED, 0x30EF, 0x30F0, 0x30F1, 0x30F2,
+ 0x30F3, 0x65E5, 0x6708, 0x706B, 0x6C34, 0x6728, 0x91D1, 0x571F, 0x554F,
+ 0x7B54, 0x4F8B, 0x25A0, 0x0030, 0x0000, 0x0031, 0x0000, 0x0032, 0x0000,
+ 0x0033, 0x0000, 0x0034, 0x0000, 0x0035, 0x0000, 0x0036, 0x0000, 0x0037,
+ 0x0000, 0x0038, 0x0000, 0x0039, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 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, 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, 0x3042, 0x3044, 0x3046, 0x3048, 0x304A,
+ 0x304B, 0x304D, 0x304F, 0x3051, 0x3053, 0x3055, 0x3057, 0x3059, 0x305B,
+ 0x305D, 0x305F, 0x3061, 0x3064, 0x3066, 0x3068, 0x306A, 0x306B, 0x306C,
+ 0x306D, 0x306E, 0x306F, 0x3072, 0x3075, 0x3078, 0x307B, 0x307E, 0x307F,
+ 0x3080, 0x3081, 0x3082, 0x3084, 0x3086, 0x3088, 0x3089, 0x308A, 0x308B,
+ 0x308C, 0x308D, 0x308F, 0x3090, 0x3091, 0x3092, 0x3093, 0x30A2, 0x30A4,
+ 0x30A6, 0x30A8, 0x30AA, 0x30AB, 0x30AD, 0x30AF, 0x30B1, 0x30B3, 0x30B5,
+ 0x30B7, 0x30B9, 0x30BB, 0x30BD, 0x30BF, 0x30C1, 0x30C4, 0x30C6, 0x30C8,
+ 0x30CA, 0x30CB, 0x30CC, 0x30CD, 0x30CE, 0x30CF, 0x30D2, 0x30D5, 0x30D8,
+ 0x30DB, 0x30DE, 0x30DF, 0x30E0, 0x30E1, 0x30E2, 0x30E4, 0x30E6, 0x30E8,
+ 0x30E9, 0x30EA, 0x30EB, 0x30EC, 0x30ED, 0x30EF, 0x30F0, 0x30F1, 0x30F2,
+ 0x30F3, 0x65E5, 0x6708, 0x706B, 0x6C34, 0x6728, 0x91D1, 0x571F, 0x554F,
+ 0x7B54, 0x4F8B, 0x0030, 0x0000, 0x0031, 0x0000, 0x0032, 0x0000, 0x0033,
+ 0x0000, 0x0034, 0x0000, 0x0035, 0x0000, 0x0036, 0x0000, 0x0037, 0x0000,
+ 0x0038, 0x0000, 0x0039, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 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, 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, 0x3042, 0x3044, 0x3046, 0x3048, 0x304A, 0x304B,
+ 0x304D, 0x304F, 0x3051, 0x3053, 0x3055, 0x3057, 0x3059, 0x305B, 0x305D,
+ 0x305F, 0x3061, 0x3064, 0x3066, 0x3068, 0x306A, 0x306B, 0x306C, 0x306D,
+ 0x306E, 0x306F, 0x3072, 0x3075, 0x3078, 0x307B, 0x307E, 0x307F, 0x3080,
+ 0x3081, 0x3082, 0x3084, 0x3086, 0x3088, 0x3089, 0x308A, 0x308B, 0x308C,
+ 0x308D, 0x308F, 0x3090, 0x3091, 0x3092, 0x3093, 0x30A2, 0x30A4, 0x30A6,
+ 0x30A8, 0x30AA, 0x30AB, 0x30AD, 0x30AF, 0x30B1, 0x30B3, 0x30B5, 0x30B7,
+ 0x30B9, 0x30BB, 0x30BD, 0x30BF, 0x30C1, 0x30C4, 0x30C6, 0x30C8, 0x30CA,
+ 0x30CB, 0x30CC, 0x30CD, 0x30CE, 0x30CF, 0x30D2, 0x30D5, 0x30D8, 0x30DB,
+ 0x30DE, 0x30DF, 0x30E0, 0x30E1, 0x30E2, 0x30E4, 0x30E6, 0x30E8, 0x30E9,
+ 0x30EA, 0x30EB, 0x30EC, 0x30ED, 0x30EF, 0x30F0, 0x30F1, 0x30F2, 0x30F3,
+ 0x65E5, 0x6708, 0x706B, 0x6C34, 0x6728, 0x91D1, 0x571F, 0x554F, 0x7B54,
+ 0x4F8B, 0x25A0, 0x33C2, 0x33CD, 0x2116, 0x0000, 0x33D8, 0x33DA, 0x2121,
+ 0x2122, 0x0000, 0x2100, 0x33C2, 0x0000, 0x33C4, 0x2105, 0x3397, 0x3371,
+ 0x3398, 0x2113, 0x338D, 0x339B, 0x3396, 0x0000, 0x0000, 0x33D7, 0x33D8,
+ 0x0000, 0x0000, 0x0000, 0x3301, 0x3302, 0x3304, 0x3306, 0x0000, 0x3308,
+ 0x0000, 0x3307, 0x330A, 0x0000, 0x3309, 0x0000, 0x330B, 0x0000, 0x330C,
+ 0x330E, 0x330F, 0x3310, 0x3311, 0x3312, 0x3313, 0x0000, 0x3317, 0x0000,
+ 0x3319, 0x0000, 0x331A, 0x331B, 0x331C, 0x331D, 0x331F, 0x3320, 0x3321,
+ 0x3324, 0x0000, 0x3325, 0x0000, 0x0000, 0x3328, 0x3329, 0x0000, 0x332D,
+ 0x0000, 0x0000, 0x332E, 0x332F, 0x3330, 0x3332, 0x0000, 0x0000, 0x3334,
+ 0x3335, 0x333C, 0x0000, 0x0000, 0x0000, 0x3337, 0x0000, 0x3338, 0x333A,
+ 0x333D, 0x3341, 0x333E, 0x333F, 0x3340, 0x3343, 0x3344, 0x3345, 0x3346,
+ 0x3348, 0x334B, 0x334C, 0x334F, 0x3350, 0x0000, 0x0000, 0x3352, 0x3354,
+ 0x0000, 0x0000, 0x3353, 0x3355, 0x3356, 0x0000, 0x3301, 0x3302, 0x3304,
+ 0x3306, 0x0000, 0x3308, 0x0000, 0x3307, 0x330A, 0x0000, 0x3309, 0x0000,
+ 0x330B, 0x0000, 0x330C, 0x330E, 0x330F, 0x3310, 0x3311, 0x3312, 0x3313,
+ 0x0000, 0x3317, 0x0000, 0x3319, 0x0000, 0x331A, 0x331B, 0x331C, 0x331D,
+ 0x331F, 0x3320, 0x3321, 0x3324, 0x0000, 0x3325, 0x0000, 0x0000, 0x3328,
+ 0x3329, 0x0000, 0x332D, 0x0000, 0x0000, 0x332E, 0x332F, 0x3330, 0x3332,
+ 0x0000, 0x0000, 0x3334, 0x3335, 0x333C, 0x0000, 0x0000, 0x0000, 0x3337,
+ 0x0000, 0x3338, 0x333A, 0x333D, 0x3341, 0x333E, 0x333F, 0x3340, 0x3343,
+ 0x3344, 0x3345, 0x3346, 0x3348, 0x334B, 0x334C, 0x334F, 0x3350, 0x0000,
+ 0x0000, 0x3352, 0x3354, 0x0000, 0x0000, 0x3353, 0x3355, 0x3356, 0x337E,
+ 0x337D, 0x337C, 0x337B, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x002D, 0x003D, 0x2103, 0x2640, 0x2642, 0x3013,
+ 0x3012, 0x300C, 0x300D, 0x300E, 0x300F, 0x301A, 0x301B, 0x3018, 0x3019,
+ 0xFF08, 0xFF09, 0x301D, 0x301E, 0x2018, 0x2019, 0x201C, 0x201D, 0x0027,
+ 0x0022, 0x0000, 0x2135, 0x03D0, 0x220A, 0x210F, 0x00B5, 0x03C6, 0x03DB,
+ 0x03D1, 0xFFFD, 0x2668, 0x2669, 0x266C, 0xFF1A, 0x00A9, 0x00A9, 0x00AE,
+ 0x00AE, 0x303B, 0x303B, 0x3033, 0x3034, 0x3035, 0x203C, 0x2049, 0x0021,
+ 0x203C, 0x2049, 0x244A, 0x0000, 0x2213, 0x2260, 0x2243, 0x2272, 0x2273,
+ 0x300C, 0x300D, 0x300E, 0x300F, 0x301A, 0x301B, 0x3018, 0x3019, 0xFF5F,
+ 0xFF60, 0x300C, 0x300D, 0x300E, 0x300F, 0x301A, 0x301B, 0x3018, 0x3019,
+ 0xFF5F, 0xFF60, 0x239B, 0x239D, 0x239E, 0x23A0, 0x239D, 0x239B, 0x23A0,
+ 0x239E, 0x23A1, 0x23A3, 0x23A4, 0x23A6, 0x23A3, 0x23A1, 0x23A6, 0x23A4,
+ 0x23A1, 0x23A3, 0x23A4, 0x23A6, 0x23A3, 0x23A1, 0x23A6, 0x23A4, 0xFF5C,
+ 0x2015, 0x301D, 0x301E, 0x2018, 0x2019, 0x2018, 0x2019, 0x2702, 0x2702,
+ 0x2702, 0x2702, 0x303D, 0x3012, 0x309F, 0x534D, 0x2207, 0x2205, 0x22A0,
+ 0x2296, 0x2298, 0x2295, 0x2297, 0x229E, 0x2295, 0x0021, 0x25B3, 0x25C0,
+ 0x25B6, 0x21E6, 0x21E8, 0x21E7, 0x21E9, 0x21D0, 0x2194, 0x2198, 0x2199,
+ 0x2196, 0x2197, 0x21CC, 0x21C6, 0x21C4, 0x21C5, 0x2190, 0x2192, 0x2191,
+ 0x2193, 0x2194, 0x2195, 0x2504, 0x2506, 0x3030, 0x2307, 0x3030, 0x2307,
+ 0x3030, 0x2307, 0x3030, 0x2307, 0x3030, 0x2307, 0x2740, 0x273F, 0x25A1,
+ 0x25A0, 0x25A1, 0x25A1, 0x25A1, 0x25A1, 0x25A1, 0x25AB, 0x25A0, 0x25AA,
+ 0x271A, 0x271A, 0x25C7, 0x25C6, 0x25C7, 0x25C7, 0x25C7, 0x25C7, 0x25C7,
+ 0x25C6, 0x25C6, 0x25CE, 0x25C9, 0x25CB, 0x25E6, 0x25CF, 0x2022, 0x2756,
+ 0x2756, 0x2756, 0x2756, 0x3008, 0x3009, 0x3008, 0x3009, 0x300A, 0x300B,
+ 0x300A, 0x300B, 0x3053, 0x3053, 0x30B3, 0x30B3, 0x309D, 0x309E, 0x3041,
+ 0x3042, 0x3043, 0x3044, 0x3045, 0x3046, 0x3047, 0x3048, 0x3049, 0x304A,
+ 0x304B, 0x304B, 0x304C, 0x304D, 0x304E, 0x304F, 0x3050, 0x3051, 0x3051,
+ 0x3052, 0x3053, 0x3053, 0x3054, 0x3055, 0x3056, 0x3057, 0x3058, 0x3059,
+ 0x305A, 0x305B, 0x305C, 0x305D, 0x305E, 0x305F, 0x3060, 0x3061, 0x3062,
+ 0x3063, 0x3064, 0x3065, 0x3066, 0x3067, 0x3068, 0x3069, 0x306A, 0x306B,
+ 0x306C, 0x306D, 0x306E, 0x306F, 0x3070, 0x3071, 0x3072, 0x3073, 0x3074,
+ 0x3075, 0x3076, 0x3077, 0x3078, 0x3079, 0x307A, 0x307B, 0x307C, 0x307D,
+ 0x307E, 0x307F, 0x3080, 0x3081, 0x3082, 0x3083, 0x3084, 0x3085, 0x3086,
+ 0x3087, 0x3088, 0x3089, 0x308A, 0x308B, 0x308C, 0x308D, 0x308E, 0x308F,
+ 0x3090, 0x3091, 0x3092, 0x3093, 0x3094, 0x30FD, 0x30FE, 0x30FC, 0x30A1,
+ 0x30A2, 0x30A3, 0x30A4, 0x30A5, 0x30A6, 0x30A7, 0x30A8, 0x30A9, 0x30AA,
+ 0x30F5, 0x30AB, 0x30AC, 0x30AD, 0x30AE, 0x30AF, 0x30B0, 0x30F6, 0x30B1,
+ 0x30B2, 0x30B3, 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, 0x30F7, 0x30F8, 0x30F9, 0x30FA,
+ 0x309D, 0x309E, 0x3041, 0x3042, 0x3043, 0x3044, 0x3045, 0x3046, 0x3047,
+ 0x3048, 0x3049, 0x304A, 0x304B, 0x304B, 0x304C, 0x304D, 0x304E, 0x304F,
+ 0x3050, 0x3051, 0x3051, 0x3052, 0x3053, 0x3053, 0x3054, 0x3055, 0x3056,
+ 0x3057, 0x3058, 0x3059, 0x305A, 0x305B, 0x305C, 0x305D, 0x305E, 0x305F,
+ 0x3060, 0x3061, 0x3062, 0x3063, 0x3064, 0x3065, 0x3066, 0x3067, 0x3068,
+ 0x3069, 0x306A, 0x306B, 0x306C, 0x306D, 0x306E, 0x306F, 0x3070, 0x3071,
+ 0x3072, 0x3073, 0x3074, 0x3075, 0x3076, 0x3077, 0x3078, 0x3079, 0x307A,
+ 0x307B, 0x307C, 0x307D, 0x307E, 0x307F, 0x3080, 0x3081, 0x3082, 0x3083,
+ 0x3084, 0x3085, 0x3086, 0x3087, 0x3088, 0x3089, 0x308A, 0x308B, 0x308C,
+ 0x308D, 0x308E, 0x308F, 0x3090, 0x3091, 0x3092, 0x3093, 0x3094, 0x30FD,
+ 0x30FE, 0x30FC, 0x30A1, 0x30A2, 0x30A3, 0x30A4, 0x30A5, 0x30A6, 0x30A7,
+ 0x30A8, 0x30A9, 0x30AA, 0x30F5, 0x30AB, 0x30AC, 0x30AD, 0x30AE, 0x30AF,
+ 0x30B0, 0x30F6, 0x30B1, 0x30B2, 0x30B3, 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, 0x30F7,
+ 0x30F8, 0x30F9, 0x30FA, 0x3001, 0x3002, 0x30FB, 0xFF0A, 0x203B, 0x25CB,
+ 0x25CE, 0x25C9, 0x25B3, 0x25B2, 0x30FD, 0x30FE, 0x309D, 0x309E, 0xFF08,
+ 0xFF09, 0x3014, 0x3015, 0xFF08, 0xFF09, 0x3014, 0x3015, 0x0030, 0x0031,
+ 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x3041,
+ 0x3042, 0x3043, 0x3044, 0x3045, 0x3046, 0x3047, 0x3048, 0x3049, 0x304A,
+ 0x304B, 0x304B, 0x304C, 0x304D, 0x304E, 0x304F, 0x3050, 0x3051, 0x3051,
+ 0x3052, 0x3053, 0x3054, 0x3055, 0x3056, 0x3057, 0x3058, 0x3059, 0x305A,
+ 0x305B, 0x305C, 0x305D, 0x305E, 0x305F, 0x3060, 0x3061, 0x3062, 0x3063,
+ 0x3064, 0x3065, 0x3066, 0x3067, 0x3068, 0x3069, 0x306A, 0x306B, 0x306C,
+ 0x306D, 0x306E, 0x306F, 0x3070, 0x3071, 0x3072, 0x3073, 0x3074, 0x3075,
+ 0x3076, 0x3077, 0x3078, 0x3079, 0x307A, 0x307B, 0x307C, 0x307D, 0x307E,
+ 0x307F, 0x3080, 0x3081, 0x3082, 0x3083, 0x3084, 0x3085, 0x3086, 0x3087,
+ 0x3088, 0x3089, 0x308A, 0x308B, 0x308C, 0x308D, 0x308E, 0x308F, 0x3090,
+ 0x3091, 0x3092, 0x3093, 0x3094, 0x3041, 0x3043, 0x3045, 0x3047, 0x3049,
+ 0x304B, 0x3051, 0x3063, 0x3083, 0x3085, 0x3087, 0x308E, 0x30A1, 0x30A2,
+ 0x30A3, 0x30A4, 0x30A5, 0x30A6, 0x30A7, 0x30A8, 0x30A9, 0x30AA, 0x30AB,
+ 0x30F5, 0x30AC, 0x30AD, 0x30AE, 0x30AF, 0x30B0, 0x30B1, 0x30F6, 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, 0x30A1, 0x30A3, 0x30A5, 0x30A7, 0x30A9, 0x30F5,
+ 0x30F6, 0x30C3, 0x30E3, 0x30E5, 0x30E7, 0x30EE, 0x30FC, 0x30FC, 0x6CE8,
+ 0x20AC, 0x2126, 0x2032, 0x2033, 0xFB00, 0xFB03, 0xFB04, 0x0101, 0x012B,
+ 0x016B, 0x0113, 0x014D, 0x0100, 0x012A, 0x016A, 0x0112, 0x014C, 0x215B,
+ 0x215C, 0x215D, 0x215E, 0x2153, 0x2154, 0x2070, 0x2074, 0x2075, 0x2076,
+ 0x2077, 0x2078, 0x2079, 0x2080, 0x2081, 0x2082, 0x2083, 0x2084, 0x2085,
+ 0x2086, 0x2087, 0x2088, 0x2089, 0x01CD, 0x011A, 0x0000, 0x1EBC, 0x01CF,
+ 0x0000, 0x0128, 0x01D1, 0x0000, 0x01D3, 0x016E, 0x0168, 0x01CE, 0x011B,
+ 0x0000, 0x1EBD, 0x01D0, 0x0000, 0x0129, 0x01D2, 0x0000, 0x01D4, 0x016F,
+ 0x0169, 0x0251, 0x0251, 0x0251, 0x01FD, 0x00E6, 0x0254, 0x0254, 0x0254,
+ 0x0259, 0x0259, 0x0259, 0x025A, 0x025A, 0x025A, 0x025B, 0x025B, 0x025B,
+ 0x006A, 0x014B, 0x0275, 0x028C, 0x028C, 0x028C, 0x0292, 0x0283, 0x02D0,
+ 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, 0x00A5, 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, 0x00A6, 0x007D, 0x0303, 0x02BC, 0x005C, 0x02BB, 0x007C,
+ 0x007E, 0x00A1, 0x00A2, 0x00A3, 0x2044, 0x0192, 0x00A7, 0x00A4, 0x201C,
+ 0x00AB, 0x2039, 0x203A, 0xFB01, 0xFB02, 0x2012, 0x2020, 0x2021, 0x00B7,
+ 0x00B6, 0x2022, 0x201A, 0x201E, 0x201D, 0x00BB, 0x2026, 0x2030, 0x00BF,
+ 0x0301, 0x0302, 0x00AF, 0x0306, 0x0307, 0x0308, 0x030A, 0x00B8, 0x030B,
+ 0x0328, 0x030C, 0x0336, 0x00C6, 0x00AA, 0x0141, 0x00D8, 0x0152, 0x00BA,
+ 0x00E6, 0x0131, 0x0142, 0x00F8, 0x0153, 0x00DF, 0x002D, 0x00A9, 0x00AC,
+ 0x00AE, 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B5, 0x00B9, 0x00BC, 0x00BD,
+ 0x00BE, 0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C7, 0x00C8,
+ 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF, 0x00D0, 0x00D1,
+ 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7, 0x00D9, 0x00DA, 0x00DB,
+ 0x00DC, 0x00DD, 0x00DE, 0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5,
+ 0x00E7, 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF,
+ 0x00F0, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x00F7, 0x00F9,
+ 0x00FA, 0x00FB, 0x00FC, 0x00FD, 0x00FE, 0x00FF, 0x0160, 0x0178, 0x017D,
+ 0x0305, 0x0161, 0x2122, 0x017E, 0x0030, 0x20AC, 0x2126, 0x2032, 0x2033,
+ 0xFB00, 0xFB03, 0xFB04, 0x0101, 0x012B, 0x016B, 0x0113, 0x014D, 0x0100,
+ 0x012A, 0x016A, 0x0112, 0x014C, 0x215B, 0x215C, 0x215D, 0x215E, 0x2153,
+ 0x2154, 0x2070, 0x2074, 0x2075, 0x2076, 0x2077, 0x2078, 0x2079, 0x2080,
+ 0x2081, 0x2082, 0x2083, 0x2084, 0x2085, 0x2086, 0x2087, 0x2088, 0x2089,
+ 0x01CD, 0x011A, 0x0000, 0x1EBC, 0x01CF, 0x0000, 0x0128, 0x01D1, 0x0000,
+ 0x01D3, 0x016E, 0x0168, 0x01CE, 0x011B, 0x0000, 0x1EBD, 0x01D0, 0x0000,
+ 0x0129, 0x01D2, 0x0000, 0x01D4, 0x016F, 0x0169, 0x0030, 0x0031, 0x0032,
+ 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x0336, 0x002D,
+ 0x003D, 0x002C, 0x0028, 0x0029, 0x002E, 0x002F, 0x003A, 0x003B, 0x0030,
+ 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039,
+ 0x0336, 0x002D, 0x003D, 0x002C, 0x0028, 0x0029, 0x002E, 0x002F, 0x003A,
+ 0x003B, 0x00B7, 0x002D, 0x003D, 0x2103, 0x2640, 0x2642, 0x3013, 0x3012,
+ 0x300C, 0x300D, 0x300E, 0x300F, 0x301A, 0x301B, 0x3018, 0x3019, 0xFF08,
+ 0xFF09, 0x301D, 0x301E, 0x2018, 0x2019, 0x201C, 0x201D, 0x0027, 0x0022,
+ 0x9038, 0x8B01, 0x7DE3, 0x9EC3, 0x6EAB, 0x798D, 0x6094, 0x6D77, 0x6168,
+ 0x6982, 0x6E34, 0x8910, 0x6F22, 0x5668, 0x65E2, 0x7948, 0x865B, 0x97FF,
+ 0x52E4, 0x8B39, 0x63ED, 0x64CA, 0x784F, 0x7A40, 0x6BBA, 0x7949, 0x8996,
+ 0x716E, 0x793E, 0x8005, 0x81ED, 0x795D, 0x6691, 0x7F72, 0x6D89, 0x72C0,
+ 0x613C, 0x771E, 0x7BC0, 0x7956, 0x50E7, 0x5C64, 0x5DE2, 0x618E, 0x8D08,
+ 0x537D, 0x5606, 0x8457, 0x5FB5, 0x61F2, 0x93AD, 0x798E, 0x9B2D, 0x7A81,
+ 0x96E3, 0x6885, 0x7E41, 0x6669, 0x5351, 0x7891, 0x8CD3, 0x654F, 0x4FAE,
+ 0x5002, 0x5840, 0x52C9, 0x6B65, 0x58A8, 0x6BCF, 0x514D, 0x623E, 0x7950,
+ 0x6B04, 0x9686, 0x865C, 0x6DDA, 0x985E, 0x66C6, 0x6B77, 0x7DF4, 0x934A,
+ 0x5ECA, 0x9304, 0x6982, 0x51B4, 0x634C, 0x86DB, 0x9089, 0x9022, 0x5049,
+ 0x7DEF, 0x9055, 0x53A9, 0x990C, 0x885B, 0x5EF6, 0x6CBF, 0x925B, 0x7FC1,
+ 0x82BD, 0x96C5, 0x5BB3, 0x6168, 0x6982, 0x6BBB, 0x6562, 0x8CAB, 0x5DCC,
+ 0x9811, 0x5E30, 0x8ECC, 0x7AAE, 0x5747, 0x5091, 0x7A74, 0x5065, 0x5EFA,
+ 0x9237, 0x6A8E, 0x4EA4, 0x516C, 0x66F4, 0x6821, 0x786C, 0x7D5E, 0x8003,
+ 0x8CFC, 0x964D, 0x62F7, 0x7F6A, 0x4F7F, 0x53F2, 0x59C9, 0x8B1D, 0x90AA,
+ 0x53CE, 0x8F2F, 0x67D4, 0x77AC, 0x821C, 0x696F, 0x677E, 0x8A1F, 0x4E08,
+ 0x57F4, 0x690D, 0x8077, 0x89AA, 0x9042, 0x636E, 0x6442, 0x8239, 0x7DCF,
+ 0x8061, 0x50CF, 0x8A95, 0x6065, 0x5146, 0x773A, 0x8074, 0x8DF3, 0x5EAD,
+ 0x5EF7, 0x8247, 0x6843, 0x9003, 0x6D3E, 0x6392, 0x8F29, 0x73ED, 0x9812,
+ 0x60B2, 0x6249, 0x6590, 0x7DCB, 0x8AB9, 0x8CA7, 0x7236, 0x847A, 0x5206,
+ 0x5674, 0x61A4, 0x7C89, 0x7D1B, 0x96F0, 0x853D, 0x4FBF, 0x6367, 0x76C6,
+ 0x685D, 0x8108, 0x8036, 0x7FFC, 0x540F, 0x96A3, 0x9E9F, 0x9E97, 0x806F,
+ 0x807E, 0x6E7E, 0x5085, 0x5193, 0x51DB, 0x5315, 0x5340, 0x96D9, 0x55A9,
+ 0x56C1, 0x570D, 0x58AB, 0x59DA, 0x5A36, 0x5ABE, 0x5D4E, 0x5D87, 0x5DC9,
+ 0x5DD3, 0x5F2D, 0x5F98, 0x60D8, 0x613D, 0x61FE, 0x6268, 0x62CF, 0x651D,
+ 0x640F, 0x64F2, 0x655D, 0x665F, 0x67A9, 0x67E7, 0x696B, 0x6930, 0x69A7,
+ 0x6A44, 0x6A90, 0x6C08, 0x6C13, 0x6E23, 0x6F11, 0x6EFE, 0x6F3E, 0x71FF,
+ 0x73E5, 0x7432, 0x745F, 0x74E0, 0x750C, 0x7672, 0x792A, 0x78D4, 0x79BA,
+ 0x7A19, 0x7A95, 0x7CF2, 0x7D73, 0x7DDD, 0x7E35, 0x7FAE, 0x7FE1, 0x805A,
+ 0x805F, 0x8073, 0x8070, 0x8076, 0x8153, 0x818A, 0x81B5, 0x81CD, 0x83F2,
+ 0x8555, 0x85D5, 0x871A, 0x8836, 0x889E, 0x88D8, 0x88F4, 0x892B, 0x893B,
+ 0x896A, 0x896F, 0x8A1D, 0x8D05, 0x8D0F, 0x9F4E, 0x8E91, 0x8EA1, 0x9052,
+ 0x900E, 0x9130, 0x9156, 0x9158, 0x9165, 0x9173, 0x9172, 0x91A2, 0x91AF,
+ 0x91AA, 0x91B4, 0x91BA, 0x9477, 0x9698, 0x973D, 0x9760, 0x9771, 0x980C,
+ 0x9873, 0x98C3, 0x9A45, 0x9B4D, 0x9B58, 0x9BC6, 0x9BE1, 0x9BF1, 0x9D48,
+ 0x9DCF, 0x9F08, 0x6271, 0x6697, 0x610F, 0x8863, 0x9055, 0x907A, 0x78EF,
+ 0x54E1, 0x2ED7, 0x2EBD, 0x53A9, 0x74DC, 0x904B, 0x990C, 0x885E, 0x92B3,
+ 0x95B1, 0x5EF6, 0x63F4, 0x6CBF, 0x7159, 0x9060, 0x925B, 0x65BC, 0x5F80,
+ 0x7FC1, 0x5378, 0x97F3, 0x5316, 0x82B1, 0x83D3, 0x8CA8, 0x904E, 0x82BD,
+ 0x96C5, 0x9913, 0x5EFB, 0x7070, 0x5BB3, 0x6168, 0x6168, 0x6168, 0x69EA,
+ 0x6982, 0x676E, 0x89D2, 0x9694, 0x5272, 0x8F44, 0x938C, 0x82C5, 0x5BD2,
+ 0x74B0, 0x7DE9, 0x7F36, 0x9084, 0x9592, 0x97D3, 0x8218, 0x5371, 0x559C,
+ 0x3402, 0x3402, 0x5E7E, 0x65E3, 0x671F, 0x6A5F, 0x8D77, 0x98E2, 0x5409,
+ 0x55AB, 0x8650, 0x9006, 0x53CA, 0x5438, 0x6025, 0x7D1A, 0x5DE8, 0x62D2,
+ 0x8DDD, 0x9B5A, 0x9B5A, 0x537F, 0x5F3A, 0x6050, 0x69C1, 0x6A4B, 0x6A4B,
+ 0x9115, 0x97FF, 0x9957, 0x6681, 0x2EA9, 0x8FD1, 0x5036, 0x77E9, 0x5177,
+ 0x865E, 0x7A7A, 0x9047, 0x6ADB, 0x5553, 0x5951, 0x6075, 0x6167, 0x8FCE,
+ 0x5091, 0x6F54, 0x7A74, 0x2EBC, 0x2EBC, 0x517C, 0x5238, 0x61B2, 0x6743,
+ 0x80A9, 0x8B19, 0x9063, 0x539F, 0x8A01, 0x6236, 0x96C7, 0x9867, 0x5433,
+ 0x5A1B, 0x8AA4, 0x5DE5, 0x614C, 0x6285, 0x63A7, 0x69CB, 0x6D69, 0x6E2F,
+ 0x8015, 0x8154, 0x8352, 0x8B1B, 0x8CFC, 0x543F, 0x9177, 0x8170, 0x7511,
+ 0x8FBC, 0x4ECA, 0x9396, 0x5EA7, 0x5F69, 0x63A1, 0x6B72, 0x83DC, 0x51B4,
+ 0x54B2, 0x524A, 0x7522, 0x9910, 0x59FF, 0x59FF, 0x5DFF, 0x8AEE, 0x8AEE,
+ 0x8CC7, 0x8CC7, 0x6B21, 0x6B21, 0x6ECB, 0x73BA, 0x53F1, 0x6368, 0x659C,
+ 0x90AA, 0x52FA, 0x7235, 0x7235, 0x914C, 0x5F31, 0x4E3B, 0x53D7, 0x6388,
+ 0x5468, 0x7D42, 0x7FD2, 0x8846, 0x9031, 0x4F4F, 0x8853, 0x8FF0, 0x5DE1,
+ 0x9075, 0x9075, 0x6240, 0x66F8, 0x5973, 0x52DD, 0x5546, 0x5BB5, 0x5C06,
+ 0x2E8C, 0x2E8D, 0x5C19, 0x6D88, 0x785D, 0x8096, 0x4E08, 0x5B82, 0x57CE,
+ 0x60C5, 0x57F4, 0x98FE, 0x690D, 0x6B96, 0x98DF, 0x98E0, 0x2EDE, 0x378D,
+ 0x4FB5, 0x2E97, 0x6D78, 0x771F, 0x9032, 0x4EBB, 0x4EBA, 0x5203, 0x5C0B,
+ 0x8A0A, 0x8A0A, 0x8FC5, 0x8870, 0x9042, 0x351F, 0x52E2, 0x6210, 0x76DB,
+ 0x8056, 0x8980, 0x8AA0, 0x8ACB, 0x975C, 0x975C, 0x7A05, 0x8106, 0x96BB,
+ 0x7C4D, 0x7BC0, 0x8AAA, 0x96EA, 0x7D76, 0x6247, 0x6F98, 0x7FA1, 0x8239,
+ 0x9078, 0x9077, 0x524D, 0x5168, 0x6383, 0x63F7, 0x7626, 0x8D70, 0x9001,
+ 0x906D, 0x9020, 0x2ECA, 0x901F, 0x8CCA, 0x5C0A, 0x5C0A, 0x59A5, 0x6CF0,
+ 0x9000, 0x902E, 0x968A, 0x9BDB, 0x5927, 0x3427, 0x7027, 0x9054, 0x812B,
+ 0x4E39, 0x6B4E, 0x70AD, 0x8A95, 0x6696, 0x5024, 0x7F6E, 0x7BC9, 0x2EAE,
+ 0x7B51, 0x9010, 0x67F1, 0x6CE8, 0x99D0, 0x5F6B, 0x5FB5, 0x61F2, 0x671D,
+ 0x6F6E, 0x8ABF, 0x76F4, 0x6715, 0x6715, 0x589C, 0x8FFD, 0x901A, 0x576A,
+ 0x91E3, 0x5448, 0x5E1D, 0x7A0B, 0x7684, 0x9069, 0x8FED, 0x6DFB, 0x514E,
+ 0x9014, 0x783A, 0x5721, 0x571F, 0x51AC, 0x5510, 0x7CD6, 0x85E4, 0x8B04,
+ 0x9003, 0x900F, 0x9A30, 0x5C0E, 0x9053, 0x5451, 0x3B88, 0x5167, 0x8089,
+ 0x4E73, 0x5FCD, 0x8A8D, 0x5BE7, 0x7D0D, 0x8987, 0x6D3E, 0x80BA, 0x535A,
+ 0x8584, 0x8FEB, 0x7E1B, 0x8087, 0x4E37, 0x6F51, 0x91B1, 0x4F34, 0x5224,
+ 0x534A, 0x5E06, 0x7554, 0x6669, 0x8543, 0x907F, 0x5FAE, 0x9F3B, 0x5339,
+ 0x2EAA, 0x5F65, 0x59EC, 0x59EB, 0x8A55, 0x5E99, 0x75C5, 0x5A66, 0x6577,
+ 0x6D6E, 0x8CA0, 0x8CA0, 0x670D, 0x8986, 0x4E19, 0x5E63, 0x5E73, 0x5F0A,
+ 0x8511, 0x504F, 0x7DE8, 0x8FD4, 0x904D, 0x7C3F, 0x5305, 0x5D29, 0x62B1,
+ 0x670B, 0x7832, 0x7E2B, 0x80DE, 0x840C, 0x90A6, 0x90A6, 0x98FD, 0x9D6C,
+ 0x4EA1, 0x5E3D, 0x5FD8, 0x5FD9, 0x623F, 0x671B, 0x671B, 0x5192, 0x6469,
+ 0x7FFB, 0x51E1, 0x78E8, 0x9B54, 0x2FC7, 0x69D9, 0x685D, 0x4FE3, 0x53C8,
+ 0x7E6D, 0x9EBF, 0x8108, 0x660E, 0x76DF, 0x8FF7, 0x5984, 0x52D0, 0x76F2,
+ 0x8017, 0x623E, 0x7D0B, 0x9580, 0x7D04, 0x8E8D, 0x687A, 0x687A, 0x6801,
+ 0x6109, 0x8AED, 0x8F38, 0x52C7, 0x6709, 0x7336, 0x7336, 0x7337, 0x88D5,
+ 0x904A, 0x66DC, 0x2EB7, 0x8981, 0x990A, 0x7FCC, 0x7FFC, 0x8EB6, 0x862D,
+ 0x7387, 0x9F8D, 0x9F8D, 0x65C5, 0x6881, 0x71D0, 0x96A3, 0x9C57, 0x9E9F,
+ 0x7C7B, 0x5EC9, 0x6190, 0x9023, 0x6717, 0x8002, 0x8107, 0x50CA, 0x511A,
+ 0x5154, 0x5195, 0x2E87, 0x528D, 0x52D7, 0x52F9, 0x5349, 0x353E, 0x53DF,
+ 0x66FC, 0x5533, 0x55E4, 0x5455, 0x56C0, 0x5939, 0x5A1C, 0x5AC2, 0x5B73,
+ 0x5BC3, 0x5C14, 0x37E2, 0x5CE6, 0x5E54, 0x4E48, 0x5EE3, 0x6097, 0x62D4,
+ 0x62CC, 0x641C, 0x63C6, 0x6428, 0x8209, 0x631B, 0x665F, 0x665F, 0x6663,
+ 0x66F5, 0x675E, 0x689D, 0x688D, 0x69F6, 0x6961, 0x5BE8, 0x5BE8, 0x69BB,
+ 0x6BCC, 0x6F11, 0x6E17, 0x6F98, 0x6CAA, 0x6CAA, 0x701B, 0x7162, 0x723B,
+ 0x4E2C, 0x731C, 0x74CA, 0x74EF, 0x7575, 0x75EC, 0x764E, 0x3FB1, 0x776A,
+ 0x77A9, 0x7940, 0x7953, 0x7953, 0x9F4B, 0x79AE, 0x9083, 0x7B53, 0x7C11,
+ 0x7C14, 0x4264, 0x7C50, 0x7C58, 0x7D46, 0x7D63, 0x7E22, 0x7E22, 0x7E48,
+ 0x7E35, 0x7E43, 0x7E8C, 0x7F50, 0x7F51, 0x7F51, 0x7F51, 0x7FC5, 0x7FC6,
+ 0x7FE9, 0x8141, 0x4453, 0x8258, 0x8279, 0x2EBF, 0x2EC0, 0x82E3, 0x5179,
+ 0x83A2, 0x8420, 0x83BD, 0x84F4, 0x856D, 0x8587, 0x85F4, 0x4E55, 0x8737,
+ 0x873B, 0x8805, 0x87BD, 0x867D, 0x8836, 0x8944, 0x88C6, 0x89BD, 0x8ADB,
+ 0x8B3E, 0x8B5A, 0x8D73, 0x8D99, 0x8DCB, 0x8E34, 0x8E4A, 0x8FEF, 0x9087,
+ 0x8FFA, 0x901E, 0x9035, 0x9050, 0x8FC8, 0x9081, 0x908A, 0x908A, 0x908A,
+ 0x908A, 0x908A, 0x908A, 0x9089, 0x9089, 0x9089, 0x9089, 0x9089, 0x9089,
+ 0x9089, 0x9089, 0x9089, 0x9089, 0x9089, 0x9089, 0x92CF, 0x93DD, 0x95BC,
+ 0x9621, 0x96B2, 0x975C, 0x9839, 0x98EB, 0x9903, 0x9909, 0x9945, 0x9945,
+ 0x994B, 0x9A08, 0x9A5F, 0x9A65, 0x9AEF, 0x9B18, 0x9BDF, 0x9D09, 0x9D08,
+ 0x9EA5, 0x9ECC, 0x9F08, 0x9F4A, 0x9F63, 0x9F67, 0x9F6C, 0x7199, 0x7199,
+ 0x891C, 0x68C8, 0x66FB, 0x5F45, 0x5300, 0x5389, 0x5953, 0xFA11, 0x6852,
+ 0x6A73, 0x6D87, 0xFA15, 0x8A12, 0x4E04, 0x4E05, 0x4E1F, 0x4E2B, 0x4E2F,
+ 0x4E30, 0x4E40, 0x4E41, 0x4E44, 0x4E5A, 0x4E7F, 0x4E8D, 0x4E96, 0x4EB9,
+ 0x4ED0, 0x4EE0, 0x4EFD, 0x4EFF, 0x4F0B, 0x4F15, 0x4F60, 0x4F3B, 0x4F49,
+ 0x4F54, 0x4F7A, 0x4F7D, 0x4F7E, 0x4F97, 0x4FBE, 0x4FCF, 0x4FFD, 0x5000,
+ 0x5001, 0x5010, 0x501B, 0x5027, 0x502E, 0x5057, 0x5066, 0x506A, 0x503B,
+ 0x508F, 0x5096, 0x509C, 0x50CC, 0x50E6, 0x50E9, 0x50EF, 0x5108, 0x510B,
+ 0x5110, 0x511B, 0x511E, 0x515F, 0x51A1, 0x51BC, 0x51DE, 0x51EE, 0x51F4,
+ 0x5201, 0x5202, 0x5213, 0x5249, 0x5261, 0x5266, 0x5293, 0x52C8, 0x52F0,
+ 0x530A, 0x530B, 0x533E, 0x534C, 0x534B, 0x5361, 0x536C, 0x53AB, 0x53DA,
+ 0x53E6, 0x53F5, 0x5427, 0x544D, 0x5466, 0x546B, 0x5474, 0x548D, 0x5496,
+ 0x54A1, 0x54AD, 0x54B9, 0x54BF, 0x54C6, 0x54CD, 0x550E, 0x552B, 0x5535,
+ 0x554A, 0x5560, 0x5561, 0x5588, 0x558E, 0x5608, 0x560E, 0x560F, 0x5637,
+ 0x563F, 0x5649, 0x564B, 0x564F, 0x5666, 0x5669, 0x566F, 0x5671, 0x5672,
+ 0x5695, 0x569A, 0x56AC, 0x56AD, 0x56B1, 0x56C9, 0x56DD, 0x56E4, 0x570A,
+ 0x5715, 0x5723, 0x572F, 0x5733, 0x5734, 0x574C, 0x5770, 0x578C, 0x579C,
+ 0x57B8, 0x57E6, 0x57ED, 0x57F5, 0x57F6, 0x57FF, 0x5809, 0x5820, 0x5832,
+ 0x587C, 0x5880, 0x58A9, 0x58CE, 0x58D0, 0x58D4, 0x58DA, 0x58E9, 0x590C,
+ 0x5924, 0x592F, 0x5961, 0x596D, 0x59CA, 0x59D2, 0x59DD, 0x59E3, 0x59E4,
+ 0x5A04, 0x5A0C, 0x5A23, 0x5A47, 0x5A55, 0x5A63, 0x5A6D, 0x5A7E, 0x5A9E,
+ 0x5AA7, 0x5AAC, 0x5AB3, 0x5AE0, 0x5B00, 0x5B19, 0x5B25, 0x5B2D, 0x5B41,
+ 0x5B7C, 0x5B7E, 0x5B7F, 0x5B8A, 0x5C23, 0x5C2B, 0x5C30, 0x5C63, 0x5C69,
+ 0x5C7C, 0x5CCB, 0x5CD2, 0x5CF4, 0x5D24, 0x5D26, 0x5D43, 0x5D46, 0x5D4A,
+ 0x5D92, 0x5D94, 0x5D99, 0x5DA0, 0x5DD8, 0x5DE0, 0x5DF8, 0x5E00, 0x5E12,
+ 0x5E14, 0x5E15, 0x5E18, 0x5E2E, 0x5E58, 0x5E6B, 0x5E6C, 0x5EA8, 0x5EAA,
+ 0x5EBE, 0x5EBF, 0x5ECB, 0x5ED2, 0x5F07, 0x5F0E, 0x5F1C, 0x5F1D, 0x5F22,
+ 0x5F28, 0x5F36, 0x5F3B, 0x5F40, 0x5F50, 0x5F58, 0x5F64, 0x5F89, 0x5F9C,
+ 0x5FA7, 0x5FA4, 0x5FAF, 0x5FB8, 0x5FC4, 0x5FC9, 0x5FE1, 0x5FE9, 0x5FED,
+ 0x5FFC, 0x6017, 0x601A, 0x6033, 0x6061, 0x607F, 0x609E, 0x60A4, 0x60B0,
+ 0x60CB, 0x60DB, 0x60F8, 0x6112, 0x6113, 0x6114, 0x611C, 0x617C, 0x618D,
+ 0x619F, 0x61A8, 0x61C2, 0x61DF, 0x6215, 0x6229, 0x6243, 0x6246, 0x624C,
+ 0x6251, 0x6256, 0x62C4, 0x62FC, 0x630A, 0x630D, 0x6318, 0x6339, 0x6342,
+ 0x6343, 0x6365, 0x6374, 0x637D, 0x6384, 0x6387, 0x6390, 0x639E, 0x63D1,
+ 0x63DC, 0x6409, 0x6410, 0x6422, 0x6454, 0x645B, 0x646D, 0x647B, 0x64BE,
+ 0x64BF, 0x64E5, 0x64F7, 0x64FB, 0x6504, 0x6516, 0x6519, 0x6547, 0x6567,
+ 0x6581, 0x6585, 0x65C2, 0x65F0, 0x65F2, 0x662C, 0x664C, 0x665B, 0x665C,
+ 0x6661, 0x666B, 0x6677, 0x66A4, 0x66C8, 0x66EC, 0x6705, 0x6713, 0x6733,
+ 0x6748, 0x674C, 0x6776, 0x677B, 0x67B0, 0x67B2, 0x67F9, 0x67D7, 0x67D9,
+ 0x67F0, 0x682C, 0x6830, 0x6831, 0x685B, 0x6872, 0x6875, 0x687A, 0x6884,
+ 0x68A5, 0x68B2, 0x68D0, 0x68D6, 0x68E8, 0x68ED, 0x68F0, 0x68F1, 0x68FC,
+ 0x6911, 0x6913, 0x6935, 0x693B, 0x6957, 0x6963, 0x6972, 0x697F, 0x6980,
+ 0x69A6, 0x69AD, 0x69B7, 0x69D6, 0x69D7, 0x6A01, 0x6A0F, 0x6A15, 0x6A28,
+ 0x6A34, 0x6A3E, 0x6A45, 0x6A50, 0x6A51, 0x6A56, 0x6A5B, 0x6A83, 0x6A89,
+ 0x6A91, 0x6A9D, 0x6A9E, 0x6A9F, 0x6ADC, 0x6AE7, 0x6AEC, 0x6B1E, 0x6B24,
+ 0x6B35, 0x6B46, 0x6B56, 0x6B60, 0x6B82, 0x6BBE, 0x6BE1, 0x6BF1, 0x6C10,
+ 0x6C33, 0x6C35, 0x6C3A, 0x6C59, 0x6C76, 0x6C7B, 0x6C85, 0x6C95, 0x6C9C,
+ 0x6CD0, 0x6CD4, 0x6CD6, 0x6CE0, 0x6CEB, 0x6CEC, 0x6CEE, 0x6D0A, 0x6D0E,
+ 0x6D11, 0x6D2E, 0x6D57, 0x6D5E, 0x6D65, 0x6D82, 0x6DBF, 0x6DC4, 0x6DCA,
+ 0x6DD6, 0x6DE9, 0x6E22, 0x6E51, 0x6EC7, 0x6ECA, 0x6ECE, 0x6EFD, 0x6F1A,
+ 0x6F2A, 0x6F2F, 0x6F33, 0x6F5A, 0x6F5E, 0x6F62, 0x6F7D, 0x6F8B, 0x6F8D,
+ 0x6F92, 0x6F94, 0x6F9A, 0x6FA7, 0x6FA8, 0x6FB6, 0x6FDA, 0x6FDE, 0x6FF9,
+ 0x7039, 0x703C, 0x704A, 0x7054, 0x705D, 0x705E, 0x7064, 0x706C, 0x707E,
+ 0x7081, 0x7095, 0x70B7, 0x70D3, 0x70D4, 0x70D8, 0x70DC, 0x7107, 0x7120,
+ 0x7131, 0x714A, 0x7152, 0x7160, 0x7179, 0x7192, 0x71B3, 0x71CB, 0x71D3,
+ 0x71D6, 0x7200, 0x721D, 0x722B, 0x7238, 0x7241, 0x7253, 0x7255, 0x7256,
+ 0x725C, 0x728D, 0x72AD, 0x72B4, 0x72C7, 0x72FB, 0x7304, 0x7305, 0x7328,
+ 0x7331, 0x7343, 0x736C, 0x737C, 0x7383, 0x7385, 0x7386, 0x7395, 0x739E,
+ 0x739F, 0x73A0, 0x73A6, 0x73AB, 0x73B5, 0x73B7, 0x73BC, 0x73CF, 0x73D9,
+ 0x73E9, 0x73F4, 0x73FD, 0x7404, 0x740A, 0x741A, 0x741B, 0x7424, 0x7428,
+ 0x742C, 0x742F, 0x7430, 0x7431, 0x7439, 0x7444, 0x7447, 0x744B, 0x744D,
+ 0x7451, 0x7457, 0x7466, 0x746B, 0x7471, 0x7480, 0x7485, 0x7486, 0x7487,
+ 0x7490, 0x7498, 0x749C, 0x74A0, 0x74A3, 0x74A8, 0x74AB, 0x74B5, 0x74BF,
+ 0x74C8, 0x74DA, 0x74DE, 0x754E, 0x7579, 0x7581, 0x7590, 0x7592, 0x7593,
+ 0x75B4, 0x75E4, 0x75F9, 0x7600, 0x760A, 0x7615, 0x7616, 0x7619, 0x761E,
+ 0x762D, 0x7635, 0x7643, 0x764B, 0x7665, 0x766D, 0x766F, 0x7671, 0x7674,
+ 0x76A4, 0x76A5, 0x76C5, 0x76CC, 0x76EC, 0x76FC, 0x7734, 0x7736, 0x775C,
+ 0x775F, 0x7760, 0x7772, 0x777D, 0x7795, 0x77AA, 0x77E6, 0x77F0, 0x77F4,
+ 0x7806, 0x7822, 0x782D, 0x782E, 0x7830, 0x7835, 0x7868, 0x789E, 0x78C8,
+ 0x78CC, 0x78CE, 0x78E4, 0x78E0, 0x78E1, 0x78F2, 0x78F7, 0x78FB, 0x7931,
+ 0x7934, 0x793B, 0x793D, 0x7945, 0x795B, 0x795C, 0x798B, 0x7996, 0x7998,
+ 0x79B8, 0x79BB, 0x79CA, 0x79DA, 0x7A03, 0x7A09, 0x7A11, 0x7A1E, 0x7A2D,
+ 0x7A39, 0x7A45, 0x7A4C, 0x7A5D, 0x7A60, 0x7A6D, 0x7A78, 0x7AA0, 0x7AA3,
+ 0x7AB3, 0x7ABB, 0x7ABC, 0x7AC6, 0x7B07, 0x7B14, 0x7B27, 0x7B31, 0x7B47,
+ 0x7B4E, 0x7B60, 0x7B69, 0x7B6D, 0x7B72, 0x7B91, 0x7BAF, 0x7BD7, 0x7BD9,
+ 0x7C0B, 0x7C0F, 0x7C20, 0x7C26, 0x7C31, 0x7C36, 0x7C51, 0x7C59, 0x7C67,
+ 0x7C6E, 0x7C70, 0x7CBC, 0x7CBF, 0x7CC8, 0x7CC9, 0x7CD7, 0x7CD9, 0x7CDD,
+ 0x7CEB, 0x7D07, 0x7D08, 0x7D09, 0x7D13, 0x7D1D, 0x7D23, 0x7D41, 0x7D53,
+ 0x7D59, 0x7D5D, 0x7D7A, 0x7D86, 0x7D8B, 0x7D8C, 0x7DCC, 0x7DEB, 0x7DF1,
+ 0x7DF9, 0x7E08, 0x7E11, 0x7E15, 0x7E20, 0x7E47, 0x7E62, 0x7E6E, 0x7E73,
+ 0x7E8D, 0x7E91, 0x7E98, 0x7F44, 0x7F4F, 0x7F52, 0x7F53, 0x7F61, 0x7F91,
+ 0x7FBF, 0x7FCE, 0x7FDF, 0x7FE5, 0x7FEC, 0x7FEE, 0x7FEF, 0x7FFA, 0x800E,
+ 0x8011, 0x8014, 0x8024, 0x8026, 0x803A, 0x803C, 0x8060, 0x8071, 0x8075,
+ 0x809E, 0x80A6, 0x80AB, 0x80D7, 0x80D8, 0x8116, 0x8118, 0x813A, 0x814A,
+ 0x814C, 0x8181, 0x8184, 0x81B4, 0x81CF, 0x81F9, 0x8203, 0x8221, 0x8232,
+ 0x8234, 0x8246, 0x824B, 0x824F, 0x828E, 0x82AE, 0x82B7, 0x82BE, 0x82C6,
+ 0x82FE, 0x8343, 0x8351, 0x8355, 0x8386, 0x838D, 0x8392, 0x8398, 0x83A9,
+ 0x83BF, 0x83C0, 0x83EA, 0x840F, 0x8411, 0x844A, 0x8476, 0x84A8, 0x84AF,
+ 0x84C0, 0x84C2, 0x84F0, 0x84FD, 0x850C, 0x8534, 0x855E, 0x858F, 0x85B7,
+ 0x85CE, 0x85AD, 0x8612, 0x8629, 0x8652, 0x8663, 0x866C, 0x866F, 0x867A,
+ 0x868D, 0x8691, 0x8698, 0x86A7, 0x86A8, 0x86FA, 0x86FD, 0x870B, 0x8713,
+ 0x8719, 0x871E, 0x8728, 0x873E, 0x8771, 0x8788, 0x8799, 0x87AC, 0x87AD,
+ 0x87B5, 0x87D6, 0x87EB, 0x87ED, 0x8801, 0x8803, 0x8806, 0x880B, 0x8814,
+ 0x881C, 0x8856, 0x885F, 0x8864, 0x8898, 0x88AA, 0x88BD, 0x88BE, 0x88CA,
+ 0x88D2, 0x88DB, 0x88F0, 0x88F1, 0x8906, 0x8918, 0x8919, 0x891A, 0x8927,
+ 0x8930, 0x893E, 0x897B, 0x89D4, 0x89D6, 0x89E5, 0x89F1, 0x8A07, 0x8A0F,
+ 0x8A15, 0x8A22, 0x8A4E, 0x8A7F, 0x8AF4, 0x8B1F, 0x8B37, 0x8B43, 0x8B44,
+ 0x8B54, 0x8B9C, 0x8B9E, 0x8C47, 0x8C54, 0x8C73, 0x8CA4, 0x8CD9, 0x8CE1,
+ 0x8CF8, 0x8CFE, 0x8D1B, 0x8D69, 0x8D6C, 0x8D84, 0x8D8D, 0x8D95, 0x8DA6,
+ 0x8DC6, 0x8DCE, 0x8DE4, 0x8DEC, 0x8E20, 0x8E4B, 0x8E6C, 0x8E70, 0x8E7A,
+ 0x8E92, 0x8EAE, 0x8EB3, 0x8ED1, 0x8ED4, 0x8EF9, 0x8F17, 0x8F36, 0x8FA6,
+ 0x8FB5, 0x8FB6, 0x8FC6, 0x8FE0, 0x8FE4, 0x8FF6, 0x9002, 0x902C, 0x9044,
+ 0x9088, 0x9095, 0x9099, 0x909B, 0x90A2, 0x90B4, 0x90D7, 0x90DD, 0x90F4,
+ 0x9117, 0x911C, 0x9131, 0x913A, 0x913D, 0x9148, 0x915B, 0x9161, 0x9164,
+ 0x918E, 0x919E, 0x91A8, 0x91AD, 0x91AE, 0x91B2, 0x91BC, 0x91F0, 0x91F7,
+ 0x91FB, 0x9207, 0x9228, 0x9233, 0x9238, 0x9243, 0x9247, 0x924F, 0x9260,
+ 0x92C2, 0x92CB, 0x92CC, 0x92DF, 0x930D, 0x9315, 0x931F, 0x9327, 0x9347,
+ 0x9352, 0x9365, 0x936A, 0x936D, 0x939B, 0x93BA, 0x93A9, 0x93C1, 0x93CA,
+ 0x93E2, 0x93FA, 0x93FD, 0x940F, 0x9434, 0x943F, 0x9455, 0x946B, 0x9472,
+ 0x9578, 0x95A6, 0x95A9, 0x95AB, 0x95B4, 0x95BD, 0x95DA, 0x961D, 0x9641,
+ 0x9658, 0x9684, 0x96A4, 0x96A9, 0x96D2, 0x5DB2, 0x96DE, 0x96E9, 0x96F1,
+ 0x9702, 0x9709, 0x975A, 0x9763, 0x976E, 0x9773, 0x979A, 0x97A2, 0x97B5,
+ 0x97B6, 0x97D9, 0x97DE, 0x97F4, 0x980A, 0x980E, 0x981E, 0x9823, 0x982B,
+ 0x983E, 0x9852, 0x9853, 0x9859, 0x986C, 0x98B8, 0x98BA, 0x98BF, 0x98C8,
+ 0x98E5, 0x9932, 0x9933, 0x9940, 0x994D, 0x995C, 0x995F, 0x99B1, 0x99B9,
+ 0x99BA, 0x99C9, 0x9A02, 0x9A16, 0x9A24, 0x9A27, 0x9A2D, 0x9A2E, 0x9A36,
+ 0x9A38, 0x9A4A, 0x9A56, 0x9AB5, 0x9AB6, 0x9AF9, 0x9B03, 0x9B20, 0x9B33,
+ 0x9B34, 0x9B73, 0x9B79, 0x9BA7, 0x9BC1, 0x9BC7, 0x9BD7, 0x9BE7, 0x9BEB,
+ 0x9BF7, 0x9BFA, 0x9BFD, 0x9C0B, 0x9C27, 0x9C2A, 0x9C36, 0x9C41, 0x9C53,
+ 0x9C63, 0x9C6A, 0x9C77, 0x9D02, 0x9D42, 0x9D47, 0x9D63, 0x9D69, 0x9D7C,
+ 0x9D7E, 0x9D8D, 0x9DB1, 0x9DC3, 0x9DC7, 0x9DD6, 0x9DDF, 0x9DEB, 0x9DF4,
+ 0x9E15, 0x9E1D, 0x9EA4, 0x9EA8, 0x9EAC, 0x9EE7, 0x9EEE, 0x9F10, 0x9F12,
+ 0x9F17, 0x9F19, 0x9F2F, 0x9F37, 0x9F39, 0x9F41, 0x9F45, 0x9F57, 0x9F68,
+ 0x9F71, 0x9F75, 0x9F90, 0x9F94, 0x9FA2, 0x4E30, 0x3405, 0x4F60, 0x5620,
+ 0x5ECB, 0x2E95, 0x60A4, 0x69D7, 0x6B24, 0x6FF9, 0x6EE6, 0x71B3, 0x2EA4,
+ 0x7AC6, 0x7F61, 0x8071, 0x809E, 0x2ECC, 0x91F0, 0x5DB2, 0x97DE, 0x4FD3,
+ 0x50D9, 0x50F0, 0x51C3, 0x5676, 0x6A54, 0x6D01, 0x6DD0, 0x6E42, 0x6ED9,
+ 0x73E4, 0x7421, 0x756C, 0x7851, 0x87F5, 0xFFFD, 0x73A8, 0x3AF3, 0x34DB,
+ 0x440C, 0x3E8A, 0xFFFD, 0xFFFD, 0x4BE8, 0xFFFD, 0x3EDA, 0x3B22, 0xFFFD,
+ 0x457A, 0x4093, 0xFFFD, 0x4665, 0x4103, 0x4293, 0x46AE, 0x3488, 0xFFFD,
};
diff --git a/core/src/fpdfapi/fpdf_cmaps/Japan1/UniJIS-UCS2-HW-H_4.cpp b/core/src/fpdfapi/fpdf_cmaps/Japan1/UniJIS-UCS2-HW-H_4.cpp
index b8f842d3ea..836a1f177f 100644
--- a/core/src/fpdfapi/fpdf_cmaps/Japan1/UniJIS-UCS2-HW-H_4.cpp
+++ b/core/src/fpdfapi/fpdf_cmaps/Japan1/UniJIS-UCS2-HW-H_4.cpp
@@ -7,6 +7,6 @@
#include "cmaps_japan1.h"
const FX_WORD g_FXCMAP_UniJIS_UCS2_HW_H_4[4 * 3] = {
- 0x0020, 0x005B, 0x00E7, 0x005C, 0x005C, 0x220F, 0x005D, 0x007E, 0x0124,
- 0x00A5, 0x00A5, 0x0123,
+ 0x0020, 0x005B, 0x00E7, 0x005C, 0x005C, 0x220F,
+ 0x005D, 0x007E, 0x0124, 0x00A5, 0x00A5, 0x0123,
};
diff --git a/core/src/fpdfapi/fpdf_cmaps/Japan1/UniJIS-UCS2-H_4.cpp b/core/src/fpdfapi/fpdf_cmaps/Japan1/UniJIS-UCS2-H_4.cpp
index 4d57ecb7db..67745afb86 100644
--- a/core/src/fpdfapi/fpdf_cmaps/Japan1/UniJIS-UCS2-H_4.cpp
+++ b/core/src/fpdfapi/fpdf_cmaps/Japan1/UniJIS-UCS2-H_4.cpp
@@ -7,2447 +7,2176 @@
#include "cmaps_japan1.h"
const FX_WORD g_FXCMAP_UniJIS_UCS2_H_4[9772 * 2] = {
- 0x0020, 0x0001, 0x0021, 0x0002, 0x0022, 0x0003, 0x0023, 0x0004,
- 0x0024, 0x0005, 0x0025, 0x0006, 0x0026, 0x0007, 0x0027, 0x0008,
- 0x0028, 0x0009, 0x0029, 0x000A, 0x002A, 0x000B, 0x002B, 0x000C,
- 0x002C, 0x000D, 0x002D, 0x000E, 0x002E, 0x000F, 0x002F, 0x0010,
- 0x0030, 0x0011, 0x0031, 0x0012, 0x0032, 0x0013, 0x0033, 0x0014,
- 0x0034, 0x0015, 0x0035, 0x0016, 0x0036, 0x0017, 0x0037, 0x0018,
- 0x0038, 0x0019, 0x0039, 0x001A, 0x003A, 0x001B, 0x003B, 0x001C,
- 0x003C, 0x001D, 0x003D, 0x001E, 0x003E, 0x001F, 0x003F, 0x0020,
- 0x0040, 0x0021, 0x0041, 0x0022, 0x0042, 0x0023, 0x0043, 0x0024,
- 0x0044, 0x0025, 0x0045, 0x0026, 0x0046, 0x0027, 0x0047, 0x0028,
- 0x0048, 0x0029, 0x0049, 0x002A, 0x004A, 0x002B, 0x004B, 0x002C,
- 0x004C, 0x002D, 0x004D, 0x002E, 0x004E, 0x002F, 0x004F, 0x0030,
- 0x0050, 0x0031, 0x0051, 0x0032, 0x0052, 0x0033, 0x0053, 0x0034,
- 0x0054, 0x0035, 0x0055, 0x0036, 0x0056, 0x0037, 0x0057, 0x0038,
- 0x0058, 0x0039, 0x0059, 0x003A, 0x005A, 0x003B, 0x005B, 0x003C,
- 0x005C, 0x0061, 0x005D, 0x003E, 0x005E, 0x003F, 0x005F, 0x0040,
- 0x0060, 0x0041, 0x0061, 0x0042, 0x0062, 0x0043, 0x0063, 0x0044,
- 0x0064, 0x0045, 0x0065, 0x0046, 0x0066, 0x0047, 0x0067, 0x0048,
- 0x0068, 0x0049, 0x0069, 0x004A, 0x006A, 0x004B, 0x006B, 0x004C,
- 0x006C, 0x004D, 0x006D, 0x004E, 0x006E, 0x004F, 0x006F, 0x0050,
- 0x0070, 0x0051, 0x0071, 0x0052, 0x0072, 0x0053, 0x0073, 0x0054,
- 0x0074, 0x0055, 0x0075, 0x0056, 0x0076, 0x0057, 0x0077, 0x0058,
- 0x0078, 0x0059, 0x0079, 0x005A, 0x007A, 0x005B, 0x007B, 0x005C,
- 0x007C, 0x005D, 0x007D, 0x005E, 0x007E, 0x005F, 0x00A1, 0x0065,
- 0x00A2, 0x0066, 0x00A3, 0x0067, 0x00A4, 0x006B, 0x00A5, 0x003D,
- 0x00A6, 0x0063, 0x00A7, 0x02D0, 0x00A8, 0x0287, 0x00A9, 0x0098,
- 0x00AA, 0x008C, 0x00AB, 0x006D, 0x00AC, 0x0099, 0x00AD, 0x0097,
- 0x00AE, 0x009A, 0x00AF, 0x0081, 0x00B0, 0x02C3, 0x00B1, 0x02B6,
- 0x00B2, 0x009D, 0x00B3, 0x009E, 0x00B4, 0x0285, 0x00B5, 0x009F,
- 0x00B6, 0x030A, 0x00B7, 0x0075, 0x00B8, 0x0086, 0x00B9, 0x00A0,
- 0x00BA, 0x0090, 0x00BB, 0x007B, 0x00BC, 0x00A1, 0x00BD, 0x00A2,
- 0x00BE, 0x00A3, 0x00BF, 0x007E, 0x00C0, 0x00A4, 0x00C1, 0x00A5,
- 0x00C2, 0x00A6, 0x00C3, 0x00A7, 0x00C4, 0x00A8, 0x00C5, 0x00A9,
- 0x00C6, 0x008B, 0x00C7, 0x00AA, 0x00C8, 0x00AB, 0x00C9, 0x00AC,
- 0x00CA, 0x00AD, 0x00CB, 0x00AE, 0x00CC, 0x00AF, 0x00CD, 0x00B0,
- 0x00CE, 0x00B1, 0x00CF, 0x00B2, 0x00D0, 0x00B3, 0x00D1, 0x00B4,
- 0x00D2, 0x00B5, 0x00D3, 0x00B6, 0x00D4, 0x00B7, 0x00D5, 0x00B8,
- 0x00D6, 0x00B9, 0x00D7, 0x02B7, 0x00D8, 0x008E, 0x00D9, 0x00BB,
- 0x00DA, 0x00BC, 0x00DB, 0x00BD, 0x00DC, 0x00BE, 0x00DD, 0x00BF,
- 0x00DE, 0x00C0, 0x00DF, 0x0096, 0x00E0, 0x00C1, 0x00E1, 0x00C2,
- 0x00E2, 0x00C3, 0x00E3, 0x00C4, 0x00E4, 0x00C5, 0x00E5, 0x00C6,
- 0x00E6, 0x0091, 0x00E7, 0x00C7, 0x00E8, 0x00C8, 0x00E9, 0x00C9,
- 0x00EA, 0x00CA, 0x00EB, 0x00CB, 0x00EC, 0x00CC, 0x00ED, 0x00CD,
- 0x00EE, 0x00CE, 0x00EF, 0x00CF, 0x00F0, 0x00D0, 0x00F1, 0x00D1,
- 0x00F2, 0x00D2, 0x00F3, 0x00D3, 0x00F4, 0x00D4, 0x00F5, 0x00D5,
- 0x00F6, 0x00D6, 0x00F7, 0x02B8, 0x00F8, 0x0094, 0x00F9, 0x00D8,
- 0x00FA, 0x00D9, 0x00FB, 0x00DA, 0x00FC, 0x00DB, 0x00FD, 0x00DC,
- 0x00FE, 0x00DD, 0x00FF, 0x00DE, 0x0100, 0x2496, 0x0101, 0x2491,
- 0x0112, 0x2499, 0x0113, 0x2494, 0x011A, 0x24B3, 0x011B, 0x24BF,
- 0x0127, 0x2F3C, 0x0128, 0x24B8, 0x0129, 0x24C4, 0x012A, 0x2497,
- 0x012B, 0x2492, 0x0131, 0x0092, 0x0141, 0x008D, 0x0142, 0x0093,
- 0x014B, 0x24DC, 0x014C, 0x249A, 0x014D, 0x2495, 0x0152, 0x008F,
- 0x0153, 0x0095, 0x0160, 0x00DF, 0x0161, 0x00E3, 0x0168, 0x24BD,
- 0x0169, 0x24C9, 0x016A, 0x2498, 0x016B, 0x2493, 0x016E, 0x24BC,
- 0x016F, 0x24C8, 0x0178, 0x00E0, 0x017D, 0x00E1, 0x017E, 0x00E5,
- 0x01C0, 0x0063, 0x01CD, 0x24B2, 0x01CE, 0x24BE, 0x01CF, 0x24B6,
- 0x01D0, 0x24C2, 0x01D1, 0x24B9, 0x01D2, 0x24C5, 0x01D3, 0x24BB,
- 0x01D4, 0x24C7, 0x01FD, 0x24CD, 0x0251, 0x24CA, 0x0254, 0x24CF,
- 0x0259, 0x24D2, 0x025A, 0x24D5, 0x025B, 0x24D8, 0x0275, 0x24DD,
- 0x0283, 0x24E2, 0x028C, 0x24DE, 0x0292, 0x24E1, 0x02D0, 0x24E3,
- 0x0300, 0x0041, 0x0301, 0x007F, 0x0302, 0x0080, 0x0303, 0x005F,
- 0x0304, 0x0081, 0x0305, 0x00E2, 0x0306, 0x0082, 0x0307, 0x0083,
- 0x0308, 0x0084, 0x030A, 0x0085, 0x030B, 0x0087, 0x030C, 0x0089,
- 0x0327, 0x0086, 0x0328, 0x0088, 0x0332, 0x0040, 0x0336, 0x008A,
- 0x0361, 0x02F6, 0x0391, 0x03F3, 0x0392, 0x03F4, 0x0393, 0x03F5,
- 0x0394, 0x03F6, 0x0395, 0x03F7, 0x0396, 0x03F8, 0x0397, 0x03F9,
- 0x0398, 0x03FA, 0x0399, 0x03FB, 0x039A, 0x03FC, 0x039B, 0x03FD,
- 0x039C, 0x03FE, 0x039D, 0x03FF, 0x039E, 0x0400, 0x039F, 0x0401,
- 0x03A0, 0x0402, 0x03A1, 0x0403, 0x03A3, 0x0404, 0x03A4, 0x0405,
- 0x03A5, 0x0406, 0x03A6, 0x0407, 0x03A7, 0x0408, 0x03A8, 0x0409,
- 0x03A9, 0x040A, 0x03B1, 0x040B, 0x03B2, 0x040C, 0x03B3, 0x040D,
- 0x03B4, 0x040E, 0x03B5, 0x040F, 0x03B6, 0x0410, 0x03B7, 0x0411,
- 0x03B8, 0x0412, 0x03B9, 0x0413, 0x03BA, 0x0414, 0x03BB, 0x0415,
- 0x03BC, 0x0416, 0x03BD, 0x0417, 0x03BE, 0x0418, 0x03BF, 0x0419,
- 0x03C0, 0x041A, 0x03C1, 0x041B, 0x03C3, 0x041C, 0x03C4, 0x041D,
- 0x03C5, 0x041E, 0x03C6, 0x041F, 0x03C7, 0x0420, 0x03C8, 0x0421,
- 0x03C9, 0x0422, 0x03D0, 0x2F3A, 0x03D1, 0x2F40, 0x03DB, 0x2F3F,
- 0x0401, 0x0429, 0x0410, 0x0423, 0x0411, 0x0424, 0x0412, 0x0425,
- 0x0413, 0x0426, 0x0414, 0x0427, 0x0415, 0x0428, 0x0416, 0x042A,
- 0x0417, 0x042B, 0x0418, 0x042C, 0x0419, 0x042D, 0x041A, 0x042E,
- 0x041B, 0x042F, 0x041C, 0x0430, 0x041D, 0x0431, 0x041E, 0x0432,
- 0x041F, 0x0433, 0x0420, 0x0434, 0x0421, 0x0435, 0x0422, 0x0436,
- 0x0423, 0x0437, 0x0424, 0x0438, 0x0425, 0x0439, 0x0426, 0x043A,
- 0x0427, 0x043B, 0x0428, 0x043C, 0x0429, 0x043D, 0x042A, 0x043E,
- 0x042B, 0x043F, 0x042C, 0x0440, 0x042D, 0x0441, 0x042E, 0x0442,
- 0x042F, 0x0443, 0x0430, 0x0444, 0x0431, 0x0445, 0x0432, 0x0446,
- 0x0433, 0x0447, 0x0434, 0x0448, 0x0435, 0x0449, 0x0436, 0x044B,
- 0x0437, 0x044C, 0x0438, 0x044D, 0x0439, 0x044E, 0x043A, 0x044F,
- 0x043B, 0x0450, 0x043C, 0x0451, 0x043D, 0x0452, 0x043E, 0x0453,
- 0x043F, 0x0454, 0x0440, 0x0455, 0x0441, 0x0456, 0x0442, 0x0457,
- 0x0443, 0x0458, 0x0444, 0x0459, 0x0445, 0x045A, 0x0446, 0x045B,
- 0x0447, 0x045C, 0x0448, 0x045D, 0x0449, 0x045E, 0x044A, 0x045F,
- 0x044B, 0x0460, 0x044C, 0x0461, 0x044D, 0x0462, 0x044E, 0x0463,
- 0x044F, 0x0464, 0x0451, 0x044A, 0x045B, 0x2F3C, 0x1EBC, 0x24B5,
- 0x1EBD, 0x24C1, 0x2002, 0x00E7, 0x2003, 0x0279, 0x2010, 0x0296,
- 0x2011, 0x000E, 0x2012, 0x0072, 0x2013, 0x0072, 0x2014, 0x008A,
- 0x2015, 0x0295, 0x2016, 0x029A, 0x2018, 0x029E, 0x2019, 0x029F,
- 0x201A, 0x0078, 0x201C, 0x02A0, 0x201D, 0x02A1, 0x201E, 0x0079,
- 0x2020, 0x0308, 0x2021, 0x0309, 0x2022, 0x0077, 0x2025, 0x029D,
- 0x2026, 0x029C, 0x2030, 0x0304, 0x2032, 0x02C4, 0x2033, 0x02C5,
- 0x2039, 0x006E, 0x203A, 0x006F, 0x203B, 0x02DE, 0x203C, 0x2F4F,
- 0x203E, 0x0145, 0x2044, 0x0068, 0x2049, 0x2F50, 0x2070, 0x24A1,
- 0x2074, 0x24A2, 0x2075, 0x24A3, 0x2076, 0x24A4, 0x2077, 0x24A5,
- 0x2078, 0x24A6, 0x2079, 0x24A7, 0x2080, 0x24A8, 0x2081, 0x24A9,
- 0x2082, 0x24AA, 0x2083, 0x24AB, 0x2084, 0x24AC, 0x2085, 0x24AD,
- 0x2086, 0x24AE, 0x2087, 0x24AF, 0x2088, 0x24B0, 0x2089, 0x24B1,
- 0x20AC, 0x248A, 0x20DD, 0x030B, 0x2100, 0x2E4F, 0x2103, 0x02C6,
- 0x2105, 0x2E53, 0x2109, 0x2071, 0x210A, 0x2070, 0x210F, 0x2F3C,
- 0x2113, 0x1F59, 0x2116, 0x1DBA, 0x2121, 0x1F77, 0x2122, 0x00E4,
- 0x2126, 0x248B, 0x212B, 0x0303, 0x2135, 0x2F39, 0x2153, 0x249F,
- 0x2154, 0x24A0, 0x215B, 0x249B, 0x215C, 0x249C, 0x215D, 0x249D,
- 0x215E, 0x249E, 0x2160, 0x1D97, 0x2161, 0x1D98, 0x2162, 0x1D99,
- 0x2163, 0x1D9A, 0x2164, 0x1D9B, 0x2165, 0x1D9C, 0x2166, 0x1D9D,
- 0x2167, 0x1D9E, 0x2168, 0x1D9F, 0x2169, 0x1DA0, 0x216A, 0x2021,
- 0x216B, 0x2022, 0x2170, 0x1F9C, 0x2171, 0x1F9D, 0x2172, 0x1F9E,
- 0x2173, 0x1F9F, 0x2174, 0x1FA0, 0x2175, 0x1FA1, 0x2176, 0x1FA2,
- 0x2177, 0x1FA3, 0x2178, 0x1FA4, 0x2179, 0x1FA5, 0x217A, 0x206A,
- 0x217B, 0x206B, 0x217F, 0x206F, 0x2190, 0x02E1, 0x2191, 0x02E2,
- 0x2192, 0x02E0, 0x2193, 0x02E3, 0x2194, 0x2FA9, 0x2195, 0x2FB7,
- 0x2196, 0x2FAC, 0x2197, 0x2FAD, 0x2198, 0x2FAA, 0x2199, 0x2FAB,
- 0x21C4, 0x2076, 0x21C5, 0x2077, 0x21C6, 0x2075, 0x21CC, 0x2FAE,
- 0x21D0, 0x2FA8, 0x21D2, 0x02F0, 0x21D4, 0x02F1, 0x21E6, 0x1F4D,
- 0x21E7, 0x1F4C, 0x21E8, 0x1F4E, 0x21E9, 0x1F4B, 0x2200, 0x02F2,
- 0x2202, 0x02F7, 0x2203, 0x02F3, 0x2205, 0x2F98, 0x2207, 0x02F8,
- 0x2208, 0x02E5, 0x220A, 0x2F3B, 0x220B, 0x02E6, 0x2211, 0x1DC9,
- 0x2212, 0x02B5, 0x2213, 0x2F56, 0x221A, 0x02FD, 0x221D, 0x02FF,
- 0x221E, 0x02BF, 0x221F, 0x1DCD, 0x2220, 0x02F4, 0x2225, 0x029A,
- 0x2227, 0x02ED, 0x2228, 0x02EE, 0x2229, 0x02EC, 0x222A, 0x02EB,
- 0x222B, 0x0301, 0x222C, 0x0302, 0x222D, 0x2003, 0x222E, 0x1DC8,
- 0x2234, 0x02C0, 0x2235, 0x0300, 0x223C, 0x0299, 0x223D, 0x02FE,
- 0x2243, 0x2F58, 0x2252, 0x02FA, 0x2260, 0x02BA, 0x2261, 0x02F9,
- 0x2266, 0x02BD, 0x2267, 0x02BE, 0x226A, 0x02FB, 0x226B, 0x02FC,
- 0x2272, 0x2F59, 0x2273, 0x2F5A, 0x2282, 0x02E9, 0x2283, 0x02EA,
- 0x2286, 0x02E7, 0x2287, 0x02E8, 0x2295, 0x2F9C, 0x2296, 0x2F9A,
- 0x2297, 0x2F9D, 0x2298, 0x2F9B, 0x229D, 0x2F9A, 0x229E, 0x2F9E,
- 0x22A0, 0x2F99, 0x22A5, 0x02F5, 0x22BF, 0x1DCE, 0x22EE, 0x1ED9,
- 0x22EF, 0x029C, 0x2300, 0x2F98, 0x2307, 0x2FBB, 0x2312, 0x02F6,
- 0x244A, 0x2F54, 0x2460, 0x1D83, 0x2461, 0x1D84, 0x2462, 0x1D85,
- 0x2463, 0x1D86, 0x2464, 0x1D87, 0x2465, 0x1D88, 0x2466, 0x1D89,
- 0x2467, 0x1D8A, 0x2468, 0x1D8B, 0x2469, 0x1D8C, 0x246A, 0x1D8D,
- 0x246B, 0x1D8E, 0x246C, 0x1D8F, 0x246D, 0x1D90, 0x246E, 0x1D91,
- 0x246F, 0x1D92, 0x2470, 0x1D93, 0x2471, 0x1D94, 0x2472, 0x1D95,
- 0x2473, 0x1D96, 0x2474, 0x1F87, 0x2475, 0x1F88, 0x2476, 0x1F89,
- 0x2477, 0x1F8A, 0x2478, 0x1F8B, 0x2479, 0x1F8C, 0x247A, 0x1F8D,
- 0x247B, 0x1F8E, 0x247C, 0x1F8F, 0x247D, 0x1F90, 0x247E, 0x1F91,
- 0x247F, 0x1F92, 0x2480, 0x1F93, 0x2481, 0x1F94, 0x2482, 0x1F95,
- 0x2483, 0x1F96, 0x2484, 0x1F97, 0x2485, 0x1F98, 0x2486, 0x1F99,
- 0x2487, 0x1F9A, 0x2488, 0x1F7E, 0x2489, 0x1F7F, 0x248A, 0x1F80,
- 0x248B, 0x1F81, 0x248C, 0x1F82, 0x248D, 0x1F83, 0x248E, 0x1F84,
- 0x248F, 0x1F85, 0x2490, 0x1F86, 0x249C, 0x1FB0, 0x249D, 0x1FB1,
- 0x249E, 0x1FB2, 0x249F, 0x1FB3, 0x24A0, 0x1FB4, 0x24A1, 0x1FB5,
- 0x24A2, 0x1FB6, 0x24A3, 0x1FB7, 0x24A4, 0x1FB8, 0x24A5, 0x1FB9,
- 0x24A6, 0x1FBA, 0x24A7, 0x1FBB, 0x24A8, 0x1FBC, 0x24A9, 0x1FBD,
- 0x24AA, 0x1FBE, 0x24AB, 0x1FBF, 0x24AC, 0x1FC0, 0x24AD, 0x1FC1,
- 0x24AE, 0x1FC2, 0x24AF, 0x1FC3, 0x24B0, 0x1FC4, 0x24B1, 0x1FC5,
- 0x24B2, 0x1FC6, 0x24B3, 0x1FC7, 0x24B4, 0x1FC8, 0x24B5, 0x1FC9,
- 0x24B6, 0x2863, 0x24B7, 0x2864, 0x24B8, 0x2865, 0x24B9, 0x2866,
- 0x24BA, 0x2867, 0x24BB, 0x2868, 0x24BC, 0x2869, 0x24BD, 0x286A,
- 0x24BE, 0x286B, 0x24BF, 0x286C, 0x24C0, 0x286D, 0x24C1, 0x286E,
- 0x24C2, 0x286F, 0x24C3, 0x2870, 0x24C4, 0x2871, 0x24C5, 0x2872,
- 0x24C6, 0x2873, 0x24C7, 0x2874, 0x24C8, 0x2875, 0x24C9, 0x2876,
- 0x24CA, 0x2877, 0x24CB, 0x2878, 0x24CC, 0x2879, 0x24CD, 0x287A,
- 0x24CE, 0x287B, 0x24CF, 0x287C, 0x24D0, 0x2849, 0x24D1, 0x284A,
- 0x24D2, 0x284B, 0x24D3, 0x284C, 0x24D4, 0x284D, 0x24D5, 0x284E,
- 0x24D6, 0x284F, 0x24D7, 0x2850, 0x24D8, 0x2851, 0x24D9, 0x2852,
- 0x24DA, 0x2853, 0x24DB, 0x2854, 0x24DC, 0x2855, 0x24DD, 0x2856,
- 0x24DE, 0x2857, 0x24DF, 0x2858, 0x24E0, 0x2859, 0x24E1, 0x285A,
- 0x24E2, 0x285B, 0x24E3, 0x285C, 0x24E4, 0x285D, 0x24E5, 0x285E,
- 0x24E6, 0x285F, 0x24E7, 0x2860, 0x24E8, 0x2861, 0x24E9, 0x2862,
- 0x24EA, 0x2020, 0x2500, 0x1D37, 0x2501, 0x1D38, 0x2502, 0x1D39,
- 0x2503, 0x1D3A, 0x2504, 0x1D3B, 0x2505, 0x1D3C, 0x2506, 0x1D3D,
- 0x2507, 0x1D3E, 0x2508, 0x1D3F, 0x2509, 0x1D40, 0x250A, 0x1D41,
- 0x250B, 0x1D42, 0x250C, 0x1D43, 0x250D, 0x1D44, 0x250E, 0x1D45,
- 0x250F, 0x1D46, 0x2510, 0x1D47, 0x2511, 0x1D48, 0x2512, 0x1D49,
- 0x2513, 0x1D4A, 0x2514, 0x1D4B, 0x2515, 0x1D4C, 0x2516, 0x1D4D,
- 0x2517, 0x1D4E, 0x2518, 0x1D4F, 0x2519, 0x1D50, 0x251A, 0x1D51,
- 0x251B, 0x1D52, 0x251C, 0x1D53, 0x251D, 0x1D54, 0x251E, 0x1D55,
- 0x251F, 0x1D56, 0x2520, 0x1D57, 0x2521, 0x1D58, 0x2522, 0x1D59,
- 0x2523, 0x1D5A, 0x2524, 0x1D5B, 0x2525, 0x1D5C, 0x2526, 0x1D5D,
- 0x2527, 0x1D5E, 0x2528, 0x1D5F, 0x2529, 0x1D60, 0x252A, 0x1D61,
- 0x252B, 0x1D62, 0x252C, 0x1D63, 0x252D, 0x1D64, 0x252E, 0x1D65,
- 0x252F, 0x1D66, 0x2530, 0x1D67, 0x2531, 0x1D68, 0x2532, 0x1D69,
- 0x2533, 0x1D6A, 0x2534, 0x1D6B, 0x2535, 0x1D6C, 0x2536, 0x1D6D,
- 0x2537, 0x1D6E, 0x2538, 0x1D6F, 0x2539, 0x1D70, 0x253A, 0x1D71,
- 0x253B, 0x1D72, 0x253C, 0x1D73, 0x253D, 0x1D74, 0x253E, 0x1D75,
- 0x253F, 0x1D76, 0x2540, 0x1D77, 0x2541, 0x1D78, 0x2542, 0x1D79,
- 0x2543, 0x1D7A, 0x2544, 0x1D7B, 0x2545, 0x1D7C, 0x2546, 0x1D7D,
- 0x2547, 0x1D7E, 0x2548, 0x1D7F, 0x2549, 0x1D80, 0x254A, 0x1D81,
- 0x254B, 0x1D82, 0x2550, 0x203B, 0x255E, 0x203C, 0x2561, 0x203E,
- 0x256A, 0x203D, 0x256D, 0x2037, 0x256E, 0x2038, 0x256F, 0x203A,
- 0x2570, 0x2039, 0x2571, 0x2045, 0x2572, 0x2046, 0x2573, 0x2047,
- 0x2581, 0x2026, 0x2582, 0x2027, 0x2583, 0x2028, 0x2584, 0x2029,
- 0x2585, 0x202A, 0x2586, 0x202B, 0x2587, 0x202C, 0x2588, 0x202D,
- 0x2589, 0x2034, 0x258A, 0x2033, 0x258B, 0x2032, 0x258C, 0x2031,
- 0x258D, 0x2030, 0x258E, 0x202F, 0x258F, 0x202E, 0x2594, 0x2035,
- 0x2595, 0x2036, 0x25A0, 0x02D9, 0x25A1, 0x02D8, 0x25A2, 0x1F4F,
- 0x25AA, 0x2FCF, 0x25AB, 0x2FCD, 0x25B2, 0x02DB, 0x25B3, 0x02DA,
- 0x25B6, 0x2FA3, 0x25B7, 0x1F4A, 0x25BC, 0x02DD, 0x25BD, 0x02DC,
- 0x25C0, 0x2FA2, 0x25C1, 0x1F49, 0x25C6, 0x02D7, 0x25C7, 0x02D6,
- 0x25C9, 0x2012, 0x25CB, 0x02D3, 0x25CC, 0x2906, 0x25CE, 0x02D5,
- 0x25CF, 0x02D4, 0x25E2, 0x203F, 0x25E3, 0x2040, 0x25E4, 0x2042,
- 0x25E5, 0x2041, 0x25E6, 0x2FDE, 0x25EF, 0x030B, 0x2600, 0x2017,
- 0x2601, 0x2018, 0x2602, 0x2019, 0x2603, 0x201A, 0x2605, 0x02D2,
- 0x2606, 0x02D1, 0x260E, 0x1F78, 0x2612, 0x2F99, 0x261C, 0x201C,
- 0x261D, 0x201D, 0x261E, 0x201B, 0x261F, 0x201E, 0x2640, 0x02C2,
- 0x2642, 0x02C1, 0x2660, 0x2013, 0x2661, 0x1F51, 0x2662, 0x1F53,
- 0x2663, 0x2015, 0x2664, 0x1F52, 0x2665, 0x2014, 0x2666, 0x2016,
- 0x2667, 0x1F50, 0x2668, 0x2F42, 0x2669, 0x2F43, 0x266A, 0x0307,
- 0x266C, 0x2F44, 0x266D, 0x0306, 0x266F, 0x0305, 0x2702, 0x2F90,
- 0x271A, 0x2FD1, 0x2756, 0x2FE3, 0x2776, 0x205E, 0x2777, 0x205F,
- 0x2778, 0x2060, 0x2779, 0x2061, 0x277A, 0x2062, 0x277B, 0x2063,
- 0x277C, 0x2064, 0x277D, 0x2065, 0x277E, 0x2066, 0x27A1, 0x200E,
- 0x2E83, 0x37E1, 0x2E85, 0x3620, 0x2E87, 0x3719, 0x2E89, 0x3814,
- 0x2E8B, 0x371E, 0x2E8C, 0x3609, 0x2E8D, 0x360A, 0x2E8E, 0x1071,
- 0x2E8F, 0x388C, 0x2E90, 0x1226, 0x2E92, 0x0EB2, 0x2E93, 0x1283,
- 0x2E94, 0x12AB, 0x2E95, 0x3C1F, 0x2E96, 0x38C2, 0x2E97, 0x361C,
- 0x2E98, 0x38E1, 0x2E99, 0x13C3, 0x2E9B, 0x13E1, 0x2E9F, 0x0E3C,
- 0x2EA0, 0x0EBD, 0x2EA1, 0x3961, 0x2EA2, 0x3962, 0x2EA3, 0x399D,
- 0x2EA4, 0x3C26, 0x2EA6, 0x374D, 0x2EA8, 0x39BC, 0x2EA9, 0x35A1,
- 0x2EAA, 0x36AB, 0x2EAB, 0x3A97, 0x2EAC, 0x08D4, 0x2EAD, 0x3A39,
- 0x2EAE, 0x3662, 0x2EB1, 0x3A98, 0x2EB2, 0x3A97, 0x2EB3, 0x376D,
- 0x2EB7, 0x36FE, 0x2EB9, 0x3713, 0x2EBC, 0x35B3, 0x2EBD, 0x354E,
- 0x2EBE, 0x3775, 0x2EBF, 0x3776, 0x2EC0, 0x3777, 0x2EC1, 0x078B,
- 0x2EC2, 0x3B0A, 0x2EC3, 0x362E, 0x2EC4, 0x0A62, 0x2EC6, 0x3572,
- 0x2ECA, 0x364A, 0x2ECC, 0x3C2B, 0x2ECD, 0x3B50, 0x2ECF, 0x3B9E,
- 0x2ED1, 0x0BD5, 0x2ED2, 0x3B97, 0x2ED6, 0x3B9E, 0x2ED7, 0x354D,
- 0x2ED8, 0x0A68, 0x2EDD, 0x3617, 0x2EDE, 0x3619, 0x2EDF, 0x3618,
- 0x2EE4, 0x064E, 0x2EE8, 0x0D34, 0x2EE9, 0x052B, 0x2EEB, 0x0A6A,
- 0x2EED, 0x08C3, 0x2EEF, 0x0F7D, 0x2EF2, 0x064F, 0x2F00, 0x04B0,
- 0x2F01, 0x20B3, 0x2F02, 0x0FFF, 0x2F03, 0x1001, 0x2F04, 0x0535,
- 0x2F05, 0x1006, 0x2F06, 0x0CCB, 0x2F07, 0x100E, 0x2F08, 0x0A13,
- 0x2F09, 0x1070, 0x2F0A, 0x0CD6, 0x2F0B, 0x0D40, 0x2F0C, 0x107B,
- 0x2F0D, 0x1083, 0x2F0E, 0x1089, 0x2F0F, 0x1093, 0x2F10, 0x1098,
- 0x2F11, 0x0C5B, 0x2F12, 0x0F97, 0x2F13, 0x10C6, 0x2F14, 0x10CD,
- 0x2F15, 0x10CE, 0x2F16, 0x10D3, 0x2F17, 0x0947, 0x2F18, 0x0E7C,
- 0x2F19, 0x10DC, 0x2F1A, 0x10E1, 0x2F1B, 0x10E8, 0x2F1C, 0x0EA2,
- 0x2F1D, 0x07B1, 0x2F1E, 0x116B, 0x2F1F, 0x0C54, 0x2F20, 0x089C,
- 0x2F21, 0x11BA, 0x2F22, 0x11BB, 0x2F23, 0x0F26, 0x2F24, 0x0B47,
- 0x2F25, 0x0981, 0x2F26, 0x08A0, 0x2F27, 0x120E, 0x2F28, 0x0A47,
- 0x2F29, 0x0996, 0x2F2A, 0x1226, 0x2F2B, 0x1228, 0x2F2C, 0x1232,
- 0x2F2D, 0x0881, 0x2F2E, 0x126C, 0x2F2F, 0x07BB, 0x2F30, 0x077E,
- 0x2F31, 0x06CA, 0x2F32, 0x05EF, 0x2F33, 0x1283, 0x2F34, 0x1285,
- 0x2F35, 0x1299, 0x2F36, 0x129B, 0x2F37, 0x12A0, 0x2F38, 0x0677,
- 0x2F39, 0x38B9, 0x2F3A, 0x12AF, 0x2F3B, 0x12B1, 0x2F3C, 0x09FA,
- 0x2F3D, 0x1342, 0x2F3E, 0x0781, 0x2F3F, 0x0916, 0x2F40, 0x08A7,
- 0x2F41, 0x13C2, 0x2F42, 0x0E08, 0x2F43, 0x0C47, 0x2F44, 0x06CC,
- 0x2F45, 0x0E4D, 0x2F46, 0x13E0, 0x2F47, 0x0CD4, 0x2F48, 0x140C,
- 0x2F49, 0x0744, 0x2F4A, 0x0EE6, 0x2F4B, 0x073D, 0x2F4C, 0x08AD,
- 0x2F4D, 0x14E5, 0x2F4E, 0x14F4, 0x2F4F, 0x14F8, 0x2F50, 0x0D7A,
- 0x2F51, 0x0EDF, 0x2F52, 0x08AF, 0x2F53, 0x1502, 0x2F54, 0x0A2B,
- 0x2F55, 0x0550, 0x2F56, 0x0BFA, 0x2F57, 0x0DD5, 0x2F58, 0x15E4,
- 0x2F59, 0x15E6, 0x2F5A, 0x0E22, 0x2F5B, 0x0567, 0x2F5C, 0x0687,
- 0x2F5D, 0x0758, 0x2F5E, 0x0770, 0x2F5F, 0x06C4, 0x2F60, 0x04DD,
- 0x2F61, 0x05E0, 0x2F62, 0x0601, 0x2F63, 0x0A5C, 0x2F64, 0x0F3B,
- 0x2F65, 0x0C3E, 0x2F66, 0x0D97, 0x2F67, 0x3A00, 0x2F68, 0x1697,
- 0x2F69, 0x0D28, 0x2F6A, 0x0D7D, 0x2F6B, 0x087C, 0x2F6C, 0x0EE8,
- 0x2F6D, 0x0EC3, 0x2F6E, 0x0EFC, 0x2F6F, 0x0A74, 0x2F70, 0x08D4,
- 0x2F71, 0x3A41, 0x2F72, 0x0553, 0x2F73, 0x0740, 0x2F74, 0x0F71,
- 0x2F75, 0x0B9B, 0x2F76, 0x0E16, 0x2F77, 0x08B3, 0x2F78, 0x0608,
- 0x2F79, 0x1813, 0x2F7A, 0x0F3D, 0x2F7B, 0x04CB, 0x2F7C, 0x0FDD,
- 0x2F7D, 0x08D5, 0x2F7E, 0x183D, 0x2F7F, 0x08D6, 0x2F80, 0x1853,
- 0x2F81, 0x0CD1, 0x2F82, 0x0A09, 0x2F83, 0x08D7, 0x2F84, 0x08B8,
- 0x2F85, 0x04D3, 0x2F86, 0x0A89, 0x2F87, 0x0AA6, 0x2F88, 0x0938,
- 0x2F89, 0x0821, 0x2F8A, 0x09ED, 0x2F8B, 0x18B2, 0x2F8C, 0x194F,
- 0x2F8D, 0x0BAC, 0x2F8E, 0x0742, 0x2F8F, 0x07E6, 0x2F90, 0x04A5,
- 0x2F91, 0x19EB, 0x2F92, 0x075F, 0x2F93, 0x05AF, 0x2F94, 0x0774,
- 0x2F95, 0x0B69, 0x2F96, 0x0C7E, 0x2F97, 0x1A56, 0x2F98, 0x1A59,
- 0x2F99, 0x058B, 0x2F9A, 0x0A7A, 0x2F9B, 0x0AF8, 0x2F9C, 0x0B0D,
- 0x2F9D, 0x0A0E, 0x2F9E, 0x0902, 0x2F9F, 0x0A0F, 0x2FA0, 0x0B62,
- 0x2FA1, 0x3B4F, 0x2FA2, 0x0F22, 0x2FA3, 0x0CAB, 0x2FA4, 0x0D64,
- 0x2FA5, 0x0F6C, 0x2FA6, 0x06DA, 0x2FA7, 0x0BD5, 0x2FA8, 0x0EF3,
- 0x2FA9, 0x0DDE, 0x2FAA, 0x1BC9, 0x2FAB, 0x1BCB, 0x2FAC, 0x04CD,
- 0x2FAD, 0x21F7, 0x2FAE, 0x0D87, 0x2FAF, 0x0ED8, 0x2FB0, 0x05B5,
- 0x2FB1, 0x1C03, 0x2FB2, 0x1C05, 0x2FB3, 0x053B, 0x2FB4, 0x0E17,
- 0x2FB5, 0x0DE9, 0x2FB6, 0x0D88, 0x2FB7, 0x09EF, 0x2FB8, 0x091F,
- 0x2FB9, 0x07F3, 0x2FBA, 0x0D05, 0x2FBB, 0x080E, 0x2FBC, 0x07F4,
- 0x2FBD, 0x1C6C, 0x2FBE, 0x1C7D, 0x2FBF, 0x1C83, 0x2FC0, 0x1C84,
- 0x2FC1, 0x064E, 0x2FC2, 0x0695, 0x2FC3, 0x0BD7, 0x2FC4, 0x1CF6,
- 0x2FC5, 0x08DB, 0x2FC6, 0x1D01, 0x2FC7, 0x0E91, 0x2FC8, 0x340B,
- 0x2FC9, 0x066A, 0x2FCA, 0x0807, 0x2FCB, 0x1D16, 0x2FCC, 0x1D19,
- 0x2FCD, 0x0C1E, 0x2FCE, 0x0791, 0x2FCF, 0x0ACF, 0x2FD0, 0x0D93,
- 0x2FD1, 0x1D21, 0x2FD2, 0x1D22, 0x2FD3, 0x0F7E, 0x2FD4, 0x1D30,
- 0x2FD5, 0x1D31, 0x3000, 0x0279, 0x3001, 0x027A, 0x3002, 0x027B,
- 0x3003, 0x028F, 0x3004, 0x2074, 0x3005, 0x0291, 0x3006, 0x0292,
- 0x3007, 0x0293, 0x3008, 0x02AA, 0x3009, 0x02AB, 0x300A, 0x02AC,
- 0x300B, 0x02AD, 0x300C, 0x02AE, 0x300D, 0x02AF, 0x300E, 0x02B0,
- 0x300F, 0x02B1, 0x3010, 0x02B2, 0x3011, 0x02B3, 0x3012, 0x02DF,
- 0x3013, 0x02E4, 0x3014, 0x02A4, 0x3015, 0x02A5, 0x301C, 0x0299,
- 0x301D, 0x1DB8, 0x301F, 0x1DB9, 0x3020, 0x1F7A, 0x3030, 0x2FBA,
- 0x3033, 0x2F4C, 0x3034, 0x2F4D, 0x3035, 0x2F4E, 0x3036, 0x1F79,
- 0x3041, 0x034A, 0x3042, 0x034B, 0x3043, 0x034C, 0x3044, 0x034D,
- 0x3045, 0x034E, 0x3046, 0x034F, 0x3047, 0x0350, 0x3048, 0x0351,
- 0x3049, 0x0352, 0x304A, 0x0353, 0x304B, 0x0354, 0x304C, 0x0355,
- 0x304D, 0x0356, 0x304E, 0x0357, 0x304F, 0x0358, 0x3050, 0x0359,
- 0x3051, 0x035A, 0x3052, 0x035B, 0x3053, 0x035C, 0x3054, 0x035D,
- 0x3055, 0x035E, 0x3056, 0x035F, 0x3057, 0x0360, 0x3058, 0x0361,
- 0x3059, 0x0362, 0x305A, 0x0363, 0x305B, 0x0364, 0x305C, 0x0365,
- 0x305D, 0x0366, 0x305E, 0x0367, 0x305F, 0x0368, 0x3060, 0x0369,
- 0x3061, 0x036A, 0x3062, 0x036B, 0x3063, 0x036C, 0x3064, 0x036D,
- 0x3065, 0x036E, 0x3066, 0x036F, 0x3067, 0x0370, 0x3068, 0x0371,
- 0x3069, 0x0372, 0x306A, 0x0373, 0x306B, 0x0374, 0x306C, 0x0375,
- 0x306D, 0x0376, 0x306E, 0x0377, 0x306F, 0x0378, 0x3070, 0x0379,
- 0x3071, 0x037A, 0x3072, 0x037B, 0x3073, 0x037C, 0x3074, 0x037D,
- 0x3075, 0x037E, 0x3076, 0x037F, 0x3077, 0x0380, 0x3078, 0x0381,
- 0x3079, 0x0382, 0x307A, 0x0383, 0x307B, 0x0384, 0x307C, 0x0385,
- 0x307D, 0x0386, 0x307E, 0x0387, 0x307F, 0x0388, 0x3080, 0x0389,
- 0x3081, 0x038A, 0x3082, 0x038B, 0x3083, 0x038C, 0x3084, 0x038D,
- 0x3085, 0x038E, 0x3086, 0x038F, 0x3087, 0x0390, 0x3088, 0x0391,
- 0x3089, 0x0392, 0x308A, 0x0393, 0x308B, 0x0394, 0x308C, 0x0395,
- 0x308D, 0x0396, 0x308E, 0x0397, 0x308F, 0x0398, 0x3090, 0x0399,
- 0x3091, 0x039A, 0x3092, 0x039B, 0x3093, 0x039C, 0x3094, 0x1F16,
- 0x309B, 0x0283, 0x309C, 0x0284, 0x309D, 0x028D, 0x309E, 0x028E,
- 0x30A1, 0x039D, 0x30A2, 0x039E, 0x30A3, 0x039F, 0x30A4, 0x03A0,
- 0x30A5, 0x03A1, 0x30A6, 0x03A2, 0x30A7, 0x03A3, 0x30A8, 0x03A4,
- 0x30A9, 0x03A5, 0x30AA, 0x03A6, 0x30AB, 0x03A7, 0x30AC, 0x03A8,
- 0x30AD, 0x03A9, 0x30AE, 0x03AA, 0x30AF, 0x03AB, 0x30B0, 0x03AC,
- 0x30B1, 0x03AD, 0x30B2, 0x03AE, 0x30B3, 0x03AF, 0x30B4, 0x03B0,
- 0x30B5, 0x03B1, 0x30B6, 0x03B2, 0x30B7, 0x03B3, 0x30B8, 0x03B4,
- 0x30B9, 0x03B5, 0x30BA, 0x03B6, 0x30BB, 0x03B7, 0x30BC, 0x03B8,
- 0x30BD, 0x03B9, 0x30BE, 0x03BA, 0x30BF, 0x03BB, 0x30C0, 0x03BC,
- 0x30C1, 0x03BD, 0x30C2, 0x03BE, 0x30C3, 0x03BF, 0x30C4, 0x03C0,
- 0x30C5, 0x03C1, 0x30C6, 0x03C2, 0x30C7, 0x03C3, 0x30C8, 0x03C4,
- 0x30C9, 0x03C5, 0x30CA, 0x03C6, 0x30CB, 0x03C7, 0x30CC, 0x03C8,
- 0x30CD, 0x03C9, 0x30CE, 0x03CA, 0x30CF, 0x03CB, 0x30D0, 0x03CC,
- 0x30D1, 0x03CD, 0x30D2, 0x03CE, 0x30D3, 0x03CF, 0x30D4, 0x03D0,
- 0x30D5, 0x03D1, 0x30D6, 0x03D2, 0x30D7, 0x03D3, 0x30D8, 0x03D4,
- 0x30D9, 0x03D5, 0x30DA, 0x03D6, 0x30DB, 0x03D7, 0x30DC, 0x03D8,
- 0x30DD, 0x03D9, 0x30DE, 0x03DA, 0x30DF, 0x03DB, 0x30E0, 0x03DC,
- 0x30E1, 0x03DD, 0x30E2, 0x03DE, 0x30E3, 0x03DF, 0x30E4, 0x03E0,
- 0x30E5, 0x03E1, 0x30E6, 0x03E2, 0x30E7, 0x03E3, 0x30E8, 0x03E4,
- 0x30E9, 0x03E5, 0x30EA, 0x03E6, 0x30EB, 0x03E7, 0x30EC, 0x03E8,
- 0x30ED, 0x03E9, 0x30EE, 0x03EA, 0x30EF, 0x03EB, 0x30F0, 0x03EC,
- 0x30F1, 0x03ED, 0x30F2, 0x03EE, 0x30F3, 0x03EF, 0x30F4, 0x03F0,
- 0x30F5, 0x03F1, 0x30F6, 0x03F2, 0x30F7, 0x2079, 0x30F8, 0x207A,
- 0x30F9, 0x207B, 0x30FA, 0x207C, 0x30FB, 0x027E, 0x30FC, 0x0294,
- 0x30FD, 0x028B, 0x30FE, 0x028C, 0x3220, 0x278E, 0x3221, 0x278F,
- 0x3222, 0x2790, 0x3223, 0x2791, 0x3224, 0x2792, 0x3225, 0x2793,
- 0x3226, 0x2794, 0x3227, 0x2795, 0x3228, 0x2796, 0x3229, 0x2797,
- 0x322A, 0x2006, 0x322B, 0x2007, 0x322C, 0x2008, 0x322D, 0x2009,
- 0x322E, 0x200A, 0x322F, 0x200B, 0x3230, 0x2005, 0x3231, 0x1DC2,
- 0x3232, 0x1DC3, 0x3233, 0x1FCF, 0x3234, 0x1FCD, 0x3235, 0x1FD4,
- 0x3236, 0x1FD3, 0x3237, 0x200C, 0x3238, 0x1FCE, 0x3239, 0x1DC4,
- 0x323A, 0x1FD7, 0x323B, 0x1FD5, 0x323C, 0x1FD0, 0x323D, 0x1FCB,
- 0x323E, 0x1FD2, 0x323F, 0x1FCC, 0x3240, 0x1FD6, 0x3241, 0x200D,
- 0x3242, 0x1FD1, 0x3243, 0x1FCA, 0x3280, 0x28DD, 0x3281, 0x28DE,
- 0x3282, 0x28DF, 0x3283, 0x28E0, 0x3284, 0x28E1, 0x3285, 0x28E2,
- 0x3286, 0x28E3, 0x3287, 0x28E4, 0x3288, 0x28E5, 0x3289, 0x28E6,
- 0x328A, 0x28E8, 0x328B, 0x28E9, 0x328C, 0x28EA, 0x328D, 0x28EB,
- 0x328E, 0x28EC, 0x328F, 0x28ED, 0x3290, 0x28E7, 0x3291, 0x1FE1,
- 0x3292, 0x1FE0, 0x3293, 0x1FE2, 0x3294, 0x1FDC, 0x3295, 0x28FF,
- 0x3296, 0x1FE5, 0x3297, 0x28FC, 0x3298, 0x1FDE, 0x3299, 0x201F,
- 0x329A, 0x28F9, 0x329B, 0x28F8, 0x329C, 0x28FE, 0x329D, 0x207F,
- 0x329E, 0x1FFF, 0x329F, 0x28EF, 0x32A0, 0x28F6, 0x32A1, 0x28F7,
- 0x32A2, 0x28FB, 0x32A3, 0x28FA, 0x32A4, 0x1DBD, 0x32A5, 0x1DBE,
- 0x32A6, 0x1DBF, 0x32A7, 0x1DC0, 0x32A8, 0x1DC1, 0x32A9, 0x1FDA,
- 0x32AA, 0x1FDD, 0x32AB, 0x1FDF, 0x32AC, 0x1FE3, 0x32AD, 0x1FD9,
- 0x32AE, 0x1FE4, 0x32AF, 0x1FDB, 0x32B0, 0x1FD8, 0x32D0, 0x28AD,
- 0x32D1, 0x28AE, 0x32D2, 0x28AF, 0x32D3, 0x28B0, 0x32D4, 0x28B1,
- 0x32D5, 0x28B2, 0x32D6, 0x28B3, 0x32D7, 0x28B4, 0x32D8, 0x28B5,
- 0x32D9, 0x28B6, 0x32DA, 0x28B7, 0x32DB, 0x28B8, 0x32DC, 0x28B9,
- 0x32DD, 0x28BA, 0x32DE, 0x28BB, 0x32DF, 0x28BC, 0x32E0, 0x28BD,
- 0x32E1, 0x28BE, 0x32E2, 0x28BF, 0x32E3, 0x28C0, 0x32E4, 0x28C1,
- 0x32E5, 0x28C2, 0x32E6, 0x28C3, 0x32E7, 0x28C4, 0x32E8, 0x28C5,
- 0x32E9, 0x28C6, 0x32EA, 0x28C7, 0x32EB, 0x28C8, 0x32EC, 0x28C9,
- 0x32ED, 0x28CA, 0x32EE, 0x28CB, 0x32EF, 0x28CC, 0x32F0, 0x28CD,
- 0x32F1, 0x28CE, 0x32F2, 0x28CF, 0x32F3, 0x28D0, 0x32F4, 0x28D1,
- 0x32F5, 0x28D2, 0x32F6, 0x28D3, 0x32F7, 0x28D4, 0x32F8, 0x28D5,
- 0x32F9, 0x28D6, 0x32FA, 0x28D7, 0x32FB, 0x28D8, 0x32FC, 0x28D9,
- 0x32FD, 0x28DA, 0x32FE, 0x28DB, 0x3300, 0x1F70, 0x3301, 0x2E62,
- 0x3302, 0x2E63, 0x3303, 0x1F6A, 0x3304, 0x2E64, 0x3305, 0x1FF7,
- 0x3306, 0x2E65, 0x3307, 0x2E69, 0x3308, 0x2E67, 0x3309, 0x2E6C,
- 0x330A, 0x2E6A, 0x330B, 0x2E6E, 0x330C, 0x2E70, 0x330D, 0x1DAB,
- 0x330E, 0x2E71, 0x330F, 0x2E72, 0x3310, 0x2E73, 0x3311, 0x2E74,
- 0x3312, 0x2E75, 0x3313, 0x2E76, 0x3314, 0x1DA2, 0x3315, 0x1F69,
- 0x3316, 0x1F67, 0x3317, 0x2E78, 0x3318, 0x1F68, 0x3319, 0x2E7A,
- 0x331A, 0x2E7C, 0x331B, 0x2E7D, 0x331C, 0x2E7E, 0x331D, 0x2E7F,
- 0x331E, 0x1F73, 0x331F, 0x2E80, 0x3320, 0x2E81, 0x3321, 0x2E82,
- 0x3322, 0x1F66, 0x3323, 0x1F6B, 0x3324, 0x2E83, 0x3325, 0x2E85,
- 0x3326, 0x1DAC, 0x3327, 0x1DA6, 0x3328, 0x2E88, 0x3329, 0x2E89,
- 0x332A, 0x1F74, 0x332B, 0x1DAE, 0x332D, 0x2E8B, 0x332E, 0x2E8E,
- 0x332F, 0x2E8F, 0x3330, 0x2E90, 0x3331, 0x1F71, 0x3332, 0x2E91,
- 0x3333, 0x2087, 0x3334, 0x2E94, 0x3335, 0x2E95, 0x3336, 0x1DA8,
- 0x3337, 0x2E9A, 0x3338, 0x2E9C, 0x3339, 0x1F6E, 0x333A, 0x2E9D,
- 0x333B, 0x1F6F, 0x333C, 0x2E96, 0x333D, 0x2E9E, 0x333E, 0x2EA0,
- 0x333F, 0x2EA1, 0x3340, 0x2EA2, 0x3341, 0x2E9F, 0x3342, 0x1F6D,
- 0x3343, 0x2EA3, 0x3344, 0x2EA4, 0x3345, 0x2EA5, 0x3346, 0x2EA6,
- 0x3347, 0x1F72, 0x3348, 0x2EA7, 0x3349, 0x1DA1, 0x334A, 0x1DAF,
- 0x334B, 0x2EA8, 0x334C, 0x2EA9, 0x334D, 0x1DA4, 0x334E, 0x2088,
- 0x334F, 0x2EAA, 0x3350, 0x2EAB, 0x3351, 0x1DA9, 0x3352, 0x2EAE,
- 0x3353, 0x2EB2, 0x3354, 0x2EAF, 0x3355, 0x2EB3, 0x3356, 0x2EB4,
- 0x3357, 0x1F6C, 0x3371, 0x2E55, 0x337B, 0x2083, 0x337C, 0x1DC7,
- 0x337D, 0x1DC6, 0x337E, 0x1DC5, 0x337F, 0x1F76, 0x3385, 0x1F5F,
- 0x3386, 0x1F60, 0x3387, 0x1F61, 0x3388, 0x2000, 0x3389, 0x2001,
- 0x338D, 0x2E58, 0x338E, 0x1DB4, 0x338F, 0x1DB5, 0x3390, 0x1F63,
- 0x3396, 0x1F65, 0x3397, 0x1F58, 0x3398, 0x1F5A, 0x339B, 0x2E59,
- 0x339C, 0x1DB1, 0x339D, 0x1DB2, 0x339E, 0x1DB3, 0x339F, 0x1FFA,
- 0x33A0, 0x1F54, 0x33A1, 0x1DB7, 0x33A2, 0x1F55, 0x33A3, 0x1FFB,
- 0x33A4, 0x1F56, 0x33A5, 0x1F57, 0x33A6, 0x1FFC, 0x33B0, 0x1F5E,
- 0x33B1, 0x1F5D, 0x33B2, 0x1F5C, 0x33B3, 0x1F5B, 0x33C2, 0x2E50,
- 0x33C4, 0x1DB6, 0x33C8, 0x2002, 0x33CB, 0x1F62, 0x33CC, 0x1FF6,
- 0x33CD, 0x1DBB, 0x33D4, 0x1F64, 0x33D7, 0x2E5D, 0x33D8, 0x2E5E,
- 0x33DA, 0x2E4B, 0x3402, 0x3582, 0x3405, 0x3C1B, 0x3427, 0x3656,
- 0x3488, 0x3C52, 0x34DB, 0x3C41, 0x351F, 0x3629, 0x353E, 0x371E,
- 0x378D, 0x361A, 0x37E2, 0x372B, 0x3AF3, 0x3C40, 0x3B22, 0x3C49,
- 0x3B88, 0x368D, 0x3E8A, 0x3C43, 0x3EDA, 0x3C48, 0x3FB1, 0x3754,
- 0x4093, 0x3C4C, 0x4103, 0x3C4F, 0x4264, 0x3760, 0x4293, 0x3C50,
- 0x440C, 0x3C42, 0x4453, 0x3773, 0x457A, 0x3C4B, 0x4665, 0x3C4E,
- 0x46AE, 0x3C51, 0x4BE8, 0x3C46, 0x4E00, 0x04B0, 0x4E01, 0x0BB8,
- 0x4E03, 0x08E3, 0x4E04, 0x37D8, 0x4E05, 0x37D9, 0x4E07, 0x0EAA,
- 0x4E08, 0x09CE, 0x4E09, 0x087E, 0x4E0A, 0x09CD, 0x4E0B, 0x053C,
- 0x4E0D, 0x0DC6, 0x4E0E, 0x0F29, 0x4E10, 0x0FFB, 0x4E11, 0x04D1,
- 0x4E14, 0x05CC, 0x4E15, 0x0FFC, 0x4E16, 0x0A48, 0x4E17, 0x10D7,
- 0x4E18, 0x0670, 0x4E19, 0x0E0A, 0x4E1E, 0x09CF, 0x4E1F, 0x37DA,
- 0x4E21, 0x0F86, 0x4E26, 0x0E12, 0x4E28, 0x20B3, 0x4E2A, 0x0FFD,
- 0x4E2B, 0x37DB, 0x4E2C, 0x374D, 0x4E2D, 0x0BA4, 0x4E2F, 0x37DC,
- 0x4E30, 0x37DD, 0x4E31, 0x0FFE, 0x4E32, 0x06F2, 0x4E36, 0x0FFF,
- 0x4E37, 0x369D, 0x4E38, 0x0619, 0x4E39, 0x0B6E, 0x4E3B, 0x0913,
- 0x4E3C, 0x1000, 0x4E3F, 0x1001, 0x4E40, 0x37DE, 0x4E41, 0x37DF,
- 0x4E42, 0x1002, 0x4E43, 0x0CEB, 0x4E44, 0x37E0, 0x4E45, 0x0671,
- 0x4E48, 0x372E, 0x4E4B, 0x0CED, 0x4E4D, 0x0CBB, 0x4E4E, 0x0777,
- 0x4E4F, 0x0E61, 0x4E55, 0x1950, 0x4E56, 0x1003, 0x4E57, 0x09D0,
- 0x4E58, 0x1004, 0x4E59, 0x0535, 0x4E5A, 0x37E1, 0x4E5D, 0x06DD,
- 0x4E5E, 0x07A4, 0x4E5F, 0x0EF5, 0x4E62, 0x1233, 0x4E71, 0x0F5A,
- 0x4E73, 0x0CD5, 0x4E7E, 0x05E1, 0x4E7F, 0x37E2, 0x4E80, 0x064F,
- 0x4E82, 0x1005, 0x4E85, 0x1006, 0x4E86, 0x0F83, 0x4E88, 0x0F27,
- 0x4E89, 0x0AEA, 0x4E8A, 0x1008, 0x4E8B, 0x08C4, 0x4E8C, 0x0CCB,
- 0x4E8D, 0x37E3, 0x4E8E, 0x100B, 0x4E91, 0x04E0, 0x4E92, 0x0793,
- 0x4E94, 0x0792, 0x4E95, 0x04AA, 0x4E96, 0x37E4, 0x4E98, 0x0FF1,
- 0x4E99, 0x0FF0, 0x4E9B, 0x0823, 0x4E9C, 0x0465, 0x4E9E, 0x100C,
- 0x4E9F, 0x100D, 0x4EA0, 0x100E, 0x4EA1, 0x0E62, 0x4EA2, 0x100F,
- 0x4EA4, 0x07A6, 0x4EA5, 0x04AB, 0x4EA6, 0x0EA0, 0x4EA8, 0x0696,
- 0x4EAB, 0x0697, 0x4EAC, 0x0698, 0x4EAD, 0x0BFE, 0x4EAE, 0x0F84,
- 0x4EB0, 0x1010, 0x4EB3, 0x1011, 0x4EB6, 0x1012, 0x4EB9, 0x37E5,
- 0x4EBA, 0x0A13, 0x4EBB, 0x3620, 0x4EC0, 0x0944, 0x4EC1, 0x0A14,
- 0x4EC2, 0x1017, 0x4EC4, 0x1015, 0x4EC6, 0x1016, 0x4EC7, 0x0672,
- 0x4ECA, 0x0813, 0x4ECB, 0x0570, 0x4ECD, 0x1014, 0x4ECE, 0x1013,
- 0x4ECF, 0x0DF9, 0x4ED0, 0x37E6, 0x4ED4, 0x0894, 0x4ED5, 0x0893,
- 0x4ED6, 0x0B1E, 0x4ED7, 0x1018, 0x4ED8, 0x0DC7, 0x4ED9, 0x0A8B,
- 0x4EDD, 0x0290, 0x4EDE, 0x1019, 0x4EDF, 0x101B, 0x4EE0, 0x37E7,
- 0x4EE1, 0x20B4, 0x4EE3, 0x0B45, 0x4EE4, 0x0FA9, 0x4EE5, 0x048E,
- 0x4EED, 0x101A, 0x4EEE, 0x053E, 0x4EF0, 0x06BC, 0x4EF2, 0x0BA5,
- 0x4EF6, 0x0745, 0x4EF7, 0x101C, 0x4EFB, 0x0CDA, 0x4EFC, 0x20B5,
- 0x4EFD, 0x37E8, 0x4EFF, 0x37E9, 0x4F00, 0x20B6, 0x4F01, 0x0627,
- 0x4F03, 0x20B7, 0x4F09, 0x101D, 0x4F0A, 0x048F, 0x4F0B, 0x37EA,
- 0x4F0D, 0x0794, 0x4F0E, 0x0628, 0x4F0F, 0x0DEC, 0x4F10, 0x0D46,
- 0x4F11, 0x0673, 0x4F15, 0x37EB, 0x4F1A, 0x0571, 0x4F1C, 0x1040,
- 0x4F1D, 0x0C3B, 0x4F2F, 0x0D22, 0x4F30, 0x101F, 0x4F34, 0x0D50,
- 0x4F36, 0x0FAA, 0x4F38, 0x09F3, 0x4F39, 0x20B8, 0x4F3A, 0x0895,
- 0x4F3B, 0x37ED, 0x4F3C, 0x08C5, 0x4F3D, 0x0540, 0x4F43, 0x0BED,
- 0x4F46, 0x0B60, 0x4F47, 0x1023, 0x4F49, 0x37EE, 0x4F4D, 0x0490,
- 0x4F4E, 0x0BFF, 0x4F4F, 0x0945, 0x4F50, 0x0824, 0x4F51, 0x0F0E,
- 0x4F53, 0x0B2E, 0x4F54, 0x37EF, 0x4F55, 0x053F, 0x4F56, 0x20B9,
- 0x4F57, 0x1022, 0x4F59, 0x0F28, 0x4F5A, 0x101E, 0x4F5B, 0x1020,
- 0x4F5C, 0x085E, 0x4F5D, 0x1021, 0x4F5E, 0x11D3, 0x4F60, 0x37EC,
- 0x4F69, 0x1029, 0x4F6F, 0x102C, 0x4F70, 0x102A, 0x4F73, 0x0542,
- 0x4F75, 0x0E0B, 0x4F76, 0x1024, 0x4F7A, 0x37F0, 0x4F7B, 0x1028,
- 0x4F7C, 0x07A7, 0x4F7D, 0x37F1, 0x4F7E, 0x37F2, 0x4F7F, 0x0896,
- 0x4F83, 0x05E2, 0x4F86, 0x102D, 0x4F88, 0x1025, 0x4F8A, 0x20BB,
- 0x4F8B, 0x0FAB, 0x4F8D, 0x08C6, 0x4F8F, 0x1026, 0x4F91, 0x102B,
- 0x4F92, 0x20BA, 0x4F94, 0x20BD, 0x4F96, 0x102E, 0x4F97, 0x37F3,
- 0x4F98, 0x1027, 0x4F9A, 0x20BC, 0x4F9B, 0x0699, 0x4F9D, 0x0491,
- 0x4FA0, 0x069A, 0x4FA1, 0x0541, 0x4FAB, 0x11D4, 0x4FAD, 0x0EA7,
- 0x4FAE, 0x0DE0, 0x4FAF, 0x07A8, 0x4FB5, 0x09F5, 0x4FB6, 0x0F7F,
- 0x4FBE, 0x37F4, 0x4FBF, 0x0E28, 0x4FC2, 0x070E, 0x4FC3, 0x0B05,
- 0x4FC4, 0x0564, 0x4FC9, 0x20AC, 0x4FCA, 0x095D, 0x4FCD, 0x20BE,
- 0x4FCE, 0x1032, 0x4FCF, 0x37F5, 0x4FD0, 0x1037, 0x4FD1, 0x1035,
- 0x4FD3, 0x3C2F, 0x4FD4, 0x1030, 0x4FD7, 0x0B0F, 0x4FD8, 0x1033,
- 0x4FDA, 0x1036, 0x4FDB, 0x1034, 0x4FDD, 0x0E2D, 0x4FDF, 0x1031,
- 0x4FE0, 0x1DEC, 0x4FE1, 0x09F4, 0x4FE3, 0x0EA1, 0x4FE4, 0x1038,
- 0x4FE5, 0x1039, 0x4FEE, 0x092E, 0x4FEF, 0x1046, 0x4FF3, 0x0D06,
- 0x4FF5, 0x0DA8, 0x4FF6, 0x1041, 0x4FF8, 0x0E40, 0x4FFA, 0x0536,
- 0x4FFD, 0x37F6, 0x4FFE, 0x1045, 0x4FFF, 0x20C1, 0x5000, 0x37F7,
- 0x5001, 0x37F8, 0x5002, 0x3447, 0x5005, 0x103F, 0x5006, 0x1048,
- 0x5009, 0x0AD4, 0x500B, 0x0778, 0x500D, 0x0D12, 0x500F, 0x1600,
- 0x5010, 0x37F9, 0x5011, 0x1047, 0x5012, 0x0C57, 0x5014, 0x103C,
- 0x5016, 0x07AA, 0x5019, 0x07A9, 0x501A, 0x103A, 0x501B, 0x37FA,
- 0x501E, 0x20C2, 0x501F, 0x0906, 0x5021, 0x1042, 0x5022, 0x20C0,
- 0x5023, 0x0E3F, 0x5024, 0x0B8B, 0x5025, 0x103E, 0x5026, 0x0747,
- 0x5027, 0x37FB, 0x5028, 0x103B, 0x5029, 0x1043, 0x502A, 0x103D,
- 0x502B, 0x0F99, 0x502C, 0x1044, 0x502D, 0x0FE7, 0x502E, 0x37FC,
- 0x5036, 0x06DE, 0x5039, 0x0746, 0x503B, 0x3800, 0x5040, 0x20BF,
- 0x5042, 0x20C5, 0x5043, 0x1049, 0x5046, 0x20C3, 0x5047, 0x104A,
- 0x5048, 0x104E, 0x5049, 0x0492, 0x504F, 0x0E20, 0x5050, 0x104D,
- 0x5055, 0x104C, 0x5056, 0x1050, 0x5057, 0x37FD, 0x505A, 0x104F,
- 0x505C, 0x0C00, 0x5065, 0x0748, 0x5066, 0x37FE, 0x506A, 0x37FF,
- 0x506C, 0x1051, 0x5070, 0x20C4, 0x5072, 0x08F1, 0x5074, 0x0B06,
- 0x5075, 0x0C01, 0x5076, 0x06EE, 0x5078, 0x1052, 0x507D, 0x0650,
- 0x5080, 0x1053, 0x5085, 0x1055, 0x508D, 0x0E63, 0x508F, 0x3801,
- 0x5091, 0x073C, 0x5094, 0x20C6, 0x5096, 0x3802, 0x5098, 0x087F,
- 0x5099, 0x0D8B, 0x509A, 0x1054, 0x509C, 0x3803, 0x50AC, 0x0835,
- 0x50AD, 0x0F2D, 0x50B2, 0x1057, 0x50B3, 0x105A, 0x50B4, 0x1056,
- 0x50B5, 0x0834, 0x50B7, 0x0987, 0x50BE, 0x070F, 0x50C2, 0x105B,
- 0x50C5, 0x06C7, 0x50C9, 0x1058, 0x50CA, 0x1059, 0x50CC, 0x3804,
- 0x50CD, 0x0C87, 0x50CF, 0x0AFE, 0x50D1, 0x069B, 0x50D5, 0x0E7B,
- 0x50D6, 0x105C, 0x50D8, 0x20C8, 0x50D9, 0x3C30, 0x50DA, 0x0F85,
- 0x50DE, 0x105D, 0x50E3, 0x1060, 0x50E5, 0x105E, 0x50E6, 0x3805,
- 0x50E7, 0x0AD0, 0x50E9, 0x3806, 0x50ED, 0x105F, 0x50EE, 0x1061,
- 0x50EF, 0x3807, 0x50F0, 0x3C31, 0x50F4, 0x20C7, 0x50F5, 0x1063,
- 0x50F9, 0x1062, 0x50FB, 0x0E18, 0x5100, 0x0651, 0x5101, 0x1065,
- 0x5102, 0x1066, 0x5104, 0x052F, 0x5108, 0x3808, 0x5109, 0x1064,
- 0x510B, 0x3809, 0x5110, 0x380A, 0x5112, 0x0920, 0x5114, 0x1069,
- 0x5115, 0x1068, 0x5116, 0x1067, 0x5118, 0x102F, 0x511A, 0x106A,
- 0x511B, 0x380B, 0x511E, 0x380C, 0x511F, 0x0988, 0x5121, 0x106B,
- 0x512A, 0x0F0F, 0x5132, 0x0EE5, 0x5137, 0x106D, 0x513A, 0x106C,
- 0x513B, 0x106F, 0x513C, 0x106E, 0x513F, 0x1070, 0x5140, 0x1071,
- 0x5141, 0x04B8, 0x5143, 0x0769, 0x5144, 0x0711, 0x5145, 0x0946,
- 0x5146, 0x0BB9, 0x5147, 0x069C, 0x5148, 0x0A8C, 0x5149, 0x07AB,
- 0x514A, 0x20C9, 0x514B, 0x0800, 0x514C, 0x1073, 0x514D, 0x0ED4,
- 0x514E, 0x0C40, 0x5150, 0x08C7, 0x5152, 0x1072, 0x5154, 0x1074,
- 0x515A, 0x0C58, 0x515C, 0x05D3, 0x515F, 0x380D, 0x5162, 0x1075,
- 0x5164, 0x20CA, 0x5165, 0x0CD6, 0x5167, 0x368E, 0x5168, 0x0AB6,
- 0x5169, 0x1077, 0x516A, 0x1078, 0x516B, 0x0D40, 0x516C, 0x07AC,
- 0x516D, 0x0FE1, 0x516E, 0x1079, 0x5171, 0x069E, 0x5175, 0x0E0C,
- 0x5176, 0x0B16, 0x5177, 0x06E9, 0x5178, 0x0C2F, 0x5179, 0x3779,
- 0x517C, 0x0749, 0x5180, 0x107A, 0x5182, 0x107B, 0x5185, 0x0CBA,
- 0x5186, 0x0501, 0x5189, 0x107E, 0x518A, 0x086D, 0x518C, 0x107D,
- 0x518D, 0x0836, 0x518F, 0x107F, 0x5190, 0x185B, 0x5191, 0x1080,
- 0x5192, 0x0E6F, 0x5193, 0x1081, 0x5195, 0x1082, 0x5196, 0x1083,
- 0x5197, 0x09D1, 0x5199, 0x08F8, 0x519D, 0x20CB, 0x51A0, 0x05E3,
- 0x51A1, 0x380E, 0x51A2, 0x1086, 0x51A4, 0x1084, 0x51A5, 0x0EC9,
- 0x51A6, 0x1085, 0x51A8, 0x0DCC, 0x51A9, 0x1087, 0x51AA, 0x1088,
- 0x51AB, 0x1089, 0x51AC, 0x0C59, 0x51B0, 0x108D, 0x51B1, 0x108B,
- 0x51B2, 0x108C, 0x51B3, 0x108A, 0x51B4, 0x0853, 0x51B5, 0x108E,
- 0x51B6, 0x0EF6, 0x51B7, 0x0FAC, 0x51BC, 0x380F, 0x51BD, 0x108F,
- 0x51BE, 0x20CC, 0x51C3, 0x3C32, 0x51C4, 0x0A4C, 0x51C5, 0x1090,
- 0x51C6, 0x0964, 0x51C9, 0x1091, 0x51CB, 0x0BBA, 0x51CC, 0x0F87,
- 0x51CD, 0x0C5A, 0x51D6, 0x10DA, 0x51DB, 0x1092, 0x51DC, 0x205C,
- 0x51DD, 0x06BD, 0x51DE, 0x3810, 0x51E0, 0x1093, 0x51E1, 0x0E8C,
- 0x51E6, 0x0972, 0x51E7, 0x0B5C, 0x51E9, 0x1095, 0x51EA, 0x0CBC,
- 0x51EC, 0x20CD, 0x51ED, 0x1096, 0x51EE, 0x3811, 0x51F0, 0x1097,
- 0x51F1, 0x058C, 0x51F4, 0x3812, 0x51F5, 0x1098, 0x51F6, 0x069F,
- 0x51F8, 0x0CA4, 0x51F9, 0x051C, 0x51FA, 0x095A, 0x51FD, 0x0D35,
- 0x51FE, 0x1099, 0x5200, 0x0C5B, 0x5201, 0x3813, 0x5202, 0x3814,
- 0x5203, 0x0A15, 0x5204, 0x109A, 0x5206, 0x0DFC, 0x5207, 0x0A7E,
- 0x5208, 0x05DE, 0x520A, 0x05E5, 0x520B, 0x109B, 0x520E, 0x109D,
- 0x5211, 0x0710, 0x5213, 0x3815, 0x5214, 0x109C, 0x5215, 0x20CE,
- 0x5217, 0x0FBB, 0x521D, 0x0973, 0x5224, 0x0D51, 0x5225, 0x0E1C,
- 0x5227, 0x109E, 0x5229, 0x0F62, 0x522A, 0x109F, 0x522E, 0x10A0,
- 0x5230, 0x0C78, 0x5233, 0x10A1, 0x5236, 0x0A4D, 0x5237, 0x086E,
- 0x5238, 0x074A, 0x5239, 0x10A2, 0x523A, 0x0897, 0x523B, 0x0801,
- 0x5243, 0x0C02, 0x5244, 0x10A4, 0x5247, 0x0B07, 0x5249, 0x3816,
- 0x524A, 0x085F, 0x524B, 0x10A5, 0x524C, 0x10A6, 0x524D, 0x0AB2,
- 0x524F, 0x10A3, 0x5254, 0x10A8, 0x5256, 0x0E64, 0x525B, 0x07F6,
- 0x525D, 0x1E5E, 0x525E, 0x10A7, 0x5261, 0x3817, 0x5263, 0x074B,
- 0x5264, 0x084E, 0x5265, 0x0D23, 0x5266, 0x3818, 0x5269, 0x10AB,
- 0x526A, 0x10A9, 0x526F, 0x0DED, 0x5270, 0x09D2, 0x5271, 0x10B2,
- 0x5272, 0x05C2, 0x5273, 0x10AC, 0x5274, 0x10AA, 0x5275, 0x0AD1,
- 0x527D, 0x10AE, 0x527F, 0x10AD, 0x5283, 0x05A2, 0x5287, 0x0736,
- 0x5288, 0x10B3, 0x5289, 0x0F75, 0x528D, 0x10AF, 0x5291, 0x10B4,
- 0x5292, 0x10B1, 0x5293, 0x3819, 0x5294, 0x10B0, 0x529B, 0x0F97,
- 0x529C, 0x20CF, 0x529F, 0x07AD, 0x52A0, 0x0543, 0x52A3, 0x0FBC,
- 0x52A6, 0x20D0, 0x52A9, 0x097F, 0x52AA, 0x0C52, 0x52AB, 0x07F7,
- 0x52AC, 0x10B7, 0x52AD, 0x10B8, 0x52AF, 0x217D, 0x52B1, 0x0FAD,
- 0x52B4, 0x0FD1, 0x52B5, 0x10BA, 0x52B9, 0x07AE, 0x52BC, 0x10B9,
- 0x52BE, 0x058D, 0x52C0, 0x20D1, 0x52C1, 0x10BB, 0x52C3, 0x0E84,
- 0x52C5, 0x0BD8, 0x52C7, 0x0F10, 0x52C8, 0x381A, 0x52C9, 0x0E29,
- 0x52CD, 0x10BC, 0x52D0, 0x36E8, 0x52D2, 0x1BEE, 0x52D5, 0x0C88,
- 0x52D7, 0x10BD, 0x52D8, 0x05E6, 0x52D9, 0x0EBF, 0x52DB, 0x20D2,
- 0x52DD, 0x0989, 0x52DE, 0x10BE, 0x52DF, 0x0E37, 0x52E0, 0x10C2,
- 0x52E2, 0x0A4E, 0x52E3, 0x10BF, 0x52E4, 0x06C8, 0x52E6, 0x10C0,
- 0x52E7, 0x05E7, 0x52F0, 0x381B, 0x52F2, 0x0704, 0x52F3, 0x10C3,
- 0x52F5, 0x10C4, 0x52F8, 0x10C5, 0x52F9, 0x10C6, 0x52FA, 0x0907,
- 0x52FE, 0x07AF, 0x52FF, 0x0EEA, 0x5300, 0x20D3, 0x5301, 0x0EF4,
- 0x5302, 0x0CCF, 0x5305, 0x0E41, 0x5306, 0x10C7, 0x5307, 0x20D4,
- 0x5308, 0x10C8, 0x530A, 0x381C, 0x530B, 0x381D, 0x530D, 0x10CA,
- 0x530F, 0x10CC, 0x5310, 0x10CB, 0x5315, 0x10CD, 0x5316, 0x053D,
- 0x5317, 0x0E7A, 0x5319, 0x086C, 0x531A, 0x10CE, 0x531D, 0x0ADB,
- 0x5320, 0x098A, 0x5321, 0x06A1, 0x5323, 0x10CF, 0x5324, 0x20D5,
- 0x532A, 0x0D6F, 0x532F, 0x10D0, 0x5331, 0x10D1, 0x5333, 0x10D2,
- 0x5338, 0x10D3, 0x5339, 0x0D96, 0x533A, 0x06E0, 0x533B, 0x04A9,
- 0x533E, 0x381E, 0x533F, 0x0C97, 0x5340, 0x10D4, 0x5341, 0x0947,
- 0x5343, 0x0A8D, 0x5345, 0x10D6, 0x5346, 0x10D5, 0x5347, 0x098B,
- 0x5348, 0x0795, 0x5349, 0x10D8, 0x534A, 0x0D52, 0x534B, 0x3820,
- 0x534C, 0x381F, 0x534D, 0x10D9, 0x5351, 0x0D70, 0x5352, 0x0B14,
- 0x5353, 0x0B4E, 0x5354, 0x06A0, 0x5357, 0x0CC6, 0x5358, 0x0B6F,
- 0x535A, 0x0D24, 0x535C, 0x0E7C, 0x535E, 0x10DB, 0x5360, 0x0A8E,
- 0x5361, 0x3821, 0x5366, 0x070B, 0x5369, 0x10DC, 0x536C, 0x3822,
- 0x536E, 0x10DD, 0x536F, 0x04CE, 0x5370, 0x04B9, 0x5371, 0x0629,
- 0x5372, 0x20D6, 0x5373, 0x0B08, 0x5374, 0x066B, 0x5375, 0x0F5B,
- 0x5377, 0x10E0, 0x5378, 0x0537, 0x537B, 0x10DF, 0x537D, 0x3435,
- 0x537F, 0x06A2, 0x5382, 0x10E1, 0x5384, 0x0EFD, 0x5389, 0x37D0,
- 0x5393, 0x20D7, 0x5396, 0x10E2, 0x5398, 0x0F9A, 0x539A, 0x07B0,
- 0x539F, 0x076A, 0x53A0, 0x10E3, 0x53A5, 0x10E5, 0x53A6, 0x10E4,
- 0x53A8, 0x0A25, 0x53A9, 0x04DB, 0x53AB, 0x3823, 0x53AD, 0x0500,
- 0x53AE, 0x10E6, 0x53B0, 0x10E7, 0x53B2, 0x20D8, 0x53B3, 0x076B,
- 0x53B6, 0x10E8, 0x53BB, 0x0688, 0x53C2, 0x0880, 0x53C3, 0x10E9,
- 0x53C8, 0x0EA2, 0x53C9, 0x0825, 0x53CA, 0x0674, 0x53CB, 0x0F11,
- 0x53CC, 0x0AD2, 0x53CD, 0x0D53, 0x53CE, 0x0929, 0x53D4, 0x0951,
- 0x53D6, 0x0914, 0x53D7, 0x0921, 0x53D9, 0x0980, 0x53DA, 0x3824,
- 0x53DB, 0x0D54, 0x53DD, 0x20D9, 0x53DF, 0x10EC, 0x53E1, 0x04E5,
- 0x53E2, 0x0AD3, 0x53E3, 0x07B1, 0x53E4, 0x0779, 0x53E5, 0x06DF,
- 0x53E6, 0x3825, 0x53E8, 0x10F0, 0x53E9, 0x0B5F, 0x53EA, 0x0B5E,
- 0x53EB, 0x06A3, 0x53EC, 0x098C, 0x53ED, 0x10F1, 0x53EE, 0x10EF,
- 0x53EF, 0x0544, 0x53F0, 0x0B46, 0x53F1, 0x08E4, 0x53F2, 0x0899,
- 0x53F3, 0x04C8, 0x53F5, 0x3826, 0x53F6, 0x05CE, 0x53F7, 0x07F8,
- 0x53F8, 0x0898, 0x53FA, 0x10F2, 0x5401, 0x10F3, 0x5403, 0x0663,
- 0x5404, 0x05A4, 0x5408, 0x07F9, 0x5409, 0x0662, 0x540A, 0x0BFB,
- 0x540B, 0x04C7, 0x540C, 0x0C89, 0x540D, 0x0ECA, 0x540E, 0x07B3,
- 0x540F, 0x0F63, 0x5410, 0x0C41, 0x5411, 0x07B2, 0x541B, 0x0705,
- 0x541D, 0x10FC, 0x541F, 0x06DB, 0x5420, 0x0E78, 0x5426, 0x0D71,
- 0x5427, 0x3827, 0x5429, 0x10FB, 0x542B, 0x061A, 0x542C, 0x10F6,
- 0x542D, 0x10F7, 0x542E, 0x10F9, 0x5433, 0x35C0, 0x5436, 0x10FA,
- 0x5438, 0x0675, 0x5439, 0x0A27, 0x543B, 0x0DFD, 0x543C, 0x10F8,
- 0x543D, 0x10F4, 0x543E, 0x0797, 0x543F, 0x35CF, 0x5440, 0x10F5,
- 0x5442, 0x0FCA, 0x5446, 0x0E42, 0x5448, 0x0C04, 0x5449, 0x0796,
- 0x544A, 0x0802, 0x544D, 0x3828, 0x544E, 0x10FD, 0x5451, 0x0CB5,
- 0x5455, 0x3723, 0x545F, 0x1101, 0x5466, 0x3829, 0x5468, 0x092A,
- 0x546A, 0x0922, 0x546B, 0x382A, 0x5470, 0x1104, 0x5471, 0x1102,
- 0x5473, 0x0EAF, 0x5474, 0x382B, 0x5475, 0x10FF, 0x5476, 0x1108,
- 0x5477, 0x1103, 0x547B, 0x1106, 0x547C, 0x077A, 0x547D, 0x0ECB,
- 0x5480, 0x1107, 0x5484, 0x1109, 0x5486, 0x110B, 0x548A, 0x20DC,
- 0x548B, 0x0860, 0x548C, 0x0FE8, 0x548D, 0x382C, 0x548E, 0x1100,
- 0x548F, 0x10FE, 0x5490, 0x110A, 0x5492, 0x1105, 0x5496, 0x382D,
- 0x549C, 0x20DB, 0x54A1, 0x382E, 0x54A2, 0x110D, 0x54A4, 0x1116,
- 0x54A5, 0x110F, 0x54A8, 0x1113, 0x54A9, 0x20DD, 0x54AB, 0x1114,
- 0x54AC, 0x1110, 0x54AD, 0x382F, 0x54AF, 0x1131, 0x54B2, 0x0859,
- 0x54B3, 0x058F, 0x54B8, 0x110E, 0x54B9, 0x3830, 0x54BC, 0x1118,
- 0x54BD, 0x04BA, 0x54BE, 0x1117, 0x54BF, 0x3831, 0x54C0, 0x0469,
- 0x54C1, 0x0DBC, 0x54C2, 0x1115, 0x54C4, 0x1111, 0x54C6, 0x3832,
- 0x54C7, 0x110C, 0x54C8, 0x1112, 0x54C9, 0x0838, 0x54CD, 0x3833,
- 0x54D8, 0x1119, 0x54E1, 0x04BB, 0x54E2, 0x1122, 0x54E5, 0x111A,
- 0x54E6, 0x111B, 0x54E8, 0x098D, 0x54E9, 0x0E97, 0x54ED, 0x1120,
- 0x54EE, 0x111F, 0x54F2, 0x0C29, 0x54FA, 0x1121, 0x54FD, 0x111E,
- 0x54FF, 0x20DE, 0x5504, 0x04D6, 0x5506, 0x0826, 0x5507, 0x09F6,
- 0x550E, 0x3834, 0x550F, 0x111C, 0x5510, 0x0C5C, 0x5514, 0x111D,
- 0x5516, 0x0466, 0x552B, 0x3835, 0x552E, 0x1127, 0x552F, 0x0F0D,
- 0x5531, 0x098F, 0x5533, 0x112D, 0x5535, 0x3836, 0x5538, 0x112C,
- 0x5539, 0x1123, 0x553E, 0x0B23, 0x5540, 0x1124, 0x5544, 0x0B4F,
- 0x5545, 0x1129, 0x5546, 0x098E, 0x554A, 0x3837, 0x554C, 0x1126,
- 0x554F, 0x0EF0, 0x5553, 0x0712, 0x5556, 0x112A, 0x5557, 0x112B,
- 0x555C, 0x1128, 0x555D, 0x112E, 0x555E, 0x1DD1, 0x5560, 0x3838,
- 0x5561, 0x3839, 0x5563, 0x1125, 0x557B, 0x1134, 0x557C, 0x1139,
- 0x557E, 0x1135, 0x5580, 0x1130, 0x5583, 0x113A, 0x5584, 0x0AB3,
- 0x5586, 0x20DF, 0x5587, 0x113C, 0x5588, 0x383A, 0x5589, 0x07B4,
- 0x558A, 0x1132, 0x558B, 0x0BBB, 0x558E, 0x383B, 0x5598, 0x1136,
- 0x5599, 0x112F, 0x559A, 0x05E9, 0x559C, 0x062A, 0x559D, 0x05C3,
- 0x559E, 0x1137, 0x559F, 0x1133, 0x55A7, 0x074C, 0x55A8, 0x113D,
- 0x55A9, 0x113B, 0x55AA, 0x0AD5, 0x55AB, 0x0664, 0x55AC, 0x06A4,
- 0x55AE, 0x1138, 0x55B0, 0x06EC, 0x55B6, 0x04E6, 0x55C4, 0x1141,
- 0x55C5, 0x113F, 0x55C7, 0x1178, 0x55D4, 0x1144, 0x55DA, 0x113E,
- 0x55DC, 0x1142, 0x55DF, 0x1140, 0x55E3, 0x089A, 0x55E4, 0x1143,
- 0x55F7, 0x1146, 0x55F9, 0x114B, 0x55FD, 0x1149, 0x55FE, 0x1148,
- 0x5606, 0x0B70, 0x5608, 0x383C, 0x5609, 0x0545, 0x560E, 0x383D,
- 0x560F, 0x383E, 0x5614, 0x1145, 0x5616, 0x1147, 0x5617, 0x0990,
- 0x5618, 0x04D5, 0x561B, 0x114A, 0x5620, 0x3C1D, 0x5629, 0x055E,
- 0x562F, 0x1155, 0x5631, 0x09E4, 0x5632, 0x1151, 0x5634, 0x114F,
- 0x5636, 0x1150, 0x5637, 0x383F, 0x5638, 0x1152, 0x563F, 0x3840,
- 0x5642, 0x04DF, 0x5649, 0x3841, 0x564B, 0x3842, 0x564C, 0x0ABB,
- 0x564E, 0x114C, 0x564F, 0x3843, 0x5650, 0x114D, 0x5653, 0x1F1B,
- 0x565B, 0x05D8, 0x5664, 0x1154, 0x5666, 0x3844, 0x5668, 0x062B,
- 0x5669, 0x3845, 0x566A, 0x1157, 0x566B, 0x1153, 0x566C, 0x1156,
- 0x566F, 0x3846, 0x5671, 0x3847, 0x5672, 0x3848, 0x5674, 0x0DFE,
- 0x5676, 0x3C33, 0x5678, 0x0CAD, 0x567A, 0x0D4C, 0x5680, 0x1159,
- 0x5686, 0x1158, 0x5687, 0x05A3, 0x568A, 0x115A, 0x568F, 0x115D,
- 0x5694, 0x115C, 0x5695, 0x3849, 0x5699, 0x1DE6, 0x569A, 0x384A,
- 0x56A0, 0x115B, 0x56A2, 0x0CEF, 0x56A5, 0x115E, 0x56AC, 0x384B,
- 0x56AD, 0x384C, 0x56AE, 0x115F, 0x56B1, 0x384D, 0x56B4, 0x1161,
- 0x56B6, 0x1160, 0x56BC, 0x1163, 0x56C0, 0x1166, 0x56C1, 0x1164,
- 0x56C2, 0x1162, 0x56C3, 0x1165, 0x56C8, 0x1167, 0x56C9, 0x384E,
- 0x56CA, 0x1E5A, 0x56CE, 0x1168, 0x56D1, 0x1169, 0x56D3, 0x116A,
- 0x56D7, 0x116B, 0x56D8, 0x107C, 0x56DA, 0x0928, 0x56DB, 0x089B,
- 0x56DD, 0x384F, 0x56DE, 0x0573, 0x56E0, 0x04BC, 0x56E3, 0x0B82,
- 0x56E4, 0x3850, 0x56EE, 0x116C, 0x56F0, 0x0814, 0x56F2, 0x0493,
- 0x56F3, 0x0A24, 0x56F9, 0x116D, 0x56FA, 0x077B, 0x56FD, 0x0803,
- 0x56FF, 0x116F, 0x5700, 0x116E, 0x5703, 0x0E30, 0x5704, 0x1170,
- 0x5708, 0x1172, 0x5709, 0x1171, 0x570A, 0x3851, 0x570B, 0x1173,
- 0x570D, 0x1174, 0x570F, 0x074D, 0x5712, 0x0502, 0x5713, 0x1175,
- 0x5715, 0x3852, 0x5716, 0x1177, 0x5718, 0x1176, 0x571C, 0x1179,
- 0x571F, 0x0C54, 0x5721, 0x3680, 0x5723, 0x3853, 0x5726, 0x117A,
- 0x5727, 0x0479, 0x5728, 0x084F, 0x572D, 0x0713, 0x572F, 0x3854,
- 0x5730, 0x0B8D, 0x5733, 0x3855, 0x5734, 0x3856, 0x5737, 0x117B,
- 0x5738, 0x117C, 0x573B, 0x117E, 0x5740, 0x117F, 0x5742, 0x0854,
- 0x5747, 0x06C9, 0x574A, 0x0E65, 0x574C, 0x3857, 0x574E, 0x117D,
- 0x574F, 0x1180, 0x5750, 0x0831, 0x5751, 0x07B5, 0x5759, 0x20E0,
- 0x5761, 0x1184, 0x5764, 0x0815, 0x5765, 0x20E1, 0x5766, 0x0B71,
- 0x5769, 0x1181, 0x576A, 0x0BF6, 0x5770, 0x3858, 0x577F, 0x1185,
- 0x5782, 0x0A28, 0x5788, 0x1183, 0x5789, 0x1186, 0x578B, 0x0715,
- 0x578C, 0x3859, 0x5793, 0x1187, 0x579C, 0x385A, 0x57A0, 0x1188,
- 0x57A2, 0x07B6, 0x57A3, 0x059E, 0x57A4, 0x118A, 0x57AA, 0x118B,
- 0x57AC, 0x20E2, 0x57B0, 0x118C, 0x57B3, 0x1189, 0x57B8, 0x385B,
- 0x57C0, 0x1182, 0x57C3, 0x118D, 0x57C6, 0x118E, 0x57C7, 0x20E4,
- 0x57C8, 0x20E3, 0x57CB, 0x0E92, 0x57CE, 0x09D3, 0x57D2, 0x1190,
- 0x57D3, 0x1191, 0x57D4, 0x118F, 0x57D6, 0x1193, 0x57DC, 0x0CEE,
- 0x57DF, 0x04AC, 0x57E0, 0x0DC8, 0x57E3, 0x1194, 0x57E6, 0x385C,
- 0x57ED, 0x385D, 0x57F4, 0x09E5, 0x57F5, 0x385E, 0x57F6, 0x385F,
- 0x57F7, 0x08E5, 0x57F9, 0x0D13, 0x57FA, 0x062C, 0x57FC, 0x085B,
- 0x57FF, 0x3860, 0x5800, 0x0E87, 0x5802, 0x0C8A, 0x5805, 0x074E,
- 0x5806, 0x0B2F, 0x5809, 0x3861, 0x580A, 0x1192, 0x580B, 0x1195,
- 0x5815, 0x0B24, 0x5819, 0x1196, 0x581D, 0x1197, 0x5820, 0x3862,
- 0x5821, 0x1199, 0x5824, 0x0C05, 0x582A, 0x05EA, 0x582F, 0x1D32,
- 0x5830, 0x0503, 0x5831, 0x0E43, 0x5832, 0x3863, 0x5834, 0x09D4,
- 0x5835, 0x0C42, 0x583A, 0x0856, 0x583D, 0x119F, 0x5840, 0x0E0D,
- 0x5841, 0x0FA5, 0x584A, 0x0574, 0x584B, 0x119B, 0x5851, 0x0ABC,
- 0x5852, 0x119E, 0x5854, 0x0C5D, 0x5857, 0x0C43, 0x5858, 0x0C5E,
- 0x5859, 0x0D4D, 0x585A, 0x0BE9, 0x585E, 0x0839, 0x5861, 0x1E47,
- 0x5862, 0x119A, 0x5869, 0x0518, 0x586B, 0x0C30, 0x5870, 0x119C,
- 0x5872, 0x1198, 0x5875, 0x0A16, 0x5879, 0x11A0, 0x587C, 0x3864,
- 0x587E, 0x0958, 0x5880, 0x3865, 0x5883, 0x06A5, 0x5885, 0x11A1,
- 0x5893, 0x0E38, 0x5897, 0x0AFF, 0x589C, 0x0BE2, 0x589E, 0x20E7,
- 0x589F, 0x11A3, 0x58A8, 0x0E7D, 0x58A9, 0x3866, 0x58AB, 0x11A4,
- 0x58AE, 0x11A9, 0x58B2, 0x20E8, 0x58B3, 0x0DFF, 0x58B8, 0x11A8,
- 0x58B9, 0x11A2, 0x58BA, 0x11A5, 0x58BB, 0x11A7, 0x58BE, 0x0816,
- 0x58C1, 0x0E19, 0x58C5, 0x11AA, 0x58C7, 0x0B83, 0x58CA, 0x0575,
- 0x58CC, 0x09D5, 0x58CE, 0x3867, 0x58D0, 0x3868, 0x58D1, 0x11AC,
- 0x58D3, 0x11AB, 0x58D4, 0x3869, 0x58D5, 0x07FA, 0x58D7, 0x11AD,
- 0x58D8, 0x11AF, 0x58D9, 0x11AE, 0x58DA, 0x386A, 0x58DC, 0x11B1,
- 0x58DE, 0x11A6, 0x58DF, 0x11B3, 0x58E4, 0x11B2, 0x58E5, 0x11B0,
- 0x58E9, 0x386B, 0x58EB, 0x089C, 0x58EC, 0x0A17, 0x58EE, 0x0AD6,
- 0x58EF, 0x11B4, 0x58F0, 0x0A60, 0x58F1, 0x04B1, 0x58F2, 0x0D1A,
- 0x58F7, 0x0BF7, 0x58F9, 0x11B6, 0x58FA, 0x11B5, 0x58FB, 0x11B7,
- 0x58FC, 0x11B8, 0x58FD, 0x11B9, 0x5902, 0x11BA, 0x5909, 0x0E21,
- 0x590A, 0x11BB, 0x590B, 0x20E9, 0x590C, 0x386C, 0x590F, 0x0546,
- 0x5910, 0x11BC, 0x5915, 0x0F26, 0x5916, 0x058E, 0x5918, 0x10DE,
- 0x5919, 0x0952, 0x591A, 0x0B1F, 0x591B, 0x11BD, 0x591C, 0x0EF7,
- 0x5922, 0x0EC0, 0x5924, 0x386D, 0x5925, 0x11BF, 0x5927, 0x0B47,
- 0x5929, 0x0C31, 0x592A, 0x0B20, 0x592B, 0x0DC9, 0x592C, 0x11C0,
- 0x592D, 0x11C1, 0x592E, 0x051D, 0x592F, 0x386E, 0x5931, 0x08E6,
- 0x5932, 0x11C2, 0x5937, 0x0494, 0x5938, 0x11C3, 0x5939, 0x3725,
- 0x593E, 0x11C4, 0x5944, 0x0504, 0x5947, 0x062D, 0x5948, 0x0CB8,
- 0x5949, 0x0E44, 0x594E, 0x11C8, 0x594F, 0x0AD7, 0x5950, 0x11C7,
- 0x5951, 0x0716, 0x5953, 0x20EA, 0x5954, 0x0E89, 0x5955, 0x11C6,
- 0x5957, 0x0C5F, 0x5958, 0x11CA, 0x595A, 0x11C9, 0x595B, 0x20EB,
- 0x595D, 0x20EC, 0x5960, 0x11CC, 0x5961, 0x386F, 0x5962, 0x11CB,
- 0x5963, 0x20ED, 0x5965, 0x051E, 0x5967, 0x11CD, 0x5968, 0x0991,
- 0x5969, 0x11CF, 0x596A, 0x0B63, 0x596C, 0x11CE, 0x596D, 0x3870,
- 0x596E, 0x0E03, 0x5973, 0x0981, 0x5974, 0x0C55, 0x5978, 0x11D0,
- 0x597D, 0x07B7, 0x5981, 0x11D1, 0x5982, 0x0CD7, 0x5983, 0x0D72,
- 0x5984, 0x0EDD, 0x598A, 0x0CDB, 0x598D, 0x11DA, 0x5993, 0x0652,
- 0x5996, 0x0F2F, 0x5999, 0x0EBB, 0x599B, 0x1239, 0x599D, 0x11D2,
- 0x59A3, 0x11D5, 0x59A4, 0x20EE, 0x59A5, 0x0B25, 0x59A8, 0x0E66,
- 0x59AC, 0x0C44, 0x59B2, 0x11D6, 0x59B9, 0x0E93, 0x59BA, 0x20EF,
- 0x59BB, 0x083A, 0x59BE, 0x0992, 0x59C6, 0x11D7, 0x59C9, 0x089E,
- 0x59CA, 0x3871, 0x59CB, 0x089D, 0x59D0, 0x047D, 0x59D1, 0x077C,
- 0x59D2, 0x3872, 0x59D3, 0x0A4F, 0x59D4, 0x0495, 0x59D9, 0x11DB,
- 0x59DA, 0x11DC, 0x59DC, 0x11D9, 0x59DD, 0x3873, 0x59E3, 0x3874,
- 0x59E4, 0x3875, 0x59E5, 0x04DA, 0x59E6, 0x05EB, 0x59E8, 0x11D8,
- 0x59EA, 0x0ED1, 0x59EB, 0x0DA3, 0x59EC, 0x36AD, 0x59F6, 0x046C,
- 0x59FB, 0x04BD, 0x59FF, 0x089F, 0x5A01, 0x0496, 0x5A03, 0x0467,
- 0x5A04, 0x3876, 0x5A09, 0x11E1, 0x5A0C, 0x3877, 0x5A11, 0x11DF,
- 0x5A18, 0x0EC8, 0x5A1A, 0x11E2, 0x5A1B, 0x35C1, 0x5A1C, 0x11E0,
- 0x5A1F, 0x11DE, 0x5A20, 0x09F7, 0x5A23, 0x3878, 0x5A25, 0x11DD,
- 0x5A29, 0x0E2A, 0x5A2F, 0x0798, 0x5A35, 0x11E6, 0x5A36, 0x11E7,
- 0x5A3C, 0x0993, 0x5A40, 0x11E3, 0x5A41, 0x0FD2, 0x5A46, 0x0D02,
- 0x5A47, 0x3879, 0x5A49, 0x11E5, 0x5A55, 0x387A, 0x5A5A, 0x0817,
- 0x5A62, 0x11E8, 0x5A63, 0x387B, 0x5A66, 0x0DCA, 0x5A6A, 0x11E9,
- 0x5A6C, 0x11E4, 0x5A6D, 0x387C, 0x5A7E, 0x387D, 0x5A7F, 0x0EC7,
- 0x5A92, 0x0D14, 0x5A9A, 0x11EA, 0x5A9B, 0x0DA4, 0x5A9E, 0x387E,
- 0x5AA7, 0x387F, 0x5AAC, 0x3880, 0x5AB3, 0x3881, 0x5ABC, 0x11EB,
- 0x5ABD, 0x11EF, 0x5ABE, 0x11EC, 0x5AC1, 0x0547, 0x5AC2, 0x11EE,
- 0x5AC9, 0x08E7, 0x5ACB, 0x11ED, 0x5ACC, 0x074F, 0x5AD0, 0x11FB,
- 0x5AD6, 0x11F4, 0x5AD7, 0x11F1, 0x5AE0, 0x3882, 0x5AE1, 0x0BA2,
- 0x5AE3, 0x11F0, 0x5AE6, 0x11F2, 0x5AE9, 0x11F3, 0x5AFA, 0x11F5,
- 0x5AFB, 0x11F6, 0x5B00, 0x3883, 0x5B09, 0x062E, 0x5B0B, 0x11F8,
- 0x5B0C, 0x11F7, 0x5B16, 0x11F9, 0x5B19, 0x3884, 0x5B22, 0x09D6,
- 0x5B25, 0x3885, 0x5B2A, 0x11FC, 0x5B2C, 0x0BF8, 0x5B2D, 0x3886,
- 0x5B30, 0x04E7, 0x5B32, 0x11FA, 0x5B36, 0x11FD, 0x5B3E, 0x11FE,
- 0x5B40, 0x1201, 0x5B41, 0x3887, 0x5B43, 0x11FF, 0x5B45, 0x1200,
- 0x5B50, 0x08A0, 0x5B51, 0x1202, 0x5B54, 0x07B8, 0x5B55, 0x1203,
- 0x5B56, 0x20F0, 0x5B57, 0x08C8, 0x5B58, 0x0B18, 0x5B5A, 0x1204,
- 0x5B5B, 0x1205, 0x5B5C, 0x08A8, 0x5B5D, 0x07B9, 0x5B5F, 0x0EDE,
- 0x5B63, 0x0642, 0x5B64, 0x077D, 0x5B65, 0x1206, 0x5B66, 0x05B6,
- 0x5B69, 0x1207, 0x5B6B, 0x0B19, 0x5B70, 0x1208, 0x5B71, 0x1230,
- 0x5B73, 0x1209, 0x5B75, 0x120A, 0x5B78, 0x120B, 0x5B7A, 0x120D,
- 0x5B7C, 0x3888, 0x5B7E, 0x3889, 0x5B7F, 0x388A, 0x5B80, 0x120E,
- 0x5B82, 0x3610, 0x5B83, 0x120F, 0x5B85, 0x0B50, 0x5B87, 0x04C9,
- 0x5B88, 0x0915, 0x5B89, 0x0486, 0x5B8A, 0x388B, 0x5B8B, 0x0AD9,
- 0x5B8C, 0x05EC, 0x5B8D, 0x08E1, 0x5B8F, 0x07BA, 0x5B95, 0x0C60,
- 0x5B97, 0x092B, 0x5B98, 0x05ED, 0x5B99, 0x0BA6, 0x5B9A, 0x0C06,
- 0x5B9B, 0x047C, 0x5B9C, 0x0653, 0x5B9D, 0x0E45, 0x5B9F, 0x08EE,
- 0x5BA2, 0x066C, 0x5BA3, 0x0A8F, 0x5BA4, 0x08E8, 0x5BA5, 0x0F12,
- 0x5BA6, 0x1210, 0x5BAE, 0x0676, 0x5BB0, 0x083B, 0x5BB3, 0x0590,
- 0x5BB4, 0x0505, 0x5BB5, 0x0994, 0x5BB6, 0x0548, 0x5BB8, 0x1211,
- 0x5BB9, 0x0F30, 0x5BBF, 0x0953, 0x5BC0, 0x20F1, 0x5BC2, 0x0910,
- 0x5BC3, 0x1212, 0x5BC4, 0x062F, 0x5BC5, 0x0CAA, 0x5BC6, 0x0EB5,
- 0x5BC7, 0x1213, 0x5BC9, 0x1214, 0x5BCC, 0x0DCB, 0x5BD0, 0x1216,
- 0x5BD2, 0x05E4, 0x5BD3, 0x06EF, 0x5BD4, 0x1215, 0x5BD8, 0x20F3,
- 0x5BDB, 0x05EE, 0x5BDD, 0x09F8, 0x5BDE, 0x121A, 0x5BDF, 0x086F,
- 0x5BE1, 0x0549, 0x5BE2, 0x1219, 0x5BE4, 0x1217, 0x5BE5, 0x121B,
- 0x5BE6, 0x1218, 0x5BE7, 0x0CE1, 0x5BE8, 0x148E, 0x5BE9, 0x09F9,
- 0x5BEB, 0x121C, 0x5BEC, 0x20F4, 0x5BEE, 0x0F88, 0x5BF0, 0x121D,
- 0x5BF3, 0x121F, 0x5BF5, 0x0BBC, 0x5BF6, 0x121E, 0x5BF8, 0x0A47,
- 0x5BFA, 0x08C9, 0x5BFE, 0x0B30, 0x5BFF, 0x0923, 0x5C01, 0x0DE7,
- 0x5C02, 0x0A90, 0x5C04, 0x08F9, 0x5C05, 0x1220, 0x5C06, 0x0995,
- 0x5C07, 0x1221, 0x5C08, 0x1222, 0x5C09, 0x0497, 0x5C0A, 0x0B1A,
- 0x5C0B, 0x0A18, 0x5C0D, 0x1223, 0x5C0E, 0x0C8B, 0x5C0F, 0x0996,
- 0x5C11, 0x0997, 0x5C13, 0x1224, 0x5C14, 0x372A, 0x5C16, 0x0A91,
- 0x5C19, 0x360B, 0x5C1A, 0x0998, 0x5C1E, 0x20F5, 0x5C20, 0x1225,
- 0x5C22, 0x1226, 0x5C23, 0x388C, 0x5C24, 0x0EEC, 0x5C28, 0x1227,
- 0x5C2B, 0x388D, 0x5C2D, 0x06BE, 0x5C30, 0x388E, 0x5C31, 0x092C,
- 0x5C38, 0x1228, 0x5C39, 0x1229, 0x5C3A, 0x0908, 0x5C3B, 0x09F2,
- 0x5C3C, 0x0CCC, 0x5C3D, 0x0A1A, 0x5C3E, 0x0D8C, 0x5C3F, 0x0CD8,
- 0x5C40, 0x06C1, 0x5C41, 0x122A, 0x5C45, 0x0689, 0x5C46, 0x122B,
- 0x5C48, 0x06F6, 0x5C4A, 0x0CA7, 0x5C4B, 0x0530, 0x5C4D, 0x08A1,
- 0x5C4E, 0x122C, 0x5C4F, 0x122F, 0x5C50, 0x122E, 0x5C51, 0x06F5,
- 0x5C53, 0x122D, 0x5C55, 0x0C32, 0x5C5B, 0x1E92, 0x5C5E, 0x0B10,
- 0x5C60, 0x0C45, 0x5C61, 0x08F4, 0x5C62, 0x1E0D, 0x5C63, 0x388F,
- 0x5C64, 0x0ADA, 0x5C65, 0x0F64, 0x5C69, 0x3890, 0x5C6C, 0x1231,
- 0x5C6E, 0x1232, 0x5C6F, 0x0CAE, 0x5C71, 0x0881, 0x5C76, 0x1234,
- 0x5C79, 0x1235, 0x5C7C, 0x3891, 0x5C8C, 0x1236, 0x5C90, 0x0630,
- 0x5C91, 0x1237, 0x5C94, 0x1238, 0x5CA1, 0x052C, 0x5CA6, 0x20F6,
- 0x5CA8, 0x0ABD, 0x5CA9, 0x0620, 0x5CAB, 0x123A, 0x5CAC, 0x0EB4,
- 0x5CB1, 0x0B32, 0x5CB3, 0x05B7, 0x5CB6, 0x123C, 0x5CB7, 0x123E,
- 0x5CB8, 0x061B, 0x5CBA, 0x20F7, 0x5CBB, 0x123B, 0x5CBC, 0x123D,
- 0x5CBE, 0x1240, 0x5CC5, 0x123F, 0x5CC7, 0x1241, 0x5CCB, 0x3892,
- 0x5CD2, 0x3893, 0x5CD9, 0x1242, 0x5CE0, 0x0C95, 0x5CE1, 0x06A6,
- 0x5CE6, 0x372C, 0x5CE8, 0x0565, 0x5CE9, 0x1243, 0x5CEA, 0x1248,
- 0x5CED, 0x1246, 0x5CEF, 0x0E47, 0x5CF0, 0x0E46, 0x5CF4, 0x3894,
- 0x5CF5, 0x20F8, 0x5CF6, 0x0C61, 0x5CFA, 0x1245, 0x5CFB, 0x095E,
- 0x5CFD, 0x1244, 0x5D07, 0x0A38, 0x5D0B, 0x1249, 0x5D0E, 0x085A,
- 0x5D11, 0x124F, 0x5D14, 0x1250, 0x5D15, 0x124A, 0x5D16, 0x0591,
- 0x5D17, 0x124B, 0x5D18, 0x1254, 0x5D19, 0x1253, 0x5D1A, 0x1252,
- 0x5D1B, 0x124E, 0x5D1F, 0x124D, 0x5D22, 0x1251, 0x5D24, 0x3895,
- 0x5D26, 0x3896, 0x5D27, 0x20F9, 0x5D29, 0x0E48, 0x5D42, 0x20FC,
- 0x5D43, 0x3897, 0x5D46, 0x3898, 0x5D4A, 0x3899, 0x5D4B, 0x1258,
- 0x5D4C, 0x1255, 0x5D4E, 0x1257, 0x5D50, 0x0F5C, 0x5D52, 0x1256,
- 0x5D53, 0x20FA, 0x5D5C, 0x124C, 0x5D69, 0x0A39, 0x5D6C, 0x1259,
- 0x5D6D, 0x20FD, 0x5D6F, 0x0827, 0x5D73, 0x125A, 0x5D76, 0x125B,
- 0x5D82, 0x125E, 0x5D84, 0x125D, 0x5D87, 0x125C, 0x5D8B, 0x0C62,
- 0x5D8C, 0x1247, 0x5D90, 0x1264, 0x5D92, 0x389A, 0x5D94, 0x389B,
- 0x5D99, 0x389C, 0x5D9D, 0x1260, 0x5DA0, 0x389D, 0x5DA2, 0x125F,
- 0x5DAC, 0x1261, 0x5DAE, 0x1262, 0x5DB2, 0x3BA5, 0x5DB7, 0x1265,
- 0x5DB8, 0x20FE, 0x5DB9, 0x20FF, 0x5DBA, 0x0FAE, 0x5DBC, 0x1266,
- 0x5DBD, 0x1263, 0x5DC9, 0x1267, 0x5DCC, 0x061C, 0x5DCD, 0x1268,
- 0x5DD0, 0x2100, 0x5DD2, 0x126A, 0x5DD3, 0x1269, 0x5DD6, 0x126B,
- 0x5DD8, 0x389E, 0x5DDB, 0x126C, 0x5DDD, 0x0A92, 0x5DDE, 0x092D,
- 0x5DE0, 0x389F, 0x5DE1, 0x096E, 0x5DE2, 0x3432, 0x5DE3, 0x0AE5,
- 0x5DE5, 0x07BB, 0x5DE6, 0x0828, 0x5DE7, 0x07BC, 0x5DE8, 0x068A,
- 0x5DEB, 0x126D, 0x5DEE, 0x0829, 0x5DF1, 0x077E, 0x5DF2, 0x126E,
- 0x5DF3, 0x0EB2, 0x5DF4, 0x0CF9, 0x5DF5, 0x126F, 0x5DF7, 0x07BD,
- 0x5DF8, 0x38A0, 0x5DFB, 0x05E8, 0x5DFD, 0x0B65, 0x5DFE, 0x06CA,
- 0x5DFF, 0x35E2, 0x5E00, 0x38A1, 0x5E02, 0x08A2, 0x5E03, 0x0DCD,
- 0x5E06, 0x0D55, 0x5E0B, 0x1270, 0x5E0C, 0x0631, 0x5E11, 0x1273,
- 0x5E12, 0x38A2, 0x5E14, 0x38A3, 0x5E15, 0x38A4, 0x5E16, 0x0BBD,
- 0x5E18, 0x38A5, 0x5E19, 0x1272, 0x5E1A, 0x1271, 0x5E1B, 0x1274,
- 0x5E1D, 0x0C07, 0x5E25, 0x0A29, 0x5E2B, 0x08A3, 0x5E2D, 0x0A6E,
- 0x5E2E, 0x38A6, 0x5E2F, 0x0B33, 0x5E30, 0x063C, 0x5E33, 0x0BBE,
- 0x5E36, 0x1275, 0x5E37, 0x1276, 0x5E38, 0x09D7, 0x5E3D, 0x0E67,
- 0x5E40, 0x1279, 0x5E43, 0x1278, 0x5E44, 0x1277, 0x5E45, 0x0DEF,
- 0x5E47, 0x1280, 0x5E4C, 0x0E88, 0x5E4E, 0x127A, 0x5E54, 0x127C,
- 0x5E55, 0x0E99, 0x5E57, 0x127B, 0x5E58, 0x38A7, 0x5E5F, 0x127D,
- 0x5E61, 0x0D3C, 0x5E62, 0x127E, 0x5E63, 0x0E0E, 0x5E64, 0x127F,
- 0x5E6B, 0x38A8, 0x5E6C, 0x38A9, 0x5E72, 0x05EF, 0x5E73, 0x0E0F,
- 0x5E74, 0x0CE5, 0x5E75, 0x1281, 0x5E76, 0x1282, 0x5E78, 0x07BE,
- 0x5E79, 0x05F0, 0x5E7A, 0x1283, 0x5E7B, 0x076C, 0x5E7C, 0x0F2E,
- 0x5E7D, 0x0F13, 0x5E7E, 0x0632, 0x5E7F, 0x1285, 0x5E81, 0x0BBF,
- 0x5E83, 0x07BF, 0x5E84, 0x0999, 0x5E87, 0x0D73, 0x5E8A, 0x099A,
- 0x5E8F, 0x0982, 0x5E95, 0x0C08, 0x5E96, 0x0E49, 0x5E97, 0x0C33,
- 0x5E99, 0x36B0, 0x5E9A, 0x07C0, 0x5E9C, 0x0DCE, 0x5EA0, 0x1286,
- 0x5EA6, 0x0C53, 0x5EA7, 0x0832, 0x5EA8, 0x38AA, 0x5EAA, 0x38AB,
- 0x5EAB, 0x077F, 0x5EAD, 0x0C09, 0x5EB5, 0x0487, 0x5EB6, 0x0978,
- 0x5EB7, 0x07C1, 0x5EB8, 0x0F31, 0x5EBE, 0x38AC, 0x5EBF, 0x38AD,
- 0x5EC1, 0x1287, 0x5EC2, 0x1288, 0x5EC3, 0x0D07, 0x5EC8, 0x1289,
- 0x5EC9, 0x0FBF, 0x5ECA, 0x0FD3, 0x5ECB, 0x38AE, 0x5ECF, 0x128B,
- 0x5ED0, 0x128A, 0x5ED2, 0x38AF, 0x5ED3, 0x05A5, 0x5ED6, 0x128C,
- 0x5EDA, 0x128F, 0x5EDB, 0x1290, 0x5EDD, 0x128E, 0x5EDF, 0x0DB2,
- 0x5EE0, 0x099B, 0x5EE1, 0x1292, 0x5EE2, 0x1291, 0x5EE3, 0x128D,
- 0x5EE8, 0x1293, 0x5EE9, 0x1294, 0x5EEC, 0x1295, 0x5EF0, 0x1298,
- 0x5EF1, 0x1296, 0x5EF3, 0x1297, 0x5EF4, 0x1299, 0x5EF6, 0x0506,
- 0x5EF7, 0x0C0A, 0x5EF8, 0x129A, 0x5EFA, 0x0750, 0x5EFB, 0x0576,
- 0x5EFC, 0x0CEC, 0x5EFE, 0x129B, 0x5EFF, 0x0CD3, 0x5F01, 0x0E2B,
- 0x5F03, 0x129C, 0x5F04, 0x0FD4, 0x5F07, 0x38B0, 0x5F09, 0x129D,
- 0x5F0A, 0x0E10, 0x5F0B, 0x12A0, 0x5F0C, 0x0FFA, 0x5F0D, 0x100A,
- 0x5F0E, 0x38B1, 0x5F0F, 0x08DC, 0x5F10, 0x0CCD, 0x5F11, 0x12A1,
- 0x5F13, 0x0677, 0x5F14, 0x0BC0, 0x5F15, 0x04BE, 0x5F16, 0x12A2,
- 0x5F17, 0x0DF6, 0x5F18, 0x07C2, 0x5F1B, 0x0B8E, 0x5F1C, 0x38B2,
- 0x5F1D, 0x38B3, 0x5F1F, 0x0C0B, 0x5F21, 0x2101, 0x5F22, 0x38B4,
- 0x5F25, 0x0EFB, 0x5F26, 0x076D, 0x5F27, 0x0780, 0x5F28, 0x38B5,
- 0x5F29, 0x12A3, 0x5F2D, 0x12A4, 0x5F2F, 0x12AA, 0x5F31, 0x0911,
- 0x5F34, 0x2102, 0x5F35, 0x0BC1, 0x5F36, 0x38B6, 0x5F37, 0x06A7,
- 0x5F38, 0x12A5, 0x5F3A, 0x3598, 0x5F3B, 0x38B7, 0x5F3C, 0x0D9D,
- 0x5F3E, 0x0B84, 0x5F40, 0x38B8, 0x5F41, 0x12A6, 0x5F45, 0x20B2,
- 0x5F48, 0x12A7, 0x5F4A, 0x06A8, 0x5F4C, 0x12A8, 0x5F4E, 0x12A9,
- 0x5F50, 0x38B9, 0x5F51, 0x12AB, 0x5F53, 0x0C70, 0x5F56, 0x12AC,
- 0x5F57, 0x12AD, 0x5F58, 0x38BA, 0x5F59, 0x12AE, 0x5F5C, 0x129F,
- 0x5F5D, 0x129E, 0x5F61, 0x12AF, 0x5F62, 0x0717, 0x5F64, 0x38BB,
- 0x5F65, 0x36AC, 0x5F66, 0x0D99, 0x5F67, 0x2103, 0x5F69, 0x083C,
- 0x5F6A, 0x0DA9, 0x5F6B, 0x0BC2, 0x5F6C, 0x0DBD, 0x5F6D, 0x12B0,
- 0x5F70, 0x099C, 0x5F71, 0x04E8, 0x5F73, 0x12B1, 0x5F77, 0x12B2,
- 0x5F79, 0x0EFE, 0x5F7C, 0x0D74, 0x5F7F, 0x12B5, 0x5F80, 0x051F,
- 0x5F81, 0x0A50, 0x5F82, 0x12B4, 0x5F83, 0x12B3, 0x5F84, 0x0718,
- 0x5F85, 0x0B34, 0x5F87, 0x12B9, 0x5F88, 0x12B7, 0x5F89, 0x38BC,
- 0x5F8A, 0x12B6, 0x5F8B, 0x0F6F, 0x5F8C, 0x0799, 0x5F90, 0x0983,
- 0x5F91, 0x12B8, 0x5F92, 0x0C46, 0x5F93, 0x0948, 0x5F97, 0x0C98,
- 0x5F98, 0x12BC, 0x5F99, 0x12BB, 0x5F9C, 0x38BD, 0x5F9E, 0x12BA,
- 0x5FA0, 0x12BD, 0x5FA1, 0x079A, 0x5FA4, 0x38BF, 0x5FA7, 0x38BE,
- 0x5FA8, 0x12BE, 0x5FA9, 0x0DEE, 0x5FAA, 0x0965, 0x5FAD, 0x12BF,
- 0x5FAE, 0x0D8D, 0x5FAF, 0x38C0, 0x5FB3, 0x0C99, 0x5FB4, 0x0BC3,
- 0x5FB5, 0x3438, 0x5FB7, 0x2104, 0x5FB8, 0x38C1, 0x5FB9, 0x0C2A,
- 0x5FBC, 0x12C0, 0x5FBD, 0x0645, 0x5FC3, 0x09FA, 0x5FC4, 0x38C2,
- 0x5FC5, 0x0D9E, 0x5FC9, 0x38C3, 0x5FCC, 0x0633, 0x5FCD, 0x0CDC,
- 0x5FD6, 0x12C1, 0x5FD7, 0x08A4, 0x5FD8, 0x0E68, 0x5FD9, 0x0E69,
- 0x5FDC, 0x0520, 0x5FDD, 0x12C6, 0x5FDE, 0x2105, 0x5FE0, 0x0BA7,
- 0x5FE1, 0x38C4, 0x5FE4, 0x12C3, 0x5FE9, 0x38C5, 0x5FEB, 0x0577,
- 0x5FED, 0x38C6, 0x5FF0, 0x12F6, 0x5FF1, 0x12C5, 0x5FF5, 0x0CE6,
- 0x5FF8, 0x12C4, 0x5FFB, 0x12C2, 0x5FFC, 0x38C7, 0x5FFD, 0x080C,
- 0x5FFF, 0x12C8, 0x600E, 0x12CE, 0x600F, 0x12D4, 0x6010, 0x12CC,
- 0x6012, 0x0C56, 0x6015, 0x12D1, 0x6016, 0x0DCF, 0x6017, 0x38C8,
- 0x6019, 0x12CB, 0x601A, 0x38C9, 0x601B, 0x12D0, 0x601C, 0x0FAF,
- 0x601D, 0x08A5, 0x6020, 0x0B35, 0x6021, 0x12C9, 0x6025, 0x0678,
- 0x6026, 0x12D3, 0x6027, 0x0A51, 0x6028, 0x0507, 0x6029, 0x12CD,
- 0x602A, 0x0578, 0x602B, 0x12D2, 0x602F, 0x06A9, 0x6031, 0x12CF,
- 0x6033, 0x38CA, 0x603A, 0x12D5, 0x6041, 0x12D7, 0x6042, 0x12E1,
- 0x6043, 0x12DF, 0x6046, 0x12DC, 0x604A, 0x12DB, 0x604B, 0x0FC0,
- 0x604D, 0x12DD, 0x6050, 0x06AA, 0x6052, 0x07C3, 0x6055, 0x0984,
- 0x6059, 0x12E4, 0x605A, 0x12D6, 0x605D, 0x2106, 0x605F, 0x12DA,
- 0x6060, 0x12CA, 0x6061, 0x38CB, 0x6062, 0x057A, 0x6063, 0x12DE,
- 0x6064, 0x12E0, 0x6065, 0x0B8F, 0x6068, 0x0818, 0x6069, 0x0538,
- 0x606A, 0x12D8, 0x606B, 0x12E3, 0x606C, 0x12E2, 0x606D, 0x06AB,
- 0x606F, 0x0B09, 0x6070, 0x05C4, 0x6075, 0x0719, 0x6077, 0x12D9,
- 0x607F, 0x38CC, 0x6081, 0x12E5, 0x6083, 0x12E8, 0x6084, 0x12EA,
- 0x6085, 0x2107, 0x6089, 0x08E9, 0x608A, 0x2108, 0x608B, 0x12F0,
- 0x608C, 0x0C0C, 0x608D, 0x12E6, 0x6092, 0x12EE, 0x6094, 0x0579,
- 0x6096, 0x12EC, 0x6097, 0x12ED, 0x609A, 0x12E9, 0x609B, 0x12EB,
- 0x609E, 0x38CD, 0x609F, 0x079B, 0x60A0, 0x0F14, 0x60A3, 0x05F1,
- 0x60A4, 0x38CE, 0x60A6, 0x04FB, 0x60A7, 0x12EF, 0x60A9, 0x0CF0,
- 0x60AA, 0x0471, 0x60B0, 0x38CF, 0x60B2, 0x0D75, 0x60B3, 0x12C7,
- 0x60B4, 0x12F5, 0x60B5, 0x12F9, 0x60B6, 0x0EF1, 0x60B8, 0x12F2,
- 0x60BC, 0x0C63, 0x60BD, 0x12F7, 0x60C5, 0x09D8, 0x60C6, 0x12F8,
- 0x60C7, 0x0CAF, 0x60CB, 0x38D0, 0x60D1, 0x0FED, 0x60D3, 0x12F4,
- 0x60D5, 0x210A, 0x60D8, 0x12FA, 0x60DA, 0x080D, 0x60DB, 0x38D1,
- 0x60DC, 0x0A6F, 0x60DE, 0x2109, 0x60DF, 0x0498, 0x60E0, 0x12F3,
- 0x60E1, 0x12F1, 0x60E3, 0x0ADC, 0x60E7, 0x12E7, 0x60E8, 0x0882,
- 0x60F0, 0x0B26, 0x60F1, 0x1306, 0x60F2, 0x210C, 0x60F3, 0x0ADD,
- 0x60F4, 0x1301, 0x60F6, 0x12FE, 0x60F7, 0x12FF, 0x60F8, 0x38D2,
- 0x60F9, 0x0912, 0x60FA, 0x1302, 0x60FB, 0x1305, 0x6100, 0x1300,
- 0x6101, 0x092F, 0x6103, 0x1303, 0x6106, 0x12FD, 0x6108, 0x0F08,
- 0x6109, 0x0F07, 0x610D, 0x1307, 0x610E, 0x1308, 0x610F, 0x0499,
- 0x6111, 0x210D, 0x6112, 0x38D3, 0x6113, 0x38D4, 0x6114, 0x38D5,
- 0x6115, 0x12FC, 0x611A, 0x06EA, 0x611B, 0x046A, 0x611C, 0x38D6,
- 0x611F, 0x05F2, 0x6120, 0x210B, 0x6121, 0x1304, 0x6127, 0x130C,
- 0x6128, 0x130B, 0x612C, 0x1310, 0x6130, 0x210F, 0x6134, 0x1311,
- 0x6137, 0x210E, 0x613C, 0x130F, 0x613D, 0x1312, 0x613E, 0x130A,
- 0x613F, 0x130E, 0x6142, 0x1313, 0x6144, 0x1314, 0x6147, 0x1309,
- 0x6148, 0x08CA, 0x614A, 0x130D, 0x614B, 0x0B36, 0x614C, 0x07C4,
- 0x614D, 0x12FB, 0x614E, 0x09FB, 0x6153, 0x1321, 0x6155, 0x0E39,
- 0x6158, 0x1317, 0x6159, 0x1318, 0x615A, 0x1319, 0x615D, 0x1320,
- 0x615F, 0x131F, 0x6162, 0x0EAB, 0x6163, 0x05F3, 0x6165, 0x131D,
- 0x6167, 0x071B, 0x6168, 0x0592, 0x616B, 0x131A, 0x616E, 0x0F80,
- 0x616F, 0x131C, 0x6170, 0x049A, 0x6171, 0x131E, 0x6173, 0x1315,
- 0x6174, 0x131B, 0x6175, 0x1322, 0x6176, 0x071A, 0x6177, 0x1316,
- 0x617C, 0x38D7, 0x617E, 0x0F47, 0x6182, 0x0F15, 0x6187, 0x1325,
- 0x618A, 0x1329, 0x618D, 0x38D8, 0x618E, 0x0B00, 0x6190, 0x0FC1,
- 0x6191, 0x132A, 0x6194, 0x1327, 0x6196, 0x1324, 0x6198, 0x2110,
- 0x6199, 0x1323, 0x619A, 0x1328, 0x619F, 0x38D9, 0x61A4, 0x0E00,
- 0x61A7, 0x0C8C, 0x61A8, 0x38DA, 0x61A9, 0x071C, 0x61AB, 0x132B,
- 0x61AC, 0x1326, 0x61AE, 0x132C, 0x61B2, 0x0751, 0x61B6, 0x0531,
- 0x61BA, 0x1334, 0x61BE, 0x05F4, 0x61C2, 0x38DB, 0x61C3, 0x1332,
- 0x61C6, 0x1333, 0x61C7, 0x0819, 0x61C8, 0x1331, 0x61C9, 0x132F,
- 0x61CA, 0x132E, 0x61CB, 0x1335, 0x61CC, 0x132D, 0x61CD, 0x1337,
- 0x61D0, 0x057B, 0x61DF, 0x38DC, 0x61E3, 0x1339, 0x61E6, 0x1338,
- 0x61F2, 0x0BC4, 0x61F4, 0x133C, 0x61F6, 0x133A, 0x61F7, 0x1330,
- 0x61F8, 0x0752, 0x61FA, 0x133B, 0x61FC, 0x133F, 0x61FD, 0x133E,
- 0x61FE, 0x1340, 0x61FF, 0x133D, 0x6200, 0x1341, 0x6208, 0x1342,
- 0x6209, 0x1343, 0x620A, 0x0E3A, 0x620C, 0x1345, 0x620D, 0x1344,
- 0x620E, 0x0949, 0x6210, 0x0A52, 0x6211, 0x0566, 0x6212, 0x057C,
- 0x6213, 0x2111, 0x6214, 0x1346, 0x6215, 0x38DD, 0x6216, 0x0483,
- 0x621A, 0x0A70, 0x621B, 0x1347, 0x621D, 0x1A64, 0x621E, 0x1348,
- 0x621F, 0x0737, 0x6221, 0x1349, 0x6226, 0x0A93, 0x6229, 0x38DE,
- 0x622A, 0x134A, 0x622E, 0x134B, 0x622F, 0x0654, 0x6230, 0x134C,
- 0x6232, 0x134D, 0x6233, 0x134E, 0x6234, 0x0B37, 0x6236, 0x35BD,
- 0x6238, 0x0781, 0x623B, 0x0EED, 0x623E, 0x344E, 0x623F, 0x0E6A,
- 0x6240, 0x0974, 0x6241, 0x134F, 0x6243, 0x38DF, 0x6246, 0x38E0,
- 0x6247, 0x0A94, 0x6248, 0x1B1A, 0x6249, 0x0D76, 0x624B, 0x0916,
- 0x624C, 0x38E1, 0x624D, 0x083D, 0x624E, 0x1350, 0x6251, 0x38E2,
- 0x6253, 0x0B27, 0x6255, 0x0DF7, 0x6256, 0x38E3, 0x6258, 0x0B51,
- 0x625B, 0x1353, 0x625E, 0x1351, 0x6260, 0x1354, 0x6263, 0x1352,
- 0x6268, 0x1355, 0x626E, 0x0E01, 0x6271, 0x047B, 0x6276, 0x0DD0,
- 0x6279, 0x0D77, 0x627C, 0x1356, 0x627E, 0x1359, 0x627F, 0x099D,
- 0x6280, 0x0655, 0x6282, 0x1357, 0x6283, 0x135E, 0x6284, 0x099E,
- 0x6285, 0x35C5, 0x6289, 0x1358, 0x628A, 0x0CFA, 0x6291, 0x0F48,
- 0x6292, 0x135A, 0x6293, 0x135B, 0x6294, 0x135F, 0x6295, 0x0C64,
- 0x6296, 0x135C, 0x6297, 0x07C5, 0x6298, 0x0A82, 0x629B, 0x136D,
- 0x629C, 0x0D48, 0x629E, 0x0B52, 0x62A6, 0x2112, 0x62AB, 0x0D78,
- 0x62AC, 0x13B2, 0x62B1, 0x0E4A, 0x62B5, 0x0C0D, 0x62B9, 0x0EA3,
- 0x62BB, 0x1362, 0x62BC, 0x0521, 0x62BD, 0x0BA8, 0x62C2, 0x136B,
- 0x62C4, 0x38E4, 0x62C5, 0x0B72, 0x62C6, 0x1365, 0x62C7, 0x136C,
- 0x62C8, 0x1367, 0x62C9, 0x136E, 0x62CA, 0x136A, 0x62CC, 0x1369,
- 0x62CD, 0x0D25, 0x62CF, 0x1363, 0x62D0, 0x057D, 0x62D1, 0x1361,
- 0x62D2, 0x068B, 0x62D3, 0x0B53, 0x62D4, 0x135D, 0x62D7, 0x1360,
- 0x62D8, 0x07C6, 0x62D9, 0x0A7F, 0x62DB, 0x099F, 0x62DC, 0x1368,
- 0x62DD, 0x0D08, 0x62E0, 0x068C, 0x62E1, 0x05A6, 0x62EC, 0x05C5,
- 0x62ED, 0x09E7, 0x62EE, 0x1370, 0x62EF, 0x1375, 0x62F1, 0x1371,
- 0x62F3, 0x0753, 0x62F5, 0x1376, 0x62F6, 0x0870, 0x62F7, 0x07FB,
- 0x62FC, 0x38E5, 0x62FE, 0x0930, 0x62FF, 0x1364, 0x6301, 0x08CB,
- 0x6302, 0x1373, 0x6307, 0x08A6, 0x6308, 0x1374, 0x6309, 0x0488,
- 0x630A, 0x38E6, 0x630C, 0x136F, 0x630D, 0x38E7, 0x6311, 0x0BC5,
- 0x6318, 0x38E8, 0x6319, 0x068D, 0x631B, 0x3737, 0x631F, 0x06AC,
- 0x6327, 0x1372, 0x6328, 0x046B, 0x632B, 0x0833, 0x632F, 0x09FC,
- 0x6339, 0x38E9, 0x633A, 0x0C0E, 0x633D, 0x0D68, 0x633E, 0x1378,
- 0x633F, 0x0AE0, 0x6342, 0x38EA, 0x6343, 0x38EB, 0x6349, 0x0B0A,
- 0x634C, 0x0879, 0x634D, 0x1379, 0x634F, 0x137B, 0x6350, 0x1377,
- 0x6355, 0x0E31, 0x6357, 0x0BD9, 0x635C, 0x0ADE, 0x6365, 0x38EC,
- 0x6367, 0x0E4B, 0x6368, 0x08FA, 0x6369, 0x1387, 0x636B, 0x1386,
- 0x636E, 0x0A3E, 0x6372, 0x0754, 0x6374, 0x38ED, 0x6376, 0x1380,
- 0x6377, 0x09A1, 0x637A, 0x0CC0, 0x637B, 0x0CE7, 0x637D, 0x38EE,
- 0x6380, 0x137E, 0x6383, 0x0ADF, 0x6384, 0x38EF, 0x6387, 0x38F0,
- 0x6388, 0x0924, 0x6389, 0x1383, 0x638C, 0x09A0, 0x638E, 0x137D,
- 0x638F, 0x1382, 0x6390, 0x38F1, 0x6392, 0x0D09, 0x6396, 0x137C,
- 0x6398, 0x06F7, 0x639B, 0x05BB, 0x639E, 0x38F2, 0x639F, 0x1384,
- 0x63A0, 0x0F73, 0x63A1, 0x083E, 0x63A2, 0x0B73, 0x63A3, 0x1381,
- 0x63A5, 0x0A80, 0x63A7, 0x07C7, 0x63A8, 0x0A2A, 0x63A9, 0x0508,
- 0x63AA, 0x0ABE, 0x63AB, 0x137F, 0x63AC, 0x065F, 0x63B2, 0x071D,
- 0x63B4, 0x0BEB, 0x63B5, 0x1385, 0x63BB, 0x0AE1, 0x63BE, 0x1388,
- 0x63C0, 0x138A, 0x63C3, 0x0B17, 0x63C4, 0x1390, 0x63C6, 0x138B,
- 0x63C9, 0x138D, 0x63CF, 0x0DB3, 0x63D0, 0x0C0F, 0x63D1, 0x38F3,
- 0x63D2, 0x138E, 0x63D6, 0x0F16, 0x63DA, 0x0F32, 0x63DB, 0x05F5,
- 0x63DC, 0x38F4, 0x63E1, 0x0472, 0x63E3, 0x138C, 0x63E9, 0x1389,
- 0x63ED, 0x341C, 0x63EE, 0x0634, 0x63F4, 0x0509, 0x63F5, 0x2113,
- 0x63F6, 0x138F, 0x63F7, 0x3644, 0x63FA, 0x0F33, 0x6406, 0x1393,
- 0x6409, 0x38F5, 0x640D, 0x0B1B, 0x640F, 0x139A, 0x6410, 0x38F6,
- 0x6413, 0x1394, 0x6414, 0x1E2C, 0x6416, 0x1391, 0x6417, 0x1398,
- 0x641C, 0x137A, 0x6422, 0x38F7, 0x6426, 0x1395, 0x6428, 0x1399,
- 0x642C, 0x0D56, 0x642D, 0x0C65, 0x6434, 0x1392, 0x6436, 0x1396,
- 0x643A, 0x071E, 0x643E, 0x0861, 0x6442, 0x0A81, 0x644E, 0x139E,
- 0x6451, 0x1E43, 0x6454, 0x38F8, 0x6458, 0x0C20, 0x645B, 0x38F9,
- 0x6460, 0x2114, 0x6467, 0x139B, 0x6469, 0x0E8E, 0x646D, 0x38FA,
- 0x646F, 0x139C, 0x6476, 0x139D, 0x6478, 0x0EDA, 0x647A, 0x0A46,
- 0x647B, 0x38FB, 0x6483, 0x0738, 0x6488, 0x13A4, 0x6492, 0x0883,
- 0x6493, 0x13A1, 0x6495, 0x13A0, 0x649A, 0x0CE8, 0x649D, 0x2115,
- 0x649E, 0x0C8D, 0x64A4, 0x0C2B, 0x64A5, 0x13A2, 0x64A9, 0x13A3,
- 0x64AB, 0x0DE1, 0x64AD, 0x0CFB, 0x64AE, 0x0871, 0x64B0, 0x0A95,
- 0x64B2, 0x0E7E, 0x64B9, 0x05A7, 0x64BB, 0x13AA, 0x64BC, 0x13A5,
- 0x64BE, 0x38FC, 0x64BF, 0x38FD, 0x64C1, 0x0F34, 0x64C2, 0x13AC,
- 0x64C5, 0x13A8, 0x64C7, 0x13A9, 0x64CA, 0x341D, 0x64CD, 0x0AE2,
- 0x64CE, 0x2116, 0x64D2, 0x13A7, 0x64D4, 0x1366, 0x64D8, 0x13AB,
- 0x64DA, 0x13A6, 0x64E0, 0x13B0, 0x64E1, 0x13B1, 0x64E2, 0x0C21,
- 0x64E3, 0x13B3, 0x64E5, 0x38FE, 0x64E6, 0x0872, 0x64E7, 0x13AE,
- 0x64EC, 0x0656, 0x64EF, 0x13B4, 0x64F1, 0x13AD, 0x64F2, 0x13B8,
- 0x64F4, 0x13B7, 0x64F6, 0x13B6, 0x64F7, 0x38FF, 0x64FA, 0x13B9,
- 0x64FB, 0x3900, 0x64FD, 0x13BB, 0x64FE, 0x09D9, 0x6500, 0x13BA,
- 0x6504, 0x3901, 0x6505, 0x13BE, 0x6516, 0x3902, 0x6518, 0x13BC,
- 0x6519, 0x3903, 0x651C, 0x13BD, 0x651D, 0x1397, 0x6522, 0x1E97,
- 0x6523, 0x13C0, 0x6524, 0x13BF, 0x652A, 0x139F, 0x652B, 0x13C1,
- 0x652C, 0x13B5, 0x652F, 0x08A7, 0x6534, 0x13C2, 0x6535, 0x13C3,
- 0x6536, 0x13C5, 0x6537, 0x13C4, 0x6538, 0x13C6, 0x6539, 0x057E,
- 0x653B, 0x07C8, 0x653E, 0x0E4C, 0x653F, 0x0A53, 0x6545, 0x0782,
- 0x6547, 0x3904, 0x6548, 0x13C8, 0x654D, 0x13CB, 0x654E, 0x2117,
- 0x654F, 0x0DC4, 0x6551, 0x0679, 0x6555, 0x13CA, 0x6556, 0x13C9,
- 0x6557, 0x0D0A, 0x6558, 0x13CC, 0x6559, 0x06AD, 0x655D, 0x13CE,
- 0x655E, 0x13CD, 0x6562, 0x05F6, 0x6563, 0x0884, 0x6566, 0x0CB0,
- 0x6567, 0x3905, 0x656C, 0x071F, 0x6570, 0x0A3A, 0x6572, 0x13CF,
- 0x6574, 0x0A54, 0x6575, 0x0C22, 0x6577, 0x0DD1, 0x6578, 0x13D0,
- 0x6581, 0x3906, 0x6582, 0x13D1, 0x6583, 0x13D2, 0x6585, 0x3907,
- 0x6587, 0x0E08, 0x6588, 0x120C, 0x6589, 0x0A6A, 0x658C, 0x0DBE,
- 0x658E, 0x0848, 0x6590, 0x0D79, 0x6591, 0x0D57, 0x6597, 0x0C47,
- 0x6599, 0x0F89, 0x659B, 0x13D4, 0x659C, 0x08FC, 0x659F, 0x13D5,
- 0x65A1, 0x047A, 0x65A4, 0x06CC, 0x65A5, 0x0A71, 0x65A7, 0x0DD2,
- 0x65AB, 0x13D6, 0x65AC, 0x0890, 0x65AD, 0x0B85, 0x65AF, 0x08A9,
- 0x65B0, 0x09FD, 0x65B7, 0x13D7, 0x65B9, 0x0E4D, 0x65BC, 0x0519,
- 0x65BD, 0x08AA, 0x65C1, 0x13DA, 0x65C2, 0x3908, 0x65C3, 0x13D8,
- 0x65C4, 0x13DB, 0x65C5, 0x0F81, 0x65C6, 0x13D9, 0x65CB, 0x0A9F,
- 0x65CC, 0x13DC, 0x65CF, 0x0B12, 0x65D2, 0x13DD, 0x65D7, 0x0636,
- 0x65D9, 0x13DF, 0x65DB, 0x13DE, 0x65E0, 0x13E0, 0x65E1, 0x13E1,
- 0x65E2, 0x0637, 0x65E3, 0x3585, 0x65E5, 0x0CD4, 0x65E6, 0x0B74,
- 0x65E7, 0x0686, 0x65E8, 0x08AB, 0x65E9, 0x0AE3, 0x65EC, 0x0966,
- 0x65ED, 0x0474, 0x65F0, 0x3909, 0x65F1, 0x13E2, 0x65F2, 0x390A,
- 0x65FA, 0x0522, 0x65FB, 0x13E6, 0x6600, 0x2118, 0x6602, 0x07C9,
- 0x6603, 0x13E5, 0x6606, 0x081B, 0x6607, 0x09A2, 0x6609, 0x211A,
- 0x660A, 0x13E4, 0x660C, 0x09A3, 0x660E, 0x0ECC, 0x660F, 0x081A,
- 0x6613, 0x049B, 0x6614, 0x0A72, 0x6615, 0x2119, 0x661C, 0x13EB,
- 0x661E, 0x211C, 0x661F, 0x0A55, 0x6620, 0x04E9, 0x6624, 0x211D,
- 0x6625, 0x095F, 0x6627, 0x0E94, 0x6628, 0x0862, 0x662C, 0x390B,
- 0x662D, 0x09A4, 0x662E, 0x211B, 0x662F, 0x0A4B, 0x6631, 0x20AE,
- 0x6634, 0x13EA, 0x6635, 0x13E8, 0x6636, 0x13E9, 0x663B, 0x1E00,
- 0x663C, 0x0BA9, 0x663F, 0x1409, 0x6641, 0x13EF, 0x6642, 0x08CC,
- 0x6643, 0x07CA, 0x6644, 0x13ED, 0x6649, 0x13EE, 0x664B, 0x09FE,
- 0x664C, 0x390C, 0x664F, 0x13EC, 0x6652, 0x087D, 0x6657, 0x211F,
- 0x6659, 0x2120, 0x665B, 0x390D, 0x665C, 0x390E, 0x665D, 0x13F1,
- 0x665E, 0x13F0, 0x665F, 0x13F5, 0x6661, 0x390F, 0x6662, 0x13F6,
- 0x6663, 0x373A, 0x6664, 0x13F2, 0x6665, 0x211E, 0x6666, 0x0580,
- 0x6667, 0x13F3, 0x6668, 0x13F4, 0x6669, 0x0D69, 0x666B, 0x3910,
- 0x666E, 0x0DD3, 0x666F, 0x0720, 0x6670, 0x13F7, 0x6673, 0x2122,
- 0x6674, 0x0A56, 0x6676, 0x09A5, 0x6677, 0x3911, 0x667A, 0x0B90,
- 0x6681, 0x06BF, 0x6683, 0x13F8, 0x6684, 0x13FC, 0x6687, 0x054B,
- 0x6688, 0x13F9, 0x6689, 0x13FB, 0x668E, 0x13FA, 0x6691, 0x0975,
- 0x6696, 0x0B86, 0x6697, 0x0489, 0x6698, 0x13FD, 0x6699, 0x2123,
- 0x669D, 0x13FE, 0x66A0, 0x2124, 0x66A2, 0x0BC6, 0x66A4, 0x3912,
- 0x66A6, 0x0FB9, 0x66AB, 0x0891, 0x66AE, 0x0E3B, 0x66B2, 0x2125,
- 0x66B4, 0x0E6B, 0x66B8, 0x1405, 0x66B9, 0x1400, 0x66BC, 0x1403,
- 0x66BE, 0x1402, 0x66BF, 0x2126, 0x66C1, 0x13FF, 0x66C4, 0x1404,
- 0x66C6, 0x3455, 0x66C7, 0x0CB6, 0x66C8, 0x3913, 0x66C9, 0x1401,
- 0x66D6, 0x1406, 0x66D9, 0x0976, 0x66DA, 0x1407, 0x66DC, 0x0F35,
- 0x66DD, 0x0D2E, 0x66E0, 0x1408, 0x66E6, 0x140A, 0x66E9, 0x140B,
- 0x66EC, 0x3914, 0x66F0, 0x140C, 0x66F2, 0x06C2, 0x66F3, 0x04EA,
- 0x66F4, 0x07CB, 0x66F5, 0x140D, 0x66F7, 0x140E, 0x66F8, 0x097B,
- 0x66F9, 0x0AE4, 0x66FA, 0x2127, 0x66FB, 0x20B1, 0x66FC, 0x10ED,
- 0x66FD, 0x0AC0, 0x66FE, 0x0ABF, 0x66FF, 0x0B38, 0x6700, 0x0837,
- 0x6703, 0x104B, 0x6705, 0x3915, 0x6708, 0x0744, 0x6709, 0x0F17,
- 0x670B, 0x0E4E, 0x670D, 0x0DF0, 0x670E, 0x2128, 0x670F, 0x140F,
- 0x6713, 0x3916, 0x6714, 0x0863, 0x6715, 0x0BDB, 0x6716, 0x1410,
- 0x6717, 0x0FD5, 0x671B, 0x0E6C, 0x671D, 0x0BC7, 0x671E, 0x1411,
- 0x671F, 0x0638, 0x6726, 0x1412, 0x6727, 0x1413, 0x6728, 0x0EE6,
- 0x672A, 0x0EB0, 0x672B, 0x0EA4, 0x672C, 0x0E8A, 0x672D, 0x0873,
- 0x672E, 0x1415, 0x6731, 0x0917, 0x6733, 0x3917, 0x6734, 0x0E7F,
- 0x6736, 0x1417, 0x6737, 0x141A, 0x6738, 0x1419, 0x673A, 0x0635,
- 0x673D, 0x067A, 0x673F, 0x1416, 0x6741, 0x1418, 0x6743, 0x35B7,
- 0x6746, 0x141B, 0x6748, 0x3918, 0x6749, 0x0A3F, 0x674C, 0x3919,
- 0x674E, 0x0F65, 0x674F, 0x048D, 0x6750, 0x0850, 0x6751, 0x0B1C,
- 0x6753, 0x0909, 0x6756, 0x09DB, 0x6759, 0x141E, 0x675C, 0x0C48,
- 0x675E, 0x141C, 0x675F, 0x0B0B, 0x6760, 0x141D, 0x6761, 0x09DA,
- 0x6762, 0x0EE9, 0x6763, 0x141F, 0x6764, 0x1420, 0x6765, 0x0F52,
- 0x6766, 0x212A, 0x676A, 0x1425, 0x676D, 0x07CC, 0x676E, 0x3571,
- 0x676F, 0x0D0B, 0x6770, 0x1422, 0x6771, 0x0C66, 0x6772, 0x13E3,
- 0x6773, 0x13E7, 0x6775, 0x0669, 0x6776, 0x391A, 0x6777, 0x0CFD,
- 0x677B, 0x391B, 0x677C, 0x1424, 0x677E, 0x09A6, 0x677F, 0x0D58,
- 0x6785, 0x142A, 0x6787, 0x0D8E, 0x6789, 0x1421, 0x678B, 0x1427,
- 0x678C, 0x1426, 0x6790, 0x0A73, 0x6795, 0x0E9B, 0x6797, 0x0F9B,
- 0x679A, 0x0E95, 0x679C, 0x054C, 0x679D, 0x08AC, 0x67A0, 0x0FEE,
- 0x67A1, 0x1429, 0x67A2, 0x0A3B, 0x67A6, 0x1428, 0x67A9, 0x1423,
- 0x67AF, 0x0783, 0x67B0, 0x391C, 0x67B2, 0x391D, 0x67B3, 0x142F,
- 0x67B4, 0x142D, 0x67B6, 0x054D, 0x67B7, 0x142B, 0x67B8, 0x1431,
- 0x67B9, 0x1437, 0x67BB, 0x212B, 0x67C0, 0x212D, 0x67C1, 0x0B28,
- 0x67C4, 0x0E11, 0x67C6, 0x1439, 0x67CA, 0x0D94, 0x67CE, 0x1438,
- 0x67CF, 0x0D26, 0x67D0, 0x0E6D, 0x67D1, 0x05F7, 0x67D3, 0x0A9B,
- 0x67D4, 0x094A, 0x67D7, 0x391F, 0x67D8, 0x0BEF, 0x67D9, 0x3920,
- 0x67DA, 0x0F18, 0x67DD, 0x1434, 0x67DE, 0x1433, 0x67E2, 0x1435,
- 0x67E4, 0x1432, 0x67E7, 0x143A, 0x67E9, 0x1430, 0x67EC, 0x142E,
- 0x67EE, 0x1436, 0x67EF, 0x142C, 0x67F0, 0x3921, 0x67F1, 0x0BAA,
- 0x67F3, 0x0F04, 0x67F4, 0x08F2, 0x67F5, 0x0864, 0x67F9, 0x391E,
- 0x67FB, 0x082A, 0x67FE, 0x0E9D, 0x67FF, 0x059F, 0x6801, 0x212E,
- 0x6802, 0x0BEA, 0x6803, 0x0CA2, 0x6804, 0x04EB, 0x6805, 0x1E07,
- 0x6813, 0x0A96, 0x6816, 0x0A58, 0x6817, 0x0700, 0x681E, 0x143C,
- 0x6821, 0x07CD, 0x6822, 0x05DA, 0x6829, 0x143E, 0x682A, 0x05D2,
- 0x682B, 0x1444, 0x682C, 0x3922, 0x6830, 0x3923, 0x6831, 0x3924,
- 0x6832, 0x1441, 0x6834, 0x0A97, 0x6838, 0x05A9, 0x6839, 0x081C,
- 0x683C, 0x05A8, 0x683D, 0x083F, 0x6840, 0x143F, 0x6841, 0x073B,
- 0x6842, 0x0721, 0x6843, 0x0C67, 0x6844, 0x212F, 0x6846, 0x143D,
- 0x6848, 0x048A, 0x684D, 0x1440, 0x684E, 0x1442, 0x6850, 0x06C5,
- 0x6851, 0x0702, 0x6852, 0x212C, 0x6853, 0x05F8, 0x6854, 0x0665,
- 0x6859, 0x1445, 0x685B, 0x3925, 0x685C, 0x0869, 0x685D, 0x0E9F,
- 0x685F, 0x0885, 0x6863, 0x1446, 0x6867, 0x0DA2, 0x6872, 0x3926,
- 0x6874, 0x1452, 0x6875, 0x3927, 0x6876, 0x0533, 0x6877, 0x1447,
- 0x687A, 0x3928, 0x687E, 0x1458, 0x687F, 0x1448, 0x6881, 0x0F8A,
- 0x6883, 0x144F, 0x6884, 0x3929, 0x6885, 0x0D15, 0x688D, 0x1457,
- 0x688E, 0x1E9C, 0x688F, 0x144A, 0x6893, 0x0478, 0x6894, 0x144C,
- 0x6897, 0x07CE, 0x689B, 0x144E, 0x689D, 0x144D, 0x689F, 0x1449,
- 0x68A0, 0x1454, 0x68A2, 0x09A7, 0x68A5, 0x392A, 0x68A6, 0x11BE,
- 0x68A7, 0x079C, 0x68A8, 0x0F66, 0x68AD, 0x144B, 0x68AF, 0x0C10,
- 0x68B0, 0x0581, 0x68B1, 0x081D, 0x68B2, 0x392B, 0x68B3, 0x1443,
- 0x68B5, 0x1453, 0x68B6, 0x05BF, 0x68B9, 0x1451, 0x68BA, 0x1455,
- 0x68BC, 0x0C68, 0x68C4, 0x063A, 0x68C6, 0x1473, 0x68C8, 0x20AF,
- 0x68C9, 0x0ED5, 0x68CA, 0x145A, 0x68CB, 0x0639, 0x68CD, 0x1461,
- 0x68CF, 0x2130, 0x68D0, 0x392C, 0x68D2, 0x0E6E, 0x68D4, 0x1462,
- 0x68D5, 0x1464, 0x68D6, 0x392D, 0x68D7, 0x1468, 0x68D8, 0x145C,
- 0x68DA, 0x0B68, 0x68DF, 0x0C69, 0x68E0, 0x146C, 0x68E1, 0x145F,
- 0x68E3, 0x1469, 0x68E7, 0x1463, 0x68E8, 0x392E, 0x68ED, 0x392F,
- 0x68EE, 0x09FF, 0x68EF, 0x146D, 0x68F0, 0x3930, 0x68F1, 0x3931,
- 0x68F2, 0x0A57, 0x68F9, 0x146B, 0x68FA, 0x05F9, 0x68FC, 0x3932,
- 0x6900, 0x0FF6, 0x6901, 0x1459, 0x6904, 0x1467, 0x6905, 0x049C,
- 0x6908, 0x145B, 0x690B, 0x0EC6, 0x690C, 0x1460, 0x690D, 0x09E8,
- 0x690E, 0x0BE3, 0x690F, 0x1456, 0x6911, 0x3933, 0x6912, 0x1466,
- 0x6913, 0x3934, 0x6919, 0x0A40, 0x691A, 0x1470, 0x691B, 0x05CF,
- 0x691C, 0x0755, 0x6921, 0x1472, 0x6922, 0x145D, 0x6923, 0x1471,
- 0x6925, 0x146A, 0x6926, 0x145E, 0x6928, 0x146E, 0x692A, 0x146F,
- 0x6930, 0x1480, 0x6934, 0x0CA6, 0x6935, 0x3935, 0x6936, 0x1465,
- 0x6939, 0x147C, 0x693B, 0x3936, 0x693D, 0x147E, 0x693F, 0x0BF4,
- 0x694A, 0x0F36, 0x6953, 0x0DE8, 0x6954, 0x1479, 0x6955, 0x0B2A,
- 0x6957, 0x3937, 0x6959, 0x147F, 0x695A, 0x0AC1, 0x695C, 0x1476,
- 0x695D, 0x1483, 0x695E, 0x1482, 0x6960, 0x0CC7, 0x6961, 0x1481,
- 0x6962, 0x0CC2, 0x6963, 0x3938, 0x6968, 0x2132, 0x696A, 0x1485,
- 0x696B, 0x1478, 0x696D, 0x06C0, 0x696E, 0x147B, 0x696F, 0x0967,
- 0x6972, 0x3939, 0x6973, 0x0D16, 0x6974, 0x147D, 0x6975, 0x06C3,
- 0x6977, 0x1475, 0x6978, 0x1477, 0x6979, 0x1474, 0x697C, 0x0FD6,
- 0x697D, 0x05B8, 0x697E, 0x147A, 0x697F, 0x393A, 0x6980, 0x393B,
- 0x6981, 0x1484, 0x6982, 0x0593, 0x698A, 0x0857, 0x698E, 0x04FF,
- 0x6991, 0x1495, 0x6994, 0x0FD7, 0x6995, 0x1498, 0x6998, 0x2134,
- 0x699B, 0x0A00, 0x699C, 0x1497, 0x69A0, 0x1496, 0x69A6, 0x393C,
- 0x69A7, 0x1493, 0x69AD, 0x393D, 0x69AE, 0x1487, 0x69B1, 0x14A4,
- 0x69B2, 0x1486, 0x69B4, 0x1499, 0x69B7, 0x393E, 0x69BB, 0x1491,
- 0x69BE, 0x148C, 0x69BF, 0x1489, 0x69C1, 0x148A, 0x69C3, 0x1492,
- 0x69C7, 0x1D33, 0x69CA, 0x148F, 0x69CB, 0x07CF, 0x69CC, 0x0BE4,
- 0x69CD, 0x0AE6, 0x69CE, 0x148D, 0x69D0, 0x1488, 0x69D3, 0x148B,
- 0x69D6, 0x393F, 0x69D7, 0x3940, 0x69D8, 0x0F37, 0x69D9, 0x0E98,
- 0x69DD, 0x1490, 0x69DE, 0x149A, 0x69E2, 0x2135, 0x69E7, 0x14A2,
- 0x69E8, 0x149B, 0x69EA, 0x356F, 0x69EB, 0x14A8, 0x69ED, 0x14A6,
- 0x69F2, 0x14A1, 0x69F6, 0x373F, 0x69F9, 0x14A0, 0x69FB, 0x0BEC,
- 0x69FD, 0x0AE7, 0x69FF, 0x149E, 0x6A01, 0x3941, 0x6A02, 0x149C,
- 0x6A05, 0x14A3, 0x6A0A, 0x14A9, 0x6A0B, 0x0D89, 0x6A0C, 0x14AF,
- 0x6A0F, 0x3942, 0x6A12, 0x14AA, 0x6A13, 0x14AD, 0x6A14, 0x14A7,
- 0x6A15, 0x3943, 0x6A17, 0x0BB2, 0x6A19, 0x0DAA, 0x6A1B, 0x149D,
- 0x6A1E, 0x14A5, 0x6A1F, 0x09A8, 0x6A21, 0x0EDB, 0x6A22, 0x14B9,
- 0x6A23, 0x14AC, 0x6A28, 0x3944, 0x6A29, 0x0756, 0x6A2A, 0x0523,
- 0x6A2B, 0x05BD, 0x6A2E, 0x1494, 0x6A30, 0x2136, 0x6A34, 0x3945,
- 0x6A35, 0x09A9, 0x6A36, 0x14B1, 0x6A38, 0x14B8, 0x6A39, 0x0925,
- 0x6A3A, 0x05D0, 0x6A3D, 0x0B6C, 0x6A3E, 0x3946, 0x6A44, 0x14AE,
- 0x6A45, 0x3947, 0x6A46, 0x2138, 0x6A47, 0x14B3, 0x6A48, 0x14B7,
- 0x6A4B, 0x06AE, 0x6A50, 0x3948, 0x6A51, 0x3949, 0x6A54, 0x3C34,
- 0x6A56, 0x394A, 0x6A58, 0x0666, 0x6A59, 0x14B5, 0x6A5B, 0x394B,
- 0x6A5F, 0x063B, 0x6A61, 0x0CA3, 0x6A62, 0x14B4, 0x6A66, 0x14B6,
- 0x6A6B, 0x2137, 0x6A72, 0x14B0, 0x6A73, 0x2139, 0x6A78, 0x14B2,
- 0x6A7E, 0x213A, 0x6A7F, 0x05BE, 0x6A80, 0x0B87, 0x6A83, 0x394C,
- 0x6A84, 0x14BD, 0x6A89, 0x394D, 0x6A8D, 0x14BB, 0x6A8E, 0x079D,
- 0x6A90, 0x14BA, 0x6A91, 0x394E, 0x6A97, 0x14C0, 0x6A9C, 0x143B,
- 0x6A9D, 0x394F, 0x6A9E, 0x3950, 0x6A9F, 0x3951, 0x6AA0, 0x14BC,
- 0x6AA2, 0x14BE, 0x6AA3, 0x14BF, 0x6AAA, 0x14CB, 0x6AAC, 0x14C7,
- 0x6AAE, 0x1450, 0x6AB3, 0x14C6, 0x6AB8, 0x14C5, 0x6ABB, 0x14C2,
- 0x6AC1, 0x14AB, 0x6AC2, 0x14C4, 0x6AC3, 0x14C3, 0x6AD1, 0x14C9,
- 0x6AD3, 0x0FCC, 0x6ADA, 0x14CC, 0x6ADB, 0x06F3, 0x6ADC, 0x3952,
- 0x6ADE, 0x14C8, 0x6ADF, 0x14CA, 0x6AE2, 0x213B, 0x6AE4, 0x213C,
- 0x6AE7, 0x3953, 0x6AE8, 0x0D3B, 0x6AEA, 0x14CD, 0x6AEC, 0x3954,
- 0x6AFA, 0x14D1, 0x6AFB, 0x14CE, 0x6B04, 0x0F5D, 0x6B05, 0x14CF,
- 0x6B0A, 0x149F, 0x6B12, 0x14D2, 0x6B16, 0x14D3, 0x6B1D, 0x04D7,
- 0x6B1E, 0x3955, 0x6B1F, 0x14D5, 0x6B20, 0x073D, 0x6B21, 0x08CD,
- 0x6B23, 0x06CD, 0x6B24, 0x3956, 0x6B27, 0x0524, 0x6B32, 0x0F49,
- 0x6B35, 0x3957, 0x6B37, 0x14D7, 0x6B38, 0x14D6, 0x6B39, 0x14D9,
- 0x6B3A, 0x0657, 0x6B3D, 0x06CE, 0x6B3E, 0x05FA, 0x6B43, 0x14DC,
- 0x6B46, 0x3958, 0x6B47, 0x14DB, 0x6B49, 0x14DD, 0x6B4C, 0x054E,
- 0x6B4E, 0x0B75, 0x6B50, 0x14DE, 0x6B53, 0x05FB, 0x6B54, 0x14E0,
- 0x6B56, 0x3959, 0x6B59, 0x14DF, 0x6B5B, 0x14E1, 0x6B5F, 0x14E2,
- 0x6B60, 0x395A, 0x6B61, 0x14E3, 0x6B62, 0x08AD, 0x6B63, 0x0A59,
- 0x6B64, 0x0811, 0x6B65, 0x344A, 0x6B66, 0x0DE2, 0x6B69, 0x0E32,
- 0x6B6A, 0x0FEA, 0x6B6F, 0x08C3, 0x6B72, 0x35D9, 0x6B73, 0x0840,
- 0x6B74, 0x0FBA, 0x6B77, 0x3456, 0x6B78, 0x14E4, 0x6B79, 0x14E5,
- 0x6B7B, 0x08AE, 0x6B7F, 0x14E6, 0x6B80, 0x14E7, 0x6B82, 0x395B,
- 0x6B83, 0x14E9, 0x6B84, 0x14E8, 0x6B86, 0x0E86, 0x6B89, 0x0968,
- 0x6B8A, 0x0918, 0x6B8B, 0x0892, 0x6B8D, 0x14EA, 0x6B95, 0x14EC,
- 0x6B96, 0x09E9, 0x6B98, 0x14EB, 0x6B9E, 0x14ED, 0x6BA4, 0x14EE,
- 0x6BAA, 0x14EF, 0x6BAB, 0x14F0, 0x6BAF, 0x14F1, 0x6BB1, 0x14F3,
- 0x6BB2, 0x14F2, 0x6BB3, 0x14F4, 0x6BB4, 0x0525, 0x6BB5, 0x0B88,
- 0x6BB7, 0x14F5, 0x6BBA, 0x0874, 0x6BBB, 0x05AA, 0x6BBC, 0x14F6,
- 0x6BBE, 0x395C, 0x6BBF, 0x0C3C, 0x6BC0, 0x119D, 0x6BC5, 0x063D,
- 0x6BC6, 0x14F7, 0x6BCB, 0x14F8, 0x6BCC, 0x3744, 0x6BCD, 0x0E3C,
- 0x6BCE, 0x0E96, 0x6BCF, 0x344C, 0x6BD2, 0x0C9F, 0x6BD3, 0x14F9,
- 0x6BD4, 0x0D7A, 0x6BD6, 0x213D, 0x6BD8, 0x0D8F, 0x6BDB, 0x0EDF,
- 0x6BDF, 0x14FA, 0x6BE1, 0x395D, 0x6BEB, 0x14FC, 0x6BEC, 0x14FB,
- 0x6BEF, 0x14FE, 0x6BF1, 0x395E, 0x6BF3, 0x14FD, 0x6C08, 0x1500,
- 0x6C0F, 0x08AF, 0x6C10, 0x395F, 0x6C11, 0x0EBD, 0x6C13, 0x1501,
- 0x6C14, 0x1502, 0x6C17, 0x063E, 0x6C1B, 0x1503, 0x6C23, 0x1505,
- 0x6C24, 0x1504, 0x6C33, 0x3960, 0x6C34, 0x0A2B, 0x6C35, 0x3961,
- 0x6C37, 0x0DAB, 0x6C38, 0x04EC, 0x6C3A, 0x3962, 0x6C3E, 0x0D59,
- 0x6C3F, 0x213E, 0x6C40, 0x0C11, 0x6C41, 0x094B, 0x6C42, 0x067B,
- 0x6C4E, 0x0D5A, 0x6C50, 0x08DA, 0x6C55, 0x1507, 0x6C57, 0x05FC,
- 0x6C59, 0x3963, 0x6C5A, 0x051A, 0x6C5C, 0x213F, 0x6C5D, 0x0CCA,
- 0x6C5E, 0x1506, 0x6C5F, 0x07D0, 0x6C60, 0x0B91, 0x6C62, 0x1508,
- 0x6C68, 0x1510, 0x6C6A, 0x1509, 0x6C6F, 0x2141, 0x6C70, 0x0B21,
- 0x6C72, 0x067C, 0x6C73, 0x1511, 0x6C76, 0x3964, 0x6C7A, 0x073E,
- 0x6C7B, 0x3965, 0x6C7D, 0x063F, 0x6C7E, 0x150F, 0x6C81, 0x150D,
- 0x6C82, 0x150A, 0x6C83, 0x0F4A, 0x6C85, 0x3966, 0x6C86, 0x2140,
- 0x6C88, 0x0BDC, 0x6C8C, 0x0CB1, 0x6C8D, 0x150B, 0x6C90, 0x1513,
- 0x6C92, 0x1512, 0x6C93, 0x06F9, 0x6C95, 0x3967, 0x6C96, 0x052D,
- 0x6C99, 0x082B, 0x6C9A, 0x150C, 0x6C9B, 0x150E, 0x6C9C, 0x3968,
- 0x6CA1, 0x0E85, 0x6CA2, 0x0B54, 0x6CAA, 0x3749, 0x6CAB, 0x0EA5,
- 0x6CAE, 0x151B, 0x6CB1, 0x151C, 0x6CB3, 0x054F, 0x6CB8, 0x0DF8,
- 0x6CB9, 0x0F09, 0x6CBA, 0x151E, 0x6CBB, 0x08CF, 0x6CBC, 0x09AA,
- 0x6CBD, 0x1517, 0x6CBE, 0x151D, 0x6CBF, 0x050A, 0x6CC1, 0x06AF,
- 0x6CC4, 0x1514, 0x6CC5, 0x1519, 0x6CC9, 0x0A98, 0x6CCA, 0x0D27,
- 0x6CCC, 0x0D7B, 0x6CD0, 0x3969, 0x6CD3, 0x1516, 0x6CD4, 0x396A,
- 0x6CD5, 0x0E4F, 0x6CD6, 0x396B, 0x6CD7, 0x1518, 0x6CD9, 0x1521,
- 0x6CDA, 0x2142, 0x6CDB, 0x151F, 0x6CDD, 0x151A, 0x6CE0, 0x396C,
- 0x6CE1, 0x0E50, 0x6CE2, 0x0CFE, 0x6CE3, 0x067D, 0x6CE5, 0x0C1F,
- 0x6CE8, 0x0BAB, 0x6CEA, 0x1522, 0x6CEB, 0x396D, 0x6CEC, 0x396E,
- 0x6CEE, 0x396F, 0x6CEF, 0x1520, 0x6CF0, 0x0B39, 0x6CF1, 0x1515,
- 0x6CF3, 0x04ED, 0x6D01, 0x3C35, 0x6D04, 0x2143, 0x6D0A, 0x3970,
- 0x6D0B, 0x0F38, 0x6D0C, 0x152D, 0x6D0E, 0x3971, 0x6D11, 0x3972,
- 0x6D12, 0x152C, 0x6D17, 0x0A9A, 0x6D19, 0x1529, 0x6D1B, 0x0F56,
- 0x6D1E, 0x0C8E, 0x6D1F, 0x1523, 0x6D25, 0x0BE1, 0x6D29, 0x04EE,
- 0x6D2A, 0x07D1, 0x6D2B, 0x1526, 0x6D2E, 0x3973, 0x6D32, 0x0931,
- 0x6D33, 0x152B, 0x6D35, 0x152A, 0x6D36, 0x1525, 0x6D38, 0x1528,
- 0x6D3B, 0x05C6, 0x6D3D, 0x1527, 0x6D3E, 0x0CFF, 0x6D41, 0x0F76,
- 0x6D44, 0x09DC, 0x6D45, 0x0A99, 0x6D57, 0x3974, 0x6D59, 0x1533,
- 0x6D5A, 0x1531, 0x6D5C, 0x0DBF, 0x6D5E, 0x3975, 0x6D63, 0x152E,
- 0x6D64, 0x1530, 0x6D65, 0x3976, 0x6D66, 0x04DC, 0x6D69, 0x07D2,
- 0x6D6A, 0x0FD8, 0x6D6C, 0x059B, 0x6D6E, 0x0DD4, 0x6D6F, 0x2145,
- 0x6D74, 0x0F4B, 0x6D77, 0x0582, 0x6D78, 0x0A01, 0x6D79, 0x1532,
- 0x6D82, 0x3977, 0x6D85, 0x1537, 0x6D87, 0x2144, 0x6D88, 0x09AB,
- 0x6D89, 0x342A, 0x6D8C, 0x0F1A, 0x6D8E, 0x1534, 0x6D93, 0x152F,
- 0x6D95, 0x1535, 0x6D96, 0x2146, 0x6D99, 0x0FA6, 0x6D9B, 0x0C6D,
- 0x6D9C, 0x0C9A, 0x6DAC, 0x2147, 0x6DAF, 0x0594, 0x6DB2, 0x04F7,
- 0x6DB5, 0x153B, 0x6DB8, 0x153E, 0x6DBC, 0x0F8B, 0x6DBF, 0x3978,
- 0x6DC0, 0x0F4E, 0x6DC4, 0x3979, 0x6DC5, 0x1545, 0x6DC6, 0x153F,
- 0x6DC7, 0x153C, 0x6DCA, 0x397A, 0x6DCB, 0x0F9C, 0x6DCC, 0x1542,
- 0x6DCF, 0x2148, 0x6DD0, 0x3C36, 0x6DD1, 0x0954, 0x6DD2, 0x1544,
- 0x6DD5, 0x1549, 0x6DD6, 0x397B, 0x6DD8, 0x0C6B, 0x6DD9, 0x1547,
- 0x6DDA, 0x3453, 0x6DDE, 0x1541, 0x6DE1, 0x0B76, 0x6DE4, 0x1548,
- 0x6DE6, 0x153D, 0x6DE8, 0x1543, 0x6DE9, 0x397C, 0x6DEA, 0x154A,
- 0x6DEB, 0x04C0, 0x6DEC, 0x1540, 0x6DEE, 0x154B, 0x6DF1, 0x0A02,
- 0x6DF2, 0x214A, 0x6DF3, 0x0969, 0x6DF5, 0x0DF5, 0x6DF7, 0x081E,
- 0x6DF8, 0x2149, 0x6DF9, 0x1538, 0x6DFA, 0x1546, 0x6DFB, 0x0C34,
- 0x6DFC, 0x214B, 0x6E05, 0x0A5A, 0x6E07, 0x05C7, 0x6E08, 0x0841,
- 0x6E09, 0x09AC, 0x6E0A, 0x153A, 0x6E0B, 0x094C, 0x6E13, 0x0722,
- 0x6E15, 0x1539, 0x6E17, 0x3746, 0x6E19, 0x154F, 0x6E1A, 0x0977,
- 0x6E1B, 0x076E, 0x6E1D, 0x155E, 0x6E1F, 0x1558, 0x6E20, 0x068E,
- 0x6E21, 0x0C49, 0x6E22, 0x397D, 0x6E23, 0x1553, 0x6E24, 0x155C,
- 0x6E25, 0x0473, 0x6E26, 0x04D4, 0x6E27, 0x214E, 0x6E29, 0x0539,
- 0x6E2B, 0x1555, 0x6E2C, 0x0B0C, 0x6E2D, 0x154C, 0x6E2E, 0x154E,
- 0x6E2F, 0x07D3, 0x6E34, 0x3412, 0x6E38, 0x155F, 0x6E39, 0x214C,
- 0x6E3A, 0x155A, 0x6E3C, 0x214F, 0x6E3E, 0x1552, 0x6E42, 0x3C37,
- 0x6E43, 0x1559, 0x6E4A, 0x0EB7, 0x6E4D, 0x1557, 0x6E4E, 0x155B,
- 0x6E51, 0x397E, 0x6E56, 0x0784, 0x6E58, 0x09AD, 0x6E5B, 0x0B77,
- 0x6E5C, 0x214D, 0x6E5F, 0x1551, 0x6E67, 0x0F19, 0x6E6B, 0x1554,
- 0x6E6E, 0x154D, 0x6E6F, 0x0C6C, 0x6E72, 0x1550, 0x6E76, 0x1556,
- 0x6E7E, 0x0FF7, 0x6E7F, 0x08EA, 0x6E80, 0x0EAC, 0x6E82, 0x1560,
- 0x6E8C, 0x0D42, 0x6E8F, 0x156C, 0x6E90, 0x076F, 0x6E96, 0x096A,
- 0x6E98, 0x1562, 0x6E9C, 0x0F77, 0x6E9D, 0x07D4, 0x6E9F, 0x156F,
- 0x6EA2, 0x04B2, 0x6EA5, 0x156D, 0x6EAA, 0x1561, 0x6EAB, 0x340C,
- 0x6EAF, 0x1567, 0x6EB2, 0x1569, 0x6EB6, 0x0F39, 0x6EB7, 0x1564,
- 0x6EBA, 0x0C28, 0x6EBD, 0x1566, 0x6EBF, 0x2150, 0x6EC2, 0x156E,
- 0x6EC4, 0x1568, 0x6EC5, 0x0ED3, 0x6EC7, 0x397F, 0x6EC9, 0x1563,
- 0x6ECA, 0x3980, 0x6ECB, 0x08CE, 0x6ECC, 0x157B, 0x6ECE, 0x3981,
- 0x6ED1, 0x05C8, 0x6ED3, 0x1565, 0x6ED4, 0x156A, 0x6ED5, 0x156B,
- 0x6ED9, 0x3C38, 0x6EDD, 0x0B4C, 0x6EDE, 0x0B3A, 0x6EE6, 0x3C24,
- 0x6EEC, 0x1573, 0x6EEF, 0x1579, 0x6EF2, 0x1577, 0x6EF4, 0x0C23,
- 0x6EF7, 0x157E, 0x6EF8, 0x1574, 0x6EFD, 0x3982, 0x6EFE, 0x1575,
- 0x6EFF, 0x155D, 0x6F01, 0x0693, 0x6F02, 0x0DAC, 0x6F06, 0x08EB,
- 0x6F09, 0x0809, 0x6F0F, 0x0FD9, 0x6F11, 0x1571, 0x6F13, 0x157D,
- 0x6F14, 0x050B, 0x6F15, 0x0AE8, 0x6F1A, 0x3983, 0x6F20, 0x0D2F,
- 0x6F22, 0x05FD, 0x6F23, 0x0FC2, 0x6F2A, 0x3984, 0x6F2B, 0x0EAD,
- 0x6F2C, 0x0BEE, 0x6F2F, 0x3985, 0x6F31, 0x1578, 0x6F32, 0x157A,
- 0x6F33, 0x3986, 0x6F38, 0x0AB4, 0x6F3E, 0x157C, 0x6F3F, 0x1576,
- 0x6F41, 0x1570, 0x6F45, 0x05FF, 0x6F51, 0x1E60, 0x6F54, 0x073F,
- 0x6F58, 0x158A, 0x6F5A, 0x3987, 0x6F5B, 0x1585, 0x6F5C, 0x0A9C,
- 0x6F5E, 0x3988, 0x6F5F, 0x05C1, 0x6F62, 0x3989, 0x6F64, 0x096B,
- 0x6F66, 0x158E, 0x6F6D, 0x1587, 0x6F6E, 0x0BC8, 0x6F6F, 0x1584,
- 0x6F70, 0x0BF5, 0x6F74, 0x15A7, 0x6F78, 0x1581, 0x6F7A, 0x1580,
- 0x6F7C, 0x1589, 0x6F7D, 0x398A, 0x6F80, 0x1583, 0x6F81, 0x1582,
- 0x6F82, 0x1588, 0x6F84, 0x0A45, 0x6F86, 0x157F, 0x6F88, 0x2151,
- 0x6F8B, 0x398B, 0x6F8D, 0x398C, 0x6F8E, 0x158B, 0x6F91, 0x158C,
- 0x6F92, 0x398D, 0x6F94, 0x398E, 0x6F97, 0x05FE, 0x6F98, 0x363C,
- 0x6F9A, 0x398F, 0x6FA1, 0x1591, 0x6FA3, 0x1590, 0x6FA4, 0x1592,
- 0x6FA7, 0x3990, 0x6FA8, 0x3991, 0x6FAA, 0x1595, 0x6FB1, 0x0C3D,
- 0x6FB3, 0x158F, 0x6FB5, 0x2152, 0x6FB6, 0x3992, 0x6FB9, 0x1593,
- 0x6FC0, 0x0739, 0x6FC1, 0x0B59, 0x6FC2, 0x158D, 0x6FC3, 0x0CF1,
- 0x6FC6, 0x1594, 0x6FD4, 0x1599, 0x6FD5, 0x1597, 0x6FD8, 0x159A,
- 0x6FDA, 0x3993, 0x6FDB, 0x159D, 0x6FDE, 0x3994, 0x6FDF, 0x1596,
- 0x6FE0, 0x07FC, 0x6FE1, 0x0CDE, 0x6FE4, 0x1536, 0x6FEB, 0x0F5E,
- 0x6FEC, 0x1598, 0x6FEE, 0x159C, 0x6FEF, 0x0B55, 0x6FF1, 0x159B,
- 0x6FF3, 0x1586, 0x6FF5, 0x2153, 0x6FF6, 0x1BA4, 0x6FF9, 0x3995,
- 0x6FFA, 0x15A0, 0x6FFE, 0x15A4, 0x7001, 0x15A2, 0x7005, 0x2154,
- 0x7006, 0x1E50, 0x7007, 0x2155, 0x7009, 0x159E, 0x700B, 0x159F,
- 0x700F, 0x15A3, 0x7011, 0x15A1, 0x7015, 0x0DC0, 0x7018, 0x15A9,
- 0x701A, 0x15A6, 0x701B, 0x15A5, 0x701D, 0x15A8, 0x701E, 0x0CAC,
- 0x701F, 0x15AA, 0x7026, 0x0BB3, 0x7027, 0x0B4D, 0x7028, 0x2156,
- 0x702C, 0x0A49, 0x7030, 0x15AB, 0x7032, 0x15AD, 0x7039, 0x3996,
- 0x703C, 0x3997, 0x703E, 0x15AC, 0x704A, 0x3998, 0x704C, 0x1572,
- 0x7051, 0x15AE, 0x7054, 0x3999, 0x7058, 0x0CBF, 0x705D, 0x399A,
- 0x705E, 0x399B, 0x7063, 0x15AF, 0x7064, 0x399C, 0x706B, 0x0550,
- 0x706C, 0x399D, 0x706F, 0x0C6E, 0x7070, 0x0583, 0x7078, 0x067E,
- 0x707C, 0x090A, 0x707D, 0x0842, 0x707E, 0x399E, 0x7081, 0x399F,
- 0x7085, 0x2157, 0x7089, 0x0FCD, 0x708A, 0x0A2C, 0x708E, 0x050C,
- 0x7092, 0x15B1, 0x7095, 0x39A0, 0x7099, 0x15B0, 0x70AB, 0x2158,
- 0x70AC, 0x15B4, 0x70AD, 0x0B78, 0x70AE, 0x15B7, 0x70AF, 0x15B2,
- 0x70B3, 0x15B6, 0x70B7, 0x39A1, 0x70B8, 0x15B5, 0x70B9, 0x0C3A,
- 0x70BA, 0x049D, 0x70BB, 0x20AD, 0x70C8, 0x0FBD, 0x70CB, 0x15B9,
- 0x70CF, 0x04CA, 0x70D3, 0x39A2, 0x70D4, 0x39A3, 0x70D8, 0x39A4,
- 0x70D9, 0x15BB, 0x70DC, 0x39A5, 0x70DD, 0x15BA, 0x70DF, 0x15B8,
- 0x70F1, 0x15B3, 0x70F9, 0x0E51, 0x70FD, 0x15BD, 0x7104, 0x215A,
- 0x7107, 0x39A6, 0x7109, 0x15BC, 0x710F, 0x2159, 0x7114, 0x050D,
- 0x7119, 0x15BF, 0x711A, 0x0E02, 0x711C, 0x15BE, 0x7120, 0x39A7,
- 0x7121, 0x0EC1, 0x7126, 0x09AF, 0x7130, 0x1DDC, 0x7131, 0x39A8,
- 0x7136, 0x0AB5, 0x713C, 0x09AE, 0x7146, 0x215C, 0x7147, 0x215D,
- 0x7149, 0x0FC3, 0x714A, 0x39A9, 0x714C, 0x15C5, 0x714E, 0x0A9D,
- 0x7152, 0x39AA, 0x7155, 0x15C1, 0x7156, 0x15C6, 0x7159, 0x050E,
- 0x715C, 0x215B, 0x7160, 0x39AB, 0x7162, 0x15C4, 0x7164, 0x0D17,
- 0x7165, 0x15C0, 0x7166, 0x15C3, 0x7167, 0x09B0, 0x7169, 0x0D65,
- 0x716C, 0x15C7, 0x716E, 0x08FD, 0x7179, 0x39AC, 0x717D, 0x0A9E,
- 0x7184, 0x15CA, 0x7188, 0x15C2, 0x718A, 0x06FD, 0x718F, 0x15C8,
- 0x7192, 0x39AD, 0x7194, 0x0F3A, 0x7195, 0x15CB, 0x7199, 0x205D,
- 0x719F, 0x0959, 0x71A8, 0x15CC, 0x71AC, 0x15CD, 0x71B1, 0x0CE4,
- 0x71B3, 0x39AE, 0x71B9, 0x15CF, 0x71BE, 0x15D0, 0x71C1, 0x215F,
- 0x71C3, 0x0CE9, 0x71C8, 0x0C6F, 0x71C9, 0x15D2, 0x71CB, 0x39AF,
- 0x71CE, 0x15D4, 0x71D0, 0x0F9D, 0x71D2, 0x15D1, 0x71D3, 0x39B0,
- 0x71D4, 0x15D3, 0x71D5, 0x050F, 0x71D6, 0x39B1, 0x71D7, 0x15CE,
- 0x71DF, 0x114E, 0x71E0, 0x15D5, 0x71E5, 0x0AE9, 0x71E6, 0x0886,
- 0x71E7, 0x15D7, 0x71EC, 0x15D6, 0x71ED, 0x09EA, 0x71EE, 0x10EE,
- 0x71F5, 0x15D8, 0x71F9, 0x15DA, 0x71FB, 0x15C9, 0x71FC, 0x15D9,
- 0x71FE, 0x2160, 0x71FF, 0x15DB, 0x7200, 0x39B2, 0x7206, 0x0D30,
- 0x720D, 0x15DC, 0x7210, 0x15DD, 0x721B, 0x15DE, 0x721D, 0x39B3,
- 0x7228, 0x15DF, 0x722A, 0x0BFA, 0x722B, 0x39B4, 0x722C, 0x15E1,
- 0x722D, 0x15E0, 0x7230, 0x15E2, 0x7232, 0x15E3, 0x7235, 0x090B,
- 0x7236, 0x0DD5, 0x7238, 0x39B5, 0x723A, 0x0EF8, 0x723B, 0x15E4,
- 0x723C, 0x15E5, 0x723D, 0x0AD8, 0x723E, 0x08D0, 0x723F, 0x15E6,
- 0x7240, 0x15E7, 0x7241, 0x39B6, 0x7246, 0x15E8, 0x7247, 0x0E22,
- 0x7248, 0x0D5B, 0x724B, 0x15E9, 0x724C, 0x0D0D, 0x7252, 0x0BC9,
- 0x7253, 0x39B7, 0x7255, 0x39B8, 0x7256, 0x39B9, 0x7258, 0x15EA,
- 0x7259, 0x0567, 0x725B, 0x0687, 0x725C, 0x39BA, 0x725D, 0x0ED2,
- 0x725F, 0x0EC2, 0x7261, 0x0534, 0x7262, 0x0FDA, 0x7267, 0x0E80,
- 0x7269, 0x0DFA, 0x7272, 0x0A5B, 0x7274, 0x15EB, 0x7279, 0x0C9B,
- 0x727D, 0x0757, 0x727E, 0x15EC, 0x7280, 0x0844, 0x7281, 0x15EE,
- 0x7282, 0x15ED, 0x7287, 0x15EF, 0x728D, 0x39BB, 0x7292, 0x15F0,
- 0x7296, 0x15F1, 0x72A0, 0x0658, 0x72A2, 0x15F2, 0x72A7, 0x15F3,
- 0x72AC, 0x0758, 0x72AD, 0x39BC, 0x72AF, 0x0D5C, 0x72B1, 0x2161,
- 0x72B2, 0x15F5, 0x72B4, 0x39BD, 0x72B6, 0x09DD, 0x72B9, 0x15F4,
- 0x72BE, 0x2162, 0x72C0, 0x342B, 0x72C2, 0x06B0, 0x72C3, 0x15F6,
- 0x72C4, 0x15F8, 0x72C6, 0x15F7, 0x72C7, 0x39BE, 0x72CE, 0x15F9,
- 0x72D0, 0x0785, 0x72D2, 0x15FA, 0x72D7, 0x06E1, 0x72D9, 0x0AC2,
- 0x72DB, 0x080F, 0x72E0, 0x15FC, 0x72E1, 0x15FD, 0x72E2, 0x15FB,
- 0x72E9, 0x0919, 0x72EC, 0x0CA0, 0x72ED, 0x06B1, 0x72F7, 0x15FF,
- 0x72F8, 0x0B6A, 0x72F9, 0x15FE, 0x72FB, 0x39BF, 0x72FC, 0x0FDB,
- 0x72FD, 0x0D18, 0x7304, 0x39C0, 0x7305, 0x39C1, 0x730A, 0x1602,
- 0x7316, 0x1604, 0x7317, 0x1601, 0x731B, 0x0EE0, 0x731C, 0x1603,
- 0x731D, 0x1605, 0x731F, 0x0F8C, 0x7324, 0x2163, 0x7325, 0x1609,
- 0x7328, 0x39C2, 0x7329, 0x1608, 0x732A, 0x0BB4, 0x732B, 0x0CE3,
- 0x732E, 0x0759, 0x732F, 0x1607, 0x7331, 0x39C3, 0x7334, 0x1606,
- 0x7336, 0x0F1B, 0x7337, 0x0F1C, 0x733E, 0x160A, 0x733F, 0x0510,
- 0x7343, 0x39C4, 0x7344, 0x0808, 0x7345, 0x08B0, 0x734E, 0x160B,
- 0x734F, 0x160C, 0x7357, 0x160E, 0x7363, 0x094D, 0x7368, 0x1610,
- 0x736A, 0x160F, 0x736C, 0x39C5, 0x7370, 0x1611, 0x7372, 0x05AB,
- 0x7375, 0x1613, 0x7377, 0x2165, 0x7378, 0x1612, 0x737A, 0x1615,
- 0x737B, 0x1614, 0x737C, 0x39C6, 0x7383, 0x39C7, 0x7384, 0x0770,
- 0x7385, 0x39C8, 0x7386, 0x39C9, 0x7387, 0x0F70, 0x7389, 0x06C4,
- 0x738B, 0x0526, 0x7395, 0x39CA, 0x7396, 0x06E2, 0x739E, 0x39CB,
- 0x739F, 0x39CC, 0x73A0, 0x39CD, 0x73A6, 0x39CE, 0x73A8, 0x3C3F,
- 0x73A9, 0x061D, 0x73AB, 0x39CF, 0x73B2, 0x0FB0, 0x73B3, 0x1617,
- 0x73B5, 0x39D0, 0x73B7, 0x39D1, 0x73BA, 0x35EA, 0x73BB, 0x1619,
- 0x73BC, 0x39D2, 0x73BD, 0x2166, 0x73C0, 0x161A, 0x73C2, 0x0551,
- 0x73C8, 0x1616, 0x73C9, 0x2167, 0x73CA, 0x0887, 0x73CD, 0x0BDD,
- 0x73CE, 0x1618, 0x73CF, 0x39D3, 0x73D2, 0x216A, 0x73D6, 0x2168,
- 0x73D9, 0x39D4, 0x73DE, 0x161D, 0x73E0, 0x091A, 0x73E3, 0x2169,
- 0x73E4, 0x3C39, 0x73E5, 0x161B, 0x73E9, 0x39D5, 0x73EA, 0x0714,
- 0x73ED, 0x0D5D, 0x73EE, 0x161C, 0x73F1, 0x1637, 0x73F4, 0x39D6,
- 0x73F5, 0x216C, 0x73F8, 0x1622, 0x73FD, 0x39D7, 0x73FE, 0x0771,
- 0x7403, 0x067F, 0x7404, 0x39D8, 0x7405, 0x161F, 0x7406, 0x0F67,
- 0x7407, 0x216B, 0x7409, 0x0F78, 0x740A, 0x39D9, 0x741A, 0x39DA,
- 0x741B, 0x39DB, 0x7421, 0x3C3A, 0x7422, 0x0B56, 0x7424, 0x39DC,
- 0x7425, 0x1621, 0x7426, 0x216D, 0x7428, 0x39DD, 0x7429, 0x216F,
- 0x742A, 0x216E, 0x742C, 0x39DE, 0x742E, 0x2170, 0x742F, 0x39DF,
- 0x7430, 0x39E0, 0x7431, 0x39E1, 0x7432, 0x1623, 0x7433, 0x0F9E,
- 0x7434, 0x06CF, 0x7435, 0x0D90, 0x7436, 0x0D00, 0x7439, 0x39E2,
- 0x743A, 0x1624, 0x743F, 0x1626, 0x7441, 0x1629, 0x7444, 0x39E3,
- 0x7447, 0x39E4, 0x744B, 0x39E5, 0x744D, 0x39E6, 0x7451, 0x39E7,
- 0x7455, 0x1625, 0x7457, 0x39E8, 0x7459, 0x1628, 0x745A, 0x079E,
- 0x745B, 0x04EF, 0x745C, 0x162A, 0x745E, 0x0A36, 0x745F, 0x1627,
- 0x7460, 0x0FA4, 0x7462, 0x2171, 0x7463, 0x162D, 0x7464, 0x1D35,
- 0x7466, 0x39E9, 0x7469, 0x162B, 0x746A, 0x162E, 0x746B, 0x39EA,
- 0x746F, 0x1620, 0x7470, 0x162C, 0x7471, 0x39EB, 0x7473, 0x082C,
- 0x7476, 0x162F, 0x747E, 0x1630, 0x7480, 0x39EC, 0x7483, 0x0F68,
- 0x7485, 0x39ED, 0x7486, 0x39EE, 0x7487, 0x39EF, 0x7489, 0x2172,
- 0x748B, 0x1631, 0x7490, 0x39F0, 0x7498, 0x39F1, 0x749C, 0x39F2,
- 0x749E, 0x1632, 0x749F, 0x2173, 0x74A0, 0x39F3, 0x74A2, 0x161E,
- 0x74A3, 0x39F4, 0x74A7, 0x1633, 0x74A8, 0x39F5, 0x74AB, 0x39F6,
- 0x74B0, 0x0600, 0x74B5, 0x39F7, 0x74BD, 0x08D1, 0x74BF, 0x39F8,
- 0x74C8, 0x39F9, 0x74CA, 0x1634, 0x74CF, 0x1635, 0x74D4, 0x1636,
- 0x74DA, 0x39FA, 0x74DC, 0x04DD, 0x74DE, 0x39FB, 0x74E0, 0x1638,
- 0x74E2, 0x0DAD, 0x74E3, 0x1639, 0x74E6, 0x05E0, 0x74E7, 0x163A,
- 0x74E9, 0x163B, 0x74EE, 0x163C, 0x74EF, 0x3750, 0x74F0, 0x163E,
- 0x74F1, 0x163F, 0x74F2, 0x163D, 0x74F6, 0x0DC5, 0x74F7, 0x1641,
- 0x74F8, 0x1640, 0x7501, 0x2174, 0x7503, 0x1643, 0x7504, 0x1642,
- 0x7505, 0x1644, 0x750C, 0x1645, 0x750D, 0x1647, 0x750E, 0x1646,
- 0x7511, 0x080B, 0x7513, 0x1649, 0x7515, 0x1648, 0x7518, 0x0601,
- 0x751A, 0x0A19, 0x751C, 0x0C36, 0x751E, 0x164A, 0x751F, 0x0A5C,
- 0x7522, 0x35DE, 0x7523, 0x0888, 0x7525, 0x051B, 0x7526, 0x164B,
- 0x7528, 0x0F3B, 0x752B, 0x0E33, 0x752C, 0x164C, 0x752F, 0x20F2,
- 0x7530, 0x0C3E, 0x7531, 0x0F1D, 0x7532, 0x07D5, 0x7533, 0x0A03,
- 0x7537, 0x0B89, 0x7538, 0x10C9, 0x753A, 0x0BCA, 0x753B, 0x0568,
- 0x753C, 0x164D, 0x7544, 0x164E, 0x7546, 0x1653, 0x7549, 0x1651,
- 0x754A, 0x1650, 0x754B, 0x13C7, 0x754C, 0x0584, 0x754D, 0x164F,
- 0x754E, 0x39FC, 0x754F, 0x049E, 0x7551, 0x0D3E, 0x7554, 0x0D5E,
- 0x7559, 0x0F79, 0x755A, 0x1654, 0x755B, 0x1652, 0x755C, 0x0B9A,
- 0x755D, 0x0A4A, 0x7560, 0x0D3F, 0x7562, 0x0D9F, 0x7564, 0x1656,
- 0x7565, 0x0F74, 0x7566, 0x0723, 0x7567, 0x1657, 0x7569, 0x1655,
- 0x756A, 0x0D6A, 0x756B, 0x1658, 0x756C, 0x3C3B, 0x756D, 0x1659,
- 0x756F, 0x2175, 0x7570, 0x049F, 0x7573, 0x09DE, 0x7574, 0x165E,
- 0x7575, 0x3751, 0x7576, 0x165B, 0x7577, 0x0CC5, 0x7578, 0x165A,
- 0x7579, 0x39FD, 0x757F, 0x0640, 0x7581, 0x39FE, 0x7582, 0x1661,
- 0x7586, 0x165C, 0x7587, 0x165D, 0x7589, 0x1660, 0x758A, 0x165F,
- 0x758B, 0x0D97, 0x758E, 0x0AC4, 0x758F, 0x0AC3, 0x7590, 0x39FF,
- 0x7591, 0x0659, 0x7592, 0x3A00, 0x7593, 0x3A01, 0x7594, 0x1662,
- 0x759A, 0x1663, 0x759D, 0x1664, 0x75A3, 0x1666, 0x75A5, 0x1665,
- 0x75AB, 0x04F8, 0x75B1, 0x166E, 0x75B2, 0x0D7C, 0x75B3, 0x1668,
- 0x75B4, 0x3A02, 0x75B5, 0x166A, 0x75B8, 0x166C, 0x75B9, 0x0A04,
- 0x75BC, 0x166D, 0x75BD, 0x166B, 0x75BE, 0x08EC, 0x75C2, 0x1667,
- 0x75C3, 0x1669, 0x75C5, 0x0DB4, 0x75C7, 0x09B1, 0x75CA, 0x1670,
- 0x75CD, 0x166F, 0x75D2, 0x1671, 0x75D4, 0x08D2, 0x75D5, 0x081F,
- 0x75D8, 0x0C71, 0x75D9, 0x1672, 0x75DB, 0x0BE7, 0x75DE, 0x1674,
- 0x75E2, 0x0F69, 0x75E3, 0x1673, 0x75E4, 0x3A03, 0x75E9, 0x0AEB,
- 0x75EC, 0x3752, 0x75F0, 0x1679, 0x75F2, 0x167B, 0x75F3, 0x167C,
- 0x75F4, 0x0B92, 0x75F9, 0x3A04, 0x75FA, 0x167A, 0x75FC, 0x1677,
- 0x75FE, 0x1675, 0x75FF, 0x1676, 0x7600, 0x3A05, 0x7601, 0x1678,
- 0x7609, 0x167F, 0x760A, 0x3A06, 0x760B, 0x167D, 0x760D, 0x167E,
- 0x7615, 0x3A07, 0x7616, 0x3A08, 0x7619, 0x3A09, 0x761E, 0x3A0A,
- 0x761F, 0x1680, 0x7620, 0x1682, 0x7621, 0x1683, 0x7622, 0x1684,
- 0x7624, 0x1685, 0x7626, 0x1E2D, 0x7627, 0x1681, 0x762D, 0x3A0B,
- 0x7630, 0x1687, 0x7634, 0x1686, 0x7635, 0x3A0C, 0x763B, 0x1688,
- 0x7642, 0x0F8D, 0x7643, 0x3A0D, 0x7646, 0x168B, 0x7647, 0x1689,
- 0x7648, 0x168A, 0x764B, 0x3A0E, 0x764C, 0x061E, 0x764E, 0x3753,
- 0x7652, 0x0F0A, 0x7656, 0x0E1A, 0x7658, 0x168D, 0x765C, 0x168C,
- 0x7661, 0x168E, 0x7662, 0x168F, 0x7665, 0x3A0F, 0x7667, 0x1693,
- 0x7668, 0x1690, 0x7669, 0x1691, 0x766A, 0x1692, 0x766C, 0x1694,
- 0x766D, 0x3A10, 0x766F, 0x3A11, 0x7670, 0x1695, 0x7671, 0x3A12,
- 0x7672, 0x1696, 0x7674, 0x3A13, 0x7676, 0x1697, 0x7678, 0x1698,
- 0x767A, 0x0D43, 0x767B, 0x0C4A, 0x767C, 0x1699, 0x767D, 0x0D28,
- 0x767E, 0x0DA6, 0x7680, 0x169A, 0x7682, 0x2176, 0x7683, 0x169B,
- 0x7684, 0x0C24, 0x7686, 0x0585, 0x7687, 0x07D6, 0x7688, 0x169C,
- 0x768B, 0x169D, 0x768E, 0x169E, 0x7690, 0x0877, 0x7693, 0x16A0,
- 0x7696, 0x169F, 0x7699, 0x16A1, 0x769A, 0x16A2, 0x769B, 0x2179,
- 0x769C, 0x2177, 0x769E, 0x2178, 0x76A4, 0x3A14, 0x76A5, 0x3A15,
- 0x76A6, 0x217A, 0x76AE, 0x0D7D, 0x76B0, 0x16A3, 0x76B4, 0x16A4,
- 0x76B7, 0x1D1C, 0x76B8, 0x16A5, 0x76B9, 0x16A6, 0x76BA, 0x16A7,
- 0x76BF, 0x087C, 0x76C2, 0x16A8, 0x76C3, 0x0D0C, 0x76C5, 0x3A16,
- 0x76C6, 0x0E8D, 0x76C8, 0x04F0, 0x76CA, 0x04F9, 0x76CC, 0x3A17,
- 0x76CD, 0x16A9, 0x76D2, 0x16AB, 0x76D6, 0x16AA, 0x76D7, 0x0C6A,
- 0x76DB, 0x0A5D, 0x76DC, 0x14D8, 0x76DE, 0x16AC, 0x76DF, 0x0ECD,
- 0x76E1, 0x16AD, 0x76E3, 0x0602, 0x76E4, 0x0D6B, 0x76E5, 0x16AE,
- 0x76E7, 0x16AF, 0x76EA, 0x16B0, 0x76EC, 0x3A18, 0x76EE, 0x0EE8,
- 0x76F2, 0x0EE1, 0x76F4, 0x0BDA, 0x76F8, 0x0AEC, 0x76FB, 0x16B2,
- 0x76FC, 0x3A19, 0x76FE, 0x096C, 0x7701, 0x09B2, 0x7704, 0x16B5,
- 0x7707, 0x16B4, 0x7708, 0x16B3, 0x7709, 0x0D91, 0x770B, 0x0603,
- 0x770C, 0x075D, 0x771B, 0x16BB, 0x771E, 0x16B8, 0x771F, 0x0A05,
- 0x7720, 0x0EBE, 0x7724, 0x16B7, 0x7725, 0x16B9, 0x7726, 0x16BA,
- 0x7729, 0x16B6, 0x7734, 0x3A1A, 0x7736, 0x3A1B, 0x7737, 0x16BC,
- 0x7738, 0x16BD, 0x773A, 0x0BCB, 0x773C, 0x061F, 0x7740, 0x0BA3,
- 0x7746, 0x217C, 0x7747, 0x16BE, 0x775A, 0x16BF, 0x775B, 0x16C2,
- 0x775C, 0x3A1C, 0x775F, 0x3A1D, 0x7760, 0x3A1E, 0x7761, 0x0A2D,
- 0x7762, 0x1EC5, 0x7763, 0x0C9C, 0x7765, 0x16C3, 0x7766, 0x0E81,
- 0x7768, 0x16C0, 0x776A, 0x3755, 0x776B, 0x16C1, 0x7772, 0x3A1F,
- 0x7779, 0x16C6, 0x777D, 0x3A20, 0x777E, 0x16C5, 0x777F, 0x16C4,
- 0x778B, 0x16C8, 0x778E, 0x16C7, 0x7791, 0x16C9, 0x7795, 0x3A21,
- 0x779E, 0x16CB, 0x77A0, 0x16CA, 0x77A5, 0x0E1D, 0x77A9, 0x3756,
- 0x77AA, 0x3A22, 0x77AC, 0x0960, 0x77AD, 0x0F8E, 0x77B0, 0x16CC,
- 0x77B3, 0x0C8F, 0x77B6, 0x16CD, 0x77B9, 0x16CE, 0x77BB, 0x16D2,
- 0x77BC, 0x16D0, 0x77BD, 0x16D1, 0x77BF, 0x16CF, 0x77C7, 0x16D3,
- 0x77CD, 0x16D4, 0x77D7, 0x16D5, 0x77DA, 0x16D6, 0x77DB, 0x0EC3,
- 0x77DC, 0x16D7, 0x77E2, 0x0EFC, 0x77E3, 0x16D8, 0x77E5, 0x0B8C,
- 0x77E6, 0x3A23, 0x77E7, 0x0D20, 0x77E9, 0x06E3, 0x77ED, 0x0B79,
- 0x77EE, 0x16D9, 0x77EF, 0x06B2, 0x77F0, 0x3A24, 0x77F3, 0x0A74,
- 0x77F4, 0x3A25, 0x77FC, 0x16DA, 0x7802, 0x082D, 0x7806, 0x3A26,
- 0x780C, 0x16DB, 0x7812, 0x16DC, 0x7814, 0x075A, 0x7815, 0x0845,
- 0x7820, 0x16DE, 0x7821, 0x217E, 0x7822, 0x3A27, 0x7825, 0x0C50,
- 0x7826, 0x0846, 0x7827, 0x0668, 0x782D, 0x3A28, 0x782E, 0x3A29,
- 0x7830, 0x3A2A, 0x7832, 0x0E52, 0x7834, 0x0D01, 0x7835, 0x3A2B,
- 0x783A, 0x0C51, 0x783F, 0x07EE, 0x7845, 0x16E0, 0x784E, 0x217F,
- 0x784F, 0x341E, 0x7851, 0x3C3C, 0x785D, 0x09B3, 0x7864, 0x2180,
- 0x7868, 0x3A2C, 0x786B, 0x0F7A, 0x786C, 0x07D7, 0x786F, 0x075B,
- 0x7872, 0x0D37, 0x7874, 0x16E2, 0x787A, 0x2181, 0x787C, 0x16E4,
- 0x7881, 0x079F, 0x7886, 0x16E3, 0x7887, 0x0C12, 0x788C, 0x16E6,
- 0x788D, 0x0595, 0x788E, 0x16E1, 0x7891, 0x0D7E, 0x7893, 0x04D2,
- 0x7895, 0x085C, 0x7897, 0x0FF8, 0x789A, 0x16E5, 0x789E, 0x3A2D,
- 0x78A3, 0x16E7, 0x78A7, 0x0E1B, 0x78A9, 0x0A7D, 0x78AA, 0x16E9,
- 0x78AF, 0x16EA, 0x78B5, 0x16E8, 0x78BA, 0x05AC, 0x78BC, 0x16F0,
- 0x78BE, 0x16EF, 0x78C1, 0x08D3, 0x78C5, 0x16F1, 0x78C6, 0x16EC,
- 0x78C8, 0x3A2E, 0x78CA, 0x16F2, 0x78CB, 0x16ED, 0x78CC, 0x3A2F,
- 0x78CE, 0x3A30, 0x78D0, 0x0D6C, 0x78D1, 0x16EB, 0x78D4, 0x16EE,
- 0x78DA, 0x16F5, 0x78E0, 0x3A32, 0x78E1, 0x3A33, 0x78E4, 0x3A31,
- 0x78E7, 0x16F4, 0x78E8, 0x0E8F, 0x78EC, 0x16F3, 0x78EF, 0x04AF,
- 0x78F2, 0x3A34, 0x78F4, 0x16F7, 0x78F7, 0x3A35, 0x78FB, 0x3A36,
- 0x78FD, 0x16F6, 0x7901, 0x09B4, 0x7907, 0x16F8, 0x790E, 0x0AC5,
- 0x7911, 0x16FA, 0x7912, 0x16F9, 0x7919, 0x16FB, 0x7926, 0x16DD,
- 0x792A, 0x16DF, 0x792B, 0x16FD, 0x792C, 0x16FC, 0x7930, 0x2182,
- 0x7931, 0x3A37, 0x7934, 0x3A38, 0x793A, 0x08D4, 0x793B, 0x3A39,
- 0x793C, 0x0FB1, 0x793D, 0x3A3A, 0x793E, 0x08FE, 0x7940, 0x16FE,
- 0x7941, 0x070D, 0x7945, 0x3A3B, 0x7947, 0x065A, 0x7948, 0x0641,
- 0x7949, 0x08B1, 0x7950, 0x0F1E, 0x7953, 0x1704, 0x7955, 0x1703,
- 0x7956, 0x0AC6, 0x7957, 0x1700, 0x795A, 0x1702, 0x795B, 0x3A3C,
- 0x795C, 0x3A3D, 0x795D, 0x0955, 0x795E, 0x0A06, 0x795F, 0x1701,
- 0x7960, 0x16FF, 0x7962, 0x0CE0, 0x7965, 0x09B5, 0x7968, 0x0DAE,
- 0x796D, 0x0847, 0x7977, 0x0C72, 0x797A, 0x1705, 0x797F, 0x1706,
- 0x7980, 0x171C, 0x7981, 0x06D0, 0x7984, 0x0FE3, 0x7985, 0x0AB7,
- 0x798A, 0x1707, 0x798B, 0x3A3E, 0x798D, 0x0552, 0x798E, 0x0C13,
- 0x798F, 0x0DF1, 0x7994, 0x2186, 0x7996, 0x3A3F, 0x7998, 0x3A40,
- 0x799B, 0x2188, 0x799D, 0x1708, 0x79A6, 0x0694, 0x79A7, 0x1709,
- 0x79AA, 0x170B, 0x79AE, 0x170C, 0x79B0, 0x0CDF, 0x79B1, 0x1E4E,
- 0x79B3, 0x170D, 0x79B8, 0x3A41, 0x79B9, 0x170E, 0x79BA, 0x170F,
- 0x79BB, 0x3A42, 0x79BD, 0x06D1, 0x79BE, 0x0553, 0x79BF, 0x0C9D,
- 0x79C0, 0x0932, 0x79C1, 0x08B2, 0x79C9, 0x1710, 0x79CA, 0x3A43,
- 0x79CB, 0x0933, 0x79D1, 0x054A, 0x79D2, 0x0DB5, 0x79D5, 0x1711,
- 0x79D8, 0x0D7F, 0x79DA, 0x3A44, 0x79DF, 0x0AC7, 0x79E1, 0x1714,
- 0x79E3, 0x1715, 0x79E4, 0x0D1F, 0x79E6, 0x0A07, 0x79E7, 0x1712,
- 0x79E9, 0x0B9F, 0x79EC, 0x1713, 0x79F0, 0x09B6, 0x79FB, 0x04A0,
- 0x7A00, 0x0643, 0x7A03, 0x3A45, 0x7A05, 0x3633, 0x7A08, 0x1716,
- 0x7A09, 0x3A46, 0x7A0B, 0x0C14, 0x7A0D, 0x1717, 0x7A0E, 0x0A6B,
- 0x7A11, 0x3A47, 0x7A14, 0x0EB9, 0x7A17, 0x0D95, 0x7A18, 0x1718,
- 0x7A19, 0x1719, 0x7A1A, 0x0B93, 0x7A1C, 0x0F8F, 0x7A1E, 0x3A48,
- 0x7A1F, 0x171B, 0x7A20, 0x171A, 0x7A2D, 0x3A49, 0x7A2E, 0x091B,
- 0x7A31, 0x171D, 0x7A32, 0x04B4, 0x7A37, 0x1720, 0x7A39, 0x3A4A,
- 0x7A3B, 0x171E, 0x7A3C, 0x0554, 0x7A3D, 0x0724, 0x7A3E, 0x171F,
- 0x7A3F, 0x07D8, 0x7A40, 0x0804, 0x7A42, 0x0E36, 0x7A43, 0x1721,
- 0x7A45, 0x3A4B, 0x7A46, 0x0E82, 0x7A49, 0x1723, 0x7A4C, 0x3A4C,
- 0x7A4D, 0x0A75, 0x7A4E, 0x04F1, 0x7A4F, 0x053A, 0x7A50, 0x0470,
- 0x7A57, 0x1722, 0x7A5D, 0x3A4D, 0x7A60, 0x3A4E, 0x7A61, 0x1724,
- 0x7A62, 0x1725, 0x7A63, 0x09DF, 0x7A69, 0x1726, 0x7A6B, 0x05AD,
- 0x7A6D, 0x3A4F, 0x7A70, 0x1728, 0x7A74, 0x0740, 0x7A76, 0x0680,
- 0x7A78, 0x3A50, 0x7A79, 0x1729, 0x7A7A, 0x06ED, 0x7A7D, 0x172A,
- 0x7A7F, 0x0AA0, 0x7A81, 0x0CA5, 0x7A83, 0x0A84, 0x7A84, 0x0865,
- 0x7A88, 0x172B, 0x7A92, 0x0BA0, 0x7A93, 0x0AED, 0x7A95, 0x172D,
- 0x7A96, 0x172F, 0x7A97, 0x172C, 0x7A98, 0x172E, 0x7A9F, 0x06F8,
- 0x7AA0, 0x3A51, 0x7AA3, 0x3A52, 0x7AA9, 0x1730, 0x7AAA, 0x06FC,
- 0x7AAE, 0x0681, 0x7AAF, 0x0F3C, 0x7AB0, 0x1732, 0x7AB3, 0x3A53,
- 0x7AB6, 0x1733, 0x7ABA, 0x04D0, 0x7ABB, 0x3A54, 0x7ABC, 0x3A55,
- 0x7ABF, 0x1736, 0x7AC3, 0x05D4, 0x7AC4, 0x1735, 0x7AC5, 0x1734,
- 0x7AC6, 0x3A56, 0x7AC7, 0x1738, 0x7AC8, 0x1731, 0x7ACA, 0x1739,
- 0x7ACB, 0x0F71, 0x7ACD, 0x173A, 0x7ACF, 0x173B, 0x7AD1, 0x2189,
- 0x7AD2, 0x11C5, 0x7AD3, 0x173D, 0x7AD5, 0x173C, 0x7AD9, 0x173E,
- 0x7ADA, 0x173F, 0x7ADC, 0x0F7D, 0x7ADD, 0x1740, 0x7ADF, 0x1C08,
- 0x7AE0, 0x09B7, 0x7AE1, 0x1741, 0x7AE2, 0x1742, 0x7AE3, 0x0961,
- 0x7AE5, 0x0C90, 0x7AE6, 0x1743, 0x7AE7, 0x218A, 0x7AEA, 0x0B66,
- 0x7AEB, 0x218C, 0x7AED, 0x1744, 0x7AEF, 0x0B7A, 0x7AF0, 0x1745,
- 0x7AF6, 0x069D, 0x7AF8, 0x1076, 0x7AF9, 0x0B9B, 0x7AFA, 0x08DF,
- 0x7AFF, 0x0604, 0x7B02, 0x1746, 0x7B04, 0x1753, 0x7B06, 0x1749,
- 0x7B07, 0x3A57, 0x7B08, 0x0682, 0x7B0A, 0x1748, 0x7B0B, 0x1755,
- 0x7B0F, 0x1747, 0x7B11, 0x09B8, 0x7B14, 0x3A58, 0x7B18, 0x174B,
- 0x7B19, 0x174C, 0x7B1B, 0x0C25, 0x7B1E, 0x174D, 0x7B20, 0x05BC,
- 0x7B25, 0x0A20, 0x7B26, 0x0DD6, 0x7B27, 0x3A59, 0x7B28, 0x174F,
- 0x7B2C, 0x0B48, 0x7B31, 0x3A5A, 0x7B33, 0x174A, 0x7B35, 0x174E,
- 0x7B36, 0x1750, 0x7B39, 0x086B, 0x7B45, 0x1757, 0x7B46, 0x0DA0,
- 0x7B47, 0x3A5B, 0x7B48, 0x0D3A, 0x7B49, 0x0C73, 0x7B4B, 0x06D2,
- 0x7B4C, 0x1756, 0x7B4D, 0x1754, 0x7B4E, 0x3A5C, 0x7B4F, 0x0D49,
- 0x7B50, 0x1751, 0x7B51, 0x0B9C, 0x7B52, 0x0C75, 0x7B53, 0x375D,
- 0x7B54, 0x0C74, 0x7B56, 0x0866, 0x7B5D, 0x1769, 0x7B60, 0x3A5D,
- 0x7B65, 0x1759, 0x7B67, 0x175B, 0x7B69, 0x3A5E, 0x7B6C, 0x175E,
- 0x7B6D, 0x3A5F, 0x7B6E, 0x175F, 0x7B70, 0x175C, 0x7B71, 0x175D,
- 0x7B72, 0x3A60, 0x7B74, 0x175A, 0x7B75, 0x1758, 0x7B7A, 0x1752,
- 0x7B86, 0x0E1F, 0x7B87, 0x0555, 0x7B8B, 0x1766, 0x7B8D, 0x1763,
- 0x7B8F, 0x1768, 0x7B91, 0x3A61, 0x7B92, 0x1767, 0x7B94, 0x0D29,
- 0x7B95, 0x0EB3, 0x7B97, 0x0889, 0x7B98, 0x1761, 0x7B99, 0x176A,
- 0x7B9A, 0x1765, 0x7B9C, 0x1764, 0x7B9D, 0x1760, 0x7B9E, 0x218D,
- 0x7B9F, 0x1762, 0x7BA1, 0x0605, 0x7BAA, 0x0B7B, 0x7BAD, 0x0AA1,
- 0x7BAF, 0x3A62, 0x7BB1, 0x0D36, 0x7BB4, 0x176F, 0x7BB8, 0x0D38,
- 0x7BC0, 0x0A85, 0x7BC1, 0x176C, 0x7BC4, 0x0D63, 0x7BC6, 0x1770,
- 0x7BC7, 0x0E23, 0x7BC9, 0x0B99, 0x7BCB, 0x176B, 0x7BCC, 0x176D,
- 0x7BCF, 0x176E, 0x7BD7, 0x3A63, 0x7BD9, 0x3A64, 0x7BDD, 0x1771,
- 0x7BE0, 0x08F0, 0x7BE4, 0x0C9E, 0x7BE5, 0x1776, 0x7BE6, 0x1775,
- 0x7BE9, 0x1772, 0x7BED, 0x0FDC, 0x7BF3, 0x177B, 0x7BF6, 0x177F,
- 0x7BF7, 0x177C, 0x7C00, 0x1778, 0x7C07, 0x1779, 0x7C0B, 0x3A65,
- 0x7C0D, 0x177E, 0x7C0F, 0x3A66, 0x7C11, 0x1773, 0x7C12, 0x10EA,
- 0x7C13, 0x177A, 0x7C14, 0x1774, 0x7C17, 0x177D, 0x7C1E, 0x1E3B,
- 0x7C1F, 0x1783, 0x7C20, 0x3A67, 0x7C21, 0x0606, 0x7C23, 0x1780,
- 0x7C26, 0x3A68, 0x7C27, 0x1781, 0x7C2A, 0x1782, 0x7C2B, 0x1785,
- 0x7C31, 0x3A69, 0x7C36, 0x3A6A, 0x7C37, 0x1784, 0x7C38, 0x0D8A,
- 0x7C3D, 0x1786, 0x7C3E, 0x0FC4, 0x7C3F, 0x0E3D, 0x7C40, 0x178B,
- 0x7C43, 0x1788, 0x7C4C, 0x1787, 0x7C4D, 0x0A76, 0x7C4F, 0x178A,
- 0x7C50, 0x178C, 0x7C51, 0x3A6B, 0x7C54, 0x1789, 0x7C56, 0x1790,
- 0x7C58, 0x178D, 0x7C59, 0x3A6C, 0x7C5F, 0x178E, 0x7C60, 0x1777,
- 0x7C64, 0x178F, 0x7C65, 0x1791, 0x7C67, 0x3A6D, 0x7C6C, 0x1792,
- 0x7C6E, 0x3A6E, 0x7C70, 0x3A6F, 0x7C73, 0x0E16, 0x7C75, 0x1793,
- 0x7C7B, 0x370E, 0x7C7E, 0x0EEE, 0x7C81, 0x06C6, 0x7C82, 0x06FF,
- 0x7C83, 0x1794, 0x7C89, 0x0E04, 0x7C8B, 0x0A2E, 0x7C8D, 0x0EBC,
- 0x7C90, 0x1795, 0x7C92, 0x0F7B, 0x7C95, 0x0D2A, 0x7C97, 0x0AC8,
- 0x7C98, 0x0CEA, 0x7C9B, 0x0957, 0x7C9F, 0x0484, 0x7CA1, 0x179A,
- 0x7CA2, 0x1798, 0x7CA4, 0x1796, 0x7CA5, 0x05DD, 0x7CA7, 0x09B9,
- 0x7CA8, 0x179B, 0x7CAB, 0x1799, 0x7CAD, 0x1797, 0x7CAE, 0x179F,
- 0x7CB1, 0x179E, 0x7CB2, 0x179D, 0x7CB3, 0x179C, 0x7CB9, 0x17A0,
- 0x7CBC, 0x3A70, 0x7CBD, 0x17A1, 0x7CBE, 0x0A5E, 0x7CBF, 0x3A71,
- 0x7CC0, 0x17A2, 0x7CC2, 0x17A4, 0x7CC5, 0x17A3, 0x7CC8, 0x3A72,
- 0x7CC9, 0x3A73, 0x7CCA, 0x0786, 0x7CCE, 0x0ABA, 0x7CD2, 0x17A6,
- 0x7CD6, 0x0C76, 0x7CD7, 0x3A74, 0x7CD8, 0x17A5, 0x7CD9, 0x3A75,
- 0x7CDC, 0x17A7, 0x7CDD, 0x3A76, 0x7CDE, 0x0E05, 0x7CDF, 0x0AEE,
- 0x7CE0, 0x07D9, 0x7CE2, 0x17A8, 0x7CE7, 0x0F90, 0x7CEB, 0x3A77,
- 0x7CEF, 0x17AA, 0x7CF2, 0x17AB, 0x7CF4, 0x17AC, 0x7CF6, 0x17AD,
- 0x7CF8, 0x08B3, 0x7CFA, 0x17AE, 0x7CFB, 0x0725, 0x7CFE, 0x0684,
- 0x7D00, 0x0644, 0x7D02, 0x17B0, 0x7D04, 0x0EFF, 0x7D05, 0x07DA,
- 0x7D06, 0x17AF, 0x7D07, 0x3A78, 0x7D08, 0x3A79, 0x7D09, 0x3A7A,
- 0x7D0A, 0x17B3, 0x7D0B, 0x0EF2, 0x7D0D, 0x0CF2, 0x7D10, 0x0DA5,
- 0x7D13, 0x3A7B, 0x7D14, 0x096D, 0x7D15, 0x17B2, 0x7D17, 0x08FF,
- 0x7D18, 0x07DB, 0x7D19, 0x08B4, 0x7D1A, 0x0683, 0x7D1B, 0x0E06,
- 0x7D1C, 0x17B1, 0x7D1D, 0x3A7C, 0x7D20, 0x0AC9, 0x7D21, 0x0E70,
- 0x7D22, 0x0867, 0x7D23, 0x3A7D, 0x7D2B, 0x08B5, 0x7D2C, 0x0BF9,
- 0x7D2E, 0x17B6, 0x7D2F, 0x0FA7, 0x7D30, 0x0849, 0x7D32, 0x17B7,
- 0x7D33, 0x0A08, 0x7D35, 0x17B9, 0x7D39, 0x09BA, 0x7D3A, 0x0820,
- 0x7D3F, 0x17B8, 0x7D41, 0x3A7E, 0x7D42, 0x0934, 0x7D43, 0x0772,
- 0x7D44, 0x0ACA, 0x7D45, 0x17B4, 0x7D46, 0x17BA, 0x7D48, 0x218F,
- 0x7D4B, 0x17B5, 0x7D4C, 0x0726, 0x7D4E, 0x17BD, 0x7D4F, 0x17C1,
- 0x7D50, 0x0741, 0x7D53, 0x3A7F, 0x7D56, 0x17BC, 0x7D59, 0x3A80,
- 0x7D5B, 0x17C5, 0x7D5C, 0x2190, 0x7D5D, 0x3A81, 0x7D5E, 0x07DC,
- 0x7D61, 0x0F57, 0x7D62, 0x0480, 0x7D63, 0x17C2, 0x7D66, 0x0685,
- 0x7D68, 0x17BF, 0x7D6E, 0x17C0, 0x7D71, 0x0C77, 0x7D72, 0x17BE,
- 0x7D73, 0x17BB, 0x7D75, 0x0586, 0x7D76, 0x0A88, 0x7D79, 0x075C,
- 0x7D7A, 0x3A82, 0x7D7D, 0x17C7, 0x7D86, 0x3A83, 0x7D89, 0x17C4,
- 0x7D8B, 0x3A84, 0x7D8C, 0x3A85, 0x7D8F, 0x17C6, 0x7D93, 0x17C3,
- 0x7D99, 0x0727, 0x7D9A, 0x0B13, 0x7D9B, 0x17C8, 0x7D9C, 0x0AF0,
- 0x7D9F, 0x17D5, 0x7DA0, 0x2192, 0x7DA2, 0x17D1, 0x7DA3, 0x17CB,
- 0x7DAB, 0x17CF, 0x7DAC, 0x0926, 0x7DAD, 0x04A1, 0x7DAE, 0x17CA,
- 0x7DAF, 0x17D2, 0x7DB0, 0x17D6, 0x7DB1, 0x07DD, 0x7DB2, 0x0EE2,
- 0x7DB4, 0x0BF2, 0x7DB5, 0x17CC, 0x7DB7, 0x2191, 0x7DB8, 0x17D4,
- 0x7DBA, 0x17C9, 0x7DBB, 0x0B7C, 0x7DBD, 0x17CE, 0x7DBE, 0x0481,
- 0x7DBF, 0x0ED6, 0x7DC7, 0x17CD, 0x7DCA, 0x06D3, 0x7DCB, 0x0D80,
- 0x7DCC, 0x3A86, 0x7DCF, 0x0AEF, 0x7DD1, 0x0F98, 0x7DD2, 0x0979,
- 0x7DD5, 0x17FD, 0x7DD6, 0x2193, 0x7DD8, 0x17D7, 0x7DDA, 0x0AA2,
- 0x7DDC, 0x17D3, 0x7DDD, 0x17D8, 0x7DDE, 0x17DA, 0x7DE0, 0x0C15,
- 0x7DE1, 0x17DD, 0x7DE3, 0x340A, 0x7DE4, 0x17D9, 0x7DE8, 0x0E24,
- 0x7DE9, 0x0607, 0x7DEB, 0x3A87, 0x7DEC, 0x0ED7, 0x7DEF, 0x04A2,
- 0x7DF1, 0x3A88, 0x7DF2, 0x17DC, 0x7DF4, 0x0FC5, 0x7DF9, 0x3A89,
- 0x7DFB, 0x17DB, 0x7E01, 0x0511, 0x7E04, 0x0CC4, 0x7E05, 0x17DE,
- 0x7E08, 0x3A8A, 0x7E09, 0x17E5, 0x7E0A, 0x17DF, 0x7E0B, 0x17E6,
- 0x7E11, 0x3A8B, 0x7E12, 0x17E2, 0x7E15, 0x3A8C, 0x7E1B, 0x0D31,
- 0x7E1E, 0x08F6, 0x7E1F, 0x17E4, 0x7E20, 0x3A8D, 0x7E21, 0x17E1,
- 0x7E22, 0x17E7, 0x7E23, 0x17E0, 0x7E26, 0x094E, 0x7E2B, 0x0E53,
- 0x7E2E, 0x0956, 0x7E31, 0x17E3, 0x7E32, 0x17EF, 0x7E35, 0x17EB,
- 0x7E37, 0x17EE, 0x7E39, 0x17EC, 0x7E3A, 0x17F0, 0x7E3B, 0x17EA,
- 0x7E3D, 0x17D0, 0x7E3E, 0x0A77, 0x7E41, 0x0D5F, 0x7E43, 0x17ED,
- 0x7E46, 0x17E8, 0x7E47, 0x3A8E, 0x7E48, 0x3767, 0x7E4A, 0x0AA3,
- 0x7E4B, 0x0728, 0x7E4D, 0x0935, 0x7E52, 0x2194, 0x7E54, 0x09EB,
- 0x7E55, 0x0AB8, 0x7E56, 0x17F3, 0x7E59, 0x17F5, 0x7E5A, 0x17F6,
- 0x7E5D, 0x17F2, 0x7E5E, 0x17F4, 0x7E61, 0x1E11, 0x7E62, 0x3A8F,
- 0x7E66, 0x17E9, 0x7E67, 0x17F1, 0x7E69, 0x17F9, 0x7E6A, 0x17F8,
- 0x7E6B, 0x1DF7, 0x7E6D, 0x0EA8, 0x7E6E, 0x3A90, 0x7E70, 0x0701,
- 0x7E73, 0x3A91, 0x7E79, 0x17F7, 0x7E7B, 0x17FB, 0x7E7C, 0x17FA,
- 0x7E7D, 0x17FE, 0x7E7F, 0x1800, 0x7E82, 0x088A, 0x7E83, 0x17FC,
- 0x7E88, 0x1801, 0x7E89, 0x1802, 0x7E8A, 0x20A7, 0x7E8C, 0x1803,
- 0x7E8D, 0x3A92, 0x7E8E, 0x1809, 0x7E8F, 0x0C35, 0x7E90, 0x1805,
- 0x7E91, 0x3A93, 0x7E92, 0x1804, 0x7E93, 0x1806, 0x7E94, 0x1807,
- 0x7E96, 0x1808, 0x7E98, 0x3A94, 0x7E9B, 0x180A, 0x7E9C, 0x180B,
- 0x7F36, 0x0608, 0x7F38, 0x180C, 0x7F3A, 0x180D, 0x7F44, 0x3A95,
- 0x7F45, 0x180E, 0x7F47, 0x2195, 0x7F4C, 0x180F, 0x7F4D, 0x1810,
- 0x7F4E, 0x1811, 0x7F4F, 0x3A96, 0x7F50, 0x1812, 0x7F51, 0x1813,
- 0x7F52, 0x3A97, 0x7F53, 0x3A98, 0x7F54, 0x1815, 0x7F55, 0x1814,
- 0x7F58, 0x1816, 0x7F5F, 0x1817, 0x7F60, 0x1818, 0x7F61, 0x3A99,
- 0x7F67, 0x181B, 0x7F68, 0x1819, 0x7F69, 0x181A, 0x7F6A, 0x0851,
- 0x7F6B, 0x0729, 0x7F6E, 0x0B94, 0x7F70, 0x0D47, 0x7F72, 0x097A,
- 0x7F75, 0x0D03, 0x7F77, 0x0D81, 0x7F78, 0x181C, 0x7F79, 0x1336,
- 0x7F82, 0x181D, 0x7F83, 0x181F, 0x7F85, 0x0F4F, 0x7F86, 0x181E,
- 0x7F87, 0x1821, 0x7F88, 0x1820, 0x7F8A, 0x0F3D, 0x7F8C, 0x1822,
- 0x7F8E, 0x0D92, 0x7F91, 0x3A9A, 0x7F94, 0x1823, 0x7F9A, 0x1826,
- 0x7F9D, 0x1825, 0x7F9E, 0x1824, 0x7FA1, 0x2196, 0x7FA3, 0x1827,
- 0x7FA4, 0x0708, 0x7FA8, 0x0AA4, 0x7FA9, 0x065B, 0x7FAE, 0x182B,
- 0x7FAF, 0x1828, 0x7FB2, 0x1829, 0x7FB6, 0x182C, 0x7FB8, 0x182D,
- 0x7FB9, 0x182A, 0x7FBD, 0x04CB, 0x7FBF, 0x3A9B, 0x7FC1, 0x0527,
- 0x7FC5, 0x182F, 0x7FC6, 0x1830, 0x7FCA, 0x1831, 0x7FCC, 0x0F4C,
- 0x7FCE, 0x3A9C, 0x7FD2, 0x0936, 0x7FD4, 0x1833, 0x7FD5, 0x1832,
- 0x7FDF, 0x3A9D, 0x7FE0, 0x0A2F, 0x7FE1, 0x1834, 0x7FE5, 0x3A9E,
- 0x7FE6, 0x1835, 0x7FE9, 0x1836, 0x7FEB, 0x0621, 0x7FEC, 0x3A9F,
- 0x7FEE, 0x3AA0, 0x7FEF, 0x3AA1, 0x7FF0, 0x0609, 0x7FF3, 0x1837,
- 0x7FF9, 0x1838, 0x7FFA, 0x3AA2, 0x7FFB, 0x0E8B, 0x7FFC, 0x0F4D,
- 0x8000, 0x0F3E, 0x8001, 0x0FDD, 0x8002, 0x3713, 0x8003, 0x07DF,
- 0x8004, 0x183B, 0x8005, 0x0900, 0x8006, 0x183A, 0x800B, 0x183C,
- 0x800C, 0x08D5, 0x800E, 0x3AA3, 0x8010, 0x0B31, 0x8011, 0x3AA4,
- 0x8012, 0x183D, 0x8014, 0x3AA5, 0x8015, 0x07DE, 0x8017, 0x0EE3,
- 0x8018, 0x183E, 0x8019, 0x183F, 0x801C, 0x1840, 0x8021, 0x1841,
- 0x8024, 0x3AA6, 0x8026, 0x3AA7, 0x8028, 0x1842, 0x8033, 0x08D6,
- 0x8036, 0x0EF9, 0x803A, 0x3AA8, 0x803B, 0x1844, 0x803C, 0x3AA9,
- 0x803D, 0x0B7D, 0x803F, 0x1843, 0x8046, 0x1846, 0x804A, 0x1845,
- 0x8052, 0x1847, 0x8056, 0x0A5F, 0x8058, 0x1848, 0x805A, 0x1849,
- 0x805E, 0x0E09, 0x805F, 0x184A, 0x8060, 0x3AAA, 0x8061, 0x0AF1,
- 0x8062, 0x184B, 0x8068, 0x184C, 0x806F, 0x0FC6, 0x8070, 0x184F,
- 0x8071, 0x3AAB, 0x8072, 0x184E, 0x8073, 0x184D, 0x8074, 0x0BCC,
- 0x8075, 0x3AAC, 0x8076, 0x1850, 0x8077, 0x09EC, 0x8079, 0x1851,
- 0x807D, 0x1852, 0x807E, 0x0FDE, 0x807F, 0x1853, 0x8084, 0x1854,
- 0x8085, 0x1856, 0x8086, 0x1855, 0x8087, 0x0D39, 0x8089, 0x0CD1,
- 0x808B, 0x0FE4, 0x808C, 0x0D3D, 0x8093, 0x1858, 0x8096, 0x09BB,
- 0x8098, 0x0D9C, 0x809A, 0x1859, 0x809B, 0x1857, 0x809D, 0x060A,
- 0x809E, 0x3AAD, 0x80A1, 0x0788, 0x80A2, 0x08B6, 0x80A5, 0x0D82,
- 0x80A6, 0x3AAE, 0x80A9, 0x075E, 0x80AA, 0x0E71, 0x80AB, 0x3AAF,
- 0x80AC, 0x185C, 0x80AD, 0x185A, 0x80AF, 0x07E0, 0x80B1, 0x07E1,
- 0x80B2, 0x04AD, 0x80B4, 0x0858, 0x80BA, 0x0D0F, 0x80C3, 0x04A3,
- 0x80C4, 0x1861, 0x80C6, 0x0B7E, 0x80CC, 0x0D0E, 0x80CE, 0x0B3B,
- 0x80D6, 0x1863, 0x80D7, 0x3AB0, 0x80D8, 0x3AB1, 0x80D9, 0x185F,
- 0x80DA, 0x1862, 0x80DB, 0x185D, 0x80DD, 0x1860, 0x80DE, 0x0E54,
- 0x80E1, 0x0789, 0x80E4, 0x04C1, 0x80E5, 0x185E, 0x80EF, 0x1865,
- 0x80F1, 0x1866, 0x80F4, 0x0C91, 0x80F8, 0x06B3, 0x80FC, 0x1871,
- 0x80FD, 0x0CF3, 0x8102, 0x08B7, 0x8105, 0x06B4, 0x8106, 0x0A6C,
- 0x8107, 0x0FEC, 0x8108, 0x0EBA, 0x8109, 0x1864, 0x810A, 0x0A78,
- 0x8116, 0x3AB2, 0x8118, 0x3AB3, 0x811A, 0x066D, 0x811B, 0x1867,
- 0x8123, 0x1869, 0x8129, 0x1868, 0x812B, 0x3659, 0x812F, 0x186A,
- 0x8131, 0x0B64, 0x8133, 0x0CF4, 0x8139, 0x0BCD, 0x813A, 0x3AB4,
- 0x813E, 0x186E, 0x8141, 0x3772, 0x8146, 0x186D, 0x814A, 0x3AB5,
- 0x814B, 0x186B, 0x814C, 0x3AB6, 0x814E, 0x0A1B, 0x8150, 0x0DD7,
- 0x8151, 0x1870, 0x8153, 0x186F, 0x8154, 0x07E2, 0x8155, 0x0FF9,
- 0x815F, 0x1880, 0x8165, 0x1874, 0x8166, 0x1875, 0x816B, 0x091C,
- 0x816E, 0x1873, 0x8170, 0x080A, 0x8171, 0x1872, 0x8174, 0x1876,
- 0x8178, 0x0BCE, 0x8179, 0x0DF2, 0x817A, 0x0AA5, 0x817F, 0x0B3C,
- 0x8180, 0x187A, 0x8181, 0x3AB7, 0x8182, 0x187B, 0x8183, 0x1877,
- 0x8184, 0x3AB8, 0x8188, 0x1878, 0x818A, 0x1879, 0x818F, 0x07E3,
- 0x8193, 0x1881, 0x8195, 0x187D, 0x819A, 0x0DD8, 0x819C, 0x0E9A,
- 0x819D, 0x0D9A, 0x81A0, 0x187C, 0x81A3, 0x187F, 0x81A4, 0x187E,
- 0x81A8, 0x0E72, 0x81A9, 0x1882, 0x81B0, 0x1883, 0x81B3, 0x0AB9,
- 0x81B4, 0x3AB9, 0x81B5, 0x1884, 0x81B8, 0x1886, 0x81BA, 0x188A,
- 0x81BD, 0x1887, 0x81BE, 0x1885, 0x81BF, 0x0CF5, 0x81C0, 0x1888,
- 0x81C2, 0x1889, 0x81C6, 0x0532, 0x81C8, 0x1890, 0x81C9, 0x188B,
- 0x81CD, 0x188C, 0x81CF, 0x3ABA, 0x81D1, 0x188D, 0x81D3, 0x0B01,
- 0x81D8, 0x188F, 0x81D9, 0x188E, 0x81DA, 0x1891, 0x81DF, 0x1892,
- 0x81E0, 0x1893, 0x81E3, 0x0A09, 0x81E5, 0x0569, 0x81E7, 0x1894,
- 0x81E8, 0x0F9F, 0x81EA, 0x08D7, 0x81ED, 0x0937, 0x81F3, 0x08B8,
- 0x81F4, 0x0B95, 0x81F9, 0x3ABB, 0x81FA, 0x1895, 0x81FB, 0x1896,
- 0x81FC, 0x04D3, 0x81FE, 0x1897, 0x8201, 0x1898, 0x8202, 0x1899,
- 0x8203, 0x3ABC, 0x8205, 0x189A, 0x8207, 0x189B, 0x8208, 0x06B5,
- 0x8209, 0x13AF, 0x820A, 0x189C, 0x820C, 0x0A89, 0x820D, 0x189D,
- 0x820E, 0x08F7, 0x8210, 0x189E, 0x8212, 0x1009, 0x8216, 0x189F,
- 0x8217, 0x0E2E, 0x8218, 0x0618, 0x821B, 0x0AA6, 0x821C, 0x0962,
- 0x821E, 0x0DE3, 0x821F, 0x0938, 0x8221, 0x3ABD, 0x8229, 0x18A0,
- 0x822A, 0x07E4, 0x822B, 0x18A1, 0x822C, 0x0D60, 0x822E, 0x18AF,
- 0x8232, 0x3ABE, 0x8233, 0x18A3, 0x8234, 0x3ABF, 0x8235, 0x0B29,
- 0x8236, 0x0D2B, 0x8237, 0x0773, 0x8238, 0x18A2, 0x8239, 0x0AA7,
- 0x8240, 0x18A4, 0x8246, 0x3AC0, 0x8247, 0x0C16, 0x824B, 0x3AC1,
- 0x824F, 0x3AC2, 0x8258, 0x18A6, 0x8259, 0x18A5, 0x825A, 0x18A8,
- 0x825D, 0x18A7, 0x825F, 0x18A9, 0x8262, 0x18AB, 0x8264, 0x18AA,
- 0x8266, 0x060B, 0x8268, 0x18AC, 0x826A, 0x18AD, 0x826B, 0x18AE,
- 0x826E, 0x0821, 0x826F, 0x0F91, 0x8271, 0x18B0, 0x8272, 0x09ED,
- 0x8276, 0x0512, 0x8277, 0x18B1, 0x8278, 0x18B2, 0x8279, 0x3775,
- 0x827E, 0x18B3, 0x828B, 0x04B6, 0x828D, 0x18B4, 0x828E, 0x3AC3,
- 0x8292, 0x18B5, 0x8299, 0x0DD9, 0x829D, 0x08F3, 0x829F, 0x18B7,
- 0x82A5, 0x0587, 0x82A6, 0x0476, 0x82AB, 0x18B6, 0x82AC, 0x18B9,
- 0x82AD, 0x0D04, 0x82AE, 0x3AC4, 0x82AF, 0x0A0A, 0x82B1, 0x0556,
- 0x82B3, 0x0E55, 0x82B7, 0x3AC5, 0x82B8, 0x0733, 0x82B9, 0x06D4,
- 0x82BB, 0x18B8, 0x82BD, 0x056A, 0x82BE, 0x3AC6, 0x82C5, 0x05DF,
- 0x82C6, 0x3AC7, 0x82D1, 0x0513, 0x82D2, 0x18BD, 0x82D3, 0x0FB2,
- 0x82D4, 0x0B3D, 0x82D7, 0x0DB6, 0x82D9, 0x18C9, 0x82DB, 0x0557,
- 0x82DC, 0x18C7, 0x82DE, 0x18C5, 0x82DF, 0x18BC, 0x82E1, 0x18BA,
- 0x82E3, 0x18BB, 0x82E5, 0x090F, 0x82E6, 0x06E4, 0x82E7, 0x0BB5,
- 0x82EB, 0x0CA9, 0x82F1, 0x04F3, 0x82F3, 0x18BF, 0x82F4, 0x18BE,
- 0x82F9, 0x18C4, 0x82FA, 0x18C0, 0x82FB, 0x18C3, 0x82FE, 0x3AC8,
- 0x8301, 0x2198, 0x8302, 0x0EDC, 0x8303, 0x18C2, 0x8304, 0x0558,
- 0x8305, 0x05DB, 0x8306, 0x18C6, 0x8309, 0x18C8, 0x830E, 0x072A,
- 0x8316, 0x18CC, 0x8317, 0x18D5, 0x8318, 0x18D6, 0x831C, 0x046F,
- 0x8323, 0x18DD, 0x8328, 0x04B5, 0x832B, 0x18D4, 0x832F, 0x18D3,
- 0x8331, 0x18CE, 0x8332, 0x18CD, 0x8334, 0x18CB, 0x8335, 0x18CA,
- 0x8336, 0x0BA1, 0x8338, 0x0B5B, 0x8339, 0x18D0, 0x8340, 0x18CF,
- 0x8343, 0x3AC9, 0x8345, 0x18D2, 0x8349, 0x0AF2, 0x834A, 0x072B,
- 0x834F, 0x04E3, 0x8350, 0x18D1, 0x8351, 0x3ACA, 0x8352, 0x07E5,
- 0x8355, 0x3ACB, 0x8358, 0x0AF3, 0x8362, 0x2199, 0x8373, 0x18E3,
- 0x8375, 0x18E4, 0x8377, 0x0559, 0x837B, 0x052E, 0x837C, 0x18E1,
- 0x837F, 0x219A, 0x8385, 0x18D7, 0x8386, 0x3ACC, 0x8387, 0x18DF,
- 0x8389, 0x18E6, 0x838A, 0x18E0, 0x838D, 0x3ACD, 0x838E, 0x18DE,
- 0x8392, 0x3ACE, 0x8393, 0x18C1, 0x8396, 0x18DC, 0x8398, 0x3ACF,
- 0x839A, 0x18D8, 0x839E, 0x060C, 0x839F, 0x18DA, 0x83A0, 0x18E5,
- 0x83A2, 0x18DB, 0x83A8, 0x18E7, 0x83A9, 0x3AD0, 0x83AA, 0x18D9,
- 0x83AB, 0x0D32, 0x83B1, 0x0F53, 0x83B5, 0x18E2, 0x83BD, 0x18F8,
- 0x83BF, 0x3AD1, 0x83C0, 0x3AD2, 0x83C1, 0x18F0, 0x83C5, 0x0A41,
- 0x83C7, 0x219B, 0x83CA, 0x0660, 0x83CC, 0x06D5, 0x83CE, 0x18EB,
- 0x83D3, 0x055B, 0x83D6, 0x09BC, 0x83D8, 0x18EE, 0x83DC, 0x084A,
- 0x83DF, 0x0C4B, 0x83E0, 0x18F3, 0x83E9, 0x0E3E, 0x83EA, 0x3AD3,
- 0x83EB, 0x18EA, 0x83EF, 0x055A, 0x83F0, 0x078A, 0x83F1, 0x0D9B,
- 0x83F2, 0x18F4, 0x83F4, 0x18E8, 0x83F6, 0x219C, 0x83F7, 0x18F1,
- 0x83FB, 0x18FB, 0x83FD, 0x18EC, 0x8403, 0x18ED, 0x8404, 0x0C92,
- 0x8407, 0x18F2, 0x840A, 0x1E7F, 0x840B, 0x18EF, 0x840C, 0x0E56,
- 0x840D, 0x18F5, 0x840E, 0x04A4, 0x840F, 0x3AD4, 0x8411, 0x3AD5,
- 0x8413, 0x18E9, 0x8420, 0x18F7, 0x8422, 0x18F6, 0x8429, 0x0D21,
- 0x842A, 0x18FD, 0x842C, 0x1908, 0x8431, 0x05DC, 0x8435, 0x190B,
- 0x8438, 0x18F9, 0x843C, 0x18FE, 0x843D, 0x0F58, 0x8446, 0x1907,
- 0x8448, 0x219D, 0x8449, 0x0F3F, 0x844A, 0x3AD6, 0x844E, 0x0F72,
- 0x8457, 0x0BB6, 0x845B, 0x05C9, 0x8461, 0x0DE4, 0x8462, 0x190D,
- 0x8463, 0x0C79, 0x8466, 0x0475, 0x8469, 0x1906, 0x846B, 0x1902,
- 0x846C, 0x0AF4, 0x846D, 0x18FC, 0x846E, 0x1904, 0x846F, 0x1909,
- 0x8471, 0x0CE2, 0x8475, 0x046E, 0x8476, 0x3AD7, 0x8477, 0x1901,
- 0x8479, 0x190A, 0x847A, 0x0DEA, 0x8482, 0x1905, 0x8484, 0x1900,
- 0x848B, 0x09BD, 0x8490, 0x0939, 0x8494, 0x08D8, 0x8499, 0x0EE4,
- 0x849C, 0x0DB9, 0x849F, 0x1910, 0x84A1, 0x1919, 0x84A8, 0x3AD8,
- 0x84AD, 0x1903, 0x84AF, 0x3AD9, 0x84B2, 0x05D5, 0x84B4, 0x219E,
- 0x84B8, 0x09E0, 0x84B9, 0x190E, 0x84BB, 0x1913, 0x84BC, 0x0AF5,
- 0x84BF, 0x190F, 0x84C0, 0x3ADA, 0x84C1, 0x1916, 0x84C2, 0x3ADB,
- 0x84C4, 0x0B9D, 0x84C6, 0x1917, 0x84C9, 0x0F40, 0x84CA, 0x190C,
- 0x84CB, 0x0596, 0x84CD, 0x1912, 0x84D0, 0x1915, 0x84D1, 0x0EB8,
- 0x84D6, 0x1918, 0x84D9, 0x1911, 0x84DA, 0x1914, 0x84DC, 0x20AB,
- 0x84EC, 0x0E57, 0x84EE, 0x0FC7, 0x84F0, 0x3ADC, 0x84F4, 0x191C,
- 0x84FC, 0x1923, 0x84FD, 0x3ADD, 0x84FF, 0x191B, 0x8500, 0x08EF,
- 0x8506, 0x18FA, 0x850C, 0x3ADE, 0x8511, 0x0E1E, 0x8513, 0x0EAE,
- 0x8514, 0x1922, 0x8515, 0x1921, 0x8517, 0x191D, 0x8518, 0x191E,
- 0x851A, 0x04D8, 0x851F, 0x1920, 0x8521, 0x191A, 0x8523, 0x1E1A,
- 0x8526, 0x0BF1, 0x852C, 0x191F, 0x852D, 0x04C2, 0x8534, 0x3ADF,
- 0x8535, 0x0B02, 0x853D, 0x0E13, 0x853E, 0x1EB5, 0x8540, 0x1924,
- 0x8541, 0x1928, 0x8543, 0x0D6D, 0x8548, 0x1927, 0x8549, 0x09BE,
- 0x854A, 0x08F5, 0x854B, 0x192A, 0x854E, 0x06B6, 0x8553, 0x219F,
- 0x8555, 0x192B, 0x8557, 0x0DEB, 0x8558, 0x1926, 0x8559, 0x21A0,
- 0x855A, 0x18FF, 0x855E, 0x3AE0, 0x8563, 0x1925, 0x8568, 0x0FF5,
- 0x8569, 0x0C7A, 0x856A, 0x0DE5, 0x856B, 0x21A1, 0x856D, 0x1932,
- 0x8577, 0x1938, 0x857E, 0x1939, 0x8580, 0x192C, 0x8584, 0x0D2C,
- 0x8587, 0x1936, 0x8588, 0x192E, 0x858A, 0x1930, 0x858F, 0x3AE1,
- 0x8590, 0x193A, 0x8591, 0x192F, 0x8594, 0x1933, 0x8597, 0x0514,
- 0x8599, 0x0CBD, 0x859B, 0x1934, 0x859C, 0x1937, 0x85A4, 0x192D,
- 0x85A6, 0x0AA8, 0x85A8, 0x1931, 0x85A9, 0x0875, 0x85AA, 0x0A0B,
- 0x85AB, 0x0706, 0x85AC, 0x0F00, 0x85AD, 0x3AE4, 0x85AE, 0x0F05,
- 0x85AF, 0x097C, 0x85B0, 0x21A3, 0x85B7, 0x3AE2, 0x85B9, 0x193E,
- 0x85BA, 0x193C, 0x85C1, 0x0FF4, 0x85C9, 0x193B, 0x85CD, 0x0F5F,
- 0x85CE, 0x3AE3, 0x85CF, 0x193D, 0x85D0, 0x193F, 0x85D5, 0x1940,
- 0x85DC, 0x1943, 0x85DD, 0x1941, 0x85E4, 0x0C7B, 0x85E5, 0x1942,
- 0x85E9, 0x0D61, 0x85EA, 0x1935, 0x85F4, 0x3780, 0x85F7, 0x097D,
- 0x85F9, 0x1944, 0x85FA, 0x1949, 0x85FB, 0x0AF6, 0x85FE, 0x1948,
- 0x8602, 0x1929, 0x8606, 0x194A, 0x8607, 0x0ACB, 0x860A, 0x1945,
- 0x860B, 0x1947, 0x8612, 0x3AE5, 0x8613, 0x1946, 0x8616, 0x14D0,
- 0x8617, 0x14C1, 0x861A, 0x194C, 0x8622, 0x194B, 0x8629, 0x3AE6,
- 0x862D, 0x0F60, 0x862F, 0x16B1, 0x8630, 0x194D, 0x863F, 0x194E,
- 0x864D, 0x194F, 0x864E, 0x078B, 0x8650, 0x066E, 0x8652, 0x3AE7,
- 0x8654, 0x1951, 0x8655, 0x1094, 0x865A, 0x068F, 0x865B, 0x3418,
- 0x865C, 0x0F82, 0x865E, 0x06EB, 0x865F, 0x1952, 0x8663, 0x3AE8,
- 0x8667, 0x1953, 0x866B, 0x0BAC, 0x866C, 0x3AE9, 0x866F, 0x3AEA,
- 0x8671, 0x1954, 0x8679, 0x0CD2, 0x867A, 0x3AEB, 0x867B, 0x047E,
- 0x867D, 0x3786, 0x868A, 0x0563, 0x868B, 0x1959, 0x868C, 0x195A,
- 0x868D, 0x3AEC, 0x8691, 0x3AED, 0x8693, 0x1955, 0x8695, 0x088B,
- 0x8698, 0x3AEE, 0x86A3, 0x1956, 0x86A4, 0x0CF8, 0x86A7, 0x3AEF,
- 0x86A8, 0x3AF0, 0x86A9, 0x1957, 0x86AA, 0x1958, 0x86AB, 0x1962,
- 0x86AF, 0x195C, 0x86B0, 0x195F, 0x86B6, 0x195B, 0x86C4, 0x195D,
- 0x86C6, 0x195E, 0x86C7, 0x0904, 0x86C9, 0x1960, 0x86CB, 0x0B7F,
- 0x86CD, 0x072C, 0x86CE, 0x05A0, 0x86D4, 0x1963, 0x86D9, 0x059D,
- 0x86DB, 0x1968, 0x86DE, 0x1964, 0x86DF, 0x1967, 0x86E4, 0x0D4E,
- 0x86E9, 0x1965, 0x86EC, 0x1966, 0x86ED, 0x0DBA, 0x86EE, 0x0D6E,
- 0x86EF, 0x1969, 0x86F8, 0x0B5D, 0x86F9, 0x1973, 0x86FA, 0x3AF1,
- 0x86FB, 0x196F, 0x86FD, 0x3AF2, 0x86FE, 0x056B, 0x8700, 0x196D,
- 0x8702, 0x0E58, 0x8703, 0x196E, 0x8706, 0x196B, 0x8708, 0x196C,
- 0x8709, 0x1971, 0x870A, 0x1974, 0x870B, 0x3AF3, 0x870D, 0x1972,
- 0x8711, 0x1970, 0x8712, 0x196A, 0x8713, 0x3AF4, 0x8718, 0x0B96,
- 0x8719, 0x3AF5, 0x871A, 0x197B, 0x871C, 0x0EB6, 0x871E, 0x3AF6,
- 0x8725, 0x1979, 0x8728, 0x3AF7, 0x8729, 0x197A, 0x8734, 0x1975,
- 0x8737, 0x1977, 0x873B, 0x1978, 0x873E, 0x3AF8, 0x873F, 0x1976,
- 0x8749, 0x0A8A, 0x874B, 0x0FDF, 0x874C, 0x197F, 0x874E, 0x1980,
- 0x8753, 0x1986, 0x8755, 0x09F0, 0x8757, 0x1982, 0x8759, 0x1985,
- 0x875F, 0x197D, 0x8760, 0x197C, 0x8763, 0x1987, 0x8766, 0x055C,
- 0x8768, 0x1983, 0x876A, 0x1988, 0x876E, 0x1984, 0x8771, 0x3AF9,
- 0x8774, 0x1981, 0x8776, 0x0BCF, 0x8778, 0x197E, 0x877F, 0x0D1E,
- 0x8782, 0x198C, 0x8788, 0x3AFA, 0x878D, 0x0F25, 0x8799, 0x3AFB,
- 0x879F, 0x198B, 0x87A2, 0x198A, 0x87AB, 0x1993, 0x87AC, 0x3AFC,
- 0x87AD, 0x3AFD, 0x87AF, 0x198D, 0x87B3, 0x1995, 0x87B5, 0x3AFE,
- 0x87BA, 0x0F50, 0x87BB, 0x1998, 0x87BD, 0x198F, 0x87C0, 0x1990,
- 0x87C4, 0x1994, 0x87C6, 0x1997, 0x87C7, 0x1996, 0x87CB, 0x198E,
- 0x87D0, 0x1991, 0x87D2, 0x19A2, 0x87D6, 0x3AFF, 0x87E0, 0x199B,
- 0x87EB, 0x3B00, 0x87EC, 0x1E23, 0x87ED, 0x3B01, 0x87EF, 0x1999,
- 0x87F2, 0x199A, 0x87F5, 0x3C3D, 0x87F6, 0x199F, 0x87F7, 0x19A0,
- 0x87F9, 0x0588, 0x87FB, 0x065C, 0x87FE, 0x199E, 0x8801, 0x3B02,
- 0x8803, 0x3B03, 0x8805, 0x1989, 0x8806, 0x3B04, 0x8807, 0x21A6,
- 0x880B, 0x3B05, 0x880D, 0x199D, 0x880E, 0x19A1, 0x880F, 0x199C,
- 0x8811, 0x19A3, 0x8814, 0x3B06, 0x8815, 0x19A5, 0x8816, 0x19A4,
- 0x881C, 0x3B07, 0x881F, 0x1E85, 0x8821, 0x19A7, 0x8822, 0x19A6,
- 0x8823, 0x1961, 0x8827, 0x19AB, 0x8831, 0x19A8, 0x8836, 0x19A9,
- 0x8839, 0x19AA, 0x883B, 0x19AC, 0x8840, 0x0742, 0x8842, 0x19AE,
- 0x8844, 0x19AD, 0x8846, 0x093A, 0x884C, 0x07E6, 0x884D, 0x1524,
- 0x8852, 0x19AF, 0x8853, 0x095B, 0x8856, 0x3B08, 0x8857, 0x0597,
- 0x8859, 0x19B0, 0x885B, 0x04F4, 0x885D, 0x09BF, 0x885E, 0x19B1,
- 0x885F, 0x3B09, 0x8861, 0x07E7, 0x8862, 0x19B2, 0x8863, 0x04A5,
- 0x8864, 0x3B0A, 0x8868, 0x0DAF, 0x886B, 0x19B3, 0x8870, 0x0A30,
- 0x8872, 0x19BA, 0x8875, 0x19B7, 0x8877, 0x0BAD, 0x887D, 0x19B8,
- 0x887E, 0x19B5, 0x887F, 0x06D6, 0x8881, 0x19B4, 0x8882, 0x19BB,
- 0x8888, 0x070C, 0x888B, 0x0B3E, 0x888D, 0x19C1, 0x8892, 0x19BD,
- 0x8896, 0x0B15, 0x8897, 0x19BC, 0x8898, 0x3B0B, 0x8899, 0x19BF,
- 0x889E, 0x19B6, 0x88A2, 0x19C0, 0x88A4, 0x19C2, 0x88AA, 0x3B0C,
- 0x88AB, 0x0D83, 0x88AE, 0x19BE, 0x88B0, 0x19C3, 0x88B1, 0x19C5,
- 0x88B4, 0x0787, 0x88B5, 0x19B9, 0x88B7, 0x0485, 0x88BD, 0x3B0D,
- 0x88BE, 0x3B0E, 0x88BF, 0x19C4, 0x88C1, 0x084B, 0x88C2, 0x0FBE,
- 0x88C3, 0x19C6, 0x88C4, 0x19C7, 0x88C5, 0x0AF7, 0x88C6, 0x3789,
- 0x88CA, 0x3B0F, 0x88CF, 0x0F6A, 0x88D2, 0x3B10, 0x88D4, 0x19C8,
- 0x88D5, 0x0F1F, 0x88D8, 0x19C9, 0x88D9, 0x19CA, 0x88DB, 0x3B11,
- 0x88DC, 0x0E34, 0x88DD, 0x19CB, 0x88DF, 0x0830, 0x88E1, 0x0F6B,
- 0x88E8, 0x19D0, 0x88F0, 0x3B12, 0x88F1, 0x3B13, 0x88F2, 0x19D1,
- 0x88F3, 0x09C0, 0x88F4, 0x19CF, 0x88F5, 0x21A7, 0x88F8, 0x0F51,
- 0x88F9, 0x19CC, 0x88FC, 0x19CE, 0x88FD, 0x0A61, 0x88FE, 0x0A44,
- 0x8902, 0x19CD, 0x8904, 0x19D2, 0x8906, 0x3B14, 0x8907, 0x0DF3,
- 0x890A, 0x19D4, 0x890C, 0x19D3, 0x8910, 0x05CA, 0x8912, 0x0E59,
- 0x8913, 0x19D5, 0x8918, 0x3B15, 0x8919, 0x3B16, 0x891A, 0x3B17,
- 0x891C, 0x20A8, 0x891D, 0x19E1, 0x891E, 0x19D7, 0x8925, 0x19D8,
- 0x8927, 0x3B18, 0x892A, 0x19D9, 0x892B, 0x19DA, 0x8930, 0x3B19,
- 0x8936, 0x19DE, 0x8938, 0x19DF, 0x893B, 0x19DD, 0x893E, 0x3B1A,
- 0x8941, 0x19DB, 0x8943, 0x19D6, 0x8944, 0x19DC, 0x894C, 0x19E0,
- 0x894D, 0x1BD0, 0x8956, 0x0528, 0x895E, 0x19E3, 0x895F, 0x06D7,
- 0x8960, 0x19E2, 0x8964, 0x19E5, 0x8966, 0x19E4, 0x896A, 0x19E7,
- 0x896D, 0x19E6, 0x896F, 0x19E8, 0x8972, 0x093B, 0x8974, 0x19E9,
- 0x8977, 0x19EA, 0x897B, 0x3B1B, 0x897E, 0x19EB, 0x897F, 0x0A62,
- 0x8980, 0x362E, 0x8981, 0x0F41, 0x8983, 0x19EC, 0x8986, 0x0DF4,
- 0x8987, 0x0CFC, 0x8988, 0x19ED, 0x898A, 0x19EE, 0x898B, 0x075F,
- 0x898F, 0x0646, 0x8993, 0x19EF, 0x8996, 0x08B9, 0x8997, 0x0CF7,
- 0x8998, 0x19F0, 0x899A, 0x05AE, 0x89A1, 0x19F1, 0x89A6, 0x19F3,
- 0x89A7, 0x0F61, 0x89A9, 0x19F2, 0x89AA, 0x0A0C, 0x89AC, 0x19F4,
- 0x89AF, 0x19F5, 0x89B2, 0x19F6, 0x89B3, 0x060D, 0x89BA, 0x19F7,
- 0x89BD, 0x19F8, 0x89BF, 0x19F9, 0x89C0, 0x19FA, 0x89D2, 0x05AF,
- 0x89D4, 0x3B1C, 0x89D6, 0x3B1D, 0x89DA, 0x19FB, 0x89DC, 0x19FC,
- 0x89DD, 0x19FD, 0x89E3, 0x0572, 0x89E5, 0x3B1E, 0x89E6, 0x09EE,
- 0x89E7, 0x19FE, 0x89F1, 0x3B1F, 0x89F4, 0x19FF, 0x89F8, 0x1A00,
- 0x8A00, 0x0774, 0x8A01, 0x35BC, 0x8A02, 0x0C17, 0x8A03, 0x1A01,
- 0x8A07, 0x3B20, 0x8A08, 0x072D, 0x8A0A, 0x0A1C, 0x8A0C, 0x1A04,
- 0x8A0E, 0x0C7C, 0x8A0F, 0x3B21, 0x8A10, 0x1A03, 0x8A12, 0x21A8,
- 0x8A13, 0x0707, 0x8A15, 0x3B22, 0x8A16, 0x1A02, 0x8A17, 0x0B57,
- 0x8A18, 0x0647, 0x8A1B, 0x1A05, 0x8A1D, 0x1A06, 0x8A1F, 0x09C1,
- 0x8A22, 0x3B23, 0x8A23, 0x0743, 0x8A25, 0x1A07, 0x8A2A, 0x0E5A,
- 0x8A2D, 0x0A83, 0x8A31, 0x0690, 0x8A33, 0x0F01, 0x8A34, 0x0ACC,
- 0x8A36, 0x1A08, 0x8A37, 0x21A9, 0x8A3A, 0x0A0D, 0x8A3B, 0x0BAE,
- 0x8A3C, 0x09C2, 0x8A41, 0x1A09, 0x8A46, 0x1A0C, 0x8A48, 0x1A0D,
- 0x8A4E, 0x3B24, 0x8A50, 0x082E, 0x8A51, 0x0B22, 0x8A52, 0x1A0B,
- 0x8A54, 0x09C3, 0x8A55, 0x0DB0, 0x8A5B, 0x1A0A, 0x8A5E, 0x08BA,
- 0x8A60, 0x04F5, 0x8A62, 0x1A11, 0x8A63, 0x072E, 0x8A66, 0x08BC,
- 0x8A69, 0x08BB, 0x8A6B, 0x0FF3, 0x8A6C, 0x1A10, 0x8A6D, 0x1A0F,
- 0x8A6E, 0x0AA9, 0x8A70, 0x0667, 0x8A71, 0x0FE9, 0x8A72, 0x0598,
- 0x8A73, 0x09C4, 0x8A79, 0x21AA, 0x8A7C, 0x1A0E, 0x8A7F, 0x3B25,
- 0x8A82, 0x1A13, 0x8A84, 0x1A14, 0x8A85, 0x1A12, 0x8A87, 0x078C,
- 0x8A89, 0x0F2A, 0x8A8C, 0x08BD, 0x8A8D, 0x0CDD, 0x8A91, 0x1A17,
- 0x8A93, 0x0A64, 0x8A95, 0x0B80, 0x8A98, 0x0F20, 0x8A9A, 0x1A1A,
- 0x8A9E, 0x07A0, 0x8AA0, 0x0A63, 0x8AA1, 0x1A16, 0x8AA3, 0x1A1B,
- 0x8AA4, 0x07A1, 0x8AA5, 0x1A18, 0x8AA6, 0x1A19, 0x8AA7, 0x21AB,
- 0x8AA8, 0x1A15, 0x8AAA, 0x3638, 0x8AAC, 0x0A86, 0x8AAD, 0x0CA1,
- 0x8AB0, 0x0B6D, 0x8AB2, 0x055D, 0x8AB9, 0x0D84, 0x8ABC, 0x065D,
- 0x8ABE, 0x21AC, 0x8ABF, 0x0BD0, 0x8AC2, 0x1A1E, 0x8AC4, 0x1A1C,
- 0x8AC7, 0x0B8A, 0x8ACB, 0x0A65, 0x8ACC, 0x060E, 0x8ACD, 0x1A1D,
- 0x8ACF, 0x0A21, 0x8AD2, 0x0F92, 0x8AD6, 0x0FE6, 0x8ADA, 0x1A1F,
- 0x8ADB, 0x1A2A, 0x8ADC, 0x0BD1, 0x8ADE, 0x1A29, 0x8ADF, 0x21AD,
- 0x8AE0, 0x1A26, 0x8AE1, 0x1A2E, 0x8AE2, 0x1A27, 0x8AE4, 0x1A23,
- 0x8AE6, 0x0C18, 0x8AE7, 0x1A22, 0x8AEB, 0x1A20, 0x8AED, 0x0F0B,
- 0x8AEE, 0x08BE, 0x8AF1, 0x1A24, 0x8AF3, 0x1A21, 0x8AF4, 0x3B26,
- 0x8AF6, 0x21AF, 0x8AF7, 0x1A28, 0x8AF8, 0x097E, 0x8AFA, 0x0775,
- 0x8AFE, 0x0B5A, 0x8B00, 0x0E73, 0x8B01, 0x04FC, 0x8B02, 0x04A6,
- 0x8B04, 0x0C7D, 0x8B07, 0x1A2C, 0x8B0C, 0x1A2B, 0x8B0E, 0x0CBE,
- 0x8B10, 0x1A30, 0x8B14, 0x1A25, 0x8B16, 0x1A2F, 0x8B17, 0x1A31,
- 0x8B19, 0x0760, 0x8B1A, 0x1A2D, 0x8B1B, 0x07E8, 0x8B1D, 0x0901,
- 0x8B1F, 0x3B27, 0x8B20, 0x1A32, 0x8B21, 0x0F42, 0x8B26, 0x1A35,
- 0x8B28, 0x1A38, 0x8B2B, 0x1A36, 0x8B2C, 0x0DA7, 0x8B33, 0x1A33,
- 0x8B37, 0x3B28, 0x8B39, 0x06D8, 0x8B3E, 0x1A37, 0x8B41, 0x1A39,
- 0x8B43, 0x3B29, 0x8B44, 0x3B2A, 0x8B49, 0x1A3D, 0x8B4C, 0x1A3A,
- 0x8B4E, 0x1A3C, 0x8B4F, 0x1A3B, 0x8B53, 0x21B0, 0x8B54, 0x3B2B,
- 0x8B56, 0x1A3E, 0x8B58, 0x08DD, 0x8B5A, 0x1A40, 0x8B5B, 0x1A3F,
- 0x8B5C, 0x0DDA, 0x8B5F, 0x1A42, 0x8B66, 0x072F, 0x8B6B, 0x1A41,
- 0x8B6C, 0x1A43, 0x8B6F, 0x1A44, 0x8B70, 0x065E, 0x8B71, 0x182E,
- 0x8B72, 0x09E1, 0x8B74, 0x1A45, 0x8B77, 0x07A2, 0x8B7D, 0x1A46,
- 0x8B7F, 0x21B1, 0x8B80, 0x1A47, 0x8B83, 0x088C, 0x8B8A, 0x13D3,
- 0x8B8C, 0x1A48, 0x8B8E, 0x1A49, 0x8B90, 0x093C, 0x8B92, 0x1A4A,
- 0x8B93, 0x1A4B, 0x8B96, 0x1A4C, 0x8B99, 0x1A4D, 0x8B9A, 0x1A4E,
- 0x8B9C, 0x3B2C, 0x8B9E, 0x3B2D, 0x8C37, 0x0B69, 0x8C3A, 0x1A4F,
- 0x8C3F, 0x1A51, 0x8C41, 0x1A50, 0x8C46, 0x0C7E, 0x8C47, 0x3B2E,
- 0x8C48, 0x1A52, 0x8C4A, 0x0E5B, 0x8C4C, 0x1A53, 0x8C4E, 0x1A54,
- 0x8C50, 0x1A55, 0x8C54, 0x3B2F, 0x8C55, 0x1A56, 0x8C5A, 0x0CB2,
- 0x8C61, 0x09C5, 0x8C62, 0x1A57, 0x8C6A, 0x07FD, 0x8C6B, 0x1007,
- 0x8C6C, 0x1A58, 0x8C73, 0x3B30, 0x8C78, 0x1A59, 0x8C79, 0x0DB1,
- 0x8C7A, 0x1A5A, 0x8C7C, 0x1A62, 0x8C82, 0x1A5B, 0x8C85, 0x1A5D,
- 0x8C89, 0x1A5C, 0x8C8A, 0x1A5E, 0x8C8C, 0x0E74, 0x8C8D, 0x1A5F,
- 0x8C8E, 0x1A60, 0x8C94, 0x1A61, 0x8C98, 0x1A63, 0x8C9D, 0x058B,
- 0x8C9E, 0x0C03, 0x8CA0, 0x0DDB, 0x8CA1, 0x0852, 0x8CA2, 0x07E9,
- 0x8CA4, 0x3B31, 0x8CA7, 0x0DC1, 0x8CA8, 0x055F, 0x8CA9, 0x0D62,
- 0x8CAA, 0x1A66, 0x8CAB, 0x060F, 0x8CAC, 0x0A79, 0x8CAD, 0x1A65,
- 0x8CAE, 0x1A6A, 0x8CAF, 0x0BB7, 0x8CB0, 0x0EEF, 0x8CB2, 0x1A68,
- 0x8CB3, 0x1A69, 0x8CB4, 0x0648, 0x8CB6, 0x1A6B, 0x8CB7, 0x0D19,
- 0x8CB8, 0x0B3F, 0x8CBB, 0x0D85, 0x8CBC, 0x0C37, 0x8CBD, 0x1A67,
- 0x8CBF, 0x0E75, 0x8CC0, 0x056C, 0x8CC1, 0x1A6D, 0x8CC2, 0x0FCE,
- 0x8CC3, 0x0BDE, 0x8CC4, 0x0FEB, 0x8CC7, 0x08BF, 0x8CC8, 0x1A6C,
- 0x8CCA, 0x0B11, 0x8CCD, 0x1A7D, 0x8CCE, 0x0AAA, 0x8CD1, 0x0CD0,
- 0x8CD3, 0x0DC2, 0x8CD9, 0x3B32, 0x8CDA, 0x1A70, 0x8CDB, 0x088D,
- 0x8CDC, 0x08C0, 0x8CDE, 0x09C6, 0x8CE0, 0x0D1B, 0x8CE1, 0x3B33,
- 0x8CE2, 0x0761, 0x8CE3, 0x1A6F, 0x8CE4, 0x1A6E, 0x8CE6, 0x0DDC,
- 0x8CEA, 0x08ED, 0x8CED, 0x0C4C, 0x8CF0, 0x21B2, 0x8CF4, 0x21B3,
- 0x8CF8, 0x3B34, 0x8CFA, 0x1A72, 0x8CFB, 0x1A73, 0x8CFC, 0x07EA,
- 0x8CFD, 0x1A71, 0x8CFE, 0x3B35, 0x8D04, 0x1A74, 0x8D05, 0x1A75,
- 0x8D07, 0x1A77, 0x8D08, 0x0B03, 0x8D0A, 0x1A76, 0x8D0B, 0x0622,
- 0x8D0D, 0x1A79, 0x8D0F, 0x1A78, 0x8D10, 0x1A7A, 0x8D12, 0x21B4,
- 0x8D13, 0x1A7C, 0x8D14, 0x1A7E, 0x8D16, 0x1A7F, 0x8D1B, 0x3B36,
- 0x8D64, 0x0A7A, 0x8D66, 0x08FB, 0x8D67, 0x1A80, 0x8D69, 0x3B37,
- 0x8D6B, 0x05B0, 0x8D6C, 0x3B38, 0x8D6D, 0x1A81, 0x8D70, 0x0AF8,
- 0x8D71, 0x1A82, 0x8D73, 0x1A83, 0x8D74, 0x0DDD, 0x8D76, 0x21B5,
- 0x8D77, 0x0649, 0x8D81, 0x1A84, 0x8D84, 0x3B39, 0x8D85, 0x0BD2,
- 0x8D8A, 0x04FD, 0x8D8D, 0x3B3A, 0x8D95, 0x3B3B, 0x8D99, 0x1A85,
- 0x8DA3, 0x091D, 0x8DA6, 0x3B3C, 0x8DA8, 0x0A3C, 0x8DB3, 0x0B0D,
- 0x8DBA, 0x1A88, 0x8DBE, 0x1A87, 0x8DC2, 0x1A86, 0x8DC6, 0x3B3D,
- 0x8DCB, 0x1A8E, 0x8DCC, 0x1A8C, 0x8DCE, 0x3B3E, 0x8DCF, 0x1A89,
- 0x8DD6, 0x1A8B, 0x8DDA, 0x1A8A, 0x8DDB, 0x1A8D, 0x8DDD, 0x0691,
- 0x8DDF, 0x1A91, 0x8DE1, 0x0A7B, 0x8DE3, 0x1A92, 0x8DE4, 0x3B3F,
- 0x8DE8, 0x078D, 0x8DEA, 0x1A8F, 0x8DEB, 0x1A90, 0x8DEC, 0x3B40,
- 0x8DEF, 0x0FCF, 0x8DF3, 0x0BD3, 0x8DF5, 0x0AAB, 0x8DFC, 0x1A93,
- 0x8DFF, 0x1A96, 0x8E08, 0x1A94, 0x8E09, 0x1A95, 0x8E0A, 0x0F43,
- 0x8E0F, 0x0C7F, 0x8E10, 0x1A99, 0x8E1D, 0x1A97, 0x8E1E, 0x1A98,
- 0x8E1F, 0x1A9A, 0x8E20, 0x3B41, 0x8E2A, 0x1AA8, 0x8E30, 0x1A9D,
- 0x8E34, 0x1A9E, 0x8E35, 0x1A9C, 0x8E42, 0x1A9B, 0x8E44, 0x0C19,
- 0x8E47, 0x1AA0, 0x8E48, 0x1AA4, 0x8E49, 0x1AA1, 0x8E4A, 0x1A9F,
- 0x8E4B, 0x3B42, 0x8E4C, 0x1AA2, 0x8E50, 0x1AA3, 0x8E55, 0x1AAA,
- 0x8E59, 0x1AA5, 0x8E5F, 0x0A7C, 0x8E60, 0x1AA7, 0x8E63, 0x1AA9,
- 0x8E64, 0x1AA6, 0x8E6C, 0x3B43, 0x8E70, 0x3B44, 0x8E72, 0x1AAC,
- 0x8E74, 0x093D, 0x8E76, 0x1AAB, 0x8E7A, 0x3B45, 0x8E7C, 0x1AAD,
- 0x8E81, 0x1AAE, 0x8E84, 0x1AB1, 0x8E85, 0x1AB0, 0x8E87, 0x1AAF,
- 0x8E8A, 0x1AB3, 0x8E8B, 0x1AB2, 0x8E8D, 0x0F02, 0x8E91, 0x1AB5,
- 0x8E92, 0x3B46, 0x8E93, 0x1AB4, 0x8E94, 0x1AB6, 0x8E99, 0x1AB7,
- 0x8EA1, 0x1AB9, 0x8EAA, 0x1AB8, 0x8EAB, 0x0A0E, 0x8EAC, 0x1ABA,
- 0x8EAE, 0x3B47, 0x8EAF, 0x06E5, 0x8EB0, 0x1ABB, 0x8EB1, 0x1ABD,
- 0x8EB3, 0x3B48, 0x8EB6, 0x3703, 0x8EBE, 0x1ABE, 0x8EC0, 0x1DEF,
- 0x8EC5, 0x1ABF, 0x8EC6, 0x1ABC, 0x8EC8, 0x1AC0, 0x8ECA, 0x0902,
- 0x8ECB, 0x1AC1, 0x8ECC, 0x064A, 0x8ECD, 0x0709, 0x8ECF, 0x21B7,
- 0x8ED1, 0x3B49, 0x8ED2, 0x0762, 0x8ED4, 0x3B4A, 0x8EDB, 0x1AC2,
- 0x8EDF, 0x0CC8, 0x8EE2, 0x0C38, 0x8EE3, 0x1AC3, 0x8EEB, 0x1AC6,
- 0x8EF8, 0x08E0, 0x8EF9, 0x3B4B, 0x8EFB, 0x1AC5, 0x8EFC, 0x1AC4,
- 0x8EFD, 0x0730, 0x8EFE, 0x1AC7, 0x8F03, 0x05B1, 0x8F05, 0x1AC9,
- 0x8F09, 0x084C, 0x8F0A, 0x1AC8, 0x8F0C, 0x1AD1, 0x8F12, 0x1ACB,
- 0x8F13, 0x1ACD, 0x8F14, 0x0E35, 0x8F15, 0x1ACA, 0x8F17, 0x3B4C,
- 0x8F19, 0x1ACC, 0x8F1B, 0x1AD0, 0x8F1C, 0x1ACE, 0x8F1D, 0x064B,
- 0x8F1F, 0x1ACF, 0x8F26, 0x1AD2, 0x8F29, 0x0D10, 0x8F2A, 0x0FA0,
- 0x8F2F, 0x093E, 0x8F33, 0x1AD3, 0x8F36, 0x3B4D, 0x8F38, 0x0F0C,
- 0x8F39, 0x1AD5, 0x8F3B, 0x1AD4, 0x8F3E, 0x1AD8, 0x8F3F, 0x0F2B,
- 0x8F42, 0x1AD7, 0x8F44, 0x05CB, 0x8F45, 0x1AD6, 0x8F46, 0x1ADB,
- 0x8F49, 0x1ADA, 0x8F4C, 0x1AD9, 0x8F4D, 0x0C2C, 0x8F4E, 0x1ADC,
- 0x8F57, 0x1ADD, 0x8F5C, 0x1ADE, 0x8F5F, 0x07FE, 0x8F61, 0x06FB,
- 0x8F62, 0x1ADF, 0x8F63, 0x1AE0, 0x8F64, 0x1AE1, 0x8F9B, 0x0A0F,
- 0x8F9C, 0x1AE2, 0x8F9E, 0x08D9, 0x8F9F, 0x1AE3, 0x8FA3, 0x1AE4,
- 0x8FA6, 0x3B4E, 0x8FA7, 0x10B6, 0x8FA8, 0x10B5, 0x8FAD, 0x1AE5,
- 0x8FAE, 0x17FF, 0x8FAF, 0x1AE6, 0x8FB0, 0x0B62, 0x8FB1, 0x09F1,
- 0x8FB2, 0x0CF6, 0x8FB5, 0x3B4F, 0x8FB6, 0x3B50, 0x8FB7, 0x1AE7,
- 0x8FBA, 0x0E25, 0x8FBB, 0x0BF0, 0x8FBC, 0x0810, 0x8FBF, 0x0B67,
- 0x8FC2, 0x04CC, 0x8FC4, 0x0EA6, 0x8FC5, 0x0A1D, 0x8FC6, 0x3B51,
- 0x8FC8, 0x3799, 0x8FCE, 0x0734, 0x8FD1, 0x06D9, 0x8FD4, 0x0E26,
- 0x8FDA, 0x1AE8, 0x8FE0, 0x3B52, 0x8FE2, 0x1AEA, 0x8FE4, 0x3B53,
- 0x8FE5, 0x1AE9, 0x8FE6, 0x0560, 0x8FE9, 0x0CCE, 0x8FEA, 0x1AEB,
- 0x8FEB, 0x0D2D, 0x8FED, 0x0C2D, 0x8FEF, 0x1AEC, 0x8FF0, 0x095C,
- 0x8FF4, 0x1AEE, 0x8FF6, 0x3B54, 0x8FF7, 0x0ECE, 0x8FF8, 0x1AFD,
- 0x8FF9, 0x1AF0, 0x8FFA, 0x1AF1, 0x8FFD, 0x0BE5, 0x9000, 0x0B40,
- 0x9001, 0x0AF9, 0x9002, 0x3B55, 0x9003, 0x0C80, 0x9005, 0x1AEF,
- 0x9006, 0x066F, 0x900B, 0x1AF8, 0x900D, 0x1AF5, 0x900E, 0x1B02,
- 0x900F, 0x0C81, 0x9010, 0x0B9E, 0x9011, 0x1AF2, 0x9013, 0x0C1A,
- 0x9014, 0x0C4D, 0x9015, 0x1AF3, 0x9016, 0x1AF7, 0x9017, 0x0A26,
- 0x9019, 0x0D1D, 0x901A, 0x0BE8, 0x901D, 0x0A66, 0x901E, 0x1AF6,
- 0x901F, 0x0B0E, 0x9020, 0x0B04, 0x9021, 0x1AF4, 0x9022, 0x046D,
- 0x9023, 0x0FC8, 0x9027, 0x1AF9, 0x902C, 0x3B56, 0x902E, 0x0B41,
- 0x9031, 0x093F, 0x9032, 0x0A10, 0x9035, 0x1AFB, 0x9036, 0x1AFA,
- 0x9038, 0x04B3, 0x9039, 0x1AFC, 0x903C, 0x0DA1, 0x903E, 0x1B04,
- 0x9041, 0x0CB3, 0x9042, 0x0A31, 0x9044, 0x3B57, 0x9045, 0x0B97,
- 0x9047, 0x06F0, 0x9049, 0x1B03, 0x904A, 0x0F21, 0x904B, 0x04E1,
- 0x904D, 0x0E27, 0x904E, 0x0561, 0x904F, 0x1AFE, 0x9050, 0x1AFF,
- 0x9051, 0x1B00, 0x9052, 0x1B01, 0x9053, 0x0C93, 0x9054, 0x0B61,
- 0x9055, 0x04A7, 0x9056, 0x1B05, 0x9058, 0x1B06, 0x9059, 0x1D34,
- 0x905C, 0x0B1D, 0x905E, 0x1B07, 0x9060, 0x0515, 0x9061, 0x0ACE,
- 0x9063, 0x0763, 0x9065, 0x0F44, 0x9067, 0x21BA, 0x9068, 0x1B08,
- 0x9069, 0x0C26, 0x906D, 0x0AFA, 0x906E, 0x0903, 0x906F, 0x1B09,
- 0x9072, 0x1B0C, 0x9075, 0x096F, 0x9076, 0x1B0A, 0x9077, 0x0AAD,
- 0x9078, 0x0AAC, 0x907A, 0x04A8, 0x907C, 0x0F93, 0x907D, 0x1B0E,
- 0x907F, 0x0D86, 0x9080, 0x1B10, 0x9081, 0x1B0F, 0x9082, 0x1B0D,
- 0x9083, 0x1737, 0x9084, 0x0610, 0x9087, 0x1AED, 0x9088, 0x3B58,
- 0x9089, 0x1B12, 0x908A, 0x1B11, 0x908F, 0x1B13, 0x9091, 0x0F22,
- 0x9095, 0x3B59, 0x9099, 0x3B5A, 0x909B, 0x3B5B, 0x90A2, 0x3B5C,
- 0x90A3, 0x0CB9, 0x90A6, 0x0E5C, 0x90A8, 0x1B14, 0x90AA, 0x0905,
- 0x90AF, 0x1B15, 0x90B1, 0x1B16, 0x90B4, 0x3B5D, 0x90B5, 0x1B17,
- 0x90B8, 0x0C1B, 0x90C1, 0x04AE, 0x90CA, 0x07EB, 0x90CE, 0x0FE0,
- 0x90D7, 0x3B5E, 0x90DB, 0x1B1B, 0x90DD, 0x3B5F, 0x90DE, 0x21BB,
- 0x90E1, 0x070A, 0x90E2, 0x1B18, 0x90E4, 0x1B19, 0x90E8, 0x0DE6,
- 0x90ED, 0x05B2, 0x90F4, 0x3B60, 0x90F5, 0x0F23, 0x90F7, 0x06B7,
- 0x90FD, 0x0C4E, 0x9102, 0x1B1C, 0x9112, 0x1B1D, 0x9115, 0x21BD,
- 0x9117, 0x3B61, 0x9119, 0x1B1E, 0x911C, 0x3B62, 0x9127, 0x21BE,
- 0x912D, 0x0C1C, 0x9130, 0x1B20, 0x9131, 0x3B63, 0x9132, 0x1B1F,
- 0x913A, 0x3B64, 0x913D, 0x3B65, 0x9148, 0x3B66, 0x9149, 0x0CAB,
- 0x914A, 0x1B21, 0x914B, 0x0940, 0x914C, 0x090C, 0x914D, 0x0D11,
- 0x914E, 0x0BAF, 0x9152, 0x091E, 0x9154, 0x0A32, 0x9156, 0x1B22,
- 0x9158, 0x1B23, 0x915B, 0x3B67, 0x9161, 0x3B68, 0x9162, 0x0A23,
- 0x9163, 0x1B24, 0x9164, 0x3B69, 0x9165, 0x1B25, 0x9169, 0x1B26,
- 0x916A, 0x0F59, 0x916C, 0x0941, 0x9172, 0x1B28, 0x9173, 0x1B27,
- 0x9175, 0x07EC, 0x9177, 0x0805, 0x9178, 0x088E, 0x9182, 0x1B2B,
- 0x9187, 0x0970, 0x9189, 0x1B2A, 0x918B, 0x1B29, 0x918D, 0x0B49,
- 0x918E, 0x3B6A, 0x9190, 0x07A3, 0x9192, 0x0A67, 0x9197, 0x0D44,
- 0x919C, 0x0943, 0x919E, 0x3B6B, 0x91A2, 0x1B2C, 0x91A4, 0x09C7,
- 0x91A8, 0x3B6C, 0x91AA, 0x1B2F, 0x91AB, 0x1B2D, 0x91AC, 0x1E1B,
- 0x91AD, 0x3B6D, 0x91AE, 0x3B6E, 0x91AF, 0x1B2E, 0x91B1, 0x1E61,
- 0x91B2, 0x3B6F, 0x91B4, 0x1B31, 0x91B5, 0x1B30, 0x91B8, 0x09E2,
- 0x91BA, 0x1B32, 0x91BC, 0x3B70, 0x91C0, 0x1B33, 0x91C1, 0x1B34,
- 0x91C6, 0x0D64, 0x91C7, 0x0843, 0x91C8, 0x090D, 0x91C9, 0x1B35,
- 0x91CB, 0x1B36, 0x91CC, 0x0F6C, 0x91CD, 0x094F, 0x91CE, 0x0EFA,
- 0x91CF, 0x0F94, 0x91D0, 0x1B37, 0x91D1, 0x06DA, 0x91D6, 0x1B38,
- 0x91D7, 0x21C0, 0x91D8, 0x0C1D, 0x91DA, 0x21BF, 0x91DB, 0x1B3B,
- 0x91DC, 0x05D6, 0x91DD, 0x0A11, 0x91DE, 0x21C1, 0x91DF, 0x1B39,
- 0x91E1, 0x1B3A, 0x91E3, 0x0BFC, 0x91E4, 0x21C4, 0x91E5, 0x21C5,
- 0x91E6, 0x0E83, 0x91E7, 0x06F4, 0x91ED, 0x21C2, 0x91EE, 0x21C3,
- 0x91F0, 0x3B71, 0x91F5, 0x1B3D, 0x91F6, 0x1B3E, 0x91F7, 0x3B72,
- 0x91FB, 0x3B73, 0x91FC, 0x1B3C, 0x91FF, 0x1B40, 0x9206, 0x21C6,
- 0x9207, 0x3B74, 0x920A, 0x21C8, 0x920D, 0x0CB7, 0x920E, 0x05A1,
- 0x9210, 0x21C7, 0x9211, 0x1B44, 0x9214, 0x1B41, 0x9215, 0x1B43,
- 0x921E, 0x1B3F, 0x9228, 0x3B75, 0x9229, 0x1B8A, 0x922C, 0x1B42,
- 0x9233, 0x3B76, 0x9234, 0x0FB3, 0x9237, 0x078E, 0x9238, 0x3B77,
- 0x9239, 0x21CF, 0x923A, 0x21C9, 0x923C, 0x21CB, 0x923F, 0x1B4C,
- 0x9240, 0x21CA, 0x9243, 0x3B78, 0x9244, 0x0C2E, 0x9245, 0x1B47,
- 0x9247, 0x3B79, 0x9248, 0x1B4A, 0x9249, 0x1B48, 0x924B, 0x1B4D,
- 0x924E, 0x21CC, 0x924F, 0x3B7A, 0x9250, 0x1B4E, 0x9251, 0x21CE,
- 0x9257, 0x1B46, 0x9259, 0x21CD, 0x925A, 0x1B53, 0x925B, 0x0516,
- 0x925E, 0x1B45, 0x9260, 0x3B7B, 0x9262, 0x0D41, 0x9264, 0x1B49,
- 0x9266, 0x09C8, 0x9267, 0x21D0, 0x9271, 0x07ED, 0x9277, 0x21D2,
- 0x9278, 0x21D3, 0x927E, 0x0E76, 0x9280, 0x06DC, 0x9283, 0x0950,
- 0x9285, 0x0C94, 0x9288, 0x20AA, 0x9291, 0x0AAF, 0x9293, 0x1B51,
- 0x9295, 0x1B4B, 0x9296, 0x1B50, 0x9298, 0x0ECF, 0x929A, 0x0BD4,
- 0x929B, 0x1B52, 0x929C, 0x1B4F, 0x92A7, 0x21D1, 0x92AD, 0x0AAE,
- 0x92B3, 0x3554, 0x92B7, 0x1B56, 0x92B9, 0x1B55, 0x92C2, 0x3B7C,
- 0x92CB, 0x3B7D, 0x92CC, 0x3B7E, 0x92CF, 0x1B54, 0x92D0, 0x21D7,
- 0x92D2, 0x0E5D, 0x92D3, 0x21DB, 0x92D5, 0x21D9, 0x92D7, 0x21D5,
- 0x92D9, 0x21D6, 0x92DF, 0x3B7F, 0x92E0, 0x21DA, 0x92E4, 0x0985,
- 0x92E7, 0x21D4, 0x92E9, 0x1B57, 0x92EA, 0x0E2F, 0x92ED, 0x04F6,
- 0x92F2, 0x0DB8, 0x92F3, 0x0BB0, 0x92F8, 0x0692, 0x92F9, 0x20B0,
- 0x92FA, 0x1B59, 0x92FB, 0x21DE, 0x92FC, 0x07EF, 0x92FF, 0x21E1,
- 0x9302, 0x21E3, 0x9304, 0x345A, 0x9306, 0x087A, 0x930D, 0x3B80,
- 0x930F, 0x1B58, 0x9310, 0x0A33, 0x9315, 0x3B81, 0x9318, 0x0A34,
- 0x9319, 0x1B5C, 0x931A, 0x1B5E, 0x931D, 0x21E2, 0x931E, 0x21E0,
- 0x931F, 0x3B82, 0x9320, 0x09E3, 0x9321, 0x21DD, 0x9322, 0x1B5D,
- 0x9323, 0x1B5F, 0x9325, 0x21DC, 0x9326, 0x06CB, 0x9327, 0x3B83,
- 0x9328, 0x0DB7, 0x932B, 0x090E, 0x932C, 0x0FC9, 0x932E, 0x1B5B,
- 0x932F, 0x0868, 0x9332, 0x0FE5, 0x9335, 0x1B61, 0x933A, 0x1B60,
- 0x933B, 0x1B62, 0x9344, 0x1B5A, 0x9347, 0x3B84, 0x9348, 0x20A9,
- 0x934A, 0x3458, 0x934B, 0x0CC1, 0x934D, 0x0C4F, 0x9352, 0x3B85,
- 0x9354, 0x0BF3, 0x9356, 0x1B67, 0x9357, 0x21E5, 0x935B, 0x0B81,
- 0x935C, 0x1B63, 0x9360, 0x1B64, 0x9365, 0x3B86, 0x936A, 0x3B87,
- 0x936C, 0x0703, 0x936D, 0x3B88, 0x936E, 0x1B66, 0x9370, 0x21E4,
- 0x9375, 0x0764, 0x937C, 0x1B65, 0x937E, 0x09C9, 0x938C, 0x05D7,
- 0x9394, 0x1B6B, 0x9396, 0x082F, 0x9397, 0x0AFB, 0x939A, 0x0BE6,
- 0x939B, 0x3B89, 0x93A4, 0x21E6, 0x93A7, 0x0599, 0x93A9, 0x3B8B,
- 0x93AC, 0x1B69, 0x93AD, 0x1B6A, 0x93AE, 0x0BDF, 0x93B0, 0x1B68,
- 0x93B9, 0x1B6C, 0x93BA, 0x3B8A, 0x93C1, 0x3B8C, 0x93C3, 0x1B72,
- 0x93C6, 0x21E7, 0x93C8, 0x1B75, 0x93CA, 0x3B8D, 0x93D0, 0x1B74,
- 0x93D1, 0x0C27, 0x93D6, 0x1B6D, 0x93D7, 0x1B6E, 0x93D8, 0x1B71,
- 0x93DD, 0x1B73, 0x93DE, 0x21E8, 0x93E1, 0x06B8, 0x93E2, 0x3B8E,
- 0x93E4, 0x1B76, 0x93E5, 0x1B70, 0x93E8, 0x1B6F, 0x93F8, 0x21E9,
- 0x93FA, 0x3B8F, 0x93FD, 0x3B90, 0x9403, 0x1B7A, 0x9407, 0x1B7B,
- 0x940F, 0x3B91, 0x9410, 0x1B7C, 0x9413, 0x1B79, 0x9414, 0x1B78,
- 0x9418, 0x09CA, 0x9419, 0x0C82, 0x941A, 0x1B77, 0x9421, 0x1B80,
- 0x942B, 0x1B7E, 0x9431, 0x21EA, 0x9434, 0x3B92, 0x9435, 0x1B7F,
- 0x9436, 0x1B7D, 0x9438, 0x0B58, 0x943A, 0x1B81, 0x943F, 0x3B93,
- 0x9441, 0x1B82, 0x9444, 0x1B84, 0x9445, 0x21EB, 0x9448, 0x21EC,
- 0x9451, 0x0611, 0x9452, 0x1B83, 0x9453, 0x0F06, 0x9455, 0x3B94,
- 0x945A, 0x1B8F, 0x945B, 0x1B85, 0x945E, 0x1B88, 0x9460, 0x1B86,
- 0x9462, 0x1B87, 0x946A, 0x1B89, 0x946B, 0x3B95, 0x9470, 0x1B8B,
- 0x9472, 0x3B96, 0x9475, 0x1B8C, 0x9477, 0x1B8D, 0x947C, 0x1B90,
- 0x947D, 0x1B8E, 0x947E, 0x1B91, 0x947F, 0x1B93, 0x9481, 0x1B92,
- 0x9577, 0x0BD5, 0x9578, 0x3B97, 0x9580, 0x0EF3, 0x9582, 0x1B94,
- 0x9583, 0x0AB0, 0x9587, 0x1B95, 0x9589, 0x0E14, 0x958A, 0x1B96,
- 0x958B, 0x0589, 0x958F, 0x04DE, 0x9591, 0x0613, 0x9592, 0x21ED,
- 0x9593, 0x0612, 0x9594, 0x1B97, 0x9596, 0x1B98, 0x9598, 0x1B99,
- 0x9599, 0x1B9A, 0x95A0, 0x1B9B, 0x95A2, 0x0614, 0x95A3, 0x05B3,
- 0x95A4, 0x07F0, 0x95A5, 0x0D4A, 0x95A6, 0x3B98, 0x95A7, 0x1B9D,
- 0x95A8, 0x1B9C, 0x95A9, 0x3B99, 0x95AB, 0x3B9A, 0x95AD, 0x1B9E,
- 0x95B1, 0x3555, 0x95B2, 0x04FE, 0x95B4, 0x3B9B, 0x95B9, 0x1BA1,
- 0x95BB, 0x1BA0, 0x95BC, 0x1B9F, 0x95BD, 0x3B9C, 0x95BE, 0x1BA2,
- 0x95C3, 0x1BA5, 0x95C7, 0x048B, 0x95CA, 0x1BA3, 0x95CC, 0x1BA7,
- 0x95CD, 0x1BA6, 0x95D4, 0x1BA9, 0x95D5, 0x1BA8, 0x95D6, 0x1BAA,
- 0x95D8, 0x0C86, 0x95DA, 0x3B9D, 0x95DC, 0x1BAB, 0x95E1, 0x1BAC,
- 0x95E2, 0x1BAE, 0x95E5, 0x1BAD, 0x961C, 0x0DDE, 0x961D, 0x3B9E,
- 0x9621, 0x1BAF, 0x9628, 0x1BB0, 0x962A, 0x0855, 0x962E, 0x1BB1,
- 0x962F, 0x1BB2, 0x9632, 0x0E77, 0x963B, 0x0ACD, 0x963F, 0x0468,
- 0x9640, 0x0B2B, 0x9641, 0x3B9F, 0x9642, 0x1BB3, 0x9644, 0x0DDF,
- 0x964B, 0x1BB6, 0x964C, 0x1BB4, 0x964D, 0x07F1, 0x964F, 0x1BB5,
- 0x9650, 0x0776, 0x9658, 0x3BA0, 0x965B, 0x0E15, 0x965C, 0x1BB8,
- 0x965D, 0x1BBA, 0x965E, 0x1BB9, 0x965F, 0x1BBB, 0x9662, 0x04C3,
- 0x9663, 0x0A1E, 0x9664, 0x0986, 0x9665, 0x0615, 0x9666, 0x1BBC,
- 0x966A, 0x0D1C, 0x966C, 0x1BBE, 0x9670, 0x04C4, 0x9672, 0x1BBD,
- 0x9673, 0x0BE0, 0x9675, 0x0F95, 0x9676, 0x0C83, 0x9677, 0x1BB7,
- 0x9678, 0x0F6E, 0x967A, 0x0765, 0x967D, 0x0F45, 0x9684, 0x3BA1,
- 0x9685, 0x06F1, 0x9686, 0x0F7C, 0x9688, 0x06FE, 0x968A, 0x0B42,
- 0x968B, 0x186C, 0x968D, 0x1BBF, 0x968E, 0x058A, 0x968F, 0x0A35,
- 0x9694, 0x05B4, 0x9695, 0x1BC1, 0x9697, 0x1BC2, 0x9698, 0x1BC0,
- 0x9699, 0x073A, 0x969B, 0x084D, 0x969C, 0x09CB, 0x969D, 0x21F0,
- 0x96A0, 0x04C5, 0x96A3, 0x0FA1, 0x96A4, 0x3BA2, 0x96A7, 0x1BC4,
- 0x96A8, 0x1B0B, 0x96A9, 0x3BA3, 0x96AA, 0x1BC3, 0x96AF, 0x21F1,
- 0x96B0, 0x1BC7, 0x96B1, 0x1BC5, 0x96B2, 0x1BC6, 0x96B4, 0x1BC8,
- 0x96B6, 0x1BC9, 0x96B7, 0x0FB4, 0x96B8, 0x1BCA, 0x96B9, 0x1BCB,
- 0x96BB, 0x0A6D, 0x96BC, 0x0D4F, 0x96C0, 0x0A43, 0x96C1, 0x0623,
- 0x96C4, 0x0F24, 0x96C5, 0x056D, 0x96C6, 0x0942, 0x96C7, 0x078F,
- 0x96C9, 0x1BCE, 0x96CB, 0x1BCD, 0x96CC, 0x08C1, 0x96CD, 0x1BCF,
- 0x96CE, 0x1BCC, 0x96D1, 0x0876, 0x96D2, 0x3BA4, 0x96D5, 0x1BD3,
- 0x96D6, 0x1992, 0x96D9, 0x10EB, 0x96DB, 0x0A3D, 0x96DC, 0x1BD1,
- 0x96DE, 0x3BA6, 0x96E2, 0x0F6D, 0x96E3, 0x0CC9, 0x96E8, 0x04CD,
- 0x96E9, 0x3BA7, 0x96EA, 0x0A87, 0x96EB, 0x08E2, 0x96F0, 0x0E07,
- 0x96F1, 0x3BA8, 0x96F2, 0x04E2, 0x96F6, 0x0FB5, 0x96F7, 0x0F55,
- 0x96F9, 0x1BD4, 0x96FB, 0x0C3F, 0x9700, 0x0927, 0x9702, 0x3BA9,
- 0x9704, 0x1BD5, 0x9706, 0x1BD6, 0x9707, 0x0A12, 0x9708, 0x1BD7,
- 0x9709, 0x3BAA, 0x970A, 0x0FB6, 0x970D, 0x1BD2, 0x970E, 0x1BD9,
- 0x970F, 0x1BDB, 0x9711, 0x1BDA, 0x9713, 0x1BD8, 0x9716, 0x1BDC,
- 0x9719, 0x1BDD, 0x971C, 0x0AFC, 0x971E, 0x0562, 0x9724, 0x1BDE,
- 0x9727, 0x0EC4, 0x972A, 0x1BDF, 0x9730, 0x1BE0, 0x9732, 0x0FD0,
- 0x9733, 0x21F2, 0x9738, 0x1414, 0x9739, 0x1BE1, 0x973B, 0x21F3,
- 0x973D, 0x1BE2, 0x973E, 0x1BE3, 0x9742, 0x1BE7, 0x9743, 0x21F4,
- 0x9744, 0x1BE4, 0x9746, 0x1BE5, 0x9748, 0x1BE6, 0x9749, 0x1BE8,
- 0x974D, 0x21F5, 0x974F, 0x21F6, 0x9751, 0x21F7, 0x9752, 0x0A68,
- 0x9755, 0x21F8, 0x9756, 0x0F03, 0x9759, 0x0A69, 0x975A, 0x3BAB,
- 0x975C, 0x1BE9, 0x975E, 0x0D87, 0x9760, 0x1BEA, 0x9761, 0x1D06,
- 0x9762, 0x0ED8, 0x9763, 0x3BAC, 0x9764, 0x1BEB, 0x9766, 0x1BEC,
- 0x9768, 0x1BED, 0x9769, 0x05B5, 0x976B, 0x1BEF, 0x976D, 0x0A1F,
- 0x976E, 0x3BAD, 0x9771, 0x1BF0, 0x9773, 0x3BAE, 0x9774, 0x06FA,
- 0x9779, 0x1BF1, 0x977A, 0x1BF5, 0x977C, 0x1BF3, 0x9781, 0x1BF4,
- 0x9784, 0x05D1, 0x9785, 0x1BF2, 0x9786, 0x1BF6, 0x978B, 0x1BF7,
- 0x978D, 0x048C, 0x978F, 0x1BF8, 0x9790, 0x1BF9, 0x9798, 0x09CC,
- 0x979A, 0x3BAF, 0x979C, 0x1BFA, 0x97A0, 0x0661, 0x97A2, 0x3BB0,
- 0x97A3, 0x1BFD, 0x97A6, 0x1BFC, 0x97A8, 0x1BFB, 0x97AB, 0x1A34,
- 0x97AD, 0x0E2C, 0x97B3, 0x1BFE, 0x97B4, 0x1BFF, 0x97B5, 0x3BB1,
- 0x97B6, 0x3BB2, 0x97C3, 0x1C00, 0x97C6, 0x1C01, 0x97C8, 0x1C02,
- 0x97CB, 0x1C03, 0x97D3, 0x0616, 0x97D9, 0x3BB3, 0x97DC, 0x1C04,
- 0x97DE, 0x3BB4, 0x97ED, 0x1C05, 0x97EE, 0x0CD9, 0x97F2, 0x1C07,
- 0x97F3, 0x053B, 0x97F4, 0x3BB5, 0x97F5, 0x1C0A, 0x97F6, 0x1C09,
- 0x97FB, 0x04C6, 0x97FF, 0x06B9, 0x9801, 0x0E17, 0x9802, 0x0BD6,
- 0x9803, 0x0812, 0x9805, 0x07F2, 0x9806, 0x0971, 0x9808, 0x0A22,
- 0x980A, 0x3BB6, 0x980C, 0x1C0C, 0x980E, 0x3BB7, 0x980F, 0x1C0B,
- 0x9810, 0x0F2C, 0x9811, 0x0624, 0x9812, 0x0D66, 0x9813, 0x0CB4,
- 0x9817, 0x0A42, 0x9818, 0x0F96, 0x981A, 0x0731, 0x981E, 0x3BB8,
- 0x9821, 0x1C0F, 0x9823, 0x3BB9, 0x9824, 0x1C0E, 0x982B, 0x3BBA,
- 0x982C, 0x0E79, 0x982D, 0x0C84, 0x9830, 0x1E73, 0x9834, 0x04F2,
- 0x9837, 0x1C10, 0x9838, 0x1C0D, 0x9839, 0x37B3, 0x983B, 0x0DC3,
- 0x983C, 0x0F54, 0x983D, 0x1C11, 0x983E, 0x3BBB, 0x9846, 0x1C12,
- 0x984B, 0x1C14, 0x984C, 0x0B4A, 0x984D, 0x05B9, 0x984E, 0x05BA,
- 0x984F, 0x1C13, 0x9852, 0x3BBC, 0x9853, 0x3BBD, 0x9854, 0x0625,
- 0x9855, 0x0766, 0x9857, 0x21F9, 0x9858, 0x0626, 0x9859, 0x3BBE,
- 0x985A, 0x1E48, 0x985B, 0x0C39, 0x985E, 0x0FA8, 0x9865, 0x21FA,
- 0x9867, 0x0790, 0x986B, 0x1C15, 0x986C, 0x3BBF, 0x986F, 0x1C16,
- 0x9870, 0x1C17, 0x9871, 0x1C18, 0x9873, 0x1C1A, 0x9874, 0x1C19,
- 0x98A8, 0x0DE9, 0x98AA, 0x1C1B, 0x98AF, 0x1C1C, 0x98B1, 0x1C1D,
- 0x98B6, 0x1C1E, 0x98B8, 0x3BC0, 0x98BA, 0x3BC1, 0x98BF, 0x3BC2,
- 0x98C3, 0x1C20, 0x98C4, 0x1C1F, 0x98C6, 0x1C21, 0x98C8, 0x3BC3,
- 0x98DB, 0x0D88, 0x98DC, 0x1839, 0x98DF, 0x09EF, 0x98E0, 0x3618,
- 0x98E2, 0x064C, 0x98E5, 0x3BC4, 0x98E9, 0x1C22, 0x98EB, 0x1C23,
- 0x98ED, 0x10C1, 0x98EE, 0x14DA, 0x98EF, 0x0D67, 0x98F2, 0x04BF,
- 0x98F4, 0x047F, 0x98FC, 0x08C2, 0x98FD, 0x0E5E, 0x98FE, 0x09E6,
- 0x9903, 0x1C24, 0x9905, 0x0EEB, 0x9909, 0x1C25, 0x990A, 0x0F46,
- 0x990C, 0x04E4, 0x9910, 0x088F, 0x9912, 0x1C26, 0x9913, 0x056E,
- 0x9914, 0x1C27, 0x9918, 0x1C28, 0x991D, 0x1C2A, 0x991E, 0x1C2B,
- 0x9920, 0x1C2D, 0x9921, 0x1C29, 0x9924, 0x1C2C, 0x9927, 0x21FD,
- 0x9928, 0x0617, 0x992C, 0x1C2E, 0x992E, 0x1C2F, 0x9932, 0x3BC5,
- 0x9933, 0x3BC6, 0x993D, 0x1C30, 0x993E, 0x1C31, 0x9940, 0x3BC7,
- 0x9942, 0x1C32, 0x9945, 0x1C34, 0x9949, 0x1C33, 0x994B, 0x1C36,
- 0x994C, 0x1C39, 0x994D, 0x3BC8, 0x9950, 0x1C35, 0x9951, 0x1C37,
- 0x9952, 0x1C38, 0x9955, 0x1C3A, 0x9957, 0x06BA, 0x995C, 0x3BC9,
- 0x995F, 0x3BCA, 0x9996, 0x091F, 0x9997, 0x1C3B, 0x9998, 0x1C3C,
- 0x9999, 0x07F3, 0x999E, 0x21FF, 0x99A5, 0x1C3D, 0x99A8, 0x059C,
- 0x99AC, 0x0D05, 0x99AD, 0x1C3E, 0x99AE, 0x1C3F, 0x99B1, 0x3BCB,
- 0x99B3, 0x0B98, 0x99B4, 0x0CC3, 0x99B9, 0x3BCC, 0x99BA, 0x3BCD,
- 0x99BC, 0x1C40, 0x99C1, 0x0D33, 0x99C4, 0x0B2C, 0x99C5, 0x04FA,
- 0x99C6, 0x06E6, 0x99C8, 0x06E7, 0x99C9, 0x3BCE, 0x99D0, 0x0BB1,
- 0x99D1, 0x1C45, 0x99D2, 0x06E8, 0x99D5, 0x056F, 0x99D8, 0x1C44,
- 0x99DB, 0x1C42, 0x99DD, 0x1C43, 0x99DF, 0x1C41, 0x99E2, 0x1C4F,
- 0x99ED, 0x1C46, 0x99EE, 0x1C47, 0x99F1, 0x1C48, 0x99F2, 0x1C49,
- 0x99F8, 0x1C4B, 0x99FB, 0x1C4A, 0x99FF, 0x0963, 0x9A01, 0x1C4C,
- 0x9A02, 0x3BCF, 0x9A05, 0x1C4E, 0x9A08, 0x37BA, 0x9A0E, 0x064D,
- 0x9A0F, 0x1C4D, 0x9A12, 0x0AFD, 0x9A13, 0x0767, 0x9A16, 0x3BD0,
- 0x9A19, 0x1C50, 0x9A24, 0x3BD1, 0x9A27, 0x3BD2, 0x9A28, 0x0B2D,
- 0x9A2B, 0x1C51, 0x9A2D, 0x3BD3, 0x9A2E, 0x3BD4, 0x9A30, 0x0C85,
- 0x9A36, 0x3BD5, 0x9A37, 0x1C52, 0x9A38, 0x3BD6, 0x9A3E, 0x1C57,
- 0x9A40, 0x1C55, 0x9A42, 0x1C54, 0x9A43, 0x1C56, 0x9A45, 0x1C53,
- 0x9A4A, 0x3BD7, 0x9A4D, 0x1C59, 0x9A4E, 0x2200, 0x9A52, 0x1E2F,
- 0x9A55, 0x1C58, 0x9A56, 0x3BD8, 0x9A57, 0x1C5B, 0x9A5A, 0x06BB,
- 0x9A5B, 0x1C5A, 0x9A5F, 0x1C5C, 0x9A62, 0x1C5D, 0x9A64, 0x1C5F,
- 0x9A65, 0x1C5E, 0x9A69, 0x1C60, 0x9A6A, 0x1C62, 0x9A6B, 0x1C61,
- 0x9AA8, 0x080E, 0x9AAD, 0x1C63, 0x9AB0, 0x1C64, 0x9AB5, 0x3BD9,
- 0x9AB6, 0x3BDA, 0x9AB8, 0x059A, 0x9ABC, 0x1C65, 0x9AC0, 0x1C66,
- 0x9AC4, 0x0A37, 0x9ACF, 0x1C67, 0x9AD1, 0x1C68, 0x9AD3, 0x1C69,
- 0x9AD4, 0x1C6A, 0x9AD8, 0x07F4, 0x9AD9, 0x2201, 0x9ADC, 0x2202,
- 0x9ADE, 0x1C6B, 0x9ADF, 0x1C6C, 0x9AE2, 0x1C6D, 0x9AE3, 0x1C6E,
- 0x9AE6, 0x1C6F, 0x9AEA, 0x0D45, 0x9AEB, 0x1C71, 0x9AED, 0x0D98,
- 0x9AEE, 0x1C72, 0x9AEF, 0x1C70, 0x9AF1, 0x1C74, 0x9AF4, 0x1C73,
- 0x9AF7, 0x1C75, 0x9AF9, 0x3BDB, 0x9AFB, 0x1C76, 0x9B03, 0x3BDC,
- 0x9B06, 0x1C77, 0x9B18, 0x1C78, 0x9B1A, 0x1C79, 0x9B1F, 0x1C7A,
- 0x9B20, 0x3BDD, 0x9B22, 0x1C7B, 0x9B23, 0x1C7C, 0x9B25, 0x1C7D,
- 0x9B27, 0x1C7E, 0x9B28, 0x1C7F, 0x9B29, 0x1C80, 0x9B2A, 0x1C81,
- 0x9B2D, 0x343C, 0x9B2E, 0x1C82, 0x9B2F, 0x1C83, 0x9B31, 0x14D4,
- 0x9B32, 0x1C84, 0x9B33, 0x3BDE, 0x9B34, 0x3BDF, 0x9B3B, 0x17A9,
- 0x9B3C, 0x064E, 0x9B41, 0x057F, 0x9B42, 0x0822, 0x9B43, 0x1C86,
- 0x9B44, 0x1C85, 0x9B45, 0x0EB1, 0x9B4D, 0x1C88, 0x9B4E, 0x1C89,
- 0x9B4F, 0x1C87, 0x9B51, 0x1C8A, 0x9B54, 0x0E90, 0x9B58, 0x1C8B,
- 0x9B5A, 0x0695, 0x9B6F, 0x0FCB, 0x9B72, 0x2204, 0x9B73, 0x3BE0,
- 0x9B74, 0x1C8C, 0x9B75, 0x2203, 0x9B79, 0x3BE1, 0x9B83, 0x1C8E,
- 0x9B8E, 0x0482, 0x9B8F, 0x2205, 0x9B91, 0x1C8F, 0x9B92, 0x0DFB,
- 0x9B93, 0x1C8D, 0x9B96, 0x1C90, 0x9B97, 0x1C91, 0x9B9F, 0x1C92,
- 0x9BA0, 0x1C93, 0x9BA7, 0x3BE2, 0x9BA8, 0x1C94, 0x9BAA, 0x0E9C,
- 0x9BAB, 0x087B, 0x9BAD, 0x086A, 0x9BAE, 0x0AB1, 0x9BB1, 0x2206,
- 0x9BB4, 0x1C95, 0x9BB9, 0x1C98, 0x9BBB, 0x2207, 0x9BC0, 0x1C96,
- 0x9BC1, 0x3BE3, 0x9BC6, 0x1C99, 0x9BC7, 0x3BE4, 0x9BC9, 0x07A5,
- 0x9BCA, 0x1C97, 0x9BCF, 0x1C9A, 0x9BD1, 0x1C9B, 0x9BD2, 0x1C9C,
- 0x9BD4, 0x1CA0, 0x9BD6, 0x0878, 0x9BD7, 0x3BE5, 0x9BDB, 0x0B44,
- 0x9BDF, 0x37BF, 0x9BE1, 0x1CA1, 0x9BE2, 0x1C9E, 0x9BE3, 0x1C9D,
- 0x9BE4, 0x1C9F, 0x9BE7, 0x3BE6, 0x9BE8, 0x0735, 0x9BEB, 0x3BE7,
- 0x9BF0, 0x1CA5, 0x9BF1, 0x1CA4, 0x9BF2, 0x1CA3, 0x9BF5, 0x0477,
- 0x9BF7, 0x3BE8, 0x9BFA, 0x3BE9, 0x9BFD, 0x3BEA, 0x9C00, 0x2208,
- 0x9C04, 0x1CAF, 0x9C06, 0x1CAB, 0x9C08, 0x1CAC, 0x9C09, 0x1CA8,
- 0x9C0A, 0x1CAE, 0x9C0B, 0x3BEB, 0x9C0C, 0x1CAA, 0x9C0D, 0x05C0,
- 0x9C10, 0x0FF2, 0x9C12, 0x1CAD, 0x9C13, 0x1CA9, 0x9C14, 0x1CA7,
- 0x9C15, 0x1CA6, 0x9C1B, 0x1CB1, 0x9C21, 0x1CB4, 0x9C24, 0x1CB3,
- 0x9C25, 0x1CB2, 0x9C27, 0x3BEC, 0x9C2A, 0x3BED, 0x9C2D, 0x0DBB,
- 0x9C2E, 0x1CB0, 0x9C2F, 0x04B7, 0x9C30, 0x1CB5, 0x9C32, 0x1CB7,
- 0x9C36, 0x3BEE, 0x9C39, 0x05CD, 0x9C3A, 0x1CA2, 0x9C3B, 0x04D9,
- 0x9C3E, 0x1CB9, 0x9C41, 0x3BEF, 0x9C46, 0x1CB8, 0x9C47, 0x1CB6,
- 0x9C48, 0x0B6B, 0x9C52, 0x0E9E, 0x9C53, 0x3BF0, 0x9C57, 0x0FA2,
- 0x9C5A, 0x1CBA, 0x9C60, 0x1CBB, 0x9C63, 0x3BF1, 0x9C67, 0x1CBC,
- 0x9C6A, 0x3BF2, 0x9C76, 0x1CBD, 0x9C77, 0x3BF3, 0x9C78, 0x1CBE,
- 0x9CE5, 0x0BD7, 0x9CE7, 0x1CBF, 0x9CE9, 0x0D4B, 0x9CEB, 0x1CC4,
- 0x9CEC, 0x1CC0, 0x9CF0, 0x1CC1, 0x9CF3, 0x0E5F, 0x9CF4, 0x0ED0,
- 0x9CF6, 0x0CA8, 0x9D02, 0x3BF4, 0x9D03, 0x1CC5, 0x9D06, 0x1CC6,
- 0x9D07, 0x0C96, 0x9D08, 0x1CC3, 0x9D09, 0x1CC2, 0x9D0E, 0x052A,
- 0x9D12, 0x1CCE, 0x9D15, 0x1CCD, 0x9D1B, 0x0517, 0x9D1F, 0x1CCB,
- 0x9D23, 0x1CCA, 0x9D26, 0x1CC8, 0x9D28, 0x05D9, 0x9D2A, 0x1CC7,
- 0x9D2B, 0x08DE, 0x9D2C, 0x0529, 0x9D3B, 0x07F5, 0x9D3E, 0x1CD1,
- 0x9D3F, 0x1CD0, 0x9D41, 0x1CCF, 0x9D42, 0x3BF5, 0x9D44, 0x1CCC,
- 0x9D46, 0x1CD2, 0x9D47, 0x3BF6, 0x9D48, 0x1CD3, 0x9D50, 0x1CD8,
- 0x9D51, 0x1CD7, 0x9D59, 0x1CD9, 0x9D5C, 0x04CF, 0x9D5D, 0x1CD4,
- 0x9D5E, 0x1CD5, 0x9D60, 0x0806, 0x9D61, 0x0EC5, 0x9D63, 0x3BF7,
- 0x9D64, 0x1CD6, 0x9D69, 0x3BF8, 0x9D6B, 0x220A, 0x9D6C, 0x0E60,
- 0x9D6F, 0x1CDE, 0x9D70, 0x2209, 0x9D72, 0x1CDA, 0x9D7A, 0x1CDF,
- 0x9D7C, 0x3BF9, 0x9D7E, 0x3BFA, 0x9D87, 0x1CDC, 0x9D89, 0x1CDB,
- 0x9D8D, 0x3BFB, 0x9D8F, 0x0732, 0x9D9A, 0x1CE0, 0x9DA4, 0x1CE1,
- 0x9DA9, 0x1CE2, 0x9DAB, 0x1CDD, 0x9DAF, 0x1CC9, 0x9DB1, 0x3BFC,
- 0x9DB2, 0x1CE3, 0x9DB4, 0x0BFD, 0x9DB8, 0x1CE7, 0x9DBA, 0x1CE8,
- 0x9DBB, 0x1CE6, 0x9DC1, 0x1CE5, 0x9DC2, 0x1CEB, 0x9DC3, 0x3BFD,
- 0x9DC4, 0x1CE4, 0x9DC6, 0x1CE9, 0x9DC7, 0x3BFE, 0x9DCF, 0x1CEA,
- 0x9DD3, 0x1CED, 0x9DD6, 0x3BFF, 0x9DD7, 0x1DDE, 0x9DD9, 0x1CEC,
- 0x9DDF, 0x3C00, 0x9DE6, 0x1CEF, 0x9DEB, 0x3C01, 0x9DED, 0x1CF0,
- 0x9DEF, 0x1CF1, 0x9DF2, 0x0FEF, 0x9DF4, 0x3C02, 0x9DF8, 0x1CEE,
- 0x9DF9, 0x0B4B, 0x9DFA, 0x085D, 0x9DFD, 0x1CF2, 0x9E15, 0x3C03,
- 0x9E19, 0x220C, 0x9E1A, 0x1CF3, 0x9E1B, 0x1CF4, 0x9E1D, 0x3C04,
- 0x9E1E, 0x1CF5, 0x9E75, 0x1CF6, 0x9E78, 0x0768, 0x9E79, 0x1CF7,
- 0x9E7C, 0x1DFD, 0x9E7D, 0x1CF8, 0x9E7F, 0x08DB, 0x9E81, 0x1CF9,
- 0x9E88, 0x1CFA, 0x9E8B, 0x1CFB, 0x9E8C, 0x1CFC, 0x9E91, 0x1CFF,
- 0x9E92, 0x1CFD, 0x9E93, 0x0FE2, 0x9E95, 0x1CFE, 0x9E97, 0x0FB7,
- 0x9E9D, 0x1D00, 0x9E9F, 0x0FA3, 0x9EA4, 0x3C05, 0x9EA5, 0x1D01,
- 0x9EA6, 0x0D34, 0x9EA8, 0x3C06, 0x9EA9, 0x1D02, 0x9EAA, 0x1D04,
- 0x9EAC, 0x3C07, 0x9EAD, 0x1D05, 0x9EB4, 0x1E02, 0x9EB5, 0x1E75,
- 0x9EB8, 0x1D03, 0x9EB9, 0x07FF, 0x9EBA, 0x0ED9, 0x9EBB, 0x0E91,
- 0x9EBC, 0x1284, 0x9EBE, 0x14FF, 0x9EBF, 0x0EA9, 0x9EC3, 0x340B,
- 0x9EC4, 0x052B, 0x9ECC, 0x1D07, 0x9ECD, 0x066A, 0x9ECE, 0x1D08,
- 0x9ECF, 0x1D09, 0x9ED0, 0x1D0A, 0x9ED1, 0x220D, 0x9ED2, 0x0807,
- 0x9ED4, 0x1D0B, 0x9ED8, 0x160D, 0x9ED9, 0x0EE7, 0x9EDB, 0x0B43,
- 0x9EDC, 0x1D0C, 0x9EDD, 0x1D0E, 0x9EDE, 0x1D0D, 0x9EE0, 0x1D0F,
- 0x9EE5, 0x1D10, 0x9EE7, 0x3C08, 0x9EE8, 0x1D11, 0x9EEE, 0x3C09,
- 0x9EEF, 0x1D12, 0x9EF4, 0x1D13, 0x9EF6, 0x1D14, 0x9EF7, 0x1D15,
- 0x9EF9, 0x1D16, 0x9EFB, 0x1D17, 0x9EFC, 0x1D18, 0x9EFD, 0x1D19,
- 0x9F07, 0x1D1A, 0x9F08, 0x1D1B, 0x9F0E, 0x0C1E, 0x9F10, 0x3C0A,
- 0x9F12, 0x3C0B, 0x9F13, 0x0791, 0x9F15, 0x1D1D, 0x9F17, 0x3C0C,
- 0x9F19, 0x3C0D, 0x9F20, 0x0ACF, 0x9F21, 0x1D1E, 0x9F2C, 0x1D1F,
- 0x9F2F, 0x3C0E, 0x9F37, 0x3C0F, 0x9F39, 0x3C10, 0x9F3B, 0x0D93,
- 0x9F3E, 0x1D20, 0x9F41, 0x3C11, 0x9F45, 0x3C12, 0x9F4A, 0x1D21,
- 0x9F4B, 0x170A, 0x9F4E, 0x1A7B, 0x9F4F, 0x1C06, 0x9F52, 0x1D22,
- 0x9F54, 0x1D23, 0x9F57, 0x3C13, 0x9F5F, 0x1D25, 0x9F60, 0x1D26,
- 0x9F61, 0x1D27, 0x9F62, 0x0FB8, 0x9F63, 0x1D24, 0x9F66, 0x1D28,
- 0x9F67, 0x1D29, 0x9F68, 0x3C14, 0x9F6A, 0x1D2B, 0x9F6C, 0x1D2A,
- 0x9F71, 0x3C15, 0x9F72, 0x1D2D, 0x9F75, 0x3C16, 0x9F76, 0x1D2E,
- 0x9F77, 0x1D2C, 0x9F8D, 0x0F7E, 0x9F90, 0x3C17, 0x9F94, 0x3C18,
- 0x9F95, 0x1D2F, 0x9F9C, 0x1D30, 0x9F9D, 0x1727, 0x9FA0, 0x1D31,
- 0x9FA2, 0x3C19, 0xF929, 0x2129, 0xF9DC, 0x21EE, 0xFA0E, 0x20DA,
- 0xFA0F, 0x20E5, 0xFA10, 0x20E6, 0xFA11, 0x20FB, 0xFA12, 0x2121,
- 0xFA13, 0x2131, 0xFA14, 0x2133, 0xFA15, 0x215E, 0xFA16, 0x2164,
- 0xFA17, 0x217B, 0xFA18, 0x2183, 0xFA19, 0x2184, 0xFA1A, 0x2185,
- 0xFA1B, 0x2187, 0xFA1C, 0x218B, 0xFA1D, 0x218E, 0xFA1E, 0x2197,
- 0xFA1F, 0x21A2, 0xFA20, 0x21A4, 0xFA21, 0x21A5, 0xFA22, 0x21AE,
- 0xFA23, 0x21B6, 0xFA24, 0x21B8, 0xFA25, 0x21B9, 0xFA26, 0x21BC,
- 0xFA27, 0x21D8, 0xFA28, 0x21DF, 0xFA29, 0x21EF, 0xFA2A, 0x21FB,
- 0xFA2B, 0x21FC, 0xFA2C, 0x21FE, 0xFA2D, 0x220B, 0xFB00, 0x248E,
- 0xFB01, 0x0070, 0xFB02, 0x0071, 0xFB03, 0x248F, 0xFB04, 0x2490,
- 0xFE30, 0x1EDA, 0xFE31, 0x1ED4, 0xFE32, 0x1ED5, 0xFE33, 0x1ED2,
- 0xFE35, 0x1EDB, 0xFE36, 0x1EDC, 0xFE37, 0x1EE1, 0xFE38, 0x1EE2,
- 0xFE39, 0x1EDD, 0xFE3A, 0x1EDE, 0xFE3B, 0x1EEB, 0xFE3C, 0x1EEC,
- 0xFE3D, 0x1EE5, 0xFE3E, 0x1EE6, 0xFE3F, 0x1EE3, 0xFE40, 0x1EE4,
- 0xFE41, 0x1EE7, 0xFE42, 0x1EE8, 0xFE43, 0x1EE9, 0xFE44, 0x1EEA,
- 0xFF01, 0x0282, 0xFF02, 0x1F47, 0xFF03, 0x02CC, 0xFF04, 0x02C8,
- 0xFF05, 0x02CB, 0xFF06, 0x02CD, 0xFF07, 0x1F46, 0xFF08, 0x02A2,
- 0xFF09, 0x02A3, 0xFF0A, 0x02CE, 0xFF0B, 0x02B4, 0xFF0C, 0x027C,
- 0xFF0D, 0x02B5, 0xFF0E, 0x027D, 0xFF0F, 0x0297, 0xFF10, 0x030C,
- 0xFF11, 0x030D, 0xFF12, 0x030E, 0xFF13, 0x030F, 0xFF14, 0x0310,
- 0xFF15, 0x0311, 0xFF16, 0x0312, 0xFF17, 0x0313, 0xFF18, 0x0314,
- 0xFF19, 0x0315, 0xFF1A, 0x027F, 0xFF1B, 0x0280, 0xFF1C, 0x02BB,
- 0xFF1D, 0x02B9, 0xFF1E, 0x02BC, 0xFF1F, 0x0281, 0xFF20, 0x02CF,
- 0xFF21, 0x0316, 0xFF22, 0x0317, 0xFF23, 0x0318, 0xFF24, 0x0319,
- 0xFF25, 0x031A, 0xFF26, 0x031B, 0xFF27, 0x031C, 0xFF28, 0x031D,
- 0xFF29, 0x031E, 0xFF2A, 0x031F, 0xFF2B, 0x0320, 0xFF2C, 0x0321,
- 0xFF2D, 0x0322, 0xFF2E, 0x0323, 0xFF2F, 0x0324, 0xFF30, 0x0325,
- 0xFF31, 0x0326, 0xFF32, 0x0327, 0xFF33, 0x0328, 0xFF34, 0x0329,
- 0xFF35, 0x032A, 0xFF36, 0x032B, 0xFF37, 0x032C, 0xFF38, 0x032D,
- 0xFF39, 0x032E, 0xFF3A, 0x032F, 0xFF3B, 0x02A6, 0xFF3C, 0x0298,
- 0xFF3D, 0x02A7, 0xFF3E, 0x0288, 0xFF3F, 0x028A, 0xFF40, 0x0286,
- 0xFF41, 0x0330, 0xFF42, 0x0331, 0xFF43, 0x0332, 0xFF44, 0x0333,
- 0xFF45, 0x0334, 0xFF46, 0x0335, 0xFF47, 0x0336, 0xFF48, 0x0337,
- 0xFF49, 0x0338, 0xFF4A, 0x0339, 0xFF4B, 0x033A, 0xFF4C, 0x033B,
- 0xFF4D, 0x033C, 0xFF4E, 0x033D, 0xFF4F, 0x033E, 0xFF50, 0x033F,
- 0xFF51, 0x0340, 0xFF52, 0x0341, 0xFF53, 0x0342, 0xFF54, 0x0343,
- 0xFF55, 0x0344, 0xFF56, 0x0345, 0xFF57, 0x0346, 0xFF58, 0x0347,
- 0xFF59, 0x0348, 0xFF5A, 0x0349, 0xFF5B, 0x02A8, 0xFF5C, 0x029B,
- 0xFF5D, 0x02A9, 0xFF5E, 0x0299, 0xFF61, 0x0147, 0xFF62, 0x0148,
- 0xFF63, 0x0149, 0xFF64, 0x014A, 0xFF65, 0x014B, 0xFF66, 0x014C,
- 0xFF67, 0x014D, 0xFF68, 0x014E, 0xFF69, 0x014F, 0xFF6A, 0x0150,
- 0xFF6B, 0x0151, 0xFF6C, 0x0152, 0xFF6D, 0x0153, 0xFF6E, 0x0154,
- 0xFF6F, 0x0155, 0xFF70, 0x0156, 0xFF71, 0x0157, 0xFF72, 0x0158,
- 0xFF73, 0x0159, 0xFF74, 0x015A, 0xFF75, 0x015B, 0xFF76, 0x015C,
- 0xFF77, 0x015D, 0xFF78, 0x015E, 0xFF79, 0x015F, 0xFF7A, 0x0160,
- 0xFF7B, 0x0161, 0xFF7C, 0x0162, 0xFF7D, 0x0163, 0xFF7E, 0x0164,
- 0xFF7F, 0x0165, 0xFF80, 0x0166, 0xFF81, 0x0167, 0xFF82, 0x0168,
- 0xFF83, 0x0169, 0xFF84, 0x016A, 0xFF85, 0x016B, 0xFF86, 0x016C,
- 0xFF87, 0x016D, 0xFF88, 0x016E, 0xFF89, 0x016F, 0xFF8A, 0x0170,
- 0xFF8B, 0x0171, 0xFF8C, 0x0172, 0xFF8D, 0x0173, 0xFF8E, 0x0174,
- 0xFF8F, 0x0175, 0xFF90, 0x0176, 0xFF91, 0x0177, 0xFF92, 0x0178,
- 0xFF93, 0x0179, 0xFF94, 0x017A, 0xFF95, 0x017B, 0xFF96, 0x017C,
- 0xFF97, 0x017D, 0xFF98, 0x017E, 0xFF99, 0x017F, 0xFF9A, 0x0180,
- 0xFF9B, 0x0181, 0xFF9C, 0x0182, 0xFF9D, 0x0183, 0xFF9E, 0x0184,
- 0xFF9F, 0x0185, 0xFFE0, 0x02C9, 0xFFE1, 0x02CA, 0xFFE2, 0x02EF,
- 0xFFE3, 0x0289, 0xFFE4, 0x1F45, 0xFFE5, 0x02C7, 0xFFE8, 0x0143,
+ 0x0020, 0x0001, 0x0021, 0x0002, 0x0022, 0x0003, 0x0023, 0x0004, 0x0024,
+ 0x0005, 0x0025, 0x0006, 0x0026, 0x0007, 0x0027, 0x0008, 0x0028, 0x0009,
+ 0x0029, 0x000A, 0x002A, 0x000B, 0x002B, 0x000C, 0x002C, 0x000D, 0x002D,
+ 0x000E, 0x002E, 0x000F, 0x002F, 0x0010, 0x0030, 0x0011, 0x0031, 0x0012,
+ 0x0032, 0x0013, 0x0033, 0x0014, 0x0034, 0x0015, 0x0035, 0x0016, 0x0036,
+ 0x0017, 0x0037, 0x0018, 0x0038, 0x0019, 0x0039, 0x001A, 0x003A, 0x001B,
+ 0x003B, 0x001C, 0x003C, 0x001D, 0x003D, 0x001E, 0x003E, 0x001F, 0x003F,
+ 0x0020, 0x0040, 0x0021, 0x0041, 0x0022, 0x0042, 0x0023, 0x0043, 0x0024,
+ 0x0044, 0x0025, 0x0045, 0x0026, 0x0046, 0x0027, 0x0047, 0x0028, 0x0048,
+ 0x0029, 0x0049, 0x002A, 0x004A, 0x002B, 0x004B, 0x002C, 0x004C, 0x002D,
+ 0x004D, 0x002E, 0x004E, 0x002F, 0x004F, 0x0030, 0x0050, 0x0031, 0x0051,
+ 0x0032, 0x0052, 0x0033, 0x0053, 0x0034, 0x0054, 0x0035, 0x0055, 0x0036,
+ 0x0056, 0x0037, 0x0057, 0x0038, 0x0058, 0x0039, 0x0059, 0x003A, 0x005A,
+ 0x003B, 0x005B, 0x003C, 0x005C, 0x0061, 0x005D, 0x003E, 0x005E, 0x003F,
+ 0x005F, 0x0040, 0x0060, 0x0041, 0x0061, 0x0042, 0x0062, 0x0043, 0x0063,
+ 0x0044, 0x0064, 0x0045, 0x0065, 0x0046, 0x0066, 0x0047, 0x0067, 0x0048,
+ 0x0068, 0x0049, 0x0069, 0x004A, 0x006A, 0x004B, 0x006B, 0x004C, 0x006C,
+ 0x004D, 0x006D, 0x004E, 0x006E, 0x004F, 0x006F, 0x0050, 0x0070, 0x0051,
+ 0x0071, 0x0052, 0x0072, 0x0053, 0x0073, 0x0054, 0x0074, 0x0055, 0x0075,
+ 0x0056, 0x0076, 0x0057, 0x0077, 0x0058, 0x0078, 0x0059, 0x0079, 0x005A,
+ 0x007A, 0x005B, 0x007B, 0x005C, 0x007C, 0x005D, 0x007D, 0x005E, 0x007E,
+ 0x005F, 0x00A1, 0x0065, 0x00A2, 0x0066, 0x00A3, 0x0067, 0x00A4, 0x006B,
+ 0x00A5, 0x003D, 0x00A6, 0x0063, 0x00A7, 0x02D0, 0x00A8, 0x0287, 0x00A9,
+ 0x0098, 0x00AA, 0x008C, 0x00AB, 0x006D, 0x00AC, 0x0099, 0x00AD, 0x0097,
+ 0x00AE, 0x009A, 0x00AF, 0x0081, 0x00B0, 0x02C3, 0x00B1, 0x02B6, 0x00B2,
+ 0x009D, 0x00B3, 0x009E, 0x00B4, 0x0285, 0x00B5, 0x009F, 0x00B6, 0x030A,
+ 0x00B7, 0x0075, 0x00B8, 0x0086, 0x00B9, 0x00A0, 0x00BA, 0x0090, 0x00BB,
+ 0x007B, 0x00BC, 0x00A1, 0x00BD, 0x00A2, 0x00BE, 0x00A3, 0x00BF, 0x007E,
+ 0x00C0, 0x00A4, 0x00C1, 0x00A5, 0x00C2, 0x00A6, 0x00C3, 0x00A7, 0x00C4,
+ 0x00A8, 0x00C5, 0x00A9, 0x00C6, 0x008B, 0x00C7, 0x00AA, 0x00C8, 0x00AB,
+ 0x00C9, 0x00AC, 0x00CA, 0x00AD, 0x00CB, 0x00AE, 0x00CC, 0x00AF, 0x00CD,
+ 0x00B0, 0x00CE, 0x00B1, 0x00CF, 0x00B2, 0x00D0, 0x00B3, 0x00D1, 0x00B4,
+ 0x00D2, 0x00B5, 0x00D3, 0x00B6, 0x00D4, 0x00B7, 0x00D5, 0x00B8, 0x00D6,
+ 0x00B9, 0x00D7, 0x02B7, 0x00D8, 0x008E, 0x00D9, 0x00BB, 0x00DA, 0x00BC,
+ 0x00DB, 0x00BD, 0x00DC, 0x00BE, 0x00DD, 0x00BF, 0x00DE, 0x00C0, 0x00DF,
+ 0x0096, 0x00E0, 0x00C1, 0x00E1, 0x00C2, 0x00E2, 0x00C3, 0x00E3, 0x00C4,
+ 0x00E4, 0x00C5, 0x00E5, 0x00C6, 0x00E6, 0x0091, 0x00E7, 0x00C7, 0x00E8,
+ 0x00C8, 0x00E9, 0x00C9, 0x00EA, 0x00CA, 0x00EB, 0x00CB, 0x00EC, 0x00CC,
+ 0x00ED, 0x00CD, 0x00EE, 0x00CE, 0x00EF, 0x00CF, 0x00F0, 0x00D0, 0x00F1,
+ 0x00D1, 0x00F2, 0x00D2, 0x00F3, 0x00D3, 0x00F4, 0x00D4, 0x00F5, 0x00D5,
+ 0x00F6, 0x00D6, 0x00F7, 0x02B8, 0x00F8, 0x0094, 0x00F9, 0x00D8, 0x00FA,
+ 0x00D9, 0x00FB, 0x00DA, 0x00FC, 0x00DB, 0x00FD, 0x00DC, 0x00FE, 0x00DD,
+ 0x00FF, 0x00DE, 0x0100, 0x2496, 0x0101, 0x2491, 0x0112, 0x2499, 0x0113,
+ 0x2494, 0x011A, 0x24B3, 0x011B, 0x24BF, 0x0127, 0x2F3C, 0x0128, 0x24B8,
+ 0x0129, 0x24C4, 0x012A, 0x2497, 0x012B, 0x2492, 0x0131, 0x0092, 0x0141,
+ 0x008D, 0x0142, 0x0093, 0x014B, 0x24DC, 0x014C, 0x249A, 0x014D, 0x2495,
+ 0x0152, 0x008F, 0x0153, 0x0095, 0x0160, 0x00DF, 0x0161, 0x00E3, 0x0168,
+ 0x24BD, 0x0169, 0x24C9, 0x016A, 0x2498, 0x016B, 0x2493, 0x016E, 0x24BC,
+ 0x016F, 0x24C8, 0x0178, 0x00E0, 0x017D, 0x00E1, 0x017E, 0x00E5, 0x01C0,
+ 0x0063, 0x01CD, 0x24B2, 0x01CE, 0x24BE, 0x01CF, 0x24B6, 0x01D0, 0x24C2,
+ 0x01D1, 0x24B9, 0x01D2, 0x24C5, 0x01D3, 0x24BB, 0x01D4, 0x24C7, 0x01FD,
+ 0x24CD, 0x0251, 0x24CA, 0x0254, 0x24CF, 0x0259, 0x24D2, 0x025A, 0x24D5,
+ 0x025B, 0x24D8, 0x0275, 0x24DD, 0x0283, 0x24E2, 0x028C, 0x24DE, 0x0292,
+ 0x24E1, 0x02D0, 0x24E3, 0x0300, 0x0041, 0x0301, 0x007F, 0x0302, 0x0080,
+ 0x0303, 0x005F, 0x0304, 0x0081, 0x0305, 0x00E2, 0x0306, 0x0082, 0x0307,
+ 0x0083, 0x0308, 0x0084, 0x030A, 0x0085, 0x030B, 0x0087, 0x030C, 0x0089,
+ 0x0327, 0x0086, 0x0328, 0x0088, 0x0332, 0x0040, 0x0336, 0x008A, 0x0361,
+ 0x02F6, 0x0391, 0x03F3, 0x0392, 0x03F4, 0x0393, 0x03F5, 0x0394, 0x03F6,
+ 0x0395, 0x03F7, 0x0396, 0x03F8, 0x0397, 0x03F9, 0x0398, 0x03FA, 0x0399,
+ 0x03FB, 0x039A, 0x03FC, 0x039B, 0x03FD, 0x039C, 0x03FE, 0x039D, 0x03FF,
+ 0x039E, 0x0400, 0x039F, 0x0401, 0x03A0, 0x0402, 0x03A1, 0x0403, 0x03A3,
+ 0x0404, 0x03A4, 0x0405, 0x03A5, 0x0406, 0x03A6, 0x0407, 0x03A7, 0x0408,
+ 0x03A8, 0x0409, 0x03A9, 0x040A, 0x03B1, 0x040B, 0x03B2, 0x040C, 0x03B3,
+ 0x040D, 0x03B4, 0x040E, 0x03B5, 0x040F, 0x03B6, 0x0410, 0x03B7, 0x0411,
+ 0x03B8, 0x0412, 0x03B9, 0x0413, 0x03BA, 0x0414, 0x03BB, 0x0415, 0x03BC,
+ 0x0416, 0x03BD, 0x0417, 0x03BE, 0x0418, 0x03BF, 0x0419, 0x03C0, 0x041A,
+ 0x03C1, 0x041B, 0x03C3, 0x041C, 0x03C4, 0x041D, 0x03C5, 0x041E, 0x03C6,
+ 0x041F, 0x03C7, 0x0420, 0x03C8, 0x0421, 0x03C9, 0x0422, 0x03D0, 0x2F3A,
+ 0x03D1, 0x2F40, 0x03DB, 0x2F3F, 0x0401, 0x0429, 0x0410, 0x0423, 0x0411,
+ 0x0424, 0x0412, 0x0425, 0x0413, 0x0426, 0x0414, 0x0427, 0x0415, 0x0428,
+ 0x0416, 0x042A, 0x0417, 0x042B, 0x0418, 0x042C, 0x0419, 0x042D, 0x041A,
+ 0x042E, 0x041B, 0x042F, 0x041C, 0x0430, 0x041D, 0x0431, 0x041E, 0x0432,
+ 0x041F, 0x0433, 0x0420, 0x0434, 0x0421, 0x0435, 0x0422, 0x0436, 0x0423,
+ 0x0437, 0x0424, 0x0438, 0x0425, 0x0439, 0x0426, 0x043A, 0x0427, 0x043B,
+ 0x0428, 0x043C, 0x0429, 0x043D, 0x042A, 0x043E, 0x042B, 0x043F, 0x042C,
+ 0x0440, 0x042D, 0x0441, 0x042E, 0x0442, 0x042F, 0x0443, 0x0430, 0x0444,
+ 0x0431, 0x0445, 0x0432, 0x0446, 0x0433, 0x0447, 0x0434, 0x0448, 0x0435,
+ 0x0449, 0x0436, 0x044B, 0x0437, 0x044C, 0x0438, 0x044D, 0x0439, 0x044E,
+ 0x043A, 0x044F, 0x043B, 0x0450, 0x043C, 0x0451, 0x043D, 0x0452, 0x043E,
+ 0x0453, 0x043F, 0x0454, 0x0440, 0x0455, 0x0441, 0x0456, 0x0442, 0x0457,
+ 0x0443, 0x0458, 0x0444, 0x0459, 0x0445, 0x045A, 0x0446, 0x045B, 0x0447,
+ 0x045C, 0x0448, 0x045D, 0x0449, 0x045E, 0x044A, 0x045F, 0x044B, 0x0460,
+ 0x044C, 0x0461, 0x044D, 0x0462, 0x044E, 0x0463, 0x044F, 0x0464, 0x0451,
+ 0x044A, 0x045B, 0x2F3C, 0x1EBC, 0x24B5, 0x1EBD, 0x24C1, 0x2002, 0x00E7,
+ 0x2003, 0x0279, 0x2010, 0x0296, 0x2011, 0x000E, 0x2012, 0x0072, 0x2013,
+ 0x0072, 0x2014, 0x008A, 0x2015, 0x0295, 0x2016, 0x029A, 0x2018, 0x029E,
+ 0x2019, 0x029F, 0x201A, 0x0078, 0x201C, 0x02A0, 0x201D, 0x02A1, 0x201E,
+ 0x0079, 0x2020, 0x0308, 0x2021, 0x0309, 0x2022, 0x0077, 0x2025, 0x029D,
+ 0x2026, 0x029C, 0x2030, 0x0304, 0x2032, 0x02C4, 0x2033, 0x02C5, 0x2039,
+ 0x006E, 0x203A, 0x006F, 0x203B, 0x02DE, 0x203C, 0x2F4F, 0x203E, 0x0145,
+ 0x2044, 0x0068, 0x2049, 0x2F50, 0x2070, 0x24A1, 0x2074, 0x24A2, 0x2075,
+ 0x24A3, 0x2076, 0x24A4, 0x2077, 0x24A5, 0x2078, 0x24A6, 0x2079, 0x24A7,
+ 0x2080, 0x24A8, 0x2081, 0x24A9, 0x2082, 0x24AA, 0x2083, 0x24AB, 0x2084,
+ 0x24AC, 0x2085, 0x24AD, 0x2086, 0x24AE, 0x2087, 0x24AF, 0x2088, 0x24B0,
+ 0x2089, 0x24B1, 0x20AC, 0x248A, 0x20DD, 0x030B, 0x2100, 0x2E4F, 0x2103,
+ 0x02C6, 0x2105, 0x2E53, 0x2109, 0x2071, 0x210A, 0x2070, 0x210F, 0x2F3C,
+ 0x2113, 0x1F59, 0x2116, 0x1DBA, 0x2121, 0x1F77, 0x2122, 0x00E4, 0x2126,
+ 0x248B, 0x212B, 0x0303, 0x2135, 0x2F39, 0x2153, 0x249F, 0x2154, 0x24A0,
+ 0x215B, 0x249B, 0x215C, 0x249C, 0x215D, 0x249D, 0x215E, 0x249E, 0x2160,
+ 0x1D97, 0x2161, 0x1D98, 0x2162, 0x1D99, 0x2163, 0x1D9A, 0x2164, 0x1D9B,
+ 0x2165, 0x1D9C, 0x2166, 0x1D9D, 0x2167, 0x1D9E, 0x2168, 0x1D9F, 0x2169,
+ 0x1DA0, 0x216A, 0x2021, 0x216B, 0x2022, 0x2170, 0x1F9C, 0x2171, 0x1F9D,
+ 0x2172, 0x1F9E, 0x2173, 0x1F9F, 0x2174, 0x1FA0, 0x2175, 0x1FA1, 0x2176,
+ 0x1FA2, 0x2177, 0x1FA3, 0x2178, 0x1FA4, 0x2179, 0x1FA5, 0x217A, 0x206A,
+ 0x217B, 0x206B, 0x217F, 0x206F, 0x2190, 0x02E1, 0x2191, 0x02E2, 0x2192,
+ 0x02E0, 0x2193, 0x02E3, 0x2194, 0x2FA9, 0x2195, 0x2FB7, 0x2196, 0x2FAC,
+ 0x2197, 0x2FAD, 0x2198, 0x2FAA, 0x2199, 0x2FAB, 0x21C4, 0x2076, 0x21C5,
+ 0x2077, 0x21C6, 0x2075, 0x21CC, 0x2FAE, 0x21D0, 0x2FA8, 0x21D2, 0x02F0,
+ 0x21D4, 0x02F1, 0x21E6, 0x1F4D, 0x21E7, 0x1F4C, 0x21E8, 0x1F4E, 0x21E9,
+ 0x1F4B, 0x2200, 0x02F2, 0x2202, 0x02F7, 0x2203, 0x02F3, 0x2205, 0x2F98,
+ 0x2207, 0x02F8, 0x2208, 0x02E5, 0x220A, 0x2F3B, 0x220B, 0x02E6, 0x2211,
+ 0x1DC9, 0x2212, 0x02B5, 0x2213, 0x2F56, 0x221A, 0x02FD, 0x221D, 0x02FF,
+ 0x221E, 0x02BF, 0x221F, 0x1DCD, 0x2220, 0x02F4, 0x2225, 0x029A, 0x2227,
+ 0x02ED, 0x2228, 0x02EE, 0x2229, 0x02EC, 0x222A, 0x02EB, 0x222B, 0x0301,
+ 0x222C, 0x0302, 0x222D, 0x2003, 0x222E, 0x1DC8, 0x2234, 0x02C0, 0x2235,
+ 0x0300, 0x223C, 0x0299, 0x223D, 0x02FE, 0x2243, 0x2F58, 0x2252, 0x02FA,
+ 0x2260, 0x02BA, 0x2261, 0x02F9, 0x2266, 0x02BD, 0x2267, 0x02BE, 0x226A,
+ 0x02FB, 0x226B, 0x02FC, 0x2272, 0x2F59, 0x2273, 0x2F5A, 0x2282, 0x02E9,
+ 0x2283, 0x02EA, 0x2286, 0x02E7, 0x2287, 0x02E8, 0x2295, 0x2F9C, 0x2296,
+ 0x2F9A, 0x2297, 0x2F9D, 0x2298, 0x2F9B, 0x229D, 0x2F9A, 0x229E, 0x2F9E,
+ 0x22A0, 0x2F99, 0x22A5, 0x02F5, 0x22BF, 0x1DCE, 0x22EE, 0x1ED9, 0x22EF,
+ 0x029C, 0x2300, 0x2F98, 0x2307, 0x2FBB, 0x2312, 0x02F6, 0x244A, 0x2F54,
+ 0x2460, 0x1D83, 0x2461, 0x1D84, 0x2462, 0x1D85, 0x2463, 0x1D86, 0x2464,
+ 0x1D87, 0x2465, 0x1D88, 0x2466, 0x1D89, 0x2467, 0x1D8A, 0x2468, 0x1D8B,
+ 0x2469, 0x1D8C, 0x246A, 0x1D8D, 0x246B, 0x1D8E, 0x246C, 0x1D8F, 0x246D,
+ 0x1D90, 0x246E, 0x1D91, 0x246F, 0x1D92, 0x2470, 0x1D93, 0x2471, 0x1D94,
+ 0x2472, 0x1D95, 0x2473, 0x1D96, 0x2474, 0x1F87, 0x2475, 0x1F88, 0x2476,
+ 0x1F89, 0x2477, 0x1F8A, 0x2478, 0x1F8B, 0x2479, 0x1F8C, 0x247A, 0x1F8D,
+ 0x247B, 0x1F8E, 0x247C, 0x1F8F, 0x247D, 0x1F90, 0x247E, 0x1F91, 0x247F,
+ 0x1F92, 0x2480, 0x1F93, 0x2481, 0x1F94, 0x2482, 0x1F95, 0x2483, 0x1F96,
+ 0x2484, 0x1F97, 0x2485, 0x1F98, 0x2486, 0x1F99, 0x2487, 0x1F9A, 0x2488,
+ 0x1F7E, 0x2489, 0x1F7F, 0x248A, 0x1F80, 0x248B, 0x1F81, 0x248C, 0x1F82,
+ 0x248D, 0x1F83, 0x248E, 0x1F84, 0x248F, 0x1F85, 0x2490, 0x1F86, 0x249C,
+ 0x1FB0, 0x249D, 0x1FB1, 0x249E, 0x1FB2, 0x249F, 0x1FB3, 0x24A0, 0x1FB4,
+ 0x24A1, 0x1FB5, 0x24A2, 0x1FB6, 0x24A3, 0x1FB7, 0x24A4, 0x1FB8, 0x24A5,
+ 0x1FB9, 0x24A6, 0x1FBA, 0x24A7, 0x1FBB, 0x24A8, 0x1FBC, 0x24A9, 0x1FBD,
+ 0x24AA, 0x1FBE, 0x24AB, 0x1FBF, 0x24AC, 0x1FC0, 0x24AD, 0x1FC1, 0x24AE,
+ 0x1FC2, 0x24AF, 0x1FC3, 0x24B0, 0x1FC4, 0x24B1, 0x1FC5, 0x24B2, 0x1FC6,
+ 0x24B3, 0x1FC7, 0x24B4, 0x1FC8, 0x24B5, 0x1FC9, 0x24B6, 0x2863, 0x24B7,
+ 0x2864, 0x24B8, 0x2865, 0x24B9, 0x2866, 0x24BA, 0x2867, 0x24BB, 0x2868,
+ 0x24BC, 0x2869, 0x24BD, 0x286A, 0x24BE, 0x286B, 0x24BF, 0x286C, 0x24C0,
+ 0x286D, 0x24C1, 0x286E, 0x24C2, 0x286F, 0x24C3, 0x2870, 0x24C4, 0x2871,
+ 0x24C5, 0x2872, 0x24C6, 0x2873, 0x24C7, 0x2874, 0x24C8, 0x2875, 0x24C9,
+ 0x2876, 0x24CA, 0x2877, 0x24CB, 0x2878, 0x24CC, 0x2879, 0x24CD, 0x287A,
+ 0x24CE, 0x287B, 0x24CF, 0x287C, 0x24D0, 0x2849, 0x24D1, 0x284A, 0x24D2,
+ 0x284B, 0x24D3, 0x284C, 0x24D4, 0x284D, 0x24D5, 0x284E, 0x24D6, 0x284F,
+ 0x24D7, 0x2850, 0x24D8, 0x2851, 0x24D9, 0x2852, 0x24DA, 0x2853, 0x24DB,
+ 0x2854, 0x24DC, 0x2855, 0x24DD, 0x2856, 0x24DE, 0x2857, 0x24DF, 0x2858,
+ 0x24E0, 0x2859, 0x24E1, 0x285A, 0x24E2, 0x285B, 0x24E3, 0x285C, 0x24E4,
+ 0x285D, 0x24E5, 0x285E, 0x24E6, 0x285F, 0x24E7, 0x2860, 0x24E8, 0x2861,
+ 0x24E9, 0x2862, 0x24EA, 0x2020, 0x2500, 0x1D37, 0x2501, 0x1D38, 0x2502,
+ 0x1D39, 0x2503, 0x1D3A, 0x2504, 0x1D3B, 0x2505, 0x1D3C, 0x2506, 0x1D3D,
+ 0x2507, 0x1D3E, 0x2508, 0x1D3F, 0x2509, 0x1D40, 0x250A, 0x1D41, 0x250B,
+ 0x1D42, 0x250C, 0x1D43, 0x250D, 0x1D44, 0x250E, 0x1D45, 0x250F, 0x1D46,
+ 0x2510, 0x1D47, 0x2511, 0x1D48, 0x2512, 0x1D49, 0x2513, 0x1D4A, 0x2514,
+ 0x1D4B, 0x2515, 0x1D4C, 0x2516, 0x1D4D, 0x2517, 0x1D4E, 0x2518, 0x1D4F,
+ 0x2519, 0x1D50, 0x251A, 0x1D51, 0x251B, 0x1D52, 0x251C, 0x1D53, 0x251D,
+ 0x1D54, 0x251E, 0x1D55, 0x251F, 0x1D56, 0x2520, 0x1D57, 0x2521, 0x1D58,
+ 0x2522, 0x1D59, 0x2523, 0x1D5A, 0x2524, 0x1D5B, 0x2525, 0x1D5C, 0x2526,
+ 0x1D5D, 0x2527, 0x1D5E, 0x2528, 0x1D5F, 0x2529, 0x1D60, 0x252A, 0x1D61,
+ 0x252B, 0x1D62, 0x252C, 0x1D63, 0x252D, 0x1D64, 0x252E, 0x1D65, 0x252F,
+ 0x1D66, 0x2530, 0x1D67, 0x2531, 0x1D68, 0x2532, 0x1D69, 0x2533, 0x1D6A,
+ 0x2534, 0x1D6B, 0x2535, 0x1D6C, 0x2536, 0x1D6D, 0x2537, 0x1D6E, 0x2538,
+ 0x1D6F, 0x2539, 0x1D70, 0x253A, 0x1D71, 0x253B, 0x1D72, 0x253C, 0x1D73,
+ 0x253D, 0x1D74, 0x253E, 0x1D75, 0x253F, 0x1D76, 0x2540, 0x1D77, 0x2541,
+ 0x1D78, 0x2542, 0x1D79, 0x2543, 0x1D7A, 0x2544, 0x1D7B, 0x2545, 0x1D7C,
+ 0x2546, 0x1D7D, 0x2547, 0x1D7E, 0x2548, 0x1D7F, 0x2549, 0x1D80, 0x254A,
+ 0x1D81, 0x254B, 0x1D82, 0x2550, 0x203B, 0x255E, 0x203C, 0x2561, 0x203E,
+ 0x256A, 0x203D, 0x256D, 0x2037, 0x256E, 0x2038, 0x256F, 0x203A, 0x2570,
+ 0x2039, 0x2571, 0x2045, 0x2572, 0x2046, 0x2573, 0x2047, 0x2581, 0x2026,
+ 0x2582, 0x2027, 0x2583, 0x2028, 0x2584, 0x2029, 0x2585, 0x202A, 0x2586,
+ 0x202B, 0x2587, 0x202C, 0x2588, 0x202D, 0x2589, 0x2034, 0x258A, 0x2033,
+ 0x258B, 0x2032, 0x258C, 0x2031, 0x258D, 0x2030, 0x258E, 0x202F, 0x258F,
+ 0x202E, 0x2594, 0x2035, 0x2595, 0x2036, 0x25A0, 0x02D9, 0x25A1, 0x02D8,
+ 0x25A2, 0x1F4F, 0x25AA, 0x2FCF, 0x25AB, 0x2FCD, 0x25B2, 0x02DB, 0x25B3,
+ 0x02DA, 0x25B6, 0x2FA3, 0x25B7, 0x1F4A, 0x25BC, 0x02DD, 0x25BD, 0x02DC,
+ 0x25C0, 0x2FA2, 0x25C1, 0x1F49, 0x25C6, 0x02D7, 0x25C7, 0x02D6, 0x25C9,
+ 0x2012, 0x25CB, 0x02D3, 0x25CC, 0x2906, 0x25CE, 0x02D5, 0x25CF, 0x02D4,
+ 0x25E2, 0x203F, 0x25E3, 0x2040, 0x25E4, 0x2042, 0x25E5, 0x2041, 0x25E6,
+ 0x2FDE, 0x25EF, 0x030B, 0x2600, 0x2017, 0x2601, 0x2018, 0x2602, 0x2019,
+ 0x2603, 0x201A, 0x2605, 0x02D2, 0x2606, 0x02D1, 0x260E, 0x1F78, 0x2612,
+ 0x2F99, 0x261C, 0x201C, 0x261D, 0x201D, 0x261E, 0x201B, 0x261F, 0x201E,
+ 0x2640, 0x02C2, 0x2642, 0x02C1, 0x2660, 0x2013, 0x2661, 0x1F51, 0x2662,
+ 0x1F53, 0x2663, 0x2015, 0x2664, 0x1F52, 0x2665, 0x2014, 0x2666, 0x2016,
+ 0x2667, 0x1F50, 0x2668, 0x2F42, 0x2669, 0x2F43, 0x266A, 0x0307, 0x266C,
+ 0x2F44, 0x266D, 0x0306, 0x266F, 0x0305, 0x2702, 0x2F90, 0x271A, 0x2FD1,
+ 0x2756, 0x2FE3, 0x2776, 0x205E, 0x2777, 0x205F, 0x2778, 0x2060, 0x2779,
+ 0x2061, 0x277A, 0x2062, 0x277B, 0x2063, 0x277C, 0x2064, 0x277D, 0x2065,
+ 0x277E, 0x2066, 0x27A1, 0x200E, 0x2E83, 0x37E1, 0x2E85, 0x3620, 0x2E87,
+ 0x3719, 0x2E89, 0x3814, 0x2E8B, 0x371E, 0x2E8C, 0x3609, 0x2E8D, 0x360A,
+ 0x2E8E, 0x1071, 0x2E8F, 0x388C, 0x2E90, 0x1226, 0x2E92, 0x0EB2, 0x2E93,
+ 0x1283, 0x2E94, 0x12AB, 0x2E95, 0x3C1F, 0x2E96, 0x38C2, 0x2E97, 0x361C,
+ 0x2E98, 0x38E1, 0x2E99, 0x13C3, 0x2E9B, 0x13E1, 0x2E9F, 0x0E3C, 0x2EA0,
+ 0x0EBD, 0x2EA1, 0x3961, 0x2EA2, 0x3962, 0x2EA3, 0x399D, 0x2EA4, 0x3C26,
+ 0x2EA6, 0x374D, 0x2EA8, 0x39BC, 0x2EA9, 0x35A1, 0x2EAA, 0x36AB, 0x2EAB,
+ 0x3A97, 0x2EAC, 0x08D4, 0x2EAD, 0x3A39, 0x2EAE, 0x3662, 0x2EB1, 0x3A98,
+ 0x2EB2, 0x3A97, 0x2EB3, 0x376D, 0x2EB7, 0x36FE, 0x2EB9, 0x3713, 0x2EBC,
+ 0x35B3, 0x2EBD, 0x354E, 0x2EBE, 0x3775, 0x2EBF, 0x3776, 0x2EC0, 0x3777,
+ 0x2EC1, 0x078B, 0x2EC2, 0x3B0A, 0x2EC3, 0x362E, 0x2EC4, 0x0A62, 0x2EC6,
+ 0x3572, 0x2ECA, 0x364A, 0x2ECC, 0x3C2B, 0x2ECD, 0x3B50, 0x2ECF, 0x3B9E,
+ 0x2ED1, 0x0BD5, 0x2ED2, 0x3B97, 0x2ED6, 0x3B9E, 0x2ED7, 0x354D, 0x2ED8,
+ 0x0A68, 0x2EDD, 0x3617, 0x2EDE, 0x3619, 0x2EDF, 0x3618, 0x2EE4, 0x064E,
+ 0x2EE8, 0x0D34, 0x2EE9, 0x052B, 0x2EEB, 0x0A6A, 0x2EED, 0x08C3, 0x2EEF,
+ 0x0F7D, 0x2EF2, 0x064F, 0x2F00, 0x04B0, 0x2F01, 0x20B3, 0x2F02, 0x0FFF,
+ 0x2F03, 0x1001, 0x2F04, 0x0535, 0x2F05, 0x1006, 0x2F06, 0x0CCB, 0x2F07,
+ 0x100E, 0x2F08, 0x0A13, 0x2F09, 0x1070, 0x2F0A, 0x0CD6, 0x2F0B, 0x0D40,
+ 0x2F0C, 0x107B, 0x2F0D, 0x1083, 0x2F0E, 0x1089, 0x2F0F, 0x1093, 0x2F10,
+ 0x1098, 0x2F11, 0x0C5B, 0x2F12, 0x0F97, 0x2F13, 0x10C6, 0x2F14, 0x10CD,
+ 0x2F15, 0x10CE, 0x2F16, 0x10D3, 0x2F17, 0x0947, 0x2F18, 0x0E7C, 0x2F19,
+ 0x10DC, 0x2F1A, 0x10E1, 0x2F1B, 0x10E8, 0x2F1C, 0x0EA2, 0x2F1D, 0x07B1,
+ 0x2F1E, 0x116B, 0x2F1F, 0x0C54, 0x2F20, 0x089C, 0x2F21, 0x11BA, 0x2F22,
+ 0x11BB, 0x2F23, 0x0F26, 0x2F24, 0x0B47, 0x2F25, 0x0981, 0x2F26, 0x08A0,
+ 0x2F27, 0x120E, 0x2F28, 0x0A47, 0x2F29, 0x0996, 0x2F2A, 0x1226, 0x2F2B,
+ 0x1228, 0x2F2C, 0x1232, 0x2F2D, 0x0881, 0x2F2E, 0x126C, 0x2F2F, 0x07BB,
+ 0x2F30, 0x077E, 0x2F31, 0x06CA, 0x2F32, 0x05EF, 0x2F33, 0x1283, 0x2F34,
+ 0x1285, 0x2F35, 0x1299, 0x2F36, 0x129B, 0x2F37, 0x12A0, 0x2F38, 0x0677,
+ 0x2F39, 0x38B9, 0x2F3A, 0x12AF, 0x2F3B, 0x12B1, 0x2F3C, 0x09FA, 0x2F3D,
+ 0x1342, 0x2F3E, 0x0781, 0x2F3F, 0x0916, 0x2F40, 0x08A7, 0x2F41, 0x13C2,
+ 0x2F42, 0x0E08, 0x2F43, 0x0C47, 0x2F44, 0x06CC, 0x2F45, 0x0E4D, 0x2F46,
+ 0x13E0, 0x2F47, 0x0CD4, 0x2F48, 0x140C, 0x2F49, 0x0744, 0x2F4A, 0x0EE6,
+ 0x2F4B, 0x073D, 0x2F4C, 0x08AD, 0x2F4D, 0x14E5, 0x2F4E, 0x14F4, 0x2F4F,
+ 0x14F8, 0x2F50, 0x0D7A, 0x2F51, 0x0EDF, 0x2F52, 0x08AF, 0x2F53, 0x1502,
+ 0x2F54, 0x0A2B, 0x2F55, 0x0550, 0x2F56, 0x0BFA, 0x2F57, 0x0DD5, 0x2F58,
+ 0x15E4, 0x2F59, 0x15E6, 0x2F5A, 0x0E22, 0x2F5B, 0x0567, 0x2F5C, 0x0687,
+ 0x2F5D, 0x0758, 0x2F5E, 0x0770, 0x2F5F, 0x06C4, 0x2F60, 0x04DD, 0x2F61,
+ 0x05E0, 0x2F62, 0x0601, 0x2F63, 0x0A5C, 0x2F64, 0x0F3B, 0x2F65, 0x0C3E,
+ 0x2F66, 0x0D97, 0x2F67, 0x3A00, 0x2F68, 0x1697, 0x2F69, 0x0D28, 0x2F6A,
+ 0x0D7D, 0x2F6B, 0x087C, 0x2F6C, 0x0EE8, 0x2F6D, 0x0EC3, 0x2F6E, 0x0EFC,
+ 0x2F6F, 0x0A74, 0x2F70, 0x08D4, 0x2F71, 0x3A41, 0x2F72, 0x0553, 0x2F73,
+ 0x0740, 0x2F74, 0x0F71, 0x2F75, 0x0B9B, 0x2F76, 0x0E16, 0x2F77, 0x08B3,
+ 0x2F78, 0x0608, 0x2F79, 0x1813, 0x2F7A, 0x0F3D, 0x2F7B, 0x04CB, 0x2F7C,
+ 0x0FDD, 0x2F7D, 0x08D5, 0x2F7E, 0x183D, 0x2F7F, 0x08D6, 0x2F80, 0x1853,
+ 0x2F81, 0x0CD1, 0x2F82, 0x0A09, 0x2F83, 0x08D7, 0x2F84, 0x08B8, 0x2F85,
+ 0x04D3, 0x2F86, 0x0A89, 0x2F87, 0x0AA6, 0x2F88, 0x0938, 0x2F89, 0x0821,
+ 0x2F8A, 0x09ED, 0x2F8B, 0x18B2, 0x2F8C, 0x194F, 0x2F8D, 0x0BAC, 0x2F8E,
+ 0x0742, 0x2F8F, 0x07E6, 0x2F90, 0x04A5, 0x2F91, 0x19EB, 0x2F92, 0x075F,
+ 0x2F93, 0x05AF, 0x2F94, 0x0774, 0x2F95, 0x0B69, 0x2F96, 0x0C7E, 0x2F97,
+ 0x1A56, 0x2F98, 0x1A59, 0x2F99, 0x058B, 0x2F9A, 0x0A7A, 0x2F9B, 0x0AF8,
+ 0x2F9C, 0x0B0D, 0x2F9D, 0x0A0E, 0x2F9E, 0x0902, 0x2F9F, 0x0A0F, 0x2FA0,
+ 0x0B62, 0x2FA1, 0x3B4F, 0x2FA2, 0x0F22, 0x2FA3, 0x0CAB, 0x2FA4, 0x0D64,
+ 0x2FA5, 0x0F6C, 0x2FA6, 0x06DA, 0x2FA7, 0x0BD5, 0x2FA8, 0x0EF3, 0x2FA9,
+ 0x0DDE, 0x2FAA, 0x1BC9, 0x2FAB, 0x1BCB, 0x2FAC, 0x04CD, 0x2FAD, 0x21F7,
+ 0x2FAE, 0x0D87, 0x2FAF, 0x0ED8, 0x2FB0, 0x05B5, 0x2FB1, 0x1C03, 0x2FB2,
+ 0x1C05, 0x2FB3, 0x053B, 0x2FB4, 0x0E17, 0x2FB5, 0x0DE9, 0x2FB6, 0x0D88,
+ 0x2FB7, 0x09EF, 0x2FB8, 0x091F, 0x2FB9, 0x07F3, 0x2FBA, 0x0D05, 0x2FBB,
+ 0x080E, 0x2FBC, 0x07F4, 0x2FBD, 0x1C6C, 0x2FBE, 0x1C7D, 0x2FBF, 0x1C83,
+ 0x2FC0, 0x1C84, 0x2FC1, 0x064E, 0x2FC2, 0x0695, 0x2FC3, 0x0BD7, 0x2FC4,
+ 0x1CF6, 0x2FC5, 0x08DB, 0x2FC6, 0x1D01, 0x2FC7, 0x0E91, 0x2FC8, 0x340B,
+ 0x2FC9, 0x066A, 0x2FCA, 0x0807, 0x2FCB, 0x1D16, 0x2FCC, 0x1D19, 0x2FCD,
+ 0x0C1E, 0x2FCE, 0x0791, 0x2FCF, 0x0ACF, 0x2FD0, 0x0D93, 0x2FD1, 0x1D21,
+ 0x2FD2, 0x1D22, 0x2FD3, 0x0F7E, 0x2FD4, 0x1D30, 0x2FD5, 0x1D31, 0x3000,
+ 0x0279, 0x3001, 0x027A, 0x3002, 0x027B, 0x3003, 0x028F, 0x3004, 0x2074,
+ 0x3005, 0x0291, 0x3006, 0x0292, 0x3007, 0x0293, 0x3008, 0x02AA, 0x3009,
+ 0x02AB, 0x300A, 0x02AC, 0x300B, 0x02AD, 0x300C, 0x02AE, 0x300D, 0x02AF,
+ 0x300E, 0x02B0, 0x300F, 0x02B1, 0x3010, 0x02B2, 0x3011, 0x02B3, 0x3012,
+ 0x02DF, 0x3013, 0x02E4, 0x3014, 0x02A4, 0x3015, 0x02A5, 0x301C, 0x0299,
+ 0x301D, 0x1DB8, 0x301F, 0x1DB9, 0x3020, 0x1F7A, 0x3030, 0x2FBA, 0x3033,
+ 0x2F4C, 0x3034, 0x2F4D, 0x3035, 0x2F4E, 0x3036, 0x1F79, 0x3041, 0x034A,
+ 0x3042, 0x034B, 0x3043, 0x034C, 0x3044, 0x034D, 0x3045, 0x034E, 0x3046,
+ 0x034F, 0x3047, 0x0350, 0x3048, 0x0351, 0x3049, 0x0352, 0x304A, 0x0353,
+ 0x304B, 0x0354, 0x304C, 0x0355, 0x304D, 0x0356, 0x304E, 0x0357, 0x304F,
+ 0x0358, 0x3050, 0x0359, 0x3051, 0x035A, 0x3052, 0x035B, 0x3053, 0x035C,
+ 0x3054, 0x035D, 0x3055, 0x035E, 0x3056, 0x035F, 0x3057, 0x0360, 0x3058,
+ 0x0361, 0x3059, 0x0362, 0x305A, 0x0363, 0x305B, 0x0364, 0x305C, 0x0365,
+ 0x305D, 0x0366, 0x305E, 0x0367, 0x305F, 0x0368, 0x3060, 0x0369, 0x3061,
+ 0x036A, 0x3062, 0x036B, 0x3063, 0x036C, 0x3064, 0x036D, 0x3065, 0x036E,
+ 0x3066, 0x036F, 0x3067, 0x0370, 0x3068, 0x0371, 0x3069, 0x0372, 0x306A,
+ 0x0373, 0x306B, 0x0374, 0x306C, 0x0375, 0x306D, 0x0376, 0x306E, 0x0377,
+ 0x306F, 0x0378, 0x3070, 0x0379, 0x3071, 0x037A, 0x3072, 0x037B, 0x3073,
+ 0x037C, 0x3074, 0x037D, 0x3075, 0x037E, 0x3076, 0x037F, 0x3077, 0x0380,
+ 0x3078, 0x0381, 0x3079, 0x0382, 0x307A, 0x0383, 0x307B, 0x0384, 0x307C,
+ 0x0385, 0x307D, 0x0386, 0x307E, 0x0387, 0x307F, 0x0388, 0x3080, 0x0389,
+ 0x3081, 0x038A, 0x3082, 0x038B, 0x3083, 0x038C, 0x3084, 0x038D, 0x3085,
+ 0x038E, 0x3086, 0x038F, 0x3087, 0x0390, 0x3088, 0x0391, 0x3089, 0x0392,
+ 0x308A, 0x0393, 0x308B, 0x0394, 0x308C, 0x0395, 0x308D, 0x0396, 0x308E,
+ 0x0397, 0x308F, 0x0398, 0x3090, 0x0399, 0x3091, 0x039A, 0x3092, 0x039B,
+ 0x3093, 0x039C, 0x3094, 0x1F16, 0x309B, 0x0283, 0x309C, 0x0284, 0x309D,
+ 0x028D, 0x309E, 0x028E, 0x30A1, 0x039D, 0x30A2, 0x039E, 0x30A3, 0x039F,
+ 0x30A4, 0x03A0, 0x30A5, 0x03A1, 0x30A6, 0x03A2, 0x30A7, 0x03A3, 0x30A8,
+ 0x03A4, 0x30A9, 0x03A5, 0x30AA, 0x03A6, 0x30AB, 0x03A7, 0x30AC, 0x03A8,
+ 0x30AD, 0x03A9, 0x30AE, 0x03AA, 0x30AF, 0x03AB, 0x30B0, 0x03AC, 0x30B1,
+ 0x03AD, 0x30B2, 0x03AE, 0x30B3, 0x03AF, 0x30B4, 0x03B0, 0x30B5, 0x03B1,
+ 0x30B6, 0x03B2, 0x30B7, 0x03B3, 0x30B8, 0x03B4, 0x30B9, 0x03B5, 0x30BA,
+ 0x03B6, 0x30BB, 0x03B7, 0x30BC, 0x03B8, 0x30BD, 0x03B9, 0x30BE, 0x03BA,
+ 0x30BF, 0x03BB, 0x30C0, 0x03BC, 0x30C1, 0x03BD, 0x30C2, 0x03BE, 0x30C3,
+ 0x03BF, 0x30C4, 0x03C0, 0x30C5, 0x03C1, 0x30C6, 0x03C2, 0x30C7, 0x03C3,
+ 0x30C8, 0x03C4, 0x30C9, 0x03C5, 0x30CA, 0x03C6, 0x30CB, 0x03C7, 0x30CC,
+ 0x03C8, 0x30CD, 0x03C9, 0x30CE, 0x03CA, 0x30CF, 0x03CB, 0x30D0, 0x03CC,
+ 0x30D1, 0x03CD, 0x30D2, 0x03CE, 0x30D3, 0x03CF, 0x30D4, 0x03D0, 0x30D5,
+ 0x03D1, 0x30D6, 0x03D2, 0x30D7, 0x03D3, 0x30D8, 0x03D4, 0x30D9, 0x03D5,
+ 0x30DA, 0x03D6, 0x30DB, 0x03D7, 0x30DC, 0x03D8, 0x30DD, 0x03D9, 0x30DE,
+ 0x03DA, 0x30DF, 0x03DB, 0x30E0, 0x03DC, 0x30E1, 0x03DD, 0x30E2, 0x03DE,
+ 0x30E3, 0x03DF, 0x30E4, 0x03E0, 0x30E5, 0x03E1, 0x30E6, 0x03E2, 0x30E7,
+ 0x03E3, 0x30E8, 0x03E4, 0x30E9, 0x03E5, 0x30EA, 0x03E6, 0x30EB, 0x03E7,
+ 0x30EC, 0x03E8, 0x30ED, 0x03E9, 0x30EE, 0x03EA, 0x30EF, 0x03EB, 0x30F0,
+ 0x03EC, 0x30F1, 0x03ED, 0x30F2, 0x03EE, 0x30F3, 0x03EF, 0x30F4, 0x03F0,
+ 0x30F5, 0x03F1, 0x30F6, 0x03F2, 0x30F7, 0x2079, 0x30F8, 0x207A, 0x30F9,
+ 0x207B, 0x30FA, 0x207C, 0x30FB, 0x027E, 0x30FC, 0x0294, 0x30FD, 0x028B,
+ 0x30FE, 0x028C, 0x3220, 0x278E, 0x3221, 0x278F, 0x3222, 0x2790, 0x3223,
+ 0x2791, 0x3224, 0x2792, 0x3225, 0x2793, 0x3226, 0x2794, 0x3227, 0x2795,
+ 0x3228, 0x2796, 0x3229, 0x2797, 0x322A, 0x2006, 0x322B, 0x2007, 0x322C,
+ 0x2008, 0x322D, 0x2009, 0x322E, 0x200A, 0x322F, 0x200B, 0x3230, 0x2005,
+ 0x3231, 0x1DC2, 0x3232, 0x1DC3, 0x3233, 0x1FCF, 0x3234, 0x1FCD, 0x3235,
+ 0x1FD4, 0x3236, 0x1FD3, 0x3237, 0x200C, 0x3238, 0x1FCE, 0x3239, 0x1DC4,
+ 0x323A, 0x1FD7, 0x323B, 0x1FD5, 0x323C, 0x1FD0, 0x323D, 0x1FCB, 0x323E,
+ 0x1FD2, 0x323F, 0x1FCC, 0x3240, 0x1FD6, 0x3241, 0x200D, 0x3242, 0x1FD1,
+ 0x3243, 0x1FCA, 0x3280, 0x28DD, 0x3281, 0x28DE, 0x3282, 0x28DF, 0x3283,
+ 0x28E0, 0x3284, 0x28E1, 0x3285, 0x28E2, 0x3286, 0x28E3, 0x3287, 0x28E4,
+ 0x3288, 0x28E5, 0x3289, 0x28E6, 0x328A, 0x28E8, 0x328B, 0x28E9, 0x328C,
+ 0x28EA, 0x328D, 0x28EB, 0x328E, 0x28EC, 0x328F, 0x28ED, 0x3290, 0x28E7,
+ 0x3291, 0x1FE1, 0x3292, 0x1FE0, 0x3293, 0x1FE2, 0x3294, 0x1FDC, 0x3295,
+ 0x28FF, 0x3296, 0x1FE5, 0x3297, 0x28FC, 0x3298, 0x1FDE, 0x3299, 0x201F,
+ 0x329A, 0x28F9, 0x329B, 0x28F8, 0x329C, 0x28FE, 0x329D, 0x207F, 0x329E,
+ 0x1FFF, 0x329F, 0x28EF, 0x32A0, 0x28F6, 0x32A1, 0x28F7, 0x32A2, 0x28FB,
+ 0x32A3, 0x28FA, 0x32A4, 0x1DBD, 0x32A5, 0x1DBE, 0x32A6, 0x1DBF, 0x32A7,
+ 0x1DC0, 0x32A8, 0x1DC1, 0x32A9, 0x1FDA, 0x32AA, 0x1FDD, 0x32AB, 0x1FDF,
+ 0x32AC, 0x1FE3, 0x32AD, 0x1FD9, 0x32AE, 0x1FE4, 0x32AF, 0x1FDB, 0x32B0,
+ 0x1FD8, 0x32D0, 0x28AD, 0x32D1, 0x28AE, 0x32D2, 0x28AF, 0x32D3, 0x28B0,
+ 0x32D4, 0x28B1, 0x32D5, 0x28B2, 0x32D6, 0x28B3, 0x32D7, 0x28B4, 0x32D8,
+ 0x28B5, 0x32D9, 0x28B6, 0x32DA, 0x28B7, 0x32DB, 0x28B8, 0x32DC, 0x28B9,
+ 0x32DD, 0x28BA, 0x32DE, 0x28BB, 0x32DF, 0x28BC, 0x32E0, 0x28BD, 0x32E1,
+ 0x28BE, 0x32E2, 0x28BF, 0x32E3, 0x28C0, 0x32E4, 0x28C1, 0x32E5, 0x28C2,
+ 0x32E6, 0x28C3, 0x32E7, 0x28C4, 0x32E8, 0x28C5, 0x32E9, 0x28C6, 0x32EA,
+ 0x28C7, 0x32EB, 0x28C8, 0x32EC, 0x28C9, 0x32ED, 0x28CA, 0x32EE, 0x28CB,
+ 0x32EF, 0x28CC, 0x32F0, 0x28CD, 0x32F1, 0x28CE, 0x32F2, 0x28CF, 0x32F3,
+ 0x28D0, 0x32F4, 0x28D1, 0x32F5, 0x28D2, 0x32F6, 0x28D3, 0x32F7, 0x28D4,
+ 0x32F8, 0x28D5, 0x32F9, 0x28D6, 0x32FA, 0x28D7, 0x32FB, 0x28D8, 0x32FC,
+ 0x28D9, 0x32FD, 0x28DA, 0x32FE, 0x28DB, 0x3300, 0x1F70, 0x3301, 0x2E62,
+ 0x3302, 0x2E63, 0x3303, 0x1F6A, 0x3304, 0x2E64, 0x3305, 0x1FF7, 0x3306,
+ 0x2E65, 0x3307, 0x2E69, 0x3308, 0x2E67, 0x3309, 0x2E6C, 0x330A, 0x2E6A,
+ 0x330B, 0x2E6E, 0x330C, 0x2E70, 0x330D, 0x1DAB, 0x330E, 0x2E71, 0x330F,
+ 0x2E72, 0x3310, 0x2E73, 0x3311, 0x2E74, 0x3312, 0x2E75, 0x3313, 0x2E76,
+ 0x3314, 0x1DA2, 0x3315, 0x1F69, 0x3316, 0x1F67, 0x3317, 0x2E78, 0x3318,
+ 0x1F68, 0x3319, 0x2E7A, 0x331A, 0x2E7C, 0x331B, 0x2E7D, 0x331C, 0x2E7E,
+ 0x331D, 0x2E7F, 0x331E, 0x1F73, 0x331F, 0x2E80, 0x3320, 0x2E81, 0x3321,
+ 0x2E82, 0x3322, 0x1F66, 0x3323, 0x1F6B, 0x3324, 0x2E83, 0x3325, 0x2E85,
+ 0x3326, 0x1DAC, 0x3327, 0x1DA6, 0x3328, 0x2E88, 0x3329, 0x2E89, 0x332A,
+ 0x1F74, 0x332B, 0x1DAE, 0x332D, 0x2E8B, 0x332E, 0x2E8E, 0x332F, 0x2E8F,
+ 0x3330, 0x2E90, 0x3331, 0x1F71, 0x3332, 0x2E91, 0x3333, 0x2087, 0x3334,
+ 0x2E94, 0x3335, 0x2E95, 0x3336, 0x1DA8, 0x3337, 0x2E9A, 0x3338, 0x2E9C,
+ 0x3339, 0x1F6E, 0x333A, 0x2E9D, 0x333B, 0x1F6F, 0x333C, 0x2E96, 0x333D,
+ 0x2E9E, 0x333E, 0x2EA0, 0x333F, 0x2EA1, 0x3340, 0x2EA2, 0x3341, 0x2E9F,
+ 0x3342, 0x1F6D, 0x3343, 0x2EA3, 0x3344, 0x2EA4, 0x3345, 0x2EA5, 0x3346,
+ 0x2EA6, 0x3347, 0x1F72, 0x3348, 0x2EA7, 0x3349, 0x1DA1, 0x334A, 0x1DAF,
+ 0x334B, 0x2EA8, 0x334C, 0x2EA9, 0x334D, 0x1DA4, 0x334E, 0x2088, 0x334F,
+ 0x2EAA, 0x3350, 0x2EAB, 0x3351, 0x1DA9, 0x3352, 0x2EAE, 0x3353, 0x2EB2,
+ 0x3354, 0x2EAF, 0x3355, 0x2EB3, 0x3356, 0x2EB4, 0x3357, 0x1F6C, 0x3371,
+ 0x2E55, 0x337B, 0x2083, 0x337C, 0x1DC7, 0x337D, 0x1DC6, 0x337E, 0x1DC5,
+ 0x337F, 0x1F76, 0x3385, 0x1F5F, 0x3386, 0x1F60, 0x3387, 0x1F61, 0x3388,
+ 0x2000, 0x3389, 0x2001, 0x338D, 0x2E58, 0x338E, 0x1DB4, 0x338F, 0x1DB5,
+ 0x3390, 0x1F63, 0x3396, 0x1F65, 0x3397, 0x1F58, 0x3398, 0x1F5A, 0x339B,
+ 0x2E59, 0x339C, 0x1DB1, 0x339D, 0x1DB2, 0x339E, 0x1DB3, 0x339F, 0x1FFA,
+ 0x33A0, 0x1F54, 0x33A1, 0x1DB7, 0x33A2, 0x1F55, 0x33A3, 0x1FFB, 0x33A4,
+ 0x1F56, 0x33A5, 0x1F57, 0x33A6, 0x1FFC, 0x33B0, 0x1F5E, 0x33B1, 0x1F5D,
+ 0x33B2, 0x1F5C, 0x33B3, 0x1F5B, 0x33C2, 0x2E50, 0x33C4, 0x1DB6, 0x33C8,
+ 0x2002, 0x33CB, 0x1F62, 0x33CC, 0x1FF6, 0x33CD, 0x1DBB, 0x33D4, 0x1F64,
+ 0x33D7, 0x2E5D, 0x33D8, 0x2E5E, 0x33DA, 0x2E4B, 0x3402, 0x3582, 0x3405,
+ 0x3C1B, 0x3427, 0x3656, 0x3488, 0x3C52, 0x34DB, 0x3C41, 0x351F, 0x3629,
+ 0x353E, 0x371E, 0x378D, 0x361A, 0x37E2, 0x372B, 0x3AF3, 0x3C40, 0x3B22,
+ 0x3C49, 0x3B88, 0x368D, 0x3E8A, 0x3C43, 0x3EDA, 0x3C48, 0x3FB1, 0x3754,
+ 0x4093, 0x3C4C, 0x4103, 0x3C4F, 0x4264, 0x3760, 0x4293, 0x3C50, 0x440C,
+ 0x3C42, 0x4453, 0x3773, 0x457A, 0x3C4B, 0x4665, 0x3C4E, 0x46AE, 0x3C51,
+ 0x4BE8, 0x3C46, 0x4E00, 0x04B0, 0x4E01, 0x0BB8, 0x4E03, 0x08E3, 0x4E04,
+ 0x37D8, 0x4E05, 0x37D9, 0x4E07, 0x0EAA, 0x4E08, 0x09CE, 0x4E09, 0x087E,
+ 0x4E0A, 0x09CD, 0x4E0B, 0x053C, 0x4E0D, 0x0DC6, 0x4E0E, 0x0F29, 0x4E10,
+ 0x0FFB, 0x4E11, 0x04D1, 0x4E14, 0x05CC, 0x4E15, 0x0FFC, 0x4E16, 0x0A48,
+ 0x4E17, 0x10D7, 0x4E18, 0x0670, 0x4E19, 0x0E0A, 0x4E1E, 0x09CF, 0x4E1F,
+ 0x37DA, 0x4E21, 0x0F86, 0x4E26, 0x0E12, 0x4E28, 0x20B3, 0x4E2A, 0x0FFD,
+ 0x4E2B, 0x37DB, 0x4E2C, 0x374D, 0x4E2D, 0x0BA4, 0x4E2F, 0x37DC, 0x4E30,
+ 0x37DD, 0x4E31, 0x0FFE, 0x4E32, 0x06F2, 0x4E36, 0x0FFF, 0x4E37, 0x369D,
+ 0x4E38, 0x0619, 0x4E39, 0x0B6E, 0x4E3B, 0x0913, 0x4E3C, 0x1000, 0x4E3F,
+ 0x1001, 0x4E40, 0x37DE, 0x4E41, 0x37DF, 0x4E42, 0x1002, 0x4E43, 0x0CEB,
+ 0x4E44, 0x37E0, 0x4E45, 0x0671, 0x4E48, 0x372E, 0x4E4B, 0x0CED, 0x4E4D,
+ 0x0CBB, 0x4E4E, 0x0777, 0x4E4F, 0x0E61, 0x4E55, 0x1950, 0x4E56, 0x1003,
+ 0x4E57, 0x09D0, 0x4E58, 0x1004, 0x4E59, 0x0535, 0x4E5A, 0x37E1, 0x4E5D,
+ 0x06DD, 0x4E5E, 0x07A4, 0x4E5F, 0x0EF5, 0x4E62, 0x1233, 0x4E71, 0x0F5A,
+ 0x4E73, 0x0CD5, 0x4E7E, 0x05E1, 0x4E7F, 0x37E2, 0x4E80, 0x064F, 0x4E82,
+ 0x1005, 0x4E85, 0x1006, 0x4E86, 0x0F83, 0x4E88, 0x0F27, 0x4E89, 0x0AEA,
+ 0x4E8A, 0x1008, 0x4E8B, 0x08C4, 0x4E8C, 0x0CCB, 0x4E8D, 0x37E3, 0x4E8E,
+ 0x100B, 0x4E91, 0x04E0, 0x4E92, 0x0793, 0x4E94, 0x0792, 0x4E95, 0x04AA,
+ 0x4E96, 0x37E4, 0x4E98, 0x0FF1, 0x4E99, 0x0FF0, 0x4E9B, 0x0823, 0x4E9C,
+ 0x0465, 0x4E9E, 0x100C, 0x4E9F, 0x100D, 0x4EA0, 0x100E, 0x4EA1, 0x0E62,
+ 0x4EA2, 0x100F, 0x4EA4, 0x07A6, 0x4EA5, 0x04AB, 0x4EA6, 0x0EA0, 0x4EA8,
+ 0x0696, 0x4EAB, 0x0697, 0x4EAC, 0x0698, 0x4EAD, 0x0BFE, 0x4EAE, 0x0F84,
+ 0x4EB0, 0x1010, 0x4EB3, 0x1011, 0x4EB6, 0x1012, 0x4EB9, 0x37E5, 0x4EBA,
+ 0x0A13, 0x4EBB, 0x3620, 0x4EC0, 0x0944, 0x4EC1, 0x0A14, 0x4EC2, 0x1017,
+ 0x4EC4, 0x1015, 0x4EC6, 0x1016, 0x4EC7, 0x0672, 0x4ECA, 0x0813, 0x4ECB,
+ 0x0570, 0x4ECD, 0x1014, 0x4ECE, 0x1013, 0x4ECF, 0x0DF9, 0x4ED0, 0x37E6,
+ 0x4ED4, 0x0894, 0x4ED5, 0x0893, 0x4ED6, 0x0B1E, 0x4ED7, 0x1018, 0x4ED8,
+ 0x0DC7, 0x4ED9, 0x0A8B, 0x4EDD, 0x0290, 0x4EDE, 0x1019, 0x4EDF, 0x101B,
+ 0x4EE0, 0x37E7, 0x4EE1, 0x20B4, 0x4EE3, 0x0B45, 0x4EE4, 0x0FA9, 0x4EE5,
+ 0x048E, 0x4EED, 0x101A, 0x4EEE, 0x053E, 0x4EF0, 0x06BC, 0x4EF2, 0x0BA5,
+ 0x4EF6, 0x0745, 0x4EF7, 0x101C, 0x4EFB, 0x0CDA, 0x4EFC, 0x20B5, 0x4EFD,
+ 0x37E8, 0x4EFF, 0x37E9, 0x4F00, 0x20B6, 0x4F01, 0x0627, 0x4F03, 0x20B7,
+ 0x4F09, 0x101D, 0x4F0A, 0x048F, 0x4F0B, 0x37EA, 0x4F0D, 0x0794, 0x4F0E,
+ 0x0628, 0x4F0F, 0x0DEC, 0x4F10, 0x0D46, 0x4F11, 0x0673, 0x4F15, 0x37EB,
+ 0x4F1A, 0x0571, 0x4F1C, 0x1040, 0x4F1D, 0x0C3B, 0x4F2F, 0x0D22, 0x4F30,
+ 0x101F, 0x4F34, 0x0D50, 0x4F36, 0x0FAA, 0x4F38, 0x09F3, 0x4F39, 0x20B8,
+ 0x4F3A, 0x0895, 0x4F3B, 0x37ED, 0x4F3C, 0x08C5, 0x4F3D, 0x0540, 0x4F43,
+ 0x0BED, 0x4F46, 0x0B60, 0x4F47, 0x1023, 0x4F49, 0x37EE, 0x4F4D, 0x0490,
+ 0x4F4E, 0x0BFF, 0x4F4F, 0x0945, 0x4F50, 0x0824, 0x4F51, 0x0F0E, 0x4F53,
+ 0x0B2E, 0x4F54, 0x37EF, 0x4F55, 0x053F, 0x4F56, 0x20B9, 0x4F57, 0x1022,
+ 0x4F59, 0x0F28, 0x4F5A, 0x101E, 0x4F5B, 0x1020, 0x4F5C, 0x085E, 0x4F5D,
+ 0x1021, 0x4F5E, 0x11D3, 0x4F60, 0x37EC, 0x4F69, 0x1029, 0x4F6F, 0x102C,
+ 0x4F70, 0x102A, 0x4F73, 0x0542, 0x4F75, 0x0E0B, 0x4F76, 0x1024, 0x4F7A,
+ 0x37F0, 0x4F7B, 0x1028, 0x4F7C, 0x07A7, 0x4F7D, 0x37F1, 0x4F7E, 0x37F2,
+ 0x4F7F, 0x0896, 0x4F83, 0x05E2, 0x4F86, 0x102D, 0x4F88, 0x1025, 0x4F8A,
+ 0x20BB, 0x4F8B, 0x0FAB, 0x4F8D, 0x08C6, 0x4F8F, 0x1026, 0x4F91, 0x102B,
+ 0x4F92, 0x20BA, 0x4F94, 0x20BD, 0x4F96, 0x102E, 0x4F97, 0x37F3, 0x4F98,
+ 0x1027, 0x4F9A, 0x20BC, 0x4F9B, 0x0699, 0x4F9D, 0x0491, 0x4FA0, 0x069A,
+ 0x4FA1, 0x0541, 0x4FAB, 0x11D4, 0x4FAD, 0x0EA7, 0x4FAE, 0x0DE0, 0x4FAF,
+ 0x07A8, 0x4FB5, 0x09F5, 0x4FB6, 0x0F7F, 0x4FBE, 0x37F4, 0x4FBF, 0x0E28,
+ 0x4FC2, 0x070E, 0x4FC3, 0x0B05, 0x4FC4, 0x0564, 0x4FC9, 0x20AC, 0x4FCA,
+ 0x095D, 0x4FCD, 0x20BE, 0x4FCE, 0x1032, 0x4FCF, 0x37F5, 0x4FD0, 0x1037,
+ 0x4FD1, 0x1035, 0x4FD3, 0x3C2F, 0x4FD4, 0x1030, 0x4FD7, 0x0B0F, 0x4FD8,
+ 0x1033, 0x4FDA, 0x1036, 0x4FDB, 0x1034, 0x4FDD, 0x0E2D, 0x4FDF, 0x1031,
+ 0x4FE0, 0x1DEC, 0x4FE1, 0x09F4, 0x4FE3, 0x0EA1, 0x4FE4, 0x1038, 0x4FE5,
+ 0x1039, 0x4FEE, 0x092E, 0x4FEF, 0x1046, 0x4FF3, 0x0D06, 0x4FF5, 0x0DA8,
+ 0x4FF6, 0x1041, 0x4FF8, 0x0E40, 0x4FFA, 0x0536, 0x4FFD, 0x37F6, 0x4FFE,
+ 0x1045, 0x4FFF, 0x20C1, 0x5000, 0x37F7, 0x5001, 0x37F8, 0x5002, 0x3447,
+ 0x5005, 0x103F, 0x5006, 0x1048, 0x5009, 0x0AD4, 0x500B, 0x0778, 0x500D,
+ 0x0D12, 0x500F, 0x1600, 0x5010, 0x37F9, 0x5011, 0x1047, 0x5012, 0x0C57,
+ 0x5014, 0x103C, 0x5016, 0x07AA, 0x5019, 0x07A9, 0x501A, 0x103A, 0x501B,
+ 0x37FA, 0x501E, 0x20C2, 0x501F, 0x0906, 0x5021, 0x1042, 0x5022, 0x20C0,
+ 0x5023, 0x0E3F, 0x5024, 0x0B8B, 0x5025, 0x103E, 0x5026, 0x0747, 0x5027,
+ 0x37FB, 0x5028, 0x103B, 0x5029, 0x1043, 0x502A, 0x103D, 0x502B, 0x0F99,
+ 0x502C, 0x1044, 0x502D, 0x0FE7, 0x502E, 0x37FC, 0x5036, 0x06DE, 0x5039,
+ 0x0746, 0x503B, 0x3800, 0x5040, 0x20BF, 0x5042, 0x20C5, 0x5043, 0x1049,
+ 0x5046, 0x20C3, 0x5047, 0x104A, 0x5048, 0x104E, 0x5049, 0x0492, 0x504F,
+ 0x0E20, 0x5050, 0x104D, 0x5055, 0x104C, 0x5056, 0x1050, 0x5057, 0x37FD,
+ 0x505A, 0x104F, 0x505C, 0x0C00, 0x5065, 0x0748, 0x5066, 0x37FE, 0x506A,
+ 0x37FF, 0x506C, 0x1051, 0x5070, 0x20C4, 0x5072, 0x08F1, 0x5074, 0x0B06,
+ 0x5075, 0x0C01, 0x5076, 0x06EE, 0x5078, 0x1052, 0x507D, 0x0650, 0x5080,
+ 0x1053, 0x5085, 0x1055, 0x508D, 0x0E63, 0x508F, 0x3801, 0x5091, 0x073C,
+ 0x5094, 0x20C6, 0x5096, 0x3802, 0x5098, 0x087F, 0x5099, 0x0D8B, 0x509A,
+ 0x1054, 0x509C, 0x3803, 0x50AC, 0x0835, 0x50AD, 0x0F2D, 0x50B2, 0x1057,
+ 0x50B3, 0x105A, 0x50B4, 0x1056, 0x50B5, 0x0834, 0x50B7, 0x0987, 0x50BE,
+ 0x070F, 0x50C2, 0x105B, 0x50C5, 0x06C7, 0x50C9, 0x1058, 0x50CA, 0x1059,
+ 0x50CC, 0x3804, 0x50CD, 0x0C87, 0x50CF, 0x0AFE, 0x50D1, 0x069B, 0x50D5,
+ 0x0E7B, 0x50D6, 0x105C, 0x50D8, 0x20C8, 0x50D9, 0x3C30, 0x50DA, 0x0F85,
+ 0x50DE, 0x105D, 0x50E3, 0x1060, 0x50E5, 0x105E, 0x50E6, 0x3805, 0x50E7,
+ 0x0AD0, 0x50E9, 0x3806, 0x50ED, 0x105F, 0x50EE, 0x1061, 0x50EF, 0x3807,
+ 0x50F0, 0x3C31, 0x50F4, 0x20C7, 0x50F5, 0x1063, 0x50F9, 0x1062, 0x50FB,
+ 0x0E18, 0x5100, 0x0651, 0x5101, 0x1065, 0x5102, 0x1066, 0x5104, 0x052F,
+ 0x5108, 0x3808, 0x5109, 0x1064, 0x510B, 0x3809, 0x5110, 0x380A, 0x5112,
+ 0x0920, 0x5114, 0x1069, 0x5115, 0x1068, 0x5116, 0x1067, 0x5118, 0x102F,
+ 0x511A, 0x106A, 0x511B, 0x380B, 0x511E, 0x380C, 0x511F, 0x0988, 0x5121,
+ 0x106B, 0x512A, 0x0F0F, 0x5132, 0x0EE5, 0x5137, 0x106D, 0x513A, 0x106C,
+ 0x513B, 0x106F, 0x513C, 0x106E, 0x513F, 0x1070, 0x5140, 0x1071, 0x5141,
+ 0x04B8, 0x5143, 0x0769, 0x5144, 0x0711, 0x5145, 0x0946, 0x5146, 0x0BB9,
+ 0x5147, 0x069C, 0x5148, 0x0A8C, 0x5149, 0x07AB, 0x514A, 0x20C9, 0x514B,
+ 0x0800, 0x514C, 0x1073, 0x514D, 0x0ED4, 0x514E, 0x0C40, 0x5150, 0x08C7,
+ 0x5152, 0x1072, 0x5154, 0x1074, 0x515A, 0x0C58, 0x515C, 0x05D3, 0x515F,
+ 0x380D, 0x5162, 0x1075, 0x5164, 0x20CA, 0x5165, 0x0CD6, 0x5167, 0x368E,
+ 0x5168, 0x0AB6, 0x5169, 0x1077, 0x516A, 0x1078, 0x516B, 0x0D40, 0x516C,
+ 0x07AC, 0x516D, 0x0FE1, 0x516E, 0x1079, 0x5171, 0x069E, 0x5175, 0x0E0C,
+ 0x5176, 0x0B16, 0x5177, 0x06E9, 0x5178, 0x0C2F, 0x5179, 0x3779, 0x517C,
+ 0x0749, 0x5180, 0x107A, 0x5182, 0x107B, 0x5185, 0x0CBA, 0x5186, 0x0501,
+ 0x5189, 0x107E, 0x518A, 0x086D, 0x518C, 0x107D, 0x518D, 0x0836, 0x518F,
+ 0x107F, 0x5190, 0x185B, 0x5191, 0x1080, 0x5192, 0x0E6F, 0x5193, 0x1081,
+ 0x5195, 0x1082, 0x5196, 0x1083, 0x5197, 0x09D1, 0x5199, 0x08F8, 0x519D,
+ 0x20CB, 0x51A0, 0x05E3, 0x51A1, 0x380E, 0x51A2, 0x1086, 0x51A4, 0x1084,
+ 0x51A5, 0x0EC9, 0x51A6, 0x1085, 0x51A8, 0x0DCC, 0x51A9, 0x1087, 0x51AA,
+ 0x1088, 0x51AB, 0x1089, 0x51AC, 0x0C59, 0x51B0, 0x108D, 0x51B1, 0x108B,
+ 0x51B2, 0x108C, 0x51B3, 0x108A, 0x51B4, 0x0853, 0x51B5, 0x108E, 0x51B6,
+ 0x0EF6, 0x51B7, 0x0FAC, 0x51BC, 0x380F, 0x51BD, 0x108F, 0x51BE, 0x20CC,
+ 0x51C3, 0x3C32, 0x51C4, 0x0A4C, 0x51C5, 0x1090, 0x51C6, 0x0964, 0x51C9,
+ 0x1091, 0x51CB, 0x0BBA, 0x51CC, 0x0F87, 0x51CD, 0x0C5A, 0x51D6, 0x10DA,
+ 0x51DB, 0x1092, 0x51DC, 0x205C, 0x51DD, 0x06BD, 0x51DE, 0x3810, 0x51E0,
+ 0x1093, 0x51E1, 0x0E8C, 0x51E6, 0x0972, 0x51E7, 0x0B5C, 0x51E9, 0x1095,
+ 0x51EA, 0x0CBC, 0x51EC, 0x20CD, 0x51ED, 0x1096, 0x51EE, 0x3811, 0x51F0,
+ 0x1097, 0x51F1, 0x058C, 0x51F4, 0x3812, 0x51F5, 0x1098, 0x51F6, 0x069F,
+ 0x51F8, 0x0CA4, 0x51F9, 0x051C, 0x51FA, 0x095A, 0x51FD, 0x0D35, 0x51FE,
+ 0x1099, 0x5200, 0x0C5B, 0x5201, 0x3813, 0x5202, 0x3814, 0x5203, 0x0A15,
+ 0x5204, 0x109A, 0x5206, 0x0DFC, 0x5207, 0x0A7E, 0x5208, 0x05DE, 0x520A,
+ 0x05E5, 0x520B, 0x109B, 0x520E, 0x109D, 0x5211, 0x0710, 0x5213, 0x3815,
+ 0x5214, 0x109C, 0x5215, 0x20CE, 0x5217, 0x0FBB, 0x521D, 0x0973, 0x5224,
+ 0x0D51, 0x5225, 0x0E1C, 0x5227, 0x109E, 0x5229, 0x0F62, 0x522A, 0x109F,
+ 0x522E, 0x10A0, 0x5230, 0x0C78, 0x5233, 0x10A1, 0x5236, 0x0A4D, 0x5237,
+ 0x086E, 0x5238, 0x074A, 0x5239, 0x10A2, 0x523A, 0x0897, 0x523B, 0x0801,
+ 0x5243, 0x0C02, 0x5244, 0x10A4, 0x5247, 0x0B07, 0x5249, 0x3816, 0x524A,
+ 0x085F, 0x524B, 0x10A5, 0x524C, 0x10A6, 0x524D, 0x0AB2, 0x524F, 0x10A3,
+ 0x5254, 0x10A8, 0x5256, 0x0E64, 0x525B, 0x07F6, 0x525D, 0x1E5E, 0x525E,
+ 0x10A7, 0x5261, 0x3817, 0x5263, 0x074B, 0x5264, 0x084E, 0x5265, 0x0D23,
+ 0x5266, 0x3818, 0x5269, 0x10AB, 0x526A, 0x10A9, 0x526F, 0x0DED, 0x5270,
+ 0x09D2, 0x5271, 0x10B2, 0x5272, 0x05C2, 0x5273, 0x10AC, 0x5274, 0x10AA,
+ 0x5275, 0x0AD1, 0x527D, 0x10AE, 0x527F, 0x10AD, 0x5283, 0x05A2, 0x5287,
+ 0x0736, 0x5288, 0x10B3, 0x5289, 0x0F75, 0x528D, 0x10AF, 0x5291, 0x10B4,
+ 0x5292, 0x10B1, 0x5293, 0x3819, 0x5294, 0x10B0, 0x529B, 0x0F97, 0x529C,
+ 0x20CF, 0x529F, 0x07AD, 0x52A0, 0x0543, 0x52A3, 0x0FBC, 0x52A6, 0x20D0,
+ 0x52A9, 0x097F, 0x52AA, 0x0C52, 0x52AB, 0x07F7, 0x52AC, 0x10B7, 0x52AD,
+ 0x10B8, 0x52AF, 0x217D, 0x52B1, 0x0FAD, 0x52B4, 0x0FD1, 0x52B5, 0x10BA,
+ 0x52B9, 0x07AE, 0x52BC, 0x10B9, 0x52BE, 0x058D, 0x52C0, 0x20D1, 0x52C1,
+ 0x10BB, 0x52C3, 0x0E84, 0x52C5, 0x0BD8, 0x52C7, 0x0F10, 0x52C8, 0x381A,
+ 0x52C9, 0x0E29, 0x52CD, 0x10BC, 0x52D0, 0x36E8, 0x52D2, 0x1BEE, 0x52D5,
+ 0x0C88, 0x52D7, 0x10BD, 0x52D8, 0x05E6, 0x52D9, 0x0EBF, 0x52DB, 0x20D2,
+ 0x52DD, 0x0989, 0x52DE, 0x10BE, 0x52DF, 0x0E37, 0x52E0, 0x10C2, 0x52E2,
+ 0x0A4E, 0x52E3, 0x10BF, 0x52E4, 0x06C8, 0x52E6, 0x10C0, 0x52E7, 0x05E7,
+ 0x52F0, 0x381B, 0x52F2, 0x0704, 0x52F3, 0x10C3, 0x52F5, 0x10C4, 0x52F8,
+ 0x10C5, 0x52F9, 0x10C6, 0x52FA, 0x0907, 0x52FE, 0x07AF, 0x52FF, 0x0EEA,
+ 0x5300, 0x20D3, 0x5301, 0x0EF4, 0x5302, 0x0CCF, 0x5305, 0x0E41, 0x5306,
+ 0x10C7, 0x5307, 0x20D4, 0x5308, 0x10C8, 0x530A, 0x381C, 0x530B, 0x381D,
+ 0x530D, 0x10CA, 0x530F, 0x10CC, 0x5310, 0x10CB, 0x5315, 0x10CD, 0x5316,
+ 0x053D, 0x5317, 0x0E7A, 0x5319, 0x086C, 0x531A, 0x10CE, 0x531D, 0x0ADB,
+ 0x5320, 0x098A, 0x5321, 0x06A1, 0x5323, 0x10CF, 0x5324, 0x20D5, 0x532A,
+ 0x0D6F, 0x532F, 0x10D0, 0x5331, 0x10D1, 0x5333, 0x10D2, 0x5338, 0x10D3,
+ 0x5339, 0x0D96, 0x533A, 0x06E0, 0x533B, 0x04A9, 0x533E, 0x381E, 0x533F,
+ 0x0C97, 0x5340, 0x10D4, 0x5341, 0x0947, 0x5343, 0x0A8D, 0x5345, 0x10D6,
+ 0x5346, 0x10D5, 0x5347, 0x098B, 0x5348, 0x0795, 0x5349, 0x10D8, 0x534A,
+ 0x0D52, 0x534B, 0x3820, 0x534C, 0x381F, 0x534D, 0x10D9, 0x5351, 0x0D70,
+ 0x5352, 0x0B14, 0x5353, 0x0B4E, 0x5354, 0x06A0, 0x5357, 0x0CC6, 0x5358,
+ 0x0B6F, 0x535A, 0x0D24, 0x535C, 0x0E7C, 0x535E, 0x10DB, 0x5360, 0x0A8E,
+ 0x5361, 0x3821, 0x5366, 0x070B, 0x5369, 0x10DC, 0x536C, 0x3822, 0x536E,
+ 0x10DD, 0x536F, 0x04CE, 0x5370, 0x04B9, 0x5371, 0x0629, 0x5372, 0x20D6,
+ 0x5373, 0x0B08, 0x5374, 0x066B, 0x5375, 0x0F5B, 0x5377, 0x10E0, 0x5378,
+ 0x0537, 0x537B, 0x10DF, 0x537D, 0x3435, 0x537F, 0x06A2, 0x5382, 0x10E1,
+ 0x5384, 0x0EFD, 0x5389, 0x37D0, 0x5393, 0x20D7, 0x5396, 0x10E2, 0x5398,
+ 0x0F9A, 0x539A, 0x07B0, 0x539F, 0x076A, 0x53A0, 0x10E3, 0x53A5, 0x10E5,
+ 0x53A6, 0x10E4, 0x53A8, 0x0A25, 0x53A9, 0x04DB, 0x53AB, 0x3823, 0x53AD,
+ 0x0500, 0x53AE, 0x10E6, 0x53B0, 0x10E7, 0x53B2, 0x20D8, 0x53B3, 0x076B,
+ 0x53B6, 0x10E8, 0x53BB, 0x0688, 0x53C2, 0x0880, 0x53C3, 0x10E9, 0x53C8,
+ 0x0EA2, 0x53C9, 0x0825, 0x53CA, 0x0674, 0x53CB, 0x0F11, 0x53CC, 0x0AD2,
+ 0x53CD, 0x0D53, 0x53CE, 0x0929, 0x53D4, 0x0951, 0x53D6, 0x0914, 0x53D7,
+ 0x0921, 0x53D9, 0x0980, 0x53DA, 0x3824, 0x53DB, 0x0D54, 0x53DD, 0x20D9,
+ 0x53DF, 0x10EC, 0x53E1, 0x04E5, 0x53E2, 0x0AD3, 0x53E3, 0x07B1, 0x53E4,
+ 0x0779, 0x53E5, 0x06DF, 0x53E6, 0x3825, 0x53E8, 0x10F0, 0x53E9, 0x0B5F,
+ 0x53EA, 0x0B5E, 0x53EB, 0x06A3, 0x53EC, 0x098C, 0x53ED, 0x10F1, 0x53EE,
+ 0x10EF, 0x53EF, 0x0544, 0x53F0, 0x0B46, 0x53F1, 0x08E4, 0x53F2, 0x0899,
+ 0x53F3, 0x04C8, 0x53F5, 0x3826, 0x53F6, 0x05CE, 0x53F7, 0x07F8, 0x53F8,
+ 0x0898, 0x53FA, 0x10F2, 0x5401, 0x10F3, 0x5403, 0x0663, 0x5404, 0x05A4,
+ 0x5408, 0x07F9, 0x5409, 0x0662, 0x540A, 0x0BFB, 0x540B, 0x04C7, 0x540C,
+ 0x0C89, 0x540D, 0x0ECA, 0x540E, 0x07B3, 0x540F, 0x0F63, 0x5410, 0x0C41,
+ 0x5411, 0x07B2, 0x541B, 0x0705, 0x541D, 0x10FC, 0x541F, 0x06DB, 0x5420,
+ 0x0E78, 0x5426, 0x0D71, 0x5427, 0x3827, 0x5429, 0x10FB, 0x542B, 0x061A,
+ 0x542C, 0x10F6, 0x542D, 0x10F7, 0x542E, 0x10F9, 0x5433, 0x35C0, 0x5436,
+ 0x10FA, 0x5438, 0x0675, 0x5439, 0x0A27, 0x543B, 0x0DFD, 0x543C, 0x10F8,
+ 0x543D, 0x10F4, 0x543E, 0x0797, 0x543F, 0x35CF, 0x5440, 0x10F5, 0x5442,
+ 0x0FCA, 0x5446, 0x0E42, 0x5448, 0x0C04, 0x5449, 0x0796, 0x544A, 0x0802,
+ 0x544D, 0x3828, 0x544E, 0x10FD, 0x5451, 0x0CB5, 0x5455, 0x3723, 0x545F,
+ 0x1101, 0x5466, 0x3829, 0x5468, 0x092A, 0x546A, 0x0922, 0x546B, 0x382A,
+ 0x5470, 0x1104, 0x5471, 0x1102, 0x5473, 0x0EAF, 0x5474, 0x382B, 0x5475,
+ 0x10FF, 0x5476, 0x1108, 0x5477, 0x1103, 0x547B, 0x1106, 0x547C, 0x077A,
+ 0x547D, 0x0ECB, 0x5480, 0x1107, 0x5484, 0x1109, 0x5486, 0x110B, 0x548A,
+ 0x20DC, 0x548B, 0x0860, 0x548C, 0x0FE8, 0x548D, 0x382C, 0x548E, 0x1100,
+ 0x548F, 0x10FE, 0x5490, 0x110A, 0x5492, 0x1105, 0x5496, 0x382D, 0x549C,
+ 0x20DB, 0x54A1, 0x382E, 0x54A2, 0x110D, 0x54A4, 0x1116, 0x54A5, 0x110F,
+ 0x54A8, 0x1113, 0x54A9, 0x20DD, 0x54AB, 0x1114, 0x54AC, 0x1110, 0x54AD,
+ 0x382F, 0x54AF, 0x1131, 0x54B2, 0x0859, 0x54B3, 0x058F, 0x54B8, 0x110E,
+ 0x54B9, 0x3830, 0x54BC, 0x1118, 0x54BD, 0x04BA, 0x54BE, 0x1117, 0x54BF,
+ 0x3831, 0x54C0, 0x0469, 0x54C1, 0x0DBC, 0x54C2, 0x1115, 0x54C4, 0x1111,
+ 0x54C6, 0x3832, 0x54C7, 0x110C, 0x54C8, 0x1112, 0x54C9, 0x0838, 0x54CD,
+ 0x3833, 0x54D8, 0x1119, 0x54E1, 0x04BB, 0x54E2, 0x1122, 0x54E5, 0x111A,
+ 0x54E6, 0x111B, 0x54E8, 0x098D, 0x54E9, 0x0E97, 0x54ED, 0x1120, 0x54EE,
+ 0x111F, 0x54F2, 0x0C29, 0x54FA, 0x1121, 0x54FD, 0x111E, 0x54FF, 0x20DE,
+ 0x5504, 0x04D6, 0x5506, 0x0826, 0x5507, 0x09F6, 0x550E, 0x3834, 0x550F,
+ 0x111C, 0x5510, 0x0C5C, 0x5514, 0x111D, 0x5516, 0x0466, 0x552B, 0x3835,
+ 0x552E, 0x1127, 0x552F, 0x0F0D, 0x5531, 0x098F, 0x5533, 0x112D, 0x5535,
+ 0x3836, 0x5538, 0x112C, 0x5539, 0x1123, 0x553E, 0x0B23, 0x5540, 0x1124,
+ 0x5544, 0x0B4F, 0x5545, 0x1129, 0x5546, 0x098E, 0x554A, 0x3837, 0x554C,
+ 0x1126, 0x554F, 0x0EF0, 0x5553, 0x0712, 0x5556, 0x112A, 0x5557, 0x112B,
+ 0x555C, 0x1128, 0x555D, 0x112E, 0x555E, 0x1DD1, 0x5560, 0x3838, 0x5561,
+ 0x3839, 0x5563, 0x1125, 0x557B, 0x1134, 0x557C, 0x1139, 0x557E, 0x1135,
+ 0x5580, 0x1130, 0x5583, 0x113A, 0x5584, 0x0AB3, 0x5586, 0x20DF, 0x5587,
+ 0x113C, 0x5588, 0x383A, 0x5589, 0x07B4, 0x558A, 0x1132, 0x558B, 0x0BBB,
+ 0x558E, 0x383B, 0x5598, 0x1136, 0x5599, 0x112F, 0x559A, 0x05E9, 0x559C,
+ 0x062A, 0x559D, 0x05C3, 0x559E, 0x1137, 0x559F, 0x1133, 0x55A7, 0x074C,
+ 0x55A8, 0x113D, 0x55A9, 0x113B, 0x55AA, 0x0AD5, 0x55AB, 0x0664, 0x55AC,
+ 0x06A4, 0x55AE, 0x1138, 0x55B0, 0x06EC, 0x55B6, 0x04E6, 0x55C4, 0x1141,
+ 0x55C5, 0x113F, 0x55C7, 0x1178, 0x55D4, 0x1144, 0x55DA, 0x113E, 0x55DC,
+ 0x1142, 0x55DF, 0x1140, 0x55E3, 0x089A, 0x55E4, 0x1143, 0x55F7, 0x1146,
+ 0x55F9, 0x114B, 0x55FD, 0x1149, 0x55FE, 0x1148, 0x5606, 0x0B70, 0x5608,
+ 0x383C, 0x5609, 0x0545, 0x560E, 0x383D, 0x560F, 0x383E, 0x5614, 0x1145,
+ 0x5616, 0x1147, 0x5617, 0x0990, 0x5618, 0x04D5, 0x561B, 0x114A, 0x5620,
+ 0x3C1D, 0x5629, 0x055E, 0x562F, 0x1155, 0x5631, 0x09E4, 0x5632, 0x1151,
+ 0x5634, 0x114F, 0x5636, 0x1150, 0x5637, 0x383F, 0x5638, 0x1152, 0x563F,
+ 0x3840, 0x5642, 0x04DF, 0x5649, 0x3841, 0x564B, 0x3842, 0x564C, 0x0ABB,
+ 0x564E, 0x114C, 0x564F, 0x3843, 0x5650, 0x114D, 0x5653, 0x1F1B, 0x565B,
+ 0x05D8, 0x5664, 0x1154, 0x5666, 0x3844, 0x5668, 0x062B, 0x5669, 0x3845,
+ 0x566A, 0x1157, 0x566B, 0x1153, 0x566C, 0x1156, 0x566F, 0x3846, 0x5671,
+ 0x3847, 0x5672, 0x3848, 0x5674, 0x0DFE, 0x5676, 0x3C33, 0x5678, 0x0CAD,
+ 0x567A, 0x0D4C, 0x5680, 0x1159, 0x5686, 0x1158, 0x5687, 0x05A3, 0x568A,
+ 0x115A, 0x568F, 0x115D, 0x5694, 0x115C, 0x5695, 0x3849, 0x5699, 0x1DE6,
+ 0x569A, 0x384A, 0x56A0, 0x115B, 0x56A2, 0x0CEF, 0x56A5, 0x115E, 0x56AC,
+ 0x384B, 0x56AD, 0x384C, 0x56AE, 0x115F, 0x56B1, 0x384D, 0x56B4, 0x1161,
+ 0x56B6, 0x1160, 0x56BC, 0x1163, 0x56C0, 0x1166, 0x56C1, 0x1164, 0x56C2,
+ 0x1162, 0x56C3, 0x1165, 0x56C8, 0x1167, 0x56C9, 0x384E, 0x56CA, 0x1E5A,
+ 0x56CE, 0x1168, 0x56D1, 0x1169, 0x56D3, 0x116A, 0x56D7, 0x116B, 0x56D8,
+ 0x107C, 0x56DA, 0x0928, 0x56DB, 0x089B, 0x56DD, 0x384F, 0x56DE, 0x0573,
+ 0x56E0, 0x04BC, 0x56E3, 0x0B82, 0x56E4, 0x3850, 0x56EE, 0x116C, 0x56F0,
+ 0x0814, 0x56F2, 0x0493, 0x56F3, 0x0A24, 0x56F9, 0x116D, 0x56FA, 0x077B,
+ 0x56FD, 0x0803, 0x56FF, 0x116F, 0x5700, 0x116E, 0x5703, 0x0E30, 0x5704,
+ 0x1170, 0x5708, 0x1172, 0x5709, 0x1171, 0x570A, 0x3851, 0x570B, 0x1173,
+ 0x570D, 0x1174, 0x570F, 0x074D, 0x5712, 0x0502, 0x5713, 0x1175, 0x5715,
+ 0x3852, 0x5716, 0x1177, 0x5718, 0x1176, 0x571C, 0x1179, 0x571F, 0x0C54,
+ 0x5721, 0x3680, 0x5723, 0x3853, 0x5726, 0x117A, 0x5727, 0x0479, 0x5728,
+ 0x084F, 0x572D, 0x0713, 0x572F, 0x3854, 0x5730, 0x0B8D, 0x5733, 0x3855,
+ 0x5734, 0x3856, 0x5737, 0x117B, 0x5738, 0x117C, 0x573B, 0x117E, 0x5740,
+ 0x117F, 0x5742, 0x0854, 0x5747, 0x06C9, 0x574A, 0x0E65, 0x574C, 0x3857,
+ 0x574E, 0x117D, 0x574F, 0x1180, 0x5750, 0x0831, 0x5751, 0x07B5, 0x5759,
+ 0x20E0, 0x5761, 0x1184, 0x5764, 0x0815, 0x5765, 0x20E1, 0x5766, 0x0B71,
+ 0x5769, 0x1181, 0x576A, 0x0BF6, 0x5770, 0x3858, 0x577F, 0x1185, 0x5782,
+ 0x0A28, 0x5788, 0x1183, 0x5789, 0x1186, 0x578B, 0x0715, 0x578C, 0x3859,
+ 0x5793, 0x1187, 0x579C, 0x385A, 0x57A0, 0x1188, 0x57A2, 0x07B6, 0x57A3,
+ 0x059E, 0x57A4, 0x118A, 0x57AA, 0x118B, 0x57AC, 0x20E2, 0x57B0, 0x118C,
+ 0x57B3, 0x1189, 0x57B8, 0x385B, 0x57C0, 0x1182, 0x57C3, 0x118D, 0x57C6,
+ 0x118E, 0x57C7, 0x20E4, 0x57C8, 0x20E3, 0x57CB, 0x0E92, 0x57CE, 0x09D3,
+ 0x57D2, 0x1190, 0x57D3, 0x1191, 0x57D4, 0x118F, 0x57D6, 0x1193, 0x57DC,
+ 0x0CEE, 0x57DF, 0x04AC, 0x57E0, 0x0DC8, 0x57E3, 0x1194, 0x57E6, 0x385C,
+ 0x57ED, 0x385D, 0x57F4, 0x09E5, 0x57F5, 0x385E, 0x57F6, 0x385F, 0x57F7,
+ 0x08E5, 0x57F9, 0x0D13, 0x57FA, 0x062C, 0x57FC, 0x085B, 0x57FF, 0x3860,
+ 0x5800, 0x0E87, 0x5802, 0x0C8A, 0x5805, 0x074E, 0x5806, 0x0B2F, 0x5809,
+ 0x3861, 0x580A, 0x1192, 0x580B, 0x1195, 0x5815, 0x0B24, 0x5819, 0x1196,
+ 0x581D, 0x1197, 0x5820, 0x3862, 0x5821, 0x1199, 0x5824, 0x0C05, 0x582A,
+ 0x05EA, 0x582F, 0x1D32, 0x5830, 0x0503, 0x5831, 0x0E43, 0x5832, 0x3863,
+ 0x5834, 0x09D4, 0x5835, 0x0C42, 0x583A, 0x0856, 0x583D, 0x119F, 0x5840,
+ 0x0E0D, 0x5841, 0x0FA5, 0x584A, 0x0574, 0x584B, 0x119B, 0x5851, 0x0ABC,
+ 0x5852, 0x119E, 0x5854, 0x0C5D, 0x5857, 0x0C43, 0x5858, 0x0C5E, 0x5859,
+ 0x0D4D, 0x585A, 0x0BE9, 0x585E, 0x0839, 0x5861, 0x1E47, 0x5862, 0x119A,
+ 0x5869, 0x0518, 0x586B, 0x0C30, 0x5870, 0x119C, 0x5872, 0x1198, 0x5875,
+ 0x0A16, 0x5879, 0x11A0, 0x587C, 0x3864, 0x587E, 0x0958, 0x5880, 0x3865,
+ 0x5883, 0x06A5, 0x5885, 0x11A1, 0x5893, 0x0E38, 0x5897, 0x0AFF, 0x589C,
+ 0x0BE2, 0x589E, 0x20E7, 0x589F, 0x11A3, 0x58A8, 0x0E7D, 0x58A9, 0x3866,
+ 0x58AB, 0x11A4, 0x58AE, 0x11A9, 0x58B2, 0x20E8, 0x58B3, 0x0DFF, 0x58B8,
+ 0x11A8, 0x58B9, 0x11A2, 0x58BA, 0x11A5, 0x58BB, 0x11A7, 0x58BE, 0x0816,
+ 0x58C1, 0x0E19, 0x58C5, 0x11AA, 0x58C7, 0x0B83, 0x58CA, 0x0575, 0x58CC,
+ 0x09D5, 0x58CE, 0x3867, 0x58D0, 0x3868, 0x58D1, 0x11AC, 0x58D3, 0x11AB,
+ 0x58D4, 0x3869, 0x58D5, 0x07FA, 0x58D7, 0x11AD, 0x58D8, 0x11AF, 0x58D9,
+ 0x11AE, 0x58DA, 0x386A, 0x58DC, 0x11B1, 0x58DE, 0x11A6, 0x58DF, 0x11B3,
+ 0x58E4, 0x11B2, 0x58E5, 0x11B0, 0x58E9, 0x386B, 0x58EB, 0x089C, 0x58EC,
+ 0x0A17, 0x58EE, 0x0AD6, 0x58EF, 0x11B4, 0x58F0, 0x0A60, 0x58F1, 0x04B1,
+ 0x58F2, 0x0D1A, 0x58F7, 0x0BF7, 0x58F9, 0x11B6, 0x58FA, 0x11B5, 0x58FB,
+ 0x11B7, 0x58FC, 0x11B8, 0x58FD, 0x11B9, 0x5902, 0x11BA, 0x5909, 0x0E21,
+ 0x590A, 0x11BB, 0x590B, 0x20E9, 0x590C, 0x386C, 0x590F, 0x0546, 0x5910,
+ 0x11BC, 0x5915, 0x0F26, 0x5916, 0x058E, 0x5918, 0x10DE, 0x5919, 0x0952,
+ 0x591A, 0x0B1F, 0x591B, 0x11BD, 0x591C, 0x0EF7, 0x5922, 0x0EC0, 0x5924,
+ 0x386D, 0x5925, 0x11BF, 0x5927, 0x0B47, 0x5929, 0x0C31, 0x592A, 0x0B20,
+ 0x592B, 0x0DC9, 0x592C, 0x11C0, 0x592D, 0x11C1, 0x592E, 0x051D, 0x592F,
+ 0x386E, 0x5931, 0x08E6, 0x5932, 0x11C2, 0x5937, 0x0494, 0x5938, 0x11C3,
+ 0x5939, 0x3725, 0x593E, 0x11C4, 0x5944, 0x0504, 0x5947, 0x062D, 0x5948,
+ 0x0CB8, 0x5949, 0x0E44, 0x594E, 0x11C8, 0x594F, 0x0AD7, 0x5950, 0x11C7,
+ 0x5951, 0x0716, 0x5953, 0x20EA, 0x5954, 0x0E89, 0x5955, 0x11C6, 0x5957,
+ 0x0C5F, 0x5958, 0x11CA, 0x595A, 0x11C9, 0x595B, 0x20EB, 0x595D, 0x20EC,
+ 0x5960, 0x11CC, 0x5961, 0x386F, 0x5962, 0x11CB, 0x5963, 0x20ED, 0x5965,
+ 0x051E, 0x5967, 0x11CD, 0x5968, 0x0991, 0x5969, 0x11CF, 0x596A, 0x0B63,
+ 0x596C, 0x11CE, 0x596D, 0x3870, 0x596E, 0x0E03, 0x5973, 0x0981, 0x5974,
+ 0x0C55, 0x5978, 0x11D0, 0x597D, 0x07B7, 0x5981, 0x11D1, 0x5982, 0x0CD7,
+ 0x5983, 0x0D72, 0x5984, 0x0EDD, 0x598A, 0x0CDB, 0x598D, 0x11DA, 0x5993,
+ 0x0652, 0x5996, 0x0F2F, 0x5999, 0x0EBB, 0x599B, 0x1239, 0x599D, 0x11D2,
+ 0x59A3, 0x11D5, 0x59A4, 0x20EE, 0x59A5, 0x0B25, 0x59A8, 0x0E66, 0x59AC,
+ 0x0C44, 0x59B2, 0x11D6, 0x59B9, 0x0E93, 0x59BA, 0x20EF, 0x59BB, 0x083A,
+ 0x59BE, 0x0992, 0x59C6, 0x11D7, 0x59C9, 0x089E, 0x59CA, 0x3871, 0x59CB,
+ 0x089D, 0x59D0, 0x047D, 0x59D1, 0x077C, 0x59D2, 0x3872, 0x59D3, 0x0A4F,
+ 0x59D4, 0x0495, 0x59D9, 0x11DB, 0x59DA, 0x11DC, 0x59DC, 0x11D9, 0x59DD,
+ 0x3873, 0x59E3, 0x3874, 0x59E4, 0x3875, 0x59E5, 0x04DA, 0x59E6, 0x05EB,
+ 0x59E8, 0x11D8, 0x59EA, 0x0ED1, 0x59EB, 0x0DA3, 0x59EC, 0x36AD, 0x59F6,
+ 0x046C, 0x59FB, 0x04BD, 0x59FF, 0x089F, 0x5A01, 0x0496, 0x5A03, 0x0467,
+ 0x5A04, 0x3876, 0x5A09, 0x11E1, 0x5A0C, 0x3877, 0x5A11, 0x11DF, 0x5A18,
+ 0x0EC8, 0x5A1A, 0x11E2, 0x5A1B, 0x35C1, 0x5A1C, 0x11E0, 0x5A1F, 0x11DE,
+ 0x5A20, 0x09F7, 0x5A23, 0x3878, 0x5A25, 0x11DD, 0x5A29, 0x0E2A, 0x5A2F,
+ 0x0798, 0x5A35, 0x11E6, 0x5A36, 0x11E7, 0x5A3C, 0x0993, 0x5A40, 0x11E3,
+ 0x5A41, 0x0FD2, 0x5A46, 0x0D02, 0x5A47, 0x3879, 0x5A49, 0x11E5, 0x5A55,
+ 0x387A, 0x5A5A, 0x0817, 0x5A62, 0x11E8, 0x5A63, 0x387B, 0x5A66, 0x0DCA,
+ 0x5A6A, 0x11E9, 0x5A6C, 0x11E4, 0x5A6D, 0x387C, 0x5A7E, 0x387D, 0x5A7F,
+ 0x0EC7, 0x5A92, 0x0D14, 0x5A9A, 0x11EA, 0x5A9B, 0x0DA4, 0x5A9E, 0x387E,
+ 0x5AA7, 0x387F, 0x5AAC, 0x3880, 0x5AB3, 0x3881, 0x5ABC, 0x11EB, 0x5ABD,
+ 0x11EF, 0x5ABE, 0x11EC, 0x5AC1, 0x0547, 0x5AC2, 0x11EE, 0x5AC9, 0x08E7,
+ 0x5ACB, 0x11ED, 0x5ACC, 0x074F, 0x5AD0, 0x11FB, 0x5AD6, 0x11F4, 0x5AD7,
+ 0x11F1, 0x5AE0, 0x3882, 0x5AE1, 0x0BA2, 0x5AE3, 0x11F0, 0x5AE6, 0x11F2,
+ 0x5AE9, 0x11F3, 0x5AFA, 0x11F5, 0x5AFB, 0x11F6, 0x5B00, 0x3883, 0x5B09,
+ 0x062E, 0x5B0B, 0x11F8, 0x5B0C, 0x11F7, 0x5B16, 0x11F9, 0x5B19, 0x3884,
+ 0x5B22, 0x09D6, 0x5B25, 0x3885, 0x5B2A, 0x11FC, 0x5B2C, 0x0BF8, 0x5B2D,
+ 0x3886, 0x5B30, 0x04E7, 0x5B32, 0x11FA, 0x5B36, 0x11FD, 0x5B3E, 0x11FE,
+ 0x5B40, 0x1201, 0x5B41, 0x3887, 0x5B43, 0x11FF, 0x5B45, 0x1200, 0x5B50,
+ 0x08A0, 0x5B51, 0x1202, 0x5B54, 0x07B8, 0x5B55, 0x1203, 0x5B56, 0x20F0,
+ 0x5B57, 0x08C8, 0x5B58, 0x0B18, 0x5B5A, 0x1204, 0x5B5B, 0x1205, 0x5B5C,
+ 0x08A8, 0x5B5D, 0x07B9, 0x5B5F, 0x0EDE, 0x5B63, 0x0642, 0x5B64, 0x077D,
+ 0x5B65, 0x1206, 0x5B66, 0x05B6, 0x5B69, 0x1207, 0x5B6B, 0x0B19, 0x5B70,
+ 0x1208, 0x5B71, 0x1230, 0x5B73, 0x1209, 0x5B75, 0x120A, 0x5B78, 0x120B,
+ 0x5B7A, 0x120D, 0x5B7C, 0x3888, 0x5B7E, 0x3889, 0x5B7F, 0x388A, 0x5B80,
+ 0x120E, 0x5B82, 0x3610, 0x5B83, 0x120F, 0x5B85, 0x0B50, 0x5B87, 0x04C9,
+ 0x5B88, 0x0915, 0x5B89, 0x0486, 0x5B8A, 0x388B, 0x5B8B, 0x0AD9, 0x5B8C,
+ 0x05EC, 0x5B8D, 0x08E1, 0x5B8F, 0x07BA, 0x5B95, 0x0C60, 0x5B97, 0x092B,
+ 0x5B98, 0x05ED, 0x5B99, 0x0BA6, 0x5B9A, 0x0C06, 0x5B9B, 0x047C, 0x5B9C,
+ 0x0653, 0x5B9D, 0x0E45, 0x5B9F, 0x08EE, 0x5BA2, 0x066C, 0x5BA3, 0x0A8F,
+ 0x5BA4, 0x08E8, 0x5BA5, 0x0F12, 0x5BA6, 0x1210, 0x5BAE, 0x0676, 0x5BB0,
+ 0x083B, 0x5BB3, 0x0590, 0x5BB4, 0x0505, 0x5BB5, 0x0994, 0x5BB6, 0x0548,
+ 0x5BB8, 0x1211, 0x5BB9, 0x0F30, 0x5BBF, 0x0953, 0x5BC0, 0x20F1, 0x5BC2,
+ 0x0910, 0x5BC3, 0x1212, 0x5BC4, 0x062F, 0x5BC5, 0x0CAA, 0x5BC6, 0x0EB5,
+ 0x5BC7, 0x1213, 0x5BC9, 0x1214, 0x5BCC, 0x0DCB, 0x5BD0, 0x1216, 0x5BD2,
+ 0x05E4, 0x5BD3, 0x06EF, 0x5BD4, 0x1215, 0x5BD8, 0x20F3, 0x5BDB, 0x05EE,
+ 0x5BDD, 0x09F8, 0x5BDE, 0x121A, 0x5BDF, 0x086F, 0x5BE1, 0x0549, 0x5BE2,
+ 0x1219, 0x5BE4, 0x1217, 0x5BE5, 0x121B, 0x5BE6, 0x1218, 0x5BE7, 0x0CE1,
+ 0x5BE8, 0x148E, 0x5BE9, 0x09F9, 0x5BEB, 0x121C, 0x5BEC, 0x20F4, 0x5BEE,
+ 0x0F88, 0x5BF0, 0x121D, 0x5BF3, 0x121F, 0x5BF5, 0x0BBC, 0x5BF6, 0x121E,
+ 0x5BF8, 0x0A47, 0x5BFA, 0x08C9, 0x5BFE, 0x0B30, 0x5BFF, 0x0923, 0x5C01,
+ 0x0DE7, 0x5C02, 0x0A90, 0x5C04, 0x08F9, 0x5C05, 0x1220, 0x5C06, 0x0995,
+ 0x5C07, 0x1221, 0x5C08, 0x1222, 0x5C09, 0x0497, 0x5C0A, 0x0B1A, 0x5C0B,
+ 0x0A18, 0x5C0D, 0x1223, 0x5C0E, 0x0C8B, 0x5C0F, 0x0996, 0x5C11, 0x0997,
+ 0x5C13, 0x1224, 0x5C14, 0x372A, 0x5C16, 0x0A91, 0x5C19, 0x360B, 0x5C1A,
+ 0x0998, 0x5C1E, 0x20F5, 0x5C20, 0x1225, 0x5C22, 0x1226, 0x5C23, 0x388C,
+ 0x5C24, 0x0EEC, 0x5C28, 0x1227, 0x5C2B, 0x388D, 0x5C2D, 0x06BE, 0x5C30,
+ 0x388E, 0x5C31, 0x092C, 0x5C38, 0x1228, 0x5C39, 0x1229, 0x5C3A, 0x0908,
+ 0x5C3B, 0x09F2, 0x5C3C, 0x0CCC, 0x5C3D, 0x0A1A, 0x5C3E, 0x0D8C, 0x5C3F,
+ 0x0CD8, 0x5C40, 0x06C1, 0x5C41, 0x122A, 0x5C45, 0x0689, 0x5C46, 0x122B,
+ 0x5C48, 0x06F6, 0x5C4A, 0x0CA7, 0x5C4B, 0x0530, 0x5C4D, 0x08A1, 0x5C4E,
+ 0x122C, 0x5C4F, 0x122F, 0x5C50, 0x122E, 0x5C51, 0x06F5, 0x5C53, 0x122D,
+ 0x5C55, 0x0C32, 0x5C5B, 0x1E92, 0x5C5E, 0x0B10, 0x5C60, 0x0C45, 0x5C61,
+ 0x08F4, 0x5C62, 0x1E0D, 0x5C63, 0x388F, 0x5C64, 0x0ADA, 0x5C65, 0x0F64,
+ 0x5C69, 0x3890, 0x5C6C, 0x1231, 0x5C6E, 0x1232, 0x5C6F, 0x0CAE, 0x5C71,
+ 0x0881, 0x5C76, 0x1234, 0x5C79, 0x1235, 0x5C7C, 0x3891, 0x5C8C, 0x1236,
+ 0x5C90, 0x0630, 0x5C91, 0x1237, 0x5C94, 0x1238, 0x5CA1, 0x052C, 0x5CA6,
+ 0x20F6, 0x5CA8, 0x0ABD, 0x5CA9, 0x0620, 0x5CAB, 0x123A, 0x5CAC, 0x0EB4,
+ 0x5CB1, 0x0B32, 0x5CB3, 0x05B7, 0x5CB6, 0x123C, 0x5CB7, 0x123E, 0x5CB8,
+ 0x061B, 0x5CBA, 0x20F7, 0x5CBB, 0x123B, 0x5CBC, 0x123D, 0x5CBE, 0x1240,
+ 0x5CC5, 0x123F, 0x5CC7, 0x1241, 0x5CCB, 0x3892, 0x5CD2, 0x3893, 0x5CD9,
+ 0x1242, 0x5CE0, 0x0C95, 0x5CE1, 0x06A6, 0x5CE6, 0x372C, 0x5CE8, 0x0565,
+ 0x5CE9, 0x1243, 0x5CEA, 0x1248, 0x5CED, 0x1246, 0x5CEF, 0x0E47, 0x5CF0,
+ 0x0E46, 0x5CF4, 0x3894, 0x5CF5, 0x20F8, 0x5CF6, 0x0C61, 0x5CFA, 0x1245,
+ 0x5CFB, 0x095E, 0x5CFD, 0x1244, 0x5D07, 0x0A38, 0x5D0B, 0x1249, 0x5D0E,
+ 0x085A, 0x5D11, 0x124F, 0x5D14, 0x1250, 0x5D15, 0x124A, 0x5D16, 0x0591,
+ 0x5D17, 0x124B, 0x5D18, 0x1254, 0x5D19, 0x1253, 0x5D1A, 0x1252, 0x5D1B,
+ 0x124E, 0x5D1F, 0x124D, 0x5D22, 0x1251, 0x5D24, 0x3895, 0x5D26, 0x3896,
+ 0x5D27, 0x20F9, 0x5D29, 0x0E48, 0x5D42, 0x20FC, 0x5D43, 0x3897, 0x5D46,
+ 0x3898, 0x5D4A, 0x3899, 0x5D4B, 0x1258, 0x5D4C, 0x1255, 0x5D4E, 0x1257,
+ 0x5D50, 0x0F5C, 0x5D52, 0x1256, 0x5D53, 0x20FA, 0x5D5C, 0x124C, 0x5D69,
+ 0x0A39, 0x5D6C, 0x1259, 0x5D6D, 0x20FD, 0x5D6F, 0x0827, 0x5D73, 0x125A,
+ 0x5D76, 0x125B, 0x5D82, 0x125E, 0x5D84, 0x125D, 0x5D87, 0x125C, 0x5D8B,
+ 0x0C62, 0x5D8C, 0x1247, 0x5D90, 0x1264, 0x5D92, 0x389A, 0x5D94, 0x389B,
+ 0x5D99, 0x389C, 0x5D9D, 0x1260, 0x5DA0, 0x389D, 0x5DA2, 0x125F, 0x5DAC,
+ 0x1261, 0x5DAE, 0x1262, 0x5DB2, 0x3BA5, 0x5DB7, 0x1265, 0x5DB8, 0x20FE,
+ 0x5DB9, 0x20FF, 0x5DBA, 0x0FAE, 0x5DBC, 0x1266, 0x5DBD, 0x1263, 0x5DC9,
+ 0x1267, 0x5DCC, 0x061C, 0x5DCD, 0x1268, 0x5DD0, 0x2100, 0x5DD2, 0x126A,
+ 0x5DD3, 0x1269, 0x5DD6, 0x126B, 0x5DD8, 0x389E, 0x5DDB, 0x126C, 0x5DDD,
+ 0x0A92, 0x5DDE, 0x092D, 0x5DE0, 0x389F, 0x5DE1, 0x096E, 0x5DE2, 0x3432,
+ 0x5DE3, 0x0AE5, 0x5DE5, 0x07BB, 0x5DE6, 0x0828, 0x5DE7, 0x07BC, 0x5DE8,
+ 0x068A, 0x5DEB, 0x126D, 0x5DEE, 0x0829, 0x5DF1, 0x077E, 0x5DF2, 0x126E,
+ 0x5DF3, 0x0EB2, 0x5DF4, 0x0CF9, 0x5DF5, 0x126F, 0x5DF7, 0x07BD, 0x5DF8,
+ 0x38A0, 0x5DFB, 0x05E8, 0x5DFD, 0x0B65, 0x5DFE, 0x06CA, 0x5DFF, 0x35E2,
+ 0x5E00, 0x38A1, 0x5E02, 0x08A2, 0x5E03, 0x0DCD, 0x5E06, 0x0D55, 0x5E0B,
+ 0x1270, 0x5E0C, 0x0631, 0x5E11, 0x1273, 0x5E12, 0x38A2, 0x5E14, 0x38A3,
+ 0x5E15, 0x38A4, 0x5E16, 0x0BBD, 0x5E18, 0x38A5, 0x5E19, 0x1272, 0x5E1A,
+ 0x1271, 0x5E1B, 0x1274, 0x5E1D, 0x0C07, 0x5E25, 0x0A29, 0x5E2B, 0x08A3,
+ 0x5E2D, 0x0A6E, 0x5E2E, 0x38A6, 0x5E2F, 0x0B33, 0x5E30, 0x063C, 0x5E33,
+ 0x0BBE, 0x5E36, 0x1275, 0x5E37, 0x1276, 0x5E38, 0x09D7, 0x5E3D, 0x0E67,
+ 0x5E40, 0x1279, 0x5E43, 0x1278, 0x5E44, 0x1277, 0x5E45, 0x0DEF, 0x5E47,
+ 0x1280, 0x5E4C, 0x0E88, 0x5E4E, 0x127A, 0x5E54, 0x127C, 0x5E55, 0x0E99,
+ 0x5E57, 0x127B, 0x5E58, 0x38A7, 0x5E5F, 0x127D, 0x5E61, 0x0D3C, 0x5E62,
+ 0x127E, 0x5E63, 0x0E0E, 0x5E64, 0x127F, 0x5E6B, 0x38A8, 0x5E6C, 0x38A9,
+ 0x5E72, 0x05EF, 0x5E73, 0x0E0F, 0x5E74, 0x0CE5, 0x5E75, 0x1281, 0x5E76,
+ 0x1282, 0x5E78, 0x07BE, 0x5E79, 0x05F0, 0x5E7A, 0x1283, 0x5E7B, 0x076C,
+ 0x5E7C, 0x0F2E, 0x5E7D, 0x0F13, 0x5E7E, 0x0632, 0x5E7F, 0x1285, 0x5E81,
+ 0x0BBF, 0x5E83, 0x07BF, 0x5E84, 0x0999, 0x5E87, 0x0D73, 0x5E8A, 0x099A,
+ 0x5E8F, 0x0982, 0x5E95, 0x0C08, 0x5E96, 0x0E49, 0x5E97, 0x0C33, 0x5E99,
+ 0x36B0, 0x5E9A, 0x07C0, 0x5E9C, 0x0DCE, 0x5EA0, 0x1286, 0x5EA6, 0x0C53,
+ 0x5EA7, 0x0832, 0x5EA8, 0x38AA, 0x5EAA, 0x38AB, 0x5EAB, 0x077F, 0x5EAD,
+ 0x0C09, 0x5EB5, 0x0487, 0x5EB6, 0x0978, 0x5EB7, 0x07C1, 0x5EB8, 0x0F31,
+ 0x5EBE, 0x38AC, 0x5EBF, 0x38AD, 0x5EC1, 0x1287, 0x5EC2, 0x1288, 0x5EC3,
+ 0x0D07, 0x5EC8, 0x1289, 0x5EC9, 0x0FBF, 0x5ECA, 0x0FD3, 0x5ECB, 0x38AE,
+ 0x5ECF, 0x128B, 0x5ED0, 0x128A, 0x5ED2, 0x38AF, 0x5ED3, 0x05A5, 0x5ED6,
+ 0x128C, 0x5EDA, 0x128F, 0x5EDB, 0x1290, 0x5EDD, 0x128E, 0x5EDF, 0x0DB2,
+ 0x5EE0, 0x099B, 0x5EE1, 0x1292, 0x5EE2, 0x1291, 0x5EE3, 0x128D, 0x5EE8,
+ 0x1293, 0x5EE9, 0x1294, 0x5EEC, 0x1295, 0x5EF0, 0x1298, 0x5EF1, 0x1296,
+ 0x5EF3, 0x1297, 0x5EF4, 0x1299, 0x5EF6, 0x0506, 0x5EF7, 0x0C0A, 0x5EF8,
+ 0x129A, 0x5EFA, 0x0750, 0x5EFB, 0x0576, 0x5EFC, 0x0CEC, 0x5EFE, 0x129B,
+ 0x5EFF, 0x0CD3, 0x5F01, 0x0E2B, 0x5F03, 0x129C, 0x5F04, 0x0FD4, 0x5F07,
+ 0x38B0, 0x5F09, 0x129D, 0x5F0A, 0x0E10, 0x5F0B, 0x12A0, 0x5F0C, 0x0FFA,
+ 0x5F0D, 0x100A, 0x5F0E, 0x38B1, 0x5F0F, 0x08DC, 0x5F10, 0x0CCD, 0x5F11,
+ 0x12A1, 0x5F13, 0x0677, 0x5F14, 0x0BC0, 0x5F15, 0x04BE, 0x5F16, 0x12A2,
+ 0x5F17, 0x0DF6, 0x5F18, 0x07C2, 0x5F1B, 0x0B8E, 0x5F1C, 0x38B2, 0x5F1D,
+ 0x38B3, 0x5F1F, 0x0C0B, 0x5F21, 0x2101, 0x5F22, 0x38B4, 0x5F25, 0x0EFB,
+ 0x5F26, 0x076D, 0x5F27, 0x0780, 0x5F28, 0x38B5, 0x5F29, 0x12A3, 0x5F2D,
+ 0x12A4, 0x5F2F, 0x12AA, 0x5F31, 0x0911, 0x5F34, 0x2102, 0x5F35, 0x0BC1,
+ 0x5F36, 0x38B6, 0x5F37, 0x06A7, 0x5F38, 0x12A5, 0x5F3A, 0x3598, 0x5F3B,
+ 0x38B7, 0x5F3C, 0x0D9D, 0x5F3E, 0x0B84, 0x5F40, 0x38B8, 0x5F41, 0x12A6,
+ 0x5F45, 0x20B2, 0x5F48, 0x12A7, 0x5F4A, 0x06A8, 0x5F4C, 0x12A8, 0x5F4E,
+ 0x12A9, 0x5F50, 0x38B9, 0x5F51, 0x12AB, 0x5F53, 0x0C70, 0x5F56, 0x12AC,
+ 0x5F57, 0x12AD, 0x5F58, 0x38BA, 0x5F59, 0x12AE, 0x5F5C, 0x129F, 0x5F5D,
+ 0x129E, 0x5F61, 0x12AF, 0x5F62, 0x0717, 0x5F64, 0x38BB, 0x5F65, 0x36AC,
+ 0x5F66, 0x0D99, 0x5F67, 0x2103, 0x5F69, 0x083C, 0x5F6A, 0x0DA9, 0x5F6B,
+ 0x0BC2, 0x5F6C, 0x0DBD, 0x5F6D, 0x12B0, 0x5F70, 0x099C, 0x5F71, 0x04E8,
+ 0x5F73, 0x12B1, 0x5F77, 0x12B2, 0x5F79, 0x0EFE, 0x5F7C, 0x0D74, 0x5F7F,
+ 0x12B5, 0x5F80, 0x051F, 0x5F81, 0x0A50, 0x5F82, 0x12B4, 0x5F83, 0x12B3,
+ 0x5F84, 0x0718, 0x5F85, 0x0B34, 0x5F87, 0x12B9, 0x5F88, 0x12B7, 0x5F89,
+ 0x38BC, 0x5F8A, 0x12B6, 0x5F8B, 0x0F6F, 0x5F8C, 0x0799, 0x5F90, 0x0983,
+ 0x5F91, 0x12B8, 0x5F92, 0x0C46, 0x5F93, 0x0948, 0x5F97, 0x0C98, 0x5F98,
+ 0x12BC, 0x5F99, 0x12BB, 0x5F9C, 0x38BD, 0x5F9E, 0x12BA, 0x5FA0, 0x12BD,
+ 0x5FA1, 0x079A, 0x5FA4, 0x38BF, 0x5FA7, 0x38BE, 0x5FA8, 0x12BE, 0x5FA9,
+ 0x0DEE, 0x5FAA, 0x0965, 0x5FAD, 0x12BF, 0x5FAE, 0x0D8D, 0x5FAF, 0x38C0,
+ 0x5FB3, 0x0C99, 0x5FB4, 0x0BC3, 0x5FB5, 0x3438, 0x5FB7, 0x2104, 0x5FB8,
+ 0x38C1, 0x5FB9, 0x0C2A, 0x5FBC, 0x12C0, 0x5FBD, 0x0645, 0x5FC3, 0x09FA,
+ 0x5FC4, 0x38C2, 0x5FC5, 0x0D9E, 0x5FC9, 0x38C3, 0x5FCC, 0x0633, 0x5FCD,
+ 0x0CDC, 0x5FD6, 0x12C1, 0x5FD7, 0x08A4, 0x5FD8, 0x0E68, 0x5FD9, 0x0E69,
+ 0x5FDC, 0x0520, 0x5FDD, 0x12C6, 0x5FDE, 0x2105, 0x5FE0, 0x0BA7, 0x5FE1,
+ 0x38C4, 0x5FE4, 0x12C3, 0x5FE9, 0x38C5, 0x5FEB, 0x0577, 0x5FED, 0x38C6,
+ 0x5FF0, 0x12F6, 0x5FF1, 0x12C5, 0x5FF5, 0x0CE6, 0x5FF8, 0x12C4, 0x5FFB,
+ 0x12C2, 0x5FFC, 0x38C7, 0x5FFD, 0x080C, 0x5FFF, 0x12C8, 0x600E, 0x12CE,
+ 0x600F, 0x12D4, 0x6010, 0x12CC, 0x6012, 0x0C56, 0x6015, 0x12D1, 0x6016,
+ 0x0DCF, 0x6017, 0x38C8, 0x6019, 0x12CB, 0x601A, 0x38C9, 0x601B, 0x12D0,
+ 0x601C, 0x0FAF, 0x601D, 0x08A5, 0x6020, 0x0B35, 0x6021, 0x12C9, 0x6025,
+ 0x0678, 0x6026, 0x12D3, 0x6027, 0x0A51, 0x6028, 0x0507, 0x6029, 0x12CD,
+ 0x602A, 0x0578, 0x602B, 0x12D2, 0x602F, 0x06A9, 0x6031, 0x12CF, 0x6033,
+ 0x38CA, 0x603A, 0x12D5, 0x6041, 0x12D7, 0x6042, 0x12E1, 0x6043, 0x12DF,
+ 0x6046, 0x12DC, 0x604A, 0x12DB, 0x604B, 0x0FC0, 0x604D, 0x12DD, 0x6050,
+ 0x06AA, 0x6052, 0x07C3, 0x6055, 0x0984, 0x6059, 0x12E4, 0x605A, 0x12D6,
+ 0x605D, 0x2106, 0x605F, 0x12DA, 0x6060, 0x12CA, 0x6061, 0x38CB, 0x6062,
+ 0x057A, 0x6063, 0x12DE, 0x6064, 0x12E0, 0x6065, 0x0B8F, 0x6068, 0x0818,
+ 0x6069, 0x0538, 0x606A, 0x12D8, 0x606B, 0x12E3, 0x606C, 0x12E2, 0x606D,
+ 0x06AB, 0x606F, 0x0B09, 0x6070, 0x05C4, 0x6075, 0x0719, 0x6077, 0x12D9,
+ 0x607F, 0x38CC, 0x6081, 0x12E5, 0x6083, 0x12E8, 0x6084, 0x12EA, 0x6085,
+ 0x2107, 0x6089, 0x08E9, 0x608A, 0x2108, 0x608B, 0x12F0, 0x608C, 0x0C0C,
+ 0x608D, 0x12E6, 0x6092, 0x12EE, 0x6094, 0x0579, 0x6096, 0x12EC, 0x6097,
+ 0x12ED, 0x609A, 0x12E9, 0x609B, 0x12EB, 0x609E, 0x38CD, 0x609F, 0x079B,
+ 0x60A0, 0x0F14, 0x60A3, 0x05F1, 0x60A4, 0x38CE, 0x60A6, 0x04FB, 0x60A7,
+ 0x12EF, 0x60A9, 0x0CF0, 0x60AA, 0x0471, 0x60B0, 0x38CF, 0x60B2, 0x0D75,
+ 0x60B3, 0x12C7, 0x60B4, 0x12F5, 0x60B5, 0x12F9, 0x60B6, 0x0EF1, 0x60B8,
+ 0x12F2, 0x60BC, 0x0C63, 0x60BD, 0x12F7, 0x60C5, 0x09D8, 0x60C6, 0x12F8,
+ 0x60C7, 0x0CAF, 0x60CB, 0x38D0, 0x60D1, 0x0FED, 0x60D3, 0x12F4, 0x60D5,
+ 0x210A, 0x60D8, 0x12FA, 0x60DA, 0x080D, 0x60DB, 0x38D1, 0x60DC, 0x0A6F,
+ 0x60DE, 0x2109, 0x60DF, 0x0498, 0x60E0, 0x12F3, 0x60E1, 0x12F1, 0x60E3,
+ 0x0ADC, 0x60E7, 0x12E7, 0x60E8, 0x0882, 0x60F0, 0x0B26, 0x60F1, 0x1306,
+ 0x60F2, 0x210C, 0x60F3, 0x0ADD, 0x60F4, 0x1301, 0x60F6, 0x12FE, 0x60F7,
+ 0x12FF, 0x60F8, 0x38D2, 0x60F9, 0x0912, 0x60FA, 0x1302, 0x60FB, 0x1305,
+ 0x6100, 0x1300, 0x6101, 0x092F, 0x6103, 0x1303, 0x6106, 0x12FD, 0x6108,
+ 0x0F08, 0x6109, 0x0F07, 0x610D, 0x1307, 0x610E, 0x1308, 0x610F, 0x0499,
+ 0x6111, 0x210D, 0x6112, 0x38D3, 0x6113, 0x38D4, 0x6114, 0x38D5, 0x6115,
+ 0x12FC, 0x611A, 0x06EA, 0x611B, 0x046A, 0x611C, 0x38D6, 0x611F, 0x05F2,
+ 0x6120, 0x210B, 0x6121, 0x1304, 0x6127, 0x130C, 0x6128, 0x130B, 0x612C,
+ 0x1310, 0x6130, 0x210F, 0x6134, 0x1311, 0x6137, 0x210E, 0x613C, 0x130F,
+ 0x613D, 0x1312, 0x613E, 0x130A, 0x613F, 0x130E, 0x6142, 0x1313, 0x6144,
+ 0x1314, 0x6147, 0x1309, 0x6148, 0x08CA, 0x614A, 0x130D, 0x614B, 0x0B36,
+ 0x614C, 0x07C4, 0x614D, 0x12FB, 0x614E, 0x09FB, 0x6153, 0x1321, 0x6155,
+ 0x0E39, 0x6158, 0x1317, 0x6159, 0x1318, 0x615A, 0x1319, 0x615D, 0x1320,
+ 0x615F, 0x131F, 0x6162, 0x0EAB, 0x6163, 0x05F3, 0x6165, 0x131D, 0x6167,
+ 0x071B, 0x6168, 0x0592, 0x616B, 0x131A, 0x616E, 0x0F80, 0x616F, 0x131C,
+ 0x6170, 0x049A, 0x6171, 0x131E, 0x6173, 0x1315, 0x6174, 0x131B, 0x6175,
+ 0x1322, 0x6176, 0x071A, 0x6177, 0x1316, 0x617C, 0x38D7, 0x617E, 0x0F47,
+ 0x6182, 0x0F15, 0x6187, 0x1325, 0x618A, 0x1329, 0x618D, 0x38D8, 0x618E,
+ 0x0B00, 0x6190, 0x0FC1, 0x6191, 0x132A, 0x6194, 0x1327, 0x6196, 0x1324,
+ 0x6198, 0x2110, 0x6199, 0x1323, 0x619A, 0x1328, 0x619F, 0x38D9, 0x61A4,
+ 0x0E00, 0x61A7, 0x0C8C, 0x61A8, 0x38DA, 0x61A9, 0x071C, 0x61AB, 0x132B,
+ 0x61AC, 0x1326, 0x61AE, 0x132C, 0x61B2, 0x0751, 0x61B6, 0x0531, 0x61BA,
+ 0x1334, 0x61BE, 0x05F4, 0x61C2, 0x38DB, 0x61C3, 0x1332, 0x61C6, 0x1333,
+ 0x61C7, 0x0819, 0x61C8, 0x1331, 0x61C9, 0x132F, 0x61CA, 0x132E, 0x61CB,
+ 0x1335, 0x61CC, 0x132D, 0x61CD, 0x1337, 0x61D0, 0x057B, 0x61DF, 0x38DC,
+ 0x61E3, 0x1339, 0x61E6, 0x1338, 0x61F2, 0x0BC4, 0x61F4, 0x133C, 0x61F6,
+ 0x133A, 0x61F7, 0x1330, 0x61F8, 0x0752, 0x61FA, 0x133B, 0x61FC, 0x133F,
+ 0x61FD, 0x133E, 0x61FE, 0x1340, 0x61FF, 0x133D, 0x6200, 0x1341, 0x6208,
+ 0x1342, 0x6209, 0x1343, 0x620A, 0x0E3A, 0x620C, 0x1345, 0x620D, 0x1344,
+ 0x620E, 0x0949, 0x6210, 0x0A52, 0x6211, 0x0566, 0x6212, 0x057C, 0x6213,
+ 0x2111, 0x6214, 0x1346, 0x6215, 0x38DD, 0x6216, 0x0483, 0x621A, 0x0A70,
+ 0x621B, 0x1347, 0x621D, 0x1A64, 0x621E, 0x1348, 0x621F, 0x0737, 0x6221,
+ 0x1349, 0x6226, 0x0A93, 0x6229, 0x38DE, 0x622A, 0x134A, 0x622E, 0x134B,
+ 0x622F, 0x0654, 0x6230, 0x134C, 0x6232, 0x134D, 0x6233, 0x134E, 0x6234,
+ 0x0B37, 0x6236, 0x35BD, 0x6238, 0x0781, 0x623B, 0x0EED, 0x623E, 0x344E,
+ 0x623F, 0x0E6A, 0x6240, 0x0974, 0x6241, 0x134F, 0x6243, 0x38DF, 0x6246,
+ 0x38E0, 0x6247, 0x0A94, 0x6248, 0x1B1A, 0x6249, 0x0D76, 0x624B, 0x0916,
+ 0x624C, 0x38E1, 0x624D, 0x083D, 0x624E, 0x1350, 0x6251, 0x38E2, 0x6253,
+ 0x0B27, 0x6255, 0x0DF7, 0x6256, 0x38E3, 0x6258, 0x0B51, 0x625B, 0x1353,
+ 0x625E, 0x1351, 0x6260, 0x1354, 0x6263, 0x1352, 0x6268, 0x1355, 0x626E,
+ 0x0E01, 0x6271, 0x047B, 0x6276, 0x0DD0, 0x6279, 0x0D77, 0x627C, 0x1356,
+ 0x627E, 0x1359, 0x627F, 0x099D, 0x6280, 0x0655, 0x6282, 0x1357, 0x6283,
+ 0x135E, 0x6284, 0x099E, 0x6285, 0x35C5, 0x6289, 0x1358, 0x628A, 0x0CFA,
+ 0x6291, 0x0F48, 0x6292, 0x135A, 0x6293, 0x135B, 0x6294, 0x135F, 0x6295,
+ 0x0C64, 0x6296, 0x135C, 0x6297, 0x07C5, 0x6298, 0x0A82, 0x629B, 0x136D,
+ 0x629C, 0x0D48, 0x629E, 0x0B52, 0x62A6, 0x2112, 0x62AB, 0x0D78, 0x62AC,
+ 0x13B2, 0x62B1, 0x0E4A, 0x62B5, 0x0C0D, 0x62B9, 0x0EA3, 0x62BB, 0x1362,
+ 0x62BC, 0x0521, 0x62BD, 0x0BA8, 0x62C2, 0x136B, 0x62C4, 0x38E4, 0x62C5,
+ 0x0B72, 0x62C6, 0x1365, 0x62C7, 0x136C, 0x62C8, 0x1367, 0x62C9, 0x136E,
+ 0x62CA, 0x136A, 0x62CC, 0x1369, 0x62CD, 0x0D25, 0x62CF, 0x1363, 0x62D0,
+ 0x057D, 0x62D1, 0x1361, 0x62D2, 0x068B, 0x62D3, 0x0B53, 0x62D4, 0x135D,
+ 0x62D7, 0x1360, 0x62D8, 0x07C6, 0x62D9, 0x0A7F, 0x62DB, 0x099F, 0x62DC,
+ 0x1368, 0x62DD, 0x0D08, 0x62E0, 0x068C, 0x62E1, 0x05A6, 0x62EC, 0x05C5,
+ 0x62ED, 0x09E7, 0x62EE, 0x1370, 0x62EF, 0x1375, 0x62F1, 0x1371, 0x62F3,
+ 0x0753, 0x62F5, 0x1376, 0x62F6, 0x0870, 0x62F7, 0x07FB, 0x62FC, 0x38E5,
+ 0x62FE, 0x0930, 0x62FF, 0x1364, 0x6301, 0x08CB, 0x6302, 0x1373, 0x6307,
+ 0x08A6, 0x6308, 0x1374, 0x6309, 0x0488, 0x630A, 0x38E6, 0x630C, 0x136F,
+ 0x630D, 0x38E7, 0x6311, 0x0BC5, 0x6318, 0x38E8, 0x6319, 0x068D, 0x631B,
+ 0x3737, 0x631F, 0x06AC, 0x6327, 0x1372, 0x6328, 0x046B, 0x632B, 0x0833,
+ 0x632F, 0x09FC, 0x6339, 0x38E9, 0x633A, 0x0C0E, 0x633D, 0x0D68, 0x633E,
+ 0x1378, 0x633F, 0x0AE0, 0x6342, 0x38EA, 0x6343, 0x38EB, 0x6349, 0x0B0A,
+ 0x634C, 0x0879, 0x634D, 0x1379, 0x634F, 0x137B, 0x6350, 0x1377, 0x6355,
+ 0x0E31, 0x6357, 0x0BD9, 0x635C, 0x0ADE, 0x6365, 0x38EC, 0x6367, 0x0E4B,
+ 0x6368, 0x08FA, 0x6369, 0x1387, 0x636B, 0x1386, 0x636E, 0x0A3E, 0x6372,
+ 0x0754, 0x6374, 0x38ED, 0x6376, 0x1380, 0x6377, 0x09A1, 0x637A, 0x0CC0,
+ 0x637B, 0x0CE7, 0x637D, 0x38EE, 0x6380, 0x137E, 0x6383, 0x0ADF, 0x6384,
+ 0x38EF, 0x6387, 0x38F0, 0x6388, 0x0924, 0x6389, 0x1383, 0x638C, 0x09A0,
+ 0x638E, 0x137D, 0x638F, 0x1382, 0x6390, 0x38F1, 0x6392, 0x0D09, 0x6396,
+ 0x137C, 0x6398, 0x06F7, 0x639B, 0x05BB, 0x639E, 0x38F2, 0x639F, 0x1384,
+ 0x63A0, 0x0F73, 0x63A1, 0x083E, 0x63A2, 0x0B73, 0x63A3, 0x1381, 0x63A5,
+ 0x0A80, 0x63A7, 0x07C7, 0x63A8, 0x0A2A, 0x63A9, 0x0508, 0x63AA, 0x0ABE,
+ 0x63AB, 0x137F, 0x63AC, 0x065F, 0x63B2, 0x071D, 0x63B4, 0x0BEB, 0x63B5,
+ 0x1385, 0x63BB, 0x0AE1, 0x63BE, 0x1388, 0x63C0, 0x138A, 0x63C3, 0x0B17,
+ 0x63C4, 0x1390, 0x63C6, 0x138B, 0x63C9, 0x138D, 0x63CF, 0x0DB3, 0x63D0,
+ 0x0C0F, 0x63D1, 0x38F3, 0x63D2, 0x138E, 0x63D6, 0x0F16, 0x63DA, 0x0F32,
+ 0x63DB, 0x05F5, 0x63DC, 0x38F4, 0x63E1, 0x0472, 0x63E3, 0x138C, 0x63E9,
+ 0x1389, 0x63ED, 0x341C, 0x63EE, 0x0634, 0x63F4, 0x0509, 0x63F5, 0x2113,
+ 0x63F6, 0x138F, 0x63F7, 0x3644, 0x63FA, 0x0F33, 0x6406, 0x1393, 0x6409,
+ 0x38F5, 0x640D, 0x0B1B, 0x640F, 0x139A, 0x6410, 0x38F6, 0x6413, 0x1394,
+ 0x6414, 0x1E2C, 0x6416, 0x1391, 0x6417, 0x1398, 0x641C, 0x137A, 0x6422,
+ 0x38F7, 0x6426, 0x1395, 0x6428, 0x1399, 0x642C, 0x0D56, 0x642D, 0x0C65,
+ 0x6434, 0x1392, 0x6436, 0x1396, 0x643A, 0x071E, 0x643E, 0x0861, 0x6442,
+ 0x0A81, 0x644E, 0x139E, 0x6451, 0x1E43, 0x6454, 0x38F8, 0x6458, 0x0C20,
+ 0x645B, 0x38F9, 0x6460, 0x2114, 0x6467, 0x139B, 0x6469, 0x0E8E, 0x646D,
+ 0x38FA, 0x646F, 0x139C, 0x6476, 0x139D, 0x6478, 0x0EDA, 0x647A, 0x0A46,
+ 0x647B, 0x38FB, 0x6483, 0x0738, 0x6488, 0x13A4, 0x6492, 0x0883, 0x6493,
+ 0x13A1, 0x6495, 0x13A0, 0x649A, 0x0CE8, 0x649D, 0x2115, 0x649E, 0x0C8D,
+ 0x64A4, 0x0C2B, 0x64A5, 0x13A2, 0x64A9, 0x13A3, 0x64AB, 0x0DE1, 0x64AD,
+ 0x0CFB, 0x64AE, 0x0871, 0x64B0, 0x0A95, 0x64B2, 0x0E7E, 0x64B9, 0x05A7,
+ 0x64BB, 0x13AA, 0x64BC, 0x13A5, 0x64BE, 0x38FC, 0x64BF, 0x38FD, 0x64C1,
+ 0x0F34, 0x64C2, 0x13AC, 0x64C5, 0x13A8, 0x64C7, 0x13A9, 0x64CA, 0x341D,
+ 0x64CD, 0x0AE2, 0x64CE, 0x2116, 0x64D2, 0x13A7, 0x64D4, 0x1366, 0x64D8,
+ 0x13AB, 0x64DA, 0x13A6, 0x64E0, 0x13B0, 0x64E1, 0x13B1, 0x64E2, 0x0C21,
+ 0x64E3, 0x13B3, 0x64E5, 0x38FE, 0x64E6, 0x0872, 0x64E7, 0x13AE, 0x64EC,
+ 0x0656, 0x64EF, 0x13B4, 0x64F1, 0x13AD, 0x64F2, 0x13B8, 0x64F4, 0x13B7,
+ 0x64F6, 0x13B6, 0x64F7, 0x38FF, 0x64FA, 0x13B9, 0x64FB, 0x3900, 0x64FD,
+ 0x13BB, 0x64FE, 0x09D9, 0x6500, 0x13BA, 0x6504, 0x3901, 0x6505, 0x13BE,
+ 0x6516, 0x3902, 0x6518, 0x13BC, 0x6519, 0x3903, 0x651C, 0x13BD, 0x651D,
+ 0x1397, 0x6522, 0x1E97, 0x6523, 0x13C0, 0x6524, 0x13BF, 0x652A, 0x139F,
+ 0x652B, 0x13C1, 0x652C, 0x13B5, 0x652F, 0x08A7, 0x6534, 0x13C2, 0x6535,
+ 0x13C3, 0x6536, 0x13C5, 0x6537, 0x13C4, 0x6538, 0x13C6, 0x6539, 0x057E,
+ 0x653B, 0x07C8, 0x653E, 0x0E4C, 0x653F, 0x0A53, 0x6545, 0x0782, 0x6547,
+ 0x3904, 0x6548, 0x13C8, 0x654D, 0x13CB, 0x654E, 0x2117, 0x654F, 0x0DC4,
+ 0x6551, 0x0679, 0x6555, 0x13CA, 0x6556, 0x13C9, 0x6557, 0x0D0A, 0x6558,
+ 0x13CC, 0x6559, 0x06AD, 0x655D, 0x13CE, 0x655E, 0x13CD, 0x6562, 0x05F6,
+ 0x6563, 0x0884, 0x6566, 0x0CB0, 0x6567, 0x3905, 0x656C, 0x071F, 0x6570,
+ 0x0A3A, 0x6572, 0x13CF, 0x6574, 0x0A54, 0x6575, 0x0C22, 0x6577, 0x0DD1,
+ 0x6578, 0x13D0, 0x6581, 0x3906, 0x6582, 0x13D1, 0x6583, 0x13D2, 0x6585,
+ 0x3907, 0x6587, 0x0E08, 0x6588, 0x120C, 0x6589, 0x0A6A, 0x658C, 0x0DBE,
+ 0x658E, 0x0848, 0x6590, 0x0D79, 0x6591, 0x0D57, 0x6597, 0x0C47, 0x6599,
+ 0x0F89, 0x659B, 0x13D4, 0x659C, 0x08FC, 0x659F, 0x13D5, 0x65A1, 0x047A,
+ 0x65A4, 0x06CC, 0x65A5, 0x0A71, 0x65A7, 0x0DD2, 0x65AB, 0x13D6, 0x65AC,
+ 0x0890, 0x65AD, 0x0B85, 0x65AF, 0x08A9, 0x65B0, 0x09FD, 0x65B7, 0x13D7,
+ 0x65B9, 0x0E4D, 0x65BC, 0x0519, 0x65BD, 0x08AA, 0x65C1, 0x13DA, 0x65C2,
+ 0x3908, 0x65C3, 0x13D8, 0x65C4, 0x13DB, 0x65C5, 0x0F81, 0x65C6, 0x13D9,
+ 0x65CB, 0x0A9F, 0x65CC, 0x13DC, 0x65CF, 0x0B12, 0x65D2, 0x13DD, 0x65D7,
+ 0x0636, 0x65D9, 0x13DF, 0x65DB, 0x13DE, 0x65E0, 0x13E0, 0x65E1, 0x13E1,
+ 0x65E2, 0x0637, 0x65E3, 0x3585, 0x65E5, 0x0CD4, 0x65E6, 0x0B74, 0x65E7,
+ 0x0686, 0x65E8, 0x08AB, 0x65E9, 0x0AE3, 0x65EC, 0x0966, 0x65ED, 0x0474,
+ 0x65F0, 0x3909, 0x65F1, 0x13E2, 0x65F2, 0x390A, 0x65FA, 0x0522, 0x65FB,
+ 0x13E6, 0x6600, 0x2118, 0x6602, 0x07C9, 0x6603, 0x13E5, 0x6606, 0x081B,
+ 0x6607, 0x09A2, 0x6609, 0x211A, 0x660A, 0x13E4, 0x660C, 0x09A3, 0x660E,
+ 0x0ECC, 0x660F, 0x081A, 0x6613, 0x049B, 0x6614, 0x0A72, 0x6615, 0x2119,
+ 0x661C, 0x13EB, 0x661E, 0x211C, 0x661F, 0x0A55, 0x6620, 0x04E9, 0x6624,
+ 0x211D, 0x6625, 0x095F, 0x6627, 0x0E94, 0x6628, 0x0862, 0x662C, 0x390B,
+ 0x662D, 0x09A4, 0x662E, 0x211B, 0x662F, 0x0A4B, 0x6631, 0x20AE, 0x6634,
+ 0x13EA, 0x6635, 0x13E8, 0x6636, 0x13E9, 0x663B, 0x1E00, 0x663C, 0x0BA9,
+ 0x663F, 0x1409, 0x6641, 0x13EF, 0x6642, 0x08CC, 0x6643, 0x07CA, 0x6644,
+ 0x13ED, 0x6649, 0x13EE, 0x664B, 0x09FE, 0x664C, 0x390C, 0x664F, 0x13EC,
+ 0x6652, 0x087D, 0x6657, 0x211F, 0x6659, 0x2120, 0x665B, 0x390D, 0x665C,
+ 0x390E, 0x665D, 0x13F1, 0x665E, 0x13F0, 0x665F, 0x13F5, 0x6661, 0x390F,
+ 0x6662, 0x13F6, 0x6663, 0x373A, 0x6664, 0x13F2, 0x6665, 0x211E, 0x6666,
+ 0x0580, 0x6667, 0x13F3, 0x6668, 0x13F4, 0x6669, 0x0D69, 0x666B, 0x3910,
+ 0x666E, 0x0DD3, 0x666F, 0x0720, 0x6670, 0x13F7, 0x6673, 0x2122, 0x6674,
+ 0x0A56, 0x6676, 0x09A5, 0x6677, 0x3911, 0x667A, 0x0B90, 0x6681, 0x06BF,
+ 0x6683, 0x13F8, 0x6684, 0x13FC, 0x6687, 0x054B, 0x6688, 0x13F9, 0x6689,
+ 0x13FB, 0x668E, 0x13FA, 0x6691, 0x0975, 0x6696, 0x0B86, 0x6697, 0x0489,
+ 0x6698, 0x13FD, 0x6699, 0x2123, 0x669D, 0x13FE, 0x66A0, 0x2124, 0x66A2,
+ 0x0BC6, 0x66A4, 0x3912, 0x66A6, 0x0FB9, 0x66AB, 0x0891, 0x66AE, 0x0E3B,
+ 0x66B2, 0x2125, 0x66B4, 0x0E6B, 0x66B8, 0x1405, 0x66B9, 0x1400, 0x66BC,
+ 0x1403, 0x66BE, 0x1402, 0x66BF, 0x2126, 0x66C1, 0x13FF, 0x66C4, 0x1404,
+ 0x66C6, 0x3455, 0x66C7, 0x0CB6, 0x66C8, 0x3913, 0x66C9, 0x1401, 0x66D6,
+ 0x1406, 0x66D9, 0x0976, 0x66DA, 0x1407, 0x66DC, 0x0F35, 0x66DD, 0x0D2E,
+ 0x66E0, 0x1408, 0x66E6, 0x140A, 0x66E9, 0x140B, 0x66EC, 0x3914, 0x66F0,
+ 0x140C, 0x66F2, 0x06C2, 0x66F3, 0x04EA, 0x66F4, 0x07CB, 0x66F5, 0x140D,
+ 0x66F7, 0x140E, 0x66F8, 0x097B, 0x66F9, 0x0AE4, 0x66FA, 0x2127, 0x66FB,
+ 0x20B1, 0x66FC, 0x10ED, 0x66FD, 0x0AC0, 0x66FE, 0x0ABF, 0x66FF, 0x0B38,
+ 0x6700, 0x0837, 0x6703, 0x104B, 0x6705, 0x3915, 0x6708, 0x0744, 0x6709,
+ 0x0F17, 0x670B, 0x0E4E, 0x670D, 0x0DF0, 0x670E, 0x2128, 0x670F, 0x140F,
+ 0x6713, 0x3916, 0x6714, 0x0863, 0x6715, 0x0BDB, 0x6716, 0x1410, 0x6717,
+ 0x0FD5, 0x671B, 0x0E6C, 0x671D, 0x0BC7, 0x671E, 0x1411, 0x671F, 0x0638,
+ 0x6726, 0x1412, 0x6727, 0x1413, 0x6728, 0x0EE6, 0x672A, 0x0EB0, 0x672B,
+ 0x0EA4, 0x672C, 0x0E8A, 0x672D, 0x0873, 0x672E, 0x1415, 0x6731, 0x0917,
+ 0x6733, 0x3917, 0x6734, 0x0E7F, 0x6736, 0x1417, 0x6737, 0x141A, 0x6738,
+ 0x1419, 0x673A, 0x0635, 0x673D, 0x067A, 0x673F, 0x1416, 0x6741, 0x1418,
+ 0x6743, 0x35B7, 0x6746, 0x141B, 0x6748, 0x3918, 0x6749, 0x0A3F, 0x674C,
+ 0x3919, 0x674E, 0x0F65, 0x674F, 0x048D, 0x6750, 0x0850, 0x6751, 0x0B1C,
+ 0x6753, 0x0909, 0x6756, 0x09DB, 0x6759, 0x141E, 0x675C, 0x0C48, 0x675E,
+ 0x141C, 0x675F, 0x0B0B, 0x6760, 0x141D, 0x6761, 0x09DA, 0x6762, 0x0EE9,
+ 0x6763, 0x141F, 0x6764, 0x1420, 0x6765, 0x0F52, 0x6766, 0x212A, 0x676A,
+ 0x1425, 0x676D, 0x07CC, 0x676E, 0x3571, 0x676F, 0x0D0B, 0x6770, 0x1422,
+ 0x6771, 0x0C66, 0x6772, 0x13E3, 0x6773, 0x13E7, 0x6775, 0x0669, 0x6776,
+ 0x391A, 0x6777, 0x0CFD, 0x677B, 0x391B, 0x677C, 0x1424, 0x677E, 0x09A6,
+ 0x677F, 0x0D58, 0x6785, 0x142A, 0x6787, 0x0D8E, 0x6789, 0x1421, 0x678B,
+ 0x1427, 0x678C, 0x1426, 0x6790, 0x0A73, 0x6795, 0x0E9B, 0x6797, 0x0F9B,
+ 0x679A, 0x0E95, 0x679C, 0x054C, 0x679D, 0x08AC, 0x67A0, 0x0FEE, 0x67A1,
+ 0x1429, 0x67A2, 0x0A3B, 0x67A6, 0x1428, 0x67A9, 0x1423, 0x67AF, 0x0783,
+ 0x67B0, 0x391C, 0x67B2, 0x391D, 0x67B3, 0x142F, 0x67B4, 0x142D, 0x67B6,
+ 0x054D, 0x67B7, 0x142B, 0x67B8, 0x1431, 0x67B9, 0x1437, 0x67BB, 0x212B,
+ 0x67C0, 0x212D, 0x67C1, 0x0B28, 0x67C4, 0x0E11, 0x67C6, 0x1439, 0x67CA,
+ 0x0D94, 0x67CE, 0x1438, 0x67CF, 0x0D26, 0x67D0, 0x0E6D, 0x67D1, 0x05F7,
+ 0x67D3, 0x0A9B, 0x67D4, 0x094A, 0x67D7, 0x391F, 0x67D8, 0x0BEF, 0x67D9,
+ 0x3920, 0x67DA, 0x0F18, 0x67DD, 0x1434, 0x67DE, 0x1433, 0x67E2, 0x1435,
+ 0x67E4, 0x1432, 0x67E7, 0x143A, 0x67E9, 0x1430, 0x67EC, 0x142E, 0x67EE,
+ 0x1436, 0x67EF, 0x142C, 0x67F0, 0x3921, 0x67F1, 0x0BAA, 0x67F3, 0x0F04,
+ 0x67F4, 0x08F2, 0x67F5, 0x0864, 0x67F9, 0x391E, 0x67FB, 0x082A, 0x67FE,
+ 0x0E9D, 0x67FF, 0x059F, 0x6801, 0x212E, 0x6802, 0x0BEA, 0x6803, 0x0CA2,
+ 0x6804, 0x04EB, 0x6805, 0x1E07, 0x6813, 0x0A96, 0x6816, 0x0A58, 0x6817,
+ 0x0700, 0x681E, 0x143C, 0x6821, 0x07CD, 0x6822, 0x05DA, 0x6829, 0x143E,
+ 0x682A, 0x05D2, 0x682B, 0x1444, 0x682C, 0x3922, 0x6830, 0x3923, 0x6831,
+ 0x3924, 0x6832, 0x1441, 0x6834, 0x0A97, 0x6838, 0x05A9, 0x6839, 0x081C,
+ 0x683C, 0x05A8, 0x683D, 0x083F, 0x6840, 0x143F, 0x6841, 0x073B, 0x6842,
+ 0x0721, 0x6843, 0x0C67, 0x6844, 0x212F, 0x6846, 0x143D, 0x6848, 0x048A,
+ 0x684D, 0x1440, 0x684E, 0x1442, 0x6850, 0x06C5, 0x6851, 0x0702, 0x6852,
+ 0x212C, 0x6853, 0x05F8, 0x6854, 0x0665, 0x6859, 0x1445, 0x685B, 0x3925,
+ 0x685C, 0x0869, 0x685D, 0x0E9F, 0x685F, 0x0885, 0x6863, 0x1446, 0x6867,
+ 0x0DA2, 0x6872, 0x3926, 0x6874, 0x1452, 0x6875, 0x3927, 0x6876, 0x0533,
+ 0x6877, 0x1447, 0x687A, 0x3928, 0x687E, 0x1458, 0x687F, 0x1448, 0x6881,
+ 0x0F8A, 0x6883, 0x144F, 0x6884, 0x3929, 0x6885, 0x0D15, 0x688D, 0x1457,
+ 0x688E, 0x1E9C, 0x688F, 0x144A, 0x6893, 0x0478, 0x6894, 0x144C, 0x6897,
+ 0x07CE, 0x689B, 0x144E, 0x689D, 0x144D, 0x689F, 0x1449, 0x68A0, 0x1454,
+ 0x68A2, 0x09A7, 0x68A5, 0x392A, 0x68A6, 0x11BE, 0x68A7, 0x079C, 0x68A8,
+ 0x0F66, 0x68AD, 0x144B, 0x68AF, 0x0C10, 0x68B0, 0x0581, 0x68B1, 0x081D,
+ 0x68B2, 0x392B, 0x68B3, 0x1443, 0x68B5, 0x1453, 0x68B6, 0x05BF, 0x68B9,
+ 0x1451, 0x68BA, 0x1455, 0x68BC, 0x0C68, 0x68C4, 0x063A, 0x68C6, 0x1473,
+ 0x68C8, 0x20AF, 0x68C9, 0x0ED5, 0x68CA, 0x145A, 0x68CB, 0x0639, 0x68CD,
+ 0x1461, 0x68CF, 0x2130, 0x68D0, 0x392C, 0x68D2, 0x0E6E, 0x68D4, 0x1462,
+ 0x68D5, 0x1464, 0x68D6, 0x392D, 0x68D7, 0x1468, 0x68D8, 0x145C, 0x68DA,
+ 0x0B68, 0x68DF, 0x0C69, 0x68E0, 0x146C, 0x68E1, 0x145F, 0x68E3, 0x1469,
+ 0x68E7, 0x1463, 0x68E8, 0x392E, 0x68ED, 0x392F, 0x68EE, 0x09FF, 0x68EF,
+ 0x146D, 0x68F0, 0x3930, 0x68F1, 0x3931, 0x68F2, 0x0A57, 0x68F9, 0x146B,
+ 0x68FA, 0x05F9, 0x68FC, 0x3932, 0x6900, 0x0FF6, 0x6901, 0x1459, 0x6904,
+ 0x1467, 0x6905, 0x049C, 0x6908, 0x145B, 0x690B, 0x0EC6, 0x690C, 0x1460,
+ 0x690D, 0x09E8, 0x690E, 0x0BE3, 0x690F, 0x1456, 0x6911, 0x3933, 0x6912,
+ 0x1466, 0x6913, 0x3934, 0x6919, 0x0A40, 0x691A, 0x1470, 0x691B, 0x05CF,
+ 0x691C, 0x0755, 0x6921, 0x1472, 0x6922, 0x145D, 0x6923, 0x1471, 0x6925,
+ 0x146A, 0x6926, 0x145E, 0x6928, 0x146E, 0x692A, 0x146F, 0x6930, 0x1480,
+ 0x6934, 0x0CA6, 0x6935, 0x3935, 0x6936, 0x1465, 0x6939, 0x147C, 0x693B,
+ 0x3936, 0x693D, 0x147E, 0x693F, 0x0BF4, 0x694A, 0x0F36, 0x6953, 0x0DE8,
+ 0x6954, 0x1479, 0x6955, 0x0B2A, 0x6957, 0x3937, 0x6959, 0x147F, 0x695A,
+ 0x0AC1, 0x695C, 0x1476, 0x695D, 0x1483, 0x695E, 0x1482, 0x6960, 0x0CC7,
+ 0x6961, 0x1481, 0x6962, 0x0CC2, 0x6963, 0x3938, 0x6968, 0x2132, 0x696A,
+ 0x1485, 0x696B, 0x1478, 0x696D, 0x06C0, 0x696E, 0x147B, 0x696F, 0x0967,
+ 0x6972, 0x3939, 0x6973, 0x0D16, 0x6974, 0x147D, 0x6975, 0x06C3, 0x6977,
+ 0x1475, 0x6978, 0x1477, 0x6979, 0x1474, 0x697C, 0x0FD6, 0x697D, 0x05B8,
+ 0x697E, 0x147A, 0x697F, 0x393A, 0x6980, 0x393B, 0x6981, 0x1484, 0x6982,
+ 0x0593, 0x698A, 0x0857, 0x698E, 0x04FF, 0x6991, 0x1495, 0x6994, 0x0FD7,
+ 0x6995, 0x1498, 0x6998, 0x2134, 0x699B, 0x0A00, 0x699C, 0x1497, 0x69A0,
+ 0x1496, 0x69A6, 0x393C, 0x69A7, 0x1493, 0x69AD, 0x393D, 0x69AE, 0x1487,
+ 0x69B1, 0x14A4, 0x69B2, 0x1486, 0x69B4, 0x1499, 0x69B7, 0x393E, 0x69BB,
+ 0x1491, 0x69BE, 0x148C, 0x69BF, 0x1489, 0x69C1, 0x148A, 0x69C3, 0x1492,
+ 0x69C7, 0x1D33, 0x69CA, 0x148F, 0x69CB, 0x07CF, 0x69CC, 0x0BE4, 0x69CD,
+ 0x0AE6, 0x69CE, 0x148D, 0x69D0, 0x1488, 0x69D3, 0x148B, 0x69D6, 0x393F,
+ 0x69D7, 0x3940, 0x69D8, 0x0F37, 0x69D9, 0x0E98, 0x69DD, 0x1490, 0x69DE,
+ 0x149A, 0x69E2, 0x2135, 0x69E7, 0x14A2, 0x69E8, 0x149B, 0x69EA, 0x356F,
+ 0x69EB, 0x14A8, 0x69ED, 0x14A6, 0x69F2, 0x14A1, 0x69F6, 0x373F, 0x69F9,
+ 0x14A0, 0x69FB, 0x0BEC, 0x69FD, 0x0AE7, 0x69FF, 0x149E, 0x6A01, 0x3941,
+ 0x6A02, 0x149C, 0x6A05, 0x14A3, 0x6A0A, 0x14A9, 0x6A0B, 0x0D89, 0x6A0C,
+ 0x14AF, 0x6A0F, 0x3942, 0x6A12, 0x14AA, 0x6A13, 0x14AD, 0x6A14, 0x14A7,
+ 0x6A15, 0x3943, 0x6A17, 0x0BB2, 0x6A19, 0x0DAA, 0x6A1B, 0x149D, 0x6A1E,
+ 0x14A5, 0x6A1F, 0x09A8, 0x6A21, 0x0EDB, 0x6A22, 0x14B9, 0x6A23, 0x14AC,
+ 0x6A28, 0x3944, 0x6A29, 0x0756, 0x6A2A, 0x0523, 0x6A2B, 0x05BD, 0x6A2E,
+ 0x1494, 0x6A30, 0x2136, 0x6A34, 0x3945, 0x6A35, 0x09A9, 0x6A36, 0x14B1,
+ 0x6A38, 0x14B8, 0x6A39, 0x0925, 0x6A3A, 0x05D0, 0x6A3D, 0x0B6C, 0x6A3E,
+ 0x3946, 0x6A44, 0x14AE, 0x6A45, 0x3947, 0x6A46, 0x2138, 0x6A47, 0x14B3,
+ 0x6A48, 0x14B7, 0x6A4B, 0x06AE, 0x6A50, 0x3948, 0x6A51, 0x3949, 0x6A54,
+ 0x3C34, 0x6A56, 0x394A, 0x6A58, 0x0666, 0x6A59, 0x14B5, 0x6A5B, 0x394B,
+ 0x6A5F, 0x063B, 0x6A61, 0x0CA3, 0x6A62, 0x14B4, 0x6A66, 0x14B6, 0x6A6B,
+ 0x2137, 0x6A72, 0x14B0, 0x6A73, 0x2139, 0x6A78, 0x14B2, 0x6A7E, 0x213A,
+ 0x6A7F, 0x05BE, 0x6A80, 0x0B87, 0x6A83, 0x394C, 0x6A84, 0x14BD, 0x6A89,
+ 0x394D, 0x6A8D, 0x14BB, 0x6A8E, 0x079D, 0x6A90, 0x14BA, 0x6A91, 0x394E,
+ 0x6A97, 0x14C0, 0x6A9C, 0x143B, 0x6A9D, 0x394F, 0x6A9E, 0x3950, 0x6A9F,
+ 0x3951, 0x6AA0, 0x14BC, 0x6AA2, 0x14BE, 0x6AA3, 0x14BF, 0x6AAA, 0x14CB,
+ 0x6AAC, 0x14C7, 0x6AAE, 0x1450, 0x6AB3, 0x14C6, 0x6AB8, 0x14C5, 0x6ABB,
+ 0x14C2, 0x6AC1, 0x14AB, 0x6AC2, 0x14C4, 0x6AC3, 0x14C3, 0x6AD1, 0x14C9,
+ 0x6AD3, 0x0FCC, 0x6ADA, 0x14CC, 0x6ADB, 0x06F3, 0x6ADC, 0x3952, 0x6ADE,
+ 0x14C8, 0x6ADF, 0x14CA, 0x6AE2, 0x213B, 0x6AE4, 0x213C, 0x6AE7, 0x3953,
+ 0x6AE8, 0x0D3B, 0x6AEA, 0x14CD, 0x6AEC, 0x3954, 0x6AFA, 0x14D1, 0x6AFB,
+ 0x14CE, 0x6B04, 0x0F5D, 0x6B05, 0x14CF, 0x6B0A, 0x149F, 0x6B12, 0x14D2,
+ 0x6B16, 0x14D3, 0x6B1D, 0x04D7, 0x6B1E, 0x3955, 0x6B1F, 0x14D5, 0x6B20,
+ 0x073D, 0x6B21, 0x08CD, 0x6B23, 0x06CD, 0x6B24, 0x3956, 0x6B27, 0x0524,
+ 0x6B32, 0x0F49, 0x6B35, 0x3957, 0x6B37, 0x14D7, 0x6B38, 0x14D6, 0x6B39,
+ 0x14D9, 0x6B3A, 0x0657, 0x6B3D, 0x06CE, 0x6B3E, 0x05FA, 0x6B43, 0x14DC,
+ 0x6B46, 0x3958, 0x6B47, 0x14DB, 0x6B49, 0x14DD, 0x6B4C, 0x054E, 0x6B4E,
+ 0x0B75, 0x6B50, 0x14DE, 0x6B53, 0x05FB, 0x6B54, 0x14E0, 0x6B56, 0x3959,
+ 0x6B59, 0x14DF, 0x6B5B, 0x14E1, 0x6B5F, 0x14E2, 0x6B60, 0x395A, 0x6B61,
+ 0x14E3, 0x6B62, 0x08AD, 0x6B63, 0x0A59, 0x6B64, 0x0811, 0x6B65, 0x344A,
+ 0x6B66, 0x0DE2, 0x6B69, 0x0E32, 0x6B6A, 0x0FEA, 0x6B6F, 0x08C3, 0x6B72,
+ 0x35D9, 0x6B73, 0x0840, 0x6B74, 0x0FBA, 0x6B77, 0x3456, 0x6B78, 0x14E4,
+ 0x6B79, 0x14E5, 0x6B7B, 0x08AE, 0x6B7F, 0x14E6, 0x6B80, 0x14E7, 0x6B82,
+ 0x395B, 0x6B83, 0x14E9, 0x6B84, 0x14E8, 0x6B86, 0x0E86, 0x6B89, 0x0968,
+ 0x6B8A, 0x0918, 0x6B8B, 0x0892, 0x6B8D, 0x14EA, 0x6B95, 0x14EC, 0x6B96,
+ 0x09E9, 0x6B98, 0x14EB, 0x6B9E, 0x14ED, 0x6BA4, 0x14EE, 0x6BAA, 0x14EF,
+ 0x6BAB, 0x14F0, 0x6BAF, 0x14F1, 0x6BB1, 0x14F3, 0x6BB2, 0x14F2, 0x6BB3,
+ 0x14F4, 0x6BB4, 0x0525, 0x6BB5, 0x0B88, 0x6BB7, 0x14F5, 0x6BBA, 0x0874,
+ 0x6BBB, 0x05AA, 0x6BBC, 0x14F6, 0x6BBE, 0x395C, 0x6BBF, 0x0C3C, 0x6BC0,
+ 0x119D, 0x6BC5, 0x063D, 0x6BC6, 0x14F7, 0x6BCB, 0x14F8, 0x6BCC, 0x3744,
+ 0x6BCD, 0x0E3C, 0x6BCE, 0x0E96, 0x6BCF, 0x344C, 0x6BD2, 0x0C9F, 0x6BD3,
+ 0x14F9, 0x6BD4, 0x0D7A, 0x6BD6, 0x213D, 0x6BD8, 0x0D8F, 0x6BDB, 0x0EDF,
+ 0x6BDF, 0x14FA, 0x6BE1, 0x395D, 0x6BEB, 0x14FC, 0x6BEC, 0x14FB, 0x6BEF,
+ 0x14FE, 0x6BF1, 0x395E, 0x6BF3, 0x14FD, 0x6C08, 0x1500, 0x6C0F, 0x08AF,
+ 0x6C10, 0x395F, 0x6C11, 0x0EBD, 0x6C13, 0x1501, 0x6C14, 0x1502, 0x6C17,
+ 0x063E, 0x6C1B, 0x1503, 0x6C23, 0x1505, 0x6C24, 0x1504, 0x6C33, 0x3960,
+ 0x6C34, 0x0A2B, 0x6C35, 0x3961, 0x6C37, 0x0DAB, 0x6C38, 0x04EC, 0x6C3A,
+ 0x3962, 0x6C3E, 0x0D59, 0x6C3F, 0x213E, 0x6C40, 0x0C11, 0x6C41, 0x094B,
+ 0x6C42, 0x067B, 0x6C4E, 0x0D5A, 0x6C50, 0x08DA, 0x6C55, 0x1507, 0x6C57,
+ 0x05FC, 0x6C59, 0x3963, 0x6C5A, 0x051A, 0x6C5C, 0x213F, 0x6C5D, 0x0CCA,
+ 0x6C5E, 0x1506, 0x6C5F, 0x07D0, 0x6C60, 0x0B91, 0x6C62, 0x1508, 0x6C68,
+ 0x1510, 0x6C6A, 0x1509, 0x6C6F, 0x2141, 0x6C70, 0x0B21, 0x6C72, 0x067C,
+ 0x6C73, 0x1511, 0x6C76, 0x3964, 0x6C7A, 0x073E, 0x6C7B, 0x3965, 0x6C7D,
+ 0x063F, 0x6C7E, 0x150F, 0x6C81, 0x150D, 0x6C82, 0x150A, 0x6C83, 0x0F4A,
+ 0x6C85, 0x3966, 0x6C86, 0x2140, 0x6C88, 0x0BDC, 0x6C8C, 0x0CB1, 0x6C8D,
+ 0x150B, 0x6C90, 0x1513, 0x6C92, 0x1512, 0x6C93, 0x06F9, 0x6C95, 0x3967,
+ 0x6C96, 0x052D, 0x6C99, 0x082B, 0x6C9A, 0x150C, 0x6C9B, 0x150E, 0x6C9C,
+ 0x3968, 0x6CA1, 0x0E85, 0x6CA2, 0x0B54, 0x6CAA, 0x3749, 0x6CAB, 0x0EA5,
+ 0x6CAE, 0x151B, 0x6CB1, 0x151C, 0x6CB3, 0x054F, 0x6CB8, 0x0DF8, 0x6CB9,
+ 0x0F09, 0x6CBA, 0x151E, 0x6CBB, 0x08CF, 0x6CBC, 0x09AA, 0x6CBD, 0x1517,
+ 0x6CBE, 0x151D, 0x6CBF, 0x050A, 0x6CC1, 0x06AF, 0x6CC4, 0x1514, 0x6CC5,
+ 0x1519, 0x6CC9, 0x0A98, 0x6CCA, 0x0D27, 0x6CCC, 0x0D7B, 0x6CD0, 0x3969,
+ 0x6CD3, 0x1516, 0x6CD4, 0x396A, 0x6CD5, 0x0E4F, 0x6CD6, 0x396B, 0x6CD7,
+ 0x1518, 0x6CD9, 0x1521, 0x6CDA, 0x2142, 0x6CDB, 0x151F, 0x6CDD, 0x151A,
+ 0x6CE0, 0x396C, 0x6CE1, 0x0E50, 0x6CE2, 0x0CFE, 0x6CE3, 0x067D, 0x6CE5,
+ 0x0C1F, 0x6CE8, 0x0BAB, 0x6CEA, 0x1522, 0x6CEB, 0x396D, 0x6CEC, 0x396E,
+ 0x6CEE, 0x396F, 0x6CEF, 0x1520, 0x6CF0, 0x0B39, 0x6CF1, 0x1515, 0x6CF3,
+ 0x04ED, 0x6D01, 0x3C35, 0x6D04, 0x2143, 0x6D0A, 0x3970, 0x6D0B, 0x0F38,
+ 0x6D0C, 0x152D, 0x6D0E, 0x3971, 0x6D11, 0x3972, 0x6D12, 0x152C, 0x6D17,
+ 0x0A9A, 0x6D19, 0x1529, 0x6D1B, 0x0F56, 0x6D1E, 0x0C8E, 0x6D1F, 0x1523,
+ 0x6D25, 0x0BE1, 0x6D29, 0x04EE, 0x6D2A, 0x07D1, 0x6D2B, 0x1526, 0x6D2E,
+ 0x3973, 0x6D32, 0x0931, 0x6D33, 0x152B, 0x6D35, 0x152A, 0x6D36, 0x1525,
+ 0x6D38, 0x1528, 0x6D3B, 0x05C6, 0x6D3D, 0x1527, 0x6D3E, 0x0CFF, 0x6D41,
+ 0x0F76, 0x6D44, 0x09DC, 0x6D45, 0x0A99, 0x6D57, 0x3974, 0x6D59, 0x1533,
+ 0x6D5A, 0x1531, 0x6D5C, 0x0DBF, 0x6D5E, 0x3975, 0x6D63, 0x152E, 0x6D64,
+ 0x1530, 0x6D65, 0x3976, 0x6D66, 0x04DC, 0x6D69, 0x07D2, 0x6D6A, 0x0FD8,
+ 0x6D6C, 0x059B, 0x6D6E, 0x0DD4, 0x6D6F, 0x2145, 0x6D74, 0x0F4B, 0x6D77,
+ 0x0582, 0x6D78, 0x0A01, 0x6D79, 0x1532, 0x6D82, 0x3977, 0x6D85, 0x1537,
+ 0x6D87, 0x2144, 0x6D88, 0x09AB, 0x6D89, 0x342A, 0x6D8C, 0x0F1A, 0x6D8E,
+ 0x1534, 0x6D93, 0x152F, 0x6D95, 0x1535, 0x6D96, 0x2146, 0x6D99, 0x0FA6,
+ 0x6D9B, 0x0C6D, 0x6D9C, 0x0C9A, 0x6DAC, 0x2147, 0x6DAF, 0x0594, 0x6DB2,
+ 0x04F7, 0x6DB5, 0x153B, 0x6DB8, 0x153E, 0x6DBC, 0x0F8B, 0x6DBF, 0x3978,
+ 0x6DC0, 0x0F4E, 0x6DC4, 0x3979, 0x6DC5, 0x1545, 0x6DC6, 0x153F, 0x6DC7,
+ 0x153C, 0x6DCA, 0x397A, 0x6DCB, 0x0F9C, 0x6DCC, 0x1542, 0x6DCF, 0x2148,
+ 0x6DD0, 0x3C36, 0x6DD1, 0x0954, 0x6DD2, 0x1544, 0x6DD5, 0x1549, 0x6DD6,
+ 0x397B, 0x6DD8, 0x0C6B, 0x6DD9, 0x1547, 0x6DDA, 0x3453, 0x6DDE, 0x1541,
+ 0x6DE1, 0x0B76, 0x6DE4, 0x1548, 0x6DE6, 0x153D, 0x6DE8, 0x1543, 0x6DE9,
+ 0x397C, 0x6DEA, 0x154A, 0x6DEB, 0x04C0, 0x6DEC, 0x1540, 0x6DEE, 0x154B,
+ 0x6DF1, 0x0A02, 0x6DF2, 0x214A, 0x6DF3, 0x0969, 0x6DF5, 0x0DF5, 0x6DF7,
+ 0x081E, 0x6DF8, 0x2149, 0x6DF9, 0x1538, 0x6DFA, 0x1546, 0x6DFB, 0x0C34,
+ 0x6DFC, 0x214B, 0x6E05, 0x0A5A, 0x6E07, 0x05C7, 0x6E08, 0x0841, 0x6E09,
+ 0x09AC, 0x6E0A, 0x153A, 0x6E0B, 0x094C, 0x6E13, 0x0722, 0x6E15, 0x1539,
+ 0x6E17, 0x3746, 0x6E19, 0x154F, 0x6E1A, 0x0977, 0x6E1B, 0x076E, 0x6E1D,
+ 0x155E, 0x6E1F, 0x1558, 0x6E20, 0x068E, 0x6E21, 0x0C49, 0x6E22, 0x397D,
+ 0x6E23, 0x1553, 0x6E24, 0x155C, 0x6E25, 0x0473, 0x6E26, 0x04D4, 0x6E27,
+ 0x214E, 0x6E29, 0x0539, 0x6E2B, 0x1555, 0x6E2C, 0x0B0C, 0x6E2D, 0x154C,
+ 0x6E2E, 0x154E, 0x6E2F, 0x07D3, 0x6E34, 0x3412, 0x6E38, 0x155F, 0x6E39,
+ 0x214C, 0x6E3A, 0x155A, 0x6E3C, 0x214F, 0x6E3E, 0x1552, 0x6E42, 0x3C37,
+ 0x6E43, 0x1559, 0x6E4A, 0x0EB7, 0x6E4D, 0x1557, 0x6E4E, 0x155B, 0x6E51,
+ 0x397E, 0x6E56, 0x0784, 0x6E58, 0x09AD, 0x6E5B, 0x0B77, 0x6E5C, 0x214D,
+ 0x6E5F, 0x1551, 0x6E67, 0x0F19, 0x6E6B, 0x1554, 0x6E6E, 0x154D, 0x6E6F,
+ 0x0C6C, 0x6E72, 0x1550, 0x6E76, 0x1556, 0x6E7E, 0x0FF7, 0x6E7F, 0x08EA,
+ 0x6E80, 0x0EAC, 0x6E82, 0x1560, 0x6E8C, 0x0D42, 0x6E8F, 0x156C, 0x6E90,
+ 0x076F, 0x6E96, 0x096A, 0x6E98, 0x1562, 0x6E9C, 0x0F77, 0x6E9D, 0x07D4,
+ 0x6E9F, 0x156F, 0x6EA2, 0x04B2, 0x6EA5, 0x156D, 0x6EAA, 0x1561, 0x6EAB,
+ 0x340C, 0x6EAF, 0x1567, 0x6EB2, 0x1569, 0x6EB6, 0x0F39, 0x6EB7, 0x1564,
+ 0x6EBA, 0x0C28, 0x6EBD, 0x1566, 0x6EBF, 0x2150, 0x6EC2, 0x156E, 0x6EC4,
+ 0x1568, 0x6EC5, 0x0ED3, 0x6EC7, 0x397F, 0x6EC9, 0x1563, 0x6ECA, 0x3980,
+ 0x6ECB, 0x08CE, 0x6ECC, 0x157B, 0x6ECE, 0x3981, 0x6ED1, 0x05C8, 0x6ED3,
+ 0x1565, 0x6ED4, 0x156A, 0x6ED5, 0x156B, 0x6ED9, 0x3C38, 0x6EDD, 0x0B4C,
+ 0x6EDE, 0x0B3A, 0x6EE6, 0x3C24, 0x6EEC, 0x1573, 0x6EEF, 0x1579, 0x6EF2,
+ 0x1577, 0x6EF4, 0x0C23, 0x6EF7, 0x157E, 0x6EF8, 0x1574, 0x6EFD, 0x3982,
+ 0x6EFE, 0x1575, 0x6EFF, 0x155D, 0x6F01, 0x0693, 0x6F02, 0x0DAC, 0x6F06,
+ 0x08EB, 0x6F09, 0x0809, 0x6F0F, 0x0FD9, 0x6F11, 0x1571, 0x6F13, 0x157D,
+ 0x6F14, 0x050B, 0x6F15, 0x0AE8, 0x6F1A, 0x3983, 0x6F20, 0x0D2F, 0x6F22,
+ 0x05FD, 0x6F23, 0x0FC2, 0x6F2A, 0x3984, 0x6F2B, 0x0EAD, 0x6F2C, 0x0BEE,
+ 0x6F2F, 0x3985, 0x6F31, 0x1578, 0x6F32, 0x157A, 0x6F33, 0x3986, 0x6F38,
+ 0x0AB4, 0x6F3E, 0x157C, 0x6F3F, 0x1576, 0x6F41, 0x1570, 0x6F45, 0x05FF,
+ 0x6F51, 0x1E60, 0x6F54, 0x073F, 0x6F58, 0x158A, 0x6F5A, 0x3987, 0x6F5B,
+ 0x1585, 0x6F5C, 0x0A9C, 0x6F5E, 0x3988, 0x6F5F, 0x05C1, 0x6F62, 0x3989,
+ 0x6F64, 0x096B, 0x6F66, 0x158E, 0x6F6D, 0x1587, 0x6F6E, 0x0BC8, 0x6F6F,
+ 0x1584, 0x6F70, 0x0BF5, 0x6F74, 0x15A7, 0x6F78, 0x1581, 0x6F7A, 0x1580,
+ 0x6F7C, 0x1589, 0x6F7D, 0x398A, 0x6F80, 0x1583, 0x6F81, 0x1582, 0x6F82,
+ 0x1588, 0x6F84, 0x0A45, 0x6F86, 0x157F, 0x6F88, 0x2151, 0x6F8B, 0x398B,
+ 0x6F8D, 0x398C, 0x6F8E, 0x158B, 0x6F91, 0x158C, 0x6F92, 0x398D, 0x6F94,
+ 0x398E, 0x6F97, 0x05FE, 0x6F98, 0x363C, 0x6F9A, 0x398F, 0x6FA1, 0x1591,
+ 0x6FA3, 0x1590, 0x6FA4, 0x1592, 0x6FA7, 0x3990, 0x6FA8, 0x3991, 0x6FAA,
+ 0x1595, 0x6FB1, 0x0C3D, 0x6FB3, 0x158F, 0x6FB5, 0x2152, 0x6FB6, 0x3992,
+ 0x6FB9, 0x1593, 0x6FC0, 0x0739, 0x6FC1, 0x0B59, 0x6FC2, 0x158D, 0x6FC3,
+ 0x0CF1, 0x6FC6, 0x1594, 0x6FD4, 0x1599, 0x6FD5, 0x1597, 0x6FD8, 0x159A,
+ 0x6FDA, 0x3993, 0x6FDB, 0x159D, 0x6FDE, 0x3994, 0x6FDF, 0x1596, 0x6FE0,
+ 0x07FC, 0x6FE1, 0x0CDE, 0x6FE4, 0x1536, 0x6FEB, 0x0F5E, 0x6FEC, 0x1598,
+ 0x6FEE, 0x159C, 0x6FEF, 0x0B55, 0x6FF1, 0x159B, 0x6FF3, 0x1586, 0x6FF5,
+ 0x2153, 0x6FF6, 0x1BA4, 0x6FF9, 0x3995, 0x6FFA, 0x15A0, 0x6FFE, 0x15A4,
+ 0x7001, 0x15A2, 0x7005, 0x2154, 0x7006, 0x1E50, 0x7007, 0x2155, 0x7009,
+ 0x159E, 0x700B, 0x159F, 0x700F, 0x15A3, 0x7011, 0x15A1, 0x7015, 0x0DC0,
+ 0x7018, 0x15A9, 0x701A, 0x15A6, 0x701B, 0x15A5, 0x701D, 0x15A8, 0x701E,
+ 0x0CAC, 0x701F, 0x15AA, 0x7026, 0x0BB3, 0x7027, 0x0B4D, 0x7028, 0x2156,
+ 0x702C, 0x0A49, 0x7030, 0x15AB, 0x7032, 0x15AD, 0x7039, 0x3996, 0x703C,
+ 0x3997, 0x703E, 0x15AC, 0x704A, 0x3998, 0x704C, 0x1572, 0x7051, 0x15AE,
+ 0x7054, 0x3999, 0x7058, 0x0CBF, 0x705D, 0x399A, 0x705E, 0x399B, 0x7063,
+ 0x15AF, 0x7064, 0x399C, 0x706B, 0x0550, 0x706C, 0x399D, 0x706F, 0x0C6E,
+ 0x7070, 0x0583, 0x7078, 0x067E, 0x707C, 0x090A, 0x707D, 0x0842, 0x707E,
+ 0x399E, 0x7081, 0x399F, 0x7085, 0x2157, 0x7089, 0x0FCD, 0x708A, 0x0A2C,
+ 0x708E, 0x050C, 0x7092, 0x15B1, 0x7095, 0x39A0, 0x7099, 0x15B0, 0x70AB,
+ 0x2158, 0x70AC, 0x15B4, 0x70AD, 0x0B78, 0x70AE, 0x15B7, 0x70AF, 0x15B2,
+ 0x70B3, 0x15B6, 0x70B7, 0x39A1, 0x70B8, 0x15B5, 0x70B9, 0x0C3A, 0x70BA,
+ 0x049D, 0x70BB, 0x20AD, 0x70C8, 0x0FBD, 0x70CB, 0x15B9, 0x70CF, 0x04CA,
+ 0x70D3, 0x39A2, 0x70D4, 0x39A3, 0x70D8, 0x39A4, 0x70D9, 0x15BB, 0x70DC,
+ 0x39A5, 0x70DD, 0x15BA, 0x70DF, 0x15B8, 0x70F1, 0x15B3, 0x70F9, 0x0E51,
+ 0x70FD, 0x15BD, 0x7104, 0x215A, 0x7107, 0x39A6, 0x7109, 0x15BC, 0x710F,
+ 0x2159, 0x7114, 0x050D, 0x7119, 0x15BF, 0x711A, 0x0E02, 0x711C, 0x15BE,
+ 0x7120, 0x39A7, 0x7121, 0x0EC1, 0x7126, 0x09AF, 0x7130, 0x1DDC, 0x7131,
+ 0x39A8, 0x7136, 0x0AB5, 0x713C, 0x09AE, 0x7146, 0x215C, 0x7147, 0x215D,
+ 0x7149, 0x0FC3, 0x714A, 0x39A9, 0x714C, 0x15C5, 0x714E, 0x0A9D, 0x7152,
+ 0x39AA, 0x7155, 0x15C1, 0x7156, 0x15C6, 0x7159, 0x050E, 0x715C, 0x215B,
+ 0x7160, 0x39AB, 0x7162, 0x15C4, 0x7164, 0x0D17, 0x7165, 0x15C0, 0x7166,
+ 0x15C3, 0x7167, 0x09B0, 0x7169, 0x0D65, 0x716C, 0x15C7, 0x716E, 0x08FD,
+ 0x7179, 0x39AC, 0x717D, 0x0A9E, 0x7184, 0x15CA, 0x7188, 0x15C2, 0x718A,
+ 0x06FD, 0x718F, 0x15C8, 0x7192, 0x39AD, 0x7194, 0x0F3A, 0x7195, 0x15CB,
+ 0x7199, 0x205D, 0x719F, 0x0959, 0x71A8, 0x15CC, 0x71AC, 0x15CD, 0x71B1,
+ 0x0CE4, 0x71B3, 0x39AE, 0x71B9, 0x15CF, 0x71BE, 0x15D0, 0x71C1, 0x215F,
+ 0x71C3, 0x0CE9, 0x71C8, 0x0C6F, 0x71C9, 0x15D2, 0x71CB, 0x39AF, 0x71CE,
+ 0x15D4, 0x71D0, 0x0F9D, 0x71D2, 0x15D1, 0x71D3, 0x39B0, 0x71D4, 0x15D3,
+ 0x71D5, 0x050F, 0x71D6, 0x39B1, 0x71D7, 0x15CE, 0x71DF, 0x114E, 0x71E0,
+ 0x15D5, 0x71E5, 0x0AE9, 0x71E6, 0x0886, 0x71E7, 0x15D7, 0x71EC, 0x15D6,
+ 0x71ED, 0x09EA, 0x71EE, 0x10EE, 0x71F5, 0x15D8, 0x71F9, 0x15DA, 0x71FB,
+ 0x15C9, 0x71FC, 0x15D9, 0x71FE, 0x2160, 0x71FF, 0x15DB, 0x7200, 0x39B2,
+ 0x7206, 0x0D30, 0x720D, 0x15DC, 0x7210, 0x15DD, 0x721B, 0x15DE, 0x721D,
+ 0x39B3, 0x7228, 0x15DF, 0x722A, 0x0BFA, 0x722B, 0x39B4, 0x722C, 0x15E1,
+ 0x722D, 0x15E0, 0x7230, 0x15E2, 0x7232, 0x15E3, 0x7235, 0x090B, 0x7236,
+ 0x0DD5, 0x7238, 0x39B5, 0x723A, 0x0EF8, 0x723B, 0x15E4, 0x723C, 0x15E5,
+ 0x723D, 0x0AD8, 0x723E, 0x08D0, 0x723F, 0x15E6, 0x7240, 0x15E7, 0x7241,
+ 0x39B6, 0x7246, 0x15E8, 0x7247, 0x0E22, 0x7248, 0x0D5B, 0x724B, 0x15E9,
+ 0x724C, 0x0D0D, 0x7252, 0x0BC9, 0x7253, 0x39B7, 0x7255, 0x39B8, 0x7256,
+ 0x39B9, 0x7258, 0x15EA, 0x7259, 0x0567, 0x725B, 0x0687, 0x725C, 0x39BA,
+ 0x725D, 0x0ED2, 0x725F, 0x0EC2, 0x7261, 0x0534, 0x7262, 0x0FDA, 0x7267,
+ 0x0E80, 0x7269, 0x0DFA, 0x7272, 0x0A5B, 0x7274, 0x15EB, 0x7279, 0x0C9B,
+ 0x727D, 0x0757, 0x727E, 0x15EC, 0x7280, 0x0844, 0x7281, 0x15EE, 0x7282,
+ 0x15ED, 0x7287, 0x15EF, 0x728D, 0x39BB, 0x7292, 0x15F0, 0x7296, 0x15F1,
+ 0x72A0, 0x0658, 0x72A2, 0x15F2, 0x72A7, 0x15F3, 0x72AC, 0x0758, 0x72AD,
+ 0x39BC, 0x72AF, 0x0D5C, 0x72B1, 0x2161, 0x72B2, 0x15F5, 0x72B4, 0x39BD,
+ 0x72B6, 0x09DD, 0x72B9, 0x15F4, 0x72BE, 0x2162, 0x72C0, 0x342B, 0x72C2,
+ 0x06B0, 0x72C3, 0x15F6, 0x72C4, 0x15F8, 0x72C6, 0x15F7, 0x72C7, 0x39BE,
+ 0x72CE, 0x15F9, 0x72D0, 0x0785, 0x72D2, 0x15FA, 0x72D7, 0x06E1, 0x72D9,
+ 0x0AC2, 0x72DB, 0x080F, 0x72E0, 0x15FC, 0x72E1, 0x15FD, 0x72E2, 0x15FB,
+ 0x72E9, 0x0919, 0x72EC, 0x0CA0, 0x72ED, 0x06B1, 0x72F7, 0x15FF, 0x72F8,
+ 0x0B6A, 0x72F9, 0x15FE, 0x72FB, 0x39BF, 0x72FC, 0x0FDB, 0x72FD, 0x0D18,
+ 0x7304, 0x39C0, 0x7305, 0x39C1, 0x730A, 0x1602, 0x7316, 0x1604, 0x7317,
+ 0x1601, 0x731B, 0x0EE0, 0x731C, 0x1603, 0x731D, 0x1605, 0x731F, 0x0F8C,
+ 0x7324, 0x2163, 0x7325, 0x1609, 0x7328, 0x39C2, 0x7329, 0x1608, 0x732A,
+ 0x0BB4, 0x732B, 0x0CE3, 0x732E, 0x0759, 0x732F, 0x1607, 0x7331, 0x39C3,
+ 0x7334, 0x1606, 0x7336, 0x0F1B, 0x7337, 0x0F1C, 0x733E, 0x160A, 0x733F,
+ 0x0510, 0x7343, 0x39C4, 0x7344, 0x0808, 0x7345, 0x08B0, 0x734E, 0x160B,
+ 0x734F, 0x160C, 0x7357, 0x160E, 0x7363, 0x094D, 0x7368, 0x1610, 0x736A,
+ 0x160F, 0x736C, 0x39C5, 0x7370, 0x1611, 0x7372, 0x05AB, 0x7375, 0x1613,
+ 0x7377, 0x2165, 0x7378, 0x1612, 0x737A, 0x1615, 0x737B, 0x1614, 0x737C,
+ 0x39C6, 0x7383, 0x39C7, 0x7384, 0x0770, 0x7385, 0x39C8, 0x7386, 0x39C9,
+ 0x7387, 0x0F70, 0x7389, 0x06C4, 0x738B, 0x0526, 0x7395, 0x39CA, 0x7396,
+ 0x06E2, 0x739E, 0x39CB, 0x739F, 0x39CC, 0x73A0, 0x39CD, 0x73A6, 0x39CE,
+ 0x73A8, 0x3C3F, 0x73A9, 0x061D, 0x73AB, 0x39CF, 0x73B2, 0x0FB0, 0x73B3,
+ 0x1617, 0x73B5, 0x39D0, 0x73B7, 0x39D1, 0x73BA, 0x35EA, 0x73BB, 0x1619,
+ 0x73BC, 0x39D2, 0x73BD, 0x2166, 0x73C0, 0x161A, 0x73C2, 0x0551, 0x73C8,
+ 0x1616, 0x73C9, 0x2167, 0x73CA, 0x0887, 0x73CD, 0x0BDD, 0x73CE, 0x1618,
+ 0x73CF, 0x39D3, 0x73D2, 0x216A, 0x73D6, 0x2168, 0x73D9, 0x39D4, 0x73DE,
+ 0x161D, 0x73E0, 0x091A, 0x73E3, 0x2169, 0x73E4, 0x3C39, 0x73E5, 0x161B,
+ 0x73E9, 0x39D5, 0x73EA, 0x0714, 0x73ED, 0x0D5D, 0x73EE, 0x161C, 0x73F1,
+ 0x1637, 0x73F4, 0x39D6, 0x73F5, 0x216C, 0x73F8, 0x1622, 0x73FD, 0x39D7,
+ 0x73FE, 0x0771, 0x7403, 0x067F, 0x7404, 0x39D8, 0x7405, 0x161F, 0x7406,
+ 0x0F67, 0x7407, 0x216B, 0x7409, 0x0F78, 0x740A, 0x39D9, 0x741A, 0x39DA,
+ 0x741B, 0x39DB, 0x7421, 0x3C3A, 0x7422, 0x0B56, 0x7424, 0x39DC, 0x7425,
+ 0x1621, 0x7426, 0x216D, 0x7428, 0x39DD, 0x7429, 0x216F, 0x742A, 0x216E,
+ 0x742C, 0x39DE, 0x742E, 0x2170, 0x742F, 0x39DF, 0x7430, 0x39E0, 0x7431,
+ 0x39E1, 0x7432, 0x1623, 0x7433, 0x0F9E, 0x7434, 0x06CF, 0x7435, 0x0D90,
+ 0x7436, 0x0D00, 0x7439, 0x39E2, 0x743A, 0x1624, 0x743F, 0x1626, 0x7441,
+ 0x1629, 0x7444, 0x39E3, 0x7447, 0x39E4, 0x744B, 0x39E5, 0x744D, 0x39E6,
+ 0x7451, 0x39E7, 0x7455, 0x1625, 0x7457, 0x39E8, 0x7459, 0x1628, 0x745A,
+ 0x079E, 0x745B, 0x04EF, 0x745C, 0x162A, 0x745E, 0x0A36, 0x745F, 0x1627,
+ 0x7460, 0x0FA4, 0x7462, 0x2171, 0x7463, 0x162D, 0x7464, 0x1D35, 0x7466,
+ 0x39E9, 0x7469, 0x162B, 0x746A, 0x162E, 0x746B, 0x39EA, 0x746F, 0x1620,
+ 0x7470, 0x162C, 0x7471, 0x39EB, 0x7473, 0x082C, 0x7476, 0x162F, 0x747E,
+ 0x1630, 0x7480, 0x39EC, 0x7483, 0x0F68, 0x7485, 0x39ED, 0x7486, 0x39EE,
+ 0x7487, 0x39EF, 0x7489, 0x2172, 0x748B, 0x1631, 0x7490, 0x39F0, 0x7498,
+ 0x39F1, 0x749C, 0x39F2, 0x749E, 0x1632, 0x749F, 0x2173, 0x74A0, 0x39F3,
+ 0x74A2, 0x161E, 0x74A3, 0x39F4, 0x74A7, 0x1633, 0x74A8, 0x39F5, 0x74AB,
+ 0x39F6, 0x74B0, 0x0600, 0x74B5, 0x39F7, 0x74BD, 0x08D1, 0x74BF, 0x39F8,
+ 0x74C8, 0x39F9, 0x74CA, 0x1634, 0x74CF, 0x1635, 0x74D4, 0x1636, 0x74DA,
+ 0x39FA, 0x74DC, 0x04DD, 0x74DE, 0x39FB, 0x74E0, 0x1638, 0x74E2, 0x0DAD,
+ 0x74E3, 0x1639, 0x74E6, 0x05E0, 0x74E7, 0x163A, 0x74E9, 0x163B, 0x74EE,
+ 0x163C, 0x74EF, 0x3750, 0x74F0, 0x163E, 0x74F1, 0x163F, 0x74F2, 0x163D,
+ 0x74F6, 0x0DC5, 0x74F7, 0x1641, 0x74F8, 0x1640, 0x7501, 0x2174, 0x7503,
+ 0x1643, 0x7504, 0x1642, 0x7505, 0x1644, 0x750C, 0x1645, 0x750D, 0x1647,
+ 0x750E, 0x1646, 0x7511, 0x080B, 0x7513, 0x1649, 0x7515, 0x1648, 0x7518,
+ 0x0601, 0x751A, 0x0A19, 0x751C, 0x0C36, 0x751E, 0x164A, 0x751F, 0x0A5C,
+ 0x7522, 0x35DE, 0x7523, 0x0888, 0x7525, 0x051B, 0x7526, 0x164B, 0x7528,
+ 0x0F3B, 0x752B, 0x0E33, 0x752C, 0x164C, 0x752F, 0x20F2, 0x7530, 0x0C3E,
+ 0x7531, 0x0F1D, 0x7532, 0x07D5, 0x7533, 0x0A03, 0x7537, 0x0B89, 0x7538,
+ 0x10C9, 0x753A, 0x0BCA, 0x753B, 0x0568, 0x753C, 0x164D, 0x7544, 0x164E,
+ 0x7546, 0x1653, 0x7549, 0x1651, 0x754A, 0x1650, 0x754B, 0x13C7, 0x754C,
+ 0x0584, 0x754D, 0x164F, 0x754E, 0x39FC, 0x754F, 0x049E, 0x7551, 0x0D3E,
+ 0x7554, 0x0D5E, 0x7559, 0x0F79, 0x755A, 0x1654, 0x755B, 0x1652, 0x755C,
+ 0x0B9A, 0x755D, 0x0A4A, 0x7560, 0x0D3F, 0x7562, 0x0D9F, 0x7564, 0x1656,
+ 0x7565, 0x0F74, 0x7566, 0x0723, 0x7567, 0x1657, 0x7569, 0x1655, 0x756A,
+ 0x0D6A, 0x756B, 0x1658, 0x756C, 0x3C3B, 0x756D, 0x1659, 0x756F, 0x2175,
+ 0x7570, 0x049F, 0x7573, 0x09DE, 0x7574, 0x165E, 0x7575, 0x3751, 0x7576,
+ 0x165B, 0x7577, 0x0CC5, 0x7578, 0x165A, 0x7579, 0x39FD, 0x757F, 0x0640,
+ 0x7581, 0x39FE, 0x7582, 0x1661, 0x7586, 0x165C, 0x7587, 0x165D, 0x7589,
+ 0x1660, 0x758A, 0x165F, 0x758B, 0x0D97, 0x758E, 0x0AC4, 0x758F, 0x0AC3,
+ 0x7590, 0x39FF, 0x7591, 0x0659, 0x7592, 0x3A00, 0x7593, 0x3A01, 0x7594,
+ 0x1662, 0x759A, 0x1663, 0x759D, 0x1664, 0x75A3, 0x1666, 0x75A5, 0x1665,
+ 0x75AB, 0x04F8, 0x75B1, 0x166E, 0x75B2, 0x0D7C, 0x75B3, 0x1668, 0x75B4,
+ 0x3A02, 0x75B5, 0x166A, 0x75B8, 0x166C, 0x75B9, 0x0A04, 0x75BC, 0x166D,
+ 0x75BD, 0x166B, 0x75BE, 0x08EC, 0x75C2, 0x1667, 0x75C3, 0x1669, 0x75C5,
+ 0x0DB4, 0x75C7, 0x09B1, 0x75CA, 0x1670, 0x75CD, 0x166F, 0x75D2, 0x1671,
+ 0x75D4, 0x08D2, 0x75D5, 0x081F, 0x75D8, 0x0C71, 0x75D9, 0x1672, 0x75DB,
+ 0x0BE7, 0x75DE, 0x1674, 0x75E2, 0x0F69, 0x75E3, 0x1673, 0x75E4, 0x3A03,
+ 0x75E9, 0x0AEB, 0x75EC, 0x3752, 0x75F0, 0x1679, 0x75F2, 0x167B, 0x75F3,
+ 0x167C, 0x75F4, 0x0B92, 0x75F9, 0x3A04, 0x75FA, 0x167A, 0x75FC, 0x1677,
+ 0x75FE, 0x1675, 0x75FF, 0x1676, 0x7600, 0x3A05, 0x7601, 0x1678, 0x7609,
+ 0x167F, 0x760A, 0x3A06, 0x760B, 0x167D, 0x760D, 0x167E, 0x7615, 0x3A07,
+ 0x7616, 0x3A08, 0x7619, 0x3A09, 0x761E, 0x3A0A, 0x761F, 0x1680, 0x7620,
+ 0x1682, 0x7621, 0x1683, 0x7622, 0x1684, 0x7624, 0x1685, 0x7626, 0x1E2D,
+ 0x7627, 0x1681, 0x762D, 0x3A0B, 0x7630, 0x1687, 0x7634, 0x1686, 0x7635,
+ 0x3A0C, 0x763B, 0x1688, 0x7642, 0x0F8D, 0x7643, 0x3A0D, 0x7646, 0x168B,
+ 0x7647, 0x1689, 0x7648, 0x168A, 0x764B, 0x3A0E, 0x764C, 0x061E, 0x764E,
+ 0x3753, 0x7652, 0x0F0A, 0x7656, 0x0E1A, 0x7658, 0x168D, 0x765C, 0x168C,
+ 0x7661, 0x168E, 0x7662, 0x168F, 0x7665, 0x3A0F, 0x7667, 0x1693, 0x7668,
+ 0x1690, 0x7669, 0x1691, 0x766A, 0x1692, 0x766C, 0x1694, 0x766D, 0x3A10,
+ 0x766F, 0x3A11, 0x7670, 0x1695, 0x7671, 0x3A12, 0x7672, 0x1696, 0x7674,
+ 0x3A13, 0x7676, 0x1697, 0x7678, 0x1698, 0x767A, 0x0D43, 0x767B, 0x0C4A,
+ 0x767C, 0x1699, 0x767D, 0x0D28, 0x767E, 0x0DA6, 0x7680, 0x169A, 0x7682,
+ 0x2176, 0x7683, 0x169B, 0x7684, 0x0C24, 0x7686, 0x0585, 0x7687, 0x07D6,
+ 0x7688, 0x169C, 0x768B, 0x169D, 0x768E, 0x169E, 0x7690, 0x0877, 0x7693,
+ 0x16A0, 0x7696, 0x169F, 0x7699, 0x16A1, 0x769A, 0x16A2, 0x769B, 0x2179,
+ 0x769C, 0x2177, 0x769E, 0x2178, 0x76A4, 0x3A14, 0x76A5, 0x3A15, 0x76A6,
+ 0x217A, 0x76AE, 0x0D7D, 0x76B0, 0x16A3, 0x76B4, 0x16A4, 0x76B7, 0x1D1C,
+ 0x76B8, 0x16A5, 0x76B9, 0x16A6, 0x76BA, 0x16A7, 0x76BF, 0x087C, 0x76C2,
+ 0x16A8, 0x76C3, 0x0D0C, 0x76C5, 0x3A16, 0x76C6, 0x0E8D, 0x76C8, 0x04F0,
+ 0x76CA, 0x04F9, 0x76CC, 0x3A17, 0x76CD, 0x16A9, 0x76D2, 0x16AB, 0x76D6,
+ 0x16AA, 0x76D7, 0x0C6A, 0x76DB, 0x0A5D, 0x76DC, 0x14D8, 0x76DE, 0x16AC,
+ 0x76DF, 0x0ECD, 0x76E1, 0x16AD, 0x76E3, 0x0602, 0x76E4, 0x0D6B, 0x76E5,
+ 0x16AE, 0x76E7, 0x16AF, 0x76EA, 0x16B0, 0x76EC, 0x3A18, 0x76EE, 0x0EE8,
+ 0x76F2, 0x0EE1, 0x76F4, 0x0BDA, 0x76F8, 0x0AEC, 0x76FB, 0x16B2, 0x76FC,
+ 0x3A19, 0x76FE, 0x096C, 0x7701, 0x09B2, 0x7704, 0x16B5, 0x7707, 0x16B4,
+ 0x7708, 0x16B3, 0x7709, 0x0D91, 0x770B, 0x0603, 0x770C, 0x075D, 0x771B,
+ 0x16BB, 0x771E, 0x16B8, 0x771F, 0x0A05, 0x7720, 0x0EBE, 0x7724, 0x16B7,
+ 0x7725, 0x16B9, 0x7726, 0x16BA, 0x7729, 0x16B6, 0x7734, 0x3A1A, 0x7736,
+ 0x3A1B, 0x7737, 0x16BC, 0x7738, 0x16BD, 0x773A, 0x0BCB, 0x773C, 0x061F,
+ 0x7740, 0x0BA3, 0x7746, 0x217C, 0x7747, 0x16BE, 0x775A, 0x16BF, 0x775B,
+ 0x16C2, 0x775C, 0x3A1C, 0x775F, 0x3A1D, 0x7760, 0x3A1E, 0x7761, 0x0A2D,
+ 0x7762, 0x1EC5, 0x7763, 0x0C9C, 0x7765, 0x16C3, 0x7766, 0x0E81, 0x7768,
+ 0x16C0, 0x776A, 0x3755, 0x776B, 0x16C1, 0x7772, 0x3A1F, 0x7779, 0x16C6,
+ 0x777D, 0x3A20, 0x777E, 0x16C5, 0x777F, 0x16C4, 0x778B, 0x16C8, 0x778E,
+ 0x16C7, 0x7791, 0x16C9, 0x7795, 0x3A21, 0x779E, 0x16CB, 0x77A0, 0x16CA,
+ 0x77A5, 0x0E1D, 0x77A9, 0x3756, 0x77AA, 0x3A22, 0x77AC, 0x0960, 0x77AD,
+ 0x0F8E, 0x77B0, 0x16CC, 0x77B3, 0x0C8F, 0x77B6, 0x16CD, 0x77B9, 0x16CE,
+ 0x77BB, 0x16D2, 0x77BC, 0x16D0, 0x77BD, 0x16D1, 0x77BF, 0x16CF, 0x77C7,
+ 0x16D3, 0x77CD, 0x16D4, 0x77D7, 0x16D5, 0x77DA, 0x16D6, 0x77DB, 0x0EC3,
+ 0x77DC, 0x16D7, 0x77E2, 0x0EFC, 0x77E3, 0x16D8, 0x77E5, 0x0B8C, 0x77E6,
+ 0x3A23, 0x77E7, 0x0D20, 0x77E9, 0x06E3, 0x77ED, 0x0B79, 0x77EE, 0x16D9,
+ 0x77EF, 0x06B2, 0x77F0, 0x3A24, 0x77F3, 0x0A74, 0x77F4, 0x3A25, 0x77FC,
+ 0x16DA, 0x7802, 0x082D, 0x7806, 0x3A26, 0x780C, 0x16DB, 0x7812, 0x16DC,
+ 0x7814, 0x075A, 0x7815, 0x0845, 0x7820, 0x16DE, 0x7821, 0x217E, 0x7822,
+ 0x3A27, 0x7825, 0x0C50, 0x7826, 0x0846, 0x7827, 0x0668, 0x782D, 0x3A28,
+ 0x782E, 0x3A29, 0x7830, 0x3A2A, 0x7832, 0x0E52, 0x7834, 0x0D01, 0x7835,
+ 0x3A2B, 0x783A, 0x0C51, 0x783F, 0x07EE, 0x7845, 0x16E0, 0x784E, 0x217F,
+ 0x784F, 0x341E, 0x7851, 0x3C3C, 0x785D, 0x09B3, 0x7864, 0x2180, 0x7868,
+ 0x3A2C, 0x786B, 0x0F7A, 0x786C, 0x07D7, 0x786F, 0x075B, 0x7872, 0x0D37,
+ 0x7874, 0x16E2, 0x787A, 0x2181, 0x787C, 0x16E4, 0x7881, 0x079F, 0x7886,
+ 0x16E3, 0x7887, 0x0C12, 0x788C, 0x16E6, 0x788D, 0x0595, 0x788E, 0x16E1,
+ 0x7891, 0x0D7E, 0x7893, 0x04D2, 0x7895, 0x085C, 0x7897, 0x0FF8, 0x789A,
+ 0x16E5, 0x789E, 0x3A2D, 0x78A3, 0x16E7, 0x78A7, 0x0E1B, 0x78A9, 0x0A7D,
+ 0x78AA, 0x16E9, 0x78AF, 0x16EA, 0x78B5, 0x16E8, 0x78BA, 0x05AC, 0x78BC,
+ 0x16F0, 0x78BE, 0x16EF, 0x78C1, 0x08D3, 0x78C5, 0x16F1, 0x78C6, 0x16EC,
+ 0x78C8, 0x3A2E, 0x78CA, 0x16F2, 0x78CB, 0x16ED, 0x78CC, 0x3A2F, 0x78CE,
+ 0x3A30, 0x78D0, 0x0D6C, 0x78D1, 0x16EB, 0x78D4, 0x16EE, 0x78DA, 0x16F5,
+ 0x78E0, 0x3A32, 0x78E1, 0x3A33, 0x78E4, 0x3A31, 0x78E7, 0x16F4, 0x78E8,
+ 0x0E8F, 0x78EC, 0x16F3, 0x78EF, 0x04AF, 0x78F2, 0x3A34, 0x78F4, 0x16F7,
+ 0x78F7, 0x3A35, 0x78FB, 0x3A36, 0x78FD, 0x16F6, 0x7901, 0x09B4, 0x7907,
+ 0x16F8, 0x790E, 0x0AC5, 0x7911, 0x16FA, 0x7912, 0x16F9, 0x7919, 0x16FB,
+ 0x7926, 0x16DD, 0x792A, 0x16DF, 0x792B, 0x16FD, 0x792C, 0x16FC, 0x7930,
+ 0x2182, 0x7931, 0x3A37, 0x7934, 0x3A38, 0x793A, 0x08D4, 0x793B, 0x3A39,
+ 0x793C, 0x0FB1, 0x793D, 0x3A3A, 0x793E, 0x08FE, 0x7940, 0x16FE, 0x7941,
+ 0x070D, 0x7945, 0x3A3B, 0x7947, 0x065A, 0x7948, 0x0641, 0x7949, 0x08B1,
+ 0x7950, 0x0F1E, 0x7953, 0x1704, 0x7955, 0x1703, 0x7956, 0x0AC6, 0x7957,
+ 0x1700, 0x795A, 0x1702, 0x795B, 0x3A3C, 0x795C, 0x3A3D, 0x795D, 0x0955,
+ 0x795E, 0x0A06, 0x795F, 0x1701, 0x7960, 0x16FF, 0x7962, 0x0CE0, 0x7965,
+ 0x09B5, 0x7968, 0x0DAE, 0x796D, 0x0847, 0x7977, 0x0C72, 0x797A, 0x1705,
+ 0x797F, 0x1706, 0x7980, 0x171C, 0x7981, 0x06D0, 0x7984, 0x0FE3, 0x7985,
+ 0x0AB7, 0x798A, 0x1707, 0x798B, 0x3A3E, 0x798D, 0x0552, 0x798E, 0x0C13,
+ 0x798F, 0x0DF1, 0x7994, 0x2186, 0x7996, 0x3A3F, 0x7998, 0x3A40, 0x799B,
+ 0x2188, 0x799D, 0x1708, 0x79A6, 0x0694, 0x79A7, 0x1709, 0x79AA, 0x170B,
+ 0x79AE, 0x170C, 0x79B0, 0x0CDF, 0x79B1, 0x1E4E, 0x79B3, 0x170D, 0x79B8,
+ 0x3A41, 0x79B9, 0x170E, 0x79BA, 0x170F, 0x79BB, 0x3A42, 0x79BD, 0x06D1,
+ 0x79BE, 0x0553, 0x79BF, 0x0C9D, 0x79C0, 0x0932, 0x79C1, 0x08B2, 0x79C9,
+ 0x1710, 0x79CA, 0x3A43, 0x79CB, 0x0933, 0x79D1, 0x054A, 0x79D2, 0x0DB5,
+ 0x79D5, 0x1711, 0x79D8, 0x0D7F, 0x79DA, 0x3A44, 0x79DF, 0x0AC7, 0x79E1,
+ 0x1714, 0x79E3, 0x1715, 0x79E4, 0x0D1F, 0x79E6, 0x0A07, 0x79E7, 0x1712,
+ 0x79E9, 0x0B9F, 0x79EC, 0x1713, 0x79F0, 0x09B6, 0x79FB, 0x04A0, 0x7A00,
+ 0x0643, 0x7A03, 0x3A45, 0x7A05, 0x3633, 0x7A08, 0x1716, 0x7A09, 0x3A46,
+ 0x7A0B, 0x0C14, 0x7A0D, 0x1717, 0x7A0E, 0x0A6B, 0x7A11, 0x3A47, 0x7A14,
+ 0x0EB9, 0x7A17, 0x0D95, 0x7A18, 0x1718, 0x7A19, 0x1719, 0x7A1A, 0x0B93,
+ 0x7A1C, 0x0F8F, 0x7A1E, 0x3A48, 0x7A1F, 0x171B, 0x7A20, 0x171A, 0x7A2D,
+ 0x3A49, 0x7A2E, 0x091B, 0x7A31, 0x171D, 0x7A32, 0x04B4, 0x7A37, 0x1720,
+ 0x7A39, 0x3A4A, 0x7A3B, 0x171E, 0x7A3C, 0x0554, 0x7A3D, 0x0724, 0x7A3E,
+ 0x171F, 0x7A3F, 0x07D8, 0x7A40, 0x0804, 0x7A42, 0x0E36, 0x7A43, 0x1721,
+ 0x7A45, 0x3A4B, 0x7A46, 0x0E82, 0x7A49, 0x1723, 0x7A4C, 0x3A4C, 0x7A4D,
+ 0x0A75, 0x7A4E, 0x04F1, 0x7A4F, 0x053A, 0x7A50, 0x0470, 0x7A57, 0x1722,
+ 0x7A5D, 0x3A4D, 0x7A60, 0x3A4E, 0x7A61, 0x1724, 0x7A62, 0x1725, 0x7A63,
+ 0x09DF, 0x7A69, 0x1726, 0x7A6B, 0x05AD, 0x7A6D, 0x3A4F, 0x7A70, 0x1728,
+ 0x7A74, 0x0740, 0x7A76, 0x0680, 0x7A78, 0x3A50, 0x7A79, 0x1729, 0x7A7A,
+ 0x06ED, 0x7A7D, 0x172A, 0x7A7F, 0x0AA0, 0x7A81, 0x0CA5, 0x7A83, 0x0A84,
+ 0x7A84, 0x0865, 0x7A88, 0x172B, 0x7A92, 0x0BA0, 0x7A93, 0x0AED, 0x7A95,
+ 0x172D, 0x7A96, 0x172F, 0x7A97, 0x172C, 0x7A98, 0x172E, 0x7A9F, 0x06F8,
+ 0x7AA0, 0x3A51, 0x7AA3, 0x3A52, 0x7AA9, 0x1730, 0x7AAA, 0x06FC, 0x7AAE,
+ 0x0681, 0x7AAF, 0x0F3C, 0x7AB0, 0x1732, 0x7AB3, 0x3A53, 0x7AB6, 0x1733,
+ 0x7ABA, 0x04D0, 0x7ABB, 0x3A54, 0x7ABC, 0x3A55, 0x7ABF, 0x1736, 0x7AC3,
+ 0x05D4, 0x7AC4, 0x1735, 0x7AC5, 0x1734, 0x7AC6, 0x3A56, 0x7AC7, 0x1738,
+ 0x7AC8, 0x1731, 0x7ACA, 0x1739, 0x7ACB, 0x0F71, 0x7ACD, 0x173A, 0x7ACF,
+ 0x173B, 0x7AD1, 0x2189, 0x7AD2, 0x11C5, 0x7AD3, 0x173D, 0x7AD5, 0x173C,
+ 0x7AD9, 0x173E, 0x7ADA, 0x173F, 0x7ADC, 0x0F7D, 0x7ADD, 0x1740, 0x7ADF,
+ 0x1C08, 0x7AE0, 0x09B7, 0x7AE1, 0x1741, 0x7AE2, 0x1742, 0x7AE3, 0x0961,
+ 0x7AE5, 0x0C90, 0x7AE6, 0x1743, 0x7AE7, 0x218A, 0x7AEA, 0x0B66, 0x7AEB,
+ 0x218C, 0x7AED, 0x1744, 0x7AEF, 0x0B7A, 0x7AF0, 0x1745, 0x7AF6, 0x069D,
+ 0x7AF8, 0x1076, 0x7AF9, 0x0B9B, 0x7AFA, 0x08DF, 0x7AFF, 0x0604, 0x7B02,
+ 0x1746, 0x7B04, 0x1753, 0x7B06, 0x1749, 0x7B07, 0x3A57, 0x7B08, 0x0682,
+ 0x7B0A, 0x1748, 0x7B0B, 0x1755, 0x7B0F, 0x1747, 0x7B11, 0x09B8, 0x7B14,
+ 0x3A58, 0x7B18, 0x174B, 0x7B19, 0x174C, 0x7B1B, 0x0C25, 0x7B1E, 0x174D,
+ 0x7B20, 0x05BC, 0x7B25, 0x0A20, 0x7B26, 0x0DD6, 0x7B27, 0x3A59, 0x7B28,
+ 0x174F, 0x7B2C, 0x0B48, 0x7B31, 0x3A5A, 0x7B33, 0x174A, 0x7B35, 0x174E,
+ 0x7B36, 0x1750, 0x7B39, 0x086B, 0x7B45, 0x1757, 0x7B46, 0x0DA0, 0x7B47,
+ 0x3A5B, 0x7B48, 0x0D3A, 0x7B49, 0x0C73, 0x7B4B, 0x06D2, 0x7B4C, 0x1756,
+ 0x7B4D, 0x1754, 0x7B4E, 0x3A5C, 0x7B4F, 0x0D49, 0x7B50, 0x1751, 0x7B51,
+ 0x0B9C, 0x7B52, 0x0C75, 0x7B53, 0x375D, 0x7B54, 0x0C74, 0x7B56, 0x0866,
+ 0x7B5D, 0x1769, 0x7B60, 0x3A5D, 0x7B65, 0x1759, 0x7B67, 0x175B, 0x7B69,
+ 0x3A5E, 0x7B6C, 0x175E, 0x7B6D, 0x3A5F, 0x7B6E, 0x175F, 0x7B70, 0x175C,
+ 0x7B71, 0x175D, 0x7B72, 0x3A60, 0x7B74, 0x175A, 0x7B75, 0x1758, 0x7B7A,
+ 0x1752, 0x7B86, 0x0E1F, 0x7B87, 0x0555, 0x7B8B, 0x1766, 0x7B8D, 0x1763,
+ 0x7B8F, 0x1768, 0x7B91, 0x3A61, 0x7B92, 0x1767, 0x7B94, 0x0D29, 0x7B95,
+ 0x0EB3, 0x7B97, 0x0889, 0x7B98, 0x1761, 0x7B99, 0x176A, 0x7B9A, 0x1765,
+ 0x7B9C, 0x1764, 0x7B9D, 0x1760, 0x7B9E, 0x218D, 0x7B9F, 0x1762, 0x7BA1,
+ 0x0605, 0x7BAA, 0x0B7B, 0x7BAD, 0x0AA1, 0x7BAF, 0x3A62, 0x7BB1, 0x0D36,
+ 0x7BB4, 0x176F, 0x7BB8, 0x0D38, 0x7BC0, 0x0A85, 0x7BC1, 0x176C, 0x7BC4,
+ 0x0D63, 0x7BC6, 0x1770, 0x7BC7, 0x0E23, 0x7BC9, 0x0B99, 0x7BCB, 0x176B,
+ 0x7BCC, 0x176D, 0x7BCF, 0x176E, 0x7BD7, 0x3A63, 0x7BD9, 0x3A64, 0x7BDD,
+ 0x1771, 0x7BE0, 0x08F0, 0x7BE4, 0x0C9E, 0x7BE5, 0x1776, 0x7BE6, 0x1775,
+ 0x7BE9, 0x1772, 0x7BED, 0x0FDC, 0x7BF3, 0x177B, 0x7BF6, 0x177F, 0x7BF7,
+ 0x177C, 0x7C00, 0x1778, 0x7C07, 0x1779, 0x7C0B, 0x3A65, 0x7C0D, 0x177E,
+ 0x7C0F, 0x3A66, 0x7C11, 0x1773, 0x7C12, 0x10EA, 0x7C13, 0x177A, 0x7C14,
+ 0x1774, 0x7C17, 0x177D, 0x7C1E, 0x1E3B, 0x7C1F, 0x1783, 0x7C20, 0x3A67,
+ 0x7C21, 0x0606, 0x7C23, 0x1780, 0x7C26, 0x3A68, 0x7C27, 0x1781, 0x7C2A,
+ 0x1782, 0x7C2B, 0x1785, 0x7C31, 0x3A69, 0x7C36, 0x3A6A, 0x7C37, 0x1784,
+ 0x7C38, 0x0D8A, 0x7C3D, 0x1786, 0x7C3E, 0x0FC4, 0x7C3F, 0x0E3D, 0x7C40,
+ 0x178B, 0x7C43, 0x1788, 0x7C4C, 0x1787, 0x7C4D, 0x0A76, 0x7C4F, 0x178A,
+ 0x7C50, 0x178C, 0x7C51, 0x3A6B, 0x7C54, 0x1789, 0x7C56, 0x1790, 0x7C58,
+ 0x178D, 0x7C59, 0x3A6C, 0x7C5F, 0x178E, 0x7C60, 0x1777, 0x7C64, 0x178F,
+ 0x7C65, 0x1791, 0x7C67, 0x3A6D, 0x7C6C, 0x1792, 0x7C6E, 0x3A6E, 0x7C70,
+ 0x3A6F, 0x7C73, 0x0E16, 0x7C75, 0x1793, 0x7C7B, 0x370E, 0x7C7E, 0x0EEE,
+ 0x7C81, 0x06C6, 0x7C82, 0x06FF, 0x7C83, 0x1794, 0x7C89, 0x0E04, 0x7C8B,
+ 0x0A2E, 0x7C8D, 0x0EBC, 0x7C90, 0x1795, 0x7C92, 0x0F7B, 0x7C95, 0x0D2A,
+ 0x7C97, 0x0AC8, 0x7C98, 0x0CEA, 0x7C9B, 0x0957, 0x7C9F, 0x0484, 0x7CA1,
+ 0x179A, 0x7CA2, 0x1798, 0x7CA4, 0x1796, 0x7CA5, 0x05DD, 0x7CA7, 0x09B9,
+ 0x7CA8, 0x179B, 0x7CAB, 0x1799, 0x7CAD, 0x1797, 0x7CAE, 0x179F, 0x7CB1,
+ 0x179E, 0x7CB2, 0x179D, 0x7CB3, 0x179C, 0x7CB9, 0x17A0, 0x7CBC, 0x3A70,
+ 0x7CBD, 0x17A1, 0x7CBE, 0x0A5E, 0x7CBF, 0x3A71, 0x7CC0, 0x17A2, 0x7CC2,
+ 0x17A4, 0x7CC5, 0x17A3, 0x7CC8, 0x3A72, 0x7CC9, 0x3A73, 0x7CCA, 0x0786,
+ 0x7CCE, 0x0ABA, 0x7CD2, 0x17A6, 0x7CD6, 0x0C76, 0x7CD7, 0x3A74, 0x7CD8,
+ 0x17A5, 0x7CD9, 0x3A75, 0x7CDC, 0x17A7, 0x7CDD, 0x3A76, 0x7CDE, 0x0E05,
+ 0x7CDF, 0x0AEE, 0x7CE0, 0x07D9, 0x7CE2, 0x17A8, 0x7CE7, 0x0F90, 0x7CEB,
+ 0x3A77, 0x7CEF, 0x17AA, 0x7CF2, 0x17AB, 0x7CF4, 0x17AC, 0x7CF6, 0x17AD,
+ 0x7CF8, 0x08B3, 0x7CFA, 0x17AE, 0x7CFB, 0x0725, 0x7CFE, 0x0684, 0x7D00,
+ 0x0644, 0x7D02, 0x17B0, 0x7D04, 0x0EFF, 0x7D05, 0x07DA, 0x7D06, 0x17AF,
+ 0x7D07, 0x3A78, 0x7D08, 0x3A79, 0x7D09, 0x3A7A, 0x7D0A, 0x17B3, 0x7D0B,
+ 0x0EF2, 0x7D0D, 0x0CF2, 0x7D10, 0x0DA5, 0x7D13, 0x3A7B, 0x7D14, 0x096D,
+ 0x7D15, 0x17B2, 0x7D17, 0x08FF, 0x7D18, 0x07DB, 0x7D19, 0x08B4, 0x7D1A,
+ 0x0683, 0x7D1B, 0x0E06, 0x7D1C, 0x17B1, 0x7D1D, 0x3A7C, 0x7D20, 0x0AC9,
+ 0x7D21, 0x0E70, 0x7D22, 0x0867, 0x7D23, 0x3A7D, 0x7D2B, 0x08B5, 0x7D2C,
+ 0x0BF9, 0x7D2E, 0x17B6, 0x7D2F, 0x0FA7, 0x7D30, 0x0849, 0x7D32, 0x17B7,
+ 0x7D33, 0x0A08, 0x7D35, 0x17B9, 0x7D39, 0x09BA, 0x7D3A, 0x0820, 0x7D3F,
+ 0x17B8, 0x7D41, 0x3A7E, 0x7D42, 0x0934, 0x7D43, 0x0772, 0x7D44, 0x0ACA,
+ 0x7D45, 0x17B4, 0x7D46, 0x17BA, 0x7D48, 0x218F, 0x7D4B, 0x17B5, 0x7D4C,
+ 0x0726, 0x7D4E, 0x17BD, 0x7D4F, 0x17C1, 0x7D50, 0x0741, 0x7D53, 0x3A7F,
+ 0x7D56, 0x17BC, 0x7D59, 0x3A80, 0x7D5B, 0x17C5, 0x7D5C, 0x2190, 0x7D5D,
+ 0x3A81, 0x7D5E, 0x07DC, 0x7D61, 0x0F57, 0x7D62, 0x0480, 0x7D63, 0x17C2,
+ 0x7D66, 0x0685, 0x7D68, 0x17BF, 0x7D6E, 0x17C0, 0x7D71, 0x0C77, 0x7D72,
+ 0x17BE, 0x7D73, 0x17BB, 0x7D75, 0x0586, 0x7D76, 0x0A88, 0x7D79, 0x075C,
+ 0x7D7A, 0x3A82, 0x7D7D, 0x17C7, 0x7D86, 0x3A83, 0x7D89, 0x17C4, 0x7D8B,
+ 0x3A84, 0x7D8C, 0x3A85, 0x7D8F, 0x17C6, 0x7D93, 0x17C3, 0x7D99, 0x0727,
+ 0x7D9A, 0x0B13, 0x7D9B, 0x17C8, 0x7D9C, 0x0AF0, 0x7D9F, 0x17D5, 0x7DA0,
+ 0x2192, 0x7DA2, 0x17D1, 0x7DA3, 0x17CB, 0x7DAB, 0x17CF, 0x7DAC, 0x0926,
+ 0x7DAD, 0x04A1, 0x7DAE, 0x17CA, 0x7DAF, 0x17D2, 0x7DB0, 0x17D6, 0x7DB1,
+ 0x07DD, 0x7DB2, 0x0EE2, 0x7DB4, 0x0BF2, 0x7DB5, 0x17CC, 0x7DB7, 0x2191,
+ 0x7DB8, 0x17D4, 0x7DBA, 0x17C9, 0x7DBB, 0x0B7C, 0x7DBD, 0x17CE, 0x7DBE,
+ 0x0481, 0x7DBF, 0x0ED6, 0x7DC7, 0x17CD, 0x7DCA, 0x06D3, 0x7DCB, 0x0D80,
+ 0x7DCC, 0x3A86, 0x7DCF, 0x0AEF, 0x7DD1, 0x0F98, 0x7DD2, 0x0979, 0x7DD5,
+ 0x17FD, 0x7DD6, 0x2193, 0x7DD8, 0x17D7, 0x7DDA, 0x0AA2, 0x7DDC, 0x17D3,
+ 0x7DDD, 0x17D8, 0x7DDE, 0x17DA, 0x7DE0, 0x0C15, 0x7DE1, 0x17DD, 0x7DE3,
+ 0x340A, 0x7DE4, 0x17D9, 0x7DE8, 0x0E24, 0x7DE9, 0x0607, 0x7DEB, 0x3A87,
+ 0x7DEC, 0x0ED7, 0x7DEF, 0x04A2, 0x7DF1, 0x3A88, 0x7DF2, 0x17DC, 0x7DF4,
+ 0x0FC5, 0x7DF9, 0x3A89, 0x7DFB, 0x17DB, 0x7E01, 0x0511, 0x7E04, 0x0CC4,
+ 0x7E05, 0x17DE, 0x7E08, 0x3A8A, 0x7E09, 0x17E5, 0x7E0A, 0x17DF, 0x7E0B,
+ 0x17E6, 0x7E11, 0x3A8B, 0x7E12, 0x17E2, 0x7E15, 0x3A8C, 0x7E1B, 0x0D31,
+ 0x7E1E, 0x08F6, 0x7E1F, 0x17E4, 0x7E20, 0x3A8D, 0x7E21, 0x17E1, 0x7E22,
+ 0x17E7, 0x7E23, 0x17E0, 0x7E26, 0x094E, 0x7E2B, 0x0E53, 0x7E2E, 0x0956,
+ 0x7E31, 0x17E3, 0x7E32, 0x17EF, 0x7E35, 0x17EB, 0x7E37, 0x17EE, 0x7E39,
+ 0x17EC, 0x7E3A, 0x17F0, 0x7E3B, 0x17EA, 0x7E3D, 0x17D0, 0x7E3E, 0x0A77,
+ 0x7E41, 0x0D5F, 0x7E43, 0x17ED, 0x7E46, 0x17E8, 0x7E47, 0x3A8E, 0x7E48,
+ 0x3767, 0x7E4A, 0x0AA3, 0x7E4B, 0x0728, 0x7E4D, 0x0935, 0x7E52, 0x2194,
+ 0x7E54, 0x09EB, 0x7E55, 0x0AB8, 0x7E56, 0x17F3, 0x7E59, 0x17F5, 0x7E5A,
+ 0x17F6, 0x7E5D, 0x17F2, 0x7E5E, 0x17F4, 0x7E61, 0x1E11, 0x7E62, 0x3A8F,
+ 0x7E66, 0x17E9, 0x7E67, 0x17F1, 0x7E69, 0x17F9, 0x7E6A, 0x17F8, 0x7E6B,
+ 0x1DF7, 0x7E6D, 0x0EA8, 0x7E6E, 0x3A90, 0x7E70, 0x0701, 0x7E73, 0x3A91,
+ 0x7E79, 0x17F7, 0x7E7B, 0x17FB, 0x7E7C, 0x17FA, 0x7E7D, 0x17FE, 0x7E7F,
+ 0x1800, 0x7E82, 0x088A, 0x7E83, 0x17FC, 0x7E88, 0x1801, 0x7E89, 0x1802,
+ 0x7E8A, 0x20A7, 0x7E8C, 0x1803, 0x7E8D, 0x3A92, 0x7E8E, 0x1809, 0x7E8F,
+ 0x0C35, 0x7E90, 0x1805, 0x7E91, 0x3A93, 0x7E92, 0x1804, 0x7E93, 0x1806,
+ 0x7E94, 0x1807, 0x7E96, 0x1808, 0x7E98, 0x3A94, 0x7E9B, 0x180A, 0x7E9C,
+ 0x180B, 0x7F36, 0x0608, 0x7F38, 0x180C, 0x7F3A, 0x180D, 0x7F44, 0x3A95,
+ 0x7F45, 0x180E, 0x7F47, 0x2195, 0x7F4C, 0x180F, 0x7F4D, 0x1810, 0x7F4E,
+ 0x1811, 0x7F4F, 0x3A96, 0x7F50, 0x1812, 0x7F51, 0x1813, 0x7F52, 0x3A97,
+ 0x7F53, 0x3A98, 0x7F54, 0x1815, 0x7F55, 0x1814, 0x7F58, 0x1816, 0x7F5F,
+ 0x1817, 0x7F60, 0x1818, 0x7F61, 0x3A99, 0x7F67, 0x181B, 0x7F68, 0x1819,
+ 0x7F69, 0x181A, 0x7F6A, 0x0851, 0x7F6B, 0x0729, 0x7F6E, 0x0B94, 0x7F70,
+ 0x0D47, 0x7F72, 0x097A, 0x7F75, 0x0D03, 0x7F77, 0x0D81, 0x7F78, 0x181C,
+ 0x7F79, 0x1336, 0x7F82, 0x181D, 0x7F83, 0x181F, 0x7F85, 0x0F4F, 0x7F86,
+ 0x181E, 0x7F87, 0x1821, 0x7F88, 0x1820, 0x7F8A, 0x0F3D, 0x7F8C, 0x1822,
+ 0x7F8E, 0x0D92, 0x7F91, 0x3A9A, 0x7F94, 0x1823, 0x7F9A, 0x1826, 0x7F9D,
+ 0x1825, 0x7F9E, 0x1824, 0x7FA1, 0x2196, 0x7FA3, 0x1827, 0x7FA4, 0x0708,
+ 0x7FA8, 0x0AA4, 0x7FA9, 0x065B, 0x7FAE, 0x182B, 0x7FAF, 0x1828, 0x7FB2,
+ 0x1829, 0x7FB6, 0x182C, 0x7FB8, 0x182D, 0x7FB9, 0x182A, 0x7FBD, 0x04CB,
+ 0x7FBF, 0x3A9B, 0x7FC1, 0x0527, 0x7FC5, 0x182F, 0x7FC6, 0x1830, 0x7FCA,
+ 0x1831, 0x7FCC, 0x0F4C, 0x7FCE, 0x3A9C, 0x7FD2, 0x0936, 0x7FD4, 0x1833,
+ 0x7FD5, 0x1832, 0x7FDF, 0x3A9D, 0x7FE0, 0x0A2F, 0x7FE1, 0x1834, 0x7FE5,
+ 0x3A9E, 0x7FE6, 0x1835, 0x7FE9, 0x1836, 0x7FEB, 0x0621, 0x7FEC, 0x3A9F,
+ 0x7FEE, 0x3AA0, 0x7FEF, 0x3AA1, 0x7FF0, 0x0609, 0x7FF3, 0x1837, 0x7FF9,
+ 0x1838, 0x7FFA, 0x3AA2, 0x7FFB, 0x0E8B, 0x7FFC, 0x0F4D, 0x8000, 0x0F3E,
+ 0x8001, 0x0FDD, 0x8002, 0x3713, 0x8003, 0x07DF, 0x8004, 0x183B, 0x8005,
+ 0x0900, 0x8006, 0x183A, 0x800B, 0x183C, 0x800C, 0x08D5, 0x800E, 0x3AA3,
+ 0x8010, 0x0B31, 0x8011, 0x3AA4, 0x8012, 0x183D, 0x8014, 0x3AA5, 0x8015,
+ 0x07DE, 0x8017, 0x0EE3, 0x8018, 0x183E, 0x8019, 0x183F, 0x801C, 0x1840,
+ 0x8021, 0x1841, 0x8024, 0x3AA6, 0x8026, 0x3AA7, 0x8028, 0x1842, 0x8033,
+ 0x08D6, 0x8036, 0x0EF9, 0x803A, 0x3AA8, 0x803B, 0x1844, 0x803C, 0x3AA9,
+ 0x803D, 0x0B7D, 0x803F, 0x1843, 0x8046, 0x1846, 0x804A, 0x1845, 0x8052,
+ 0x1847, 0x8056, 0x0A5F, 0x8058, 0x1848, 0x805A, 0x1849, 0x805E, 0x0E09,
+ 0x805F, 0x184A, 0x8060, 0x3AAA, 0x8061, 0x0AF1, 0x8062, 0x184B, 0x8068,
+ 0x184C, 0x806F, 0x0FC6, 0x8070, 0x184F, 0x8071, 0x3AAB, 0x8072, 0x184E,
+ 0x8073, 0x184D, 0x8074, 0x0BCC, 0x8075, 0x3AAC, 0x8076, 0x1850, 0x8077,
+ 0x09EC, 0x8079, 0x1851, 0x807D, 0x1852, 0x807E, 0x0FDE, 0x807F, 0x1853,
+ 0x8084, 0x1854, 0x8085, 0x1856, 0x8086, 0x1855, 0x8087, 0x0D39, 0x8089,
+ 0x0CD1, 0x808B, 0x0FE4, 0x808C, 0x0D3D, 0x8093, 0x1858, 0x8096, 0x09BB,
+ 0x8098, 0x0D9C, 0x809A, 0x1859, 0x809B, 0x1857, 0x809D, 0x060A, 0x809E,
+ 0x3AAD, 0x80A1, 0x0788, 0x80A2, 0x08B6, 0x80A5, 0x0D82, 0x80A6, 0x3AAE,
+ 0x80A9, 0x075E, 0x80AA, 0x0E71, 0x80AB, 0x3AAF, 0x80AC, 0x185C, 0x80AD,
+ 0x185A, 0x80AF, 0x07E0, 0x80B1, 0x07E1, 0x80B2, 0x04AD, 0x80B4, 0x0858,
+ 0x80BA, 0x0D0F, 0x80C3, 0x04A3, 0x80C4, 0x1861, 0x80C6, 0x0B7E, 0x80CC,
+ 0x0D0E, 0x80CE, 0x0B3B, 0x80D6, 0x1863, 0x80D7, 0x3AB0, 0x80D8, 0x3AB1,
+ 0x80D9, 0x185F, 0x80DA, 0x1862, 0x80DB, 0x185D, 0x80DD, 0x1860, 0x80DE,
+ 0x0E54, 0x80E1, 0x0789, 0x80E4, 0x04C1, 0x80E5, 0x185E, 0x80EF, 0x1865,
+ 0x80F1, 0x1866, 0x80F4, 0x0C91, 0x80F8, 0x06B3, 0x80FC, 0x1871, 0x80FD,
+ 0x0CF3, 0x8102, 0x08B7, 0x8105, 0x06B4, 0x8106, 0x0A6C, 0x8107, 0x0FEC,
+ 0x8108, 0x0EBA, 0x8109, 0x1864, 0x810A, 0x0A78, 0x8116, 0x3AB2, 0x8118,
+ 0x3AB3, 0x811A, 0x066D, 0x811B, 0x1867, 0x8123, 0x1869, 0x8129, 0x1868,
+ 0x812B, 0x3659, 0x812F, 0x186A, 0x8131, 0x0B64, 0x8133, 0x0CF4, 0x8139,
+ 0x0BCD, 0x813A, 0x3AB4, 0x813E, 0x186E, 0x8141, 0x3772, 0x8146, 0x186D,
+ 0x814A, 0x3AB5, 0x814B, 0x186B, 0x814C, 0x3AB6, 0x814E, 0x0A1B, 0x8150,
+ 0x0DD7, 0x8151, 0x1870, 0x8153, 0x186F, 0x8154, 0x07E2, 0x8155, 0x0FF9,
+ 0x815F, 0x1880, 0x8165, 0x1874, 0x8166, 0x1875, 0x816B, 0x091C, 0x816E,
+ 0x1873, 0x8170, 0x080A, 0x8171, 0x1872, 0x8174, 0x1876, 0x8178, 0x0BCE,
+ 0x8179, 0x0DF2, 0x817A, 0x0AA5, 0x817F, 0x0B3C, 0x8180, 0x187A, 0x8181,
+ 0x3AB7, 0x8182, 0x187B, 0x8183, 0x1877, 0x8184, 0x3AB8, 0x8188, 0x1878,
+ 0x818A, 0x1879, 0x818F, 0x07E3, 0x8193, 0x1881, 0x8195, 0x187D, 0x819A,
+ 0x0DD8, 0x819C, 0x0E9A, 0x819D, 0x0D9A, 0x81A0, 0x187C, 0x81A3, 0x187F,
+ 0x81A4, 0x187E, 0x81A8, 0x0E72, 0x81A9, 0x1882, 0x81B0, 0x1883, 0x81B3,
+ 0x0AB9, 0x81B4, 0x3AB9, 0x81B5, 0x1884, 0x81B8, 0x1886, 0x81BA, 0x188A,
+ 0x81BD, 0x1887, 0x81BE, 0x1885, 0x81BF, 0x0CF5, 0x81C0, 0x1888, 0x81C2,
+ 0x1889, 0x81C6, 0x0532, 0x81C8, 0x1890, 0x81C9, 0x188B, 0x81CD, 0x188C,
+ 0x81CF, 0x3ABA, 0x81D1, 0x188D, 0x81D3, 0x0B01, 0x81D8, 0x188F, 0x81D9,
+ 0x188E, 0x81DA, 0x1891, 0x81DF, 0x1892, 0x81E0, 0x1893, 0x81E3, 0x0A09,
+ 0x81E5, 0x0569, 0x81E7, 0x1894, 0x81E8, 0x0F9F, 0x81EA, 0x08D7, 0x81ED,
+ 0x0937, 0x81F3, 0x08B8, 0x81F4, 0x0B95, 0x81F9, 0x3ABB, 0x81FA, 0x1895,
+ 0x81FB, 0x1896, 0x81FC, 0x04D3, 0x81FE, 0x1897, 0x8201, 0x1898, 0x8202,
+ 0x1899, 0x8203, 0x3ABC, 0x8205, 0x189A, 0x8207, 0x189B, 0x8208, 0x06B5,
+ 0x8209, 0x13AF, 0x820A, 0x189C, 0x820C, 0x0A89, 0x820D, 0x189D, 0x820E,
+ 0x08F7, 0x8210, 0x189E, 0x8212, 0x1009, 0x8216, 0x189F, 0x8217, 0x0E2E,
+ 0x8218, 0x0618, 0x821B, 0x0AA6, 0x821C, 0x0962, 0x821E, 0x0DE3, 0x821F,
+ 0x0938, 0x8221, 0x3ABD, 0x8229, 0x18A0, 0x822A, 0x07E4, 0x822B, 0x18A1,
+ 0x822C, 0x0D60, 0x822E, 0x18AF, 0x8232, 0x3ABE, 0x8233, 0x18A3, 0x8234,
+ 0x3ABF, 0x8235, 0x0B29, 0x8236, 0x0D2B, 0x8237, 0x0773, 0x8238, 0x18A2,
+ 0x8239, 0x0AA7, 0x8240, 0x18A4, 0x8246, 0x3AC0, 0x8247, 0x0C16, 0x824B,
+ 0x3AC1, 0x824F, 0x3AC2, 0x8258, 0x18A6, 0x8259, 0x18A5, 0x825A, 0x18A8,
+ 0x825D, 0x18A7, 0x825F, 0x18A9, 0x8262, 0x18AB, 0x8264, 0x18AA, 0x8266,
+ 0x060B, 0x8268, 0x18AC, 0x826A, 0x18AD, 0x826B, 0x18AE, 0x826E, 0x0821,
+ 0x826F, 0x0F91, 0x8271, 0x18B0, 0x8272, 0x09ED, 0x8276, 0x0512, 0x8277,
+ 0x18B1, 0x8278, 0x18B2, 0x8279, 0x3775, 0x827E, 0x18B3, 0x828B, 0x04B6,
+ 0x828D, 0x18B4, 0x828E, 0x3AC3, 0x8292, 0x18B5, 0x8299, 0x0DD9, 0x829D,
+ 0x08F3, 0x829F, 0x18B7, 0x82A5, 0x0587, 0x82A6, 0x0476, 0x82AB, 0x18B6,
+ 0x82AC, 0x18B9, 0x82AD, 0x0D04, 0x82AE, 0x3AC4, 0x82AF, 0x0A0A, 0x82B1,
+ 0x0556, 0x82B3, 0x0E55, 0x82B7, 0x3AC5, 0x82B8, 0x0733, 0x82B9, 0x06D4,
+ 0x82BB, 0x18B8, 0x82BD, 0x056A, 0x82BE, 0x3AC6, 0x82C5, 0x05DF, 0x82C6,
+ 0x3AC7, 0x82D1, 0x0513, 0x82D2, 0x18BD, 0x82D3, 0x0FB2, 0x82D4, 0x0B3D,
+ 0x82D7, 0x0DB6, 0x82D9, 0x18C9, 0x82DB, 0x0557, 0x82DC, 0x18C7, 0x82DE,
+ 0x18C5, 0x82DF, 0x18BC, 0x82E1, 0x18BA, 0x82E3, 0x18BB, 0x82E5, 0x090F,
+ 0x82E6, 0x06E4, 0x82E7, 0x0BB5, 0x82EB, 0x0CA9, 0x82F1, 0x04F3, 0x82F3,
+ 0x18BF, 0x82F4, 0x18BE, 0x82F9, 0x18C4, 0x82FA, 0x18C0, 0x82FB, 0x18C3,
+ 0x82FE, 0x3AC8, 0x8301, 0x2198, 0x8302, 0x0EDC, 0x8303, 0x18C2, 0x8304,
+ 0x0558, 0x8305, 0x05DB, 0x8306, 0x18C6, 0x8309, 0x18C8, 0x830E, 0x072A,
+ 0x8316, 0x18CC, 0x8317, 0x18D5, 0x8318, 0x18D6, 0x831C, 0x046F, 0x8323,
+ 0x18DD, 0x8328, 0x04B5, 0x832B, 0x18D4, 0x832F, 0x18D3, 0x8331, 0x18CE,
+ 0x8332, 0x18CD, 0x8334, 0x18CB, 0x8335, 0x18CA, 0x8336, 0x0BA1, 0x8338,
+ 0x0B5B, 0x8339, 0x18D0, 0x8340, 0x18CF, 0x8343, 0x3AC9, 0x8345, 0x18D2,
+ 0x8349, 0x0AF2, 0x834A, 0x072B, 0x834F, 0x04E3, 0x8350, 0x18D1, 0x8351,
+ 0x3ACA, 0x8352, 0x07E5, 0x8355, 0x3ACB, 0x8358, 0x0AF3, 0x8362, 0x2199,
+ 0x8373, 0x18E3, 0x8375, 0x18E4, 0x8377, 0x0559, 0x837B, 0x052E, 0x837C,
+ 0x18E1, 0x837F, 0x219A, 0x8385, 0x18D7, 0x8386, 0x3ACC, 0x8387, 0x18DF,
+ 0x8389, 0x18E6, 0x838A, 0x18E0, 0x838D, 0x3ACD, 0x838E, 0x18DE, 0x8392,
+ 0x3ACE, 0x8393, 0x18C1, 0x8396, 0x18DC, 0x8398, 0x3ACF, 0x839A, 0x18D8,
+ 0x839E, 0x060C, 0x839F, 0x18DA, 0x83A0, 0x18E5, 0x83A2, 0x18DB, 0x83A8,
+ 0x18E7, 0x83A9, 0x3AD0, 0x83AA, 0x18D9, 0x83AB, 0x0D32, 0x83B1, 0x0F53,
+ 0x83B5, 0x18E2, 0x83BD, 0x18F8, 0x83BF, 0x3AD1, 0x83C0, 0x3AD2, 0x83C1,
+ 0x18F0, 0x83C5, 0x0A41, 0x83C7, 0x219B, 0x83CA, 0x0660, 0x83CC, 0x06D5,
+ 0x83CE, 0x18EB, 0x83D3, 0x055B, 0x83D6, 0x09BC, 0x83D8, 0x18EE, 0x83DC,
+ 0x084A, 0x83DF, 0x0C4B, 0x83E0, 0x18F3, 0x83E9, 0x0E3E, 0x83EA, 0x3AD3,
+ 0x83EB, 0x18EA, 0x83EF, 0x055A, 0x83F0, 0x078A, 0x83F1, 0x0D9B, 0x83F2,
+ 0x18F4, 0x83F4, 0x18E8, 0x83F6, 0x219C, 0x83F7, 0x18F1, 0x83FB, 0x18FB,
+ 0x83FD, 0x18EC, 0x8403, 0x18ED, 0x8404, 0x0C92, 0x8407, 0x18F2, 0x840A,
+ 0x1E7F, 0x840B, 0x18EF, 0x840C, 0x0E56, 0x840D, 0x18F5, 0x840E, 0x04A4,
+ 0x840F, 0x3AD4, 0x8411, 0x3AD5, 0x8413, 0x18E9, 0x8420, 0x18F7, 0x8422,
+ 0x18F6, 0x8429, 0x0D21, 0x842A, 0x18FD, 0x842C, 0x1908, 0x8431, 0x05DC,
+ 0x8435, 0x190B, 0x8438, 0x18F9, 0x843C, 0x18FE, 0x843D, 0x0F58, 0x8446,
+ 0x1907, 0x8448, 0x219D, 0x8449, 0x0F3F, 0x844A, 0x3AD6, 0x844E, 0x0F72,
+ 0x8457, 0x0BB6, 0x845B, 0x05C9, 0x8461, 0x0DE4, 0x8462, 0x190D, 0x8463,
+ 0x0C79, 0x8466, 0x0475, 0x8469, 0x1906, 0x846B, 0x1902, 0x846C, 0x0AF4,
+ 0x846D, 0x18FC, 0x846E, 0x1904, 0x846F, 0x1909, 0x8471, 0x0CE2, 0x8475,
+ 0x046E, 0x8476, 0x3AD7, 0x8477, 0x1901, 0x8479, 0x190A, 0x847A, 0x0DEA,
+ 0x8482, 0x1905, 0x8484, 0x1900, 0x848B, 0x09BD, 0x8490, 0x0939, 0x8494,
+ 0x08D8, 0x8499, 0x0EE4, 0x849C, 0x0DB9, 0x849F, 0x1910, 0x84A1, 0x1919,
+ 0x84A8, 0x3AD8, 0x84AD, 0x1903, 0x84AF, 0x3AD9, 0x84B2, 0x05D5, 0x84B4,
+ 0x219E, 0x84B8, 0x09E0, 0x84B9, 0x190E, 0x84BB, 0x1913, 0x84BC, 0x0AF5,
+ 0x84BF, 0x190F, 0x84C0, 0x3ADA, 0x84C1, 0x1916, 0x84C2, 0x3ADB, 0x84C4,
+ 0x0B9D, 0x84C6, 0x1917, 0x84C9, 0x0F40, 0x84CA, 0x190C, 0x84CB, 0x0596,
+ 0x84CD, 0x1912, 0x84D0, 0x1915, 0x84D1, 0x0EB8, 0x84D6, 0x1918, 0x84D9,
+ 0x1911, 0x84DA, 0x1914, 0x84DC, 0x20AB, 0x84EC, 0x0E57, 0x84EE, 0x0FC7,
+ 0x84F0, 0x3ADC, 0x84F4, 0x191C, 0x84FC, 0x1923, 0x84FD, 0x3ADD, 0x84FF,
+ 0x191B, 0x8500, 0x08EF, 0x8506, 0x18FA, 0x850C, 0x3ADE, 0x8511, 0x0E1E,
+ 0x8513, 0x0EAE, 0x8514, 0x1922, 0x8515, 0x1921, 0x8517, 0x191D, 0x8518,
+ 0x191E, 0x851A, 0x04D8, 0x851F, 0x1920, 0x8521, 0x191A, 0x8523, 0x1E1A,
+ 0x8526, 0x0BF1, 0x852C, 0x191F, 0x852D, 0x04C2, 0x8534, 0x3ADF, 0x8535,
+ 0x0B02, 0x853D, 0x0E13, 0x853E, 0x1EB5, 0x8540, 0x1924, 0x8541, 0x1928,
+ 0x8543, 0x0D6D, 0x8548, 0x1927, 0x8549, 0x09BE, 0x854A, 0x08F5, 0x854B,
+ 0x192A, 0x854E, 0x06B6, 0x8553, 0x219F, 0x8555, 0x192B, 0x8557, 0x0DEB,
+ 0x8558, 0x1926, 0x8559, 0x21A0, 0x855A, 0x18FF, 0x855E, 0x3AE0, 0x8563,
+ 0x1925, 0x8568, 0x0FF5, 0x8569, 0x0C7A, 0x856A, 0x0DE5, 0x856B, 0x21A1,
+ 0x856D, 0x1932, 0x8577, 0x1938, 0x857E, 0x1939, 0x8580, 0x192C, 0x8584,
+ 0x0D2C, 0x8587, 0x1936, 0x8588, 0x192E, 0x858A, 0x1930, 0x858F, 0x3AE1,
+ 0x8590, 0x193A, 0x8591, 0x192F, 0x8594, 0x1933, 0x8597, 0x0514, 0x8599,
+ 0x0CBD, 0x859B, 0x1934, 0x859C, 0x1937, 0x85A4, 0x192D, 0x85A6, 0x0AA8,
+ 0x85A8, 0x1931, 0x85A9, 0x0875, 0x85AA, 0x0A0B, 0x85AB, 0x0706, 0x85AC,
+ 0x0F00, 0x85AD, 0x3AE4, 0x85AE, 0x0F05, 0x85AF, 0x097C, 0x85B0, 0x21A3,
+ 0x85B7, 0x3AE2, 0x85B9, 0x193E, 0x85BA, 0x193C, 0x85C1, 0x0FF4, 0x85C9,
+ 0x193B, 0x85CD, 0x0F5F, 0x85CE, 0x3AE3, 0x85CF, 0x193D, 0x85D0, 0x193F,
+ 0x85D5, 0x1940, 0x85DC, 0x1943, 0x85DD, 0x1941, 0x85E4, 0x0C7B, 0x85E5,
+ 0x1942, 0x85E9, 0x0D61, 0x85EA, 0x1935, 0x85F4, 0x3780, 0x85F7, 0x097D,
+ 0x85F9, 0x1944, 0x85FA, 0x1949, 0x85FB, 0x0AF6, 0x85FE, 0x1948, 0x8602,
+ 0x1929, 0x8606, 0x194A, 0x8607, 0x0ACB, 0x860A, 0x1945, 0x860B, 0x1947,
+ 0x8612, 0x3AE5, 0x8613, 0x1946, 0x8616, 0x14D0, 0x8617, 0x14C1, 0x861A,
+ 0x194C, 0x8622, 0x194B, 0x8629, 0x3AE6, 0x862D, 0x0F60, 0x862F, 0x16B1,
+ 0x8630, 0x194D, 0x863F, 0x194E, 0x864D, 0x194F, 0x864E, 0x078B, 0x8650,
+ 0x066E, 0x8652, 0x3AE7, 0x8654, 0x1951, 0x8655, 0x1094, 0x865A, 0x068F,
+ 0x865B, 0x3418, 0x865C, 0x0F82, 0x865E, 0x06EB, 0x865F, 0x1952, 0x8663,
+ 0x3AE8, 0x8667, 0x1953, 0x866B, 0x0BAC, 0x866C, 0x3AE9, 0x866F, 0x3AEA,
+ 0x8671, 0x1954, 0x8679, 0x0CD2, 0x867A, 0x3AEB, 0x867B, 0x047E, 0x867D,
+ 0x3786, 0x868A, 0x0563, 0x868B, 0x1959, 0x868C, 0x195A, 0x868D, 0x3AEC,
+ 0x8691, 0x3AED, 0x8693, 0x1955, 0x8695, 0x088B, 0x8698, 0x3AEE, 0x86A3,
+ 0x1956, 0x86A4, 0x0CF8, 0x86A7, 0x3AEF, 0x86A8, 0x3AF0, 0x86A9, 0x1957,
+ 0x86AA, 0x1958, 0x86AB, 0x1962, 0x86AF, 0x195C, 0x86B0, 0x195F, 0x86B6,
+ 0x195B, 0x86C4, 0x195D, 0x86C6, 0x195E, 0x86C7, 0x0904, 0x86C9, 0x1960,
+ 0x86CB, 0x0B7F, 0x86CD, 0x072C, 0x86CE, 0x05A0, 0x86D4, 0x1963, 0x86D9,
+ 0x059D, 0x86DB, 0x1968, 0x86DE, 0x1964, 0x86DF, 0x1967, 0x86E4, 0x0D4E,
+ 0x86E9, 0x1965, 0x86EC, 0x1966, 0x86ED, 0x0DBA, 0x86EE, 0x0D6E, 0x86EF,
+ 0x1969, 0x86F8, 0x0B5D, 0x86F9, 0x1973, 0x86FA, 0x3AF1, 0x86FB, 0x196F,
+ 0x86FD, 0x3AF2, 0x86FE, 0x056B, 0x8700, 0x196D, 0x8702, 0x0E58, 0x8703,
+ 0x196E, 0x8706, 0x196B, 0x8708, 0x196C, 0x8709, 0x1971, 0x870A, 0x1974,
+ 0x870B, 0x3AF3, 0x870D, 0x1972, 0x8711, 0x1970, 0x8712, 0x196A, 0x8713,
+ 0x3AF4, 0x8718, 0x0B96, 0x8719, 0x3AF5, 0x871A, 0x197B, 0x871C, 0x0EB6,
+ 0x871E, 0x3AF6, 0x8725, 0x1979, 0x8728, 0x3AF7, 0x8729, 0x197A, 0x8734,
+ 0x1975, 0x8737, 0x1977, 0x873B, 0x1978, 0x873E, 0x3AF8, 0x873F, 0x1976,
+ 0x8749, 0x0A8A, 0x874B, 0x0FDF, 0x874C, 0x197F, 0x874E, 0x1980, 0x8753,
+ 0x1986, 0x8755, 0x09F0, 0x8757, 0x1982, 0x8759, 0x1985, 0x875F, 0x197D,
+ 0x8760, 0x197C, 0x8763, 0x1987, 0x8766, 0x055C, 0x8768, 0x1983, 0x876A,
+ 0x1988, 0x876E, 0x1984, 0x8771, 0x3AF9, 0x8774, 0x1981, 0x8776, 0x0BCF,
+ 0x8778, 0x197E, 0x877F, 0x0D1E, 0x8782, 0x198C, 0x8788, 0x3AFA, 0x878D,
+ 0x0F25, 0x8799, 0x3AFB, 0x879F, 0x198B, 0x87A2, 0x198A, 0x87AB, 0x1993,
+ 0x87AC, 0x3AFC, 0x87AD, 0x3AFD, 0x87AF, 0x198D, 0x87B3, 0x1995, 0x87B5,
+ 0x3AFE, 0x87BA, 0x0F50, 0x87BB, 0x1998, 0x87BD, 0x198F, 0x87C0, 0x1990,
+ 0x87C4, 0x1994, 0x87C6, 0x1997, 0x87C7, 0x1996, 0x87CB, 0x198E, 0x87D0,
+ 0x1991, 0x87D2, 0x19A2, 0x87D6, 0x3AFF, 0x87E0, 0x199B, 0x87EB, 0x3B00,
+ 0x87EC, 0x1E23, 0x87ED, 0x3B01, 0x87EF, 0x1999, 0x87F2, 0x199A, 0x87F5,
+ 0x3C3D, 0x87F6, 0x199F, 0x87F7, 0x19A0, 0x87F9, 0x0588, 0x87FB, 0x065C,
+ 0x87FE, 0x199E, 0x8801, 0x3B02, 0x8803, 0x3B03, 0x8805, 0x1989, 0x8806,
+ 0x3B04, 0x8807, 0x21A6, 0x880B, 0x3B05, 0x880D, 0x199D, 0x880E, 0x19A1,
+ 0x880F, 0x199C, 0x8811, 0x19A3, 0x8814, 0x3B06, 0x8815, 0x19A5, 0x8816,
+ 0x19A4, 0x881C, 0x3B07, 0x881F, 0x1E85, 0x8821, 0x19A7, 0x8822, 0x19A6,
+ 0x8823, 0x1961, 0x8827, 0x19AB, 0x8831, 0x19A8, 0x8836, 0x19A9, 0x8839,
+ 0x19AA, 0x883B, 0x19AC, 0x8840, 0x0742, 0x8842, 0x19AE, 0x8844, 0x19AD,
+ 0x8846, 0x093A, 0x884C, 0x07E6, 0x884D, 0x1524, 0x8852, 0x19AF, 0x8853,
+ 0x095B, 0x8856, 0x3B08, 0x8857, 0x0597, 0x8859, 0x19B0, 0x885B, 0x04F4,
+ 0x885D, 0x09BF, 0x885E, 0x19B1, 0x885F, 0x3B09, 0x8861, 0x07E7, 0x8862,
+ 0x19B2, 0x8863, 0x04A5, 0x8864, 0x3B0A, 0x8868, 0x0DAF, 0x886B, 0x19B3,
+ 0x8870, 0x0A30, 0x8872, 0x19BA, 0x8875, 0x19B7, 0x8877, 0x0BAD, 0x887D,
+ 0x19B8, 0x887E, 0x19B5, 0x887F, 0x06D6, 0x8881, 0x19B4, 0x8882, 0x19BB,
+ 0x8888, 0x070C, 0x888B, 0x0B3E, 0x888D, 0x19C1, 0x8892, 0x19BD, 0x8896,
+ 0x0B15, 0x8897, 0x19BC, 0x8898, 0x3B0B, 0x8899, 0x19BF, 0x889E, 0x19B6,
+ 0x88A2, 0x19C0, 0x88A4, 0x19C2, 0x88AA, 0x3B0C, 0x88AB, 0x0D83, 0x88AE,
+ 0x19BE, 0x88B0, 0x19C3, 0x88B1, 0x19C5, 0x88B4, 0x0787, 0x88B5, 0x19B9,
+ 0x88B7, 0x0485, 0x88BD, 0x3B0D, 0x88BE, 0x3B0E, 0x88BF, 0x19C4, 0x88C1,
+ 0x084B, 0x88C2, 0x0FBE, 0x88C3, 0x19C6, 0x88C4, 0x19C7, 0x88C5, 0x0AF7,
+ 0x88C6, 0x3789, 0x88CA, 0x3B0F, 0x88CF, 0x0F6A, 0x88D2, 0x3B10, 0x88D4,
+ 0x19C8, 0x88D5, 0x0F1F, 0x88D8, 0x19C9, 0x88D9, 0x19CA, 0x88DB, 0x3B11,
+ 0x88DC, 0x0E34, 0x88DD, 0x19CB, 0x88DF, 0x0830, 0x88E1, 0x0F6B, 0x88E8,
+ 0x19D0, 0x88F0, 0x3B12, 0x88F1, 0x3B13, 0x88F2, 0x19D1, 0x88F3, 0x09C0,
+ 0x88F4, 0x19CF, 0x88F5, 0x21A7, 0x88F8, 0x0F51, 0x88F9, 0x19CC, 0x88FC,
+ 0x19CE, 0x88FD, 0x0A61, 0x88FE, 0x0A44, 0x8902, 0x19CD, 0x8904, 0x19D2,
+ 0x8906, 0x3B14, 0x8907, 0x0DF3, 0x890A, 0x19D4, 0x890C, 0x19D3, 0x8910,
+ 0x05CA, 0x8912, 0x0E59, 0x8913, 0x19D5, 0x8918, 0x3B15, 0x8919, 0x3B16,
+ 0x891A, 0x3B17, 0x891C, 0x20A8, 0x891D, 0x19E1, 0x891E, 0x19D7, 0x8925,
+ 0x19D8, 0x8927, 0x3B18, 0x892A, 0x19D9, 0x892B, 0x19DA, 0x8930, 0x3B19,
+ 0x8936, 0x19DE, 0x8938, 0x19DF, 0x893B, 0x19DD, 0x893E, 0x3B1A, 0x8941,
+ 0x19DB, 0x8943, 0x19D6, 0x8944, 0x19DC, 0x894C, 0x19E0, 0x894D, 0x1BD0,
+ 0x8956, 0x0528, 0x895E, 0x19E3, 0x895F, 0x06D7, 0x8960, 0x19E2, 0x8964,
+ 0x19E5, 0x8966, 0x19E4, 0x896A, 0x19E7, 0x896D, 0x19E6, 0x896F, 0x19E8,
+ 0x8972, 0x093B, 0x8974, 0x19E9, 0x8977, 0x19EA, 0x897B, 0x3B1B, 0x897E,
+ 0x19EB, 0x897F, 0x0A62, 0x8980, 0x362E, 0x8981, 0x0F41, 0x8983, 0x19EC,
+ 0x8986, 0x0DF4, 0x8987, 0x0CFC, 0x8988, 0x19ED, 0x898A, 0x19EE, 0x898B,
+ 0x075F, 0x898F, 0x0646, 0x8993, 0x19EF, 0x8996, 0x08B9, 0x8997, 0x0CF7,
+ 0x8998, 0x19F0, 0x899A, 0x05AE, 0x89A1, 0x19F1, 0x89A6, 0x19F3, 0x89A7,
+ 0x0F61, 0x89A9, 0x19F2, 0x89AA, 0x0A0C, 0x89AC, 0x19F4, 0x89AF, 0x19F5,
+ 0x89B2, 0x19F6, 0x89B3, 0x060D, 0x89BA, 0x19F7, 0x89BD, 0x19F8, 0x89BF,
+ 0x19F9, 0x89C0, 0x19FA, 0x89D2, 0x05AF, 0x89D4, 0x3B1C, 0x89D6, 0x3B1D,
+ 0x89DA, 0x19FB, 0x89DC, 0x19FC, 0x89DD, 0x19FD, 0x89E3, 0x0572, 0x89E5,
+ 0x3B1E, 0x89E6, 0x09EE, 0x89E7, 0x19FE, 0x89F1, 0x3B1F, 0x89F4, 0x19FF,
+ 0x89F8, 0x1A00, 0x8A00, 0x0774, 0x8A01, 0x35BC, 0x8A02, 0x0C17, 0x8A03,
+ 0x1A01, 0x8A07, 0x3B20, 0x8A08, 0x072D, 0x8A0A, 0x0A1C, 0x8A0C, 0x1A04,
+ 0x8A0E, 0x0C7C, 0x8A0F, 0x3B21, 0x8A10, 0x1A03, 0x8A12, 0x21A8, 0x8A13,
+ 0x0707, 0x8A15, 0x3B22, 0x8A16, 0x1A02, 0x8A17, 0x0B57, 0x8A18, 0x0647,
+ 0x8A1B, 0x1A05, 0x8A1D, 0x1A06, 0x8A1F, 0x09C1, 0x8A22, 0x3B23, 0x8A23,
+ 0x0743, 0x8A25, 0x1A07, 0x8A2A, 0x0E5A, 0x8A2D, 0x0A83, 0x8A31, 0x0690,
+ 0x8A33, 0x0F01, 0x8A34, 0x0ACC, 0x8A36, 0x1A08, 0x8A37, 0x21A9, 0x8A3A,
+ 0x0A0D, 0x8A3B, 0x0BAE, 0x8A3C, 0x09C2, 0x8A41, 0x1A09, 0x8A46, 0x1A0C,
+ 0x8A48, 0x1A0D, 0x8A4E, 0x3B24, 0x8A50, 0x082E, 0x8A51, 0x0B22, 0x8A52,
+ 0x1A0B, 0x8A54, 0x09C3, 0x8A55, 0x0DB0, 0x8A5B, 0x1A0A, 0x8A5E, 0x08BA,
+ 0x8A60, 0x04F5, 0x8A62, 0x1A11, 0x8A63, 0x072E, 0x8A66, 0x08BC, 0x8A69,
+ 0x08BB, 0x8A6B, 0x0FF3, 0x8A6C, 0x1A10, 0x8A6D, 0x1A0F, 0x8A6E, 0x0AA9,
+ 0x8A70, 0x0667, 0x8A71, 0x0FE9, 0x8A72, 0x0598, 0x8A73, 0x09C4, 0x8A79,
+ 0x21AA, 0x8A7C, 0x1A0E, 0x8A7F, 0x3B25, 0x8A82, 0x1A13, 0x8A84, 0x1A14,
+ 0x8A85, 0x1A12, 0x8A87, 0x078C, 0x8A89, 0x0F2A, 0x8A8C, 0x08BD, 0x8A8D,
+ 0x0CDD, 0x8A91, 0x1A17, 0x8A93, 0x0A64, 0x8A95, 0x0B80, 0x8A98, 0x0F20,
+ 0x8A9A, 0x1A1A, 0x8A9E, 0x07A0, 0x8AA0, 0x0A63, 0x8AA1, 0x1A16, 0x8AA3,
+ 0x1A1B, 0x8AA4, 0x07A1, 0x8AA5, 0x1A18, 0x8AA6, 0x1A19, 0x8AA7, 0x21AB,
+ 0x8AA8, 0x1A15, 0x8AAA, 0x3638, 0x8AAC, 0x0A86, 0x8AAD, 0x0CA1, 0x8AB0,
+ 0x0B6D, 0x8AB2, 0x055D, 0x8AB9, 0x0D84, 0x8ABC, 0x065D, 0x8ABE, 0x21AC,
+ 0x8ABF, 0x0BD0, 0x8AC2, 0x1A1E, 0x8AC4, 0x1A1C, 0x8AC7, 0x0B8A, 0x8ACB,
+ 0x0A65, 0x8ACC, 0x060E, 0x8ACD, 0x1A1D, 0x8ACF, 0x0A21, 0x8AD2, 0x0F92,
+ 0x8AD6, 0x0FE6, 0x8ADA, 0x1A1F, 0x8ADB, 0x1A2A, 0x8ADC, 0x0BD1, 0x8ADE,
+ 0x1A29, 0x8ADF, 0x21AD, 0x8AE0, 0x1A26, 0x8AE1, 0x1A2E, 0x8AE2, 0x1A27,
+ 0x8AE4, 0x1A23, 0x8AE6, 0x0C18, 0x8AE7, 0x1A22, 0x8AEB, 0x1A20, 0x8AED,
+ 0x0F0B, 0x8AEE, 0x08BE, 0x8AF1, 0x1A24, 0x8AF3, 0x1A21, 0x8AF4, 0x3B26,
+ 0x8AF6, 0x21AF, 0x8AF7, 0x1A28, 0x8AF8, 0x097E, 0x8AFA, 0x0775, 0x8AFE,
+ 0x0B5A, 0x8B00, 0x0E73, 0x8B01, 0x04FC, 0x8B02, 0x04A6, 0x8B04, 0x0C7D,
+ 0x8B07, 0x1A2C, 0x8B0C, 0x1A2B, 0x8B0E, 0x0CBE, 0x8B10, 0x1A30, 0x8B14,
+ 0x1A25, 0x8B16, 0x1A2F, 0x8B17, 0x1A31, 0x8B19, 0x0760, 0x8B1A, 0x1A2D,
+ 0x8B1B, 0x07E8, 0x8B1D, 0x0901, 0x8B1F, 0x3B27, 0x8B20, 0x1A32, 0x8B21,
+ 0x0F42, 0x8B26, 0x1A35, 0x8B28, 0x1A38, 0x8B2B, 0x1A36, 0x8B2C, 0x0DA7,
+ 0x8B33, 0x1A33, 0x8B37, 0x3B28, 0x8B39, 0x06D8, 0x8B3E, 0x1A37, 0x8B41,
+ 0x1A39, 0x8B43, 0x3B29, 0x8B44, 0x3B2A, 0x8B49, 0x1A3D, 0x8B4C, 0x1A3A,
+ 0x8B4E, 0x1A3C, 0x8B4F, 0x1A3B, 0x8B53, 0x21B0, 0x8B54, 0x3B2B, 0x8B56,
+ 0x1A3E, 0x8B58, 0x08DD, 0x8B5A, 0x1A40, 0x8B5B, 0x1A3F, 0x8B5C, 0x0DDA,
+ 0x8B5F, 0x1A42, 0x8B66, 0x072F, 0x8B6B, 0x1A41, 0x8B6C, 0x1A43, 0x8B6F,
+ 0x1A44, 0x8B70, 0x065E, 0x8B71, 0x182E, 0x8B72, 0x09E1, 0x8B74, 0x1A45,
+ 0x8B77, 0x07A2, 0x8B7D, 0x1A46, 0x8B7F, 0x21B1, 0x8B80, 0x1A47, 0x8B83,
+ 0x088C, 0x8B8A, 0x13D3, 0x8B8C, 0x1A48, 0x8B8E, 0x1A49, 0x8B90, 0x093C,
+ 0x8B92, 0x1A4A, 0x8B93, 0x1A4B, 0x8B96, 0x1A4C, 0x8B99, 0x1A4D, 0x8B9A,
+ 0x1A4E, 0x8B9C, 0x3B2C, 0x8B9E, 0x3B2D, 0x8C37, 0x0B69, 0x8C3A, 0x1A4F,
+ 0x8C3F, 0x1A51, 0x8C41, 0x1A50, 0x8C46, 0x0C7E, 0x8C47, 0x3B2E, 0x8C48,
+ 0x1A52, 0x8C4A, 0x0E5B, 0x8C4C, 0x1A53, 0x8C4E, 0x1A54, 0x8C50, 0x1A55,
+ 0x8C54, 0x3B2F, 0x8C55, 0x1A56, 0x8C5A, 0x0CB2, 0x8C61, 0x09C5, 0x8C62,
+ 0x1A57, 0x8C6A, 0x07FD, 0x8C6B, 0x1007, 0x8C6C, 0x1A58, 0x8C73, 0x3B30,
+ 0x8C78, 0x1A59, 0x8C79, 0x0DB1, 0x8C7A, 0x1A5A, 0x8C7C, 0x1A62, 0x8C82,
+ 0x1A5B, 0x8C85, 0x1A5D, 0x8C89, 0x1A5C, 0x8C8A, 0x1A5E, 0x8C8C, 0x0E74,
+ 0x8C8D, 0x1A5F, 0x8C8E, 0x1A60, 0x8C94, 0x1A61, 0x8C98, 0x1A63, 0x8C9D,
+ 0x058B, 0x8C9E, 0x0C03, 0x8CA0, 0x0DDB, 0x8CA1, 0x0852, 0x8CA2, 0x07E9,
+ 0x8CA4, 0x3B31, 0x8CA7, 0x0DC1, 0x8CA8, 0x055F, 0x8CA9, 0x0D62, 0x8CAA,
+ 0x1A66, 0x8CAB, 0x060F, 0x8CAC, 0x0A79, 0x8CAD, 0x1A65, 0x8CAE, 0x1A6A,
+ 0x8CAF, 0x0BB7, 0x8CB0, 0x0EEF, 0x8CB2, 0x1A68, 0x8CB3, 0x1A69, 0x8CB4,
+ 0x0648, 0x8CB6, 0x1A6B, 0x8CB7, 0x0D19, 0x8CB8, 0x0B3F, 0x8CBB, 0x0D85,
+ 0x8CBC, 0x0C37, 0x8CBD, 0x1A67, 0x8CBF, 0x0E75, 0x8CC0, 0x056C, 0x8CC1,
+ 0x1A6D, 0x8CC2, 0x0FCE, 0x8CC3, 0x0BDE, 0x8CC4, 0x0FEB, 0x8CC7, 0x08BF,
+ 0x8CC8, 0x1A6C, 0x8CCA, 0x0B11, 0x8CCD, 0x1A7D, 0x8CCE, 0x0AAA, 0x8CD1,
+ 0x0CD0, 0x8CD3, 0x0DC2, 0x8CD9, 0x3B32, 0x8CDA, 0x1A70, 0x8CDB, 0x088D,
+ 0x8CDC, 0x08C0, 0x8CDE, 0x09C6, 0x8CE0, 0x0D1B, 0x8CE1, 0x3B33, 0x8CE2,
+ 0x0761, 0x8CE3, 0x1A6F, 0x8CE4, 0x1A6E, 0x8CE6, 0x0DDC, 0x8CEA, 0x08ED,
+ 0x8CED, 0x0C4C, 0x8CF0, 0x21B2, 0x8CF4, 0x21B3, 0x8CF8, 0x3B34, 0x8CFA,
+ 0x1A72, 0x8CFB, 0x1A73, 0x8CFC, 0x07EA, 0x8CFD, 0x1A71, 0x8CFE, 0x3B35,
+ 0x8D04, 0x1A74, 0x8D05, 0x1A75, 0x8D07, 0x1A77, 0x8D08, 0x0B03, 0x8D0A,
+ 0x1A76, 0x8D0B, 0x0622, 0x8D0D, 0x1A79, 0x8D0F, 0x1A78, 0x8D10, 0x1A7A,
+ 0x8D12, 0x21B4, 0x8D13, 0x1A7C, 0x8D14, 0x1A7E, 0x8D16, 0x1A7F, 0x8D1B,
+ 0x3B36, 0x8D64, 0x0A7A, 0x8D66, 0x08FB, 0x8D67, 0x1A80, 0x8D69, 0x3B37,
+ 0x8D6B, 0x05B0, 0x8D6C, 0x3B38, 0x8D6D, 0x1A81, 0x8D70, 0x0AF8, 0x8D71,
+ 0x1A82, 0x8D73, 0x1A83, 0x8D74, 0x0DDD, 0x8D76, 0x21B5, 0x8D77, 0x0649,
+ 0x8D81, 0x1A84, 0x8D84, 0x3B39, 0x8D85, 0x0BD2, 0x8D8A, 0x04FD, 0x8D8D,
+ 0x3B3A, 0x8D95, 0x3B3B, 0x8D99, 0x1A85, 0x8DA3, 0x091D, 0x8DA6, 0x3B3C,
+ 0x8DA8, 0x0A3C, 0x8DB3, 0x0B0D, 0x8DBA, 0x1A88, 0x8DBE, 0x1A87, 0x8DC2,
+ 0x1A86, 0x8DC6, 0x3B3D, 0x8DCB, 0x1A8E, 0x8DCC, 0x1A8C, 0x8DCE, 0x3B3E,
+ 0x8DCF, 0x1A89, 0x8DD6, 0x1A8B, 0x8DDA, 0x1A8A, 0x8DDB, 0x1A8D, 0x8DDD,
+ 0x0691, 0x8DDF, 0x1A91, 0x8DE1, 0x0A7B, 0x8DE3, 0x1A92, 0x8DE4, 0x3B3F,
+ 0x8DE8, 0x078D, 0x8DEA, 0x1A8F, 0x8DEB, 0x1A90, 0x8DEC, 0x3B40, 0x8DEF,
+ 0x0FCF, 0x8DF3, 0x0BD3, 0x8DF5, 0x0AAB, 0x8DFC, 0x1A93, 0x8DFF, 0x1A96,
+ 0x8E08, 0x1A94, 0x8E09, 0x1A95, 0x8E0A, 0x0F43, 0x8E0F, 0x0C7F, 0x8E10,
+ 0x1A99, 0x8E1D, 0x1A97, 0x8E1E, 0x1A98, 0x8E1F, 0x1A9A, 0x8E20, 0x3B41,
+ 0x8E2A, 0x1AA8, 0x8E30, 0x1A9D, 0x8E34, 0x1A9E, 0x8E35, 0x1A9C, 0x8E42,
+ 0x1A9B, 0x8E44, 0x0C19, 0x8E47, 0x1AA0, 0x8E48, 0x1AA4, 0x8E49, 0x1AA1,
+ 0x8E4A, 0x1A9F, 0x8E4B, 0x3B42, 0x8E4C, 0x1AA2, 0x8E50, 0x1AA3, 0x8E55,
+ 0x1AAA, 0x8E59, 0x1AA5, 0x8E5F, 0x0A7C, 0x8E60, 0x1AA7, 0x8E63, 0x1AA9,
+ 0x8E64, 0x1AA6, 0x8E6C, 0x3B43, 0x8E70, 0x3B44, 0x8E72, 0x1AAC, 0x8E74,
+ 0x093D, 0x8E76, 0x1AAB, 0x8E7A, 0x3B45, 0x8E7C, 0x1AAD, 0x8E81, 0x1AAE,
+ 0x8E84, 0x1AB1, 0x8E85, 0x1AB0, 0x8E87, 0x1AAF, 0x8E8A, 0x1AB3, 0x8E8B,
+ 0x1AB2, 0x8E8D, 0x0F02, 0x8E91, 0x1AB5, 0x8E92, 0x3B46, 0x8E93, 0x1AB4,
+ 0x8E94, 0x1AB6, 0x8E99, 0x1AB7, 0x8EA1, 0x1AB9, 0x8EAA, 0x1AB8, 0x8EAB,
+ 0x0A0E, 0x8EAC, 0x1ABA, 0x8EAE, 0x3B47, 0x8EAF, 0x06E5, 0x8EB0, 0x1ABB,
+ 0x8EB1, 0x1ABD, 0x8EB3, 0x3B48, 0x8EB6, 0x3703, 0x8EBE, 0x1ABE, 0x8EC0,
+ 0x1DEF, 0x8EC5, 0x1ABF, 0x8EC6, 0x1ABC, 0x8EC8, 0x1AC0, 0x8ECA, 0x0902,
+ 0x8ECB, 0x1AC1, 0x8ECC, 0x064A, 0x8ECD, 0x0709, 0x8ECF, 0x21B7, 0x8ED1,
+ 0x3B49, 0x8ED2, 0x0762, 0x8ED4, 0x3B4A, 0x8EDB, 0x1AC2, 0x8EDF, 0x0CC8,
+ 0x8EE2, 0x0C38, 0x8EE3, 0x1AC3, 0x8EEB, 0x1AC6, 0x8EF8, 0x08E0, 0x8EF9,
+ 0x3B4B, 0x8EFB, 0x1AC5, 0x8EFC, 0x1AC4, 0x8EFD, 0x0730, 0x8EFE, 0x1AC7,
+ 0x8F03, 0x05B1, 0x8F05, 0x1AC9, 0x8F09, 0x084C, 0x8F0A, 0x1AC8, 0x8F0C,
+ 0x1AD1, 0x8F12, 0x1ACB, 0x8F13, 0x1ACD, 0x8F14, 0x0E35, 0x8F15, 0x1ACA,
+ 0x8F17, 0x3B4C, 0x8F19, 0x1ACC, 0x8F1B, 0x1AD0, 0x8F1C, 0x1ACE, 0x8F1D,
+ 0x064B, 0x8F1F, 0x1ACF, 0x8F26, 0x1AD2, 0x8F29, 0x0D10, 0x8F2A, 0x0FA0,
+ 0x8F2F, 0x093E, 0x8F33, 0x1AD3, 0x8F36, 0x3B4D, 0x8F38, 0x0F0C, 0x8F39,
+ 0x1AD5, 0x8F3B, 0x1AD4, 0x8F3E, 0x1AD8, 0x8F3F, 0x0F2B, 0x8F42, 0x1AD7,
+ 0x8F44, 0x05CB, 0x8F45, 0x1AD6, 0x8F46, 0x1ADB, 0x8F49, 0x1ADA, 0x8F4C,
+ 0x1AD9, 0x8F4D, 0x0C2C, 0x8F4E, 0x1ADC, 0x8F57, 0x1ADD, 0x8F5C, 0x1ADE,
+ 0x8F5F, 0x07FE, 0x8F61, 0x06FB, 0x8F62, 0x1ADF, 0x8F63, 0x1AE0, 0x8F64,
+ 0x1AE1, 0x8F9B, 0x0A0F, 0x8F9C, 0x1AE2, 0x8F9E, 0x08D9, 0x8F9F, 0x1AE3,
+ 0x8FA3, 0x1AE4, 0x8FA6, 0x3B4E, 0x8FA7, 0x10B6, 0x8FA8, 0x10B5, 0x8FAD,
+ 0x1AE5, 0x8FAE, 0x17FF, 0x8FAF, 0x1AE6, 0x8FB0, 0x0B62, 0x8FB1, 0x09F1,
+ 0x8FB2, 0x0CF6, 0x8FB5, 0x3B4F, 0x8FB6, 0x3B50, 0x8FB7, 0x1AE7, 0x8FBA,
+ 0x0E25, 0x8FBB, 0x0BF0, 0x8FBC, 0x0810, 0x8FBF, 0x0B67, 0x8FC2, 0x04CC,
+ 0x8FC4, 0x0EA6, 0x8FC5, 0x0A1D, 0x8FC6, 0x3B51, 0x8FC8, 0x3799, 0x8FCE,
+ 0x0734, 0x8FD1, 0x06D9, 0x8FD4, 0x0E26, 0x8FDA, 0x1AE8, 0x8FE0, 0x3B52,
+ 0x8FE2, 0x1AEA, 0x8FE4, 0x3B53, 0x8FE5, 0x1AE9, 0x8FE6, 0x0560, 0x8FE9,
+ 0x0CCE, 0x8FEA, 0x1AEB, 0x8FEB, 0x0D2D, 0x8FED, 0x0C2D, 0x8FEF, 0x1AEC,
+ 0x8FF0, 0x095C, 0x8FF4, 0x1AEE, 0x8FF6, 0x3B54, 0x8FF7, 0x0ECE, 0x8FF8,
+ 0x1AFD, 0x8FF9, 0x1AF0, 0x8FFA, 0x1AF1, 0x8FFD, 0x0BE5, 0x9000, 0x0B40,
+ 0x9001, 0x0AF9, 0x9002, 0x3B55, 0x9003, 0x0C80, 0x9005, 0x1AEF, 0x9006,
+ 0x066F, 0x900B, 0x1AF8, 0x900D, 0x1AF5, 0x900E, 0x1B02, 0x900F, 0x0C81,
+ 0x9010, 0x0B9E, 0x9011, 0x1AF2, 0x9013, 0x0C1A, 0x9014, 0x0C4D, 0x9015,
+ 0x1AF3, 0x9016, 0x1AF7, 0x9017, 0x0A26, 0x9019, 0x0D1D, 0x901A, 0x0BE8,
+ 0x901D, 0x0A66, 0x901E, 0x1AF6, 0x901F, 0x0B0E, 0x9020, 0x0B04, 0x9021,
+ 0x1AF4, 0x9022, 0x046D, 0x9023, 0x0FC8, 0x9027, 0x1AF9, 0x902C, 0x3B56,
+ 0x902E, 0x0B41, 0x9031, 0x093F, 0x9032, 0x0A10, 0x9035, 0x1AFB, 0x9036,
+ 0x1AFA, 0x9038, 0x04B3, 0x9039, 0x1AFC, 0x903C, 0x0DA1, 0x903E, 0x1B04,
+ 0x9041, 0x0CB3, 0x9042, 0x0A31, 0x9044, 0x3B57, 0x9045, 0x0B97, 0x9047,
+ 0x06F0, 0x9049, 0x1B03, 0x904A, 0x0F21, 0x904B, 0x04E1, 0x904D, 0x0E27,
+ 0x904E, 0x0561, 0x904F, 0x1AFE, 0x9050, 0x1AFF, 0x9051, 0x1B00, 0x9052,
+ 0x1B01, 0x9053, 0x0C93, 0x9054, 0x0B61, 0x9055, 0x04A7, 0x9056, 0x1B05,
+ 0x9058, 0x1B06, 0x9059, 0x1D34, 0x905C, 0x0B1D, 0x905E, 0x1B07, 0x9060,
+ 0x0515, 0x9061, 0x0ACE, 0x9063, 0x0763, 0x9065, 0x0F44, 0x9067, 0x21BA,
+ 0x9068, 0x1B08, 0x9069, 0x0C26, 0x906D, 0x0AFA, 0x906E, 0x0903, 0x906F,
+ 0x1B09, 0x9072, 0x1B0C, 0x9075, 0x096F, 0x9076, 0x1B0A, 0x9077, 0x0AAD,
+ 0x9078, 0x0AAC, 0x907A, 0x04A8, 0x907C, 0x0F93, 0x907D, 0x1B0E, 0x907F,
+ 0x0D86, 0x9080, 0x1B10, 0x9081, 0x1B0F, 0x9082, 0x1B0D, 0x9083, 0x1737,
+ 0x9084, 0x0610, 0x9087, 0x1AED, 0x9088, 0x3B58, 0x9089, 0x1B12, 0x908A,
+ 0x1B11, 0x908F, 0x1B13, 0x9091, 0x0F22, 0x9095, 0x3B59, 0x9099, 0x3B5A,
+ 0x909B, 0x3B5B, 0x90A2, 0x3B5C, 0x90A3, 0x0CB9, 0x90A6, 0x0E5C, 0x90A8,
+ 0x1B14, 0x90AA, 0x0905, 0x90AF, 0x1B15, 0x90B1, 0x1B16, 0x90B4, 0x3B5D,
+ 0x90B5, 0x1B17, 0x90B8, 0x0C1B, 0x90C1, 0x04AE, 0x90CA, 0x07EB, 0x90CE,
+ 0x0FE0, 0x90D7, 0x3B5E, 0x90DB, 0x1B1B, 0x90DD, 0x3B5F, 0x90DE, 0x21BB,
+ 0x90E1, 0x070A, 0x90E2, 0x1B18, 0x90E4, 0x1B19, 0x90E8, 0x0DE6, 0x90ED,
+ 0x05B2, 0x90F4, 0x3B60, 0x90F5, 0x0F23, 0x90F7, 0x06B7, 0x90FD, 0x0C4E,
+ 0x9102, 0x1B1C, 0x9112, 0x1B1D, 0x9115, 0x21BD, 0x9117, 0x3B61, 0x9119,
+ 0x1B1E, 0x911C, 0x3B62, 0x9127, 0x21BE, 0x912D, 0x0C1C, 0x9130, 0x1B20,
+ 0x9131, 0x3B63, 0x9132, 0x1B1F, 0x913A, 0x3B64, 0x913D, 0x3B65, 0x9148,
+ 0x3B66, 0x9149, 0x0CAB, 0x914A, 0x1B21, 0x914B, 0x0940, 0x914C, 0x090C,
+ 0x914D, 0x0D11, 0x914E, 0x0BAF, 0x9152, 0x091E, 0x9154, 0x0A32, 0x9156,
+ 0x1B22, 0x9158, 0x1B23, 0x915B, 0x3B67, 0x9161, 0x3B68, 0x9162, 0x0A23,
+ 0x9163, 0x1B24, 0x9164, 0x3B69, 0x9165, 0x1B25, 0x9169, 0x1B26, 0x916A,
+ 0x0F59, 0x916C, 0x0941, 0x9172, 0x1B28, 0x9173, 0x1B27, 0x9175, 0x07EC,
+ 0x9177, 0x0805, 0x9178, 0x088E, 0x9182, 0x1B2B, 0x9187, 0x0970, 0x9189,
+ 0x1B2A, 0x918B, 0x1B29, 0x918D, 0x0B49, 0x918E, 0x3B6A, 0x9190, 0x07A3,
+ 0x9192, 0x0A67, 0x9197, 0x0D44, 0x919C, 0x0943, 0x919E, 0x3B6B, 0x91A2,
+ 0x1B2C, 0x91A4, 0x09C7, 0x91A8, 0x3B6C, 0x91AA, 0x1B2F, 0x91AB, 0x1B2D,
+ 0x91AC, 0x1E1B, 0x91AD, 0x3B6D, 0x91AE, 0x3B6E, 0x91AF, 0x1B2E, 0x91B1,
+ 0x1E61, 0x91B2, 0x3B6F, 0x91B4, 0x1B31, 0x91B5, 0x1B30, 0x91B8, 0x09E2,
+ 0x91BA, 0x1B32, 0x91BC, 0x3B70, 0x91C0, 0x1B33, 0x91C1, 0x1B34, 0x91C6,
+ 0x0D64, 0x91C7, 0x0843, 0x91C8, 0x090D, 0x91C9, 0x1B35, 0x91CB, 0x1B36,
+ 0x91CC, 0x0F6C, 0x91CD, 0x094F, 0x91CE, 0x0EFA, 0x91CF, 0x0F94, 0x91D0,
+ 0x1B37, 0x91D1, 0x06DA, 0x91D6, 0x1B38, 0x91D7, 0x21C0, 0x91D8, 0x0C1D,
+ 0x91DA, 0x21BF, 0x91DB, 0x1B3B, 0x91DC, 0x05D6, 0x91DD, 0x0A11, 0x91DE,
+ 0x21C1, 0x91DF, 0x1B39, 0x91E1, 0x1B3A, 0x91E3, 0x0BFC, 0x91E4, 0x21C4,
+ 0x91E5, 0x21C5, 0x91E6, 0x0E83, 0x91E7, 0x06F4, 0x91ED, 0x21C2, 0x91EE,
+ 0x21C3, 0x91F0, 0x3B71, 0x91F5, 0x1B3D, 0x91F6, 0x1B3E, 0x91F7, 0x3B72,
+ 0x91FB, 0x3B73, 0x91FC, 0x1B3C, 0x91FF, 0x1B40, 0x9206, 0x21C6, 0x9207,
+ 0x3B74, 0x920A, 0x21C8, 0x920D, 0x0CB7, 0x920E, 0x05A1, 0x9210, 0x21C7,
+ 0x9211, 0x1B44, 0x9214, 0x1B41, 0x9215, 0x1B43, 0x921E, 0x1B3F, 0x9228,
+ 0x3B75, 0x9229, 0x1B8A, 0x922C, 0x1B42, 0x9233, 0x3B76, 0x9234, 0x0FB3,
+ 0x9237, 0x078E, 0x9238, 0x3B77, 0x9239, 0x21CF, 0x923A, 0x21C9, 0x923C,
+ 0x21CB, 0x923F, 0x1B4C, 0x9240, 0x21CA, 0x9243, 0x3B78, 0x9244, 0x0C2E,
+ 0x9245, 0x1B47, 0x9247, 0x3B79, 0x9248, 0x1B4A, 0x9249, 0x1B48, 0x924B,
+ 0x1B4D, 0x924E, 0x21CC, 0x924F, 0x3B7A, 0x9250, 0x1B4E, 0x9251, 0x21CE,
+ 0x9257, 0x1B46, 0x9259, 0x21CD, 0x925A, 0x1B53, 0x925B, 0x0516, 0x925E,
+ 0x1B45, 0x9260, 0x3B7B, 0x9262, 0x0D41, 0x9264, 0x1B49, 0x9266, 0x09C8,
+ 0x9267, 0x21D0, 0x9271, 0x07ED, 0x9277, 0x21D2, 0x9278, 0x21D3, 0x927E,
+ 0x0E76, 0x9280, 0x06DC, 0x9283, 0x0950, 0x9285, 0x0C94, 0x9288, 0x20AA,
+ 0x9291, 0x0AAF, 0x9293, 0x1B51, 0x9295, 0x1B4B, 0x9296, 0x1B50, 0x9298,
+ 0x0ECF, 0x929A, 0x0BD4, 0x929B, 0x1B52, 0x929C, 0x1B4F, 0x92A7, 0x21D1,
+ 0x92AD, 0x0AAE, 0x92B3, 0x3554, 0x92B7, 0x1B56, 0x92B9, 0x1B55, 0x92C2,
+ 0x3B7C, 0x92CB, 0x3B7D, 0x92CC, 0x3B7E, 0x92CF, 0x1B54, 0x92D0, 0x21D7,
+ 0x92D2, 0x0E5D, 0x92D3, 0x21DB, 0x92D5, 0x21D9, 0x92D7, 0x21D5, 0x92D9,
+ 0x21D6, 0x92DF, 0x3B7F, 0x92E0, 0x21DA, 0x92E4, 0x0985, 0x92E7, 0x21D4,
+ 0x92E9, 0x1B57, 0x92EA, 0x0E2F, 0x92ED, 0x04F6, 0x92F2, 0x0DB8, 0x92F3,
+ 0x0BB0, 0x92F8, 0x0692, 0x92F9, 0x20B0, 0x92FA, 0x1B59, 0x92FB, 0x21DE,
+ 0x92FC, 0x07EF, 0x92FF, 0x21E1, 0x9302, 0x21E3, 0x9304, 0x345A, 0x9306,
+ 0x087A, 0x930D, 0x3B80, 0x930F, 0x1B58, 0x9310, 0x0A33, 0x9315, 0x3B81,
+ 0x9318, 0x0A34, 0x9319, 0x1B5C, 0x931A, 0x1B5E, 0x931D, 0x21E2, 0x931E,
+ 0x21E0, 0x931F, 0x3B82, 0x9320, 0x09E3, 0x9321, 0x21DD, 0x9322, 0x1B5D,
+ 0x9323, 0x1B5F, 0x9325, 0x21DC, 0x9326, 0x06CB, 0x9327, 0x3B83, 0x9328,
+ 0x0DB7, 0x932B, 0x090E, 0x932C, 0x0FC9, 0x932E, 0x1B5B, 0x932F, 0x0868,
+ 0x9332, 0x0FE5, 0x9335, 0x1B61, 0x933A, 0x1B60, 0x933B, 0x1B62, 0x9344,
+ 0x1B5A, 0x9347, 0x3B84, 0x9348, 0x20A9, 0x934A, 0x3458, 0x934B, 0x0CC1,
+ 0x934D, 0x0C4F, 0x9352, 0x3B85, 0x9354, 0x0BF3, 0x9356, 0x1B67, 0x9357,
+ 0x21E5, 0x935B, 0x0B81, 0x935C, 0x1B63, 0x9360, 0x1B64, 0x9365, 0x3B86,
+ 0x936A, 0x3B87, 0x936C, 0x0703, 0x936D, 0x3B88, 0x936E, 0x1B66, 0x9370,
+ 0x21E4, 0x9375, 0x0764, 0x937C, 0x1B65, 0x937E, 0x09C9, 0x938C, 0x05D7,
+ 0x9394, 0x1B6B, 0x9396, 0x082F, 0x9397, 0x0AFB, 0x939A, 0x0BE6, 0x939B,
+ 0x3B89, 0x93A4, 0x21E6, 0x93A7, 0x0599, 0x93A9, 0x3B8B, 0x93AC, 0x1B69,
+ 0x93AD, 0x1B6A, 0x93AE, 0x0BDF, 0x93B0, 0x1B68, 0x93B9, 0x1B6C, 0x93BA,
+ 0x3B8A, 0x93C1, 0x3B8C, 0x93C3, 0x1B72, 0x93C6, 0x21E7, 0x93C8, 0x1B75,
+ 0x93CA, 0x3B8D, 0x93D0, 0x1B74, 0x93D1, 0x0C27, 0x93D6, 0x1B6D, 0x93D7,
+ 0x1B6E, 0x93D8, 0x1B71, 0x93DD, 0x1B73, 0x93DE, 0x21E8, 0x93E1, 0x06B8,
+ 0x93E2, 0x3B8E, 0x93E4, 0x1B76, 0x93E5, 0x1B70, 0x93E8, 0x1B6F, 0x93F8,
+ 0x21E9, 0x93FA, 0x3B8F, 0x93FD, 0x3B90, 0x9403, 0x1B7A, 0x9407, 0x1B7B,
+ 0x940F, 0x3B91, 0x9410, 0x1B7C, 0x9413, 0x1B79, 0x9414, 0x1B78, 0x9418,
+ 0x09CA, 0x9419, 0x0C82, 0x941A, 0x1B77, 0x9421, 0x1B80, 0x942B, 0x1B7E,
+ 0x9431, 0x21EA, 0x9434, 0x3B92, 0x9435, 0x1B7F, 0x9436, 0x1B7D, 0x9438,
+ 0x0B58, 0x943A, 0x1B81, 0x943F, 0x3B93, 0x9441, 0x1B82, 0x9444, 0x1B84,
+ 0x9445, 0x21EB, 0x9448, 0x21EC, 0x9451, 0x0611, 0x9452, 0x1B83, 0x9453,
+ 0x0F06, 0x9455, 0x3B94, 0x945A, 0x1B8F, 0x945B, 0x1B85, 0x945E, 0x1B88,
+ 0x9460, 0x1B86, 0x9462, 0x1B87, 0x946A, 0x1B89, 0x946B, 0x3B95, 0x9470,
+ 0x1B8B, 0x9472, 0x3B96, 0x9475, 0x1B8C, 0x9477, 0x1B8D, 0x947C, 0x1B90,
+ 0x947D, 0x1B8E, 0x947E, 0x1B91, 0x947F, 0x1B93, 0x9481, 0x1B92, 0x9577,
+ 0x0BD5, 0x9578, 0x3B97, 0x9580, 0x0EF3, 0x9582, 0x1B94, 0x9583, 0x0AB0,
+ 0x9587, 0x1B95, 0x9589, 0x0E14, 0x958A, 0x1B96, 0x958B, 0x0589, 0x958F,
+ 0x04DE, 0x9591, 0x0613, 0x9592, 0x21ED, 0x9593, 0x0612, 0x9594, 0x1B97,
+ 0x9596, 0x1B98, 0x9598, 0x1B99, 0x9599, 0x1B9A, 0x95A0, 0x1B9B, 0x95A2,
+ 0x0614, 0x95A3, 0x05B3, 0x95A4, 0x07F0, 0x95A5, 0x0D4A, 0x95A6, 0x3B98,
+ 0x95A7, 0x1B9D, 0x95A8, 0x1B9C, 0x95A9, 0x3B99, 0x95AB, 0x3B9A, 0x95AD,
+ 0x1B9E, 0x95B1, 0x3555, 0x95B2, 0x04FE, 0x95B4, 0x3B9B, 0x95B9, 0x1BA1,
+ 0x95BB, 0x1BA0, 0x95BC, 0x1B9F, 0x95BD, 0x3B9C, 0x95BE, 0x1BA2, 0x95C3,
+ 0x1BA5, 0x95C7, 0x048B, 0x95CA, 0x1BA3, 0x95CC, 0x1BA7, 0x95CD, 0x1BA6,
+ 0x95D4, 0x1BA9, 0x95D5, 0x1BA8, 0x95D6, 0x1BAA, 0x95D8, 0x0C86, 0x95DA,
+ 0x3B9D, 0x95DC, 0x1BAB, 0x95E1, 0x1BAC, 0x95E2, 0x1BAE, 0x95E5, 0x1BAD,
+ 0x961C, 0x0DDE, 0x961D, 0x3B9E, 0x9621, 0x1BAF, 0x9628, 0x1BB0, 0x962A,
+ 0x0855, 0x962E, 0x1BB1, 0x962F, 0x1BB2, 0x9632, 0x0E77, 0x963B, 0x0ACD,
+ 0x963F, 0x0468, 0x9640, 0x0B2B, 0x9641, 0x3B9F, 0x9642, 0x1BB3, 0x9644,
+ 0x0DDF, 0x964B, 0x1BB6, 0x964C, 0x1BB4, 0x964D, 0x07F1, 0x964F, 0x1BB5,
+ 0x9650, 0x0776, 0x9658, 0x3BA0, 0x965B, 0x0E15, 0x965C, 0x1BB8, 0x965D,
+ 0x1BBA, 0x965E, 0x1BB9, 0x965F, 0x1BBB, 0x9662, 0x04C3, 0x9663, 0x0A1E,
+ 0x9664, 0x0986, 0x9665, 0x0615, 0x9666, 0x1BBC, 0x966A, 0x0D1C, 0x966C,
+ 0x1BBE, 0x9670, 0x04C4, 0x9672, 0x1BBD, 0x9673, 0x0BE0, 0x9675, 0x0F95,
+ 0x9676, 0x0C83, 0x9677, 0x1BB7, 0x9678, 0x0F6E, 0x967A, 0x0765, 0x967D,
+ 0x0F45, 0x9684, 0x3BA1, 0x9685, 0x06F1, 0x9686, 0x0F7C, 0x9688, 0x06FE,
+ 0x968A, 0x0B42, 0x968B, 0x186C, 0x968D, 0x1BBF, 0x968E, 0x058A, 0x968F,
+ 0x0A35, 0x9694, 0x05B4, 0x9695, 0x1BC1, 0x9697, 0x1BC2, 0x9698, 0x1BC0,
+ 0x9699, 0x073A, 0x969B, 0x084D, 0x969C, 0x09CB, 0x969D, 0x21F0, 0x96A0,
+ 0x04C5, 0x96A3, 0x0FA1, 0x96A4, 0x3BA2, 0x96A7, 0x1BC4, 0x96A8, 0x1B0B,
+ 0x96A9, 0x3BA3, 0x96AA, 0x1BC3, 0x96AF, 0x21F1, 0x96B0, 0x1BC7, 0x96B1,
+ 0x1BC5, 0x96B2, 0x1BC6, 0x96B4, 0x1BC8, 0x96B6, 0x1BC9, 0x96B7, 0x0FB4,
+ 0x96B8, 0x1BCA, 0x96B9, 0x1BCB, 0x96BB, 0x0A6D, 0x96BC, 0x0D4F, 0x96C0,
+ 0x0A43, 0x96C1, 0x0623, 0x96C4, 0x0F24, 0x96C5, 0x056D, 0x96C6, 0x0942,
+ 0x96C7, 0x078F, 0x96C9, 0x1BCE, 0x96CB, 0x1BCD, 0x96CC, 0x08C1, 0x96CD,
+ 0x1BCF, 0x96CE, 0x1BCC, 0x96D1, 0x0876, 0x96D2, 0x3BA4, 0x96D5, 0x1BD3,
+ 0x96D6, 0x1992, 0x96D9, 0x10EB, 0x96DB, 0x0A3D, 0x96DC, 0x1BD1, 0x96DE,
+ 0x3BA6, 0x96E2, 0x0F6D, 0x96E3, 0x0CC9, 0x96E8, 0x04CD, 0x96E9, 0x3BA7,
+ 0x96EA, 0x0A87, 0x96EB, 0x08E2, 0x96F0, 0x0E07, 0x96F1, 0x3BA8, 0x96F2,
+ 0x04E2, 0x96F6, 0x0FB5, 0x96F7, 0x0F55, 0x96F9, 0x1BD4, 0x96FB, 0x0C3F,
+ 0x9700, 0x0927, 0x9702, 0x3BA9, 0x9704, 0x1BD5, 0x9706, 0x1BD6, 0x9707,
+ 0x0A12, 0x9708, 0x1BD7, 0x9709, 0x3BAA, 0x970A, 0x0FB6, 0x970D, 0x1BD2,
+ 0x970E, 0x1BD9, 0x970F, 0x1BDB, 0x9711, 0x1BDA, 0x9713, 0x1BD8, 0x9716,
+ 0x1BDC, 0x9719, 0x1BDD, 0x971C, 0x0AFC, 0x971E, 0x0562, 0x9724, 0x1BDE,
+ 0x9727, 0x0EC4, 0x972A, 0x1BDF, 0x9730, 0x1BE0, 0x9732, 0x0FD0, 0x9733,
+ 0x21F2, 0x9738, 0x1414, 0x9739, 0x1BE1, 0x973B, 0x21F3, 0x973D, 0x1BE2,
+ 0x973E, 0x1BE3, 0x9742, 0x1BE7, 0x9743, 0x21F4, 0x9744, 0x1BE4, 0x9746,
+ 0x1BE5, 0x9748, 0x1BE6, 0x9749, 0x1BE8, 0x974D, 0x21F5, 0x974F, 0x21F6,
+ 0x9751, 0x21F7, 0x9752, 0x0A68, 0x9755, 0x21F8, 0x9756, 0x0F03, 0x9759,
+ 0x0A69, 0x975A, 0x3BAB, 0x975C, 0x1BE9, 0x975E, 0x0D87, 0x9760, 0x1BEA,
+ 0x9761, 0x1D06, 0x9762, 0x0ED8, 0x9763, 0x3BAC, 0x9764, 0x1BEB, 0x9766,
+ 0x1BEC, 0x9768, 0x1BED, 0x9769, 0x05B5, 0x976B, 0x1BEF, 0x976D, 0x0A1F,
+ 0x976E, 0x3BAD, 0x9771, 0x1BF0, 0x9773, 0x3BAE, 0x9774, 0x06FA, 0x9779,
+ 0x1BF1, 0x977A, 0x1BF5, 0x977C, 0x1BF3, 0x9781, 0x1BF4, 0x9784, 0x05D1,
+ 0x9785, 0x1BF2, 0x9786, 0x1BF6, 0x978B, 0x1BF7, 0x978D, 0x048C, 0x978F,
+ 0x1BF8, 0x9790, 0x1BF9, 0x9798, 0x09CC, 0x979A, 0x3BAF, 0x979C, 0x1BFA,
+ 0x97A0, 0x0661, 0x97A2, 0x3BB0, 0x97A3, 0x1BFD, 0x97A6, 0x1BFC, 0x97A8,
+ 0x1BFB, 0x97AB, 0x1A34, 0x97AD, 0x0E2C, 0x97B3, 0x1BFE, 0x97B4, 0x1BFF,
+ 0x97B5, 0x3BB1, 0x97B6, 0x3BB2, 0x97C3, 0x1C00, 0x97C6, 0x1C01, 0x97C8,
+ 0x1C02, 0x97CB, 0x1C03, 0x97D3, 0x0616, 0x97D9, 0x3BB3, 0x97DC, 0x1C04,
+ 0x97DE, 0x3BB4, 0x97ED, 0x1C05, 0x97EE, 0x0CD9, 0x97F2, 0x1C07, 0x97F3,
+ 0x053B, 0x97F4, 0x3BB5, 0x97F5, 0x1C0A, 0x97F6, 0x1C09, 0x97FB, 0x04C6,
+ 0x97FF, 0x06B9, 0x9801, 0x0E17, 0x9802, 0x0BD6, 0x9803, 0x0812, 0x9805,
+ 0x07F2, 0x9806, 0x0971, 0x9808, 0x0A22, 0x980A, 0x3BB6, 0x980C, 0x1C0C,
+ 0x980E, 0x3BB7, 0x980F, 0x1C0B, 0x9810, 0x0F2C, 0x9811, 0x0624, 0x9812,
+ 0x0D66, 0x9813, 0x0CB4, 0x9817, 0x0A42, 0x9818, 0x0F96, 0x981A, 0x0731,
+ 0x981E, 0x3BB8, 0x9821, 0x1C0F, 0x9823, 0x3BB9, 0x9824, 0x1C0E, 0x982B,
+ 0x3BBA, 0x982C, 0x0E79, 0x982D, 0x0C84, 0x9830, 0x1E73, 0x9834, 0x04F2,
+ 0x9837, 0x1C10, 0x9838, 0x1C0D, 0x9839, 0x37B3, 0x983B, 0x0DC3, 0x983C,
+ 0x0F54, 0x983D, 0x1C11, 0x983E, 0x3BBB, 0x9846, 0x1C12, 0x984B, 0x1C14,
+ 0x984C, 0x0B4A, 0x984D, 0x05B9, 0x984E, 0x05BA, 0x984F, 0x1C13, 0x9852,
+ 0x3BBC, 0x9853, 0x3BBD, 0x9854, 0x0625, 0x9855, 0x0766, 0x9857, 0x21F9,
+ 0x9858, 0x0626, 0x9859, 0x3BBE, 0x985A, 0x1E48, 0x985B, 0x0C39, 0x985E,
+ 0x0FA8, 0x9865, 0x21FA, 0x9867, 0x0790, 0x986B, 0x1C15, 0x986C, 0x3BBF,
+ 0x986F, 0x1C16, 0x9870, 0x1C17, 0x9871, 0x1C18, 0x9873, 0x1C1A, 0x9874,
+ 0x1C19, 0x98A8, 0x0DE9, 0x98AA, 0x1C1B, 0x98AF, 0x1C1C, 0x98B1, 0x1C1D,
+ 0x98B6, 0x1C1E, 0x98B8, 0x3BC0, 0x98BA, 0x3BC1, 0x98BF, 0x3BC2, 0x98C3,
+ 0x1C20, 0x98C4, 0x1C1F, 0x98C6, 0x1C21, 0x98C8, 0x3BC3, 0x98DB, 0x0D88,
+ 0x98DC, 0x1839, 0x98DF, 0x09EF, 0x98E0, 0x3618, 0x98E2, 0x064C, 0x98E5,
+ 0x3BC4, 0x98E9, 0x1C22, 0x98EB, 0x1C23, 0x98ED, 0x10C1, 0x98EE, 0x14DA,
+ 0x98EF, 0x0D67, 0x98F2, 0x04BF, 0x98F4, 0x047F, 0x98FC, 0x08C2, 0x98FD,
+ 0x0E5E, 0x98FE, 0x09E6, 0x9903, 0x1C24, 0x9905, 0x0EEB, 0x9909, 0x1C25,
+ 0x990A, 0x0F46, 0x990C, 0x04E4, 0x9910, 0x088F, 0x9912, 0x1C26, 0x9913,
+ 0x056E, 0x9914, 0x1C27, 0x9918, 0x1C28, 0x991D, 0x1C2A, 0x991E, 0x1C2B,
+ 0x9920, 0x1C2D, 0x9921, 0x1C29, 0x9924, 0x1C2C, 0x9927, 0x21FD, 0x9928,
+ 0x0617, 0x992C, 0x1C2E, 0x992E, 0x1C2F, 0x9932, 0x3BC5, 0x9933, 0x3BC6,
+ 0x993D, 0x1C30, 0x993E, 0x1C31, 0x9940, 0x3BC7, 0x9942, 0x1C32, 0x9945,
+ 0x1C34, 0x9949, 0x1C33, 0x994B, 0x1C36, 0x994C, 0x1C39, 0x994D, 0x3BC8,
+ 0x9950, 0x1C35, 0x9951, 0x1C37, 0x9952, 0x1C38, 0x9955, 0x1C3A, 0x9957,
+ 0x06BA, 0x995C, 0x3BC9, 0x995F, 0x3BCA, 0x9996, 0x091F, 0x9997, 0x1C3B,
+ 0x9998, 0x1C3C, 0x9999, 0x07F3, 0x999E, 0x21FF, 0x99A5, 0x1C3D, 0x99A8,
+ 0x059C, 0x99AC, 0x0D05, 0x99AD, 0x1C3E, 0x99AE, 0x1C3F, 0x99B1, 0x3BCB,
+ 0x99B3, 0x0B98, 0x99B4, 0x0CC3, 0x99B9, 0x3BCC, 0x99BA, 0x3BCD, 0x99BC,
+ 0x1C40, 0x99C1, 0x0D33, 0x99C4, 0x0B2C, 0x99C5, 0x04FA, 0x99C6, 0x06E6,
+ 0x99C8, 0x06E7, 0x99C9, 0x3BCE, 0x99D0, 0x0BB1, 0x99D1, 0x1C45, 0x99D2,
+ 0x06E8, 0x99D5, 0x056F, 0x99D8, 0x1C44, 0x99DB, 0x1C42, 0x99DD, 0x1C43,
+ 0x99DF, 0x1C41, 0x99E2, 0x1C4F, 0x99ED, 0x1C46, 0x99EE, 0x1C47, 0x99F1,
+ 0x1C48, 0x99F2, 0x1C49, 0x99F8, 0x1C4B, 0x99FB, 0x1C4A, 0x99FF, 0x0963,
+ 0x9A01, 0x1C4C, 0x9A02, 0x3BCF, 0x9A05, 0x1C4E, 0x9A08, 0x37BA, 0x9A0E,
+ 0x064D, 0x9A0F, 0x1C4D, 0x9A12, 0x0AFD, 0x9A13, 0x0767, 0x9A16, 0x3BD0,
+ 0x9A19, 0x1C50, 0x9A24, 0x3BD1, 0x9A27, 0x3BD2, 0x9A28, 0x0B2D, 0x9A2B,
+ 0x1C51, 0x9A2D, 0x3BD3, 0x9A2E, 0x3BD4, 0x9A30, 0x0C85, 0x9A36, 0x3BD5,
+ 0x9A37, 0x1C52, 0x9A38, 0x3BD6, 0x9A3E, 0x1C57, 0x9A40, 0x1C55, 0x9A42,
+ 0x1C54, 0x9A43, 0x1C56, 0x9A45, 0x1C53, 0x9A4A, 0x3BD7, 0x9A4D, 0x1C59,
+ 0x9A4E, 0x2200, 0x9A52, 0x1E2F, 0x9A55, 0x1C58, 0x9A56, 0x3BD8, 0x9A57,
+ 0x1C5B, 0x9A5A, 0x06BB, 0x9A5B, 0x1C5A, 0x9A5F, 0x1C5C, 0x9A62, 0x1C5D,
+ 0x9A64, 0x1C5F, 0x9A65, 0x1C5E, 0x9A69, 0x1C60, 0x9A6A, 0x1C62, 0x9A6B,
+ 0x1C61, 0x9AA8, 0x080E, 0x9AAD, 0x1C63, 0x9AB0, 0x1C64, 0x9AB5, 0x3BD9,
+ 0x9AB6, 0x3BDA, 0x9AB8, 0x059A, 0x9ABC, 0x1C65, 0x9AC0, 0x1C66, 0x9AC4,
+ 0x0A37, 0x9ACF, 0x1C67, 0x9AD1, 0x1C68, 0x9AD3, 0x1C69, 0x9AD4, 0x1C6A,
+ 0x9AD8, 0x07F4, 0x9AD9, 0x2201, 0x9ADC, 0x2202, 0x9ADE, 0x1C6B, 0x9ADF,
+ 0x1C6C, 0x9AE2, 0x1C6D, 0x9AE3, 0x1C6E, 0x9AE6, 0x1C6F, 0x9AEA, 0x0D45,
+ 0x9AEB, 0x1C71, 0x9AED, 0x0D98, 0x9AEE, 0x1C72, 0x9AEF, 0x1C70, 0x9AF1,
+ 0x1C74, 0x9AF4, 0x1C73, 0x9AF7, 0x1C75, 0x9AF9, 0x3BDB, 0x9AFB, 0x1C76,
+ 0x9B03, 0x3BDC, 0x9B06, 0x1C77, 0x9B18, 0x1C78, 0x9B1A, 0x1C79, 0x9B1F,
+ 0x1C7A, 0x9B20, 0x3BDD, 0x9B22, 0x1C7B, 0x9B23, 0x1C7C, 0x9B25, 0x1C7D,
+ 0x9B27, 0x1C7E, 0x9B28, 0x1C7F, 0x9B29, 0x1C80, 0x9B2A, 0x1C81, 0x9B2D,
+ 0x343C, 0x9B2E, 0x1C82, 0x9B2F, 0x1C83, 0x9B31, 0x14D4, 0x9B32, 0x1C84,
+ 0x9B33, 0x3BDE, 0x9B34, 0x3BDF, 0x9B3B, 0x17A9, 0x9B3C, 0x064E, 0x9B41,
+ 0x057F, 0x9B42, 0x0822, 0x9B43, 0x1C86, 0x9B44, 0x1C85, 0x9B45, 0x0EB1,
+ 0x9B4D, 0x1C88, 0x9B4E, 0x1C89, 0x9B4F, 0x1C87, 0x9B51, 0x1C8A, 0x9B54,
+ 0x0E90, 0x9B58, 0x1C8B, 0x9B5A, 0x0695, 0x9B6F, 0x0FCB, 0x9B72, 0x2204,
+ 0x9B73, 0x3BE0, 0x9B74, 0x1C8C, 0x9B75, 0x2203, 0x9B79, 0x3BE1, 0x9B83,
+ 0x1C8E, 0x9B8E, 0x0482, 0x9B8F, 0x2205, 0x9B91, 0x1C8F, 0x9B92, 0x0DFB,
+ 0x9B93, 0x1C8D, 0x9B96, 0x1C90, 0x9B97, 0x1C91, 0x9B9F, 0x1C92, 0x9BA0,
+ 0x1C93, 0x9BA7, 0x3BE2, 0x9BA8, 0x1C94, 0x9BAA, 0x0E9C, 0x9BAB, 0x087B,
+ 0x9BAD, 0x086A, 0x9BAE, 0x0AB1, 0x9BB1, 0x2206, 0x9BB4, 0x1C95, 0x9BB9,
+ 0x1C98, 0x9BBB, 0x2207, 0x9BC0, 0x1C96, 0x9BC1, 0x3BE3, 0x9BC6, 0x1C99,
+ 0x9BC7, 0x3BE4, 0x9BC9, 0x07A5, 0x9BCA, 0x1C97, 0x9BCF, 0x1C9A, 0x9BD1,
+ 0x1C9B, 0x9BD2, 0x1C9C, 0x9BD4, 0x1CA0, 0x9BD6, 0x0878, 0x9BD7, 0x3BE5,
+ 0x9BDB, 0x0B44, 0x9BDF, 0x37BF, 0x9BE1, 0x1CA1, 0x9BE2, 0x1C9E, 0x9BE3,
+ 0x1C9D, 0x9BE4, 0x1C9F, 0x9BE7, 0x3BE6, 0x9BE8, 0x0735, 0x9BEB, 0x3BE7,
+ 0x9BF0, 0x1CA5, 0x9BF1, 0x1CA4, 0x9BF2, 0x1CA3, 0x9BF5, 0x0477, 0x9BF7,
+ 0x3BE8, 0x9BFA, 0x3BE9, 0x9BFD, 0x3BEA, 0x9C00, 0x2208, 0x9C04, 0x1CAF,
+ 0x9C06, 0x1CAB, 0x9C08, 0x1CAC, 0x9C09, 0x1CA8, 0x9C0A, 0x1CAE, 0x9C0B,
+ 0x3BEB, 0x9C0C, 0x1CAA, 0x9C0D, 0x05C0, 0x9C10, 0x0FF2, 0x9C12, 0x1CAD,
+ 0x9C13, 0x1CA9, 0x9C14, 0x1CA7, 0x9C15, 0x1CA6, 0x9C1B, 0x1CB1, 0x9C21,
+ 0x1CB4, 0x9C24, 0x1CB3, 0x9C25, 0x1CB2, 0x9C27, 0x3BEC, 0x9C2A, 0x3BED,
+ 0x9C2D, 0x0DBB, 0x9C2E, 0x1CB0, 0x9C2F, 0x04B7, 0x9C30, 0x1CB5, 0x9C32,
+ 0x1CB7, 0x9C36, 0x3BEE, 0x9C39, 0x05CD, 0x9C3A, 0x1CA2, 0x9C3B, 0x04D9,
+ 0x9C3E, 0x1CB9, 0x9C41, 0x3BEF, 0x9C46, 0x1CB8, 0x9C47, 0x1CB6, 0x9C48,
+ 0x0B6B, 0x9C52, 0x0E9E, 0x9C53, 0x3BF0, 0x9C57, 0x0FA2, 0x9C5A, 0x1CBA,
+ 0x9C60, 0x1CBB, 0x9C63, 0x3BF1, 0x9C67, 0x1CBC, 0x9C6A, 0x3BF2, 0x9C76,
+ 0x1CBD, 0x9C77, 0x3BF3, 0x9C78, 0x1CBE, 0x9CE5, 0x0BD7, 0x9CE7, 0x1CBF,
+ 0x9CE9, 0x0D4B, 0x9CEB, 0x1CC4, 0x9CEC, 0x1CC0, 0x9CF0, 0x1CC1, 0x9CF3,
+ 0x0E5F, 0x9CF4, 0x0ED0, 0x9CF6, 0x0CA8, 0x9D02, 0x3BF4, 0x9D03, 0x1CC5,
+ 0x9D06, 0x1CC6, 0x9D07, 0x0C96, 0x9D08, 0x1CC3, 0x9D09, 0x1CC2, 0x9D0E,
+ 0x052A, 0x9D12, 0x1CCE, 0x9D15, 0x1CCD, 0x9D1B, 0x0517, 0x9D1F, 0x1CCB,
+ 0x9D23, 0x1CCA, 0x9D26, 0x1CC8, 0x9D28, 0x05D9, 0x9D2A, 0x1CC7, 0x9D2B,
+ 0x08DE, 0x9D2C, 0x0529, 0x9D3B, 0x07F5, 0x9D3E, 0x1CD1, 0x9D3F, 0x1CD0,
+ 0x9D41, 0x1CCF, 0x9D42, 0x3BF5, 0x9D44, 0x1CCC, 0x9D46, 0x1CD2, 0x9D47,
+ 0x3BF6, 0x9D48, 0x1CD3, 0x9D50, 0x1CD8, 0x9D51, 0x1CD7, 0x9D59, 0x1CD9,
+ 0x9D5C, 0x04CF, 0x9D5D, 0x1CD4, 0x9D5E, 0x1CD5, 0x9D60, 0x0806, 0x9D61,
+ 0x0EC5, 0x9D63, 0x3BF7, 0x9D64, 0x1CD6, 0x9D69, 0x3BF8, 0x9D6B, 0x220A,
+ 0x9D6C, 0x0E60, 0x9D6F, 0x1CDE, 0x9D70, 0x2209, 0x9D72, 0x1CDA, 0x9D7A,
+ 0x1CDF, 0x9D7C, 0x3BF9, 0x9D7E, 0x3BFA, 0x9D87, 0x1CDC, 0x9D89, 0x1CDB,
+ 0x9D8D, 0x3BFB, 0x9D8F, 0x0732, 0x9D9A, 0x1CE0, 0x9DA4, 0x1CE1, 0x9DA9,
+ 0x1CE2, 0x9DAB, 0x1CDD, 0x9DAF, 0x1CC9, 0x9DB1, 0x3BFC, 0x9DB2, 0x1CE3,
+ 0x9DB4, 0x0BFD, 0x9DB8, 0x1CE7, 0x9DBA, 0x1CE8, 0x9DBB, 0x1CE6, 0x9DC1,
+ 0x1CE5, 0x9DC2, 0x1CEB, 0x9DC3, 0x3BFD, 0x9DC4, 0x1CE4, 0x9DC6, 0x1CE9,
+ 0x9DC7, 0x3BFE, 0x9DCF, 0x1CEA, 0x9DD3, 0x1CED, 0x9DD6, 0x3BFF, 0x9DD7,
+ 0x1DDE, 0x9DD9, 0x1CEC, 0x9DDF, 0x3C00, 0x9DE6, 0x1CEF, 0x9DEB, 0x3C01,
+ 0x9DED, 0x1CF0, 0x9DEF, 0x1CF1, 0x9DF2, 0x0FEF, 0x9DF4, 0x3C02, 0x9DF8,
+ 0x1CEE, 0x9DF9, 0x0B4B, 0x9DFA, 0x085D, 0x9DFD, 0x1CF2, 0x9E15, 0x3C03,
+ 0x9E19, 0x220C, 0x9E1A, 0x1CF3, 0x9E1B, 0x1CF4, 0x9E1D, 0x3C04, 0x9E1E,
+ 0x1CF5, 0x9E75, 0x1CF6, 0x9E78, 0x0768, 0x9E79, 0x1CF7, 0x9E7C, 0x1DFD,
+ 0x9E7D, 0x1CF8, 0x9E7F, 0x08DB, 0x9E81, 0x1CF9, 0x9E88, 0x1CFA, 0x9E8B,
+ 0x1CFB, 0x9E8C, 0x1CFC, 0x9E91, 0x1CFF, 0x9E92, 0x1CFD, 0x9E93, 0x0FE2,
+ 0x9E95, 0x1CFE, 0x9E97, 0x0FB7, 0x9E9D, 0x1D00, 0x9E9F, 0x0FA3, 0x9EA4,
+ 0x3C05, 0x9EA5, 0x1D01, 0x9EA6, 0x0D34, 0x9EA8, 0x3C06, 0x9EA9, 0x1D02,
+ 0x9EAA, 0x1D04, 0x9EAC, 0x3C07, 0x9EAD, 0x1D05, 0x9EB4, 0x1E02, 0x9EB5,
+ 0x1E75, 0x9EB8, 0x1D03, 0x9EB9, 0x07FF, 0x9EBA, 0x0ED9, 0x9EBB, 0x0E91,
+ 0x9EBC, 0x1284, 0x9EBE, 0x14FF, 0x9EBF, 0x0EA9, 0x9EC3, 0x340B, 0x9EC4,
+ 0x052B, 0x9ECC, 0x1D07, 0x9ECD, 0x066A, 0x9ECE, 0x1D08, 0x9ECF, 0x1D09,
+ 0x9ED0, 0x1D0A, 0x9ED1, 0x220D, 0x9ED2, 0x0807, 0x9ED4, 0x1D0B, 0x9ED8,
+ 0x160D, 0x9ED9, 0x0EE7, 0x9EDB, 0x0B43, 0x9EDC, 0x1D0C, 0x9EDD, 0x1D0E,
+ 0x9EDE, 0x1D0D, 0x9EE0, 0x1D0F, 0x9EE5, 0x1D10, 0x9EE7, 0x3C08, 0x9EE8,
+ 0x1D11, 0x9EEE, 0x3C09, 0x9EEF, 0x1D12, 0x9EF4, 0x1D13, 0x9EF6, 0x1D14,
+ 0x9EF7, 0x1D15, 0x9EF9, 0x1D16, 0x9EFB, 0x1D17, 0x9EFC, 0x1D18, 0x9EFD,
+ 0x1D19, 0x9F07, 0x1D1A, 0x9F08, 0x1D1B, 0x9F0E, 0x0C1E, 0x9F10, 0x3C0A,
+ 0x9F12, 0x3C0B, 0x9F13, 0x0791, 0x9F15, 0x1D1D, 0x9F17, 0x3C0C, 0x9F19,
+ 0x3C0D, 0x9F20, 0x0ACF, 0x9F21, 0x1D1E, 0x9F2C, 0x1D1F, 0x9F2F, 0x3C0E,
+ 0x9F37, 0x3C0F, 0x9F39, 0x3C10, 0x9F3B, 0x0D93, 0x9F3E, 0x1D20, 0x9F41,
+ 0x3C11, 0x9F45, 0x3C12, 0x9F4A, 0x1D21, 0x9F4B, 0x170A, 0x9F4E, 0x1A7B,
+ 0x9F4F, 0x1C06, 0x9F52, 0x1D22, 0x9F54, 0x1D23, 0x9F57, 0x3C13, 0x9F5F,
+ 0x1D25, 0x9F60, 0x1D26, 0x9F61, 0x1D27, 0x9F62, 0x0FB8, 0x9F63, 0x1D24,
+ 0x9F66, 0x1D28, 0x9F67, 0x1D29, 0x9F68, 0x3C14, 0x9F6A, 0x1D2B, 0x9F6C,
+ 0x1D2A, 0x9F71, 0x3C15, 0x9F72, 0x1D2D, 0x9F75, 0x3C16, 0x9F76, 0x1D2E,
+ 0x9F77, 0x1D2C, 0x9F8D, 0x0F7E, 0x9F90, 0x3C17, 0x9F94, 0x3C18, 0x9F95,
+ 0x1D2F, 0x9F9C, 0x1D30, 0x9F9D, 0x1727, 0x9FA0, 0x1D31, 0x9FA2, 0x3C19,
+ 0xF929, 0x2129, 0xF9DC, 0x21EE, 0xFA0E, 0x20DA, 0xFA0F, 0x20E5, 0xFA10,
+ 0x20E6, 0xFA11, 0x20FB, 0xFA12, 0x2121, 0xFA13, 0x2131, 0xFA14, 0x2133,
+ 0xFA15, 0x215E, 0xFA16, 0x2164, 0xFA17, 0x217B, 0xFA18, 0x2183, 0xFA19,
+ 0x2184, 0xFA1A, 0x2185, 0xFA1B, 0x2187, 0xFA1C, 0x218B, 0xFA1D, 0x218E,
+ 0xFA1E, 0x2197, 0xFA1F, 0x21A2, 0xFA20, 0x21A4, 0xFA21, 0x21A5, 0xFA22,
+ 0x21AE, 0xFA23, 0x21B6, 0xFA24, 0x21B8, 0xFA25, 0x21B9, 0xFA26, 0x21BC,
+ 0xFA27, 0x21D8, 0xFA28, 0x21DF, 0xFA29, 0x21EF, 0xFA2A, 0x21FB, 0xFA2B,
+ 0x21FC, 0xFA2C, 0x21FE, 0xFA2D, 0x220B, 0xFB00, 0x248E, 0xFB01, 0x0070,
+ 0xFB02, 0x0071, 0xFB03, 0x248F, 0xFB04, 0x2490, 0xFE30, 0x1EDA, 0xFE31,
+ 0x1ED4, 0xFE32, 0x1ED5, 0xFE33, 0x1ED2, 0xFE35, 0x1EDB, 0xFE36, 0x1EDC,
+ 0xFE37, 0x1EE1, 0xFE38, 0x1EE2, 0xFE39, 0x1EDD, 0xFE3A, 0x1EDE, 0xFE3B,
+ 0x1EEB, 0xFE3C, 0x1EEC, 0xFE3D, 0x1EE5, 0xFE3E, 0x1EE6, 0xFE3F, 0x1EE3,
+ 0xFE40, 0x1EE4, 0xFE41, 0x1EE7, 0xFE42, 0x1EE8, 0xFE43, 0x1EE9, 0xFE44,
+ 0x1EEA, 0xFF01, 0x0282, 0xFF02, 0x1F47, 0xFF03, 0x02CC, 0xFF04, 0x02C8,
+ 0xFF05, 0x02CB, 0xFF06, 0x02CD, 0xFF07, 0x1F46, 0xFF08, 0x02A2, 0xFF09,
+ 0x02A3, 0xFF0A, 0x02CE, 0xFF0B, 0x02B4, 0xFF0C, 0x027C, 0xFF0D, 0x02B5,
+ 0xFF0E, 0x027D, 0xFF0F, 0x0297, 0xFF10, 0x030C, 0xFF11, 0x030D, 0xFF12,
+ 0x030E, 0xFF13, 0x030F, 0xFF14, 0x0310, 0xFF15, 0x0311, 0xFF16, 0x0312,
+ 0xFF17, 0x0313, 0xFF18, 0x0314, 0xFF19, 0x0315, 0xFF1A, 0x027F, 0xFF1B,
+ 0x0280, 0xFF1C, 0x02BB, 0xFF1D, 0x02B9, 0xFF1E, 0x02BC, 0xFF1F, 0x0281,
+ 0xFF20, 0x02CF, 0xFF21, 0x0316, 0xFF22, 0x0317, 0xFF23, 0x0318, 0xFF24,
+ 0x0319, 0xFF25, 0x031A, 0xFF26, 0x031B, 0xFF27, 0x031C, 0xFF28, 0x031D,
+ 0xFF29, 0x031E, 0xFF2A, 0x031F, 0xFF2B, 0x0320, 0xFF2C, 0x0321, 0xFF2D,
+ 0x0322, 0xFF2E, 0x0323, 0xFF2F, 0x0324, 0xFF30, 0x0325, 0xFF31, 0x0326,
+ 0xFF32, 0x0327, 0xFF33, 0x0328, 0xFF34, 0x0329, 0xFF35, 0x032A, 0xFF36,
+ 0x032B, 0xFF37, 0x032C, 0xFF38, 0x032D, 0xFF39, 0x032E, 0xFF3A, 0x032F,
+ 0xFF3B, 0x02A6, 0xFF3C, 0x0298, 0xFF3D, 0x02A7, 0xFF3E, 0x0288, 0xFF3F,
+ 0x028A, 0xFF40, 0x0286, 0xFF41, 0x0330, 0xFF42, 0x0331, 0xFF43, 0x0332,
+ 0xFF44, 0x0333, 0xFF45, 0x0334, 0xFF46, 0x0335, 0xFF47, 0x0336, 0xFF48,
+ 0x0337, 0xFF49, 0x0338, 0xFF4A, 0x0339, 0xFF4B, 0x033A, 0xFF4C, 0x033B,
+ 0xFF4D, 0x033C, 0xFF4E, 0x033D, 0xFF4F, 0x033E, 0xFF50, 0x033F, 0xFF51,
+ 0x0340, 0xFF52, 0x0341, 0xFF53, 0x0342, 0xFF54, 0x0343, 0xFF55, 0x0344,
+ 0xFF56, 0x0345, 0xFF57, 0x0346, 0xFF58, 0x0347, 0xFF59, 0x0348, 0xFF5A,
+ 0x0349, 0xFF5B, 0x02A8, 0xFF5C, 0x029B, 0xFF5D, 0x02A9, 0xFF5E, 0x0299,
+ 0xFF61, 0x0147, 0xFF62, 0x0148, 0xFF63, 0x0149, 0xFF64, 0x014A, 0xFF65,
+ 0x014B, 0xFF66, 0x014C, 0xFF67, 0x014D, 0xFF68, 0x014E, 0xFF69, 0x014F,
+ 0xFF6A, 0x0150, 0xFF6B, 0x0151, 0xFF6C, 0x0152, 0xFF6D, 0x0153, 0xFF6E,
+ 0x0154, 0xFF6F, 0x0155, 0xFF70, 0x0156, 0xFF71, 0x0157, 0xFF72, 0x0158,
+ 0xFF73, 0x0159, 0xFF74, 0x015A, 0xFF75, 0x015B, 0xFF76, 0x015C, 0xFF77,
+ 0x015D, 0xFF78, 0x015E, 0xFF79, 0x015F, 0xFF7A, 0x0160, 0xFF7B, 0x0161,
+ 0xFF7C, 0x0162, 0xFF7D, 0x0163, 0xFF7E, 0x0164, 0xFF7F, 0x0165, 0xFF80,
+ 0x0166, 0xFF81, 0x0167, 0xFF82, 0x0168, 0xFF83, 0x0169, 0xFF84, 0x016A,
+ 0xFF85, 0x016B, 0xFF86, 0x016C, 0xFF87, 0x016D, 0xFF88, 0x016E, 0xFF89,
+ 0x016F, 0xFF8A, 0x0170, 0xFF8B, 0x0171, 0xFF8C, 0x0172, 0xFF8D, 0x0173,
+ 0xFF8E, 0x0174, 0xFF8F, 0x0175, 0xFF90, 0x0176, 0xFF91, 0x0177, 0xFF92,
+ 0x0178, 0xFF93, 0x0179, 0xFF94, 0x017A, 0xFF95, 0x017B, 0xFF96, 0x017C,
+ 0xFF97, 0x017D, 0xFF98, 0x017E, 0xFF99, 0x017F, 0xFF9A, 0x0180, 0xFF9B,
+ 0x0181, 0xFF9C, 0x0182, 0xFF9D, 0x0183, 0xFF9E, 0x0184, 0xFF9F, 0x0185,
+ 0xFFE0, 0x02C9, 0xFFE1, 0x02CA, 0xFFE2, 0x02EF, 0xFFE3, 0x0289, 0xFFE4,
+ 0x1F45, 0xFFE5, 0x02C7, 0xFFE8, 0x0143,
};
diff --git a/core/src/fpdfapi/fpdf_cmaps/Japan1/UniJIS-UCS2-V_4.cpp b/core/src/fpdfapi/fpdf_cmaps/Japan1/UniJIS-UCS2-V_4.cpp
index 492d2bc61a..19066d73b8 100644
--- a/core/src/fpdfapi/fpdf_cmaps/Japan1/UniJIS-UCS2-V_4.cpp
+++ b/core/src/fpdfapi/fpdf_cmaps/Japan1/UniJIS-UCS2-V_4.cpp
@@ -7,67 +7,60 @@
#include "cmaps_japan1.h"
const FX_WORD g_FXCMAP_UniJIS_UCS2_V_4[251 * 2] = {
- 0x00B0, 0x204D, 0x2010, 0x1ED5, 0x2015, 0x1ED4, 0x2016, 0x1ED7,
- 0x2018, 0x2059, 0x2019, 0x205A, 0x201C, 0x2057, 0x201D, 0x2058,
- 0x2025, 0x1EDA, 0x2026, 0x1ED9, 0x2032, 0x2051, 0x2033, 0x205B,
- 0x2190, 0x02E2, 0x2191, 0x02E0, 0x2192, 0x02E3, 0x2193, 0x02E1,
- 0x2195, 0x2FB6, 0x21C4, 0x2077, 0x21C5, 0x2076, 0x21C6, 0x2078,
- 0x21E6, 0x1F4C, 0x21E7, 0x1F4E, 0x21E8, 0x1F4B, 0x21E9, 0x1F4D,
- 0x2225, 0x1ED7, 0x223C, 0x1ED6, 0x22EF, 0x1ED9, 0x2500, 0x1D39,
- 0x2501, 0x1D3A, 0x2502, 0x1D37, 0x2503, 0x1D38, 0x2504, 0x1D3D,
- 0x2505, 0x1D3E, 0x2506, 0x1D3B, 0x2507, 0x1D3C, 0x2508, 0x1D41,
- 0x2509, 0x1D42, 0x250A, 0x1D3F, 0x250B, 0x1D40, 0x250C, 0x1D47,
- 0x250D, 0x1D49, 0x250E, 0x1D48, 0x250F, 0x1D4A, 0x2510, 0x1D4F,
- 0x2511, 0x1D51, 0x2512, 0x1D50, 0x2513, 0x1D52, 0x2514, 0x1D43,
- 0x2515, 0x1D45, 0x2516, 0x1D44, 0x2517, 0x1D46, 0x2518, 0x1D4B,
- 0x2519, 0x1D4D, 0x251A, 0x1D4C, 0x251B, 0x1D4E, 0x251C, 0x1D63,
- 0x251D, 0x1D67, 0x251E, 0x1D65, 0x251F, 0x1D64, 0x2520, 0x1D66,
- 0x2521, 0x1D69, 0x2522, 0x1D68, 0x2523, 0x1D6A, 0x2524, 0x1D6B,
- 0x2525, 0x1D6F, 0x2526, 0x1D6D, 0x2527, 0x1D6C, 0x2528, 0x1D6E,
- 0x2529, 0x1D71, 0x252A, 0x1D70, 0x252B, 0x1D72, 0x252C, 0x1D5B,
- 0x252D, 0x1D5D, 0x252E, 0x1D5E, 0x252F, 0x1D5F, 0x2530, 0x1D5C,
- 0x2531, 0x1D60, 0x2532, 0x1D61, 0x2533, 0x1D62, 0x2534, 0x1D53,
- 0x2535, 0x1D55, 0x2536, 0x1D56, 0x2537, 0x1D57, 0x2538, 0x1D54,
- 0x2539, 0x1D58, 0x253A, 0x1D59, 0x253B, 0x1D5A, 0x253D, 0x1D77,
- 0x253E, 0x1D78, 0x253F, 0x1D79, 0x2540, 0x1D75, 0x2541, 0x1D74,
- 0x2542, 0x1D76, 0x2543, 0x1D7B, 0x2544, 0x1D7D, 0x2545, 0x1D7A,
- 0x2546, 0x1D7C, 0x2547, 0x1D81, 0x2548, 0x1D80, 0x2549, 0x1D7E,
- 0x254A, 0x1D7F, 0x261C, 0x201D, 0x261D, 0x201B, 0x261E, 0x201E,
- 0x261F, 0x201C, 0x2702, 0x2F92, 0x27A1, 0x2011, 0x3001, 0x1ECF,
- 0x3002, 0x1ED0, 0x3008, 0x1EE3, 0x3009, 0x1EE4, 0x300A, 0x1EE5,
- 0x300B, 0x1EE6, 0x300C, 0x1EE7, 0x300D, 0x1EE8, 0x300E, 0x1EE9,
- 0x300F, 0x1EEA, 0x3010, 0x1EEB, 0x3011, 0x1EEC, 0x3013, 0x204E,
- 0x3014, 0x1EDD, 0x3015, 0x1EDE, 0x301C, 0x1ED6, 0x301D, 0x1F14,
- 0x301F, 0x1F15, 0x3041, 0x1EEE, 0x3043, 0x1EEF, 0x3045, 0x1EF0,
- 0x3047, 0x1EF1, 0x3049, 0x1EF2, 0x3063, 0x1EF3, 0x3083, 0x1EF4,
- 0x3085, 0x1EF5, 0x3087, 0x1EF6, 0x308E, 0x1EF7, 0x309B, 0x2050,
- 0x309C, 0x204F, 0x30A1, 0x1EF8, 0x30A3, 0x1EF9, 0x30A5, 0x1EFA,
- 0x30A7, 0x1EFB, 0x30A9, 0x1EFC, 0x30C3, 0x1EFD, 0x30E3, 0x1EFE,
- 0x30E5, 0x1EFF, 0x30E7, 0x1F00, 0x30EE, 0x1F01, 0x30F5, 0x1F02,
- 0x30F6, 0x1F03, 0x30FC, 0x1ED3, 0x3300, 0x209E, 0x3301, 0x2EB6,
- 0x3302, 0x2EB7, 0x3303, 0x2092, 0x3304, 0x2EB8, 0x3305, 0x208D,
- 0x3306, 0x2EB9, 0x3307, 0x2EBD, 0x3308, 0x2EBB, 0x3309, 0x2EC0,
- 0x330A, 0x2EBE, 0x330B, 0x2EC2, 0x330C, 0x2EC4, 0x330D, 0x1F0E,
- 0x330E, 0x2EC5, 0x330F, 0x2EC6, 0x3310, 0x2EC7, 0x3311, 0x2EC8,
- 0x3312, 0x2EC9, 0x3313, 0x2ECA, 0x3314, 0x1F05, 0x3315, 0x2094,
- 0x3316, 0x208A, 0x3317, 0x2ECC, 0x3318, 0x2093, 0x3319, 0x2ECE,
- 0x331A, 0x2ED0, 0x331B, 0x2ED1, 0x331C, 0x2ED2, 0x331D, 0x2ED3,
- 0x331E, 0x20A1, 0x331F, 0x2ED4, 0x3320, 0x2ED5, 0x3321, 0x2ED6,
- 0x3322, 0x2089, 0x3323, 0x209C, 0x3324, 0x2ED7, 0x3325, 0x2ED9,
- 0x3326, 0x1F0F, 0x3327, 0x1F09, 0x3328, 0x2EDC, 0x3329, 0x2EDD,
- 0x332A, 0x20A4, 0x332B, 0x1F11, 0x332D, 0x2EDF, 0x332E, 0x2EE2,
- 0x332F, 0x2EE3, 0x3330, 0x2EE4, 0x3331, 0x20A6, 0x3332, 0x2EE5,
- 0x3333, 0x208E, 0x3334, 0x2EE8, 0x3335, 0x2EE9, 0x3336, 0x1F0B,
- 0x3337, 0x2EEE, 0x3338, 0x2EF0, 0x3339, 0x2097, 0x333A, 0x2EF1,
- 0x333B, 0x209D, 0x333C, 0x2EEA, 0x333D, 0x2EF2, 0x333E, 0x2EF4,
- 0x333F, 0x2EF5, 0x3340, 0x2EF6, 0x3341, 0x2EF3, 0x3342, 0x209B,
- 0x3343, 0x2EF7, 0x3344, 0x2EF8, 0x3345, 0x2EF9, 0x3346, 0x2EFA,
- 0x3347, 0x20A5, 0x3348, 0x2EFB, 0x3349, 0x1F04, 0x334A, 0x1F12,
- 0x334B, 0x2EFC, 0x334C, 0x2EFD, 0x334D, 0x1F07, 0x334E, 0x2091,
- 0x334F, 0x2EFE, 0x3350, 0x2EFF, 0x3351, 0x1F0C, 0x3352, 0x2F02,
- 0x3353, 0x2F06, 0x3354, 0x2F03, 0x3355, 0x2F07, 0x3356, 0x2F08,
- 0x3357, 0x2098, 0x337F, 0x2084, 0xFF08, 0x1EDB, 0xFF09, 0x1EDC,
- 0xFF0C, 0x204C, 0xFF0E, 0x2052, 0xFF1D, 0x1EED, 0xFF3B, 0x1EDF,
- 0xFF3D, 0x1EE0, 0xFF3F, 0x1ED2, 0xFF5B, 0x1EE1, 0xFF5C, 0x1ED8,
- 0xFF5D, 0x1EE2, 0xFF5E, 0x1ED6, 0xFFE3, 0x1ED1,
+ 0x00B0, 0x204D, 0x2010, 0x1ED5, 0x2015, 0x1ED4, 0x2016, 0x1ED7, 0x2018,
+ 0x2059, 0x2019, 0x205A, 0x201C, 0x2057, 0x201D, 0x2058, 0x2025, 0x1EDA,
+ 0x2026, 0x1ED9, 0x2032, 0x2051, 0x2033, 0x205B, 0x2190, 0x02E2, 0x2191,
+ 0x02E0, 0x2192, 0x02E3, 0x2193, 0x02E1, 0x2195, 0x2FB6, 0x21C4, 0x2077,
+ 0x21C5, 0x2076, 0x21C6, 0x2078, 0x21E6, 0x1F4C, 0x21E7, 0x1F4E, 0x21E8,
+ 0x1F4B, 0x21E9, 0x1F4D, 0x2225, 0x1ED7, 0x223C, 0x1ED6, 0x22EF, 0x1ED9,
+ 0x2500, 0x1D39, 0x2501, 0x1D3A, 0x2502, 0x1D37, 0x2503, 0x1D38, 0x2504,
+ 0x1D3D, 0x2505, 0x1D3E, 0x2506, 0x1D3B, 0x2507, 0x1D3C, 0x2508, 0x1D41,
+ 0x2509, 0x1D42, 0x250A, 0x1D3F, 0x250B, 0x1D40, 0x250C, 0x1D47, 0x250D,
+ 0x1D49, 0x250E, 0x1D48, 0x250F, 0x1D4A, 0x2510, 0x1D4F, 0x2511, 0x1D51,
+ 0x2512, 0x1D50, 0x2513, 0x1D52, 0x2514, 0x1D43, 0x2515, 0x1D45, 0x2516,
+ 0x1D44, 0x2517, 0x1D46, 0x2518, 0x1D4B, 0x2519, 0x1D4D, 0x251A, 0x1D4C,
+ 0x251B, 0x1D4E, 0x251C, 0x1D63, 0x251D, 0x1D67, 0x251E, 0x1D65, 0x251F,
+ 0x1D64, 0x2520, 0x1D66, 0x2521, 0x1D69, 0x2522, 0x1D68, 0x2523, 0x1D6A,
+ 0x2524, 0x1D6B, 0x2525, 0x1D6F, 0x2526, 0x1D6D, 0x2527, 0x1D6C, 0x2528,
+ 0x1D6E, 0x2529, 0x1D71, 0x252A, 0x1D70, 0x252B, 0x1D72, 0x252C, 0x1D5B,
+ 0x252D, 0x1D5D, 0x252E, 0x1D5E, 0x252F, 0x1D5F, 0x2530, 0x1D5C, 0x2531,
+ 0x1D60, 0x2532, 0x1D61, 0x2533, 0x1D62, 0x2534, 0x1D53, 0x2535, 0x1D55,
+ 0x2536, 0x1D56, 0x2537, 0x1D57, 0x2538, 0x1D54, 0x2539, 0x1D58, 0x253A,
+ 0x1D59, 0x253B, 0x1D5A, 0x253D, 0x1D77, 0x253E, 0x1D78, 0x253F, 0x1D79,
+ 0x2540, 0x1D75, 0x2541, 0x1D74, 0x2542, 0x1D76, 0x2543, 0x1D7B, 0x2544,
+ 0x1D7D, 0x2545, 0x1D7A, 0x2546, 0x1D7C, 0x2547, 0x1D81, 0x2548, 0x1D80,
+ 0x2549, 0x1D7E, 0x254A, 0x1D7F, 0x261C, 0x201D, 0x261D, 0x201B, 0x261E,
+ 0x201E, 0x261F, 0x201C, 0x2702, 0x2F92, 0x27A1, 0x2011, 0x3001, 0x1ECF,
+ 0x3002, 0x1ED0, 0x3008, 0x1EE3, 0x3009, 0x1EE4, 0x300A, 0x1EE5, 0x300B,
+ 0x1EE6, 0x300C, 0x1EE7, 0x300D, 0x1EE8, 0x300E, 0x1EE9, 0x300F, 0x1EEA,
+ 0x3010, 0x1EEB, 0x3011, 0x1EEC, 0x3013, 0x204E, 0x3014, 0x1EDD, 0x3015,
+ 0x1EDE, 0x301C, 0x1ED6, 0x301D, 0x1F14, 0x301F, 0x1F15, 0x3041, 0x1EEE,
+ 0x3043, 0x1EEF, 0x3045, 0x1EF0, 0x3047, 0x1EF1, 0x3049, 0x1EF2, 0x3063,
+ 0x1EF3, 0x3083, 0x1EF4, 0x3085, 0x1EF5, 0x3087, 0x1EF6, 0x308E, 0x1EF7,
+ 0x309B, 0x2050, 0x309C, 0x204F, 0x30A1, 0x1EF8, 0x30A3, 0x1EF9, 0x30A5,
+ 0x1EFA, 0x30A7, 0x1EFB, 0x30A9, 0x1EFC, 0x30C3, 0x1EFD, 0x30E3, 0x1EFE,
+ 0x30E5, 0x1EFF, 0x30E7, 0x1F00, 0x30EE, 0x1F01, 0x30F5, 0x1F02, 0x30F6,
+ 0x1F03, 0x30FC, 0x1ED3, 0x3300, 0x209E, 0x3301, 0x2EB6, 0x3302, 0x2EB7,
+ 0x3303, 0x2092, 0x3304, 0x2EB8, 0x3305, 0x208D, 0x3306, 0x2EB9, 0x3307,
+ 0x2EBD, 0x3308, 0x2EBB, 0x3309, 0x2EC0, 0x330A, 0x2EBE, 0x330B, 0x2EC2,
+ 0x330C, 0x2EC4, 0x330D, 0x1F0E, 0x330E, 0x2EC5, 0x330F, 0x2EC6, 0x3310,
+ 0x2EC7, 0x3311, 0x2EC8, 0x3312, 0x2EC9, 0x3313, 0x2ECA, 0x3314, 0x1F05,
+ 0x3315, 0x2094, 0x3316, 0x208A, 0x3317, 0x2ECC, 0x3318, 0x2093, 0x3319,
+ 0x2ECE, 0x331A, 0x2ED0, 0x331B, 0x2ED1, 0x331C, 0x2ED2, 0x331D, 0x2ED3,
+ 0x331E, 0x20A1, 0x331F, 0x2ED4, 0x3320, 0x2ED5, 0x3321, 0x2ED6, 0x3322,
+ 0x2089, 0x3323, 0x209C, 0x3324, 0x2ED7, 0x3325, 0x2ED9, 0x3326, 0x1F0F,
+ 0x3327, 0x1F09, 0x3328, 0x2EDC, 0x3329, 0x2EDD, 0x332A, 0x20A4, 0x332B,
+ 0x1F11, 0x332D, 0x2EDF, 0x332E, 0x2EE2, 0x332F, 0x2EE3, 0x3330, 0x2EE4,
+ 0x3331, 0x20A6, 0x3332, 0x2EE5, 0x3333, 0x208E, 0x3334, 0x2EE8, 0x3335,
+ 0x2EE9, 0x3336, 0x1F0B, 0x3337, 0x2EEE, 0x3338, 0x2EF0, 0x3339, 0x2097,
+ 0x333A, 0x2EF1, 0x333B, 0x209D, 0x333C, 0x2EEA, 0x333D, 0x2EF2, 0x333E,
+ 0x2EF4, 0x333F, 0x2EF5, 0x3340, 0x2EF6, 0x3341, 0x2EF3, 0x3342, 0x209B,
+ 0x3343, 0x2EF7, 0x3344, 0x2EF8, 0x3345, 0x2EF9, 0x3346, 0x2EFA, 0x3347,
+ 0x20A5, 0x3348, 0x2EFB, 0x3349, 0x1F04, 0x334A, 0x1F12, 0x334B, 0x2EFC,
+ 0x334C, 0x2EFD, 0x334D, 0x1F07, 0x334E, 0x2091, 0x334F, 0x2EFE, 0x3350,
+ 0x2EFF, 0x3351, 0x1F0C, 0x3352, 0x2F02, 0x3353, 0x2F06, 0x3354, 0x2F03,
+ 0x3355, 0x2F07, 0x3356, 0x2F08, 0x3357, 0x2098, 0x337F, 0x2084, 0xFF08,
+ 0x1EDB, 0xFF09, 0x1EDC, 0xFF0C, 0x204C, 0xFF0E, 0x2052, 0xFF1D, 0x1EED,
+ 0xFF3B, 0x1EDF, 0xFF3D, 0x1EE0, 0xFF3F, 0x1ED2, 0xFF5B, 0x1EE1, 0xFF5C,
+ 0x1ED8, 0xFF5D, 0x1EE2, 0xFF5E, 0x1ED6, 0xFFE3, 0x1ED1,
};
diff --git a/core/src/fpdfapi/fpdf_cmaps/Japan1/UniJIS-UTF16-H_5.cpp b/core/src/fpdfapi/fpdf_cmaps/Japan1/UniJIS-UTF16-H_5.cpp
index 33842e373a..297cc831d0 100644
--- a/core/src/fpdfapi/fpdf_cmaps/Japan1/UniJIS-UTF16-H_5.cpp
+++ b/core/src/fpdfapi/fpdf_cmaps/Japan1/UniJIS-UTF16-H_5.cpp
@@ -7,3317 +7,2949 @@
#include "cmaps_japan1.h"
const FX_WORD g_FXCMAP_UniJIS_UTF16_H_5[13241 * 2] = {
- 0x0020, 0x0001, 0x0021, 0x0002, 0x0022, 0x0003, 0x0023, 0x0004,
- 0x0024, 0x0005, 0x0025, 0x0006, 0x0026, 0x0007, 0x0027, 0x0008,
- 0x0028, 0x0009, 0x0029, 0x000A, 0x002A, 0x000B, 0x002B, 0x000C,
- 0x002C, 0x000D, 0x002D, 0x000E, 0x002E, 0x000F, 0x002F, 0x0010,
- 0x0030, 0x0011, 0x0031, 0x0012, 0x0032, 0x0013, 0x0033, 0x0014,
- 0x0034, 0x0015, 0x0035, 0x0016, 0x0036, 0x0017, 0x0037, 0x0018,
- 0x0038, 0x0019, 0x0039, 0x001A, 0x003A, 0x001B, 0x003B, 0x001C,
- 0x003C, 0x001D, 0x003D, 0x001E, 0x003E, 0x001F, 0x003F, 0x0020,
- 0x0040, 0x0021, 0x0041, 0x0022, 0x0042, 0x0023, 0x0043, 0x0024,
- 0x0044, 0x0025, 0x0045, 0x0026, 0x0046, 0x0027, 0x0047, 0x0028,
- 0x0048, 0x0029, 0x0049, 0x002A, 0x004A, 0x002B, 0x004B, 0x002C,
- 0x004C, 0x002D, 0x004D, 0x002E, 0x004E, 0x002F, 0x004F, 0x0030,
- 0x0050, 0x0031, 0x0051, 0x0032, 0x0052, 0x0033, 0x0053, 0x0034,
- 0x0054, 0x0035, 0x0055, 0x0036, 0x0056, 0x0037, 0x0057, 0x0038,
- 0x0058, 0x0039, 0x0059, 0x003A, 0x005A, 0x003B, 0x005B, 0x003C,
- 0x005C, 0x0061, 0x005D, 0x003E, 0x005E, 0x003F, 0x005F, 0x0040,
- 0x0060, 0x0041, 0x0061, 0x0042, 0x0062, 0x0043, 0x0063, 0x0044,
- 0x0064, 0x0045, 0x0065, 0x0046, 0x0066, 0x0047, 0x0067, 0x0048,
- 0x0068, 0x0049, 0x0069, 0x004A, 0x006A, 0x004B, 0x006B, 0x004C,
- 0x006C, 0x004D, 0x006D, 0x004E, 0x006E, 0x004F, 0x006F, 0x0050,
- 0x0070, 0x0051, 0x0071, 0x0052, 0x0072, 0x0053, 0x0073, 0x0054,
- 0x0074, 0x0055, 0x0075, 0x0056, 0x0076, 0x0057, 0x0077, 0x0058,
- 0x0078, 0x0059, 0x0079, 0x005A, 0x007A, 0x005B, 0x007B, 0x005C,
- 0x007C, 0x0063, 0x007D, 0x005E, 0x007E, 0x0064, 0x00A0, 0x0001,
- 0x00A1, 0x0065, 0x00A2, 0x0066, 0x00A3, 0x0067, 0x00A4, 0x006B,
- 0x00A5, 0x003D, 0x00A6, 0x005D, 0x00A7, 0x02D0, 0x00A8, 0x0287,
- 0x00A9, 0x0098, 0x00AA, 0x008C, 0x00AB, 0x006D, 0x00AC, 0x0099,
- 0x00AD, 0x0097, 0x00AE, 0x009A, 0x00AF, 0x0081, 0x00B0, 0x02C3,
- 0x00B1, 0x02B6, 0x00B2, 0x009D, 0x00B3, 0x009E, 0x00B4, 0x0285,
- 0x00B5, 0x009F, 0x00B6, 0x030A, 0x00B7, 0x0075, 0x00B8, 0x0086,
- 0x00B9, 0x00A0, 0x00BA, 0x0090, 0x00BB, 0x007B, 0x00BC, 0x00A1,
- 0x00BD, 0x00A2, 0x00BE, 0x00A3, 0x00BF, 0x007E, 0x00C0, 0x00A4,
- 0x00C1, 0x00A5, 0x00C2, 0x00A6, 0x00C3, 0x00A7, 0x00C4, 0x00A8,
- 0x00C5, 0x00A9, 0x00C6, 0x008B, 0x00C7, 0x00AA, 0x00C8, 0x00AB,
- 0x00C9, 0x00AC, 0x00CA, 0x00AD, 0x00CB, 0x00AE, 0x00CC, 0x00AF,
- 0x00CD, 0x00B0, 0x00CE, 0x00B1, 0x00CF, 0x00B2, 0x00D0, 0x00B3,
- 0x00D1, 0x00B4, 0x00D2, 0x00B5, 0x00D3, 0x00B6, 0x00D4, 0x00B7,
- 0x00D5, 0x00B8, 0x00D6, 0x00B9, 0x00D7, 0x02B7, 0x00D8, 0x008E,
- 0x00D9, 0x00BB, 0x00DA, 0x00BC, 0x00DB, 0x00BD, 0x00DC, 0x00BE,
- 0x00DD, 0x00BF, 0x00DE, 0x00C0, 0x00DF, 0x0096, 0x00E0, 0x00C1,
- 0x00E1, 0x00C2, 0x00E2, 0x00C3, 0x00E3, 0x00C4, 0x00E4, 0x00C5,
- 0x00E5, 0x00C6, 0x00E6, 0x0091, 0x00E7, 0x00C7, 0x00E8, 0x00C8,
- 0x00E9, 0x00C9, 0x00EA, 0x00CA, 0x00EB, 0x00CB, 0x00EC, 0x00CC,
- 0x00ED, 0x00CD, 0x00EE, 0x00CE, 0x00EF, 0x00CF, 0x00F0, 0x00D0,
- 0x00F1, 0x00D1, 0x00F2, 0x00D2, 0x00F3, 0x00D3, 0x00F4, 0x00D4,
- 0x00F5, 0x00D5, 0x00F6, 0x00D6, 0x00F7, 0x02B8, 0x00F8, 0x0094,
- 0x00F9, 0x00D8, 0x00FA, 0x00D9, 0x00FB, 0x00DA, 0x00FC, 0x00DB,
- 0x00FD, 0x00DC, 0x00FE, 0x00DD, 0x00FF, 0x00DE, 0x0100, 0x2496,
- 0x0101, 0x2491, 0x0102, 0x3D8C, 0x0103, 0x3D99, 0x0104, 0x3D79,
- 0x0105, 0x3D81, 0x0106, 0x3D8E, 0x0107, 0x3D9B, 0x0108, 0x3DA7,
- 0x0109, 0x3DAD, 0x010C, 0x3D8F, 0x010D, 0x3D9C, 0x010E, 0x3D91,
- 0x010F, 0x3D9E, 0x0111, 0x3D9F, 0x0112, 0x2499, 0x0113, 0x2494,
- 0x0118, 0x3D90, 0x0119, 0x3D9D, 0x011A, 0x24B3, 0x011B, 0x24BF,
- 0x011C, 0x3DA8, 0x011D, 0x3DAE, 0x0124, 0x3DA9, 0x0125, 0x3DAF,
- 0x0127, 0x3DC8, 0x0128, 0x24B8, 0x0129, 0x24C4, 0x012A, 0x2497,
- 0x012B, 0x2492, 0x0131, 0x0092, 0x0134, 0x3DAA, 0x0135, 0x3DB0,
- 0x0139, 0x3D8D, 0x013A, 0x3D9A, 0x013D, 0x3D7B, 0x013E, 0x3D83,
- 0x0141, 0x008D, 0x0142, 0x0093, 0x0143, 0x3D92, 0x0144, 0x3DA0,
- 0x0147, 0x3D93, 0x0148, 0x3DA1, 0x014B, 0x24DC, 0x014C, 0x249A,
- 0x014D, 0x2495, 0x0150, 0x3D94, 0x0151, 0x3DA2, 0x0152, 0x008F,
- 0x0153, 0x0095, 0x0154, 0x3D8B, 0x0155, 0x3D98, 0x0158, 0x3D95,
- 0x0159, 0x3DA3, 0x015A, 0x3D7C, 0x015B, 0x3D84, 0x015C, 0x3DAB,
- 0x015D, 0x3DB1, 0x015E, 0x3D7D, 0x015F, 0x3D86, 0x0160, 0x00DF,
- 0x0161, 0x00E3, 0x0162, 0x3D97, 0x0163, 0x3DA5, 0x0164, 0x3D7E,
- 0x0165, 0x3D87, 0x0168, 0x24BD, 0x0169, 0x24C9, 0x016A, 0x2498,
- 0x016B, 0x2493, 0x016C, 0x3DAC, 0x016D, 0x3DB2, 0x016E, 0x24BC,
- 0x016F, 0x24C8, 0x0170, 0x3D96, 0x0171, 0x3DA4, 0x0178, 0x00E0,
- 0x0179, 0x3D7F, 0x017A, 0x3D88, 0x017B, 0x3D80, 0x017C, 0x3D8A,
- 0x017D, 0x00E1, 0x017E, 0x00E5, 0x0192, 0x0069, 0x0193, 0x3DD2,
- 0x01C2, 0x3DCD, 0x01CD, 0x24B2, 0x01CE, 0x24BE, 0x01CF, 0x24B6,
- 0x01D0, 0x24C2, 0x01D1, 0x24B9, 0x01D2, 0x24C5, 0x01D3, 0x24BB,
- 0x01D4, 0x24C7, 0x01D6, 0x3D75, 0x01D8, 0x3D76, 0x01DA, 0x3D77,
- 0x01DC, 0x3D78, 0x01F8, 0x3D73, 0x01F9, 0x3D74, 0x01FD, 0x24CD,
- 0x0250, 0x3DD8, 0x0251, 0x24CA, 0x0252, 0x3DDC, 0x0253, 0x3DCE,
- 0x0254, 0x24CF, 0x0255, 0x3DE1, 0x0256, 0x3DBA, 0x0257, 0x3DCF,
- 0x0258, 0x3DD5, 0x0259, 0x24D2, 0x025A, 0x24D5, 0x025B, 0x24D8,
- 0x025C, 0x3DD6, 0x025E, 0x3DD7, 0x025F, 0x3DC1, 0x0260, 0x3DD1,
- 0x0261, 0x3DC5, 0x0262, 0x3E0B, 0x0263, 0x3E0C, 0x0264, 0x3DDB,
- 0x0265, 0x3DDE, 0x0266, 0x3DCB, 0x0267, 0x3DE4, 0x0268, 0x3DD3,
- 0x026A, 0x3E0D, 0x026C, 0x3DB6, 0x026D, 0x3DC0, 0x026E, 0x3DB7,
- 0x026F, 0x3DD9, 0x0270, 0x3DC6, 0x0271, 0x3DB3, 0x0272, 0x3DC2,
- 0x0273, 0x3DBB, 0x0274, 0x3E0E, 0x0275, 0x24DD, 0x0276, 0x3E0F,
- 0x0278, 0x3E10, 0x0279, 0x3DB8, 0x027A, 0x3DE3, 0x027B, 0x3DBF,
- 0x027D, 0x3DBC, 0x027E, 0x3DB5, 0x0280, 0x3E11, 0x0281, 0x3DC7,
- 0x0282, 0x3DBD, 0x0283, 0x24E2, 0x0284, 0x3DD0, 0x0288, 0x3DB9,
- 0x0289, 0x3DD4, 0x028A, 0x3DDA, 0x028B, 0x3DB4, 0x028C, 0x24DE,
- 0x028D, 0x3DDD, 0x028E, 0x3DC4, 0x028F, 0x3E12, 0x0290, 0x3DBE,
- 0x0291, 0x3DE2, 0x0292, 0x24E1, 0x0294, 0x3DCA, 0x0295, 0x3DC9,
- 0x0298, 0x3DCC, 0x0299, 0x3E13, 0x029C, 0x3E14, 0x029D, 0x3DC3,
- 0x029F, 0x3E15, 0x02A1, 0x3DE0, 0x02A2, 0x3DDF, 0x02B0, 0x3E16,
- 0x02B2, 0x3E17, 0x02B7, 0x3E18, 0x02BB, 0x0062, 0x02BC, 0x0060,
- 0x02C1, 0x3E19, 0x02C6, 0x0080, 0x02C7, 0x3D85, 0x02C8, 0x3DE6,
- 0x02CC, 0x3DE7, 0x02D0, 0x24E3, 0x02D1, 0x3DE8, 0x02D8, 0x3D7A,
- 0x02D9, 0x3DA6, 0x02DA, 0x0085, 0x02DB, 0x3D82, 0x02DC, 0x005F,
- 0x02DD, 0x3D89, 0x02DE, 0x3DFB, 0x02E0, 0x3E1A, 0x02E1, 0x3E1B,
- 0x02E5, 0x3DEB, 0x02E6, 0x3DEC, 0x02E7, 0x3DED, 0x02E8, 0x3DEE,
- 0x02E9, 0x3DEF, 0x0300, 0x0041, 0x0301, 0x007F, 0x0302, 0x0080,
- 0x0303, 0x005F, 0x0304, 0x0081, 0x0305, 0x00E2, 0x0306, 0x0082,
- 0x0307, 0x0083, 0x0308, 0x0084, 0x030A, 0x0085, 0x030B, 0x0087,
- 0x030C, 0x0089, 0x030F, 0x3DEA, 0x0318, 0x3E02, 0x0319, 0x3E03,
- 0x031A, 0x3E07, 0x031C, 0x3DF5, 0x031D, 0x3E00, 0x031E, 0x3E01,
- 0x031F, 0x3DF6, 0x0320, 0x3DF7, 0x0324, 0x3DFC, 0x0325, 0x3DF2,
- 0x0327, 0x0086, 0x0328, 0x0088, 0x0329, 0x3DF9, 0x032A, 0x3E04,
- 0x032C, 0x3DF3, 0x032F, 0x3DFA, 0x0330, 0x3DFD, 0x0332, 0x0040,
- 0x0334, 0x3DFF, 0x0336, 0x008A, 0x0339, 0x3DF4, 0x033A, 0x3E05,
- 0x033B, 0x3E06, 0x033C, 0x3DFE, 0x033D, 0x3DF8, 0x0361, 0x3DE5,
- 0x0391, 0x03F3, 0x0392, 0x03F4, 0x0393, 0x03F5, 0x0394, 0x03F6,
- 0x0395, 0x03F7, 0x0396, 0x03F8, 0x0397, 0x03F9, 0x0398, 0x03FA,
- 0x0399, 0x03FB, 0x039A, 0x03FC, 0x039B, 0x03FD, 0x039C, 0x03FE,
- 0x039D, 0x03FF, 0x039E, 0x0400, 0x039F, 0x0401, 0x03A0, 0x0402,
- 0x03A1, 0x0403, 0x03A3, 0x0404, 0x03A4, 0x0405, 0x03A5, 0x0406,
- 0x03A6, 0x0407, 0x03A7, 0x0408, 0x03A8, 0x0409, 0x03A9, 0x040A,
- 0x03B1, 0x040B, 0x03B2, 0x040C, 0x03B3, 0x040D, 0x03B4, 0x040E,
- 0x03B5, 0x040F, 0x03B6, 0x0410, 0x03B7, 0x0411, 0x03B8, 0x0412,
- 0x03B9, 0x0413, 0x03BA, 0x0414, 0x03BB, 0x0415, 0x03BC, 0x0416,
- 0x03BD, 0x0417, 0x03BE, 0x0418, 0x03BF, 0x0419, 0x03C0, 0x041A,
- 0x03C1, 0x041B, 0x03C2, 0x3F5E, 0x03C3, 0x041C, 0x03C4, 0x041D,
- 0x03C5, 0x041E, 0x03C6, 0x041F, 0x03C7, 0x0420, 0x03C8, 0x0421,
- 0x03C9, 0x0422, 0x03D0, 0x2F3A, 0x03D1, 0x2F40, 0x03D5, 0x2F3E,
- 0x03DB, 0x2F3F, 0x0401, 0x0429, 0x0410, 0x0423, 0x0411, 0x0424,
- 0x0412, 0x0425, 0x0413, 0x0426, 0x0414, 0x0427, 0x0415, 0x0428,
- 0x0416, 0x042A, 0x0417, 0x042B, 0x0418, 0x042C, 0x0419, 0x042D,
- 0x041A, 0x042E, 0x041B, 0x042F, 0x041C, 0x0430, 0x041D, 0x0431,
- 0x041E, 0x0432, 0x041F, 0x0433, 0x0420, 0x0434, 0x0421, 0x0435,
- 0x0422, 0x0436, 0x0423, 0x0437, 0x0424, 0x0438, 0x0425, 0x0439,
- 0x0426, 0x043A, 0x0427, 0x043B, 0x0428, 0x043C, 0x0429, 0x043D,
- 0x042A, 0x043E, 0x042B, 0x043F, 0x042C, 0x0440, 0x042D, 0x0441,
- 0x042E, 0x0442, 0x042F, 0x0443, 0x0430, 0x0444, 0x0431, 0x0445,
- 0x0432, 0x0446, 0x0433, 0x0447, 0x0434, 0x0448, 0x0435, 0x0449,
- 0x0436, 0x044B, 0x0437, 0x044C, 0x0438, 0x044D, 0x0439, 0x044E,
- 0x043A, 0x044F, 0x043B, 0x0450, 0x043C, 0x0451, 0x043D, 0x0452,
- 0x043E, 0x0453, 0x043F, 0x0454, 0x0440, 0x0455, 0x0441, 0x0456,
- 0x0442, 0x0457, 0x0443, 0x0458, 0x0444, 0x0459, 0x0445, 0x045A,
- 0x0446, 0x045B, 0x0447, 0x045C, 0x0448, 0x045D, 0x0449, 0x045E,
- 0x044A, 0x045F, 0x044B, 0x0460, 0x044C, 0x0461, 0x044D, 0x0462,
- 0x044E, 0x0463, 0x044F, 0x0464, 0x0451, 0x044A, 0x1E3E, 0x3D71,
- 0x1E3F, 0x3D72, 0x1EBC, 0x24B5, 0x1EBD, 0x24C1, 0x1F70, 0x24CC,
- 0x1F71, 0x24CB, 0x1F72, 0x24DA, 0x1F73, 0x24D9, 0x2002, 0x00E7,
- 0x2003, 0x0279, 0x2010, 0x0296, 0x2011, 0x000E, 0x2012, 0x0072,
- 0x2013, 0x0072, 0x2014, 0x008A, 0x2015, 0x0295, 0x2016, 0x029A,
- 0x2018, 0x0062, 0x2019, 0x0060, 0x201A, 0x0078, 0x201C, 0x006C,
- 0x201D, 0x007A, 0x201E, 0x0079, 0x2020, 0x0308, 0x2021, 0x0309,
- 0x2022, 0x0077, 0x2025, 0x029D, 0x2026, 0x029C, 0x2030, 0x0304,
- 0x2032, 0x02C4, 0x2033, 0x02C5, 0x2039, 0x006E, 0x203A, 0x006F,
- 0x203B, 0x02DE, 0x203C, 0x2F4F, 0x203E, 0x00E2, 0x203F, 0x3DE9,
- 0x2042, 0x3F9A, 0x2044, 0x0068, 0x2047, 0x3F96, 0x2048, 0x3F97,
- 0x2049, 0x2F50, 0x2051, 0x3F99, 0x2070, 0x24A1, 0x2074, 0x24A2,
- 0x2075, 0x24A3, 0x2076, 0x24A4, 0x2077, 0x24A5, 0x2078, 0x24A6,
- 0x2079, 0x24A7, 0x2080, 0x24A8, 0x2081, 0x24A9, 0x2082, 0x24AA,
- 0x2083, 0x24AB, 0x2084, 0x24AC, 0x2085, 0x24AD, 0x2086, 0x24AE,
- 0x2087, 0x24AF, 0x2088, 0x24B0, 0x2089, 0x24B1, 0x20AC, 0x248A,
- 0x20DD, 0x3FC8, 0x20DE, 0x2B1B, 0x2100, 0x2E4F, 0x2103, 0x02C6,
- 0x2105, 0x2E53, 0x2109, 0x2071, 0x210A, 0x2070, 0x210F, 0x2F3C,
- 0x2113, 0x1F59, 0x2116, 0x1DBA, 0x2121, 0x1F77, 0x2122, 0x00E4,
- 0x2126, 0x248B, 0x2127, 0x3C9B, 0x212B, 0x0303, 0x2135, 0x2F39,
- 0x213B, 0x2073, 0x2153, 0x249F, 0x2154, 0x24A0, 0x2155, 0x3D6F,
- 0x2156, 0x2639, 0x2157, 0x263A, 0x2158, 0x263B, 0x2159, 0x263C,
- 0x215A, 0x263D, 0x215B, 0x249B, 0x215C, 0x249C, 0x215D, 0x249D,
- 0x215E, 0x249E, 0x2160, 0x1D97, 0x2161, 0x1D98, 0x2162, 0x1D99,
- 0x2163, 0x1D9A, 0x2164, 0x1D9B, 0x2165, 0x1D9C, 0x2166, 0x1D9D,
- 0x2167, 0x1D9E, 0x2168, 0x1D9F, 0x2169, 0x1DA0, 0x216A, 0x2021,
- 0x216B, 0x2022, 0x2170, 0x1F9C, 0x2171, 0x1F9D, 0x2172, 0x1F9E,
- 0x2173, 0x1F9F, 0x2174, 0x1FA0, 0x2175, 0x1FA1, 0x2176, 0x1FA2,
- 0x2177, 0x1FA3, 0x2178, 0x1FA4, 0x2179, 0x1FA5, 0x217A, 0x206A,
- 0x217B, 0x206B, 0x217F, 0x206F, 0x2190, 0x02E1, 0x2191, 0x02E2,
- 0x2192, 0x02E0, 0x2193, 0x02E3, 0x2194, 0x2FA9, 0x2196, 0x2FAC,
- 0x2197, 0x2FAD, 0x2198, 0x2FAA, 0x2199, 0x2FAB, 0x21C4, 0x2076,
- 0x21C5, 0x2077, 0x21C6, 0x2075, 0x21CB, 0x2FAF, 0x21CC, 0x2FAE,
- 0x21D0, 0x2FA8, 0x21D2, 0x02F0, 0x21D4, 0x02F1, 0x21E6, 0x1F4D,
- 0x21E7, 0x1F4C, 0x21E8, 0x1F4E, 0x21E9, 0x1F4B, 0x2200, 0x02F2,
- 0x2202, 0x02F7, 0x2203, 0x02F3, 0x2205, 0x2F98, 0x2207, 0x02F8,
- 0x2208, 0x02E5, 0x2209, 0x3C74, 0x220A, 0x2F3B, 0x220B, 0x02E6,
- 0x2211, 0x1DC9, 0x2212, 0x02B5, 0x2213, 0x2F56, 0x2219, 0x0075,
- 0x221A, 0x02FD, 0x221D, 0x02FF, 0x221E, 0x02BF, 0x221F, 0x1DCD,
- 0x2220, 0x02F4, 0x2225, 0x3C81, 0x2226, 0x3C82, 0x2227, 0x02ED,
- 0x2228, 0x02EE, 0x2229, 0x02EC, 0x222A, 0x02EB, 0x222B, 0x0301,
- 0x222C, 0x0302, 0x222D, 0x2003, 0x222E, 0x1DC8, 0x2234, 0x02C0,
- 0x2235, 0x0300, 0x223C, 0x0064, 0x223D, 0x02FE, 0x2243, 0x2F58,
- 0x2245, 0x3C93, 0x2248, 0x3C94, 0x2252, 0x02FA, 0x2260, 0x02BA,
- 0x2261, 0x02F9, 0x2262, 0x3C91, 0x2266, 0x02BD, 0x2267, 0x02BE,
- 0x226A, 0x02FB, 0x226B, 0x02FC, 0x2272, 0x2F59, 0x2273, 0x2F5A,
- 0x2276, 0x3C95, 0x2277, 0x3C96, 0x2282, 0x02E9, 0x2283, 0x02EA,
- 0x2284, 0x3C70, 0x2285, 0x3C71, 0x2286, 0x02E7, 0x2287, 0x02E8,
- 0x228A, 0x3C72, 0x228B, 0x3C73, 0x2295, 0x2F9C, 0x2296, 0x2F9A,
- 0x2297, 0x2F9D, 0x2298, 0x2F9B, 0x229E, 0x3E22, 0x22A0, 0x2F99,
- 0x22A5, 0x02F5, 0x22BF, 0x1DCE, 0x22DA, 0x3D6D, 0x22DB, 0x3D6E,
- 0x2305, 0x3C76, 0x2306, 0x3C77, 0x2307, 0x2FBB, 0x2312, 0x02F6,
- 0x2318, 0x3D70, 0x239B, 0x2F6F, 0x239C, 0x2F87, 0x239D, 0x2F70,
- 0x239E, 0x2F71, 0x239F, 0x2F87, 0x23A0, 0x2F72, 0x23A1, 0x2F77,
- 0x23A2, 0x2F87, 0x23A3, 0x2F78, 0x23A4, 0x2F79, 0x23A5, 0x2F87,
- 0x23A6, 0x2F7A, 0x23A7, 0x1FF2, 0x23A8, 0x1FF3, 0x23A9, 0x1FF4,
- 0x23AA, 0x2F87, 0x23AB, 0x1FEE, 0x23AC, 0x1FEF, 0x23AD, 0x1FF0,
- 0x23B0, 0x3FB8, 0x23B1, 0x3FB9, 0x23BE, 0x3F7D, 0x23BF, 0x3F7E,
- 0x23C0, 0x3F7F, 0x23C1, 0x3F80, 0x23C2, 0x3F81, 0x23C3, 0x3F82,
- 0x23C4, 0x3F83, 0x23C5, 0x3F84, 0x23C6, 0x3F85, 0x23C7, 0x3F86,
- 0x23C8, 0x3F87, 0x23C9, 0x3F88, 0x23CA, 0x3F89, 0x23CB, 0x3F8A,
- 0x23CC, 0x3F8B, 0x23CE, 0x3F91, 0x2423, 0x3F90, 0x2460, 0x1D83,
- 0x2461, 0x1D84, 0x2462, 0x1D85, 0x2463, 0x1D86, 0x2464, 0x1D87,
- 0x2465, 0x1D88, 0x2466, 0x1D89, 0x2467, 0x1D8A, 0x2468, 0x1D8B,
- 0x2469, 0x1D8C, 0x246A, 0x1D8D, 0x246B, 0x1D8E, 0x246C, 0x1D8F,
- 0x246D, 0x1D90, 0x246E, 0x1D91, 0x246F, 0x1D92, 0x2470, 0x1D93,
- 0x2471, 0x1D94, 0x2472, 0x1D95, 0x2473, 0x1D96, 0x2474, 0x1F87,
- 0x2475, 0x1F88, 0x2476, 0x1F89, 0x2477, 0x1F8A, 0x2478, 0x1F8B,
- 0x2479, 0x1F8C, 0x247A, 0x1F8D, 0x247B, 0x1F8E, 0x247C, 0x1F8F,
- 0x247D, 0x1F90, 0x247E, 0x1F91, 0x247F, 0x1F92, 0x2480, 0x1F93,
- 0x2481, 0x1F94, 0x2482, 0x1F95, 0x2483, 0x1F96, 0x2484, 0x1F97,
- 0x2485, 0x1F98, 0x2486, 0x1F99, 0x2487, 0x1F9A, 0x2488, 0x1F7E,
- 0x2489, 0x1F7F, 0x248A, 0x1F80, 0x248B, 0x1F81, 0x248C, 0x1F82,
- 0x248D, 0x1F83, 0x248E, 0x1F84, 0x248F, 0x1F85, 0x2490, 0x1F86,
- 0x249C, 0x1FB0, 0x249D, 0x1FB1, 0x249E, 0x1FB2, 0x249F, 0x1FB3,
- 0x24A0, 0x1FB4, 0x24A1, 0x1FB5, 0x24A2, 0x1FB6, 0x24A3, 0x1FB7,
- 0x24A4, 0x1FB8, 0x24A5, 0x1FB9, 0x24A6, 0x1FBA, 0x24A7, 0x1FBB,
- 0x24A8, 0x1FBC, 0x24A9, 0x1FBD, 0x24AA, 0x1FBE, 0x24AB, 0x1FBF,
- 0x24AC, 0x1FC0, 0x24AD, 0x1FC1, 0x24AE, 0x1FC2, 0x24AF, 0x1FC3,
- 0x24B0, 0x1FC4, 0x24B1, 0x1FC5, 0x24B2, 0x1FC6, 0x24B3, 0x1FC7,
- 0x24B4, 0x1FC8, 0x24B5, 0x1FC9, 0x24B6, 0x2863, 0x24B7, 0x2864,
- 0x24B8, 0x2865, 0x24B9, 0x2866, 0x24BA, 0x2867, 0x24BB, 0x2868,
- 0x24BC, 0x2869, 0x24BD, 0x286A, 0x24BE, 0x286B, 0x24BF, 0x286C,
- 0x24C0, 0x286D, 0x24C1, 0x286E, 0x24C2, 0x286F, 0x24C3, 0x2870,
- 0x24C4, 0x2871, 0x24C5, 0x2872, 0x24C6, 0x2873, 0x24C7, 0x2874,
- 0x24C8, 0x2875, 0x24C9, 0x2876, 0x24CA, 0x2877, 0x24CB, 0x2878,
- 0x24CC, 0x2879, 0x24CD, 0x287A, 0x24CE, 0x287B, 0x24CF, 0x287C,
- 0x24D0, 0x2849, 0x24D1, 0x284A, 0x24D2, 0x284B, 0x24D3, 0x284C,
- 0x24D4, 0x284D, 0x24D5, 0x284E, 0x24D6, 0x284F, 0x24D7, 0x2850,
- 0x24D8, 0x2851, 0x24D9, 0x2852, 0x24DA, 0x2853, 0x24DB, 0x2854,
- 0x24DC, 0x2855, 0x24DD, 0x2856, 0x24DE, 0x2857, 0x24DF, 0x2858,
- 0x24E0, 0x2859, 0x24E1, 0x285A, 0x24E2, 0x285B, 0x24E3, 0x285C,
- 0x24E4, 0x285D, 0x24E5, 0x285E, 0x24E6, 0x285F, 0x24E7, 0x2860,
- 0x24E8, 0x2861, 0x24E9, 0x2862, 0x24EA, 0x2020, 0x24EB, 0x2913,
- 0x24EC, 0x2914, 0x24ED, 0x2915, 0x24EE, 0x2916, 0x24EF, 0x2917,
- 0x24F0, 0x2918, 0x24F1, 0x2919, 0x24F2, 0x291A, 0x24F3, 0x291B,
- 0x24F4, 0x291C, 0x24F5, 0x3F5F, 0x24F6, 0x3F60, 0x24F7, 0x3F61,
- 0x24F8, 0x3F62, 0x24F9, 0x3F63, 0x24FA, 0x3F64, 0x24FB, 0x3F65,
- 0x24FC, 0x3F66, 0x24FD, 0x3F67, 0x24FE, 0x3F68, 0x24FF, 0x2907,
- 0x2500, 0x1D37, 0x2501, 0x1D38, 0x2502, 0x1D39, 0x2503, 0x1D3A,
- 0x2504, 0x1D3B, 0x2505, 0x1D3C, 0x2506, 0x1D3D, 0x2507, 0x1D3E,
- 0x2508, 0x1D3F, 0x2509, 0x1D40, 0x250A, 0x1D41, 0x250B, 0x1D42,
- 0x250C, 0x1D43, 0x250D, 0x1D44, 0x250E, 0x1D45, 0x250F, 0x1D46,
- 0x2510, 0x1D47, 0x2511, 0x1D48, 0x2512, 0x1D49, 0x2513, 0x1D4A,
- 0x2514, 0x1D4B, 0x2515, 0x1D4C, 0x2516, 0x1D4D, 0x2517, 0x1D4E,
- 0x2518, 0x1D4F, 0x2519, 0x1D50, 0x251A, 0x1D51, 0x251B, 0x1D52,
- 0x251C, 0x1D53, 0x251D, 0x1D54, 0x251E, 0x1D55, 0x251F, 0x1D56,
- 0x2520, 0x1D57, 0x2521, 0x1D58, 0x2522, 0x1D59, 0x2523, 0x1D5A,
- 0x2524, 0x1D5B, 0x2525, 0x1D5C, 0x2526, 0x1D5D, 0x2527, 0x1D5E,
- 0x2528, 0x1D5F, 0x2529, 0x1D60, 0x252A, 0x1D61, 0x252B, 0x1D62,
- 0x252C, 0x1D63, 0x252D, 0x1D64, 0x252E, 0x1D65, 0x252F, 0x1D66,
- 0x2530, 0x1D67, 0x2531, 0x1D68, 0x2532, 0x1D69, 0x2533, 0x1D6A,
- 0x2534, 0x1D6B, 0x2535, 0x1D6C, 0x2536, 0x1D6D, 0x2537, 0x1D6E,
- 0x2538, 0x1D6F, 0x2539, 0x1D70, 0x253A, 0x1D71, 0x253B, 0x1D72,
- 0x253C, 0x1D73, 0x253D, 0x1D74, 0x253E, 0x1D75, 0x253F, 0x1D76,
- 0x2540, 0x1D77, 0x2541, 0x1D78, 0x2542, 0x1D79, 0x2543, 0x1D7A,
- 0x2544, 0x1D7B, 0x2545, 0x1D7C, 0x2546, 0x1D7D, 0x2547, 0x1D7E,
- 0x2548, 0x1D7F, 0x2549, 0x1D80, 0x254A, 0x1D81, 0x254B, 0x1D82,
- 0x2550, 0x203B, 0x255E, 0x203C, 0x2561, 0x203E, 0x256A, 0x203D,
- 0x256D, 0x2037, 0x256E, 0x2038, 0x256F, 0x203A, 0x2570, 0x2039,
- 0x2571, 0x2045, 0x2572, 0x2046, 0x2573, 0x2047, 0x2581, 0x2026,
- 0x2582, 0x2027, 0x2583, 0x2028, 0x2584, 0x2029, 0x2585, 0x202A,
- 0x2586, 0x202B, 0x2587, 0x202C, 0x2588, 0x202D, 0x2589, 0x2034,
- 0x258A, 0x2033, 0x258B, 0x2032, 0x258C, 0x2031, 0x258D, 0x2030,
- 0x258E, 0x202F, 0x258F, 0x202E, 0x2594, 0x2035, 0x2595, 0x2036,
- 0x25A0, 0x02D9, 0x25A1, 0x02D8, 0x25A2, 0x1F4F, 0x25AA, 0x2FCF,
- 0x25AB, 0x2FCD, 0x25B1, 0x3F6B, 0x25B2, 0x02DB, 0x25B3, 0x02DA,
- 0x25B6, 0x2FA3, 0x25B7, 0x1F4A, 0x25BC, 0x02DD, 0x25BD, 0x02DC,
- 0x25C0, 0x2FA2, 0x25C1, 0x1F49, 0x25C6, 0x02D7, 0x25C7, 0x02D6,
- 0x25C9, 0x2012, 0x25CB, 0x02D3, 0x25CC, 0x2906, 0x25CE, 0x02D5,
- 0x25CF, 0x02D4, 0x25D0, 0x3F92, 0x25D1, 0x3F93, 0x25D2, 0x3F94,
- 0x25D3, 0x3F95, 0x25E2, 0x203F, 0x25E3, 0x2040, 0x25E4, 0x2042,
- 0x25E5, 0x2041, 0x25E6, 0x2FDE, 0x25EF, 0x030B, 0x2600, 0x2017,
- 0x2601, 0x2018, 0x2602, 0x2019, 0x2603, 0x201A, 0x2605, 0x02D2,
- 0x2606, 0x02D1, 0x260E, 0x1F78, 0x2616, 0x3F69, 0x2617, 0x3F6A,
- 0x261C, 0x201C, 0x261D, 0x201D, 0x261E, 0x201B, 0x261F, 0x201E,
- 0x2640, 0x02C2, 0x2642, 0x02C1, 0x2660, 0x2013, 0x2661, 0x1F51,
- 0x2662, 0x1F53, 0x2663, 0x2015, 0x2664, 0x1F52, 0x2665, 0x2014,
- 0x2666, 0x2016, 0x2667, 0x1F50, 0x2668, 0x2F42, 0x2669, 0x2F43,
- 0x266A, 0x0307, 0x266B, 0x3F48, 0x266C, 0x2F44, 0x266D, 0x0306,
- 0x266E, 0x3F47, 0x266F, 0x0305, 0x2672, 0x3FBA, 0x2673, 0x3FBB,
- 0x2674, 0x3FBC, 0x2675, 0x3FBD, 0x2676, 0x3FBE, 0x2677, 0x3FBF,
- 0x2678, 0x3FC0, 0x2679, 0x3FC1, 0x267A, 0x3FC2, 0x267B, 0x3FC3,
- 0x267C, 0x3FC4, 0x267D, 0x3FC5, 0x26A0, 0x2FA0, 0x2702, 0x2F90,
- 0x2713, 0x3F8E, 0x271A, 0x2FD1, 0x273F, 0x2FC5, 0x2740, 0x2FC4,
- 0x2756, 0x2FE3, 0x2776, 0x205E, 0x2777, 0x205F, 0x2778, 0x2060,
- 0x2779, 0x2061, 0x277A, 0x2062, 0x277B, 0x2063, 0x277C, 0x2064,
- 0x277D, 0x2065, 0x277E, 0x2066, 0x277F, 0x2912, 0x27A1, 0x200E,
- 0x2934, 0x3F49, 0x2935, 0x3F4A, 0x29BF, 0x3F4B, 0x29FA, 0x3F4F,
- 0x29FB, 0x3F50, 0x2B05, 0x200F, 0x2B06, 0x2010, 0x2B07, 0x2011,
- 0x2E83, 0x37E1, 0x2E85, 0x3620, 0x2E87, 0x3719, 0x2E89, 0x3814,
- 0x2E8B, 0x371E, 0x2E8C, 0x3609, 0x2E8D, 0x360A, 0x2E8E, 0x1071,
- 0x2E8F, 0x388C, 0x2E90, 0x1226, 0x2E92, 0x0EB2, 0x2E93, 0x1283,
- 0x2E94, 0x12AB, 0x2E95, 0x3C1F, 0x2E96, 0x38C2, 0x2E97, 0x361C,
- 0x2E98, 0x38E1, 0x2E99, 0x13C3, 0x2E9B, 0x13E1, 0x2E9E, 0x45E5,
- 0x2E9F, 0x0E3C, 0x2EA0, 0x0EBD, 0x2EA1, 0x3961, 0x2EA2, 0x3962,
- 0x2EA3, 0x399D, 0x2EA4, 0x3C26, 0x2EA6, 0x374D, 0x2EA8, 0x39BC,
- 0x2EA9, 0x35A1, 0x2EAA, 0x36AB, 0x2EAB, 0x3A97, 0x2EAC, 0x4ABA,
- 0x2EAD, 0x3A39, 0x2EAE, 0x3662, 0x2EB1, 0x3A98, 0x2EB2, 0x3A97,
- 0x2EB3, 0x376D, 0x2EB7, 0x36FE, 0x2EB9, 0x3713, 0x2EBC, 0x35B3,
- 0x2EBD, 0x354E, 0x2EBE, 0x3775, 0x2EBF, 0x3776, 0x2EC0, 0x3777,
- 0x2EC1, 0x078B, 0x2EC2, 0x3B0A, 0x2EC3, 0x362E, 0x2EC4, 0x0A62,
- 0x2EC6, 0x3572, 0x2ECA, 0x364A, 0x2ECC, 0x3C2B, 0x2ECD, 0x3B50,
- 0x2ECF, 0x3B9E, 0x2ED1, 0x0BD5, 0x2ED2, 0x3B97, 0x2ED6, 0x3B9E,
- 0x2ED7, 0x354D, 0x2ED8, 0x0A68, 0x2EDD, 0x3617, 0x2EDE, 0x3619,
- 0x2EDF, 0x3618, 0x2EE4, 0x064E, 0x2EE8, 0x0D34, 0x2EE9, 0x052B,
- 0x2EEB, 0x0A6A, 0x2EED, 0x08C3, 0x2EEF, 0x0F7D, 0x2EF2, 0x064F,
- 0x2F00, 0x04B0, 0x2F01, 0x20B3, 0x2F02, 0x0FFF, 0x2F03, 0x1001,
- 0x2F04, 0x0535, 0x2F05, 0x1006, 0x2F06, 0x0CCB, 0x2F07, 0x100E,
- 0x2F08, 0x0A13, 0x2F09, 0x1070, 0x2F0A, 0x0CD6, 0x2F0B, 0x0D40,
- 0x2F0C, 0x107B, 0x2F0D, 0x1083, 0x2F0E, 0x1089, 0x2F0F, 0x1093,
- 0x2F10, 0x1098, 0x2F11, 0x0C5B, 0x2F12, 0x0F97, 0x2F13, 0x10C6,
- 0x2F14, 0x10CD, 0x2F15, 0x10CE, 0x2F16, 0x10D3, 0x2F17, 0x0947,
- 0x2F18, 0x0E7C, 0x2F19, 0x10DC, 0x2F1A, 0x10E1, 0x2F1B, 0x10E8,
- 0x2F1C, 0x0EA2, 0x2F1D, 0x07B1, 0x2F1E, 0x116B, 0x2F1F, 0x0C54,
- 0x2F20, 0x089C, 0x2F21, 0x11BA, 0x2F22, 0x11BB, 0x2F23, 0x0F26,
- 0x2F24, 0x0B47, 0x2F25, 0x0981, 0x2F26, 0x08A0, 0x2F27, 0x120E,
- 0x2F28, 0x0A47, 0x2F29, 0x0996, 0x2F2A, 0x1226, 0x2F2B, 0x1228,
- 0x2F2C, 0x1232, 0x2F2D, 0x0881, 0x2F2E, 0x126C, 0x2F2F, 0x07BB,
- 0x2F30, 0x077E, 0x2F31, 0x06CA, 0x2F32, 0x05EF, 0x2F33, 0x1283,
- 0x2F34, 0x1285, 0x2F35, 0x1299, 0x2F36, 0x129B, 0x2F37, 0x12A0,
- 0x2F38, 0x0677, 0x2F39, 0x38B9, 0x2F3A, 0x12AF, 0x2F3B, 0x12B1,
- 0x2F3C, 0x09FA, 0x2F3D, 0x1342, 0x2F3E, 0x0781, 0x2F3F, 0x0916,
- 0x2F40, 0x08A7, 0x2F41, 0x13C2, 0x2F42, 0x0E08, 0x2F43, 0x0C47,
- 0x2F44, 0x06CC, 0x2F45, 0x0E4D, 0x2F46, 0x13E0, 0x2F47, 0x0CD4,
- 0x2F48, 0x140C, 0x2F49, 0x0744, 0x2F4A, 0x0EE6, 0x2F4B, 0x073D,
- 0x2F4C, 0x08AD, 0x2F4D, 0x14E5, 0x2F4E, 0x14F4, 0x2F4F, 0x14F8,
- 0x2F50, 0x0D7A, 0x2F51, 0x0EDF, 0x2F52, 0x08AF, 0x2F53, 0x1502,
- 0x2F54, 0x0A2B, 0x2F55, 0x0550, 0x2F56, 0x0BFA, 0x2F57, 0x0DD5,
- 0x2F58, 0x15E4, 0x2F59, 0x15E6, 0x2F5A, 0x0E22, 0x2F5B, 0x0567,
- 0x2F5C, 0x0687, 0x2F5D, 0x0758, 0x2F5E, 0x0770, 0x2F5F, 0x06C4,
- 0x2F60, 0x04DD, 0x2F61, 0x05E0, 0x2F62, 0x0601, 0x2F63, 0x0A5C,
- 0x2F64, 0x0F3B, 0x2F65, 0x0C3E, 0x2F66, 0x0D97, 0x2F67, 0x3A00,
- 0x2F68, 0x1697, 0x2F69, 0x0D28, 0x2F6A, 0x0D7D, 0x2F6B, 0x087C,
- 0x2F6C, 0x0EE8, 0x2F6D, 0x0EC3, 0x2F6E, 0x0EFC, 0x2F6F, 0x0A74,
- 0x2F70, 0x08D4, 0x2F71, 0x3A41, 0x2F72, 0x0553, 0x2F73, 0x0740,
- 0x2F74, 0x0F71, 0x2F75, 0x0B9B, 0x2F76, 0x0E16, 0x2F77, 0x08B3,
- 0x2F78, 0x0608, 0x2F79, 0x1813, 0x2F7A, 0x0F3D, 0x2F7B, 0x04CB,
- 0x2F7C, 0x0FDD, 0x2F7D, 0x08D5, 0x2F7E, 0x183D, 0x2F7F, 0x08D6,
- 0x2F80, 0x1853, 0x2F81, 0x0CD1, 0x2F82, 0x0A09, 0x2F83, 0x08D7,
- 0x2F84, 0x08B8, 0x2F85, 0x04D3, 0x2F86, 0x0A89, 0x2F87, 0x0AA6,
- 0x2F88, 0x0938, 0x2F89, 0x0821, 0x2F8A, 0x09ED, 0x2F8B, 0x18B2,
- 0x2F8C, 0x194F, 0x2F8D, 0x0BAC, 0x2F8E, 0x0742, 0x2F8F, 0x07E6,
- 0x2F90, 0x04A5, 0x2F91, 0x19EB, 0x2F92, 0x075F, 0x2F93, 0x05AF,
- 0x2F94, 0x0774, 0x2F95, 0x0B69, 0x2F96, 0x0C7E, 0x2F97, 0x1A56,
- 0x2F98, 0x1A59, 0x2F99, 0x058B, 0x2F9A, 0x0A7A, 0x2F9B, 0x0AF8,
- 0x2F9C, 0x0B0D, 0x2F9D, 0x0A0E, 0x2F9E, 0x0902, 0x2F9F, 0x0A0F,
- 0x2FA0, 0x0B62, 0x2FA1, 0x3B4F, 0x2FA2, 0x0F22, 0x2FA3, 0x0CAB,
- 0x2FA4, 0x0D64, 0x2FA5, 0x0F6C, 0x2FA6, 0x06DA, 0x2FA7, 0x0BD5,
- 0x2FA8, 0x0EF3, 0x2FA9, 0x0DDE, 0x2FAA, 0x1BC9, 0x2FAB, 0x1BCB,
- 0x2FAC, 0x04CD, 0x2FAD, 0x21F7, 0x2FAE, 0x0D87, 0x2FAF, 0x0ED8,
- 0x2FB0, 0x05B5, 0x2FB1, 0x1C03, 0x2FB2, 0x1C05, 0x2FB3, 0x053B,
- 0x2FB4, 0x0E17, 0x2FB5, 0x0DE9, 0x2FB6, 0x0D88, 0x2FB7, 0x09EF,
- 0x2FB8, 0x091F, 0x2FB9, 0x07F3, 0x2FBA, 0x0D05, 0x2FBB, 0x080E,
- 0x2FBC, 0x07F4, 0x2FBD, 0x1C6C, 0x2FBE, 0x1C7D, 0x2FBF, 0x1C83,
- 0x2FC0, 0x1C84, 0x2FC1, 0x064E, 0x2FC2, 0x0695, 0x2FC3, 0x0BD7,
- 0x2FC4, 0x1CF6, 0x2FC5, 0x08DB, 0x2FC6, 0x1D01, 0x2FC7, 0x0E91,
- 0x2FC8, 0x340B, 0x2FC9, 0x066A, 0x2FCA, 0x0807, 0x2FCB, 0x1D16,
- 0x2FCC, 0x1D19, 0x2FCD, 0x0C1E, 0x2FCE, 0x0791, 0x2FCF, 0x0ACF,
- 0x2FD0, 0x0D93, 0x2FD1, 0x1D21, 0x2FD2, 0x1D22, 0x2FD3, 0x0F7E,
- 0x2FD4, 0x1D30, 0x2FD5, 0x1D31, 0x3000, 0x0279, 0x3001, 0x027A,
- 0x3002, 0x027B, 0x3003, 0x028F, 0x3004, 0x2074, 0x3005, 0x0291,
- 0x3006, 0x0292, 0x3007, 0x0293, 0x3008, 0x02AA, 0x3009, 0x02AB,
- 0x300A, 0x02AC, 0x300B, 0x02AD, 0x300C, 0x02AE, 0x300D, 0x02AF,
- 0x300E, 0x02B0, 0x300F, 0x02B1, 0x3010, 0x02B2, 0x3011, 0x02B3,
- 0x3012, 0x02DF, 0x3013, 0x02E4, 0x3014, 0x02A4, 0x3015, 0x02A5,
- 0x3016, 0x3F45, 0x3017, 0x3F46, 0x3018, 0x2F61, 0x3019, 0x2F62,
- 0x301C, 0x0299, 0x301D, 0x1DB8, 0x301F, 0x1DB9, 0x3020, 0x1F7A,
- 0x3030, 0x2FBA, 0x3033, 0x2F4C, 0x3034, 0x2F4D, 0x3035, 0x2F4E,
- 0x3036, 0x1F79, 0x303B, 0x2F4A, 0x303C, 0x3F42, 0x303D, 0x2F93,
- 0x3041, 0x034A, 0x3042, 0x034B, 0x3043, 0x034C, 0x3044, 0x034D,
- 0x3045, 0x034E, 0x3046, 0x034F, 0x3047, 0x0350, 0x3048, 0x0351,
- 0x3049, 0x0352, 0x304A, 0x0353, 0x304B, 0x0354, 0x304C, 0x0355,
- 0x304D, 0x0356, 0x304E, 0x0357, 0x304F, 0x0358, 0x3050, 0x0359,
- 0x3051, 0x035A, 0x3052, 0x035B, 0x3053, 0x035C, 0x3054, 0x035D,
- 0x3055, 0x035E, 0x3056, 0x035F, 0x3057, 0x0360, 0x3058, 0x0361,
- 0x3059, 0x0362, 0x305A, 0x0363, 0x305B, 0x0364, 0x305C, 0x0365,
- 0x305D, 0x0366, 0x305E, 0x0367, 0x305F, 0x0368, 0x3060, 0x0369,
- 0x3061, 0x036A, 0x3062, 0x036B, 0x3063, 0x036C, 0x3064, 0x036D,
- 0x3065, 0x036E, 0x3066, 0x036F, 0x3067, 0x0370, 0x3068, 0x0371,
- 0x3069, 0x0372, 0x306A, 0x0373, 0x306B, 0x0374, 0x306C, 0x0375,
- 0x306D, 0x0376, 0x306E, 0x0377, 0x306F, 0x0378, 0x3070, 0x0379,
- 0x3071, 0x037A, 0x3072, 0x037B, 0x3073, 0x037C, 0x3074, 0x037D,
- 0x3075, 0x037E, 0x3076, 0x037F, 0x3077, 0x0380, 0x3078, 0x0381,
- 0x3079, 0x0382, 0x307A, 0x0383, 0x307B, 0x0384, 0x307C, 0x0385,
- 0x307D, 0x0386, 0x307E, 0x0387, 0x307F, 0x0388, 0x3080, 0x0389,
- 0x3081, 0x038A, 0x3082, 0x038B, 0x3083, 0x038C, 0x3084, 0x038D,
- 0x3085, 0x038E, 0x3086, 0x038F, 0x3087, 0x0390, 0x3088, 0x0391,
- 0x3089, 0x0392, 0x308A, 0x0393, 0x308B, 0x0394, 0x308C, 0x0395,
- 0x308D, 0x0396, 0x308E, 0x0397, 0x308F, 0x0398, 0x3090, 0x0399,
- 0x3091, 0x039A, 0x3092, 0x039B, 0x3093, 0x039C, 0x3094, 0x1F16,
- 0x3095, 0x1F17, 0x3096, 0x1F18, 0x3099, 0x3FC6, 0x309A, 0x3FC7,
- 0x309B, 0x0283, 0x309C, 0x0284, 0x309D, 0x028D, 0x309E, 0x028E,
- 0x309F, 0x2F95, 0x30A0, 0x3F4D, 0x30A1, 0x039D, 0x30A2, 0x039E,
- 0x30A3, 0x039F, 0x30A4, 0x03A0, 0x30A5, 0x03A1, 0x30A6, 0x03A2,
- 0x30A7, 0x03A3, 0x30A8, 0x03A4, 0x30A9, 0x03A5, 0x30AA, 0x03A6,
- 0x30AB, 0x03A7, 0x30AC, 0x03A8, 0x30AD, 0x03A9, 0x30AE, 0x03AA,
- 0x30AF, 0x03AB, 0x30B0, 0x03AC, 0x30B1, 0x03AD, 0x30B2, 0x03AE,
- 0x30B3, 0x03AF, 0x30B4, 0x03B0, 0x30B5, 0x03B1, 0x30B6, 0x03B2,
- 0x30B7, 0x03B3, 0x30B8, 0x03B4, 0x30B9, 0x03B5, 0x30BA, 0x03B6,
- 0x30BB, 0x03B7, 0x30BC, 0x03B8, 0x30BD, 0x03B9, 0x30BE, 0x03BA,
- 0x30BF, 0x03BB, 0x30C0, 0x03BC, 0x30C1, 0x03BD, 0x30C2, 0x03BE,
- 0x30C3, 0x03BF, 0x30C4, 0x03C0, 0x30C5, 0x03C1, 0x30C6, 0x03C2,
- 0x30C7, 0x03C3, 0x30C8, 0x03C4, 0x30C9, 0x03C5, 0x30CA, 0x03C6,
- 0x30CB, 0x03C7, 0x30CC, 0x03C8, 0x30CD, 0x03C9, 0x30CE, 0x03CA,
- 0x30CF, 0x03CB, 0x30D0, 0x03CC, 0x30D1, 0x03CD, 0x30D2, 0x03CE,
- 0x30D3, 0x03CF, 0x30D4, 0x03D0, 0x30D5, 0x03D1, 0x30D6, 0x03D2,
- 0x30D7, 0x03D3, 0x30D8, 0x03D4, 0x30D9, 0x03D5, 0x30DA, 0x03D6,
- 0x30DB, 0x03D7, 0x30DC, 0x03D8, 0x30DD, 0x03D9, 0x30DE, 0x03DA,
- 0x30DF, 0x03DB, 0x30E0, 0x03DC, 0x30E1, 0x03DD, 0x30E2, 0x03DE,
- 0x30E3, 0x03DF, 0x30E4, 0x03E0, 0x30E5, 0x03E1, 0x30E6, 0x03E2,
- 0x30E7, 0x03E3, 0x30E8, 0x03E4, 0x30E9, 0x03E5, 0x30EA, 0x03E6,
- 0x30EB, 0x03E7, 0x30EC, 0x03E8, 0x30ED, 0x03E9, 0x30EE, 0x03EA,
- 0x30EF, 0x03EB, 0x30F0, 0x03EC, 0x30F1, 0x03ED, 0x30F2, 0x03EE,
- 0x30F3, 0x03EF, 0x30F4, 0x03F0, 0x30F5, 0x03F1, 0x30F6, 0x03F2,
- 0x30F7, 0x2079, 0x30F8, 0x207A, 0x30F9, 0x207B, 0x30FA, 0x207C,
- 0x30FB, 0x027E, 0x30FC, 0x0294, 0x30FD, 0x028B, 0x30FE, 0x028C,
- 0x30FF, 0x3F43, 0x3190, 0x3F9B, 0x3191, 0x3F9C, 0x3192, 0x3F9D,
- 0x3193, 0x3F9E, 0x3194, 0x3F9F, 0x3195, 0x3FA0, 0x3196, 0x3FA1,
- 0x3197, 0x3FA2, 0x3198, 0x3FA3, 0x3199, 0x3FA4, 0x319A, 0x3FA5,
- 0x319B, 0x3FA6, 0x319C, 0x3FA7, 0x319D, 0x3FA8, 0x319E, 0x3FA9,
- 0x319F, 0x3FAA, 0x31F0, 0x3F6C, 0x31F1, 0x3F6D, 0x31F2, 0x3F6E,
- 0x31F3, 0x3F6F, 0x31F4, 0x3F70, 0x31F5, 0x3F71, 0x31F6, 0x3F72,
- 0x31F7, 0x3F73, 0x31F8, 0x3F74, 0x31F9, 0x3F75, 0x31FA, 0x3F77,
- 0x31FB, 0x3F78, 0x31FC, 0x3F79, 0x31FD, 0x3F7A, 0x31FE, 0x3F7B,
- 0x31FF, 0x3F7C, 0x3220, 0x278E, 0x3221, 0x278F, 0x3222, 0x2790,
- 0x3223, 0x2791, 0x3224, 0x2792, 0x3225, 0x2793, 0x3226, 0x2794,
- 0x3227, 0x2795, 0x3228, 0x2796, 0x3229, 0x2797, 0x322A, 0x2006,
- 0x322B, 0x2007, 0x322C, 0x2008, 0x322D, 0x2009, 0x322E, 0x200A,
- 0x322F, 0x200B, 0x3230, 0x2005, 0x3231, 0x1DC2, 0x3232, 0x1DC3,
- 0x3233, 0x1FCF, 0x3234, 0x1FCD, 0x3235, 0x1FD4, 0x3236, 0x1FD3,
- 0x3237, 0x200C, 0x3238, 0x1FCE, 0x3239, 0x1DC4, 0x323A, 0x1FD7,
- 0x323B, 0x1FD5, 0x323C, 0x1FD0, 0x323D, 0x1FCB, 0x323E, 0x1FD2,
- 0x323F, 0x1FCC, 0x3240, 0x1FD6, 0x3241, 0x200D, 0x3242, 0x1FD1,
- 0x3243, 0x1FCA, 0x3251, 0x1F9B, 0x3252, 0x1FA6, 0x3253, 0x1FA7,
- 0x3254, 0x1FA8, 0x3255, 0x1FA9, 0x3256, 0x1FAA, 0x3257, 0x1FAB,
- 0x3258, 0x1FAC, 0x3259, 0x1FAD, 0x325A, 0x1FAE, 0x325B, 0x1FAF,
- 0x325C, 0x2804, 0x325D, 0x2805, 0x325E, 0x2806, 0x325F, 0x2807,
- 0x3280, 0x28DD, 0x3281, 0x28DE, 0x3282, 0x28DF, 0x3283, 0x28E0,
- 0x3284, 0x28E1, 0x3285, 0x28E2, 0x3286, 0x28E3, 0x3287, 0x28E4,
- 0x3288, 0x28E5, 0x3289, 0x28E6, 0x328A, 0x28E8, 0x328B, 0x28E9,
- 0x328C, 0x28EA, 0x328D, 0x28EB, 0x328E, 0x28EC, 0x328F, 0x28ED,
- 0x3290, 0x28E7, 0x3291, 0x1FE1, 0x3292, 0x1FE0, 0x3293, 0x1FE2,
- 0x3294, 0x1FDC, 0x3295, 0x28FF, 0x3296, 0x1FE5, 0x3297, 0x28FC,
- 0x3298, 0x1FDE, 0x3299, 0x201F, 0x329A, 0x28F9, 0x329B, 0x28F8,
- 0x329C, 0x28FE, 0x329D, 0x207F, 0x329E, 0x1FFF, 0x329F, 0x28EF,
- 0x32A0, 0x28F6, 0x32A1, 0x28F7, 0x32A2, 0x28FB, 0x32A3, 0x28FA,
- 0x32A4, 0x1DBD, 0x32A5, 0x1DBE, 0x32A6, 0x1DBF, 0x32A7, 0x1DC0,
- 0x32A8, 0x1DC1, 0x32A9, 0x1FDA, 0x32AA, 0x1FDD, 0x32AB, 0x1FDF,
- 0x32AC, 0x1FE3, 0x32AD, 0x1FD9, 0x32AE, 0x1FE4, 0x32AF, 0x1FDB,
- 0x32B0, 0x1FD8, 0x32B1, 0x2808, 0x32B2, 0x2809, 0x32B3, 0x280A,
- 0x32B4, 0x280B, 0x32B5, 0x280C, 0x32B6, 0x280D, 0x32B7, 0x280E,
- 0x32B8, 0x280F, 0x32B9, 0x2810, 0x32BA, 0x2811, 0x32BB, 0x2812,
- 0x32BC, 0x2813, 0x32BD, 0x2814, 0x32BE, 0x2815, 0x32BF, 0x2816,
- 0x32D0, 0x28AD, 0x32D1, 0x28AE, 0x32D2, 0x28AF, 0x32D3, 0x28B0,
- 0x32D4, 0x28B1, 0x32D5, 0x28B2, 0x32D6, 0x28B3, 0x32D7, 0x28B4,
- 0x32D8, 0x28B5, 0x32D9, 0x28B6, 0x32DA, 0x28B7, 0x32DB, 0x28B8,
- 0x32DC, 0x28B9, 0x32DD, 0x28BA, 0x32DE, 0x28BB, 0x32DF, 0x28BC,
- 0x32E0, 0x28BD, 0x32E1, 0x28BE, 0x32E2, 0x28BF, 0x32E3, 0x28C0,
- 0x32E4, 0x28C1, 0x32E5, 0x28C2, 0x32E6, 0x28C3, 0x32E7, 0x28C4,
- 0x32E8, 0x28C5, 0x32E9, 0x28C6, 0x32EA, 0x28C7, 0x32EB, 0x28C8,
- 0x32EC, 0x28C9, 0x32ED, 0x28CA, 0x32EE, 0x28CB, 0x32EF, 0x28CC,
- 0x32F0, 0x28CD, 0x32F1, 0x28CE, 0x32F2, 0x28CF, 0x32F3, 0x28D0,
- 0x32F4, 0x28D1, 0x32F5, 0x28D2, 0x32F6, 0x28D3, 0x32F7, 0x28D4,
- 0x32F8, 0x28D5, 0x32F9, 0x28D6, 0x32FA, 0x28D7, 0x32FB, 0x28D8,
- 0x32FC, 0x28D9, 0x32FD, 0x28DA, 0x32FE, 0x28DB, 0x3300, 0x1F70,
- 0x3301, 0x2E62, 0x3302, 0x2E63, 0x3303, 0x1F6A, 0x3304, 0x2E64,
- 0x3305, 0x1FF7, 0x3306, 0x2E65, 0x3307, 0x2E69, 0x3308, 0x2E67,
- 0x3309, 0x2E6C, 0x330A, 0x2E6A, 0x330B, 0x2E6E, 0x330C, 0x2E70,
- 0x330D, 0x1DAB, 0x330E, 0x2E71, 0x330F, 0x2E72, 0x3310, 0x2E73,
- 0x3311, 0x2E74, 0x3312, 0x2E75, 0x3313, 0x2E76, 0x3314, 0x1DA2,
- 0x3315, 0x1F69, 0x3316, 0x1F67, 0x3317, 0x2E78, 0x3318, 0x1F68,
- 0x3319, 0x2E7A, 0x331A, 0x2E7C, 0x331B, 0x2E7D, 0x331C, 0x2E7E,
- 0x331D, 0x2E7F, 0x331E, 0x1F73, 0x331F, 0x2E80, 0x3320, 0x2E81,
- 0x3321, 0x2E82, 0x3322, 0x1F66, 0x3323, 0x1F6B, 0x3324, 0x2E83,
- 0x3325, 0x2E85, 0x3326, 0x1DAC, 0x3327, 0x1DA6, 0x3328, 0x2E88,
- 0x3329, 0x2E89, 0x332A, 0x1F74, 0x332B, 0x1DAE, 0x332D, 0x2E8B,
- 0x332E, 0x2E8E, 0x332F, 0x2E8F, 0x3330, 0x2E90, 0x3331, 0x1F71,
- 0x3332, 0x2E91, 0x3333, 0x2087, 0x3334, 0x2E94, 0x3335, 0x2E95,
- 0x3336, 0x1DA8, 0x3337, 0x2E9A, 0x3338, 0x2E9C, 0x3339, 0x1F6E,
- 0x333A, 0x2E9D, 0x333B, 0x1F6F, 0x333C, 0x2E96, 0x333D, 0x2E9E,
- 0x333E, 0x2EA0, 0x333F, 0x2EA1, 0x3340, 0x2EA2, 0x3341, 0x2E9F,
- 0x3342, 0x1F6D, 0x3343, 0x2EA3, 0x3344, 0x2EA4, 0x3345, 0x2EA5,
- 0x3346, 0x2EA6, 0x3347, 0x1F72, 0x3348, 0x2EA7, 0x3349, 0x1DA1,
- 0x334A, 0x1DAF, 0x334B, 0x2EA8, 0x334C, 0x2EA9, 0x334D, 0x1DA4,
- 0x334E, 0x2088, 0x334F, 0x2EAA, 0x3350, 0x2EAB, 0x3351, 0x1DA9,
- 0x3352, 0x2EAE, 0x3353, 0x2EB2, 0x3354, 0x2EAF, 0x3355, 0x2EB3,
- 0x3356, 0x2EB4, 0x3357, 0x1F6C, 0x3371, 0x2E55, 0x337B, 0x2083,
- 0x337C, 0x1DC7, 0x337D, 0x1DC6, 0x337E, 0x1DC5, 0x337F, 0x1F76,
- 0x3385, 0x1F5F, 0x3386, 0x1F60, 0x3387, 0x1F61, 0x3388, 0x2000,
- 0x3389, 0x2001, 0x338D, 0x2E58, 0x338E, 0x1DB4, 0x338F, 0x1DB5,
- 0x3390, 0x1F63, 0x3396, 0x1F65, 0x3397, 0x1F58, 0x3398, 0x1F5A,
- 0x339B, 0x2E59, 0x339C, 0x1DB1, 0x339D, 0x1DB2, 0x339E, 0x1DB3,
- 0x339F, 0x1FFA, 0x33A0, 0x1F54, 0x33A1, 0x1DB7, 0x33A2, 0x1F55,
- 0x33A3, 0x1FFB, 0x33A4, 0x1F56, 0x33A5, 0x1F57, 0x33A6, 0x1FFC,
- 0x33B0, 0x1F5E, 0x33B1, 0x1F5D, 0x33B2, 0x1F5C, 0x33B3, 0x1F5B,
- 0x33C2, 0x2E50, 0x33C4, 0x1DB6, 0x33C8, 0x2002, 0x33CB, 0x1F62,
- 0x33CC, 0x1FF6, 0x33CD, 0x1DBB, 0x33D4, 0x1F64, 0x33D7, 0x2E5D,
- 0x33D8, 0x2E5E, 0x33DA, 0x2E4B, 0x3402, 0x3582, 0x3405, 0x3C1B,
- 0x3406, 0x435A, 0x3427, 0x3656, 0x342C, 0x435E, 0x342E, 0x3788,
- 0x3468, 0x36DF, 0x346A, 0x4375, 0x3488, 0x3C52, 0x3492, 0x438E,
- 0x34B5, 0x4199, 0x34BC, 0x4397, 0x34C1, 0x47D0, 0x34C7, 0x439B,
- 0x34DB, 0x3C41, 0x351F, 0x3629, 0x353E, 0x371E, 0x355D, 0x43BD,
- 0x355E, 0x43BE, 0x3563, 0x43C0, 0x356E, 0x43C4, 0x35A6, 0x43D9,
- 0x35A8, 0x43DB, 0x35C5, 0x43E1, 0x35DA, 0x43EA, 0x35DE, 0x4E63,
- 0x35F4, 0x43F3, 0x3605, 0x43FA, 0x3614, 0x4ABB, 0x364A, 0x4421,
- 0x3691, 0x4441, 0x3696, 0x4445, 0x3699, 0x4443, 0x36CF, 0x4456,
- 0x3761, 0x4478, 0x3762, 0x4479, 0x376B, 0x447D, 0x376C, 0x447C,
- 0x3775, 0x4480, 0x378D, 0x361A, 0x37C1, 0x448E, 0x37E2, 0x372B,
- 0x37E8, 0x44A2, 0x37F4, 0x44A5, 0x37FD, 0x44A8, 0x3800, 0x44AA,
- 0x382F, 0x44B4, 0x3836, 0x44B5, 0x3840, 0x44B6, 0x385C, 0x44BA,
- 0x3861, 0x44BC, 0x38A1, 0x4ECB, 0x38AD, 0x4ABC, 0x38FA, 0x361C,
- 0x3917, 0x44D9, 0x391A, 0x44DC, 0x396F, 0x44EB, 0x39A4, 0x4E9A,
- 0x39B8, 0x4E9B, 0x3A5C, 0x4E9F, 0x3A6E, 0x4531, 0x3A73, 0x4534,
- 0x3A85, 0x4EAE, 0x3AC4, 0x4EA7, 0x3ACB, 0x4EA8, 0x3AD6, 0x4543,
- 0x3AD7, 0x455E, 0x3AEA, 0x454D, 0x3AF3, 0x3C40, 0x3B0E, 0x4558,
- 0x3B1A, 0x455C, 0x3B1C, 0x455D, 0x3B22, 0x3C49, 0x3B6D, 0x458C,
- 0x3B77, 0x4585, 0x3B87, 0x45A2, 0x3B88, 0x368D, 0x3B8D, 0x45A4,
- 0x3BA4, 0x45AA, 0x3BB6, 0x420E, 0x3BC3, 0x420F, 0x3BCD, 0x45B8,
- 0x3BF0, 0x45C9, 0x3BF3, 0x4EB7, 0x3C0F, 0x4217, 0x3C26, 0x45DF,
- 0x3CC3, 0x45FC, 0x3CD2, 0x4601, 0x3D11, 0x4625, 0x3D1E, 0x4630,
- 0x3D31, 0x4EBE, 0x3D4E, 0x1DE7, 0x3D64, 0x464A, 0x3D9A, 0x4658,
- 0x3DC0, 0x466A, 0x3DCC, 0x4ABD, 0x3DD4, 0x466F, 0x3E05, 0x467B,
- 0x3E3F, 0x4248, 0x3E40, 0x4ECA, 0x3E60, 0x468B, 0x3E66, 0x468D,
- 0x3E68, 0x468E, 0x3E83, 0x4695, 0x3E8A, 0x3C43, 0x3E94, 0x469B,
- 0x3EDA, 0x3C48, 0x3F57, 0x46CB, 0x3F72, 0x4258, 0x3F75, 0x46D9,
- 0x3F77, 0x46DB, 0x3FAE, 0x46ED, 0x3FB1, 0x3754, 0x3FC9, 0x46F8,
- 0x3FD7, 0x46FD, 0x3FDC, 0x4ABE, 0x4039, 0x470F, 0x4058, 0x4716,
- 0x4093, 0x3C4C, 0x4103, 0x3C4F, 0x4105, 0x473B, 0x4148, 0x4747,
- 0x414F, 0x474A, 0x4163, 0x474E, 0x41B4, 0x475D, 0x41BF, 0x4760,
- 0x41E6, 0x476B, 0x41EE, 0x476F, 0x41F3, 0x476C, 0x4207, 0x4776,
- 0x420E, 0x4779, 0x4264, 0x3760, 0x4293, 0x3C50, 0x42C6, 0x479F,
- 0x42D6, 0x47AA, 0x42DD, 0x47AE, 0x4302, 0x47BC, 0x432B, 0x47C9,
- 0x4343, 0x47CB, 0x43EE, 0x47F7, 0x43F0, 0x47FA, 0x4408, 0x4800,
- 0x440C, 0x3C42, 0x4417, 0x4802, 0x441C, 0x4803, 0x4422, 0x4805,
- 0x4453, 0x3773, 0x445B, 0x42A4, 0x4476, 0x481C, 0x447A, 0x481D,
- 0x4491, 0x4823, 0x44B3, 0x483E, 0x44BE, 0x483C, 0x44D4, 0x483D,
- 0x4508, 0x485C, 0x450D, 0x4858, 0x4525, 0x377E, 0x4543, 0x486C,
- 0x457A, 0x3C4B, 0x459D, 0x42D4, 0x45B8, 0x48A0, 0x45BE, 0x4ABF,
- 0x45E5, 0x48BA, 0x45EA, 0x42D9, 0x460F, 0x48CA, 0x4610, 0x4AC0,
- 0x4641, 0x48D8, 0x4665, 0x3C4E, 0x46A1, 0x48E9, 0x46AE, 0x3C51,
- 0x46AF, 0x48ED, 0x470C, 0x4902, 0x471F, 0x4EFB, 0x4764, 0x4918,
- 0x47E6, 0x3790, 0x47FD, 0x4924, 0x4816, 0x492E, 0x481E, 0x4F01,
- 0x4844, 0x42F5, 0x484E, 0x493A, 0x48B5, 0x495B, 0x49B0, 0x431F,
- 0x49E7, 0x49D2, 0x49FA, 0x49D6, 0x4A04, 0x49DB, 0x4A29, 0x49DE,
- 0x4ABC, 0x49F6, 0x4B38, 0x35DF, 0x4B3B, 0x4A0E, 0x4B7E, 0x4AC1,
- 0x4BC2, 0x4A33, 0x4BCA, 0x4A35, 0x4BD2, 0x4A37, 0x4BE8, 0x3C46,
- 0x4C17, 0x4334, 0x4C20, 0x4A48, 0x4C38, 0x4AC2, 0x4CC4, 0x4A84,
- 0x4CD1, 0x4A87, 0x4CE1, 0x4AC3, 0x4D07, 0x4A9B, 0x4D77, 0x4AAB,
- 0x4E00, 0x04B0, 0x4E01, 0x0BB8, 0x4E02, 0x4352, 0x4E03, 0x08E3,
- 0x4E04, 0x37D8, 0x4E05, 0x37D9, 0x4E07, 0x0EAA, 0x4E08, 0x09CE,
- 0x4E09, 0x087E, 0x4E0A, 0x09CD, 0x4E0B, 0x053C, 0x4E0C, 0x4AC4,
- 0x4E0D, 0x0DC6, 0x4E0E, 0x0F29, 0x4E0F, 0x4353, 0x4E10, 0x0FFB,
- 0x4E11, 0x04D1, 0x4E12, 0x4354, 0x4E14, 0x05CC, 0x4E15, 0x0FFC,
- 0x4E16, 0x0A48, 0x4E17, 0x10D7, 0x4E18, 0x0670, 0x4E19, 0x0E0A,
- 0x4E1E, 0x09CF, 0x4E1F, 0x37DA, 0x4E21, 0x0F86, 0x4E23, 0x4AC5,
- 0x4E24, 0x4AC6, 0x4E26, 0x0E12, 0x4E28, 0x20B3, 0x4E29, 0x4355,
- 0x4E2A, 0x0FFD, 0x4E2B, 0x37DB, 0x4E2C, 0x374D, 0x4E2D, 0x0BA4,
- 0x4E2E, 0x4356, 0x4E2F, 0x37DC, 0x4E30, 0x37DD, 0x4E31, 0x0FFE,
- 0x4E32, 0x06F2, 0x4E36, 0x0FFF, 0x4E37, 0x369D, 0x4E38, 0x0619,
- 0x4E39, 0x0B6E, 0x4E3B, 0x0913, 0x4E3C, 0x1000, 0x4E3F, 0x1001,
- 0x4E40, 0x37DE, 0x4E41, 0x37DF, 0x4E42, 0x1002, 0x4E43, 0x0CEB,
- 0x4E44, 0x37E0, 0x4E45, 0x0671, 0x4E47, 0x4357, 0x4E48, 0x372E,
- 0x4E4B, 0x0CED, 0x4E4D, 0x0CBB, 0x4E4E, 0x0777, 0x4E4F, 0x0E61,
- 0x4E51, 0x4359, 0x4E55, 0x1950, 0x4E56, 0x1003, 0x4E57, 0x09D0,
- 0x4E58, 0x1004, 0x4E59, 0x0535, 0x4E5A, 0x37E1, 0x4E5D, 0x06DD,
- 0x4E5E, 0x07A4, 0x4E5F, 0x0EF5, 0x4E62, 0x1233, 0x4E69, 0x435C,
- 0x4E71, 0x0F5A, 0x4E73, 0x0CD5, 0x4E79, 0x4AC7, 0x4E7E, 0x05E1,
- 0x4E7F, 0x37E2, 0x4E80, 0x064F, 0x4E82, 0x1005, 0x4E85, 0x1006,
- 0x4E86, 0x0F83, 0x4E88, 0x0F27, 0x4E89, 0x0AEA, 0x4E8A, 0x1008,
- 0x4E8B, 0x08C4, 0x4E8C, 0x0CCB, 0x4E8D, 0x37E3, 0x4E8E, 0x100B,
- 0x4E91, 0x04E0, 0x4E92, 0x0793, 0x4E94, 0x0792, 0x4E95, 0x04AA,
- 0x4E96, 0x37E4, 0x4E98, 0x0FF1, 0x4E99, 0x0FF0, 0x4E9B, 0x0823,
- 0x4E9C, 0x0465, 0x4E9D, 0x435D, 0x4E9E, 0x100C, 0x4E9F, 0x100D,
- 0x4EA0, 0x100E, 0x4EA1, 0x0E62, 0x4EA2, 0x100F, 0x4EA4, 0x07A6,
- 0x4EA5, 0x04AB, 0x4EA6, 0x0EA0, 0x4EA8, 0x0696, 0x4EAB, 0x0697,
- 0x4EAC, 0x0698, 0x4EAD, 0x0BFE, 0x4EAE, 0x0F84, 0x4EB0, 0x1010,
- 0x4EB3, 0x1011, 0x4EB6, 0x1012, 0x4EB9, 0x37E5, 0x4EBA, 0x0A13,
- 0x4EBB, 0x3620, 0x4EBC, 0x435F, 0x4EC0, 0x0944, 0x4EC1, 0x0A14,
- 0x4EC2, 0x1017, 0x4EC3, 0x4360, 0x4EC4, 0x1015, 0x4EC6, 0x1016,
- 0x4EC7, 0x0672, 0x4EC8, 0x4361, 0x4ECA, 0x0813, 0x4ECB, 0x0570,
- 0x4ECD, 0x1014, 0x4ECE, 0x1013, 0x4ECF, 0x0DF9, 0x4ED0, 0x37E6,
- 0x4ED4, 0x0894, 0x4ED5, 0x0893, 0x4ED6, 0x0B1E, 0x4ED7, 0x1018,
- 0x4ED8, 0x0DC7, 0x4ED9, 0x0A8B, 0x4EDA, 0x4363, 0x4EDD, 0x0290,
- 0x4EDE, 0x1019, 0x4EDF, 0x101B, 0x4EE0, 0x37E7, 0x4EE1, 0x20B4,
- 0x4EE3, 0x0B45, 0x4EE4, 0x0FA9, 0x4EE5, 0x048E, 0x4EEB, 0x4362,
- 0x4EED, 0x101A, 0x4EEE, 0x053E, 0x4EF0, 0x06BC, 0x4EF1, 0x4364,
- 0x4EF2, 0x0BA5, 0x4EF3, 0x4AC8, 0x4EF5, 0x4365, 0x4EF6, 0x0745,
- 0x4EF7, 0x101C, 0x4EFB, 0x0CDA, 0x4EFC, 0x20B5, 0x4EFD, 0x37E8,
- 0x4EFF, 0x37E9, 0x4F00, 0x20B6, 0x4F01, 0x0627, 0x4F03, 0x20B7,
- 0x4F09, 0x101D, 0x4F0A, 0x048F, 0x4F0B, 0x37EA, 0x4F0C, 0x4AC9,
- 0x4F0D, 0x0794, 0x4F0E, 0x0628, 0x4F0F, 0x0DEC, 0x4F10, 0x0D46,
- 0x4F11, 0x0673, 0x4F15, 0x37EB, 0x4F16, 0x4366, 0x4F19, 0x4ACA,
- 0x4F1A, 0x0571, 0x4F1C, 0x1040, 0x4F1D, 0x0C3B, 0x4F2B, 0x4ACB,
- 0x4F2E, 0x4ACC, 0x4F2F, 0x0D22, 0x4F30, 0x101F, 0x4F31, 0x4ACD,
- 0x4F34, 0x0D50, 0x4F36, 0x0FAA, 0x4F37, 0x4368, 0x4F38, 0x09F3,
- 0x4F39, 0x20B8, 0x4F3A, 0x0895, 0x4F3B, 0x37ED, 0x4F3C, 0x08C5,
- 0x4F3D, 0x0540, 0x4F3E, 0x4369, 0x4F43, 0x0BED, 0x4F46, 0x0B60,
- 0x4F47, 0x1023, 0x4F48, 0x418B, 0x4F49, 0x37EE, 0x4F4D, 0x0490,
- 0x4F4E, 0x0BFF, 0x4F4F, 0x0945, 0x4F50, 0x0824, 0x4F51, 0x0F0E,
- 0x4F53, 0x0B2E, 0x4F54, 0x37EF, 0x4F55, 0x053F, 0x4F56, 0x20B9,
- 0x4F57, 0x1022, 0x4F58, 0x436A, 0x4F59, 0x0F28, 0x4F5A, 0x101E,
- 0x4F5B, 0x1020, 0x4F5C, 0x085E, 0x4F5D, 0x1021, 0x4F5E, 0x11D3,
- 0x4F5F, 0x418C, 0x4F60, 0x37EC, 0x4F64, 0x4367, 0x4F69, 0x1029,
- 0x4F6A, 0x418D, 0x4F6C, 0x418E, 0x4F6F, 0x102C, 0x4F70, 0x102A,
- 0x4F73, 0x0542, 0x4F75, 0x0E0B, 0x4F76, 0x1024, 0x4F77, 0x436C,
- 0x4F78, 0x436D, 0x4F7A, 0x37F0, 0x4F7B, 0x1028, 0x4F7C, 0x07A7,
- 0x4F7D, 0x37F1, 0x4F7E, 0x37F2, 0x4F7F, 0x0896, 0x4F82, 0x436E,
- 0x4F83, 0x05E2, 0x4F84, 0x4ACE, 0x4F85, 0x436F, 0x4F86, 0x102D,
- 0x4F88, 0x1025, 0x4F8A, 0x20BB, 0x4F8B, 0x0FAB, 0x4F8D, 0x08C6,
- 0x4F8F, 0x1026, 0x4F91, 0x102B, 0x4F92, 0x20BA, 0x4F94, 0x20BD,
- 0x4F96, 0x102E, 0x4F97, 0x37F3, 0x4F98, 0x1027, 0x4F9A, 0x20BC,
- 0x4F9B, 0x0699, 0x4F9D, 0x0491, 0x4F9E, 0x4ACF, 0x4FA0, 0x069A,
- 0x4FA1, 0x0541, 0x4FAB, 0x11D4, 0x4FAD, 0x0EA7, 0x4FAE, 0x0DE0,
- 0x4FAF, 0x07A8, 0x4FB2, 0x4371, 0x4FB5, 0x09F5, 0x4FB6, 0x0F7F,
- 0x4FB7, 0x4AD0, 0x4FBE, 0x37F4, 0x4FBF, 0x0E28, 0x4FC2, 0x070E,
- 0x4FC3, 0x0B05, 0x4FC4, 0x0564, 0x4FC5, 0x4372, 0x4FC9, 0x20AC,
- 0x4FCA, 0x095D, 0x4FCB, 0x4373, 0x4FCD, 0x20BE, 0x4FCE, 0x1032,
- 0x4FCF, 0x37F5, 0x4FD0, 0x1037, 0x4FD1, 0x1035, 0x4FD2, 0x4374,
- 0x4FD3, 0x3C2F, 0x4FD4, 0x1030, 0x4FD7, 0x0B0F, 0x4FD8, 0x1033,
- 0x4FDA, 0x1036, 0x4FDB, 0x1034, 0x4FDD, 0x0E2D, 0x4FDF, 0x1031,
- 0x4FE0, 0x1DEC, 0x4FE1, 0x09F4, 0x4FE3, 0x0EA1, 0x4FE4, 0x1038,
- 0x4FE5, 0x1039, 0x4FE6, 0x4370, 0x4FEE, 0x092E, 0x4FEF, 0x1046,
- 0x4FF1, 0x35A3, 0x4FF2, 0x4376, 0x4FF3, 0x0D06, 0x4FF5, 0x0DA8,
- 0x4FF6, 0x1041, 0x4FF8, 0x0E40, 0x4FFA, 0x0536, 0x4FFD, 0x37F6,
- 0x4FFE, 0x1045, 0x4FFF, 0x20C1, 0x5000, 0x37F7, 0x5001, 0x37F8,
- 0x5002, 0x4F4B, 0x5004, 0x4AD1, 0x5005, 0x103F, 0x5006, 0x1048,
- 0x5009, 0x0AD4, 0x500B, 0x0778, 0x500C, 0x4AD2, 0x500D, 0x0D12,
- 0x500E, 0x418F, 0x500F, 0x1600, 0x5010, 0x37F9, 0x5011, 0x1047,
- 0x5012, 0x0C57, 0x5013, 0x4377, 0x5014, 0x103C, 0x5016, 0x07AA,
- 0x5018, 0x4190, 0x5019, 0x07A9, 0x501A, 0x103A, 0x501B, 0x37FA,
- 0x501C, 0x4378, 0x501E, 0x20C2, 0x501F, 0x0906, 0x5021, 0x1042,
- 0x5022, 0x20C0, 0x5023, 0x0E3F, 0x5024, 0x0B8B, 0x5025, 0x103E,
- 0x5026, 0x0747, 0x5027, 0x37FB, 0x5028, 0x103B, 0x5029, 0x1043,
- 0x502A, 0x103D, 0x502B, 0x0F99, 0x502C, 0x1044, 0x502D, 0x0FE7,
- 0x502E, 0x37FC, 0x5036, 0x06DE, 0x5039, 0x0746, 0x503B, 0x3800,
- 0x5040, 0x20BF, 0x5041, 0x4191, 0x5042, 0x20C5, 0x5043, 0x1049,
- 0x5046, 0x20C3, 0x5047, 0x104A, 0x5048, 0x104E, 0x5049, 0x0492,
- 0x504C, 0x4AD3, 0x504E, 0x4379, 0x504F, 0x0E20, 0x5050, 0x104D,
- 0x5053, 0x437A, 0x5055, 0x104C, 0x5056, 0x1050, 0x5057, 0x37FD,
- 0x505A, 0x104F, 0x505C, 0x0C00, 0x505F, 0x4AD4, 0x5062, 0x4AD5,
- 0x5063, 0x437B, 0x5065, 0x0748, 0x5066, 0x37FE, 0x506A, 0x37FF,
- 0x506C, 0x1051, 0x5070, 0x20C4, 0x5072, 0x08F1, 0x5074, 0x0B06,
- 0x5075, 0x0C01, 0x5076, 0x06EE, 0x5077, 0x4AD6, 0x5078, 0x1052,
- 0x507D, 0x0650, 0x5080, 0x1053, 0x5085, 0x1055, 0x5088, 0x437D,
- 0x508D, 0x0E63, 0x508E, 0x4AD7, 0x508F, 0x3801, 0x5091, 0x073C,
- 0x5092, 0x437E, 0x5093, 0x437F, 0x5094, 0x20C6, 0x5095, 0x4380,
- 0x5096, 0x3802, 0x5098, 0x087F, 0x5099, 0x0D8B, 0x509A, 0x1054,
- 0x509C, 0x3803, 0x509E, 0x4AD8, 0x50A2, 0x4AD9, 0x50A3, 0x437C,
- 0x50AA, 0x4381, 0x50AC, 0x0835, 0x50AD, 0x0F2D, 0x50B1, 0x4383,
- 0x50B2, 0x1057, 0x50B3, 0x105A, 0x50B4, 0x1056, 0x50B5, 0x0834,
- 0x50B7, 0x0987, 0x50BA, 0x4384, 0x50BB, 0x4385, 0x50BE, 0x070F,
- 0x50C2, 0x105B, 0x50C3, 0x4ADA, 0x50C4, 0x4386, 0x50C5, 0x06C7,
- 0x50C7, 0x4387, 0x50C9, 0x1058, 0x50CA, 0x1059, 0x50CC, 0x3804,
- 0x50CD, 0x0C87, 0x50CE, 0x438A, 0x50CF, 0x0AFE, 0x50D0, 0x4193,
- 0x50D1, 0x069B, 0x50D4, 0x438C, 0x50D5, 0x0E7B, 0x50D6, 0x105C,
- 0x50D8, 0x20C8, 0x50D9, 0x3C30, 0x50DA, 0x0F85, 0x50DE, 0x105D,
- 0x50E1, 0x438D, 0x50E3, 0x1060, 0x50E5, 0x105E, 0x50E6, 0x3805,
- 0x50E7, 0x0AD0, 0x50E8, 0x4ADB, 0x50E9, 0x3806, 0x50ED, 0x105F,
- 0x50EE, 0x1061, 0x50EF, 0x3807, 0x50F0, 0x3C31, 0x50F1, 0x4ADC,
- 0x50F2, 0x4192, 0x50F3, 0x4388, 0x50F4, 0x20C7, 0x50F5, 0x1063,
- 0x50F9, 0x1062, 0x50FB, 0x0E18, 0x50FE, 0x4ADD, 0x5100, 0x0651,
- 0x5101, 0x1065, 0x5102, 0x1066, 0x5103, 0x4195, 0x5104, 0x052F,
- 0x5106, 0x4194, 0x5107, 0x4ADE, 0x5108, 0x3808, 0x5109, 0x1064,
- 0x510B, 0x3809, 0x510C, 0x4ADF, 0x510D, 0x4AE0, 0x510E, 0x4AE1,
- 0x5110, 0x380A, 0x5112, 0x0920, 0x5114, 0x1069, 0x5115, 0x1068,
- 0x5116, 0x1067, 0x5117, 0x4390, 0x5118, 0x102F, 0x511A, 0x106A,
- 0x511B, 0x380B, 0x511E, 0x380C, 0x511F, 0x0988, 0x5121, 0x106B,
- 0x512A, 0x0F0F, 0x5132, 0x0EE5, 0x5133, 0x4AE2, 0x5135, 0x4196,
- 0x5137, 0x106D, 0x5138, 0x4AE3, 0x513A, 0x106C, 0x513B, 0x106F,
- 0x513C, 0x106E, 0x513F, 0x1070, 0x5140, 0x1071, 0x5141, 0x04B8,
- 0x5143, 0x0769, 0x5144, 0x0711, 0x5145, 0x0946, 0x5146, 0x0BB9,
- 0x5147, 0x069C, 0x5148, 0x0A8C, 0x5149, 0x07AB, 0x514A, 0x20C9,
- 0x514B, 0x0800, 0x514C, 0x1073, 0x514D, 0x0ED4, 0x514E, 0x0C40,
- 0x5150, 0x08C7, 0x5152, 0x1072, 0x5154, 0x1074, 0x5155, 0x4197,
- 0x5157, 0x4198, 0x515A, 0x0C58, 0x515C, 0x05D3, 0x515F, 0x380D,
- 0x5160, 0x4392, 0x5162, 0x1075, 0x5164, 0x20CA, 0x5165, 0x0CD6,
- 0x5167, 0x368E, 0x5168, 0x0AB6, 0x5169, 0x1077, 0x516A, 0x1078,
- 0x516B, 0x0D40, 0x516C, 0x07AC, 0x516D, 0x0FE1, 0x516E, 0x1079,
- 0x5171, 0x069E, 0x5173, 0x4394, 0x5174, 0x4AE4, 0x5175, 0x0E0C,
- 0x5176, 0x0B16, 0x5177, 0x06E9, 0x5178, 0x0C2F, 0x5179, 0x3779,
- 0x517B, 0x47D9, 0x517C, 0x0749, 0x5180, 0x107A, 0x5182, 0x107B,
- 0x5183, 0x4395, 0x5184, 0x4AE5, 0x5185, 0x0CBA, 0x5186, 0x0501,
- 0x5189, 0x107E, 0x518A, 0x086D, 0x518B, 0x4396, 0x518C, 0x107D,
- 0x518D, 0x0836, 0x518F, 0x107F, 0x5190, 0x185B, 0x5191, 0x1080,
- 0x5192, 0x0E6F, 0x5193, 0x1081, 0x5195, 0x1082, 0x5196, 0x1083,
- 0x5197, 0x09D1, 0x5198, 0x4398, 0x5199, 0x08F8, 0x519D, 0x20CB,
- 0x51A0, 0x05E3, 0x51A1, 0x380E, 0x51A2, 0x1086, 0x51A3, 0x4399,
- 0x51A4, 0x1084, 0x51A5, 0x0EC9, 0x51A6, 0x1085, 0x51A8, 0x0DCC,
- 0x51A9, 0x1087, 0x51AA, 0x1088, 0x51AB, 0x1089, 0x51AC, 0x0C59,
- 0x51AD, 0x439A, 0x51B0, 0x108D, 0x51B1, 0x108B, 0x51B2, 0x108C,
- 0x51B3, 0x108A, 0x51B4, 0x0853, 0x51B5, 0x108E, 0x51B6, 0x0EF6,
- 0x51B7, 0x0FAC, 0x51B8, 0x4AE6, 0x51BA, 0x4AE7, 0x51BC, 0x380F,
- 0x51BD, 0x108F, 0x51BE, 0x20CC, 0x51C3, 0x3C32, 0x51C4, 0x0A4C,
- 0x51C5, 0x1090, 0x51C6, 0x0964, 0x51C8, 0x4AE8, 0x51C9, 0x1091,
- 0x51CA, 0x419A, 0x51CB, 0x0BBA, 0x51CC, 0x0F87, 0x51CD, 0x0C5A,
- 0x51CF, 0x4AE9, 0x51D1, 0x4AEA, 0x51D3, 0x4AEB, 0x51D4, 0x4AEC,
- 0x51D6, 0x10DA, 0x51D8, 0x4AED, 0x51DB, 0x1092, 0x51DC, 0x205C,
- 0x51DD, 0x06BD, 0x51DE, 0x4F4C, 0x51DF, 0x4AEE, 0x51E0, 0x1093,
- 0x51E1, 0x0E8C, 0x51E2, 0x419B, 0x51E6, 0x0972, 0x51E7, 0x0B5C,
- 0x51E9, 0x1095, 0x51EA, 0x0CBC, 0x51EC, 0x20CD, 0x51ED, 0x1096,
- 0x51EE, 0x3811, 0x51F0, 0x1097, 0x51F1, 0x058C, 0x51F3, 0x439D,
- 0x51F4, 0x3812, 0x51F5, 0x1098, 0x51F6, 0x069F, 0x51F8, 0x0CA4,
- 0x51F9, 0x051C, 0x51FA, 0x095A, 0x51FD, 0x0D35, 0x51FE, 0x1099,
- 0x5200, 0x0C5B, 0x5201, 0x3813, 0x5202, 0x3814, 0x5203, 0x0A15,
- 0x5204, 0x109A, 0x5205, 0x4AEF, 0x5206, 0x0DFC, 0x5207, 0x0A7E,
- 0x5208, 0x05DE, 0x520A, 0x05E5, 0x520B, 0x109B, 0x520E, 0x109D,
- 0x5211, 0x0710, 0x5212, 0x439E, 0x5213, 0x3815, 0x5214, 0x109C,
- 0x5215, 0x20CE, 0x5216, 0x439F, 0x5217, 0x0FBB, 0x521D, 0x0973,
- 0x5224, 0x0D51, 0x5225, 0x0E1C, 0x5226, 0x4AF0, 0x5227, 0x109E,
- 0x5228, 0x4AF1, 0x5229, 0x0F62, 0x522A, 0x109F, 0x522B, 0x4AF2,
- 0x522E, 0x10A0, 0x5230, 0x0C78, 0x5231, 0x4AF3, 0x5232, 0x4AF4,
- 0x5233, 0x10A1, 0x5235, 0x4AF5, 0x5236, 0x0A4D, 0x5237, 0x086E,
- 0x5238, 0x074A, 0x5239, 0x10A2, 0x523A, 0x0897, 0x523B, 0x0801,
- 0x523C, 0x4AF6, 0x5243, 0x0C02, 0x5244, 0x10A4, 0x5247, 0x0B07,
- 0x5249, 0x3816, 0x524A, 0x085F, 0x524B, 0x10A5, 0x524C, 0x10A6,
- 0x524D, 0x0AB2, 0x524F, 0x10A3, 0x5254, 0x10A8, 0x5255, 0x43A1,
- 0x5256, 0x0E64, 0x5257, 0x419C, 0x525A, 0x4AF7, 0x525B, 0x07F6,
- 0x525C, 0x43A2, 0x525D, 0x1E5E, 0x525E, 0x10A7, 0x5260, 0x4AF8,
- 0x5261, 0x3817, 0x5263, 0x074B, 0x5264, 0x084E, 0x5265, 0x0D23,
- 0x5266, 0x3818, 0x5269, 0x10AB, 0x526A, 0x10A9, 0x526C, 0x43A3,
- 0x526E, 0x4AF9, 0x526F, 0x0DED, 0x5270, 0x09D2, 0x5271, 0x10B2,
- 0x5272, 0x05C2, 0x5273, 0x10AC, 0x5274, 0x10AA, 0x5275, 0x0AD1,
- 0x5277, 0x43A4, 0x5278, 0x4AFA, 0x5279, 0x4AFB, 0x527D, 0x10AE,
- 0x527F, 0x10AD, 0x5282, 0x43A6, 0x5283, 0x05A2, 0x5284, 0x43A5,
- 0x5287, 0x0736, 0x5288, 0x10B3, 0x5289, 0x0F75, 0x528A, 0x4AFC,
- 0x528C, 0x4AFD, 0x528D, 0x10AF, 0x5291, 0x10B4, 0x5292, 0x10B1,
- 0x5293, 0x3819, 0x5294, 0x10B0, 0x5298, 0x43A8, 0x529B, 0x0F97,
- 0x529C, 0x20CF, 0x529F, 0x07AD, 0x52A0, 0x0543, 0x52A3, 0x0FBC,
- 0x52A4, 0x43AA, 0x52A6, 0x20D0, 0x52A9, 0x097F, 0x52AA, 0x0C52,
- 0x52AB, 0x07F7, 0x52AC, 0x10B7, 0x52AD, 0x10B8, 0x52AF, 0x217D,
- 0x52B1, 0x0FAD, 0x52B4, 0x0FD1, 0x52B5, 0x10BA, 0x52B9, 0x07AE,
- 0x52BA, 0x43AB, 0x52BB, 0x43AC, 0x52BC, 0x10B9, 0x52BE, 0x058D,
- 0x52C0, 0x20D1, 0x52C1, 0x10BB, 0x52C3, 0x0E84, 0x52C5, 0x0BD8,
- 0x52C7, 0x0F10, 0x52C8, 0x381A, 0x52C9, 0x0E29, 0x52CA, 0x43AD,
- 0x52CC, 0x419D, 0x52CD, 0x10BC, 0x52D0, 0x36E8, 0x52D1, 0x43AE,
- 0x52D2, 0x1BEE, 0x52D5, 0x0C88, 0x52D6, 0x419E, 0x52D7, 0x10BD,
- 0x52D8, 0x05E6, 0x52D9, 0x0EBF, 0x52DB, 0x20D2, 0x52DD, 0x0989,
- 0x52DE, 0x10BE, 0x52DF, 0x0E37, 0x52E0, 0x10C2, 0x52E1, 0x4AFE,
- 0x52E2, 0x0A4E, 0x52E3, 0x10BF, 0x52E4, 0x06C8, 0x52E6, 0x10C0,
- 0x52E7, 0x05E7, 0x52E9, 0x4AFF, 0x52F0, 0x381B, 0x52F1, 0x4B00,
- 0x52F2, 0x0704, 0x52F3, 0x10C3, 0x52F5, 0x10C4, 0x52F7, 0x43B0,
- 0x52F8, 0x10C5, 0x52F9, 0x10C6, 0x52FA, 0x0907, 0x52FB, 0x419F,
- 0x52FE, 0x07AF, 0x52FF, 0x0EEA, 0x5300, 0x20D3, 0x5301, 0x0EF4,
- 0x5302, 0x0CCF, 0x5303, 0x4B01, 0x5305, 0x0E41, 0x5306, 0x10C7,
- 0x5307, 0x4F4D, 0x5308, 0x10C8, 0x530A, 0x381C, 0x530B, 0x381D,
- 0x530D, 0x10CA, 0x530F, 0x10CC, 0x5310, 0x10CB, 0x5311, 0x4B02,
- 0x5315, 0x10CD, 0x5316, 0x053D, 0x5317, 0x0E7A, 0x5319, 0x086C,
- 0x531A, 0x10CE, 0x531C, 0x41A0, 0x531D, 0x0ADB, 0x531F, 0x4B03,
- 0x5320, 0x098A, 0x5321, 0x06A1, 0x5323, 0x10CF, 0x5324, 0x20D5,
- 0x532A, 0x0D6F, 0x532D, 0x4B04, 0x532F, 0x10D0, 0x5331, 0x10D1,
- 0x5332, 0x4B05, 0x5333, 0x10D2, 0x5335, 0x43B1, 0x5338, 0x10D3,
- 0x5339, 0x0D96, 0x533A, 0x06E0, 0x533B, 0x04A9, 0x533D, 0x4B06,
- 0x533E, 0x381E, 0x533F, 0x0C97, 0x5340, 0x10D4, 0x5341, 0x0947,
- 0x5342, 0x43B2, 0x5343, 0x0A8D, 0x5345, 0x10D6, 0x5346, 0x10D5,
- 0x5347, 0x098B, 0x5348, 0x0795, 0x5349, 0x10D8, 0x534A, 0x0D52,
- 0x534B, 0x3820, 0x534C, 0x381F, 0x534D, 0x10D9, 0x5351, 0x0D70,
- 0x5352, 0x0B14, 0x5353, 0x0B4E, 0x5354, 0x06A0, 0x5357, 0x0CC6,
- 0x5358, 0x0B6F, 0x535A, 0x0D24, 0x535C, 0x0E7C, 0x535E, 0x10DB,
- 0x5360, 0x0A8E, 0x5361, 0x3821, 0x5363, 0x41A1, 0x5365, 0x4B07,
- 0x5366, 0x070B, 0x5367, 0x43B5, 0x5369, 0x10DC, 0x536C, 0x3822,
- 0x536D, 0x4B08, 0x536E, 0x10DD, 0x536F, 0x04CE, 0x5370, 0x04B9,
- 0x5371, 0x0629, 0x5372, 0x20D6, 0x5373, 0x0B08, 0x5374, 0x066B,
- 0x5375, 0x0F5B, 0x5377, 0x10E0, 0x5378, 0x0537, 0x5379, 0x4B09,
- 0x537A, 0x43B6, 0x537B, 0x10DF, 0x537D, 0x3435, 0x537E, 0x4B0A,
- 0x537F, 0x06A2, 0x5382, 0x10E1, 0x5384, 0x0EFD, 0x5389, 0x37D0,
- 0x5393, 0x20D7, 0x5394, 0x4B0B, 0x5396, 0x10E2, 0x5398, 0x0F9A,
- 0x5399, 0x4B0C, 0x539A, 0x07B0, 0x539D, 0x41A2, 0x539F, 0x076A,
- 0x53A0, 0x10E3, 0x53A4, 0x43B7, 0x53A5, 0x10E5, 0x53A6, 0x10E4,
- 0x53A8, 0x0A25, 0x53A9, 0x04DB, 0x53AA, 0x4B0D, 0x53AB, 0x3823,
- 0x53AD, 0x0500, 0x53AE, 0x10E6, 0x53AF, 0x4B0E, 0x53B0, 0x10E7,
- 0x53B2, 0x20D8, 0x53B3, 0x076B, 0x53B4, 0x43B8, 0x53B6, 0x10E8,
- 0x53B7, 0x43BA, 0x53BA, 0x4B0F, 0x53BB, 0x0688, 0x53C0, 0x43BB,
- 0x53C1, 0x4B10, 0x53C2, 0x0880, 0x53C3, 0x10E9, 0x53C4, 0x4B11,
- 0x53C5, 0x4B12, 0x53C8, 0x0EA2, 0x53C9, 0x0825, 0x53CA, 0x0674,
- 0x53CB, 0x0F11, 0x53CC, 0x0AD2, 0x53CD, 0x0D53, 0x53CE, 0x0929,
- 0x53D4, 0x0951, 0x53D5, 0x43BF, 0x53D6, 0x0914, 0x53D7, 0x0921,
- 0x53D9, 0x0980, 0x53DA, 0x3824, 0x53DB, 0x0D54, 0x53DD, 0x20D9,
- 0x53DF, 0x10EC, 0x53E0, 0x4B13, 0x53E1, 0x04E5, 0x53E2, 0x0AD3,
- 0x53E3, 0x07B1, 0x53E4, 0x0779, 0x53E5, 0x06DF, 0x53E6, 0x3825,
- 0x53E8, 0x10F0, 0x53E9, 0x0B5F, 0x53EA, 0x0B5E, 0x53EB, 0x06A3,
- 0x53EC, 0x098C, 0x53ED, 0x10F1, 0x53EE, 0x10EF, 0x53EF, 0x0544,
- 0x53F0, 0x0B46, 0x53F1, 0x08E4, 0x53F2, 0x0899, 0x53F3, 0x04C8,
- 0x53F4, 0x43C1, 0x53F5, 0x3826, 0x53F6, 0x05CE, 0x53F7, 0x07F8,
- 0x53F8, 0x0898, 0x53FA, 0x10F2, 0x5401, 0x10F3, 0x5403, 0x0663,
- 0x5404, 0x05A4, 0x5408, 0x07F9, 0x5409, 0x0662, 0x540A, 0x0BFB,
- 0x540B, 0x04C7, 0x540C, 0x0C89, 0x540D, 0x0ECA, 0x540E, 0x07B3,
- 0x540F, 0x0F63, 0x5410, 0x0C41, 0x5411, 0x07B2, 0x5412, 0x41A3,
- 0x5413, 0x4B14, 0x541B, 0x0705, 0x541D, 0x10FC, 0x541E, 0x368C,
- 0x541F, 0x06DB, 0x5420, 0x0E78, 0x5424, 0x43C2, 0x5426, 0x0D71,
- 0x5427, 0x3827, 0x5428, 0x43C3, 0x5429, 0x10FB, 0x542A, 0x4B15,
- 0x542B, 0x061A, 0x542C, 0x10F6, 0x542D, 0x10F7, 0x542E, 0x10F9,
- 0x5431, 0x4B16, 0x5433, 0x35C0, 0x5434, 0x4B17, 0x5435, 0x4B18,
- 0x5436, 0x10FA, 0x5438, 0x0675, 0x5439, 0x0A27, 0x543B, 0x0DFD,
- 0x543C, 0x10F8, 0x543D, 0x10F4, 0x543E, 0x0797, 0x543F, 0x35CF,
- 0x5440, 0x10F5, 0x5442, 0x0FCA, 0x5443, 0x43C5, 0x5446, 0x0E42,
- 0x5448, 0x0C04, 0x5449, 0x0796, 0x544A, 0x0802, 0x544C, 0x4B19,
- 0x544D, 0x3828, 0x544E, 0x10FD, 0x5451, 0x0CB5, 0x5455, 0x3723,
- 0x545F, 0x1101, 0x5462, 0x43C6, 0x5466, 0x3829, 0x5468, 0x092A,
- 0x546A, 0x0922, 0x546B, 0x382A, 0x546C, 0x43C7, 0x5470, 0x1104,
- 0x5471, 0x1102, 0x5473, 0x0EAF, 0x5474, 0x382B, 0x5475, 0x10FF,
- 0x5476, 0x1108, 0x5477, 0x1103, 0x547B, 0x1106, 0x547C, 0x077A,
- 0x547D, 0x0ECB, 0x547F, 0x41A4, 0x5480, 0x1107, 0x5484, 0x1109,
- 0x5486, 0x110B, 0x5488, 0x41A5, 0x548A, 0x20DC, 0x548B, 0x0860,
- 0x548C, 0x0FE8, 0x548D, 0x382C, 0x548E, 0x1100, 0x548F, 0x10FE,
- 0x5490, 0x110A, 0x5492, 0x1105, 0x5495, 0x43C8, 0x5496, 0x382D,
- 0x549C, 0x20DB, 0x54A0, 0x43C9, 0x54A1, 0x382E, 0x54A2, 0x110D,
- 0x54A4, 0x1116, 0x54A5, 0x110F, 0x54A6, 0x43CA, 0x54A7, 0x4B1A,
- 0x54A8, 0x1113, 0x54A9, 0x20DD, 0x54AA, 0x4B1B, 0x54AB, 0x1114,
- 0x54AC, 0x1110, 0x54AD, 0x382F, 0x54AE, 0x43CB, 0x54AF, 0x1131,
- 0x54B1, 0x4B1C, 0x54B2, 0x0859, 0x54B3, 0x058F, 0x54B7, 0x43CC,
- 0x54B8, 0x110E, 0x54B9, 0x3830, 0x54BA, 0x43CD, 0x54BB, 0x4B1D,
- 0x54BC, 0x1118, 0x54BD, 0x04BA, 0x54BE, 0x1117, 0x54BF, 0x3831,
- 0x54C0, 0x0469, 0x54C1, 0x0DBC, 0x54C2, 0x1115, 0x54C3, 0x43CE,
- 0x54C4, 0x1111, 0x54C6, 0x3832, 0x54C7, 0x110C, 0x54C8, 0x1112,
- 0x54C9, 0x0838, 0x54CD, 0x3833, 0x54CE, 0x4B1E, 0x54D8, 0x1119,
- 0x54E1, 0x04BB, 0x54E2, 0x1122, 0x54E5, 0x111A, 0x54E6, 0x111B,
- 0x54E8, 0x098D, 0x54E9, 0x0E97, 0x54EA, 0x4B1F, 0x54EC, 0x43D0,
- 0x54ED, 0x1120, 0x54EE, 0x111F, 0x54EF, 0x43D1, 0x54F1, 0x43D2,
- 0x54F2, 0x0C29, 0x54F3, 0x43D3, 0x54FA, 0x1121, 0x54FC, 0x4B20,
- 0x54FD, 0x111E, 0x54FF, 0x20DE, 0x5500, 0x43D4, 0x5501, 0x43D5,
- 0x5504, 0x04D6, 0x5505, 0x4B21, 0x5506, 0x0826, 0x5507, 0x09F6,
- 0x5508, 0x4B22, 0x5509, 0x43D6, 0x550E, 0x3834, 0x550F, 0x111C,
- 0x5510, 0x0C5C, 0x5514, 0x111D, 0x5515, 0x4B23, 0x5516, 0x0466,
- 0x5527, 0x4B24, 0x552A, 0x4B25, 0x552B, 0x3835, 0x552E, 0x1127,
- 0x552F, 0x0F0D, 0x5531, 0x098F, 0x5533, 0x112D, 0x5535, 0x3836,
- 0x5536, 0x4B26, 0x5538, 0x112C, 0x5539, 0x1123, 0x553C, 0x43D7,
- 0x553E, 0x0B23, 0x5540, 0x1124, 0x5541, 0x43D8, 0x5544, 0x0B4F,
- 0x5545, 0x1129, 0x5546, 0x098E, 0x5547, 0x43DA, 0x554A, 0x3837,
- 0x554C, 0x1126, 0x554F, 0x0EF0, 0x5550, 0x41A6, 0x5551, 0x4B27,
- 0x5553, 0x0712, 0x5556, 0x112A, 0x5557, 0x112B, 0x555C, 0x1128,
- 0x555D, 0x112E, 0x555E, 0x1DD1, 0x5560, 0x3838, 0x5561, 0x4F54,
- 0x5563, 0x1125, 0x5564, 0x43DC, 0x5566, 0x4B28, 0x557B, 0x1134,
- 0x557C, 0x1139, 0x557D, 0x43DE, 0x557E, 0x1135, 0x5580, 0x1130,
- 0x5581, 0x41A7, 0x5582, 0x43DF, 0x5583, 0x113A, 0x5584, 0x0AB3,
- 0x5586, 0x20DF, 0x5587, 0x113C, 0x5588, 0x383A, 0x5589, 0x07B4,
- 0x558A, 0x1132, 0x558B, 0x0BBB, 0x558E, 0x383B, 0x558F, 0x4B29,
- 0x5591, 0x43E0, 0x5592, 0x4B2A, 0x5594, 0x4B2B, 0x5598, 0x1136,
- 0x5599, 0x112F, 0x559A, 0x05E9, 0x559C, 0x062A, 0x559D, 0x05C3,
- 0x559E, 0x1137, 0x559F, 0x1133, 0x55A4, 0x4B2C, 0x55A7, 0x074C,
- 0x55A8, 0x113D, 0x55A9, 0x113B, 0x55AA, 0x0AD5, 0x55AB, 0x0664,
- 0x55AC, 0x06A4, 0x55AD, 0x41A8, 0x55AE, 0x1138, 0x55B0, 0x06EC,
- 0x55B2, 0x4B2D, 0x55B6, 0x04E6, 0x55BF, 0x43E5, 0x55C3, 0x4B2E,
- 0x55C4, 0x1141, 0x55C5, 0x113F, 0x55C6, 0x4B2F, 0x55C7, 0x1178,
- 0x55C9, 0x43E6, 0x55CC, 0x43E7, 0x55CE, 0x41A9, 0x55D1, 0x43E8,
- 0x55D2, 0x43E2, 0x55D3, 0x4B30, 0x55D4, 0x1144, 0x55DA, 0x113E,
- 0x55DB, 0x4B31, 0x55DC, 0x1142, 0x55DD, 0x43E9, 0x55DF, 0x1140,
- 0x55E2, 0x43EB, 0x55E3, 0x089A, 0x55E4, 0x1143, 0x55E9, 0x43ED,
- 0x55EC, 0x4B32, 0x55EE, 0x4B33, 0x55F1, 0x4B34, 0x55F6, 0x4B35,
- 0x55F7, 0x1146, 0x55F8, 0x4B36, 0x55F9, 0x114B, 0x55FD, 0x1149,
- 0x55FE, 0x1148, 0x5605, 0x4B37, 0x5606, 0x0B70, 0x5607, 0x43F0,
- 0x5608, 0x383C, 0x5609, 0x0545, 0x560D, 0x4B38, 0x560E, 0x383D,
- 0x560F, 0x383E, 0x5610, 0x43F1, 0x5611, 0x4B39, 0x5612, 0x4B3A,
- 0x5614, 0x1145, 0x5616, 0x1147, 0x5617, 0x0990, 0x5618, 0x04D5,
- 0x561B, 0x114A, 0x5620, 0x3C1D, 0x5628, 0x43EE, 0x5629, 0x055E,
- 0x562C, 0x4B3B, 0x562F, 0x1155, 0x5630, 0x43F2, 0x5631, 0x09E4,
- 0x5632, 0x1151, 0x5634, 0x114F, 0x5635, 0x4B3C, 0x5636, 0x1150,
- 0x5637, 0x383F, 0x5638, 0x1152, 0x5639, 0x4B3D, 0x563B, 0x41AA,
- 0x563D, 0x43F4, 0x563F, 0x3840, 0x5640, 0x43F5, 0x5642, 0x04DF,
- 0x5647, 0x43F6, 0x5649, 0x3841, 0x564B, 0x3842, 0x564C, 0x0ABB,
- 0x564D, 0x4B3E, 0x564E, 0x114C, 0x564F, 0x3843, 0x5650, 0x114D,
- 0x5653, 0x1F1B, 0x5654, 0x4B3F, 0x565B, 0x05D8, 0x565E, 0x43F7,
- 0x5660, 0x43F8, 0x5664, 0x1154, 0x5666, 0x3844, 0x5668, 0x062B,
- 0x5669, 0x3845, 0x566A, 0x1157, 0x566B, 0x1153, 0x566C, 0x1156,
- 0x566D, 0x43F9, 0x566F, 0x3846, 0x5671, 0x3847, 0x5672, 0x3848,
- 0x5674, 0x0DFE, 0x5676, 0x3C33, 0x5678, 0x0CAD, 0x567A, 0x0D4C,
- 0x5680, 0x1159, 0x5685, 0x4B40, 0x5686, 0x1158, 0x5687, 0x05A3,
- 0x5688, 0x43FB, 0x568A, 0x115A, 0x568C, 0x43FC, 0x568F, 0x115D,
- 0x5694, 0x115C, 0x5695, 0x3849, 0x5699, 0x1DE6, 0x569A, 0x384A,
- 0x569D, 0x43FD, 0x569E, 0x41AB, 0x569F, 0x4B41, 0x56A0, 0x115B,
- 0x56A2, 0x0CEF, 0x56A5, 0x115E, 0x56A6, 0x4B42, 0x56A8, 0x43FE,
- 0x56A9, 0x41AC, 0x56AC, 0x384B, 0x56AD, 0x384C, 0x56AE, 0x115F,
- 0x56B1, 0x384D, 0x56B2, 0x43FF, 0x56B3, 0x41AD, 0x56B4, 0x1161,
- 0x56B6, 0x1160, 0x56B7, 0x4B43, 0x56BC, 0x1163, 0x56C0, 0x1166,
- 0x56C1, 0x1164, 0x56C2, 0x1162, 0x56C3, 0x1165, 0x56C5, 0x4400,
- 0x56C8, 0x1167, 0x56C9, 0x384E, 0x56CA, 0x1E5A, 0x56CC, 0x4B44,
- 0x56CD, 0x4401, 0x56CE, 0x1168, 0x56CF, 0x4B45, 0x56D1, 0x1169,
- 0x56D3, 0x116A, 0x56D7, 0x116B, 0x56D8, 0x107C, 0x56D9, 0x4B46,
- 0x56DA, 0x0928, 0x56DB, 0x089B, 0x56DD, 0x384F, 0x56DE, 0x0573,
- 0x56DF, 0x4402, 0x56E0, 0x04BC, 0x56E1, 0x4B47, 0x56E3, 0x0B82,
- 0x56E4, 0x3850, 0x56E8, 0x4403, 0x56EB, 0x4B48, 0x56ED, 0x4B49,
- 0x56EE, 0x116C, 0x56F0, 0x0814, 0x56F1, 0x4B4A, 0x56F2, 0x0493,
- 0x56F3, 0x0A24, 0x56F6, 0x4404, 0x56F7, 0x4405, 0x56F9, 0x116D,
- 0x56FA, 0x077B, 0x56FD, 0x0803, 0x56FF, 0x116F, 0x5700, 0x116E,
- 0x5703, 0x0E30, 0x5704, 0x1170, 0x5707, 0x4B4B, 0x5708, 0x1172,
- 0x5709, 0x1171, 0x570A, 0x3851, 0x570B, 0x1173, 0x570C, 0x4B4C,
- 0x570D, 0x1174, 0x570F, 0x074D, 0x5712, 0x0502, 0x5713, 0x1175,
- 0x5715, 0x3852, 0x5716, 0x1177, 0x5718, 0x1176, 0x571A, 0x4B4D,
- 0x571B, 0x4B4E, 0x571C, 0x1179, 0x571D, 0x4B4F, 0x571F, 0x0C54,
- 0x5721, 0x3680, 0x5723, 0x3853, 0x5726, 0x117A, 0x5727, 0x0479,
- 0x5728, 0x084F, 0x5729, 0x4408, 0x572C, 0x4B50, 0x572D, 0x0713,
- 0x572E, 0x4B51, 0x572F, 0x3854, 0x5730, 0x0B8D, 0x5733, 0x3855,
- 0x5734, 0x3856, 0x5737, 0x117B, 0x5738, 0x117C, 0x573B, 0x117E,
- 0x573D, 0x4B52, 0x573E, 0x4B53, 0x5740, 0x117F, 0x5742, 0x0854,
- 0x5745, 0x440A, 0x5746, 0x440B, 0x5747, 0x06C9, 0x574A, 0x0E65,
- 0x574C, 0x3857, 0x574D, 0x440C, 0x574E, 0x117D, 0x574F, 0x1180,
- 0x5750, 0x0831, 0x5751, 0x07B5, 0x5759, 0x20E0, 0x575F, 0x4B54,
- 0x5761, 0x1184, 0x5764, 0x0815, 0x5765, 0x20E1, 0x5766, 0x0B71,
- 0x5768, 0x440E, 0x5769, 0x1181, 0x576A, 0x0BF6, 0x576B, 0x4B55,
- 0x576D, 0x4B56, 0x576F, 0x440F, 0x5770, 0x3858, 0x5773, 0x4410,
- 0x5774, 0x4411, 0x5775, 0x4412, 0x5777, 0x41AE, 0x577A, 0x4B57,
- 0x577B, 0x4413, 0x577C, 0x41AF, 0x577F, 0x1185, 0x5782, 0x0A28,
- 0x5783, 0x4B58, 0x5788, 0x1183, 0x5789, 0x1186, 0x578B, 0x0715,
- 0x578C, 0x3859, 0x5793, 0x1187, 0x5797, 0x4B59, 0x579A, 0x4416,
- 0x579C, 0x385A, 0x579D, 0x4417, 0x579E, 0x4418, 0x57A0, 0x1188,
- 0x57A2, 0x07B6, 0x57A3, 0x059E, 0x57A4, 0x118A, 0x57A8, 0x4419,
- 0x57AA, 0x118B, 0x57AC, 0x20E2, 0x57AE, 0x4B5A, 0x57B0, 0x118C,
- 0x57B3, 0x1189, 0x57B8, 0x385B, 0x57C0, 0x1182, 0x57C3, 0x118D,
- 0x57C6, 0x118E, 0x57C7, 0x20E4, 0x57C8, 0x20E3, 0x57CB, 0x0E92,
- 0x57CC, 0x441C, 0x57CE, 0x09D3, 0x57CF, 0x41B1, 0x57D2, 0x1190,
- 0x57D3, 0x1191, 0x57D4, 0x118F, 0x57D5, 0x4B5B, 0x57D6, 0x1193,
- 0x57D7, 0x441A, 0x57DC, 0x0CEE, 0x57DE, 0x441F, 0x57DF, 0x04AC,
- 0x57E0, 0x0DC8, 0x57E3, 0x1194, 0x57E4, 0x41B2, 0x57E6, 0x385C,
- 0x57E7, 0x4B5C, 0x57ED, 0x385D, 0x57F0, 0x4420, 0x57F4, 0x09E5,
- 0x57F5, 0x385E, 0x57F6, 0x385F, 0x57F7, 0x08E5, 0x57F8, 0x4422,
- 0x57F9, 0x0D13, 0x57FA, 0x062C, 0x57FB, 0x4423, 0x57FC, 0x085B,
- 0x57FD, 0x4424, 0x57FF, 0x3860, 0x5800, 0x0E87, 0x5802, 0x0C8A,
- 0x5804, 0x4425, 0x5805, 0x074E, 0x5806, 0x0B2F, 0x5809, 0x3861,
- 0x580A, 0x1192, 0x580B, 0x1195, 0x580D, 0x4B5D, 0x5815, 0x0B24,
- 0x5819, 0x1196, 0x581D, 0x1197, 0x581E, 0x4426, 0x5820, 0x3862,
- 0x5821, 0x1199, 0x5824, 0x0C05, 0x5826, 0x4B5E, 0x5827, 0x4427,
- 0x582A, 0x05EA, 0x582F, 0x1D32, 0x5830, 0x0503, 0x5831, 0x0E43,
- 0x5832, 0x3863, 0x5834, 0x09D4, 0x5835, 0x0C42, 0x5839, 0x4428,
- 0x583A, 0x0856, 0x583D, 0x119F, 0x5840, 0x0E0D, 0x5841, 0x0FA5,
- 0x5849, 0x442A, 0x584A, 0x0574, 0x584B, 0x119B, 0x584C, 0x442B,
- 0x584D, 0x4B5F, 0x584F, 0x4B60, 0x5851, 0x0ABC, 0x5852, 0x119E,
- 0x5854, 0x0C5D, 0x5857, 0x0C43, 0x5858, 0x0C5E, 0x5859, 0x0D4D,
- 0x585A, 0x0BE9, 0x585E, 0x0839, 0x585F, 0x4B61, 0x5861, 0x1E47,
- 0x5862, 0x119A, 0x5864, 0x41B3, 0x5867, 0x442C, 0x5869, 0x0518,
- 0x586B, 0x0C30, 0x586D, 0x4B62, 0x5870, 0x119C, 0x5872, 0x1198,
- 0x5875, 0x0A16, 0x5879, 0x11A0, 0x587C, 0x3864, 0x587E, 0x0958,
- 0x587F, 0x4B63, 0x5880, 0x3865, 0x5881, 0x4B64, 0x5883, 0x06A5,
- 0x5885, 0x11A1, 0x5889, 0x41B4, 0x588A, 0x442D, 0x588B, 0x442E,
- 0x588D, 0x442F, 0x588F, 0x4430, 0x5890, 0x4431, 0x5893, 0x0E38,
- 0x5894, 0x4432, 0x5897, 0x0AFF, 0x5898, 0x4B65, 0x589C, 0x0BE2,
- 0x589D, 0x4433, 0x589E, 0x20E7, 0x589F, 0x11A3, 0x58A8, 0x0E7D,
- 0x58A9, 0x3866, 0x58AA, 0x4434, 0x58AB, 0x11A4, 0x58AE, 0x11A9,
- 0x58B1, 0x4435, 0x58B2, 0x20E8, 0x58B3, 0x0DFF, 0x58B8, 0x11A8,
- 0x58B9, 0x11A2, 0x58BA, 0x11A5, 0x58BB, 0x11A7, 0x58BC, 0x4B66,
- 0x58BE, 0x0816, 0x58C1, 0x0E19, 0x58C3, 0x4437, 0x58C5, 0x11AA,
- 0x58C7, 0x0B83, 0x58CA, 0x0575, 0x58CC, 0x09D5, 0x58CD, 0x4438,
- 0x58CE, 0x3867, 0x58D0, 0x3868, 0x58D1, 0x11AC, 0x58D2, 0x41B6,
- 0x58D3, 0x11AB, 0x58D4, 0x3869, 0x58D5, 0x07FA, 0x58D7, 0x11AD,
- 0x58D8, 0x11AF, 0x58D9, 0x11AE, 0x58DA, 0x386A, 0x58DC, 0x11B1,
- 0x58DE, 0x11A6, 0x58DF, 0x11B3, 0x58E0, 0x41B7, 0x58E2, 0x4439,
- 0x58E4, 0x11B2, 0x58E5, 0x11B0, 0x58E9, 0x386B, 0x58EB, 0x089C,
- 0x58EC, 0x0A17, 0x58EE, 0x0AD6, 0x58EF, 0x11B4, 0x58F0, 0x0A60,
- 0x58F1, 0x04B1, 0x58F2, 0x0D1A, 0x58F3, 0x443A, 0x58F4, 0x443B,
- 0x58F7, 0x0BF7, 0x58F9, 0x11B6, 0x58FA, 0x11B5, 0x58FB, 0x11B7,
- 0x58FC, 0x11B8, 0x58FD, 0x11B9, 0x5902, 0x11BA, 0x5905, 0x443C,
- 0x5906, 0x443D, 0x5909, 0x0E21, 0x590A, 0x11BB, 0x590B, 0x20E9,
- 0x590C, 0x386C, 0x590D, 0x443E, 0x590F, 0x0546, 0x5910, 0x11BC,
- 0x5914, 0x443F, 0x5915, 0x0F26, 0x5916, 0x058E, 0x5918, 0x10DE,
- 0x5919, 0x0952, 0x591A, 0x0B1F, 0x591B, 0x11BD, 0x591C, 0x0EF7,
- 0x591F, 0x4B67, 0x5922, 0x0EC0, 0x5923, 0x4B68, 0x5924, 0x386D,
- 0x5925, 0x11BF, 0x5927, 0x0B47, 0x5929, 0x0C31, 0x592A, 0x0B20,
- 0x592B, 0x0DC9, 0x592C, 0x11C0, 0x592D, 0x11C1, 0x592E, 0x051D,
- 0x592F, 0x386E, 0x5931, 0x08E6, 0x5932, 0x11C2, 0x5937, 0x0494,
- 0x5938, 0x11C3, 0x5939, 0x3725, 0x593D, 0x4442, 0x593E, 0x11C4,
- 0x5944, 0x0504, 0x5946, 0x4444, 0x5947, 0x062D, 0x5948, 0x0CB8,
- 0x5949, 0x0E44, 0x594E, 0x11C8, 0x594F, 0x0AD7, 0x5950, 0x11C7,
- 0x5951, 0x0716, 0x5953, 0x20EA, 0x5954, 0x0E89, 0x5955, 0x11C6,
- 0x5957, 0x0C5F, 0x5958, 0x11CA, 0x5959, 0x4B69, 0x595A, 0x11C9,
- 0x595B, 0x20EB, 0x595D, 0x20EC, 0x595F, 0x4447, 0x5960, 0x11CC,
- 0x5961, 0x386F, 0x5962, 0x11CB, 0x5963, 0x20ED, 0x5965, 0x051E,
- 0x5967, 0x11CD, 0x5968, 0x0991, 0x5969, 0x11CF, 0x596A, 0x0B63,
- 0x596C, 0x11CE, 0x596D, 0x3870, 0x596E, 0x0E03, 0x5973, 0x0981,
- 0x5974, 0x0C55, 0x5975, 0x4449, 0x5976, 0x444A, 0x5978, 0x11D0,
- 0x5979, 0x4B6A, 0x597C, 0x444B, 0x597D, 0x07B7, 0x5981, 0x11D1,
- 0x5982, 0x0CD7, 0x5983, 0x0D72, 0x5984, 0x0EDD, 0x598A, 0x0CDB,
- 0x598B, 0x41B9, 0x598D, 0x11DA, 0x5992, 0x41BA, 0x5993, 0x0652,
- 0x5996, 0x0F2F, 0x5997, 0x4B6B, 0x5999, 0x0EBB, 0x599B, 0x1239,
- 0x599D, 0x11D2, 0x599F, 0x444C, 0x59A3, 0x11D5, 0x59A4, 0x20EE,
- 0x59A5, 0x0B25, 0x59A8, 0x0E66, 0x59AC, 0x0C44, 0x59AE, 0x444D,
- 0x59AF, 0x4B6C, 0x59B2, 0x11D6, 0x59B3, 0x4B6D, 0x59B9, 0x0E93,
- 0x59BA, 0x20EF, 0x59BB, 0x083A, 0x59BC, 0x444E, 0x59BE, 0x0992,
- 0x59C3, 0x41BB, 0x59C6, 0x11D7, 0x59C8, 0x444F, 0x59C9, 0x089E,
- 0x59CA, 0x3871, 0x59CB, 0x089D, 0x59CD, 0x4450, 0x59D0, 0x047D,
- 0x59D1, 0x077C, 0x59D2, 0x3872, 0x59D3, 0x0A4F, 0x59D4, 0x0495,
- 0x59D9, 0x11DB, 0x59DA, 0x11DC, 0x59DC, 0x11D9, 0x59DD, 0x3873,
- 0x59DE, 0x4451, 0x59DF, 0x4B6E, 0x59E3, 0x3874, 0x59E4, 0x3875,
- 0x59E5, 0x04DA, 0x59E6, 0x05EB, 0x59E7, 0x4452, 0x59E8, 0x11D8,
- 0x59EA, 0x0ED1, 0x59EB, 0x0DA3, 0x59EC, 0x36AD, 0x59EE, 0x4453,
- 0x59F1, 0x4B6F, 0x59F6, 0x046C, 0x59F8, 0x4B70, 0x59FB, 0x04BD,
- 0x59FF, 0x089F, 0x5A01, 0x0496, 0x5A03, 0x0467, 0x5A04, 0x3876,
- 0x5A09, 0x11E1, 0x5A0C, 0x3877, 0x5A0D, 0x4457, 0x5A11, 0x11DF,
- 0x5A13, 0x41BC, 0x5A17, 0x4458, 0x5A18, 0x0EC8, 0x5A1A, 0x11E2,
- 0x5A1B, 0x35C1, 0x5A1C, 0x11E0, 0x5A1F, 0x11DE, 0x5A20, 0x09F7,
- 0x5A23, 0x3878, 0x5A25, 0x11DD, 0x5A27, 0x4459, 0x5A29, 0x0E2A,
- 0x5A2D, 0x445A, 0x5A2F, 0x0798, 0x5A35, 0x11E6, 0x5A36, 0x11E7,
- 0x5A3C, 0x0993, 0x5A40, 0x11E3, 0x5A41, 0x0FD2, 0x5A46, 0x0D02,
- 0x5A47, 0x3879, 0x5A49, 0x11E5, 0x5A55, 0x387A, 0x5A5A, 0x0817,
- 0x5A62, 0x11E8, 0x5A63, 0x387B, 0x5A65, 0x445B, 0x5A66, 0x0DCA,
- 0x5A67, 0x41BD, 0x5A6A, 0x11E9, 0x5A6C, 0x11E4, 0x5A6D, 0x387C,
- 0x5A77, 0x41BE, 0x5A7A, 0x445C, 0x5A7E, 0x387D, 0x5A7F, 0x0EC7,
- 0x5A84, 0x41BF, 0x5A8B, 0x445D, 0x5A92, 0x0D14, 0x5A9A, 0x11EA,
- 0x5A9B, 0x0DA4, 0x5A9C, 0x445E, 0x5A9E, 0x387E, 0x5A9F, 0x445F,
- 0x5AA0, 0x4460, 0x5AA2, 0x4461, 0x5AA7, 0x387F, 0x5AAC, 0x3880,
- 0x5AB1, 0x4462, 0x5AB2, 0x4B71, 0x5AB3, 0x3881, 0x5AB5, 0x4463,
- 0x5AB8, 0x4B72, 0x5ABA, 0x4464, 0x5ABC, 0x11EB, 0x5ABD, 0x11EF,
- 0x5ABE, 0x11EC, 0x5ABF, 0x4465, 0x5AC1, 0x0547, 0x5AC2, 0x11EE,
- 0x5AC4, 0x41C0, 0x5AC9, 0x08E7, 0x5ACB, 0x11ED, 0x5ACC, 0x074F,
- 0x5AD0, 0x11FB, 0x5AD6, 0x11F4, 0x5AD7, 0x11F1, 0x5ADA, 0x4466,
- 0x5ADC, 0x4467, 0x5AE0, 0x3882, 0x5AE1, 0x0BA2, 0x5AE3, 0x11F0,
- 0x5AE5, 0x4468, 0x5AE6, 0x11F2, 0x5AE9, 0x11F3, 0x5AEA, 0x4B73,
- 0x5AEE, 0x446A, 0x5AF0, 0x4469, 0x5AF5, 0x446B, 0x5AF6, 0x4B74,
- 0x5AFA, 0x11F5, 0x5AFB, 0x11F6, 0x5B00, 0x3883, 0x5B08, 0x446C,
- 0x5B09, 0x062E, 0x5B0B, 0x11F8, 0x5B0C, 0x11F7, 0x5B16, 0x11F9,
- 0x5B17, 0x446D, 0x5B19, 0x3884, 0x5B1B, 0x4B75, 0x5B1D, 0x4B76,
- 0x5B21, 0x4B77, 0x5B22, 0x09D6, 0x5B25, 0x3885, 0x5B2A, 0x11FC,
- 0x5B2C, 0x0BF8, 0x5B2D, 0x3886, 0x5B30, 0x04E7, 0x5B32, 0x11FA,
- 0x5B34, 0x446E, 0x5B36, 0x11FD, 0x5B38, 0x4B78, 0x5B3E, 0x11FE,
- 0x5B40, 0x1201, 0x5B41, 0x3887, 0x5B43, 0x11FF, 0x5B45, 0x1200,
- 0x5B4C, 0x446F, 0x5B50, 0x08A0, 0x5B51, 0x1202, 0x5B52, 0x4470,
- 0x5B54, 0x07B8, 0x5B55, 0x1203, 0x5B56, 0x20F0, 0x5B57, 0x08C8,
- 0x5B58, 0x0B18, 0x5B5A, 0x1204, 0x5B5B, 0x1205, 0x5B5C, 0x08A8,
- 0x5B5D, 0x07B9, 0x5B5F, 0x0EDE, 0x5B63, 0x0642, 0x5B64, 0x077D,
- 0x5B65, 0x1206, 0x5B66, 0x05B6, 0x5B68, 0x4471, 0x5B69, 0x1207,
- 0x5B6B, 0x0B19, 0x5B6F, 0x4472, 0x5B70, 0x1208, 0x5B71, 0x1230,
- 0x5B73, 0x1209, 0x5B75, 0x120A, 0x5B76, 0x3728, 0x5B78, 0x120B,
- 0x5B7A, 0x120D, 0x5B7C, 0x3888, 0x5B7D, 0x41C2, 0x5B7E, 0x3889,
- 0x5B7F, 0x388A, 0x5B80, 0x120E, 0x5B81, 0x4473, 0x5B82, 0x3610,
- 0x5B83, 0x120F, 0x5B84, 0x4474, 0x5B85, 0x0B50, 0x5B87, 0x04C9,
- 0x5B88, 0x0915, 0x5B89, 0x0486, 0x5B8A, 0x388B, 0x5B8B, 0x0AD9,
- 0x5B8C, 0x05EC, 0x5B8D, 0x08E1, 0x5B8F, 0x07BA, 0x5B93, 0x41C3,
- 0x5B95, 0x0C60, 0x5B96, 0x4476, 0x5B97, 0x092B, 0x5B98, 0x05ED,
- 0x5B99, 0x0BA6, 0x5B9A, 0x0C06, 0x5B9B, 0x047C, 0x5B9C, 0x0653,
- 0x5B9D, 0x0E45, 0x5B9F, 0x08EE, 0x5BA2, 0x066C, 0x5BA3, 0x0A8F,
- 0x5BA4, 0x08E8, 0x5BA5, 0x0F12, 0x5BA6, 0x1210, 0x5BAC, 0x4477,
- 0x5BAE, 0x0676, 0x5BB0, 0x083B, 0x5BB3, 0x0590, 0x5BB4, 0x0505,
- 0x5BB5, 0x0994, 0x5BB6, 0x0548, 0x5BB7, 0x4B79, 0x5BB8, 0x1211,
- 0x5BB9, 0x0F30, 0x5BBF, 0x0953, 0x5BC0, 0x20F1, 0x5BC2, 0x0910,
- 0x5BC3, 0x1212, 0x5BC4, 0x062F, 0x5BC5, 0x0CAA, 0x5BC6, 0x0EB5,
- 0x5BC7, 0x1213, 0x5BC9, 0x1214, 0x5BCC, 0x0DCB, 0x5BCE, 0x447A,
- 0x5BD0, 0x1216, 0x5BD2, 0x05E4, 0x5BD3, 0x06EF, 0x5BD4, 0x1215,
- 0x5BD6, 0x447B, 0x5BD7, 0x4B7A, 0x5BD8, 0x20F3, 0x5BDB, 0x05EE,
- 0x5BDD, 0x09F8, 0x5BDE, 0x121A, 0x5BDF, 0x086F, 0x5BE0, 0x4B7B,
- 0x5BE1, 0x0549, 0x5BE2, 0x1219, 0x5BE4, 0x1217, 0x5BE5, 0x121B,
- 0x5BE6, 0x1218, 0x5BE7, 0x0CE1, 0x5BE8, 0x148E, 0x5BE9, 0x09F9,
- 0x5BEB, 0x121C, 0x5BEC, 0x4F4E, 0x5BEE, 0x0F88, 0x5BF0, 0x121D,
- 0x5BF1, 0x447E, 0x5BF3, 0x121F, 0x5BF5, 0x0BBC, 0x5BF6, 0x121E,
- 0x5BF8, 0x0A47, 0x5BFA, 0x08C9, 0x5BFD, 0x447F, 0x5BFE, 0x0B30,
- 0x5BFF, 0x0923, 0x5C01, 0x0DE7, 0x5C02, 0x0A90, 0x5C03, 0x4481,
- 0x5C04, 0x08F9, 0x5C05, 0x1220, 0x5C06, 0x0995, 0x5C07, 0x1221,
- 0x5C08, 0x1222, 0x5C09, 0x0497, 0x5C0A, 0x0B1A, 0x5C0B, 0x0A18,
- 0x5C0D, 0x1223, 0x5C0E, 0x0C8B, 0x5C0F, 0x0996, 0x5C11, 0x0997,
- 0x5C12, 0x41C4, 0x5C13, 0x1224, 0x5C14, 0x372A, 0x5C16, 0x0A91,
- 0x5C19, 0x360B, 0x5C1A, 0x0998, 0x5C1E, 0x20F5, 0x5C1F, 0x4B7C,
- 0x5C20, 0x1225, 0x5C22, 0x1226, 0x5C23, 0x388C, 0x5C24, 0x0EEC,
- 0x5C28, 0x1227, 0x5C29, 0x4482, 0x5C2A, 0x4B7D, 0x5C2B, 0x388D,
- 0x5C2C, 0x4B7E, 0x5C2D, 0x06BE, 0x5C30, 0x388E, 0x5C31, 0x092C,
- 0x5C36, 0x4B7F, 0x5C38, 0x1228, 0x5C39, 0x1229, 0x5C3A, 0x0908,
- 0x5C3B, 0x09F2, 0x5C3C, 0x0CCC, 0x5C3D, 0x0A1A, 0x5C3E, 0x0D8C,
- 0x5C3F, 0x0CD8, 0x5C40, 0x06C1, 0x5C41, 0x122A, 0x5C45, 0x0689,
- 0x5C46, 0x122B, 0x5C48, 0x06F6, 0x5C4A, 0x0CA7, 0x5C4B, 0x0530,
- 0x5C4D, 0x08A1, 0x5C4E, 0x122C, 0x5C4F, 0x122F, 0x5C50, 0x122E,
- 0x5C51, 0x06F5, 0x5C53, 0x122D, 0x5C55, 0x0C32, 0x5C59, 0x4B80,
- 0x5C5B, 0x1E92, 0x5C5C, 0x4B81, 0x5C5E, 0x0B10, 0x5C5F, 0x4484,
- 0x5C60, 0x0C45, 0x5C61, 0x08F4, 0x5C62, 0x1E0D, 0x5C63, 0x388F,
- 0x5C64, 0x0ADA, 0x5C65, 0x0F64, 0x5C67, 0x4485, 0x5C68, 0x4486,
- 0x5C69, 0x3890, 0x5C6C, 0x1231, 0x5C6D, 0x4B82, 0x5C6E, 0x1232,
- 0x5C6F, 0x0CAE, 0x5C70, 0x4487, 0x5C71, 0x0881, 0x5C76, 0x1234,
- 0x5C79, 0x1235, 0x5C7A, 0x41C7, 0x5C7C, 0x3891, 0x5C88, 0x448C,
- 0x5C8A, 0x448D, 0x5C8C, 0x1236, 0x5C8F, 0x41C8, 0x5C90, 0x0630,
- 0x5C91, 0x1237, 0x5C94, 0x1238, 0x5C9F, 0x41C9, 0x5CA0, 0x4491,
- 0x5CA1, 0x052C, 0x5CA2, 0x4492, 0x5CA3, 0x41CA, 0x5CA6, 0x20F6,
- 0x5CA7, 0x4493, 0x5CA8, 0x0ABD, 0x5CA9, 0x0620, 0x5CAA, 0x41CB,
- 0x5CAB, 0x123A, 0x5CAC, 0x0EB4, 0x5CAD, 0x4495, 0x5CB1, 0x0B32,
- 0x5CB3, 0x05B7, 0x5CB5, 0x4496, 0x5CB6, 0x123C, 0x5CB7, 0x123E,
- 0x5CB8, 0x061B, 0x5CBA, 0x20F7, 0x5CBB, 0x123B, 0x5CBC, 0x123D,
- 0x5CBE, 0x1240, 0x5CC5, 0x123F, 0x5CC7, 0x1241, 0x5CC9, 0x4498,
- 0x5CCB, 0x3892, 0x5CD0, 0x41CC, 0x5CD2, 0x3893, 0x5CD9, 0x1242,
- 0x5CDD, 0x4B83, 0x5CE0, 0x0C95, 0x5CE1, 0x06A6, 0x5CE6, 0x372C,
- 0x5CE8, 0x0565, 0x5CE9, 0x1243, 0x5CEA, 0x1248, 0x5CED, 0x1246,
- 0x5CEF, 0x0E47, 0x5CF0, 0x0E46, 0x5CF4, 0x3894, 0x5CF5, 0x20F8,
- 0x5CF6, 0x0C61, 0x5CFA, 0x1245, 0x5CFB, 0x095E, 0x5CFD, 0x1244,
- 0x5D01, 0x4B84, 0x5D06, 0x449B, 0x5D07, 0x0A38, 0x5D0B, 0x1249,
- 0x5D0D, 0x41CE, 0x5D0E, 0x085A, 0x5D10, 0x449C, 0x5D11, 0x124F,
- 0x5D14, 0x1250, 0x5D15, 0x124A, 0x5D16, 0x0591, 0x5D17, 0x124B,
- 0x5D18, 0x1254, 0x5D19, 0x1253, 0x5D1A, 0x1252, 0x5D1B, 0x124E,
- 0x5D1D, 0x449E, 0x5D1F, 0x124D, 0x5D20, 0x449F, 0x5D22, 0x1251,
- 0x5D24, 0x3895, 0x5D26, 0x3896, 0x5D27, 0x20F9, 0x5D29, 0x0E48,
- 0x5D2B, 0x449D, 0x5D31, 0x44A0, 0x5D34, 0x4B85, 0x5D39, 0x44A1,
- 0x5D3D, 0x4B86, 0x5D42, 0x20FC, 0x5D43, 0x3897, 0x5D46, 0x3898,
- 0x5D47, 0x41CF, 0x5D4A, 0x3899, 0x5D4B, 0x1258, 0x5D4C, 0x1255,
- 0x5D4E, 0x1257, 0x5D50, 0x0F5C, 0x5D52, 0x1256, 0x5D53, 0x20FA,
- 0x5D59, 0x4B87, 0x5D5C, 0x124C, 0x5D61, 0x44A3, 0x5D69, 0x0A39,
- 0x5D6A, 0x44A4, 0x5D6C, 0x1259, 0x5D6D, 0x20FD, 0x5D6F, 0x0827,
- 0x5D70, 0x44A6, 0x5D73, 0x125A, 0x5D76, 0x125B, 0x5D7E, 0x4B88,
- 0x5D81, 0x41D0, 0x5D82, 0x125E, 0x5D83, 0x4B89, 0x5D84, 0x125D,
- 0x5D87, 0x125C, 0x5D88, 0x44A9, 0x5D8B, 0x0C62, 0x5D8C, 0x1247,
- 0x5D90, 0x1264, 0x5D92, 0x389A, 0x5D94, 0x389B, 0x5D97, 0x44AB,
- 0x5D99, 0x389C, 0x5D9D, 0x1260, 0x5DA0, 0x389D, 0x5DA2, 0x125F,
- 0x5DA4, 0x41D1, 0x5DA7, 0x41D2, 0x5DAC, 0x1261, 0x5DAE, 0x1262,
- 0x5DB0, 0x44AC, 0x5DB2, 0x3C2D, 0x5DB4, 0x44AD, 0x5DB7, 0x1265,
- 0x5DB8, 0x20FE, 0x5DB9, 0x20FF, 0x5DBA, 0x0FAE, 0x5DBC, 0x1266,
- 0x5DBD, 0x1263, 0x5DC7, 0x4B8A, 0x5DC9, 0x1267, 0x5DCB, 0x41D3,
- 0x5DCC, 0x061C, 0x5DCD, 0x1268, 0x5DD0, 0x2100, 0x5DD1, 0x44AF,
- 0x5DD2, 0x126A, 0x5DD3, 0x1269, 0x5DD6, 0x126B, 0x5DD7, 0x44B0,
- 0x5DD8, 0x389E, 0x5DDB, 0x126C, 0x5DDD, 0x0A92, 0x5DDE, 0x092D,
- 0x5DE0, 0x389F, 0x5DE1, 0x096E, 0x5DE2, 0x3432, 0x5DE3, 0x0AE5,
- 0x5DE4, 0x44B2, 0x5DE5, 0x07BB, 0x5DE6, 0x0828, 0x5DE7, 0x07BC,
- 0x5DE8, 0x068A, 0x5DE9, 0x44B3, 0x5DEB, 0x126D, 0x5DEE, 0x0829,
- 0x5DF1, 0x077E, 0x5DF2, 0x126E, 0x5DF3, 0x0EB2, 0x5DF4, 0x0CF9,
- 0x5DF5, 0x126F, 0x5DF7, 0x07BD, 0x5DF8, 0x38A0, 0x5DF9, 0x4B8B,
- 0x5DFB, 0x05E8, 0x5DFD, 0x0B65, 0x5DFE, 0x06CA, 0x5DFF, 0x35E2,
- 0x5E00, 0x38A1, 0x5E02, 0x08A2, 0x5E03, 0x0DCD, 0x5E06, 0x0D55,
- 0x5E0B, 0x1270, 0x5E0C, 0x0631, 0x5E11, 0x1273, 0x5E12, 0x38A2,
- 0x5E14, 0x38A3, 0x5E15, 0x38A4, 0x5E16, 0x0BBD, 0x5E18, 0x38A5,
- 0x5E19, 0x1272, 0x5E1A, 0x1271, 0x5E1B, 0x1274, 0x5E1D, 0x0C07,
- 0x5E1F, 0x44B7, 0x5E25, 0x0A29, 0x5E28, 0x4B8C, 0x5E2B, 0x08A3,
- 0x5E2D, 0x0A6E, 0x5E2E, 0x38A6, 0x5E2F, 0x0B33, 0x5E30, 0x063C,
- 0x5E32, 0x4B8D, 0x5E33, 0x0BBE, 0x5E35, 0x4B8E, 0x5E36, 0x1275,
- 0x5E37, 0x1276, 0x5E38, 0x09D7, 0x5E3D, 0x0E67, 0x5E3E, 0x44B8,
- 0x5E40, 0x1279, 0x5E43, 0x1278, 0x5E44, 0x1277, 0x5E45, 0x0DEF,
- 0x5E47, 0x1280, 0x5E49, 0x44B9, 0x5E4C, 0x0E88, 0x5E4E, 0x127A,
- 0x5E54, 0x127C, 0x5E55, 0x0E99, 0x5E56, 0x44BB, 0x5E57, 0x127B,
- 0x5E58, 0x38A7, 0x5E5B, 0x4B8F, 0x5E5E, 0x41D4, 0x5E5F, 0x127D,
- 0x5E61, 0x0D3C, 0x5E62, 0x127E, 0x5E63, 0x0E0E, 0x5E64, 0x127F,
- 0x5E68, 0x4B90, 0x5E6A, 0x4B91, 0x5E6B, 0x38A8, 0x5E6C, 0x38A9,
- 0x5E6D, 0x44BD, 0x5E6E, 0x44BE, 0x5E72, 0x05EF, 0x5E73, 0x0E0F,
- 0x5E74, 0x0CE5, 0x5E75, 0x1281, 0x5E76, 0x1282, 0x5E77, 0x4B92,
- 0x5E78, 0x07BE, 0x5E79, 0x05F0, 0x5E7A, 0x1283, 0x5E7B, 0x076C,
- 0x5E7C, 0x0F2E, 0x5E7D, 0x0F13, 0x5E7E, 0x0632, 0x5E7F, 0x1285,
- 0x5E80, 0x4B93, 0x5E81, 0x0BBF, 0x5E83, 0x07BF, 0x5E84, 0x0999,
- 0x5E87, 0x0D73, 0x5E8A, 0x099A, 0x5E8B, 0x4B94, 0x5E8F, 0x0982,
- 0x5E95, 0x0C08, 0x5E96, 0x0E49, 0x5E97, 0x0C33, 0x5E99, 0x36B0,
- 0x5E9A, 0x07C0, 0x5E9C, 0x0DCE, 0x5EA0, 0x1286, 0x5EA5, 0x44C0,
- 0x5EA6, 0x0C53, 0x5EA7, 0x0832, 0x5EA8, 0x38AA, 0x5EAA, 0x38AB,
- 0x5EAB, 0x077F, 0x5EAC, 0x44C1, 0x5EAD, 0x0C09, 0x5EB3, 0x4B95,
- 0x5EB5, 0x0487, 0x5EB6, 0x0978, 0x5EB7, 0x07C1, 0x5EB8, 0x0F31,
- 0x5EB9, 0x44C2, 0x5EBD, 0x4B96, 0x5EBE, 0x38AC, 0x5EBF, 0x38AD,
- 0x5EC1, 0x1287, 0x5EC2, 0x1288, 0x5EC3, 0x0D07, 0x5EC6, 0x44C3,
- 0x5EC8, 0x1289, 0x5EC9, 0x0FBF, 0x5ECA, 0x0FD3, 0x5ECB, 0x3C1E,
- 0x5ECF, 0x128B, 0x5ED0, 0x128A, 0x5ED1, 0x4B97, 0x5ED2, 0x38AF,
- 0x5ED3, 0x05A5, 0x5ED4, 0x4B98, 0x5ED5, 0x4B99, 0x5ED6, 0x128C,
- 0x5ED9, 0x44C4, 0x5EDA, 0x128F, 0x5EDB, 0x1290, 0x5EDD, 0x128E,
- 0x5EDF, 0x0DB2, 0x5EE0, 0x099B, 0x5EE1, 0x1292, 0x5EE2, 0x1291,
- 0x5EE3, 0x128D, 0x5EE8, 0x1293, 0x5EE9, 0x1294, 0x5EEC, 0x1295,
- 0x5EF0, 0x1298, 0x5EF1, 0x1296, 0x5EF3, 0x1297, 0x5EF4, 0x1299,
- 0x5EF6, 0x0506, 0x5EF7, 0x0C0A, 0x5EF8, 0x129A, 0x5EF9, 0x41D5,
- 0x5EFA, 0x0750, 0x5EFB, 0x0576, 0x5EFC, 0x0CEC, 0x5EFD, 0x44C6,
- 0x5EFE, 0x129B, 0x5EFF, 0x0CD3, 0x5F00, 0x41D6, 0x5F01, 0x0E2B,
- 0x5F02, 0x41D7, 0x5F03, 0x129C, 0x5F04, 0x0FD4, 0x5F07, 0x38B0,
- 0x5F08, 0x44C7, 0x5F09, 0x129D, 0x5F0A, 0x0E10, 0x5F0B, 0x12A0,
- 0x5F0C, 0x0FFA, 0x5F0D, 0x100A, 0x5F0E, 0x38B1, 0x5F0F, 0x08DC,
- 0x5F10, 0x0CCD, 0x5F11, 0x12A1, 0x5F13, 0x0677, 0x5F14, 0x0BC0,
- 0x5F15, 0x04BE, 0x5F16, 0x12A2, 0x5F17, 0x0DF6, 0x5F18, 0x07C2,
- 0x5F1B, 0x0B8E, 0x5F1C, 0x38B2, 0x5F1D, 0x38B3, 0x5F1E, 0x44C9,
- 0x5F1F, 0x0C0B, 0x5F21, 0x2101, 0x5F22, 0x38B4, 0x5F23, 0x41D8,
- 0x5F25, 0x0EFB, 0x5F26, 0x076D, 0x5F27, 0x0780, 0x5F28, 0x38B5,
- 0x5F29, 0x12A3, 0x5F2D, 0x12A4, 0x5F2F, 0x12AA, 0x5F31, 0x0911,
- 0x5F34, 0x2102, 0x5F35, 0x0BC1, 0x5F36, 0x38B6, 0x5F37, 0x06A7,
- 0x5F38, 0x12A5, 0x5F3A, 0x3598, 0x5F3B, 0x38B7, 0x5F3C, 0x0D9D,
- 0x5F3D, 0x41D9, 0x5F3E, 0x0B84, 0x5F40, 0x38B8, 0x5F41, 0x12A6,
- 0x5F45, 0x20B2, 0x5F47, 0x44CA, 0x5F48, 0x12A7, 0x5F4A, 0x06A8,
- 0x5F4C, 0x12A8, 0x5F4D, 0x4B9A, 0x5F4E, 0x12A9, 0x5F50, 0x38B9,
- 0x5F51, 0x12AB, 0x5F53, 0x0C70, 0x5F54, 0x41DA, 0x5F56, 0x12AC,
- 0x5F57, 0x12AD, 0x5F58, 0x38BA, 0x5F59, 0x12AE, 0x5F5C, 0x129F,
- 0x5F5D, 0x129E, 0x5F61, 0x12AF, 0x5F62, 0x0717, 0x5F63, 0x44CB,
- 0x5F64, 0x38BB, 0x5F65, 0x36AC, 0x5F66, 0x0D99, 0x5F67, 0x2103,
- 0x5F69, 0x083C, 0x5F6A, 0x0DA9, 0x5F6B, 0x0BC2, 0x5F6C, 0x0DBD,
- 0x5F6D, 0x12B0, 0x5F70, 0x099C, 0x5F71, 0x04E8, 0x5F72, 0x44CC,
- 0x5F73, 0x12B1, 0x5F77, 0x12B2, 0x5F79, 0x0EFE, 0x5F7C, 0x0D74,
- 0x5F7D, 0x41DB, 0x5F7E, 0x44CD, 0x5F7F, 0x12B5, 0x5F80, 0x051F,
- 0x5F81, 0x0A50, 0x5F82, 0x12B4, 0x5F83, 0x12B3, 0x5F84, 0x0718,
- 0x5F85, 0x0B34, 0x5F87, 0x12B9, 0x5F88, 0x12B7, 0x5F89, 0x38BC,
- 0x5F8A, 0x12B6, 0x5F8B, 0x0F6F, 0x5F8C, 0x0799, 0x5F8F, 0x44CE,
- 0x5F90, 0x0983, 0x5F91, 0x12B8, 0x5F92, 0x0C46, 0x5F93, 0x0948,
- 0x5F97, 0x0C98, 0x5F98, 0x12BC, 0x5F99, 0x12BB, 0x5F9C, 0x38BD,
- 0x5F9E, 0x12BA, 0x5FA0, 0x12BD, 0x5FA1, 0x079A, 0x5FA2, 0x44CF,
- 0x5FA4, 0x38BF, 0x5FA7, 0x38BE, 0x5FA8, 0x12BE, 0x5FA9, 0x0DEE,
- 0x5FAA, 0x0965, 0x5FAC, 0x4B9B, 0x5FAD, 0x12BF, 0x5FAE, 0x0D8D,
- 0x5FAF, 0x38C0, 0x5FB3, 0x0C99, 0x5FB4, 0x0BC3, 0x5FB5, 0x3438,
- 0x5FB7, 0x2104, 0x5FB8, 0x38C1, 0x5FB9, 0x0C2A, 0x5FBC, 0x12C0,
- 0x5FBD, 0x0645, 0x5FC3, 0x09FA, 0x5FC4, 0x38C2, 0x5FC5, 0x0D9E,
- 0x5FC7, 0x44D0, 0x5FC9, 0x38C3, 0x5FCB, 0x44D1, 0x5FCC, 0x0633,
- 0x5FCD, 0x0CDC, 0x5FD2, 0x44D2, 0x5FD3, 0x44D3, 0x5FD4, 0x44D4,
- 0x5FD6, 0x12C1, 0x5FD7, 0x08A4, 0x5FD8, 0x0E68, 0x5FD9, 0x0E69,
- 0x5FDC, 0x0520, 0x5FDD, 0x12C6, 0x5FDE, 0x2105, 0x5FE0, 0x0BA7,
- 0x5FE1, 0x38C4, 0x5FE2, 0x44D5, 0x5FE4, 0x12C3, 0x5FE9, 0x38C5,
- 0x5FEA, 0x4B9C, 0x5FEB, 0x0577, 0x5FED, 0x38C6, 0x5FEE, 0x44D6,
- 0x5FEF, 0x44D7, 0x5FF0, 0x12F6, 0x5FF1, 0x12C5, 0x5FF3, 0x44D8,
- 0x5FF5, 0x0CE6, 0x5FF8, 0x12C4, 0x5FFB, 0x12C2, 0x5FFC, 0x38C7,
- 0x5FFD, 0x080C, 0x5FFF, 0x12C8, 0x6007, 0x4B9D, 0x600D, 0x41DC,
- 0x600E, 0x12CE, 0x600F, 0x12D4, 0x6010, 0x12CC, 0x6012, 0x0C56,
- 0x6014, 0x41DD, 0x6015, 0x12D1, 0x6016, 0x0DCF, 0x6017, 0x38C8,
- 0x6018, 0x41DE, 0x6019, 0x12CB, 0x601A, 0x38C9, 0x601B, 0x12D0,
- 0x601C, 0x0FAF, 0x601D, 0x08A5, 0x6020, 0x0B35, 0x6021, 0x12C9,
- 0x6022, 0x44DA, 0x6024, 0x44DB, 0x6025, 0x0678, 0x6026, 0x12D3,
- 0x6027, 0x0A51, 0x6028, 0x0507, 0x6029, 0x12CD, 0x602A, 0x0578,
- 0x602B, 0x12D2, 0x602F, 0x06A9, 0x6031, 0x12CF, 0x6033, 0x38CA,
- 0x6035, 0x41DF, 0x603A, 0x12D5, 0x6041, 0x12D7, 0x6042, 0x12E1,
- 0x6043, 0x12DF, 0x6046, 0x12DC, 0x6047, 0x41E0, 0x6049, 0x4B9E,
- 0x604A, 0x12DB, 0x604B, 0x0FC0, 0x604C, 0x44DD, 0x604D, 0x12DD,
- 0x6050, 0x06AA, 0x6052, 0x07C3, 0x6054, 0x4B9F, 0x6055, 0x0984,
- 0x6059, 0x12E4, 0x605A, 0x12D6, 0x605D, 0x2106, 0x605F, 0x12DA,
- 0x6060, 0x12CA, 0x6061, 0x38CB, 0x6062, 0x057A, 0x6063, 0x12DE,
- 0x6064, 0x12E0, 0x6065, 0x0B8F, 0x6067, 0x4BA0, 0x6068, 0x0818,
- 0x6069, 0x0538, 0x606A, 0x12D8, 0x606B, 0x12E3, 0x606C, 0x12E2,
- 0x606D, 0x06AB, 0x606F, 0x0B09, 0x6070, 0x05C4, 0x6075, 0x0719,
- 0x6077, 0x12D9, 0x607F, 0x38CC, 0x6081, 0x12E5, 0x6083, 0x12E8,
- 0x6084, 0x12EA, 0x6085, 0x2107, 0x6089, 0x08E9, 0x608A, 0x2108,
- 0x608B, 0x12F0, 0x608C, 0x0C0C, 0x608D, 0x12E6, 0x6092, 0x12EE,
- 0x6094, 0x0579, 0x6095, 0x44DE, 0x6096, 0x12EC, 0x6097, 0x12ED,
- 0x609A, 0x12E9, 0x609B, 0x12EB, 0x609D, 0x41E1, 0x609E, 0x38CD,
- 0x609F, 0x079B, 0x60A0, 0x0F14, 0x60A3, 0x05F1, 0x60A4, 0x38CE,
- 0x60A6, 0x04FB, 0x60A7, 0x12EF, 0x60A8, 0x44DF, 0x60A9, 0x0CF0,
- 0x60AA, 0x0471, 0x60B0, 0x38CF, 0x60B1, 0x44E1, 0x60B2, 0x0D75,
- 0x60B3, 0x12C7, 0x60B4, 0x12F5, 0x60B5, 0x12F9, 0x60B6, 0x0EF1,
- 0x60B8, 0x12F2, 0x60BB, 0x4BA1, 0x60BC, 0x0C63, 0x60BD, 0x12F7,
- 0x60BE, 0x44E2, 0x60C4, 0x4BA2, 0x60C5, 0x09D8, 0x60C6, 0x12F8,
- 0x60C7, 0x0CAF, 0x60C8, 0x44E3, 0x60CB, 0x38D0, 0x60D1, 0x0FED,
- 0x60D3, 0x12F4, 0x60D4, 0x41E2, 0x60D5, 0x210A, 0x60D8, 0x12FA,
- 0x60D9, 0x44E4, 0x60DA, 0x080D, 0x60DB, 0x38D1, 0x60DC, 0x0A6F,
- 0x60DD, 0x41E3, 0x60DE, 0x2109, 0x60DF, 0x0498, 0x60E0, 0x12F3,
- 0x60E1, 0x12F1, 0x60E3, 0x0ADC, 0x60E7, 0x12E7, 0x60E8, 0x0882,
- 0x60EE, 0x44E5, 0x60F0, 0x0B26, 0x60F1, 0x1306, 0x60F2, 0x210C,
- 0x60F3, 0x0ADD, 0x60F4, 0x1301, 0x60F5, 0x44E6, 0x60F6, 0x12FE,
- 0x60F7, 0x12FF, 0x60F8, 0x38D2, 0x60F9, 0x0912, 0x60FA, 0x1302,
- 0x60FB, 0x1305, 0x60FD, 0x4BA3, 0x6100, 0x1300, 0x6101, 0x092F,
- 0x6103, 0x1303, 0x6106, 0x12FD, 0x6108, 0x0F08, 0x6109, 0x0F07,
- 0x610A, 0x4BA4, 0x610D, 0x1307, 0x610E, 0x1308, 0x610F, 0x0499,
- 0x6110, 0x44E7, 0x6111, 0x210D, 0x6112, 0x38D3, 0x6113, 0x38D4,
- 0x6114, 0x38D5, 0x6115, 0x12FC, 0x6116, 0x4BA5, 0x6119, 0x44E8,
- 0x611A, 0x06EA, 0x611B, 0x046A, 0x611C, 0x38D6, 0x611E, 0x44E9,
- 0x611F, 0x05F2, 0x6120, 0x210B, 0x6121, 0x1304, 0x6127, 0x130C,
- 0x6128, 0x130B, 0x612A, 0x4BA6, 0x612B, 0x41E4, 0x612C, 0x1310,
- 0x6130, 0x210F, 0x6134, 0x1311, 0x6136, 0x4BA7, 0x6137, 0x210E,
- 0x613A, 0x44EA, 0x613C, 0x130F, 0x613D, 0x1312, 0x613E, 0x130A,
- 0x613F, 0x130E, 0x6141, 0x44EC, 0x6142, 0x1313, 0x6144, 0x1314,
- 0x6146, 0x44ED, 0x6147, 0x1309, 0x6148, 0x08CA, 0x614A, 0x130D,
- 0x614B, 0x0B36, 0x614C, 0x07C4, 0x614D, 0x12FB, 0x614E, 0x09FB,
- 0x6153, 0x1321, 0x6155, 0x0E39, 0x6158, 0x1317, 0x6159, 0x1318,
- 0x615A, 0x1319, 0x615D, 0x1320, 0x615E, 0x4BA8, 0x615F, 0x131F,
- 0x6160, 0x44EE, 0x6162, 0x0EAB, 0x6163, 0x05F3, 0x6164, 0x4BA9,
- 0x6165, 0x131D, 0x6167, 0x071B, 0x6168, 0x0592, 0x616B, 0x131A,
- 0x616E, 0x0F80, 0x616F, 0x131C, 0x6170, 0x049A, 0x6171, 0x131E,
- 0x6173, 0x1315, 0x6174, 0x131B, 0x6175, 0x1322, 0x6176, 0x071A,
- 0x6177, 0x1316, 0x617B, 0x4BAA, 0x617C, 0x38D7, 0x617D, 0x4BAB,
- 0x617E, 0x0F47, 0x617F, 0x4BAC, 0x6182, 0x0F15, 0x6187, 0x1325,
- 0x618A, 0x1329, 0x618D, 0x38D8, 0x618E, 0x0B00, 0x6190, 0x0FC1,
- 0x6191, 0x132A, 0x6192, 0x44F0, 0x6193, 0x44F1, 0x6194, 0x1327,
- 0x6196, 0x1324, 0x6197, 0x44F2, 0x6198, 0x2110, 0x6199, 0x1323,
- 0x619A, 0x1328, 0x619D, 0x4BAD, 0x619F, 0x38D9, 0x61A4, 0x0E00,
- 0x61A5, 0x44F3, 0x61A7, 0x0C8C, 0x61A8, 0x38DA, 0x61A9, 0x071C,
- 0x61AB, 0x132B, 0x61AC, 0x1326, 0x61AD, 0x44F4, 0x61AE, 0x132C,
- 0x61B2, 0x0751, 0x61B6, 0x0531, 0x61B8, 0x4BAE, 0x61B9, 0x41E6,
- 0x61BA, 0x1334, 0x61BC, 0x41E5, 0x61BE, 0x05F4, 0x61C2, 0x38DB,
- 0x61C3, 0x1332, 0x61C6, 0x1333, 0x61C7, 0x0819, 0x61C8, 0x1331,
- 0x61C9, 0x132F, 0x61CA, 0x132E, 0x61CB, 0x1335, 0x61CC, 0x132D,
- 0x61CD, 0x1337, 0x61D0, 0x057B, 0x61D5, 0x44F6, 0x61DC, 0x4BAF,
- 0x61DD, 0x44F7, 0x61DF, 0x38DC, 0x61E2, 0x4BB0, 0x61E3, 0x1339,
- 0x61E5, 0x4BB1, 0x61E6, 0x1338, 0x61E8, 0x4BB2, 0x61F2, 0x0BC4,
- 0x61F4, 0x133C, 0x61F5, 0x44F8, 0x61F6, 0x133A, 0x61F7, 0x1330,
- 0x61F8, 0x0752, 0x61FA, 0x133B, 0x61FC, 0x133F, 0x61FD, 0x133E,
- 0x61FE, 0x1340, 0x61FF, 0x133D, 0x6200, 0x1341, 0x6204, 0x4BB3,
- 0x6207, 0x4BB4, 0x6208, 0x1342, 0x6209, 0x1343, 0x620A, 0x0E3A,
- 0x620C, 0x1345, 0x620D, 0x1344, 0x620E, 0x0949, 0x6210, 0x0A52,
- 0x6211, 0x0566, 0x6212, 0x057C, 0x6213, 0x2111, 0x6214, 0x1346,
- 0x6215, 0x38DD, 0x6216, 0x0483, 0x621A, 0x0A70, 0x621B, 0x1347,
- 0x621D, 0x1A64, 0x621E, 0x1348, 0x621F, 0x0737, 0x6221, 0x1349,
- 0x6222, 0x41E7, 0x6223, 0x44FA, 0x6226, 0x0A93, 0x6229, 0x38DE,
- 0x622A, 0x134A, 0x622E, 0x134B, 0x622F, 0x0654, 0x6230, 0x134C,
- 0x6231, 0x4BB5, 0x6232, 0x134D, 0x6233, 0x134E, 0x6234, 0x0B37,
- 0x6236, 0x35BD, 0x6238, 0x0781, 0x6239, 0x4BB6, 0x623B, 0x0EED,
- 0x623D, 0x4BB7, 0x623E, 0x344E, 0x623F, 0x0E6A, 0x6240, 0x0974,
- 0x6241, 0x134F, 0x6243, 0x38DF, 0x6246, 0x38E0, 0x6247, 0x0A94,
- 0x6248, 0x1B1A, 0x6249, 0x0D76, 0x624B, 0x0916, 0x624C, 0x38E1,
- 0x624D, 0x083D, 0x624E, 0x1350, 0x6251, 0x38E2, 0x6252, 0x44FB,
- 0x6253, 0x0B27, 0x6255, 0x0DF7, 0x6256, 0x38E3, 0x6258, 0x0B51,
- 0x625A, 0x41E8, 0x625B, 0x1353, 0x625E, 0x1351, 0x6260, 0x1354,
- 0x6261, 0x44FC, 0x6263, 0x1352, 0x6264, 0x44FD, 0x6268, 0x1355,
- 0x626D, 0x44FF, 0x626E, 0x0E01, 0x626F, 0x41E9, 0x6271, 0x047B,
- 0x6273, 0x4500, 0x6276, 0x0DD0, 0x6279, 0x0D77, 0x627A, 0x4BB8,
- 0x627B, 0x44FE, 0x627C, 0x1356, 0x627E, 0x1359, 0x627F, 0x099D,
- 0x6280, 0x0655, 0x6282, 0x1357, 0x6283, 0x135E, 0x6284, 0x099E,
- 0x6285, 0x35C5, 0x6289, 0x1358, 0x628A, 0x0CFA, 0x6290, 0x4BB9,
- 0x6291, 0x0F48, 0x6292, 0x135A, 0x6293, 0x135B, 0x6294, 0x135F,
- 0x6295, 0x0C64, 0x6296, 0x135C, 0x6297, 0x07C5, 0x6298, 0x0A82,
- 0x6299, 0x4501, 0x629B, 0x136D, 0x629C, 0x0D48, 0x629E, 0x0B52,
- 0x62A6, 0x2112, 0x62A8, 0x4BBA, 0x62AB, 0x0D78, 0x62AC, 0x13B2,
- 0x62B1, 0x0E4A, 0x62B5, 0x0C0D, 0x62B9, 0x0EA3, 0x62BB, 0x1362,
- 0x62BC, 0x0521, 0x62BD, 0x0BA8, 0x62C2, 0x136B, 0x62C4, 0x38E4,
- 0x62C5, 0x0B72, 0x62C6, 0x1365, 0x62C7, 0x136C, 0x62C8, 0x1367,
- 0x62C9, 0x136E, 0x62CA, 0x136A, 0x62CC, 0x1369, 0x62CD, 0x0D25,
- 0x62CF, 0x1363, 0x62D0, 0x057D, 0x62D1, 0x1361, 0x62D2, 0x068B,
- 0x62D3, 0x0B53, 0x62D4, 0x135D, 0x62D5, 0x4502, 0x62D6, 0x41EA,
- 0x62D7, 0x1360, 0x62D8, 0x07C6, 0x62D9, 0x0A7F, 0x62DA, 0x4BBB,
- 0x62DB, 0x099F, 0x62DC, 0x1368, 0x62DD, 0x0D08, 0x62E0, 0x068C,
- 0x62E1, 0x05A6, 0x62EC, 0x05C5, 0x62ED, 0x09E7, 0x62EE, 0x1370,
- 0x62EF, 0x1375, 0x62F1, 0x1371, 0x62F3, 0x0753, 0x62F4, 0x4BBC,
- 0x62F5, 0x1376, 0x62F6, 0x0870, 0x62F7, 0x07FB, 0x62FC, 0x38E5,
- 0x62FD, 0x4504, 0x62FE, 0x0930, 0x62FF, 0x1364, 0x6301, 0x08CB,
- 0x6302, 0x1373, 0x6303, 0x4505, 0x6307, 0x08A6, 0x6308, 0x1374,
- 0x6309, 0x0488, 0x630A, 0x38E6, 0x630C, 0x136F, 0x630D, 0x38E7,
- 0x6310, 0x4506, 0x6311, 0x0BC5, 0x6316, 0x4BBD, 0x6318, 0x38E8,
- 0x6319, 0x068D, 0x631B, 0x3737, 0x631F, 0x06AC, 0x6327, 0x1372,
- 0x6328, 0x046B, 0x632A, 0x4BBE, 0x632B, 0x0833, 0x632F, 0x09FC,
- 0x6332, 0x4509, 0x6335, 0x450A, 0x6336, 0x4BBF, 0x6339, 0x38E9,
- 0x633A, 0x0C0E, 0x633B, 0x450B, 0x633C, 0x450C, 0x633D, 0x0D68,
- 0x633E, 0x1378, 0x633F, 0x0AE0, 0x6341, 0x450D, 0x6342, 0x38EA,
- 0x6343, 0x38EB, 0x6344, 0x450E, 0x6346, 0x4BC0, 0x6349, 0x0B0A,
- 0x634B, 0x4BC1, 0x634C, 0x0879, 0x634D, 0x1379, 0x634E, 0x450F,
- 0x634F, 0x137B, 0x6350, 0x1377, 0x6353, 0x4BC2, 0x6355, 0x0E31,
- 0x6357, 0x0BD9, 0x6359, 0x4511, 0x635C, 0x0ADE, 0x6365, 0x38EC,
- 0x6367, 0x0E4B, 0x6368, 0x08FA, 0x6369, 0x1387, 0x636B, 0x1386,
- 0x636C, 0x4514, 0x636E, 0x0A3E, 0x6371, 0x4BC3, 0x6372, 0x0754,
- 0x6374, 0x38ED, 0x6375, 0x4BC4, 0x6376, 0x1380, 0x6377, 0x09A1,
- 0x637A, 0x0CC0, 0x637B, 0x0CE7, 0x637C, 0x41EB, 0x637D, 0x38EE,
- 0x637F, 0x4BC5, 0x6380, 0x137E, 0x6382, 0x4BC6, 0x6383, 0x0ADF,
- 0x6384, 0x38EF, 0x6387, 0x38F0, 0x6388, 0x0924, 0x6389, 0x1383,
- 0x638A, 0x4BC7, 0x638C, 0x09A0, 0x638E, 0x137D, 0x638F, 0x1382,
- 0x6390, 0x38F1, 0x6392, 0x0D09, 0x6394, 0x4517, 0x6396, 0x137C,
- 0x6398, 0x06F7, 0x6399, 0x4515, 0x639B, 0x05BB, 0x639E, 0x38F2,
- 0x639F, 0x1384, 0x63A0, 0x0F73, 0x63A1, 0x083E, 0x63A2, 0x0B73,
- 0x63A3, 0x1381, 0x63A5, 0x0A80, 0x63A7, 0x07C7, 0x63A8, 0x0A2A,
- 0x63A9, 0x0508, 0x63AA, 0x0ABE, 0x63AB, 0x137F, 0x63AC, 0x065F,
- 0x63AE, 0x4BC8, 0x63AF, 0x4BC9, 0x63B2, 0x071D, 0x63B4, 0x0BEB,
- 0x63B5, 0x1385, 0x63BB, 0x0AE1, 0x63BD, 0x4518, 0x63BE, 0x1388,
- 0x63C0, 0x138A, 0x63C3, 0x0B17, 0x63C4, 0x1390, 0x63C6, 0x138B,
- 0x63C9, 0x138D, 0x63CF, 0x0DB3, 0x63D0, 0x0C0F, 0x63D1, 0x38F3,
- 0x63D2, 0x138E, 0x63D4, 0x4519, 0x63D5, 0x451A, 0x63D6, 0x0F16,
- 0x63DA, 0x0F32, 0x63DB, 0x05F5, 0x63DC, 0x38F4, 0x63E0, 0x451B,
- 0x63E1, 0x0472, 0x63E3, 0x138C, 0x63E5, 0x41EC, 0x63E9, 0x1389,
- 0x63EA, 0x4BCA, 0x63EB, 0x451C, 0x63EC, 0x451D, 0x63ED, 0x341C,
- 0x63EE, 0x0634, 0x63F2, 0x451E, 0x63F4, 0x0509, 0x63F5, 0x2113,
- 0x63F6, 0x138F, 0x63F7, 0x3644, 0x63F8, 0x4BCB, 0x63F9, 0x4BCC,
- 0x63FA, 0x0F33, 0x6406, 0x1393, 0x6409, 0x38F5, 0x640D, 0x0B1B,
- 0x640F, 0x139A, 0x6410, 0x38F6, 0x6412, 0x4BCD, 0x6413, 0x1394,
- 0x6414, 0x1E2C, 0x6416, 0x1391, 0x6417, 0x1398, 0x6418, 0x4BCE,
- 0x641C, 0x137A, 0x641E, 0x451F, 0x6420, 0x4BCF, 0x6422, 0x38F7,
- 0x6424, 0x4BD0, 0x6425, 0x4520, 0x6426, 0x1395, 0x6428, 0x1399,
- 0x6429, 0x4521, 0x642A, 0x4BD1, 0x642C, 0x0D56, 0x642D, 0x0C65,
- 0x642F, 0x4522, 0x6434, 0x1392, 0x6435, 0x4BD2, 0x6436, 0x1396,
- 0x643A, 0x071E, 0x643D, 0x4BD3, 0x643E, 0x0861, 0x643F, 0x4BD4,
- 0x6442, 0x0A81, 0x644E, 0x139E, 0x6451, 0x1E43, 0x6452, 0x4BD5,
- 0x6454, 0x38F8, 0x6458, 0x0C20, 0x645A, 0x4523, 0x645B, 0x38F9,
- 0x645D, 0x4524, 0x645F, 0x4BD6, 0x6460, 0x2114, 0x6467, 0x139B,
- 0x6469, 0x0E8E, 0x646D, 0x38FA, 0x646F, 0x139C, 0x6473, 0x4525,
- 0x6474, 0x4BD7, 0x6476, 0x139D, 0x6478, 0x0EDA, 0x6479, 0x41ED,
- 0x647A, 0x0A46, 0x647B, 0x38FB, 0x647D, 0x4526, 0x6483, 0x0738,
- 0x6487, 0x4527, 0x6488, 0x13A4, 0x6490, 0x4BD8, 0x6491, 0x4528,
- 0x6492, 0x0883, 0x6493, 0x13A1, 0x6495, 0x13A0, 0x6498, 0x4BD9,
- 0x6499, 0x4BDA, 0x649A, 0x0CE8, 0x649D, 0x2115, 0x649E, 0x0C8D,
- 0x649F, 0x4529, 0x64A4, 0x0C2B, 0x64A5, 0x13A2, 0x64A9, 0x13A3,
- 0x64AB, 0x0DE1, 0x64AC, 0x4BDB, 0x64AD, 0x0CFB, 0x64AE, 0x0871,
- 0x64B0, 0x0A95, 0x64B2, 0x0E7E, 0x64B3, 0x4BDC, 0x64B9, 0x05A7,
- 0x64BB, 0x13AA, 0x64BC, 0x13A5, 0x64BE, 0x38FC, 0x64BF, 0x38FD,
- 0x64C1, 0x0F34, 0x64C2, 0x13AC, 0x64C4, 0x41EE, 0x64C5, 0x13A8,
- 0x64C7, 0x13A9, 0x64CA, 0x341D, 0x64CB, 0x452A, 0x64CC, 0x452B,
- 0x64CD, 0x0AE2, 0x64CE, 0x2116, 0x64D0, 0x41EF, 0x64D2, 0x13A7,
- 0x64D4, 0x1366, 0x64D5, 0x452C, 0x64D7, 0x452D, 0x64D8, 0x13AB,
- 0x64DA, 0x13A6, 0x64E0, 0x13B0, 0x64E1, 0x13B1, 0x64E2, 0x0C21,
- 0x64E3, 0x13B3, 0x64E4, 0x452F, 0x64E5, 0x38FE, 0x64E6, 0x0872,
- 0x64E7, 0x13AE, 0x64EC, 0x0656, 0x64ED, 0x4BDD, 0x64EF, 0x13B4,
- 0x64F0, 0x4BDE, 0x64F1, 0x13AD, 0x64F2, 0x13B8, 0x64F4, 0x13B7,
- 0x64F6, 0x13B6, 0x64F7, 0x38FF, 0x64FA, 0x13B9, 0x64FB, 0x3900,
- 0x64FD, 0x13BB, 0x64FE, 0x09D9, 0x64FF, 0x4530, 0x6500, 0x13BA,
- 0x6504, 0x3901, 0x6505, 0x13BE, 0x650F, 0x4532, 0x6514, 0x4533,
- 0x6516, 0x3902, 0x6518, 0x13BC, 0x6519, 0x3903, 0x651B, 0x4BDF,
- 0x651C, 0x13BD, 0x651D, 0x1397, 0x651E, 0x4535, 0x651F, 0x4BE0,
- 0x6522, 0x1E97, 0x6523, 0x13C0, 0x6524, 0x13BF, 0x6529, 0x41F0,
- 0x652A, 0x139F, 0x652B, 0x13C1, 0x652C, 0x13B5, 0x652E, 0x4BE1,
- 0x652F, 0x08A7, 0x6532, 0x4536, 0x6534, 0x13C2, 0x6535, 0x13C3,
- 0x6536, 0x13C5, 0x6537, 0x13C4, 0x6538, 0x13C6, 0x6539, 0x057E,
- 0x653B, 0x07C8, 0x653E, 0x0E4C, 0x653F, 0x0A53, 0x6544, 0x4537,
- 0x6545, 0x0782, 0x6547, 0x3904, 0x6548, 0x13C8, 0x6549, 0x4BE2,
- 0x654D, 0x13CB, 0x654E, 0x2117, 0x654F, 0x0DC4, 0x6551, 0x0679,
- 0x6554, 0x4538, 0x6555, 0x13CA, 0x6556, 0x13C9, 0x6557, 0x0D0A,
- 0x6558, 0x13CC, 0x6559, 0x06AD, 0x655D, 0x13CE, 0x655E, 0x13CD,
- 0x6560, 0x4BE3, 0x6562, 0x05F6, 0x6563, 0x0884, 0x6566, 0x0CB0,
- 0x6567, 0x3905, 0x656B, 0x4539, 0x656C, 0x071F, 0x6570, 0x0A3A,
- 0x6572, 0x13CF, 0x6574, 0x0A54, 0x6575, 0x0C22, 0x6577, 0x0DD1,
- 0x6578, 0x13D0, 0x657A, 0x453A, 0x6581, 0x3906, 0x6582, 0x13D1,
- 0x6583, 0x13D2, 0x6584, 0x453B, 0x6585, 0x3907, 0x6587, 0x0E08,
- 0x6588, 0x120C, 0x6589, 0x0A6A, 0x658A, 0x453C, 0x658C, 0x0DBE,
- 0x658E, 0x0848, 0x6590, 0x0D79, 0x6591, 0x0D57, 0x6592, 0x4BE4,
- 0x6595, 0x4BE5, 0x6597, 0x0C47, 0x6599, 0x0F89, 0x659B, 0x13D4,
- 0x659C, 0x08FC, 0x659D, 0x41F1, 0x659F, 0x13D5, 0x65A1, 0x047A,
- 0x65A4, 0x06CC, 0x65A5, 0x0A71, 0x65A7, 0x0DD2, 0x65AB, 0x13D6,
- 0x65AC, 0x0890, 0x65AD, 0x0B85, 0x65AF, 0x08A9, 0x65B0, 0x09FD,
- 0x65B2, 0x453D, 0x65B4, 0x4BE6, 0x65B5, 0x453E, 0x65B7, 0x13D7,
- 0x65B8, 0x453F, 0x65B9, 0x0E4D, 0x65BC, 0x0519, 0x65BD, 0x08AA,
- 0x65BE, 0x4BE7, 0x65BF, 0x4540, 0x65C1, 0x13DA, 0x65C2, 0x3908,
- 0x65C3, 0x13D8, 0x65C4, 0x13DB, 0x65C5, 0x0F81, 0x65C6, 0x13D9,
- 0x65C8, 0x4BE8, 0x65C9, 0x4541, 0x65CB, 0x0A9F, 0x65CC, 0x13DC,
- 0x65CE, 0x4BE9, 0x65CF, 0x0B12, 0x65D0, 0x4BEA, 0x65D2, 0x13DD,
- 0x65D4, 0x4542, 0x65D7, 0x0636, 0x65D9, 0x13DF, 0x65DB, 0x13DE,
- 0x65DF, 0x4BEB, 0x65E0, 0x13E0, 0x65E1, 0x13E1, 0x65E2, 0x0637,
- 0x65E3, 0x3585, 0x65E5, 0x0CD4, 0x65E6, 0x0B74, 0x65E7, 0x0686,
- 0x65E8, 0x08AB, 0x65E9, 0x0AE3, 0x65EC, 0x0966, 0x65ED, 0x0474,
- 0x65F0, 0x3909, 0x65F1, 0x13E2, 0x65F2, 0x390A, 0x65F9, 0x4544,
- 0x65FA, 0x0522, 0x65FB, 0x13E6, 0x65FC, 0x4545, 0x6600, 0x2118,
- 0x6602, 0x07C9, 0x6603, 0x13E5, 0x6604, 0x4546, 0x6606, 0x081B,
- 0x6607, 0x09A2, 0x6608, 0x4547, 0x6609, 0x211A, 0x660A, 0x13E4,
- 0x660C, 0x09A3, 0x660E, 0x0ECC, 0x660F, 0x081A, 0x6613, 0x049B,
- 0x6614, 0x0A72, 0x6615, 0x2119, 0x661C, 0x13EB, 0x661E, 0x4F50,
- 0x661F, 0x0A55, 0x6620, 0x04E9, 0x6621, 0x4548, 0x6622, 0x41F3,
- 0x6624, 0x211D, 0x6625, 0x095F, 0x6627, 0x0E94, 0x6628, 0x0862,
- 0x662A, 0x4549, 0x662B, 0x41F4, 0x662C, 0x390B, 0x662D, 0x09A4,
- 0x662E, 0x211B, 0x662F, 0x0A4B, 0x6630, 0x41F5, 0x6631, 0x20AE,
- 0x6633, 0x41F6, 0x6634, 0x13EA, 0x6635, 0x13E8, 0x6636, 0x13E9,
- 0x663A, 0x41F2, 0x663B, 0x1E00, 0x663C, 0x0BA9, 0x663F, 0x1409,
- 0x6641, 0x13EF, 0x6642, 0x08CC, 0x6643, 0x07CA, 0x6644, 0x13ED,
- 0x6645, 0x454A, 0x6648, 0x41F7, 0x6649, 0x13EE, 0x664B, 0x09FE,
- 0x664C, 0x390C, 0x664E, 0x454C, 0x664F, 0x13EC, 0x6651, 0x454B,
- 0x6652, 0x087D, 0x6657, 0x211F, 0x6659, 0x2120, 0x665A, 0x3441,
- 0x665B, 0x390D, 0x665C, 0x390E, 0x665D, 0x13F1, 0x665E, 0x13F0,
- 0x665F, 0x13F5, 0x6661, 0x390F, 0x6662, 0x13F6, 0x6663, 0x373A,
- 0x6664, 0x13F2, 0x6665, 0x211E, 0x6666, 0x0580, 0x6667, 0x13F3,
- 0x6668, 0x13F4, 0x6669, 0x0D69, 0x666A, 0x4551, 0x666B, 0x3910,
- 0x666C, 0x4552, 0x666D, 0x4553, 0x666E, 0x0DD3, 0x666F, 0x0720,
- 0x6670, 0x13F7, 0x6673, 0x2122, 0x6674, 0x0A56, 0x6676, 0x09A5,
- 0x6677, 0x41F9, 0x6678, 0x41FA, 0x667A, 0x0B90, 0x667B, 0x4554,
- 0x667E, 0x4BEC, 0x6680, 0x4555, 0x6681, 0x06BF, 0x6683, 0x13F8,
- 0x6684, 0x13FC, 0x6687, 0x054B, 0x6688, 0x13F9, 0x6689, 0x13FB,
- 0x668B, 0x4BED, 0x668C, 0x4BEE, 0x668D, 0x41FB, 0x668E, 0x13FA,
- 0x6690, 0x4556, 0x6691, 0x0975, 0x6692, 0x4557, 0x6696, 0x0B86,
- 0x6697, 0x0489, 0x6698, 0x13FD, 0x6699, 0x2123, 0x669D, 0x13FE,
- 0x66A0, 0x2124, 0x66A2, 0x0BC6, 0x66A4, 0x3912, 0x66A6, 0x0FB9,
- 0x66AB, 0x0891, 0x66AD, 0x4559, 0x66AE, 0x0E3B, 0x66B1, 0x455A,
- 0x66B2, 0x2125, 0x66B3, 0x4BEF, 0x66B4, 0x0E6B, 0x66B5, 0x455B,
- 0x66B8, 0x1405, 0x66B9, 0x1400, 0x66BB, 0x41FC, 0x66BC, 0x1403,
- 0x66BE, 0x1402, 0x66BF, 0x2126, 0x66C0, 0x4BF0, 0x66C1, 0x13FF,
- 0x66C4, 0x1404, 0x66C6, 0x3455, 0x66C7, 0x0CB6, 0x66C8, 0x3913,
- 0x66C9, 0x1401, 0x66CF, 0x4BF1, 0x66D6, 0x1406, 0x66D9, 0x0976,
- 0x66DA, 0x1407, 0x66DB, 0x41FD, 0x66DC, 0x0F35, 0x66DD, 0x0D2E,
- 0x66E0, 0x1408, 0x66E6, 0x140A, 0x66E8, 0x41FE, 0x66E9, 0x140B,
- 0x66EC, 0x3914, 0x66F0, 0x140C, 0x66F2, 0x06C2, 0x66F3, 0x04EA,
- 0x66F4, 0x07CB, 0x66F5, 0x140D, 0x66F7, 0x140E, 0x66F8, 0x097B,
- 0x66F9, 0x0AE4, 0x66FA, 0x2127, 0x66FB, 0x20B1, 0x66FC, 0x10ED,
- 0x66FD, 0x0AC0, 0x66FE, 0x0ABF, 0x66FF, 0x0B38, 0x6700, 0x0837,
- 0x6701, 0x455F, 0x6703, 0x104B, 0x6705, 0x3915, 0x6708, 0x0744,
- 0x6709, 0x0F17, 0x670B, 0x0E4E, 0x670D, 0x0DF0, 0x670E, 0x2128,
- 0x670F, 0x140F, 0x6712, 0x4560, 0x6713, 0x3916, 0x6714, 0x0863,
- 0x6715, 0x0BDB, 0x6716, 0x1410, 0x6717, 0x0FD5, 0x6719, 0x4562,
- 0x671B, 0x0E6C, 0x671D, 0x0BC7, 0x671E, 0x1411, 0x671F, 0x0638,
- 0x6725, 0x4BF2, 0x6726, 0x1412, 0x6727, 0x1413, 0x6728, 0x0EE6,
- 0x672A, 0x0EB0, 0x672B, 0x0EA4, 0x672C, 0x0E8A, 0x672D, 0x0873,
- 0x672E, 0x1415, 0x6731, 0x0917, 0x6733, 0x3917, 0x6734, 0x0E7F,
- 0x6735, 0x4BF3, 0x6736, 0x1417, 0x6737, 0x141A, 0x6738, 0x1419,
- 0x673A, 0x0635, 0x673D, 0x067A, 0x673F, 0x1416, 0x6741, 0x1418,
- 0x6743, 0x35B7, 0x6746, 0x141B, 0x6747, 0x41FF, 0x6748, 0x3918,
- 0x6749, 0x0A3F, 0x674C, 0x3919, 0x674D, 0x4565, 0x674E, 0x0F65,
- 0x674F, 0x048D, 0x6750, 0x0850, 0x6751, 0x0B1C, 0x6753, 0x0909,
- 0x6754, 0x4566, 0x6755, 0x4BF4, 0x6756, 0x09DB, 0x6759, 0x141E,
- 0x675C, 0x0C48, 0x675D, 0x4567, 0x675E, 0x141C, 0x675F, 0x0B0B,
- 0x6760, 0x141D, 0x6761, 0x09DA, 0x6762, 0x0EE9, 0x6763, 0x141F,
- 0x6764, 0x1420, 0x6765, 0x0F52, 0x6766, 0x212A, 0x676A, 0x1425,
- 0x676D, 0x07CC, 0x676E, 0x3571, 0x676F, 0x0D0B, 0x6770, 0x1422,
- 0x6771, 0x0C66, 0x6772, 0x13E3, 0x6773, 0x13E7, 0x6774, 0x456B,
- 0x6775, 0x0669, 0x6776, 0x391A, 0x6777, 0x0CFD, 0x677B, 0x391B,
- 0x677C, 0x1424, 0x677E, 0x09A6, 0x677F, 0x0D58, 0x6780, 0x4BF5,
- 0x6781, 0x4200, 0x6785, 0x142A, 0x6787, 0x0D8E, 0x6789, 0x1421,
- 0x678B, 0x1427, 0x678C, 0x1426, 0x678F, 0x4BF6, 0x6790, 0x0A73,
- 0x6791, 0x4BF7, 0x6792, 0x456D, 0x6793, 0x4201, 0x6795, 0x0E9B,
- 0x6797, 0x0F9B, 0x6798, 0x4202, 0x679A, 0x0E95, 0x679B, 0x4203,
- 0x679C, 0x054C, 0x679D, 0x08AC, 0x67A0, 0x0FEE, 0x67A1, 0x1429,
- 0x67A2, 0x0A3B, 0x67A4, 0x4BF8, 0x67A6, 0x1428, 0x67A9, 0x1423,
- 0x67AF, 0x0783, 0x67B0, 0x391C, 0x67B1, 0x4BF9, 0x67B2, 0x391D,
- 0x67B3, 0x142F, 0x67B4, 0x142D, 0x67B5, 0x4BFA, 0x67B6, 0x054D,
- 0x67B7, 0x142B, 0x67B8, 0x1431, 0x67B9, 0x1437, 0x67BB, 0x212B,
- 0x67BE, 0x4BFB, 0x67C0, 0x212D, 0x67C1, 0x0B28, 0x67C3, 0x4571,
- 0x67C4, 0x0E11, 0x67C6, 0x1439, 0x67C8, 0x4572, 0x67CA, 0x0D94,
- 0x67CE, 0x1438, 0x67CF, 0x0D26, 0x67D0, 0x0E6D, 0x67D1, 0x05F7,
- 0x67D2, 0x4573, 0x67D3, 0x0A9B, 0x67D4, 0x094A, 0x67D7, 0x391F,
- 0x67D8, 0x0BEF, 0x67D9, 0x3920, 0x67DA, 0x0F18, 0x67DB, 0x4574,
- 0x67DD, 0x1434, 0x67DE, 0x1433, 0x67E2, 0x1435, 0x67E4, 0x1432,
- 0x67E7, 0x143A, 0x67E9, 0x1430, 0x67EC, 0x142E, 0x67EE, 0x1436,
- 0x67EF, 0x142C, 0x67F0, 0x3921, 0x67F1, 0x0BAA, 0x67F3, 0x0F04,
- 0x67F4, 0x08F2, 0x67F5, 0x0864, 0x67F7, 0x4575, 0x67F9, 0x391E,
- 0x67FA, 0x1E9A, 0x67FB, 0x082A, 0x67FC, 0x4204, 0x67FE, 0x0E9D,
- 0x67FF, 0x059F, 0x6801, 0x36F2, 0x6802, 0x0BEA, 0x6803, 0x0CA2,
- 0x6804, 0x04EB, 0x6805, 0x1E07, 0x6810, 0x4570, 0x6813, 0x0A96,
- 0x6816, 0x0A58, 0x6817, 0x0700, 0x6818, 0x4579, 0x681D, 0x4205,
- 0x681E, 0x143C, 0x681F, 0x457A, 0x6821, 0x07CD, 0x6822, 0x05DA,
- 0x6828, 0x4BFC, 0x6829, 0x143E, 0x682A, 0x05D2, 0x682B, 0x1444,
- 0x682C, 0x3922, 0x682D, 0x457B, 0x6830, 0x3923, 0x6831, 0x3924,
- 0x6832, 0x1441, 0x6833, 0x457D, 0x6834, 0x0A97, 0x6838, 0x05A9,
- 0x6839, 0x081C, 0x683B, 0x457E, 0x683C, 0x05A8, 0x683D, 0x083F,
- 0x683E, 0x457F, 0x6840, 0x143F, 0x6841, 0x073B, 0x6842, 0x0721,
- 0x6843, 0x0C67, 0x6844, 0x212F, 0x6845, 0x4580, 0x6846, 0x143D,
- 0x6848, 0x048A, 0x6849, 0x4581, 0x684C, 0x4582, 0x684D, 0x1440,
- 0x684E, 0x1442, 0x6850, 0x06C5, 0x6851, 0x0702, 0x6852, 0x212C,
- 0x6853, 0x05F8, 0x6854, 0x0665, 0x6855, 0x4583, 0x6857, 0x4584,
- 0x6859, 0x1445, 0x685B, 0x3925, 0x685C, 0x0869, 0x685D, 0x0E9F,
- 0x685F, 0x0885, 0x6863, 0x1446, 0x6867, 0x0DA2, 0x686B, 0x4586,
- 0x686E, 0x4587, 0x6872, 0x3926, 0x6874, 0x1452, 0x6875, 0x3927,
- 0x6876, 0x0533, 0x6877, 0x1447, 0x687A, 0x3928, 0x687C, 0x4588,
- 0x687E, 0x1458, 0x687F, 0x1448, 0x6881, 0x0F8A, 0x6882, 0x4589,
- 0x6883, 0x144F, 0x6884, 0x3929, 0x6885, 0x0D15, 0x6886, 0x4BFD,
- 0x688D, 0x1457, 0x688E, 0x1E9C, 0x688F, 0x144A, 0x6890, 0x458A,
- 0x6893, 0x0478, 0x6894, 0x144C, 0x6896, 0x458B, 0x6897, 0x07CE,
- 0x6898, 0x458D, 0x6899, 0x458E, 0x689A, 0x458F, 0x689B, 0x144E,
- 0x689C, 0x4590, 0x689D, 0x144D, 0x689F, 0x1449, 0x68A0, 0x1454,
- 0x68A2, 0x09A7, 0x68A3, 0x4206, 0x68A5, 0x392A, 0x68A6, 0x11BE,
- 0x68A7, 0x079C, 0x68A8, 0x0F66, 0x68AA, 0x4591, 0x68AB, 0x4592,
- 0x68AD, 0x144B, 0x68AF, 0x0C10, 0x68B0, 0x0581, 0x68B1, 0x081D,
- 0x68B2, 0x392B, 0x68B3, 0x1443, 0x68B4, 0x4593, 0x68B5, 0x1453,
- 0x68B6, 0x05BF, 0x68B9, 0x1451, 0x68BA, 0x1455, 0x68BB, 0x4594,
- 0x68BC, 0x0C68, 0x68C3, 0x4598, 0x68C4, 0x063A, 0x68C5, 0x4599,
- 0x68C6, 0x1473, 0x68C8, 0x20AF, 0x68C9, 0x0ED5, 0x68CA, 0x145A,
- 0x68CB, 0x0639, 0x68CC, 0x459A, 0x68CD, 0x1461, 0x68CF, 0x2130,
- 0x68D0, 0x392C, 0x68D2, 0x0E6E, 0x68D4, 0x1462, 0x68D5, 0x1464,
- 0x68D6, 0x392D, 0x68D7, 0x1468, 0x68D8, 0x145C, 0x68D9, 0x459B,
- 0x68DA, 0x0B68, 0x68DF, 0x0C69, 0x68E0, 0x146C, 0x68E1, 0x145F,
- 0x68E3, 0x1469, 0x68E4, 0x459C, 0x68E5, 0x459D, 0x68E7, 0x1463,
- 0x68E8, 0x392E, 0x68EB, 0x4BFE, 0x68EC, 0x459E, 0x68ED, 0x392F,
- 0x68EE, 0x09FF, 0x68EF, 0x146D, 0x68F0, 0x3930, 0x68F1, 0x3931,
- 0x68F2, 0x0A57, 0x68F5, 0x4BFF, 0x68F7, 0x459F, 0x68F9, 0x146B,
- 0x68FA, 0x05F9, 0x68FB, 0x4595, 0x68FC, 0x3932, 0x6900, 0x0FF6,
- 0x6901, 0x1459, 0x6903, 0x45A0, 0x6904, 0x1467, 0x6905, 0x049C,
- 0x6907, 0x45A1, 0x6908, 0x145B, 0x690A, 0x4207, 0x690B, 0x0EC6,
- 0x690C, 0x1460, 0x690D, 0x09E8, 0x690E, 0x0BE3, 0x690F, 0x1456,
- 0x6911, 0x3933, 0x6912, 0x1466, 0x6913, 0x3934, 0x6917, 0x4C00,
- 0x6919, 0x0A40, 0x691A, 0x1470, 0x691B, 0x05CF, 0x691C, 0x0755,
- 0x6921, 0x1472, 0x6922, 0x145D, 0x6923, 0x1471, 0x6925, 0x146A,
- 0x6926, 0x145E, 0x6928, 0x146E, 0x692A, 0x146F, 0x6930, 0x1480,
- 0x6933, 0x4C01, 0x6934, 0x0CA6, 0x6935, 0x3935, 0x6936, 0x1465,
- 0x6938, 0x4C02, 0x6939, 0x147C, 0x693B, 0x3936, 0x693D, 0x147E,
- 0x693F, 0x0BF4, 0x6942, 0x420A, 0x6946, 0x45A5, 0x6949, 0x4208,
- 0x694A, 0x0F36, 0x6953, 0x0DE8, 0x6954, 0x1479, 0x6955, 0x0B2A,
- 0x6957, 0x3937, 0x6959, 0x147F, 0x695A, 0x0AC1, 0x695B, 0x4C03,
- 0x695C, 0x1476, 0x695D, 0x1483, 0x695E, 0x1482, 0x6960, 0x0CC7,
- 0x6961, 0x1481, 0x6962, 0x0CC2, 0x6963, 0x3938, 0x6964, 0x420B,
- 0x6965, 0x4C04, 0x6968, 0x2132, 0x6969, 0x45A6, 0x696A, 0x1485,
- 0x696B, 0x1478, 0x696C, 0x45A7, 0x696D, 0x06C0, 0x696E, 0x147B,
- 0x696F, 0x0967, 0x6972, 0x3939, 0x6973, 0x0D16, 0x6974, 0x147D,
- 0x6975, 0x06C3, 0x6977, 0x1475, 0x6978, 0x1477, 0x6979, 0x1474,
- 0x697A, 0x45A8, 0x697C, 0x0FD6, 0x697D, 0x05B8, 0x697E, 0x147A,
- 0x697F, 0x393A, 0x6980, 0x393B, 0x6981, 0x1484, 0x6982, 0x0593,
- 0x6986, 0x3740, 0x698A, 0x0857, 0x698E, 0x04FF, 0x6991, 0x1495,
- 0x6992, 0x45A9, 0x6994, 0x0FD7, 0x6995, 0x1498, 0x6996, 0x45AB,
- 0x6998, 0x2134, 0x699B, 0x0A00, 0x699C, 0x1497, 0x69A0, 0x1496,
- 0x69A5, 0x420C, 0x69A6, 0x393C, 0x69A7, 0x1493, 0x69A8, 0x4C05,
- 0x69AB, 0x4C06, 0x69AD, 0x393D, 0x69AE, 0x1487, 0x69AF, 0x4C07,
- 0x69B0, 0x45AC, 0x69B1, 0x14A4, 0x69B2, 0x1486, 0x69B4, 0x1499,
- 0x69B7, 0x393E, 0x69BA, 0x45AD, 0x69BB, 0x1491, 0x69BC, 0x45AE,
- 0x69BE, 0x148C, 0x69BF, 0x1489, 0x69C0, 0x45AF, 0x69C1, 0x148A,
- 0x69C3, 0x1492, 0x69C7, 0x1D33, 0x69CA, 0x148F, 0x69CB, 0x07CF,
- 0x69CC, 0x0BE4, 0x69CD, 0x0AE6, 0x69CE, 0x148D, 0x69CF, 0x420D,
- 0x69D0, 0x1488, 0x69D1, 0x45B0, 0x69D3, 0x148B, 0x69D6, 0x393F,
- 0x69D7, 0x3940, 0x69D8, 0x0F37, 0x69D9, 0x0E98, 0x69DD, 0x1490,
- 0x69DE, 0x149A, 0x69E2, 0x2135, 0x69E3, 0x45B4, 0x69E5, 0x4C08,
- 0x69E7, 0x14A2, 0x69E8, 0x149B, 0x69E9, 0x4210, 0x69EA, 0x3411,
- 0x69EB, 0x14A8, 0x69ED, 0x14A6, 0x69EE, 0x45B5, 0x69EF, 0x45B6,
- 0x69F1, 0x4C09, 0x69F2, 0x14A1, 0x69F3, 0x45B7, 0x69F4, 0x45B9,
- 0x69F5, 0x4211, 0x69F6, 0x373F, 0x69F9, 0x14A0, 0x69FB, 0x0BEC,
- 0x69FD, 0x0AE7, 0x69FE, 0x45BA, 0x69FF, 0x149E, 0x6A01, 0x3941,
- 0x6A02, 0x149C, 0x6A05, 0x14A3, 0x6A0A, 0x14A9, 0x6A0B, 0x0D89,
- 0x6A0C, 0x14AF, 0x6A0F, 0x3942, 0x6A11, 0x45BB, 0x6A12, 0x14AA,
- 0x6A13, 0x14AD, 0x6A14, 0x14A7, 0x6A15, 0x3943, 0x6A17, 0x0BB2,
- 0x6A19, 0x0DAA, 0x6A1A, 0x45BC, 0x6A1B, 0x149D, 0x6A1D, 0x45BD,
- 0x6A1E, 0x14A5, 0x6A1F, 0x09A8, 0x6A21, 0x0EDB, 0x6A22, 0x14B9,
- 0x6A23, 0x14AC, 0x6A28, 0x3944, 0x6A29, 0x0756, 0x6A2A, 0x0523,
- 0x6A2B, 0x05BD, 0x6A2E, 0x1494, 0x6A30, 0x2136, 0x6A32, 0x45BF,
- 0x6A33, 0x45C0, 0x6A34, 0x3945, 0x6A35, 0x09A9, 0x6A36, 0x14B1,
- 0x6A38, 0x14B8, 0x6A39, 0x0925, 0x6A3A, 0x05D0, 0x6A3B, 0x4213,
- 0x6A3D, 0x0B6C, 0x6A3E, 0x3946, 0x6A3F, 0x45C1, 0x6A44, 0x14AE,
- 0x6A45, 0x3947, 0x6A46, 0x2138, 0x6A47, 0x14B3, 0x6A48, 0x14B7,
- 0x6A49, 0x45C2, 0x6A4A, 0x4C0A, 0x6A4B, 0x06AE, 0x6A4E, 0x45C4,
- 0x6A50, 0x3948, 0x6A51, 0x3949, 0x6A52, 0x45C5, 0x6A54, 0x3C34,
- 0x6A55, 0x4C0B, 0x6A56, 0x394A, 0x6A58, 0x0666, 0x6A59, 0x14B5,
- 0x6A5B, 0x394B, 0x6A5F, 0x063B, 0x6A61, 0x0CA3, 0x6A62, 0x14B4,
- 0x6A64, 0x45C6, 0x6A66, 0x14B6, 0x6A67, 0x4C0C, 0x6A6B, 0x2137,
- 0x6A71, 0x4C0D, 0x6A72, 0x14B0, 0x6A73, 0x2139, 0x6A78, 0x14B2,
- 0x6A7A, 0x45C3, 0x6A7E, 0x213A, 0x6A7F, 0x05BE, 0x6A80, 0x0B87,
- 0x6A83, 0x394C, 0x6A84, 0x14BD, 0x6A89, 0x394D, 0x6A8B, 0x45C8,
- 0x6A8D, 0x14BB, 0x6A8E, 0x079D, 0x6A90, 0x14BA, 0x6A91, 0x394E,
- 0x6A94, 0x4215, 0x6A97, 0x14C0, 0x6A9C, 0x143B, 0x6A9D, 0x394F,
- 0x6A9E, 0x3950, 0x6A9F, 0x3951, 0x6AA0, 0x14BC, 0x6AA1, 0x45CA,
- 0x6AA2, 0x14BE, 0x6AA3, 0x14BF, 0x6AA5, 0x4216, 0x6AAA, 0x14CB,
- 0x6AAB, 0x45CC, 0x6AAC, 0x14C7, 0x6AAE, 0x1450, 0x6AAF, 0x4C0E,
- 0x6AB3, 0x14C6, 0x6AB8, 0x14C5, 0x6ABB, 0x14C2, 0x6ABD, 0x45CD,
- 0x6AC1, 0x14AB, 0x6AC2, 0x14C4, 0x6AC3, 0x14C3, 0x6AC6, 0x45CE,
- 0x6AC8, 0x4C0F, 0x6AC9, 0x4C10, 0x6AD0, 0x45D0, 0x6AD1, 0x14C9,
- 0x6AD3, 0x0FCC, 0x6AD4, 0x45CF, 0x6ADA, 0x14CC, 0x6ADB, 0x06F3,
- 0x6ADC, 0x3952, 0x6ADD, 0x45D1, 0x6ADE, 0x14C8, 0x6ADF, 0x14CA,
- 0x6AE2, 0x213B, 0x6AE4, 0x213C, 0x6AE7, 0x3953, 0x6AE8, 0x0D3B,
- 0x6AEA, 0x14CD, 0x6AEC, 0x3954, 0x6AF1, 0x45D4, 0x6AF2, 0x45D5,
- 0x6AF3, 0x45D6, 0x6AF8, 0x4EB8, 0x6AFA, 0x14D1, 0x6AFB, 0x14CE,
- 0x6AFD, 0x45D7, 0x6B03, 0x4C11, 0x6B04, 0x0F5D, 0x6B05, 0x14CF,
- 0x6B0A, 0x149F, 0x6B0B, 0x45D9, 0x6B0F, 0x45DA, 0x6B10, 0x45DB,
- 0x6B11, 0x45DC, 0x6B12, 0x14D2, 0x6B16, 0x14D3, 0x6B17, 0x45DE,
- 0x6B1B, 0x4218, 0x6B1D, 0x04D7, 0x6B1E, 0x3955, 0x6B1F, 0x14D5,
- 0x6B20, 0x073D, 0x6B21, 0x08CD, 0x6B23, 0x06CD, 0x6B24, 0x3956,
- 0x6B27, 0x0524, 0x6B2C, 0x4219, 0x6B2F, 0x45E0, 0x6B32, 0x0F49,
- 0x6B35, 0x3957, 0x6B37, 0x14D7, 0x6B38, 0x14D6, 0x6B39, 0x14D9,
- 0x6B3A, 0x0657, 0x6B3B, 0x4C12, 0x6B3D, 0x06CE, 0x6B3E, 0x05FA,
- 0x6B3F, 0x4C13, 0x6B43, 0x14DC, 0x6B46, 0x3958, 0x6B47, 0x14DB,
- 0x6B49, 0x14DD, 0x6B4A, 0x45E1, 0x6B4C, 0x054E, 0x6B4E, 0x0B75,
- 0x6B50, 0x14DE, 0x6B53, 0x05FB, 0x6B54, 0x14E0, 0x6B56, 0x3959,
- 0x6B58, 0x45E2, 0x6B59, 0x14DF, 0x6B5B, 0x14E1, 0x6B5F, 0x14E2,
- 0x6B60, 0x395A, 0x6B61, 0x14E3, 0x6B62, 0x08AD, 0x6B63, 0x0A59,
- 0x6B64, 0x0811, 0x6B65, 0x344A, 0x6B66, 0x0DE2, 0x6B67, 0x421A,
- 0x6B69, 0x0E32, 0x6B6A, 0x0FEA, 0x6B6C, 0x45E3, 0x6B6F, 0x08C3,
- 0x6B72, 0x35D9, 0x6B73, 0x0840, 0x6B74, 0x0FBA, 0x6B75, 0x45E4,
- 0x6B77, 0x3456, 0x6B78, 0x14E4, 0x6B79, 0x14E5, 0x6B7A, 0x45E5,
- 0x6B7B, 0x08AE, 0x6B7D, 0x4C14, 0x6B7E, 0x4C15, 0x6B7F, 0x14E6,
- 0x6B80, 0x14E7, 0x6B81, 0x45E6, 0x6B82, 0x395B, 0x6B83, 0x14E9,
- 0x6B84, 0x14E8, 0x6B86, 0x0E86, 0x6B89, 0x0968, 0x6B8A, 0x0918,
- 0x6B8B, 0x0892, 0x6B8D, 0x14EA, 0x6B95, 0x14EC, 0x6B96, 0x09E9,
- 0x6B98, 0x14EB, 0x6B9B, 0x45E7, 0x6B9E, 0x14ED, 0x6BA4, 0x14EE,
- 0x6BA9, 0x421B, 0x6BAA, 0x14EF, 0x6BAB, 0x14F0, 0x6BAD, 0x421C,
- 0x6BAE, 0x45E8, 0x6BAF, 0x14F1, 0x6BB0, 0x4C16, 0x6BB1, 0x14F3,
- 0x6BB2, 0x14F2, 0x6BB3, 0x14F4, 0x6BB4, 0x0525, 0x6BB5, 0x0B88,
- 0x6BB7, 0x14F5, 0x6BBA, 0x0874, 0x6BBB, 0x05AA, 0x6BBC, 0x14F6,
- 0x6BBD, 0x45EA, 0x6BBE, 0x395C, 0x6BBF, 0x0C3C, 0x6BC0, 0x119D,
- 0x6BC5, 0x063D, 0x6BC6, 0x14F7, 0x6BC7, 0x45EB, 0x6BC8, 0x45EC,
- 0x6BC9, 0x45ED, 0x6BCB, 0x14F8, 0x6BCC, 0x3744, 0x6BCD, 0x0E3C,
- 0x6BCE, 0x0E96, 0x6BCF, 0x344C, 0x6BD2, 0x0C9F, 0x6BD3, 0x14F9,
- 0x6BD4, 0x0D7A, 0x6BD6, 0x213D, 0x6BD7, 0x421D, 0x6BD8, 0x0D8F,
- 0x6BDA, 0x45EE, 0x6BDB, 0x0EDF, 0x6BDF, 0x14FA, 0x6BE1, 0x395D,
- 0x6BE6, 0x45EF, 0x6BE7, 0x45F0, 0x6BEB, 0x14FC, 0x6BEC, 0x14FB,
- 0x6BEE, 0x45F1, 0x6BEF, 0x14FE, 0x6BF1, 0x395E, 0x6BF3, 0x14FD,
- 0x6BF7, 0x4C17, 0x6BF9, 0x4C18, 0x6BFF, 0x421E, 0x6C02, 0x45F2,
- 0x6C04, 0x4C19, 0x6C05, 0x421F, 0x6C08, 0x1500, 0x6C09, 0x4C1A,
- 0x6C0A, 0x45F3, 0x6C0D, 0x4C1B, 0x6C0E, 0x45F4, 0x6C0F, 0x08AF,
- 0x6C10, 0x395F, 0x6C11, 0x0EBD, 0x6C13, 0x1501, 0x6C14, 0x1502,
- 0x6C17, 0x063E, 0x6C1B, 0x1503, 0x6C23, 0x1505, 0x6C24, 0x1504,
- 0x6C2C, 0x4C1C, 0x6C33, 0x3960, 0x6C34, 0x0A2B, 0x6C35, 0x3961,
- 0x6C36, 0x45F5, 0x6C37, 0x0DAB, 0x6C38, 0x04EC, 0x6C3A, 0x4F55,
- 0x6C3E, 0x0D59, 0x6C3F, 0x213E, 0x6C40, 0x0C11, 0x6C41, 0x094B,
- 0x6C42, 0x067B, 0x6C4A, 0x4C1D, 0x6C4D, 0x45F7, 0x6C4E, 0x0D5A,
- 0x6C50, 0x08DA, 0x6C52, 0x4C1E, 0x6C54, 0x4C1F, 0x6C55, 0x1507,
- 0x6C57, 0x05FC, 0x6C59, 0x3963, 0x6C5A, 0x051A, 0x6C5B, 0x45F8,
- 0x6C5C, 0x213F, 0x6C5D, 0x0CCA, 0x6C5E, 0x1506, 0x6C5F, 0x07D0,
- 0x6C60, 0x0B91, 0x6C62, 0x1508, 0x6C67, 0x460A, 0x6C68, 0x1510,
- 0x6C6A, 0x1509, 0x6C6D, 0x45F9, 0x6C6F, 0x2141, 0x6C70, 0x0B21,
- 0x6C72, 0x067C, 0x6C73, 0x1511, 0x6C74, 0x4220, 0x6C76, 0x3964,
- 0x6C79, 0x4C20, 0x6C7A, 0x073E, 0x6C7B, 0x3965, 0x6C7D, 0x063F,
- 0x6C7E, 0x150F, 0x6C81, 0x150D, 0x6C82, 0x150A, 0x6C83, 0x0F4A,
- 0x6C84, 0x45FA, 0x6C85, 0x3966, 0x6C86, 0x2140, 0x6C88, 0x0BDC,
- 0x6C89, 0x45FB, 0x6C8C, 0x0CB1, 0x6C8D, 0x150B, 0x6C90, 0x1513,
- 0x6C92, 0x1512, 0x6C93, 0x06F9, 0x6C94, 0x45FD, 0x6C95, 0x3967,
- 0x6C96, 0x052D, 0x6C97, 0x45FE, 0x6C98, 0x4221, 0x6C99, 0x082B,
- 0x6C9A, 0x150C, 0x6C9B, 0x150E, 0x6C9C, 0x3968, 0x6CA1, 0x0E85,
- 0x6CA2, 0x0B54, 0x6CAA, 0x3749, 0x6CAB, 0x0EA5, 0x6CAC, 0x4C21,
- 0x6CAD, 0x45FF, 0x6CAE, 0x151B, 0x6CB1, 0x151C, 0x6CB3, 0x054F,
- 0x6CB4, 0x4C22, 0x6CB8, 0x0DF8, 0x6CB9, 0x0F09, 0x6CBA, 0x151E,
- 0x6CBB, 0x08CF, 0x6CBC, 0x09AA, 0x6CBD, 0x1517, 0x6CBE, 0x151D,
- 0x6CBF, 0x050A, 0x6CC1, 0x06AF, 0x6CC2, 0x4600, 0x6CC4, 0x1514,
- 0x6CC5, 0x1519, 0x6CC6, 0x4223, 0x6CC9, 0x0A98, 0x6CCA, 0x0D27,
- 0x6CCC, 0x0D7B, 0x6CD0, 0x3969, 0x6CD2, 0x4C23, 0x6CD3, 0x1516,
- 0x6CD4, 0x396A, 0x6CD5, 0x0E4F, 0x6CD6, 0x396B, 0x6CD7, 0x1518,
- 0x6CD9, 0x1521, 0x6CDA, 0x2142, 0x6CDB, 0x151F, 0x6CDC, 0x4602,
- 0x6CDD, 0x151A, 0x6CE0, 0x396C, 0x6CE1, 0x0E50, 0x6CE2, 0x0CFE,
- 0x6CE3, 0x067D, 0x6CE5, 0x0C1F, 0x6CE8, 0x0BAB, 0x6CE9, 0x4603,
- 0x6CEA, 0x1522, 0x6CEB, 0x396D, 0x6CEC, 0x396E, 0x6CED, 0x4604,
- 0x6CEE, 0x396F, 0x6CEF, 0x1520, 0x6CF0, 0x0B39, 0x6CF1, 0x1515,
- 0x6CF3, 0x04ED, 0x6CFB, 0x4222, 0x6D00, 0x4606, 0x6D01, 0x3C35,
- 0x6D04, 0x2143, 0x6D0A, 0x3970, 0x6D0B, 0x0F38, 0x6D0C, 0x152D,
- 0x6D0E, 0x3971, 0x6D11, 0x3972, 0x6D12, 0x152C, 0x6D17, 0x0A9A,
- 0x6D19, 0x1529, 0x6D1B, 0x0F56, 0x6D1E, 0x0C8E, 0x6D1F, 0x1523,
- 0x6D24, 0x4607, 0x6D25, 0x0BE1, 0x6D26, 0x4608, 0x6D27, 0x4609,
- 0x6D29, 0x04EE, 0x6D2A, 0x07D1, 0x6D2B, 0x1526, 0x6D2E, 0x3973,
- 0x6D2F, 0x460B, 0x6D31, 0x4224, 0x6D32, 0x0931, 0x6D33, 0x152B,
- 0x6D34, 0x461E, 0x6D35, 0x152A, 0x6D36, 0x1525, 0x6D38, 0x1528,
- 0x6D39, 0x4225, 0x6D3B, 0x05C6, 0x6D3C, 0x460C, 0x6D3D, 0x1527,
- 0x6D3E, 0x0CFF, 0x6D3F, 0x4226, 0x6D41, 0x0F76, 0x6D44, 0x09DC,
- 0x6D45, 0x0A99, 0x6D57, 0x3974, 0x6D58, 0x4227, 0x6D59, 0x1533,
- 0x6D5A, 0x1531, 0x6D5B, 0x460D, 0x6D5C, 0x0DBF, 0x6D5E, 0x3975,
- 0x6D60, 0x460E, 0x6D61, 0x4C24, 0x6D63, 0x152E, 0x6D64, 0x1530,
- 0x6D65, 0x3976, 0x6D66, 0x04DC, 0x6D69, 0x07D2, 0x6D6A, 0x0FD8,
- 0x6D6C, 0x059B, 0x6D6E, 0x0DD4, 0x6D6F, 0x2145, 0x6D70, 0x460F,
- 0x6D74, 0x0F4B, 0x6D77, 0x0582, 0x6D78, 0x0A01, 0x6D79, 0x1532,
- 0x6D7C, 0x4C25, 0x6D80, 0x4610, 0x6D81, 0x4611, 0x6D82, 0x3977,
- 0x6D85, 0x1537, 0x6D87, 0x2144, 0x6D88, 0x09AB, 0x6D89, 0x342A,
- 0x6D8A, 0x4612, 0x6D8C, 0x0F1A, 0x6D8D, 0x4613, 0x6D8E, 0x1534,
- 0x6D91, 0x4614, 0x6D93, 0x152F, 0x6D94, 0x4228, 0x6D95, 0x1535,
- 0x6D96, 0x2146, 0x6D98, 0x4615, 0x6D99, 0x0FA6, 0x6D9B, 0x0C6D,
- 0x6D9C, 0x0C9A, 0x6DAA, 0x4229, 0x6DAB, 0x461A, 0x6DAC, 0x2147,
- 0x6DAE, 0x461B, 0x6DAF, 0x0594, 0x6DB2, 0x04F7, 0x6DB4, 0x461C,
- 0x6DB5, 0x153B, 0x6DB8, 0x153E, 0x6DB9, 0x4C26, 0x6DBC, 0x0F8B,
- 0x6DBF, 0x3978, 0x6DC0, 0x0F4E, 0x6DC2, 0x461D, 0x6DC4, 0x3979,
- 0x6DC5, 0x1545, 0x6DC6, 0x153F, 0x6DC7, 0x153C, 0x6DC8, 0x461F,
- 0x6DCA, 0x397A, 0x6DCB, 0x0F9C, 0x6DCC, 0x1542, 0x6DCE, 0x4620,
- 0x6DCF, 0x2148, 0x6DD0, 0x3C36, 0x6DD1, 0x0954, 0x6DD2, 0x1544,
- 0x6DD5, 0x1549, 0x6DD6, 0x397B, 0x6DD8, 0x0C6B, 0x6DD9, 0x1547,
- 0x6DDA, 0x3453, 0x6DDB, 0x422A, 0x6DDD, 0x422B, 0x6DDE, 0x1541,
- 0x6DDF, 0x4621, 0x6DE1, 0x0B76, 0x6DE4, 0x1548, 0x6DE6, 0x153D,
- 0x6DE8, 0x1543, 0x6DE9, 0x397C, 0x6DEA, 0x154A, 0x6DEB, 0x04C0,
- 0x6DEC, 0x1540, 0x6DEE, 0x154B, 0x6DF0, 0x4C27, 0x6DF1, 0x0A02,
- 0x6DF2, 0x214A, 0x6DF3, 0x0969, 0x6DF5, 0x0DF5, 0x6DF6, 0x4622,
- 0x6DF7, 0x081E, 0x6DF8, 0x2149, 0x6DF9, 0x1538, 0x6DFA, 0x1546,
- 0x6DFB, 0x0C34, 0x6DFC, 0x214B, 0x6E05, 0x0A5A, 0x6E07, 0x05C7,
- 0x6E08, 0x0841, 0x6E09, 0x09AC, 0x6E0A, 0x153A, 0x6E0B, 0x094C,
- 0x6E13, 0x0722, 0x6E15, 0x1539, 0x6E17, 0x3746, 0x6E19, 0x154F,
- 0x6E1A, 0x0977, 0x6E1B, 0x076E, 0x6E1D, 0x155E, 0x6E1E, 0x4624,
- 0x6E1F, 0x1558, 0x6E20, 0x068E, 0x6E21, 0x0C49, 0x6E22, 0x397D,
- 0x6E23, 0x1553, 0x6E24, 0x155C, 0x6E25, 0x0473, 0x6E26, 0x04D4,
- 0x6E27, 0x214E, 0x6E29, 0x0539, 0x6E2B, 0x1555, 0x6E2C, 0x0B0C,
- 0x6E2D, 0x154C, 0x6E2E, 0x154E, 0x6E2F, 0x07D3, 0x6E32, 0x4626,
- 0x6E34, 0x3412, 0x6E36, 0x4623, 0x6E38, 0x155F, 0x6E39, 0x214C,
- 0x6E3A, 0x155A, 0x6E3C, 0x214F, 0x6E3E, 0x1552, 0x6E42, 0x3C37,
- 0x6E43, 0x1559, 0x6E44, 0x422C, 0x6E45, 0x4C28, 0x6E48, 0x4627,
- 0x6E49, 0x4628, 0x6E4A, 0x0EB7, 0x6E4B, 0x4629, 0x6E4C, 0x462A,
- 0x6E4D, 0x1557, 0x6E4E, 0x155B, 0x6E4F, 0x462B, 0x6E51, 0x397E,
- 0x6E53, 0x462C, 0x6E54, 0x462D, 0x6E56, 0x0784, 0x6E57, 0x462E,
- 0x6E58, 0x09AD, 0x6E5B, 0x0B77, 0x6E5C, 0x214D, 0x6E5E, 0x422D,
- 0x6E5F, 0x1551, 0x6E63, 0x462F, 0x6E67, 0x0F19, 0x6E6B, 0x1554,
- 0x6E6E, 0x154D, 0x6E6F, 0x0C6C, 0x6E72, 0x1550, 0x6E73, 0x4C29,
- 0x6E76, 0x1556, 0x6E7B, 0x4C2A, 0x6E7D, 0x4C2B, 0x6E7E, 0x0FF7,
- 0x6E7F, 0x08EA, 0x6E80, 0x0EAC, 0x6E82, 0x1560, 0x6E89, 0x4C2C,
- 0x6E8C, 0x0D42, 0x6E8F, 0x156C, 0x6E90, 0x076F, 0x6E93, 0x4631,
- 0x6E96, 0x096A, 0x6E98, 0x1562, 0x6E9C, 0x0F77, 0x6E9D, 0x07D4,
- 0x6E9F, 0x156F, 0x6EA2, 0x04B2, 0x6EA5, 0x156D, 0x6EA7, 0x4632,
- 0x6EAA, 0x1561, 0x6EAB, 0x340C, 0x6EAF, 0x1567, 0x6EB1, 0x422E,
- 0x6EB2, 0x1569, 0x6EB4, 0x4633, 0x6EB6, 0x0F39, 0x6EB7, 0x1564,
- 0x6EBA, 0x0C28, 0x6EBC, 0x4C2D, 0x6EBD, 0x1566, 0x6EBF, 0x2150,
- 0x6EC1, 0x422F, 0x6EC2, 0x156E, 0x6EC3, 0x4634, 0x6EC4, 0x1568,
- 0x6EC5, 0x0ED3, 0x6EC7, 0x397F, 0x6EC9, 0x1563, 0x6ECA, 0x3980,
- 0x6ECB, 0x08CE, 0x6ECC, 0x157B, 0x6ECE, 0x3981, 0x6ED1, 0x05C8,
- 0x6ED3, 0x1565, 0x6ED4, 0x156A, 0x6ED5, 0x156B, 0x6ED9, 0x3C38,
- 0x6EDA, 0x4C2E, 0x6EDB, 0x4C2F, 0x6EDD, 0x0B4C, 0x6EDE, 0x0B3A,
- 0x6EE6, 0x3C24, 0x6EEB, 0x4636, 0x6EEC, 0x1573, 0x6EEF, 0x1579,
- 0x6EF2, 0x1577, 0x6EF4, 0x0C23, 0x6EF7, 0x157E, 0x6EF8, 0x1574,
- 0x6EF9, 0x4637, 0x6EFB, 0x4638, 0x6EFD, 0x3982, 0x6EFE, 0x1575,
- 0x6EFF, 0x155D, 0x6F01, 0x0693, 0x6F02, 0x0DAC, 0x6F06, 0x08EB,
- 0x6F09, 0x0809, 0x6F0A, 0x4639, 0x6F0C, 0x463A, 0x6F0F, 0x0FD9,
- 0x6F10, 0x4230, 0x6F11, 0x1571, 0x6F13, 0x157D, 0x6F14, 0x050B,
- 0x6F15, 0x0AE8, 0x6F18, 0x463B, 0x6F1A, 0x3983, 0x6F20, 0x0D2F,
- 0x6F22, 0x05FD, 0x6F23, 0x0FC2, 0x6F25, 0x463C, 0x6F26, 0x4C30,
- 0x6F29, 0x4C31, 0x6F2A, 0x3984, 0x6F2B, 0x0EAD, 0x6F2C, 0x0BEE,
- 0x6F2F, 0x3985, 0x6F30, 0x4C32, 0x6F31, 0x1578, 0x6F32, 0x157A,
- 0x6F33, 0x3986, 0x6F35, 0x4635, 0x6F36, 0x463D, 0x6F38, 0x0AB4,
- 0x6F3C, 0x463E, 0x6F3E, 0x157C, 0x6F3F, 0x1576, 0x6F41, 0x1570,
- 0x6F45, 0x05FF, 0x6F51, 0x1E60, 0x6F52, 0x4640, 0x6F54, 0x073F,
- 0x6F57, 0x4641, 0x6F58, 0x158A, 0x6F59, 0x4231, 0x6F5A, 0x3987,
- 0x6F5B, 0x1585, 0x6F5C, 0x0A9C, 0x6F5E, 0x3988, 0x6F5F, 0x05C1,
- 0x6F60, 0x4642, 0x6F61, 0x4232, 0x6F62, 0x3989, 0x6F64, 0x096B,
- 0x6F66, 0x158E, 0x6F68, 0x4643, 0x6F6D, 0x1587, 0x6F6E, 0x0BC8,
- 0x6F6F, 0x1584, 0x6F70, 0x0BF5, 0x6F74, 0x15A7, 0x6F78, 0x1581,
- 0x6F7A, 0x1580, 0x6F7C, 0x1589, 0x6F7D, 0x398A, 0x6F7E, 0x4233,
- 0x6F80, 0x1583, 0x6F81, 0x1582, 0x6F82, 0x1588, 0x6F84, 0x0A45,
- 0x6F86, 0x157F, 0x6F87, 0x4C33, 0x6F88, 0x2151, 0x6F8B, 0x398B,
- 0x6F8C, 0x4234, 0x6F8D, 0x398C, 0x6F8E, 0x158B, 0x6F90, 0x4644,
- 0x6F91, 0x158C, 0x6F92, 0x398D, 0x6F94, 0x398E, 0x6F96, 0x4645,
- 0x6F97, 0x05FE, 0x6F98, 0x363C, 0x6F9A, 0x398F, 0x6F9D, 0x4C34,
- 0x6F9F, 0x4647, 0x6FA0, 0x4235, 0x6FA1, 0x1591, 0x6FA3, 0x1590,
- 0x6FA4, 0x1592, 0x6FA5, 0x4648, 0x6FA7, 0x3990, 0x6FA8, 0x3991,
- 0x6FAA, 0x1595, 0x6FAE, 0x4C35, 0x6FAF, 0x4649, 0x6FB1, 0x0C3D,
- 0x6FB3, 0x158F, 0x6FB5, 0x2152, 0x6FB6, 0x3992, 0x6FB7, 0x4C36,
- 0x6FB9, 0x1593, 0x6FBC, 0x4236, 0x6FBE, 0x4646, 0x6FC0, 0x0739,
- 0x6FC1, 0x0B59, 0x6FC2, 0x158D, 0x6FC3, 0x0CF1, 0x6FC6, 0x1594,
- 0x6FC7, 0x4237, 0x6FC8, 0x464B, 0x6FC9, 0x464C, 0x6FCA, 0x4238,
- 0x6FD4, 0x1599, 0x6FD5, 0x1597, 0x6FD8, 0x159A, 0x6FDA, 0x3993,
- 0x6FDB, 0x159D, 0x6FDE, 0x3994, 0x6FDF, 0x1596, 0x6FE0, 0x07FC,
- 0x6FE1, 0x0CDE, 0x6FE4, 0x1536, 0x6FE9, 0x464D, 0x6FEB, 0x0F5E,
- 0x6FEC, 0x1598, 0x6FEE, 0x159C, 0x6FEF, 0x0B55, 0x6FF0, 0x4239,
- 0x6FF1, 0x159B, 0x6FF3, 0x1586, 0x6FF5, 0x2153, 0x6FF6, 0x1BA4,
- 0x6FF9, 0x3C23, 0x6FFA, 0x15A0, 0x6FFC, 0x464F, 0x6FFE, 0x15A4,
- 0x7000, 0x4650, 0x7001, 0x15A2, 0x7005, 0x2154, 0x7006, 0x1E50,
- 0x7007, 0x2155, 0x7009, 0x159E, 0x700A, 0x4651, 0x700B, 0x159F,
- 0x700D, 0x4C37, 0x700F, 0x15A3, 0x7011, 0x15A1, 0x7015, 0x0DC0,
- 0x7018, 0x15A9, 0x701A, 0x15A6, 0x701B, 0x15A5, 0x701D, 0x15A8,
- 0x701E, 0x0CAC, 0x701F, 0x15AA, 0x7020, 0x4C38, 0x7023, 0x4652,
- 0x7026, 0x0BB3, 0x7027, 0x0B4D, 0x7028, 0x2156, 0x702C, 0x0A49,
- 0x7030, 0x15AB, 0x7032, 0x15AD, 0x7039, 0x3996, 0x703A, 0x4654,
- 0x703C, 0x3997, 0x703E, 0x15AC, 0x7043, 0x4655, 0x7047, 0x4656,
- 0x7049, 0x4C39, 0x704A, 0x4F52, 0x704B, 0x4657, 0x704C, 0x1572,
- 0x704E, 0x423A, 0x7051, 0x15AE, 0x7054, 0x3999, 0x7058, 0x0CBF,
- 0x705D, 0x399A, 0x705E, 0x399B, 0x7063, 0x15AF, 0x7064, 0x399C,
- 0x7065, 0x4659, 0x7069, 0x465A, 0x706B, 0x0550, 0x706C, 0x399D,
- 0x706E, 0x465B, 0x706F, 0x0C6E, 0x7070, 0x0583, 0x7075, 0x423B,
- 0x7076, 0x465C, 0x7078, 0x067E, 0x707C, 0x090A, 0x707D, 0x0842,
- 0x707E, 0x399E, 0x7081, 0x399F, 0x7085, 0x2157, 0x7086, 0x465D,
- 0x7089, 0x0FCD, 0x708A, 0x0A2C, 0x708E, 0x050C, 0x7092, 0x15B1,
- 0x7095, 0x39A0, 0x7097, 0x465E, 0x7098, 0x4C3A, 0x7099, 0x15B0,
- 0x709F, 0x4660, 0x70A4, 0x423C, 0x70AB, 0x2158, 0x70AC, 0x15B4,
- 0x70AD, 0x0B78, 0x70AE, 0x15B7, 0x70AF, 0x15B2, 0x70B0, 0x4C3B,
- 0x70B1, 0x4661, 0x70B3, 0x15B6, 0x70B7, 0x39A1, 0x70B8, 0x15B5,
- 0x70B9, 0x0C3A, 0x70BA, 0x049D, 0x70BB, 0x20AD, 0x70C8, 0x0FBD,
- 0x70CA, 0x4664, 0x70CB, 0x15B9, 0x70CF, 0x04CA, 0x70D1, 0x4665,
- 0x70D3, 0x39A2, 0x70D4, 0x39A3, 0x70D5, 0x4C3C, 0x70D6, 0x4C3D,
- 0x70D8, 0x39A4, 0x70D9, 0x15BB, 0x70DC, 0x39A5, 0x70DD, 0x15BA,
- 0x70DF, 0x15B8, 0x70E4, 0x423D, 0x70EC, 0x4663, 0x70F1, 0x15B3,
- 0x70F9, 0x0E51, 0x70FD, 0x15BD, 0x7103, 0x4666, 0x7104, 0x215A,
- 0x7106, 0x4667, 0x7107, 0x39A6, 0x7108, 0x4668, 0x7109, 0x15BC,
- 0x710C, 0x4669, 0x710F, 0x2159, 0x7114, 0x050D, 0x7119, 0x15BF,
- 0x711A, 0x0E02, 0x711C, 0x15BE, 0x711E, 0x423F, 0x7120, 0x39A7,
- 0x7121, 0x0EC1, 0x7126, 0x09AF, 0x712B, 0x423E, 0x712E, 0x4240,
- 0x712F, 0x466B, 0x7130, 0x1DDC, 0x7131, 0x39A8, 0x7136, 0x0AB5,
- 0x713C, 0x09AE, 0x7145, 0x4C3E, 0x7146, 0x215C, 0x7147, 0x215D,
- 0x7149, 0x0FC3, 0x714A, 0x39A9, 0x714C, 0x15C5, 0x714E, 0x0A9D,
- 0x7150, 0x466C, 0x7151, 0x4241, 0x7152, 0x39AA, 0x7153, 0x466D,
- 0x7155, 0x15C1, 0x7156, 0x15C6, 0x7159, 0x050E, 0x715C, 0x215B,
- 0x715E, 0x466E, 0x7160, 0x39AB, 0x7162, 0x15C4, 0x7164, 0x0D17,
- 0x7165, 0x15C0, 0x7166, 0x15C3, 0x7167, 0x09B0, 0x7168, 0x4242,
- 0x7169, 0x0D65, 0x716C, 0x15C7, 0x716E, 0x08FD, 0x7179, 0x39AC,
- 0x717D, 0x0A9E, 0x7180, 0x4671, 0x7184, 0x15CA, 0x7185, 0x4243,
- 0x7187, 0x4244, 0x7188, 0x15C2, 0x718A, 0x06FD, 0x718F, 0x15C8,
- 0x7192, 0x39AD, 0x7194, 0x0F3A, 0x7195, 0x15CB, 0x7196, 0x4670,
- 0x7199, 0x205D, 0x719B, 0x4672, 0x719F, 0x0959, 0x71A0, 0x4673,
- 0x71A2, 0x4674, 0x71A8, 0x15CC, 0x71AC, 0x15CD, 0x71AE, 0x4675,
- 0x71AF, 0x4676, 0x71B1, 0x0CE4, 0x71B2, 0x4C3F, 0x71B3, 0x3C25,
- 0x71B9, 0x15CF, 0x71BA, 0x4245, 0x71BE, 0x15D0, 0x71C1, 0x215F,
- 0x71C3, 0x0CE9, 0x71C4, 0x4246, 0x71C8, 0x0C6F, 0x71C9, 0x15D2,
- 0x71CB, 0x39AF, 0x71CE, 0x15D4, 0x71D0, 0x0F9D, 0x71D2, 0x15D1,
- 0x71D3, 0x39B0, 0x71D4, 0x15D3, 0x71D5, 0x050F, 0x71D6, 0x39B1,
- 0x71D7, 0x15CE, 0x71D9, 0x4678, 0x71DC, 0x4679, 0x71DF, 0x114E,
- 0x71E0, 0x15D5, 0x71E5, 0x0AE9, 0x71E6, 0x0886, 0x71E7, 0x15D7,
- 0x71EC, 0x15D6, 0x71ED, 0x09EA, 0x71EE, 0x10EE, 0x71F4, 0x4C40,
- 0x71F5, 0x15D8, 0x71F9, 0x15DA, 0x71FB, 0x15C9, 0x71FC, 0x15D9,
- 0x71FE, 0x2160, 0x71FF, 0x15DB, 0x7200, 0x39B2, 0x7206, 0x0D30,
- 0x7207, 0x467A, 0x720D, 0x15DC, 0x7210, 0x15DD, 0x7215, 0x4247,
- 0x7217, 0x4C41, 0x721B, 0x15DE, 0x721D, 0x39B3, 0x721F, 0x4C42,
- 0x7228, 0x15DF, 0x722A, 0x0BFA, 0x722B, 0x39B4, 0x722C, 0x15E1,
- 0x722D, 0x15E0, 0x7230, 0x15E2, 0x7232, 0x15E3, 0x7234, 0x467C,
- 0x7235, 0x090B, 0x7236, 0x0DD5, 0x7238, 0x39B5, 0x7239, 0x467D,
- 0x723A, 0x0EF8, 0x723B, 0x15E4, 0x723C, 0x15E5, 0x723D, 0x0AD8,
- 0x723E, 0x08D0, 0x723F, 0x15E6, 0x7240, 0x15E7, 0x7241, 0x39B6,
- 0x7242, 0x467E, 0x7243, 0x4C43, 0x7246, 0x15E8, 0x7247, 0x0E22,
- 0x7248, 0x0D5B, 0x724B, 0x15E9, 0x724C, 0x0D0D, 0x724F, 0x4C44,
- 0x7250, 0x4C45, 0x7252, 0x0BC9, 0x7253, 0x39B7, 0x7255, 0x39B8,
- 0x7256, 0x39B9, 0x7257, 0x467F, 0x7258, 0x15EA, 0x7259, 0x0567,
- 0x725A, 0x4C46, 0x725B, 0x0687, 0x725C, 0x39BA, 0x725D, 0x0ED2,
- 0x725F, 0x0EC2, 0x7260, 0x4C47, 0x7261, 0x0534, 0x7262, 0x0FDA,
- 0x7263, 0x4680, 0x7267, 0x0E80, 0x7268, 0x4C48, 0x7269, 0x0DFA,
- 0x726E, 0x4682, 0x726F, 0x4683, 0x7272, 0x0A5B, 0x7274, 0x15EB,
- 0x7277, 0x4C49, 0x7278, 0x4684, 0x7279, 0x0C9B, 0x727D, 0x0757,
- 0x727E, 0x15EC, 0x727F, 0x4685, 0x7280, 0x0844, 0x7281, 0x15EE,
- 0x7282, 0x15ED, 0x7284, 0x4C4A, 0x7287, 0x15EF, 0x728D, 0x39BB,
- 0x728E, 0x4686, 0x7292, 0x15F0, 0x7296, 0x15F1, 0x729B, 0x4249,
- 0x72A0, 0x0658, 0x72A2, 0x15F2, 0x72A7, 0x15F3, 0x72AC, 0x0758,
- 0x72AD, 0x39BC, 0x72AE, 0x4688, 0x72AF, 0x0D5C, 0x72B0, 0x4689,
- 0x72B1, 0x2161, 0x72B2, 0x15F5, 0x72B4, 0x39BD, 0x72B6, 0x09DD,
- 0x72B9, 0x15F4, 0x72BE, 0x2162, 0x72C0, 0x342B, 0x72C1, 0x468A,
- 0x72C2, 0x06B0, 0x72C3, 0x15F6, 0x72C4, 0x15F8, 0x72C6, 0x15F7,
- 0x72C7, 0x39BE, 0x72C9, 0x4C4B, 0x72CC, 0x468C, 0x72CE, 0x15F9,
- 0x72D0, 0x0785, 0x72D2, 0x15FA, 0x72D7, 0x06E1, 0x72D9, 0x0AC2,
- 0x72DB, 0x080F, 0x72E0, 0x15FC, 0x72E1, 0x15FD, 0x72E2, 0x15FB,
- 0x72E5, 0x4C4C, 0x72E9, 0x0919, 0x72EC, 0x0CA0, 0x72ED, 0x06B1,
- 0x72F3, 0x468F, 0x72F4, 0x4C4D, 0x72F7, 0x15FF, 0x72F8, 0x0B6A,
- 0x72F9, 0x15FE, 0x72FA, 0x4690, 0x72FB, 0x39BF, 0x72FC, 0x0FDB,
- 0x72FD, 0x0D18, 0x7302, 0x4C4E, 0x7304, 0x39C0, 0x7305, 0x39C1,
- 0x7307, 0x4691, 0x730A, 0x1602, 0x730B, 0x4C4F, 0x7312, 0x4692,
- 0x7316, 0x1604, 0x7317, 0x1601, 0x7318, 0x4693, 0x7319, 0x4694,
- 0x731B, 0x0EE0, 0x731C, 0x1603, 0x731D, 0x1605, 0x731E, 0x4C50,
- 0x731F, 0x0F8C, 0x7322, 0x4C51, 0x7324, 0x2163, 0x7325, 0x1609,
- 0x7327, 0x424B, 0x7328, 0x39C2, 0x7329, 0x1608, 0x732A, 0x0BB4,
- 0x732B, 0x0CE3, 0x732C, 0x4697, 0x732E, 0x0759, 0x732F, 0x1607,
- 0x7331, 0x39C3, 0x7333, 0x4698, 0x7334, 0x1606, 0x7336, 0x0F1B,
- 0x7337, 0x0F1C, 0x7339, 0x4696, 0x733A, 0x4C52, 0x733B, 0x4C53,
- 0x733D, 0x4699, 0x733E, 0x160A, 0x733F, 0x0510, 0x7343, 0x39C4,
- 0x7344, 0x0808, 0x7345, 0x08B0, 0x734D, 0x4C54, 0x734E, 0x160B,
- 0x734F, 0x160C, 0x7350, 0x424C, 0x7352, 0x469A, 0x7357, 0x160E,
- 0x7358, 0x4C55, 0x7363, 0x094D, 0x7366, 0x424D, 0x7367, 0x4C56,
- 0x7368, 0x1610, 0x736A, 0x160F, 0x736B, 0x469C, 0x736C, 0x39C5,
- 0x736E, 0x469E, 0x736F, 0x469F, 0x7370, 0x1611, 0x7371, 0x46A0,
- 0x7372, 0x05AB, 0x7375, 0x1613, 0x7377, 0x2165, 0x7378, 0x1612,
- 0x737A, 0x1615, 0x737B, 0x1614, 0x737C, 0x39C6, 0x7381, 0x46A1,
- 0x7383, 0x39C7, 0x7384, 0x0770, 0x7385, 0x39C8, 0x7386, 0x39C9,
- 0x7387, 0x0F70, 0x7389, 0x06C4, 0x738A, 0x46A2, 0x738B, 0x0526,
- 0x7394, 0x46A3, 0x7395, 0x39CA, 0x7396, 0x06E2, 0x7398, 0x46A4,
- 0x739C, 0x46A5, 0x739E, 0x39CB, 0x739F, 0x39CC, 0x73A0, 0x39CD,
- 0x73A2, 0x424E, 0x73A5, 0x46A6, 0x73A6, 0x39CE, 0x73A8, 0x3C3F,
- 0x73A9, 0x061D, 0x73AB, 0x39CF, 0x73B2, 0x0FB0, 0x73B3, 0x1617,
- 0x73B5, 0x39D0, 0x73B7, 0x39D1, 0x73B9, 0x46A7, 0x73BA, 0x35EA,
- 0x73BB, 0x1619, 0x73BC, 0x39D2, 0x73BD, 0x2166, 0x73BF, 0x46A8,
- 0x73C0, 0x161A, 0x73C2, 0x0551, 0x73C5, 0x46A9, 0x73C8, 0x1616,
- 0x73C9, 0x2167, 0x73CA, 0x0887, 0x73CB, 0x46AA, 0x73CD, 0x0BDD,
- 0x73CE, 0x1618, 0x73CF, 0x39D3, 0x73D2, 0x216A, 0x73D6, 0x2168,
- 0x73D9, 0x39D4, 0x73DE, 0x161D, 0x73E0, 0x091A, 0x73E1, 0x46AB,
- 0x73E3, 0x2169, 0x73E4, 0x3C39, 0x73E5, 0x161B, 0x73E7, 0x46AC,
- 0x73E9, 0x39D5, 0x73EA, 0x0714, 0x73ED, 0x0D5D, 0x73EE, 0x161C,
- 0x73F1, 0x1637, 0x73F4, 0x39D6, 0x73F5, 0x216C, 0x73F8, 0x1622,
- 0x73F9, 0x46AD, 0x73FA, 0x46AF, 0x73FD, 0x39D7, 0x73FE, 0x0771,
- 0x7401, 0x46B0, 0x7403, 0x067F, 0x7404, 0x39D8, 0x7405, 0x161F,
- 0x7406, 0x0F67, 0x7407, 0x216B, 0x7409, 0x0F78, 0x740A, 0x39D9,
- 0x7413, 0x46AE, 0x741A, 0x39DA, 0x741B, 0x39DB, 0x7421, 0x3C3A,
- 0x7422, 0x0B56, 0x7424, 0x39DC, 0x7425, 0x1621, 0x7426, 0x216D,
- 0x7428, 0x39DD, 0x7429, 0x216F, 0x742A, 0x216E, 0x742B, 0x424F,
- 0x742C, 0x39DE, 0x742E, 0x2170, 0x742F, 0x39DF, 0x7430, 0x39E0,
- 0x7431, 0x39E1, 0x7432, 0x1623, 0x7433, 0x0F9E, 0x7434, 0x06CF,
- 0x7435, 0x0D90, 0x7436, 0x0D00, 0x7439, 0x39E2, 0x743A, 0x1624,
- 0x743F, 0x1626, 0x7440, 0x46B2, 0x7441, 0x1629, 0x7443, 0x46B3,
- 0x7444, 0x39E3, 0x7446, 0x4250, 0x7447, 0x39E4, 0x744B, 0x39E5,
- 0x744D, 0x39E6, 0x7451, 0x39E7, 0x7452, 0x46B4, 0x7453, 0x46B1,
- 0x7455, 0x1625, 0x7457, 0x39E8, 0x7459, 0x1628, 0x745A, 0x079E,
- 0x745B, 0x04EF, 0x745C, 0x162A, 0x745D, 0x46B5, 0x745E, 0x0A36,
- 0x745F, 0x1627, 0x7460, 0x0FA4, 0x7462, 0x4251, 0x7463, 0x162D,
- 0x7464, 0x1D35, 0x7466, 0x39E9, 0x7469, 0x162B, 0x746A, 0x162E,
- 0x746B, 0x39EA, 0x746D, 0x4252, 0x746F, 0x1620, 0x7470, 0x162C,
- 0x7471, 0x39EB, 0x7472, 0x4C57, 0x7473, 0x082C, 0x7476, 0x162F,
- 0x747E, 0x1630, 0x7480, 0x39EC, 0x7481, 0x46B6, 0x7483, 0x0F68,
- 0x7485, 0x39ED, 0x7486, 0x39EE, 0x7487, 0x39EF, 0x7488, 0x46B7,
- 0x7489, 0x2172, 0x748B, 0x1631, 0x7490, 0x39F0, 0x7492, 0x46B9,
- 0x7497, 0x46BA, 0x7498, 0x39F1, 0x7499, 0x46BB, 0x749C, 0x39F2,
- 0x749E, 0x1632, 0x749F, 0x2173, 0x74A0, 0x39F3, 0x74A1, 0x46BC,
- 0x74A2, 0x161E, 0x74A3, 0x39F4, 0x74A5, 0x46BD, 0x74A6, 0x4253,
- 0x74A7, 0x1633, 0x74A8, 0x39F5, 0x74A9, 0x4254, 0x74AA, 0x46BE,
- 0x74AB, 0x39F6, 0x74AF, 0x4C58, 0x74B0, 0x0600, 0x74B5, 0x39F7,
- 0x74B9, 0x46BF, 0x74BA, 0x46C1, 0x74BB, 0x46C0, 0x74BD, 0x08D1,
- 0x74BF, 0x39F8, 0x74C8, 0x39F9, 0x74C9, 0x4255, 0x74CA, 0x1634,
- 0x74CF, 0x1635, 0x74D4, 0x1636, 0x74D6, 0x46C2, 0x74D8, 0x46C3,
- 0x74DA, 0x39FA, 0x74DC, 0x04DD, 0x74DE, 0x39FB, 0x74DF, 0x4C59,
- 0x74E0, 0x1638, 0x74E2, 0x0DAD, 0x74E3, 0x1639, 0x74E4, 0x4C5A,
- 0x74E6, 0x05E0, 0x74E7, 0x163A, 0x74E9, 0x163B, 0x74EB, 0x46C4,
- 0x74EE, 0x163C, 0x74EF, 0x3750, 0x74F0, 0x163E, 0x74F1, 0x163F,
- 0x74F2, 0x163D, 0x74F4, 0x4C5B, 0x74F6, 0x0DC5, 0x74F7, 0x1641,
- 0x74F8, 0x1640, 0x74FA, 0x46C6, 0x74FB, 0x4C5C, 0x74FF, 0x4256,
- 0x7501, 0x2174, 0x7503, 0x1643, 0x7504, 0x1642, 0x7505, 0x1644,
- 0x750C, 0x1645, 0x750D, 0x1647, 0x750E, 0x1646, 0x7511, 0x080B,
- 0x7513, 0x1649, 0x7515, 0x1648, 0x7516, 0x4C5D, 0x7517, 0x4257,
- 0x7518, 0x0601, 0x751A, 0x0A19, 0x751C, 0x0C36, 0x751E, 0x164A,
- 0x751F, 0x0A5C, 0x7520, 0x46C8, 0x7521, 0x4C5E, 0x7522, 0x35DE,
- 0x7523, 0x0888, 0x7524, 0x46C9, 0x7525, 0x051B, 0x7526, 0x164B,
- 0x7528, 0x0F3B, 0x752A, 0x46CA, 0x752B, 0x0E33, 0x752C, 0x164C,
- 0x752F, 0x20F2, 0x7530, 0x0C3E, 0x7531, 0x0F1D, 0x7532, 0x07D5,
- 0x7533, 0x0A03, 0x7537, 0x0B89, 0x7538, 0x10C9, 0x753A, 0x0BCA,
- 0x753B, 0x0568, 0x753C, 0x164D, 0x753D, 0x46CD, 0x753E, 0x46CE,
- 0x753F, 0x4C5F, 0x7540, 0x46CF, 0x7544, 0x164E, 0x7546, 0x1653,
- 0x7548, 0x46D0, 0x7549, 0x1651, 0x754A, 0x1650, 0x754B, 0x13C7,
- 0x754C, 0x0584, 0x754D, 0x164F, 0x754E, 0x39FC, 0x754F, 0x049E,
- 0x7550, 0x46D1, 0x7551, 0x0D3E, 0x7552, 0x46D2, 0x7554, 0x0D5E,
- 0x7559, 0x0F79, 0x755A, 0x1654, 0x755B, 0x1652, 0x755C, 0x0B9A,
- 0x755D, 0x0A4A, 0x755E, 0x4C60, 0x7560, 0x0D3F, 0x7562, 0x0D9F,
- 0x7564, 0x1656, 0x7565, 0x0F74, 0x7566, 0x0723, 0x7567, 0x1657,
- 0x7569, 0x1655, 0x756A, 0x0D6A, 0x756B, 0x1658, 0x756C, 0x3C3B,
- 0x756D, 0x1659, 0x756F, 0x2175, 0x7570, 0x049F, 0x7571, 0x46D4,
- 0x7572, 0x46D3, 0x7573, 0x09DE, 0x7574, 0x165E, 0x7575, 0x3751,
- 0x7576, 0x165B, 0x7577, 0x0CC5, 0x7578, 0x165A, 0x7579, 0x39FD,
- 0x757A, 0x46D5, 0x757D, 0x46D6, 0x757E, 0x46D7, 0x757F, 0x0640,
- 0x7581, 0x39FE, 0x7582, 0x1661, 0x7586, 0x165C, 0x7587, 0x165D,
- 0x7589, 0x1660, 0x758A, 0x165F, 0x758B, 0x0D97, 0x758C, 0x46D8,
- 0x758E, 0x0AC4, 0x758F, 0x0AC3, 0x7590, 0x39FF, 0x7591, 0x0659,
- 0x7592, 0x3A00, 0x7593, 0x3A01, 0x7594, 0x1662, 0x7599, 0x4C61,
- 0x759A, 0x1663, 0x759D, 0x1664, 0x75A2, 0x46DA, 0x75A3, 0x1666,
- 0x75A4, 0x4C62, 0x75A5, 0x1665, 0x75AB, 0x04F8, 0x75B0, 0x46DC,
- 0x75B1, 0x166E, 0x75B2, 0x0D7C, 0x75B3, 0x1668, 0x75B4, 0x3A02,
- 0x75B5, 0x166A, 0x75B7, 0x46DD, 0x75B8, 0x166C, 0x75B9, 0x0A04,
- 0x75BC, 0x166D, 0x75BD, 0x166B, 0x75BE, 0x08EC, 0x75BF, 0x46DE,
- 0x75C0, 0x46DF, 0x75C1, 0x4C63, 0x75C2, 0x1667, 0x75C3, 0x1669,
- 0x75C4, 0x4C64, 0x75C5, 0x0DB4, 0x75C6, 0x46E0, 0x75C7, 0x09B1,
- 0x75CA, 0x1670, 0x75CC, 0x4C65, 0x75CD, 0x166F, 0x75CE, 0x4259,
- 0x75CF, 0x46E1, 0x75D2, 0x1671, 0x75D3, 0x46E2, 0x75D4, 0x08D2,
- 0x75D5, 0x081F, 0x75D7, 0x4C66, 0x75D8, 0x0C71, 0x75D9, 0x1672,
- 0x75DB, 0x0BE7, 0x75DC, 0x4C67, 0x75DD, 0x46E3, 0x75DE, 0x1674,
- 0x75DF, 0x46E4, 0x75E0, 0x46E5, 0x75E1, 0x4C68, 0x75E2, 0x0F69,
- 0x75E3, 0x1673, 0x75E4, 0x3A03, 0x75E7, 0x46E6, 0x75E9, 0x0AEB,
- 0x75EC, 0x3752, 0x75EE, 0x46E7, 0x75EF, 0x4C69, 0x75F0, 0x1679,
- 0x75F1, 0x46E8, 0x75F2, 0x167B, 0x75F3, 0x167C, 0x75F4, 0x0B92,
- 0x75F9, 0x3A04, 0x75FA, 0x167A, 0x75FC, 0x1677, 0x75FE, 0x1675,
- 0x75FF, 0x1676, 0x7600, 0x3A05, 0x7601, 0x1678, 0x7602, 0x425A,
- 0x7603, 0x46E9, 0x7604, 0x4C6A, 0x7607, 0x46EB, 0x7608, 0x425B,
- 0x7609, 0x167F, 0x760A, 0x3A06, 0x760B, 0x167D, 0x760C, 0x4C6B,
- 0x760D, 0x167E, 0x760F, 0x46EC, 0x7613, 0x46EF, 0x7615, 0x3A07,
- 0x7616, 0x3A08, 0x7618, 0x46EA, 0x7619, 0x3A09, 0x761B, 0x46F0,
- 0x761C, 0x46F1, 0x761D, 0x4C6C, 0x761E, 0x3A0A, 0x761F, 0x1680,
- 0x7620, 0x1682, 0x7621, 0x1683, 0x7622, 0x1684, 0x7624, 0x1685,
- 0x7625, 0x46F3, 0x7626, 0x3645, 0x7627, 0x1681, 0x7628, 0x46F4,
- 0x762D, 0x3A0B, 0x7630, 0x1687, 0x7632, 0x4C6D, 0x7633, 0x46F6,
- 0x7634, 0x1686, 0x7635, 0x3A0C, 0x7638, 0x4C6E, 0x763B, 0x1688,
- 0x763C, 0x46F5, 0x7641, 0x46F9, 0x7642, 0x0F8D, 0x7643, 0x3A0D,
- 0x7645, 0x4C6F, 0x7646, 0x168B, 0x7647, 0x1689, 0x7648, 0x168A,
- 0x7649, 0x46FB, 0x764A, 0x4C70, 0x764B, 0x3A0E, 0x764C, 0x061E,
- 0x764E, 0x3753, 0x7652, 0x0F0A, 0x7655, 0x46FC, 0x7656, 0x0E1A,
- 0x7658, 0x168D, 0x765C, 0x168C, 0x765F, 0x4C71, 0x7661, 0x168E,
- 0x7662, 0x168F, 0x7664, 0x425C, 0x7665, 0x3A0F, 0x7667, 0x1693,
- 0x7668, 0x1690, 0x7669, 0x1691, 0x766A, 0x1692, 0x766C, 0x1694,
- 0x766D, 0x3A10, 0x766E, 0x46FE, 0x766F, 0x3A11, 0x7670, 0x1695,
- 0x7671, 0x3A12, 0x7672, 0x1696, 0x7674, 0x3A13, 0x7676, 0x1697,
- 0x7678, 0x1698, 0x767A, 0x0D43, 0x767B, 0x0C4A, 0x767C, 0x1699,
- 0x767D, 0x0D28, 0x767E, 0x0DA6, 0x7680, 0x169A, 0x7681, 0x425D,
- 0x7682, 0x2176, 0x7683, 0x169B, 0x7684, 0x0C24, 0x7686, 0x0585,
- 0x7687, 0x07D6, 0x7688, 0x169C, 0x768B, 0x169D, 0x768E, 0x169E,
- 0x7690, 0x0877, 0x7693, 0x16A0, 0x7695, 0x46FF, 0x7696, 0x169F,
- 0x7699, 0x16A1, 0x769A, 0x16A2, 0x769B, 0x2179, 0x769C, 0x2177,
- 0x769D, 0x425E, 0x769E, 0x2178, 0x76A0, 0x4701, 0x76A1, 0x4700,
- 0x76A4, 0x3A14, 0x76A5, 0x3A15, 0x76A6, 0x217A, 0x76A7, 0x4702,
- 0x76A8, 0x4703, 0x76AA, 0x425F, 0x76AD, 0x4C72, 0x76AE, 0x0D7D,
- 0x76AF, 0x4704, 0x76B0, 0x16A3, 0x76B4, 0x16A4, 0x76B6, 0x4260,
- 0x76B7, 0x1D1C, 0x76B8, 0x16A5, 0x76B9, 0x16A6, 0x76BA, 0x16A7,
- 0x76BD, 0x4C73, 0x76BF, 0x087C, 0x76C2, 0x16A8, 0x76C3, 0x0D0C,
- 0x76C5, 0x3A16, 0x76C6, 0x0E8D, 0x76C8, 0x04F0, 0x76C9, 0x4706,
- 0x76CA, 0x04F9, 0x76CC, 0x3A17, 0x76CD, 0x16A9, 0x76CE, 0x4261,
- 0x76D2, 0x16AB, 0x76D4, 0x4262, 0x76D6, 0x16AA, 0x76D7, 0x0C6A,
- 0x76D9, 0x4C74, 0x76DB, 0x0A5D, 0x76DC, 0x14D8, 0x76DE, 0x16AC,
- 0x76DF, 0x0ECD, 0x76E1, 0x16AD, 0x76E3, 0x0602, 0x76E4, 0x0D6B,
- 0x76E5, 0x16AE, 0x76E6, 0x4263, 0x76E7, 0x16AF, 0x76E8, 0x4708,
- 0x76EA, 0x16B0, 0x76EB, 0x4C75, 0x76EC, 0x3A18, 0x76EE, 0x0EE8,
- 0x76F0, 0x4C76, 0x76F1, 0x4264, 0x76F2, 0x0EE1, 0x76F4, 0x0BDA,
- 0x76F8, 0x0AEC, 0x76F9, 0x4C77, 0x76FB, 0x16B2, 0x76FC, 0x3A19,
- 0x76FE, 0x096C, 0x7700, 0x4C78, 0x7701, 0x09B2, 0x7704, 0x16B5,
- 0x7707, 0x16B4, 0x7708, 0x16B3, 0x7709, 0x0D91, 0x770A, 0x4265,
- 0x770B, 0x0603, 0x770C, 0x075D, 0x770E, 0x4C79, 0x7717, 0x470A,
- 0x7719, 0x4266, 0x771A, 0x470B, 0x771B, 0x16BB, 0x771E, 0x16B8,
- 0x771F, 0x0A05, 0x7720, 0x0EBE, 0x7722, 0x4C7A, 0x7724, 0x16B7,
- 0x7725, 0x16B9, 0x7726, 0x16BA, 0x7728, 0x4C7B, 0x7729, 0x16B6,
- 0x772D, 0x470C, 0x772F, 0x4C7C, 0x7734, 0x3A1A, 0x7735, 0x470D,
- 0x7736, 0x3A1B, 0x7737, 0x16BC, 0x7738, 0x16BD, 0x7739, 0x4C7D,
- 0x773A, 0x0BCB, 0x773C, 0x061F, 0x773E, 0x4C7E, 0x7740, 0x0BA3,
- 0x7745, 0x4C7F, 0x7746, 0x217C, 0x7747, 0x16BE, 0x774A, 0x4C80,
- 0x774D, 0x4267, 0x774E, 0x4268, 0x774F, 0x4C81, 0x7758, 0x4712,
- 0x775A, 0x16BF, 0x775B, 0x16C2, 0x775C, 0x3A1C, 0x775E, 0x4C82,
- 0x775F, 0x3A1D, 0x7760, 0x3A1E, 0x7761, 0x0A2D, 0x7762, 0x1EC5,
- 0x7763, 0x0C9C, 0x7764, 0x4C83, 0x7765, 0x16C3, 0x7766, 0x0E81,
- 0x7767, 0x4C84, 0x7768, 0x16C0, 0x776A, 0x3755, 0x776B, 0x16C1,
- 0x776C, 0x4C85, 0x7772, 0x3A1F, 0x7779, 0x16C6, 0x777A, 0x4269,
- 0x777C, 0x4714, 0x777D, 0x3A20, 0x777E, 0x16C5, 0x777F, 0x16C4,
- 0x7780, 0x426A, 0x7784, 0x4C86, 0x778B, 0x16C8, 0x778C, 0x4C87,
- 0x778D, 0x4C88, 0x778E, 0x16C7, 0x7791, 0x16C9, 0x7794, 0x426B,
- 0x7795, 0x3A21, 0x7796, 0x4C89, 0x779A, 0x4717, 0x779E, 0x16CB,
- 0x779F, 0x4718, 0x77A0, 0x16CA, 0x77A2, 0x4719, 0x77A4, 0x471A,
- 0x77A5, 0x0E1D, 0x77A7, 0x4C8A, 0x77A9, 0x3756, 0x77AA, 0x3A22,
- 0x77AC, 0x0960, 0x77AD, 0x0F8E, 0x77AF, 0x4C8B, 0x77B0, 0x16CC,
- 0x77B3, 0x0C8F, 0x77B6, 0x16CD, 0x77B7, 0x4C8C, 0x77B9, 0x16CE,
- 0x77BB, 0x16D2, 0x77BC, 0x16D0, 0x77BD, 0x16D1, 0x77BE, 0x4C8D,
- 0x77BF, 0x16CF, 0x77C7, 0x16D3, 0x77C9, 0x4C8E, 0x77CD, 0x16D4,
- 0x77D1, 0x4C8F, 0x77D7, 0x16D5, 0x77D9, 0x4C90, 0x77DA, 0x16D6,
- 0x77DB, 0x0EC3, 0x77DC, 0x16D7, 0x77DE, 0x471B, 0x77DF, 0x471C,
- 0x77E0, 0x426C, 0x77E2, 0x0EFC, 0x77E3, 0x16D8, 0x77E4, 0x471D,
- 0x77E5, 0x0B8C, 0x77E6, 0x3A23, 0x77E7, 0x0D20, 0x77E9, 0x06E3,
- 0x77EA, 0x471E, 0x77EC, 0x471F, 0x77ED, 0x0B79, 0x77EE, 0x16D9,
- 0x77EF, 0x06B2, 0x77F0, 0x3A24, 0x77F1, 0x4C91, 0x77F3, 0x0A74,
- 0x77F4, 0x3A25, 0x77FB, 0x4720, 0x77FC, 0x16DA, 0x7802, 0x082D,
- 0x7805, 0x4722, 0x7806, 0x3A26, 0x7809, 0x4723, 0x780C, 0x16DB,
- 0x780D, 0x4724, 0x7812, 0x16DC, 0x7814, 0x075A, 0x7815, 0x0845,
- 0x7819, 0x4725, 0x7820, 0x16DE, 0x7821, 0x217E, 0x7822, 0x3A27,
- 0x7825, 0x0C50, 0x7826, 0x0846, 0x7827, 0x0668, 0x782C, 0x4726,
- 0x782D, 0x3A28, 0x782E, 0x3A29, 0x7830, 0x3A2A, 0x7832, 0x0E52,
- 0x7834, 0x0D01, 0x7835, 0x3A2B, 0x7837, 0x4C92, 0x783A, 0x0C51,
- 0x783F, 0x07EE, 0x7843, 0x426E, 0x7845, 0x16E0, 0x7847, 0x4727,
- 0x784E, 0x217F, 0x784F, 0x341E, 0x7851, 0x3C3C, 0x785C, 0x4C93,
- 0x785D, 0x09B3, 0x7864, 0x2180, 0x7868, 0x3A2C, 0x786A, 0x4728,
- 0x786B, 0x0F7A, 0x786C, 0x07D7, 0x786E, 0x426F, 0x786F, 0x075B,
- 0x7872, 0x0D37, 0x7874, 0x16E2, 0x787A, 0x2181, 0x787C, 0x16E4,
- 0x787E, 0x4C94, 0x7881, 0x079F, 0x7886, 0x16E3, 0x7887, 0x0C12,
- 0x788A, 0x472A, 0x788C, 0x16E6, 0x788D, 0x0595, 0x788E, 0x16E1,
- 0x7891, 0x0D7E, 0x7893, 0x04D2, 0x7894, 0x472B, 0x7895, 0x085C,
- 0x7897, 0x0FF8, 0x7898, 0x4C95, 0x789A, 0x16E5, 0x789D, 0x472D,
- 0x789E, 0x3A2D, 0x789F, 0x472E, 0x78A1, 0x4C96, 0x78A3, 0x16E7,
- 0x78A4, 0x472C, 0x78A7, 0x0E1B, 0x78A9, 0x0A7D, 0x78AA, 0x16E9,
- 0x78AD, 0x4272, 0x78AF, 0x16EA, 0x78B0, 0x4270, 0x78B1, 0x4C97,
- 0x78B3, 0x4C98, 0x78B5, 0x16E8, 0x78BA, 0x05AC, 0x78BB, 0x472F,
- 0x78BC, 0x16F0, 0x78BE, 0x16EF, 0x78C1, 0x08D3, 0x78C5, 0x16F1,
- 0x78C6, 0x16EC, 0x78C8, 0x3A2E, 0x78C9, 0x4C99, 0x78CA, 0x16F2,
- 0x78CB, 0x16ED, 0x78CC, 0x3A2F, 0x78CE, 0x3A30, 0x78D0, 0x0D6C,
- 0x78D1, 0x16EB, 0x78D3, 0x4C9A, 0x78D4, 0x16EE, 0x78D5, 0x4730,
- 0x78DA, 0x16F5, 0x78E0, 0x3A32, 0x78E1, 0x3A33, 0x78E4, 0x3A31,
- 0x78E6, 0x4731, 0x78E7, 0x16F4, 0x78E8, 0x0E8F, 0x78EC, 0x16F3,
- 0x78EF, 0x04AF, 0x78F2, 0x3A34, 0x78F4, 0x16F7, 0x78F7, 0x3A35,
- 0x78F9, 0x4732, 0x78FA, 0x4733, 0x78FB, 0x3A36, 0x78FD, 0x16F6,
- 0x78FE, 0x4734, 0x7900, 0x4273, 0x7901, 0x09B4, 0x7907, 0x16F8,
- 0x790C, 0x4C9B, 0x790E, 0x0AC5, 0x7910, 0x4736, 0x7911, 0x16FA,
- 0x7912, 0x16F9, 0x7919, 0x16FB, 0x791B, 0x4737, 0x791C, 0x4274,
- 0x791F, 0x4C9C, 0x7925, 0x4738, 0x7926, 0x16DD, 0x7927, 0x4C9D,
- 0x7928, 0x4C9E, 0x792A, 0x16DF, 0x792B, 0x16FD, 0x792C, 0x16FC,
- 0x792E, 0x4275, 0x7930, 0x2182, 0x7931, 0x3A37, 0x7934, 0x4276,
- 0x793A, 0x08D4, 0x793B, 0x3A39, 0x793C, 0x0FB1, 0x793D, 0x3A3A,
- 0x793E, 0x08FE, 0x793F, 0x4C9F, 0x7940, 0x16FE, 0x7941, 0x070D,
- 0x7942, 0x4CA0, 0x7945, 0x3A3B, 0x7946, 0x4277, 0x7947, 0x065A,
- 0x7948, 0x0641, 0x7949, 0x08B1, 0x794A, 0x4739, 0x7950, 0x0F1E,
- 0x7953, 0x1704, 0x7954, 0x4CA1, 0x7955, 0x1703, 0x7956, 0x0AC6,
- 0x7957, 0x1700, 0x7958, 0x473A, 0x795A, 0x1702, 0x795B, 0x3A3C,
- 0x795C, 0x3A3D, 0x795D, 0x0955, 0x795E, 0x0A06, 0x795F, 0x1701,
- 0x7960, 0x16FF, 0x7962, 0x0CE0, 0x7965, 0x09B5, 0x7967, 0x473C,
- 0x7968, 0x0DAE, 0x796B, 0x4CA2, 0x796D, 0x0847, 0x7972, 0x473D,
- 0x7977, 0x0C72, 0x7979, 0x4278, 0x797A, 0x1705, 0x797C, 0x4CA3,
- 0x797F, 0x1706, 0x7980, 0x171C, 0x7981, 0x06D0, 0x7984, 0x0FE3,
- 0x7985, 0x0AB7, 0x798A, 0x1707, 0x798B, 0x3A3E, 0x798D, 0x0552,
- 0x798E, 0x0C13, 0x798F, 0x0DF1, 0x7994, 0x2186, 0x7995, 0x473E,
- 0x7996, 0x3A3F, 0x7998, 0x3A40, 0x799B, 0x2188, 0x799D, 0x1708,
- 0x79A1, 0x473F, 0x79A6, 0x0694, 0x79A7, 0x1709, 0x79A9, 0x4740,
- 0x79AA, 0x170B, 0x79AB, 0x4CA4, 0x79AE, 0x170C, 0x79B0, 0x0CDF,
- 0x79B1, 0x1E4E, 0x79B3, 0x170D, 0x79B4, 0x4741, 0x79B8, 0x3A41,
- 0x79B9, 0x170E, 0x79BA, 0x170F, 0x79BB, 0x3A42, 0x79BD, 0x06D1,
- 0x79BE, 0x0553, 0x79BF, 0x0C9D, 0x79C0, 0x0932, 0x79C1, 0x08B2,
- 0x79C2, 0x4742, 0x79C4, 0x4CA5, 0x79C7, 0x4743, 0x79C8, 0x4279,
- 0x79C9, 0x1710, 0x79CA, 0x3A43, 0x79CB, 0x0933, 0x79CC, 0x4744,
- 0x79CD, 0x4745, 0x79D1, 0x054A, 0x79D2, 0x0DB5, 0x79D4, 0x427B,
- 0x79D5, 0x1711, 0x79D6, 0x4746, 0x79D8, 0x0D7F, 0x79DA, 0x3A44,
- 0x79DE, 0x427C, 0x79DF, 0x0AC7, 0x79E1, 0x1714, 0x79E3, 0x1715,
- 0x79E4, 0x0D1F, 0x79E6, 0x0A07, 0x79E7, 0x1712, 0x79E9, 0x0B9F,
- 0x79EA, 0x4CA6, 0x79EB, 0x427D, 0x79EC, 0x1713, 0x79ED, 0x427E,
- 0x79F0, 0x09B6, 0x79FB, 0x04A0, 0x7A00, 0x0643, 0x7A02, 0x4CA7,
- 0x7A03, 0x3A45, 0x7A05, 0x3633, 0x7A08, 0x1716, 0x7A09, 0x3A46,
- 0x7A0A, 0x474B, 0x7A0B, 0x0C14, 0x7A0C, 0x4CA8, 0x7A0D, 0x1717,
- 0x7A0E, 0x0A6B, 0x7A11, 0x3A47, 0x7A14, 0x0EB9, 0x7A15, 0x474C,
- 0x7A17, 0x0D95, 0x7A18, 0x1718, 0x7A19, 0x1719, 0x7A1A, 0x0B93,
- 0x7A1B, 0x474D, 0x7A1C, 0x0F8F, 0x7A1E, 0x3A48, 0x7A1F, 0x171B,
- 0x7A20, 0x171A, 0x7A2D, 0x3A49, 0x7A2E, 0x091B, 0x7A30, 0x4CA9,
- 0x7A31, 0x171D, 0x7A32, 0x04B4, 0x7A37, 0x1720, 0x7A38, 0x474F,
- 0x7A39, 0x3A4A, 0x7A3A, 0x4CAA, 0x7A3B, 0x171E, 0x7A3C, 0x0554,
- 0x7A3D, 0x0724, 0x7A3E, 0x171F, 0x7A3F, 0x07D8, 0x7A40, 0x0804,
- 0x7A42, 0x0E36, 0x7A43, 0x1721, 0x7A44, 0x4CAB, 0x7A45, 0x3A4B,
- 0x7A46, 0x0E82, 0x7A47, 0x4750, 0x7A49, 0x1723, 0x7A4C, 0x3A4C,
- 0x7A4D, 0x0A75, 0x7A4E, 0x04F1, 0x7A4F, 0x053A, 0x7A50, 0x0470,
- 0x7A56, 0x4751, 0x7A57, 0x1722, 0x7A59, 0x4752, 0x7A5C, 0x4753,
- 0x7A5D, 0x3A4D, 0x7A5F, 0x4754, 0x7A60, 0x4F56, 0x7A61, 0x1724,
- 0x7A62, 0x1725, 0x7A63, 0x09DF, 0x7A67, 0x4755, 0x7A69, 0x1726,
- 0x7A6A, 0x4756, 0x7A6B, 0x05AD, 0x7A6D, 0x3A4F, 0x7A70, 0x1728,
- 0x7A74, 0x0740, 0x7A75, 0x4757, 0x7A76, 0x0680, 0x7A78, 0x3A50,
- 0x7A79, 0x1729, 0x7A7A, 0x06ED, 0x7A7D, 0x172A, 0x7A7F, 0x0AA0,
- 0x7A80, 0x4CAC, 0x7A81, 0x0CA5, 0x7A82, 0x4758, 0x7A83, 0x0A84,
- 0x7A84, 0x0865, 0x7A85, 0x427F, 0x7A86, 0x4CAD, 0x7A88, 0x172B,
- 0x7A8A, 0x4759, 0x7A90, 0x475A, 0x7A92, 0x0BA0, 0x7A93, 0x0AED,
- 0x7A94, 0x4CAE, 0x7A95, 0x172D, 0x7A96, 0x172F, 0x7A97, 0x172C,
- 0x7A98, 0x172E, 0x7A9F, 0x06F8, 0x7AA0, 0x3A51, 0x7AA3, 0x3A52,
- 0x7AA9, 0x1730, 0x7AAA, 0x06FC, 0x7AAC, 0x475B, 0x7AAE, 0x0681,
- 0x7AAF, 0x0F3C, 0x7AB0, 0x1732, 0x7AB3, 0x3A53, 0x7AB5, 0x4CAF,
- 0x7AB6, 0x1733, 0x7AB9, 0x475E, 0x7ABA, 0x04D0, 0x7ABB, 0x3A54,
- 0x7ABC, 0x3A55, 0x7ABD, 0x4CB0, 0x7ABE, 0x475F, 0x7ABF, 0x1736,
- 0x7AC3, 0x05D4, 0x7AC4, 0x1735, 0x7AC5, 0x1734, 0x7AC6, 0x3A56,
- 0x7AC7, 0x1738, 0x7AC8, 0x1731, 0x7ACA, 0x1739, 0x7ACB, 0x0F71,
- 0x7ACC, 0x4761, 0x7ACD, 0x173A, 0x7ACE, 0x4281, 0x7ACF, 0x173B,
- 0x7AD1, 0x2189, 0x7AD2, 0x11C5, 0x7AD3, 0x173D, 0x7AD5, 0x173C,
- 0x7AD9, 0x173E, 0x7ADA, 0x173F, 0x7ADC, 0x0F7D, 0x7ADD, 0x1740,
- 0x7ADF, 0x1C08, 0x7AE0, 0x09B7, 0x7AE1, 0x1741, 0x7AE2, 0x1742,
- 0x7AE3, 0x0961, 0x7AE5, 0x0C90, 0x7AE6, 0x1743, 0x7AE7, 0x218A,
- 0x7AE8, 0x4762, 0x7AEA, 0x0B66, 0x7AEB, 0x218C, 0x7AED, 0x1744,
- 0x7AEF, 0x0B7A, 0x7AF0, 0x1745, 0x7AF4, 0x4763, 0x7AF6, 0x069D,
- 0x7AF8, 0x1076, 0x7AF9, 0x0B9B, 0x7AFA, 0x08DF, 0x7AFD, 0x4282,
- 0x7AFE, 0x4CB1, 0x7AFF, 0x0604, 0x7B02, 0x1746, 0x7B04, 0x1753,
- 0x7B06, 0x1749, 0x7B07, 0x3A57, 0x7B08, 0x0682, 0x7B0A, 0x1748,
- 0x7B0B, 0x1755, 0x7B0F, 0x1747, 0x7B11, 0x09B8, 0x7B12, 0x4283,
- 0x7B14, 0x3A58, 0x7B18, 0x174B, 0x7B19, 0x174C, 0x7B1B, 0x0C25,
- 0x7B1E, 0x174D, 0x7B20, 0x05BC, 0x7B25, 0x0A20, 0x7B26, 0x0DD6,
- 0x7B27, 0x3A59, 0x7B28, 0x174F, 0x7B2A, 0x4768, 0x7B2B, 0x4CB2,
- 0x7B2C, 0x0B48, 0x7B2D, 0x4284, 0x7B2E, 0x4769, 0x7B2F, 0x476A,
- 0x7B31, 0x3A5A, 0x7B33, 0x174A, 0x7B35, 0x174E, 0x7B36, 0x1750,
- 0x7B39, 0x086B, 0x7B3B, 0x4285, 0x7B3D, 0x4767, 0x7B41, 0x476E,
- 0x7B45, 0x1757, 0x7B46, 0x0DA0, 0x7B47, 0x3A5B, 0x7B48, 0x0D3A,
- 0x7B49, 0x0C73, 0x7B4B, 0x06D2, 0x7B4C, 0x1756, 0x7B4D, 0x1754,
- 0x7B4E, 0x3A5C, 0x7B4F, 0x0D49, 0x7B50, 0x1751, 0x7B51, 0x0B9C,
- 0x7B52, 0x0C75, 0x7B53, 0x375D, 0x7B54, 0x0C74, 0x7B55, 0x4770,
- 0x7B56, 0x0866, 0x7B5D, 0x1769, 0x7B60, 0x3A5D, 0x7B64, 0x4772,
- 0x7B65, 0x1759, 0x7B66, 0x4773, 0x7B67, 0x175B, 0x7B69, 0x3A5E,
- 0x7B6C, 0x175E, 0x7B6D, 0x3A5F, 0x7B6E, 0x175F, 0x7B6F, 0x4286,
- 0x7B70, 0x175C, 0x7B71, 0x175D, 0x7B72, 0x3A60, 0x7B73, 0x4774,
- 0x7B74, 0x175A, 0x7B75, 0x1758, 0x7B77, 0x4CB3, 0x7B79, 0x4771,
- 0x7B7A, 0x1752, 0x7B7F, 0x476D, 0x7B86, 0x0E1F, 0x7B87, 0x0555,
- 0x7B8B, 0x1766, 0x7B8D, 0x1763, 0x7B8F, 0x1768, 0x7B90, 0x4777,
- 0x7B91, 0x3A61, 0x7B92, 0x1767, 0x7B94, 0x0D29, 0x7B95, 0x0EB3,
- 0x7B97, 0x0889, 0x7B98, 0x1761, 0x7B99, 0x176A, 0x7B9A, 0x1765,
- 0x7B9B, 0x4778, 0x7B9C, 0x1764, 0x7B9D, 0x1760, 0x7B9E, 0x218D,
- 0x7B9F, 0x1762, 0x7BA0, 0x4CB4, 0x7BA1, 0x0605, 0x7BAA, 0x0B7B,
- 0x7BAC, 0x4CB5, 0x7BAD, 0x0AA1, 0x7BAF, 0x3A62, 0x7BB0, 0x4CB6,
- 0x7BB1, 0x0D36, 0x7BB4, 0x176F, 0x7BB5, 0x477A, 0x7BB8, 0x0D38,
- 0x7BBC, 0x477B, 0x7BC0, 0x0A85, 0x7BC1, 0x176C, 0x7BC4, 0x0D63,
- 0x7BC5, 0x477C, 0x7BC6, 0x1770, 0x7BC7, 0x0E23, 0x7BC9, 0x0B99,
- 0x7BCA, 0x477D, 0x7BCB, 0x176B, 0x7BCC, 0x176D, 0x7BCF, 0x176E,
- 0x7BD4, 0x4780, 0x7BD6, 0x4781, 0x7BD7, 0x3A63, 0x7BD9, 0x3A64,
- 0x7BDA, 0x4782, 0x7BDD, 0x1771, 0x7BE0, 0x08F0, 0x7BE4, 0x0C9E,
- 0x7BE5, 0x1776, 0x7BE6, 0x1775, 0x7BE8, 0x4CB7, 0x7BE9, 0x1772,
- 0x7BEA, 0x4783, 0x7BED, 0x0FDC, 0x7BF0, 0x4784, 0x7BF2, 0x4CB8,
- 0x7BF3, 0x177B, 0x7BF6, 0x177F, 0x7BF7, 0x177C, 0x7BF8, 0x4CB9,
- 0x7BFC, 0x4CBA, 0x7BFE, 0x4CBB, 0x7C00, 0x1778, 0x7C01, 0x4287,
- 0x7C03, 0x4785, 0x7C07, 0x1779, 0x7C09, 0x4CBC, 0x7C0B, 0x3A65,
- 0x7C0D, 0x177E, 0x7C0E, 0x4786, 0x7C0F, 0x3A66, 0x7C11, 0x1773,
- 0x7C12, 0x10EA, 0x7C13, 0x177A, 0x7C14, 0x1774, 0x7C17, 0x177D,
- 0x7C1E, 0x1E3B, 0x7C1F, 0x1783, 0x7C20, 0x3A67, 0x7C21, 0x0606,
- 0x7C23, 0x1780, 0x7C26, 0x3A68, 0x7C27, 0x1781, 0x7C28, 0x4CBD,
- 0x7C2A, 0x1782, 0x7C2B, 0x1785, 0x7C2F, 0x4CBE, 0x7C31, 0x3A69,
- 0x7C33, 0x4288, 0x7C36, 0x3A6A, 0x7C37, 0x1784, 0x7C38, 0x0D8A,
- 0x7C3D, 0x1786, 0x7C3E, 0x0FC4, 0x7C3F, 0x0E3D, 0x7C40, 0x178B,
- 0x7C42, 0x4CBF, 0x7C43, 0x1788, 0x7C45, 0x4787, 0x7C4A, 0x4788,
- 0x7C4C, 0x1787, 0x7C4D, 0x0A76, 0x7C4F, 0x178A, 0x7C50, 0x178C,
- 0x7C51, 0x3A6B, 0x7C52, 0x4CC0, 0x7C53, 0x4CC1, 0x7C54, 0x1789,
- 0x7C56, 0x1790, 0x7C57, 0x4789, 0x7C58, 0x178D, 0x7C59, 0x3A6C,
- 0x7C5B, 0x4CC2, 0x7C5C, 0x4CC3, 0x7C5D, 0x4CC4, 0x7C5E, 0x478A,
- 0x7C5F, 0x178E, 0x7C60, 0x1777, 0x7C61, 0x478B, 0x7C64, 0x178F,
- 0x7C65, 0x1791, 0x7C67, 0x3A6D, 0x7C69, 0x478C, 0x7C6C, 0x1792,
- 0x7C6D, 0x428A, 0x7C6E, 0x3A6E, 0x7C6F, 0x478D, 0x7C70, 0x3A6F,
- 0x7C72, 0x4CC5, 0x7C73, 0x0E16, 0x7C75, 0x1793, 0x7C79, 0x428B,
- 0x7C7B, 0x370E, 0x7C7D, 0x4CC6, 0x7C7E, 0x0EEE, 0x7C81, 0x06C6,
- 0x7C82, 0x06FF, 0x7C83, 0x1794, 0x7C87, 0x4CC7, 0x7C89, 0x0E04,
- 0x7C8B, 0x0A2E, 0x7C8D, 0x0EBC, 0x7C8F, 0x428C, 0x7C90, 0x1795,
- 0x7C92, 0x0F7B, 0x7C94, 0x428D, 0x7C95, 0x0D2A, 0x7C97, 0x0AC8,
- 0x7C98, 0x0CEA, 0x7C9B, 0x0957, 0x7C9E, 0x4CC8, 0x7C9F, 0x0484,
- 0x7CA0, 0x428E, 0x7CA1, 0x179A, 0x7CA2, 0x1798, 0x7CA4, 0x1796,
- 0x7CA5, 0x05DD, 0x7CA6, 0x4791, 0x7CA7, 0x09B9, 0x7CA8, 0x179B,
- 0x7CAB, 0x1799, 0x7CAD, 0x1797, 0x7CAE, 0x179F, 0x7CB1, 0x179E,
- 0x7CB2, 0x179D, 0x7CB3, 0x179C, 0x7CB6, 0x4793, 0x7CB7, 0x4794,
- 0x7CB9, 0x17A0, 0x7CBA, 0x4CC9, 0x7CBC, 0x3A70, 0x7CBD, 0x17A1,
- 0x7CBE, 0x0A5E, 0x7CBF, 0x3A71, 0x7CC0, 0x17A2, 0x7CC2, 0x17A4,
- 0x7CC4, 0x4796, 0x7CC5, 0x17A3, 0x7CC7, 0x4CCA, 0x7CC8, 0x3A72,
- 0x7CC9, 0x3A73, 0x7CCA, 0x0786, 0x7CCD, 0x4798, 0x7CCE, 0x0ABA,
- 0x7CD2, 0x17A6, 0x7CD3, 0x4CCB, 0x7CD5, 0x428F, 0x7CD6, 0x0C76,
- 0x7CD7, 0x3A74, 0x7CD8, 0x17A5, 0x7CD9, 0x3A75, 0x7CDA, 0x4CCC,
- 0x7CDC, 0x17A7, 0x7CDD, 0x3A76, 0x7CDE, 0x0E05, 0x7CDF, 0x0AEE,
- 0x7CE0, 0x07D9, 0x7CE2, 0x17A8, 0x7CE6, 0x479B, 0x7CE7, 0x0F90,
- 0x7CEB, 0x3A77, 0x7CEF, 0x17AA, 0x7CF2, 0x17AB, 0x7CF4, 0x17AC,
- 0x7CF5, 0x479D, 0x7CF6, 0x17AD, 0x7CF8, 0x08B3, 0x7CFA, 0x17AE,
- 0x7CFB, 0x0725, 0x7CFE, 0x0684, 0x7D00, 0x0644, 0x7D02, 0x17B0,
- 0x7D03, 0x479E, 0x7D04, 0x0EFF, 0x7D05, 0x07DA, 0x7D06, 0x17AF,
- 0x7D07, 0x3A78, 0x7D08, 0x3A79, 0x7D09, 0x3A7A, 0x7D0A, 0x17B3,
- 0x7D0B, 0x0EF2, 0x7D0D, 0x0CF2, 0x7D10, 0x0DA5, 0x7D12, 0x47A0,
- 0x7D13, 0x3A7B, 0x7D14, 0x096D, 0x7D15, 0x17B2, 0x7D17, 0x08FF,
- 0x7D18, 0x07DB, 0x7D19, 0x08B4, 0x7D1A, 0x0683, 0x7D1B, 0x0E06,
- 0x7D1C, 0x17B1, 0x7D1D, 0x3A7C, 0x7D1E, 0x47A1, 0x7D20, 0x0AC9,
- 0x7D21, 0x0E70, 0x7D22, 0x0867, 0x7D23, 0x3A7D, 0x7D2B, 0x08B5,
- 0x7D2C, 0x0BF9, 0x7D2E, 0x17B6, 0x7D2F, 0x0FA7, 0x7D30, 0x0849,
- 0x7D31, 0x4290, 0x7D32, 0x17B7, 0x7D33, 0x0A08, 0x7D35, 0x17B9,
- 0x7D39, 0x09BA, 0x7D3A, 0x0820, 0x7D3C, 0x4CCD, 0x7D3D, 0x47A4,
- 0x7D3E, 0x47A5, 0x7D3F, 0x17B8, 0x7D40, 0x47A6, 0x7D41, 0x3A7E,
- 0x7D42, 0x0934, 0x7D43, 0x0772, 0x7D44, 0x0ACA, 0x7D45, 0x17B4,
- 0x7D46, 0x17BA, 0x7D47, 0x47A7, 0x7D48, 0x218F, 0x7D4B, 0x17B5,
- 0x7D4C, 0x0726, 0x7D4D, 0x4CCE, 0x7D4E, 0x17BD, 0x7D4F, 0x17C1,
- 0x7D50, 0x0741, 0x7D53, 0x3A7F, 0x7D55, 0x363A, 0x7D56, 0x17BC,
- 0x7D59, 0x3A80, 0x7D5A, 0x47AB, 0x7D5B, 0x17C5, 0x7D5C, 0x4291,
- 0x7D5D, 0x3A81, 0x7D5E, 0x07DC, 0x7D61, 0x0F57, 0x7D62, 0x0480,
- 0x7D63, 0x17C2, 0x7D66, 0x0685, 0x7D68, 0x17BF, 0x7D6A, 0x47AC,
- 0x7D6E, 0x17C0, 0x7D70, 0x47AD, 0x7D71, 0x0C77, 0x7D72, 0x17BE,
- 0x7D73, 0x17BB, 0x7D75, 0x0586, 0x7D76, 0x0A88, 0x7D79, 0x075C,
- 0x7D7A, 0x3A82, 0x7D7D, 0x17C7, 0x7D7F, 0x47AF, 0x7D82, 0x4CCF,
- 0x7D83, 0x4292, 0x7D85, 0x4CD0, 0x7D86, 0x3A83, 0x7D88, 0x47B1,
- 0x7D89, 0x17C4, 0x7D8B, 0x3A84, 0x7D8C, 0x3A85, 0x7D8D, 0x4CD1,
- 0x7D8F, 0x17C6, 0x7D91, 0x4CD2, 0x7D93, 0x17C3, 0x7D97, 0x47B2,
- 0x7D99, 0x0727, 0x7D9A, 0x0B13, 0x7D9B, 0x17C8, 0x7D9C, 0x0AF0,
- 0x7D9D, 0x47B4, 0x7D9E, 0x4CD3, 0x7D9F, 0x17D5, 0x7DA0, 0x2192,
- 0x7DA2, 0x17D1, 0x7DA3, 0x17CB, 0x7DA6, 0x4293, 0x7DA7, 0x47B5,
- 0x7DAA, 0x47B6, 0x7DAB, 0x17CF, 0x7DAC, 0x0926, 0x7DAD, 0x04A1,
- 0x7DAE, 0x17CA, 0x7DAF, 0x17D2, 0x7DB0, 0x17D6, 0x7DB1, 0x07DD,
- 0x7DB2, 0x0EE2, 0x7DB3, 0x4CD4, 0x7DB4, 0x0BF2, 0x7DB5, 0x17CC,
- 0x7DB6, 0x47B7, 0x7DB7, 0x2191, 0x7DB8, 0x17D4, 0x7DB9, 0x4CD5,
- 0x7DBA, 0x17C9, 0x7DBB, 0x0B7C, 0x7DBD, 0x17CE, 0x7DBE, 0x0481,
- 0x7DBF, 0x0ED6, 0x7DC0, 0x47B8, 0x7DC2, 0x4294, 0x7DC7, 0x17CD,
- 0x7DCA, 0x06D3, 0x7DCB, 0x0D80, 0x7DCC, 0x3A86, 0x7DCF, 0x0AEF,
- 0x7DD0, 0x4CD6, 0x7DD1, 0x0F98, 0x7DD2, 0x0979, 0x7DD5, 0x17FD,
- 0x7DD6, 0x2193, 0x7DD7, 0x47B9, 0x7DD8, 0x17D7, 0x7DD9, 0x47BA,
- 0x7DDA, 0x0AA2, 0x7DDC, 0x17D3, 0x7DDD, 0x17D8, 0x7DDE, 0x17DA,
- 0x7DE0, 0x0C15, 0x7DE1, 0x17DD, 0x7DE3, 0x340A, 0x7DE4, 0x17D9,
- 0x7DE5, 0x4CD7, 0x7DE6, 0x47BB, 0x7DE8, 0x0E24, 0x7DE9, 0x0607,
- 0x7DEB, 0x3A87, 0x7DEC, 0x0ED7, 0x7DEF, 0x04A2, 0x7DF1, 0x3A88,
- 0x7DF2, 0x17DC, 0x7DF4, 0x0FC5, 0x7DF5, 0x4CD8, 0x7DF6, 0x4CD9,
- 0x7DF9, 0x3A89, 0x7DFB, 0x17DB, 0x7E01, 0x0511, 0x7E04, 0x0CC4,
- 0x7E05, 0x17DE, 0x7E08, 0x3A8A, 0x7E09, 0x17E5, 0x7E0A, 0x17DF,
- 0x7E0B, 0x17E6, 0x7E10, 0x47BF, 0x7E11, 0x3A8B, 0x7E12, 0x17E2,
- 0x7E15, 0x3A8C, 0x7E17, 0x47C0, 0x7E1B, 0x0D31, 0x7E1D, 0x47C1,
- 0x7E1E, 0x08F6, 0x7E1F, 0x17E4, 0x7E20, 0x3A8D, 0x7E21, 0x17E1,
- 0x7E22, 0x17E7, 0x7E23, 0x17E0, 0x7E26, 0x094E, 0x7E27, 0x47C2,
- 0x7E28, 0x4295, 0x7E2B, 0x0E53, 0x7E2C, 0x47C3, 0x7E2E, 0x0956,
- 0x7E2F, 0x4CDA, 0x7E31, 0x17E3, 0x7E32, 0x17EF, 0x7E35, 0x17EB,
- 0x7E36, 0x4CDB, 0x7E37, 0x17EE, 0x7E39, 0x17EC, 0x7E3A, 0x17F0,
- 0x7E3B, 0x17EA, 0x7E3D, 0x17D0, 0x7E3E, 0x0A77, 0x7E41, 0x0D5F,
- 0x7E43, 0x17ED, 0x7E44, 0x4CDC, 0x7E45, 0x47C4, 0x7E46, 0x17E8,
- 0x7E47, 0x3A8E, 0x7E48, 0x3767, 0x7E4A, 0x0AA3, 0x7E4B, 0x0728,
- 0x7E4D, 0x0935, 0x7E52, 0x2194, 0x7E54, 0x09EB, 0x7E55, 0x0AB8,
- 0x7E56, 0x17F3, 0x7E59, 0x17F5, 0x7E5A, 0x17F6, 0x7E5D, 0x17F2,
- 0x7E5E, 0x17F4, 0x7E61, 0x1E11, 0x7E62, 0x3A8F, 0x7E66, 0x17E9,
- 0x7E67, 0x17F1, 0x7E69, 0x17F9, 0x7E6A, 0x17F8, 0x7E6B, 0x1DF7,
- 0x7E6D, 0x0EA8, 0x7E6E, 0x3A90, 0x7E6F, 0x4CDD, 0x7E70, 0x0701,
- 0x7E73, 0x3A91, 0x7E75, 0x47C5, 0x7E78, 0x4CDE, 0x7E79, 0x17F7,
- 0x7E7B, 0x17FB, 0x7E7C, 0x17FA, 0x7E7D, 0x17FE, 0x7E7E, 0x47C6,
- 0x7E7F, 0x1800, 0x7E81, 0x4CDF, 0x7E82, 0x088A, 0x7E83, 0x17FC,
- 0x7E86, 0x47C7, 0x7E87, 0x47C8, 0x7E88, 0x1801, 0x7E89, 0x1802,
- 0x7E8A, 0x20A7, 0x7E8C, 0x1803, 0x7E8D, 0x3A92, 0x7E8E, 0x1809,
- 0x7E8F, 0x0C35, 0x7E90, 0x1805, 0x7E91, 0x3A93, 0x7E92, 0x1804,
- 0x7E93, 0x1806, 0x7E94, 0x1807, 0x7E96, 0x1808, 0x7E98, 0x3A94,
- 0x7E9A, 0x47CA, 0x7E9B, 0x180A, 0x7E9C, 0x180B, 0x7F36, 0x0608,
- 0x7F38, 0x180C, 0x7F3A, 0x180D, 0x7F3B, 0x47CD, 0x7F3C, 0x47CC,
- 0x7F3D, 0x4CE0, 0x7F3E, 0x47CE, 0x7F43, 0x47CF, 0x7F44, 0x3A95,
- 0x7F45, 0x180E, 0x7F47, 0x2195, 0x7F4C, 0x180F, 0x7F4D, 0x1810,
- 0x7F4E, 0x1811, 0x7F4F, 0x3A96, 0x7F50, 0x1812, 0x7F51, 0x1813,
- 0x7F52, 0x3A97, 0x7F53, 0x3A98, 0x7F54, 0x1815, 0x7F55, 0x1814,
- 0x7F58, 0x1816, 0x7F5B, 0x4CE1, 0x7F5D, 0x4CE2, 0x7F5F, 0x1817,
- 0x7F60, 0x1818, 0x7F61, 0x3A99, 0x7F63, 0x47D3, 0x7F64, 0x47D4,
- 0x7F65, 0x4CE3, 0x7F67, 0x181B, 0x7F68, 0x1819, 0x7F69, 0x181A,
- 0x7F6A, 0x0851, 0x7F6B, 0x0729, 0x7F6D, 0x47D5, 0x7F6E, 0x0B94,
- 0x7F70, 0x0D47, 0x7F71, 0x4CE4, 0x7F72, 0x097A, 0x7F75, 0x0D03,
- 0x7F77, 0x0D81, 0x7F78, 0x181C, 0x7F79, 0x1336, 0x7F7D, 0x47D6,
- 0x7F7E, 0x47D7, 0x7F7F, 0x4CE5, 0x7F80, 0x4CE6, 0x7F82, 0x181D,
- 0x7F83, 0x181F, 0x7F85, 0x0F4F, 0x7F86, 0x181E, 0x7F87, 0x1821,
- 0x7F88, 0x1820, 0x7F8A, 0x0F3D, 0x7F8B, 0x4CE7, 0x7F8C, 0x1822,
- 0x7F8E, 0x0D92, 0x7F90, 0x47D8, 0x7F91, 0x3A9A, 0x7F94, 0x1823,
- 0x7F96, 0x47DB, 0x7F97, 0x4296, 0x7F9A, 0x1826, 0x7F9C, 0x47DC,
- 0x7F9D, 0x1825, 0x7F9E, 0x1824, 0x7FA1, 0x2196, 0x7FA2, 0x4CE8,
- 0x7FA3, 0x1827, 0x7FA4, 0x0708, 0x7FA8, 0x0AA4, 0x7FA9, 0x065B,
- 0x7FAD, 0x47DD, 0x7FAE, 0x182B, 0x7FAF, 0x1828, 0x7FB2, 0x1829,
- 0x7FB6, 0x182C, 0x7FB8, 0x182D, 0x7FB9, 0x182A, 0x7FBD, 0x04CB,
- 0x7FBF, 0x3A9B, 0x7FC1, 0x0527, 0x7FC3, 0x47DF, 0x7FC5, 0x182F,
- 0x7FC6, 0x1830, 0x7FCA, 0x1831, 0x7FCC, 0x0F4C, 0x7FCE, 0x3A9C,
- 0x7FCF, 0x47E0, 0x7FD2, 0x0936, 0x7FD4, 0x1833, 0x7FD5, 0x1832,
- 0x7FDB, 0x4297, 0x7FDF, 0x3A9D, 0x7FE0, 0x0A2F, 0x7FE1, 0x1834,
- 0x7FE3, 0x47E1, 0x7FE5, 0x3A9E, 0x7FE6, 0x1835, 0x7FE9, 0x1836,
- 0x7FEB, 0x0621, 0x7FEC, 0x3A9F, 0x7FEE, 0x3AA0, 0x7FEF, 0x3AA1,
- 0x7FF0, 0x0609, 0x7FF2, 0x47E2, 0x7FF3, 0x1837, 0x7FF9, 0x1838,
- 0x7FFA, 0x3AA2, 0x7FFB, 0x0E8B, 0x7FFC, 0x0F4D, 0x7FFD, 0x4CE9,
- 0x7FFE, 0x4CEA, 0x7FFF, 0x4CEB, 0x8000, 0x0F3E, 0x8001, 0x0FDD,
- 0x8002, 0x3713, 0x8003, 0x07DF, 0x8004, 0x183B, 0x8005, 0x0900,
- 0x8006, 0x183A, 0x8007, 0x4CEC, 0x8008, 0x47E4, 0x800A, 0x47E3,
- 0x800B, 0x183C, 0x800C, 0x08D5, 0x800D, 0x4CED, 0x800E, 0x3AA3,
- 0x8010, 0x0B31, 0x8011, 0x3AA4, 0x8012, 0x183D, 0x8014, 0x3AA5,
- 0x8015, 0x07DE, 0x8016, 0x47E5, 0x8017, 0x0EE3, 0x8018, 0x183E,
- 0x8019, 0x183F, 0x801C, 0x1840, 0x801E, 0x4CEE, 0x8021, 0x1841,
- 0x8024, 0x3AA6, 0x8026, 0x3AA7, 0x8028, 0x1842, 0x802C, 0x47E6,
- 0x8030, 0x47E7, 0x8033, 0x08D6, 0x8035, 0x4298, 0x8036, 0x0EF9,
- 0x8037, 0x4299, 0x8039, 0x4CEF, 0x803A, 0x3AA8, 0x803B, 0x1844,
- 0x803C, 0x3AA9, 0x803D, 0x0B7D, 0x803F, 0x1843, 0x8043, 0x47E8,
- 0x8046, 0x1846, 0x804A, 0x1845, 0x8052, 0x1847, 0x8056, 0x0A5F,
- 0x8058, 0x1848, 0x805A, 0x1849, 0x805E, 0x0E09, 0x805F, 0x184A,
- 0x8060, 0x3AAA, 0x8061, 0x0AF1, 0x8062, 0x184B, 0x8066, 0x47E9,
- 0x8068, 0x184C, 0x806F, 0x0FC6, 0x8070, 0x184F, 0x8071, 0x3AAB,
- 0x8072, 0x184E, 0x8073, 0x184D, 0x8074, 0x0BCC, 0x8075, 0x3AAC,
- 0x8076, 0x1850, 0x8077, 0x09EC, 0x8079, 0x1851, 0x807B, 0x47EA,
- 0x807D, 0x1852, 0x807E, 0x0FDE, 0x807F, 0x1853, 0x8084, 0x1854,
- 0x8085, 0x1856, 0x8086, 0x1855, 0x8087, 0x0D39, 0x8088, 0x4CF0,
- 0x8089, 0x0CD1, 0x808B, 0x0FE4, 0x808C, 0x0D3D, 0x808E, 0x4CF1,
- 0x8093, 0x1858, 0x8096, 0x09BB, 0x8098, 0x0D9C, 0x8099, 0x47EB,
- 0x809A, 0x1859, 0x809B, 0x1857, 0x809C, 0x47EC, 0x809D, 0x060A,
- 0x809E, 0x3AAD, 0x80A1, 0x0788, 0x80A2, 0x08B6, 0x80A4, 0x47ED,
- 0x80A5, 0x0D82, 0x80A6, 0x3AAE, 0x80A7, 0x47EE, 0x80A9, 0x075E,
- 0x80AA, 0x0E71, 0x80AB, 0x3AAF, 0x80AC, 0x185C, 0x80AD, 0x185A,
- 0x80AF, 0x07E0, 0x80B1, 0x07E1, 0x80B2, 0x04AD, 0x80B4, 0x0858,
- 0x80B8, 0x47EF, 0x80BA, 0x0D0F, 0x80C3, 0x04A3, 0x80C4, 0x1861,
- 0x80C5, 0x47F1, 0x80C6, 0x0B7E, 0x80CA, 0x429A, 0x80CC, 0x0D0E,
- 0x80CE, 0x0B3B, 0x80CF, 0x4CF2, 0x80D4, 0x4CF3, 0x80D5, 0x47F2,
- 0x80D6, 0x1863, 0x80D7, 0x3AB0, 0x80D8, 0x3AB1, 0x80D9, 0x185F,
- 0x80DA, 0x1862, 0x80DB, 0x185D, 0x80DD, 0x1860, 0x80DE, 0x0E54,
- 0x80E0, 0x429B, 0x80E1, 0x0789, 0x80E4, 0x04C1, 0x80E5, 0x185E,
- 0x80E6, 0x47F3, 0x80ED, 0x4CF4, 0x80EF, 0x1865, 0x80F0, 0x4CF5,
- 0x80F1, 0x1866, 0x80F3, 0x429C, 0x80F4, 0x0C91, 0x80F5, 0x47F5,
- 0x80F7, 0x4CF6, 0x80F8, 0x06B3, 0x80FA, 0x4CF7, 0x80FB, 0x47F6,
- 0x80FC, 0x1871, 0x80FD, 0x0CF3, 0x80FE, 0x4CF8, 0x8102, 0x08B7,
- 0x8103, 0x4CF9, 0x8105, 0x06B4, 0x8106, 0x0A6C, 0x8107, 0x0FEC,
- 0x8108, 0x0EBA, 0x8109, 0x1864, 0x810A, 0x0A78, 0x810D, 0x47F4,
- 0x8116, 0x3AB2, 0x8117, 0x4CFA, 0x8118, 0x3AB3, 0x811A, 0x066D,
- 0x811B, 0x1867, 0x811E, 0x47F9, 0x8123, 0x1869, 0x8124, 0x47FB,
- 0x8127, 0x47FC, 0x8129, 0x1868, 0x812B, 0x3659, 0x812C, 0x47FD,
- 0x812F, 0x186A, 0x8130, 0x4CFB, 0x8131, 0x0B64, 0x8133, 0x0CF4,
- 0x8135, 0x47F8, 0x8139, 0x0BCD, 0x813A, 0x3AB4, 0x813D, 0x47FF,
- 0x813E, 0x186E, 0x8141, 0x3772, 0x8146, 0x186D, 0x814A, 0x3AB5,
- 0x814B, 0x186B, 0x814C, 0x3AB6, 0x814E, 0x0A1B, 0x8150, 0x0DD7,
- 0x8151, 0x1870, 0x8153, 0x186F, 0x8154, 0x07E2, 0x8155, 0x0FF9,
- 0x8157, 0x4CFC, 0x815F, 0x1880, 0x8160, 0x429D, 0x8165, 0x1874,
- 0x8166, 0x1875, 0x8167, 0x429E, 0x8168, 0x429F, 0x8169, 0x4801,
- 0x816B, 0x091C, 0x816D, 0x42A0, 0x816E, 0x1873, 0x816F, 0x4CFD,
- 0x8170, 0x080A, 0x8171, 0x1872, 0x8173, 0x4CFE, 0x8174, 0x1876,
- 0x8178, 0x0BCE, 0x8179, 0x0DF2, 0x817A, 0x0AA5, 0x817F, 0x0B3C,
- 0x8180, 0x187A, 0x8181, 0x3AB7, 0x8182, 0x187B, 0x8183, 0x1877,
- 0x8184, 0x3AB8, 0x8185, 0x4804, 0x8188, 0x1878, 0x818A, 0x1879,
- 0x818B, 0x4CFF, 0x818F, 0x07E3, 0x8190, 0x4D00, 0x8193, 0x1881,
- 0x8195, 0x187D, 0x8198, 0x4806, 0x819A, 0x0DD8, 0x819B, 0x4D01,
- 0x819C, 0x0E9A, 0x819D, 0x0D9A, 0x819E, 0x4D02, 0x81A0, 0x187C,
- 0x81A3, 0x187F, 0x81A4, 0x187E, 0x81A8, 0x0E72, 0x81A9, 0x1882,
- 0x81B0, 0x1883, 0x81B2, 0x4807, 0x81B3, 0x0AB9, 0x81B4, 0x3AB9,
- 0x81B5, 0x1884, 0x81B8, 0x1886, 0x81BA, 0x188A, 0x81BB, 0x42A1,
- 0x81BD, 0x1887, 0x81BE, 0x1885, 0x81BF, 0x0CF5, 0x81C0, 0x1888,
- 0x81C1, 0x4808, 0x81C2, 0x1889, 0x81C3, 0x4809, 0x81C6, 0x0532,
- 0x81C8, 0x1890, 0x81C9, 0x188B, 0x81CA, 0x42A2, 0x81CB, 0x4D03,
- 0x81CD, 0x188C, 0x81CF, 0x3ABA, 0x81D1, 0x188D, 0x81D3, 0x0B01,
- 0x81D5, 0x4D04, 0x81D6, 0x480A, 0x81D7, 0x42A3, 0x81D8, 0x188F,
- 0x81D9, 0x188E, 0x81DA, 0x1891, 0x81DB, 0x480B, 0x81DD, 0x4D05,
- 0x81DE, 0x4D06, 0x81DF, 0x1892, 0x81E0, 0x1893, 0x81E1, 0x4D07,
- 0x81E3, 0x0A09, 0x81E4, 0x480D, 0x81E5, 0x0569, 0x81E7, 0x1894,
- 0x81E8, 0x0F9F, 0x81EA, 0x08D7, 0x81EC, 0x480F, 0x81ED, 0x0937,
- 0x81EF, 0x4D08, 0x81F3, 0x08B8, 0x81F4, 0x0B95, 0x81F6, 0x4D09,
- 0x81F9, 0x3ABB, 0x81FA, 0x1895, 0x81FB, 0x1896, 0x81FC, 0x04D3,
- 0x81FD, 0x4810, 0x81FE, 0x1897, 0x81FF, 0x4811, 0x8200, 0x4D0A,
- 0x8201, 0x1898, 0x8202, 0x1899, 0x8203, 0x3ABC, 0x8204, 0x4813,
- 0x8205, 0x189A, 0x8207, 0x189B, 0x8208, 0x06B5, 0x8209, 0x13AF,
- 0x820A, 0x189C, 0x820B, 0x4D0B, 0x820C, 0x0A89, 0x820D, 0x189D,
- 0x820E, 0x08F7, 0x8210, 0x189E, 0x8212, 0x1009, 0x8213, 0x4D0C,
- 0x8214, 0x4D0D, 0x8216, 0x189F, 0x8217, 0x0E2E, 0x8218, 0x0618,
- 0x8219, 0x4815, 0x821A, 0x4D0E, 0x821B, 0x0AA6, 0x821C, 0x0962,
- 0x821E, 0x0DE3, 0x821F, 0x0938, 0x8221, 0x3ABD, 0x8222, 0x4816,
- 0x8229, 0x18A0, 0x822A, 0x07E4, 0x822B, 0x18A1, 0x822C, 0x0D60,
- 0x822E, 0x18AF, 0x8232, 0x3ABE, 0x8233, 0x18A3, 0x8234, 0x3ABF,
- 0x8235, 0x0B29, 0x8236, 0x0D2B, 0x8237, 0x0773, 0x8238, 0x18A2,
- 0x8239, 0x0AA7, 0x823A, 0x4D0F, 0x823C, 0x4818, 0x8240, 0x18A4,
- 0x8244, 0x4D10, 0x8245, 0x481A, 0x8246, 0x3AC0, 0x8247, 0x0C16,
- 0x8249, 0x4819, 0x824B, 0x3AC1, 0x824F, 0x3AC2, 0x8257, 0x481E,
- 0x8258, 0x18A6, 0x8259, 0x18A5, 0x825A, 0x18A8, 0x825C, 0x4820,
- 0x825D, 0x18A7, 0x825F, 0x18A9, 0x8260, 0x42A5, 0x8262, 0x18AB,
- 0x8263, 0x4821, 0x8264, 0x18AA, 0x8266, 0x060B, 0x8268, 0x18AC,
- 0x826A, 0x18AD, 0x826B, 0x18AE, 0x826D, 0x4D11, 0x826E, 0x0821,
- 0x826F, 0x0F91, 0x8271, 0x18B0, 0x8272, 0x09ED, 0x8274, 0x42A6,
- 0x8276, 0x0512, 0x8277, 0x18B1, 0x8278, 0x18B2, 0x8279, 0x3775,
- 0x827D, 0x4824, 0x827E, 0x18B3, 0x827F, 0x4825, 0x8283, 0x4826,
- 0x8284, 0x4D12, 0x8289, 0x4D13, 0x828A, 0x4827, 0x828B, 0x04B6,
- 0x828D, 0x18B4, 0x828E, 0x3AC3, 0x8291, 0x4D14, 0x8292, 0x18B5,
- 0x8293, 0x4828, 0x8299, 0x0DD9, 0x829D, 0x08F3, 0x829F, 0x18B7,
- 0x82A1, 0x42A8, 0x82A3, 0x42A9, 0x82A4, 0x42AA, 0x82A5, 0x0587,
- 0x82A6, 0x0476, 0x82A7, 0x4829, 0x82A8, 0x482A, 0x82A9, 0x42AB,
- 0x82AA, 0x4D15, 0x82AB, 0x18B6, 0x82AC, 0x18B9, 0x82AD, 0x0D04,
- 0x82AE, 0x3AC4, 0x82AF, 0x0A0A, 0x82B0, 0x4D16, 0x82B1, 0x0556,
- 0x82B2, 0x482B, 0x82B3, 0x0E55, 0x82B4, 0x482C, 0x82B7, 0x3AC5,
- 0x82B8, 0x0733, 0x82B9, 0x06D4, 0x82BA, 0x482D, 0x82BB, 0x18B8,
- 0x82BC, 0x482E, 0x82BD, 0x056A, 0x82BE, 0x3AC6, 0x82BF, 0x42AC,
- 0x82C5, 0x05DF, 0x82C6, 0x3AC7, 0x82D0, 0x4D17, 0x82D1, 0x0513,
- 0x82D2, 0x18BD, 0x82D3, 0x0FB2, 0x82D4, 0x0B3D, 0x82D5, 0x42AD,
- 0x82D7, 0x0DB6, 0x82D9, 0x18C9, 0x82DB, 0x0557, 0x82DC, 0x18C7,
- 0x82DE, 0x18C5, 0x82DF, 0x18BC, 0x82E1, 0x18BA, 0x82E2, 0x482F,
- 0x82E3, 0x18BB, 0x82E5, 0x090F, 0x82E6, 0x06E4, 0x82E7, 0x0BB5,
- 0x82E8, 0x4830, 0x82EA, 0x4D18, 0x82EB, 0x0CA9, 0x82EF, 0x4D19,
- 0x82F1, 0x04F3, 0x82F3, 0x18BF, 0x82F4, 0x18BE, 0x82F6, 0x4D1A,
- 0x82F7, 0x4831, 0x82F9, 0x18C4, 0x82FA, 0x18C0, 0x82FB, 0x18C3,
- 0x82FD, 0x42AE, 0x82FE, 0x3AC8, 0x8300, 0x42AF, 0x8301, 0x2198,
- 0x8302, 0x0EDC, 0x8303, 0x18C2, 0x8304, 0x0558, 0x8305, 0x05DB,
- 0x8306, 0x18C6, 0x8307, 0x4832, 0x8308, 0x4833, 0x8309, 0x18C8,
- 0x830C, 0x4834, 0x830E, 0x072A, 0x8316, 0x18CC, 0x8317, 0x18D5,
- 0x8318, 0x18D6, 0x831B, 0x4836, 0x831C, 0x046F, 0x831D, 0x4837,
- 0x8322, 0x42B0, 0x8323, 0x18DD, 0x8328, 0x04B5, 0x832B, 0x18D4,
- 0x832D, 0x42B1, 0x832F, 0x18D3, 0x8330, 0x4838, 0x8331, 0x18CE,
- 0x8332, 0x18CD, 0x8334, 0x18CB, 0x8335, 0x18CA, 0x8336, 0x0BA1,
- 0x8338, 0x0B5B, 0x8339, 0x18D0, 0x833A, 0x42B2, 0x833C, 0x4839,
- 0x8340, 0x18CF, 0x8343, 0x3AC9, 0x8344, 0x483A, 0x8345, 0x18D2,
- 0x8346, 0x1DF8, 0x8347, 0x42B3, 0x8349, 0x0AF2, 0x834A, 0x072B,
- 0x834F, 0x04E3, 0x8350, 0x18D1, 0x8351, 0x3ACA, 0x8352, 0x07E5,
- 0x8354, 0x4835, 0x8355, 0x3ACB, 0x8356, 0x4D1B, 0x8357, 0x483B,
- 0x8358, 0x0AF3, 0x835A, 0x377A, 0x8362, 0x2199, 0x8363, 0x456F,
- 0x8373, 0x18E3, 0x8375, 0x18E4, 0x8377, 0x0559, 0x8378, 0x4D1C,
- 0x837B, 0x052E, 0x837C, 0x18E1, 0x837D, 0x42B4, 0x837F, 0x219A,
- 0x8385, 0x18D7, 0x8386, 0x3ACC, 0x8387, 0x18DF, 0x8389, 0x18E6,
- 0x838A, 0x18E0, 0x838D, 0x3ACD, 0x838E, 0x18DE, 0x8392, 0x3ACE,
- 0x8393, 0x18C1, 0x8394, 0x483F, 0x8395, 0x4840, 0x8396, 0x18DC,
- 0x8398, 0x3ACF, 0x839A, 0x18D8, 0x839B, 0x4841, 0x839D, 0x4842,
- 0x839E, 0x060C, 0x839F, 0x18DA, 0x83A0, 0x18E5, 0x83A2, 0x18DB,
- 0x83A7, 0x42B5, 0x83A8, 0x18E7, 0x83A9, 0x3AD0, 0x83AA, 0x18D9,
- 0x83AB, 0x0D32, 0x83B1, 0x0F53, 0x83B5, 0x18E2, 0x83BD, 0x18F8,
- 0x83BF, 0x3AD1, 0x83C0, 0x3AD2, 0x83C1, 0x18F0, 0x83C5, 0x0A41,
- 0x83C7, 0x219B, 0x83C9, 0x4843, 0x83CA, 0x0660, 0x83CC, 0x06D5,
- 0x83CE, 0x18EB, 0x83CF, 0x42B6, 0x83D0, 0x4844, 0x83D1, 0x42B7,
- 0x83D3, 0x055B, 0x83D4, 0x4845, 0x83D6, 0x09BC, 0x83D8, 0x18EE,
- 0x83DC, 0x084A, 0x83DD, 0x4846, 0x83DF, 0x0C4B, 0x83E0, 0x18F3,
- 0x83E1, 0x42B8, 0x83E5, 0x4847, 0x83E9, 0x0E3E, 0x83EA, 0x3AD3,
- 0x83EB, 0x18EA, 0x83EF, 0x055A, 0x83F0, 0x078A, 0x83F1, 0x0D9B,
- 0x83F2, 0x18F4, 0x83F4, 0x18E8, 0x83F6, 0x219C, 0x83F7, 0x18F1,
- 0x83F8, 0x4D1D, 0x83F9, 0x4848, 0x83FB, 0x18FB, 0x83FC, 0x4D1E,
- 0x83FD, 0x18EC, 0x8401, 0x42B9, 0x8403, 0x18ED, 0x8404, 0x0C92,
- 0x8406, 0x42BA, 0x8407, 0x18F2, 0x840A, 0x1E7F, 0x840B, 0x18EF,
- 0x840C, 0x0E56, 0x840D, 0x18F5, 0x840E, 0x04A4, 0x840F, 0x3AD4,
- 0x8411, 0x3AD5, 0x8413, 0x18E9, 0x8415, 0x4849, 0x8417, 0x484B,
- 0x8420, 0x18F7, 0x8422, 0x18F6, 0x8429, 0x0D21, 0x842A, 0x18FD,
- 0x842C, 0x1908, 0x8431, 0x05DC, 0x8435, 0x190B, 0x8438, 0x18F9,
- 0x8439, 0x484C, 0x843C, 0x18FE, 0x843D, 0x0F58, 0x8446, 0x1907,
- 0x8448, 0x219D, 0x8449, 0x0F3F, 0x844A, 0x3AD6, 0x844E, 0x0F72,
- 0x844F, 0x484D, 0x8451, 0x484E, 0x8452, 0x484F, 0x8457, 0x0BB6,
- 0x8458, 0x4D1F, 0x8459, 0x4850, 0x845A, 0x4851, 0x845B, 0x05C9,
- 0x845C, 0x4852, 0x845F, 0x42BB, 0x8461, 0x0DE4, 0x8462, 0x190D,
- 0x8463, 0x0C79, 0x8465, 0x4854, 0x8466, 0x0475, 0x8469, 0x1906,
- 0x846B, 0x1902, 0x846C, 0x0AF4, 0x846D, 0x18FC, 0x846E, 0x1904,
- 0x846F, 0x1909, 0x8470, 0x42BC, 0x8471, 0x0CE2, 0x8473, 0x42BD,
- 0x8475, 0x046E, 0x8476, 0x3AD7, 0x8477, 0x1901, 0x8478, 0x4855,
- 0x8479, 0x190A, 0x847A, 0x0DEA, 0x847C, 0x4856, 0x8481, 0x4857,
- 0x8482, 0x1905, 0x8484, 0x1900, 0x8485, 0x42BE, 0x848B, 0x09BD,
- 0x8490, 0x0939, 0x8493, 0x4D20, 0x8494, 0x08D8, 0x8497, 0x4859,
- 0x8499, 0x0EE4, 0x849C, 0x0DB9, 0x849E, 0x42BF, 0x849F, 0x1910,
- 0x84A1, 0x1919, 0x84A6, 0x485A, 0x84A8, 0x3AD8, 0x84AD, 0x1903,
- 0x84AF, 0x3AD9, 0x84B1, 0x4D21, 0x84B2, 0x05D5, 0x84B4, 0x219E,
- 0x84B8, 0x09E0, 0x84B9, 0x190E, 0x84BA, 0x42C0, 0x84BB, 0x1913,
- 0x84BC, 0x0AF5, 0x84BD, 0x4D22, 0x84BE, 0x485B, 0x84BF, 0x190F,
- 0x84C0, 0x3ADA, 0x84C1, 0x1916, 0x84C2, 0x3ADB, 0x84C4, 0x0B9D,
- 0x84C6, 0x1917, 0x84C9, 0x0F40, 0x84CA, 0x190C, 0x84CB, 0x0596,
- 0x84CD, 0x1912, 0x84CE, 0x485D, 0x84CF, 0x485E, 0x84D0, 0x1915,
- 0x84D1, 0x0EB8, 0x84D3, 0x485F, 0x84D6, 0x1918, 0x84D9, 0x1911,
- 0x84DA, 0x1914, 0x84DC, 0x20AB, 0x84E7, 0x4861, 0x84EA, 0x4862,
- 0x84EC, 0x0E57, 0x84EE, 0x0FC7, 0x84EF, 0x4863, 0x84F0, 0x3ADC,
- 0x84F1, 0x4864, 0x84F4, 0x191C, 0x84FA, 0x4865, 0x84FB, 0x4D23,
- 0x84FC, 0x1923, 0x84FD, 0x3ADD, 0x84FF, 0x191B, 0x8500, 0x08EF,
- 0x8506, 0x18FA, 0x850C, 0x3ADE, 0x8511, 0x0E1E, 0x8513, 0x0EAE,
- 0x8514, 0x1922, 0x8515, 0x1921, 0x8517, 0x191D, 0x8518, 0x191E,
- 0x851A, 0x04D8, 0x851B, 0x4866, 0x851E, 0x42C3, 0x851F, 0x1920,
- 0x8521, 0x191A, 0x8523, 0x1E1A, 0x8524, 0x4867, 0x8525, 0x4868,
- 0x8526, 0x0BF1, 0x852B, 0x4869, 0x852C, 0x191F, 0x852D, 0x04C2,
- 0x852F, 0x42C4, 0x8532, 0x42C2, 0x8534, 0x3ADF, 0x8535, 0x0B02,
- 0x853D, 0x0E13, 0x853E, 0x1EB5, 0x8540, 0x1924, 0x8541, 0x1928,
- 0x8543, 0x0D6D, 0x8546, 0x4D24, 0x8548, 0x1927, 0x8549, 0x09BE,
- 0x854A, 0x08F5, 0x854B, 0x192A, 0x854E, 0x06B6, 0x854F, 0x486A,
- 0x8551, 0x486D, 0x8553, 0x219F, 0x8555, 0x192B, 0x8556, 0x4D25,
- 0x8557, 0x0DEB, 0x8558, 0x1926, 0x8559, 0x21A0, 0x855A, 0x18FF,
- 0x855D, 0x4D26, 0x855E, 0x3AE0, 0x8561, 0x486E, 0x8562, 0x486F,
- 0x8563, 0x1925, 0x8564, 0x42C5, 0x8568, 0x0FF5, 0x8569, 0x0C7A,
- 0x856A, 0x0DE5, 0x856B, 0x21A1, 0x856D, 0x1932, 0x856F, 0x486B,
- 0x8577, 0x1938, 0x857A, 0x42C6, 0x857B, 0x4871, 0x857D, 0x4872,
- 0x857E, 0x1939, 0x857F, 0x4873, 0x8580, 0x192C, 0x8581, 0x4874,
- 0x8584, 0x0D2C, 0x8585, 0x4D27, 0x8586, 0x4875, 0x8587, 0x1936,
- 0x8588, 0x192E, 0x858A, 0x1930, 0x858C, 0x42C7, 0x858F, 0x3AE1,
- 0x8590, 0x193A, 0x8591, 0x192F, 0x8593, 0x4876, 0x8594, 0x1933,
- 0x8597, 0x0514, 0x8598, 0x4D28, 0x8599, 0x0CBD, 0x859B, 0x1934,
- 0x859C, 0x1937, 0x859D, 0x4877, 0x859F, 0x4878, 0x85A2, 0x42C8,
- 0x85A4, 0x192D, 0x85A6, 0x0AA8, 0x85A8, 0x1931, 0x85A9, 0x0875,
- 0x85AA, 0x0A0B, 0x85AB, 0x0706, 0x85AC, 0x0F00, 0x85AD, 0x3AE4,
- 0x85AE, 0x0F05, 0x85AF, 0x097C, 0x85B0, 0x21A3, 0x85B7, 0x3AE2,
- 0x85B9, 0x193E, 0x85BA, 0x193C, 0x85BC, 0x487C, 0x85C1, 0x0FF4,
- 0x85C7, 0x487D, 0x85C9, 0x193B, 0x85CA, 0x487E, 0x85CB, 0x42C9,
- 0x85CD, 0x0F5F, 0x85CE, 0x3AE3, 0x85CF, 0x193D, 0x85D0, 0x193F,
- 0x85D5, 0x1940, 0x85D8, 0x487F, 0x85D9, 0x4880, 0x85DC, 0x1943,
- 0x85DD, 0x1941, 0x85DF, 0x4881, 0x85E1, 0x4882, 0x85E4, 0x0C7B,
- 0x85E5, 0x1942, 0x85E6, 0x4883, 0x85E9, 0x0D61, 0x85EA, 0x1935,
- 0x85ED, 0x42CA, 0x85F4, 0x3780, 0x85F6, 0x4884, 0x85F7, 0x097D,
- 0x85F9, 0x1944, 0x85FA, 0x1949, 0x85FB, 0x0AF6, 0x85FE, 0x1948,
- 0x85FF, 0x42CB, 0x8600, 0x4885, 0x8602, 0x1929, 0x8604, 0x42CC,
- 0x8605, 0x42CD, 0x8606, 0x194A, 0x8607, 0x0ACB, 0x860A, 0x1945,
- 0x860B, 0x1947, 0x8610, 0x42CE, 0x8611, 0x4886, 0x8612, 0x3AE5,
- 0x8613, 0x1946, 0x8616, 0x14D0, 0x8617, 0x14C1, 0x8618, 0x42D0,
- 0x861A, 0x194C, 0x861E, 0x4887, 0x8621, 0x4888, 0x8622, 0x194B,
- 0x8624, 0x4889, 0x8627, 0x488A, 0x8629, 0x3AE6, 0x862D, 0x0F60,
- 0x862F, 0x16B1, 0x8630, 0x194D, 0x8638, 0x42D1, 0x8639, 0x488C,
- 0x863C, 0x488D, 0x863F, 0x194E, 0x8640, 0x488F, 0x8641, 0x41B8,
- 0x8642, 0x4D29, 0x8646, 0x4D2A, 0x864D, 0x194F, 0x864E, 0x078B,
- 0x8650, 0x066E, 0x8652, 0x3AE7, 0x8653, 0x4890, 0x8654, 0x1951,
- 0x8655, 0x1094, 0x8656, 0x4891, 0x8657, 0x42D2, 0x865A, 0x068F,
- 0x865B, 0x3418, 0x865C, 0x0F82, 0x865E, 0x06EB, 0x865F, 0x1952,
- 0x8662, 0x42D3, 0x8663, 0x3AE8, 0x8667, 0x1953, 0x866B, 0x0BAC,
- 0x866C, 0x3AE9, 0x866F, 0x3AEA, 0x8671, 0x1954, 0x8675, 0x42D5,
- 0x8677, 0x4892, 0x8679, 0x0CD2, 0x867A, 0x3AEB, 0x867B, 0x047E,
- 0x867D, 0x3786, 0x8687, 0x4893, 0x8689, 0x4894, 0x868A, 0x0563,
- 0x868B, 0x1959, 0x868C, 0x195A, 0x868D, 0x3AEC, 0x8691, 0x3AED,
- 0x8693, 0x1955, 0x8695, 0x088B, 0x8698, 0x3AEE, 0x869C, 0x4895,
- 0x869D, 0x4896, 0x86A3, 0x1956, 0x86A4, 0x0CF8, 0x86A7, 0x3AEF,
- 0x86A8, 0x3AF0, 0x86A9, 0x1957, 0x86AA, 0x1958, 0x86AB, 0x1962,
- 0x86AF, 0x195C, 0x86B0, 0x195F, 0x86B1, 0x4897, 0x86B3, 0x4898,
- 0x86B6, 0x195B, 0x86B8, 0x42D6, 0x86C0, 0x4D2B, 0x86C1, 0x4899,
- 0x86C3, 0x489A, 0x86C4, 0x195D, 0x86C6, 0x195E, 0x86C7, 0x0904,
- 0x86C9, 0x1960, 0x86CB, 0x0B7F, 0x86CD, 0x072C, 0x86CE, 0x05A0,
- 0x86D1, 0x489B, 0x86D4, 0x1963, 0x86D5, 0x489C, 0x86D7, 0x489D,
- 0x86D9, 0x059D, 0x86DB, 0x1968, 0x86DE, 0x1964, 0x86DF, 0x1967,
- 0x86E3, 0x489E, 0x86E4, 0x0D4E, 0x86E6, 0x489F, 0x86E9, 0x1965,
- 0x86EC, 0x1966, 0x86ED, 0x0DBA, 0x86EE, 0x0D6E, 0x86EF, 0x1969,
- 0x86F8, 0x0B5D, 0x86F9, 0x1973, 0x86FA, 0x3AF1, 0x86FB, 0x196F,
- 0x86FC, 0x42D7, 0x86FD, 0x3AF2, 0x86FE, 0x056B, 0x8700, 0x196D,
- 0x8702, 0x0E58, 0x8703, 0x196E, 0x8705, 0x48A1, 0x8706, 0x196B,
- 0x8707, 0x48A2, 0x8708, 0x196C, 0x8709, 0x1971, 0x870A, 0x1974,
- 0x870B, 0x3AF3, 0x870D, 0x1972, 0x870E, 0x48A3, 0x8710, 0x48A4,
- 0x8711, 0x1970, 0x8712, 0x196A, 0x8713, 0x3AF4, 0x8714, 0x4D2C,
- 0x8718, 0x0B96, 0x8719, 0x3AF5, 0x871A, 0x197B, 0x871C, 0x0EB6,
- 0x871E, 0x3AF6, 0x871F, 0x48A5, 0x8721, 0x48A6, 0x8722, 0x4D2D,
- 0x8723, 0x48A7, 0x8725, 0x1979, 0x8728, 0x3AF7, 0x8729, 0x197A,
- 0x872E, 0x4D2E, 0x8731, 0x48A8, 0x8734, 0x1975, 0x8737, 0x1977,
- 0x8739, 0x4D2F, 0x873A, 0x48A9, 0x873B, 0x1978, 0x873E, 0x3AF8,
- 0x873F, 0x1976, 0x8740, 0x48AA, 0x8743, 0x48AB, 0x8749, 0x0A8A,
- 0x874B, 0x0FDF, 0x874C, 0x197F, 0x874E, 0x1980, 0x8751, 0x48AC,
- 0x8753, 0x1986, 0x8755, 0x09F0, 0x8757, 0x1982, 0x8758, 0x48AD,
- 0x8759, 0x1985, 0x875D, 0x4D30, 0x875F, 0x197D, 0x8760, 0x197C,
- 0x8763, 0x1987, 0x8764, 0x48AE, 0x8765, 0x48AF, 0x8766, 0x055C,
- 0x8768, 0x1983, 0x876A, 0x1988, 0x876E, 0x1984, 0x8771, 0x3AF9,
- 0x8772, 0x48B0, 0x8774, 0x1981, 0x8776, 0x0BCF, 0x8778, 0x197E,
- 0x877B, 0x4D31, 0x877C, 0x48B1, 0x877F, 0x0D1E, 0x8782, 0x198C,
- 0x8787, 0x42D8, 0x8788, 0x3AFA, 0x8789, 0x48B5, 0x878B, 0x48B6,
- 0x878C, 0x4D32, 0x878D, 0x0F25, 0x878E, 0x4D33, 0x8793, 0x48B7,
- 0x8797, 0x4D34, 0x8798, 0x4D35, 0x8799, 0x3AFB, 0x879E, 0x4D36,
- 0x879F, 0x198B, 0x87A0, 0x48B8, 0x87A2, 0x198A, 0x87A3, 0x4D37,
- 0x87A7, 0x48B4, 0x87AB, 0x1993, 0x87AC, 0x3AFC, 0x87AD, 0x3AFD,
- 0x87AE, 0x4D38, 0x87AF, 0x198D, 0x87B3, 0x1995, 0x87B5, 0x3AFE,
- 0x87BA, 0x0F50, 0x87BB, 0x1998, 0x87BD, 0x198F, 0x87BE, 0x48BB,
- 0x87BF, 0x4D39, 0x87C0, 0x1990, 0x87C1, 0x48BD, 0x87C4, 0x1994,
- 0x87C6, 0x1997, 0x87C7, 0x1996, 0x87C9, 0x4D3A, 0x87CB, 0x198E,
- 0x87CE, 0x48BE, 0x87D0, 0x1991, 0x87D2, 0x19A2, 0x87D6, 0x3AFF,
- 0x87DA, 0x4D3B, 0x87DF, 0x48BF, 0x87E0, 0x199B, 0x87E3, 0x48C1,
- 0x87E5, 0x48C2, 0x87E6, 0x48C3, 0x87EA, 0x48C4, 0x87EB, 0x3B00,
- 0x87EC, 0x1E23, 0x87ED, 0x3B01, 0x87EF, 0x1999, 0x87F2, 0x199A,
- 0x87F5, 0x3C3D, 0x87F6, 0x199F, 0x87F7, 0x19A0, 0x87F9, 0x0588,
- 0x87FB, 0x065C, 0x87FE, 0x199E, 0x8801, 0x3B02, 0x8803, 0x4F58,
- 0x8805, 0x1989, 0x8806, 0x3B04, 0x8807, 0x21A6, 0x880A, 0x42DA,
- 0x880B, 0x3B05, 0x880D, 0x199D, 0x880E, 0x19A1, 0x880F, 0x199C,
- 0x8810, 0x42DB, 0x8811, 0x19A3, 0x8813, 0x48C5, 0x8814, 0x3B06,
- 0x8815, 0x19A5, 0x8816, 0x19A4, 0x8818, 0x4D3C, 0x881B, 0x4D3D,
- 0x881C, 0x3B07, 0x881F, 0x1E85, 0x8821, 0x19A7, 0x8822, 0x19A6,
- 0x8823, 0x1961, 0x8827, 0x19AB, 0x8828, 0x48C6, 0x882D, 0x4D3E,
- 0x882E, 0x48C7, 0x8831, 0x19A8, 0x8832, 0x48C8, 0x8836, 0x19A9,
- 0x8839, 0x19AA, 0x883A, 0x4D3F, 0x883B, 0x19AC, 0x883C, 0x48C9,
- 0x8840, 0x0742, 0x8842, 0x19AE, 0x8844, 0x19AD, 0x8845, 0x4D40,
- 0x8846, 0x093A, 0x884A, 0x48CB, 0x884B, 0x4D41, 0x884C, 0x07E6,
- 0x884D, 0x1524, 0x884E, 0x4D42, 0x8852, 0x19AF, 0x8853, 0x095B,
- 0x8855, 0x4D43, 0x8856, 0x3B08, 0x8857, 0x0597, 0x8858, 0x48CC,
- 0x8859, 0x19B0, 0x885A, 0x4D44, 0x885B, 0x04F4, 0x885D, 0x09BF,
- 0x885E, 0x19B1, 0x885F, 0x3B09, 0x8861, 0x07E7, 0x8862, 0x19B2,
- 0x8863, 0x04A5, 0x8864, 0x3B0A, 0x8868, 0x0DAF, 0x8869, 0x48CF,
- 0x886B, 0x19B3, 0x886E, 0x4D45, 0x886F, 0x48D1, 0x8870, 0x0A30,
- 0x8872, 0x19BA, 0x8875, 0x19B7, 0x8877, 0x0BAD, 0x887D, 0x19B8,
- 0x887E, 0x19B5, 0x887F, 0x06D6, 0x8881, 0x19B4, 0x8882, 0x19BB,
- 0x8888, 0x070C, 0x888B, 0x0B3E, 0x888D, 0x19C1, 0x8892, 0x19BD,
- 0x8896, 0x0B15, 0x8897, 0x19BC, 0x8898, 0x3B0B, 0x8899, 0x19BF,
- 0x889A, 0x4D46, 0x889B, 0x4D47, 0x889C, 0x4D48, 0x889E, 0x19B6,
- 0x88A0, 0x48D2, 0x88A2, 0x19C0, 0x88A4, 0x19C2, 0x88AA, 0x3B0C,
- 0x88AB, 0x0D83, 0x88AE, 0x19BE, 0x88B0, 0x19C3, 0x88B1, 0x19C5,
- 0x88B4, 0x0787, 0x88B5, 0x19B9, 0x88B7, 0x0485, 0x88BC, 0x48D3,
- 0x88BD, 0x3B0D, 0x88BE, 0x3B0E, 0x88BF, 0x19C4, 0x88C0, 0x48D4,
- 0x88C1, 0x084B, 0x88C2, 0x0FBE, 0x88C3, 0x19C6, 0x88C4, 0x19C7,
- 0x88C5, 0x0AF7, 0x88C6, 0x3789, 0x88CA, 0x3B0F, 0x88CD, 0x4D49,
- 0x88CE, 0x42DC, 0x88CF, 0x0F6A, 0x88D1, 0x48D6, 0x88D2, 0x3B10,
- 0x88D3, 0x48D7, 0x88D4, 0x19C8, 0x88D5, 0x0F1F, 0x88D8, 0x19C9,
- 0x88D9, 0x19CA, 0x88DB, 0x3B11, 0x88DC, 0x0E34, 0x88DD, 0x19CB,
- 0x88DF, 0x0830, 0x88E0, 0x4D4A, 0x88E1, 0x0F6B, 0x88E8, 0x19D0,
- 0x88EF, 0x4D4B, 0x88F0, 0x3B12, 0x88F1, 0x3B13, 0x88F2, 0x19D1,
- 0x88F3, 0x09C0, 0x88F4, 0x19CF, 0x88F5, 0x21A7, 0x88F8, 0x0F51,
- 0x88F9, 0x19CC, 0x88FC, 0x19CE, 0x88FD, 0x0A61, 0x88FE, 0x0A44,
- 0x8901, 0x48D9, 0x8902, 0x19CD, 0x8904, 0x19D2, 0x8906, 0x3B14,
- 0x8907, 0x0DF3, 0x890A, 0x19D4, 0x890C, 0x19D3, 0x890E, 0x4D4C,
- 0x890F, 0x4D4D, 0x8910, 0x05CA, 0x8912, 0x0E59, 0x8913, 0x19D5,
- 0x8918, 0x3B15, 0x8919, 0x3B16, 0x891A, 0x3B17, 0x891C, 0x20A8,
- 0x891D, 0x19E1, 0x891E, 0x19D7, 0x8925, 0x19D8, 0x8926, 0x4D4E,
- 0x8927, 0x3B18, 0x892A, 0x19D9, 0x892B, 0x19DA, 0x8930, 0x3B19,
- 0x8932, 0x42DE, 0x8935, 0x4D4F, 0x8936, 0x19DE, 0x8937, 0x48DB,
- 0x8938, 0x19DF, 0x8939, 0x42DF, 0x893B, 0x19DD, 0x893E, 0x3B1A,
- 0x8940, 0x42E0, 0x8941, 0x19DB, 0x8942, 0x48DD, 0x8943, 0x19D6,
- 0x8944, 0x19DC, 0x8945, 0x48DE, 0x8949, 0x48DF, 0x894C, 0x19E0,
- 0x894D, 0x1BD0, 0x8956, 0x0528, 0x895A, 0x4D50, 0x895C, 0x4D51,
- 0x895E, 0x19E3, 0x895F, 0x06D7, 0x8960, 0x19E2, 0x8962, 0x48E1,
- 0x8964, 0x19E5, 0x8966, 0x19E4, 0x896A, 0x19E7, 0x896B, 0x4D52,
- 0x896D, 0x19E6, 0x896F, 0x19E8, 0x8970, 0x4D53, 0x8972, 0x093B,
- 0x8974, 0x19E9, 0x8977, 0x19EA, 0x897B, 0x3B1B, 0x897C, 0x4D54,
- 0x897E, 0x19EB, 0x897F, 0x0A62, 0x8980, 0x362E, 0x8981, 0x0F41,
- 0x8983, 0x19EC, 0x8986, 0x0DF4, 0x8987, 0x0CFC, 0x8988, 0x19ED,
- 0x8989, 0x48E2, 0x898A, 0x19EE, 0x898B, 0x075F, 0x898F, 0x0646,
- 0x8990, 0x48E3, 0x8993, 0x19EF, 0x8994, 0x42E1, 0x8996, 0x08B9,
- 0x8997, 0x0CF7, 0x8998, 0x19F0, 0x899A, 0x05AE, 0x899F, 0x48E4,
- 0x89A1, 0x19F1, 0x89A5, 0x4D55, 0x89A6, 0x19F3, 0x89A7, 0x0F61,
- 0x89A9, 0x19F2, 0x89AA, 0x0A0C, 0x89AC, 0x19F4, 0x89AF, 0x19F5,
- 0x89B0, 0x48E5, 0x89B2, 0x19F6, 0x89B3, 0x060D, 0x89B5, 0x4D56,
- 0x89B7, 0x48E6, 0x89BA, 0x19F7, 0x89BC, 0x4D57, 0x89BD, 0x19F8,
- 0x89BF, 0x19F9, 0x89C0, 0x19FA, 0x89D2, 0x05AF, 0x89D4, 0x3B1C,
- 0x89D5, 0x4D58, 0x89D6, 0x3B1D, 0x89D8, 0x48E7, 0x89DA, 0x19FB,
- 0x89DC, 0x19FC, 0x89DD, 0x19FD, 0x89E3, 0x0572, 0x89E5, 0x3B1E,
- 0x89E6, 0x09EE, 0x89E7, 0x19FE, 0x89EB, 0x48E8, 0x89F1, 0x3B1F,
- 0x89F3, 0x48EA, 0x89F4, 0x19FF, 0x89F6, 0x42E2, 0x89F8, 0x1A00,
- 0x89FD, 0x48EB, 0x89FF, 0x48EC, 0x8A00, 0x0774, 0x8A01, 0x35BC,
- 0x8A02, 0x0C17, 0x8A03, 0x1A01, 0x8A07, 0x3B20, 0x8A08, 0x072D,
- 0x8A0A, 0x0A1C, 0x8A0C, 0x1A04, 0x8A0E, 0x0C7C, 0x8A0F, 0x3B21,
- 0x8A10, 0x1A03, 0x8A11, 0x48EE, 0x8A12, 0x21A8, 0x8A13, 0x0707,
- 0x8A14, 0x48EF, 0x8A15, 0x3B22, 0x8A16, 0x1A02, 0x8A17, 0x0B57,
- 0x8A18, 0x0647, 0x8A1B, 0x1A05, 0x8A1D, 0x1A06, 0x8A1F, 0x09C1,
- 0x8A21, 0x48F1, 0x8A22, 0x3B23, 0x8A23, 0x0743, 0x8A25, 0x1A07,
- 0x8A2A, 0x0E5A, 0x8A2D, 0x0A83, 0x8A31, 0x0690, 0x8A33, 0x0F01,
- 0x8A34, 0x0ACC, 0x8A35, 0x48F2, 0x8A36, 0x1A08, 0x8A37, 0x21A9,
- 0x8A3A, 0x0A0D, 0x8A3B, 0x0BAE, 0x8A3C, 0x09C2, 0x8A3E, 0x48F3,
- 0x8A41, 0x1A09, 0x8A45, 0x48F4, 0x8A46, 0x1A0C, 0x8A47, 0x42E3,
- 0x8A48, 0x1A0D, 0x8A49, 0x4D59, 0x8A4D, 0x48F5, 0x8A4E, 0x3B24,
- 0x8A50, 0x082E, 0x8A51, 0x0B22, 0x8A52, 0x1A0B, 0x8A54, 0x09C3,
- 0x8A55, 0x0DB0, 0x8A57, 0x4D5A, 0x8A58, 0x48F6, 0x8A5B, 0x1A0A,
- 0x8A5D, 0x42E4, 0x8A5E, 0x08BA, 0x8A60, 0x04F5, 0x8A61, 0x42E5,
- 0x8A62, 0x1A11, 0x8A63, 0x072E, 0x8A66, 0x08BC, 0x8A67, 0x4D5B,
- 0x8A69, 0x08BB, 0x8A6B, 0x0FF3, 0x8A6C, 0x1A10, 0x8A6D, 0x1A0F,
- 0x8A6E, 0x0AA9, 0x8A70, 0x0667, 0x8A71, 0x0FE9, 0x8A72, 0x0598,
- 0x8A73, 0x09C4, 0x8A75, 0x42E6, 0x8A79, 0x21AA, 0x8A7C, 0x1A0E,
- 0x8A7E, 0x4D5C, 0x8A7F, 0x3B25, 0x8A82, 0x1A13, 0x8A84, 0x1A14,
- 0x8A85, 0x1A12, 0x8A86, 0x4D5D, 0x8A87, 0x078C, 0x8A89, 0x0F2A,
- 0x8A8C, 0x08BD, 0x8A8D, 0x0CDD, 0x8A90, 0x48F8, 0x8A91, 0x1A17,
- 0x8A93, 0x0A64, 0x8A95, 0x0B80, 0x8A96, 0x4D5E, 0x8A98, 0x0F20,
- 0x8A9A, 0x1A1A, 0x8A9E, 0x07A0, 0x8AA0, 0x0A63, 0x8AA1, 0x1A16,
- 0x8AA3, 0x1A1B, 0x8AA4, 0x07A1, 0x8AA5, 0x1A18, 0x8AA6, 0x1A19,
- 0x8AA7, 0x21AB, 0x8AA8, 0x1A15, 0x8AAA, 0x3638, 0x8AAC, 0x0A86,
- 0x8AAD, 0x0CA1, 0x8AAE, 0x48F7, 0x8AB0, 0x0B6D, 0x8AB2, 0x055D,
- 0x8AB6, 0x4D5F, 0x8AB7, 0x48F9, 0x8AB9, 0x0D84, 0x8ABC, 0x065D,
- 0x8ABE, 0x21AC, 0x8ABF, 0x0BD0, 0x8AC2, 0x1A1E, 0x8AC4, 0x1A1C,
- 0x8AC7, 0x0B8A, 0x8AC9, 0x4D60, 0x8ACB, 0x0A65, 0x8ACC, 0x060E,
- 0x8ACD, 0x1A1D, 0x8ACF, 0x0A21, 0x8AD0, 0x42E7, 0x8AD1, 0x4D61,
- 0x8AD2, 0x0F92, 0x8AD6, 0x0FE6, 0x8AD7, 0x48FA, 0x8ADA, 0x1A1F,
- 0x8ADB, 0x1A2A, 0x8ADC, 0x0BD1, 0x8ADD, 0x4D62, 0x8ADE, 0x1A29,
- 0x8ADF, 0x21AD, 0x8AE0, 0x1A26, 0x8AE1, 0x1A2E, 0x8AE2, 0x1A27,
- 0x8AE4, 0x1A23, 0x8AE6, 0x0C18, 0x8AE7, 0x1A22, 0x8AEB, 0x1A20,
- 0x8AEC, 0x4D63, 0x8AED, 0x0F0B, 0x8AEE, 0x08BE, 0x8AF1, 0x1A24,
- 0x8AF3, 0x1A21, 0x8AF4, 0x3B26, 0x8AF5, 0x4D64, 0x8AF6, 0x21AF,
- 0x8AF7, 0x1A28, 0x8AF8, 0x097E, 0x8AFA, 0x0775, 0x8AFC, 0x48FB,
- 0x8AFE, 0x0B5A, 0x8B00, 0x0E73, 0x8B01, 0x04FC, 0x8B02, 0x04A6,
- 0x8B04, 0x0C7D, 0x8B05, 0x48FE, 0x8B06, 0x4D65, 0x8B07, 0x1A2C,
- 0x8B0A, 0x48FD, 0x8B0C, 0x1A2B, 0x8B0D, 0x48FF, 0x8B0E, 0x0CBE,
- 0x8B0F, 0x4D66, 0x8B10, 0x1A30, 0x8B11, 0x4D67, 0x8B14, 0x1A25,
- 0x8B16, 0x1A2F, 0x8B17, 0x1A31, 0x8B19, 0x0760, 0x8B1A, 0x1A2D,
- 0x8B1B, 0x07E8, 0x8B1C, 0x4900, 0x8B1D, 0x0901, 0x8B1F, 0x3B27,
- 0x8B20, 0x1A32, 0x8B21, 0x0F42, 0x8B26, 0x1A35, 0x8B28, 0x1A38,
- 0x8B2B, 0x1A36, 0x8B2C, 0x0DA7, 0x8B2D, 0x4901, 0x8B33, 0x1A33,
- 0x8B37, 0x3B28, 0x8B39, 0x06D8, 0x8B3E, 0x1A37, 0x8B41, 0x1A39,
- 0x8B43, 0x3B29, 0x8B44, 0x3B2A, 0x8B45, 0x4D68, 0x8B46, 0x42E8,
- 0x8B49, 0x1A3D, 0x8B4C, 0x1A3A, 0x8B4E, 0x1A3C, 0x8B4F, 0x1A3B,
- 0x8B51, 0x4903, 0x8B52, 0x4D69, 0x8B53, 0x21B0, 0x8B54, 0x3B2B,
- 0x8B56, 0x1A3E, 0x8B58, 0x08DD, 0x8B59, 0x42E9, 0x8B5A, 0x1A40,
- 0x8B5B, 0x1A3F, 0x8B5C, 0x0DDA, 0x8B5E, 0x4904, 0x8B5F, 0x1A42,
- 0x8B66, 0x072F, 0x8B69, 0x42EA, 0x8B6B, 0x1A41, 0x8B6C, 0x1A43,
- 0x8B6D, 0x4D6A, 0x8B6F, 0x1A44, 0x8B70, 0x065E, 0x8B71, 0x182E,
- 0x8B72, 0x09E1, 0x8B74, 0x1A45, 0x8B76, 0x4905, 0x8B77, 0x07A2,
- 0x8B78, 0x4D6B, 0x8B7C, 0x4D6C, 0x8B7D, 0x1A46, 0x8B7E, 0x4D6D,
- 0x8B7F, 0x21B1, 0x8B80, 0x1A47, 0x8B81, 0x4906, 0x8B83, 0x088C,
- 0x8B85, 0x4D6E, 0x8B8A, 0x13D3, 0x8B8B, 0x4907, 0x8B8C, 0x1A48,
- 0x8B8E, 0x1A49, 0x8B90, 0x093C, 0x8B92, 0x1A4A, 0x8B93, 0x1A4B,
- 0x8B94, 0x4908, 0x8B95, 0x4909, 0x8B96, 0x1A4C, 0x8B99, 0x1A4D,
- 0x8B9A, 0x1A4E, 0x8B9C, 0x3B2C, 0x8B9D, 0x42EB, 0x8B9E, 0x3B2D,
- 0x8B9F, 0x4D6F, 0x8C37, 0x0B69, 0x8C39, 0x490A, 0x8C3A, 0x1A4F,
- 0x8C3D, 0x490C, 0x8C3F, 0x1A51, 0x8C41, 0x1A50, 0x8C45, 0x490F,
- 0x8C46, 0x0C7E, 0x8C47, 0x3B2E, 0x8C48, 0x1A52, 0x8C49, 0x42EC,
- 0x8C4A, 0x0E5B, 0x8C4B, 0x4D70, 0x8C4C, 0x1A53, 0x8C4E, 0x1A54,
- 0x8C4F, 0x4910, 0x8C50, 0x1A55, 0x8C53, 0x4D71, 0x8C54, 0x3B2F,
- 0x8C55, 0x1A56, 0x8C57, 0x4911, 0x8C5A, 0x0CB2, 0x8C61, 0x09C5,
- 0x8C62, 0x1A57, 0x8C68, 0x42ED, 0x8C69, 0x4912, 0x8C6A, 0x07FD,
- 0x8C6B, 0x1007, 0x8C6C, 0x1A58, 0x8C6D, 0x4913, 0x8C73, 0x3B30,
- 0x8C78, 0x1A59, 0x8C79, 0x0DB1, 0x8C7A, 0x1A5A, 0x8C7B, 0x4D72,
- 0x8C7C, 0x1A62, 0x8C82, 0x1A5B, 0x8C85, 0x1A5D, 0x8C89, 0x1A5C,
- 0x8C8A, 0x1A5E, 0x8C8C, 0x0E74, 0x8C8D, 0x1A5F, 0x8C8E, 0x1A60,
- 0x8C92, 0x4916, 0x8C93, 0x4915, 0x8C94, 0x1A61, 0x8C98, 0x1A63,
- 0x8C99, 0x4917, 0x8C9B, 0x4919, 0x8C9D, 0x058B, 0x8C9E, 0x0C03,
- 0x8C9F, 0x354C, 0x8CA0, 0x0DDB, 0x8CA1, 0x0852, 0x8CA2, 0x07E9,
- 0x8CA4, 0x3B31, 0x8CA7, 0x0DC1, 0x8CA8, 0x055F, 0x8CA9, 0x0D62,
- 0x8CAA, 0x1A66, 0x8CAB, 0x060F, 0x8CAC, 0x0A79, 0x8CAD, 0x1A65,
- 0x8CAE, 0x1A6A, 0x8CAF, 0x0BB7, 0x8CB0, 0x0EEF, 0x8CB2, 0x1A68,
- 0x8CB3, 0x1A69, 0x8CB4, 0x0648, 0x8CB6, 0x1A6B, 0x8CB7, 0x0D19,
- 0x8CB8, 0x0B3F, 0x8CBA, 0x4D73, 0x8CBB, 0x0D85, 0x8CBC, 0x0C37,
- 0x8CBD, 0x1A67, 0x8CBF, 0x0E75, 0x8CC0, 0x056C, 0x8CC1, 0x1A6D,
- 0x8CC2, 0x0FCE, 0x8CC3, 0x0BDE, 0x8CC4, 0x0FEB, 0x8CC5, 0x4D74,
- 0x8CC7, 0x08BF, 0x8CC8, 0x1A6C, 0x8CC9, 0x4D75, 0x8CCA, 0x0B11,
- 0x8CCD, 0x1A7D, 0x8CCE, 0x0AAA, 0x8CD1, 0x0CD0, 0x8CD2, 0x4D76,
- 0x8CD3, 0x0DC2, 0x8CD5, 0x491B, 0x8CD6, 0x491A, 0x8CD9, 0x3B32,
- 0x8CDA, 0x1A70, 0x8CDB, 0x088D, 0x8CDC, 0x08C0, 0x8CDE, 0x09C6,
- 0x8CE0, 0x0D1B, 0x8CE1, 0x3B33, 0x8CE2, 0x0761, 0x8CE3, 0x1A6F,
- 0x8CE4, 0x1A6E, 0x8CE6, 0x0DDC, 0x8CEA, 0x08ED, 0x8CEC, 0x4D77,
- 0x8CED, 0x0C4C, 0x8CF0, 0x21B2, 0x8CF1, 0x491D, 0x8CF4, 0x21B3,
- 0x8CF5, 0x4D78, 0x8CF7, 0x4D79, 0x8CF8, 0x3B34, 0x8CFA, 0x1A72,
- 0x8CFB, 0x1A73, 0x8CFC, 0x07EA, 0x8CFD, 0x1A71, 0x8CFE, 0x3B35,
- 0x8D01, 0x4D7A, 0x8D03, 0x4D7B, 0x8D04, 0x1A74, 0x8D05, 0x1A75,
- 0x8D07, 0x1A77, 0x8D08, 0x0B03, 0x8D09, 0x491F, 0x8D0A, 0x1A76,
- 0x8D0B, 0x0622, 0x8D0D, 0x1A79, 0x8D0E, 0x4920, 0x8D0F, 0x1A78,
- 0x8D10, 0x1A7A, 0x8D12, 0x21B4, 0x8D13, 0x1A7C, 0x8D14, 0x1A7E,
- 0x8D16, 0x1A7F, 0x8D17, 0x4D7C, 0x8D1B, 0x3B36, 0x8D1C, 0x4D7D,
- 0x8D64, 0x0A7A, 0x8D66, 0x08FB, 0x8D67, 0x1A80, 0x8D69, 0x3B37,
- 0x8D6B, 0x05B0, 0x8D6C, 0x3B38, 0x8D6D, 0x1A81, 0x8D6E, 0x4D7E,
- 0x8D70, 0x0AF8, 0x8D71, 0x1A82, 0x8D73, 0x1A83, 0x8D74, 0x0DDD,
- 0x8D76, 0x21B5, 0x8D77, 0x0649, 0x8D81, 0x1A84, 0x8D84, 0x3B39,
- 0x8D85, 0x0BD2, 0x8D8A, 0x04FD, 0x8D8D, 0x3B3A, 0x8D91, 0x4D7F,
- 0x8D95, 0x3B3B, 0x8D99, 0x1A85, 0x8D9F, 0x4D80, 0x8DA3, 0x091D,
- 0x8DA6, 0x3B3C, 0x8DA8, 0x0A3C, 0x8DAB, 0x4D81, 0x8DAF, 0x42EE,
- 0x8DB2, 0x4D82, 0x8DB3, 0x0B0D, 0x8DBA, 0x1A88, 0x8DBE, 0x1A87,
- 0x8DC2, 0x1A86, 0x8DC6, 0x3B3D, 0x8DC8, 0x4921, 0x8DCB, 0x1A8E,
- 0x8DCC, 0x1A8C, 0x8DCE, 0x3B3E, 0x8DCF, 0x1A89, 0x8DD1, 0x42EF,
- 0x8DD5, 0x4D83, 0x8DD6, 0x1A8B, 0x8DD7, 0x42F0, 0x8DD9, 0x4922,
- 0x8DDA, 0x1A8A, 0x8DDB, 0x1A8D, 0x8DDD, 0x0691, 0x8DDF, 0x1A91,
- 0x8DE1, 0x0A7B, 0x8DE3, 0x1A92, 0x8DE4, 0x3B3F, 0x8DE7, 0x4D84,
- 0x8DE8, 0x078D, 0x8DEA, 0x1A8F, 0x8DEB, 0x1A90, 0x8DEC, 0x3B40,
- 0x8DEF, 0x0FCF, 0x8DF1, 0x4D85, 0x8DF2, 0x4D86, 0x8DF3, 0x0BD3,
- 0x8DF4, 0x4D87, 0x8DF5, 0x0AAB, 0x8DFC, 0x1A93, 0x8DFD, 0x4925,
- 0x8DFF, 0x1A96, 0x8E01, 0x4D88, 0x8E06, 0x4926, 0x8E08, 0x1A94,
- 0x8E09, 0x1A95, 0x8E0A, 0x0F43, 0x8E0B, 0x4D89, 0x8E0C, 0x4923,
- 0x8E0F, 0x0C7F, 0x8E10, 0x1A99, 0x8E14, 0x4928, 0x8E16, 0x4929,
- 0x8E1D, 0x1A97, 0x8E1E, 0x1A98, 0x8E1F, 0x1A9A, 0x8E20, 0x3B41,
- 0x8E21, 0x492A, 0x8E22, 0x492B, 0x8E23, 0x42F1, 0x8E26, 0x4D8A,
- 0x8E27, 0x492C, 0x8E2A, 0x1AA8, 0x8E30, 0x1A9D, 0x8E31, 0x4D8B,
- 0x8E34, 0x1A9E, 0x8E35, 0x1A9C, 0x8E36, 0x492F, 0x8E39, 0x4930,
- 0x8E3D, 0x42F2, 0x8E40, 0x4D8C, 0x8E41, 0x4D8D, 0x8E42, 0x1A9B,
- 0x8E44, 0x0C19, 0x8E47, 0x1AA0, 0x8E48, 0x1AA4, 0x8E49, 0x1AA1,
- 0x8E4A, 0x1A9F, 0x8E4B, 0x3B42, 0x8E4C, 0x1AA2, 0x8E4D, 0x4D8E,
- 0x8E4F, 0x4D8F, 0x8E50, 0x1AA3, 0x8E54, 0x4931, 0x8E55, 0x1AAA,
- 0x8E59, 0x1AA5, 0x8E5C, 0x4D90, 0x8E5F, 0x0A7C, 0x8E60, 0x1AA7,
- 0x8E61, 0x4D91, 0x8E62, 0x4932, 0x8E63, 0x1AA9, 0x8E64, 0x1AA6,
- 0x8E69, 0x4D92, 0x8E6C, 0x3B43, 0x8E6D, 0x4933, 0x8E6F, 0x4934,
- 0x8E70, 0x3B44, 0x8E71, 0x4D93, 0x8E72, 0x1AAC, 0x8E74, 0x093D,
- 0x8E75, 0x4D94, 0x8E76, 0x1AAB, 0x8E77, 0x4D95, 0x8E7A, 0x3B45,
- 0x8E7B, 0x42F3, 0x8E7C, 0x1AAD, 0x8E81, 0x1AAE, 0x8E84, 0x1AB1,
- 0x8E85, 0x1AB0, 0x8E87, 0x1AAF, 0x8E89, 0x4D96, 0x8E8A, 0x1AB3,
- 0x8E8B, 0x1AB2, 0x8E8D, 0x0F02, 0x8E90, 0x4D97, 0x8E91, 0x1AB5,
- 0x8E92, 0x3B46, 0x8E93, 0x1AB4, 0x8E94, 0x1AB6, 0x8E95, 0x4D98,
- 0x8E98, 0x4935, 0x8E99, 0x1AB7, 0x8E9A, 0x4D99, 0x8E9E, 0x4936,
- 0x8EA1, 0x1AB9, 0x8EA7, 0x4D9A, 0x8EA9, 0x4D9B, 0x8EAA, 0x1AB8,
- 0x8EAB, 0x0A0E, 0x8EAC, 0x1ABA, 0x8EAD, 0x4D9C, 0x8EAE, 0x3B47,
- 0x8EAF, 0x06E5, 0x8EB0, 0x1ABB, 0x8EB1, 0x1ABD, 0x8EB3, 0x3B48,
- 0x8EB5, 0x4937, 0x8EB6, 0x3703, 0x8EBB, 0x4938, 0x8EBE, 0x1ABE,
- 0x8EC0, 0x1DEF, 0x8EC5, 0x1ABF, 0x8EC6, 0x1ABC, 0x8EC8, 0x1AC0,
- 0x8ECA, 0x0902, 0x8ECB, 0x1AC1, 0x8ECC, 0x064A, 0x8ECD, 0x0709,
- 0x8ECF, 0x21B7, 0x8ED1, 0x3B49, 0x8ED2, 0x0762, 0x8ED4, 0x3B4A,
- 0x8EDB, 0x1AC2, 0x8EDF, 0x0CC8, 0x8EE2, 0x0C38, 0x8EE3, 0x1AC3,
- 0x8EE8, 0x4D9D, 0x8EEB, 0x1AC6, 0x8EF0, 0x4D9E, 0x8EF8, 0x08E0,
- 0x8EF9, 0x3B4B, 0x8EFA, 0x42F6, 0x8EFB, 0x1AC5, 0x8EFC, 0x1AC4,
- 0x8EFD, 0x0730, 0x8EFE, 0x1AC7, 0x8F00, 0x493C, 0x8F03, 0x05B1,
- 0x8F05, 0x1AC9, 0x8F07, 0x4D9F, 0x8F08, 0x493D, 0x8F09, 0x084C,
- 0x8F0A, 0x1AC8, 0x8F0C, 0x1AD1, 0x8F12, 0x1ACB, 0x8F13, 0x1ACD,
- 0x8F14, 0x0E35, 0x8F15, 0x1ACA, 0x8F17, 0x3B4C, 0x8F18, 0x4DA0,
- 0x8F19, 0x1ACC, 0x8F1B, 0x1AD0, 0x8F1C, 0x1ACE, 0x8F1D, 0x064B,
- 0x8F1E, 0x42F7, 0x8F1F, 0x1ACF, 0x8F25, 0x4DA1, 0x8F26, 0x1AD2,
- 0x8F27, 0x4DA2, 0x8F29, 0x0D10, 0x8F2A, 0x0FA0, 0x8F2B, 0x493E,
- 0x8F2C, 0x4DA3, 0x8F2D, 0x42F8, 0x8F2F, 0x093E, 0x8F33, 0x1AD3,
- 0x8F35, 0x4DA4, 0x8F36, 0x3B4D, 0x8F38, 0x0F0C, 0x8F39, 0x1AD5,
- 0x8F3A, 0x4DA5, 0x8F3B, 0x1AD4, 0x8F3E, 0x1AD8, 0x8F3F, 0x0F2B,
- 0x8F40, 0x493F, 0x8F42, 0x1AD7, 0x8F43, 0x4DA6, 0x8F44, 0x05CB,
- 0x8F45, 0x1AD6, 0x8F46, 0x1ADB, 0x8F47, 0x4DA7, 0x8F49, 0x1ADA,
- 0x8F4A, 0x4940, 0x8F4C, 0x1AD9, 0x8F4D, 0x0C2C, 0x8F4E, 0x1ADC,
- 0x8F51, 0x4DA8, 0x8F54, 0x42F9, 0x8F55, 0x4DA9, 0x8F57, 0x1ADD,
- 0x8F58, 0x4941, 0x8F5C, 0x1ADE, 0x8F5F, 0x07FE, 0x8F61, 0x06FB,
- 0x8F62, 0x1ADF, 0x8F63, 0x1AE0, 0x8F64, 0x1AE1, 0x8F9B, 0x0A0F,
- 0x8F9C, 0x1AE2, 0x8F9E, 0x08D9, 0x8F9F, 0x1AE3, 0x8FA0, 0x4DAA,
- 0x8FA1, 0x4DAB, 0x8FA2, 0x4DAC, 0x8FA3, 0x1AE4, 0x8FA4, 0x4943,
- 0x8FA5, 0x4DAD, 0x8FA6, 0x3B4E, 0x8FA7, 0x10B6, 0x8FA8, 0x10B5,
- 0x8FAD, 0x1AE5, 0x8FAE, 0x17FF, 0x8FAF, 0x1AE6, 0x8FB0, 0x0B62,
- 0x8FB1, 0x09F1, 0x8FB2, 0x0CF6, 0x8FB4, 0x4944, 0x8FB5, 0x3B4F,
- 0x8FB6, 0x3B50, 0x8FB7, 0x1AE7, 0x8FBA, 0x0E25, 0x8FBB, 0x0BF0,
- 0x8FBC, 0x0810, 0x8FBF, 0x0B67, 0x8FC1, 0x4946, 0x8FC2, 0x04CC,
- 0x8FC4, 0x0EA6, 0x8FC5, 0x0A1D, 0x8FC6, 0x4947, 0x8FC8, 0x3799,
- 0x8FCA, 0x4949, 0x8FCD, 0x494A, 0x8FCE, 0x0734, 0x8FD1, 0x06D9,
- 0x8FD3, 0x494B, 0x8FD4, 0x0E26, 0x8FD5, 0x494C, 0x8FDA, 0x1AE8,
- 0x8FE0, 0x3B52, 0x8FE2, 0x1AEA, 0x8FE4, 0x3B53, 0x8FE5, 0x1AE9,
- 0x8FE6, 0x0560, 0x8FE8, 0x42FB, 0x8FE9, 0x0CCE, 0x8FEA, 0x1AEB,
- 0x8FEB, 0x0D2D, 0x8FED, 0x0C2D, 0x8FEE, 0x42FC, 0x8FEF, 0x1AEC,
- 0x8FF0, 0x095C, 0x8FF1, 0x494D, 0x8FF4, 0x1AEE, 0x8FF5, 0x494E,
- 0x8FF6, 0x3B54, 0x8FF7, 0x0ECE, 0x8FF8, 0x1AFD, 0x8FF9, 0x1AF0,
- 0x8FFA, 0x1AF1, 0x8FFB, 0x494F, 0x8FFD, 0x0BE5, 0x9000, 0x0B40,
- 0x9001, 0x0AF9, 0x9002, 0x3B55, 0x9003, 0x0C80, 0x9004, 0x4DAE,
- 0x9005, 0x1AEF, 0x9006, 0x066F, 0x9008, 0x42FD, 0x900B, 0x1AF8,
- 0x900C, 0x4950, 0x900D, 0x1AF5, 0x900E, 0x1B02, 0x900F, 0x0C81,
- 0x9010, 0x0B9E, 0x9011, 0x1AF2, 0x9013, 0x0C1A, 0x9014, 0x0C4D,
- 0x9015, 0x1AF3, 0x9016, 0x1AF7, 0x9017, 0x0A26, 0x9019, 0x0D1D,
- 0x901A, 0x0BE8, 0x901B, 0x4DAF, 0x901D, 0x0A66, 0x901E, 0x1AF6,
- 0x901F, 0x0B0E, 0x9020, 0x0B04, 0x9021, 0x1AF4, 0x9022, 0x046D,
- 0x9023, 0x0FC8, 0x9027, 0x1AF9, 0x902C, 0x3B56, 0x902D, 0x42FE,
- 0x902E, 0x0B41, 0x902F, 0x4DB0, 0x9031, 0x093F, 0x9032, 0x0A10,
- 0x9035, 0x1AFB, 0x9036, 0x1AFA, 0x9037, 0x4951, 0x9038, 0x04B3,
- 0x9039, 0x1AFC, 0x903C, 0x0DA1, 0x903E, 0x1B04, 0x9041, 0x0CB3,
- 0x9042, 0x0A31, 0x9043, 0x4953, 0x9044, 0x3B57, 0x9045, 0x0B97,
- 0x9047, 0x06F0, 0x9049, 0x1B03, 0x904A, 0x0F21, 0x904B, 0x04E1,
- 0x904C, 0x4DB1, 0x904D, 0x0E27, 0x904E, 0x0561, 0x904F, 0x1AFE,
- 0x9050, 0x1AFF, 0x9051, 0x1B00, 0x9052, 0x1B01, 0x9053, 0x0C93,
- 0x9054, 0x0B61, 0x9055, 0x04A7, 0x9056, 0x1B05, 0x9058, 0x1B06,
- 0x9059, 0x1D34, 0x905B, 0x4DB2, 0x905C, 0x0B1D, 0x905D, 0x4954,
- 0x905E, 0x1B07, 0x9060, 0x0515, 0x9061, 0x0ACE, 0x9063, 0x0763,
- 0x9065, 0x0F44, 0x9067, 0x21BA, 0x9068, 0x1B08, 0x9069, 0x0C26,
- 0x906D, 0x0AFA, 0x906E, 0x0903, 0x906F, 0x1B09, 0x9070, 0x4DB3,
- 0x9072, 0x1B0C, 0x9074, 0x4DB4, 0x9075, 0x096F, 0x9076, 0x1B0A,
- 0x9077, 0x0AAD, 0x9078, 0x0AAC, 0x9079, 0x4DB5, 0x907A, 0x04A8,
- 0x907C, 0x0F93, 0x907D, 0x1B0E, 0x907F, 0x0D86, 0x9080, 0x1B10,
- 0x9081, 0x1B0F, 0x9082, 0x1B0D, 0x9083, 0x1737, 0x9084, 0x0610,
- 0x9085, 0x4957, 0x9087, 0x1AED, 0x9088, 0x3B58, 0x9089, 0x1B12,
- 0x908A, 0x1B11, 0x908B, 0x4DB6, 0x908C, 0x4958, 0x908F, 0x1B13,
- 0x9090, 0x4959, 0x9091, 0x0F22, 0x9095, 0x3B59, 0x9097, 0x42FF,
- 0x9098, 0x4DB7, 0x9099, 0x3B5A, 0x909B, 0x3B5B, 0x90A0, 0x4DB8,
- 0x90A1, 0x495A, 0x90A2, 0x3B5C, 0x90A3, 0x0CB9, 0x90A6, 0x0E5C,
- 0x90A8, 0x1B14, 0x90AA, 0x0905, 0x90AF, 0x1B15, 0x90B0, 0x495C,
- 0x90B1, 0x1B16, 0x90B2, 0x4DB9, 0x90B3, 0x4300, 0x90B4, 0x3B5D,
- 0x90B5, 0x1B17, 0x90B6, 0x495D, 0x90B8, 0x0C1B, 0x90BD, 0x4DBA,
- 0x90BE, 0x4301, 0x90C1, 0x04AE, 0x90C3, 0x495E, 0x90C4, 0x4302,
- 0x90C5, 0x4303, 0x90C7, 0x4304, 0x90C8, 0x495F, 0x90C9, 0x4DBB,
- 0x90CA, 0x07EB, 0x90CE, 0x0FE0, 0x90D7, 0x3B5E, 0x90DB, 0x1B1B,
- 0x90DC, 0x4961, 0x90DD, 0x3B5F, 0x90DE, 0x21BB, 0x90DF, 0x4962,
- 0x90E1, 0x070A, 0x90E2, 0x1B18, 0x90E4, 0x1B19, 0x90E8, 0x0DE6,
- 0x90EB, 0x4967, 0x90ED, 0x05B2, 0x90EF, 0x4305, 0x90F0, 0x4DBC,
- 0x90F2, 0x4965, 0x90F4, 0x3B60, 0x90F5, 0x0F23, 0x90F6, 0x4964,
- 0x90F7, 0x06B7, 0x90FD, 0x0C4E, 0x90FE, 0x4968, 0x90FF, 0x4969,
- 0x9100, 0x4966, 0x9102, 0x1B1C, 0x9104, 0x496A, 0x9105, 0x4DBD,
- 0x9106, 0x496B, 0x9112, 0x1B1D, 0x9114, 0x4306, 0x9115, 0x21BD,
- 0x9116, 0x4307, 0x9117, 0x3B61, 0x9118, 0x496C, 0x9119, 0x1B1E,
- 0x911C, 0x3B62, 0x911E, 0x496D, 0x9122, 0x4308, 0x9123, 0x4309,
- 0x9125, 0x4DBE, 0x9127, 0x21BE, 0x912D, 0x0C1C, 0x912F, 0x430A,
- 0x9130, 0x1B20, 0x9131, 0x3B63, 0x9132, 0x1B1F, 0x9134, 0x430B,
- 0x9137, 0x496E, 0x9139, 0x496F, 0x913A, 0x3B64, 0x913D, 0x3B65,
- 0x9146, 0x4970, 0x9147, 0x4971, 0x9148, 0x3B66, 0x9149, 0x0CAB,
- 0x914A, 0x1B21, 0x914B, 0x0940, 0x914C, 0x090C, 0x914D, 0x0D11,
- 0x914E, 0x0BAF, 0x9152, 0x091E, 0x9154, 0x0A32, 0x9156, 0x1B22,
- 0x9157, 0x4972, 0x9158, 0x1B23, 0x9159, 0x4973, 0x915A, 0x4DBF,
- 0x915B, 0x3B67, 0x9161, 0x3B68, 0x9162, 0x0A23, 0x9163, 0x1B24,
- 0x9164, 0x3B69, 0x9165, 0x1B25, 0x9167, 0x4DC0, 0x9169, 0x1B26,
- 0x916A, 0x0F59, 0x916C, 0x0941, 0x9172, 0x1B28, 0x9173, 0x1B27,
- 0x9174, 0x4974, 0x9175, 0x07EC, 0x9177, 0x0805, 0x9178, 0x088E,
- 0x9179, 0x4975, 0x917A, 0x4DC1, 0x9182, 0x1B2B, 0x9183, 0x430C,
- 0x9185, 0x4976, 0x9187, 0x0970, 0x9189, 0x1B2A, 0x918A, 0x4DC2,
- 0x918B, 0x1B29, 0x918D, 0x0B49, 0x918E, 0x3B6A, 0x9190, 0x07A3,
- 0x9191, 0x4DC3, 0x9192, 0x0A67, 0x9195, 0x4DC4, 0x9197, 0x0D44,
- 0x919C, 0x0943, 0x919E, 0x3B6B, 0x91A2, 0x1B2C, 0x91A4, 0x09C7,
- 0x91A8, 0x3B6C, 0x91AA, 0x1B2F, 0x91AB, 0x1B2D, 0x91AC, 0x1E1B,
- 0x91AD, 0x3B6D, 0x91AE, 0x3B6E, 0x91AF, 0x1B2E, 0x91B0, 0x4DC5,
- 0x91B1, 0x1E61, 0x91B2, 0x3B6F, 0x91B3, 0x4977, 0x91B4, 0x1B31,
- 0x91B5, 0x1B30, 0x91B6, 0x4978, 0x91B8, 0x09E2, 0x91BA, 0x1B32,
- 0x91BB, 0x4DC6, 0x91BC, 0x3B70, 0x91BD, 0x4DC7, 0x91C0, 0x1B33,
- 0x91C1, 0x1B34, 0x91C2, 0x4DC8, 0x91C3, 0x4979, 0x91C4, 0x497A,
- 0x91C5, 0x4DC9, 0x91C6, 0x0D64, 0x91C7, 0x0843, 0x91C8, 0x090D,
- 0x91C9, 0x1B35, 0x91CB, 0x1B36, 0x91CC, 0x0F6C, 0x91CD, 0x094F,
- 0x91CE, 0x0EFA, 0x91CF, 0x0F94, 0x91D0, 0x1B37, 0x91D1, 0x06DA,
- 0x91D6, 0x1B38, 0x91D7, 0x21C0, 0x91D8, 0x0C1D, 0x91DA, 0x21BF,
- 0x91DB, 0x1B3B, 0x91DC, 0x05D6, 0x91DD, 0x0A11, 0x91DE, 0x21C1,
- 0x91DF, 0x1B39, 0x91E1, 0x1B3A, 0x91E3, 0x0BFC, 0x91E4, 0x21C4,
- 0x91E5, 0x21C5, 0x91E6, 0x0E83, 0x91E7, 0x06F4, 0x91EC, 0x497D,
- 0x91ED, 0x21C2, 0x91EE, 0x21C3, 0x91F0, 0x3B71, 0x91F1, 0x430D,
- 0x91F5, 0x1B3D, 0x91F6, 0x1B3E, 0x91F7, 0x3B72, 0x91FB, 0x3B73,
- 0x91FC, 0x1B3C, 0x91FF, 0x1B40, 0x9200, 0x4DCA, 0x9201, 0x497E,
- 0x9206, 0x21C6, 0x9207, 0x3B74, 0x9209, 0x4DCB, 0x920A, 0x21C8,
- 0x920D, 0x0CB7, 0x920E, 0x05A1, 0x9210, 0x21C7, 0x9211, 0x1B44,
- 0x9214, 0x1B41, 0x9215, 0x1B43, 0x9216, 0x497F, 0x9217, 0x4980,
- 0x921E, 0x1B3F, 0x9223, 0x4DCC, 0x9228, 0x3B75, 0x9229, 0x1B8A,
- 0x922C, 0x1B42, 0x9233, 0x3B76, 0x9234, 0x0FB3, 0x9237, 0x078E,
- 0x9238, 0x3B77, 0x9239, 0x21CF, 0x923A, 0x21C9, 0x923C, 0x21CB,
- 0x923F, 0x1B4C, 0x9240, 0x21CA, 0x9242, 0x4982, 0x9243, 0x3B78,
- 0x9244, 0x0C2E, 0x9245, 0x1B47, 0x9247, 0x3B79, 0x9248, 0x1B4A,
- 0x9249, 0x1B48, 0x924A, 0x4983, 0x924B, 0x1B4D, 0x924E, 0x21CC,
- 0x924F, 0x3B7A, 0x9250, 0x1B4E, 0x9251, 0x21CE, 0x9256, 0x4984,
- 0x9257, 0x1B46, 0x9259, 0x21CD, 0x925A, 0x1B53, 0x925B, 0x0516,
- 0x925E, 0x1B45, 0x9260, 0x3B7B, 0x9261, 0x4985, 0x9262, 0x0D41,
- 0x9264, 0x1B49, 0x9265, 0x4986, 0x9266, 0x09C8, 0x9267, 0x21D0,
- 0x9268, 0x4987, 0x9271, 0x07ED, 0x9276, 0x4DCD, 0x9277, 0x21D2,
- 0x9278, 0x21D3, 0x927C, 0x4989, 0x927D, 0x498A, 0x927E, 0x0E76,
- 0x927F, 0x498B, 0x9280, 0x06DC, 0x9283, 0x0950, 0x9285, 0x0C94,
- 0x9288, 0x20AA, 0x9289, 0x498C, 0x928D, 0x498D, 0x928E, 0x4DCE,
- 0x9291, 0x0AAF, 0x9293, 0x1B51, 0x9295, 0x1B4B, 0x9296, 0x1B50,
- 0x9297, 0x498E, 0x9298, 0x0ECF, 0x9299, 0x498F, 0x929A, 0x0BD4,
- 0x929B, 0x1B52, 0x929C, 0x1B4F, 0x929F, 0x4990, 0x92A7, 0x21D1,
- 0x92AB, 0x4991, 0x92AD, 0x0AAE, 0x92AF, 0x4DCF, 0x92B2, 0x4994,
- 0x92B3, 0x3554, 0x92B7, 0x1B56, 0x92B9, 0x1B55, 0x92BB, 0x4DD0,
- 0x92BC, 0x4DD1, 0x92BF, 0x4995, 0x92C0, 0x4996, 0x92C1, 0x4DD2,
- 0x92C2, 0x3B7C, 0x92C3, 0x4DD3, 0x92C5, 0x4DD4, 0x92C6, 0x4997,
- 0x92C8, 0x4DD5, 0x92CB, 0x3B7D, 0x92CC, 0x3B7E, 0x92CE, 0x4998,
- 0x92CF, 0x1B54, 0x92D0, 0x21D7, 0x92D2, 0x0E5D, 0x92D3, 0x21DB,
- 0x92D5, 0x21D9, 0x92D7, 0x21D5, 0x92D9, 0x21D6, 0x92DF, 0x3B7F,
- 0x92E0, 0x21DA, 0x92E4, 0x0985, 0x92E5, 0x4999, 0x92E7, 0x21D4,
- 0x92E9, 0x1B57, 0x92EA, 0x0E2F, 0x92ED, 0x04F6, 0x92F2, 0x0DB8,
- 0x92F3, 0x0BB0, 0x92F7, 0x499D, 0x92F8, 0x0692, 0x92F9, 0x20B0,
- 0x92FA, 0x1B59, 0x92FB, 0x21DE, 0x92FC, 0x07EF, 0x92FF, 0x21E1,
- 0x9302, 0x21E3, 0x9304, 0x345A, 0x9306, 0x087A, 0x930D, 0x3B80,
- 0x930F, 0x1B58, 0x9310, 0x0A33, 0x9311, 0x499A, 0x9314, 0x4DD6,
- 0x9315, 0x3B81, 0x9318, 0x0A34, 0x9319, 0x1B5C, 0x931A, 0x1B5E,
- 0x931D, 0x21E2, 0x931E, 0x21E0, 0x931F, 0x3B82, 0x9320, 0x09E3,
- 0x9321, 0x21DD, 0x9322, 0x1B5D, 0x9323, 0x1B5F, 0x9325, 0x21DC,
- 0x9326, 0x06CB, 0x9327, 0x3B83, 0x9328, 0x0DB7, 0x9329, 0x499E,
- 0x932B, 0x090E, 0x932C, 0x0FC9, 0x932E, 0x1B5B, 0x932F, 0x0868,
- 0x9332, 0x0FE5, 0x9333, 0x4DD7, 0x9335, 0x1B61, 0x9336, 0x4DD8,
- 0x933A, 0x1B60, 0x933B, 0x1B62, 0x9344, 0x1B5A, 0x9347, 0x3B84,
- 0x9348, 0x20A9, 0x9349, 0x430E, 0x934A, 0x3458, 0x934B, 0x0CC1,
- 0x934D, 0x0C4F, 0x9351, 0x49A1, 0x9352, 0x3B85, 0x9354, 0x0BF3,
- 0x9356, 0x1B67, 0x9357, 0x21E5, 0x9358, 0x4DD9, 0x935A, 0x49A2,
- 0x935B, 0x0B81, 0x935C, 0x1B63, 0x9360, 0x1B64, 0x9364, 0x430F,
- 0x9365, 0x4310, 0x936A, 0x3B87, 0x936B, 0x49A3, 0x936C, 0x0703,
- 0x936D, 0x3B88, 0x936E, 0x1B66, 0x9370, 0x21E4, 0x9371, 0x49A4,
- 0x9373, 0x49A5, 0x9375, 0x0764, 0x937C, 0x1B65, 0x937E, 0x09C9,
- 0x937F, 0x4DDA, 0x9382, 0x4DDB, 0x9388, 0x49A9, 0x938A, 0x4DDC,
- 0x938B, 0x49AA, 0x938C, 0x05D7, 0x938F, 0x49AB, 0x9394, 0x1B6B,
- 0x9396, 0x082F, 0x9397, 0x0AFB, 0x939A, 0x0BE6, 0x939B, 0x3B89,
- 0x939E, 0x49AC, 0x93A1, 0x49A6, 0x93A3, 0x4311, 0x93A4, 0x21E6,
- 0x93A7, 0x0599, 0x93A9, 0x3B8B, 0x93AC, 0x1B69, 0x93AD, 0x1B6A,
- 0x93AE, 0x0BDF, 0x93B0, 0x1B68, 0x93B9, 0x1B6C, 0x93BA, 0x3B8A,
- 0x93BB, 0x4DDD, 0x93C1, 0x3B8C, 0x93C3, 0x1B72, 0x93C6, 0x21E7,
- 0x93C7, 0x49B1, 0x93C8, 0x1B75, 0x93CA, 0x3B8D, 0x93CC, 0x4DDE,
- 0x93D0, 0x1B74, 0x93D1, 0x0C27, 0x93D6, 0x1B6D, 0x93D7, 0x1B6E,
- 0x93D8, 0x1B71, 0x93DC, 0x49B2, 0x93DD, 0x1B73, 0x93DE, 0x21E8,
- 0x93DF, 0x4312, 0x93E1, 0x06B8, 0x93E2, 0x3B8E, 0x93E4, 0x1B76,
- 0x93E5, 0x1B70, 0x93E6, 0x4DDF, 0x93E7, 0x49B3, 0x93E8, 0x1B6F,
- 0x93F1, 0x49B0, 0x93F5, 0x49AD, 0x93F8, 0x21E9, 0x93F9, 0x4DE0,
- 0x93FA, 0x3B8F, 0x93FB, 0x49B7, 0x93FD, 0x3B90, 0x9402, 0x4DE1,
- 0x9403, 0x1B7A, 0x9404, 0x4313, 0x9407, 0x1B7B, 0x9409, 0x49B4,
- 0x940D, 0x4DE2, 0x940E, 0x4DE3, 0x940F, 0x3B91, 0x9410, 0x1B7C,
- 0x9413, 0x1B79, 0x9414, 0x1B78, 0x9416, 0x49B5, 0x9417, 0x49B6,
- 0x9418, 0x09CA, 0x9419, 0x0C82, 0x941A, 0x1B77, 0x9421, 0x1B80,
- 0x942B, 0x1B7E, 0x942E, 0x4DE4, 0x9431, 0x21EA, 0x9432, 0x49B8,
- 0x9433, 0x4314, 0x9434, 0x3B92, 0x9435, 0x1B7F, 0x9436, 0x1B7D,
- 0x9438, 0x0B58, 0x943A, 0x1B81, 0x943B, 0x49B9, 0x943F, 0x3B93,
- 0x9441, 0x1B82, 0x9444, 0x1B84, 0x9445, 0x21EB, 0x9448, 0x21EC,
- 0x944A, 0x4315, 0x944C, 0x4DE5, 0x9451, 0x0611, 0x9452, 0x1B83,
- 0x9453, 0x0F06, 0x9455, 0x3B94, 0x945A, 0x1B8F, 0x945B, 0x1B85,
- 0x945E, 0x1B88, 0x9460, 0x1B86, 0x9462, 0x1B87, 0x9463, 0x4316,
- 0x946A, 0x1B89, 0x946B, 0x3B95, 0x946D, 0x49BC, 0x946F, 0x49BD,
- 0x9470, 0x1B8B, 0x9471, 0x4317, 0x9472, 0x3B96, 0x9475, 0x1B8C,
- 0x9477, 0x1B8D, 0x947C, 0x1B90, 0x947D, 0x1B8E, 0x947E, 0x1B91,
- 0x947F, 0x1B93, 0x9481, 0x1B92, 0x9577, 0x0BD5, 0x9578, 0x3B97,
- 0x9579, 0x49BE, 0x9580, 0x0EF3, 0x9582, 0x1B94, 0x9583, 0x0AB0,
- 0x9586, 0x49BF, 0x9587, 0x1B95, 0x9588, 0x4DE6, 0x9589, 0x0E14,
- 0x958A, 0x1B96, 0x958B, 0x0589, 0x958C, 0x49C0, 0x958D, 0x49C1,
- 0x958E, 0x4318, 0x958F, 0x04DE, 0x9591, 0x0613, 0x9592, 0x21ED,
- 0x9593, 0x0612, 0x9594, 0x1B97, 0x9596, 0x1B98, 0x9598, 0x1B99,
- 0x9599, 0x1B9A, 0x959F, 0x4319, 0x95A0, 0x1B9B, 0x95A1, 0x4DE7,
- 0x95A2, 0x0614, 0x95A3, 0x05B3, 0x95A4, 0x07F0, 0x95A5, 0x0D4A,
- 0x95A6, 0x3B98, 0x95A7, 0x1B9D, 0x95A8, 0x1B9C, 0x95A9, 0x3B99,
- 0x95AB, 0x4F59, 0x95AC, 0x431A, 0x95AD, 0x1B9E, 0x95B1, 0x3555,
- 0x95B2, 0x04FE, 0x95B4, 0x3B9B, 0x95B6, 0x431B, 0x95B9, 0x1BA1,
- 0x95BB, 0x1BA0, 0x95BC, 0x1B9F, 0x95BD, 0x3B9C, 0x95BE, 0x1BA2,
- 0x95BF, 0x4DE8, 0x95C3, 0x1BA5, 0x95C6, 0x4DE9, 0x95C7, 0x048B,
- 0x95C8, 0x49C4, 0x95C9, 0x4DEA, 0x95CA, 0x1BA3, 0x95CB, 0x431C,
- 0x95CC, 0x1BA7, 0x95CD, 0x1BA6, 0x95D0, 0x431D, 0x95D1, 0x4DEB,
- 0x95D2, 0x4DEC, 0x95D3, 0x431E, 0x95D4, 0x1BA9, 0x95D5, 0x1BA8,
- 0x95D6, 0x1BAA, 0x95D8, 0x0C86, 0x95DA, 0x3B9D, 0x95DC, 0x1BAB,
- 0x95DE, 0x4320, 0x95E0, 0x4DED, 0x95E1, 0x1BAC, 0x95E2, 0x1BAE,
- 0x95E4, 0x4DEE, 0x95E5, 0x1BAD, 0x95E6, 0x4DEF, 0x961C, 0x0DDE,
- 0x961D, 0x3B9E, 0x9621, 0x1BAF, 0x9624, 0x4DF0, 0x9628, 0x1BB0,
- 0x962A, 0x0855, 0x962C, 0x49C7, 0x962E, 0x1BB1, 0x962F, 0x1BB2,
- 0x9631, 0x4DF1, 0x9632, 0x0E77, 0x9633, 0x49C8, 0x9634, 0x49C9,
- 0x9638, 0x4DF2, 0x963B, 0x0ACD, 0x963C, 0x49CB, 0x963D, 0x4DF3,
- 0x963F, 0x0468, 0x9640, 0x0B2B, 0x9641, 0x3B9F, 0x9642, 0x1BB3,
- 0x9644, 0x0DDF, 0x964B, 0x1BB6, 0x964C, 0x1BB4, 0x964D, 0x07F1,
- 0x964F, 0x1BB5, 0x9650, 0x0776, 0x9654, 0x4DF4, 0x9658, 0x3BA0,
- 0x965B, 0x0E15, 0x965C, 0x1BB8, 0x965D, 0x1BBA, 0x965E, 0x1BB9,
- 0x965F, 0x1BBB, 0x9661, 0x49CC, 0x9662, 0x04C3, 0x9663, 0x0A1E,
- 0x9664, 0x0986, 0x9665, 0x0615, 0x9666, 0x1BBC, 0x966A, 0x0D1C,
- 0x966C, 0x1BBE, 0x9670, 0x04C4, 0x9672, 0x1BBD, 0x9673, 0x0BE0,
- 0x9674, 0x4DF5, 0x9675, 0x0F95, 0x9676, 0x0C83, 0x9677, 0x1BB7,
- 0x9678, 0x0F6E, 0x967A, 0x0765, 0x967B, 0x4DF6, 0x967D, 0x0F45,
- 0x967F, 0x4DF7, 0x9681, 0x4DF8, 0x9682, 0x49CE, 0x9683, 0x4DF9,
- 0x9684, 0x3BA1, 0x9685, 0x06F1, 0x9686, 0x0F7C, 0x9688, 0x06FE,
- 0x9689, 0x4DFA, 0x968A, 0x0B42, 0x968B, 0x186C, 0x968D, 0x1BBF,
- 0x968E, 0x058A, 0x968F, 0x0A35, 0x9694, 0x05B4, 0x9695, 0x1BC1,
- 0x9696, 0x4DFB, 0x9697, 0x1BC2, 0x9698, 0x1BC0, 0x9699, 0x073A,
- 0x969A, 0x49D0, 0x969B, 0x084D, 0x969C, 0x09CB, 0x969D, 0x21F0,
- 0x96A0, 0x04C5, 0x96A3, 0x0FA1, 0x96A4, 0x3BA2, 0x96A5, 0x4321,
- 0x96A7, 0x1BC4, 0x96A8, 0x1B0B, 0x96A9, 0x3BA3, 0x96AA, 0x1BC3,
- 0x96AE, 0x4DFC, 0x96AF, 0x21F1, 0x96B0, 0x1BC7, 0x96B1, 0x1BC5,
- 0x96B2, 0x1BC6, 0x96B3, 0x49D3, 0x96B4, 0x1BC8, 0x96B6, 0x1BC9,
- 0x96B7, 0x0FB4, 0x96B8, 0x1BCA, 0x96B9, 0x1BCB, 0x96BA, 0x49D4,
- 0x96BB, 0x0A6D, 0x96BC, 0x0D4F, 0x96BD, 0x49D5, 0x96C0, 0x0A43,
- 0x96C1, 0x0623, 0x96C4, 0x0F24, 0x96C5, 0x056D, 0x96C6, 0x0942,
- 0x96C7, 0x078F, 0x96C9, 0x1BCE, 0x96CB, 0x1BCD, 0x96CC, 0x08C1,
- 0x96CD, 0x1BCF, 0x96CE, 0x1BCC, 0x96D1, 0x0876, 0x96D2, 0x3BA4,
- 0x96D5, 0x1BD3, 0x96D6, 0x1992, 0x96D8, 0x49D8, 0x96D9, 0x10EB,
- 0x96DA, 0x49D9, 0x96DB, 0x0A3D, 0x96DC, 0x1BD1, 0x96DD, 0x49DA,
- 0x96DE, 0x3BA6, 0x96E2, 0x0F6D, 0x96E3, 0x0CC9, 0x96E8, 0x04CD,
- 0x96E9, 0x3BA7, 0x96EA, 0x0A87, 0x96EB, 0x08E2, 0x96EF, 0x4322,
- 0x96F0, 0x0E07, 0x96F1, 0x3BA8, 0x96F2, 0x04E2, 0x96F6, 0x0FB5,
- 0x96F7, 0x0F55, 0x96F9, 0x1BD4, 0x96FB, 0x0C3F, 0x9700, 0x0927,
- 0x9702, 0x3BA9, 0x9703, 0x4DFD, 0x9704, 0x1BD5, 0x9706, 0x1BD6,
- 0x9707, 0x0A12, 0x9708, 0x1BD7, 0x9709, 0x3BAA, 0x970A, 0x0FB6,
- 0x970D, 0x1BD2, 0x970E, 0x1BD9, 0x970F, 0x1BDB, 0x9711, 0x1BDA,
- 0x9713, 0x1BD8, 0x9714, 0x49DC, 0x9716, 0x1BDC, 0x9719, 0x1BDD,
- 0x971B, 0x4DFE, 0x971C, 0x0AFC, 0x971E, 0x0562, 0x9721, 0x4DFF,
- 0x9722, 0x4E00, 0x9723, 0x49DD, 0x9724, 0x1BDE, 0x9727, 0x0EC4,
- 0x9728, 0x4E01, 0x972A, 0x1BDF, 0x9730, 0x1BE0, 0x9731, 0x4E02,
- 0x9732, 0x0FD0, 0x9733, 0x21F2, 0x9736, 0x49DF, 0x9738, 0x1414,
- 0x9739, 0x1BE1, 0x973B, 0x21F3, 0x973D, 0x1BE2, 0x973E, 0x1BE3,
- 0x9741, 0x49E0, 0x9742, 0x1BE7, 0x9743, 0x21F4, 0x9744, 0x1BE4,
- 0x9746, 0x1BE5, 0x9747, 0x49E1, 0x9748, 0x1BE6, 0x9749, 0x1BE8,
- 0x974D, 0x21F5, 0x974E, 0x4323, 0x974F, 0x21F6, 0x9751, 0x21F7,
- 0x9752, 0x0A68, 0x9755, 0x4F5A, 0x9756, 0x0F03, 0x9757, 0x49E2,
- 0x9759, 0x0A69, 0x975A, 0x3BAB, 0x975B, 0x49E3, 0x975C, 0x1BE9,
- 0x975E, 0x0D87, 0x9760, 0x1BEA, 0x9761, 0x1D06, 0x9762, 0x0ED8,
- 0x9763, 0x3BAC, 0x9764, 0x1BEB, 0x9766, 0x1BEC, 0x9767, 0x4E03,
- 0x9768, 0x1BED, 0x9769, 0x05B5, 0x976A, 0x49E4, 0x976B, 0x1BEF,
- 0x976D, 0x0A1F, 0x976E, 0x3BAD, 0x9771, 0x1BF0, 0x9773, 0x3BAE,
- 0x9774, 0x06FA, 0x9776, 0x4E04, 0x9779, 0x1BF1, 0x977A, 0x1BF5,
- 0x977C, 0x1BF3, 0x977D, 0x4E05, 0x977F, 0x4E06, 0x9781, 0x1BF4,
- 0x9784, 0x05D1, 0x9785, 0x1BF2, 0x9786, 0x1BF6, 0x978B, 0x1BF7,
- 0x978D, 0x048C, 0x978F, 0x1BF8, 0x9790, 0x1BF9, 0x9795, 0x4324,
- 0x9796, 0x49E7, 0x9798, 0x09CC, 0x9799, 0x4E07, 0x979A, 0x3BAF,
- 0x979C, 0x1BFA, 0x979E, 0x49E8, 0x979F, 0x4E08, 0x97A0, 0x0661,
- 0x97A2, 0x3BB0, 0x97A3, 0x1BFD, 0x97A6, 0x1BFC, 0x97A8, 0x1BFB,
- 0x97AB, 0x1A34, 0x97AC, 0x4E09, 0x97AD, 0x0E2C, 0x97AE, 0x4325,
- 0x97B1, 0x49E9, 0x97B2, 0x49EA, 0x97B3, 0x1BFE, 0x97B4, 0x1BFF,
- 0x97B5, 0x3BB1, 0x97B6, 0x3BB2, 0x97B9, 0x4E0A, 0x97BA, 0x4326,
- 0x97BE, 0x49EB, 0x97C1, 0x4327, 0x97C3, 0x1C00, 0x97C6, 0x1C01,
- 0x97C8, 0x1C02, 0x97C9, 0x4328, 0x97CB, 0x1C03, 0x97CC, 0x49EC,
- 0x97CD, 0x4E0B, 0x97D1, 0x49ED, 0x97D3, 0x0616, 0x97D4, 0x49EE,
- 0x97D8, 0x49EF, 0x97D9, 0x3BB3, 0x97DB, 0x4329, 0x97DC, 0x1C04,
- 0x97DE, 0x3BB4, 0x97E0, 0x4E0C, 0x97E1, 0x49F0, 0x97ED, 0x1C05,
- 0x97EE, 0x0CD9, 0x97EF, 0x4E0D, 0x97F1, 0x49F1, 0x97F2, 0x1C07,
- 0x97F3, 0x053B, 0x97F4, 0x3BB5, 0x97F5, 0x1C0A, 0x97F6, 0x1C09,
- 0x97FB, 0x04C6, 0x97FF, 0x06B9, 0x9801, 0x0E17, 0x9802, 0x0BD6,
- 0x9803, 0x0812, 0x9804, 0x49F2, 0x9805, 0x07F2, 0x9806, 0x0971,
- 0x9807, 0x4E0E, 0x9808, 0x0A22, 0x980A, 0x3BB6, 0x980C, 0x1C0C,
- 0x980D, 0x49F3, 0x980E, 0x3BB7, 0x980F, 0x1C0B, 0x9810, 0x0F2C,
- 0x9811, 0x0624, 0x9812, 0x0D66, 0x9813, 0x0CB4, 0x9814, 0x49F4,
- 0x9816, 0x49F5, 0x9817, 0x0A42, 0x9818, 0x0F96, 0x981A, 0x0731,
- 0x981E, 0x3BB8, 0x9821, 0x1C0F, 0x9823, 0x3BB9, 0x9824, 0x1C0E,
- 0x9825, 0x49FA, 0x9826, 0x4E0F, 0x982B, 0x3BBA, 0x982C, 0x0E79,
- 0x982D, 0x0C84, 0x982E, 0x4E10, 0x9830, 0x1E73, 0x9832, 0x49F8,
- 0x9833, 0x49F9, 0x9834, 0x04F2, 0x9837, 0x1C10, 0x9838, 0x1C0D,
- 0x9839, 0x37B3, 0x983B, 0x0DC3, 0x983C, 0x0F54, 0x983D, 0x1C11,
- 0x983E, 0x3BBB, 0x9846, 0x1C12, 0x9847, 0x49FB, 0x984B, 0x1C14,
- 0x984C, 0x0B4A, 0x984D, 0x05B9, 0x984E, 0x05BA, 0x984F, 0x1C13,
- 0x9852, 0x3BBC, 0x9853, 0x3BBD, 0x9854, 0x0625, 0x9855, 0x0766,
- 0x9856, 0x432A, 0x9857, 0x21F9, 0x9858, 0x0626, 0x9859, 0x3BBE,
- 0x985A, 0x1E48, 0x985B, 0x0C39, 0x985E, 0x0FA8, 0x9862, 0x4E11,
- 0x9863, 0x4E12, 0x9865, 0x21FA, 0x9866, 0x49FC, 0x9867, 0x0790,
- 0x986B, 0x1C15, 0x986C, 0x3BBF, 0x986F, 0x1C16, 0x9870, 0x1C17,
- 0x9871, 0x1C18, 0x9873, 0x1C1A, 0x9874, 0x1C19, 0x98A8, 0x0DE9,
- 0x98AA, 0x1C1B, 0x98AB, 0x49FD, 0x98AD, 0x49FE, 0x98AF, 0x1C1C,
- 0x98B0, 0x49FF, 0x98B1, 0x1C1D, 0x98B4, 0x4E13, 0x98B6, 0x1C1E,
- 0x98B7, 0x4A01, 0x98B8, 0x3BC0, 0x98BA, 0x3BC1, 0x98BB, 0x4A02,
- 0x98BC, 0x4A03, 0x98BF, 0x3BC2, 0x98C2, 0x4A04, 0x98C3, 0x1C20,
- 0x98C4, 0x1C1F, 0x98C5, 0x4E14, 0x98C6, 0x1C21, 0x98C7, 0x4A05,
- 0x98C8, 0x3BC3, 0x98CB, 0x4A06, 0x98DB, 0x0D88, 0x98DC, 0x1839,
- 0x98DF, 0x09EF, 0x98E0, 0x3618, 0x98E1, 0x4A07, 0x98E2, 0x064C,
- 0x98E3, 0x4A08, 0x98E5, 0x3BC4, 0x98E7, 0x432B, 0x98E9, 0x1C22,
- 0x98EA, 0x4A09, 0x98EB, 0x1C23, 0x98ED, 0x10C1, 0x98EE, 0x14DA,
- 0x98EF, 0x0D67, 0x98F0, 0x4A0A, 0x98F1, 0x4A0B, 0x98F2, 0x04BF,
- 0x98F3, 0x4A0C, 0x98F4, 0x047F, 0x98FC, 0x08C2, 0x98FD, 0x0E5E,
- 0x98FE, 0x09E6, 0x9902, 0x4E15, 0x9903, 0x1C24, 0x9905, 0x0EEB,
- 0x9908, 0x4A0D, 0x9909, 0x1C25, 0x990A, 0x0F46, 0x990C, 0x04E4,
- 0x9910, 0x088F, 0x9911, 0x4E16, 0x9912, 0x1C26, 0x9913, 0x056E,
- 0x9914, 0x1C27, 0x9915, 0x4E17, 0x9916, 0x4A10, 0x9917, 0x4A11,
- 0x9918, 0x1C28, 0x991A, 0x4A13, 0x991B, 0x4A14, 0x991C, 0x4A15,
- 0x991D, 0x1C2A, 0x991E, 0x1C2B, 0x9920, 0x1C2D, 0x9921, 0x1C29,
- 0x9924, 0x1C2C, 0x9927, 0x21FD, 0x9928, 0x0617, 0x992C, 0x1C2E,
- 0x992E, 0x1C2F, 0x9931, 0x4A17, 0x9932, 0x3BC5, 0x9933, 0x3BC6,
- 0x9935, 0x4E18, 0x993A, 0x4A18, 0x993B, 0x4A19, 0x993C, 0x4A1A,
- 0x993D, 0x1C30, 0x993E, 0x1C31, 0x9940, 0x3BC7, 0x9941, 0x4A1B,
- 0x9942, 0x1C32, 0x9945, 0x1C34, 0x9946, 0x4A1C, 0x9948, 0x4E19,
- 0x9949, 0x1C33, 0x994B, 0x1C36, 0x994C, 0x1C39, 0x994D, 0x3BC8,
- 0x994E, 0x4A1D, 0x9950, 0x1C35, 0x9951, 0x1C37, 0x9952, 0x1C38,
- 0x9954, 0x4E1A, 0x9955, 0x1C3A, 0x9957, 0x06BA, 0x9958, 0x432C,
- 0x995C, 0x3BC9, 0x995E, 0x4E1B, 0x995F, 0x3BCA, 0x9960, 0x4A1E,
- 0x9996, 0x091F, 0x9997, 0x1C3B, 0x9998, 0x1C3C, 0x9999, 0x07F3,
- 0x999E, 0x21FF, 0x99A3, 0x4A1F, 0x99A5, 0x1C3D, 0x99A6, 0x4A20,
- 0x99A8, 0x059C, 0x99AC, 0x0D05, 0x99AD, 0x1C3E, 0x99AE, 0x1C3F,
- 0x99B1, 0x3BCB, 0x99B3, 0x0B98, 0x99B4, 0x0CC3, 0x99B9, 0x3BCC,
- 0x99BA, 0x3BCD, 0x99BC, 0x1C40, 0x99BD, 0x4A21, 0x99BF, 0x4A22,
- 0x99C1, 0x0D33, 0x99C3, 0x4A23, 0x99C4, 0x0B2C, 0x99C5, 0x04FA,
- 0x99C6, 0x06E6, 0x99C8, 0x06E7, 0x99C9, 0x3BCE, 0x99D0, 0x0BB1,
- 0x99D1, 0x1C45, 0x99D2, 0x06E8, 0x99D4, 0x4A24, 0x99D5, 0x056F,
- 0x99D8, 0x1C44, 0x99D9, 0x4A25, 0x99DB, 0x1C42, 0x99DD, 0x1C43,
- 0x99DE, 0x4A26, 0x99DF, 0x1C41, 0x99E1, 0x4E1C, 0x99E2, 0x1C4F,
- 0x99ED, 0x1C46, 0x99EE, 0x1C47, 0x99F0, 0x4A28, 0x99F1, 0x1C48,
- 0x99F2, 0x1C49, 0x99F8, 0x1C4B, 0x99F9, 0x4A29, 0x99FB, 0x1C4A,
- 0x99FC, 0x4A2A, 0x99FF, 0x0963, 0x9A01, 0x1C4C, 0x9A02, 0x3BCF,
- 0x9A03, 0x432D, 0x9A05, 0x1C4E, 0x9A08, 0x37BA, 0x9A0A, 0x4A2B,
- 0x9A0C, 0x4E1D, 0x9A0E, 0x064D, 0x9A0F, 0x1C4D, 0x9A10, 0x4E1E,
- 0x9A11, 0x4A2C, 0x9A12, 0x0AFD, 0x9A13, 0x0767, 0x9A16, 0x3BD0,
- 0x9A19, 0x1C50, 0x9A1A, 0x4A2D, 0x9A20, 0x4A2E, 0x9A23, 0x4E1F,
- 0x9A24, 0x3BD1, 0x9A27, 0x3BD2, 0x9A28, 0x0B2D, 0x9A2B, 0x1C51,
- 0x9A2D, 0x3BD3, 0x9A2E, 0x3BD4, 0x9A30, 0x0C85, 0x9A31, 0x4A2F,
- 0x9A36, 0x3BD5, 0x9A37, 0x1C52, 0x9A38, 0x3BD6, 0x9A3E, 0x1C57,
- 0x9A40, 0x1C55, 0x9A41, 0x4E20, 0x9A42, 0x1C54, 0x9A43, 0x1C56,
- 0x9A44, 0x4A30, 0x9A45, 0x1C53, 0x9A4A, 0x3BD7, 0x9A4C, 0x4A31,
- 0x9A4D, 0x1C59, 0x9A4E, 0x2200, 0x9A51, 0x4E21, 0x9A52, 0x1E2F,
- 0x9A55, 0x1C58, 0x9A56, 0x3BD8, 0x9A57, 0x1C5B, 0x9A58, 0x4A32,
- 0x9A5A, 0x06BB, 0x9A5B, 0x1C5A, 0x9A5F, 0x1C5C, 0x9A62, 0x1C5D,
- 0x9A64, 0x1C5F, 0x9A65, 0x1C5E, 0x9A69, 0x1C60, 0x9A6A, 0x1C62,
- 0x9A6B, 0x1C61, 0x9AA8, 0x080E, 0x9AAD, 0x1C63, 0x9AAF, 0x4A34,
- 0x9AB0, 0x1C64, 0x9AB5, 0x3BD9, 0x9AB6, 0x3BDA, 0x9AB7, 0x4A36,
- 0x9AB8, 0x059A, 0x9AB9, 0x4A38, 0x9ABC, 0x1C65, 0x9ABD, 0x4E22,
- 0x9ABE, 0x4E23, 0x9AC0, 0x1C66, 0x9AC1, 0x432E, 0x9AC3, 0x432F,
- 0x9AC4, 0x0A37, 0x9AC6, 0x4A3A, 0x9ACE, 0x4330, 0x9ACF, 0x1C67,
- 0x9AD0, 0x4A3B, 0x9AD1, 0x1C68, 0x9AD2, 0x4A3C, 0x9AD3, 0x1C69,
- 0x9AD4, 0x1C6A, 0x9AD5, 0x4A3D, 0x9AD6, 0x4331, 0x9AD8, 0x07F4,
- 0x9AD9, 0x2201, 0x9ADC, 0x2202, 0x9ADE, 0x1C6B, 0x9ADF, 0x1C6C,
- 0x9AE0, 0x4A3E, 0x9AE2, 0x1C6D, 0x9AE3, 0x1C6E, 0x9AE5, 0x4A3F,
- 0x9AE6, 0x1C6F, 0x9AE9, 0x4A40, 0x9AEA, 0x0D45, 0x9AEB, 0x1C71,
- 0x9AED, 0x0D98, 0x9AEE, 0x1C72, 0x9AEF, 0x1C70, 0x9AF1, 0x1C74,
- 0x9AF4, 0x1C73, 0x9AF7, 0x1C75, 0x9AF9, 0x3BDB, 0x9AFB, 0x1C76,
- 0x9B01, 0x4E24, 0x9B02, 0x4332, 0x9B03, 0x3BDC, 0x9B06, 0x1C77,
- 0x9B08, 0x4333, 0x9B09, 0x4E25, 0x9B0B, 0x4E26, 0x9B0C, 0x4A41,
- 0x9B0D, 0x4E27, 0x9B0E, 0x4E28, 0x9B10, 0x4A42, 0x9B12, 0x4A43,
- 0x9B16, 0x4A44, 0x9B18, 0x1C78, 0x9B19, 0x4E29, 0x9B1A, 0x1C79,
- 0x9B1C, 0x4A45, 0x9B1D, 0x4F49, 0x9B1F, 0x1C7A, 0x9B20, 0x3BDD,
- 0x9B22, 0x1C7B, 0x9B23, 0x1C7C, 0x9B25, 0x1C7D, 0x9B27, 0x1C7E,
- 0x9B28, 0x1C7F, 0x9B29, 0x1C80, 0x9B2A, 0x1C81, 0x9B2B, 0x4A46,
- 0x9B2C, 0x4F4A, 0x9B2D, 0x4335, 0x9B2E, 0x1C82, 0x9B2F, 0x1C83,
- 0x9B31, 0x14D4, 0x9B32, 0x1C84, 0x9B33, 0x3BDE, 0x9B34, 0x3BDF,
- 0x9B35, 0x4E2A, 0x9B3B, 0x17A9, 0x9B3C, 0x064E, 0x9B3D, 0x4A47,
- 0x9B41, 0x057F, 0x9B42, 0x0822, 0x9B43, 0x1C86, 0x9B44, 0x1C85,
- 0x9B45, 0x0EB1, 0x9B48, 0x4E2B, 0x9B4B, 0x4A49, 0x9B4D, 0x1C88,
- 0x9B4E, 0x1C89, 0x9B4F, 0x1C87, 0x9B51, 0x1C8A, 0x9B54, 0x0E90,
- 0x9B55, 0x4E2C, 0x9B58, 0x1C8B, 0x9B5A, 0x0695, 0x9B5E, 0x4336,
- 0x9B63, 0x4A4A, 0x9B65, 0x4A4B, 0x9B66, 0x4337, 0x9B68, 0x4E2D,
- 0x9B6B, 0x4A4C, 0x9B6C, 0x4A4D, 0x9B6F, 0x0FCB, 0x9B72, 0x2204,
- 0x9B73, 0x3BE0, 0x9B74, 0x1C8C, 0x9B75, 0x2203, 0x9B76, 0x4A4E,
- 0x9B77, 0x4A4F, 0x9B79, 0x3BE1, 0x9B80, 0x4E2E, 0x9B83, 0x1C8E,
- 0x9B84, 0x4338, 0x9B86, 0x4E2F, 0x9B8A, 0x4339, 0x9B8E, 0x0482,
- 0x9B8F, 0x2205, 0x9B90, 0x4E30, 0x9B91, 0x1C8F, 0x9B92, 0x0DFB,
- 0x9B93, 0x1C8D, 0x9B96, 0x1C90, 0x9B97, 0x1C91, 0x9B9D, 0x4E31,
- 0x9B9E, 0x433A, 0x9B9F, 0x1C92, 0x9BA0, 0x1C93, 0x9BA6, 0x4A50,
- 0x9BA7, 0x3BE2, 0x9BA8, 0x1C94, 0x9BAA, 0x0E9C, 0x9BAB, 0x087B,
- 0x9BAC, 0x4A51, 0x9BAD, 0x086A, 0x9BAE, 0x0AB1, 0x9BB0, 0x4E32,
- 0x9BB1, 0x2206, 0x9BB2, 0x4A53, 0x9BB4, 0x1C95, 0x9BB8, 0x4A54,
- 0x9BB9, 0x1C98, 0x9BBB, 0x2207, 0x9BBE, 0x4A55, 0x9BBF, 0x4E33,
- 0x9BC0, 0x1C96, 0x9BC1, 0x3BE3, 0x9BC6, 0x1C99, 0x9BC7, 0x3BE4,
- 0x9BC8, 0x4E34, 0x9BC9, 0x07A5, 0x9BCA, 0x1C97, 0x9BCE, 0x433B,
- 0x9BCF, 0x1C9A, 0x9BD1, 0x1C9B, 0x9BD2, 0x1C9C, 0x9BD4, 0x1CA0,
- 0x9BD6, 0x0878, 0x9BD7, 0x3BE5, 0x9BD8, 0x4A57, 0x9BDB, 0x0B44,
- 0x9BDD, 0x4A58, 0x9BDF, 0x37BF, 0x9BE1, 0x1CA1, 0x9BE2, 0x1C9E,
- 0x9BE3, 0x1C9D, 0x9BE4, 0x1C9F, 0x9BE5, 0x433C, 0x9BE7, 0x3BE6,
- 0x9BE8, 0x0735, 0x9BEA, 0x4A59, 0x9BEB, 0x3BE7, 0x9BEE, 0x4A5B,
- 0x9BEF, 0x4A5A, 0x9BF0, 0x1CA5, 0x9BF1, 0x1CA4, 0x9BF2, 0x1CA3,
- 0x9BF3, 0x4A56, 0x9BF5, 0x0477, 0x9BF7, 0x3BE8, 0x9BF8, 0x433D,
- 0x9BFA, 0x3BE9, 0x9BFD, 0x3BEA, 0x9BFF, 0x4E35, 0x9C00, 0x2208,
- 0x9C02, 0x4E36, 0x9C04, 0x1CAF, 0x9C06, 0x1CAB, 0x9C08, 0x1CAC,
- 0x9C09, 0x1CA8, 0x9C0A, 0x1CAE, 0x9C0B, 0x3BEB, 0x9C0C, 0x1CAA,
- 0x9C0D, 0x05C0, 0x9C10, 0x0FF2, 0x9C12, 0x1CAD, 0x9C13, 0x1CA9,
- 0x9C14, 0x1CA7, 0x9C15, 0x1CA6, 0x9C16, 0x4A5F, 0x9C18, 0x4A60,
- 0x9C19, 0x4A61, 0x9C1A, 0x4A62, 0x9C1B, 0x1CB1, 0x9C1C, 0x4E37,
- 0x9C1D, 0x4A63, 0x9C21, 0x1CB4, 0x9C22, 0x4A64, 0x9C23, 0x433E,
- 0x9C24, 0x1CB3, 0x9C25, 0x1CB2, 0x9C27, 0x3BEC, 0x9C29, 0x4A65,
- 0x9C2A, 0x3BED, 0x9C2D, 0x0DBB, 0x9C2E, 0x1CB0, 0x9C2F, 0x04B7,
- 0x9C30, 0x1CB5, 0x9C31, 0x4A67, 0x9C32, 0x1CB7, 0x9C35, 0x4E38,
- 0x9C36, 0x3BEE, 0x9C37, 0x4A68, 0x9C39, 0x05CD, 0x9C3A, 0x1CA2,
- 0x9C3B, 0x04D9, 0x9C3E, 0x1CB9, 0x9C41, 0x3BEF, 0x9C44, 0x4E39,
- 0x9C45, 0x4A69, 0x9C46, 0x1CB8, 0x9C47, 0x1CB6, 0x9C48, 0x0B6B,
- 0x9C49, 0x4A6C, 0x9C4A, 0x4A6D, 0x9C4F, 0x433F, 0x9C50, 0x4340,
- 0x9C52, 0x0E9E, 0x9C53, 0x3BF0, 0x9C54, 0x4A6F, 0x9C56, 0x4E3A,
- 0x9C57, 0x0FA2, 0x9C58, 0x4A70, 0x9C5A, 0x1CBA, 0x9C5B, 0x4A71,
- 0x9C5C, 0x4A6A, 0x9C5D, 0x4A72, 0x9C5F, 0x4A73, 0x9C60, 0x1CBB,
- 0x9C61, 0x4E3B, 0x9C63, 0x3BF1, 0x9C65, 0x4341, 0x9C67, 0x1CBC,
- 0x9C68, 0x4E3C, 0x9C69, 0x4A74, 0x9C6A, 0x4A75, 0x9C6B, 0x4A76,
- 0x9C6D, 0x4A77, 0x9C6E, 0x4A78, 0x9C70, 0x3BF2, 0x9C72, 0x4A79,
- 0x9C75, 0x4A7A, 0x9C76, 0x1CBD, 0x9C77, 0x3BF3, 0x9C78, 0x1CBE,
- 0x9C7A, 0x4A7B, 0x9CE5, 0x0BD7, 0x9CE6, 0x4A7C, 0x9CE7, 0x1CBF,
- 0x9CE9, 0x0D4B, 0x9CEB, 0x1CC4, 0x9CEC, 0x1CC0, 0x9CF0, 0x1CC1,
- 0x9CF2, 0x4A7D, 0x9CF3, 0x0E5F, 0x9CF4, 0x0ED0, 0x9CF6, 0x0CA8,
- 0x9D02, 0x3BF4, 0x9D03, 0x1CC5, 0x9D06, 0x1CC6, 0x9D07, 0x0C96,
- 0x9D08, 0x1CC3, 0x9D09, 0x1CC2, 0x9D0B, 0x4A7E, 0x9D0E, 0x052A,
- 0x9D11, 0x4A80, 0x9D12, 0x1CCE, 0x9D15, 0x1CCD, 0x9D17, 0x4A81,
- 0x9D18, 0x4A82, 0x9D1B, 0x0517, 0x9D1D, 0x4342, 0x9D1E, 0x4343,
- 0x9D1F, 0x1CCB, 0x9D23, 0x1CCA, 0x9D26, 0x1CC8, 0x9D28, 0x05D9,
- 0x9D2A, 0x1CC7, 0x9D2B, 0x08DE, 0x9D2C, 0x0529, 0x9D30, 0x4E3D,
- 0x9D32, 0x4A86, 0x9D3B, 0x07F5, 0x9D3D, 0x4E3E, 0x9D3E, 0x1CD1,
- 0x9D3F, 0x1CD0, 0x9D41, 0x1CCF, 0x9D42, 0x3BF5, 0x9D43, 0x4344,
- 0x9D44, 0x1CCC, 0x9D46, 0x1CD2, 0x9D47, 0x3BF6, 0x9D48, 0x1CD3,
- 0x9D4A, 0x4A88, 0x9D50, 0x1CD8, 0x9D51, 0x1CD7, 0x9D52, 0x4345,
- 0x9D59, 0x1CD9, 0x9D5C, 0x04CF, 0x9D5D, 0x1CD4, 0x9D5E, 0x1CD5,
- 0x9D5F, 0x4A89, 0x9D60, 0x0806, 0x9D61, 0x0EC5, 0x9D62, 0x4A8A,
- 0x9D63, 0x3BF7, 0x9D64, 0x1CD6, 0x9D69, 0x3BF8, 0x9D6A, 0x4E3F,
- 0x9D6B, 0x220A, 0x9D6C, 0x0E60, 0x9D6F, 0x1CDE, 0x9D70, 0x2209,
- 0x9D72, 0x1CDA, 0x9D73, 0x4A8D, 0x9D76, 0x4A8E, 0x9D77, 0x4A8F,
- 0x9D7A, 0x1CDF, 0x9D7B, 0x4E40, 0x9D7C, 0x3BF9, 0x9D7E, 0x3BFA,
- 0x9D84, 0x4A90, 0x9D87, 0x1CDC, 0x9D89, 0x1CDB, 0x9D8A, 0x4346,
- 0x9D8D, 0x3BFB, 0x9D8F, 0x0732, 0x9D96, 0x4347, 0x9D99, 0x4A91,
- 0x9D9A, 0x1CE0, 0x9DA1, 0x4A92, 0x9DA4, 0x1CE1, 0x9DA9, 0x1CE2,
- 0x9DAB, 0x1CDD, 0x9DAC, 0x4349, 0x9DAF, 0x1CC9, 0x9DB1, 0x3BFC,
- 0x9DB2, 0x1CE3, 0x9DB4, 0x0BFD, 0x9DB5, 0x4A94, 0x9DB8, 0x1CE7,
- 0x9DB9, 0x4A95, 0x9DBA, 0x1CE8, 0x9DBB, 0x1CE6, 0x9DBC, 0x434A,
- 0x9DBD, 0x4A96, 0x9DBF, 0x4A93, 0x9DC0, 0x4348, 0x9DC1, 0x1CE5,
- 0x9DC2, 0x1CEB, 0x9DC3, 0x3BFD, 0x9DC4, 0x1CE4, 0x9DC6, 0x1CE9,
- 0x9DC7, 0x3BFE, 0x9DC9, 0x4A97, 0x9DCF, 0x1CEA, 0x9DD3, 0x1CED,
- 0x9DD6, 0x3BFF, 0x9DD7, 0x1DDE, 0x9DD9, 0x1CEC, 0x9DDA, 0x4A98,
- 0x9DDF, 0x3C00, 0x9DE0, 0x4A99, 0x9DE3, 0x4A9A, 0x9DE5, 0x4E41,
- 0x9DE6, 0x1CEF, 0x9DE7, 0x434C, 0x9DE9, 0x4E42, 0x9DEB, 0x3C01,
- 0x9DED, 0x1CF0, 0x9DEF, 0x1CF1, 0x9DF2, 0x0FEF, 0x9DF3, 0x4E43,
- 0x9DF4, 0x3C02, 0x9DF8, 0x1CEE, 0x9DF9, 0x0B4B, 0x9DFA, 0x085D,
- 0x9DFD, 0x1CF2, 0x9E02, 0x4A9D, 0x9E07, 0x434D, 0x9E0A, 0x4A9C,
- 0x9E0D, 0x4A9E, 0x9E15, 0x3C03, 0x9E19, 0x220C, 0x9E1A, 0x1CF3,
- 0x9E1B, 0x1CF4, 0x9E1C, 0x4A9F, 0x9E1D, 0x3C04, 0x9E1E, 0x1CF5,
- 0x9E75, 0x1CF6, 0x9E78, 0x0768, 0x9E79, 0x1CF7, 0x9E7A, 0x4E44,
- 0x9E7B, 0x4AA0, 0x9E7C, 0x1DFD, 0x9E7D, 0x1CF8, 0x9E7F, 0x08DB,
- 0x9E80, 0x4AA2, 0x9E81, 0x1CF9, 0x9E82, 0x4E45, 0x9E83, 0x4E46,
- 0x9E84, 0x4E47, 0x9E85, 0x4AA3, 0x9E88, 0x1CFA, 0x9E8B, 0x1CFB,
- 0x9E8C, 0x1CFC, 0x9E91, 0x1CFF, 0x9E92, 0x1CFD, 0x9E93, 0x0FE2,
- 0x9E95, 0x1CFE, 0x9E97, 0x0FB7, 0x9E9B, 0x4AA4, 0x9E9D, 0x1D00,
- 0x9E9E, 0x434E, 0x9E9F, 0x0FA3, 0x9EA4, 0x3C05, 0x9EA5, 0x1D01,
- 0x9EA6, 0x0D34, 0x9EA8, 0x3C06, 0x9EA9, 0x1D02, 0x9EAA, 0x1D04,
- 0x9EAC, 0x3C07, 0x9EAD, 0x1D05, 0x9EAF, 0x434F, 0x9EB0, 0x4E48,
- 0x9EB4, 0x1E02, 0x9EB5, 0x1E75, 0x9EB8, 0x1D03, 0x9EB9, 0x07FF,
- 0x9EBA, 0x0ED9, 0x9EBB, 0x0E91, 0x9EBC, 0x1284, 0x9EBD, 0x4AA6,
- 0x9EBE, 0x14FF, 0x9EBF, 0x0EA9, 0x9EC3, 0x340B, 0x9EC4, 0x052B,
- 0x9ECC, 0x1D07, 0x9ECD, 0x066A, 0x9ECE, 0x1D08, 0x9ECF, 0x1D09,
- 0x9ED0, 0x1D0A, 0x9ED1, 0x220D, 0x9ED2, 0x0807, 0x9ED4, 0x1D0B,
- 0x9ED8, 0x160D, 0x9ED9, 0x0EE7, 0x9EDB, 0x0B43, 0x9EDC, 0x1D0C,
- 0x9EDD, 0x1D0E, 0x9EDE, 0x1D0D, 0x9EDF, 0x4AA8, 0x9EE0, 0x1D0F,
- 0x9EE4, 0x4E49, 0x9EE5, 0x1D10, 0x9EE7, 0x3C08, 0x9EE8, 0x1D11,
- 0x9EEE, 0x3C09, 0x9EEF, 0x1D12, 0x9EF0, 0x4E4A, 0x9EF2, 0x4E4B,
- 0x9EF4, 0x1D13, 0x9EF6, 0x1D14, 0x9EF7, 0x1D15, 0x9EF9, 0x1D16,
- 0x9EFB, 0x1D17, 0x9EFC, 0x1D18, 0x9EFD, 0x1D19, 0x9EFF, 0x4AA9,
- 0x9F02, 0x4AAA, 0x9F03, 0x4AAC, 0x9F07, 0x1D1A, 0x9F08, 0x1D1B,
- 0x9F09, 0x4E4C, 0x9F0E, 0x0C1E, 0x9F0F, 0x4E4D, 0x9F10, 0x3C0A,
- 0x9F12, 0x3C0B, 0x9F13, 0x0791, 0x9F14, 0x4E4E, 0x9F15, 0x1D1D,
- 0x9F17, 0x3C0C, 0x9F19, 0x3C0D, 0x9F1B, 0x4E4F, 0x9F20, 0x0ACF,
- 0x9F21, 0x1D1E, 0x9F22, 0x4E50, 0x9F26, 0x4E51, 0x9F2A, 0x4E52,
- 0x9F2B, 0x4E53, 0x9F2C, 0x1D1F, 0x9F2F, 0x3C0E, 0x9F34, 0x4E54,
- 0x9F37, 0x3C0F, 0x9F39, 0x3C10, 0x9F3A, 0x4AAD, 0x9F3B, 0x0D93,
- 0x9F3D, 0x4AAE, 0x9F3E, 0x1D20, 0x9F41, 0x3C11, 0x9F45, 0x3C12,
- 0x9F46, 0x4AAF, 0x9F4A, 0x1D21, 0x9F4B, 0x170A, 0x9F4E, 0x1A7B,
- 0x9F4F, 0x1C06, 0x9F52, 0x1D22, 0x9F53, 0x4AB0, 0x9F54, 0x1D23,
- 0x9F55, 0x4AB1, 0x9F57, 0x3C13, 0x9F58, 0x4AB2, 0x9F5A, 0x4E55,
- 0x9F5D, 0x4AB4, 0x9F5F, 0x1D25, 0x9F60, 0x1D26, 0x9F61, 0x1D27,
- 0x9F62, 0x0FB8, 0x9F63, 0x1D24, 0x9F66, 0x1D28, 0x9F67, 0x1D29,
- 0x9F68, 0x3C14, 0x9F69, 0x4AB6, 0x9F6A, 0x1D2B, 0x9F6C, 0x1D2A,
- 0x9F6D, 0x4AB7, 0x9F6F, 0x4E56, 0x9F70, 0x4AB8, 0x9F71, 0x3C15,
- 0x9F72, 0x1D2D, 0x9F75, 0x3C16, 0x9F76, 0x1D2E, 0x9F77, 0x1D2C,
- 0x9F8D, 0x0F7E, 0x9F90, 0x3C17, 0x9F94, 0x3C18, 0x9F95, 0x1D2F,
- 0x9F97, 0x4350, 0x9F9C, 0x1D30, 0x9F9D, 0x1727, 0x9F9E, 0x4E57,
- 0x9FA0, 0x1D31, 0x9FA2, 0x3C19, 0x9FA5, 0x4E58, 0xF860, 0x3C54,
- 0xF861, 0x3C55, 0xF862, 0x3C56, 0xF87A, 0x3C57, 0xF87F, 0x3C58,
- 0xF909, 0x35AB, 0xF91D, 0x3450, 0xF91F, 0x3704, 0xF928, 0x4F4F,
- 0xF929, 0x4F51, 0xF936, 0x3452, 0xF95F, 0x3693, 0xF970, 0x3420,
- 0xF983, 0x3708, 0xF992, 0x1E81, 0xF993, 0x1E82, 0xF999, 0x1E83,
- 0xF99A, 0x3711, 0xF9A2, 0x370F, 0xF9C3, 0x1E80, 0xF9D0, 0x3454,
- 0xF9DC, 0x3451, 0xF9EC, 0x1E46, 0xFA03, 0x3684, 0xFA0E, 0x20DA,
- 0xFA0F, 0x20E5, 0xFA10, 0x1E42, 0xFA11, 0x37D2, 0xFA12, 0x2121,
- 0xFA13, 0x2131, 0xFA14, 0x2133, 0xFA15, 0x4F53, 0xFA16, 0x2164,
- 0xFA17, 0x217B, 0xFA18, 0x2183, 0xFA19, 0x2184, 0xFA1A, 0x2185,
- 0xFA1B, 0x2187, 0xFA1C, 0x218B, 0xFA1D, 0x218E, 0xFA1E, 0x2197,
- 0xFA1F, 0x21A2, 0xFA20, 0x21A4, 0xFA21, 0x21A5, 0xFA22, 0x21AE,
- 0xFA23, 0x21B6, 0xFA24, 0x4948, 0xFA25, 0x21B9, 0xFA26, 0x21BC,
- 0xFA27, 0x21D8, 0xFA28, 0x21DF, 0xFA29, 0x21EF, 0xFA2A, 0x21FB,
- 0xFA2B, 0x21FC, 0xFA2C, 0x21FE, 0xFA2D, 0x220B, 0xFA30, 0x3446,
- 0xFA31, 0x3430, 0xFA32, 0x344D, 0xFA33, 0x3449, 0xFA34, 0x341A,
- 0xFA35, 0x3442, 0xFA36, 0x1DE3, 0xFA37, 0x3436, 0xFA38, 0x3415,
- 0xFA39, 0x3448, 0xFA3A, 0x344B, 0xFA3B, 0x3431, 0xFA3C, 0x41C5,
- 0xFA3D, 0x340E, 0xFA3E, 0x3410, 0xFA3F, 0x3433, 0xFA40, 0x3439,
- 0xFA41, 0x3445, 0xFA42, 0x3416, 0xFA43, 0x3428, 0xFA44, 0x343F,
- 0xFA45, 0x340F, 0xFA46, 0x1E14, 0xFA47, 0x3414, 0xFA48, 0x3423,
- 0xFA49, 0x3C26, 0xFA4A, 0x1E34, 0xFA4B, 0x3443, 0xFA4C, 0x3424,
- 0xFA4D, 0x3421, 0xFA4E, 0x3417, 0xFA4F, 0x344F, 0xFA50, 0x342F,
- 0xFA51, 0x3427, 0xFA52, 0x340D, 0xFA53, 0x343B, 0xFA54, 0x341F,
- 0xFA55, 0x343D, 0xFA56, 0x342E, 0xFA57, 0x3457, 0xFA58, 0x47BE,
- 0xFA59, 0x3440, 0xFA5A, 0x3429, 0xFA5B, 0x3425, 0xFA5C, 0x3426,
- 0xFA5D, 0x3777, 0xFA5E, 0x3776, 0xFA5F, 0x3437, 0xFA60, 0x3413,
- 0xFA61, 0x3422, 0xFA62, 0x3409, 0xFA63, 0x341B, 0xFA64, 0x3444,
- 0xFA65, 0x3434, 0xFA66, 0x3C2B, 0xFA67, 0x3408, 0xFA68, 0x343E,
- 0xFA69, 0x3419, 0xFA6A, 0x1E6C, 0xFB00, 0x248E, 0xFB01, 0x0070,
- 0xFB02, 0x0071, 0xFB03, 0x248F, 0xFB04, 0x2490, 0xFE30, 0x1EDA,
- 0xFE31, 0x1ED4, 0xFE32, 0x1ED5, 0xFE33, 0x1ED2, 0xFE35, 0x1EDB,
- 0xFE36, 0x1EDC, 0xFE37, 0x1EE1, 0xFE38, 0x1EE2, 0xFE39, 0x1EDD,
- 0xFE3A, 0x1EDE, 0xFE3B, 0x1EEB, 0xFE3C, 0x1EEC, 0xFE3D, 0x1EE5,
- 0xFE3E, 0x1EE6, 0xFE3F, 0x1EE3, 0xFE40, 0x1EE4, 0xFE41, 0x1EE7,
- 0xFE42, 0x1EE8, 0xFE43, 0x1EE9, 0xFE44, 0x1EEA, 0xFE45, 0x315F,
- 0xFE46, 0x3160, 0xFE47, 0x1EDF, 0xFE48, 0x1EE0, 0xFF01, 0x0282,
- 0xFF02, 0x1F47, 0xFF03, 0x02CC, 0xFF04, 0x02C8, 0xFF05, 0x02CB,
- 0xFF06, 0x02CD, 0xFF07, 0x1F46, 0xFF08, 0x02A2, 0xFF09, 0x02A3,
- 0xFF0A, 0x02CE, 0xFF0B, 0x02B4, 0xFF0C, 0x027C, 0xFF0D, 0x02B5,
- 0xFF0E, 0x027D, 0xFF0F, 0x0297, 0xFF10, 0x030C, 0xFF11, 0x030D,
- 0xFF12, 0x030E, 0xFF13, 0x030F, 0xFF14, 0x0310, 0xFF15, 0x0311,
- 0xFF16, 0x0312, 0xFF17, 0x0313, 0xFF18, 0x0314, 0xFF19, 0x0315,
- 0xFF1A, 0x027F, 0xFF1B, 0x0280, 0xFF1C, 0x02BB, 0xFF1D, 0x02B9,
- 0xFF1E, 0x02BC, 0xFF1F, 0x0281, 0xFF20, 0x02CF, 0xFF21, 0x0316,
- 0xFF22, 0x0317, 0xFF23, 0x0318, 0xFF24, 0x0319, 0xFF25, 0x031A,
- 0xFF26, 0x031B, 0xFF27, 0x031C, 0xFF28, 0x031D, 0xFF29, 0x031E,
- 0xFF2A, 0x031F, 0xFF2B, 0x0320, 0xFF2C, 0x0321, 0xFF2D, 0x0322,
- 0xFF2E, 0x0323, 0xFF2F, 0x0324, 0xFF30, 0x0325, 0xFF31, 0x0326,
- 0xFF32, 0x0327, 0xFF33, 0x0328, 0xFF34, 0x0329, 0xFF35, 0x032A,
- 0xFF36, 0x032B, 0xFF37, 0x032C, 0xFF38, 0x032D, 0xFF39, 0x032E,
- 0xFF3A, 0x032F, 0xFF3B, 0x02A6, 0xFF3C, 0x0298, 0xFF3D, 0x02A7,
- 0xFF3E, 0x0288, 0xFF3F, 0x028A, 0xFF40, 0x0286, 0xFF41, 0x0330,
- 0xFF42, 0x0331, 0xFF43, 0x0332, 0xFF44, 0x0333, 0xFF45, 0x0334,
- 0xFF46, 0x0335, 0xFF47, 0x0336, 0xFF48, 0x0337, 0xFF49, 0x0338,
- 0xFF4A, 0x0339, 0xFF4B, 0x033A, 0xFF4C, 0x033B, 0xFF4D, 0x033C,
- 0xFF4E, 0x033D, 0xFF4F, 0x033E, 0xFF50, 0x033F, 0xFF51, 0x0340,
- 0xFF52, 0x0341, 0xFF53, 0x0342, 0xFF54, 0x0343, 0xFF55, 0x0344,
- 0xFF56, 0x0345, 0xFF57, 0x0346, 0xFF58, 0x0347, 0xFF59, 0x0348,
- 0xFF5A, 0x0349, 0xFF5B, 0x02A8, 0xFF5C, 0x029B, 0xFF5D, 0x02A9,
- 0xFF5E, 0x0299, 0xFF5F, 0x2F63, 0xFF60, 0x2F64, 0xFF61, 0x0147,
- 0xFF62, 0x0148, 0xFF63, 0x0149, 0xFF64, 0x014A, 0xFF65, 0x014B,
- 0xFF66, 0x014C, 0xFF67, 0x014D, 0xFF68, 0x014E, 0xFF69, 0x014F,
- 0xFF6A, 0x0150, 0xFF6B, 0x0151, 0xFF6C, 0x0152, 0xFF6D, 0x0153,
- 0xFF6E, 0x0154, 0xFF6F, 0x0155, 0xFF70, 0x0156, 0xFF71, 0x0157,
- 0xFF72, 0x0158, 0xFF73, 0x0159, 0xFF74, 0x015A, 0xFF75, 0x015B,
- 0xFF76, 0x015C, 0xFF77, 0x015D, 0xFF78, 0x015E, 0xFF79, 0x015F,
- 0xFF7A, 0x0160, 0xFF7B, 0x0161, 0xFF7C, 0x0162, 0xFF7D, 0x0163,
- 0xFF7E, 0x0164, 0xFF7F, 0x0165, 0xFF80, 0x0166, 0xFF81, 0x0167,
- 0xFF82, 0x0168, 0xFF83, 0x0169, 0xFF84, 0x016A, 0xFF85, 0x016B,
- 0xFF86, 0x016C, 0xFF87, 0x016D, 0xFF88, 0x016E, 0xFF89, 0x016F,
- 0xFF8A, 0x0170, 0xFF8B, 0x0171, 0xFF8C, 0x0172, 0xFF8D, 0x0173,
- 0xFF8E, 0x0174, 0xFF8F, 0x0175, 0xFF90, 0x0176, 0xFF91, 0x0177,
- 0xFF92, 0x0178, 0xFF93, 0x0179, 0xFF94, 0x017A, 0xFF95, 0x017B,
- 0xFF96, 0x017C, 0xFF97, 0x017D, 0xFF98, 0x017E, 0xFF99, 0x017F,
- 0xFF9A, 0x0180, 0xFF9B, 0x0181, 0xFF9C, 0x0182, 0xFF9D, 0x0183,
- 0xFF9E, 0x0184, 0xFF9F, 0x0185, 0xFFE0, 0x02C9, 0xFFE1, 0x02CA,
- 0xFFE2, 0x02EF, 0xFFE3, 0x0289, 0xFFE4, 0x1F45, 0xFFE5, 0x02C7,
- 0xFFE8, 0x0143,
+ 0x0020, 0x0001, 0x0021, 0x0002, 0x0022, 0x0003, 0x0023, 0x0004, 0x0024,
+ 0x0005, 0x0025, 0x0006, 0x0026, 0x0007, 0x0027, 0x0008, 0x0028, 0x0009,
+ 0x0029, 0x000A, 0x002A, 0x000B, 0x002B, 0x000C, 0x002C, 0x000D, 0x002D,
+ 0x000E, 0x002E, 0x000F, 0x002F, 0x0010, 0x0030, 0x0011, 0x0031, 0x0012,
+ 0x0032, 0x0013, 0x0033, 0x0014, 0x0034, 0x0015, 0x0035, 0x0016, 0x0036,
+ 0x0017, 0x0037, 0x0018, 0x0038, 0x0019, 0x0039, 0x001A, 0x003A, 0x001B,
+ 0x003B, 0x001C, 0x003C, 0x001D, 0x003D, 0x001E, 0x003E, 0x001F, 0x003F,
+ 0x0020, 0x0040, 0x0021, 0x0041, 0x0022, 0x0042, 0x0023, 0x0043, 0x0024,
+ 0x0044, 0x0025, 0x0045, 0x0026, 0x0046, 0x0027, 0x0047, 0x0028, 0x0048,
+ 0x0029, 0x0049, 0x002A, 0x004A, 0x002B, 0x004B, 0x002C, 0x004C, 0x002D,
+ 0x004D, 0x002E, 0x004E, 0x002F, 0x004F, 0x0030, 0x0050, 0x0031, 0x0051,
+ 0x0032, 0x0052, 0x0033, 0x0053, 0x0034, 0x0054, 0x0035, 0x0055, 0x0036,
+ 0x0056, 0x0037, 0x0057, 0x0038, 0x0058, 0x0039, 0x0059, 0x003A, 0x005A,
+ 0x003B, 0x005B, 0x003C, 0x005C, 0x0061, 0x005D, 0x003E, 0x005E, 0x003F,
+ 0x005F, 0x0040, 0x0060, 0x0041, 0x0061, 0x0042, 0x0062, 0x0043, 0x0063,
+ 0x0044, 0x0064, 0x0045, 0x0065, 0x0046, 0x0066, 0x0047, 0x0067, 0x0048,
+ 0x0068, 0x0049, 0x0069, 0x004A, 0x006A, 0x004B, 0x006B, 0x004C, 0x006C,
+ 0x004D, 0x006D, 0x004E, 0x006E, 0x004F, 0x006F, 0x0050, 0x0070, 0x0051,
+ 0x0071, 0x0052, 0x0072, 0x0053, 0x0073, 0x0054, 0x0074, 0x0055, 0x0075,
+ 0x0056, 0x0076, 0x0057, 0x0077, 0x0058, 0x0078, 0x0059, 0x0079, 0x005A,
+ 0x007A, 0x005B, 0x007B, 0x005C, 0x007C, 0x0063, 0x007D, 0x005E, 0x007E,
+ 0x0064, 0x00A0, 0x0001, 0x00A1, 0x0065, 0x00A2, 0x0066, 0x00A3, 0x0067,
+ 0x00A4, 0x006B, 0x00A5, 0x003D, 0x00A6, 0x005D, 0x00A7, 0x02D0, 0x00A8,
+ 0x0287, 0x00A9, 0x0098, 0x00AA, 0x008C, 0x00AB, 0x006D, 0x00AC, 0x0099,
+ 0x00AD, 0x0097, 0x00AE, 0x009A, 0x00AF, 0x0081, 0x00B0, 0x02C3, 0x00B1,
+ 0x02B6, 0x00B2, 0x009D, 0x00B3, 0x009E, 0x00B4, 0x0285, 0x00B5, 0x009F,
+ 0x00B6, 0x030A, 0x00B7, 0x0075, 0x00B8, 0x0086, 0x00B9, 0x00A0, 0x00BA,
+ 0x0090, 0x00BB, 0x007B, 0x00BC, 0x00A1, 0x00BD, 0x00A2, 0x00BE, 0x00A3,
+ 0x00BF, 0x007E, 0x00C0, 0x00A4, 0x00C1, 0x00A5, 0x00C2, 0x00A6, 0x00C3,
+ 0x00A7, 0x00C4, 0x00A8, 0x00C5, 0x00A9, 0x00C6, 0x008B, 0x00C7, 0x00AA,
+ 0x00C8, 0x00AB, 0x00C9, 0x00AC, 0x00CA, 0x00AD, 0x00CB, 0x00AE, 0x00CC,
+ 0x00AF, 0x00CD, 0x00B0, 0x00CE, 0x00B1, 0x00CF, 0x00B2, 0x00D0, 0x00B3,
+ 0x00D1, 0x00B4, 0x00D2, 0x00B5, 0x00D3, 0x00B6, 0x00D4, 0x00B7, 0x00D5,
+ 0x00B8, 0x00D6, 0x00B9, 0x00D7, 0x02B7, 0x00D8, 0x008E, 0x00D9, 0x00BB,
+ 0x00DA, 0x00BC, 0x00DB, 0x00BD, 0x00DC, 0x00BE, 0x00DD, 0x00BF, 0x00DE,
+ 0x00C0, 0x00DF, 0x0096, 0x00E0, 0x00C1, 0x00E1, 0x00C2, 0x00E2, 0x00C3,
+ 0x00E3, 0x00C4, 0x00E4, 0x00C5, 0x00E5, 0x00C6, 0x00E6, 0x0091, 0x00E7,
+ 0x00C7, 0x00E8, 0x00C8, 0x00E9, 0x00C9, 0x00EA, 0x00CA, 0x00EB, 0x00CB,
+ 0x00EC, 0x00CC, 0x00ED, 0x00CD, 0x00EE, 0x00CE, 0x00EF, 0x00CF, 0x00F0,
+ 0x00D0, 0x00F1, 0x00D1, 0x00F2, 0x00D2, 0x00F3, 0x00D3, 0x00F4, 0x00D4,
+ 0x00F5, 0x00D5, 0x00F6, 0x00D6, 0x00F7, 0x02B8, 0x00F8, 0x0094, 0x00F9,
+ 0x00D8, 0x00FA, 0x00D9, 0x00FB, 0x00DA, 0x00FC, 0x00DB, 0x00FD, 0x00DC,
+ 0x00FE, 0x00DD, 0x00FF, 0x00DE, 0x0100, 0x2496, 0x0101, 0x2491, 0x0102,
+ 0x3D8C, 0x0103, 0x3D99, 0x0104, 0x3D79, 0x0105, 0x3D81, 0x0106, 0x3D8E,
+ 0x0107, 0x3D9B, 0x0108, 0x3DA7, 0x0109, 0x3DAD, 0x010C, 0x3D8F, 0x010D,
+ 0x3D9C, 0x010E, 0x3D91, 0x010F, 0x3D9E, 0x0111, 0x3D9F, 0x0112, 0x2499,
+ 0x0113, 0x2494, 0x0118, 0x3D90, 0x0119, 0x3D9D, 0x011A, 0x24B3, 0x011B,
+ 0x24BF, 0x011C, 0x3DA8, 0x011D, 0x3DAE, 0x0124, 0x3DA9, 0x0125, 0x3DAF,
+ 0x0127, 0x3DC8, 0x0128, 0x24B8, 0x0129, 0x24C4, 0x012A, 0x2497, 0x012B,
+ 0x2492, 0x0131, 0x0092, 0x0134, 0x3DAA, 0x0135, 0x3DB0, 0x0139, 0x3D8D,
+ 0x013A, 0x3D9A, 0x013D, 0x3D7B, 0x013E, 0x3D83, 0x0141, 0x008D, 0x0142,
+ 0x0093, 0x0143, 0x3D92, 0x0144, 0x3DA0, 0x0147, 0x3D93, 0x0148, 0x3DA1,
+ 0x014B, 0x24DC, 0x014C, 0x249A, 0x014D, 0x2495, 0x0150, 0x3D94, 0x0151,
+ 0x3DA2, 0x0152, 0x008F, 0x0153, 0x0095, 0x0154, 0x3D8B, 0x0155, 0x3D98,
+ 0x0158, 0x3D95, 0x0159, 0x3DA3, 0x015A, 0x3D7C, 0x015B, 0x3D84, 0x015C,
+ 0x3DAB, 0x015D, 0x3DB1, 0x015E, 0x3D7D, 0x015F, 0x3D86, 0x0160, 0x00DF,
+ 0x0161, 0x00E3, 0x0162, 0x3D97, 0x0163, 0x3DA5, 0x0164, 0x3D7E, 0x0165,
+ 0x3D87, 0x0168, 0x24BD, 0x0169, 0x24C9, 0x016A, 0x2498, 0x016B, 0x2493,
+ 0x016C, 0x3DAC, 0x016D, 0x3DB2, 0x016E, 0x24BC, 0x016F, 0x24C8, 0x0170,
+ 0x3D96, 0x0171, 0x3DA4, 0x0178, 0x00E0, 0x0179, 0x3D7F, 0x017A, 0x3D88,
+ 0x017B, 0x3D80, 0x017C, 0x3D8A, 0x017D, 0x00E1, 0x017E, 0x00E5, 0x0192,
+ 0x0069, 0x0193, 0x3DD2, 0x01C2, 0x3DCD, 0x01CD, 0x24B2, 0x01CE, 0x24BE,
+ 0x01CF, 0x24B6, 0x01D0, 0x24C2, 0x01D1, 0x24B9, 0x01D2, 0x24C5, 0x01D3,
+ 0x24BB, 0x01D4, 0x24C7, 0x01D6, 0x3D75, 0x01D8, 0x3D76, 0x01DA, 0x3D77,
+ 0x01DC, 0x3D78, 0x01F8, 0x3D73, 0x01F9, 0x3D74, 0x01FD, 0x24CD, 0x0250,
+ 0x3DD8, 0x0251, 0x24CA, 0x0252, 0x3DDC, 0x0253, 0x3DCE, 0x0254, 0x24CF,
+ 0x0255, 0x3DE1, 0x0256, 0x3DBA, 0x0257, 0x3DCF, 0x0258, 0x3DD5, 0x0259,
+ 0x24D2, 0x025A, 0x24D5, 0x025B, 0x24D8, 0x025C, 0x3DD6, 0x025E, 0x3DD7,
+ 0x025F, 0x3DC1, 0x0260, 0x3DD1, 0x0261, 0x3DC5, 0x0262, 0x3E0B, 0x0263,
+ 0x3E0C, 0x0264, 0x3DDB, 0x0265, 0x3DDE, 0x0266, 0x3DCB, 0x0267, 0x3DE4,
+ 0x0268, 0x3DD3, 0x026A, 0x3E0D, 0x026C, 0x3DB6, 0x026D, 0x3DC0, 0x026E,
+ 0x3DB7, 0x026F, 0x3DD9, 0x0270, 0x3DC6, 0x0271, 0x3DB3, 0x0272, 0x3DC2,
+ 0x0273, 0x3DBB, 0x0274, 0x3E0E, 0x0275, 0x24DD, 0x0276, 0x3E0F, 0x0278,
+ 0x3E10, 0x0279, 0x3DB8, 0x027A, 0x3DE3, 0x027B, 0x3DBF, 0x027D, 0x3DBC,
+ 0x027E, 0x3DB5, 0x0280, 0x3E11, 0x0281, 0x3DC7, 0x0282, 0x3DBD, 0x0283,
+ 0x24E2, 0x0284, 0x3DD0, 0x0288, 0x3DB9, 0x0289, 0x3DD4, 0x028A, 0x3DDA,
+ 0x028B, 0x3DB4, 0x028C, 0x24DE, 0x028D, 0x3DDD, 0x028E, 0x3DC4, 0x028F,
+ 0x3E12, 0x0290, 0x3DBE, 0x0291, 0x3DE2, 0x0292, 0x24E1, 0x0294, 0x3DCA,
+ 0x0295, 0x3DC9, 0x0298, 0x3DCC, 0x0299, 0x3E13, 0x029C, 0x3E14, 0x029D,
+ 0x3DC3, 0x029F, 0x3E15, 0x02A1, 0x3DE0, 0x02A2, 0x3DDF, 0x02B0, 0x3E16,
+ 0x02B2, 0x3E17, 0x02B7, 0x3E18, 0x02BB, 0x0062, 0x02BC, 0x0060, 0x02C1,
+ 0x3E19, 0x02C6, 0x0080, 0x02C7, 0x3D85, 0x02C8, 0x3DE6, 0x02CC, 0x3DE7,
+ 0x02D0, 0x24E3, 0x02D1, 0x3DE8, 0x02D8, 0x3D7A, 0x02D9, 0x3DA6, 0x02DA,
+ 0x0085, 0x02DB, 0x3D82, 0x02DC, 0x005F, 0x02DD, 0x3D89, 0x02DE, 0x3DFB,
+ 0x02E0, 0x3E1A, 0x02E1, 0x3E1B, 0x02E5, 0x3DEB, 0x02E6, 0x3DEC, 0x02E7,
+ 0x3DED, 0x02E8, 0x3DEE, 0x02E9, 0x3DEF, 0x0300, 0x0041, 0x0301, 0x007F,
+ 0x0302, 0x0080, 0x0303, 0x005F, 0x0304, 0x0081, 0x0305, 0x00E2, 0x0306,
+ 0x0082, 0x0307, 0x0083, 0x0308, 0x0084, 0x030A, 0x0085, 0x030B, 0x0087,
+ 0x030C, 0x0089, 0x030F, 0x3DEA, 0x0318, 0x3E02, 0x0319, 0x3E03, 0x031A,
+ 0x3E07, 0x031C, 0x3DF5, 0x031D, 0x3E00, 0x031E, 0x3E01, 0x031F, 0x3DF6,
+ 0x0320, 0x3DF7, 0x0324, 0x3DFC, 0x0325, 0x3DF2, 0x0327, 0x0086, 0x0328,
+ 0x0088, 0x0329, 0x3DF9, 0x032A, 0x3E04, 0x032C, 0x3DF3, 0x032F, 0x3DFA,
+ 0x0330, 0x3DFD, 0x0332, 0x0040, 0x0334, 0x3DFF, 0x0336, 0x008A, 0x0339,
+ 0x3DF4, 0x033A, 0x3E05, 0x033B, 0x3E06, 0x033C, 0x3DFE, 0x033D, 0x3DF8,
+ 0x0361, 0x3DE5, 0x0391, 0x03F3, 0x0392, 0x03F4, 0x0393, 0x03F5, 0x0394,
+ 0x03F6, 0x0395, 0x03F7, 0x0396, 0x03F8, 0x0397, 0x03F9, 0x0398, 0x03FA,
+ 0x0399, 0x03FB, 0x039A, 0x03FC, 0x039B, 0x03FD, 0x039C, 0x03FE, 0x039D,
+ 0x03FF, 0x039E, 0x0400, 0x039F, 0x0401, 0x03A0, 0x0402, 0x03A1, 0x0403,
+ 0x03A3, 0x0404, 0x03A4, 0x0405, 0x03A5, 0x0406, 0x03A6, 0x0407, 0x03A7,
+ 0x0408, 0x03A8, 0x0409, 0x03A9, 0x040A, 0x03B1, 0x040B, 0x03B2, 0x040C,
+ 0x03B3, 0x040D, 0x03B4, 0x040E, 0x03B5, 0x040F, 0x03B6, 0x0410, 0x03B7,
+ 0x0411, 0x03B8, 0x0412, 0x03B9, 0x0413, 0x03BA, 0x0414, 0x03BB, 0x0415,
+ 0x03BC, 0x0416, 0x03BD, 0x0417, 0x03BE, 0x0418, 0x03BF, 0x0419, 0x03C0,
+ 0x041A, 0x03C1, 0x041B, 0x03C2, 0x3F5E, 0x03C3, 0x041C, 0x03C4, 0x041D,
+ 0x03C5, 0x041E, 0x03C6, 0x041F, 0x03C7, 0x0420, 0x03C8, 0x0421, 0x03C9,
+ 0x0422, 0x03D0, 0x2F3A, 0x03D1, 0x2F40, 0x03D5, 0x2F3E, 0x03DB, 0x2F3F,
+ 0x0401, 0x0429, 0x0410, 0x0423, 0x0411, 0x0424, 0x0412, 0x0425, 0x0413,
+ 0x0426, 0x0414, 0x0427, 0x0415, 0x0428, 0x0416, 0x042A, 0x0417, 0x042B,
+ 0x0418, 0x042C, 0x0419, 0x042D, 0x041A, 0x042E, 0x041B, 0x042F, 0x041C,
+ 0x0430, 0x041D, 0x0431, 0x041E, 0x0432, 0x041F, 0x0433, 0x0420, 0x0434,
+ 0x0421, 0x0435, 0x0422, 0x0436, 0x0423, 0x0437, 0x0424, 0x0438, 0x0425,
+ 0x0439, 0x0426, 0x043A, 0x0427, 0x043B, 0x0428, 0x043C, 0x0429, 0x043D,
+ 0x042A, 0x043E, 0x042B, 0x043F, 0x042C, 0x0440, 0x042D, 0x0441, 0x042E,
+ 0x0442, 0x042F, 0x0443, 0x0430, 0x0444, 0x0431, 0x0445, 0x0432, 0x0446,
+ 0x0433, 0x0447, 0x0434, 0x0448, 0x0435, 0x0449, 0x0436, 0x044B, 0x0437,
+ 0x044C, 0x0438, 0x044D, 0x0439, 0x044E, 0x043A, 0x044F, 0x043B, 0x0450,
+ 0x043C, 0x0451, 0x043D, 0x0452, 0x043E, 0x0453, 0x043F, 0x0454, 0x0440,
+ 0x0455, 0x0441, 0x0456, 0x0442, 0x0457, 0x0443, 0x0458, 0x0444, 0x0459,
+ 0x0445, 0x045A, 0x0446, 0x045B, 0x0447, 0x045C, 0x0448, 0x045D, 0x0449,
+ 0x045E, 0x044A, 0x045F, 0x044B, 0x0460, 0x044C, 0x0461, 0x044D, 0x0462,
+ 0x044E, 0x0463, 0x044F, 0x0464, 0x0451, 0x044A, 0x1E3E, 0x3D71, 0x1E3F,
+ 0x3D72, 0x1EBC, 0x24B5, 0x1EBD, 0x24C1, 0x1F70, 0x24CC, 0x1F71, 0x24CB,
+ 0x1F72, 0x24DA, 0x1F73, 0x24D9, 0x2002, 0x00E7, 0x2003, 0x0279, 0x2010,
+ 0x0296, 0x2011, 0x000E, 0x2012, 0x0072, 0x2013, 0x0072, 0x2014, 0x008A,
+ 0x2015, 0x0295, 0x2016, 0x029A, 0x2018, 0x0062, 0x2019, 0x0060, 0x201A,
+ 0x0078, 0x201C, 0x006C, 0x201D, 0x007A, 0x201E, 0x0079, 0x2020, 0x0308,
+ 0x2021, 0x0309, 0x2022, 0x0077, 0x2025, 0x029D, 0x2026, 0x029C, 0x2030,
+ 0x0304, 0x2032, 0x02C4, 0x2033, 0x02C5, 0x2039, 0x006E, 0x203A, 0x006F,
+ 0x203B, 0x02DE, 0x203C, 0x2F4F, 0x203E, 0x00E2, 0x203F, 0x3DE9, 0x2042,
+ 0x3F9A, 0x2044, 0x0068, 0x2047, 0x3F96, 0x2048, 0x3F97, 0x2049, 0x2F50,
+ 0x2051, 0x3F99, 0x2070, 0x24A1, 0x2074, 0x24A2, 0x2075, 0x24A3, 0x2076,
+ 0x24A4, 0x2077, 0x24A5, 0x2078, 0x24A6, 0x2079, 0x24A7, 0x2080, 0x24A8,
+ 0x2081, 0x24A9, 0x2082, 0x24AA, 0x2083, 0x24AB, 0x2084, 0x24AC, 0x2085,
+ 0x24AD, 0x2086, 0x24AE, 0x2087, 0x24AF, 0x2088, 0x24B0, 0x2089, 0x24B1,
+ 0x20AC, 0x248A, 0x20DD, 0x3FC8, 0x20DE, 0x2B1B, 0x2100, 0x2E4F, 0x2103,
+ 0x02C6, 0x2105, 0x2E53, 0x2109, 0x2071, 0x210A, 0x2070, 0x210F, 0x2F3C,
+ 0x2113, 0x1F59, 0x2116, 0x1DBA, 0x2121, 0x1F77, 0x2122, 0x00E4, 0x2126,
+ 0x248B, 0x2127, 0x3C9B, 0x212B, 0x0303, 0x2135, 0x2F39, 0x213B, 0x2073,
+ 0x2153, 0x249F, 0x2154, 0x24A0, 0x2155, 0x3D6F, 0x2156, 0x2639, 0x2157,
+ 0x263A, 0x2158, 0x263B, 0x2159, 0x263C, 0x215A, 0x263D, 0x215B, 0x249B,
+ 0x215C, 0x249C, 0x215D, 0x249D, 0x215E, 0x249E, 0x2160, 0x1D97, 0x2161,
+ 0x1D98, 0x2162, 0x1D99, 0x2163, 0x1D9A, 0x2164, 0x1D9B, 0x2165, 0x1D9C,
+ 0x2166, 0x1D9D, 0x2167, 0x1D9E, 0x2168, 0x1D9F, 0x2169, 0x1DA0, 0x216A,
+ 0x2021, 0x216B, 0x2022, 0x2170, 0x1F9C, 0x2171, 0x1F9D, 0x2172, 0x1F9E,
+ 0x2173, 0x1F9F, 0x2174, 0x1FA0, 0x2175, 0x1FA1, 0x2176, 0x1FA2, 0x2177,
+ 0x1FA3, 0x2178, 0x1FA4, 0x2179, 0x1FA5, 0x217A, 0x206A, 0x217B, 0x206B,
+ 0x217F, 0x206F, 0x2190, 0x02E1, 0x2191, 0x02E2, 0x2192, 0x02E0, 0x2193,
+ 0x02E3, 0x2194, 0x2FA9, 0x2196, 0x2FAC, 0x2197, 0x2FAD, 0x2198, 0x2FAA,
+ 0x2199, 0x2FAB, 0x21C4, 0x2076, 0x21C5, 0x2077, 0x21C6, 0x2075, 0x21CB,
+ 0x2FAF, 0x21CC, 0x2FAE, 0x21D0, 0x2FA8, 0x21D2, 0x02F0, 0x21D4, 0x02F1,
+ 0x21E6, 0x1F4D, 0x21E7, 0x1F4C, 0x21E8, 0x1F4E, 0x21E9, 0x1F4B, 0x2200,
+ 0x02F2, 0x2202, 0x02F7, 0x2203, 0x02F3, 0x2205, 0x2F98, 0x2207, 0x02F8,
+ 0x2208, 0x02E5, 0x2209, 0x3C74, 0x220A, 0x2F3B, 0x220B, 0x02E6, 0x2211,
+ 0x1DC9, 0x2212, 0x02B5, 0x2213, 0x2F56, 0x2219, 0x0075, 0x221A, 0x02FD,
+ 0x221D, 0x02FF, 0x221E, 0x02BF, 0x221F, 0x1DCD, 0x2220, 0x02F4, 0x2225,
+ 0x3C81, 0x2226, 0x3C82, 0x2227, 0x02ED, 0x2228, 0x02EE, 0x2229, 0x02EC,
+ 0x222A, 0x02EB, 0x222B, 0x0301, 0x222C, 0x0302, 0x222D, 0x2003, 0x222E,
+ 0x1DC8, 0x2234, 0x02C0, 0x2235, 0x0300, 0x223C, 0x0064, 0x223D, 0x02FE,
+ 0x2243, 0x2F58, 0x2245, 0x3C93, 0x2248, 0x3C94, 0x2252, 0x02FA, 0x2260,
+ 0x02BA, 0x2261, 0x02F9, 0x2262, 0x3C91, 0x2266, 0x02BD, 0x2267, 0x02BE,
+ 0x226A, 0x02FB, 0x226B, 0x02FC, 0x2272, 0x2F59, 0x2273, 0x2F5A, 0x2276,
+ 0x3C95, 0x2277, 0x3C96, 0x2282, 0x02E9, 0x2283, 0x02EA, 0x2284, 0x3C70,
+ 0x2285, 0x3C71, 0x2286, 0x02E7, 0x2287, 0x02E8, 0x228A, 0x3C72, 0x228B,
+ 0x3C73, 0x2295, 0x2F9C, 0x2296, 0x2F9A, 0x2297, 0x2F9D, 0x2298, 0x2F9B,
+ 0x229E, 0x3E22, 0x22A0, 0x2F99, 0x22A5, 0x02F5, 0x22BF, 0x1DCE, 0x22DA,
+ 0x3D6D, 0x22DB, 0x3D6E, 0x2305, 0x3C76, 0x2306, 0x3C77, 0x2307, 0x2FBB,
+ 0x2312, 0x02F6, 0x2318, 0x3D70, 0x239B, 0x2F6F, 0x239C, 0x2F87, 0x239D,
+ 0x2F70, 0x239E, 0x2F71, 0x239F, 0x2F87, 0x23A0, 0x2F72, 0x23A1, 0x2F77,
+ 0x23A2, 0x2F87, 0x23A3, 0x2F78, 0x23A4, 0x2F79, 0x23A5, 0x2F87, 0x23A6,
+ 0x2F7A, 0x23A7, 0x1FF2, 0x23A8, 0x1FF3, 0x23A9, 0x1FF4, 0x23AA, 0x2F87,
+ 0x23AB, 0x1FEE, 0x23AC, 0x1FEF, 0x23AD, 0x1FF0, 0x23B0, 0x3FB8, 0x23B1,
+ 0x3FB9, 0x23BE, 0x3F7D, 0x23BF, 0x3F7E, 0x23C0, 0x3F7F, 0x23C1, 0x3F80,
+ 0x23C2, 0x3F81, 0x23C3, 0x3F82, 0x23C4, 0x3F83, 0x23C5, 0x3F84, 0x23C6,
+ 0x3F85, 0x23C7, 0x3F86, 0x23C8, 0x3F87, 0x23C9, 0x3F88, 0x23CA, 0x3F89,
+ 0x23CB, 0x3F8A, 0x23CC, 0x3F8B, 0x23CE, 0x3F91, 0x2423, 0x3F90, 0x2460,
+ 0x1D83, 0x2461, 0x1D84, 0x2462, 0x1D85, 0x2463, 0x1D86, 0x2464, 0x1D87,
+ 0x2465, 0x1D88, 0x2466, 0x1D89, 0x2467, 0x1D8A, 0x2468, 0x1D8B, 0x2469,
+ 0x1D8C, 0x246A, 0x1D8D, 0x246B, 0x1D8E, 0x246C, 0x1D8F, 0x246D, 0x1D90,
+ 0x246E, 0x1D91, 0x246F, 0x1D92, 0x2470, 0x1D93, 0x2471, 0x1D94, 0x2472,
+ 0x1D95, 0x2473, 0x1D96, 0x2474, 0x1F87, 0x2475, 0x1F88, 0x2476, 0x1F89,
+ 0x2477, 0x1F8A, 0x2478, 0x1F8B, 0x2479, 0x1F8C, 0x247A, 0x1F8D, 0x247B,
+ 0x1F8E, 0x247C, 0x1F8F, 0x247D, 0x1F90, 0x247E, 0x1F91, 0x247F, 0x1F92,
+ 0x2480, 0x1F93, 0x2481, 0x1F94, 0x2482, 0x1F95, 0x2483, 0x1F96, 0x2484,
+ 0x1F97, 0x2485, 0x1F98, 0x2486, 0x1F99, 0x2487, 0x1F9A, 0x2488, 0x1F7E,
+ 0x2489, 0x1F7F, 0x248A, 0x1F80, 0x248B, 0x1F81, 0x248C, 0x1F82, 0x248D,
+ 0x1F83, 0x248E, 0x1F84, 0x248F, 0x1F85, 0x2490, 0x1F86, 0x249C, 0x1FB0,
+ 0x249D, 0x1FB1, 0x249E, 0x1FB2, 0x249F, 0x1FB3, 0x24A0, 0x1FB4, 0x24A1,
+ 0x1FB5, 0x24A2, 0x1FB6, 0x24A3, 0x1FB7, 0x24A4, 0x1FB8, 0x24A5, 0x1FB9,
+ 0x24A6, 0x1FBA, 0x24A7, 0x1FBB, 0x24A8, 0x1FBC, 0x24A9, 0x1FBD, 0x24AA,
+ 0x1FBE, 0x24AB, 0x1FBF, 0x24AC, 0x1FC0, 0x24AD, 0x1FC1, 0x24AE, 0x1FC2,
+ 0x24AF, 0x1FC3, 0x24B0, 0x1FC4, 0x24B1, 0x1FC5, 0x24B2, 0x1FC6, 0x24B3,
+ 0x1FC7, 0x24B4, 0x1FC8, 0x24B5, 0x1FC9, 0x24B6, 0x2863, 0x24B7, 0x2864,
+ 0x24B8, 0x2865, 0x24B9, 0x2866, 0x24BA, 0x2867, 0x24BB, 0x2868, 0x24BC,
+ 0x2869, 0x24BD, 0x286A, 0x24BE, 0x286B, 0x24BF, 0x286C, 0x24C0, 0x286D,
+ 0x24C1, 0x286E, 0x24C2, 0x286F, 0x24C3, 0x2870, 0x24C4, 0x2871, 0x24C5,
+ 0x2872, 0x24C6, 0x2873, 0x24C7, 0x2874, 0x24C8, 0x2875, 0x24C9, 0x2876,
+ 0x24CA, 0x2877, 0x24CB, 0x2878, 0x24CC, 0x2879, 0x24CD, 0x287A, 0x24CE,
+ 0x287B, 0x24CF, 0x287C, 0x24D0, 0x2849, 0x24D1, 0x284A, 0x24D2, 0x284B,
+ 0x24D3, 0x284C, 0x24D4, 0x284D, 0x24D5, 0x284E, 0x24D6, 0x284F, 0x24D7,
+ 0x2850, 0x24D8, 0x2851, 0x24D9, 0x2852, 0x24DA, 0x2853, 0x24DB, 0x2854,
+ 0x24DC, 0x2855, 0x24DD, 0x2856, 0x24DE, 0x2857, 0x24DF, 0x2858, 0x24E0,
+ 0x2859, 0x24E1, 0x285A, 0x24E2, 0x285B, 0x24E3, 0x285C, 0x24E4, 0x285D,
+ 0x24E5, 0x285E, 0x24E6, 0x285F, 0x24E7, 0x2860, 0x24E8, 0x2861, 0x24E9,
+ 0x2862, 0x24EA, 0x2020, 0x24EB, 0x2913, 0x24EC, 0x2914, 0x24ED, 0x2915,
+ 0x24EE, 0x2916, 0x24EF, 0x2917, 0x24F0, 0x2918, 0x24F1, 0x2919, 0x24F2,
+ 0x291A, 0x24F3, 0x291B, 0x24F4, 0x291C, 0x24F5, 0x3F5F, 0x24F6, 0x3F60,
+ 0x24F7, 0x3F61, 0x24F8, 0x3F62, 0x24F9, 0x3F63, 0x24FA, 0x3F64, 0x24FB,
+ 0x3F65, 0x24FC, 0x3F66, 0x24FD, 0x3F67, 0x24FE, 0x3F68, 0x24FF, 0x2907,
+ 0x2500, 0x1D37, 0x2501, 0x1D38, 0x2502, 0x1D39, 0x2503, 0x1D3A, 0x2504,
+ 0x1D3B, 0x2505, 0x1D3C, 0x2506, 0x1D3D, 0x2507, 0x1D3E, 0x2508, 0x1D3F,
+ 0x2509, 0x1D40, 0x250A, 0x1D41, 0x250B, 0x1D42, 0x250C, 0x1D43, 0x250D,
+ 0x1D44, 0x250E, 0x1D45, 0x250F, 0x1D46, 0x2510, 0x1D47, 0x2511, 0x1D48,
+ 0x2512, 0x1D49, 0x2513, 0x1D4A, 0x2514, 0x1D4B, 0x2515, 0x1D4C, 0x2516,
+ 0x1D4D, 0x2517, 0x1D4E, 0x2518, 0x1D4F, 0x2519, 0x1D50, 0x251A, 0x1D51,
+ 0x251B, 0x1D52, 0x251C, 0x1D53, 0x251D, 0x1D54, 0x251E, 0x1D55, 0x251F,
+ 0x1D56, 0x2520, 0x1D57, 0x2521, 0x1D58, 0x2522, 0x1D59, 0x2523, 0x1D5A,
+ 0x2524, 0x1D5B, 0x2525, 0x1D5C, 0x2526, 0x1D5D, 0x2527, 0x1D5E, 0x2528,
+ 0x1D5F, 0x2529, 0x1D60, 0x252A, 0x1D61, 0x252B, 0x1D62, 0x252C, 0x1D63,
+ 0x252D, 0x1D64, 0x252E, 0x1D65, 0x252F, 0x1D66, 0x2530, 0x1D67, 0x2531,
+ 0x1D68, 0x2532, 0x1D69, 0x2533, 0x1D6A, 0x2534, 0x1D6B, 0x2535, 0x1D6C,
+ 0x2536, 0x1D6D, 0x2537, 0x1D6E, 0x2538, 0x1D6F, 0x2539, 0x1D70, 0x253A,
+ 0x1D71, 0x253B, 0x1D72, 0x253C, 0x1D73, 0x253D, 0x1D74, 0x253E, 0x1D75,
+ 0x253F, 0x1D76, 0x2540, 0x1D77, 0x2541, 0x1D78, 0x2542, 0x1D79, 0x2543,
+ 0x1D7A, 0x2544, 0x1D7B, 0x2545, 0x1D7C, 0x2546, 0x1D7D, 0x2547, 0x1D7E,
+ 0x2548, 0x1D7F, 0x2549, 0x1D80, 0x254A, 0x1D81, 0x254B, 0x1D82, 0x2550,
+ 0x203B, 0x255E, 0x203C, 0x2561, 0x203E, 0x256A, 0x203D, 0x256D, 0x2037,
+ 0x256E, 0x2038, 0x256F, 0x203A, 0x2570, 0x2039, 0x2571, 0x2045, 0x2572,
+ 0x2046, 0x2573, 0x2047, 0x2581, 0x2026, 0x2582, 0x2027, 0x2583, 0x2028,
+ 0x2584, 0x2029, 0x2585, 0x202A, 0x2586, 0x202B, 0x2587, 0x202C, 0x2588,
+ 0x202D, 0x2589, 0x2034, 0x258A, 0x2033, 0x258B, 0x2032, 0x258C, 0x2031,
+ 0x258D, 0x2030, 0x258E, 0x202F, 0x258F, 0x202E, 0x2594, 0x2035, 0x2595,
+ 0x2036, 0x25A0, 0x02D9, 0x25A1, 0x02D8, 0x25A2, 0x1F4F, 0x25AA, 0x2FCF,
+ 0x25AB, 0x2FCD, 0x25B1, 0x3F6B, 0x25B2, 0x02DB, 0x25B3, 0x02DA, 0x25B6,
+ 0x2FA3, 0x25B7, 0x1F4A, 0x25BC, 0x02DD, 0x25BD, 0x02DC, 0x25C0, 0x2FA2,
+ 0x25C1, 0x1F49, 0x25C6, 0x02D7, 0x25C7, 0x02D6, 0x25C9, 0x2012, 0x25CB,
+ 0x02D3, 0x25CC, 0x2906, 0x25CE, 0x02D5, 0x25CF, 0x02D4, 0x25D0, 0x3F92,
+ 0x25D1, 0x3F93, 0x25D2, 0x3F94, 0x25D3, 0x3F95, 0x25E2, 0x203F, 0x25E3,
+ 0x2040, 0x25E4, 0x2042, 0x25E5, 0x2041, 0x25E6, 0x2FDE, 0x25EF, 0x030B,
+ 0x2600, 0x2017, 0x2601, 0x2018, 0x2602, 0x2019, 0x2603, 0x201A, 0x2605,
+ 0x02D2, 0x2606, 0x02D1, 0x260E, 0x1F78, 0x2616, 0x3F69, 0x2617, 0x3F6A,
+ 0x261C, 0x201C, 0x261D, 0x201D, 0x261E, 0x201B, 0x261F, 0x201E, 0x2640,
+ 0x02C2, 0x2642, 0x02C1, 0x2660, 0x2013, 0x2661, 0x1F51, 0x2662, 0x1F53,
+ 0x2663, 0x2015, 0x2664, 0x1F52, 0x2665, 0x2014, 0x2666, 0x2016, 0x2667,
+ 0x1F50, 0x2668, 0x2F42, 0x2669, 0x2F43, 0x266A, 0x0307, 0x266B, 0x3F48,
+ 0x266C, 0x2F44, 0x266D, 0x0306, 0x266E, 0x3F47, 0x266F, 0x0305, 0x2672,
+ 0x3FBA, 0x2673, 0x3FBB, 0x2674, 0x3FBC, 0x2675, 0x3FBD, 0x2676, 0x3FBE,
+ 0x2677, 0x3FBF, 0x2678, 0x3FC0, 0x2679, 0x3FC1, 0x267A, 0x3FC2, 0x267B,
+ 0x3FC3, 0x267C, 0x3FC4, 0x267D, 0x3FC5, 0x26A0, 0x2FA0, 0x2702, 0x2F90,
+ 0x2713, 0x3F8E, 0x271A, 0x2FD1, 0x273F, 0x2FC5, 0x2740, 0x2FC4, 0x2756,
+ 0x2FE3, 0x2776, 0x205E, 0x2777, 0x205F, 0x2778, 0x2060, 0x2779, 0x2061,
+ 0x277A, 0x2062, 0x277B, 0x2063, 0x277C, 0x2064, 0x277D, 0x2065, 0x277E,
+ 0x2066, 0x277F, 0x2912, 0x27A1, 0x200E, 0x2934, 0x3F49, 0x2935, 0x3F4A,
+ 0x29BF, 0x3F4B, 0x29FA, 0x3F4F, 0x29FB, 0x3F50, 0x2B05, 0x200F, 0x2B06,
+ 0x2010, 0x2B07, 0x2011, 0x2E83, 0x37E1, 0x2E85, 0x3620, 0x2E87, 0x3719,
+ 0x2E89, 0x3814, 0x2E8B, 0x371E, 0x2E8C, 0x3609, 0x2E8D, 0x360A, 0x2E8E,
+ 0x1071, 0x2E8F, 0x388C, 0x2E90, 0x1226, 0x2E92, 0x0EB2, 0x2E93, 0x1283,
+ 0x2E94, 0x12AB, 0x2E95, 0x3C1F, 0x2E96, 0x38C2, 0x2E97, 0x361C, 0x2E98,
+ 0x38E1, 0x2E99, 0x13C3, 0x2E9B, 0x13E1, 0x2E9E, 0x45E5, 0x2E9F, 0x0E3C,
+ 0x2EA0, 0x0EBD, 0x2EA1, 0x3961, 0x2EA2, 0x3962, 0x2EA3, 0x399D, 0x2EA4,
+ 0x3C26, 0x2EA6, 0x374D, 0x2EA8, 0x39BC, 0x2EA9, 0x35A1, 0x2EAA, 0x36AB,
+ 0x2EAB, 0x3A97, 0x2EAC, 0x4ABA, 0x2EAD, 0x3A39, 0x2EAE, 0x3662, 0x2EB1,
+ 0x3A98, 0x2EB2, 0x3A97, 0x2EB3, 0x376D, 0x2EB7, 0x36FE, 0x2EB9, 0x3713,
+ 0x2EBC, 0x35B3, 0x2EBD, 0x354E, 0x2EBE, 0x3775, 0x2EBF, 0x3776, 0x2EC0,
+ 0x3777, 0x2EC1, 0x078B, 0x2EC2, 0x3B0A, 0x2EC3, 0x362E, 0x2EC4, 0x0A62,
+ 0x2EC6, 0x3572, 0x2ECA, 0x364A, 0x2ECC, 0x3C2B, 0x2ECD, 0x3B50, 0x2ECF,
+ 0x3B9E, 0x2ED1, 0x0BD5, 0x2ED2, 0x3B97, 0x2ED6, 0x3B9E, 0x2ED7, 0x354D,
+ 0x2ED8, 0x0A68, 0x2EDD, 0x3617, 0x2EDE, 0x3619, 0x2EDF, 0x3618, 0x2EE4,
+ 0x064E, 0x2EE8, 0x0D34, 0x2EE9, 0x052B, 0x2EEB, 0x0A6A, 0x2EED, 0x08C3,
+ 0x2EEF, 0x0F7D, 0x2EF2, 0x064F, 0x2F00, 0x04B0, 0x2F01, 0x20B3, 0x2F02,
+ 0x0FFF, 0x2F03, 0x1001, 0x2F04, 0x0535, 0x2F05, 0x1006, 0x2F06, 0x0CCB,
+ 0x2F07, 0x100E, 0x2F08, 0x0A13, 0x2F09, 0x1070, 0x2F0A, 0x0CD6, 0x2F0B,
+ 0x0D40, 0x2F0C, 0x107B, 0x2F0D, 0x1083, 0x2F0E, 0x1089, 0x2F0F, 0x1093,
+ 0x2F10, 0x1098, 0x2F11, 0x0C5B, 0x2F12, 0x0F97, 0x2F13, 0x10C6, 0x2F14,
+ 0x10CD, 0x2F15, 0x10CE, 0x2F16, 0x10D3, 0x2F17, 0x0947, 0x2F18, 0x0E7C,
+ 0x2F19, 0x10DC, 0x2F1A, 0x10E1, 0x2F1B, 0x10E8, 0x2F1C, 0x0EA2, 0x2F1D,
+ 0x07B1, 0x2F1E, 0x116B, 0x2F1F, 0x0C54, 0x2F20, 0x089C, 0x2F21, 0x11BA,
+ 0x2F22, 0x11BB, 0x2F23, 0x0F26, 0x2F24, 0x0B47, 0x2F25, 0x0981, 0x2F26,
+ 0x08A0, 0x2F27, 0x120E, 0x2F28, 0x0A47, 0x2F29, 0x0996, 0x2F2A, 0x1226,
+ 0x2F2B, 0x1228, 0x2F2C, 0x1232, 0x2F2D, 0x0881, 0x2F2E, 0x126C, 0x2F2F,
+ 0x07BB, 0x2F30, 0x077E, 0x2F31, 0x06CA, 0x2F32, 0x05EF, 0x2F33, 0x1283,
+ 0x2F34, 0x1285, 0x2F35, 0x1299, 0x2F36, 0x129B, 0x2F37, 0x12A0, 0x2F38,
+ 0x0677, 0x2F39, 0x38B9, 0x2F3A, 0x12AF, 0x2F3B, 0x12B1, 0x2F3C, 0x09FA,
+ 0x2F3D, 0x1342, 0x2F3E, 0x0781, 0x2F3F, 0x0916, 0x2F40, 0x08A7, 0x2F41,
+ 0x13C2, 0x2F42, 0x0E08, 0x2F43, 0x0C47, 0x2F44, 0x06CC, 0x2F45, 0x0E4D,
+ 0x2F46, 0x13E0, 0x2F47, 0x0CD4, 0x2F48, 0x140C, 0x2F49, 0x0744, 0x2F4A,
+ 0x0EE6, 0x2F4B, 0x073D, 0x2F4C, 0x08AD, 0x2F4D, 0x14E5, 0x2F4E, 0x14F4,
+ 0x2F4F, 0x14F8, 0x2F50, 0x0D7A, 0x2F51, 0x0EDF, 0x2F52, 0x08AF, 0x2F53,
+ 0x1502, 0x2F54, 0x0A2B, 0x2F55, 0x0550, 0x2F56, 0x0BFA, 0x2F57, 0x0DD5,
+ 0x2F58, 0x15E4, 0x2F59, 0x15E6, 0x2F5A, 0x0E22, 0x2F5B, 0x0567, 0x2F5C,
+ 0x0687, 0x2F5D, 0x0758, 0x2F5E, 0x0770, 0x2F5F, 0x06C4, 0x2F60, 0x04DD,
+ 0x2F61, 0x05E0, 0x2F62, 0x0601, 0x2F63, 0x0A5C, 0x2F64, 0x0F3B, 0x2F65,
+ 0x0C3E, 0x2F66, 0x0D97, 0x2F67, 0x3A00, 0x2F68, 0x1697, 0x2F69, 0x0D28,
+ 0x2F6A, 0x0D7D, 0x2F6B, 0x087C, 0x2F6C, 0x0EE8, 0x2F6D, 0x0EC3, 0x2F6E,
+ 0x0EFC, 0x2F6F, 0x0A74, 0x2F70, 0x08D4, 0x2F71, 0x3A41, 0x2F72, 0x0553,
+ 0x2F73, 0x0740, 0x2F74, 0x0F71, 0x2F75, 0x0B9B, 0x2F76, 0x0E16, 0x2F77,
+ 0x08B3, 0x2F78, 0x0608, 0x2F79, 0x1813, 0x2F7A, 0x0F3D, 0x2F7B, 0x04CB,
+ 0x2F7C, 0x0FDD, 0x2F7D, 0x08D5, 0x2F7E, 0x183D, 0x2F7F, 0x08D6, 0x2F80,
+ 0x1853, 0x2F81, 0x0CD1, 0x2F82, 0x0A09, 0x2F83, 0x08D7, 0x2F84, 0x08B8,
+ 0x2F85, 0x04D3, 0x2F86, 0x0A89, 0x2F87, 0x0AA6, 0x2F88, 0x0938, 0x2F89,
+ 0x0821, 0x2F8A, 0x09ED, 0x2F8B, 0x18B2, 0x2F8C, 0x194F, 0x2F8D, 0x0BAC,
+ 0x2F8E, 0x0742, 0x2F8F, 0x07E6, 0x2F90, 0x04A5, 0x2F91, 0x19EB, 0x2F92,
+ 0x075F, 0x2F93, 0x05AF, 0x2F94, 0x0774, 0x2F95, 0x0B69, 0x2F96, 0x0C7E,
+ 0x2F97, 0x1A56, 0x2F98, 0x1A59, 0x2F99, 0x058B, 0x2F9A, 0x0A7A, 0x2F9B,
+ 0x0AF8, 0x2F9C, 0x0B0D, 0x2F9D, 0x0A0E, 0x2F9E, 0x0902, 0x2F9F, 0x0A0F,
+ 0x2FA0, 0x0B62, 0x2FA1, 0x3B4F, 0x2FA2, 0x0F22, 0x2FA3, 0x0CAB, 0x2FA4,
+ 0x0D64, 0x2FA5, 0x0F6C, 0x2FA6, 0x06DA, 0x2FA7, 0x0BD5, 0x2FA8, 0x0EF3,
+ 0x2FA9, 0x0DDE, 0x2FAA, 0x1BC9, 0x2FAB, 0x1BCB, 0x2FAC, 0x04CD, 0x2FAD,
+ 0x21F7, 0x2FAE, 0x0D87, 0x2FAF, 0x0ED8, 0x2FB0, 0x05B5, 0x2FB1, 0x1C03,
+ 0x2FB2, 0x1C05, 0x2FB3, 0x053B, 0x2FB4, 0x0E17, 0x2FB5, 0x0DE9, 0x2FB6,
+ 0x0D88, 0x2FB7, 0x09EF, 0x2FB8, 0x091F, 0x2FB9, 0x07F3, 0x2FBA, 0x0D05,
+ 0x2FBB, 0x080E, 0x2FBC, 0x07F4, 0x2FBD, 0x1C6C, 0x2FBE, 0x1C7D, 0x2FBF,
+ 0x1C83, 0x2FC0, 0x1C84, 0x2FC1, 0x064E, 0x2FC2, 0x0695, 0x2FC3, 0x0BD7,
+ 0x2FC4, 0x1CF6, 0x2FC5, 0x08DB, 0x2FC6, 0x1D01, 0x2FC7, 0x0E91, 0x2FC8,
+ 0x340B, 0x2FC9, 0x066A, 0x2FCA, 0x0807, 0x2FCB, 0x1D16, 0x2FCC, 0x1D19,
+ 0x2FCD, 0x0C1E, 0x2FCE, 0x0791, 0x2FCF, 0x0ACF, 0x2FD0, 0x0D93, 0x2FD1,
+ 0x1D21, 0x2FD2, 0x1D22, 0x2FD3, 0x0F7E, 0x2FD4, 0x1D30, 0x2FD5, 0x1D31,
+ 0x3000, 0x0279, 0x3001, 0x027A, 0x3002, 0x027B, 0x3003, 0x028F, 0x3004,
+ 0x2074, 0x3005, 0x0291, 0x3006, 0x0292, 0x3007, 0x0293, 0x3008, 0x02AA,
+ 0x3009, 0x02AB, 0x300A, 0x02AC, 0x300B, 0x02AD, 0x300C, 0x02AE, 0x300D,
+ 0x02AF, 0x300E, 0x02B0, 0x300F, 0x02B1, 0x3010, 0x02B2, 0x3011, 0x02B3,
+ 0x3012, 0x02DF, 0x3013, 0x02E4, 0x3014, 0x02A4, 0x3015, 0x02A5, 0x3016,
+ 0x3F45, 0x3017, 0x3F46, 0x3018, 0x2F61, 0x3019, 0x2F62, 0x301C, 0x0299,
+ 0x301D, 0x1DB8, 0x301F, 0x1DB9, 0x3020, 0x1F7A, 0x3030, 0x2FBA, 0x3033,
+ 0x2F4C, 0x3034, 0x2F4D, 0x3035, 0x2F4E, 0x3036, 0x1F79, 0x303B, 0x2F4A,
+ 0x303C, 0x3F42, 0x303D, 0x2F93, 0x3041, 0x034A, 0x3042, 0x034B, 0x3043,
+ 0x034C, 0x3044, 0x034D, 0x3045, 0x034E, 0x3046, 0x034F, 0x3047, 0x0350,
+ 0x3048, 0x0351, 0x3049, 0x0352, 0x304A, 0x0353, 0x304B, 0x0354, 0x304C,
+ 0x0355, 0x304D, 0x0356, 0x304E, 0x0357, 0x304F, 0x0358, 0x3050, 0x0359,
+ 0x3051, 0x035A, 0x3052, 0x035B, 0x3053, 0x035C, 0x3054, 0x035D, 0x3055,
+ 0x035E, 0x3056, 0x035F, 0x3057, 0x0360, 0x3058, 0x0361, 0x3059, 0x0362,
+ 0x305A, 0x0363, 0x305B, 0x0364, 0x305C, 0x0365, 0x305D, 0x0366, 0x305E,
+ 0x0367, 0x305F, 0x0368, 0x3060, 0x0369, 0x3061, 0x036A, 0x3062, 0x036B,
+ 0x3063, 0x036C, 0x3064, 0x036D, 0x3065, 0x036E, 0x3066, 0x036F, 0x3067,
+ 0x0370, 0x3068, 0x0371, 0x3069, 0x0372, 0x306A, 0x0373, 0x306B, 0x0374,
+ 0x306C, 0x0375, 0x306D, 0x0376, 0x306E, 0x0377, 0x306F, 0x0378, 0x3070,
+ 0x0379, 0x3071, 0x037A, 0x3072, 0x037B, 0x3073, 0x037C, 0x3074, 0x037D,
+ 0x3075, 0x037E, 0x3076, 0x037F, 0x3077, 0x0380, 0x3078, 0x0381, 0x3079,
+ 0x0382, 0x307A, 0x0383, 0x307B, 0x0384, 0x307C, 0x0385, 0x307D, 0x0386,
+ 0x307E, 0x0387, 0x307F, 0x0388, 0x3080, 0x0389, 0x3081, 0x038A, 0x3082,
+ 0x038B, 0x3083, 0x038C, 0x3084, 0x038D, 0x3085, 0x038E, 0x3086, 0x038F,
+ 0x3087, 0x0390, 0x3088, 0x0391, 0x3089, 0x0392, 0x308A, 0x0393, 0x308B,
+ 0x0394, 0x308C, 0x0395, 0x308D, 0x0396, 0x308E, 0x0397, 0x308F, 0x0398,
+ 0x3090, 0x0399, 0x3091, 0x039A, 0x3092, 0x039B, 0x3093, 0x039C, 0x3094,
+ 0x1F16, 0x3095, 0x1F17, 0x3096, 0x1F18, 0x3099, 0x3FC6, 0x309A, 0x3FC7,
+ 0x309B, 0x0283, 0x309C, 0x0284, 0x309D, 0x028D, 0x309E, 0x028E, 0x309F,
+ 0x2F95, 0x30A0, 0x3F4D, 0x30A1, 0x039D, 0x30A2, 0x039E, 0x30A3, 0x039F,
+ 0x30A4, 0x03A0, 0x30A5, 0x03A1, 0x30A6, 0x03A2, 0x30A7, 0x03A3, 0x30A8,
+ 0x03A4, 0x30A9, 0x03A5, 0x30AA, 0x03A6, 0x30AB, 0x03A7, 0x30AC, 0x03A8,
+ 0x30AD, 0x03A9, 0x30AE, 0x03AA, 0x30AF, 0x03AB, 0x30B0, 0x03AC, 0x30B1,
+ 0x03AD, 0x30B2, 0x03AE, 0x30B3, 0x03AF, 0x30B4, 0x03B0, 0x30B5, 0x03B1,
+ 0x30B6, 0x03B2, 0x30B7, 0x03B3, 0x30B8, 0x03B4, 0x30B9, 0x03B5, 0x30BA,
+ 0x03B6, 0x30BB, 0x03B7, 0x30BC, 0x03B8, 0x30BD, 0x03B9, 0x30BE, 0x03BA,
+ 0x30BF, 0x03BB, 0x30C0, 0x03BC, 0x30C1, 0x03BD, 0x30C2, 0x03BE, 0x30C3,
+ 0x03BF, 0x30C4, 0x03C0, 0x30C5, 0x03C1, 0x30C6, 0x03C2, 0x30C7, 0x03C3,
+ 0x30C8, 0x03C4, 0x30C9, 0x03C5, 0x30CA, 0x03C6, 0x30CB, 0x03C7, 0x30CC,
+ 0x03C8, 0x30CD, 0x03C9, 0x30CE, 0x03CA, 0x30CF, 0x03CB, 0x30D0, 0x03CC,
+ 0x30D1, 0x03CD, 0x30D2, 0x03CE, 0x30D3, 0x03CF, 0x30D4, 0x03D0, 0x30D5,
+ 0x03D1, 0x30D6, 0x03D2, 0x30D7, 0x03D3, 0x30D8, 0x03D4, 0x30D9, 0x03D5,
+ 0x30DA, 0x03D6, 0x30DB, 0x03D7, 0x30DC, 0x03D8, 0x30DD, 0x03D9, 0x30DE,
+ 0x03DA, 0x30DF, 0x03DB, 0x30E0, 0x03DC, 0x30E1, 0x03DD, 0x30E2, 0x03DE,
+ 0x30E3, 0x03DF, 0x30E4, 0x03E0, 0x30E5, 0x03E1, 0x30E6, 0x03E2, 0x30E7,
+ 0x03E3, 0x30E8, 0x03E4, 0x30E9, 0x03E5, 0x30EA, 0x03E6, 0x30EB, 0x03E7,
+ 0x30EC, 0x03E8, 0x30ED, 0x03E9, 0x30EE, 0x03EA, 0x30EF, 0x03EB, 0x30F0,
+ 0x03EC, 0x30F1, 0x03ED, 0x30F2, 0x03EE, 0x30F3, 0x03EF, 0x30F4, 0x03F0,
+ 0x30F5, 0x03F1, 0x30F6, 0x03F2, 0x30F7, 0x2079, 0x30F8, 0x207A, 0x30F9,
+ 0x207B, 0x30FA, 0x207C, 0x30FB, 0x027E, 0x30FC, 0x0294, 0x30FD, 0x028B,
+ 0x30FE, 0x028C, 0x30FF, 0x3F43, 0x3190, 0x3F9B, 0x3191, 0x3F9C, 0x3192,
+ 0x3F9D, 0x3193, 0x3F9E, 0x3194, 0x3F9F, 0x3195, 0x3FA0, 0x3196, 0x3FA1,
+ 0x3197, 0x3FA2, 0x3198, 0x3FA3, 0x3199, 0x3FA4, 0x319A, 0x3FA5, 0x319B,
+ 0x3FA6, 0x319C, 0x3FA7, 0x319D, 0x3FA8, 0x319E, 0x3FA9, 0x319F, 0x3FAA,
+ 0x31F0, 0x3F6C, 0x31F1, 0x3F6D, 0x31F2, 0x3F6E, 0x31F3, 0x3F6F, 0x31F4,
+ 0x3F70, 0x31F5, 0x3F71, 0x31F6, 0x3F72, 0x31F7, 0x3F73, 0x31F8, 0x3F74,
+ 0x31F9, 0x3F75, 0x31FA, 0x3F77, 0x31FB, 0x3F78, 0x31FC, 0x3F79, 0x31FD,
+ 0x3F7A, 0x31FE, 0x3F7B, 0x31FF, 0x3F7C, 0x3220, 0x278E, 0x3221, 0x278F,
+ 0x3222, 0x2790, 0x3223, 0x2791, 0x3224, 0x2792, 0x3225, 0x2793, 0x3226,
+ 0x2794, 0x3227, 0x2795, 0x3228, 0x2796, 0x3229, 0x2797, 0x322A, 0x2006,
+ 0x322B, 0x2007, 0x322C, 0x2008, 0x322D, 0x2009, 0x322E, 0x200A, 0x322F,
+ 0x200B, 0x3230, 0x2005, 0x3231, 0x1DC2, 0x3232, 0x1DC3, 0x3233, 0x1FCF,
+ 0x3234, 0x1FCD, 0x3235, 0x1FD4, 0x3236, 0x1FD3, 0x3237, 0x200C, 0x3238,
+ 0x1FCE, 0x3239, 0x1DC4, 0x323A, 0x1FD7, 0x323B, 0x1FD5, 0x323C, 0x1FD0,
+ 0x323D, 0x1FCB, 0x323E, 0x1FD2, 0x323F, 0x1FCC, 0x3240, 0x1FD6, 0x3241,
+ 0x200D, 0x3242, 0x1FD1, 0x3243, 0x1FCA, 0x3251, 0x1F9B, 0x3252, 0x1FA6,
+ 0x3253, 0x1FA7, 0x3254, 0x1FA8, 0x3255, 0x1FA9, 0x3256, 0x1FAA, 0x3257,
+ 0x1FAB, 0x3258, 0x1FAC, 0x3259, 0x1FAD, 0x325A, 0x1FAE, 0x325B, 0x1FAF,
+ 0x325C, 0x2804, 0x325D, 0x2805, 0x325E, 0x2806, 0x325F, 0x2807, 0x3280,
+ 0x28DD, 0x3281, 0x28DE, 0x3282, 0x28DF, 0x3283, 0x28E0, 0x3284, 0x28E1,
+ 0x3285, 0x28E2, 0x3286, 0x28E3, 0x3287, 0x28E4, 0x3288, 0x28E5, 0x3289,
+ 0x28E6, 0x328A, 0x28E8, 0x328B, 0x28E9, 0x328C, 0x28EA, 0x328D, 0x28EB,
+ 0x328E, 0x28EC, 0x328F, 0x28ED, 0x3290, 0x28E7, 0x3291, 0x1FE1, 0x3292,
+ 0x1FE0, 0x3293, 0x1FE2, 0x3294, 0x1FDC, 0x3295, 0x28FF, 0x3296, 0x1FE5,
+ 0x3297, 0x28FC, 0x3298, 0x1FDE, 0x3299, 0x201F, 0x329A, 0x28F9, 0x329B,
+ 0x28F8, 0x329C, 0x28FE, 0x329D, 0x207F, 0x329E, 0x1FFF, 0x329F, 0x28EF,
+ 0x32A0, 0x28F6, 0x32A1, 0x28F7, 0x32A2, 0x28FB, 0x32A3, 0x28FA, 0x32A4,
+ 0x1DBD, 0x32A5, 0x1DBE, 0x32A6, 0x1DBF, 0x32A7, 0x1DC0, 0x32A8, 0x1DC1,
+ 0x32A9, 0x1FDA, 0x32AA, 0x1FDD, 0x32AB, 0x1FDF, 0x32AC, 0x1FE3, 0x32AD,
+ 0x1FD9, 0x32AE, 0x1FE4, 0x32AF, 0x1FDB, 0x32B0, 0x1FD8, 0x32B1, 0x2808,
+ 0x32B2, 0x2809, 0x32B3, 0x280A, 0x32B4, 0x280B, 0x32B5, 0x280C, 0x32B6,
+ 0x280D, 0x32B7, 0x280E, 0x32B8, 0x280F, 0x32B9, 0x2810, 0x32BA, 0x2811,
+ 0x32BB, 0x2812, 0x32BC, 0x2813, 0x32BD, 0x2814, 0x32BE, 0x2815, 0x32BF,
+ 0x2816, 0x32D0, 0x28AD, 0x32D1, 0x28AE, 0x32D2, 0x28AF, 0x32D3, 0x28B0,
+ 0x32D4, 0x28B1, 0x32D5, 0x28B2, 0x32D6, 0x28B3, 0x32D7, 0x28B4, 0x32D8,
+ 0x28B5, 0x32D9, 0x28B6, 0x32DA, 0x28B7, 0x32DB, 0x28B8, 0x32DC, 0x28B9,
+ 0x32DD, 0x28BA, 0x32DE, 0x28BB, 0x32DF, 0x28BC, 0x32E0, 0x28BD, 0x32E1,
+ 0x28BE, 0x32E2, 0x28BF, 0x32E3, 0x28C0, 0x32E4, 0x28C1, 0x32E5, 0x28C2,
+ 0x32E6, 0x28C3, 0x32E7, 0x28C4, 0x32E8, 0x28C5, 0x32E9, 0x28C6, 0x32EA,
+ 0x28C7, 0x32EB, 0x28C8, 0x32EC, 0x28C9, 0x32ED, 0x28CA, 0x32EE, 0x28CB,
+ 0x32EF, 0x28CC, 0x32F0, 0x28CD, 0x32F1, 0x28CE, 0x32F2, 0x28CF, 0x32F3,
+ 0x28D0, 0x32F4, 0x28D1, 0x32F5, 0x28D2, 0x32F6, 0x28D3, 0x32F7, 0x28D4,
+ 0x32F8, 0x28D5, 0x32F9, 0x28D6, 0x32FA, 0x28D7, 0x32FB, 0x28D8, 0x32FC,
+ 0x28D9, 0x32FD, 0x28DA, 0x32FE, 0x28DB, 0x3300, 0x1F70, 0x3301, 0x2E62,
+ 0x3302, 0x2E63, 0x3303, 0x1F6A, 0x3304, 0x2E64, 0x3305, 0x1FF7, 0x3306,
+ 0x2E65, 0x3307, 0x2E69, 0x3308, 0x2E67, 0x3309, 0x2E6C, 0x330A, 0x2E6A,
+ 0x330B, 0x2E6E, 0x330C, 0x2E70, 0x330D, 0x1DAB, 0x330E, 0x2E71, 0x330F,
+ 0x2E72, 0x3310, 0x2E73, 0x3311, 0x2E74, 0x3312, 0x2E75, 0x3313, 0x2E76,
+ 0x3314, 0x1DA2, 0x3315, 0x1F69, 0x3316, 0x1F67, 0x3317, 0x2E78, 0x3318,
+ 0x1F68, 0x3319, 0x2E7A, 0x331A, 0x2E7C, 0x331B, 0x2E7D, 0x331C, 0x2E7E,
+ 0x331D, 0x2E7F, 0x331E, 0x1F73, 0x331F, 0x2E80, 0x3320, 0x2E81, 0x3321,
+ 0x2E82, 0x3322, 0x1F66, 0x3323, 0x1F6B, 0x3324, 0x2E83, 0x3325, 0x2E85,
+ 0x3326, 0x1DAC, 0x3327, 0x1DA6, 0x3328, 0x2E88, 0x3329, 0x2E89, 0x332A,
+ 0x1F74, 0x332B, 0x1DAE, 0x332D, 0x2E8B, 0x332E, 0x2E8E, 0x332F, 0x2E8F,
+ 0x3330, 0x2E90, 0x3331, 0x1F71, 0x3332, 0x2E91, 0x3333, 0x2087, 0x3334,
+ 0x2E94, 0x3335, 0x2E95, 0x3336, 0x1DA8, 0x3337, 0x2E9A, 0x3338, 0x2E9C,
+ 0x3339, 0x1F6E, 0x333A, 0x2E9D, 0x333B, 0x1F6F, 0x333C, 0x2E96, 0x333D,
+ 0x2E9E, 0x333E, 0x2EA0, 0x333F, 0x2EA1, 0x3340, 0x2EA2, 0x3341, 0x2E9F,
+ 0x3342, 0x1F6D, 0x3343, 0x2EA3, 0x3344, 0x2EA4, 0x3345, 0x2EA5, 0x3346,
+ 0x2EA6, 0x3347, 0x1F72, 0x3348, 0x2EA7, 0x3349, 0x1DA1, 0x334A, 0x1DAF,
+ 0x334B, 0x2EA8, 0x334C, 0x2EA9, 0x334D, 0x1DA4, 0x334E, 0x2088, 0x334F,
+ 0x2EAA, 0x3350, 0x2EAB, 0x3351, 0x1DA9, 0x3352, 0x2EAE, 0x3353, 0x2EB2,
+ 0x3354, 0x2EAF, 0x3355, 0x2EB3, 0x3356, 0x2EB4, 0x3357, 0x1F6C, 0x3371,
+ 0x2E55, 0x337B, 0x2083, 0x337C, 0x1DC7, 0x337D, 0x1DC6, 0x337E, 0x1DC5,
+ 0x337F, 0x1F76, 0x3385, 0x1F5F, 0x3386, 0x1F60, 0x3387, 0x1F61, 0x3388,
+ 0x2000, 0x3389, 0x2001, 0x338D, 0x2E58, 0x338E, 0x1DB4, 0x338F, 0x1DB5,
+ 0x3390, 0x1F63, 0x3396, 0x1F65, 0x3397, 0x1F58, 0x3398, 0x1F5A, 0x339B,
+ 0x2E59, 0x339C, 0x1DB1, 0x339D, 0x1DB2, 0x339E, 0x1DB3, 0x339F, 0x1FFA,
+ 0x33A0, 0x1F54, 0x33A1, 0x1DB7, 0x33A2, 0x1F55, 0x33A3, 0x1FFB, 0x33A4,
+ 0x1F56, 0x33A5, 0x1F57, 0x33A6, 0x1FFC, 0x33B0, 0x1F5E, 0x33B1, 0x1F5D,
+ 0x33B2, 0x1F5C, 0x33B3, 0x1F5B, 0x33C2, 0x2E50, 0x33C4, 0x1DB6, 0x33C8,
+ 0x2002, 0x33CB, 0x1F62, 0x33CC, 0x1FF6, 0x33CD, 0x1DBB, 0x33D4, 0x1F64,
+ 0x33D7, 0x2E5D, 0x33D8, 0x2E5E, 0x33DA, 0x2E4B, 0x3402, 0x3582, 0x3405,
+ 0x3C1B, 0x3406, 0x435A, 0x3427, 0x3656, 0x342C, 0x435E, 0x342E, 0x3788,
+ 0x3468, 0x36DF, 0x346A, 0x4375, 0x3488, 0x3C52, 0x3492, 0x438E, 0x34B5,
+ 0x4199, 0x34BC, 0x4397, 0x34C1, 0x47D0, 0x34C7, 0x439B, 0x34DB, 0x3C41,
+ 0x351F, 0x3629, 0x353E, 0x371E, 0x355D, 0x43BD, 0x355E, 0x43BE, 0x3563,
+ 0x43C0, 0x356E, 0x43C4, 0x35A6, 0x43D9, 0x35A8, 0x43DB, 0x35C5, 0x43E1,
+ 0x35DA, 0x43EA, 0x35DE, 0x4E63, 0x35F4, 0x43F3, 0x3605, 0x43FA, 0x3614,
+ 0x4ABB, 0x364A, 0x4421, 0x3691, 0x4441, 0x3696, 0x4445, 0x3699, 0x4443,
+ 0x36CF, 0x4456, 0x3761, 0x4478, 0x3762, 0x4479, 0x376B, 0x447D, 0x376C,
+ 0x447C, 0x3775, 0x4480, 0x378D, 0x361A, 0x37C1, 0x448E, 0x37E2, 0x372B,
+ 0x37E8, 0x44A2, 0x37F4, 0x44A5, 0x37FD, 0x44A8, 0x3800, 0x44AA, 0x382F,
+ 0x44B4, 0x3836, 0x44B5, 0x3840, 0x44B6, 0x385C, 0x44BA, 0x3861, 0x44BC,
+ 0x38A1, 0x4ECB, 0x38AD, 0x4ABC, 0x38FA, 0x361C, 0x3917, 0x44D9, 0x391A,
+ 0x44DC, 0x396F, 0x44EB, 0x39A4, 0x4E9A, 0x39B8, 0x4E9B, 0x3A5C, 0x4E9F,
+ 0x3A6E, 0x4531, 0x3A73, 0x4534, 0x3A85, 0x4EAE, 0x3AC4, 0x4EA7, 0x3ACB,
+ 0x4EA8, 0x3AD6, 0x4543, 0x3AD7, 0x455E, 0x3AEA, 0x454D, 0x3AF3, 0x3C40,
+ 0x3B0E, 0x4558, 0x3B1A, 0x455C, 0x3B1C, 0x455D, 0x3B22, 0x3C49, 0x3B6D,
+ 0x458C, 0x3B77, 0x4585, 0x3B87, 0x45A2, 0x3B88, 0x368D, 0x3B8D, 0x45A4,
+ 0x3BA4, 0x45AA, 0x3BB6, 0x420E, 0x3BC3, 0x420F, 0x3BCD, 0x45B8, 0x3BF0,
+ 0x45C9, 0x3BF3, 0x4EB7, 0x3C0F, 0x4217, 0x3C26, 0x45DF, 0x3CC3, 0x45FC,
+ 0x3CD2, 0x4601, 0x3D11, 0x4625, 0x3D1E, 0x4630, 0x3D31, 0x4EBE, 0x3D4E,
+ 0x1DE7, 0x3D64, 0x464A, 0x3D9A, 0x4658, 0x3DC0, 0x466A, 0x3DCC, 0x4ABD,
+ 0x3DD4, 0x466F, 0x3E05, 0x467B, 0x3E3F, 0x4248, 0x3E40, 0x4ECA, 0x3E60,
+ 0x468B, 0x3E66, 0x468D, 0x3E68, 0x468E, 0x3E83, 0x4695, 0x3E8A, 0x3C43,
+ 0x3E94, 0x469B, 0x3EDA, 0x3C48, 0x3F57, 0x46CB, 0x3F72, 0x4258, 0x3F75,
+ 0x46D9, 0x3F77, 0x46DB, 0x3FAE, 0x46ED, 0x3FB1, 0x3754, 0x3FC9, 0x46F8,
+ 0x3FD7, 0x46FD, 0x3FDC, 0x4ABE, 0x4039, 0x470F, 0x4058, 0x4716, 0x4093,
+ 0x3C4C, 0x4103, 0x3C4F, 0x4105, 0x473B, 0x4148, 0x4747, 0x414F, 0x474A,
+ 0x4163, 0x474E, 0x41B4, 0x475D, 0x41BF, 0x4760, 0x41E6, 0x476B, 0x41EE,
+ 0x476F, 0x41F3, 0x476C, 0x4207, 0x4776, 0x420E, 0x4779, 0x4264, 0x3760,
+ 0x4293, 0x3C50, 0x42C6, 0x479F, 0x42D6, 0x47AA, 0x42DD, 0x47AE, 0x4302,
+ 0x47BC, 0x432B, 0x47C9, 0x4343, 0x47CB, 0x43EE, 0x47F7, 0x43F0, 0x47FA,
+ 0x4408, 0x4800, 0x440C, 0x3C42, 0x4417, 0x4802, 0x441C, 0x4803, 0x4422,
+ 0x4805, 0x4453, 0x3773, 0x445B, 0x42A4, 0x4476, 0x481C, 0x447A, 0x481D,
+ 0x4491, 0x4823, 0x44B3, 0x483E, 0x44BE, 0x483C, 0x44D4, 0x483D, 0x4508,
+ 0x485C, 0x450D, 0x4858, 0x4525, 0x377E, 0x4543, 0x486C, 0x457A, 0x3C4B,
+ 0x459D, 0x42D4, 0x45B8, 0x48A0, 0x45BE, 0x4ABF, 0x45E5, 0x48BA, 0x45EA,
+ 0x42D9, 0x460F, 0x48CA, 0x4610, 0x4AC0, 0x4641, 0x48D8, 0x4665, 0x3C4E,
+ 0x46A1, 0x48E9, 0x46AE, 0x3C51, 0x46AF, 0x48ED, 0x470C, 0x4902, 0x471F,
+ 0x4EFB, 0x4764, 0x4918, 0x47E6, 0x3790, 0x47FD, 0x4924, 0x4816, 0x492E,
+ 0x481E, 0x4F01, 0x4844, 0x42F5, 0x484E, 0x493A, 0x48B5, 0x495B, 0x49B0,
+ 0x431F, 0x49E7, 0x49D2, 0x49FA, 0x49D6, 0x4A04, 0x49DB, 0x4A29, 0x49DE,
+ 0x4ABC, 0x49F6, 0x4B38, 0x35DF, 0x4B3B, 0x4A0E, 0x4B7E, 0x4AC1, 0x4BC2,
+ 0x4A33, 0x4BCA, 0x4A35, 0x4BD2, 0x4A37, 0x4BE8, 0x3C46, 0x4C17, 0x4334,
+ 0x4C20, 0x4A48, 0x4C38, 0x4AC2, 0x4CC4, 0x4A84, 0x4CD1, 0x4A87, 0x4CE1,
+ 0x4AC3, 0x4D07, 0x4A9B, 0x4D77, 0x4AAB, 0x4E00, 0x04B0, 0x4E01, 0x0BB8,
+ 0x4E02, 0x4352, 0x4E03, 0x08E3, 0x4E04, 0x37D8, 0x4E05, 0x37D9, 0x4E07,
+ 0x0EAA, 0x4E08, 0x09CE, 0x4E09, 0x087E, 0x4E0A, 0x09CD, 0x4E0B, 0x053C,
+ 0x4E0C, 0x4AC4, 0x4E0D, 0x0DC6, 0x4E0E, 0x0F29, 0x4E0F, 0x4353, 0x4E10,
+ 0x0FFB, 0x4E11, 0x04D1, 0x4E12, 0x4354, 0x4E14, 0x05CC, 0x4E15, 0x0FFC,
+ 0x4E16, 0x0A48, 0x4E17, 0x10D7, 0x4E18, 0x0670, 0x4E19, 0x0E0A, 0x4E1E,
+ 0x09CF, 0x4E1F, 0x37DA, 0x4E21, 0x0F86, 0x4E23, 0x4AC5, 0x4E24, 0x4AC6,
+ 0x4E26, 0x0E12, 0x4E28, 0x20B3, 0x4E29, 0x4355, 0x4E2A, 0x0FFD, 0x4E2B,
+ 0x37DB, 0x4E2C, 0x374D, 0x4E2D, 0x0BA4, 0x4E2E, 0x4356, 0x4E2F, 0x37DC,
+ 0x4E30, 0x37DD, 0x4E31, 0x0FFE, 0x4E32, 0x06F2, 0x4E36, 0x0FFF, 0x4E37,
+ 0x369D, 0x4E38, 0x0619, 0x4E39, 0x0B6E, 0x4E3B, 0x0913, 0x4E3C, 0x1000,
+ 0x4E3F, 0x1001, 0x4E40, 0x37DE, 0x4E41, 0x37DF, 0x4E42, 0x1002, 0x4E43,
+ 0x0CEB, 0x4E44, 0x37E0, 0x4E45, 0x0671, 0x4E47, 0x4357, 0x4E48, 0x372E,
+ 0x4E4B, 0x0CED, 0x4E4D, 0x0CBB, 0x4E4E, 0x0777, 0x4E4F, 0x0E61, 0x4E51,
+ 0x4359, 0x4E55, 0x1950, 0x4E56, 0x1003, 0x4E57, 0x09D0, 0x4E58, 0x1004,
+ 0x4E59, 0x0535, 0x4E5A, 0x37E1, 0x4E5D, 0x06DD, 0x4E5E, 0x07A4, 0x4E5F,
+ 0x0EF5, 0x4E62, 0x1233, 0x4E69, 0x435C, 0x4E71, 0x0F5A, 0x4E73, 0x0CD5,
+ 0x4E79, 0x4AC7, 0x4E7E, 0x05E1, 0x4E7F, 0x37E2, 0x4E80, 0x064F, 0x4E82,
+ 0x1005, 0x4E85, 0x1006, 0x4E86, 0x0F83, 0x4E88, 0x0F27, 0x4E89, 0x0AEA,
+ 0x4E8A, 0x1008, 0x4E8B, 0x08C4, 0x4E8C, 0x0CCB, 0x4E8D, 0x37E3, 0x4E8E,
+ 0x100B, 0x4E91, 0x04E0, 0x4E92, 0x0793, 0x4E94, 0x0792, 0x4E95, 0x04AA,
+ 0x4E96, 0x37E4, 0x4E98, 0x0FF1, 0x4E99, 0x0FF0, 0x4E9B, 0x0823, 0x4E9C,
+ 0x0465, 0x4E9D, 0x435D, 0x4E9E, 0x100C, 0x4E9F, 0x100D, 0x4EA0, 0x100E,
+ 0x4EA1, 0x0E62, 0x4EA2, 0x100F, 0x4EA4, 0x07A6, 0x4EA5, 0x04AB, 0x4EA6,
+ 0x0EA0, 0x4EA8, 0x0696, 0x4EAB, 0x0697, 0x4EAC, 0x0698, 0x4EAD, 0x0BFE,
+ 0x4EAE, 0x0F84, 0x4EB0, 0x1010, 0x4EB3, 0x1011, 0x4EB6, 0x1012, 0x4EB9,
+ 0x37E5, 0x4EBA, 0x0A13, 0x4EBB, 0x3620, 0x4EBC, 0x435F, 0x4EC0, 0x0944,
+ 0x4EC1, 0x0A14, 0x4EC2, 0x1017, 0x4EC3, 0x4360, 0x4EC4, 0x1015, 0x4EC6,
+ 0x1016, 0x4EC7, 0x0672, 0x4EC8, 0x4361, 0x4ECA, 0x0813, 0x4ECB, 0x0570,
+ 0x4ECD, 0x1014, 0x4ECE, 0x1013, 0x4ECF, 0x0DF9, 0x4ED0, 0x37E6, 0x4ED4,
+ 0x0894, 0x4ED5, 0x0893, 0x4ED6, 0x0B1E, 0x4ED7, 0x1018, 0x4ED8, 0x0DC7,
+ 0x4ED9, 0x0A8B, 0x4EDA, 0x4363, 0x4EDD, 0x0290, 0x4EDE, 0x1019, 0x4EDF,
+ 0x101B, 0x4EE0, 0x37E7, 0x4EE1, 0x20B4, 0x4EE3, 0x0B45, 0x4EE4, 0x0FA9,
+ 0x4EE5, 0x048E, 0x4EEB, 0x4362, 0x4EED, 0x101A, 0x4EEE, 0x053E, 0x4EF0,
+ 0x06BC, 0x4EF1, 0x4364, 0x4EF2, 0x0BA5, 0x4EF3, 0x4AC8, 0x4EF5, 0x4365,
+ 0x4EF6, 0x0745, 0x4EF7, 0x101C, 0x4EFB, 0x0CDA, 0x4EFC, 0x20B5, 0x4EFD,
+ 0x37E8, 0x4EFF, 0x37E9, 0x4F00, 0x20B6, 0x4F01, 0x0627, 0x4F03, 0x20B7,
+ 0x4F09, 0x101D, 0x4F0A, 0x048F, 0x4F0B, 0x37EA, 0x4F0C, 0x4AC9, 0x4F0D,
+ 0x0794, 0x4F0E, 0x0628, 0x4F0F, 0x0DEC, 0x4F10, 0x0D46, 0x4F11, 0x0673,
+ 0x4F15, 0x37EB, 0x4F16, 0x4366, 0x4F19, 0x4ACA, 0x4F1A, 0x0571, 0x4F1C,
+ 0x1040, 0x4F1D, 0x0C3B, 0x4F2B, 0x4ACB, 0x4F2E, 0x4ACC, 0x4F2F, 0x0D22,
+ 0x4F30, 0x101F, 0x4F31, 0x4ACD, 0x4F34, 0x0D50, 0x4F36, 0x0FAA, 0x4F37,
+ 0x4368, 0x4F38, 0x09F3, 0x4F39, 0x20B8, 0x4F3A, 0x0895, 0x4F3B, 0x37ED,
+ 0x4F3C, 0x08C5, 0x4F3D, 0x0540, 0x4F3E, 0x4369, 0x4F43, 0x0BED, 0x4F46,
+ 0x0B60, 0x4F47, 0x1023, 0x4F48, 0x418B, 0x4F49, 0x37EE, 0x4F4D, 0x0490,
+ 0x4F4E, 0x0BFF, 0x4F4F, 0x0945, 0x4F50, 0x0824, 0x4F51, 0x0F0E, 0x4F53,
+ 0x0B2E, 0x4F54, 0x37EF, 0x4F55, 0x053F, 0x4F56, 0x20B9, 0x4F57, 0x1022,
+ 0x4F58, 0x436A, 0x4F59, 0x0F28, 0x4F5A, 0x101E, 0x4F5B, 0x1020, 0x4F5C,
+ 0x085E, 0x4F5D, 0x1021, 0x4F5E, 0x11D3, 0x4F5F, 0x418C, 0x4F60, 0x37EC,
+ 0x4F64, 0x4367, 0x4F69, 0x1029, 0x4F6A, 0x418D, 0x4F6C, 0x418E, 0x4F6F,
+ 0x102C, 0x4F70, 0x102A, 0x4F73, 0x0542, 0x4F75, 0x0E0B, 0x4F76, 0x1024,
+ 0x4F77, 0x436C, 0x4F78, 0x436D, 0x4F7A, 0x37F0, 0x4F7B, 0x1028, 0x4F7C,
+ 0x07A7, 0x4F7D, 0x37F1, 0x4F7E, 0x37F2, 0x4F7F, 0x0896, 0x4F82, 0x436E,
+ 0x4F83, 0x05E2, 0x4F84, 0x4ACE, 0x4F85, 0x436F, 0x4F86, 0x102D, 0x4F88,
+ 0x1025, 0x4F8A, 0x20BB, 0x4F8B, 0x0FAB, 0x4F8D, 0x08C6, 0x4F8F, 0x1026,
+ 0x4F91, 0x102B, 0x4F92, 0x20BA, 0x4F94, 0x20BD, 0x4F96, 0x102E, 0x4F97,
+ 0x37F3, 0x4F98, 0x1027, 0x4F9A, 0x20BC, 0x4F9B, 0x0699, 0x4F9D, 0x0491,
+ 0x4F9E, 0x4ACF, 0x4FA0, 0x069A, 0x4FA1, 0x0541, 0x4FAB, 0x11D4, 0x4FAD,
+ 0x0EA7, 0x4FAE, 0x0DE0, 0x4FAF, 0x07A8, 0x4FB2, 0x4371, 0x4FB5, 0x09F5,
+ 0x4FB6, 0x0F7F, 0x4FB7, 0x4AD0, 0x4FBE, 0x37F4, 0x4FBF, 0x0E28, 0x4FC2,
+ 0x070E, 0x4FC3, 0x0B05, 0x4FC4, 0x0564, 0x4FC5, 0x4372, 0x4FC9, 0x20AC,
+ 0x4FCA, 0x095D, 0x4FCB, 0x4373, 0x4FCD, 0x20BE, 0x4FCE, 0x1032, 0x4FCF,
+ 0x37F5, 0x4FD0, 0x1037, 0x4FD1, 0x1035, 0x4FD2, 0x4374, 0x4FD3, 0x3C2F,
+ 0x4FD4, 0x1030, 0x4FD7, 0x0B0F, 0x4FD8, 0x1033, 0x4FDA, 0x1036, 0x4FDB,
+ 0x1034, 0x4FDD, 0x0E2D, 0x4FDF, 0x1031, 0x4FE0, 0x1DEC, 0x4FE1, 0x09F4,
+ 0x4FE3, 0x0EA1, 0x4FE4, 0x1038, 0x4FE5, 0x1039, 0x4FE6, 0x4370, 0x4FEE,
+ 0x092E, 0x4FEF, 0x1046, 0x4FF1, 0x35A3, 0x4FF2, 0x4376, 0x4FF3, 0x0D06,
+ 0x4FF5, 0x0DA8, 0x4FF6, 0x1041, 0x4FF8, 0x0E40, 0x4FFA, 0x0536, 0x4FFD,
+ 0x37F6, 0x4FFE, 0x1045, 0x4FFF, 0x20C1, 0x5000, 0x37F7, 0x5001, 0x37F8,
+ 0x5002, 0x4F4B, 0x5004, 0x4AD1, 0x5005, 0x103F, 0x5006, 0x1048, 0x5009,
+ 0x0AD4, 0x500B, 0x0778, 0x500C, 0x4AD2, 0x500D, 0x0D12, 0x500E, 0x418F,
+ 0x500F, 0x1600, 0x5010, 0x37F9, 0x5011, 0x1047, 0x5012, 0x0C57, 0x5013,
+ 0x4377, 0x5014, 0x103C, 0x5016, 0x07AA, 0x5018, 0x4190, 0x5019, 0x07A9,
+ 0x501A, 0x103A, 0x501B, 0x37FA, 0x501C, 0x4378, 0x501E, 0x20C2, 0x501F,
+ 0x0906, 0x5021, 0x1042, 0x5022, 0x20C0, 0x5023, 0x0E3F, 0x5024, 0x0B8B,
+ 0x5025, 0x103E, 0x5026, 0x0747, 0x5027, 0x37FB, 0x5028, 0x103B, 0x5029,
+ 0x1043, 0x502A, 0x103D, 0x502B, 0x0F99, 0x502C, 0x1044, 0x502D, 0x0FE7,
+ 0x502E, 0x37FC, 0x5036, 0x06DE, 0x5039, 0x0746, 0x503B, 0x3800, 0x5040,
+ 0x20BF, 0x5041, 0x4191, 0x5042, 0x20C5, 0x5043, 0x1049, 0x5046, 0x20C3,
+ 0x5047, 0x104A, 0x5048, 0x104E, 0x5049, 0x0492, 0x504C, 0x4AD3, 0x504E,
+ 0x4379, 0x504F, 0x0E20, 0x5050, 0x104D, 0x5053, 0x437A, 0x5055, 0x104C,
+ 0x5056, 0x1050, 0x5057, 0x37FD, 0x505A, 0x104F, 0x505C, 0x0C00, 0x505F,
+ 0x4AD4, 0x5062, 0x4AD5, 0x5063, 0x437B, 0x5065, 0x0748, 0x5066, 0x37FE,
+ 0x506A, 0x37FF, 0x506C, 0x1051, 0x5070, 0x20C4, 0x5072, 0x08F1, 0x5074,
+ 0x0B06, 0x5075, 0x0C01, 0x5076, 0x06EE, 0x5077, 0x4AD6, 0x5078, 0x1052,
+ 0x507D, 0x0650, 0x5080, 0x1053, 0x5085, 0x1055, 0x5088, 0x437D, 0x508D,
+ 0x0E63, 0x508E, 0x4AD7, 0x508F, 0x3801, 0x5091, 0x073C, 0x5092, 0x437E,
+ 0x5093, 0x437F, 0x5094, 0x20C6, 0x5095, 0x4380, 0x5096, 0x3802, 0x5098,
+ 0x087F, 0x5099, 0x0D8B, 0x509A, 0x1054, 0x509C, 0x3803, 0x509E, 0x4AD8,
+ 0x50A2, 0x4AD9, 0x50A3, 0x437C, 0x50AA, 0x4381, 0x50AC, 0x0835, 0x50AD,
+ 0x0F2D, 0x50B1, 0x4383, 0x50B2, 0x1057, 0x50B3, 0x105A, 0x50B4, 0x1056,
+ 0x50B5, 0x0834, 0x50B7, 0x0987, 0x50BA, 0x4384, 0x50BB, 0x4385, 0x50BE,
+ 0x070F, 0x50C2, 0x105B, 0x50C3, 0x4ADA, 0x50C4, 0x4386, 0x50C5, 0x06C7,
+ 0x50C7, 0x4387, 0x50C9, 0x1058, 0x50CA, 0x1059, 0x50CC, 0x3804, 0x50CD,
+ 0x0C87, 0x50CE, 0x438A, 0x50CF, 0x0AFE, 0x50D0, 0x4193, 0x50D1, 0x069B,
+ 0x50D4, 0x438C, 0x50D5, 0x0E7B, 0x50D6, 0x105C, 0x50D8, 0x20C8, 0x50D9,
+ 0x3C30, 0x50DA, 0x0F85, 0x50DE, 0x105D, 0x50E1, 0x438D, 0x50E3, 0x1060,
+ 0x50E5, 0x105E, 0x50E6, 0x3805, 0x50E7, 0x0AD0, 0x50E8, 0x4ADB, 0x50E9,
+ 0x3806, 0x50ED, 0x105F, 0x50EE, 0x1061, 0x50EF, 0x3807, 0x50F0, 0x3C31,
+ 0x50F1, 0x4ADC, 0x50F2, 0x4192, 0x50F3, 0x4388, 0x50F4, 0x20C7, 0x50F5,
+ 0x1063, 0x50F9, 0x1062, 0x50FB, 0x0E18, 0x50FE, 0x4ADD, 0x5100, 0x0651,
+ 0x5101, 0x1065, 0x5102, 0x1066, 0x5103, 0x4195, 0x5104, 0x052F, 0x5106,
+ 0x4194, 0x5107, 0x4ADE, 0x5108, 0x3808, 0x5109, 0x1064, 0x510B, 0x3809,
+ 0x510C, 0x4ADF, 0x510D, 0x4AE0, 0x510E, 0x4AE1, 0x5110, 0x380A, 0x5112,
+ 0x0920, 0x5114, 0x1069, 0x5115, 0x1068, 0x5116, 0x1067, 0x5117, 0x4390,
+ 0x5118, 0x102F, 0x511A, 0x106A, 0x511B, 0x380B, 0x511E, 0x380C, 0x511F,
+ 0x0988, 0x5121, 0x106B, 0x512A, 0x0F0F, 0x5132, 0x0EE5, 0x5133, 0x4AE2,
+ 0x5135, 0x4196, 0x5137, 0x106D, 0x5138, 0x4AE3, 0x513A, 0x106C, 0x513B,
+ 0x106F, 0x513C, 0x106E, 0x513F, 0x1070, 0x5140, 0x1071, 0x5141, 0x04B8,
+ 0x5143, 0x0769, 0x5144, 0x0711, 0x5145, 0x0946, 0x5146, 0x0BB9, 0x5147,
+ 0x069C, 0x5148, 0x0A8C, 0x5149, 0x07AB, 0x514A, 0x20C9, 0x514B, 0x0800,
+ 0x514C, 0x1073, 0x514D, 0x0ED4, 0x514E, 0x0C40, 0x5150, 0x08C7, 0x5152,
+ 0x1072, 0x5154, 0x1074, 0x5155, 0x4197, 0x5157, 0x4198, 0x515A, 0x0C58,
+ 0x515C, 0x05D3, 0x515F, 0x380D, 0x5160, 0x4392, 0x5162, 0x1075, 0x5164,
+ 0x20CA, 0x5165, 0x0CD6, 0x5167, 0x368E, 0x5168, 0x0AB6, 0x5169, 0x1077,
+ 0x516A, 0x1078, 0x516B, 0x0D40, 0x516C, 0x07AC, 0x516D, 0x0FE1, 0x516E,
+ 0x1079, 0x5171, 0x069E, 0x5173, 0x4394, 0x5174, 0x4AE4, 0x5175, 0x0E0C,
+ 0x5176, 0x0B16, 0x5177, 0x06E9, 0x5178, 0x0C2F, 0x5179, 0x3779, 0x517B,
+ 0x47D9, 0x517C, 0x0749, 0x5180, 0x107A, 0x5182, 0x107B, 0x5183, 0x4395,
+ 0x5184, 0x4AE5, 0x5185, 0x0CBA, 0x5186, 0x0501, 0x5189, 0x107E, 0x518A,
+ 0x086D, 0x518B, 0x4396, 0x518C, 0x107D, 0x518D, 0x0836, 0x518F, 0x107F,
+ 0x5190, 0x185B, 0x5191, 0x1080, 0x5192, 0x0E6F, 0x5193, 0x1081, 0x5195,
+ 0x1082, 0x5196, 0x1083, 0x5197, 0x09D1, 0x5198, 0x4398, 0x5199, 0x08F8,
+ 0x519D, 0x20CB, 0x51A0, 0x05E3, 0x51A1, 0x380E, 0x51A2, 0x1086, 0x51A3,
+ 0x4399, 0x51A4, 0x1084, 0x51A5, 0x0EC9, 0x51A6, 0x1085, 0x51A8, 0x0DCC,
+ 0x51A9, 0x1087, 0x51AA, 0x1088, 0x51AB, 0x1089, 0x51AC, 0x0C59, 0x51AD,
+ 0x439A, 0x51B0, 0x108D, 0x51B1, 0x108B, 0x51B2, 0x108C, 0x51B3, 0x108A,
+ 0x51B4, 0x0853, 0x51B5, 0x108E, 0x51B6, 0x0EF6, 0x51B7, 0x0FAC, 0x51B8,
+ 0x4AE6, 0x51BA, 0x4AE7, 0x51BC, 0x380F, 0x51BD, 0x108F, 0x51BE, 0x20CC,
+ 0x51C3, 0x3C32, 0x51C4, 0x0A4C, 0x51C5, 0x1090, 0x51C6, 0x0964, 0x51C8,
+ 0x4AE8, 0x51C9, 0x1091, 0x51CA, 0x419A, 0x51CB, 0x0BBA, 0x51CC, 0x0F87,
+ 0x51CD, 0x0C5A, 0x51CF, 0x4AE9, 0x51D1, 0x4AEA, 0x51D3, 0x4AEB, 0x51D4,
+ 0x4AEC, 0x51D6, 0x10DA, 0x51D8, 0x4AED, 0x51DB, 0x1092, 0x51DC, 0x205C,
+ 0x51DD, 0x06BD, 0x51DE, 0x4F4C, 0x51DF, 0x4AEE, 0x51E0, 0x1093, 0x51E1,
+ 0x0E8C, 0x51E2, 0x419B, 0x51E6, 0x0972, 0x51E7, 0x0B5C, 0x51E9, 0x1095,
+ 0x51EA, 0x0CBC, 0x51EC, 0x20CD, 0x51ED, 0x1096, 0x51EE, 0x3811, 0x51F0,
+ 0x1097, 0x51F1, 0x058C, 0x51F3, 0x439D, 0x51F4, 0x3812, 0x51F5, 0x1098,
+ 0x51F6, 0x069F, 0x51F8, 0x0CA4, 0x51F9, 0x051C, 0x51FA, 0x095A, 0x51FD,
+ 0x0D35, 0x51FE, 0x1099, 0x5200, 0x0C5B, 0x5201, 0x3813, 0x5202, 0x3814,
+ 0x5203, 0x0A15, 0x5204, 0x109A, 0x5205, 0x4AEF, 0x5206, 0x0DFC, 0x5207,
+ 0x0A7E, 0x5208, 0x05DE, 0x520A, 0x05E5, 0x520B, 0x109B, 0x520E, 0x109D,
+ 0x5211, 0x0710, 0x5212, 0x439E, 0x5213, 0x3815, 0x5214, 0x109C, 0x5215,
+ 0x20CE, 0x5216, 0x439F, 0x5217, 0x0FBB, 0x521D, 0x0973, 0x5224, 0x0D51,
+ 0x5225, 0x0E1C, 0x5226, 0x4AF0, 0x5227, 0x109E, 0x5228, 0x4AF1, 0x5229,
+ 0x0F62, 0x522A, 0x109F, 0x522B, 0x4AF2, 0x522E, 0x10A0, 0x5230, 0x0C78,
+ 0x5231, 0x4AF3, 0x5232, 0x4AF4, 0x5233, 0x10A1, 0x5235, 0x4AF5, 0x5236,
+ 0x0A4D, 0x5237, 0x086E, 0x5238, 0x074A, 0x5239, 0x10A2, 0x523A, 0x0897,
+ 0x523B, 0x0801, 0x523C, 0x4AF6, 0x5243, 0x0C02, 0x5244, 0x10A4, 0x5247,
+ 0x0B07, 0x5249, 0x3816, 0x524A, 0x085F, 0x524B, 0x10A5, 0x524C, 0x10A6,
+ 0x524D, 0x0AB2, 0x524F, 0x10A3, 0x5254, 0x10A8, 0x5255, 0x43A1, 0x5256,
+ 0x0E64, 0x5257, 0x419C, 0x525A, 0x4AF7, 0x525B, 0x07F6, 0x525C, 0x43A2,
+ 0x525D, 0x1E5E, 0x525E, 0x10A7, 0x5260, 0x4AF8, 0x5261, 0x3817, 0x5263,
+ 0x074B, 0x5264, 0x084E, 0x5265, 0x0D23, 0x5266, 0x3818, 0x5269, 0x10AB,
+ 0x526A, 0x10A9, 0x526C, 0x43A3, 0x526E, 0x4AF9, 0x526F, 0x0DED, 0x5270,
+ 0x09D2, 0x5271, 0x10B2, 0x5272, 0x05C2, 0x5273, 0x10AC, 0x5274, 0x10AA,
+ 0x5275, 0x0AD1, 0x5277, 0x43A4, 0x5278, 0x4AFA, 0x5279, 0x4AFB, 0x527D,
+ 0x10AE, 0x527F, 0x10AD, 0x5282, 0x43A6, 0x5283, 0x05A2, 0x5284, 0x43A5,
+ 0x5287, 0x0736, 0x5288, 0x10B3, 0x5289, 0x0F75, 0x528A, 0x4AFC, 0x528C,
+ 0x4AFD, 0x528D, 0x10AF, 0x5291, 0x10B4, 0x5292, 0x10B1, 0x5293, 0x3819,
+ 0x5294, 0x10B0, 0x5298, 0x43A8, 0x529B, 0x0F97, 0x529C, 0x20CF, 0x529F,
+ 0x07AD, 0x52A0, 0x0543, 0x52A3, 0x0FBC, 0x52A4, 0x43AA, 0x52A6, 0x20D0,
+ 0x52A9, 0x097F, 0x52AA, 0x0C52, 0x52AB, 0x07F7, 0x52AC, 0x10B7, 0x52AD,
+ 0x10B8, 0x52AF, 0x217D, 0x52B1, 0x0FAD, 0x52B4, 0x0FD1, 0x52B5, 0x10BA,
+ 0x52B9, 0x07AE, 0x52BA, 0x43AB, 0x52BB, 0x43AC, 0x52BC, 0x10B9, 0x52BE,
+ 0x058D, 0x52C0, 0x20D1, 0x52C1, 0x10BB, 0x52C3, 0x0E84, 0x52C5, 0x0BD8,
+ 0x52C7, 0x0F10, 0x52C8, 0x381A, 0x52C9, 0x0E29, 0x52CA, 0x43AD, 0x52CC,
+ 0x419D, 0x52CD, 0x10BC, 0x52D0, 0x36E8, 0x52D1, 0x43AE, 0x52D2, 0x1BEE,
+ 0x52D5, 0x0C88, 0x52D6, 0x419E, 0x52D7, 0x10BD, 0x52D8, 0x05E6, 0x52D9,
+ 0x0EBF, 0x52DB, 0x20D2, 0x52DD, 0x0989, 0x52DE, 0x10BE, 0x52DF, 0x0E37,
+ 0x52E0, 0x10C2, 0x52E1, 0x4AFE, 0x52E2, 0x0A4E, 0x52E3, 0x10BF, 0x52E4,
+ 0x06C8, 0x52E6, 0x10C0, 0x52E7, 0x05E7, 0x52E9, 0x4AFF, 0x52F0, 0x381B,
+ 0x52F1, 0x4B00, 0x52F2, 0x0704, 0x52F3, 0x10C3, 0x52F5, 0x10C4, 0x52F7,
+ 0x43B0, 0x52F8, 0x10C5, 0x52F9, 0x10C6, 0x52FA, 0x0907, 0x52FB, 0x419F,
+ 0x52FE, 0x07AF, 0x52FF, 0x0EEA, 0x5300, 0x20D3, 0x5301, 0x0EF4, 0x5302,
+ 0x0CCF, 0x5303, 0x4B01, 0x5305, 0x0E41, 0x5306, 0x10C7, 0x5307, 0x4F4D,
+ 0x5308, 0x10C8, 0x530A, 0x381C, 0x530B, 0x381D, 0x530D, 0x10CA, 0x530F,
+ 0x10CC, 0x5310, 0x10CB, 0x5311, 0x4B02, 0x5315, 0x10CD, 0x5316, 0x053D,
+ 0x5317, 0x0E7A, 0x5319, 0x086C, 0x531A, 0x10CE, 0x531C, 0x41A0, 0x531D,
+ 0x0ADB, 0x531F, 0x4B03, 0x5320, 0x098A, 0x5321, 0x06A1, 0x5323, 0x10CF,
+ 0x5324, 0x20D5, 0x532A, 0x0D6F, 0x532D, 0x4B04, 0x532F, 0x10D0, 0x5331,
+ 0x10D1, 0x5332, 0x4B05, 0x5333, 0x10D2, 0x5335, 0x43B1, 0x5338, 0x10D3,
+ 0x5339, 0x0D96, 0x533A, 0x06E0, 0x533B, 0x04A9, 0x533D, 0x4B06, 0x533E,
+ 0x381E, 0x533F, 0x0C97, 0x5340, 0x10D4, 0x5341, 0x0947, 0x5342, 0x43B2,
+ 0x5343, 0x0A8D, 0x5345, 0x10D6, 0x5346, 0x10D5, 0x5347, 0x098B, 0x5348,
+ 0x0795, 0x5349, 0x10D8, 0x534A, 0x0D52, 0x534B, 0x3820, 0x534C, 0x381F,
+ 0x534D, 0x10D9, 0x5351, 0x0D70, 0x5352, 0x0B14, 0x5353, 0x0B4E, 0x5354,
+ 0x06A0, 0x5357, 0x0CC6, 0x5358, 0x0B6F, 0x535A, 0x0D24, 0x535C, 0x0E7C,
+ 0x535E, 0x10DB, 0x5360, 0x0A8E, 0x5361, 0x3821, 0x5363, 0x41A1, 0x5365,
+ 0x4B07, 0x5366, 0x070B, 0x5367, 0x43B5, 0x5369, 0x10DC, 0x536C, 0x3822,
+ 0x536D, 0x4B08, 0x536E, 0x10DD, 0x536F, 0x04CE, 0x5370, 0x04B9, 0x5371,
+ 0x0629, 0x5372, 0x20D6, 0x5373, 0x0B08, 0x5374, 0x066B, 0x5375, 0x0F5B,
+ 0x5377, 0x10E0, 0x5378, 0x0537, 0x5379, 0x4B09, 0x537A, 0x43B6, 0x537B,
+ 0x10DF, 0x537D, 0x3435, 0x537E, 0x4B0A, 0x537F, 0x06A2, 0x5382, 0x10E1,
+ 0x5384, 0x0EFD, 0x5389, 0x37D0, 0x5393, 0x20D7, 0x5394, 0x4B0B, 0x5396,
+ 0x10E2, 0x5398, 0x0F9A, 0x5399, 0x4B0C, 0x539A, 0x07B0, 0x539D, 0x41A2,
+ 0x539F, 0x076A, 0x53A0, 0x10E3, 0x53A4, 0x43B7, 0x53A5, 0x10E5, 0x53A6,
+ 0x10E4, 0x53A8, 0x0A25, 0x53A9, 0x04DB, 0x53AA, 0x4B0D, 0x53AB, 0x3823,
+ 0x53AD, 0x0500, 0x53AE, 0x10E6, 0x53AF, 0x4B0E, 0x53B0, 0x10E7, 0x53B2,
+ 0x20D8, 0x53B3, 0x076B, 0x53B4, 0x43B8, 0x53B6, 0x10E8, 0x53B7, 0x43BA,
+ 0x53BA, 0x4B0F, 0x53BB, 0x0688, 0x53C0, 0x43BB, 0x53C1, 0x4B10, 0x53C2,
+ 0x0880, 0x53C3, 0x10E9, 0x53C4, 0x4B11, 0x53C5, 0x4B12, 0x53C8, 0x0EA2,
+ 0x53C9, 0x0825, 0x53CA, 0x0674, 0x53CB, 0x0F11, 0x53CC, 0x0AD2, 0x53CD,
+ 0x0D53, 0x53CE, 0x0929, 0x53D4, 0x0951, 0x53D5, 0x43BF, 0x53D6, 0x0914,
+ 0x53D7, 0x0921, 0x53D9, 0x0980, 0x53DA, 0x3824, 0x53DB, 0x0D54, 0x53DD,
+ 0x20D9, 0x53DF, 0x10EC, 0x53E0, 0x4B13, 0x53E1, 0x04E5, 0x53E2, 0x0AD3,
+ 0x53E3, 0x07B1, 0x53E4, 0x0779, 0x53E5, 0x06DF, 0x53E6, 0x3825, 0x53E8,
+ 0x10F0, 0x53E9, 0x0B5F, 0x53EA, 0x0B5E, 0x53EB, 0x06A3, 0x53EC, 0x098C,
+ 0x53ED, 0x10F1, 0x53EE, 0x10EF, 0x53EF, 0x0544, 0x53F0, 0x0B46, 0x53F1,
+ 0x08E4, 0x53F2, 0x0899, 0x53F3, 0x04C8, 0x53F4, 0x43C1, 0x53F5, 0x3826,
+ 0x53F6, 0x05CE, 0x53F7, 0x07F8, 0x53F8, 0x0898, 0x53FA, 0x10F2, 0x5401,
+ 0x10F3, 0x5403, 0x0663, 0x5404, 0x05A4, 0x5408, 0x07F9, 0x5409, 0x0662,
+ 0x540A, 0x0BFB, 0x540B, 0x04C7, 0x540C, 0x0C89, 0x540D, 0x0ECA, 0x540E,
+ 0x07B3, 0x540F, 0x0F63, 0x5410, 0x0C41, 0x5411, 0x07B2, 0x5412, 0x41A3,
+ 0x5413, 0x4B14, 0x541B, 0x0705, 0x541D, 0x10FC, 0x541E, 0x368C, 0x541F,
+ 0x06DB, 0x5420, 0x0E78, 0x5424, 0x43C2, 0x5426, 0x0D71, 0x5427, 0x3827,
+ 0x5428, 0x43C3, 0x5429, 0x10FB, 0x542A, 0x4B15, 0x542B, 0x061A, 0x542C,
+ 0x10F6, 0x542D, 0x10F7, 0x542E, 0x10F9, 0x5431, 0x4B16, 0x5433, 0x35C0,
+ 0x5434, 0x4B17, 0x5435, 0x4B18, 0x5436, 0x10FA, 0x5438, 0x0675, 0x5439,
+ 0x0A27, 0x543B, 0x0DFD, 0x543C, 0x10F8, 0x543D, 0x10F4, 0x543E, 0x0797,
+ 0x543F, 0x35CF, 0x5440, 0x10F5, 0x5442, 0x0FCA, 0x5443, 0x43C5, 0x5446,
+ 0x0E42, 0x5448, 0x0C04, 0x5449, 0x0796, 0x544A, 0x0802, 0x544C, 0x4B19,
+ 0x544D, 0x3828, 0x544E, 0x10FD, 0x5451, 0x0CB5, 0x5455, 0x3723, 0x545F,
+ 0x1101, 0x5462, 0x43C6, 0x5466, 0x3829, 0x5468, 0x092A, 0x546A, 0x0922,
+ 0x546B, 0x382A, 0x546C, 0x43C7, 0x5470, 0x1104, 0x5471, 0x1102, 0x5473,
+ 0x0EAF, 0x5474, 0x382B, 0x5475, 0x10FF, 0x5476, 0x1108, 0x5477, 0x1103,
+ 0x547B, 0x1106, 0x547C, 0x077A, 0x547D, 0x0ECB, 0x547F, 0x41A4, 0x5480,
+ 0x1107, 0x5484, 0x1109, 0x5486, 0x110B, 0x5488, 0x41A5, 0x548A, 0x20DC,
+ 0x548B, 0x0860, 0x548C, 0x0FE8, 0x548D, 0x382C, 0x548E, 0x1100, 0x548F,
+ 0x10FE, 0x5490, 0x110A, 0x5492, 0x1105, 0x5495, 0x43C8, 0x5496, 0x382D,
+ 0x549C, 0x20DB, 0x54A0, 0x43C9, 0x54A1, 0x382E, 0x54A2, 0x110D, 0x54A4,
+ 0x1116, 0x54A5, 0x110F, 0x54A6, 0x43CA, 0x54A7, 0x4B1A, 0x54A8, 0x1113,
+ 0x54A9, 0x20DD, 0x54AA, 0x4B1B, 0x54AB, 0x1114, 0x54AC, 0x1110, 0x54AD,
+ 0x382F, 0x54AE, 0x43CB, 0x54AF, 0x1131, 0x54B1, 0x4B1C, 0x54B2, 0x0859,
+ 0x54B3, 0x058F, 0x54B7, 0x43CC, 0x54B8, 0x110E, 0x54B9, 0x3830, 0x54BA,
+ 0x43CD, 0x54BB, 0x4B1D, 0x54BC, 0x1118, 0x54BD, 0x04BA, 0x54BE, 0x1117,
+ 0x54BF, 0x3831, 0x54C0, 0x0469, 0x54C1, 0x0DBC, 0x54C2, 0x1115, 0x54C3,
+ 0x43CE, 0x54C4, 0x1111, 0x54C6, 0x3832, 0x54C7, 0x110C, 0x54C8, 0x1112,
+ 0x54C9, 0x0838, 0x54CD, 0x3833, 0x54CE, 0x4B1E, 0x54D8, 0x1119, 0x54E1,
+ 0x04BB, 0x54E2, 0x1122, 0x54E5, 0x111A, 0x54E6, 0x111B, 0x54E8, 0x098D,
+ 0x54E9, 0x0E97, 0x54EA, 0x4B1F, 0x54EC, 0x43D0, 0x54ED, 0x1120, 0x54EE,
+ 0x111F, 0x54EF, 0x43D1, 0x54F1, 0x43D2, 0x54F2, 0x0C29, 0x54F3, 0x43D3,
+ 0x54FA, 0x1121, 0x54FC, 0x4B20, 0x54FD, 0x111E, 0x54FF, 0x20DE, 0x5500,
+ 0x43D4, 0x5501, 0x43D5, 0x5504, 0x04D6, 0x5505, 0x4B21, 0x5506, 0x0826,
+ 0x5507, 0x09F6, 0x5508, 0x4B22, 0x5509, 0x43D6, 0x550E, 0x3834, 0x550F,
+ 0x111C, 0x5510, 0x0C5C, 0x5514, 0x111D, 0x5515, 0x4B23, 0x5516, 0x0466,
+ 0x5527, 0x4B24, 0x552A, 0x4B25, 0x552B, 0x3835, 0x552E, 0x1127, 0x552F,
+ 0x0F0D, 0x5531, 0x098F, 0x5533, 0x112D, 0x5535, 0x3836, 0x5536, 0x4B26,
+ 0x5538, 0x112C, 0x5539, 0x1123, 0x553C, 0x43D7, 0x553E, 0x0B23, 0x5540,
+ 0x1124, 0x5541, 0x43D8, 0x5544, 0x0B4F, 0x5545, 0x1129, 0x5546, 0x098E,
+ 0x5547, 0x43DA, 0x554A, 0x3837, 0x554C, 0x1126, 0x554F, 0x0EF0, 0x5550,
+ 0x41A6, 0x5551, 0x4B27, 0x5553, 0x0712, 0x5556, 0x112A, 0x5557, 0x112B,
+ 0x555C, 0x1128, 0x555D, 0x112E, 0x555E, 0x1DD1, 0x5560, 0x3838, 0x5561,
+ 0x4F54, 0x5563, 0x1125, 0x5564, 0x43DC, 0x5566, 0x4B28, 0x557B, 0x1134,
+ 0x557C, 0x1139, 0x557D, 0x43DE, 0x557E, 0x1135, 0x5580, 0x1130, 0x5581,
+ 0x41A7, 0x5582, 0x43DF, 0x5583, 0x113A, 0x5584, 0x0AB3, 0x5586, 0x20DF,
+ 0x5587, 0x113C, 0x5588, 0x383A, 0x5589, 0x07B4, 0x558A, 0x1132, 0x558B,
+ 0x0BBB, 0x558E, 0x383B, 0x558F, 0x4B29, 0x5591, 0x43E0, 0x5592, 0x4B2A,
+ 0x5594, 0x4B2B, 0x5598, 0x1136, 0x5599, 0x112F, 0x559A, 0x05E9, 0x559C,
+ 0x062A, 0x559D, 0x05C3, 0x559E, 0x1137, 0x559F, 0x1133, 0x55A4, 0x4B2C,
+ 0x55A7, 0x074C, 0x55A8, 0x113D, 0x55A9, 0x113B, 0x55AA, 0x0AD5, 0x55AB,
+ 0x0664, 0x55AC, 0x06A4, 0x55AD, 0x41A8, 0x55AE, 0x1138, 0x55B0, 0x06EC,
+ 0x55B2, 0x4B2D, 0x55B6, 0x04E6, 0x55BF, 0x43E5, 0x55C3, 0x4B2E, 0x55C4,
+ 0x1141, 0x55C5, 0x113F, 0x55C6, 0x4B2F, 0x55C7, 0x1178, 0x55C9, 0x43E6,
+ 0x55CC, 0x43E7, 0x55CE, 0x41A9, 0x55D1, 0x43E8, 0x55D2, 0x43E2, 0x55D3,
+ 0x4B30, 0x55D4, 0x1144, 0x55DA, 0x113E, 0x55DB, 0x4B31, 0x55DC, 0x1142,
+ 0x55DD, 0x43E9, 0x55DF, 0x1140, 0x55E2, 0x43EB, 0x55E3, 0x089A, 0x55E4,
+ 0x1143, 0x55E9, 0x43ED, 0x55EC, 0x4B32, 0x55EE, 0x4B33, 0x55F1, 0x4B34,
+ 0x55F6, 0x4B35, 0x55F7, 0x1146, 0x55F8, 0x4B36, 0x55F9, 0x114B, 0x55FD,
+ 0x1149, 0x55FE, 0x1148, 0x5605, 0x4B37, 0x5606, 0x0B70, 0x5607, 0x43F0,
+ 0x5608, 0x383C, 0x5609, 0x0545, 0x560D, 0x4B38, 0x560E, 0x383D, 0x560F,
+ 0x383E, 0x5610, 0x43F1, 0x5611, 0x4B39, 0x5612, 0x4B3A, 0x5614, 0x1145,
+ 0x5616, 0x1147, 0x5617, 0x0990, 0x5618, 0x04D5, 0x561B, 0x114A, 0x5620,
+ 0x3C1D, 0x5628, 0x43EE, 0x5629, 0x055E, 0x562C, 0x4B3B, 0x562F, 0x1155,
+ 0x5630, 0x43F2, 0x5631, 0x09E4, 0x5632, 0x1151, 0x5634, 0x114F, 0x5635,
+ 0x4B3C, 0x5636, 0x1150, 0x5637, 0x383F, 0x5638, 0x1152, 0x5639, 0x4B3D,
+ 0x563B, 0x41AA, 0x563D, 0x43F4, 0x563F, 0x3840, 0x5640, 0x43F5, 0x5642,
+ 0x04DF, 0x5647, 0x43F6, 0x5649, 0x3841, 0x564B, 0x3842, 0x564C, 0x0ABB,
+ 0x564D, 0x4B3E, 0x564E, 0x114C, 0x564F, 0x3843, 0x5650, 0x114D, 0x5653,
+ 0x1F1B, 0x5654, 0x4B3F, 0x565B, 0x05D8, 0x565E, 0x43F7, 0x5660, 0x43F8,
+ 0x5664, 0x1154, 0x5666, 0x3844, 0x5668, 0x062B, 0x5669, 0x3845, 0x566A,
+ 0x1157, 0x566B, 0x1153, 0x566C, 0x1156, 0x566D, 0x43F9, 0x566F, 0x3846,
+ 0x5671, 0x3847, 0x5672, 0x3848, 0x5674, 0x0DFE, 0x5676, 0x3C33, 0x5678,
+ 0x0CAD, 0x567A, 0x0D4C, 0x5680, 0x1159, 0x5685, 0x4B40, 0x5686, 0x1158,
+ 0x5687, 0x05A3, 0x5688, 0x43FB, 0x568A, 0x115A, 0x568C, 0x43FC, 0x568F,
+ 0x115D, 0x5694, 0x115C, 0x5695, 0x3849, 0x5699, 0x1DE6, 0x569A, 0x384A,
+ 0x569D, 0x43FD, 0x569E, 0x41AB, 0x569F, 0x4B41, 0x56A0, 0x115B, 0x56A2,
+ 0x0CEF, 0x56A5, 0x115E, 0x56A6, 0x4B42, 0x56A8, 0x43FE, 0x56A9, 0x41AC,
+ 0x56AC, 0x384B, 0x56AD, 0x384C, 0x56AE, 0x115F, 0x56B1, 0x384D, 0x56B2,
+ 0x43FF, 0x56B3, 0x41AD, 0x56B4, 0x1161, 0x56B6, 0x1160, 0x56B7, 0x4B43,
+ 0x56BC, 0x1163, 0x56C0, 0x1166, 0x56C1, 0x1164, 0x56C2, 0x1162, 0x56C3,
+ 0x1165, 0x56C5, 0x4400, 0x56C8, 0x1167, 0x56C9, 0x384E, 0x56CA, 0x1E5A,
+ 0x56CC, 0x4B44, 0x56CD, 0x4401, 0x56CE, 0x1168, 0x56CF, 0x4B45, 0x56D1,
+ 0x1169, 0x56D3, 0x116A, 0x56D7, 0x116B, 0x56D8, 0x107C, 0x56D9, 0x4B46,
+ 0x56DA, 0x0928, 0x56DB, 0x089B, 0x56DD, 0x384F, 0x56DE, 0x0573, 0x56DF,
+ 0x4402, 0x56E0, 0x04BC, 0x56E1, 0x4B47, 0x56E3, 0x0B82, 0x56E4, 0x3850,
+ 0x56E8, 0x4403, 0x56EB, 0x4B48, 0x56ED, 0x4B49, 0x56EE, 0x116C, 0x56F0,
+ 0x0814, 0x56F1, 0x4B4A, 0x56F2, 0x0493, 0x56F3, 0x0A24, 0x56F6, 0x4404,
+ 0x56F7, 0x4405, 0x56F9, 0x116D, 0x56FA, 0x077B, 0x56FD, 0x0803, 0x56FF,
+ 0x116F, 0x5700, 0x116E, 0x5703, 0x0E30, 0x5704, 0x1170, 0x5707, 0x4B4B,
+ 0x5708, 0x1172, 0x5709, 0x1171, 0x570A, 0x3851, 0x570B, 0x1173, 0x570C,
+ 0x4B4C, 0x570D, 0x1174, 0x570F, 0x074D, 0x5712, 0x0502, 0x5713, 0x1175,
+ 0x5715, 0x3852, 0x5716, 0x1177, 0x5718, 0x1176, 0x571A, 0x4B4D, 0x571B,
+ 0x4B4E, 0x571C, 0x1179, 0x571D, 0x4B4F, 0x571F, 0x0C54, 0x5721, 0x3680,
+ 0x5723, 0x3853, 0x5726, 0x117A, 0x5727, 0x0479, 0x5728, 0x084F, 0x5729,
+ 0x4408, 0x572C, 0x4B50, 0x572D, 0x0713, 0x572E, 0x4B51, 0x572F, 0x3854,
+ 0x5730, 0x0B8D, 0x5733, 0x3855, 0x5734, 0x3856, 0x5737, 0x117B, 0x5738,
+ 0x117C, 0x573B, 0x117E, 0x573D, 0x4B52, 0x573E, 0x4B53, 0x5740, 0x117F,
+ 0x5742, 0x0854, 0x5745, 0x440A, 0x5746, 0x440B, 0x5747, 0x06C9, 0x574A,
+ 0x0E65, 0x574C, 0x3857, 0x574D, 0x440C, 0x574E, 0x117D, 0x574F, 0x1180,
+ 0x5750, 0x0831, 0x5751, 0x07B5, 0x5759, 0x20E0, 0x575F, 0x4B54, 0x5761,
+ 0x1184, 0x5764, 0x0815, 0x5765, 0x20E1, 0x5766, 0x0B71, 0x5768, 0x440E,
+ 0x5769, 0x1181, 0x576A, 0x0BF6, 0x576B, 0x4B55, 0x576D, 0x4B56, 0x576F,
+ 0x440F, 0x5770, 0x3858, 0x5773, 0x4410, 0x5774, 0x4411, 0x5775, 0x4412,
+ 0x5777, 0x41AE, 0x577A, 0x4B57, 0x577B, 0x4413, 0x577C, 0x41AF, 0x577F,
+ 0x1185, 0x5782, 0x0A28, 0x5783, 0x4B58, 0x5788, 0x1183, 0x5789, 0x1186,
+ 0x578B, 0x0715, 0x578C, 0x3859, 0x5793, 0x1187, 0x5797, 0x4B59, 0x579A,
+ 0x4416, 0x579C, 0x385A, 0x579D, 0x4417, 0x579E, 0x4418, 0x57A0, 0x1188,
+ 0x57A2, 0x07B6, 0x57A3, 0x059E, 0x57A4, 0x118A, 0x57A8, 0x4419, 0x57AA,
+ 0x118B, 0x57AC, 0x20E2, 0x57AE, 0x4B5A, 0x57B0, 0x118C, 0x57B3, 0x1189,
+ 0x57B8, 0x385B, 0x57C0, 0x1182, 0x57C3, 0x118D, 0x57C6, 0x118E, 0x57C7,
+ 0x20E4, 0x57C8, 0x20E3, 0x57CB, 0x0E92, 0x57CC, 0x441C, 0x57CE, 0x09D3,
+ 0x57CF, 0x41B1, 0x57D2, 0x1190, 0x57D3, 0x1191, 0x57D4, 0x118F, 0x57D5,
+ 0x4B5B, 0x57D6, 0x1193, 0x57D7, 0x441A, 0x57DC, 0x0CEE, 0x57DE, 0x441F,
+ 0x57DF, 0x04AC, 0x57E0, 0x0DC8, 0x57E3, 0x1194, 0x57E4, 0x41B2, 0x57E6,
+ 0x385C, 0x57E7, 0x4B5C, 0x57ED, 0x385D, 0x57F0, 0x4420, 0x57F4, 0x09E5,
+ 0x57F5, 0x385E, 0x57F6, 0x385F, 0x57F7, 0x08E5, 0x57F8, 0x4422, 0x57F9,
+ 0x0D13, 0x57FA, 0x062C, 0x57FB, 0x4423, 0x57FC, 0x085B, 0x57FD, 0x4424,
+ 0x57FF, 0x3860, 0x5800, 0x0E87, 0x5802, 0x0C8A, 0x5804, 0x4425, 0x5805,
+ 0x074E, 0x5806, 0x0B2F, 0x5809, 0x3861, 0x580A, 0x1192, 0x580B, 0x1195,
+ 0x580D, 0x4B5D, 0x5815, 0x0B24, 0x5819, 0x1196, 0x581D, 0x1197, 0x581E,
+ 0x4426, 0x5820, 0x3862, 0x5821, 0x1199, 0x5824, 0x0C05, 0x5826, 0x4B5E,
+ 0x5827, 0x4427, 0x582A, 0x05EA, 0x582F, 0x1D32, 0x5830, 0x0503, 0x5831,
+ 0x0E43, 0x5832, 0x3863, 0x5834, 0x09D4, 0x5835, 0x0C42, 0x5839, 0x4428,
+ 0x583A, 0x0856, 0x583D, 0x119F, 0x5840, 0x0E0D, 0x5841, 0x0FA5, 0x5849,
+ 0x442A, 0x584A, 0x0574, 0x584B, 0x119B, 0x584C, 0x442B, 0x584D, 0x4B5F,
+ 0x584F, 0x4B60, 0x5851, 0x0ABC, 0x5852, 0x119E, 0x5854, 0x0C5D, 0x5857,
+ 0x0C43, 0x5858, 0x0C5E, 0x5859, 0x0D4D, 0x585A, 0x0BE9, 0x585E, 0x0839,
+ 0x585F, 0x4B61, 0x5861, 0x1E47, 0x5862, 0x119A, 0x5864, 0x41B3, 0x5867,
+ 0x442C, 0x5869, 0x0518, 0x586B, 0x0C30, 0x586D, 0x4B62, 0x5870, 0x119C,
+ 0x5872, 0x1198, 0x5875, 0x0A16, 0x5879, 0x11A0, 0x587C, 0x3864, 0x587E,
+ 0x0958, 0x587F, 0x4B63, 0x5880, 0x3865, 0x5881, 0x4B64, 0x5883, 0x06A5,
+ 0x5885, 0x11A1, 0x5889, 0x41B4, 0x588A, 0x442D, 0x588B, 0x442E, 0x588D,
+ 0x442F, 0x588F, 0x4430, 0x5890, 0x4431, 0x5893, 0x0E38, 0x5894, 0x4432,
+ 0x5897, 0x0AFF, 0x5898, 0x4B65, 0x589C, 0x0BE2, 0x589D, 0x4433, 0x589E,
+ 0x20E7, 0x589F, 0x11A3, 0x58A8, 0x0E7D, 0x58A9, 0x3866, 0x58AA, 0x4434,
+ 0x58AB, 0x11A4, 0x58AE, 0x11A9, 0x58B1, 0x4435, 0x58B2, 0x20E8, 0x58B3,
+ 0x0DFF, 0x58B8, 0x11A8, 0x58B9, 0x11A2, 0x58BA, 0x11A5, 0x58BB, 0x11A7,
+ 0x58BC, 0x4B66, 0x58BE, 0x0816, 0x58C1, 0x0E19, 0x58C3, 0x4437, 0x58C5,
+ 0x11AA, 0x58C7, 0x0B83, 0x58CA, 0x0575, 0x58CC, 0x09D5, 0x58CD, 0x4438,
+ 0x58CE, 0x3867, 0x58D0, 0x3868, 0x58D1, 0x11AC, 0x58D2, 0x41B6, 0x58D3,
+ 0x11AB, 0x58D4, 0x3869, 0x58D5, 0x07FA, 0x58D7, 0x11AD, 0x58D8, 0x11AF,
+ 0x58D9, 0x11AE, 0x58DA, 0x386A, 0x58DC, 0x11B1, 0x58DE, 0x11A6, 0x58DF,
+ 0x11B3, 0x58E0, 0x41B7, 0x58E2, 0x4439, 0x58E4, 0x11B2, 0x58E5, 0x11B0,
+ 0x58E9, 0x386B, 0x58EB, 0x089C, 0x58EC, 0x0A17, 0x58EE, 0x0AD6, 0x58EF,
+ 0x11B4, 0x58F0, 0x0A60, 0x58F1, 0x04B1, 0x58F2, 0x0D1A, 0x58F3, 0x443A,
+ 0x58F4, 0x443B, 0x58F7, 0x0BF7, 0x58F9, 0x11B6, 0x58FA, 0x11B5, 0x58FB,
+ 0x11B7, 0x58FC, 0x11B8, 0x58FD, 0x11B9, 0x5902, 0x11BA, 0x5905, 0x443C,
+ 0x5906, 0x443D, 0x5909, 0x0E21, 0x590A, 0x11BB, 0x590B, 0x20E9, 0x590C,
+ 0x386C, 0x590D, 0x443E, 0x590F, 0x0546, 0x5910, 0x11BC, 0x5914, 0x443F,
+ 0x5915, 0x0F26, 0x5916, 0x058E, 0x5918, 0x10DE, 0x5919, 0x0952, 0x591A,
+ 0x0B1F, 0x591B, 0x11BD, 0x591C, 0x0EF7, 0x591F, 0x4B67, 0x5922, 0x0EC0,
+ 0x5923, 0x4B68, 0x5924, 0x386D, 0x5925, 0x11BF, 0x5927, 0x0B47, 0x5929,
+ 0x0C31, 0x592A, 0x0B20, 0x592B, 0x0DC9, 0x592C, 0x11C0, 0x592D, 0x11C1,
+ 0x592E, 0x051D, 0x592F, 0x386E, 0x5931, 0x08E6, 0x5932, 0x11C2, 0x5937,
+ 0x0494, 0x5938, 0x11C3, 0x5939, 0x3725, 0x593D, 0x4442, 0x593E, 0x11C4,
+ 0x5944, 0x0504, 0x5946, 0x4444, 0x5947, 0x062D, 0x5948, 0x0CB8, 0x5949,
+ 0x0E44, 0x594E, 0x11C8, 0x594F, 0x0AD7, 0x5950, 0x11C7, 0x5951, 0x0716,
+ 0x5953, 0x20EA, 0x5954, 0x0E89, 0x5955, 0x11C6, 0x5957, 0x0C5F, 0x5958,
+ 0x11CA, 0x5959, 0x4B69, 0x595A, 0x11C9, 0x595B, 0x20EB, 0x595D, 0x20EC,
+ 0x595F, 0x4447, 0x5960, 0x11CC, 0x5961, 0x386F, 0x5962, 0x11CB, 0x5963,
+ 0x20ED, 0x5965, 0x051E, 0x5967, 0x11CD, 0x5968, 0x0991, 0x5969, 0x11CF,
+ 0x596A, 0x0B63, 0x596C, 0x11CE, 0x596D, 0x3870, 0x596E, 0x0E03, 0x5973,
+ 0x0981, 0x5974, 0x0C55, 0x5975, 0x4449, 0x5976, 0x444A, 0x5978, 0x11D0,
+ 0x5979, 0x4B6A, 0x597C, 0x444B, 0x597D, 0x07B7, 0x5981, 0x11D1, 0x5982,
+ 0x0CD7, 0x5983, 0x0D72, 0x5984, 0x0EDD, 0x598A, 0x0CDB, 0x598B, 0x41B9,
+ 0x598D, 0x11DA, 0x5992, 0x41BA, 0x5993, 0x0652, 0x5996, 0x0F2F, 0x5997,
+ 0x4B6B, 0x5999, 0x0EBB, 0x599B, 0x1239, 0x599D, 0x11D2, 0x599F, 0x444C,
+ 0x59A3, 0x11D5, 0x59A4, 0x20EE, 0x59A5, 0x0B25, 0x59A8, 0x0E66, 0x59AC,
+ 0x0C44, 0x59AE, 0x444D, 0x59AF, 0x4B6C, 0x59B2, 0x11D6, 0x59B3, 0x4B6D,
+ 0x59B9, 0x0E93, 0x59BA, 0x20EF, 0x59BB, 0x083A, 0x59BC, 0x444E, 0x59BE,
+ 0x0992, 0x59C3, 0x41BB, 0x59C6, 0x11D7, 0x59C8, 0x444F, 0x59C9, 0x089E,
+ 0x59CA, 0x3871, 0x59CB, 0x089D, 0x59CD, 0x4450, 0x59D0, 0x047D, 0x59D1,
+ 0x077C, 0x59D2, 0x3872, 0x59D3, 0x0A4F, 0x59D4, 0x0495, 0x59D9, 0x11DB,
+ 0x59DA, 0x11DC, 0x59DC, 0x11D9, 0x59DD, 0x3873, 0x59DE, 0x4451, 0x59DF,
+ 0x4B6E, 0x59E3, 0x3874, 0x59E4, 0x3875, 0x59E5, 0x04DA, 0x59E6, 0x05EB,
+ 0x59E7, 0x4452, 0x59E8, 0x11D8, 0x59EA, 0x0ED1, 0x59EB, 0x0DA3, 0x59EC,
+ 0x36AD, 0x59EE, 0x4453, 0x59F1, 0x4B6F, 0x59F6, 0x046C, 0x59F8, 0x4B70,
+ 0x59FB, 0x04BD, 0x59FF, 0x089F, 0x5A01, 0x0496, 0x5A03, 0x0467, 0x5A04,
+ 0x3876, 0x5A09, 0x11E1, 0x5A0C, 0x3877, 0x5A0D, 0x4457, 0x5A11, 0x11DF,
+ 0x5A13, 0x41BC, 0x5A17, 0x4458, 0x5A18, 0x0EC8, 0x5A1A, 0x11E2, 0x5A1B,
+ 0x35C1, 0x5A1C, 0x11E0, 0x5A1F, 0x11DE, 0x5A20, 0x09F7, 0x5A23, 0x3878,
+ 0x5A25, 0x11DD, 0x5A27, 0x4459, 0x5A29, 0x0E2A, 0x5A2D, 0x445A, 0x5A2F,
+ 0x0798, 0x5A35, 0x11E6, 0x5A36, 0x11E7, 0x5A3C, 0x0993, 0x5A40, 0x11E3,
+ 0x5A41, 0x0FD2, 0x5A46, 0x0D02, 0x5A47, 0x3879, 0x5A49, 0x11E5, 0x5A55,
+ 0x387A, 0x5A5A, 0x0817, 0x5A62, 0x11E8, 0x5A63, 0x387B, 0x5A65, 0x445B,
+ 0x5A66, 0x0DCA, 0x5A67, 0x41BD, 0x5A6A, 0x11E9, 0x5A6C, 0x11E4, 0x5A6D,
+ 0x387C, 0x5A77, 0x41BE, 0x5A7A, 0x445C, 0x5A7E, 0x387D, 0x5A7F, 0x0EC7,
+ 0x5A84, 0x41BF, 0x5A8B, 0x445D, 0x5A92, 0x0D14, 0x5A9A, 0x11EA, 0x5A9B,
+ 0x0DA4, 0x5A9C, 0x445E, 0x5A9E, 0x387E, 0x5A9F, 0x445F, 0x5AA0, 0x4460,
+ 0x5AA2, 0x4461, 0x5AA7, 0x387F, 0x5AAC, 0x3880, 0x5AB1, 0x4462, 0x5AB2,
+ 0x4B71, 0x5AB3, 0x3881, 0x5AB5, 0x4463, 0x5AB8, 0x4B72, 0x5ABA, 0x4464,
+ 0x5ABC, 0x11EB, 0x5ABD, 0x11EF, 0x5ABE, 0x11EC, 0x5ABF, 0x4465, 0x5AC1,
+ 0x0547, 0x5AC2, 0x11EE, 0x5AC4, 0x41C0, 0x5AC9, 0x08E7, 0x5ACB, 0x11ED,
+ 0x5ACC, 0x074F, 0x5AD0, 0x11FB, 0x5AD6, 0x11F4, 0x5AD7, 0x11F1, 0x5ADA,
+ 0x4466, 0x5ADC, 0x4467, 0x5AE0, 0x3882, 0x5AE1, 0x0BA2, 0x5AE3, 0x11F0,
+ 0x5AE5, 0x4468, 0x5AE6, 0x11F2, 0x5AE9, 0x11F3, 0x5AEA, 0x4B73, 0x5AEE,
+ 0x446A, 0x5AF0, 0x4469, 0x5AF5, 0x446B, 0x5AF6, 0x4B74, 0x5AFA, 0x11F5,
+ 0x5AFB, 0x11F6, 0x5B00, 0x3883, 0x5B08, 0x446C, 0x5B09, 0x062E, 0x5B0B,
+ 0x11F8, 0x5B0C, 0x11F7, 0x5B16, 0x11F9, 0x5B17, 0x446D, 0x5B19, 0x3884,
+ 0x5B1B, 0x4B75, 0x5B1D, 0x4B76, 0x5B21, 0x4B77, 0x5B22, 0x09D6, 0x5B25,
+ 0x3885, 0x5B2A, 0x11FC, 0x5B2C, 0x0BF8, 0x5B2D, 0x3886, 0x5B30, 0x04E7,
+ 0x5B32, 0x11FA, 0x5B34, 0x446E, 0x5B36, 0x11FD, 0x5B38, 0x4B78, 0x5B3E,
+ 0x11FE, 0x5B40, 0x1201, 0x5B41, 0x3887, 0x5B43, 0x11FF, 0x5B45, 0x1200,
+ 0x5B4C, 0x446F, 0x5B50, 0x08A0, 0x5B51, 0x1202, 0x5B52, 0x4470, 0x5B54,
+ 0x07B8, 0x5B55, 0x1203, 0x5B56, 0x20F0, 0x5B57, 0x08C8, 0x5B58, 0x0B18,
+ 0x5B5A, 0x1204, 0x5B5B, 0x1205, 0x5B5C, 0x08A8, 0x5B5D, 0x07B9, 0x5B5F,
+ 0x0EDE, 0x5B63, 0x0642, 0x5B64, 0x077D, 0x5B65, 0x1206, 0x5B66, 0x05B6,
+ 0x5B68, 0x4471, 0x5B69, 0x1207, 0x5B6B, 0x0B19, 0x5B6F, 0x4472, 0x5B70,
+ 0x1208, 0x5B71, 0x1230, 0x5B73, 0x1209, 0x5B75, 0x120A, 0x5B76, 0x3728,
+ 0x5B78, 0x120B, 0x5B7A, 0x120D, 0x5B7C, 0x3888, 0x5B7D, 0x41C2, 0x5B7E,
+ 0x3889, 0x5B7F, 0x388A, 0x5B80, 0x120E, 0x5B81, 0x4473, 0x5B82, 0x3610,
+ 0x5B83, 0x120F, 0x5B84, 0x4474, 0x5B85, 0x0B50, 0x5B87, 0x04C9, 0x5B88,
+ 0x0915, 0x5B89, 0x0486, 0x5B8A, 0x388B, 0x5B8B, 0x0AD9, 0x5B8C, 0x05EC,
+ 0x5B8D, 0x08E1, 0x5B8F, 0x07BA, 0x5B93, 0x41C3, 0x5B95, 0x0C60, 0x5B96,
+ 0x4476, 0x5B97, 0x092B, 0x5B98, 0x05ED, 0x5B99, 0x0BA6, 0x5B9A, 0x0C06,
+ 0x5B9B, 0x047C, 0x5B9C, 0x0653, 0x5B9D, 0x0E45, 0x5B9F, 0x08EE, 0x5BA2,
+ 0x066C, 0x5BA3, 0x0A8F, 0x5BA4, 0x08E8, 0x5BA5, 0x0F12, 0x5BA6, 0x1210,
+ 0x5BAC, 0x4477, 0x5BAE, 0x0676, 0x5BB0, 0x083B, 0x5BB3, 0x0590, 0x5BB4,
+ 0x0505, 0x5BB5, 0x0994, 0x5BB6, 0x0548, 0x5BB7, 0x4B79, 0x5BB8, 0x1211,
+ 0x5BB9, 0x0F30, 0x5BBF, 0x0953, 0x5BC0, 0x20F1, 0x5BC2, 0x0910, 0x5BC3,
+ 0x1212, 0x5BC4, 0x062F, 0x5BC5, 0x0CAA, 0x5BC6, 0x0EB5, 0x5BC7, 0x1213,
+ 0x5BC9, 0x1214, 0x5BCC, 0x0DCB, 0x5BCE, 0x447A, 0x5BD0, 0x1216, 0x5BD2,
+ 0x05E4, 0x5BD3, 0x06EF, 0x5BD4, 0x1215, 0x5BD6, 0x447B, 0x5BD7, 0x4B7A,
+ 0x5BD8, 0x20F3, 0x5BDB, 0x05EE, 0x5BDD, 0x09F8, 0x5BDE, 0x121A, 0x5BDF,
+ 0x086F, 0x5BE0, 0x4B7B, 0x5BE1, 0x0549, 0x5BE2, 0x1219, 0x5BE4, 0x1217,
+ 0x5BE5, 0x121B, 0x5BE6, 0x1218, 0x5BE7, 0x0CE1, 0x5BE8, 0x148E, 0x5BE9,
+ 0x09F9, 0x5BEB, 0x121C, 0x5BEC, 0x4F4E, 0x5BEE, 0x0F88, 0x5BF0, 0x121D,
+ 0x5BF1, 0x447E, 0x5BF3, 0x121F, 0x5BF5, 0x0BBC, 0x5BF6, 0x121E, 0x5BF8,
+ 0x0A47, 0x5BFA, 0x08C9, 0x5BFD, 0x447F, 0x5BFE, 0x0B30, 0x5BFF, 0x0923,
+ 0x5C01, 0x0DE7, 0x5C02, 0x0A90, 0x5C03, 0x4481, 0x5C04, 0x08F9, 0x5C05,
+ 0x1220, 0x5C06, 0x0995, 0x5C07, 0x1221, 0x5C08, 0x1222, 0x5C09, 0x0497,
+ 0x5C0A, 0x0B1A, 0x5C0B, 0x0A18, 0x5C0D, 0x1223, 0x5C0E, 0x0C8B, 0x5C0F,
+ 0x0996, 0x5C11, 0x0997, 0x5C12, 0x41C4, 0x5C13, 0x1224, 0x5C14, 0x372A,
+ 0x5C16, 0x0A91, 0x5C19, 0x360B, 0x5C1A, 0x0998, 0x5C1E, 0x20F5, 0x5C1F,
+ 0x4B7C, 0x5C20, 0x1225, 0x5C22, 0x1226, 0x5C23, 0x388C, 0x5C24, 0x0EEC,
+ 0x5C28, 0x1227, 0x5C29, 0x4482, 0x5C2A, 0x4B7D, 0x5C2B, 0x388D, 0x5C2C,
+ 0x4B7E, 0x5C2D, 0x06BE, 0x5C30, 0x388E, 0x5C31, 0x092C, 0x5C36, 0x4B7F,
+ 0x5C38, 0x1228, 0x5C39, 0x1229, 0x5C3A, 0x0908, 0x5C3B, 0x09F2, 0x5C3C,
+ 0x0CCC, 0x5C3D, 0x0A1A, 0x5C3E, 0x0D8C, 0x5C3F, 0x0CD8, 0x5C40, 0x06C1,
+ 0x5C41, 0x122A, 0x5C45, 0x0689, 0x5C46, 0x122B, 0x5C48, 0x06F6, 0x5C4A,
+ 0x0CA7, 0x5C4B, 0x0530, 0x5C4D, 0x08A1, 0x5C4E, 0x122C, 0x5C4F, 0x122F,
+ 0x5C50, 0x122E, 0x5C51, 0x06F5, 0x5C53, 0x122D, 0x5C55, 0x0C32, 0x5C59,
+ 0x4B80, 0x5C5B, 0x1E92, 0x5C5C, 0x4B81, 0x5C5E, 0x0B10, 0x5C5F, 0x4484,
+ 0x5C60, 0x0C45, 0x5C61, 0x08F4, 0x5C62, 0x1E0D, 0x5C63, 0x388F, 0x5C64,
+ 0x0ADA, 0x5C65, 0x0F64, 0x5C67, 0x4485, 0x5C68, 0x4486, 0x5C69, 0x3890,
+ 0x5C6C, 0x1231, 0x5C6D, 0x4B82, 0x5C6E, 0x1232, 0x5C6F, 0x0CAE, 0x5C70,
+ 0x4487, 0x5C71, 0x0881, 0x5C76, 0x1234, 0x5C79, 0x1235, 0x5C7A, 0x41C7,
+ 0x5C7C, 0x3891, 0x5C88, 0x448C, 0x5C8A, 0x448D, 0x5C8C, 0x1236, 0x5C8F,
+ 0x41C8, 0x5C90, 0x0630, 0x5C91, 0x1237, 0x5C94, 0x1238, 0x5C9F, 0x41C9,
+ 0x5CA0, 0x4491, 0x5CA1, 0x052C, 0x5CA2, 0x4492, 0x5CA3, 0x41CA, 0x5CA6,
+ 0x20F6, 0x5CA7, 0x4493, 0x5CA8, 0x0ABD, 0x5CA9, 0x0620, 0x5CAA, 0x41CB,
+ 0x5CAB, 0x123A, 0x5CAC, 0x0EB4, 0x5CAD, 0x4495, 0x5CB1, 0x0B32, 0x5CB3,
+ 0x05B7, 0x5CB5, 0x4496, 0x5CB6, 0x123C, 0x5CB7, 0x123E, 0x5CB8, 0x061B,
+ 0x5CBA, 0x20F7, 0x5CBB, 0x123B, 0x5CBC, 0x123D, 0x5CBE, 0x1240, 0x5CC5,
+ 0x123F, 0x5CC7, 0x1241, 0x5CC9, 0x4498, 0x5CCB, 0x3892, 0x5CD0, 0x41CC,
+ 0x5CD2, 0x3893, 0x5CD9, 0x1242, 0x5CDD, 0x4B83, 0x5CE0, 0x0C95, 0x5CE1,
+ 0x06A6, 0x5CE6, 0x372C, 0x5CE8, 0x0565, 0x5CE9, 0x1243, 0x5CEA, 0x1248,
+ 0x5CED, 0x1246, 0x5CEF, 0x0E47, 0x5CF0, 0x0E46, 0x5CF4, 0x3894, 0x5CF5,
+ 0x20F8, 0x5CF6, 0x0C61, 0x5CFA, 0x1245, 0x5CFB, 0x095E, 0x5CFD, 0x1244,
+ 0x5D01, 0x4B84, 0x5D06, 0x449B, 0x5D07, 0x0A38, 0x5D0B, 0x1249, 0x5D0D,
+ 0x41CE, 0x5D0E, 0x085A, 0x5D10, 0x449C, 0x5D11, 0x124F, 0x5D14, 0x1250,
+ 0x5D15, 0x124A, 0x5D16, 0x0591, 0x5D17, 0x124B, 0x5D18, 0x1254, 0x5D19,
+ 0x1253, 0x5D1A, 0x1252, 0x5D1B, 0x124E, 0x5D1D, 0x449E, 0x5D1F, 0x124D,
+ 0x5D20, 0x449F, 0x5D22, 0x1251, 0x5D24, 0x3895, 0x5D26, 0x3896, 0x5D27,
+ 0x20F9, 0x5D29, 0x0E48, 0x5D2B, 0x449D, 0x5D31, 0x44A0, 0x5D34, 0x4B85,
+ 0x5D39, 0x44A1, 0x5D3D, 0x4B86, 0x5D42, 0x20FC, 0x5D43, 0x3897, 0x5D46,
+ 0x3898, 0x5D47, 0x41CF, 0x5D4A, 0x3899, 0x5D4B, 0x1258, 0x5D4C, 0x1255,
+ 0x5D4E, 0x1257, 0x5D50, 0x0F5C, 0x5D52, 0x1256, 0x5D53, 0x20FA, 0x5D59,
+ 0x4B87, 0x5D5C, 0x124C, 0x5D61, 0x44A3, 0x5D69, 0x0A39, 0x5D6A, 0x44A4,
+ 0x5D6C, 0x1259, 0x5D6D, 0x20FD, 0x5D6F, 0x0827, 0x5D70, 0x44A6, 0x5D73,
+ 0x125A, 0x5D76, 0x125B, 0x5D7E, 0x4B88, 0x5D81, 0x41D0, 0x5D82, 0x125E,
+ 0x5D83, 0x4B89, 0x5D84, 0x125D, 0x5D87, 0x125C, 0x5D88, 0x44A9, 0x5D8B,
+ 0x0C62, 0x5D8C, 0x1247, 0x5D90, 0x1264, 0x5D92, 0x389A, 0x5D94, 0x389B,
+ 0x5D97, 0x44AB, 0x5D99, 0x389C, 0x5D9D, 0x1260, 0x5DA0, 0x389D, 0x5DA2,
+ 0x125F, 0x5DA4, 0x41D1, 0x5DA7, 0x41D2, 0x5DAC, 0x1261, 0x5DAE, 0x1262,
+ 0x5DB0, 0x44AC, 0x5DB2, 0x3C2D, 0x5DB4, 0x44AD, 0x5DB7, 0x1265, 0x5DB8,
+ 0x20FE, 0x5DB9, 0x20FF, 0x5DBA, 0x0FAE, 0x5DBC, 0x1266, 0x5DBD, 0x1263,
+ 0x5DC7, 0x4B8A, 0x5DC9, 0x1267, 0x5DCB, 0x41D3, 0x5DCC, 0x061C, 0x5DCD,
+ 0x1268, 0x5DD0, 0x2100, 0x5DD1, 0x44AF, 0x5DD2, 0x126A, 0x5DD3, 0x1269,
+ 0x5DD6, 0x126B, 0x5DD7, 0x44B0, 0x5DD8, 0x389E, 0x5DDB, 0x126C, 0x5DDD,
+ 0x0A92, 0x5DDE, 0x092D, 0x5DE0, 0x389F, 0x5DE1, 0x096E, 0x5DE2, 0x3432,
+ 0x5DE3, 0x0AE5, 0x5DE4, 0x44B2, 0x5DE5, 0x07BB, 0x5DE6, 0x0828, 0x5DE7,
+ 0x07BC, 0x5DE8, 0x068A, 0x5DE9, 0x44B3, 0x5DEB, 0x126D, 0x5DEE, 0x0829,
+ 0x5DF1, 0x077E, 0x5DF2, 0x126E, 0x5DF3, 0x0EB2, 0x5DF4, 0x0CF9, 0x5DF5,
+ 0x126F, 0x5DF7, 0x07BD, 0x5DF8, 0x38A0, 0x5DF9, 0x4B8B, 0x5DFB, 0x05E8,
+ 0x5DFD, 0x0B65, 0x5DFE, 0x06CA, 0x5DFF, 0x35E2, 0x5E00, 0x38A1, 0x5E02,
+ 0x08A2, 0x5E03, 0x0DCD, 0x5E06, 0x0D55, 0x5E0B, 0x1270, 0x5E0C, 0x0631,
+ 0x5E11, 0x1273, 0x5E12, 0x38A2, 0x5E14, 0x38A3, 0x5E15, 0x38A4, 0x5E16,
+ 0x0BBD, 0x5E18, 0x38A5, 0x5E19, 0x1272, 0x5E1A, 0x1271, 0x5E1B, 0x1274,
+ 0x5E1D, 0x0C07, 0x5E1F, 0x44B7, 0x5E25, 0x0A29, 0x5E28, 0x4B8C, 0x5E2B,
+ 0x08A3, 0x5E2D, 0x0A6E, 0x5E2E, 0x38A6, 0x5E2F, 0x0B33, 0x5E30, 0x063C,
+ 0x5E32, 0x4B8D, 0x5E33, 0x0BBE, 0x5E35, 0x4B8E, 0x5E36, 0x1275, 0x5E37,
+ 0x1276, 0x5E38, 0x09D7, 0x5E3D, 0x0E67, 0x5E3E, 0x44B8, 0x5E40, 0x1279,
+ 0x5E43, 0x1278, 0x5E44, 0x1277, 0x5E45, 0x0DEF, 0x5E47, 0x1280, 0x5E49,
+ 0x44B9, 0x5E4C, 0x0E88, 0x5E4E, 0x127A, 0x5E54, 0x127C, 0x5E55, 0x0E99,
+ 0x5E56, 0x44BB, 0x5E57, 0x127B, 0x5E58, 0x38A7, 0x5E5B, 0x4B8F, 0x5E5E,
+ 0x41D4, 0x5E5F, 0x127D, 0x5E61, 0x0D3C, 0x5E62, 0x127E, 0x5E63, 0x0E0E,
+ 0x5E64, 0x127F, 0x5E68, 0x4B90, 0x5E6A, 0x4B91, 0x5E6B, 0x38A8, 0x5E6C,
+ 0x38A9, 0x5E6D, 0x44BD, 0x5E6E, 0x44BE, 0x5E72, 0x05EF, 0x5E73, 0x0E0F,
+ 0x5E74, 0x0CE5, 0x5E75, 0x1281, 0x5E76, 0x1282, 0x5E77, 0x4B92, 0x5E78,
+ 0x07BE, 0x5E79, 0x05F0, 0x5E7A, 0x1283, 0x5E7B, 0x076C, 0x5E7C, 0x0F2E,
+ 0x5E7D, 0x0F13, 0x5E7E, 0x0632, 0x5E7F, 0x1285, 0x5E80, 0x4B93, 0x5E81,
+ 0x0BBF, 0x5E83, 0x07BF, 0x5E84, 0x0999, 0x5E87, 0x0D73, 0x5E8A, 0x099A,
+ 0x5E8B, 0x4B94, 0x5E8F, 0x0982, 0x5E95, 0x0C08, 0x5E96, 0x0E49, 0x5E97,
+ 0x0C33, 0x5E99, 0x36B0, 0x5E9A, 0x07C0, 0x5E9C, 0x0DCE, 0x5EA0, 0x1286,
+ 0x5EA5, 0x44C0, 0x5EA6, 0x0C53, 0x5EA7, 0x0832, 0x5EA8, 0x38AA, 0x5EAA,
+ 0x38AB, 0x5EAB, 0x077F, 0x5EAC, 0x44C1, 0x5EAD, 0x0C09, 0x5EB3, 0x4B95,
+ 0x5EB5, 0x0487, 0x5EB6, 0x0978, 0x5EB7, 0x07C1, 0x5EB8, 0x0F31, 0x5EB9,
+ 0x44C2, 0x5EBD, 0x4B96, 0x5EBE, 0x38AC, 0x5EBF, 0x38AD, 0x5EC1, 0x1287,
+ 0x5EC2, 0x1288, 0x5EC3, 0x0D07, 0x5EC6, 0x44C3, 0x5EC8, 0x1289, 0x5EC9,
+ 0x0FBF, 0x5ECA, 0x0FD3, 0x5ECB, 0x3C1E, 0x5ECF, 0x128B, 0x5ED0, 0x128A,
+ 0x5ED1, 0x4B97, 0x5ED2, 0x38AF, 0x5ED3, 0x05A5, 0x5ED4, 0x4B98, 0x5ED5,
+ 0x4B99, 0x5ED6, 0x128C, 0x5ED9, 0x44C4, 0x5EDA, 0x128F, 0x5EDB, 0x1290,
+ 0x5EDD, 0x128E, 0x5EDF, 0x0DB2, 0x5EE0, 0x099B, 0x5EE1, 0x1292, 0x5EE2,
+ 0x1291, 0x5EE3, 0x128D, 0x5EE8, 0x1293, 0x5EE9, 0x1294, 0x5EEC, 0x1295,
+ 0x5EF0, 0x1298, 0x5EF1, 0x1296, 0x5EF3, 0x1297, 0x5EF4, 0x1299, 0x5EF6,
+ 0x0506, 0x5EF7, 0x0C0A, 0x5EF8, 0x129A, 0x5EF9, 0x41D5, 0x5EFA, 0x0750,
+ 0x5EFB, 0x0576, 0x5EFC, 0x0CEC, 0x5EFD, 0x44C6, 0x5EFE, 0x129B, 0x5EFF,
+ 0x0CD3, 0x5F00, 0x41D6, 0x5F01, 0x0E2B, 0x5F02, 0x41D7, 0x5F03, 0x129C,
+ 0x5F04, 0x0FD4, 0x5F07, 0x38B0, 0x5F08, 0x44C7, 0x5F09, 0x129D, 0x5F0A,
+ 0x0E10, 0x5F0B, 0x12A0, 0x5F0C, 0x0FFA, 0x5F0D, 0x100A, 0x5F0E, 0x38B1,
+ 0x5F0F, 0x08DC, 0x5F10, 0x0CCD, 0x5F11, 0x12A1, 0x5F13, 0x0677, 0x5F14,
+ 0x0BC0, 0x5F15, 0x04BE, 0x5F16, 0x12A2, 0x5F17, 0x0DF6, 0x5F18, 0x07C2,
+ 0x5F1B, 0x0B8E, 0x5F1C, 0x38B2, 0x5F1D, 0x38B3, 0x5F1E, 0x44C9, 0x5F1F,
+ 0x0C0B, 0x5F21, 0x2101, 0x5F22, 0x38B4, 0x5F23, 0x41D8, 0x5F25, 0x0EFB,
+ 0x5F26, 0x076D, 0x5F27, 0x0780, 0x5F28, 0x38B5, 0x5F29, 0x12A3, 0x5F2D,
+ 0x12A4, 0x5F2F, 0x12AA, 0x5F31, 0x0911, 0x5F34, 0x2102, 0x5F35, 0x0BC1,
+ 0x5F36, 0x38B6, 0x5F37, 0x06A7, 0x5F38, 0x12A5, 0x5F3A, 0x3598, 0x5F3B,
+ 0x38B7, 0x5F3C, 0x0D9D, 0x5F3D, 0x41D9, 0x5F3E, 0x0B84, 0x5F40, 0x38B8,
+ 0x5F41, 0x12A6, 0x5F45, 0x20B2, 0x5F47, 0x44CA, 0x5F48, 0x12A7, 0x5F4A,
+ 0x06A8, 0x5F4C, 0x12A8, 0x5F4D, 0x4B9A, 0x5F4E, 0x12A9, 0x5F50, 0x38B9,
+ 0x5F51, 0x12AB, 0x5F53, 0x0C70, 0x5F54, 0x41DA, 0x5F56, 0x12AC, 0x5F57,
+ 0x12AD, 0x5F58, 0x38BA, 0x5F59, 0x12AE, 0x5F5C, 0x129F, 0x5F5D, 0x129E,
+ 0x5F61, 0x12AF, 0x5F62, 0x0717, 0x5F63, 0x44CB, 0x5F64, 0x38BB, 0x5F65,
+ 0x36AC, 0x5F66, 0x0D99, 0x5F67, 0x2103, 0x5F69, 0x083C, 0x5F6A, 0x0DA9,
+ 0x5F6B, 0x0BC2, 0x5F6C, 0x0DBD, 0x5F6D, 0x12B0, 0x5F70, 0x099C, 0x5F71,
+ 0x04E8, 0x5F72, 0x44CC, 0x5F73, 0x12B1, 0x5F77, 0x12B2, 0x5F79, 0x0EFE,
+ 0x5F7C, 0x0D74, 0x5F7D, 0x41DB, 0x5F7E, 0x44CD, 0x5F7F, 0x12B5, 0x5F80,
+ 0x051F, 0x5F81, 0x0A50, 0x5F82, 0x12B4, 0x5F83, 0x12B3, 0x5F84, 0x0718,
+ 0x5F85, 0x0B34, 0x5F87, 0x12B9, 0x5F88, 0x12B7, 0x5F89, 0x38BC, 0x5F8A,
+ 0x12B6, 0x5F8B, 0x0F6F, 0x5F8C, 0x0799, 0x5F8F, 0x44CE, 0x5F90, 0x0983,
+ 0x5F91, 0x12B8, 0x5F92, 0x0C46, 0x5F93, 0x0948, 0x5F97, 0x0C98, 0x5F98,
+ 0x12BC, 0x5F99, 0x12BB, 0x5F9C, 0x38BD, 0x5F9E, 0x12BA, 0x5FA0, 0x12BD,
+ 0x5FA1, 0x079A, 0x5FA2, 0x44CF, 0x5FA4, 0x38BF, 0x5FA7, 0x38BE, 0x5FA8,
+ 0x12BE, 0x5FA9, 0x0DEE, 0x5FAA, 0x0965, 0x5FAC, 0x4B9B, 0x5FAD, 0x12BF,
+ 0x5FAE, 0x0D8D, 0x5FAF, 0x38C0, 0x5FB3, 0x0C99, 0x5FB4, 0x0BC3, 0x5FB5,
+ 0x3438, 0x5FB7, 0x2104, 0x5FB8, 0x38C1, 0x5FB9, 0x0C2A, 0x5FBC, 0x12C0,
+ 0x5FBD, 0x0645, 0x5FC3, 0x09FA, 0x5FC4, 0x38C2, 0x5FC5, 0x0D9E, 0x5FC7,
+ 0x44D0, 0x5FC9, 0x38C3, 0x5FCB, 0x44D1, 0x5FCC, 0x0633, 0x5FCD, 0x0CDC,
+ 0x5FD2, 0x44D2, 0x5FD3, 0x44D3, 0x5FD4, 0x44D4, 0x5FD6, 0x12C1, 0x5FD7,
+ 0x08A4, 0x5FD8, 0x0E68, 0x5FD9, 0x0E69, 0x5FDC, 0x0520, 0x5FDD, 0x12C6,
+ 0x5FDE, 0x2105, 0x5FE0, 0x0BA7, 0x5FE1, 0x38C4, 0x5FE2, 0x44D5, 0x5FE4,
+ 0x12C3, 0x5FE9, 0x38C5, 0x5FEA, 0x4B9C, 0x5FEB, 0x0577, 0x5FED, 0x38C6,
+ 0x5FEE, 0x44D6, 0x5FEF, 0x44D7, 0x5FF0, 0x12F6, 0x5FF1, 0x12C5, 0x5FF3,
+ 0x44D8, 0x5FF5, 0x0CE6, 0x5FF8, 0x12C4, 0x5FFB, 0x12C2, 0x5FFC, 0x38C7,
+ 0x5FFD, 0x080C, 0x5FFF, 0x12C8, 0x6007, 0x4B9D, 0x600D, 0x41DC, 0x600E,
+ 0x12CE, 0x600F, 0x12D4, 0x6010, 0x12CC, 0x6012, 0x0C56, 0x6014, 0x41DD,
+ 0x6015, 0x12D1, 0x6016, 0x0DCF, 0x6017, 0x38C8, 0x6018, 0x41DE, 0x6019,
+ 0x12CB, 0x601A, 0x38C9, 0x601B, 0x12D0, 0x601C, 0x0FAF, 0x601D, 0x08A5,
+ 0x6020, 0x0B35, 0x6021, 0x12C9, 0x6022, 0x44DA, 0x6024, 0x44DB, 0x6025,
+ 0x0678, 0x6026, 0x12D3, 0x6027, 0x0A51, 0x6028, 0x0507, 0x6029, 0x12CD,
+ 0x602A, 0x0578, 0x602B, 0x12D2, 0x602F, 0x06A9, 0x6031, 0x12CF, 0x6033,
+ 0x38CA, 0x6035, 0x41DF, 0x603A, 0x12D5, 0x6041, 0x12D7, 0x6042, 0x12E1,
+ 0x6043, 0x12DF, 0x6046, 0x12DC, 0x6047, 0x41E0, 0x6049, 0x4B9E, 0x604A,
+ 0x12DB, 0x604B, 0x0FC0, 0x604C, 0x44DD, 0x604D, 0x12DD, 0x6050, 0x06AA,
+ 0x6052, 0x07C3, 0x6054, 0x4B9F, 0x6055, 0x0984, 0x6059, 0x12E4, 0x605A,
+ 0x12D6, 0x605D, 0x2106, 0x605F, 0x12DA, 0x6060, 0x12CA, 0x6061, 0x38CB,
+ 0x6062, 0x057A, 0x6063, 0x12DE, 0x6064, 0x12E0, 0x6065, 0x0B8F, 0x6067,
+ 0x4BA0, 0x6068, 0x0818, 0x6069, 0x0538, 0x606A, 0x12D8, 0x606B, 0x12E3,
+ 0x606C, 0x12E2, 0x606D, 0x06AB, 0x606F, 0x0B09, 0x6070, 0x05C4, 0x6075,
+ 0x0719, 0x6077, 0x12D9, 0x607F, 0x38CC, 0x6081, 0x12E5, 0x6083, 0x12E8,
+ 0x6084, 0x12EA, 0x6085, 0x2107, 0x6089, 0x08E9, 0x608A, 0x2108, 0x608B,
+ 0x12F0, 0x608C, 0x0C0C, 0x608D, 0x12E6, 0x6092, 0x12EE, 0x6094, 0x0579,
+ 0x6095, 0x44DE, 0x6096, 0x12EC, 0x6097, 0x12ED, 0x609A, 0x12E9, 0x609B,
+ 0x12EB, 0x609D, 0x41E1, 0x609E, 0x38CD, 0x609F, 0x079B, 0x60A0, 0x0F14,
+ 0x60A3, 0x05F1, 0x60A4, 0x38CE, 0x60A6, 0x04FB, 0x60A7, 0x12EF, 0x60A8,
+ 0x44DF, 0x60A9, 0x0CF0, 0x60AA, 0x0471, 0x60B0, 0x38CF, 0x60B1, 0x44E1,
+ 0x60B2, 0x0D75, 0x60B3, 0x12C7, 0x60B4, 0x12F5, 0x60B5, 0x12F9, 0x60B6,
+ 0x0EF1, 0x60B8, 0x12F2, 0x60BB, 0x4BA1, 0x60BC, 0x0C63, 0x60BD, 0x12F7,
+ 0x60BE, 0x44E2, 0x60C4, 0x4BA2, 0x60C5, 0x09D8, 0x60C6, 0x12F8, 0x60C7,
+ 0x0CAF, 0x60C8, 0x44E3, 0x60CB, 0x38D0, 0x60D1, 0x0FED, 0x60D3, 0x12F4,
+ 0x60D4, 0x41E2, 0x60D5, 0x210A, 0x60D8, 0x12FA, 0x60D9, 0x44E4, 0x60DA,
+ 0x080D, 0x60DB, 0x38D1, 0x60DC, 0x0A6F, 0x60DD, 0x41E3, 0x60DE, 0x2109,
+ 0x60DF, 0x0498, 0x60E0, 0x12F3, 0x60E1, 0x12F1, 0x60E3, 0x0ADC, 0x60E7,
+ 0x12E7, 0x60E8, 0x0882, 0x60EE, 0x44E5, 0x60F0, 0x0B26, 0x60F1, 0x1306,
+ 0x60F2, 0x210C, 0x60F3, 0x0ADD, 0x60F4, 0x1301, 0x60F5, 0x44E6, 0x60F6,
+ 0x12FE, 0x60F7, 0x12FF, 0x60F8, 0x38D2, 0x60F9, 0x0912, 0x60FA, 0x1302,
+ 0x60FB, 0x1305, 0x60FD, 0x4BA3, 0x6100, 0x1300, 0x6101, 0x092F, 0x6103,
+ 0x1303, 0x6106, 0x12FD, 0x6108, 0x0F08, 0x6109, 0x0F07, 0x610A, 0x4BA4,
+ 0x610D, 0x1307, 0x610E, 0x1308, 0x610F, 0x0499, 0x6110, 0x44E7, 0x6111,
+ 0x210D, 0x6112, 0x38D3, 0x6113, 0x38D4, 0x6114, 0x38D5, 0x6115, 0x12FC,
+ 0x6116, 0x4BA5, 0x6119, 0x44E8, 0x611A, 0x06EA, 0x611B, 0x046A, 0x611C,
+ 0x38D6, 0x611E, 0x44E9, 0x611F, 0x05F2, 0x6120, 0x210B, 0x6121, 0x1304,
+ 0x6127, 0x130C, 0x6128, 0x130B, 0x612A, 0x4BA6, 0x612B, 0x41E4, 0x612C,
+ 0x1310, 0x6130, 0x210F, 0x6134, 0x1311, 0x6136, 0x4BA7, 0x6137, 0x210E,
+ 0x613A, 0x44EA, 0x613C, 0x130F, 0x613D, 0x1312, 0x613E, 0x130A, 0x613F,
+ 0x130E, 0x6141, 0x44EC, 0x6142, 0x1313, 0x6144, 0x1314, 0x6146, 0x44ED,
+ 0x6147, 0x1309, 0x6148, 0x08CA, 0x614A, 0x130D, 0x614B, 0x0B36, 0x614C,
+ 0x07C4, 0x614D, 0x12FB, 0x614E, 0x09FB, 0x6153, 0x1321, 0x6155, 0x0E39,
+ 0x6158, 0x1317, 0x6159, 0x1318, 0x615A, 0x1319, 0x615D, 0x1320, 0x615E,
+ 0x4BA8, 0x615F, 0x131F, 0x6160, 0x44EE, 0x6162, 0x0EAB, 0x6163, 0x05F3,
+ 0x6164, 0x4BA9, 0x6165, 0x131D, 0x6167, 0x071B, 0x6168, 0x0592, 0x616B,
+ 0x131A, 0x616E, 0x0F80, 0x616F, 0x131C, 0x6170, 0x049A, 0x6171, 0x131E,
+ 0x6173, 0x1315, 0x6174, 0x131B, 0x6175, 0x1322, 0x6176, 0x071A, 0x6177,
+ 0x1316, 0x617B, 0x4BAA, 0x617C, 0x38D7, 0x617D, 0x4BAB, 0x617E, 0x0F47,
+ 0x617F, 0x4BAC, 0x6182, 0x0F15, 0x6187, 0x1325, 0x618A, 0x1329, 0x618D,
+ 0x38D8, 0x618E, 0x0B00, 0x6190, 0x0FC1, 0x6191, 0x132A, 0x6192, 0x44F0,
+ 0x6193, 0x44F1, 0x6194, 0x1327, 0x6196, 0x1324, 0x6197, 0x44F2, 0x6198,
+ 0x2110, 0x6199, 0x1323, 0x619A, 0x1328, 0x619D, 0x4BAD, 0x619F, 0x38D9,
+ 0x61A4, 0x0E00, 0x61A5, 0x44F3, 0x61A7, 0x0C8C, 0x61A8, 0x38DA, 0x61A9,
+ 0x071C, 0x61AB, 0x132B, 0x61AC, 0x1326, 0x61AD, 0x44F4, 0x61AE, 0x132C,
+ 0x61B2, 0x0751, 0x61B6, 0x0531, 0x61B8, 0x4BAE, 0x61B9, 0x41E6, 0x61BA,
+ 0x1334, 0x61BC, 0x41E5, 0x61BE, 0x05F4, 0x61C2, 0x38DB, 0x61C3, 0x1332,
+ 0x61C6, 0x1333, 0x61C7, 0x0819, 0x61C8, 0x1331, 0x61C9, 0x132F, 0x61CA,
+ 0x132E, 0x61CB, 0x1335, 0x61CC, 0x132D, 0x61CD, 0x1337, 0x61D0, 0x057B,
+ 0x61D5, 0x44F6, 0x61DC, 0x4BAF, 0x61DD, 0x44F7, 0x61DF, 0x38DC, 0x61E2,
+ 0x4BB0, 0x61E3, 0x1339, 0x61E5, 0x4BB1, 0x61E6, 0x1338, 0x61E8, 0x4BB2,
+ 0x61F2, 0x0BC4, 0x61F4, 0x133C, 0x61F5, 0x44F8, 0x61F6, 0x133A, 0x61F7,
+ 0x1330, 0x61F8, 0x0752, 0x61FA, 0x133B, 0x61FC, 0x133F, 0x61FD, 0x133E,
+ 0x61FE, 0x1340, 0x61FF, 0x133D, 0x6200, 0x1341, 0x6204, 0x4BB3, 0x6207,
+ 0x4BB4, 0x6208, 0x1342, 0x6209, 0x1343, 0x620A, 0x0E3A, 0x620C, 0x1345,
+ 0x620D, 0x1344, 0x620E, 0x0949, 0x6210, 0x0A52, 0x6211, 0x0566, 0x6212,
+ 0x057C, 0x6213, 0x2111, 0x6214, 0x1346, 0x6215, 0x38DD, 0x6216, 0x0483,
+ 0x621A, 0x0A70, 0x621B, 0x1347, 0x621D, 0x1A64, 0x621E, 0x1348, 0x621F,
+ 0x0737, 0x6221, 0x1349, 0x6222, 0x41E7, 0x6223, 0x44FA, 0x6226, 0x0A93,
+ 0x6229, 0x38DE, 0x622A, 0x134A, 0x622E, 0x134B, 0x622F, 0x0654, 0x6230,
+ 0x134C, 0x6231, 0x4BB5, 0x6232, 0x134D, 0x6233, 0x134E, 0x6234, 0x0B37,
+ 0x6236, 0x35BD, 0x6238, 0x0781, 0x6239, 0x4BB6, 0x623B, 0x0EED, 0x623D,
+ 0x4BB7, 0x623E, 0x344E, 0x623F, 0x0E6A, 0x6240, 0x0974, 0x6241, 0x134F,
+ 0x6243, 0x38DF, 0x6246, 0x38E0, 0x6247, 0x0A94, 0x6248, 0x1B1A, 0x6249,
+ 0x0D76, 0x624B, 0x0916, 0x624C, 0x38E1, 0x624D, 0x083D, 0x624E, 0x1350,
+ 0x6251, 0x38E2, 0x6252, 0x44FB, 0x6253, 0x0B27, 0x6255, 0x0DF7, 0x6256,
+ 0x38E3, 0x6258, 0x0B51, 0x625A, 0x41E8, 0x625B, 0x1353, 0x625E, 0x1351,
+ 0x6260, 0x1354, 0x6261, 0x44FC, 0x6263, 0x1352, 0x6264, 0x44FD, 0x6268,
+ 0x1355, 0x626D, 0x44FF, 0x626E, 0x0E01, 0x626F, 0x41E9, 0x6271, 0x047B,
+ 0x6273, 0x4500, 0x6276, 0x0DD0, 0x6279, 0x0D77, 0x627A, 0x4BB8, 0x627B,
+ 0x44FE, 0x627C, 0x1356, 0x627E, 0x1359, 0x627F, 0x099D, 0x6280, 0x0655,
+ 0x6282, 0x1357, 0x6283, 0x135E, 0x6284, 0x099E, 0x6285, 0x35C5, 0x6289,
+ 0x1358, 0x628A, 0x0CFA, 0x6290, 0x4BB9, 0x6291, 0x0F48, 0x6292, 0x135A,
+ 0x6293, 0x135B, 0x6294, 0x135F, 0x6295, 0x0C64, 0x6296, 0x135C, 0x6297,
+ 0x07C5, 0x6298, 0x0A82, 0x6299, 0x4501, 0x629B, 0x136D, 0x629C, 0x0D48,
+ 0x629E, 0x0B52, 0x62A6, 0x2112, 0x62A8, 0x4BBA, 0x62AB, 0x0D78, 0x62AC,
+ 0x13B2, 0x62B1, 0x0E4A, 0x62B5, 0x0C0D, 0x62B9, 0x0EA3, 0x62BB, 0x1362,
+ 0x62BC, 0x0521, 0x62BD, 0x0BA8, 0x62C2, 0x136B, 0x62C4, 0x38E4, 0x62C5,
+ 0x0B72, 0x62C6, 0x1365, 0x62C7, 0x136C, 0x62C8, 0x1367, 0x62C9, 0x136E,
+ 0x62CA, 0x136A, 0x62CC, 0x1369, 0x62CD, 0x0D25, 0x62CF, 0x1363, 0x62D0,
+ 0x057D, 0x62D1, 0x1361, 0x62D2, 0x068B, 0x62D3, 0x0B53, 0x62D4, 0x135D,
+ 0x62D5, 0x4502, 0x62D6, 0x41EA, 0x62D7, 0x1360, 0x62D8, 0x07C6, 0x62D9,
+ 0x0A7F, 0x62DA, 0x4BBB, 0x62DB, 0x099F, 0x62DC, 0x1368, 0x62DD, 0x0D08,
+ 0x62E0, 0x068C, 0x62E1, 0x05A6, 0x62EC, 0x05C5, 0x62ED, 0x09E7, 0x62EE,
+ 0x1370, 0x62EF, 0x1375, 0x62F1, 0x1371, 0x62F3, 0x0753, 0x62F4, 0x4BBC,
+ 0x62F5, 0x1376, 0x62F6, 0x0870, 0x62F7, 0x07FB, 0x62FC, 0x38E5, 0x62FD,
+ 0x4504, 0x62FE, 0x0930, 0x62FF, 0x1364, 0x6301, 0x08CB, 0x6302, 0x1373,
+ 0x6303, 0x4505, 0x6307, 0x08A6, 0x6308, 0x1374, 0x6309, 0x0488, 0x630A,
+ 0x38E6, 0x630C, 0x136F, 0x630D, 0x38E7, 0x6310, 0x4506, 0x6311, 0x0BC5,
+ 0x6316, 0x4BBD, 0x6318, 0x38E8, 0x6319, 0x068D, 0x631B, 0x3737, 0x631F,
+ 0x06AC, 0x6327, 0x1372, 0x6328, 0x046B, 0x632A, 0x4BBE, 0x632B, 0x0833,
+ 0x632F, 0x09FC, 0x6332, 0x4509, 0x6335, 0x450A, 0x6336, 0x4BBF, 0x6339,
+ 0x38E9, 0x633A, 0x0C0E, 0x633B, 0x450B, 0x633C, 0x450C, 0x633D, 0x0D68,
+ 0x633E, 0x1378, 0x633F, 0x0AE0, 0x6341, 0x450D, 0x6342, 0x38EA, 0x6343,
+ 0x38EB, 0x6344, 0x450E, 0x6346, 0x4BC0, 0x6349, 0x0B0A, 0x634B, 0x4BC1,
+ 0x634C, 0x0879, 0x634D, 0x1379, 0x634E, 0x450F, 0x634F, 0x137B, 0x6350,
+ 0x1377, 0x6353, 0x4BC2, 0x6355, 0x0E31, 0x6357, 0x0BD9, 0x6359, 0x4511,
+ 0x635C, 0x0ADE, 0x6365, 0x38EC, 0x6367, 0x0E4B, 0x6368, 0x08FA, 0x6369,
+ 0x1387, 0x636B, 0x1386, 0x636C, 0x4514, 0x636E, 0x0A3E, 0x6371, 0x4BC3,
+ 0x6372, 0x0754, 0x6374, 0x38ED, 0x6375, 0x4BC4, 0x6376, 0x1380, 0x6377,
+ 0x09A1, 0x637A, 0x0CC0, 0x637B, 0x0CE7, 0x637C, 0x41EB, 0x637D, 0x38EE,
+ 0x637F, 0x4BC5, 0x6380, 0x137E, 0x6382, 0x4BC6, 0x6383, 0x0ADF, 0x6384,
+ 0x38EF, 0x6387, 0x38F0, 0x6388, 0x0924, 0x6389, 0x1383, 0x638A, 0x4BC7,
+ 0x638C, 0x09A0, 0x638E, 0x137D, 0x638F, 0x1382, 0x6390, 0x38F1, 0x6392,
+ 0x0D09, 0x6394, 0x4517, 0x6396, 0x137C, 0x6398, 0x06F7, 0x6399, 0x4515,
+ 0x639B, 0x05BB, 0x639E, 0x38F2, 0x639F, 0x1384, 0x63A0, 0x0F73, 0x63A1,
+ 0x083E, 0x63A2, 0x0B73, 0x63A3, 0x1381, 0x63A5, 0x0A80, 0x63A7, 0x07C7,
+ 0x63A8, 0x0A2A, 0x63A9, 0x0508, 0x63AA, 0x0ABE, 0x63AB, 0x137F, 0x63AC,
+ 0x065F, 0x63AE, 0x4BC8, 0x63AF, 0x4BC9, 0x63B2, 0x071D, 0x63B4, 0x0BEB,
+ 0x63B5, 0x1385, 0x63BB, 0x0AE1, 0x63BD, 0x4518, 0x63BE, 0x1388, 0x63C0,
+ 0x138A, 0x63C3, 0x0B17, 0x63C4, 0x1390, 0x63C6, 0x138B, 0x63C9, 0x138D,
+ 0x63CF, 0x0DB3, 0x63D0, 0x0C0F, 0x63D1, 0x38F3, 0x63D2, 0x138E, 0x63D4,
+ 0x4519, 0x63D5, 0x451A, 0x63D6, 0x0F16, 0x63DA, 0x0F32, 0x63DB, 0x05F5,
+ 0x63DC, 0x38F4, 0x63E0, 0x451B, 0x63E1, 0x0472, 0x63E3, 0x138C, 0x63E5,
+ 0x41EC, 0x63E9, 0x1389, 0x63EA, 0x4BCA, 0x63EB, 0x451C, 0x63EC, 0x451D,
+ 0x63ED, 0x341C, 0x63EE, 0x0634, 0x63F2, 0x451E, 0x63F4, 0x0509, 0x63F5,
+ 0x2113, 0x63F6, 0x138F, 0x63F7, 0x3644, 0x63F8, 0x4BCB, 0x63F9, 0x4BCC,
+ 0x63FA, 0x0F33, 0x6406, 0x1393, 0x6409, 0x38F5, 0x640D, 0x0B1B, 0x640F,
+ 0x139A, 0x6410, 0x38F6, 0x6412, 0x4BCD, 0x6413, 0x1394, 0x6414, 0x1E2C,
+ 0x6416, 0x1391, 0x6417, 0x1398, 0x6418, 0x4BCE, 0x641C, 0x137A, 0x641E,
+ 0x451F, 0x6420, 0x4BCF, 0x6422, 0x38F7, 0x6424, 0x4BD0, 0x6425, 0x4520,
+ 0x6426, 0x1395, 0x6428, 0x1399, 0x6429, 0x4521, 0x642A, 0x4BD1, 0x642C,
+ 0x0D56, 0x642D, 0x0C65, 0x642F, 0x4522, 0x6434, 0x1392, 0x6435, 0x4BD2,
+ 0x6436, 0x1396, 0x643A, 0x071E, 0x643D, 0x4BD3, 0x643E, 0x0861, 0x643F,
+ 0x4BD4, 0x6442, 0x0A81, 0x644E, 0x139E, 0x6451, 0x1E43, 0x6452, 0x4BD5,
+ 0x6454, 0x38F8, 0x6458, 0x0C20, 0x645A, 0x4523, 0x645B, 0x38F9, 0x645D,
+ 0x4524, 0x645F, 0x4BD6, 0x6460, 0x2114, 0x6467, 0x139B, 0x6469, 0x0E8E,
+ 0x646D, 0x38FA, 0x646F, 0x139C, 0x6473, 0x4525, 0x6474, 0x4BD7, 0x6476,
+ 0x139D, 0x6478, 0x0EDA, 0x6479, 0x41ED, 0x647A, 0x0A46, 0x647B, 0x38FB,
+ 0x647D, 0x4526, 0x6483, 0x0738, 0x6487, 0x4527, 0x6488, 0x13A4, 0x6490,
+ 0x4BD8, 0x6491, 0x4528, 0x6492, 0x0883, 0x6493, 0x13A1, 0x6495, 0x13A0,
+ 0x6498, 0x4BD9, 0x6499, 0x4BDA, 0x649A, 0x0CE8, 0x649D, 0x2115, 0x649E,
+ 0x0C8D, 0x649F, 0x4529, 0x64A4, 0x0C2B, 0x64A5, 0x13A2, 0x64A9, 0x13A3,
+ 0x64AB, 0x0DE1, 0x64AC, 0x4BDB, 0x64AD, 0x0CFB, 0x64AE, 0x0871, 0x64B0,
+ 0x0A95, 0x64B2, 0x0E7E, 0x64B3, 0x4BDC, 0x64B9, 0x05A7, 0x64BB, 0x13AA,
+ 0x64BC, 0x13A5, 0x64BE, 0x38FC, 0x64BF, 0x38FD, 0x64C1, 0x0F34, 0x64C2,
+ 0x13AC, 0x64C4, 0x41EE, 0x64C5, 0x13A8, 0x64C7, 0x13A9, 0x64CA, 0x341D,
+ 0x64CB, 0x452A, 0x64CC, 0x452B, 0x64CD, 0x0AE2, 0x64CE, 0x2116, 0x64D0,
+ 0x41EF, 0x64D2, 0x13A7, 0x64D4, 0x1366, 0x64D5, 0x452C, 0x64D7, 0x452D,
+ 0x64D8, 0x13AB, 0x64DA, 0x13A6, 0x64E0, 0x13B0, 0x64E1, 0x13B1, 0x64E2,
+ 0x0C21, 0x64E3, 0x13B3, 0x64E4, 0x452F, 0x64E5, 0x38FE, 0x64E6, 0x0872,
+ 0x64E7, 0x13AE, 0x64EC, 0x0656, 0x64ED, 0x4BDD, 0x64EF, 0x13B4, 0x64F0,
+ 0x4BDE, 0x64F1, 0x13AD, 0x64F2, 0x13B8, 0x64F4, 0x13B7, 0x64F6, 0x13B6,
+ 0x64F7, 0x38FF, 0x64FA, 0x13B9, 0x64FB, 0x3900, 0x64FD, 0x13BB, 0x64FE,
+ 0x09D9, 0x64FF, 0x4530, 0x6500, 0x13BA, 0x6504, 0x3901, 0x6505, 0x13BE,
+ 0x650F, 0x4532, 0x6514, 0x4533, 0x6516, 0x3902, 0x6518, 0x13BC, 0x6519,
+ 0x3903, 0x651B, 0x4BDF, 0x651C, 0x13BD, 0x651D, 0x1397, 0x651E, 0x4535,
+ 0x651F, 0x4BE0, 0x6522, 0x1E97, 0x6523, 0x13C0, 0x6524, 0x13BF, 0x6529,
+ 0x41F0, 0x652A, 0x139F, 0x652B, 0x13C1, 0x652C, 0x13B5, 0x652E, 0x4BE1,
+ 0x652F, 0x08A7, 0x6532, 0x4536, 0x6534, 0x13C2, 0x6535, 0x13C3, 0x6536,
+ 0x13C5, 0x6537, 0x13C4, 0x6538, 0x13C6, 0x6539, 0x057E, 0x653B, 0x07C8,
+ 0x653E, 0x0E4C, 0x653F, 0x0A53, 0x6544, 0x4537, 0x6545, 0x0782, 0x6547,
+ 0x3904, 0x6548, 0x13C8, 0x6549, 0x4BE2, 0x654D, 0x13CB, 0x654E, 0x2117,
+ 0x654F, 0x0DC4, 0x6551, 0x0679, 0x6554, 0x4538, 0x6555, 0x13CA, 0x6556,
+ 0x13C9, 0x6557, 0x0D0A, 0x6558, 0x13CC, 0x6559, 0x06AD, 0x655D, 0x13CE,
+ 0x655E, 0x13CD, 0x6560, 0x4BE3, 0x6562, 0x05F6, 0x6563, 0x0884, 0x6566,
+ 0x0CB0, 0x6567, 0x3905, 0x656B, 0x4539, 0x656C, 0x071F, 0x6570, 0x0A3A,
+ 0x6572, 0x13CF, 0x6574, 0x0A54, 0x6575, 0x0C22, 0x6577, 0x0DD1, 0x6578,
+ 0x13D0, 0x657A, 0x453A, 0x6581, 0x3906, 0x6582, 0x13D1, 0x6583, 0x13D2,
+ 0x6584, 0x453B, 0x6585, 0x3907, 0x6587, 0x0E08, 0x6588, 0x120C, 0x6589,
+ 0x0A6A, 0x658A, 0x453C, 0x658C, 0x0DBE, 0x658E, 0x0848, 0x6590, 0x0D79,
+ 0x6591, 0x0D57, 0x6592, 0x4BE4, 0x6595, 0x4BE5, 0x6597, 0x0C47, 0x6599,
+ 0x0F89, 0x659B, 0x13D4, 0x659C, 0x08FC, 0x659D, 0x41F1, 0x659F, 0x13D5,
+ 0x65A1, 0x047A, 0x65A4, 0x06CC, 0x65A5, 0x0A71, 0x65A7, 0x0DD2, 0x65AB,
+ 0x13D6, 0x65AC, 0x0890, 0x65AD, 0x0B85, 0x65AF, 0x08A9, 0x65B0, 0x09FD,
+ 0x65B2, 0x453D, 0x65B4, 0x4BE6, 0x65B5, 0x453E, 0x65B7, 0x13D7, 0x65B8,
+ 0x453F, 0x65B9, 0x0E4D, 0x65BC, 0x0519, 0x65BD, 0x08AA, 0x65BE, 0x4BE7,
+ 0x65BF, 0x4540, 0x65C1, 0x13DA, 0x65C2, 0x3908, 0x65C3, 0x13D8, 0x65C4,
+ 0x13DB, 0x65C5, 0x0F81, 0x65C6, 0x13D9, 0x65C8, 0x4BE8, 0x65C9, 0x4541,
+ 0x65CB, 0x0A9F, 0x65CC, 0x13DC, 0x65CE, 0x4BE9, 0x65CF, 0x0B12, 0x65D0,
+ 0x4BEA, 0x65D2, 0x13DD, 0x65D4, 0x4542, 0x65D7, 0x0636, 0x65D9, 0x13DF,
+ 0x65DB, 0x13DE, 0x65DF, 0x4BEB, 0x65E0, 0x13E0, 0x65E1, 0x13E1, 0x65E2,
+ 0x0637, 0x65E3, 0x3585, 0x65E5, 0x0CD4, 0x65E6, 0x0B74, 0x65E7, 0x0686,
+ 0x65E8, 0x08AB, 0x65E9, 0x0AE3, 0x65EC, 0x0966, 0x65ED, 0x0474, 0x65F0,
+ 0x3909, 0x65F1, 0x13E2, 0x65F2, 0x390A, 0x65F9, 0x4544, 0x65FA, 0x0522,
+ 0x65FB, 0x13E6, 0x65FC, 0x4545, 0x6600, 0x2118, 0x6602, 0x07C9, 0x6603,
+ 0x13E5, 0x6604, 0x4546, 0x6606, 0x081B, 0x6607, 0x09A2, 0x6608, 0x4547,
+ 0x6609, 0x211A, 0x660A, 0x13E4, 0x660C, 0x09A3, 0x660E, 0x0ECC, 0x660F,
+ 0x081A, 0x6613, 0x049B, 0x6614, 0x0A72, 0x6615, 0x2119, 0x661C, 0x13EB,
+ 0x661E, 0x4F50, 0x661F, 0x0A55, 0x6620, 0x04E9, 0x6621, 0x4548, 0x6622,
+ 0x41F3, 0x6624, 0x211D, 0x6625, 0x095F, 0x6627, 0x0E94, 0x6628, 0x0862,
+ 0x662A, 0x4549, 0x662B, 0x41F4, 0x662C, 0x390B, 0x662D, 0x09A4, 0x662E,
+ 0x211B, 0x662F, 0x0A4B, 0x6630, 0x41F5, 0x6631, 0x20AE, 0x6633, 0x41F6,
+ 0x6634, 0x13EA, 0x6635, 0x13E8, 0x6636, 0x13E9, 0x663A, 0x41F2, 0x663B,
+ 0x1E00, 0x663C, 0x0BA9, 0x663F, 0x1409, 0x6641, 0x13EF, 0x6642, 0x08CC,
+ 0x6643, 0x07CA, 0x6644, 0x13ED, 0x6645, 0x454A, 0x6648, 0x41F7, 0x6649,
+ 0x13EE, 0x664B, 0x09FE, 0x664C, 0x390C, 0x664E, 0x454C, 0x664F, 0x13EC,
+ 0x6651, 0x454B, 0x6652, 0x087D, 0x6657, 0x211F, 0x6659, 0x2120, 0x665A,
+ 0x3441, 0x665B, 0x390D, 0x665C, 0x390E, 0x665D, 0x13F1, 0x665E, 0x13F0,
+ 0x665F, 0x13F5, 0x6661, 0x390F, 0x6662, 0x13F6, 0x6663, 0x373A, 0x6664,
+ 0x13F2, 0x6665, 0x211E, 0x6666, 0x0580, 0x6667, 0x13F3, 0x6668, 0x13F4,
+ 0x6669, 0x0D69, 0x666A, 0x4551, 0x666B, 0x3910, 0x666C, 0x4552, 0x666D,
+ 0x4553, 0x666E, 0x0DD3, 0x666F, 0x0720, 0x6670, 0x13F7, 0x6673, 0x2122,
+ 0x6674, 0x0A56, 0x6676, 0x09A5, 0x6677, 0x41F9, 0x6678, 0x41FA, 0x667A,
+ 0x0B90, 0x667B, 0x4554, 0x667E, 0x4BEC, 0x6680, 0x4555, 0x6681, 0x06BF,
+ 0x6683, 0x13F8, 0x6684, 0x13FC, 0x6687, 0x054B, 0x6688, 0x13F9, 0x6689,
+ 0x13FB, 0x668B, 0x4BED, 0x668C, 0x4BEE, 0x668D, 0x41FB, 0x668E, 0x13FA,
+ 0x6690, 0x4556, 0x6691, 0x0975, 0x6692, 0x4557, 0x6696, 0x0B86, 0x6697,
+ 0x0489, 0x6698, 0x13FD, 0x6699, 0x2123, 0x669D, 0x13FE, 0x66A0, 0x2124,
+ 0x66A2, 0x0BC6, 0x66A4, 0x3912, 0x66A6, 0x0FB9, 0x66AB, 0x0891, 0x66AD,
+ 0x4559, 0x66AE, 0x0E3B, 0x66B1, 0x455A, 0x66B2, 0x2125, 0x66B3, 0x4BEF,
+ 0x66B4, 0x0E6B, 0x66B5, 0x455B, 0x66B8, 0x1405, 0x66B9, 0x1400, 0x66BB,
+ 0x41FC, 0x66BC, 0x1403, 0x66BE, 0x1402, 0x66BF, 0x2126, 0x66C0, 0x4BF0,
+ 0x66C1, 0x13FF, 0x66C4, 0x1404, 0x66C6, 0x3455, 0x66C7, 0x0CB6, 0x66C8,
+ 0x3913, 0x66C9, 0x1401, 0x66CF, 0x4BF1, 0x66D6, 0x1406, 0x66D9, 0x0976,
+ 0x66DA, 0x1407, 0x66DB, 0x41FD, 0x66DC, 0x0F35, 0x66DD, 0x0D2E, 0x66E0,
+ 0x1408, 0x66E6, 0x140A, 0x66E8, 0x41FE, 0x66E9, 0x140B, 0x66EC, 0x3914,
+ 0x66F0, 0x140C, 0x66F2, 0x06C2, 0x66F3, 0x04EA, 0x66F4, 0x07CB, 0x66F5,
+ 0x140D, 0x66F7, 0x140E, 0x66F8, 0x097B, 0x66F9, 0x0AE4, 0x66FA, 0x2127,
+ 0x66FB, 0x20B1, 0x66FC, 0x10ED, 0x66FD, 0x0AC0, 0x66FE, 0x0ABF, 0x66FF,
+ 0x0B38, 0x6700, 0x0837, 0x6701, 0x455F, 0x6703, 0x104B, 0x6705, 0x3915,
+ 0x6708, 0x0744, 0x6709, 0x0F17, 0x670B, 0x0E4E, 0x670D, 0x0DF0, 0x670E,
+ 0x2128, 0x670F, 0x140F, 0x6712, 0x4560, 0x6713, 0x3916, 0x6714, 0x0863,
+ 0x6715, 0x0BDB, 0x6716, 0x1410, 0x6717, 0x0FD5, 0x6719, 0x4562, 0x671B,
+ 0x0E6C, 0x671D, 0x0BC7, 0x671E, 0x1411, 0x671F, 0x0638, 0x6725, 0x4BF2,
+ 0x6726, 0x1412, 0x6727, 0x1413, 0x6728, 0x0EE6, 0x672A, 0x0EB0, 0x672B,
+ 0x0EA4, 0x672C, 0x0E8A, 0x672D, 0x0873, 0x672E, 0x1415, 0x6731, 0x0917,
+ 0x6733, 0x3917, 0x6734, 0x0E7F, 0x6735, 0x4BF3, 0x6736, 0x1417, 0x6737,
+ 0x141A, 0x6738, 0x1419, 0x673A, 0x0635, 0x673D, 0x067A, 0x673F, 0x1416,
+ 0x6741, 0x1418, 0x6743, 0x35B7, 0x6746, 0x141B, 0x6747, 0x41FF, 0x6748,
+ 0x3918, 0x6749, 0x0A3F, 0x674C, 0x3919, 0x674D, 0x4565, 0x674E, 0x0F65,
+ 0x674F, 0x048D, 0x6750, 0x0850, 0x6751, 0x0B1C, 0x6753, 0x0909, 0x6754,
+ 0x4566, 0x6755, 0x4BF4, 0x6756, 0x09DB, 0x6759, 0x141E, 0x675C, 0x0C48,
+ 0x675D, 0x4567, 0x675E, 0x141C, 0x675F, 0x0B0B, 0x6760, 0x141D, 0x6761,
+ 0x09DA, 0x6762, 0x0EE9, 0x6763, 0x141F, 0x6764, 0x1420, 0x6765, 0x0F52,
+ 0x6766, 0x212A, 0x676A, 0x1425, 0x676D, 0x07CC, 0x676E, 0x3571, 0x676F,
+ 0x0D0B, 0x6770, 0x1422, 0x6771, 0x0C66, 0x6772, 0x13E3, 0x6773, 0x13E7,
+ 0x6774, 0x456B, 0x6775, 0x0669, 0x6776, 0x391A, 0x6777, 0x0CFD, 0x677B,
+ 0x391B, 0x677C, 0x1424, 0x677E, 0x09A6, 0x677F, 0x0D58, 0x6780, 0x4BF5,
+ 0x6781, 0x4200, 0x6785, 0x142A, 0x6787, 0x0D8E, 0x6789, 0x1421, 0x678B,
+ 0x1427, 0x678C, 0x1426, 0x678F, 0x4BF6, 0x6790, 0x0A73, 0x6791, 0x4BF7,
+ 0x6792, 0x456D, 0x6793, 0x4201, 0x6795, 0x0E9B, 0x6797, 0x0F9B, 0x6798,
+ 0x4202, 0x679A, 0x0E95, 0x679B, 0x4203, 0x679C, 0x054C, 0x679D, 0x08AC,
+ 0x67A0, 0x0FEE, 0x67A1, 0x1429, 0x67A2, 0x0A3B, 0x67A4, 0x4BF8, 0x67A6,
+ 0x1428, 0x67A9, 0x1423, 0x67AF, 0x0783, 0x67B0, 0x391C, 0x67B1, 0x4BF9,
+ 0x67B2, 0x391D, 0x67B3, 0x142F, 0x67B4, 0x142D, 0x67B5, 0x4BFA, 0x67B6,
+ 0x054D, 0x67B7, 0x142B, 0x67B8, 0x1431, 0x67B9, 0x1437, 0x67BB, 0x212B,
+ 0x67BE, 0x4BFB, 0x67C0, 0x212D, 0x67C1, 0x0B28, 0x67C3, 0x4571, 0x67C4,
+ 0x0E11, 0x67C6, 0x1439, 0x67C8, 0x4572, 0x67CA, 0x0D94, 0x67CE, 0x1438,
+ 0x67CF, 0x0D26, 0x67D0, 0x0E6D, 0x67D1, 0x05F7, 0x67D2, 0x4573, 0x67D3,
+ 0x0A9B, 0x67D4, 0x094A, 0x67D7, 0x391F, 0x67D8, 0x0BEF, 0x67D9, 0x3920,
+ 0x67DA, 0x0F18, 0x67DB, 0x4574, 0x67DD, 0x1434, 0x67DE, 0x1433, 0x67E2,
+ 0x1435, 0x67E4, 0x1432, 0x67E7, 0x143A, 0x67E9, 0x1430, 0x67EC, 0x142E,
+ 0x67EE, 0x1436, 0x67EF, 0x142C, 0x67F0, 0x3921, 0x67F1, 0x0BAA, 0x67F3,
+ 0x0F04, 0x67F4, 0x08F2, 0x67F5, 0x0864, 0x67F7, 0x4575, 0x67F9, 0x391E,
+ 0x67FA, 0x1E9A, 0x67FB, 0x082A, 0x67FC, 0x4204, 0x67FE, 0x0E9D, 0x67FF,
+ 0x059F, 0x6801, 0x36F2, 0x6802, 0x0BEA, 0x6803, 0x0CA2, 0x6804, 0x04EB,
+ 0x6805, 0x1E07, 0x6810, 0x4570, 0x6813, 0x0A96, 0x6816, 0x0A58, 0x6817,
+ 0x0700, 0x6818, 0x4579, 0x681D, 0x4205, 0x681E, 0x143C, 0x681F, 0x457A,
+ 0x6821, 0x07CD, 0x6822, 0x05DA, 0x6828, 0x4BFC, 0x6829, 0x143E, 0x682A,
+ 0x05D2, 0x682B, 0x1444, 0x682C, 0x3922, 0x682D, 0x457B, 0x6830, 0x3923,
+ 0x6831, 0x3924, 0x6832, 0x1441, 0x6833, 0x457D, 0x6834, 0x0A97, 0x6838,
+ 0x05A9, 0x6839, 0x081C, 0x683B, 0x457E, 0x683C, 0x05A8, 0x683D, 0x083F,
+ 0x683E, 0x457F, 0x6840, 0x143F, 0x6841, 0x073B, 0x6842, 0x0721, 0x6843,
+ 0x0C67, 0x6844, 0x212F, 0x6845, 0x4580, 0x6846, 0x143D, 0x6848, 0x048A,
+ 0x6849, 0x4581, 0x684C, 0x4582, 0x684D, 0x1440, 0x684E, 0x1442, 0x6850,
+ 0x06C5, 0x6851, 0x0702, 0x6852, 0x212C, 0x6853, 0x05F8, 0x6854, 0x0665,
+ 0x6855, 0x4583, 0x6857, 0x4584, 0x6859, 0x1445, 0x685B, 0x3925, 0x685C,
+ 0x0869, 0x685D, 0x0E9F, 0x685F, 0x0885, 0x6863, 0x1446, 0x6867, 0x0DA2,
+ 0x686B, 0x4586, 0x686E, 0x4587, 0x6872, 0x3926, 0x6874, 0x1452, 0x6875,
+ 0x3927, 0x6876, 0x0533, 0x6877, 0x1447, 0x687A, 0x3928, 0x687C, 0x4588,
+ 0x687E, 0x1458, 0x687F, 0x1448, 0x6881, 0x0F8A, 0x6882, 0x4589, 0x6883,
+ 0x144F, 0x6884, 0x3929, 0x6885, 0x0D15, 0x6886, 0x4BFD, 0x688D, 0x1457,
+ 0x688E, 0x1E9C, 0x688F, 0x144A, 0x6890, 0x458A, 0x6893, 0x0478, 0x6894,
+ 0x144C, 0x6896, 0x458B, 0x6897, 0x07CE, 0x6898, 0x458D, 0x6899, 0x458E,
+ 0x689A, 0x458F, 0x689B, 0x144E, 0x689C, 0x4590, 0x689D, 0x144D, 0x689F,
+ 0x1449, 0x68A0, 0x1454, 0x68A2, 0x09A7, 0x68A3, 0x4206, 0x68A5, 0x392A,
+ 0x68A6, 0x11BE, 0x68A7, 0x079C, 0x68A8, 0x0F66, 0x68AA, 0x4591, 0x68AB,
+ 0x4592, 0x68AD, 0x144B, 0x68AF, 0x0C10, 0x68B0, 0x0581, 0x68B1, 0x081D,
+ 0x68B2, 0x392B, 0x68B3, 0x1443, 0x68B4, 0x4593, 0x68B5, 0x1453, 0x68B6,
+ 0x05BF, 0x68B9, 0x1451, 0x68BA, 0x1455, 0x68BB, 0x4594, 0x68BC, 0x0C68,
+ 0x68C3, 0x4598, 0x68C4, 0x063A, 0x68C5, 0x4599, 0x68C6, 0x1473, 0x68C8,
+ 0x20AF, 0x68C9, 0x0ED5, 0x68CA, 0x145A, 0x68CB, 0x0639, 0x68CC, 0x459A,
+ 0x68CD, 0x1461, 0x68CF, 0x2130, 0x68D0, 0x392C, 0x68D2, 0x0E6E, 0x68D4,
+ 0x1462, 0x68D5, 0x1464, 0x68D6, 0x392D, 0x68D7, 0x1468, 0x68D8, 0x145C,
+ 0x68D9, 0x459B, 0x68DA, 0x0B68, 0x68DF, 0x0C69, 0x68E0, 0x146C, 0x68E1,
+ 0x145F, 0x68E3, 0x1469, 0x68E4, 0x459C, 0x68E5, 0x459D, 0x68E7, 0x1463,
+ 0x68E8, 0x392E, 0x68EB, 0x4BFE, 0x68EC, 0x459E, 0x68ED, 0x392F, 0x68EE,
+ 0x09FF, 0x68EF, 0x146D, 0x68F0, 0x3930, 0x68F1, 0x3931, 0x68F2, 0x0A57,
+ 0x68F5, 0x4BFF, 0x68F7, 0x459F, 0x68F9, 0x146B, 0x68FA, 0x05F9, 0x68FB,
+ 0x4595, 0x68FC, 0x3932, 0x6900, 0x0FF6, 0x6901, 0x1459, 0x6903, 0x45A0,
+ 0x6904, 0x1467, 0x6905, 0x049C, 0x6907, 0x45A1, 0x6908, 0x145B, 0x690A,
+ 0x4207, 0x690B, 0x0EC6, 0x690C, 0x1460, 0x690D, 0x09E8, 0x690E, 0x0BE3,
+ 0x690F, 0x1456, 0x6911, 0x3933, 0x6912, 0x1466, 0x6913, 0x3934, 0x6917,
+ 0x4C00, 0x6919, 0x0A40, 0x691A, 0x1470, 0x691B, 0x05CF, 0x691C, 0x0755,
+ 0x6921, 0x1472, 0x6922, 0x145D, 0x6923, 0x1471, 0x6925, 0x146A, 0x6926,
+ 0x145E, 0x6928, 0x146E, 0x692A, 0x146F, 0x6930, 0x1480, 0x6933, 0x4C01,
+ 0x6934, 0x0CA6, 0x6935, 0x3935, 0x6936, 0x1465, 0x6938, 0x4C02, 0x6939,
+ 0x147C, 0x693B, 0x3936, 0x693D, 0x147E, 0x693F, 0x0BF4, 0x6942, 0x420A,
+ 0x6946, 0x45A5, 0x6949, 0x4208, 0x694A, 0x0F36, 0x6953, 0x0DE8, 0x6954,
+ 0x1479, 0x6955, 0x0B2A, 0x6957, 0x3937, 0x6959, 0x147F, 0x695A, 0x0AC1,
+ 0x695B, 0x4C03, 0x695C, 0x1476, 0x695D, 0x1483, 0x695E, 0x1482, 0x6960,
+ 0x0CC7, 0x6961, 0x1481, 0x6962, 0x0CC2, 0x6963, 0x3938, 0x6964, 0x420B,
+ 0x6965, 0x4C04, 0x6968, 0x2132, 0x6969, 0x45A6, 0x696A, 0x1485, 0x696B,
+ 0x1478, 0x696C, 0x45A7, 0x696D, 0x06C0, 0x696E, 0x147B, 0x696F, 0x0967,
+ 0x6972, 0x3939, 0x6973, 0x0D16, 0x6974, 0x147D, 0x6975, 0x06C3, 0x6977,
+ 0x1475, 0x6978, 0x1477, 0x6979, 0x1474, 0x697A, 0x45A8, 0x697C, 0x0FD6,
+ 0x697D, 0x05B8, 0x697E, 0x147A, 0x697F, 0x393A, 0x6980, 0x393B, 0x6981,
+ 0x1484, 0x6982, 0x0593, 0x6986, 0x3740, 0x698A, 0x0857, 0x698E, 0x04FF,
+ 0x6991, 0x1495, 0x6992, 0x45A9, 0x6994, 0x0FD7, 0x6995, 0x1498, 0x6996,
+ 0x45AB, 0x6998, 0x2134, 0x699B, 0x0A00, 0x699C, 0x1497, 0x69A0, 0x1496,
+ 0x69A5, 0x420C, 0x69A6, 0x393C, 0x69A7, 0x1493, 0x69A8, 0x4C05, 0x69AB,
+ 0x4C06, 0x69AD, 0x393D, 0x69AE, 0x1487, 0x69AF, 0x4C07, 0x69B0, 0x45AC,
+ 0x69B1, 0x14A4, 0x69B2, 0x1486, 0x69B4, 0x1499, 0x69B7, 0x393E, 0x69BA,
+ 0x45AD, 0x69BB, 0x1491, 0x69BC, 0x45AE, 0x69BE, 0x148C, 0x69BF, 0x1489,
+ 0x69C0, 0x45AF, 0x69C1, 0x148A, 0x69C3, 0x1492, 0x69C7, 0x1D33, 0x69CA,
+ 0x148F, 0x69CB, 0x07CF, 0x69CC, 0x0BE4, 0x69CD, 0x0AE6, 0x69CE, 0x148D,
+ 0x69CF, 0x420D, 0x69D0, 0x1488, 0x69D1, 0x45B0, 0x69D3, 0x148B, 0x69D6,
+ 0x393F, 0x69D7, 0x3940, 0x69D8, 0x0F37, 0x69D9, 0x0E98, 0x69DD, 0x1490,
+ 0x69DE, 0x149A, 0x69E2, 0x2135, 0x69E3, 0x45B4, 0x69E5, 0x4C08, 0x69E7,
+ 0x14A2, 0x69E8, 0x149B, 0x69E9, 0x4210, 0x69EA, 0x3411, 0x69EB, 0x14A8,
+ 0x69ED, 0x14A6, 0x69EE, 0x45B5, 0x69EF, 0x45B6, 0x69F1, 0x4C09, 0x69F2,
+ 0x14A1, 0x69F3, 0x45B7, 0x69F4, 0x45B9, 0x69F5, 0x4211, 0x69F6, 0x373F,
+ 0x69F9, 0x14A0, 0x69FB, 0x0BEC, 0x69FD, 0x0AE7, 0x69FE, 0x45BA, 0x69FF,
+ 0x149E, 0x6A01, 0x3941, 0x6A02, 0x149C, 0x6A05, 0x14A3, 0x6A0A, 0x14A9,
+ 0x6A0B, 0x0D89, 0x6A0C, 0x14AF, 0x6A0F, 0x3942, 0x6A11, 0x45BB, 0x6A12,
+ 0x14AA, 0x6A13, 0x14AD, 0x6A14, 0x14A7, 0x6A15, 0x3943, 0x6A17, 0x0BB2,
+ 0x6A19, 0x0DAA, 0x6A1A, 0x45BC, 0x6A1B, 0x149D, 0x6A1D, 0x45BD, 0x6A1E,
+ 0x14A5, 0x6A1F, 0x09A8, 0x6A21, 0x0EDB, 0x6A22, 0x14B9, 0x6A23, 0x14AC,
+ 0x6A28, 0x3944, 0x6A29, 0x0756, 0x6A2A, 0x0523, 0x6A2B, 0x05BD, 0x6A2E,
+ 0x1494, 0x6A30, 0x2136, 0x6A32, 0x45BF, 0x6A33, 0x45C0, 0x6A34, 0x3945,
+ 0x6A35, 0x09A9, 0x6A36, 0x14B1, 0x6A38, 0x14B8, 0x6A39, 0x0925, 0x6A3A,
+ 0x05D0, 0x6A3B, 0x4213, 0x6A3D, 0x0B6C, 0x6A3E, 0x3946, 0x6A3F, 0x45C1,
+ 0x6A44, 0x14AE, 0x6A45, 0x3947, 0x6A46, 0x2138, 0x6A47, 0x14B3, 0x6A48,
+ 0x14B7, 0x6A49, 0x45C2, 0x6A4A, 0x4C0A, 0x6A4B, 0x06AE, 0x6A4E, 0x45C4,
+ 0x6A50, 0x3948, 0x6A51, 0x3949, 0x6A52, 0x45C5, 0x6A54, 0x3C34, 0x6A55,
+ 0x4C0B, 0x6A56, 0x394A, 0x6A58, 0x0666, 0x6A59, 0x14B5, 0x6A5B, 0x394B,
+ 0x6A5F, 0x063B, 0x6A61, 0x0CA3, 0x6A62, 0x14B4, 0x6A64, 0x45C6, 0x6A66,
+ 0x14B6, 0x6A67, 0x4C0C, 0x6A6B, 0x2137, 0x6A71, 0x4C0D, 0x6A72, 0x14B0,
+ 0x6A73, 0x2139, 0x6A78, 0x14B2, 0x6A7A, 0x45C3, 0x6A7E, 0x213A, 0x6A7F,
+ 0x05BE, 0x6A80, 0x0B87, 0x6A83, 0x394C, 0x6A84, 0x14BD, 0x6A89, 0x394D,
+ 0x6A8B, 0x45C8, 0x6A8D, 0x14BB, 0x6A8E, 0x079D, 0x6A90, 0x14BA, 0x6A91,
+ 0x394E, 0x6A94, 0x4215, 0x6A97, 0x14C0, 0x6A9C, 0x143B, 0x6A9D, 0x394F,
+ 0x6A9E, 0x3950, 0x6A9F, 0x3951, 0x6AA0, 0x14BC, 0x6AA1, 0x45CA, 0x6AA2,
+ 0x14BE, 0x6AA3, 0x14BF, 0x6AA5, 0x4216, 0x6AAA, 0x14CB, 0x6AAB, 0x45CC,
+ 0x6AAC, 0x14C7, 0x6AAE, 0x1450, 0x6AAF, 0x4C0E, 0x6AB3, 0x14C6, 0x6AB8,
+ 0x14C5, 0x6ABB, 0x14C2, 0x6ABD, 0x45CD, 0x6AC1, 0x14AB, 0x6AC2, 0x14C4,
+ 0x6AC3, 0x14C3, 0x6AC6, 0x45CE, 0x6AC8, 0x4C0F, 0x6AC9, 0x4C10, 0x6AD0,
+ 0x45D0, 0x6AD1, 0x14C9, 0x6AD3, 0x0FCC, 0x6AD4, 0x45CF, 0x6ADA, 0x14CC,
+ 0x6ADB, 0x06F3, 0x6ADC, 0x3952, 0x6ADD, 0x45D1, 0x6ADE, 0x14C8, 0x6ADF,
+ 0x14CA, 0x6AE2, 0x213B, 0x6AE4, 0x213C, 0x6AE7, 0x3953, 0x6AE8, 0x0D3B,
+ 0x6AEA, 0x14CD, 0x6AEC, 0x3954, 0x6AF1, 0x45D4, 0x6AF2, 0x45D5, 0x6AF3,
+ 0x45D6, 0x6AF8, 0x4EB8, 0x6AFA, 0x14D1, 0x6AFB, 0x14CE, 0x6AFD, 0x45D7,
+ 0x6B03, 0x4C11, 0x6B04, 0x0F5D, 0x6B05, 0x14CF, 0x6B0A, 0x149F, 0x6B0B,
+ 0x45D9, 0x6B0F, 0x45DA, 0x6B10, 0x45DB, 0x6B11, 0x45DC, 0x6B12, 0x14D2,
+ 0x6B16, 0x14D3, 0x6B17, 0x45DE, 0x6B1B, 0x4218, 0x6B1D, 0x04D7, 0x6B1E,
+ 0x3955, 0x6B1F, 0x14D5, 0x6B20, 0x073D, 0x6B21, 0x08CD, 0x6B23, 0x06CD,
+ 0x6B24, 0x3956, 0x6B27, 0x0524, 0x6B2C, 0x4219, 0x6B2F, 0x45E0, 0x6B32,
+ 0x0F49, 0x6B35, 0x3957, 0x6B37, 0x14D7, 0x6B38, 0x14D6, 0x6B39, 0x14D9,
+ 0x6B3A, 0x0657, 0x6B3B, 0x4C12, 0x6B3D, 0x06CE, 0x6B3E, 0x05FA, 0x6B3F,
+ 0x4C13, 0x6B43, 0x14DC, 0x6B46, 0x3958, 0x6B47, 0x14DB, 0x6B49, 0x14DD,
+ 0x6B4A, 0x45E1, 0x6B4C, 0x054E, 0x6B4E, 0x0B75, 0x6B50, 0x14DE, 0x6B53,
+ 0x05FB, 0x6B54, 0x14E0, 0x6B56, 0x3959, 0x6B58, 0x45E2, 0x6B59, 0x14DF,
+ 0x6B5B, 0x14E1, 0x6B5F, 0x14E2, 0x6B60, 0x395A, 0x6B61, 0x14E3, 0x6B62,
+ 0x08AD, 0x6B63, 0x0A59, 0x6B64, 0x0811, 0x6B65, 0x344A, 0x6B66, 0x0DE2,
+ 0x6B67, 0x421A, 0x6B69, 0x0E32, 0x6B6A, 0x0FEA, 0x6B6C, 0x45E3, 0x6B6F,
+ 0x08C3, 0x6B72, 0x35D9, 0x6B73, 0x0840, 0x6B74, 0x0FBA, 0x6B75, 0x45E4,
+ 0x6B77, 0x3456, 0x6B78, 0x14E4, 0x6B79, 0x14E5, 0x6B7A, 0x45E5, 0x6B7B,
+ 0x08AE, 0x6B7D, 0x4C14, 0x6B7E, 0x4C15, 0x6B7F, 0x14E6, 0x6B80, 0x14E7,
+ 0x6B81, 0x45E6, 0x6B82, 0x395B, 0x6B83, 0x14E9, 0x6B84, 0x14E8, 0x6B86,
+ 0x0E86, 0x6B89, 0x0968, 0x6B8A, 0x0918, 0x6B8B, 0x0892, 0x6B8D, 0x14EA,
+ 0x6B95, 0x14EC, 0x6B96, 0x09E9, 0x6B98, 0x14EB, 0x6B9B, 0x45E7, 0x6B9E,
+ 0x14ED, 0x6BA4, 0x14EE, 0x6BA9, 0x421B, 0x6BAA, 0x14EF, 0x6BAB, 0x14F0,
+ 0x6BAD, 0x421C, 0x6BAE, 0x45E8, 0x6BAF, 0x14F1, 0x6BB0, 0x4C16, 0x6BB1,
+ 0x14F3, 0x6BB2, 0x14F2, 0x6BB3, 0x14F4, 0x6BB4, 0x0525, 0x6BB5, 0x0B88,
+ 0x6BB7, 0x14F5, 0x6BBA, 0x0874, 0x6BBB, 0x05AA, 0x6BBC, 0x14F6, 0x6BBD,
+ 0x45EA, 0x6BBE, 0x395C, 0x6BBF, 0x0C3C, 0x6BC0, 0x119D, 0x6BC5, 0x063D,
+ 0x6BC6, 0x14F7, 0x6BC7, 0x45EB, 0x6BC8, 0x45EC, 0x6BC9, 0x45ED, 0x6BCB,
+ 0x14F8, 0x6BCC, 0x3744, 0x6BCD, 0x0E3C, 0x6BCE, 0x0E96, 0x6BCF, 0x344C,
+ 0x6BD2, 0x0C9F, 0x6BD3, 0x14F9, 0x6BD4, 0x0D7A, 0x6BD6, 0x213D, 0x6BD7,
+ 0x421D, 0x6BD8, 0x0D8F, 0x6BDA, 0x45EE, 0x6BDB, 0x0EDF, 0x6BDF, 0x14FA,
+ 0x6BE1, 0x395D, 0x6BE6, 0x45EF, 0x6BE7, 0x45F0, 0x6BEB, 0x14FC, 0x6BEC,
+ 0x14FB, 0x6BEE, 0x45F1, 0x6BEF, 0x14FE, 0x6BF1, 0x395E, 0x6BF3, 0x14FD,
+ 0x6BF7, 0x4C17, 0x6BF9, 0x4C18, 0x6BFF, 0x421E, 0x6C02, 0x45F2, 0x6C04,
+ 0x4C19, 0x6C05, 0x421F, 0x6C08, 0x1500, 0x6C09, 0x4C1A, 0x6C0A, 0x45F3,
+ 0x6C0D, 0x4C1B, 0x6C0E, 0x45F4, 0x6C0F, 0x08AF, 0x6C10, 0x395F, 0x6C11,
+ 0x0EBD, 0x6C13, 0x1501, 0x6C14, 0x1502, 0x6C17, 0x063E, 0x6C1B, 0x1503,
+ 0x6C23, 0x1505, 0x6C24, 0x1504, 0x6C2C, 0x4C1C, 0x6C33, 0x3960, 0x6C34,
+ 0x0A2B, 0x6C35, 0x3961, 0x6C36, 0x45F5, 0x6C37, 0x0DAB, 0x6C38, 0x04EC,
+ 0x6C3A, 0x4F55, 0x6C3E, 0x0D59, 0x6C3F, 0x213E, 0x6C40, 0x0C11, 0x6C41,
+ 0x094B, 0x6C42, 0x067B, 0x6C4A, 0x4C1D, 0x6C4D, 0x45F7, 0x6C4E, 0x0D5A,
+ 0x6C50, 0x08DA, 0x6C52, 0x4C1E, 0x6C54, 0x4C1F, 0x6C55, 0x1507, 0x6C57,
+ 0x05FC, 0x6C59, 0x3963, 0x6C5A, 0x051A, 0x6C5B, 0x45F8, 0x6C5C, 0x213F,
+ 0x6C5D, 0x0CCA, 0x6C5E, 0x1506, 0x6C5F, 0x07D0, 0x6C60, 0x0B91, 0x6C62,
+ 0x1508, 0x6C67, 0x460A, 0x6C68, 0x1510, 0x6C6A, 0x1509, 0x6C6D, 0x45F9,
+ 0x6C6F, 0x2141, 0x6C70, 0x0B21, 0x6C72, 0x067C, 0x6C73, 0x1511, 0x6C74,
+ 0x4220, 0x6C76, 0x3964, 0x6C79, 0x4C20, 0x6C7A, 0x073E, 0x6C7B, 0x3965,
+ 0x6C7D, 0x063F, 0x6C7E, 0x150F, 0x6C81, 0x150D, 0x6C82, 0x150A, 0x6C83,
+ 0x0F4A, 0x6C84, 0x45FA, 0x6C85, 0x3966, 0x6C86, 0x2140, 0x6C88, 0x0BDC,
+ 0x6C89, 0x45FB, 0x6C8C, 0x0CB1, 0x6C8D, 0x150B, 0x6C90, 0x1513, 0x6C92,
+ 0x1512, 0x6C93, 0x06F9, 0x6C94, 0x45FD, 0x6C95, 0x3967, 0x6C96, 0x052D,
+ 0x6C97, 0x45FE, 0x6C98, 0x4221, 0x6C99, 0x082B, 0x6C9A, 0x150C, 0x6C9B,
+ 0x150E, 0x6C9C, 0x3968, 0x6CA1, 0x0E85, 0x6CA2, 0x0B54, 0x6CAA, 0x3749,
+ 0x6CAB, 0x0EA5, 0x6CAC, 0x4C21, 0x6CAD, 0x45FF, 0x6CAE, 0x151B, 0x6CB1,
+ 0x151C, 0x6CB3, 0x054F, 0x6CB4, 0x4C22, 0x6CB8, 0x0DF8, 0x6CB9, 0x0F09,
+ 0x6CBA, 0x151E, 0x6CBB, 0x08CF, 0x6CBC, 0x09AA, 0x6CBD, 0x1517, 0x6CBE,
+ 0x151D, 0x6CBF, 0x050A, 0x6CC1, 0x06AF, 0x6CC2, 0x4600, 0x6CC4, 0x1514,
+ 0x6CC5, 0x1519, 0x6CC6, 0x4223, 0x6CC9, 0x0A98, 0x6CCA, 0x0D27, 0x6CCC,
+ 0x0D7B, 0x6CD0, 0x3969, 0x6CD2, 0x4C23, 0x6CD3, 0x1516, 0x6CD4, 0x396A,
+ 0x6CD5, 0x0E4F, 0x6CD6, 0x396B, 0x6CD7, 0x1518, 0x6CD9, 0x1521, 0x6CDA,
+ 0x2142, 0x6CDB, 0x151F, 0x6CDC, 0x4602, 0x6CDD, 0x151A, 0x6CE0, 0x396C,
+ 0x6CE1, 0x0E50, 0x6CE2, 0x0CFE, 0x6CE3, 0x067D, 0x6CE5, 0x0C1F, 0x6CE8,
+ 0x0BAB, 0x6CE9, 0x4603, 0x6CEA, 0x1522, 0x6CEB, 0x396D, 0x6CEC, 0x396E,
+ 0x6CED, 0x4604, 0x6CEE, 0x396F, 0x6CEF, 0x1520, 0x6CF0, 0x0B39, 0x6CF1,
+ 0x1515, 0x6CF3, 0x04ED, 0x6CFB, 0x4222, 0x6D00, 0x4606, 0x6D01, 0x3C35,
+ 0x6D04, 0x2143, 0x6D0A, 0x3970, 0x6D0B, 0x0F38, 0x6D0C, 0x152D, 0x6D0E,
+ 0x3971, 0x6D11, 0x3972, 0x6D12, 0x152C, 0x6D17, 0x0A9A, 0x6D19, 0x1529,
+ 0x6D1B, 0x0F56, 0x6D1E, 0x0C8E, 0x6D1F, 0x1523, 0x6D24, 0x4607, 0x6D25,
+ 0x0BE1, 0x6D26, 0x4608, 0x6D27, 0x4609, 0x6D29, 0x04EE, 0x6D2A, 0x07D1,
+ 0x6D2B, 0x1526, 0x6D2E, 0x3973, 0x6D2F, 0x460B, 0x6D31, 0x4224, 0x6D32,
+ 0x0931, 0x6D33, 0x152B, 0x6D34, 0x461E, 0x6D35, 0x152A, 0x6D36, 0x1525,
+ 0x6D38, 0x1528, 0x6D39, 0x4225, 0x6D3B, 0x05C6, 0x6D3C, 0x460C, 0x6D3D,
+ 0x1527, 0x6D3E, 0x0CFF, 0x6D3F, 0x4226, 0x6D41, 0x0F76, 0x6D44, 0x09DC,
+ 0x6D45, 0x0A99, 0x6D57, 0x3974, 0x6D58, 0x4227, 0x6D59, 0x1533, 0x6D5A,
+ 0x1531, 0x6D5B, 0x460D, 0x6D5C, 0x0DBF, 0x6D5E, 0x3975, 0x6D60, 0x460E,
+ 0x6D61, 0x4C24, 0x6D63, 0x152E, 0x6D64, 0x1530, 0x6D65, 0x3976, 0x6D66,
+ 0x04DC, 0x6D69, 0x07D2, 0x6D6A, 0x0FD8, 0x6D6C, 0x059B, 0x6D6E, 0x0DD4,
+ 0x6D6F, 0x2145, 0x6D70, 0x460F, 0x6D74, 0x0F4B, 0x6D77, 0x0582, 0x6D78,
+ 0x0A01, 0x6D79, 0x1532, 0x6D7C, 0x4C25, 0x6D80, 0x4610, 0x6D81, 0x4611,
+ 0x6D82, 0x3977, 0x6D85, 0x1537, 0x6D87, 0x2144, 0x6D88, 0x09AB, 0x6D89,
+ 0x342A, 0x6D8A, 0x4612, 0x6D8C, 0x0F1A, 0x6D8D, 0x4613, 0x6D8E, 0x1534,
+ 0x6D91, 0x4614, 0x6D93, 0x152F, 0x6D94, 0x4228, 0x6D95, 0x1535, 0x6D96,
+ 0x2146, 0x6D98, 0x4615, 0x6D99, 0x0FA6, 0x6D9B, 0x0C6D, 0x6D9C, 0x0C9A,
+ 0x6DAA, 0x4229, 0x6DAB, 0x461A, 0x6DAC, 0x2147, 0x6DAE, 0x461B, 0x6DAF,
+ 0x0594, 0x6DB2, 0x04F7, 0x6DB4, 0x461C, 0x6DB5, 0x153B, 0x6DB8, 0x153E,
+ 0x6DB9, 0x4C26, 0x6DBC, 0x0F8B, 0x6DBF, 0x3978, 0x6DC0, 0x0F4E, 0x6DC2,
+ 0x461D, 0x6DC4, 0x3979, 0x6DC5, 0x1545, 0x6DC6, 0x153F, 0x6DC7, 0x153C,
+ 0x6DC8, 0x461F, 0x6DCA, 0x397A, 0x6DCB, 0x0F9C, 0x6DCC, 0x1542, 0x6DCE,
+ 0x4620, 0x6DCF, 0x2148, 0x6DD0, 0x3C36, 0x6DD1, 0x0954, 0x6DD2, 0x1544,
+ 0x6DD5, 0x1549, 0x6DD6, 0x397B, 0x6DD8, 0x0C6B, 0x6DD9, 0x1547, 0x6DDA,
+ 0x3453, 0x6DDB, 0x422A, 0x6DDD, 0x422B, 0x6DDE, 0x1541, 0x6DDF, 0x4621,
+ 0x6DE1, 0x0B76, 0x6DE4, 0x1548, 0x6DE6, 0x153D, 0x6DE8, 0x1543, 0x6DE9,
+ 0x397C, 0x6DEA, 0x154A, 0x6DEB, 0x04C0, 0x6DEC, 0x1540, 0x6DEE, 0x154B,
+ 0x6DF0, 0x4C27, 0x6DF1, 0x0A02, 0x6DF2, 0x214A, 0x6DF3, 0x0969, 0x6DF5,
+ 0x0DF5, 0x6DF6, 0x4622, 0x6DF7, 0x081E, 0x6DF8, 0x2149, 0x6DF9, 0x1538,
+ 0x6DFA, 0x1546, 0x6DFB, 0x0C34, 0x6DFC, 0x214B, 0x6E05, 0x0A5A, 0x6E07,
+ 0x05C7, 0x6E08, 0x0841, 0x6E09, 0x09AC, 0x6E0A, 0x153A, 0x6E0B, 0x094C,
+ 0x6E13, 0x0722, 0x6E15, 0x1539, 0x6E17, 0x3746, 0x6E19, 0x154F, 0x6E1A,
+ 0x0977, 0x6E1B, 0x076E, 0x6E1D, 0x155E, 0x6E1E, 0x4624, 0x6E1F, 0x1558,
+ 0x6E20, 0x068E, 0x6E21, 0x0C49, 0x6E22, 0x397D, 0x6E23, 0x1553, 0x6E24,
+ 0x155C, 0x6E25, 0x0473, 0x6E26, 0x04D4, 0x6E27, 0x214E, 0x6E29, 0x0539,
+ 0x6E2B, 0x1555, 0x6E2C, 0x0B0C, 0x6E2D, 0x154C, 0x6E2E, 0x154E, 0x6E2F,
+ 0x07D3, 0x6E32, 0x4626, 0x6E34, 0x3412, 0x6E36, 0x4623, 0x6E38, 0x155F,
+ 0x6E39, 0x214C, 0x6E3A, 0x155A, 0x6E3C, 0x214F, 0x6E3E, 0x1552, 0x6E42,
+ 0x3C37, 0x6E43, 0x1559, 0x6E44, 0x422C, 0x6E45, 0x4C28, 0x6E48, 0x4627,
+ 0x6E49, 0x4628, 0x6E4A, 0x0EB7, 0x6E4B, 0x4629, 0x6E4C, 0x462A, 0x6E4D,
+ 0x1557, 0x6E4E, 0x155B, 0x6E4F, 0x462B, 0x6E51, 0x397E, 0x6E53, 0x462C,
+ 0x6E54, 0x462D, 0x6E56, 0x0784, 0x6E57, 0x462E, 0x6E58, 0x09AD, 0x6E5B,
+ 0x0B77, 0x6E5C, 0x214D, 0x6E5E, 0x422D, 0x6E5F, 0x1551, 0x6E63, 0x462F,
+ 0x6E67, 0x0F19, 0x6E6B, 0x1554, 0x6E6E, 0x154D, 0x6E6F, 0x0C6C, 0x6E72,
+ 0x1550, 0x6E73, 0x4C29, 0x6E76, 0x1556, 0x6E7B, 0x4C2A, 0x6E7D, 0x4C2B,
+ 0x6E7E, 0x0FF7, 0x6E7F, 0x08EA, 0x6E80, 0x0EAC, 0x6E82, 0x1560, 0x6E89,
+ 0x4C2C, 0x6E8C, 0x0D42, 0x6E8F, 0x156C, 0x6E90, 0x076F, 0x6E93, 0x4631,
+ 0x6E96, 0x096A, 0x6E98, 0x1562, 0x6E9C, 0x0F77, 0x6E9D, 0x07D4, 0x6E9F,
+ 0x156F, 0x6EA2, 0x04B2, 0x6EA5, 0x156D, 0x6EA7, 0x4632, 0x6EAA, 0x1561,
+ 0x6EAB, 0x340C, 0x6EAF, 0x1567, 0x6EB1, 0x422E, 0x6EB2, 0x1569, 0x6EB4,
+ 0x4633, 0x6EB6, 0x0F39, 0x6EB7, 0x1564, 0x6EBA, 0x0C28, 0x6EBC, 0x4C2D,
+ 0x6EBD, 0x1566, 0x6EBF, 0x2150, 0x6EC1, 0x422F, 0x6EC2, 0x156E, 0x6EC3,
+ 0x4634, 0x6EC4, 0x1568, 0x6EC5, 0x0ED3, 0x6EC7, 0x397F, 0x6EC9, 0x1563,
+ 0x6ECA, 0x3980, 0x6ECB, 0x08CE, 0x6ECC, 0x157B, 0x6ECE, 0x3981, 0x6ED1,
+ 0x05C8, 0x6ED3, 0x1565, 0x6ED4, 0x156A, 0x6ED5, 0x156B, 0x6ED9, 0x3C38,
+ 0x6EDA, 0x4C2E, 0x6EDB, 0x4C2F, 0x6EDD, 0x0B4C, 0x6EDE, 0x0B3A, 0x6EE6,
+ 0x3C24, 0x6EEB, 0x4636, 0x6EEC, 0x1573, 0x6EEF, 0x1579, 0x6EF2, 0x1577,
+ 0x6EF4, 0x0C23, 0x6EF7, 0x157E, 0x6EF8, 0x1574, 0x6EF9, 0x4637, 0x6EFB,
+ 0x4638, 0x6EFD, 0x3982, 0x6EFE, 0x1575, 0x6EFF, 0x155D, 0x6F01, 0x0693,
+ 0x6F02, 0x0DAC, 0x6F06, 0x08EB, 0x6F09, 0x0809, 0x6F0A, 0x4639, 0x6F0C,
+ 0x463A, 0x6F0F, 0x0FD9, 0x6F10, 0x4230, 0x6F11, 0x1571, 0x6F13, 0x157D,
+ 0x6F14, 0x050B, 0x6F15, 0x0AE8, 0x6F18, 0x463B, 0x6F1A, 0x3983, 0x6F20,
+ 0x0D2F, 0x6F22, 0x05FD, 0x6F23, 0x0FC2, 0x6F25, 0x463C, 0x6F26, 0x4C30,
+ 0x6F29, 0x4C31, 0x6F2A, 0x3984, 0x6F2B, 0x0EAD, 0x6F2C, 0x0BEE, 0x6F2F,
+ 0x3985, 0x6F30, 0x4C32, 0x6F31, 0x1578, 0x6F32, 0x157A, 0x6F33, 0x3986,
+ 0x6F35, 0x4635, 0x6F36, 0x463D, 0x6F38, 0x0AB4, 0x6F3C, 0x463E, 0x6F3E,
+ 0x157C, 0x6F3F, 0x1576, 0x6F41, 0x1570, 0x6F45, 0x05FF, 0x6F51, 0x1E60,
+ 0x6F52, 0x4640, 0x6F54, 0x073F, 0x6F57, 0x4641, 0x6F58, 0x158A, 0x6F59,
+ 0x4231, 0x6F5A, 0x3987, 0x6F5B, 0x1585, 0x6F5C, 0x0A9C, 0x6F5E, 0x3988,
+ 0x6F5F, 0x05C1, 0x6F60, 0x4642, 0x6F61, 0x4232, 0x6F62, 0x3989, 0x6F64,
+ 0x096B, 0x6F66, 0x158E, 0x6F68, 0x4643, 0x6F6D, 0x1587, 0x6F6E, 0x0BC8,
+ 0x6F6F, 0x1584, 0x6F70, 0x0BF5, 0x6F74, 0x15A7, 0x6F78, 0x1581, 0x6F7A,
+ 0x1580, 0x6F7C, 0x1589, 0x6F7D, 0x398A, 0x6F7E, 0x4233, 0x6F80, 0x1583,
+ 0x6F81, 0x1582, 0x6F82, 0x1588, 0x6F84, 0x0A45, 0x6F86, 0x157F, 0x6F87,
+ 0x4C33, 0x6F88, 0x2151, 0x6F8B, 0x398B, 0x6F8C, 0x4234, 0x6F8D, 0x398C,
+ 0x6F8E, 0x158B, 0x6F90, 0x4644, 0x6F91, 0x158C, 0x6F92, 0x398D, 0x6F94,
+ 0x398E, 0x6F96, 0x4645, 0x6F97, 0x05FE, 0x6F98, 0x363C, 0x6F9A, 0x398F,
+ 0x6F9D, 0x4C34, 0x6F9F, 0x4647, 0x6FA0, 0x4235, 0x6FA1, 0x1591, 0x6FA3,
+ 0x1590, 0x6FA4, 0x1592, 0x6FA5, 0x4648, 0x6FA7, 0x3990, 0x6FA8, 0x3991,
+ 0x6FAA, 0x1595, 0x6FAE, 0x4C35, 0x6FAF, 0x4649, 0x6FB1, 0x0C3D, 0x6FB3,
+ 0x158F, 0x6FB5, 0x2152, 0x6FB6, 0x3992, 0x6FB7, 0x4C36, 0x6FB9, 0x1593,
+ 0x6FBC, 0x4236, 0x6FBE, 0x4646, 0x6FC0, 0x0739, 0x6FC1, 0x0B59, 0x6FC2,
+ 0x158D, 0x6FC3, 0x0CF1, 0x6FC6, 0x1594, 0x6FC7, 0x4237, 0x6FC8, 0x464B,
+ 0x6FC9, 0x464C, 0x6FCA, 0x4238, 0x6FD4, 0x1599, 0x6FD5, 0x1597, 0x6FD8,
+ 0x159A, 0x6FDA, 0x3993, 0x6FDB, 0x159D, 0x6FDE, 0x3994, 0x6FDF, 0x1596,
+ 0x6FE0, 0x07FC, 0x6FE1, 0x0CDE, 0x6FE4, 0x1536, 0x6FE9, 0x464D, 0x6FEB,
+ 0x0F5E, 0x6FEC, 0x1598, 0x6FEE, 0x159C, 0x6FEF, 0x0B55, 0x6FF0, 0x4239,
+ 0x6FF1, 0x159B, 0x6FF3, 0x1586, 0x6FF5, 0x2153, 0x6FF6, 0x1BA4, 0x6FF9,
+ 0x3C23, 0x6FFA, 0x15A0, 0x6FFC, 0x464F, 0x6FFE, 0x15A4, 0x7000, 0x4650,
+ 0x7001, 0x15A2, 0x7005, 0x2154, 0x7006, 0x1E50, 0x7007, 0x2155, 0x7009,
+ 0x159E, 0x700A, 0x4651, 0x700B, 0x159F, 0x700D, 0x4C37, 0x700F, 0x15A3,
+ 0x7011, 0x15A1, 0x7015, 0x0DC0, 0x7018, 0x15A9, 0x701A, 0x15A6, 0x701B,
+ 0x15A5, 0x701D, 0x15A8, 0x701E, 0x0CAC, 0x701F, 0x15AA, 0x7020, 0x4C38,
+ 0x7023, 0x4652, 0x7026, 0x0BB3, 0x7027, 0x0B4D, 0x7028, 0x2156, 0x702C,
+ 0x0A49, 0x7030, 0x15AB, 0x7032, 0x15AD, 0x7039, 0x3996, 0x703A, 0x4654,
+ 0x703C, 0x3997, 0x703E, 0x15AC, 0x7043, 0x4655, 0x7047, 0x4656, 0x7049,
+ 0x4C39, 0x704A, 0x4F52, 0x704B, 0x4657, 0x704C, 0x1572, 0x704E, 0x423A,
+ 0x7051, 0x15AE, 0x7054, 0x3999, 0x7058, 0x0CBF, 0x705D, 0x399A, 0x705E,
+ 0x399B, 0x7063, 0x15AF, 0x7064, 0x399C, 0x7065, 0x4659, 0x7069, 0x465A,
+ 0x706B, 0x0550, 0x706C, 0x399D, 0x706E, 0x465B, 0x706F, 0x0C6E, 0x7070,
+ 0x0583, 0x7075, 0x423B, 0x7076, 0x465C, 0x7078, 0x067E, 0x707C, 0x090A,
+ 0x707D, 0x0842, 0x707E, 0x399E, 0x7081, 0x399F, 0x7085, 0x2157, 0x7086,
+ 0x465D, 0x7089, 0x0FCD, 0x708A, 0x0A2C, 0x708E, 0x050C, 0x7092, 0x15B1,
+ 0x7095, 0x39A0, 0x7097, 0x465E, 0x7098, 0x4C3A, 0x7099, 0x15B0, 0x709F,
+ 0x4660, 0x70A4, 0x423C, 0x70AB, 0x2158, 0x70AC, 0x15B4, 0x70AD, 0x0B78,
+ 0x70AE, 0x15B7, 0x70AF, 0x15B2, 0x70B0, 0x4C3B, 0x70B1, 0x4661, 0x70B3,
+ 0x15B6, 0x70B7, 0x39A1, 0x70B8, 0x15B5, 0x70B9, 0x0C3A, 0x70BA, 0x049D,
+ 0x70BB, 0x20AD, 0x70C8, 0x0FBD, 0x70CA, 0x4664, 0x70CB, 0x15B9, 0x70CF,
+ 0x04CA, 0x70D1, 0x4665, 0x70D3, 0x39A2, 0x70D4, 0x39A3, 0x70D5, 0x4C3C,
+ 0x70D6, 0x4C3D, 0x70D8, 0x39A4, 0x70D9, 0x15BB, 0x70DC, 0x39A5, 0x70DD,
+ 0x15BA, 0x70DF, 0x15B8, 0x70E4, 0x423D, 0x70EC, 0x4663, 0x70F1, 0x15B3,
+ 0x70F9, 0x0E51, 0x70FD, 0x15BD, 0x7103, 0x4666, 0x7104, 0x215A, 0x7106,
+ 0x4667, 0x7107, 0x39A6, 0x7108, 0x4668, 0x7109, 0x15BC, 0x710C, 0x4669,
+ 0x710F, 0x2159, 0x7114, 0x050D, 0x7119, 0x15BF, 0x711A, 0x0E02, 0x711C,
+ 0x15BE, 0x711E, 0x423F, 0x7120, 0x39A7, 0x7121, 0x0EC1, 0x7126, 0x09AF,
+ 0x712B, 0x423E, 0x712E, 0x4240, 0x712F, 0x466B, 0x7130, 0x1DDC, 0x7131,
+ 0x39A8, 0x7136, 0x0AB5, 0x713C, 0x09AE, 0x7145, 0x4C3E, 0x7146, 0x215C,
+ 0x7147, 0x215D, 0x7149, 0x0FC3, 0x714A, 0x39A9, 0x714C, 0x15C5, 0x714E,
+ 0x0A9D, 0x7150, 0x466C, 0x7151, 0x4241, 0x7152, 0x39AA, 0x7153, 0x466D,
+ 0x7155, 0x15C1, 0x7156, 0x15C6, 0x7159, 0x050E, 0x715C, 0x215B, 0x715E,
+ 0x466E, 0x7160, 0x39AB, 0x7162, 0x15C4, 0x7164, 0x0D17, 0x7165, 0x15C0,
+ 0x7166, 0x15C3, 0x7167, 0x09B0, 0x7168, 0x4242, 0x7169, 0x0D65, 0x716C,
+ 0x15C7, 0x716E, 0x08FD, 0x7179, 0x39AC, 0x717D, 0x0A9E, 0x7180, 0x4671,
+ 0x7184, 0x15CA, 0x7185, 0x4243, 0x7187, 0x4244, 0x7188, 0x15C2, 0x718A,
+ 0x06FD, 0x718F, 0x15C8, 0x7192, 0x39AD, 0x7194, 0x0F3A, 0x7195, 0x15CB,
+ 0x7196, 0x4670, 0x7199, 0x205D, 0x719B, 0x4672, 0x719F, 0x0959, 0x71A0,
+ 0x4673, 0x71A2, 0x4674, 0x71A8, 0x15CC, 0x71AC, 0x15CD, 0x71AE, 0x4675,
+ 0x71AF, 0x4676, 0x71B1, 0x0CE4, 0x71B2, 0x4C3F, 0x71B3, 0x3C25, 0x71B9,
+ 0x15CF, 0x71BA, 0x4245, 0x71BE, 0x15D0, 0x71C1, 0x215F, 0x71C3, 0x0CE9,
+ 0x71C4, 0x4246, 0x71C8, 0x0C6F, 0x71C9, 0x15D2, 0x71CB, 0x39AF, 0x71CE,
+ 0x15D4, 0x71D0, 0x0F9D, 0x71D2, 0x15D1, 0x71D3, 0x39B0, 0x71D4, 0x15D3,
+ 0x71D5, 0x050F, 0x71D6, 0x39B1, 0x71D7, 0x15CE, 0x71D9, 0x4678, 0x71DC,
+ 0x4679, 0x71DF, 0x114E, 0x71E0, 0x15D5, 0x71E5, 0x0AE9, 0x71E6, 0x0886,
+ 0x71E7, 0x15D7, 0x71EC, 0x15D6, 0x71ED, 0x09EA, 0x71EE, 0x10EE, 0x71F4,
+ 0x4C40, 0x71F5, 0x15D8, 0x71F9, 0x15DA, 0x71FB, 0x15C9, 0x71FC, 0x15D9,
+ 0x71FE, 0x2160, 0x71FF, 0x15DB, 0x7200, 0x39B2, 0x7206, 0x0D30, 0x7207,
+ 0x467A, 0x720D, 0x15DC, 0x7210, 0x15DD, 0x7215, 0x4247, 0x7217, 0x4C41,
+ 0x721B, 0x15DE, 0x721D, 0x39B3, 0x721F, 0x4C42, 0x7228, 0x15DF, 0x722A,
+ 0x0BFA, 0x722B, 0x39B4, 0x722C, 0x15E1, 0x722D, 0x15E0, 0x7230, 0x15E2,
+ 0x7232, 0x15E3, 0x7234, 0x467C, 0x7235, 0x090B, 0x7236, 0x0DD5, 0x7238,
+ 0x39B5, 0x7239, 0x467D, 0x723A, 0x0EF8, 0x723B, 0x15E4, 0x723C, 0x15E5,
+ 0x723D, 0x0AD8, 0x723E, 0x08D0, 0x723F, 0x15E6, 0x7240, 0x15E7, 0x7241,
+ 0x39B6, 0x7242, 0x467E, 0x7243, 0x4C43, 0x7246, 0x15E8, 0x7247, 0x0E22,
+ 0x7248, 0x0D5B, 0x724B, 0x15E9, 0x724C, 0x0D0D, 0x724F, 0x4C44, 0x7250,
+ 0x4C45, 0x7252, 0x0BC9, 0x7253, 0x39B7, 0x7255, 0x39B8, 0x7256, 0x39B9,
+ 0x7257, 0x467F, 0x7258, 0x15EA, 0x7259, 0x0567, 0x725A, 0x4C46, 0x725B,
+ 0x0687, 0x725C, 0x39BA, 0x725D, 0x0ED2, 0x725F, 0x0EC2, 0x7260, 0x4C47,
+ 0x7261, 0x0534, 0x7262, 0x0FDA, 0x7263, 0x4680, 0x7267, 0x0E80, 0x7268,
+ 0x4C48, 0x7269, 0x0DFA, 0x726E, 0x4682, 0x726F, 0x4683, 0x7272, 0x0A5B,
+ 0x7274, 0x15EB, 0x7277, 0x4C49, 0x7278, 0x4684, 0x7279, 0x0C9B, 0x727D,
+ 0x0757, 0x727E, 0x15EC, 0x727F, 0x4685, 0x7280, 0x0844, 0x7281, 0x15EE,
+ 0x7282, 0x15ED, 0x7284, 0x4C4A, 0x7287, 0x15EF, 0x728D, 0x39BB, 0x728E,
+ 0x4686, 0x7292, 0x15F0, 0x7296, 0x15F1, 0x729B, 0x4249, 0x72A0, 0x0658,
+ 0x72A2, 0x15F2, 0x72A7, 0x15F3, 0x72AC, 0x0758, 0x72AD, 0x39BC, 0x72AE,
+ 0x4688, 0x72AF, 0x0D5C, 0x72B0, 0x4689, 0x72B1, 0x2161, 0x72B2, 0x15F5,
+ 0x72B4, 0x39BD, 0x72B6, 0x09DD, 0x72B9, 0x15F4, 0x72BE, 0x2162, 0x72C0,
+ 0x342B, 0x72C1, 0x468A, 0x72C2, 0x06B0, 0x72C3, 0x15F6, 0x72C4, 0x15F8,
+ 0x72C6, 0x15F7, 0x72C7, 0x39BE, 0x72C9, 0x4C4B, 0x72CC, 0x468C, 0x72CE,
+ 0x15F9, 0x72D0, 0x0785, 0x72D2, 0x15FA, 0x72D7, 0x06E1, 0x72D9, 0x0AC2,
+ 0x72DB, 0x080F, 0x72E0, 0x15FC, 0x72E1, 0x15FD, 0x72E2, 0x15FB, 0x72E5,
+ 0x4C4C, 0x72E9, 0x0919, 0x72EC, 0x0CA0, 0x72ED, 0x06B1, 0x72F3, 0x468F,
+ 0x72F4, 0x4C4D, 0x72F7, 0x15FF, 0x72F8, 0x0B6A, 0x72F9, 0x15FE, 0x72FA,
+ 0x4690, 0x72FB, 0x39BF, 0x72FC, 0x0FDB, 0x72FD, 0x0D18, 0x7302, 0x4C4E,
+ 0x7304, 0x39C0, 0x7305, 0x39C1, 0x7307, 0x4691, 0x730A, 0x1602, 0x730B,
+ 0x4C4F, 0x7312, 0x4692, 0x7316, 0x1604, 0x7317, 0x1601, 0x7318, 0x4693,
+ 0x7319, 0x4694, 0x731B, 0x0EE0, 0x731C, 0x1603, 0x731D, 0x1605, 0x731E,
+ 0x4C50, 0x731F, 0x0F8C, 0x7322, 0x4C51, 0x7324, 0x2163, 0x7325, 0x1609,
+ 0x7327, 0x424B, 0x7328, 0x39C2, 0x7329, 0x1608, 0x732A, 0x0BB4, 0x732B,
+ 0x0CE3, 0x732C, 0x4697, 0x732E, 0x0759, 0x732F, 0x1607, 0x7331, 0x39C3,
+ 0x7333, 0x4698, 0x7334, 0x1606, 0x7336, 0x0F1B, 0x7337, 0x0F1C, 0x7339,
+ 0x4696, 0x733A, 0x4C52, 0x733B, 0x4C53, 0x733D, 0x4699, 0x733E, 0x160A,
+ 0x733F, 0x0510, 0x7343, 0x39C4, 0x7344, 0x0808, 0x7345, 0x08B0, 0x734D,
+ 0x4C54, 0x734E, 0x160B, 0x734F, 0x160C, 0x7350, 0x424C, 0x7352, 0x469A,
+ 0x7357, 0x160E, 0x7358, 0x4C55, 0x7363, 0x094D, 0x7366, 0x424D, 0x7367,
+ 0x4C56, 0x7368, 0x1610, 0x736A, 0x160F, 0x736B, 0x469C, 0x736C, 0x39C5,
+ 0x736E, 0x469E, 0x736F, 0x469F, 0x7370, 0x1611, 0x7371, 0x46A0, 0x7372,
+ 0x05AB, 0x7375, 0x1613, 0x7377, 0x2165, 0x7378, 0x1612, 0x737A, 0x1615,
+ 0x737B, 0x1614, 0x737C, 0x39C6, 0x7381, 0x46A1, 0x7383, 0x39C7, 0x7384,
+ 0x0770, 0x7385, 0x39C8, 0x7386, 0x39C9, 0x7387, 0x0F70, 0x7389, 0x06C4,
+ 0x738A, 0x46A2, 0x738B, 0x0526, 0x7394, 0x46A3, 0x7395, 0x39CA, 0x7396,
+ 0x06E2, 0x7398, 0x46A4, 0x739C, 0x46A5, 0x739E, 0x39CB, 0x739F, 0x39CC,
+ 0x73A0, 0x39CD, 0x73A2, 0x424E, 0x73A5, 0x46A6, 0x73A6, 0x39CE, 0x73A8,
+ 0x3C3F, 0x73A9, 0x061D, 0x73AB, 0x39CF, 0x73B2, 0x0FB0, 0x73B3, 0x1617,
+ 0x73B5, 0x39D0, 0x73B7, 0x39D1, 0x73B9, 0x46A7, 0x73BA, 0x35EA, 0x73BB,
+ 0x1619, 0x73BC, 0x39D2, 0x73BD, 0x2166, 0x73BF, 0x46A8, 0x73C0, 0x161A,
+ 0x73C2, 0x0551, 0x73C5, 0x46A9, 0x73C8, 0x1616, 0x73C9, 0x2167, 0x73CA,
+ 0x0887, 0x73CB, 0x46AA, 0x73CD, 0x0BDD, 0x73CE, 0x1618, 0x73CF, 0x39D3,
+ 0x73D2, 0x216A, 0x73D6, 0x2168, 0x73D9, 0x39D4, 0x73DE, 0x161D, 0x73E0,
+ 0x091A, 0x73E1, 0x46AB, 0x73E3, 0x2169, 0x73E4, 0x3C39, 0x73E5, 0x161B,
+ 0x73E7, 0x46AC, 0x73E9, 0x39D5, 0x73EA, 0x0714, 0x73ED, 0x0D5D, 0x73EE,
+ 0x161C, 0x73F1, 0x1637, 0x73F4, 0x39D6, 0x73F5, 0x216C, 0x73F8, 0x1622,
+ 0x73F9, 0x46AD, 0x73FA, 0x46AF, 0x73FD, 0x39D7, 0x73FE, 0x0771, 0x7401,
+ 0x46B0, 0x7403, 0x067F, 0x7404, 0x39D8, 0x7405, 0x161F, 0x7406, 0x0F67,
+ 0x7407, 0x216B, 0x7409, 0x0F78, 0x740A, 0x39D9, 0x7413, 0x46AE, 0x741A,
+ 0x39DA, 0x741B, 0x39DB, 0x7421, 0x3C3A, 0x7422, 0x0B56, 0x7424, 0x39DC,
+ 0x7425, 0x1621, 0x7426, 0x216D, 0x7428, 0x39DD, 0x7429, 0x216F, 0x742A,
+ 0x216E, 0x742B, 0x424F, 0x742C, 0x39DE, 0x742E, 0x2170, 0x742F, 0x39DF,
+ 0x7430, 0x39E0, 0x7431, 0x39E1, 0x7432, 0x1623, 0x7433, 0x0F9E, 0x7434,
+ 0x06CF, 0x7435, 0x0D90, 0x7436, 0x0D00, 0x7439, 0x39E2, 0x743A, 0x1624,
+ 0x743F, 0x1626, 0x7440, 0x46B2, 0x7441, 0x1629, 0x7443, 0x46B3, 0x7444,
+ 0x39E3, 0x7446, 0x4250, 0x7447, 0x39E4, 0x744B, 0x39E5, 0x744D, 0x39E6,
+ 0x7451, 0x39E7, 0x7452, 0x46B4, 0x7453, 0x46B1, 0x7455, 0x1625, 0x7457,
+ 0x39E8, 0x7459, 0x1628, 0x745A, 0x079E, 0x745B, 0x04EF, 0x745C, 0x162A,
+ 0x745D, 0x46B5, 0x745E, 0x0A36, 0x745F, 0x1627, 0x7460, 0x0FA4, 0x7462,
+ 0x4251, 0x7463, 0x162D, 0x7464, 0x1D35, 0x7466, 0x39E9, 0x7469, 0x162B,
+ 0x746A, 0x162E, 0x746B, 0x39EA, 0x746D, 0x4252, 0x746F, 0x1620, 0x7470,
+ 0x162C, 0x7471, 0x39EB, 0x7472, 0x4C57, 0x7473, 0x082C, 0x7476, 0x162F,
+ 0x747E, 0x1630, 0x7480, 0x39EC, 0x7481, 0x46B6, 0x7483, 0x0F68, 0x7485,
+ 0x39ED, 0x7486, 0x39EE, 0x7487, 0x39EF, 0x7488, 0x46B7, 0x7489, 0x2172,
+ 0x748B, 0x1631, 0x7490, 0x39F0, 0x7492, 0x46B9, 0x7497, 0x46BA, 0x7498,
+ 0x39F1, 0x7499, 0x46BB, 0x749C, 0x39F2, 0x749E, 0x1632, 0x749F, 0x2173,
+ 0x74A0, 0x39F3, 0x74A1, 0x46BC, 0x74A2, 0x161E, 0x74A3, 0x39F4, 0x74A5,
+ 0x46BD, 0x74A6, 0x4253, 0x74A7, 0x1633, 0x74A8, 0x39F5, 0x74A9, 0x4254,
+ 0x74AA, 0x46BE, 0x74AB, 0x39F6, 0x74AF, 0x4C58, 0x74B0, 0x0600, 0x74B5,
+ 0x39F7, 0x74B9, 0x46BF, 0x74BA, 0x46C1, 0x74BB, 0x46C0, 0x74BD, 0x08D1,
+ 0x74BF, 0x39F8, 0x74C8, 0x39F9, 0x74C9, 0x4255, 0x74CA, 0x1634, 0x74CF,
+ 0x1635, 0x74D4, 0x1636, 0x74D6, 0x46C2, 0x74D8, 0x46C3, 0x74DA, 0x39FA,
+ 0x74DC, 0x04DD, 0x74DE, 0x39FB, 0x74DF, 0x4C59, 0x74E0, 0x1638, 0x74E2,
+ 0x0DAD, 0x74E3, 0x1639, 0x74E4, 0x4C5A, 0x74E6, 0x05E0, 0x74E7, 0x163A,
+ 0x74E9, 0x163B, 0x74EB, 0x46C4, 0x74EE, 0x163C, 0x74EF, 0x3750, 0x74F0,
+ 0x163E, 0x74F1, 0x163F, 0x74F2, 0x163D, 0x74F4, 0x4C5B, 0x74F6, 0x0DC5,
+ 0x74F7, 0x1641, 0x74F8, 0x1640, 0x74FA, 0x46C6, 0x74FB, 0x4C5C, 0x74FF,
+ 0x4256, 0x7501, 0x2174, 0x7503, 0x1643, 0x7504, 0x1642, 0x7505, 0x1644,
+ 0x750C, 0x1645, 0x750D, 0x1647, 0x750E, 0x1646, 0x7511, 0x080B, 0x7513,
+ 0x1649, 0x7515, 0x1648, 0x7516, 0x4C5D, 0x7517, 0x4257, 0x7518, 0x0601,
+ 0x751A, 0x0A19, 0x751C, 0x0C36, 0x751E, 0x164A, 0x751F, 0x0A5C, 0x7520,
+ 0x46C8, 0x7521, 0x4C5E, 0x7522, 0x35DE, 0x7523, 0x0888, 0x7524, 0x46C9,
+ 0x7525, 0x051B, 0x7526, 0x164B, 0x7528, 0x0F3B, 0x752A, 0x46CA, 0x752B,
+ 0x0E33, 0x752C, 0x164C, 0x752F, 0x20F2, 0x7530, 0x0C3E, 0x7531, 0x0F1D,
+ 0x7532, 0x07D5, 0x7533, 0x0A03, 0x7537, 0x0B89, 0x7538, 0x10C9, 0x753A,
+ 0x0BCA, 0x753B, 0x0568, 0x753C, 0x164D, 0x753D, 0x46CD, 0x753E, 0x46CE,
+ 0x753F, 0x4C5F, 0x7540, 0x46CF, 0x7544, 0x164E, 0x7546, 0x1653, 0x7548,
+ 0x46D0, 0x7549, 0x1651, 0x754A, 0x1650, 0x754B, 0x13C7, 0x754C, 0x0584,
+ 0x754D, 0x164F, 0x754E, 0x39FC, 0x754F, 0x049E, 0x7550, 0x46D1, 0x7551,
+ 0x0D3E, 0x7552, 0x46D2, 0x7554, 0x0D5E, 0x7559, 0x0F79, 0x755A, 0x1654,
+ 0x755B, 0x1652, 0x755C, 0x0B9A, 0x755D, 0x0A4A, 0x755E, 0x4C60, 0x7560,
+ 0x0D3F, 0x7562, 0x0D9F, 0x7564, 0x1656, 0x7565, 0x0F74, 0x7566, 0x0723,
+ 0x7567, 0x1657, 0x7569, 0x1655, 0x756A, 0x0D6A, 0x756B, 0x1658, 0x756C,
+ 0x3C3B, 0x756D, 0x1659, 0x756F, 0x2175, 0x7570, 0x049F, 0x7571, 0x46D4,
+ 0x7572, 0x46D3, 0x7573, 0x09DE, 0x7574, 0x165E, 0x7575, 0x3751, 0x7576,
+ 0x165B, 0x7577, 0x0CC5, 0x7578, 0x165A, 0x7579, 0x39FD, 0x757A, 0x46D5,
+ 0x757D, 0x46D6, 0x757E, 0x46D7, 0x757F, 0x0640, 0x7581, 0x39FE, 0x7582,
+ 0x1661, 0x7586, 0x165C, 0x7587, 0x165D, 0x7589, 0x1660, 0x758A, 0x165F,
+ 0x758B, 0x0D97, 0x758C, 0x46D8, 0x758E, 0x0AC4, 0x758F, 0x0AC3, 0x7590,
+ 0x39FF, 0x7591, 0x0659, 0x7592, 0x3A00, 0x7593, 0x3A01, 0x7594, 0x1662,
+ 0x7599, 0x4C61, 0x759A, 0x1663, 0x759D, 0x1664, 0x75A2, 0x46DA, 0x75A3,
+ 0x1666, 0x75A4, 0x4C62, 0x75A5, 0x1665, 0x75AB, 0x04F8, 0x75B0, 0x46DC,
+ 0x75B1, 0x166E, 0x75B2, 0x0D7C, 0x75B3, 0x1668, 0x75B4, 0x3A02, 0x75B5,
+ 0x166A, 0x75B7, 0x46DD, 0x75B8, 0x166C, 0x75B9, 0x0A04, 0x75BC, 0x166D,
+ 0x75BD, 0x166B, 0x75BE, 0x08EC, 0x75BF, 0x46DE, 0x75C0, 0x46DF, 0x75C1,
+ 0x4C63, 0x75C2, 0x1667, 0x75C3, 0x1669, 0x75C4, 0x4C64, 0x75C5, 0x0DB4,
+ 0x75C6, 0x46E0, 0x75C7, 0x09B1, 0x75CA, 0x1670, 0x75CC, 0x4C65, 0x75CD,
+ 0x166F, 0x75CE, 0x4259, 0x75CF, 0x46E1, 0x75D2, 0x1671, 0x75D3, 0x46E2,
+ 0x75D4, 0x08D2, 0x75D5, 0x081F, 0x75D7, 0x4C66, 0x75D8, 0x0C71, 0x75D9,
+ 0x1672, 0x75DB, 0x0BE7, 0x75DC, 0x4C67, 0x75DD, 0x46E3, 0x75DE, 0x1674,
+ 0x75DF, 0x46E4, 0x75E0, 0x46E5, 0x75E1, 0x4C68, 0x75E2, 0x0F69, 0x75E3,
+ 0x1673, 0x75E4, 0x3A03, 0x75E7, 0x46E6, 0x75E9, 0x0AEB, 0x75EC, 0x3752,
+ 0x75EE, 0x46E7, 0x75EF, 0x4C69, 0x75F0, 0x1679, 0x75F1, 0x46E8, 0x75F2,
+ 0x167B, 0x75F3, 0x167C, 0x75F4, 0x0B92, 0x75F9, 0x3A04, 0x75FA, 0x167A,
+ 0x75FC, 0x1677, 0x75FE, 0x1675, 0x75FF, 0x1676, 0x7600, 0x3A05, 0x7601,
+ 0x1678, 0x7602, 0x425A, 0x7603, 0x46E9, 0x7604, 0x4C6A, 0x7607, 0x46EB,
+ 0x7608, 0x425B, 0x7609, 0x167F, 0x760A, 0x3A06, 0x760B, 0x167D, 0x760C,
+ 0x4C6B, 0x760D, 0x167E, 0x760F, 0x46EC, 0x7613, 0x46EF, 0x7615, 0x3A07,
+ 0x7616, 0x3A08, 0x7618, 0x46EA, 0x7619, 0x3A09, 0x761B, 0x46F0, 0x761C,
+ 0x46F1, 0x761D, 0x4C6C, 0x761E, 0x3A0A, 0x761F, 0x1680, 0x7620, 0x1682,
+ 0x7621, 0x1683, 0x7622, 0x1684, 0x7624, 0x1685, 0x7625, 0x46F3, 0x7626,
+ 0x3645, 0x7627, 0x1681, 0x7628, 0x46F4, 0x762D, 0x3A0B, 0x7630, 0x1687,
+ 0x7632, 0x4C6D, 0x7633, 0x46F6, 0x7634, 0x1686, 0x7635, 0x3A0C, 0x7638,
+ 0x4C6E, 0x763B, 0x1688, 0x763C, 0x46F5, 0x7641, 0x46F9, 0x7642, 0x0F8D,
+ 0x7643, 0x3A0D, 0x7645, 0x4C6F, 0x7646, 0x168B, 0x7647, 0x1689, 0x7648,
+ 0x168A, 0x7649, 0x46FB, 0x764A, 0x4C70, 0x764B, 0x3A0E, 0x764C, 0x061E,
+ 0x764E, 0x3753, 0x7652, 0x0F0A, 0x7655, 0x46FC, 0x7656, 0x0E1A, 0x7658,
+ 0x168D, 0x765C, 0x168C, 0x765F, 0x4C71, 0x7661, 0x168E, 0x7662, 0x168F,
+ 0x7664, 0x425C, 0x7665, 0x3A0F, 0x7667, 0x1693, 0x7668, 0x1690, 0x7669,
+ 0x1691, 0x766A, 0x1692, 0x766C, 0x1694, 0x766D, 0x3A10, 0x766E, 0x46FE,
+ 0x766F, 0x3A11, 0x7670, 0x1695, 0x7671, 0x3A12, 0x7672, 0x1696, 0x7674,
+ 0x3A13, 0x7676, 0x1697, 0x7678, 0x1698, 0x767A, 0x0D43, 0x767B, 0x0C4A,
+ 0x767C, 0x1699, 0x767D, 0x0D28, 0x767E, 0x0DA6, 0x7680, 0x169A, 0x7681,
+ 0x425D, 0x7682, 0x2176, 0x7683, 0x169B, 0x7684, 0x0C24, 0x7686, 0x0585,
+ 0x7687, 0x07D6, 0x7688, 0x169C, 0x768B, 0x169D, 0x768E, 0x169E, 0x7690,
+ 0x0877, 0x7693, 0x16A0, 0x7695, 0x46FF, 0x7696, 0x169F, 0x7699, 0x16A1,
+ 0x769A, 0x16A2, 0x769B, 0x2179, 0x769C, 0x2177, 0x769D, 0x425E, 0x769E,
+ 0x2178, 0x76A0, 0x4701, 0x76A1, 0x4700, 0x76A4, 0x3A14, 0x76A5, 0x3A15,
+ 0x76A6, 0x217A, 0x76A7, 0x4702, 0x76A8, 0x4703, 0x76AA, 0x425F, 0x76AD,
+ 0x4C72, 0x76AE, 0x0D7D, 0x76AF, 0x4704, 0x76B0, 0x16A3, 0x76B4, 0x16A4,
+ 0x76B6, 0x4260, 0x76B7, 0x1D1C, 0x76B8, 0x16A5, 0x76B9, 0x16A6, 0x76BA,
+ 0x16A7, 0x76BD, 0x4C73, 0x76BF, 0x087C, 0x76C2, 0x16A8, 0x76C3, 0x0D0C,
+ 0x76C5, 0x3A16, 0x76C6, 0x0E8D, 0x76C8, 0x04F0, 0x76C9, 0x4706, 0x76CA,
+ 0x04F9, 0x76CC, 0x3A17, 0x76CD, 0x16A9, 0x76CE, 0x4261, 0x76D2, 0x16AB,
+ 0x76D4, 0x4262, 0x76D6, 0x16AA, 0x76D7, 0x0C6A, 0x76D9, 0x4C74, 0x76DB,
+ 0x0A5D, 0x76DC, 0x14D8, 0x76DE, 0x16AC, 0x76DF, 0x0ECD, 0x76E1, 0x16AD,
+ 0x76E3, 0x0602, 0x76E4, 0x0D6B, 0x76E5, 0x16AE, 0x76E6, 0x4263, 0x76E7,
+ 0x16AF, 0x76E8, 0x4708, 0x76EA, 0x16B0, 0x76EB, 0x4C75, 0x76EC, 0x3A18,
+ 0x76EE, 0x0EE8, 0x76F0, 0x4C76, 0x76F1, 0x4264, 0x76F2, 0x0EE1, 0x76F4,
+ 0x0BDA, 0x76F8, 0x0AEC, 0x76F9, 0x4C77, 0x76FB, 0x16B2, 0x76FC, 0x3A19,
+ 0x76FE, 0x096C, 0x7700, 0x4C78, 0x7701, 0x09B2, 0x7704, 0x16B5, 0x7707,
+ 0x16B4, 0x7708, 0x16B3, 0x7709, 0x0D91, 0x770A, 0x4265, 0x770B, 0x0603,
+ 0x770C, 0x075D, 0x770E, 0x4C79, 0x7717, 0x470A, 0x7719, 0x4266, 0x771A,
+ 0x470B, 0x771B, 0x16BB, 0x771E, 0x16B8, 0x771F, 0x0A05, 0x7720, 0x0EBE,
+ 0x7722, 0x4C7A, 0x7724, 0x16B7, 0x7725, 0x16B9, 0x7726, 0x16BA, 0x7728,
+ 0x4C7B, 0x7729, 0x16B6, 0x772D, 0x470C, 0x772F, 0x4C7C, 0x7734, 0x3A1A,
+ 0x7735, 0x470D, 0x7736, 0x3A1B, 0x7737, 0x16BC, 0x7738, 0x16BD, 0x7739,
+ 0x4C7D, 0x773A, 0x0BCB, 0x773C, 0x061F, 0x773E, 0x4C7E, 0x7740, 0x0BA3,
+ 0x7745, 0x4C7F, 0x7746, 0x217C, 0x7747, 0x16BE, 0x774A, 0x4C80, 0x774D,
+ 0x4267, 0x774E, 0x4268, 0x774F, 0x4C81, 0x7758, 0x4712, 0x775A, 0x16BF,
+ 0x775B, 0x16C2, 0x775C, 0x3A1C, 0x775E, 0x4C82, 0x775F, 0x3A1D, 0x7760,
+ 0x3A1E, 0x7761, 0x0A2D, 0x7762, 0x1EC5, 0x7763, 0x0C9C, 0x7764, 0x4C83,
+ 0x7765, 0x16C3, 0x7766, 0x0E81, 0x7767, 0x4C84, 0x7768, 0x16C0, 0x776A,
+ 0x3755, 0x776B, 0x16C1, 0x776C, 0x4C85, 0x7772, 0x3A1F, 0x7779, 0x16C6,
+ 0x777A, 0x4269, 0x777C, 0x4714, 0x777D, 0x3A20, 0x777E, 0x16C5, 0x777F,
+ 0x16C4, 0x7780, 0x426A, 0x7784, 0x4C86, 0x778B, 0x16C8, 0x778C, 0x4C87,
+ 0x778D, 0x4C88, 0x778E, 0x16C7, 0x7791, 0x16C9, 0x7794, 0x426B, 0x7795,
+ 0x3A21, 0x7796, 0x4C89, 0x779A, 0x4717, 0x779E, 0x16CB, 0x779F, 0x4718,
+ 0x77A0, 0x16CA, 0x77A2, 0x4719, 0x77A4, 0x471A, 0x77A5, 0x0E1D, 0x77A7,
+ 0x4C8A, 0x77A9, 0x3756, 0x77AA, 0x3A22, 0x77AC, 0x0960, 0x77AD, 0x0F8E,
+ 0x77AF, 0x4C8B, 0x77B0, 0x16CC, 0x77B3, 0x0C8F, 0x77B6, 0x16CD, 0x77B7,
+ 0x4C8C, 0x77B9, 0x16CE, 0x77BB, 0x16D2, 0x77BC, 0x16D0, 0x77BD, 0x16D1,
+ 0x77BE, 0x4C8D, 0x77BF, 0x16CF, 0x77C7, 0x16D3, 0x77C9, 0x4C8E, 0x77CD,
+ 0x16D4, 0x77D1, 0x4C8F, 0x77D7, 0x16D5, 0x77D9, 0x4C90, 0x77DA, 0x16D6,
+ 0x77DB, 0x0EC3, 0x77DC, 0x16D7, 0x77DE, 0x471B, 0x77DF, 0x471C, 0x77E0,
+ 0x426C, 0x77E2, 0x0EFC, 0x77E3, 0x16D8, 0x77E4, 0x471D, 0x77E5, 0x0B8C,
+ 0x77E6, 0x3A23, 0x77E7, 0x0D20, 0x77E9, 0x06E3, 0x77EA, 0x471E, 0x77EC,
+ 0x471F, 0x77ED, 0x0B79, 0x77EE, 0x16D9, 0x77EF, 0x06B2, 0x77F0, 0x3A24,
+ 0x77F1, 0x4C91, 0x77F3, 0x0A74, 0x77F4, 0x3A25, 0x77FB, 0x4720, 0x77FC,
+ 0x16DA, 0x7802, 0x082D, 0x7805, 0x4722, 0x7806, 0x3A26, 0x7809, 0x4723,
+ 0x780C, 0x16DB, 0x780D, 0x4724, 0x7812, 0x16DC, 0x7814, 0x075A, 0x7815,
+ 0x0845, 0x7819, 0x4725, 0x7820, 0x16DE, 0x7821, 0x217E, 0x7822, 0x3A27,
+ 0x7825, 0x0C50, 0x7826, 0x0846, 0x7827, 0x0668, 0x782C, 0x4726, 0x782D,
+ 0x3A28, 0x782E, 0x3A29, 0x7830, 0x3A2A, 0x7832, 0x0E52, 0x7834, 0x0D01,
+ 0x7835, 0x3A2B, 0x7837, 0x4C92, 0x783A, 0x0C51, 0x783F, 0x07EE, 0x7843,
+ 0x426E, 0x7845, 0x16E0, 0x7847, 0x4727, 0x784E, 0x217F, 0x784F, 0x341E,
+ 0x7851, 0x3C3C, 0x785C, 0x4C93, 0x785D, 0x09B3, 0x7864, 0x2180, 0x7868,
+ 0x3A2C, 0x786A, 0x4728, 0x786B, 0x0F7A, 0x786C, 0x07D7, 0x786E, 0x426F,
+ 0x786F, 0x075B, 0x7872, 0x0D37, 0x7874, 0x16E2, 0x787A, 0x2181, 0x787C,
+ 0x16E4, 0x787E, 0x4C94, 0x7881, 0x079F, 0x7886, 0x16E3, 0x7887, 0x0C12,
+ 0x788A, 0x472A, 0x788C, 0x16E6, 0x788D, 0x0595, 0x788E, 0x16E1, 0x7891,
+ 0x0D7E, 0x7893, 0x04D2, 0x7894, 0x472B, 0x7895, 0x085C, 0x7897, 0x0FF8,
+ 0x7898, 0x4C95, 0x789A, 0x16E5, 0x789D, 0x472D, 0x789E, 0x3A2D, 0x789F,
+ 0x472E, 0x78A1, 0x4C96, 0x78A3, 0x16E7, 0x78A4, 0x472C, 0x78A7, 0x0E1B,
+ 0x78A9, 0x0A7D, 0x78AA, 0x16E9, 0x78AD, 0x4272, 0x78AF, 0x16EA, 0x78B0,
+ 0x4270, 0x78B1, 0x4C97, 0x78B3, 0x4C98, 0x78B5, 0x16E8, 0x78BA, 0x05AC,
+ 0x78BB, 0x472F, 0x78BC, 0x16F0, 0x78BE, 0x16EF, 0x78C1, 0x08D3, 0x78C5,
+ 0x16F1, 0x78C6, 0x16EC, 0x78C8, 0x3A2E, 0x78C9, 0x4C99, 0x78CA, 0x16F2,
+ 0x78CB, 0x16ED, 0x78CC, 0x3A2F, 0x78CE, 0x3A30, 0x78D0, 0x0D6C, 0x78D1,
+ 0x16EB, 0x78D3, 0x4C9A, 0x78D4, 0x16EE, 0x78D5, 0x4730, 0x78DA, 0x16F5,
+ 0x78E0, 0x3A32, 0x78E1, 0x3A33, 0x78E4, 0x3A31, 0x78E6, 0x4731, 0x78E7,
+ 0x16F4, 0x78E8, 0x0E8F, 0x78EC, 0x16F3, 0x78EF, 0x04AF, 0x78F2, 0x3A34,
+ 0x78F4, 0x16F7, 0x78F7, 0x3A35, 0x78F9, 0x4732, 0x78FA, 0x4733, 0x78FB,
+ 0x3A36, 0x78FD, 0x16F6, 0x78FE, 0x4734, 0x7900, 0x4273, 0x7901, 0x09B4,
+ 0x7907, 0x16F8, 0x790C, 0x4C9B, 0x790E, 0x0AC5, 0x7910, 0x4736, 0x7911,
+ 0x16FA, 0x7912, 0x16F9, 0x7919, 0x16FB, 0x791B, 0x4737, 0x791C, 0x4274,
+ 0x791F, 0x4C9C, 0x7925, 0x4738, 0x7926, 0x16DD, 0x7927, 0x4C9D, 0x7928,
+ 0x4C9E, 0x792A, 0x16DF, 0x792B, 0x16FD, 0x792C, 0x16FC, 0x792E, 0x4275,
+ 0x7930, 0x2182, 0x7931, 0x3A37, 0x7934, 0x4276, 0x793A, 0x08D4, 0x793B,
+ 0x3A39, 0x793C, 0x0FB1, 0x793D, 0x3A3A, 0x793E, 0x08FE, 0x793F, 0x4C9F,
+ 0x7940, 0x16FE, 0x7941, 0x070D, 0x7942, 0x4CA0, 0x7945, 0x3A3B, 0x7946,
+ 0x4277, 0x7947, 0x065A, 0x7948, 0x0641, 0x7949, 0x08B1, 0x794A, 0x4739,
+ 0x7950, 0x0F1E, 0x7953, 0x1704, 0x7954, 0x4CA1, 0x7955, 0x1703, 0x7956,
+ 0x0AC6, 0x7957, 0x1700, 0x7958, 0x473A, 0x795A, 0x1702, 0x795B, 0x3A3C,
+ 0x795C, 0x3A3D, 0x795D, 0x0955, 0x795E, 0x0A06, 0x795F, 0x1701, 0x7960,
+ 0x16FF, 0x7962, 0x0CE0, 0x7965, 0x09B5, 0x7967, 0x473C, 0x7968, 0x0DAE,
+ 0x796B, 0x4CA2, 0x796D, 0x0847, 0x7972, 0x473D, 0x7977, 0x0C72, 0x7979,
+ 0x4278, 0x797A, 0x1705, 0x797C, 0x4CA3, 0x797F, 0x1706, 0x7980, 0x171C,
+ 0x7981, 0x06D0, 0x7984, 0x0FE3, 0x7985, 0x0AB7, 0x798A, 0x1707, 0x798B,
+ 0x3A3E, 0x798D, 0x0552, 0x798E, 0x0C13, 0x798F, 0x0DF1, 0x7994, 0x2186,
+ 0x7995, 0x473E, 0x7996, 0x3A3F, 0x7998, 0x3A40, 0x799B, 0x2188, 0x799D,
+ 0x1708, 0x79A1, 0x473F, 0x79A6, 0x0694, 0x79A7, 0x1709, 0x79A9, 0x4740,
+ 0x79AA, 0x170B, 0x79AB, 0x4CA4, 0x79AE, 0x170C, 0x79B0, 0x0CDF, 0x79B1,
+ 0x1E4E, 0x79B3, 0x170D, 0x79B4, 0x4741, 0x79B8, 0x3A41, 0x79B9, 0x170E,
+ 0x79BA, 0x170F, 0x79BB, 0x3A42, 0x79BD, 0x06D1, 0x79BE, 0x0553, 0x79BF,
+ 0x0C9D, 0x79C0, 0x0932, 0x79C1, 0x08B2, 0x79C2, 0x4742, 0x79C4, 0x4CA5,
+ 0x79C7, 0x4743, 0x79C8, 0x4279, 0x79C9, 0x1710, 0x79CA, 0x3A43, 0x79CB,
+ 0x0933, 0x79CC, 0x4744, 0x79CD, 0x4745, 0x79D1, 0x054A, 0x79D2, 0x0DB5,
+ 0x79D4, 0x427B, 0x79D5, 0x1711, 0x79D6, 0x4746, 0x79D8, 0x0D7F, 0x79DA,
+ 0x3A44, 0x79DE, 0x427C, 0x79DF, 0x0AC7, 0x79E1, 0x1714, 0x79E3, 0x1715,
+ 0x79E4, 0x0D1F, 0x79E6, 0x0A07, 0x79E7, 0x1712, 0x79E9, 0x0B9F, 0x79EA,
+ 0x4CA6, 0x79EB, 0x427D, 0x79EC, 0x1713, 0x79ED, 0x427E, 0x79F0, 0x09B6,
+ 0x79FB, 0x04A0, 0x7A00, 0x0643, 0x7A02, 0x4CA7, 0x7A03, 0x3A45, 0x7A05,
+ 0x3633, 0x7A08, 0x1716, 0x7A09, 0x3A46, 0x7A0A, 0x474B, 0x7A0B, 0x0C14,
+ 0x7A0C, 0x4CA8, 0x7A0D, 0x1717, 0x7A0E, 0x0A6B, 0x7A11, 0x3A47, 0x7A14,
+ 0x0EB9, 0x7A15, 0x474C, 0x7A17, 0x0D95, 0x7A18, 0x1718, 0x7A19, 0x1719,
+ 0x7A1A, 0x0B93, 0x7A1B, 0x474D, 0x7A1C, 0x0F8F, 0x7A1E, 0x3A48, 0x7A1F,
+ 0x171B, 0x7A20, 0x171A, 0x7A2D, 0x3A49, 0x7A2E, 0x091B, 0x7A30, 0x4CA9,
+ 0x7A31, 0x171D, 0x7A32, 0x04B4, 0x7A37, 0x1720, 0x7A38, 0x474F, 0x7A39,
+ 0x3A4A, 0x7A3A, 0x4CAA, 0x7A3B, 0x171E, 0x7A3C, 0x0554, 0x7A3D, 0x0724,
+ 0x7A3E, 0x171F, 0x7A3F, 0x07D8, 0x7A40, 0x0804, 0x7A42, 0x0E36, 0x7A43,
+ 0x1721, 0x7A44, 0x4CAB, 0x7A45, 0x3A4B, 0x7A46, 0x0E82, 0x7A47, 0x4750,
+ 0x7A49, 0x1723, 0x7A4C, 0x3A4C, 0x7A4D, 0x0A75, 0x7A4E, 0x04F1, 0x7A4F,
+ 0x053A, 0x7A50, 0x0470, 0x7A56, 0x4751, 0x7A57, 0x1722, 0x7A59, 0x4752,
+ 0x7A5C, 0x4753, 0x7A5D, 0x3A4D, 0x7A5F, 0x4754, 0x7A60, 0x4F56, 0x7A61,
+ 0x1724, 0x7A62, 0x1725, 0x7A63, 0x09DF, 0x7A67, 0x4755, 0x7A69, 0x1726,
+ 0x7A6A, 0x4756, 0x7A6B, 0x05AD, 0x7A6D, 0x3A4F, 0x7A70, 0x1728, 0x7A74,
+ 0x0740, 0x7A75, 0x4757, 0x7A76, 0x0680, 0x7A78, 0x3A50, 0x7A79, 0x1729,
+ 0x7A7A, 0x06ED, 0x7A7D, 0x172A, 0x7A7F, 0x0AA0, 0x7A80, 0x4CAC, 0x7A81,
+ 0x0CA5, 0x7A82, 0x4758, 0x7A83, 0x0A84, 0x7A84, 0x0865, 0x7A85, 0x427F,
+ 0x7A86, 0x4CAD, 0x7A88, 0x172B, 0x7A8A, 0x4759, 0x7A90, 0x475A, 0x7A92,
+ 0x0BA0, 0x7A93, 0x0AED, 0x7A94, 0x4CAE, 0x7A95, 0x172D, 0x7A96, 0x172F,
+ 0x7A97, 0x172C, 0x7A98, 0x172E, 0x7A9F, 0x06F8, 0x7AA0, 0x3A51, 0x7AA3,
+ 0x3A52, 0x7AA9, 0x1730, 0x7AAA, 0x06FC, 0x7AAC, 0x475B, 0x7AAE, 0x0681,
+ 0x7AAF, 0x0F3C, 0x7AB0, 0x1732, 0x7AB3, 0x3A53, 0x7AB5, 0x4CAF, 0x7AB6,
+ 0x1733, 0x7AB9, 0x475E, 0x7ABA, 0x04D0, 0x7ABB, 0x3A54, 0x7ABC, 0x3A55,
+ 0x7ABD, 0x4CB0, 0x7ABE, 0x475F, 0x7ABF, 0x1736, 0x7AC3, 0x05D4, 0x7AC4,
+ 0x1735, 0x7AC5, 0x1734, 0x7AC6, 0x3A56, 0x7AC7, 0x1738, 0x7AC8, 0x1731,
+ 0x7ACA, 0x1739, 0x7ACB, 0x0F71, 0x7ACC, 0x4761, 0x7ACD, 0x173A, 0x7ACE,
+ 0x4281, 0x7ACF, 0x173B, 0x7AD1, 0x2189, 0x7AD2, 0x11C5, 0x7AD3, 0x173D,
+ 0x7AD5, 0x173C, 0x7AD9, 0x173E, 0x7ADA, 0x173F, 0x7ADC, 0x0F7D, 0x7ADD,
+ 0x1740, 0x7ADF, 0x1C08, 0x7AE0, 0x09B7, 0x7AE1, 0x1741, 0x7AE2, 0x1742,
+ 0x7AE3, 0x0961, 0x7AE5, 0x0C90, 0x7AE6, 0x1743, 0x7AE7, 0x218A, 0x7AE8,
+ 0x4762, 0x7AEA, 0x0B66, 0x7AEB, 0x218C, 0x7AED, 0x1744, 0x7AEF, 0x0B7A,
+ 0x7AF0, 0x1745, 0x7AF4, 0x4763, 0x7AF6, 0x069D, 0x7AF8, 0x1076, 0x7AF9,
+ 0x0B9B, 0x7AFA, 0x08DF, 0x7AFD, 0x4282, 0x7AFE, 0x4CB1, 0x7AFF, 0x0604,
+ 0x7B02, 0x1746, 0x7B04, 0x1753, 0x7B06, 0x1749, 0x7B07, 0x3A57, 0x7B08,
+ 0x0682, 0x7B0A, 0x1748, 0x7B0B, 0x1755, 0x7B0F, 0x1747, 0x7B11, 0x09B8,
+ 0x7B12, 0x4283, 0x7B14, 0x3A58, 0x7B18, 0x174B, 0x7B19, 0x174C, 0x7B1B,
+ 0x0C25, 0x7B1E, 0x174D, 0x7B20, 0x05BC, 0x7B25, 0x0A20, 0x7B26, 0x0DD6,
+ 0x7B27, 0x3A59, 0x7B28, 0x174F, 0x7B2A, 0x4768, 0x7B2B, 0x4CB2, 0x7B2C,
+ 0x0B48, 0x7B2D, 0x4284, 0x7B2E, 0x4769, 0x7B2F, 0x476A, 0x7B31, 0x3A5A,
+ 0x7B33, 0x174A, 0x7B35, 0x174E, 0x7B36, 0x1750, 0x7B39, 0x086B, 0x7B3B,
+ 0x4285, 0x7B3D, 0x4767, 0x7B41, 0x476E, 0x7B45, 0x1757, 0x7B46, 0x0DA0,
+ 0x7B47, 0x3A5B, 0x7B48, 0x0D3A, 0x7B49, 0x0C73, 0x7B4B, 0x06D2, 0x7B4C,
+ 0x1756, 0x7B4D, 0x1754, 0x7B4E, 0x3A5C, 0x7B4F, 0x0D49, 0x7B50, 0x1751,
+ 0x7B51, 0x0B9C, 0x7B52, 0x0C75, 0x7B53, 0x375D, 0x7B54, 0x0C74, 0x7B55,
+ 0x4770, 0x7B56, 0x0866, 0x7B5D, 0x1769, 0x7B60, 0x3A5D, 0x7B64, 0x4772,
+ 0x7B65, 0x1759, 0x7B66, 0x4773, 0x7B67, 0x175B, 0x7B69, 0x3A5E, 0x7B6C,
+ 0x175E, 0x7B6D, 0x3A5F, 0x7B6E, 0x175F, 0x7B6F, 0x4286, 0x7B70, 0x175C,
+ 0x7B71, 0x175D, 0x7B72, 0x3A60, 0x7B73, 0x4774, 0x7B74, 0x175A, 0x7B75,
+ 0x1758, 0x7B77, 0x4CB3, 0x7B79, 0x4771, 0x7B7A, 0x1752, 0x7B7F, 0x476D,
+ 0x7B86, 0x0E1F, 0x7B87, 0x0555, 0x7B8B, 0x1766, 0x7B8D, 0x1763, 0x7B8F,
+ 0x1768, 0x7B90, 0x4777, 0x7B91, 0x3A61, 0x7B92, 0x1767, 0x7B94, 0x0D29,
+ 0x7B95, 0x0EB3, 0x7B97, 0x0889, 0x7B98, 0x1761, 0x7B99, 0x176A, 0x7B9A,
+ 0x1765, 0x7B9B, 0x4778, 0x7B9C, 0x1764, 0x7B9D, 0x1760, 0x7B9E, 0x218D,
+ 0x7B9F, 0x1762, 0x7BA0, 0x4CB4, 0x7BA1, 0x0605, 0x7BAA, 0x0B7B, 0x7BAC,
+ 0x4CB5, 0x7BAD, 0x0AA1, 0x7BAF, 0x3A62, 0x7BB0, 0x4CB6, 0x7BB1, 0x0D36,
+ 0x7BB4, 0x176F, 0x7BB5, 0x477A, 0x7BB8, 0x0D38, 0x7BBC, 0x477B, 0x7BC0,
+ 0x0A85, 0x7BC1, 0x176C, 0x7BC4, 0x0D63, 0x7BC5, 0x477C, 0x7BC6, 0x1770,
+ 0x7BC7, 0x0E23, 0x7BC9, 0x0B99, 0x7BCA, 0x477D, 0x7BCB, 0x176B, 0x7BCC,
+ 0x176D, 0x7BCF, 0x176E, 0x7BD4, 0x4780, 0x7BD6, 0x4781, 0x7BD7, 0x3A63,
+ 0x7BD9, 0x3A64, 0x7BDA, 0x4782, 0x7BDD, 0x1771, 0x7BE0, 0x08F0, 0x7BE4,
+ 0x0C9E, 0x7BE5, 0x1776, 0x7BE6, 0x1775, 0x7BE8, 0x4CB7, 0x7BE9, 0x1772,
+ 0x7BEA, 0x4783, 0x7BED, 0x0FDC, 0x7BF0, 0x4784, 0x7BF2, 0x4CB8, 0x7BF3,
+ 0x177B, 0x7BF6, 0x177F, 0x7BF7, 0x177C, 0x7BF8, 0x4CB9, 0x7BFC, 0x4CBA,
+ 0x7BFE, 0x4CBB, 0x7C00, 0x1778, 0x7C01, 0x4287, 0x7C03, 0x4785, 0x7C07,
+ 0x1779, 0x7C09, 0x4CBC, 0x7C0B, 0x3A65, 0x7C0D, 0x177E, 0x7C0E, 0x4786,
+ 0x7C0F, 0x3A66, 0x7C11, 0x1773, 0x7C12, 0x10EA, 0x7C13, 0x177A, 0x7C14,
+ 0x1774, 0x7C17, 0x177D, 0x7C1E, 0x1E3B, 0x7C1F, 0x1783, 0x7C20, 0x3A67,
+ 0x7C21, 0x0606, 0x7C23, 0x1780, 0x7C26, 0x3A68, 0x7C27, 0x1781, 0x7C28,
+ 0x4CBD, 0x7C2A, 0x1782, 0x7C2B, 0x1785, 0x7C2F, 0x4CBE, 0x7C31, 0x3A69,
+ 0x7C33, 0x4288, 0x7C36, 0x3A6A, 0x7C37, 0x1784, 0x7C38, 0x0D8A, 0x7C3D,
+ 0x1786, 0x7C3E, 0x0FC4, 0x7C3F, 0x0E3D, 0x7C40, 0x178B, 0x7C42, 0x4CBF,
+ 0x7C43, 0x1788, 0x7C45, 0x4787, 0x7C4A, 0x4788, 0x7C4C, 0x1787, 0x7C4D,
+ 0x0A76, 0x7C4F, 0x178A, 0x7C50, 0x178C, 0x7C51, 0x3A6B, 0x7C52, 0x4CC0,
+ 0x7C53, 0x4CC1, 0x7C54, 0x1789, 0x7C56, 0x1790, 0x7C57, 0x4789, 0x7C58,
+ 0x178D, 0x7C59, 0x3A6C, 0x7C5B, 0x4CC2, 0x7C5C, 0x4CC3, 0x7C5D, 0x4CC4,
+ 0x7C5E, 0x478A, 0x7C5F, 0x178E, 0x7C60, 0x1777, 0x7C61, 0x478B, 0x7C64,
+ 0x178F, 0x7C65, 0x1791, 0x7C67, 0x3A6D, 0x7C69, 0x478C, 0x7C6C, 0x1792,
+ 0x7C6D, 0x428A, 0x7C6E, 0x3A6E, 0x7C6F, 0x478D, 0x7C70, 0x3A6F, 0x7C72,
+ 0x4CC5, 0x7C73, 0x0E16, 0x7C75, 0x1793, 0x7C79, 0x428B, 0x7C7B, 0x370E,
+ 0x7C7D, 0x4CC6, 0x7C7E, 0x0EEE, 0x7C81, 0x06C6, 0x7C82, 0x06FF, 0x7C83,
+ 0x1794, 0x7C87, 0x4CC7, 0x7C89, 0x0E04, 0x7C8B, 0x0A2E, 0x7C8D, 0x0EBC,
+ 0x7C8F, 0x428C, 0x7C90, 0x1795, 0x7C92, 0x0F7B, 0x7C94, 0x428D, 0x7C95,
+ 0x0D2A, 0x7C97, 0x0AC8, 0x7C98, 0x0CEA, 0x7C9B, 0x0957, 0x7C9E, 0x4CC8,
+ 0x7C9F, 0x0484, 0x7CA0, 0x428E, 0x7CA1, 0x179A, 0x7CA2, 0x1798, 0x7CA4,
+ 0x1796, 0x7CA5, 0x05DD, 0x7CA6, 0x4791, 0x7CA7, 0x09B9, 0x7CA8, 0x179B,
+ 0x7CAB, 0x1799, 0x7CAD, 0x1797, 0x7CAE, 0x179F, 0x7CB1, 0x179E, 0x7CB2,
+ 0x179D, 0x7CB3, 0x179C, 0x7CB6, 0x4793, 0x7CB7, 0x4794, 0x7CB9, 0x17A0,
+ 0x7CBA, 0x4CC9, 0x7CBC, 0x3A70, 0x7CBD, 0x17A1, 0x7CBE, 0x0A5E, 0x7CBF,
+ 0x3A71, 0x7CC0, 0x17A2, 0x7CC2, 0x17A4, 0x7CC4, 0x4796, 0x7CC5, 0x17A3,
+ 0x7CC7, 0x4CCA, 0x7CC8, 0x3A72, 0x7CC9, 0x3A73, 0x7CCA, 0x0786, 0x7CCD,
+ 0x4798, 0x7CCE, 0x0ABA, 0x7CD2, 0x17A6, 0x7CD3, 0x4CCB, 0x7CD5, 0x428F,
+ 0x7CD6, 0x0C76, 0x7CD7, 0x3A74, 0x7CD8, 0x17A5, 0x7CD9, 0x3A75, 0x7CDA,
+ 0x4CCC, 0x7CDC, 0x17A7, 0x7CDD, 0x3A76, 0x7CDE, 0x0E05, 0x7CDF, 0x0AEE,
+ 0x7CE0, 0x07D9, 0x7CE2, 0x17A8, 0x7CE6, 0x479B, 0x7CE7, 0x0F90, 0x7CEB,
+ 0x3A77, 0x7CEF, 0x17AA, 0x7CF2, 0x17AB, 0x7CF4, 0x17AC, 0x7CF5, 0x479D,
+ 0x7CF6, 0x17AD, 0x7CF8, 0x08B3, 0x7CFA, 0x17AE, 0x7CFB, 0x0725, 0x7CFE,
+ 0x0684, 0x7D00, 0x0644, 0x7D02, 0x17B0, 0x7D03, 0x479E, 0x7D04, 0x0EFF,
+ 0x7D05, 0x07DA, 0x7D06, 0x17AF, 0x7D07, 0x3A78, 0x7D08, 0x3A79, 0x7D09,
+ 0x3A7A, 0x7D0A, 0x17B3, 0x7D0B, 0x0EF2, 0x7D0D, 0x0CF2, 0x7D10, 0x0DA5,
+ 0x7D12, 0x47A0, 0x7D13, 0x3A7B, 0x7D14, 0x096D, 0x7D15, 0x17B2, 0x7D17,
+ 0x08FF, 0x7D18, 0x07DB, 0x7D19, 0x08B4, 0x7D1A, 0x0683, 0x7D1B, 0x0E06,
+ 0x7D1C, 0x17B1, 0x7D1D, 0x3A7C, 0x7D1E, 0x47A1, 0x7D20, 0x0AC9, 0x7D21,
+ 0x0E70, 0x7D22, 0x0867, 0x7D23, 0x3A7D, 0x7D2B, 0x08B5, 0x7D2C, 0x0BF9,
+ 0x7D2E, 0x17B6, 0x7D2F, 0x0FA7, 0x7D30, 0x0849, 0x7D31, 0x4290, 0x7D32,
+ 0x17B7, 0x7D33, 0x0A08, 0x7D35, 0x17B9, 0x7D39, 0x09BA, 0x7D3A, 0x0820,
+ 0x7D3C, 0x4CCD, 0x7D3D, 0x47A4, 0x7D3E, 0x47A5, 0x7D3F, 0x17B8, 0x7D40,
+ 0x47A6, 0x7D41, 0x3A7E, 0x7D42, 0x0934, 0x7D43, 0x0772, 0x7D44, 0x0ACA,
+ 0x7D45, 0x17B4, 0x7D46, 0x17BA, 0x7D47, 0x47A7, 0x7D48, 0x218F, 0x7D4B,
+ 0x17B5, 0x7D4C, 0x0726, 0x7D4D, 0x4CCE, 0x7D4E, 0x17BD, 0x7D4F, 0x17C1,
+ 0x7D50, 0x0741, 0x7D53, 0x3A7F, 0x7D55, 0x363A, 0x7D56, 0x17BC, 0x7D59,
+ 0x3A80, 0x7D5A, 0x47AB, 0x7D5B, 0x17C5, 0x7D5C, 0x4291, 0x7D5D, 0x3A81,
+ 0x7D5E, 0x07DC, 0x7D61, 0x0F57, 0x7D62, 0x0480, 0x7D63, 0x17C2, 0x7D66,
+ 0x0685, 0x7D68, 0x17BF, 0x7D6A, 0x47AC, 0x7D6E, 0x17C0, 0x7D70, 0x47AD,
+ 0x7D71, 0x0C77, 0x7D72, 0x17BE, 0x7D73, 0x17BB, 0x7D75, 0x0586, 0x7D76,
+ 0x0A88, 0x7D79, 0x075C, 0x7D7A, 0x3A82, 0x7D7D, 0x17C7, 0x7D7F, 0x47AF,
+ 0x7D82, 0x4CCF, 0x7D83, 0x4292, 0x7D85, 0x4CD0, 0x7D86, 0x3A83, 0x7D88,
+ 0x47B1, 0x7D89, 0x17C4, 0x7D8B, 0x3A84, 0x7D8C, 0x3A85, 0x7D8D, 0x4CD1,
+ 0x7D8F, 0x17C6, 0x7D91, 0x4CD2, 0x7D93, 0x17C3, 0x7D97, 0x47B2, 0x7D99,
+ 0x0727, 0x7D9A, 0x0B13, 0x7D9B, 0x17C8, 0x7D9C, 0x0AF0, 0x7D9D, 0x47B4,
+ 0x7D9E, 0x4CD3, 0x7D9F, 0x17D5, 0x7DA0, 0x2192, 0x7DA2, 0x17D1, 0x7DA3,
+ 0x17CB, 0x7DA6, 0x4293, 0x7DA7, 0x47B5, 0x7DAA, 0x47B6, 0x7DAB, 0x17CF,
+ 0x7DAC, 0x0926, 0x7DAD, 0x04A1, 0x7DAE, 0x17CA, 0x7DAF, 0x17D2, 0x7DB0,
+ 0x17D6, 0x7DB1, 0x07DD, 0x7DB2, 0x0EE2, 0x7DB3, 0x4CD4, 0x7DB4, 0x0BF2,
+ 0x7DB5, 0x17CC, 0x7DB6, 0x47B7, 0x7DB7, 0x2191, 0x7DB8, 0x17D4, 0x7DB9,
+ 0x4CD5, 0x7DBA, 0x17C9, 0x7DBB, 0x0B7C, 0x7DBD, 0x17CE, 0x7DBE, 0x0481,
+ 0x7DBF, 0x0ED6, 0x7DC0, 0x47B8, 0x7DC2, 0x4294, 0x7DC7, 0x17CD, 0x7DCA,
+ 0x06D3, 0x7DCB, 0x0D80, 0x7DCC, 0x3A86, 0x7DCF, 0x0AEF, 0x7DD0, 0x4CD6,
+ 0x7DD1, 0x0F98, 0x7DD2, 0x0979, 0x7DD5, 0x17FD, 0x7DD6, 0x2193, 0x7DD7,
+ 0x47B9, 0x7DD8, 0x17D7, 0x7DD9, 0x47BA, 0x7DDA, 0x0AA2, 0x7DDC, 0x17D3,
+ 0x7DDD, 0x17D8, 0x7DDE, 0x17DA, 0x7DE0, 0x0C15, 0x7DE1, 0x17DD, 0x7DE3,
+ 0x340A, 0x7DE4, 0x17D9, 0x7DE5, 0x4CD7, 0x7DE6, 0x47BB, 0x7DE8, 0x0E24,
+ 0x7DE9, 0x0607, 0x7DEB, 0x3A87, 0x7DEC, 0x0ED7, 0x7DEF, 0x04A2, 0x7DF1,
+ 0x3A88, 0x7DF2, 0x17DC, 0x7DF4, 0x0FC5, 0x7DF5, 0x4CD8, 0x7DF6, 0x4CD9,
+ 0x7DF9, 0x3A89, 0x7DFB, 0x17DB, 0x7E01, 0x0511, 0x7E04, 0x0CC4, 0x7E05,
+ 0x17DE, 0x7E08, 0x3A8A, 0x7E09, 0x17E5, 0x7E0A, 0x17DF, 0x7E0B, 0x17E6,
+ 0x7E10, 0x47BF, 0x7E11, 0x3A8B, 0x7E12, 0x17E2, 0x7E15, 0x3A8C, 0x7E17,
+ 0x47C0, 0x7E1B, 0x0D31, 0x7E1D, 0x47C1, 0x7E1E, 0x08F6, 0x7E1F, 0x17E4,
+ 0x7E20, 0x3A8D, 0x7E21, 0x17E1, 0x7E22, 0x17E7, 0x7E23, 0x17E0, 0x7E26,
+ 0x094E, 0x7E27, 0x47C2, 0x7E28, 0x4295, 0x7E2B, 0x0E53, 0x7E2C, 0x47C3,
+ 0x7E2E, 0x0956, 0x7E2F, 0x4CDA, 0x7E31, 0x17E3, 0x7E32, 0x17EF, 0x7E35,
+ 0x17EB, 0x7E36, 0x4CDB, 0x7E37, 0x17EE, 0x7E39, 0x17EC, 0x7E3A, 0x17F0,
+ 0x7E3B, 0x17EA, 0x7E3D, 0x17D0, 0x7E3E, 0x0A77, 0x7E41, 0x0D5F, 0x7E43,
+ 0x17ED, 0x7E44, 0x4CDC, 0x7E45, 0x47C4, 0x7E46, 0x17E8, 0x7E47, 0x3A8E,
+ 0x7E48, 0x3767, 0x7E4A, 0x0AA3, 0x7E4B, 0x0728, 0x7E4D, 0x0935, 0x7E52,
+ 0x2194, 0x7E54, 0x09EB, 0x7E55, 0x0AB8, 0x7E56, 0x17F3, 0x7E59, 0x17F5,
+ 0x7E5A, 0x17F6, 0x7E5D, 0x17F2, 0x7E5E, 0x17F4, 0x7E61, 0x1E11, 0x7E62,
+ 0x3A8F, 0x7E66, 0x17E9, 0x7E67, 0x17F1, 0x7E69, 0x17F9, 0x7E6A, 0x17F8,
+ 0x7E6B, 0x1DF7, 0x7E6D, 0x0EA8, 0x7E6E, 0x3A90, 0x7E6F, 0x4CDD, 0x7E70,
+ 0x0701, 0x7E73, 0x3A91, 0x7E75, 0x47C5, 0x7E78, 0x4CDE, 0x7E79, 0x17F7,
+ 0x7E7B, 0x17FB, 0x7E7C, 0x17FA, 0x7E7D, 0x17FE, 0x7E7E, 0x47C6, 0x7E7F,
+ 0x1800, 0x7E81, 0x4CDF, 0x7E82, 0x088A, 0x7E83, 0x17FC, 0x7E86, 0x47C7,
+ 0x7E87, 0x47C8, 0x7E88, 0x1801, 0x7E89, 0x1802, 0x7E8A, 0x20A7, 0x7E8C,
+ 0x1803, 0x7E8D, 0x3A92, 0x7E8E, 0x1809, 0x7E8F, 0x0C35, 0x7E90, 0x1805,
+ 0x7E91, 0x3A93, 0x7E92, 0x1804, 0x7E93, 0x1806, 0x7E94, 0x1807, 0x7E96,
+ 0x1808, 0x7E98, 0x3A94, 0x7E9A, 0x47CA, 0x7E9B, 0x180A, 0x7E9C, 0x180B,
+ 0x7F36, 0x0608, 0x7F38, 0x180C, 0x7F3A, 0x180D, 0x7F3B, 0x47CD, 0x7F3C,
+ 0x47CC, 0x7F3D, 0x4CE0, 0x7F3E, 0x47CE, 0x7F43, 0x47CF, 0x7F44, 0x3A95,
+ 0x7F45, 0x180E, 0x7F47, 0x2195, 0x7F4C, 0x180F, 0x7F4D, 0x1810, 0x7F4E,
+ 0x1811, 0x7F4F, 0x3A96, 0x7F50, 0x1812, 0x7F51, 0x1813, 0x7F52, 0x3A97,
+ 0x7F53, 0x3A98, 0x7F54, 0x1815, 0x7F55, 0x1814, 0x7F58, 0x1816, 0x7F5B,
+ 0x4CE1, 0x7F5D, 0x4CE2, 0x7F5F, 0x1817, 0x7F60, 0x1818, 0x7F61, 0x3A99,
+ 0x7F63, 0x47D3, 0x7F64, 0x47D4, 0x7F65, 0x4CE3, 0x7F67, 0x181B, 0x7F68,
+ 0x1819, 0x7F69, 0x181A, 0x7F6A, 0x0851, 0x7F6B, 0x0729, 0x7F6D, 0x47D5,
+ 0x7F6E, 0x0B94, 0x7F70, 0x0D47, 0x7F71, 0x4CE4, 0x7F72, 0x097A, 0x7F75,
+ 0x0D03, 0x7F77, 0x0D81, 0x7F78, 0x181C, 0x7F79, 0x1336, 0x7F7D, 0x47D6,
+ 0x7F7E, 0x47D7, 0x7F7F, 0x4CE5, 0x7F80, 0x4CE6, 0x7F82, 0x181D, 0x7F83,
+ 0x181F, 0x7F85, 0x0F4F, 0x7F86, 0x181E, 0x7F87, 0x1821, 0x7F88, 0x1820,
+ 0x7F8A, 0x0F3D, 0x7F8B, 0x4CE7, 0x7F8C, 0x1822, 0x7F8E, 0x0D92, 0x7F90,
+ 0x47D8, 0x7F91, 0x3A9A, 0x7F94, 0x1823, 0x7F96, 0x47DB, 0x7F97, 0x4296,
+ 0x7F9A, 0x1826, 0x7F9C, 0x47DC, 0x7F9D, 0x1825, 0x7F9E, 0x1824, 0x7FA1,
+ 0x2196, 0x7FA2, 0x4CE8, 0x7FA3, 0x1827, 0x7FA4, 0x0708, 0x7FA8, 0x0AA4,
+ 0x7FA9, 0x065B, 0x7FAD, 0x47DD, 0x7FAE, 0x182B, 0x7FAF, 0x1828, 0x7FB2,
+ 0x1829, 0x7FB6, 0x182C, 0x7FB8, 0x182D, 0x7FB9, 0x182A, 0x7FBD, 0x04CB,
+ 0x7FBF, 0x3A9B, 0x7FC1, 0x0527, 0x7FC3, 0x47DF, 0x7FC5, 0x182F, 0x7FC6,
+ 0x1830, 0x7FCA, 0x1831, 0x7FCC, 0x0F4C, 0x7FCE, 0x3A9C, 0x7FCF, 0x47E0,
+ 0x7FD2, 0x0936, 0x7FD4, 0x1833, 0x7FD5, 0x1832, 0x7FDB, 0x4297, 0x7FDF,
+ 0x3A9D, 0x7FE0, 0x0A2F, 0x7FE1, 0x1834, 0x7FE3, 0x47E1, 0x7FE5, 0x3A9E,
+ 0x7FE6, 0x1835, 0x7FE9, 0x1836, 0x7FEB, 0x0621, 0x7FEC, 0x3A9F, 0x7FEE,
+ 0x3AA0, 0x7FEF, 0x3AA1, 0x7FF0, 0x0609, 0x7FF2, 0x47E2, 0x7FF3, 0x1837,
+ 0x7FF9, 0x1838, 0x7FFA, 0x3AA2, 0x7FFB, 0x0E8B, 0x7FFC, 0x0F4D, 0x7FFD,
+ 0x4CE9, 0x7FFE, 0x4CEA, 0x7FFF, 0x4CEB, 0x8000, 0x0F3E, 0x8001, 0x0FDD,
+ 0x8002, 0x3713, 0x8003, 0x07DF, 0x8004, 0x183B, 0x8005, 0x0900, 0x8006,
+ 0x183A, 0x8007, 0x4CEC, 0x8008, 0x47E4, 0x800A, 0x47E3, 0x800B, 0x183C,
+ 0x800C, 0x08D5, 0x800D, 0x4CED, 0x800E, 0x3AA3, 0x8010, 0x0B31, 0x8011,
+ 0x3AA4, 0x8012, 0x183D, 0x8014, 0x3AA5, 0x8015, 0x07DE, 0x8016, 0x47E5,
+ 0x8017, 0x0EE3, 0x8018, 0x183E, 0x8019, 0x183F, 0x801C, 0x1840, 0x801E,
+ 0x4CEE, 0x8021, 0x1841, 0x8024, 0x3AA6, 0x8026, 0x3AA7, 0x8028, 0x1842,
+ 0x802C, 0x47E6, 0x8030, 0x47E7, 0x8033, 0x08D6, 0x8035, 0x4298, 0x8036,
+ 0x0EF9, 0x8037, 0x4299, 0x8039, 0x4CEF, 0x803A, 0x3AA8, 0x803B, 0x1844,
+ 0x803C, 0x3AA9, 0x803D, 0x0B7D, 0x803F, 0x1843, 0x8043, 0x47E8, 0x8046,
+ 0x1846, 0x804A, 0x1845, 0x8052, 0x1847, 0x8056, 0x0A5F, 0x8058, 0x1848,
+ 0x805A, 0x1849, 0x805E, 0x0E09, 0x805F, 0x184A, 0x8060, 0x3AAA, 0x8061,
+ 0x0AF1, 0x8062, 0x184B, 0x8066, 0x47E9, 0x8068, 0x184C, 0x806F, 0x0FC6,
+ 0x8070, 0x184F, 0x8071, 0x3AAB, 0x8072, 0x184E, 0x8073, 0x184D, 0x8074,
+ 0x0BCC, 0x8075, 0x3AAC, 0x8076, 0x1850, 0x8077, 0x09EC, 0x8079, 0x1851,
+ 0x807B, 0x47EA, 0x807D, 0x1852, 0x807E, 0x0FDE, 0x807F, 0x1853, 0x8084,
+ 0x1854, 0x8085, 0x1856, 0x8086, 0x1855, 0x8087, 0x0D39, 0x8088, 0x4CF0,
+ 0x8089, 0x0CD1, 0x808B, 0x0FE4, 0x808C, 0x0D3D, 0x808E, 0x4CF1, 0x8093,
+ 0x1858, 0x8096, 0x09BB, 0x8098, 0x0D9C, 0x8099, 0x47EB, 0x809A, 0x1859,
+ 0x809B, 0x1857, 0x809C, 0x47EC, 0x809D, 0x060A, 0x809E, 0x3AAD, 0x80A1,
+ 0x0788, 0x80A2, 0x08B6, 0x80A4, 0x47ED, 0x80A5, 0x0D82, 0x80A6, 0x3AAE,
+ 0x80A7, 0x47EE, 0x80A9, 0x075E, 0x80AA, 0x0E71, 0x80AB, 0x3AAF, 0x80AC,
+ 0x185C, 0x80AD, 0x185A, 0x80AF, 0x07E0, 0x80B1, 0x07E1, 0x80B2, 0x04AD,
+ 0x80B4, 0x0858, 0x80B8, 0x47EF, 0x80BA, 0x0D0F, 0x80C3, 0x04A3, 0x80C4,
+ 0x1861, 0x80C5, 0x47F1, 0x80C6, 0x0B7E, 0x80CA, 0x429A, 0x80CC, 0x0D0E,
+ 0x80CE, 0x0B3B, 0x80CF, 0x4CF2, 0x80D4, 0x4CF3, 0x80D5, 0x47F2, 0x80D6,
+ 0x1863, 0x80D7, 0x3AB0, 0x80D8, 0x3AB1, 0x80D9, 0x185F, 0x80DA, 0x1862,
+ 0x80DB, 0x185D, 0x80DD, 0x1860, 0x80DE, 0x0E54, 0x80E0, 0x429B, 0x80E1,
+ 0x0789, 0x80E4, 0x04C1, 0x80E5, 0x185E, 0x80E6, 0x47F3, 0x80ED, 0x4CF4,
+ 0x80EF, 0x1865, 0x80F0, 0x4CF5, 0x80F1, 0x1866, 0x80F3, 0x429C, 0x80F4,
+ 0x0C91, 0x80F5, 0x47F5, 0x80F7, 0x4CF6, 0x80F8, 0x06B3, 0x80FA, 0x4CF7,
+ 0x80FB, 0x47F6, 0x80FC, 0x1871, 0x80FD, 0x0CF3, 0x80FE, 0x4CF8, 0x8102,
+ 0x08B7, 0x8103, 0x4CF9, 0x8105, 0x06B4, 0x8106, 0x0A6C, 0x8107, 0x0FEC,
+ 0x8108, 0x0EBA, 0x8109, 0x1864, 0x810A, 0x0A78, 0x810D, 0x47F4, 0x8116,
+ 0x3AB2, 0x8117, 0x4CFA, 0x8118, 0x3AB3, 0x811A, 0x066D, 0x811B, 0x1867,
+ 0x811E, 0x47F9, 0x8123, 0x1869, 0x8124, 0x47FB, 0x8127, 0x47FC, 0x8129,
+ 0x1868, 0x812B, 0x3659, 0x812C, 0x47FD, 0x812F, 0x186A, 0x8130, 0x4CFB,
+ 0x8131, 0x0B64, 0x8133, 0x0CF4, 0x8135, 0x47F8, 0x8139, 0x0BCD, 0x813A,
+ 0x3AB4, 0x813D, 0x47FF, 0x813E, 0x186E, 0x8141, 0x3772, 0x8146, 0x186D,
+ 0x814A, 0x3AB5, 0x814B, 0x186B, 0x814C, 0x3AB6, 0x814E, 0x0A1B, 0x8150,
+ 0x0DD7, 0x8151, 0x1870, 0x8153, 0x186F, 0x8154, 0x07E2, 0x8155, 0x0FF9,
+ 0x8157, 0x4CFC, 0x815F, 0x1880, 0x8160, 0x429D, 0x8165, 0x1874, 0x8166,
+ 0x1875, 0x8167, 0x429E, 0x8168, 0x429F, 0x8169, 0x4801, 0x816B, 0x091C,
+ 0x816D, 0x42A0, 0x816E, 0x1873, 0x816F, 0x4CFD, 0x8170, 0x080A, 0x8171,
+ 0x1872, 0x8173, 0x4CFE, 0x8174, 0x1876, 0x8178, 0x0BCE, 0x8179, 0x0DF2,
+ 0x817A, 0x0AA5, 0x817F, 0x0B3C, 0x8180, 0x187A, 0x8181, 0x3AB7, 0x8182,
+ 0x187B, 0x8183, 0x1877, 0x8184, 0x3AB8, 0x8185, 0x4804, 0x8188, 0x1878,
+ 0x818A, 0x1879, 0x818B, 0x4CFF, 0x818F, 0x07E3, 0x8190, 0x4D00, 0x8193,
+ 0x1881, 0x8195, 0x187D, 0x8198, 0x4806, 0x819A, 0x0DD8, 0x819B, 0x4D01,
+ 0x819C, 0x0E9A, 0x819D, 0x0D9A, 0x819E, 0x4D02, 0x81A0, 0x187C, 0x81A3,
+ 0x187F, 0x81A4, 0x187E, 0x81A8, 0x0E72, 0x81A9, 0x1882, 0x81B0, 0x1883,
+ 0x81B2, 0x4807, 0x81B3, 0x0AB9, 0x81B4, 0x3AB9, 0x81B5, 0x1884, 0x81B8,
+ 0x1886, 0x81BA, 0x188A, 0x81BB, 0x42A1, 0x81BD, 0x1887, 0x81BE, 0x1885,
+ 0x81BF, 0x0CF5, 0x81C0, 0x1888, 0x81C1, 0x4808, 0x81C2, 0x1889, 0x81C3,
+ 0x4809, 0x81C6, 0x0532, 0x81C8, 0x1890, 0x81C9, 0x188B, 0x81CA, 0x42A2,
+ 0x81CB, 0x4D03, 0x81CD, 0x188C, 0x81CF, 0x3ABA, 0x81D1, 0x188D, 0x81D3,
+ 0x0B01, 0x81D5, 0x4D04, 0x81D6, 0x480A, 0x81D7, 0x42A3, 0x81D8, 0x188F,
+ 0x81D9, 0x188E, 0x81DA, 0x1891, 0x81DB, 0x480B, 0x81DD, 0x4D05, 0x81DE,
+ 0x4D06, 0x81DF, 0x1892, 0x81E0, 0x1893, 0x81E1, 0x4D07, 0x81E3, 0x0A09,
+ 0x81E4, 0x480D, 0x81E5, 0x0569, 0x81E7, 0x1894, 0x81E8, 0x0F9F, 0x81EA,
+ 0x08D7, 0x81EC, 0x480F, 0x81ED, 0x0937, 0x81EF, 0x4D08, 0x81F3, 0x08B8,
+ 0x81F4, 0x0B95, 0x81F6, 0x4D09, 0x81F9, 0x3ABB, 0x81FA, 0x1895, 0x81FB,
+ 0x1896, 0x81FC, 0x04D3, 0x81FD, 0x4810, 0x81FE, 0x1897, 0x81FF, 0x4811,
+ 0x8200, 0x4D0A, 0x8201, 0x1898, 0x8202, 0x1899, 0x8203, 0x3ABC, 0x8204,
+ 0x4813, 0x8205, 0x189A, 0x8207, 0x189B, 0x8208, 0x06B5, 0x8209, 0x13AF,
+ 0x820A, 0x189C, 0x820B, 0x4D0B, 0x820C, 0x0A89, 0x820D, 0x189D, 0x820E,
+ 0x08F7, 0x8210, 0x189E, 0x8212, 0x1009, 0x8213, 0x4D0C, 0x8214, 0x4D0D,
+ 0x8216, 0x189F, 0x8217, 0x0E2E, 0x8218, 0x0618, 0x8219, 0x4815, 0x821A,
+ 0x4D0E, 0x821B, 0x0AA6, 0x821C, 0x0962, 0x821E, 0x0DE3, 0x821F, 0x0938,
+ 0x8221, 0x3ABD, 0x8222, 0x4816, 0x8229, 0x18A0, 0x822A, 0x07E4, 0x822B,
+ 0x18A1, 0x822C, 0x0D60, 0x822E, 0x18AF, 0x8232, 0x3ABE, 0x8233, 0x18A3,
+ 0x8234, 0x3ABF, 0x8235, 0x0B29, 0x8236, 0x0D2B, 0x8237, 0x0773, 0x8238,
+ 0x18A2, 0x8239, 0x0AA7, 0x823A, 0x4D0F, 0x823C, 0x4818, 0x8240, 0x18A4,
+ 0x8244, 0x4D10, 0x8245, 0x481A, 0x8246, 0x3AC0, 0x8247, 0x0C16, 0x8249,
+ 0x4819, 0x824B, 0x3AC1, 0x824F, 0x3AC2, 0x8257, 0x481E, 0x8258, 0x18A6,
+ 0x8259, 0x18A5, 0x825A, 0x18A8, 0x825C, 0x4820, 0x825D, 0x18A7, 0x825F,
+ 0x18A9, 0x8260, 0x42A5, 0x8262, 0x18AB, 0x8263, 0x4821, 0x8264, 0x18AA,
+ 0x8266, 0x060B, 0x8268, 0x18AC, 0x826A, 0x18AD, 0x826B, 0x18AE, 0x826D,
+ 0x4D11, 0x826E, 0x0821, 0x826F, 0x0F91, 0x8271, 0x18B0, 0x8272, 0x09ED,
+ 0x8274, 0x42A6, 0x8276, 0x0512, 0x8277, 0x18B1, 0x8278, 0x18B2, 0x8279,
+ 0x3775, 0x827D, 0x4824, 0x827E, 0x18B3, 0x827F, 0x4825, 0x8283, 0x4826,
+ 0x8284, 0x4D12, 0x8289, 0x4D13, 0x828A, 0x4827, 0x828B, 0x04B6, 0x828D,
+ 0x18B4, 0x828E, 0x3AC3, 0x8291, 0x4D14, 0x8292, 0x18B5, 0x8293, 0x4828,
+ 0x8299, 0x0DD9, 0x829D, 0x08F3, 0x829F, 0x18B7, 0x82A1, 0x42A8, 0x82A3,
+ 0x42A9, 0x82A4, 0x42AA, 0x82A5, 0x0587, 0x82A6, 0x0476, 0x82A7, 0x4829,
+ 0x82A8, 0x482A, 0x82A9, 0x42AB, 0x82AA, 0x4D15, 0x82AB, 0x18B6, 0x82AC,
+ 0x18B9, 0x82AD, 0x0D04, 0x82AE, 0x3AC4, 0x82AF, 0x0A0A, 0x82B0, 0x4D16,
+ 0x82B1, 0x0556, 0x82B2, 0x482B, 0x82B3, 0x0E55, 0x82B4, 0x482C, 0x82B7,
+ 0x3AC5, 0x82B8, 0x0733, 0x82B9, 0x06D4, 0x82BA, 0x482D, 0x82BB, 0x18B8,
+ 0x82BC, 0x482E, 0x82BD, 0x056A, 0x82BE, 0x3AC6, 0x82BF, 0x42AC, 0x82C5,
+ 0x05DF, 0x82C6, 0x3AC7, 0x82D0, 0x4D17, 0x82D1, 0x0513, 0x82D2, 0x18BD,
+ 0x82D3, 0x0FB2, 0x82D4, 0x0B3D, 0x82D5, 0x42AD, 0x82D7, 0x0DB6, 0x82D9,
+ 0x18C9, 0x82DB, 0x0557, 0x82DC, 0x18C7, 0x82DE, 0x18C5, 0x82DF, 0x18BC,
+ 0x82E1, 0x18BA, 0x82E2, 0x482F, 0x82E3, 0x18BB, 0x82E5, 0x090F, 0x82E6,
+ 0x06E4, 0x82E7, 0x0BB5, 0x82E8, 0x4830, 0x82EA, 0x4D18, 0x82EB, 0x0CA9,
+ 0x82EF, 0x4D19, 0x82F1, 0x04F3, 0x82F3, 0x18BF, 0x82F4, 0x18BE, 0x82F6,
+ 0x4D1A, 0x82F7, 0x4831, 0x82F9, 0x18C4, 0x82FA, 0x18C0, 0x82FB, 0x18C3,
+ 0x82FD, 0x42AE, 0x82FE, 0x3AC8, 0x8300, 0x42AF, 0x8301, 0x2198, 0x8302,
+ 0x0EDC, 0x8303, 0x18C2, 0x8304, 0x0558, 0x8305, 0x05DB, 0x8306, 0x18C6,
+ 0x8307, 0x4832, 0x8308, 0x4833, 0x8309, 0x18C8, 0x830C, 0x4834, 0x830E,
+ 0x072A, 0x8316, 0x18CC, 0x8317, 0x18D5, 0x8318, 0x18D6, 0x831B, 0x4836,
+ 0x831C, 0x046F, 0x831D, 0x4837, 0x8322, 0x42B0, 0x8323, 0x18DD, 0x8328,
+ 0x04B5, 0x832B, 0x18D4, 0x832D, 0x42B1, 0x832F, 0x18D3, 0x8330, 0x4838,
+ 0x8331, 0x18CE, 0x8332, 0x18CD, 0x8334, 0x18CB, 0x8335, 0x18CA, 0x8336,
+ 0x0BA1, 0x8338, 0x0B5B, 0x8339, 0x18D0, 0x833A, 0x42B2, 0x833C, 0x4839,
+ 0x8340, 0x18CF, 0x8343, 0x3AC9, 0x8344, 0x483A, 0x8345, 0x18D2, 0x8346,
+ 0x1DF8, 0x8347, 0x42B3, 0x8349, 0x0AF2, 0x834A, 0x072B, 0x834F, 0x04E3,
+ 0x8350, 0x18D1, 0x8351, 0x3ACA, 0x8352, 0x07E5, 0x8354, 0x4835, 0x8355,
+ 0x3ACB, 0x8356, 0x4D1B, 0x8357, 0x483B, 0x8358, 0x0AF3, 0x835A, 0x377A,
+ 0x8362, 0x2199, 0x8363, 0x456F, 0x8373, 0x18E3, 0x8375, 0x18E4, 0x8377,
+ 0x0559, 0x8378, 0x4D1C, 0x837B, 0x052E, 0x837C, 0x18E1, 0x837D, 0x42B4,
+ 0x837F, 0x219A, 0x8385, 0x18D7, 0x8386, 0x3ACC, 0x8387, 0x18DF, 0x8389,
+ 0x18E6, 0x838A, 0x18E0, 0x838D, 0x3ACD, 0x838E, 0x18DE, 0x8392, 0x3ACE,
+ 0x8393, 0x18C1, 0x8394, 0x483F, 0x8395, 0x4840, 0x8396, 0x18DC, 0x8398,
+ 0x3ACF, 0x839A, 0x18D8, 0x839B, 0x4841, 0x839D, 0x4842, 0x839E, 0x060C,
+ 0x839F, 0x18DA, 0x83A0, 0x18E5, 0x83A2, 0x18DB, 0x83A7, 0x42B5, 0x83A8,
+ 0x18E7, 0x83A9, 0x3AD0, 0x83AA, 0x18D9, 0x83AB, 0x0D32, 0x83B1, 0x0F53,
+ 0x83B5, 0x18E2, 0x83BD, 0x18F8, 0x83BF, 0x3AD1, 0x83C0, 0x3AD2, 0x83C1,
+ 0x18F0, 0x83C5, 0x0A41, 0x83C7, 0x219B, 0x83C9, 0x4843, 0x83CA, 0x0660,
+ 0x83CC, 0x06D5, 0x83CE, 0x18EB, 0x83CF, 0x42B6, 0x83D0, 0x4844, 0x83D1,
+ 0x42B7, 0x83D3, 0x055B, 0x83D4, 0x4845, 0x83D6, 0x09BC, 0x83D8, 0x18EE,
+ 0x83DC, 0x084A, 0x83DD, 0x4846, 0x83DF, 0x0C4B, 0x83E0, 0x18F3, 0x83E1,
+ 0x42B8, 0x83E5, 0x4847, 0x83E9, 0x0E3E, 0x83EA, 0x3AD3, 0x83EB, 0x18EA,
+ 0x83EF, 0x055A, 0x83F0, 0x078A, 0x83F1, 0x0D9B, 0x83F2, 0x18F4, 0x83F4,
+ 0x18E8, 0x83F6, 0x219C, 0x83F7, 0x18F1, 0x83F8, 0x4D1D, 0x83F9, 0x4848,
+ 0x83FB, 0x18FB, 0x83FC, 0x4D1E, 0x83FD, 0x18EC, 0x8401, 0x42B9, 0x8403,
+ 0x18ED, 0x8404, 0x0C92, 0x8406, 0x42BA, 0x8407, 0x18F2, 0x840A, 0x1E7F,
+ 0x840B, 0x18EF, 0x840C, 0x0E56, 0x840D, 0x18F5, 0x840E, 0x04A4, 0x840F,
+ 0x3AD4, 0x8411, 0x3AD5, 0x8413, 0x18E9, 0x8415, 0x4849, 0x8417, 0x484B,
+ 0x8420, 0x18F7, 0x8422, 0x18F6, 0x8429, 0x0D21, 0x842A, 0x18FD, 0x842C,
+ 0x1908, 0x8431, 0x05DC, 0x8435, 0x190B, 0x8438, 0x18F9, 0x8439, 0x484C,
+ 0x843C, 0x18FE, 0x843D, 0x0F58, 0x8446, 0x1907, 0x8448, 0x219D, 0x8449,
+ 0x0F3F, 0x844A, 0x3AD6, 0x844E, 0x0F72, 0x844F, 0x484D, 0x8451, 0x484E,
+ 0x8452, 0x484F, 0x8457, 0x0BB6, 0x8458, 0x4D1F, 0x8459, 0x4850, 0x845A,
+ 0x4851, 0x845B, 0x05C9, 0x845C, 0x4852, 0x845F, 0x42BB, 0x8461, 0x0DE4,
+ 0x8462, 0x190D, 0x8463, 0x0C79, 0x8465, 0x4854, 0x8466, 0x0475, 0x8469,
+ 0x1906, 0x846B, 0x1902, 0x846C, 0x0AF4, 0x846D, 0x18FC, 0x846E, 0x1904,
+ 0x846F, 0x1909, 0x8470, 0x42BC, 0x8471, 0x0CE2, 0x8473, 0x42BD, 0x8475,
+ 0x046E, 0x8476, 0x3AD7, 0x8477, 0x1901, 0x8478, 0x4855, 0x8479, 0x190A,
+ 0x847A, 0x0DEA, 0x847C, 0x4856, 0x8481, 0x4857, 0x8482, 0x1905, 0x8484,
+ 0x1900, 0x8485, 0x42BE, 0x848B, 0x09BD, 0x8490, 0x0939, 0x8493, 0x4D20,
+ 0x8494, 0x08D8, 0x8497, 0x4859, 0x8499, 0x0EE4, 0x849C, 0x0DB9, 0x849E,
+ 0x42BF, 0x849F, 0x1910, 0x84A1, 0x1919, 0x84A6, 0x485A, 0x84A8, 0x3AD8,
+ 0x84AD, 0x1903, 0x84AF, 0x3AD9, 0x84B1, 0x4D21, 0x84B2, 0x05D5, 0x84B4,
+ 0x219E, 0x84B8, 0x09E0, 0x84B9, 0x190E, 0x84BA, 0x42C0, 0x84BB, 0x1913,
+ 0x84BC, 0x0AF5, 0x84BD, 0x4D22, 0x84BE, 0x485B, 0x84BF, 0x190F, 0x84C0,
+ 0x3ADA, 0x84C1, 0x1916, 0x84C2, 0x3ADB, 0x84C4, 0x0B9D, 0x84C6, 0x1917,
+ 0x84C9, 0x0F40, 0x84CA, 0x190C, 0x84CB, 0x0596, 0x84CD, 0x1912, 0x84CE,
+ 0x485D, 0x84CF, 0x485E, 0x84D0, 0x1915, 0x84D1, 0x0EB8, 0x84D3, 0x485F,
+ 0x84D6, 0x1918, 0x84D9, 0x1911, 0x84DA, 0x1914, 0x84DC, 0x20AB, 0x84E7,
+ 0x4861, 0x84EA, 0x4862, 0x84EC, 0x0E57, 0x84EE, 0x0FC7, 0x84EF, 0x4863,
+ 0x84F0, 0x3ADC, 0x84F1, 0x4864, 0x84F4, 0x191C, 0x84FA, 0x4865, 0x84FB,
+ 0x4D23, 0x84FC, 0x1923, 0x84FD, 0x3ADD, 0x84FF, 0x191B, 0x8500, 0x08EF,
+ 0x8506, 0x18FA, 0x850C, 0x3ADE, 0x8511, 0x0E1E, 0x8513, 0x0EAE, 0x8514,
+ 0x1922, 0x8515, 0x1921, 0x8517, 0x191D, 0x8518, 0x191E, 0x851A, 0x04D8,
+ 0x851B, 0x4866, 0x851E, 0x42C3, 0x851F, 0x1920, 0x8521, 0x191A, 0x8523,
+ 0x1E1A, 0x8524, 0x4867, 0x8525, 0x4868, 0x8526, 0x0BF1, 0x852B, 0x4869,
+ 0x852C, 0x191F, 0x852D, 0x04C2, 0x852F, 0x42C4, 0x8532, 0x42C2, 0x8534,
+ 0x3ADF, 0x8535, 0x0B02, 0x853D, 0x0E13, 0x853E, 0x1EB5, 0x8540, 0x1924,
+ 0x8541, 0x1928, 0x8543, 0x0D6D, 0x8546, 0x4D24, 0x8548, 0x1927, 0x8549,
+ 0x09BE, 0x854A, 0x08F5, 0x854B, 0x192A, 0x854E, 0x06B6, 0x854F, 0x486A,
+ 0x8551, 0x486D, 0x8553, 0x219F, 0x8555, 0x192B, 0x8556, 0x4D25, 0x8557,
+ 0x0DEB, 0x8558, 0x1926, 0x8559, 0x21A0, 0x855A, 0x18FF, 0x855D, 0x4D26,
+ 0x855E, 0x3AE0, 0x8561, 0x486E, 0x8562, 0x486F, 0x8563, 0x1925, 0x8564,
+ 0x42C5, 0x8568, 0x0FF5, 0x8569, 0x0C7A, 0x856A, 0x0DE5, 0x856B, 0x21A1,
+ 0x856D, 0x1932, 0x856F, 0x486B, 0x8577, 0x1938, 0x857A, 0x42C6, 0x857B,
+ 0x4871, 0x857D, 0x4872, 0x857E, 0x1939, 0x857F, 0x4873, 0x8580, 0x192C,
+ 0x8581, 0x4874, 0x8584, 0x0D2C, 0x8585, 0x4D27, 0x8586, 0x4875, 0x8587,
+ 0x1936, 0x8588, 0x192E, 0x858A, 0x1930, 0x858C, 0x42C7, 0x858F, 0x3AE1,
+ 0x8590, 0x193A, 0x8591, 0x192F, 0x8593, 0x4876, 0x8594, 0x1933, 0x8597,
+ 0x0514, 0x8598, 0x4D28, 0x8599, 0x0CBD, 0x859B, 0x1934, 0x859C, 0x1937,
+ 0x859D, 0x4877, 0x859F, 0x4878, 0x85A2, 0x42C8, 0x85A4, 0x192D, 0x85A6,
+ 0x0AA8, 0x85A8, 0x1931, 0x85A9, 0x0875, 0x85AA, 0x0A0B, 0x85AB, 0x0706,
+ 0x85AC, 0x0F00, 0x85AD, 0x3AE4, 0x85AE, 0x0F05, 0x85AF, 0x097C, 0x85B0,
+ 0x21A3, 0x85B7, 0x3AE2, 0x85B9, 0x193E, 0x85BA, 0x193C, 0x85BC, 0x487C,
+ 0x85C1, 0x0FF4, 0x85C7, 0x487D, 0x85C9, 0x193B, 0x85CA, 0x487E, 0x85CB,
+ 0x42C9, 0x85CD, 0x0F5F, 0x85CE, 0x3AE3, 0x85CF, 0x193D, 0x85D0, 0x193F,
+ 0x85D5, 0x1940, 0x85D8, 0x487F, 0x85D9, 0x4880, 0x85DC, 0x1943, 0x85DD,
+ 0x1941, 0x85DF, 0x4881, 0x85E1, 0x4882, 0x85E4, 0x0C7B, 0x85E5, 0x1942,
+ 0x85E6, 0x4883, 0x85E9, 0x0D61, 0x85EA, 0x1935, 0x85ED, 0x42CA, 0x85F4,
+ 0x3780, 0x85F6, 0x4884, 0x85F7, 0x097D, 0x85F9, 0x1944, 0x85FA, 0x1949,
+ 0x85FB, 0x0AF6, 0x85FE, 0x1948, 0x85FF, 0x42CB, 0x8600, 0x4885, 0x8602,
+ 0x1929, 0x8604, 0x42CC, 0x8605, 0x42CD, 0x8606, 0x194A, 0x8607, 0x0ACB,
+ 0x860A, 0x1945, 0x860B, 0x1947, 0x8610, 0x42CE, 0x8611, 0x4886, 0x8612,
+ 0x3AE5, 0x8613, 0x1946, 0x8616, 0x14D0, 0x8617, 0x14C1, 0x8618, 0x42D0,
+ 0x861A, 0x194C, 0x861E, 0x4887, 0x8621, 0x4888, 0x8622, 0x194B, 0x8624,
+ 0x4889, 0x8627, 0x488A, 0x8629, 0x3AE6, 0x862D, 0x0F60, 0x862F, 0x16B1,
+ 0x8630, 0x194D, 0x8638, 0x42D1, 0x8639, 0x488C, 0x863C, 0x488D, 0x863F,
+ 0x194E, 0x8640, 0x488F, 0x8641, 0x41B8, 0x8642, 0x4D29, 0x8646, 0x4D2A,
+ 0x864D, 0x194F, 0x864E, 0x078B, 0x8650, 0x066E, 0x8652, 0x3AE7, 0x8653,
+ 0x4890, 0x8654, 0x1951, 0x8655, 0x1094, 0x8656, 0x4891, 0x8657, 0x42D2,
+ 0x865A, 0x068F, 0x865B, 0x3418, 0x865C, 0x0F82, 0x865E, 0x06EB, 0x865F,
+ 0x1952, 0x8662, 0x42D3, 0x8663, 0x3AE8, 0x8667, 0x1953, 0x866B, 0x0BAC,
+ 0x866C, 0x3AE9, 0x866F, 0x3AEA, 0x8671, 0x1954, 0x8675, 0x42D5, 0x8677,
+ 0x4892, 0x8679, 0x0CD2, 0x867A, 0x3AEB, 0x867B, 0x047E, 0x867D, 0x3786,
+ 0x8687, 0x4893, 0x8689, 0x4894, 0x868A, 0x0563, 0x868B, 0x1959, 0x868C,
+ 0x195A, 0x868D, 0x3AEC, 0x8691, 0x3AED, 0x8693, 0x1955, 0x8695, 0x088B,
+ 0x8698, 0x3AEE, 0x869C, 0x4895, 0x869D, 0x4896, 0x86A3, 0x1956, 0x86A4,
+ 0x0CF8, 0x86A7, 0x3AEF, 0x86A8, 0x3AF0, 0x86A9, 0x1957, 0x86AA, 0x1958,
+ 0x86AB, 0x1962, 0x86AF, 0x195C, 0x86B0, 0x195F, 0x86B1, 0x4897, 0x86B3,
+ 0x4898, 0x86B6, 0x195B, 0x86B8, 0x42D6, 0x86C0, 0x4D2B, 0x86C1, 0x4899,
+ 0x86C3, 0x489A, 0x86C4, 0x195D, 0x86C6, 0x195E, 0x86C7, 0x0904, 0x86C9,
+ 0x1960, 0x86CB, 0x0B7F, 0x86CD, 0x072C, 0x86CE, 0x05A0, 0x86D1, 0x489B,
+ 0x86D4, 0x1963, 0x86D5, 0x489C, 0x86D7, 0x489D, 0x86D9, 0x059D, 0x86DB,
+ 0x1968, 0x86DE, 0x1964, 0x86DF, 0x1967, 0x86E3, 0x489E, 0x86E4, 0x0D4E,
+ 0x86E6, 0x489F, 0x86E9, 0x1965, 0x86EC, 0x1966, 0x86ED, 0x0DBA, 0x86EE,
+ 0x0D6E, 0x86EF, 0x1969, 0x86F8, 0x0B5D, 0x86F9, 0x1973, 0x86FA, 0x3AF1,
+ 0x86FB, 0x196F, 0x86FC, 0x42D7, 0x86FD, 0x3AF2, 0x86FE, 0x056B, 0x8700,
+ 0x196D, 0x8702, 0x0E58, 0x8703, 0x196E, 0x8705, 0x48A1, 0x8706, 0x196B,
+ 0x8707, 0x48A2, 0x8708, 0x196C, 0x8709, 0x1971, 0x870A, 0x1974, 0x870B,
+ 0x3AF3, 0x870D, 0x1972, 0x870E, 0x48A3, 0x8710, 0x48A4, 0x8711, 0x1970,
+ 0x8712, 0x196A, 0x8713, 0x3AF4, 0x8714, 0x4D2C, 0x8718, 0x0B96, 0x8719,
+ 0x3AF5, 0x871A, 0x197B, 0x871C, 0x0EB6, 0x871E, 0x3AF6, 0x871F, 0x48A5,
+ 0x8721, 0x48A6, 0x8722, 0x4D2D, 0x8723, 0x48A7, 0x8725, 0x1979, 0x8728,
+ 0x3AF7, 0x8729, 0x197A, 0x872E, 0x4D2E, 0x8731, 0x48A8, 0x8734, 0x1975,
+ 0x8737, 0x1977, 0x8739, 0x4D2F, 0x873A, 0x48A9, 0x873B, 0x1978, 0x873E,
+ 0x3AF8, 0x873F, 0x1976, 0x8740, 0x48AA, 0x8743, 0x48AB, 0x8749, 0x0A8A,
+ 0x874B, 0x0FDF, 0x874C, 0x197F, 0x874E, 0x1980, 0x8751, 0x48AC, 0x8753,
+ 0x1986, 0x8755, 0x09F0, 0x8757, 0x1982, 0x8758, 0x48AD, 0x8759, 0x1985,
+ 0x875D, 0x4D30, 0x875F, 0x197D, 0x8760, 0x197C, 0x8763, 0x1987, 0x8764,
+ 0x48AE, 0x8765, 0x48AF, 0x8766, 0x055C, 0x8768, 0x1983, 0x876A, 0x1988,
+ 0x876E, 0x1984, 0x8771, 0x3AF9, 0x8772, 0x48B0, 0x8774, 0x1981, 0x8776,
+ 0x0BCF, 0x8778, 0x197E, 0x877B, 0x4D31, 0x877C, 0x48B1, 0x877F, 0x0D1E,
+ 0x8782, 0x198C, 0x8787, 0x42D8, 0x8788, 0x3AFA, 0x8789, 0x48B5, 0x878B,
+ 0x48B6, 0x878C, 0x4D32, 0x878D, 0x0F25, 0x878E, 0x4D33, 0x8793, 0x48B7,
+ 0x8797, 0x4D34, 0x8798, 0x4D35, 0x8799, 0x3AFB, 0x879E, 0x4D36, 0x879F,
+ 0x198B, 0x87A0, 0x48B8, 0x87A2, 0x198A, 0x87A3, 0x4D37, 0x87A7, 0x48B4,
+ 0x87AB, 0x1993, 0x87AC, 0x3AFC, 0x87AD, 0x3AFD, 0x87AE, 0x4D38, 0x87AF,
+ 0x198D, 0x87B3, 0x1995, 0x87B5, 0x3AFE, 0x87BA, 0x0F50, 0x87BB, 0x1998,
+ 0x87BD, 0x198F, 0x87BE, 0x48BB, 0x87BF, 0x4D39, 0x87C0, 0x1990, 0x87C1,
+ 0x48BD, 0x87C4, 0x1994, 0x87C6, 0x1997, 0x87C7, 0x1996, 0x87C9, 0x4D3A,
+ 0x87CB, 0x198E, 0x87CE, 0x48BE, 0x87D0, 0x1991, 0x87D2, 0x19A2, 0x87D6,
+ 0x3AFF, 0x87DA, 0x4D3B, 0x87DF, 0x48BF, 0x87E0, 0x199B, 0x87E3, 0x48C1,
+ 0x87E5, 0x48C2, 0x87E6, 0x48C3, 0x87EA, 0x48C4, 0x87EB, 0x3B00, 0x87EC,
+ 0x1E23, 0x87ED, 0x3B01, 0x87EF, 0x1999, 0x87F2, 0x199A, 0x87F5, 0x3C3D,
+ 0x87F6, 0x199F, 0x87F7, 0x19A0, 0x87F9, 0x0588, 0x87FB, 0x065C, 0x87FE,
+ 0x199E, 0x8801, 0x3B02, 0x8803, 0x4F58, 0x8805, 0x1989, 0x8806, 0x3B04,
+ 0x8807, 0x21A6, 0x880A, 0x42DA, 0x880B, 0x3B05, 0x880D, 0x199D, 0x880E,
+ 0x19A1, 0x880F, 0x199C, 0x8810, 0x42DB, 0x8811, 0x19A3, 0x8813, 0x48C5,
+ 0x8814, 0x3B06, 0x8815, 0x19A5, 0x8816, 0x19A4, 0x8818, 0x4D3C, 0x881B,
+ 0x4D3D, 0x881C, 0x3B07, 0x881F, 0x1E85, 0x8821, 0x19A7, 0x8822, 0x19A6,
+ 0x8823, 0x1961, 0x8827, 0x19AB, 0x8828, 0x48C6, 0x882D, 0x4D3E, 0x882E,
+ 0x48C7, 0x8831, 0x19A8, 0x8832, 0x48C8, 0x8836, 0x19A9, 0x8839, 0x19AA,
+ 0x883A, 0x4D3F, 0x883B, 0x19AC, 0x883C, 0x48C9, 0x8840, 0x0742, 0x8842,
+ 0x19AE, 0x8844, 0x19AD, 0x8845, 0x4D40, 0x8846, 0x093A, 0x884A, 0x48CB,
+ 0x884B, 0x4D41, 0x884C, 0x07E6, 0x884D, 0x1524, 0x884E, 0x4D42, 0x8852,
+ 0x19AF, 0x8853, 0x095B, 0x8855, 0x4D43, 0x8856, 0x3B08, 0x8857, 0x0597,
+ 0x8858, 0x48CC, 0x8859, 0x19B0, 0x885A, 0x4D44, 0x885B, 0x04F4, 0x885D,
+ 0x09BF, 0x885E, 0x19B1, 0x885F, 0x3B09, 0x8861, 0x07E7, 0x8862, 0x19B2,
+ 0x8863, 0x04A5, 0x8864, 0x3B0A, 0x8868, 0x0DAF, 0x8869, 0x48CF, 0x886B,
+ 0x19B3, 0x886E, 0x4D45, 0x886F, 0x48D1, 0x8870, 0x0A30, 0x8872, 0x19BA,
+ 0x8875, 0x19B7, 0x8877, 0x0BAD, 0x887D, 0x19B8, 0x887E, 0x19B5, 0x887F,
+ 0x06D6, 0x8881, 0x19B4, 0x8882, 0x19BB, 0x8888, 0x070C, 0x888B, 0x0B3E,
+ 0x888D, 0x19C1, 0x8892, 0x19BD, 0x8896, 0x0B15, 0x8897, 0x19BC, 0x8898,
+ 0x3B0B, 0x8899, 0x19BF, 0x889A, 0x4D46, 0x889B, 0x4D47, 0x889C, 0x4D48,
+ 0x889E, 0x19B6, 0x88A0, 0x48D2, 0x88A2, 0x19C0, 0x88A4, 0x19C2, 0x88AA,
+ 0x3B0C, 0x88AB, 0x0D83, 0x88AE, 0x19BE, 0x88B0, 0x19C3, 0x88B1, 0x19C5,
+ 0x88B4, 0x0787, 0x88B5, 0x19B9, 0x88B7, 0x0485, 0x88BC, 0x48D3, 0x88BD,
+ 0x3B0D, 0x88BE, 0x3B0E, 0x88BF, 0x19C4, 0x88C0, 0x48D4, 0x88C1, 0x084B,
+ 0x88C2, 0x0FBE, 0x88C3, 0x19C6, 0x88C4, 0x19C7, 0x88C5, 0x0AF7, 0x88C6,
+ 0x3789, 0x88CA, 0x3B0F, 0x88CD, 0x4D49, 0x88CE, 0x42DC, 0x88CF, 0x0F6A,
+ 0x88D1, 0x48D6, 0x88D2, 0x3B10, 0x88D3, 0x48D7, 0x88D4, 0x19C8, 0x88D5,
+ 0x0F1F, 0x88D8, 0x19C9, 0x88D9, 0x19CA, 0x88DB, 0x3B11, 0x88DC, 0x0E34,
+ 0x88DD, 0x19CB, 0x88DF, 0x0830, 0x88E0, 0x4D4A, 0x88E1, 0x0F6B, 0x88E8,
+ 0x19D0, 0x88EF, 0x4D4B, 0x88F0, 0x3B12, 0x88F1, 0x3B13, 0x88F2, 0x19D1,
+ 0x88F3, 0x09C0, 0x88F4, 0x19CF, 0x88F5, 0x21A7, 0x88F8, 0x0F51, 0x88F9,
+ 0x19CC, 0x88FC, 0x19CE, 0x88FD, 0x0A61, 0x88FE, 0x0A44, 0x8901, 0x48D9,
+ 0x8902, 0x19CD, 0x8904, 0x19D2, 0x8906, 0x3B14, 0x8907, 0x0DF3, 0x890A,
+ 0x19D4, 0x890C, 0x19D3, 0x890E, 0x4D4C, 0x890F, 0x4D4D, 0x8910, 0x05CA,
+ 0x8912, 0x0E59, 0x8913, 0x19D5, 0x8918, 0x3B15, 0x8919, 0x3B16, 0x891A,
+ 0x3B17, 0x891C, 0x20A8, 0x891D, 0x19E1, 0x891E, 0x19D7, 0x8925, 0x19D8,
+ 0x8926, 0x4D4E, 0x8927, 0x3B18, 0x892A, 0x19D9, 0x892B, 0x19DA, 0x8930,
+ 0x3B19, 0x8932, 0x42DE, 0x8935, 0x4D4F, 0x8936, 0x19DE, 0x8937, 0x48DB,
+ 0x8938, 0x19DF, 0x8939, 0x42DF, 0x893B, 0x19DD, 0x893E, 0x3B1A, 0x8940,
+ 0x42E0, 0x8941, 0x19DB, 0x8942, 0x48DD, 0x8943, 0x19D6, 0x8944, 0x19DC,
+ 0x8945, 0x48DE, 0x8949, 0x48DF, 0x894C, 0x19E0, 0x894D, 0x1BD0, 0x8956,
+ 0x0528, 0x895A, 0x4D50, 0x895C, 0x4D51, 0x895E, 0x19E3, 0x895F, 0x06D7,
+ 0x8960, 0x19E2, 0x8962, 0x48E1, 0x8964, 0x19E5, 0x8966, 0x19E4, 0x896A,
+ 0x19E7, 0x896B, 0x4D52, 0x896D, 0x19E6, 0x896F, 0x19E8, 0x8970, 0x4D53,
+ 0x8972, 0x093B, 0x8974, 0x19E9, 0x8977, 0x19EA, 0x897B, 0x3B1B, 0x897C,
+ 0x4D54, 0x897E, 0x19EB, 0x897F, 0x0A62, 0x8980, 0x362E, 0x8981, 0x0F41,
+ 0x8983, 0x19EC, 0x8986, 0x0DF4, 0x8987, 0x0CFC, 0x8988, 0x19ED, 0x8989,
+ 0x48E2, 0x898A, 0x19EE, 0x898B, 0x075F, 0x898F, 0x0646, 0x8990, 0x48E3,
+ 0x8993, 0x19EF, 0x8994, 0x42E1, 0x8996, 0x08B9, 0x8997, 0x0CF7, 0x8998,
+ 0x19F0, 0x899A, 0x05AE, 0x899F, 0x48E4, 0x89A1, 0x19F1, 0x89A5, 0x4D55,
+ 0x89A6, 0x19F3, 0x89A7, 0x0F61, 0x89A9, 0x19F2, 0x89AA, 0x0A0C, 0x89AC,
+ 0x19F4, 0x89AF, 0x19F5, 0x89B0, 0x48E5, 0x89B2, 0x19F6, 0x89B3, 0x060D,
+ 0x89B5, 0x4D56, 0x89B7, 0x48E6, 0x89BA, 0x19F7, 0x89BC, 0x4D57, 0x89BD,
+ 0x19F8, 0x89BF, 0x19F9, 0x89C0, 0x19FA, 0x89D2, 0x05AF, 0x89D4, 0x3B1C,
+ 0x89D5, 0x4D58, 0x89D6, 0x3B1D, 0x89D8, 0x48E7, 0x89DA, 0x19FB, 0x89DC,
+ 0x19FC, 0x89DD, 0x19FD, 0x89E3, 0x0572, 0x89E5, 0x3B1E, 0x89E6, 0x09EE,
+ 0x89E7, 0x19FE, 0x89EB, 0x48E8, 0x89F1, 0x3B1F, 0x89F3, 0x48EA, 0x89F4,
+ 0x19FF, 0x89F6, 0x42E2, 0x89F8, 0x1A00, 0x89FD, 0x48EB, 0x89FF, 0x48EC,
+ 0x8A00, 0x0774, 0x8A01, 0x35BC, 0x8A02, 0x0C17, 0x8A03, 0x1A01, 0x8A07,
+ 0x3B20, 0x8A08, 0x072D, 0x8A0A, 0x0A1C, 0x8A0C, 0x1A04, 0x8A0E, 0x0C7C,
+ 0x8A0F, 0x3B21, 0x8A10, 0x1A03, 0x8A11, 0x48EE, 0x8A12, 0x21A8, 0x8A13,
+ 0x0707, 0x8A14, 0x48EF, 0x8A15, 0x3B22, 0x8A16, 0x1A02, 0x8A17, 0x0B57,
+ 0x8A18, 0x0647, 0x8A1B, 0x1A05, 0x8A1D, 0x1A06, 0x8A1F, 0x09C1, 0x8A21,
+ 0x48F1, 0x8A22, 0x3B23, 0x8A23, 0x0743, 0x8A25, 0x1A07, 0x8A2A, 0x0E5A,
+ 0x8A2D, 0x0A83, 0x8A31, 0x0690, 0x8A33, 0x0F01, 0x8A34, 0x0ACC, 0x8A35,
+ 0x48F2, 0x8A36, 0x1A08, 0x8A37, 0x21A9, 0x8A3A, 0x0A0D, 0x8A3B, 0x0BAE,
+ 0x8A3C, 0x09C2, 0x8A3E, 0x48F3, 0x8A41, 0x1A09, 0x8A45, 0x48F4, 0x8A46,
+ 0x1A0C, 0x8A47, 0x42E3, 0x8A48, 0x1A0D, 0x8A49, 0x4D59, 0x8A4D, 0x48F5,
+ 0x8A4E, 0x3B24, 0x8A50, 0x082E, 0x8A51, 0x0B22, 0x8A52, 0x1A0B, 0x8A54,
+ 0x09C3, 0x8A55, 0x0DB0, 0x8A57, 0x4D5A, 0x8A58, 0x48F6, 0x8A5B, 0x1A0A,
+ 0x8A5D, 0x42E4, 0x8A5E, 0x08BA, 0x8A60, 0x04F5, 0x8A61, 0x42E5, 0x8A62,
+ 0x1A11, 0x8A63, 0x072E, 0x8A66, 0x08BC, 0x8A67, 0x4D5B, 0x8A69, 0x08BB,
+ 0x8A6B, 0x0FF3, 0x8A6C, 0x1A10, 0x8A6D, 0x1A0F, 0x8A6E, 0x0AA9, 0x8A70,
+ 0x0667, 0x8A71, 0x0FE9, 0x8A72, 0x0598, 0x8A73, 0x09C4, 0x8A75, 0x42E6,
+ 0x8A79, 0x21AA, 0x8A7C, 0x1A0E, 0x8A7E, 0x4D5C, 0x8A7F, 0x3B25, 0x8A82,
+ 0x1A13, 0x8A84, 0x1A14, 0x8A85, 0x1A12, 0x8A86, 0x4D5D, 0x8A87, 0x078C,
+ 0x8A89, 0x0F2A, 0x8A8C, 0x08BD, 0x8A8D, 0x0CDD, 0x8A90, 0x48F8, 0x8A91,
+ 0x1A17, 0x8A93, 0x0A64, 0x8A95, 0x0B80, 0x8A96, 0x4D5E, 0x8A98, 0x0F20,
+ 0x8A9A, 0x1A1A, 0x8A9E, 0x07A0, 0x8AA0, 0x0A63, 0x8AA1, 0x1A16, 0x8AA3,
+ 0x1A1B, 0x8AA4, 0x07A1, 0x8AA5, 0x1A18, 0x8AA6, 0x1A19, 0x8AA7, 0x21AB,
+ 0x8AA8, 0x1A15, 0x8AAA, 0x3638, 0x8AAC, 0x0A86, 0x8AAD, 0x0CA1, 0x8AAE,
+ 0x48F7, 0x8AB0, 0x0B6D, 0x8AB2, 0x055D, 0x8AB6, 0x4D5F, 0x8AB7, 0x48F9,
+ 0x8AB9, 0x0D84, 0x8ABC, 0x065D, 0x8ABE, 0x21AC, 0x8ABF, 0x0BD0, 0x8AC2,
+ 0x1A1E, 0x8AC4, 0x1A1C, 0x8AC7, 0x0B8A, 0x8AC9, 0x4D60, 0x8ACB, 0x0A65,
+ 0x8ACC, 0x060E, 0x8ACD, 0x1A1D, 0x8ACF, 0x0A21, 0x8AD0, 0x42E7, 0x8AD1,
+ 0x4D61, 0x8AD2, 0x0F92, 0x8AD6, 0x0FE6, 0x8AD7, 0x48FA, 0x8ADA, 0x1A1F,
+ 0x8ADB, 0x1A2A, 0x8ADC, 0x0BD1, 0x8ADD, 0x4D62, 0x8ADE, 0x1A29, 0x8ADF,
+ 0x21AD, 0x8AE0, 0x1A26, 0x8AE1, 0x1A2E, 0x8AE2, 0x1A27, 0x8AE4, 0x1A23,
+ 0x8AE6, 0x0C18, 0x8AE7, 0x1A22, 0x8AEB, 0x1A20, 0x8AEC, 0x4D63, 0x8AED,
+ 0x0F0B, 0x8AEE, 0x08BE, 0x8AF1, 0x1A24, 0x8AF3, 0x1A21, 0x8AF4, 0x3B26,
+ 0x8AF5, 0x4D64, 0x8AF6, 0x21AF, 0x8AF7, 0x1A28, 0x8AF8, 0x097E, 0x8AFA,
+ 0x0775, 0x8AFC, 0x48FB, 0x8AFE, 0x0B5A, 0x8B00, 0x0E73, 0x8B01, 0x04FC,
+ 0x8B02, 0x04A6, 0x8B04, 0x0C7D, 0x8B05, 0x48FE, 0x8B06, 0x4D65, 0x8B07,
+ 0x1A2C, 0x8B0A, 0x48FD, 0x8B0C, 0x1A2B, 0x8B0D, 0x48FF, 0x8B0E, 0x0CBE,
+ 0x8B0F, 0x4D66, 0x8B10, 0x1A30, 0x8B11, 0x4D67, 0x8B14, 0x1A25, 0x8B16,
+ 0x1A2F, 0x8B17, 0x1A31, 0x8B19, 0x0760, 0x8B1A, 0x1A2D, 0x8B1B, 0x07E8,
+ 0x8B1C, 0x4900, 0x8B1D, 0x0901, 0x8B1F, 0x3B27, 0x8B20, 0x1A32, 0x8B21,
+ 0x0F42, 0x8B26, 0x1A35, 0x8B28, 0x1A38, 0x8B2B, 0x1A36, 0x8B2C, 0x0DA7,
+ 0x8B2D, 0x4901, 0x8B33, 0x1A33, 0x8B37, 0x3B28, 0x8B39, 0x06D8, 0x8B3E,
+ 0x1A37, 0x8B41, 0x1A39, 0x8B43, 0x3B29, 0x8B44, 0x3B2A, 0x8B45, 0x4D68,
+ 0x8B46, 0x42E8, 0x8B49, 0x1A3D, 0x8B4C, 0x1A3A, 0x8B4E, 0x1A3C, 0x8B4F,
+ 0x1A3B, 0x8B51, 0x4903, 0x8B52, 0x4D69, 0x8B53, 0x21B0, 0x8B54, 0x3B2B,
+ 0x8B56, 0x1A3E, 0x8B58, 0x08DD, 0x8B59, 0x42E9, 0x8B5A, 0x1A40, 0x8B5B,
+ 0x1A3F, 0x8B5C, 0x0DDA, 0x8B5E, 0x4904, 0x8B5F, 0x1A42, 0x8B66, 0x072F,
+ 0x8B69, 0x42EA, 0x8B6B, 0x1A41, 0x8B6C, 0x1A43, 0x8B6D, 0x4D6A, 0x8B6F,
+ 0x1A44, 0x8B70, 0x065E, 0x8B71, 0x182E, 0x8B72, 0x09E1, 0x8B74, 0x1A45,
+ 0x8B76, 0x4905, 0x8B77, 0x07A2, 0x8B78, 0x4D6B, 0x8B7C, 0x4D6C, 0x8B7D,
+ 0x1A46, 0x8B7E, 0x4D6D, 0x8B7F, 0x21B1, 0x8B80, 0x1A47, 0x8B81, 0x4906,
+ 0x8B83, 0x088C, 0x8B85, 0x4D6E, 0x8B8A, 0x13D3, 0x8B8B, 0x4907, 0x8B8C,
+ 0x1A48, 0x8B8E, 0x1A49, 0x8B90, 0x093C, 0x8B92, 0x1A4A, 0x8B93, 0x1A4B,
+ 0x8B94, 0x4908, 0x8B95, 0x4909, 0x8B96, 0x1A4C, 0x8B99, 0x1A4D, 0x8B9A,
+ 0x1A4E, 0x8B9C, 0x3B2C, 0x8B9D, 0x42EB, 0x8B9E, 0x3B2D, 0x8B9F, 0x4D6F,
+ 0x8C37, 0x0B69, 0x8C39, 0x490A, 0x8C3A, 0x1A4F, 0x8C3D, 0x490C, 0x8C3F,
+ 0x1A51, 0x8C41, 0x1A50, 0x8C45, 0x490F, 0x8C46, 0x0C7E, 0x8C47, 0x3B2E,
+ 0x8C48, 0x1A52, 0x8C49, 0x42EC, 0x8C4A, 0x0E5B, 0x8C4B, 0x4D70, 0x8C4C,
+ 0x1A53, 0x8C4E, 0x1A54, 0x8C4F, 0x4910, 0x8C50, 0x1A55, 0x8C53, 0x4D71,
+ 0x8C54, 0x3B2F, 0x8C55, 0x1A56, 0x8C57, 0x4911, 0x8C5A, 0x0CB2, 0x8C61,
+ 0x09C5, 0x8C62, 0x1A57, 0x8C68, 0x42ED, 0x8C69, 0x4912, 0x8C6A, 0x07FD,
+ 0x8C6B, 0x1007, 0x8C6C, 0x1A58, 0x8C6D, 0x4913, 0x8C73, 0x3B30, 0x8C78,
+ 0x1A59, 0x8C79, 0x0DB1, 0x8C7A, 0x1A5A, 0x8C7B, 0x4D72, 0x8C7C, 0x1A62,
+ 0x8C82, 0x1A5B, 0x8C85, 0x1A5D, 0x8C89, 0x1A5C, 0x8C8A, 0x1A5E, 0x8C8C,
+ 0x0E74, 0x8C8D, 0x1A5F, 0x8C8E, 0x1A60, 0x8C92, 0x4916, 0x8C93, 0x4915,
+ 0x8C94, 0x1A61, 0x8C98, 0x1A63, 0x8C99, 0x4917, 0x8C9B, 0x4919, 0x8C9D,
+ 0x058B, 0x8C9E, 0x0C03, 0x8C9F, 0x354C, 0x8CA0, 0x0DDB, 0x8CA1, 0x0852,
+ 0x8CA2, 0x07E9, 0x8CA4, 0x3B31, 0x8CA7, 0x0DC1, 0x8CA8, 0x055F, 0x8CA9,
+ 0x0D62, 0x8CAA, 0x1A66, 0x8CAB, 0x060F, 0x8CAC, 0x0A79, 0x8CAD, 0x1A65,
+ 0x8CAE, 0x1A6A, 0x8CAF, 0x0BB7, 0x8CB0, 0x0EEF, 0x8CB2, 0x1A68, 0x8CB3,
+ 0x1A69, 0x8CB4, 0x0648, 0x8CB6, 0x1A6B, 0x8CB7, 0x0D19, 0x8CB8, 0x0B3F,
+ 0x8CBA, 0x4D73, 0x8CBB, 0x0D85, 0x8CBC, 0x0C37, 0x8CBD, 0x1A67, 0x8CBF,
+ 0x0E75, 0x8CC0, 0x056C, 0x8CC1, 0x1A6D, 0x8CC2, 0x0FCE, 0x8CC3, 0x0BDE,
+ 0x8CC4, 0x0FEB, 0x8CC5, 0x4D74, 0x8CC7, 0x08BF, 0x8CC8, 0x1A6C, 0x8CC9,
+ 0x4D75, 0x8CCA, 0x0B11, 0x8CCD, 0x1A7D, 0x8CCE, 0x0AAA, 0x8CD1, 0x0CD0,
+ 0x8CD2, 0x4D76, 0x8CD3, 0x0DC2, 0x8CD5, 0x491B, 0x8CD6, 0x491A, 0x8CD9,
+ 0x3B32, 0x8CDA, 0x1A70, 0x8CDB, 0x088D, 0x8CDC, 0x08C0, 0x8CDE, 0x09C6,
+ 0x8CE0, 0x0D1B, 0x8CE1, 0x3B33, 0x8CE2, 0x0761, 0x8CE3, 0x1A6F, 0x8CE4,
+ 0x1A6E, 0x8CE6, 0x0DDC, 0x8CEA, 0x08ED, 0x8CEC, 0x4D77, 0x8CED, 0x0C4C,
+ 0x8CF0, 0x21B2, 0x8CF1, 0x491D, 0x8CF4, 0x21B3, 0x8CF5, 0x4D78, 0x8CF7,
+ 0x4D79, 0x8CF8, 0x3B34, 0x8CFA, 0x1A72, 0x8CFB, 0x1A73, 0x8CFC, 0x07EA,
+ 0x8CFD, 0x1A71, 0x8CFE, 0x3B35, 0x8D01, 0x4D7A, 0x8D03, 0x4D7B, 0x8D04,
+ 0x1A74, 0x8D05, 0x1A75, 0x8D07, 0x1A77, 0x8D08, 0x0B03, 0x8D09, 0x491F,
+ 0x8D0A, 0x1A76, 0x8D0B, 0x0622, 0x8D0D, 0x1A79, 0x8D0E, 0x4920, 0x8D0F,
+ 0x1A78, 0x8D10, 0x1A7A, 0x8D12, 0x21B4, 0x8D13, 0x1A7C, 0x8D14, 0x1A7E,
+ 0x8D16, 0x1A7F, 0x8D17, 0x4D7C, 0x8D1B, 0x3B36, 0x8D1C, 0x4D7D, 0x8D64,
+ 0x0A7A, 0x8D66, 0x08FB, 0x8D67, 0x1A80, 0x8D69, 0x3B37, 0x8D6B, 0x05B0,
+ 0x8D6C, 0x3B38, 0x8D6D, 0x1A81, 0x8D6E, 0x4D7E, 0x8D70, 0x0AF8, 0x8D71,
+ 0x1A82, 0x8D73, 0x1A83, 0x8D74, 0x0DDD, 0x8D76, 0x21B5, 0x8D77, 0x0649,
+ 0x8D81, 0x1A84, 0x8D84, 0x3B39, 0x8D85, 0x0BD2, 0x8D8A, 0x04FD, 0x8D8D,
+ 0x3B3A, 0x8D91, 0x4D7F, 0x8D95, 0x3B3B, 0x8D99, 0x1A85, 0x8D9F, 0x4D80,
+ 0x8DA3, 0x091D, 0x8DA6, 0x3B3C, 0x8DA8, 0x0A3C, 0x8DAB, 0x4D81, 0x8DAF,
+ 0x42EE, 0x8DB2, 0x4D82, 0x8DB3, 0x0B0D, 0x8DBA, 0x1A88, 0x8DBE, 0x1A87,
+ 0x8DC2, 0x1A86, 0x8DC6, 0x3B3D, 0x8DC8, 0x4921, 0x8DCB, 0x1A8E, 0x8DCC,
+ 0x1A8C, 0x8DCE, 0x3B3E, 0x8DCF, 0x1A89, 0x8DD1, 0x42EF, 0x8DD5, 0x4D83,
+ 0x8DD6, 0x1A8B, 0x8DD7, 0x42F0, 0x8DD9, 0x4922, 0x8DDA, 0x1A8A, 0x8DDB,
+ 0x1A8D, 0x8DDD, 0x0691, 0x8DDF, 0x1A91, 0x8DE1, 0x0A7B, 0x8DE3, 0x1A92,
+ 0x8DE4, 0x3B3F, 0x8DE7, 0x4D84, 0x8DE8, 0x078D, 0x8DEA, 0x1A8F, 0x8DEB,
+ 0x1A90, 0x8DEC, 0x3B40, 0x8DEF, 0x0FCF, 0x8DF1, 0x4D85, 0x8DF2, 0x4D86,
+ 0x8DF3, 0x0BD3, 0x8DF4, 0x4D87, 0x8DF5, 0x0AAB, 0x8DFC, 0x1A93, 0x8DFD,
+ 0x4925, 0x8DFF, 0x1A96, 0x8E01, 0x4D88, 0x8E06, 0x4926, 0x8E08, 0x1A94,
+ 0x8E09, 0x1A95, 0x8E0A, 0x0F43, 0x8E0B, 0x4D89, 0x8E0C, 0x4923, 0x8E0F,
+ 0x0C7F, 0x8E10, 0x1A99, 0x8E14, 0x4928, 0x8E16, 0x4929, 0x8E1D, 0x1A97,
+ 0x8E1E, 0x1A98, 0x8E1F, 0x1A9A, 0x8E20, 0x3B41, 0x8E21, 0x492A, 0x8E22,
+ 0x492B, 0x8E23, 0x42F1, 0x8E26, 0x4D8A, 0x8E27, 0x492C, 0x8E2A, 0x1AA8,
+ 0x8E30, 0x1A9D, 0x8E31, 0x4D8B, 0x8E34, 0x1A9E, 0x8E35, 0x1A9C, 0x8E36,
+ 0x492F, 0x8E39, 0x4930, 0x8E3D, 0x42F2, 0x8E40, 0x4D8C, 0x8E41, 0x4D8D,
+ 0x8E42, 0x1A9B, 0x8E44, 0x0C19, 0x8E47, 0x1AA0, 0x8E48, 0x1AA4, 0x8E49,
+ 0x1AA1, 0x8E4A, 0x1A9F, 0x8E4B, 0x3B42, 0x8E4C, 0x1AA2, 0x8E4D, 0x4D8E,
+ 0x8E4F, 0x4D8F, 0x8E50, 0x1AA3, 0x8E54, 0x4931, 0x8E55, 0x1AAA, 0x8E59,
+ 0x1AA5, 0x8E5C, 0x4D90, 0x8E5F, 0x0A7C, 0x8E60, 0x1AA7, 0x8E61, 0x4D91,
+ 0x8E62, 0x4932, 0x8E63, 0x1AA9, 0x8E64, 0x1AA6, 0x8E69, 0x4D92, 0x8E6C,
+ 0x3B43, 0x8E6D, 0x4933, 0x8E6F, 0x4934, 0x8E70, 0x3B44, 0x8E71, 0x4D93,
+ 0x8E72, 0x1AAC, 0x8E74, 0x093D, 0x8E75, 0x4D94, 0x8E76, 0x1AAB, 0x8E77,
+ 0x4D95, 0x8E7A, 0x3B45, 0x8E7B, 0x42F3, 0x8E7C, 0x1AAD, 0x8E81, 0x1AAE,
+ 0x8E84, 0x1AB1, 0x8E85, 0x1AB0, 0x8E87, 0x1AAF, 0x8E89, 0x4D96, 0x8E8A,
+ 0x1AB3, 0x8E8B, 0x1AB2, 0x8E8D, 0x0F02, 0x8E90, 0x4D97, 0x8E91, 0x1AB5,
+ 0x8E92, 0x3B46, 0x8E93, 0x1AB4, 0x8E94, 0x1AB6, 0x8E95, 0x4D98, 0x8E98,
+ 0x4935, 0x8E99, 0x1AB7, 0x8E9A, 0x4D99, 0x8E9E, 0x4936, 0x8EA1, 0x1AB9,
+ 0x8EA7, 0x4D9A, 0x8EA9, 0x4D9B, 0x8EAA, 0x1AB8, 0x8EAB, 0x0A0E, 0x8EAC,
+ 0x1ABA, 0x8EAD, 0x4D9C, 0x8EAE, 0x3B47, 0x8EAF, 0x06E5, 0x8EB0, 0x1ABB,
+ 0x8EB1, 0x1ABD, 0x8EB3, 0x3B48, 0x8EB5, 0x4937, 0x8EB6, 0x3703, 0x8EBB,
+ 0x4938, 0x8EBE, 0x1ABE, 0x8EC0, 0x1DEF, 0x8EC5, 0x1ABF, 0x8EC6, 0x1ABC,
+ 0x8EC8, 0x1AC0, 0x8ECA, 0x0902, 0x8ECB, 0x1AC1, 0x8ECC, 0x064A, 0x8ECD,
+ 0x0709, 0x8ECF, 0x21B7, 0x8ED1, 0x3B49, 0x8ED2, 0x0762, 0x8ED4, 0x3B4A,
+ 0x8EDB, 0x1AC2, 0x8EDF, 0x0CC8, 0x8EE2, 0x0C38, 0x8EE3, 0x1AC3, 0x8EE8,
+ 0x4D9D, 0x8EEB, 0x1AC6, 0x8EF0, 0x4D9E, 0x8EF8, 0x08E0, 0x8EF9, 0x3B4B,
+ 0x8EFA, 0x42F6, 0x8EFB, 0x1AC5, 0x8EFC, 0x1AC4, 0x8EFD, 0x0730, 0x8EFE,
+ 0x1AC7, 0x8F00, 0x493C, 0x8F03, 0x05B1, 0x8F05, 0x1AC9, 0x8F07, 0x4D9F,
+ 0x8F08, 0x493D, 0x8F09, 0x084C, 0x8F0A, 0x1AC8, 0x8F0C, 0x1AD1, 0x8F12,
+ 0x1ACB, 0x8F13, 0x1ACD, 0x8F14, 0x0E35, 0x8F15, 0x1ACA, 0x8F17, 0x3B4C,
+ 0x8F18, 0x4DA0, 0x8F19, 0x1ACC, 0x8F1B, 0x1AD0, 0x8F1C, 0x1ACE, 0x8F1D,
+ 0x064B, 0x8F1E, 0x42F7, 0x8F1F, 0x1ACF, 0x8F25, 0x4DA1, 0x8F26, 0x1AD2,
+ 0x8F27, 0x4DA2, 0x8F29, 0x0D10, 0x8F2A, 0x0FA0, 0x8F2B, 0x493E, 0x8F2C,
+ 0x4DA3, 0x8F2D, 0x42F8, 0x8F2F, 0x093E, 0x8F33, 0x1AD3, 0x8F35, 0x4DA4,
+ 0x8F36, 0x3B4D, 0x8F38, 0x0F0C, 0x8F39, 0x1AD5, 0x8F3A, 0x4DA5, 0x8F3B,
+ 0x1AD4, 0x8F3E, 0x1AD8, 0x8F3F, 0x0F2B, 0x8F40, 0x493F, 0x8F42, 0x1AD7,
+ 0x8F43, 0x4DA6, 0x8F44, 0x05CB, 0x8F45, 0x1AD6, 0x8F46, 0x1ADB, 0x8F47,
+ 0x4DA7, 0x8F49, 0x1ADA, 0x8F4A, 0x4940, 0x8F4C, 0x1AD9, 0x8F4D, 0x0C2C,
+ 0x8F4E, 0x1ADC, 0x8F51, 0x4DA8, 0x8F54, 0x42F9, 0x8F55, 0x4DA9, 0x8F57,
+ 0x1ADD, 0x8F58, 0x4941, 0x8F5C, 0x1ADE, 0x8F5F, 0x07FE, 0x8F61, 0x06FB,
+ 0x8F62, 0x1ADF, 0x8F63, 0x1AE0, 0x8F64, 0x1AE1, 0x8F9B, 0x0A0F, 0x8F9C,
+ 0x1AE2, 0x8F9E, 0x08D9, 0x8F9F, 0x1AE3, 0x8FA0, 0x4DAA, 0x8FA1, 0x4DAB,
+ 0x8FA2, 0x4DAC, 0x8FA3, 0x1AE4, 0x8FA4, 0x4943, 0x8FA5, 0x4DAD, 0x8FA6,
+ 0x3B4E, 0x8FA7, 0x10B6, 0x8FA8, 0x10B5, 0x8FAD, 0x1AE5, 0x8FAE, 0x17FF,
+ 0x8FAF, 0x1AE6, 0x8FB0, 0x0B62, 0x8FB1, 0x09F1, 0x8FB2, 0x0CF6, 0x8FB4,
+ 0x4944, 0x8FB5, 0x3B4F, 0x8FB6, 0x3B50, 0x8FB7, 0x1AE7, 0x8FBA, 0x0E25,
+ 0x8FBB, 0x0BF0, 0x8FBC, 0x0810, 0x8FBF, 0x0B67, 0x8FC1, 0x4946, 0x8FC2,
+ 0x04CC, 0x8FC4, 0x0EA6, 0x8FC5, 0x0A1D, 0x8FC6, 0x4947, 0x8FC8, 0x3799,
+ 0x8FCA, 0x4949, 0x8FCD, 0x494A, 0x8FCE, 0x0734, 0x8FD1, 0x06D9, 0x8FD3,
+ 0x494B, 0x8FD4, 0x0E26, 0x8FD5, 0x494C, 0x8FDA, 0x1AE8, 0x8FE0, 0x3B52,
+ 0x8FE2, 0x1AEA, 0x8FE4, 0x3B53, 0x8FE5, 0x1AE9, 0x8FE6, 0x0560, 0x8FE8,
+ 0x42FB, 0x8FE9, 0x0CCE, 0x8FEA, 0x1AEB, 0x8FEB, 0x0D2D, 0x8FED, 0x0C2D,
+ 0x8FEE, 0x42FC, 0x8FEF, 0x1AEC, 0x8FF0, 0x095C, 0x8FF1, 0x494D, 0x8FF4,
+ 0x1AEE, 0x8FF5, 0x494E, 0x8FF6, 0x3B54, 0x8FF7, 0x0ECE, 0x8FF8, 0x1AFD,
+ 0x8FF9, 0x1AF0, 0x8FFA, 0x1AF1, 0x8FFB, 0x494F, 0x8FFD, 0x0BE5, 0x9000,
+ 0x0B40, 0x9001, 0x0AF9, 0x9002, 0x3B55, 0x9003, 0x0C80, 0x9004, 0x4DAE,
+ 0x9005, 0x1AEF, 0x9006, 0x066F, 0x9008, 0x42FD, 0x900B, 0x1AF8, 0x900C,
+ 0x4950, 0x900D, 0x1AF5, 0x900E, 0x1B02, 0x900F, 0x0C81, 0x9010, 0x0B9E,
+ 0x9011, 0x1AF2, 0x9013, 0x0C1A, 0x9014, 0x0C4D, 0x9015, 0x1AF3, 0x9016,
+ 0x1AF7, 0x9017, 0x0A26, 0x9019, 0x0D1D, 0x901A, 0x0BE8, 0x901B, 0x4DAF,
+ 0x901D, 0x0A66, 0x901E, 0x1AF6, 0x901F, 0x0B0E, 0x9020, 0x0B04, 0x9021,
+ 0x1AF4, 0x9022, 0x046D, 0x9023, 0x0FC8, 0x9027, 0x1AF9, 0x902C, 0x3B56,
+ 0x902D, 0x42FE, 0x902E, 0x0B41, 0x902F, 0x4DB0, 0x9031, 0x093F, 0x9032,
+ 0x0A10, 0x9035, 0x1AFB, 0x9036, 0x1AFA, 0x9037, 0x4951, 0x9038, 0x04B3,
+ 0x9039, 0x1AFC, 0x903C, 0x0DA1, 0x903E, 0x1B04, 0x9041, 0x0CB3, 0x9042,
+ 0x0A31, 0x9043, 0x4953, 0x9044, 0x3B57, 0x9045, 0x0B97, 0x9047, 0x06F0,
+ 0x9049, 0x1B03, 0x904A, 0x0F21, 0x904B, 0x04E1, 0x904C, 0x4DB1, 0x904D,
+ 0x0E27, 0x904E, 0x0561, 0x904F, 0x1AFE, 0x9050, 0x1AFF, 0x9051, 0x1B00,
+ 0x9052, 0x1B01, 0x9053, 0x0C93, 0x9054, 0x0B61, 0x9055, 0x04A7, 0x9056,
+ 0x1B05, 0x9058, 0x1B06, 0x9059, 0x1D34, 0x905B, 0x4DB2, 0x905C, 0x0B1D,
+ 0x905D, 0x4954, 0x905E, 0x1B07, 0x9060, 0x0515, 0x9061, 0x0ACE, 0x9063,
+ 0x0763, 0x9065, 0x0F44, 0x9067, 0x21BA, 0x9068, 0x1B08, 0x9069, 0x0C26,
+ 0x906D, 0x0AFA, 0x906E, 0x0903, 0x906F, 0x1B09, 0x9070, 0x4DB3, 0x9072,
+ 0x1B0C, 0x9074, 0x4DB4, 0x9075, 0x096F, 0x9076, 0x1B0A, 0x9077, 0x0AAD,
+ 0x9078, 0x0AAC, 0x9079, 0x4DB5, 0x907A, 0x04A8, 0x907C, 0x0F93, 0x907D,
+ 0x1B0E, 0x907F, 0x0D86, 0x9080, 0x1B10, 0x9081, 0x1B0F, 0x9082, 0x1B0D,
+ 0x9083, 0x1737, 0x9084, 0x0610, 0x9085, 0x4957, 0x9087, 0x1AED, 0x9088,
+ 0x3B58, 0x9089, 0x1B12, 0x908A, 0x1B11, 0x908B, 0x4DB6, 0x908C, 0x4958,
+ 0x908F, 0x1B13, 0x9090, 0x4959, 0x9091, 0x0F22, 0x9095, 0x3B59, 0x9097,
+ 0x42FF, 0x9098, 0x4DB7, 0x9099, 0x3B5A, 0x909B, 0x3B5B, 0x90A0, 0x4DB8,
+ 0x90A1, 0x495A, 0x90A2, 0x3B5C, 0x90A3, 0x0CB9, 0x90A6, 0x0E5C, 0x90A8,
+ 0x1B14, 0x90AA, 0x0905, 0x90AF, 0x1B15, 0x90B0, 0x495C, 0x90B1, 0x1B16,
+ 0x90B2, 0x4DB9, 0x90B3, 0x4300, 0x90B4, 0x3B5D, 0x90B5, 0x1B17, 0x90B6,
+ 0x495D, 0x90B8, 0x0C1B, 0x90BD, 0x4DBA, 0x90BE, 0x4301, 0x90C1, 0x04AE,
+ 0x90C3, 0x495E, 0x90C4, 0x4302, 0x90C5, 0x4303, 0x90C7, 0x4304, 0x90C8,
+ 0x495F, 0x90C9, 0x4DBB, 0x90CA, 0x07EB, 0x90CE, 0x0FE0, 0x90D7, 0x3B5E,
+ 0x90DB, 0x1B1B, 0x90DC, 0x4961, 0x90DD, 0x3B5F, 0x90DE, 0x21BB, 0x90DF,
+ 0x4962, 0x90E1, 0x070A, 0x90E2, 0x1B18, 0x90E4, 0x1B19, 0x90E8, 0x0DE6,
+ 0x90EB, 0x4967, 0x90ED, 0x05B2, 0x90EF, 0x4305, 0x90F0, 0x4DBC, 0x90F2,
+ 0x4965, 0x90F4, 0x3B60, 0x90F5, 0x0F23, 0x90F6, 0x4964, 0x90F7, 0x06B7,
+ 0x90FD, 0x0C4E, 0x90FE, 0x4968, 0x90FF, 0x4969, 0x9100, 0x4966, 0x9102,
+ 0x1B1C, 0x9104, 0x496A, 0x9105, 0x4DBD, 0x9106, 0x496B, 0x9112, 0x1B1D,
+ 0x9114, 0x4306, 0x9115, 0x21BD, 0x9116, 0x4307, 0x9117, 0x3B61, 0x9118,
+ 0x496C, 0x9119, 0x1B1E, 0x911C, 0x3B62, 0x911E, 0x496D, 0x9122, 0x4308,
+ 0x9123, 0x4309, 0x9125, 0x4DBE, 0x9127, 0x21BE, 0x912D, 0x0C1C, 0x912F,
+ 0x430A, 0x9130, 0x1B20, 0x9131, 0x3B63, 0x9132, 0x1B1F, 0x9134, 0x430B,
+ 0x9137, 0x496E, 0x9139, 0x496F, 0x913A, 0x3B64, 0x913D, 0x3B65, 0x9146,
+ 0x4970, 0x9147, 0x4971, 0x9148, 0x3B66, 0x9149, 0x0CAB, 0x914A, 0x1B21,
+ 0x914B, 0x0940, 0x914C, 0x090C, 0x914D, 0x0D11, 0x914E, 0x0BAF, 0x9152,
+ 0x091E, 0x9154, 0x0A32, 0x9156, 0x1B22, 0x9157, 0x4972, 0x9158, 0x1B23,
+ 0x9159, 0x4973, 0x915A, 0x4DBF, 0x915B, 0x3B67, 0x9161, 0x3B68, 0x9162,
+ 0x0A23, 0x9163, 0x1B24, 0x9164, 0x3B69, 0x9165, 0x1B25, 0x9167, 0x4DC0,
+ 0x9169, 0x1B26, 0x916A, 0x0F59, 0x916C, 0x0941, 0x9172, 0x1B28, 0x9173,
+ 0x1B27, 0x9174, 0x4974, 0x9175, 0x07EC, 0x9177, 0x0805, 0x9178, 0x088E,
+ 0x9179, 0x4975, 0x917A, 0x4DC1, 0x9182, 0x1B2B, 0x9183, 0x430C, 0x9185,
+ 0x4976, 0x9187, 0x0970, 0x9189, 0x1B2A, 0x918A, 0x4DC2, 0x918B, 0x1B29,
+ 0x918D, 0x0B49, 0x918E, 0x3B6A, 0x9190, 0x07A3, 0x9191, 0x4DC3, 0x9192,
+ 0x0A67, 0x9195, 0x4DC4, 0x9197, 0x0D44, 0x919C, 0x0943, 0x919E, 0x3B6B,
+ 0x91A2, 0x1B2C, 0x91A4, 0x09C7, 0x91A8, 0x3B6C, 0x91AA, 0x1B2F, 0x91AB,
+ 0x1B2D, 0x91AC, 0x1E1B, 0x91AD, 0x3B6D, 0x91AE, 0x3B6E, 0x91AF, 0x1B2E,
+ 0x91B0, 0x4DC5, 0x91B1, 0x1E61, 0x91B2, 0x3B6F, 0x91B3, 0x4977, 0x91B4,
+ 0x1B31, 0x91B5, 0x1B30, 0x91B6, 0x4978, 0x91B8, 0x09E2, 0x91BA, 0x1B32,
+ 0x91BB, 0x4DC6, 0x91BC, 0x3B70, 0x91BD, 0x4DC7, 0x91C0, 0x1B33, 0x91C1,
+ 0x1B34, 0x91C2, 0x4DC8, 0x91C3, 0x4979, 0x91C4, 0x497A, 0x91C5, 0x4DC9,
+ 0x91C6, 0x0D64, 0x91C7, 0x0843, 0x91C8, 0x090D, 0x91C9, 0x1B35, 0x91CB,
+ 0x1B36, 0x91CC, 0x0F6C, 0x91CD, 0x094F, 0x91CE, 0x0EFA, 0x91CF, 0x0F94,
+ 0x91D0, 0x1B37, 0x91D1, 0x06DA, 0x91D6, 0x1B38, 0x91D7, 0x21C0, 0x91D8,
+ 0x0C1D, 0x91DA, 0x21BF, 0x91DB, 0x1B3B, 0x91DC, 0x05D6, 0x91DD, 0x0A11,
+ 0x91DE, 0x21C1, 0x91DF, 0x1B39, 0x91E1, 0x1B3A, 0x91E3, 0x0BFC, 0x91E4,
+ 0x21C4, 0x91E5, 0x21C5, 0x91E6, 0x0E83, 0x91E7, 0x06F4, 0x91EC, 0x497D,
+ 0x91ED, 0x21C2, 0x91EE, 0x21C3, 0x91F0, 0x3B71, 0x91F1, 0x430D, 0x91F5,
+ 0x1B3D, 0x91F6, 0x1B3E, 0x91F7, 0x3B72, 0x91FB, 0x3B73, 0x91FC, 0x1B3C,
+ 0x91FF, 0x1B40, 0x9200, 0x4DCA, 0x9201, 0x497E, 0x9206, 0x21C6, 0x9207,
+ 0x3B74, 0x9209, 0x4DCB, 0x920A, 0x21C8, 0x920D, 0x0CB7, 0x920E, 0x05A1,
+ 0x9210, 0x21C7, 0x9211, 0x1B44, 0x9214, 0x1B41, 0x9215, 0x1B43, 0x9216,
+ 0x497F, 0x9217, 0x4980, 0x921E, 0x1B3F, 0x9223, 0x4DCC, 0x9228, 0x3B75,
+ 0x9229, 0x1B8A, 0x922C, 0x1B42, 0x9233, 0x3B76, 0x9234, 0x0FB3, 0x9237,
+ 0x078E, 0x9238, 0x3B77, 0x9239, 0x21CF, 0x923A, 0x21C9, 0x923C, 0x21CB,
+ 0x923F, 0x1B4C, 0x9240, 0x21CA, 0x9242, 0x4982, 0x9243, 0x3B78, 0x9244,
+ 0x0C2E, 0x9245, 0x1B47, 0x9247, 0x3B79, 0x9248, 0x1B4A, 0x9249, 0x1B48,
+ 0x924A, 0x4983, 0x924B, 0x1B4D, 0x924E, 0x21CC, 0x924F, 0x3B7A, 0x9250,
+ 0x1B4E, 0x9251, 0x21CE, 0x9256, 0x4984, 0x9257, 0x1B46, 0x9259, 0x21CD,
+ 0x925A, 0x1B53, 0x925B, 0x0516, 0x925E, 0x1B45, 0x9260, 0x3B7B, 0x9261,
+ 0x4985, 0x9262, 0x0D41, 0x9264, 0x1B49, 0x9265, 0x4986, 0x9266, 0x09C8,
+ 0x9267, 0x21D0, 0x9268, 0x4987, 0x9271, 0x07ED, 0x9276, 0x4DCD, 0x9277,
+ 0x21D2, 0x9278, 0x21D3, 0x927C, 0x4989, 0x927D, 0x498A, 0x927E, 0x0E76,
+ 0x927F, 0x498B, 0x9280, 0x06DC, 0x9283, 0x0950, 0x9285, 0x0C94, 0x9288,
+ 0x20AA, 0x9289, 0x498C, 0x928D, 0x498D, 0x928E, 0x4DCE, 0x9291, 0x0AAF,
+ 0x9293, 0x1B51, 0x9295, 0x1B4B, 0x9296, 0x1B50, 0x9297, 0x498E, 0x9298,
+ 0x0ECF, 0x9299, 0x498F, 0x929A, 0x0BD4, 0x929B, 0x1B52, 0x929C, 0x1B4F,
+ 0x929F, 0x4990, 0x92A7, 0x21D1, 0x92AB, 0x4991, 0x92AD, 0x0AAE, 0x92AF,
+ 0x4DCF, 0x92B2, 0x4994, 0x92B3, 0x3554, 0x92B7, 0x1B56, 0x92B9, 0x1B55,
+ 0x92BB, 0x4DD0, 0x92BC, 0x4DD1, 0x92BF, 0x4995, 0x92C0, 0x4996, 0x92C1,
+ 0x4DD2, 0x92C2, 0x3B7C, 0x92C3, 0x4DD3, 0x92C5, 0x4DD4, 0x92C6, 0x4997,
+ 0x92C8, 0x4DD5, 0x92CB, 0x3B7D, 0x92CC, 0x3B7E, 0x92CE, 0x4998, 0x92CF,
+ 0x1B54, 0x92D0, 0x21D7, 0x92D2, 0x0E5D, 0x92D3, 0x21DB, 0x92D5, 0x21D9,
+ 0x92D7, 0x21D5, 0x92D9, 0x21D6, 0x92DF, 0x3B7F, 0x92E0, 0x21DA, 0x92E4,
+ 0x0985, 0x92E5, 0x4999, 0x92E7, 0x21D4, 0x92E9, 0x1B57, 0x92EA, 0x0E2F,
+ 0x92ED, 0x04F6, 0x92F2, 0x0DB8, 0x92F3, 0x0BB0, 0x92F7, 0x499D, 0x92F8,
+ 0x0692, 0x92F9, 0x20B0, 0x92FA, 0x1B59, 0x92FB, 0x21DE, 0x92FC, 0x07EF,
+ 0x92FF, 0x21E1, 0x9302, 0x21E3, 0x9304, 0x345A, 0x9306, 0x087A, 0x930D,
+ 0x3B80, 0x930F, 0x1B58, 0x9310, 0x0A33, 0x9311, 0x499A, 0x9314, 0x4DD6,
+ 0x9315, 0x3B81, 0x9318, 0x0A34, 0x9319, 0x1B5C, 0x931A, 0x1B5E, 0x931D,
+ 0x21E2, 0x931E, 0x21E0, 0x931F, 0x3B82, 0x9320, 0x09E3, 0x9321, 0x21DD,
+ 0x9322, 0x1B5D, 0x9323, 0x1B5F, 0x9325, 0x21DC, 0x9326, 0x06CB, 0x9327,
+ 0x3B83, 0x9328, 0x0DB7, 0x9329, 0x499E, 0x932B, 0x090E, 0x932C, 0x0FC9,
+ 0x932E, 0x1B5B, 0x932F, 0x0868, 0x9332, 0x0FE5, 0x9333, 0x4DD7, 0x9335,
+ 0x1B61, 0x9336, 0x4DD8, 0x933A, 0x1B60, 0x933B, 0x1B62, 0x9344, 0x1B5A,
+ 0x9347, 0x3B84, 0x9348, 0x20A9, 0x9349, 0x430E, 0x934A, 0x3458, 0x934B,
+ 0x0CC1, 0x934D, 0x0C4F, 0x9351, 0x49A1, 0x9352, 0x3B85, 0x9354, 0x0BF3,
+ 0x9356, 0x1B67, 0x9357, 0x21E5, 0x9358, 0x4DD9, 0x935A, 0x49A2, 0x935B,
+ 0x0B81, 0x935C, 0x1B63, 0x9360, 0x1B64, 0x9364, 0x430F, 0x9365, 0x4310,
+ 0x936A, 0x3B87, 0x936B, 0x49A3, 0x936C, 0x0703, 0x936D, 0x3B88, 0x936E,
+ 0x1B66, 0x9370, 0x21E4, 0x9371, 0x49A4, 0x9373, 0x49A5, 0x9375, 0x0764,
+ 0x937C, 0x1B65, 0x937E, 0x09C9, 0x937F, 0x4DDA, 0x9382, 0x4DDB, 0x9388,
+ 0x49A9, 0x938A, 0x4DDC, 0x938B, 0x49AA, 0x938C, 0x05D7, 0x938F, 0x49AB,
+ 0x9394, 0x1B6B, 0x9396, 0x082F, 0x9397, 0x0AFB, 0x939A, 0x0BE6, 0x939B,
+ 0x3B89, 0x939E, 0x49AC, 0x93A1, 0x49A6, 0x93A3, 0x4311, 0x93A4, 0x21E6,
+ 0x93A7, 0x0599, 0x93A9, 0x3B8B, 0x93AC, 0x1B69, 0x93AD, 0x1B6A, 0x93AE,
+ 0x0BDF, 0x93B0, 0x1B68, 0x93B9, 0x1B6C, 0x93BA, 0x3B8A, 0x93BB, 0x4DDD,
+ 0x93C1, 0x3B8C, 0x93C3, 0x1B72, 0x93C6, 0x21E7, 0x93C7, 0x49B1, 0x93C8,
+ 0x1B75, 0x93CA, 0x3B8D, 0x93CC, 0x4DDE, 0x93D0, 0x1B74, 0x93D1, 0x0C27,
+ 0x93D6, 0x1B6D, 0x93D7, 0x1B6E, 0x93D8, 0x1B71, 0x93DC, 0x49B2, 0x93DD,
+ 0x1B73, 0x93DE, 0x21E8, 0x93DF, 0x4312, 0x93E1, 0x06B8, 0x93E2, 0x3B8E,
+ 0x93E4, 0x1B76, 0x93E5, 0x1B70, 0x93E6, 0x4DDF, 0x93E7, 0x49B3, 0x93E8,
+ 0x1B6F, 0x93F1, 0x49B0, 0x93F5, 0x49AD, 0x93F8, 0x21E9, 0x93F9, 0x4DE0,
+ 0x93FA, 0x3B8F, 0x93FB, 0x49B7, 0x93FD, 0x3B90, 0x9402, 0x4DE1, 0x9403,
+ 0x1B7A, 0x9404, 0x4313, 0x9407, 0x1B7B, 0x9409, 0x49B4, 0x940D, 0x4DE2,
+ 0x940E, 0x4DE3, 0x940F, 0x3B91, 0x9410, 0x1B7C, 0x9413, 0x1B79, 0x9414,
+ 0x1B78, 0x9416, 0x49B5, 0x9417, 0x49B6, 0x9418, 0x09CA, 0x9419, 0x0C82,
+ 0x941A, 0x1B77, 0x9421, 0x1B80, 0x942B, 0x1B7E, 0x942E, 0x4DE4, 0x9431,
+ 0x21EA, 0x9432, 0x49B8, 0x9433, 0x4314, 0x9434, 0x3B92, 0x9435, 0x1B7F,
+ 0x9436, 0x1B7D, 0x9438, 0x0B58, 0x943A, 0x1B81, 0x943B, 0x49B9, 0x943F,
+ 0x3B93, 0x9441, 0x1B82, 0x9444, 0x1B84, 0x9445, 0x21EB, 0x9448, 0x21EC,
+ 0x944A, 0x4315, 0x944C, 0x4DE5, 0x9451, 0x0611, 0x9452, 0x1B83, 0x9453,
+ 0x0F06, 0x9455, 0x3B94, 0x945A, 0x1B8F, 0x945B, 0x1B85, 0x945E, 0x1B88,
+ 0x9460, 0x1B86, 0x9462, 0x1B87, 0x9463, 0x4316, 0x946A, 0x1B89, 0x946B,
+ 0x3B95, 0x946D, 0x49BC, 0x946F, 0x49BD, 0x9470, 0x1B8B, 0x9471, 0x4317,
+ 0x9472, 0x3B96, 0x9475, 0x1B8C, 0x9477, 0x1B8D, 0x947C, 0x1B90, 0x947D,
+ 0x1B8E, 0x947E, 0x1B91, 0x947F, 0x1B93, 0x9481, 0x1B92, 0x9577, 0x0BD5,
+ 0x9578, 0x3B97, 0x9579, 0x49BE, 0x9580, 0x0EF3, 0x9582, 0x1B94, 0x9583,
+ 0x0AB0, 0x9586, 0x49BF, 0x9587, 0x1B95, 0x9588, 0x4DE6, 0x9589, 0x0E14,
+ 0x958A, 0x1B96, 0x958B, 0x0589, 0x958C, 0x49C0, 0x958D, 0x49C1, 0x958E,
+ 0x4318, 0x958F, 0x04DE, 0x9591, 0x0613, 0x9592, 0x21ED, 0x9593, 0x0612,
+ 0x9594, 0x1B97, 0x9596, 0x1B98, 0x9598, 0x1B99, 0x9599, 0x1B9A, 0x959F,
+ 0x4319, 0x95A0, 0x1B9B, 0x95A1, 0x4DE7, 0x95A2, 0x0614, 0x95A3, 0x05B3,
+ 0x95A4, 0x07F0, 0x95A5, 0x0D4A, 0x95A6, 0x3B98, 0x95A7, 0x1B9D, 0x95A8,
+ 0x1B9C, 0x95A9, 0x3B99, 0x95AB, 0x4F59, 0x95AC, 0x431A, 0x95AD, 0x1B9E,
+ 0x95B1, 0x3555, 0x95B2, 0x04FE, 0x95B4, 0x3B9B, 0x95B6, 0x431B, 0x95B9,
+ 0x1BA1, 0x95BB, 0x1BA0, 0x95BC, 0x1B9F, 0x95BD, 0x3B9C, 0x95BE, 0x1BA2,
+ 0x95BF, 0x4DE8, 0x95C3, 0x1BA5, 0x95C6, 0x4DE9, 0x95C7, 0x048B, 0x95C8,
+ 0x49C4, 0x95C9, 0x4DEA, 0x95CA, 0x1BA3, 0x95CB, 0x431C, 0x95CC, 0x1BA7,
+ 0x95CD, 0x1BA6, 0x95D0, 0x431D, 0x95D1, 0x4DEB, 0x95D2, 0x4DEC, 0x95D3,
+ 0x431E, 0x95D4, 0x1BA9, 0x95D5, 0x1BA8, 0x95D6, 0x1BAA, 0x95D8, 0x0C86,
+ 0x95DA, 0x3B9D, 0x95DC, 0x1BAB, 0x95DE, 0x4320, 0x95E0, 0x4DED, 0x95E1,
+ 0x1BAC, 0x95E2, 0x1BAE, 0x95E4, 0x4DEE, 0x95E5, 0x1BAD, 0x95E6, 0x4DEF,
+ 0x961C, 0x0DDE, 0x961D, 0x3B9E, 0x9621, 0x1BAF, 0x9624, 0x4DF0, 0x9628,
+ 0x1BB0, 0x962A, 0x0855, 0x962C, 0x49C7, 0x962E, 0x1BB1, 0x962F, 0x1BB2,
+ 0x9631, 0x4DF1, 0x9632, 0x0E77, 0x9633, 0x49C8, 0x9634, 0x49C9, 0x9638,
+ 0x4DF2, 0x963B, 0x0ACD, 0x963C, 0x49CB, 0x963D, 0x4DF3, 0x963F, 0x0468,
+ 0x9640, 0x0B2B, 0x9641, 0x3B9F, 0x9642, 0x1BB3, 0x9644, 0x0DDF, 0x964B,
+ 0x1BB6, 0x964C, 0x1BB4, 0x964D, 0x07F1, 0x964F, 0x1BB5, 0x9650, 0x0776,
+ 0x9654, 0x4DF4, 0x9658, 0x3BA0, 0x965B, 0x0E15, 0x965C, 0x1BB8, 0x965D,
+ 0x1BBA, 0x965E, 0x1BB9, 0x965F, 0x1BBB, 0x9661, 0x49CC, 0x9662, 0x04C3,
+ 0x9663, 0x0A1E, 0x9664, 0x0986, 0x9665, 0x0615, 0x9666, 0x1BBC, 0x966A,
+ 0x0D1C, 0x966C, 0x1BBE, 0x9670, 0x04C4, 0x9672, 0x1BBD, 0x9673, 0x0BE0,
+ 0x9674, 0x4DF5, 0x9675, 0x0F95, 0x9676, 0x0C83, 0x9677, 0x1BB7, 0x9678,
+ 0x0F6E, 0x967A, 0x0765, 0x967B, 0x4DF6, 0x967D, 0x0F45, 0x967F, 0x4DF7,
+ 0x9681, 0x4DF8, 0x9682, 0x49CE, 0x9683, 0x4DF9, 0x9684, 0x3BA1, 0x9685,
+ 0x06F1, 0x9686, 0x0F7C, 0x9688, 0x06FE, 0x9689, 0x4DFA, 0x968A, 0x0B42,
+ 0x968B, 0x186C, 0x968D, 0x1BBF, 0x968E, 0x058A, 0x968F, 0x0A35, 0x9694,
+ 0x05B4, 0x9695, 0x1BC1, 0x9696, 0x4DFB, 0x9697, 0x1BC2, 0x9698, 0x1BC0,
+ 0x9699, 0x073A, 0x969A, 0x49D0, 0x969B, 0x084D, 0x969C, 0x09CB, 0x969D,
+ 0x21F0, 0x96A0, 0x04C5, 0x96A3, 0x0FA1, 0x96A4, 0x3BA2, 0x96A5, 0x4321,
+ 0x96A7, 0x1BC4, 0x96A8, 0x1B0B, 0x96A9, 0x3BA3, 0x96AA, 0x1BC3, 0x96AE,
+ 0x4DFC, 0x96AF, 0x21F1, 0x96B0, 0x1BC7, 0x96B1, 0x1BC5, 0x96B2, 0x1BC6,
+ 0x96B3, 0x49D3, 0x96B4, 0x1BC8, 0x96B6, 0x1BC9, 0x96B7, 0x0FB4, 0x96B8,
+ 0x1BCA, 0x96B9, 0x1BCB, 0x96BA, 0x49D4, 0x96BB, 0x0A6D, 0x96BC, 0x0D4F,
+ 0x96BD, 0x49D5, 0x96C0, 0x0A43, 0x96C1, 0x0623, 0x96C4, 0x0F24, 0x96C5,
+ 0x056D, 0x96C6, 0x0942, 0x96C7, 0x078F, 0x96C9, 0x1BCE, 0x96CB, 0x1BCD,
+ 0x96CC, 0x08C1, 0x96CD, 0x1BCF, 0x96CE, 0x1BCC, 0x96D1, 0x0876, 0x96D2,
+ 0x3BA4, 0x96D5, 0x1BD3, 0x96D6, 0x1992, 0x96D8, 0x49D8, 0x96D9, 0x10EB,
+ 0x96DA, 0x49D9, 0x96DB, 0x0A3D, 0x96DC, 0x1BD1, 0x96DD, 0x49DA, 0x96DE,
+ 0x3BA6, 0x96E2, 0x0F6D, 0x96E3, 0x0CC9, 0x96E8, 0x04CD, 0x96E9, 0x3BA7,
+ 0x96EA, 0x0A87, 0x96EB, 0x08E2, 0x96EF, 0x4322, 0x96F0, 0x0E07, 0x96F1,
+ 0x3BA8, 0x96F2, 0x04E2, 0x96F6, 0x0FB5, 0x96F7, 0x0F55, 0x96F9, 0x1BD4,
+ 0x96FB, 0x0C3F, 0x9700, 0x0927, 0x9702, 0x3BA9, 0x9703, 0x4DFD, 0x9704,
+ 0x1BD5, 0x9706, 0x1BD6, 0x9707, 0x0A12, 0x9708, 0x1BD7, 0x9709, 0x3BAA,
+ 0x970A, 0x0FB6, 0x970D, 0x1BD2, 0x970E, 0x1BD9, 0x970F, 0x1BDB, 0x9711,
+ 0x1BDA, 0x9713, 0x1BD8, 0x9714, 0x49DC, 0x9716, 0x1BDC, 0x9719, 0x1BDD,
+ 0x971B, 0x4DFE, 0x971C, 0x0AFC, 0x971E, 0x0562, 0x9721, 0x4DFF, 0x9722,
+ 0x4E00, 0x9723, 0x49DD, 0x9724, 0x1BDE, 0x9727, 0x0EC4, 0x9728, 0x4E01,
+ 0x972A, 0x1BDF, 0x9730, 0x1BE0, 0x9731, 0x4E02, 0x9732, 0x0FD0, 0x9733,
+ 0x21F2, 0x9736, 0x49DF, 0x9738, 0x1414, 0x9739, 0x1BE1, 0x973B, 0x21F3,
+ 0x973D, 0x1BE2, 0x973E, 0x1BE3, 0x9741, 0x49E0, 0x9742, 0x1BE7, 0x9743,
+ 0x21F4, 0x9744, 0x1BE4, 0x9746, 0x1BE5, 0x9747, 0x49E1, 0x9748, 0x1BE6,
+ 0x9749, 0x1BE8, 0x974D, 0x21F5, 0x974E, 0x4323, 0x974F, 0x21F6, 0x9751,
+ 0x21F7, 0x9752, 0x0A68, 0x9755, 0x4F5A, 0x9756, 0x0F03, 0x9757, 0x49E2,
+ 0x9759, 0x0A69, 0x975A, 0x3BAB, 0x975B, 0x49E3, 0x975C, 0x1BE9, 0x975E,
+ 0x0D87, 0x9760, 0x1BEA, 0x9761, 0x1D06, 0x9762, 0x0ED8, 0x9763, 0x3BAC,
+ 0x9764, 0x1BEB, 0x9766, 0x1BEC, 0x9767, 0x4E03, 0x9768, 0x1BED, 0x9769,
+ 0x05B5, 0x976A, 0x49E4, 0x976B, 0x1BEF, 0x976D, 0x0A1F, 0x976E, 0x3BAD,
+ 0x9771, 0x1BF0, 0x9773, 0x3BAE, 0x9774, 0x06FA, 0x9776, 0x4E04, 0x9779,
+ 0x1BF1, 0x977A, 0x1BF5, 0x977C, 0x1BF3, 0x977D, 0x4E05, 0x977F, 0x4E06,
+ 0x9781, 0x1BF4, 0x9784, 0x05D1, 0x9785, 0x1BF2, 0x9786, 0x1BF6, 0x978B,
+ 0x1BF7, 0x978D, 0x048C, 0x978F, 0x1BF8, 0x9790, 0x1BF9, 0x9795, 0x4324,
+ 0x9796, 0x49E7, 0x9798, 0x09CC, 0x9799, 0x4E07, 0x979A, 0x3BAF, 0x979C,
+ 0x1BFA, 0x979E, 0x49E8, 0x979F, 0x4E08, 0x97A0, 0x0661, 0x97A2, 0x3BB0,
+ 0x97A3, 0x1BFD, 0x97A6, 0x1BFC, 0x97A8, 0x1BFB, 0x97AB, 0x1A34, 0x97AC,
+ 0x4E09, 0x97AD, 0x0E2C, 0x97AE, 0x4325, 0x97B1, 0x49E9, 0x97B2, 0x49EA,
+ 0x97B3, 0x1BFE, 0x97B4, 0x1BFF, 0x97B5, 0x3BB1, 0x97B6, 0x3BB2, 0x97B9,
+ 0x4E0A, 0x97BA, 0x4326, 0x97BE, 0x49EB, 0x97C1, 0x4327, 0x97C3, 0x1C00,
+ 0x97C6, 0x1C01, 0x97C8, 0x1C02, 0x97C9, 0x4328, 0x97CB, 0x1C03, 0x97CC,
+ 0x49EC, 0x97CD, 0x4E0B, 0x97D1, 0x49ED, 0x97D3, 0x0616, 0x97D4, 0x49EE,
+ 0x97D8, 0x49EF, 0x97D9, 0x3BB3, 0x97DB, 0x4329, 0x97DC, 0x1C04, 0x97DE,
+ 0x3BB4, 0x97E0, 0x4E0C, 0x97E1, 0x49F0, 0x97ED, 0x1C05, 0x97EE, 0x0CD9,
+ 0x97EF, 0x4E0D, 0x97F1, 0x49F1, 0x97F2, 0x1C07, 0x97F3, 0x053B, 0x97F4,
+ 0x3BB5, 0x97F5, 0x1C0A, 0x97F6, 0x1C09, 0x97FB, 0x04C6, 0x97FF, 0x06B9,
+ 0x9801, 0x0E17, 0x9802, 0x0BD6, 0x9803, 0x0812, 0x9804, 0x49F2, 0x9805,
+ 0x07F2, 0x9806, 0x0971, 0x9807, 0x4E0E, 0x9808, 0x0A22, 0x980A, 0x3BB6,
+ 0x980C, 0x1C0C, 0x980D, 0x49F3, 0x980E, 0x3BB7, 0x980F, 0x1C0B, 0x9810,
+ 0x0F2C, 0x9811, 0x0624, 0x9812, 0x0D66, 0x9813, 0x0CB4, 0x9814, 0x49F4,
+ 0x9816, 0x49F5, 0x9817, 0x0A42, 0x9818, 0x0F96, 0x981A, 0x0731, 0x981E,
+ 0x3BB8, 0x9821, 0x1C0F, 0x9823, 0x3BB9, 0x9824, 0x1C0E, 0x9825, 0x49FA,
+ 0x9826, 0x4E0F, 0x982B, 0x3BBA, 0x982C, 0x0E79, 0x982D, 0x0C84, 0x982E,
+ 0x4E10, 0x9830, 0x1E73, 0x9832, 0x49F8, 0x9833, 0x49F9, 0x9834, 0x04F2,
+ 0x9837, 0x1C10, 0x9838, 0x1C0D, 0x9839, 0x37B3, 0x983B, 0x0DC3, 0x983C,
+ 0x0F54, 0x983D, 0x1C11, 0x983E, 0x3BBB, 0x9846, 0x1C12, 0x9847, 0x49FB,
+ 0x984B, 0x1C14, 0x984C, 0x0B4A, 0x984D, 0x05B9, 0x984E, 0x05BA, 0x984F,
+ 0x1C13, 0x9852, 0x3BBC, 0x9853, 0x3BBD, 0x9854, 0x0625, 0x9855, 0x0766,
+ 0x9856, 0x432A, 0x9857, 0x21F9, 0x9858, 0x0626, 0x9859, 0x3BBE, 0x985A,
+ 0x1E48, 0x985B, 0x0C39, 0x985E, 0x0FA8, 0x9862, 0x4E11, 0x9863, 0x4E12,
+ 0x9865, 0x21FA, 0x9866, 0x49FC, 0x9867, 0x0790, 0x986B, 0x1C15, 0x986C,
+ 0x3BBF, 0x986F, 0x1C16, 0x9870, 0x1C17, 0x9871, 0x1C18, 0x9873, 0x1C1A,
+ 0x9874, 0x1C19, 0x98A8, 0x0DE9, 0x98AA, 0x1C1B, 0x98AB, 0x49FD, 0x98AD,
+ 0x49FE, 0x98AF, 0x1C1C, 0x98B0, 0x49FF, 0x98B1, 0x1C1D, 0x98B4, 0x4E13,
+ 0x98B6, 0x1C1E, 0x98B7, 0x4A01, 0x98B8, 0x3BC0, 0x98BA, 0x3BC1, 0x98BB,
+ 0x4A02, 0x98BC, 0x4A03, 0x98BF, 0x3BC2, 0x98C2, 0x4A04, 0x98C3, 0x1C20,
+ 0x98C4, 0x1C1F, 0x98C5, 0x4E14, 0x98C6, 0x1C21, 0x98C7, 0x4A05, 0x98C8,
+ 0x3BC3, 0x98CB, 0x4A06, 0x98DB, 0x0D88, 0x98DC, 0x1839, 0x98DF, 0x09EF,
+ 0x98E0, 0x3618, 0x98E1, 0x4A07, 0x98E2, 0x064C, 0x98E3, 0x4A08, 0x98E5,
+ 0x3BC4, 0x98E7, 0x432B, 0x98E9, 0x1C22, 0x98EA, 0x4A09, 0x98EB, 0x1C23,
+ 0x98ED, 0x10C1, 0x98EE, 0x14DA, 0x98EF, 0x0D67, 0x98F0, 0x4A0A, 0x98F1,
+ 0x4A0B, 0x98F2, 0x04BF, 0x98F3, 0x4A0C, 0x98F4, 0x047F, 0x98FC, 0x08C2,
+ 0x98FD, 0x0E5E, 0x98FE, 0x09E6, 0x9902, 0x4E15, 0x9903, 0x1C24, 0x9905,
+ 0x0EEB, 0x9908, 0x4A0D, 0x9909, 0x1C25, 0x990A, 0x0F46, 0x990C, 0x04E4,
+ 0x9910, 0x088F, 0x9911, 0x4E16, 0x9912, 0x1C26, 0x9913, 0x056E, 0x9914,
+ 0x1C27, 0x9915, 0x4E17, 0x9916, 0x4A10, 0x9917, 0x4A11, 0x9918, 0x1C28,
+ 0x991A, 0x4A13, 0x991B, 0x4A14, 0x991C, 0x4A15, 0x991D, 0x1C2A, 0x991E,
+ 0x1C2B, 0x9920, 0x1C2D, 0x9921, 0x1C29, 0x9924, 0x1C2C, 0x9927, 0x21FD,
+ 0x9928, 0x0617, 0x992C, 0x1C2E, 0x992E, 0x1C2F, 0x9931, 0x4A17, 0x9932,
+ 0x3BC5, 0x9933, 0x3BC6, 0x9935, 0x4E18, 0x993A, 0x4A18, 0x993B, 0x4A19,
+ 0x993C, 0x4A1A, 0x993D, 0x1C30, 0x993E, 0x1C31, 0x9940, 0x3BC7, 0x9941,
+ 0x4A1B, 0x9942, 0x1C32, 0x9945, 0x1C34, 0x9946, 0x4A1C, 0x9948, 0x4E19,
+ 0x9949, 0x1C33, 0x994B, 0x1C36, 0x994C, 0x1C39, 0x994D, 0x3BC8, 0x994E,
+ 0x4A1D, 0x9950, 0x1C35, 0x9951, 0x1C37, 0x9952, 0x1C38, 0x9954, 0x4E1A,
+ 0x9955, 0x1C3A, 0x9957, 0x06BA, 0x9958, 0x432C, 0x995C, 0x3BC9, 0x995E,
+ 0x4E1B, 0x995F, 0x3BCA, 0x9960, 0x4A1E, 0x9996, 0x091F, 0x9997, 0x1C3B,
+ 0x9998, 0x1C3C, 0x9999, 0x07F3, 0x999E, 0x21FF, 0x99A3, 0x4A1F, 0x99A5,
+ 0x1C3D, 0x99A6, 0x4A20, 0x99A8, 0x059C, 0x99AC, 0x0D05, 0x99AD, 0x1C3E,
+ 0x99AE, 0x1C3F, 0x99B1, 0x3BCB, 0x99B3, 0x0B98, 0x99B4, 0x0CC3, 0x99B9,
+ 0x3BCC, 0x99BA, 0x3BCD, 0x99BC, 0x1C40, 0x99BD, 0x4A21, 0x99BF, 0x4A22,
+ 0x99C1, 0x0D33, 0x99C3, 0x4A23, 0x99C4, 0x0B2C, 0x99C5, 0x04FA, 0x99C6,
+ 0x06E6, 0x99C8, 0x06E7, 0x99C9, 0x3BCE, 0x99D0, 0x0BB1, 0x99D1, 0x1C45,
+ 0x99D2, 0x06E8, 0x99D4, 0x4A24, 0x99D5, 0x056F, 0x99D8, 0x1C44, 0x99D9,
+ 0x4A25, 0x99DB, 0x1C42, 0x99DD, 0x1C43, 0x99DE, 0x4A26, 0x99DF, 0x1C41,
+ 0x99E1, 0x4E1C, 0x99E2, 0x1C4F, 0x99ED, 0x1C46, 0x99EE, 0x1C47, 0x99F0,
+ 0x4A28, 0x99F1, 0x1C48, 0x99F2, 0x1C49, 0x99F8, 0x1C4B, 0x99F9, 0x4A29,
+ 0x99FB, 0x1C4A, 0x99FC, 0x4A2A, 0x99FF, 0x0963, 0x9A01, 0x1C4C, 0x9A02,
+ 0x3BCF, 0x9A03, 0x432D, 0x9A05, 0x1C4E, 0x9A08, 0x37BA, 0x9A0A, 0x4A2B,
+ 0x9A0C, 0x4E1D, 0x9A0E, 0x064D, 0x9A0F, 0x1C4D, 0x9A10, 0x4E1E, 0x9A11,
+ 0x4A2C, 0x9A12, 0x0AFD, 0x9A13, 0x0767, 0x9A16, 0x3BD0, 0x9A19, 0x1C50,
+ 0x9A1A, 0x4A2D, 0x9A20, 0x4A2E, 0x9A23, 0x4E1F, 0x9A24, 0x3BD1, 0x9A27,
+ 0x3BD2, 0x9A28, 0x0B2D, 0x9A2B, 0x1C51, 0x9A2D, 0x3BD3, 0x9A2E, 0x3BD4,
+ 0x9A30, 0x0C85, 0x9A31, 0x4A2F, 0x9A36, 0x3BD5, 0x9A37, 0x1C52, 0x9A38,
+ 0x3BD6, 0x9A3E, 0x1C57, 0x9A40, 0x1C55, 0x9A41, 0x4E20, 0x9A42, 0x1C54,
+ 0x9A43, 0x1C56, 0x9A44, 0x4A30, 0x9A45, 0x1C53, 0x9A4A, 0x3BD7, 0x9A4C,
+ 0x4A31, 0x9A4D, 0x1C59, 0x9A4E, 0x2200, 0x9A51, 0x4E21, 0x9A52, 0x1E2F,
+ 0x9A55, 0x1C58, 0x9A56, 0x3BD8, 0x9A57, 0x1C5B, 0x9A58, 0x4A32, 0x9A5A,
+ 0x06BB, 0x9A5B, 0x1C5A, 0x9A5F, 0x1C5C, 0x9A62, 0x1C5D, 0x9A64, 0x1C5F,
+ 0x9A65, 0x1C5E, 0x9A69, 0x1C60, 0x9A6A, 0x1C62, 0x9A6B, 0x1C61, 0x9AA8,
+ 0x080E, 0x9AAD, 0x1C63, 0x9AAF, 0x4A34, 0x9AB0, 0x1C64, 0x9AB5, 0x3BD9,
+ 0x9AB6, 0x3BDA, 0x9AB7, 0x4A36, 0x9AB8, 0x059A, 0x9AB9, 0x4A38, 0x9ABC,
+ 0x1C65, 0x9ABD, 0x4E22, 0x9ABE, 0x4E23, 0x9AC0, 0x1C66, 0x9AC1, 0x432E,
+ 0x9AC3, 0x432F, 0x9AC4, 0x0A37, 0x9AC6, 0x4A3A, 0x9ACE, 0x4330, 0x9ACF,
+ 0x1C67, 0x9AD0, 0x4A3B, 0x9AD1, 0x1C68, 0x9AD2, 0x4A3C, 0x9AD3, 0x1C69,
+ 0x9AD4, 0x1C6A, 0x9AD5, 0x4A3D, 0x9AD6, 0x4331, 0x9AD8, 0x07F4, 0x9AD9,
+ 0x2201, 0x9ADC, 0x2202, 0x9ADE, 0x1C6B, 0x9ADF, 0x1C6C, 0x9AE0, 0x4A3E,
+ 0x9AE2, 0x1C6D, 0x9AE3, 0x1C6E, 0x9AE5, 0x4A3F, 0x9AE6, 0x1C6F, 0x9AE9,
+ 0x4A40, 0x9AEA, 0x0D45, 0x9AEB, 0x1C71, 0x9AED, 0x0D98, 0x9AEE, 0x1C72,
+ 0x9AEF, 0x1C70, 0x9AF1, 0x1C74, 0x9AF4, 0x1C73, 0x9AF7, 0x1C75, 0x9AF9,
+ 0x3BDB, 0x9AFB, 0x1C76, 0x9B01, 0x4E24, 0x9B02, 0x4332, 0x9B03, 0x3BDC,
+ 0x9B06, 0x1C77, 0x9B08, 0x4333, 0x9B09, 0x4E25, 0x9B0B, 0x4E26, 0x9B0C,
+ 0x4A41, 0x9B0D, 0x4E27, 0x9B0E, 0x4E28, 0x9B10, 0x4A42, 0x9B12, 0x4A43,
+ 0x9B16, 0x4A44, 0x9B18, 0x1C78, 0x9B19, 0x4E29, 0x9B1A, 0x1C79, 0x9B1C,
+ 0x4A45, 0x9B1D, 0x4F49, 0x9B1F, 0x1C7A, 0x9B20, 0x3BDD, 0x9B22, 0x1C7B,
+ 0x9B23, 0x1C7C, 0x9B25, 0x1C7D, 0x9B27, 0x1C7E, 0x9B28, 0x1C7F, 0x9B29,
+ 0x1C80, 0x9B2A, 0x1C81, 0x9B2B, 0x4A46, 0x9B2C, 0x4F4A, 0x9B2D, 0x4335,
+ 0x9B2E, 0x1C82, 0x9B2F, 0x1C83, 0x9B31, 0x14D4, 0x9B32, 0x1C84, 0x9B33,
+ 0x3BDE, 0x9B34, 0x3BDF, 0x9B35, 0x4E2A, 0x9B3B, 0x17A9, 0x9B3C, 0x064E,
+ 0x9B3D, 0x4A47, 0x9B41, 0x057F, 0x9B42, 0x0822, 0x9B43, 0x1C86, 0x9B44,
+ 0x1C85, 0x9B45, 0x0EB1, 0x9B48, 0x4E2B, 0x9B4B, 0x4A49, 0x9B4D, 0x1C88,
+ 0x9B4E, 0x1C89, 0x9B4F, 0x1C87, 0x9B51, 0x1C8A, 0x9B54, 0x0E90, 0x9B55,
+ 0x4E2C, 0x9B58, 0x1C8B, 0x9B5A, 0x0695, 0x9B5E, 0x4336, 0x9B63, 0x4A4A,
+ 0x9B65, 0x4A4B, 0x9B66, 0x4337, 0x9B68, 0x4E2D, 0x9B6B, 0x4A4C, 0x9B6C,
+ 0x4A4D, 0x9B6F, 0x0FCB, 0x9B72, 0x2204, 0x9B73, 0x3BE0, 0x9B74, 0x1C8C,
+ 0x9B75, 0x2203, 0x9B76, 0x4A4E, 0x9B77, 0x4A4F, 0x9B79, 0x3BE1, 0x9B80,
+ 0x4E2E, 0x9B83, 0x1C8E, 0x9B84, 0x4338, 0x9B86, 0x4E2F, 0x9B8A, 0x4339,
+ 0x9B8E, 0x0482, 0x9B8F, 0x2205, 0x9B90, 0x4E30, 0x9B91, 0x1C8F, 0x9B92,
+ 0x0DFB, 0x9B93, 0x1C8D, 0x9B96, 0x1C90, 0x9B97, 0x1C91, 0x9B9D, 0x4E31,
+ 0x9B9E, 0x433A, 0x9B9F, 0x1C92, 0x9BA0, 0x1C93, 0x9BA6, 0x4A50, 0x9BA7,
+ 0x3BE2, 0x9BA8, 0x1C94, 0x9BAA, 0x0E9C, 0x9BAB, 0x087B, 0x9BAC, 0x4A51,
+ 0x9BAD, 0x086A, 0x9BAE, 0x0AB1, 0x9BB0, 0x4E32, 0x9BB1, 0x2206, 0x9BB2,
+ 0x4A53, 0x9BB4, 0x1C95, 0x9BB8, 0x4A54, 0x9BB9, 0x1C98, 0x9BBB, 0x2207,
+ 0x9BBE, 0x4A55, 0x9BBF, 0x4E33, 0x9BC0, 0x1C96, 0x9BC1, 0x3BE3, 0x9BC6,
+ 0x1C99, 0x9BC7, 0x3BE4, 0x9BC8, 0x4E34, 0x9BC9, 0x07A5, 0x9BCA, 0x1C97,
+ 0x9BCE, 0x433B, 0x9BCF, 0x1C9A, 0x9BD1, 0x1C9B, 0x9BD2, 0x1C9C, 0x9BD4,
+ 0x1CA0, 0x9BD6, 0x0878, 0x9BD7, 0x3BE5, 0x9BD8, 0x4A57, 0x9BDB, 0x0B44,
+ 0x9BDD, 0x4A58, 0x9BDF, 0x37BF, 0x9BE1, 0x1CA1, 0x9BE2, 0x1C9E, 0x9BE3,
+ 0x1C9D, 0x9BE4, 0x1C9F, 0x9BE5, 0x433C, 0x9BE7, 0x3BE6, 0x9BE8, 0x0735,
+ 0x9BEA, 0x4A59, 0x9BEB, 0x3BE7, 0x9BEE, 0x4A5B, 0x9BEF, 0x4A5A, 0x9BF0,
+ 0x1CA5, 0x9BF1, 0x1CA4, 0x9BF2, 0x1CA3, 0x9BF3, 0x4A56, 0x9BF5, 0x0477,
+ 0x9BF7, 0x3BE8, 0x9BF8, 0x433D, 0x9BFA, 0x3BE9, 0x9BFD, 0x3BEA, 0x9BFF,
+ 0x4E35, 0x9C00, 0x2208, 0x9C02, 0x4E36, 0x9C04, 0x1CAF, 0x9C06, 0x1CAB,
+ 0x9C08, 0x1CAC, 0x9C09, 0x1CA8, 0x9C0A, 0x1CAE, 0x9C0B, 0x3BEB, 0x9C0C,
+ 0x1CAA, 0x9C0D, 0x05C0, 0x9C10, 0x0FF2, 0x9C12, 0x1CAD, 0x9C13, 0x1CA9,
+ 0x9C14, 0x1CA7, 0x9C15, 0x1CA6, 0x9C16, 0x4A5F, 0x9C18, 0x4A60, 0x9C19,
+ 0x4A61, 0x9C1A, 0x4A62, 0x9C1B, 0x1CB1, 0x9C1C, 0x4E37, 0x9C1D, 0x4A63,
+ 0x9C21, 0x1CB4, 0x9C22, 0x4A64, 0x9C23, 0x433E, 0x9C24, 0x1CB3, 0x9C25,
+ 0x1CB2, 0x9C27, 0x3BEC, 0x9C29, 0x4A65, 0x9C2A, 0x3BED, 0x9C2D, 0x0DBB,
+ 0x9C2E, 0x1CB0, 0x9C2F, 0x04B7, 0x9C30, 0x1CB5, 0x9C31, 0x4A67, 0x9C32,
+ 0x1CB7, 0x9C35, 0x4E38, 0x9C36, 0x3BEE, 0x9C37, 0x4A68, 0x9C39, 0x05CD,
+ 0x9C3A, 0x1CA2, 0x9C3B, 0x04D9, 0x9C3E, 0x1CB9, 0x9C41, 0x3BEF, 0x9C44,
+ 0x4E39, 0x9C45, 0x4A69, 0x9C46, 0x1CB8, 0x9C47, 0x1CB6, 0x9C48, 0x0B6B,
+ 0x9C49, 0x4A6C, 0x9C4A, 0x4A6D, 0x9C4F, 0x433F, 0x9C50, 0x4340, 0x9C52,
+ 0x0E9E, 0x9C53, 0x3BF0, 0x9C54, 0x4A6F, 0x9C56, 0x4E3A, 0x9C57, 0x0FA2,
+ 0x9C58, 0x4A70, 0x9C5A, 0x1CBA, 0x9C5B, 0x4A71, 0x9C5C, 0x4A6A, 0x9C5D,
+ 0x4A72, 0x9C5F, 0x4A73, 0x9C60, 0x1CBB, 0x9C61, 0x4E3B, 0x9C63, 0x3BF1,
+ 0x9C65, 0x4341, 0x9C67, 0x1CBC, 0x9C68, 0x4E3C, 0x9C69, 0x4A74, 0x9C6A,
+ 0x4A75, 0x9C6B, 0x4A76, 0x9C6D, 0x4A77, 0x9C6E, 0x4A78, 0x9C70, 0x3BF2,
+ 0x9C72, 0x4A79, 0x9C75, 0x4A7A, 0x9C76, 0x1CBD, 0x9C77, 0x3BF3, 0x9C78,
+ 0x1CBE, 0x9C7A, 0x4A7B, 0x9CE5, 0x0BD7, 0x9CE6, 0x4A7C, 0x9CE7, 0x1CBF,
+ 0x9CE9, 0x0D4B, 0x9CEB, 0x1CC4, 0x9CEC, 0x1CC0, 0x9CF0, 0x1CC1, 0x9CF2,
+ 0x4A7D, 0x9CF3, 0x0E5F, 0x9CF4, 0x0ED0, 0x9CF6, 0x0CA8, 0x9D02, 0x3BF4,
+ 0x9D03, 0x1CC5, 0x9D06, 0x1CC6, 0x9D07, 0x0C96, 0x9D08, 0x1CC3, 0x9D09,
+ 0x1CC2, 0x9D0B, 0x4A7E, 0x9D0E, 0x052A, 0x9D11, 0x4A80, 0x9D12, 0x1CCE,
+ 0x9D15, 0x1CCD, 0x9D17, 0x4A81, 0x9D18, 0x4A82, 0x9D1B, 0x0517, 0x9D1D,
+ 0x4342, 0x9D1E, 0x4343, 0x9D1F, 0x1CCB, 0x9D23, 0x1CCA, 0x9D26, 0x1CC8,
+ 0x9D28, 0x05D9, 0x9D2A, 0x1CC7, 0x9D2B, 0x08DE, 0x9D2C, 0x0529, 0x9D30,
+ 0x4E3D, 0x9D32, 0x4A86, 0x9D3B, 0x07F5, 0x9D3D, 0x4E3E, 0x9D3E, 0x1CD1,
+ 0x9D3F, 0x1CD0, 0x9D41, 0x1CCF, 0x9D42, 0x3BF5, 0x9D43, 0x4344, 0x9D44,
+ 0x1CCC, 0x9D46, 0x1CD2, 0x9D47, 0x3BF6, 0x9D48, 0x1CD3, 0x9D4A, 0x4A88,
+ 0x9D50, 0x1CD8, 0x9D51, 0x1CD7, 0x9D52, 0x4345, 0x9D59, 0x1CD9, 0x9D5C,
+ 0x04CF, 0x9D5D, 0x1CD4, 0x9D5E, 0x1CD5, 0x9D5F, 0x4A89, 0x9D60, 0x0806,
+ 0x9D61, 0x0EC5, 0x9D62, 0x4A8A, 0x9D63, 0x3BF7, 0x9D64, 0x1CD6, 0x9D69,
+ 0x3BF8, 0x9D6A, 0x4E3F, 0x9D6B, 0x220A, 0x9D6C, 0x0E60, 0x9D6F, 0x1CDE,
+ 0x9D70, 0x2209, 0x9D72, 0x1CDA, 0x9D73, 0x4A8D, 0x9D76, 0x4A8E, 0x9D77,
+ 0x4A8F, 0x9D7A, 0x1CDF, 0x9D7B, 0x4E40, 0x9D7C, 0x3BF9, 0x9D7E, 0x3BFA,
+ 0x9D84, 0x4A90, 0x9D87, 0x1CDC, 0x9D89, 0x1CDB, 0x9D8A, 0x4346, 0x9D8D,
+ 0x3BFB, 0x9D8F, 0x0732, 0x9D96, 0x4347, 0x9D99, 0x4A91, 0x9D9A, 0x1CE0,
+ 0x9DA1, 0x4A92, 0x9DA4, 0x1CE1, 0x9DA9, 0x1CE2, 0x9DAB, 0x1CDD, 0x9DAC,
+ 0x4349, 0x9DAF, 0x1CC9, 0x9DB1, 0x3BFC, 0x9DB2, 0x1CE3, 0x9DB4, 0x0BFD,
+ 0x9DB5, 0x4A94, 0x9DB8, 0x1CE7, 0x9DB9, 0x4A95, 0x9DBA, 0x1CE8, 0x9DBB,
+ 0x1CE6, 0x9DBC, 0x434A, 0x9DBD, 0x4A96, 0x9DBF, 0x4A93, 0x9DC0, 0x4348,
+ 0x9DC1, 0x1CE5, 0x9DC2, 0x1CEB, 0x9DC3, 0x3BFD, 0x9DC4, 0x1CE4, 0x9DC6,
+ 0x1CE9, 0x9DC7, 0x3BFE, 0x9DC9, 0x4A97, 0x9DCF, 0x1CEA, 0x9DD3, 0x1CED,
+ 0x9DD6, 0x3BFF, 0x9DD7, 0x1DDE, 0x9DD9, 0x1CEC, 0x9DDA, 0x4A98, 0x9DDF,
+ 0x3C00, 0x9DE0, 0x4A99, 0x9DE3, 0x4A9A, 0x9DE5, 0x4E41, 0x9DE6, 0x1CEF,
+ 0x9DE7, 0x434C, 0x9DE9, 0x4E42, 0x9DEB, 0x3C01, 0x9DED, 0x1CF0, 0x9DEF,
+ 0x1CF1, 0x9DF2, 0x0FEF, 0x9DF3, 0x4E43, 0x9DF4, 0x3C02, 0x9DF8, 0x1CEE,
+ 0x9DF9, 0x0B4B, 0x9DFA, 0x085D, 0x9DFD, 0x1CF2, 0x9E02, 0x4A9D, 0x9E07,
+ 0x434D, 0x9E0A, 0x4A9C, 0x9E0D, 0x4A9E, 0x9E15, 0x3C03, 0x9E19, 0x220C,
+ 0x9E1A, 0x1CF3, 0x9E1B, 0x1CF4, 0x9E1C, 0x4A9F, 0x9E1D, 0x3C04, 0x9E1E,
+ 0x1CF5, 0x9E75, 0x1CF6, 0x9E78, 0x0768, 0x9E79, 0x1CF7, 0x9E7A, 0x4E44,
+ 0x9E7B, 0x4AA0, 0x9E7C, 0x1DFD, 0x9E7D, 0x1CF8, 0x9E7F, 0x08DB, 0x9E80,
+ 0x4AA2, 0x9E81, 0x1CF9, 0x9E82, 0x4E45, 0x9E83, 0x4E46, 0x9E84, 0x4E47,
+ 0x9E85, 0x4AA3, 0x9E88, 0x1CFA, 0x9E8B, 0x1CFB, 0x9E8C, 0x1CFC, 0x9E91,
+ 0x1CFF, 0x9E92, 0x1CFD, 0x9E93, 0x0FE2, 0x9E95, 0x1CFE, 0x9E97, 0x0FB7,
+ 0x9E9B, 0x4AA4, 0x9E9D, 0x1D00, 0x9E9E, 0x434E, 0x9E9F, 0x0FA3, 0x9EA4,
+ 0x3C05, 0x9EA5, 0x1D01, 0x9EA6, 0x0D34, 0x9EA8, 0x3C06, 0x9EA9, 0x1D02,
+ 0x9EAA, 0x1D04, 0x9EAC, 0x3C07, 0x9EAD, 0x1D05, 0x9EAF, 0x434F, 0x9EB0,
+ 0x4E48, 0x9EB4, 0x1E02, 0x9EB5, 0x1E75, 0x9EB8, 0x1D03, 0x9EB9, 0x07FF,
+ 0x9EBA, 0x0ED9, 0x9EBB, 0x0E91, 0x9EBC, 0x1284, 0x9EBD, 0x4AA6, 0x9EBE,
+ 0x14FF, 0x9EBF, 0x0EA9, 0x9EC3, 0x340B, 0x9EC4, 0x052B, 0x9ECC, 0x1D07,
+ 0x9ECD, 0x066A, 0x9ECE, 0x1D08, 0x9ECF, 0x1D09, 0x9ED0, 0x1D0A, 0x9ED1,
+ 0x220D, 0x9ED2, 0x0807, 0x9ED4, 0x1D0B, 0x9ED8, 0x160D, 0x9ED9, 0x0EE7,
+ 0x9EDB, 0x0B43, 0x9EDC, 0x1D0C, 0x9EDD, 0x1D0E, 0x9EDE, 0x1D0D, 0x9EDF,
+ 0x4AA8, 0x9EE0, 0x1D0F, 0x9EE4, 0x4E49, 0x9EE5, 0x1D10, 0x9EE7, 0x3C08,
+ 0x9EE8, 0x1D11, 0x9EEE, 0x3C09, 0x9EEF, 0x1D12, 0x9EF0, 0x4E4A, 0x9EF2,
+ 0x4E4B, 0x9EF4, 0x1D13, 0x9EF6, 0x1D14, 0x9EF7, 0x1D15, 0x9EF9, 0x1D16,
+ 0x9EFB, 0x1D17, 0x9EFC, 0x1D18, 0x9EFD, 0x1D19, 0x9EFF, 0x4AA9, 0x9F02,
+ 0x4AAA, 0x9F03, 0x4AAC, 0x9F07, 0x1D1A, 0x9F08, 0x1D1B, 0x9F09, 0x4E4C,
+ 0x9F0E, 0x0C1E, 0x9F0F, 0x4E4D, 0x9F10, 0x3C0A, 0x9F12, 0x3C0B, 0x9F13,
+ 0x0791, 0x9F14, 0x4E4E, 0x9F15, 0x1D1D, 0x9F17, 0x3C0C, 0x9F19, 0x3C0D,
+ 0x9F1B, 0x4E4F, 0x9F20, 0x0ACF, 0x9F21, 0x1D1E, 0x9F22, 0x4E50, 0x9F26,
+ 0x4E51, 0x9F2A, 0x4E52, 0x9F2B, 0x4E53, 0x9F2C, 0x1D1F, 0x9F2F, 0x3C0E,
+ 0x9F34, 0x4E54, 0x9F37, 0x3C0F, 0x9F39, 0x3C10, 0x9F3A, 0x4AAD, 0x9F3B,
+ 0x0D93, 0x9F3D, 0x4AAE, 0x9F3E, 0x1D20, 0x9F41, 0x3C11, 0x9F45, 0x3C12,
+ 0x9F46, 0x4AAF, 0x9F4A, 0x1D21, 0x9F4B, 0x170A, 0x9F4E, 0x1A7B, 0x9F4F,
+ 0x1C06, 0x9F52, 0x1D22, 0x9F53, 0x4AB0, 0x9F54, 0x1D23, 0x9F55, 0x4AB1,
+ 0x9F57, 0x3C13, 0x9F58, 0x4AB2, 0x9F5A, 0x4E55, 0x9F5D, 0x4AB4, 0x9F5F,
+ 0x1D25, 0x9F60, 0x1D26, 0x9F61, 0x1D27, 0x9F62, 0x0FB8, 0x9F63, 0x1D24,
+ 0x9F66, 0x1D28, 0x9F67, 0x1D29, 0x9F68, 0x3C14, 0x9F69, 0x4AB6, 0x9F6A,
+ 0x1D2B, 0x9F6C, 0x1D2A, 0x9F6D, 0x4AB7, 0x9F6F, 0x4E56, 0x9F70, 0x4AB8,
+ 0x9F71, 0x3C15, 0x9F72, 0x1D2D, 0x9F75, 0x3C16, 0x9F76, 0x1D2E, 0x9F77,
+ 0x1D2C, 0x9F8D, 0x0F7E, 0x9F90, 0x3C17, 0x9F94, 0x3C18, 0x9F95, 0x1D2F,
+ 0x9F97, 0x4350, 0x9F9C, 0x1D30, 0x9F9D, 0x1727, 0x9F9E, 0x4E57, 0x9FA0,
+ 0x1D31, 0x9FA2, 0x3C19, 0x9FA5, 0x4E58, 0xF860, 0x3C54, 0xF861, 0x3C55,
+ 0xF862, 0x3C56, 0xF87A, 0x3C57, 0xF87F, 0x3C58, 0xF909, 0x35AB, 0xF91D,
+ 0x3450, 0xF91F, 0x3704, 0xF928, 0x4F4F, 0xF929, 0x4F51, 0xF936, 0x3452,
+ 0xF95F, 0x3693, 0xF970, 0x3420, 0xF983, 0x3708, 0xF992, 0x1E81, 0xF993,
+ 0x1E82, 0xF999, 0x1E83, 0xF99A, 0x3711, 0xF9A2, 0x370F, 0xF9C3, 0x1E80,
+ 0xF9D0, 0x3454, 0xF9DC, 0x3451, 0xF9EC, 0x1E46, 0xFA03, 0x3684, 0xFA0E,
+ 0x20DA, 0xFA0F, 0x20E5, 0xFA10, 0x1E42, 0xFA11, 0x37D2, 0xFA12, 0x2121,
+ 0xFA13, 0x2131, 0xFA14, 0x2133, 0xFA15, 0x4F53, 0xFA16, 0x2164, 0xFA17,
+ 0x217B, 0xFA18, 0x2183, 0xFA19, 0x2184, 0xFA1A, 0x2185, 0xFA1B, 0x2187,
+ 0xFA1C, 0x218B, 0xFA1D, 0x218E, 0xFA1E, 0x2197, 0xFA1F, 0x21A2, 0xFA20,
+ 0x21A4, 0xFA21, 0x21A5, 0xFA22, 0x21AE, 0xFA23, 0x21B6, 0xFA24, 0x4948,
+ 0xFA25, 0x21B9, 0xFA26, 0x21BC, 0xFA27, 0x21D8, 0xFA28, 0x21DF, 0xFA29,
+ 0x21EF, 0xFA2A, 0x21FB, 0xFA2B, 0x21FC, 0xFA2C, 0x21FE, 0xFA2D, 0x220B,
+ 0xFA30, 0x3446, 0xFA31, 0x3430, 0xFA32, 0x344D, 0xFA33, 0x3449, 0xFA34,
+ 0x341A, 0xFA35, 0x3442, 0xFA36, 0x1DE3, 0xFA37, 0x3436, 0xFA38, 0x3415,
+ 0xFA39, 0x3448, 0xFA3A, 0x344B, 0xFA3B, 0x3431, 0xFA3C, 0x41C5, 0xFA3D,
+ 0x340E, 0xFA3E, 0x3410, 0xFA3F, 0x3433, 0xFA40, 0x3439, 0xFA41, 0x3445,
+ 0xFA42, 0x3416, 0xFA43, 0x3428, 0xFA44, 0x343F, 0xFA45, 0x340F, 0xFA46,
+ 0x1E14, 0xFA47, 0x3414, 0xFA48, 0x3423, 0xFA49, 0x3C26, 0xFA4A, 0x1E34,
+ 0xFA4B, 0x3443, 0xFA4C, 0x3424, 0xFA4D, 0x3421, 0xFA4E, 0x3417, 0xFA4F,
+ 0x344F, 0xFA50, 0x342F, 0xFA51, 0x3427, 0xFA52, 0x340D, 0xFA53, 0x343B,
+ 0xFA54, 0x341F, 0xFA55, 0x343D, 0xFA56, 0x342E, 0xFA57, 0x3457, 0xFA58,
+ 0x47BE, 0xFA59, 0x3440, 0xFA5A, 0x3429, 0xFA5B, 0x3425, 0xFA5C, 0x3426,
+ 0xFA5D, 0x3777, 0xFA5E, 0x3776, 0xFA5F, 0x3437, 0xFA60, 0x3413, 0xFA61,
+ 0x3422, 0xFA62, 0x3409, 0xFA63, 0x341B, 0xFA64, 0x3444, 0xFA65, 0x3434,
+ 0xFA66, 0x3C2B, 0xFA67, 0x3408, 0xFA68, 0x343E, 0xFA69, 0x3419, 0xFA6A,
+ 0x1E6C, 0xFB00, 0x248E, 0xFB01, 0x0070, 0xFB02, 0x0071, 0xFB03, 0x248F,
+ 0xFB04, 0x2490, 0xFE30, 0x1EDA, 0xFE31, 0x1ED4, 0xFE32, 0x1ED5, 0xFE33,
+ 0x1ED2, 0xFE35, 0x1EDB, 0xFE36, 0x1EDC, 0xFE37, 0x1EE1, 0xFE38, 0x1EE2,
+ 0xFE39, 0x1EDD, 0xFE3A, 0x1EDE, 0xFE3B, 0x1EEB, 0xFE3C, 0x1EEC, 0xFE3D,
+ 0x1EE5, 0xFE3E, 0x1EE6, 0xFE3F, 0x1EE3, 0xFE40, 0x1EE4, 0xFE41, 0x1EE7,
+ 0xFE42, 0x1EE8, 0xFE43, 0x1EE9, 0xFE44, 0x1EEA, 0xFE45, 0x315F, 0xFE46,
+ 0x3160, 0xFE47, 0x1EDF, 0xFE48, 0x1EE0, 0xFF01, 0x0282, 0xFF02, 0x1F47,
+ 0xFF03, 0x02CC, 0xFF04, 0x02C8, 0xFF05, 0x02CB, 0xFF06, 0x02CD, 0xFF07,
+ 0x1F46, 0xFF08, 0x02A2, 0xFF09, 0x02A3, 0xFF0A, 0x02CE, 0xFF0B, 0x02B4,
+ 0xFF0C, 0x027C, 0xFF0D, 0x02B5, 0xFF0E, 0x027D, 0xFF0F, 0x0297, 0xFF10,
+ 0x030C, 0xFF11, 0x030D, 0xFF12, 0x030E, 0xFF13, 0x030F, 0xFF14, 0x0310,
+ 0xFF15, 0x0311, 0xFF16, 0x0312, 0xFF17, 0x0313, 0xFF18, 0x0314, 0xFF19,
+ 0x0315, 0xFF1A, 0x027F, 0xFF1B, 0x0280, 0xFF1C, 0x02BB, 0xFF1D, 0x02B9,
+ 0xFF1E, 0x02BC, 0xFF1F, 0x0281, 0xFF20, 0x02CF, 0xFF21, 0x0316, 0xFF22,
+ 0x0317, 0xFF23, 0x0318, 0xFF24, 0x0319, 0xFF25, 0x031A, 0xFF26, 0x031B,
+ 0xFF27, 0x031C, 0xFF28, 0x031D, 0xFF29, 0x031E, 0xFF2A, 0x031F, 0xFF2B,
+ 0x0320, 0xFF2C, 0x0321, 0xFF2D, 0x0322, 0xFF2E, 0x0323, 0xFF2F, 0x0324,
+ 0xFF30, 0x0325, 0xFF31, 0x0326, 0xFF32, 0x0327, 0xFF33, 0x0328, 0xFF34,
+ 0x0329, 0xFF35, 0x032A, 0xFF36, 0x032B, 0xFF37, 0x032C, 0xFF38, 0x032D,
+ 0xFF39, 0x032E, 0xFF3A, 0x032F, 0xFF3B, 0x02A6, 0xFF3C, 0x0298, 0xFF3D,
+ 0x02A7, 0xFF3E, 0x0288, 0xFF3F, 0x028A, 0xFF40, 0x0286, 0xFF41, 0x0330,
+ 0xFF42, 0x0331, 0xFF43, 0x0332, 0xFF44, 0x0333, 0xFF45, 0x0334, 0xFF46,
+ 0x0335, 0xFF47, 0x0336, 0xFF48, 0x0337, 0xFF49, 0x0338, 0xFF4A, 0x0339,
+ 0xFF4B, 0x033A, 0xFF4C, 0x033B, 0xFF4D, 0x033C, 0xFF4E, 0x033D, 0xFF4F,
+ 0x033E, 0xFF50, 0x033F, 0xFF51, 0x0340, 0xFF52, 0x0341, 0xFF53, 0x0342,
+ 0xFF54, 0x0343, 0xFF55, 0x0344, 0xFF56, 0x0345, 0xFF57, 0x0346, 0xFF58,
+ 0x0347, 0xFF59, 0x0348, 0xFF5A, 0x0349, 0xFF5B, 0x02A8, 0xFF5C, 0x029B,
+ 0xFF5D, 0x02A9, 0xFF5E, 0x0299, 0xFF5F, 0x2F63, 0xFF60, 0x2F64, 0xFF61,
+ 0x0147, 0xFF62, 0x0148, 0xFF63, 0x0149, 0xFF64, 0x014A, 0xFF65, 0x014B,
+ 0xFF66, 0x014C, 0xFF67, 0x014D, 0xFF68, 0x014E, 0xFF69, 0x014F, 0xFF6A,
+ 0x0150, 0xFF6B, 0x0151, 0xFF6C, 0x0152, 0xFF6D, 0x0153, 0xFF6E, 0x0154,
+ 0xFF6F, 0x0155, 0xFF70, 0x0156, 0xFF71, 0x0157, 0xFF72, 0x0158, 0xFF73,
+ 0x0159, 0xFF74, 0x015A, 0xFF75, 0x015B, 0xFF76, 0x015C, 0xFF77, 0x015D,
+ 0xFF78, 0x015E, 0xFF79, 0x015F, 0xFF7A, 0x0160, 0xFF7B, 0x0161, 0xFF7C,
+ 0x0162, 0xFF7D, 0x0163, 0xFF7E, 0x0164, 0xFF7F, 0x0165, 0xFF80, 0x0166,
+ 0xFF81, 0x0167, 0xFF82, 0x0168, 0xFF83, 0x0169, 0xFF84, 0x016A, 0xFF85,
+ 0x016B, 0xFF86, 0x016C, 0xFF87, 0x016D, 0xFF88, 0x016E, 0xFF89, 0x016F,
+ 0xFF8A, 0x0170, 0xFF8B, 0x0171, 0xFF8C, 0x0172, 0xFF8D, 0x0173, 0xFF8E,
+ 0x0174, 0xFF8F, 0x0175, 0xFF90, 0x0176, 0xFF91, 0x0177, 0xFF92, 0x0178,
+ 0xFF93, 0x0179, 0xFF94, 0x017A, 0xFF95, 0x017B, 0xFF96, 0x017C, 0xFF97,
+ 0x017D, 0xFF98, 0x017E, 0xFF99, 0x017F, 0xFF9A, 0x0180, 0xFF9B, 0x0181,
+ 0xFF9C, 0x0182, 0xFF9D, 0x0183, 0xFF9E, 0x0184, 0xFF9F, 0x0185, 0xFFE0,
+ 0x02C9, 0xFFE1, 0x02CA, 0xFFE2, 0x02EF, 0xFFE3, 0x0289, 0xFFE4, 0x1F45,
+ 0xFFE5, 0x02C7, 0xFFE8, 0x0143,
};
const FX_WORD g_FXCMAP_UniJIS_UTF16_H_5_DWord[384 * 3] = {
diff --git a/core/src/fpdfapi/fpdf_cmaps/Japan1/UniJIS-UTF16-V_5.cpp b/core/src/fpdfapi/fpdf_cmaps/Japan1/UniJIS-UTF16-V_5.cpp
index 9cd9ce1c73..f00ee90940 100644
--- a/core/src/fpdfapi/fpdf_cmaps/Japan1/UniJIS-UTF16-V_5.cpp
+++ b/core/src/fpdfapi/fpdf_cmaps/Japan1/UniJIS-UTF16-V_5.cpp
@@ -7,77 +7,69 @@
#include "cmaps_japan1.h"
const FX_WORD g_FXCMAP_UniJIS_UTF16_V_5[289 * 2] = {
- 0x00B0, 0x204D, 0x2010, 0x1ED5, 0x2015, 0x1ED4, 0x2016, 0x1ED7,
- 0x2025, 0x1EDA, 0x2026, 0x1ED9, 0x2032, 0x2051, 0x2033, 0x205B,
- 0x2190, 0x02E2, 0x2191, 0x02E0, 0x2192, 0x02E3, 0x2193, 0x02E1,
- 0x21C4, 0x2077, 0x21C5, 0x2076, 0x21C6, 0x2078, 0x21E6, 0x1F4C,
- 0x21E7, 0x1F4E, 0x21E8, 0x1F4B, 0x21E9, 0x1F4D, 0x239B, 0x2F74,
- 0x239C, 0x2F88, 0x239D, 0x2F73, 0x239E, 0x2F76, 0x239F, 0x2F88,
- 0x23A0, 0x2F75, 0x23A1, 0x2F7C, 0x23A2, 0x2F88, 0x23A3, 0x2F7B,
- 0x23A4, 0x2F7E, 0x23A5, 0x2F88, 0x23A6, 0x2F7D, 0x23A7, 0x1FE8,
- 0x23A8, 0x1FE7, 0x23A9, 0x1FE6, 0x23AA, 0x2F88, 0x23AB, 0x1FEC,
- 0x23AC, 0x1FEB, 0x23AD, 0x1FEA, 0x23B0, 0x3FDE, 0x23B1, 0x3FDF,
- 0x2500, 0x1D39, 0x2501, 0x1D3A, 0x2502, 0x1D37, 0x2503, 0x1D38,
- 0x2504, 0x1D3D, 0x2505, 0x1D3E, 0x2506, 0x1D3B, 0x2507, 0x1D3C,
- 0x2508, 0x1D41, 0x2509, 0x1D42, 0x250A, 0x1D3F, 0x250B, 0x1D40,
- 0x250C, 0x1D47, 0x250D, 0x1D49, 0x250E, 0x1D48, 0x250F, 0x1D4A,
- 0x2510, 0x1D4F, 0x2511, 0x1D51, 0x2512, 0x1D50, 0x2513, 0x1D52,
- 0x2514, 0x1D43, 0x2515, 0x1D45, 0x2516, 0x1D44, 0x2517, 0x1D46,
- 0x2518, 0x1D4B, 0x2519, 0x1D4D, 0x251A, 0x1D4C, 0x251B, 0x1D4E,
- 0x251C, 0x1D63, 0x251D, 0x1D67, 0x251E, 0x1D65, 0x251F, 0x1D64,
- 0x2520, 0x1D66, 0x2521, 0x1D69, 0x2522, 0x1D68, 0x2523, 0x1D6A,
- 0x2524, 0x1D6B, 0x2525, 0x1D6F, 0x2526, 0x1D6D, 0x2527, 0x1D6C,
- 0x2528, 0x1D6E, 0x2529, 0x1D71, 0x252A, 0x1D70, 0x252B, 0x1D72,
- 0x252C, 0x1D5B, 0x252D, 0x1D5D, 0x252E, 0x1D5E, 0x252F, 0x1D5F,
- 0x2530, 0x1D5C, 0x2531, 0x1D60, 0x2532, 0x1D61, 0x2533, 0x1D62,
- 0x2534, 0x1D53, 0x2535, 0x1D55, 0x2536, 0x1D56, 0x2537, 0x1D57,
- 0x2538, 0x1D54, 0x2539, 0x1D58, 0x253A, 0x1D59, 0x253B, 0x1D5A,
- 0x253D, 0x1D77, 0x253E, 0x1D78, 0x253F, 0x1D79, 0x2540, 0x1D75,
- 0x2541, 0x1D74, 0x2542, 0x1D76, 0x2543, 0x1D7B, 0x2544, 0x1D7D,
- 0x2545, 0x1D7A, 0x2546, 0x1D7C, 0x2547, 0x1D81, 0x2548, 0x1D80,
- 0x2549, 0x1D7E, 0x254A, 0x1D7F, 0x261C, 0x201D, 0x261D, 0x201B,
- 0x261E, 0x201E, 0x261F, 0x201C, 0x2702, 0x2F92, 0x27A1, 0x2011,
- 0x3001, 0x1ECF, 0x3002, 0x1ED0, 0x3008, 0x1EE3, 0x3009, 0x1EE4,
- 0x300A, 0x1EE5, 0x300B, 0x1EE6, 0x300C, 0x1EE7, 0x300D, 0x1EE8,
- 0x300E, 0x1EE9, 0x300F, 0x1EEA, 0x3010, 0x1EEB, 0x3011, 0x1EEC,
- 0x3014, 0x1EDD, 0x3015, 0x1EDE, 0x3016, 0x3FC9, 0x3017, 0x3FCA,
- 0x3018, 0x2F6B, 0x3019, 0x2F6C, 0x301C, 0x1ED6, 0x301D, 0x1F14,
- 0x301F, 0x1F15, 0x303B, 0x2F4B, 0x3041, 0x1EEE, 0x3043, 0x1EEF,
- 0x3045, 0x1EF0, 0x3047, 0x1EF1, 0x3049, 0x1EF2, 0x3063, 0x1EF3,
- 0x3083, 0x1EF4, 0x3085, 0x1EF5, 0x3087, 0x1EF6, 0x308E, 0x1EF7,
- 0x3095, 0x2048, 0x3096, 0x2049, 0x309B, 0x2050, 0x309C, 0x204F,
- 0x30A0, 0x3FCB, 0x30A1, 0x1EF8, 0x30A3, 0x1EF9, 0x30A5, 0x1EFA,
- 0x30A7, 0x1EFB, 0x30A9, 0x1EFC, 0x30C3, 0x1EFD, 0x30E3, 0x1EFE,
- 0x30E5, 0x1EFF, 0x30E7, 0x1F00, 0x30EE, 0x1F01, 0x30F5, 0x1F02,
- 0x30F6, 0x1F03, 0x30FC, 0x1ED3, 0x31F0, 0x3FCD, 0x31F1, 0x3FCE,
- 0x31F2, 0x3FCF, 0x31F3, 0x3FD0, 0x31F4, 0x3FD1, 0x31F5, 0x3FD2,
- 0x31F6, 0x3FD3, 0x31F7, 0x3FD4, 0x31F8, 0x3FD5, 0x31F9, 0x3FD6,
- 0x31FA, 0x3FD8, 0x31FB, 0x3FD9, 0x31FC, 0x3FDA, 0x31FD, 0x3FDB,
- 0x31FE, 0x3FDC, 0x31FF, 0x3FDD, 0x3300, 0x209E, 0x3301, 0x2EB6,
- 0x3302, 0x2EB7, 0x3303, 0x2092, 0x3304, 0x2EB8, 0x3305, 0x208D,
- 0x3306, 0x2EB9, 0x3307, 0x2EBD, 0x3308, 0x2EBB, 0x3309, 0x2EC0,
- 0x330A, 0x2EBE, 0x330B, 0x2EC2, 0x330C, 0x2EC4, 0x330D, 0x1F0E,
- 0x330E, 0x2EC5, 0x330F, 0x2EC6, 0x3310, 0x2EC7, 0x3311, 0x2EC8,
- 0x3312, 0x2EC9, 0x3313, 0x2ECA, 0x3314, 0x1F05, 0x3315, 0x2094,
- 0x3316, 0x208A, 0x3317, 0x2ECC, 0x3318, 0x2093, 0x3319, 0x2ECE,
- 0x331A, 0x2ED0, 0x331B, 0x2ED1, 0x331C, 0x2ED2, 0x331D, 0x2ED3,
- 0x331E, 0x20A1, 0x331F, 0x2ED4, 0x3320, 0x2ED5, 0x3321, 0x2ED6,
- 0x3322, 0x2089, 0x3323, 0x209C, 0x3324, 0x2ED7, 0x3325, 0x2ED9,
- 0x3326, 0x1F0F, 0x3327, 0x1F09, 0x3328, 0x2EDC, 0x3329, 0x2EDD,
- 0x332A, 0x20A4, 0x332B, 0x1F11, 0x332D, 0x2EDF, 0x332E, 0x2EE2,
- 0x332F, 0x2EE3, 0x3330, 0x2EE4, 0x3331, 0x20A6, 0x3332, 0x2EE5,
- 0x3333, 0x208E, 0x3334, 0x2EE8, 0x3335, 0x2EE9, 0x3336, 0x1F0B,
- 0x3337, 0x2EEE, 0x3338, 0x2EF0, 0x3339, 0x2097, 0x333A, 0x2EF1,
- 0x333B, 0x209D, 0x333C, 0x2EEA, 0x333D, 0x2EF2, 0x333E, 0x2EF4,
- 0x333F, 0x2EF5, 0x3340, 0x2EF6, 0x3341, 0x2EF3, 0x3342, 0x209B,
- 0x3343, 0x2EF7, 0x3344, 0x2EF8, 0x3345, 0x2EF9, 0x3346, 0x2EFA,
- 0x3347, 0x20A5, 0x3348, 0x2EFB, 0x3349, 0x1F04, 0x334A, 0x1F12,
- 0x334B, 0x2EFC, 0x334C, 0x2EFD, 0x334D, 0x1F07, 0x334E, 0x2091,
- 0x334F, 0x2EFE, 0x3350, 0x2EFF, 0x3351, 0x1F0C, 0x3352, 0x2F02,
- 0x3353, 0x2F06, 0x3354, 0x2F03, 0x3355, 0x2F07, 0x3356, 0x2F08,
- 0x3357, 0x2098, 0x337F, 0x2084, 0xFF08, 0x1EDB, 0xFF09, 0x1EDC,
- 0xFF0C, 0x204C, 0xFF0E, 0x2052, 0xFF1D, 0x1EED, 0xFF3B, 0x1EDF,
- 0xFF3D, 0x1EE0, 0xFF3F, 0x1ED2, 0xFF5B, 0x1EE1, 0xFF5C, 0x1ED8,
- 0xFF5D, 0x1EE2, 0xFF5E, 0x1ED6, 0xFF5F, 0x2F6D, 0xFF60, 0x2F6E,
+ 0x00B0, 0x204D, 0x2010, 0x1ED5, 0x2015, 0x1ED4, 0x2016, 0x1ED7, 0x2025,
+ 0x1EDA, 0x2026, 0x1ED9, 0x2032, 0x2051, 0x2033, 0x205B, 0x2190, 0x02E2,
+ 0x2191, 0x02E0, 0x2192, 0x02E3, 0x2193, 0x02E1, 0x21C4, 0x2077, 0x21C5,
+ 0x2076, 0x21C6, 0x2078, 0x21E6, 0x1F4C, 0x21E7, 0x1F4E, 0x21E8, 0x1F4B,
+ 0x21E9, 0x1F4D, 0x239B, 0x2F74, 0x239C, 0x2F88, 0x239D, 0x2F73, 0x239E,
+ 0x2F76, 0x239F, 0x2F88, 0x23A0, 0x2F75, 0x23A1, 0x2F7C, 0x23A2, 0x2F88,
+ 0x23A3, 0x2F7B, 0x23A4, 0x2F7E, 0x23A5, 0x2F88, 0x23A6, 0x2F7D, 0x23A7,
+ 0x1FE8, 0x23A8, 0x1FE7, 0x23A9, 0x1FE6, 0x23AA, 0x2F88, 0x23AB, 0x1FEC,
+ 0x23AC, 0x1FEB, 0x23AD, 0x1FEA, 0x23B0, 0x3FDE, 0x23B1, 0x3FDF, 0x2500,
+ 0x1D39, 0x2501, 0x1D3A, 0x2502, 0x1D37, 0x2503, 0x1D38, 0x2504, 0x1D3D,
+ 0x2505, 0x1D3E, 0x2506, 0x1D3B, 0x2507, 0x1D3C, 0x2508, 0x1D41, 0x2509,
+ 0x1D42, 0x250A, 0x1D3F, 0x250B, 0x1D40, 0x250C, 0x1D47, 0x250D, 0x1D49,
+ 0x250E, 0x1D48, 0x250F, 0x1D4A, 0x2510, 0x1D4F, 0x2511, 0x1D51, 0x2512,
+ 0x1D50, 0x2513, 0x1D52, 0x2514, 0x1D43, 0x2515, 0x1D45, 0x2516, 0x1D44,
+ 0x2517, 0x1D46, 0x2518, 0x1D4B, 0x2519, 0x1D4D, 0x251A, 0x1D4C, 0x251B,
+ 0x1D4E, 0x251C, 0x1D63, 0x251D, 0x1D67, 0x251E, 0x1D65, 0x251F, 0x1D64,
+ 0x2520, 0x1D66, 0x2521, 0x1D69, 0x2522, 0x1D68, 0x2523, 0x1D6A, 0x2524,
+ 0x1D6B, 0x2525, 0x1D6F, 0x2526, 0x1D6D, 0x2527, 0x1D6C, 0x2528, 0x1D6E,
+ 0x2529, 0x1D71, 0x252A, 0x1D70, 0x252B, 0x1D72, 0x252C, 0x1D5B, 0x252D,
+ 0x1D5D, 0x252E, 0x1D5E, 0x252F, 0x1D5F, 0x2530, 0x1D5C, 0x2531, 0x1D60,
+ 0x2532, 0x1D61, 0x2533, 0x1D62, 0x2534, 0x1D53, 0x2535, 0x1D55, 0x2536,
+ 0x1D56, 0x2537, 0x1D57, 0x2538, 0x1D54, 0x2539, 0x1D58, 0x253A, 0x1D59,
+ 0x253B, 0x1D5A, 0x253D, 0x1D77, 0x253E, 0x1D78, 0x253F, 0x1D79, 0x2540,
+ 0x1D75, 0x2541, 0x1D74, 0x2542, 0x1D76, 0x2543, 0x1D7B, 0x2544, 0x1D7D,
+ 0x2545, 0x1D7A, 0x2546, 0x1D7C, 0x2547, 0x1D81, 0x2548, 0x1D80, 0x2549,
+ 0x1D7E, 0x254A, 0x1D7F, 0x261C, 0x201D, 0x261D, 0x201B, 0x261E, 0x201E,
+ 0x261F, 0x201C, 0x2702, 0x2F92, 0x27A1, 0x2011, 0x3001, 0x1ECF, 0x3002,
+ 0x1ED0, 0x3008, 0x1EE3, 0x3009, 0x1EE4, 0x300A, 0x1EE5, 0x300B, 0x1EE6,
+ 0x300C, 0x1EE7, 0x300D, 0x1EE8, 0x300E, 0x1EE9, 0x300F, 0x1EEA, 0x3010,
+ 0x1EEB, 0x3011, 0x1EEC, 0x3014, 0x1EDD, 0x3015, 0x1EDE, 0x3016, 0x3FC9,
+ 0x3017, 0x3FCA, 0x3018, 0x2F6B, 0x3019, 0x2F6C, 0x301C, 0x1ED6, 0x301D,
+ 0x1F14, 0x301F, 0x1F15, 0x303B, 0x2F4B, 0x3041, 0x1EEE, 0x3043, 0x1EEF,
+ 0x3045, 0x1EF0, 0x3047, 0x1EF1, 0x3049, 0x1EF2, 0x3063, 0x1EF3, 0x3083,
+ 0x1EF4, 0x3085, 0x1EF5, 0x3087, 0x1EF6, 0x308E, 0x1EF7, 0x3095, 0x2048,
+ 0x3096, 0x2049, 0x309B, 0x2050, 0x309C, 0x204F, 0x30A0, 0x3FCB, 0x30A1,
+ 0x1EF8, 0x30A3, 0x1EF9, 0x30A5, 0x1EFA, 0x30A7, 0x1EFB, 0x30A9, 0x1EFC,
+ 0x30C3, 0x1EFD, 0x30E3, 0x1EFE, 0x30E5, 0x1EFF, 0x30E7, 0x1F00, 0x30EE,
+ 0x1F01, 0x30F5, 0x1F02, 0x30F6, 0x1F03, 0x30FC, 0x1ED3, 0x31F0, 0x3FCD,
+ 0x31F1, 0x3FCE, 0x31F2, 0x3FCF, 0x31F3, 0x3FD0, 0x31F4, 0x3FD1, 0x31F5,
+ 0x3FD2, 0x31F6, 0x3FD3, 0x31F7, 0x3FD4, 0x31F8, 0x3FD5, 0x31F9, 0x3FD6,
+ 0x31FA, 0x3FD8, 0x31FB, 0x3FD9, 0x31FC, 0x3FDA, 0x31FD, 0x3FDB, 0x31FE,
+ 0x3FDC, 0x31FF, 0x3FDD, 0x3300, 0x209E, 0x3301, 0x2EB6, 0x3302, 0x2EB7,
+ 0x3303, 0x2092, 0x3304, 0x2EB8, 0x3305, 0x208D, 0x3306, 0x2EB9, 0x3307,
+ 0x2EBD, 0x3308, 0x2EBB, 0x3309, 0x2EC0, 0x330A, 0x2EBE, 0x330B, 0x2EC2,
+ 0x330C, 0x2EC4, 0x330D, 0x1F0E, 0x330E, 0x2EC5, 0x330F, 0x2EC6, 0x3310,
+ 0x2EC7, 0x3311, 0x2EC8, 0x3312, 0x2EC9, 0x3313, 0x2ECA, 0x3314, 0x1F05,
+ 0x3315, 0x2094, 0x3316, 0x208A, 0x3317, 0x2ECC, 0x3318, 0x2093, 0x3319,
+ 0x2ECE, 0x331A, 0x2ED0, 0x331B, 0x2ED1, 0x331C, 0x2ED2, 0x331D, 0x2ED3,
+ 0x331E, 0x20A1, 0x331F, 0x2ED4, 0x3320, 0x2ED5, 0x3321, 0x2ED6, 0x3322,
+ 0x2089, 0x3323, 0x209C, 0x3324, 0x2ED7, 0x3325, 0x2ED9, 0x3326, 0x1F0F,
+ 0x3327, 0x1F09, 0x3328, 0x2EDC, 0x3329, 0x2EDD, 0x332A, 0x20A4, 0x332B,
+ 0x1F11, 0x332D, 0x2EDF, 0x332E, 0x2EE2, 0x332F, 0x2EE3, 0x3330, 0x2EE4,
+ 0x3331, 0x20A6, 0x3332, 0x2EE5, 0x3333, 0x208E, 0x3334, 0x2EE8, 0x3335,
+ 0x2EE9, 0x3336, 0x1F0B, 0x3337, 0x2EEE, 0x3338, 0x2EF0, 0x3339, 0x2097,
+ 0x333A, 0x2EF1, 0x333B, 0x209D, 0x333C, 0x2EEA, 0x333D, 0x2EF2, 0x333E,
+ 0x2EF4, 0x333F, 0x2EF5, 0x3340, 0x2EF6, 0x3341, 0x2EF3, 0x3342, 0x209B,
+ 0x3343, 0x2EF7, 0x3344, 0x2EF8, 0x3345, 0x2EF9, 0x3346, 0x2EFA, 0x3347,
+ 0x20A5, 0x3348, 0x2EFB, 0x3349, 0x1F04, 0x334A, 0x1F12, 0x334B, 0x2EFC,
+ 0x334C, 0x2EFD, 0x334D, 0x1F07, 0x334E, 0x2091, 0x334F, 0x2EFE, 0x3350,
+ 0x2EFF, 0x3351, 0x1F0C, 0x3352, 0x2F02, 0x3353, 0x2F06, 0x3354, 0x2F03,
+ 0x3355, 0x2F07, 0x3356, 0x2F08, 0x3357, 0x2098, 0x337F, 0x2084, 0xFF08,
+ 0x1EDB, 0xFF09, 0x1EDC, 0xFF0C, 0x204C, 0xFF0E, 0x2052, 0xFF1D, 0x1EED,
+ 0xFF3B, 0x1EDF, 0xFF3D, 0x1EE0, 0xFF3F, 0x1ED2, 0xFF5B, 0x1EE1, 0xFF5C,
+ 0x1ED8, 0xFF5D, 0x1EE2, 0xFF5E, 0x1ED6, 0xFF5F, 0x2F6D, 0xFF60, 0x2F6E,
0xFFE3, 0x1ED1,
};
diff --git a/core/src/fpdfapi/fpdf_cmaps/Japan1/cmaps_japan1.cpp b/core/src/fpdfapi/fpdf_cmaps/Japan1/cmaps_japan1.cpp
index e5002d6445..1c788dc27a 100644
--- a/core/src/fpdfapi/fpdf_cmaps/Japan1/cmaps_japan1.cpp
+++ b/core/src/fpdfapi/fpdf_cmaps/Japan1/cmaps_japan1.cpp
@@ -12,33 +12,54 @@
#include "cmaps_japan1.h"
static const FXCMAP_CMap g_FXCMAP_Japan1_cmaps[] = {
- { "83pv-RKSJ-H", FXCMAP_CMap::Range, g_FXCMAP_83pv_RKSJ_H_1, 222, FXCMAP_CMap::None, NULL, 0, 0 },
- { "90ms-RKSJ-H", FXCMAP_CMap::Range, g_FXCMAP_90ms_RKSJ_H_2, 171, FXCMAP_CMap::None, NULL, 0, 0 },
- { "90ms-RKSJ-V", FXCMAP_CMap::Range, g_FXCMAP_90ms_RKSJ_V_2, 78, FXCMAP_CMap::None, NULL, 0, -1 },
- { "90msp-RKSJ-H", FXCMAP_CMap::Range, g_FXCMAP_90msp_RKSJ_H_2, 170, FXCMAP_CMap::None, NULL, 0, -2 },
- { "90msp-RKSJ-V", FXCMAP_CMap::Range, g_FXCMAP_90msp_RKSJ_V_2, 78, FXCMAP_CMap::None, NULL, 0, -1 },
- { "90pv-RKSJ-H", FXCMAP_CMap::Range, g_FXCMAP_90pv_RKSJ_H_1, 263, FXCMAP_CMap::None, NULL, 0, 0 },
- { "Add-RKSJ-H", FXCMAP_CMap::Range, g_FXCMAP_Add_RKSJ_H_1, 635, FXCMAP_CMap::None, NULL, 0, 0 },
- { "Add-RKSJ-V", FXCMAP_CMap::Range, g_FXCMAP_Add_RKSJ_V_1, 57, FXCMAP_CMap::None, NULL, 0, -1 },
- { "EUC-H", FXCMAP_CMap::Range, g_FXCMAP_EUC_H_1, 120, FXCMAP_CMap::None, NULL, 0, 0 },
- { "EUC-V", FXCMAP_CMap::Range, g_FXCMAP_EUC_V_1, 27, FXCMAP_CMap::None, NULL, 0, -1 },
- { "Ext-RKSJ-H", FXCMAP_CMap::Range, g_FXCMAP_Ext_RKSJ_H_2, 665, FXCMAP_CMap::None, NULL, 0, -4 },
- { "Ext-RKSJ-V", FXCMAP_CMap::Range, g_FXCMAP_Ext_RKSJ_V_2, 39, FXCMAP_CMap::None, NULL, 0, -1 },
- { "H", FXCMAP_CMap::Range, g_FXCMAP_H_1, 118, FXCMAP_CMap::None, NULL, 0, 0 },
- { "V", FXCMAP_CMap::Range, g_FXCMAP_V_1, 27, FXCMAP_CMap::None, NULL, 0, -1 },
- { "UniJIS-UCS2-H", FXCMAP_CMap::Single, g_FXCMAP_UniJIS_UCS2_H_4, 9772, FXCMAP_CMap::None, NULL, 0, 0 },
- { "UniJIS-UCS2-V", FXCMAP_CMap::Single, g_FXCMAP_UniJIS_UCS2_V_4, 251, FXCMAP_CMap::None, NULL, 0, -1 },
- { "UniJIS-UCS2-HW-H", FXCMAP_CMap::Range, g_FXCMAP_UniJIS_UCS2_HW_H_4, 4, FXCMAP_CMap::None, NULL, 0, -2 },
- { "UniJIS-UCS2-HW-V", FXCMAP_CMap::Range, g_FXCMAP_UniJIS_UCS2_HW_V_4, 199, FXCMAP_CMap::None, NULL, 0, -1 },
- { "UniJIS-UTF16-H", FXCMAP_CMap::Single, g_FXCMAP_UniJIS_UCS2_H_4, 9772, FXCMAP_CMap::None, NULL, 0, 0 },
- { "UniJIS-UTF16-V", FXCMAP_CMap::Single, g_FXCMAP_UniJIS_UCS2_V_4, 251, FXCMAP_CMap::None, NULL, 0, -1 },
+ {"83pv-RKSJ-H", FXCMAP_CMap::Range, g_FXCMAP_83pv_RKSJ_H_1, 222,
+ FXCMAP_CMap::None, NULL, 0, 0},
+ {"90ms-RKSJ-H", FXCMAP_CMap::Range, g_FXCMAP_90ms_RKSJ_H_2, 171,
+ FXCMAP_CMap::None, NULL, 0, 0},
+ {"90ms-RKSJ-V", FXCMAP_CMap::Range, g_FXCMAP_90ms_RKSJ_V_2, 78,
+ FXCMAP_CMap::None, NULL, 0, -1},
+ {"90msp-RKSJ-H", FXCMAP_CMap::Range, g_FXCMAP_90msp_RKSJ_H_2, 170,
+ FXCMAP_CMap::None, NULL, 0, -2},
+ {"90msp-RKSJ-V", FXCMAP_CMap::Range, g_FXCMAP_90msp_RKSJ_V_2, 78,
+ FXCMAP_CMap::None, NULL, 0, -1},
+ {"90pv-RKSJ-H", FXCMAP_CMap::Range, g_FXCMAP_90pv_RKSJ_H_1, 263,
+ FXCMAP_CMap::None, NULL, 0, 0},
+ {"Add-RKSJ-H", FXCMAP_CMap::Range, g_FXCMAP_Add_RKSJ_H_1, 635,
+ FXCMAP_CMap::None, NULL, 0, 0},
+ {"Add-RKSJ-V", FXCMAP_CMap::Range, g_FXCMAP_Add_RKSJ_V_1, 57,
+ FXCMAP_CMap::None, NULL, 0, -1},
+ {"EUC-H", FXCMAP_CMap::Range, g_FXCMAP_EUC_H_1, 120, FXCMAP_CMap::None,
+ NULL, 0, 0},
+ {"EUC-V", FXCMAP_CMap::Range, g_FXCMAP_EUC_V_1, 27, FXCMAP_CMap::None, NULL,
+ 0, -1},
+ {"Ext-RKSJ-H", FXCMAP_CMap::Range, g_FXCMAP_Ext_RKSJ_H_2, 665,
+ FXCMAP_CMap::None, NULL, 0, -4},
+ {"Ext-RKSJ-V", FXCMAP_CMap::Range, g_FXCMAP_Ext_RKSJ_V_2, 39,
+ FXCMAP_CMap::None, NULL, 0, -1},
+ {"H", FXCMAP_CMap::Range, g_FXCMAP_H_1, 118, FXCMAP_CMap::None, NULL, 0, 0},
+ {"V", FXCMAP_CMap::Range, g_FXCMAP_V_1, 27, FXCMAP_CMap::None, NULL, 0, -1},
+ {"UniJIS-UCS2-H", FXCMAP_CMap::Single, g_FXCMAP_UniJIS_UCS2_H_4, 9772,
+ FXCMAP_CMap::None, NULL, 0, 0},
+ {"UniJIS-UCS2-V", FXCMAP_CMap::Single, g_FXCMAP_UniJIS_UCS2_V_4, 251,
+ FXCMAP_CMap::None, NULL, 0, -1},
+ {"UniJIS-UCS2-HW-H", FXCMAP_CMap::Range, g_FXCMAP_UniJIS_UCS2_HW_H_4, 4,
+ FXCMAP_CMap::None, NULL, 0, -2},
+ {"UniJIS-UCS2-HW-V", FXCMAP_CMap::Range, g_FXCMAP_UniJIS_UCS2_HW_V_4, 199,
+ FXCMAP_CMap::None, NULL, 0, -1},
+ {"UniJIS-UTF16-H", FXCMAP_CMap::Single, g_FXCMAP_UniJIS_UCS2_H_4, 9772,
+ FXCMAP_CMap::None, NULL, 0, 0},
+ {"UniJIS-UTF16-V", FXCMAP_CMap::Single, g_FXCMAP_UniJIS_UCS2_V_4, 251,
+ FXCMAP_CMap::None, NULL, 0, -1},
};
-void CPDF_ModuleMgr::LoadEmbeddedJapan1CMaps()
-{
- CPDF_FontGlobals* pFontGlobals = CPDF_ModuleMgr::Get()->GetPageModule()->GetFontGlobals();
- pFontGlobals->m_EmbeddedCharsets[CIDSET_JAPAN1].m_pMapList = g_FXCMAP_Japan1_cmaps;
- pFontGlobals->m_EmbeddedCharsets[CIDSET_JAPAN1].m_Count = FX_ArraySize(g_FXCMAP_Japan1_cmaps);
- pFontGlobals->m_EmbeddedToUnicodes[CIDSET_JAPAN1].m_pMap = g_FXCMAP_Japan1CID2Unicode_4;
- pFontGlobals->m_EmbeddedToUnicodes[CIDSET_JAPAN1].m_Count = 15444;
+void CPDF_ModuleMgr::LoadEmbeddedJapan1CMaps() {
+ CPDF_FontGlobals* pFontGlobals =
+ CPDF_ModuleMgr::Get()->GetPageModule()->GetFontGlobals();
+ pFontGlobals->m_EmbeddedCharsets[CIDSET_JAPAN1].m_pMapList =
+ g_FXCMAP_Japan1_cmaps;
+ pFontGlobals->m_EmbeddedCharsets[CIDSET_JAPAN1].m_Count =
+ FX_ArraySize(g_FXCMAP_Japan1_cmaps);
+ pFontGlobals->m_EmbeddedToUnicodes[CIDSET_JAPAN1].m_pMap =
+ g_FXCMAP_Japan1CID2Unicode_4;
+ pFontGlobals->m_EmbeddedToUnicodes[CIDSET_JAPAN1].m_Count = 15444;
}
diff --git a/core/src/fpdfapi/fpdf_cmaps/Korea1/Adobe-Korea1-UCS2_2.cpp b/core/src/fpdfapi/fpdf_cmaps/Korea1/Adobe-Korea1-UCS2_2.cpp
index ec44422262..7dc85ffcff 100644
--- a/core/src/fpdfapi/fpdf_cmaps/Korea1/Adobe-Korea1-UCS2_2.cpp
+++ b/core/src/fpdfapi/fpdf_cmaps/Korea1/Adobe-Korea1-UCS2_2.cpp
@@ -7,2298 +7,2044 @@
#include "cmaps_korea1.h"
const FX_WORD g_FXCMAP_Korea1CID2Unicode_2[18352] = {
- 0xFFFD, 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,
- 0x20A9, 0x2010, 0x00A9, 0x2122, 0x22EF, 0x3000, 0x3001, 0x3002,
- 0x00B7, 0x2025, 0x2026, 0x00A8, 0x3003, 0x2013, 0x2014, 0x2016,
- 0xFF3C, 0x223C, 0x2018, 0x2019, 0x201C, 0x201D, 0x3014, 0x3015,
- 0x3008, 0x3009, 0x300A, 0x300B, 0x300C, 0x300D, 0x300E, 0x300F,
- 0x3010, 0x3011, 0x00B1, 0x00D7, 0x00F7, 0x2260, 0x2264, 0x2265,
- 0x221E, 0x2234, 0x00B0, 0x2032, 0x2033, 0x2103, 0x212B, 0xFFE0,
- 0xFFE1, 0xFFE5, 0x2642, 0x2640, 0x2220, 0x22A5, 0x2312, 0x2202,
- 0x2207, 0x2261, 0x2252, 0x00A7, 0x203B, 0x2606, 0x2605, 0x25CB,
- 0x25CF, 0x25CE, 0x25C7, 0x25C6, 0x25A1, 0x25A0, 0x25B3, 0x25B2,
- 0x25BD, 0x25BC, 0x2192, 0x2190, 0x2191, 0x2193, 0x2194, 0x3013,
- 0x226A, 0x226B, 0x221A, 0x223D, 0x221D, 0x2235, 0x222B, 0x222C,
- 0x2208, 0x220B, 0x2286, 0x2287, 0x2282, 0x2283, 0x222A, 0x2229,
- 0x2227, 0x2228, 0xFFE2, 0x21D2, 0x21D4, 0x2200, 0x2203, 0x00B4,
- 0x02DC, 0x02C7, 0x02D8, 0x02DD, 0x02DA, 0x02D9, 0x00B8, 0x02DB,
- 0x00A1, 0x00BF, 0x2236, 0x222E, 0x2211, 0x220F, 0x00A4, 0x2109,
- 0x2030, 0x25C1, 0x25C0, 0x25B7, 0x25B6, 0x2664, 0x2660, 0x2661,
- 0x2665, 0x2667, 0x2663, 0x2299, 0x25C8, 0x25A3, 0x25D0, 0x25D1,
- 0x2592, 0x25A4, 0x25A5, 0x25A8, 0x25A7, 0x25A6, 0x25A9, 0x2668,
- 0x260F, 0x260E, 0x261C, 0x261E, 0x00B6, 0x2020, 0x2021, 0x2195,
- 0x2197, 0x2199, 0x2196, 0x2198, 0x266D, 0x2669, 0x266A, 0x266C,
- 0x327F, 0x321C, 0x2116, 0x33C7, 0x2122, 0x33C2, 0x33D8, 0x2121,
- 0xFF01, 0xFF02, 0xFF03, 0xFF04, 0xFF05, 0xFF06, 0xFF07, 0xFF08,
- 0xFF09, 0xFF0A, 0xFF0B, 0xFF0C, 0xFF0D, 0xFF0E, 0xFF0F, 0xFF10,
- 0xFF11, 0xFF12, 0xFF13, 0xFF14, 0xFF15, 0xFF16, 0xFF17, 0xFF18,
- 0xFF19, 0xFF1A, 0xFF1B, 0xFF1C, 0xFF1D, 0xFF1E, 0xFF1F, 0xFF20,
- 0xFF21, 0xFF22, 0xFF23, 0xFF24, 0xFF25, 0xFF26, 0xFF27, 0xFF28,
- 0xFF29, 0xFF2A, 0xFF2B, 0xFF2C, 0xFF2D, 0xFF2E, 0xFF2F, 0xFF30,
- 0xFF31, 0xFF32, 0xFF33, 0xFF34, 0xFF35, 0xFF36, 0xFF37, 0xFF38,
- 0xFF39, 0xFF3A, 0xFF3B, 0xFFE6, 0xFF3D, 0xFF3E, 0xFF3F, 0xFF40,
- 0xFF41, 0xFF42, 0xFF43, 0xFF44, 0xFF45, 0xFF46, 0xFF47, 0xFF48,
- 0xFF49, 0xFF4A, 0xFF4B, 0xFF4C, 0xFF4D, 0xFF4E, 0xFF4F, 0xFF50,
- 0xFF51, 0xFF52, 0xFF53, 0xFF54, 0xFF55, 0xFF56, 0xFF57, 0xFF58,
- 0xFF59, 0xFF5A, 0xFF5B, 0xFF5C, 0xFF5D, 0xFFE3, 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, 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, 0x2170, 0x2171, 0x2172, 0x2173, 0x2174,
- 0x2175, 0x2176, 0x2177, 0x2178, 0x2179, 0x2160, 0x2161, 0x2162,
- 0x2163, 0x2164, 0x2165, 0x2166, 0x2167, 0x2168, 0x2169, 0x0391,
- 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x0398, 0x0399,
- 0x039A, 0x039B, 0x039C, 0x039D, 0x039E, 0x039F, 0x03A0, 0x03A1,
- 0x03A3, 0x03A4, 0x03A5, 0x03A6, 0x03A7, 0x03A8, 0x03A9, 0x03B1,
- 0x03B2, 0x03B3, 0x03B4, 0x03B5, 0x03B6, 0x03B7, 0x03B8, 0x03B9,
- 0x03BA, 0x03BB, 0x03BC, 0x03BD, 0x03BE, 0x03BF, 0x03C0, 0x03C1,
- 0x03C3, 0x03C4, 0x03C5, 0x03C6, 0x03C7, 0x03C8, 0x03C9, 0x2500,
- 0x2502, 0x250C, 0x2510, 0x2518, 0x2514, 0x251C, 0x252C, 0x2524,
- 0x2534, 0x253C, 0x2501, 0x2503, 0x250F, 0x2513, 0x251B, 0x2517,
- 0x2523, 0x2533, 0x252B, 0x253B, 0x254B, 0x2520, 0x252F, 0x2528,
- 0x2537, 0x253F, 0x251D, 0x2530, 0x2525, 0x2538, 0x2542, 0x2512,
- 0x2511, 0x251A, 0x2519, 0x2516, 0x2515, 0x250E, 0x250D, 0x251E,
- 0x251F, 0x2521, 0x2522, 0x2526, 0x2527, 0x2529, 0x252A, 0x252D,
- 0x252E, 0x2531, 0x2532, 0x2535, 0x2536, 0x2539, 0x253A, 0x253D,
- 0x253E, 0x2540, 0x2541, 0x2543, 0x2544, 0x2545, 0x2546, 0x2547,
- 0x2548, 0x2549, 0x254A, 0x3395, 0x3396, 0x3397, 0x2113, 0x3398,
- 0x33C4, 0x33A3, 0x33A4, 0x33A5, 0x33A6, 0x3399, 0x339A, 0x339B,
- 0x339C, 0x339D, 0x339E, 0x339F, 0x33A0, 0x33A1, 0x33A2, 0x33CA,
- 0x338D, 0x338E, 0x338F, 0x33CF, 0x3388, 0x3389, 0x33C8, 0x33A7,
- 0x33A8, 0x33B0, 0x33B1, 0x33B2, 0x33B3, 0x33B4, 0x33B5, 0x33B6,
- 0x33B7, 0x33B8, 0x33B9, 0x3380, 0x3381, 0x3382, 0x3383, 0x3384,
- 0x33BA, 0x33BB, 0x33BC, 0x33BD, 0x33BE, 0x33BF, 0x3390, 0x3391,
- 0x3392, 0x3393, 0x3394, 0x2126, 0x33C0, 0x33C1, 0x338A, 0x338B,
- 0x338C, 0x33D6, 0x33C5, 0x33AD, 0x33AE, 0x33AF, 0x33DB, 0x33A9,
- 0x33AA, 0x33AB, 0x33AC, 0x33DD, 0x33D0, 0x33D3, 0x33C3, 0x33C9,
- 0x33DC, 0x33C6, 0x00C6, 0x00D0, 0x00AA, 0x0126, 0x0132, 0x013F,
- 0x0141, 0x00D8, 0x0152, 0x00BA, 0x00DE, 0x0166, 0x014A, 0x3260,
- 0x3261, 0x3262, 0x3263, 0x3264, 0x3265, 0x3266, 0x3267, 0x3268,
- 0x3269, 0x326A, 0x326B, 0x326C, 0x326D, 0x326E, 0x326F, 0x3270,
- 0x3271, 0x3272, 0x3273, 0x3274, 0x3275, 0x3276, 0x3277, 0x3278,
- 0x3279, 0x327A, 0x327B, 0x24D0, 0x24D1, 0x24D2, 0x24D3, 0x24D4,
- 0x24D5, 0x24D6, 0x24D7, 0x24D8, 0x24D9, 0x24DA, 0x24DB, 0x24DC,
- 0x24DD, 0x24DE, 0x24DF, 0x24E0, 0x24E1, 0x24E2, 0x24E3, 0x24E4,
- 0x24E5, 0x24E6, 0x24E7, 0x24E8, 0x24E9, 0x2460, 0x2461, 0x2462,
- 0x2463, 0x2464, 0x2465, 0x2466, 0x2467, 0x2468, 0x2469, 0x246A,
- 0x246B, 0x246C, 0x246D, 0x246E, 0x00BD, 0x2153, 0x2154, 0x00BC,
- 0x00BE, 0x215B, 0x215C, 0x215D, 0x215E, 0x00E6, 0x0111, 0x00F0,
- 0x0127, 0x0131, 0x0133, 0x0138, 0x0140, 0x0142, 0x00F8, 0x0153,
- 0x00DF, 0x00FE, 0x0167, 0x014B, 0x0149, 0x3200, 0x3201, 0x3202,
- 0x3203, 0x3204, 0x3205, 0x3206, 0x3207, 0x3208, 0x3209, 0x320A,
- 0x320B, 0x320C, 0x320D, 0x320E, 0x320F, 0x3210, 0x3211, 0x3212,
- 0x3213, 0x3214, 0x3215, 0x3216, 0x3217, 0x3218, 0x3219, 0x321A,
- 0x321B, 0x249C, 0x249D, 0x249E, 0x249F, 0x24A0, 0x24A1, 0x24A2,
- 0x24A3, 0x24A4, 0x24A5, 0x24A6, 0x24A7, 0x24A8, 0x24A9, 0x24AA,
- 0x24AB, 0x24AC, 0x24AD, 0x24AE, 0x24AF, 0x24B0, 0x24B1, 0x24B2,
- 0x24B3, 0x24B4, 0x24B5, 0x2474, 0x2475, 0x2476, 0x2477, 0x2478,
- 0x2479, 0x247A, 0x247B, 0x247C, 0x247D, 0x247E, 0x247F, 0x2480,
- 0x2481, 0x2482, 0x00B9, 0x00B2, 0x00B3, 0x2074, 0x207F, 0x2081,
- 0x2082, 0x2083, 0x2084, 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, 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, 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, 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, 0xAC00, 0xAC01,
- 0xAC04, 0xAC07, 0xAC08, 0xAC09, 0xAC0A, 0xAC10, 0xAC11, 0xAC12,
- 0xAC13, 0xAC14, 0xAC15, 0xAC16, 0xAC17, 0xAC19, 0xAC1A, 0xAC1B,
- 0xAC1C, 0xAC1D, 0xAC20, 0xAC24, 0xAC2C, 0xAC2D, 0xAC2F, 0xAC30,
- 0xAC31, 0xAC38, 0xAC39, 0xAC3C, 0xAC40, 0xAC4B, 0xAC4D, 0xAC54,
- 0xAC58, 0xAC5C, 0xAC70, 0xAC71, 0xAC74, 0xAC77, 0xAC78, 0xAC7A,
- 0xAC80, 0xAC81, 0xAC83, 0xAC84, 0xAC85, 0xAC86, 0xAC89, 0xAC8A,
- 0xAC8B, 0xAC8C, 0xAC90, 0xAC94, 0xAC9C, 0xAC9D, 0xAC9F, 0xACA0,
- 0xACA1, 0xACA8, 0xACA9, 0xACAA, 0xACAC, 0xACAF, 0xACB0, 0xACB8,
- 0xACB9, 0xACBB, 0xACBC, 0xACBD, 0xACC1, 0xACC4, 0xACC8, 0xACCC,
- 0xACD5, 0xACD7, 0xACE0, 0xACE1, 0xACE4, 0xACE7, 0xACE8, 0xACEA,
- 0xACEC, 0xACEF, 0xACF0, 0xACF1, 0xACF3, 0xACF5, 0xACF6, 0xACFC,
- 0xACFD, 0xAD00, 0xAD04, 0xAD06, 0xAD0C, 0xAD0D, 0xAD0F, 0xAD11,
- 0xAD18, 0xAD1C, 0xAD20, 0xAD29, 0xAD2C, 0xAD2D, 0xAD34, 0xAD35,
- 0xAD38, 0xAD3C, 0xAD44, 0xAD45, 0xAD47, 0xAD49, 0xAD50, 0xAD54,
- 0xAD58, 0xAD61, 0xAD63, 0xAD6C, 0xAD6D, 0xAD70, 0xAD73, 0xAD74,
- 0xAD75, 0xAD76, 0xAD7B, 0xAD7C, 0xAD7D, 0xAD7F, 0xAD81, 0xAD82,
- 0xAD88, 0xAD89, 0xAD8C, 0xAD90, 0xAD9C, 0xAD9D, 0xADA4, 0xADB7,
- 0xADC0, 0xADC1, 0xADC4, 0xADC8, 0xADD0, 0xADD1, 0xADD3, 0xADDC,
- 0xADE0, 0xADE4, 0xADF8, 0xADF9, 0xADFC, 0xADFF, 0xAE00, 0xAE01,
- 0xAE08, 0xAE09, 0xAE0B, 0xAE0D, 0xAE14, 0xAE30, 0xAE31, 0xAE34,
- 0xAE37, 0xAE38, 0xAE3A, 0xAE40, 0xAE41, 0xAE43, 0xAE45, 0xAE46,
- 0xAE4A, 0xAE4C, 0xAE4D, 0xAE4E, 0xAE50, 0xAE54, 0xAE56, 0xAE5C,
- 0xAE5D, 0xAE5F, 0xAE60, 0xAE61, 0xAE65, 0xAE68, 0xAE69, 0xAE6C,
- 0xAE70, 0xAE78, 0xAE79, 0xAE7B, 0xAE7C, 0xAE7D, 0xAE84, 0xAE85,
- 0xAE8C, 0xAEBC, 0xAEBD, 0xAEBE, 0xAEC0, 0xAEC4, 0xAECC, 0xAECD,
- 0xAECF, 0xAED0, 0xAED1, 0xAED8, 0xAED9, 0xAEDC, 0xAEE8, 0xAEEB,
- 0xAEED, 0xAEF4, 0xAEF8, 0xAEFC, 0xAF07, 0xAF08, 0xAF0D, 0xAF10,
- 0xAF2C, 0xAF2D, 0xAF30, 0xAF32, 0xAF34, 0xAF3C, 0xAF3D, 0xAF3F,
- 0xAF41, 0xAF42, 0xAF43, 0xAF48, 0xAF49, 0xAF50, 0xAF5C, 0xAF5D,
- 0xAF64, 0xAF65, 0xAF79, 0xAF80, 0xAF84, 0xAF88, 0xAF90, 0xAF91,
- 0xAF95, 0xAF9C, 0xAFB8, 0xAFB9, 0xAFBC, 0xAFC0, 0xAFC7, 0xAFC8,
- 0xAFC9, 0xAFCB, 0xAFCD, 0xAFCE, 0xAFD4, 0xAFDC, 0xAFE8, 0xAFE9,
- 0xAFF0, 0xAFF1, 0xAFF4, 0xAFF8, 0xB000, 0xB001, 0xB004, 0xB00C,
- 0xB010, 0xB014, 0xB01C, 0xB01D, 0xB028, 0xB044, 0xB045, 0xB048,
- 0xB04A, 0xB04C, 0xB04E, 0xB053, 0xB054, 0xB055, 0xB057, 0xB059,
- 0xB05D, 0xB07C, 0xB07D, 0xB080, 0xB084, 0xB08C, 0xB08D, 0xB08F,
- 0xB091, 0xB098, 0xB099, 0xB09A, 0xB09C, 0xB09F, 0xB0A0, 0xB0A1,
- 0xB0A2, 0xB0A8, 0xB0A9, 0xB0AB, 0xB0AC, 0xB0AD, 0xB0AE, 0xB0AF,
- 0xB0B1, 0xB0B3, 0xB0B4, 0xB0B5, 0xB0B8, 0xB0BC, 0xB0C4, 0xB0C5,
- 0xB0C7, 0xB0C8, 0xB0C9, 0xB0D0, 0xB0D1, 0xB0D4, 0xB0D8, 0xB0E0,
- 0xB0E5, 0xB108, 0xB109, 0xB10B, 0xB10C, 0xB110, 0xB112, 0xB113,
- 0xB118, 0xB119, 0xB11B, 0xB11C, 0xB11D, 0xB123, 0xB124, 0xB125,
- 0xB128, 0xB12C, 0xB134, 0xB135, 0xB137, 0xB138, 0xB139, 0xB140,
- 0xB141, 0xB144, 0xB148, 0xB150, 0xB151, 0xB154, 0xB155, 0xB158,
- 0xB15C, 0xB160, 0xB178, 0xB179, 0xB17C, 0xB180, 0xB182, 0xB188,
- 0xB189, 0xB18B, 0xB18D, 0xB192, 0xB193, 0xB194, 0xB198, 0xB19C,
- 0xB1A8, 0xB1CC, 0xB1D0, 0xB1D4, 0xB1DC, 0xB1DD, 0xB1DF, 0xB1E8,
- 0xB1E9, 0xB1EC, 0xB1F0, 0xB1F9, 0xB1FB, 0xB1FD, 0xB204, 0xB205,
- 0xB208, 0xB20B, 0xB20C, 0xB214, 0xB215, 0xB217, 0xB219, 0xB220,
- 0xB234, 0xB23C, 0xB258, 0xB25C, 0xB260, 0xB268, 0xB269, 0xB274,
- 0xB275, 0xB27C, 0xB284, 0xB285, 0xB289, 0xB290, 0xB291, 0xB294,
- 0xB298, 0xB299, 0xB29A, 0xB2A0, 0xB2A1, 0xB2A3, 0xB2A5, 0xB2A6,
- 0xB2AA, 0xB2AC, 0xB2B0, 0xB2B4, 0xB2C8, 0xB2C9, 0xB2CC, 0xB2D0,
- 0xB2D2, 0xB2D8, 0xB2D9, 0xB2DB, 0xB2DD, 0xB2E2, 0xB2E4, 0xB2E5,
- 0xB2E6, 0xB2E8, 0xB2EB, 0xB2EC, 0xB2ED, 0xB2EE, 0xB2EF, 0xB2F3,
- 0xB2F4, 0xB2F5, 0xB2F7, 0xB2F8, 0xB2F9, 0xB2FA, 0xB2FB, 0xB2FF,
- 0xB300, 0xB301, 0xB304, 0xB308, 0xB310, 0xB311, 0xB313, 0xB314,
- 0xB315, 0xB31C, 0xB354, 0xB355, 0xB356, 0xB358, 0xB35B, 0xB35C,
- 0xB35E, 0xB35F, 0xB364, 0xB365, 0xB367, 0xB369, 0xB36B, 0xB36E,
- 0xB370, 0xB371, 0xB374, 0xB378, 0xB380, 0xB381, 0xB383, 0xB384,
- 0xB385, 0xB38C, 0xB390, 0xB394, 0xB3A0, 0xB3A1, 0xB3A8, 0xB3AC,
- 0xB3C4, 0xB3C5, 0xB3C8, 0xB3CB, 0xB3CC, 0xB3CE, 0xB3D0, 0xB3D4,
- 0xB3D5, 0xB3D7, 0xB3D9, 0xB3DB, 0xB3DD, 0xB3E0, 0xB3E4, 0xB3E8,
- 0xB3FC, 0xB410, 0xB418, 0xB41C, 0xB420, 0xB428, 0xB429, 0xB42B,
- 0xB434, 0xB450, 0xB451, 0xB454, 0xB458, 0xB460, 0xB461, 0xB463,
- 0xB465, 0xB46C, 0xB480, 0xB488, 0xB49D, 0xB4A4, 0xB4A8, 0xB4AC,
- 0xB4B5, 0xB4B7, 0xB4B9, 0xB4C0, 0xB4C4, 0xB4C8, 0xB4D0, 0xB4D5,
- 0xB4DC, 0xB4DD, 0xB4E0, 0xB4E3, 0xB4E4, 0xB4E6, 0xB4EC, 0xB4ED,
- 0xB4EF, 0xB4F1, 0xB4F8, 0xB514, 0xB515, 0xB518, 0xB51B, 0xB51C,
- 0xB524, 0xB525, 0xB527, 0xB528, 0xB529, 0xB52A, 0xB530, 0xB531,
- 0xB534, 0xB538, 0xB540, 0xB541, 0xB543, 0xB544, 0xB545, 0xB54B,
- 0xB54C, 0xB54D, 0xB550, 0xB554, 0xB55C, 0xB55D, 0xB55F, 0xB560,
- 0xB561, 0xB5A0, 0xB5A1, 0xB5A4, 0xB5A8, 0xB5AA, 0xB5AB, 0xB5B0,
- 0xB5B1, 0xB5B3, 0xB5B4, 0xB5B5, 0xB5BB, 0xB5BC, 0xB5BD, 0xB5C0,
- 0xB5C4, 0xB5CC, 0xB5CD, 0xB5CF, 0xB5D0, 0xB5D1, 0xB5D8, 0xB5EC,
- 0xB610, 0xB611, 0xB614, 0xB618, 0xB625, 0xB62C, 0xB634, 0xB648,
- 0xB664, 0xB668, 0xB69C, 0xB69D, 0xB6A0, 0xB6A4, 0xB6AB, 0xB6AC,
- 0xB6B1, 0xB6D4, 0xB6F0, 0xB6F4, 0xB6F8, 0xB700, 0xB701, 0xB705,
- 0xB728, 0xB729, 0xB72C, 0xB72F, 0xB730, 0xB738, 0xB739, 0xB73B,
- 0xB744, 0xB748, 0xB74C, 0xB754, 0xB755, 0xB760, 0xB764, 0xB768,
- 0xB770, 0xB771, 0xB773, 0xB775, 0xB77C, 0xB77D, 0xB780, 0xB784,
- 0xB78C, 0xB78D, 0xB78F, 0xB790, 0xB791, 0xB792, 0xB796, 0xB797,
- 0xB798, 0xB799, 0xB79C, 0xB7A0, 0xB7A8, 0xB7A9, 0xB7AB, 0xB7AC,
- 0xB7AD, 0xB7B4, 0xB7B5, 0xB7B8, 0xB7C7, 0xB7C9, 0xB7EC, 0xB7ED,
- 0xB7F0, 0xB7F4, 0xB7FC, 0xB7FD, 0xB7FF, 0xB800, 0xB801, 0xB807,
- 0xB808, 0xB809, 0xB80C, 0xB810, 0xB818, 0xB819, 0xB81B, 0xB81D,
- 0xB824, 0xB825, 0xB828, 0xB82C, 0xB834, 0xB835, 0xB837, 0xB838,
- 0xB839, 0xB840, 0xB844, 0xB851, 0xB853, 0xB85C, 0xB85D, 0xB860,
- 0xB864, 0xB86C, 0xB86D, 0xB86F, 0xB871, 0xB878, 0xB87C, 0xB88D,
- 0xB8A8, 0xB8B0, 0xB8B4, 0xB8B8, 0xB8C0, 0xB8C1, 0xB8C3, 0xB8C5,
- 0xB8CC, 0xB8D0, 0xB8D4, 0xB8DD, 0xB8DF, 0xB8E1, 0xB8E8, 0xB8E9,
- 0xB8EC, 0xB8F0, 0xB8F8, 0xB8F9, 0xB8FB, 0xB8FD, 0xB904, 0xB918,
- 0xB920, 0xB93C, 0xB93D, 0xB940, 0xB944, 0xB94C, 0xB94F, 0xB951,
- 0xB958, 0xB959, 0xB95C, 0xB960, 0xB968, 0xB969, 0xB96B, 0xB96D,
- 0xB974, 0xB975, 0xB978, 0xB97C, 0xB984, 0xB985, 0xB987, 0xB989,
- 0xB98A, 0xB98D, 0xB98E, 0xB9AC, 0xB9AD, 0xB9B0, 0xB9B4, 0xB9BC,
- 0xB9BD, 0xB9BF, 0xB9C1, 0xB9C8, 0xB9C9, 0xB9CC, 0xB9CE, 0xB9CF,
- 0xB9D0, 0xB9D1, 0xB9D2, 0xB9D8, 0xB9D9, 0xB9DB, 0xB9DD, 0xB9DE,
- 0xB9E1, 0xB9E3, 0xB9E4, 0xB9E5, 0xB9E8, 0xB9EC, 0xB9F4, 0xB9F5,
- 0xB9F7, 0xB9F8, 0xB9F9, 0xB9FA, 0xBA00, 0xBA01, 0xBA08, 0xBA15,
- 0xBA38, 0xBA39, 0xBA3C, 0xBA40, 0xBA42, 0xBA48, 0xBA49, 0xBA4B,
- 0xBA4D, 0xBA4E, 0xBA53, 0xBA54, 0xBA55, 0xBA58, 0xBA5C, 0xBA64,
- 0xBA65, 0xBA67, 0xBA68, 0xBA69, 0xBA70, 0xBA71, 0xBA74, 0xBA78,
- 0xBA83, 0xBA84, 0xBA85, 0xBA87, 0xBA8C, 0xBAA8, 0xBAA9, 0xBAAB,
- 0xBAAC, 0xBAB0, 0xBAB2, 0xBAB8, 0xBAB9, 0xBABB, 0xBABD, 0xBAC4,
- 0xBAC8, 0xBAD8, 0xBAD9, 0xBAFC, 0xBB00, 0xBB04, 0xBB0D, 0xBB0F,
- 0xBB11, 0xBB18, 0xBB1C, 0xBB20, 0xBB29, 0xBB2B, 0xBB34, 0xBB35,
- 0xBB36, 0xBB38, 0xBB3B, 0xBB3C, 0xBB3D, 0xBB3E, 0xBB44, 0xBB45,
- 0xBB47, 0xBB49, 0xBB4D, 0xBB4F, 0xBB50, 0xBB54, 0xBB58, 0xBB61,
- 0xBB63, 0xBB6C, 0xBB88, 0xBB8C, 0xBB90, 0xBBA4, 0xBBA8, 0xBBAC,
- 0xBBB4, 0xBBB7, 0xBBC0, 0xBBC4, 0xBBC8, 0xBBD0, 0xBBD3, 0xBBF8,
- 0xBBF9, 0xBBFC, 0xBBFF, 0xBC00, 0xBC02, 0xBC08, 0xBC09, 0xBC0B,
- 0xBC0C, 0xBC0D, 0xBC0F, 0xBC11, 0xBC14, 0xBC15, 0xBC16, 0xBC17,
- 0xBC18, 0xBC1B, 0xBC1C, 0xBC1D, 0xBC1E, 0xBC1F, 0xBC24, 0xBC25,
- 0xBC27, 0xBC29, 0xBC2D, 0xBC30, 0xBC31, 0xBC34, 0xBC38, 0xBC40,
- 0xBC41, 0xBC43, 0xBC44, 0xBC45, 0xBC49, 0xBC4C, 0xBC4D, 0xBC50,
- 0xBC5D, 0xBC84, 0xBC85, 0xBC88, 0xBC8B, 0xBC8C, 0xBC8E, 0xBC94,
- 0xBC95, 0xBC97, 0xBC99, 0xBC9A, 0xBCA0, 0xBCA1, 0xBCA4, 0xBCA7,
- 0xBCA8, 0xBCB0, 0xBCB1, 0xBCB3, 0xBCB4, 0xBCB5, 0xBCBC, 0xBCBD,
- 0xBCC0, 0xBCC4, 0xBCCD, 0xBCCF, 0xBCD0, 0xBCD1, 0xBCD5, 0xBCD8,
- 0xBCDC, 0xBCF4, 0xBCF5, 0xBCF6, 0xBCF8, 0xBCFC, 0xBD04, 0xBD05,
- 0xBD07, 0xBD09, 0xBD10, 0xBD14, 0xBD24, 0xBD2C, 0xBD40, 0xBD48,
- 0xBD49, 0xBD4C, 0xBD50, 0xBD58, 0xBD59, 0xBD64, 0xBD68, 0xBD80,
- 0xBD81, 0xBD84, 0xBD87, 0xBD88, 0xBD89, 0xBD8A, 0xBD90, 0xBD91,
- 0xBD93, 0xBD95, 0xBD99, 0xBD9A, 0xBD9C, 0xBDA4, 0xBDB0, 0xBDB8,
- 0xBDD4, 0xBDD5, 0xBDD8, 0xBDDC, 0xBDE9, 0xBDF0, 0xBDF4, 0xBDF8,
- 0xBE00, 0xBE03, 0xBE05, 0xBE0C, 0xBE0D, 0xBE10, 0xBE14, 0xBE1C,
- 0xBE1D, 0xBE1F, 0xBE44, 0xBE45, 0xBE48, 0xBE4C, 0xBE4E, 0xBE54,
- 0xBE55, 0xBE57, 0xBE59, 0xBE5A, 0xBE5B, 0xBE60, 0xBE61, 0xBE64,
- 0xBE68, 0xBE6A, 0xBE70, 0xBE71, 0xBE73, 0xBE74, 0xBE75, 0xBE7B,
- 0xBE7C, 0xBE7D, 0xBE80, 0xBE84, 0xBE8C, 0xBE8D, 0xBE8F, 0xBE90,
- 0xBE91, 0xBE98, 0xBE99, 0xBEA8, 0xBED0, 0xBED1, 0xBED4, 0xBED7,
- 0xBED8, 0xBEE0, 0xBEE3, 0xBEE4, 0xBEE5, 0xBEEC, 0xBF01, 0xBF08,
- 0xBF09, 0xBF18, 0xBF19, 0xBF1B, 0xBF1C, 0xBF1D, 0xBF40, 0xBF41,
- 0xBF44, 0xBF48, 0xBF50, 0xBF51, 0xBF55, 0xBF94, 0xBFB0, 0xBFC5,
- 0xBFCC, 0xBFCD, 0xBFD0, 0xBFD4, 0xBFDC, 0xBFDF, 0xBFE1, 0xC03C,
- 0xC051, 0xC058, 0xC05C, 0xC060, 0xC068, 0xC069, 0xC090, 0xC091,
- 0xC094, 0xC098, 0xC0A0, 0xC0A1, 0xC0A3, 0xC0A5, 0xC0AC, 0xC0AD,
- 0xC0AF, 0xC0B0, 0xC0B3, 0xC0B4, 0xC0B5, 0xC0B6, 0xC0BC, 0xC0BD,
- 0xC0BF, 0xC0C0, 0xC0C1, 0xC0C5, 0xC0C8, 0xC0C9, 0xC0CC, 0xC0D0,
- 0xC0D8, 0xC0D9, 0xC0DB, 0xC0DC, 0xC0DD, 0xC0E4, 0xC0E5, 0xC0E8,
- 0xC0EC, 0xC0F4, 0xC0F5, 0xC0F7, 0xC0F9, 0xC100, 0xC104, 0xC108,
- 0xC110, 0xC115, 0xC11C, 0xC11D, 0xC11E, 0xC11F, 0xC120, 0xC123,
- 0xC124, 0xC126, 0xC127, 0xC12C, 0xC12D, 0xC12F, 0xC130, 0xC131,
- 0xC136, 0xC138, 0xC139, 0xC13C, 0xC140, 0xC148, 0xC149, 0xC14B,
- 0xC14C, 0xC14D, 0xC154, 0xC155, 0xC158, 0xC15C, 0xC164, 0xC165,
- 0xC167, 0xC168, 0xC169, 0xC170, 0xC174, 0xC178, 0xC185, 0xC18C,
- 0xC18D, 0xC18E, 0xC190, 0xC194, 0xC196, 0xC19C, 0xC19D, 0xC19F,
- 0xC1A1, 0xC1A5, 0xC1A8, 0xC1A9, 0xC1AC, 0xC1B0, 0xC1BD, 0xC1C4,
- 0xC1C8, 0xC1CC, 0xC1D4, 0xC1D7, 0xC1D8, 0xC1E0, 0xC1E4, 0xC1E8,
- 0xC1F0, 0xC1F1, 0xC1F3, 0xC1FC, 0xC1FD, 0xC200, 0xC204, 0xC20C,
- 0xC20D, 0xC20F, 0xC211, 0xC218, 0xC219, 0xC21C, 0xC21F, 0xC220,
- 0xC228, 0xC229, 0xC22B, 0xC22D, 0xC22F, 0xC231, 0xC232, 0xC234,
- 0xC248, 0xC250, 0xC251, 0xC254, 0xC258, 0xC260, 0xC265, 0xC26C,
- 0xC26D, 0xC270, 0xC274, 0xC27C, 0xC27D, 0xC27F, 0xC281, 0xC288,
- 0xC289, 0xC290, 0xC298, 0xC29B, 0xC29D, 0xC2A4, 0xC2A5, 0xC2A8,
- 0xC2AC, 0xC2AD, 0xC2B4, 0xC2B5, 0xC2B7, 0xC2B9, 0xC2DC, 0xC2DD,
- 0xC2E0, 0xC2E3, 0xC2E4, 0xC2EB, 0xC2EC, 0xC2ED, 0xC2EF, 0xC2F1,
- 0xC2F6, 0xC2F8, 0xC2F9, 0xC2FB, 0xC2FC, 0xC300, 0xC308, 0xC309,
- 0xC30C, 0xC30D, 0xC313, 0xC314, 0xC315, 0xC318, 0xC31C, 0xC324,
- 0xC325, 0xC328, 0xC329, 0xC345, 0xC368, 0xC369, 0xC36C, 0xC370,
- 0xC372, 0xC378, 0xC379, 0xC37C, 0xC37D, 0xC384, 0xC388, 0xC38C,
- 0xC3C0, 0xC3D8, 0xC3D9, 0xC3DC, 0xC3DF, 0xC3E0, 0xC3E2, 0xC3E8,
- 0xC3E9, 0xC3ED, 0xC3F4, 0xC3F5, 0xC3F8, 0xC408, 0xC410, 0xC424,
- 0xC42C, 0xC430, 0xC434, 0xC43C, 0xC43D, 0xC448, 0xC464, 0xC465,
- 0xC468, 0xC46C, 0xC474, 0xC475, 0xC479, 0xC480, 0xC494, 0xC49C,
- 0xC4B8, 0xC4BC, 0xC4E9, 0xC4F0, 0xC4F1, 0xC4F4, 0xC4F8, 0xC4FA,
- 0xC4FF, 0xC500, 0xC501, 0xC50C, 0xC510, 0xC514, 0xC51C, 0xC528,
- 0xC529, 0xC52C, 0xC530, 0xC538, 0xC539, 0xC53B, 0xC53D, 0xC544,
- 0xC545, 0xC548, 0xC549, 0xC54A, 0xC54C, 0xC54D, 0xC54E, 0xC553,
- 0xC554, 0xC555, 0xC557, 0xC558, 0xC559, 0xC55D, 0xC55E, 0xC560,
- 0xC561, 0xC564, 0xC568, 0xC570, 0xC571, 0xC573, 0xC574, 0xC575,
- 0xC57C, 0xC57D, 0xC580, 0xC584, 0xC587, 0xC58C, 0xC58D, 0xC58F,
- 0xC591, 0xC595, 0xC597, 0xC598, 0xC59C, 0xC5A0, 0xC5A9, 0xC5B4,
- 0xC5B5, 0xC5B8, 0xC5B9, 0xC5BB, 0xC5BC, 0xC5BD, 0xC5BE, 0xC5C4,
- 0xC5C5, 0xC5C6, 0xC5C7, 0xC5C8, 0xC5C9, 0xC5CA, 0xC5CC, 0xC5CE,
- 0xC5D0, 0xC5D1, 0xC5D4, 0xC5D8, 0xC5E0, 0xC5E1, 0xC5E3, 0xC5E5,
- 0xC5EC, 0xC5ED, 0xC5EE, 0xC5F0, 0xC5F4, 0xC5F6, 0xC5F7, 0xC5FC,
- 0xC5FD, 0xC5FE, 0xC5FF, 0xC600, 0xC601, 0xC605, 0xC606, 0xC607,
- 0xC608, 0xC60C, 0xC610, 0xC618, 0xC619, 0xC61B, 0xC61C, 0xC624,
- 0xC625, 0xC628, 0xC62C, 0xC62D, 0xC62E, 0xC630, 0xC633, 0xC634,
- 0xC635, 0xC637, 0xC639, 0xC63B, 0xC640, 0xC641, 0xC644, 0xC648,
- 0xC650, 0xC651, 0xC653, 0xC654, 0xC655, 0xC65C, 0xC65D, 0xC660,
- 0xC66C, 0xC66F, 0xC671, 0xC678, 0xC679, 0xC67C, 0xC680, 0xC688,
- 0xC689, 0xC68B, 0xC68D, 0xC694, 0xC695, 0xC698, 0xC69C, 0xC6A4,
- 0xC6A5, 0xC6A7, 0xC6A9, 0xC6B0, 0xC6B1, 0xC6B4, 0xC6B8, 0xC6B9,
- 0xC6BA, 0xC6C0, 0xC6C1, 0xC6C3, 0xC6C5, 0xC6CC, 0xC6CD, 0xC6D0,
- 0xC6D4, 0xC6DC, 0xC6DD, 0xC6E0, 0xC6E1, 0xC6E8, 0xC6E9, 0xC6EC,
- 0xC6F0, 0xC6F8, 0xC6F9, 0xC6FD, 0xC704, 0xC705, 0xC708, 0xC70C,
- 0xC714, 0xC715, 0xC717, 0xC719, 0xC720, 0xC721, 0xC724, 0xC728,
- 0xC730, 0xC731, 0xC733, 0xC735, 0xC737, 0xC73C, 0xC73D, 0xC740,
- 0xC744, 0xC74A, 0xC74C, 0xC74D, 0xC74F, 0xC751, 0xC752, 0xC753,
- 0xC754, 0xC755, 0xC756, 0xC757, 0xC758, 0xC75C, 0xC760, 0xC768,
- 0xC76B, 0xC774, 0xC775, 0xC778, 0xC77C, 0xC77D, 0xC77E, 0xC783,
- 0xC784, 0xC785, 0xC787, 0xC788, 0xC789, 0xC78A, 0xC78E, 0xC790,
- 0xC791, 0xC794, 0xC796, 0xC797, 0xC798, 0xC79A, 0xC7A0, 0xC7A1,
- 0xC7A3, 0xC7A4, 0xC7A5, 0xC7A6, 0xC7AC, 0xC7AD, 0xC7B0, 0xC7B4,
- 0xC7BC, 0xC7BD, 0xC7BF, 0xC7C0, 0xC7C1, 0xC7C8, 0xC7C9, 0xC7CC,
- 0xC7CE, 0xC7D0, 0xC7D8, 0xC7DD, 0xC7E4, 0xC7E8, 0xC7EC, 0xC800,
- 0xC801, 0xC804, 0xC808, 0xC80A, 0xC810, 0xC811, 0xC813, 0xC815,
- 0xC816, 0xC81C, 0xC81D, 0xC820, 0xC824, 0xC82C, 0xC82D, 0xC82F,
- 0xC831, 0xC838, 0xC83C, 0xC840, 0xC848, 0xC849, 0xC84C, 0xC84D,
- 0xC854, 0xC870, 0xC871, 0xC874, 0xC878, 0xC87A, 0xC880, 0xC881,
- 0xC883, 0xC885, 0xC886, 0xC887, 0xC88B, 0xC88C, 0xC88D, 0xC894,
- 0xC89D, 0xC89F, 0xC8A1, 0xC8A8, 0xC8BC, 0xC8BD, 0xC8C4, 0xC8C8,
- 0xC8CC, 0xC8D4, 0xC8D5, 0xC8D7, 0xC8D9, 0xC8E0, 0xC8E1, 0xC8E4,
- 0xC8F5, 0xC8FC, 0xC8FD, 0xC900, 0xC904, 0xC905, 0xC906, 0xC90C,
- 0xC90D, 0xC90F, 0xC911, 0xC918, 0xC92C, 0xC934, 0xC950, 0xC951,
- 0xC954, 0xC958, 0xC960, 0xC961, 0xC963, 0xC96C, 0xC970, 0xC974,
- 0xC97C, 0xC988, 0xC989, 0xC98C, 0xC990, 0xC998, 0xC999, 0xC99B,
- 0xC99D, 0xC9C0, 0xC9C1, 0xC9C4, 0xC9C7, 0xC9C8, 0xC9CA, 0xC9D0,
- 0xC9D1, 0xC9D3, 0xC9D5, 0xC9D6, 0xC9D9, 0xC9DA, 0xC9DC, 0xC9DD,
- 0xC9E0, 0xC9E2, 0xC9E4, 0xC9E7, 0xC9EC, 0xC9ED, 0xC9EF, 0xC9F0,
- 0xC9F1, 0xC9F8, 0xC9F9, 0xC9FC, 0xCA00, 0xCA08, 0xCA09, 0xCA0B,
- 0xCA0C, 0xCA0D, 0xCA14, 0xCA18, 0xCA29, 0xCA4C, 0xCA4D, 0xCA50,
- 0xCA54, 0xCA5C, 0xCA5D, 0xCA5F, 0xCA60, 0xCA61, 0xCA68, 0xCA7D,
- 0xCA84, 0xCA98, 0xCABC, 0xCABD, 0xCAC0, 0xCAC4, 0xCACC, 0xCACD,
- 0xCACF, 0xCAD1, 0xCAD3, 0xCAD8, 0xCAD9, 0xCAE0, 0xCAEC, 0xCAF4,
- 0xCB08, 0xCB10, 0xCB14, 0xCB18, 0xCB20, 0xCB21, 0xCB41, 0xCB48,
- 0xCB49, 0xCB4C, 0xCB50, 0xCB58, 0xCB59, 0xCB5D, 0xCB64, 0xCB78,
- 0xCB79, 0xCB9C, 0xCBB8, 0xCBD4, 0xCBE4, 0xCBE7, 0xCBE9, 0xCC0C,
- 0xCC0D, 0xCC10, 0xCC14, 0xCC1C, 0xCC1D, 0xCC21, 0xCC22, 0xCC27,
- 0xCC28, 0xCC29, 0xCC2C, 0xCC2E, 0xCC30, 0xCC38, 0xCC39, 0xCC3B,
- 0xCC3C, 0xCC3D, 0xCC3E, 0xCC44, 0xCC45, 0xCC48, 0xCC4C, 0xCC54,
- 0xCC55, 0xCC57, 0xCC58, 0xCC59, 0xCC60, 0xCC64, 0xCC66, 0xCC68,
- 0xCC70, 0xCC75, 0xCC98, 0xCC99, 0xCC9C, 0xCCA0, 0xCCA8, 0xCCA9,
- 0xCCAB, 0xCCAC, 0xCCAD, 0xCCB4, 0xCCB5, 0xCCB8, 0xCCBC, 0xCCC4,
- 0xCCC5, 0xCCC7, 0xCCC9, 0xCCD0, 0xCCD4, 0xCCE4, 0xCCEC, 0xCCF0,
- 0xCD01, 0xCD08, 0xCD09, 0xCD0C, 0xCD10, 0xCD18, 0xCD19, 0xCD1B,
- 0xCD1D, 0xCD24, 0xCD28, 0xCD2C, 0xCD39, 0xCD5C, 0xCD60, 0xCD64,
- 0xCD6C, 0xCD6D, 0xCD6F, 0xCD71, 0xCD78, 0xCD88, 0xCD94, 0xCD95,
- 0xCD98, 0xCD9C, 0xCDA4, 0xCDA5, 0xCDA7, 0xCDA9, 0xCDB0, 0xCDC4,
- 0xCDCC, 0xCDD0, 0xCDE8, 0xCDEC, 0xCDF0, 0xCDF8, 0xCDF9, 0xCDFB,
- 0xCDFD, 0xCE04, 0xCE08, 0xCE0C, 0xCE14, 0xCE19, 0xCE20, 0xCE21,
- 0xCE24, 0xCE28, 0xCE30, 0xCE31, 0xCE33, 0xCE35, 0xCE58, 0xCE59,
- 0xCE5C, 0xCE5F, 0xCE60, 0xCE61, 0xCE68, 0xCE69, 0xCE6B, 0xCE6D,
- 0xCE74, 0xCE75, 0xCE78, 0xCE7C, 0xCE84, 0xCE85, 0xCE87, 0xCE89,
- 0xCE90, 0xCE91, 0xCE94, 0xCE98, 0xCEA0, 0xCEA1, 0xCEA3, 0xCEA4,
- 0xCEA5, 0xCEAC, 0xCEAD, 0xCEC1, 0xCEE4, 0xCEE5, 0xCEE8, 0xCEEB,
- 0xCEEC, 0xCEF4, 0xCEF5, 0xCEF7, 0xCEF8, 0xCEF9, 0xCF00, 0xCF01,
- 0xCF04, 0xCF08, 0xCF10, 0xCF11, 0xCF13, 0xCF15, 0xCF1C, 0xCF20,
- 0xCF24, 0xCF2C, 0xCF2D, 0xCF2F, 0xCF30, 0xCF31, 0xCF38, 0xCF54,
- 0xCF55, 0xCF58, 0xCF5C, 0xCF64, 0xCF65, 0xCF67, 0xCF69, 0xCF70,
- 0xCF71, 0xCF74, 0xCF78, 0xCF80, 0xCF85, 0xCF8C, 0xCFA1, 0xCFA8,
- 0xCFB0, 0xCFC4, 0xCFE0, 0xCFE1, 0xCFE4, 0xCFE8, 0xCFF0, 0xCFF1,
- 0xCFF3, 0xCFF5, 0xCFFC, 0xD000, 0xD004, 0xD011, 0xD018, 0xD02D,
- 0xD034, 0xD035, 0xD038, 0xD03C, 0xD044, 0xD045, 0xD047, 0xD049,
- 0xD050, 0xD054, 0xD058, 0xD060, 0xD06C, 0xD06D, 0xD070, 0xD074,
- 0xD07C, 0xD07D, 0xD081, 0xD0A4, 0xD0A5, 0xD0A8, 0xD0AC, 0xD0B4,
- 0xD0B5, 0xD0B7, 0xD0B9, 0xD0C0, 0xD0C1, 0xD0C4, 0xD0C8, 0xD0C9,
- 0xD0D0, 0xD0D1, 0xD0D3, 0xD0D4, 0xD0D5, 0xD0DC, 0xD0DD, 0xD0E0,
- 0xD0E4, 0xD0EC, 0xD0ED, 0xD0EF, 0xD0F0, 0xD0F1, 0xD0F8, 0xD10D,
- 0xD130, 0xD131, 0xD134, 0xD138, 0xD13A, 0xD140, 0xD141, 0xD143,
- 0xD144, 0xD145, 0xD14C, 0xD14D, 0xD150, 0xD154, 0xD15C, 0xD15D,
- 0xD15F, 0xD161, 0xD168, 0xD16C, 0xD17C, 0xD184, 0xD188, 0xD1A0,
- 0xD1A1, 0xD1A4, 0xD1A8, 0xD1B0, 0xD1B1, 0xD1B3, 0xD1B5, 0xD1BA,
- 0xD1BC, 0xD1C0, 0xD1D8, 0xD1F4, 0xD1F8, 0xD207, 0xD209, 0xD210,
- 0xD22C, 0xD22D, 0xD230, 0xD234, 0xD23C, 0xD23D, 0xD23F, 0xD241,
- 0xD248, 0xD25C, 0xD264, 0xD280, 0xD281, 0xD284, 0xD288, 0xD290,
- 0xD291, 0xD295, 0xD29C, 0xD2A0, 0xD2A4, 0xD2AC, 0xD2B1, 0xD2B8,
- 0xD2B9, 0xD2BC, 0xD2BF, 0xD2C0, 0xD2C2, 0xD2C8, 0xD2C9, 0xD2CB,
- 0xD2D4, 0xD2D8, 0xD2DC, 0xD2E4, 0xD2E5, 0xD2F0, 0xD2F1, 0xD2F4,
- 0xD2F8, 0xD300, 0xD301, 0xD303, 0xD305, 0xD30C, 0xD30D, 0xD30E,
- 0xD310, 0xD314, 0xD316, 0xD31C, 0xD31D, 0xD31F, 0xD320, 0xD321,
- 0xD325, 0xD328, 0xD329, 0xD32C, 0xD330, 0xD338, 0xD339, 0xD33B,
- 0xD33C, 0xD33D, 0xD344, 0xD345, 0xD37C, 0xD37D, 0xD380, 0xD384,
- 0xD38C, 0xD38D, 0xD38F, 0xD390, 0xD391, 0xD398, 0xD399, 0xD39C,
- 0xD3A0, 0xD3A8, 0xD3A9, 0xD3AB, 0xD3AD, 0xD3B4, 0xD3B8, 0xD3BC,
- 0xD3C4, 0xD3C5, 0xD3C8, 0xD3C9, 0xD3D0, 0xD3D8, 0xD3E1, 0xD3E3,
- 0xD3EC, 0xD3ED, 0xD3F0, 0xD3F4, 0xD3FC, 0xD3FD, 0xD3FF, 0xD401,
- 0xD408, 0xD41D, 0xD440, 0xD444, 0xD45C, 0xD460, 0xD464, 0xD46D,
- 0xD46F, 0xD478, 0xD479, 0xD47C, 0xD47F, 0xD480, 0xD482, 0xD488,
- 0xD489, 0xD48B, 0xD48D, 0xD494, 0xD4A9, 0xD4CC, 0xD4D0, 0xD4D4,
- 0xD4DC, 0xD4DF, 0xD4E8, 0xD4EC, 0xD4F0, 0xD4F8, 0xD4FB, 0xD4FD,
- 0xD504, 0xD508, 0xD50C, 0xD514, 0xD515, 0xD517, 0xD53C, 0xD53D,
- 0xD540, 0xD544, 0xD54C, 0xD54D, 0xD54F, 0xD551, 0xD558, 0xD559,
- 0xD55C, 0xD560, 0xD565, 0xD568, 0xD569, 0xD56B, 0xD56D, 0xD574,
- 0xD575, 0xD578, 0xD57C, 0xD584, 0xD585, 0xD587, 0xD588, 0xD589,
- 0xD590, 0xD5A5, 0xD5C8, 0xD5C9, 0xD5CC, 0xD5D0, 0xD5D2, 0xD5D8,
- 0xD5D9, 0xD5DB, 0xD5DD, 0xD5E4, 0xD5E5, 0xD5E8, 0xD5EC, 0xD5F4,
- 0xD5F5, 0xD5F7, 0xD5F9, 0xD600, 0xD601, 0xD604, 0xD608, 0xD610,
- 0xD611, 0xD613, 0xD614, 0xD615, 0xD61C, 0xD620, 0xD624, 0xD62D,
- 0xD638, 0xD639, 0xD63C, 0xD640, 0xD645, 0xD648, 0xD649, 0xD64B,
- 0xD64D, 0xD651, 0xD654, 0xD655, 0xD658, 0xD65C, 0xD667, 0xD669,
- 0xD670, 0xD671, 0xD674, 0xD683, 0xD685, 0xD68C, 0xD68D, 0xD690,
- 0xD694, 0xD69D, 0xD69F, 0xD6A1, 0xD6A8, 0xD6AC, 0xD6B0, 0xD6B9,
- 0xD6BB, 0xD6C4, 0xD6C5, 0xD6C8, 0xD6CC, 0xD6D1, 0xD6D4, 0xD6D7,
- 0xD6D9, 0xD6E0, 0xD6E4, 0xD6E8, 0xD6F0, 0xD6F5, 0xD6FC, 0xD6FD,
- 0xD700, 0xD704, 0xD711, 0xD718, 0xD719, 0xD71C, 0xD720, 0xD728,
- 0xD729, 0xD72B, 0xD72D, 0xD734, 0xD735, 0xD738, 0xD73C, 0xD744,
- 0xD747, 0xD749, 0xD750, 0xD751, 0xD754, 0xD756, 0xD757, 0xD758,
- 0xD759, 0xD760, 0xD761, 0xD763, 0xD765, 0xD769, 0xD76C, 0xD770,
- 0xD774, 0xD77C, 0xD77D, 0xD781, 0xD788, 0xD789, 0xD78C, 0xD790,
- 0xD798, 0xD799, 0xD79B, 0xD79D, 0x4F3D, 0x4F73, 0x5047, 0x50F9,
- 0x52A0, 0x53EF, 0x5475, 0x54E5, 0x5609, 0x5AC1, 0x5BB6, 0x6687,
- 0x67B6, 0x67B7, 0x67EF, 0x6B4C, 0x73C2, 0x75C2, 0x7A3C, 0x82DB,
- 0x8304, 0x8857, 0x8888, 0x8A36, 0x8CC8, 0x8DCF, 0x8EFB, 0x8FE6,
- 0x99D5, 0x523B, 0x5374, 0x5404, 0x606A, 0x6164, 0x6BBC, 0x73CF,
- 0x811A, 0x89BA, 0x89D2, 0x95A3, 0x4F83, 0x520A, 0x58BE, 0x5978,
- 0x59E6, 0x5E72, 0x5E79, 0x61C7, 0x63C0, 0x6746, 0x67EC, 0x687F,
- 0x6F97, 0x764E, 0x770B, 0x78F5, 0x7A08, 0x7AFF, 0x7C21, 0x809D,
- 0x826E, 0x8271, 0x8AEB, 0x9593, 0x4E6B, 0x559D, 0x66F7, 0x6E34,
- 0x78A3, 0x7AED, 0x845B, 0x8910, 0x874E, 0x97A8, 0x52D8, 0x574E,
- 0x582A, 0x5D4C, 0x611F, 0x61BE, 0x6221, 0x6562, 0x67D1, 0x6A44,
- 0x6E1B, 0x7518, 0x75B3, 0x76E3, 0x77B0, 0x7D3A, 0x90AF, 0x9451,
- 0x9452, 0x9F95, 0x5323, 0x5CAC, 0x7532, 0x80DB, 0x9240, 0x9598,
- 0x525B, 0x5808, 0x59DC, 0x5CA1, 0x5D17, 0x5EB7, 0x5F3A, 0x5F4A,
- 0x6177, 0x6C5F, 0x757A, 0x7586, 0x7CE0, 0x7D73, 0x7DB1, 0x7F8C,
- 0x8154, 0x8221, 0x8591, 0x8941, 0x8B1B, 0x92FC, 0x964D, 0x9C47,
- 0x4ECB, 0x4EF7, 0x500B, 0x51F1, 0x584F, 0x6137, 0x613E, 0x6168,
- 0x6539, 0x69EA, 0x6F11, 0x75A5, 0x7686, 0x76D6, 0x7B87, 0x82A5,
- 0x84CB, 0x93A7, 0x958B, 0x5580, 0x5BA2, 0x5751, 0x7CB3, 0x7FB9,
- 0x91B5, 0x5028, 0x53BB, 0x5C45, 0x5DE8, 0x62D2, 0x636E, 0x64DA,
- 0x64E7, 0x6E20, 0x70AC, 0x795B, 0x8DDD, 0x8E1E, 0x907D, 0x9245,
- 0x92F8, 0x4E7E, 0x4EF6, 0x5065, 0x5DFE, 0x5EFA, 0x6106, 0x6957,
- 0x8171, 0x8654, 0x8E47, 0x9375, 0x9A2B, 0x4E5E, 0x5091, 0x6770,
- 0x6840, 0x5109, 0x528D, 0x5292, 0x6AA2, 0x77BC, 0x9210, 0x9ED4,
- 0x52AB, 0x602F, 0x8FF2, 0x5048, 0x61A9, 0x63ED, 0x64CA, 0x683C,
- 0x6A84, 0x6FC0, 0x8188, 0x89A1, 0x9694, 0x5805, 0x727D, 0x72AC,
- 0x7504, 0x7D79, 0x7E6D, 0x80A9, 0x898B, 0x8B74, 0x9063, 0x9D51,
- 0x6289, 0x6C7A, 0x6F54, 0x7D50, 0x7F3A, 0x8A23, 0x517C, 0x614A,
- 0x7B9D, 0x8B19, 0x9257, 0x938C, 0x4EAC, 0x4FD3, 0x501E, 0x50BE,
- 0x5106, 0x52C1, 0x52CD, 0x537F, 0x5770, 0x5883, 0x5E9A, 0x5F91,
- 0x6176, 0x61AC, 0x64CE, 0x656C, 0x666F, 0x66BB, 0x66F4, 0x6897,
- 0x6D87, 0x7085, 0x70F1, 0x749F, 0x74A5, 0x74CA, 0x75D9, 0x786C,
- 0x78EC, 0x7ADF, 0x7AF6, 0x7D45, 0x7D93, 0x8015, 0x803F, 0x811B,
- 0x8396, 0x8B66, 0x8F15, 0x9015, 0x93E1, 0x9803, 0x9838, 0x9A5A,
- 0x9BE8, 0x4FC2, 0x5553, 0x583A, 0x5951, 0x5B63, 0x5C46, 0x60B8,
- 0x6212, 0x6842, 0x68B0, 0x68E8, 0x6EAA, 0x754C, 0x7678, 0x78CE,
- 0x7A3D, 0x7CFB, 0x7E6B, 0x7E7C, 0x8A08, 0x8AA1, 0x8C3F, 0x968E,
- 0x9DC4, 0x53E4, 0x53E9, 0x544A, 0x5471, 0x56FA, 0x59D1, 0x5B64,
- 0x5C3B, 0x5EAB, 0x62F7, 0x6537, 0x6545, 0x6572, 0x66A0, 0x67AF,
- 0x69C1, 0x6CBD, 0x75FC, 0x7690, 0x777E, 0x7A3F, 0x7F94, 0x8003,
- 0x80A1, 0x818F, 0x82E6, 0x82FD, 0x83F0, 0x85C1, 0x8831, 0x88B4,
- 0x8AA5, 0x8F9C, 0x932E, 0x96C7, 0x9867, 0x9AD8, 0x9F13, 0x54ED,
- 0x659B, 0x66F2, 0x688F, 0x7A40, 0x8C37, 0x9D60, 0x56F0, 0x5764,
- 0x5D11, 0x6606, 0x68B1, 0x68CD, 0x6EFE, 0x7428, 0x889E, 0x9BE4,
- 0x6C68, 0x9AA8, 0x4F9B, 0x516C, 0x5171, 0x529F, 0x5B54, 0x5DE5,
- 0x6050, 0x606D, 0x62F1, 0x63A7, 0x653B, 0x73D9, 0x7A7A, 0x86A3,
- 0x8CA2, 0x978F, 0x4E32, 0x5BE1, 0x6208, 0x679C, 0x74DC, 0x79D1,
- 0x83D3, 0x8A87, 0x8AB2, 0x8DE8, 0x904E, 0x934B, 0x9846, 0x5ED3,
- 0x69E8, 0x85FF, 0x90ED, 0x51A0, 0x5B98, 0x5BEC, 0x6163, 0x68FA,
- 0x6B3E, 0x704C, 0x742F, 0x74D8, 0x7BA1, 0x7F50, 0x83C5, 0x89C0,
- 0x8CAB, 0x95DC, 0x9928, 0x522E, 0x605D, 0x62EC, 0x9002, 0x4F8A,
- 0x5149, 0x5321, 0x58D9, 0x5EE3, 0x66E0, 0x6D38, 0x709A, 0x72C2,
- 0x73D6, 0x7B50, 0x80F1, 0x945B, 0x5366, 0x639B, 0x7F6B, 0x4E56,
- 0x5080, 0x584A, 0x58DE, 0x602A, 0x6127, 0x62D0, 0x69D0, 0x9B41,
- 0x5B8F, 0x7D18, 0x80B1, 0x8F5F, 0x4EA4, 0x50D1, 0x54AC, 0x55AC,
- 0x5B0C, 0x5DA0, 0x5DE7, 0x652A, 0x654E, 0x6821, 0x6A4B, 0x72E1,
- 0x768E, 0x77EF, 0x7D5E, 0x7FF9, 0x81A0, 0x854E, 0x86DF, 0x8F03,
- 0x8F4E, 0x90CA, 0x9903, 0x9A55, 0x9BAB, 0x4E18, 0x4E45, 0x4E5D,
- 0x4EC7, 0x4FF1, 0x5177, 0x52FE, 0x5340, 0x53E3, 0x53E5, 0x548E,
- 0x5614, 0x5775, 0x57A2, 0x5BC7, 0x5D87, 0x5ED0, 0x61FC, 0x62D8,
- 0x6551, 0x67B8, 0x67E9, 0x69CB, 0x6B50, 0x6BC6, 0x6BEC, 0x6C42,
- 0x6E9D, 0x7078, 0x72D7, 0x7396, 0x7403, 0x77BF, 0x77E9, 0x7A76,
- 0x7D7F, 0x8009, 0x81FC, 0x8205, 0x820A, 0x82DF, 0x8862, 0x8B33,
- 0x8CFC, 0x8EC0, 0x9011, 0x90B1, 0x9264, 0x92B6, 0x99D2, 0x9A45,
- 0x9CE9, 0x9DD7, 0x9F9C, 0x570B, 0x5C40, 0x83CA, 0x97A0, 0x97AB,
- 0x9EB4, 0x541B, 0x7A98, 0x7FA4, 0x88D9, 0x8ECD, 0x90E1, 0x5800,
- 0x5C48, 0x6398, 0x7A9F, 0x5BAE, 0x5F13, 0x7A79, 0x7AAE, 0x828E,
- 0x8EAC, 0x5026, 0x5238, 0x52F8, 0x5377, 0x5708, 0x62F3, 0x6372,
- 0x6B0A, 0x6DC3, 0x7737, 0x53A5, 0x7357, 0x8568, 0x8E76, 0x95D5,
- 0x673A, 0x6AC3, 0x6F70, 0x8A6D, 0x8ECC, 0x994B, 0x6677, 0x6B78,
- 0x8CB4, 0x9B3C, 0x53EB, 0x572D, 0x594E, 0x63C6, 0x69FB, 0x73EA,
- 0x7845, 0x7ABA, 0x7AC5, 0x7CFE, 0x8475, 0x898F, 0x8D73, 0x9035,
- 0x95A8, 0x52FB, 0x5747, 0x7547, 0x7B60, 0x83CC, 0x921E, 0x6A58,
- 0x514B, 0x524B, 0x5287, 0x621F, 0x68D8, 0x6975, 0x9699, 0x50C5,
- 0x52A4, 0x52E4, 0x61C3, 0x65A4, 0x6839, 0x69FF, 0x747E, 0x7B4B,
- 0x82B9, 0x83EB, 0x89B2, 0x8B39, 0x8FD1, 0x9949, 0x4ECA, 0x5997,
- 0x64D2, 0x6611, 0x6A8E, 0x7434, 0x7981, 0x79BD, 0x82A9, 0x887E,
- 0x887F, 0x895F, 0x9326, 0x4F0B, 0x53CA, 0x6025, 0x6271, 0x6C72,
- 0x7D1A, 0x7D66, 0x4E98, 0x5162, 0x77DC, 0x80AF, 0x4F01, 0x4F0E,
- 0x5176, 0x5180, 0x55DC, 0x5668, 0x573B, 0x57FA, 0x57FC, 0x5914,
- 0x5947, 0x5993, 0x5BC4, 0x5C90, 0x5D0E, 0x5DF1, 0x5E7E, 0x5FCC,
- 0x6280, 0x65D7, 0x65E3, 0x671E, 0x671F, 0x675E, 0x68CB, 0x68C4,
- 0x6A5F, 0x6B3A, 0x6C23, 0x6C7D, 0x6C82, 0x6DC7, 0x7398, 0x7426,
- 0x742A, 0x7482, 0x74A3, 0x7578, 0x757F, 0x7881, 0x78EF, 0x7941,
- 0x7947, 0x7948, 0x797A, 0x7B95, 0x7D00, 0x7DBA, 0x7F88, 0x8006,
- 0x802D, 0x808C, 0x8A18, 0x8B4F, 0x8C48, 0x8D77, 0x9321, 0x9324,
- 0x98E2, 0x9951, 0x9A0E, 0x9A0F, 0x9A65, 0x9E92, 0x7DCA, 0x4F76,
- 0x5409, 0x62EE, 0x6854, 0x91D1, 0x55AB, 0x513A, 0x5A1C, 0x61E6,
- 0x62CF, 0x62FF, 0x90A3, 0x8AFE, 0x6696, 0x7156, 0x96E3, 0x634F,
- 0x637A, 0x5357, 0x678F, 0x6960, 0x6E73, 0x7537, 0x7D0D, 0x8872,
- 0x56CA, 0x5A18, 0x4E43, 0x5167, 0x5948, 0x67F0, 0x8010, 0x5973,
- 0x5E74, 0x649A, 0x79CA, 0x5FF5, 0x606C, 0x62C8, 0x637B, 0x5BE7,
- 0x5BD7, 0x52AA, 0x5974, 0x5F29, 0x6012, 0x7459, 0x99D1, 0x6FC3,
- 0x81BF, 0x8FB2, 0x60F1, 0x8166, 0x5C3F, 0x5AE9, 0x8A25, 0x677B,
- 0x7D10, 0x80FD, 0x5C3C, 0x6CE5, 0x533F, 0x6EBA, 0x591A, 0x8336,
- 0x4E39, 0x4EB6, 0x4F46, 0x55AE, 0x5718, 0x58C7, 0x5F56, 0x65B7,
- 0x65E6, 0x6A80, 0x6BB5, 0x6E4D, 0x77ED, 0x7AEF, 0x7C1E, 0x7DDE,
- 0x86CB, 0x8892, 0x9132, 0x935B, 0x64BB, 0x6FBE, 0x737A, 0x75B8,
- 0x9054, 0x5556, 0x574D, 0x61BA, 0x64D4, 0x66C7, 0x6DE1, 0x6E5B,
- 0x6F6D, 0x6FB9, 0x75F0, 0x8043, 0x81BD, 0x8541, 0x8983, 0x8AC7,
- 0x8B5A, 0x931F, 0x6C93, 0x7553, 0x7B54, 0x8E0F, 0x905D, 0x5510,
- 0x5802, 0x5858, 0x5E62, 0x6207, 0x649E, 0x68E0, 0x7576, 0x7CD6,
- 0x87B3, 0x9EE8, 0x4EE3, 0x5788, 0x576E, 0x5927, 0x5C0D, 0x5CB1,
- 0x5E36, 0x5F85, 0x6234, 0x64E1, 0x73B3, 0x81FA, 0x888B, 0x8CB8,
- 0x968A, 0x9EDB, 0x5B85, 0x5FB7, 0x60B3, 0x5012, 0x5200, 0x5230,
- 0x5716, 0x5835, 0x5857, 0x5C0E, 0x5C60, 0x5CF6, 0x5D8B, 0x5EA6,
- 0x5F92, 0x60BC, 0x6311, 0x6389, 0x6417, 0x6843, 0x68F9, 0x6AC2,
- 0x6DD8, 0x6E21, 0x6ED4, 0x6FE4, 0x71FE, 0x76DC, 0x7779, 0x79B1,
- 0x7A3B, 0x8404, 0x89A9, 0x8CED, 0x8DF3, 0x8E48, 0x9003, 0x9014,
- 0x9053, 0x90FD, 0x934D, 0x9676, 0x97DC, 0x6BD2, 0x7006, 0x7258,
- 0x72A2, 0x7368, 0x7763, 0x79BF, 0x7BE4, 0x7E9B, 0x8B80, 0x58A9,
- 0x60C7, 0x6566, 0x65FD, 0x66BE, 0x6C8C, 0x711E, 0x71C9, 0x8C5A,
- 0x9813, 0x4E6D, 0x7A81, 0x4EDD, 0x51AC, 0x51CD, 0x52D5, 0x540C,
- 0x61A7, 0x6771, 0x6850, 0x68DF, 0x6D1E, 0x6F7C, 0x75BC, 0x77B3,
- 0x7AE5, 0x80F4, 0x8463, 0x9285, 0x515C, 0x6597, 0x675C, 0x6793,
- 0x75D8, 0x7AC7, 0x8373, 0x8C46, 0x9017, 0x982D, 0x5C6F, 0x81C0,
- 0x829A, 0x9041, 0x906F, 0x920D, 0x5F97, 0x5D9D, 0x6A59, 0x71C8,
- 0x767B, 0x7B49, 0x85E4, 0x8B04, 0x9127, 0x9A30, 0x5587, 0x61F6,
- 0x7669, 0x7F85, 0x863F, 0x87BA, 0x88F8, 0x908F, 0x6D1B, 0x70D9,
- 0x73DE, 0x7D61, 0x843D, 0x916A, 0x99F1, 0x4E82, 0x5375, 0x6B04,
- 0x6B12, 0x703E, 0x721B, 0x862D, 0x9E1E, 0x524C, 0x8FA3, 0x5D50,
- 0x64E5, 0x652C, 0x6B16, 0x6FEB, 0x7C43, 0x7E9C, 0x85CD, 0x8964,
- 0x89BD, 0x62C9, 0x81D8, 0x881F, 0x5ECA, 0x6717, 0x6D6A, 0x72FC,
- 0x7405, 0x746F, 0x8782, 0x90DE, 0x4F86, 0x5D0D, 0x5FA0, 0x840A,
- 0x51B7, 0x63A0, 0x7565, 0x4EAE, 0x5006, 0x5169, 0x51C9, 0x6881,
- 0x6A11, 0x7CAE, 0x7CB1, 0x7CE7, 0x826F, 0x8AD2, 0x8F1B, 0x91CF,
- 0x4FB6, 0x5137, 0x52F5, 0x5442, 0x5EEC, 0x616E, 0x623E, 0x65C5,
- 0x6ADA, 0x6FFE, 0x792A, 0x85DC, 0x8823, 0x95AD, 0x9A62, 0x9A6A,
- 0x9E97, 0x9ECE, 0x529B, 0x66C6, 0x6B77, 0x701D, 0x792B, 0x8F62,
- 0x9742, 0x6190, 0x6200, 0x6523, 0x6F23, 0x7149, 0x7489, 0x7DF4,
- 0x806F, 0x84EE, 0x8F26, 0x9023, 0x934A, 0x51BD, 0x5217, 0x52A3,
- 0x6D0C, 0x70C8, 0x88C2, 0x5EC9, 0x6582, 0x6BAE, 0x6FC2, 0x7C3E,
- 0x7375, 0x4EE4, 0x4F36, 0x56F9, 0x5CBA, 0x5DBA, 0x601C, 0x73B2,
- 0x7B2D, 0x7F9A, 0x7FCE, 0x8046, 0x901E, 0x9234, 0x96F6, 0x9748,
- 0x9818, 0x9F61, 0x4F8B, 0x6FA7, 0x79AE, 0x91B4, 0x96B7, 0x52DE,
- 0x6488, 0x64C4, 0x6AD3, 0x6F5E, 0x7018, 0x7210, 0x76E7, 0x8001,
- 0x8606, 0x865C, 0x8DEF, 0x8F05, 0x9732, 0x9B6F, 0x9DFA, 0x9E75,
- 0x788C, 0x797F, 0x7DA0, 0x83C9, 0x9304, 0x9E7F, 0x9E93, 0x8AD6,
- 0x58DF, 0x5F04, 0x6727, 0x7027, 0x74CF, 0x7C60, 0x807E, 0x5121,
- 0x7028, 0x7262, 0x78CA, 0x8CC2, 0x8CDA, 0x8CF4, 0x96F7, 0x4E86,
- 0x50DA, 0x5BEE, 0x5ED6, 0x6599, 0x71CE, 0x7642, 0x77AD, 0x804A,
- 0x84FC, 0x907C, 0x9B27, 0x9F8D, 0x58D8, 0x5A41, 0x5C62, 0x6A13,
- 0x6DDA, 0x6F0F, 0x763B, 0x7D2F, 0x7E37, 0x851E, 0x8938, 0x93E4,
- 0x964B, 0x5289, 0x65D2, 0x67F3, 0x69B4, 0x6D41, 0x6E9C, 0x700F,
- 0x7409, 0x7460, 0x7559, 0x7624, 0x786B, 0x8B2C, 0x985E, 0x516D,
- 0x622E, 0x9678, 0x4F96, 0x502B, 0x5D19, 0x6DEA, 0x7DB8, 0x8F2A,
- 0x5F8B, 0x6144, 0x6817, 0x9686, 0x52D2, 0x808B, 0x51DC, 0x51CC,
- 0x695E, 0x7A1C, 0x7DBE, 0x83F1, 0x9675, 0x4FDA, 0x5229, 0x5398,
- 0x540F, 0x550E, 0x5C65, 0x60A7, 0x674E, 0x68A8, 0x6D6C, 0x7281,
- 0x72F8, 0x7406, 0x7483, 0x75E2, 0x7C6C, 0x7F79, 0x7FB8, 0x8389,
- 0x88CF, 0x88E1, 0x91CC, 0x91D0, 0x96E2, 0x9BC9, 0x541D, 0x6F7E,
- 0x71D0, 0x7498, 0x85FA, 0x8EAA, 0x96A3, 0x9C57, 0x9E9F, 0x6797,
- 0x6DCB, 0x7433, 0x81E8, 0x9716, 0x782C, 0x7ACB, 0x7B20, 0x7C92,
- 0x6469, 0x746A, 0x75F2, 0x78BC, 0x78E8, 0x99AC, 0x9B54, 0x9EBB,
- 0x5BDE, 0x5E55, 0x6F20, 0x819C, 0x83AB, 0x9088, 0x4E07, 0x534D,
- 0x5A29, 0x5DD2, 0x5F4E, 0x6162, 0x633D, 0x6669, 0x66FC, 0x6EFF,
- 0x6F2B, 0x7063, 0x779E, 0x842C, 0x8513, 0x883B, 0x8F13, 0x9945,
- 0x9C3B, 0x551C, 0x62B9, 0x672B, 0x6CAB, 0x8309, 0x896A, 0x977A,
- 0x4EA1, 0x5984, 0x5FD8, 0x5FD9, 0x671B, 0x7DB2, 0x7F54, 0x8292,
- 0x832B, 0x83BD, 0x8F1E, 0x9099, 0x57CB, 0x59B9, 0x5A92, 0x5BD0,
- 0x6627, 0x679A, 0x6885, 0x6BCF, 0x7164, 0x7F75, 0x8CB7, 0x8CE3,
- 0x9081, 0x9B45, 0x8108, 0x8C8A, 0x964C, 0x9A40, 0x9EA5, 0x5B5F,
- 0x6C13, 0x731B, 0x76F2, 0x76DF, 0x840C, 0x51AA, 0x8993, 0x514D,
- 0x5195, 0x52C9, 0x68C9, 0x6C94, 0x7704, 0x7720, 0x7DBF, 0x7DEC,
- 0x9762, 0x9EB5, 0x6EC5, 0x8511, 0x51A5, 0x540D, 0x547D, 0x660E,
- 0x669D, 0x6927, 0x6E9F, 0x76BF, 0x7791, 0x8317, 0x84C2, 0x879F,
- 0x9169, 0x9298, 0x9CF4, 0x8882, 0x4FAE, 0x5192, 0x52DF, 0x59C6,
- 0x5E3D, 0x6155, 0x6478, 0x6479, 0x66AE, 0x67D0, 0x6A21, 0x6BCD,
- 0x6BDB, 0x725F, 0x7261, 0x7441, 0x7738, 0x77DB, 0x8017, 0x82BC,
- 0x8305, 0x8B00, 0x8B28, 0x8C8C, 0x6728, 0x6C90, 0x7267, 0x76EE,
- 0x7766, 0x7A46, 0x9DA9, 0x6B7F, 0x6C92, 0x5922, 0x6726, 0x8499,
- 0x536F, 0x5893, 0x5999, 0x5EDF, 0x63CF, 0x6634, 0x6773, 0x6E3A,
- 0x732B, 0x7AD7, 0x82D7, 0x9328, 0x52D9, 0x5DEB, 0x61AE, 0x61CB,
- 0x620A, 0x62C7, 0x64AB, 0x65E0, 0x6959, 0x6B66, 0x6BCB, 0x7121,
- 0x73F7, 0x755D, 0x7E46, 0x821E, 0x8302, 0x856A, 0x8AA3, 0x8CBF,
- 0x9727, 0x9D61, 0x58A8, 0x9ED8, 0x5011, 0x520E, 0x543B, 0x554F,
- 0x6587, 0x6C76, 0x7D0A, 0x7D0B, 0x805E, 0x868A, 0x9580, 0x96EF,
- 0x52FF, 0x6C95, 0x7269, 0x5473, 0x5A9A, 0x5C3E, 0x5D4B, 0x5F4C,
- 0x5FAE, 0x672A, 0x68B6, 0x6963, 0x6E3C, 0x6E44, 0x7709, 0x7C73,
- 0x7F8E, 0x8587, 0x8B0E, 0x8FF7, 0x9761, 0x9EF4, 0x5CB7, 0x60B6,
- 0x610D, 0x61AB, 0x654F, 0x65FB, 0x65FC, 0x6C11, 0x6CEF, 0x739F,
- 0x73C9, 0x7DE1, 0x9594, 0x5BC6, 0x871C, 0x8B10, 0x525D, 0x535A,
- 0x62CD, 0x640F, 0x64B2, 0x6734, 0x6A38, 0x6CCA, 0x73C0, 0x749E,
- 0x7B94, 0x7C95, 0x7E1B, 0x818A, 0x8236, 0x8584, 0x8FEB, 0x96F9,
- 0x99C1, 0x4F34, 0x534A, 0x53CD, 0x53DB, 0x62CC, 0x642C, 0x6500,
- 0x6591, 0x69C3, 0x6CEE, 0x6F58, 0x73ED, 0x7554, 0x7622, 0x76E4,
- 0x76FC, 0x78D0, 0x78FB, 0x792C, 0x7D46, 0x822C, 0x87E0, 0x8FD4,
- 0x9812, 0x98EF, 0x52C3, 0x62D4, 0x64A5, 0x6E24, 0x6F51, 0x767C,
- 0x8DCB, 0x91B1, 0x9262, 0x9AEE, 0x9B43, 0x5023, 0x508D, 0x574A,
- 0x59A8, 0x5C28, 0x5E47, 0x5F77, 0x623F, 0x653E, 0x65B9, 0x65C1,
- 0x6609, 0x678B, 0x699C, 0x6EC2, 0x78C5, 0x7D21, 0x80AA, 0x8180,
- 0x822B, 0x82B3, 0x84A1, 0x868C, 0x8A2A, 0x8B17, 0x90A6, 0x9632,
- 0x9F90, 0x500D, 0x4FF3, 0x57F9, 0x5F98, 0x62DC, 0x6392, 0x676F,
- 0x6E43, 0x7119, 0x76C3, 0x80CC, 0x80DA, 0x88F4, 0x88F5, 0x8919,
- 0x8CE0, 0x8F29, 0x914D, 0x966A, 0x4F2F, 0x4F70, 0x5E1B, 0x67CF,
- 0x6822, 0x767D, 0x767E, 0x9B44, 0x5E61, 0x6A0A, 0x7169, 0x71D4,
- 0x756A, 0x7E41, 0x8543, 0x85E9, 0x98DC, 0x4F10, 0x7B4F, 0x7F70,
- 0x95A5, 0x51E1, 0x5E06, 0x68B5, 0x6C3E, 0x6C4E, 0x6CDB, 0x72AF,
- 0x7BC4, 0x8303, 0x6CD5, 0x743A, 0x50FB, 0x5288, 0x58C1, 0x64D8,
- 0x6A97, 0x74A7, 0x7656, 0x78A7, 0x8617, 0x95E2, 0x9739, 0x535E,
- 0x5F01, 0x8B8A, 0x8FA8, 0x8FAF, 0x908A, 0x5225, 0x77A5, 0x9C49,
- 0x9F08, 0x4E19, 0x5002, 0x5175, 0x5C5B, 0x5E77, 0x661E, 0x663A,
- 0x67C4, 0x68C5, 0x70B3, 0x7501, 0x75C5, 0x79C9, 0x7ADD, 0x8F27,
- 0x9920, 0x9A08, 0x4FDD, 0x5821, 0x5831, 0x5BF6, 0x666E, 0x6B65,
- 0x6D11, 0x6E7A, 0x6F7D, 0x73E4, 0x752B, 0x83E9, 0x88DC, 0x8913,
- 0x8B5C, 0x8F14, 0x4F0F, 0x50D5, 0x5310, 0x535C, 0x5B93, 0x5FA9,
- 0x670D, 0x798F, 0x8179, 0x832F, 0x8514, 0x8907, 0x8986, 0x8F39,
- 0x8F3B, 0x99A5, 0x9C12, 0x672C, 0x4E76, 0x4FF8, 0x5949, 0x5C01,
- 0x5CEF, 0x5CF0, 0x6367, 0x68D2, 0x70FD, 0x71A2, 0x742B, 0x7E2B,
- 0x84EC, 0x8702, 0x9022, 0x92D2, 0x9CF3, 0x4E0D, 0x4ED8, 0x4FEF,
- 0x5085, 0x5256, 0x526F, 0x5426, 0x5490, 0x57E0, 0x592B, 0x5A66,
- 0x5B5A, 0x5B75, 0x5BCC, 0x5E9C, 0x6276, 0x6577, 0x65A7, 0x6D6E,
- 0x6EA5, 0x7236, 0x7B26, 0x7C3F, 0x7F36, 0x8150, 0x8151, 0x819A,
- 0x8240, 0x8299, 0x83A9, 0x8A03, 0x8CA0, 0x8CE6, 0x8CFB, 0x8D74,
- 0x8DBA, 0x90E8, 0x91DC, 0x961C, 0x9644, 0x99D9, 0x9CE7, 0x5317,
- 0x5206, 0x5429, 0x5674, 0x58B3, 0x5954, 0x596E, 0x5FFF, 0x61A4,
- 0x626E, 0x6610, 0x6C7E, 0x711A, 0x76C6, 0x7C89, 0x7CDE, 0x7D1B,
- 0x82AC, 0x8CC1, 0x96F0, 0x4F5B, 0x5F17, 0x5F7F, 0x62C2, 0x5D29,
- 0x670B, 0x68DA, 0x787C, 0x7E43, 0x9D6C, 0x4E15, 0x5099, 0x5315,
- 0x532A, 0x5351, 0x5983, 0x5A62, 0x5E87, 0x60B2, 0x618A, 0x6249,
- 0x6279, 0x6590, 0x6787, 0x69A7, 0x6BD4, 0x6BD6, 0x6BD7, 0x6BD8,
- 0x6CB8, 0x7435, 0x75FA, 0x7812, 0x7891, 0x79D5, 0x79D8, 0x7C83,
- 0x7DCB, 0x7FE1, 0x80A5, 0x813E, 0x81C2, 0x83F2, 0x871A, 0x88E8,
- 0x8AB9, 0x8B6C, 0x8CBB, 0x9119, 0x975E, 0x98DB, 0x9F3B, 0x56AC,
- 0x5B2A, 0x5F6C, 0x658C, 0x6AB3, 0x6BAF, 0x6D5C, 0x6FF1, 0x7015,
- 0x725D, 0x73AD, 0x8CA7, 0x8CD3, 0x983B, 0x6191, 0x6C37, 0x8058,
- 0x9A01, 0x4E4D, 0x4E8B, 0x4E9B, 0x4ED5, 0x4F3A, 0x4F3C, 0x4F7F,
- 0x4FDF, 0x50FF, 0x53F2, 0x53F8, 0x5506, 0x55E3, 0x56DB, 0x58EB,
- 0x5962, 0x5A11, 0x5BEB, 0x5BFA, 0x5C04, 0x5DF3, 0x5E2B, 0x5F99,
- 0x601D, 0x6368, 0x659C, 0x65AF, 0x67F6, 0x67FB, 0x68AD, 0x6B7B,
- 0x6C99, 0x6CD7, 0x6E23, 0x7009, 0x7345, 0x7802, 0x793E, 0x7940,
- 0x7960, 0x79C1, 0x7BE9, 0x7D17, 0x7D72, 0x8086, 0x820D, 0x838E,
- 0x84D1, 0x86C7, 0x88DF, 0x8A50, 0x8A5E, 0x8B1D, 0x8CDC, 0x8D66,
- 0x8FAD, 0x90AA, 0x98FC, 0x99DF, 0x9E9D, 0x524A, 0x6714, 0x5098,
- 0x522A, 0x5C71, 0x6563, 0x6C55, 0x73CA, 0x7523, 0x759D, 0x7B97,
- 0x849C, 0x9178, 0x9730, 0x4E77, 0x6492, 0x6BBA, 0x715E, 0x85A9,
- 0x4E09, 0x6749, 0x68EE, 0x6E17, 0x829F, 0x8518, 0x886B, 0x63F7,
- 0x6F81, 0x9212, 0x98AF, 0x4E0A, 0x50B7, 0x50CF, 0x511F, 0x5546,
- 0x55AA, 0x5617, 0x5B40, 0x5C19, 0x5CE0, 0x5E38, 0x5E8A, 0x5EA0,
- 0x5EC2, 0x60F3, 0x6851, 0x6A61, 0x6E58, 0x723D, 0x7240, 0x72C0,
- 0x76F8, 0x7965, 0x7BB1, 0x7FD4, 0x88F3, 0x89F4, 0x8A73, 0x8C61,
- 0x8CDE, 0x971C, 0x585E, 0x74BD, 0x8CFD, 0x55C7, 0x7A61, 0x7D22,
- 0x8272, 0x7272, 0x751F, 0x7525, 0x7B19, 0x5885, 0x58FB, 0x5DBC,
- 0x5E8F, 0x5EB6, 0x5F90, 0x6055, 0x6292, 0x637F, 0x654D, 0x6691,
- 0x66D9, 0x66F8, 0x6816, 0x68F2, 0x7280, 0x745E, 0x7B6E, 0x7D6E,
- 0x7DD6, 0x7F72, 0x80E5, 0x8212, 0x85AF, 0x897F, 0x8A93, 0x901D,
- 0x92E4, 0x9ECD, 0x9F20, 0x5915, 0x596D, 0x5E2D, 0x60DC, 0x6614,
- 0x6673, 0x6790, 0x6C50, 0x6DC5, 0x6F5F, 0x77F3, 0x78A9, 0x84C6,
- 0x91CB, 0x932B, 0x4ED9, 0x50CA, 0x5148, 0x5584, 0x5B0B, 0x5BA3,
- 0x6247, 0x657E, 0x65CB, 0x6E32, 0x717D, 0x7401, 0x7444, 0x7487,
- 0x74BF, 0x766C, 0x79AA, 0x7DDA, 0x7E55, 0x7FA8, 0x817A, 0x81B3,
- 0x8239, 0x861A, 0x87EC, 0x8A75, 0x8DE3, 0x9078, 0x9291, 0x9425,
- 0x994D, 0x9BAE, 0x5368, 0x5C51, 0x6954, 0x6CC4, 0x6D29, 0x6E2B,
- 0x820C, 0x859B, 0x893B, 0x8A2D, 0x8AAA, 0x96EA, 0x9F67, 0x5261,
- 0x66B9, 0x6BB2, 0x7E96, 0x87FE, 0x8D0D, 0x9583, 0x965D, 0x651D,
- 0x6D89, 0x71EE, 0x57CE, 0x59D3, 0x5BAC, 0x6027, 0x60FA, 0x6210,
- 0x661F, 0x665F, 0x7329, 0x73F9, 0x76DB, 0x7701, 0x7B6C, 0x8056,
- 0x8072, 0x8165, 0x8AA0, 0x9192, 0x4E16, 0x52E2, 0x6B72, 0x6D17,
- 0x7A05, 0x7B39, 0x7D30, 0x8CB0, 0x53EC, 0x562F, 0x5851, 0x5BB5,
- 0x5C0F, 0x5C11, 0x5DE2, 0x6240, 0x6383, 0x6414, 0x662D, 0x68B3,
- 0x6CBC, 0x6D88, 0x6EAF, 0x701F, 0x70A4, 0x71D2, 0x7526, 0x758F,
- 0x758E, 0x7619, 0x7B11, 0x7BE0, 0x7C2B, 0x7D20, 0x7D39, 0x852C,
- 0x856D, 0x8607, 0x8A34, 0x900D, 0x9061, 0x90B5, 0x92B7, 0x97F6,
- 0x9A37, 0x4FD7, 0x5C6C, 0x675F, 0x6D91, 0x7C9F, 0x7E8C, 0x8B16,
- 0x8D16, 0x901F, 0x5B6B, 0x5DFD, 0x640D, 0x84C0, 0x905C, 0x98E1,
- 0x7387, 0x5B8B, 0x609A, 0x677E, 0x6DDE, 0x8A1F, 0x8AA6, 0x9001,
- 0x980C, 0x5237, 0x7051, 0x788E, 0x9396, 0x8870, 0x91D7, 0x4FEE,
- 0x53D7, 0x55FD, 0x56DA, 0x5782, 0x58FD, 0x5AC2, 0x5B88, 0x5CAB,
- 0x5CC0, 0x5E25, 0x6101, 0x620D, 0x624B, 0x6388, 0x641C, 0x6536,
- 0x6578, 0x6A39, 0x6B8A, 0x6C34, 0x6D19, 0x6F31, 0x71E7, 0x72E9,
- 0x7378, 0x7407, 0x74B2, 0x7626, 0x7761, 0x79C0, 0x7A57, 0x7AEA,
- 0x7CB9, 0x7D8F, 0x7DAC, 0x7E61, 0x7F9E, 0x8129, 0x8331, 0x8490,
- 0x84DA, 0x85EA, 0x8896, 0x8AB0, 0x8B90, 0x8F38, 0x9042, 0x9083,
- 0x916C, 0x9296, 0x92B9, 0x968B, 0x96A7, 0x96A8, 0x96D6, 0x9700,
- 0x9808, 0x9996, 0x9AD3, 0x9B1A, 0x53D4, 0x587E, 0x5919, 0x5B70,
- 0x5BBF, 0x6DD1, 0x6F5A, 0x719F, 0x7421, 0x74B9, 0x8085, 0x83FD,
- 0x5DE1, 0x5F87, 0x5FAA, 0x6042, 0x65EC, 0x6812, 0x696F, 0x6A53,
- 0x6B89, 0x6D35, 0x6DF3, 0x73E3, 0x76FE, 0x77AC, 0x7B4D, 0x7D14,
- 0x8123, 0x821C, 0x8340, 0x84F4, 0x8563, 0x8A62, 0x8AC4, 0x9187,
- 0x931E, 0x9806, 0x99B4, 0x620C, 0x8853, 0x8FF0, 0x9265, 0x5D07,
- 0x5D27, 0x5D69, 0x745F, 0x819D, 0x8768, 0x6FD5, 0x62FE, 0x7FD2,
- 0x8936, 0x8972, 0x4E1E, 0x4E58, 0x50E7, 0x52DD, 0x5347, 0x627F,
- 0x6607, 0x7E69, 0x8805, 0x965E, 0x4F8D, 0x5319, 0x5636, 0x59CB,
- 0x5AA4, 0x5C38, 0x5C4E, 0x5C4D, 0x5E02, 0x5F11, 0x6043, 0x65BD,
- 0x662F, 0x6642, 0x67BE, 0x67F4, 0x731C, 0x77E2, 0x793A, 0x7FC5,
- 0x8494, 0x84CD, 0x8996, 0x8A66, 0x8A69, 0x8AE1, 0x8C55, 0x8C7A,
- 0x57F4, 0x5BD4, 0x5F0F, 0x606F, 0x62ED, 0x690D, 0x6B96, 0x6E5C,
- 0x7184, 0x7BD2, 0x8755, 0x8B58, 0x8EFE, 0x98DF, 0x98FE, 0x4F38,
- 0x4F81, 0x4FE1, 0x547B, 0x5A20, 0x5BB8, 0x613C, 0x65B0, 0x6668,
- 0x71FC, 0x7533, 0x795E, 0x7D33, 0x814E, 0x81E3, 0x8398, 0x85AA,
- 0x85CE, 0x8703, 0x8A0A, 0x8EAB, 0x8F9B, 0x8FC5, 0x5931, 0x5BA4,
- 0x5BE6, 0x6089, 0x5BE9, 0x5C0B, 0x5FC3, 0x6C81, 0x6DF1, 0x700B,
- 0x751A, 0x82AF, 0x8AF6, 0x4EC0, 0x5341, 0x96D9, 0x6C0F, 0x4E9E,
- 0x4FC4, 0x5152, 0x555E, 0x5A25, 0x5CE8, 0x6211, 0x7259, 0x82BD,
- 0x83AA, 0x86FE, 0x8859, 0x8A1D, 0x963F, 0x96C5, 0x9913, 0x9D09,
- 0x9D5D, 0x580A, 0x5CB3, 0x5DBD, 0x5E44, 0x60E1, 0x6115, 0x63E1,
- 0x6A02, 0x6E25, 0x9102, 0x9354, 0x984E, 0x9C10, 0x9F77, 0x5B89,
- 0x5CB8, 0x6309, 0x664F, 0x6848, 0x773C, 0x96C1, 0x978D, 0x9854,
- 0x9B9F, 0x65A1, 0x8B01, 0x8ECB, 0x95BC, 0x5535, 0x5CA9, 0x5DD6,
- 0x5EB5, 0x6697, 0x764C, 0x83F4, 0x95C7, 0x58D3, 0x62BC, 0x72CE,
- 0x9D28, 0x4EF0, 0x592E, 0x600F, 0x663B, 0x6B83, 0x79E7, 0x9D26,
- 0x5393, 0x54C0, 0x57C3, 0x5D16, 0x611B, 0x66D6, 0x6DAF, 0x788D,
- 0x827E, 0x9698, 0x9744, 0x5384, 0x627C, 0x6396, 0x6DB2, 0x7E0A,
- 0x814B, 0x984D, 0x6AFB, 0x7F4C, 0x9DAF, 0x9E1A, 0x4E5F, 0x503B,
- 0x51B6, 0x591C, 0x60F9, 0x63F6, 0x6930, 0x723A, 0x8036, 0x91CE,
- 0x5F31, 0x7D04, 0x82E5, 0x846F, 0x84BB, 0x85E5, 0x8E8D, 0x4F6F,
- 0x58E4, 0x5B43, 0x6059, 0x63DA, 0x6518, 0x656D, 0x6698, 0x694A,
- 0x6A23, 0x6D0B, 0x7001, 0x716C, 0x75D2, 0x760D, 0x79B3, 0x7A70,
- 0x7F8A, 0x8944, 0x8B93, 0x91C0, 0x967D, 0x990A, 0x5704, 0x5FA1,
- 0x65BC, 0x6F01, 0x7600, 0x79A6, 0x8A9E, 0x99AD, 0x9B5A, 0x9F6C,
- 0x5104, 0x61B6, 0x6291, 0x6A8D, 0x81C6, 0x5043, 0x5830, 0x5F66,
- 0x7109, 0x8A00, 0x8AFA, 0x5B7C, 0x8616, 0x4FFA, 0x513C, 0x56B4,
- 0x5944, 0x63A9, 0x6DF9, 0x5DAA, 0x696D, 0x5186, 0x4E88, 0x4F59,
- 0x5982, 0x6B5F, 0x6C5D, 0x74B5, 0x7916, 0x8207, 0x8245, 0x8339,
- 0x8F3F, 0x8F5D, 0x9918, 0x4EA6, 0x57DF, 0x5F79, 0x6613, 0x75AB,
- 0x7E79, 0x8B6F, 0x9006, 0x9A5B, 0x56A5, 0x5827, 0x59F8, 0x5A1F,
- 0x5BB4, 0x5EF6, 0x6350, 0x633B, 0x693D, 0x6C87, 0x6CBF, 0x6D8E,
- 0x6D93, 0x6DF5, 0x6F14, 0x70DF, 0x7136, 0x7159, 0x71C3, 0x71D5,
- 0x784F, 0x786F, 0x7B75, 0x7DE3, 0x7E2F, 0x884D, 0x8EDF, 0x925B,
- 0x9CF6, 0x6085, 0x6D85, 0x71B1, 0x95B1, 0x53AD, 0x67D3, 0x708E,
- 0x7130, 0x7430, 0x8276, 0x82D2, 0x95BB, 0x9AE5, 0x9E7D, 0x66C4,
- 0x71C1, 0x8449, 0x584B, 0x5DB8, 0x5F71, 0x6620, 0x668E, 0x6979,
- 0x69AE, 0x6C38, 0x6CF3, 0x6E36, 0x6F41, 0x6FDA, 0x701B, 0x702F,
- 0x7150, 0x71DF, 0x7370, 0x745B, 0x74D4, 0x76C8, 0x7A4E, 0x7E93,
- 0x82F1, 0x8A60, 0x8FCE, 0x9348, 0x9719, 0x4E42, 0x502A, 0x5208,
- 0x53E1, 0x66F3, 0x6C6D, 0x6FCA, 0x730A, 0x777F, 0x7A62, 0x82AE,
- 0x85DD, 0x8602, 0x88D4, 0x8A63, 0x8B7D, 0x8C6B, 0x92B3, 0x9713,
- 0x9810, 0x4E94, 0x4F0D, 0x4FC9, 0x50B2, 0x5348, 0x543E, 0x5433,
- 0x55DA, 0x5862, 0x58BA, 0x5967, 0x5A1B, 0x5BE4, 0x609F, 0x61CA,
- 0x6556, 0x65FF, 0x6664, 0x68A7, 0x6C5A, 0x6FB3, 0x70CF, 0x71AC,
- 0x7352, 0x7B7D, 0x8708, 0x8AA4, 0x9C32, 0x9F07, 0x5C4B, 0x6C83,
- 0x7344, 0x7389, 0x923A, 0x6EAB, 0x7465, 0x761F, 0x7A69, 0x7E15,
- 0x860A, 0x5140, 0x58C5, 0x64C1, 0x74EE, 0x7515, 0x7670, 0x7FC1,
- 0x9095, 0x96CD, 0x9954, 0x6E26, 0x74E6, 0x7AA9, 0x7AAA, 0x81E5,
- 0x86D9, 0x8778, 0x8A1B, 0x5A49, 0x5B8C, 0x5B9B, 0x68A1, 0x6900,
- 0x6D63, 0x73A9, 0x7413, 0x742C, 0x7897, 0x7DE9, 0x7FEB, 0x8118,
- 0x8155, 0x839E, 0x8C4C, 0x962E, 0x9811, 0x66F0, 0x5F80, 0x65FA,
- 0x6789, 0x6C6A, 0x738B, 0x502D, 0x5A03, 0x6B6A, 0x77EE, 0x5916,
- 0x5D6C, 0x5DCD, 0x7325, 0x754F, 0x50E5, 0x51F9, 0x582F, 0x592D,
- 0x5996, 0x59DA, 0x5BE5, 0x5DA2, 0x62D7, 0x6416, 0x6493, 0x64FE,
- 0x66DC, 0x6A48, 0x71FF, 0x7464, 0x7A88, 0x7AAF, 0x7E47, 0x7E5E,
- 0x8000, 0x8170, 0x87EF, 0x8981, 0x8B20, 0x9059, 0x9080, 0x9952,
- 0x617E, 0x6B32, 0x6D74, 0x7E1F, 0x8925, 0x8FB1, 0x4FD1, 0x50AD,
- 0x5197, 0x52C7, 0x57C7, 0x5889, 0x5BB9, 0x5EB8, 0x6142, 0x6995,
- 0x6D8C, 0x6E67, 0x6EB6, 0x7194, 0x7462, 0x7528, 0x752C, 0x8073,
- 0x8338, 0x84C9, 0x8E0A, 0x9394, 0x93DE, 0x4E8E, 0x4F51, 0x5076,
- 0x512A, 0x53C8, 0x53CB, 0x53F3, 0x5B87, 0x5BD3, 0x5C24, 0x611A,
- 0x6182, 0x65F4, 0x725B, 0x7397, 0x7440, 0x76C2, 0x7950, 0x7991,
- 0x79B9, 0x7D06, 0x7FBD, 0x828B, 0x85D5, 0x865E, 0x8FC2, 0x9047,
- 0x90F5, 0x91EA, 0x9685, 0x96E8, 0x96E9, 0x52D6, 0x5F67, 0x65ED,
- 0x6631, 0x682F, 0x715C, 0x7A36, 0x90C1, 0x980A, 0x4E91, 0x6A52,
- 0x6B9E, 0x6F90, 0x7189, 0x8018, 0x82B8, 0x8553, 0x904B, 0x9695,
- 0x96F2, 0x97FB, 0x851A, 0x9B31, 0x4E90, 0x718A, 0x96C4, 0x5143,
- 0x539F, 0x54E1, 0x5713, 0x5712, 0x57A3, 0x5A9B, 0x5AC4, 0x5BC3,
- 0x6028, 0x613F, 0x63F4, 0x6C85, 0x6D39, 0x6E72, 0x6E90, 0x7230,
- 0x733F, 0x7457, 0x82D1, 0x8881, 0x8F45, 0x9060, 0x9662, 0x9858,
- 0x9D1B, 0x6708, 0x8D8A, 0x925E, 0x4F4D, 0x5049, 0x50DE, 0x5371,
- 0x570D, 0x59D4, 0x5A01, 0x5C09, 0x6170, 0x6690, 0x6E2D, 0x7232,
- 0x744B, 0x7DEF, 0x80C3, 0x840E, 0x8466, 0x853F, 0x875F, 0x885B,
- 0x8918, 0x8B02, 0x9055, 0x97CB, 0x9B4F, 0x4E73, 0x4F91, 0x5112,
- 0x516A, 0x552F, 0x55A9, 0x5B7A, 0x5BA5, 0x5E7C, 0x5E7D, 0x5EBE,
- 0x60A0, 0x60DF, 0x6108, 0x6109, 0x63C4, 0x6538, 0x6709, 0x67D4,
- 0x67DA, 0x6961, 0x6962, 0x6CB9, 0x6D27, 0x6E38, 0x6FE1, 0x7336,
- 0x7337, 0x745C, 0x7531, 0x7652, 0x7DAD, 0x81FE, 0x8438, 0x88D5,
- 0x8A98, 0x8ADB, 0x8AED, 0x8E30, 0x8E42, 0x904A, 0x903E, 0x907A,
- 0x9149, 0x91C9, 0x936E, 0x5809, 0x6BD3, 0x8089, 0x80B2, 0x5141,
- 0x596B, 0x5C39, 0x6F64, 0x73A7, 0x80E4, 0x8D07, 0x9217, 0x958F,
- 0x807F, 0x620E, 0x701C, 0x7D68, 0x878D, 0x57A0, 0x6069, 0x6147,
- 0x6BB7, 0x8ABE, 0x9280, 0x96B1, 0x4E59, 0x541F, 0x6DEB, 0x852D,
- 0x9670, 0x97F3, 0x98EE, 0x63D6, 0x6CE3, 0x9091, 0x51DD, 0x61C9,
- 0x81BA, 0x9DF9, 0x4F9D, 0x501A, 0x5100, 0x5B9C, 0x610F, 0x61FF,
- 0x64EC, 0x6905, 0x6BC5, 0x7591, 0x77E3, 0x7FA9, 0x8264, 0x858F,
- 0x87FB, 0x8863, 0x8ABC, 0x8B70, 0x91AB, 0x4E8C, 0x4EE5, 0x4F0A,
- 0x5937, 0x59E8, 0x5DF2, 0x5F1B, 0x5F5B, 0x6021, 0x723E, 0x73E5,
- 0x7570, 0x75CD, 0x79FB, 0x800C, 0x8033, 0x8084, 0x82E1, 0x8351,
- 0x8CBD, 0x8CB3, 0x9087, 0x98F4, 0x990C, 0x7037, 0x76CA, 0x7FCA,
- 0x7FCC, 0x7FFC, 0x8B1A, 0x4EBA, 0x4EC1, 0x5203, 0x5370, 0x54BD,
- 0x56E0, 0x59FB, 0x5BC5, 0x5F15, 0x5FCD, 0x6E6E, 0x7D6A, 0x8335,
- 0x8693, 0x8A8D, 0x976D, 0x9777, 0x4E00, 0x4F5A, 0x4F7E, 0x58F9,
- 0x65E5, 0x6EA2, 0x9038, 0x93B0, 0x99B9, 0x4EFB, 0x58EC, 0x598A,
- 0x59D9, 0x6041, 0x7A14, 0x834F, 0x8CC3, 0x5165, 0x5344, 0x4ECD,
- 0x5269, 0x5B55, 0x82BF, 0x4ED4, 0x523A, 0x54A8, 0x59C9, 0x59FF,
- 0x5B50, 0x5B57, 0x5B5C, 0x6063, 0x6148, 0x6ECB, 0x7099, 0x716E,
- 0x7386, 0x74F7, 0x75B5, 0x78C1, 0x7D2B, 0x8005, 0x81EA, 0x8328,
- 0x8517, 0x85C9, 0x8AEE, 0x8CC7, 0x96CC, 0x4F5C, 0x52FA, 0x56BC,
- 0x65AB, 0x6628, 0x707C, 0x70B8, 0x7235, 0x7DBD, 0x828D, 0x914C,
- 0x96C0, 0x9D72, 0x5B71, 0x68E7, 0x6B98, 0x6F7A, 0x76DE, 0x5C91,
- 0x66AB, 0x6F5B, 0x7BB4, 0x7C2A, 0x8836, 0x96DC, 0x4E08, 0x4ED7,
- 0x5320, 0x5834, 0x58BB, 0x58EF, 0x596C, 0x5C07, 0x5E33, 0x5E84,
- 0x5F35, 0x638C, 0x66B2, 0x6756, 0x6A1F, 0x6AA3, 0x6B0C, 0x6F3F,
- 0x7246, 0x7350, 0x748B, 0x7AE0, 0x7CA7, 0x8178, 0x81DF, 0x81E7,
- 0x838A, 0x846C, 0x8523, 0x8594, 0x85CF, 0x88DD, 0x8D13, 0x91AC,
- 0x9577, 0x969C, 0x518D, 0x54C9, 0x5728, 0x5BB0, 0x624D, 0x6750,
- 0x683D, 0x6893, 0x6E3D, 0x6ED3, 0x707D, 0x7E21, 0x88C1, 0x8CA1,
- 0x8F09, 0x9F4B, 0x9F4E, 0x722D, 0x7B8F, 0x8ACD, 0x931A, 0x4F47,
- 0x4F4E, 0x5132, 0x5480, 0x59D0, 0x5E95, 0x62B5, 0x6775, 0x696E,
- 0x6A17, 0x6CAE, 0x6E1A, 0x72D9, 0x732A, 0x75BD, 0x7BB8, 0x7D35,
- 0x82E7, 0x83F9, 0x8457, 0x85F7, 0x8A5B, 0x8CAF, 0x8E87, 0x9019,
- 0x90B8, 0x96CE, 0x9F5F, 0x52E3, 0x540A, 0x5AE1, 0x5BC2, 0x6458,
- 0x6575, 0x6EF4, 0x72C4, 0x7684, 0x7A4D, 0x7B1B, 0x7C4D, 0x7E3E,
- 0x7FDF, 0x837B, 0x8B2B, 0x8CCA, 0x8D64, 0x8DE1, 0x8E5F, 0x8FEA,
- 0x8FF9, 0x9069, 0x93D1, 0x4F43, 0x4F7A, 0x50B3, 0x5168, 0x5178,
- 0x524D, 0x526A, 0x5861, 0x587C, 0x5960, 0x5C08, 0x5C55, 0x5EDB,
- 0x609B, 0x6230, 0x6813, 0x6BBF, 0x6C08, 0x6FB1, 0x714E, 0x7420,
- 0x7530, 0x7538, 0x7551, 0x7672, 0x7B4C, 0x7B8B, 0x7BAD, 0x7BC6,
- 0x7E8F, 0x8A6E, 0x8F3E, 0x8F49, 0x923F, 0x9293, 0x9322, 0x942B,
- 0x96FB, 0x985A, 0x986B, 0x991E, 0x5207, 0x622A, 0x6298, 0x6D59,
- 0x7664, 0x7ACA, 0x7BC0, 0x7D76, 0x5360, 0x5CBE, 0x5E97, 0x6F38,
- 0x70B9, 0x7C98, 0x9711, 0x9B8E, 0x9EDE, 0x63A5, 0x647A, 0x8776,
- 0x4E01, 0x4E95, 0x4EAD, 0x505C, 0x5075, 0x5448, 0x59C3, 0x5B9A,
- 0x5E40, 0x5EAD, 0x5EF7, 0x5F81, 0x60C5, 0x633A, 0x653F, 0x6574,
- 0x65CC, 0x6676, 0x6678, 0x67FE, 0x6968, 0x6A89, 0x6B63, 0x6C40,
- 0x6DC0, 0x6DE8, 0x6E1F, 0x6E5E, 0x701E, 0x70A1, 0x738E, 0x73FD,
- 0x753A, 0x775B, 0x7887, 0x798E, 0x7A0B, 0x7A7D, 0x7CBE, 0x7D8E,
- 0x8247, 0x8A02, 0x8AEA, 0x8C9E, 0x912D, 0x914A, 0x91D8, 0x9266,
- 0x92CC, 0x9320, 0x9706, 0x9756, 0x975C, 0x9802, 0x9F0E, 0x5236,
- 0x5291, 0x557C, 0x5824, 0x5E1D, 0x5F1F, 0x608C, 0x63D0, 0x68AF,
- 0x6FDF, 0x796D, 0x7B2C, 0x81CD, 0x85BA, 0x88FD, 0x8AF8, 0x8E44,
- 0x918D, 0x9664, 0x969B, 0x973D, 0x984C, 0x9F4A, 0x4FCE, 0x5146,
- 0x51CB, 0x52A9, 0x5632, 0x5F14, 0x5F6B, 0x63AA, 0x64CD, 0x65E9,
- 0x6641, 0x66FA, 0x66F9, 0x671D, 0x689D, 0x68D7, 0x69FD, 0x6F15,
- 0x6F6E, 0x7167, 0x71E5, 0x722A, 0x74AA, 0x773A, 0x7956, 0x795A,
- 0x79DF, 0x7A20, 0x7A95, 0x7C97, 0x7CDF, 0x7D44, 0x7E70, 0x8087,
- 0x85FB, 0x86A4, 0x8A54, 0x8ABF, 0x8D99, 0x8E81, 0x9020, 0x906D,
- 0x91E3, 0x963B, 0x96D5, 0x9CE5, 0x65CF, 0x7C07, 0x8DB3, 0x93C3,
- 0x5B58, 0x5C0A, 0x5352, 0x62D9, 0x731D, 0x5027, 0x5B97, 0x5F9E,
- 0x60B0, 0x616B, 0x68D5, 0x6DD9, 0x742E, 0x7A2E, 0x7D42, 0x7D9C,
- 0x7E31, 0x816B, 0x8E2A, 0x8E35, 0x937E, 0x9418, 0x4F50, 0x5750,
- 0x5DE6, 0x5EA7, 0x632B, 0x7F6A, 0x4E3B, 0x4F4F, 0x4F8F, 0x505A,
- 0x59DD, 0x80C4, 0x546A, 0x5468, 0x55FE, 0x594F, 0x5B99, 0x5DDE,
- 0x5EDA, 0x665D, 0x6731, 0x67F1, 0x682A, 0x6CE8, 0x6D32, 0x6E4A,
- 0x6F8D, 0x70B7, 0x73E0, 0x7587, 0x7C4C, 0x7D02, 0x7D2C, 0x7DA2,
- 0x821F, 0x86DB, 0x8A3B, 0x8A85, 0x8D70, 0x8E8A, 0x8F33, 0x9031,
- 0x914E, 0x9152, 0x9444, 0x99D0, 0x7AF9, 0x7CA5, 0x4FCA, 0x5101,
- 0x51C6, 0x57C8, 0x5BEF, 0x5CFB, 0x6659, 0x6A3D, 0x6D5A, 0x6E96,
- 0x6FEC, 0x710C, 0x756F, 0x7AE3, 0x8822, 0x9021, 0x9075, 0x96CB,
- 0x99FF, 0x8301, 0x4E2D, 0x4EF2, 0x8846, 0x91CD, 0x537D, 0x6ADB,
- 0x696B, 0x6C41, 0x847A, 0x589E, 0x618E, 0x66FE, 0x62EF, 0x70DD,
- 0x7511, 0x75C7, 0x7E52, 0x84B8, 0x8B49, 0x8D08, 0x4E4B, 0x53EA,
- 0x54AB, 0x5730, 0x5740, 0x5FD7, 0x6301, 0x6307, 0x646F, 0x652F,
- 0x65E8, 0x667A, 0x679D, 0x67B3, 0x6B62, 0x6C60, 0x6C9A, 0x6F2C,
- 0x77E5, 0x7825, 0x7949, 0x7957, 0x7D19, 0x80A2, 0x8102, 0x81F3,
- 0x829D, 0x82B7, 0x8718, 0x8A8C, 0x8D04, 0x8DBE, 0x9072, 0x76F4,
- 0x7A19, 0x7A37, 0x7E54, 0x8077, 0x5507, 0x55D4, 0x5875, 0x632F,
- 0x6422, 0x6649, 0x664B, 0x686D, 0x699B, 0x6B84, 0x6D25, 0x6EB1,
- 0x73CD, 0x7468, 0x74A1, 0x755B, 0x75B9, 0x76E1, 0x771E, 0x778B,
- 0x79E6, 0x7E09, 0x7E1D, 0x81FB, 0x852F, 0x8897, 0x8A3A, 0x8CD1,
- 0x8EEB, 0x8FB0, 0x9032, 0x93AD, 0x9663, 0x9673, 0x9707, 0x4F84,
- 0x53F1, 0x59EA, 0x5AC9, 0x5E19, 0x684E, 0x74C6, 0x75BE, 0x79E9,
- 0x7A92, 0x81A3, 0x86ED, 0x8CEA, 0x8DCC, 0x8FED, 0x659F, 0x6715,
- 0x57F7, 0x6F57, 0x7DDD, 0x8F2F, 0x93F6, 0x96C6, 0x5FB5, 0x61F2,
- 0x6F84, 0x4E14, 0x4F98, 0x501F, 0x53C9, 0x55DF, 0x5D6F, 0x5DEE,
- 0x6B21, 0x6B64, 0x78CB, 0x7B9A, 0x8E49, 0x8ECA, 0x906E, 0x6349,
- 0x643E, 0x7740, 0x7A84, 0x932F, 0x947F, 0x9F6A, 0x64B0, 0x6FAF,
- 0x71E6, 0x74A8, 0x74DA, 0x7AC4, 0x7C12, 0x7E82, 0x7CB2, 0x7E98,
- 0x8B9A, 0x8D0A, 0x947D, 0x9910, 0x994C, 0x5239, 0x5BDF, 0x64E6,
- 0x672D, 0x7D2E, 0x50ED, 0x53C3, 0x5879, 0x6158, 0x6159, 0x61FA,
- 0x65AC, 0x7AD9, 0x8B92, 0x8B96, 0x5009, 0x5021, 0x5275, 0x5531,
- 0x5A3C, 0x5EE0, 0x5F70, 0x6134, 0x655E, 0x660C, 0x6636, 0x66A2,
- 0x69CD, 0x6EC4, 0x6F32, 0x7316, 0x7621, 0x7A93, 0x8139, 0x8259,
- 0x83D6, 0x84BC, 0x50B5, 0x57F0, 0x5BC0, 0x5BE8, 0x5F69, 0x63A1,
- 0x7826, 0x7DB5, 0x83DC, 0x8521, 0x91C7, 0x91F5, 0x518A, 0x67F5,
- 0x7B56, 0x8CAC, 0x51C4, 0x59BB, 0x60BD, 0x8655, 0x501C, 0x5254,
- 0x5C3A, 0x617D, 0x621A, 0x62D3, 0x64F2, 0x65A5, 0x6ECC, 0x7620,
- 0x810A, 0x8E60, 0x965F, 0x96BB, 0x4EDF, 0x5343, 0x5598, 0x5929,
- 0x5DDD, 0x64C5, 0x6CC9, 0x6DFA, 0x7394, 0x7A7F, 0x821B, 0x85A6,
- 0x8CE4, 0x8E10, 0x9077, 0x91E7, 0x95E1, 0x9621, 0x97C6, 0x51F8,
- 0x54F2, 0x5586, 0x5FB9, 0x64A4, 0x6F88, 0x7DB4, 0x8F1F, 0x8F4D,
- 0x9435, 0x50C9, 0x5C16, 0x6CBE, 0x6DFB, 0x751B, 0x77BB, 0x7C3D,
- 0x7C64, 0x8A79, 0x8AC2, 0x581E, 0x59BE, 0x5E16, 0x6377, 0x7252,
- 0x758A, 0x776B, 0x8ADC, 0x8CBC, 0x8F12, 0x5EF3, 0x6674, 0x6DF8,
- 0x807D, 0x83C1, 0x8ACB, 0x9751, 0x9BD6, 0x5243, 0x66FF, 0x6D95,
- 0x6EEF, 0x7DE0, 0x8AE6, 0x902E, 0x905E, 0x9AD4, 0x521D, 0x527F,
- 0x54E8, 0x6194, 0x6284, 0x62DB, 0x68A2, 0x6912, 0x695A, 0x6A35,
- 0x7092, 0x7126, 0x785D, 0x7901, 0x790E, 0x79D2, 0x7A0D, 0x8096,
- 0x8278, 0x82D5, 0x8349, 0x8549, 0x8C82, 0x8D85, 0x9162, 0x918B,
- 0x91AE, 0x4FC3, 0x56D1, 0x71ED, 0x77D7, 0x8700, 0x89F8, 0x5BF8,
- 0x5FD6, 0x6751, 0x90A8, 0x53E2, 0x585A, 0x5BF5, 0x60A4, 0x6181,
- 0x6460, 0x7E3D, 0x8070, 0x8525, 0x9283, 0x64AE, 0x50AC, 0x5D14,
- 0x6700, 0x589C, 0x62BD, 0x63A8, 0x690E, 0x6978, 0x6A1E, 0x6E6B,
- 0x76BA, 0x79CB, 0x82BB, 0x8429, 0x8ACF, 0x8DA8, 0x8FFD, 0x9112,
- 0x914B, 0x919C, 0x9310, 0x9318, 0x939A, 0x96DB, 0x9A36, 0x9C0D,
- 0x4E11, 0x755C, 0x795D, 0x7AFA, 0x7B51, 0x7BC9, 0x7E2E, 0x84C4,
- 0x8E59, 0x8E74, 0x8EF8, 0x9010, 0x6625, 0x693F, 0x7443, 0x51FA,
- 0x672E, 0x9EDC, 0x5145, 0x5FE0, 0x6C96, 0x87F2, 0x885D, 0x8877,
- 0x60B4, 0x81B5, 0x8403, 0x8D05, 0x53D6, 0x5439, 0x5634, 0x5A36,
- 0x5C31, 0x708A, 0x7FE0, 0x805A, 0x8106, 0x81ED, 0x8DA3, 0x9189,
- 0x9A5F, 0x9DF2, 0x5074, 0x4EC4, 0x53A0, 0x60FB, 0x6E2C, 0x5C64,
- 0x4F88, 0x5024, 0x55E4, 0x5CD9, 0x5E5F, 0x6065, 0x6894, 0x6CBB,
- 0x6DC4, 0x71BE, 0x75D4, 0x75F4, 0x7661, 0x7A1A, 0x7A49, 0x7DC7,
- 0x7DFB, 0x7F6E, 0x81F4, 0x86A9, 0x8F1C, 0x96C9, 0x99B3, 0x9F52,
- 0x5247, 0x52C5, 0x98ED, 0x89AA, 0x4E03, 0x67D2, 0x6F06, 0x4FB5,
- 0x5BE2, 0x6795, 0x6C88, 0x6D78, 0x741B, 0x7827, 0x91DD, 0x937C,
- 0x87C4, 0x79E4, 0x7A31, 0x5FEB, 0x4ED6, 0x54A4, 0x553E, 0x58AE,
- 0x59A5, 0x60F0, 0x6253, 0x62D6, 0x6736, 0x6955, 0x8235, 0x9640,
- 0x99B1, 0x99DD, 0x502C, 0x5353, 0x5544, 0x577C, 0x6258, 0x64E2,
- 0x666B, 0x67DD, 0x6FC1, 0x6FEF, 0x7422, 0x7438, 0x8A17, 0x9438,
- 0x5451, 0x5606, 0x5766, 0x5F48, 0x619A, 0x6B4E, 0x7058, 0x70AD,
- 0x7DBB, 0x8A95, 0x596A, 0x812B, 0x63A2, 0x7708, 0x803D, 0x8CAA,
- 0x5854, 0x642D, 0x69BB, 0x5B95, 0x5E11, 0x6E6F, 0x8569, 0x514C,
- 0x53F0, 0x592A, 0x6020, 0x614B, 0x6B86, 0x6C70, 0x6CF0, 0x7B1E,
- 0x80CE, 0x82D4, 0x8DC6, 0x90B0, 0x98B1, 0x64C7, 0x6FA4, 0x6491,
- 0x6504, 0x514E, 0x5410, 0x571F, 0x8A0E, 0x615F, 0x6876, 0x75DB,
- 0x7B52, 0x7D71, 0x901A, 0x5806, 0x69CC, 0x817F, 0x892A, 0x9000,
- 0x9839, 0x5078, 0x5957, 0x59AC, 0x6295, 0x900F, 0x9B2A, 0x615D,
- 0x7279, 0x95D6, 0x5761, 0x5A46, 0x5DF4, 0x628A, 0x64AD, 0x64FA,
- 0x6777, 0x6CE2, 0x6D3E, 0x722C, 0x7436, 0x7834, 0x7F77, 0x82AD,
- 0x8DDB, 0x9817, 0x5224, 0x5742, 0x677F, 0x7248, 0x74E3, 0x8CA9,
- 0x8FA6, 0x9211, 0x962A, 0x516B, 0x53ED, 0x634C, 0x4F69, 0x5504,
- 0x6096, 0x6557, 0x6C9B, 0x6D7F, 0x724C, 0x72FD, 0x7A17, 0x8987,
- 0x8C9D, 0x5F6D, 0x6F8E, 0x70F9, 0x81A8, 0x610E, 0x4FBF, 0x504F,
- 0x6241, 0x7247, 0x7BC7, 0x7DE8, 0x7FE9, 0x904D, 0x97AD, 0x9A19,
- 0x8CB6, 0x576A, 0x5E73, 0x67B0, 0x840D, 0x8A55, 0x5420, 0x5B16,
- 0x5E63, 0x5EE2, 0x5F0A, 0x6583, 0x80BA, 0x853D, 0x9589, 0x965B,
- 0x4F48, 0x5305, 0x530D, 0x530F, 0x5486, 0x54FA, 0x5703, 0x5E03,
- 0x6016, 0x629B, 0x62B1, 0x6355, 0x6CE1, 0x6D66, 0x75B1, 0x7832,
- 0x80DE, 0x812F, 0x82DE, 0x8461, 0x84B2, 0x888D, 0x8912, 0x900B,
- 0x92EA, 0x98FD, 0x9B91, 0x5E45, 0x66B4, 0x66DD, 0x7011, 0x7206,
- 0x4FF5, 0x527D, 0x5F6A, 0x6153, 0x6753, 0x6A19, 0x6F02, 0x74E2,
- 0x7968, 0x8868, 0x8C79, 0x98C7, 0x98C4, 0x9A43, 0x54C1, 0x7A1F,
- 0x6953, 0x8AF7, 0x8C4A, 0x98A8, 0x99AE, 0x5F7C, 0x62AB, 0x75B2,
- 0x76AE, 0x88AB, 0x907F, 0x9642, 0x5339, 0x5F3C, 0x5FC5, 0x6CCC,
- 0x73CC, 0x7562, 0x758B, 0x7B46, 0x82FE, 0x999D, 0x4E4F, 0x903C,
- 0x4E0B, 0x4F55, 0x53A6, 0x590F, 0x5EC8, 0x6630, 0x6CB3, 0x7455,
- 0x8377, 0x8766, 0x8CC0, 0x9050, 0x971E, 0x9C15, 0x58D1, 0x5B78,
- 0x8650, 0x8B14, 0x9DB4, 0x5BD2, 0x6068, 0x608D, 0x65F1, 0x6C57,
- 0x6F22, 0x6FA3, 0x701A, 0x7F55, 0x7FF0, 0x9591, 0x9592, 0x9650,
- 0x97D3, 0x5272, 0x8F44, 0x51FD, 0x542B, 0x54B8, 0x5563, 0x558A,
- 0x6ABB, 0x6DB5, 0x7DD8, 0x8266, 0x929C, 0x9677, 0x9E79, 0x5408,
- 0x54C8, 0x76D2, 0x86E4, 0x95A4, 0x95D4, 0x965C, 0x4EA2, 0x4F09,
- 0x59EE, 0x5AE6, 0x5DF7, 0x6052, 0x6297, 0x676D, 0x6841, 0x6C86,
- 0x6E2F, 0x7F38, 0x809B, 0x822A, 0x9805, 0x4EA5, 0x5055, 0x54B3,
- 0x5793, 0x595A, 0x5B69, 0x5BB3, 0x61C8, 0x6977, 0x6D77, 0x7023,
- 0x87F9, 0x89E3, 0x8A72, 0x8AE7, 0x9082, 0x99ED, 0x9AB8, 0x52BE,
- 0x6838, 0x5016, 0x5E78, 0x674F, 0x8347, 0x884C, 0x4EAB, 0x5411,
- 0x56AE, 0x73E6, 0x9115, 0x97FF, 0x9909, 0x9957, 0x9999, 0x5653,
- 0x589F, 0x865B, 0x8A31, 0x61B2, 0x6AF6, 0x737B, 0x8ED2, 0x6B47,
- 0x96AA, 0x9A57, 0x5955, 0x7200, 0x8D6B, 0x9769, 0x4FD4, 0x5CF4,
- 0x5F26, 0x61F8, 0x665B, 0x6CEB, 0x70AB, 0x7384, 0x73B9, 0x73FE,
- 0x7729, 0x774D, 0x7D43, 0x7D62, 0x7E23, 0x8237, 0x8852, 0x8CE2,
- 0x9249, 0x986F, 0x5B51, 0x7A74, 0x8840, 0x9801, 0x5ACC, 0x4FE0,
- 0x5354, 0x593E, 0x5CFD, 0x633E, 0x6D79, 0x72F9, 0x8105, 0x8107,
- 0x83A2, 0x92CF, 0x9830, 0x4EA8, 0x5144, 0x5211, 0x578B, 0x5F62,
- 0x6CC2, 0x6ECE, 0x7005, 0x7050, 0x70AF, 0x7192, 0x73E9, 0x7469,
- 0x834A, 0x87A2, 0x8861, 0x9008, 0x90A2, 0x93A3, 0x99A8, 0x516E,
- 0x5F57, 0x60E0, 0x6167, 0x66B3, 0x8559, 0x8E4A, 0x91AF, 0x978B,
- 0x4E4E, 0x4E92, 0x547C, 0x58D5, 0x58FA, 0x597D, 0x5CB5, 0x5F27,
- 0x6236, 0x6248, 0x660A, 0x6667, 0x6BEB, 0x6D69, 0x6DCF, 0x6E56,
- 0x6EF8, 0x6F94, 0x6FE0, 0x6FE9, 0x705D, 0x72D0, 0x7425, 0x745A,
- 0x74E0, 0x7693, 0x795C, 0x7CCA, 0x7E1E, 0x80E1, 0x82A6, 0x846B,
- 0x84BF, 0x864E, 0x865F, 0x8774, 0x8B77, 0x8C6A, 0x93AC, 0x9800,
- 0x9865, 0x60D1, 0x6216, 0x9177, 0x5A5A, 0x660F, 0x6DF7, 0x6E3E,
- 0x743F, 0x9B42, 0x5FFD, 0x60DA, 0x7B0F, 0x54C4, 0x5F18, 0x6C5E,
- 0x6CD3, 0x6D2A, 0x70D8, 0x7D05, 0x8679, 0x8A0C, 0x9D3B, 0x5316,
- 0x548C, 0x5B05, 0x6A3A, 0x706B, 0x7575, 0x798D, 0x79BE, 0x82B1,
- 0x83EF, 0x8A71, 0x8B41, 0x8CA8, 0x9774, 0x64F4, 0x652B, 0x78BA,
- 0x78BB, 0x7A6B, 0x4E38, 0x559A, 0x5950, 0x5BA6, 0x5E7B, 0x60A3,
- 0x63DB, 0x6B61, 0x6665, 0x6853, 0x6E19, 0x7165, 0x74B0, 0x7D08,
- 0x9084, 0x9A69, 0x9C25, 0x6D3B, 0x6ED1, 0x733E, 0x8C41, 0x95CA,
- 0x51F0, 0x5E4C, 0x5FA8, 0x604D, 0x60F6, 0x6130, 0x614C, 0x6643,
- 0x6644, 0x69A5, 0x6CC1, 0x6E5F, 0x6EC9, 0x6F62, 0x714C, 0x749C,
- 0x7687, 0x7BC1, 0x7C27, 0x8352, 0x8757, 0x9051, 0x968D, 0x9EC3,
- 0x532F, 0x56DE, 0x5EFB, 0x5F8A, 0x6062, 0x6094, 0x61F7, 0x6666,
- 0x6703, 0x6A9C, 0x6DEE, 0x6FAE, 0x7070, 0x736A, 0x7E6A, 0x81BE,
- 0x8334, 0x86D4, 0x8AA8, 0x8CC4, 0x5283, 0x7372, 0x5B96, 0x6A6B,
- 0x9404, 0x54EE, 0x5686, 0x5B5D, 0x6548, 0x6585, 0x66C9, 0x689F,
- 0x6D8D, 0x6DC6, 0x723B, 0x80B4, 0x9175, 0x9A4D, 0x4FAF, 0x5019,
- 0x539A, 0x540E, 0x543C, 0x5589, 0x55C5, 0x5E3F, 0x5F8C, 0x673D,
- 0x7166, 0x73DD, 0x9005, 0x52DB, 0x52F3, 0x5864, 0x58CE, 0x7104,
- 0x718F, 0x71FB, 0x85B0, 0x8A13, 0x6688, 0x85A8, 0x55A7, 0x6684,
- 0x714A, 0x8431, 0x5349, 0x5599, 0x6BC1, 0x5F59, 0x5FBD, 0x63EE,
- 0x6689, 0x7147, 0x8AF1, 0x8F1D, 0x9EBE, 0x4F11, 0x643A, 0x70CB,
- 0x7566, 0x8667, 0x6064, 0x8B4E, 0x9DF8, 0x5147, 0x51F6, 0x5308,
- 0x6D36, 0x80F8, 0x9ED1, 0x6615, 0x6B23, 0x7098, 0x75D5, 0x5403,
- 0x5C79, 0x7D07, 0x8A16, 0x6B20, 0x6B3D, 0x6B46, 0x5438, 0x6070,
- 0x6D3D, 0x7FD5, 0x8208, 0x50D6, 0x51DE, 0x559C, 0x566B, 0x56CD,
- 0x59EC, 0x5B09, 0x5E0C, 0x6199, 0x6198, 0x6231, 0x665E, 0x66E6,
- 0x7199, 0x71B9, 0x71BA, 0x72A7, 0x79A7, 0x7A00, 0x7FB2, 0x8A70,
- 0x3001, 0x3002, 0x2025, 0x00AD, 0x2015, 0x2225, 0xFF5E, 0x3014,
- 0x3015, 0x3008, 0x3009, 0x300A, 0x300B, 0x300C, 0x300D, 0x300E,
- 0x300F, 0x3010, 0x3011, 0x3013, 0xFF01, 0xFF08, 0xFF09, 0xFF0C,
- 0xFF0E, 0xFF1A, 0xFF1B, 0xFF1C, 0xFF1D, 0xFF1E, 0xFF1F, 0xFF3B,
- 0xFF3D, 0xFF3F, 0xFF5B, 0xFF5C, 0xFF5D, 0xFF5E, 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, 0x203E, 0x007E, 0x005C, 0x231C,
- 0x231F, 0x0000, 0x0000, 0x0000, 0x0000, 0x300E, 0x300F, 0x300A,
- 0x300B, 0x3008, 0x3009, 0x0028, 0x0029, 0x0000, 0x0000, 0x0028,
- 0x0029, 0x0028, 0x0029, 0x0000, 0x0000, 0x0028, 0x0029, 0x0000,
- 0x0000, 0x3016, 0x3017, 0x3016, 0x3017, 0x3018, 0x3019, 0x005B,
- 0x005D, 0x0000, 0x0000, 0x263E, 0x263D, 0x2021, 0x2021, 0x2020,
- 0x2021, 0x0000, 0x2217, 0x0000, 0x0000, 0x201F, 0x201B, 0x02D6,
- 0x02D7, 0x00D7, 0x221E, 0x0000, 0x00B1, 0x2213, 0x003E, 0x003C,
- 0x003D, 0x2260, 0x207D, 0x207E, 0x007B, 0x007D, 0x0000, 0x0000,
- 0x2229, 0x222A, 0x2282, 0x2208, 0x03A3, 0x0021, 0x0000, 0x3021,
- 0x3022, 0x3023, 0x0000, 0x0000, 0x0000, 0x4E03, 0x0000, 0x0000,
- 0x5341, 0x0000, 0x0000, 0x0027, 0x3014, 0x3015, 0x002A, 0x0000,
- 0x2217, 0x002A, 0xCDCD, 0x3001, 0x3002, 0x0028, 0x0029, 0x0028,
- 0x0029, 0x0028, 0x0029, 0x3016, 0x3017, 0x3010, 0x3011, 0x0000,
- 0x0000, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE,
- 0x20DE, 0x20DE, 0x005D, 0x005D, 0x005D, 0x005D, 0x005D, 0x005D,
- 0x005D, 0x005D, 0x005D, 0x005D, 0x005D, 0x00B6, 0x0000, 0x0000,
- 0x22EF, 0x2237, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE,
- 0x20DE, 0x20DE, 0x20DE, 0x005D, 0x005D, 0x005D, 0x005D, 0x005D,
- 0x005D, 0x005D, 0x005D, 0x005D, 0x005D, 0x005D, 0x278A, 0x278B,
- 0x278C, 0x278D, 0x278E, 0x278F, 0x2790, 0x2791, 0x2792, 0x2793,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0029, 0x0029, 0x0029, 0x0029, 0x0029, 0x0029,
- 0x0029, 0x0029, 0x0029, 0x0029, 0x0029, 0x0029, 0x0029, 0x0029,
- 0x0029, 0x0029, 0x0029, 0x0029, 0x0029, 0x0029, 0x0029, 0x0029,
- 0x0029, 0x0029, 0x0029, 0x0029, 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, 0x20DE, 0x20DE,
- 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x005D,
- 0x005D, 0x005D, 0x005D, 0x005D, 0x005D, 0x005D, 0x005D, 0x005D,
- 0x005D, 0x005D, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE,
- 0x20DE, 0x20DE, 0x20DE, 0x005D, 0x005D, 0x005D, 0x005D, 0x005D,
- 0x005D, 0x005D, 0x005D, 0x005D, 0x005D, 0x005D, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x22CF, 0x22CE, 0x22CF, 0x22CE, 0x2280,
- 0x2281, 0x2270, 0x2271, 0x2272, 0x2273, 0x0000, 0x228A, 0x0000,
- 0x228B, 0x2276, 0x2277, 0x2279, 0x22DA, 0x22DB, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x2221, 0x2245, 0x2243, 0x2248, 0x0000, 0x22A4,
- 0x22AB, 0x0000, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE,
- 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x0000, 0x2460, 0x2461, 0x2462,
- 0x2463, 0x2464, 0x2465, 0x2466, 0x2467, 0x2468, 0x0029, 0x0029,
- 0x0029, 0x0029, 0x0029, 0x0029, 0x0029, 0x0029, 0x0029, 0x0029,
- 0x0029, 0x0029, 0x0029, 0x0029, 0x0029, 0x0029, 0x0029, 0x0029,
- 0x0029, 0x0029, 0x0029, 0x0029, 0x0029, 0x0029, 0x0029, 0x0029,
- 0x0029, 0x0029, 0x0029, 0x0029, 0x0029, 0x0029, 0x0029, 0x0029,
- 0x0029, 0x0029, 0x0029, 0x0029, 0x0029, 0x0029, 0x0029, 0x0029,
- 0x0029, 0x0029, 0x0029, 0x0029, 0x0029, 0x0029, 0x0029, 0x0029,
- 0x0029, 0x0029, 0x0021, 0x00B0, 0x0027, 0x0022, 0x2034, 0x0029,
- 0x0029, 0x0029, 0x0029, 0x0000, 0x0000, 0x2020, 0x2020, 0x2021,
- 0x2020, 0x00A7, 0x0023, 0x002A, 0x002A, 0x0000, 0x0000, 0x2042,
- 0x002A, 0x0000, 0x0000, 0x2042, 0x002A, 0x0000, 0x0000, 0x2022,
- 0x20DF, 0x20DF, 0x0000, 0x20DF, 0x3008, 0x3009, 0x300A, 0x300B,
- 0x261C, 0x261E, 0x0000, 0x0000, 0x20DE, 0x0000, 0x20DE, 0x20DE,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x20DD, 0x20DD, 0x271A, 0x2716,
- 0x0000, 0x25EF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x25CC,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x20A9, 0x0000, 0x0000,
- 0x262F, 0x0000, 0x262F, 0x262F, 0x0000, 0x0000, 0x0000, 0x3020,
- 0x0000, 0x2776, 0x2777, 0x2778, 0x2779, 0x277A, 0x277B, 0x277C,
- 0x277D, 0x277E, 0x277F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0029, 0x0029, 0x0029,
- 0x0029, 0x0029, 0x0029, 0x2642, 0x22A9, 0x3036, 0x25CB, 0x25D3,
- 0x25A1, 0x2302, 0x0000, 0x25AD, 0x25AD, 0x0000, 0x0000, 0x0000,
- 0x25C7, 0x0000, 0x0000, 0x2206, 0x22BF, 0x231E, 0x0000, 0x2225,
- 0x2226, 0x0000, 0x2253, 0x2251, 0x2266, 0x2267, 0x2213, 0x2295,
- 0x2296, 0x2297, 0x20DD, 0x2314, 0x0000, 0x0000, 0x2262, 0x0000,
- 0x25B1, 0x0000, 0x2222, 0x2250, 0x00D8, 0x234A, 0x22A3, 0x0338,
- 0x0000, 0x226E, 0x226F, 0x2285, 0x2284, 0x2209, 0x220C, 0x22BB,
- 0x0016, 0x225A, 0x2306, 0x0024, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x329E, 0x0000, 0x203C, 0x003F, 0x0000, 0x003F, 0x22C4,
- 0x25C7, 0x22C4, 0x25C6, 0x25AB, 0x25A1, 0x25AB, 0x25A0, 0x25E6,
- 0x25CB, 0x25E6, 0x25CF, 0x25BD, 0x25B3, 0x25B7, 0x25C1, 0x2726,
- 0x25CF, 0x25A0, 0x0000, 0x25CA, 0x3231, 0x3239, 0x33CB, 0x2483,
- 0x2494, 0x2495, 0x2496, 0x2497, 0x0029, 0x0029, 0x0029, 0x0029,
- 0x0029, 0x0029, 0x0029, 0x0029, 0x0029, 0x0029, 0x2192, 0x2190,
- 0x2191, 0x2193, 0x2196, 0x2197, 0x2198, 0x2199, 0x21D0, 0x21CF,
- 0x21CD, 0x21D4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x2794, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x279C, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x27BA, 0x0000, 0x0000, 0x0000, 0x0000, 0x21D1, 0x21D3,
- 0x0000, 0x279E, 0x0000, 0x0000, 0x0000, 0x279E, 0x0000, 0x0000,
- 0x21B5, 0x21B1, 0x0000, 0x21B4, 0x21B0, 0x21B3, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x21E6, 0x21E8, 0x21E7, 0x21E9, 0x21BC, 0x21C0, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x21C0, 0x21BC, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x21C4, 0x21C5, 0x002E, 0x002E, 0x002E, 0x002E, 0x002E, 0x002E,
- 0x002E, 0x002E, 0x002E, 0x002E, 0x002E, 0x002E, 0x002E, 0x002E,
- 0x002E, 0x002E, 0x002E, 0x002E, 0x002E, 0x002E, 0x002E, 0x002E,
- 0x002E, 0x002E, 0x002E, 0x002E, 0x002E, 0x002E, 0x002E, 0x002E,
- 0x002E, 0x002E, 0x002E, 0x002E, 0x002E, 0x002E, 0x002E, 0x002E,
- 0x002E, 0x002E, 0x002E, 0x002E, 0x002E, 0x002E, 0x002E, 0x002E,
- 0x002E, 0x002E, 0x002E, 0x002E, 0x002E, 0x002E, 0x20DE, 0x20DE,
- 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE,
- 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE,
- 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE,
- 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE,
- 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE,
- 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE,
- 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE,
- 0x20DE, 0x20DE, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD,
- 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD,
- 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD,
- 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD,
- 0x20DD, 0x20DD, 0x2483, 0x2484, 0x2485, 0x2486, 0x2487, 0x0029,
- 0x0029, 0x0029, 0x0029, 0x0029, 0x0029, 0x20DD, 0x20DD, 0x20DD,
- 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD,
- 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD,
- 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD,
- 0x3294, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD,
- 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD,
- 0x32A5, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD,
- 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD,
- 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD,
- 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD,
- 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD,
- 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD,
- 0x20DD, 0x0029, 0x0029, 0x0029, 0x0029, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x2794, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x21E0, 0x21E1,
- 0x21E2, 0x21E3, 0x0000, 0x27A1, 0x0000, 0x0000, 0x21E6, 0x21E8,
- 0x21E7, 0x21E9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x261D, 0x261F,
- 0x0000, 0x0000, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD,
- 0x20DD, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE,
- 0x20DE, 0x20DE, 0x005D, 0x005D, 0x005D, 0x005D, 0x005D, 0x005D,
- 0x005D, 0x005D, 0x005D, 0x005D, 0x005D, 0x20DE, 0x20DE, 0x20DE,
- 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x005D,
- 0x005D, 0x005D, 0x005D, 0x005D, 0x005D, 0x005D, 0x005D, 0x005D,
- 0x005D, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE,
- 0x20DE, 0x20DE, 0x20DE, 0x005D, 0x005D, 0x005D, 0x005D, 0x005D,
- 0x005D, 0x005D, 0x005D, 0x005D, 0x005D, 0x20DE, 0x20DE, 0x20DE,
- 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x3290, 0x328A, 0x328B, 0x328C,
- 0x328D, 0x328E, 0x328F, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE,
- 0x20DE, 0x20DE, 0x300C, 0x300D, 0x300E, 0x300F, 0x21E8, 0x21E6,
- 0x21E7, 0x21E9, 0x0022, 0x301F, 0x301D, 0x2036, 0x0060, 0x3001,
- 0x0000, 0x0021, 0x3021, 0x002C, 0x3002, 0xAC02, 0xAC03, 0xAC05,
- 0xAC06, 0xAC0B, 0xAC0C, 0xAC0D, 0xAC0E, 0xAC0F, 0xAC18, 0xAC1E,
- 0xAC1F, 0xAC21, 0xAC22, 0xAC23, 0xAC25, 0xAC26, 0xAC27, 0xAC28,
- 0xAC29, 0xAC2A, 0xAC2B, 0xAC2E, 0xAC32, 0xAC33, 0xAC34, 0xAC35,
- 0xAC36, 0xAC37, 0xAC3A, 0xAC3B, 0xAC3D, 0xAC3E, 0xAC3F, 0xAC41,
- 0xAC42, 0xAC43, 0xAC44, 0xAC45, 0xAC46, 0xAC47, 0xAC48, 0xAC49,
- 0xAC4A, 0xAC4C, 0xAC4E, 0xAC4F, 0xAC50, 0xAC51, 0xAC52, 0xAC53,
- 0xAC55, 0xAC56, 0xAC57, 0xAC59, 0xAC5A, 0xAC5B, 0xAC5D, 0xAC5E,
- 0xAC5F, 0xAC60, 0xAC61, 0xAC62, 0xAC63, 0xAC64, 0xAC65, 0xAC66,
- 0xAC67, 0xAC68, 0xAC69, 0xAC6A, 0xAC6B, 0xAC6C, 0xAC6D, 0xAC6E,
- 0xAC6F, 0xAC72, 0xAC73, 0xAC75, 0xAC76, 0xAC79, 0xAC7B, 0xAC7C,
- 0xAC7D, 0xAC7E, 0xAC7F, 0xAC82, 0xAC87, 0xAC88, 0xAC8D, 0xAC8E,
- 0xAC8F, 0xAC91, 0xAC92, 0xAC93, 0xAC95, 0xAC96, 0xAC97, 0xAC98,
- 0xAC99, 0xAC9A, 0xAC9B, 0xAC9E, 0xACA2, 0xACA3, 0xACA4, 0xACA5,
- 0xACA6, 0xACA7, 0xACAB, 0xACAD, 0xACAE, 0xACB1, 0xACB2, 0xACB3,
- 0xACB4, 0xACB5, 0xACB6, 0xACB7, 0xACBA, 0xACBE, 0xACBF, 0xACC0,
- 0xACC2, 0xACC3, 0xACC5, 0xACC6, 0xACC7, 0xACC9, 0xACCA, 0xACCB,
- 0xACCD, 0xACCE, 0xACCF, 0xACD0, 0xACD1, 0xACD2, 0xACD3, 0xACD4,
- 0xACD6, 0xACD8, 0xACD9, 0xACDA, 0xACDB, 0xACDC, 0xACDD, 0xACDE,
- 0xACDF, 0xACE2, 0xACE3, 0xACE5, 0xACE6, 0xACE9, 0xACEB, 0xACED,
- 0xACEE, 0xACF2, 0xACF4, 0xACF7, 0xACF8, 0xACF9, 0xACFA, 0xACFB,
- 0xACFE, 0xACFF, 0xAD01, 0xAD02, 0xAD03, 0xAD05, 0xAD07, 0xAD08,
- 0xAD09, 0xAD0A, 0xAD0B, 0xAD0E, 0xAD10, 0xAD12, 0xAD13, 0xAD14,
- 0xAD15, 0xAD16, 0xAD17, 0xAD19, 0xAD1A, 0xAD1B, 0xAD1D, 0xAD1E,
- 0xAD1F, 0xAD21, 0xAD22, 0xAD23, 0xAD24, 0xAD25, 0xAD26, 0xAD27,
- 0xAD28, 0xAD2A, 0xAD2B, 0xAD2E, 0xAD2F, 0xAD30, 0xAD31, 0xAD32,
- 0xAD33, 0xAD36, 0xAD37, 0xAD39, 0xAD3A, 0xAD3B, 0xAD3D, 0xAD3E,
- 0xAD3F, 0xAD40, 0xAD41, 0xAD42, 0xAD43, 0xAD46, 0xAD48, 0xAD4A,
- 0xAD4B, 0xAD4C, 0xAD4D, 0xAD4E, 0xAD4F, 0xAD51, 0xAD52, 0xAD53,
- 0xAD55, 0xAD56, 0xAD57, 0xAD59, 0xAD5A, 0xAD5B, 0xAD5C, 0xAD5D,
- 0xAD5E, 0xAD5F, 0xAD60, 0xAD62, 0xAD64, 0xAD65, 0xAD66, 0xAD67,
- 0xAD68, 0xAD69, 0xAD6A, 0xAD6B, 0xAD6E, 0xAD6F, 0xAD71, 0xAD72,
- 0xAD77, 0xAD78, 0xAD79, 0xAD7A, 0xAD7E, 0xAD80, 0xAD83, 0xAD84,
- 0xAD85, 0xAD86, 0xAD87, 0xAD8A, 0xAD8B, 0xAD8D, 0xAD8E, 0xAD8F,
- 0xAD91, 0xAD92, 0xAD93, 0xAD94, 0xAD95, 0xAD96, 0xAD97, 0xAD98,
- 0xAD99, 0xAD9A, 0xAD9B, 0xAD9E, 0xAD9F, 0xADA0, 0xADA1, 0xADA2,
- 0xADA3, 0xADA5, 0xADA6, 0xADA7, 0xADA8, 0xADA9, 0xADAA, 0xADAB,
- 0xADAC, 0xADAD, 0xADAE, 0xADAF, 0xADB0, 0xADB1, 0xADB2, 0xADB3,
- 0xADB4, 0xADB5, 0xADB6, 0xADB8, 0xADB9, 0xADBA, 0xADBB, 0xADBC,
- 0xADBD, 0xADBE, 0xADBF, 0xADC2, 0xADC3, 0xADC5, 0xADC6, 0xADC7,
- 0xADC9, 0xADCA, 0xADCB, 0xADCC, 0xADCD, 0xADCE, 0xADCF, 0xADD2,
- 0xADD4, 0xADD5, 0xADD6, 0xADD7, 0xADD8, 0xADD9, 0xADDA, 0xADDB,
- 0xADDD, 0xADDE, 0xADDF, 0xADE1, 0xADE2, 0xADE3, 0xADE5, 0xADE6,
- 0xADE7, 0xADE8, 0xADE9, 0xADEA, 0xADEB, 0xADEC, 0xADED, 0xADEE,
- 0xADEF, 0xADF0, 0xADF1, 0xADF2, 0xADF3, 0xADF4, 0xADF5, 0xADF6,
- 0xADF7, 0xADFA, 0xADFB, 0xADFD, 0xADFE, 0xAE02, 0xAE03, 0xAE04,
- 0xAE05, 0xAE06, 0xAE07, 0xAE0A, 0xAE0C, 0xAE0E, 0xAE0F, 0xAE10,
- 0xAE11, 0xAE12, 0xAE13, 0xAE15, 0xAE16, 0xAE17, 0xAE18, 0xAE19,
- 0xAE1A, 0xAE1B, 0xAE1C, 0xAE1D, 0xAE1E, 0xAE1F, 0xAE20, 0xAE21,
- 0xAE22, 0xAE23, 0xAE24, 0xAE25, 0xAE26, 0xAE27, 0xAE28, 0xAE29,
- 0xAE2A, 0xAE2B, 0xAE2C, 0xAE2D, 0xAE2E, 0xAE2F, 0xAE32, 0xAE33,
- 0xAE35, 0xAE36, 0xAE39, 0xAE3B, 0xAE3C, 0xAE3D, 0xAE3E, 0xAE3F,
- 0xAE42, 0xAE44, 0xAE47, 0xAE48, 0xAE49, 0xAE4B, 0xAE4F, 0xAE51,
- 0xAE52, 0xAE53, 0xAE55, 0xAE57, 0xAE58, 0xAE59, 0xAE5A, 0xAE5B,
- 0xAE5E, 0xAE62, 0xAE63, 0xAE64, 0xAE66, 0xAE67, 0xAE6A, 0xAE6B,
- 0xAE6D, 0xAE6E, 0xAE6F, 0xAE71, 0xAE72, 0xAE73, 0xAE74, 0xAE75,
- 0xAE76, 0xAE77, 0xAE7A, 0xAE7E, 0xAE7F, 0xAE80, 0xAE81, 0xAE82,
- 0xAE83, 0xAE86, 0xAE87, 0xAE88, 0xAE89, 0xAE8A, 0xAE8B, 0xAE8D,
- 0xAE8E, 0xAE8F, 0xAE90, 0xAE91, 0xAE92, 0xAE93, 0xAE94, 0xAE95,
- 0xAE96, 0xAE97, 0xAE98, 0xAE99, 0xAE9A, 0xAE9B, 0xAE9C, 0xAE9D,
- 0xAE9E, 0xAE9F, 0xAEA0, 0xAEA1, 0xAEA2, 0xAEA3, 0xAEA4, 0xAEA5,
- 0xAEA6, 0xAEA7, 0xAEA8, 0xAEA9, 0xAEAA, 0xAEAB, 0xAEAC, 0xAEAD,
- 0xAEAE, 0xAEAF, 0xAEB0, 0xAEB1, 0xAEB2, 0xAEB3, 0xAEB4, 0xAEB5,
- 0xAEB6, 0xAEB7, 0xAEB8, 0xAEB9, 0xAEBA, 0xAEBB, 0xAEBF, 0xAEC1,
- 0xAEC2, 0xAEC3, 0xAEC5, 0xAEC6, 0xAEC7, 0xAEC8, 0xAEC9, 0xAECA,
- 0xAECB, 0xAECE, 0xAED2, 0xAED3, 0xAED4, 0xAED5, 0xAED6, 0xAED7,
- 0xAEDA, 0xAEDB, 0xAEDD, 0xAEDE, 0xAEDF, 0xAEE0, 0xAEE1, 0xAEE2,
- 0xAEE3, 0xAEE4, 0xAEE5, 0xAEE6, 0xAEE7, 0xAEE9, 0xAEEA, 0xAEEC,
- 0xAEEE, 0xAEEF, 0xAEF0, 0xAEF1, 0xAEF2, 0xAEF3, 0xAEF5, 0xAEF6,
- 0xAEF7, 0xAEF9, 0xAEFA, 0xAEFB, 0xAEFD, 0xAEFE, 0xAEFF, 0xAF00,
- 0xAF01, 0xAF02, 0xAF03, 0xAF04, 0xAF05, 0xAF06, 0xAF09, 0xAF0A,
- 0xAF0B, 0xAF0C, 0xAF0E, 0xAF0F, 0xAF11, 0xAF12, 0xAF13, 0xAF14,
- 0xAF15, 0xAF16, 0xAF17, 0xAF18, 0xAF19, 0xAF1A, 0xAF1B, 0xAF1C,
- 0xAF1D, 0xAF1E, 0xAF1F, 0xAF20, 0xAF21, 0xAF22, 0xAF23, 0xAF24,
- 0xAF25, 0xAF26, 0xAF27, 0xAF28, 0xAF29, 0xAF2A, 0xAF2B, 0xAF2E,
- 0xAF2F, 0xAF31, 0xAF33, 0xAF35, 0xAF36, 0xAF37, 0xAF38, 0xAF39,
- 0xAF3A, 0xAF3B, 0xAF3E, 0xAF40, 0xAF44, 0xAF45, 0xAF46, 0xAF47,
- 0xAF4A, 0xAF4B, 0xAF4C, 0xAF4D, 0xAF4E, 0xAF4F, 0xAF51, 0xAF52,
- 0xAF53, 0xAF54, 0xAF55, 0xAF56, 0xAF57, 0xAF58, 0xAF59, 0xAF5A,
- 0xAF5B, 0xAF5E, 0xAF5F, 0xAF60, 0xAF61, 0xAF62, 0xAF63, 0xAF66,
- 0xAF67, 0xAF68, 0xAF69, 0xAF6A, 0xAF6B, 0xAF6C, 0xAF6D, 0xAF6E,
- 0xAF6F, 0xAF70, 0xAF71, 0xAF72, 0xAF73, 0xAF74, 0xAF75, 0xAF76,
- 0xAF77, 0xAF78, 0xAF7A, 0xAF7B, 0xAF7C, 0xAF7D, 0xAF7E, 0xAF7F,
- 0xAF81, 0xAF82, 0xAF83, 0xAF85, 0xAF86, 0xAF87, 0xAF89, 0xAF8A,
- 0xAF8B, 0xAF8C, 0xAF8D, 0xAF8E, 0xAF8F, 0xAF92, 0xAF93, 0xAF94,
- 0xAF96, 0xAF97, 0xAF98, 0xAF99, 0xAF9A, 0xAF9B, 0xAF9D, 0xAF9E,
- 0xAF9F, 0xAFA0, 0xAFA1, 0xAFA2, 0xAFA3, 0xAFA4, 0xAFA5, 0xAFA6,
- 0xAFA7, 0xAFA8, 0xAFA9, 0xAFAA, 0xAFAB, 0xAFAC, 0xAFAD, 0xAFAE,
- 0xAFAF, 0xAFB0, 0xAFB1, 0xAFB2, 0xAFB3, 0xAFB4, 0xAFB5, 0xAFB6,
- 0xAFB7, 0xAFBA, 0xAFBB, 0xAFBD, 0xAFBE, 0xAFBF, 0xAFC1, 0xAFC2,
- 0xAFC3, 0xAFC4, 0xAFC5, 0xAFC6, 0xAFCA, 0xAFCC, 0xAFCF, 0xAFD0,
- 0xAFD1, 0xAFD2, 0xAFD3, 0xAFD5, 0xAFD6, 0xAFD7, 0xAFD8, 0xAFD9,
- 0xAFDA, 0xAFDB, 0xAFDD, 0xAFDE, 0xAFDF, 0xAFE0, 0xAFE1, 0xAFE2,
- 0xAFE3, 0xAFE4, 0xAFE5, 0xAFE6, 0xAFE7, 0xAFEA, 0xAFEB, 0xAFEC,
- 0xAFED, 0xAFEE, 0xAFEF, 0xAFF2, 0xAFF3, 0xAFF5, 0xAFF6, 0xAFF7,
- 0xAFF9, 0xAFFA, 0xAFFB, 0xAFFC, 0xAFFD, 0xAFFE, 0xAFFF, 0xB002,
- 0xB003, 0xB005, 0xB006, 0xB007, 0xB008, 0xB009, 0xB00A, 0xB00B,
- 0xB00D, 0xB00E, 0xB00F, 0xB011, 0xB012, 0xB013, 0xB015, 0xB016,
- 0xB017, 0xB018, 0xB019, 0xB01A, 0xB01B, 0xB01E, 0xB01F, 0xB020,
- 0xB021, 0xB022, 0xB023, 0xB024, 0xB025, 0xB026, 0xB027, 0xB029,
- 0xB02A, 0xB02B, 0xB02C, 0xB02D, 0xB02E, 0xB02F, 0xB030, 0xB031,
- 0xB032, 0xB033, 0xB034, 0xB035, 0xB036, 0xB037, 0xB038, 0xB039,
- 0xB03A, 0xB03B, 0xB03C, 0xB03D, 0xB03E, 0xB03F, 0xB040, 0xB041,
- 0xB042, 0xB043, 0xB046, 0xB047, 0xB049, 0xB04B, 0xB04D, 0xB04F,
- 0xB050, 0xB051, 0xB052, 0xB056, 0xB058, 0xB05A, 0xB05B, 0xB05C,
- 0xB05E, 0xB05F, 0xB060, 0xB061, 0xB062, 0xB063, 0xB064, 0xB065,
- 0xB066, 0xB067, 0xB068, 0xB069, 0xB06A, 0xB06B, 0xB06C, 0xB06D,
- 0xB06E, 0xB06F, 0xB070, 0xB071, 0xB072, 0xB073, 0xB074, 0xB075,
- 0xB076, 0xB077, 0xB078, 0xB079, 0xB07A, 0xB07B, 0xB07E, 0xB07F,
- 0xB081, 0xB082, 0xB083, 0xB085, 0xB086, 0xB087, 0xB088, 0xB089,
- 0xB08A, 0xB08B, 0xB08E, 0xB090, 0xB092, 0xB093, 0xB094, 0xB095,
- 0xB096, 0xB097, 0xB09B, 0xB09D, 0xB09E, 0xB0A3, 0xB0A4, 0xB0A5,
- 0xB0A6, 0xB0A7, 0xB0AA, 0xB0B0, 0xB0B2, 0xB0B6, 0xB0B7, 0xB0B9,
- 0xB0BA, 0xB0BB, 0xB0BD, 0xB0BE, 0xB0BF, 0xB0C0, 0xB0C1, 0xB0C2,
- 0xB0C3, 0xB0C6, 0xB0CA, 0xB0CB, 0xB0CC, 0xB0CD, 0xB0CE, 0xB0CF,
- 0xB0D2, 0xB0D3, 0xB0D5, 0xB0D6, 0xB0D7, 0xB0D9, 0xB0DA, 0xB0DB,
- 0xB0DC, 0xB0DD, 0xB0DE, 0xB0DF, 0xB0E1, 0xB0E2, 0xB0E3, 0xB0E4,
- 0xB0E6, 0xB0E7, 0xB0E8, 0xB0E9, 0xB0EA, 0xB0EB, 0xB0EC, 0xB0ED,
- 0xB0EE, 0xB0EF, 0xB0F0, 0xB0F1, 0xB0F2, 0xB0F3, 0xB0F4, 0xB0F5,
- 0xB0F6, 0xB0F7, 0xB0F8, 0xB0F9, 0xB0FA, 0xB0FB, 0xB0FC, 0xB0FD,
- 0xB0FE, 0xB0FF, 0xB100, 0xB101, 0xB102, 0xB103, 0xB104, 0xB105,
- 0xB106, 0xB107, 0xB10A, 0xB10D, 0xB10E, 0xB10F, 0xB111, 0xB114,
- 0xB115, 0xB116, 0xB117, 0xB11A, 0xB11E, 0xB11F, 0xB120, 0xB121,
- 0xB122, 0xB126, 0xB127, 0xB129, 0xB12A, 0xB12B, 0xB12D, 0xB12E,
- 0xB12F, 0xB130, 0xB131, 0xB132, 0xB133, 0xB136, 0xB13A, 0xB13B,
- 0xB13C, 0xB13D, 0xB13E, 0xB13F, 0xB142, 0xB143, 0xB145, 0xB146,
- 0xB147, 0xB149, 0xB14A, 0xB14B, 0xB14C, 0xB14D, 0xB14E, 0xB14F,
- 0xB152, 0xB153, 0xB156, 0xB157, 0xB159, 0xB15A, 0xB15B, 0xB15D,
- 0xB15E, 0xB15F, 0xB161, 0xB162, 0xB163, 0xB164, 0xB165, 0xB166,
- 0xB167, 0xB168, 0xB169, 0xB16A, 0xB16B, 0xB16C, 0xB16D, 0xB16E,
- 0xB16F, 0xB170, 0xB171, 0xB172, 0xB173, 0xB174, 0xB175, 0xB176,
- 0xB177, 0xB17A, 0xB17B, 0xB17D, 0xB17E, 0xB17F, 0xB181, 0xB183,
- 0xB184, 0xB185, 0xB186, 0xB187, 0xB18A, 0xB18C, 0xB18E, 0xB18F,
- 0xB190, 0xB191, 0xB195, 0xB196, 0xB197, 0xB199, 0xB19A, 0xB19B,
- 0xB19D, 0xB19E, 0xB19F, 0xB1A0, 0xB1A1, 0xB1A2, 0xB1A3, 0xB1A4,
- 0xB1A5, 0xB1A6, 0xB1A7, 0xB1A9, 0xB1AA, 0xB1AB, 0xB1AC, 0xB1AD,
- 0xB1AE, 0xB1AF, 0xB1B0, 0xB1B1, 0xB1B2, 0xB1B3, 0xB1B4, 0xB1B5,
- 0xB1B6, 0xB1B7, 0xB1B8, 0xB1B9, 0xB1BA, 0xB1BB, 0xB1BC, 0xB1BD,
- 0xB1BE, 0xB1BF, 0xB1C0, 0xB1C1, 0xB1C2, 0xB1C3, 0xB1C4, 0xB1C5,
- 0xB1C6, 0xB1C7, 0xB1C8, 0xB1C9, 0xB1CA, 0xB1CB, 0xB1CD, 0xB1CE,
- 0xB1CF, 0xB1D1, 0xB1D2, 0xB1D3, 0xB1D5, 0xB1D6, 0xB1D7, 0xB1D8,
- 0xB1D9, 0xB1DA, 0xB1DB, 0xB1DE, 0xB1E0, 0xB1E1, 0xB1E2, 0xB1E3,
- 0xB1E4, 0xB1E5, 0xB1E6, 0xB1E7, 0xB1EA, 0xB1EB, 0xB1ED, 0xB1EE,
- 0xB1EF, 0xB1F1, 0xB1F2, 0xB1F3, 0xB1F4, 0xB1F5, 0xB1F6, 0xB1F7,
- 0xB1F8, 0xB1FA, 0xB1FC, 0xB1FE, 0xB1FF, 0xB200, 0xB201, 0xB202,
- 0xB203, 0xB206, 0xB207, 0xB209, 0xB20A, 0xB20D, 0xB20E, 0xB20F,
- 0xB210, 0xB211, 0xB212, 0xB213, 0xB216, 0xB218, 0xB21A, 0xB21B,
- 0xB21C, 0xB21D, 0xB21E, 0xB21F, 0xB221, 0xB222, 0xB223, 0xB224,
- 0xB225, 0xB226, 0xB227, 0xB228, 0xB229, 0xB22A, 0xB22B, 0xB22C,
- 0xB22D, 0xB22E, 0xB22F, 0xB230, 0xB231, 0xB232, 0xB233, 0xB235,
- 0xB236, 0xB237, 0xB238, 0xB239, 0xB23A, 0xB23B, 0xB23D, 0xB23E,
- 0xB23F, 0xB240, 0xB241, 0xB242, 0xB243, 0xB244, 0xB245, 0xB246,
- 0xB247, 0xB248, 0xB249, 0xB24A, 0xB24B, 0xB24C, 0xB24D, 0xB24E,
- 0xB24F, 0xB250, 0xB251, 0xB252, 0xB253, 0xB254, 0xB255, 0xB256,
- 0xB257, 0xB259, 0xB25A, 0xB25B, 0xB25D, 0xB25E, 0xB25F, 0xB261,
- 0xB262, 0xB263, 0xB264, 0xB265, 0xB266, 0xB267, 0xB26A, 0xB26B,
- 0xB26C, 0xB26D, 0xB26E, 0xB26F, 0xB270, 0xB271, 0xB272, 0xB273,
- 0xB276, 0xB277, 0xB278, 0xB279, 0xB27A, 0xB27B, 0xB27D, 0xB27E,
- 0xB27F, 0xB280, 0xB281, 0xB282, 0xB283, 0xB286, 0xB287, 0xB288,
- 0xB28A, 0xB28B, 0xB28C, 0xB28D, 0xB28E, 0xB28F, 0xB292, 0xB293,
- 0xB295, 0xB296, 0xB297, 0xB29B, 0xB29C, 0xB29D, 0xB29E, 0xB29F,
- 0xB2A2, 0xB2A4, 0xB2A7, 0xB2A8, 0xB2A9, 0xB2AB, 0xB2AD, 0xB2AE,
- 0xB2AF, 0xB2B1, 0xB2B2, 0xB2B3, 0xB2B5, 0xB2B6, 0xB2B7, 0xB2B8,
- 0xB2B9, 0xB2BA, 0xB2BB, 0xB2BC, 0xB2BD, 0xB2BE, 0xB2BF, 0xB2C0,
- 0xB2C1, 0xB2C2, 0xB2C3, 0xB2C4, 0xB2C5, 0xB2C6, 0xB2C7, 0xB2CA,
- 0xB2CB, 0xB2CD, 0xB2CE, 0xB2CF, 0xB2D1, 0xB2D3, 0xB2D4, 0xB2D5,
- 0xB2D6, 0xB2D7, 0xB2DA, 0xB2DC, 0xB2DE, 0xB2DF, 0xB2E0, 0xB2E1,
- 0xB2E3, 0xB2E7, 0xB2E9, 0xB2EA, 0xB2F0, 0xB2F1, 0xB2F2, 0xB2F6,
- 0xB2FC, 0xB2FD, 0xB2FE, 0xB302, 0xB303, 0xB305, 0xB306, 0xB307,
- 0xB309, 0xB30A, 0xB30B, 0xB30C, 0xB30D, 0xB30E, 0xB30F, 0xB312,
- 0xB316, 0xB317, 0xB318, 0xB319, 0xB31A, 0xB31B, 0xB31D, 0xB31E,
- 0xB31F, 0xB320, 0xB321, 0xB322, 0xB323, 0xB324, 0xB325, 0xB326,
- 0xB327, 0xB328, 0xB329, 0xB32A, 0xB32B, 0xB32C, 0xB32D, 0xB32E,
- 0xB32F, 0xB330, 0xB331, 0xB332, 0xB333, 0xB334, 0xB335, 0xB336,
- 0xB337, 0xB338, 0xB339, 0xB33A, 0xB33B, 0xB33C, 0xB33D, 0xB33E,
- 0xB33F, 0xB340, 0xB341, 0xB342, 0xB343, 0xB344, 0xB345, 0xB346,
- 0xB347, 0xB348, 0xB349, 0xB34A, 0xB34B, 0xB34C, 0xB34D, 0xB34E,
- 0xB34F, 0xB350, 0xB351, 0xB352, 0xB353, 0xB357, 0xB359, 0xB35A,
- 0xB35D, 0xB360, 0xB361, 0xB362, 0xB363, 0xB366, 0xB368, 0xB36A,
- 0xB36C, 0xB36D, 0xB36F, 0xB372, 0xB373, 0xB375, 0xB376, 0xB377,
- 0xB379, 0xB37A, 0xB37B, 0xB37C, 0xB37D, 0xB37E, 0xB37F, 0xB382,
- 0xB386, 0xB387, 0xB388, 0xB389, 0xB38A, 0xB38B, 0xB38D, 0xB38E,
- 0xB38F, 0xB391, 0xB392, 0xB393, 0xB395, 0xB396, 0xB397, 0xB398,
- 0xB399, 0xB39A, 0xB39B, 0xB39C, 0xB39D, 0xB39E, 0xB39F, 0xB3A2,
- 0xB3A3, 0xB3A4, 0xB3A5, 0xB3A6, 0xB3A7, 0xB3A9, 0xB3AA, 0xB3AB,
- 0xB3AD, 0xB3AE, 0xB3AF, 0xB3B0, 0xB3B1, 0xB3B2, 0xB3B3, 0xB3B4,
- 0xB3B5, 0xB3B6, 0xB3B7, 0xB3B8, 0xB3B9, 0xB3BA, 0xB3BB, 0xB3BC,
- 0xB3BD, 0xB3BE, 0xB3BF, 0xB3C0, 0xB3C1, 0xB3C2, 0xB3C3, 0xB3C6,
- 0xB3C7, 0xB3C9, 0xB3CA, 0xB3CD, 0xB3CF, 0xB3D1, 0xB3D2, 0xB3D3,
- 0xB3D6, 0xB3D8, 0xB3DA, 0xB3DC, 0xB3DE, 0xB3DF, 0xB3E1, 0xB3E2,
- 0xB3E3, 0xB3E5, 0xB3E6, 0xB3E7, 0xB3E9, 0xB3EA, 0xB3EB, 0xB3EC,
- 0xB3ED, 0xB3EE, 0xB3EF, 0xB3F0, 0xB3F1, 0xB3F2, 0xB3F3, 0xB3F4,
- 0xB3F5, 0xB3F6, 0xB3F7, 0xB3F8, 0xB3F9, 0xB3FA, 0xB3FB, 0xB3FD,
- 0xB3FE, 0xB3FF, 0xB400, 0xB401, 0xB402, 0xB403, 0xB404, 0xB405,
- 0xB406, 0xB407, 0xB408, 0xB409, 0xB40A, 0xB40B, 0xB40C, 0xB40D,
- 0xB40E, 0xB40F, 0xB411, 0xB412, 0xB413, 0xB414, 0xB415, 0xB416,
- 0xB417, 0xB419, 0xB41A, 0xB41B, 0xB41D, 0xB41E, 0xB41F, 0xB421,
- 0xB422, 0xB423, 0xB424, 0xB425, 0xB426, 0xB427, 0xB42A, 0xB42C,
- 0xB42D, 0xB42E, 0xB42F, 0xB430, 0xB431, 0xB432, 0xB433, 0xB435,
- 0xB436, 0xB437, 0xB438, 0xB439, 0xB43A, 0xB43B, 0xB43C, 0xB43D,
- 0xB43E, 0xB43F, 0xB440, 0xB441, 0xB442, 0xB443, 0xB444, 0xB445,
- 0xB446, 0xB447, 0xB448, 0xB449, 0xB44A, 0xB44B, 0xB44C, 0xB44D,
- 0xB44E, 0xB44F, 0xB452, 0xB453, 0xB455, 0xB456, 0xB457, 0xB459,
- 0xB45A, 0xB45B, 0xB45C, 0xB45D, 0xB45E, 0xB45F, 0xB462, 0xB464,
- 0xB466, 0xB467, 0xB468, 0xB469, 0xB46A, 0xB46B, 0xB46D, 0xB46E,
- 0xB46F, 0xB470, 0xB471, 0xB472, 0xB473, 0xB474, 0xB475, 0xB476,
- 0xB477, 0xB478, 0xB479, 0xB47A, 0xB47B, 0xB47C, 0xB47D, 0xB47E,
- 0xB47F, 0xB481, 0xB482, 0xB483, 0xB484, 0xB485, 0xB486, 0xB487,
- 0xB489, 0xB48A, 0xB48B, 0xB48C, 0xB48D, 0xB48E, 0xB48F, 0xB490,
- 0xB491, 0xB492, 0xB493, 0xB494, 0xB495, 0xB496, 0xB497, 0xB498,
- 0xB499, 0xB49A, 0xB49B, 0xB49C, 0xB49E, 0xB49F, 0xB4A0, 0xB4A1,
- 0xB4A2, 0xB4A3, 0xB4A5, 0xB4A6, 0xB4A7, 0xB4A9, 0xB4AA, 0xB4AB,
- 0xB4AD, 0xB4AE, 0xB4AF, 0xB4B0, 0xB4B1, 0xB4B2, 0xB4B3, 0xB4B4,
- 0xB4B6, 0xB4B8, 0xB4BA, 0xB4BB, 0xB4BC, 0xB4BD, 0xB4BE, 0xB4BF,
- 0xB4C1, 0xB4C2, 0xB4C3, 0xB4C5, 0xB4C6, 0xB4C7, 0xB4C9, 0xB4CA,
- 0xB4CB, 0xB4CC, 0xB4CD, 0xB4CE, 0xB4CF, 0xB4D1, 0xB4D2, 0xB4D3,
- 0xB4D4, 0xB4D6, 0xB4D7, 0xB4D8, 0xB4D9, 0xB4DA, 0xB4DB, 0xB4DE,
- 0xB4DF, 0xB4E1, 0xB4E2, 0xB4E5, 0xB4E7, 0xB4E8, 0xB4E9, 0xB4EA,
- 0xB4EB, 0xB4EE, 0xB4F0, 0xB4F2, 0xB4F3, 0xB4F4, 0xB4F5, 0xB4F6,
- 0xB4F7, 0xB4F9, 0xB4FA, 0xB4FB, 0xB4FC, 0xB4FD, 0xB4FE, 0xB4FF,
- 0xB500, 0xB501, 0xB502, 0xB503, 0xB504, 0xB505, 0xB506, 0xB507,
- 0xB508, 0xB509, 0xB50A, 0xB50B, 0xB50C, 0xB50D, 0xB50E, 0xB50F,
- 0xB510, 0xB511, 0xB512, 0xB513, 0xB516, 0xB517, 0xB519, 0xB51A,
- 0xB51D, 0xB51E, 0xB51F, 0xB520, 0xB521, 0xB522, 0xB523, 0xB526,
- 0xB52B, 0xB52C, 0xB52D, 0xB52E, 0xB52F, 0xB532, 0xB533, 0xB535,
- 0xB536, 0xB537, 0xB539, 0xB53A, 0xB53B, 0xB53C, 0xB53D, 0xB53E,
- 0xB53F, 0xB542, 0xB546, 0xB547, 0xB548, 0xB549, 0xB54A, 0xB54E,
- 0xB54F, 0xB551, 0xB552, 0xB553, 0xB555, 0xB556, 0xB557, 0xB558,
- 0xB559, 0xB55A, 0xB55B, 0xB55E, 0xB562, 0xB563, 0xB564, 0xB565,
- 0xB566, 0xB567, 0xB568, 0xB569, 0xB56A, 0xB56B, 0xB56C, 0xB56D,
- 0xB56E, 0xB56F, 0xB570, 0xB571, 0xB572, 0xB573, 0xB574, 0xB575,
- 0xB576, 0xB577, 0xB578, 0xB579, 0xB57A, 0xB57B, 0xB57C, 0xB57D,
- 0xB57E, 0xB57F, 0xB580, 0xB581, 0xB582, 0xB583, 0xB584, 0xB585,
- 0xB586, 0xB587, 0xB588, 0xB589, 0xB58A, 0xB58B, 0xB58C, 0xB58D,
- 0xB58E, 0xB58F, 0xB590, 0xB591, 0xB592, 0xB593, 0xB594, 0xB595,
- 0xB596, 0xB597, 0xB598, 0xB599, 0xB59A, 0xB59B, 0xB59C, 0xB59D,
- 0xB59E, 0xB59F, 0xB5A2, 0xB5A3, 0xB5A5, 0xB5A6, 0xB5A7, 0xB5A9,
- 0xB5AC, 0xB5AD, 0xB5AE, 0xB5AF, 0xB5B2, 0xB5B6, 0xB5B7, 0xB5B8,
- 0xB5B9, 0xB5BA, 0xB5BE, 0xB5BF, 0xB5C1, 0xB5C2, 0xB5C3, 0xB5C5,
- 0xB5C6, 0xB5C7, 0xB5C8, 0xB5C9, 0xB5CA, 0xB5CB, 0xB5CE, 0xB5D2,
- 0xB5D3, 0xB5D4, 0xB5D5, 0xB5D6, 0xB5D7, 0xB5D9, 0xB5DA, 0xB5DB,
- 0xB5DC, 0xB5DD, 0xB5DE, 0xB5DF, 0xB5E0, 0xB5E1, 0xB5E2, 0xB5E3,
- 0xB5E4, 0xB5E5, 0xB5E6, 0xB5E7, 0xB5E8, 0xB5E9, 0xB5EA, 0xB5EB,
- 0xB5ED, 0xB5EE, 0xB5EF, 0xB5F0, 0xB5F1, 0xB5F2, 0xB5F3, 0xB5F4,
- 0xB5F5, 0xB5F6, 0xB5F7, 0xB5F8, 0xB5F9, 0xB5FA, 0xB5FB, 0xB5FC,
- 0xB5FD, 0xB5FE, 0xB5FF, 0xB600, 0xB601, 0xB602, 0xB603, 0xB604,
- 0xB605, 0xB606, 0xB607, 0xB608, 0xB609, 0xB60A, 0xB60B, 0xB60C,
- 0xB60D, 0xB60E, 0xB60F, 0xB612, 0xB613, 0xB615, 0xB616, 0xB617,
- 0xB619, 0xB61A, 0xB61B, 0xB61C, 0xB61D, 0xB61E, 0xB61F, 0xB620,
- 0xB621, 0xB622, 0xB623, 0xB624, 0xB626, 0xB627, 0xB628, 0xB629,
- 0xB62A, 0xB62B, 0xB62D, 0xB62E, 0xB62F, 0xB630, 0xB631, 0xB632,
- 0xB633, 0xB635, 0xB636, 0xB637, 0xB638, 0xB639, 0xB63A, 0xB63B,
- 0xB63C, 0xB63D, 0xB63E, 0xB63F, 0xB640, 0xB641, 0xB642, 0xB643,
- 0xB644, 0xB645, 0xB646, 0xB647, 0xB649, 0xB64A, 0xB64B, 0xB64C,
- 0xB64D, 0xB64E, 0xB64F, 0xB650, 0xB651, 0xB652, 0xB653, 0xB654,
- 0xB655, 0xB656, 0xB657, 0xB658, 0xB659, 0xB65A, 0xB65B, 0xB65C,
- 0xB65D, 0xB65E, 0xB65F, 0xB660, 0xB661, 0xB662, 0xB663, 0xB665,
- 0xB666, 0xB667, 0xB669, 0xB66A, 0xB66B, 0xB66C, 0xB66D, 0xB66E,
- 0xB66F, 0xB670, 0xB671, 0xB672, 0xB673, 0xB674, 0xB675, 0xB676,
- 0xB677, 0xB678, 0xB679, 0xB67A, 0xB67B, 0xB67C, 0xB67D, 0xB67E,
- 0xB67F, 0xB680, 0xB681, 0xB682, 0xB683, 0xB684, 0xB685, 0xB686,
- 0xB687, 0xB688, 0xB689, 0xB68A, 0xB68B, 0xB68C, 0xB68D, 0xB68E,
- 0xB68F, 0xB690, 0xB691, 0xB692, 0xB693, 0xB694, 0xB695, 0xB696,
- 0xB697, 0xB698, 0xB699, 0xB69A, 0xB69B, 0xB69E, 0xB69F, 0xB6A1,
- 0xB6A2, 0xB6A3, 0xB6A5, 0xB6A6, 0xB6A7, 0xB6A8, 0xB6A9, 0xB6AA,
- 0xB6AD, 0xB6AE, 0xB6AF, 0xB6B0, 0xB6B2, 0xB6B3, 0xB6B4, 0xB6B5,
- 0xB6B6, 0xB6B7, 0xB6B8, 0xB6B9, 0xB6BA, 0xB6BB, 0xB6BC, 0xB6BD,
- 0xB6BE, 0xB6BF, 0xB6C0, 0xB6C1, 0xB6C2, 0xB6C3, 0xB6C4, 0xB6C5,
- 0xB6C6, 0xB6C7, 0xB6C8, 0xB6C9, 0xB6CA, 0xB6CB, 0xB6CC, 0xB6CD,
- 0xB6CE, 0xB6CF, 0xB6D0, 0xB6D1, 0xB6D2, 0xB6D3, 0xB6D5, 0xB6D6,
- 0xB6D7, 0xB6D8, 0xB6D9, 0xB6DA, 0xB6DB, 0xB6DC, 0xB6DD, 0xB6DE,
- 0xB6DF, 0xB6E0, 0xB6E1, 0xB6E2, 0xB6E3, 0xB6E4, 0xB6E5, 0xB6E6,
- 0xB6E7, 0xB6E8, 0xB6E9, 0xB6EA, 0xB6EB, 0xB6EC, 0xB6ED, 0xB6EE,
- 0xB6EF, 0xB6F1, 0xB6F2, 0xB6F3, 0xB6F5, 0xB6F6, 0xB6F7, 0xB6F9,
- 0xB6FA, 0xB6FB, 0xB6FC, 0xB6FD, 0xB6FE, 0xB6FF, 0xB702, 0xB703,
- 0xB704, 0xB706, 0xB707, 0xB708, 0xB709, 0xB70A, 0xB70B, 0xB70C,
- 0xB70D, 0xB70E, 0xB70F, 0xB710, 0xB711, 0xB712, 0xB713, 0xB714,
- 0xB715, 0xB716, 0xB717, 0xB718, 0xB719, 0xB71A, 0xB71B, 0xB71C,
- 0xB71D, 0xB71E, 0xB71F, 0xB720, 0xB721, 0xB722, 0xB723, 0xB724,
- 0xB725, 0xB726, 0xB727, 0xB72A, 0xB72B, 0xB72D, 0xB72E, 0xB731,
- 0xB732, 0xB733, 0xB734, 0xB735, 0xB736, 0xB737, 0xB73A, 0xB73C,
- 0xB73D, 0xB73E, 0xB73F, 0xB740, 0xB741, 0xB742, 0xB743, 0xB745,
- 0xB746, 0xB747, 0xB749, 0xB74A, 0xB74B, 0xB74D, 0xB74E, 0xB74F,
- 0xB750, 0xB751, 0xB752, 0xB753, 0xB756, 0xB757, 0xB758, 0xB759,
- 0xB75A, 0xB75B, 0xB75C, 0xB75D, 0xB75E, 0xB75F, 0xB761, 0xB762,
- 0xB763, 0xB765, 0xB766, 0xB767, 0xB769, 0xB76A, 0xB76B, 0xB76C,
- 0xB76D, 0xB76E, 0xB76F, 0xB772, 0xB774, 0xB776, 0xB777, 0xB778,
- 0xB779, 0xB77A, 0xB77B, 0xB77E, 0xB77F, 0xB781, 0xB782, 0xB783,
- 0xB785, 0xB786, 0xB787, 0xB788, 0xB789, 0xB78A, 0xB78B, 0xB78E,
- 0xB793, 0xB794, 0xB795, 0xB79A, 0xB79B, 0xB79D, 0xB79E, 0xB79F,
- 0xB7A1, 0xB7A2, 0xB7A3, 0xB7A4, 0xB7A5, 0xB7A6, 0xB7A7, 0xB7AA,
- 0xB7AE, 0xB7AF, 0xB7B0, 0xB7B1, 0xB7B2, 0xB7B3, 0xB7B6, 0xB7B7,
- 0xB7B9, 0xB7BA, 0xB7BB, 0xB7BC, 0xB7BD, 0xB7BE, 0xB7BF, 0xB7C0,
- 0xB7C1, 0xB7C2, 0xB7C3, 0xB7C4, 0xB7C5, 0xB7C6, 0xB7C8, 0xB7CA,
- 0xB7CB, 0xB7CC, 0xB7CD, 0xB7CE, 0xB7CF, 0xB7D0, 0xB7D1, 0xB7D2,
- 0xB7D3, 0xB7D4, 0xB7D5, 0xB7D6, 0xB7D7, 0xB7D8, 0xB7D9, 0xB7DA,
- 0xB7DB, 0xB7DC, 0xB7DD, 0xB7DE, 0xB7DF, 0xB7E0, 0xB7E1, 0xB7E2,
- 0xB7E3, 0xB7E4, 0xB7E5, 0xB7E6, 0xB7E7, 0xB7E8, 0xB7E9, 0xB7EA,
- 0xB7EB, 0xB7EE, 0xB7EF, 0xB7F1, 0xB7F2, 0xB7F3, 0xB7F5, 0xB7F6,
- 0xB7F7, 0xB7F8, 0xB7F9, 0xB7FA, 0xB7FB, 0xB7FE, 0xB802, 0xB803,
- 0xB804, 0xB805, 0xB806, 0xB80A, 0xB80B, 0xB80D, 0xB80E, 0xB80F,
- 0xB811, 0xB812, 0xB813, 0xB814, 0xB815, 0xB816, 0xB817, 0xB81A,
- 0xB81C, 0xB81E, 0xB81F, 0xB820, 0xB821, 0xB822, 0xB823, 0xB826,
- 0xB827, 0xB829, 0xB82A, 0xB82B, 0xB82D, 0xB82E, 0xB82F, 0xB830,
- 0xB831, 0xB832, 0xB833, 0xB836, 0xB83A, 0xB83B, 0xB83C, 0xB83D,
- 0xB83E, 0xB83F, 0xB841, 0xB842, 0xB843, 0xB845, 0xB846, 0xB847,
- 0xB848, 0xB849, 0xB84A, 0xB84B, 0xB84C, 0xB84D, 0xB84E, 0xB84F,
- 0xB850, 0xB852, 0xB854, 0xB855, 0xB856, 0xB857, 0xB858, 0xB859,
- 0xB85A, 0xB85B, 0xB85E, 0xB85F, 0xB861, 0xB862, 0xB863, 0xB865,
- 0xB866, 0xB867, 0xB868, 0xB869, 0xB86A, 0xB86B, 0xB86E, 0xB870,
- 0xB872, 0xB873, 0xB874, 0xB875, 0xB876, 0xB877, 0xB879, 0xB87A,
- 0xB87B, 0xB87D, 0xB87E, 0xB87F, 0xB880, 0xB881, 0xB882, 0xB883,
- 0xB884, 0xB885, 0xB886, 0xB887, 0xB888, 0xB889, 0xB88A, 0xB88B,
- 0xB88C, 0xB88E, 0xB88F, 0xB890, 0xB891, 0xB892, 0xB893, 0xB894,
- 0xB895, 0xB896, 0xB897, 0xB898, 0xB899, 0xB89A, 0xB89B, 0xB89C,
- 0xB89D, 0xB89E, 0xB89F, 0xB8A0, 0xB8A1, 0xB8A2, 0xB8A3, 0xB8A4,
- 0xB8A5, 0xB8A6, 0xB8A7, 0xB8A9, 0xB8AA, 0xB8AB, 0xB8AC, 0xB8AD,
- 0xB8AE, 0xB8AF, 0xB8B1, 0xB8B2, 0xB8B3, 0xB8B5, 0xB8B6, 0xB8B7,
- 0xB8B9, 0xB8BA, 0xB8BB, 0xB8BC, 0xB8BD, 0xB8BE, 0xB8BF, 0xB8C2,
- 0xB8C4, 0xB8C6, 0xB8C7, 0xB8C8, 0xB8C9, 0xB8CA, 0xB8CB, 0xB8CD,
- 0xB8CE, 0xB8CF, 0xB8D1, 0xB8D2, 0xB8D3, 0xB8D5, 0xB8D6, 0xB8D7,
- 0xB8D8, 0xB8D9, 0xB8DA, 0xB8DB, 0xB8DC, 0xB8DE, 0xB8E0, 0xB8E2,
- 0xB8E3, 0xB8E4, 0xB8E5, 0xB8E6, 0xB8E7, 0xB8EA, 0xB8EB, 0xB8ED,
- 0xB8EE, 0xB8EF, 0xB8F1, 0xB8F2, 0xB8F3, 0xB8F4, 0xB8F5, 0xB8F6,
- 0xB8F7, 0xB8FA, 0xB8FC, 0xB8FE, 0xB8FF, 0xB900, 0xB901, 0xB902,
- 0xB903, 0xB905, 0xB906, 0xB907, 0xB908, 0xB909, 0xB90A, 0xB90B,
- 0xB90C, 0xB90D, 0xB90E, 0xB90F, 0xB910, 0xB911, 0xB912, 0xB913,
- 0xB914, 0xB915, 0xB916, 0xB917, 0xB919, 0xB91A, 0xB91B, 0xB91C,
- 0xB91D, 0xB91E, 0xB91F, 0xB921, 0xB922, 0xB923, 0xB924, 0xB925,
- 0xB926, 0xB927, 0xB928, 0xB929, 0xB92A, 0xB92B, 0xB92C, 0xB92D,
- 0xB92E, 0xB92F, 0xB930, 0xB931, 0xB932, 0xB933, 0xB934, 0xB935,
- 0xB936, 0xB937, 0xB938, 0xB939, 0xB93A, 0xB93B, 0xB93E, 0xB93F,
- 0xB941, 0xB942, 0xB943, 0xB945, 0xB946, 0xB947, 0xB948, 0xB949,
- 0xB94A, 0xB94B, 0xB94D, 0xB94E, 0xB950, 0xB952, 0xB953, 0xB954,
- 0xB955, 0xB956, 0xB957, 0xB95A, 0xB95B, 0xB95D, 0xB95E, 0xB95F,
- 0xB961, 0xB962, 0xB963, 0xB964, 0xB965, 0xB966, 0xB967, 0xB96A,
- 0xB96C, 0xB96E, 0xB96F, 0xB970, 0xB971, 0xB972, 0xB973, 0xB976,
- 0xB977, 0xB979, 0xB97A, 0xB97B, 0xB97D, 0xB97E, 0xB97F, 0xB980,
- 0xB981, 0xB982, 0xB983, 0xB986, 0xB988, 0xB98B, 0xB98C, 0xB98F,
- 0xB990, 0xB991, 0xB992, 0xB993, 0xB994, 0xB995, 0xB996, 0xB997,
- 0xB998, 0xB999, 0xB99A, 0xB99B, 0xB99C, 0xB99D, 0xB99E, 0xB99F,
- 0xB9A0, 0xB9A1, 0xB9A2, 0xB9A3, 0xB9A4, 0xB9A5, 0xB9A6, 0xB9A7,
- 0xB9A8, 0xB9A9, 0xB9AA, 0xB9AB, 0xB9AE, 0xB9AF, 0xB9B1, 0xB9B2,
- 0xB9B3, 0xB9B5, 0xB9B6, 0xB9B7, 0xB9B8, 0xB9B9, 0xB9BA, 0xB9BB,
- 0xB9BE, 0xB9C0, 0xB9C2, 0xB9C3, 0xB9C4, 0xB9C5, 0xB9C6, 0xB9C7,
- 0xB9CA, 0xB9CB, 0xB9CD, 0xB9D3, 0xB9D4, 0xB9D5, 0xB9D6, 0xB9D7,
- 0xB9DA, 0xB9DC, 0xB9DF, 0xB9E0, 0xB9E2, 0xB9E6, 0xB9E7, 0xB9E9,
- 0xB9EA, 0xB9EB, 0xB9ED, 0xB9EE, 0xB9EF, 0xB9F0, 0xB9F1, 0xB9F2,
- 0xB9F3, 0xB9F6, 0xB9FB, 0xB9FC, 0xB9FD, 0xB9FE, 0xB9FF, 0xBA02,
- 0xBA03, 0xBA04, 0xBA05, 0xBA06, 0xBA07, 0xBA09, 0xBA0A, 0xBA0B,
- 0xBA0C, 0xBA0D, 0xBA0E, 0xBA0F, 0xBA10, 0xBA11, 0xBA12, 0xBA13,
- 0xBA14, 0xBA16, 0xBA17, 0xBA18, 0xBA19, 0xBA1A, 0xBA1B, 0xBA1C,
- 0xBA1D, 0xBA1E, 0xBA1F, 0xBA20, 0xBA21, 0xBA22, 0xBA23, 0xBA24,
- 0xBA25, 0xBA26, 0xBA27, 0xBA28, 0xBA29, 0xBA2A, 0xBA2B, 0xBA2C,
- 0xBA2D, 0xBA2E, 0xBA2F, 0xBA30, 0xBA31, 0xBA32, 0xBA33, 0xBA34,
- 0xBA35, 0xBA36, 0xBA37, 0xBA3A, 0xBA3B, 0xBA3D, 0xBA3E, 0xBA3F,
- 0xBA41, 0xBA43, 0xBA44, 0xBA45, 0xBA46, 0xBA47, 0xBA4A, 0xBA4C,
- 0xBA4F, 0xBA50, 0xBA51, 0xBA52, 0xBA56, 0xBA57, 0xBA59, 0xBA5A,
- 0xBA5B, 0xBA5D, 0xBA5E, 0xBA5F, 0xBA60, 0xBA61, 0xBA62, 0xBA63,
- 0xBA66, 0xBA6A, 0xBA6B, 0xBA6C, 0xBA6D, 0xBA6E, 0xBA6F, 0xBA72,
- 0xBA73, 0xBA75, 0xBA76, 0xBA77, 0xBA79, 0xBA7A, 0xBA7B, 0xBA7C,
- 0xBA7D, 0xBA7E, 0xBA7F, 0xBA80, 0xBA81, 0xBA82, 0xBA86, 0xBA88,
- 0xBA89, 0xBA8A, 0xBA8B, 0xBA8D, 0xBA8E, 0xBA8F, 0xBA90, 0xBA91,
- 0xBA92, 0xBA93, 0xBA94, 0xBA95, 0xBA96, 0xBA97, 0xBA98, 0xBA99,
- 0xBA9A, 0xBA9B, 0xBA9C, 0xBA9D, 0xBA9E, 0xBA9F, 0xBAA0, 0xBAA1,
- 0xBAA2, 0xBAA3, 0xBAA4, 0xBAA5, 0xBAA6, 0xBAA7, 0xBAAA, 0xBAAD,
- 0xBAAE, 0xBAAF, 0xBAB1, 0xBAB3, 0xBAB4, 0xBAB5, 0xBAB6, 0xBAB7,
- 0xBABA, 0xBABC, 0xBABE, 0xBABF, 0xBAC0, 0xBAC1, 0xBAC2, 0xBAC3,
- 0xBAC5, 0xBAC6, 0xBAC7, 0xBAC9, 0xBACA, 0xBACB, 0xBACC, 0xBACD,
- 0xBACE, 0xBACF, 0xBAD0, 0xBAD1, 0xBAD2, 0xBAD3, 0xBAD4, 0xBAD5,
- 0xBAD6, 0xBAD7, 0xBADA, 0xBADB, 0xBADC, 0xBADD, 0xBADE, 0xBADF,
- 0xBAE0, 0xBAE1, 0xBAE2, 0xBAE3, 0xBAE4, 0xBAE5, 0xBAE6, 0xBAE7,
- 0xBAE8, 0xBAE9, 0xBAEA, 0xBAEB, 0xBAEC, 0xBAED, 0xBAEE, 0xBAEF,
- 0xBAF0, 0xBAF1, 0xBAF2, 0xBAF3, 0xBAF4, 0xBAF5, 0xBAF6, 0xBAF7,
- 0xBAF8, 0xBAF9, 0xBAFA, 0xBAFB, 0xBAFD, 0xBAFE, 0xBAFF, 0xBB01,
- 0xBB02, 0xBB03, 0xBB05, 0xBB06, 0xBB07, 0xBB08, 0xBB09, 0xBB0A,
- 0xBB0B, 0xBB0C, 0xBB0E, 0xBB10, 0xBB12, 0xBB13, 0xBB14, 0xBB15,
- 0xBB16, 0xBB17, 0xBB19, 0xBB1A, 0xBB1B, 0xBB1D, 0xBB1E, 0xBB1F,
- 0xBB21, 0xBB22, 0xBB23, 0xBB24, 0xBB25, 0xBB26, 0xBB27, 0xBB28,
- 0xBB2A, 0xBB2C, 0xBB2D, 0xBB2E, 0xBB2F, 0xBB30, 0xBB31, 0xBB32,
- 0xBB33, 0xBB37, 0xBB39, 0xBB3A, 0xBB3F, 0xBB40, 0xBB41, 0xBB42,
- 0xBB43, 0xBB46, 0xBB48, 0xBB4A, 0xBB4B, 0xBB4C, 0xBB4E, 0xBB51,
- 0xBB52, 0xBB53, 0xBB55, 0xBB56, 0xBB57, 0xBB59, 0xBB5A, 0xBB5B,
- 0xBB5C, 0xBB5D, 0xBB5E, 0xBB5F, 0xBB60, 0xBB62, 0xBB64, 0xBB65,
- 0xBB66, 0xBB67, 0xBB68, 0xBB69, 0xBB6A, 0xBB6B, 0xBB6D, 0xBB6E,
- 0xBB6F, 0xBB70, 0xBB71, 0xBB72, 0xBB73, 0xBB74, 0xBB75, 0xBB76,
- 0xBB77, 0xBB78, 0xBB79, 0xBB7A, 0xBB7B, 0xBB7C, 0xBB7D, 0xBB7E,
- 0xBB7F, 0xBB80, 0xBB81, 0xBB82, 0xBB83, 0xBB84, 0xBB85, 0xBB86,
- 0xBB87, 0xBB89, 0xBB8A, 0xBB8B, 0xBB8D, 0xBB8E, 0xBB8F, 0xBB91,
- 0xBB92, 0xBB93, 0xBB94, 0xBB95, 0xBB96, 0xBB97, 0xBB98, 0xBB99,
- 0xBB9A, 0xBB9B, 0xBB9C, 0xBB9D, 0xBB9E, 0xBB9F, 0xBBA0, 0xBBA1,
- 0xBBA2, 0xBBA3, 0xBBA5, 0xBBA6, 0xBBA7, 0xBBA9, 0xBBAA, 0xBBAB,
- 0xBBAD, 0xBBAE, 0xBBAF, 0xBBB0, 0xBBB1, 0xBBB2, 0xBBB3, 0xBBB5,
- 0xBBB6, 0xBBB8, 0xBBB9, 0xBBBA, 0xBBBB, 0xBBBC, 0xBBBD, 0xBBBE,
- 0xBBBF, 0xBBC1, 0xBBC2, 0xBBC3, 0xBBC5, 0xBBC6, 0xBBC7, 0xBBC9,
- 0xBBCA, 0xBBCB, 0xBBCC, 0xBBCD, 0xBBCE, 0xBBCF, 0xBBD1, 0xBBD2,
- 0xBBD4, 0xBBD5, 0xBBD6, 0xBBD7, 0xBBD8, 0xBBD9, 0xBBDA, 0xBBDB,
- 0xBBDC, 0xBBDD, 0xBBDE, 0xBBDF, 0xBBE0, 0xBBE1, 0xBBE2, 0xBBE3,
- 0xBBE4, 0xBBE5, 0xBBE6, 0xBBE7, 0xBBE8, 0xBBE9, 0xBBEA, 0xBBEB,
- 0xBBEC, 0xBBED, 0xBBEE, 0xBBEF, 0xBBF0, 0xBBF1, 0xBBF2, 0xBBF3,
- 0xBBF4, 0xBBF5, 0xBBF6, 0xBBF7, 0xBBFA, 0xBBFB, 0xBBFD, 0xBBFE,
- 0xBC01, 0xBC03, 0xBC04, 0xBC05, 0xBC06, 0xBC07, 0xBC0A, 0xBC0E,
- 0xBC10, 0xBC12, 0xBC13, 0xBC19, 0xBC1A, 0xBC20, 0xBC21, 0xBC22,
- 0xBC23, 0xBC26, 0xBC28, 0xBC2A, 0xBC2B, 0xBC2C, 0xBC2E, 0xBC2F,
- 0xBC32, 0xBC33, 0xBC35, 0xBC36, 0xBC37, 0xBC39, 0xBC3A, 0xBC3B,
- 0xBC3C, 0xBC3D, 0xBC3E, 0xBC3F, 0xBC42, 0xBC46, 0xBC47, 0xBC48,
- 0xBC4A, 0xBC4B, 0xBC4E, 0xBC4F, 0xBC51, 0xBC52, 0xBC53, 0xBC54,
- 0xBC55, 0xBC56, 0xBC57, 0xBC58, 0xBC59, 0xBC5A, 0xBC5B, 0xBC5C,
- 0xBC5E, 0xBC5F, 0xBC60, 0xBC61, 0xBC62, 0xBC63, 0xBC64, 0xBC65,
- 0xBC66, 0xBC67, 0xBC68, 0xBC69, 0xBC6A, 0xBC6B, 0xBC6C, 0xBC6D,
- 0xBC6E, 0xBC6F, 0xBC70, 0xBC71, 0xBC72, 0xBC73, 0xBC74, 0xBC75,
- 0xBC76, 0xBC77, 0xBC78, 0xBC79, 0xBC7A, 0xBC7B, 0xBC7C, 0xBC7D,
- 0xBC7E, 0xBC7F, 0xBC80, 0xBC81, 0xBC82, 0xBC83, 0xBC86, 0xBC87,
- 0xBC89, 0xBC8A, 0xBC8D, 0xBC8F, 0xBC90, 0xBC91, 0xBC92, 0xBC93,
- 0xBC96, 0xBC98, 0xBC9B, 0xBC9C, 0xBC9D, 0xBC9E, 0xBC9F, 0xBCA2,
- 0xBCA3, 0xBCA5, 0xBCA6, 0xBCA9, 0xBCAA, 0xBCAB, 0xBCAC, 0xBCAD,
- 0xBCAE, 0xBCAF, 0xBCB2, 0xBCB6, 0xBCB7, 0xBCB8, 0xBCB9, 0xBCBA,
- 0xBCBB, 0xBCBE, 0xBCBF, 0xBCC1, 0xBCC2, 0xBCC3, 0xBCC5, 0xBCC6,
- 0xBCC7, 0xBCC8, 0xBCC9, 0xBCCA, 0xBCCB, 0xBCCC, 0xBCCE, 0xBCD2,
- 0xBCD3, 0xBCD4, 0xBCD6, 0xBCD7, 0xBCD9, 0xBCDA, 0xBCDB, 0xBCDD,
- 0xBCDE, 0xBCDF, 0xBCE0, 0xBCE1, 0xBCE2, 0xBCE3, 0xBCE4, 0xBCE5,
- 0xBCE6, 0xBCE7, 0xBCE8, 0xBCE9, 0xBCEA, 0xBCEB, 0xBCEC, 0xBCED,
- 0xBCEE, 0xBCEF, 0xBCF0, 0xBCF1, 0xBCF2, 0xBCF3, 0xBCF7, 0xBCF9,
- 0xBCFA, 0xBCFB, 0xBCFD, 0xBCFE, 0xBCFF, 0xBD00, 0xBD01, 0xBD02,
- 0xBD03, 0xBD06, 0xBD08, 0xBD0A, 0xBD0B, 0xBD0C, 0xBD0D, 0xBD0E,
- 0xBD0F, 0xBD11, 0xBD12, 0xBD13, 0xBD15, 0xBD16, 0xBD17, 0xBD18,
- 0xBD19, 0xBD1A, 0xBD1B, 0xBD1C, 0xBD1D, 0xBD1E, 0xBD1F, 0xBD20,
- 0xBD21, 0xBD22, 0xBD23, 0xBD25, 0xBD26, 0xBD27, 0xBD28, 0xBD29,
- 0xBD2A, 0xBD2B, 0xBD2D, 0xBD2E, 0xBD2F, 0xBD30, 0xBD31, 0xBD32,
- 0xBD33, 0xBD34, 0xBD35, 0xBD36, 0xBD37, 0xBD38, 0xBD39, 0xBD3A,
- 0xBD3B, 0xBD3C, 0xBD3D, 0xBD3E, 0xBD3F, 0xBD41, 0xBD42, 0xBD43,
- 0xBD44, 0xBD45, 0xBD46, 0xBD47, 0xBD4A, 0xBD4B, 0xBD4D, 0xBD4E,
- 0xBD4F, 0xBD51, 0xBD52, 0xBD53, 0xBD54, 0xBD55, 0xBD56, 0xBD57,
- 0xBD5A, 0xBD5B, 0xBD5C, 0xBD5D, 0xBD5E, 0xBD5F, 0xBD60, 0xBD61,
- 0xBD62, 0xBD63, 0xBD65, 0xBD66, 0xBD67, 0xBD69, 0xBD6A, 0xBD6B,
- 0xBD6C, 0xBD6D, 0xBD6E, 0xBD6F, 0xBD70, 0xBD71, 0xBD72, 0xBD73,
- 0xBD74, 0xBD75, 0xBD76, 0xBD77, 0xBD78, 0xBD79, 0xBD7A, 0xBD7B,
- 0xBD7C, 0xBD7D, 0xBD7E, 0xBD7F, 0xBD82, 0xBD83, 0xBD85, 0xBD86,
- 0xBD8B, 0xBD8C, 0xBD8D, 0xBD8E, 0xBD8F, 0xBD92, 0xBD94, 0xBD96,
- 0xBD97, 0xBD98, 0xBD9B, 0xBD9D, 0xBD9E, 0xBD9F, 0xBDA0, 0xBDA1,
- 0xBDA2, 0xBDA3, 0xBDA5, 0xBDA6, 0xBDA7, 0xBDA8, 0xBDA9, 0xBDAA,
- 0xBDAB, 0xBDAC, 0xBDAD, 0xBDAE, 0xBDAF, 0xBDB1, 0xBDB2, 0xBDB3,
- 0xBDB4, 0xBDB5, 0xBDB6, 0xBDB7, 0xBDB9, 0xBDBA, 0xBDBB, 0xBDBC,
- 0xBDBD, 0xBDBE, 0xBDBF, 0xBDC0, 0xBDC1, 0xBDC2, 0xBDC3, 0xBDC4,
- 0xBDC5, 0xBDC6, 0xBDC7, 0xBDC8, 0xBDC9, 0xBDCA, 0xBDCB, 0xBDCC,
- 0xBDCD, 0xBDCE, 0xBDCF, 0xBDD0, 0xBDD1, 0xBDD2, 0xBDD3, 0xBDD6,
- 0xBDD7, 0xBDD9, 0xBDDA, 0xBDDB, 0xBDDD, 0xBDDE, 0xBDDF, 0xBDE0,
- 0xBDE1, 0xBDE2, 0xBDE3, 0xBDE4, 0xBDE5, 0xBDE6, 0xBDE7, 0xBDE8,
- 0xBDEA, 0xBDEB, 0xBDEC, 0xBDED, 0xBDEE, 0xBDEF, 0xBDF1, 0xBDF2,
- 0xBDF3, 0xBDF5, 0xBDF6, 0xBDF7, 0xBDF9, 0xBDFA, 0xBDFB, 0xBDFC,
- 0xBDFD, 0xBDFE, 0xBDFF, 0xBE01, 0xBE02, 0xBE04, 0xBE06, 0xBE07,
- 0xBE08, 0xBE09, 0xBE0A, 0xBE0B, 0xBE0E, 0xBE0F, 0xBE11, 0xBE12,
- 0xBE13, 0xBE15, 0xBE16, 0xBE17, 0xBE18, 0xBE19, 0xBE1A, 0xBE1B,
- 0xBE1E, 0xBE20, 0xBE21, 0xBE22, 0xBE23, 0xBE24, 0xBE25, 0xBE26,
- 0xBE27, 0xBE28, 0xBE29, 0xBE2A, 0xBE2B, 0xBE2C, 0xBE2D, 0xBE2E,
- 0xBE2F, 0xBE30, 0xBE31, 0xBE32, 0xBE33, 0xBE34, 0xBE35, 0xBE36,
- 0xBE37, 0xBE38, 0xBE39, 0xBE3A, 0xBE3B, 0xBE3C, 0xBE3D, 0xBE3E,
- 0xBE3F, 0xBE40, 0xBE41, 0xBE42, 0xBE43, 0xBE46, 0xBE47, 0xBE49,
- 0xBE4A, 0xBE4B, 0xBE4D, 0xBE4F, 0xBE50, 0xBE51, 0xBE52, 0xBE53,
- 0xBE56, 0xBE58, 0xBE5C, 0xBE5D, 0xBE5E, 0xBE5F, 0xBE62, 0xBE63,
- 0xBE65, 0xBE66, 0xBE67, 0xBE69, 0xBE6B, 0xBE6C, 0xBE6D, 0xBE6E,
- 0xBE6F, 0xBE72, 0xBE76, 0xBE77, 0xBE78, 0xBE79, 0xBE7A, 0xBE7E,
- 0xBE7F, 0xBE81, 0xBE82, 0xBE83, 0xBE85, 0xBE86, 0xBE87, 0xBE88,
- 0xBE89, 0xBE8A, 0xBE8B, 0xBE8E, 0xBE92, 0xBE93, 0xBE94, 0xBE95,
- 0xBE96, 0xBE97, 0xBE9A, 0xBE9B, 0xBE9C, 0xBE9D, 0xBE9E, 0xBE9F,
- 0xBEA0, 0xBEA1, 0xBEA2, 0xBEA3, 0xBEA4, 0xBEA5, 0xBEA6, 0xBEA7,
- 0xBEA9, 0xBEAA, 0xBEAB, 0xBEAC, 0xBEAD, 0xBEAE, 0xBEAF, 0xBEB0,
- 0xBEB1, 0xBEB2, 0xBEB3, 0xBEB4, 0xBEB5, 0xBEB6, 0xBEB7, 0xBEB8,
- 0xBEB9, 0xBEBA, 0xBEBB, 0xBEBC, 0xBEBD, 0xBEBE, 0xBEBF, 0xBEC0,
- 0xBEC1, 0xBEC2, 0xBEC3, 0xBEC4, 0xBEC5, 0xBEC6, 0xBEC7, 0xBEC8,
- 0xBEC9, 0xBECA, 0xBECB, 0xBECC, 0xBECD, 0xBECE, 0xBECF, 0xBED2,
- 0xBED3, 0xBED5, 0xBED6, 0xBED9, 0xBEDA, 0xBEDB, 0xBEDC, 0xBEDD,
- 0xBEDE, 0xBEDF, 0xBEE1, 0xBEE2, 0xBEE6, 0xBEE7, 0xBEE8, 0xBEE9,
- 0xBEEA, 0xBEEB, 0xBEED, 0xBEEE, 0xBEEF, 0xBEF0, 0xBEF1, 0xBEF2,
- 0xBEF3, 0xBEF4, 0xBEF5, 0xBEF6, 0xBEF7, 0xBEF8, 0xBEF9, 0xBEFA,
- 0xBEFB, 0xBEFC, 0xBEFD, 0xBEFE, 0xBEFF, 0xBF00, 0xBF02, 0xBF03,
- 0xBF04, 0xBF05, 0xBF06, 0xBF07, 0xBF0A, 0xBF0B, 0xBF0C, 0xBF0D,
- 0xBF0E, 0xBF0F, 0xBF10, 0xBF11, 0xBF12, 0xBF13, 0xBF14, 0xBF15,
- 0xBF16, 0xBF17, 0xBF1A, 0xBF1E, 0xBF1F, 0xBF20, 0xBF21, 0xBF22,
- 0xBF23, 0xBF24, 0xBF25, 0xBF26, 0xBF27, 0xBF28, 0xBF29, 0xBF2A,
- 0xBF2B, 0xBF2C, 0xBF2D, 0xBF2E, 0xBF2F, 0xBF30, 0xBF31, 0xBF32,
- 0xBF33, 0xBF34, 0xBF35, 0xBF36, 0xBF37, 0xBF38, 0xBF39, 0xBF3A,
- 0xBF3B, 0xBF3C, 0xBF3D, 0xBF3E, 0xBF3F, 0xBF42, 0xBF43, 0xBF45,
- 0xBF46, 0xBF47, 0xBF49, 0xBF4A, 0xBF4B, 0xBF4C, 0xBF4D, 0xBF4E,
- 0xBF4F, 0xBF52, 0xBF53, 0xBF54, 0xBF56, 0xBF57, 0xBF58, 0xBF59,
- 0xBF5A, 0xBF5B, 0xBF5C, 0xBF5D, 0xBF5E, 0xBF5F, 0xBF60, 0xBF61,
- 0xBF62, 0xBF63, 0xBF64, 0xBF65, 0xBF66, 0xBF67, 0xBF68, 0xBF69,
- 0xBF6A, 0xBF6B, 0xBF6C, 0xBF6D, 0xBF6E, 0xBF6F, 0xBF70, 0xBF71,
- 0xBF72, 0xBF73, 0xBF74, 0xBF75, 0xBF76, 0xBF77, 0xBF78, 0xBF79,
- 0xBF7A, 0xBF7B, 0xBF7C, 0xBF7D, 0xBF7E, 0xBF7F, 0xBF80, 0xBF81,
- 0xBF82, 0xBF83, 0xBF84, 0xBF85, 0xBF86, 0xBF87, 0xBF88, 0xBF89,
- 0xBF8A, 0xBF8B, 0xBF8C, 0xBF8D, 0xBF8E, 0xBF8F, 0xBF90, 0xBF91,
- 0xBF92, 0xBF93, 0xBF95, 0xBF96, 0xBF97, 0xBF98, 0xBF99, 0xBF9A,
- 0xBF9B, 0xBF9C, 0xBF9D, 0xBF9E, 0xBF9F, 0xBFA0, 0xBFA1, 0xBFA2,
- 0xBFA3, 0xBFA4, 0xBFA5, 0xBFA6, 0xBFA7, 0xBFA8, 0xBFA9, 0xBFAA,
- 0xBFAB, 0xBFAC, 0xBFAD, 0xBFAE, 0xBFAF, 0xBFB1, 0xBFB2, 0xBFB3,
- 0xBFB4, 0xBFB5, 0xBFB6, 0xBFB7, 0xBFB8, 0xBFB9, 0xBFBA, 0xBFBB,
- 0xBFBC, 0xBFBD, 0xBFBE, 0xBFBF, 0xBFC0, 0xBFC1, 0xBFC2, 0xBFC3,
- 0xBFC4, 0xBFC6, 0xBFC7, 0xBFC8, 0xBFC9, 0xBFCA, 0xBFCB, 0xBFCE,
- 0xBFCF, 0xBFD1, 0xBFD2, 0xBFD3, 0xBFD5, 0xBFD6, 0xBFD7, 0xBFD8,
- 0xBFD9, 0xBFDA, 0xBFDB, 0xBFDD, 0xBFDE, 0xBFE0, 0xBFE2, 0xBFE3,
- 0xBFE4, 0xBFE5, 0xBFE6, 0xBFE7, 0xBFE8, 0xBFE9, 0xBFEA, 0xBFEB,
- 0xBFEC, 0xBFED, 0xBFEE, 0xBFEF, 0xBFF0, 0xBFF1, 0xBFF2, 0xBFF3,
- 0xBFF4, 0xBFF5, 0xBFF6, 0xBFF7, 0xBFF8, 0xBFF9, 0xBFFA, 0xBFFB,
- 0xBFFC, 0xBFFD, 0xBFFE, 0xBFFF, 0xC000, 0xC001, 0xC002, 0xC003,
- 0xC004, 0xC005, 0xC006, 0xC007, 0xC008, 0xC009, 0xC00A, 0xC00B,
- 0xC00C, 0xC00D, 0xC00E, 0xC00F, 0xC010, 0xC011, 0xC012, 0xC013,
- 0xC014, 0xC015, 0xC016, 0xC017, 0xC018, 0xC019, 0xC01A, 0xC01B,
- 0xC01C, 0xC01D, 0xC01E, 0xC01F, 0xC020, 0xC021, 0xC022, 0xC023,
- 0xC024, 0xC025, 0xC026, 0xC027, 0xC028, 0xC029, 0xC02A, 0xC02B,
- 0xC02C, 0xC02D, 0xC02E, 0xC02F, 0xC030, 0xC031, 0xC032, 0xC033,
- 0xC034, 0xC035, 0xC036, 0xC037, 0xC038, 0xC039, 0xC03A, 0xC03B,
- 0xC03D, 0xC03E, 0xC03F, 0xC040, 0xC041, 0xC042, 0xC043, 0xC044,
- 0xC045, 0xC046, 0xC047, 0xC048, 0xC049, 0xC04A, 0xC04B, 0xC04C,
- 0xC04D, 0xC04E, 0xC04F, 0xC050, 0xC052, 0xC053, 0xC054, 0xC055,
- 0xC056, 0xC057, 0xC059, 0xC05A, 0xC05B, 0xC05D, 0xC05E, 0xC05F,
- 0xC061, 0xC062, 0xC063, 0xC064, 0xC065, 0xC066, 0xC067, 0xC06A,
- 0xC06B, 0xC06C, 0xC06D, 0xC06E, 0xC06F, 0xC070, 0xC071, 0xC072,
- 0xC073, 0xC074, 0xC075, 0xC076, 0xC077, 0xC078, 0xC079, 0xC07A,
- 0xC07B, 0xC07C, 0xC07D, 0xC07E, 0xC07F, 0xC080, 0xC081, 0xC082,
- 0xC083, 0xC084, 0xC085, 0xC086, 0xC087, 0xC088, 0xC089, 0xC08A,
- 0xC08B, 0xC08C, 0xC08D, 0xC08E, 0xC08F, 0xC092, 0xC093, 0xC095,
- 0xC096, 0xC097, 0xC099, 0xC09A, 0xC09B, 0xC09C, 0xC09D, 0xC09E,
- 0xC09F, 0xC0A2, 0xC0A4, 0xC0A6, 0xC0A7, 0xC0A8, 0xC0A9, 0xC0AA,
- 0xC0AB, 0xC0AE, 0xC0B1, 0xC0B2, 0xC0B7, 0xC0B8, 0xC0B9, 0xC0BA,
- 0xC0BB, 0xC0BE, 0xC0C2, 0xC0C3, 0xC0C4, 0xC0C6, 0xC0C7, 0xC0CA,
- 0xC0CB, 0xC0CD, 0xC0CE, 0xC0CF, 0xC0D1, 0xC0D2, 0xC0D3, 0xC0D4,
- 0xC0D5, 0xC0D6, 0xC0D7, 0xC0DA, 0xC0DE, 0xC0DF, 0xC0E0, 0xC0E1,
- 0xC0E2, 0xC0E3, 0xC0E6, 0xC0E7, 0xC0E9, 0xC0EA, 0xC0EB, 0xC0ED,
- 0xC0EE, 0xC0EF, 0xC0F0, 0xC0F1, 0xC0F2, 0xC0F3, 0xC0F6, 0xC0F8,
- 0xC0FA, 0xC0FB, 0xC0FC, 0xC0FD, 0xC0FE, 0xC0FF, 0xC101, 0xC102,
- 0xC103, 0xC105, 0xC106, 0xC107, 0xC109, 0xC10A, 0xC10B, 0xC10C,
- 0xC10D, 0xC10E, 0xC10F, 0xC111, 0xC112, 0xC113, 0xC114, 0xC116,
- 0xC117, 0xC118, 0xC119, 0xC11A, 0xC11B, 0xC121, 0xC122, 0xC125,
- 0xC128, 0xC129, 0xC12A, 0xC12B, 0xC12E, 0xC132, 0xC133, 0xC134,
- 0xC135, 0xC137, 0xC13A, 0xC13B, 0xC13D, 0xC13E, 0xC13F, 0xC141,
- 0xC142, 0xC143, 0xC144, 0xC145, 0xC146, 0xC147, 0xC14A, 0xC14E,
- 0xC14F, 0xC150, 0xC151, 0xC152, 0xC153, 0xC156, 0xC157, 0xC159,
- 0xC15A, 0xC15B, 0xC15D, 0xC15E, 0xC15F, 0xC160, 0xC161, 0xC162,
- 0xC163, 0xC166, 0xC16A, 0xC16B, 0xC16C, 0xC16D, 0xC16E, 0xC16F,
- 0xC171, 0xC172, 0xC173, 0xC175, 0xC176, 0xC177, 0xC179, 0xC17A,
- 0xC17B, 0xC17C, 0xC17D, 0xC17E, 0xC17F, 0xC180, 0xC181, 0xC182,
- 0xC183, 0xC184, 0xC186, 0xC187, 0xC188, 0xC189, 0xC18A, 0xC18B,
- 0xC18F, 0xC191, 0xC192, 0xC193, 0xC195, 0xC197, 0xC198, 0xC199,
- 0xC19A, 0xC19B, 0xC19E, 0xC1A0, 0xC1A2, 0xC1A3, 0xC1A4, 0xC1A6,
- 0xC1A7, 0xC1AA, 0xC1AB, 0xC1AD, 0xC1AE, 0xC1AF, 0xC1B1, 0xC1B2,
- 0xC1B3, 0xC1B4, 0xC1B5, 0xC1B6, 0xC1B7, 0xC1B8, 0xC1B9, 0xC1BA,
- 0xC1BB, 0xC1BC, 0xC1BE, 0xC1BF, 0xC1C0, 0xC1C1, 0xC1C2, 0xC1C3,
- 0xC1C5, 0xC1C6, 0xC1C7, 0xC1C9, 0xC1CA, 0xC1CB, 0xC1CD, 0xC1CE,
- 0xC1CF, 0xC1D0, 0xC1D1, 0xC1D2, 0xC1D3, 0xC1D5, 0xC1D6, 0xC1D9,
- 0xC1DA, 0xC1DB, 0xC1DC, 0xC1DD, 0xC1DE, 0xC1DF, 0xC1E1, 0xC1E2,
- 0xC1E3, 0xC1E5, 0xC1E6, 0xC1E7, 0xC1E9, 0xC1EA, 0xC1EB, 0xC1EC,
- 0xC1ED, 0xC1EE, 0xC1EF, 0xC1F2, 0xC1F4, 0xC1F5, 0xC1F6, 0xC1F7,
- 0xC1F8, 0xC1F9, 0xC1FA, 0xC1FB, 0xC1FE, 0xC1FF, 0xC201, 0xC202,
- 0xC203, 0xC205, 0xC206, 0xC207, 0xC208, 0xC209, 0xC20A, 0xC20B,
- 0xC20E, 0xC210, 0xC212, 0xC213, 0xC214, 0xC215, 0xC216, 0xC217,
- 0xC21A, 0xC21B, 0xC21D, 0xC21E, 0xC221, 0xC222, 0xC223, 0xC224,
- 0xC225, 0xC226, 0xC227, 0xC22A, 0xC22C, 0xC22E, 0xC230, 0xC233,
- 0xC235, 0xC236, 0xC237, 0xC238, 0xC239, 0xC23A, 0xC23B, 0xC23C,
- 0xC23D, 0xC23E, 0xC23F, 0xC240, 0xC241, 0xC242, 0xC243, 0xC244,
- 0xC245, 0xC246, 0xC247, 0xC249, 0xC24A, 0xC24B, 0xC24C, 0xC24D,
- 0xC24E, 0xC24F, 0xC252, 0xC253, 0xC255, 0xC256, 0xC257, 0xC259,
- 0xC25A, 0xC25B, 0xC25C, 0xC25D, 0xC25E, 0xC25F, 0xC261, 0xC262,
- 0xC263, 0xC264, 0xC266, 0xC267, 0xC268, 0xC269, 0xC26A, 0xC26B,
- 0xC26E, 0xC26F, 0xC271, 0xC272, 0xC273, 0xC275, 0xC276, 0xC277,
- 0xC278, 0xC279, 0xC27A, 0xC27B, 0xC27E, 0xC280, 0xC282, 0xC283,
- 0xC284, 0xC285, 0xC286, 0xC287, 0xC28A, 0xC28B, 0xC28C, 0xC28D,
- 0xC28E, 0xC28F, 0xC291, 0xC292, 0xC293, 0xC294, 0xC295, 0xC296,
- 0xC297, 0xC299, 0xC29A, 0xC29C, 0xC29E, 0xC29F, 0xC2A0, 0xC2A1,
- 0xC2A2, 0xC2A3, 0xC2A6, 0xC2A7, 0xC2A9, 0xC2AA, 0xC2AB, 0xC2AE,
- 0xC2AF, 0xC2B0, 0xC2B1, 0xC2B2, 0xC2B3, 0xC2B6, 0xC2B8, 0xC2BA,
- 0xC2BB, 0xC2BC, 0xC2BD, 0xC2BE, 0xC2BF, 0xC2C0, 0xC2C1, 0xC2C2,
- 0xC2C3, 0xC2C4, 0xC2C5, 0xC2C6, 0xC2C7, 0xC2C8, 0xC2C9, 0xC2CA,
- 0xC2CB, 0xC2CC, 0xC2CD, 0xC2CE, 0xC2CF, 0xC2D0, 0xC2D1, 0xC2D2,
- 0xC2D3, 0xC2D4, 0xC2D5, 0xC2D6, 0xC2D7, 0xC2D8, 0xC2D9, 0xC2DA,
- 0xC2DB, 0xC2DE, 0xC2DF, 0xC2E1, 0xC2E2, 0xC2E5, 0xC2E6, 0xC2E7,
- 0xC2E8, 0xC2E9, 0xC2EA, 0xC2EE, 0xC2F0, 0xC2F2, 0xC2F3, 0xC2F4,
- 0xC2F5, 0xC2F7, 0xC2FA, 0xC2FD, 0xC2FE, 0xC2FF, 0xC301, 0xC302,
- 0xC303, 0xC304, 0xC305, 0xC306, 0xC307, 0xC30A, 0xC30B, 0xC30E,
- 0xC30F, 0xC310, 0xC311, 0xC312, 0xC316, 0xC317, 0xC319, 0xC31A,
- 0xC31B, 0xC31D, 0xC31E, 0xC31F, 0xC320, 0xC321, 0xC322, 0xC323,
- 0xC326, 0xC327, 0xC32A, 0xC32B, 0xC32C, 0xC32D, 0xC32E, 0xC32F,
- 0xC330, 0xC331, 0xC332, 0xC333, 0xC334, 0xC335, 0xC336, 0xC337,
- 0xC338, 0xC339, 0xC33A, 0xC33B, 0xC33C, 0xC33D, 0xC33E, 0xC33F,
- 0xC340, 0xC341, 0xC342, 0xC343, 0xC344, 0xC346, 0xC347, 0xC348,
- 0xC349, 0xC34A, 0xC34B, 0xC34C, 0xC34D, 0xC34E, 0xC34F, 0xC350,
- 0xC351, 0xC352, 0xC353, 0xC354, 0xC355, 0xC356, 0xC357, 0xC358,
- 0xC359, 0xC35A, 0xC35B, 0xC35C, 0xC35D, 0xC35E, 0xC35F, 0xC360,
- 0xC361, 0xC362, 0xC363, 0xC364, 0xC365, 0xC366, 0xC367, 0xC36A,
- 0xC36B, 0xC36D, 0xC36E, 0xC36F, 0xC371, 0xC373, 0xC374, 0xC375,
- 0xC376, 0xC377, 0xC37A, 0xC37B, 0xC37E, 0xC37F, 0xC380, 0xC381,
- 0xC382, 0xC383, 0xC385, 0xC386, 0xC387, 0xC389, 0xC38A, 0xC38B,
- 0xC38D, 0xC38E, 0xC38F, 0xC390, 0xC391, 0xC392, 0xC393, 0xC394,
- 0xC395, 0xC396, 0xC397, 0xC398, 0xC399, 0xC39A, 0xC39B, 0xC39C,
- 0xC39D, 0xC39E, 0xC39F, 0xC3A0, 0xC3A1, 0xC3A2, 0xC3A3, 0xC3A4,
- 0xC3A5, 0xC3A6, 0xC3A7, 0xC3A8, 0xC3A9, 0xC3AA, 0xC3AB, 0xC3AC,
- 0xC3AD, 0xC3AE, 0xC3AF, 0xC3B0, 0xC3B1, 0xC3B2, 0xC3B3, 0xC3B4,
- 0xC3B5, 0xC3B6, 0xC3B7, 0xC3B8, 0xC3B9, 0xC3BA, 0xC3BB, 0xC3BC,
- 0xC3BD, 0xC3BE, 0xC3BF, 0xC3C1, 0xC3C2, 0xC3C3, 0xC3C4, 0xC3C5,
- 0xC3C6, 0xC3C7, 0xC3C8, 0xC3C9, 0xC3CA, 0xC3CB, 0xC3CC, 0xC3CD,
- 0xC3CE, 0xC3CF, 0xC3D0, 0xC3D1, 0xC3D2, 0xC3D3, 0xC3D4, 0xC3D5,
- 0xC3D6, 0xC3D7, 0xC3DA, 0xC3DB, 0xC3DD, 0xC3DE, 0xC3E1, 0xC3E3,
- 0xC3E4, 0xC3E5, 0xC3E6, 0xC3E7, 0xC3EA, 0xC3EB, 0xC3EC, 0xC3EE,
- 0xC3EF, 0xC3F0, 0xC3F1, 0xC3F2, 0xC3F3, 0xC3F6, 0xC3F7, 0xC3F9,
- 0xC3FA, 0xC3FB, 0xC3FC, 0xC3FD, 0xC3FE, 0xC3FF, 0xC400, 0xC401,
- 0xC402, 0xC403, 0xC404, 0xC405, 0xC406, 0xC407, 0xC409, 0xC40A,
- 0xC40B, 0xC40C, 0xC40D, 0xC40E, 0xC40F, 0xC411, 0xC412, 0xC413,
- 0xC414, 0xC415, 0xC416, 0xC417, 0xC418, 0xC419, 0xC41A, 0xC41B,
- 0xC41C, 0xC41D, 0xC41E, 0xC41F, 0xC420, 0xC421, 0xC422, 0xC423,
- 0xC425, 0xC426, 0xC427, 0xC428, 0xC429, 0xC42A, 0xC42B, 0xC42D,
- 0xC42E, 0xC42F, 0xC431, 0xC432, 0xC433, 0xC435, 0xC436, 0xC437,
- 0xC438, 0xC439, 0xC43A, 0xC43B, 0xC43E, 0xC43F, 0xC440, 0xC441,
- 0xC442, 0xC443, 0xC444, 0xC445, 0xC446, 0xC447, 0xC449, 0xC44A,
- 0xC44B, 0xC44C, 0xC44D, 0xC44E, 0xC44F, 0xC450, 0xC451, 0xC452,
- 0xC453, 0xC454, 0xC455, 0xC456, 0xC457, 0xC458, 0xC459, 0xC45A,
- 0xC45B, 0xC45C, 0xC45D, 0xC45E, 0xC45F, 0xC460, 0xC461, 0xC462,
- 0xC463, 0xC466, 0xC467, 0xC469, 0xC46A, 0xC46B, 0xC46D, 0xC46E,
- 0xC46F, 0xC470, 0xC471, 0xC472, 0xC473, 0xC476, 0xC477, 0xC478,
- 0xC47A, 0xC47B, 0xC47C, 0xC47D, 0xC47E, 0xC47F, 0xC481, 0xC482,
- 0xC483, 0xC484, 0xC485, 0xC486, 0xC487, 0xC488, 0xC489, 0xC48A,
- 0xC48B, 0xC48C, 0xC48D, 0xC48E, 0xC48F, 0xC490, 0xC491, 0xC492,
- 0xC493, 0xC495, 0xC496, 0xC497, 0xC498, 0xC499, 0xC49A, 0xC49B,
- 0xC49D, 0xC49E, 0xC49F, 0xC4A0, 0xC4A1, 0xC4A2, 0xC4A3, 0xC4A4,
- 0xC4A5, 0xC4A6, 0xC4A7, 0xC4A8, 0xC4A9, 0xC4AA, 0xC4AB, 0xC4AC,
- 0xC4AD, 0xC4AE, 0xC4AF, 0xC4B0, 0xC4B1, 0xC4B2, 0xC4B3, 0xC4B4,
- 0xC4B5, 0xC4B6, 0xC4B7, 0xC4B9, 0xC4BA, 0xC4BB, 0xC4BD, 0xC4BE,
- 0xC4BF, 0xC4C0, 0xC4C1, 0xC4C2, 0xC4C3, 0xC4C4, 0xC4C5, 0xC4C6,
- 0xC4C7, 0xC4C8, 0xC4C9, 0xC4CA, 0xC4CB, 0xC4CC, 0xC4CD, 0xC4CE,
- 0xC4CF, 0xC4D0, 0xC4D1, 0xC4D2, 0xC4D3, 0xC4D4, 0xC4D5, 0xC4D6,
- 0xC4D7, 0xC4D8, 0xC4D9, 0xC4DA, 0xC4DB, 0xC4DC, 0xC4DD, 0xC4DE,
- 0xC4DF, 0xC4E0, 0xC4E1, 0xC4E2, 0xC4E3, 0xC4E4, 0xC4E5, 0xC4E6,
- 0xC4E7, 0xC4E8, 0xC4EA, 0xC4EB, 0xC4EC, 0xC4ED, 0xC4EE, 0xC4EF,
- 0xC4F2, 0xC4F3, 0xC4F5, 0xC4F6, 0xC4F7, 0xC4F9, 0xC4FB, 0xC4FC,
- 0xC4FD, 0xC4FE, 0xC502, 0xC503, 0xC504, 0xC505, 0xC506, 0xC507,
- 0xC508, 0xC509, 0xC50A, 0xC50B, 0xC50D, 0xC50E, 0xC50F, 0xC511,
- 0xC512, 0xC513, 0xC515, 0xC516, 0xC517, 0xC518, 0xC519, 0xC51A,
- 0xC51B, 0xC51D, 0xC51E, 0xC51F, 0xC520, 0xC521, 0xC522, 0xC523,
- 0xC524, 0xC525, 0xC526, 0xC527, 0xC52A, 0xC52B, 0xC52D, 0xC52E,
- 0xC52F, 0xC531, 0xC532, 0xC533, 0xC534, 0xC535, 0xC536, 0xC537,
- 0xC53A, 0xC53C, 0xC53E, 0xC53F, 0xC540, 0xC541, 0xC542, 0xC543,
- 0xC546, 0xC547, 0xC54B, 0xC54F, 0xC550, 0xC551, 0xC552, 0xC556,
- 0xC55A, 0xC55B, 0xC55C, 0xC55F, 0xC562, 0xC563, 0xC565, 0xC566,
- 0xC567, 0xC569, 0xC56A, 0xC56B, 0xC56C, 0xC56D, 0xC56E, 0xC56F,
- 0xC572, 0xC576, 0xC577, 0xC578, 0xC579, 0xC57A, 0xC57B, 0xC57E,
- 0xC57F, 0xC581, 0xC582, 0xC583, 0xC585, 0xC586, 0xC588, 0xC589,
- 0xC58A, 0xC58B, 0xC58E, 0xC590, 0xC592, 0xC593, 0xC594, 0xC596,
- 0xC599, 0xC59A, 0xC59B, 0xC59D, 0xC59E, 0xC59F, 0xC5A1, 0xC5A2,
- 0xC5A3, 0xC5A4, 0xC5A5, 0xC5A6, 0xC5A7, 0xC5A8, 0xC5AA, 0xC5AB,
- 0xC5AC, 0xC5AD, 0xC5AE, 0xC5AF, 0xC5B0, 0xC5B1, 0xC5B2, 0xC5B3,
- 0xC5B6, 0xC5B7, 0xC5BA, 0xC5BF, 0xC5C0, 0xC5C1, 0xC5C2, 0xC5C3,
- 0xC5CB, 0xC5CD, 0xC5CF, 0xC5D2, 0xC5D3, 0xC5D5, 0xC5D6, 0xC5D7,
- 0xC5D9, 0xC5DA, 0xC5DB, 0xC5DC, 0xC5DD, 0xC5DE, 0xC5DF, 0xC5E2,
- 0xC5E4, 0xC5E6, 0xC5E7, 0xC5E8, 0xC5E9, 0xC5EA, 0xC5EB, 0xC5EF,
- 0xC5F1, 0xC5F2, 0xC5F3, 0xC5F5, 0xC5F8, 0xC5F9, 0xC5FA, 0xC5FB,
- 0xC602, 0xC603, 0xC604, 0xC609, 0xC60A, 0xC60B, 0xC60D, 0xC60E,
- 0xC60F, 0xC611, 0xC612, 0xC613, 0xC614, 0xC615, 0xC616, 0xC617,
- 0xC61A, 0xC61D, 0xC61E, 0xC61F, 0xC620, 0xC621, 0xC622, 0xC623,
- 0xC626, 0xC627, 0xC629, 0xC62A, 0xC62B, 0xC62F, 0xC631, 0xC632,
- 0xC636, 0xC638, 0xC63A, 0xC63C, 0xC63D, 0xC63E, 0xC63F, 0xC642,
- 0xC643, 0xC645, 0xC646, 0xC647, 0xC649, 0xC64A, 0xC64B, 0xC64C,
- 0xC64D, 0xC64E, 0xC64F, 0xC652, 0xC656, 0xC657, 0xC658, 0xC659,
- 0xC65A, 0xC65B, 0xC65E, 0xC65F, 0xC661, 0xC662, 0xC663, 0xC664,
- 0xC665, 0xC666, 0xC667, 0xC668, 0xC669, 0xC66A, 0xC66B, 0xC66D,
- 0xC66E, 0xC670, 0xC672, 0xC673, 0xC674, 0xC675, 0xC676, 0xC677,
- 0xC67A, 0xC67B, 0xC67D, 0xC67E, 0xC67F, 0xC681, 0xC682, 0xC683,
- 0xC684, 0xC685, 0xC686, 0xC687, 0xC68A, 0xC68C, 0xC68E, 0xC68F,
- 0xC690, 0xC691, 0xC692, 0xC693, 0xC696, 0xC697, 0xC699, 0xC69A,
- 0xC69B, 0xC69D, 0xC69E, 0xC69F, 0xC6A0, 0xC6A1, 0xC6A2, 0xC6A3,
- 0xC6A6, 0xC6A8, 0xC6AA, 0xC6AB, 0xC6AC, 0xC6AD, 0xC6AE, 0xC6AF,
- 0xC6B2, 0xC6B3, 0xC6B5, 0xC6B6, 0xC6B7, 0xC6BB, 0xC6BC, 0xC6BD,
- 0xC6BE, 0xC6BF, 0xC6C2, 0xC6C4, 0xC6C6, 0xC6C7, 0xC6C8, 0xC6C9,
- 0xC6CA, 0xC6CB, 0xC6CE, 0xC6CF, 0xC6D1, 0xC6D2, 0xC6D3, 0xC6D5,
- 0xC6D6, 0xC6D7, 0xC6D8, 0xC6D9, 0xC6DA, 0xC6DB, 0xC6DE, 0xC6DF,
- 0xC6E2, 0xC6E3, 0xC6E4, 0xC6E5, 0xC6E6, 0xC6E7, 0xC6EA, 0xC6EB,
- 0xC6ED, 0xC6EE, 0xC6EF, 0xC6F1, 0xC6F2, 0xC6F3, 0xC6F4, 0xC6F5,
- 0xC6F6, 0xC6F7, 0xC6FA, 0xC6FB, 0xC6FC, 0xC6FE, 0xC6FF, 0xC700,
- 0xC701, 0xC702, 0xC703, 0xC706, 0xC707, 0xC709, 0xC70A, 0xC70B,
- 0xC70D, 0xC70E, 0xC70F, 0xC710, 0xC711, 0xC712, 0xC713, 0xC716,
- 0xC718, 0xC71A, 0xC71B, 0xC71C, 0xC71D, 0xC71E, 0xC71F, 0xC722,
- 0xC723, 0xC725, 0xC726, 0xC727, 0xC729, 0xC72A, 0xC72B, 0xC72C,
- 0xC72D, 0xC72E, 0xC72F, 0xC732, 0xC734, 0xC736, 0xC738, 0xC739,
- 0xC73A, 0xC73B, 0xC73E, 0xC73F, 0xC741, 0xC742, 0xC743, 0xC745,
- 0xC746, 0xC747, 0xC748, 0xC749, 0xC74B, 0xC74E, 0xC750, 0xC759,
- 0xC75A, 0xC75B, 0xC75D, 0xC75E, 0xC75F, 0xC761, 0xC762, 0xC763,
- 0xC764, 0xC765, 0xC766, 0xC767, 0xC769, 0xC76A, 0xC76C, 0xC76D,
- 0xC76E, 0xC76F, 0xC770, 0xC771, 0xC772, 0xC773, 0xC776, 0xC777,
- 0xC779, 0xC77A, 0xC77B, 0xC77F, 0xC780, 0xC781, 0xC782, 0xC786,
- 0xC78B, 0xC78C, 0xC78D, 0xC78F, 0xC792, 0xC793, 0xC795, 0xC799,
- 0xC79B, 0xC79C, 0xC79D, 0xC79E, 0xC79F, 0xC7A2, 0xC7A7, 0xC7A8,
- 0xC7A9, 0xC7AA, 0xC7AB, 0xC7AE, 0xC7AF, 0xC7B1, 0xC7B2, 0xC7B3,
- 0xC7B5, 0xC7B6, 0xC7B7, 0xC7B8, 0xC7B9, 0xC7BA, 0xC7BB, 0xC7BE,
- 0xC7C2, 0xC7C3, 0xC7C4, 0xC7C5, 0xC7C6, 0xC7C7, 0xC7CA, 0xC7CB,
- 0xC7CD, 0xC7CF, 0xC7D1, 0xC7D2, 0xC7D3, 0xC7D4, 0xC7D5, 0xC7D6,
- 0xC7D7, 0xC7D9, 0xC7DA, 0xC7DB, 0xC7DC, 0xC7DE, 0xC7DF, 0xC7E0,
- 0xC7E1, 0xC7E2, 0xC7E3, 0xC7E5, 0xC7E6, 0xC7E7, 0xC7E9, 0xC7EA,
- 0xC7EB, 0xC7ED, 0xC7EE, 0xC7EF, 0xC7F0, 0xC7F1, 0xC7F2, 0xC7F3,
- 0xC7F4, 0xC7F5, 0xC7F6, 0xC7F7, 0xC7F8, 0xC7F9, 0xC7FA, 0xC7FB,
- 0xC7FC, 0xC7FD, 0xC7FE, 0xC7FF, 0xC802, 0xC803, 0xC805, 0xC806,
- 0xC807, 0xC809, 0xC80B, 0xC80C, 0xC80D, 0xC80E, 0xC80F, 0xC812,
- 0xC814, 0xC817, 0xC818, 0xC819, 0xC81A, 0xC81B, 0xC81E, 0xC81F,
- 0xC821, 0xC822, 0xC823, 0xC825, 0xC826, 0xC827, 0xC828, 0xC829,
- 0xC82A, 0xC82B, 0xC82E, 0xC830, 0xC832, 0xC833, 0xC834, 0xC835,
- 0xC836, 0xC837, 0xC839, 0xC83A, 0xC83B, 0xC83D, 0xC83E, 0xC83F,
- 0xC841, 0xC842, 0xC843, 0xC844, 0xC845, 0xC846, 0xC847, 0xC84A,
- 0xC84B, 0xC84E, 0xC84F, 0xC850, 0xC851, 0xC852, 0xC853, 0xC855,
- 0xC856, 0xC857, 0xC858, 0xC859, 0xC85A, 0xC85B, 0xC85C, 0xC85D,
- 0xC85E, 0xC85F, 0xC860, 0xC861, 0xC862, 0xC863, 0xC864, 0xC865,
- 0xC866, 0xC867, 0xC868, 0xC869, 0xC86A, 0xC86B, 0xC86C, 0xC86D,
- 0xC86E, 0xC86F, 0xC872, 0xC873, 0xC875, 0xC876, 0xC877, 0xC879,
- 0xC87B, 0xC87C, 0xC87D, 0xC87E, 0xC87F, 0xC882, 0xC884, 0xC888,
- 0xC889, 0xC88A, 0xC88E, 0xC88F, 0xC890, 0xC891, 0xC892, 0xC893,
- 0xC895, 0xC896, 0xC897, 0xC898, 0xC899, 0xC89A, 0xC89B, 0xC89C,
- 0xC89E, 0xC8A0, 0xC8A2, 0xC8A3, 0xC8A4, 0xC8A5, 0xC8A6, 0xC8A7,
- 0xC8A9, 0xC8AA, 0xC8AB, 0xC8AC, 0xC8AD, 0xC8AE, 0xC8AF, 0xC8B0,
- 0xC8B1, 0xC8B2, 0xC8B3, 0xC8B4, 0xC8B5, 0xC8B6, 0xC8B7, 0xC8B8,
- 0xC8B9, 0xC8BA, 0xC8BB, 0xC8BE, 0xC8BF, 0xC8C0, 0xC8C1, 0xC8C2,
- 0xC8C3, 0xC8C5, 0xC8C6, 0xC8C7, 0xC8C9, 0xC8CA, 0xC8CB, 0xC8CD,
- 0xC8CE, 0xC8CF, 0xC8D0, 0xC8D1, 0xC8D2, 0xC8D3, 0xC8D6, 0xC8D8,
- 0xC8DA, 0xC8DB, 0xC8DC, 0xC8DD, 0xC8DE, 0xC8DF, 0xC8E2, 0xC8E3,
- 0xC8E5, 0xC8E6, 0xC8E7, 0xC8E8, 0xC8E9, 0xC8EA, 0xC8EB, 0xC8EC,
- 0xC8ED, 0xC8EE, 0xC8EF, 0xC8F0, 0xC8F1, 0xC8F2, 0xC8F3, 0xC8F4,
- 0xC8F6, 0xC8F7, 0xC8F8, 0xC8F9, 0xC8FA, 0xC8FB, 0xC8FE, 0xC8FF,
- 0xC901, 0xC902, 0xC903, 0xC907, 0xC908, 0xC909, 0xC90A, 0xC90B,
- 0xC90E, 0xC910, 0xC912, 0xC913, 0xC914, 0xC915, 0xC916, 0xC917,
- 0xC919, 0xC91A, 0xC91B, 0xC91C, 0xC91D, 0xC91E, 0xC91F, 0xC920,
- 0xC921, 0xC922, 0xC923, 0xC924, 0xC925, 0xC926, 0xC927, 0xC928,
- 0xC929, 0xC92A, 0xC92B, 0xC92D, 0xC92E, 0xC92F, 0xC930, 0xC931,
- 0xC932, 0xC933, 0xC935, 0xC936, 0xC937, 0xC938, 0xC939, 0xC93A,
- 0xC93B, 0xC93C, 0xC93D, 0xC93E, 0xC93F, 0xC940, 0xC941, 0xC942,
- 0xC943, 0xC944, 0xC945, 0xC946, 0xC947, 0xC948, 0xC949, 0xC94A,
- 0xC94B, 0xC94C, 0xC94D, 0xC94E, 0xC94F, 0xC952, 0xC953, 0xC955,
- 0xC956, 0xC957, 0xC959, 0xC95A, 0xC95B, 0xC95C, 0xC95D, 0xC95E,
- 0xC95F, 0xC962, 0xC964, 0xC965, 0xC966, 0xC967, 0xC968, 0xC969,
- 0xC96A, 0xC96B, 0xC96D, 0xC96E, 0xC96F, 0xC971, 0xC972, 0xC973,
- 0xC975, 0xC976, 0xC977, 0xC978, 0xC979, 0xC97A, 0xC97B, 0xC97D,
- 0xC97E, 0xC97F, 0xC980, 0xC981, 0xC982, 0xC983, 0xC984, 0xC985,
- 0xC986, 0xC987, 0xC98A, 0xC98B, 0xC98D, 0xC98E, 0xC98F, 0xC991,
- 0xC992, 0xC993, 0xC994, 0xC995, 0xC996, 0xC997, 0xC99A, 0xC99C,
- 0xC99E, 0xC99F, 0xC9A0, 0xC9A1, 0xC9A2, 0xC9A3, 0xC9A4, 0xC9A5,
- 0xC9A6, 0xC9A7, 0xC9A8, 0xC9A9, 0xC9AA, 0xC9AB, 0xC9AC, 0xC9AD,
- 0xC9AE, 0xC9AF, 0xC9B0, 0xC9B1, 0xC9B2, 0xC9B3, 0xC9B4, 0xC9B5,
- 0xC9B6, 0xC9B7, 0xC9B8, 0xC9B9, 0xC9BA, 0xC9BB, 0xC9BC, 0xC9BD,
- 0xC9BE, 0xC9BF, 0xC9C2, 0xC9C3, 0xC9C5, 0xC9C6, 0xC9C9, 0xC9CB,
- 0xC9CC, 0xC9CD, 0xC9CE, 0xC9CF, 0xC9D2, 0xC9D4, 0xC9D7, 0xC9D8,
- 0xC9DB, 0xC9DE, 0xC9DF, 0xC9E1, 0xC9E3, 0xC9E5, 0xC9E6, 0xC9E8,
- 0xC9E9, 0xC9EA, 0xC9EB, 0xC9EE, 0xC9F2, 0xC9F3, 0xC9F4, 0xC9F5,
- 0xC9F6, 0xC9F7, 0xC9FA, 0xC9FB, 0xC9FD, 0xC9FE, 0xC9FF, 0xCA01,
- 0xCA02, 0xCA03, 0xCA04, 0xCA05, 0xCA06, 0xCA07, 0xCA0A, 0xCA0E,
- 0xCA0F, 0xCA10, 0xCA11, 0xCA12, 0xCA13, 0xCA15, 0xCA16, 0xCA17,
- 0xCA19, 0xCA1A, 0xCA1B, 0xCA1C, 0xCA1D, 0xCA1E, 0xCA1F, 0xCA20,
- 0xCA21, 0xCA22, 0xCA23, 0xCA24, 0xCA25, 0xCA26, 0xCA27, 0xCA28,
- 0xCA2A, 0xCA2B, 0xCA2C, 0xCA2D, 0xCA2E, 0xCA2F, 0xCA30, 0xCA31,
- 0xCA32, 0xCA33, 0xCA34, 0xCA35, 0xCA36, 0xCA37, 0xCA38, 0xCA39,
- 0xCA3A, 0xCA3B, 0xCA3C, 0xCA3D, 0xCA3E, 0xCA3F, 0xCA40, 0xCA41,
- 0xCA42, 0xCA43, 0xCA44, 0xCA45, 0xCA46, 0xCA47, 0xCA48, 0xCA49,
- 0xCA4A, 0xCA4B, 0xCA4E, 0xCA4F, 0xCA51, 0xCA52, 0xCA53, 0xCA55,
- 0xCA56, 0xCA57, 0xCA58, 0xCA59, 0xCA5A, 0xCA5B, 0xCA5E, 0xCA62,
- 0xCA63, 0xCA64, 0xCA65, 0xCA66, 0xCA67, 0xCA69, 0xCA6A, 0xCA6B,
- 0xCA6C, 0xCA6D, 0xCA6E, 0xCA6F, 0xCA70, 0xCA71, 0xCA72, 0xCA73,
- 0xCA74, 0xCA75, 0xCA76, 0xCA77, 0xCA78, 0xCA79, 0xCA7A, 0xCA7B,
- 0xCA7C, 0xCA7E, 0xCA7F, 0xCA80, 0xCA81, 0xCA82, 0xCA83, 0xCA85,
- 0xCA86, 0xCA87, 0xCA88, 0xCA89, 0xCA8A, 0xCA8B, 0xCA8C, 0xCA8D,
- 0xCA8E, 0xCA8F, 0xCA90, 0xCA91, 0xCA92, 0xCA93, 0xCA94, 0xCA95,
- 0xCA96, 0xCA97, 0xCA99, 0xCA9A, 0xCA9B, 0xCA9C, 0xCA9D, 0xCA9E,
- 0xCA9F, 0xCAA0, 0xCAA1, 0xCAA2, 0xCAA3, 0xCAA4, 0xCAA5, 0xCAA6,
- 0xCAA7, 0xCAA8, 0xCAA9, 0xCAAA, 0xCAAB, 0xCAAC, 0xCAAD, 0xCAAE,
- 0xCAAF, 0xCAB0, 0xCAB1, 0xCAB2, 0xCAB3, 0xCAB4, 0xCAB5, 0xCAB6,
- 0xCAB7, 0xCAB8, 0xCAB9, 0xCABA, 0xCABB, 0xCABE, 0xCABF, 0xCAC1,
- 0xCAC2, 0xCAC3, 0xCAC5, 0xCAC6, 0xCAC7, 0xCAC8, 0xCAC9, 0xCACA,
- 0xCACB, 0xCACE, 0xCAD0, 0xCAD2, 0xCAD4, 0xCAD5, 0xCAD6, 0xCAD7,
- 0xCADA, 0xCADB, 0xCADC, 0xCADD, 0xCADE, 0xCADF, 0xCAE1, 0xCAE2,
- 0xCAE3, 0xCAE4, 0xCAE5, 0xCAE6, 0xCAE7, 0xCAE8, 0xCAE9, 0xCAEA,
- 0xCAEB, 0xCAED, 0xCAEE, 0xCAEF, 0xCAF0, 0xCAF1, 0xCAF2, 0xCAF3,
- 0xCAF5, 0xCAF6, 0xCAF7, 0xCAF8, 0xCAF9, 0xCAFA, 0xCAFB, 0xCAFC,
- 0xCAFD, 0xCAFE, 0xCAFF, 0xCB00, 0xCB01, 0xCB02, 0xCB03, 0xCB04,
- 0xCB05, 0xCB06, 0xCB07, 0xCB09, 0xCB0A, 0xCB0B, 0xCB0C, 0xCB0D,
- 0xCB0E, 0xCB0F, 0xCB11, 0xCB12, 0xCB13, 0xCB15, 0xCB16, 0xCB17,
- 0xCB19, 0xCB1A, 0xCB1B, 0xCB1C, 0xCB1D, 0xCB1E, 0xCB1F, 0xCB22,
- 0xCB23, 0xCB24, 0xCB25, 0xCB26, 0xCB27, 0xCB28, 0xCB29, 0xCB2A,
- 0xCB2B, 0xCB2C, 0xCB2D, 0xCB2E, 0xCB2F, 0xCB30, 0xCB31, 0xCB32,
- 0xCB33, 0xCB34, 0xCB35, 0xCB36, 0xCB37, 0xCB38, 0xCB39, 0xCB3A,
- 0xCB3B, 0xCB3C, 0xCB3D, 0xCB3E, 0xCB3F, 0xCB40, 0xCB42, 0xCB43,
- 0xCB44, 0xCB45, 0xCB46, 0xCB47, 0xCB4A, 0xCB4B, 0xCB4D, 0xCB4E,
- 0xCB4F, 0xCB51, 0xCB52, 0xCB53, 0xCB54, 0xCB55, 0xCB56, 0xCB57,
- 0xCB5A, 0xCB5B, 0xCB5C, 0xCB5E, 0xCB5F, 0xCB60, 0xCB61, 0xCB62,
- 0xCB63, 0xCB65, 0xCB66, 0xCB67, 0xCB68, 0xCB69, 0xCB6A, 0xCB6B,
- 0xCB6C, 0xCB6D, 0xCB6E, 0xCB6F, 0xCB70, 0xCB71, 0xCB72, 0xCB73,
- 0xCB74, 0xCB75, 0xCB76, 0xCB77, 0xCB7A, 0xCB7B, 0xCB7C, 0xCB7D,
- 0xCB7E, 0xCB7F, 0xCB80, 0xCB81, 0xCB82, 0xCB83, 0xCB84, 0xCB85,
- 0xCB86, 0xCB87, 0xCB88, 0xCB89, 0xCB8A, 0xCB8B, 0xCB8C, 0xCB8D,
- 0xCB8E, 0xCB8F, 0xCB90, 0xCB91, 0xCB92, 0xCB93, 0xCB94, 0xCB95,
- 0xCB96, 0xCB97, 0xCB98, 0xCB99, 0xCB9A, 0xCB9B, 0xCB9D, 0xCB9E,
- 0xCB9F, 0xCBA0, 0xCBA1, 0xCBA2, 0xCBA3, 0xCBA4, 0xCBA5, 0xCBA6,
- 0xCBA7, 0xCBA8, 0xCBA9, 0xCBAA, 0xCBAB, 0xCBAC, 0xCBAD, 0xCBAE,
- 0xCBAF, 0xCBB0, 0xCBB1, 0xCBB2, 0xCBB3, 0xCBB4, 0xCBB5, 0xCBB6,
- 0xCBB7, 0xCBB9, 0xCBBA, 0xCBBB, 0xCBBC, 0xCBBD, 0xCBBE, 0xCBBF,
- 0xCBC0, 0xCBC1, 0xCBC2, 0xCBC3, 0xCBC4, 0xCBC5, 0xCBC6, 0xCBC7,
- 0xCBC8, 0xCBC9, 0xCBCA, 0xCBCB, 0xCBCC, 0xCBCD, 0xCBCE, 0xCBCF,
- 0xCBD0, 0xCBD1, 0xCBD2, 0xCBD3, 0xCBD5, 0xCBD6, 0xCBD7, 0xCBD8,
- 0xCBD9, 0xCBDA, 0xCBDB, 0xCBDC, 0xCBDD, 0xCBDE, 0xCBDF, 0xCBE0,
- 0xCBE1, 0xCBE2, 0xCBE3, 0xCBE5, 0xCBE6, 0xCBE8, 0xCBEA, 0xCBEB,
- 0xCBEC, 0xCBED, 0xCBEE, 0xCBEF, 0xCBF0, 0xCBF1, 0xCBF2, 0xCBF3,
- 0xCBF4, 0xCBF5, 0xCBF6, 0xCBF7, 0xCBF8, 0xCBF9, 0xCBFA, 0xCBFB,
- 0xCBFC, 0xCBFD, 0xCBFE, 0xCBFF, 0xCC00, 0xCC01, 0xCC02, 0xCC03,
- 0xCC04, 0xCC05, 0xCC06, 0xCC07, 0xCC08, 0xCC09, 0xCC0A, 0xCC0B,
- 0xCC0E, 0xCC0F, 0xCC11, 0xCC12, 0xCC13, 0xCC15, 0xCC16, 0xCC17,
- 0xCC18, 0xCC19, 0xCC1A, 0xCC1B, 0xCC1E, 0xCC1F, 0xCC20, 0xCC23,
- 0xCC24, 0xCC25, 0xCC26, 0xCC2A, 0xCC2B, 0xCC2D, 0xCC2F, 0xCC31,
- 0xCC32, 0xCC33, 0xCC34, 0xCC35, 0xCC36, 0xCC37, 0xCC3A, 0xCC3F,
- 0xCC40, 0xCC41, 0xCC42, 0xCC43, 0xCC46, 0xCC47, 0xCC49, 0xCC4A,
- 0xCC4B, 0xCC4D, 0xCC4E, 0xCC4F, 0xCC50, 0xCC51, 0xCC52, 0xCC53,
- 0xCC56, 0xCC5A, 0xCC5B, 0xCC5C, 0xCC5D, 0xCC5E, 0xCC5F, 0xCC61,
- 0xCC62, 0xCC63, 0xCC65, 0xCC67, 0xCC69, 0xCC6A, 0xCC6B, 0xCC6C,
- 0xCC6D, 0xCC6E, 0xCC6F, 0xCC71, 0xCC72, 0xCC73, 0xCC74, 0xCC76,
- 0xCC77, 0xCC78, 0xCC79, 0xCC7A, 0xCC7B, 0xCC7C, 0xCC7D, 0xCC7E,
- 0xCC7F, 0xCC80, 0xCC81, 0xCC82, 0xCC83, 0xCC84, 0xCC85, 0xCC86,
- 0xCC87, 0xCC88, 0xCC89, 0xCC8A, 0xCC8B, 0xCC8C, 0xCC8D, 0xCC8E,
- 0xCC8F, 0xCC90, 0xCC91, 0xCC92, 0xCC93, 0xCC94, 0xCC95, 0xCC96,
- 0xCC97, 0xCC9A, 0xCC9B, 0xCC9D, 0xCC9E, 0xCC9F, 0xCCA1, 0xCCA2,
- 0xCCA3, 0xCCA4, 0xCCA5, 0xCCA6, 0xCCA7, 0xCCAA, 0xCCAE, 0xCCAF,
- 0xCCB0, 0xCCB1, 0xCCB2, 0xCCB3, 0xCCB6, 0xCCB7, 0xCCB9, 0xCCBA,
- 0xCCBB, 0xCCBD, 0xCCBE, 0xCCBF, 0xCCC0, 0xCCC1, 0xCCC2, 0xCCC3,
- 0xCCC6, 0xCCC8, 0xCCCA, 0xCCCB, 0xCCCC, 0xCCCD, 0xCCCE, 0xCCCF,
- 0xCCD1, 0xCCD2, 0xCCD3, 0xCCD5, 0xCCD6, 0xCCD7, 0xCCD8, 0xCCD9,
- 0xCCDA, 0xCCDB, 0xCCDC, 0xCCDD, 0xCCDE, 0xCCDF, 0xCCE0, 0xCCE1,
- 0xCCE2, 0xCCE3, 0xCCE5, 0xCCE6, 0xCCE7, 0xCCE8, 0xCCE9, 0xCCEA,
- 0xCCEB, 0xCCED, 0xCCEE, 0xCCEF, 0xCCF1, 0xCCF2, 0xCCF3, 0xCCF4,
- 0xCCF5, 0xCCF6, 0xCCF7, 0xCCF8, 0xCCF9, 0xCCFA, 0xCCFB, 0xCCFC,
- 0xCCFD, 0xCCFE, 0xCCFF, 0xCD00, 0xCD02, 0xCD03, 0xCD04, 0xCD05,
- 0xCD06, 0xCD07, 0xCD0A, 0xCD0B, 0xCD0D, 0xCD0E, 0xCD0F, 0xCD11,
- 0xCD12, 0xCD13, 0xCD14, 0xCD15, 0xCD16, 0xCD17, 0xCD1A, 0xCD1C,
- 0xCD1E, 0xCD1F, 0xCD20, 0xCD21, 0xCD22, 0xCD23, 0xCD25, 0xCD26,
- 0xCD27, 0xCD29, 0xCD2A, 0xCD2B, 0xCD2D, 0xCD2E, 0xCD2F, 0xCD30,
- 0xCD31, 0xCD32, 0xCD33, 0xCD34, 0xCD35, 0xCD36, 0xCD37, 0xCD38,
- 0xCD3A, 0xCD3B, 0xCD3C, 0xCD3D, 0xCD3E, 0xCD3F, 0xCD40, 0xCD41,
- 0xCD42, 0xCD43, 0xCD44, 0xCD45, 0xCD46, 0xCD47, 0xCD48, 0xCD49,
- 0xCD4A, 0xCD4B, 0xCD4C, 0xCD4D, 0xCD4E, 0xCD4F, 0xCD50, 0xCD51,
- 0xCD52, 0xCD53, 0xCD54, 0xCD55, 0xCD56, 0xCD57, 0xCD58, 0xCD59,
- 0xCD5A, 0xCD5B, 0xCD5D, 0xCD5E, 0xCD5F, 0xCD61, 0xCD62, 0xCD63,
- 0xCD65, 0xCD66, 0xCD67, 0xCD68, 0xCD69, 0xCD6A, 0xCD6B, 0xCD6E,
- 0xCD70, 0xCD72, 0xCD73, 0xCD74, 0xCD75, 0xCD76, 0xCD77, 0xCD79,
- 0xCD7A, 0xCD7B, 0xCD7C, 0xCD7D, 0xCD7E, 0xCD7F, 0xCD80, 0xCD81,
- 0xCD82, 0xCD83, 0xCD84, 0xCD85, 0xCD86, 0xCD87, 0xCD89, 0xCD8A,
- 0xCD8B, 0xCD8C, 0xCD8D, 0xCD8E, 0xCD8F, 0xCD90, 0xCD91, 0xCD92,
- 0xCD93, 0xCD96, 0xCD97, 0xCD99, 0xCD9A, 0xCD9B, 0xCD9D, 0xCD9E,
- 0xCD9F, 0xCDA0, 0xCDA1, 0xCDA2, 0xCDA3, 0xCDA6, 0xCDA8, 0xCDAA,
- 0xCDAB, 0xCDAC, 0xCDAD, 0xCDAE, 0xCDAF, 0xCDB1, 0xCDB2, 0xCDB3,
- 0xCDB4, 0xCDB5, 0xCDB6, 0xCDB7, 0xCDB8, 0xCDB9, 0xCDBA, 0xCDBB,
- 0xCDBC, 0xCDBD, 0xCDBE, 0xCDBF, 0xCDC0, 0xCDC1, 0xCDC2, 0xCDC3,
- 0xCDC5, 0xCDC6, 0xCDC7, 0xCDC8, 0xCDC9, 0xCDCA, 0xCDCB, 0xCDCD,
- 0xCDCE, 0xCDCF, 0xCDD1, 0xCDD2, 0xCDD3, 0xCDD4, 0xCDD5, 0xCDD6,
- 0xCDD7, 0xCDD8, 0xCDD9, 0xCDDA, 0xCDDB, 0xCDDC, 0xCDDD, 0xCDDE,
- 0xCDDF, 0xCDE0, 0xCDE1, 0xCDE2, 0xCDE3, 0xCDE4, 0xCDE5, 0xCDE6,
- 0xCDE7, 0xCDE9, 0xCDEA, 0xCDEB, 0xCDED, 0xCDEE, 0xCDEF, 0xCDF1,
- 0xCDF2, 0xCDF3, 0xCDF4, 0xCDF5, 0xCDF6, 0xCDF7, 0xCDFA, 0xCDFC,
- 0xCDFE, 0xCDFF, 0xCE00, 0xCE01, 0xCE02, 0xCE03, 0xCE05, 0xCE06,
- 0xCE07, 0xCE09, 0xCE0A, 0xCE0B, 0xCE0D, 0xCE0E, 0xCE0F, 0xCE10,
- 0xCE11, 0xCE12, 0xCE13, 0xCE15, 0xCE16, 0xCE17, 0xCE18, 0xCE1A,
- 0xCE1B, 0xCE1C, 0xCE1D, 0xCE1E, 0xCE1F, 0xCE22, 0xCE23, 0xCE25,
- 0xCE26, 0xCE27, 0xCE29, 0xCE2A, 0xCE2B, 0xCE2C, 0xCE2D, 0xCE2E,
- 0xCE2F, 0xCE32, 0xCE34, 0xCE36, 0xCE37, 0xCE38, 0xCE39, 0xCE3A,
- 0xCE3B, 0xCE3C, 0xCE3D, 0xCE3E, 0xCE3F, 0xCE40, 0xCE41, 0xCE42,
- 0xCE43, 0xCE44, 0xCE45, 0xCE46, 0xCE47, 0xCE48, 0xCE49, 0xCE4A,
- 0xCE4B, 0xCE4C, 0xCE4D, 0xCE4E, 0xCE4F, 0xCE50, 0xCE51, 0xCE52,
- 0xCE53, 0xCE54, 0xCE55, 0xCE56, 0xCE57, 0xCE5A, 0xCE5B, 0xCE5D,
- 0xCE5E, 0xCE62, 0xCE63, 0xCE64, 0xCE65, 0xCE66, 0xCE67, 0xCE6A,
- 0xCE6C, 0xCE6E, 0xCE6F, 0xCE70, 0xCE71, 0xCE72, 0xCE73, 0xCE76,
- 0xCE77, 0xCE79, 0xCE7A, 0xCE7B, 0xCE7D, 0xCE7E, 0xCE7F, 0xCE80,
- 0xCE81, 0xCE82, 0xCE83, 0xCE86, 0xCE88, 0xCE8A, 0xCE8B, 0xCE8C,
- 0xCE8D, 0xCE8E, 0xCE8F, 0xCE92, 0xCE93, 0xCE95, 0xCE96, 0xCE97,
- 0xCE99, 0xCE9A, 0xCE9B, 0xCE9C, 0xCE9D, 0xCE9E, 0xCE9F, 0xCEA2,
- 0xCEA6, 0xCEA7, 0xCEA8, 0xCEA9, 0xCEAA, 0xCEAB, 0xCEAE, 0xCEAF,
- 0xCEB0, 0xCEB1, 0xCEB2, 0xCEB3, 0xCEB4, 0xCEB5, 0xCEB6, 0xCEB7,
- 0xCEB8, 0xCEB9, 0xCEBA, 0xCEBB, 0xCEBC, 0xCEBD, 0xCEBE, 0xCEBF,
- 0xCEC0, 0xCEC2, 0xCEC3, 0xCEC4, 0xCEC5, 0xCEC6, 0xCEC7, 0xCEC8,
- 0xCEC9, 0xCECA, 0xCECB, 0xCECC, 0xCECD, 0xCECE, 0xCECF, 0xCED0,
- 0xCED1, 0xCED2, 0xCED3, 0xCED4, 0xCED5, 0xCED6, 0xCED7, 0xCED8,
- 0xCED9, 0xCEDA, 0xCEDB, 0xCEDC, 0xCEDD, 0xCEDE, 0xCEDF, 0xCEE0,
- 0xCEE1, 0xCEE2, 0xCEE3, 0xCEE6, 0xCEE7, 0xCEE9, 0xCEEA, 0xCEED,
- 0xCEEE, 0xCEEF, 0xCEF0, 0xCEF1, 0xCEF2, 0xCEF3, 0xCEF6, 0xCEFA,
- 0xCEFB, 0xCEFC, 0xCEFD, 0xCEFE, 0xCEFF, 0xCF02, 0xCF03, 0xCF05,
- 0xCF06, 0xCF07, 0xCF09, 0xCF0A, 0xCF0B, 0xCF0C, 0xCF0D, 0xCF0E,
- 0xCF0F, 0xCF12, 0xCF14, 0xCF16, 0xCF17, 0xCF18, 0xCF19, 0xCF1A,
- 0xCF1B, 0xCF1D, 0xCF1E, 0xCF1F, 0xCF21, 0xCF22, 0xCF23, 0xCF25,
- 0xCF26, 0xCF27, 0xCF28, 0xCF29, 0xCF2A, 0xCF2B, 0xCF2E, 0xCF32,
- 0xCF33, 0xCF34, 0xCF35, 0xCF36, 0xCF37, 0xCF39, 0xCF3A, 0xCF3B,
- 0xCF3C, 0xCF3D, 0xCF3E, 0xCF3F, 0xCF40, 0xCF41, 0xCF42, 0xCF43,
- 0xCF44, 0xCF45, 0xCF46, 0xCF47, 0xCF48, 0xCF49, 0xCF4A, 0xCF4B,
- 0xCF4C, 0xCF4D, 0xCF4E, 0xCF4F, 0xCF50, 0xCF51, 0xCF52, 0xCF53,
- 0xCF56, 0xCF57, 0xCF59, 0xCF5A, 0xCF5B, 0xCF5D, 0xCF5E, 0xCF5F,
- 0xCF60, 0xCF61, 0xCF62, 0xCF63, 0xCF66, 0xCF68, 0xCF6A, 0xCF6B,
- 0xCF6C, 0xCF6D, 0xCF6E, 0xCF6F, 0xCF72, 0xCF73, 0xCF75, 0xCF76,
- 0xCF77, 0xCF79, 0xCF7A, 0xCF7B, 0xCF7C, 0xCF7D, 0xCF7E, 0xCF7F,
- 0xCF81, 0xCF82, 0xCF83, 0xCF84, 0xCF86, 0xCF87, 0xCF88, 0xCF89,
- 0xCF8A, 0xCF8B, 0xCF8D, 0xCF8E, 0xCF8F, 0xCF90, 0xCF91, 0xCF92,
- 0xCF93, 0xCF94, 0xCF95, 0xCF96, 0xCF97, 0xCF98, 0xCF99, 0xCF9A,
- 0xCF9B, 0xCF9C, 0xCF9D, 0xCF9E, 0xCF9F, 0xCFA0, 0xCFA2, 0xCFA3,
- 0xCFA4, 0xCFA5, 0xCFA6, 0xCFA7, 0xCFA9, 0xCFAA, 0xCFAB, 0xCFAC,
- 0xCFAD, 0xCFAE, 0xCFAF, 0xCFB1, 0xCFB2, 0xCFB3, 0xCFB4, 0xCFB5,
- 0xCFB6, 0xCFB7, 0xCFB8, 0xCFB9, 0xCFBA, 0xCFBB, 0xCFBC, 0xCFBD,
- 0xCFBE, 0xCFBF, 0xCFC0, 0xCFC1, 0xCFC2, 0xCFC3, 0xCFC5, 0xCFC6,
- 0xCFC7, 0xCFC8, 0xCFC9, 0xCFCA, 0xCFCB, 0xCFCC, 0xCFCD, 0xCFCE,
- 0xCFCF, 0xCFD0, 0xCFD1, 0xCFD2, 0xCFD3, 0xCFD4, 0xCFD5, 0xCFD6,
- 0xCFD7, 0xCFD8, 0xCFD9, 0xCFDA, 0xCFDB, 0xCFDC, 0xCFDD, 0xCFDE,
- 0xCFDF, 0xCFE2, 0xCFE3, 0xCFE5, 0xCFE6, 0xCFE7, 0xCFE9, 0xCFEA,
- 0xCFEB, 0xCFEC, 0xCFED, 0xCFEE, 0xCFEF, 0xCFF2, 0xCFF4, 0xCFF6,
- 0xCFF7, 0xCFF8, 0xCFF9, 0xCFFA, 0xCFFB, 0xCFFD, 0xCFFE, 0xCFFF,
- 0xD001, 0xD002, 0xD003, 0xD005, 0xD006, 0xD007, 0xD008, 0xD009,
- 0xD00A, 0xD00B, 0xD00C, 0xD00D, 0xD00E, 0xD00F, 0xD010, 0xD012,
- 0xD013, 0xD014, 0xD015, 0xD016, 0xD017, 0xD019, 0xD01A, 0xD01B,
- 0xD01C, 0xD01D, 0xD01E, 0xD01F, 0xD020, 0xD021, 0xD022, 0xD023,
- 0xD024, 0xD025, 0xD026, 0xD027, 0xD028, 0xD029, 0xD02A, 0xD02B,
- 0xD02C, 0xD02E, 0xD02F, 0xD030, 0xD031, 0xD032, 0xD033, 0xD036,
- 0xD037, 0xD039, 0xD03A, 0xD03B, 0xD03D, 0xD03E, 0xD03F, 0xD040,
- 0xD041, 0xD042, 0xD043, 0xD046, 0xD048, 0xD04A, 0xD04B, 0xD04C,
- 0xD04D, 0xD04E, 0xD04F, 0xD051, 0xD052, 0xD053, 0xD055, 0xD056,
- 0xD057, 0xD059, 0xD05A, 0xD05B, 0xD05C, 0xD05D, 0xD05E, 0xD05F,
- 0xD061, 0xD062, 0xD063, 0xD064, 0xD065, 0xD066, 0xD067, 0xD068,
- 0xD069, 0xD06A, 0xD06B, 0xD06E, 0xD06F, 0xD071, 0xD072, 0xD073,
- 0xD075, 0xD076, 0xD077, 0xD078, 0xD079, 0xD07A, 0xD07B, 0xD07E,
- 0xD07F, 0xD080, 0xD082, 0xD083, 0xD084, 0xD085, 0xD086, 0xD087,
- 0xD088, 0xD089, 0xD08A, 0xD08B, 0xD08C, 0xD08D, 0xD08E, 0xD08F,
- 0xD090, 0xD091, 0xD092, 0xD093, 0xD094, 0xD095, 0xD096, 0xD097,
- 0xD098, 0xD099, 0xD09A, 0xD09B, 0xD09C, 0xD09D, 0xD09E, 0xD09F,
- 0xD0A0, 0xD0A1, 0xD0A2, 0xD0A3, 0xD0A6, 0xD0A7, 0xD0A9, 0xD0AA,
- 0xD0AB, 0xD0AD, 0xD0AE, 0xD0AF, 0xD0B0, 0xD0B1, 0xD0B2, 0xD0B3,
- 0xD0B6, 0xD0B8, 0xD0BA, 0xD0BB, 0xD0BC, 0xD0BD, 0xD0BE, 0xD0BF,
- 0xD0C2, 0xD0C3, 0xD0C5, 0xD0C6, 0xD0C7, 0xD0CA, 0xD0CB, 0xD0CC,
- 0xD0CD, 0xD0CE, 0xD0CF, 0xD0D2, 0xD0D6, 0xD0D7, 0xD0D8, 0xD0D9,
- 0xD0DA, 0xD0DB, 0xD0DE, 0xD0DF, 0xD0E1, 0xD0E2, 0xD0E3, 0xD0E5,
- 0xD0E6, 0xD0E7, 0xD0E8, 0xD0E9, 0xD0EA, 0xD0EB, 0xD0EE, 0xD0F2,
- 0xD0F3, 0xD0F4, 0xD0F5, 0xD0F6, 0xD0F7, 0xD0F9, 0xD0FA, 0xD0FB,
- 0xD0FC, 0xD0FD, 0xD0FE, 0xD0FF, 0xD100, 0xD101, 0xD102, 0xD103,
- 0xD104, 0xD105, 0xD106, 0xD107, 0xD108, 0xD109, 0xD10A, 0xD10B,
- 0xD10C, 0xD10E, 0xD10F, 0xD110, 0xD111, 0xD112, 0xD113, 0xD114,
- 0xD115, 0xD116, 0xD117, 0xD118, 0xD119, 0xD11A, 0xD11B, 0xD11C,
- 0xD11D, 0xD11E, 0xD11F, 0xD120, 0xD121, 0xD122, 0xD123, 0xD124,
- 0xD125, 0xD126, 0xD127, 0xD128, 0xD129, 0xD12A, 0xD12B, 0xD12C,
- 0xD12D, 0xD12E, 0xD12F, 0xD132, 0xD133, 0xD135, 0xD136, 0xD137,
- 0xD139, 0xD13B, 0xD13C, 0xD13D, 0xD13E, 0xD13F, 0xD142, 0xD146,
- 0xD147, 0xD148, 0xD149, 0xD14A, 0xD14B, 0xD14E, 0xD14F, 0xD151,
- 0xD152, 0xD153, 0xD155, 0xD156, 0xD157, 0xD158, 0xD159, 0xD15A,
- 0xD15B, 0xD15E, 0xD160, 0xD162, 0xD163, 0xD164, 0xD165, 0xD166,
- 0xD167, 0xD169, 0xD16A, 0xD16B, 0xD16D, 0xD16E, 0xD16F, 0xD170,
- 0xD171, 0xD172, 0xD173, 0xD174, 0xD175, 0xD176, 0xD177, 0xD178,
- 0xD179, 0xD17A, 0xD17B, 0xD17D, 0xD17E, 0xD17F, 0xD180, 0xD181,
- 0xD182, 0xD183, 0xD185, 0xD186, 0xD187, 0xD189, 0xD18A, 0xD18B,
- 0xD18C, 0xD18D, 0xD18E, 0xD18F, 0xD190, 0xD191, 0xD192, 0xD193,
- 0xD194, 0xD195, 0xD196, 0xD197, 0xD198, 0xD199, 0xD19A, 0xD19B,
- 0xD19C, 0xD19D, 0xD19E, 0xD19F, 0xD1A2, 0xD1A3, 0xD1A5, 0xD1A6,
- 0xD1A7, 0xD1A9, 0xD1AA, 0xD1AB, 0xD1AC, 0xD1AD, 0xD1AE, 0xD1AF,
- 0xD1B2, 0xD1B4, 0xD1B6, 0xD1B7, 0xD1B8, 0xD1B9, 0xD1BB, 0xD1BD,
- 0xD1BE, 0xD1BF, 0xD1C1, 0xD1C2, 0xD1C3, 0xD1C4, 0xD1C5, 0xD1C6,
- 0xD1C7, 0xD1C8, 0xD1C9, 0xD1CA, 0xD1CB, 0xD1CC, 0xD1CD, 0xD1CE,
- 0xD1CF, 0xD1D0, 0xD1D1, 0xD1D2, 0xD1D3, 0xD1D4, 0xD1D5, 0xD1D6,
- 0xD1D7, 0xD1D9, 0xD1DA, 0xD1DB, 0xD1DC, 0xD1DD, 0xD1DE, 0xD1DF,
- 0xD1E0, 0xD1E1, 0xD1E2, 0xD1E3, 0xD1E4, 0xD1E5, 0xD1E6, 0xD1E7,
- 0xD1E8, 0xD1E9, 0xD1EA, 0xD1EB, 0xD1EC, 0xD1ED, 0xD1EE, 0xD1EF,
- 0xD1F0, 0xD1F1, 0xD1F2, 0xD1F3, 0xD1F5, 0xD1F6, 0xD1F7, 0xD1F9,
- 0xD1FA, 0xD1FB, 0xD1FC, 0xD1FD, 0xD1FE, 0xD1FF, 0xD200, 0xD201,
- 0xD202, 0xD203, 0xD204, 0xD205, 0xD206, 0xD208, 0xD20A, 0xD20B,
- 0xD20C, 0xD20D, 0xD20E, 0xD20F, 0xD211, 0xD212, 0xD213, 0xD214,
- 0xD215, 0xD216, 0xD217, 0xD218, 0xD219, 0xD21A, 0xD21B, 0xD21C,
- 0xD21D, 0xD21E, 0xD21F, 0xD220, 0xD221, 0xD222, 0xD223, 0xD224,
- 0xD225, 0xD226, 0xD227, 0xD228, 0xD229, 0xD22A, 0xD22B, 0xD22E,
- 0xD22F, 0xD231, 0xD232, 0xD233, 0xD235, 0xD236, 0xD237, 0xD238,
- 0xD239, 0xD23A, 0xD23B, 0xD23E, 0xD240, 0xD242, 0xD243, 0xD244,
- 0xD245, 0xD246, 0xD247, 0xD249, 0xD24A, 0xD24B, 0xD24C, 0xD24D,
- 0xD24E, 0xD24F, 0xD250, 0xD251, 0xD252, 0xD253, 0xD254, 0xD255,
- 0xD256, 0xD257, 0xD258, 0xD259, 0xD25A, 0xD25B, 0xD25D, 0xD25E,
- 0xD25F, 0xD260, 0xD261, 0xD262, 0xD263, 0xD265, 0xD266, 0xD267,
- 0xD268, 0xD269, 0xD26A, 0xD26B, 0xD26C, 0xD26D, 0xD26E, 0xD26F,
- 0xD270, 0xD271, 0xD272, 0xD273, 0xD274, 0xD275, 0xD276, 0xD277,
- 0xD278, 0xD279, 0xD27A, 0xD27B, 0xD27C, 0xD27D, 0xD27E, 0xD27F,
- 0xD282, 0xD283, 0xD285, 0xD286, 0xD287, 0xD289, 0xD28A, 0xD28B,
- 0xD28C, 0xD28D, 0xD28E, 0xD28F, 0xD292, 0xD293, 0xD294, 0xD296,
- 0xD297, 0xD298, 0xD299, 0xD29A, 0xD29B, 0xD29D, 0xD29E, 0xD29F,
- 0xD2A1, 0xD2A2, 0xD2A3, 0xD2A5, 0xD2A6, 0xD2A7, 0xD2A8, 0xD2A9,
- 0xD2AA, 0xD2AB, 0xD2AD, 0xD2AE, 0xD2AF, 0xD2B0, 0xD2B2, 0xD2B3,
- 0xD2B4, 0xD2B5, 0xD2B6, 0xD2B7, 0xD2BA, 0xD2BB, 0xD2BD, 0xD2BE,
- 0xD2C1, 0xD2C3, 0xD2C4, 0xD2C5, 0xD2C6, 0xD2C7, 0xD2CA, 0xD2CC,
- 0xD2CD, 0xD2CE, 0xD2CF, 0xD2D0, 0xD2D1, 0xD2D2, 0xD2D3, 0xD2D5,
- 0xD2D6, 0xD2D7, 0xD2D9, 0xD2DA, 0xD2DB, 0xD2DD, 0xD2DE, 0xD2DF,
- 0xD2E0, 0xD2E1, 0xD2E2, 0xD2E3, 0xD2E6, 0xD2E7, 0xD2E8, 0xD2E9,
- 0xD2EA, 0xD2EB, 0xD2EC, 0xD2ED, 0xD2EE, 0xD2EF, 0xD2F2, 0xD2F3,
- 0xD2F5, 0xD2F6, 0xD2F7, 0xD2F9, 0xD2FA, 0xD2FB, 0xD2FC, 0xD2FD,
- 0xD2FE, 0xD2FF, 0xD302, 0xD304, 0xD306, 0xD307, 0xD308, 0xD309,
- 0xD30A, 0xD30B, 0xD30F, 0xD311, 0xD312, 0xD313, 0xD315, 0xD317,
- 0xD318, 0xD319, 0xD31A, 0xD31B, 0xD31E, 0xD322, 0xD323, 0xD324,
- 0xD326, 0xD327, 0xD32A, 0xD32B, 0xD32D, 0xD32E, 0xD32F, 0xD331,
- 0xD332, 0xD333, 0xD334, 0xD335, 0xD336, 0xD337, 0xD33A, 0xD33E,
- 0xD33F, 0xD340, 0xD341, 0xD342, 0xD343, 0xD346, 0xD347, 0xD348,
- 0xD349, 0xD34A, 0xD34B, 0xD34C, 0xD34D, 0xD34E, 0xD34F, 0xD350,
- 0xD351, 0xD352, 0xD353, 0xD354, 0xD355, 0xD356, 0xD357, 0xD358,
- 0xD359, 0xD35A, 0xD35B, 0xD35C, 0xD35D, 0xD35E, 0xD35F, 0xD360,
- 0xD361, 0xD362, 0xD363, 0xD364, 0xD365, 0xD366, 0xD367, 0xD368,
- 0xD369, 0xD36A, 0xD36B, 0xD36C, 0xD36D, 0xD36E, 0xD36F, 0xD370,
- 0xD371, 0xD372, 0xD373, 0xD374, 0xD375, 0xD376, 0xD377, 0xD378,
- 0xD379, 0xD37A, 0xD37B, 0xD37E, 0xD37F, 0xD381, 0xD382, 0xD383,
- 0xD385, 0xD386, 0xD387, 0xD388, 0xD389, 0xD38A, 0xD38B, 0xD38E,
- 0xD392, 0xD393, 0xD394, 0xD395, 0xD396, 0xD397, 0xD39A, 0xD39B,
- 0xD39D, 0xD39E, 0xD39F, 0xD3A1, 0xD3A2, 0xD3A3, 0xD3A4, 0xD3A5,
- 0xD3A6, 0xD3A7, 0xD3AA, 0xD3AC, 0xD3AE, 0xD3AF, 0xD3B0, 0xD3B1,
- 0xD3B2, 0xD3B3, 0xD3B5, 0xD3B6, 0xD3B7, 0xD3B9, 0xD3BA, 0xD3BB,
- 0xD3BD, 0xD3BE, 0xD3BF, 0xD3C0, 0xD3C1, 0xD3C2, 0xD3C3, 0xD3C6,
- 0xD3C7, 0xD3CA, 0xD3CB, 0xD3CC, 0xD3CD, 0xD3CE, 0xD3CF, 0xD3D1,
- 0xD3D2, 0xD3D3, 0xD3D4, 0xD3D5, 0xD3D6, 0xD3D7, 0xD3D9, 0xD3DA,
- 0xD3DB, 0xD3DC, 0xD3DD, 0xD3DE, 0xD3DF, 0xD3E0, 0xD3E2, 0xD3E4,
- 0xD3E5, 0xD3E6, 0xD3E7, 0xD3E8, 0xD3E9, 0xD3EA, 0xD3EB, 0xD3EE,
- 0xD3EF, 0xD3F1, 0xD3F2, 0xD3F3, 0xD3F5, 0xD3F6, 0xD3F7, 0xD3F8,
- 0xD3F9, 0xD3FA, 0xD3FB, 0xD3FE, 0xD400, 0xD402, 0xD403, 0xD404,
- 0xD405, 0xD406, 0xD407, 0xD409, 0xD40A, 0xD40B, 0xD40C, 0xD40D,
- 0xD40E, 0xD40F, 0xD410, 0xD411, 0xD412, 0xD413, 0xD414, 0xD415,
- 0xD416, 0xD417, 0xD418, 0xD419, 0xD41A, 0xD41B, 0xD41C, 0xD41E,
- 0xD41F, 0xD420, 0xD421, 0xD422, 0xD423, 0xD424, 0xD425, 0xD426,
- 0xD427, 0xD428, 0xD429, 0xD42A, 0xD42B, 0xD42C, 0xD42D, 0xD42E,
- 0xD42F, 0xD430, 0xD431, 0xD432, 0xD433, 0xD434, 0xD435, 0xD436,
- 0xD437, 0xD438, 0xD439, 0xD43A, 0xD43B, 0xD43C, 0xD43D, 0xD43E,
- 0xD43F, 0xD441, 0xD442, 0xD443, 0xD445, 0xD446, 0xD447, 0xD448,
- 0xD449, 0xD44A, 0xD44B, 0xD44C, 0xD44D, 0xD44E, 0xD44F, 0xD450,
- 0xD451, 0xD452, 0xD453, 0xD454, 0xD455, 0xD456, 0xD457, 0xD458,
- 0xD459, 0xD45A, 0xD45B, 0xD45D, 0xD45E, 0xD45F, 0xD461, 0xD462,
- 0xD463, 0xD465, 0xD466, 0xD467, 0xD468, 0xD469, 0xD46A, 0xD46B,
- 0xD46C, 0xD46E, 0xD470, 0xD471, 0xD472, 0xD473, 0xD474, 0xD475,
- 0xD476, 0xD477, 0xD47A, 0xD47B, 0xD47D, 0xD47E, 0xD481, 0xD483,
- 0xD484, 0xD485, 0xD486, 0xD487, 0xD48A, 0xD48C, 0xD48E, 0xD48F,
- 0xD490, 0xD491, 0xD492, 0xD493, 0xD495, 0xD496, 0xD497, 0xD498,
- 0xD499, 0xD49A, 0xD49B, 0xD49C, 0xD49D, 0xD49E, 0xD49F, 0xD4A0,
- 0xD4A1, 0xD4A2, 0xD4A3, 0xD4A4, 0xD4A5, 0xD4A6, 0xD4A7, 0xD4A8,
- 0xD4AA, 0xD4AB, 0xD4AC, 0xD4AD, 0xD4AE, 0xD4AF, 0xD4B0, 0xD4B1,
- 0xD4B2, 0xD4B3, 0xD4B4, 0xD4B5, 0xD4B6, 0xD4B7, 0xD4B8, 0xD4B9,
- 0xD4BA, 0xD4BB, 0xD4BC, 0xD4BD, 0xD4BE, 0xD4BF, 0xD4C0, 0xD4C1,
- 0xD4C2, 0xD4C3, 0xD4C4, 0xD4C5, 0xD4C6, 0xD4C7, 0xD4C8, 0xD4C9,
- 0xD4CA, 0xD4CB, 0xD4CD, 0xD4CE, 0xD4CF, 0xD4D1, 0xD4D2, 0xD4D3,
- 0xD4D5, 0xD4D6, 0xD4D7, 0xD4D8, 0xD4D9, 0xD4DA, 0xD4DB, 0xD4DD,
- 0xD4DE, 0xD4E0, 0xD4E1, 0xD4E2, 0xD4E3, 0xD4E4, 0xD4E5, 0xD4E6,
- 0xD4E7, 0xD4E9, 0xD4EA, 0xD4EB, 0xD4ED, 0xD4EE, 0xD4EF, 0xD4F1,
- 0xD4F2, 0xD4F3, 0xD4F4, 0xD4F5, 0xD4F6, 0xD4F7, 0xD4F9, 0xD4FA,
- 0xD4FC, 0xD4FE, 0xD4FF, 0xD500, 0xD501, 0xD502, 0xD503, 0xD505,
- 0xD506, 0xD507, 0xD509, 0xD50A, 0xD50B, 0xD50D, 0xD50E, 0xD50F,
- 0xD510, 0xD511, 0xD512, 0xD513, 0xD516, 0xD518, 0xD519, 0xD51A,
- 0xD51B, 0xD51C, 0xD51D, 0xD51E, 0xD51F, 0xD520, 0xD521, 0xD522,
- 0xD523, 0xD524, 0xD525, 0xD526, 0xD527, 0xD528, 0xD529, 0xD52A,
- 0xD52B, 0xD52C, 0xD52D, 0xD52E, 0xD52F, 0xD530, 0xD531, 0xD532,
- 0xD533, 0xD534, 0xD535, 0xD536, 0xD537, 0xD538, 0xD539, 0xD53A,
- 0xD53B, 0xD53E, 0xD53F, 0xD541, 0xD542, 0xD543, 0xD545, 0xD546,
- 0xD547, 0xD548, 0xD549, 0xD54A, 0xD54B, 0xD54E, 0xD550, 0xD552,
- 0xD553, 0xD554, 0xD555, 0xD556, 0xD557, 0xD55A, 0xD55B, 0xD55D,
- 0xD55E, 0xD55F, 0xD561, 0xD562, 0xD563, 0xD564, 0xD566, 0xD567,
- 0xD56A, 0xD56C, 0xD56E, 0xD56F, 0xD570, 0xD571, 0xD572, 0xD573,
- 0xD576, 0xD577, 0xD579, 0xD57A, 0xD57B, 0xD57D, 0xD57E, 0xD57F,
- 0xD580, 0xD581, 0xD582, 0xD583, 0xD586, 0xD58A, 0xD58B, 0xD58C,
- 0xD58D, 0xD58E, 0xD58F, 0xD591, 0xD592, 0xD593, 0xD594, 0xD595,
- 0xD596, 0xD597, 0xD598, 0xD599, 0xD59A, 0xD59B, 0xD59C, 0xD59D,
- 0xD59E, 0xD59F, 0xD5A0, 0xD5A1, 0xD5A2, 0xD5A3, 0xD5A4, 0xD5A6,
- 0xD5A7, 0xD5A8, 0xD5A9, 0xD5AA, 0xD5AB, 0xD5AC, 0xD5AD, 0xD5AE,
- 0xD5AF, 0xD5B0, 0xD5B1, 0xD5B2, 0xD5B3, 0xD5B4, 0xD5B5, 0xD5B6,
- 0xD5B7, 0xD5B8, 0xD5B9, 0xD5BA, 0xD5BB, 0xD5BC, 0xD5BD, 0xD5BE,
- 0xD5BF, 0xD5C0, 0xD5C1, 0xD5C2, 0xD5C3, 0xD5C4, 0xD5C5, 0xD5C6,
- 0xD5C7, 0xD5CA, 0xD5CB, 0xD5CD, 0xD5CE, 0xD5CF, 0xD5D1, 0xD5D3,
- 0xD5D4, 0xD5D5, 0xD5D6, 0xD5D7, 0xD5DA, 0xD5DC, 0xD5DE, 0xD5DF,
- 0xD5E0, 0xD5E1, 0xD5E2, 0xD5E3, 0xD5E6, 0xD5E7, 0xD5E9, 0xD5EA,
- 0xD5EB, 0xD5ED, 0xD5EE, 0xD5EF, 0xD5F0, 0xD5F1, 0xD5F2, 0xD5F3,
- 0xD5F6, 0xD5F8, 0xD5FA, 0xD5FB, 0xD5FC, 0xD5FD, 0xD5FE, 0xD5FF,
- 0xD602, 0xD603, 0xD605, 0xD606, 0xD607, 0xD609, 0xD60A, 0xD60B,
- 0xD60C, 0xD60D, 0xD60E, 0xD60F, 0xD612, 0xD616, 0xD617, 0xD618,
- 0xD619, 0xD61A, 0xD61B, 0xD61D, 0xD61E, 0xD61F, 0xD621, 0xD622,
- 0xD623, 0xD625, 0xD626, 0xD627, 0xD628, 0xD629, 0xD62A, 0xD62B,
- 0xD62C, 0xD62E, 0xD62F, 0xD630, 0xD631, 0xD632, 0xD633, 0xD634,
- 0xD635, 0xD636, 0xD637, 0xD63A, 0xD63B, 0xD63D, 0xD63E, 0xD63F,
- 0xD641, 0xD642, 0xD643, 0xD644, 0xD646, 0xD647, 0xD64A, 0xD64C,
- 0xD64E, 0xD64F, 0xD650, 0xD652, 0xD653, 0xD656, 0xD657, 0xD659,
- 0xD65A, 0xD65B, 0xD65D, 0xD65E, 0xD65F, 0xD660, 0xD661, 0xD662,
- 0xD663, 0xD664, 0xD665, 0xD666, 0xD668, 0xD66A, 0xD66B, 0xD66C,
- 0xD66D, 0xD66E, 0xD66F, 0xD672, 0xD673, 0xD675, 0xD676, 0xD677,
- 0xD678, 0xD679, 0xD67A, 0xD67B, 0xD67C, 0xD67D, 0xD67E, 0xD67F,
- 0xD680, 0xD681, 0xD682, 0xD684, 0xD686, 0xD687, 0xD688, 0xD689,
- 0xD68A, 0xD68B, 0xD68E, 0xD68F, 0xD691, 0xD692, 0xD693, 0xD695,
- 0xD696, 0xD697, 0xD698, 0xD699, 0xD69A, 0xD69B, 0xD69C, 0xD69E,
- 0xD6A0, 0xD6A2, 0xD6A3, 0xD6A4, 0xD6A5, 0xD6A6, 0xD6A7, 0xD6A9,
- 0xD6AA, 0xD6AB, 0xD6AD, 0xD6AE, 0xD6AF, 0xD6B1, 0xD6B2, 0xD6B3,
- 0xD6B4, 0xD6B5, 0xD6B6, 0xD6B7, 0xD6B8, 0xD6BA, 0xD6BC, 0xD6BD,
- 0xD6BE, 0xD6BF, 0xD6C0, 0xD6C1, 0xD6C2, 0xD6C3, 0xD6C6, 0xD6C7,
- 0xD6C9, 0xD6CA, 0xD6CB, 0xD6CD, 0xD6CE, 0xD6CF, 0xD6D0, 0xD6D2,
- 0xD6D3, 0xD6D5, 0xD6D6, 0xD6D8, 0xD6DA, 0xD6DB, 0xD6DC, 0xD6DD,
- 0xD6DE, 0xD6DF, 0xD6E1, 0xD6E2, 0xD6E3, 0xD6E5, 0xD6E6, 0xD6E7,
- 0xD6E9, 0xD6EA, 0xD6EB, 0xD6EC, 0xD6ED, 0xD6EE, 0xD6EF, 0xD6F1,
- 0xD6F2, 0xD6F3, 0xD6F4, 0xD6F6, 0xD6F7, 0xD6F8, 0xD6F9, 0xD6FA,
- 0xD6FB, 0xD6FE, 0xD6FF, 0xD701, 0xD702, 0xD703, 0xD705, 0xD706,
- 0xD707, 0xD708, 0xD709, 0xD70A, 0xD70B, 0xD70C, 0xD70D, 0xD70E,
- 0xD70F, 0xD710, 0xD712, 0xD713, 0xD714, 0xD715, 0xD716, 0xD717,
- 0xD71A, 0xD71B, 0xD71D, 0xD71E, 0xD71F, 0xD721, 0xD722, 0xD723,
- 0xD724, 0xD725, 0xD726, 0xD727, 0xD72A, 0xD72C, 0xD72E, 0xD72F,
- 0xD730, 0xD731, 0xD732, 0xD733, 0xD736, 0xD737, 0xD739, 0xD73A,
- 0xD73B, 0xD73D, 0xD73E, 0xD73F, 0xD740, 0xD741, 0xD742, 0xD743,
- 0xD745, 0xD746, 0xD748, 0xD74A, 0xD74B, 0xD74C, 0xD74D, 0xD74E,
- 0xD74F, 0xD752, 0xD753, 0xD755, 0xD75A, 0xD75B, 0xD75C, 0xD75D,
- 0xD75E, 0xD75F, 0xD762, 0xD764, 0xD766, 0xD767, 0xD768, 0xD76A,
- 0xD76B, 0xD76D, 0xD76E, 0xD76F, 0xD771, 0xD772, 0xD773, 0xD775,
- 0xD776, 0xD777, 0xD778, 0xD779, 0xD77A, 0xD77B, 0xD77E, 0xD77F,
- 0xD780, 0xD782, 0xD783, 0xD784, 0xD785, 0xD786, 0xD787, 0xD78A,
- 0xD78B, 0xD78D, 0xD78E, 0xD78F, 0xD791, 0xD792, 0xD793, 0xD794,
- 0xD795, 0xD796, 0xD797, 0xD79A, 0xD79C, 0xD79E, 0xD79F, 0xD7A0,
- 0xD7A1, 0xD7A2, 0xD7A3, 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, 0x20A9, 0x2010, 0x00A9, 0x2122, 0x22EF, 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, 0x203E, 0x007E, 0x005C,
+ 0xFFFD, 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, 0x20A9, 0x2010, 0x00A9,
+ 0x2122, 0x22EF, 0x3000, 0x3001, 0x3002, 0x00B7, 0x2025, 0x2026, 0x00A8,
+ 0x3003, 0x2013, 0x2014, 0x2016, 0xFF3C, 0x223C, 0x2018, 0x2019, 0x201C,
+ 0x201D, 0x3014, 0x3015, 0x3008, 0x3009, 0x300A, 0x300B, 0x300C, 0x300D,
+ 0x300E, 0x300F, 0x3010, 0x3011, 0x00B1, 0x00D7, 0x00F7, 0x2260, 0x2264,
+ 0x2265, 0x221E, 0x2234, 0x00B0, 0x2032, 0x2033, 0x2103, 0x212B, 0xFFE0,
+ 0xFFE1, 0xFFE5, 0x2642, 0x2640, 0x2220, 0x22A5, 0x2312, 0x2202, 0x2207,
+ 0x2261, 0x2252, 0x00A7, 0x203B, 0x2606, 0x2605, 0x25CB, 0x25CF, 0x25CE,
+ 0x25C7, 0x25C6, 0x25A1, 0x25A0, 0x25B3, 0x25B2, 0x25BD, 0x25BC, 0x2192,
+ 0x2190, 0x2191, 0x2193, 0x2194, 0x3013, 0x226A, 0x226B, 0x221A, 0x223D,
+ 0x221D, 0x2235, 0x222B, 0x222C, 0x2208, 0x220B, 0x2286, 0x2287, 0x2282,
+ 0x2283, 0x222A, 0x2229, 0x2227, 0x2228, 0xFFE2, 0x21D2, 0x21D4, 0x2200,
+ 0x2203, 0x00B4, 0x02DC, 0x02C7, 0x02D8, 0x02DD, 0x02DA, 0x02D9, 0x00B8,
+ 0x02DB, 0x00A1, 0x00BF, 0x2236, 0x222E, 0x2211, 0x220F, 0x00A4, 0x2109,
+ 0x2030, 0x25C1, 0x25C0, 0x25B7, 0x25B6, 0x2664, 0x2660, 0x2661, 0x2665,
+ 0x2667, 0x2663, 0x2299, 0x25C8, 0x25A3, 0x25D0, 0x25D1, 0x2592, 0x25A4,
+ 0x25A5, 0x25A8, 0x25A7, 0x25A6, 0x25A9, 0x2668, 0x260F, 0x260E, 0x261C,
+ 0x261E, 0x00B6, 0x2020, 0x2021, 0x2195, 0x2197, 0x2199, 0x2196, 0x2198,
+ 0x266D, 0x2669, 0x266A, 0x266C, 0x327F, 0x321C, 0x2116, 0x33C7, 0x2122,
+ 0x33C2, 0x33D8, 0x2121, 0xFF01, 0xFF02, 0xFF03, 0xFF04, 0xFF05, 0xFF06,
+ 0xFF07, 0xFF08, 0xFF09, 0xFF0A, 0xFF0B, 0xFF0C, 0xFF0D, 0xFF0E, 0xFF0F,
+ 0xFF10, 0xFF11, 0xFF12, 0xFF13, 0xFF14, 0xFF15, 0xFF16, 0xFF17, 0xFF18,
+ 0xFF19, 0xFF1A, 0xFF1B, 0xFF1C, 0xFF1D, 0xFF1E, 0xFF1F, 0xFF20, 0xFF21,
+ 0xFF22, 0xFF23, 0xFF24, 0xFF25, 0xFF26, 0xFF27, 0xFF28, 0xFF29, 0xFF2A,
+ 0xFF2B, 0xFF2C, 0xFF2D, 0xFF2E, 0xFF2F, 0xFF30, 0xFF31, 0xFF32, 0xFF33,
+ 0xFF34, 0xFF35, 0xFF36, 0xFF37, 0xFF38, 0xFF39, 0xFF3A, 0xFF3B, 0xFFE6,
+ 0xFF3D, 0xFF3E, 0xFF3F, 0xFF40, 0xFF41, 0xFF42, 0xFF43, 0xFF44, 0xFF45,
+ 0xFF46, 0xFF47, 0xFF48, 0xFF49, 0xFF4A, 0xFF4B, 0xFF4C, 0xFF4D, 0xFF4E,
+ 0xFF4F, 0xFF50, 0xFF51, 0xFF52, 0xFF53, 0xFF54, 0xFF55, 0xFF56, 0xFF57,
+ 0xFF58, 0xFF59, 0xFF5A, 0xFF5B, 0xFF5C, 0xFF5D, 0xFFE3, 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, 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, 0x2170, 0x2171, 0x2172, 0x2173, 0x2174, 0x2175, 0x2176, 0x2177,
+ 0x2178, 0x2179, 0x2160, 0x2161, 0x2162, 0x2163, 0x2164, 0x2165, 0x2166,
+ 0x2167, 0x2168, 0x2169, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396,
+ 0x0397, 0x0398, 0x0399, 0x039A, 0x039B, 0x039C, 0x039D, 0x039E, 0x039F,
+ 0x03A0, 0x03A1, 0x03A3, 0x03A4, 0x03A5, 0x03A6, 0x03A7, 0x03A8, 0x03A9,
+ 0x03B1, 0x03B2, 0x03B3, 0x03B4, 0x03B5, 0x03B6, 0x03B7, 0x03B8, 0x03B9,
+ 0x03BA, 0x03BB, 0x03BC, 0x03BD, 0x03BE, 0x03BF, 0x03C0, 0x03C1, 0x03C3,
+ 0x03C4, 0x03C5, 0x03C6, 0x03C7, 0x03C8, 0x03C9, 0x2500, 0x2502, 0x250C,
+ 0x2510, 0x2518, 0x2514, 0x251C, 0x252C, 0x2524, 0x2534, 0x253C, 0x2501,
+ 0x2503, 0x250F, 0x2513, 0x251B, 0x2517, 0x2523, 0x2533, 0x252B, 0x253B,
+ 0x254B, 0x2520, 0x252F, 0x2528, 0x2537, 0x253F, 0x251D, 0x2530, 0x2525,
+ 0x2538, 0x2542, 0x2512, 0x2511, 0x251A, 0x2519, 0x2516, 0x2515, 0x250E,
+ 0x250D, 0x251E, 0x251F, 0x2521, 0x2522, 0x2526, 0x2527, 0x2529, 0x252A,
+ 0x252D, 0x252E, 0x2531, 0x2532, 0x2535, 0x2536, 0x2539, 0x253A, 0x253D,
+ 0x253E, 0x2540, 0x2541, 0x2543, 0x2544, 0x2545, 0x2546, 0x2547, 0x2548,
+ 0x2549, 0x254A, 0x3395, 0x3396, 0x3397, 0x2113, 0x3398, 0x33C4, 0x33A3,
+ 0x33A4, 0x33A5, 0x33A6, 0x3399, 0x339A, 0x339B, 0x339C, 0x339D, 0x339E,
+ 0x339F, 0x33A0, 0x33A1, 0x33A2, 0x33CA, 0x338D, 0x338E, 0x338F, 0x33CF,
+ 0x3388, 0x3389, 0x33C8, 0x33A7, 0x33A8, 0x33B0, 0x33B1, 0x33B2, 0x33B3,
+ 0x33B4, 0x33B5, 0x33B6, 0x33B7, 0x33B8, 0x33B9, 0x3380, 0x3381, 0x3382,
+ 0x3383, 0x3384, 0x33BA, 0x33BB, 0x33BC, 0x33BD, 0x33BE, 0x33BF, 0x3390,
+ 0x3391, 0x3392, 0x3393, 0x3394, 0x2126, 0x33C0, 0x33C1, 0x338A, 0x338B,
+ 0x338C, 0x33D6, 0x33C5, 0x33AD, 0x33AE, 0x33AF, 0x33DB, 0x33A9, 0x33AA,
+ 0x33AB, 0x33AC, 0x33DD, 0x33D0, 0x33D3, 0x33C3, 0x33C9, 0x33DC, 0x33C6,
+ 0x00C6, 0x00D0, 0x00AA, 0x0126, 0x0132, 0x013F, 0x0141, 0x00D8, 0x0152,
+ 0x00BA, 0x00DE, 0x0166, 0x014A, 0x3260, 0x3261, 0x3262, 0x3263, 0x3264,
+ 0x3265, 0x3266, 0x3267, 0x3268, 0x3269, 0x326A, 0x326B, 0x326C, 0x326D,
+ 0x326E, 0x326F, 0x3270, 0x3271, 0x3272, 0x3273, 0x3274, 0x3275, 0x3276,
+ 0x3277, 0x3278, 0x3279, 0x327A, 0x327B, 0x24D0, 0x24D1, 0x24D2, 0x24D3,
+ 0x24D4, 0x24D5, 0x24D6, 0x24D7, 0x24D8, 0x24D9, 0x24DA, 0x24DB, 0x24DC,
+ 0x24DD, 0x24DE, 0x24DF, 0x24E0, 0x24E1, 0x24E2, 0x24E3, 0x24E4, 0x24E5,
+ 0x24E6, 0x24E7, 0x24E8, 0x24E9, 0x2460, 0x2461, 0x2462, 0x2463, 0x2464,
+ 0x2465, 0x2466, 0x2467, 0x2468, 0x2469, 0x246A, 0x246B, 0x246C, 0x246D,
+ 0x246E, 0x00BD, 0x2153, 0x2154, 0x00BC, 0x00BE, 0x215B, 0x215C, 0x215D,
+ 0x215E, 0x00E6, 0x0111, 0x00F0, 0x0127, 0x0131, 0x0133, 0x0138, 0x0140,
+ 0x0142, 0x00F8, 0x0153, 0x00DF, 0x00FE, 0x0167, 0x014B, 0x0149, 0x3200,
+ 0x3201, 0x3202, 0x3203, 0x3204, 0x3205, 0x3206, 0x3207, 0x3208, 0x3209,
+ 0x320A, 0x320B, 0x320C, 0x320D, 0x320E, 0x320F, 0x3210, 0x3211, 0x3212,
+ 0x3213, 0x3214, 0x3215, 0x3216, 0x3217, 0x3218, 0x3219, 0x321A, 0x321B,
+ 0x249C, 0x249D, 0x249E, 0x249F, 0x24A0, 0x24A1, 0x24A2, 0x24A3, 0x24A4,
+ 0x24A5, 0x24A6, 0x24A7, 0x24A8, 0x24A9, 0x24AA, 0x24AB, 0x24AC, 0x24AD,
+ 0x24AE, 0x24AF, 0x24B0, 0x24B1, 0x24B2, 0x24B3, 0x24B4, 0x24B5, 0x2474,
+ 0x2475, 0x2476, 0x2477, 0x2478, 0x2479, 0x247A, 0x247B, 0x247C, 0x247D,
+ 0x247E, 0x247F, 0x2480, 0x2481, 0x2482, 0x00B9, 0x00B2, 0x00B3, 0x2074,
+ 0x207F, 0x2081, 0x2082, 0x2083, 0x2084, 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, 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, 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,
+ 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, 0xAC00, 0xAC01, 0xAC04,
+ 0xAC07, 0xAC08, 0xAC09, 0xAC0A, 0xAC10, 0xAC11, 0xAC12, 0xAC13, 0xAC14,
+ 0xAC15, 0xAC16, 0xAC17, 0xAC19, 0xAC1A, 0xAC1B, 0xAC1C, 0xAC1D, 0xAC20,
+ 0xAC24, 0xAC2C, 0xAC2D, 0xAC2F, 0xAC30, 0xAC31, 0xAC38, 0xAC39, 0xAC3C,
+ 0xAC40, 0xAC4B, 0xAC4D, 0xAC54, 0xAC58, 0xAC5C, 0xAC70, 0xAC71, 0xAC74,
+ 0xAC77, 0xAC78, 0xAC7A, 0xAC80, 0xAC81, 0xAC83, 0xAC84, 0xAC85, 0xAC86,
+ 0xAC89, 0xAC8A, 0xAC8B, 0xAC8C, 0xAC90, 0xAC94, 0xAC9C, 0xAC9D, 0xAC9F,
+ 0xACA0, 0xACA1, 0xACA8, 0xACA9, 0xACAA, 0xACAC, 0xACAF, 0xACB0, 0xACB8,
+ 0xACB9, 0xACBB, 0xACBC, 0xACBD, 0xACC1, 0xACC4, 0xACC8, 0xACCC, 0xACD5,
+ 0xACD7, 0xACE0, 0xACE1, 0xACE4, 0xACE7, 0xACE8, 0xACEA, 0xACEC, 0xACEF,
+ 0xACF0, 0xACF1, 0xACF3, 0xACF5, 0xACF6, 0xACFC, 0xACFD, 0xAD00, 0xAD04,
+ 0xAD06, 0xAD0C, 0xAD0D, 0xAD0F, 0xAD11, 0xAD18, 0xAD1C, 0xAD20, 0xAD29,
+ 0xAD2C, 0xAD2D, 0xAD34, 0xAD35, 0xAD38, 0xAD3C, 0xAD44, 0xAD45, 0xAD47,
+ 0xAD49, 0xAD50, 0xAD54, 0xAD58, 0xAD61, 0xAD63, 0xAD6C, 0xAD6D, 0xAD70,
+ 0xAD73, 0xAD74, 0xAD75, 0xAD76, 0xAD7B, 0xAD7C, 0xAD7D, 0xAD7F, 0xAD81,
+ 0xAD82, 0xAD88, 0xAD89, 0xAD8C, 0xAD90, 0xAD9C, 0xAD9D, 0xADA4, 0xADB7,
+ 0xADC0, 0xADC1, 0xADC4, 0xADC8, 0xADD0, 0xADD1, 0xADD3, 0xADDC, 0xADE0,
+ 0xADE4, 0xADF8, 0xADF9, 0xADFC, 0xADFF, 0xAE00, 0xAE01, 0xAE08, 0xAE09,
+ 0xAE0B, 0xAE0D, 0xAE14, 0xAE30, 0xAE31, 0xAE34, 0xAE37, 0xAE38, 0xAE3A,
+ 0xAE40, 0xAE41, 0xAE43, 0xAE45, 0xAE46, 0xAE4A, 0xAE4C, 0xAE4D, 0xAE4E,
+ 0xAE50, 0xAE54, 0xAE56, 0xAE5C, 0xAE5D, 0xAE5F, 0xAE60, 0xAE61, 0xAE65,
+ 0xAE68, 0xAE69, 0xAE6C, 0xAE70, 0xAE78, 0xAE79, 0xAE7B, 0xAE7C, 0xAE7D,
+ 0xAE84, 0xAE85, 0xAE8C, 0xAEBC, 0xAEBD, 0xAEBE, 0xAEC0, 0xAEC4, 0xAECC,
+ 0xAECD, 0xAECF, 0xAED0, 0xAED1, 0xAED8, 0xAED9, 0xAEDC, 0xAEE8, 0xAEEB,
+ 0xAEED, 0xAEF4, 0xAEF8, 0xAEFC, 0xAF07, 0xAF08, 0xAF0D, 0xAF10, 0xAF2C,
+ 0xAF2D, 0xAF30, 0xAF32, 0xAF34, 0xAF3C, 0xAF3D, 0xAF3F, 0xAF41, 0xAF42,
+ 0xAF43, 0xAF48, 0xAF49, 0xAF50, 0xAF5C, 0xAF5D, 0xAF64, 0xAF65, 0xAF79,
+ 0xAF80, 0xAF84, 0xAF88, 0xAF90, 0xAF91, 0xAF95, 0xAF9C, 0xAFB8, 0xAFB9,
+ 0xAFBC, 0xAFC0, 0xAFC7, 0xAFC8, 0xAFC9, 0xAFCB, 0xAFCD, 0xAFCE, 0xAFD4,
+ 0xAFDC, 0xAFE8, 0xAFE9, 0xAFF0, 0xAFF1, 0xAFF4, 0xAFF8, 0xB000, 0xB001,
+ 0xB004, 0xB00C, 0xB010, 0xB014, 0xB01C, 0xB01D, 0xB028, 0xB044, 0xB045,
+ 0xB048, 0xB04A, 0xB04C, 0xB04E, 0xB053, 0xB054, 0xB055, 0xB057, 0xB059,
+ 0xB05D, 0xB07C, 0xB07D, 0xB080, 0xB084, 0xB08C, 0xB08D, 0xB08F, 0xB091,
+ 0xB098, 0xB099, 0xB09A, 0xB09C, 0xB09F, 0xB0A0, 0xB0A1, 0xB0A2, 0xB0A8,
+ 0xB0A9, 0xB0AB, 0xB0AC, 0xB0AD, 0xB0AE, 0xB0AF, 0xB0B1, 0xB0B3, 0xB0B4,
+ 0xB0B5, 0xB0B8, 0xB0BC, 0xB0C4, 0xB0C5, 0xB0C7, 0xB0C8, 0xB0C9, 0xB0D0,
+ 0xB0D1, 0xB0D4, 0xB0D8, 0xB0E0, 0xB0E5, 0xB108, 0xB109, 0xB10B, 0xB10C,
+ 0xB110, 0xB112, 0xB113, 0xB118, 0xB119, 0xB11B, 0xB11C, 0xB11D, 0xB123,
+ 0xB124, 0xB125, 0xB128, 0xB12C, 0xB134, 0xB135, 0xB137, 0xB138, 0xB139,
+ 0xB140, 0xB141, 0xB144, 0xB148, 0xB150, 0xB151, 0xB154, 0xB155, 0xB158,
+ 0xB15C, 0xB160, 0xB178, 0xB179, 0xB17C, 0xB180, 0xB182, 0xB188, 0xB189,
+ 0xB18B, 0xB18D, 0xB192, 0xB193, 0xB194, 0xB198, 0xB19C, 0xB1A8, 0xB1CC,
+ 0xB1D0, 0xB1D4, 0xB1DC, 0xB1DD, 0xB1DF, 0xB1E8, 0xB1E9, 0xB1EC, 0xB1F0,
+ 0xB1F9, 0xB1FB, 0xB1FD, 0xB204, 0xB205, 0xB208, 0xB20B, 0xB20C, 0xB214,
+ 0xB215, 0xB217, 0xB219, 0xB220, 0xB234, 0xB23C, 0xB258, 0xB25C, 0xB260,
+ 0xB268, 0xB269, 0xB274, 0xB275, 0xB27C, 0xB284, 0xB285, 0xB289, 0xB290,
+ 0xB291, 0xB294, 0xB298, 0xB299, 0xB29A, 0xB2A0, 0xB2A1, 0xB2A3, 0xB2A5,
+ 0xB2A6, 0xB2AA, 0xB2AC, 0xB2B0, 0xB2B4, 0xB2C8, 0xB2C9, 0xB2CC, 0xB2D0,
+ 0xB2D2, 0xB2D8, 0xB2D9, 0xB2DB, 0xB2DD, 0xB2E2, 0xB2E4, 0xB2E5, 0xB2E6,
+ 0xB2E8, 0xB2EB, 0xB2EC, 0xB2ED, 0xB2EE, 0xB2EF, 0xB2F3, 0xB2F4, 0xB2F5,
+ 0xB2F7, 0xB2F8, 0xB2F9, 0xB2FA, 0xB2FB, 0xB2FF, 0xB300, 0xB301, 0xB304,
+ 0xB308, 0xB310, 0xB311, 0xB313, 0xB314, 0xB315, 0xB31C, 0xB354, 0xB355,
+ 0xB356, 0xB358, 0xB35B, 0xB35C, 0xB35E, 0xB35F, 0xB364, 0xB365, 0xB367,
+ 0xB369, 0xB36B, 0xB36E, 0xB370, 0xB371, 0xB374, 0xB378, 0xB380, 0xB381,
+ 0xB383, 0xB384, 0xB385, 0xB38C, 0xB390, 0xB394, 0xB3A0, 0xB3A1, 0xB3A8,
+ 0xB3AC, 0xB3C4, 0xB3C5, 0xB3C8, 0xB3CB, 0xB3CC, 0xB3CE, 0xB3D0, 0xB3D4,
+ 0xB3D5, 0xB3D7, 0xB3D9, 0xB3DB, 0xB3DD, 0xB3E0, 0xB3E4, 0xB3E8, 0xB3FC,
+ 0xB410, 0xB418, 0xB41C, 0xB420, 0xB428, 0xB429, 0xB42B, 0xB434, 0xB450,
+ 0xB451, 0xB454, 0xB458, 0xB460, 0xB461, 0xB463, 0xB465, 0xB46C, 0xB480,
+ 0xB488, 0xB49D, 0xB4A4, 0xB4A8, 0xB4AC, 0xB4B5, 0xB4B7, 0xB4B9, 0xB4C0,
+ 0xB4C4, 0xB4C8, 0xB4D0, 0xB4D5, 0xB4DC, 0xB4DD, 0xB4E0, 0xB4E3, 0xB4E4,
+ 0xB4E6, 0xB4EC, 0xB4ED, 0xB4EF, 0xB4F1, 0xB4F8, 0xB514, 0xB515, 0xB518,
+ 0xB51B, 0xB51C, 0xB524, 0xB525, 0xB527, 0xB528, 0xB529, 0xB52A, 0xB530,
+ 0xB531, 0xB534, 0xB538, 0xB540, 0xB541, 0xB543, 0xB544, 0xB545, 0xB54B,
+ 0xB54C, 0xB54D, 0xB550, 0xB554, 0xB55C, 0xB55D, 0xB55F, 0xB560, 0xB561,
+ 0xB5A0, 0xB5A1, 0xB5A4, 0xB5A8, 0xB5AA, 0xB5AB, 0xB5B0, 0xB5B1, 0xB5B3,
+ 0xB5B4, 0xB5B5, 0xB5BB, 0xB5BC, 0xB5BD, 0xB5C0, 0xB5C4, 0xB5CC, 0xB5CD,
+ 0xB5CF, 0xB5D0, 0xB5D1, 0xB5D8, 0xB5EC, 0xB610, 0xB611, 0xB614, 0xB618,
+ 0xB625, 0xB62C, 0xB634, 0xB648, 0xB664, 0xB668, 0xB69C, 0xB69D, 0xB6A0,
+ 0xB6A4, 0xB6AB, 0xB6AC, 0xB6B1, 0xB6D4, 0xB6F0, 0xB6F4, 0xB6F8, 0xB700,
+ 0xB701, 0xB705, 0xB728, 0xB729, 0xB72C, 0xB72F, 0xB730, 0xB738, 0xB739,
+ 0xB73B, 0xB744, 0xB748, 0xB74C, 0xB754, 0xB755, 0xB760, 0xB764, 0xB768,
+ 0xB770, 0xB771, 0xB773, 0xB775, 0xB77C, 0xB77D, 0xB780, 0xB784, 0xB78C,
+ 0xB78D, 0xB78F, 0xB790, 0xB791, 0xB792, 0xB796, 0xB797, 0xB798, 0xB799,
+ 0xB79C, 0xB7A0, 0xB7A8, 0xB7A9, 0xB7AB, 0xB7AC, 0xB7AD, 0xB7B4, 0xB7B5,
+ 0xB7B8, 0xB7C7, 0xB7C9, 0xB7EC, 0xB7ED, 0xB7F0, 0xB7F4, 0xB7FC, 0xB7FD,
+ 0xB7FF, 0xB800, 0xB801, 0xB807, 0xB808, 0xB809, 0xB80C, 0xB810, 0xB818,
+ 0xB819, 0xB81B, 0xB81D, 0xB824, 0xB825, 0xB828, 0xB82C, 0xB834, 0xB835,
+ 0xB837, 0xB838, 0xB839, 0xB840, 0xB844, 0xB851, 0xB853, 0xB85C, 0xB85D,
+ 0xB860, 0xB864, 0xB86C, 0xB86D, 0xB86F, 0xB871, 0xB878, 0xB87C, 0xB88D,
+ 0xB8A8, 0xB8B0, 0xB8B4, 0xB8B8, 0xB8C0, 0xB8C1, 0xB8C3, 0xB8C5, 0xB8CC,
+ 0xB8D0, 0xB8D4, 0xB8DD, 0xB8DF, 0xB8E1, 0xB8E8, 0xB8E9, 0xB8EC, 0xB8F0,
+ 0xB8F8, 0xB8F9, 0xB8FB, 0xB8FD, 0xB904, 0xB918, 0xB920, 0xB93C, 0xB93D,
+ 0xB940, 0xB944, 0xB94C, 0xB94F, 0xB951, 0xB958, 0xB959, 0xB95C, 0xB960,
+ 0xB968, 0xB969, 0xB96B, 0xB96D, 0xB974, 0xB975, 0xB978, 0xB97C, 0xB984,
+ 0xB985, 0xB987, 0xB989, 0xB98A, 0xB98D, 0xB98E, 0xB9AC, 0xB9AD, 0xB9B0,
+ 0xB9B4, 0xB9BC, 0xB9BD, 0xB9BF, 0xB9C1, 0xB9C8, 0xB9C9, 0xB9CC, 0xB9CE,
+ 0xB9CF, 0xB9D0, 0xB9D1, 0xB9D2, 0xB9D8, 0xB9D9, 0xB9DB, 0xB9DD, 0xB9DE,
+ 0xB9E1, 0xB9E3, 0xB9E4, 0xB9E5, 0xB9E8, 0xB9EC, 0xB9F4, 0xB9F5, 0xB9F7,
+ 0xB9F8, 0xB9F9, 0xB9FA, 0xBA00, 0xBA01, 0xBA08, 0xBA15, 0xBA38, 0xBA39,
+ 0xBA3C, 0xBA40, 0xBA42, 0xBA48, 0xBA49, 0xBA4B, 0xBA4D, 0xBA4E, 0xBA53,
+ 0xBA54, 0xBA55, 0xBA58, 0xBA5C, 0xBA64, 0xBA65, 0xBA67, 0xBA68, 0xBA69,
+ 0xBA70, 0xBA71, 0xBA74, 0xBA78, 0xBA83, 0xBA84, 0xBA85, 0xBA87, 0xBA8C,
+ 0xBAA8, 0xBAA9, 0xBAAB, 0xBAAC, 0xBAB0, 0xBAB2, 0xBAB8, 0xBAB9, 0xBABB,
+ 0xBABD, 0xBAC4, 0xBAC8, 0xBAD8, 0xBAD9, 0xBAFC, 0xBB00, 0xBB04, 0xBB0D,
+ 0xBB0F, 0xBB11, 0xBB18, 0xBB1C, 0xBB20, 0xBB29, 0xBB2B, 0xBB34, 0xBB35,
+ 0xBB36, 0xBB38, 0xBB3B, 0xBB3C, 0xBB3D, 0xBB3E, 0xBB44, 0xBB45, 0xBB47,
+ 0xBB49, 0xBB4D, 0xBB4F, 0xBB50, 0xBB54, 0xBB58, 0xBB61, 0xBB63, 0xBB6C,
+ 0xBB88, 0xBB8C, 0xBB90, 0xBBA4, 0xBBA8, 0xBBAC, 0xBBB4, 0xBBB7, 0xBBC0,
+ 0xBBC4, 0xBBC8, 0xBBD0, 0xBBD3, 0xBBF8, 0xBBF9, 0xBBFC, 0xBBFF, 0xBC00,
+ 0xBC02, 0xBC08, 0xBC09, 0xBC0B, 0xBC0C, 0xBC0D, 0xBC0F, 0xBC11, 0xBC14,
+ 0xBC15, 0xBC16, 0xBC17, 0xBC18, 0xBC1B, 0xBC1C, 0xBC1D, 0xBC1E, 0xBC1F,
+ 0xBC24, 0xBC25, 0xBC27, 0xBC29, 0xBC2D, 0xBC30, 0xBC31, 0xBC34, 0xBC38,
+ 0xBC40, 0xBC41, 0xBC43, 0xBC44, 0xBC45, 0xBC49, 0xBC4C, 0xBC4D, 0xBC50,
+ 0xBC5D, 0xBC84, 0xBC85, 0xBC88, 0xBC8B, 0xBC8C, 0xBC8E, 0xBC94, 0xBC95,
+ 0xBC97, 0xBC99, 0xBC9A, 0xBCA0, 0xBCA1, 0xBCA4, 0xBCA7, 0xBCA8, 0xBCB0,
+ 0xBCB1, 0xBCB3, 0xBCB4, 0xBCB5, 0xBCBC, 0xBCBD, 0xBCC0, 0xBCC4, 0xBCCD,
+ 0xBCCF, 0xBCD0, 0xBCD1, 0xBCD5, 0xBCD8, 0xBCDC, 0xBCF4, 0xBCF5, 0xBCF6,
+ 0xBCF8, 0xBCFC, 0xBD04, 0xBD05, 0xBD07, 0xBD09, 0xBD10, 0xBD14, 0xBD24,
+ 0xBD2C, 0xBD40, 0xBD48, 0xBD49, 0xBD4C, 0xBD50, 0xBD58, 0xBD59, 0xBD64,
+ 0xBD68, 0xBD80, 0xBD81, 0xBD84, 0xBD87, 0xBD88, 0xBD89, 0xBD8A, 0xBD90,
+ 0xBD91, 0xBD93, 0xBD95, 0xBD99, 0xBD9A, 0xBD9C, 0xBDA4, 0xBDB0, 0xBDB8,
+ 0xBDD4, 0xBDD5, 0xBDD8, 0xBDDC, 0xBDE9, 0xBDF0, 0xBDF4, 0xBDF8, 0xBE00,
+ 0xBE03, 0xBE05, 0xBE0C, 0xBE0D, 0xBE10, 0xBE14, 0xBE1C, 0xBE1D, 0xBE1F,
+ 0xBE44, 0xBE45, 0xBE48, 0xBE4C, 0xBE4E, 0xBE54, 0xBE55, 0xBE57, 0xBE59,
+ 0xBE5A, 0xBE5B, 0xBE60, 0xBE61, 0xBE64, 0xBE68, 0xBE6A, 0xBE70, 0xBE71,
+ 0xBE73, 0xBE74, 0xBE75, 0xBE7B, 0xBE7C, 0xBE7D, 0xBE80, 0xBE84, 0xBE8C,
+ 0xBE8D, 0xBE8F, 0xBE90, 0xBE91, 0xBE98, 0xBE99, 0xBEA8, 0xBED0, 0xBED1,
+ 0xBED4, 0xBED7, 0xBED8, 0xBEE0, 0xBEE3, 0xBEE4, 0xBEE5, 0xBEEC, 0xBF01,
+ 0xBF08, 0xBF09, 0xBF18, 0xBF19, 0xBF1B, 0xBF1C, 0xBF1D, 0xBF40, 0xBF41,
+ 0xBF44, 0xBF48, 0xBF50, 0xBF51, 0xBF55, 0xBF94, 0xBFB0, 0xBFC5, 0xBFCC,
+ 0xBFCD, 0xBFD0, 0xBFD4, 0xBFDC, 0xBFDF, 0xBFE1, 0xC03C, 0xC051, 0xC058,
+ 0xC05C, 0xC060, 0xC068, 0xC069, 0xC090, 0xC091, 0xC094, 0xC098, 0xC0A0,
+ 0xC0A1, 0xC0A3, 0xC0A5, 0xC0AC, 0xC0AD, 0xC0AF, 0xC0B0, 0xC0B3, 0xC0B4,
+ 0xC0B5, 0xC0B6, 0xC0BC, 0xC0BD, 0xC0BF, 0xC0C0, 0xC0C1, 0xC0C5, 0xC0C8,
+ 0xC0C9, 0xC0CC, 0xC0D0, 0xC0D8, 0xC0D9, 0xC0DB, 0xC0DC, 0xC0DD, 0xC0E4,
+ 0xC0E5, 0xC0E8, 0xC0EC, 0xC0F4, 0xC0F5, 0xC0F7, 0xC0F9, 0xC100, 0xC104,
+ 0xC108, 0xC110, 0xC115, 0xC11C, 0xC11D, 0xC11E, 0xC11F, 0xC120, 0xC123,
+ 0xC124, 0xC126, 0xC127, 0xC12C, 0xC12D, 0xC12F, 0xC130, 0xC131, 0xC136,
+ 0xC138, 0xC139, 0xC13C, 0xC140, 0xC148, 0xC149, 0xC14B, 0xC14C, 0xC14D,
+ 0xC154, 0xC155, 0xC158, 0xC15C, 0xC164, 0xC165, 0xC167, 0xC168, 0xC169,
+ 0xC170, 0xC174, 0xC178, 0xC185, 0xC18C, 0xC18D, 0xC18E, 0xC190, 0xC194,
+ 0xC196, 0xC19C, 0xC19D, 0xC19F, 0xC1A1, 0xC1A5, 0xC1A8, 0xC1A9, 0xC1AC,
+ 0xC1B0, 0xC1BD, 0xC1C4, 0xC1C8, 0xC1CC, 0xC1D4, 0xC1D7, 0xC1D8, 0xC1E0,
+ 0xC1E4, 0xC1E8, 0xC1F0, 0xC1F1, 0xC1F3, 0xC1FC, 0xC1FD, 0xC200, 0xC204,
+ 0xC20C, 0xC20D, 0xC20F, 0xC211, 0xC218, 0xC219, 0xC21C, 0xC21F, 0xC220,
+ 0xC228, 0xC229, 0xC22B, 0xC22D, 0xC22F, 0xC231, 0xC232, 0xC234, 0xC248,
+ 0xC250, 0xC251, 0xC254, 0xC258, 0xC260, 0xC265, 0xC26C, 0xC26D, 0xC270,
+ 0xC274, 0xC27C, 0xC27D, 0xC27F, 0xC281, 0xC288, 0xC289, 0xC290, 0xC298,
+ 0xC29B, 0xC29D, 0xC2A4, 0xC2A5, 0xC2A8, 0xC2AC, 0xC2AD, 0xC2B4, 0xC2B5,
+ 0xC2B7, 0xC2B9, 0xC2DC, 0xC2DD, 0xC2E0, 0xC2E3, 0xC2E4, 0xC2EB, 0xC2EC,
+ 0xC2ED, 0xC2EF, 0xC2F1, 0xC2F6, 0xC2F8, 0xC2F9, 0xC2FB, 0xC2FC, 0xC300,
+ 0xC308, 0xC309, 0xC30C, 0xC30D, 0xC313, 0xC314, 0xC315, 0xC318, 0xC31C,
+ 0xC324, 0xC325, 0xC328, 0xC329, 0xC345, 0xC368, 0xC369, 0xC36C, 0xC370,
+ 0xC372, 0xC378, 0xC379, 0xC37C, 0xC37D, 0xC384, 0xC388, 0xC38C, 0xC3C0,
+ 0xC3D8, 0xC3D9, 0xC3DC, 0xC3DF, 0xC3E0, 0xC3E2, 0xC3E8, 0xC3E9, 0xC3ED,
+ 0xC3F4, 0xC3F5, 0xC3F8, 0xC408, 0xC410, 0xC424, 0xC42C, 0xC430, 0xC434,
+ 0xC43C, 0xC43D, 0xC448, 0xC464, 0xC465, 0xC468, 0xC46C, 0xC474, 0xC475,
+ 0xC479, 0xC480, 0xC494, 0xC49C, 0xC4B8, 0xC4BC, 0xC4E9, 0xC4F0, 0xC4F1,
+ 0xC4F4, 0xC4F8, 0xC4FA, 0xC4FF, 0xC500, 0xC501, 0xC50C, 0xC510, 0xC514,
+ 0xC51C, 0xC528, 0xC529, 0xC52C, 0xC530, 0xC538, 0xC539, 0xC53B, 0xC53D,
+ 0xC544, 0xC545, 0xC548, 0xC549, 0xC54A, 0xC54C, 0xC54D, 0xC54E, 0xC553,
+ 0xC554, 0xC555, 0xC557, 0xC558, 0xC559, 0xC55D, 0xC55E, 0xC560, 0xC561,
+ 0xC564, 0xC568, 0xC570, 0xC571, 0xC573, 0xC574, 0xC575, 0xC57C, 0xC57D,
+ 0xC580, 0xC584, 0xC587, 0xC58C, 0xC58D, 0xC58F, 0xC591, 0xC595, 0xC597,
+ 0xC598, 0xC59C, 0xC5A0, 0xC5A9, 0xC5B4, 0xC5B5, 0xC5B8, 0xC5B9, 0xC5BB,
+ 0xC5BC, 0xC5BD, 0xC5BE, 0xC5C4, 0xC5C5, 0xC5C6, 0xC5C7, 0xC5C8, 0xC5C9,
+ 0xC5CA, 0xC5CC, 0xC5CE, 0xC5D0, 0xC5D1, 0xC5D4, 0xC5D8, 0xC5E0, 0xC5E1,
+ 0xC5E3, 0xC5E5, 0xC5EC, 0xC5ED, 0xC5EE, 0xC5F0, 0xC5F4, 0xC5F6, 0xC5F7,
+ 0xC5FC, 0xC5FD, 0xC5FE, 0xC5FF, 0xC600, 0xC601, 0xC605, 0xC606, 0xC607,
+ 0xC608, 0xC60C, 0xC610, 0xC618, 0xC619, 0xC61B, 0xC61C, 0xC624, 0xC625,
+ 0xC628, 0xC62C, 0xC62D, 0xC62E, 0xC630, 0xC633, 0xC634, 0xC635, 0xC637,
+ 0xC639, 0xC63B, 0xC640, 0xC641, 0xC644, 0xC648, 0xC650, 0xC651, 0xC653,
+ 0xC654, 0xC655, 0xC65C, 0xC65D, 0xC660, 0xC66C, 0xC66F, 0xC671, 0xC678,
+ 0xC679, 0xC67C, 0xC680, 0xC688, 0xC689, 0xC68B, 0xC68D, 0xC694, 0xC695,
+ 0xC698, 0xC69C, 0xC6A4, 0xC6A5, 0xC6A7, 0xC6A9, 0xC6B0, 0xC6B1, 0xC6B4,
+ 0xC6B8, 0xC6B9, 0xC6BA, 0xC6C0, 0xC6C1, 0xC6C3, 0xC6C5, 0xC6CC, 0xC6CD,
+ 0xC6D0, 0xC6D4, 0xC6DC, 0xC6DD, 0xC6E0, 0xC6E1, 0xC6E8, 0xC6E9, 0xC6EC,
+ 0xC6F0, 0xC6F8, 0xC6F9, 0xC6FD, 0xC704, 0xC705, 0xC708, 0xC70C, 0xC714,
+ 0xC715, 0xC717, 0xC719, 0xC720, 0xC721, 0xC724, 0xC728, 0xC730, 0xC731,
+ 0xC733, 0xC735, 0xC737, 0xC73C, 0xC73D, 0xC740, 0xC744, 0xC74A, 0xC74C,
+ 0xC74D, 0xC74F, 0xC751, 0xC752, 0xC753, 0xC754, 0xC755, 0xC756, 0xC757,
+ 0xC758, 0xC75C, 0xC760, 0xC768, 0xC76B, 0xC774, 0xC775, 0xC778, 0xC77C,
+ 0xC77D, 0xC77E, 0xC783, 0xC784, 0xC785, 0xC787, 0xC788, 0xC789, 0xC78A,
+ 0xC78E, 0xC790, 0xC791, 0xC794, 0xC796, 0xC797, 0xC798, 0xC79A, 0xC7A0,
+ 0xC7A1, 0xC7A3, 0xC7A4, 0xC7A5, 0xC7A6, 0xC7AC, 0xC7AD, 0xC7B0, 0xC7B4,
+ 0xC7BC, 0xC7BD, 0xC7BF, 0xC7C0, 0xC7C1, 0xC7C8, 0xC7C9, 0xC7CC, 0xC7CE,
+ 0xC7D0, 0xC7D8, 0xC7DD, 0xC7E4, 0xC7E8, 0xC7EC, 0xC800, 0xC801, 0xC804,
+ 0xC808, 0xC80A, 0xC810, 0xC811, 0xC813, 0xC815, 0xC816, 0xC81C, 0xC81D,
+ 0xC820, 0xC824, 0xC82C, 0xC82D, 0xC82F, 0xC831, 0xC838, 0xC83C, 0xC840,
+ 0xC848, 0xC849, 0xC84C, 0xC84D, 0xC854, 0xC870, 0xC871, 0xC874, 0xC878,
+ 0xC87A, 0xC880, 0xC881, 0xC883, 0xC885, 0xC886, 0xC887, 0xC88B, 0xC88C,
+ 0xC88D, 0xC894, 0xC89D, 0xC89F, 0xC8A1, 0xC8A8, 0xC8BC, 0xC8BD, 0xC8C4,
+ 0xC8C8, 0xC8CC, 0xC8D4, 0xC8D5, 0xC8D7, 0xC8D9, 0xC8E0, 0xC8E1, 0xC8E4,
+ 0xC8F5, 0xC8FC, 0xC8FD, 0xC900, 0xC904, 0xC905, 0xC906, 0xC90C, 0xC90D,
+ 0xC90F, 0xC911, 0xC918, 0xC92C, 0xC934, 0xC950, 0xC951, 0xC954, 0xC958,
+ 0xC960, 0xC961, 0xC963, 0xC96C, 0xC970, 0xC974, 0xC97C, 0xC988, 0xC989,
+ 0xC98C, 0xC990, 0xC998, 0xC999, 0xC99B, 0xC99D, 0xC9C0, 0xC9C1, 0xC9C4,
+ 0xC9C7, 0xC9C8, 0xC9CA, 0xC9D0, 0xC9D1, 0xC9D3, 0xC9D5, 0xC9D6, 0xC9D9,
+ 0xC9DA, 0xC9DC, 0xC9DD, 0xC9E0, 0xC9E2, 0xC9E4, 0xC9E7, 0xC9EC, 0xC9ED,
+ 0xC9EF, 0xC9F0, 0xC9F1, 0xC9F8, 0xC9F9, 0xC9FC, 0xCA00, 0xCA08, 0xCA09,
+ 0xCA0B, 0xCA0C, 0xCA0D, 0xCA14, 0xCA18, 0xCA29, 0xCA4C, 0xCA4D, 0xCA50,
+ 0xCA54, 0xCA5C, 0xCA5D, 0xCA5F, 0xCA60, 0xCA61, 0xCA68, 0xCA7D, 0xCA84,
+ 0xCA98, 0xCABC, 0xCABD, 0xCAC0, 0xCAC4, 0xCACC, 0xCACD, 0xCACF, 0xCAD1,
+ 0xCAD3, 0xCAD8, 0xCAD9, 0xCAE0, 0xCAEC, 0xCAF4, 0xCB08, 0xCB10, 0xCB14,
+ 0xCB18, 0xCB20, 0xCB21, 0xCB41, 0xCB48, 0xCB49, 0xCB4C, 0xCB50, 0xCB58,
+ 0xCB59, 0xCB5D, 0xCB64, 0xCB78, 0xCB79, 0xCB9C, 0xCBB8, 0xCBD4, 0xCBE4,
+ 0xCBE7, 0xCBE9, 0xCC0C, 0xCC0D, 0xCC10, 0xCC14, 0xCC1C, 0xCC1D, 0xCC21,
+ 0xCC22, 0xCC27, 0xCC28, 0xCC29, 0xCC2C, 0xCC2E, 0xCC30, 0xCC38, 0xCC39,
+ 0xCC3B, 0xCC3C, 0xCC3D, 0xCC3E, 0xCC44, 0xCC45, 0xCC48, 0xCC4C, 0xCC54,
+ 0xCC55, 0xCC57, 0xCC58, 0xCC59, 0xCC60, 0xCC64, 0xCC66, 0xCC68, 0xCC70,
+ 0xCC75, 0xCC98, 0xCC99, 0xCC9C, 0xCCA0, 0xCCA8, 0xCCA9, 0xCCAB, 0xCCAC,
+ 0xCCAD, 0xCCB4, 0xCCB5, 0xCCB8, 0xCCBC, 0xCCC4, 0xCCC5, 0xCCC7, 0xCCC9,
+ 0xCCD0, 0xCCD4, 0xCCE4, 0xCCEC, 0xCCF0, 0xCD01, 0xCD08, 0xCD09, 0xCD0C,
+ 0xCD10, 0xCD18, 0xCD19, 0xCD1B, 0xCD1D, 0xCD24, 0xCD28, 0xCD2C, 0xCD39,
+ 0xCD5C, 0xCD60, 0xCD64, 0xCD6C, 0xCD6D, 0xCD6F, 0xCD71, 0xCD78, 0xCD88,
+ 0xCD94, 0xCD95, 0xCD98, 0xCD9C, 0xCDA4, 0xCDA5, 0xCDA7, 0xCDA9, 0xCDB0,
+ 0xCDC4, 0xCDCC, 0xCDD0, 0xCDE8, 0xCDEC, 0xCDF0, 0xCDF8, 0xCDF9, 0xCDFB,
+ 0xCDFD, 0xCE04, 0xCE08, 0xCE0C, 0xCE14, 0xCE19, 0xCE20, 0xCE21, 0xCE24,
+ 0xCE28, 0xCE30, 0xCE31, 0xCE33, 0xCE35, 0xCE58, 0xCE59, 0xCE5C, 0xCE5F,
+ 0xCE60, 0xCE61, 0xCE68, 0xCE69, 0xCE6B, 0xCE6D, 0xCE74, 0xCE75, 0xCE78,
+ 0xCE7C, 0xCE84, 0xCE85, 0xCE87, 0xCE89, 0xCE90, 0xCE91, 0xCE94, 0xCE98,
+ 0xCEA0, 0xCEA1, 0xCEA3, 0xCEA4, 0xCEA5, 0xCEAC, 0xCEAD, 0xCEC1, 0xCEE4,
+ 0xCEE5, 0xCEE8, 0xCEEB, 0xCEEC, 0xCEF4, 0xCEF5, 0xCEF7, 0xCEF8, 0xCEF9,
+ 0xCF00, 0xCF01, 0xCF04, 0xCF08, 0xCF10, 0xCF11, 0xCF13, 0xCF15, 0xCF1C,
+ 0xCF20, 0xCF24, 0xCF2C, 0xCF2D, 0xCF2F, 0xCF30, 0xCF31, 0xCF38, 0xCF54,
+ 0xCF55, 0xCF58, 0xCF5C, 0xCF64, 0xCF65, 0xCF67, 0xCF69, 0xCF70, 0xCF71,
+ 0xCF74, 0xCF78, 0xCF80, 0xCF85, 0xCF8C, 0xCFA1, 0xCFA8, 0xCFB0, 0xCFC4,
+ 0xCFE0, 0xCFE1, 0xCFE4, 0xCFE8, 0xCFF0, 0xCFF1, 0xCFF3, 0xCFF5, 0xCFFC,
+ 0xD000, 0xD004, 0xD011, 0xD018, 0xD02D, 0xD034, 0xD035, 0xD038, 0xD03C,
+ 0xD044, 0xD045, 0xD047, 0xD049, 0xD050, 0xD054, 0xD058, 0xD060, 0xD06C,
+ 0xD06D, 0xD070, 0xD074, 0xD07C, 0xD07D, 0xD081, 0xD0A4, 0xD0A5, 0xD0A8,
+ 0xD0AC, 0xD0B4, 0xD0B5, 0xD0B7, 0xD0B9, 0xD0C0, 0xD0C1, 0xD0C4, 0xD0C8,
+ 0xD0C9, 0xD0D0, 0xD0D1, 0xD0D3, 0xD0D4, 0xD0D5, 0xD0DC, 0xD0DD, 0xD0E0,
+ 0xD0E4, 0xD0EC, 0xD0ED, 0xD0EF, 0xD0F0, 0xD0F1, 0xD0F8, 0xD10D, 0xD130,
+ 0xD131, 0xD134, 0xD138, 0xD13A, 0xD140, 0xD141, 0xD143, 0xD144, 0xD145,
+ 0xD14C, 0xD14D, 0xD150, 0xD154, 0xD15C, 0xD15D, 0xD15F, 0xD161, 0xD168,
+ 0xD16C, 0xD17C, 0xD184, 0xD188, 0xD1A0, 0xD1A1, 0xD1A4, 0xD1A8, 0xD1B0,
+ 0xD1B1, 0xD1B3, 0xD1B5, 0xD1BA, 0xD1BC, 0xD1C0, 0xD1D8, 0xD1F4, 0xD1F8,
+ 0xD207, 0xD209, 0xD210, 0xD22C, 0xD22D, 0xD230, 0xD234, 0xD23C, 0xD23D,
+ 0xD23F, 0xD241, 0xD248, 0xD25C, 0xD264, 0xD280, 0xD281, 0xD284, 0xD288,
+ 0xD290, 0xD291, 0xD295, 0xD29C, 0xD2A0, 0xD2A4, 0xD2AC, 0xD2B1, 0xD2B8,
+ 0xD2B9, 0xD2BC, 0xD2BF, 0xD2C0, 0xD2C2, 0xD2C8, 0xD2C9, 0xD2CB, 0xD2D4,
+ 0xD2D8, 0xD2DC, 0xD2E4, 0xD2E5, 0xD2F0, 0xD2F1, 0xD2F4, 0xD2F8, 0xD300,
+ 0xD301, 0xD303, 0xD305, 0xD30C, 0xD30D, 0xD30E, 0xD310, 0xD314, 0xD316,
+ 0xD31C, 0xD31D, 0xD31F, 0xD320, 0xD321, 0xD325, 0xD328, 0xD329, 0xD32C,
+ 0xD330, 0xD338, 0xD339, 0xD33B, 0xD33C, 0xD33D, 0xD344, 0xD345, 0xD37C,
+ 0xD37D, 0xD380, 0xD384, 0xD38C, 0xD38D, 0xD38F, 0xD390, 0xD391, 0xD398,
+ 0xD399, 0xD39C, 0xD3A0, 0xD3A8, 0xD3A9, 0xD3AB, 0xD3AD, 0xD3B4, 0xD3B8,
+ 0xD3BC, 0xD3C4, 0xD3C5, 0xD3C8, 0xD3C9, 0xD3D0, 0xD3D8, 0xD3E1, 0xD3E3,
+ 0xD3EC, 0xD3ED, 0xD3F0, 0xD3F4, 0xD3FC, 0xD3FD, 0xD3FF, 0xD401, 0xD408,
+ 0xD41D, 0xD440, 0xD444, 0xD45C, 0xD460, 0xD464, 0xD46D, 0xD46F, 0xD478,
+ 0xD479, 0xD47C, 0xD47F, 0xD480, 0xD482, 0xD488, 0xD489, 0xD48B, 0xD48D,
+ 0xD494, 0xD4A9, 0xD4CC, 0xD4D0, 0xD4D4, 0xD4DC, 0xD4DF, 0xD4E8, 0xD4EC,
+ 0xD4F0, 0xD4F8, 0xD4FB, 0xD4FD, 0xD504, 0xD508, 0xD50C, 0xD514, 0xD515,
+ 0xD517, 0xD53C, 0xD53D, 0xD540, 0xD544, 0xD54C, 0xD54D, 0xD54F, 0xD551,
+ 0xD558, 0xD559, 0xD55C, 0xD560, 0xD565, 0xD568, 0xD569, 0xD56B, 0xD56D,
+ 0xD574, 0xD575, 0xD578, 0xD57C, 0xD584, 0xD585, 0xD587, 0xD588, 0xD589,
+ 0xD590, 0xD5A5, 0xD5C8, 0xD5C9, 0xD5CC, 0xD5D0, 0xD5D2, 0xD5D8, 0xD5D9,
+ 0xD5DB, 0xD5DD, 0xD5E4, 0xD5E5, 0xD5E8, 0xD5EC, 0xD5F4, 0xD5F5, 0xD5F7,
+ 0xD5F9, 0xD600, 0xD601, 0xD604, 0xD608, 0xD610, 0xD611, 0xD613, 0xD614,
+ 0xD615, 0xD61C, 0xD620, 0xD624, 0xD62D, 0xD638, 0xD639, 0xD63C, 0xD640,
+ 0xD645, 0xD648, 0xD649, 0xD64B, 0xD64D, 0xD651, 0xD654, 0xD655, 0xD658,
+ 0xD65C, 0xD667, 0xD669, 0xD670, 0xD671, 0xD674, 0xD683, 0xD685, 0xD68C,
+ 0xD68D, 0xD690, 0xD694, 0xD69D, 0xD69F, 0xD6A1, 0xD6A8, 0xD6AC, 0xD6B0,
+ 0xD6B9, 0xD6BB, 0xD6C4, 0xD6C5, 0xD6C8, 0xD6CC, 0xD6D1, 0xD6D4, 0xD6D7,
+ 0xD6D9, 0xD6E0, 0xD6E4, 0xD6E8, 0xD6F0, 0xD6F5, 0xD6FC, 0xD6FD, 0xD700,
+ 0xD704, 0xD711, 0xD718, 0xD719, 0xD71C, 0xD720, 0xD728, 0xD729, 0xD72B,
+ 0xD72D, 0xD734, 0xD735, 0xD738, 0xD73C, 0xD744, 0xD747, 0xD749, 0xD750,
+ 0xD751, 0xD754, 0xD756, 0xD757, 0xD758, 0xD759, 0xD760, 0xD761, 0xD763,
+ 0xD765, 0xD769, 0xD76C, 0xD770, 0xD774, 0xD77C, 0xD77D, 0xD781, 0xD788,
+ 0xD789, 0xD78C, 0xD790, 0xD798, 0xD799, 0xD79B, 0xD79D, 0x4F3D, 0x4F73,
+ 0x5047, 0x50F9, 0x52A0, 0x53EF, 0x5475, 0x54E5, 0x5609, 0x5AC1, 0x5BB6,
+ 0x6687, 0x67B6, 0x67B7, 0x67EF, 0x6B4C, 0x73C2, 0x75C2, 0x7A3C, 0x82DB,
+ 0x8304, 0x8857, 0x8888, 0x8A36, 0x8CC8, 0x8DCF, 0x8EFB, 0x8FE6, 0x99D5,
+ 0x523B, 0x5374, 0x5404, 0x606A, 0x6164, 0x6BBC, 0x73CF, 0x811A, 0x89BA,
+ 0x89D2, 0x95A3, 0x4F83, 0x520A, 0x58BE, 0x5978, 0x59E6, 0x5E72, 0x5E79,
+ 0x61C7, 0x63C0, 0x6746, 0x67EC, 0x687F, 0x6F97, 0x764E, 0x770B, 0x78F5,
+ 0x7A08, 0x7AFF, 0x7C21, 0x809D, 0x826E, 0x8271, 0x8AEB, 0x9593, 0x4E6B,
+ 0x559D, 0x66F7, 0x6E34, 0x78A3, 0x7AED, 0x845B, 0x8910, 0x874E, 0x97A8,
+ 0x52D8, 0x574E, 0x582A, 0x5D4C, 0x611F, 0x61BE, 0x6221, 0x6562, 0x67D1,
+ 0x6A44, 0x6E1B, 0x7518, 0x75B3, 0x76E3, 0x77B0, 0x7D3A, 0x90AF, 0x9451,
+ 0x9452, 0x9F95, 0x5323, 0x5CAC, 0x7532, 0x80DB, 0x9240, 0x9598, 0x525B,
+ 0x5808, 0x59DC, 0x5CA1, 0x5D17, 0x5EB7, 0x5F3A, 0x5F4A, 0x6177, 0x6C5F,
+ 0x757A, 0x7586, 0x7CE0, 0x7D73, 0x7DB1, 0x7F8C, 0x8154, 0x8221, 0x8591,
+ 0x8941, 0x8B1B, 0x92FC, 0x964D, 0x9C47, 0x4ECB, 0x4EF7, 0x500B, 0x51F1,
+ 0x584F, 0x6137, 0x613E, 0x6168, 0x6539, 0x69EA, 0x6F11, 0x75A5, 0x7686,
+ 0x76D6, 0x7B87, 0x82A5, 0x84CB, 0x93A7, 0x958B, 0x5580, 0x5BA2, 0x5751,
+ 0x7CB3, 0x7FB9, 0x91B5, 0x5028, 0x53BB, 0x5C45, 0x5DE8, 0x62D2, 0x636E,
+ 0x64DA, 0x64E7, 0x6E20, 0x70AC, 0x795B, 0x8DDD, 0x8E1E, 0x907D, 0x9245,
+ 0x92F8, 0x4E7E, 0x4EF6, 0x5065, 0x5DFE, 0x5EFA, 0x6106, 0x6957, 0x8171,
+ 0x8654, 0x8E47, 0x9375, 0x9A2B, 0x4E5E, 0x5091, 0x6770, 0x6840, 0x5109,
+ 0x528D, 0x5292, 0x6AA2, 0x77BC, 0x9210, 0x9ED4, 0x52AB, 0x602F, 0x8FF2,
+ 0x5048, 0x61A9, 0x63ED, 0x64CA, 0x683C, 0x6A84, 0x6FC0, 0x8188, 0x89A1,
+ 0x9694, 0x5805, 0x727D, 0x72AC, 0x7504, 0x7D79, 0x7E6D, 0x80A9, 0x898B,
+ 0x8B74, 0x9063, 0x9D51, 0x6289, 0x6C7A, 0x6F54, 0x7D50, 0x7F3A, 0x8A23,
+ 0x517C, 0x614A, 0x7B9D, 0x8B19, 0x9257, 0x938C, 0x4EAC, 0x4FD3, 0x501E,
+ 0x50BE, 0x5106, 0x52C1, 0x52CD, 0x537F, 0x5770, 0x5883, 0x5E9A, 0x5F91,
+ 0x6176, 0x61AC, 0x64CE, 0x656C, 0x666F, 0x66BB, 0x66F4, 0x6897, 0x6D87,
+ 0x7085, 0x70F1, 0x749F, 0x74A5, 0x74CA, 0x75D9, 0x786C, 0x78EC, 0x7ADF,
+ 0x7AF6, 0x7D45, 0x7D93, 0x8015, 0x803F, 0x811B, 0x8396, 0x8B66, 0x8F15,
+ 0x9015, 0x93E1, 0x9803, 0x9838, 0x9A5A, 0x9BE8, 0x4FC2, 0x5553, 0x583A,
+ 0x5951, 0x5B63, 0x5C46, 0x60B8, 0x6212, 0x6842, 0x68B0, 0x68E8, 0x6EAA,
+ 0x754C, 0x7678, 0x78CE, 0x7A3D, 0x7CFB, 0x7E6B, 0x7E7C, 0x8A08, 0x8AA1,
+ 0x8C3F, 0x968E, 0x9DC4, 0x53E4, 0x53E9, 0x544A, 0x5471, 0x56FA, 0x59D1,
+ 0x5B64, 0x5C3B, 0x5EAB, 0x62F7, 0x6537, 0x6545, 0x6572, 0x66A0, 0x67AF,
+ 0x69C1, 0x6CBD, 0x75FC, 0x7690, 0x777E, 0x7A3F, 0x7F94, 0x8003, 0x80A1,
+ 0x818F, 0x82E6, 0x82FD, 0x83F0, 0x85C1, 0x8831, 0x88B4, 0x8AA5, 0x8F9C,
+ 0x932E, 0x96C7, 0x9867, 0x9AD8, 0x9F13, 0x54ED, 0x659B, 0x66F2, 0x688F,
+ 0x7A40, 0x8C37, 0x9D60, 0x56F0, 0x5764, 0x5D11, 0x6606, 0x68B1, 0x68CD,
+ 0x6EFE, 0x7428, 0x889E, 0x9BE4, 0x6C68, 0x9AA8, 0x4F9B, 0x516C, 0x5171,
+ 0x529F, 0x5B54, 0x5DE5, 0x6050, 0x606D, 0x62F1, 0x63A7, 0x653B, 0x73D9,
+ 0x7A7A, 0x86A3, 0x8CA2, 0x978F, 0x4E32, 0x5BE1, 0x6208, 0x679C, 0x74DC,
+ 0x79D1, 0x83D3, 0x8A87, 0x8AB2, 0x8DE8, 0x904E, 0x934B, 0x9846, 0x5ED3,
+ 0x69E8, 0x85FF, 0x90ED, 0x51A0, 0x5B98, 0x5BEC, 0x6163, 0x68FA, 0x6B3E,
+ 0x704C, 0x742F, 0x74D8, 0x7BA1, 0x7F50, 0x83C5, 0x89C0, 0x8CAB, 0x95DC,
+ 0x9928, 0x522E, 0x605D, 0x62EC, 0x9002, 0x4F8A, 0x5149, 0x5321, 0x58D9,
+ 0x5EE3, 0x66E0, 0x6D38, 0x709A, 0x72C2, 0x73D6, 0x7B50, 0x80F1, 0x945B,
+ 0x5366, 0x639B, 0x7F6B, 0x4E56, 0x5080, 0x584A, 0x58DE, 0x602A, 0x6127,
+ 0x62D0, 0x69D0, 0x9B41, 0x5B8F, 0x7D18, 0x80B1, 0x8F5F, 0x4EA4, 0x50D1,
+ 0x54AC, 0x55AC, 0x5B0C, 0x5DA0, 0x5DE7, 0x652A, 0x654E, 0x6821, 0x6A4B,
+ 0x72E1, 0x768E, 0x77EF, 0x7D5E, 0x7FF9, 0x81A0, 0x854E, 0x86DF, 0x8F03,
+ 0x8F4E, 0x90CA, 0x9903, 0x9A55, 0x9BAB, 0x4E18, 0x4E45, 0x4E5D, 0x4EC7,
+ 0x4FF1, 0x5177, 0x52FE, 0x5340, 0x53E3, 0x53E5, 0x548E, 0x5614, 0x5775,
+ 0x57A2, 0x5BC7, 0x5D87, 0x5ED0, 0x61FC, 0x62D8, 0x6551, 0x67B8, 0x67E9,
+ 0x69CB, 0x6B50, 0x6BC6, 0x6BEC, 0x6C42, 0x6E9D, 0x7078, 0x72D7, 0x7396,
+ 0x7403, 0x77BF, 0x77E9, 0x7A76, 0x7D7F, 0x8009, 0x81FC, 0x8205, 0x820A,
+ 0x82DF, 0x8862, 0x8B33, 0x8CFC, 0x8EC0, 0x9011, 0x90B1, 0x9264, 0x92B6,
+ 0x99D2, 0x9A45, 0x9CE9, 0x9DD7, 0x9F9C, 0x570B, 0x5C40, 0x83CA, 0x97A0,
+ 0x97AB, 0x9EB4, 0x541B, 0x7A98, 0x7FA4, 0x88D9, 0x8ECD, 0x90E1, 0x5800,
+ 0x5C48, 0x6398, 0x7A9F, 0x5BAE, 0x5F13, 0x7A79, 0x7AAE, 0x828E, 0x8EAC,
+ 0x5026, 0x5238, 0x52F8, 0x5377, 0x5708, 0x62F3, 0x6372, 0x6B0A, 0x6DC3,
+ 0x7737, 0x53A5, 0x7357, 0x8568, 0x8E76, 0x95D5, 0x673A, 0x6AC3, 0x6F70,
+ 0x8A6D, 0x8ECC, 0x994B, 0x6677, 0x6B78, 0x8CB4, 0x9B3C, 0x53EB, 0x572D,
+ 0x594E, 0x63C6, 0x69FB, 0x73EA, 0x7845, 0x7ABA, 0x7AC5, 0x7CFE, 0x8475,
+ 0x898F, 0x8D73, 0x9035, 0x95A8, 0x52FB, 0x5747, 0x7547, 0x7B60, 0x83CC,
+ 0x921E, 0x6A58, 0x514B, 0x524B, 0x5287, 0x621F, 0x68D8, 0x6975, 0x9699,
+ 0x50C5, 0x52A4, 0x52E4, 0x61C3, 0x65A4, 0x6839, 0x69FF, 0x747E, 0x7B4B,
+ 0x82B9, 0x83EB, 0x89B2, 0x8B39, 0x8FD1, 0x9949, 0x4ECA, 0x5997, 0x64D2,
+ 0x6611, 0x6A8E, 0x7434, 0x7981, 0x79BD, 0x82A9, 0x887E, 0x887F, 0x895F,
+ 0x9326, 0x4F0B, 0x53CA, 0x6025, 0x6271, 0x6C72, 0x7D1A, 0x7D66, 0x4E98,
+ 0x5162, 0x77DC, 0x80AF, 0x4F01, 0x4F0E, 0x5176, 0x5180, 0x55DC, 0x5668,
+ 0x573B, 0x57FA, 0x57FC, 0x5914, 0x5947, 0x5993, 0x5BC4, 0x5C90, 0x5D0E,
+ 0x5DF1, 0x5E7E, 0x5FCC, 0x6280, 0x65D7, 0x65E3, 0x671E, 0x671F, 0x675E,
+ 0x68CB, 0x68C4, 0x6A5F, 0x6B3A, 0x6C23, 0x6C7D, 0x6C82, 0x6DC7, 0x7398,
+ 0x7426, 0x742A, 0x7482, 0x74A3, 0x7578, 0x757F, 0x7881, 0x78EF, 0x7941,
+ 0x7947, 0x7948, 0x797A, 0x7B95, 0x7D00, 0x7DBA, 0x7F88, 0x8006, 0x802D,
+ 0x808C, 0x8A18, 0x8B4F, 0x8C48, 0x8D77, 0x9321, 0x9324, 0x98E2, 0x9951,
+ 0x9A0E, 0x9A0F, 0x9A65, 0x9E92, 0x7DCA, 0x4F76, 0x5409, 0x62EE, 0x6854,
+ 0x91D1, 0x55AB, 0x513A, 0x5A1C, 0x61E6, 0x62CF, 0x62FF, 0x90A3, 0x8AFE,
+ 0x6696, 0x7156, 0x96E3, 0x634F, 0x637A, 0x5357, 0x678F, 0x6960, 0x6E73,
+ 0x7537, 0x7D0D, 0x8872, 0x56CA, 0x5A18, 0x4E43, 0x5167, 0x5948, 0x67F0,
+ 0x8010, 0x5973, 0x5E74, 0x649A, 0x79CA, 0x5FF5, 0x606C, 0x62C8, 0x637B,
+ 0x5BE7, 0x5BD7, 0x52AA, 0x5974, 0x5F29, 0x6012, 0x7459, 0x99D1, 0x6FC3,
+ 0x81BF, 0x8FB2, 0x60F1, 0x8166, 0x5C3F, 0x5AE9, 0x8A25, 0x677B, 0x7D10,
+ 0x80FD, 0x5C3C, 0x6CE5, 0x533F, 0x6EBA, 0x591A, 0x8336, 0x4E39, 0x4EB6,
+ 0x4F46, 0x55AE, 0x5718, 0x58C7, 0x5F56, 0x65B7, 0x65E6, 0x6A80, 0x6BB5,
+ 0x6E4D, 0x77ED, 0x7AEF, 0x7C1E, 0x7DDE, 0x86CB, 0x8892, 0x9132, 0x935B,
+ 0x64BB, 0x6FBE, 0x737A, 0x75B8, 0x9054, 0x5556, 0x574D, 0x61BA, 0x64D4,
+ 0x66C7, 0x6DE1, 0x6E5B, 0x6F6D, 0x6FB9, 0x75F0, 0x8043, 0x81BD, 0x8541,
+ 0x8983, 0x8AC7, 0x8B5A, 0x931F, 0x6C93, 0x7553, 0x7B54, 0x8E0F, 0x905D,
+ 0x5510, 0x5802, 0x5858, 0x5E62, 0x6207, 0x649E, 0x68E0, 0x7576, 0x7CD6,
+ 0x87B3, 0x9EE8, 0x4EE3, 0x5788, 0x576E, 0x5927, 0x5C0D, 0x5CB1, 0x5E36,
+ 0x5F85, 0x6234, 0x64E1, 0x73B3, 0x81FA, 0x888B, 0x8CB8, 0x968A, 0x9EDB,
+ 0x5B85, 0x5FB7, 0x60B3, 0x5012, 0x5200, 0x5230, 0x5716, 0x5835, 0x5857,
+ 0x5C0E, 0x5C60, 0x5CF6, 0x5D8B, 0x5EA6, 0x5F92, 0x60BC, 0x6311, 0x6389,
+ 0x6417, 0x6843, 0x68F9, 0x6AC2, 0x6DD8, 0x6E21, 0x6ED4, 0x6FE4, 0x71FE,
+ 0x76DC, 0x7779, 0x79B1, 0x7A3B, 0x8404, 0x89A9, 0x8CED, 0x8DF3, 0x8E48,
+ 0x9003, 0x9014, 0x9053, 0x90FD, 0x934D, 0x9676, 0x97DC, 0x6BD2, 0x7006,
+ 0x7258, 0x72A2, 0x7368, 0x7763, 0x79BF, 0x7BE4, 0x7E9B, 0x8B80, 0x58A9,
+ 0x60C7, 0x6566, 0x65FD, 0x66BE, 0x6C8C, 0x711E, 0x71C9, 0x8C5A, 0x9813,
+ 0x4E6D, 0x7A81, 0x4EDD, 0x51AC, 0x51CD, 0x52D5, 0x540C, 0x61A7, 0x6771,
+ 0x6850, 0x68DF, 0x6D1E, 0x6F7C, 0x75BC, 0x77B3, 0x7AE5, 0x80F4, 0x8463,
+ 0x9285, 0x515C, 0x6597, 0x675C, 0x6793, 0x75D8, 0x7AC7, 0x8373, 0x8C46,
+ 0x9017, 0x982D, 0x5C6F, 0x81C0, 0x829A, 0x9041, 0x906F, 0x920D, 0x5F97,
+ 0x5D9D, 0x6A59, 0x71C8, 0x767B, 0x7B49, 0x85E4, 0x8B04, 0x9127, 0x9A30,
+ 0x5587, 0x61F6, 0x7669, 0x7F85, 0x863F, 0x87BA, 0x88F8, 0x908F, 0x6D1B,
+ 0x70D9, 0x73DE, 0x7D61, 0x843D, 0x916A, 0x99F1, 0x4E82, 0x5375, 0x6B04,
+ 0x6B12, 0x703E, 0x721B, 0x862D, 0x9E1E, 0x524C, 0x8FA3, 0x5D50, 0x64E5,
+ 0x652C, 0x6B16, 0x6FEB, 0x7C43, 0x7E9C, 0x85CD, 0x8964, 0x89BD, 0x62C9,
+ 0x81D8, 0x881F, 0x5ECA, 0x6717, 0x6D6A, 0x72FC, 0x7405, 0x746F, 0x8782,
+ 0x90DE, 0x4F86, 0x5D0D, 0x5FA0, 0x840A, 0x51B7, 0x63A0, 0x7565, 0x4EAE,
+ 0x5006, 0x5169, 0x51C9, 0x6881, 0x6A11, 0x7CAE, 0x7CB1, 0x7CE7, 0x826F,
+ 0x8AD2, 0x8F1B, 0x91CF, 0x4FB6, 0x5137, 0x52F5, 0x5442, 0x5EEC, 0x616E,
+ 0x623E, 0x65C5, 0x6ADA, 0x6FFE, 0x792A, 0x85DC, 0x8823, 0x95AD, 0x9A62,
+ 0x9A6A, 0x9E97, 0x9ECE, 0x529B, 0x66C6, 0x6B77, 0x701D, 0x792B, 0x8F62,
+ 0x9742, 0x6190, 0x6200, 0x6523, 0x6F23, 0x7149, 0x7489, 0x7DF4, 0x806F,
+ 0x84EE, 0x8F26, 0x9023, 0x934A, 0x51BD, 0x5217, 0x52A3, 0x6D0C, 0x70C8,
+ 0x88C2, 0x5EC9, 0x6582, 0x6BAE, 0x6FC2, 0x7C3E, 0x7375, 0x4EE4, 0x4F36,
+ 0x56F9, 0x5CBA, 0x5DBA, 0x601C, 0x73B2, 0x7B2D, 0x7F9A, 0x7FCE, 0x8046,
+ 0x901E, 0x9234, 0x96F6, 0x9748, 0x9818, 0x9F61, 0x4F8B, 0x6FA7, 0x79AE,
+ 0x91B4, 0x96B7, 0x52DE, 0x6488, 0x64C4, 0x6AD3, 0x6F5E, 0x7018, 0x7210,
+ 0x76E7, 0x8001, 0x8606, 0x865C, 0x8DEF, 0x8F05, 0x9732, 0x9B6F, 0x9DFA,
+ 0x9E75, 0x788C, 0x797F, 0x7DA0, 0x83C9, 0x9304, 0x9E7F, 0x9E93, 0x8AD6,
+ 0x58DF, 0x5F04, 0x6727, 0x7027, 0x74CF, 0x7C60, 0x807E, 0x5121, 0x7028,
+ 0x7262, 0x78CA, 0x8CC2, 0x8CDA, 0x8CF4, 0x96F7, 0x4E86, 0x50DA, 0x5BEE,
+ 0x5ED6, 0x6599, 0x71CE, 0x7642, 0x77AD, 0x804A, 0x84FC, 0x907C, 0x9B27,
+ 0x9F8D, 0x58D8, 0x5A41, 0x5C62, 0x6A13, 0x6DDA, 0x6F0F, 0x763B, 0x7D2F,
+ 0x7E37, 0x851E, 0x8938, 0x93E4, 0x964B, 0x5289, 0x65D2, 0x67F3, 0x69B4,
+ 0x6D41, 0x6E9C, 0x700F, 0x7409, 0x7460, 0x7559, 0x7624, 0x786B, 0x8B2C,
+ 0x985E, 0x516D, 0x622E, 0x9678, 0x4F96, 0x502B, 0x5D19, 0x6DEA, 0x7DB8,
+ 0x8F2A, 0x5F8B, 0x6144, 0x6817, 0x9686, 0x52D2, 0x808B, 0x51DC, 0x51CC,
+ 0x695E, 0x7A1C, 0x7DBE, 0x83F1, 0x9675, 0x4FDA, 0x5229, 0x5398, 0x540F,
+ 0x550E, 0x5C65, 0x60A7, 0x674E, 0x68A8, 0x6D6C, 0x7281, 0x72F8, 0x7406,
+ 0x7483, 0x75E2, 0x7C6C, 0x7F79, 0x7FB8, 0x8389, 0x88CF, 0x88E1, 0x91CC,
+ 0x91D0, 0x96E2, 0x9BC9, 0x541D, 0x6F7E, 0x71D0, 0x7498, 0x85FA, 0x8EAA,
+ 0x96A3, 0x9C57, 0x9E9F, 0x6797, 0x6DCB, 0x7433, 0x81E8, 0x9716, 0x782C,
+ 0x7ACB, 0x7B20, 0x7C92, 0x6469, 0x746A, 0x75F2, 0x78BC, 0x78E8, 0x99AC,
+ 0x9B54, 0x9EBB, 0x5BDE, 0x5E55, 0x6F20, 0x819C, 0x83AB, 0x9088, 0x4E07,
+ 0x534D, 0x5A29, 0x5DD2, 0x5F4E, 0x6162, 0x633D, 0x6669, 0x66FC, 0x6EFF,
+ 0x6F2B, 0x7063, 0x779E, 0x842C, 0x8513, 0x883B, 0x8F13, 0x9945, 0x9C3B,
+ 0x551C, 0x62B9, 0x672B, 0x6CAB, 0x8309, 0x896A, 0x977A, 0x4EA1, 0x5984,
+ 0x5FD8, 0x5FD9, 0x671B, 0x7DB2, 0x7F54, 0x8292, 0x832B, 0x83BD, 0x8F1E,
+ 0x9099, 0x57CB, 0x59B9, 0x5A92, 0x5BD0, 0x6627, 0x679A, 0x6885, 0x6BCF,
+ 0x7164, 0x7F75, 0x8CB7, 0x8CE3, 0x9081, 0x9B45, 0x8108, 0x8C8A, 0x964C,
+ 0x9A40, 0x9EA5, 0x5B5F, 0x6C13, 0x731B, 0x76F2, 0x76DF, 0x840C, 0x51AA,
+ 0x8993, 0x514D, 0x5195, 0x52C9, 0x68C9, 0x6C94, 0x7704, 0x7720, 0x7DBF,
+ 0x7DEC, 0x9762, 0x9EB5, 0x6EC5, 0x8511, 0x51A5, 0x540D, 0x547D, 0x660E,
+ 0x669D, 0x6927, 0x6E9F, 0x76BF, 0x7791, 0x8317, 0x84C2, 0x879F, 0x9169,
+ 0x9298, 0x9CF4, 0x8882, 0x4FAE, 0x5192, 0x52DF, 0x59C6, 0x5E3D, 0x6155,
+ 0x6478, 0x6479, 0x66AE, 0x67D0, 0x6A21, 0x6BCD, 0x6BDB, 0x725F, 0x7261,
+ 0x7441, 0x7738, 0x77DB, 0x8017, 0x82BC, 0x8305, 0x8B00, 0x8B28, 0x8C8C,
+ 0x6728, 0x6C90, 0x7267, 0x76EE, 0x7766, 0x7A46, 0x9DA9, 0x6B7F, 0x6C92,
+ 0x5922, 0x6726, 0x8499, 0x536F, 0x5893, 0x5999, 0x5EDF, 0x63CF, 0x6634,
+ 0x6773, 0x6E3A, 0x732B, 0x7AD7, 0x82D7, 0x9328, 0x52D9, 0x5DEB, 0x61AE,
+ 0x61CB, 0x620A, 0x62C7, 0x64AB, 0x65E0, 0x6959, 0x6B66, 0x6BCB, 0x7121,
+ 0x73F7, 0x755D, 0x7E46, 0x821E, 0x8302, 0x856A, 0x8AA3, 0x8CBF, 0x9727,
+ 0x9D61, 0x58A8, 0x9ED8, 0x5011, 0x520E, 0x543B, 0x554F, 0x6587, 0x6C76,
+ 0x7D0A, 0x7D0B, 0x805E, 0x868A, 0x9580, 0x96EF, 0x52FF, 0x6C95, 0x7269,
+ 0x5473, 0x5A9A, 0x5C3E, 0x5D4B, 0x5F4C, 0x5FAE, 0x672A, 0x68B6, 0x6963,
+ 0x6E3C, 0x6E44, 0x7709, 0x7C73, 0x7F8E, 0x8587, 0x8B0E, 0x8FF7, 0x9761,
+ 0x9EF4, 0x5CB7, 0x60B6, 0x610D, 0x61AB, 0x654F, 0x65FB, 0x65FC, 0x6C11,
+ 0x6CEF, 0x739F, 0x73C9, 0x7DE1, 0x9594, 0x5BC6, 0x871C, 0x8B10, 0x525D,
+ 0x535A, 0x62CD, 0x640F, 0x64B2, 0x6734, 0x6A38, 0x6CCA, 0x73C0, 0x749E,
+ 0x7B94, 0x7C95, 0x7E1B, 0x818A, 0x8236, 0x8584, 0x8FEB, 0x96F9, 0x99C1,
+ 0x4F34, 0x534A, 0x53CD, 0x53DB, 0x62CC, 0x642C, 0x6500, 0x6591, 0x69C3,
+ 0x6CEE, 0x6F58, 0x73ED, 0x7554, 0x7622, 0x76E4, 0x76FC, 0x78D0, 0x78FB,
+ 0x792C, 0x7D46, 0x822C, 0x87E0, 0x8FD4, 0x9812, 0x98EF, 0x52C3, 0x62D4,
+ 0x64A5, 0x6E24, 0x6F51, 0x767C, 0x8DCB, 0x91B1, 0x9262, 0x9AEE, 0x9B43,
+ 0x5023, 0x508D, 0x574A, 0x59A8, 0x5C28, 0x5E47, 0x5F77, 0x623F, 0x653E,
+ 0x65B9, 0x65C1, 0x6609, 0x678B, 0x699C, 0x6EC2, 0x78C5, 0x7D21, 0x80AA,
+ 0x8180, 0x822B, 0x82B3, 0x84A1, 0x868C, 0x8A2A, 0x8B17, 0x90A6, 0x9632,
+ 0x9F90, 0x500D, 0x4FF3, 0x57F9, 0x5F98, 0x62DC, 0x6392, 0x676F, 0x6E43,
+ 0x7119, 0x76C3, 0x80CC, 0x80DA, 0x88F4, 0x88F5, 0x8919, 0x8CE0, 0x8F29,
+ 0x914D, 0x966A, 0x4F2F, 0x4F70, 0x5E1B, 0x67CF, 0x6822, 0x767D, 0x767E,
+ 0x9B44, 0x5E61, 0x6A0A, 0x7169, 0x71D4, 0x756A, 0x7E41, 0x8543, 0x85E9,
+ 0x98DC, 0x4F10, 0x7B4F, 0x7F70, 0x95A5, 0x51E1, 0x5E06, 0x68B5, 0x6C3E,
+ 0x6C4E, 0x6CDB, 0x72AF, 0x7BC4, 0x8303, 0x6CD5, 0x743A, 0x50FB, 0x5288,
+ 0x58C1, 0x64D8, 0x6A97, 0x74A7, 0x7656, 0x78A7, 0x8617, 0x95E2, 0x9739,
+ 0x535E, 0x5F01, 0x8B8A, 0x8FA8, 0x8FAF, 0x908A, 0x5225, 0x77A5, 0x9C49,
+ 0x9F08, 0x4E19, 0x5002, 0x5175, 0x5C5B, 0x5E77, 0x661E, 0x663A, 0x67C4,
+ 0x68C5, 0x70B3, 0x7501, 0x75C5, 0x79C9, 0x7ADD, 0x8F27, 0x9920, 0x9A08,
+ 0x4FDD, 0x5821, 0x5831, 0x5BF6, 0x666E, 0x6B65, 0x6D11, 0x6E7A, 0x6F7D,
+ 0x73E4, 0x752B, 0x83E9, 0x88DC, 0x8913, 0x8B5C, 0x8F14, 0x4F0F, 0x50D5,
+ 0x5310, 0x535C, 0x5B93, 0x5FA9, 0x670D, 0x798F, 0x8179, 0x832F, 0x8514,
+ 0x8907, 0x8986, 0x8F39, 0x8F3B, 0x99A5, 0x9C12, 0x672C, 0x4E76, 0x4FF8,
+ 0x5949, 0x5C01, 0x5CEF, 0x5CF0, 0x6367, 0x68D2, 0x70FD, 0x71A2, 0x742B,
+ 0x7E2B, 0x84EC, 0x8702, 0x9022, 0x92D2, 0x9CF3, 0x4E0D, 0x4ED8, 0x4FEF,
+ 0x5085, 0x5256, 0x526F, 0x5426, 0x5490, 0x57E0, 0x592B, 0x5A66, 0x5B5A,
+ 0x5B75, 0x5BCC, 0x5E9C, 0x6276, 0x6577, 0x65A7, 0x6D6E, 0x6EA5, 0x7236,
+ 0x7B26, 0x7C3F, 0x7F36, 0x8150, 0x8151, 0x819A, 0x8240, 0x8299, 0x83A9,
+ 0x8A03, 0x8CA0, 0x8CE6, 0x8CFB, 0x8D74, 0x8DBA, 0x90E8, 0x91DC, 0x961C,
+ 0x9644, 0x99D9, 0x9CE7, 0x5317, 0x5206, 0x5429, 0x5674, 0x58B3, 0x5954,
+ 0x596E, 0x5FFF, 0x61A4, 0x626E, 0x6610, 0x6C7E, 0x711A, 0x76C6, 0x7C89,
+ 0x7CDE, 0x7D1B, 0x82AC, 0x8CC1, 0x96F0, 0x4F5B, 0x5F17, 0x5F7F, 0x62C2,
+ 0x5D29, 0x670B, 0x68DA, 0x787C, 0x7E43, 0x9D6C, 0x4E15, 0x5099, 0x5315,
+ 0x532A, 0x5351, 0x5983, 0x5A62, 0x5E87, 0x60B2, 0x618A, 0x6249, 0x6279,
+ 0x6590, 0x6787, 0x69A7, 0x6BD4, 0x6BD6, 0x6BD7, 0x6BD8, 0x6CB8, 0x7435,
+ 0x75FA, 0x7812, 0x7891, 0x79D5, 0x79D8, 0x7C83, 0x7DCB, 0x7FE1, 0x80A5,
+ 0x813E, 0x81C2, 0x83F2, 0x871A, 0x88E8, 0x8AB9, 0x8B6C, 0x8CBB, 0x9119,
+ 0x975E, 0x98DB, 0x9F3B, 0x56AC, 0x5B2A, 0x5F6C, 0x658C, 0x6AB3, 0x6BAF,
+ 0x6D5C, 0x6FF1, 0x7015, 0x725D, 0x73AD, 0x8CA7, 0x8CD3, 0x983B, 0x6191,
+ 0x6C37, 0x8058, 0x9A01, 0x4E4D, 0x4E8B, 0x4E9B, 0x4ED5, 0x4F3A, 0x4F3C,
+ 0x4F7F, 0x4FDF, 0x50FF, 0x53F2, 0x53F8, 0x5506, 0x55E3, 0x56DB, 0x58EB,
+ 0x5962, 0x5A11, 0x5BEB, 0x5BFA, 0x5C04, 0x5DF3, 0x5E2B, 0x5F99, 0x601D,
+ 0x6368, 0x659C, 0x65AF, 0x67F6, 0x67FB, 0x68AD, 0x6B7B, 0x6C99, 0x6CD7,
+ 0x6E23, 0x7009, 0x7345, 0x7802, 0x793E, 0x7940, 0x7960, 0x79C1, 0x7BE9,
+ 0x7D17, 0x7D72, 0x8086, 0x820D, 0x838E, 0x84D1, 0x86C7, 0x88DF, 0x8A50,
+ 0x8A5E, 0x8B1D, 0x8CDC, 0x8D66, 0x8FAD, 0x90AA, 0x98FC, 0x99DF, 0x9E9D,
+ 0x524A, 0x6714, 0x5098, 0x522A, 0x5C71, 0x6563, 0x6C55, 0x73CA, 0x7523,
+ 0x759D, 0x7B97, 0x849C, 0x9178, 0x9730, 0x4E77, 0x6492, 0x6BBA, 0x715E,
+ 0x85A9, 0x4E09, 0x6749, 0x68EE, 0x6E17, 0x829F, 0x8518, 0x886B, 0x63F7,
+ 0x6F81, 0x9212, 0x98AF, 0x4E0A, 0x50B7, 0x50CF, 0x511F, 0x5546, 0x55AA,
+ 0x5617, 0x5B40, 0x5C19, 0x5CE0, 0x5E38, 0x5E8A, 0x5EA0, 0x5EC2, 0x60F3,
+ 0x6851, 0x6A61, 0x6E58, 0x723D, 0x7240, 0x72C0, 0x76F8, 0x7965, 0x7BB1,
+ 0x7FD4, 0x88F3, 0x89F4, 0x8A73, 0x8C61, 0x8CDE, 0x971C, 0x585E, 0x74BD,
+ 0x8CFD, 0x55C7, 0x7A61, 0x7D22, 0x8272, 0x7272, 0x751F, 0x7525, 0x7B19,
+ 0x5885, 0x58FB, 0x5DBC, 0x5E8F, 0x5EB6, 0x5F90, 0x6055, 0x6292, 0x637F,
+ 0x654D, 0x6691, 0x66D9, 0x66F8, 0x6816, 0x68F2, 0x7280, 0x745E, 0x7B6E,
+ 0x7D6E, 0x7DD6, 0x7F72, 0x80E5, 0x8212, 0x85AF, 0x897F, 0x8A93, 0x901D,
+ 0x92E4, 0x9ECD, 0x9F20, 0x5915, 0x596D, 0x5E2D, 0x60DC, 0x6614, 0x6673,
+ 0x6790, 0x6C50, 0x6DC5, 0x6F5F, 0x77F3, 0x78A9, 0x84C6, 0x91CB, 0x932B,
+ 0x4ED9, 0x50CA, 0x5148, 0x5584, 0x5B0B, 0x5BA3, 0x6247, 0x657E, 0x65CB,
+ 0x6E32, 0x717D, 0x7401, 0x7444, 0x7487, 0x74BF, 0x766C, 0x79AA, 0x7DDA,
+ 0x7E55, 0x7FA8, 0x817A, 0x81B3, 0x8239, 0x861A, 0x87EC, 0x8A75, 0x8DE3,
+ 0x9078, 0x9291, 0x9425, 0x994D, 0x9BAE, 0x5368, 0x5C51, 0x6954, 0x6CC4,
+ 0x6D29, 0x6E2B, 0x820C, 0x859B, 0x893B, 0x8A2D, 0x8AAA, 0x96EA, 0x9F67,
+ 0x5261, 0x66B9, 0x6BB2, 0x7E96, 0x87FE, 0x8D0D, 0x9583, 0x965D, 0x651D,
+ 0x6D89, 0x71EE, 0x57CE, 0x59D3, 0x5BAC, 0x6027, 0x60FA, 0x6210, 0x661F,
+ 0x665F, 0x7329, 0x73F9, 0x76DB, 0x7701, 0x7B6C, 0x8056, 0x8072, 0x8165,
+ 0x8AA0, 0x9192, 0x4E16, 0x52E2, 0x6B72, 0x6D17, 0x7A05, 0x7B39, 0x7D30,
+ 0x8CB0, 0x53EC, 0x562F, 0x5851, 0x5BB5, 0x5C0F, 0x5C11, 0x5DE2, 0x6240,
+ 0x6383, 0x6414, 0x662D, 0x68B3, 0x6CBC, 0x6D88, 0x6EAF, 0x701F, 0x70A4,
+ 0x71D2, 0x7526, 0x758F, 0x758E, 0x7619, 0x7B11, 0x7BE0, 0x7C2B, 0x7D20,
+ 0x7D39, 0x852C, 0x856D, 0x8607, 0x8A34, 0x900D, 0x9061, 0x90B5, 0x92B7,
+ 0x97F6, 0x9A37, 0x4FD7, 0x5C6C, 0x675F, 0x6D91, 0x7C9F, 0x7E8C, 0x8B16,
+ 0x8D16, 0x901F, 0x5B6B, 0x5DFD, 0x640D, 0x84C0, 0x905C, 0x98E1, 0x7387,
+ 0x5B8B, 0x609A, 0x677E, 0x6DDE, 0x8A1F, 0x8AA6, 0x9001, 0x980C, 0x5237,
+ 0x7051, 0x788E, 0x9396, 0x8870, 0x91D7, 0x4FEE, 0x53D7, 0x55FD, 0x56DA,
+ 0x5782, 0x58FD, 0x5AC2, 0x5B88, 0x5CAB, 0x5CC0, 0x5E25, 0x6101, 0x620D,
+ 0x624B, 0x6388, 0x641C, 0x6536, 0x6578, 0x6A39, 0x6B8A, 0x6C34, 0x6D19,
+ 0x6F31, 0x71E7, 0x72E9, 0x7378, 0x7407, 0x74B2, 0x7626, 0x7761, 0x79C0,
+ 0x7A57, 0x7AEA, 0x7CB9, 0x7D8F, 0x7DAC, 0x7E61, 0x7F9E, 0x8129, 0x8331,
+ 0x8490, 0x84DA, 0x85EA, 0x8896, 0x8AB0, 0x8B90, 0x8F38, 0x9042, 0x9083,
+ 0x916C, 0x9296, 0x92B9, 0x968B, 0x96A7, 0x96A8, 0x96D6, 0x9700, 0x9808,
+ 0x9996, 0x9AD3, 0x9B1A, 0x53D4, 0x587E, 0x5919, 0x5B70, 0x5BBF, 0x6DD1,
+ 0x6F5A, 0x719F, 0x7421, 0x74B9, 0x8085, 0x83FD, 0x5DE1, 0x5F87, 0x5FAA,
+ 0x6042, 0x65EC, 0x6812, 0x696F, 0x6A53, 0x6B89, 0x6D35, 0x6DF3, 0x73E3,
+ 0x76FE, 0x77AC, 0x7B4D, 0x7D14, 0x8123, 0x821C, 0x8340, 0x84F4, 0x8563,
+ 0x8A62, 0x8AC4, 0x9187, 0x931E, 0x9806, 0x99B4, 0x620C, 0x8853, 0x8FF0,
+ 0x9265, 0x5D07, 0x5D27, 0x5D69, 0x745F, 0x819D, 0x8768, 0x6FD5, 0x62FE,
+ 0x7FD2, 0x8936, 0x8972, 0x4E1E, 0x4E58, 0x50E7, 0x52DD, 0x5347, 0x627F,
+ 0x6607, 0x7E69, 0x8805, 0x965E, 0x4F8D, 0x5319, 0x5636, 0x59CB, 0x5AA4,
+ 0x5C38, 0x5C4E, 0x5C4D, 0x5E02, 0x5F11, 0x6043, 0x65BD, 0x662F, 0x6642,
+ 0x67BE, 0x67F4, 0x731C, 0x77E2, 0x793A, 0x7FC5, 0x8494, 0x84CD, 0x8996,
+ 0x8A66, 0x8A69, 0x8AE1, 0x8C55, 0x8C7A, 0x57F4, 0x5BD4, 0x5F0F, 0x606F,
+ 0x62ED, 0x690D, 0x6B96, 0x6E5C, 0x7184, 0x7BD2, 0x8755, 0x8B58, 0x8EFE,
+ 0x98DF, 0x98FE, 0x4F38, 0x4F81, 0x4FE1, 0x547B, 0x5A20, 0x5BB8, 0x613C,
+ 0x65B0, 0x6668, 0x71FC, 0x7533, 0x795E, 0x7D33, 0x814E, 0x81E3, 0x8398,
+ 0x85AA, 0x85CE, 0x8703, 0x8A0A, 0x8EAB, 0x8F9B, 0x8FC5, 0x5931, 0x5BA4,
+ 0x5BE6, 0x6089, 0x5BE9, 0x5C0B, 0x5FC3, 0x6C81, 0x6DF1, 0x700B, 0x751A,
+ 0x82AF, 0x8AF6, 0x4EC0, 0x5341, 0x96D9, 0x6C0F, 0x4E9E, 0x4FC4, 0x5152,
+ 0x555E, 0x5A25, 0x5CE8, 0x6211, 0x7259, 0x82BD, 0x83AA, 0x86FE, 0x8859,
+ 0x8A1D, 0x963F, 0x96C5, 0x9913, 0x9D09, 0x9D5D, 0x580A, 0x5CB3, 0x5DBD,
+ 0x5E44, 0x60E1, 0x6115, 0x63E1, 0x6A02, 0x6E25, 0x9102, 0x9354, 0x984E,
+ 0x9C10, 0x9F77, 0x5B89, 0x5CB8, 0x6309, 0x664F, 0x6848, 0x773C, 0x96C1,
+ 0x978D, 0x9854, 0x9B9F, 0x65A1, 0x8B01, 0x8ECB, 0x95BC, 0x5535, 0x5CA9,
+ 0x5DD6, 0x5EB5, 0x6697, 0x764C, 0x83F4, 0x95C7, 0x58D3, 0x62BC, 0x72CE,
+ 0x9D28, 0x4EF0, 0x592E, 0x600F, 0x663B, 0x6B83, 0x79E7, 0x9D26, 0x5393,
+ 0x54C0, 0x57C3, 0x5D16, 0x611B, 0x66D6, 0x6DAF, 0x788D, 0x827E, 0x9698,
+ 0x9744, 0x5384, 0x627C, 0x6396, 0x6DB2, 0x7E0A, 0x814B, 0x984D, 0x6AFB,
+ 0x7F4C, 0x9DAF, 0x9E1A, 0x4E5F, 0x503B, 0x51B6, 0x591C, 0x60F9, 0x63F6,
+ 0x6930, 0x723A, 0x8036, 0x91CE, 0x5F31, 0x7D04, 0x82E5, 0x846F, 0x84BB,
+ 0x85E5, 0x8E8D, 0x4F6F, 0x58E4, 0x5B43, 0x6059, 0x63DA, 0x6518, 0x656D,
+ 0x6698, 0x694A, 0x6A23, 0x6D0B, 0x7001, 0x716C, 0x75D2, 0x760D, 0x79B3,
+ 0x7A70, 0x7F8A, 0x8944, 0x8B93, 0x91C0, 0x967D, 0x990A, 0x5704, 0x5FA1,
+ 0x65BC, 0x6F01, 0x7600, 0x79A6, 0x8A9E, 0x99AD, 0x9B5A, 0x9F6C, 0x5104,
+ 0x61B6, 0x6291, 0x6A8D, 0x81C6, 0x5043, 0x5830, 0x5F66, 0x7109, 0x8A00,
+ 0x8AFA, 0x5B7C, 0x8616, 0x4FFA, 0x513C, 0x56B4, 0x5944, 0x63A9, 0x6DF9,
+ 0x5DAA, 0x696D, 0x5186, 0x4E88, 0x4F59, 0x5982, 0x6B5F, 0x6C5D, 0x74B5,
+ 0x7916, 0x8207, 0x8245, 0x8339, 0x8F3F, 0x8F5D, 0x9918, 0x4EA6, 0x57DF,
+ 0x5F79, 0x6613, 0x75AB, 0x7E79, 0x8B6F, 0x9006, 0x9A5B, 0x56A5, 0x5827,
+ 0x59F8, 0x5A1F, 0x5BB4, 0x5EF6, 0x6350, 0x633B, 0x693D, 0x6C87, 0x6CBF,
+ 0x6D8E, 0x6D93, 0x6DF5, 0x6F14, 0x70DF, 0x7136, 0x7159, 0x71C3, 0x71D5,
+ 0x784F, 0x786F, 0x7B75, 0x7DE3, 0x7E2F, 0x884D, 0x8EDF, 0x925B, 0x9CF6,
+ 0x6085, 0x6D85, 0x71B1, 0x95B1, 0x53AD, 0x67D3, 0x708E, 0x7130, 0x7430,
+ 0x8276, 0x82D2, 0x95BB, 0x9AE5, 0x9E7D, 0x66C4, 0x71C1, 0x8449, 0x584B,
+ 0x5DB8, 0x5F71, 0x6620, 0x668E, 0x6979, 0x69AE, 0x6C38, 0x6CF3, 0x6E36,
+ 0x6F41, 0x6FDA, 0x701B, 0x702F, 0x7150, 0x71DF, 0x7370, 0x745B, 0x74D4,
+ 0x76C8, 0x7A4E, 0x7E93, 0x82F1, 0x8A60, 0x8FCE, 0x9348, 0x9719, 0x4E42,
+ 0x502A, 0x5208, 0x53E1, 0x66F3, 0x6C6D, 0x6FCA, 0x730A, 0x777F, 0x7A62,
+ 0x82AE, 0x85DD, 0x8602, 0x88D4, 0x8A63, 0x8B7D, 0x8C6B, 0x92B3, 0x9713,
+ 0x9810, 0x4E94, 0x4F0D, 0x4FC9, 0x50B2, 0x5348, 0x543E, 0x5433, 0x55DA,
+ 0x5862, 0x58BA, 0x5967, 0x5A1B, 0x5BE4, 0x609F, 0x61CA, 0x6556, 0x65FF,
+ 0x6664, 0x68A7, 0x6C5A, 0x6FB3, 0x70CF, 0x71AC, 0x7352, 0x7B7D, 0x8708,
+ 0x8AA4, 0x9C32, 0x9F07, 0x5C4B, 0x6C83, 0x7344, 0x7389, 0x923A, 0x6EAB,
+ 0x7465, 0x761F, 0x7A69, 0x7E15, 0x860A, 0x5140, 0x58C5, 0x64C1, 0x74EE,
+ 0x7515, 0x7670, 0x7FC1, 0x9095, 0x96CD, 0x9954, 0x6E26, 0x74E6, 0x7AA9,
+ 0x7AAA, 0x81E5, 0x86D9, 0x8778, 0x8A1B, 0x5A49, 0x5B8C, 0x5B9B, 0x68A1,
+ 0x6900, 0x6D63, 0x73A9, 0x7413, 0x742C, 0x7897, 0x7DE9, 0x7FEB, 0x8118,
+ 0x8155, 0x839E, 0x8C4C, 0x962E, 0x9811, 0x66F0, 0x5F80, 0x65FA, 0x6789,
+ 0x6C6A, 0x738B, 0x502D, 0x5A03, 0x6B6A, 0x77EE, 0x5916, 0x5D6C, 0x5DCD,
+ 0x7325, 0x754F, 0x50E5, 0x51F9, 0x582F, 0x592D, 0x5996, 0x59DA, 0x5BE5,
+ 0x5DA2, 0x62D7, 0x6416, 0x6493, 0x64FE, 0x66DC, 0x6A48, 0x71FF, 0x7464,
+ 0x7A88, 0x7AAF, 0x7E47, 0x7E5E, 0x8000, 0x8170, 0x87EF, 0x8981, 0x8B20,
+ 0x9059, 0x9080, 0x9952, 0x617E, 0x6B32, 0x6D74, 0x7E1F, 0x8925, 0x8FB1,
+ 0x4FD1, 0x50AD, 0x5197, 0x52C7, 0x57C7, 0x5889, 0x5BB9, 0x5EB8, 0x6142,
+ 0x6995, 0x6D8C, 0x6E67, 0x6EB6, 0x7194, 0x7462, 0x7528, 0x752C, 0x8073,
+ 0x8338, 0x84C9, 0x8E0A, 0x9394, 0x93DE, 0x4E8E, 0x4F51, 0x5076, 0x512A,
+ 0x53C8, 0x53CB, 0x53F3, 0x5B87, 0x5BD3, 0x5C24, 0x611A, 0x6182, 0x65F4,
+ 0x725B, 0x7397, 0x7440, 0x76C2, 0x7950, 0x7991, 0x79B9, 0x7D06, 0x7FBD,
+ 0x828B, 0x85D5, 0x865E, 0x8FC2, 0x9047, 0x90F5, 0x91EA, 0x9685, 0x96E8,
+ 0x96E9, 0x52D6, 0x5F67, 0x65ED, 0x6631, 0x682F, 0x715C, 0x7A36, 0x90C1,
+ 0x980A, 0x4E91, 0x6A52, 0x6B9E, 0x6F90, 0x7189, 0x8018, 0x82B8, 0x8553,
+ 0x904B, 0x9695, 0x96F2, 0x97FB, 0x851A, 0x9B31, 0x4E90, 0x718A, 0x96C4,
+ 0x5143, 0x539F, 0x54E1, 0x5713, 0x5712, 0x57A3, 0x5A9B, 0x5AC4, 0x5BC3,
+ 0x6028, 0x613F, 0x63F4, 0x6C85, 0x6D39, 0x6E72, 0x6E90, 0x7230, 0x733F,
+ 0x7457, 0x82D1, 0x8881, 0x8F45, 0x9060, 0x9662, 0x9858, 0x9D1B, 0x6708,
+ 0x8D8A, 0x925E, 0x4F4D, 0x5049, 0x50DE, 0x5371, 0x570D, 0x59D4, 0x5A01,
+ 0x5C09, 0x6170, 0x6690, 0x6E2D, 0x7232, 0x744B, 0x7DEF, 0x80C3, 0x840E,
+ 0x8466, 0x853F, 0x875F, 0x885B, 0x8918, 0x8B02, 0x9055, 0x97CB, 0x9B4F,
+ 0x4E73, 0x4F91, 0x5112, 0x516A, 0x552F, 0x55A9, 0x5B7A, 0x5BA5, 0x5E7C,
+ 0x5E7D, 0x5EBE, 0x60A0, 0x60DF, 0x6108, 0x6109, 0x63C4, 0x6538, 0x6709,
+ 0x67D4, 0x67DA, 0x6961, 0x6962, 0x6CB9, 0x6D27, 0x6E38, 0x6FE1, 0x7336,
+ 0x7337, 0x745C, 0x7531, 0x7652, 0x7DAD, 0x81FE, 0x8438, 0x88D5, 0x8A98,
+ 0x8ADB, 0x8AED, 0x8E30, 0x8E42, 0x904A, 0x903E, 0x907A, 0x9149, 0x91C9,
+ 0x936E, 0x5809, 0x6BD3, 0x8089, 0x80B2, 0x5141, 0x596B, 0x5C39, 0x6F64,
+ 0x73A7, 0x80E4, 0x8D07, 0x9217, 0x958F, 0x807F, 0x620E, 0x701C, 0x7D68,
+ 0x878D, 0x57A0, 0x6069, 0x6147, 0x6BB7, 0x8ABE, 0x9280, 0x96B1, 0x4E59,
+ 0x541F, 0x6DEB, 0x852D, 0x9670, 0x97F3, 0x98EE, 0x63D6, 0x6CE3, 0x9091,
+ 0x51DD, 0x61C9, 0x81BA, 0x9DF9, 0x4F9D, 0x501A, 0x5100, 0x5B9C, 0x610F,
+ 0x61FF, 0x64EC, 0x6905, 0x6BC5, 0x7591, 0x77E3, 0x7FA9, 0x8264, 0x858F,
+ 0x87FB, 0x8863, 0x8ABC, 0x8B70, 0x91AB, 0x4E8C, 0x4EE5, 0x4F0A, 0x5937,
+ 0x59E8, 0x5DF2, 0x5F1B, 0x5F5B, 0x6021, 0x723E, 0x73E5, 0x7570, 0x75CD,
+ 0x79FB, 0x800C, 0x8033, 0x8084, 0x82E1, 0x8351, 0x8CBD, 0x8CB3, 0x9087,
+ 0x98F4, 0x990C, 0x7037, 0x76CA, 0x7FCA, 0x7FCC, 0x7FFC, 0x8B1A, 0x4EBA,
+ 0x4EC1, 0x5203, 0x5370, 0x54BD, 0x56E0, 0x59FB, 0x5BC5, 0x5F15, 0x5FCD,
+ 0x6E6E, 0x7D6A, 0x8335, 0x8693, 0x8A8D, 0x976D, 0x9777, 0x4E00, 0x4F5A,
+ 0x4F7E, 0x58F9, 0x65E5, 0x6EA2, 0x9038, 0x93B0, 0x99B9, 0x4EFB, 0x58EC,
+ 0x598A, 0x59D9, 0x6041, 0x7A14, 0x834F, 0x8CC3, 0x5165, 0x5344, 0x4ECD,
+ 0x5269, 0x5B55, 0x82BF, 0x4ED4, 0x523A, 0x54A8, 0x59C9, 0x59FF, 0x5B50,
+ 0x5B57, 0x5B5C, 0x6063, 0x6148, 0x6ECB, 0x7099, 0x716E, 0x7386, 0x74F7,
+ 0x75B5, 0x78C1, 0x7D2B, 0x8005, 0x81EA, 0x8328, 0x8517, 0x85C9, 0x8AEE,
+ 0x8CC7, 0x96CC, 0x4F5C, 0x52FA, 0x56BC, 0x65AB, 0x6628, 0x707C, 0x70B8,
+ 0x7235, 0x7DBD, 0x828D, 0x914C, 0x96C0, 0x9D72, 0x5B71, 0x68E7, 0x6B98,
+ 0x6F7A, 0x76DE, 0x5C91, 0x66AB, 0x6F5B, 0x7BB4, 0x7C2A, 0x8836, 0x96DC,
+ 0x4E08, 0x4ED7, 0x5320, 0x5834, 0x58BB, 0x58EF, 0x596C, 0x5C07, 0x5E33,
+ 0x5E84, 0x5F35, 0x638C, 0x66B2, 0x6756, 0x6A1F, 0x6AA3, 0x6B0C, 0x6F3F,
+ 0x7246, 0x7350, 0x748B, 0x7AE0, 0x7CA7, 0x8178, 0x81DF, 0x81E7, 0x838A,
+ 0x846C, 0x8523, 0x8594, 0x85CF, 0x88DD, 0x8D13, 0x91AC, 0x9577, 0x969C,
+ 0x518D, 0x54C9, 0x5728, 0x5BB0, 0x624D, 0x6750, 0x683D, 0x6893, 0x6E3D,
+ 0x6ED3, 0x707D, 0x7E21, 0x88C1, 0x8CA1, 0x8F09, 0x9F4B, 0x9F4E, 0x722D,
+ 0x7B8F, 0x8ACD, 0x931A, 0x4F47, 0x4F4E, 0x5132, 0x5480, 0x59D0, 0x5E95,
+ 0x62B5, 0x6775, 0x696E, 0x6A17, 0x6CAE, 0x6E1A, 0x72D9, 0x732A, 0x75BD,
+ 0x7BB8, 0x7D35, 0x82E7, 0x83F9, 0x8457, 0x85F7, 0x8A5B, 0x8CAF, 0x8E87,
+ 0x9019, 0x90B8, 0x96CE, 0x9F5F, 0x52E3, 0x540A, 0x5AE1, 0x5BC2, 0x6458,
+ 0x6575, 0x6EF4, 0x72C4, 0x7684, 0x7A4D, 0x7B1B, 0x7C4D, 0x7E3E, 0x7FDF,
+ 0x837B, 0x8B2B, 0x8CCA, 0x8D64, 0x8DE1, 0x8E5F, 0x8FEA, 0x8FF9, 0x9069,
+ 0x93D1, 0x4F43, 0x4F7A, 0x50B3, 0x5168, 0x5178, 0x524D, 0x526A, 0x5861,
+ 0x587C, 0x5960, 0x5C08, 0x5C55, 0x5EDB, 0x609B, 0x6230, 0x6813, 0x6BBF,
+ 0x6C08, 0x6FB1, 0x714E, 0x7420, 0x7530, 0x7538, 0x7551, 0x7672, 0x7B4C,
+ 0x7B8B, 0x7BAD, 0x7BC6, 0x7E8F, 0x8A6E, 0x8F3E, 0x8F49, 0x923F, 0x9293,
+ 0x9322, 0x942B, 0x96FB, 0x985A, 0x986B, 0x991E, 0x5207, 0x622A, 0x6298,
+ 0x6D59, 0x7664, 0x7ACA, 0x7BC0, 0x7D76, 0x5360, 0x5CBE, 0x5E97, 0x6F38,
+ 0x70B9, 0x7C98, 0x9711, 0x9B8E, 0x9EDE, 0x63A5, 0x647A, 0x8776, 0x4E01,
+ 0x4E95, 0x4EAD, 0x505C, 0x5075, 0x5448, 0x59C3, 0x5B9A, 0x5E40, 0x5EAD,
+ 0x5EF7, 0x5F81, 0x60C5, 0x633A, 0x653F, 0x6574, 0x65CC, 0x6676, 0x6678,
+ 0x67FE, 0x6968, 0x6A89, 0x6B63, 0x6C40, 0x6DC0, 0x6DE8, 0x6E1F, 0x6E5E,
+ 0x701E, 0x70A1, 0x738E, 0x73FD, 0x753A, 0x775B, 0x7887, 0x798E, 0x7A0B,
+ 0x7A7D, 0x7CBE, 0x7D8E, 0x8247, 0x8A02, 0x8AEA, 0x8C9E, 0x912D, 0x914A,
+ 0x91D8, 0x9266, 0x92CC, 0x9320, 0x9706, 0x9756, 0x975C, 0x9802, 0x9F0E,
+ 0x5236, 0x5291, 0x557C, 0x5824, 0x5E1D, 0x5F1F, 0x608C, 0x63D0, 0x68AF,
+ 0x6FDF, 0x796D, 0x7B2C, 0x81CD, 0x85BA, 0x88FD, 0x8AF8, 0x8E44, 0x918D,
+ 0x9664, 0x969B, 0x973D, 0x984C, 0x9F4A, 0x4FCE, 0x5146, 0x51CB, 0x52A9,
+ 0x5632, 0x5F14, 0x5F6B, 0x63AA, 0x64CD, 0x65E9, 0x6641, 0x66FA, 0x66F9,
+ 0x671D, 0x689D, 0x68D7, 0x69FD, 0x6F15, 0x6F6E, 0x7167, 0x71E5, 0x722A,
+ 0x74AA, 0x773A, 0x7956, 0x795A, 0x79DF, 0x7A20, 0x7A95, 0x7C97, 0x7CDF,
+ 0x7D44, 0x7E70, 0x8087, 0x85FB, 0x86A4, 0x8A54, 0x8ABF, 0x8D99, 0x8E81,
+ 0x9020, 0x906D, 0x91E3, 0x963B, 0x96D5, 0x9CE5, 0x65CF, 0x7C07, 0x8DB3,
+ 0x93C3, 0x5B58, 0x5C0A, 0x5352, 0x62D9, 0x731D, 0x5027, 0x5B97, 0x5F9E,
+ 0x60B0, 0x616B, 0x68D5, 0x6DD9, 0x742E, 0x7A2E, 0x7D42, 0x7D9C, 0x7E31,
+ 0x816B, 0x8E2A, 0x8E35, 0x937E, 0x9418, 0x4F50, 0x5750, 0x5DE6, 0x5EA7,
+ 0x632B, 0x7F6A, 0x4E3B, 0x4F4F, 0x4F8F, 0x505A, 0x59DD, 0x80C4, 0x546A,
+ 0x5468, 0x55FE, 0x594F, 0x5B99, 0x5DDE, 0x5EDA, 0x665D, 0x6731, 0x67F1,
+ 0x682A, 0x6CE8, 0x6D32, 0x6E4A, 0x6F8D, 0x70B7, 0x73E0, 0x7587, 0x7C4C,
+ 0x7D02, 0x7D2C, 0x7DA2, 0x821F, 0x86DB, 0x8A3B, 0x8A85, 0x8D70, 0x8E8A,
+ 0x8F33, 0x9031, 0x914E, 0x9152, 0x9444, 0x99D0, 0x7AF9, 0x7CA5, 0x4FCA,
+ 0x5101, 0x51C6, 0x57C8, 0x5BEF, 0x5CFB, 0x6659, 0x6A3D, 0x6D5A, 0x6E96,
+ 0x6FEC, 0x710C, 0x756F, 0x7AE3, 0x8822, 0x9021, 0x9075, 0x96CB, 0x99FF,
+ 0x8301, 0x4E2D, 0x4EF2, 0x8846, 0x91CD, 0x537D, 0x6ADB, 0x696B, 0x6C41,
+ 0x847A, 0x589E, 0x618E, 0x66FE, 0x62EF, 0x70DD, 0x7511, 0x75C7, 0x7E52,
+ 0x84B8, 0x8B49, 0x8D08, 0x4E4B, 0x53EA, 0x54AB, 0x5730, 0x5740, 0x5FD7,
+ 0x6301, 0x6307, 0x646F, 0x652F, 0x65E8, 0x667A, 0x679D, 0x67B3, 0x6B62,
+ 0x6C60, 0x6C9A, 0x6F2C, 0x77E5, 0x7825, 0x7949, 0x7957, 0x7D19, 0x80A2,
+ 0x8102, 0x81F3, 0x829D, 0x82B7, 0x8718, 0x8A8C, 0x8D04, 0x8DBE, 0x9072,
+ 0x76F4, 0x7A19, 0x7A37, 0x7E54, 0x8077, 0x5507, 0x55D4, 0x5875, 0x632F,
+ 0x6422, 0x6649, 0x664B, 0x686D, 0x699B, 0x6B84, 0x6D25, 0x6EB1, 0x73CD,
+ 0x7468, 0x74A1, 0x755B, 0x75B9, 0x76E1, 0x771E, 0x778B, 0x79E6, 0x7E09,
+ 0x7E1D, 0x81FB, 0x852F, 0x8897, 0x8A3A, 0x8CD1, 0x8EEB, 0x8FB0, 0x9032,
+ 0x93AD, 0x9663, 0x9673, 0x9707, 0x4F84, 0x53F1, 0x59EA, 0x5AC9, 0x5E19,
+ 0x684E, 0x74C6, 0x75BE, 0x79E9, 0x7A92, 0x81A3, 0x86ED, 0x8CEA, 0x8DCC,
+ 0x8FED, 0x659F, 0x6715, 0x57F7, 0x6F57, 0x7DDD, 0x8F2F, 0x93F6, 0x96C6,
+ 0x5FB5, 0x61F2, 0x6F84, 0x4E14, 0x4F98, 0x501F, 0x53C9, 0x55DF, 0x5D6F,
+ 0x5DEE, 0x6B21, 0x6B64, 0x78CB, 0x7B9A, 0x8E49, 0x8ECA, 0x906E, 0x6349,
+ 0x643E, 0x7740, 0x7A84, 0x932F, 0x947F, 0x9F6A, 0x64B0, 0x6FAF, 0x71E6,
+ 0x74A8, 0x74DA, 0x7AC4, 0x7C12, 0x7E82, 0x7CB2, 0x7E98, 0x8B9A, 0x8D0A,
+ 0x947D, 0x9910, 0x994C, 0x5239, 0x5BDF, 0x64E6, 0x672D, 0x7D2E, 0x50ED,
+ 0x53C3, 0x5879, 0x6158, 0x6159, 0x61FA, 0x65AC, 0x7AD9, 0x8B92, 0x8B96,
+ 0x5009, 0x5021, 0x5275, 0x5531, 0x5A3C, 0x5EE0, 0x5F70, 0x6134, 0x655E,
+ 0x660C, 0x6636, 0x66A2, 0x69CD, 0x6EC4, 0x6F32, 0x7316, 0x7621, 0x7A93,
+ 0x8139, 0x8259, 0x83D6, 0x84BC, 0x50B5, 0x57F0, 0x5BC0, 0x5BE8, 0x5F69,
+ 0x63A1, 0x7826, 0x7DB5, 0x83DC, 0x8521, 0x91C7, 0x91F5, 0x518A, 0x67F5,
+ 0x7B56, 0x8CAC, 0x51C4, 0x59BB, 0x60BD, 0x8655, 0x501C, 0x5254, 0x5C3A,
+ 0x617D, 0x621A, 0x62D3, 0x64F2, 0x65A5, 0x6ECC, 0x7620, 0x810A, 0x8E60,
+ 0x965F, 0x96BB, 0x4EDF, 0x5343, 0x5598, 0x5929, 0x5DDD, 0x64C5, 0x6CC9,
+ 0x6DFA, 0x7394, 0x7A7F, 0x821B, 0x85A6, 0x8CE4, 0x8E10, 0x9077, 0x91E7,
+ 0x95E1, 0x9621, 0x97C6, 0x51F8, 0x54F2, 0x5586, 0x5FB9, 0x64A4, 0x6F88,
+ 0x7DB4, 0x8F1F, 0x8F4D, 0x9435, 0x50C9, 0x5C16, 0x6CBE, 0x6DFB, 0x751B,
+ 0x77BB, 0x7C3D, 0x7C64, 0x8A79, 0x8AC2, 0x581E, 0x59BE, 0x5E16, 0x6377,
+ 0x7252, 0x758A, 0x776B, 0x8ADC, 0x8CBC, 0x8F12, 0x5EF3, 0x6674, 0x6DF8,
+ 0x807D, 0x83C1, 0x8ACB, 0x9751, 0x9BD6, 0x5243, 0x66FF, 0x6D95, 0x6EEF,
+ 0x7DE0, 0x8AE6, 0x902E, 0x905E, 0x9AD4, 0x521D, 0x527F, 0x54E8, 0x6194,
+ 0x6284, 0x62DB, 0x68A2, 0x6912, 0x695A, 0x6A35, 0x7092, 0x7126, 0x785D,
+ 0x7901, 0x790E, 0x79D2, 0x7A0D, 0x8096, 0x8278, 0x82D5, 0x8349, 0x8549,
+ 0x8C82, 0x8D85, 0x9162, 0x918B, 0x91AE, 0x4FC3, 0x56D1, 0x71ED, 0x77D7,
+ 0x8700, 0x89F8, 0x5BF8, 0x5FD6, 0x6751, 0x90A8, 0x53E2, 0x585A, 0x5BF5,
+ 0x60A4, 0x6181, 0x6460, 0x7E3D, 0x8070, 0x8525, 0x9283, 0x64AE, 0x50AC,
+ 0x5D14, 0x6700, 0x589C, 0x62BD, 0x63A8, 0x690E, 0x6978, 0x6A1E, 0x6E6B,
+ 0x76BA, 0x79CB, 0x82BB, 0x8429, 0x8ACF, 0x8DA8, 0x8FFD, 0x9112, 0x914B,
+ 0x919C, 0x9310, 0x9318, 0x939A, 0x96DB, 0x9A36, 0x9C0D, 0x4E11, 0x755C,
+ 0x795D, 0x7AFA, 0x7B51, 0x7BC9, 0x7E2E, 0x84C4, 0x8E59, 0x8E74, 0x8EF8,
+ 0x9010, 0x6625, 0x693F, 0x7443, 0x51FA, 0x672E, 0x9EDC, 0x5145, 0x5FE0,
+ 0x6C96, 0x87F2, 0x885D, 0x8877, 0x60B4, 0x81B5, 0x8403, 0x8D05, 0x53D6,
+ 0x5439, 0x5634, 0x5A36, 0x5C31, 0x708A, 0x7FE0, 0x805A, 0x8106, 0x81ED,
+ 0x8DA3, 0x9189, 0x9A5F, 0x9DF2, 0x5074, 0x4EC4, 0x53A0, 0x60FB, 0x6E2C,
+ 0x5C64, 0x4F88, 0x5024, 0x55E4, 0x5CD9, 0x5E5F, 0x6065, 0x6894, 0x6CBB,
+ 0x6DC4, 0x71BE, 0x75D4, 0x75F4, 0x7661, 0x7A1A, 0x7A49, 0x7DC7, 0x7DFB,
+ 0x7F6E, 0x81F4, 0x86A9, 0x8F1C, 0x96C9, 0x99B3, 0x9F52, 0x5247, 0x52C5,
+ 0x98ED, 0x89AA, 0x4E03, 0x67D2, 0x6F06, 0x4FB5, 0x5BE2, 0x6795, 0x6C88,
+ 0x6D78, 0x741B, 0x7827, 0x91DD, 0x937C, 0x87C4, 0x79E4, 0x7A31, 0x5FEB,
+ 0x4ED6, 0x54A4, 0x553E, 0x58AE, 0x59A5, 0x60F0, 0x6253, 0x62D6, 0x6736,
+ 0x6955, 0x8235, 0x9640, 0x99B1, 0x99DD, 0x502C, 0x5353, 0x5544, 0x577C,
+ 0x6258, 0x64E2, 0x666B, 0x67DD, 0x6FC1, 0x6FEF, 0x7422, 0x7438, 0x8A17,
+ 0x9438, 0x5451, 0x5606, 0x5766, 0x5F48, 0x619A, 0x6B4E, 0x7058, 0x70AD,
+ 0x7DBB, 0x8A95, 0x596A, 0x812B, 0x63A2, 0x7708, 0x803D, 0x8CAA, 0x5854,
+ 0x642D, 0x69BB, 0x5B95, 0x5E11, 0x6E6F, 0x8569, 0x514C, 0x53F0, 0x592A,
+ 0x6020, 0x614B, 0x6B86, 0x6C70, 0x6CF0, 0x7B1E, 0x80CE, 0x82D4, 0x8DC6,
+ 0x90B0, 0x98B1, 0x64C7, 0x6FA4, 0x6491, 0x6504, 0x514E, 0x5410, 0x571F,
+ 0x8A0E, 0x615F, 0x6876, 0x75DB, 0x7B52, 0x7D71, 0x901A, 0x5806, 0x69CC,
+ 0x817F, 0x892A, 0x9000, 0x9839, 0x5078, 0x5957, 0x59AC, 0x6295, 0x900F,
+ 0x9B2A, 0x615D, 0x7279, 0x95D6, 0x5761, 0x5A46, 0x5DF4, 0x628A, 0x64AD,
+ 0x64FA, 0x6777, 0x6CE2, 0x6D3E, 0x722C, 0x7436, 0x7834, 0x7F77, 0x82AD,
+ 0x8DDB, 0x9817, 0x5224, 0x5742, 0x677F, 0x7248, 0x74E3, 0x8CA9, 0x8FA6,
+ 0x9211, 0x962A, 0x516B, 0x53ED, 0x634C, 0x4F69, 0x5504, 0x6096, 0x6557,
+ 0x6C9B, 0x6D7F, 0x724C, 0x72FD, 0x7A17, 0x8987, 0x8C9D, 0x5F6D, 0x6F8E,
+ 0x70F9, 0x81A8, 0x610E, 0x4FBF, 0x504F, 0x6241, 0x7247, 0x7BC7, 0x7DE8,
+ 0x7FE9, 0x904D, 0x97AD, 0x9A19, 0x8CB6, 0x576A, 0x5E73, 0x67B0, 0x840D,
+ 0x8A55, 0x5420, 0x5B16, 0x5E63, 0x5EE2, 0x5F0A, 0x6583, 0x80BA, 0x853D,
+ 0x9589, 0x965B, 0x4F48, 0x5305, 0x530D, 0x530F, 0x5486, 0x54FA, 0x5703,
+ 0x5E03, 0x6016, 0x629B, 0x62B1, 0x6355, 0x6CE1, 0x6D66, 0x75B1, 0x7832,
+ 0x80DE, 0x812F, 0x82DE, 0x8461, 0x84B2, 0x888D, 0x8912, 0x900B, 0x92EA,
+ 0x98FD, 0x9B91, 0x5E45, 0x66B4, 0x66DD, 0x7011, 0x7206, 0x4FF5, 0x527D,
+ 0x5F6A, 0x6153, 0x6753, 0x6A19, 0x6F02, 0x74E2, 0x7968, 0x8868, 0x8C79,
+ 0x98C7, 0x98C4, 0x9A43, 0x54C1, 0x7A1F, 0x6953, 0x8AF7, 0x8C4A, 0x98A8,
+ 0x99AE, 0x5F7C, 0x62AB, 0x75B2, 0x76AE, 0x88AB, 0x907F, 0x9642, 0x5339,
+ 0x5F3C, 0x5FC5, 0x6CCC, 0x73CC, 0x7562, 0x758B, 0x7B46, 0x82FE, 0x999D,
+ 0x4E4F, 0x903C, 0x4E0B, 0x4F55, 0x53A6, 0x590F, 0x5EC8, 0x6630, 0x6CB3,
+ 0x7455, 0x8377, 0x8766, 0x8CC0, 0x9050, 0x971E, 0x9C15, 0x58D1, 0x5B78,
+ 0x8650, 0x8B14, 0x9DB4, 0x5BD2, 0x6068, 0x608D, 0x65F1, 0x6C57, 0x6F22,
+ 0x6FA3, 0x701A, 0x7F55, 0x7FF0, 0x9591, 0x9592, 0x9650, 0x97D3, 0x5272,
+ 0x8F44, 0x51FD, 0x542B, 0x54B8, 0x5563, 0x558A, 0x6ABB, 0x6DB5, 0x7DD8,
+ 0x8266, 0x929C, 0x9677, 0x9E79, 0x5408, 0x54C8, 0x76D2, 0x86E4, 0x95A4,
+ 0x95D4, 0x965C, 0x4EA2, 0x4F09, 0x59EE, 0x5AE6, 0x5DF7, 0x6052, 0x6297,
+ 0x676D, 0x6841, 0x6C86, 0x6E2F, 0x7F38, 0x809B, 0x822A, 0x9805, 0x4EA5,
+ 0x5055, 0x54B3, 0x5793, 0x595A, 0x5B69, 0x5BB3, 0x61C8, 0x6977, 0x6D77,
+ 0x7023, 0x87F9, 0x89E3, 0x8A72, 0x8AE7, 0x9082, 0x99ED, 0x9AB8, 0x52BE,
+ 0x6838, 0x5016, 0x5E78, 0x674F, 0x8347, 0x884C, 0x4EAB, 0x5411, 0x56AE,
+ 0x73E6, 0x9115, 0x97FF, 0x9909, 0x9957, 0x9999, 0x5653, 0x589F, 0x865B,
+ 0x8A31, 0x61B2, 0x6AF6, 0x737B, 0x8ED2, 0x6B47, 0x96AA, 0x9A57, 0x5955,
+ 0x7200, 0x8D6B, 0x9769, 0x4FD4, 0x5CF4, 0x5F26, 0x61F8, 0x665B, 0x6CEB,
+ 0x70AB, 0x7384, 0x73B9, 0x73FE, 0x7729, 0x774D, 0x7D43, 0x7D62, 0x7E23,
+ 0x8237, 0x8852, 0x8CE2, 0x9249, 0x986F, 0x5B51, 0x7A74, 0x8840, 0x9801,
+ 0x5ACC, 0x4FE0, 0x5354, 0x593E, 0x5CFD, 0x633E, 0x6D79, 0x72F9, 0x8105,
+ 0x8107, 0x83A2, 0x92CF, 0x9830, 0x4EA8, 0x5144, 0x5211, 0x578B, 0x5F62,
+ 0x6CC2, 0x6ECE, 0x7005, 0x7050, 0x70AF, 0x7192, 0x73E9, 0x7469, 0x834A,
+ 0x87A2, 0x8861, 0x9008, 0x90A2, 0x93A3, 0x99A8, 0x516E, 0x5F57, 0x60E0,
+ 0x6167, 0x66B3, 0x8559, 0x8E4A, 0x91AF, 0x978B, 0x4E4E, 0x4E92, 0x547C,
+ 0x58D5, 0x58FA, 0x597D, 0x5CB5, 0x5F27, 0x6236, 0x6248, 0x660A, 0x6667,
+ 0x6BEB, 0x6D69, 0x6DCF, 0x6E56, 0x6EF8, 0x6F94, 0x6FE0, 0x6FE9, 0x705D,
+ 0x72D0, 0x7425, 0x745A, 0x74E0, 0x7693, 0x795C, 0x7CCA, 0x7E1E, 0x80E1,
+ 0x82A6, 0x846B, 0x84BF, 0x864E, 0x865F, 0x8774, 0x8B77, 0x8C6A, 0x93AC,
+ 0x9800, 0x9865, 0x60D1, 0x6216, 0x9177, 0x5A5A, 0x660F, 0x6DF7, 0x6E3E,
+ 0x743F, 0x9B42, 0x5FFD, 0x60DA, 0x7B0F, 0x54C4, 0x5F18, 0x6C5E, 0x6CD3,
+ 0x6D2A, 0x70D8, 0x7D05, 0x8679, 0x8A0C, 0x9D3B, 0x5316, 0x548C, 0x5B05,
+ 0x6A3A, 0x706B, 0x7575, 0x798D, 0x79BE, 0x82B1, 0x83EF, 0x8A71, 0x8B41,
+ 0x8CA8, 0x9774, 0x64F4, 0x652B, 0x78BA, 0x78BB, 0x7A6B, 0x4E38, 0x559A,
+ 0x5950, 0x5BA6, 0x5E7B, 0x60A3, 0x63DB, 0x6B61, 0x6665, 0x6853, 0x6E19,
+ 0x7165, 0x74B0, 0x7D08, 0x9084, 0x9A69, 0x9C25, 0x6D3B, 0x6ED1, 0x733E,
+ 0x8C41, 0x95CA, 0x51F0, 0x5E4C, 0x5FA8, 0x604D, 0x60F6, 0x6130, 0x614C,
+ 0x6643, 0x6644, 0x69A5, 0x6CC1, 0x6E5F, 0x6EC9, 0x6F62, 0x714C, 0x749C,
+ 0x7687, 0x7BC1, 0x7C27, 0x8352, 0x8757, 0x9051, 0x968D, 0x9EC3, 0x532F,
+ 0x56DE, 0x5EFB, 0x5F8A, 0x6062, 0x6094, 0x61F7, 0x6666, 0x6703, 0x6A9C,
+ 0x6DEE, 0x6FAE, 0x7070, 0x736A, 0x7E6A, 0x81BE, 0x8334, 0x86D4, 0x8AA8,
+ 0x8CC4, 0x5283, 0x7372, 0x5B96, 0x6A6B, 0x9404, 0x54EE, 0x5686, 0x5B5D,
+ 0x6548, 0x6585, 0x66C9, 0x689F, 0x6D8D, 0x6DC6, 0x723B, 0x80B4, 0x9175,
+ 0x9A4D, 0x4FAF, 0x5019, 0x539A, 0x540E, 0x543C, 0x5589, 0x55C5, 0x5E3F,
+ 0x5F8C, 0x673D, 0x7166, 0x73DD, 0x9005, 0x52DB, 0x52F3, 0x5864, 0x58CE,
+ 0x7104, 0x718F, 0x71FB, 0x85B0, 0x8A13, 0x6688, 0x85A8, 0x55A7, 0x6684,
+ 0x714A, 0x8431, 0x5349, 0x5599, 0x6BC1, 0x5F59, 0x5FBD, 0x63EE, 0x6689,
+ 0x7147, 0x8AF1, 0x8F1D, 0x9EBE, 0x4F11, 0x643A, 0x70CB, 0x7566, 0x8667,
+ 0x6064, 0x8B4E, 0x9DF8, 0x5147, 0x51F6, 0x5308, 0x6D36, 0x80F8, 0x9ED1,
+ 0x6615, 0x6B23, 0x7098, 0x75D5, 0x5403, 0x5C79, 0x7D07, 0x8A16, 0x6B20,
+ 0x6B3D, 0x6B46, 0x5438, 0x6070, 0x6D3D, 0x7FD5, 0x8208, 0x50D6, 0x51DE,
+ 0x559C, 0x566B, 0x56CD, 0x59EC, 0x5B09, 0x5E0C, 0x6199, 0x6198, 0x6231,
+ 0x665E, 0x66E6, 0x7199, 0x71B9, 0x71BA, 0x72A7, 0x79A7, 0x7A00, 0x7FB2,
+ 0x8A70, 0x3001, 0x3002, 0x2025, 0x00AD, 0x2015, 0x2225, 0xFF5E, 0x3014,
+ 0x3015, 0x3008, 0x3009, 0x300A, 0x300B, 0x300C, 0x300D, 0x300E, 0x300F,
+ 0x3010, 0x3011, 0x3013, 0xFF01, 0xFF08, 0xFF09, 0xFF0C, 0xFF0E, 0xFF1A,
+ 0xFF1B, 0xFF1C, 0xFF1D, 0xFF1E, 0xFF1F, 0xFF3B, 0xFF3D, 0xFF3F, 0xFF5B,
+ 0xFF5C, 0xFF5D, 0xFF5E, 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, 0x203E, 0x007E,
+ 0x005C, 0x231C, 0x231F, 0x0000, 0x0000, 0x0000, 0x0000, 0x300E, 0x300F,
+ 0x300A, 0x300B, 0x3008, 0x3009, 0x0028, 0x0029, 0x0000, 0x0000, 0x0028,
+ 0x0029, 0x0028, 0x0029, 0x0000, 0x0000, 0x0028, 0x0029, 0x0000, 0x0000,
+ 0x3016, 0x3017, 0x3016, 0x3017, 0x3018, 0x3019, 0x005B, 0x005D, 0x0000,
+ 0x0000, 0x263E, 0x263D, 0x2021, 0x2021, 0x2020, 0x2021, 0x0000, 0x2217,
+ 0x0000, 0x0000, 0x201F, 0x201B, 0x02D6, 0x02D7, 0x00D7, 0x221E, 0x0000,
+ 0x00B1, 0x2213, 0x003E, 0x003C, 0x003D, 0x2260, 0x207D, 0x207E, 0x007B,
+ 0x007D, 0x0000, 0x0000, 0x2229, 0x222A, 0x2282, 0x2208, 0x03A3, 0x0021,
+ 0x0000, 0x3021, 0x3022, 0x3023, 0x0000, 0x0000, 0x0000, 0x4E03, 0x0000,
+ 0x0000, 0x5341, 0x0000, 0x0000, 0x0027, 0x3014, 0x3015, 0x002A, 0x0000,
+ 0x2217, 0x002A, 0xCDCD, 0x3001, 0x3002, 0x0028, 0x0029, 0x0028, 0x0029,
+ 0x0028, 0x0029, 0x3016, 0x3017, 0x3010, 0x3011, 0x0000, 0x0000, 0x20DE,
+ 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x005D,
+ 0x005D, 0x005D, 0x005D, 0x005D, 0x005D, 0x005D, 0x005D, 0x005D, 0x005D,
+ 0x005D, 0x00B6, 0x0000, 0x0000, 0x22EF, 0x2237, 0x20DE, 0x20DE, 0x20DE,
+ 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x005D, 0x005D, 0x005D,
+ 0x005D, 0x005D, 0x005D, 0x005D, 0x005D, 0x005D, 0x005D, 0x005D, 0x278A,
+ 0x278B, 0x278C, 0x278D, 0x278E, 0x278F, 0x2790, 0x2791, 0x2792, 0x2793,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0029, 0x0029, 0x0029, 0x0029, 0x0029, 0x0029, 0x0029, 0x0029,
+ 0x0029, 0x0029, 0x0029, 0x0029, 0x0029, 0x0029, 0x0029, 0x0029, 0x0029,
+ 0x0029, 0x0029, 0x0029, 0x0029, 0x0029, 0x0029, 0x0029, 0x0029, 0x0029,
+ 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, 0x20DE,
+ 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x005D,
+ 0x005D, 0x005D, 0x005D, 0x005D, 0x005D, 0x005D, 0x005D, 0x005D, 0x005D,
+ 0x005D, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE,
+ 0x20DE, 0x005D, 0x005D, 0x005D, 0x005D, 0x005D, 0x005D, 0x005D, 0x005D,
+ 0x005D, 0x005D, 0x005D, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x22CF, 0x22CE, 0x22CF,
+ 0x22CE, 0x2280, 0x2281, 0x2270, 0x2271, 0x2272, 0x2273, 0x0000, 0x228A,
+ 0x0000, 0x228B, 0x2276, 0x2277, 0x2279, 0x22DA, 0x22DB, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x2221, 0x2245, 0x2243, 0x2248, 0x0000, 0x22A4, 0x22AB,
+ 0x0000, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE,
+ 0x20DE, 0x20DE, 0x0000, 0x2460, 0x2461, 0x2462, 0x2463, 0x2464, 0x2465,
+ 0x2466, 0x2467, 0x2468, 0x0029, 0x0029, 0x0029, 0x0029, 0x0029, 0x0029,
+ 0x0029, 0x0029, 0x0029, 0x0029, 0x0029, 0x0029, 0x0029, 0x0029, 0x0029,
+ 0x0029, 0x0029, 0x0029, 0x0029, 0x0029, 0x0029, 0x0029, 0x0029, 0x0029,
+ 0x0029, 0x0029, 0x0029, 0x0029, 0x0029, 0x0029, 0x0029, 0x0029, 0x0029,
+ 0x0029, 0x0029, 0x0029, 0x0029, 0x0029, 0x0029, 0x0029, 0x0029, 0x0029,
+ 0x0029, 0x0029, 0x0029, 0x0029, 0x0029, 0x0029, 0x0029, 0x0029, 0x0029,
+ 0x0029, 0x0021, 0x00B0, 0x0027, 0x0022, 0x2034, 0x0029, 0x0029, 0x0029,
+ 0x0029, 0x0000, 0x0000, 0x2020, 0x2020, 0x2021, 0x2020, 0x00A7, 0x0023,
+ 0x002A, 0x002A, 0x0000, 0x0000, 0x2042, 0x002A, 0x0000, 0x0000, 0x2042,
+ 0x002A, 0x0000, 0x0000, 0x2022, 0x20DF, 0x20DF, 0x0000, 0x20DF, 0x3008,
+ 0x3009, 0x300A, 0x300B, 0x261C, 0x261E, 0x0000, 0x0000, 0x20DE, 0x0000,
+ 0x20DE, 0x20DE, 0x0000, 0x0000, 0x0000, 0x0000, 0x20DD, 0x20DD, 0x271A,
+ 0x2716, 0x0000, 0x25EF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x25CC,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x20A9, 0x0000, 0x0000, 0x262F, 0x0000, 0x262F,
+ 0x262F, 0x0000, 0x0000, 0x0000, 0x3020, 0x0000, 0x2776, 0x2777, 0x2778,
+ 0x2779, 0x277A, 0x277B, 0x277C, 0x277D, 0x277E, 0x277F, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0029,
+ 0x0029, 0x0029, 0x0029, 0x0029, 0x0029, 0x2642, 0x22A9, 0x3036, 0x25CB,
+ 0x25D3, 0x25A1, 0x2302, 0x0000, 0x25AD, 0x25AD, 0x0000, 0x0000, 0x0000,
+ 0x25C7, 0x0000, 0x0000, 0x2206, 0x22BF, 0x231E, 0x0000, 0x2225, 0x2226,
+ 0x0000, 0x2253, 0x2251, 0x2266, 0x2267, 0x2213, 0x2295, 0x2296, 0x2297,
+ 0x20DD, 0x2314, 0x0000, 0x0000, 0x2262, 0x0000, 0x25B1, 0x0000, 0x2222,
+ 0x2250, 0x00D8, 0x234A, 0x22A3, 0x0338, 0x0000, 0x226E, 0x226F, 0x2285,
+ 0x2284, 0x2209, 0x220C, 0x22BB, 0x0016, 0x225A, 0x2306, 0x0024, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x329E, 0x0000, 0x203C, 0x003F, 0x0000,
+ 0x003F, 0x22C4, 0x25C7, 0x22C4, 0x25C6, 0x25AB, 0x25A1, 0x25AB, 0x25A0,
+ 0x25E6, 0x25CB, 0x25E6, 0x25CF, 0x25BD, 0x25B3, 0x25B7, 0x25C1, 0x2726,
+ 0x25CF, 0x25A0, 0x0000, 0x25CA, 0x3231, 0x3239, 0x33CB, 0x2483, 0x2494,
+ 0x2495, 0x2496, 0x2497, 0x0029, 0x0029, 0x0029, 0x0029, 0x0029, 0x0029,
+ 0x0029, 0x0029, 0x0029, 0x0029, 0x2192, 0x2190, 0x2191, 0x2193, 0x2196,
+ 0x2197, 0x2198, 0x2199, 0x21D0, 0x21CF, 0x21CD, 0x21D4, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2794, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x279C,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x27BA, 0x0000, 0x0000, 0x0000, 0x0000, 0x21D1, 0x21D3,
+ 0x0000, 0x279E, 0x0000, 0x0000, 0x0000, 0x279E, 0x0000, 0x0000, 0x21B5,
+ 0x21B1, 0x0000, 0x21B4, 0x21B0, 0x21B3, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x21E6, 0x21E8, 0x21E7,
+ 0x21E9, 0x21BC, 0x21C0, 0x0000, 0x0000, 0x0000, 0x0000, 0x21C0, 0x21BC,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x21C4, 0x21C5, 0x002E, 0x002E, 0x002E,
+ 0x002E, 0x002E, 0x002E, 0x002E, 0x002E, 0x002E, 0x002E, 0x002E, 0x002E,
+ 0x002E, 0x002E, 0x002E, 0x002E, 0x002E, 0x002E, 0x002E, 0x002E, 0x002E,
+ 0x002E, 0x002E, 0x002E, 0x002E, 0x002E, 0x002E, 0x002E, 0x002E, 0x002E,
+ 0x002E, 0x002E, 0x002E, 0x002E, 0x002E, 0x002E, 0x002E, 0x002E, 0x002E,
+ 0x002E, 0x002E, 0x002E, 0x002E, 0x002E, 0x002E, 0x002E, 0x002E, 0x002E,
+ 0x002E, 0x002E, 0x002E, 0x002E, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE,
+ 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE,
+ 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE,
+ 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE,
+ 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE,
+ 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE,
+ 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE,
+ 0x20DE, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD,
+ 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD,
+ 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD,
+ 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x2483, 0x2484, 0x2485,
+ 0x2486, 0x2487, 0x0029, 0x0029, 0x0029, 0x0029, 0x0029, 0x0029, 0x20DD,
+ 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD,
+ 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD,
+ 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x3294,
+ 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD,
+ 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x32A5, 0x20DD, 0x20DD,
+ 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD,
+ 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD,
+ 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD,
+ 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD,
+ 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD,
+ 0x20DD, 0x0029, 0x0029, 0x0029, 0x0029, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2794, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x21E0, 0x21E1, 0x21E2, 0x21E3, 0x0000, 0x27A1, 0x0000, 0x0000,
+ 0x21E6, 0x21E8, 0x21E7, 0x21E9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x261D, 0x261F, 0x0000,
+ 0x0000, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DD, 0x20DE,
+ 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x005D,
+ 0x005D, 0x005D, 0x005D, 0x005D, 0x005D, 0x005D, 0x005D, 0x005D, 0x005D,
+ 0x005D, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE,
+ 0x20DE, 0x20DE, 0x005D, 0x005D, 0x005D, 0x005D, 0x005D, 0x005D, 0x005D,
+ 0x005D, 0x005D, 0x005D, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE,
+ 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x005D, 0x005D, 0x005D, 0x005D, 0x005D,
+ 0x005D, 0x005D, 0x005D, 0x005D, 0x005D, 0x20DE, 0x20DE, 0x20DE, 0x20DE,
+ 0x20DE, 0x20DE, 0x20DE, 0x3290, 0x328A, 0x328B, 0x328C, 0x328D, 0x328E,
+ 0x328F, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x20DE, 0x300C,
+ 0x300D, 0x300E, 0x300F, 0x21E8, 0x21E6, 0x21E7, 0x21E9, 0x0022, 0x301F,
+ 0x301D, 0x2036, 0x0060, 0x3001, 0x0000, 0x0021, 0x3021, 0x002C, 0x3002,
+ 0xAC02, 0xAC03, 0xAC05, 0xAC06, 0xAC0B, 0xAC0C, 0xAC0D, 0xAC0E, 0xAC0F,
+ 0xAC18, 0xAC1E, 0xAC1F, 0xAC21, 0xAC22, 0xAC23, 0xAC25, 0xAC26, 0xAC27,
+ 0xAC28, 0xAC29, 0xAC2A, 0xAC2B, 0xAC2E, 0xAC32, 0xAC33, 0xAC34, 0xAC35,
+ 0xAC36, 0xAC37, 0xAC3A, 0xAC3B, 0xAC3D, 0xAC3E, 0xAC3F, 0xAC41, 0xAC42,
+ 0xAC43, 0xAC44, 0xAC45, 0xAC46, 0xAC47, 0xAC48, 0xAC49, 0xAC4A, 0xAC4C,
+ 0xAC4E, 0xAC4F, 0xAC50, 0xAC51, 0xAC52, 0xAC53, 0xAC55, 0xAC56, 0xAC57,
+ 0xAC59, 0xAC5A, 0xAC5B, 0xAC5D, 0xAC5E, 0xAC5F, 0xAC60, 0xAC61, 0xAC62,
+ 0xAC63, 0xAC64, 0xAC65, 0xAC66, 0xAC67, 0xAC68, 0xAC69, 0xAC6A, 0xAC6B,
+ 0xAC6C, 0xAC6D, 0xAC6E, 0xAC6F, 0xAC72, 0xAC73, 0xAC75, 0xAC76, 0xAC79,
+ 0xAC7B, 0xAC7C, 0xAC7D, 0xAC7E, 0xAC7F, 0xAC82, 0xAC87, 0xAC88, 0xAC8D,
+ 0xAC8E, 0xAC8F, 0xAC91, 0xAC92, 0xAC93, 0xAC95, 0xAC96, 0xAC97, 0xAC98,
+ 0xAC99, 0xAC9A, 0xAC9B, 0xAC9E, 0xACA2, 0xACA3, 0xACA4, 0xACA5, 0xACA6,
+ 0xACA7, 0xACAB, 0xACAD, 0xACAE, 0xACB1, 0xACB2, 0xACB3, 0xACB4, 0xACB5,
+ 0xACB6, 0xACB7, 0xACBA, 0xACBE, 0xACBF, 0xACC0, 0xACC2, 0xACC3, 0xACC5,
+ 0xACC6, 0xACC7, 0xACC9, 0xACCA, 0xACCB, 0xACCD, 0xACCE, 0xACCF, 0xACD0,
+ 0xACD1, 0xACD2, 0xACD3, 0xACD4, 0xACD6, 0xACD8, 0xACD9, 0xACDA, 0xACDB,
+ 0xACDC, 0xACDD, 0xACDE, 0xACDF, 0xACE2, 0xACE3, 0xACE5, 0xACE6, 0xACE9,
+ 0xACEB, 0xACED, 0xACEE, 0xACF2, 0xACF4, 0xACF7, 0xACF8, 0xACF9, 0xACFA,
+ 0xACFB, 0xACFE, 0xACFF, 0xAD01, 0xAD02, 0xAD03, 0xAD05, 0xAD07, 0xAD08,
+ 0xAD09, 0xAD0A, 0xAD0B, 0xAD0E, 0xAD10, 0xAD12, 0xAD13, 0xAD14, 0xAD15,
+ 0xAD16, 0xAD17, 0xAD19, 0xAD1A, 0xAD1B, 0xAD1D, 0xAD1E, 0xAD1F, 0xAD21,
+ 0xAD22, 0xAD23, 0xAD24, 0xAD25, 0xAD26, 0xAD27, 0xAD28, 0xAD2A, 0xAD2B,
+ 0xAD2E, 0xAD2F, 0xAD30, 0xAD31, 0xAD32, 0xAD33, 0xAD36, 0xAD37, 0xAD39,
+ 0xAD3A, 0xAD3B, 0xAD3D, 0xAD3E, 0xAD3F, 0xAD40, 0xAD41, 0xAD42, 0xAD43,
+ 0xAD46, 0xAD48, 0xAD4A, 0xAD4B, 0xAD4C, 0xAD4D, 0xAD4E, 0xAD4F, 0xAD51,
+ 0xAD52, 0xAD53, 0xAD55, 0xAD56, 0xAD57, 0xAD59, 0xAD5A, 0xAD5B, 0xAD5C,
+ 0xAD5D, 0xAD5E, 0xAD5F, 0xAD60, 0xAD62, 0xAD64, 0xAD65, 0xAD66, 0xAD67,
+ 0xAD68, 0xAD69, 0xAD6A, 0xAD6B, 0xAD6E, 0xAD6F, 0xAD71, 0xAD72, 0xAD77,
+ 0xAD78, 0xAD79, 0xAD7A, 0xAD7E, 0xAD80, 0xAD83, 0xAD84, 0xAD85, 0xAD86,
+ 0xAD87, 0xAD8A, 0xAD8B, 0xAD8D, 0xAD8E, 0xAD8F, 0xAD91, 0xAD92, 0xAD93,
+ 0xAD94, 0xAD95, 0xAD96, 0xAD97, 0xAD98, 0xAD99, 0xAD9A, 0xAD9B, 0xAD9E,
+ 0xAD9F, 0xADA0, 0xADA1, 0xADA2, 0xADA3, 0xADA5, 0xADA6, 0xADA7, 0xADA8,
+ 0xADA9, 0xADAA, 0xADAB, 0xADAC, 0xADAD, 0xADAE, 0xADAF, 0xADB0, 0xADB1,
+ 0xADB2, 0xADB3, 0xADB4, 0xADB5, 0xADB6, 0xADB8, 0xADB9, 0xADBA, 0xADBB,
+ 0xADBC, 0xADBD, 0xADBE, 0xADBF, 0xADC2, 0xADC3, 0xADC5, 0xADC6, 0xADC7,
+ 0xADC9, 0xADCA, 0xADCB, 0xADCC, 0xADCD, 0xADCE, 0xADCF, 0xADD2, 0xADD4,
+ 0xADD5, 0xADD6, 0xADD7, 0xADD8, 0xADD9, 0xADDA, 0xADDB, 0xADDD, 0xADDE,
+ 0xADDF, 0xADE1, 0xADE2, 0xADE3, 0xADE5, 0xADE6, 0xADE7, 0xADE8, 0xADE9,
+ 0xADEA, 0xADEB, 0xADEC, 0xADED, 0xADEE, 0xADEF, 0xADF0, 0xADF1, 0xADF2,
+ 0xADF3, 0xADF4, 0xADF5, 0xADF6, 0xADF7, 0xADFA, 0xADFB, 0xADFD, 0xADFE,
+ 0xAE02, 0xAE03, 0xAE04, 0xAE05, 0xAE06, 0xAE07, 0xAE0A, 0xAE0C, 0xAE0E,
+ 0xAE0F, 0xAE10, 0xAE11, 0xAE12, 0xAE13, 0xAE15, 0xAE16, 0xAE17, 0xAE18,
+ 0xAE19, 0xAE1A, 0xAE1B, 0xAE1C, 0xAE1D, 0xAE1E, 0xAE1F, 0xAE20, 0xAE21,
+ 0xAE22, 0xAE23, 0xAE24, 0xAE25, 0xAE26, 0xAE27, 0xAE28, 0xAE29, 0xAE2A,
+ 0xAE2B, 0xAE2C, 0xAE2D, 0xAE2E, 0xAE2F, 0xAE32, 0xAE33, 0xAE35, 0xAE36,
+ 0xAE39, 0xAE3B, 0xAE3C, 0xAE3D, 0xAE3E, 0xAE3F, 0xAE42, 0xAE44, 0xAE47,
+ 0xAE48, 0xAE49, 0xAE4B, 0xAE4F, 0xAE51, 0xAE52, 0xAE53, 0xAE55, 0xAE57,
+ 0xAE58, 0xAE59, 0xAE5A, 0xAE5B, 0xAE5E, 0xAE62, 0xAE63, 0xAE64, 0xAE66,
+ 0xAE67, 0xAE6A, 0xAE6B, 0xAE6D, 0xAE6E, 0xAE6F, 0xAE71, 0xAE72, 0xAE73,
+ 0xAE74, 0xAE75, 0xAE76, 0xAE77, 0xAE7A, 0xAE7E, 0xAE7F, 0xAE80, 0xAE81,
+ 0xAE82, 0xAE83, 0xAE86, 0xAE87, 0xAE88, 0xAE89, 0xAE8A, 0xAE8B, 0xAE8D,
+ 0xAE8E, 0xAE8F, 0xAE90, 0xAE91, 0xAE92, 0xAE93, 0xAE94, 0xAE95, 0xAE96,
+ 0xAE97, 0xAE98, 0xAE99, 0xAE9A, 0xAE9B, 0xAE9C, 0xAE9D, 0xAE9E, 0xAE9F,
+ 0xAEA0, 0xAEA1, 0xAEA2, 0xAEA3, 0xAEA4, 0xAEA5, 0xAEA6, 0xAEA7, 0xAEA8,
+ 0xAEA9, 0xAEAA, 0xAEAB, 0xAEAC, 0xAEAD, 0xAEAE, 0xAEAF, 0xAEB0, 0xAEB1,
+ 0xAEB2, 0xAEB3, 0xAEB4, 0xAEB5, 0xAEB6, 0xAEB7, 0xAEB8, 0xAEB9, 0xAEBA,
+ 0xAEBB, 0xAEBF, 0xAEC1, 0xAEC2, 0xAEC3, 0xAEC5, 0xAEC6, 0xAEC7, 0xAEC8,
+ 0xAEC9, 0xAECA, 0xAECB, 0xAECE, 0xAED2, 0xAED3, 0xAED4, 0xAED5, 0xAED6,
+ 0xAED7, 0xAEDA, 0xAEDB, 0xAEDD, 0xAEDE, 0xAEDF, 0xAEE0, 0xAEE1, 0xAEE2,
+ 0xAEE3, 0xAEE4, 0xAEE5, 0xAEE6, 0xAEE7, 0xAEE9, 0xAEEA, 0xAEEC, 0xAEEE,
+ 0xAEEF, 0xAEF0, 0xAEF1, 0xAEF2, 0xAEF3, 0xAEF5, 0xAEF6, 0xAEF7, 0xAEF9,
+ 0xAEFA, 0xAEFB, 0xAEFD, 0xAEFE, 0xAEFF, 0xAF00, 0xAF01, 0xAF02, 0xAF03,
+ 0xAF04, 0xAF05, 0xAF06, 0xAF09, 0xAF0A, 0xAF0B, 0xAF0C, 0xAF0E, 0xAF0F,
+ 0xAF11, 0xAF12, 0xAF13, 0xAF14, 0xAF15, 0xAF16, 0xAF17, 0xAF18, 0xAF19,
+ 0xAF1A, 0xAF1B, 0xAF1C, 0xAF1D, 0xAF1E, 0xAF1F, 0xAF20, 0xAF21, 0xAF22,
+ 0xAF23, 0xAF24, 0xAF25, 0xAF26, 0xAF27, 0xAF28, 0xAF29, 0xAF2A, 0xAF2B,
+ 0xAF2E, 0xAF2F, 0xAF31, 0xAF33, 0xAF35, 0xAF36, 0xAF37, 0xAF38, 0xAF39,
+ 0xAF3A, 0xAF3B, 0xAF3E, 0xAF40, 0xAF44, 0xAF45, 0xAF46, 0xAF47, 0xAF4A,
+ 0xAF4B, 0xAF4C, 0xAF4D, 0xAF4E, 0xAF4F, 0xAF51, 0xAF52, 0xAF53, 0xAF54,
+ 0xAF55, 0xAF56, 0xAF57, 0xAF58, 0xAF59, 0xAF5A, 0xAF5B, 0xAF5E, 0xAF5F,
+ 0xAF60, 0xAF61, 0xAF62, 0xAF63, 0xAF66, 0xAF67, 0xAF68, 0xAF69, 0xAF6A,
+ 0xAF6B, 0xAF6C, 0xAF6D, 0xAF6E, 0xAF6F, 0xAF70, 0xAF71, 0xAF72, 0xAF73,
+ 0xAF74, 0xAF75, 0xAF76, 0xAF77, 0xAF78, 0xAF7A, 0xAF7B, 0xAF7C, 0xAF7D,
+ 0xAF7E, 0xAF7F, 0xAF81, 0xAF82, 0xAF83, 0xAF85, 0xAF86, 0xAF87, 0xAF89,
+ 0xAF8A, 0xAF8B, 0xAF8C, 0xAF8D, 0xAF8E, 0xAF8F, 0xAF92, 0xAF93, 0xAF94,
+ 0xAF96, 0xAF97, 0xAF98, 0xAF99, 0xAF9A, 0xAF9B, 0xAF9D, 0xAF9E, 0xAF9F,
+ 0xAFA0, 0xAFA1, 0xAFA2, 0xAFA3, 0xAFA4, 0xAFA5, 0xAFA6, 0xAFA7, 0xAFA8,
+ 0xAFA9, 0xAFAA, 0xAFAB, 0xAFAC, 0xAFAD, 0xAFAE, 0xAFAF, 0xAFB0, 0xAFB1,
+ 0xAFB2, 0xAFB3, 0xAFB4, 0xAFB5, 0xAFB6, 0xAFB7, 0xAFBA, 0xAFBB, 0xAFBD,
+ 0xAFBE, 0xAFBF, 0xAFC1, 0xAFC2, 0xAFC3, 0xAFC4, 0xAFC5, 0xAFC6, 0xAFCA,
+ 0xAFCC, 0xAFCF, 0xAFD0, 0xAFD1, 0xAFD2, 0xAFD3, 0xAFD5, 0xAFD6, 0xAFD7,
+ 0xAFD8, 0xAFD9, 0xAFDA, 0xAFDB, 0xAFDD, 0xAFDE, 0xAFDF, 0xAFE0, 0xAFE1,
+ 0xAFE2, 0xAFE3, 0xAFE4, 0xAFE5, 0xAFE6, 0xAFE7, 0xAFEA, 0xAFEB, 0xAFEC,
+ 0xAFED, 0xAFEE, 0xAFEF, 0xAFF2, 0xAFF3, 0xAFF5, 0xAFF6, 0xAFF7, 0xAFF9,
+ 0xAFFA, 0xAFFB, 0xAFFC, 0xAFFD, 0xAFFE, 0xAFFF, 0xB002, 0xB003, 0xB005,
+ 0xB006, 0xB007, 0xB008, 0xB009, 0xB00A, 0xB00B, 0xB00D, 0xB00E, 0xB00F,
+ 0xB011, 0xB012, 0xB013, 0xB015, 0xB016, 0xB017, 0xB018, 0xB019, 0xB01A,
+ 0xB01B, 0xB01E, 0xB01F, 0xB020, 0xB021, 0xB022, 0xB023, 0xB024, 0xB025,
+ 0xB026, 0xB027, 0xB029, 0xB02A, 0xB02B, 0xB02C, 0xB02D, 0xB02E, 0xB02F,
+ 0xB030, 0xB031, 0xB032, 0xB033, 0xB034, 0xB035, 0xB036, 0xB037, 0xB038,
+ 0xB039, 0xB03A, 0xB03B, 0xB03C, 0xB03D, 0xB03E, 0xB03F, 0xB040, 0xB041,
+ 0xB042, 0xB043, 0xB046, 0xB047, 0xB049, 0xB04B, 0xB04D, 0xB04F, 0xB050,
+ 0xB051, 0xB052, 0xB056, 0xB058, 0xB05A, 0xB05B, 0xB05C, 0xB05E, 0xB05F,
+ 0xB060, 0xB061, 0xB062, 0xB063, 0xB064, 0xB065, 0xB066, 0xB067, 0xB068,
+ 0xB069, 0xB06A, 0xB06B, 0xB06C, 0xB06D, 0xB06E, 0xB06F, 0xB070, 0xB071,
+ 0xB072, 0xB073, 0xB074, 0xB075, 0xB076, 0xB077, 0xB078, 0xB079, 0xB07A,
+ 0xB07B, 0xB07E, 0xB07F, 0xB081, 0xB082, 0xB083, 0xB085, 0xB086, 0xB087,
+ 0xB088, 0xB089, 0xB08A, 0xB08B, 0xB08E, 0xB090, 0xB092, 0xB093, 0xB094,
+ 0xB095, 0xB096, 0xB097, 0xB09B, 0xB09D, 0xB09E, 0xB0A3, 0xB0A4, 0xB0A5,
+ 0xB0A6, 0xB0A7, 0xB0AA, 0xB0B0, 0xB0B2, 0xB0B6, 0xB0B7, 0xB0B9, 0xB0BA,
+ 0xB0BB, 0xB0BD, 0xB0BE, 0xB0BF, 0xB0C0, 0xB0C1, 0xB0C2, 0xB0C3, 0xB0C6,
+ 0xB0CA, 0xB0CB, 0xB0CC, 0xB0CD, 0xB0CE, 0xB0CF, 0xB0D2, 0xB0D3, 0xB0D5,
+ 0xB0D6, 0xB0D7, 0xB0D9, 0xB0DA, 0xB0DB, 0xB0DC, 0xB0DD, 0xB0DE, 0xB0DF,
+ 0xB0E1, 0xB0E2, 0xB0E3, 0xB0E4, 0xB0E6, 0xB0E7, 0xB0E8, 0xB0E9, 0xB0EA,
+ 0xB0EB, 0xB0EC, 0xB0ED, 0xB0EE, 0xB0EF, 0xB0F0, 0xB0F1, 0xB0F2, 0xB0F3,
+ 0xB0F4, 0xB0F5, 0xB0F6, 0xB0F7, 0xB0F8, 0xB0F9, 0xB0FA, 0xB0FB, 0xB0FC,
+ 0xB0FD, 0xB0FE, 0xB0FF, 0xB100, 0xB101, 0xB102, 0xB103, 0xB104, 0xB105,
+ 0xB106, 0xB107, 0xB10A, 0xB10D, 0xB10E, 0xB10F, 0xB111, 0xB114, 0xB115,
+ 0xB116, 0xB117, 0xB11A, 0xB11E, 0xB11F, 0xB120, 0xB121, 0xB122, 0xB126,
+ 0xB127, 0xB129, 0xB12A, 0xB12B, 0xB12D, 0xB12E, 0xB12F, 0xB130, 0xB131,
+ 0xB132, 0xB133, 0xB136, 0xB13A, 0xB13B, 0xB13C, 0xB13D, 0xB13E, 0xB13F,
+ 0xB142, 0xB143, 0xB145, 0xB146, 0xB147, 0xB149, 0xB14A, 0xB14B, 0xB14C,
+ 0xB14D, 0xB14E, 0xB14F, 0xB152, 0xB153, 0xB156, 0xB157, 0xB159, 0xB15A,
+ 0xB15B, 0xB15D, 0xB15E, 0xB15F, 0xB161, 0xB162, 0xB163, 0xB164, 0xB165,
+ 0xB166, 0xB167, 0xB168, 0xB169, 0xB16A, 0xB16B, 0xB16C, 0xB16D, 0xB16E,
+ 0xB16F, 0xB170, 0xB171, 0xB172, 0xB173, 0xB174, 0xB175, 0xB176, 0xB177,
+ 0xB17A, 0xB17B, 0xB17D, 0xB17E, 0xB17F, 0xB181, 0xB183, 0xB184, 0xB185,
+ 0xB186, 0xB187, 0xB18A, 0xB18C, 0xB18E, 0xB18F, 0xB190, 0xB191, 0xB195,
+ 0xB196, 0xB197, 0xB199, 0xB19A, 0xB19B, 0xB19D, 0xB19E, 0xB19F, 0xB1A0,
+ 0xB1A1, 0xB1A2, 0xB1A3, 0xB1A4, 0xB1A5, 0xB1A6, 0xB1A7, 0xB1A9, 0xB1AA,
+ 0xB1AB, 0xB1AC, 0xB1AD, 0xB1AE, 0xB1AF, 0xB1B0, 0xB1B1, 0xB1B2, 0xB1B3,
+ 0xB1B4, 0xB1B5, 0xB1B6, 0xB1B7, 0xB1B8, 0xB1B9, 0xB1BA, 0xB1BB, 0xB1BC,
+ 0xB1BD, 0xB1BE, 0xB1BF, 0xB1C0, 0xB1C1, 0xB1C2, 0xB1C3, 0xB1C4, 0xB1C5,
+ 0xB1C6, 0xB1C7, 0xB1C8, 0xB1C9, 0xB1CA, 0xB1CB, 0xB1CD, 0xB1CE, 0xB1CF,
+ 0xB1D1, 0xB1D2, 0xB1D3, 0xB1D5, 0xB1D6, 0xB1D7, 0xB1D8, 0xB1D9, 0xB1DA,
+ 0xB1DB, 0xB1DE, 0xB1E0, 0xB1E1, 0xB1E2, 0xB1E3, 0xB1E4, 0xB1E5, 0xB1E6,
+ 0xB1E7, 0xB1EA, 0xB1EB, 0xB1ED, 0xB1EE, 0xB1EF, 0xB1F1, 0xB1F2, 0xB1F3,
+ 0xB1F4, 0xB1F5, 0xB1F6, 0xB1F7, 0xB1F8, 0xB1FA, 0xB1FC, 0xB1FE, 0xB1FF,
+ 0xB200, 0xB201, 0xB202, 0xB203, 0xB206, 0xB207, 0xB209, 0xB20A, 0xB20D,
+ 0xB20E, 0xB20F, 0xB210, 0xB211, 0xB212, 0xB213, 0xB216, 0xB218, 0xB21A,
+ 0xB21B, 0xB21C, 0xB21D, 0xB21E, 0xB21F, 0xB221, 0xB222, 0xB223, 0xB224,
+ 0xB225, 0xB226, 0xB227, 0xB228, 0xB229, 0xB22A, 0xB22B, 0xB22C, 0xB22D,
+ 0xB22E, 0xB22F, 0xB230, 0xB231, 0xB232, 0xB233, 0xB235, 0xB236, 0xB237,
+ 0xB238, 0xB239, 0xB23A, 0xB23B, 0xB23D, 0xB23E, 0xB23F, 0xB240, 0xB241,
+ 0xB242, 0xB243, 0xB244, 0xB245, 0xB246, 0xB247, 0xB248, 0xB249, 0xB24A,
+ 0xB24B, 0xB24C, 0xB24D, 0xB24E, 0xB24F, 0xB250, 0xB251, 0xB252, 0xB253,
+ 0xB254, 0xB255, 0xB256, 0xB257, 0xB259, 0xB25A, 0xB25B, 0xB25D, 0xB25E,
+ 0xB25F, 0xB261, 0xB262, 0xB263, 0xB264, 0xB265, 0xB266, 0xB267, 0xB26A,
+ 0xB26B, 0xB26C, 0xB26D, 0xB26E, 0xB26F, 0xB270, 0xB271, 0xB272, 0xB273,
+ 0xB276, 0xB277, 0xB278, 0xB279, 0xB27A, 0xB27B, 0xB27D, 0xB27E, 0xB27F,
+ 0xB280, 0xB281, 0xB282, 0xB283, 0xB286, 0xB287, 0xB288, 0xB28A, 0xB28B,
+ 0xB28C, 0xB28D, 0xB28E, 0xB28F, 0xB292, 0xB293, 0xB295, 0xB296, 0xB297,
+ 0xB29B, 0xB29C, 0xB29D, 0xB29E, 0xB29F, 0xB2A2, 0xB2A4, 0xB2A7, 0xB2A8,
+ 0xB2A9, 0xB2AB, 0xB2AD, 0xB2AE, 0xB2AF, 0xB2B1, 0xB2B2, 0xB2B3, 0xB2B5,
+ 0xB2B6, 0xB2B7, 0xB2B8, 0xB2B9, 0xB2BA, 0xB2BB, 0xB2BC, 0xB2BD, 0xB2BE,
+ 0xB2BF, 0xB2C0, 0xB2C1, 0xB2C2, 0xB2C3, 0xB2C4, 0xB2C5, 0xB2C6, 0xB2C7,
+ 0xB2CA, 0xB2CB, 0xB2CD, 0xB2CE, 0xB2CF, 0xB2D1, 0xB2D3, 0xB2D4, 0xB2D5,
+ 0xB2D6, 0xB2D7, 0xB2DA, 0xB2DC, 0xB2DE, 0xB2DF, 0xB2E0, 0xB2E1, 0xB2E3,
+ 0xB2E7, 0xB2E9, 0xB2EA, 0xB2F0, 0xB2F1, 0xB2F2, 0xB2F6, 0xB2FC, 0xB2FD,
+ 0xB2FE, 0xB302, 0xB303, 0xB305, 0xB306, 0xB307, 0xB309, 0xB30A, 0xB30B,
+ 0xB30C, 0xB30D, 0xB30E, 0xB30F, 0xB312, 0xB316, 0xB317, 0xB318, 0xB319,
+ 0xB31A, 0xB31B, 0xB31D, 0xB31E, 0xB31F, 0xB320, 0xB321, 0xB322, 0xB323,
+ 0xB324, 0xB325, 0xB326, 0xB327, 0xB328, 0xB329, 0xB32A, 0xB32B, 0xB32C,
+ 0xB32D, 0xB32E, 0xB32F, 0xB330, 0xB331, 0xB332, 0xB333, 0xB334, 0xB335,
+ 0xB336, 0xB337, 0xB338, 0xB339, 0xB33A, 0xB33B, 0xB33C, 0xB33D, 0xB33E,
+ 0xB33F, 0xB340, 0xB341, 0xB342, 0xB343, 0xB344, 0xB345, 0xB346, 0xB347,
+ 0xB348, 0xB349, 0xB34A, 0xB34B, 0xB34C, 0xB34D, 0xB34E, 0xB34F, 0xB350,
+ 0xB351, 0xB352, 0xB353, 0xB357, 0xB359, 0xB35A, 0xB35D, 0xB360, 0xB361,
+ 0xB362, 0xB363, 0xB366, 0xB368, 0xB36A, 0xB36C, 0xB36D, 0xB36F, 0xB372,
+ 0xB373, 0xB375, 0xB376, 0xB377, 0xB379, 0xB37A, 0xB37B, 0xB37C, 0xB37D,
+ 0xB37E, 0xB37F, 0xB382, 0xB386, 0xB387, 0xB388, 0xB389, 0xB38A, 0xB38B,
+ 0xB38D, 0xB38E, 0xB38F, 0xB391, 0xB392, 0xB393, 0xB395, 0xB396, 0xB397,
+ 0xB398, 0xB399, 0xB39A, 0xB39B, 0xB39C, 0xB39D, 0xB39E, 0xB39F, 0xB3A2,
+ 0xB3A3, 0xB3A4, 0xB3A5, 0xB3A6, 0xB3A7, 0xB3A9, 0xB3AA, 0xB3AB, 0xB3AD,
+ 0xB3AE, 0xB3AF, 0xB3B0, 0xB3B1, 0xB3B2, 0xB3B3, 0xB3B4, 0xB3B5, 0xB3B6,
+ 0xB3B7, 0xB3B8, 0xB3B9, 0xB3BA, 0xB3BB, 0xB3BC, 0xB3BD, 0xB3BE, 0xB3BF,
+ 0xB3C0, 0xB3C1, 0xB3C2, 0xB3C3, 0xB3C6, 0xB3C7, 0xB3C9, 0xB3CA, 0xB3CD,
+ 0xB3CF, 0xB3D1, 0xB3D2, 0xB3D3, 0xB3D6, 0xB3D8, 0xB3DA, 0xB3DC, 0xB3DE,
+ 0xB3DF, 0xB3E1, 0xB3E2, 0xB3E3, 0xB3E5, 0xB3E6, 0xB3E7, 0xB3E9, 0xB3EA,
+ 0xB3EB, 0xB3EC, 0xB3ED, 0xB3EE, 0xB3EF, 0xB3F0, 0xB3F1, 0xB3F2, 0xB3F3,
+ 0xB3F4, 0xB3F5, 0xB3F6, 0xB3F7, 0xB3F8, 0xB3F9, 0xB3FA, 0xB3FB, 0xB3FD,
+ 0xB3FE, 0xB3FF, 0xB400, 0xB401, 0xB402, 0xB403, 0xB404, 0xB405, 0xB406,
+ 0xB407, 0xB408, 0xB409, 0xB40A, 0xB40B, 0xB40C, 0xB40D, 0xB40E, 0xB40F,
+ 0xB411, 0xB412, 0xB413, 0xB414, 0xB415, 0xB416, 0xB417, 0xB419, 0xB41A,
+ 0xB41B, 0xB41D, 0xB41E, 0xB41F, 0xB421, 0xB422, 0xB423, 0xB424, 0xB425,
+ 0xB426, 0xB427, 0xB42A, 0xB42C, 0xB42D, 0xB42E, 0xB42F, 0xB430, 0xB431,
+ 0xB432, 0xB433, 0xB435, 0xB436, 0xB437, 0xB438, 0xB439, 0xB43A, 0xB43B,
+ 0xB43C, 0xB43D, 0xB43E, 0xB43F, 0xB440, 0xB441, 0xB442, 0xB443, 0xB444,
+ 0xB445, 0xB446, 0xB447, 0xB448, 0xB449, 0xB44A, 0xB44B, 0xB44C, 0xB44D,
+ 0xB44E, 0xB44F, 0xB452, 0xB453, 0xB455, 0xB456, 0xB457, 0xB459, 0xB45A,
+ 0xB45B, 0xB45C, 0xB45D, 0xB45E, 0xB45F, 0xB462, 0xB464, 0xB466, 0xB467,
+ 0xB468, 0xB469, 0xB46A, 0xB46B, 0xB46D, 0xB46E, 0xB46F, 0xB470, 0xB471,
+ 0xB472, 0xB473, 0xB474, 0xB475, 0xB476, 0xB477, 0xB478, 0xB479, 0xB47A,
+ 0xB47B, 0xB47C, 0xB47D, 0xB47E, 0xB47F, 0xB481, 0xB482, 0xB483, 0xB484,
+ 0xB485, 0xB486, 0xB487, 0xB489, 0xB48A, 0xB48B, 0xB48C, 0xB48D, 0xB48E,
+ 0xB48F, 0xB490, 0xB491, 0xB492, 0xB493, 0xB494, 0xB495, 0xB496, 0xB497,
+ 0xB498, 0xB499, 0xB49A, 0xB49B, 0xB49C, 0xB49E, 0xB49F, 0xB4A0, 0xB4A1,
+ 0xB4A2, 0xB4A3, 0xB4A5, 0xB4A6, 0xB4A7, 0xB4A9, 0xB4AA, 0xB4AB, 0xB4AD,
+ 0xB4AE, 0xB4AF, 0xB4B0, 0xB4B1, 0xB4B2, 0xB4B3, 0xB4B4, 0xB4B6, 0xB4B8,
+ 0xB4BA, 0xB4BB, 0xB4BC, 0xB4BD, 0xB4BE, 0xB4BF, 0xB4C1, 0xB4C2, 0xB4C3,
+ 0xB4C5, 0xB4C6, 0xB4C7, 0xB4C9, 0xB4CA, 0xB4CB, 0xB4CC, 0xB4CD, 0xB4CE,
+ 0xB4CF, 0xB4D1, 0xB4D2, 0xB4D3, 0xB4D4, 0xB4D6, 0xB4D7, 0xB4D8, 0xB4D9,
+ 0xB4DA, 0xB4DB, 0xB4DE, 0xB4DF, 0xB4E1, 0xB4E2, 0xB4E5, 0xB4E7, 0xB4E8,
+ 0xB4E9, 0xB4EA, 0xB4EB, 0xB4EE, 0xB4F0, 0xB4F2, 0xB4F3, 0xB4F4, 0xB4F5,
+ 0xB4F6, 0xB4F7, 0xB4F9, 0xB4FA, 0xB4FB, 0xB4FC, 0xB4FD, 0xB4FE, 0xB4FF,
+ 0xB500, 0xB501, 0xB502, 0xB503, 0xB504, 0xB505, 0xB506, 0xB507, 0xB508,
+ 0xB509, 0xB50A, 0xB50B, 0xB50C, 0xB50D, 0xB50E, 0xB50F, 0xB510, 0xB511,
+ 0xB512, 0xB513, 0xB516, 0xB517, 0xB519, 0xB51A, 0xB51D, 0xB51E, 0xB51F,
+ 0xB520, 0xB521, 0xB522, 0xB523, 0xB526, 0xB52B, 0xB52C, 0xB52D, 0xB52E,
+ 0xB52F, 0xB532, 0xB533, 0xB535, 0xB536, 0xB537, 0xB539, 0xB53A, 0xB53B,
+ 0xB53C, 0xB53D, 0xB53E, 0xB53F, 0xB542, 0xB546, 0xB547, 0xB548, 0xB549,
+ 0xB54A, 0xB54E, 0xB54F, 0xB551, 0xB552, 0xB553, 0xB555, 0xB556, 0xB557,
+ 0xB558, 0xB559, 0xB55A, 0xB55B, 0xB55E, 0xB562, 0xB563, 0xB564, 0xB565,
+ 0xB566, 0xB567, 0xB568, 0xB569, 0xB56A, 0xB56B, 0xB56C, 0xB56D, 0xB56E,
+ 0xB56F, 0xB570, 0xB571, 0xB572, 0xB573, 0xB574, 0xB575, 0xB576, 0xB577,
+ 0xB578, 0xB579, 0xB57A, 0xB57B, 0xB57C, 0xB57D, 0xB57E, 0xB57F, 0xB580,
+ 0xB581, 0xB582, 0xB583, 0xB584, 0xB585, 0xB586, 0xB587, 0xB588, 0xB589,
+ 0xB58A, 0xB58B, 0xB58C, 0xB58D, 0xB58E, 0xB58F, 0xB590, 0xB591, 0xB592,
+ 0xB593, 0xB594, 0xB595, 0xB596, 0xB597, 0xB598, 0xB599, 0xB59A, 0xB59B,
+ 0xB59C, 0xB59D, 0xB59E, 0xB59F, 0xB5A2, 0xB5A3, 0xB5A5, 0xB5A6, 0xB5A7,
+ 0xB5A9, 0xB5AC, 0xB5AD, 0xB5AE, 0xB5AF, 0xB5B2, 0xB5B6, 0xB5B7, 0xB5B8,
+ 0xB5B9, 0xB5BA, 0xB5BE, 0xB5BF, 0xB5C1, 0xB5C2, 0xB5C3, 0xB5C5, 0xB5C6,
+ 0xB5C7, 0xB5C8, 0xB5C9, 0xB5CA, 0xB5CB, 0xB5CE, 0xB5D2, 0xB5D3, 0xB5D4,
+ 0xB5D5, 0xB5D6, 0xB5D7, 0xB5D9, 0xB5DA, 0xB5DB, 0xB5DC, 0xB5DD, 0xB5DE,
+ 0xB5DF, 0xB5E0, 0xB5E1, 0xB5E2, 0xB5E3, 0xB5E4, 0xB5E5, 0xB5E6, 0xB5E7,
+ 0xB5E8, 0xB5E9, 0xB5EA, 0xB5EB, 0xB5ED, 0xB5EE, 0xB5EF, 0xB5F0, 0xB5F1,
+ 0xB5F2, 0xB5F3, 0xB5F4, 0xB5F5, 0xB5F6, 0xB5F7, 0xB5F8, 0xB5F9, 0xB5FA,
+ 0xB5FB, 0xB5FC, 0xB5FD, 0xB5FE, 0xB5FF, 0xB600, 0xB601, 0xB602, 0xB603,
+ 0xB604, 0xB605, 0xB606, 0xB607, 0xB608, 0xB609, 0xB60A, 0xB60B, 0xB60C,
+ 0xB60D, 0xB60E, 0xB60F, 0xB612, 0xB613, 0xB615, 0xB616, 0xB617, 0xB619,
+ 0xB61A, 0xB61B, 0xB61C, 0xB61D, 0xB61E, 0xB61F, 0xB620, 0xB621, 0xB622,
+ 0xB623, 0xB624, 0xB626, 0xB627, 0xB628, 0xB629, 0xB62A, 0xB62B, 0xB62D,
+ 0xB62E, 0xB62F, 0xB630, 0xB631, 0xB632, 0xB633, 0xB635, 0xB636, 0xB637,
+ 0xB638, 0xB639, 0xB63A, 0xB63B, 0xB63C, 0xB63D, 0xB63E, 0xB63F, 0xB640,
+ 0xB641, 0xB642, 0xB643, 0xB644, 0xB645, 0xB646, 0xB647, 0xB649, 0xB64A,
+ 0xB64B, 0xB64C, 0xB64D, 0xB64E, 0xB64F, 0xB650, 0xB651, 0xB652, 0xB653,
+ 0xB654, 0xB655, 0xB656, 0xB657, 0xB658, 0xB659, 0xB65A, 0xB65B, 0xB65C,
+ 0xB65D, 0xB65E, 0xB65F, 0xB660, 0xB661, 0xB662, 0xB663, 0xB665, 0xB666,
+ 0xB667, 0xB669, 0xB66A, 0xB66B, 0xB66C, 0xB66D, 0xB66E, 0xB66F, 0xB670,
+ 0xB671, 0xB672, 0xB673, 0xB674, 0xB675, 0xB676, 0xB677, 0xB678, 0xB679,
+ 0xB67A, 0xB67B, 0xB67C, 0xB67D, 0xB67E, 0xB67F, 0xB680, 0xB681, 0xB682,
+ 0xB683, 0xB684, 0xB685, 0xB686, 0xB687, 0xB688, 0xB689, 0xB68A, 0xB68B,
+ 0xB68C, 0xB68D, 0xB68E, 0xB68F, 0xB690, 0xB691, 0xB692, 0xB693, 0xB694,
+ 0xB695, 0xB696, 0xB697, 0xB698, 0xB699, 0xB69A, 0xB69B, 0xB69E, 0xB69F,
+ 0xB6A1, 0xB6A2, 0xB6A3, 0xB6A5, 0xB6A6, 0xB6A7, 0xB6A8, 0xB6A9, 0xB6AA,
+ 0xB6AD, 0xB6AE, 0xB6AF, 0xB6B0, 0xB6B2, 0xB6B3, 0xB6B4, 0xB6B5, 0xB6B6,
+ 0xB6B7, 0xB6B8, 0xB6B9, 0xB6BA, 0xB6BB, 0xB6BC, 0xB6BD, 0xB6BE, 0xB6BF,
+ 0xB6C0, 0xB6C1, 0xB6C2, 0xB6C3, 0xB6C4, 0xB6C5, 0xB6C6, 0xB6C7, 0xB6C8,
+ 0xB6C9, 0xB6CA, 0xB6CB, 0xB6CC, 0xB6CD, 0xB6CE, 0xB6CF, 0xB6D0, 0xB6D1,
+ 0xB6D2, 0xB6D3, 0xB6D5, 0xB6D6, 0xB6D7, 0xB6D8, 0xB6D9, 0xB6DA, 0xB6DB,
+ 0xB6DC, 0xB6DD, 0xB6DE, 0xB6DF, 0xB6E0, 0xB6E1, 0xB6E2, 0xB6E3, 0xB6E4,
+ 0xB6E5, 0xB6E6, 0xB6E7, 0xB6E8, 0xB6E9, 0xB6EA, 0xB6EB, 0xB6EC, 0xB6ED,
+ 0xB6EE, 0xB6EF, 0xB6F1, 0xB6F2, 0xB6F3, 0xB6F5, 0xB6F6, 0xB6F7, 0xB6F9,
+ 0xB6FA, 0xB6FB, 0xB6FC, 0xB6FD, 0xB6FE, 0xB6FF, 0xB702, 0xB703, 0xB704,
+ 0xB706, 0xB707, 0xB708, 0xB709, 0xB70A, 0xB70B, 0xB70C, 0xB70D, 0xB70E,
+ 0xB70F, 0xB710, 0xB711, 0xB712, 0xB713, 0xB714, 0xB715, 0xB716, 0xB717,
+ 0xB718, 0xB719, 0xB71A, 0xB71B, 0xB71C, 0xB71D, 0xB71E, 0xB71F, 0xB720,
+ 0xB721, 0xB722, 0xB723, 0xB724, 0xB725, 0xB726, 0xB727, 0xB72A, 0xB72B,
+ 0xB72D, 0xB72E, 0xB731, 0xB732, 0xB733, 0xB734, 0xB735, 0xB736, 0xB737,
+ 0xB73A, 0xB73C, 0xB73D, 0xB73E, 0xB73F, 0xB740, 0xB741, 0xB742, 0xB743,
+ 0xB745, 0xB746, 0xB747, 0xB749, 0xB74A, 0xB74B, 0xB74D, 0xB74E, 0xB74F,
+ 0xB750, 0xB751, 0xB752, 0xB753, 0xB756, 0xB757, 0xB758, 0xB759, 0xB75A,
+ 0xB75B, 0xB75C, 0xB75D, 0xB75E, 0xB75F, 0xB761, 0xB762, 0xB763, 0xB765,
+ 0xB766, 0xB767, 0xB769, 0xB76A, 0xB76B, 0xB76C, 0xB76D, 0xB76E, 0xB76F,
+ 0xB772, 0xB774, 0xB776, 0xB777, 0xB778, 0xB779, 0xB77A, 0xB77B, 0xB77E,
+ 0xB77F, 0xB781, 0xB782, 0xB783, 0xB785, 0xB786, 0xB787, 0xB788, 0xB789,
+ 0xB78A, 0xB78B, 0xB78E, 0xB793, 0xB794, 0xB795, 0xB79A, 0xB79B, 0xB79D,
+ 0xB79E, 0xB79F, 0xB7A1, 0xB7A2, 0xB7A3, 0xB7A4, 0xB7A5, 0xB7A6, 0xB7A7,
+ 0xB7AA, 0xB7AE, 0xB7AF, 0xB7B0, 0xB7B1, 0xB7B2, 0xB7B3, 0xB7B6, 0xB7B7,
+ 0xB7B9, 0xB7BA, 0xB7BB, 0xB7BC, 0xB7BD, 0xB7BE, 0xB7BF, 0xB7C0, 0xB7C1,
+ 0xB7C2, 0xB7C3, 0xB7C4, 0xB7C5, 0xB7C6, 0xB7C8, 0xB7CA, 0xB7CB, 0xB7CC,
+ 0xB7CD, 0xB7CE, 0xB7CF, 0xB7D0, 0xB7D1, 0xB7D2, 0xB7D3, 0xB7D4, 0xB7D5,
+ 0xB7D6, 0xB7D7, 0xB7D8, 0xB7D9, 0xB7DA, 0xB7DB, 0xB7DC, 0xB7DD, 0xB7DE,
+ 0xB7DF, 0xB7E0, 0xB7E1, 0xB7E2, 0xB7E3, 0xB7E4, 0xB7E5, 0xB7E6, 0xB7E7,
+ 0xB7E8, 0xB7E9, 0xB7EA, 0xB7EB, 0xB7EE, 0xB7EF, 0xB7F1, 0xB7F2, 0xB7F3,
+ 0xB7F5, 0xB7F6, 0xB7F7, 0xB7F8, 0xB7F9, 0xB7FA, 0xB7FB, 0xB7FE, 0xB802,
+ 0xB803, 0xB804, 0xB805, 0xB806, 0xB80A, 0xB80B, 0xB80D, 0xB80E, 0xB80F,
+ 0xB811, 0xB812, 0xB813, 0xB814, 0xB815, 0xB816, 0xB817, 0xB81A, 0xB81C,
+ 0xB81E, 0xB81F, 0xB820, 0xB821, 0xB822, 0xB823, 0xB826, 0xB827, 0xB829,
+ 0xB82A, 0xB82B, 0xB82D, 0xB82E, 0xB82F, 0xB830, 0xB831, 0xB832, 0xB833,
+ 0xB836, 0xB83A, 0xB83B, 0xB83C, 0xB83D, 0xB83E, 0xB83F, 0xB841, 0xB842,
+ 0xB843, 0xB845, 0xB846, 0xB847, 0xB848, 0xB849, 0xB84A, 0xB84B, 0xB84C,
+ 0xB84D, 0xB84E, 0xB84F, 0xB850, 0xB852, 0xB854, 0xB855, 0xB856, 0xB857,
+ 0xB858, 0xB859, 0xB85A, 0xB85B, 0xB85E, 0xB85F, 0xB861, 0xB862, 0xB863,
+ 0xB865, 0xB866, 0xB867, 0xB868, 0xB869, 0xB86A, 0xB86B, 0xB86E, 0xB870,
+ 0xB872, 0xB873, 0xB874, 0xB875, 0xB876, 0xB877, 0xB879, 0xB87A, 0xB87B,
+ 0xB87D, 0xB87E, 0xB87F, 0xB880, 0xB881, 0xB882, 0xB883, 0xB884, 0xB885,
+ 0xB886, 0xB887, 0xB888, 0xB889, 0xB88A, 0xB88B, 0xB88C, 0xB88E, 0xB88F,
+ 0xB890, 0xB891, 0xB892, 0xB893, 0xB894, 0xB895, 0xB896, 0xB897, 0xB898,
+ 0xB899, 0xB89A, 0xB89B, 0xB89C, 0xB89D, 0xB89E, 0xB89F, 0xB8A0, 0xB8A1,
+ 0xB8A2, 0xB8A3, 0xB8A4, 0xB8A5, 0xB8A6, 0xB8A7, 0xB8A9, 0xB8AA, 0xB8AB,
+ 0xB8AC, 0xB8AD, 0xB8AE, 0xB8AF, 0xB8B1, 0xB8B2, 0xB8B3, 0xB8B5, 0xB8B6,
+ 0xB8B7, 0xB8B9, 0xB8BA, 0xB8BB, 0xB8BC, 0xB8BD, 0xB8BE, 0xB8BF, 0xB8C2,
+ 0xB8C4, 0xB8C6, 0xB8C7, 0xB8C8, 0xB8C9, 0xB8CA, 0xB8CB, 0xB8CD, 0xB8CE,
+ 0xB8CF, 0xB8D1, 0xB8D2, 0xB8D3, 0xB8D5, 0xB8D6, 0xB8D7, 0xB8D8, 0xB8D9,
+ 0xB8DA, 0xB8DB, 0xB8DC, 0xB8DE, 0xB8E0, 0xB8E2, 0xB8E3, 0xB8E4, 0xB8E5,
+ 0xB8E6, 0xB8E7, 0xB8EA, 0xB8EB, 0xB8ED, 0xB8EE, 0xB8EF, 0xB8F1, 0xB8F2,
+ 0xB8F3, 0xB8F4, 0xB8F5, 0xB8F6, 0xB8F7, 0xB8FA, 0xB8FC, 0xB8FE, 0xB8FF,
+ 0xB900, 0xB901, 0xB902, 0xB903, 0xB905, 0xB906, 0xB907, 0xB908, 0xB909,
+ 0xB90A, 0xB90B, 0xB90C, 0xB90D, 0xB90E, 0xB90F, 0xB910, 0xB911, 0xB912,
+ 0xB913, 0xB914, 0xB915, 0xB916, 0xB917, 0xB919, 0xB91A, 0xB91B, 0xB91C,
+ 0xB91D, 0xB91E, 0xB91F, 0xB921, 0xB922, 0xB923, 0xB924, 0xB925, 0xB926,
+ 0xB927, 0xB928, 0xB929, 0xB92A, 0xB92B, 0xB92C, 0xB92D, 0xB92E, 0xB92F,
+ 0xB930, 0xB931, 0xB932, 0xB933, 0xB934, 0xB935, 0xB936, 0xB937, 0xB938,
+ 0xB939, 0xB93A, 0xB93B, 0xB93E, 0xB93F, 0xB941, 0xB942, 0xB943, 0xB945,
+ 0xB946, 0xB947, 0xB948, 0xB949, 0xB94A, 0xB94B, 0xB94D, 0xB94E, 0xB950,
+ 0xB952, 0xB953, 0xB954, 0xB955, 0xB956, 0xB957, 0xB95A, 0xB95B, 0xB95D,
+ 0xB95E, 0xB95F, 0xB961, 0xB962, 0xB963, 0xB964, 0xB965, 0xB966, 0xB967,
+ 0xB96A, 0xB96C, 0xB96E, 0xB96F, 0xB970, 0xB971, 0xB972, 0xB973, 0xB976,
+ 0xB977, 0xB979, 0xB97A, 0xB97B, 0xB97D, 0xB97E, 0xB97F, 0xB980, 0xB981,
+ 0xB982, 0xB983, 0xB986, 0xB988, 0xB98B, 0xB98C, 0xB98F, 0xB990, 0xB991,
+ 0xB992, 0xB993, 0xB994, 0xB995, 0xB996, 0xB997, 0xB998, 0xB999, 0xB99A,
+ 0xB99B, 0xB99C, 0xB99D, 0xB99E, 0xB99F, 0xB9A0, 0xB9A1, 0xB9A2, 0xB9A3,
+ 0xB9A4, 0xB9A5, 0xB9A6, 0xB9A7, 0xB9A8, 0xB9A9, 0xB9AA, 0xB9AB, 0xB9AE,
+ 0xB9AF, 0xB9B1, 0xB9B2, 0xB9B3, 0xB9B5, 0xB9B6, 0xB9B7, 0xB9B8, 0xB9B9,
+ 0xB9BA, 0xB9BB, 0xB9BE, 0xB9C0, 0xB9C2, 0xB9C3, 0xB9C4, 0xB9C5, 0xB9C6,
+ 0xB9C7, 0xB9CA, 0xB9CB, 0xB9CD, 0xB9D3, 0xB9D4, 0xB9D5, 0xB9D6, 0xB9D7,
+ 0xB9DA, 0xB9DC, 0xB9DF, 0xB9E0, 0xB9E2, 0xB9E6, 0xB9E7, 0xB9E9, 0xB9EA,
+ 0xB9EB, 0xB9ED, 0xB9EE, 0xB9EF, 0xB9F0, 0xB9F1, 0xB9F2, 0xB9F3, 0xB9F6,
+ 0xB9FB, 0xB9FC, 0xB9FD, 0xB9FE, 0xB9FF, 0xBA02, 0xBA03, 0xBA04, 0xBA05,
+ 0xBA06, 0xBA07, 0xBA09, 0xBA0A, 0xBA0B, 0xBA0C, 0xBA0D, 0xBA0E, 0xBA0F,
+ 0xBA10, 0xBA11, 0xBA12, 0xBA13, 0xBA14, 0xBA16, 0xBA17, 0xBA18, 0xBA19,
+ 0xBA1A, 0xBA1B, 0xBA1C, 0xBA1D, 0xBA1E, 0xBA1F, 0xBA20, 0xBA21, 0xBA22,
+ 0xBA23, 0xBA24, 0xBA25, 0xBA26, 0xBA27, 0xBA28, 0xBA29, 0xBA2A, 0xBA2B,
+ 0xBA2C, 0xBA2D, 0xBA2E, 0xBA2F, 0xBA30, 0xBA31, 0xBA32, 0xBA33, 0xBA34,
+ 0xBA35, 0xBA36, 0xBA37, 0xBA3A, 0xBA3B, 0xBA3D, 0xBA3E, 0xBA3F, 0xBA41,
+ 0xBA43, 0xBA44, 0xBA45, 0xBA46, 0xBA47, 0xBA4A, 0xBA4C, 0xBA4F, 0xBA50,
+ 0xBA51, 0xBA52, 0xBA56, 0xBA57, 0xBA59, 0xBA5A, 0xBA5B, 0xBA5D, 0xBA5E,
+ 0xBA5F, 0xBA60, 0xBA61, 0xBA62, 0xBA63, 0xBA66, 0xBA6A, 0xBA6B, 0xBA6C,
+ 0xBA6D, 0xBA6E, 0xBA6F, 0xBA72, 0xBA73, 0xBA75, 0xBA76, 0xBA77, 0xBA79,
+ 0xBA7A, 0xBA7B, 0xBA7C, 0xBA7D, 0xBA7E, 0xBA7F, 0xBA80, 0xBA81, 0xBA82,
+ 0xBA86, 0xBA88, 0xBA89, 0xBA8A, 0xBA8B, 0xBA8D, 0xBA8E, 0xBA8F, 0xBA90,
+ 0xBA91, 0xBA92, 0xBA93, 0xBA94, 0xBA95, 0xBA96, 0xBA97, 0xBA98, 0xBA99,
+ 0xBA9A, 0xBA9B, 0xBA9C, 0xBA9D, 0xBA9E, 0xBA9F, 0xBAA0, 0xBAA1, 0xBAA2,
+ 0xBAA3, 0xBAA4, 0xBAA5, 0xBAA6, 0xBAA7, 0xBAAA, 0xBAAD, 0xBAAE, 0xBAAF,
+ 0xBAB1, 0xBAB3, 0xBAB4, 0xBAB5, 0xBAB6, 0xBAB7, 0xBABA, 0xBABC, 0xBABE,
+ 0xBABF, 0xBAC0, 0xBAC1, 0xBAC2, 0xBAC3, 0xBAC5, 0xBAC6, 0xBAC7, 0xBAC9,
+ 0xBACA, 0xBACB, 0xBACC, 0xBACD, 0xBACE, 0xBACF, 0xBAD0, 0xBAD1, 0xBAD2,
+ 0xBAD3, 0xBAD4, 0xBAD5, 0xBAD6, 0xBAD7, 0xBADA, 0xBADB, 0xBADC, 0xBADD,
+ 0xBADE, 0xBADF, 0xBAE0, 0xBAE1, 0xBAE2, 0xBAE3, 0xBAE4, 0xBAE5, 0xBAE6,
+ 0xBAE7, 0xBAE8, 0xBAE9, 0xBAEA, 0xBAEB, 0xBAEC, 0xBAED, 0xBAEE, 0xBAEF,
+ 0xBAF0, 0xBAF1, 0xBAF2, 0xBAF3, 0xBAF4, 0xBAF5, 0xBAF6, 0xBAF7, 0xBAF8,
+ 0xBAF9, 0xBAFA, 0xBAFB, 0xBAFD, 0xBAFE, 0xBAFF, 0xBB01, 0xBB02, 0xBB03,
+ 0xBB05, 0xBB06, 0xBB07, 0xBB08, 0xBB09, 0xBB0A, 0xBB0B, 0xBB0C, 0xBB0E,
+ 0xBB10, 0xBB12, 0xBB13, 0xBB14, 0xBB15, 0xBB16, 0xBB17, 0xBB19, 0xBB1A,
+ 0xBB1B, 0xBB1D, 0xBB1E, 0xBB1F, 0xBB21, 0xBB22, 0xBB23, 0xBB24, 0xBB25,
+ 0xBB26, 0xBB27, 0xBB28, 0xBB2A, 0xBB2C, 0xBB2D, 0xBB2E, 0xBB2F, 0xBB30,
+ 0xBB31, 0xBB32, 0xBB33, 0xBB37, 0xBB39, 0xBB3A, 0xBB3F, 0xBB40, 0xBB41,
+ 0xBB42, 0xBB43, 0xBB46, 0xBB48, 0xBB4A, 0xBB4B, 0xBB4C, 0xBB4E, 0xBB51,
+ 0xBB52, 0xBB53, 0xBB55, 0xBB56, 0xBB57, 0xBB59, 0xBB5A, 0xBB5B, 0xBB5C,
+ 0xBB5D, 0xBB5E, 0xBB5F, 0xBB60, 0xBB62, 0xBB64, 0xBB65, 0xBB66, 0xBB67,
+ 0xBB68, 0xBB69, 0xBB6A, 0xBB6B, 0xBB6D, 0xBB6E, 0xBB6F, 0xBB70, 0xBB71,
+ 0xBB72, 0xBB73, 0xBB74, 0xBB75, 0xBB76, 0xBB77, 0xBB78, 0xBB79, 0xBB7A,
+ 0xBB7B, 0xBB7C, 0xBB7D, 0xBB7E, 0xBB7F, 0xBB80, 0xBB81, 0xBB82, 0xBB83,
+ 0xBB84, 0xBB85, 0xBB86, 0xBB87, 0xBB89, 0xBB8A, 0xBB8B, 0xBB8D, 0xBB8E,
+ 0xBB8F, 0xBB91, 0xBB92, 0xBB93, 0xBB94, 0xBB95, 0xBB96, 0xBB97, 0xBB98,
+ 0xBB99, 0xBB9A, 0xBB9B, 0xBB9C, 0xBB9D, 0xBB9E, 0xBB9F, 0xBBA0, 0xBBA1,
+ 0xBBA2, 0xBBA3, 0xBBA5, 0xBBA6, 0xBBA7, 0xBBA9, 0xBBAA, 0xBBAB, 0xBBAD,
+ 0xBBAE, 0xBBAF, 0xBBB0, 0xBBB1, 0xBBB2, 0xBBB3, 0xBBB5, 0xBBB6, 0xBBB8,
+ 0xBBB9, 0xBBBA, 0xBBBB, 0xBBBC, 0xBBBD, 0xBBBE, 0xBBBF, 0xBBC1, 0xBBC2,
+ 0xBBC3, 0xBBC5, 0xBBC6, 0xBBC7, 0xBBC9, 0xBBCA, 0xBBCB, 0xBBCC, 0xBBCD,
+ 0xBBCE, 0xBBCF, 0xBBD1, 0xBBD2, 0xBBD4, 0xBBD5, 0xBBD6, 0xBBD7, 0xBBD8,
+ 0xBBD9, 0xBBDA, 0xBBDB, 0xBBDC, 0xBBDD, 0xBBDE, 0xBBDF, 0xBBE0, 0xBBE1,
+ 0xBBE2, 0xBBE3, 0xBBE4, 0xBBE5, 0xBBE6, 0xBBE7, 0xBBE8, 0xBBE9, 0xBBEA,
+ 0xBBEB, 0xBBEC, 0xBBED, 0xBBEE, 0xBBEF, 0xBBF0, 0xBBF1, 0xBBF2, 0xBBF3,
+ 0xBBF4, 0xBBF5, 0xBBF6, 0xBBF7, 0xBBFA, 0xBBFB, 0xBBFD, 0xBBFE, 0xBC01,
+ 0xBC03, 0xBC04, 0xBC05, 0xBC06, 0xBC07, 0xBC0A, 0xBC0E, 0xBC10, 0xBC12,
+ 0xBC13, 0xBC19, 0xBC1A, 0xBC20, 0xBC21, 0xBC22, 0xBC23, 0xBC26, 0xBC28,
+ 0xBC2A, 0xBC2B, 0xBC2C, 0xBC2E, 0xBC2F, 0xBC32, 0xBC33, 0xBC35, 0xBC36,
+ 0xBC37, 0xBC39, 0xBC3A, 0xBC3B, 0xBC3C, 0xBC3D, 0xBC3E, 0xBC3F, 0xBC42,
+ 0xBC46, 0xBC47, 0xBC48, 0xBC4A, 0xBC4B, 0xBC4E, 0xBC4F, 0xBC51, 0xBC52,
+ 0xBC53, 0xBC54, 0xBC55, 0xBC56, 0xBC57, 0xBC58, 0xBC59, 0xBC5A, 0xBC5B,
+ 0xBC5C, 0xBC5E, 0xBC5F, 0xBC60, 0xBC61, 0xBC62, 0xBC63, 0xBC64, 0xBC65,
+ 0xBC66, 0xBC67, 0xBC68, 0xBC69, 0xBC6A, 0xBC6B, 0xBC6C, 0xBC6D, 0xBC6E,
+ 0xBC6F, 0xBC70, 0xBC71, 0xBC72, 0xBC73, 0xBC74, 0xBC75, 0xBC76, 0xBC77,
+ 0xBC78, 0xBC79, 0xBC7A, 0xBC7B, 0xBC7C, 0xBC7D, 0xBC7E, 0xBC7F, 0xBC80,
+ 0xBC81, 0xBC82, 0xBC83, 0xBC86, 0xBC87, 0xBC89, 0xBC8A, 0xBC8D, 0xBC8F,
+ 0xBC90, 0xBC91, 0xBC92, 0xBC93, 0xBC96, 0xBC98, 0xBC9B, 0xBC9C, 0xBC9D,
+ 0xBC9E, 0xBC9F, 0xBCA2, 0xBCA3, 0xBCA5, 0xBCA6, 0xBCA9, 0xBCAA, 0xBCAB,
+ 0xBCAC, 0xBCAD, 0xBCAE, 0xBCAF, 0xBCB2, 0xBCB6, 0xBCB7, 0xBCB8, 0xBCB9,
+ 0xBCBA, 0xBCBB, 0xBCBE, 0xBCBF, 0xBCC1, 0xBCC2, 0xBCC3, 0xBCC5, 0xBCC6,
+ 0xBCC7, 0xBCC8, 0xBCC9, 0xBCCA, 0xBCCB, 0xBCCC, 0xBCCE, 0xBCD2, 0xBCD3,
+ 0xBCD4, 0xBCD6, 0xBCD7, 0xBCD9, 0xBCDA, 0xBCDB, 0xBCDD, 0xBCDE, 0xBCDF,
+ 0xBCE0, 0xBCE1, 0xBCE2, 0xBCE3, 0xBCE4, 0xBCE5, 0xBCE6, 0xBCE7, 0xBCE8,
+ 0xBCE9, 0xBCEA, 0xBCEB, 0xBCEC, 0xBCED, 0xBCEE, 0xBCEF, 0xBCF0, 0xBCF1,
+ 0xBCF2, 0xBCF3, 0xBCF7, 0xBCF9, 0xBCFA, 0xBCFB, 0xBCFD, 0xBCFE, 0xBCFF,
+ 0xBD00, 0xBD01, 0xBD02, 0xBD03, 0xBD06, 0xBD08, 0xBD0A, 0xBD0B, 0xBD0C,
+ 0xBD0D, 0xBD0E, 0xBD0F, 0xBD11, 0xBD12, 0xBD13, 0xBD15, 0xBD16, 0xBD17,
+ 0xBD18, 0xBD19, 0xBD1A, 0xBD1B, 0xBD1C, 0xBD1D, 0xBD1E, 0xBD1F, 0xBD20,
+ 0xBD21, 0xBD22, 0xBD23, 0xBD25, 0xBD26, 0xBD27, 0xBD28, 0xBD29, 0xBD2A,
+ 0xBD2B, 0xBD2D, 0xBD2E, 0xBD2F, 0xBD30, 0xBD31, 0xBD32, 0xBD33, 0xBD34,
+ 0xBD35, 0xBD36, 0xBD37, 0xBD38, 0xBD39, 0xBD3A, 0xBD3B, 0xBD3C, 0xBD3D,
+ 0xBD3E, 0xBD3F, 0xBD41, 0xBD42, 0xBD43, 0xBD44, 0xBD45, 0xBD46, 0xBD47,
+ 0xBD4A, 0xBD4B, 0xBD4D, 0xBD4E, 0xBD4F, 0xBD51, 0xBD52, 0xBD53, 0xBD54,
+ 0xBD55, 0xBD56, 0xBD57, 0xBD5A, 0xBD5B, 0xBD5C, 0xBD5D, 0xBD5E, 0xBD5F,
+ 0xBD60, 0xBD61, 0xBD62, 0xBD63, 0xBD65, 0xBD66, 0xBD67, 0xBD69, 0xBD6A,
+ 0xBD6B, 0xBD6C, 0xBD6D, 0xBD6E, 0xBD6F, 0xBD70, 0xBD71, 0xBD72, 0xBD73,
+ 0xBD74, 0xBD75, 0xBD76, 0xBD77, 0xBD78, 0xBD79, 0xBD7A, 0xBD7B, 0xBD7C,
+ 0xBD7D, 0xBD7E, 0xBD7F, 0xBD82, 0xBD83, 0xBD85, 0xBD86, 0xBD8B, 0xBD8C,
+ 0xBD8D, 0xBD8E, 0xBD8F, 0xBD92, 0xBD94, 0xBD96, 0xBD97, 0xBD98, 0xBD9B,
+ 0xBD9D, 0xBD9E, 0xBD9F, 0xBDA0, 0xBDA1, 0xBDA2, 0xBDA3, 0xBDA5, 0xBDA6,
+ 0xBDA7, 0xBDA8, 0xBDA9, 0xBDAA, 0xBDAB, 0xBDAC, 0xBDAD, 0xBDAE, 0xBDAF,
+ 0xBDB1, 0xBDB2, 0xBDB3, 0xBDB4, 0xBDB5, 0xBDB6, 0xBDB7, 0xBDB9, 0xBDBA,
+ 0xBDBB, 0xBDBC, 0xBDBD, 0xBDBE, 0xBDBF, 0xBDC0, 0xBDC1, 0xBDC2, 0xBDC3,
+ 0xBDC4, 0xBDC5, 0xBDC6, 0xBDC7, 0xBDC8, 0xBDC9, 0xBDCA, 0xBDCB, 0xBDCC,
+ 0xBDCD, 0xBDCE, 0xBDCF, 0xBDD0, 0xBDD1, 0xBDD2, 0xBDD3, 0xBDD6, 0xBDD7,
+ 0xBDD9, 0xBDDA, 0xBDDB, 0xBDDD, 0xBDDE, 0xBDDF, 0xBDE0, 0xBDE1, 0xBDE2,
+ 0xBDE3, 0xBDE4, 0xBDE5, 0xBDE6, 0xBDE7, 0xBDE8, 0xBDEA, 0xBDEB, 0xBDEC,
+ 0xBDED, 0xBDEE, 0xBDEF, 0xBDF1, 0xBDF2, 0xBDF3, 0xBDF5, 0xBDF6, 0xBDF7,
+ 0xBDF9, 0xBDFA, 0xBDFB, 0xBDFC, 0xBDFD, 0xBDFE, 0xBDFF, 0xBE01, 0xBE02,
+ 0xBE04, 0xBE06, 0xBE07, 0xBE08, 0xBE09, 0xBE0A, 0xBE0B, 0xBE0E, 0xBE0F,
+ 0xBE11, 0xBE12, 0xBE13, 0xBE15, 0xBE16, 0xBE17, 0xBE18, 0xBE19, 0xBE1A,
+ 0xBE1B, 0xBE1E, 0xBE20, 0xBE21, 0xBE22, 0xBE23, 0xBE24, 0xBE25, 0xBE26,
+ 0xBE27, 0xBE28, 0xBE29, 0xBE2A, 0xBE2B, 0xBE2C, 0xBE2D, 0xBE2E, 0xBE2F,
+ 0xBE30, 0xBE31, 0xBE32, 0xBE33, 0xBE34, 0xBE35, 0xBE36, 0xBE37, 0xBE38,
+ 0xBE39, 0xBE3A, 0xBE3B, 0xBE3C, 0xBE3D, 0xBE3E, 0xBE3F, 0xBE40, 0xBE41,
+ 0xBE42, 0xBE43, 0xBE46, 0xBE47, 0xBE49, 0xBE4A, 0xBE4B, 0xBE4D, 0xBE4F,
+ 0xBE50, 0xBE51, 0xBE52, 0xBE53, 0xBE56, 0xBE58, 0xBE5C, 0xBE5D, 0xBE5E,
+ 0xBE5F, 0xBE62, 0xBE63, 0xBE65, 0xBE66, 0xBE67, 0xBE69, 0xBE6B, 0xBE6C,
+ 0xBE6D, 0xBE6E, 0xBE6F, 0xBE72, 0xBE76, 0xBE77, 0xBE78, 0xBE79, 0xBE7A,
+ 0xBE7E, 0xBE7F, 0xBE81, 0xBE82, 0xBE83, 0xBE85, 0xBE86, 0xBE87, 0xBE88,
+ 0xBE89, 0xBE8A, 0xBE8B, 0xBE8E, 0xBE92, 0xBE93, 0xBE94, 0xBE95, 0xBE96,
+ 0xBE97, 0xBE9A, 0xBE9B, 0xBE9C, 0xBE9D, 0xBE9E, 0xBE9F, 0xBEA0, 0xBEA1,
+ 0xBEA2, 0xBEA3, 0xBEA4, 0xBEA5, 0xBEA6, 0xBEA7, 0xBEA9, 0xBEAA, 0xBEAB,
+ 0xBEAC, 0xBEAD, 0xBEAE, 0xBEAF, 0xBEB0, 0xBEB1, 0xBEB2, 0xBEB3, 0xBEB4,
+ 0xBEB5, 0xBEB6, 0xBEB7, 0xBEB8, 0xBEB9, 0xBEBA, 0xBEBB, 0xBEBC, 0xBEBD,
+ 0xBEBE, 0xBEBF, 0xBEC0, 0xBEC1, 0xBEC2, 0xBEC3, 0xBEC4, 0xBEC5, 0xBEC6,
+ 0xBEC7, 0xBEC8, 0xBEC9, 0xBECA, 0xBECB, 0xBECC, 0xBECD, 0xBECE, 0xBECF,
+ 0xBED2, 0xBED3, 0xBED5, 0xBED6, 0xBED9, 0xBEDA, 0xBEDB, 0xBEDC, 0xBEDD,
+ 0xBEDE, 0xBEDF, 0xBEE1, 0xBEE2, 0xBEE6, 0xBEE7, 0xBEE8, 0xBEE9, 0xBEEA,
+ 0xBEEB, 0xBEED, 0xBEEE, 0xBEEF, 0xBEF0, 0xBEF1, 0xBEF2, 0xBEF3, 0xBEF4,
+ 0xBEF5, 0xBEF6, 0xBEF7, 0xBEF8, 0xBEF9, 0xBEFA, 0xBEFB, 0xBEFC, 0xBEFD,
+ 0xBEFE, 0xBEFF, 0xBF00, 0xBF02, 0xBF03, 0xBF04, 0xBF05, 0xBF06, 0xBF07,
+ 0xBF0A, 0xBF0B, 0xBF0C, 0xBF0D, 0xBF0E, 0xBF0F, 0xBF10, 0xBF11, 0xBF12,
+ 0xBF13, 0xBF14, 0xBF15, 0xBF16, 0xBF17, 0xBF1A, 0xBF1E, 0xBF1F, 0xBF20,
+ 0xBF21, 0xBF22, 0xBF23, 0xBF24, 0xBF25, 0xBF26, 0xBF27, 0xBF28, 0xBF29,
+ 0xBF2A, 0xBF2B, 0xBF2C, 0xBF2D, 0xBF2E, 0xBF2F, 0xBF30, 0xBF31, 0xBF32,
+ 0xBF33, 0xBF34, 0xBF35, 0xBF36, 0xBF37, 0xBF38, 0xBF39, 0xBF3A, 0xBF3B,
+ 0xBF3C, 0xBF3D, 0xBF3E, 0xBF3F, 0xBF42, 0xBF43, 0xBF45, 0xBF46, 0xBF47,
+ 0xBF49, 0xBF4A, 0xBF4B, 0xBF4C, 0xBF4D, 0xBF4E, 0xBF4F, 0xBF52, 0xBF53,
+ 0xBF54, 0xBF56, 0xBF57, 0xBF58, 0xBF59, 0xBF5A, 0xBF5B, 0xBF5C, 0xBF5D,
+ 0xBF5E, 0xBF5F, 0xBF60, 0xBF61, 0xBF62, 0xBF63, 0xBF64, 0xBF65, 0xBF66,
+ 0xBF67, 0xBF68, 0xBF69, 0xBF6A, 0xBF6B, 0xBF6C, 0xBF6D, 0xBF6E, 0xBF6F,
+ 0xBF70, 0xBF71, 0xBF72, 0xBF73, 0xBF74, 0xBF75, 0xBF76, 0xBF77, 0xBF78,
+ 0xBF79, 0xBF7A, 0xBF7B, 0xBF7C, 0xBF7D, 0xBF7E, 0xBF7F, 0xBF80, 0xBF81,
+ 0xBF82, 0xBF83, 0xBF84, 0xBF85, 0xBF86, 0xBF87, 0xBF88, 0xBF89, 0xBF8A,
+ 0xBF8B, 0xBF8C, 0xBF8D, 0xBF8E, 0xBF8F, 0xBF90, 0xBF91, 0xBF92, 0xBF93,
+ 0xBF95, 0xBF96, 0xBF97, 0xBF98, 0xBF99, 0xBF9A, 0xBF9B, 0xBF9C, 0xBF9D,
+ 0xBF9E, 0xBF9F, 0xBFA0, 0xBFA1, 0xBFA2, 0xBFA3, 0xBFA4, 0xBFA5, 0xBFA6,
+ 0xBFA7, 0xBFA8, 0xBFA9, 0xBFAA, 0xBFAB, 0xBFAC, 0xBFAD, 0xBFAE, 0xBFAF,
+ 0xBFB1, 0xBFB2, 0xBFB3, 0xBFB4, 0xBFB5, 0xBFB6, 0xBFB7, 0xBFB8, 0xBFB9,
+ 0xBFBA, 0xBFBB, 0xBFBC, 0xBFBD, 0xBFBE, 0xBFBF, 0xBFC0, 0xBFC1, 0xBFC2,
+ 0xBFC3, 0xBFC4, 0xBFC6, 0xBFC7, 0xBFC8, 0xBFC9, 0xBFCA, 0xBFCB, 0xBFCE,
+ 0xBFCF, 0xBFD1, 0xBFD2, 0xBFD3, 0xBFD5, 0xBFD6, 0xBFD7, 0xBFD8, 0xBFD9,
+ 0xBFDA, 0xBFDB, 0xBFDD, 0xBFDE, 0xBFE0, 0xBFE2, 0xBFE3, 0xBFE4, 0xBFE5,
+ 0xBFE6, 0xBFE7, 0xBFE8, 0xBFE9, 0xBFEA, 0xBFEB, 0xBFEC, 0xBFED, 0xBFEE,
+ 0xBFEF, 0xBFF0, 0xBFF1, 0xBFF2, 0xBFF3, 0xBFF4, 0xBFF5, 0xBFF6, 0xBFF7,
+ 0xBFF8, 0xBFF9, 0xBFFA, 0xBFFB, 0xBFFC, 0xBFFD, 0xBFFE, 0xBFFF, 0xC000,
+ 0xC001, 0xC002, 0xC003, 0xC004, 0xC005, 0xC006, 0xC007, 0xC008, 0xC009,
+ 0xC00A, 0xC00B, 0xC00C, 0xC00D, 0xC00E, 0xC00F, 0xC010, 0xC011, 0xC012,
+ 0xC013, 0xC014, 0xC015, 0xC016, 0xC017, 0xC018, 0xC019, 0xC01A, 0xC01B,
+ 0xC01C, 0xC01D, 0xC01E, 0xC01F, 0xC020, 0xC021, 0xC022, 0xC023, 0xC024,
+ 0xC025, 0xC026, 0xC027, 0xC028, 0xC029, 0xC02A, 0xC02B, 0xC02C, 0xC02D,
+ 0xC02E, 0xC02F, 0xC030, 0xC031, 0xC032, 0xC033, 0xC034, 0xC035, 0xC036,
+ 0xC037, 0xC038, 0xC039, 0xC03A, 0xC03B, 0xC03D, 0xC03E, 0xC03F, 0xC040,
+ 0xC041, 0xC042, 0xC043, 0xC044, 0xC045, 0xC046, 0xC047, 0xC048, 0xC049,
+ 0xC04A, 0xC04B, 0xC04C, 0xC04D, 0xC04E, 0xC04F, 0xC050, 0xC052, 0xC053,
+ 0xC054, 0xC055, 0xC056, 0xC057, 0xC059, 0xC05A, 0xC05B, 0xC05D, 0xC05E,
+ 0xC05F, 0xC061, 0xC062, 0xC063, 0xC064, 0xC065, 0xC066, 0xC067, 0xC06A,
+ 0xC06B, 0xC06C, 0xC06D, 0xC06E, 0xC06F, 0xC070, 0xC071, 0xC072, 0xC073,
+ 0xC074, 0xC075, 0xC076, 0xC077, 0xC078, 0xC079, 0xC07A, 0xC07B, 0xC07C,
+ 0xC07D, 0xC07E, 0xC07F, 0xC080, 0xC081, 0xC082, 0xC083, 0xC084, 0xC085,
+ 0xC086, 0xC087, 0xC088, 0xC089, 0xC08A, 0xC08B, 0xC08C, 0xC08D, 0xC08E,
+ 0xC08F, 0xC092, 0xC093, 0xC095, 0xC096, 0xC097, 0xC099, 0xC09A, 0xC09B,
+ 0xC09C, 0xC09D, 0xC09E, 0xC09F, 0xC0A2, 0xC0A4, 0xC0A6, 0xC0A7, 0xC0A8,
+ 0xC0A9, 0xC0AA, 0xC0AB, 0xC0AE, 0xC0B1, 0xC0B2, 0xC0B7, 0xC0B8, 0xC0B9,
+ 0xC0BA, 0xC0BB, 0xC0BE, 0xC0C2, 0xC0C3, 0xC0C4, 0xC0C6, 0xC0C7, 0xC0CA,
+ 0xC0CB, 0xC0CD, 0xC0CE, 0xC0CF, 0xC0D1, 0xC0D2, 0xC0D3, 0xC0D4, 0xC0D5,
+ 0xC0D6, 0xC0D7, 0xC0DA, 0xC0DE, 0xC0DF, 0xC0E0, 0xC0E1, 0xC0E2, 0xC0E3,
+ 0xC0E6, 0xC0E7, 0xC0E9, 0xC0EA, 0xC0EB, 0xC0ED, 0xC0EE, 0xC0EF, 0xC0F0,
+ 0xC0F1, 0xC0F2, 0xC0F3, 0xC0F6, 0xC0F8, 0xC0FA, 0xC0FB, 0xC0FC, 0xC0FD,
+ 0xC0FE, 0xC0FF, 0xC101, 0xC102, 0xC103, 0xC105, 0xC106, 0xC107, 0xC109,
+ 0xC10A, 0xC10B, 0xC10C, 0xC10D, 0xC10E, 0xC10F, 0xC111, 0xC112, 0xC113,
+ 0xC114, 0xC116, 0xC117, 0xC118, 0xC119, 0xC11A, 0xC11B, 0xC121, 0xC122,
+ 0xC125, 0xC128, 0xC129, 0xC12A, 0xC12B, 0xC12E, 0xC132, 0xC133, 0xC134,
+ 0xC135, 0xC137, 0xC13A, 0xC13B, 0xC13D, 0xC13E, 0xC13F, 0xC141, 0xC142,
+ 0xC143, 0xC144, 0xC145, 0xC146, 0xC147, 0xC14A, 0xC14E, 0xC14F, 0xC150,
+ 0xC151, 0xC152, 0xC153, 0xC156, 0xC157, 0xC159, 0xC15A, 0xC15B, 0xC15D,
+ 0xC15E, 0xC15F, 0xC160, 0xC161, 0xC162, 0xC163, 0xC166, 0xC16A, 0xC16B,
+ 0xC16C, 0xC16D, 0xC16E, 0xC16F, 0xC171, 0xC172, 0xC173, 0xC175, 0xC176,
+ 0xC177, 0xC179, 0xC17A, 0xC17B, 0xC17C, 0xC17D, 0xC17E, 0xC17F, 0xC180,
+ 0xC181, 0xC182, 0xC183, 0xC184, 0xC186, 0xC187, 0xC188, 0xC189, 0xC18A,
+ 0xC18B, 0xC18F, 0xC191, 0xC192, 0xC193, 0xC195, 0xC197, 0xC198, 0xC199,
+ 0xC19A, 0xC19B, 0xC19E, 0xC1A0, 0xC1A2, 0xC1A3, 0xC1A4, 0xC1A6, 0xC1A7,
+ 0xC1AA, 0xC1AB, 0xC1AD, 0xC1AE, 0xC1AF, 0xC1B1, 0xC1B2, 0xC1B3, 0xC1B4,
+ 0xC1B5, 0xC1B6, 0xC1B7, 0xC1B8, 0xC1B9, 0xC1BA, 0xC1BB, 0xC1BC, 0xC1BE,
+ 0xC1BF, 0xC1C0, 0xC1C1, 0xC1C2, 0xC1C3, 0xC1C5, 0xC1C6, 0xC1C7, 0xC1C9,
+ 0xC1CA, 0xC1CB, 0xC1CD, 0xC1CE, 0xC1CF, 0xC1D0, 0xC1D1, 0xC1D2, 0xC1D3,
+ 0xC1D5, 0xC1D6, 0xC1D9, 0xC1DA, 0xC1DB, 0xC1DC, 0xC1DD, 0xC1DE, 0xC1DF,
+ 0xC1E1, 0xC1E2, 0xC1E3, 0xC1E5, 0xC1E6, 0xC1E7, 0xC1E9, 0xC1EA, 0xC1EB,
+ 0xC1EC, 0xC1ED, 0xC1EE, 0xC1EF, 0xC1F2, 0xC1F4, 0xC1F5, 0xC1F6, 0xC1F7,
+ 0xC1F8, 0xC1F9, 0xC1FA, 0xC1FB, 0xC1FE, 0xC1FF, 0xC201, 0xC202, 0xC203,
+ 0xC205, 0xC206, 0xC207, 0xC208, 0xC209, 0xC20A, 0xC20B, 0xC20E, 0xC210,
+ 0xC212, 0xC213, 0xC214, 0xC215, 0xC216, 0xC217, 0xC21A, 0xC21B, 0xC21D,
+ 0xC21E, 0xC221, 0xC222, 0xC223, 0xC224, 0xC225, 0xC226, 0xC227, 0xC22A,
+ 0xC22C, 0xC22E, 0xC230, 0xC233, 0xC235, 0xC236, 0xC237, 0xC238, 0xC239,
+ 0xC23A, 0xC23B, 0xC23C, 0xC23D, 0xC23E, 0xC23F, 0xC240, 0xC241, 0xC242,
+ 0xC243, 0xC244, 0xC245, 0xC246, 0xC247, 0xC249, 0xC24A, 0xC24B, 0xC24C,
+ 0xC24D, 0xC24E, 0xC24F, 0xC252, 0xC253, 0xC255, 0xC256, 0xC257, 0xC259,
+ 0xC25A, 0xC25B, 0xC25C, 0xC25D, 0xC25E, 0xC25F, 0xC261, 0xC262, 0xC263,
+ 0xC264, 0xC266, 0xC267, 0xC268, 0xC269, 0xC26A, 0xC26B, 0xC26E, 0xC26F,
+ 0xC271, 0xC272, 0xC273, 0xC275, 0xC276, 0xC277, 0xC278, 0xC279, 0xC27A,
+ 0xC27B, 0xC27E, 0xC280, 0xC282, 0xC283, 0xC284, 0xC285, 0xC286, 0xC287,
+ 0xC28A, 0xC28B, 0xC28C, 0xC28D, 0xC28E, 0xC28F, 0xC291, 0xC292, 0xC293,
+ 0xC294, 0xC295, 0xC296, 0xC297, 0xC299, 0xC29A, 0xC29C, 0xC29E, 0xC29F,
+ 0xC2A0, 0xC2A1, 0xC2A2, 0xC2A3, 0xC2A6, 0xC2A7, 0xC2A9, 0xC2AA, 0xC2AB,
+ 0xC2AE, 0xC2AF, 0xC2B0, 0xC2B1, 0xC2B2, 0xC2B3, 0xC2B6, 0xC2B8, 0xC2BA,
+ 0xC2BB, 0xC2BC, 0xC2BD, 0xC2BE, 0xC2BF, 0xC2C0, 0xC2C1, 0xC2C2, 0xC2C3,
+ 0xC2C4, 0xC2C5, 0xC2C6, 0xC2C7, 0xC2C8, 0xC2C9, 0xC2CA, 0xC2CB, 0xC2CC,
+ 0xC2CD, 0xC2CE, 0xC2CF, 0xC2D0, 0xC2D1, 0xC2D2, 0xC2D3, 0xC2D4, 0xC2D5,
+ 0xC2D6, 0xC2D7, 0xC2D8, 0xC2D9, 0xC2DA, 0xC2DB, 0xC2DE, 0xC2DF, 0xC2E1,
+ 0xC2E2, 0xC2E5, 0xC2E6, 0xC2E7, 0xC2E8, 0xC2E9, 0xC2EA, 0xC2EE, 0xC2F0,
+ 0xC2F2, 0xC2F3, 0xC2F4, 0xC2F5, 0xC2F7, 0xC2FA, 0xC2FD, 0xC2FE, 0xC2FF,
+ 0xC301, 0xC302, 0xC303, 0xC304, 0xC305, 0xC306, 0xC307, 0xC30A, 0xC30B,
+ 0xC30E, 0xC30F, 0xC310, 0xC311, 0xC312, 0xC316, 0xC317, 0xC319, 0xC31A,
+ 0xC31B, 0xC31D, 0xC31E, 0xC31F, 0xC320, 0xC321, 0xC322, 0xC323, 0xC326,
+ 0xC327, 0xC32A, 0xC32B, 0xC32C, 0xC32D, 0xC32E, 0xC32F, 0xC330, 0xC331,
+ 0xC332, 0xC333, 0xC334, 0xC335, 0xC336, 0xC337, 0xC338, 0xC339, 0xC33A,
+ 0xC33B, 0xC33C, 0xC33D, 0xC33E, 0xC33F, 0xC340, 0xC341, 0xC342, 0xC343,
+ 0xC344, 0xC346, 0xC347, 0xC348, 0xC349, 0xC34A, 0xC34B, 0xC34C, 0xC34D,
+ 0xC34E, 0xC34F, 0xC350, 0xC351, 0xC352, 0xC353, 0xC354, 0xC355, 0xC356,
+ 0xC357, 0xC358, 0xC359, 0xC35A, 0xC35B, 0xC35C, 0xC35D, 0xC35E, 0xC35F,
+ 0xC360, 0xC361, 0xC362, 0xC363, 0xC364, 0xC365, 0xC366, 0xC367, 0xC36A,
+ 0xC36B, 0xC36D, 0xC36E, 0xC36F, 0xC371, 0xC373, 0xC374, 0xC375, 0xC376,
+ 0xC377, 0xC37A, 0xC37B, 0xC37E, 0xC37F, 0xC380, 0xC381, 0xC382, 0xC383,
+ 0xC385, 0xC386, 0xC387, 0xC389, 0xC38A, 0xC38B, 0xC38D, 0xC38E, 0xC38F,
+ 0xC390, 0xC391, 0xC392, 0xC393, 0xC394, 0xC395, 0xC396, 0xC397, 0xC398,
+ 0xC399, 0xC39A, 0xC39B, 0xC39C, 0xC39D, 0xC39E, 0xC39F, 0xC3A0, 0xC3A1,
+ 0xC3A2, 0xC3A3, 0xC3A4, 0xC3A5, 0xC3A6, 0xC3A7, 0xC3A8, 0xC3A9, 0xC3AA,
+ 0xC3AB, 0xC3AC, 0xC3AD, 0xC3AE, 0xC3AF, 0xC3B0, 0xC3B1, 0xC3B2, 0xC3B3,
+ 0xC3B4, 0xC3B5, 0xC3B6, 0xC3B7, 0xC3B8, 0xC3B9, 0xC3BA, 0xC3BB, 0xC3BC,
+ 0xC3BD, 0xC3BE, 0xC3BF, 0xC3C1, 0xC3C2, 0xC3C3, 0xC3C4, 0xC3C5, 0xC3C6,
+ 0xC3C7, 0xC3C8, 0xC3C9, 0xC3CA, 0xC3CB, 0xC3CC, 0xC3CD, 0xC3CE, 0xC3CF,
+ 0xC3D0, 0xC3D1, 0xC3D2, 0xC3D3, 0xC3D4, 0xC3D5, 0xC3D6, 0xC3D7, 0xC3DA,
+ 0xC3DB, 0xC3DD, 0xC3DE, 0xC3E1, 0xC3E3, 0xC3E4, 0xC3E5, 0xC3E6, 0xC3E7,
+ 0xC3EA, 0xC3EB, 0xC3EC, 0xC3EE, 0xC3EF, 0xC3F0, 0xC3F1, 0xC3F2, 0xC3F3,
+ 0xC3F6, 0xC3F7, 0xC3F9, 0xC3FA, 0xC3FB, 0xC3FC, 0xC3FD, 0xC3FE, 0xC3FF,
+ 0xC400, 0xC401, 0xC402, 0xC403, 0xC404, 0xC405, 0xC406, 0xC407, 0xC409,
+ 0xC40A, 0xC40B, 0xC40C, 0xC40D, 0xC40E, 0xC40F, 0xC411, 0xC412, 0xC413,
+ 0xC414, 0xC415, 0xC416, 0xC417, 0xC418, 0xC419, 0xC41A, 0xC41B, 0xC41C,
+ 0xC41D, 0xC41E, 0xC41F, 0xC420, 0xC421, 0xC422, 0xC423, 0xC425, 0xC426,
+ 0xC427, 0xC428, 0xC429, 0xC42A, 0xC42B, 0xC42D, 0xC42E, 0xC42F, 0xC431,
+ 0xC432, 0xC433, 0xC435, 0xC436, 0xC437, 0xC438, 0xC439, 0xC43A, 0xC43B,
+ 0xC43E, 0xC43F, 0xC440, 0xC441, 0xC442, 0xC443, 0xC444, 0xC445, 0xC446,
+ 0xC447, 0xC449, 0xC44A, 0xC44B, 0xC44C, 0xC44D, 0xC44E, 0xC44F, 0xC450,
+ 0xC451, 0xC452, 0xC453, 0xC454, 0xC455, 0xC456, 0xC457, 0xC458, 0xC459,
+ 0xC45A, 0xC45B, 0xC45C, 0xC45D, 0xC45E, 0xC45F, 0xC460, 0xC461, 0xC462,
+ 0xC463, 0xC466, 0xC467, 0xC469, 0xC46A, 0xC46B, 0xC46D, 0xC46E, 0xC46F,
+ 0xC470, 0xC471, 0xC472, 0xC473, 0xC476, 0xC477, 0xC478, 0xC47A, 0xC47B,
+ 0xC47C, 0xC47D, 0xC47E, 0xC47F, 0xC481, 0xC482, 0xC483, 0xC484, 0xC485,
+ 0xC486, 0xC487, 0xC488, 0xC489, 0xC48A, 0xC48B, 0xC48C, 0xC48D, 0xC48E,
+ 0xC48F, 0xC490, 0xC491, 0xC492, 0xC493, 0xC495, 0xC496, 0xC497, 0xC498,
+ 0xC499, 0xC49A, 0xC49B, 0xC49D, 0xC49E, 0xC49F, 0xC4A0, 0xC4A1, 0xC4A2,
+ 0xC4A3, 0xC4A4, 0xC4A5, 0xC4A6, 0xC4A7, 0xC4A8, 0xC4A9, 0xC4AA, 0xC4AB,
+ 0xC4AC, 0xC4AD, 0xC4AE, 0xC4AF, 0xC4B0, 0xC4B1, 0xC4B2, 0xC4B3, 0xC4B4,
+ 0xC4B5, 0xC4B6, 0xC4B7, 0xC4B9, 0xC4BA, 0xC4BB, 0xC4BD, 0xC4BE, 0xC4BF,
+ 0xC4C0, 0xC4C1, 0xC4C2, 0xC4C3, 0xC4C4, 0xC4C5, 0xC4C6, 0xC4C7, 0xC4C8,
+ 0xC4C9, 0xC4CA, 0xC4CB, 0xC4CC, 0xC4CD, 0xC4CE, 0xC4CF, 0xC4D0, 0xC4D1,
+ 0xC4D2, 0xC4D3, 0xC4D4, 0xC4D5, 0xC4D6, 0xC4D7, 0xC4D8, 0xC4D9, 0xC4DA,
+ 0xC4DB, 0xC4DC, 0xC4DD, 0xC4DE, 0xC4DF, 0xC4E0, 0xC4E1, 0xC4E2, 0xC4E3,
+ 0xC4E4, 0xC4E5, 0xC4E6, 0xC4E7, 0xC4E8, 0xC4EA, 0xC4EB, 0xC4EC, 0xC4ED,
+ 0xC4EE, 0xC4EF, 0xC4F2, 0xC4F3, 0xC4F5, 0xC4F6, 0xC4F7, 0xC4F9, 0xC4FB,
+ 0xC4FC, 0xC4FD, 0xC4FE, 0xC502, 0xC503, 0xC504, 0xC505, 0xC506, 0xC507,
+ 0xC508, 0xC509, 0xC50A, 0xC50B, 0xC50D, 0xC50E, 0xC50F, 0xC511, 0xC512,
+ 0xC513, 0xC515, 0xC516, 0xC517, 0xC518, 0xC519, 0xC51A, 0xC51B, 0xC51D,
+ 0xC51E, 0xC51F, 0xC520, 0xC521, 0xC522, 0xC523, 0xC524, 0xC525, 0xC526,
+ 0xC527, 0xC52A, 0xC52B, 0xC52D, 0xC52E, 0xC52F, 0xC531, 0xC532, 0xC533,
+ 0xC534, 0xC535, 0xC536, 0xC537, 0xC53A, 0xC53C, 0xC53E, 0xC53F, 0xC540,
+ 0xC541, 0xC542, 0xC543, 0xC546, 0xC547, 0xC54B, 0xC54F, 0xC550, 0xC551,
+ 0xC552, 0xC556, 0xC55A, 0xC55B, 0xC55C, 0xC55F, 0xC562, 0xC563, 0xC565,
+ 0xC566, 0xC567, 0xC569, 0xC56A, 0xC56B, 0xC56C, 0xC56D, 0xC56E, 0xC56F,
+ 0xC572, 0xC576, 0xC577, 0xC578, 0xC579, 0xC57A, 0xC57B, 0xC57E, 0xC57F,
+ 0xC581, 0xC582, 0xC583, 0xC585, 0xC586, 0xC588, 0xC589, 0xC58A, 0xC58B,
+ 0xC58E, 0xC590, 0xC592, 0xC593, 0xC594, 0xC596, 0xC599, 0xC59A, 0xC59B,
+ 0xC59D, 0xC59E, 0xC59F, 0xC5A1, 0xC5A2, 0xC5A3, 0xC5A4, 0xC5A5, 0xC5A6,
+ 0xC5A7, 0xC5A8, 0xC5AA, 0xC5AB, 0xC5AC, 0xC5AD, 0xC5AE, 0xC5AF, 0xC5B0,
+ 0xC5B1, 0xC5B2, 0xC5B3, 0xC5B6, 0xC5B7, 0xC5BA, 0xC5BF, 0xC5C0, 0xC5C1,
+ 0xC5C2, 0xC5C3, 0xC5CB, 0xC5CD, 0xC5CF, 0xC5D2, 0xC5D3, 0xC5D5, 0xC5D6,
+ 0xC5D7, 0xC5D9, 0xC5DA, 0xC5DB, 0xC5DC, 0xC5DD, 0xC5DE, 0xC5DF, 0xC5E2,
+ 0xC5E4, 0xC5E6, 0xC5E7, 0xC5E8, 0xC5E9, 0xC5EA, 0xC5EB, 0xC5EF, 0xC5F1,
+ 0xC5F2, 0xC5F3, 0xC5F5, 0xC5F8, 0xC5F9, 0xC5FA, 0xC5FB, 0xC602, 0xC603,
+ 0xC604, 0xC609, 0xC60A, 0xC60B, 0xC60D, 0xC60E, 0xC60F, 0xC611, 0xC612,
+ 0xC613, 0xC614, 0xC615, 0xC616, 0xC617, 0xC61A, 0xC61D, 0xC61E, 0xC61F,
+ 0xC620, 0xC621, 0xC622, 0xC623, 0xC626, 0xC627, 0xC629, 0xC62A, 0xC62B,
+ 0xC62F, 0xC631, 0xC632, 0xC636, 0xC638, 0xC63A, 0xC63C, 0xC63D, 0xC63E,
+ 0xC63F, 0xC642, 0xC643, 0xC645, 0xC646, 0xC647, 0xC649, 0xC64A, 0xC64B,
+ 0xC64C, 0xC64D, 0xC64E, 0xC64F, 0xC652, 0xC656, 0xC657, 0xC658, 0xC659,
+ 0xC65A, 0xC65B, 0xC65E, 0xC65F, 0xC661, 0xC662, 0xC663, 0xC664, 0xC665,
+ 0xC666, 0xC667, 0xC668, 0xC669, 0xC66A, 0xC66B, 0xC66D, 0xC66E, 0xC670,
+ 0xC672, 0xC673, 0xC674, 0xC675, 0xC676, 0xC677, 0xC67A, 0xC67B, 0xC67D,
+ 0xC67E, 0xC67F, 0xC681, 0xC682, 0xC683, 0xC684, 0xC685, 0xC686, 0xC687,
+ 0xC68A, 0xC68C, 0xC68E, 0xC68F, 0xC690, 0xC691, 0xC692, 0xC693, 0xC696,
+ 0xC697, 0xC699, 0xC69A, 0xC69B, 0xC69D, 0xC69E, 0xC69F, 0xC6A0, 0xC6A1,
+ 0xC6A2, 0xC6A3, 0xC6A6, 0xC6A8, 0xC6AA, 0xC6AB, 0xC6AC, 0xC6AD, 0xC6AE,
+ 0xC6AF, 0xC6B2, 0xC6B3, 0xC6B5, 0xC6B6, 0xC6B7, 0xC6BB, 0xC6BC, 0xC6BD,
+ 0xC6BE, 0xC6BF, 0xC6C2, 0xC6C4, 0xC6C6, 0xC6C7, 0xC6C8, 0xC6C9, 0xC6CA,
+ 0xC6CB, 0xC6CE, 0xC6CF, 0xC6D1, 0xC6D2, 0xC6D3, 0xC6D5, 0xC6D6, 0xC6D7,
+ 0xC6D8, 0xC6D9, 0xC6DA, 0xC6DB, 0xC6DE, 0xC6DF, 0xC6E2, 0xC6E3, 0xC6E4,
+ 0xC6E5, 0xC6E6, 0xC6E7, 0xC6EA, 0xC6EB, 0xC6ED, 0xC6EE, 0xC6EF, 0xC6F1,
+ 0xC6F2, 0xC6F3, 0xC6F4, 0xC6F5, 0xC6F6, 0xC6F7, 0xC6FA, 0xC6FB, 0xC6FC,
+ 0xC6FE, 0xC6FF, 0xC700, 0xC701, 0xC702, 0xC703, 0xC706, 0xC707, 0xC709,
+ 0xC70A, 0xC70B, 0xC70D, 0xC70E, 0xC70F, 0xC710, 0xC711, 0xC712, 0xC713,
+ 0xC716, 0xC718, 0xC71A, 0xC71B, 0xC71C, 0xC71D, 0xC71E, 0xC71F, 0xC722,
+ 0xC723, 0xC725, 0xC726, 0xC727, 0xC729, 0xC72A, 0xC72B, 0xC72C, 0xC72D,
+ 0xC72E, 0xC72F, 0xC732, 0xC734, 0xC736, 0xC738, 0xC739, 0xC73A, 0xC73B,
+ 0xC73E, 0xC73F, 0xC741, 0xC742, 0xC743, 0xC745, 0xC746, 0xC747, 0xC748,
+ 0xC749, 0xC74B, 0xC74E, 0xC750, 0xC759, 0xC75A, 0xC75B, 0xC75D, 0xC75E,
+ 0xC75F, 0xC761, 0xC762, 0xC763, 0xC764, 0xC765, 0xC766, 0xC767, 0xC769,
+ 0xC76A, 0xC76C, 0xC76D, 0xC76E, 0xC76F, 0xC770, 0xC771, 0xC772, 0xC773,
+ 0xC776, 0xC777, 0xC779, 0xC77A, 0xC77B, 0xC77F, 0xC780, 0xC781, 0xC782,
+ 0xC786, 0xC78B, 0xC78C, 0xC78D, 0xC78F, 0xC792, 0xC793, 0xC795, 0xC799,
+ 0xC79B, 0xC79C, 0xC79D, 0xC79E, 0xC79F, 0xC7A2, 0xC7A7, 0xC7A8, 0xC7A9,
+ 0xC7AA, 0xC7AB, 0xC7AE, 0xC7AF, 0xC7B1, 0xC7B2, 0xC7B3, 0xC7B5, 0xC7B6,
+ 0xC7B7, 0xC7B8, 0xC7B9, 0xC7BA, 0xC7BB, 0xC7BE, 0xC7C2, 0xC7C3, 0xC7C4,
+ 0xC7C5, 0xC7C6, 0xC7C7, 0xC7CA, 0xC7CB, 0xC7CD, 0xC7CF, 0xC7D1, 0xC7D2,
+ 0xC7D3, 0xC7D4, 0xC7D5, 0xC7D6, 0xC7D7, 0xC7D9, 0xC7DA, 0xC7DB, 0xC7DC,
+ 0xC7DE, 0xC7DF, 0xC7E0, 0xC7E1, 0xC7E2, 0xC7E3, 0xC7E5, 0xC7E6, 0xC7E7,
+ 0xC7E9, 0xC7EA, 0xC7EB, 0xC7ED, 0xC7EE, 0xC7EF, 0xC7F0, 0xC7F1, 0xC7F2,
+ 0xC7F3, 0xC7F4, 0xC7F5, 0xC7F6, 0xC7F7, 0xC7F8, 0xC7F9, 0xC7FA, 0xC7FB,
+ 0xC7FC, 0xC7FD, 0xC7FE, 0xC7FF, 0xC802, 0xC803, 0xC805, 0xC806, 0xC807,
+ 0xC809, 0xC80B, 0xC80C, 0xC80D, 0xC80E, 0xC80F, 0xC812, 0xC814, 0xC817,
+ 0xC818, 0xC819, 0xC81A, 0xC81B, 0xC81E, 0xC81F, 0xC821, 0xC822, 0xC823,
+ 0xC825, 0xC826, 0xC827, 0xC828, 0xC829, 0xC82A, 0xC82B, 0xC82E, 0xC830,
+ 0xC832, 0xC833, 0xC834, 0xC835, 0xC836, 0xC837, 0xC839, 0xC83A, 0xC83B,
+ 0xC83D, 0xC83E, 0xC83F, 0xC841, 0xC842, 0xC843, 0xC844, 0xC845, 0xC846,
+ 0xC847, 0xC84A, 0xC84B, 0xC84E, 0xC84F, 0xC850, 0xC851, 0xC852, 0xC853,
+ 0xC855, 0xC856, 0xC857, 0xC858, 0xC859, 0xC85A, 0xC85B, 0xC85C, 0xC85D,
+ 0xC85E, 0xC85F, 0xC860, 0xC861, 0xC862, 0xC863, 0xC864, 0xC865, 0xC866,
+ 0xC867, 0xC868, 0xC869, 0xC86A, 0xC86B, 0xC86C, 0xC86D, 0xC86E, 0xC86F,
+ 0xC872, 0xC873, 0xC875, 0xC876, 0xC877, 0xC879, 0xC87B, 0xC87C, 0xC87D,
+ 0xC87E, 0xC87F, 0xC882, 0xC884, 0xC888, 0xC889, 0xC88A, 0xC88E, 0xC88F,
+ 0xC890, 0xC891, 0xC892, 0xC893, 0xC895, 0xC896, 0xC897, 0xC898, 0xC899,
+ 0xC89A, 0xC89B, 0xC89C, 0xC89E, 0xC8A0, 0xC8A2, 0xC8A3, 0xC8A4, 0xC8A5,
+ 0xC8A6, 0xC8A7, 0xC8A9, 0xC8AA, 0xC8AB, 0xC8AC, 0xC8AD, 0xC8AE, 0xC8AF,
+ 0xC8B0, 0xC8B1, 0xC8B2, 0xC8B3, 0xC8B4, 0xC8B5, 0xC8B6, 0xC8B7, 0xC8B8,
+ 0xC8B9, 0xC8BA, 0xC8BB, 0xC8BE, 0xC8BF, 0xC8C0, 0xC8C1, 0xC8C2, 0xC8C3,
+ 0xC8C5, 0xC8C6, 0xC8C7, 0xC8C9, 0xC8CA, 0xC8CB, 0xC8CD, 0xC8CE, 0xC8CF,
+ 0xC8D0, 0xC8D1, 0xC8D2, 0xC8D3, 0xC8D6, 0xC8D8, 0xC8DA, 0xC8DB, 0xC8DC,
+ 0xC8DD, 0xC8DE, 0xC8DF, 0xC8E2, 0xC8E3, 0xC8E5, 0xC8E6, 0xC8E7, 0xC8E8,
+ 0xC8E9, 0xC8EA, 0xC8EB, 0xC8EC, 0xC8ED, 0xC8EE, 0xC8EF, 0xC8F0, 0xC8F1,
+ 0xC8F2, 0xC8F3, 0xC8F4, 0xC8F6, 0xC8F7, 0xC8F8, 0xC8F9, 0xC8FA, 0xC8FB,
+ 0xC8FE, 0xC8FF, 0xC901, 0xC902, 0xC903, 0xC907, 0xC908, 0xC909, 0xC90A,
+ 0xC90B, 0xC90E, 0xC910, 0xC912, 0xC913, 0xC914, 0xC915, 0xC916, 0xC917,
+ 0xC919, 0xC91A, 0xC91B, 0xC91C, 0xC91D, 0xC91E, 0xC91F, 0xC920, 0xC921,
+ 0xC922, 0xC923, 0xC924, 0xC925, 0xC926, 0xC927, 0xC928, 0xC929, 0xC92A,
+ 0xC92B, 0xC92D, 0xC92E, 0xC92F, 0xC930, 0xC931, 0xC932, 0xC933, 0xC935,
+ 0xC936, 0xC937, 0xC938, 0xC939, 0xC93A, 0xC93B, 0xC93C, 0xC93D, 0xC93E,
+ 0xC93F, 0xC940, 0xC941, 0xC942, 0xC943, 0xC944, 0xC945, 0xC946, 0xC947,
+ 0xC948, 0xC949, 0xC94A, 0xC94B, 0xC94C, 0xC94D, 0xC94E, 0xC94F, 0xC952,
+ 0xC953, 0xC955, 0xC956, 0xC957, 0xC959, 0xC95A, 0xC95B, 0xC95C, 0xC95D,
+ 0xC95E, 0xC95F, 0xC962, 0xC964, 0xC965, 0xC966, 0xC967, 0xC968, 0xC969,
+ 0xC96A, 0xC96B, 0xC96D, 0xC96E, 0xC96F, 0xC971, 0xC972, 0xC973, 0xC975,
+ 0xC976, 0xC977, 0xC978, 0xC979, 0xC97A, 0xC97B, 0xC97D, 0xC97E, 0xC97F,
+ 0xC980, 0xC981, 0xC982, 0xC983, 0xC984, 0xC985, 0xC986, 0xC987, 0xC98A,
+ 0xC98B, 0xC98D, 0xC98E, 0xC98F, 0xC991, 0xC992, 0xC993, 0xC994, 0xC995,
+ 0xC996, 0xC997, 0xC99A, 0xC99C, 0xC99E, 0xC99F, 0xC9A0, 0xC9A1, 0xC9A2,
+ 0xC9A3, 0xC9A4, 0xC9A5, 0xC9A6, 0xC9A7, 0xC9A8, 0xC9A9, 0xC9AA, 0xC9AB,
+ 0xC9AC, 0xC9AD, 0xC9AE, 0xC9AF, 0xC9B0, 0xC9B1, 0xC9B2, 0xC9B3, 0xC9B4,
+ 0xC9B5, 0xC9B6, 0xC9B7, 0xC9B8, 0xC9B9, 0xC9BA, 0xC9BB, 0xC9BC, 0xC9BD,
+ 0xC9BE, 0xC9BF, 0xC9C2, 0xC9C3, 0xC9C5, 0xC9C6, 0xC9C9, 0xC9CB, 0xC9CC,
+ 0xC9CD, 0xC9CE, 0xC9CF, 0xC9D2, 0xC9D4, 0xC9D7, 0xC9D8, 0xC9DB, 0xC9DE,
+ 0xC9DF, 0xC9E1, 0xC9E3, 0xC9E5, 0xC9E6, 0xC9E8, 0xC9E9, 0xC9EA, 0xC9EB,
+ 0xC9EE, 0xC9F2, 0xC9F3, 0xC9F4, 0xC9F5, 0xC9F6, 0xC9F7, 0xC9FA, 0xC9FB,
+ 0xC9FD, 0xC9FE, 0xC9FF, 0xCA01, 0xCA02, 0xCA03, 0xCA04, 0xCA05, 0xCA06,
+ 0xCA07, 0xCA0A, 0xCA0E, 0xCA0F, 0xCA10, 0xCA11, 0xCA12, 0xCA13, 0xCA15,
+ 0xCA16, 0xCA17, 0xCA19, 0xCA1A, 0xCA1B, 0xCA1C, 0xCA1D, 0xCA1E, 0xCA1F,
+ 0xCA20, 0xCA21, 0xCA22, 0xCA23, 0xCA24, 0xCA25, 0xCA26, 0xCA27, 0xCA28,
+ 0xCA2A, 0xCA2B, 0xCA2C, 0xCA2D, 0xCA2E, 0xCA2F, 0xCA30, 0xCA31, 0xCA32,
+ 0xCA33, 0xCA34, 0xCA35, 0xCA36, 0xCA37, 0xCA38, 0xCA39, 0xCA3A, 0xCA3B,
+ 0xCA3C, 0xCA3D, 0xCA3E, 0xCA3F, 0xCA40, 0xCA41, 0xCA42, 0xCA43, 0xCA44,
+ 0xCA45, 0xCA46, 0xCA47, 0xCA48, 0xCA49, 0xCA4A, 0xCA4B, 0xCA4E, 0xCA4F,
+ 0xCA51, 0xCA52, 0xCA53, 0xCA55, 0xCA56, 0xCA57, 0xCA58, 0xCA59, 0xCA5A,
+ 0xCA5B, 0xCA5E, 0xCA62, 0xCA63, 0xCA64, 0xCA65, 0xCA66, 0xCA67, 0xCA69,
+ 0xCA6A, 0xCA6B, 0xCA6C, 0xCA6D, 0xCA6E, 0xCA6F, 0xCA70, 0xCA71, 0xCA72,
+ 0xCA73, 0xCA74, 0xCA75, 0xCA76, 0xCA77, 0xCA78, 0xCA79, 0xCA7A, 0xCA7B,
+ 0xCA7C, 0xCA7E, 0xCA7F, 0xCA80, 0xCA81, 0xCA82, 0xCA83, 0xCA85, 0xCA86,
+ 0xCA87, 0xCA88, 0xCA89, 0xCA8A, 0xCA8B, 0xCA8C, 0xCA8D, 0xCA8E, 0xCA8F,
+ 0xCA90, 0xCA91, 0xCA92, 0xCA93, 0xCA94, 0xCA95, 0xCA96, 0xCA97, 0xCA99,
+ 0xCA9A, 0xCA9B, 0xCA9C, 0xCA9D, 0xCA9E, 0xCA9F, 0xCAA0, 0xCAA1, 0xCAA2,
+ 0xCAA3, 0xCAA4, 0xCAA5, 0xCAA6, 0xCAA7, 0xCAA8, 0xCAA9, 0xCAAA, 0xCAAB,
+ 0xCAAC, 0xCAAD, 0xCAAE, 0xCAAF, 0xCAB0, 0xCAB1, 0xCAB2, 0xCAB3, 0xCAB4,
+ 0xCAB5, 0xCAB6, 0xCAB7, 0xCAB8, 0xCAB9, 0xCABA, 0xCABB, 0xCABE, 0xCABF,
+ 0xCAC1, 0xCAC2, 0xCAC3, 0xCAC5, 0xCAC6, 0xCAC7, 0xCAC8, 0xCAC9, 0xCACA,
+ 0xCACB, 0xCACE, 0xCAD0, 0xCAD2, 0xCAD4, 0xCAD5, 0xCAD6, 0xCAD7, 0xCADA,
+ 0xCADB, 0xCADC, 0xCADD, 0xCADE, 0xCADF, 0xCAE1, 0xCAE2, 0xCAE3, 0xCAE4,
+ 0xCAE5, 0xCAE6, 0xCAE7, 0xCAE8, 0xCAE9, 0xCAEA, 0xCAEB, 0xCAED, 0xCAEE,
+ 0xCAEF, 0xCAF0, 0xCAF1, 0xCAF2, 0xCAF3, 0xCAF5, 0xCAF6, 0xCAF7, 0xCAF8,
+ 0xCAF9, 0xCAFA, 0xCAFB, 0xCAFC, 0xCAFD, 0xCAFE, 0xCAFF, 0xCB00, 0xCB01,
+ 0xCB02, 0xCB03, 0xCB04, 0xCB05, 0xCB06, 0xCB07, 0xCB09, 0xCB0A, 0xCB0B,
+ 0xCB0C, 0xCB0D, 0xCB0E, 0xCB0F, 0xCB11, 0xCB12, 0xCB13, 0xCB15, 0xCB16,
+ 0xCB17, 0xCB19, 0xCB1A, 0xCB1B, 0xCB1C, 0xCB1D, 0xCB1E, 0xCB1F, 0xCB22,
+ 0xCB23, 0xCB24, 0xCB25, 0xCB26, 0xCB27, 0xCB28, 0xCB29, 0xCB2A, 0xCB2B,
+ 0xCB2C, 0xCB2D, 0xCB2E, 0xCB2F, 0xCB30, 0xCB31, 0xCB32, 0xCB33, 0xCB34,
+ 0xCB35, 0xCB36, 0xCB37, 0xCB38, 0xCB39, 0xCB3A, 0xCB3B, 0xCB3C, 0xCB3D,
+ 0xCB3E, 0xCB3F, 0xCB40, 0xCB42, 0xCB43, 0xCB44, 0xCB45, 0xCB46, 0xCB47,
+ 0xCB4A, 0xCB4B, 0xCB4D, 0xCB4E, 0xCB4F, 0xCB51, 0xCB52, 0xCB53, 0xCB54,
+ 0xCB55, 0xCB56, 0xCB57, 0xCB5A, 0xCB5B, 0xCB5C, 0xCB5E, 0xCB5F, 0xCB60,
+ 0xCB61, 0xCB62, 0xCB63, 0xCB65, 0xCB66, 0xCB67, 0xCB68, 0xCB69, 0xCB6A,
+ 0xCB6B, 0xCB6C, 0xCB6D, 0xCB6E, 0xCB6F, 0xCB70, 0xCB71, 0xCB72, 0xCB73,
+ 0xCB74, 0xCB75, 0xCB76, 0xCB77, 0xCB7A, 0xCB7B, 0xCB7C, 0xCB7D, 0xCB7E,
+ 0xCB7F, 0xCB80, 0xCB81, 0xCB82, 0xCB83, 0xCB84, 0xCB85, 0xCB86, 0xCB87,
+ 0xCB88, 0xCB89, 0xCB8A, 0xCB8B, 0xCB8C, 0xCB8D, 0xCB8E, 0xCB8F, 0xCB90,
+ 0xCB91, 0xCB92, 0xCB93, 0xCB94, 0xCB95, 0xCB96, 0xCB97, 0xCB98, 0xCB99,
+ 0xCB9A, 0xCB9B, 0xCB9D, 0xCB9E, 0xCB9F, 0xCBA0, 0xCBA1, 0xCBA2, 0xCBA3,
+ 0xCBA4, 0xCBA5, 0xCBA6, 0xCBA7, 0xCBA8, 0xCBA9, 0xCBAA, 0xCBAB, 0xCBAC,
+ 0xCBAD, 0xCBAE, 0xCBAF, 0xCBB0, 0xCBB1, 0xCBB2, 0xCBB3, 0xCBB4, 0xCBB5,
+ 0xCBB6, 0xCBB7, 0xCBB9, 0xCBBA, 0xCBBB, 0xCBBC, 0xCBBD, 0xCBBE, 0xCBBF,
+ 0xCBC0, 0xCBC1, 0xCBC2, 0xCBC3, 0xCBC4, 0xCBC5, 0xCBC6, 0xCBC7, 0xCBC8,
+ 0xCBC9, 0xCBCA, 0xCBCB, 0xCBCC, 0xCBCD, 0xCBCE, 0xCBCF, 0xCBD0, 0xCBD1,
+ 0xCBD2, 0xCBD3, 0xCBD5, 0xCBD6, 0xCBD7, 0xCBD8, 0xCBD9, 0xCBDA, 0xCBDB,
+ 0xCBDC, 0xCBDD, 0xCBDE, 0xCBDF, 0xCBE0, 0xCBE1, 0xCBE2, 0xCBE3, 0xCBE5,
+ 0xCBE6, 0xCBE8, 0xCBEA, 0xCBEB, 0xCBEC, 0xCBED, 0xCBEE, 0xCBEF, 0xCBF0,
+ 0xCBF1, 0xCBF2, 0xCBF3, 0xCBF4, 0xCBF5, 0xCBF6, 0xCBF7, 0xCBF8, 0xCBF9,
+ 0xCBFA, 0xCBFB, 0xCBFC, 0xCBFD, 0xCBFE, 0xCBFF, 0xCC00, 0xCC01, 0xCC02,
+ 0xCC03, 0xCC04, 0xCC05, 0xCC06, 0xCC07, 0xCC08, 0xCC09, 0xCC0A, 0xCC0B,
+ 0xCC0E, 0xCC0F, 0xCC11, 0xCC12, 0xCC13, 0xCC15, 0xCC16, 0xCC17, 0xCC18,
+ 0xCC19, 0xCC1A, 0xCC1B, 0xCC1E, 0xCC1F, 0xCC20, 0xCC23, 0xCC24, 0xCC25,
+ 0xCC26, 0xCC2A, 0xCC2B, 0xCC2D, 0xCC2F, 0xCC31, 0xCC32, 0xCC33, 0xCC34,
+ 0xCC35, 0xCC36, 0xCC37, 0xCC3A, 0xCC3F, 0xCC40, 0xCC41, 0xCC42, 0xCC43,
+ 0xCC46, 0xCC47, 0xCC49, 0xCC4A, 0xCC4B, 0xCC4D, 0xCC4E, 0xCC4F, 0xCC50,
+ 0xCC51, 0xCC52, 0xCC53, 0xCC56, 0xCC5A, 0xCC5B, 0xCC5C, 0xCC5D, 0xCC5E,
+ 0xCC5F, 0xCC61, 0xCC62, 0xCC63, 0xCC65, 0xCC67, 0xCC69, 0xCC6A, 0xCC6B,
+ 0xCC6C, 0xCC6D, 0xCC6E, 0xCC6F, 0xCC71, 0xCC72, 0xCC73, 0xCC74, 0xCC76,
+ 0xCC77, 0xCC78, 0xCC79, 0xCC7A, 0xCC7B, 0xCC7C, 0xCC7D, 0xCC7E, 0xCC7F,
+ 0xCC80, 0xCC81, 0xCC82, 0xCC83, 0xCC84, 0xCC85, 0xCC86, 0xCC87, 0xCC88,
+ 0xCC89, 0xCC8A, 0xCC8B, 0xCC8C, 0xCC8D, 0xCC8E, 0xCC8F, 0xCC90, 0xCC91,
+ 0xCC92, 0xCC93, 0xCC94, 0xCC95, 0xCC96, 0xCC97, 0xCC9A, 0xCC9B, 0xCC9D,
+ 0xCC9E, 0xCC9F, 0xCCA1, 0xCCA2, 0xCCA3, 0xCCA4, 0xCCA5, 0xCCA6, 0xCCA7,
+ 0xCCAA, 0xCCAE, 0xCCAF, 0xCCB0, 0xCCB1, 0xCCB2, 0xCCB3, 0xCCB6, 0xCCB7,
+ 0xCCB9, 0xCCBA, 0xCCBB, 0xCCBD, 0xCCBE, 0xCCBF, 0xCCC0, 0xCCC1, 0xCCC2,
+ 0xCCC3, 0xCCC6, 0xCCC8, 0xCCCA, 0xCCCB, 0xCCCC, 0xCCCD, 0xCCCE, 0xCCCF,
+ 0xCCD1, 0xCCD2, 0xCCD3, 0xCCD5, 0xCCD6, 0xCCD7, 0xCCD8, 0xCCD9, 0xCCDA,
+ 0xCCDB, 0xCCDC, 0xCCDD, 0xCCDE, 0xCCDF, 0xCCE0, 0xCCE1, 0xCCE2, 0xCCE3,
+ 0xCCE5, 0xCCE6, 0xCCE7, 0xCCE8, 0xCCE9, 0xCCEA, 0xCCEB, 0xCCED, 0xCCEE,
+ 0xCCEF, 0xCCF1, 0xCCF2, 0xCCF3, 0xCCF4, 0xCCF5, 0xCCF6, 0xCCF7, 0xCCF8,
+ 0xCCF9, 0xCCFA, 0xCCFB, 0xCCFC, 0xCCFD, 0xCCFE, 0xCCFF, 0xCD00, 0xCD02,
+ 0xCD03, 0xCD04, 0xCD05, 0xCD06, 0xCD07, 0xCD0A, 0xCD0B, 0xCD0D, 0xCD0E,
+ 0xCD0F, 0xCD11, 0xCD12, 0xCD13, 0xCD14, 0xCD15, 0xCD16, 0xCD17, 0xCD1A,
+ 0xCD1C, 0xCD1E, 0xCD1F, 0xCD20, 0xCD21, 0xCD22, 0xCD23, 0xCD25, 0xCD26,
+ 0xCD27, 0xCD29, 0xCD2A, 0xCD2B, 0xCD2D, 0xCD2E, 0xCD2F, 0xCD30, 0xCD31,
+ 0xCD32, 0xCD33, 0xCD34, 0xCD35, 0xCD36, 0xCD37, 0xCD38, 0xCD3A, 0xCD3B,
+ 0xCD3C, 0xCD3D, 0xCD3E, 0xCD3F, 0xCD40, 0xCD41, 0xCD42, 0xCD43, 0xCD44,
+ 0xCD45, 0xCD46, 0xCD47, 0xCD48, 0xCD49, 0xCD4A, 0xCD4B, 0xCD4C, 0xCD4D,
+ 0xCD4E, 0xCD4F, 0xCD50, 0xCD51, 0xCD52, 0xCD53, 0xCD54, 0xCD55, 0xCD56,
+ 0xCD57, 0xCD58, 0xCD59, 0xCD5A, 0xCD5B, 0xCD5D, 0xCD5E, 0xCD5F, 0xCD61,
+ 0xCD62, 0xCD63, 0xCD65, 0xCD66, 0xCD67, 0xCD68, 0xCD69, 0xCD6A, 0xCD6B,
+ 0xCD6E, 0xCD70, 0xCD72, 0xCD73, 0xCD74, 0xCD75, 0xCD76, 0xCD77, 0xCD79,
+ 0xCD7A, 0xCD7B, 0xCD7C, 0xCD7D, 0xCD7E, 0xCD7F, 0xCD80, 0xCD81, 0xCD82,
+ 0xCD83, 0xCD84, 0xCD85, 0xCD86, 0xCD87, 0xCD89, 0xCD8A, 0xCD8B, 0xCD8C,
+ 0xCD8D, 0xCD8E, 0xCD8F, 0xCD90, 0xCD91, 0xCD92, 0xCD93, 0xCD96, 0xCD97,
+ 0xCD99, 0xCD9A, 0xCD9B, 0xCD9D, 0xCD9E, 0xCD9F, 0xCDA0, 0xCDA1, 0xCDA2,
+ 0xCDA3, 0xCDA6, 0xCDA8, 0xCDAA, 0xCDAB, 0xCDAC, 0xCDAD, 0xCDAE, 0xCDAF,
+ 0xCDB1, 0xCDB2, 0xCDB3, 0xCDB4, 0xCDB5, 0xCDB6, 0xCDB7, 0xCDB8, 0xCDB9,
+ 0xCDBA, 0xCDBB, 0xCDBC, 0xCDBD, 0xCDBE, 0xCDBF, 0xCDC0, 0xCDC1, 0xCDC2,
+ 0xCDC3, 0xCDC5, 0xCDC6, 0xCDC7, 0xCDC8, 0xCDC9, 0xCDCA, 0xCDCB, 0xCDCD,
+ 0xCDCE, 0xCDCF, 0xCDD1, 0xCDD2, 0xCDD3, 0xCDD4, 0xCDD5, 0xCDD6, 0xCDD7,
+ 0xCDD8, 0xCDD9, 0xCDDA, 0xCDDB, 0xCDDC, 0xCDDD, 0xCDDE, 0xCDDF, 0xCDE0,
+ 0xCDE1, 0xCDE2, 0xCDE3, 0xCDE4, 0xCDE5, 0xCDE6, 0xCDE7, 0xCDE9, 0xCDEA,
+ 0xCDEB, 0xCDED, 0xCDEE, 0xCDEF, 0xCDF1, 0xCDF2, 0xCDF3, 0xCDF4, 0xCDF5,
+ 0xCDF6, 0xCDF7, 0xCDFA, 0xCDFC, 0xCDFE, 0xCDFF, 0xCE00, 0xCE01, 0xCE02,
+ 0xCE03, 0xCE05, 0xCE06, 0xCE07, 0xCE09, 0xCE0A, 0xCE0B, 0xCE0D, 0xCE0E,
+ 0xCE0F, 0xCE10, 0xCE11, 0xCE12, 0xCE13, 0xCE15, 0xCE16, 0xCE17, 0xCE18,
+ 0xCE1A, 0xCE1B, 0xCE1C, 0xCE1D, 0xCE1E, 0xCE1F, 0xCE22, 0xCE23, 0xCE25,
+ 0xCE26, 0xCE27, 0xCE29, 0xCE2A, 0xCE2B, 0xCE2C, 0xCE2D, 0xCE2E, 0xCE2F,
+ 0xCE32, 0xCE34, 0xCE36, 0xCE37, 0xCE38, 0xCE39, 0xCE3A, 0xCE3B, 0xCE3C,
+ 0xCE3D, 0xCE3E, 0xCE3F, 0xCE40, 0xCE41, 0xCE42, 0xCE43, 0xCE44, 0xCE45,
+ 0xCE46, 0xCE47, 0xCE48, 0xCE49, 0xCE4A, 0xCE4B, 0xCE4C, 0xCE4D, 0xCE4E,
+ 0xCE4F, 0xCE50, 0xCE51, 0xCE52, 0xCE53, 0xCE54, 0xCE55, 0xCE56, 0xCE57,
+ 0xCE5A, 0xCE5B, 0xCE5D, 0xCE5E, 0xCE62, 0xCE63, 0xCE64, 0xCE65, 0xCE66,
+ 0xCE67, 0xCE6A, 0xCE6C, 0xCE6E, 0xCE6F, 0xCE70, 0xCE71, 0xCE72, 0xCE73,
+ 0xCE76, 0xCE77, 0xCE79, 0xCE7A, 0xCE7B, 0xCE7D, 0xCE7E, 0xCE7F, 0xCE80,
+ 0xCE81, 0xCE82, 0xCE83, 0xCE86, 0xCE88, 0xCE8A, 0xCE8B, 0xCE8C, 0xCE8D,
+ 0xCE8E, 0xCE8F, 0xCE92, 0xCE93, 0xCE95, 0xCE96, 0xCE97, 0xCE99, 0xCE9A,
+ 0xCE9B, 0xCE9C, 0xCE9D, 0xCE9E, 0xCE9F, 0xCEA2, 0xCEA6, 0xCEA7, 0xCEA8,
+ 0xCEA9, 0xCEAA, 0xCEAB, 0xCEAE, 0xCEAF, 0xCEB0, 0xCEB1, 0xCEB2, 0xCEB3,
+ 0xCEB4, 0xCEB5, 0xCEB6, 0xCEB7, 0xCEB8, 0xCEB9, 0xCEBA, 0xCEBB, 0xCEBC,
+ 0xCEBD, 0xCEBE, 0xCEBF, 0xCEC0, 0xCEC2, 0xCEC3, 0xCEC4, 0xCEC5, 0xCEC6,
+ 0xCEC7, 0xCEC8, 0xCEC9, 0xCECA, 0xCECB, 0xCECC, 0xCECD, 0xCECE, 0xCECF,
+ 0xCED0, 0xCED1, 0xCED2, 0xCED3, 0xCED4, 0xCED5, 0xCED6, 0xCED7, 0xCED8,
+ 0xCED9, 0xCEDA, 0xCEDB, 0xCEDC, 0xCEDD, 0xCEDE, 0xCEDF, 0xCEE0, 0xCEE1,
+ 0xCEE2, 0xCEE3, 0xCEE6, 0xCEE7, 0xCEE9, 0xCEEA, 0xCEED, 0xCEEE, 0xCEEF,
+ 0xCEF0, 0xCEF1, 0xCEF2, 0xCEF3, 0xCEF6, 0xCEFA, 0xCEFB, 0xCEFC, 0xCEFD,
+ 0xCEFE, 0xCEFF, 0xCF02, 0xCF03, 0xCF05, 0xCF06, 0xCF07, 0xCF09, 0xCF0A,
+ 0xCF0B, 0xCF0C, 0xCF0D, 0xCF0E, 0xCF0F, 0xCF12, 0xCF14, 0xCF16, 0xCF17,
+ 0xCF18, 0xCF19, 0xCF1A, 0xCF1B, 0xCF1D, 0xCF1E, 0xCF1F, 0xCF21, 0xCF22,
+ 0xCF23, 0xCF25, 0xCF26, 0xCF27, 0xCF28, 0xCF29, 0xCF2A, 0xCF2B, 0xCF2E,
+ 0xCF32, 0xCF33, 0xCF34, 0xCF35, 0xCF36, 0xCF37, 0xCF39, 0xCF3A, 0xCF3B,
+ 0xCF3C, 0xCF3D, 0xCF3E, 0xCF3F, 0xCF40, 0xCF41, 0xCF42, 0xCF43, 0xCF44,
+ 0xCF45, 0xCF46, 0xCF47, 0xCF48, 0xCF49, 0xCF4A, 0xCF4B, 0xCF4C, 0xCF4D,
+ 0xCF4E, 0xCF4F, 0xCF50, 0xCF51, 0xCF52, 0xCF53, 0xCF56, 0xCF57, 0xCF59,
+ 0xCF5A, 0xCF5B, 0xCF5D, 0xCF5E, 0xCF5F, 0xCF60, 0xCF61, 0xCF62, 0xCF63,
+ 0xCF66, 0xCF68, 0xCF6A, 0xCF6B, 0xCF6C, 0xCF6D, 0xCF6E, 0xCF6F, 0xCF72,
+ 0xCF73, 0xCF75, 0xCF76, 0xCF77, 0xCF79, 0xCF7A, 0xCF7B, 0xCF7C, 0xCF7D,
+ 0xCF7E, 0xCF7F, 0xCF81, 0xCF82, 0xCF83, 0xCF84, 0xCF86, 0xCF87, 0xCF88,
+ 0xCF89, 0xCF8A, 0xCF8B, 0xCF8D, 0xCF8E, 0xCF8F, 0xCF90, 0xCF91, 0xCF92,
+ 0xCF93, 0xCF94, 0xCF95, 0xCF96, 0xCF97, 0xCF98, 0xCF99, 0xCF9A, 0xCF9B,
+ 0xCF9C, 0xCF9D, 0xCF9E, 0xCF9F, 0xCFA0, 0xCFA2, 0xCFA3, 0xCFA4, 0xCFA5,
+ 0xCFA6, 0xCFA7, 0xCFA9, 0xCFAA, 0xCFAB, 0xCFAC, 0xCFAD, 0xCFAE, 0xCFAF,
+ 0xCFB1, 0xCFB2, 0xCFB3, 0xCFB4, 0xCFB5, 0xCFB6, 0xCFB7, 0xCFB8, 0xCFB9,
+ 0xCFBA, 0xCFBB, 0xCFBC, 0xCFBD, 0xCFBE, 0xCFBF, 0xCFC0, 0xCFC1, 0xCFC2,
+ 0xCFC3, 0xCFC5, 0xCFC6, 0xCFC7, 0xCFC8, 0xCFC9, 0xCFCA, 0xCFCB, 0xCFCC,
+ 0xCFCD, 0xCFCE, 0xCFCF, 0xCFD0, 0xCFD1, 0xCFD2, 0xCFD3, 0xCFD4, 0xCFD5,
+ 0xCFD6, 0xCFD7, 0xCFD8, 0xCFD9, 0xCFDA, 0xCFDB, 0xCFDC, 0xCFDD, 0xCFDE,
+ 0xCFDF, 0xCFE2, 0xCFE3, 0xCFE5, 0xCFE6, 0xCFE7, 0xCFE9, 0xCFEA, 0xCFEB,
+ 0xCFEC, 0xCFED, 0xCFEE, 0xCFEF, 0xCFF2, 0xCFF4, 0xCFF6, 0xCFF7, 0xCFF8,
+ 0xCFF9, 0xCFFA, 0xCFFB, 0xCFFD, 0xCFFE, 0xCFFF, 0xD001, 0xD002, 0xD003,
+ 0xD005, 0xD006, 0xD007, 0xD008, 0xD009, 0xD00A, 0xD00B, 0xD00C, 0xD00D,
+ 0xD00E, 0xD00F, 0xD010, 0xD012, 0xD013, 0xD014, 0xD015, 0xD016, 0xD017,
+ 0xD019, 0xD01A, 0xD01B, 0xD01C, 0xD01D, 0xD01E, 0xD01F, 0xD020, 0xD021,
+ 0xD022, 0xD023, 0xD024, 0xD025, 0xD026, 0xD027, 0xD028, 0xD029, 0xD02A,
+ 0xD02B, 0xD02C, 0xD02E, 0xD02F, 0xD030, 0xD031, 0xD032, 0xD033, 0xD036,
+ 0xD037, 0xD039, 0xD03A, 0xD03B, 0xD03D, 0xD03E, 0xD03F, 0xD040, 0xD041,
+ 0xD042, 0xD043, 0xD046, 0xD048, 0xD04A, 0xD04B, 0xD04C, 0xD04D, 0xD04E,
+ 0xD04F, 0xD051, 0xD052, 0xD053, 0xD055, 0xD056, 0xD057, 0xD059, 0xD05A,
+ 0xD05B, 0xD05C, 0xD05D, 0xD05E, 0xD05F, 0xD061, 0xD062, 0xD063, 0xD064,
+ 0xD065, 0xD066, 0xD067, 0xD068, 0xD069, 0xD06A, 0xD06B, 0xD06E, 0xD06F,
+ 0xD071, 0xD072, 0xD073, 0xD075, 0xD076, 0xD077, 0xD078, 0xD079, 0xD07A,
+ 0xD07B, 0xD07E, 0xD07F, 0xD080, 0xD082, 0xD083, 0xD084, 0xD085, 0xD086,
+ 0xD087, 0xD088, 0xD089, 0xD08A, 0xD08B, 0xD08C, 0xD08D, 0xD08E, 0xD08F,
+ 0xD090, 0xD091, 0xD092, 0xD093, 0xD094, 0xD095, 0xD096, 0xD097, 0xD098,
+ 0xD099, 0xD09A, 0xD09B, 0xD09C, 0xD09D, 0xD09E, 0xD09F, 0xD0A0, 0xD0A1,
+ 0xD0A2, 0xD0A3, 0xD0A6, 0xD0A7, 0xD0A9, 0xD0AA, 0xD0AB, 0xD0AD, 0xD0AE,
+ 0xD0AF, 0xD0B0, 0xD0B1, 0xD0B2, 0xD0B3, 0xD0B6, 0xD0B8, 0xD0BA, 0xD0BB,
+ 0xD0BC, 0xD0BD, 0xD0BE, 0xD0BF, 0xD0C2, 0xD0C3, 0xD0C5, 0xD0C6, 0xD0C7,
+ 0xD0CA, 0xD0CB, 0xD0CC, 0xD0CD, 0xD0CE, 0xD0CF, 0xD0D2, 0xD0D6, 0xD0D7,
+ 0xD0D8, 0xD0D9, 0xD0DA, 0xD0DB, 0xD0DE, 0xD0DF, 0xD0E1, 0xD0E2, 0xD0E3,
+ 0xD0E5, 0xD0E6, 0xD0E7, 0xD0E8, 0xD0E9, 0xD0EA, 0xD0EB, 0xD0EE, 0xD0F2,
+ 0xD0F3, 0xD0F4, 0xD0F5, 0xD0F6, 0xD0F7, 0xD0F9, 0xD0FA, 0xD0FB, 0xD0FC,
+ 0xD0FD, 0xD0FE, 0xD0FF, 0xD100, 0xD101, 0xD102, 0xD103, 0xD104, 0xD105,
+ 0xD106, 0xD107, 0xD108, 0xD109, 0xD10A, 0xD10B, 0xD10C, 0xD10E, 0xD10F,
+ 0xD110, 0xD111, 0xD112, 0xD113, 0xD114, 0xD115, 0xD116, 0xD117, 0xD118,
+ 0xD119, 0xD11A, 0xD11B, 0xD11C, 0xD11D, 0xD11E, 0xD11F, 0xD120, 0xD121,
+ 0xD122, 0xD123, 0xD124, 0xD125, 0xD126, 0xD127, 0xD128, 0xD129, 0xD12A,
+ 0xD12B, 0xD12C, 0xD12D, 0xD12E, 0xD12F, 0xD132, 0xD133, 0xD135, 0xD136,
+ 0xD137, 0xD139, 0xD13B, 0xD13C, 0xD13D, 0xD13E, 0xD13F, 0xD142, 0xD146,
+ 0xD147, 0xD148, 0xD149, 0xD14A, 0xD14B, 0xD14E, 0xD14F, 0xD151, 0xD152,
+ 0xD153, 0xD155, 0xD156, 0xD157, 0xD158, 0xD159, 0xD15A, 0xD15B, 0xD15E,
+ 0xD160, 0xD162, 0xD163, 0xD164, 0xD165, 0xD166, 0xD167, 0xD169, 0xD16A,
+ 0xD16B, 0xD16D, 0xD16E, 0xD16F, 0xD170, 0xD171, 0xD172, 0xD173, 0xD174,
+ 0xD175, 0xD176, 0xD177, 0xD178, 0xD179, 0xD17A, 0xD17B, 0xD17D, 0xD17E,
+ 0xD17F, 0xD180, 0xD181, 0xD182, 0xD183, 0xD185, 0xD186, 0xD187, 0xD189,
+ 0xD18A, 0xD18B, 0xD18C, 0xD18D, 0xD18E, 0xD18F, 0xD190, 0xD191, 0xD192,
+ 0xD193, 0xD194, 0xD195, 0xD196, 0xD197, 0xD198, 0xD199, 0xD19A, 0xD19B,
+ 0xD19C, 0xD19D, 0xD19E, 0xD19F, 0xD1A2, 0xD1A3, 0xD1A5, 0xD1A6, 0xD1A7,
+ 0xD1A9, 0xD1AA, 0xD1AB, 0xD1AC, 0xD1AD, 0xD1AE, 0xD1AF, 0xD1B2, 0xD1B4,
+ 0xD1B6, 0xD1B7, 0xD1B8, 0xD1B9, 0xD1BB, 0xD1BD, 0xD1BE, 0xD1BF, 0xD1C1,
+ 0xD1C2, 0xD1C3, 0xD1C4, 0xD1C5, 0xD1C6, 0xD1C7, 0xD1C8, 0xD1C9, 0xD1CA,
+ 0xD1CB, 0xD1CC, 0xD1CD, 0xD1CE, 0xD1CF, 0xD1D0, 0xD1D1, 0xD1D2, 0xD1D3,
+ 0xD1D4, 0xD1D5, 0xD1D6, 0xD1D7, 0xD1D9, 0xD1DA, 0xD1DB, 0xD1DC, 0xD1DD,
+ 0xD1DE, 0xD1DF, 0xD1E0, 0xD1E1, 0xD1E2, 0xD1E3, 0xD1E4, 0xD1E5, 0xD1E6,
+ 0xD1E7, 0xD1E8, 0xD1E9, 0xD1EA, 0xD1EB, 0xD1EC, 0xD1ED, 0xD1EE, 0xD1EF,
+ 0xD1F0, 0xD1F1, 0xD1F2, 0xD1F3, 0xD1F5, 0xD1F6, 0xD1F7, 0xD1F9, 0xD1FA,
+ 0xD1FB, 0xD1FC, 0xD1FD, 0xD1FE, 0xD1FF, 0xD200, 0xD201, 0xD202, 0xD203,
+ 0xD204, 0xD205, 0xD206, 0xD208, 0xD20A, 0xD20B, 0xD20C, 0xD20D, 0xD20E,
+ 0xD20F, 0xD211, 0xD212, 0xD213, 0xD214, 0xD215, 0xD216, 0xD217, 0xD218,
+ 0xD219, 0xD21A, 0xD21B, 0xD21C, 0xD21D, 0xD21E, 0xD21F, 0xD220, 0xD221,
+ 0xD222, 0xD223, 0xD224, 0xD225, 0xD226, 0xD227, 0xD228, 0xD229, 0xD22A,
+ 0xD22B, 0xD22E, 0xD22F, 0xD231, 0xD232, 0xD233, 0xD235, 0xD236, 0xD237,
+ 0xD238, 0xD239, 0xD23A, 0xD23B, 0xD23E, 0xD240, 0xD242, 0xD243, 0xD244,
+ 0xD245, 0xD246, 0xD247, 0xD249, 0xD24A, 0xD24B, 0xD24C, 0xD24D, 0xD24E,
+ 0xD24F, 0xD250, 0xD251, 0xD252, 0xD253, 0xD254, 0xD255, 0xD256, 0xD257,
+ 0xD258, 0xD259, 0xD25A, 0xD25B, 0xD25D, 0xD25E, 0xD25F, 0xD260, 0xD261,
+ 0xD262, 0xD263, 0xD265, 0xD266, 0xD267, 0xD268, 0xD269, 0xD26A, 0xD26B,
+ 0xD26C, 0xD26D, 0xD26E, 0xD26F, 0xD270, 0xD271, 0xD272, 0xD273, 0xD274,
+ 0xD275, 0xD276, 0xD277, 0xD278, 0xD279, 0xD27A, 0xD27B, 0xD27C, 0xD27D,
+ 0xD27E, 0xD27F, 0xD282, 0xD283, 0xD285, 0xD286, 0xD287, 0xD289, 0xD28A,
+ 0xD28B, 0xD28C, 0xD28D, 0xD28E, 0xD28F, 0xD292, 0xD293, 0xD294, 0xD296,
+ 0xD297, 0xD298, 0xD299, 0xD29A, 0xD29B, 0xD29D, 0xD29E, 0xD29F, 0xD2A1,
+ 0xD2A2, 0xD2A3, 0xD2A5, 0xD2A6, 0xD2A7, 0xD2A8, 0xD2A9, 0xD2AA, 0xD2AB,
+ 0xD2AD, 0xD2AE, 0xD2AF, 0xD2B0, 0xD2B2, 0xD2B3, 0xD2B4, 0xD2B5, 0xD2B6,
+ 0xD2B7, 0xD2BA, 0xD2BB, 0xD2BD, 0xD2BE, 0xD2C1, 0xD2C3, 0xD2C4, 0xD2C5,
+ 0xD2C6, 0xD2C7, 0xD2CA, 0xD2CC, 0xD2CD, 0xD2CE, 0xD2CF, 0xD2D0, 0xD2D1,
+ 0xD2D2, 0xD2D3, 0xD2D5, 0xD2D6, 0xD2D7, 0xD2D9, 0xD2DA, 0xD2DB, 0xD2DD,
+ 0xD2DE, 0xD2DF, 0xD2E0, 0xD2E1, 0xD2E2, 0xD2E3, 0xD2E6, 0xD2E7, 0xD2E8,
+ 0xD2E9, 0xD2EA, 0xD2EB, 0xD2EC, 0xD2ED, 0xD2EE, 0xD2EF, 0xD2F2, 0xD2F3,
+ 0xD2F5, 0xD2F6, 0xD2F7, 0xD2F9, 0xD2FA, 0xD2FB, 0xD2FC, 0xD2FD, 0xD2FE,
+ 0xD2FF, 0xD302, 0xD304, 0xD306, 0xD307, 0xD308, 0xD309, 0xD30A, 0xD30B,
+ 0xD30F, 0xD311, 0xD312, 0xD313, 0xD315, 0xD317, 0xD318, 0xD319, 0xD31A,
+ 0xD31B, 0xD31E, 0xD322, 0xD323, 0xD324, 0xD326, 0xD327, 0xD32A, 0xD32B,
+ 0xD32D, 0xD32E, 0xD32F, 0xD331, 0xD332, 0xD333, 0xD334, 0xD335, 0xD336,
+ 0xD337, 0xD33A, 0xD33E, 0xD33F, 0xD340, 0xD341, 0xD342, 0xD343, 0xD346,
+ 0xD347, 0xD348, 0xD349, 0xD34A, 0xD34B, 0xD34C, 0xD34D, 0xD34E, 0xD34F,
+ 0xD350, 0xD351, 0xD352, 0xD353, 0xD354, 0xD355, 0xD356, 0xD357, 0xD358,
+ 0xD359, 0xD35A, 0xD35B, 0xD35C, 0xD35D, 0xD35E, 0xD35F, 0xD360, 0xD361,
+ 0xD362, 0xD363, 0xD364, 0xD365, 0xD366, 0xD367, 0xD368, 0xD369, 0xD36A,
+ 0xD36B, 0xD36C, 0xD36D, 0xD36E, 0xD36F, 0xD370, 0xD371, 0xD372, 0xD373,
+ 0xD374, 0xD375, 0xD376, 0xD377, 0xD378, 0xD379, 0xD37A, 0xD37B, 0xD37E,
+ 0xD37F, 0xD381, 0xD382, 0xD383, 0xD385, 0xD386, 0xD387, 0xD388, 0xD389,
+ 0xD38A, 0xD38B, 0xD38E, 0xD392, 0xD393, 0xD394, 0xD395, 0xD396, 0xD397,
+ 0xD39A, 0xD39B, 0xD39D, 0xD39E, 0xD39F, 0xD3A1, 0xD3A2, 0xD3A3, 0xD3A4,
+ 0xD3A5, 0xD3A6, 0xD3A7, 0xD3AA, 0xD3AC, 0xD3AE, 0xD3AF, 0xD3B0, 0xD3B1,
+ 0xD3B2, 0xD3B3, 0xD3B5, 0xD3B6, 0xD3B7, 0xD3B9, 0xD3BA, 0xD3BB, 0xD3BD,
+ 0xD3BE, 0xD3BF, 0xD3C0, 0xD3C1, 0xD3C2, 0xD3C3, 0xD3C6, 0xD3C7, 0xD3CA,
+ 0xD3CB, 0xD3CC, 0xD3CD, 0xD3CE, 0xD3CF, 0xD3D1, 0xD3D2, 0xD3D3, 0xD3D4,
+ 0xD3D5, 0xD3D6, 0xD3D7, 0xD3D9, 0xD3DA, 0xD3DB, 0xD3DC, 0xD3DD, 0xD3DE,
+ 0xD3DF, 0xD3E0, 0xD3E2, 0xD3E4, 0xD3E5, 0xD3E6, 0xD3E7, 0xD3E8, 0xD3E9,
+ 0xD3EA, 0xD3EB, 0xD3EE, 0xD3EF, 0xD3F1, 0xD3F2, 0xD3F3, 0xD3F5, 0xD3F6,
+ 0xD3F7, 0xD3F8, 0xD3F9, 0xD3FA, 0xD3FB, 0xD3FE, 0xD400, 0xD402, 0xD403,
+ 0xD404, 0xD405, 0xD406, 0xD407, 0xD409, 0xD40A, 0xD40B, 0xD40C, 0xD40D,
+ 0xD40E, 0xD40F, 0xD410, 0xD411, 0xD412, 0xD413, 0xD414, 0xD415, 0xD416,
+ 0xD417, 0xD418, 0xD419, 0xD41A, 0xD41B, 0xD41C, 0xD41E, 0xD41F, 0xD420,
+ 0xD421, 0xD422, 0xD423, 0xD424, 0xD425, 0xD426, 0xD427, 0xD428, 0xD429,
+ 0xD42A, 0xD42B, 0xD42C, 0xD42D, 0xD42E, 0xD42F, 0xD430, 0xD431, 0xD432,
+ 0xD433, 0xD434, 0xD435, 0xD436, 0xD437, 0xD438, 0xD439, 0xD43A, 0xD43B,
+ 0xD43C, 0xD43D, 0xD43E, 0xD43F, 0xD441, 0xD442, 0xD443, 0xD445, 0xD446,
+ 0xD447, 0xD448, 0xD449, 0xD44A, 0xD44B, 0xD44C, 0xD44D, 0xD44E, 0xD44F,
+ 0xD450, 0xD451, 0xD452, 0xD453, 0xD454, 0xD455, 0xD456, 0xD457, 0xD458,
+ 0xD459, 0xD45A, 0xD45B, 0xD45D, 0xD45E, 0xD45F, 0xD461, 0xD462, 0xD463,
+ 0xD465, 0xD466, 0xD467, 0xD468, 0xD469, 0xD46A, 0xD46B, 0xD46C, 0xD46E,
+ 0xD470, 0xD471, 0xD472, 0xD473, 0xD474, 0xD475, 0xD476, 0xD477, 0xD47A,
+ 0xD47B, 0xD47D, 0xD47E, 0xD481, 0xD483, 0xD484, 0xD485, 0xD486, 0xD487,
+ 0xD48A, 0xD48C, 0xD48E, 0xD48F, 0xD490, 0xD491, 0xD492, 0xD493, 0xD495,
+ 0xD496, 0xD497, 0xD498, 0xD499, 0xD49A, 0xD49B, 0xD49C, 0xD49D, 0xD49E,
+ 0xD49F, 0xD4A0, 0xD4A1, 0xD4A2, 0xD4A3, 0xD4A4, 0xD4A5, 0xD4A6, 0xD4A7,
+ 0xD4A8, 0xD4AA, 0xD4AB, 0xD4AC, 0xD4AD, 0xD4AE, 0xD4AF, 0xD4B0, 0xD4B1,
+ 0xD4B2, 0xD4B3, 0xD4B4, 0xD4B5, 0xD4B6, 0xD4B7, 0xD4B8, 0xD4B9, 0xD4BA,
+ 0xD4BB, 0xD4BC, 0xD4BD, 0xD4BE, 0xD4BF, 0xD4C0, 0xD4C1, 0xD4C2, 0xD4C3,
+ 0xD4C4, 0xD4C5, 0xD4C6, 0xD4C7, 0xD4C8, 0xD4C9, 0xD4CA, 0xD4CB, 0xD4CD,
+ 0xD4CE, 0xD4CF, 0xD4D1, 0xD4D2, 0xD4D3, 0xD4D5, 0xD4D6, 0xD4D7, 0xD4D8,
+ 0xD4D9, 0xD4DA, 0xD4DB, 0xD4DD, 0xD4DE, 0xD4E0, 0xD4E1, 0xD4E2, 0xD4E3,
+ 0xD4E4, 0xD4E5, 0xD4E6, 0xD4E7, 0xD4E9, 0xD4EA, 0xD4EB, 0xD4ED, 0xD4EE,
+ 0xD4EF, 0xD4F1, 0xD4F2, 0xD4F3, 0xD4F4, 0xD4F5, 0xD4F6, 0xD4F7, 0xD4F9,
+ 0xD4FA, 0xD4FC, 0xD4FE, 0xD4FF, 0xD500, 0xD501, 0xD502, 0xD503, 0xD505,
+ 0xD506, 0xD507, 0xD509, 0xD50A, 0xD50B, 0xD50D, 0xD50E, 0xD50F, 0xD510,
+ 0xD511, 0xD512, 0xD513, 0xD516, 0xD518, 0xD519, 0xD51A, 0xD51B, 0xD51C,
+ 0xD51D, 0xD51E, 0xD51F, 0xD520, 0xD521, 0xD522, 0xD523, 0xD524, 0xD525,
+ 0xD526, 0xD527, 0xD528, 0xD529, 0xD52A, 0xD52B, 0xD52C, 0xD52D, 0xD52E,
+ 0xD52F, 0xD530, 0xD531, 0xD532, 0xD533, 0xD534, 0xD535, 0xD536, 0xD537,
+ 0xD538, 0xD539, 0xD53A, 0xD53B, 0xD53E, 0xD53F, 0xD541, 0xD542, 0xD543,
+ 0xD545, 0xD546, 0xD547, 0xD548, 0xD549, 0xD54A, 0xD54B, 0xD54E, 0xD550,
+ 0xD552, 0xD553, 0xD554, 0xD555, 0xD556, 0xD557, 0xD55A, 0xD55B, 0xD55D,
+ 0xD55E, 0xD55F, 0xD561, 0xD562, 0xD563, 0xD564, 0xD566, 0xD567, 0xD56A,
+ 0xD56C, 0xD56E, 0xD56F, 0xD570, 0xD571, 0xD572, 0xD573, 0xD576, 0xD577,
+ 0xD579, 0xD57A, 0xD57B, 0xD57D, 0xD57E, 0xD57F, 0xD580, 0xD581, 0xD582,
+ 0xD583, 0xD586, 0xD58A, 0xD58B, 0xD58C, 0xD58D, 0xD58E, 0xD58F, 0xD591,
+ 0xD592, 0xD593, 0xD594, 0xD595, 0xD596, 0xD597, 0xD598, 0xD599, 0xD59A,
+ 0xD59B, 0xD59C, 0xD59D, 0xD59E, 0xD59F, 0xD5A0, 0xD5A1, 0xD5A2, 0xD5A3,
+ 0xD5A4, 0xD5A6, 0xD5A7, 0xD5A8, 0xD5A9, 0xD5AA, 0xD5AB, 0xD5AC, 0xD5AD,
+ 0xD5AE, 0xD5AF, 0xD5B0, 0xD5B1, 0xD5B2, 0xD5B3, 0xD5B4, 0xD5B5, 0xD5B6,
+ 0xD5B7, 0xD5B8, 0xD5B9, 0xD5BA, 0xD5BB, 0xD5BC, 0xD5BD, 0xD5BE, 0xD5BF,
+ 0xD5C0, 0xD5C1, 0xD5C2, 0xD5C3, 0xD5C4, 0xD5C5, 0xD5C6, 0xD5C7, 0xD5CA,
+ 0xD5CB, 0xD5CD, 0xD5CE, 0xD5CF, 0xD5D1, 0xD5D3, 0xD5D4, 0xD5D5, 0xD5D6,
+ 0xD5D7, 0xD5DA, 0xD5DC, 0xD5DE, 0xD5DF, 0xD5E0, 0xD5E1, 0xD5E2, 0xD5E3,
+ 0xD5E6, 0xD5E7, 0xD5E9, 0xD5EA, 0xD5EB, 0xD5ED, 0xD5EE, 0xD5EF, 0xD5F0,
+ 0xD5F1, 0xD5F2, 0xD5F3, 0xD5F6, 0xD5F8, 0xD5FA, 0xD5FB, 0xD5FC, 0xD5FD,
+ 0xD5FE, 0xD5FF, 0xD602, 0xD603, 0xD605, 0xD606, 0xD607, 0xD609, 0xD60A,
+ 0xD60B, 0xD60C, 0xD60D, 0xD60E, 0xD60F, 0xD612, 0xD616, 0xD617, 0xD618,
+ 0xD619, 0xD61A, 0xD61B, 0xD61D, 0xD61E, 0xD61F, 0xD621, 0xD622, 0xD623,
+ 0xD625, 0xD626, 0xD627, 0xD628, 0xD629, 0xD62A, 0xD62B, 0xD62C, 0xD62E,
+ 0xD62F, 0xD630, 0xD631, 0xD632, 0xD633, 0xD634, 0xD635, 0xD636, 0xD637,
+ 0xD63A, 0xD63B, 0xD63D, 0xD63E, 0xD63F, 0xD641, 0xD642, 0xD643, 0xD644,
+ 0xD646, 0xD647, 0xD64A, 0xD64C, 0xD64E, 0xD64F, 0xD650, 0xD652, 0xD653,
+ 0xD656, 0xD657, 0xD659, 0xD65A, 0xD65B, 0xD65D, 0xD65E, 0xD65F, 0xD660,
+ 0xD661, 0xD662, 0xD663, 0xD664, 0xD665, 0xD666, 0xD668, 0xD66A, 0xD66B,
+ 0xD66C, 0xD66D, 0xD66E, 0xD66F, 0xD672, 0xD673, 0xD675, 0xD676, 0xD677,
+ 0xD678, 0xD679, 0xD67A, 0xD67B, 0xD67C, 0xD67D, 0xD67E, 0xD67F, 0xD680,
+ 0xD681, 0xD682, 0xD684, 0xD686, 0xD687, 0xD688, 0xD689, 0xD68A, 0xD68B,
+ 0xD68E, 0xD68F, 0xD691, 0xD692, 0xD693, 0xD695, 0xD696, 0xD697, 0xD698,
+ 0xD699, 0xD69A, 0xD69B, 0xD69C, 0xD69E, 0xD6A0, 0xD6A2, 0xD6A3, 0xD6A4,
+ 0xD6A5, 0xD6A6, 0xD6A7, 0xD6A9, 0xD6AA, 0xD6AB, 0xD6AD, 0xD6AE, 0xD6AF,
+ 0xD6B1, 0xD6B2, 0xD6B3, 0xD6B4, 0xD6B5, 0xD6B6, 0xD6B7, 0xD6B8, 0xD6BA,
+ 0xD6BC, 0xD6BD, 0xD6BE, 0xD6BF, 0xD6C0, 0xD6C1, 0xD6C2, 0xD6C3, 0xD6C6,
+ 0xD6C7, 0xD6C9, 0xD6CA, 0xD6CB, 0xD6CD, 0xD6CE, 0xD6CF, 0xD6D0, 0xD6D2,
+ 0xD6D3, 0xD6D5, 0xD6D6, 0xD6D8, 0xD6DA, 0xD6DB, 0xD6DC, 0xD6DD, 0xD6DE,
+ 0xD6DF, 0xD6E1, 0xD6E2, 0xD6E3, 0xD6E5, 0xD6E6, 0xD6E7, 0xD6E9, 0xD6EA,
+ 0xD6EB, 0xD6EC, 0xD6ED, 0xD6EE, 0xD6EF, 0xD6F1, 0xD6F2, 0xD6F3, 0xD6F4,
+ 0xD6F6, 0xD6F7, 0xD6F8, 0xD6F9, 0xD6FA, 0xD6FB, 0xD6FE, 0xD6FF, 0xD701,
+ 0xD702, 0xD703, 0xD705, 0xD706, 0xD707, 0xD708, 0xD709, 0xD70A, 0xD70B,
+ 0xD70C, 0xD70D, 0xD70E, 0xD70F, 0xD710, 0xD712, 0xD713, 0xD714, 0xD715,
+ 0xD716, 0xD717, 0xD71A, 0xD71B, 0xD71D, 0xD71E, 0xD71F, 0xD721, 0xD722,
+ 0xD723, 0xD724, 0xD725, 0xD726, 0xD727, 0xD72A, 0xD72C, 0xD72E, 0xD72F,
+ 0xD730, 0xD731, 0xD732, 0xD733, 0xD736, 0xD737, 0xD739, 0xD73A, 0xD73B,
+ 0xD73D, 0xD73E, 0xD73F, 0xD740, 0xD741, 0xD742, 0xD743, 0xD745, 0xD746,
+ 0xD748, 0xD74A, 0xD74B, 0xD74C, 0xD74D, 0xD74E, 0xD74F, 0xD752, 0xD753,
+ 0xD755, 0xD75A, 0xD75B, 0xD75C, 0xD75D, 0xD75E, 0xD75F, 0xD762, 0xD764,
+ 0xD766, 0xD767, 0xD768, 0xD76A, 0xD76B, 0xD76D, 0xD76E, 0xD76F, 0xD771,
+ 0xD772, 0xD773, 0xD775, 0xD776, 0xD777, 0xD778, 0xD779, 0xD77A, 0xD77B,
+ 0xD77E, 0xD77F, 0xD780, 0xD782, 0xD783, 0xD784, 0xD785, 0xD786, 0xD787,
+ 0xD78A, 0xD78B, 0xD78D, 0xD78E, 0xD78F, 0xD791, 0xD792, 0xD793, 0xD794,
+ 0xD795, 0xD796, 0xD797, 0xD79A, 0xD79C, 0xD79E, 0xD79F, 0xD7A0, 0xD7A1,
+ 0xD7A2, 0xD7A3, 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, 0x20A9, 0x2010,
+ 0x00A9, 0x2122, 0x22EF, 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, 0x203E, 0x007E,
+ 0x005C,
};
diff --git a/core/src/fpdfapi/fpdf_cmaps/Korea1/KSC-EUC-V_0.cpp b/core/src/fpdfapi/fpdf_cmaps/Korea1/KSC-EUC-V_0.cpp
index 138add02d0..624066ddc3 100644
--- a/core/src/fpdfapi/fpdf_cmaps/Korea1/KSC-EUC-V_0.cpp
+++ b/core/src/fpdfapi/fpdf_cmaps/Korea1/KSC-EUC-V_0.cpp
@@ -7,10 +7,10 @@
#include "cmaps_korea1.h"
const FX_WORD g_FXCMAP_KSC_EUC_V_0[16 * 3] = {
- 0xA1A2, 0xA1A3, 0x1F78, 0xA1A5, 0xA1A5, 0x1F7A, 0xA1A6, 0xA1A6, 0x2080,
- 0xA1A9, 0xA1AB, 0x1F7B, 0xA1AD, 0xA1AD, 0x1F7E, 0xA1B2, 0xA1BD, 0x1F7F,
- 0xA1EB, 0xA1EB, 0x1F8B, 0xA3A1, 0xA3A1, 0x1F8C, 0xA3A8, 0xA3A9, 0x1F8D,
- 0xA3AC, 0xA3AC, 0x1F8F, 0xA3AE, 0xA3AE, 0x1F90, 0xA3BA, 0xA3BF, 0x1F91,
- 0xA3DB, 0xA3DB, 0x1F97, 0xA3DD, 0xA3DD, 0x1F98, 0xA3DF, 0xA3DF, 0x1F99,
- 0xA3FB, 0xA3FE, 0x1F9A,
+ 0xA1A2, 0xA1A3, 0x1F78, 0xA1A5, 0xA1A5, 0x1F7A, 0xA1A6, 0xA1A6,
+ 0x2080, 0xA1A9, 0xA1AB, 0x1F7B, 0xA1AD, 0xA1AD, 0x1F7E, 0xA1B2,
+ 0xA1BD, 0x1F7F, 0xA1EB, 0xA1EB, 0x1F8B, 0xA3A1, 0xA3A1, 0x1F8C,
+ 0xA3A8, 0xA3A9, 0x1F8D, 0xA3AC, 0xA3AC, 0x1F8F, 0xA3AE, 0xA3AE,
+ 0x1F90, 0xA3BA, 0xA3BF, 0x1F91, 0xA3DB, 0xA3DB, 0x1F97, 0xA3DD,
+ 0xA3DD, 0x1F98, 0xA3DF, 0xA3DF, 0x1F99, 0xA3FB, 0xA3FE, 0x1F9A,
};
diff --git a/core/src/fpdfapi/fpdf_cmaps/Korea1/KSCms-UHC-HW-V_1.cpp b/core/src/fpdfapi/fpdf_cmaps/Korea1/KSCms-UHC-HW-V_1.cpp
index 9df6894618..9742baf06f 100644
--- a/core/src/fpdfapi/fpdf_cmaps/Korea1/KSCms-UHC-HW-V_1.cpp
+++ b/core/src/fpdfapi/fpdf_cmaps/Korea1/KSCms-UHC-HW-V_1.cpp
@@ -7,10 +7,10 @@
#include "cmaps_korea1.h"
const FX_WORD g_FXCMAP_KSCms_UHC_HW_V_1[16 * 3] = {
- 0xA1A2, 0xA1A3, 0x1F78, 0xA1A5, 0xA1A5, 0x1F7A, 0xA1A6, 0xA1A6, 0x2080,
- 0xA1A9, 0xA1AB, 0x1F7B, 0xA1AD, 0xA1AD, 0x1F7E, 0xA1B2, 0xA1BD, 0x1F7F,
- 0xA1EB, 0xA1EB, 0x1F8B, 0xA3A1, 0xA3A1, 0x1F8C, 0xA3A8, 0xA3A9, 0x1F8D,
- 0xA3AC, 0xA3AC, 0x1F8F, 0xA3AE, 0xA3AE, 0x1F90, 0xA3BA, 0xA3BF, 0x1F91,
- 0xA3DB, 0xA3DB, 0x1F97, 0xA3DD, 0xA3DD, 0x1F98, 0xA3DF, 0xA3DF, 0x1F99,
- 0xA3FB, 0xA3FE, 0x1F9A,
+ 0xA1A2, 0xA1A3, 0x1F78, 0xA1A5, 0xA1A5, 0x1F7A, 0xA1A6, 0xA1A6,
+ 0x2080, 0xA1A9, 0xA1AB, 0x1F7B, 0xA1AD, 0xA1AD, 0x1F7E, 0xA1B2,
+ 0xA1BD, 0x1F7F, 0xA1EB, 0xA1EB, 0x1F8B, 0xA3A1, 0xA3A1, 0x1F8C,
+ 0xA3A8, 0xA3A9, 0x1F8D, 0xA3AC, 0xA3AC, 0x1F8F, 0xA3AE, 0xA3AE,
+ 0x1F90, 0xA3BA, 0xA3BF, 0x1F91, 0xA3DB, 0xA3DB, 0x1F97, 0xA3DD,
+ 0xA3DD, 0x1F98, 0xA3DF, 0xA3DF, 0x1F99, 0xA3FB, 0xA3FE, 0x1F9A,
};
diff --git a/core/src/fpdfapi/fpdf_cmaps/Korea1/KSCms-UHC-V_1.cpp b/core/src/fpdfapi/fpdf_cmaps/Korea1/KSCms-UHC-V_1.cpp
index b3baf2937c..bc6939a155 100644
--- a/core/src/fpdfapi/fpdf_cmaps/Korea1/KSCms-UHC-V_1.cpp
+++ b/core/src/fpdfapi/fpdf_cmaps/Korea1/KSCms-UHC-V_1.cpp
@@ -7,10 +7,10 @@
#include "cmaps_korea1.h"
const FX_WORD g_FXCMAP_KSCms_UHC_V_1[16 * 3] = {
- 0xA1A2, 0xA1A3, 0x1F78, 0xA1A5, 0xA1A5, 0x1F7A, 0xA1A6, 0xA1A6, 0x2080,
- 0xA1A9, 0xA1AB, 0x1F7B, 0xA1AD, 0xA1AD, 0x1F7E, 0xA1B2, 0xA1BD, 0x1F7F,
- 0xA1EB, 0xA1EB, 0x1F8B, 0xA3A1, 0xA3A1, 0x1F8C, 0xA3A8, 0xA3A9, 0x1F8D,
- 0xA3AC, 0xA3AC, 0x1F8F, 0xA3AE, 0xA3AE, 0x1F90, 0xA3BA, 0xA3BF, 0x1F91,
- 0xA3DB, 0xA3DB, 0x1F97, 0xA3DD, 0xA3DD, 0x1F98, 0xA3DF, 0xA3DF, 0x1F99,
- 0xA3FB, 0xA3FE, 0x1F9A,
+ 0xA1A2, 0xA1A3, 0x1F78, 0xA1A5, 0xA1A5, 0x1F7A, 0xA1A6, 0xA1A6,
+ 0x2080, 0xA1A9, 0xA1AB, 0x1F7B, 0xA1AD, 0xA1AD, 0x1F7E, 0xA1B2,
+ 0xA1BD, 0x1F7F, 0xA1EB, 0xA1EB, 0x1F8B, 0xA3A1, 0xA3A1, 0x1F8C,
+ 0xA3A8, 0xA3A9, 0x1F8D, 0xA3AC, 0xA3AC, 0x1F8F, 0xA3AE, 0xA3AE,
+ 0x1F90, 0xA3BA, 0xA3BF, 0x1F91, 0xA3DB, 0xA3DB, 0x1F97, 0xA3DD,
+ 0xA3DD, 0x1F98, 0xA3DF, 0xA3DF, 0x1F99, 0xA3FB, 0xA3FE, 0x1F9A,
};
diff --git a/core/src/fpdfapi/fpdf_cmaps/Korea1/UniKS-UTF16-H_0.cpp b/core/src/fpdfapi/fpdf_cmaps/Korea1/UniKS-UTF16-H_0.cpp
index dc3bec84c9..76dc5a7d62 100644
--- a/core/src/fpdfapi/fpdf_cmaps/Korea1/UniKS-UTF16-H_0.cpp
+++ b/core/src/fpdfapi/fpdf_cmaps/Korea1/UniKS-UTF16-H_0.cpp
@@ -7,44 +7,40 @@
#include "cmaps_korea1.h"
const FX_WORD g_FXCMAP_UniKS_UTF16_H_0[158 * 2] = {
- 0x00A9, 0x0062, 0x2010, 0x0061, 0x20A9, 0x0060, 0x2F00, 0x193C,
- 0x2F04, 0x18EC, 0x2F06, 0x190D, 0x2F08, 0x192B, 0x2F0A, 0x194D,
- 0x2F0B, 0x1D4B, 0x2F11, 0x10AE, 0x2F12, 0x116A, 0x2F14, 0x143F,
- 0x2F17, 0x168C, 0x2F18, 0x13D5, 0x2F1C, 0x1839, 0x2F1D, 0x0F3D,
- 0x2F1F, 0x1D1B, 0x2F20, 0x1487, 0x2F23, 0x151B, 0x2F24, 0x109D,
- 0x2F25, 0x103F, 0x2F26, 0x1958, 0x2F28, 0x1C4F, 0x2F29, 0x1580,
- 0x2F2B, 0x1641, 0x2F2D, 0x14B9, 0x2F2F, 0x0ECF, 0x2F30, 0x0FED,
- 0x2F31, 0x0E14, 0x2F32, 0x0D99, 0x2F38, 0x0F7C, 0x2F3C, 0x1684,
- 0x2F3D, 0x0EDC, 0x2F3E, 0x1E80, 0x2F3F, 0x15CC, 0x2F40, 0x1B27,
- 0x2F42, 0x12E8, 0x2F43, 0x10FD, 0x2F44, 0x0FBB, 0x2F45, 0x1356,
- 0x2F46, 0x12D3, 0x2F47, 0x1940, 0x2F48, 0x17ED, 0x2F49, 0x1889,
- 0x2F4A, 0x12B4, 0x2F4B, 0x1F5B, 0x2F4C, 0x1B2C, 0x2F4F, 0x12D6,
- 0x2F50, 0x144C, 0x2F51, 0x12A8, 0x2F52, 0x168E, 0x2F54, 0x15D3,
- 0x2F55, 0x1EBB, 0x2F56, 0x1A93, 0x2F57, 0x1409, 0x2F58, 0x1F1A,
- 0x2F5A, 0x1D61, 0x2F5B, 0x1696, 0x2F5C, 0x1842, 0x2F5D, 0x0E37,
- 0x2F5E, 0x1E3D, 0x2F5F, 0x17C1, 0x2F60, 0x0EDE, 0x2F61, 0x17D4,
- 0x2F62, 0x0DC1, 0x2F63, 0x14FA, 0x2F64, 0x182D, 0x2F65, 0x1A08,
- 0x2F66, 0x1DBA, 0x2F69, 0x1381, 0x2F6A, 0x1DB0, 0x2F6B, 0x1293,
- 0x2F6C, 0x12B7, 0x2F6D, 0x12AD, 0x2F6E, 0x164D, 0x2F6F, 0x1525,
- 0x2F70, 0x164E, 0x2F72, 0x1EBE, 0x2F73, 0x1E4B, 0x2F74, 0x122D,
- 0x2F75, 0x1AF4, 0x2F76, 0x12FF, 0x2F78, 0x140C, 0x2F7A, 0x1708,
- 0x2F7B, 0x184A, 0x2F7C, 0x11A7, 0x2F7D, 0x191B, 0x2F7F, 0x191C,
- 0x2F80, 0x18E0, 0x2F81, 0x18D5, 0x2F82, 0x1675, 0x2F83, 0x1966,
- 0x2F84, 0x1B37, 0x2F85, 0x0F5A, 0x2F86, 0x1550, 0x2F87, 0x1BF6,
- 0x2F88, 0x1AE8, 0x2F89, 0x0DA8, 0x2F8A, 0x14F8, 0x2F8B, 0x1C40,
- 0x2F8E, 0x1E4C, 0x2F8F, 0x1E1D, 0x2F90, 0x1909, 0x2F92, 0x0E3C,
- 0x2F93, 0x0D92, 0x2F94, 0x1721, 0x2F95, 0x0EBC, 0x2F96, 0x1103,
- 0x2F97, 0x1656, 0x2F99, 0x1D58, 0x2F9A, 0x19EC, 0x2F9B, 0x1AEC,
- 0x2F9C, 0x1AAE, 0x2F9D, 0x167B, 0x2F9E, 0x1B8D, 0x2F9F, 0x167C,
- 0x2FA0, 0x1B61, 0x2FA2, 0x18F5, 0x2FA3, 0x18D0, 0x2FA5, 0x121A,
- 0x2FA6, 0x1023, 0x2FA7, 0x19A8, 0x2FA8, 0x12EE, 0x2FA9, 0x141B,
- 0x2FAC, 0x1853, 0x2FAD, 0x1C23, 0x2FAE, 0x1464, 0x2FAF, 0x1288,
- 0x2FB0, 0x1E35, 0x2FB1, 0x18A3, 0x2FB3, 0x18F1, 0x2FB4, 0x1E4D,
- 0x2FB5, 0x1DAB, 0x2FB6, 0x1465, 0x2FB7, 0x1665, 0x2FB8, 0x15F9,
- 0x2FB9, 0x1E26, 0x2FBA, 0x1235, 0x2FBB, 0x0EC9, 0x2FBC, 0x0EB5,
- 0x2FC1, 0x0F99, 0x2FC2, 0x1716, 0x2FC3, 0x1AAB, 0x2FC4, 0x11AF,
- 0x2FC5, 0x11B5, 0x2FC6, 0x1276, 0x2FC7, 0x1237, 0x2FC8, 0x1EF7,
- 0x2FC9, 0x1519, 0x2FCA, 0x1F52, 0x2FCD, 0x1A66, 0x2FCE, 0x0EB6,
- 0x2FCF, 0x151A, 0x2FD0, 0x1466, 0x2FD1, 0x1A7D, 0x2FD2, 0x1CBF,
- 0x2FD3, 0x11D3, 0x2FD4, 0x0F6A,
+ 0x00A9, 0x0062, 0x2010, 0x0061, 0x20A9, 0x0060, 0x2F00, 0x193C, 0x2F04,
+ 0x18EC, 0x2F06, 0x190D, 0x2F08, 0x192B, 0x2F0A, 0x194D, 0x2F0B, 0x1D4B,
+ 0x2F11, 0x10AE, 0x2F12, 0x116A, 0x2F14, 0x143F, 0x2F17, 0x168C, 0x2F18,
+ 0x13D5, 0x2F1C, 0x1839, 0x2F1D, 0x0F3D, 0x2F1F, 0x1D1B, 0x2F20, 0x1487,
+ 0x2F23, 0x151B, 0x2F24, 0x109D, 0x2F25, 0x103F, 0x2F26, 0x1958, 0x2F28,
+ 0x1C4F, 0x2F29, 0x1580, 0x2F2B, 0x1641, 0x2F2D, 0x14B9, 0x2F2F, 0x0ECF,
+ 0x2F30, 0x0FED, 0x2F31, 0x0E14, 0x2F32, 0x0D99, 0x2F38, 0x0F7C, 0x2F3C,
+ 0x1684, 0x2F3D, 0x0EDC, 0x2F3E, 0x1E80, 0x2F3F, 0x15CC, 0x2F40, 0x1B27,
+ 0x2F42, 0x12E8, 0x2F43, 0x10FD, 0x2F44, 0x0FBB, 0x2F45, 0x1356, 0x2F46,
+ 0x12D3, 0x2F47, 0x1940, 0x2F48, 0x17ED, 0x2F49, 0x1889, 0x2F4A, 0x12B4,
+ 0x2F4B, 0x1F5B, 0x2F4C, 0x1B2C, 0x2F4F, 0x12D6, 0x2F50, 0x144C, 0x2F51,
+ 0x12A8, 0x2F52, 0x168E, 0x2F54, 0x15D3, 0x2F55, 0x1EBB, 0x2F56, 0x1A93,
+ 0x2F57, 0x1409, 0x2F58, 0x1F1A, 0x2F5A, 0x1D61, 0x2F5B, 0x1696, 0x2F5C,
+ 0x1842, 0x2F5D, 0x0E37, 0x2F5E, 0x1E3D, 0x2F5F, 0x17C1, 0x2F60, 0x0EDE,
+ 0x2F61, 0x17D4, 0x2F62, 0x0DC1, 0x2F63, 0x14FA, 0x2F64, 0x182D, 0x2F65,
+ 0x1A08, 0x2F66, 0x1DBA, 0x2F69, 0x1381, 0x2F6A, 0x1DB0, 0x2F6B, 0x1293,
+ 0x2F6C, 0x12B7, 0x2F6D, 0x12AD, 0x2F6E, 0x164D, 0x2F6F, 0x1525, 0x2F70,
+ 0x164E, 0x2F72, 0x1EBE, 0x2F73, 0x1E4B, 0x2F74, 0x122D, 0x2F75, 0x1AF4,
+ 0x2F76, 0x12FF, 0x2F78, 0x140C, 0x2F7A, 0x1708, 0x2F7B, 0x184A, 0x2F7C,
+ 0x11A7, 0x2F7D, 0x191B, 0x2F7F, 0x191C, 0x2F80, 0x18E0, 0x2F81, 0x18D5,
+ 0x2F82, 0x1675, 0x2F83, 0x1966, 0x2F84, 0x1B37, 0x2F85, 0x0F5A, 0x2F86,
+ 0x1550, 0x2F87, 0x1BF6, 0x2F88, 0x1AE8, 0x2F89, 0x0DA8, 0x2F8A, 0x14F8,
+ 0x2F8B, 0x1C40, 0x2F8E, 0x1E4C, 0x2F8F, 0x1E1D, 0x2F90, 0x1909, 0x2F92,
+ 0x0E3C, 0x2F93, 0x0D92, 0x2F94, 0x1721, 0x2F95, 0x0EBC, 0x2F96, 0x1103,
+ 0x2F97, 0x1656, 0x2F99, 0x1D58, 0x2F9A, 0x19EC, 0x2F9B, 0x1AEC, 0x2F9C,
+ 0x1AAE, 0x2F9D, 0x167B, 0x2F9E, 0x1B8D, 0x2F9F, 0x167C, 0x2FA0, 0x1B61,
+ 0x2FA2, 0x18F5, 0x2FA3, 0x18D0, 0x2FA5, 0x121A, 0x2FA6, 0x1023, 0x2FA7,
+ 0x19A8, 0x2FA8, 0x12EE, 0x2FA9, 0x141B, 0x2FAC, 0x1853, 0x2FAD, 0x1C23,
+ 0x2FAE, 0x1464, 0x2FAF, 0x1288, 0x2FB0, 0x1E35, 0x2FB1, 0x18A3, 0x2FB3,
+ 0x18F1, 0x2FB4, 0x1E4D, 0x2FB5, 0x1DAB, 0x2FB6, 0x1465, 0x2FB7, 0x1665,
+ 0x2FB8, 0x15F9, 0x2FB9, 0x1E26, 0x2FBA, 0x1235, 0x2FBB, 0x0EC9, 0x2FBC,
+ 0x0EB5, 0x2FC1, 0x0F99, 0x2FC2, 0x1716, 0x2FC3, 0x1AAB, 0x2FC4, 0x11AF,
+ 0x2FC5, 0x11B5, 0x2FC6, 0x1276, 0x2FC7, 0x1237, 0x2FC8, 0x1EF7, 0x2FC9,
+ 0x1519, 0x2FCA, 0x1F52, 0x2FCD, 0x1A66, 0x2FCE, 0x0EB6, 0x2FCF, 0x151A,
+ 0x2FD0, 0x1466, 0x2FD1, 0x1A7D, 0x2FD2, 0x1CBF, 0x2FD3, 0x11D3, 0x2FD4,
+ 0x0F6A,
};
diff --git a/core/src/fpdfapi/fpdf_cmaps/Korea1/cmaps_korea1.cpp b/core/src/fpdfapi/fpdf_cmaps/Korea1/cmaps_korea1.cpp
index 6e67bfb0ce..17435941d1 100644
--- a/core/src/fpdfapi/fpdf_cmaps/Korea1/cmaps_korea1.cpp
+++ b/core/src/fpdfapi/fpdf_cmaps/Korea1/cmaps_korea1.cpp
@@ -12,24 +12,38 @@
#include "cmaps_korea1.h"
static const FXCMAP_CMap g_FXCMAP_Korea1_cmaps[] = {
- { "KSC-EUC-H", FXCMAP_CMap::Range, g_FXCMAP_KSC_EUC_H_0, 467, FXCMAP_CMap::None, NULL, 0, 0 },
- { "KSC-EUC-V", FXCMAP_CMap::Range, g_FXCMAP_KSC_EUC_V_0, 16, FXCMAP_CMap::None, NULL, 0, -1 },
- { "KSCms-UHC-H", FXCMAP_CMap::Range, g_FXCMAP_KSCms_UHC_H_1, 675, FXCMAP_CMap::None, NULL, 0, -2 },
- { "KSCms-UHC-V", FXCMAP_CMap::Range, g_FXCMAP_KSCms_UHC_V_1, 16, FXCMAP_CMap::None, NULL, 0, -1 },
- { "KSCms-UHC-HW-H", FXCMAP_CMap::Range, g_FXCMAP_KSCms_UHC_HW_H_1, 675, FXCMAP_CMap::None, NULL, 0, 0 },
- { "KSCms-UHC-HW-V", FXCMAP_CMap::Range, g_FXCMAP_KSCms_UHC_HW_V_1, 16, FXCMAP_CMap::None, NULL, 0, -1 },
- { "KSCpc-EUC-H", FXCMAP_CMap::Range, g_FXCMAP_KSCpc_EUC_H_0, 509, FXCMAP_CMap::None, NULL, 0, -6 },
- { "UniKS-UCS2-H", FXCMAP_CMap::Range, g_FXCMAP_UniKS_UCS2_H_1, 8394, FXCMAP_CMap::None, NULL, 0, 0 },
- { "UniKS-UCS2-V", FXCMAP_CMap::Range, g_FXCMAP_UniKS_UCS2_V_1, 18, FXCMAP_CMap::None, NULL, 0, -1 },
- { "UniKS-UTF16-H", FXCMAP_CMap::Single, g_FXCMAP_UniKS_UTF16_H_0, 158, FXCMAP_CMap::None, NULL, 0, -2 },
- { "UniKS-UTF16-V", FXCMAP_CMap::Range, g_FXCMAP_UniKS_UCS2_V_1, 18, FXCMAP_CMap::None, NULL, 0, -1 },
+ {"KSC-EUC-H", FXCMAP_CMap::Range, g_FXCMAP_KSC_EUC_H_0, 467,
+ FXCMAP_CMap::None, NULL, 0, 0},
+ {"KSC-EUC-V", FXCMAP_CMap::Range, g_FXCMAP_KSC_EUC_V_0, 16,
+ FXCMAP_CMap::None, NULL, 0, -1},
+ {"KSCms-UHC-H", FXCMAP_CMap::Range, g_FXCMAP_KSCms_UHC_H_1, 675,
+ FXCMAP_CMap::None, NULL, 0, -2},
+ {"KSCms-UHC-V", FXCMAP_CMap::Range, g_FXCMAP_KSCms_UHC_V_1, 16,
+ FXCMAP_CMap::None, NULL, 0, -1},
+ {"KSCms-UHC-HW-H", FXCMAP_CMap::Range, g_FXCMAP_KSCms_UHC_HW_H_1, 675,
+ FXCMAP_CMap::None, NULL, 0, 0},
+ {"KSCms-UHC-HW-V", FXCMAP_CMap::Range, g_FXCMAP_KSCms_UHC_HW_V_1, 16,
+ FXCMAP_CMap::None, NULL, 0, -1},
+ {"KSCpc-EUC-H", FXCMAP_CMap::Range, g_FXCMAP_KSCpc_EUC_H_0, 509,
+ FXCMAP_CMap::None, NULL, 0, -6},
+ {"UniKS-UCS2-H", FXCMAP_CMap::Range, g_FXCMAP_UniKS_UCS2_H_1, 8394,
+ FXCMAP_CMap::None, NULL, 0, 0},
+ {"UniKS-UCS2-V", FXCMAP_CMap::Range, g_FXCMAP_UniKS_UCS2_V_1, 18,
+ FXCMAP_CMap::None, NULL, 0, -1},
+ {"UniKS-UTF16-H", FXCMAP_CMap::Single, g_FXCMAP_UniKS_UTF16_H_0, 158,
+ FXCMAP_CMap::None, NULL, 0, -2},
+ {"UniKS-UTF16-V", FXCMAP_CMap::Range, g_FXCMAP_UniKS_UCS2_V_1, 18,
+ FXCMAP_CMap::None, NULL, 0, -1},
};
-void CPDF_ModuleMgr::LoadEmbeddedKorea1CMaps()
-{
- CPDF_FontGlobals* pFontGlobals = CPDF_ModuleMgr::Get()->GetPageModule()->GetFontGlobals();
- pFontGlobals->m_EmbeddedCharsets[CIDSET_KOREA1].m_pMapList = g_FXCMAP_Korea1_cmaps;
- pFontGlobals->m_EmbeddedCharsets[CIDSET_KOREA1].m_Count = FX_ArraySize(g_FXCMAP_Korea1_cmaps);
- pFontGlobals->m_EmbeddedToUnicodes[CIDSET_KOREA1].m_pMap = g_FXCMAP_Korea1CID2Unicode_2;
- pFontGlobals->m_EmbeddedToUnicodes[CIDSET_KOREA1].m_Count = 18352;
+void CPDF_ModuleMgr::LoadEmbeddedKorea1CMaps() {
+ CPDF_FontGlobals* pFontGlobals =
+ CPDF_ModuleMgr::Get()->GetPageModule()->GetFontGlobals();
+ pFontGlobals->m_EmbeddedCharsets[CIDSET_KOREA1].m_pMapList =
+ g_FXCMAP_Korea1_cmaps;
+ pFontGlobals->m_EmbeddedCharsets[CIDSET_KOREA1].m_Count =
+ FX_ArraySize(g_FXCMAP_Korea1_cmaps);
+ pFontGlobals->m_EmbeddedToUnicodes[CIDSET_KOREA1].m_pMap =
+ g_FXCMAP_Korea1CID2Unicode_2;
+ pFontGlobals->m_EmbeddedToUnicodes[CIDSET_KOREA1].m_Count = 18352;
}
diff --git a/core/src/fpdfapi/fpdf_cmaps/cmap_int.h b/core/src/fpdfapi/fpdf_cmaps/cmap_int.h
index 98b64ed8ec..41743a8f4a 100644
--- a/core/src/fpdfapi/fpdf_cmaps/cmap_int.h
+++ b/core/src/fpdfapi/fpdf_cmaps/cmap_int.h
@@ -10,16 +10,16 @@
#include "../../../include/fxcrt/fx_system.h" // For FX_WORD.
struct FXCMAP_CMap {
- enum MapType { None, Single, Range, Reverse };
+ enum MapType { None, Single, Range, Reverse };
- const char* m_Name;
- MapType m_WordMapType;
- const FX_WORD* m_pWordMap;
- int m_WordCount;
- MapType m_DWordMapType;
- const FX_WORD* m_pDWordMap;
- int m_DWordCount;
- int m_UseOffset;
+ const char* m_Name;
+ MapType m_WordMapType;
+ const FX_WORD* m_pWordMap;
+ int m_WordCount;
+ MapType m_DWordMapType;
+ const FX_WORD* m_pDWordMap;
+ int m_DWordCount;
+ int m_UseOffset;
};
#endif // CORE_SRC_FPDFAPI_FPDF_CMAPS_CMAP_INT_H_
diff --git a/core/src/fpdfapi/fpdf_cmaps/fpdf_cmaps.cpp b/core/src/fpdfapi/fpdf_cmaps/fpdf_cmaps.cpp
index 6ed246d254..8b0bff0257 100644
--- a/core/src/fpdfapi/fpdf_cmaps/fpdf_cmaps.cpp
+++ b/core/src/fpdfapi/fpdf_cmaps/fpdf_cmaps.cpp
@@ -8,176 +8,182 @@
#include "../../../include/fpdfapi/fpdf_module.h"
#include "../fpdf_font/font_int.h"
#include "cmap_int.h"
-void FPDFAPI_FindEmbeddedCMap(const char* name, int charset, int coding, const FXCMAP_CMap*& pMap)
-{
- pMap = NULL;
- CPDF_FontGlobals* pFontGlobals = CPDF_ModuleMgr::Get()->GetPageModule()->GetFontGlobals();
- const FXCMAP_CMap* pCMaps = pFontGlobals->m_EmbeddedCharsets[charset].m_pMapList;
- int nCMaps = pFontGlobals->m_EmbeddedCharsets[charset].m_Count;
- for (int i = 0; i < nCMaps; i ++) {
- if (FXSYS_strcmp(name, pCMaps[i].m_Name)) {
- continue;
- }
- pMap = &pCMaps[i];
- break;
+void FPDFAPI_FindEmbeddedCMap(const char* name,
+ int charset,
+ int coding,
+ const FXCMAP_CMap*& pMap) {
+ pMap = NULL;
+ CPDF_FontGlobals* pFontGlobals =
+ CPDF_ModuleMgr::Get()->GetPageModule()->GetFontGlobals();
+ const FXCMAP_CMap* pCMaps =
+ pFontGlobals->m_EmbeddedCharsets[charset].m_pMapList;
+ int nCMaps = pFontGlobals->m_EmbeddedCharsets[charset].m_Count;
+ for (int i = 0; i < nCMaps; i++) {
+ if (FXSYS_strcmp(name, pCMaps[i].m_Name)) {
+ continue;
}
+ pMap = &pCMaps[i];
+ break;
+ }
}
extern "C" {
- static int compareWord(const void* p1, const void* p2)
- {
- return (*(FX_WORD*)p1) - (*(FX_WORD*)p2);
- }
+static int compareWord(const void* p1, const void* p2) {
+ return (*(FX_WORD*)p1) - (*(FX_WORD*)p2);
+}
};
extern "C" {
- static int compareWordRange(const void* key, const void* element)
- {
- if (*(FX_WORD*)key < * (FX_WORD*)element) {
- return -1;
- }
- if (*(FX_WORD*)key > ((FX_WORD*)element)[1]) {
- return 1;
- }
- return 0;
- }
+static int compareWordRange(const void* key, const void* element) {
+ if (*(FX_WORD*)key < *(FX_WORD*)element) {
+ return -1;
+ }
+ if (*(FX_WORD*)key > ((FX_WORD*)element)[1]) {
+ return 1;
+ }
+ return 0;
+}
};
extern "C" {
- static int compareDWordRange(const void* p1, const void* p2)
- {
- FX_DWORD key = *(FX_DWORD*)p1;
- FX_WORD hiword = (FX_WORD)(key >> 16);
- FX_WORD* element = (FX_WORD*)p2;
- if (hiword < element[0]) {
- return -1;
- }
- if (hiword > element[0]) {
- return 1;
- }
- FX_WORD loword = (FX_WORD)key;
- if (loword < element[1]) {
- return -1;
- }
- if (loword > element[2]) {
- return 1;
- }
- return 0;
- }
+static int compareDWordRange(const void* p1, const void* p2) {
+ FX_DWORD key = *(FX_DWORD*)p1;
+ FX_WORD hiword = (FX_WORD)(key >> 16);
+ FX_WORD* element = (FX_WORD*)p2;
+ if (hiword < element[0]) {
+ return -1;
+ }
+ if (hiword > element[0]) {
+ return 1;
+ }
+ FX_WORD loword = (FX_WORD)key;
+ if (loword < element[1]) {
+ return -1;
+ }
+ if (loword > element[2]) {
+ return 1;
+ }
+ return 0;
+}
};
extern "C" {
- static int compareDWordSingle(const void* p1, const void* p2)
- {
- FX_DWORD key = *(FX_DWORD*)p1;
- FX_DWORD value = ((*(FX_WORD*)p2) << 16) | ((FX_WORD*)p2)[1];
- if (key < value) {
- return -1;
- }
- if (key > value) {
- return 1;
- }
- return 0;
- }
+static int compareDWordSingle(const void* p1, const void* p2) {
+ FX_DWORD key = *(FX_DWORD*)p1;
+ FX_DWORD value = ((*(FX_WORD*)p2) << 16) | ((FX_WORD*)p2)[1];
+ if (key < value) {
+ return -1;
+ }
+ if (key > value) {
+ return 1;
+ }
+ return 0;
+}
};
-FX_WORD FPDFAPI_CIDFromCharCode(const FXCMAP_CMap* pMap, FX_DWORD charcode)
-{
- if (charcode >> 16) {
- while (1) {
- if (pMap->m_DWordMapType == FXCMAP_CMap::Range) {
- FX_WORD* found = (FX_WORD*)FXSYS_bsearch(&charcode, pMap->m_pDWordMap, pMap->m_DWordCount, 8, compareDWordRange);
- if (found) {
- return found[3] + (FX_WORD)charcode - found[1];
- }
- } else if (pMap->m_DWordMapType == FXCMAP_CMap::Single) {
- FX_WORD* found = (FX_WORD*)FXSYS_bsearch(&charcode, pMap->m_pDWordMap, pMap->m_DWordCount, 6, compareDWordSingle);
- if (found) {
- return found[2];
- }
- }
- if (pMap->m_UseOffset == 0) {
- return 0;
- }
- pMap = pMap + pMap->m_UseOffset;
- }
- return 0;
- }
- FX_WORD code = (FX_WORD)charcode;
+FX_WORD FPDFAPI_CIDFromCharCode(const FXCMAP_CMap* pMap, FX_DWORD charcode) {
+ if (charcode >> 16) {
while (1) {
- if (pMap->m_pWordMap == NULL) {
- return 0;
- }
- if (pMap->m_WordMapType == FXCMAP_CMap::Single) {
- FX_WORD* found = (FX_WORD*)FXSYS_bsearch(&code, pMap->m_pWordMap, pMap->m_WordCount, 4, compareWord);
- if (found) {
- return found[1];
- }
- } else if (pMap->m_WordMapType == FXCMAP_CMap::Range) {
- FX_WORD* found = (FX_WORD*)FXSYS_bsearch(&code, pMap->m_pWordMap, pMap->m_WordCount, 6, compareWordRange);
- if (found) {
- return found[2] + code - found[0];
- }
- }
- if (pMap->m_UseOffset == 0) {
- return 0;
- }
- pMap = pMap + pMap->m_UseOffset;
+ if (pMap->m_DWordMapType == FXCMAP_CMap::Range) {
+ FX_WORD* found =
+ (FX_WORD*)FXSYS_bsearch(&charcode, pMap->m_pDWordMap,
+ pMap->m_DWordCount, 8, compareDWordRange);
+ if (found) {
+ return found[3] + (FX_WORD)charcode - found[1];
+ }
+ } else if (pMap->m_DWordMapType == FXCMAP_CMap::Single) {
+ FX_WORD* found =
+ (FX_WORD*)FXSYS_bsearch(&charcode, pMap->m_pDWordMap,
+ pMap->m_DWordCount, 6, compareDWordSingle);
+ if (found) {
+ return found[2];
+ }
+ }
+ if (pMap->m_UseOffset == 0) {
+ return 0;
+ }
+ pMap = pMap + pMap->m_UseOffset;
}
return 0;
+ }
+ FX_WORD code = (FX_WORD)charcode;
+ while (1) {
+ if (pMap->m_pWordMap == NULL) {
+ return 0;
+ }
+ if (pMap->m_WordMapType == FXCMAP_CMap::Single) {
+ FX_WORD* found = (FX_WORD*)FXSYS_bsearch(
+ &code, pMap->m_pWordMap, pMap->m_WordCount, 4, compareWord);
+ if (found) {
+ return found[1];
+ }
+ } else if (pMap->m_WordMapType == FXCMAP_CMap::Range) {
+ FX_WORD* found = (FX_WORD*)FXSYS_bsearch(
+ &code, pMap->m_pWordMap, pMap->m_WordCount, 6, compareWordRange);
+ if (found) {
+ return found[2] + code - found[0];
+ }
+ }
+ if (pMap->m_UseOffset == 0) {
+ return 0;
+ }
+ pMap = pMap + pMap->m_UseOffset;
+ }
+ return 0;
}
-FX_DWORD FPDFAPI_CharCodeFromCID(const FXCMAP_CMap* pMap, FX_WORD cid)
-{
- while (1) {
- if (pMap->m_WordMapType == FXCMAP_CMap::Single) {
- const FX_WORD *pCur = pMap->m_pWordMap;
- const FX_WORD *pEnd = pMap->m_pWordMap + pMap->m_WordCount * 2;
- while (pCur < pEnd) {
- if (pCur[1] == cid) {
- return pCur[0];
- }
- pCur += 2;
- }
- } else if (pMap->m_WordMapType == FXCMAP_CMap::Range) {
- const FX_WORD *pCur = pMap->m_pWordMap;
- const FX_WORD *pEnd = pMap->m_pWordMap + pMap->m_WordCount * 3;
- while (pCur < pEnd) {
- if (cid >= pCur[2] && cid <= pCur[2] + pCur[1] - pCur[0]) {
- return pCur[0] + cid - pCur[2];
- }
- pCur += 3;
- }
- }
- if (pMap->m_UseOffset == 0) {
- return 0;
- }
- pMap = pMap + pMap->m_UseOffset;
+FX_DWORD FPDFAPI_CharCodeFromCID(const FXCMAP_CMap* pMap, FX_WORD cid) {
+ while (1) {
+ if (pMap->m_WordMapType == FXCMAP_CMap::Single) {
+ const FX_WORD* pCur = pMap->m_pWordMap;
+ const FX_WORD* pEnd = pMap->m_pWordMap + pMap->m_WordCount * 2;
+ while (pCur < pEnd) {
+ if (pCur[1] == cid) {
+ return pCur[0];
+ }
+ pCur += 2;
+ }
+ } else if (pMap->m_WordMapType == FXCMAP_CMap::Range) {
+ const FX_WORD* pCur = pMap->m_pWordMap;
+ const FX_WORD* pEnd = pMap->m_pWordMap + pMap->m_WordCount * 3;
+ while (pCur < pEnd) {
+ if (cid >= pCur[2] && cid <= pCur[2] + pCur[1] - pCur[0]) {
+ return pCur[0] + cid - pCur[2];
+ }
+ pCur += 3;
+ }
}
- while (1) {
- if (pMap->m_DWordMapType == FXCMAP_CMap::Range) {
- const FX_WORD *pCur = pMap->m_pDWordMap;
- const FX_WORD *pEnd = pMap->m_pDWordMap + pMap->m_DWordCount * 4;
- while (pCur < pEnd) {
- if (cid >= pCur[3] && cid <= pCur[3] + pCur[2] - pCur[1]) {
- return (((FX_DWORD)pCur[0] << 16) | pCur[1]) + cid - pCur[3];
- }
- pCur += 4;
- }
- } else if (pMap->m_DWordMapType == FXCMAP_CMap::Single) {
- const FX_WORD *pCur = pMap->m_pDWordMap;
- const FX_WORD *pEnd = pMap->m_pDWordMap + pMap->m_DWordCount * 3;
- while (pCur < pEnd) {
- if (pCur[2] == cid) {
- return ((FX_DWORD)pCur[0] << 16) | pCur[1];
- }
- pCur += 3;
- }
- }
- if (pMap->m_UseOffset == 0) {
- return 0;
- }
- pMap = pMap + pMap->m_UseOffset;
+ if (pMap->m_UseOffset == 0) {
+ return 0;
}
- return 0;
+ pMap = pMap + pMap->m_UseOffset;
+ }
+ while (1) {
+ if (pMap->m_DWordMapType == FXCMAP_CMap::Range) {
+ const FX_WORD* pCur = pMap->m_pDWordMap;
+ const FX_WORD* pEnd = pMap->m_pDWordMap + pMap->m_DWordCount * 4;
+ while (pCur < pEnd) {
+ if (cid >= pCur[3] && cid <= pCur[3] + pCur[2] - pCur[1]) {
+ return (((FX_DWORD)pCur[0] << 16) | pCur[1]) + cid - pCur[3];
+ }
+ pCur += 4;
+ }
+ } else if (pMap->m_DWordMapType == FXCMAP_CMap::Single) {
+ const FX_WORD* pCur = pMap->m_pDWordMap;
+ const FX_WORD* pEnd = pMap->m_pDWordMap + pMap->m_DWordCount * 3;
+ while (pCur < pEnd) {
+ if (pCur[2] == cid) {
+ return ((FX_DWORD)pCur[0] << 16) | pCur[1];
+ }
+ pCur += 3;
+ }
+ }
+ if (pMap->m_UseOffset == 0) {
+ return 0;
+ }
+ pMap = pMap + pMap->m_UseOffset;
+ }
+ return 0;
}
-void FPDFAPI_LoadCID2UnicodeMap(int charset, const FX_WORD*& pMap, FX_DWORD& count)
-{
- CPDF_FontGlobals* pFontGlobals = CPDF_ModuleMgr::Get()->GetPageModule()->GetFontGlobals();
- pMap = pFontGlobals->m_EmbeddedToUnicodes[charset].m_pMap;
- count = pFontGlobals->m_EmbeddedToUnicodes[charset].m_Count;
+void FPDFAPI_LoadCID2UnicodeMap(int charset,
+ const FX_WORD*& pMap,
+ FX_DWORD& count) {
+ CPDF_FontGlobals* pFontGlobals =
+ CPDF_ModuleMgr::Get()->GetPageModule()->GetFontGlobals();
+ pMap = pFontGlobals->m_EmbeddedToUnicodes[charset].m_pMap;
+ count = pFontGlobals->m_EmbeddedToUnicodes[charset].m_Count;
}
diff --git a/core/src/fpdfapi/fpdf_edit/editint.h b/core/src/fpdfapi/fpdf_edit/editint.h
index 4aec32a49a..445ea83967 100644
--- a/core/src/fpdfapi/fpdf_edit/editint.h
+++ b/core/src/fpdfapi/fpdf_edit/editint.h
@@ -7,55 +7,58 @@
#ifndef CORE_SRC_FPDFAPI_FPDF_EDIT_EDITINT_H_
#define CORE_SRC_FPDFAPI_FPDF_EDIT_EDITINT_H_
-class CPDF_ObjectStream
-{
-public:
- CPDF_ObjectStream();
+class CPDF_ObjectStream {
+ public:
+ CPDF_ObjectStream();
- FX_BOOL Start();
+ FX_BOOL Start();
- int32_t CompressIndirectObject(FX_DWORD dwObjNum, const CPDF_Object *pObj);
- int32_t CompressIndirectObject(FX_DWORD dwObjNum, const uint8_t* pBuffer, FX_DWORD dwSize);
+ int32_t CompressIndirectObject(FX_DWORD dwObjNum, const CPDF_Object* pObj);
+ int32_t CompressIndirectObject(FX_DWORD dwObjNum,
+ const uint8_t* pBuffer,
+ FX_DWORD dwSize);
- FX_FILESIZE End(CPDF_Creator* pCreator);
+ FX_FILESIZE End(CPDF_Creator* pCreator);
- CFX_DWordArray m_ObjNumArray;
+ CFX_DWordArray m_ObjNumArray;
- CFX_ByteTextBuf m_Buffer;
- FX_DWORD m_dwObjNum;
- int32_t m_index;
-protected:
+ CFX_ByteTextBuf m_Buffer;
+ FX_DWORD m_dwObjNum;
+ int32_t m_index;
- CFX_DWordArray m_OffsetArray;
+ protected:
+ CFX_DWordArray m_OffsetArray;
};
-class CPDF_XRefStream
-{
-public:
+class CPDF_XRefStream {
+ public:
+ CPDF_XRefStream();
- CPDF_XRefStream();
+ FX_BOOL Start();
- FX_BOOL Start();
+ int32_t CompressIndirectObject(FX_DWORD dwObjNum,
+ const CPDF_Object* pObj,
+ CPDF_Creator* pCreator);
- int32_t CompressIndirectObject(FX_DWORD dwObjNum, const CPDF_Object *pObj, CPDF_Creator *pCreator);
+ int32_t CompressIndirectObject(FX_DWORD dwObjNum,
+ const uint8_t* pBuffer,
+ FX_DWORD dwSize,
+ CPDF_Creator* pCreator);
- int32_t CompressIndirectObject(FX_DWORD dwObjNum, const uint8_t* pBuffer, FX_DWORD dwSize, CPDF_Creator *pCreator);
+ FX_BOOL End(CPDF_Creator* pCreator, FX_BOOL bEOF = FALSE);
+ FX_BOOL AddObjectNumberToIndexArray(FX_DWORD objnum);
+ FX_BOOL EndXRefStream(CPDF_Creator* pCreator);
- FX_BOOL End(CPDF_Creator *pCreator, FX_BOOL bEOF = FALSE);
- FX_BOOL AddObjectNumberToIndexArray(FX_DWORD objnum);
- FX_BOOL EndXRefStream(CPDF_Creator* pCreator);
+ CFX_DWordArray m_IndexArray;
+ FX_FILESIZE m_PrevOffset;
+ FX_DWORD m_dwTempObjNum;
- CFX_DWordArray m_IndexArray;
-
- FX_FILESIZE m_PrevOffset;
- FX_DWORD m_dwTempObjNum;
-
-protected:
- int32_t EndObjectStream(CPDF_Creator *pCreator, FX_BOOL bEOF = TRUE);
- FX_BOOL GenerateXRefStream(CPDF_Creator* pCreator, FX_BOOL bEOF);
- int32_t m_iSeg;
- CPDF_ObjectStream m_ObjStream;
- CFX_ByteTextBuf m_Buffer;
+ protected:
+ int32_t EndObjectStream(CPDF_Creator* pCreator, FX_BOOL bEOF = TRUE);
+ FX_BOOL GenerateXRefStream(CPDF_Creator* pCreator, FX_BOOL bEOF);
+ int32_t m_iSeg;
+ CPDF_ObjectStream m_ObjStream;
+ CFX_ByteTextBuf m_Buffer;
};
#endif // CORE_SRC_FPDFAPI_FPDF_EDIT_EDITINT_H_
diff --git a/core/src/fpdfapi/fpdf_edit/fpdf_edit_content.cpp b/core/src/fpdfapi/fpdf_edit/fpdf_edit_content.cpp
index 65f78dab13..4ce50a8ac4 100644
--- a/core/src/fpdfapi/fpdf_edit/fpdf_edit_content.cpp
+++ b/core/src/fpdfapi/fpdf_edit/fpdf_edit_content.cpp
@@ -9,156 +9,159 @@
#include "../../../include/fpdfapi/fpdf_module.h"
#include "../fpdf_page/pageint.h"
-CFX_ByteTextBuf& operator << (CFX_ByteTextBuf& ar, CFX_AffineMatrix& matrix)
-{
- ar << matrix.a << " " << matrix.b << " " << matrix.c << " " << matrix.d << " " << matrix.e << " " << matrix.f;
- return ar;
+CFX_ByteTextBuf& operator<<(CFX_ByteTextBuf& ar, CFX_AffineMatrix& matrix) {
+ ar << matrix.a << " " << matrix.b << " " << matrix.c << " " << matrix.d << " "
+ << matrix.e << " " << matrix.f;
+ return ar;
}
-CPDF_PageContentGenerate::CPDF_PageContentGenerate(CPDF_Page* pPage) : m_pPage(pPage)
-{
- m_pDocument = NULL;
- if (m_pPage) {
- m_pDocument = m_pPage->m_pDocument;
- }
- FX_POSITION pos = pPage->GetFirstObjectPosition();
- while (pos) {
- InsertPageObject(pPage->GetNextObject(pos));
- }
+CPDF_PageContentGenerate::CPDF_PageContentGenerate(CPDF_Page* pPage)
+ : m_pPage(pPage) {
+ m_pDocument = NULL;
+ if (m_pPage) {
+ m_pDocument = m_pPage->m_pDocument;
+ }
+ FX_POSITION pos = pPage->GetFirstObjectPosition();
+ while (pos) {
+ InsertPageObject(pPage->GetNextObject(pos));
+ }
}
-CPDF_PageContentGenerate::~CPDF_PageContentGenerate()
-{
+CPDF_PageContentGenerate::~CPDF_PageContentGenerate() {}
+FX_BOOL CPDF_PageContentGenerate::InsertPageObject(
+ CPDF_PageObject* pPageObject) {
+ if (!pPageObject) {
+ return FALSE;
+ }
+ return m_pageObjects.Add(pPageObject);
}
-FX_BOOL CPDF_PageContentGenerate::InsertPageObject(CPDF_PageObject* pPageObject)
-{
- if (!pPageObject) {
- return FALSE;
+void CPDF_PageContentGenerate::GenerateContent() {
+ CFX_ByteTextBuf buf;
+ CPDF_Dictionary* pPageDict = m_pPage->m_pFormDict;
+ for (int i = 0; i < m_pageObjects.GetSize(); ++i) {
+ CPDF_PageObject* pPageObj = (CPDF_PageObject*)m_pageObjects[i];
+ if (!pPageObj || pPageObj->m_Type != PDFPAGE_IMAGE) {
+ continue;
}
- return m_pageObjects.Add(pPageObject);
+ ProcessImage(buf, (CPDF_ImageObject*)pPageObj);
+ }
+ CPDF_Object* pContent =
+ pPageDict ? pPageDict->GetElementValue("Contents") : NULL;
+ if (pContent != NULL) {
+ pPageDict->RemoveAt("Contents");
+ }
+ CPDF_Stream* pStream = new CPDF_Stream(NULL, 0, NULL);
+ pStream->SetData(buf.GetBuffer(), buf.GetLength(), FALSE, FALSE);
+ m_pDocument->AddIndirectObject(pStream);
+ pPageDict->SetAtReference("Contents", m_pDocument, pStream->GetObjNum());
}
-void CPDF_PageContentGenerate::GenerateContent()
-{
- CFX_ByteTextBuf buf;
- CPDF_Dictionary* pPageDict = m_pPage->m_pFormDict;
- for (int i = 0; i < m_pageObjects.GetSize(); ++i) {
- CPDF_PageObject* pPageObj = (CPDF_PageObject*)m_pageObjects[i];
- if (!pPageObj || pPageObj->m_Type != PDFPAGE_IMAGE) {
- continue;
- }
- ProcessImage(buf, (CPDF_ImageObject*)pPageObj);
- }
- CPDF_Object* pContent = pPageDict ? pPageDict->GetElementValue("Contents") : NULL;
- if (pContent != NULL) {
- pPageDict->RemoveAt("Contents");
- }
- CPDF_Stream* pStream = new CPDF_Stream(NULL, 0, NULL);
- pStream->SetData(buf.GetBuffer(), buf.GetLength(), FALSE, FALSE);
- m_pDocument->AddIndirectObject(pStream);
- pPageDict->SetAtReference("Contents", m_pDocument, pStream->GetObjNum());
-}
-CFX_ByteString CPDF_PageContentGenerate::RealizeResource(CPDF_Object* pResourceObj, const FX_CHAR* szType)
-{
- if (m_pPage->m_pResources == NULL) {
- m_pPage->m_pResources = new CPDF_Dictionary;
- int objnum = m_pDocument->AddIndirectObject(m_pPage->m_pResources);
- m_pPage->m_pFormDict->SetAtReference("Resources", m_pDocument, objnum);
- }
- CPDF_Dictionary* pResList = m_pPage->m_pResources->GetDict(szType);
- if (pResList == NULL) {
- pResList = new CPDF_Dictionary;
- m_pPage->m_pResources->SetAt(szType, pResList);
- }
- m_pDocument->AddIndirectObject(pResourceObj);
- CFX_ByteString name;
- int idnum = 1;
- while (1) {
- name.Format("FX%c%d", szType[0], idnum);
- if (!pResList->KeyExist(name)) {
- break;
- }
- idnum ++;
+CFX_ByteString CPDF_PageContentGenerate::RealizeResource(
+ CPDF_Object* pResourceObj,
+ const FX_CHAR* szType) {
+ if (m_pPage->m_pResources == NULL) {
+ m_pPage->m_pResources = new CPDF_Dictionary;
+ int objnum = m_pDocument->AddIndirectObject(m_pPage->m_pResources);
+ m_pPage->m_pFormDict->SetAtReference("Resources", m_pDocument, objnum);
+ }
+ CPDF_Dictionary* pResList = m_pPage->m_pResources->GetDict(szType);
+ if (pResList == NULL) {
+ pResList = new CPDF_Dictionary;
+ m_pPage->m_pResources->SetAt(szType, pResList);
+ }
+ m_pDocument->AddIndirectObject(pResourceObj);
+ CFX_ByteString name;
+ int idnum = 1;
+ while (1) {
+ name.Format("FX%c%d", szType[0], idnum);
+ if (!pResList->KeyExist(name)) {
+ break;
}
- pResList->AddReference(name, m_pDocument, pResourceObj->GetObjNum());
- return name;
+ idnum++;
+ }
+ pResList->AddReference(name, m_pDocument, pResourceObj->GetObjNum());
+ return name;
}
-void CPDF_PageContentGenerate::ProcessImage(CFX_ByteTextBuf& buf, CPDF_ImageObject* pImageObj)
-{
- if ((pImageObj->m_Matrix.a == 0 && pImageObj->m_Matrix.b == 0) ||
- (pImageObj->m_Matrix.c == 0 && pImageObj->m_Matrix.d == 0)) {
- return;
- }
- buf << "q " << pImageObj->m_Matrix << " cm ";
- if (!pImageObj->m_pImage->IsInline()) {
- CPDF_Stream* pStream = pImageObj->m_pImage->GetStream();
- FX_DWORD dwSavedObjNum = pStream->GetObjNum();
- CFX_ByteString name = RealizeResource(pStream, "XObject");
- if (dwSavedObjNum == 0) {
- if (pImageObj->m_pImage)
- pImageObj->m_pImage->Release();
- pImageObj->m_pImage = m_pDocument->GetPageData()->GetImage(pStream);
- }
- buf << "/" << PDF_NameEncode(name) << " Do Q\n";
- }
-}
-void CPDF_PageContentGenerate::ProcessForm(CFX_ByteTextBuf& buf, const uint8_t* data, FX_DWORD size, CFX_Matrix& matrix)
-{
- if (!data || !size) {
- return;
- }
- CPDF_Stream* pStream = new CPDF_Stream(NULL, 0, NULL);
- CPDF_Dictionary* pFormDict = CPDF_Dictionary::Create();
- pFormDict->SetAtName("Type", "XObject");
- pFormDict->SetAtName("Subtype", "Form");
- CFX_FloatRect bbox = m_pPage->GetPageBBox();
- matrix.TransformRect(bbox);
- pFormDict->SetAtRect("BBox", bbox);
- pStream->InitStream((uint8_t*)data, size, pFormDict);
- buf << "q " << matrix << " cm ";
+void CPDF_PageContentGenerate::ProcessImage(CFX_ByteTextBuf& buf,
+ CPDF_ImageObject* pImageObj) {
+ if ((pImageObj->m_Matrix.a == 0 && pImageObj->m_Matrix.b == 0) ||
+ (pImageObj->m_Matrix.c == 0 && pImageObj->m_Matrix.d == 0)) {
+ return;
+ }
+ buf << "q " << pImageObj->m_Matrix << " cm ";
+ if (!pImageObj->m_pImage->IsInline()) {
+ CPDF_Stream* pStream = pImageObj->m_pImage->GetStream();
+ FX_DWORD dwSavedObjNum = pStream->GetObjNum();
CFX_ByteString name = RealizeResource(pStream, "XObject");
+ if (dwSavedObjNum == 0) {
+ if (pImageObj->m_pImage)
+ pImageObj->m_pImage->Release();
+ pImageObj->m_pImage = m_pDocument->GetPageData()->GetImage(pStream);
+ }
buf << "/" << PDF_NameEncode(name) << " Do Q\n";
+ }
+}
+void CPDF_PageContentGenerate::ProcessForm(CFX_ByteTextBuf& buf,
+ const uint8_t* data,
+ FX_DWORD size,
+ CFX_Matrix& matrix) {
+ if (!data || !size) {
+ return;
+ }
+ CPDF_Stream* pStream = new CPDF_Stream(NULL, 0, NULL);
+ CPDF_Dictionary* pFormDict = CPDF_Dictionary::Create();
+ pFormDict->SetAtName("Type", "XObject");
+ pFormDict->SetAtName("Subtype", "Form");
+ CFX_FloatRect bbox = m_pPage->GetPageBBox();
+ matrix.TransformRect(bbox);
+ pFormDict->SetAtRect("BBox", bbox);
+ pStream->InitStream((uint8_t*)data, size, pFormDict);
+ buf << "q " << matrix << " cm ";
+ CFX_ByteString name = RealizeResource(pStream, "XObject");
+ buf << "/" << PDF_NameEncode(name) << " Do Q\n";
}
-void CPDF_PageContentGenerate::TransformContent(CFX_Matrix& matrix)
-{
- CPDF_Dictionary* pDict = m_pPage->m_pFormDict;
- CPDF_Object* pContent = pDict ? pDict->GetElementValue("Contents") : NULL;
- if (!pContent) {
- return;
+void CPDF_PageContentGenerate::TransformContent(CFX_Matrix& matrix) {
+ CPDF_Dictionary* pDict = m_pPage->m_pFormDict;
+ CPDF_Object* pContent = pDict ? pDict->GetElementValue("Contents") : NULL;
+ if (!pContent) {
+ return;
+ }
+ CFX_ByteTextBuf buf;
+ int type = pContent->GetType();
+ if (type == PDFOBJ_ARRAY) {
+ CPDF_Array* pArray = (CPDF_Array*)pContent;
+ int iCount = pArray->GetCount();
+ CPDF_StreamAcc** pContentArray =
+ (CPDF_StreamAcc**)FX_Alloc(CPDF_StreamAcc*, iCount);
+ int size = 0;
+ int i = 0;
+ for (i = 0; i < iCount; ++i) {
+ pContent = pArray->GetElement(i);
+ if (!pContent || pContent->GetType() != PDFOBJ_STREAM) {
+ continue;
+ }
+ CPDF_StreamAcc* pStream = new CPDF_StreamAcc();
+ pStream->LoadAllData((CPDF_Stream*)pContent);
+ pContentArray[i] = pStream;
+ size += pContentArray[i]->GetSize() + 1;
}
- CFX_ByteTextBuf buf;
- int type = pContent->GetType();
- if (type == PDFOBJ_ARRAY) {
- CPDF_Array* pArray = (CPDF_Array*)pContent;
- int iCount = pArray->GetCount();
- CPDF_StreamAcc** pContentArray = (CPDF_StreamAcc**)FX_Alloc(CPDF_StreamAcc*, iCount);
- int size = 0;
- int i = 0;
- for (i = 0; i < iCount; ++i) {
- pContent = pArray->GetElement(i);
- if (!pContent || pContent->GetType() != PDFOBJ_STREAM) {
- continue;
- }
- CPDF_StreamAcc* pStream = new CPDF_StreamAcc();
- pStream->LoadAllData((CPDF_Stream*)pContent);
- pContentArray[i] = pStream;
- size += pContentArray[i]->GetSize() + 1;
- }
- int pos = 0;
- uint8_t* pBuf = FX_Alloc(uint8_t, size);
- for (i = 0; i < iCount; ++i) {
- FXSYS_memcpy(pBuf + pos, pContentArray[i]->GetData(), pContentArray[i]->GetSize());
- pos += pContentArray[i]->GetSize() + 1;
- pBuf[pos - 1] = ' ';
- delete pContentArray[i];
- }
- ProcessForm(buf, pBuf, size, matrix);
- FX_Free(pBuf);
- FX_Free(pContentArray);
- } else if (type == PDFOBJ_STREAM) {
- CPDF_StreamAcc contentStream;
- contentStream.LoadAllData((CPDF_Stream*)pContent);
- ProcessForm(buf, contentStream.GetData(), contentStream.GetSize(), matrix);
+ int pos = 0;
+ uint8_t* pBuf = FX_Alloc(uint8_t, size);
+ for (i = 0; i < iCount; ++i) {
+ FXSYS_memcpy(pBuf + pos, pContentArray[i]->GetData(),
+ pContentArray[i]->GetSize());
+ pos += pContentArray[i]->GetSize() + 1;
+ pBuf[pos - 1] = ' ';
+ delete pContentArray[i];
}
- CPDF_Stream* pStream = new CPDF_Stream(NULL, 0, NULL);
- pStream->SetData(buf.GetBuffer(), buf.GetLength(), FALSE, FALSE);
- m_pDocument->AddIndirectObject(pStream);
- m_pPage->m_pFormDict->SetAtReference("Contents", m_pDocument, pStream->GetObjNum());
+ ProcessForm(buf, pBuf, size, matrix);
+ FX_Free(pBuf);
+ FX_Free(pContentArray);
+ } else if (type == PDFOBJ_STREAM) {
+ CPDF_StreamAcc contentStream;
+ contentStream.LoadAllData((CPDF_Stream*)pContent);
+ ProcessForm(buf, contentStream.GetData(), contentStream.GetSize(), matrix);
+ }
+ CPDF_Stream* pStream = new CPDF_Stream(NULL, 0, NULL);
+ pStream->SetData(buf.GetBuffer(), buf.GetLength(), FALSE, FALSE);
+ m_pDocument->AddIndirectObject(pStream);
+ m_pPage->m_pFormDict->SetAtReference("Contents", m_pDocument,
+ pStream->GetObjNum());
}
diff --git a/core/src/fpdfapi/fpdf_edit/fpdf_edit_create.cpp b/core/src/fpdfapi/fpdf_edit/fpdf_edit_create.cpp
index 7b7b61aa02..6f193071de 100644
--- a/core/src/fpdfapi/fpdf_edit/fpdf_edit_create.cpp
+++ b/core/src/fpdfapi/fpdf_edit/fpdf_edit_create.cpp
@@ -8,2129 +8,2161 @@
#include "../../../include/fpdfapi/fpdf_serial.h"
#include "editint.h"
-#define PDF_OBJECTSTREAM_MAXLENGTH (256 * 1024)
-#define PDF_XREFSTREAM_MAXSIZE 10000
-extern void FlateEncode(const uint8_t* src_buf, FX_DWORD src_data, uint8_t*& dest_buf, FX_DWORD& dest_size);
-extern void FlateEncode(const uint8_t* src_buf, FX_DWORD src_size, int predictor, int Colors, int BitsPerComponent, int Columns,
- uint8_t*& dest_buf, FX_DWORD& dest_size);
+#define PDF_OBJECTSTREAM_MAXLENGTH (256 * 1024)
+#define PDF_XREFSTREAM_MAXSIZE 10000
+extern void FlateEncode(const uint8_t* src_buf,
+ FX_DWORD src_data,
+ uint8_t*& dest_buf,
+ FX_DWORD& dest_size);
+extern void FlateEncode(const uint8_t* src_buf,
+ FX_DWORD src_size,
+ int predictor,
+ int Colors,
+ int BitsPerComponent,
+ int Columns,
+ uint8_t*& dest_buf,
+ FX_DWORD& dest_size);
extern FX_BOOL IsSignatureDict(const CPDF_Dictionary* pDict);
-int32_t PDF_CreatorAppendObject(const CPDF_Object* pObj, CFX_FileBufferArchive *pFile, FX_FILESIZE& offset)
-{
- int32_t len = 0;
- if (pObj == NULL) {
- if (pFile->AppendString(FX_BSTRC(" null")) < 0) {
- return -1;
- }
- offset += 5;
- return 1;
- }
- switch (pObj->GetType()) {
- case PDFOBJ_NULL:
- if (pFile->AppendString(FX_BSTRC(" null")) < 0) {
- return -1;
- }
- offset += 5;
- break;
- case PDFOBJ_BOOLEAN:
- case PDFOBJ_NUMBER:
- if (pFile->AppendString(FX_BSTRC(" ")) < 0) {
- return -1;
- }
- if ((len = pFile->AppendString(pObj->GetString())) < 0) {
- return -1;
- }
- offset += len + 1;
- break;
- case PDFOBJ_STRING: {
- CFX_ByteString str = pObj->GetString();
- FX_BOOL bHex = ((CPDF_String*)pObj)->IsHex();
- if ((len = pFile->AppendString(PDF_EncodeString(str, bHex))) < 0) {
- return -1;
- }
- offset += len;
- break;
- }
- case PDFOBJ_NAME: {
- if (pFile->AppendString(FX_BSTRC("/")) < 0) {
- return -1;
- }
- CFX_ByteString str = pObj->GetString();
- if ((len = pFile->AppendString(PDF_NameEncode(str))) < 0) {
- return -1;
- }
- offset += len + 1;
- break;
- }
- case PDFOBJ_REFERENCE: {
- if (pFile->AppendString(FX_BSTRC(" ")) < 0) {
- return -1;
- }
- CPDF_Reference* p = (CPDF_Reference*)pObj;
- if ((len = pFile->AppendDWord(p->GetRefObjNum())) < 0) {
- return -1;
- }
- if (pFile->AppendString(FX_BSTRC(" 0 R ")) < 0) {
- return -1;
- }
- offset += len + 6;
- break;
- }
- case PDFOBJ_ARRAY: {
- if (pFile->AppendString(FX_BSTRC("[")) < 0) {
- return -1;
- }
- offset += 1;
- CPDF_Array* p = (CPDF_Array*)pObj;
- for (FX_DWORD i = 0; i < p->GetCount(); i ++) {
- CPDF_Object* pElement = p->GetElement(i);
- if (pElement->GetObjNum()) {
- if (pFile->AppendString(FX_BSTRC(" ")) < 0) {
- return -1;
- }
- if ((len = pFile->AppendDWord(pElement->GetObjNum())) < 0) {
- return -1;
- }
- if (pFile->AppendString(FX_BSTRC(" 0 R")) < 0) {
- return -1;
- }
- offset += len + 5;
- } else {
- if (PDF_CreatorAppendObject(pElement, pFile, offset) < 0) {
- return -1;
- }
- }
- }
- if (pFile->AppendString(FX_BSTRC("]")) < 0) {
- return -1;
- }
- offset += 1;
- break;
- }
- case PDFOBJ_DICTIONARY: {
- if (pFile->AppendString(FX_BSTRC("<<")) < 0) {
- return -1;
- }
- offset += 2;
- CPDF_Dictionary* p = (CPDF_Dictionary*)pObj;
- FX_POSITION pos = p->GetStartPos();
- while (pos) {
- CFX_ByteString key;
- CPDF_Object* pValue = p->GetNextElement(pos, key);
- if (pFile->AppendString(FX_BSTRC("/")) < 0) {
- return -1;
- }
- if ((len = pFile->AppendString(PDF_NameEncode(key))) < 0) {
- return -1;
- }
- offset += len + 1;
- if (pValue->GetObjNum()) {
- if (pFile->AppendString(FX_BSTRC(" ")) < 0) {
- return -1;
- }
- if ((len = pFile->AppendDWord(pValue->GetObjNum())) < 0) {
- return -1;
- }
- if (pFile->AppendString(FX_BSTRC(" 0 R")) < 0) {
- return -1;
- }
- offset += len + 5;
- } else {
- if (PDF_CreatorAppendObject(pValue, pFile, offset) < 0) {
- return -1;
- }
- }
- }
- if (pFile->AppendString(FX_BSTRC(">>")) < 0) {
- return -1;
- }
- offset += 2;
- break;
- }
- case PDFOBJ_STREAM: {
- CPDF_Stream* p = (CPDF_Stream*)pObj;
- if (PDF_CreatorAppendObject(p->GetDict(), pFile, offset) < 0) {
- return -1;
- }
- if (pFile->AppendString(FX_BSTRC("stream\r\n")) < 0) {
- return -1;
- }
- offset += 8;
- CPDF_StreamAcc acc;
- acc.LoadAllData(p, TRUE);
- if (pFile->AppendBlock(acc.GetData(), acc.GetSize()) < 0) {
- return -1;
- }
- offset += acc.GetSize();
- if ((len = pFile->AppendString(FX_BSTRC("\r\nendstream"))) < 0) {
- return -1;
- }
- offset += len;
- break;
- }
- default:
- ASSERT(FALSE);
- break;
- }
+int32_t PDF_CreatorAppendObject(const CPDF_Object* pObj,
+ CFX_FileBufferArchive* pFile,
+ FX_FILESIZE& offset) {
+ int32_t len = 0;
+ if (pObj == NULL) {
+ if (pFile->AppendString(FX_BSTRC(" null")) < 0) {
+ return -1;
+ }
+ offset += 5;
return 1;
-}
-int32_t PDF_CreatorWriteTrailer(CPDF_Document* pDocument, CFX_FileBufferArchive* pFile, CPDF_Array* pIDArray, FX_BOOL bCompress)
-{
- FX_FILESIZE offset = 0;
- int32_t len = 0;
- FXSYS_assert(pDocument && pFile);
- CPDF_Parser *pParser = (CPDF_Parser*)pDocument->GetParser();
- if (pParser) {
- CPDF_Dictionary* p = pParser->GetTrailer();
- FX_POSITION pos = p->GetStartPos();
- while (pos) {
- CFX_ByteString key;
- CPDF_Object* pValue = p->GetNextElement(pos, key);
- if (key == FX_BSTRC("Encrypt") || key == FX_BSTRC("Size") || key == FX_BSTRC("Filter") ||
- key == FX_BSTRC("Index") || key == FX_BSTRC("Length") || key == FX_BSTRC("Prev") ||
- key == FX_BSTRC("W") || key == FX_BSTRC("XRefStm") || key == FX_BSTRC("Type") || key == FX_BSTRC("ID")) {
- continue;
- }
- if (bCompress && key == FX_BSTRC("DecodeParms")) {
- continue;
- }
- if (pFile->AppendString((FX_BSTRC("/"))) < 0) {
- return -1;
- }
- if ((len = pFile->AppendString(PDF_NameEncode(key))) < 0) {
- return -1;
- }
- offset += len + 1;
- if (pValue->GetObjNum()) {
- if (pFile->AppendString(FX_BSTRC(" ")) < 0) {
- return -1;
- }
- if ((len = pFile->AppendDWord(pValue->GetObjNum())) < 0) {
- return -1;
- }
- if (pFile->AppendString(FX_BSTRC(" 0 R ")) < 0) {
- return -1;
- }
- offset += len + 6;
- } else {
- if (PDF_CreatorAppendObject(pValue, pFile, offset) < 0) {
- return -1;
- }
- }
- }
- if (pIDArray) {
- if (pFile->AppendString((FX_BSTRC("/ID"))) < 0) {
- return -1;
- }
- offset += 3;
- if (PDF_CreatorAppendObject(pIDArray, pFile, offset) < 0) {
- return -1;
- }
- }
- return offset;
- }
- if (pFile->AppendString(FX_BSTRC("\r\n/Root ")) < 0) {
+ }
+ switch (pObj->GetType()) {
+ case PDFOBJ_NULL:
+ if (pFile->AppendString(FX_BSTRC(" null")) < 0) {
+ return -1;
+ }
+ offset += 5;
+ break;
+ case PDFOBJ_BOOLEAN:
+ case PDFOBJ_NUMBER:
+ if (pFile->AppendString(FX_BSTRC(" ")) < 0) {
+ return -1;
+ }
+ if ((len = pFile->AppendString(pObj->GetString())) < 0) {
return -1;
+ }
+ offset += len + 1;
+ break;
+ case PDFOBJ_STRING: {
+ CFX_ByteString str = pObj->GetString();
+ FX_BOOL bHex = ((CPDF_String*)pObj)->IsHex();
+ if ((len = pFile->AppendString(PDF_EncodeString(str, bHex))) < 0) {
+ return -1;
+ }
+ offset += len;
+ break;
}
- if ((len = pFile->AppendDWord(pDocument->GetRoot()->GetObjNum())) < 0) {
+ case PDFOBJ_NAME: {
+ if (pFile->AppendString(FX_BSTRC("/")) < 0) {
+ return -1;
+ }
+ CFX_ByteString str = pObj->GetString();
+ if ((len = pFile->AppendString(PDF_NameEncode(str))) < 0) {
return -1;
+ }
+ offset += len + 1;
+ break;
}
- if (pFile->AppendString(FX_BSTRC(" 0 R\r\n")) < 0) {
+ case PDFOBJ_REFERENCE: {
+ if (pFile->AppendString(FX_BSTRC(" ")) < 0) {
return -1;
+ }
+ CPDF_Reference* p = (CPDF_Reference*)pObj;
+ if ((len = pFile->AppendDWord(p->GetRefObjNum())) < 0) {
+ return -1;
+ }
+ if (pFile->AppendString(FX_BSTRC(" 0 R ")) < 0) {
+ return -1;
+ }
+ offset += len + 6;
+ break;
}
- offset += len + 14;
- if (pDocument->GetInfo()) {
- if (pFile->AppendString(FX_BSTRC("/Info ")) < 0) {
+ case PDFOBJ_ARRAY: {
+ if (pFile->AppendString(FX_BSTRC("[")) < 0) {
+ return -1;
+ }
+ offset += 1;
+ CPDF_Array* p = (CPDF_Array*)pObj;
+ for (FX_DWORD i = 0; i < p->GetCount(); i++) {
+ CPDF_Object* pElement = p->GetElement(i);
+ if (pElement->GetObjNum()) {
+ if (pFile->AppendString(FX_BSTRC(" ")) < 0) {
return -1;
- }
- if ((len = pFile->AppendDWord(pDocument->GetInfo()->GetObjNum())) < 0) {
+ }
+ if ((len = pFile->AppendDWord(pElement->GetObjNum())) < 0) {
return -1;
- }
- if (pFile->AppendString(FX_BSTRC(" 0 R\r\n")) < 0) {
+ }
+ if (pFile->AppendString(FX_BSTRC(" 0 R")) < 0) {
+ return -1;
+ }
+ offset += len + 5;
+ } else {
+ if (PDF_CreatorAppendObject(pElement, pFile, offset) < 0) {
return -1;
+ }
}
- offset += len + 12;
+ }
+ if (pFile->AppendString(FX_BSTRC("]")) < 0) {
+ return -1;
+ }
+ offset += 1;
+ break;
}
- if (pIDArray) {
- if (pFile->AppendString((FX_BSTRC("/ID"))) < 0) {
- return -1;
+ case PDFOBJ_DICTIONARY: {
+ if (pFile->AppendString(FX_BSTRC("<<")) < 0) {
+ return -1;
+ }
+ offset += 2;
+ CPDF_Dictionary* p = (CPDF_Dictionary*)pObj;
+ FX_POSITION pos = p->GetStartPos();
+ while (pos) {
+ CFX_ByteString key;
+ CPDF_Object* pValue = p->GetNextElement(pos, key);
+ if (pFile->AppendString(FX_BSTRC("/")) < 0) {
+ return -1;
+ }
+ if ((len = pFile->AppendString(PDF_NameEncode(key))) < 0) {
+ return -1;
}
- offset += 3;
- if (PDF_CreatorAppendObject(pIDArray, pFile, offset) < 0) {
+ offset += len + 1;
+ if (pValue->GetObjNum()) {
+ if (pFile->AppendString(FX_BSTRC(" ")) < 0) {
+ return -1;
+ }
+ if ((len = pFile->AppendDWord(pValue->GetObjNum())) < 0) {
+ return -1;
+ }
+ if (pFile->AppendString(FX_BSTRC(" 0 R")) < 0) {
+ return -1;
+ }
+ offset += len + 5;
+ } else {
+ if (PDF_CreatorAppendObject(pValue, pFile, offset) < 0) {
return -1;
+ }
}
+ }
+ if (pFile->AppendString(FX_BSTRC(">>")) < 0) {
+ return -1;
+ }
+ offset += 2;
+ break;
}
- return offset;
+ case PDFOBJ_STREAM: {
+ CPDF_Stream* p = (CPDF_Stream*)pObj;
+ if (PDF_CreatorAppendObject(p->GetDict(), pFile, offset) < 0) {
+ return -1;
+ }
+ if (pFile->AppendString(FX_BSTRC("stream\r\n")) < 0) {
+ return -1;
+ }
+ offset += 8;
+ CPDF_StreamAcc acc;
+ acc.LoadAllData(p, TRUE);
+ if (pFile->AppendBlock(acc.GetData(), acc.GetSize()) < 0) {
+ return -1;
+ }
+ offset += acc.GetSize();
+ if ((len = pFile->AppendString(FX_BSTRC("\r\nendstream"))) < 0) {
+ return -1;
+ }
+ offset += len;
+ break;
+ }
+ default:
+ ASSERT(FALSE);
+ break;
+ }
+ return 1;
}
-int32_t PDF_CreatorWriteEncrypt(const CPDF_Dictionary* pEncryptDict, FX_DWORD dwObjNum, CFX_FileBufferArchive *pFile)
-{
- if (!pEncryptDict) {
- return 0;
- }
- FXSYS_assert(pFile);
- FX_FILESIZE offset = 0;
- int32_t len = 0;
- if (pFile->AppendString(FX_BSTRC("/Encrypt")) < 0) {
+int32_t PDF_CreatorWriteTrailer(CPDF_Document* pDocument,
+ CFX_FileBufferArchive* pFile,
+ CPDF_Array* pIDArray,
+ FX_BOOL bCompress) {
+ FX_FILESIZE offset = 0;
+ int32_t len = 0;
+ FXSYS_assert(pDocument && pFile);
+ CPDF_Parser* pParser = (CPDF_Parser*)pDocument->GetParser();
+ if (pParser) {
+ CPDF_Dictionary* p = pParser->GetTrailer();
+ FX_POSITION pos = p->GetStartPos();
+ while (pos) {
+ CFX_ByteString key;
+ CPDF_Object* pValue = p->GetNextElement(pos, key);
+ if (key == FX_BSTRC("Encrypt") || key == FX_BSTRC("Size") ||
+ key == FX_BSTRC("Filter") || key == FX_BSTRC("Index") ||
+ key == FX_BSTRC("Length") || key == FX_BSTRC("Prev") ||
+ key == FX_BSTRC("W") || key == FX_BSTRC("XRefStm") ||
+ key == FX_BSTRC("Type") || key == FX_BSTRC("ID")) {
+ continue;
+ }
+ if (bCompress && key == FX_BSTRC("DecodeParms")) {
+ continue;
+ }
+ if (pFile->AppendString((FX_BSTRC("/"))) < 0) {
return -1;
- }
- offset += 8;
- if (pFile->AppendString(FX_BSTRC(" ")) < 0) {
+ }
+ if ((len = pFile->AppendString(PDF_NameEncode(key))) < 0) {
return -1;
+ }
+ offset += len + 1;
+ if (pValue->GetObjNum()) {
+ if (pFile->AppendString(FX_BSTRC(" ")) < 0) {
+ return -1;
+ }
+ if ((len = pFile->AppendDWord(pValue->GetObjNum())) < 0) {
+ return -1;
+ }
+ if (pFile->AppendString(FX_BSTRC(" 0 R ")) < 0) {
+ return -1;
+ }
+ offset += len + 6;
+ } else {
+ if (PDF_CreatorAppendObject(pValue, pFile, offset) < 0) {
+ return -1;
+ }
+ }
}
- if ((len = pFile->AppendDWord(dwObjNum)) < 0) {
+ if (pIDArray) {
+ if (pFile->AppendString((FX_BSTRC("/ID"))) < 0) {
return -1;
- }
- if (pFile->AppendString(FX_BSTRC(" 0 R ")) < 0) {
+ }
+ offset += 3;
+ if (PDF_CreatorAppendObject(pIDArray, pFile, offset) < 0) {
return -1;
+ }
}
- offset += len + 6;
return offset;
-}
-FX_BOOL PDF_GenerateFileID(FX_DWORD dwSeed1, FX_DWORD dwSeed2, FX_DWORD* pBuffer)
-{
- if (!pBuffer) {
- return FALSE;
+ }
+ if (pFile->AppendString(FX_BSTRC("\r\n/Root ")) < 0) {
+ return -1;
+ }
+ if ((len = pFile->AppendDWord(pDocument->GetRoot()->GetObjNum())) < 0) {
+ return -1;
+ }
+ if (pFile->AppendString(FX_BSTRC(" 0 R\r\n")) < 0) {
+ return -1;
+ }
+ offset += len + 14;
+ if (pDocument->GetInfo()) {
+ if (pFile->AppendString(FX_BSTRC("/Info ")) < 0) {
+ return -1;
+ }
+ if ((len = pFile->AppendDWord(pDocument->GetInfo()->GetObjNum())) < 0) {
+ return -1;
+ }
+ if (pFile->AppendString(FX_BSTRC(" 0 R\r\n")) < 0) {
+ return -1;
}
- void* pContext = FX_Random_MT_Start(dwSeed1);
- int32_t i = 0;
- for (i = 0; i < 2; i++) {
- *pBuffer++ = FX_Random_MT_Generate(pContext);
+ offset += len + 12;
+ }
+ if (pIDArray) {
+ if (pFile->AppendString((FX_BSTRC("/ID"))) < 0) {
+ return -1;
}
- FX_Random_MT_Close(pContext);
- pContext = FX_Random_MT_Start(dwSeed2);
- for (i = 0; i < 2; i++) {
- *pBuffer++ = FX_Random_MT_Generate(pContext);
+ offset += 3;
+ if (PDF_CreatorAppendObject(pIDArray, pFile, offset) < 0) {
+ return -1;
}
- FX_Random_MT_Close(pContext);
- return TRUE;
+ }
+ return offset;
}
-class CPDF_FlateEncoder
-{
-public:
- CPDF_FlateEncoder();
- ~CPDF_FlateEncoder();
- FX_BOOL Initialize(CPDF_Stream* pStream, FX_BOOL bFlateEncode);
- FX_BOOL Initialize(const uint8_t* pBuffer, FX_DWORD size, FX_BOOL bFlateEncode, FX_BOOL bXRefStream = FALSE);
- void CloneDict();
- uint8_t* m_pData;
- FX_DWORD m_dwSize;
- CPDF_Dictionary* m_pDict;
- FX_BOOL m_bCloned;
- FX_BOOL m_bNewData;
- CPDF_StreamAcc m_Acc;
-};
-CPDF_FlateEncoder::CPDF_FlateEncoder()
-{
- m_pData = NULL;
- m_dwSize = 0;
- m_pDict = NULL;
- m_bCloned = FALSE;
- m_bNewData = FALSE;
+int32_t PDF_CreatorWriteEncrypt(const CPDF_Dictionary* pEncryptDict,
+ FX_DWORD dwObjNum,
+ CFX_FileBufferArchive* pFile) {
+ if (!pEncryptDict) {
+ return 0;
+ }
+ FXSYS_assert(pFile);
+ FX_FILESIZE offset = 0;
+ int32_t len = 0;
+ if (pFile->AppendString(FX_BSTRC("/Encrypt")) < 0) {
+ return -1;
+ }
+ offset += 8;
+ if (pFile->AppendString(FX_BSTRC(" ")) < 0) {
+ return -1;
+ }
+ if ((len = pFile->AppendDWord(dwObjNum)) < 0) {
+ return -1;
+ }
+ if (pFile->AppendString(FX_BSTRC(" 0 R ")) < 0) {
+ return -1;
+ }
+ offset += len + 6;
+ return offset;
}
-void CPDF_FlateEncoder::CloneDict()
-{
- if (!m_bCloned) {
- m_pDict = (CPDF_Dictionary*)m_pDict->Clone();
- m_bCloned = TRUE;
- }
+FX_BOOL PDF_GenerateFileID(FX_DWORD dwSeed1,
+ FX_DWORD dwSeed2,
+ FX_DWORD* pBuffer) {
+ if (!pBuffer) {
+ return FALSE;
+ }
+ void* pContext = FX_Random_MT_Start(dwSeed1);
+ int32_t i = 0;
+ for (i = 0; i < 2; i++) {
+ *pBuffer++ = FX_Random_MT_Generate(pContext);
+ }
+ FX_Random_MT_Close(pContext);
+ pContext = FX_Random_MT_Start(dwSeed2);
+ for (i = 0; i < 2; i++) {
+ *pBuffer++ = FX_Random_MT_Generate(pContext);
+ }
+ FX_Random_MT_Close(pContext);
+ return TRUE;
}
-FX_BOOL CPDF_FlateEncoder::Initialize(CPDF_Stream* pStream, FX_BOOL bFlateEncode)
-{
- m_Acc.LoadAllData(pStream, TRUE);
- if ((pStream && pStream->GetDict() && pStream->GetDict()->KeyExist("Filter")) || !bFlateEncode) {
- if (pStream->GetDict()->KeyExist("Filter") && !bFlateEncode) {
- CPDF_StreamAcc destAcc;
- destAcc.LoadAllData(pStream);
- m_dwSize = destAcc.GetSize();
- m_pData = (uint8_t*)destAcc.DetachData();
- m_pDict = (CPDF_Dictionary*)pStream->GetDict()->Clone();
- m_pDict->RemoveAt(FX_BSTRC("Filter"));
- m_bNewData = TRUE;
- m_bCloned = TRUE;
- } else {
- m_pData = (uint8_t*)m_Acc.GetData();
- m_dwSize = m_Acc.GetSize();
- m_pDict = pStream->GetDict();
- }
- return TRUE;
- }
- m_pData = NULL;
- m_dwSize = 0;
- m_bNewData = TRUE;
+class CPDF_FlateEncoder {
+ public:
+ CPDF_FlateEncoder();
+ ~CPDF_FlateEncoder();
+ FX_BOOL Initialize(CPDF_Stream* pStream, FX_BOOL bFlateEncode);
+ FX_BOOL Initialize(const uint8_t* pBuffer,
+ FX_DWORD size,
+ FX_BOOL bFlateEncode,
+ FX_BOOL bXRefStream = FALSE);
+ void CloneDict();
+ uint8_t* m_pData;
+ FX_DWORD m_dwSize;
+ CPDF_Dictionary* m_pDict;
+ FX_BOOL m_bCloned;
+ FX_BOOL m_bNewData;
+ CPDF_StreamAcc m_Acc;
+};
+CPDF_FlateEncoder::CPDF_FlateEncoder() {
+ m_pData = NULL;
+ m_dwSize = 0;
+ m_pDict = NULL;
+ m_bCloned = FALSE;
+ m_bNewData = FALSE;
+}
+void CPDF_FlateEncoder::CloneDict() {
+ if (!m_bCloned) {
+ m_pDict = (CPDF_Dictionary*)m_pDict->Clone();
m_bCloned = TRUE;
- ::FlateEncode(m_Acc.GetData(), m_Acc.GetSize(), m_pData, m_dwSize);
- m_pDict = (CPDF_Dictionary*)pStream->GetDict()->Clone();
- m_pDict->SetAtInteger("Length", m_dwSize);
- m_pDict->SetAtName("Filter", "FlateDecode");
- m_pDict->RemoveAt("DecodeParms");
- return TRUE;
+ }
}
-FX_BOOL CPDF_FlateEncoder::Initialize(const uint8_t* pBuffer, FX_DWORD size, FX_BOOL bFlateEncode, FX_BOOL bXRefStream)
-{
- if (!bFlateEncode) {
- m_pData = (uint8_t*)pBuffer;
- m_dwSize = size;
- return TRUE;
- }
- m_bNewData = TRUE;
- if (bXRefStream) {
- ::FlateEncode(pBuffer, size, 12, 1, 8, 7, m_pData, m_dwSize);
+FX_BOOL CPDF_FlateEncoder::Initialize(CPDF_Stream* pStream,
+ FX_BOOL bFlateEncode) {
+ m_Acc.LoadAllData(pStream, TRUE);
+ if ((pStream && pStream->GetDict() &&
+ pStream->GetDict()->KeyExist("Filter")) ||
+ !bFlateEncode) {
+ if (pStream->GetDict()->KeyExist("Filter") && !bFlateEncode) {
+ CPDF_StreamAcc destAcc;
+ destAcc.LoadAllData(pStream);
+ m_dwSize = destAcc.GetSize();
+ m_pData = (uint8_t*)destAcc.DetachData();
+ m_pDict = (CPDF_Dictionary*)pStream->GetDict()->Clone();
+ m_pDict->RemoveAt(FX_BSTRC("Filter"));
+ m_bNewData = TRUE;
+ m_bCloned = TRUE;
} else {
- ::FlateEncode(pBuffer, size, m_pData, m_dwSize);
+ m_pData = (uint8_t*)m_Acc.GetData();
+ m_dwSize = m_Acc.GetSize();
+ m_pDict = pStream->GetDict();
}
return TRUE;
+ }
+ m_pData = NULL;
+ m_dwSize = 0;
+ m_bNewData = TRUE;
+ m_bCloned = TRUE;
+ ::FlateEncode(m_Acc.GetData(), m_Acc.GetSize(), m_pData, m_dwSize);
+ m_pDict = (CPDF_Dictionary*)pStream->GetDict()->Clone();
+ m_pDict->SetAtInteger("Length", m_dwSize);
+ m_pDict->SetAtName("Filter", "FlateDecode");
+ m_pDict->RemoveAt("DecodeParms");
+ return TRUE;
}
-CPDF_FlateEncoder::~CPDF_FlateEncoder()
-{
- if (m_bCloned && m_pDict) {
- m_pDict->Release();
- }
- if (m_bNewData && m_pData) {
- FX_Free(m_pData);
- }
+FX_BOOL CPDF_FlateEncoder::Initialize(const uint8_t* pBuffer,
+ FX_DWORD size,
+ FX_BOOL bFlateEncode,
+ FX_BOOL bXRefStream) {
+ if (!bFlateEncode) {
+ m_pData = (uint8_t*)pBuffer;
+ m_dwSize = size;
+ return TRUE;
+ }
+ m_bNewData = TRUE;
+ if (bXRefStream) {
+ ::FlateEncode(pBuffer, size, 12, 1, 8, 7, m_pData, m_dwSize);
+ } else {
+ ::FlateEncode(pBuffer, size, m_pData, m_dwSize);
+ }
+ return TRUE;
+}
+CPDF_FlateEncoder::~CPDF_FlateEncoder() {
+ if (m_bCloned && m_pDict) {
+ m_pDict->Release();
+ }
+ if (m_bNewData && m_pData) {
+ FX_Free(m_pData);
+ }
}
-class CPDF_Encryptor
-{
-public:
- CPDF_Encryptor();
- ~CPDF_Encryptor();
- FX_BOOL Initialize(CPDF_CryptoHandler* pHandler, int objnum, uint8_t* src_data, FX_DWORD src_size);
- uint8_t* m_pData;
- FX_DWORD m_dwSize;
- FX_BOOL m_bNewBuf;
+class CPDF_Encryptor {
+ public:
+ CPDF_Encryptor();
+ ~CPDF_Encryptor();
+ FX_BOOL Initialize(CPDF_CryptoHandler* pHandler,
+ int objnum,
+ uint8_t* src_data,
+ FX_DWORD src_size);
+ uint8_t* m_pData;
+ FX_DWORD m_dwSize;
+ FX_BOOL m_bNewBuf;
};
-CPDF_Encryptor::CPDF_Encryptor()
-{
- m_pData = NULL;
- m_dwSize = 0;
- m_bNewBuf = FALSE;
+CPDF_Encryptor::CPDF_Encryptor() {
+ m_pData = NULL;
+ m_dwSize = 0;
+ m_bNewBuf = FALSE;
}
-FX_BOOL CPDF_Encryptor::Initialize(CPDF_CryptoHandler* pHandler, int objnum, uint8_t* src_data, FX_DWORD src_size)
-{
- if (src_size == 0) {
- return TRUE;
- }
- if (pHandler == NULL) {
- m_pData = (uint8_t*)src_data;
- m_dwSize = src_size;
- m_bNewBuf = FALSE;
- return TRUE;
- }
- m_dwSize = pHandler->EncryptGetSize(objnum, 0, src_data, src_size);
- m_pData = FX_Alloc(uint8_t, m_dwSize);
- pHandler->EncryptContent(objnum, 0, src_data, src_size, m_pData, m_dwSize);
- m_bNewBuf = TRUE;
+FX_BOOL CPDF_Encryptor::Initialize(CPDF_CryptoHandler* pHandler,
+ int objnum,
+ uint8_t* src_data,
+ FX_DWORD src_size) {
+ if (src_size == 0) {
return TRUE;
+ }
+ if (pHandler == NULL) {
+ m_pData = (uint8_t*)src_data;
+ m_dwSize = src_size;
+ m_bNewBuf = FALSE;
+ return TRUE;
+ }
+ m_dwSize = pHandler->EncryptGetSize(objnum, 0, src_data, src_size);
+ m_pData = FX_Alloc(uint8_t, m_dwSize);
+ pHandler->EncryptContent(objnum, 0, src_data, src_size, m_pData, m_dwSize);
+ m_bNewBuf = TRUE;
+ return TRUE;
}
-CPDF_Encryptor::~CPDF_Encryptor()
-{
- if (m_bNewBuf) {
- FX_Free(m_pData);
- }
-}
-CPDF_ObjectStream::CPDF_ObjectStream()
- : m_dwObjNum(0)
- , m_index(0)
-{
+CPDF_Encryptor::~CPDF_Encryptor() {
+ if (m_bNewBuf) {
+ FX_Free(m_pData);
+ }
}
-FX_BOOL CPDF_ObjectStream::Start()
-{
- m_ObjNumArray.RemoveAll();
- m_OffsetArray.RemoveAll();
- m_Buffer.Clear();
- m_dwObjNum = 0;
- m_index = 0;
- return TRUE;
+CPDF_ObjectStream::CPDF_ObjectStream() : m_dwObjNum(0), m_index(0) {}
+FX_BOOL CPDF_ObjectStream::Start() {
+ m_ObjNumArray.RemoveAll();
+ m_OffsetArray.RemoveAll();
+ m_Buffer.Clear();
+ m_dwObjNum = 0;
+ m_index = 0;
+ return TRUE;
}
-int32_t CPDF_ObjectStream::CompressIndirectObject(FX_DWORD dwObjNum, const CPDF_Object *pObj)
-{
- m_ObjNumArray.Add(dwObjNum);
- m_OffsetArray.Add(m_Buffer.GetLength());
- m_Buffer << pObj;
- return 1;
+int32_t CPDF_ObjectStream::CompressIndirectObject(FX_DWORD dwObjNum,
+ const CPDF_Object* pObj) {
+ m_ObjNumArray.Add(dwObjNum);
+ m_OffsetArray.Add(m_Buffer.GetLength());
+ m_Buffer << pObj;
+ return 1;
}
-int32_t CPDF_ObjectStream::CompressIndirectObject(FX_DWORD dwObjNum, const uint8_t* pBuffer, FX_DWORD dwSize)
-{
- m_ObjNumArray.Add(dwObjNum);
- m_OffsetArray.Add(m_Buffer.GetLength());
- m_Buffer.AppendBlock(pBuffer, dwSize);
- return 1;
+int32_t CPDF_ObjectStream::CompressIndirectObject(FX_DWORD dwObjNum,
+ const uint8_t* pBuffer,
+ FX_DWORD dwSize) {
+ m_ObjNumArray.Add(dwObjNum);
+ m_OffsetArray.Add(m_Buffer.GetLength());
+ m_Buffer.AppendBlock(pBuffer, dwSize);
+ return 1;
}
-FX_FILESIZE CPDF_ObjectStream::End(CPDF_Creator* pCreator)
-{
- FXSYS_assert(pCreator);
- if (m_ObjNumArray.GetSize() == 0) {
- return 0;
- }
- CFX_FileBufferArchive *pFile = &pCreator->m_File;
- CPDF_CryptoHandler *pHandler = pCreator->m_pCryptoHandler;
- FX_FILESIZE ObjOffset = pCreator->m_Offset;
- if (!m_dwObjNum) {
- m_dwObjNum = ++pCreator->m_dwLastObjNum;
- }
- CFX_ByteTextBuf tempBuffer;
- int32_t iCount = m_ObjNumArray.GetSize();
- for (int32_t i = 0; i < iCount; i++) {
- tempBuffer << m_ObjNumArray.ElementAt(i) << FX_BSTRC(" ") << m_OffsetArray.ElementAt(i) << FX_BSTRC(" ");
- }
- FX_FILESIZE &offset = pCreator->m_Offset;
- int32_t len = pFile->AppendDWord(m_dwObjNum);
- if (len < 0) {
- return -1;
- }
- offset += len;
- if ((len = pFile->AppendString(FX_BSTRC(" 0 obj\r\n<</Type /ObjStm /N "))) < 0) {
- return -1;
- }
- offset += len;
- if ((len = pFile->AppendDWord((FX_DWORD)iCount)) < 0) {
- return -1;
+FX_FILESIZE CPDF_ObjectStream::End(CPDF_Creator* pCreator) {
+ FXSYS_assert(pCreator);
+ if (m_ObjNumArray.GetSize() == 0) {
+ return 0;
+ }
+ CFX_FileBufferArchive* pFile = &pCreator->m_File;
+ CPDF_CryptoHandler* pHandler = pCreator->m_pCryptoHandler;
+ FX_FILESIZE ObjOffset = pCreator->m_Offset;
+ if (!m_dwObjNum) {
+ m_dwObjNum = ++pCreator->m_dwLastObjNum;
+ }
+ CFX_ByteTextBuf tempBuffer;
+ int32_t iCount = m_ObjNumArray.GetSize();
+ for (int32_t i = 0; i < iCount; i++) {
+ tempBuffer << m_ObjNumArray.ElementAt(i) << FX_BSTRC(" ")
+ << m_OffsetArray.ElementAt(i) << FX_BSTRC(" ");
+ }
+ FX_FILESIZE& offset = pCreator->m_Offset;
+ int32_t len = pFile->AppendDWord(m_dwObjNum);
+ if (len < 0) {
+ return -1;
+ }
+ offset += len;
+ if ((len = pFile->AppendString(FX_BSTRC(" 0 obj\r\n<</Type /ObjStm /N "))) <
+ 0) {
+ return -1;
+ }
+ offset += len;
+ if ((len = pFile->AppendDWord((FX_DWORD)iCount)) < 0) {
+ return -1;
+ }
+ offset += len;
+ if (pFile->AppendString(FX_BSTRC("/First ")) < 0) {
+ return -1;
+ }
+ if ((len = pFile->AppendDWord((FX_DWORD)tempBuffer.GetLength())) < 0) {
+ return -1;
+ }
+ if (pFile->AppendString(FX_BSTRC("/Length ")) < 0) {
+ return -1;
+ }
+ offset += len + 15;
+ if (!pCreator->m_bCompress && !pHandler) {
+ if ((len = pFile->AppendDWord(
+ (FX_DWORD)(tempBuffer.GetLength() + m_Buffer.GetLength()))) < 0) {
+ return -1;
}
offset += len;
- if (pFile->AppendString(FX_BSTRC("/First ")) < 0) {
- return -1;
+ if ((len = pFile->AppendString(FX_BSTRC(">>stream\r\n"))) < 0) {
+ return -1;
}
- if ((len = pFile->AppendDWord((FX_DWORD)tempBuffer.GetLength())) < 0) {
- return -1;
+ if (pFile->AppendBlock(tempBuffer.GetBuffer(), tempBuffer.GetLength()) <
+ 0) {
+ return -1;
}
- if (pFile->AppendString(FX_BSTRC("/Length ")) < 0) {
- return -1;
+ if (pFile->AppendBlock(m_Buffer.GetBuffer(), m_Buffer.GetLength()) < 0) {
+ return -1;
}
- offset += len + 15;
- if (!pCreator->m_bCompress && !pHandler) {
- if ((len = pFile->AppendDWord((FX_DWORD)(tempBuffer.GetLength() + m_Buffer.GetLength()))) < 0) {
- return -1;
- }
- offset += len;
- if ((len = pFile->AppendString(FX_BSTRC(">>stream\r\n"))) < 0) {
- return -1;
- }
- if (pFile->AppendBlock(tempBuffer.GetBuffer(), tempBuffer.GetLength()) < 0) {
- return -1;
- }
- if (pFile->AppendBlock(m_Buffer.GetBuffer(), m_Buffer.GetLength()) < 0) {
- return -1;
- }
- offset += len + tempBuffer.GetLength() + m_Buffer.GetLength();
- } else {
- tempBuffer << m_Buffer;
- CPDF_FlateEncoder encoder;
- encoder.Initialize(tempBuffer.GetBuffer(), tempBuffer.GetLength(), pCreator->m_bCompress);
- CPDF_Encryptor encryptor;
- encryptor.Initialize(pHandler, m_dwObjNum, encoder.m_pData, encoder.m_dwSize);
- if ((len = pFile->AppendDWord(encryptor.m_dwSize)) < 0) {
- return -1;
- }
- offset += len;
- if (pCreator->m_bCompress) {
- if (pFile->AppendString(FX_BSTRC("/Filter /FlateDecode")) < 0) {
- return -1;
- }
- offset += 20;
- }
- if ((len = pFile->AppendString(FX_BSTRC(">>stream\r\n"))) < 0) {
- return -1;
- }
- if (pFile->AppendBlock(encryptor.m_pData, encryptor.m_dwSize) < 0) {
- return -1;
- }
- offset += len + encryptor.m_dwSize;
+ offset += len + tempBuffer.GetLength() + m_Buffer.GetLength();
+ } else {
+ tempBuffer << m_Buffer;
+ CPDF_FlateEncoder encoder;
+ encoder.Initialize(tempBuffer.GetBuffer(), tempBuffer.GetLength(),
+ pCreator->m_bCompress);
+ CPDF_Encryptor encryptor;
+ encryptor.Initialize(pHandler, m_dwObjNum, encoder.m_pData,
+ encoder.m_dwSize);
+ if ((len = pFile->AppendDWord(encryptor.m_dwSize)) < 0) {
+ return -1;
}
- if ((len = pFile->AppendString(FX_BSTRC("\r\nendstream\r\nendobj\r\n"))) < 0) {
+ offset += len;
+ if (pCreator->m_bCompress) {
+ if (pFile->AppendString(FX_BSTRC("/Filter /FlateDecode")) < 0) {
return -1;
+ }
+ offset += 20;
}
- offset += len;
- return ObjOffset;
+ if ((len = pFile->AppendString(FX_BSTRC(">>stream\r\n"))) < 0) {
+ return -1;
+ }
+ if (pFile->AppendBlock(encryptor.m_pData, encryptor.m_dwSize) < 0) {
+ return -1;
+ }
+ offset += len + encryptor.m_dwSize;
+ }
+ if ((len = pFile->AppendString(FX_BSTRC("\r\nendstream\r\nendobj\r\n"))) <
+ 0) {
+ return -1;
+ }
+ offset += len;
+ return ObjOffset;
}
CPDF_XRefStream::CPDF_XRefStream()
- : m_PrevOffset(0)
- , m_dwTempObjNum(0)
- , m_iSeg(0)
-{
-}
-FX_BOOL CPDF_XRefStream::Start()
-{
- m_IndexArray.RemoveAll();
- m_Buffer.Clear();
- m_iSeg = 0;
- return TRUE;
+ : m_PrevOffset(0), m_dwTempObjNum(0), m_iSeg(0) {}
+FX_BOOL CPDF_XRefStream::Start() {
+ m_IndexArray.RemoveAll();
+ m_Buffer.Clear();
+ m_iSeg = 0;
+ return TRUE;
}
-int32_t CPDF_XRefStream::CompressIndirectObject(FX_DWORD dwObjNum, const CPDF_Object *pObj, CPDF_Creator *pCreator)
-{
- if (!pCreator) {
- return 0;
- }
- m_ObjStream.CompressIndirectObject(dwObjNum, pObj);
- if (m_ObjStream.m_ObjNumArray.GetSize() < pCreator->m_ObjectStreamSize &&
- m_ObjStream.m_Buffer.GetLength() < PDF_OBJECTSTREAM_MAXLENGTH) {
- return 1;
- }
- return EndObjectStream(pCreator);
+int32_t CPDF_XRefStream::CompressIndirectObject(FX_DWORD dwObjNum,
+ const CPDF_Object* pObj,
+ CPDF_Creator* pCreator) {
+ if (!pCreator) {
+ return 0;
+ }
+ m_ObjStream.CompressIndirectObject(dwObjNum, pObj);
+ if (m_ObjStream.m_ObjNumArray.GetSize() < pCreator->m_ObjectStreamSize &&
+ m_ObjStream.m_Buffer.GetLength() < PDF_OBJECTSTREAM_MAXLENGTH) {
+ return 1;
+ }
+ return EndObjectStream(pCreator);
}
-int32_t CPDF_XRefStream::CompressIndirectObject(FX_DWORD dwObjNum, const uint8_t* pBuffer, FX_DWORD dwSize, CPDF_Creator *pCreator)
-{
- if (!pCreator) {
- return 0;
- }
- m_ObjStream.CompressIndirectObject(dwObjNum, pBuffer, dwSize);
- if (m_ObjStream.m_ObjNumArray.GetSize() < pCreator->m_ObjectStreamSize &&
- m_ObjStream.m_Buffer.GetLength() < PDF_OBJECTSTREAM_MAXLENGTH) {
- return 1;
- }
- return EndObjectStream(pCreator);
+int32_t CPDF_XRefStream::CompressIndirectObject(FX_DWORD dwObjNum,
+ const uint8_t* pBuffer,
+ FX_DWORD dwSize,
+ CPDF_Creator* pCreator) {
+ if (!pCreator) {
+ return 0;
+ }
+ m_ObjStream.CompressIndirectObject(dwObjNum, pBuffer, dwSize);
+ if (m_ObjStream.m_ObjNumArray.GetSize() < pCreator->m_ObjectStreamSize &&
+ m_ObjStream.m_Buffer.GetLength() < PDF_OBJECTSTREAM_MAXLENGTH) {
+ return 1;
+ }
+ return EndObjectStream(pCreator);
}
-static void _AppendIndex0(CFX_ByteTextBuf& buffer, FX_BOOL bFirstObject = TRUE)
-{
- buffer.AppendByte(0);
- buffer.AppendByte(0);
+static void _AppendIndex0(CFX_ByteTextBuf& buffer,
+ FX_BOOL bFirstObject = TRUE) {
+ buffer.AppendByte(0);
+ buffer.AppendByte(0);
+ buffer.AppendByte(0);
+ buffer.AppendByte(0);
+ buffer.AppendByte(0);
+ if (bFirstObject) {
+ buffer.AppendByte(0xFF);
+ buffer.AppendByte(0xFF);
+ } else {
buffer.AppendByte(0);
buffer.AppendByte(0);
- buffer.AppendByte(0);
- if (bFirstObject) {
- buffer.AppendByte(0xFF);
- buffer.AppendByte(0xFF);
- } else {
- buffer.AppendByte(0);
- buffer.AppendByte(0);
- }
+ }
}
-static void _AppendIndex1(CFX_ByteTextBuf& buffer, FX_FILESIZE offset)
-{
- buffer.AppendByte(1);
- buffer.AppendByte(FX_GETBYTEOFFSET24(offset));
- buffer.AppendByte(FX_GETBYTEOFFSET16(offset));
- buffer.AppendByte(FX_GETBYTEOFFSET8(offset));
- buffer.AppendByte(FX_GETBYTEOFFSET0(offset));
- buffer.AppendByte(0);
- buffer.AppendByte(0);
+static void _AppendIndex1(CFX_ByteTextBuf& buffer, FX_FILESIZE offset) {
+ buffer.AppendByte(1);
+ buffer.AppendByte(FX_GETBYTEOFFSET24(offset));
+ buffer.AppendByte(FX_GETBYTEOFFSET16(offset));
+ buffer.AppendByte(FX_GETBYTEOFFSET8(offset));
+ buffer.AppendByte(FX_GETBYTEOFFSET0(offset));
+ buffer.AppendByte(0);
+ buffer.AppendByte(0);
}
-static void _AppendIndex2(CFX_ByteTextBuf& buffer, FX_DWORD objnum, int32_t index)
-{
- buffer.AppendByte(2);
- buffer.AppendByte(FX_GETBYTEOFFSET24(objnum));
- buffer.AppendByte(FX_GETBYTEOFFSET16(objnum));
- buffer.AppendByte(FX_GETBYTEOFFSET8(objnum));
- buffer.AppendByte(FX_GETBYTEOFFSET0(objnum));
- buffer.AppendByte(FX_GETBYTEOFFSET8(index));
- buffer.AppendByte(FX_GETBYTEOFFSET0(index));
+static void _AppendIndex2(CFX_ByteTextBuf& buffer,
+ FX_DWORD objnum,
+ int32_t index) {
+ buffer.AppendByte(2);
+ buffer.AppendByte(FX_GETBYTEOFFSET24(objnum));
+ buffer.AppendByte(FX_GETBYTEOFFSET16(objnum));
+ buffer.AppendByte(FX_GETBYTEOFFSET8(objnum));
+ buffer.AppendByte(FX_GETBYTEOFFSET0(objnum));
+ buffer.AppendByte(FX_GETBYTEOFFSET8(index));
+ buffer.AppendByte(FX_GETBYTEOFFSET0(index));
}
-int32_t CPDF_XRefStream::EndObjectStream(CPDF_Creator *pCreator, FX_BOOL bEOF)
-{
- FX_FILESIZE objOffset = 0;
- if (bEOF) {
- objOffset = m_ObjStream.End(pCreator);
- if (objOffset < 0) {
- return -1;
- }
- }
- FX_DWORD &dwObjStmNum = m_ObjStream.m_dwObjNum;
- if (!dwObjStmNum) {
- dwObjStmNum = ++pCreator->m_dwLastObjNum;
- }
- int32_t iSize = m_ObjStream.m_ObjNumArray.GetSize();
- int32_t iSeg = m_IndexArray.GetSize() / 2;
- if (!(pCreator->m_dwFlags & FPDFCREATE_INCREMENTAL)) {
- if (m_dwTempObjNum == 0) {
- _AppendIndex0(m_Buffer);
- m_dwTempObjNum++;
- }
- FX_DWORD end_num = m_IndexArray.GetAt((iSeg - 1) * 2) + m_IndexArray.GetAt((iSeg - 1) * 2 + 1);
- int index = 0;
- for (; m_dwTempObjNum < end_num; m_dwTempObjNum++) {
- FX_FILESIZE* offset = pCreator->m_ObjectOffset.GetPtrAt(m_dwTempObjNum);
- if (offset) {
- if (index >= iSize || m_dwTempObjNum != m_ObjStream.m_ObjNumArray[index]) {
- _AppendIndex1(m_Buffer, *offset);
- } else {
- _AppendIndex2(m_Buffer, dwObjStmNum, index++);
- }
- } else {
- _AppendIndex0(m_Buffer, FALSE);
- }
- }
- if (iSize > 0 && bEOF) {
- pCreator->m_ObjectOffset.Add(dwObjStmNum, 1);
- pCreator->m_ObjectSize.Add(dwObjStmNum, 1);
- pCreator->m_ObjectOffset[dwObjStmNum] = objOffset;
- }
- m_iSeg = iSeg;
- if (bEOF) {
- m_ObjStream.Start();
- }
- return 1;
- }
- int32_t &j = m_ObjStream.m_index;
- for (int i = m_iSeg; i < iSeg; i++) {
- FX_DWORD start = m_IndexArray.ElementAt(i * 2);
- FX_DWORD end = m_IndexArray.ElementAt(i * 2 + 1) + start;
- for (FX_DWORD m = start; m < end; m++) {
- if (j >= iSize || m != m_ObjStream.m_ObjNumArray.ElementAt(j)) {
- _AppendIndex1(m_Buffer, pCreator->m_ObjectOffset[m]);
- } else {
- _AppendIndex2(m_Buffer, dwObjStmNum, j++);
- }
+int32_t CPDF_XRefStream::EndObjectStream(CPDF_Creator* pCreator, FX_BOOL bEOF) {
+ FX_FILESIZE objOffset = 0;
+ if (bEOF) {
+ objOffset = m_ObjStream.End(pCreator);
+ if (objOffset < 0) {
+ return -1;
+ }
+ }
+ FX_DWORD& dwObjStmNum = m_ObjStream.m_dwObjNum;
+ if (!dwObjStmNum) {
+ dwObjStmNum = ++pCreator->m_dwLastObjNum;
+ }
+ int32_t iSize = m_ObjStream.m_ObjNumArray.GetSize();
+ int32_t iSeg = m_IndexArray.GetSize() / 2;
+ if (!(pCreator->m_dwFlags & FPDFCREATE_INCREMENTAL)) {
+ if (m_dwTempObjNum == 0) {
+ _AppendIndex0(m_Buffer);
+ m_dwTempObjNum++;
+ }
+ FX_DWORD end_num = m_IndexArray.GetAt((iSeg - 1) * 2) +
+ m_IndexArray.GetAt((iSeg - 1) * 2 + 1);
+ int index = 0;
+ for (; m_dwTempObjNum < end_num; m_dwTempObjNum++) {
+ FX_FILESIZE* offset = pCreator->m_ObjectOffset.GetPtrAt(m_dwTempObjNum);
+ if (offset) {
+ if (index >= iSize ||
+ m_dwTempObjNum != m_ObjStream.m_ObjNumArray[index]) {
+ _AppendIndex1(m_Buffer, *offset);
+ } else {
+ _AppendIndex2(m_Buffer, dwObjStmNum, index++);
}
+ } else {
+ _AppendIndex0(m_Buffer, FALSE);
+ }
}
if (iSize > 0 && bEOF) {
- _AppendIndex1(m_Buffer, objOffset);
- m_IndexArray.Add(dwObjStmNum);
- m_IndexArray.Add(1);
- iSeg += 1;
+ pCreator->m_ObjectOffset.Add(dwObjStmNum, 1);
+ pCreator->m_ObjectSize.Add(dwObjStmNum, 1);
+ pCreator->m_ObjectOffset[dwObjStmNum] = objOffset;
}
m_iSeg = iSeg;
if (bEOF) {
- m_ObjStream.Start();
+ m_ObjStream.Start();
}
return 1;
+ }
+ int32_t& j = m_ObjStream.m_index;
+ for (int i = m_iSeg; i < iSeg; i++) {
+ FX_DWORD start = m_IndexArray.ElementAt(i * 2);
+ FX_DWORD end = m_IndexArray.ElementAt(i * 2 + 1) + start;
+ for (FX_DWORD m = start; m < end; m++) {
+ if (j >= iSize || m != m_ObjStream.m_ObjNumArray.ElementAt(j)) {
+ _AppendIndex1(m_Buffer, pCreator->m_ObjectOffset[m]);
+ } else {
+ _AppendIndex2(m_Buffer, dwObjStmNum, j++);
+ }
+ }
+ }
+ if (iSize > 0 && bEOF) {
+ _AppendIndex1(m_Buffer, objOffset);
+ m_IndexArray.Add(dwObjStmNum);
+ m_IndexArray.Add(1);
+ iSeg += 1;
+ }
+ m_iSeg = iSeg;
+ if (bEOF) {
+ m_ObjStream.Start();
+ }
+ return 1;
}
-FX_BOOL CPDF_XRefStream::GenerateXRefStream(CPDF_Creator* pCreator, FX_BOOL bEOF)
-{
- FX_FILESIZE offset_tmp = pCreator->m_Offset;
- FX_DWORD objnum = ++pCreator->m_dwLastObjNum;
- CFX_FileBufferArchive *pFile = &pCreator->m_File;
- FX_BOOL bIncremental = (pCreator->m_dwFlags & FPDFCREATE_INCREMENTAL) != 0;
- if (bIncremental) {
- AddObjectNumberToIndexArray(objnum);
- } else {
- for (; m_dwTempObjNum < pCreator->m_dwLastObjNum; m_dwTempObjNum++) {
- FX_FILESIZE* offset = pCreator->m_ObjectOffset.GetPtrAt(m_dwTempObjNum);
- if (offset) {
- _AppendIndex1(m_Buffer, *offset);
- } else {
- _AppendIndex0(m_Buffer, FALSE);
- }
- }
- }
- _AppendIndex1(m_Buffer, offset_tmp);
- FX_FILESIZE &offset = pCreator->m_Offset;
- int32_t len = pFile->AppendDWord(objnum);
- if (len < 0) {
- return FALSE;
- }
- offset += len;
- if ((len = pFile->AppendString(FX_BSTRC(" 0 obj\r\n<</Type /XRef/W[1 4 2]/Index["))) < 0) {
- return FALSE;
+FX_BOOL CPDF_XRefStream::GenerateXRefStream(CPDF_Creator* pCreator,
+ FX_BOOL bEOF) {
+ FX_FILESIZE offset_tmp = pCreator->m_Offset;
+ FX_DWORD objnum = ++pCreator->m_dwLastObjNum;
+ CFX_FileBufferArchive* pFile = &pCreator->m_File;
+ FX_BOOL bIncremental = (pCreator->m_dwFlags & FPDFCREATE_INCREMENTAL) != 0;
+ if (bIncremental) {
+ AddObjectNumberToIndexArray(objnum);
+ } else {
+ for (; m_dwTempObjNum < pCreator->m_dwLastObjNum; m_dwTempObjNum++) {
+ FX_FILESIZE* offset = pCreator->m_ObjectOffset.GetPtrAt(m_dwTempObjNum);
+ if (offset) {
+ _AppendIndex1(m_Buffer, *offset);
+ } else {
+ _AppendIndex0(m_Buffer, FALSE);
+ }
+ }
+ }
+ _AppendIndex1(m_Buffer, offset_tmp);
+ FX_FILESIZE& offset = pCreator->m_Offset;
+ int32_t len = pFile->AppendDWord(objnum);
+ if (len < 0) {
+ return FALSE;
+ }
+ offset += len;
+ if ((len = pFile->AppendString(
+ FX_BSTRC(" 0 obj\r\n<</Type /XRef/W[1 4 2]/Index["))) < 0) {
+ return FALSE;
+ }
+ offset += len;
+ if (!bIncremental) {
+ if ((len = pFile->AppendDWord(0)) < 0) {
+ return FALSE;
+ }
+ if ((len = pFile->AppendString(FX_BSTRC(" "))) < 0) {
+ return FALSE;
+ }
+ offset += len + 1;
+ if ((len = pFile->AppendDWord(objnum + 1)) < 0) {
+ return FALSE;
}
offset += len;
- if (!bIncremental) {
- if ((len = pFile->AppendDWord(0)) < 0) {
- return FALSE;
- }
- if ((len = pFile->AppendString(FX_BSTRC(" "))) < 0) {
- return FALSE;
- }
- offset += len + 1;
- if ((len = pFile->AppendDWord(objnum + 1)) < 0) {
- return FALSE;
- }
- offset += len;
- } else {
- int32_t iSeg = m_IndexArray.GetSize() / 2;
- for (int32_t i = 0; i < iSeg; i++) {
- if ((len = pFile->AppendDWord(m_IndexArray.ElementAt(i * 2))) < 0) {
- return FALSE;
- }
- if (pFile->AppendString(FX_BSTRC(" ")) < 0) {
- return FALSE;
- }
- offset += len + 1;
- if ((len = pFile->AppendDWord(m_IndexArray.ElementAt(i * 2 + 1))) < 0) {
- return FALSE;
- }
- if (pFile->AppendString(FX_BSTRC(" ")) < 0) {
- return FALSE;
- }
- offset += len + 1;
- }
- }
- if (pFile->AppendString(FX_BSTRC("]/Size ")) < 0) {
+ } else {
+ int32_t iSeg = m_IndexArray.GetSize() / 2;
+ for (int32_t i = 0; i < iSeg; i++) {
+ if ((len = pFile->AppendDWord(m_IndexArray.ElementAt(i * 2))) < 0) {
return FALSE;
- }
- if ((len = pFile->AppendDWord(objnum + 1)) < 0) {
+ }
+ if (pFile->AppendString(FX_BSTRC(" ")) < 0) {
return FALSE;
- }
- offset += len + 7;
- if (m_PrevOffset > 0) {
- if (pFile->AppendString(FX_BSTRC("/Prev ")) < 0) {
- return FALSE;
- }
- FX_CHAR offset_buf[20];
- FXSYS_memset(offset_buf, 0, sizeof(offset_buf));
- FXSYS_i64toa(m_PrevOffset, offset_buf, 10);
- int32_t len = (int32_t)FXSYS_strlen(offset_buf);
- if (pFile->AppendBlock(offset_buf, len) < 0) {
- return FALSE;
- }
- offset += len + 6;
- }
- FX_BOOL bPredictor = TRUE;
- CPDF_FlateEncoder encoder;
- encoder.Initialize(m_Buffer.GetBuffer(), m_Buffer.GetLength(), pCreator->m_bCompress, bPredictor);
- if (pCreator->m_bCompress) {
- if (pFile->AppendString(FX_BSTRC("/Filter /FlateDecode")) < 0) {
- return FALSE;
- }
- offset += 20;
- if (bPredictor) {
- if ((len = pFile->AppendString(FX_BSTRC("/DecodeParms<</Columns 7/Predictor 12>>"))) < 0) {
- return FALSE;
- }
- offset += len;
- }
- }
- if (pFile->AppendString(FX_BSTRC("/Length ")) < 0) {
+ }
+ offset += len + 1;
+ if ((len = pFile->AppendDWord(m_IndexArray.ElementAt(i * 2 + 1))) < 0) {
return FALSE;
- }
- if ((len = pFile->AppendDWord(encoder.m_dwSize)) < 0) {
+ }
+ if (pFile->AppendString(FX_BSTRC(" ")) < 0) {
return FALSE;
+ }
+ offset += len + 1;
+ }
+ }
+ if (pFile->AppendString(FX_BSTRC("]/Size ")) < 0) {
+ return FALSE;
+ }
+ if ((len = pFile->AppendDWord(objnum + 1)) < 0) {
+ return FALSE;
+ }
+ offset += len + 7;
+ if (m_PrevOffset > 0) {
+ if (pFile->AppendString(FX_BSTRC("/Prev ")) < 0) {
+ return FALSE;
}
- offset += len + 8;
- if (bEOF) {
- if ((len = PDF_CreatorWriteTrailer(pCreator->m_pDocument, pFile, pCreator->m_pIDArray, pCreator->m_bCompress)) < 0) {
- return FALSE;
- }
- offset += len;
- if (pCreator->m_pEncryptDict) {
- FX_DWORD dwEncryptObjNum = pCreator->m_pEncryptDict->GetObjNum();
- if (dwEncryptObjNum == 0) {
- dwEncryptObjNum = pCreator->m_dwEnryptObjNum;
- }
- if ((len = PDF_CreatorWriteEncrypt(pCreator->m_pEncryptDict, dwEncryptObjNum, pFile)) < 0) {
- return FALSE;
- }
- offset += len;
- }
+ FX_CHAR offset_buf[20];
+ FXSYS_memset(offset_buf, 0, sizeof(offset_buf));
+ FXSYS_i64toa(m_PrevOffset, offset_buf, 10);
+ int32_t len = (int32_t)FXSYS_strlen(offset_buf);
+ if (pFile->AppendBlock(offset_buf, len) < 0) {
+ return FALSE;
}
- if ((len = pFile->AppendString(FX_BSTRC(">>stream\r\n"))) < 0) {
+ offset += len + 6;
+ }
+ FX_BOOL bPredictor = TRUE;
+ CPDF_FlateEncoder encoder;
+ encoder.Initialize(m_Buffer.GetBuffer(), m_Buffer.GetLength(),
+ pCreator->m_bCompress, bPredictor);
+ if (pCreator->m_bCompress) {
+ if (pFile->AppendString(FX_BSTRC("/Filter /FlateDecode")) < 0) {
+ return FALSE;
+ }
+ offset += 20;
+ if (bPredictor) {
+ if ((len = pFile->AppendString(
+ FX_BSTRC("/DecodeParms<</Columns 7/Predictor 12>>"))) < 0) {
return FALSE;
+ }
+ offset += len;
+ }
+ }
+ if (pFile->AppendString(FX_BSTRC("/Length ")) < 0) {
+ return FALSE;
+ }
+ if ((len = pFile->AppendDWord(encoder.m_dwSize)) < 0) {
+ return FALSE;
+ }
+ offset += len + 8;
+ if (bEOF) {
+ if ((len = PDF_CreatorWriteTrailer(pCreator->m_pDocument, pFile,
+ pCreator->m_pIDArray,
+ pCreator->m_bCompress)) < 0) {
+ return FALSE;
}
offset += len;
- if (pFile->AppendBlock(encoder.m_pData, encoder.m_dwSize) < 0) {
- return FALSE;
- }
- if ((len = pFile->AppendString(FX_BSTRC("\r\nendstream\r\nendobj\r\n"))) < 0) {
+ if (pCreator->m_pEncryptDict) {
+ FX_DWORD dwEncryptObjNum = pCreator->m_pEncryptDict->GetObjNum();
+ if (dwEncryptObjNum == 0) {
+ dwEncryptObjNum = pCreator->m_dwEnryptObjNum;
+ }
+ if ((len = PDF_CreatorWriteEncrypt(pCreator->m_pEncryptDict,
+ dwEncryptObjNum, pFile)) < 0) {
return FALSE;
- }
- offset += encoder.m_dwSize + len;
- m_PrevOffset = offset_tmp;
- return TRUE;
+ }
+ offset += len;
+ }
+ }
+ if ((len = pFile->AppendString(FX_BSTRC(">>stream\r\n"))) < 0) {
+ return FALSE;
+ }
+ offset += len;
+ if (pFile->AppendBlock(encoder.m_pData, encoder.m_dwSize) < 0) {
+ return FALSE;
+ }
+ if ((len = pFile->AppendString(FX_BSTRC("\r\nendstream\r\nendobj\r\n"))) <
+ 0) {
+ return FALSE;
+ }
+ offset += encoder.m_dwSize + len;
+ m_PrevOffset = offset_tmp;
+ return TRUE;
}
-FX_BOOL CPDF_XRefStream::End(CPDF_Creator *pCreator, FX_BOOL bEOF )
-{
- if (EndObjectStream(pCreator, bEOF) < 0) {
- return FALSE;
- }
- return GenerateXRefStream(pCreator, bEOF);
+FX_BOOL CPDF_XRefStream::End(CPDF_Creator* pCreator, FX_BOOL bEOF) {
+ if (EndObjectStream(pCreator, bEOF) < 0) {
+ return FALSE;
+ }
+ return GenerateXRefStream(pCreator, bEOF);
}
-FX_BOOL CPDF_XRefStream::EndXRefStream(CPDF_Creator* pCreator)
-{
- if (!(pCreator->m_dwFlags & FPDFCREATE_INCREMENTAL)) {
- _AppendIndex0(m_Buffer);
- for (FX_DWORD i = 1; i < pCreator->m_dwLastObjNum + 1; i++) {
- FX_FILESIZE* offset = pCreator->m_ObjectOffset.GetPtrAt(i);
- if (offset) {
- _AppendIndex1(m_Buffer, *offset);
- } else {
- _AppendIndex0(m_Buffer, FALSE);
- }
- }
- } else {
- int32_t iSeg = m_IndexArray.GetSize() / 2;
- for (int i = 0; i < iSeg; i++) {
- FX_DWORD start = m_IndexArray.ElementAt(i * 2);
- FX_DWORD end = m_IndexArray.ElementAt(i * 2 + 1) + start;
- for (FX_DWORD j = start; j < end; j++) {
- _AppendIndex1(m_Buffer, pCreator->m_ObjectOffset[j]);
- }
- }
- }
- return GenerateXRefStream(pCreator, FALSE);
+FX_BOOL CPDF_XRefStream::EndXRefStream(CPDF_Creator* pCreator) {
+ if (!(pCreator->m_dwFlags & FPDFCREATE_INCREMENTAL)) {
+ _AppendIndex0(m_Buffer);
+ for (FX_DWORD i = 1; i < pCreator->m_dwLastObjNum + 1; i++) {
+ FX_FILESIZE* offset = pCreator->m_ObjectOffset.GetPtrAt(i);
+ if (offset) {
+ _AppendIndex1(m_Buffer, *offset);
+ } else {
+ _AppendIndex0(m_Buffer, FALSE);
+ }
+ }
+ } else {
+ int32_t iSeg = m_IndexArray.GetSize() / 2;
+ for (int i = 0; i < iSeg; i++) {
+ FX_DWORD start = m_IndexArray.ElementAt(i * 2);
+ FX_DWORD end = m_IndexArray.ElementAt(i * 2 + 1) + start;
+ for (FX_DWORD j = start; j < end; j++) {
+ _AppendIndex1(m_Buffer, pCreator->m_ObjectOffset[j]);
+ }
+ }
+ }
+ return GenerateXRefStream(pCreator, FALSE);
}
-FX_BOOL CPDF_XRefStream::AddObjectNumberToIndexArray(FX_DWORD objnum)
-{
- int32_t iSize = m_IndexArray.GetSize();
- if (iSize == 0) {
- m_IndexArray.Add(objnum);
- m_IndexArray.Add(1);
+FX_BOOL CPDF_XRefStream::AddObjectNumberToIndexArray(FX_DWORD objnum) {
+ int32_t iSize = m_IndexArray.GetSize();
+ if (iSize == 0) {
+ m_IndexArray.Add(objnum);
+ m_IndexArray.Add(1);
+ } else {
+ FXSYS_assert(iSize > 1);
+ FX_DWORD startobjnum = m_IndexArray.ElementAt(iSize - 2);
+ int32_t iCount = m_IndexArray.ElementAt(iSize - 1);
+ if (objnum == startobjnum + iCount) {
+ m_IndexArray[iSize - 1] = iCount + 1;
} else {
- FXSYS_assert(iSize > 1);
- FX_DWORD startobjnum = m_IndexArray.ElementAt(iSize - 2);
- int32_t iCount = m_IndexArray.ElementAt(iSize - 1);
- if (objnum == startobjnum + iCount) {
- m_IndexArray[iSize - 1] = iCount + 1;
- } else {
- m_IndexArray.Add(objnum);
- m_IndexArray.Add(1);
- }
+ m_IndexArray.Add(objnum);
+ m_IndexArray.Add(1);
}
- return TRUE;
+ }
+ return TRUE;
}
-CPDF_Creator::CPDF_Creator(CPDF_Document* pDoc)
-{
- m_pDocument = pDoc;
- m_pParser = (CPDF_Parser*)pDoc->m_pParser;
- m_bCompress = TRUE;
- if (m_pParser) {
- m_pEncryptDict = m_pParser->GetEncryptDict();
- m_pCryptoHandler = m_pParser->GetCryptoHandler();
- } else {
- m_pEncryptDict = NULL;
- m_pCryptoHandler = NULL;
- }
- m_bSecurityChanged = FALSE;
- m_bStandardSecurity = FALSE;
- m_pMetadata = NULL;
- m_bEncryptCloned = FALSE;
- m_bEncryptMetadata = FALSE;
- m_Offset = 0;
- m_iStage = -1;
- m_dwFlags = 0;
- m_Pos = NULL;
- m_XrefStart = 0;
- m_pXRefStream = NULL;
- m_ObjectStreamSize = 200;
- m_dwLastObjNum = m_pDocument->GetLastObjNum();
- m_pIDArray = NULL;
- m_FileVersion = 0;
- m_dwEnryptObjNum = 0;
- m_bNewCrypto = FALSE;
+CPDF_Creator::CPDF_Creator(CPDF_Document* pDoc) {
+ m_pDocument = pDoc;
+ m_pParser = (CPDF_Parser*)pDoc->m_pParser;
+ m_bCompress = TRUE;
+ if (m_pParser) {
+ m_pEncryptDict = m_pParser->GetEncryptDict();
+ m_pCryptoHandler = m_pParser->GetCryptoHandler();
+ } else {
+ m_pEncryptDict = NULL;
+ m_pCryptoHandler = NULL;
+ }
+ m_bSecurityChanged = FALSE;
+ m_bStandardSecurity = FALSE;
+ m_pMetadata = NULL;
+ m_bEncryptCloned = FALSE;
+ m_bEncryptMetadata = FALSE;
+ m_Offset = 0;
+ m_iStage = -1;
+ m_dwFlags = 0;
+ m_Pos = NULL;
+ m_XrefStart = 0;
+ m_pXRefStream = NULL;
+ m_ObjectStreamSize = 200;
+ m_dwLastObjNum = m_pDocument->GetLastObjNum();
+ m_pIDArray = NULL;
+ m_FileVersion = 0;
+ m_dwEnryptObjNum = 0;
+ m_bNewCrypto = FALSE;
}
-CPDF_Creator::~CPDF_Creator()
-{
- ResetStandardSecurity();
- if (m_bEncryptCloned && m_pEncryptDict) {
- m_pEncryptDict->Release();
- m_pEncryptDict = NULL;
- }
- Clear();
+CPDF_Creator::~CPDF_Creator() {
+ ResetStandardSecurity();
+ if (m_bEncryptCloned && m_pEncryptDict) {
+ m_pEncryptDict->Release();
+ m_pEncryptDict = NULL;
+ }
+ Clear();
}
-static FX_BOOL _IsXRefNeedEnd(CPDF_XRefStream* pXRef, FX_DWORD flag)
-{
- if (!(flag & FPDFCREATE_INCREMENTAL)) {
- return FALSE;
- }
- int32_t iSize = pXRef->m_IndexArray.GetSize() / 2;
- int32_t iCount = 0;
- for (int32_t i = 0; i < iSize; i++) {
- iCount += pXRef->m_IndexArray.ElementAt(i * 2 + 1);
- }
- return (iCount >= PDF_XREFSTREAM_MAXSIZE);
+static FX_BOOL _IsXRefNeedEnd(CPDF_XRefStream* pXRef, FX_DWORD flag) {
+ if (!(flag & FPDFCREATE_INCREMENTAL)) {
+ return FALSE;
+ }
+ int32_t iSize = pXRef->m_IndexArray.GetSize() / 2;
+ int32_t iCount = 0;
+ for (int32_t i = 0; i < iSize; i++) {
+ iCount += pXRef->m_IndexArray.ElementAt(i * 2 + 1);
+ }
+ return (iCount >= PDF_XREFSTREAM_MAXSIZE);
}
-int32_t CPDF_Creator::WriteIndirectObjectToStream(const CPDF_Object* pObj)
-{
- if (!m_pXRefStream) {
- return 1;
- }
- FX_DWORD objnum = pObj->GetObjNum();
- if (m_pParser && m_pParser->m_ObjVersion.GetSize() > (int32_t)objnum && m_pParser->m_ObjVersion[objnum] > 0) {
- return 1;
- }
- if (pObj->GetType() == PDFOBJ_NUMBER) {
- return 1;
- }
- CPDF_Dictionary *pDict = pObj->GetDict();
- if (pObj->GetType() == PDFOBJ_STREAM) {
- if (pDict && pDict->GetString(FX_BSTRC("Type")) == FX_BSTRC("XRef")) {
- return 0;
- }
- return 1;
- }
- if (pDict) {
- if (pDict == m_pDocument->m_pRootDict || pDict == m_pEncryptDict) {
- return 1;
- }
- if (IsSignatureDict(pDict)) {
- return 1;
- }
- if (pDict->GetString(FX_BSTRC("Type")) == FX_BSTRC("Page")) {
- return 1;
- }
- }
- m_pXRefStream->AddObjectNumberToIndexArray(objnum);
- if (m_pXRefStream->CompressIndirectObject(objnum, pObj, this) < 0) {
- return -1;
- }
- if (!_IsXRefNeedEnd(m_pXRefStream, m_dwFlags)) {
- return 0;
- }
- if (!m_pXRefStream->End(this)) {
- return -1;
- }
- if (!m_pXRefStream->Start()) {
- return -1;
+int32_t CPDF_Creator::WriteIndirectObjectToStream(const CPDF_Object* pObj) {
+ if (!m_pXRefStream) {
+ return 1;
+ }
+ FX_DWORD objnum = pObj->GetObjNum();
+ if (m_pParser && m_pParser->m_ObjVersion.GetSize() > (int32_t)objnum &&
+ m_pParser->m_ObjVersion[objnum] > 0) {
+ return 1;
+ }
+ if (pObj->GetType() == PDFOBJ_NUMBER) {
+ return 1;
+ }
+ CPDF_Dictionary* pDict = pObj->GetDict();
+ if (pObj->GetType() == PDFOBJ_STREAM) {
+ if (pDict && pDict->GetString(FX_BSTRC("Type")) == FX_BSTRC("XRef")) {
+ return 0;
}
+ return 1;
+ }
+ if (pDict) {
+ if (pDict == m_pDocument->m_pRootDict || pDict == m_pEncryptDict) {
+ return 1;
+ }
+ if (IsSignatureDict(pDict)) {
+ return 1;
+ }
+ if (pDict->GetString(FX_BSTRC("Type")) == FX_BSTRC("Page")) {
+ return 1;
+ }
+ }
+ m_pXRefStream->AddObjectNumberToIndexArray(objnum);
+ if (m_pXRefStream->CompressIndirectObject(objnum, pObj, this) < 0) {
+ return -1;
+ }
+ if (!_IsXRefNeedEnd(m_pXRefStream, m_dwFlags)) {
return 0;
+ }
+ if (!m_pXRefStream->End(this)) {
+ return -1;
+ }
+ if (!m_pXRefStream->Start()) {
+ return -1;
+ }
+ return 0;
}
-int32_t CPDF_Creator::WriteIndirectObjectToStream(FX_DWORD objnum, const uint8_t* pBuffer, FX_DWORD dwSize)
-{
- if (!m_pXRefStream) {
- return 1;
- }
- m_pXRefStream->AddObjectNumberToIndexArray(objnum);
- int32_t iRet = m_pXRefStream->CompressIndirectObject(objnum, pBuffer, dwSize, this);
- if (iRet < 1) {
- return iRet;
- }
- if (!_IsXRefNeedEnd(m_pXRefStream, m_dwFlags)) {
- return 0;
- }
- if (!m_pXRefStream->End(this)) {
- return -1;
- }
- if (!m_pXRefStream->Start()) {
- return -1;
- }
+int32_t CPDF_Creator::WriteIndirectObjectToStream(FX_DWORD objnum,
+ const uint8_t* pBuffer,
+ FX_DWORD dwSize) {
+ if (!m_pXRefStream) {
+ return 1;
+ }
+ m_pXRefStream->AddObjectNumberToIndexArray(objnum);
+ int32_t iRet =
+ m_pXRefStream->CompressIndirectObject(objnum, pBuffer, dwSize, this);
+ if (iRet < 1) {
+ return iRet;
+ }
+ if (!_IsXRefNeedEnd(m_pXRefStream, m_dwFlags)) {
return 0;
+ }
+ if (!m_pXRefStream->End(this)) {
+ return -1;
+ }
+ if (!m_pXRefStream->Start()) {
+ return -1;
+ }
+ return 0;
}
-int32_t CPDF_Creator::AppendObjectNumberToXRef(FX_DWORD objnum)
-{
- if (!m_pXRefStream) {
- return 1;
- }
- m_pXRefStream->AddObjectNumberToIndexArray(objnum);
- if (!_IsXRefNeedEnd(m_pXRefStream, m_dwFlags)) {
- return 0;
- }
- if (!m_pXRefStream->End(this)) {
- return -1;
- }
- if (!m_pXRefStream->Start()) {
- return -1;
- }
+int32_t CPDF_Creator::AppendObjectNumberToXRef(FX_DWORD objnum) {
+ if (!m_pXRefStream) {
+ return 1;
+ }
+ m_pXRefStream->AddObjectNumberToIndexArray(objnum);
+ if (!_IsXRefNeedEnd(m_pXRefStream, m_dwFlags)) {
return 0;
+ }
+ if (!m_pXRefStream->End(this)) {
+ return -1;
+ }
+ if (!m_pXRefStream->Start()) {
+ return -1;
+ }
+ return 0;
}
-int32_t CPDF_Creator::WriteStream(const CPDF_Object* pStream, FX_DWORD objnum, CPDF_CryptoHandler* pCrypto)
-{
- CPDF_FlateEncoder encoder;
- encoder.Initialize((CPDF_Stream*)pStream, pStream == m_pMetadata ? FALSE : m_bCompress);
- CPDF_Encryptor encryptor;
- if(!encryptor.Initialize(pCrypto, objnum, encoder.m_pData, encoder.m_dwSize)) {
+int32_t CPDF_Creator::WriteStream(const CPDF_Object* pStream,
+ FX_DWORD objnum,
+ CPDF_CryptoHandler* pCrypto) {
+ CPDF_FlateEncoder encoder;
+ encoder.Initialize((CPDF_Stream*)pStream,
+ pStream == m_pMetadata ? FALSE : m_bCompress);
+ CPDF_Encryptor encryptor;
+ if (!encryptor.Initialize(pCrypto, objnum, encoder.m_pData,
+ encoder.m_dwSize)) {
+ return -1;
+ }
+ if ((FX_DWORD)encoder.m_pDict->GetInteger(FX_BSTRC("Length")) !=
+ encryptor.m_dwSize) {
+ encoder.CloneDict();
+ encoder.m_pDict->SetAtInteger(FX_BSTRC("Length"), encryptor.m_dwSize);
+ }
+ if (WriteDirectObj(objnum, encoder.m_pDict) < 0) {
+ return -1;
+ }
+ int len = m_File.AppendString(FX_BSTRC("stream\r\n"));
+ if (len < 0) {
+ return -1;
+ }
+ m_Offset += len;
+ if (m_File.AppendBlock(encryptor.m_pData, encryptor.m_dwSize) < 0) {
+ return -1;
+ }
+ m_Offset += encryptor.m_dwSize;
+ if ((len = m_File.AppendString(FX_BSTRC("\r\nendstream"))) < 0) {
+ return -1;
+ }
+ m_Offset += len;
+ return 1;
+}
+int32_t CPDF_Creator::WriteIndirectObj(FX_DWORD objnum,
+ const CPDF_Object* pObj) {
+ int32_t len = m_File.AppendDWord(objnum);
+ if (len < 0) {
+ return -1;
+ }
+ m_Offset += len;
+ if ((len = m_File.AppendString(FX_BSTRC(" 0 obj\r\n"))) < 0) {
+ return -1;
+ }
+ m_Offset += len;
+ if (pObj->GetType() == PDFOBJ_STREAM) {
+ CPDF_CryptoHandler* pHandler = NULL;
+ pHandler =
+ (pObj == m_pMetadata && !m_bEncryptMetadata) ? NULL : m_pCryptoHandler;
+ if (WriteStream(pObj, objnum, pHandler) < 0) {
+ return -1;
+ }
+ } else {
+ if (WriteDirectObj(objnum, pObj) < 0) {
+ return -1;
+ }
+ }
+ if ((len = m_File.AppendString(FX_BSTRC("\r\nendobj\r\n"))) < 0) {
+ return -1;
+ }
+ m_Offset += len;
+ if (AppendObjectNumberToXRef(objnum) < 0) {
+ return -1;
+ }
+ return 0;
+}
+int32_t CPDF_Creator::WriteIndirectObj(const CPDF_Object* pObj) {
+ int32_t iRet = WriteIndirectObjectToStream(pObj);
+ if (iRet < 1) {
+ return iRet;
+ }
+ return WriteIndirectObj(pObj->GetObjNum(), pObj);
+}
+int32_t CPDF_Creator::WriteDirectObj(FX_DWORD objnum,
+ const CPDF_Object* pObj,
+ FX_BOOL bEncrypt) {
+ int32_t len = 0;
+ if (pObj == NULL) {
+ if (m_File.AppendString(FX_BSTRC(" null")) < 0) {
+ return -1;
+ }
+ m_Offset += 5;
+ return 1;
+ }
+ switch (pObj->GetType()) {
+ case PDFOBJ_NULL:
+ if (m_File.AppendString(FX_BSTRC(" null")) < 0) {
return -1;
- }
- if ((FX_DWORD)encoder.m_pDict->GetInteger(FX_BSTRC("Length")) != encryptor.m_dwSize) {
+ }
+ m_Offset += 5;
+ break;
+ case PDFOBJ_BOOLEAN:
+ case PDFOBJ_NUMBER:
+ if (m_File.AppendString(FX_BSTRC(" ")) < 0) {
+ return -1;
+ }
+ if ((len = m_File.AppendString(pObj->GetString())) < 0) {
+ return -1;
+ }
+ m_Offset += len + 1;
+ break;
+ case PDFOBJ_STRING: {
+ CFX_ByteString str = pObj->GetString();
+ FX_BOOL bHex = ((CPDF_String*)pObj)->IsHex();
+ if (m_pCryptoHandler == NULL || !bEncrypt) {
+ CFX_ByteString content = PDF_EncodeString(str, bHex);
+ if ((len = m_File.AppendString(content)) < 0) {
+ return -1;
+ }
+ m_Offset += len;
+ break;
+ }
+ CPDF_Encryptor encryptor;
+ encryptor.Initialize(m_pCryptoHandler, objnum, (uint8_t*)str.c_str(),
+ str.GetLength());
+ CFX_ByteString content = PDF_EncodeString(
+ CFX_ByteString((const FX_CHAR*)encryptor.m_pData, encryptor.m_dwSize),
+ bHex);
+ if ((len = m_File.AppendString(content)) < 0) {
+ return -1;
+ }
+ m_Offset += len;
+ break;
+ }
+ case PDFOBJ_STREAM: {
+ CPDF_FlateEncoder encoder;
+ encoder.Initialize((CPDF_Stream*)pObj, m_bCompress);
+ CPDF_Encryptor encryptor;
+ CPDF_CryptoHandler* pHandler = m_pCryptoHandler;
+ encryptor.Initialize(pHandler, objnum, encoder.m_pData, encoder.m_dwSize);
+ if ((FX_DWORD)encoder.m_pDict->GetInteger(FX_BSTRC("Length")) !=
+ encryptor.m_dwSize) {
encoder.CloneDict();
encoder.m_pDict->SetAtInteger(FX_BSTRC("Length"), encryptor.m_dwSize);
- }
- if (WriteDirectObj(objnum, encoder.m_pDict) < 0) {
+ }
+ if (WriteDirectObj(objnum, encoder.m_pDict) < 0) {
return -1;
- }
- int len = m_File.AppendString(FX_BSTRC("stream\r\n"));
- if (len < 0) {
+ }
+ if ((len = m_File.AppendString(FX_BSTRC("stream\r\n"))) < 0) {
return -1;
- }
- m_Offset += len;
- if (m_File.AppendBlock(encryptor.m_pData, encryptor.m_dwSize) < 0) {
+ }
+ m_Offset += len;
+ if (m_File.AppendBlock(encryptor.m_pData, encryptor.m_dwSize) < 0) {
return -1;
- }
- m_Offset += encryptor.m_dwSize;
- if ((len = m_File.AppendString(FX_BSTRC("\r\nendstream"))) < 0) {
+ }
+ m_Offset += encryptor.m_dwSize;
+ if ((len = m_File.AppendString(FX_BSTRC("\r\nendstream"))) < 0) {
return -1;
+ }
+ m_Offset += len;
+ break;
}
- m_Offset += len;
- return 1;
-}
-int32_t CPDF_Creator::WriteIndirectObj(FX_DWORD objnum, const CPDF_Object* pObj)
-{
- int32_t len = m_File.AppendDWord(objnum);
- if (len < 0) {
+ case PDFOBJ_NAME: {
+ if (m_File.AppendString(FX_BSTRC("/")) < 0) {
return -1;
+ }
+ CFX_ByteString str = pObj->GetString();
+ if ((len = m_File.AppendString(PDF_NameEncode(str))) < 0) {
+ return -1;
+ }
+ m_Offset += len + 1;
+ break;
}
- m_Offset += len;
- if ((len = m_File.AppendString(FX_BSTRC(" 0 obj\r\n"))) < 0) {
+ case PDFOBJ_REFERENCE: {
+ if (m_File.AppendString(FX_BSTRC(" ")) < 0) {
+ return -1;
+ }
+ CPDF_Reference* p = (CPDF_Reference*)pObj;
+ if ((len = m_File.AppendDWord(p->GetRefObjNum())) < 0) {
return -1;
+ }
+ if (m_File.AppendString(FX_BSTRC(" 0 R")) < 0) {
+ return -1;
+ }
+ m_Offset += len + 5;
+ break;
}
- m_Offset += len;
- if (pObj->GetType() == PDFOBJ_STREAM) {
- CPDF_CryptoHandler *pHandler = NULL;
- pHandler = (pObj == m_pMetadata && !m_bEncryptMetadata) ? NULL : m_pCryptoHandler;
- if (WriteStream(pObj, objnum, pHandler) < 0) {
+ case PDFOBJ_ARRAY: {
+ if (m_File.AppendString(FX_BSTRC("[")) < 0) {
+ return -1;
+ }
+ m_Offset += 1;
+ CPDF_Array* p = (CPDF_Array*)pObj;
+ for (FX_DWORD i = 0; i < p->GetCount(); i++) {
+ CPDF_Object* pElement = p->GetElement(i);
+ if (pElement->GetObjNum()) {
+ if (m_File.AppendString(FX_BSTRC(" ")) < 0) {
+ return -1;
+ }
+ if ((len = m_File.AppendDWord(pElement->GetObjNum())) < 0) {
return -1;
+ }
+ if (m_File.AppendString(FX_BSTRC(" 0 R")) < 0) {
+ return -1;
+ }
+ m_Offset += len + 5;
+ } else {
+ if (WriteDirectObj(objnum, pElement) < 0) {
+ return -1;
+ }
}
- } else {
- if (WriteDirectObj(objnum, pObj) < 0) {
+ }
+ if (m_File.AppendString(FX_BSTRC("]")) < 0) {
+ return -1;
+ }
+ m_Offset += 1;
+ break;
+ }
+ case PDFOBJ_DICTIONARY: {
+ if (m_pCryptoHandler == NULL || pObj == m_pEncryptDict) {
+ return PDF_CreatorAppendObject(pObj, &m_File, m_Offset);
+ }
+ if (m_File.AppendString(FX_BSTRC("<<")) < 0) {
+ return -1;
+ }
+ m_Offset += 2;
+ CPDF_Dictionary* p = (CPDF_Dictionary*)pObj;
+ FX_BOOL bSignDict = IsSignatureDict(p);
+ FX_POSITION pos = p->GetStartPos();
+ while (pos) {
+ FX_BOOL bSignValue = FALSE;
+ CFX_ByteString key;
+ CPDF_Object* pValue = p->GetNextElement(pos, key);
+ if (m_File.AppendString(FX_BSTRC("/")) < 0) {
+ return -1;
+ }
+ if ((len = m_File.AppendString(PDF_NameEncode(key))) < 0) {
+ return -1;
+ }
+ m_Offset += len + 1;
+ if (bSignDict && key == FX_BSTRC("Contents")) {
+ bSignValue = TRUE;
+ }
+ if (pValue->GetObjNum()) {
+ if (m_File.AppendString(FX_BSTRC(" ")) < 0) {
+ return -1;
+ }
+ if ((len = m_File.AppendDWord(pValue->GetObjNum())) < 0) {
+ return -1;
+ }
+ if (m_File.AppendString(FX_BSTRC(" 0 R ")) < 0) {
return -1;
+ }
+ m_Offset += len + 6;
+ } else {
+ if (WriteDirectObj(objnum, pValue, !bSignValue) < 0) {
+ return -1;
+ }
}
- }
- if ((len = m_File.AppendString(FX_BSTRC("\r\nendobj\r\n"))) < 0) {
+ }
+ if (m_File.AppendString(FX_BSTRC(">>")) < 0) {
return -1;
+ }
+ m_Offset += 2;
+ break;
}
- m_Offset += len;
- if (AppendObjectNumberToXRef(objnum) < 0) {
+ }
+ return 1;
+}
+int32_t CPDF_Creator::WriteOldIndirectObject(FX_DWORD objnum) {
+ if (m_pParser->m_V5Type[objnum] == 0 || m_pParser->m_V5Type[objnum] == 255) {
+ return 0;
+ }
+ m_ObjectOffset[objnum] = m_Offset;
+ void* valuetemp = NULL;
+ FX_BOOL bExistInMap =
+ m_pDocument->m_IndirectObjs.Lookup((void*)(uintptr_t)objnum, valuetemp);
+ FX_BOOL bObjStm =
+ (m_pParser->m_V5Type[objnum] == 2) && m_pEncryptDict && !m_pXRefStream;
+ if (m_pParser->m_bVersionUpdated || m_bSecurityChanged || bExistInMap ||
+ bObjStm) {
+ CPDF_Object* pObj = m_pDocument->GetIndirectObject(objnum);
+ if (pObj == NULL) {
+ m_ObjectOffset[objnum] = 0;
+ m_ObjectSize[objnum] = 0;
+ return 0;
+ }
+ if (WriteIndirectObj(pObj)) {
+ return -1;
+ }
+ if (!bExistInMap) {
+ m_pDocument->ReleaseIndirectObject(objnum);
+ }
+ } else {
+ uint8_t* pBuffer;
+ FX_DWORD size;
+ m_pParser->GetIndirectBinary(objnum, pBuffer, size);
+ if (pBuffer == NULL) {
+ return 0;
+ }
+ if (m_pParser->m_V5Type[objnum] == 2) {
+ if (m_pXRefStream) {
+ if (WriteIndirectObjectToStream(objnum, pBuffer, size) < 0) {
+ FX_Free(pBuffer);
+ return -1;
+ }
+ } else {
+ int32_t len = m_File.AppendDWord(objnum);
+ if (len < 0) {
+ return -1;
+ }
+ if (m_File.AppendString(FX_BSTRC(" 0 obj ")) < 0) {
+ return -1;
+ }
+ m_Offset += len + 7;
+ if (m_File.AppendBlock(pBuffer, size) < 0) {
+ return -1;
+ }
+ m_Offset += size;
+ if (m_File.AppendString(FX_BSTRC("\r\nendobj\r\n")) < 0) {
+ return -1;
+ }
+ m_Offset += 10;
+ }
+ } else {
+ if (m_File.AppendBlock(pBuffer, size) < 0) {
return -1;
+ }
+ m_Offset += size;
+ if (AppendObjectNumberToXRef(objnum) < 0) {
+ return -1;
+ }
}
- return 0;
+ FX_Free(pBuffer);
+ }
+ return 1;
}
-int32_t CPDF_Creator::WriteIndirectObj(const CPDF_Object* pObj)
-{
- int32_t iRet = WriteIndirectObjectToStream(pObj);
- if (iRet < 1) {
- return iRet;
- }
- return WriteIndirectObj(pObj->GetObjNum(), pObj);
+int32_t CPDF_Creator::WriteOldObjs(IFX_Pause* pPause) {
+ FX_DWORD nOldSize = m_pParser->m_CrossRef.GetSize();
+ FX_DWORD objnum = (FX_DWORD)(uintptr_t)m_Pos;
+ for (; objnum < nOldSize; objnum++) {
+ int32_t iRet = WriteOldIndirectObject(objnum);
+ if (!iRet) {
+ continue;
+ }
+ if (iRet < 0) {
+ return iRet;
+ }
+ m_ObjectSize[objnum] = (FX_DWORD)(m_Offset - m_ObjectOffset[objnum]);
+ if (pPause && pPause->NeedToPauseNow()) {
+ m_Pos = (void*)(uintptr_t)(objnum + 1);
+ return 1;
+ }
+ }
+ return 0;
}
-int32_t CPDF_Creator::WriteDirectObj(FX_DWORD objnum, const CPDF_Object* pObj, FX_BOOL bEncrypt)
-{
- int32_t len = 0;
- if (pObj == NULL) {
- if (m_File.AppendString(FX_BSTRC(" null")) < 0) {
- return -1;
- }
- m_Offset += 5;
- return 1;
+int32_t CPDF_Creator::WriteNewObjs(FX_BOOL bIncremental, IFX_Pause* pPause) {
+ int32_t iCount = m_NewObjNumArray.GetSize();
+ int32_t index = (int32_t)(uintptr_t)m_Pos;
+ while (index < iCount) {
+ FX_DWORD objnum = m_NewObjNumArray.ElementAt(index);
+ CPDF_Object* pObj = NULL;
+ m_pDocument->m_IndirectObjs.Lookup((void*)(uintptr_t)objnum, (void*&)pObj);
+ if (NULL == pObj) {
+ ++index;
+ continue;
}
- switch (pObj->GetType()) {
- case PDFOBJ_NULL:
- if (m_File.AppendString(FX_BSTRC(" null")) < 0) {
- return -1;
- }
- m_Offset += 5;
- break;
- case PDFOBJ_BOOLEAN:
- case PDFOBJ_NUMBER:
- if (m_File.AppendString(FX_BSTRC(" ")) < 0) {
- return -1;
- }
- if ((len = m_File.AppendString(pObj->GetString())) < 0) {
- return -1;
- }
- m_Offset += len + 1;
- break;
- case PDFOBJ_STRING: {
- CFX_ByteString str = pObj->GetString();
- FX_BOOL bHex = ((CPDF_String*)pObj)->IsHex();
- if (m_pCryptoHandler == NULL || !bEncrypt) {
- CFX_ByteString content = PDF_EncodeString(str, bHex);
- if ((len = m_File.AppendString(content)) < 0) {
- return -1;
- }
- m_Offset += len;
- break;
- }
- CPDF_Encryptor encryptor;
- encryptor.Initialize(m_pCryptoHandler, objnum, (uint8_t*)str.c_str(), str.GetLength());
- CFX_ByteString content = PDF_EncodeString(CFX_ByteString((const FX_CHAR*)encryptor.m_pData, encryptor.m_dwSize), bHex);
- if ((len = m_File.AppendString(content)) < 0) {
- return -1;
- }
- m_Offset += len;
- break;
- }
- case PDFOBJ_STREAM: {
- CPDF_FlateEncoder encoder;
- encoder.Initialize((CPDF_Stream*)pObj, m_bCompress);
- CPDF_Encryptor encryptor;
- CPDF_CryptoHandler* pHandler = m_pCryptoHandler;
- encryptor.Initialize(pHandler, objnum, encoder.m_pData, encoder.m_dwSize);
- if ((FX_DWORD)encoder.m_pDict->GetInteger(FX_BSTRC("Length")) != encryptor.m_dwSize) {
- encoder.CloneDict();
- encoder.m_pDict->SetAtInteger(FX_BSTRC("Length"), encryptor.m_dwSize);
- }
- if (WriteDirectObj(objnum, encoder.m_pDict) < 0) {
- return -1;
- }
- if ((len = m_File.AppendString(FX_BSTRC("stream\r\n"))) < 0) {
- return -1;
- }
- m_Offset += len;
- if (m_File.AppendBlock(encryptor.m_pData, encryptor.m_dwSize) < 0) {
- return -1;
- }
- m_Offset += encryptor.m_dwSize;
- if ((len = m_File.AppendString(FX_BSTRC("\r\nendstream"))) < 0) {
- return -1;
- }
- m_Offset += len;
- break;
- }
- case PDFOBJ_NAME: {
- if (m_File.AppendString(FX_BSTRC("/")) < 0) {
- return -1;
- }
- CFX_ByteString str = pObj->GetString();
- if ((len = m_File.AppendString(PDF_NameEncode(str))) < 0) {
- return -1;
- }
- m_Offset += len + 1;
- break;
- }
- case PDFOBJ_REFERENCE: {
- if (m_File.AppendString(FX_BSTRC(" ")) < 0) {
- return -1;
- }
- CPDF_Reference* p = (CPDF_Reference*)pObj;
- if ((len = m_File.AppendDWord(p->GetRefObjNum())) < 0) {
- return -1;
- }
- if (m_File.AppendString(FX_BSTRC(" 0 R")) < 0) {
- return -1;
- }
- m_Offset += len + 5;
- break;
- }
- case PDFOBJ_ARRAY: {
- if (m_File.AppendString(FX_BSTRC("[")) < 0) {
- return -1;
- }
- m_Offset += 1;
- CPDF_Array* p = (CPDF_Array*)pObj;
- for (FX_DWORD i = 0; i < p->GetCount(); i ++) {
- CPDF_Object* pElement = p->GetElement(i);
- if (pElement->GetObjNum()) {
- if (m_File.AppendString(FX_BSTRC(" ")) < 0) {
- return -1;
- }
- if ((len = m_File.AppendDWord(pElement->GetObjNum())) < 0) {
- return -1;
- }
- if (m_File.AppendString(FX_BSTRC(" 0 R")) < 0) {
- return -1;
- }
- m_Offset += len + 5;
- } else {
- if (WriteDirectObj(objnum, pElement) < 0) {
- return -1;
- }
- }
- }
- if (m_File.AppendString(FX_BSTRC("]")) < 0) {
- return -1;
- }
- m_Offset += 1;
- break;
- }
- case PDFOBJ_DICTIONARY: {
- if (m_pCryptoHandler == NULL || pObj == m_pEncryptDict) {
- return PDF_CreatorAppendObject(pObj, &m_File, m_Offset);
- }
- if (m_File.AppendString(FX_BSTRC("<<")) < 0) {
- return -1;
- }
- m_Offset += 2;
- CPDF_Dictionary* p = (CPDF_Dictionary*)pObj;
- FX_BOOL bSignDict = IsSignatureDict(p);
- FX_POSITION pos = p->GetStartPos();
- while (pos) {
- FX_BOOL bSignValue = FALSE;
- CFX_ByteString key;
- CPDF_Object* pValue = p->GetNextElement(pos, key);
- if (m_File.AppendString(FX_BSTRC("/")) < 0) {
- return -1;
- }
- if ((len = m_File.AppendString(PDF_NameEncode(key))) < 0) {
- return -1;
- }
- m_Offset += len + 1;
- if (bSignDict && key == FX_BSTRC("Contents")) {
- bSignValue = TRUE;
- }
- if (pValue->GetObjNum()) {
- if (m_File.AppendString(FX_BSTRC(" ")) < 0) {
- return -1;
- }
- if ((len = m_File.AppendDWord(pValue->GetObjNum())) < 0) {
- return -1;
- }
- if (m_File.AppendString(FX_BSTRC(" 0 R ")) < 0) {
- return -1;
- }
- m_Offset += len + 6;
- } else {
- if (WriteDirectObj(objnum, pValue, !bSignValue) < 0) {
- return -1;
- }
- }
- }
- if (m_File.AppendString(FX_BSTRC(">>")) < 0) {
- return -1;
- }
- m_Offset += 2;
- break;
- }
+ m_ObjectOffset[objnum] = m_Offset;
+ if (WriteIndirectObj(pObj)) {
+ return -1;
}
- return 1;
+ m_ObjectSize[objnum] = (FX_DWORD)(m_Offset - m_ObjectOffset[objnum]);
+ index++;
+ if (pPause && pPause->NeedToPauseNow()) {
+ m_Pos = (FX_POSITION)(uintptr_t)index;
+ return 1;
+ }
+ }
+ return 0;
}
-int32_t CPDF_Creator::WriteOldIndirectObject(FX_DWORD objnum)
-{
- if(m_pParser->m_V5Type[objnum] == 0 || m_pParser->m_V5Type[objnum] == 255) {
- return 0;
+void CPDF_Creator::InitOldObjNumOffsets() {
+ if (!m_pParser) {
+ return;
+ }
+ FX_DWORD j = 0;
+ FX_DWORD dwStart = 0;
+ FX_DWORD dwEnd = m_pParser->GetLastObjNum();
+ while (dwStart <= dwEnd) {
+ while (dwStart <= dwEnd && (m_pParser->m_V5Type[dwStart] == 0 ||
+ m_pParser->m_V5Type[dwStart] == 255)) {
+ dwStart++;
+ }
+ if (dwStart > dwEnd) {
+ break;
+ }
+ j = dwStart;
+ while (j <= dwEnd && m_pParser->m_V5Type[j] != 0 &&
+ m_pParser->m_V5Type[j] != 255) {
+ j++;
+ }
+ m_ObjectOffset.Add(dwStart, j - dwStart);
+ m_ObjectSize.Add(dwStart, j - dwStart);
+ dwStart = j;
+ }
+}
+void CPDF_Creator::InitNewObjNumOffsets() {
+ FX_BOOL bIncremental = (m_dwFlags & FPDFCREATE_INCREMENTAL) != 0;
+ FX_BOOL bNoOriginal = (m_dwFlags & FPDFCREATE_NO_ORIGINAL) != 0;
+ FX_DWORD nOldSize = m_pParser ? m_pParser->m_CrossRef.GetSize() : 0;
+ FX_POSITION pos = m_pDocument->m_IndirectObjs.GetStartPosition();
+ while (pos) {
+ size_t key = 0;
+ CPDF_Object* pObj;
+ m_pDocument->m_IndirectObjs.GetNextAssoc(pos, (void*&)key, (void*&)pObj);
+ FX_DWORD objnum = (FX_DWORD)key;
+ if (pObj->GetObjNum() == -1) {
+ continue;
}
- m_ObjectOffset[objnum] = m_Offset;
- void* valuetemp = NULL;
- FX_BOOL bExistInMap = m_pDocument->m_IndirectObjs.Lookup((void*)(uintptr_t)objnum, valuetemp);
- FX_BOOL bObjStm = (m_pParser->m_V5Type[objnum] == 2) && m_pEncryptDict && !m_pXRefStream;
- if(m_pParser->m_bVersionUpdated || m_bSecurityChanged || bExistInMap || bObjStm) {
- CPDF_Object* pObj = m_pDocument->GetIndirectObject(objnum);
- if (pObj == NULL) {
- m_ObjectOffset[objnum] = 0;
- m_ObjectSize[objnum] = 0;
- return 0;
- }
- if (WriteIndirectObj(pObj)) {
- return -1;
- }
- if (!bExistInMap) {
- m_pDocument->ReleaseIndirectObject(objnum);
- }
+ if (bIncremental) {
+ if (!pObj->IsModified()) {
+ continue;
+ }
} else {
- uint8_t* pBuffer;
- FX_DWORD size;
- m_pParser->GetIndirectBinary(objnum, pBuffer, size);
- if (pBuffer == NULL) {
- return 0;
- }
- if (m_pParser->m_V5Type[objnum] == 2) {
- if (m_pXRefStream) {
- if (WriteIndirectObjectToStream(objnum, pBuffer, size) < 0) {
- FX_Free(pBuffer);
- return -1;
- }
- } else {
- int32_t len = m_File.AppendDWord(objnum);
- if (len < 0) {
- return -1;
- }
- if (m_File.AppendString(FX_BSTRC(" 0 obj ")) < 0) {
- return -1;
- }
- m_Offset += len + 7;
- if (m_File.AppendBlock(pBuffer, size) < 0) {
- return -1;
- }
- m_Offset += size;
- if (m_File.AppendString(FX_BSTRC("\r\nendobj\r\n")) < 0) {
- return -1;
- }
- m_Offset += 10;
- }
- } else {
- if (m_File.AppendBlock(pBuffer, size) < 0) {
- return -1;
- }
- m_Offset += size;
- if(AppendObjectNumberToXRef(objnum) < 0) {
- return -1;
- }
- }
- FX_Free(pBuffer);
+ if (objnum < nOldSize && m_pParser->m_V5Type[objnum] != 0) {
+ continue;
+ }
+ }
+ AppendNewObjNum(objnum);
+ }
+ int32_t iCount = m_NewObjNumArray.GetSize();
+ if (iCount == 0) {
+ return;
+ }
+ int32_t i = 0;
+ FX_DWORD dwStartObjNum = 0;
+ FX_BOOL bCrossRefValid = m_pParser && m_pParser->GetLastXRefOffset() > 0;
+ while (i < iCount) {
+ dwStartObjNum = m_NewObjNumArray.ElementAt(i);
+ if ((bIncremental && (bNoOriginal || bCrossRefValid)) ||
+ !m_ObjectOffset.GetPtrAt(dwStartObjNum)) {
+ break;
}
- return 1;
+ i++;
+ }
+ if (i >= iCount) {
+ return;
+ }
+ FX_DWORD dwLastObjNum = dwStartObjNum;
+ i++;
+ FX_BOOL bNewStart = FALSE;
+ for (; i < iCount; i++) {
+ FX_DWORD dwCurObjNum = m_NewObjNumArray.ElementAt(i);
+ FX_BOOL bExist = (dwCurObjNum < nOldSize &&
+ m_ObjectOffset.GetPtrAt(dwCurObjNum) != NULL);
+ if (bExist || dwCurObjNum - dwLastObjNum > 1) {
+ if (!bNewStart) {
+ m_ObjectOffset.Add(dwStartObjNum, dwLastObjNum - dwStartObjNum + 1);
+ m_ObjectSize.Add(dwStartObjNum, dwLastObjNum - dwStartObjNum + 1);
+ }
+ dwStartObjNum = dwCurObjNum;
+ }
+ if (bNewStart) {
+ dwStartObjNum = dwCurObjNum;
+ }
+ bNewStart = bExist;
+ dwLastObjNum = dwCurObjNum;
+ }
+ m_ObjectOffset.Add(dwStartObjNum, dwLastObjNum - dwStartObjNum + 1);
+ m_ObjectSize.Add(dwStartObjNum, dwLastObjNum - dwStartObjNum + 1);
}
-int32_t CPDF_Creator::WriteOldObjs(IFX_Pause *pPause)
-{
- FX_DWORD nOldSize = m_pParser->m_CrossRef.GetSize();
- FX_DWORD objnum = (FX_DWORD)(uintptr_t)m_Pos;
- for(; objnum < nOldSize; objnum ++) {
- int32_t iRet = WriteOldIndirectObject(objnum);
- if (!iRet) {
- continue;
- }
- if (iRet < 0) {
- return iRet;
- }
- m_ObjectSize[objnum] = (FX_DWORD)(m_Offset - m_ObjectOffset[objnum]);
- if (pPause && pPause->NeedToPauseNow()) {
- m_Pos = (void*)(uintptr_t)(objnum + 1);
- return 1;
- }
- }
- return 0;
+void CPDF_Creator::AppendNewObjNum(FX_DWORD objbum) {
+ int32_t iStart = 0, iFind = 0;
+ int32_t iEnd = m_NewObjNumArray.GetUpperBound();
+ while (iStart <= iEnd) {
+ int32_t iMid = (iStart + iEnd) / 2;
+ FX_DWORD dwMid = m_NewObjNumArray.ElementAt(iMid);
+ if (objbum < dwMid) {
+ iEnd = iMid - 1;
+ } else {
+ if (iMid == iEnd) {
+ iFind = iMid + 1;
+ break;
+ }
+ FX_DWORD dwNext = m_NewObjNumArray.ElementAt(iMid + 1);
+ if (objbum < dwNext) {
+ iFind = iMid + 1;
+ break;
+ }
+ iStart = iMid + 1;
+ }
+ }
+ m_NewObjNumArray.InsertAt(iFind, objbum);
}
-int32_t CPDF_Creator::WriteNewObjs(FX_BOOL bIncremental, IFX_Pause *pPause)
-{
- int32_t iCount = m_NewObjNumArray.GetSize();
- int32_t index = (int32_t)(uintptr_t)m_Pos;
- while (index < iCount) {
- FX_DWORD objnum = m_NewObjNumArray.ElementAt(index);
- CPDF_Object *pObj = NULL;
- m_pDocument->m_IndirectObjs.Lookup((void*)(uintptr_t)objnum, (void*&)pObj);
- if (NULL == pObj) {
- ++index;
- continue;
- }
- m_ObjectOffset[objnum] = m_Offset;
- if (WriteIndirectObj(pObj)) {
- return -1;
- }
- m_ObjectSize[objnum] = (FX_DWORD)(m_Offset - m_ObjectOffset[objnum]);
- index++;
+int32_t CPDF_Creator::WriteDoc_Stage1(IFX_Pause* pPause) {
+ FXSYS_assert(m_iStage > -1 || m_iStage < 20);
+ if (m_iStage == 0) {
+ if (m_pParser == NULL) {
+ m_dwFlags &= ~FPDFCREATE_INCREMENTAL;
+ }
+ if (m_bSecurityChanged && (m_dwFlags & FPDFCREATE_NO_ORIGINAL) == 0) {
+ m_dwFlags &= ~FPDFCREATE_INCREMENTAL;
+ }
+ CPDF_Dictionary* pDict = m_pDocument->GetRoot();
+ m_pMetadata = pDict ? pDict->GetElementValue(FX_BSTRC("Metadata")) : NULL;
+ if (m_dwFlags & FPDFCREATE_OBJECTSTREAM) {
+ m_pXRefStream = new CPDF_XRefStream;
+ m_pXRefStream->Start();
+ if ((m_dwFlags & FPDFCREATE_INCREMENTAL) != 0 && m_pParser) {
+ FX_FILESIZE prev = m_pParser->GetLastXRefOffset();
+ m_pXRefStream->m_PrevOffset = prev;
+ }
+ }
+ m_iStage = 10;
+ }
+ if (m_iStage == 10) {
+ if ((m_dwFlags & FPDFCREATE_INCREMENTAL) == 0) {
+ if (m_File.AppendString(FX_BSTRC("%PDF-1.")) < 0) {
+ return -1;
+ }
+ m_Offset += 7;
+ int32_t version = 7;
+ if (m_FileVersion) {
+ version = m_FileVersion;
+ } else if (m_pParser) {
+ version = m_pParser->GetFileVersion();
+ }
+ int32_t len = m_File.AppendDWord(version % 10);
+ if (len < 0) {
+ return -1;
+ }
+ m_Offset += len;
+ if ((len = m_File.AppendString(FX_BSTRC("\r\n%\xA1\xB3\xC5\xD7\r\n"))) <
+ 0) {
+ return -1;
+ }
+ m_Offset += len;
+ InitOldObjNumOffsets();
+ m_iStage = 20;
+ } else {
+ IFX_FileRead* pSrcFile = m_pParser->GetFileAccess();
+ m_Offset = pSrcFile->GetSize();
+ m_Pos = (void*)(uintptr_t)m_Offset;
+ m_iStage = 15;
+ }
+ }
+ if (m_iStage == 15) {
+ if ((m_dwFlags & FPDFCREATE_NO_ORIGINAL) == 0 && m_Pos) {
+ IFX_FileRead* pSrcFile = m_pParser->GetFileAccess();
+ uint8_t buffer[4096];
+ FX_DWORD src_size = (FX_DWORD)(uintptr_t)m_Pos;
+ while (src_size) {
+ FX_DWORD block_size = src_size > 4096 ? 4096 : src_size;
+ if (!pSrcFile->ReadBlock(buffer, m_Offset - src_size, block_size)) {
+ return -1;
+ }
+ if (m_File.AppendBlock(buffer, block_size) < 0) {
+ return -1;
+ }
+ src_size -= block_size;
if (pPause && pPause->NeedToPauseNow()) {
- m_Pos = (FX_POSITION)(uintptr_t)index;
- return 1;
- }
- }
- return 0;
+ m_Pos = (void*)(uintptr_t)src_size;
+ return 1;
+ }
+ }
+ }
+ if ((m_dwFlags & FPDFCREATE_NO_ORIGINAL) == 0 &&
+ m_pParser->GetLastXRefOffset() == 0) {
+ InitOldObjNumOffsets();
+ FX_DWORD dwEnd = m_pParser->GetLastObjNum();
+ FX_BOOL bObjStm = (m_dwFlags & FPDFCREATE_OBJECTSTREAM) != 0;
+ for (FX_DWORD objnum = 0; objnum <= dwEnd; objnum++) {
+ if (m_pParser->m_V5Type[objnum] == 0 ||
+ m_pParser->m_V5Type[objnum] == 255) {
+ continue;
+ }
+ m_ObjectOffset[objnum] = m_pParser->m_CrossRef[objnum];
+ if (bObjStm) {
+ m_pXRefStream->AddObjectNumberToIndexArray(objnum);
+ }
+ }
+ if (bObjStm) {
+ m_pXRefStream->EndXRefStream(this);
+ m_pXRefStream->Start();
+ }
+ }
+ m_iStage = 20;
+ }
+ InitNewObjNumOffsets();
+ return m_iStage;
}
-void CPDF_Creator::InitOldObjNumOffsets()
-{
- if (!m_pParser) {
- return;
- }
- FX_DWORD j = 0;
- FX_DWORD dwStart = 0;
- FX_DWORD dwEnd = m_pParser->GetLastObjNum();
- while (dwStart <= dwEnd) {
- while (dwStart <= dwEnd && (m_pParser->m_V5Type[dwStart] == 0 || m_pParser->m_V5Type[dwStart] == 255)) {
- dwStart++;
- }
- if (dwStart > dwEnd) {
- break;
- }
- j = dwStart;
- while (j <= dwEnd && m_pParser->m_V5Type[j] != 0 && m_pParser->m_V5Type[j] != 255) {
- j++;
- }
- m_ObjectOffset.Add(dwStart, j - dwStart);
- m_ObjectSize.Add(dwStart, j - dwStart);
- dwStart = j;
- }
+int32_t CPDF_Creator::WriteDoc_Stage2(IFX_Pause* pPause) {
+ FXSYS_assert(m_iStage >= 20 || m_iStage < 30);
+ if (m_iStage == 20) {
+ if ((m_dwFlags & FPDFCREATE_INCREMENTAL) == 0 && m_pParser) {
+ m_Pos = (void*)(uintptr_t)0;
+ m_iStage = 21;
+ } else {
+ m_iStage = 25;
+ }
+ }
+ if (m_iStage == 21) {
+ int32_t iRet = WriteOldObjs(pPause);
+ if (iRet) {
+ return iRet;
+ }
+ m_iStage = 25;
+ }
+ if (m_iStage == 25) {
+ m_Pos = (void*)(uintptr_t)0;
+ m_iStage = 26;
+ }
+ if (m_iStage == 26) {
+ int32_t iRet =
+ WriteNewObjs((m_dwFlags & FPDFCREATE_INCREMENTAL) != 0, pPause);
+ if (iRet) {
+ return iRet;
+ }
+ m_iStage = 27;
+ }
+ if (m_iStage == 27) {
+ if (NULL != m_pEncryptDict && 0 == m_pEncryptDict->GetObjNum()) {
+ m_dwLastObjNum += 1;
+ FX_FILESIZE saveOffset = m_Offset;
+ if (WriteIndirectObj(m_dwLastObjNum, m_pEncryptDict) < 0) {
+ return -1;
+ }
+ m_ObjectOffset.Add(m_dwLastObjNum, 1);
+ m_ObjectOffset[m_dwLastObjNum] = saveOffset;
+ m_ObjectSize.Add(m_dwLastObjNum, 1);
+ m_ObjectSize[m_dwLastObjNum] = m_Offset - saveOffset;
+ m_dwEnryptObjNum = m_dwLastObjNum;
+ if (m_dwFlags & FPDFCREATE_INCREMENTAL) {
+ m_NewObjNumArray.Add(m_dwLastObjNum);
+ }
+ }
+ m_iStage = 80;
+ }
+ return m_iStage;
}
-void CPDF_Creator::InitNewObjNumOffsets()
-{
- FX_BOOL bIncremental = (m_dwFlags & FPDFCREATE_INCREMENTAL) != 0;
- FX_BOOL bNoOriginal = (m_dwFlags & FPDFCREATE_NO_ORIGINAL) != 0;
- FX_DWORD nOldSize = m_pParser ? m_pParser->m_CrossRef.GetSize() : 0;
- FX_POSITION pos = m_pDocument->m_IndirectObjs.GetStartPosition();
- while (pos) {
- size_t key = 0;
- CPDF_Object* pObj;
- m_pDocument->m_IndirectObjs.GetNextAssoc(pos, (void*&)key, (void*&)pObj);
- FX_DWORD objnum = (FX_DWORD)key;
- if (pObj->GetObjNum() == -1) {
- continue;
- }
- if (bIncremental) {
- if (!pObj->IsModified()) {
- continue;
- }
- } else {
- if (objnum < nOldSize && m_pParser->m_V5Type[objnum] != 0) {
- continue;
- }
+int32_t CPDF_Creator::WriteDoc_Stage3(IFX_Pause* pPause) {
+ FXSYS_assert(m_iStage >= 80 || m_iStage < 90);
+ FX_DWORD dwLastObjNum = m_dwLastObjNum;
+ if (m_iStage == 80) {
+ m_XrefStart = m_Offset;
+ if (m_dwFlags & FPDFCREATE_OBJECTSTREAM) {
+ m_pXRefStream->End(this, TRUE);
+ m_XrefStart = m_pXRefStream->m_PrevOffset;
+ m_iStage = 90;
+ } else if ((m_dwFlags & FPDFCREATE_INCREMENTAL) == 0 ||
+ !m_pParser->IsXRefStream()) {
+ if ((m_dwFlags & FPDFCREATE_INCREMENTAL) == 0 ||
+ m_pParser->GetLastXRefOffset() == 0) {
+ CFX_ByteString str;
+ str = m_ObjectOffset.GetPtrAt(1)
+ ? FX_BSTRC("xref\r\n")
+ : FX_BSTRC("xref\r\n0 1\r\n0000000000 65536 f\r\n");
+ if (m_File.AppendString(str) < 0) {
+ return -1;
+ }
+ m_Pos = (void*)(uintptr_t)1;
+ m_iStage = 81;
+ } else {
+ if (m_File.AppendString(FX_BSTRC("xref\r\n")) < 0) {
+ return -1;
}
- AppendNewObjNum(objnum);
+ m_Pos = (void*)(uintptr_t)0;
+ m_iStage = 82;
+ }
+ } else {
+ m_iStage = 90;
+ }
+ }
+ if (m_iStage == 81) {
+ CFX_ByteString str;
+ FX_DWORD i = (FX_DWORD)(uintptr_t)m_Pos, j;
+ while (i <= dwLastObjNum) {
+ while (i <= dwLastObjNum && !m_ObjectOffset.GetPtrAt(i)) {
+ i++;
+ }
+ if (i > dwLastObjNum) {
+ break;
+ }
+ j = i;
+ while (j <= dwLastObjNum && m_ObjectOffset.GetPtrAt(j)) {
+ j++;
+ }
+ if (i == 1) {
+ str.Format("0 %d\r\n0000000000 65536 f\r\n", j);
+ } else {
+ str.Format("%d %d\r\n", i, j - i);
+ }
+ if (m_File.AppendBlock(str.c_str(), str.GetLength()) < 0) {
+ return -1;
+ }
+ while (i < j) {
+ str.Format("%010d 00000 n\r\n", m_ObjectOffset[i++]);
+ if (m_File.AppendBlock(str.c_str(), str.GetLength()) < 0) {
+ return -1;
+ }
+ }
+ if (i > dwLastObjNum) {
+ break;
+ }
+ if (pPause && pPause->NeedToPauseNow()) {
+ m_Pos = (void*)(uintptr_t)i;
+ return 1;
+ }
}
+ m_iStage = 90;
+ }
+ if (m_iStage == 82) {
+ CFX_ByteString str;
int32_t iCount = m_NewObjNumArray.GetSize();
- if (iCount == 0) {
- return;
- }
- int32_t i = 0;
- FX_DWORD dwStartObjNum = 0;
- FX_BOOL bCrossRefValid = m_pParser && m_pParser->GetLastXRefOffset() > 0;
+ int32_t i = (int32_t)(uintptr_t)m_Pos;
while (i < iCount) {
- dwStartObjNum = m_NewObjNumArray.ElementAt(i);
- if ((bIncremental && (bNoOriginal || bCrossRefValid)) || !m_ObjectOffset.GetPtrAt(dwStartObjNum)) {
- break;
- }
- i++;
- }
- if (i >= iCount) {
- return;
- }
- FX_DWORD dwLastObjNum = dwStartObjNum;
- i++;
- FX_BOOL bNewStart = FALSE;
- for (; i < iCount; i++) {
- FX_DWORD dwCurObjNum = m_NewObjNumArray.ElementAt(i);
- FX_BOOL bExist = (dwCurObjNum < nOldSize && m_ObjectOffset.GetPtrAt(dwCurObjNum) != NULL);
- if (bExist || dwCurObjNum - dwLastObjNum > 1) {
- if (!bNewStart) {
- m_ObjectOffset.Add(dwStartObjNum, dwLastObjNum - dwStartObjNum + 1);
- m_ObjectSize.Add(dwStartObjNum, dwLastObjNum - dwStartObjNum + 1);
- }
- dwStartObjNum = dwCurObjNum;
- }
- if (bNewStart) {
- dwStartObjNum = dwCurObjNum;
- }
- bNewStart = bExist;
- dwLastObjNum = dwCurObjNum;
+ int32_t j = i;
+ FX_DWORD objnum = m_NewObjNumArray.ElementAt(i);
+ while (j < iCount) {
+ if (++j == iCount) {
+ break;
+ }
+ FX_DWORD dwCurrent = m_NewObjNumArray.ElementAt(j);
+ if (dwCurrent - objnum > 1) {
+ break;
+ }
+ objnum = dwCurrent;
+ }
+ objnum = m_NewObjNumArray.ElementAt(i);
+ if (objnum == 1) {
+ str.Format("0 %d\r\n0000000000 65536 f\r\n", j - i + 1);
+ } else {
+ str.Format("%d %d\r\n", objnum, j - i);
+ }
+ if (m_File.AppendBlock(str.c_str(), str.GetLength()) < 0) {
+ return -1;
+ }
+ while (i < j) {
+ objnum = m_NewObjNumArray.ElementAt(i++);
+ str.Format("%010d 00000 n\r\n", m_ObjectOffset[objnum]);
+ if (m_File.AppendBlock(str.c_str(), str.GetLength()) < 0) {
+ return -1;
+ }
+ }
+ if (pPause && (i % 100) == 0 && pPause->NeedToPauseNow()) {
+ m_Pos = (void*)(uintptr_t)i;
+ return 1;
+ }
}
- m_ObjectOffset.Add(dwStartObjNum, dwLastObjNum - dwStartObjNum + 1);
- m_ObjectSize.Add(dwStartObjNum, dwLastObjNum - dwStartObjNum + 1);
+ m_iStage = 90;
+ }
+ return m_iStage;
}
-void CPDF_Creator::AppendNewObjNum(FX_DWORD objbum)
-{
- int32_t iStart = 0, iFind = 0;
- int32_t iEnd = m_NewObjNumArray.GetUpperBound();
- while (iStart <= iEnd) {
- int32_t iMid = (iStart + iEnd) / 2;
- FX_DWORD dwMid = m_NewObjNumArray.ElementAt(iMid);
- if (objbum < dwMid) {
- iEnd = iMid - 1;
- } else {
- if (iMid == iEnd) {
- iFind = iMid + 1;
- break;
- }
- FX_DWORD dwNext = m_NewObjNumArray.ElementAt(iMid + 1);
- if (objbum < dwNext) {
- iFind = iMid + 1;
- break;
- }
- iStart = iMid + 1;
- }
- }
- m_NewObjNumArray.InsertAt(iFind, objbum);
+static int32_t _OutPutIndex(CFX_FileBufferArchive* pFile, FX_FILESIZE offset) {
+ FXSYS_assert(pFile);
+ if (sizeof(offset) > 4) {
+ if (FX_GETBYTEOFFSET32(offset)) {
+ if (pFile->AppendByte(FX_GETBYTEOFFSET56(offset)) < 0) {
+ return -1;
+ }
+ if (pFile->AppendByte(FX_GETBYTEOFFSET48(offset)) < 0) {
+ return -1;
+ }
+ if (pFile->AppendByte(FX_GETBYTEOFFSET40(offset)) < 0) {
+ return -1;
+ }
+ if (pFile->AppendByte(FX_GETBYTEOFFSET32(offset)) < 0) {
+ return -1;
+ }
+ }
+ }
+ if (pFile->AppendByte(FX_GETBYTEOFFSET24(offset)) < 0) {
+ return -1;
+ }
+ if (pFile->AppendByte(FX_GETBYTEOFFSET16(offset)) < 0) {
+ return -1;
+ }
+ if (pFile->AppendByte(FX_GETBYTEOFFSET8(offset)) < 0) {
+ return -1;
+ }
+ if (pFile->AppendByte(FX_GETBYTEOFFSET0(offset)) < 0) {
+ return -1;
+ }
+ if (pFile->AppendByte(0) < 0) {
+ return -1;
+ }
+ return 0;
}
-int32_t CPDF_Creator::WriteDoc_Stage1(IFX_Pause *pPause)
-{
- FXSYS_assert(m_iStage > -1 || m_iStage < 20);
- if (m_iStage == 0) {
- if (m_pParser == NULL) {
- m_dwFlags &= ~FPDFCREATE_INCREMENTAL;
- }
- if (m_bSecurityChanged && (m_dwFlags & FPDFCREATE_NO_ORIGINAL) == 0) {
- m_dwFlags &= ~FPDFCREATE_INCREMENTAL;
- }
- CPDF_Dictionary* pDict = m_pDocument->GetRoot();
- m_pMetadata = pDict ? pDict->GetElementValue(FX_BSTRC("Metadata")) : NULL;
- if (m_dwFlags & FPDFCREATE_OBJECTSTREAM) {
- m_pXRefStream = new CPDF_XRefStream;
- m_pXRefStream->Start();
- if ((m_dwFlags & FPDFCREATE_INCREMENTAL) != 0 && m_pParser) {
- FX_FILESIZE prev = m_pParser->GetLastXRefOffset();
- m_pXRefStream->m_PrevOffset = prev;
- }
- }
- m_iStage = 10;
- }
- if (m_iStage == 10) {
- if ((m_dwFlags & FPDFCREATE_INCREMENTAL) == 0) {
- if (m_File.AppendString(FX_BSTRC("%PDF-1.")) < 0) {
- return -1;
- }
- m_Offset += 7;
- int32_t version = 7;
- if (m_FileVersion) {
- version = m_FileVersion;
- } else if (m_pParser) {
- version = m_pParser->GetFileVersion();
- }
- int32_t len = m_File.AppendDWord(version % 10);
- if (len < 0) {
- return -1;
- }
- m_Offset += len;
- if ((len = m_File.AppendString(FX_BSTRC("\r\n%\xA1\xB3\xC5\xD7\r\n"))) < 0) {
- return -1;
- }
- m_Offset += len;
- InitOldObjNumOffsets();
- m_iStage = 20;
- } else {
- IFX_FileRead* pSrcFile = m_pParser->GetFileAccess();
- m_Offset = pSrcFile->GetSize();
- m_Pos = (void*)(uintptr_t)m_Offset;
- m_iStage = 15;
- }
- }
- if (m_iStage == 15) {
- if ((m_dwFlags & FPDFCREATE_NO_ORIGINAL) == 0 && m_Pos) {
- IFX_FileRead* pSrcFile = m_pParser->GetFileAccess();
- uint8_t buffer[4096];
- FX_DWORD src_size = (FX_DWORD)(uintptr_t)m_Pos;
- while (src_size) {
- FX_DWORD block_size = src_size > 4096 ? 4096 : src_size;
- if (!pSrcFile->ReadBlock(buffer, m_Offset - src_size, block_size)) {
- return -1;
- }
- if (m_File.AppendBlock(buffer, block_size) < 0) {
- return -1;
- }
- src_size -= block_size;
- if (pPause && pPause->NeedToPauseNow()) {
- m_Pos = (void*)(uintptr_t)src_size;
- return 1;
- }
- }
- }
- if ((m_dwFlags & FPDFCREATE_NO_ORIGINAL) == 0 && m_pParser->GetLastXRefOffset() == 0) {
- InitOldObjNumOffsets();
- FX_DWORD dwEnd = m_pParser->GetLastObjNum();
- FX_BOOL bObjStm = (m_dwFlags & FPDFCREATE_OBJECTSTREAM) != 0;
- for (FX_DWORD objnum = 0; objnum <= dwEnd; objnum++) {
- if (m_pParser->m_V5Type[objnum] == 0 || m_pParser->m_V5Type[objnum] == 255) {
- continue;
- }
- m_ObjectOffset[objnum] = m_pParser->m_CrossRef[objnum];
- if (bObjStm) {
- m_pXRefStream->AddObjectNumberToIndexArray(objnum);
- }
- }
- if (bObjStm) {
- m_pXRefStream->EndXRefStream(this);
- m_pXRefStream->Start();
- }
- }
- m_iStage = 20;
+int32_t CPDF_Creator::WriteDoc_Stage4(IFX_Pause* pPause) {
+ FXSYS_assert(m_iStage >= 90);
+ if ((m_dwFlags & FPDFCREATE_OBJECTSTREAM) == 0) {
+ FX_BOOL bXRefStream =
+ (m_dwFlags & FPDFCREATE_INCREMENTAL) != 0 && m_pParser->IsXRefStream();
+ if (!bXRefStream) {
+ if (m_File.AppendString(FX_BSTRC("trailer\r\n<<")) < 0) {
+ return -1;
+ }
+ } else {
+ if (m_File.AppendDWord(m_pDocument->m_LastObjNum + 1) < 0) {
+ return -1;
+ }
+ if (m_File.AppendString(FX_BSTRC(" 0 obj <<")) < 0) {
+ return -1;
+ }
}
- InitNewObjNumOffsets();
- return m_iStage;
-}
-int32_t CPDF_Creator::WriteDoc_Stage2(IFX_Pause *pPause)
-{
- FXSYS_assert(m_iStage >= 20 || m_iStage < 30);
- if (m_iStage == 20) {
- if ((m_dwFlags & FPDFCREATE_INCREMENTAL) == 0 && m_pParser) {
- m_Pos = (void*)(uintptr_t)0;
- m_iStage = 21;
+ if (m_pParser) {
+ CPDF_Dictionary* p = m_pParser->m_pTrailer;
+ FX_POSITION pos = p->GetStartPos();
+ while (pos) {
+ CFX_ByteString key;
+ CPDF_Object* pValue = p->GetNextElement(pos, key);
+ if (key == FX_BSTRC("Encrypt") || key == FX_BSTRC("Size") ||
+ key == FX_BSTRC("Filter") || key == FX_BSTRC("Index") ||
+ key == FX_BSTRC("Length") || key == FX_BSTRC("Prev") ||
+ key == FX_BSTRC("W") || key == FX_BSTRC("XRefStm") ||
+ key == FX_BSTRC("ID")) {
+ continue;
+ }
+ if (m_File.AppendString((FX_BSTRC("/"))) < 0) {
+ return -1;
+ }
+ if (m_File.AppendString(PDF_NameEncode(key)) < 0) {
+ return -1;
+ }
+ if (pValue->GetObjNum()) {
+ if (m_File.AppendString(FX_BSTRC(" ")) < 0) {
+ return -1;
+ }
+ if (m_File.AppendDWord(pValue->GetObjNum()) < 0) {
+ return -1;
+ }
+ if (m_File.AppendString(FX_BSTRC(" 0 R ")) < 0) {
+ return -1;
+ }
} else {
- m_iStage = 25;
+ FX_FILESIZE offset = 0;
+ if (PDF_CreatorAppendObject(pValue, &m_File, offset) < 0) {
+ return -1;
+ }
}
- }
- if (m_iStage == 21) {
- int32_t iRet = WriteOldObjs(pPause);
- if (iRet) {
- return iRet;
+ }
+ } else {
+ if (m_File.AppendString(FX_BSTRC("\r\n/Root ")) < 0) {
+ return -1;
+ }
+ if (m_File.AppendDWord(m_pDocument->m_pRootDict->GetObjNum()) < 0) {
+ return -1;
+ }
+ if (m_File.AppendString(FX_BSTRC(" 0 R\r\n")) < 0) {
+ return -1;
+ }
+ if (m_pDocument->m_pInfoDict) {
+ if (m_File.AppendString(FX_BSTRC("/Info ")) < 0) {
+ return -1;
}
- m_iStage = 25;
- }
- if (m_iStage == 25) {
- m_Pos = (void*)(uintptr_t)0;
- m_iStage = 26;
- }
- if (m_iStage == 26) {
- int32_t iRet = WriteNewObjs((m_dwFlags & FPDFCREATE_INCREMENTAL) != 0, pPause);
- if (iRet) {
- return iRet;
+ if (m_File.AppendDWord(m_pDocument->m_pInfoDict->GetObjNum()) < 0) {
+ return -1;
}
- m_iStage = 27;
- }
- if (m_iStage == 27) {
- if (NULL != m_pEncryptDict && 0 == m_pEncryptDict->GetObjNum()) {
- m_dwLastObjNum += 1;
- FX_FILESIZE saveOffset = m_Offset;
- if (WriteIndirectObj(m_dwLastObjNum, m_pEncryptDict) < 0) {
- return -1;
- }
- m_ObjectOffset.Add(m_dwLastObjNum, 1);
- m_ObjectOffset[m_dwLastObjNum] = saveOffset;
- m_ObjectSize.Add(m_dwLastObjNum, 1);
- m_ObjectSize[m_dwLastObjNum] = m_Offset - saveOffset;
- m_dwEnryptObjNum = m_dwLastObjNum;
- if (m_dwFlags & FPDFCREATE_INCREMENTAL) {
- m_NewObjNumArray.Add(m_dwLastObjNum);
- }
+ if (m_File.AppendString(FX_BSTRC(" 0 R\r\n")) < 0) {
+ return -1;
}
- m_iStage = 80;
+ }
}
- return m_iStage;
-}
-int32_t CPDF_Creator::WriteDoc_Stage3(IFX_Pause *pPause)
-{
- FXSYS_assert(m_iStage >= 80 || m_iStage < 90);
- FX_DWORD dwLastObjNum = m_dwLastObjNum;
- if (m_iStage == 80) {
- m_XrefStart = m_Offset;
- if (m_dwFlags & FPDFCREATE_OBJECTSTREAM) {
- m_pXRefStream->End(this, TRUE);
- m_XrefStart = m_pXRefStream->m_PrevOffset;
- m_iStage = 90;
- } else if ((m_dwFlags & FPDFCREATE_INCREMENTAL) == 0 || !m_pParser->IsXRefStream()) {
- if ((m_dwFlags & FPDFCREATE_INCREMENTAL) == 0 || m_pParser->GetLastXRefOffset() == 0) {
- CFX_ByteString str;
- str = m_ObjectOffset.GetPtrAt(1) ? FX_BSTRC("xref\r\n") : FX_BSTRC("xref\r\n0 1\r\n0000000000 65536 f\r\n");
- if (m_File.AppendString(str) < 0) {
- return -1;
- }
- m_Pos = (void*)(uintptr_t)1;
- m_iStage = 81;
- } else {
- if (m_File.AppendString(FX_BSTRC("xref\r\n")) < 0) {
- return -1;
- }
- m_Pos = (void*)(uintptr_t)0;
- m_iStage = 82;
- }
- } else {
- m_iStage = 90;
- }
+ if (m_pEncryptDict) {
+ if (m_File.AppendString(FX_BSTRC("/Encrypt")) < 0) {
+ return -1;
+ }
+ FX_DWORD dwObjNum = m_pEncryptDict->GetObjNum();
+ if (dwObjNum == 0) {
+ dwObjNum = m_pDocument->GetLastObjNum() + 1;
+ }
+ if (m_File.AppendString(FX_BSTRC(" ")) < 0) {
+ return -1;
+ }
+ if (m_File.AppendDWord(dwObjNum) < 0) {
+ return -1;
+ }
+ if (m_File.AppendString(FX_BSTRC(" 0 R ")) < 0) {
+ return -1;
+ }
}
- if (m_iStage == 81) {
- CFX_ByteString str;
- FX_DWORD i = (FX_DWORD)(uintptr_t)m_Pos, j;
- while (i <= dwLastObjNum) {
- while (i <= dwLastObjNum && !m_ObjectOffset.GetPtrAt(i)) {
- i++;
- }
- if (i > dwLastObjNum) {
- break;
- }
- j = i;
- while (j <= dwLastObjNum && m_ObjectOffset.GetPtrAt(j)) {
- j++;
- }
- if (i == 1) {
- str.Format("0 %d\r\n0000000000 65536 f\r\n", j);
- } else {
- str.Format("%d %d\r\n", i, j - i);
- }
- if (m_File.AppendBlock(str.c_str(), str.GetLength()) < 0) {
- return -1;
- }
- while (i < j) {
- str.Format("%010d 00000 n\r\n", m_ObjectOffset[i ++]);
- if (m_File.AppendBlock(str.c_str(), str.GetLength()) < 0) {
- return -1;
- }
- }
- if (i > dwLastObjNum) {
- break;
- }
- if (pPause && pPause->NeedToPauseNow()) {
- m_Pos = (void*)(uintptr_t)i;
- return 1;
- }
- }
- m_iStage = 90;
+ if (m_File.AppendString(FX_BSTRC("/Size ")) < 0) {
+ return -1;
}
- if (m_iStage == 82) {
- CFX_ByteString str;
- int32_t iCount = m_NewObjNumArray.GetSize();
- int32_t i = (int32_t)(uintptr_t)m_Pos;
- while (i < iCount) {
- int32_t j = i;
- FX_DWORD objnum = m_NewObjNumArray.ElementAt(i);
- while (j < iCount) {
- if (++j == iCount) {
- break;
- }
- FX_DWORD dwCurrent = m_NewObjNumArray.ElementAt(j);
- if (dwCurrent - objnum > 1) {
- break;
- }
- objnum = dwCurrent;
- }
- objnum = m_NewObjNumArray.ElementAt(i);
- if (objnum == 1) {
- str.Format("0 %d\r\n0000000000 65536 f\r\n", j - i + 1);
- } else {
- str.Format("%d %d\r\n", objnum, j - i);
- }
- if (m_File.AppendBlock(str.c_str(), str.GetLength()) < 0) {
- return -1;
- }
- while (i < j) {
- objnum = m_NewObjNumArray.ElementAt(i++);
- str.Format("%010d 00000 n\r\n", m_ObjectOffset[objnum]);
- if (m_File.AppendBlock(str.c_str(), str.GetLength()) < 0) {
- return -1;
- }
- }
- if (pPause && (i % 100) == 0 && pPause->NeedToPauseNow()) {
- m_Pos = (void*)(uintptr_t)i;
- return 1;
- }
- }
- m_iStage = 90;
+ if (m_File.AppendDWord(m_dwLastObjNum + (bXRefStream ? 2 : 1)) < 0) {
+ return -1;
}
- return m_iStage;
-}
-static int32_t _OutPutIndex(CFX_FileBufferArchive* pFile, FX_FILESIZE offset)
-{
- FXSYS_assert(pFile);
- if (sizeof(offset) > 4) {
- if (FX_GETBYTEOFFSET32(offset)) {
- if (pFile->AppendByte(FX_GETBYTEOFFSET56(offset)) < 0) {
- return -1;
- }
- if (pFile->AppendByte(FX_GETBYTEOFFSET48(offset)) < 0) {
- return -1;
- }
- if (pFile->AppendByte(FX_GETBYTEOFFSET40(offset)) < 0) {
- return -1;
- }
- if (pFile->AppendByte(FX_GETBYTEOFFSET32(offset)) < 0) {
- return -1;
- }
+ if ((m_dwFlags & FPDFCREATE_INCREMENTAL) != 0) {
+ FX_FILESIZE prev = m_pParser->GetLastXRefOffset();
+ if (prev) {
+ if (m_File.AppendString(FX_BSTRC("/Prev ")) < 0) {
+ return -1;
}
+ FX_CHAR offset_buf[20];
+ FXSYS_memset(offset_buf, 0, sizeof(offset_buf));
+ FXSYS_i64toa(prev, offset_buf, 10);
+ if (m_File.AppendBlock(offset_buf, FXSYS_strlen(offset_buf)) < 0) {
+ return -1;
+ }
+ }
}
- if (pFile->AppendByte(FX_GETBYTEOFFSET24(offset)) < 0) {
- return -1;
- }
- if (pFile->AppendByte(FX_GETBYTEOFFSET16(offset)) < 0) {
+ if (m_pIDArray) {
+ if (m_File.AppendString((FX_BSTRC("/ID"))) < 0) {
return -1;
- }
- if (pFile->AppendByte(FX_GETBYTEOFFSET8(offset)) < 0) {
+ }
+ FX_FILESIZE offset = 0;
+ if (PDF_CreatorAppendObject(m_pIDArray, &m_File, offset) < 0) {
return -1;
+ }
}
- if (pFile->AppendByte(FX_GETBYTEOFFSET0(offset)) < 0) {
+ if (!bXRefStream) {
+ if (m_File.AppendString(FX_BSTRC(">>")) < 0) {
return -1;
- }
- if (pFile->AppendByte(0) < 0) {
+ }
+ } else {
+ if (m_File.AppendString(FX_BSTRC("/W[0 4 1]/Index[")) < 0) {
return -1;
- }
- return 0;
-}
-int32_t CPDF_Creator::WriteDoc_Stage4(IFX_Pause *pPause)
-{
- FXSYS_assert(m_iStage >= 90);
- if ((m_dwFlags & FPDFCREATE_OBJECTSTREAM) == 0) {
- FX_BOOL bXRefStream = (m_dwFlags & FPDFCREATE_INCREMENTAL) != 0 && m_pParser->IsXRefStream();
- if (!bXRefStream) {
- if (m_File.AppendString(FX_BSTRC("trailer\r\n<<")) < 0) {
- return -1;
- }
- } else {
- if (m_File.AppendDWord(m_pDocument->m_LastObjNum + 1) < 0) {
- return -1;
- }
- if (m_File.AppendString(FX_BSTRC(" 0 obj <<")) < 0) {
- return -1;
- }
+ }
+ if ((m_dwFlags & FPDFCREATE_INCREMENTAL) != 0 && m_pParser &&
+ m_pParser->GetLastXRefOffset() == 0) {
+ FX_DWORD i = 0;
+ for (i = 0; i < m_dwLastObjNum; i++) {
+ if (!m_ObjectOffset.GetPtrAt(i)) {
+ continue;
+ }
+ if (m_File.AppendDWord(i) < 0) {
+ return -1;
+ }
+ if (m_File.AppendString(FX_BSTRC(" 1 ")) < 0) {
+ return -1;
+ }
}
- if (m_pParser) {
- CPDF_Dictionary* p = m_pParser->m_pTrailer;
- FX_POSITION pos = p->GetStartPos();
- while (pos) {
- CFX_ByteString key;
- CPDF_Object* pValue = p->GetNextElement(pos, key);
- if (key == FX_BSTRC("Encrypt") || key == FX_BSTRC("Size") || key == FX_BSTRC("Filter") ||
- key == FX_BSTRC("Index") || key == FX_BSTRC("Length") || key == FX_BSTRC("Prev") ||
- key == FX_BSTRC("W") || key == FX_BSTRC("XRefStm") || key == FX_BSTRC("ID")) {
- continue;
- }
- if (m_File.AppendString((FX_BSTRC("/"))) < 0) {
- return -1;
- }
- if (m_File.AppendString(PDF_NameEncode(key)) < 0) {
- return -1;
- }
- if (pValue->GetObjNum()) {
- if (m_File.AppendString(FX_BSTRC(" ")) < 0) {
- return -1;
- }
- if (m_File.AppendDWord(pValue->GetObjNum()) < 0) {
- return -1;
- }
- if (m_File.AppendString(FX_BSTRC(" 0 R ")) < 0) {
- return -1;
- }
- } else {
- FX_FILESIZE offset = 0;
- if (PDF_CreatorAppendObject(pValue, &m_File, offset) < 0) {
- return -1;
- }
- }
- }
- } else {
- if (m_File.AppendString(FX_BSTRC("\r\n/Root ")) < 0) {
- return -1;
- }
- if (m_File.AppendDWord(m_pDocument->m_pRootDict->GetObjNum()) < 0) {
- return -1;
- }
- if (m_File.AppendString(FX_BSTRC(" 0 R\r\n")) < 0) {
- return -1;
- }
- if (m_pDocument->m_pInfoDict) {
- if (m_File.AppendString(FX_BSTRC("/Info ")) < 0) {
- return -1;
- }
- if (m_File.AppendDWord(m_pDocument->m_pInfoDict->GetObjNum()) < 0) {
- return -1;
- }
- if (m_File.AppendString(FX_BSTRC(" 0 R\r\n")) < 0) {
- return -1;
- }
- }
+ if (m_File.AppendString(FX_BSTRC("]/Length ")) < 0) {
+ return -1;
}
- if (m_pEncryptDict) {
- if (m_File.AppendString(FX_BSTRC("/Encrypt")) < 0) {
- return -1;
- }
- FX_DWORD dwObjNum = m_pEncryptDict->GetObjNum();
- if (dwObjNum == 0) {
- dwObjNum = m_pDocument->GetLastObjNum() + 1;
- }
- if (m_File.AppendString(FX_BSTRC(" ")) < 0) {
- return -1;
- }
- if (m_File.AppendDWord(dwObjNum) < 0) {
- return -1;
- }
- if (m_File.AppendString(FX_BSTRC(" 0 R ")) < 0) {
- return -1;
- }
+ if (m_File.AppendDWord(m_dwLastObjNum * 5) < 0) {
+ return -1;
}
- if (m_File.AppendString(FX_BSTRC("/Size ")) < 0) {
- return -1;
+ if (m_File.AppendString(FX_BSTRC(">>stream\r\n")) < 0) {
+ return -1;
}
- if (m_File.AppendDWord(m_dwLastObjNum + (bXRefStream ? 2 : 1)) < 0) {
+ for (i = 0; i < m_dwLastObjNum; i++) {
+ FX_FILESIZE* offset = m_ObjectOffset.GetPtrAt(i);
+ if (!offset) {
+ continue;
+ }
+ _OutPutIndex(&m_File, *offset);
+ }
+ } else {
+ int count = m_NewObjNumArray.GetSize();
+ int32_t i = 0;
+ for (i = 0; i < count; i++) {
+ FX_DWORD objnum = m_NewObjNumArray.ElementAt(i);
+ if (m_File.AppendDWord(objnum) < 0) {
+ return -1;
+ }
+ if (m_File.AppendString(FX_BSTRC(" 1 ")) < 0) {
return -1;
+ }
}
- if ((m_dwFlags & FPDFCREATE_INCREMENTAL) != 0) {
- FX_FILESIZE prev = m_pParser->GetLastXRefOffset();
- if (prev) {
- if (m_File.AppendString(FX_BSTRC("/Prev ")) < 0) {
- return -1;
- }
- FX_CHAR offset_buf[20];
- FXSYS_memset(offset_buf, 0, sizeof(offset_buf));
- FXSYS_i64toa(prev, offset_buf, 10);
- if (m_File.AppendBlock(offset_buf, FXSYS_strlen(offset_buf)) < 0) {
- return -1;
- }
- }
+ if (m_File.AppendString(FX_BSTRC("]/Length ")) < 0) {
+ return -1;
}
- if (m_pIDArray) {
- if (m_File.AppendString((FX_BSTRC("/ID"))) < 0) {
- return -1;
- }
- FX_FILESIZE offset = 0;
- if (PDF_CreatorAppendObject(m_pIDArray, &m_File, offset) < 0) {
- return -1;
- }
+ if (m_File.AppendDWord(count * 5) < 0) {
+ return -1;
}
- if (!bXRefStream) {
- if (m_File.AppendString(FX_BSTRC(">>")) < 0) {
- return -1;
- }
- } else {
- if (m_File.AppendString(FX_BSTRC("/W[0 4 1]/Index[")) < 0) {
- return -1;
- }
- if ((m_dwFlags & FPDFCREATE_INCREMENTAL) != 0 && m_pParser && m_pParser->GetLastXRefOffset() == 0) {
- FX_DWORD i = 0;
- for (i = 0; i < m_dwLastObjNum; i++) {
- if (!m_ObjectOffset.GetPtrAt(i)) {
- continue;
- }
- if (m_File.AppendDWord(i) < 0) {
- return -1;
- }
- if (m_File.AppendString(FX_BSTRC(" 1 ")) < 0) {
- return -1;
- }
- }
- if (m_File.AppendString(FX_BSTRC("]/Length ")) < 0) {
- return -1;
- }
- if (m_File.AppendDWord(m_dwLastObjNum * 5) < 0) {
- return -1;
- }
- if (m_File.AppendString(FX_BSTRC(">>stream\r\n")) < 0) {
- return -1;
- }
- for (i = 0; i < m_dwLastObjNum; i++) {
- FX_FILESIZE* offset = m_ObjectOffset.GetPtrAt(i);
- if (!offset) {
- continue;
- }
- _OutPutIndex(&m_File, *offset);
- }
- } else {
- int count = m_NewObjNumArray.GetSize();
- int32_t i = 0;
- for (i = 0; i < count; i++) {
- FX_DWORD objnum = m_NewObjNumArray.ElementAt(i);
- if (m_File.AppendDWord(objnum) < 0) {
- return -1;
- }
- if (m_File.AppendString(FX_BSTRC(" 1 ")) < 0) {
- return -1;
- }
- }
- if (m_File.AppendString(FX_BSTRC("]/Length ")) < 0) {
- return -1;
- }
- if (m_File.AppendDWord(count * 5) < 0) {
- return -1;
- }
- if (m_File.AppendString(FX_BSTRC(">>stream\r\n")) < 0) {
- return -1;
- }
- for (i = 0; i < count; i++) {
- FX_DWORD objnum = m_NewObjNumArray.ElementAt(i);
- FX_FILESIZE offset = m_ObjectOffset[objnum];
- _OutPutIndex(&m_File, offset);
- }
- }
- if (m_File.AppendString(FX_BSTRC("\r\nendstream")) < 0) {
- return -1;
- }
+ if (m_File.AppendString(FX_BSTRC(">>stream\r\n")) < 0) {
+ return -1;
}
- }
- if (m_File.AppendString(FX_BSTRC("\r\nstartxref\r\n")) < 0) {
- return -1;
- }
- FX_CHAR offset_buf[20];
- FXSYS_memset(offset_buf, 0, sizeof(offset_buf));
- FXSYS_i64toa(m_XrefStart, offset_buf, 10);
- if (m_File.AppendBlock(offset_buf, FXSYS_strlen(offset_buf)) < 0) {
- return -1;
- }
- if (m_File.AppendString(FX_BSTRC("\r\n%%EOF\r\n")) < 0) {
+ for (i = 0; i < count; i++) {
+ FX_DWORD objnum = m_NewObjNumArray.ElementAt(i);
+ FX_FILESIZE offset = m_ObjectOffset[objnum];
+ _OutPutIndex(&m_File, offset);
+ }
+ }
+ if (m_File.AppendString(FX_BSTRC("\r\nendstream")) < 0) {
return -1;
- }
- m_File.Flush();
- return m_iStage = 100;
+ }
+ }
+ }
+ if (m_File.AppendString(FX_BSTRC("\r\nstartxref\r\n")) < 0) {
+ return -1;
+ }
+ FX_CHAR offset_buf[20];
+ FXSYS_memset(offset_buf, 0, sizeof(offset_buf));
+ FXSYS_i64toa(m_XrefStart, offset_buf, 10);
+ if (m_File.AppendBlock(offset_buf, FXSYS_strlen(offset_buf)) < 0) {
+ return -1;
+ }
+ if (m_File.AppendString(FX_BSTRC("\r\n%%EOF\r\n")) < 0) {
+ return -1;
+ }
+ m_File.Flush();
+ return m_iStage = 100;
}
-void CPDF_Creator::Clear()
-{
- delete m_pXRefStream;
- m_pXRefStream = NULL;
- m_File.Clear();
- m_NewObjNumArray.RemoveAll();
- if (m_pIDArray) {
- m_pIDArray->Release();
- m_pIDArray = NULL;
- }
+void CPDF_Creator::Clear() {
+ delete m_pXRefStream;
+ m_pXRefStream = NULL;
+ m_File.Clear();
+ m_NewObjNumArray.RemoveAll();
+ if (m_pIDArray) {
+ m_pIDArray->Release();
+ m_pIDArray = NULL;
+ }
}
-FX_BOOL CPDF_Creator::Create(const FX_CHAR* filename, FX_DWORD flags)
-{
- if (!m_File.AttachFile(filename)) {
- return FALSE;
- }
- FX_BOOL bRet = Create(flags);
- if (!bRet || !(flags & FPDFCREATE_PROGRESSIVE)) {
- Clear();
- }
- return bRet;
+FX_BOOL CPDF_Creator::Create(const FX_CHAR* filename, FX_DWORD flags) {
+ if (!m_File.AttachFile(filename)) {
+ return FALSE;
+ }
+ FX_BOOL bRet = Create(flags);
+ if (!bRet || !(flags & FPDFCREATE_PROGRESSIVE)) {
+ Clear();
+ }
+ return bRet;
}
-FX_BOOL CPDF_Creator::Create(const FX_WCHAR* filename, FX_DWORD flags)
-{
- if (!m_File.AttachFile(filename)) {
- return FALSE;
- }
- FX_BOOL bRet = Create(flags);
- if (!bRet || !(flags & FPDFCREATE_PROGRESSIVE)) {
- Clear();
- }
- return bRet;
+FX_BOOL CPDF_Creator::Create(const FX_WCHAR* filename, FX_DWORD flags) {
+ if (!m_File.AttachFile(filename)) {
+ return FALSE;
+ }
+ FX_BOOL bRet = Create(flags);
+ if (!bRet || !(flags & FPDFCREATE_PROGRESSIVE)) {
+ Clear();
+ }
+ return bRet;
}
-FX_BOOL CPDF_Creator::Create(IFX_StreamWrite* pFile, FX_DWORD flags)
-{
- if (!pFile) {
- return FALSE;
- }
- if (!m_File.AttachFile(pFile, FALSE)) {
- return FALSE;
- }
- return Create(flags);
+FX_BOOL CPDF_Creator::Create(IFX_StreamWrite* pFile, FX_DWORD flags) {
+ if (!pFile) {
+ return FALSE;
+ }
+ if (!m_File.AttachFile(pFile, FALSE)) {
+ return FALSE;
+ }
+ return Create(flags);
}
-FX_BOOL CPDF_Creator::Create(FX_DWORD flags)
-{
- m_dwFlags = flags;
- m_iStage = 0;
- m_Offset = 0;
- m_dwLastObjNum = m_pDocument->GetLastObjNum();
- m_ObjectOffset.Clear();
- m_ObjectSize.Clear();
- m_NewObjNumArray.RemoveAll();
- InitID();
- if (flags & FPDFCREATE_PROGRESSIVE) {
- return TRUE;
- }
- return Continue(NULL) > -1;
+FX_BOOL CPDF_Creator::Create(FX_DWORD flags) {
+ m_dwFlags = flags;
+ m_iStage = 0;
+ m_Offset = 0;
+ m_dwLastObjNum = m_pDocument->GetLastObjNum();
+ m_ObjectOffset.Clear();
+ m_ObjectSize.Clear();
+ m_NewObjNumArray.RemoveAll();
+ InitID();
+ if (flags & FPDFCREATE_PROGRESSIVE) {
+ return TRUE;
+ }
+ return Continue(NULL) > -1;
}
-void CPDF_Creator::InitID(FX_BOOL bDefault )
-{
- CPDF_Array* pOldIDArray = m_pParser ? m_pParser->GetIDArray() : NULL;
- FX_BOOL bNewId = !m_pIDArray;
- if (!m_pIDArray) {
- FX_DWORD* pBuffer = NULL;
- m_pIDArray = CPDF_Array::Create();
- CPDF_Object* pID1 = pOldIDArray ? pOldIDArray->GetElement(0) : NULL;
- if (pID1) {
- m_pIDArray->Add(pID1->Clone());
- } else {
- pBuffer = FX_Alloc(FX_DWORD, 4);
- PDF_GenerateFileID((FX_DWORD)(uintptr_t)this, m_dwLastObjNum, pBuffer);
- CFX_ByteStringC bsBuffer((const uint8_t*)pBuffer, 4 * sizeof(FX_DWORD));
- m_pIDArray->Add(CPDF_String::Create(bsBuffer, TRUE), m_pDocument);
- }
- if (pBuffer) {
- FX_Free(pBuffer);
- }
- }
- if (!bDefault) {
- return;
- }
- if (pOldIDArray) {
- CPDF_Object* pID2 = pOldIDArray->GetElement(1);
- if ((m_dwFlags & FPDFCREATE_INCREMENTAL) && m_pEncryptDict && pID2) {
- m_pIDArray->Add(pID2->Clone());
- return;
- }
- FX_DWORD* pBuffer = FX_Alloc(FX_DWORD, 4);
- PDF_GenerateFileID((FX_DWORD)(uintptr_t)this, m_dwLastObjNum, pBuffer);
- CFX_ByteStringC bsBuffer((const uint8_t*)pBuffer, 4 * sizeof(FX_DWORD));
- m_pIDArray->Add(CPDF_String::Create(bsBuffer, TRUE), m_pDocument);
- FX_Free(pBuffer);
- return;
- }
- m_pIDArray->Add(m_pIDArray->GetElement(0)->Clone());
- if (m_pEncryptDict && !pOldIDArray && m_pParser && bNewId) {
- if (m_pEncryptDict->GetString(FX_BSTRC("Filter")) == FX_BSTRC("Standard")) {
- CPDF_StandardSecurityHandler handler;
- CFX_ByteString user_pass = m_pParser->GetPassword();
- FX_DWORD flag = PDF_ENCRYPT_CONTENT;
- handler.OnCreate(m_pEncryptDict, m_pIDArray, (const uint8_t*)user_pass, user_pass.GetLength(), flag);
- if (m_bNewCrypto) {
- delete m_pCryptoHandler;
- }
- m_pCryptoHandler = new CPDF_StandardCryptoHandler;
- m_pCryptoHandler->Init(m_pEncryptDict, &handler);
- m_bNewCrypto = TRUE;
- m_bSecurityChanged = TRUE;
- }
+void CPDF_Creator::InitID(FX_BOOL bDefault) {
+ CPDF_Array* pOldIDArray = m_pParser ? m_pParser->GetIDArray() : NULL;
+ FX_BOOL bNewId = !m_pIDArray;
+ if (!m_pIDArray) {
+ FX_DWORD* pBuffer = NULL;
+ m_pIDArray = CPDF_Array::Create();
+ CPDF_Object* pID1 = pOldIDArray ? pOldIDArray->GetElement(0) : NULL;
+ if (pID1) {
+ m_pIDArray->Add(pID1->Clone());
+ } else {
+ pBuffer = FX_Alloc(FX_DWORD, 4);
+ PDF_GenerateFileID((FX_DWORD)(uintptr_t) this, m_dwLastObjNum, pBuffer);
+ CFX_ByteStringC bsBuffer((const uint8_t*)pBuffer, 4 * sizeof(FX_DWORD));
+ m_pIDArray->Add(CPDF_String::Create(bsBuffer, TRUE), m_pDocument);
+ }
+ if (pBuffer) {
+ FX_Free(pBuffer);
+ }
+ }
+ if (!bDefault) {
+ return;
+ }
+ if (pOldIDArray) {
+ CPDF_Object* pID2 = pOldIDArray->GetElement(1);
+ if ((m_dwFlags & FPDFCREATE_INCREMENTAL) && m_pEncryptDict && pID2) {
+ m_pIDArray->Add(pID2->Clone());
+ return;
+ }
+ FX_DWORD* pBuffer = FX_Alloc(FX_DWORD, 4);
+ PDF_GenerateFileID((FX_DWORD)(uintptr_t) this, m_dwLastObjNum, pBuffer);
+ CFX_ByteStringC bsBuffer((const uint8_t*)pBuffer, 4 * sizeof(FX_DWORD));
+ m_pIDArray->Add(CPDF_String::Create(bsBuffer, TRUE), m_pDocument);
+ FX_Free(pBuffer);
+ return;
+ }
+ m_pIDArray->Add(m_pIDArray->GetElement(0)->Clone());
+ if (m_pEncryptDict && !pOldIDArray && m_pParser && bNewId) {
+ if (m_pEncryptDict->GetString(FX_BSTRC("Filter")) == FX_BSTRC("Standard")) {
+ CPDF_StandardSecurityHandler handler;
+ CFX_ByteString user_pass = m_pParser->GetPassword();
+ FX_DWORD flag = PDF_ENCRYPT_CONTENT;
+ handler.OnCreate(m_pEncryptDict, m_pIDArray, (const uint8_t*)user_pass,
+ user_pass.GetLength(), flag);
+ if (m_bNewCrypto) {
+ delete m_pCryptoHandler;
+ }
+ m_pCryptoHandler = new CPDF_StandardCryptoHandler;
+ m_pCryptoHandler->Init(m_pEncryptDict, &handler);
+ m_bNewCrypto = TRUE;
+ m_bSecurityChanged = TRUE;
}
+ }
}
-int32_t CPDF_Creator::Continue(IFX_Pause *pPause)
-{
- if (m_iStage < 0) {
- return m_iStage;
- }
- int32_t iRet = 0;
- while (m_iStage < 100) {
- if (m_iStage < 20) {
- iRet = WriteDoc_Stage1(pPause);
- } else if (m_iStage < 30) {
- iRet = WriteDoc_Stage2(pPause);
- } else if (m_iStage < 90) {
- iRet = WriteDoc_Stage3(pPause);
- } else {
- iRet = WriteDoc_Stage4(pPause);
- }
- if (iRet < m_iStage) {
- break;
- }
+int32_t CPDF_Creator::Continue(IFX_Pause* pPause) {
+ if (m_iStage < 0) {
+ return m_iStage;
+ }
+ int32_t iRet = 0;
+ while (m_iStage < 100) {
+ if (m_iStage < 20) {
+ iRet = WriteDoc_Stage1(pPause);
+ } else if (m_iStage < 30) {
+ iRet = WriteDoc_Stage2(pPause);
+ } else if (m_iStage < 90) {
+ iRet = WriteDoc_Stage3(pPause);
+ } else {
+ iRet = WriteDoc_Stage4(pPause);
}
- if (iRet < 1 || m_iStage == 100) {
- m_iStage = -1;
- Clear();
- return iRet > 99 ? 0 : (iRet < 1 ? -1 : iRet);
+ if (iRet < m_iStage) {
+ break;
}
- return m_iStage;
+ }
+ if (iRet < 1 || m_iStage == 100) {
+ m_iStage = -1;
+ Clear();
+ return iRet > 99 ? 0 : (iRet < 1 ? -1 : iRet);
+ }
+ return m_iStage;
}
-FX_BOOL CPDF_Creator::SetFileVersion(int32_t fileVersion )
-{
- if (fileVersion < 10 || fileVersion > 17) {
- return FALSE;
- }
- m_FileVersion = fileVersion;
- return TRUE;
+FX_BOOL CPDF_Creator::SetFileVersion(int32_t fileVersion) {
+ if (fileVersion < 10 || fileVersion > 17) {
+ return FALSE;
+ }
+ m_FileVersion = fileVersion;
+ return TRUE;
}
-void CPDF_Creator::RemoveSecurity()
-{
- ResetStandardSecurity();
- m_bSecurityChanged = TRUE;
- m_pEncryptDict = NULL;
- m_pCryptoHandler = NULL;
+void CPDF_Creator::RemoveSecurity() {
+ ResetStandardSecurity();
+ m_bSecurityChanged = TRUE;
+ m_pEncryptDict = NULL;
+ m_pCryptoHandler = NULL;
}
-void CPDF_Creator::ResetStandardSecurity()
-{
- if (m_bStandardSecurity || m_bNewCrypto) {
- delete m_pCryptoHandler;
- m_pCryptoHandler = NULL;
- }
- m_bNewCrypto = FALSE;
- if (!m_bStandardSecurity) {
- return;
- }
- if (m_pEncryptDict) {
- m_pEncryptDict->Release();
- m_pEncryptDict = NULL;
- }
- m_bStandardSecurity = FALSE;
+void CPDF_Creator::ResetStandardSecurity() {
+ if (m_bStandardSecurity || m_bNewCrypto) {
+ delete m_pCryptoHandler;
+ m_pCryptoHandler = NULL;
+ }
+ m_bNewCrypto = FALSE;
+ if (!m_bStandardSecurity) {
+ return;
+ }
+ if (m_pEncryptDict) {
+ m_pEncryptDict->Release();
+ m_pEncryptDict = NULL;
+ }
+ m_bStandardSecurity = FALSE;
}
diff --git a/core/src/fpdfapi/fpdf_edit/fpdf_edit_doc.cpp b/core/src/fpdfapi/fpdf_edit/fpdf_edit_doc.cpp
index 5a5fb94ef3..fa21ac1058 100644
--- a/core/src/fpdfapi/fpdf_edit/fpdf_edit_doc.cpp
+++ b/core/src/fpdfapi/fpdf_edit/fpdf_edit_doc.cpp
@@ -8,1176 +8,1140 @@
#include "../../../include/fpdfapi/fpdf_module.h"
#include "../fpdf_page/pageint.h"
#include <limits.h>
-CPDF_Document::CPDF_Document() : CPDF_IndirectObjects(NULL)
-{
- m_pRootDict = NULL;
- m_pInfoDict = NULL;
- m_bLinearized = FALSE;
- m_dwFirstPageNo = 0;
- m_dwFirstPageObjNum = 0;
- m_pDocPage = CPDF_ModuleMgr::Get()->GetPageModule()->CreateDocData(this);
- m_pDocRender = CPDF_ModuleMgr::Get()->GetRenderModule()->CreateDocData(this);
+CPDF_Document::CPDF_Document() : CPDF_IndirectObjects(NULL) {
+ m_pRootDict = NULL;
+ m_pInfoDict = NULL;
+ m_bLinearized = FALSE;
+ m_dwFirstPageNo = 0;
+ m_dwFirstPageObjNum = 0;
+ m_pDocPage = CPDF_ModuleMgr::Get()->GetPageModule()->CreateDocData(this);
+ m_pDocRender = CPDF_ModuleMgr::Get()->GetRenderModule()->CreateDocData(this);
}
-void CPDF_Document::CreateNewDoc()
-{
- ASSERT(m_pRootDict == NULL && m_pInfoDict == NULL);
- m_pRootDict = new CPDF_Dictionary;
- m_pRootDict->SetAtName("Type", "Catalog");
- int objnum = AddIndirectObject(m_pRootDict);
- CPDF_Dictionary* pPages = new CPDF_Dictionary;
- pPages->SetAtName("Type", "Pages");
- pPages->SetAtNumber("Count", 0);
- pPages->SetAt("Kids", new CPDF_Array);
- objnum = AddIndirectObject(pPages);
- m_pRootDict->SetAtReference("Pages", this, objnum);
- m_pInfoDict = new CPDF_Dictionary;
- AddIndirectObject(m_pInfoDict);
+void CPDF_Document::CreateNewDoc() {
+ ASSERT(m_pRootDict == NULL && m_pInfoDict == NULL);
+ m_pRootDict = new CPDF_Dictionary;
+ m_pRootDict->SetAtName("Type", "Catalog");
+ int objnum = AddIndirectObject(m_pRootDict);
+ CPDF_Dictionary* pPages = new CPDF_Dictionary;
+ pPages->SetAtName("Type", "Pages");
+ pPages->SetAtNumber("Count", 0);
+ pPages->SetAt("Kids", new CPDF_Array);
+ objnum = AddIndirectObject(pPages);
+ m_pRootDict->SetAtReference("Pages", this, objnum);
+ m_pInfoDict = new CPDF_Dictionary;
+ AddIndirectObject(m_pInfoDict);
}
static const FX_WCHAR g_FX_CP874Unicodes[128] = {
- 0x20AC, 0x0000, 0x0000, 0x0000, 0x0000, 0x2026, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 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, 0x0000, 0x0000, 0x0000, 0x0000, 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, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x20AC, 0x0000, 0x0000, 0x0000, 0x0000, 0x2026, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2018,
+ 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 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, 0x0000, 0x0000, 0x0000, 0x0000, 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, 0x0000, 0x0000,
+ 0x0000, 0x0000,
};
static const FX_WCHAR g_FX_CP1250Unicodes[128] = {
- 0x20AC, 0x0000, 0x201A, 0x0000, 0x201E, 0x2026, 0x2020, 0x2021,
- 0x0000, 0x2030, 0x0160, 0x2039, 0x015A, 0x0164, 0x017D, 0x0179,
- 0x0000, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
- 0x0000, 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,
+ 0x20AC, 0x0000, 0x201A, 0x0000, 0x201E, 0x2026, 0x2020, 0x2021, 0x0000,
+ 0x2030, 0x0160, 0x2039, 0x015A, 0x0164, 0x017D, 0x0179, 0x0000, 0x2018,
+ 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, 0x0000, 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,
};
static const FX_WCHAR g_FX_CP1251Unicodes[128] = {
- 0x0402, 0x0403, 0x201A, 0x0453, 0x201E, 0x2026, 0x2020, 0x2021,
- 0x20AC, 0x2030, 0x0409, 0x2039, 0x040A, 0x040C, 0x040B, 0x040F,
- 0x0452, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
- 0x0000, 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,
+ 0x0402, 0x0403, 0x201A, 0x0453, 0x201E, 0x2026, 0x2020, 0x2021, 0x20AC,
+ 0x2030, 0x0409, 0x2039, 0x040A, 0x040C, 0x040B, 0x040F, 0x0452, 0x2018,
+ 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, 0x0000, 0x2122, 0x0459,
+ 0x203A, 0x045A, 0x045C, 0x045B, 0x045F, 0x00A0, 0x040E, 0x045E, 0x0408,
+ 0x00A4, 0x0490, 0x00A6, 0x00A7, 0x0401, 0x00A9, 0x0404, 0x00AB, 0x00AC,
+ 0x00AD, 0x00AE, 0x0407, 0x00B0, 0x00B1, 0x0406, 0x0456, 0x0491, 0x00B5,
+ 0x00B6, 0x00B7, 0x0451, 0x2116, 0x0454, 0x00BB, 0x0458, 0x0405, 0x0455,
+ 0x0457, 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417,
+ 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, 0x041F, 0x0420,
+ 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, 0x0428, 0x0429,
+ 0x042A, 0x042B, 0x042C, 0x042D, 0x042E, 0x042F, 0x0430, 0x0431, 0x0432,
+ 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, 0x0438, 0x0439, 0x043A, 0x043B,
+ 0x043C, 0x043D, 0x043E, 0x043F, 0x0440, 0x0441, 0x0442, 0x0443, 0x0444,
+ 0x0445, 0x0446, 0x0447, 0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D,
+ 0x044E, 0x044F,
};
static const FX_WCHAR g_FX_CP1253Unicodes[128] = {
- 0x20AC, 0x0000, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021,
- 0x0000, 0x2030, 0x0000, 0x2039, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
- 0x0000, 0x2122, 0x0000, 0x203A, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x00A0, 0x0385, 0x0386, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7,
- 0x00A8, 0x00A9, 0x0000, 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, 0x0000, 0x03A3, 0x03A4, 0x03A5, 0x03A6, 0x03A7,
- 0x03A8, 0x03A9, 0x03AA, 0x03AB, 0x03AC, 0x03AD, 0x03AE, 0x03AF,
- 0x03B0, 0x03B1, 0x03B2, 0x03B3, 0x03B4, 0x03B5, 0x03B6, 0x03B7,
- 0x03B8, 0x03B9, 0x03BA, 0x03BB, 0x03BC, 0x03BD, 0x03BE, 0x03BF,
- 0x03C0, 0x03C1, 0x03C2, 0x03C3, 0x03C4, 0x03C5, 0x03C6, 0x03C7,
- 0x03C8, 0x03C9, 0x03CA, 0x03CB, 0x03CC, 0x03CD, 0x03CE, 0x0000,
+ 0x20AC, 0x0000, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021, 0x0000,
+ 0x2030, 0x0000, 0x2039, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2018,
+ 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, 0x0000, 0x2122, 0x0000,
+ 0x203A, 0x0000, 0x0000, 0x0000, 0x0000, 0x00A0, 0x0385, 0x0386, 0x00A3,
+ 0x00A4, 0x00A5, 0x00A6, 0x00A7, 0x00A8, 0x00A9, 0x0000, 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, 0x0000, 0x03A3, 0x03A4, 0x03A5, 0x03A6, 0x03A7, 0x03A8, 0x03A9,
+ 0x03AA, 0x03AB, 0x03AC, 0x03AD, 0x03AE, 0x03AF, 0x03B0, 0x03B1, 0x03B2,
+ 0x03B3, 0x03B4, 0x03B5, 0x03B6, 0x03B7, 0x03B8, 0x03B9, 0x03BA, 0x03BB,
+ 0x03BC, 0x03BD, 0x03BE, 0x03BF, 0x03C0, 0x03C1, 0x03C2, 0x03C3, 0x03C4,
+ 0x03C5, 0x03C6, 0x03C7, 0x03C8, 0x03C9, 0x03CA, 0x03CB, 0x03CC, 0x03CD,
+ 0x03CE, 0x0000,
};
static const FX_WCHAR g_FX_CP1254Unicodes[128] = {
- 0x20AC, 0x0000, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021,
- 0x02C6, 0x2030, 0x0160, 0x2039, 0x0152, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
- 0x02DC, 0x2122, 0x0161, 0x203A, 0x0153, 0x0000, 0x0000, 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,
+ 0x20AC, 0x0000, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021, 0x02C6,
+ 0x2030, 0x0160, 0x2039, 0x0152, 0x0000, 0x0000, 0x0000, 0x0000, 0x2018,
+ 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, 0x02DC, 0x2122, 0x0161,
+ 0x203A, 0x0153, 0x0000, 0x0000, 0x0178, 0x00A0, 0x00A1, 0x00A2, 0x00A3,
+ 0x00A4, 0x00A5, 0x00A6, 0x00A7, 0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC,
+ 0x00AD, 0x00AE, 0x00AF, 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5,
+ 0x00B6, 0x00B7, 0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE,
+ 0x00BF, 0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7,
+ 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF, 0x011E,
+ 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7, 0x00D8, 0x00D9,
+ 0x00DA, 0x00DB, 0x00DC, 0x0130, 0x015E, 0x00DF, 0x00E0, 0x00E1, 0x00E2,
+ 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7, 0x00E8, 0x00E9, 0x00EA, 0x00EB,
+ 0x00EC, 0x00ED, 0x00EE, 0x00EF, 0x011F, 0x00F1, 0x00F2, 0x00F3, 0x00F4,
+ 0x00F5, 0x00F6, 0x00F7, 0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x0131,
+ 0x015F, 0x00FF,
};
static const FX_WCHAR g_FX_CP1255Unicodes[128] = {
- 0x20AC, 0x0000, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021,
- 0x02C6, 0x2030, 0x0000, 0x2039, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
- 0x02DC, 0x2122, 0x0000, 0x203A, 0x0000, 0x0000, 0x0000, 0x0000,
- 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, 0x0000, 0x05BB, 0x05BC, 0x05BD, 0x05BE, 0x05BF,
- 0x05C0, 0x05C1, 0x05C2, 0x05C3, 0x05F0, 0x05F1, 0x05F2, 0x05F3,
- 0x05F4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x05D0, 0x05D1, 0x05D2, 0x05D3, 0x05D4, 0x05D5, 0x05D6, 0x05D7,
- 0x05D8, 0x05D9, 0x05DA, 0x05DB, 0x05DC, 0x05DD, 0x05DE, 0x05DF,
- 0x05E0, 0x05E1, 0x05E2, 0x05E3, 0x05E4, 0x05E5, 0x05E6, 0x05E7,
- 0x05E8, 0x05E9, 0x05EA, 0x0000, 0x0000, 0x200E, 0x200F, 0x0000,
+ 0x20AC, 0x0000, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021, 0x02C6,
+ 0x2030, 0x0000, 0x2039, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2018,
+ 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, 0x02DC, 0x2122, 0x0000,
+ 0x203A, 0x0000, 0x0000, 0x0000, 0x0000, 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, 0x0000, 0x05BB, 0x05BC, 0x05BD, 0x05BE, 0x05BF, 0x05C0,
+ 0x05C1, 0x05C2, 0x05C3, 0x05F0, 0x05F1, 0x05F2, 0x05F3, 0x05F4, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x05D0, 0x05D1, 0x05D2,
+ 0x05D3, 0x05D4, 0x05D5, 0x05D6, 0x05D7, 0x05D8, 0x05D9, 0x05DA, 0x05DB,
+ 0x05DC, 0x05DD, 0x05DE, 0x05DF, 0x05E0, 0x05E1, 0x05E2, 0x05E3, 0x05E4,
+ 0x05E5, 0x05E6, 0x05E7, 0x05E8, 0x05E9, 0x05EA, 0x0000, 0x0000, 0x200E,
+ 0x200F, 0x0000,
};
static const FX_WCHAR g_FX_CP1256Unicodes[128] = {
- 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,
+ 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,
};
static const FX_WCHAR g_FX_CP1257Unicodes[128] = {
- 0x20AC, 0x0000, 0x201A, 0x0000, 0x201E, 0x2026, 0x2020, 0x2021,
- 0x0000, 0x2030, 0x0000, 0x2039, 0x0000, 0x00A8, 0x02C7, 0x00B8,
- 0x0000, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
- 0x0000, 0x2122, 0x0000, 0x203A, 0x0000, 0x00AF, 0x02DB, 0x0000,
- 0x00A0, 0x0000, 0x00A2, 0x00A3, 0x00A4, 0x0000, 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,
+ 0x20AC, 0x0000, 0x201A, 0x0000, 0x201E, 0x2026, 0x2020, 0x2021, 0x0000,
+ 0x2030, 0x0000, 0x2039, 0x0000, 0x00A8, 0x02C7, 0x00B8, 0x0000, 0x2018,
+ 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, 0x0000, 0x2122, 0x0000,
+ 0x203A, 0x0000, 0x00AF, 0x02DB, 0x0000, 0x00A0, 0x0000, 0x00A2, 0x00A3,
+ 0x00A4, 0x0000, 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,
};
typedef struct {
- uint8_t m_Charset;
- const FX_WCHAR* m_pUnicodes;
+ uint8_t m_Charset;
+ const FX_WCHAR* m_pUnicodes;
} FX_CharsetUnicodes;
const FX_CharsetUnicodes g_FX_CharsetUnicodes[] = {
- { FXFONT_THAI_CHARSET, g_FX_CP874Unicodes },
- { FXFONT_EASTEUROPE_CHARSET, g_FX_CP1250Unicodes },
- { FXFONT_RUSSIAN_CHARSET, g_FX_CP1251Unicodes },
- { FXFONT_GREEK_CHARSET, g_FX_CP1253Unicodes },
- { FXFONT_TURKISH_CHARSET, g_FX_CP1254Unicodes },
- { FXFONT_HEBREW_CHARSET, g_FX_CP1255Unicodes },
- { FXFONT_ARABIC_CHARSET, g_FX_CP1256Unicodes },
- { FXFONT_BALTIC_CHARSET, g_FX_CP1257Unicodes },
+ {FXFONT_THAI_CHARSET, g_FX_CP874Unicodes},
+ {FXFONT_EASTEUROPE_CHARSET, g_FX_CP1250Unicodes},
+ {FXFONT_RUSSIAN_CHARSET, g_FX_CP1251Unicodes},
+ {FXFONT_GREEK_CHARSET, g_FX_CP1253Unicodes},
+ {FXFONT_TURKISH_CHARSET, g_FX_CP1254Unicodes},
+ {FXFONT_HEBREW_CHARSET, g_FX_CP1255Unicodes},
+ {FXFONT_ARABIC_CHARSET, g_FX_CP1256Unicodes},
+ {FXFONT_BALTIC_CHARSET, g_FX_CP1257Unicodes},
};
#if (_FX_OS_ == _FX_WIN32_DESKTOP_ || _FX_OS_ == _FX_WIN64_DESKTOP_)
-static void _InsertWidthArray(HDC hDC, int start, int end, CPDF_Array* pWidthArray)
-{
- int size = end - start + 1;
- int* widths = FX_Alloc(int, size);
- GetCharWidth(hDC, start, end, widths);
- int i;
- for (i = 1; i < size; i ++)
- if (widths[i] != *widths) {
- break;
- }
- if (i == size) {
- int first = pWidthArray->GetInteger(pWidthArray->GetCount() - 1);
- pWidthArray->AddInteger(first + size - 1);
- pWidthArray->AddInteger(*widths);
- } else {
- CPDF_Array* pWidthArray1 = new CPDF_Array;
- pWidthArray->Add(pWidthArray1);
- for (i = 0; i < size; i ++) {
- pWidthArray1->AddInteger(widths[i]);
- }
+static void _InsertWidthArray(HDC hDC,
+ int start,
+ int end,
+ CPDF_Array* pWidthArray) {
+ int size = end - start + 1;
+ int* widths = FX_Alloc(int, size);
+ GetCharWidth(hDC, start, end, widths);
+ int i;
+ for (i = 1; i < size; i++)
+ if (widths[i] != *widths) {
+ break;
}
- FX_Free(widths);
-}
-CPDF_Font* CPDF_Document::AddWindowsFont(LOGFONTW* pLogFont, FX_BOOL bVert, FX_BOOL bTranslateName)
-{
- LOGFONTA lfa;
- FXSYS_memcpy(&lfa, pLogFont, (char*)lfa.lfFaceName - (char*)&lfa);
- CFX_ByteString face = CFX_ByteString::FromUnicode(pLogFont->lfFaceName);
- if (face.GetLength() >= LF_FACESIZE) {
- return NULL;
+ if (i == size) {
+ int first = pWidthArray->GetInteger(pWidthArray->GetCount() - 1);
+ pWidthArray->AddInteger(first + size - 1);
+ pWidthArray->AddInteger(*widths);
+ } else {
+ CPDF_Array* pWidthArray1 = new CPDF_Array;
+ pWidthArray->Add(pWidthArray1);
+ for (i = 0; i < size; i++) {
+ pWidthArray1->AddInteger(widths[i]);
}
- FXSYS_strcpy(lfa.lfFaceName, face.c_str());
- return AddWindowsFont(&lfa, bVert, bTranslateName);
+ }
+ FX_Free(widths);
}
-extern CFX_ByteString _FPDF_GetNameFromTT(const uint8_t* name_table, FX_DWORD name);
-CFX_ByteString _FPDF_GetPSNameFromTT(HDC hDC)
-{
- CFX_ByteString result;
- DWORD size = ::GetFontData(hDC, 'eman', 0, NULL, 0);
- if (size != GDI_ERROR) {
- LPBYTE buffer = FX_Alloc(BYTE, size);
- ::GetFontData(hDC, 'eman', 0, buffer, size);
- result = _FPDF_GetNameFromTT(buffer, 6);
- FX_Free(buffer);
- }
- return result;
+CPDF_Font* CPDF_Document::AddWindowsFont(LOGFONTW* pLogFont,
+ FX_BOOL bVert,
+ FX_BOOL bTranslateName) {
+ LOGFONTA lfa;
+ FXSYS_memcpy(&lfa, pLogFont, (char*)lfa.lfFaceName - (char*)&lfa);
+ CFX_ByteString face = CFX_ByteString::FromUnicode(pLogFont->lfFaceName);
+ if (face.GetLength() >= LF_FACESIZE) {
+ return NULL;
+ }
+ FXSYS_strcpy(lfa.lfFaceName, face.c_str());
+ return AddWindowsFont(&lfa, bVert, bTranslateName);
+}
+extern CFX_ByteString _FPDF_GetNameFromTT(const uint8_t* name_table,
+ FX_DWORD name);
+CFX_ByteString _FPDF_GetPSNameFromTT(HDC hDC) {
+ CFX_ByteString result;
+ DWORD size = ::GetFontData(hDC, 'eman', 0, NULL, 0);
+ if (size != GDI_ERROR) {
+ LPBYTE buffer = FX_Alloc(BYTE, size);
+ ::GetFontData(hDC, 'eman', 0, buffer, size);
+ result = _FPDF_GetNameFromTT(buffer, 6);
+ FX_Free(buffer);
+ }
+ return result;
}
-CPDF_Font* CPDF_Document::AddWindowsFont(LOGFONTA* pLogFont, FX_BOOL bVert, FX_BOOL bTranslateName)
-{
- pLogFont->lfHeight = -1000;
- pLogFont->lfWidth = 0;
- HGDIOBJ hFont = CreateFontIndirectA(pLogFont);
- HDC hDC = CreateCompatibleDC(NULL);
+CPDF_Font* CPDF_Document::AddWindowsFont(LOGFONTA* pLogFont,
+ FX_BOOL bVert,
+ FX_BOOL bTranslateName) {
+ pLogFont->lfHeight = -1000;
+ pLogFont->lfWidth = 0;
+ HGDIOBJ hFont = CreateFontIndirectA(pLogFont);
+ HDC hDC = CreateCompatibleDC(NULL);
+ hFont = SelectObject(hDC, hFont);
+ int tm_size = GetOutlineTextMetrics(hDC, 0, NULL);
+ if (tm_size == 0) {
hFont = SelectObject(hDC, hFont);
- int tm_size = GetOutlineTextMetrics(hDC, 0, NULL);
- if (tm_size == 0) {
- hFont = SelectObject(hDC, hFont);
- DeleteObject(hFont);
- DeleteDC(hDC);
- return NULL;
- }
- LPBYTE tm_buf = FX_Alloc(BYTE, tm_size);
- OUTLINETEXTMETRIC* ptm = (OUTLINETEXTMETRIC*)tm_buf;
- GetOutlineTextMetrics(hDC, tm_size, ptm);
- int flags = 0, italicangle, ascend, descend, capheight, bbox[4];
- if (pLogFont->lfItalic) {
- flags |= PDFFONT_ITALIC;
- }
- if ((pLogFont->lfPitchAndFamily & 3) == FIXED_PITCH) {
- flags |= PDFFONT_FIXEDPITCH;
- }
- if ((pLogFont->lfPitchAndFamily & 0xf8) == FF_ROMAN) {
- flags |= PDFFONT_SERIF;
- }
- if ((pLogFont->lfPitchAndFamily & 0xf8) == FF_SCRIPT) {
- flags |= PDFFONT_SCRIPT;
- }
- FX_BOOL bCJK = pLogFont->lfCharSet == CHINESEBIG5_CHARSET || pLogFont->lfCharSet == GB2312_CHARSET ||
- pLogFont->lfCharSet == HANGEUL_CHARSET || pLogFont->lfCharSet == SHIFTJIS_CHARSET;
- CFX_ByteString basefont;
- if (bTranslateName && bCJK) {
- basefont = _FPDF_GetPSNameFromTT(hDC);
- }
- if (basefont.IsEmpty()) {
- basefont = pLogFont->lfFaceName;
- }
- italicangle = ptm->otmItalicAngle / 10;
- ascend = ptm->otmrcFontBox.top;
- descend = ptm->otmrcFontBox.bottom;
- capheight = ptm->otmsCapEmHeight;
- bbox[0] = ptm->otmrcFontBox.left;
- bbox[1] = ptm->otmrcFontBox.bottom;
- bbox[2] = ptm->otmrcFontBox.right;
- bbox[3] = ptm->otmrcFontBox.top;
- FX_Free(tm_buf);
- basefont.Replace(" ", "");
- CPDF_Dictionary* pBaseDict = new CPDF_Dictionary;
- pBaseDict->SetAtName("Type", "Font");
- CPDF_Dictionary* pFontDict = pBaseDict;
- if (!bCJK) {
- if (pLogFont->lfCharSet == ANSI_CHARSET || pLogFont->lfCharSet == DEFAULT_CHARSET ||
- pLogFont->lfCharSet == SYMBOL_CHARSET) {
- if (pLogFont->lfCharSet == SYMBOL_CHARSET) {
- flags |= PDFFONT_SYMBOLIC;
- } else {
- flags |= PDFFONT_NONSYMBOLIC;
- }
- pBaseDict->SetAtName(FX_BSTRC("Encoding"), "WinAnsiEncoding");
- } else {
- flags |= PDFFONT_NONSYMBOLIC;
- int i;
- for (i = 0; i < sizeof g_FX_CharsetUnicodes / sizeof(FX_CharsetUnicodes); i ++)
- if (g_FX_CharsetUnicodes[i].m_Charset == pLogFont->lfCharSet) {
- break;
- }
- if (i < sizeof g_FX_CharsetUnicodes / sizeof(FX_CharsetUnicodes)) {
- CPDF_Dictionary* pEncoding = new CPDF_Dictionary;
- pEncoding->SetAtName(FX_BSTRC("BaseEncoding"), "WinAnsiEncoding");
- CPDF_Array* pArray = new CPDF_Array;
- pArray->AddInteger(128);
- const FX_WCHAR* pUnicodes = g_FX_CharsetUnicodes[i].m_pUnicodes;
- for (int j = 0; j < 128; j ++) {
- CFX_ByteString name = PDF_AdobeNameFromUnicode(pUnicodes[j]);
- if (name.IsEmpty()) {
- pArray->AddName(FX_BSTRC(".notdef"));
- } else {
- pArray->AddName(name);
- }
- }
- pEncoding->SetAt(FX_BSTRC("Differences"), pArray);
- AddIndirectObject(pEncoding);
- pBaseDict->SetAtReference(FX_BSTRC("Encoding"), this, pEncoding);
- }
- }
- if (pLogFont->lfWeight > FW_MEDIUM && pLogFont->lfItalic) {
- basefont += ",BoldItalic";
- } else if (pLogFont->lfWeight > FW_MEDIUM) {
- basefont += ",Bold";
- } else if (pLogFont->lfItalic) {
- basefont += ",Italic";
- }
- pBaseDict->SetAtName("Subtype", "TrueType");
- pBaseDict->SetAtName("BaseFont", basefont);
- pBaseDict->SetAtNumber("FirstChar", 32);
- pBaseDict->SetAtNumber("LastChar", 255);
- int char_widths[224];
- GetCharWidth(hDC, 32, 255, char_widths);
- CPDF_Array* pWidths = new CPDF_Array;
- for (int i = 0; i < 224; i ++) {
- pWidths->AddInteger(char_widths[i]);
- }
- pBaseDict->SetAt("Widths", pWidths);
- } else {
+ DeleteObject(hFont);
+ DeleteDC(hDC);
+ return NULL;
+ }
+ LPBYTE tm_buf = FX_Alloc(BYTE, tm_size);
+ OUTLINETEXTMETRIC* ptm = (OUTLINETEXTMETRIC*)tm_buf;
+ GetOutlineTextMetrics(hDC, tm_size, ptm);
+ int flags = 0, italicangle, ascend, descend, capheight, bbox[4];
+ if (pLogFont->lfItalic) {
+ flags |= PDFFONT_ITALIC;
+ }
+ if ((pLogFont->lfPitchAndFamily & 3) == FIXED_PITCH) {
+ flags |= PDFFONT_FIXEDPITCH;
+ }
+ if ((pLogFont->lfPitchAndFamily & 0xf8) == FF_ROMAN) {
+ flags |= PDFFONT_SERIF;
+ }
+ if ((pLogFont->lfPitchAndFamily & 0xf8) == FF_SCRIPT) {
+ flags |= PDFFONT_SCRIPT;
+ }
+ FX_BOOL bCJK = pLogFont->lfCharSet == CHINESEBIG5_CHARSET ||
+ pLogFont->lfCharSet == GB2312_CHARSET ||
+ pLogFont->lfCharSet == HANGEUL_CHARSET ||
+ pLogFont->lfCharSet == SHIFTJIS_CHARSET;
+ CFX_ByteString basefont;
+ if (bTranslateName && bCJK) {
+ basefont = _FPDF_GetPSNameFromTT(hDC);
+ }
+ if (basefont.IsEmpty()) {
+ basefont = pLogFont->lfFaceName;
+ }
+ italicangle = ptm->otmItalicAngle / 10;
+ ascend = ptm->otmrcFontBox.top;
+ descend = ptm->otmrcFontBox.bottom;
+ capheight = ptm->otmsCapEmHeight;
+ bbox[0] = ptm->otmrcFontBox.left;
+ bbox[1] = ptm->otmrcFontBox.bottom;
+ bbox[2] = ptm->otmrcFontBox.right;
+ bbox[3] = ptm->otmrcFontBox.top;
+ FX_Free(tm_buf);
+ basefont.Replace(" ", "");
+ CPDF_Dictionary* pBaseDict = new CPDF_Dictionary;
+ pBaseDict->SetAtName("Type", "Font");
+ CPDF_Dictionary* pFontDict = pBaseDict;
+ if (!bCJK) {
+ if (pLogFont->lfCharSet == ANSI_CHARSET ||
+ pLogFont->lfCharSet == DEFAULT_CHARSET ||
+ pLogFont->lfCharSet == SYMBOL_CHARSET) {
+ if (pLogFont->lfCharSet == SYMBOL_CHARSET) {
+ flags |= PDFFONT_SYMBOLIC;
+ } else {
flags |= PDFFONT_NONSYMBOLIC;
- pFontDict = new CPDF_Dictionary;
- CFX_ByteString cmap;
- CFX_ByteString ordering;
- int supplement;
- CPDF_Array* pWidthArray = new CPDF_Array;
- switch (pLogFont->lfCharSet) {
- case CHINESEBIG5_CHARSET:
- cmap = bVert ? "ETenms-B5-V" : "ETenms-B5-H";
- ordering = "CNS1";
- supplement = 4;
- pWidthArray->AddInteger(1);
- _InsertWidthArray(hDC, 0x20, 0x7e, pWidthArray);
- break;
- case GB2312_CHARSET:
- cmap = bVert ? "GBK-EUC-V" : "GBK-EUC-H";
- ordering = "GB1", supplement = 2;
- pWidthArray->AddInteger(7716);
- _InsertWidthArray(hDC, 0x20, 0x20, pWidthArray);
- pWidthArray->AddInteger(814);
- _InsertWidthArray(hDC, 0x21, 0x7e, pWidthArray);
- break;
- case HANGEUL_CHARSET:
- cmap = bVert ? "KSCms-UHC-V" : "KSCms-UHC-H";
- ordering = "Korea1";
- supplement = 2;
- pWidthArray->AddInteger(1);
- _InsertWidthArray(hDC, 0x20, 0x7e, pWidthArray);
- break;
- case SHIFTJIS_CHARSET:
- cmap = bVert ? "90ms-RKSJ-V" : "90ms-RKSJ-H";
- ordering = "Japan1";
- supplement = 5;
- pWidthArray->AddInteger(231);
- _InsertWidthArray(hDC, 0x20, 0x7d, pWidthArray);
- pWidthArray->AddInteger(326);
- _InsertWidthArray(hDC, 0xa0, 0xa0, pWidthArray);
- pWidthArray->AddInteger(327);
- _InsertWidthArray(hDC, 0xa1, 0xdf, pWidthArray);
- pWidthArray->AddInteger(631);
- _InsertWidthArray(hDC, 0x7e, 0x7e, pWidthArray);
- break;
+ }
+ pBaseDict->SetAtName(FX_BSTRC("Encoding"), "WinAnsiEncoding");
+ } else {
+ flags |= PDFFONT_NONSYMBOLIC;
+ int i;
+ for (i = 0; i < sizeof g_FX_CharsetUnicodes / sizeof(FX_CharsetUnicodes);
+ i++)
+ if (g_FX_CharsetUnicodes[i].m_Charset == pLogFont->lfCharSet) {
+ break;
}
- pBaseDict->SetAtName("Subtype", "Type0");
- pBaseDict->SetAtName("BaseFont", basefont);
- pBaseDict->SetAtName("Encoding", cmap);
- pFontDict->SetAt("W", pWidthArray);
- pFontDict->SetAtName("Type", "Font");
- pFontDict->SetAtName("Subtype", "CIDFontType2");
- pFontDict->SetAtName("BaseFont", basefont);
- CPDF_Dictionary* pCIDSysInfo = new CPDF_Dictionary;
- pCIDSysInfo->SetAtString("Registry", "Adobe");
- pCIDSysInfo->SetAtString("Ordering", ordering);
- pCIDSysInfo->SetAtInteger("Supplement", supplement);
- pFontDict->SetAt("CIDSystemInfo", pCIDSysInfo);
+ if (i < sizeof g_FX_CharsetUnicodes / sizeof(FX_CharsetUnicodes)) {
+ CPDF_Dictionary* pEncoding = new CPDF_Dictionary;
+ pEncoding->SetAtName(FX_BSTRC("BaseEncoding"), "WinAnsiEncoding");
CPDF_Array* pArray = new CPDF_Array;
- pBaseDict->SetAt("DescendantFonts", pArray);
- AddIndirectObject(pFontDict);
- pArray->AddReference(this, pFontDict);
+ pArray->AddInteger(128);
+ const FX_WCHAR* pUnicodes = g_FX_CharsetUnicodes[i].m_pUnicodes;
+ for (int j = 0; j < 128; j++) {
+ CFX_ByteString name = PDF_AdobeNameFromUnicode(pUnicodes[j]);
+ if (name.IsEmpty()) {
+ pArray->AddName(FX_BSTRC(".notdef"));
+ } else {
+ pArray->AddName(name);
+ }
+ }
+ pEncoding->SetAt(FX_BSTRC("Differences"), pArray);
+ AddIndirectObject(pEncoding);
+ pBaseDict->SetAtReference(FX_BSTRC("Encoding"), this, pEncoding);
+ }
}
- AddIndirectObject(pBaseDict);
- CPDF_Dictionary* pFontDesc = new CPDF_Dictionary;
- pFontDesc->SetAtName("Type", "FontDescriptor");
- pFontDesc->SetAtName("FontName", basefont);
- pFontDesc->SetAtInteger("Flags", flags);
- CPDF_Array* pBBox = new CPDF_Array;
- for (int i = 0; i < 4; i ++) {
- pBBox->AddInteger(bbox[i]);
+ if (pLogFont->lfWeight > FW_MEDIUM && pLogFont->lfItalic) {
+ basefont += ",BoldItalic";
+ } else if (pLogFont->lfWeight > FW_MEDIUM) {
+ basefont += ",Bold";
+ } else if (pLogFont->lfItalic) {
+ basefont += ",Italic";
}
- pFontDesc->SetAt("FontBBox", pBBox);
- pFontDesc->SetAtInteger("ItalicAngle", italicangle);
- pFontDesc->SetAtInteger("Ascent", ascend);
- pFontDesc->SetAtInteger("Descent", descend);
- pFontDesc->SetAtInteger("CapHeight", capheight);
- pFontDesc->SetAtInteger("StemV", pLogFont->lfWeight / 5);
- AddIndirectObject(pFontDesc);
- pFontDict->SetAtReference("FontDescriptor", this, pFontDesc);
- hFont = SelectObject(hDC, hFont);
- DeleteObject(hFont);
- DeleteDC(hDC);
- return LoadFont(pBaseDict);
+ pBaseDict->SetAtName("Subtype", "TrueType");
+ pBaseDict->SetAtName("BaseFont", basefont);
+ pBaseDict->SetAtNumber("FirstChar", 32);
+ pBaseDict->SetAtNumber("LastChar", 255);
+ int char_widths[224];
+ GetCharWidth(hDC, 32, 255, char_widths);
+ CPDF_Array* pWidths = new CPDF_Array;
+ for (int i = 0; i < 224; i++) {
+ pWidths->AddInteger(char_widths[i]);
+ }
+ pBaseDict->SetAt("Widths", pWidths);
+ } else {
+ flags |= PDFFONT_NONSYMBOLIC;
+ pFontDict = new CPDF_Dictionary;
+ CFX_ByteString cmap;
+ CFX_ByteString ordering;
+ int supplement;
+ CPDF_Array* pWidthArray = new CPDF_Array;
+ switch (pLogFont->lfCharSet) {
+ case CHINESEBIG5_CHARSET:
+ cmap = bVert ? "ETenms-B5-V" : "ETenms-B5-H";
+ ordering = "CNS1";
+ supplement = 4;
+ pWidthArray->AddInteger(1);
+ _InsertWidthArray(hDC, 0x20, 0x7e, pWidthArray);
+ break;
+ case GB2312_CHARSET:
+ cmap = bVert ? "GBK-EUC-V" : "GBK-EUC-H";
+ ordering = "GB1", supplement = 2;
+ pWidthArray->AddInteger(7716);
+ _InsertWidthArray(hDC, 0x20, 0x20, pWidthArray);
+ pWidthArray->AddInteger(814);
+ _InsertWidthArray(hDC, 0x21, 0x7e, pWidthArray);
+ break;
+ case HANGEUL_CHARSET:
+ cmap = bVert ? "KSCms-UHC-V" : "KSCms-UHC-H";
+ ordering = "Korea1";
+ supplement = 2;
+ pWidthArray->AddInteger(1);
+ _InsertWidthArray(hDC, 0x20, 0x7e, pWidthArray);
+ break;
+ case SHIFTJIS_CHARSET:
+ cmap = bVert ? "90ms-RKSJ-V" : "90ms-RKSJ-H";
+ ordering = "Japan1";
+ supplement = 5;
+ pWidthArray->AddInteger(231);
+ _InsertWidthArray(hDC, 0x20, 0x7d, pWidthArray);
+ pWidthArray->AddInteger(326);
+ _InsertWidthArray(hDC, 0xa0, 0xa0, pWidthArray);
+ pWidthArray->AddInteger(327);
+ _InsertWidthArray(hDC, 0xa1, 0xdf, pWidthArray);
+ pWidthArray->AddInteger(631);
+ _InsertWidthArray(hDC, 0x7e, 0x7e, pWidthArray);
+ break;
+ }
+ pBaseDict->SetAtName("Subtype", "Type0");
+ pBaseDict->SetAtName("BaseFont", basefont);
+ pBaseDict->SetAtName("Encoding", cmap);
+ pFontDict->SetAt("W", pWidthArray);
+ pFontDict->SetAtName("Type", "Font");
+ pFontDict->SetAtName("Subtype", "CIDFontType2");
+ pFontDict->SetAtName("BaseFont", basefont);
+ CPDF_Dictionary* pCIDSysInfo = new CPDF_Dictionary;
+ pCIDSysInfo->SetAtString("Registry", "Adobe");
+ pCIDSysInfo->SetAtString("Ordering", ordering);
+ pCIDSysInfo->SetAtInteger("Supplement", supplement);
+ pFontDict->SetAt("CIDSystemInfo", pCIDSysInfo);
+ CPDF_Array* pArray = new CPDF_Array;
+ pBaseDict->SetAt("DescendantFonts", pArray);
+ AddIndirectObject(pFontDict);
+ pArray->AddReference(this, pFontDict);
+ }
+ AddIndirectObject(pBaseDict);
+ CPDF_Dictionary* pFontDesc = new CPDF_Dictionary;
+ pFontDesc->SetAtName("Type", "FontDescriptor");
+ pFontDesc->SetAtName("FontName", basefont);
+ pFontDesc->SetAtInteger("Flags", flags);
+ CPDF_Array* pBBox = new CPDF_Array;
+ for (int i = 0; i < 4; i++) {
+ pBBox->AddInteger(bbox[i]);
+ }
+ pFontDesc->SetAt("FontBBox", pBBox);
+ pFontDesc->SetAtInteger("ItalicAngle", italicangle);
+ pFontDesc->SetAtInteger("Ascent", ascend);
+ pFontDesc->SetAtInteger("Descent", descend);
+ pFontDesc->SetAtInteger("CapHeight", capheight);
+ pFontDesc->SetAtInteger("StemV", pLogFont->lfWeight / 5);
+ AddIndirectObject(pFontDesc);
+ pFontDict->SetAtReference("FontDescriptor", this, pFontDesc);
+ hFont = SelectObject(hDC, hFont);
+ DeleteObject(hFont);
+ DeleteDC(hDC);
+ return LoadFont(pBaseDict);
}
#endif
-#if (_FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_)
-uint32_t FX_GetLangHashCode( const FX_CHAR* pStr)
-{
- FXSYS_assert( pStr != NULL);
- int32_t iLength = FXSYS_strlen(pStr);
- const FX_CHAR* pStrEnd = pStr + iLength;
- uint32_t uHashCode = 0;
- while ( pStr < pStrEnd) {
- uHashCode = 31 * uHashCode + tolower(*pStr++);
- }
- return uHashCode;
+#if (_FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_)
+uint32_t FX_GetLangHashCode(const FX_CHAR* pStr) {
+ FXSYS_assert(pStr != NULL);
+ int32_t iLength = FXSYS_strlen(pStr);
+ const FX_CHAR* pStrEnd = pStr + iLength;
+ uint32_t uHashCode = 0;
+ while (pStr < pStrEnd) {
+ uHashCode = 31 * uHashCode + tolower(*pStr++);
+ }
+ return uHashCode;
}
struct FX_LANG2CS {
- FX_DWORD uLang;
- int uCharset;
-}*FX_LPLANG2CS;
+ FX_DWORD uLang;
+ int uCharset;
+} * FX_LPLANG2CS;
static const FX_LANG2CS gs_FXLang2CharsetTable[] = {
- {3109, 0},
- {3121, 178},
- {3129, 162},
- {3139, 204},
- {3141, 204},
- {3166, 0},
- {3184, 238},
- {3197, 0},
- {3201, 0},
- {3239, 161},
- {3241, 0},
- {3246, 0},
- {3247, 186},
- {3248, 0},
- {3259, 178},
- {3267, 0},
- {3273, 0},
- {3276, 0},
- {3301, 0},
- {3310, 1},
- {3325, 177},
- {3329, 1},
- {3338, 238},
- {3341, 238},
- {3345, 1},
- {3355, 0},
- {3370, 0},
- {3371, 0},
- {3383, 128},
- {3424, 204},
- {3427, 1},
- {3428, 129},
- {3436, 178},
- {3464, 186},
- {3466, 186},
- {3486, 204},
- {3487, 0},
- {3493, 1},
- {3494, 0},
- {3508, 0},
- {3518, 0},
- {3520, 0},
- {3569, 1},
- {3580, 238},
- {3588, 0},
- {3645, 238},
- {3651, 204},
- {3672, 238},
- {3673, 238},
- {3678, 238},
- {3679, 238},
- {3683, 0},
- {3684, 0},
- {3693, 1},
- {3697, 1},
- {3700, 222},
- {3710, 162},
- {3734, 204},
- {3741, 178},
- {3749, 162},
- {3763, 163},
- {3886, 134},
- {105943, 0},
- {106375, 1},
- {3923451837, 134},
+ {3109, 0}, {3121, 178}, {3129, 162}, {3139, 204}, {3141, 204},
+ {3166, 0}, {3184, 238}, {3197, 0}, {3201, 0}, {3239, 161},
+ {3241, 0}, {3246, 0}, {3247, 186}, {3248, 0}, {3259, 178},
+ {3267, 0}, {3273, 0}, {3276, 0}, {3301, 0}, {3310, 1},
+ {3325, 177}, {3329, 1}, {3338, 238}, {3341, 238}, {3345, 1},
+ {3355, 0}, {3370, 0}, {3371, 0}, {3383, 128}, {3424, 204},
+ {3427, 1}, {3428, 129}, {3436, 178}, {3464, 186}, {3466, 186},
+ {3486, 204}, {3487, 0}, {3493, 1}, {3494, 0}, {3508, 0},
+ {3518, 0}, {3520, 0}, {3569, 1}, {3580, 238}, {3588, 0},
+ {3645, 238}, {3651, 204}, {3672, 238}, {3673, 238}, {3678, 238},
+ {3679, 238}, {3683, 0}, {3684, 0}, {3693, 1}, {3697, 1},
+ {3700, 222}, {3710, 162}, {3734, 204}, {3741, 178}, {3749, 162},
+ {3763, 163}, {3886, 134}, {105943, 0}, {106375, 1}, {3923451837, 134},
{3923451838, 136},
};
-static FX_WORD FX_GetCsFromLangCode(uint32_t uCode)
-{
- int32_t iStart = 0;
- int32_t iEnd = sizeof(gs_FXLang2CharsetTable) / sizeof(FX_LANG2CS) - 1;
- while (iStart <= iEnd) {
- int32_t iMid = (iStart + iEnd) / 2;
- const FX_LANG2CS &charset = gs_FXLang2CharsetTable[iMid];
- if (uCode == charset.uLang) {
- return charset.uCharset;
- }
- if (uCode < charset.uLang) {
- iEnd = iMid - 1;
- } else {
- iStart = iMid + 1;
- }
- };
- return 0;
-}
-static FX_WORD FX_GetCharsetFromLang(const FX_CHAR* pLang, int32_t iLength)
-{
- FXSYS_assert(pLang);
- if (iLength < 0) {
- iLength = FXSYS_strlen(pLang);
+static FX_WORD FX_GetCsFromLangCode(uint32_t uCode) {
+ int32_t iStart = 0;
+ int32_t iEnd = sizeof(gs_FXLang2CharsetTable) / sizeof(FX_LANG2CS) - 1;
+ while (iStart <= iEnd) {
+ int32_t iMid = (iStart + iEnd) / 2;
+ const FX_LANG2CS& charset = gs_FXLang2CharsetTable[iMid];
+ if (uCode == charset.uLang) {
+ return charset.uCharset;
+ }
+ if (uCode < charset.uLang) {
+ iEnd = iMid - 1;
+ } else {
+ iStart = iMid + 1;
}
- uint32_t uHash = FX_GetLangHashCode(pLang);
- return FX_GetCsFromLangCode(uHash);
+ };
+ return 0;
}
-static void _CFString2CFXByteString(CFStringRef src, CFX_ByteString &dest)
-{
- SInt32 len = CFStringGetLength(src);
- CFRange range = CFRangeMake(0, len);
- CFIndex used = 0;
- UInt8* pBuffer = (UInt8*)calloc(len+1, sizeof(UInt8));
- CFStringGetBytes(src, range, kCFStringEncodingASCII, 0, false, pBuffer, len, &used);
- dest = (FX_CHAR*)pBuffer;
- free(pBuffer);
+static FX_WORD FX_GetCharsetFromLang(const FX_CHAR* pLang, int32_t iLength) {
+ FXSYS_assert(pLang);
+ if (iLength < 0) {
+ iLength = FXSYS_strlen(pLang);
+ }
+ uint32_t uHash = FX_GetLangHashCode(pLang);
+ return FX_GetCsFromLangCode(uHash);
}
-FX_BOOL IsHasCharSet(CFArrayRef languages, const CFX_DWordArray &charSets)
-{
- int iCount = charSets.GetSize();
- for (int i = 0; i < CFArrayGetCount(languages); ++i) {
- CFStringRef language = (CFStringRef)CFArrayGetValueAtIndex(languages, i);
- FX_DWORD CharSet = FX_GetCharsetFromLang(CFStringGetCStringPtr(language, kCFStringEncodingMacRoman), -1);
- for (int j = 0; j < iCount; ++j) {
- if (CharSet == charSets[j]) {
- return TRUE;
- }
- }
+static void _CFString2CFXByteString(CFStringRef src, CFX_ByteString& dest) {
+ SInt32 len = CFStringGetLength(src);
+ CFRange range = CFRangeMake(0, len);
+ CFIndex used = 0;
+ UInt8* pBuffer = (UInt8*)calloc(len + 1, sizeof(UInt8));
+ CFStringGetBytes(src, range, kCFStringEncodingASCII, 0, false, pBuffer, len,
+ &used);
+ dest = (FX_CHAR*)pBuffer;
+ free(pBuffer);
+}
+FX_BOOL IsHasCharSet(CFArrayRef languages, const CFX_DWordArray& charSets) {
+ int iCount = charSets.GetSize();
+ for (int i = 0; i < CFArrayGetCount(languages); ++i) {
+ CFStringRef language = (CFStringRef)CFArrayGetValueAtIndex(languages, i);
+ FX_DWORD CharSet = FX_GetCharsetFromLang(
+ CFStringGetCStringPtr(language, kCFStringEncodingMacRoman), -1);
+ for (int j = 0; j < iCount; ++j) {
+ if (CharSet == charSets[j]) {
+ return TRUE;
+ }
}
- return FALSE;
+ }
+ return FALSE;
}
-void FX_GetCharWidth(CTFontRef font, UniChar start, UniChar end, int* width)
-{
- CGFloat size = CTFontGetSize(font);
- for (; start <= end; ++start) {
- CGGlyph pGlyph = 0;
- CFIndex count = 1;
- CTFontGetGlyphsForCharacters(font, &start, &pGlyph, count);
- CGSize advances;
- CTFontGetAdvancesForGlyphs(font, kCTFontDefaultOrientation, &pGlyph, &advances, 1);
- *width = (int)(advances.width / size * 1000) ;
- width++;
+void FX_GetCharWidth(CTFontRef font, UniChar start, UniChar end, int* width) {
+ CGFloat size = CTFontGetSize(font);
+ for (; start <= end; ++start) {
+ CGGlyph pGlyph = 0;
+ CFIndex count = 1;
+ CTFontGetGlyphsForCharacters(font, &start, &pGlyph, count);
+ CGSize advances;
+ CTFontGetAdvancesForGlyphs(font, kCTFontDefaultOrientation, &pGlyph,
+ &advances, 1);
+ *width = (int)(advances.width / size * 1000);
+ width++;
+ }
+}
+static void _InsertWidthArray(CTFontRef font,
+ int start,
+ int end,
+ CPDF_Array* pWidthArray) {
+ int size = end - start + 1;
+ int* widths = FX_Alloc(int, size);
+ FX_GetCharWidth(font, start, end, widths);
+ int i;
+ for (i = 1; i < size; i++)
+ if (widths[i] != *widths) {
+ break;
+ }
+ if (i == size) {
+ int first = pWidthArray->GetInteger(pWidthArray->GetCount() - 1);
+ pWidthArray->AddInteger(first + size - 1);
+ pWidthArray->AddInteger(*widths);
+ } else {
+ CPDF_Array* pWidthArray1 = new CPDF_Array;
+ pWidthArray->Add(pWidthArray1);
+ for (i = 0; i < size; i++) {
+ pWidthArray1->AddInteger(widths[i]);
}
+ }
+ FX_Free(widths);
}
-static void _InsertWidthArray(CTFontRef font, int start, int end, CPDF_Array* pWidthArray)
-{
- int size = end - start + 1;
- int* widths = FX_Alloc(int, size);
- FX_GetCharWidth(font, start, end, widths);
- int i;
- for (i = 1; i < size; i ++)
- if (widths[i] != *widths) {
- break;
- }
- if (i == size) {
- int first = pWidthArray->GetInteger(pWidthArray->GetCount() - 1);
- pWidthArray->AddInteger(first + size - 1);
- pWidthArray->AddInteger(*widths);
+CPDF_Font* CPDF_Document::AddMacFont(CTFontRef pFont,
+ FX_BOOL bVert,
+ FX_BOOL bTranslateName) {
+ CTFontRef font = (CTFontRef)pFont;
+ CTFontDescriptorRef descriptor = CTFontCopyFontDescriptor(font);
+ if (descriptor == NULL) {
+ return NULL;
+ }
+ CFX_ByteString basefont;
+ FX_BOOL bCJK = FALSE;
+ int flags = 0, italicangle = 0, ascend = 0, descend = 0, capheight = 0,
+ bbox[4];
+ FXSYS_memset(bbox, 0, sizeof(int) * 4);
+ CFArrayRef languages = (CFArrayRef)CTFontDescriptorCopyAttribute(
+ descriptor, kCTFontLanguagesAttribute);
+ if (languages == NULL) {
+ CFRelease(descriptor);
+ return NULL;
+ }
+ CFX_DWordArray charSets;
+ charSets.Add(FXFONT_CHINESEBIG5_CHARSET);
+ charSets.Add(FXFONT_GB2312_CHARSET);
+ charSets.Add(FXFONT_HANGEUL_CHARSET);
+ charSets.Add(FXFONT_SHIFTJIS_CHARSET);
+ if (IsHasCharSet(languages, charSets)) {
+ bCJK = TRUE;
+ }
+ CFRelease(descriptor);
+ CFDictionaryRef traits = (CFDictionaryRef)CTFontCopyTraits(font);
+ if (traits == NULL) {
+ CFRelease(languages);
+ return NULL;
+ }
+ CFNumberRef sybolicTrait =
+ (CFNumberRef)CFDictionaryGetValue(traits, kCTFontSymbolicTrait);
+ CTFontSymbolicTraits trait = 0;
+ CFNumberGetValue(sybolicTrait, kCFNumberSInt32Type, &trait);
+ if (trait & kCTFontItalicTrait) {
+ flags |= PDFFONT_ITALIC;
+ }
+ if (trait & kCTFontMonoSpaceTrait) {
+ flags |= PDFFONT_FIXEDPITCH;
+ }
+ if (trait & kCTFontModernSerifsClass) {
+ flags |= PDFFONT_SERIF;
+ }
+ if (trait & kCTFontScriptsClass) {
+ flags |= PDFFONT_SCRIPT;
+ }
+ CFNumberRef weightTrait =
+ (CFNumberRef)CFDictionaryGetValue(traits, kCTFontWeightTrait);
+ Float32 weight = 0;
+ CFNumberGetValue(weightTrait, kCFNumberFloat32Type, &weight);
+ italicangle = CTFontGetSlantAngle(font);
+ ascend = CTFontGetAscent(font);
+ descend = CTFontGetDescent(font);
+ capheight = CTFontGetCapHeight(font);
+ CGRect box = CTFontGetBoundingBox(font);
+ bbox[0] = box.origin.x;
+ bbox[1] = box.origin.y;
+ bbox[2] = box.origin.x + box.size.width;
+ bbox[3] = box.origin.y + box.size.height;
+ if (bTranslateName && bCJK) {
+ CFStringRef postName = CTFontCopyPostScriptName(font);
+ _CFString2CFXByteString(postName, basefont);
+ CFRelease(postName);
+ }
+ if (basefont.IsEmpty()) {
+ CFStringRef fullName = CTFontCopyFullName(font);
+ _CFString2CFXByteString(fullName, basefont);
+ CFRelease(fullName);
+ }
+ basefont.Replace(" ", "");
+ CPDF_Dictionary* pBaseDict = new CPDF_Dictionary;
+ CPDF_Dictionary* pFontDict = pBaseDict;
+ if (!bCJK) {
+ charSets.RemoveAll();
+ charSets.Add(FXFONT_ANSI_CHARSET);
+ charSets.Add(FXFONT_DEFAULT_CHARSET);
+ charSets.Add(FXFONT_SYMBOL_CHARSET);
+ if (IsHasCharSet(languages, charSets)) {
+ charSets.RemoveAll();
+ charSets.Add(FXFONT_SYMBOL_CHARSET);
+ if (IsHasCharSet(languages, charSets)) {
+ flags |= PDFFONT_SYMBOLIC;
+ } else {
+ flags |= PDFFONT_NONSYMBOLIC;
+ }
+ pBaseDict->SetAtName(FX_BSTRC("Encoding"), "WinAnsiEncoding");
} else {
- CPDF_Array* pWidthArray1 = new CPDF_Array;
- pWidthArray->Add(pWidthArray1);
- for (i = 0; i < size; i ++) {
- pWidthArray1->AddInteger(widths[i]);
+ flags |= PDFFONT_NONSYMBOLIC;
+ size_t i;
+ for (i = 0; i < sizeof g_FX_CharsetUnicodes / sizeof(FX_CharsetUnicodes);
+ i++) {
+ charSets.RemoveAll();
+ charSets.Add(g_FX_CharsetUnicodes[i].m_Charset);
+ if (IsHasCharSet(languages, charSets)) {
+ break;
}
+ }
+ if (i < sizeof g_FX_CharsetUnicodes / sizeof(FX_CharsetUnicodes)) {
+ CPDF_Dictionary* pEncoding = new CPDF_Dictionary;
+ pEncoding->SetAtName(FX_BSTRC("BaseEncoding"), "WinAnsiEncoding");
+ CPDF_Array* pArray = new CPDF_Array;
+ pArray->AddInteger(128);
+ const FX_WCHAR* pUnicodes = g_FX_CharsetUnicodes[i].m_pUnicodes;
+ for (int j = 0; j < 128; j++) {
+ CFX_ByteString name = PDF_AdobeNameFromUnicode(pUnicodes[j]);
+ if (name.IsEmpty()) {
+ pArray->AddName(FX_BSTRC(".notdef"));
+ } else {
+ pArray->AddName(name);
+ }
+ }
+ pEncoding->SetAt(FX_BSTRC("Differences"), pArray);
+ AddIndirectObject(pEncoding);
+ pBaseDict->SetAtReference(FX_BSTRC("Encoding"), this, pEncoding);
+ }
}
- FX_Free(widths);
-}
-CPDF_Font* CPDF_Document::AddMacFont(CTFontRef pFont, FX_BOOL bVert, FX_BOOL bTranslateName)
-{
- CTFontRef font = (CTFontRef)pFont;
- CTFontDescriptorRef descriptor = CTFontCopyFontDescriptor(font);
- if (descriptor == NULL) {
- return NULL;
+ if (weight > 0.0 && trait & kCTFontItalicTrait) {
+ basefont += ",BoldItalic";
+ } else if (weight > 0.0) {
+ basefont += ",Bold";
+ } else if (trait & kCTFontItalicTrait) {
+ basefont += ",Italic";
}
- CFX_ByteString basefont;
- FX_BOOL bCJK = FALSE;
- int flags = 0, italicangle = 0, ascend = 0, descend = 0, capheight = 0, bbox[4];
- FXSYS_memset(bbox, 0, sizeof(int) * 4);
- CFArrayRef languages = (CFArrayRef)CTFontDescriptorCopyAttribute(descriptor, kCTFontLanguagesAttribute);
- if (languages == NULL) {
- CFRelease(descriptor);
- return NULL;
+ pBaseDict->SetAtName("Subtype", "TrueType");
+ pBaseDict->SetAtName("BaseFont", basefont);
+ pBaseDict->SetAtNumber("FirstChar", 32);
+ pBaseDict->SetAtNumber("LastChar", 255);
+ int char_widths[224];
+ FX_GetCharWidth(font, 32, 255, char_widths);
+ CPDF_Array* pWidths = new CPDF_Array;
+ for (int i = 0; i < 224; i++) {
+ pWidths->AddInteger(char_widths[i]);
}
- CFX_DWordArray charSets;
+ pBaseDict->SetAt("Widths", pWidths);
+ } else {
+ flags |= PDFFONT_NONSYMBOLIC;
+ CPDF_Array* pArray = NULL;
+ pFontDict = new CPDF_Dictionary;
+ CFX_ByteString cmap;
+ CFX_ByteString ordering;
+ int supplement;
+ FX_BOOL bFound = FALSE;
+ CPDF_Array* pWidthArray = new CPDF_Array;
+ charSets.RemoveAll();
charSets.Add(FXFONT_CHINESEBIG5_CHARSET);
- charSets.Add(FXFONT_GB2312_CHARSET);
- charSets.Add(FXFONT_HANGEUL_CHARSET);
- charSets.Add(FXFONT_SHIFTJIS_CHARSET);
if (IsHasCharSet(languages, charSets)) {
- bCJK = TRUE;
- }
- CFRelease(descriptor);
- CFDictionaryRef traits = (CFDictionaryRef)CTFontCopyTraits(font);
- if (traits == NULL) {
- CFRelease(languages);
- return NULL;
- }
- CFNumberRef sybolicTrait = (CFNumberRef)CFDictionaryGetValue(traits, kCTFontSymbolicTrait);
- CTFontSymbolicTraits trait = 0;
- CFNumberGetValue(sybolicTrait, kCFNumberSInt32Type, &trait);
- if (trait & kCTFontItalicTrait) {
- flags |= PDFFONT_ITALIC;
- }
- if (trait & kCTFontMonoSpaceTrait) {
- flags |= PDFFONT_FIXEDPITCH;
- }
- if (trait & kCTFontModernSerifsClass) {
- flags |= PDFFONT_SERIF;
+ cmap = bVert ? "ETenms-B5-V" : "ETenms-B5-H";
+ ordering = "CNS1";
+ supplement = 4;
+ pWidthArray->AddInteger(1);
+ _InsertWidthArray(font, 0x20, 0x7e, pWidthArray);
+ bFound = TRUE;
}
- if (trait & kCTFontScriptsClass) {
- flags |= PDFFONT_SCRIPT;
- }
- CFNumberRef weightTrait = (CFNumberRef)CFDictionaryGetValue(traits, kCTFontWeightTrait);
- Float32 weight = 0;
- CFNumberGetValue(weightTrait, kCFNumberFloat32Type, &weight);
- italicangle = CTFontGetSlantAngle(font);
- ascend = CTFontGetAscent(font);
- descend = CTFontGetDescent(font);
- capheight = CTFontGetCapHeight(font);
- CGRect box = CTFontGetBoundingBox(font);
- bbox[0] = box.origin.x;
- bbox[1] = box.origin.y;
- bbox[2] = box.origin.x + box.size.width;
- bbox[3] = box.origin.y + box.size.height;
- if (bTranslateName && bCJK) {
- CFStringRef postName = CTFontCopyPostScriptName(font);
- _CFString2CFXByteString(postName, basefont);
- CFRelease(postName);
- }
- if (basefont.IsEmpty()) {
- CFStringRef fullName = CTFontCopyFullName(font);
- _CFString2CFXByteString(fullName, basefont);
- CFRelease(fullName);
+ charSets.RemoveAll();
+ charSets.Add(FXFONT_GB2312_CHARSET);
+ if (!bFound && IsHasCharSet(languages, charSets)) {
+ cmap = bVert ? "GBK-EUC-V" : "GBK-EUC-H";
+ ordering = "GB1", supplement = 2;
+ pWidthArray->AddInteger(7716);
+ _InsertWidthArray(font, 0x20, 0x20, pWidthArray);
+ pWidthArray->AddInteger(814);
+ _InsertWidthArray(font, 0x21, 0x7e, pWidthArray);
+ bFound = TRUE;
}
- basefont.Replace(" ", "");
- CPDF_Dictionary* pBaseDict = new CPDF_Dictionary;
- CPDF_Dictionary* pFontDict = pBaseDict;
- if (!bCJK) {
- charSets.RemoveAll();
- charSets.Add(FXFONT_ANSI_CHARSET);
- charSets.Add(FXFONT_DEFAULT_CHARSET);
- charSets.Add(FXFONT_SYMBOL_CHARSET);
- if (IsHasCharSet(languages, charSets)) {
- charSets.RemoveAll();
- charSets.Add(FXFONT_SYMBOL_CHARSET);
- if (IsHasCharSet(languages, charSets)) {
- flags |= PDFFONT_SYMBOLIC;
- } else {
- flags |= PDFFONT_NONSYMBOLIC;
- }
- pBaseDict->SetAtName(FX_BSTRC("Encoding"), "WinAnsiEncoding");
- } else {
- flags |= PDFFONT_NONSYMBOLIC;
- size_t i;
- for (i = 0; i < sizeof g_FX_CharsetUnicodes / sizeof(FX_CharsetUnicodes); i ++) {
- charSets.RemoveAll();
- charSets.Add(g_FX_CharsetUnicodes[i].m_Charset);
- if (IsHasCharSet(languages, charSets)) {
- break;
- }
- }
- if (i < sizeof g_FX_CharsetUnicodes / sizeof(FX_CharsetUnicodes)) {
- CPDF_Dictionary* pEncoding = new CPDF_Dictionary;
- pEncoding->SetAtName(FX_BSTRC("BaseEncoding"), "WinAnsiEncoding");
- CPDF_Array* pArray = new CPDF_Array;
- pArray->AddInteger(128);
- const FX_WCHAR* pUnicodes = g_FX_CharsetUnicodes[i].m_pUnicodes;
- for (int j = 0; j < 128; j ++) {
- CFX_ByteString name = PDF_AdobeNameFromUnicode(pUnicodes[j]);
- if (name.IsEmpty()) {
- pArray->AddName(FX_BSTRC(".notdef"));
- } else {
- pArray->AddName(name);
- }
- }
- pEncoding->SetAt(FX_BSTRC("Differences"), pArray);
- AddIndirectObject(pEncoding);
- pBaseDict->SetAtReference(FX_BSTRC("Encoding"), this, pEncoding);
- }
- }
- if (weight > 0.0 && trait & kCTFontItalicTrait) {
- basefont += ",BoldItalic";
- } else if (weight > 0.0) {
- basefont += ",Bold";
- } else if (trait & kCTFontItalicTrait) {
- basefont += ",Italic";
- }
- pBaseDict->SetAtName("Subtype", "TrueType");
- pBaseDict->SetAtName("BaseFont", basefont);
- pBaseDict->SetAtNumber("FirstChar", 32);
- pBaseDict->SetAtNumber("LastChar", 255);
- int char_widths[224];
- FX_GetCharWidth(font, 32, 255, char_widths);
- CPDF_Array* pWidths = new CPDF_Array;
- for (int i = 0; i < 224; i ++) {
- pWidths->AddInteger(char_widths[i]);
- }
- pBaseDict->SetAt("Widths", pWidths);
- } else {
- flags |= PDFFONT_NONSYMBOLIC;
- CPDF_Array* pArray = NULL;
- pFontDict = new CPDF_Dictionary;
- CFX_ByteString cmap;
- CFX_ByteString ordering;
- int supplement;
- FX_BOOL bFound = FALSE;
- CPDF_Array* pWidthArray = new CPDF_Array;
- charSets.RemoveAll();
- charSets.Add(FXFONT_CHINESEBIG5_CHARSET);
- if (IsHasCharSet(languages, charSets)) {
- cmap = bVert ? "ETenms-B5-V" : "ETenms-B5-H";
- ordering = "CNS1";
- supplement = 4;
- pWidthArray->AddInteger(1);
- _InsertWidthArray(font, 0x20, 0x7e, pWidthArray);
- bFound = TRUE;
- }
- charSets.RemoveAll();
- charSets.Add(FXFONT_GB2312_CHARSET);
- if (!bFound && IsHasCharSet(languages, charSets)) {
- cmap = bVert ? "GBK-EUC-V" : "GBK-EUC-H";
- ordering = "GB1", supplement = 2;
- pWidthArray->AddInteger(7716);
- _InsertWidthArray(font, 0x20, 0x20, pWidthArray);
- pWidthArray->AddInteger(814);
- _InsertWidthArray(font, 0x21, 0x7e, pWidthArray);
- bFound = TRUE;
- }
- charSets.RemoveAll();
- charSets.Add(FXFONT_HANGEUL_CHARSET);
- if (!bFound && IsHasCharSet(languages, charSets)) {
- cmap = bVert ? "KSCms-UHC-V" : "KSCms-UHC-H";
- ordering = "Korea1";
- supplement = 2;
- pWidthArray->AddInteger(1);
- _InsertWidthArray(font, 0x20, 0x7e, pWidthArray);
- bFound = TRUE;
- }
- charSets.RemoveAll();
- charSets.Add(FXFONT_SHIFTJIS_CHARSET);
- if (!bFound && IsHasCharSet(languages, charSets)) {
- cmap = bVert ? "90ms-RKSJ-V" : "90ms-RKSJ-H";
- ordering = "Japan1";
- supplement = 5;
- pWidthArray->AddInteger(231);
- _InsertWidthArray(font, 0x20, 0x7d, pWidthArray);
- pWidthArray->AddInteger(326);
- _InsertWidthArray(font, 0xa0, 0xa0, pWidthArray);
- pWidthArray->AddInteger(327);
- _InsertWidthArray(font, 0xa1, 0xdf, pWidthArray);
- pWidthArray->AddInteger(631);
- _InsertWidthArray(font, 0x7e, 0x7e, pWidthArray);
- }
- pBaseDict->SetAtName("Subtype", "Type0");
- pBaseDict->SetAtName("BaseFont", basefont);
- pBaseDict->SetAtName("Encoding", cmap);
- pFontDict->SetAt("W", pWidthArray);
- pFontDict->SetAtName("Type", "Font");
- pFontDict->SetAtName("Subtype", "CIDFontType2");
- pFontDict->SetAtName("BaseFont", basefont);
- CPDF_Dictionary* pCIDSysInfo = new CPDF_Dictionary;
- pCIDSysInfo->SetAtString("Registry", "Adobe");
- pCIDSysInfo->SetAtString("Ordering", ordering);
- pCIDSysInfo->SetAtInteger("Supplement", supplement);
- pFontDict->SetAt("CIDSystemInfo", pCIDSysInfo);
- pArray = new CPDF_Array;
- pBaseDict->SetAt("DescendantFonts", pArray);
- AddIndirectObject(pFontDict);
- pArray->AddReference(this, pFontDict);
+ charSets.RemoveAll();
+ charSets.Add(FXFONT_HANGEUL_CHARSET);
+ if (!bFound && IsHasCharSet(languages, charSets)) {
+ cmap = bVert ? "KSCms-UHC-V" : "KSCms-UHC-H";
+ ordering = "Korea1";
+ supplement = 2;
+ pWidthArray->AddInteger(1);
+ _InsertWidthArray(font, 0x20, 0x7e, pWidthArray);
+ bFound = TRUE;
}
- AddIndirectObject(pBaseDict);
- CPDF_Dictionary* pFontDesc = new CPDF_Dictionary;
- pFontDesc->SetAtName("Type", "FontDescriptor");
- pFontDesc->SetAtName("FontName", basefont);
- pFontDesc->SetAtInteger("Flags", flags);
- CPDF_Array* pBBox = new CPDF_Array;
- for (int i = 0; i < 4; i ++) {
- pBBox->AddInteger(bbox[i]);
+ charSets.RemoveAll();
+ charSets.Add(FXFONT_SHIFTJIS_CHARSET);
+ if (!bFound && IsHasCharSet(languages, charSets)) {
+ cmap = bVert ? "90ms-RKSJ-V" : "90ms-RKSJ-H";
+ ordering = "Japan1";
+ supplement = 5;
+ pWidthArray->AddInteger(231);
+ _InsertWidthArray(font, 0x20, 0x7d, pWidthArray);
+ pWidthArray->AddInteger(326);
+ _InsertWidthArray(font, 0xa0, 0xa0, pWidthArray);
+ pWidthArray->AddInteger(327);
+ _InsertWidthArray(font, 0xa1, 0xdf, pWidthArray);
+ pWidthArray->AddInteger(631);
+ _InsertWidthArray(font, 0x7e, 0x7e, pWidthArray);
}
- pFontDesc->SetAt("FontBBox", pBBox);
- pFontDesc->SetAtInteger("ItalicAngle", italicangle);
- pFontDesc->SetAtInteger("Ascent", ascend);
- pFontDesc->SetAtInteger("Descent", descend);
- pFontDesc->SetAtInteger("CapHeight", capheight);
- CGFloat fStemV = 0;
- int16_t min_width = SHRT_MAX;
- static const UniChar stem_chars[] = {'i', 'I', '!', '1'};
- const size_t count = sizeof(stem_chars) / sizeof(stem_chars[0]);
- CGGlyph glyphs[count];
- CGRect boundingRects[count];
- if (CTFontGetGlyphsForCharacters(font, stem_chars, glyphs, count)) {
- CTFontGetBoundingRectsForGlyphs(font, kCTFontHorizontalOrientation,
- glyphs, boundingRects, count);
- for (size_t i = 0; i < count; i++) {
- int16_t width = boundingRects[i].size.width;
- if (width > 0 && width < min_width) {
- min_width = width;
- fStemV = min_width;
- }
- }
+ pBaseDict->SetAtName("Subtype", "Type0");
+ pBaseDict->SetAtName("BaseFont", basefont);
+ pBaseDict->SetAtName("Encoding", cmap);
+ pFontDict->SetAt("W", pWidthArray);
+ pFontDict->SetAtName("Type", "Font");
+ pFontDict->SetAtName("Subtype", "CIDFontType2");
+ pFontDict->SetAtName("BaseFont", basefont);
+ CPDF_Dictionary* pCIDSysInfo = new CPDF_Dictionary;
+ pCIDSysInfo->SetAtString("Registry", "Adobe");
+ pCIDSysInfo->SetAtString("Ordering", ordering);
+ pCIDSysInfo->SetAtInteger("Supplement", supplement);
+ pFontDict->SetAt("CIDSystemInfo", pCIDSysInfo);
+ pArray = new CPDF_Array;
+ pBaseDict->SetAt("DescendantFonts", pArray);
+ AddIndirectObject(pFontDict);
+ pArray->AddReference(this, pFontDict);
+ }
+ AddIndirectObject(pBaseDict);
+ CPDF_Dictionary* pFontDesc = new CPDF_Dictionary;
+ pFontDesc->SetAtName("Type", "FontDescriptor");
+ pFontDesc->SetAtName("FontName", basefont);
+ pFontDesc->SetAtInteger("Flags", flags);
+ CPDF_Array* pBBox = new CPDF_Array;
+ for (int i = 0; i < 4; i++) {
+ pBBox->AddInteger(bbox[i]);
+ }
+ pFontDesc->SetAt("FontBBox", pBBox);
+ pFontDesc->SetAtInteger("ItalicAngle", italicangle);
+ pFontDesc->SetAtInteger("Ascent", ascend);
+ pFontDesc->SetAtInteger("Descent", descend);
+ pFontDesc->SetAtInteger("CapHeight", capheight);
+ CGFloat fStemV = 0;
+ int16_t min_width = SHRT_MAX;
+ static const UniChar stem_chars[] = {'i', 'I', '!', '1'};
+ const size_t count = sizeof(stem_chars) / sizeof(stem_chars[0]);
+ CGGlyph glyphs[count];
+ CGRect boundingRects[count];
+ if (CTFontGetGlyphsForCharacters(font, stem_chars, glyphs, count)) {
+ CTFontGetBoundingRectsForGlyphs(font, kCTFontHorizontalOrientation, glyphs,
+ boundingRects, count);
+ for (size_t i = 0; i < count; i++) {
+ int16_t width = boundingRects[i].size.width;
+ if (width > 0 && width < min_width) {
+ min_width = width;
+ fStemV = min_width;
+ }
}
- pFontDesc->SetAtInteger("StemV", fStemV);
- AddIndirectObject(pFontDesc);
- pFontDict->SetAtReference("FontDescriptor", this, pFontDesc);
- CFRelease(traits);
- CFRelease(languages);
- return LoadFont(pBaseDict);
+ }
+ pFontDesc->SetAtInteger("StemV", fStemV);
+ AddIndirectObject(pFontDesc);
+ pFontDict->SetAtReference("FontDescriptor", this, pFontDesc);
+ CFRelease(traits);
+ CFRelease(languages);
+ return LoadFont(pBaseDict);
}
#endif
-static void _InsertWidthArray1(CFX_Font* pFont, IFX_FontEncoding* pEncoding, FX_WCHAR start, FX_WCHAR end, CPDF_Array* pWidthArray)
-{
- int size = end - start + 1;
- int* widths = FX_Alloc(int, size);
- int i;
- for (i = 0; i < size; i ++) {
- int glyph_index = pEncoding->GlyphFromCharCode(start + i);
- widths[i] = pFont->GetGlyphWidth(glyph_index);
+static void _InsertWidthArray1(CFX_Font* pFont,
+ IFX_FontEncoding* pEncoding,
+ FX_WCHAR start,
+ FX_WCHAR end,
+ CPDF_Array* pWidthArray) {
+ int size = end - start + 1;
+ int* widths = FX_Alloc(int, size);
+ int i;
+ for (i = 0; i < size; i++) {
+ int glyph_index = pEncoding->GlyphFromCharCode(start + i);
+ widths[i] = pFont->GetGlyphWidth(glyph_index);
+ }
+ for (i = 1; i < size; i++)
+ if (widths[i] != *widths) {
+ break;
}
- for (i = 1; i < size; i ++)
- if (widths[i] != *widths) {
- break;
- }
- if (i == size) {
- int first = pWidthArray->GetInteger(pWidthArray->GetCount() - 1);
- pWidthArray->AddInteger(first + size - 1);
- pWidthArray->AddInteger(*widths);
- } else {
- CPDF_Array* pWidthArray1 = new CPDF_Array;
- pWidthArray->Add(pWidthArray1);
- for (i = 0; i < size; i ++) {
- pWidthArray1->AddInteger(widths[i]);
- }
+ if (i == size) {
+ int first = pWidthArray->GetInteger(pWidthArray->GetCount() - 1);
+ pWidthArray->AddInteger(first + size - 1);
+ pWidthArray->AddInteger(*widths);
+ } else {
+ CPDF_Array* pWidthArray1 = new CPDF_Array;
+ pWidthArray->Add(pWidthArray1);
+ for (i = 0; i < size; i++) {
+ pWidthArray1->AddInteger(widths[i]);
}
- FX_Free(widths);
+ }
+ FX_Free(widths);
}
-CPDF_Font* CPDF_Document::AddFont(CFX_Font* pFont, int charset, FX_BOOL bVert)
-{
- if (pFont == NULL) {
- return NULL;
- }
- FX_BOOL bCJK = charset == FXFONT_CHINESEBIG5_CHARSET || charset == FXFONT_GB2312_CHARSET ||
- charset == FXFONT_HANGEUL_CHARSET || charset == FXFONT_SHIFTJIS_CHARSET;
- CFX_ByteString basefont = pFont->GetFamilyName();
- basefont.Replace(" ", "");
- int flags = 0;
- if (pFont->IsBold()) {
- flags |= PDFFONT_FORCEBOLD;
- }
- if (pFont->IsItalic()) {
- flags |= PDFFONT_ITALIC;
+CPDF_Font* CPDF_Document::AddFont(CFX_Font* pFont, int charset, FX_BOOL bVert) {
+ if (pFont == NULL) {
+ return NULL;
+ }
+ FX_BOOL bCJK = charset == FXFONT_CHINESEBIG5_CHARSET ||
+ charset == FXFONT_GB2312_CHARSET ||
+ charset == FXFONT_HANGEUL_CHARSET ||
+ charset == FXFONT_SHIFTJIS_CHARSET;
+ CFX_ByteString basefont = pFont->GetFamilyName();
+ basefont.Replace(" ", "");
+ int flags = 0;
+ if (pFont->IsBold()) {
+ flags |= PDFFONT_FORCEBOLD;
+ }
+ if (pFont->IsItalic()) {
+ flags |= PDFFONT_ITALIC;
+ }
+ if (pFont->IsFixedWidth()) {
+ flags |= PDFFONT_FIXEDPITCH;
+ }
+ CPDF_Dictionary* pBaseDict = new CPDF_Dictionary;
+ pBaseDict->SetAtName("Type", "Font");
+ IFX_FontEncoding* pEncoding = FXGE_CreateUnicodeEncoding(pFont);
+ CPDF_Dictionary* pFontDict = pBaseDict;
+ if (!bCJK) {
+ CPDF_Array* pWidths = new CPDF_Array;
+ int charcode;
+ for (charcode = 32; charcode < 128; charcode++) {
+ int glyph_index = pEncoding->GlyphFromCharCode(charcode);
+ int char_width = pFont->GetGlyphWidth(glyph_index);
+ pWidths->AddInteger(char_width);
}
- if (pFont->IsFixedWidth()) {
- flags |= PDFFONT_FIXEDPITCH;
- }
- CPDF_Dictionary* pBaseDict = new CPDF_Dictionary;
- pBaseDict->SetAtName("Type", "Font");
- IFX_FontEncoding* pEncoding = FXGE_CreateUnicodeEncoding(pFont);
- CPDF_Dictionary* pFontDict = pBaseDict;
- if (!bCJK) {
- CPDF_Array* pWidths = new CPDF_Array;
- int charcode;
- for (charcode = 32; charcode < 128; charcode ++) {
- int glyph_index = pEncoding->GlyphFromCharCode(charcode);
- int char_width = pFont->GetGlyphWidth(glyph_index);
- pWidths->AddInteger(char_width);
- }
- if (charset == FXFONT_ANSI_CHARSET || charset == FXFONT_DEFAULT_CHARSET ||
- charset == FXFONT_SYMBOL_CHARSET) {
- if (charset == FXFONT_SYMBOL_CHARSET) {
- flags |= PDFFONT_SYMBOLIC;
- } else {
- flags |= PDFFONT_NONSYMBOLIC;
- }
- pBaseDict->SetAtName(FX_BSTRC("Encoding"), "WinAnsiEncoding");
- for (charcode = 128; charcode <= 255; charcode ++) {
- int glyph_index = pEncoding->GlyphFromCharCode(charcode);
- int char_width = pFont->GetGlyphWidth(glyph_index);
- pWidths->AddInteger(char_width);
- }
- } else {
- flags |= PDFFONT_NONSYMBOLIC;
- size_t i;
- for (i = 0; i < sizeof g_FX_CharsetUnicodes / sizeof(FX_CharsetUnicodes); i ++)
- if (g_FX_CharsetUnicodes[i].m_Charset == charset) {
- break;
- }
- if (i < sizeof g_FX_CharsetUnicodes / sizeof(FX_CharsetUnicodes)) {
- CPDF_Dictionary* pEncodingDict = new CPDF_Dictionary;
- pEncodingDict->SetAtName(FX_BSTRC("BaseEncoding"), "WinAnsiEncoding");
- CPDF_Array* pArray = new CPDF_Array;
- pArray->AddInteger(128);
- const FX_WCHAR* pUnicodes = g_FX_CharsetUnicodes[i].m_pUnicodes;
- for (int j = 0; j < 128; j ++) {
- CFX_ByteString name = PDF_AdobeNameFromUnicode(pUnicodes[j]);
- if (name.IsEmpty()) {
- pArray->AddName(FX_BSTRC(".notdef"));
- } else {
- pArray->AddName(name);
- }
- int glyph_index = pEncoding->GlyphFromCharCode(pUnicodes[j]);
- int char_width = pFont->GetGlyphWidth(glyph_index);
- pWidths->AddInteger(char_width);
- }
- pEncodingDict->SetAt(FX_BSTRC("Differences"), pArray);
- AddIndirectObject(pEncodingDict);
- pBaseDict->SetAtReference(FX_BSTRC("Encoding"), this, pEncodingDict);
- }
- }
- if (pFont->IsBold() && pFont->IsItalic()) {
- basefont += ",BoldItalic";
- } else if (pFont->IsBold()) {
- basefont += ",Bold";
- } else if (pFont->IsItalic()) {
- basefont += ",Italic";
- }
- pBaseDict->SetAtName("Subtype", "TrueType");
- pBaseDict->SetAtName("BaseFont", basefont);
- pBaseDict->SetAtNumber("FirstChar", 32);
- pBaseDict->SetAtNumber("LastChar", 255);
- pBaseDict->SetAt("Widths", pWidths);
- } else {
+ if (charset == FXFONT_ANSI_CHARSET || charset == FXFONT_DEFAULT_CHARSET ||
+ charset == FXFONT_SYMBOL_CHARSET) {
+ if (charset == FXFONT_SYMBOL_CHARSET) {
+ flags |= PDFFONT_SYMBOLIC;
+ } else {
flags |= PDFFONT_NONSYMBOLIC;
- pFontDict = new CPDF_Dictionary;
- CFX_ByteString cmap;
- CFX_ByteString ordering;
- int supplement;
- CPDF_Array* pWidthArray = new CPDF_Array;
- switch (charset) {
- case FXFONT_CHINESEBIG5_CHARSET:
- cmap = bVert ? "ETenms-B5-V" : "ETenms-B5-H";
- ordering = "CNS1";
- supplement = 4;
- pWidthArray->AddInteger(1);
- _InsertWidthArray1(pFont, pEncoding, 0x20, 0x7e, pWidthArray);
- break;
- case FXFONT_GB2312_CHARSET:
- cmap = bVert ? "GBK-EUC-V" : "GBK-EUC-H";
- ordering = "GB1", supplement = 2;
- pWidthArray->AddInteger(7716);
- _InsertWidthArray1(pFont, pEncoding, 0x20, 0x20, pWidthArray);
- pWidthArray->AddInteger(814);
- _InsertWidthArray1(pFont, pEncoding, 0x21, 0x7e, pWidthArray);
- break;
- case FXFONT_HANGEUL_CHARSET:
- cmap = bVert ? "KSCms-UHC-V" : "KSCms-UHC-H";
- ordering = "Korea1";
- supplement = 2;
- pWidthArray->AddInteger(1);
- _InsertWidthArray1(pFont, pEncoding, 0x20, 0x7e, pWidthArray);
- break;
- case FXFONT_SHIFTJIS_CHARSET:
- cmap = bVert ? "90ms-RKSJ-V" : "90ms-RKSJ-H";
- ordering = "Japan1";
- supplement = 5;
- pWidthArray->AddInteger(231);
- _InsertWidthArray1(pFont, pEncoding, 0x20, 0x7d, pWidthArray);
- pWidthArray->AddInteger(326);
- _InsertWidthArray1(pFont, pEncoding, 0xa0, 0xa0, pWidthArray);
- pWidthArray->AddInteger(327);
- _InsertWidthArray1(pFont, pEncoding, 0xa1, 0xdf, pWidthArray);
- pWidthArray->AddInteger(631);
- _InsertWidthArray1(pFont, pEncoding, 0x7e, 0x7e, pWidthArray);
- break;
- }
- pBaseDict->SetAtName("Subtype", "Type0");
- pBaseDict->SetAtName("BaseFont", basefont);
- pBaseDict->SetAtName("Encoding", cmap);
- pFontDict->SetAt("W", pWidthArray);
- pFontDict->SetAtName("Type", "Font");
- pFontDict->SetAtName("Subtype", "CIDFontType2");
- pFontDict->SetAtName("BaseFont", basefont);
- CPDF_Dictionary* pCIDSysInfo = new CPDF_Dictionary;
- pCIDSysInfo->SetAtString("Registry", "Adobe");
- pCIDSysInfo->SetAtString("Ordering", ordering);
- pCIDSysInfo->SetAtInteger("Supplement", supplement);
- pFontDict->SetAt("CIDSystemInfo", pCIDSysInfo);
- CPDF_Array* pArray = new CPDF_Array;
- pBaseDict->SetAt("DescendantFonts", pArray);
- AddIndirectObject(pFontDict);
- pArray->AddReference(this, pFontDict);
- }
- AddIndirectObject(pBaseDict);
- CPDF_Dictionary* pFontDesc = new CPDF_Dictionary;
- pFontDesc->SetAtName("Type", "FontDescriptor");
- pFontDesc->SetAtName("FontName", basefont);
- pFontDesc->SetAtInteger("Flags", flags);
- pFontDesc->SetAtInteger("ItalicAngle", pFont->m_pSubstFont ? pFont->m_pSubstFont->m_ItalicAngle : 0);
- pFontDesc->SetAtInteger("Ascent", pFont->GetAscent());
- pFontDesc->SetAtInteger("Descent", pFont->GetDescent());
- FX_RECT bbox;
- pFont->GetBBox(bbox);
- CPDF_Array* pBBox = new CPDF_Array;
- pBBox->AddInteger(bbox.left);
- pBBox->AddInteger(bbox.bottom);
- pBBox->AddInteger(bbox.right);
- pBBox->AddInteger(bbox.top);
- pFontDesc->SetAt("FontBBox", pBBox);
- int32_t nStemV = 0;
- if (pFont->m_pSubstFont) {
- nStemV = pFont->m_pSubstFont->m_Weight / 5;
+ }
+ pBaseDict->SetAtName(FX_BSTRC("Encoding"), "WinAnsiEncoding");
+ for (charcode = 128; charcode <= 255; charcode++) {
+ int glyph_index = pEncoding->GlyphFromCharCode(charcode);
+ int char_width = pFont->GetGlyphWidth(glyph_index);
+ pWidths->AddInteger(char_width);
+ }
} else {
- static const FX_CHAR stem_chars[] = {'i', 'I', '!', '1'};
- const size_t count = sizeof(stem_chars) / sizeof(stem_chars[0]);
- FX_DWORD glyph = pEncoding->GlyphFromCharCode(stem_chars[0]);
- nStemV = pFont->GetGlyphWidth(glyph);
- for (size_t i = 1; i < count; i++) {
- glyph = pEncoding->GlyphFromCharCode(stem_chars[i]);
- int width = pFont->GetGlyphWidth(glyph);
- if (width > 0 && width < nStemV) {
- nStemV = width;
- }
+ flags |= PDFFONT_NONSYMBOLIC;
+ size_t i;
+ for (i = 0; i < sizeof g_FX_CharsetUnicodes / sizeof(FX_CharsetUnicodes);
+ i++)
+ if (g_FX_CharsetUnicodes[i].m_Charset == charset) {
+ break;
}
- }
- delete pEncoding;
- pFontDesc->SetAtInteger("StemV", nStemV);
- AddIndirectObject(pFontDesc);
- pFontDict->SetAtReference("FontDescriptor", this, pFontDesc);
- return LoadFont(pBaseDict);
-}
-static int InsertDeletePDFPage(CPDF_Document* pDoc, CPDF_Dictionary* pPages,
- int nPagesToGo, CPDF_Dictionary* pPage, FX_BOOL bInsert, CFX_PtrArray& stackList)
-{
- CPDF_Array* pKidList = pPages->GetArray("Kids");
- if (!pKidList) {
- return -1;
- }
- int nKids = pKidList->GetCount();
- for (int i = 0; i < nKids; i ++) {
- CPDF_Dictionary* pKid = pKidList->GetDict(i);
- if (pKid->GetString("Type") == FX_BSTRC("Page")) {
- if (nPagesToGo == 0) {
- if (bInsert) {
- pKidList->InsertAt(
- i, new CPDF_Reference(pDoc, pPage->GetObjNum()));
- pPage->SetAtReference("Parent", pDoc, pPages->GetObjNum());
- } else {
- pKidList->RemoveAt(i);
- }
- pPages->SetAtInteger("Count", pPages->GetInteger("Count") + (bInsert ? 1 : -1));
- return 1;
- }
- nPagesToGo --;
- } else {
- int nPages = pKid->GetInteger("Count");
- if (nPagesToGo < nPages) {
- int stackCount = stackList.GetSize();
- for (int j = 0; j < stackCount; ++j) {
- if (pKid == stackList[j]) {
- return -1;
- }
- }
- stackList.Add(pKid);
- if (InsertDeletePDFPage(pDoc, pKid, nPagesToGo, pPage, bInsert, stackList) < 0) {
- return -1;
- }
- stackList.RemoveAt(stackCount);
- pPages->SetAtInteger("Count", pPages->GetInteger("Count") + (bInsert ? 1 : -1));
- return 1;
- }
- nPagesToGo -= nPages;
+ if (i < sizeof g_FX_CharsetUnicodes / sizeof(FX_CharsetUnicodes)) {
+ CPDF_Dictionary* pEncodingDict = new CPDF_Dictionary;
+ pEncodingDict->SetAtName(FX_BSTRC("BaseEncoding"), "WinAnsiEncoding");
+ CPDF_Array* pArray = new CPDF_Array;
+ pArray->AddInteger(128);
+ const FX_WCHAR* pUnicodes = g_FX_CharsetUnicodes[i].m_pUnicodes;
+ for (int j = 0; j < 128; j++) {
+ CFX_ByteString name = PDF_AdobeNameFromUnicode(pUnicodes[j]);
+ if (name.IsEmpty()) {
+ pArray->AddName(FX_BSTRC(".notdef"));
+ } else {
+ pArray->AddName(name);
+ }
+ int glyph_index = pEncoding->GlyphFromCharCode(pUnicodes[j]);
+ int char_width = pFont->GetGlyphWidth(glyph_index);
+ pWidths->AddInteger(char_width);
}
+ pEncodingDict->SetAt(FX_BSTRC("Differences"), pArray);
+ AddIndirectObject(pEncodingDict);
+ pBaseDict->SetAtReference(FX_BSTRC("Encoding"), this, pEncodingDict);
+ }
}
- return 0;
-}
-static int InsertNewPage(CPDF_Document* pDoc, int iPage, CPDF_Dictionary* pPageDict, CFX_DWordArray &pageList)
-{
- CPDF_Dictionary* pRoot = pDoc->GetRoot();
- if (!pRoot) {
- return -1;
+ if (pFont->IsBold() && pFont->IsItalic()) {
+ basefont += ",BoldItalic";
+ } else if (pFont->IsBold()) {
+ basefont += ",Bold";
+ } else if (pFont->IsItalic()) {
+ basefont += ",Italic";
}
- CPDF_Dictionary* pPages = pRoot->GetDict(FX_BSTRC("Pages"));
- if (!pPages) {
- return -1;
+ pBaseDict->SetAtName("Subtype", "TrueType");
+ pBaseDict->SetAtName("BaseFont", basefont);
+ pBaseDict->SetAtNumber("FirstChar", 32);
+ pBaseDict->SetAtNumber("LastChar", 255);
+ pBaseDict->SetAt("Widths", pWidths);
+ } else {
+ flags |= PDFFONT_NONSYMBOLIC;
+ pFontDict = new CPDF_Dictionary;
+ CFX_ByteString cmap;
+ CFX_ByteString ordering;
+ int supplement;
+ CPDF_Array* pWidthArray = new CPDF_Array;
+ switch (charset) {
+ case FXFONT_CHINESEBIG5_CHARSET:
+ cmap = bVert ? "ETenms-B5-V" : "ETenms-B5-H";
+ ordering = "CNS1";
+ supplement = 4;
+ pWidthArray->AddInteger(1);
+ _InsertWidthArray1(pFont, pEncoding, 0x20, 0x7e, pWidthArray);
+ break;
+ case FXFONT_GB2312_CHARSET:
+ cmap = bVert ? "GBK-EUC-V" : "GBK-EUC-H";
+ ordering = "GB1", supplement = 2;
+ pWidthArray->AddInteger(7716);
+ _InsertWidthArray1(pFont, pEncoding, 0x20, 0x20, pWidthArray);
+ pWidthArray->AddInteger(814);
+ _InsertWidthArray1(pFont, pEncoding, 0x21, 0x7e, pWidthArray);
+ break;
+ case FXFONT_HANGEUL_CHARSET:
+ cmap = bVert ? "KSCms-UHC-V" : "KSCms-UHC-H";
+ ordering = "Korea1";
+ supplement = 2;
+ pWidthArray->AddInteger(1);
+ _InsertWidthArray1(pFont, pEncoding, 0x20, 0x7e, pWidthArray);
+ break;
+ case FXFONT_SHIFTJIS_CHARSET:
+ cmap = bVert ? "90ms-RKSJ-V" : "90ms-RKSJ-H";
+ ordering = "Japan1";
+ supplement = 5;
+ pWidthArray->AddInteger(231);
+ _InsertWidthArray1(pFont, pEncoding, 0x20, 0x7d, pWidthArray);
+ pWidthArray->AddInteger(326);
+ _InsertWidthArray1(pFont, pEncoding, 0xa0, 0xa0, pWidthArray);
+ pWidthArray->AddInteger(327);
+ _InsertWidthArray1(pFont, pEncoding, 0xa1, 0xdf, pWidthArray);
+ pWidthArray->AddInteger(631);
+ _InsertWidthArray1(pFont, pEncoding, 0x7e, 0x7e, pWidthArray);
+ break;
}
- int nPages = pDoc->GetPageCount();
- if (iPage < 0 || iPage > nPages) {
- return -1;
+ pBaseDict->SetAtName("Subtype", "Type0");
+ pBaseDict->SetAtName("BaseFont", basefont);
+ pBaseDict->SetAtName("Encoding", cmap);
+ pFontDict->SetAt("W", pWidthArray);
+ pFontDict->SetAtName("Type", "Font");
+ pFontDict->SetAtName("Subtype", "CIDFontType2");
+ pFontDict->SetAtName("BaseFont", basefont);
+ CPDF_Dictionary* pCIDSysInfo = new CPDF_Dictionary;
+ pCIDSysInfo->SetAtString("Registry", "Adobe");
+ pCIDSysInfo->SetAtString("Ordering", ordering);
+ pCIDSysInfo->SetAtInteger("Supplement", supplement);
+ pFontDict->SetAt("CIDSystemInfo", pCIDSysInfo);
+ CPDF_Array* pArray = new CPDF_Array;
+ pBaseDict->SetAt("DescendantFonts", pArray);
+ AddIndirectObject(pFontDict);
+ pArray->AddReference(this, pFontDict);
+ }
+ AddIndirectObject(pBaseDict);
+ CPDF_Dictionary* pFontDesc = new CPDF_Dictionary;
+ pFontDesc->SetAtName("Type", "FontDescriptor");
+ pFontDesc->SetAtName("FontName", basefont);
+ pFontDesc->SetAtInteger("Flags", flags);
+ pFontDesc->SetAtInteger(
+ "ItalicAngle",
+ pFont->m_pSubstFont ? pFont->m_pSubstFont->m_ItalicAngle : 0);
+ pFontDesc->SetAtInteger("Ascent", pFont->GetAscent());
+ pFontDesc->SetAtInteger("Descent", pFont->GetDescent());
+ FX_RECT bbox;
+ pFont->GetBBox(bbox);
+ CPDF_Array* pBBox = new CPDF_Array;
+ pBBox->AddInteger(bbox.left);
+ pBBox->AddInteger(bbox.bottom);
+ pBBox->AddInteger(bbox.right);
+ pBBox->AddInteger(bbox.top);
+ pFontDesc->SetAt("FontBBox", pBBox);
+ int32_t nStemV = 0;
+ if (pFont->m_pSubstFont) {
+ nStemV = pFont->m_pSubstFont->m_Weight / 5;
+ } else {
+ static const FX_CHAR stem_chars[] = {'i', 'I', '!', '1'};
+ const size_t count = sizeof(stem_chars) / sizeof(stem_chars[0]);
+ FX_DWORD glyph = pEncoding->GlyphFromCharCode(stem_chars[0]);
+ nStemV = pFont->GetGlyphWidth(glyph);
+ for (size_t i = 1; i < count; i++) {
+ glyph = pEncoding->GlyphFromCharCode(stem_chars[i]);
+ int width = pFont->GetGlyphWidth(glyph);
+ if (width > 0 && width < nStemV) {
+ nStemV = width;
+ }
}
- if (iPage == nPages) {
- CPDF_Array* pPagesList = pPages->GetArray(FX_BSTRC("Kids"));
- if (!pPagesList) {
- pPagesList = new CPDF_Array;
- pPages->SetAt(FX_BSTRC("Kids"), pPagesList);
+ }
+ delete pEncoding;
+ pFontDesc->SetAtInteger("StemV", nStemV);
+ AddIndirectObject(pFontDesc);
+ pFontDict->SetAtReference("FontDescriptor", this, pFontDesc);
+ return LoadFont(pBaseDict);
+}
+static int InsertDeletePDFPage(CPDF_Document* pDoc,
+ CPDF_Dictionary* pPages,
+ int nPagesToGo,
+ CPDF_Dictionary* pPage,
+ FX_BOOL bInsert,
+ CFX_PtrArray& stackList) {
+ CPDF_Array* pKidList = pPages->GetArray("Kids");
+ if (!pKidList) {
+ return -1;
+ }
+ int nKids = pKidList->GetCount();
+ for (int i = 0; i < nKids; i++) {
+ CPDF_Dictionary* pKid = pKidList->GetDict(i);
+ if (pKid->GetString("Type") == FX_BSTRC("Page")) {
+ if (nPagesToGo == 0) {
+ if (bInsert) {
+ pKidList->InsertAt(i, new CPDF_Reference(pDoc, pPage->GetObjNum()));
+ pPage->SetAtReference("Parent", pDoc, pPages->GetObjNum());
+ } else {
+ pKidList->RemoveAt(i);
}
- pPagesList->Add(pPageDict, pDoc);
- pPages->SetAtInteger(FX_BSTRC("Count"), nPages + 1);
- pPageDict->SetAtReference(FX_BSTRC("Parent"), pDoc, pPages->GetObjNum());
+ pPages->SetAtInteger("Count",
+ pPages->GetInteger("Count") + (bInsert ? 1 : -1));
+ return 1;
+ }
+ nPagesToGo--;
} else {
- CFX_PtrArray stack;
- stack.Add(pPages);
- if (InsertDeletePDFPage(pDoc, pPages, iPage, pPageDict, TRUE, stack) < 0) {
+ int nPages = pKid->GetInteger("Count");
+ if (nPagesToGo < nPages) {
+ int stackCount = stackList.GetSize();
+ for (int j = 0; j < stackCount; ++j) {
+ if (pKid == stackList[j]) {
return -1;
+ }
}
+ stackList.Add(pKid);
+ if (InsertDeletePDFPage(pDoc, pKid, nPagesToGo, pPage, bInsert,
+ stackList) < 0) {
+ return -1;
+ }
+ stackList.RemoveAt(stackCount);
+ pPages->SetAtInteger("Count",
+ pPages->GetInteger("Count") + (bInsert ? 1 : -1));
+ return 1;
+ }
+ nPagesToGo -= nPages;
}
- pageList.InsertAt(iPage, pPageDict->GetObjNum());
- return iPage;
-}
-CPDF_Dictionary* CPDF_Document::CreateNewPage(int iPage)
-{
- CPDF_Dictionary* pDict = new CPDF_Dictionary;
- pDict->SetAtName("Type", "Page");
- FX_DWORD dwObjNum = AddIndirectObject(pDict);
- if (InsertNewPage(this, iPage, pDict, m_PageList) < 0) {
- ReleaseIndirectObject(dwObjNum);
- return NULL;
- }
- return pDict;
-}
-int _PDF_GetStandardFontName(CFX_ByteString& name);
-CPDF_Font* CPDF_Document::AddStandardFont(const FX_CHAR* font, CPDF_FontEncoding* pEncoding)
-{
- CFX_ByteString name(font, -1);
- if (_PDF_GetStandardFontName(name) < 0) {
- return NULL;
- }
- return GetPageData()->GetStandardFont(name, pEncoding);
+ }
+ return 0;
}
-void CPDF_Document::DeletePage(int iPage)
-{
- CPDF_Dictionary* pRoot = GetRoot();
- if (pRoot == NULL) {
- return;
- }
- CPDF_Dictionary* pPages = pRoot->GetDict("Pages");
- if (pPages == NULL) {
- return;
- }
- int nPages = pPages->GetInteger("Count");
- if (iPage < 0 || iPage >= nPages) {
- return;
+static int InsertNewPage(CPDF_Document* pDoc,
+ int iPage,
+ CPDF_Dictionary* pPageDict,
+ CFX_DWordArray& pageList) {
+ CPDF_Dictionary* pRoot = pDoc->GetRoot();
+ if (!pRoot) {
+ return -1;
+ }
+ CPDF_Dictionary* pPages = pRoot->GetDict(FX_BSTRC("Pages"));
+ if (!pPages) {
+ return -1;
+ }
+ int nPages = pDoc->GetPageCount();
+ if (iPage < 0 || iPage > nPages) {
+ return -1;
+ }
+ if (iPage == nPages) {
+ CPDF_Array* pPagesList = pPages->GetArray(FX_BSTRC("Kids"));
+ if (!pPagesList) {
+ pPagesList = new CPDF_Array;
+ pPages->SetAt(FX_BSTRC("Kids"), pPagesList);
}
+ pPagesList->Add(pPageDict, pDoc);
+ pPages->SetAtInteger(FX_BSTRC("Count"), nPages + 1);
+ pPageDict->SetAtReference(FX_BSTRC("Parent"), pDoc, pPages->GetObjNum());
+ } else {
CFX_PtrArray stack;
stack.Add(pPages);
- if (InsertDeletePDFPage(this, pPages, iPage, NULL, FALSE, stack) < 0) {
- return;
+ if (InsertDeletePDFPage(pDoc, pPages, iPage, pPageDict, TRUE, stack) < 0) {
+ return -1;
}
- m_PageList.RemoveAt(iPage);
+ }
+ pageList.InsertAt(iPage, pPageDict->GetObjNum());
+ return iPage;
}
-CPDF_Object* FPDFAPI_GetPageAttr(CPDF_Dictionary* pPageDict, const CFX_ByteStringC& name);
-void FPDFAPI_FlatPageAttr(CPDF_Dictionary* pPageDict, const CFX_ByteStringC& name)
-{
- if (pPageDict->KeyExist(name)) {
- return;
- }
- CPDF_Object* pObj = FPDFAPI_GetPageAttr(pPageDict, name);
- if (pObj) {
- pPageDict->SetAt(name, pObj->Clone());
- }
+CPDF_Dictionary* CPDF_Document::CreateNewPage(int iPage) {
+ CPDF_Dictionary* pDict = new CPDF_Dictionary;
+ pDict->SetAtName("Type", "Page");
+ FX_DWORD dwObjNum = AddIndirectObject(pDict);
+ if (InsertNewPage(this, iPage, pDict, m_PageList) < 0) {
+ ReleaseIndirectObject(dwObjNum);
+ return NULL;
+ }
+ return pDict;
+}
+int _PDF_GetStandardFontName(CFX_ByteString& name);
+CPDF_Font* CPDF_Document::AddStandardFont(const FX_CHAR* font,
+ CPDF_FontEncoding* pEncoding) {
+ CFX_ByteString name(font, -1);
+ if (_PDF_GetStandardFontName(name) < 0) {
+ return NULL;
+ }
+ return GetPageData()->GetStandardFont(name, pEncoding);
+}
+void CPDF_Document::DeletePage(int iPage) {
+ CPDF_Dictionary* pRoot = GetRoot();
+ if (pRoot == NULL) {
+ return;
+ }
+ CPDF_Dictionary* pPages = pRoot->GetDict("Pages");
+ if (pPages == NULL) {
+ return;
+ }
+ int nPages = pPages->GetInteger("Count");
+ if (iPage < 0 || iPage >= nPages) {
+ return;
+ }
+ CFX_PtrArray stack;
+ stack.Add(pPages);
+ if (InsertDeletePDFPage(this, pPages, iPage, NULL, FALSE, stack) < 0) {
+ return;
+ }
+ m_PageList.RemoveAt(iPage);
+}
+CPDF_Object* FPDFAPI_GetPageAttr(CPDF_Dictionary* pPageDict,
+ const CFX_ByteStringC& name);
+void FPDFAPI_FlatPageAttr(CPDF_Dictionary* pPageDict,
+ const CFX_ByteStringC& name) {
+ if (pPageDict->KeyExist(name)) {
+ return;
+ }
+ CPDF_Object* pObj = FPDFAPI_GetPageAttr(pPageDict, name);
+ if (pObj) {
+ pPageDict->SetAt(name, pObj->Clone());
+ }
}
diff --git a/core/src/fpdfapi/fpdf_edit/fpdf_edit_image.cpp b/core/src/fpdfapi/fpdf_edit/fpdf_edit_image.cpp
index dad7326a5b..9ea94bdd00 100644
--- a/core/src/fpdfapi/fpdf_edit/fpdf_edit_image.cpp
+++ b/core/src/fpdfapi/fpdf_edit/fpdf_edit_image.cpp
@@ -10,360 +10,380 @@
#include "../../../include/fpdfapi/fpdf_render.h"
#include "../fpdf_page/pageint.h"
#include "../fpdf_render/render_int.h"
-CPDF_Dictionary* CPDF_Image::InitJPEG(uint8_t* pData, FX_DWORD size)
-{
- int32_t width;
- int32_t height;
- int32_t num_comps;
- int32_t bits;
- FX_BOOL color_trans;
- if (!CPDF_ModuleMgr::Get()->GetJpegModule()->
- LoadInfo(pData, size, width, height, num_comps, bits, color_trans)) {
- return NULL;
+CPDF_Dictionary* CPDF_Image::InitJPEG(uint8_t* pData, FX_DWORD size) {
+ int32_t width;
+ int32_t height;
+ int32_t num_comps;
+ int32_t bits;
+ FX_BOOL color_trans;
+ if (!CPDF_ModuleMgr::Get()->GetJpegModule()->LoadInfo(
+ pData, size, width, height, num_comps, bits, color_trans)) {
+ return NULL;
+ }
+ CPDF_Dictionary* pDict = new CPDF_Dictionary;
+ pDict->SetAtName("Type", "XObject");
+ pDict->SetAtName("Subtype", "Image");
+ pDict->SetAtInteger("Width", width);
+ pDict->SetAtInteger("Height", height);
+ const FX_CHAR* csname = NULL;
+ if (num_comps == 1) {
+ csname = "DeviceGray";
+ } else if (num_comps == 3) {
+ csname = "DeviceRGB";
+ } else if (num_comps == 4) {
+ csname = "DeviceCMYK";
+ CPDF_Array* pDecode = CPDF_Array::Create();
+ for (int n = 0; n < 4; n++) {
+ pDecode->AddInteger(1);
+ pDecode->AddInteger(0);
}
- CPDF_Dictionary* pDict = new CPDF_Dictionary;
- pDict->SetAtName("Type", "XObject");
- pDict->SetAtName("Subtype", "Image");
- pDict->SetAtInteger("Width", width);
- pDict->SetAtInteger("Height", height);
- const FX_CHAR* csname = NULL;
- if (num_comps == 1) {
- csname = "DeviceGray";
- } else if (num_comps == 3) {
- csname = "DeviceRGB";
- } else if (num_comps == 4) {
- csname = "DeviceCMYK";
- CPDF_Array* pDecode = CPDF_Array::Create();
- for (int n = 0; n < 4; n ++) {
- pDecode->AddInteger(1);
- pDecode->AddInteger(0);
- }
- pDict->SetAt(FX_BSTRC("Decode"), pDecode);
- }
- pDict->SetAtName("ColorSpace", csname);
- pDict->SetAtInteger("BitsPerComponent", bits);
- pDict->SetAtName("Filter", "DCTDecode");
- if (!color_trans) {
- CPDF_Dictionary* pParms = new CPDF_Dictionary;
- pDict->SetAt("DecodeParms", pParms);
- pParms->SetAtInteger("ColorTransform", 0);
- }
- m_bIsMask = FALSE;
- m_Width = width;
- m_Height = height;
- if (m_pStream == NULL) {
- m_pStream = new CPDF_Stream(NULL, 0, NULL);
- }
- return pDict;
+ pDict->SetAt(FX_BSTRC("Decode"), pDecode);
+ }
+ pDict->SetAtName("ColorSpace", csname);
+ pDict->SetAtInteger("BitsPerComponent", bits);
+ pDict->SetAtName("Filter", "DCTDecode");
+ if (!color_trans) {
+ CPDF_Dictionary* pParms = new CPDF_Dictionary;
+ pDict->SetAt("DecodeParms", pParms);
+ pParms->SetAtInteger("ColorTransform", 0);
+ }
+ m_bIsMask = FALSE;
+ m_Width = width;
+ m_Height = height;
+ if (m_pStream == NULL) {
+ m_pStream = new CPDF_Stream(NULL, 0, NULL);
+ }
+ return pDict;
}
-void CPDF_Image::SetJpegImage(uint8_t* pData, FX_DWORD size)
-{
- CPDF_Dictionary *pDict = InitJPEG(pData, size);
- if (!pDict) {
- return;
- }
- m_pStream->InitStream(pData, size, pDict);
+void CPDF_Image::SetJpegImage(uint8_t* pData, FX_DWORD size) {
+ CPDF_Dictionary* pDict = InitJPEG(pData, size);
+ if (!pDict) {
+ return;
+ }
+ m_pStream->InitStream(pData, size, pDict);
}
-void CPDF_Image::SetJpegImage(IFX_FileRead *pFile)
-{
- FX_DWORD size = (FX_DWORD)pFile->GetSize();
- if (!size) {
- return;
+void CPDF_Image::SetJpegImage(IFX_FileRead* pFile) {
+ FX_DWORD size = (FX_DWORD)pFile->GetSize();
+ if (!size) {
+ return;
+ }
+ FX_DWORD dwEstimateSize = size;
+ if (dwEstimateSize > 8192) {
+ dwEstimateSize = 8192;
+ }
+ uint8_t* pData = FX_Alloc(uint8_t, dwEstimateSize);
+ pFile->ReadBlock(pData, 0, dwEstimateSize);
+ CPDF_Dictionary* pDict = InitJPEG(pData, dwEstimateSize);
+ FX_Free(pData);
+ if (!pDict && size > dwEstimateSize) {
+ pData = FX_Alloc(uint8_t, size);
+ pFile->ReadBlock(pData, 0, size);
+ pDict = InitJPEG(pData, size);
+ FX_Free(pData);
+ }
+ if (!pDict) {
+ return;
+ }
+ m_pStream->InitStream(pFile, pDict);
+}
+void _DCTEncodeBitmap(CPDF_Dictionary* pBitmapDict,
+ const CFX_DIBitmap* pBitmap,
+ int quality,
+ uint8_t*& buf,
+ FX_STRSIZE& size) {}
+void _JBIG2EncodeBitmap(CPDF_Dictionary* pBitmapDict,
+ const CFX_DIBitmap* pBitmap,
+ CPDF_Document* pDoc,
+ uint8_t*& buf,
+ FX_STRSIZE& size,
+ FX_BOOL bLossLess) {}
+void CPDF_Image::SetImage(const CFX_DIBitmap* pBitmap,
+ int32_t iCompress,
+ IFX_FileWrite* pFileWrite,
+ IFX_FileRead* pFileRead,
+ const CFX_DIBitmap* pMask,
+ const CPDF_ImageSetParam* pParam) {
+ int32_t BitmapWidth = pBitmap->GetWidth();
+ int32_t BitmapHeight = pBitmap->GetHeight();
+ if (BitmapWidth < 1 || BitmapHeight < 1) {
+ return;
+ }
+ uint8_t* src_buf = pBitmap->GetBuffer();
+ int32_t src_pitch = pBitmap->GetPitch();
+ int32_t bpp = pBitmap->GetBPP();
+ FX_BOOL bUseMatte =
+ pParam && pParam->pMatteColor && (pBitmap->GetFormat() == FXDIB_Argb);
+ CPDF_Dictionary* pDict = new CPDF_Dictionary;
+ pDict->SetAtName(FX_BSTRC("Type"), FX_BSTRC("XObject"));
+ pDict->SetAtName(FX_BSTRC("Subtype"), FX_BSTRC("Image"));
+ pDict->SetAtInteger(FX_BSTRC("Width"), BitmapWidth);
+ pDict->SetAtInteger(FX_BSTRC("Height"), BitmapHeight);
+ uint8_t* dest_buf = NULL;
+ FX_STRSIZE dest_pitch = 0, dest_size = 0, opType = -1;
+ if (bpp == 1) {
+ int32_t reset_a = 0, reset_r = 0, reset_g = 0, reset_b = 0;
+ int32_t set_a = 0, set_r = 0, set_g = 0, set_b = 0;
+ if (!pBitmap->IsAlphaMask()) {
+ ArgbDecode(pBitmap->GetPaletteArgb(0), reset_a, reset_r, reset_g,
+ reset_b);
+ ArgbDecode(pBitmap->GetPaletteArgb(1), set_a, set_r, set_g, set_b);
}
- FX_DWORD dwEstimateSize = size;
- if (dwEstimateSize > 8192) {
- dwEstimateSize = 8192;
+ if (set_a == 0 || reset_a == 0) {
+ pDict->SetAt(FX_BSTRC("ImageMask"), new CPDF_Boolean(TRUE));
+ if (reset_a == 0) {
+ CPDF_Array* pArray = new CPDF_Array;
+ pArray->AddInteger(1);
+ pArray->AddInteger(0);
+ pDict->SetAt(FX_BSTRC("Decode"), pArray);
+ }
+ } else {
+ CPDF_Array* pCS = new CPDF_Array;
+ pCS->AddName(FX_BSTRC("Indexed"));
+ pCS->AddName(FX_BSTRC("DeviceRGB"));
+ pCS->AddInteger(1);
+ CFX_ByteString ct;
+ FX_CHAR* pBuf = ct.GetBuffer(6);
+ pBuf[0] = (FX_CHAR)reset_r;
+ pBuf[1] = (FX_CHAR)reset_g;
+ pBuf[2] = (FX_CHAR)reset_b;
+ pBuf[3] = (FX_CHAR)set_r;
+ pBuf[4] = (FX_CHAR)set_g;
+ pBuf[5] = (FX_CHAR)set_b;
+ ct.ReleaseBuffer(6);
+ pCS->Add(CPDF_String::Create(ct, TRUE));
+ pDict->SetAt(FX_BSTRC("ColorSpace"), pCS);
}
- uint8_t* pData = FX_Alloc(uint8_t, dwEstimateSize);
- pFile->ReadBlock(pData, 0, dwEstimateSize);
- CPDF_Dictionary *pDict = InitJPEG(pData, dwEstimateSize);
- FX_Free(pData);
- if (!pDict && size > dwEstimateSize) {
- pData = FX_Alloc(uint8_t, size);
- pFile->ReadBlock(pData, 0, size);
- pDict = InitJPEG(pData, size);
- FX_Free(pData);
+ pDict->SetAtInteger(FX_BSTRC("BitsPerComponent"), 1);
+ dest_pitch = (BitmapWidth + 7) / 8;
+ if ((iCompress & 0x03) == PDF_IMAGE_NO_COMPRESS) {
+ opType = 1;
+ } else {
+ opType = 0;
}
- if (!pDict) {
- return;
+ } else if (bpp == 8) {
+ int32_t iPalette = pBitmap->GetPaletteSize();
+ if (iPalette > 0) {
+ CPDF_Array* pCS = new CPDF_Array;
+ m_pDocument->AddIndirectObject(pCS);
+ pCS->AddName(FX_BSTRC("Indexed"));
+ pCS->AddName(FX_BSTRC("DeviceRGB"));
+ pCS->AddInteger(iPalette - 1);
+ uint8_t* pColorTable = FX_Alloc2D(uint8_t, iPalette, 3);
+ uint8_t* ptr = pColorTable;
+ for (int32_t i = 0; i < iPalette; i++) {
+ FX_DWORD argb = pBitmap->GetPaletteArgb(i);
+ ptr[0] = (uint8_t)(argb >> 16);
+ ptr[1] = (uint8_t)(argb >> 8);
+ ptr[2] = (uint8_t)argb;
+ ptr += 3;
+ }
+ CPDF_Stream* pCTS = CPDF_Stream::Create(pColorTable, iPalette * 3,
+ CPDF_Dictionary::Create());
+ m_pDocument->AddIndirectObject(pCTS);
+ pCS->AddReference(m_pDocument, pCTS);
+ pDict->SetAtReference(FX_BSTRC("ColorSpace"), m_pDocument, pCS);
+ } else {
+ pDict->SetAtName(FX_BSTRC("ColorSpace"), FX_BSTRC("DeviceGray"));
}
- m_pStream->InitStream(pFile, pDict);
-}
-void _DCTEncodeBitmap(CPDF_Dictionary *pBitmapDict, const CFX_DIBitmap* pBitmap, int quality, uint8_t* &buf, FX_STRSIZE &size)
-{
-}
-void _JBIG2EncodeBitmap(CPDF_Dictionary *pBitmapDict, const CFX_DIBitmap *pBitmap, CPDF_Document *pDoc, uint8_t* &buf, FX_STRSIZE &size, FX_BOOL bLossLess)
-{
-}
-void CPDF_Image::SetImage(const CFX_DIBitmap* pBitmap, int32_t iCompress, IFX_FileWrite *pFileWrite, IFX_FileRead *pFileRead, const CFX_DIBitmap* pMask, const CPDF_ImageSetParam* pParam)
-{
- int32_t BitmapWidth = pBitmap->GetWidth();
- int32_t BitmapHeight = pBitmap->GetHeight();
- if (BitmapWidth < 1 || BitmapHeight < 1) {
- return;
+ pDict->SetAtInteger(FX_BSTRC("BitsPerComponent"), 8);
+ if ((iCompress & 0x03) == PDF_IMAGE_NO_COMPRESS) {
+ dest_pitch = BitmapWidth;
+ opType = 1;
+ } else {
+ opType = 0;
}
- uint8_t* src_buf = pBitmap->GetBuffer();
- int32_t src_pitch = pBitmap->GetPitch();
- int32_t bpp = pBitmap->GetBPP();
- FX_BOOL bUseMatte = pParam && pParam->pMatteColor && (pBitmap->GetFormat() == FXDIB_Argb);
- CPDF_Dictionary* pDict = new CPDF_Dictionary;
- pDict->SetAtName(FX_BSTRC("Type"), FX_BSTRC("XObject"));
- pDict->SetAtName(FX_BSTRC("Subtype"), FX_BSTRC("Image"));
- pDict->SetAtInteger(FX_BSTRC("Width"), BitmapWidth);
- pDict->SetAtInteger(FX_BSTRC("Height"), BitmapHeight);
- uint8_t* dest_buf = NULL;
- FX_STRSIZE dest_pitch = 0, dest_size = 0, opType = -1;
- if (bpp == 1) {
- int32_t reset_a = 0, reset_r = 0, reset_g = 0, reset_b = 0;
- int32_t set_a = 0, set_r = 0, set_g = 0, set_b = 0;
- if (!pBitmap->IsAlphaMask()) {
- ArgbDecode(pBitmap->GetPaletteArgb(0), reset_a, reset_r, reset_g, reset_b);
- ArgbDecode(pBitmap->GetPaletteArgb(1), set_a, set_r, set_g, set_b);
- }
- if (set_a == 0 || reset_a == 0) {
- pDict->SetAt(FX_BSTRC("ImageMask"), new CPDF_Boolean(TRUE));
- if (reset_a == 0) {
- CPDF_Array* pArray = new CPDF_Array;
- pArray->AddInteger(1);
- pArray->AddInteger(0);
- pDict->SetAt(FX_BSTRC("Decode"), pArray);
- }
- } else {
- CPDF_Array* pCS = new CPDF_Array;
- pCS->AddName(FX_BSTRC("Indexed"));
- pCS->AddName(FX_BSTRC("DeviceRGB"));
- pCS->AddInteger(1);
- CFX_ByteString ct;
- FX_CHAR* pBuf = ct.GetBuffer(6);
- pBuf[0] = (FX_CHAR)reset_r;
- pBuf[1] = (FX_CHAR)reset_g;
- pBuf[2] = (FX_CHAR)reset_b;
- pBuf[3] = (FX_CHAR)set_r;
- pBuf[4] = (FX_CHAR)set_g;
- pBuf[5] = (FX_CHAR)set_b;
- ct.ReleaseBuffer(6);
- pCS->Add(CPDF_String::Create(ct, TRUE));
- pDict->SetAt(FX_BSTRC("ColorSpace"), pCS);
- }
- pDict->SetAtInteger(FX_BSTRC("BitsPerComponent"), 1);
- dest_pitch = (BitmapWidth + 7) / 8;
- if ((iCompress & 0x03) == PDF_IMAGE_NO_COMPRESS) {
- opType = 1;
- } else {
- opType = 0;
- }
- } else if (bpp == 8) {
- int32_t iPalette = pBitmap->GetPaletteSize();
- if (iPalette > 0) {
- CPDF_Array* pCS = new CPDF_Array;
- m_pDocument->AddIndirectObject(pCS);
- pCS->AddName(FX_BSTRC("Indexed"));
- pCS->AddName(FX_BSTRC("DeviceRGB"));
- pCS->AddInteger(iPalette - 1);
- uint8_t* pColorTable = FX_Alloc2D(uint8_t, iPalette, 3);
- uint8_t* ptr = pColorTable;
- for (int32_t i = 0; i < iPalette; i ++) {
- FX_DWORD argb = pBitmap->GetPaletteArgb(i);
- ptr[0] = (uint8_t)(argb >> 16);
- ptr[1] = (uint8_t)(argb >> 8);
- ptr[2] = (uint8_t)argb;
- ptr += 3;
- }
- CPDF_Stream *pCTS = CPDF_Stream::Create(pColorTable, iPalette * 3, CPDF_Dictionary::Create());
- m_pDocument->AddIndirectObject(pCTS);
- pCS->AddReference(m_pDocument, pCTS);
- pDict->SetAtReference(FX_BSTRC("ColorSpace"), m_pDocument, pCS);
- } else {
- pDict->SetAtName(FX_BSTRC("ColorSpace"), FX_BSTRC("DeviceGray"));
- }
- pDict->SetAtInteger(FX_BSTRC("BitsPerComponent"), 8);
- if ((iCompress & 0x03) == PDF_IMAGE_NO_COMPRESS) {
- dest_pitch = BitmapWidth;
- opType = 1;
- } else {
- opType = 0;
- }
+ } else {
+ pDict->SetAtName(FX_BSTRC("ColorSpace"), FX_BSTRC("DeviceRGB"));
+ pDict->SetAtInteger(FX_BSTRC("BitsPerComponent"), 8);
+ if ((iCompress & 0x03) == PDF_IMAGE_NO_COMPRESS) {
+ dest_pitch = BitmapWidth * 3;
+ opType = 2;
} else {
- pDict->SetAtName(FX_BSTRC("ColorSpace"), FX_BSTRC("DeviceRGB"));
- pDict->SetAtInteger(FX_BSTRC("BitsPerComponent"), 8);
- if ((iCompress & 0x03) == PDF_IMAGE_NO_COMPRESS) {
- dest_pitch = BitmapWidth * 3;
- opType = 2;
- } else {
- opType = 0;
- }
+ opType = 0;
}
- const CFX_DIBitmap* pMaskBitmap = NULL;
- FX_BOOL bDeleteMask = FALSE;
- if (pBitmap->HasAlpha()) {
- pMaskBitmap = pBitmap->GetAlphaMask();
- bDeleteMask = TRUE;
+ }
+ const CFX_DIBitmap* pMaskBitmap = NULL;
+ FX_BOOL bDeleteMask = FALSE;
+ if (pBitmap->HasAlpha()) {
+ pMaskBitmap = pBitmap->GetAlphaMask();
+ bDeleteMask = TRUE;
+ }
+ if (!pMaskBitmap && pMask) {
+ FXDIB_Format maskFormat = pMask->GetFormat();
+ if (maskFormat == FXDIB_1bppMask || maskFormat == FXDIB_8bppMask) {
+ pMaskBitmap = pMask;
}
- if (!pMaskBitmap && pMask) {
- FXDIB_Format maskFormat = pMask->GetFormat();
- if (maskFormat == FXDIB_1bppMask || maskFormat == FXDIB_8bppMask) {
- pMaskBitmap = pMask;
- }
+ }
+ if (pMaskBitmap) {
+ int32_t maskWidth = pMaskBitmap->GetWidth();
+ int32_t maskHeight = pMaskBitmap->GetHeight();
+ uint8_t* mask_buf = NULL;
+ FX_STRSIZE mask_size;
+ CPDF_Dictionary* pMaskDict = new CPDF_Dictionary;
+ pMaskDict->SetAtName(FX_BSTRC("Type"), FX_BSTRC("XObject"));
+ pMaskDict->SetAtName(FX_BSTRC("Subtype"), FX_BSTRC("Image"));
+ pMaskDict->SetAtInteger(FX_BSTRC("Width"), maskWidth);
+ pMaskDict->SetAtInteger(FX_BSTRC("Height"), maskHeight);
+ pMaskDict->SetAtName(FX_BSTRC("ColorSpace"), FX_BSTRC("DeviceGray"));
+ pMaskDict->SetAtInteger(FX_BSTRC("BitsPerComponent"), 8);
+ if (pMaskBitmap->GetBPP() == 8 &&
+ (iCompress & PDF_IMAGE_MASK_LOSSY_COMPRESS) != 0) {
+ _DCTEncodeBitmap(pMaskDict, pMaskBitmap, pParam ? pParam->nQuality : 75,
+ mask_buf, mask_size);
+ } else if (pMaskBitmap->GetFormat() == FXDIB_1bppMask) {
+ _JBIG2EncodeBitmap(pMaskDict, pMaskBitmap, m_pDocument, mask_buf,
+ mask_size, TRUE);
+ } else {
+ mask_buf = FX_Alloc2D(uint8_t, maskHeight, maskWidth);
+ mask_size = maskHeight * maskWidth; // Safe since checked alloc returned.
+ for (int32_t a = 0; a < maskHeight; a++) {
+ FXSYS_memcpy(mask_buf + a * maskWidth, pMaskBitmap->GetScanline(a),
+ maskWidth);
+ }
}
- if (pMaskBitmap) {
- int32_t maskWidth = pMaskBitmap->GetWidth();
- int32_t maskHeight = pMaskBitmap->GetHeight();
- uint8_t* mask_buf = NULL;
- FX_STRSIZE mask_size;
- CPDF_Dictionary* pMaskDict = new CPDF_Dictionary;
- pMaskDict->SetAtName(FX_BSTRC("Type"), FX_BSTRC("XObject"));
- pMaskDict->SetAtName(FX_BSTRC("Subtype"), FX_BSTRC("Image"));
- pMaskDict->SetAtInteger(FX_BSTRC("Width"), maskWidth);
- pMaskDict->SetAtInteger(FX_BSTRC("Height"), maskHeight);
- pMaskDict->SetAtName(FX_BSTRC("ColorSpace"), FX_BSTRC("DeviceGray"));
- pMaskDict->SetAtInteger(FX_BSTRC("BitsPerComponent"), 8);
- if (pMaskBitmap->GetBPP() == 8 && (iCompress & PDF_IMAGE_MASK_LOSSY_COMPRESS) != 0) {
- _DCTEncodeBitmap(pMaskDict, pMaskBitmap, pParam ? pParam->nQuality : 75, mask_buf, mask_size);
- } else if (pMaskBitmap->GetFormat() == FXDIB_1bppMask) {
- _JBIG2EncodeBitmap(pMaskDict, pMaskBitmap, m_pDocument, mask_buf, mask_size, TRUE);
- } else {
- mask_buf = FX_Alloc2D(uint8_t, maskHeight, maskWidth);
- mask_size = maskHeight * maskWidth; // Safe since checked alloc returned.
- for (int32_t a = 0; a < maskHeight; a ++) {
- FXSYS_memcpy(mask_buf + a * maskWidth, pMaskBitmap->GetScanline(a), maskWidth);
- }
- }
- pMaskDict->SetAtInteger(FX_BSTRC("Length"), mask_size);
- if (bUseMatte) {
- int a, r, g, b;
- ArgbDecode(*(pParam->pMatteColor), a, r, g, b);
- CPDF_Array* pMatte = new CPDF_Array;
- pMatte->AddInteger(r);
- pMatte->AddInteger(g);
- pMatte->AddInteger(b);
- pMaskDict->SetAt(FX_BSTRC("Matte"), pMatte);
- }
- CPDF_Stream* pMaskStream = new CPDF_Stream(mask_buf, mask_size, pMaskDict);
- m_pDocument->AddIndirectObject(pMaskStream);
- pDict->SetAtReference(FX_BSTRC("SMask"), m_pDocument, pMaskStream);
- if (bDeleteMask) {
- delete pMaskBitmap;
- }
+ pMaskDict->SetAtInteger(FX_BSTRC("Length"), mask_size);
+ if (bUseMatte) {
+ int a, r, g, b;
+ ArgbDecode(*(pParam->pMatteColor), a, r, g, b);
+ CPDF_Array* pMatte = new CPDF_Array;
+ pMatte->AddInteger(r);
+ pMatte->AddInteger(g);
+ pMatte->AddInteger(b);
+ pMaskDict->SetAt(FX_BSTRC("Matte"), pMatte);
}
- FX_BOOL bStream = pFileWrite != NULL && pFileRead != NULL;
- if (opType == 0) {
- if (iCompress & PDF_IMAGE_LOSSLESS_COMPRESS) {
- if (pBitmap->GetBPP() == 1) {
- _JBIG2EncodeBitmap(pDict, pBitmap, m_pDocument, dest_buf, dest_size, TRUE);
- }
- } else {
- if (pBitmap->GetBPP() == 1) {
- _JBIG2EncodeBitmap(pDict, pBitmap, m_pDocument, dest_buf, dest_size, FALSE);
- } else if (pBitmap->GetBPP() >= 8 && pBitmap->GetPalette() != NULL) {
- CFX_DIBitmap *pNewBitmap = new CFX_DIBitmap();
- pNewBitmap->Copy(pBitmap);
- pNewBitmap->ConvertFormat(FXDIB_Rgb);
- SetImage(pNewBitmap, iCompress, pFileWrite, pFileRead);
- if (pDict) {
- pDict->Release();
- pDict = NULL;
- }
- if (dest_buf) {
- FX_Free(dest_buf);
- dest_buf = NULL;
- }
- dest_size = 0;
- delete pNewBitmap;
- return;
- } else {
- if (bUseMatte) {
- CFX_DIBitmap *pNewBitmap = new CFX_DIBitmap();
- pNewBitmap->Create(BitmapWidth, BitmapHeight, FXDIB_Argb);
- uint8_t* dst_buf = pNewBitmap->GetBuffer();
- int32_t src_offset = 0;
- for (int32_t row = 0; row < BitmapHeight; row ++) {
- src_offset = row * src_pitch;
- for (int32_t column = 0; column < BitmapWidth; column ++) {
- FX_FLOAT alpha = src_buf[src_offset + 3] / 255.0f;
- dst_buf[src_offset] = (uint8_t)(src_buf[src_offset] * alpha);
- dst_buf[src_offset + 1] = (uint8_t)(src_buf[src_offset + 1] * alpha);
- dst_buf[src_offset + 2] = (uint8_t)(src_buf[src_offset + 2] * alpha);
- dst_buf[src_offset + 3] = (uint8_t)(src_buf[src_offset + 3]);
- src_offset += 4;
- }
- }
- _DCTEncodeBitmap(pDict, pNewBitmap, pParam ? pParam->nQuality : 75, dest_buf, dest_size);
- delete pNewBitmap;
- } else {
- _DCTEncodeBitmap(pDict, pBitmap, pParam ? pParam->nQuality : 75, dest_buf, dest_size);
- }
- }
- }
- if (bStream) {
- pFileWrite->WriteBlock(dest_buf, dest_size);
- FX_Free(dest_buf);
- dest_buf = NULL;
- }
- } else if (opType == 1) {
- if (!bStream) {
- dest_buf = FX_Alloc2D(uint8_t, dest_pitch, BitmapHeight);
- dest_size = dest_pitch * BitmapHeight; // Safe since checked alloc returned.
+ CPDF_Stream* pMaskStream = new CPDF_Stream(mask_buf, mask_size, pMaskDict);
+ m_pDocument->AddIndirectObject(pMaskStream);
+ pDict->SetAtReference(FX_BSTRC("SMask"), m_pDocument, pMaskStream);
+ if (bDeleteMask) {
+ delete pMaskBitmap;
+ }
+ }
+ FX_BOOL bStream = pFileWrite != NULL && pFileRead != NULL;
+ if (opType == 0) {
+ if (iCompress & PDF_IMAGE_LOSSLESS_COMPRESS) {
+ if (pBitmap->GetBPP() == 1) {
+ _JBIG2EncodeBitmap(pDict, pBitmap, m_pDocument, dest_buf, dest_size,
+ TRUE);
+ }
+ } else {
+ if (pBitmap->GetBPP() == 1) {
+ _JBIG2EncodeBitmap(pDict, pBitmap, m_pDocument, dest_buf, dest_size,
+ FALSE);
+ } else if (pBitmap->GetBPP() >= 8 && pBitmap->GetPalette() != NULL) {
+ CFX_DIBitmap* pNewBitmap = new CFX_DIBitmap();
+ pNewBitmap->Copy(pBitmap);
+ pNewBitmap->ConvertFormat(FXDIB_Rgb);
+ SetImage(pNewBitmap, iCompress, pFileWrite, pFileRead);
+ if (pDict) {
+ pDict->Release();
+ pDict = NULL;
}
- uint8_t* pDest = dest_buf;
- for (int32_t i = 0; i < BitmapHeight; i ++) {
- if (!bStream) {
- FXSYS_memcpy(pDest, src_buf, dest_pitch);
- pDest += dest_pitch;
- } else {
- pFileWrite->WriteBlock(src_buf, dest_pitch);
- }
- src_buf += src_pitch;
+ if (dest_buf) {
+ FX_Free(dest_buf);
+ dest_buf = NULL;
}
- } else if (opType == 2) {
- if (!bStream) {
- dest_buf = FX_Alloc2D(uint8_t, dest_pitch, BitmapHeight);
- dest_size = dest_pitch * BitmapHeight; // Safe since checked alloc returned.
- } else {
- dest_buf = FX_Alloc(uint8_t, dest_pitch);
- }
- uint8_t* pDest = dest_buf;
- int32_t src_offset = 0;
- int32_t dest_offset = 0;
- for (int32_t row = 0; row < BitmapHeight; row ++) {
+ dest_size = 0;
+ delete pNewBitmap;
+ return;
+ } else {
+ if (bUseMatte) {
+ CFX_DIBitmap* pNewBitmap = new CFX_DIBitmap();
+ pNewBitmap->Create(BitmapWidth, BitmapHeight, FXDIB_Argb);
+ uint8_t* dst_buf = pNewBitmap->GetBuffer();
+ int32_t src_offset = 0;
+ for (int32_t row = 0; row < BitmapHeight; row++) {
src_offset = row * src_pitch;
- for (int32_t column = 0; column < BitmapWidth; column ++) {
- FX_FLOAT alpha = bUseMatte ? src_buf[src_offset + 3] / 255.0f : 1;
- pDest[dest_offset] = (uint8_t)(src_buf[src_offset + 2] * alpha);
- pDest[dest_offset + 1] = (uint8_t)(src_buf[src_offset + 1] * alpha);
- pDest[dest_offset + 2] = (uint8_t)(src_buf[src_offset] * alpha);
- dest_offset += 3;
- src_offset += bpp == 24 ? 3 : 4;
+ for (int32_t column = 0; column < BitmapWidth; column++) {
+ FX_FLOAT alpha = src_buf[src_offset + 3] / 255.0f;
+ dst_buf[src_offset] = (uint8_t)(src_buf[src_offset] * alpha);
+ dst_buf[src_offset + 1] =
+ (uint8_t)(src_buf[src_offset + 1] * alpha);
+ dst_buf[src_offset + 2] =
+ (uint8_t)(src_buf[src_offset + 2] * alpha);
+ dst_buf[src_offset + 3] = (uint8_t)(src_buf[src_offset + 3]);
+ src_offset += 4;
}
- if (bStream) {
- pFileWrite->WriteBlock(pDest, dest_pitch);
- pDest = dest_buf;
- } else {
- pDest += dest_pitch;
- }
- dest_offset = 0;
- }
- if (bStream) {
- FX_Free(dest_buf);
- dest_buf = NULL;
+ }
+ _DCTEncodeBitmap(pDict, pNewBitmap, pParam ? pParam->nQuality : 75,
+ dest_buf, dest_size);
+ delete pNewBitmap;
+ } else {
+ _DCTEncodeBitmap(pDict, pBitmap, pParam ? pParam->nQuality : 75,
+ dest_buf, dest_size);
}
+ }
}
- if (m_pStream == NULL) {
- m_pStream = new CPDF_Stream(NULL, 0, NULL);
+ if (bStream) {
+ pFileWrite->WriteBlock(dest_buf, dest_size);
+ FX_Free(dest_buf);
+ dest_buf = NULL;
}
+ } else if (opType == 1) {
if (!bStream) {
- m_pStream->InitStream(dest_buf, dest_size, pDict);
+ dest_buf = FX_Alloc2D(uint8_t, dest_pitch, BitmapHeight);
+ dest_size =
+ dest_pitch * BitmapHeight; // Safe since checked alloc returned.
+ }
+ uint8_t* pDest = dest_buf;
+ for (int32_t i = 0; i < BitmapHeight; i++) {
+ if (!bStream) {
+ FXSYS_memcpy(pDest, src_buf, dest_pitch);
+ pDest += dest_pitch;
+ } else {
+ pFileWrite->WriteBlock(src_buf, dest_pitch);
+ }
+ src_buf += src_pitch;
+ }
+ } else if (opType == 2) {
+ if (!bStream) {
+ dest_buf = FX_Alloc2D(uint8_t, dest_pitch, BitmapHeight);
+ dest_size =
+ dest_pitch * BitmapHeight; // Safe since checked alloc returned.
} else {
- pFileWrite->Flush();
- m_pStream->InitStream(pFileRead, pDict);
+ dest_buf = FX_Alloc(uint8_t, dest_pitch);
+ }
+ uint8_t* pDest = dest_buf;
+ int32_t src_offset = 0;
+ int32_t dest_offset = 0;
+ for (int32_t row = 0; row < BitmapHeight; row++) {
+ src_offset = row * src_pitch;
+ for (int32_t column = 0; column < BitmapWidth; column++) {
+ FX_FLOAT alpha = bUseMatte ? src_buf[src_offset + 3] / 255.0f : 1;
+ pDest[dest_offset] = (uint8_t)(src_buf[src_offset + 2] * alpha);
+ pDest[dest_offset + 1] = (uint8_t)(src_buf[src_offset + 1] * alpha);
+ pDest[dest_offset + 2] = (uint8_t)(src_buf[src_offset] * alpha);
+ dest_offset += 3;
+ src_offset += bpp == 24 ? 3 : 4;
+ }
+ if (bStream) {
+ pFileWrite->WriteBlock(pDest, dest_pitch);
+ pDest = dest_buf;
+ } else {
+ pDest += dest_pitch;
+ }
+ dest_offset = 0;
}
- m_bIsMask = pBitmap->IsAlphaMask();
- m_Width = BitmapWidth;
- m_Height = BitmapHeight;
- if (dest_buf) {
- FX_Free(dest_buf);
+ if (bStream) {
+ FX_Free(dest_buf);
+ dest_buf = NULL;
}
+ }
+ if (m_pStream == NULL) {
+ m_pStream = new CPDF_Stream(NULL, 0, NULL);
+ }
+ if (!bStream) {
+ m_pStream->InitStream(dest_buf, dest_size, pDict);
+ } else {
+ pFileWrite->Flush();
+ m_pStream->InitStream(pFileRead, pDict);
+ }
+ m_bIsMask = pBitmap->IsAlphaMask();
+ m_Width = BitmapWidth;
+ m_Height = BitmapHeight;
+ if (dest_buf) {
+ FX_Free(dest_buf);
+ }
}
-void CPDF_Image::ResetCache(CPDF_Page* pPage, const CFX_DIBitmap* pBitmap)
-{
- pPage->GetRenderCache()->ResetBitmap(m_pStream, pBitmap);
+void CPDF_Image::ResetCache(CPDF_Page* pPage, const CFX_DIBitmap* pBitmap) {
+ pPage->GetRenderCache()->ResetBitmap(m_pStream, pBitmap);
}
diff --git a/core/src/fpdfapi/fpdf_font/font_int.h b/core/src/fpdfapi/fpdf_font/font_int.h
index f57e52758a..d7cbe1b0b5 100644
--- a/core/src/fpdfapi/fpdf_font/font_int.h
+++ b/core/src/fpdfapi/fpdf_font/font_int.h
@@ -7,170 +7,167 @@
#define CORE_SRC_FPDFAPI_FPDF_FONT_FONT_INT_H_
typedef void* FXFT_Library;
-class CPDF_CMapManager
-{
-public:
- CPDF_CMapManager();
- ~CPDF_CMapManager();
- void* GetPackage(FX_BOOL bPrompt);
- CPDF_CMap* GetPredefinedCMap(const CFX_ByteString& name, FX_BOOL bPrompt);
- CPDF_CID2UnicodeMap* GetCID2UnicodeMap(int charset, FX_BOOL bPrompt);
- void ReloadAll();
-private:
- CPDF_CMap* LoadPredefinedCMap(const CFX_ByteString& name, FX_BOOL bPrompt);
- CPDF_CID2UnicodeMap* LoadCID2UnicodeMap(int charset, FX_BOOL bPrompt);
- void DropAll(FX_BOOL bReload);
- FX_BOOL m_bPrompted;
- CFX_MapByteStringToPtr m_CMaps;
- CPDF_CID2UnicodeMap* m_CID2UnicodeMaps[6];
+class CPDF_CMapManager {
+ public:
+ CPDF_CMapManager();
+ ~CPDF_CMapManager();
+ void* GetPackage(FX_BOOL bPrompt);
+ CPDF_CMap* GetPredefinedCMap(const CFX_ByteString& name, FX_BOOL bPrompt);
+ CPDF_CID2UnicodeMap* GetCID2UnicodeMap(int charset, FX_BOOL bPrompt);
+ void ReloadAll();
+
+ private:
+ CPDF_CMap* LoadPredefinedCMap(const CFX_ByteString& name, FX_BOOL bPrompt);
+ CPDF_CID2UnicodeMap* LoadCID2UnicodeMap(int charset, FX_BOOL bPrompt);
+ void DropAll(FX_BOOL bReload);
+ FX_BOOL m_bPrompted;
+ CFX_MapByteStringToPtr m_CMaps;
+ CPDF_CID2UnicodeMap* m_CID2UnicodeMaps[6];
};
-class CPDF_FontGlobals
-{
-public:
- CPDF_FontGlobals();
- ~CPDF_FontGlobals();
- void ClearAll();
- void Clear(void* key);
- CPDF_Font* Find(void* key, int index);
- void Set(void* key, int index, CPDF_Font* pFont);
- CPDF_CMapManager m_CMapManager;
- struct {
- const struct FXCMAP_CMap* m_pMapList;
- int m_Count;
- } m_EmbeddedCharsets[NUMBER_OF_CIDSETS];
- struct {
- const FX_WORD* m_pMap;
- int m_Count;
- } m_EmbeddedToUnicodes[NUMBER_OF_CIDSETS];
-private:
- CFX_MapPtrToPtr m_pStockMap;
- uint8_t* m_pContrastRamps;
+class CPDF_FontGlobals {
+ public:
+ CPDF_FontGlobals();
+ ~CPDF_FontGlobals();
+ void ClearAll();
+ void Clear(void* key);
+ CPDF_Font* Find(void* key, int index);
+ void Set(void* key, int index, CPDF_Font* pFont);
+ CPDF_CMapManager m_CMapManager;
+ struct {
+ const struct FXCMAP_CMap* m_pMapList;
+ int m_Count;
+ } m_EmbeddedCharsets[NUMBER_OF_CIDSETS];
+ struct {
+ const FX_WORD* m_pMap;
+ int m_Count;
+ } m_EmbeddedToUnicodes[NUMBER_OF_CIDSETS];
+
+ private:
+ CFX_MapPtrToPtr m_pStockMap;
+ uint8_t* m_pContrastRamps;
};
struct _CMap_CodeRange {
- int m_CharSize;
- uint8_t m_Lower[4];
- uint8_t m_Upper[4];
+ int m_CharSize;
+ uint8_t m_Lower[4];
+ uint8_t m_Upper[4];
};
-class CPDF_CMapParser
-{
-public:
- CPDF_CMapParser();
- ~CPDF_CMapParser() {}
- FX_BOOL Initialize(CPDF_CMap*);
- void ParseWord(const CFX_ByteStringC& str);
- CFX_BinaryBuf m_AddMaps;
-private:
- CPDF_CMap* m_pCMap;
- int m_Status;
- int m_CodeSeq;
- FX_DWORD m_CodePoints[4];
- CFX_ArrayTemplate<_CMap_CodeRange> m_CodeRanges;
- CFX_ByteString m_Registry, m_Ordering, m_Supplement;
- CFX_ByteString m_LastWord;
+class CPDF_CMapParser {
+ public:
+ CPDF_CMapParser();
+ ~CPDF_CMapParser() {}
+ FX_BOOL Initialize(CPDF_CMap*);
+ void ParseWord(const CFX_ByteStringC& str);
+ CFX_BinaryBuf m_AddMaps;
+
+ private:
+ CPDF_CMap* m_pCMap;
+ int m_Status;
+ int m_CodeSeq;
+ FX_DWORD m_CodePoints[4];
+ CFX_ArrayTemplate<_CMap_CodeRange> m_CodeRanges;
+ CFX_ByteString m_Registry, m_Ordering, m_Supplement;
+ CFX_ByteString m_LastWord;
};
-#define CIDCODING_UNKNOWN 0
-#define CIDCODING_GB 1
-#define CIDCODING_BIG5 2
-#define CIDCODING_JIS 3
-#define CIDCODING_KOREA 4
-#define CIDCODING_UCS2 5
-#define CIDCODING_CID 6
-#define CIDCODING_UTF16 7
-class CPDF_CMap
-{
-public:
- CPDF_CMap();
- FX_BOOL LoadPredefined(CPDF_CMapManager* pMgr, const FX_CHAR* name, FX_BOOL bPromptCJK);
- FX_BOOL LoadEmbedded(const uint8_t* pData, FX_DWORD dwSize);
- void Release();
- FX_BOOL IsLoaded() const
- {
- return m_bLoaded;
- }
- int GetCharset()
- {
- return m_Charset;
- }
- FX_BOOL IsVertWriting() const
- {
- return m_bVertical;
- }
- FX_WORD CIDFromCharCode(FX_DWORD charcode) const;
- FX_DWORD CharCodeFromCID(FX_WORD CID) const;
- int GetCharSize(FX_DWORD charcode) const;
- FX_DWORD GetNextChar(const FX_CHAR* pString, int nStrLen, int& offset) const;
- int CountChar(const FX_CHAR* pString, int size) const;
- int AppendChar(FX_CHAR* str, FX_DWORD charcode) const;
- typedef enum {OneByte, TwoBytes, MixedTwoBytes, MixedFourBytes} CodingScheme;
-protected:
- ~CPDF_CMap();
- friend class CPDF_CMapParser;
- friend class CPDF_CMapManager;
- friend class CPDF_CIDFont;
-protected:
- CFX_ByteString m_PredefinedCMap;
- FX_BOOL m_bVertical;
- int m_Charset, m_Coding;
- CodingScheme m_CodingScheme;
- int m_nCodeRanges;
- uint8_t* m_pLeadingBytes;
- FX_WORD* m_pMapping;
- uint8_t* m_pAddMapping;
- FX_BOOL m_bLoaded;
- const FXCMAP_CMap* m_pEmbedMap;
- CPDF_CMap* m_pUseMap;
+#define CIDCODING_UNKNOWN 0
+#define CIDCODING_GB 1
+#define CIDCODING_BIG5 2
+#define CIDCODING_JIS 3
+#define CIDCODING_KOREA 4
+#define CIDCODING_UCS2 5
+#define CIDCODING_CID 6
+#define CIDCODING_UTF16 7
+class CPDF_CMap {
+ public:
+ CPDF_CMap();
+ FX_BOOL LoadPredefined(CPDF_CMapManager* pMgr,
+ const FX_CHAR* name,
+ FX_BOOL bPromptCJK);
+ FX_BOOL LoadEmbedded(const uint8_t* pData, FX_DWORD dwSize);
+ void Release();
+ FX_BOOL IsLoaded() const { return m_bLoaded; }
+ int GetCharset() { return m_Charset; }
+ FX_BOOL IsVertWriting() const { return m_bVertical; }
+ FX_WORD CIDFromCharCode(FX_DWORD charcode) const;
+ FX_DWORD CharCodeFromCID(FX_WORD CID) const;
+ int GetCharSize(FX_DWORD charcode) const;
+ FX_DWORD GetNextChar(const FX_CHAR* pString, int nStrLen, int& offset) const;
+ int CountChar(const FX_CHAR* pString, int size) const;
+ int AppendChar(FX_CHAR* str, FX_DWORD charcode) const;
+ typedef enum {
+ OneByte,
+ TwoBytes,
+ MixedTwoBytes,
+ MixedFourBytes
+ } CodingScheme;
+
+ protected:
+ ~CPDF_CMap();
+ friend class CPDF_CMapParser;
+ friend class CPDF_CMapManager;
+ friend class CPDF_CIDFont;
+
+ protected:
+ CFX_ByteString m_PredefinedCMap;
+ FX_BOOL m_bVertical;
+ int m_Charset, m_Coding;
+ CodingScheme m_CodingScheme;
+ int m_nCodeRanges;
+ uint8_t* m_pLeadingBytes;
+ FX_WORD* m_pMapping;
+ uint8_t* m_pAddMapping;
+ FX_BOOL m_bLoaded;
+ const FXCMAP_CMap* m_pEmbedMap;
+ CPDF_CMap* m_pUseMap;
};
-class CPDF_PredefinedCMap
-{
-public:
- const FX_CHAR* m_pName;
- int m_Charset;
- int m_Coding;
- CPDF_CMap::CodingScheme m_CodingScheme;
- FX_DWORD m_LeadingSegCount;
- uint8_t m_LeadingSegs[4];
+class CPDF_PredefinedCMap {
+ public:
+ const FX_CHAR* m_pName;
+ int m_Charset;
+ int m_Coding;
+ CPDF_CMap::CodingScheme m_CodingScheme;
+ FX_DWORD m_LeadingSegCount;
+ uint8_t m_LeadingSegs[4];
};
typedef struct _FileHeader {
- uint8_t btTag[4];
- uint8_t btVersion;
- uint8_t btFormat;
- uint8_t btReserved1[2];
- FX_DWORD dwStartIndex;
- FX_DWORD dwEndIndex;
- FX_DWORD dwDataSize;
- FX_DWORD dwDataOffset;
- FX_DWORD dwRecordSize;
+ uint8_t btTag[4];
+ uint8_t btVersion;
+ uint8_t btFormat;
+ uint8_t btReserved1[2];
+ FX_DWORD dwStartIndex;
+ FX_DWORD dwEndIndex;
+ FX_DWORD dwDataSize;
+ FX_DWORD dwDataOffset;
+ FX_DWORD dwRecordSize;
} FXMP_FILEHEADER;
-class CPDF_CID2UnicodeMap
-{
-public:
- CPDF_CID2UnicodeMap();
- ~CPDF_CID2UnicodeMap();
- FX_BOOL Initialize();
- FX_BOOL IsLoaded();
- void Load(CPDF_CMapManager* pMgr, int charset, FX_BOOL bPromptCJK);
- FX_WCHAR UnicodeFromCID(FX_WORD CID);
-protected:
- int m_Charset;
- const FX_WORD* m_pEmbeddedMap;
- FX_DWORD m_EmbeddedCount;
+class CPDF_CID2UnicodeMap {
+ public:
+ CPDF_CID2UnicodeMap();
+ ~CPDF_CID2UnicodeMap();
+ FX_BOOL Initialize();
+ FX_BOOL IsLoaded();
+ void Load(CPDF_CMapManager* pMgr, int charset, FX_BOOL bPromptCJK);
+ FX_WCHAR UnicodeFromCID(FX_WORD CID);
+
+ protected:
+ int m_Charset;
+ const FX_WORD* m_pEmbeddedMap;
+ FX_DWORD m_EmbeddedCount;
};
-class CPDF_ToUnicodeMap
-{
-public:
- void Load(CPDF_Stream* pStream);
- CFX_WideString Lookup(FX_DWORD charcode);
- FX_DWORD ReverseLookup(FX_WCHAR unicode);
-protected:
- CFX_CMapDWordToDWord m_Map;
- CPDF_CID2UnicodeMap* m_pBaseMap;
- CFX_WideTextBuf m_MultiCharBuf;
+class CPDF_ToUnicodeMap {
+ public:
+ void Load(CPDF_Stream* pStream);
+ CFX_WideString Lookup(FX_DWORD charcode);
+ FX_DWORD ReverseLookup(FX_WCHAR unicode);
+
+ protected:
+ CFX_CMapDWordToDWord m_Map;
+ CPDF_CID2UnicodeMap* m_pBaseMap;
+ CFX_WideTextBuf m_MultiCharBuf;
};
-class CPDF_FontCharMap : public CFX_CharMap
-{
-public:
- CPDF_FontCharMap(CPDF_Font* pFont);
- CPDF_Font* m_pFont;
+class CPDF_FontCharMap : public CFX_CharMap {
+ public:
+ CPDF_FontCharMap(CPDF_Font* pFont);
+ CPDF_Font* m_pFont;
};
#endif // CORE_SRC_FPDFAPI_FPDF_FONT_FONT_INT_H_
diff --git a/core/src/fpdfapi/fpdf_font/fpdf_font.cpp b/core/src/fpdfapi/fpdf_font/fpdf_font.cpp
index 8037a8c674..0107000dd9 100644
--- a/core/src/fpdfapi/fpdf_font/fpdf_font.cpp
+++ b/core/src/fpdfapi/fpdf_font/fpdf_font.cpp
@@ -12,1735 +12,1786 @@
#include "../fpdf_page/pageint.h"
#include "font_int.h"
-FX_BOOL FT_UseTTCharmap(FXFT_Face face, int platform_id, int encoding_id)
-{
- for (int i = 0; i < FXFT_Get_Face_CharmapCount(face); i ++) {
- if (FXFT_Get_Charmap_PlatformID(FXFT_Get_Face_Charmaps(face)[i]) == platform_id &&
- FXFT_Get_Charmap_EncodingID(FXFT_Get_Face_Charmaps(face)[i]) == encoding_id) {
- FXFT_Set_Charmap(face, FXFT_Get_Face_Charmaps(face)[i]);
- return TRUE;
- }
- }
- return FALSE;
-}
-CPDF_FontGlobals::CPDF_FontGlobals()
- : m_pContrastRamps(NULL)
-{
- FXSYS_memset(m_EmbeddedCharsets, 0, sizeof(m_EmbeddedCharsets));
- FXSYS_memset(m_EmbeddedToUnicodes, 0, sizeof(m_EmbeddedToUnicodes));
-}
-CPDF_FontGlobals::~CPDF_FontGlobals()
-{
- ClearAll();
- if (m_pContrastRamps) {
- FX_Free(m_pContrastRamps);
- }
-}
-class CFX_StockFontArray
-{
-public:
- CFX_StockFontArray()
- {
- FXSYS_memset(m_pStockFonts, 0, sizeof(m_pStockFonts));
- }
- ~CFX_StockFontArray()
- {
- for (int i = 0; i < FX_ArraySize(m_pStockFonts); i++) {
- if (!m_pStockFonts[i])
- continue;
- CPDF_Dictionary* pFontDict = m_pStockFonts[i]->GetFontDict();
- if (pFontDict)
- pFontDict->Release();
- delete m_pStockFonts[i];
- }
- }
- CPDF_Font* GetFont(int index) const
- {
- if (index < 0 || index >= FX_ArraySize(m_pStockFonts))
- return NULL;
- return m_pStockFonts[index];
- }
- void SetFont(int index, CPDF_Font* font)
- {
- if (index < 0 || index >= FX_ArraySize(m_pStockFonts))
- return;
- delete m_pStockFonts[index];
- m_pStockFonts[index] = font;
- }
-private:
- CPDF_Font* m_pStockFonts[14];
+FX_BOOL FT_UseTTCharmap(FXFT_Face face, int platform_id, int encoding_id) {
+ for (int i = 0; i < FXFT_Get_Face_CharmapCount(face); i++) {
+ if (FXFT_Get_Charmap_PlatformID(FXFT_Get_Face_Charmaps(face)[i]) ==
+ platform_id &&
+ FXFT_Get_Charmap_EncodingID(FXFT_Get_Face_Charmaps(face)[i]) ==
+ encoding_id) {
+ FXFT_Set_Charmap(face, FXFT_Get_Face_Charmaps(face)[i]);
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+CPDF_FontGlobals::CPDF_FontGlobals() : m_pContrastRamps(NULL) {
+ FXSYS_memset(m_EmbeddedCharsets, 0, sizeof(m_EmbeddedCharsets));
+ FXSYS_memset(m_EmbeddedToUnicodes, 0, sizeof(m_EmbeddedToUnicodes));
+}
+CPDF_FontGlobals::~CPDF_FontGlobals() {
+ ClearAll();
+ if (m_pContrastRamps) {
+ FX_Free(m_pContrastRamps);
+ }
+}
+class CFX_StockFontArray {
+ public:
+ CFX_StockFontArray() {
+ FXSYS_memset(m_pStockFonts, 0, sizeof(m_pStockFonts));
+ }
+ ~CFX_StockFontArray() {
+ for (int i = 0; i < FX_ArraySize(m_pStockFonts); i++) {
+ if (!m_pStockFonts[i])
+ continue;
+ CPDF_Dictionary* pFontDict = m_pStockFonts[i]->GetFontDict();
+ if (pFontDict)
+ pFontDict->Release();
+ delete m_pStockFonts[i];
+ }
+ }
+ CPDF_Font* GetFont(int index) const {
+ if (index < 0 || index >= FX_ArraySize(m_pStockFonts))
+ return NULL;
+ return m_pStockFonts[index];
+ }
+ void SetFont(int index, CPDF_Font* font) {
+ if (index < 0 || index >= FX_ArraySize(m_pStockFonts))
+ return;
+ delete m_pStockFonts[index];
+ m_pStockFonts[index] = font;
+ }
+
+ private:
+ CPDF_Font* m_pStockFonts[14];
};
-CPDF_Font* CPDF_FontGlobals::Find(void* key, int index)
-{
- void* value = NULL;
- if (!m_pStockMap.Lookup(key, value)) {
- return NULL;
- }
- if (!value) {
- return NULL;
- }
- return static_cast<CFX_StockFontArray*>(value)->GetFont(index);
-}
-void CPDF_FontGlobals::Set(void* key, int index, CPDF_Font* pFont)
-{
- void* value = NULL;
- CFX_StockFontArray* font_array = NULL;
- if (m_pStockMap.Lookup(key, value)) {
- font_array = static_cast<CFX_StockFontArray*>(value);
- } else {
- font_array = new CFX_StockFontArray();
- m_pStockMap.SetAt(key, font_array);
- }
- font_array->SetFont(index, pFont);
-}
-void CPDF_FontGlobals::Clear(void* key)
-{
+CPDF_Font* CPDF_FontGlobals::Find(void* key, int index) {
+ void* value = NULL;
+ if (!m_pStockMap.Lookup(key, value)) {
+ return NULL;
+ }
+ if (!value) {
+ return NULL;
+ }
+ return static_cast<CFX_StockFontArray*>(value)->GetFont(index);
+}
+void CPDF_FontGlobals::Set(void* key, int index, CPDF_Font* pFont) {
+ void* value = NULL;
+ CFX_StockFontArray* font_array = NULL;
+ if (m_pStockMap.Lookup(key, value)) {
+ font_array = static_cast<CFX_StockFontArray*>(value);
+ } else {
+ font_array = new CFX_StockFontArray();
+ m_pStockMap.SetAt(key, font_array);
+ }
+ font_array->SetFont(index, pFont);
+}
+void CPDF_FontGlobals::Clear(void* key) {
+ void* value = NULL;
+ if (!m_pStockMap.Lookup(key, value)) {
+ return;
+ }
+ delete static_cast<CFX_StockFontArray*>(value);
+ m_pStockMap.RemoveKey(key);
+}
+void CPDF_FontGlobals::ClearAll() {
+ FX_POSITION pos = m_pStockMap.GetStartPosition();
+ while (pos) {
+ void* key = NULL;
void* value = NULL;
- if (!m_pStockMap.Lookup(key, value)) {
- return;
- }
+ m_pStockMap.GetNextAssoc(pos, key, value);
delete static_cast<CFX_StockFontArray*>(value);
m_pStockMap.RemoveKey(key);
-}
-void CPDF_FontGlobals::ClearAll()
-{
- FX_POSITION pos = m_pStockMap.GetStartPosition();
- while (pos) {
- void* key = NULL;
- void* value = NULL;
- m_pStockMap.GetNextAssoc(pos, key, value);
- delete static_cast<CFX_StockFontArray*>(value);
- m_pStockMap.RemoveKey(key);
- }
-}
-CPDF_Font::CPDF_Font(int fonttype) : m_FontType(fonttype)
-{
- m_FontBBox.left = m_FontBBox.right = m_FontBBox.top = m_FontBBox.bottom = 0;
- m_StemV = m_Ascent = m_Descent = m_ItalicAngle = 0;
- m_pFontFile = NULL;
- m_Flags = 0;
- m_pToUnicodeMap = NULL;
- m_bToUnicodeLoaded = FALSE;
- m_pCharMap = new CPDF_FontCharMap(this);
-}
-CPDF_Font::~CPDF_Font()
-{
- delete m_pCharMap;
- m_pCharMap = NULL;
+ }
+}
+CPDF_Font::CPDF_Font(int fonttype) : m_FontType(fonttype) {
+ m_FontBBox.left = m_FontBBox.right = m_FontBBox.top = m_FontBBox.bottom = 0;
+ m_StemV = m_Ascent = m_Descent = m_ItalicAngle = 0;
+ m_pFontFile = NULL;
+ m_Flags = 0;
+ m_pToUnicodeMap = NULL;
+ m_bToUnicodeLoaded = FALSE;
+ m_pCharMap = new CPDF_FontCharMap(this);
+}
+CPDF_Font::~CPDF_Font() {
+ delete m_pCharMap;
+ m_pCharMap = NULL;
- delete m_pToUnicodeMap;
- m_pToUnicodeMap = NULL;
+ delete m_pToUnicodeMap;
+ m_pToUnicodeMap = NULL;
- if (m_pFontFile) {
- m_pDocument->GetPageData()->ReleaseFontFileStreamAcc((CPDF_Stream*)m_pFontFile->GetStream());
- }
-}
-FX_BOOL CPDF_Font::IsVertWriting() const
-{
- FX_BOOL bVertWriting = FALSE;
- CPDF_CIDFont* pCIDFont = GetCIDFont();
- if (pCIDFont) {
- bVertWriting = pCIDFont->IsVertWriting();
- } else {
- bVertWriting = m_Font.IsVertical();
- }
- return bVertWriting;
-}
-CFX_ByteString CPDF_Font::GetFontTypeName() const
-{
- switch (m_FontType) {
- case PDFFONT_TYPE1:
- return FX_BSTRC("Type1");
- case PDFFONT_TRUETYPE:
- return FX_BSTRC("TrueType");
- case PDFFONT_TYPE3:
- return FX_BSTRC("Type3");
- case PDFFONT_CIDFONT:
- return FX_BSTRC("Type0");
- }
- return CFX_ByteString();
-}
-void CPDF_Font::AppendChar(CFX_ByteString& str, FX_DWORD charcode) const
-{
- char buf[4];
- int len = AppendChar(buf, charcode);
- if (len == 1) {
- str += buf[0];
+ if (m_pFontFile) {
+ m_pDocument->GetPageData()->ReleaseFontFileStreamAcc(
+ (CPDF_Stream*)m_pFontFile->GetStream());
+ }
+}
+FX_BOOL CPDF_Font::IsVertWriting() const {
+ FX_BOOL bVertWriting = FALSE;
+ CPDF_CIDFont* pCIDFont = GetCIDFont();
+ if (pCIDFont) {
+ bVertWriting = pCIDFont->IsVertWriting();
+ } else {
+ bVertWriting = m_Font.IsVertical();
+ }
+ return bVertWriting;
+}
+CFX_ByteString CPDF_Font::GetFontTypeName() const {
+ switch (m_FontType) {
+ case PDFFONT_TYPE1:
+ return FX_BSTRC("Type1");
+ case PDFFONT_TRUETYPE:
+ return FX_BSTRC("TrueType");
+ case PDFFONT_TYPE3:
+ return FX_BSTRC("Type3");
+ case PDFFONT_CIDFONT:
+ return FX_BSTRC("Type0");
+ }
+ return CFX_ByteString();
+}
+void CPDF_Font::AppendChar(CFX_ByteString& str, FX_DWORD charcode) const {
+ char buf[4];
+ int len = AppendChar(buf, charcode);
+ if (len == 1) {
+ str += buf[0];
+ } else {
+ str += CFX_ByteString(buf, len);
+ }
+}
+CFX_WideString CPDF_Font::UnicodeFromCharCode(FX_DWORD charcode) const {
+ if (!m_bToUnicodeLoaded) {
+ ((CPDF_Font*)this)->LoadUnicodeMap();
+ }
+ if (m_pToUnicodeMap) {
+ CFX_WideString wsRet = m_pToUnicodeMap->Lookup(charcode);
+ if (!wsRet.IsEmpty()) {
+ return wsRet;
+ }
+ }
+ FX_WCHAR unicode = _UnicodeFromCharCode(charcode);
+ if (unicode == 0) {
+ return CFX_WideString();
+ }
+ return unicode;
+}
+FX_DWORD CPDF_Font::CharCodeFromUnicode(FX_WCHAR unicode) const {
+ if (!m_bToUnicodeLoaded) {
+ ((CPDF_Font*)this)->LoadUnicodeMap();
+ }
+ if (m_pToUnicodeMap) {
+ FX_DWORD charcode = m_pToUnicodeMap->ReverseLookup(unicode);
+ if (charcode) {
+ return charcode;
+ }
+ }
+ return _CharCodeFromUnicode(unicode);
+}
+CFX_WideString CPDF_Font::DecodeString(const CFX_ByteString& str) const {
+ CFX_WideString result;
+ int src_len = str.GetLength();
+ result.Reserve(src_len);
+ const FX_CHAR* src_buf = str;
+ int src_pos = 0;
+ while (src_pos < src_len) {
+ FX_DWORD charcode = GetNextChar(src_buf, src_len, src_pos);
+ CFX_WideString unicode = UnicodeFromCharCode(charcode);
+ if (!unicode.IsEmpty()) {
+ result += unicode;
} else {
- str += CFX_ByteString(buf, len);
- }
-}
-CFX_WideString CPDF_Font::UnicodeFromCharCode(FX_DWORD charcode) const
-{
- if (!m_bToUnicodeLoaded) {
- ((CPDF_Font*)this)->LoadUnicodeMap();
- }
- if (m_pToUnicodeMap) {
- CFX_WideString wsRet = m_pToUnicodeMap->Lookup(charcode);
- if (!wsRet.IsEmpty()) {
- return wsRet;
- }
- }
- FX_WCHAR unicode = _UnicodeFromCharCode(charcode);
- if (unicode == 0) {
- return CFX_WideString();
- }
- return unicode;
-}
-FX_DWORD CPDF_Font::CharCodeFromUnicode(FX_WCHAR unicode) const
-{
- if (!m_bToUnicodeLoaded) {
- ((CPDF_Font*)this)->LoadUnicodeMap();
- }
- if (m_pToUnicodeMap) {
- FX_DWORD charcode = m_pToUnicodeMap->ReverseLookup(unicode);
- if (charcode) {
- return charcode;
- }
- }
- return _CharCodeFromUnicode(unicode);
-}
-CFX_WideString CPDF_Font::DecodeString(const CFX_ByteString& str) const
-{
- CFX_WideString result;
- int src_len = str.GetLength();
- result.Reserve(src_len);
- const FX_CHAR* src_buf = str;
- int src_pos = 0;
- while (src_pos < src_len) {
- FX_DWORD charcode = GetNextChar(src_buf, src_len, src_pos);
- CFX_WideString unicode = UnicodeFromCharCode(charcode);
- if (!unicode.IsEmpty()) {
- result += unicode;
- } else {
- result += (FX_WCHAR)charcode;
- }
- }
- return result;
-}
-CFX_ByteString CPDF_Font::EncodeString(const CFX_WideString& str) const
-{
- CFX_ByteString result;
- int src_len = str.GetLength();
- FX_CHAR* dest_buf = result.GetBuffer(src_len * 2);
- const FX_WCHAR* src_buf = str.c_str();
- int dest_pos = 0;
- for (int src_pos = 0; src_pos < src_len; src_pos ++) {
- FX_DWORD charcode = CharCodeFromUnicode(src_buf[src_pos]);
- dest_pos += AppendChar(dest_buf + dest_pos, charcode);
- }
- result.ReleaseBuffer(dest_pos);
- return result;
-}
-void CPDF_Font::LoadFontDescriptor(CPDF_Dictionary* pFontDesc)
-{
- m_Flags = pFontDesc->GetInteger(FX_BSTRC("Flags"), PDFFONT_NONSYMBOLIC);
- int ItalicAngle = 0;
- FX_BOOL bExistItalicAngle = FALSE;
- if (pFontDesc->KeyExist(FX_BSTRC("ItalicAngle"))) {
- ItalicAngle = pFontDesc->GetInteger(FX_BSTRC("ItalicAngle"));
- bExistItalicAngle = TRUE;
- }
- if (ItalicAngle < 0) {
- m_Flags |= PDFFONT_ITALIC;
- m_ItalicAngle = ItalicAngle;
- }
- FX_BOOL bExistStemV = FALSE;
- if (pFontDesc->KeyExist(FX_BSTRC("StemV"))) {
- m_StemV = pFontDesc->GetInteger(FX_BSTRC("StemV"));
- bExistStemV = TRUE;
- }
- FX_BOOL bExistAscent = FALSE;
- if (pFontDesc->KeyExist(FX_BSTRC("Ascent"))) {
- m_Ascent = pFontDesc->GetInteger(FX_BSTRC("Ascent"));
- bExistAscent = TRUE;
- }
- FX_BOOL bExistDescent = FALSE;
- if (pFontDesc->KeyExist(FX_BSTRC("Descent"))) {
- m_Descent = pFontDesc->GetInteger(FX_BSTRC("Descent"));
- bExistDescent = TRUE;
- }
- FX_BOOL bExistCapHeight = FALSE;
- if (pFontDesc->KeyExist(FX_BSTRC("CapHeight"))) {
- bExistCapHeight = TRUE;
- }
- if (bExistItalicAngle && bExistAscent && bExistCapHeight && bExistDescent && bExistStemV) {
- m_Flags |= PDFFONT_USEEXTERNATTR;
- }
- if (m_Descent > 10) {
- m_Descent = -m_Descent;
- }
- CPDF_Array* pBBox = pFontDesc->GetArray(FX_BSTRC("FontBBox"));
- if (pBBox) {
- m_FontBBox.left = pBBox->GetInteger(0);
- m_FontBBox.bottom = pBBox->GetInteger(1);
- m_FontBBox.right = pBBox->GetInteger(2);
- m_FontBBox.top = pBBox->GetInteger(3);
- }
- CPDF_Stream* pFontFile = pFontDesc->GetStream(FX_BSTRC("FontFile"));
- if (pFontFile == NULL) {
- pFontFile = pFontDesc->GetStream(FX_BSTRC("FontFile2"));
- }
- if (pFontFile == NULL) {
- pFontFile = pFontDesc->GetStream(FX_BSTRC("FontFile3"));
- }
- if (pFontFile) {
- m_pFontFile = m_pDocument->LoadFontFile(pFontFile);
- if (m_pFontFile == NULL) {
- return;
- }
- const uint8_t* pFontData = m_pFontFile->GetData();
- FX_DWORD dwFontSize = m_pFontFile->GetSize();
- m_Font.LoadEmbedded(pFontData, dwFontSize);
- if (m_Font.m_Face == NULL) {
- m_pFontFile = NULL;
- }
- }
-}
-short TT2PDF(int m, FXFT_Face face)
-{
- int upm = FXFT_Get_Face_UnitsPerEM(face);
- if (upm == 0) {
- return (short)m;
- }
- return (m * 1000 + upm / 2) / upm;
-}
-void CPDF_Font::CheckFontMetrics()
-{
- if (m_FontBBox.top == 0 && m_FontBBox.bottom == 0 && m_FontBBox.left == 0 && m_FontBBox.right == 0) {
- if (m_Font.m_Face) {
- m_FontBBox.left = TT2PDF(FXFT_Get_Face_xMin(m_Font.m_Face), m_Font.m_Face);
- m_FontBBox.bottom = TT2PDF(FXFT_Get_Face_yMin(m_Font.m_Face), m_Font.m_Face);
- m_FontBBox.right = TT2PDF(FXFT_Get_Face_xMax(m_Font.m_Face), m_Font.m_Face);
- m_FontBBox.top = TT2PDF(FXFT_Get_Face_yMax(m_Font.m_Face), m_Font.m_Face);
- m_Ascent = TT2PDF(FXFT_Get_Face_Ascender(m_Font.m_Face), m_Font.m_Face);
- m_Descent = TT2PDF(FXFT_Get_Face_Descender(m_Font.m_Face), m_Font.m_Face);
- } else {
- FX_BOOL bFirst = TRUE;
- for (int i = 0; i < 256; i ++) {
- FX_RECT rect;
- GetCharBBox(i, rect);
- if (rect.left == rect.right) {
- continue;
- }
- if (bFirst) {
- m_FontBBox = rect;
- bFirst = FALSE;
- } else {
- if (m_FontBBox.top < rect.top) {
- m_FontBBox.top = rect.top;
- }
- if (m_FontBBox.right < rect.right) {
- m_FontBBox.right = rect.right;
- }
- if (m_FontBBox.left > rect.left) {
- m_FontBBox.left = rect.left;
- }
- if (m_FontBBox.bottom > rect.bottom) {
- m_FontBBox.bottom = rect.bottom;
- }
- }
- }
- }
+ result += (FX_WCHAR)charcode;
+ }
+ }
+ return result;
+}
+CFX_ByteString CPDF_Font::EncodeString(const CFX_WideString& str) const {
+ CFX_ByteString result;
+ int src_len = str.GetLength();
+ FX_CHAR* dest_buf = result.GetBuffer(src_len * 2);
+ const FX_WCHAR* src_buf = str.c_str();
+ int dest_pos = 0;
+ for (int src_pos = 0; src_pos < src_len; src_pos++) {
+ FX_DWORD charcode = CharCodeFromUnicode(src_buf[src_pos]);
+ dest_pos += AppendChar(dest_buf + dest_pos, charcode);
+ }
+ result.ReleaseBuffer(dest_pos);
+ return result;
+}
+void CPDF_Font::LoadFontDescriptor(CPDF_Dictionary* pFontDesc) {
+ m_Flags = pFontDesc->GetInteger(FX_BSTRC("Flags"), PDFFONT_NONSYMBOLIC);
+ int ItalicAngle = 0;
+ FX_BOOL bExistItalicAngle = FALSE;
+ if (pFontDesc->KeyExist(FX_BSTRC("ItalicAngle"))) {
+ ItalicAngle = pFontDesc->GetInteger(FX_BSTRC("ItalicAngle"));
+ bExistItalicAngle = TRUE;
+ }
+ if (ItalicAngle < 0) {
+ m_Flags |= PDFFONT_ITALIC;
+ m_ItalicAngle = ItalicAngle;
+ }
+ FX_BOOL bExistStemV = FALSE;
+ if (pFontDesc->KeyExist(FX_BSTRC("StemV"))) {
+ m_StemV = pFontDesc->GetInteger(FX_BSTRC("StemV"));
+ bExistStemV = TRUE;
+ }
+ FX_BOOL bExistAscent = FALSE;
+ if (pFontDesc->KeyExist(FX_BSTRC("Ascent"))) {
+ m_Ascent = pFontDesc->GetInteger(FX_BSTRC("Ascent"));
+ bExistAscent = TRUE;
+ }
+ FX_BOOL bExistDescent = FALSE;
+ if (pFontDesc->KeyExist(FX_BSTRC("Descent"))) {
+ m_Descent = pFontDesc->GetInteger(FX_BSTRC("Descent"));
+ bExistDescent = TRUE;
+ }
+ FX_BOOL bExistCapHeight = FALSE;
+ if (pFontDesc->KeyExist(FX_BSTRC("CapHeight"))) {
+ bExistCapHeight = TRUE;
+ }
+ if (bExistItalicAngle && bExistAscent && bExistCapHeight && bExistDescent &&
+ bExistStemV) {
+ m_Flags |= PDFFONT_USEEXTERNATTR;
+ }
+ if (m_Descent > 10) {
+ m_Descent = -m_Descent;
+ }
+ CPDF_Array* pBBox = pFontDesc->GetArray(FX_BSTRC("FontBBox"));
+ if (pBBox) {
+ m_FontBBox.left = pBBox->GetInteger(0);
+ m_FontBBox.bottom = pBBox->GetInteger(1);
+ m_FontBBox.right = pBBox->GetInteger(2);
+ m_FontBBox.top = pBBox->GetInteger(3);
+ }
+ CPDF_Stream* pFontFile = pFontDesc->GetStream(FX_BSTRC("FontFile"));
+ if (pFontFile == NULL) {
+ pFontFile = pFontDesc->GetStream(FX_BSTRC("FontFile2"));
+ }
+ if (pFontFile == NULL) {
+ pFontFile = pFontDesc->GetStream(FX_BSTRC("FontFile3"));
+ }
+ if (pFontFile) {
+ m_pFontFile = m_pDocument->LoadFontFile(pFontFile);
+ if (m_pFontFile == NULL) {
+ return;
}
- if (m_Ascent == 0 && m_Descent == 0) {
+ const uint8_t* pFontData = m_pFontFile->GetData();
+ FX_DWORD dwFontSize = m_pFontFile->GetSize();
+ m_Font.LoadEmbedded(pFontData, dwFontSize);
+ if (m_Font.m_Face == NULL) {
+ m_pFontFile = NULL;
+ }
+ }
+}
+short TT2PDF(int m, FXFT_Face face) {
+ int upm = FXFT_Get_Face_UnitsPerEM(face);
+ if (upm == 0) {
+ return (short)m;
+ }
+ return (m * 1000 + upm / 2) / upm;
+}
+void CPDF_Font::CheckFontMetrics() {
+ if (m_FontBBox.top == 0 && m_FontBBox.bottom == 0 && m_FontBBox.left == 0 &&
+ m_FontBBox.right == 0) {
+ if (m_Font.m_Face) {
+ m_FontBBox.left =
+ TT2PDF(FXFT_Get_Face_xMin(m_Font.m_Face), m_Font.m_Face);
+ m_FontBBox.bottom =
+ TT2PDF(FXFT_Get_Face_yMin(m_Font.m_Face), m_Font.m_Face);
+ m_FontBBox.right =
+ TT2PDF(FXFT_Get_Face_xMax(m_Font.m_Face), m_Font.m_Face);
+ m_FontBBox.top = TT2PDF(FXFT_Get_Face_yMax(m_Font.m_Face), m_Font.m_Face);
+ m_Ascent = TT2PDF(FXFT_Get_Face_Ascender(m_Font.m_Face), m_Font.m_Face);
+ m_Descent = TT2PDF(FXFT_Get_Face_Descender(m_Font.m_Face), m_Font.m_Face);
+ } else {
+ FX_BOOL bFirst = TRUE;
+ for (int i = 0; i < 256; i++) {
FX_RECT rect;
- GetCharBBox('A', rect);
- if (rect.bottom == rect.top) {
- m_Ascent = m_FontBBox.top;
- } else {
- m_Ascent = rect.top;
+ GetCharBBox(i, rect);
+ if (rect.left == rect.right) {
+ continue;
}
- GetCharBBox('g', rect);
- if (rect.bottom == rect.top) {
- m_Descent = m_FontBBox.bottom;
+ if (bFirst) {
+ m_FontBBox = rect;
+ bFirst = FALSE;
} else {
- m_Descent = rect.bottom;
- }
- }
-}
-void CPDF_Font::LoadUnicodeMap()
-{
- m_bToUnicodeLoaded = TRUE;
- CPDF_Stream* pStream = m_pFontDict->GetStream(FX_BSTRC("ToUnicode"));
- if (pStream == NULL) {
- return;
- }
- m_pToUnicodeMap = new CPDF_ToUnicodeMap;
- m_pToUnicodeMap->Load(pStream);
-}
-int CPDF_Font::GetStringWidth(const FX_CHAR* pString, int size)
-{
- int offset = 0;
- int width = 0;
- while (offset < size) {
- FX_DWORD charcode = GetNextChar(pString, size, offset);
- width += GetCharWidthF(charcode);
- }
- return width;
-}
-int CPDF_Font::GetCharTypeWidth(FX_DWORD charcode)
-{
- if (m_Font.m_Face == NULL) {
- return 0;
- }
- int glyph_index = GlyphFromCharCode(charcode);
- if (glyph_index == 0xffff) {
- return 0;
+ if (m_FontBBox.top < rect.top) {
+ m_FontBBox.top = rect.top;
+ }
+ if (m_FontBBox.right < rect.right) {
+ m_FontBBox.right = rect.right;
+ }
+ if (m_FontBBox.left > rect.left) {
+ m_FontBBox.left = rect.left;
+ }
+ if (m_FontBBox.bottom > rect.bottom) {
+ m_FontBBox.bottom = rect.bottom;
+ }
+ }
+ }
+ }
+ }
+ if (m_Ascent == 0 && m_Descent == 0) {
+ FX_RECT rect;
+ GetCharBBox('A', rect);
+ if (rect.bottom == rect.top) {
+ m_Ascent = m_FontBBox.top;
+ } else {
+ m_Ascent = rect.top;
}
- return m_Font.GetGlyphWidth(glyph_index);
+ GetCharBBox('g', rect);
+ if (rect.bottom == rect.top) {
+ m_Descent = m_FontBBox.bottom;
+ } else {
+ m_Descent = rect.bottom;
+ }
+ }
+}
+void CPDF_Font::LoadUnicodeMap() {
+ m_bToUnicodeLoaded = TRUE;
+ CPDF_Stream* pStream = m_pFontDict->GetStream(FX_BSTRC("ToUnicode"));
+ if (pStream == NULL) {
+ return;
+ }
+ m_pToUnicodeMap = new CPDF_ToUnicodeMap;
+ m_pToUnicodeMap->Load(pStream);
+}
+int CPDF_Font::GetStringWidth(const FX_CHAR* pString, int size) {
+ int offset = 0;
+ int width = 0;
+ while (offset < size) {
+ FX_DWORD charcode = GetNextChar(pString, size, offset);
+ width += GetCharWidthF(charcode);
+ }
+ return width;
+}
+int CPDF_Font::GetCharTypeWidth(FX_DWORD charcode) {
+ if (m_Font.m_Face == NULL) {
+ return 0;
+ }
+ int glyph_index = GlyphFromCharCode(charcode);
+ if (glyph_index == 0xffff) {
+ return 0;
+ }
+ return m_Font.GetGlyphWidth(glyph_index);
}
int _PDF_GetStandardFontName(CFX_ByteString& name);
-CPDF_Font* CPDF_Font::GetStockFont(CPDF_Document* pDoc, const CFX_ByteStringC& name)
-{
- CFX_ByteString fontname(name);
- int font_id = _PDF_GetStandardFontName(fontname);
- if (font_id < 0) {
- return NULL;
- }
- CPDF_FontGlobals* pFontGlobals = CPDF_ModuleMgr::Get()->GetPageModule()->GetFontGlobals();
- CPDF_Font* pFont = pFontGlobals->Find(pDoc, font_id);
- if (pFont) {
- return pFont;
- }
- CPDF_Dictionary* pDict = CPDF_Dictionary::Create();
- pDict->SetAtName(FX_BSTRC("Type"), FX_BSTRC("Font"));
- pDict->SetAtName(FX_BSTRC("Subtype"), FX_BSTRC("Type1"));
- pDict->SetAtName(FX_BSTRC("BaseFont"), fontname);
- pDict->SetAtName(FX_BSTRC("Encoding"), FX_BSTRC("WinAnsiEncoding"));
- pFont = CPDF_Font::CreateFontF(NULL, pDict);
- pFontGlobals->Set(pDoc, font_id, pFont);
- return pFont;
-}
-const uint8_t ChineseFontNames[][5] = {
- {0xCB, 0xCE, 0xCC, 0xE5, 0x00},
- {0xBF, 0xAC, 0xCC, 0xE5, 0x00},
- {0xBA, 0xDA, 0xCC, 0xE5, 0x00},
- {0xB7, 0xC2, 0xCB, 0xCE, 0x00},
- {0xD0, 0xC2, 0xCB, 0xCE, 0x00}
-};
-CPDF_Font* CPDF_Font::CreateFontF(CPDF_Document* pDoc, CPDF_Dictionary* pFontDict)
-{
- CFX_ByteString type = pFontDict->GetString(FX_BSTRC("Subtype"));
- CPDF_Font* pFont;
- if (type == FX_BSTRC("TrueType")) {
- {
-#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ || _FXM_PLATFORM_ == _FXM_PLATFORM_LINUX_ || _FXM_PLATFORM_ == _FXM_PLATFORM_ANDROID_ || _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
- CFX_ByteString basefont = pFontDict->GetString(FX_BSTRC("BaseFont"));
- CFX_ByteString tag = basefont.Left(4);
- int i;
- int count = sizeof(ChineseFontNames) / sizeof(ChineseFontNames[0]);
- for (i = 0; i < count; ++i) {
- if (tag == CFX_ByteString((const FX_CHAR*)ChineseFontNames[i])) {
- break;
- }
- }
- if (i < count) {
- CPDF_Dictionary* pFontDesc = pFontDict->GetDict(FX_BSTRC("FontDescriptor"));
- if (pFontDesc == NULL || !pFontDesc->KeyExist(FX_BSTRC("FontFile2"))) {
- pFont = new CPDF_CIDFont;
- pFont->m_pFontDict = pFontDict;
- pFont->m_pDocument = pDoc;
- if (!pFont->Load()) {
- delete pFont;
- return NULL;
- }
- return pFont;
- }
- }
-#endif
- }
- pFont = new CPDF_TrueTypeFont;
- } else if (type == FX_BSTRC("Type3")) {
- pFont = new CPDF_Type3Font;
- } else if (type == FX_BSTRC("Type0")) {
- pFont = new CPDF_CIDFont;
- } else {
- pFont = new CPDF_Type1Font;
- }
- pFont->m_pFontDict = pFontDict;
- pFont->m_pDocument = pDoc;
- if (!pFont->Load()) {
- delete pFont;
- return NULL;
- }
+CPDF_Font* CPDF_Font::GetStockFont(CPDF_Document* pDoc,
+ const CFX_ByteStringC& name) {
+ CFX_ByteString fontname(name);
+ int font_id = _PDF_GetStandardFontName(fontname);
+ if (font_id < 0) {
+ return NULL;
+ }
+ CPDF_FontGlobals* pFontGlobals =
+ CPDF_ModuleMgr::Get()->GetPageModule()->GetFontGlobals();
+ CPDF_Font* pFont = pFontGlobals->Find(pDoc, font_id);
+ if (pFont) {
return pFont;
-}
-FX_BOOL CPDF_Font::Load()
-{
- if (m_pFontDict == NULL) {
- return FALSE;
- }
- CFX_ByteString type = m_pFontDict->GetString(FX_BSTRC("Subtype"));
- m_BaseFont = m_pFontDict->GetString(FX_BSTRC("BaseFont"));
- if (type == FX_BSTRC("MMType1")) {
- type = FX_BSTRC("Type1");
- }
- return _Load();
-}
-static CFX_WideString _FontMap_GetWideString(CFX_CharMap* pMap, const CFX_ByteString& bytestr)
-{
- return ((CPDF_FontCharMap*)pMap)->m_pFont->DecodeString(bytestr);
-}
-static CFX_ByteString _FontMap_GetByteString(CFX_CharMap* pMap, const CFX_WideString& widestr)
-{
- return ((CPDF_FontCharMap*)pMap)->m_pFont->EncodeString(widestr);
-}
-CPDF_FontCharMap::CPDF_FontCharMap(CPDF_Font* pFont)
-{
- m_GetByteString = _FontMap_GetByteString;
- m_GetWideString = _FontMap_GetWideString;
- m_pFont = pFont;
-}
-CFX_WideString CPDF_ToUnicodeMap::Lookup(FX_DWORD charcode)
-{
- FX_DWORD value;
- if (m_Map.Lookup(charcode, value)) {
- FX_WCHAR unicode = (FX_WCHAR)(value & 0xffff);
- if (unicode != 0xffff) {
- return unicode;
- }
- const FX_WCHAR* buf = m_MultiCharBuf.GetBuffer();
- FX_DWORD buf_len = m_MultiCharBuf.GetLength();
- if (buf == NULL || buf_len == 0) {
- return CFX_WideString();
- }
- FX_DWORD index = value >> 16;
- if (index >= buf_len) {
- return CFX_WideString();
- }
- FX_DWORD len = buf[index];
- if (index + len < index || index + len >= buf_len) {
- return CFX_WideString();
+ }
+ CPDF_Dictionary* pDict = CPDF_Dictionary::Create();
+ pDict->SetAtName(FX_BSTRC("Type"), FX_BSTRC("Font"));
+ pDict->SetAtName(FX_BSTRC("Subtype"), FX_BSTRC("Type1"));
+ pDict->SetAtName(FX_BSTRC("BaseFont"), fontname);
+ pDict->SetAtName(FX_BSTRC("Encoding"), FX_BSTRC("WinAnsiEncoding"));
+ pFont = CPDF_Font::CreateFontF(NULL, pDict);
+ pFontGlobals->Set(pDoc, font_id, pFont);
+ return pFont;
+}
+const uint8_t ChineseFontNames[][5] = {{0xCB, 0xCE, 0xCC, 0xE5, 0x00},
+ {0xBF, 0xAC, 0xCC, 0xE5, 0x00},
+ {0xBA, 0xDA, 0xCC, 0xE5, 0x00},
+ {0xB7, 0xC2, 0xCB, 0xCE, 0x00},
+ {0xD0, 0xC2, 0xCB, 0xCE, 0x00}};
+CPDF_Font* CPDF_Font::CreateFontF(CPDF_Document* pDoc,
+ CPDF_Dictionary* pFontDict) {
+ CFX_ByteString type = pFontDict->GetString(FX_BSTRC("Subtype"));
+ CPDF_Font* pFont;
+ if (type == FX_BSTRC("TrueType")) {
+ {
+#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ || \
+ _FXM_PLATFORM_ == _FXM_PLATFORM_LINUX_ || \
+ _FXM_PLATFORM_ == _FXM_PLATFORM_ANDROID_ || \
+ _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
+ CFX_ByteString basefont = pFontDict->GetString(FX_BSTRC("BaseFont"));
+ CFX_ByteString tag = basefont.Left(4);
+ int i;
+ int count = sizeof(ChineseFontNames) / sizeof(ChineseFontNames[0]);
+ for (i = 0; i < count; ++i) {
+ if (tag == CFX_ByteString((const FX_CHAR*)ChineseFontNames[i])) {
+ break;
+ }
+ }
+ if (i < count) {
+ CPDF_Dictionary* pFontDesc =
+ pFontDict->GetDict(FX_BSTRC("FontDescriptor"));
+ if (pFontDesc == NULL || !pFontDesc->KeyExist(FX_BSTRC("FontFile2"))) {
+ pFont = new CPDF_CIDFont;
+ pFont->m_pFontDict = pFontDict;
+ pFont->m_pDocument = pDoc;
+ if (!pFont->Load()) {
+ delete pFont;
+ return NULL;
+ }
+ return pFont;
}
- return CFX_WideString(buf + index + 1, len);
- }
- if (m_pBaseMap) {
- return m_pBaseMap->UnicodeFromCID((FX_WORD)charcode);
+ }
+#endif
}
- return CFX_WideString();
+ pFont = new CPDF_TrueTypeFont;
+ } else if (type == FX_BSTRC("Type3")) {
+ pFont = new CPDF_Type3Font;
+ } else if (type == FX_BSTRC("Type0")) {
+ pFont = new CPDF_CIDFont;
+ } else {
+ pFont = new CPDF_Type1Font;
+ }
+ pFont->m_pFontDict = pFontDict;
+ pFont->m_pDocument = pDoc;
+ if (!pFont->Load()) {
+ delete pFont;
+ return NULL;
+ }
+ return pFont;
}
-FX_DWORD CPDF_ToUnicodeMap::ReverseLookup(FX_WCHAR unicode)
-{
- FX_POSITION pos = m_Map.GetStartPosition();
- while (pos) {
- FX_DWORD key, value;
- m_Map.GetNextAssoc(pos, key, value);
- if ((FX_WCHAR)value == unicode) {
- return key;
- }
- }
+FX_BOOL CPDF_Font::Load() {
+ if (m_pFontDict == NULL) {
+ return FALSE;
+ }
+ CFX_ByteString type = m_pFontDict->GetString(FX_BSTRC("Subtype"));
+ m_BaseFont = m_pFontDict->GetString(FX_BSTRC("BaseFont"));
+ if (type == FX_BSTRC("MMType1")) {
+ type = FX_BSTRC("Type1");
+ }
+ return _Load();
+}
+static CFX_WideString _FontMap_GetWideString(CFX_CharMap* pMap,
+ const CFX_ByteString& bytestr) {
+ return ((CPDF_FontCharMap*)pMap)->m_pFont->DecodeString(bytestr);
+}
+static CFX_ByteString _FontMap_GetByteString(CFX_CharMap* pMap,
+ const CFX_WideString& widestr) {
+ return ((CPDF_FontCharMap*)pMap)->m_pFont->EncodeString(widestr);
+}
+CPDF_FontCharMap::CPDF_FontCharMap(CPDF_Font* pFont) {
+ m_GetByteString = _FontMap_GetByteString;
+ m_GetWideString = _FontMap_GetWideString;
+ m_pFont = pFont;
+}
+CFX_WideString CPDF_ToUnicodeMap::Lookup(FX_DWORD charcode) {
+ FX_DWORD value;
+ if (m_Map.Lookup(charcode, value)) {
+ FX_WCHAR unicode = (FX_WCHAR)(value & 0xffff);
+ if (unicode != 0xffff) {
+ return unicode;
+ }
+ const FX_WCHAR* buf = m_MultiCharBuf.GetBuffer();
+ FX_DWORD buf_len = m_MultiCharBuf.GetLength();
+ if (buf == NULL || buf_len == 0) {
+ return CFX_WideString();
+ }
+ FX_DWORD index = value >> 16;
+ if (index >= buf_len) {
+ return CFX_WideString();
+ }
+ FX_DWORD len = buf[index];
+ if (index + len < index || index + len >= buf_len) {
+ return CFX_WideString();
+ }
+ return CFX_WideString(buf + index + 1, len);
+ }
+ if (m_pBaseMap) {
+ return m_pBaseMap->UnicodeFromCID((FX_WORD)charcode);
+ }
+ return CFX_WideString();
+}
+FX_DWORD CPDF_ToUnicodeMap::ReverseLookup(FX_WCHAR unicode) {
+ FX_POSITION pos = m_Map.GetStartPosition();
+ while (pos) {
+ FX_DWORD key, value;
+ m_Map.GetNextAssoc(pos, key, value);
+ if ((FX_WCHAR)value == unicode) {
+ return key;
+ }
+ }
+ return 0;
+}
+static FX_DWORD _StringToCode(const CFX_ByteStringC& str) {
+ const FX_CHAR* buf = str.GetCStr();
+ int len = str.GetLength();
+ if (len == 0) {
return 0;
-}
-static FX_DWORD _StringToCode(const CFX_ByteStringC& str)
-{
- const FX_CHAR* buf = str.GetCStr();
- int len = str.GetLength();
- if (len == 0) {
- return 0;
- }
- int result = 0;
- if (buf[0] == '<') {
- for (int i = 1; i < len; i ++) {
- int digit;
- if (buf[i] >= '0' && buf[i] <= '9') {
- digit = buf[i] - '0';
- } else if (buf[i] >= 'a' && buf[i] <= 'f') {
- digit = buf[i] - 'a' + 10;
- } else if (buf[i] >= 'A' && buf[i] <= 'F') {
- digit = buf[i] - 'A' + 10;
- } else {
- break;
- }
- result = result * 16 + digit;
- }
- return result;
+ }
+ int result = 0;
+ if (buf[0] == '<') {
+ for (int i = 1; i < len; i++) {
+ int digit;
+ if (buf[i] >= '0' && buf[i] <= '9') {
+ digit = buf[i] - '0';
+ } else if (buf[i] >= 'a' && buf[i] <= 'f') {
+ digit = buf[i] - 'a' + 10;
+ } else if (buf[i] >= 'A' && buf[i] <= 'F') {
+ digit = buf[i] - 'A' + 10;
+ } else {
+ break;
+ }
+ result = result * 16 + digit;
}
- for (int i = 0; i < len; i ++) {
- if (buf[i] < '0' || buf[i] > '9') {
- break;
- }
- result = result * 10 + buf[i] - '0';
+ return result;
+ }
+ for (int i = 0; i < len; i++) {
+ if (buf[i] < '0' || buf[i] > '9') {
+ break;
+ }
+ result = result * 10 + buf[i] - '0';
+ }
+ return result;
+}
+static CFX_WideString _StringDataAdd(CFX_WideString str) {
+ CFX_WideString ret;
+ int len = str.GetLength();
+ FX_WCHAR value = 1;
+ for (int i = len - 1; i >= 0; --i) {
+ FX_WCHAR ch = str[i] + value;
+ if (ch < str[i]) {
+ ret.Insert(0, 0);
+ } else {
+ ret.Insert(0, ch);
+ value = 0;
+ }
+ }
+ if (value) {
+ ret.Insert(0, value);
+ }
+ return ret;
+}
+static CFX_WideString _StringToWideString(const CFX_ByteStringC& str) {
+ const FX_CHAR* buf = str.GetCStr();
+ int len = str.GetLength();
+ if (len == 0) {
+ return CFX_WideString();
+ }
+ CFX_WideString result;
+ if (buf[0] == '<') {
+ int byte_pos = 0;
+ FX_WCHAR ch = 0;
+ for (int i = 1; i < len; i++) {
+ int digit;
+ if (buf[i] >= '0' && buf[i] <= '9') {
+ digit = buf[i] - '0';
+ } else if (buf[i] >= 'a' && buf[i] <= 'f') {
+ digit = buf[i] - 'a' + 10;
+ } else if (buf[i] >= 'A' && buf[i] <= 'F') {
+ digit = buf[i] - 'A' + 10;
+ } else {
+ break;
+ }
+ ch = ch * 16 + digit;
+ byte_pos++;
+ if (byte_pos == 4) {
+ result += ch;
+ byte_pos = 0;
+ ch = 0;
+ }
}
return result;
-}
-static CFX_WideString _StringDataAdd(CFX_WideString str)
-{
- CFX_WideString ret;
- int len = str.GetLength();
- FX_WCHAR value = 1;
- for (int i = len - 1; i >= 0 ; --i) {
- FX_WCHAR ch = str[i] + value;
- if (ch < str[i]) {
- ret.Insert(0, 0);
+ }
+ if (buf[0] == '(') {
+ }
+ return result;
+}
+void CPDF_ToUnicodeMap::Load(CPDF_Stream* pStream) {
+ int CIDSet = 0;
+ CPDF_StreamAcc stream;
+ stream.LoadAllData(pStream, FALSE);
+ CPDF_SimpleParser parser(stream.GetData(), stream.GetSize());
+ m_Map.EstimateSize(stream.GetSize() / 8, 1024);
+ while (1) {
+ CFX_ByteStringC word = parser.GetWord();
+ if (word.IsEmpty()) {
+ break;
+ }
+ if (word == FX_BSTRC("beginbfchar")) {
+ while (1) {
+ word = parser.GetWord();
+ if (word.IsEmpty() || word == FX_BSTRC("endbfchar")) {
+ break;
+ }
+ FX_DWORD srccode = _StringToCode(word);
+ word = parser.GetWord();
+ CFX_WideString destcode = _StringToWideString(word);
+ int len = destcode.GetLength();
+ if (len == 0) {
+ continue;
+ }
+ if (len == 1) {
+ m_Map.SetAt(srccode, destcode.GetAt(0));
} else {
- ret.Insert(0, ch);
- value = 0;
- }
- }
- if (value) {
- ret.Insert(0, value);
- }
- return ret;
-}
-static CFX_WideString _StringToWideString(const CFX_ByteStringC& str)
-{
- const FX_CHAR* buf = str.GetCStr();
- int len = str.GetLength();
- if (len == 0) {
- return CFX_WideString();
- }
- CFX_WideString result;
- if (buf[0] == '<') {
- int byte_pos = 0;
- FX_WCHAR ch = 0;
- for (int i = 1; i < len; i ++) {
- int digit;
- if (buf[i] >= '0' && buf[i] <= '9') {
- digit = buf[i] - '0';
- } else if (buf[i] >= 'a' && buf[i] <= 'f') {
- digit = buf[i] - 'a' + 10;
- } else if (buf[i] >= 'A' && buf[i] <= 'F') {
- digit = buf[i] - 'A' + 10;
- } else {
- break;
+ m_Map.SetAt(srccode, m_MultiCharBuf.GetLength() * 0x10000 + 0xffff);
+ m_MultiCharBuf.AppendChar(destcode.GetLength());
+ m_MultiCharBuf << destcode;
+ }
+ }
+ } else if (word == FX_BSTRC("beginbfrange")) {
+ while (1) {
+ CFX_ByteString low, high;
+ low = parser.GetWord();
+ if (low.IsEmpty() || low == FX_BSTRC("endbfrange")) {
+ break;
+ }
+ high = parser.GetWord();
+ FX_DWORD lowcode = _StringToCode(low);
+ FX_DWORD highcode =
+ (lowcode & 0xffffff00) | (_StringToCode(high) & 0xff);
+ if (highcode == (FX_DWORD)-1) {
+ break;
+ }
+ CFX_ByteString start = parser.GetWord();
+ if (start == FX_BSTRC("[")) {
+ for (FX_DWORD code = lowcode; code <= highcode; code++) {
+ CFX_ByteString dest = parser.GetWord();
+ CFX_WideString destcode = _StringToWideString(dest);
+ int len = destcode.GetLength();
+ if (len == 0) {
+ continue;
}
- ch = ch * 16 + digit;
- byte_pos ++;
- if (byte_pos == 4) {
- result += ch;
- byte_pos = 0;
- ch = 0;
+ if (len == 1) {
+ m_Map.SetAt(code, destcode.GetAt(0));
+ } else {
+ m_Map.SetAt(code, m_MultiCharBuf.GetLength() * 0x10000 + 0xffff);
+ m_MultiCharBuf.AppendChar(destcode.GetLength());
+ m_MultiCharBuf << destcode;
}
- }
- return result;
- }
- if (buf[0] == '(') {
- }
- return result;
-}
-void CPDF_ToUnicodeMap::Load(CPDF_Stream* pStream)
-{
- int CIDSet = 0;
- CPDF_StreamAcc stream;
- stream.LoadAllData(pStream, FALSE);
- CPDF_SimpleParser parser(stream.GetData(), stream.GetSize());
- m_Map.EstimateSize(stream.GetSize() / 8, 1024);
- while (1) {
- CFX_ByteStringC word = parser.GetWord();
- if (word.IsEmpty()) {
- break;
- }
- if (word == FX_BSTRC("beginbfchar")) {
- while (1) {
- word = parser.GetWord();
- if (word.IsEmpty() || word == FX_BSTRC("endbfchar")) {
- break;
- }
- FX_DWORD srccode = _StringToCode(word);
- word = parser.GetWord();
- CFX_WideString destcode = _StringToWideString(word);
- int len = destcode.GetLength();
- if (len == 0) {
- continue;
- }
- if (len == 1) {
- m_Map.SetAt(srccode, destcode.GetAt(0));
- } else {
- m_Map.SetAt(srccode, m_MultiCharBuf.GetLength() * 0x10000 + 0xffff);
- m_MultiCharBuf.AppendChar(destcode.GetLength());
- m_MultiCharBuf << destcode;
- }
+ }
+ parser.GetWord();
+ } else {
+ CFX_WideString destcode = _StringToWideString(start);
+ int len = destcode.GetLength();
+ FX_DWORD value = 0;
+ if (len == 1) {
+ value = _StringToCode(start);
+ for (FX_DWORD code = lowcode; code <= highcode; code++) {
+ m_Map.SetAt(code, value++);
}
- } else if (word == FX_BSTRC("beginbfrange")) {
- while (1) {
- CFX_ByteString low, high;
- low = parser.GetWord();
- if (low.IsEmpty() || low == FX_BSTRC("endbfrange")) {
- break;
- }
- high = parser.GetWord();
- FX_DWORD lowcode = _StringToCode(low);
- FX_DWORD highcode = (lowcode & 0xffffff00) | (_StringToCode(high) & 0xff);
- if (highcode == (FX_DWORD) - 1) {
- break;
- }
- CFX_ByteString start = parser.GetWord();
- if (start == FX_BSTRC("[")) {
- for (FX_DWORD code = lowcode; code <= highcode; code ++) {
- CFX_ByteString dest = parser.GetWord();
- CFX_WideString destcode = _StringToWideString(dest);
- int len = destcode.GetLength();
- if (len == 0) {
- continue;
- }
- if (len == 1) {
- m_Map.SetAt(code, destcode.GetAt(0));
- } else {
- m_Map.SetAt(code, m_MultiCharBuf.GetLength() * 0x10000 + 0xffff);
- m_MultiCharBuf.AppendChar(destcode.GetLength());
- m_MultiCharBuf << destcode;
- }
- }
- parser.GetWord();
- } else {
- CFX_WideString destcode = _StringToWideString(start);
- int len = destcode.GetLength();
- FX_DWORD value = 0;
- if (len == 1) {
- value = _StringToCode(start);
- for (FX_DWORD code = lowcode; code <= highcode; code ++) {
- m_Map.SetAt(code, value++);
- }
- } else {
- for (FX_DWORD code = lowcode; code <= highcode; code ++) {
- CFX_WideString retcode;
- if (code == lowcode) {
- retcode = destcode;
- } else {
- retcode = _StringDataAdd(destcode);
- }
- m_Map.SetAt(code, m_MultiCharBuf.GetLength() * 0x10000 + 0xffff);
- m_MultiCharBuf.AppendChar(retcode.GetLength());
- m_MultiCharBuf << retcode;
- destcode = retcode;
- }
- }
- }
+ } else {
+ for (FX_DWORD code = lowcode; code <= highcode; code++) {
+ CFX_WideString retcode;
+ if (code == lowcode) {
+ retcode = destcode;
+ } else {
+ retcode = _StringDataAdd(destcode);
+ }
+ m_Map.SetAt(code, m_MultiCharBuf.GetLength() * 0x10000 + 0xffff);
+ m_MultiCharBuf.AppendChar(retcode.GetLength());
+ m_MultiCharBuf << retcode;
+ destcode = retcode;
}
- } else if (word == FX_BSTRC("/Adobe-Korea1-UCS2")) {
- CIDSet = CIDSET_KOREA1;
- } else if (word == FX_BSTRC("/Adobe-Japan1-UCS2")) {
- CIDSet = CIDSET_JAPAN1;
- } else if (word == FX_BSTRC("/Adobe-CNS1-UCS2")) {
- CIDSet = CIDSET_CNS1;
- } else if (word == FX_BSTRC("/Adobe-GB1-UCS2")) {
- CIDSet = CIDSET_GB1;
- }
- }
- if (CIDSet) {
- m_pBaseMap = CPDF_ModuleMgr::Get()->GetPageModule()->GetFontGlobals()->m_CMapManager.GetCID2UnicodeMap(CIDSet, FALSE);
- } else {
- m_pBaseMap = NULL;
- }
-}
-static FX_BOOL GetPredefinedEncoding(int& basemap, const CFX_ByteString& value)
-{
- if (value == FX_BSTRC("WinAnsiEncoding")) {
- basemap = PDFFONT_ENCODING_WINANSI;
- } else if (value == FX_BSTRC("MacRomanEncoding")) {
- basemap = PDFFONT_ENCODING_MACROMAN;
- } else if (value == FX_BSTRC("MacExpertEncoding")) {
- basemap = PDFFONT_ENCODING_MACEXPERT;
- } else if (value == FX_BSTRC("PDFDocEncoding")) {
- basemap = PDFFONT_ENCODING_PDFDOC;
+ }
+ }
+ }
+ } else if (word == FX_BSTRC("/Adobe-Korea1-UCS2")) {
+ CIDSet = CIDSET_KOREA1;
+ } else if (word == FX_BSTRC("/Adobe-Japan1-UCS2")) {
+ CIDSet = CIDSET_JAPAN1;
+ } else if (word == FX_BSTRC("/Adobe-CNS1-UCS2")) {
+ CIDSet = CIDSET_CNS1;
+ } else if (word == FX_BSTRC("/Adobe-GB1-UCS2")) {
+ CIDSet = CIDSET_GB1;
+ }
+ }
+ if (CIDSet) {
+ m_pBaseMap = CPDF_ModuleMgr::Get()
+ ->GetPageModule()
+ ->GetFontGlobals()
+ ->m_CMapManager.GetCID2UnicodeMap(CIDSet, FALSE);
+ } else {
+ m_pBaseMap = NULL;
+ }
+}
+static FX_BOOL GetPredefinedEncoding(int& basemap,
+ const CFX_ByteString& value) {
+ if (value == FX_BSTRC("WinAnsiEncoding")) {
+ basemap = PDFFONT_ENCODING_WINANSI;
+ } else if (value == FX_BSTRC("MacRomanEncoding")) {
+ basemap = PDFFONT_ENCODING_MACROMAN;
+ } else if (value == FX_BSTRC("MacExpertEncoding")) {
+ basemap = PDFFONT_ENCODING_MACEXPERT;
+ } else if (value == FX_BSTRC("PDFDocEncoding")) {
+ basemap = PDFFONT_ENCODING_PDFDOC;
+ } else {
+ return FALSE;
+ }
+ return TRUE;
+}
+void CPDF_Font::LoadPDFEncoding(CPDF_Object* pEncoding,
+ int& iBaseEncoding,
+ CFX_ByteString*& pCharNames,
+ FX_BOOL bEmbedded,
+ FX_BOOL bTrueType) {
+ if (pEncoding == NULL) {
+ if (m_BaseFont == FX_BSTRC("Symbol")) {
+ iBaseEncoding = bTrueType ? PDFFONT_ENCODING_MS_SYMBOL
+ : PDFFONT_ENCODING_ADOBE_SYMBOL;
+ } else if (!bEmbedded && iBaseEncoding == PDFFONT_ENCODING_BUILTIN) {
+ iBaseEncoding = PDFFONT_ENCODING_WINANSI;
+ }
+ return;
+ }
+ if (pEncoding->GetType() == PDFOBJ_NAME) {
+ if (iBaseEncoding == PDFFONT_ENCODING_ADOBE_SYMBOL ||
+ iBaseEncoding == PDFFONT_ENCODING_ZAPFDINGBATS) {
+ return;
+ }
+ if ((m_Flags & PDFFONT_SYMBOLIC) && m_BaseFont == FX_BSTRC("Symbol")) {
+ if (!bTrueType) {
+ iBaseEncoding = PDFFONT_ENCODING_ADOBE_SYMBOL;
+ }
+ return;
+ }
+ CFX_ByteString bsEncoding = pEncoding->GetString();
+ if (bsEncoding.Compare(FX_BSTRC("MacExpertEncoding")) == 0) {
+ bsEncoding = FX_BSTRC("WinAnsiEncoding");
+ }
+ GetPredefinedEncoding(iBaseEncoding, bsEncoding);
+ return;
+ }
+ if (pEncoding->GetType() != PDFOBJ_DICTIONARY) {
+ return;
+ }
+ CPDF_Dictionary* pDict = (CPDF_Dictionary*)pEncoding;
+ if (iBaseEncoding != PDFFONT_ENCODING_ADOBE_SYMBOL &&
+ iBaseEncoding != PDFFONT_ENCODING_ZAPFDINGBATS) {
+ CFX_ByteString bsEncoding = pDict->GetString(FX_BSTRC("BaseEncoding"));
+ if (bsEncoding.Compare(FX_BSTRC("MacExpertEncoding")) == 0 && bTrueType) {
+ bsEncoding = FX_BSTRC("WinAnsiEncoding");
+ }
+ GetPredefinedEncoding(iBaseEncoding, bsEncoding);
+ }
+ if ((!bEmbedded || bTrueType) && iBaseEncoding == PDFFONT_ENCODING_BUILTIN) {
+ iBaseEncoding = PDFFONT_ENCODING_STANDARD;
+ }
+ CPDF_Array* pDiffs = pDict->GetArray(FX_BSTRC("Differences"));
+ if (pDiffs == NULL) {
+ return;
+ }
+ pCharNames = new CFX_ByteString[256];
+ FX_DWORD cur_code = 0;
+ for (FX_DWORD i = 0; i < pDiffs->GetCount(); i++) {
+ CPDF_Object* pElement = pDiffs->GetElementValue(i);
+ if (pElement == NULL) {
+ continue;
+ }
+ if (pElement->GetType() == PDFOBJ_NAME) {
+ if (cur_code < 256) {
+ pCharNames[cur_code] = ((CPDF_Name*)pElement)->GetString();
+ }
+ cur_code++;
} else {
- return FALSE;
- }
- return TRUE;
-}
-void CPDF_Font::LoadPDFEncoding(CPDF_Object* pEncoding, int& iBaseEncoding, CFX_ByteString*& pCharNames,
- FX_BOOL bEmbedded, FX_BOOL bTrueType)
-{
- if (pEncoding == NULL) {
- if (m_BaseFont == FX_BSTRC("Symbol")) {
- iBaseEncoding = bTrueType ? PDFFONT_ENCODING_MS_SYMBOL : PDFFONT_ENCODING_ADOBE_SYMBOL;
- } else if (!bEmbedded && iBaseEncoding == PDFFONT_ENCODING_BUILTIN) {
- iBaseEncoding = PDFFONT_ENCODING_WINANSI;
- }
- return;
- }
- if (pEncoding->GetType() == PDFOBJ_NAME) {
- if (iBaseEncoding == PDFFONT_ENCODING_ADOBE_SYMBOL || iBaseEncoding == PDFFONT_ENCODING_ZAPFDINGBATS) {
- return;
- }
- if ((m_Flags & PDFFONT_SYMBOLIC) && m_BaseFont == FX_BSTRC("Symbol")) {
- if (!bTrueType) {
- iBaseEncoding = PDFFONT_ENCODING_ADOBE_SYMBOL;
- }
- return;
- }
- CFX_ByteString bsEncoding = pEncoding->GetString();
- if (bsEncoding.Compare(FX_BSTRC("MacExpertEncoding")) == 0) {
- bsEncoding = FX_BSTRC("WinAnsiEncoding");
- }
- GetPredefinedEncoding(iBaseEncoding, bsEncoding);
- return;
+ cur_code = pElement->GetInteger();
}
- if (pEncoding->GetType() != PDFOBJ_DICTIONARY) {
- return;
- }
- CPDF_Dictionary* pDict = (CPDF_Dictionary*)pEncoding;
- if (iBaseEncoding != PDFFONT_ENCODING_ADOBE_SYMBOL && iBaseEncoding != PDFFONT_ENCODING_ZAPFDINGBATS) {
- CFX_ByteString bsEncoding = pDict->GetString(FX_BSTRC("BaseEncoding"));
- if (bsEncoding.Compare(FX_BSTRC("MacExpertEncoding")) == 0 && bTrueType) {
- bsEncoding = FX_BSTRC("WinAnsiEncoding");
- }
- GetPredefinedEncoding(iBaseEncoding, bsEncoding);
- }
- if ((!bEmbedded || bTrueType) && iBaseEncoding == PDFFONT_ENCODING_BUILTIN) {
- iBaseEncoding = PDFFONT_ENCODING_STANDARD;
- }
- CPDF_Array* pDiffs = pDict->GetArray(FX_BSTRC("Differences"));
- if (pDiffs == NULL) {
- return;
- }
- pCharNames = new CFX_ByteString[256];
- FX_DWORD cur_code = 0;
- for (FX_DWORD i = 0; i < pDiffs->GetCount(); i ++) {
- CPDF_Object* pElement = pDiffs->GetElementValue(i);
- if (pElement == NULL) {
- continue;
- }
- if (pElement->GetType() == PDFOBJ_NAME) {
- if (cur_code < 256) {
- pCharNames[cur_code] = ((CPDF_Name*)pElement)->GetString();
- }
- cur_code ++;
- } else {
- cur_code = pElement->GetInteger();
- }
- }
-}
-FX_BOOL CPDF_Font::IsStandardFont() const
-{
- if (m_FontType != PDFFONT_TYPE1) {
- return FALSE;
- }
- if (m_pFontFile != NULL) {
- return FALSE;
- }
- if (((CPDF_Type1Font*)this)->GetBase14Font() < 0) {
- return FALSE;
- }
- return TRUE;
-}
-CPDF_SimpleFont::CPDF_SimpleFont(int fonttype) : CPDF_Font(fonttype)
-{
- FXSYS_memset(m_CharBBox, 0xff, sizeof m_CharBBox);
- FXSYS_memset(m_CharWidth, 0xff, sizeof m_CharWidth);
- FXSYS_memset(m_GlyphIndex, 0xff, sizeof m_GlyphIndex);
- FXSYS_memset(m_ExtGID, 0xff, sizeof m_ExtGID);
- m_pCharNames = NULL;
- m_BaseEncoding = PDFFONT_ENCODING_BUILTIN;
-}
-CPDF_SimpleFont::~CPDF_SimpleFont()
-{
- delete[] m_pCharNames;
-}
-int CPDF_SimpleFont::GlyphFromCharCode(FX_DWORD charcode, FX_BOOL *pVertGlyph)
-{
- if (pVertGlyph) {
- *pVertGlyph = FALSE;
- }
- if (charcode > 0xff) {
- return -1;
- }
- int index = m_GlyphIndex[(uint8_t)charcode];
- if (index == 0xffff) {
- return -1;
- }
- return index;
+ }
}
-void CPDF_SimpleFont::LoadCharMetrics(int charcode)
-{
- if (m_Font.m_Face == NULL) {
- return;
- }
- if (charcode < 0 || charcode > 0xff) {
- return;
- }
- int glyph_index = m_GlyphIndex[charcode];
- if (glyph_index == 0xffff) {
- if (m_pFontFile == NULL && charcode != 32) {
- LoadCharMetrics(32);
- m_CharBBox[charcode] = m_CharBBox[32];
- if (m_bUseFontWidth) {
- m_CharWidth[charcode] = m_CharWidth[32];
- }
- }
- return;
- }
- int err = FXFT_Load_Glyph(m_Font.m_Face, glyph_index, FXFT_LOAD_NO_SCALE | FXFT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH);
- if (err) {
- return;
- }
- m_CharBBox[charcode].Left = TT2PDF(FXFT_Get_Glyph_HoriBearingX(m_Font.m_Face), m_Font.m_Face);
- m_CharBBox[charcode].Right = TT2PDF(FXFT_Get_Glyph_HoriBearingX(m_Font.m_Face) + FXFT_Get_Glyph_Width(m_Font.m_Face), m_Font.m_Face);
- m_CharBBox[charcode].Top = TT2PDF(FXFT_Get_Glyph_HoriBearingY(m_Font.m_Face), m_Font.m_Face);
- m_CharBBox[charcode].Bottom = TT2PDF(FXFT_Get_Glyph_HoriBearingY(m_Font.m_Face) - FXFT_Get_Glyph_Height(m_Font.m_Face), m_Font.m_Face);
- if (m_bUseFontWidth) {
- int TT_Width = TT2PDF(FXFT_Get_Glyph_HoriAdvance(m_Font.m_Face), m_Font.m_Face);
- if (m_CharWidth[charcode] == 0xffff) {
- m_CharWidth[charcode] = TT_Width;
- } else if (TT_Width && !IsEmbedded()) {
- m_CharBBox[charcode].Right = m_CharBBox[charcode].Right * m_CharWidth[charcode] / TT_Width;
- m_CharBBox[charcode].Left = m_CharBBox[charcode].Left * m_CharWidth[charcode] / TT_Width;
- }
- }
-}
-int CPDF_SimpleFont::GetCharWidthF(FX_DWORD charcode, int level)
-{
- if (charcode > 0xff) {
- charcode = 0;
- }
+FX_BOOL CPDF_Font::IsStandardFont() const {
+ if (m_FontType != PDFFONT_TYPE1) {
+ return FALSE;
+ }
+ if (m_pFontFile != NULL) {
+ return FALSE;
+ }
+ if (((CPDF_Type1Font*)this)->GetBase14Font() < 0) {
+ return FALSE;
+ }
+ return TRUE;
+}
+CPDF_SimpleFont::CPDF_SimpleFont(int fonttype) : CPDF_Font(fonttype) {
+ FXSYS_memset(m_CharBBox, 0xff, sizeof m_CharBBox);
+ FXSYS_memset(m_CharWidth, 0xff, sizeof m_CharWidth);
+ FXSYS_memset(m_GlyphIndex, 0xff, sizeof m_GlyphIndex);
+ FXSYS_memset(m_ExtGID, 0xff, sizeof m_ExtGID);
+ m_pCharNames = NULL;
+ m_BaseEncoding = PDFFONT_ENCODING_BUILTIN;
+}
+CPDF_SimpleFont::~CPDF_SimpleFont() {
+ delete[] m_pCharNames;
+}
+int CPDF_SimpleFont::GlyphFromCharCode(FX_DWORD charcode, FX_BOOL* pVertGlyph) {
+ if (pVertGlyph) {
+ *pVertGlyph = FALSE;
+ }
+ if (charcode > 0xff) {
+ return -1;
+ }
+ int index = m_GlyphIndex[(uint8_t)charcode];
+ if (index == 0xffff) {
+ return -1;
+ }
+ return index;
+}
+void CPDF_SimpleFont::LoadCharMetrics(int charcode) {
+ if (m_Font.m_Face == NULL) {
+ return;
+ }
+ if (charcode < 0 || charcode > 0xff) {
+ return;
+ }
+ int glyph_index = m_GlyphIndex[charcode];
+ if (glyph_index == 0xffff) {
+ if (m_pFontFile == NULL && charcode != 32) {
+ LoadCharMetrics(32);
+ m_CharBBox[charcode] = m_CharBBox[32];
+ if (m_bUseFontWidth) {
+ m_CharWidth[charcode] = m_CharWidth[32];
+ }
+ }
+ return;
+ }
+ int err = FXFT_Load_Glyph(
+ m_Font.m_Face, glyph_index,
+ FXFT_LOAD_NO_SCALE | FXFT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH);
+ if (err) {
+ return;
+ }
+ m_CharBBox[charcode].Left =
+ TT2PDF(FXFT_Get_Glyph_HoriBearingX(m_Font.m_Face), m_Font.m_Face);
+ m_CharBBox[charcode].Right =
+ TT2PDF(FXFT_Get_Glyph_HoriBearingX(m_Font.m_Face) +
+ FXFT_Get_Glyph_Width(m_Font.m_Face),
+ m_Font.m_Face);
+ m_CharBBox[charcode].Top =
+ TT2PDF(FXFT_Get_Glyph_HoriBearingY(m_Font.m_Face), m_Font.m_Face);
+ m_CharBBox[charcode].Bottom =
+ TT2PDF(FXFT_Get_Glyph_HoriBearingY(m_Font.m_Face) -
+ FXFT_Get_Glyph_Height(m_Font.m_Face),
+ m_Font.m_Face);
+ if (m_bUseFontWidth) {
+ int TT_Width =
+ TT2PDF(FXFT_Get_Glyph_HoriAdvance(m_Font.m_Face), m_Font.m_Face);
if (m_CharWidth[charcode] == 0xffff) {
- LoadCharMetrics(charcode);
- if (m_CharWidth[charcode] == 0xffff) {
- m_CharWidth[charcode] = 0;
- }
- }
- return (int16_t)m_CharWidth[charcode];
-}
-void CPDF_SimpleFont::GetCharBBox(FX_DWORD charcode, FX_RECT& rect, int level)
-{
- if (charcode > 0xff) {
- charcode = 0;
- }
- if (m_CharBBox[charcode].Left == (int16_t)0xffff) {
- LoadCharMetrics(charcode);
- }
- rect.left = m_CharBBox[charcode].Left;
- rect.right = m_CharBBox[charcode].Right;
- rect.bottom = m_CharBBox[charcode].Bottom;
- rect.top = m_CharBBox[charcode].Top;
-}
-const FX_CHAR* GetAdobeCharName(int iBaseEncoding, const CFX_ByteString* pCharNames, int charcode)
-{
- ASSERT(charcode >= 0 && charcode < 256);
- if (charcode < 0 || charcode >= 256) {
- return NULL;
- }
- const FX_CHAR* name = NULL;
- if (pCharNames) {
- name = pCharNames[charcode];
- }
- if ((name == NULL || name[0] == 0) && iBaseEncoding) {
- name = PDF_CharNameFromPredefinedCharSet(iBaseEncoding, charcode);
- }
- if (name == NULL || name[0] == 0) {
- return NULL;
- }
- return name;
-}
-FX_BOOL CPDF_SimpleFont::LoadCommon()
-{
- CPDF_Dictionary* pFontDesc = m_pFontDict->GetDict(FX_BSTRC("FontDescriptor"));
- if (pFontDesc) {
- LoadFontDescriptor(pFontDesc);
- }
- CPDF_Array* pWidthArray = m_pFontDict->GetArray(FX_BSTRC("Widths"));
- int width_start = 0, width_end = -1;
- m_bUseFontWidth = TRUE;
- if (pWidthArray) {
- m_bUseFontWidth = FALSE;
- if (pFontDesc && pFontDesc->KeyExist(FX_BSTRC("MissingWidth"))) {
- int MissingWidth = pFontDesc->GetInteger(FX_BSTRC("MissingWidth"));
- for (int i = 0; i < 256; i ++) {
- m_CharWidth[i] = MissingWidth;
- }
- }
- width_start = m_pFontDict->GetInteger(FX_BSTRC("FirstChar"), 0);
- width_end = m_pFontDict->GetInteger(FX_BSTRC("LastChar"), 0);
- if (width_start >= 0 && width_start <= 255) {
- if (width_end <= 0 || width_end >= width_start + (int)pWidthArray->GetCount()) {
- width_end = width_start + pWidthArray->GetCount() - 1;
- }
- if (width_end > 255) {
- width_end = 255;
- }
- for (int i = width_start; i <= width_end; i ++) {
- m_CharWidth[i] = pWidthArray->GetInteger(i - width_start);
- }
- }
- }
- if (m_pFontFile == NULL) {
- LoadSubstFont();
- } else {
- if (m_BaseFont.GetLength() > 8 && m_BaseFont[7] == '+') {
- m_BaseFont = m_BaseFont.Mid(8);
- }
- }
- if (!(m_Flags & PDFFONT_SYMBOLIC)) {
- m_BaseEncoding = PDFFONT_ENCODING_STANDARD;
- }
- CPDF_Object* pEncoding = m_pFontDict->GetElementValue(FX_BSTRC("Encoding"));
- LoadPDFEncoding(pEncoding, m_BaseEncoding, m_pCharNames, m_pFontFile != NULL, m_Font.IsTTFont());
- LoadGlyphMap();
- delete[] m_pCharNames;
- m_pCharNames = NULL;
- if (m_Font.m_Face == NULL) {
- return TRUE;
- }
- if (m_Flags & PDFFONT_ALLCAP) {
- unsigned char lowercases[] = {'a', 'z', 0xe0, 0xf6, 0xf8, 0xfd};
- for (size_t range = 0; range < sizeof lowercases / 2; range ++) {
- for (int i = lowercases[range * 2]; i <= lowercases[range * 2 + 1]; i ++) {
- if (m_GlyphIndex[i] != 0xffff && m_pFontFile != NULL) {
- continue;
- }
- m_GlyphIndex[i] = m_GlyphIndex[i - 32];
- if (m_CharWidth[i - 32]) {
- m_CharWidth[i] = m_CharWidth[i - 32];
- m_CharBBox[i] = m_CharBBox[i - 32];
- }
- }
- }
- }
- CheckFontMetrics();
+ m_CharWidth[charcode] = TT_Width;
+ } else if (TT_Width && !IsEmbedded()) {
+ m_CharBBox[charcode].Right =
+ m_CharBBox[charcode].Right * m_CharWidth[charcode] / TT_Width;
+ m_CharBBox[charcode].Left =
+ m_CharBBox[charcode].Left * m_CharWidth[charcode] / TT_Width;
+ }
+ }
+}
+int CPDF_SimpleFont::GetCharWidthF(FX_DWORD charcode, int level) {
+ if (charcode > 0xff) {
+ charcode = 0;
+ }
+ if (m_CharWidth[charcode] == 0xffff) {
+ LoadCharMetrics(charcode);
+ if (m_CharWidth[charcode] == 0xffff) {
+ m_CharWidth[charcode] = 0;
+ }
+ }
+ return (int16_t)m_CharWidth[charcode];
+}
+void CPDF_SimpleFont::GetCharBBox(FX_DWORD charcode, FX_RECT& rect, int level) {
+ if (charcode > 0xff) {
+ charcode = 0;
+ }
+ if (m_CharBBox[charcode].Left == (int16_t)0xffff) {
+ LoadCharMetrics(charcode);
+ }
+ rect.left = m_CharBBox[charcode].Left;
+ rect.right = m_CharBBox[charcode].Right;
+ rect.bottom = m_CharBBox[charcode].Bottom;
+ rect.top = m_CharBBox[charcode].Top;
+}
+const FX_CHAR* GetAdobeCharName(int iBaseEncoding,
+ const CFX_ByteString* pCharNames,
+ int charcode) {
+ ASSERT(charcode >= 0 && charcode < 256);
+ if (charcode < 0 || charcode >= 256) {
+ return NULL;
+ }
+ const FX_CHAR* name = NULL;
+ if (pCharNames) {
+ name = pCharNames[charcode];
+ }
+ if ((name == NULL || name[0] == 0) && iBaseEncoding) {
+ name = PDF_CharNameFromPredefinedCharSet(iBaseEncoding, charcode);
+ }
+ if (name == NULL || name[0] == 0) {
+ return NULL;
+ }
+ return name;
+}
+FX_BOOL CPDF_SimpleFont::LoadCommon() {
+ CPDF_Dictionary* pFontDesc = m_pFontDict->GetDict(FX_BSTRC("FontDescriptor"));
+ if (pFontDesc) {
+ LoadFontDescriptor(pFontDesc);
+ }
+ CPDF_Array* pWidthArray = m_pFontDict->GetArray(FX_BSTRC("Widths"));
+ int width_start = 0, width_end = -1;
+ m_bUseFontWidth = TRUE;
+ if (pWidthArray) {
+ m_bUseFontWidth = FALSE;
+ if (pFontDesc && pFontDesc->KeyExist(FX_BSTRC("MissingWidth"))) {
+ int MissingWidth = pFontDesc->GetInteger(FX_BSTRC("MissingWidth"));
+ for (int i = 0; i < 256; i++) {
+ m_CharWidth[i] = MissingWidth;
+ }
+ }
+ width_start = m_pFontDict->GetInteger(FX_BSTRC("FirstChar"), 0);
+ width_end = m_pFontDict->GetInteger(FX_BSTRC("LastChar"), 0);
+ if (width_start >= 0 && width_start <= 255) {
+ if (width_end <= 0 ||
+ width_end >= width_start + (int)pWidthArray->GetCount()) {
+ width_end = width_start + pWidthArray->GetCount() - 1;
+ }
+ if (width_end > 255) {
+ width_end = 255;
+ }
+ for (int i = width_start; i <= width_end; i++) {
+ m_CharWidth[i] = pWidthArray->GetInteger(i - width_start);
+ }
+ }
+ }
+ if (m_pFontFile == NULL) {
+ LoadSubstFont();
+ } else {
+ if (m_BaseFont.GetLength() > 8 && m_BaseFont[7] == '+') {
+ m_BaseFont = m_BaseFont.Mid(8);
+ }
+ }
+ if (!(m_Flags & PDFFONT_SYMBOLIC)) {
+ m_BaseEncoding = PDFFONT_ENCODING_STANDARD;
+ }
+ CPDF_Object* pEncoding = m_pFontDict->GetElementValue(FX_BSTRC("Encoding"));
+ LoadPDFEncoding(pEncoding, m_BaseEncoding, m_pCharNames, m_pFontFile != NULL,
+ m_Font.IsTTFont());
+ LoadGlyphMap();
+ delete[] m_pCharNames;
+ m_pCharNames = NULL;
+ if (m_Font.m_Face == NULL) {
return TRUE;
-}
-void CPDF_SimpleFont::LoadSubstFont()
-{
- if (!m_bUseFontWidth && !(m_Flags & PDFFONT_FIXEDPITCH)) {
- int width = 0, i;
- for (i = 0; i < 256; i ++) {
- if (m_CharWidth[i] == 0 || m_CharWidth[i] == 0xffff) {
- continue;
- }
- if (width == 0) {
- width = m_CharWidth[i];
- } else if (width != m_CharWidth[i]) {
- break;
- }
- }
- if (i == 256 && width) {
- m_Flags |= PDFFONT_FIXEDPITCH;
- }
- }
- int weight = m_StemV < 140 ? m_StemV * 5 : (m_StemV * 4 + 140);
- m_Font.LoadSubst(m_BaseFont, IsFontType(PDFFONT_TRUETYPE), m_Flags, weight, m_ItalicAngle, 0);
- if (m_Font.m_pSubstFont->m_SubstFlags & FXFONT_SUBST_NONSYMBOL) {
- }
-}
-FX_BOOL CPDF_SimpleFont::IsUnicodeCompatible() const
-{
- return m_BaseEncoding != PDFFONT_ENCODING_BUILTIN && m_BaseEncoding != PDFFONT_ENCODING_ADOBE_SYMBOL &&
- m_BaseEncoding != PDFFONT_ENCODING_ZAPFDINGBATS;
-}
-CPDF_Type1Font::CPDF_Type1Font() : CPDF_SimpleFont(PDFFONT_TYPE1)
-{
- m_Base14Font = -1;
-}
-FX_BOOL CPDF_Type1Font::_Load()
-{
- m_Base14Font = _PDF_GetStandardFontName(m_BaseFont);
- if (m_Base14Font >= 0) {
- CPDF_Dictionary* pFontDesc = m_pFontDict->GetDict(FX_BSTRC("FontDescriptor"));
- if (pFontDesc && pFontDesc->KeyExist(FX_BSTRC("Flags"))) {
- m_Flags = pFontDesc->GetInteger(FX_BSTRC("Flags"));
- } else {
- m_Flags = m_Base14Font >= 12 ? PDFFONT_SYMBOLIC : PDFFONT_NONSYMBOLIC;
- }
- if (m_Base14Font < 4)
- for (int i = 0; i < 256; i ++) {
- m_CharWidth[i] = 600;
- }
- if (m_Base14Font == 12) {
- m_BaseEncoding = PDFFONT_ENCODING_ADOBE_SYMBOL;
- } else if (m_Base14Font == 13) {
- m_BaseEncoding = PDFFONT_ENCODING_ZAPFDINGBATS;
- } else if (m_Flags & PDFFONT_NONSYMBOLIC) {
- m_BaseEncoding = PDFFONT_ENCODING_STANDARD;
- }
- }
- return LoadCommon();
-}
-static FX_BOOL FT_UseType1Charmap(FXFT_Face face)
-{
- if (FXFT_Get_Face_CharmapCount(face) == 0) {
- return FALSE;
- }
- if (FXFT_Get_Face_CharmapCount(face) == 1 &&
- FXFT_Get_Charmap_Encoding(FXFT_Get_Face_Charmaps(face)[0]) == FXFT_ENCODING_UNICODE) {
- return FALSE;
- }
- if (FXFT_Get_Charmap_Encoding(FXFT_Get_Face_Charmaps(face)[0]) == FXFT_ENCODING_UNICODE) {
- FXFT_Set_Charmap(face, FXFT_Get_Face_Charmaps(face)[1]);
+ }
+ if (m_Flags & PDFFONT_ALLCAP) {
+ unsigned char lowercases[] = {'a', 'z', 0xe0, 0xf6, 0xf8, 0xfd};
+ for (size_t range = 0; range < sizeof lowercases / 2; range++) {
+ for (int i = lowercases[range * 2]; i <= lowercases[range * 2 + 1]; i++) {
+ if (m_GlyphIndex[i] != 0xffff && m_pFontFile != NULL) {
+ continue;
+ }
+ m_GlyphIndex[i] = m_GlyphIndex[i - 32];
+ if (m_CharWidth[i - 32]) {
+ m_CharWidth[i] = m_CharWidth[i - 32];
+ m_CharBBox[i] = m_CharBBox[i - 32];
+ }
+ }
+ }
+ }
+ CheckFontMetrics();
+ return TRUE;
+}
+void CPDF_SimpleFont::LoadSubstFont() {
+ if (!m_bUseFontWidth && !(m_Flags & PDFFONT_FIXEDPITCH)) {
+ int width = 0, i;
+ for (i = 0; i < 256; i++) {
+ if (m_CharWidth[i] == 0 || m_CharWidth[i] == 0xffff) {
+ continue;
+ }
+ if (width == 0) {
+ width = m_CharWidth[i];
+ } else if (width != m_CharWidth[i]) {
+ break;
+ }
+ }
+ if (i == 256 && width) {
+ m_Flags |= PDFFONT_FIXEDPITCH;
+ }
+ }
+ int weight = m_StemV < 140 ? m_StemV * 5 : (m_StemV * 4 + 140);
+ m_Font.LoadSubst(m_BaseFont, IsFontType(PDFFONT_TRUETYPE), m_Flags, weight,
+ m_ItalicAngle, 0);
+ if (m_Font.m_pSubstFont->m_SubstFlags & FXFONT_SUBST_NONSYMBOL) {
+ }
+}
+FX_BOOL CPDF_SimpleFont::IsUnicodeCompatible() const {
+ return m_BaseEncoding != PDFFONT_ENCODING_BUILTIN &&
+ m_BaseEncoding != PDFFONT_ENCODING_ADOBE_SYMBOL &&
+ m_BaseEncoding != PDFFONT_ENCODING_ZAPFDINGBATS;
+}
+CPDF_Type1Font::CPDF_Type1Font() : CPDF_SimpleFont(PDFFONT_TYPE1) {
+ m_Base14Font = -1;
+}
+FX_BOOL CPDF_Type1Font::_Load() {
+ m_Base14Font = _PDF_GetStandardFontName(m_BaseFont);
+ if (m_Base14Font >= 0) {
+ CPDF_Dictionary* pFontDesc =
+ m_pFontDict->GetDict(FX_BSTRC("FontDescriptor"));
+ if (pFontDesc && pFontDesc->KeyExist(FX_BSTRC("Flags"))) {
+ m_Flags = pFontDesc->GetInteger(FX_BSTRC("Flags"));
} else {
- FXFT_Set_Charmap(face, FXFT_Get_Face_Charmaps(face)[0]);
- }
- return TRUE;
+ m_Flags = m_Base14Font >= 12 ? PDFFONT_SYMBOLIC : PDFFONT_NONSYMBOLIC;
+ }
+ if (m_Base14Font < 4)
+ for (int i = 0; i < 256; i++) {
+ m_CharWidth[i] = 600;
+ }
+ if (m_Base14Font == 12) {
+ m_BaseEncoding = PDFFONT_ENCODING_ADOBE_SYMBOL;
+ } else if (m_Base14Font == 13) {
+ m_BaseEncoding = PDFFONT_ENCODING_ZAPFDINGBATS;
+ } else if (m_Flags & PDFFONT_NONSYMBOLIC) {
+ m_BaseEncoding = PDFFONT_ENCODING_STANDARD;
+ }
+ }
+ return LoadCommon();
+}
+static FX_BOOL FT_UseType1Charmap(FXFT_Face face) {
+ if (FXFT_Get_Face_CharmapCount(face) == 0) {
+ return FALSE;
+ }
+ if (FXFT_Get_Face_CharmapCount(face) == 1 &&
+ FXFT_Get_Charmap_Encoding(FXFT_Get_Face_Charmaps(face)[0]) ==
+ FXFT_ENCODING_UNICODE) {
+ return FALSE;
+ }
+ if (FXFT_Get_Charmap_Encoding(FXFT_Get_Face_Charmaps(face)[0]) ==
+ FXFT_ENCODING_UNICODE) {
+ FXFT_Set_Charmap(face, FXFT_Get_Face_Charmaps(face)[1]);
+ } else {
+ FXFT_Set_Charmap(face, FXFT_Get_Face_Charmaps(face)[0]);
+ }
+ return TRUE;
}
extern FX_WCHAR FT_UnicodeFromCharCode(int encoding, FX_DWORD charcode);
-#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
+#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
#include "../../fxge/apple/apple_int.h"
#endif
-int CPDF_Type1Font::GlyphFromCharCodeExt(FX_DWORD charcode)
-{
- if (charcode > 0xff) {
- return -1;
- }
- int index = m_ExtGID[(uint8_t)charcode];
- if (index == 0xffff) {
- return -1;
- }
- return index;
+int CPDF_Type1Font::GlyphFromCharCodeExt(FX_DWORD charcode) {
+ if (charcode > 0xff) {
+ return -1;
+ }
+ int index = m_ExtGID[(uint8_t)charcode];
+ if (index == 0xffff) {
+ return -1;
+ }
+ return index;
}
-#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
+#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
struct _GlyphNameMap {
- const FX_CHAR* m_pStrAdobe;
- const FX_CHAR* m_pStrUnicode;
-};
-static const _GlyphNameMap g_GlyphNameSubsts[] = {
- {"ff", "uniFB00"},
- {"fi", "uniFB01"},
- {"fl", "uniFB02"},
- {"ffi", "uniFB03"},
- {"ffl", "uniFB04"}
+ const FX_CHAR* m_pStrAdobe;
+ const FX_CHAR* m_pStrUnicode;
};
+static const _GlyphNameMap g_GlyphNameSubsts[] = {{"ff", "uniFB00"},
+ {"fi", "uniFB01"},
+ {"fl", "uniFB02"},
+ {"ffi", "uniFB03"},
+ {"ffl", "uniFB04"}};
extern "C" {
- static int compareString(const void* key, const void* element)
- {
- return FXSYS_stricmp((const FX_CHAR*)key, ((_GlyphNameMap*)element)->m_pStrAdobe);
- }
+static int compareString(const void* key, const void* element) {
+ return FXSYS_stricmp((const FX_CHAR*)key,
+ ((_GlyphNameMap*)element)->m_pStrAdobe);
}
-static const FX_CHAR* _GlyphNameRemap(const FX_CHAR* pStrAdobe)
-{
- _GlyphNameMap* found = (_GlyphNameMap*)FXSYS_bsearch(pStrAdobe, g_GlyphNameSubsts,
- sizeof g_GlyphNameSubsts / sizeof(_GlyphNameMap), sizeof(_GlyphNameMap),
- compareString);
- if (found) {
- return found->m_pStrUnicode;
- }
- return NULL;
+}
+static const FX_CHAR* _GlyphNameRemap(const FX_CHAR* pStrAdobe) {
+ _GlyphNameMap* found = (_GlyphNameMap*)FXSYS_bsearch(
+ pStrAdobe, g_GlyphNameSubsts,
+ sizeof g_GlyphNameSubsts / sizeof(_GlyphNameMap), sizeof(_GlyphNameMap),
+ compareString);
+ if (found) {
+ return found->m_pStrUnicode;
+ }
+ return NULL;
}
#endif
-void CPDF_Type1Font::LoadGlyphMap()
-{
- if (m_Font.m_Face == NULL) {
- return;
- }
-#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
- FX_BOOL bCoreText = TRUE;
- CQuartz2D & quartz2d = ((CApplePlatform *) CFX_GEModule::Get()->GetPlatformData())->_quartz2d;
- if (!m_Font.m_pPlatformFont) {
- if (m_Font.GetPsName() == CFX_WideString::FromLocal("DFHeiStd-W5")) {
- bCoreText = FALSE;
- }
- m_Font.m_pPlatformFont = quartz2d.CreateFont(m_Font.m_pFontData, m_Font.m_dwSize);
- if (NULL == m_Font.m_pPlatformFont) {
- bCoreText = FALSE;
- }
- }
-#endif
- if (!IsEmbedded() && (m_Base14Font < 12) && m_Font.IsTTFont()) {
- if (FT_UseTTCharmap(m_Font.m_Face, 3, 0)) {
- FX_BOOL bGotOne = FALSE;
- for (int charcode = 0; charcode < 256; charcode ++) {
- const uint8_t prefix[4] = {0x00, 0xf0, 0xf1, 0xf2};
- for (int j = 0; j < 4; j ++) {
- FX_WORD unicode = prefix[j] * 256 + charcode;
- m_GlyphIndex[charcode] = FXFT_Get_Char_Index(m_Font.m_Face, unicode);
-#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
- FX_CHAR name_glyph[256];
- FXFT_Get_Glyph_Name(m_Font.m_Face, m_GlyphIndex[charcode], name_glyph, 256);
- name_glyph[255] = 0;
- CFStringRef name_ct = CFStringCreateWithCStringNoCopy(kCFAllocatorDefault, name_glyph, kCFStringEncodingASCII, kCFAllocatorNull);
- m_ExtGID[charcode] = CGFontGetGlyphWithGlyphName((CGFontRef)m_Font.m_pPlatformFont, name_ct);
- if (name_ct) {
- CFRelease(name_ct);
- }
+void CPDF_Type1Font::LoadGlyphMap() {
+ if (m_Font.m_Face == NULL) {
+ return;
+ }
+#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
+ FX_BOOL bCoreText = TRUE;
+ CQuartz2D& quartz2d =
+ ((CApplePlatform*)CFX_GEModule::Get()->GetPlatformData())->_quartz2d;
+ if (!m_Font.m_pPlatformFont) {
+ if (m_Font.GetPsName() == CFX_WideString::FromLocal("DFHeiStd-W5")) {
+ bCoreText = FALSE;
+ }
+ m_Font.m_pPlatformFont =
+ quartz2d.CreateFont(m_Font.m_pFontData, m_Font.m_dwSize);
+ if (NULL == m_Font.m_pPlatformFont) {
+ bCoreText = FALSE;
+ }
+ }
#endif
- if (m_GlyphIndex[charcode]) {
- bGotOne = TRUE;
- break;
- }
- }
- }
- if (bGotOne) {
-#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
- if (!bCoreText) {
- FXSYS_memcpy(m_ExtGID, m_GlyphIndex, 256);
- }
+ if (!IsEmbedded() && (m_Base14Font < 12) && m_Font.IsTTFont()) {
+ if (FT_UseTTCharmap(m_Font.m_Face, 3, 0)) {
+ FX_BOOL bGotOne = FALSE;
+ for (int charcode = 0; charcode < 256; charcode++) {
+ const uint8_t prefix[4] = {0x00, 0xf0, 0xf1, 0xf2};
+ for (int j = 0; j < 4; j++) {
+ FX_WORD unicode = prefix[j] * 256 + charcode;
+ m_GlyphIndex[charcode] = FXFT_Get_Char_Index(m_Font.m_Face, unicode);
+#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
+ FX_CHAR name_glyph[256];
+ FXFT_Get_Glyph_Name(m_Font.m_Face, m_GlyphIndex[charcode], name_glyph,
+ 256);
+ name_glyph[255] = 0;
+ CFStringRef name_ct = CFStringCreateWithCStringNoCopy(
+ kCFAllocatorDefault, name_glyph, kCFStringEncodingASCII,
+ kCFAllocatorNull);
+ m_ExtGID[charcode] = CGFontGetGlyphWithGlyphName(
+ (CGFontRef)m_Font.m_pPlatformFont, name_ct);
+ if (name_ct) {
+ CFRelease(name_ct);
+ }
#endif
- return;
- }
+ if (m_GlyphIndex[charcode]) {
+ bGotOne = TRUE;
+ break;
+ }
}
- FXFT_Select_Charmap(m_Font.m_Face, FXFT_ENCODING_UNICODE);
- if (m_BaseEncoding == 0) {
- m_BaseEncoding = PDFFONT_ENCODING_STANDARD;
+ }
+ if (bGotOne) {
+#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
+ if (!bCoreText) {
+ FXSYS_memcpy(m_ExtGID, m_GlyphIndex, 256);
}
- for (int charcode = 0; charcode < 256; charcode ++) {
- const FX_CHAR* name = GetAdobeCharName(m_BaseEncoding, m_pCharNames, charcode);
- if (name == NULL) {
- continue;
- }
- m_Encoding.m_Unicodes[charcode] = PDF_UnicodeFromAdobeName(name);
- m_GlyphIndex[charcode] = FXFT_Get_Char_Index(m_Font.m_Face, m_Encoding.m_Unicodes[charcode]);
-#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
- FX_CHAR name_glyph[256];
- FXFT_Get_Glyph_Name(m_Font.m_Face, m_GlyphIndex[charcode], name_glyph, 256);
- name_glyph[255] = 0;
- CFStringRef name_ct = CFStringCreateWithCStringNoCopy(kCFAllocatorDefault, name_glyph, kCFStringEncodingASCII, kCFAllocatorNull);
- m_ExtGID[charcode] = CGFontGetGlyphWithGlyphName((CGFontRef)m_Font.m_pPlatformFont, name_ct);
- if (name_ct) {
- CFRelease(name_ct);
- }
#endif
- if (m_GlyphIndex[charcode] == 0 && FXSYS_strcmp(name, ".notdef") == 0) {
- m_Encoding.m_Unicodes[charcode] = 0x20;
- m_GlyphIndex[charcode] = FXFT_Get_Char_Index(m_Font.m_Face, 0x20);
-#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
- FX_CHAR name_glyph[256];
- FXFT_Get_Glyph_Name(m_Font.m_Face, m_GlyphIndex[charcode], name_glyph, 256);
- name_glyph[255] = 0;
- CFStringRef name_ct = CFStringCreateWithCStringNoCopy(kCFAllocatorDefault, name_glyph, kCFStringEncodingASCII, kCFAllocatorNull);
- m_ExtGID[charcode] = CGFontGetGlyphWithGlyphName((CGFontRef)m_Font.m_pPlatformFont, name_ct);
- if (name_ct) {
- CFRelease(name_ct);
- }
+ return;
+ }
+ }
+ FXFT_Select_Charmap(m_Font.m_Face, FXFT_ENCODING_UNICODE);
+ if (m_BaseEncoding == 0) {
+ m_BaseEncoding = PDFFONT_ENCODING_STANDARD;
+ }
+ for (int charcode = 0; charcode < 256; charcode++) {
+ const FX_CHAR* name =
+ GetAdobeCharName(m_BaseEncoding, m_pCharNames, charcode);
+ if (name == NULL) {
+ continue;
+ }
+ m_Encoding.m_Unicodes[charcode] = PDF_UnicodeFromAdobeName(name);
+ m_GlyphIndex[charcode] =
+ FXFT_Get_Char_Index(m_Font.m_Face, m_Encoding.m_Unicodes[charcode]);
+#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
+ FX_CHAR name_glyph[256];
+ FXFT_Get_Glyph_Name(m_Font.m_Face, m_GlyphIndex[charcode], name_glyph,
+ 256);
+ name_glyph[255] = 0;
+ CFStringRef name_ct = CFStringCreateWithCStringNoCopy(
+ kCFAllocatorDefault, name_glyph, kCFStringEncodingASCII,
+ kCFAllocatorNull);
+ m_ExtGID[charcode] = CGFontGetGlyphWithGlyphName(
+ (CGFontRef)m_Font.m_pPlatformFont, name_ct);
+ if (name_ct) {
+ CFRelease(name_ct);
+ }
#endif
- }
- }
-#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
- if (!bCoreText) {
- FXSYS_memcpy(m_ExtGID, m_GlyphIndex, 256);
+ if (m_GlyphIndex[charcode] == 0 && FXSYS_strcmp(name, ".notdef") == 0) {
+ m_Encoding.m_Unicodes[charcode] = 0x20;
+ m_GlyphIndex[charcode] = FXFT_Get_Char_Index(m_Font.m_Face, 0x20);
+#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
+ FX_CHAR name_glyph[256];
+ FXFT_Get_Glyph_Name(m_Font.m_Face, m_GlyphIndex[charcode], name_glyph,
+ 256);
+ name_glyph[255] = 0;
+ CFStringRef name_ct = CFStringCreateWithCStringNoCopy(
+ kCFAllocatorDefault, name_glyph, kCFStringEncodingASCII,
+ kCFAllocatorNull);
+ m_ExtGID[charcode] = CGFontGetGlyphWithGlyphName(
+ (CGFontRef)m_Font.m_pPlatformFont, name_ct);
+ if (name_ct) {
+ CFRelease(name_ct);
}
#endif
- return;
+ }
}
- FT_UseType1Charmap(m_Font.m_Face);
-#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
- if (bCoreText) {
- if (m_Flags & PDFFONT_SYMBOLIC) {
- for (int charcode = 0; charcode < 256; charcode ++) {
- const FX_CHAR* name = GetAdobeCharName(m_BaseEncoding, m_pCharNames, charcode);
- if (name) {
- m_Encoding.m_Unicodes[charcode] = PDF_UnicodeFromAdobeName(name);
- m_GlyphIndex[charcode] = FXFT_Get_Name_Index(m_Font.m_Face, (char*)name);
- CFStringRef name_ct = CFStringCreateWithCStringNoCopy(kCFAllocatorDefault, name, kCFStringEncodingASCII, kCFAllocatorNull);
- m_ExtGID[charcode] = CGFontGetGlyphWithGlyphName((CGFontRef)m_Font.m_pPlatformFont, name_ct);
- if (name_ct) {
- CFRelease(name_ct);
- }
- } else {
- m_GlyphIndex[charcode] = FXFT_Get_Char_Index(m_Font.m_Face, charcode);
- FX_WCHAR unicode = 0;
- if (m_GlyphIndex[charcode]) {
- unicode = FT_UnicodeFromCharCode(PDFFONT_ENCODING_STANDARD, charcode);
- }
- FX_CHAR name_glyph[256];
- FXSYS_memset(name_glyph, 0, sizeof(name_glyph));
- FXFT_Get_Glyph_Name(m_Font.m_Face, m_GlyphIndex[charcode], name_glyph, 256);
- name_glyph[255] = 0;
- if (unicode == 0 && name_glyph[0] != 0) {
- unicode = PDF_UnicodeFromAdobeName(name_glyph);
- }
- m_Encoding.m_Unicodes[charcode] = unicode;
- CFStringRef name_ct = CFStringCreateWithCStringNoCopy(kCFAllocatorDefault, name_glyph, kCFStringEncodingASCII, kCFAllocatorNull);
- m_ExtGID[charcode] = CGFontGetGlyphWithGlyphName((CGFontRef)m_Font.m_pPlatformFont, name_ct);
- if (name_ct) {
- CFRelease(name_ct);
- }
- }
- }
- return;
- }
- FX_BOOL bUnicode = FALSE;
- if (0 == FXFT_Select_Charmap(m_Font.m_Face, FXFT_ENCODING_UNICODE)) {
- bUnicode = TRUE;
- }
- for (int charcode = 0; charcode < 256; charcode ++) {
- const FX_CHAR* name = GetAdobeCharName(m_BaseEncoding, m_pCharNames, charcode);
- if (name == NULL) {
- continue;
- }
- m_Encoding.m_Unicodes[charcode] = PDF_UnicodeFromAdobeName(name);
- const FX_CHAR* pStrUnicode = _GlyphNameRemap(name);
- if (pStrUnicode && 0 == FXFT_Get_Name_Index(m_Font.m_Face, (char*)name)) {
- name = pStrUnicode;
- }
- m_GlyphIndex[charcode] = FXFT_Get_Name_Index(m_Font.m_Face, (char*)name);
- CFStringRef name_ct = CFStringCreateWithCStringNoCopy(kCFAllocatorDefault, name, kCFStringEncodingASCII, kCFAllocatorNull);
- m_ExtGID[charcode] = CGFontGetGlyphWithGlyphName((CGFontRef)m_Font.m_pPlatformFont, name_ct);
- if (name_ct) {
- CFRelease(name_ct);
- }
- if (m_GlyphIndex[charcode] == 0) {
- if (FXSYS_strcmp(name, ".notdef") != 0 && FXSYS_strcmp(name, "space") != 0) {
- m_GlyphIndex[charcode] = FXFT_Get_Char_Index(m_Font.m_Face, bUnicode ? m_Encoding.m_Unicodes[charcode] : charcode);
- FX_CHAR name_glyph[256];
- FXFT_Get_Glyph_Name(m_Font.m_Face, m_GlyphIndex[charcode], name_glyph, 256);
- name_glyph[255] = 0;
- CFStringRef name_ct = CFStringCreateWithCStringNoCopy(kCFAllocatorDefault, name_glyph, kCFStringEncodingASCII, kCFAllocatorNull);
- m_ExtGID[charcode] = CGFontGetGlyphWithGlyphName((CGFontRef)m_Font.m_pPlatformFont, name_ct);
- if (name_ct) {
- CFRelease(name_ct);
- }
- } else {
- m_Encoding.m_Unicodes[charcode] = 0x20;
- m_GlyphIndex[charcode] = bUnicode ? FXFT_Get_Char_Index(m_Font.m_Face, 0x20) : 0xffff;
- FX_CHAR name_glyph[256];
- FXFT_Get_Glyph_Name(m_Font.m_Face, m_GlyphIndex[charcode], name_glyph, 256);
- name_glyph[255] = 0;
- CFStringRef name_ct = CFStringCreateWithCStringNoCopy(kCFAllocatorDefault, name_glyph, kCFStringEncodingASCII, kCFAllocatorNull);
- m_ExtGID[charcode] = CGFontGetGlyphWithGlyphName((CGFontRef)m_Font.m_pPlatformFont, name_ct);
- if (name_ct) {
- CFRelease(name_ct);
- }
- }
- }
- }
- return;
+#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
+ if (!bCoreText) {
+ FXSYS_memcpy(m_ExtGID, m_GlyphIndex, 256);
}
#endif
+ return;
+ }
+ FT_UseType1Charmap(m_Font.m_Face);
+#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
+ if (bCoreText) {
if (m_Flags & PDFFONT_SYMBOLIC) {
- for (int charcode = 0; charcode < 256; charcode ++) {
- const FX_CHAR* name = GetAdobeCharName(m_BaseEncoding, m_pCharNames, charcode);
- if (name) {
- m_Encoding.m_Unicodes[charcode] = PDF_UnicodeFromAdobeName(name);
- m_GlyphIndex[charcode] = FXFT_Get_Name_Index(m_Font.m_Face, (char*)name);
- } else {
- m_GlyphIndex[charcode] = FXFT_Get_Char_Index(m_Font.m_Face, charcode);
- if (m_GlyphIndex[charcode]) {
- FX_WCHAR unicode = FT_UnicodeFromCharCode(PDFFONT_ENCODING_STANDARD, charcode);
- if (unicode == 0) {
- FX_CHAR name_glyph[256];
- FXSYS_memset(name_glyph, 0, sizeof(name_glyph));
- FXFT_Get_Glyph_Name(m_Font.m_Face, m_GlyphIndex[charcode], name_glyph, 256);
- name_glyph[255] = 0;
- if (name_glyph[0] != 0) {
- unicode = PDF_UnicodeFromAdobeName(name_glyph);
- }
- }
- m_Encoding.m_Unicodes[charcode] = unicode;
- }
- }
- }
-#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
- if (!bCoreText) {
- FXSYS_memcpy(m_ExtGID, m_GlyphIndex, 256);
- }
-#endif
- return;
+ for (int charcode = 0; charcode < 256; charcode++) {
+ const FX_CHAR* name =
+ GetAdobeCharName(m_BaseEncoding, m_pCharNames, charcode);
+ if (name) {
+ m_Encoding.m_Unicodes[charcode] = PDF_UnicodeFromAdobeName(name);
+ m_GlyphIndex[charcode] =
+ FXFT_Get_Name_Index(m_Font.m_Face, (char*)name);
+ CFStringRef name_ct = CFStringCreateWithCStringNoCopy(
+ kCFAllocatorDefault, name, kCFStringEncodingASCII,
+ kCFAllocatorNull);
+ m_ExtGID[charcode] = CGFontGetGlyphWithGlyphName(
+ (CGFontRef)m_Font.m_pPlatformFont, name_ct);
+ if (name_ct) {
+ CFRelease(name_ct);
+ }
+ } else {
+ m_GlyphIndex[charcode] = FXFT_Get_Char_Index(m_Font.m_Face, charcode);
+ FX_WCHAR unicode = 0;
+ if (m_GlyphIndex[charcode]) {
+ unicode =
+ FT_UnicodeFromCharCode(PDFFONT_ENCODING_STANDARD, charcode);
+ }
+ FX_CHAR name_glyph[256];
+ FXSYS_memset(name_glyph, 0, sizeof(name_glyph));
+ FXFT_Get_Glyph_Name(m_Font.m_Face, m_GlyphIndex[charcode], name_glyph,
+ 256);
+ name_glyph[255] = 0;
+ if (unicode == 0 && name_glyph[0] != 0) {
+ unicode = PDF_UnicodeFromAdobeName(name_glyph);
+ }
+ m_Encoding.m_Unicodes[charcode] = unicode;
+ CFStringRef name_ct = CFStringCreateWithCStringNoCopy(
+ kCFAllocatorDefault, name_glyph, kCFStringEncodingASCII,
+ kCFAllocatorNull);
+ m_ExtGID[charcode] = CGFontGetGlyphWithGlyphName(
+ (CGFontRef)m_Font.m_pPlatformFont, name_ct);
+ if (name_ct) {
+ CFRelease(name_ct);
+ }
+ }
+ }
+ return;
}
FX_BOOL bUnicode = FALSE;
if (0 == FXFT_Select_Charmap(m_Font.m_Face, FXFT_ENCODING_UNICODE)) {
- bUnicode = TRUE;
- }
- for (int charcode = 0; charcode < 256; charcode ++) {
- const FX_CHAR* name = GetAdobeCharName(m_BaseEncoding, m_pCharNames, charcode);
- if (name == NULL) {
- continue;
- }
+ bUnicode = TRUE;
+ }
+ for (int charcode = 0; charcode < 256; charcode++) {
+ const FX_CHAR* name =
+ GetAdobeCharName(m_BaseEncoding, m_pCharNames, charcode);
+ if (name == NULL) {
+ continue;
+ }
+ m_Encoding.m_Unicodes[charcode] = PDF_UnicodeFromAdobeName(name);
+ const FX_CHAR* pStrUnicode = _GlyphNameRemap(name);
+ if (pStrUnicode && 0 == FXFT_Get_Name_Index(m_Font.m_Face, (char*)name)) {
+ name = pStrUnicode;
+ }
+ m_GlyphIndex[charcode] = FXFT_Get_Name_Index(m_Font.m_Face, (char*)name);
+ CFStringRef name_ct = CFStringCreateWithCStringNoCopy(
+ kCFAllocatorDefault, name, kCFStringEncodingASCII, kCFAllocatorNull);
+ m_ExtGID[charcode] = CGFontGetGlyphWithGlyphName(
+ (CGFontRef)m_Font.m_pPlatformFont, name_ct);
+ if (name_ct) {
+ CFRelease(name_ct);
+ }
+ if (m_GlyphIndex[charcode] == 0) {
+ if (FXSYS_strcmp(name, ".notdef") != 0 &&
+ FXSYS_strcmp(name, "space") != 0) {
+ m_GlyphIndex[charcode] = FXFT_Get_Char_Index(
+ m_Font.m_Face,
+ bUnicode ? m_Encoding.m_Unicodes[charcode] : charcode);
+ FX_CHAR name_glyph[256];
+ FXFT_Get_Glyph_Name(m_Font.m_Face, m_GlyphIndex[charcode], name_glyph,
+ 256);
+ name_glyph[255] = 0;
+ CFStringRef name_ct = CFStringCreateWithCStringNoCopy(
+ kCFAllocatorDefault, name_glyph, kCFStringEncodingASCII,
+ kCFAllocatorNull);
+ m_ExtGID[charcode] = CGFontGetGlyphWithGlyphName(
+ (CGFontRef)m_Font.m_pPlatformFont, name_ct);
+ if (name_ct) {
+ CFRelease(name_ct);
+ }
+ } else {
+ m_Encoding.m_Unicodes[charcode] = 0x20;
+ m_GlyphIndex[charcode] =
+ bUnicode ? FXFT_Get_Char_Index(m_Font.m_Face, 0x20) : 0xffff;
+ FX_CHAR name_glyph[256];
+ FXFT_Get_Glyph_Name(m_Font.m_Face, m_GlyphIndex[charcode], name_glyph,
+ 256);
+ name_glyph[255] = 0;
+ CFStringRef name_ct = CFStringCreateWithCStringNoCopy(
+ kCFAllocatorDefault, name_glyph, kCFStringEncodingASCII,
+ kCFAllocatorNull);
+ m_ExtGID[charcode] = CGFontGetGlyphWithGlyphName(
+ (CGFontRef)m_Font.m_pPlatformFont, name_ct);
+ if (name_ct) {
+ CFRelease(name_ct);
+ }
+ }
+ }
+ }
+ return;
+ }
+#endif
+ if (m_Flags & PDFFONT_SYMBOLIC) {
+ for (int charcode = 0; charcode < 256; charcode++) {
+ const FX_CHAR* name =
+ GetAdobeCharName(m_BaseEncoding, m_pCharNames, charcode);
+ if (name) {
m_Encoding.m_Unicodes[charcode] = PDF_UnicodeFromAdobeName(name);
- m_GlyphIndex[charcode] = FXFT_Get_Name_Index(m_Font.m_Face, (char*)name);
- if (m_GlyphIndex[charcode] == 0) {
- if (FXSYS_strcmp(name, ".notdef") != 0 && FXSYS_strcmp(name, "space") != 0) {
- m_GlyphIndex[charcode] = FXFT_Get_Char_Index(m_Font.m_Face, bUnicode ? m_Encoding.m_Unicodes[charcode] : charcode);
- } else {
- m_Encoding.m_Unicodes[charcode] = 0x20;
- m_GlyphIndex[charcode] = 0xffff;
+ m_GlyphIndex[charcode] =
+ FXFT_Get_Name_Index(m_Font.m_Face, (char*)name);
+ } else {
+ m_GlyphIndex[charcode] = FXFT_Get_Char_Index(m_Font.m_Face, charcode);
+ if (m_GlyphIndex[charcode]) {
+ FX_WCHAR unicode =
+ FT_UnicodeFromCharCode(PDFFONT_ENCODING_STANDARD, charcode);
+ if (unicode == 0) {
+ FX_CHAR name_glyph[256];
+ FXSYS_memset(name_glyph, 0, sizeof(name_glyph));
+ FXFT_Get_Glyph_Name(m_Font.m_Face, m_GlyphIndex[charcode],
+ name_glyph, 256);
+ name_glyph[255] = 0;
+ if (name_glyph[0] != 0) {
+ unicode = PDF_UnicodeFromAdobeName(name_glyph);
}
+ }
+ m_Encoding.m_Unicodes[charcode] = unicode;
}
+ }
}
-#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
+#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
if (!bCoreText) {
- FXSYS_memcpy(m_ExtGID, m_GlyphIndex, 256);
+ FXSYS_memcpy(m_ExtGID, m_GlyphIndex, 256);
}
#endif
+ return;
+ }
+ FX_BOOL bUnicode = FALSE;
+ if (0 == FXFT_Select_Charmap(m_Font.m_Face, FXFT_ENCODING_UNICODE)) {
+ bUnicode = TRUE;
+ }
+ for (int charcode = 0; charcode < 256; charcode++) {
+ const FX_CHAR* name =
+ GetAdobeCharName(m_BaseEncoding, m_pCharNames, charcode);
+ if (name == NULL) {
+ continue;
+ }
+ m_Encoding.m_Unicodes[charcode] = PDF_UnicodeFromAdobeName(name);
+ m_GlyphIndex[charcode] = FXFT_Get_Name_Index(m_Font.m_Face, (char*)name);
+ if (m_GlyphIndex[charcode] == 0) {
+ if (FXSYS_strcmp(name, ".notdef") != 0 &&
+ FXSYS_strcmp(name, "space") != 0) {
+ m_GlyphIndex[charcode] = FXFT_Get_Char_Index(
+ m_Font.m_Face,
+ bUnicode ? m_Encoding.m_Unicodes[charcode] : charcode);
+ } else {
+ m_Encoding.m_Unicodes[charcode] = 0x20;
+ m_GlyphIndex[charcode] = 0xffff;
+ }
+ }
+ }
+#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
+ if (!bCoreText) {
+ FXSYS_memcpy(m_ExtGID, m_GlyphIndex, 256);
+ }
+#endif
}
-CPDF_FontEncoding::CPDF_FontEncoding()
-{
- FXSYS_memset(m_Unicodes, 0, sizeof(m_Unicodes));
-}
-int CPDF_FontEncoding::CharCodeFromUnicode(FX_WCHAR unicode) const
-{
- for (int i = 0; i < 256; i ++)
- if (m_Unicodes[i] == unicode) {
- return i;
- }
- return -1;
-}
-CPDF_FontEncoding::CPDF_FontEncoding(int PredefinedEncoding)
-{
- const FX_WORD* pSrc = PDF_UnicodesForPredefinedCharSet(PredefinedEncoding);
- if (!pSrc) {
- FXSYS_memset(m_Unicodes, 0, sizeof(m_Unicodes));
- } else
- for (int i = 0; i < 256; i++) {
- m_Unicodes[i] = pSrc[i];
- }
+CPDF_FontEncoding::CPDF_FontEncoding() {
+ FXSYS_memset(m_Unicodes, 0, sizeof(m_Unicodes));
}
-FX_BOOL CPDF_FontEncoding::IsIdentical(CPDF_FontEncoding* pAnother) const
-{
- return FXSYS_memcmp(m_Unicodes, pAnother->m_Unicodes, sizeof(m_Unicodes)) == 0;
-}
-CPDF_Object* CPDF_FontEncoding::Realize()
-{
- int predefined = 0;
- for (int cs = PDFFONT_ENCODING_WINANSI; cs < PDFFONT_ENCODING_ZAPFDINGBATS; cs ++) {
- const FX_WORD* pSrc = PDF_UnicodesForPredefinedCharSet(cs);
- FX_BOOL match = TRUE;
- for (int i = 0; i < 256; ++i) {
- if (m_Unicodes[i] != pSrc[i]) {
- match = FALSE;
- break;
- }
- }
- if (match) {
- predefined = cs;
- break;
- }
- }
- if (predefined) {
- if (predefined == PDFFONT_ENCODING_WINANSI) {
- return CPDF_Name::Create("WinAnsiEncoding");
- }
- if (predefined == PDFFONT_ENCODING_MACROMAN) {
- return CPDF_Name::Create("MacRomanEncoding");
- }
- if (predefined == PDFFONT_ENCODING_MACEXPERT) {
- return CPDF_Name::Create("MacExpertEncoding");
- }
- return NULL;
- }
- CPDF_Dictionary* pDict = CPDF_Dictionary::Create();
- pDict->SetAtName(FX_BSTRC("BaseEncoding"), FX_BSTRC("WinAnsiEncoding"));
- const FX_WORD* pStandard = PDF_UnicodesForPredefinedCharSet(PDFFONT_ENCODING_WINANSI);
- CPDF_Array* pDiff = CPDF_Array::Create();
- for (int i = 0; i < 256; i ++) {
- if (pStandard[i] == m_Unicodes[i]) {
- continue;
- }
- pDiff->Add(CPDF_Number::Create(i));
- pDiff->Add(CPDF_Name::Create(PDF_AdobeNameFromUnicode(m_Unicodes[i])));
+int CPDF_FontEncoding::CharCodeFromUnicode(FX_WCHAR unicode) const {
+ for (int i = 0; i < 256; i++)
+ if (m_Unicodes[i] == unicode) {
+ return i;
}
- pDict->SetAt(FX_BSTRC("Differences"), pDiff);
- return pDict;
+ return -1;
}
-CPDF_TrueTypeFont::CPDF_TrueTypeFont() : CPDF_SimpleFont(PDFFONT_TRUETYPE)
-{
-}
-FX_BOOL CPDF_TrueTypeFont::_Load()
-{
- return LoadCommon();
-}
-void CPDF_TrueTypeFont::LoadGlyphMap()
-{
- if (m_Font.m_Face == NULL) {
- return;
- }
- int baseEncoding = m_BaseEncoding;
- if (m_pFontFile && m_Font.m_Face->num_charmaps > 0
- && (baseEncoding == PDFFONT_ENCODING_MACROMAN || baseEncoding == PDFFONT_ENCODING_WINANSI)
- && (m_Flags & PDFFONT_SYMBOLIC)) {
- FX_BOOL bSupportWin = FALSE;
- FX_BOOL bSupportMac = FALSE;
- for (int i = 0; i < FXFT_Get_Face_CharmapCount(m_Font.m_Face); i++) {
- int platform_id = FXFT_Get_Charmap_PlatformID(FXFT_Get_Face_Charmaps(m_Font.m_Face)[i]);
- if (platform_id == 0 || platform_id == 3) {
- bSupportWin = TRUE;
- } else if (platform_id == 0 || platform_id == 1) {
- bSupportMac = TRUE;
- }
- }
- if (baseEncoding == PDFFONT_ENCODING_WINANSI && !bSupportWin) {
- baseEncoding = bSupportMac ? PDFFONT_ENCODING_MACROMAN : PDFFONT_ENCODING_BUILTIN;
- } else if (baseEncoding == PDFFONT_ENCODING_MACROMAN && !bSupportMac) {
- baseEncoding = bSupportWin ? PDFFONT_ENCODING_WINANSI : PDFFONT_ENCODING_BUILTIN;
- }
+CPDF_FontEncoding::CPDF_FontEncoding(int PredefinedEncoding) {
+ const FX_WORD* pSrc = PDF_UnicodesForPredefinedCharSet(PredefinedEncoding);
+ if (!pSrc) {
+ FXSYS_memset(m_Unicodes, 0, sizeof(m_Unicodes));
+ } else
+ for (int i = 0; i < 256; i++) {
+ m_Unicodes[i] = pSrc[i];
+ }
+}
+FX_BOOL CPDF_FontEncoding::IsIdentical(CPDF_FontEncoding* pAnother) const {
+ return FXSYS_memcmp(m_Unicodes, pAnother->m_Unicodes, sizeof(m_Unicodes)) ==
+ 0;
+}
+CPDF_Object* CPDF_FontEncoding::Realize() {
+ int predefined = 0;
+ for (int cs = PDFFONT_ENCODING_WINANSI; cs < PDFFONT_ENCODING_ZAPFDINGBATS;
+ cs++) {
+ const FX_WORD* pSrc = PDF_UnicodesForPredefinedCharSet(cs);
+ FX_BOOL match = TRUE;
+ for (int i = 0; i < 256; ++i) {
+ if (m_Unicodes[i] != pSrc[i]) {
+ match = FALSE;
+ break;
+ }
+ }
+ if (match) {
+ predefined = cs;
+ break;
+ }
+ }
+ if (predefined) {
+ if (predefined == PDFFONT_ENCODING_WINANSI) {
+ return CPDF_Name::Create("WinAnsiEncoding");
+ }
+ if (predefined == PDFFONT_ENCODING_MACROMAN) {
+ return CPDF_Name::Create("MacRomanEncoding");
+ }
+ if (predefined == PDFFONT_ENCODING_MACEXPERT) {
+ return CPDF_Name::Create("MacExpertEncoding");
}
- if (((baseEncoding == PDFFONT_ENCODING_MACROMAN || baseEncoding == PDFFONT_ENCODING_WINANSI)
- && m_pCharNames == NULL) || (m_Flags & PDFFONT_NONSYMBOLIC)) {
- if (!FXFT_Has_Glyph_Names(m_Font.m_Face) && (!m_Font.m_Face->num_charmaps || !m_Font.m_Face->charmaps)) {
- int nStartChar = m_pFontDict->GetInteger(FX_BSTRC("FirstChar"));
- if(nStartChar < 0 || nStartChar > 255)
- return;
-
- int charcode = 0;
- for (; charcode < nStartChar; charcode ++) {
- m_GlyphIndex[charcode] = 0;
- }
- FX_WORD nGlyph = charcode - nStartChar + 3;
- for (; charcode < 256; charcode ++, nGlyph ++) {
- m_GlyphIndex[charcode] = nGlyph;
- }
- return;
- }
- FX_BOOL bMSUnicode = FT_UseTTCharmap(m_Font.m_Face, 3, 1);
- FX_BOOL bMacRoman = FALSE, bMSSymbol = FALSE;
- if (!bMSUnicode) {
- if (m_Flags & PDFFONT_NONSYMBOLIC) {
- bMacRoman = FT_UseTTCharmap(m_Font.m_Face, 1, 0);
- bMSSymbol = !bMacRoman && FT_UseTTCharmap(m_Font.m_Face, 3, 0);
- } else {
- bMSSymbol = FT_UseTTCharmap(m_Font.m_Face, 3, 0);
- bMacRoman = !bMSSymbol && FT_UseTTCharmap(m_Font.m_Face, 1, 0);
- }
- }
- FX_BOOL bToUnicode = m_pFontDict->KeyExist(FX_BSTRC("ToUnicode"));
- for (int charcode = 0; charcode < 256; charcode ++) {
- const FX_CHAR* name = GetAdobeCharName(baseEncoding, m_pCharNames, charcode);
- if (name == NULL) {
- m_GlyphIndex[charcode] = m_pFontFile ? FXFT_Get_Char_Index(m_Font.m_Face, charcode) : -1;
- continue;
- }
- m_Encoding.m_Unicodes[charcode] = PDF_UnicodeFromAdobeName(name);
- if (bMSSymbol) {
- const uint8_t prefix[4] = {0x00, 0xf0, 0xf1, 0xf2};
- for (int j = 0; j < 4; j ++) {
- FX_WORD unicode = prefix[j] * 256 + charcode;
- m_GlyphIndex[charcode] = FXFT_Get_Char_Index(m_Font.m_Face, unicode);
- if (m_GlyphIndex[charcode]) {
- break;
- }
- }
- } else if (m_Encoding.m_Unicodes[charcode]) {
- if (bMSUnicode) {
- m_GlyphIndex[charcode] = FXFT_Get_Char_Index(m_Font.m_Face, m_Encoding.m_Unicodes[charcode]);
- } else if (bMacRoman) {
- FX_DWORD maccode = FT_CharCodeFromUnicode(FXFT_ENCODING_APPLE_ROMAN, m_Encoding.m_Unicodes[charcode]);
- if (!maccode) {
- m_GlyphIndex[charcode] = FXFT_Get_Name_Index(m_Font.m_Face, (char *)name);
- } else {
- m_GlyphIndex[charcode] = FXFT_Get_Char_Index(m_Font.m_Face, maccode);
- }
- }
- }
- if ((m_GlyphIndex[charcode] == 0 || m_GlyphIndex[charcode] == 0xffff) && name != NULL) {
- if (name[0] == '.' && FXSYS_strcmp(name, ".notdef") == 0) {
- m_GlyphIndex[charcode] = FXFT_Get_Char_Index(m_Font.m_Face, 32);
- } else {
- m_GlyphIndex[charcode] = FXFT_Get_Name_Index(m_Font.m_Face, (char*)name);
- if (m_GlyphIndex[charcode] == 0) {
- if (bToUnicode) {
- CFX_WideString wsUnicode = UnicodeFromCharCode(charcode);
- if (!wsUnicode.IsEmpty()) {
- m_GlyphIndex[charcode] = FXFT_Get_Char_Index(m_Font.m_Face, wsUnicode[0]);
- m_Encoding.m_Unicodes[charcode] = wsUnicode[0];
- }
- }
- if (m_GlyphIndex[charcode] == 0) {
- m_GlyphIndex[charcode] = FXFT_Get_Char_Index(m_Font.m_Face, charcode);
- }
- }
- }
- }
- }
+ return NULL;
+ }
+ CPDF_Dictionary* pDict = CPDF_Dictionary::Create();
+ pDict->SetAtName(FX_BSTRC("BaseEncoding"), FX_BSTRC("WinAnsiEncoding"));
+ const FX_WORD* pStandard =
+ PDF_UnicodesForPredefinedCharSet(PDFFONT_ENCODING_WINANSI);
+ CPDF_Array* pDiff = CPDF_Array::Create();
+ for (int i = 0; i < 256; i++) {
+ if (pStandard[i] == m_Unicodes[i]) {
+ continue;
+ }
+ pDiff->Add(CPDF_Number::Create(i));
+ pDiff->Add(CPDF_Name::Create(PDF_AdobeNameFromUnicode(m_Unicodes[i])));
+ }
+ pDict->SetAt(FX_BSTRC("Differences"), pDiff);
+ return pDict;
+}
+CPDF_TrueTypeFont::CPDF_TrueTypeFont() : CPDF_SimpleFont(PDFFONT_TRUETYPE) {}
+FX_BOOL CPDF_TrueTypeFont::_Load() {
+ return LoadCommon();
+}
+void CPDF_TrueTypeFont::LoadGlyphMap() {
+ if (m_Font.m_Face == NULL) {
+ return;
+ }
+ int baseEncoding = m_BaseEncoding;
+ if (m_pFontFile && m_Font.m_Face->num_charmaps > 0 &&
+ (baseEncoding == PDFFONT_ENCODING_MACROMAN ||
+ baseEncoding == PDFFONT_ENCODING_WINANSI) &&
+ (m_Flags & PDFFONT_SYMBOLIC)) {
+ FX_BOOL bSupportWin = FALSE;
+ FX_BOOL bSupportMac = FALSE;
+ for (int i = 0; i < FXFT_Get_Face_CharmapCount(m_Font.m_Face); i++) {
+ int platform_id =
+ FXFT_Get_Charmap_PlatformID(FXFT_Get_Face_Charmaps(m_Font.m_Face)[i]);
+ if (platform_id == 0 || platform_id == 3) {
+ bSupportWin = TRUE;
+ } else if (platform_id == 0 || platform_id == 1) {
+ bSupportMac = TRUE;
+ }
+ }
+ if (baseEncoding == PDFFONT_ENCODING_WINANSI && !bSupportWin) {
+ baseEncoding =
+ bSupportMac ? PDFFONT_ENCODING_MACROMAN : PDFFONT_ENCODING_BUILTIN;
+ } else if (baseEncoding == PDFFONT_ENCODING_MACROMAN && !bSupportMac) {
+ baseEncoding =
+ bSupportWin ? PDFFONT_ENCODING_WINANSI : PDFFONT_ENCODING_BUILTIN;
+ }
+ }
+ if (((baseEncoding == PDFFONT_ENCODING_MACROMAN ||
+ baseEncoding == PDFFONT_ENCODING_WINANSI) &&
+ m_pCharNames == NULL) ||
+ (m_Flags & PDFFONT_NONSYMBOLIC)) {
+ if (!FXFT_Has_Glyph_Names(m_Font.m_Face) &&
+ (!m_Font.m_Face->num_charmaps || !m_Font.m_Face->charmaps)) {
+ int nStartChar = m_pFontDict->GetInteger(FX_BSTRC("FirstChar"));
+ if (nStartChar < 0 || nStartChar > 255)
return;
- }
- if (FT_UseTTCharmap(m_Font.m_Face, 3, 0)) {
+
+ int charcode = 0;
+ for (; charcode < nStartChar; charcode++) {
+ m_GlyphIndex[charcode] = 0;
+ }
+ FX_WORD nGlyph = charcode - nStartChar + 3;
+ for (; charcode < 256; charcode++, nGlyph++) {
+ m_GlyphIndex[charcode] = nGlyph;
+ }
+ return;
+ }
+ FX_BOOL bMSUnicode = FT_UseTTCharmap(m_Font.m_Face, 3, 1);
+ FX_BOOL bMacRoman = FALSE, bMSSymbol = FALSE;
+ if (!bMSUnicode) {
+ if (m_Flags & PDFFONT_NONSYMBOLIC) {
+ bMacRoman = FT_UseTTCharmap(m_Font.m_Face, 1, 0);
+ bMSSymbol = !bMacRoman && FT_UseTTCharmap(m_Font.m_Face, 3, 0);
+ } else {
+ bMSSymbol = FT_UseTTCharmap(m_Font.m_Face, 3, 0);
+ bMacRoman = !bMSSymbol && FT_UseTTCharmap(m_Font.m_Face, 1, 0);
+ }
+ }
+ FX_BOOL bToUnicode = m_pFontDict->KeyExist(FX_BSTRC("ToUnicode"));
+ for (int charcode = 0; charcode < 256; charcode++) {
+ const FX_CHAR* name =
+ GetAdobeCharName(baseEncoding, m_pCharNames, charcode);
+ if (name == NULL) {
+ m_GlyphIndex[charcode] =
+ m_pFontFile ? FXFT_Get_Char_Index(m_Font.m_Face, charcode) : -1;
+ continue;
+ }
+ m_Encoding.m_Unicodes[charcode] = PDF_UnicodeFromAdobeName(name);
+ if (bMSSymbol) {
const uint8_t prefix[4] = {0x00, 0xf0, 0xf1, 0xf2};
- FX_BOOL bGotOne = FALSE;
- for (int charcode = 0; charcode < 256; charcode ++) {
- for (int j = 0; j < 4; j ++) {
- FX_WORD unicode = prefix[j] * 256 + charcode;
- m_GlyphIndex[charcode] = FXFT_Get_Char_Index(m_Font.m_Face, unicode);
- if (m_GlyphIndex[charcode]) {
- bGotOne = TRUE;
- break;
- }
- }
- }
- if (bGotOne) {
- if (baseEncoding != PDFFONT_ENCODING_BUILTIN) {
- for (int charcode = 0; charcode < 256; charcode ++) {
- const FX_CHAR* name = GetAdobeCharName(baseEncoding, m_pCharNames, charcode);
- if (name == NULL) {
- continue;
- }
- m_Encoding.m_Unicodes[charcode] = PDF_UnicodeFromAdobeName(name);
- }
- } else if (FT_UseTTCharmap(m_Font.m_Face, 1, 0)) {
- for (int charcode = 0; charcode < 256; charcode ++) {
- m_Encoding.m_Unicodes[charcode] = FT_UnicodeFromCharCode(FXFT_ENCODING_APPLE_ROMAN, charcode);
- }
- }
- return;
- }
- }
- if (FT_UseTTCharmap(m_Font.m_Face, 1, 0)) {
- FX_BOOL bGotOne = FALSE;
- for (int charcode = 0; charcode < 256; charcode ++) {
- m_GlyphIndex[charcode] = FXFT_Get_Char_Index(m_Font.m_Face, charcode);
- m_Encoding.m_Unicodes[charcode] = FT_UnicodeFromCharCode(FXFT_ENCODING_APPLE_ROMAN, charcode);
- if (m_GlyphIndex[charcode]) {
- bGotOne = TRUE;
- }
- }
- if (m_pFontFile || bGotOne) {
- return;
- }
- }
- if (FXFT_Select_Charmap(m_Font.m_Face, FXFT_ENCODING_UNICODE) == 0) {
- FX_BOOL bGotOne = FALSE;
- const FX_WORD* pUnicodes = PDF_UnicodesForPredefinedCharSet(baseEncoding);
- for (int charcode = 0; charcode < 256; charcode ++) {
- if (m_pFontFile == NULL) {
- const FX_CHAR* name = GetAdobeCharName(0, m_pCharNames, charcode);
- if (name != NULL) {
- m_Encoding.m_Unicodes[charcode] = PDF_UnicodeFromAdobeName(name);
- } else if (pUnicodes) {
- m_Encoding.m_Unicodes[charcode] = pUnicodes[charcode];
- }
- } else {
- m_Encoding.m_Unicodes[charcode] = charcode;
- }
- m_GlyphIndex[charcode] = FXFT_Get_Char_Index(m_Font.m_Face, m_Encoding.m_Unicodes[charcode]);
- if (m_GlyphIndex[charcode]) {
- bGotOne = TRUE;
+ for (int j = 0; j < 4; j++) {
+ FX_WORD unicode = prefix[j] * 256 + charcode;
+ m_GlyphIndex[charcode] = FXFT_Get_Char_Index(m_Font.m_Face, unicode);
+ if (m_GlyphIndex[charcode]) {
+ break;
+ }
+ }
+ } else if (m_Encoding.m_Unicodes[charcode]) {
+ if (bMSUnicode) {
+ m_GlyphIndex[charcode] = FXFT_Get_Char_Index(
+ m_Font.m_Face, m_Encoding.m_Unicodes[charcode]);
+ } else if (bMacRoman) {
+ FX_DWORD maccode = FT_CharCodeFromUnicode(
+ FXFT_ENCODING_APPLE_ROMAN, m_Encoding.m_Unicodes[charcode]);
+ if (!maccode) {
+ m_GlyphIndex[charcode] =
+ FXFT_Get_Name_Index(m_Font.m_Face, (char*)name);
+ } else {
+ m_GlyphIndex[charcode] =
+ FXFT_Get_Char_Index(m_Font.m_Face, maccode);
+ }
+ }
+ }
+ if ((m_GlyphIndex[charcode] == 0 || m_GlyphIndex[charcode] == 0xffff) &&
+ name != NULL) {
+ if (name[0] == '.' && FXSYS_strcmp(name, ".notdef") == 0) {
+ m_GlyphIndex[charcode] = FXFT_Get_Char_Index(m_Font.m_Face, 32);
+ } else {
+ m_GlyphIndex[charcode] =
+ FXFT_Get_Name_Index(m_Font.m_Face, (char*)name);
+ if (m_GlyphIndex[charcode] == 0) {
+ if (bToUnicode) {
+ CFX_WideString wsUnicode = UnicodeFromCharCode(charcode);
+ if (!wsUnicode.IsEmpty()) {
+ m_GlyphIndex[charcode] =
+ FXFT_Get_Char_Index(m_Font.m_Face, wsUnicode[0]);
+ m_Encoding.m_Unicodes[charcode] = wsUnicode[0];
+ }
}
- }
- if (bGotOne) {
- return;
- }
- }
- for (int charcode = 0; charcode < 256; charcode ++) {
- m_GlyphIndex[charcode] = charcode;
- }
-}
-CPDF_Type3Font::CPDF_Type3Font() : CPDF_SimpleFont(PDFFONT_TYPE3)
-{
- m_pPageResources = NULL;
- FXSYS_memset(m_CharWidthL, 0, sizeof m_CharWidthL);
-}
-CPDF_Type3Font::~CPDF_Type3Font()
-{
- FX_POSITION pos = m_CacheMap.GetStartPosition();
- while (pos) {
- void* key;
- void* value;
- m_CacheMap.GetNextAssoc(pos, key, value);
- delete (CPDF_Type3Char*)value;
- }
- m_CacheMap.RemoveAll();
- pos = m_DeletedMap.GetStartPosition();
- while (pos) {
- void* key;
- void* value;
- m_DeletedMap.GetNextAssoc(pos, key, value);
- delete (CPDF_Type3Char*)key;
- }
-}
-FX_BOOL CPDF_Type3Font::_Load()
-{
- m_pFontResources = m_pFontDict->GetDict(FX_BSTRC("Resources"));
- CPDF_Array* pMatrix = m_pFontDict->GetArray(FX_BSTRC("FontMatrix"));
- FX_FLOAT xscale = 1.0f, yscale = 1.0f;
- if (pMatrix) {
- m_FontMatrix = pMatrix->GetMatrix();
- xscale = m_FontMatrix.a;
- yscale = m_FontMatrix.d;
- }
- CPDF_Array* pBBox = m_pFontDict->GetArray(FX_BSTRC("FontBBox"));
- if (pBBox) {
- m_FontBBox.left = (int32_t)(FXSYS_Mul(pBBox->GetNumber(0), xscale) * 1000);
- m_FontBBox.bottom = (int32_t)(FXSYS_Mul(pBBox->GetNumber(1), yscale) * 1000);
- m_FontBBox.right = (int32_t)(FXSYS_Mul(pBBox->GetNumber(2), xscale) * 1000);
- m_FontBBox.top = (int32_t)(FXSYS_Mul(pBBox->GetNumber(3), yscale) * 1000);
- }
- int StartChar = m_pFontDict->GetInteger(FX_BSTRC("FirstChar"));
- CPDF_Array* pWidthArray = m_pFontDict->GetArray(FX_BSTRC("Widths"));
- if (pWidthArray && (StartChar >= 0 && StartChar < 256)) {
- FX_DWORD count = pWidthArray->GetCount();
- if (count > 256) {
- count = 256;
- }
- if (StartChar + count > 256) {
- count = 256 - StartChar;
- }
- for (FX_DWORD i = 0; i < count; i ++) {
- m_CharWidthL[StartChar + i] = FXSYS_round(FXSYS_Mul(pWidthArray->GetNumber(i), xscale) * 1000);
- }
- }
- m_pCharProcs = m_pFontDict->GetDict(FX_BSTRC("CharProcs"));
- CPDF_Object* pEncoding = m_pFontDict->GetElementValue(FX_BSTRC("Encoding"));
- if (pEncoding) {
- LoadPDFEncoding(pEncoding, m_BaseEncoding, m_pCharNames, FALSE, FALSE);
- if (m_pCharNames) {
- for (int i = 0; i < 256; i ++) {
- m_Encoding.m_Unicodes[i] = PDF_UnicodeFromAdobeName(m_pCharNames[i]);
- if (m_Encoding.m_Unicodes[i] == 0) {
- m_Encoding.m_Unicodes[i] = i;
- }
+ if (m_GlyphIndex[charcode] == 0) {
+ m_GlyphIndex[charcode] =
+ FXFT_Get_Char_Index(m_Font.m_Face, charcode);
}
- }
- }
- return TRUE;
-}
-void CPDF_Type3Font::CheckType3FontMetrics()
-{
- CheckFontMetrics();
-}
-CPDF_Type3Char* CPDF_Type3Font::LoadChar(FX_DWORD charcode, int level)
-{
- if (level >= _FPDF_MAX_TYPE3_FORM_LEVEL_) {
- return NULL;
- }
- CPDF_Type3Char* pChar = NULL;
- if (m_CacheMap.Lookup((void*)(uintptr_t)charcode, (void*&)pChar)) {
- if (pChar->m_bPageRequired && m_pPageResources) {
- delete pChar;
- m_CacheMap.RemoveKey((void*)(uintptr_t)charcode);
- return LoadChar(charcode, level + 1);
- }
- return pChar;
- }
- const FX_CHAR* name = GetAdobeCharName(m_BaseEncoding, m_pCharNames, charcode);
- if (name == NULL) {
- return NULL;
- }
- CPDF_Stream* pStream = (CPDF_Stream*)(m_pCharProcs ? m_pCharProcs->GetElementValue(name) : NULL);
- if (pStream == NULL || pStream->GetType() != PDFOBJ_STREAM) {
- return NULL;
- }
- pChar = new CPDF_Type3Char;
- pChar->m_pForm = new CPDF_Form(m_pDocument, m_pFontResources ? m_pFontResources : m_pPageResources, pStream, NULL);
- pChar->m_pForm->ParseContent(NULL, NULL, pChar, NULL, level + 1);
- FX_FLOAT scale = m_FontMatrix.GetXUnit();
- pChar->m_Width = (int32_t)(pChar->m_Width * scale + 0.5f);
- FX_RECT &rcBBox = pChar->m_BBox;
- CFX_FloatRect char_rect((FX_FLOAT)rcBBox.left / 1000.0f, (FX_FLOAT)rcBBox.bottom / 1000.0f,
- (FX_FLOAT)rcBBox.right / 1000.0f, (FX_FLOAT)rcBBox.top / 1000.0f);
- if (rcBBox.right <= rcBBox.left || rcBBox.bottom >= rcBBox.top) {
- char_rect = pChar->m_pForm->CalcBoundingBox();
- }
- char_rect.Transform(&m_FontMatrix);
- rcBBox.left = FXSYS_round(char_rect.left * 1000);
- rcBBox.right = FXSYS_round(char_rect.right * 1000);
- rcBBox.top = FXSYS_round(char_rect.top * 1000);
- rcBBox.bottom = FXSYS_round(char_rect.bottom * 1000);
- m_CacheMap.SetAt((void*)(uintptr_t)charcode, pChar);
- if (pChar->m_pForm->CountObjects() == 0) {
- delete pChar->m_pForm;
- pChar->m_pForm = NULL;
+ }
+ }
+ }
+ }
+ return;
+ }
+ if (FT_UseTTCharmap(m_Font.m_Face, 3, 0)) {
+ const uint8_t prefix[4] = {0x00, 0xf0, 0xf1, 0xf2};
+ FX_BOOL bGotOne = FALSE;
+ for (int charcode = 0; charcode < 256; charcode++) {
+ for (int j = 0; j < 4; j++) {
+ FX_WORD unicode = prefix[j] * 256 + charcode;
+ m_GlyphIndex[charcode] = FXFT_Get_Char_Index(m_Font.m_Face, unicode);
+ if (m_GlyphIndex[charcode]) {
+ bGotOne = TRUE;
+ break;
+ }
+ }
+ }
+ if (bGotOne) {
+ if (baseEncoding != PDFFONT_ENCODING_BUILTIN) {
+ for (int charcode = 0; charcode < 256; charcode++) {
+ const FX_CHAR* name =
+ GetAdobeCharName(baseEncoding, m_pCharNames, charcode);
+ if (name == NULL) {
+ continue;
+ }
+ m_Encoding.m_Unicodes[charcode] = PDF_UnicodeFromAdobeName(name);
+ }
+ } else if (FT_UseTTCharmap(m_Font.m_Face, 1, 0)) {
+ for (int charcode = 0; charcode < 256; charcode++) {
+ m_Encoding.m_Unicodes[charcode] =
+ FT_UnicodeFromCharCode(FXFT_ENCODING_APPLE_ROMAN, charcode);
+ }
+ }
+ return;
+ }
+ }
+ if (FT_UseTTCharmap(m_Font.m_Face, 1, 0)) {
+ FX_BOOL bGotOne = FALSE;
+ for (int charcode = 0; charcode < 256; charcode++) {
+ m_GlyphIndex[charcode] = FXFT_Get_Char_Index(m_Font.m_Face, charcode);
+ m_Encoding.m_Unicodes[charcode] =
+ FT_UnicodeFromCharCode(FXFT_ENCODING_APPLE_ROMAN, charcode);
+ if (m_GlyphIndex[charcode]) {
+ bGotOne = TRUE;
+ }
+ }
+ if (m_pFontFile || bGotOne) {
+ return;
+ }
+ }
+ if (FXFT_Select_Charmap(m_Font.m_Face, FXFT_ENCODING_UNICODE) == 0) {
+ FX_BOOL bGotOne = FALSE;
+ const FX_WORD* pUnicodes = PDF_UnicodesForPredefinedCharSet(baseEncoding);
+ for (int charcode = 0; charcode < 256; charcode++) {
+ if (m_pFontFile == NULL) {
+ const FX_CHAR* name = GetAdobeCharName(0, m_pCharNames, charcode);
+ if (name != NULL) {
+ m_Encoding.m_Unicodes[charcode] = PDF_UnicodeFromAdobeName(name);
+ } else if (pUnicodes) {
+ m_Encoding.m_Unicodes[charcode] = pUnicodes[charcode];
+ }
+ } else {
+ m_Encoding.m_Unicodes[charcode] = charcode;
+ }
+ m_GlyphIndex[charcode] =
+ FXFT_Get_Char_Index(m_Font.m_Face, m_Encoding.m_Unicodes[charcode]);
+ if (m_GlyphIndex[charcode]) {
+ bGotOne = TRUE;
+ }
+ }
+ if (bGotOne) {
+ return;
+ }
+ }
+ for (int charcode = 0; charcode < 256; charcode++) {
+ m_GlyphIndex[charcode] = charcode;
+ }
+}
+CPDF_Type3Font::CPDF_Type3Font() : CPDF_SimpleFont(PDFFONT_TYPE3) {
+ m_pPageResources = NULL;
+ FXSYS_memset(m_CharWidthL, 0, sizeof m_CharWidthL);
+}
+CPDF_Type3Font::~CPDF_Type3Font() {
+ FX_POSITION pos = m_CacheMap.GetStartPosition();
+ while (pos) {
+ void* key;
+ void* value;
+ m_CacheMap.GetNextAssoc(pos, key, value);
+ delete (CPDF_Type3Char*)value;
+ }
+ m_CacheMap.RemoveAll();
+ pos = m_DeletedMap.GetStartPosition();
+ while (pos) {
+ void* key;
+ void* value;
+ m_DeletedMap.GetNextAssoc(pos, key, value);
+ delete (CPDF_Type3Char*)key;
+ }
+}
+FX_BOOL CPDF_Type3Font::_Load() {
+ m_pFontResources = m_pFontDict->GetDict(FX_BSTRC("Resources"));
+ CPDF_Array* pMatrix = m_pFontDict->GetArray(FX_BSTRC("FontMatrix"));
+ FX_FLOAT xscale = 1.0f, yscale = 1.0f;
+ if (pMatrix) {
+ m_FontMatrix = pMatrix->GetMatrix();
+ xscale = m_FontMatrix.a;
+ yscale = m_FontMatrix.d;
+ }
+ CPDF_Array* pBBox = m_pFontDict->GetArray(FX_BSTRC("FontBBox"));
+ if (pBBox) {
+ m_FontBBox.left = (int32_t)(FXSYS_Mul(pBBox->GetNumber(0), xscale) * 1000);
+ m_FontBBox.bottom =
+ (int32_t)(FXSYS_Mul(pBBox->GetNumber(1), yscale) * 1000);
+ m_FontBBox.right = (int32_t)(FXSYS_Mul(pBBox->GetNumber(2), xscale) * 1000);
+ m_FontBBox.top = (int32_t)(FXSYS_Mul(pBBox->GetNumber(3), yscale) * 1000);
+ }
+ int StartChar = m_pFontDict->GetInteger(FX_BSTRC("FirstChar"));
+ CPDF_Array* pWidthArray = m_pFontDict->GetArray(FX_BSTRC("Widths"));
+ if (pWidthArray && (StartChar >= 0 && StartChar < 256)) {
+ FX_DWORD count = pWidthArray->GetCount();
+ if (count > 256) {
+ count = 256;
+ }
+ if (StartChar + count > 256) {
+ count = 256 - StartChar;
+ }
+ for (FX_DWORD i = 0; i < count; i++) {
+ m_CharWidthL[StartChar + i] =
+ FXSYS_round(FXSYS_Mul(pWidthArray->GetNumber(i), xscale) * 1000);
+ }
+ }
+ m_pCharProcs = m_pFontDict->GetDict(FX_BSTRC("CharProcs"));
+ CPDF_Object* pEncoding = m_pFontDict->GetElementValue(FX_BSTRC("Encoding"));
+ if (pEncoding) {
+ LoadPDFEncoding(pEncoding, m_BaseEncoding, m_pCharNames, FALSE, FALSE);
+ if (m_pCharNames) {
+ for (int i = 0; i < 256; i++) {
+ m_Encoding.m_Unicodes[i] = PDF_UnicodeFromAdobeName(m_pCharNames[i]);
+ if (m_Encoding.m_Unicodes[i] == 0) {
+ m_Encoding.m_Unicodes[i] = i;
+ }
+ }
+ }
+ }
+ return TRUE;
+}
+void CPDF_Type3Font::CheckType3FontMetrics() {
+ CheckFontMetrics();
+}
+CPDF_Type3Char* CPDF_Type3Font::LoadChar(FX_DWORD charcode, int level) {
+ if (level >= _FPDF_MAX_TYPE3_FORM_LEVEL_) {
+ return NULL;
+ }
+ CPDF_Type3Char* pChar = NULL;
+ if (m_CacheMap.Lookup((void*)(uintptr_t)charcode, (void*&)pChar)) {
+ if (pChar->m_bPageRequired && m_pPageResources) {
+ delete pChar;
+ m_CacheMap.RemoveKey((void*)(uintptr_t)charcode);
+ return LoadChar(charcode, level + 1);
}
return pChar;
-}
-int CPDF_Type3Font::GetCharWidthF(FX_DWORD charcode, int level)
-{
- if (charcode > 0xff) {
- charcode = 0;
- }
- if (m_CharWidthL[charcode]) {
- return m_CharWidthL[charcode];
- }
- CPDF_Type3Char* pChar = LoadChar(charcode, level);
- if (pChar == NULL) {
- return 0;
- }
- return pChar->m_Width;
-}
-void CPDF_Type3Font::GetCharBBox(FX_DWORD charcode, FX_RECT& rect, int level)
-{
- CPDF_Type3Char* pChar = LoadChar(charcode, level);
- if (pChar == NULL) {
- rect.left = rect.right = rect.top = rect.bottom = 0;
- return;
- }
- rect = pChar->m_BBox;
-}
-CPDF_Type3Char::CPDF_Type3Char()
-{
- m_pForm = NULL;
- m_pBitmap = NULL;
- m_bPageRequired = FALSE;
- m_bColored = FALSE;
-}
-CPDF_Type3Char::~CPDF_Type3Char()
-{
- delete m_pForm;
- delete m_pBitmap;
+ }
+ const FX_CHAR* name =
+ GetAdobeCharName(m_BaseEncoding, m_pCharNames, charcode);
+ if (name == NULL) {
+ return NULL;
+ }
+ CPDF_Stream* pStream =
+ (CPDF_Stream*)(m_pCharProcs ? m_pCharProcs->GetElementValue(name) : NULL);
+ if (pStream == NULL || pStream->GetType() != PDFOBJ_STREAM) {
+ return NULL;
+ }
+ pChar = new CPDF_Type3Char;
+ pChar->m_pForm = new CPDF_Form(
+ m_pDocument, m_pFontResources ? m_pFontResources : m_pPageResources,
+ pStream, NULL);
+ pChar->m_pForm->ParseContent(NULL, NULL, pChar, NULL, level + 1);
+ FX_FLOAT scale = m_FontMatrix.GetXUnit();
+ pChar->m_Width = (int32_t)(pChar->m_Width * scale + 0.5f);
+ FX_RECT& rcBBox = pChar->m_BBox;
+ CFX_FloatRect char_rect(
+ (FX_FLOAT)rcBBox.left / 1000.0f, (FX_FLOAT)rcBBox.bottom / 1000.0f,
+ (FX_FLOAT)rcBBox.right / 1000.0f, (FX_FLOAT)rcBBox.top / 1000.0f);
+ if (rcBBox.right <= rcBBox.left || rcBBox.bottom >= rcBBox.top) {
+ char_rect = pChar->m_pForm->CalcBoundingBox();
+ }
+ char_rect.Transform(&m_FontMatrix);
+ rcBBox.left = FXSYS_round(char_rect.left * 1000);
+ rcBBox.right = FXSYS_round(char_rect.right * 1000);
+ rcBBox.top = FXSYS_round(char_rect.top * 1000);
+ rcBBox.bottom = FXSYS_round(char_rect.bottom * 1000);
+ m_CacheMap.SetAt((void*)(uintptr_t)charcode, pChar);
+ if (pChar->m_pForm->CountObjects() == 0) {
+ delete pChar->m_pForm;
+ pChar->m_pForm = NULL;
+ }
+ return pChar;
+}
+int CPDF_Type3Font::GetCharWidthF(FX_DWORD charcode, int level) {
+ if (charcode > 0xff) {
+ charcode = 0;
+ }
+ if (m_CharWidthL[charcode]) {
+ return m_CharWidthL[charcode];
+ }
+ CPDF_Type3Char* pChar = LoadChar(charcode, level);
+ if (pChar == NULL) {
+ return 0;
+ }
+ return pChar->m_Width;
+}
+void CPDF_Type3Font::GetCharBBox(FX_DWORD charcode, FX_RECT& rect, int level) {
+ CPDF_Type3Char* pChar = LoadChar(charcode, level);
+ if (pChar == NULL) {
+ rect.left = rect.right = rect.top = rect.bottom = 0;
+ return;
+ }
+ rect = pChar->m_BBox;
+}
+CPDF_Type3Char::CPDF_Type3Char() {
+ m_pForm = NULL;
+ m_pBitmap = NULL;
+ m_bPageRequired = FALSE;
+ m_bColored = FALSE;
+}
+CPDF_Type3Char::~CPDF_Type3Char() {
+ delete m_pForm;
+ delete m_pBitmap;
}
diff --git a/core/src/fpdfapi/fpdf_font/fpdf_font_charset.cpp b/core/src/fpdfapi/fpdf_font/fpdf_font_charset.cpp
index bf5b757a75..a0b65af9c5 100644
--- a/core/src/fpdfapi/fpdf_font/fpdf_font_charset.cpp
+++ b/core/src/fpdfapi/fpdf_font/fpdf_font_charset.cpp
@@ -12,600 +12,1767 @@
extern const FX_WORD PDFDocEncoding[256];
static const struct _UnicodeAlt {
- FX_WORD m_Unicode;
- const FX_CHAR* m_Alter;
+ FX_WORD m_Unicode;
+ const FX_CHAR* m_Alter;
} UnicodeAlts[] = {
- {0x00a0, " "}, {0x00a1, "!"}, {0x00a2, "c"}, {0x00a3, "P"}, {0x00a4, "o"},
- {0x00a5, "Y"}, {0x00a6, "|"}, {0x00a7, "S"}, {0x00a9, "(C)"}, {0x00aa, "a"},
- {0x00ab, "<<"}, {0x00ac, "-|"}, {0x00ae, "(R)"}, {0x00af, "-"},
- {0x00b0, "o"}, {0x00b1, "+/-"}, {0x00b2, "^2"}, { 0x00b3, "^3"},
- {0x00b4, "'"}, {0x00b5, "u"}, {0x00b6, "P"}, {0x00b7, "."},
- {0x00b9, "^1"}, {0x00ba, "o"}, {0x00bb, ">>"}, {0x00bc, "1/4"},
- {0x00bd, "1/2"}, {0x00be, "3/4"}, {0x00bf, "?"}, {0x00c0, "A"},
- {0x00c1, "A"}, {0x00c2, "A"}, {0x00c3, "A"}, {0x00c4, "A"},
- {0x00c5, "A"}, {0x00c6, "AE"}, {0x00c7, "C"}, {0x00c8, "E"},
- {0x00c9, "E"}, {0x00ca, "E"}, {0x00cb, "E"}, {0x00cc, "I"},
- {0x00cd, "I"}, {0x00ce, "I"}, {0x00cf, "I"},
- {0x00d1, "N"}, {0x00d2, "O"}, {0x00d3, "O"}, {0x00d4, "O"},
- {0x00d5, "O"}, {0x00d6, "O"}, {0x00d7, "x"}, {0x00d8, "O"},
- {0x00d9, "U"}, {0x00da, "U"}, {0x00db, "U"}, {0x00dc, "U"},
- {0x00dd, "Y"}, {0x00df, "S"}, {0x00e0, "a"},
- {0x00e1, "a"}, {0x00e2, "a"}, {0x00e3, "a"}, {0x00e4, "a"},
- {0x00e5, "a"}, {0x00e6, "ae"}, {0x00e7, "c"}, {0x00e8, "e"},
- {0x00e9, "e"}, {0x00ea, "e"}, {0x00eb, "e"}, {0x00ec, "i"},
- {0x00ed, "i"}, {0x00ee, "i"}, {0x00ef, "i"},
- {0x00f1, "n"}, {0x00f2, "o"}, {0x00f3, "o"}, {0x00f4, "o"},
- {0x00f5, "o"}, {0x00f6, "o"}, {0x00f7, "/"}, {0x00f8, "o"},
- {0x00f9, "u"}, {0x00fa, "u"}, {0x00fb, "u"}, {0x00fc, "u"},
- {0x00fd, "y"}, {0x00ff, "y"},
- {0x02b0, "h"}, {0x02b2, "j"}, {0x02b3, "r"}, {0x02b7, "w"},
- {0x02b8, "y"}, {0x02b9, "'"}, {0x02ba, "\""}, {0x02bb, "'"},
- {0x02bc, "'"}, {0x02bd, "'"}, {0x02be, "'"}, {0x02bf, "'"},
- {0x02c2, "<"}, {0x02c3, ">"}, {0x02c4, "^"}, {0x02c5, "v"},
- {0x02c6, "^"}, {0x02c7, "v"}, {0x02c8, "'"}, {0x02c9, "-"},
- {0x02ca, "'"}, {0x02cb, "'"}, {0x02cc, "."}, {0x02cd, "_"},
- {0x2010, "-"}, {0x2012, "-"}, {0x2013, "-"}, {0x2014, "--"},
- {0x2015, "--"}, {0x2016, "|"}, {0x2017, "_"},
- {0x2018, "'"}, {0x2019, "'"}, {0x201a, ","}, {0x201b, "'"},
- {0x201c, "\""}, {0x201d, "\""}, {0x201e, ","}, {0x201f, "'"},
- {0x2020, "+"}, {0x2021, "+"}, {0x2022, "*"}, {0x2023, ">"},
- {0x2024, "."}, {0x2025, ".."}, {0x2027, "."}, {0x2032, "'"},
- {0x2033, "\""}, {0x2035, "'"}, {0x2036, "\""}, {0x2038, "^"},
- {0x2039, "<"}, {0x203a, ">"}, {0x203b, "*"}, {0x203c, "!!"},
- {0x203d, "?!"}, {0x203e, "-"}, {0x2044, "/"}, {0x2047, "??"},
- {0x2048, "?!"}, {0x2049, "!?"}, {0x204e, "*"}, {0x2052, "%"},
- {0x2122, "(TM)"},
- {0x2212, "-"}, {0x2215, "/"}, {0x2216, "\\"}, {0x2217, "*"},
- {0x2218, "*"}, {0x2219, "*"}, {0x2223, "|"}, {0x22c5, "."},
- {0x266f, "#"},
- {0XF6D9, "(C)"}, {0XF6DA, "(C)"}, {0XF6DB, "(TM)"},
- {0XF8E8, "(C)"}, {0xf8e9, "(C)"}, {0XF8EA, "(TM)"},
- {0xfb01, "fi"}, {0xfb02, "fl"}
-};
-const FX_CHAR* FCS_GetAltStr(FX_WCHAR unicode)
-{
- int begin = 0;
- int end = sizeof UnicodeAlts / sizeof(struct _UnicodeAlt) - 1;
- while (begin <= end) {
- int middle = (begin + end) / 2;
- FX_WORD middlecode = UnicodeAlts[middle].m_Unicode;
- if (middlecode > unicode) {
- end = middle - 1;
- } else if (middlecode < unicode) {
- begin = middle + 1;
- } else {
- return UnicodeAlts[middle].m_Alter;
- }
+ {0x00a0, " "}, {0x00a1, "!"}, {0x00a2, "c"}, {0x00a3, "P"},
+ {0x00a4, "o"}, {0x00a5, "Y"}, {0x00a6, "|"}, {0x00a7, "S"},
+ {0x00a9, "(C)"}, {0x00aa, "a"}, {0x00ab, "<<"}, {0x00ac, "-|"},
+ {0x00ae, "(R)"}, {0x00af, "-"}, {0x00b0, "o"}, {0x00b1, "+/-"},
+ {0x00b2, "^2"}, {0x00b3, "^3"}, {0x00b4, "'"}, {0x00b5, "u"},
+ {0x00b6, "P"}, {0x00b7, "."}, {0x00b9, "^1"}, {0x00ba, "o"},
+ {0x00bb, ">>"}, {0x00bc, "1/4"}, {0x00bd, "1/2"}, {0x00be, "3/4"},
+ {0x00bf, "?"}, {0x00c0, "A"}, {0x00c1, "A"}, {0x00c2, "A"},
+ {0x00c3, "A"}, {0x00c4, "A"}, {0x00c5, "A"}, {0x00c6, "AE"},
+ {0x00c7, "C"}, {0x00c8, "E"}, {0x00c9, "E"}, {0x00ca, "E"},
+ {0x00cb, "E"}, {0x00cc, "I"}, {0x00cd, "I"}, {0x00ce, "I"},
+ {0x00cf, "I"}, {0x00d1, "N"}, {0x00d2, "O"}, {0x00d3, "O"},
+ {0x00d4, "O"}, {0x00d5, "O"}, {0x00d6, "O"}, {0x00d7, "x"},
+ {0x00d8, "O"}, {0x00d9, "U"}, {0x00da, "U"}, {0x00db, "U"},
+ {0x00dc, "U"}, {0x00dd, "Y"}, {0x00df, "S"}, {0x00e0, "a"},
+ {0x00e1, "a"}, {0x00e2, "a"}, {0x00e3, "a"}, {0x00e4, "a"},
+ {0x00e5, "a"}, {0x00e6, "ae"}, {0x00e7, "c"}, {0x00e8, "e"},
+ {0x00e9, "e"}, {0x00ea, "e"}, {0x00eb, "e"}, {0x00ec, "i"},
+ {0x00ed, "i"}, {0x00ee, "i"}, {0x00ef, "i"}, {0x00f1, "n"},
+ {0x00f2, "o"}, {0x00f3, "o"}, {0x00f4, "o"}, {0x00f5, "o"},
+ {0x00f6, "o"}, {0x00f7, "/"}, {0x00f8, "o"}, {0x00f9, "u"},
+ {0x00fa, "u"}, {0x00fb, "u"}, {0x00fc, "u"}, {0x00fd, "y"},
+ {0x00ff, "y"}, {0x02b0, "h"}, {0x02b2, "j"}, {0x02b3, "r"},
+ {0x02b7, "w"}, {0x02b8, "y"}, {0x02b9, "'"}, {0x02ba, "\""},
+ {0x02bb, "'"}, {0x02bc, "'"}, {0x02bd, "'"}, {0x02be, "'"},
+ {0x02bf, "'"}, {0x02c2, "<"}, {0x02c3, ">"}, {0x02c4, "^"},
+ {0x02c5, "v"}, {0x02c6, "^"}, {0x02c7, "v"}, {0x02c8, "'"},
+ {0x02c9, "-"}, {0x02ca, "'"}, {0x02cb, "'"}, {0x02cc, "."},
+ {0x02cd, "_"}, {0x2010, "-"}, {0x2012, "-"}, {0x2013, "-"},
+ {0x2014, "--"}, {0x2015, "--"}, {0x2016, "|"}, {0x2017, "_"},
+ {0x2018, "'"}, {0x2019, "'"}, {0x201a, ","}, {0x201b, "'"},
+ {0x201c, "\""}, {0x201d, "\""}, {0x201e, ","}, {0x201f, "'"},
+ {0x2020, "+"}, {0x2021, "+"}, {0x2022, "*"}, {0x2023, ">"},
+ {0x2024, "."}, {0x2025, ".."}, {0x2027, "."}, {0x2032, "'"},
+ {0x2033, "\""}, {0x2035, "'"}, {0x2036, "\""}, {0x2038, "^"},
+ {0x2039, "<"}, {0x203a, ">"}, {0x203b, "*"}, {0x203c, "!!"},
+ {0x203d, "?!"}, {0x203e, "-"}, {0x2044, "/"}, {0x2047, "??"},
+ {0x2048, "?!"}, {0x2049, "!?"}, {0x204e, "*"}, {0x2052, "%"},
+ {0x2122, "(TM)"}, {0x2212, "-"}, {0x2215, "/"}, {0x2216, "\\"},
+ {0x2217, "*"}, {0x2218, "*"}, {0x2219, "*"}, {0x2223, "|"},
+ {0x22c5, "."}, {0x266f, "#"}, {0XF6D9, "(C)"}, {0XF6DA, "(C)"},
+ {0XF6DB, "(TM)"}, {0XF8E8, "(C)"}, {0xf8e9, "(C)"}, {0XF8EA, "(TM)"},
+ {0xfb01, "fi"}, {0xfb02, "fl"}};
+const FX_CHAR* FCS_GetAltStr(FX_WCHAR unicode) {
+ int begin = 0;
+ int end = sizeof UnicodeAlts / sizeof(struct _UnicodeAlt) - 1;
+ while (begin <= end) {
+ int middle = (begin + end) / 2;
+ FX_WORD middlecode = UnicodeAlts[middle].m_Unicode;
+ if (middlecode > unicode) {
+ end = middle - 1;
+ } else if (middlecode < unicode) {
+ begin = middle + 1;
+ } else {
+ return UnicodeAlts[middle].m_Alter;
}
- return NULL;
+ }
+ return NULL;
}
static const FX_WORD StandardEncoding[256] = {
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 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, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x00a1, 0x00a2, 0x00a3, 0x2044, 0x00a5, 0x0192, 0x00a7, 0x00a4, 0x0027,
- 0x201c, 0x00ab, 0x2039, 0x203a, 0xfb01, 0xfb02, 0x0000, 0x2013, 0x2020, 0x2021,
- 0x00b7, 0x0000, 0x00b6, 0x2022, 0x201a, 0x201e, 0x201d, 0x00bb, 0x2026, 0x2030,
- 0x0000, 0x00bf, 0x0000, 0x0060, 0x00b4, 0x02c6, 0x02dc, 0x00af, 0x02d8, 0x02d9,
- 0x00a8, 0x0000, 0x02da, 0x00b8, 0x0000, 0x02dd, 0x02db, 0x02c7, 0x2014, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x00c6, 0x0000, 0x00aa, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0141, 0x00d8, 0x0152, 0x00ba, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x00e6, 0x0000, 0x0000, 0x0000, 0x0131, 0x0000, 0x0000, 0x0142, 0x00f8,
- 0x0153, 0x00df, 0x0000, 0x0000, 0x0000, 0x0000
-};
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 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, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x00a1,
+ 0x00a2, 0x00a3, 0x2044, 0x00a5, 0x0192, 0x00a7, 0x00a4, 0x0027, 0x201c,
+ 0x00ab, 0x2039, 0x203a, 0xfb01, 0xfb02, 0x0000, 0x2013, 0x2020, 0x2021,
+ 0x00b7, 0x0000, 0x00b6, 0x2022, 0x201a, 0x201e, 0x201d, 0x00bb, 0x2026,
+ 0x2030, 0x0000, 0x00bf, 0x0000, 0x0060, 0x00b4, 0x02c6, 0x02dc, 0x00af,
+ 0x02d8, 0x02d9, 0x00a8, 0x0000, 0x02da, 0x00b8, 0x0000, 0x02dd, 0x02db,
+ 0x02c7, 0x2014, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x00c6, 0x0000, 0x00aa, 0x0000, 0x0000, 0x0000, 0x0000, 0x0141, 0x00d8,
+ 0x0152, 0x00ba, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x00e6, 0x0000,
+ 0x0000, 0x0000, 0x0131, 0x0000, 0x0000, 0x0142, 0x00f8, 0x0153, 0x00df,
+ 0x0000, 0x0000, 0x0000, 0x0000};
static const FX_WORD MacRomanEncoding[256] = {
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 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, 0x0000, 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, 0x0000, 0x00c6, 0x00d8, 0x0000, 0x00b1, 0x0000, 0x0000,
- 0x00a5, 0x00b5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x00aa, 0x00ba, 0x0000,
- 0x00e6, 0x00f8, 0x00bf, 0x00a3, 0x00ac, 0x0000, 0x0192, 0x0000, 0x0000, 0x00ab,
- 0x00bb, 0x2026, 0x0020, 0x00c0, 0x00c3, 0x00d5, 0x0152, 0x0153, 0x2013, 0x2014,
- 0x201c, 0x201d, 0x2018, 0x2019, 0x00f7, 0x0000, 0x00ff, 0x0178, 0x2044, 0x00a4,
- 0x2039, 0x203a, 0xfb01, 0xfb02, 0x2021, 0x00b7, 0x201a, 0x201e, 0x2030, 0x00c2,
- 0x00ca, 0x00c1, 0x00cb, 0x00c8, 0x00cd, 0x00ce, 0x00cf, 0x00cc, 0x00d3, 0x00d4,
- 0x0000, 0x00d2, 0x00da, 0x00db, 0x00d9, 0x0131, 0x02c6, 0x02dc, 0x00af, 0x02d8,
- 0x02d9, 0x02da, 0x00b8, 0x02dd, 0x02db, 0x02c7
-};
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 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, 0x0000, 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, 0x0000, 0x00c6, 0x00d8, 0x0000, 0x00b1, 0x0000, 0x0000,
+ 0x00a5, 0x00b5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x00aa, 0x00ba,
+ 0x0000, 0x00e6, 0x00f8, 0x00bf, 0x00a3, 0x00ac, 0x0000, 0x0192, 0x0000,
+ 0x0000, 0x00ab, 0x00bb, 0x2026, 0x0020, 0x00c0, 0x00c3, 0x00d5, 0x0152,
+ 0x0153, 0x2013, 0x2014, 0x201c, 0x201d, 0x2018, 0x2019, 0x00f7, 0x0000,
+ 0x00ff, 0x0178, 0x2044, 0x00a4, 0x2039, 0x203a, 0xfb01, 0xfb02, 0x2021,
+ 0x00b7, 0x201a, 0x201e, 0x2030, 0x00c2, 0x00ca, 0x00c1, 0x00cb, 0x00c8,
+ 0x00cd, 0x00ce, 0x00cf, 0x00cc, 0x00d3, 0x00d4, 0x0000, 0x00d2, 0x00da,
+ 0x00db, 0x00d9, 0x0131, 0x02c6, 0x02dc, 0x00af, 0x02d8, 0x02d9, 0x02da,
+ 0x00b8, 0x02dd, 0x02db, 0x02c7};
static const FX_WORD AdobeWinAnsiEncoding[256] = {
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 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, 0x2022,
- 0x20ac, 0x2022, 0x201a, 0x0192, 0x201e, 0x2026, 0x2020, 0x2021,
- 0x02c6, 0x2030, 0x0160, 0x2039, 0x0152, 0x2022, 0x017d, 0x2022,
- 0x2022, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014,
- 0x02dc, 0x2122, 0x0161, 0x203a, 0x0153, 0x2022, 0x017e, 0x0178,
- 0x0020, 0x00a1, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7,
- 0x00a8, 0x00a9, 0x00aa, 0x00ab, 0x00ac, 0x002d, 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
-};
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 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, 0x2022, 0x20ac, 0x2022, 0x201a, 0x0192, 0x201e, 0x2026, 0x2020,
+ 0x2021, 0x02c6, 0x2030, 0x0160, 0x2039, 0x0152, 0x2022, 0x017d, 0x2022,
+ 0x2022, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014, 0x02dc,
+ 0x2122, 0x0161, 0x203a, 0x0153, 0x2022, 0x017e, 0x0178, 0x0020, 0x00a1,
+ 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7, 0x00a8, 0x00a9, 0x00aa,
+ 0x00ab, 0x00ac, 0x002d, 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};
static const FX_WORD MacExpertEncoding[256] = {
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0020, 0xf721, 0xf6f8, 0xf7a2, 0xf724, 0xf6e4, 0xf726, 0xf7b4,
- 0x207d, 0x207e, 0x2025, 0x2024, 0x002c, 0x002d, 0x002e, 0x2044, 0xf730, 0xf731,
- 0xf732, 0xf733, 0xf734, 0xf735, 0xf736, 0xf737, 0xf738, 0xf739, 0x003a, 0x003b,
- 0x0000, 0xf6de, 0x0000, 0xf73f, 0x0000, 0x0000, 0x0000, 0x0000, 0xf7f0, 0x0000,
- 0x0000, 0x00bc, 0x00bd, 0x00be, 0x215b, 0x215c, 0x215d, 0x215e, 0x2153, 0x2154,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfb00, 0xfb01, 0xfb02, 0xfb03,
- 0xfb04, 0x208d, 0x0000, 0x208e, 0xf6f6, 0xf6e5, 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, 0x20a1, 0xf6dc, 0xf6dd, 0xf6fe, 0x0000, 0x0000, 0xf6e9,
- 0xf6e0, 0x0000, 0x0000, 0x0000, 0x0000, 0xf7e1, 0xf7e0, 0xf7e2, 0xf7e4, 0xf7e3,
- 0xf7e5, 0xf7e7, 0xf7e9, 0xf7e8, 0xf7ea, 0xf7eb, 0xf7ed, 0xf7ec, 0xf7ee, 0xf7ef,
- 0xf7f1, 0xf7f3, 0xf7f2, 0xf7f4, 0xf7f6, 0xf7f5, 0xf7fa, 0xf7f9, 0xf7fb, 0xf7fc,
- 0x0000, 0x2078, 0x2084, 0x2083, 0x2086, 0x2088, 0x2087, 0xf6fd, 0x0000, 0xf6df,
- 0x2082, 0x0000, 0xf7a8, 0x0000, 0xf6f5, 0xf6fd, 0x2085, 0x0000, 0xf6e1, 0xf6e7,
- 0xf7fd, 0x0000, 0xf6e3, 0x0000, 0x0000, 0xf7fe, 0x0000, 0x2089, 0x2080, 0xf6ff,
- 0xf7e6, 0xf7f8, 0xf7bf, 0x2081, 0xf6e9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0xf7b8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xf6fa, 0x2012, 0xf6e6,
- 0x0000, 0x0000, 0x0000, 0x0000, 0xf7a1, 0x0000, 0xf7ff, 0x0000, 0x00b9, 0x00b2,
- 0x00b3, 0x2074, 0x2075, 0x2076, 0x2077, 0x2079, 0x2070, 0x0000, 0xf6ec, 0xf6f1,
- 0x0000, 0x0000, 0x0000, 0xf6ed, 0xf6f2, 0xf6eb, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0xf6ee, 0xf6fb, 0xf6f4, 0xf7af, 0xf6ea, 0x207f, 0xf6ef, 0xf6e2, 0xf6e8,
- 0xf6f7, 0xf6fc, 0x0000, 0x0000, 0x0000, 0x0000
-};
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0xf721, 0xf6f8, 0xf7a2,
+ 0xf724, 0xf6e4, 0xf726, 0xf7b4, 0x207d, 0x207e, 0x2025, 0x2024, 0x002c,
+ 0x002d, 0x002e, 0x2044, 0xf730, 0xf731, 0xf732, 0xf733, 0xf734, 0xf735,
+ 0xf736, 0xf737, 0xf738, 0xf739, 0x003a, 0x003b, 0x0000, 0xf6de, 0x0000,
+ 0xf73f, 0x0000, 0x0000, 0x0000, 0x0000, 0xf7f0, 0x0000, 0x0000, 0x00bc,
+ 0x00bd, 0x00be, 0x215b, 0x215c, 0x215d, 0x215e, 0x2153, 0x2154, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfb00, 0xfb01, 0xfb02, 0xfb03,
+ 0xfb04, 0x208d, 0x0000, 0x208e, 0xf6f6, 0xf6e5, 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, 0x20a1, 0xf6dc, 0xf6dd,
+ 0xf6fe, 0x0000, 0x0000, 0xf6e9, 0xf6e0, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xf7e1, 0xf7e0, 0xf7e2, 0xf7e4, 0xf7e3, 0xf7e5, 0xf7e7, 0xf7e9, 0xf7e8,
+ 0xf7ea, 0xf7eb, 0xf7ed, 0xf7ec, 0xf7ee, 0xf7ef, 0xf7f1, 0xf7f3, 0xf7f2,
+ 0xf7f4, 0xf7f6, 0xf7f5, 0xf7fa, 0xf7f9, 0xf7fb, 0xf7fc, 0x0000, 0x2078,
+ 0x2084, 0x2083, 0x2086, 0x2088, 0x2087, 0xf6fd, 0x0000, 0xf6df, 0x2082,
+ 0x0000, 0xf7a8, 0x0000, 0xf6f5, 0xf6fd, 0x2085, 0x0000, 0xf6e1, 0xf6e7,
+ 0xf7fd, 0x0000, 0xf6e3, 0x0000, 0x0000, 0xf7fe, 0x0000, 0x2089, 0x2080,
+ 0xf6ff, 0xf7e6, 0xf7f8, 0xf7bf, 0x2081, 0xf6e9, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0xf7b8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xf6fa, 0x2012, 0xf6e6, 0x0000, 0x0000, 0x0000, 0x0000, 0xf7a1, 0x0000,
+ 0xf7ff, 0x0000, 0x00b9, 0x00b2, 0x00b3, 0x2074, 0x2075, 0x2076, 0x2077,
+ 0x2079, 0x2070, 0x0000, 0xf6ec, 0xf6f1, 0x0000, 0x0000, 0x0000, 0xf6ed,
+ 0xf6f2, 0xf6eb, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xf6ee, 0xf6fb,
+ 0xf6f4, 0xf7af, 0xf6ea, 0x207f, 0xf6ef, 0xf6e2, 0xf6e8, 0xf6f7, 0xf6fc,
+ 0x0000, 0x0000, 0x0000, 0x0000};
static const FX_WORD AdobeSymbolEncoding[256] = {
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 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, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x20AC, 0x03D2, 0x2032, 0x2264, 0x2044, 0x221E, 0x0192, 0x2663,
- 0x2666, 0x2665, 0x2660, 0x2194, 0x2190, 0x2191, 0x2192, 0x2193,
- 0x00B0, 0x00B1, 0x2033, 0x2265, 0x00D7, 0x221D, 0x2202, 0x2022,
- 0x00F7, 0x2260, 0x2261, 0x2248, 0x2026, 0xF8E6, 0xF8E7, 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, 0xF8EB, 0xF8EC,
- 0xF8ED, 0xF8EE, 0xF8EF, 0xF8F0, 0xF8F1, 0xF8F2, 0xF8F3, 0xF8F4,
- 0x0000, 0x232A, 0x222B, 0x2320, 0xF8F5, 0x2321, 0xF8F6, 0xF8F7,
- 0xF8F8, 0xF8F9, 0xF8FA, 0xF8FB, 0xF8FC, 0xF8FD, 0xF8FE, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 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, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x20AC, 0x03D2,
+ 0x2032, 0x2264, 0x2044, 0x221E, 0x0192, 0x2663, 0x2666, 0x2665, 0x2660,
+ 0x2194, 0x2190, 0x2191, 0x2192, 0x2193, 0x00B0, 0x00B1, 0x2033, 0x2265,
+ 0x00D7, 0x221D, 0x2202, 0x2022, 0x00F7, 0x2260, 0x2261, 0x2248, 0x2026,
+ 0xF8E6, 0xF8E7, 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, 0xF8EB, 0xF8EC, 0xF8ED, 0xF8EE,
+ 0xF8EF, 0xF8F0, 0xF8F1, 0xF8F2, 0xF8F3, 0xF8F4, 0x0000, 0x232A, 0x222B,
+ 0x2320, 0xF8F5, 0x2321, 0xF8F6, 0xF8F7, 0xF8F8, 0xF8F9, 0xF8FA, 0xF8FB,
+ 0xF8FC, 0xF8FD, 0xF8FE, 0x0000,
};
static const FX_WORD ZapfEncoding[256] = {
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 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,
- 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,
- 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, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 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,
- 0x2780, 0x2781, 0x2782, 0x2783, 0x2784, 0x2785, 0x2786, 0x2787,
- 0x2788, 0x2789, 0x278A, 0x278B, 0x278C, 0x278D, 0x278E, 0x278F,
- 0x2790, 0x2791, 0x2792, 0x2793, 0x2794, 0x2192, 0x2194, 0x2195,
- 0x2798, 0x2799, 0x279A, 0x279B, 0x279C, 0x279D, 0x279E, 0x279F,
- 0x27A0, 0x27A1, 0x27A2, 0x27A3, 0x27A4, 0x27A5, 0x27A6, 0x27A7,
- 0x27A8, 0x27A9, 0x27AA, 0x27AB, 0x27AC, 0x27AD, 0x27AE, 0x27AF,
- 0x0000, 0x27B1, 0x27B2, 0x27B3, 0x27B4, 0x27B5, 0x27B6, 0x27B7,
- 0x27B8, 0x27B9, 0x27BA, 0x27BB, 0x27BC, 0x27BD, 0x27BE, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 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, 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, 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, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 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, 0x2780, 0x2781, 0x2782, 0x2783, 0x2784, 0x2785,
+ 0x2786, 0x2787, 0x2788, 0x2789, 0x278A, 0x278B, 0x278C, 0x278D, 0x278E,
+ 0x278F, 0x2790, 0x2791, 0x2792, 0x2793, 0x2794, 0x2192, 0x2194, 0x2195,
+ 0x2798, 0x2799, 0x279A, 0x279B, 0x279C, 0x279D, 0x279E, 0x279F, 0x27A0,
+ 0x27A1, 0x27A2, 0x27A3, 0x27A4, 0x27A5, 0x27A6, 0x27A7, 0x27A8, 0x27A9,
+ 0x27AA, 0x27AB, 0x27AC, 0x27AD, 0x27AE, 0x27AF, 0x0000, 0x27B1, 0x27B2,
+ 0x27B3, 0x27B4, 0x27B5, 0x27B6, 0x27B7, 0x27B8, 0x27B9, 0x27BA, 0x27BB,
+ 0x27BC, 0x27BD, 0x27BE, 0x0000,
};
static const FX_CHAR* const StandardEncodingNames[224] = {
- "space", "exclam", "quotedbl", "numbersign", "dollar", "percent", "ampersand", "quoteright",
- "parenleft", "parenright", "asterisk", "plus", "comma", "hyphen", "period", "slash",
- "zero", "one", "two", "three", "four", "five", "six", "seven",
- "eight", "nine", "colon", "semicolon", "less", "equal", "greater", "question",
- "at", "A", "B", "C", "D", "E", "F", "G",
- "H", "I", "J", "K", "L", "M", "N", "O",
- "P", "Q", "R", "S", "T", "U", "V", "W",
- "X", "Y", "Z", "bracketleft", "backslash", "bracketright", "asciicircum", "underscore",
- "quoteleft", "a", "b", "c", "d", "e", "f", "g",
- "h", "i", "j", "k", "l", "m", "n", "o",
- "p", "q", "r", "s", "t", "u", "v", "w",
- "x", "y", "z", "braceleft", "bar", "braceright", "asciitilde", NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, "exclamdown", "cent", "sterling", "fraction", "yen", "florin", "section",
- "currency", "quotesingle", "quotedblleft", "guillemotleft", "guilsinglleft", "guilsinglright", "fi", "fl",
- NULL, "endash", "dagger", "daggerdbl", "periodcentered", NULL, "paragraph", "bullet",
- "quotesinglbase", "quotedblbase", "quotedblright", "guillemotright", "ellipsis", "perthousand", NULL, "questiondown",
- NULL, "grave", "acute", "circumflex", "tilde", "macron", "breve", "dotaccent",
- "dieresis", NULL, "ring", "cedilla", NULL, "hungarumlaut", "ogonek", "caron",
- "emdash", NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, "AE", NULL, "ordfeminine", NULL, NULL, NULL, NULL,
- "Lslash", "Oslash", "OE", "ordmasculine", NULL, NULL, NULL, NULL,
- NULL, "ae", NULL, NULL, NULL, "dotlessi", NULL, NULL,
- "lslash", "oslash", "oe", "germandbls", NULL, NULL, NULL, NULL,
+ "space",
+ "exclam",
+ "quotedbl",
+ "numbersign",
+ "dollar",
+ "percent",
+ "ampersand",
+ "quoteright",
+ "parenleft",
+ "parenright",
+ "asterisk",
+ "plus",
+ "comma",
+ "hyphen",
+ "period",
+ "slash",
+ "zero",
+ "one",
+ "two",
+ "three",
+ "four",
+ "five",
+ "six",
+ "seven",
+ "eight",
+ "nine",
+ "colon",
+ "semicolon",
+ "less",
+ "equal",
+ "greater",
+ "question",
+ "at",
+ "A",
+ "B",
+ "C",
+ "D",
+ "E",
+ "F",
+ "G",
+ "H",
+ "I",
+ "J",
+ "K",
+ "L",
+ "M",
+ "N",
+ "O",
+ "P",
+ "Q",
+ "R",
+ "S",
+ "T",
+ "U",
+ "V",
+ "W",
+ "X",
+ "Y",
+ "Z",
+ "bracketleft",
+ "backslash",
+ "bracketright",
+ "asciicircum",
+ "underscore",
+ "quoteleft",
+ "a",
+ "b",
+ "c",
+ "d",
+ "e",
+ "f",
+ "g",
+ "h",
+ "i",
+ "j",
+ "k",
+ "l",
+ "m",
+ "n",
+ "o",
+ "p",
+ "q",
+ "r",
+ "s",
+ "t",
+ "u",
+ "v",
+ "w",
+ "x",
+ "y",
+ "z",
+ "braceleft",
+ "bar",
+ "braceright",
+ "asciitilde",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "exclamdown",
+ "cent",
+ "sterling",
+ "fraction",
+ "yen",
+ "florin",
+ "section",
+ "currency",
+ "quotesingle",
+ "quotedblleft",
+ "guillemotleft",
+ "guilsinglleft",
+ "guilsinglright",
+ "fi",
+ "fl",
+ NULL,
+ "endash",
+ "dagger",
+ "daggerdbl",
+ "periodcentered",
+ NULL,
+ "paragraph",
+ "bullet",
+ "quotesinglbase",
+ "quotedblbase",
+ "quotedblright",
+ "guillemotright",
+ "ellipsis",
+ "perthousand",
+ NULL,
+ "questiondown",
+ NULL,
+ "grave",
+ "acute",
+ "circumflex",
+ "tilde",
+ "macron",
+ "breve",
+ "dotaccent",
+ "dieresis",
+ NULL,
+ "ring",
+ "cedilla",
+ NULL,
+ "hungarumlaut",
+ "ogonek",
+ "caron",
+ "emdash",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "AE",
+ NULL,
+ "ordfeminine",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "Lslash",
+ "Oslash",
+ "OE",
+ "ordmasculine",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "ae",
+ NULL,
+ NULL,
+ NULL,
+ "dotlessi",
+ NULL,
+ NULL,
+ "lslash",
+ "oslash",
+ "oe",
+ "germandbls",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
};
static const FX_CHAR* const AdobeWinAnsiEncodingNames[224] = {
- "space", "exclam", "quotedbl", "numbersign", "dollar", "percent", "ampersand", "quotesingle",
- "parenleft", "parenright", "asterisk", "plus", "comma", "hyphen", "period", "slash",
- "zero", "one", "two", "three", "four", "five", "six", "seven",
- "eight", "nine", "colon", "semicolon", "less", "equal", "greater", "question",
- "at", "A", "B", "C", "D", "E", "F", "G",
- "H", "I", "J", "K", "L", "M", "N", "O",
- "P", "Q", "R", "S", "T", "U", "V", "W",
- "X", "Y", "Z", "bracketleft", "backslash", "bracketright", "asciicircum", "underscore",
- "grave", "a", "b", "c", "d", "e", "f", "g",
- "h", "i", "j", "k", "l", "m", "n", "o",
- "p", "q", "r", "s", "t", "u", "v", "w",
- "x", "y", "z", "braceleft", "bar", "braceright", "asciitilde", "bullet",
- "Euro", "bullet", "quotesinglbase", "florin", "quotedblbase", "ellipsis", "dagger", "daggerdbl",
- "circumflex", "perthousand", "Scaron", "guilsinglleft", "OE", "bullet", "Zcaron", "bullet",
- "bullet", "quoteleft", "quoteright", "quotedblleft", "quotedblright", "bullet", "endash", "emdash",
- "tilde", "trademark", "scaron", "guilsinglright", "oe", "bullet", "zcaron", "Ydieresis",
- "space", "exclamdown", "cent", "sterling", "currency", "yen", "brokenbar", "section",
- "dieresis", "copyright", "ordfeminine", "guillemotleft", "logicalnot", "hyphen", "registered", "macron",
- "degree", "plusminus", "twosuperior", "threesuperior", "acute", "mu", "paragraph", "periodcentered",
- "cedilla", "onesuperior", "ordmasculine", "guillemotright", "onequarter", "onehalf", "threequarters", "questiondown",
- "Agrave", "Aacute", "Acircumflex", "Atilde", "Adieresis", "Aring", "AE", "Ccedilla",
- "Egrave", "Eacute", "Ecircumflex", "Edieresis", "Igrave", "Iacute", "Icircumflex", "Idieresis",
- "Eth", "Ntilde", "Ograve", "Oacute", "Ocircumflex", "Otilde", "Odieresis", "multiply",
- "Oslash", "Ugrave", "Uacute", "Ucircumflex", "Udieresis", "Yacute", "Thorn", "germandbls",
- "agrave", "aacute", "acircumflex", "atilde", "adieresis", "aring", "ae", "ccedilla",
- "egrave", "eacute", "ecircumflex", "edieresis", "igrave", "iacute", "icircumflex", "idieresis",
- "eth", "ntilde", "ograve", "oacute", "ocircumflex", "otilde", "odieresis", "divide",
- "oslash", "ugrave", "uacute", "ucircumflex", "udieresis", "yacute", "thorn", "ydieresis",
+ "space",
+ "exclam",
+ "quotedbl",
+ "numbersign",
+ "dollar",
+ "percent",
+ "ampersand",
+ "quotesingle",
+ "parenleft",
+ "parenright",
+ "asterisk",
+ "plus",
+ "comma",
+ "hyphen",
+ "period",
+ "slash",
+ "zero",
+ "one",
+ "two",
+ "three",
+ "four",
+ "five",
+ "six",
+ "seven",
+ "eight",
+ "nine",
+ "colon",
+ "semicolon",
+ "less",
+ "equal",
+ "greater",
+ "question",
+ "at",
+ "A",
+ "B",
+ "C",
+ "D",
+ "E",
+ "F",
+ "G",
+ "H",
+ "I",
+ "J",
+ "K",
+ "L",
+ "M",
+ "N",
+ "O",
+ "P",
+ "Q",
+ "R",
+ "S",
+ "T",
+ "U",
+ "V",
+ "W",
+ "X",
+ "Y",
+ "Z",
+ "bracketleft",
+ "backslash",
+ "bracketright",
+ "asciicircum",
+ "underscore",
+ "grave",
+ "a",
+ "b",
+ "c",
+ "d",
+ "e",
+ "f",
+ "g",
+ "h",
+ "i",
+ "j",
+ "k",
+ "l",
+ "m",
+ "n",
+ "o",
+ "p",
+ "q",
+ "r",
+ "s",
+ "t",
+ "u",
+ "v",
+ "w",
+ "x",
+ "y",
+ "z",
+ "braceleft",
+ "bar",
+ "braceright",
+ "asciitilde",
+ "bullet",
+ "Euro",
+ "bullet",
+ "quotesinglbase",
+ "florin",
+ "quotedblbase",
+ "ellipsis",
+ "dagger",
+ "daggerdbl",
+ "circumflex",
+ "perthousand",
+ "Scaron",
+ "guilsinglleft",
+ "OE",
+ "bullet",
+ "Zcaron",
+ "bullet",
+ "bullet",
+ "quoteleft",
+ "quoteright",
+ "quotedblleft",
+ "quotedblright",
+ "bullet",
+ "endash",
+ "emdash",
+ "tilde",
+ "trademark",
+ "scaron",
+ "guilsinglright",
+ "oe",
+ "bullet",
+ "zcaron",
+ "Ydieresis",
+ "space",
+ "exclamdown",
+ "cent",
+ "sterling",
+ "currency",
+ "yen",
+ "brokenbar",
+ "section",
+ "dieresis",
+ "copyright",
+ "ordfeminine",
+ "guillemotleft",
+ "logicalnot",
+ "hyphen",
+ "registered",
+ "macron",
+ "degree",
+ "plusminus",
+ "twosuperior",
+ "threesuperior",
+ "acute",
+ "mu",
+ "paragraph",
+ "periodcentered",
+ "cedilla",
+ "onesuperior",
+ "ordmasculine",
+ "guillemotright",
+ "onequarter",
+ "onehalf",
+ "threequarters",
+ "questiondown",
+ "Agrave",
+ "Aacute",
+ "Acircumflex",
+ "Atilde",
+ "Adieresis",
+ "Aring",
+ "AE",
+ "Ccedilla",
+ "Egrave",
+ "Eacute",
+ "Ecircumflex",
+ "Edieresis",
+ "Igrave",
+ "Iacute",
+ "Icircumflex",
+ "Idieresis",
+ "Eth",
+ "Ntilde",
+ "Ograve",
+ "Oacute",
+ "Ocircumflex",
+ "Otilde",
+ "Odieresis",
+ "multiply",
+ "Oslash",
+ "Ugrave",
+ "Uacute",
+ "Ucircumflex",
+ "Udieresis",
+ "Yacute",
+ "Thorn",
+ "germandbls",
+ "agrave",
+ "aacute",
+ "acircumflex",
+ "atilde",
+ "adieresis",
+ "aring",
+ "ae",
+ "ccedilla",
+ "egrave",
+ "eacute",
+ "ecircumflex",
+ "edieresis",
+ "igrave",
+ "iacute",
+ "icircumflex",
+ "idieresis",
+ "eth",
+ "ntilde",
+ "ograve",
+ "oacute",
+ "ocircumflex",
+ "otilde",
+ "odieresis",
+ "divide",
+ "oslash",
+ "ugrave",
+ "uacute",
+ "ucircumflex",
+ "udieresis",
+ "yacute",
+ "thorn",
+ "ydieresis",
};
static const FX_CHAR* const MacRomanEncodingNames[224] = {
- "space", "exclam", "quotedbl", "numbersign", "dollar", "percent", "ampersand", "quotesingle",
- "parenleft", "parenright", "asterisk", "plus", "comma", "hyphen", "period", "slash",
- "zero", "one", "two", "three", "four", "five", "six", "seven",
- "eight", "nine", "colon", "semicolon", "less", "equal", "greater", "question",
- "at", "A", "B", "C", "D", "E", "F", "G",
- "H", "I", "J", "K", "L", "M", "N", "O",
- "P", "Q", "R", "S", "T", "U", "V", "W",
- "X", "Y", "Z", "bracketleft", "backslash", "bracketright", "asciicircum", "underscore",
- "grave", "a", "b", "c", "d", "e", "f", "g",
- "h", "i", "j", "k", "l", "m", "n", "o",
- "p", "q", "r", "s", "t", "u", "v", "w",
- "x", "y", "z", "braceleft", "bar", "braceright", "asciitilde", NULL,
- "Adieresis", "Aring", "Ccedilla", "Eacute", "Ntilde", "Odieresis", "Udieresis", "aacute",
- "agrave", "acircumflex", "adieresis", "atilde", "aring", "ccedilla", "eacute", "egrave",
- "ecircumflex", "edieresis", "iacute", "igrave", "icircumflex", "idieresis", "ntilde", "oacute",
- "ograve", "ocircumflex", "odieresis", "otilde", "uacute", "ugrave", "ucircumflex", "udieresis",
- "dagger", "degree", "cent", "sterling", "section", "bullet", "paragraph", "germandbls",
- "registered", "copyright", "trademark", "acute", "dieresis", "notequal", "AE", "Oslash",
- "infinity", "plusminus", "lessequal", "greaterequal", "yen", "mu", "partialdiff", "summation",
- "product", "pi", "integral", "ordfeminine", "ordmasculine", "Omega", "ae", "oslash",
- "questiondown", "exclamdown", "logicalnot", "radical", "florin", "approxequal", "Delta", "guillemotleft",
- "guillemotright", "ellipsis", "space", "Agrave", "Atilde", "Otilde", "OE", "oe",
- "endash", "emdash", "quotedblleft", "quotedblright", "quoteleft", "quoteright", "divide", "lozenge",
- "ydieresis", "Ydieresis", "fraction", "currency", "guilsinglleft", "guilsinglright", "fi", "fl",
- "daggerdbl", "periodcentered", "quotesinglbase", "quotedblbase", "perthousand", "Acircumflex", "Ecircumflex", "Aacute",
- "Edieresis", "Egrave", "Iacute", "Icircumflex", "Idieresis", "Igrave", "Oacute", "Ocircumflex",
- "apple", "Ograve", "Uacute", "Ucircumflex", "Ugrave", "dotlessi", "circumflex", "tilde",
- "macron", "breve", "dotaccent", "ring", "cedilla", "hungarumlaut", "ogonek", "caron",
+ "space",
+ "exclam",
+ "quotedbl",
+ "numbersign",
+ "dollar",
+ "percent",
+ "ampersand",
+ "quotesingle",
+ "parenleft",
+ "parenright",
+ "asterisk",
+ "plus",
+ "comma",
+ "hyphen",
+ "period",
+ "slash",
+ "zero",
+ "one",
+ "two",
+ "three",
+ "four",
+ "five",
+ "six",
+ "seven",
+ "eight",
+ "nine",
+ "colon",
+ "semicolon",
+ "less",
+ "equal",
+ "greater",
+ "question",
+ "at",
+ "A",
+ "B",
+ "C",
+ "D",
+ "E",
+ "F",
+ "G",
+ "H",
+ "I",
+ "J",
+ "K",
+ "L",
+ "M",
+ "N",
+ "O",
+ "P",
+ "Q",
+ "R",
+ "S",
+ "T",
+ "U",
+ "V",
+ "W",
+ "X",
+ "Y",
+ "Z",
+ "bracketleft",
+ "backslash",
+ "bracketright",
+ "asciicircum",
+ "underscore",
+ "grave",
+ "a",
+ "b",
+ "c",
+ "d",
+ "e",
+ "f",
+ "g",
+ "h",
+ "i",
+ "j",
+ "k",
+ "l",
+ "m",
+ "n",
+ "o",
+ "p",
+ "q",
+ "r",
+ "s",
+ "t",
+ "u",
+ "v",
+ "w",
+ "x",
+ "y",
+ "z",
+ "braceleft",
+ "bar",
+ "braceright",
+ "asciitilde",
+ NULL,
+ "Adieresis",
+ "Aring",
+ "Ccedilla",
+ "Eacute",
+ "Ntilde",
+ "Odieresis",
+ "Udieresis",
+ "aacute",
+ "agrave",
+ "acircumflex",
+ "adieresis",
+ "atilde",
+ "aring",
+ "ccedilla",
+ "eacute",
+ "egrave",
+ "ecircumflex",
+ "edieresis",
+ "iacute",
+ "igrave",
+ "icircumflex",
+ "idieresis",
+ "ntilde",
+ "oacute",
+ "ograve",
+ "ocircumflex",
+ "odieresis",
+ "otilde",
+ "uacute",
+ "ugrave",
+ "ucircumflex",
+ "udieresis",
+ "dagger",
+ "degree",
+ "cent",
+ "sterling",
+ "section",
+ "bullet",
+ "paragraph",
+ "germandbls",
+ "registered",
+ "copyright",
+ "trademark",
+ "acute",
+ "dieresis",
+ "notequal",
+ "AE",
+ "Oslash",
+ "infinity",
+ "plusminus",
+ "lessequal",
+ "greaterequal",
+ "yen",
+ "mu",
+ "partialdiff",
+ "summation",
+ "product",
+ "pi",
+ "integral",
+ "ordfeminine",
+ "ordmasculine",
+ "Omega",
+ "ae",
+ "oslash",
+ "questiondown",
+ "exclamdown",
+ "logicalnot",
+ "radical",
+ "florin",
+ "approxequal",
+ "Delta",
+ "guillemotleft",
+ "guillemotright",
+ "ellipsis",
+ "space",
+ "Agrave",
+ "Atilde",
+ "Otilde",
+ "OE",
+ "oe",
+ "endash",
+ "emdash",
+ "quotedblleft",
+ "quotedblright",
+ "quoteleft",
+ "quoteright",
+ "divide",
+ "lozenge",
+ "ydieresis",
+ "Ydieresis",
+ "fraction",
+ "currency",
+ "guilsinglleft",
+ "guilsinglright",
+ "fi",
+ "fl",
+ "daggerdbl",
+ "periodcentered",
+ "quotesinglbase",
+ "quotedblbase",
+ "perthousand",
+ "Acircumflex",
+ "Ecircumflex",
+ "Aacute",
+ "Edieresis",
+ "Egrave",
+ "Iacute",
+ "Icircumflex",
+ "Idieresis",
+ "Igrave",
+ "Oacute",
+ "Ocircumflex",
+ "apple",
+ "Ograve",
+ "Uacute",
+ "Ucircumflex",
+ "Ugrave",
+ "dotlessi",
+ "circumflex",
+ "tilde",
+ "macron",
+ "breve",
+ "dotaccent",
+ "ring",
+ "cedilla",
+ "hungarumlaut",
+ "ogonek",
+ "caron",
};
static const FX_CHAR* const MacExpertEncodingNames[224] = {
- "space", "exclamsmall", "Hungarumlautsmall", "centoldstyle", "dollaroldstyle", "dollarsuperior", "ampersandsmall", "Acutesmall",
- "parenleftsuperior", "parenrightsuperior", "twodotenleader", "onedotenleader", "comma", "hyphen", "period", "fraction",
- "zerooldstyle", "oneoldstyle", "twooldstyle", "threeoldstyle", "fouroldstyle", "fiveoldstyle", "sixoldstyle", "sevenoldstyle",
- "eightoldstyle", "nineoldstyle", "colon", "semicolon", NULL, "threequartersemdash", NULL, "questionsmall",
- NULL, NULL, NULL, NULL, "Ethsmall", NULL, NULL, "onequarter",
- "onehalf", "threequarters", "oneeighth", "threeeighths", "fiveeighths", "seveneighths", "onethird", "twothirds",
- NULL, NULL, NULL, NULL, NULL, NULL, "ff", "fi",
- "fl", "ffi", "ffl", "parenleftinferior", NULL, "parenrightinferior", "Circumflexsmall", "hypheninferior",
- "Gravesmall", "Asmall", "Bsmall", "Csmall", "Dsmall", "Esmall", "Fsmall", "Gsmall",
- "Hsmall", "Ismall", "Jsmall", "Ksmall", "Lsmall", "Msmall", "Nsmall", "Osmall",
- "Psmall", "Qsmall", "Rsmall", "Ssmall", "Tsmall", "Usmall", "Vsmall", "Wsmall",
- "Xsmall", "Ysmall", "Zsmall", "colonmonetary", "onefitted", "rupiah", "Tildesmall", NULL,
- NULL, "asuperior", "centsuperior", NULL, NULL, NULL, NULL, "Aacutesmall",
- "Agravesmall", "Acircumflexsmall", "Adieresissmall", "Atildesmall", "Aringsmall", "Ccedillasmall", "Eacutesmall", "Egravesmall",
- "Ecircumflexsmall", "Edieresissmall", "Iacutesmall", "Igravesmall", "Icircumflexsmall", "Idieresissmall", "Ntildesmall", "Oacutesmall",
- "Ogravesmall", "Ocircumflexsmall", "Odieresissmall", "Otildesmall", "Uacutesmall", "Ugravesmall", "Ucircumflexsmall", "Udieresissmall",
- NULL, "eightsuperior", "fourinferior", "threeinferior", "sixinferior", "eightinferior", "seveninferior", "Scaronsmall",
- NULL, "centinferior", "twoinferior", NULL, "Dieresissmall", NULL, "Caronsmall", "Scaronsmall",
- "fiveinferior", NULL, "commainferior", "periodinferior", "Yacutesmall", NULL, "dollarinferior", NULL,
- NULL, "Thornsmall", NULL, "nineinferior", "zeroinferior", "Zcaronsmall", "AEsmall", "Oslashsmall",
- "questiondownsmall", "oneinferior", "asuperior", NULL, NULL, NULL, NULL, NULL,
- NULL, "Cedillasmall", NULL, NULL, NULL, NULL, NULL, "OEsmall",
- "figuredash", "hyphensuperior", NULL, NULL, NULL, NULL, "exclamdownsmall", NULL,
- "Ydieresissmall", NULL, "onesuperior", "twosuperior", "threesuperior", "foursuperior", "fivesuperior", "sixsuperior",
- "sevensuperior", "ninesuperior", "zerosuperior", NULL, "esuperior", "rsuperior", NULL, NULL,
- NULL, "isuperior", "ssuperior", "dsuperior", NULL, NULL, NULL, NULL,
- NULL, "lsuperior", "Ogoneksmall", "Brevesmall", "Macronsmall", "bsuperior", "nsuperior", "msuperior",
- "commasuperior", "periodsuperior", "Dotaccentsmall", "Ringsmall", NULL, NULL, NULL, NULL,
+ "space",
+ "exclamsmall",
+ "Hungarumlautsmall",
+ "centoldstyle",
+ "dollaroldstyle",
+ "dollarsuperior",
+ "ampersandsmall",
+ "Acutesmall",
+ "parenleftsuperior",
+ "parenrightsuperior",
+ "twodotenleader",
+ "onedotenleader",
+ "comma",
+ "hyphen",
+ "period",
+ "fraction",
+ "zerooldstyle",
+ "oneoldstyle",
+ "twooldstyle",
+ "threeoldstyle",
+ "fouroldstyle",
+ "fiveoldstyle",
+ "sixoldstyle",
+ "sevenoldstyle",
+ "eightoldstyle",
+ "nineoldstyle",
+ "colon",
+ "semicolon",
+ NULL,
+ "threequartersemdash",
+ NULL,
+ "questionsmall",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "Ethsmall",
+ NULL,
+ NULL,
+ "onequarter",
+ "onehalf",
+ "threequarters",
+ "oneeighth",
+ "threeeighths",
+ "fiveeighths",
+ "seveneighths",
+ "onethird",
+ "twothirds",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "ff",
+ "fi",
+ "fl",
+ "ffi",
+ "ffl",
+ "parenleftinferior",
+ NULL,
+ "parenrightinferior",
+ "Circumflexsmall",
+ "hypheninferior",
+ "Gravesmall",
+ "Asmall",
+ "Bsmall",
+ "Csmall",
+ "Dsmall",
+ "Esmall",
+ "Fsmall",
+ "Gsmall",
+ "Hsmall",
+ "Ismall",
+ "Jsmall",
+ "Ksmall",
+ "Lsmall",
+ "Msmall",
+ "Nsmall",
+ "Osmall",
+ "Psmall",
+ "Qsmall",
+ "Rsmall",
+ "Ssmall",
+ "Tsmall",
+ "Usmall",
+ "Vsmall",
+ "Wsmall",
+ "Xsmall",
+ "Ysmall",
+ "Zsmall",
+ "colonmonetary",
+ "onefitted",
+ "rupiah",
+ "Tildesmall",
+ NULL,
+ NULL,
+ "asuperior",
+ "centsuperior",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "Aacutesmall",
+ "Agravesmall",
+ "Acircumflexsmall",
+ "Adieresissmall",
+ "Atildesmall",
+ "Aringsmall",
+ "Ccedillasmall",
+ "Eacutesmall",
+ "Egravesmall",
+ "Ecircumflexsmall",
+ "Edieresissmall",
+ "Iacutesmall",
+ "Igravesmall",
+ "Icircumflexsmall",
+ "Idieresissmall",
+ "Ntildesmall",
+ "Oacutesmall",
+ "Ogravesmall",
+ "Ocircumflexsmall",
+ "Odieresissmall",
+ "Otildesmall",
+ "Uacutesmall",
+ "Ugravesmall",
+ "Ucircumflexsmall",
+ "Udieresissmall",
+ NULL,
+ "eightsuperior",
+ "fourinferior",
+ "threeinferior",
+ "sixinferior",
+ "eightinferior",
+ "seveninferior",
+ "Scaronsmall",
+ NULL,
+ "centinferior",
+ "twoinferior",
+ NULL,
+ "Dieresissmall",
+ NULL,
+ "Caronsmall",
+ "Scaronsmall",
+ "fiveinferior",
+ NULL,
+ "commainferior",
+ "periodinferior",
+ "Yacutesmall",
+ NULL,
+ "dollarinferior",
+ NULL,
+ NULL,
+ "Thornsmall",
+ NULL,
+ "nineinferior",
+ "zeroinferior",
+ "Zcaronsmall",
+ "AEsmall",
+ "Oslashsmall",
+ "questiondownsmall",
+ "oneinferior",
+ "asuperior",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "Cedillasmall",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "OEsmall",
+ "figuredash",
+ "hyphensuperior",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "exclamdownsmall",
+ NULL,
+ "Ydieresissmall",
+ NULL,
+ "onesuperior",
+ "twosuperior",
+ "threesuperior",
+ "foursuperior",
+ "fivesuperior",
+ "sixsuperior",
+ "sevensuperior",
+ "ninesuperior",
+ "zerosuperior",
+ NULL,
+ "esuperior",
+ "rsuperior",
+ NULL,
+ NULL,
+ NULL,
+ "isuperior",
+ "ssuperior",
+ "dsuperior",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "lsuperior",
+ "Ogoneksmall",
+ "Brevesmall",
+ "Macronsmall",
+ "bsuperior",
+ "nsuperior",
+ "msuperior",
+ "commasuperior",
+ "periodsuperior",
+ "Dotaccentsmall",
+ "Ringsmall",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
};
static const FX_CHAR* const PDFDocEncodingNames[232] = {
- "breve", "caron", "circumflex", "dotaccent", "hungarumlaut", "ogonek", "ring", "tilde",
- "space", "exclam", "quotedbl", "numbersign", "dollar", "percent", "ampersand", "quotesingle",
- "parenleft", "parenright", "asterisk", "plus", "comma", "hyphen", "period", "slash",
- "zero", "one", "two", "three", "four", "five", "six", "seven",
- "eight", "nine", "colon", "semicolon", "less", "equal", "greater", "question",
- "at", "A", "B", "C", "D", "E", "F", "G",
- "H", "I", "J", "K", "L", "M", "N", "O",
- "P", "Q", "R", "S", "T", "U", "V", "W",
- "X", "Y", "Z", "bracketleft", "backslash", "bracketright", "asciicircum", "underscore",
- "grave", "a", "b", "c", "d", "e", "f", "g",
- "h", "i", "j", "k", "l", "m", "n", "o",
- "p", "q", "r", "s", "t", "u", "v", "w",
- "x", "y", "z", "braceleft", "bar", "braceright", "asciitilde", NULL,
- "bullet3", "dagger", "daggerdbl", "ellipsis", "emdash", "endash", "florin", "fraction",
- "guilsinglleft", "guilsinglright", "minus", "perthousand", "quotedblbase", "quotedblleft", "quotedblright", "quoteleft",
- "quoteright", "quotesinglbase", "trademark", "fi", "fl", "Lslash", "OE", "Scaron",
- "Ydieresis", "Zcaron2", "dotlessi", "lslash", "oe", "scaron", "zcaron2", NULL,
- "Euro", "exclamdown", "cent", "sterling", "currency", "yen", "brokenbar", "section",
- "dieresis", "copyright", "ordfeminine", "guillemotleft4", "logicalnot", NULL, "registered", "macron",
- "degree", "plusminus", "twosuperior", "threesuperior", "acute", "mu", "paragraph", "periodcentered",
- "cedilla", "onesuperior", "ordmasculine", "guillemotright4", "onequarter", "onehalf", "threequarters", "questiondown",
- "Agrave", "Aacute", "Acircumflex", "Atilde", "Adieresis", "Aring", "AE", "Ccedilla",
- "Egrave", "Eacute", "Ecircumflex", "Edieresis", "Igrave", "Iacute", "Icircumflex", "Idieresis",
- "Eth", "Ntilde", "Ograve", "Oacute", "Ocircumflex", "Otilde", "Odieresis", "multiply",
- "Oslash", "Ugrave", "Uacute", "Ucircumflex", "Udieresis", "Yacute", "Thorn", "germandbls",
- "agrave", "aacute", "acircumflex", "atilde", "adieresis", "aring", "ae", "ccedilla",
- "egrave", "eacute", "ecircumflex", "edieresis", "igrave", "iacute", "icircumflex", "idieresis",
- "eth", "ntilde", "ograve", "oacute", "ocircumflex", "otilde", "odieresis", "divide",
- "oslash", "ugrave", "uacute", "ucircumflex", "udieresis", "yacute", "thorn", "ydieresis",
+ "breve",
+ "caron",
+ "circumflex",
+ "dotaccent",
+ "hungarumlaut",
+ "ogonek",
+ "ring",
+ "tilde",
+ "space",
+ "exclam",
+ "quotedbl",
+ "numbersign",
+ "dollar",
+ "percent",
+ "ampersand",
+ "quotesingle",
+ "parenleft",
+ "parenright",
+ "asterisk",
+ "plus",
+ "comma",
+ "hyphen",
+ "period",
+ "slash",
+ "zero",
+ "one",
+ "two",
+ "three",
+ "four",
+ "five",
+ "six",
+ "seven",
+ "eight",
+ "nine",
+ "colon",
+ "semicolon",
+ "less",
+ "equal",
+ "greater",
+ "question",
+ "at",
+ "A",
+ "B",
+ "C",
+ "D",
+ "E",
+ "F",
+ "G",
+ "H",
+ "I",
+ "J",
+ "K",
+ "L",
+ "M",
+ "N",
+ "O",
+ "P",
+ "Q",
+ "R",
+ "S",
+ "T",
+ "U",
+ "V",
+ "W",
+ "X",
+ "Y",
+ "Z",
+ "bracketleft",
+ "backslash",
+ "bracketright",
+ "asciicircum",
+ "underscore",
+ "grave",
+ "a",
+ "b",
+ "c",
+ "d",
+ "e",
+ "f",
+ "g",
+ "h",
+ "i",
+ "j",
+ "k",
+ "l",
+ "m",
+ "n",
+ "o",
+ "p",
+ "q",
+ "r",
+ "s",
+ "t",
+ "u",
+ "v",
+ "w",
+ "x",
+ "y",
+ "z",
+ "braceleft",
+ "bar",
+ "braceright",
+ "asciitilde",
+ NULL,
+ "bullet3",
+ "dagger",
+ "daggerdbl",
+ "ellipsis",
+ "emdash",
+ "endash",
+ "florin",
+ "fraction",
+ "guilsinglleft",
+ "guilsinglright",
+ "minus",
+ "perthousand",
+ "quotedblbase",
+ "quotedblleft",
+ "quotedblright",
+ "quoteleft",
+ "quoteright",
+ "quotesinglbase",
+ "trademark",
+ "fi",
+ "fl",
+ "Lslash",
+ "OE",
+ "Scaron",
+ "Ydieresis",
+ "Zcaron2",
+ "dotlessi",
+ "lslash",
+ "oe",
+ "scaron",
+ "zcaron2",
+ NULL,
+ "Euro",
+ "exclamdown",
+ "cent",
+ "sterling",
+ "currency",
+ "yen",
+ "brokenbar",
+ "section",
+ "dieresis",
+ "copyright",
+ "ordfeminine",
+ "guillemotleft4",
+ "logicalnot",
+ NULL,
+ "registered",
+ "macron",
+ "degree",
+ "plusminus",
+ "twosuperior",
+ "threesuperior",
+ "acute",
+ "mu",
+ "paragraph",
+ "periodcentered",
+ "cedilla",
+ "onesuperior",
+ "ordmasculine",
+ "guillemotright4",
+ "onequarter",
+ "onehalf",
+ "threequarters",
+ "questiondown",
+ "Agrave",
+ "Aacute",
+ "Acircumflex",
+ "Atilde",
+ "Adieresis",
+ "Aring",
+ "AE",
+ "Ccedilla",
+ "Egrave",
+ "Eacute",
+ "Ecircumflex",
+ "Edieresis",
+ "Igrave",
+ "Iacute",
+ "Icircumflex",
+ "Idieresis",
+ "Eth",
+ "Ntilde",
+ "Ograve",
+ "Oacute",
+ "Ocircumflex",
+ "Otilde",
+ "Odieresis",
+ "multiply",
+ "Oslash",
+ "Ugrave",
+ "Uacute",
+ "Ucircumflex",
+ "Udieresis",
+ "Yacute",
+ "Thorn",
+ "germandbls",
+ "agrave",
+ "aacute",
+ "acircumflex",
+ "atilde",
+ "adieresis",
+ "aring",
+ "ae",
+ "ccedilla",
+ "egrave",
+ "eacute",
+ "ecircumflex",
+ "edieresis",
+ "igrave",
+ "iacute",
+ "icircumflex",
+ "idieresis",
+ "eth",
+ "ntilde",
+ "ograve",
+ "oacute",
+ "ocircumflex",
+ "otilde",
+ "odieresis",
+ "divide",
+ "oslash",
+ "ugrave",
+ "uacute",
+ "ucircumflex",
+ "udieresis",
+ "yacute",
+ "thorn",
+ "ydieresis",
};
static const FX_CHAR* const AdobeSymbolEncodingNames[224] = {
- "space", "exclam", "universal", "numbersign", "existential", "percent", "ampersand", "suchthat",
- "parenleft", "parenright", "asteriskmath", "plus", "comma", "minus", "period", "slash",
- "zero", "one", "two", "three", "four", "five", "six", "seven",
- "eight", "nine", "colon", "semicolon", "less", "equal", "greater", "question",
- "congruent", "Alpha", "Beta", "Chi", "Delta", "Epsilon", "Phi", "Gamma",
- "Eta", "Iota", "theta1", "Kappa", "Lambda", "Mu", "Nu", "Omicron",
- "Pi", "Theta", "Rho", "Sigma", "Tau", "Upsilon", "sigma1", "Omega",
- "Xi", "Psi", "Zeta", "bracketleft", "therefore", "bracketright", "perpendicular", "underscore",
- "radicalex", "alpha", "beta", "chi", "delta", "epsilon", "phi", "gamma",
- "eta", "iota", "phi1", "kappa", "lambda", "mu", "nu", "omicron",
- "pi", "theta", "rho", "sigma", "tau", "upsilon", "omega1", "omega",
- "xi", "psi", "zeta", "braceleft", "bar", "braceright", "similar", NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- "Euro", "Upsilon1", "minute", "lessequal", "fraction", "infinity", "florin", "club",
- "diamond", "heart", "spade", "arrowboth", "arrowleft", "arrowup", "arrowright", "arrowdown",
- "degree", "plusminus", "second", "greaterequal", "multiply", "proportional", "partialdiff", "bullet",
- "divide", "notequal", "equivalence", "approxequal", "ellipsis", "arrowvertex", "arrowhorizex", "carriagereturn",
- "aleph", "Ifraktur", "Rfraktur", "weierstrass", "circlemultiply", "circleplus", "emptyset", "intersection",
- "union", "propersuperset", "reflexsuperset", "notsubset", "propersubset", "reflexsubset", "element", "notelement",
- "angle", "gradient", "registerserif", "copyrightserif", "trademarkserif", "product", "radical", "dotmath",
- "logicalnot", "logicaland", "logicalor", "arrowdblboth", "arrowdblleft", "arrowdblup", "arrowdblright", "arrowdbldown",
- "lozenge", "angleleft", "registersans", "copyrightsans", "trademarksans", "summation", "parenlefttp", "parenleftex",
- "parenleftbt", "bracketlefttp", "bracketleftex", "bracketleftbt", "bracelefttp", "braceleftmid", "braceleftbt", "braceex",
- NULL, "angleright", "integral", "integraltp", "integralex", "integralbt", "parenrighttp", "parenrightex",
- "parenrightbt", "bracketrighttp", "bracketrightex", "bracketrightbt", "bracerighttp", "bracerightmid", "bracerightbt", NULL,
+ "space",
+ "exclam",
+ "universal",
+ "numbersign",
+ "existential",
+ "percent",
+ "ampersand",
+ "suchthat",
+ "parenleft",
+ "parenright",
+ "asteriskmath",
+ "plus",
+ "comma",
+ "minus",
+ "period",
+ "slash",
+ "zero",
+ "one",
+ "two",
+ "three",
+ "four",
+ "five",
+ "six",
+ "seven",
+ "eight",
+ "nine",
+ "colon",
+ "semicolon",
+ "less",
+ "equal",
+ "greater",
+ "question",
+ "congruent",
+ "Alpha",
+ "Beta",
+ "Chi",
+ "Delta",
+ "Epsilon",
+ "Phi",
+ "Gamma",
+ "Eta",
+ "Iota",
+ "theta1",
+ "Kappa",
+ "Lambda",
+ "Mu",
+ "Nu",
+ "Omicron",
+ "Pi",
+ "Theta",
+ "Rho",
+ "Sigma",
+ "Tau",
+ "Upsilon",
+ "sigma1",
+ "Omega",
+ "Xi",
+ "Psi",
+ "Zeta",
+ "bracketleft",
+ "therefore",
+ "bracketright",
+ "perpendicular",
+ "underscore",
+ "radicalex",
+ "alpha",
+ "beta",
+ "chi",
+ "delta",
+ "epsilon",
+ "phi",
+ "gamma",
+ "eta",
+ "iota",
+ "phi1",
+ "kappa",
+ "lambda",
+ "mu",
+ "nu",
+ "omicron",
+ "pi",
+ "theta",
+ "rho",
+ "sigma",
+ "tau",
+ "upsilon",
+ "omega1",
+ "omega",
+ "xi",
+ "psi",
+ "zeta",
+ "braceleft",
+ "bar",
+ "braceright",
+ "similar",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "Euro",
+ "Upsilon1",
+ "minute",
+ "lessequal",
+ "fraction",
+ "infinity",
+ "florin",
+ "club",
+ "diamond",
+ "heart",
+ "spade",
+ "arrowboth",
+ "arrowleft",
+ "arrowup",
+ "arrowright",
+ "arrowdown",
+ "degree",
+ "plusminus",
+ "second",
+ "greaterequal",
+ "multiply",
+ "proportional",
+ "partialdiff",
+ "bullet",
+ "divide",
+ "notequal",
+ "equivalence",
+ "approxequal",
+ "ellipsis",
+ "arrowvertex",
+ "arrowhorizex",
+ "carriagereturn",
+ "aleph",
+ "Ifraktur",
+ "Rfraktur",
+ "weierstrass",
+ "circlemultiply",
+ "circleplus",
+ "emptyset",
+ "intersection",
+ "union",
+ "propersuperset",
+ "reflexsuperset",
+ "notsubset",
+ "propersubset",
+ "reflexsubset",
+ "element",
+ "notelement",
+ "angle",
+ "gradient",
+ "registerserif",
+ "copyrightserif",
+ "trademarkserif",
+ "product",
+ "radical",
+ "dotmath",
+ "logicalnot",
+ "logicaland",
+ "logicalor",
+ "arrowdblboth",
+ "arrowdblleft",
+ "arrowdblup",
+ "arrowdblright",
+ "arrowdbldown",
+ "lozenge",
+ "angleleft",
+ "registersans",
+ "copyrightsans",
+ "trademarksans",
+ "summation",
+ "parenlefttp",
+ "parenleftex",
+ "parenleftbt",
+ "bracketlefttp",
+ "bracketleftex",
+ "bracketleftbt",
+ "bracelefttp",
+ "braceleftmid",
+ "braceleftbt",
+ "braceex",
+ NULL,
+ "angleright",
+ "integral",
+ "integraltp",
+ "integralex",
+ "integralbt",
+ "parenrighttp",
+ "parenrightex",
+ "parenrightbt",
+ "bracketrighttp",
+ "bracketrightex",
+ "bracketrightbt",
+ "bracerighttp",
+ "bracerightmid",
+ "bracerightbt",
+ NULL,
};
static const FX_CHAR* const ZapfEncodingNames[224] = {
- "space", "a1", "a2", "a202", "a3", "a4", "a5", "a119",
- "a118", "a117", "a11", "a12", "a13", "a14", "a15", "a16",
- "a105", "a17", "a18", "a19", "a20", "a21", "a22", "a23",
- "a24", "a25", "a26", "a27", "a28", "a6", "a7", "a8",
- "a9", "a10", "a29", "a30", "a31", "a32", "a33", "a34",
- "a35", "a36", "a37", "a38", "a39", "a40", "a41", "a42",
- "a43", "a44", "a45", "a46", "a47", "a48", "a49", "a50",
- "a51", "a52", "a53", "a54", "a55", "a56", "a57", "a58",
- "a59", "a60", "a61", "a62", "a63", "a64", "a65", "a66",
- "a67", "a68", "a69", "a70", "a71", "a72", "a73", "a74",
- "a203", "a75", "a204", "a76", "a77", "a78", "a79", "a81",
- "a82", "a83", "a84", "a97", "a98", "a99", "a100", NULL,
- "a89", "a90", "a93", "a94", "a91", "a92", "a205", "a85",
- "a206", "a86", "a87", "a88", "a95", "a96", NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, "a101", "a102", "a103", "a104", "a106", "a107", "a108",
- "a112", "a111", "a110", "a109", "a120", "a121", "a122", "a123",
- "a124", "a125", "a126", "a127", "a128", "a129", "a130", "a131",
- "a132", "a133", "a134", "a135", "a136", "a137", "a138", "a139",
- "a140", "a141", "a142", "a143", "a144", "a145", "a146", "a147",
- "a148", "a149", "a150", "a151", "a152", "a153", "a154", "a155",
- "a156", "a157", "a158", "a159", "a160", "a161", "a163", "a164",
- "a196", "a165", "a192", "a166", "a167", "a168", "a169", "a170",
- "a171", "a172", "a173", "a162", "a174", "a175", "a176", "a177",
- "a178", "a179", "a193", "a180", "a199", "a181", "a200", "a182",
- NULL, "a201", "a183", "a184", "a197", "a185", "a194", "a198",
- "a186", "a195", "a187", "a188", "a189", "a190", "a191", NULL
-};
-const FX_CHAR* PDF_CharNameFromPredefinedCharSet(int encoding, uint8_t charcode)
-{
- if (encoding == PDFFONT_ENCODING_PDFDOC) {
- if (charcode < 24) {
- return NULL;
- }
- charcode -= 24;
- } else {
- if (charcode < 32) {
- return NULL;
- }
- charcode -= 32;
+ "space", "a1", "a2", "a202", "a3", "a4", "a5", "a119", "a118",
+ "a117", "a11", "a12", "a13", "a14", "a15", "a16", "a105", "a17",
+ "a18", "a19", "a20", "a21", "a22", "a23", "a24", "a25", "a26",
+ "a27", "a28", "a6", "a7", "a8", "a9", "a10", "a29", "a30",
+ "a31", "a32", "a33", "a34", "a35", "a36", "a37", "a38", "a39",
+ "a40", "a41", "a42", "a43", "a44", "a45", "a46", "a47", "a48",
+ "a49", "a50", "a51", "a52", "a53", "a54", "a55", "a56", "a57",
+ "a58", "a59", "a60", "a61", "a62", "a63", "a64", "a65", "a66",
+ "a67", "a68", "a69", "a70", "a71", "a72", "a73", "a74", "a203",
+ "a75", "a204", "a76", "a77", "a78", "a79", "a81", "a82", "a83",
+ "a84", "a97", "a98", "a99", "a100", NULL, "a89", "a90", "a93",
+ "a94", "a91", "a92", "a205", "a85", "a206", "a86", "a87", "a88",
+ "a95", "a96", NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, "a101", "a102", "a103", "a104", "a106", "a107",
+ "a108", "a112", "a111", "a110", "a109", "a120", "a121", "a122", "a123",
+ "a124", "a125", "a126", "a127", "a128", "a129", "a130", "a131", "a132",
+ "a133", "a134", "a135", "a136", "a137", "a138", "a139", "a140", "a141",
+ "a142", "a143", "a144", "a145", "a146", "a147", "a148", "a149", "a150",
+ "a151", "a152", "a153", "a154", "a155", "a156", "a157", "a158", "a159",
+ "a160", "a161", "a163", "a164", "a196", "a165", "a192", "a166", "a167",
+ "a168", "a169", "a170", "a171", "a172", "a173", "a162", "a174", "a175",
+ "a176", "a177", "a178", "a179", "a193", "a180", "a199", "a181", "a200",
+ "a182", NULL, "a201", "a183", "a184", "a197", "a185", "a194", "a198",
+ "a186", "a195", "a187", "a188", "a189", "a190", "a191", NULL};
+const FX_CHAR* PDF_CharNameFromPredefinedCharSet(int encoding,
+ uint8_t charcode) {
+ if (encoding == PDFFONT_ENCODING_PDFDOC) {
+ if (charcode < 24) {
+ return NULL;
}
- switch (encoding) {
- case PDFFONT_ENCODING_WINANSI:
- return AdobeWinAnsiEncodingNames[charcode];
- case PDFFONT_ENCODING_MACROMAN:
- return MacRomanEncodingNames[charcode];
- case PDFFONT_ENCODING_MACEXPERT:
- return MacExpertEncodingNames[charcode];
- case PDFFONT_ENCODING_STANDARD:
- return StandardEncodingNames[charcode];
- case PDFFONT_ENCODING_ADOBE_SYMBOL:
- return AdobeSymbolEncodingNames[charcode];
- case PDFFONT_ENCODING_ZAPFDINGBATS:
- return ZapfEncodingNames[charcode];
- case PDFFONT_ENCODING_PDFDOC:
- return PDFDocEncodingNames[charcode];
+ charcode -= 24;
+ } else {
+ if (charcode < 32) {
+ return NULL;
}
- return NULL;
+ charcode -= 32;
+ }
+ switch (encoding) {
+ case PDFFONT_ENCODING_WINANSI:
+ return AdobeWinAnsiEncodingNames[charcode];
+ case PDFFONT_ENCODING_MACROMAN:
+ return MacRomanEncodingNames[charcode];
+ case PDFFONT_ENCODING_MACEXPERT:
+ return MacExpertEncodingNames[charcode];
+ case PDFFONT_ENCODING_STANDARD:
+ return StandardEncodingNames[charcode];
+ case PDFFONT_ENCODING_ADOBE_SYMBOL:
+ return AdobeSymbolEncodingNames[charcode];
+ case PDFFONT_ENCODING_ZAPFDINGBATS:
+ return ZapfEncodingNames[charcode];
+ case PDFFONT_ENCODING_PDFDOC:
+ return PDFDocEncodingNames[charcode];
+ }
+ return NULL;
}
-FX_WCHAR FT_UnicodeFromCharCode(int encoding, FX_DWORD charcode)
-{
- switch (encoding) {
- case FXFT_ENCODING_UNICODE:
- return (FX_WORD)charcode;
- case FXFT_ENCODING_ADOBE_STANDARD:
- return StandardEncoding[(uint8_t)charcode];
- case FXFT_ENCODING_ADOBE_EXPERT:
- return MacExpertEncoding[(uint8_t)charcode];
- case FXFT_ENCODING_ADOBE_LATIN_1:
- return AdobeWinAnsiEncoding[(uint8_t)charcode];
- case FXFT_ENCODING_APPLE_ROMAN:
- return MacRomanEncoding[(uint8_t)charcode];
- case PDFFONT_ENCODING_PDFDOC:
- return PDFDocEncoding[(uint8_t)charcode];
- }
- return 0;
+FX_WCHAR FT_UnicodeFromCharCode(int encoding, FX_DWORD charcode) {
+ switch (encoding) {
+ case FXFT_ENCODING_UNICODE:
+ return (FX_WORD)charcode;
+ case FXFT_ENCODING_ADOBE_STANDARD:
+ return StandardEncoding[(uint8_t)charcode];
+ case FXFT_ENCODING_ADOBE_EXPERT:
+ return MacExpertEncoding[(uint8_t)charcode];
+ case FXFT_ENCODING_ADOBE_LATIN_1:
+ return AdobeWinAnsiEncoding[(uint8_t)charcode];
+ case FXFT_ENCODING_APPLE_ROMAN:
+ return MacRomanEncoding[(uint8_t)charcode];
+ case PDFFONT_ENCODING_PDFDOC:
+ return PDFDocEncoding[(uint8_t)charcode];
+ }
+ return 0;
}
-static FX_DWORD PDF_FindCode(const FX_WORD* pCodes, FX_WORD unicode)
-{
- for (FX_DWORD i = 0; i < 256; i ++)
- if (pCodes[i] == unicode) {
- return i;
- }
- return 0;
+static FX_DWORD PDF_FindCode(const FX_WORD* pCodes, FX_WORD unicode) {
+ for (FX_DWORD i = 0; i < 256; i++)
+ if (pCodes[i] == unicode) {
+ return i;
+ }
+ return 0;
}
static const FX_WORD MSSymbolEncoding[256] = {
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 32, 33, 8704, 35, 8707, 37, 38, 8715,
- 40, 41, 8727, 43, 44, 8722, 46, 47, 48, 49,
- 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
- 60, 61, 62, 63, 8773, 913, 914, 935, 916, 917,
- 934, 915, 919, 921, 977, 922, 923, 924, 925, 927,
- 928, 920, 929, 931, 932, 933, 962, 937, 926, 936,
- 918, 91, 8756, 93, 8869, 95, 8254, 945, 946, 967,
- 948, 949, 966, 947, 951, 953, 981, 954, 955, 956,
- 957, 959, 960, 952, 961, 963, 964, 965, 982, 969,
- 958, 968, 950, 123, 124, 125, 8764, 0, 0, 0,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 978, 8242, 8804, 8725, 8734, 402, 9827, 9830, 9828,
- 9824, 8596, 8592, 8593, 8594, 8595, 176, 177, 8243, 8805,
- 215, 8733, 8706, 8729, 247, 8800, 8801, 8776, 8943, 0,
- 0, 8629, 0, 8465, 8476, 8472, 8855, 8853, 8709, 8745,
- 8746, 8835, 8839, 8836, 8834, 8838, 8712, 8713, 8736, 8711,
- 174, 169, 8482, 8719, 8730, 8901, 172, 8743, 8744, 8660,
- 8656, 8657, 8658, 8659, 9674, 9001, 0, 0, 0, 8721,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0x0000, 9002, 8747, 8992, 0, 8993, 0, 0, 0, 0,
- 0, 0, 0x0000, 0x0000, 0x0000, 0x0000
-};
-FX_DWORD FT_CharCodeFromUnicode(int encoding, FX_WCHAR unicode)
-{
- switch (encoding) {
- case FXFT_ENCODING_UNICODE:
- return unicode;
- case FXFT_ENCODING_ADOBE_STANDARD:
- return PDF_FindCode(StandardEncoding, unicode);
- case FXFT_ENCODING_ADOBE_EXPERT:
- return PDF_FindCode(MacExpertEncoding, unicode);
- case FXFT_ENCODING_ADOBE_LATIN_1:
- return PDF_FindCode(AdobeWinAnsiEncoding, unicode);
- case FXFT_ENCODING_APPLE_ROMAN:
- return PDF_FindCode(MacRomanEncoding, unicode);
- case FXFT_ENCODING_ADOBE_CUSTOM:
- return PDF_FindCode(PDFDocEncoding, unicode);
- case FXFT_ENCODING_MS_SYMBOL:
- return PDF_FindCode(MSSymbolEncoding, unicode);
- }
- return 0;
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 32, 33, 8704, 35,
+ 8707, 37, 38, 8715, 40, 41, 8727, 43, 44,
+ 8722, 46, 47, 48, 49, 50, 51, 52, 53,
+ 54, 55, 56, 57, 58, 59, 60, 61, 62,
+ 63, 8773, 913, 914, 935, 916, 917, 934, 915,
+ 919, 921, 977, 922, 923, 924, 925, 927, 928,
+ 920, 929, 931, 932, 933, 962, 937, 926, 936,
+ 918, 91, 8756, 93, 8869, 95, 8254, 945, 946,
+ 967, 948, 949, 966, 947, 951, 953, 981, 954,
+ 955, 956, 957, 959, 960, 952, 961, 963, 964,
+ 965, 982, 969, 958, 968, 950, 123, 124, 125,
+ 8764, 0, 0, 0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 978,
+ 8242, 8804, 8725, 8734, 402, 9827, 9830, 9828, 9824,
+ 8596, 8592, 8593, 8594, 8595, 176, 177, 8243, 8805,
+ 215, 8733, 8706, 8729, 247, 8800, 8801, 8776, 8943,
+ 0, 0, 8629, 0, 8465, 8476, 8472, 8855, 8853,
+ 8709, 8745, 8746, 8835, 8839, 8836, 8834, 8838, 8712,
+ 8713, 8736, 8711, 174, 169, 8482, 8719, 8730, 8901,
+ 172, 8743, 8744, 8660, 8656, 8657, 8658, 8659, 9674,
+ 9001, 0, 0, 0, 8721, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0x0000, 9002, 8747,
+ 8992, 0, 8993, 0, 0, 0, 0, 0, 0,
+ 0x0000, 0x0000, 0x0000, 0x0000};
+FX_DWORD FT_CharCodeFromUnicode(int encoding, FX_WCHAR unicode) {
+ switch (encoding) {
+ case FXFT_ENCODING_UNICODE:
+ return unicode;
+ case FXFT_ENCODING_ADOBE_STANDARD:
+ return PDF_FindCode(StandardEncoding, unicode);
+ case FXFT_ENCODING_ADOBE_EXPERT:
+ return PDF_FindCode(MacExpertEncoding, unicode);
+ case FXFT_ENCODING_ADOBE_LATIN_1:
+ return PDF_FindCode(AdobeWinAnsiEncoding, unicode);
+ case FXFT_ENCODING_APPLE_ROMAN:
+ return PDF_FindCode(MacRomanEncoding, unicode);
+ case FXFT_ENCODING_ADOBE_CUSTOM:
+ return PDF_FindCode(PDFDocEncoding, unicode);
+ case FXFT_ENCODING_MS_SYMBOL:
+ return PDF_FindCode(MSSymbolEncoding, unicode);
+ }
+ return 0;
}
-const FX_WORD* PDF_UnicodesForPredefinedCharSet(int encoding)
-{
- switch (encoding) {
- case PDFFONT_ENCODING_WINANSI:
- return AdobeWinAnsiEncoding;
- case PDFFONT_ENCODING_MACROMAN:
- return MacRomanEncoding;
- case PDFFONT_ENCODING_MACEXPERT:
- return MacExpertEncoding;
- case PDFFONT_ENCODING_STANDARD:
- return StandardEncoding;
- case PDFFONT_ENCODING_ADOBE_SYMBOL:
- return AdobeSymbolEncoding;
- case PDFFONT_ENCODING_ZAPFDINGBATS:
- return ZapfEncoding;
- case PDFFONT_ENCODING_PDFDOC:
- return PDFDocEncoding;
- case PDFFONT_ENCODING_MS_SYMBOL:
- return MSSymbolEncoding;
- }
- return NULL;
+const FX_WORD* PDF_UnicodesForPredefinedCharSet(int encoding) {
+ switch (encoding) {
+ case PDFFONT_ENCODING_WINANSI:
+ return AdobeWinAnsiEncoding;
+ case PDFFONT_ENCODING_MACROMAN:
+ return MacRomanEncoding;
+ case PDFFONT_ENCODING_MACEXPERT:
+ return MacExpertEncoding;
+ case PDFFONT_ENCODING_STANDARD:
+ return StandardEncoding;
+ case PDFFONT_ENCODING_ADOBE_SYMBOL:
+ return AdobeSymbolEncoding;
+ case PDFFONT_ENCODING_ZAPFDINGBATS:
+ return ZapfEncoding;
+ case PDFFONT_ENCODING_PDFDOC:
+ return PDFDocEncoding;
+ case PDFFONT_ENCODING_MS_SYMBOL:
+ return MSSymbolEncoding;
+ }
+ return NULL;
}
-FX_DWORD PDF_PredefinedCharCodeFromUnicode(int encoding, FX_WCHAR unicode)
-{
- return PDF_FindCode(PDF_UnicodesForPredefinedCharSet(encoding), unicode);
+FX_DWORD PDF_PredefinedCharCodeFromUnicode(int encoding, FX_WCHAR unicode) {
+ return PDF_FindCode(PDF_UnicodesForPredefinedCharSet(encoding), unicode);
}
#ifdef __cplusplus
extern "C" {
@@ -615,13 +1782,11 @@ extern void FXFT_adobe_name_from_unicode(char* glyph_name, FX_WCHAR unicode);
#ifdef __cplusplus
}
#endif
-FX_WCHAR PDF_UnicodeFromAdobeName(const FX_CHAR* name)
-{
- return (FX_WCHAR)(FXFT_unicode_from_adobe_name(name) & 0x7FFFFFFF);
+FX_WCHAR PDF_UnicodeFromAdobeName(const FX_CHAR* name) {
+ return (FX_WCHAR)(FXFT_unicode_from_adobe_name(name) & 0x7FFFFFFF);
}
-CFX_ByteString PDF_AdobeNameFromUnicode(FX_WCHAR unicode)
-{
- char glyph_name[64];
- FXFT_adobe_name_from_unicode(glyph_name, unicode);
- return CFX_ByteString(glyph_name, -1);
+CFX_ByteString PDF_AdobeNameFromUnicode(FX_WCHAR unicode) {
+ char glyph_name[64];
+ FXFT_adobe_name_from_unicode(glyph_name, unicode);
+ return CFX_ByteString(glyph_name, -1);
}
diff --git a/core/src/fpdfapi/fpdf_font/fpdf_font_cid.cpp b/core/src/fpdfapi/fpdf_font/fpdf_font_cid.cpp
index f70b9ecfc4..3c8b2567fe 100644
--- a/core/src/fpdfapi/fpdf_font/fpdf_font_cid.cpp
+++ b/core/src/fpdfapi/fpdf_font/fpdf_font_cid.cpp
@@ -13,1583 +13,1653 @@
#include "font_int.h"
extern short TT2PDF(int m, FXFT_Face face);
-extern FX_BOOL FT_UseTTCharmap(FXFT_Face face, int platform_id, int encoding_id);
+extern FX_BOOL FT_UseTTCharmap(FXFT_Face face,
+ int platform_id,
+ int encoding_id);
-CPDF_CMapManager::CPDF_CMapManager()
-{
- m_bPrompted = FALSE;
- FXSYS_memset(m_CID2UnicodeMaps, 0, sizeof m_CID2UnicodeMaps);
+CPDF_CMapManager::CPDF_CMapManager() {
+ m_bPrompted = FALSE;
+ FXSYS_memset(m_CID2UnicodeMaps, 0, sizeof m_CID2UnicodeMaps);
}
-CPDF_CMapManager::~CPDF_CMapManager()
-{
- DropAll(FALSE);
+CPDF_CMapManager::~CPDF_CMapManager() {
+ DropAll(FALSE);
}
-CPDF_CMap* CPDF_CMapManager::GetPredefinedCMap(const CFX_ByteString& name, FX_BOOL bPromptCJK)
-{
- CPDF_CMap* pCMap;
- if (m_CMaps.Lookup(name, (void*&)pCMap)) {
- return pCMap;
- }
- pCMap = LoadPredefinedCMap(name, bPromptCJK);
- if (name.IsEmpty()) {
- return pCMap;
- }
- m_CMaps.SetAt(name, pCMap);
+CPDF_CMap* CPDF_CMapManager::GetPredefinedCMap(const CFX_ByteString& name,
+ FX_BOOL bPromptCJK) {
+ CPDF_CMap* pCMap;
+ if (m_CMaps.Lookup(name, (void*&)pCMap)) {
return pCMap;
-}
-CPDF_CMap* CPDF_CMapManager::LoadPredefinedCMap(const CFX_ByteString& name, FX_BOOL bPromptCJK)
-{
- CPDF_CMap* pCMap = new CPDF_CMap;
- const FX_CHAR* pname = name;
- if (*pname == '/') {
- pname ++;
- }
- pCMap->LoadPredefined(this, pname, bPromptCJK);
+ }
+ pCMap = LoadPredefinedCMap(name, bPromptCJK);
+ if (name.IsEmpty()) {
return pCMap;
+ }
+ m_CMaps.SetAt(name, pCMap);
+ return pCMap;
}
-static const FX_CHAR* const g_CharsetNames[NUMBER_OF_CIDSETS] = {NULL, "GB1", "CNS1", "Japan1", "Korea1", "UCS" };
-static const int g_CharsetCPs[NUMBER_OF_CIDSETS] = {0, 936, 950, 932, 949, 1200 };
-int _CharsetFromOrdering(const CFX_ByteString& Ordering)
-{
- for (int charset = 1; charset < NUMBER_OF_CIDSETS; charset++) {
- if (Ordering == CFX_ByteStringC(g_CharsetNames[charset]))
- return charset;
- }
- return CIDSET_UNKNOWN;
+CPDF_CMap* CPDF_CMapManager::LoadPredefinedCMap(const CFX_ByteString& name,
+ FX_BOOL bPromptCJK) {
+ CPDF_CMap* pCMap = new CPDF_CMap;
+ const FX_CHAR* pname = name;
+ if (*pname == '/') {
+ pname++;
+ }
+ pCMap->LoadPredefined(this, pname, bPromptCJK);
+ return pCMap;
}
-void CPDF_CMapManager::ReloadAll()
-{
- DropAll(TRUE);
+static const FX_CHAR* const g_CharsetNames[NUMBER_OF_CIDSETS] = {
+ NULL, "GB1", "CNS1", "Japan1", "Korea1", "UCS"};
+static const int g_CharsetCPs[NUMBER_OF_CIDSETS] = {0, 936, 950,
+ 932, 949, 1200};
+int _CharsetFromOrdering(const CFX_ByteString& Ordering) {
+ for (int charset = 1; charset < NUMBER_OF_CIDSETS; charset++) {
+ if (Ordering == CFX_ByteStringC(g_CharsetNames[charset]))
+ return charset;
+ }
+ return CIDSET_UNKNOWN;
}
-void CPDF_CMapManager::DropAll(FX_BOOL bReload)
-{
- FX_POSITION pos = m_CMaps.GetStartPosition();
- while (pos) {
- CFX_ByteString name;
- CPDF_CMap* pCMap;
- m_CMaps.GetNextAssoc(pos, name, (void*&)pCMap);
- if (pCMap == NULL) {
- continue;
- }
- if (bReload) {
- pCMap->LoadPredefined(this, name, FALSE);
- } else {
- delete pCMap;
- }
+void CPDF_CMapManager::ReloadAll() {
+ DropAll(TRUE);
+}
+void CPDF_CMapManager::DropAll(FX_BOOL bReload) {
+ FX_POSITION pos = m_CMaps.GetStartPosition();
+ while (pos) {
+ CFX_ByteString name;
+ CPDF_CMap* pCMap;
+ m_CMaps.GetNextAssoc(pos, name, (void*&)pCMap);
+ if (pCMap == NULL) {
+ continue;
}
- for (int i = 0; i < sizeof m_CID2UnicodeMaps / sizeof(CPDF_CID2UnicodeMap*); i ++) {
- CPDF_CID2UnicodeMap* pMap = m_CID2UnicodeMaps[i];
- if (pMap == NULL) {
- continue;
- }
- if (bReload) {
- pMap->Load(this, i, FALSE);
- } else {
- delete pMap;
- }
+ if (bReload) {
+ pCMap->LoadPredefined(this, name, FALSE);
+ } else {
+ delete pCMap;
}
-}
-CPDF_CID2UnicodeMap* CPDF_CMapManager::GetCID2UnicodeMap(int charset, FX_BOOL bPromptCJK)
-{
- if (m_CID2UnicodeMaps[charset] == NULL) {
- m_CID2UnicodeMaps[charset] = LoadCID2UnicodeMap(charset, bPromptCJK);
+ }
+ for (int i = 0; i < sizeof m_CID2UnicodeMaps / sizeof(CPDF_CID2UnicodeMap*);
+ i++) {
+ CPDF_CID2UnicodeMap* pMap = m_CID2UnicodeMaps[i];
+ if (pMap == NULL) {
+ continue;
}
- return m_CID2UnicodeMaps[charset];
-}
-CPDF_CID2UnicodeMap* CPDF_CMapManager::LoadCID2UnicodeMap(int charset, FX_BOOL bPromptCJK)
-{
- CPDF_CID2UnicodeMap* pMap = new CPDF_CID2UnicodeMap();
- if (!pMap->Initialize()) {
- delete pMap;
- return NULL;
+ if (bReload) {
+ pMap->Load(this, i, FALSE);
+ } else {
+ delete pMap;
}
- pMap->Load(this, charset, bPromptCJK);
- return pMap;
+ }
}
-CPDF_CMapParser::CPDF_CMapParser()
-{
- m_pCMap = NULL;
- m_Status = 0;
- m_CodeSeq = 0;
+CPDF_CID2UnicodeMap* CPDF_CMapManager::GetCID2UnicodeMap(int charset,
+ FX_BOOL bPromptCJK) {
+ if (m_CID2UnicodeMaps[charset] == NULL) {
+ m_CID2UnicodeMaps[charset] = LoadCID2UnicodeMap(charset, bPromptCJK);
+ }
+ return m_CID2UnicodeMaps[charset];
}
-FX_BOOL CPDF_CMapParser::Initialize(CPDF_CMap* pCMap)
-{
- m_pCMap = pCMap;
- m_Status = 0;
- m_CodeSeq = 0;
- m_AddMaps.EstimateSize(0, 10240);
- return TRUE;
+CPDF_CID2UnicodeMap* CPDF_CMapManager::LoadCID2UnicodeMap(int charset,
+ FX_BOOL bPromptCJK) {
+ CPDF_CID2UnicodeMap* pMap = new CPDF_CID2UnicodeMap();
+ if (!pMap->Initialize()) {
+ delete pMap;
+ return NULL;
+ }
+ pMap->Load(this, charset, bPromptCJK);
+ return pMap;
}
-static FX_DWORD CMap_GetCode(const CFX_ByteStringC& word)
-{
- int num = 0;
- if (word.GetAt(0) == '<') {
- for (int i = 1; i < word.GetLength(); i ++) {
- uint8_t digit = word.GetAt(i);
- if (digit >= '0' && digit <= '9') {
- digit = digit - '0';
- } else if (digit >= 'a' && digit <= 'f') {
- digit = digit - 'a' + 10;
- } else if (digit >= 'A' && digit <= 'F') {
- digit = digit - 'A' + 10;
- } else {
- return num;
- }
- num = num * 16 + digit;
- }
- } else {
- for (int i = 0; i < word.GetLength(); i ++) {
- if (word.GetAt(i) < '0' || word.GetAt(i) > '9') {
- return num;
- }
- num = num * 10 + word.GetAt(i) - '0';
- }
- }
- return num;
+CPDF_CMapParser::CPDF_CMapParser() {
+ m_pCMap = NULL;
+ m_Status = 0;
+ m_CodeSeq = 0;
}
-static FX_BOOL _CMap_GetCodeRange(_CMap_CodeRange& range, const CFX_ByteStringC& first, const CFX_ByteStringC& second)
-{
- if (first.GetLength() == 0 || first.GetAt(0) != '<') {
- return FALSE;
- }
- int i;
- for (i = 1; i < first.GetLength(); i ++)
- if (first.GetAt(i) == '>') {
- break;
- }
- range.m_CharSize = (i - 1) / 2;
- if (range.m_CharSize > 4) {
- return FALSE;
- }
- for (i = 0; i < range.m_CharSize; i ++) {
- uint8_t digit1 = first.GetAt(i * 2 + 1);
- uint8_t digit2 = first.GetAt(i * 2 + 2);
- uint8_t byte = (digit1 >= '0' && digit1 <= '9') ? (digit1 - '0') : ((digit1 & 0xdf) - 'A' + 10);
- byte = byte * 16 + ((digit2 >= '0' && digit2 <= '9') ? (digit2 - '0') : ((digit2 & 0xdf) - 'A' + 10));
- range.m_Lower[i] = byte;
- }
- FX_DWORD size = second.GetLength();
- for (i = 0; i < range.m_CharSize; i ++) {
- uint8_t digit1 = ((FX_DWORD)i * 2 + 1 < size) ? second.GetAt((FX_STRSIZE)i * 2 + 1) : 0;
- uint8_t digit2 = ((FX_DWORD)i * 2 + 2 < size) ? second.GetAt((FX_STRSIZE)i * 2 + 2) : 0;
- uint8_t byte = (digit1 >= '0' && digit1 <= '9') ? (digit1 - '0') : ((digit1 & 0xdf) - 'A' + 10);
- byte = byte * 16 + ((digit2 >= '0' && digit2 <= '9') ? (digit2 - '0') : ((digit2 & 0xdf) - 'A' + 10));
- range.m_Upper[i] = byte;
- }
- return TRUE;
+FX_BOOL CPDF_CMapParser::Initialize(CPDF_CMap* pCMap) {
+ m_pCMap = pCMap;
+ m_Status = 0;
+ m_CodeSeq = 0;
+ m_AddMaps.EstimateSize(0, 10240);
+ return TRUE;
}
-static CFX_ByteString CMap_GetString(const CFX_ByteStringC& word)
-{
- return word.Mid(1, word.GetLength() - 2);
+static FX_DWORD CMap_GetCode(const CFX_ByteStringC& word) {
+ int num = 0;
+ if (word.GetAt(0) == '<') {
+ for (int i = 1; i < word.GetLength(); i++) {
+ uint8_t digit = word.GetAt(i);
+ if (digit >= '0' && digit <= '9') {
+ digit = digit - '0';
+ } else if (digit >= 'a' && digit <= 'f') {
+ digit = digit - 'a' + 10;
+ } else if (digit >= 'A' && digit <= 'F') {
+ digit = digit - 'A' + 10;
+ } else {
+ return num;
+ }
+ num = num * 16 + digit;
+ }
+ } else {
+ for (int i = 0; i < word.GetLength(); i++) {
+ if (word.GetAt(i) < '0' || word.GetAt(i) > '9') {
+ return num;
+ }
+ num = num * 10 + word.GetAt(i) - '0';
+ }
+ }
+ return num;
}
-void CPDF_CMapParser::ParseWord(const CFX_ByteStringC& word)
-{
- if (word.IsEmpty()) {
+static FX_BOOL _CMap_GetCodeRange(_CMap_CodeRange& range,
+ const CFX_ByteStringC& first,
+ const CFX_ByteStringC& second) {
+ if (first.GetLength() == 0 || first.GetAt(0) != '<') {
+ return FALSE;
+ }
+ int i;
+ for (i = 1; i < first.GetLength(); i++)
+ if (first.GetAt(i) == '>') {
+ break;
+ }
+ range.m_CharSize = (i - 1) / 2;
+ if (range.m_CharSize > 4) {
+ return FALSE;
+ }
+ for (i = 0; i < range.m_CharSize; i++) {
+ uint8_t digit1 = first.GetAt(i * 2 + 1);
+ uint8_t digit2 = first.GetAt(i * 2 + 2);
+ uint8_t byte = (digit1 >= '0' && digit1 <= '9')
+ ? (digit1 - '0')
+ : ((digit1 & 0xdf) - 'A' + 10);
+ byte = byte * 16 + ((digit2 >= '0' && digit2 <= '9')
+ ? (digit2 - '0')
+ : ((digit2 & 0xdf) - 'A' + 10));
+ range.m_Lower[i] = byte;
+ }
+ FX_DWORD size = second.GetLength();
+ for (i = 0; i < range.m_CharSize; i++) {
+ uint8_t digit1 =
+ ((FX_DWORD)i * 2 + 1 < size) ? second.GetAt((FX_STRSIZE)i * 2 + 1) : 0;
+ uint8_t digit2 =
+ ((FX_DWORD)i * 2 + 2 < size) ? second.GetAt((FX_STRSIZE)i * 2 + 2) : 0;
+ uint8_t byte = (digit1 >= '0' && digit1 <= '9')
+ ? (digit1 - '0')
+ : ((digit1 & 0xdf) - 'A' + 10);
+ byte = byte * 16 + ((digit2 >= '0' && digit2 <= '9')
+ ? (digit2 - '0')
+ : ((digit2 & 0xdf) - 'A' + 10));
+ range.m_Upper[i] = byte;
+ }
+ return TRUE;
+}
+static CFX_ByteString CMap_GetString(const CFX_ByteStringC& word) {
+ return word.Mid(1, word.GetLength() - 2);
+}
+void CPDF_CMapParser::ParseWord(const CFX_ByteStringC& word) {
+ if (word.IsEmpty()) {
+ return;
+ }
+ if (word == FX_BSTRC("begincidchar")) {
+ m_Status = 1;
+ m_CodeSeq = 0;
+ } else if (word == FX_BSTRC("begincidrange")) {
+ m_Status = 2;
+ m_CodeSeq = 0;
+ } else if (word == FX_BSTRC("endcidrange") ||
+ word == FX_BSTRC("endcidchar")) {
+ m_Status = 0;
+ } else if (word == FX_BSTRC("/WMode")) {
+ m_Status = 6;
+ } else if (word == FX_BSTRC("/Registry")) {
+ m_Status = 3;
+ } else if (word == FX_BSTRC("/Ordering")) {
+ m_Status = 4;
+ } else if (word == FX_BSTRC("/Supplement")) {
+ m_Status = 5;
+ } else if (word == FX_BSTRC("begincodespacerange")) {
+ m_Status = 7;
+ m_CodeSeq = 0;
+ } else if (word == FX_BSTRC("usecmap")) {
+ } else if (m_Status == 1 || m_Status == 2) {
+ m_CodePoints[m_CodeSeq] = CMap_GetCode(word);
+ m_CodeSeq++;
+ FX_DWORD StartCode, EndCode;
+ FX_WORD StartCID;
+ if (m_Status == 1) {
+ if (m_CodeSeq < 2) {
+ return;
+ }
+ EndCode = StartCode = m_CodePoints[0];
+ StartCID = (FX_WORD)m_CodePoints[1];
+ } else {
+ if (m_CodeSeq < 3) {
return;
+ }
+ StartCode = m_CodePoints[0];
+ EndCode = m_CodePoints[1];
+ StartCID = (FX_WORD)m_CodePoints[2];
+ }
+ if (EndCode < 0x10000) {
+ for (FX_DWORD code = StartCode; code <= EndCode; code++) {
+ m_pCMap->m_pMapping[code] = (FX_WORD)(StartCID + code - StartCode);
+ }
+ } else {
+ FX_DWORD buf[2];
+ buf[0] = StartCode;
+ buf[1] = ((EndCode - StartCode) << 16) + StartCID;
+ m_AddMaps.AppendBlock(buf, sizeof buf);
}
- if (word == FX_BSTRC("begincidchar")) {
- m_Status = 1;
- m_CodeSeq = 0;
- } else if (word == FX_BSTRC("begincidrange")) {
- m_Status = 2;
- m_CodeSeq = 0;
- } else if (word == FX_BSTRC("endcidrange") || word == FX_BSTRC("endcidchar")) {
- m_Status = 0;
- } else if (word == FX_BSTRC("/WMode")) {
- m_Status = 6;
- } else if (word == FX_BSTRC("/Registry")) {
- m_Status = 3;
- } else if (word == FX_BSTRC("/Ordering")) {
- m_Status = 4;
- } else if (word == FX_BSTRC("/Supplement")) {
- m_Status = 5;
- } else if (word == FX_BSTRC("begincodespacerange")) {
- m_Status = 7;
- m_CodeSeq = 0;
- } else if (word == FX_BSTRC("usecmap")) {
- } else if (m_Status == 1 || m_Status == 2) {
- m_CodePoints[m_CodeSeq] = CMap_GetCode(word);
- m_CodeSeq ++;
- FX_DWORD StartCode, EndCode;
- FX_WORD StartCID;
- if (m_Status == 1) {
- if (m_CodeSeq < 2) {
- return;
- }
- EndCode = StartCode = m_CodePoints[0];
- StartCID = (FX_WORD)m_CodePoints[1];
- } else {
- if (m_CodeSeq < 3) {
- return;
- }
- StartCode = m_CodePoints[0];
- EndCode = m_CodePoints[1];
- StartCID = (FX_WORD)m_CodePoints[2];
- }
- if (EndCode < 0x10000) {
- for (FX_DWORD code = StartCode; code <= EndCode; code ++) {
- m_pCMap->m_pMapping[code] = (FX_WORD)(StartCID + code - StartCode);
- }
- } else {
- FX_DWORD buf[2];
- buf[0] = StartCode;
- buf[1] = ((EndCode - StartCode) << 16) + StartCID;
- m_AddMaps.AppendBlock(buf, sizeof buf);
- }
- m_CodeSeq = 0;
- } else if (m_Status == 3) {
- CMap_GetString(word);
- m_Status = 0;
- } else if (m_Status == 4) {
- m_pCMap->m_Charset = _CharsetFromOrdering(CMap_GetString(word));
- m_Status = 0;
- } else if (m_Status == 5) {
- CMap_GetCode(word);
- m_Status = 0;
- } else if (m_Status == 6) {
- m_pCMap->m_bVertical = CMap_GetCode(word);
- m_Status = 0;
- } else if (m_Status == 7) {
- if (word == FX_BSTRC("endcodespacerange")) {
- int nSegs = m_CodeRanges.GetSize();
- if (nSegs > 1) {
- m_pCMap->m_CodingScheme = CPDF_CMap::MixedFourBytes;
- m_pCMap->m_nCodeRanges = nSegs;
- m_pCMap->m_pLeadingBytes = FX_Alloc2D(uint8_t, nSegs, sizeof(_CMap_CodeRange));
- FXSYS_memcpy(m_pCMap->m_pLeadingBytes, m_CodeRanges.GetData(), nSegs * sizeof(_CMap_CodeRange));
- } else if (nSegs == 1) {
- m_pCMap->m_CodingScheme = (m_CodeRanges[0].m_CharSize == 2) ? CPDF_CMap::TwoBytes : CPDF_CMap::OneByte;
- }
- m_Status = 0;
- } else {
- if (word.GetLength() == 0 || word.GetAt(0) != '<') {
- return;
- }
- if (m_CodeSeq % 2) {
- _CMap_CodeRange range;
- if (_CMap_GetCodeRange(range, m_LastWord, word)) {
- m_CodeRanges.Add(range);
- }
- }
- m_CodeSeq ++;
+ m_CodeSeq = 0;
+ } else if (m_Status == 3) {
+ CMap_GetString(word);
+ m_Status = 0;
+ } else if (m_Status == 4) {
+ m_pCMap->m_Charset = _CharsetFromOrdering(CMap_GetString(word));
+ m_Status = 0;
+ } else if (m_Status == 5) {
+ CMap_GetCode(word);
+ m_Status = 0;
+ } else if (m_Status == 6) {
+ m_pCMap->m_bVertical = CMap_GetCode(word);
+ m_Status = 0;
+ } else if (m_Status == 7) {
+ if (word == FX_BSTRC("endcodespacerange")) {
+ int nSegs = m_CodeRanges.GetSize();
+ if (nSegs > 1) {
+ m_pCMap->m_CodingScheme = CPDF_CMap::MixedFourBytes;
+ m_pCMap->m_nCodeRanges = nSegs;
+ m_pCMap->m_pLeadingBytes =
+ FX_Alloc2D(uint8_t, nSegs, sizeof(_CMap_CodeRange));
+ FXSYS_memcpy(m_pCMap->m_pLeadingBytes, m_CodeRanges.GetData(),
+ nSegs * sizeof(_CMap_CodeRange));
+ } else if (nSegs == 1) {
+ m_pCMap->m_CodingScheme = (m_CodeRanges[0].m_CharSize == 2)
+ ? CPDF_CMap::TwoBytes
+ : CPDF_CMap::OneByte;
+ }
+ m_Status = 0;
+ } else {
+ if (word.GetLength() == 0 || word.GetAt(0) != '<') {
+ return;
+ }
+ if (m_CodeSeq % 2) {
+ _CMap_CodeRange range;
+ if (_CMap_GetCodeRange(range, m_LastWord, word)) {
+ m_CodeRanges.Add(range);
}
+ }
+ m_CodeSeq++;
}
- m_LastWord = word;
+ }
+ m_LastWord = word;
}
-CPDF_CMap::CPDF_CMap()
-{
- m_Charset = CIDSET_UNKNOWN;
- m_Coding = CIDCODING_UNKNOWN;
- m_CodingScheme = TwoBytes;
- m_bVertical = 0;
- m_bLoaded = FALSE;
- m_pMapping = NULL;
- m_pLeadingBytes = NULL;
- m_pAddMapping = NULL;
- m_pEmbedMap = NULL;
- m_pUseMap = NULL;
- m_nCodeRanges = 0;
+CPDF_CMap::CPDF_CMap() {
+ m_Charset = CIDSET_UNKNOWN;
+ m_Coding = CIDCODING_UNKNOWN;
+ m_CodingScheme = TwoBytes;
+ m_bVertical = 0;
+ m_bLoaded = FALSE;
+ m_pMapping = NULL;
+ m_pLeadingBytes = NULL;
+ m_pAddMapping = NULL;
+ m_pEmbedMap = NULL;
+ m_pUseMap = NULL;
+ m_nCodeRanges = 0;
}
-CPDF_CMap::~CPDF_CMap()
-{
- if (m_pMapping) {
- FX_Free(m_pMapping);
- }
- if (m_pAddMapping) {
- FX_Free(m_pAddMapping);
- }
- if (m_pLeadingBytes) {
- FX_Free(m_pLeadingBytes);
- }
- delete m_pUseMap;
+CPDF_CMap::~CPDF_CMap() {
+ if (m_pMapping) {
+ FX_Free(m_pMapping);
+ }
+ if (m_pAddMapping) {
+ FX_Free(m_pAddMapping);
+ }
+ if (m_pLeadingBytes) {
+ FX_Free(m_pLeadingBytes);
+ }
+ delete m_pUseMap;
}
-void CPDF_CMap::Release()
-{
- if (m_PredefinedCMap.IsEmpty()) {
- delete this;
- }
+void CPDF_CMap::Release() {
+ if (m_PredefinedCMap.IsEmpty()) {
+ delete this;
+ }
}
const CPDF_PredefinedCMap g_PredefinedCMaps[] = {
- { "GB-EUC", CIDSET_GB1, CIDCODING_GB, CPDF_CMap::MixedTwoBytes, 1, {0xa1, 0xfe} },
- { "GBpc-EUC", CIDSET_GB1, CIDCODING_GB, CPDF_CMap::MixedTwoBytes, 1, {0xa1, 0xfc} },
- { "GBK-EUC", CIDSET_GB1, CIDCODING_GB, CPDF_CMap::MixedTwoBytes, 1, {0x81, 0xfe} },
- { "GBKp-EUC", CIDSET_GB1, CIDCODING_GB, CPDF_CMap::MixedTwoBytes, 1, {0x81, 0xfe} },
- { "GBK2K-EUC", CIDSET_GB1, CIDCODING_GB, CPDF_CMap::MixedTwoBytes, 1, {0x81, 0xfe} },
- { "GBK2K", CIDSET_GB1, CIDCODING_GB, CPDF_CMap::MixedTwoBytes, 1, {0x81, 0xfe} },
- { "UniGB-UCS2", CIDSET_GB1, CIDCODING_UCS2, CPDF_CMap::TwoBytes },
- { "UniGB-UTF16", CIDSET_GB1, CIDCODING_UTF16, CPDF_CMap::TwoBytes },
- { "B5pc", CIDSET_CNS1, CIDCODING_BIG5, CPDF_CMap::MixedTwoBytes, 1, {0xa1, 0xfc} },
- { "HKscs-B5", CIDSET_CNS1, CIDCODING_BIG5, CPDF_CMap::MixedTwoBytes, 1, {0x88, 0xfe} },
- { "ETen-B5", CIDSET_CNS1, CIDCODING_BIG5, CPDF_CMap::MixedTwoBytes, 1, {0xa1, 0xfe} },
- { "ETenms-B5", CIDSET_CNS1, CIDCODING_BIG5, CPDF_CMap::MixedTwoBytes, 1, {0xa1, 0xfe} },
- { "UniCNS-UCS2", CIDSET_CNS1, CIDCODING_UCS2, CPDF_CMap::TwoBytes },
- { "UniCNS-UTF16", CIDSET_CNS1, CIDCODING_UTF16, CPDF_CMap::TwoBytes },
- { "83pv-RKSJ", CIDSET_JAPAN1, CIDCODING_JIS, CPDF_CMap::MixedTwoBytes, 2, {0x81, 0x9f, 0xe0, 0xfc} },
- { "90ms-RKSJ", CIDSET_JAPAN1, CIDCODING_JIS, CPDF_CMap::MixedTwoBytes, 2, {0x81, 0x9f, 0xe0, 0xfc} },
- { "90msp-RKSJ", CIDSET_JAPAN1, CIDCODING_JIS, CPDF_CMap::MixedTwoBytes, 2, {0x81, 0x9f, 0xe0, 0xfc} },
- { "90pv-RKSJ", CIDSET_JAPAN1, CIDCODING_JIS, CPDF_CMap::MixedTwoBytes, 2, {0x81, 0x9f, 0xe0, 0xfc} },
- { "Add-RKSJ", CIDSET_JAPAN1, CIDCODING_JIS, CPDF_CMap::MixedTwoBytes, 2, {0x81, 0x9f, 0xe0, 0xfc} },
- { "EUC", CIDSET_JAPAN1, CIDCODING_JIS, CPDF_CMap::MixedTwoBytes, 2, {0x8e, 0x8e, 0xa1, 0xfe} },
- { "H", CIDSET_JAPAN1, CIDCODING_JIS, CPDF_CMap::TwoBytes, 1, {0x21, 0x7e} },
- { "V", CIDSET_JAPAN1, CIDCODING_JIS, CPDF_CMap::TwoBytes, 1, {0x21, 0x7e} },
- { "Ext-RKSJ", CIDSET_JAPAN1, CIDCODING_JIS, CPDF_CMap::MixedTwoBytes, 2, {0x81, 0x9f, 0xe0, 0xfc} },
- { "UniJIS-UCS2", CIDSET_JAPAN1, CIDCODING_UCS2, CPDF_CMap::TwoBytes },
- { "UniJIS-UCS2-HW", CIDSET_JAPAN1, CIDCODING_UCS2, CPDF_CMap::TwoBytes },
- { "UniJIS-UTF16", CIDSET_JAPAN1, CIDCODING_UTF16, CPDF_CMap::TwoBytes },
- { "KSC-EUC", CIDSET_KOREA1, CIDCODING_KOREA, CPDF_CMap::MixedTwoBytes, 1, {0xa1, 0xfe} },
- { "KSCms-UHC", CIDSET_KOREA1, CIDCODING_KOREA, CPDF_CMap::MixedTwoBytes, 1, {0x81, 0xfe} },
- { "KSCms-UHC-HW", CIDSET_KOREA1, CIDCODING_KOREA, CPDF_CMap::MixedTwoBytes, 1, {0x81, 0xfe} },
- { "KSCpc-EUC", CIDSET_KOREA1, CIDCODING_KOREA, CPDF_CMap::MixedTwoBytes, 1, {0xa1, 0xfd} },
- { "UniKS-UCS2", CIDSET_KOREA1, CIDCODING_UCS2, CPDF_CMap::TwoBytes },
- { "UniKS-UTF16", CIDSET_KOREA1, CIDCODING_UTF16, CPDF_CMap::TwoBytes },
- { NULL, 0, 0 }
-};
-extern void FPDFAPI_FindEmbeddedCMap(const char* name, int charset, int coding, const FXCMAP_CMap*& pMap);
-extern FX_WORD FPDFAPI_CIDFromCharCode(const FXCMAP_CMap* pMap, FX_DWORD charcode);
-FX_BOOL CPDF_CMap::LoadPredefined(CPDF_CMapManager* pMgr, const FX_CHAR* pName, FX_BOOL bPromptCJK)
-{
- m_PredefinedCMap = pName;
- if (m_PredefinedCMap == FX_BSTRC("Identity-H") || m_PredefinedCMap == FX_BSTRC("Identity-V")) {
- m_Coding = CIDCODING_CID;
- m_bVertical = pName[9] == 'V';
- m_bLoaded = TRUE;
- return TRUE;
- }
- CFX_ByteString cmapid = m_PredefinedCMap;
- m_bVertical = cmapid.Right(1) == FX_BSTRC("V");
- if (cmapid.GetLength() > 2) {
- cmapid = cmapid.Left(cmapid.GetLength() - 2);
- }
- int index = 0;
- while (1) {
- if (g_PredefinedCMaps[index].m_pName == NULL) {
- return FALSE;
- }
- if (cmapid == CFX_ByteStringC(g_PredefinedCMaps[index].m_pName)) {
- break;
- }
- index ++;
- }
- const CPDF_PredefinedCMap& map = g_PredefinedCMaps[index];
- m_Charset = map.m_Charset;
- m_Coding = map.m_Coding;
- m_CodingScheme = map.m_CodingScheme;
- if (m_CodingScheme == MixedTwoBytes) {
- m_pLeadingBytes = FX_Alloc(uint8_t, 256);
- for (FX_DWORD i = 0; i < map.m_LeadingSegCount; i ++) {
- for (int b = map.m_LeadingSegs[i * 2]; b <= map.m_LeadingSegs[i * 2 + 1]; b ++) {
- m_pLeadingBytes[b] = 1;
- }
- }
- }
- FPDFAPI_FindEmbeddedCMap(pName, m_Charset, m_Coding, m_pEmbedMap);
- if (m_pEmbedMap) {
- m_bLoaded = TRUE;
- return TRUE;
- }
- return FALSE;
+ {"GB-EUC",
+ CIDSET_GB1,
+ CIDCODING_GB,
+ CPDF_CMap::MixedTwoBytes,
+ 1,
+ {0xa1, 0xfe}},
+ {"GBpc-EUC",
+ CIDSET_GB1,
+ CIDCODING_GB,
+ CPDF_CMap::MixedTwoBytes,
+ 1,
+ {0xa1, 0xfc}},
+ {"GBK-EUC",
+ CIDSET_GB1,
+ CIDCODING_GB,
+ CPDF_CMap::MixedTwoBytes,
+ 1,
+ {0x81, 0xfe}},
+ {"GBKp-EUC",
+ CIDSET_GB1,
+ CIDCODING_GB,
+ CPDF_CMap::MixedTwoBytes,
+ 1,
+ {0x81, 0xfe}},
+ {"GBK2K-EUC",
+ CIDSET_GB1,
+ CIDCODING_GB,
+ CPDF_CMap::MixedTwoBytes,
+ 1,
+ {0x81, 0xfe}},
+ {"GBK2K",
+ CIDSET_GB1,
+ CIDCODING_GB,
+ CPDF_CMap::MixedTwoBytes,
+ 1,
+ {0x81, 0xfe}},
+ {"UniGB-UCS2", CIDSET_GB1, CIDCODING_UCS2, CPDF_CMap::TwoBytes},
+ {"UniGB-UTF16", CIDSET_GB1, CIDCODING_UTF16, CPDF_CMap::TwoBytes},
+ {"B5pc",
+ CIDSET_CNS1,
+ CIDCODING_BIG5,
+ CPDF_CMap::MixedTwoBytes,
+ 1,
+ {0xa1, 0xfc}},
+ {"HKscs-B5",
+ CIDSET_CNS1,
+ CIDCODING_BIG5,
+ CPDF_CMap::MixedTwoBytes,
+ 1,
+ {0x88, 0xfe}},
+ {"ETen-B5",
+ CIDSET_CNS1,
+ CIDCODING_BIG5,
+ CPDF_CMap::MixedTwoBytes,
+ 1,
+ {0xa1, 0xfe}},
+ {"ETenms-B5",
+ CIDSET_CNS1,
+ CIDCODING_BIG5,
+ CPDF_CMap::MixedTwoBytes,
+ 1,
+ {0xa1, 0xfe}},
+ {"UniCNS-UCS2", CIDSET_CNS1, CIDCODING_UCS2, CPDF_CMap::TwoBytes},
+ {"UniCNS-UTF16", CIDSET_CNS1, CIDCODING_UTF16, CPDF_CMap::TwoBytes},
+ {"83pv-RKSJ",
+ CIDSET_JAPAN1,
+ CIDCODING_JIS,
+ CPDF_CMap::MixedTwoBytes,
+ 2,
+ {0x81, 0x9f, 0xe0, 0xfc}},
+ {"90ms-RKSJ",
+ CIDSET_JAPAN1,
+ CIDCODING_JIS,
+ CPDF_CMap::MixedTwoBytes,
+ 2,
+ {0x81, 0x9f, 0xe0, 0xfc}},
+ {"90msp-RKSJ",
+ CIDSET_JAPAN1,
+ CIDCODING_JIS,
+ CPDF_CMap::MixedTwoBytes,
+ 2,
+ {0x81, 0x9f, 0xe0, 0xfc}},
+ {"90pv-RKSJ",
+ CIDSET_JAPAN1,
+ CIDCODING_JIS,
+ CPDF_CMap::MixedTwoBytes,
+ 2,
+ {0x81, 0x9f, 0xe0, 0xfc}},
+ {"Add-RKSJ",
+ CIDSET_JAPAN1,
+ CIDCODING_JIS,
+ CPDF_CMap::MixedTwoBytes,
+ 2,
+ {0x81, 0x9f, 0xe0, 0xfc}},
+ {"EUC",
+ CIDSET_JAPAN1,
+ CIDCODING_JIS,
+ CPDF_CMap::MixedTwoBytes,
+ 2,
+ {0x8e, 0x8e, 0xa1, 0xfe}},
+ {"H", CIDSET_JAPAN1, CIDCODING_JIS, CPDF_CMap::TwoBytes, 1, {0x21, 0x7e}},
+ {"V", CIDSET_JAPAN1, CIDCODING_JIS, CPDF_CMap::TwoBytes, 1, {0x21, 0x7e}},
+ {"Ext-RKSJ",
+ CIDSET_JAPAN1,
+ CIDCODING_JIS,
+ CPDF_CMap::MixedTwoBytes,
+ 2,
+ {0x81, 0x9f, 0xe0, 0xfc}},
+ {"UniJIS-UCS2", CIDSET_JAPAN1, CIDCODING_UCS2, CPDF_CMap::TwoBytes},
+ {"UniJIS-UCS2-HW", CIDSET_JAPAN1, CIDCODING_UCS2, CPDF_CMap::TwoBytes},
+ {"UniJIS-UTF16", CIDSET_JAPAN1, CIDCODING_UTF16, CPDF_CMap::TwoBytes},
+ {"KSC-EUC",
+ CIDSET_KOREA1,
+ CIDCODING_KOREA,
+ CPDF_CMap::MixedTwoBytes,
+ 1,
+ {0xa1, 0xfe}},
+ {"KSCms-UHC",
+ CIDSET_KOREA1,
+ CIDCODING_KOREA,
+ CPDF_CMap::MixedTwoBytes,
+ 1,
+ {0x81, 0xfe}},
+ {"KSCms-UHC-HW",
+ CIDSET_KOREA1,
+ CIDCODING_KOREA,
+ CPDF_CMap::MixedTwoBytes,
+ 1,
+ {0x81, 0xfe}},
+ {"KSCpc-EUC",
+ CIDSET_KOREA1,
+ CIDCODING_KOREA,
+ CPDF_CMap::MixedTwoBytes,
+ 1,
+ {0xa1, 0xfd}},
+ {"UniKS-UCS2", CIDSET_KOREA1, CIDCODING_UCS2, CPDF_CMap::TwoBytes},
+ {"UniKS-UTF16", CIDSET_KOREA1, CIDCODING_UTF16, CPDF_CMap::TwoBytes},
+ {NULL, 0, 0}};
+extern void FPDFAPI_FindEmbeddedCMap(const char* name,
+ int charset,
+ int coding,
+ const FXCMAP_CMap*& pMap);
+extern FX_WORD FPDFAPI_CIDFromCharCode(const FXCMAP_CMap* pMap,
+ FX_DWORD charcode);
+FX_BOOL CPDF_CMap::LoadPredefined(CPDF_CMapManager* pMgr,
+ const FX_CHAR* pName,
+ FX_BOOL bPromptCJK) {
+ m_PredefinedCMap = pName;
+ if (m_PredefinedCMap == FX_BSTRC("Identity-H") ||
+ m_PredefinedCMap == FX_BSTRC("Identity-V")) {
+ m_Coding = CIDCODING_CID;
+ m_bVertical = pName[9] == 'V';
+ m_bLoaded = TRUE;
+ return TRUE;
+ }
+ CFX_ByteString cmapid = m_PredefinedCMap;
+ m_bVertical = cmapid.Right(1) == FX_BSTRC("V");
+ if (cmapid.GetLength() > 2) {
+ cmapid = cmapid.Left(cmapid.GetLength() - 2);
+ }
+ int index = 0;
+ while (1) {
+ if (g_PredefinedCMaps[index].m_pName == NULL) {
+ return FALSE;
+ }
+ if (cmapid == CFX_ByteStringC(g_PredefinedCMaps[index].m_pName)) {
+ break;
+ }
+ index++;
+ }
+ const CPDF_PredefinedCMap& map = g_PredefinedCMaps[index];
+ m_Charset = map.m_Charset;
+ m_Coding = map.m_Coding;
+ m_CodingScheme = map.m_CodingScheme;
+ if (m_CodingScheme == MixedTwoBytes) {
+ m_pLeadingBytes = FX_Alloc(uint8_t, 256);
+ for (FX_DWORD i = 0; i < map.m_LeadingSegCount; i++) {
+ for (int b = map.m_LeadingSegs[i * 2]; b <= map.m_LeadingSegs[i * 2 + 1];
+ b++) {
+ m_pLeadingBytes[b] = 1;
+ }
+ }
+ }
+ FPDFAPI_FindEmbeddedCMap(pName, m_Charset, m_Coding, m_pEmbedMap);
+ if (m_pEmbedMap) {
+ m_bLoaded = TRUE;
+ return TRUE;
+ }
+ return FALSE;
}
extern "C" {
- static int compare_dword(const void* data1, const void* data2)
- {
- return (*(FX_DWORD*)data1) - (*(FX_DWORD*)data2);
- }
+static int compare_dword(const void* data1, const void* data2) {
+ return (*(FX_DWORD*)data1) - (*(FX_DWORD*)data2);
+}
};
-FX_BOOL CPDF_CMap::LoadEmbedded(const uint8_t* pData, FX_DWORD size)
-{
- m_pMapping = FX_Alloc(FX_WORD, 65536);
- CPDF_CMapParser parser;
- parser.Initialize(this);
- CPDF_SimpleParser syntax(pData, size);
- while (1) {
- CFX_ByteStringC word = syntax.GetWord();
- if (word.IsEmpty()) {
- break;
- }
- parser.ParseWord(word);
- }
- if (m_CodingScheme == MixedFourBytes && parser.m_AddMaps.GetSize()) {
- m_pAddMapping = FX_Alloc(uint8_t, parser.m_AddMaps.GetSize() + 4);
- *(FX_DWORD*)m_pAddMapping = parser.m_AddMaps.GetSize() / 8;
- FXSYS_memcpy(m_pAddMapping + 4, parser.m_AddMaps.GetBuffer(), parser.m_AddMaps.GetSize());
- FXSYS_qsort(m_pAddMapping + 4, parser.m_AddMaps.GetSize() / 8, 8, compare_dword);
- }
- return TRUE;
+FX_BOOL CPDF_CMap::LoadEmbedded(const uint8_t* pData, FX_DWORD size) {
+ m_pMapping = FX_Alloc(FX_WORD, 65536);
+ CPDF_CMapParser parser;
+ parser.Initialize(this);
+ CPDF_SimpleParser syntax(pData, size);
+ while (1) {
+ CFX_ByteStringC word = syntax.GetWord();
+ if (word.IsEmpty()) {
+ break;
+ }
+ parser.ParseWord(word);
+ }
+ if (m_CodingScheme == MixedFourBytes && parser.m_AddMaps.GetSize()) {
+ m_pAddMapping = FX_Alloc(uint8_t, parser.m_AddMaps.GetSize() + 4);
+ *(FX_DWORD*)m_pAddMapping = parser.m_AddMaps.GetSize() / 8;
+ FXSYS_memcpy(m_pAddMapping + 4, parser.m_AddMaps.GetBuffer(),
+ parser.m_AddMaps.GetSize());
+ FXSYS_qsort(m_pAddMapping + 4, parser.m_AddMaps.GetSize() / 8, 8,
+ compare_dword);
+ }
+ return TRUE;
}
extern "C" {
- static int compareCID(const void* key, const void* element)
- {
- if ((*(FX_DWORD*)key) < (*(FX_DWORD*)element)) {
- return -1;
- }
- if ((*(FX_DWORD*)key) > (*(FX_DWORD*)element) + ((FX_DWORD*)element)[1] / 65536) {
- return 1;
- }
- return 0;
- }
+static int compareCID(const void* key, const void* element) {
+ if ((*(FX_DWORD*)key) < (*(FX_DWORD*)element)) {
+ return -1;
+ }
+ if ((*(FX_DWORD*)key) >
+ (*(FX_DWORD*)element) + ((FX_DWORD*)element)[1] / 65536) {
+ return 1;
+ }
+ return 0;
+}
};
-FX_WORD CPDF_CMap::CIDFromCharCode(FX_DWORD charcode) const
-{
- if (m_Coding == CIDCODING_CID) {
- return (FX_WORD)charcode;
- }
- if (m_pEmbedMap) {
- return FPDFAPI_CIDFromCharCode(m_pEmbedMap, charcode);
- }
- if (m_pMapping == NULL) {
- return (FX_WORD)charcode;
- }
- if (charcode >> 16) {
- if (m_pAddMapping) {
- void* found = FXSYS_bsearch(&charcode, m_pAddMapping + 4, *(FX_DWORD*)m_pAddMapping, 8, compareCID);
- if (found == NULL) {
- if (m_pUseMap) {
- return m_pUseMap->CIDFromCharCode(charcode);
- }
- return 0;
- }
- return (FX_WORD)(((FX_DWORD*)found)[1] % 65536 + charcode - * (FX_DWORD*)found);
- }
+FX_WORD CPDF_CMap::CIDFromCharCode(FX_DWORD charcode) const {
+ if (m_Coding == CIDCODING_CID) {
+ return (FX_WORD)charcode;
+ }
+ if (m_pEmbedMap) {
+ return FPDFAPI_CIDFromCharCode(m_pEmbedMap, charcode);
+ }
+ if (m_pMapping == NULL) {
+ return (FX_WORD)charcode;
+ }
+ if (charcode >> 16) {
+ if (m_pAddMapping) {
+ void* found = FXSYS_bsearch(&charcode, m_pAddMapping + 4,
+ *(FX_DWORD*)m_pAddMapping, 8, compareCID);
+ if (found == NULL) {
if (m_pUseMap) {
- return m_pUseMap->CIDFromCharCode(charcode);
+ return m_pUseMap->CIDFromCharCode(charcode);
}
return 0;
+ }
+ return (FX_WORD)(((FX_DWORD*)found)[1] % 65536 + charcode -
+ *(FX_DWORD*)found);
}
- FX_DWORD CID = m_pMapping[charcode];
- if (!CID && m_pUseMap) {
- return m_pUseMap->CIDFromCharCode(charcode);
+ if (m_pUseMap) {
+ return m_pUseMap->CIDFromCharCode(charcode);
}
- return (FX_WORD)CID;
+ return 0;
+ }
+ FX_DWORD CID = m_pMapping[charcode];
+ if (!CID && m_pUseMap) {
+ return m_pUseMap->CIDFromCharCode(charcode);
+ }
+ return (FX_WORD)CID;
}
-static int _CheckCodeRange(uint8_t* codes, int size, _CMap_CodeRange* pRanges, int nRanges)
-{
- int iSeg = nRanges - 1;
- while (iSeg >= 0) {
- if (pRanges[iSeg].m_CharSize < size) {
- iSeg --;
- continue;
- }
- int iChar = 0;
- while (iChar < size) {
- if (codes[iChar] < pRanges[iSeg].m_Lower[iChar] ||
- codes[iChar] > pRanges[iSeg].m_Upper[iChar]) {
- break;
- }
- iChar ++;
+static int _CheckCodeRange(uint8_t* codes,
+ int size,
+ _CMap_CodeRange* pRanges,
+ int nRanges) {
+ int iSeg = nRanges - 1;
+ while (iSeg >= 0) {
+ if (pRanges[iSeg].m_CharSize < size) {
+ iSeg--;
+ continue;
+ }
+ int iChar = 0;
+ while (iChar < size) {
+ if (codes[iChar] < pRanges[iSeg].m_Lower[iChar] ||
+ codes[iChar] > pRanges[iSeg].m_Upper[iChar]) {
+ break;
+ }
+ iChar++;
+ }
+ if (iChar == pRanges[iSeg].m_CharSize) {
+ return 2;
+ }
+ if (iChar) {
+ if (size == pRanges[iSeg].m_CharSize) {
+ return 2;
+ }
+ return 1;
+ }
+ iSeg--;
+ }
+ return 0;
+}
+FX_DWORD CPDF_CMap::GetNextChar(const FX_CHAR* pString,
+ int nStrLen,
+ int& offset) const {
+ switch (m_CodingScheme) {
+ case OneByte:
+ return ((uint8_t*)pString)[offset++];
+ case TwoBytes:
+ offset += 2;
+ return ((uint8_t*)pString)[offset - 2] * 256 +
+ ((uint8_t*)pString)[offset - 1];
+ case MixedTwoBytes: {
+ uint8_t byte1 = ((uint8_t*)pString)[offset++];
+ if (!m_pLeadingBytes[byte1]) {
+ return byte1;
+ }
+ uint8_t byte2 = ((uint8_t*)pString)[offset++];
+ return byte1 * 256 + byte2;
+ }
+ case MixedFourBytes: {
+ uint8_t codes[4];
+ int char_size = 1;
+ codes[0] = ((uint8_t*)pString)[offset++];
+ _CMap_CodeRange* pRanges = (_CMap_CodeRange*)m_pLeadingBytes;
+ while (1) {
+ int ret = _CheckCodeRange(codes, char_size, pRanges, m_nCodeRanges);
+ if (ret == 0) {
+ return 0;
}
- if (iChar == pRanges[iSeg].m_CharSize) {
- return 2;
+ if (ret == 2) {
+ FX_DWORD charcode = 0;
+ for (int i = 0; i < char_size; i++) {
+ charcode = (charcode << 8) + codes[i];
+ }
+ return charcode;
}
- if (iChar) {
- if (size == pRanges[iSeg].m_CharSize) {
- return 2;
- }
- return 1;
+ if (char_size == 4 || offset == nStrLen) {
+ return 0;
}
- iSeg --;
+ codes[char_size++] = ((uint8_t*)pString)[offset++];
+ }
+ break;
}
- return 0;
-}
-FX_DWORD CPDF_CMap::GetNextChar(const FX_CHAR* pString, int nStrLen, int& offset) const
-{
- switch (m_CodingScheme) {
- case OneByte:
- return ((uint8_t*)pString)[offset++];
- case TwoBytes:
- offset += 2;
- return ((uint8_t*)pString)[offset - 2] * 256 + ((uint8_t*)pString)[offset - 1];
- case MixedTwoBytes: {
- uint8_t byte1 = ((uint8_t*)pString)[offset++];
- if (!m_pLeadingBytes[byte1]) {
- return byte1;
- }
- uint8_t byte2 = ((uint8_t*)pString)[offset++];
- return byte1 * 256 + byte2;
- }
- case MixedFourBytes: {
- uint8_t codes[4];
- int char_size = 1;
- codes[0] = ((uint8_t*)pString)[offset++];
- _CMap_CodeRange* pRanges = (_CMap_CodeRange*)m_pLeadingBytes;
- while (1) {
- int ret = _CheckCodeRange(codes, char_size, pRanges, m_nCodeRanges);
- if (ret == 0) {
- return 0;
- }
- if (ret == 2) {
- FX_DWORD charcode = 0;
- for (int i = 0; i < char_size; i ++) {
- charcode = (charcode << 8) + codes[i];
- }
- return charcode;
- }
- if (char_size == 4 || offset == nStrLen) {
- return 0;
- }
- codes[char_size ++] = ((uint8_t*)pString)[offset++];
- }
- break;
- }
- }
- return 0;
-}
-int CPDF_CMap::GetCharSize(FX_DWORD charcode) const
-{
- switch (m_CodingScheme) {
- case OneByte:
- return 1;
- case TwoBytes:
- return 2;
- case MixedTwoBytes:
- case MixedFourBytes:
- if (charcode < 0x100) {
- return 1;
- }
- if (charcode < 0x10000) {
- return 2;
- }
- if (charcode < 0x1000000) {
- return 3;
- }
- return 4;
- }
- return 1;
-}
-int CPDF_CMap::CountChar(const FX_CHAR* pString, int size) const
-{
- switch (m_CodingScheme) {
- case OneByte:
- return size;
- case TwoBytes:
- return (size + 1) / 2;
- case MixedTwoBytes: {
- int count = 0;
- for (int i = 0; i < size; i ++) {
- count ++;
- if (m_pLeadingBytes[((uint8_t*)pString)[i]]) {
- i ++;
- }
- }
- return count;
- }
- case MixedFourBytes: {
- int count = 0, offset = 0;
- while (offset < size) {
- GetNextChar(pString, size, offset);
- count ++;
- }
- return count;
- }
- }
- return size;
+ }
+ return 0;
}
-int _GetCharSize(FX_DWORD charcode, _CMap_CodeRange* pRanges, int iRangesSize)
-{
- if (!iRangesSize) {
+int CPDF_CMap::GetCharSize(FX_DWORD charcode) const {
+ switch (m_CodingScheme) {
+ case OneByte:
+ return 1;
+ case TwoBytes:
+ return 2;
+ case MixedTwoBytes:
+ case MixedFourBytes:
+ if (charcode < 0x100) {
return 1;
- }
- uint8_t codes[4];
- codes[0] = codes[1] = 0x00;
- codes[2] = (uint8_t)(charcode >> 8 & 0xFF);
- codes[3] = (uint8_t)charcode;
- int offset = 0, size = 4;
- for (int i = 0; i < 4; ++i) {
- int iSeg = iRangesSize - 1;
- while (iSeg >= 0) {
- if (pRanges[iSeg].m_CharSize < size) {
- iSeg --;
- continue;
- }
- int iChar = 0;
- while (iChar < size) {
- if (codes[offset + iChar] < pRanges[iSeg].m_Lower[iChar] ||
- codes[offset + iChar] > pRanges[iSeg].m_Upper[iChar]) {
- break;
- }
- iChar ++;
- }
- if (iChar == pRanges[iSeg].m_CharSize) {
- return size;
- }
- iSeg --;
+ }
+ if (charcode < 0x10000) {
+ return 2;
+ }
+ if (charcode < 0x1000000) {
+ return 3;
+ }
+ return 4;
+ }
+ return 1;
+}
+int CPDF_CMap::CountChar(const FX_CHAR* pString, int size) const {
+ switch (m_CodingScheme) {
+ case OneByte:
+ return size;
+ case TwoBytes:
+ return (size + 1) / 2;
+ case MixedTwoBytes: {
+ int count = 0;
+ for (int i = 0; i < size; i++) {
+ count++;
+ if (m_pLeadingBytes[((uint8_t*)pString)[i]]) {
+ i++;
}
- size --;
- offset ++;
- }
- return 1;
+ }
+ return count;
+ }
+ case MixedFourBytes: {
+ int count = 0, offset = 0;
+ while (offset < size) {
+ GetNextChar(pString, size, offset);
+ count++;
+ }
+ return count;
+ }
+ }
+ return size;
}
-int CPDF_CMap::AppendChar(FX_CHAR* str, FX_DWORD charcode) const
-{
- switch (m_CodingScheme) {
- case OneByte:
- str[0] = (uint8_t)charcode;
- return 1;
- case TwoBytes:
- str[0] = (uint8_t)(charcode / 256);
- str[1] = (uint8_t)(charcode % 256);
- return 2;
- case MixedTwoBytes:
- case MixedFourBytes:
- if (charcode < 0x100) {
- _CMap_CodeRange* pRanges = (_CMap_CodeRange*)m_pLeadingBytes;
- int iSize = _GetCharSize(charcode, pRanges, m_nCodeRanges);
- if (iSize == 0) {
- iSize = 1;
- }
- if (iSize > 1) {
- FXSYS_memset(str, 0, sizeof(uint8_t) * iSize);
- }
- str[iSize - 1] = (uint8_t)charcode;
- return iSize;
- }
- if (charcode < 0x10000) {
- str[0] = (uint8_t)(charcode >> 8);
- str[1] = (uint8_t)charcode;
- return 2;
- }
- if (charcode < 0x1000000) {
- str[0] = (uint8_t)(charcode >> 16);
- str[1] = (uint8_t)(charcode >> 8);
- str[2] = (uint8_t)charcode;
- return 3;
- }
- str[0] = (uint8_t)(charcode >> 24);
- str[1] = (uint8_t)(charcode >> 16);
- str[2] = (uint8_t)(charcode >> 8);
- str[3] = (uint8_t)charcode;
- return 4;
- }
- return 0;
+int _GetCharSize(FX_DWORD charcode, _CMap_CodeRange* pRanges, int iRangesSize) {
+ if (!iRangesSize) {
+ return 1;
+ }
+ uint8_t codes[4];
+ codes[0] = codes[1] = 0x00;
+ codes[2] = (uint8_t)(charcode >> 8 & 0xFF);
+ codes[3] = (uint8_t)charcode;
+ int offset = 0, size = 4;
+ for (int i = 0; i < 4; ++i) {
+ int iSeg = iRangesSize - 1;
+ while (iSeg >= 0) {
+ if (pRanges[iSeg].m_CharSize < size) {
+ iSeg--;
+ continue;
+ }
+ int iChar = 0;
+ while (iChar < size) {
+ if (codes[offset + iChar] < pRanges[iSeg].m_Lower[iChar] ||
+ codes[offset + iChar] > pRanges[iSeg].m_Upper[iChar]) {
+ break;
+ }
+ iChar++;
+ }
+ if (iChar == pRanges[iSeg].m_CharSize) {
+ return size;
+ }
+ iSeg--;
+ }
+ size--;
+ offset++;
+ }
+ return 1;
}
-CPDF_CID2UnicodeMap::CPDF_CID2UnicodeMap()
-{
- m_EmbeddedCount = 0;
+int CPDF_CMap::AppendChar(FX_CHAR* str, FX_DWORD charcode) const {
+ switch (m_CodingScheme) {
+ case OneByte:
+ str[0] = (uint8_t)charcode;
+ return 1;
+ case TwoBytes:
+ str[0] = (uint8_t)(charcode / 256);
+ str[1] = (uint8_t)(charcode % 256);
+ return 2;
+ case MixedTwoBytes:
+ case MixedFourBytes:
+ if (charcode < 0x100) {
+ _CMap_CodeRange* pRanges = (_CMap_CodeRange*)m_pLeadingBytes;
+ int iSize = _GetCharSize(charcode, pRanges, m_nCodeRanges);
+ if (iSize == 0) {
+ iSize = 1;
+ }
+ if (iSize > 1) {
+ FXSYS_memset(str, 0, sizeof(uint8_t) * iSize);
+ }
+ str[iSize - 1] = (uint8_t)charcode;
+ return iSize;
+ }
+ if (charcode < 0x10000) {
+ str[0] = (uint8_t)(charcode >> 8);
+ str[1] = (uint8_t)charcode;
+ return 2;
+ }
+ if (charcode < 0x1000000) {
+ str[0] = (uint8_t)(charcode >> 16);
+ str[1] = (uint8_t)(charcode >> 8);
+ str[2] = (uint8_t)charcode;
+ return 3;
+ }
+ str[0] = (uint8_t)(charcode >> 24);
+ str[1] = (uint8_t)(charcode >> 16);
+ str[2] = (uint8_t)(charcode >> 8);
+ str[3] = (uint8_t)charcode;
+ return 4;
+ }
+ return 0;
}
-CPDF_CID2UnicodeMap::~CPDF_CID2UnicodeMap()
-{
+CPDF_CID2UnicodeMap::CPDF_CID2UnicodeMap() {
+ m_EmbeddedCount = 0;
}
-FX_BOOL CPDF_CID2UnicodeMap::Initialize()
-{
- return TRUE;
+CPDF_CID2UnicodeMap::~CPDF_CID2UnicodeMap() {}
+FX_BOOL CPDF_CID2UnicodeMap::Initialize() {
+ return TRUE;
}
-FX_BOOL CPDF_CID2UnicodeMap::IsLoaded()
-{
- return m_EmbeddedCount != 0;
+FX_BOOL CPDF_CID2UnicodeMap::IsLoaded() {
+ return m_EmbeddedCount != 0;
}
-FX_WCHAR CPDF_CID2UnicodeMap::UnicodeFromCID(FX_WORD CID)
-{
- if (m_Charset == CIDSET_UNICODE) {
- return CID;
- }
- if (CID < m_EmbeddedCount) {
- return m_pEmbeddedMap[CID];
- }
- return 0;
+FX_WCHAR CPDF_CID2UnicodeMap::UnicodeFromCID(FX_WORD CID) {
+ if (m_Charset == CIDSET_UNICODE) {
+ return CID;
+ }
+ if (CID < m_EmbeddedCount) {
+ return m_pEmbeddedMap[CID];
+ }
+ return 0;
}
-void FPDFAPI_LoadCID2UnicodeMap(int charset, const FX_WORD*& pMap, FX_DWORD& count);
-void CPDF_CID2UnicodeMap::Load(CPDF_CMapManager* pMgr, int charset, FX_BOOL bPromptCJK)
-{
- m_Charset = charset;
- FPDFAPI_LoadCID2UnicodeMap(charset, m_pEmbeddedMap, m_EmbeddedCount);
+void FPDFAPI_LoadCID2UnicodeMap(int charset,
+ const FX_WORD*& pMap,
+ FX_DWORD& count);
+void CPDF_CID2UnicodeMap::Load(CPDF_CMapManager* pMgr,
+ int charset,
+ FX_BOOL bPromptCJK) {
+ m_Charset = charset;
+ FPDFAPI_LoadCID2UnicodeMap(charset, m_pEmbeddedMap, m_EmbeddedCount);
}
#include "ttgsubtable.h"
-CPDF_CIDFont::CPDF_CIDFont() : CPDF_Font(PDFFONT_CIDFONT)
-{
- m_pCMap = NULL;
- m_pAllocatedCMap = NULL;
- m_pCID2UnicodeMap = NULL;
- m_pAnsiWidths = NULL;
- m_pCIDToGIDMap = NULL;
- m_bCIDIsGID = FALSE;
- m_bAdobeCourierStd = FALSE;
- m_pTTGSUBTable = NULL;
- FXSYS_memset(m_CharBBox, 0xff, 256 * sizeof(FX_SMALL_RECT));
+CPDF_CIDFont::CPDF_CIDFont() : CPDF_Font(PDFFONT_CIDFONT) {
+ m_pCMap = NULL;
+ m_pAllocatedCMap = NULL;
+ m_pCID2UnicodeMap = NULL;
+ m_pAnsiWidths = NULL;
+ m_pCIDToGIDMap = NULL;
+ m_bCIDIsGID = FALSE;
+ m_bAdobeCourierStd = FALSE;
+ m_pTTGSUBTable = NULL;
+ FXSYS_memset(m_CharBBox, 0xff, 256 * sizeof(FX_SMALL_RECT));
}
-CPDF_CIDFont::~CPDF_CIDFont()
-{
- if (m_pAnsiWidths) {
- FX_Free(m_pAnsiWidths);
- }
- delete m_pAllocatedCMap;
- delete m_pCIDToGIDMap;
- delete m_pTTGSUBTable;
+CPDF_CIDFont::~CPDF_CIDFont() {
+ if (m_pAnsiWidths) {
+ FX_Free(m_pAnsiWidths);
+ }
+ delete m_pAllocatedCMap;
+ delete m_pCIDToGIDMap;
+ delete m_pTTGSUBTable;
}
-FX_WORD CPDF_CIDFont::CIDFromCharCode(FX_DWORD charcode) const
-{
- if (m_pCMap == NULL) {
- return (FX_WORD)charcode;
- }
- return m_pCMap->CIDFromCharCode(charcode);
+FX_WORD CPDF_CIDFont::CIDFromCharCode(FX_DWORD charcode) const {
+ if (m_pCMap == NULL) {
+ return (FX_WORD)charcode;
+ }
+ return m_pCMap->CIDFromCharCode(charcode);
}
-FX_BOOL CPDF_CIDFont::IsVertWriting() const
-{
- return m_pCMap ? m_pCMap->IsVertWriting() : FALSE;
+FX_BOOL CPDF_CIDFont::IsVertWriting() const {
+ return m_pCMap ? m_pCMap->IsVertWriting() : FALSE;
}
extern FX_DWORD FPDFAPI_CharCodeFromCID(const FXCMAP_CMap* pMap, FX_WORD cid);
-static FX_DWORD _EmbeddedCharcodeFromUnicode(const FXCMAP_CMap* pEmbedMap, int charset, FX_WCHAR unicode)
-{
- if (charset <= 0 || charset > 4) {
- return 0;
- }
- CPDF_FontGlobals* pFontGlobals = CPDF_ModuleMgr::Get()->GetPageModule()->GetFontGlobals();
- const FX_WORD* pCodes = pFontGlobals->m_EmbeddedToUnicodes[charset].m_pMap;
- if (pCodes == NULL) {
- return 0;
- }
- int nCodes = pFontGlobals->m_EmbeddedToUnicodes[charset].m_Count;
- for (int i = 0; i < nCodes; i++) {
- if (pCodes[i] == unicode) {
- FX_DWORD CharCode = FPDFAPI_CharCodeFromCID(pEmbedMap, i);
- if (CharCode == 0) {
- continue;
- }
- return CharCode;
- }
- }
+static FX_DWORD _EmbeddedCharcodeFromUnicode(const FXCMAP_CMap* pEmbedMap,
+ int charset,
+ FX_WCHAR unicode) {
+ if (charset <= 0 || charset > 4) {
return 0;
+ }
+ CPDF_FontGlobals* pFontGlobals =
+ CPDF_ModuleMgr::Get()->GetPageModule()->GetFontGlobals();
+ const FX_WORD* pCodes = pFontGlobals->m_EmbeddedToUnicodes[charset].m_pMap;
+ if (pCodes == NULL) {
+ return 0;
+ }
+ int nCodes = pFontGlobals->m_EmbeddedToUnicodes[charset].m_Count;
+ for (int i = 0; i < nCodes; i++) {
+ if (pCodes[i] == unicode) {
+ FX_DWORD CharCode = FPDFAPI_CharCodeFromCID(pEmbedMap, i);
+ if (CharCode == 0) {
+ continue;
+ }
+ return CharCode;
+ }
+ }
+ return 0;
}
-static FX_WCHAR _EmbeddedUnicodeFromCharcode(const FXCMAP_CMap* pEmbedMap, int charset, FX_DWORD charcode)
-{
- if (charset <= 0 || charset > 4) {
- return 0;
- }
- FX_WORD cid = FPDFAPI_CIDFromCharCode(pEmbedMap, charcode);
- if (cid == 0) {
- return 0;
- }
- CPDF_FontGlobals* pFontGlobals = CPDF_ModuleMgr::Get()->GetPageModule()->GetFontGlobals();
- const FX_WORD* pCodes = pFontGlobals->m_EmbeddedToUnicodes[charset].m_pMap;
- if (pCodes == NULL) {
- return 0;
- }
- if (cid < pFontGlobals->m_EmbeddedToUnicodes[charset].m_Count) {
- return pCodes[cid];
- }
+static FX_WCHAR _EmbeddedUnicodeFromCharcode(const FXCMAP_CMap* pEmbedMap,
+ int charset,
+ FX_DWORD charcode) {
+ if (charset <= 0 || charset > 4) {
return 0;
+ }
+ FX_WORD cid = FPDFAPI_CIDFromCharCode(pEmbedMap, charcode);
+ if (cid == 0) {
+ return 0;
+ }
+ CPDF_FontGlobals* pFontGlobals =
+ CPDF_ModuleMgr::Get()->GetPageModule()->GetFontGlobals();
+ const FX_WORD* pCodes = pFontGlobals->m_EmbeddedToUnicodes[charset].m_pMap;
+ if (pCodes == NULL) {
+ return 0;
+ }
+ if (cid < pFontGlobals->m_EmbeddedToUnicodes[charset].m_Count) {
+ return pCodes[cid];
+ }
+ return 0;
}
-FX_WCHAR CPDF_CIDFont::_UnicodeFromCharCode(FX_DWORD charcode) const
-{
- switch (m_pCMap->m_Coding) {
- case CIDCODING_UCS2:
- case CIDCODING_UTF16:
- return (FX_WCHAR)charcode;
- case CIDCODING_CID:
- if (m_pCID2UnicodeMap == NULL || !m_pCID2UnicodeMap->IsLoaded()) {
- return 0;
- }
- return m_pCID2UnicodeMap->UnicodeFromCID((FX_WORD)charcode);
- }
- if (!m_pCMap->IsLoaded() || m_pCID2UnicodeMap == NULL || !m_pCID2UnicodeMap->IsLoaded()) {
+FX_WCHAR CPDF_CIDFont::_UnicodeFromCharCode(FX_DWORD charcode) const {
+ switch (m_pCMap->m_Coding) {
+ case CIDCODING_UCS2:
+ case CIDCODING_UTF16:
+ return (FX_WCHAR)charcode;
+ case CIDCODING_CID:
+ if (m_pCID2UnicodeMap == NULL || !m_pCID2UnicodeMap->IsLoaded()) {
+ return 0;
+ }
+ return m_pCID2UnicodeMap->UnicodeFromCID((FX_WORD)charcode);
+ }
+ if (!m_pCMap->IsLoaded() || m_pCID2UnicodeMap == NULL ||
+ !m_pCID2UnicodeMap->IsLoaded()) {
#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
- FX_WCHAR unicode;
- int charsize = 1;
- if (charcode > 255) {
- charcode = (charcode % 256) * 256 + (charcode / 256);
- charsize = 2;
- }
- int ret = FXSYS_MultiByteToWideChar(g_CharsetCPs[m_pCMap->m_Coding], 0, (const FX_CHAR*)&charcode, charsize, &unicode, 1);
- if (ret != 1) {
- return 0;
- }
- return unicode;
+ FX_WCHAR unicode;
+ int charsize = 1;
+ if (charcode > 255) {
+ charcode = (charcode % 256) * 256 + (charcode / 256);
+ charsize = 2;
+ }
+ int ret = FXSYS_MultiByteToWideChar(g_CharsetCPs[m_pCMap->m_Coding], 0,
+ (const FX_CHAR*)&charcode, charsize,
+ &unicode, 1);
+ if (ret != 1) {
+ return 0;
+ }
+ return unicode;
#endif
- if (m_pCMap->m_pEmbedMap) {
- return _EmbeddedUnicodeFromCharcode(m_pCMap->m_pEmbedMap, m_pCMap->m_Charset, charcode);
- }
- return 0;
+ if (m_pCMap->m_pEmbedMap) {
+ return _EmbeddedUnicodeFromCharcode(m_pCMap->m_pEmbedMap,
+ m_pCMap->m_Charset, charcode);
}
- return m_pCID2UnicodeMap->UnicodeFromCID(CIDFromCharCode(charcode));
+ return 0;
+ }
+ return m_pCID2UnicodeMap->UnicodeFromCID(CIDFromCharCode(charcode));
}
-FX_DWORD CPDF_CIDFont::_CharCodeFromUnicode(FX_WCHAR unicode) const
-{
- switch (m_pCMap->m_Coding) {
- case CIDCODING_UNKNOWN:
- return 0;
- case CIDCODING_UCS2:
- case CIDCODING_UTF16:
- return unicode;
- case CIDCODING_CID: {
- if (m_pCID2UnicodeMap == NULL || !m_pCID2UnicodeMap->IsLoaded()) {
- return 0;
- }
- FX_DWORD CID = 0;
- while (CID < 65536) {
- FX_WCHAR this_unicode = m_pCID2UnicodeMap->UnicodeFromCID((FX_WORD)CID);
- if (this_unicode == unicode) {
- return CID;
- }
- CID ++;
- }
- break;
- }
- }
-
- if (unicode < 0x80) {
- return static_cast<FX_DWORD>(unicode);
- }
- if (m_pCMap->m_Coding == CIDCODING_CID) {
+FX_DWORD CPDF_CIDFont::_CharCodeFromUnicode(FX_WCHAR unicode) const {
+ switch (m_pCMap->m_Coding) {
+ case CIDCODING_UNKNOWN:
+ return 0;
+ case CIDCODING_UCS2:
+ case CIDCODING_UTF16:
+ return unicode;
+ case CIDCODING_CID: {
+ if (m_pCID2UnicodeMap == NULL || !m_pCID2UnicodeMap->IsLoaded()) {
return 0;
+ }
+ FX_DWORD CID = 0;
+ while (CID < 65536) {
+ FX_WCHAR this_unicode = m_pCID2UnicodeMap->UnicodeFromCID((FX_WORD)CID);
+ if (this_unicode == unicode) {
+ return CID;
+ }
+ CID++;
+ }
+ break;
}
+ }
+
+ if (unicode < 0x80) {
+ return static_cast<FX_DWORD>(unicode);
+ }
+ if (m_pCMap->m_Coding == CIDCODING_CID) {
+ return 0;
+ }
#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
- uint8_t buffer[32];
- int ret = FXSYS_WideCharToMultiByte(g_CharsetCPs[m_pCMap->m_Coding], 0, &unicode, 1, (char*)buffer, 4, NULL, NULL);
- if (ret == 1) {
- return buffer[0];
- }
- if (ret == 2) {
- return buffer[0] * 256 + buffer[1];
- }
+ uint8_t buffer[32];
+ int ret =
+ FXSYS_WideCharToMultiByte(g_CharsetCPs[m_pCMap->m_Coding], 0, &unicode, 1,
+ (char*)buffer, 4, NULL, NULL);
+ if (ret == 1) {
+ return buffer[0];
+ }
+ if (ret == 2) {
+ return buffer[0] * 256 + buffer[1];
+ }
#else
- if (m_pCMap->m_pEmbedMap) {
- return _EmbeddedCharcodeFromUnicode(m_pCMap->m_pEmbedMap, m_pCMap->m_Charset, unicode);
- }
+ if (m_pCMap->m_pEmbedMap) {
+ return _EmbeddedCharcodeFromUnicode(m_pCMap->m_pEmbedMap,
+ m_pCMap->m_Charset, unicode);
+ }
#endif
- return 0;
+ return 0;
}
-static void FT_UseCIDCharmap(FXFT_Face face, int coding)
-{
- int encoding;
- switch (coding) {
- case CIDCODING_GB:
- encoding = FXFT_ENCODING_GB2312;
- break;
- case CIDCODING_BIG5:
- encoding = FXFT_ENCODING_BIG5;
- break;
- case CIDCODING_JIS:
- encoding = FXFT_ENCODING_SJIS;
- break;
- case CIDCODING_KOREA:
- encoding = FXFT_ENCODING_JOHAB;
- break;
- default:
- encoding = FXFT_ENCODING_UNICODE;
- }
- int err = FXFT_Select_Charmap(face, encoding);
- if (err) {
- err = FXFT_Select_Charmap(face, FXFT_ENCODING_UNICODE);
- }
- if (err && FXFT_Get_Face_Charmaps(face)) {
- FXFT_Set_Charmap(face, *FXFT_Get_Face_Charmaps(face));
- }
+static void FT_UseCIDCharmap(FXFT_Face face, int coding) {
+ int encoding;
+ switch (coding) {
+ case CIDCODING_GB:
+ encoding = FXFT_ENCODING_GB2312;
+ break;
+ case CIDCODING_BIG5:
+ encoding = FXFT_ENCODING_BIG5;
+ break;
+ case CIDCODING_JIS:
+ encoding = FXFT_ENCODING_SJIS;
+ break;
+ case CIDCODING_KOREA:
+ encoding = FXFT_ENCODING_JOHAB;
+ break;
+ default:
+ encoding = FXFT_ENCODING_UNICODE;
+ }
+ int err = FXFT_Select_Charmap(face, encoding);
+ if (err) {
+ err = FXFT_Select_Charmap(face, FXFT_ENCODING_UNICODE);
+ }
+ if (err && FXFT_Get_Face_Charmaps(face)) {
+ FXFT_Set_Charmap(face, *FXFT_Get_Face_Charmaps(face));
+ }
}
-FX_BOOL CPDF_CIDFont::_Load()
-{
- if (m_pFontDict->GetString(FX_BSTRC("Subtype")) == FX_BSTRC("TrueType")) {
- return LoadGB2312();
- }
- CPDF_Array* pFonts = m_pFontDict->GetArray(FX_BSTRC("DescendantFonts"));
- if (pFonts == NULL) {
- return FALSE;
- }
- if (pFonts->GetCount() != 1) {
- return FALSE;
- }
- CPDF_Dictionary* pCIDFontDict = pFonts->GetDict(0);
- if (pCIDFontDict == NULL) {
- return FALSE;
- }
- m_BaseFont = pCIDFontDict->GetString(FX_BSTRC("BaseFont"));
- if ((m_BaseFont.Compare("CourierStd") == 0 || m_BaseFont.Compare("CourierStd-Bold") == 0
- || m_BaseFont.Compare("CourierStd-BoldOblique") == 0 || m_BaseFont.Compare("CourierStd-Oblique") == 0)
- && !IsEmbedded()) {
- m_bAdobeCourierStd = TRUE;
- }
- CPDF_Dictionary* pFontDesc = pCIDFontDict->GetDict(FX_BSTRC("FontDescriptor"));
- if (pFontDesc) {
- LoadFontDescriptor(pFontDesc);
- }
- CPDF_Object* pEncoding = m_pFontDict->GetElementValue(FX_BSTRC("Encoding"));
- if (pEncoding == NULL) {
- return FALSE;
- }
- CFX_ByteString subtype = pCIDFontDict->GetString(FX_BSTRC("Subtype"));
- m_bType1 = FALSE;
- if (subtype == FX_BSTRC("CIDFontType0")) {
- m_bType1 = TRUE;
- }
- if (pEncoding->GetType() == PDFOBJ_NAME) {
- CFX_ByteString cmap = pEncoding->GetString();
- m_pCMap = CPDF_ModuleMgr::Get()->GetPageModule()->GetFontGlobals()->m_CMapManager.GetPredefinedCMap(cmap,
- m_pFontFile && m_bType1);
- } else if (pEncoding->GetType() == PDFOBJ_STREAM) {
- m_pAllocatedCMap = m_pCMap = new CPDF_CMap;
- CPDF_Stream* pStream = (CPDF_Stream*)pEncoding;
- CPDF_StreamAcc acc;
- acc.LoadAllData(pStream, FALSE);
- m_pCMap->LoadEmbedded(acc.GetData(), acc.GetSize());
+FX_BOOL CPDF_CIDFont::_Load() {
+ if (m_pFontDict->GetString(FX_BSTRC("Subtype")) == FX_BSTRC("TrueType")) {
+ return LoadGB2312();
+ }
+ CPDF_Array* pFonts = m_pFontDict->GetArray(FX_BSTRC("DescendantFonts"));
+ if (pFonts == NULL) {
+ return FALSE;
+ }
+ if (pFonts->GetCount() != 1) {
+ return FALSE;
+ }
+ CPDF_Dictionary* pCIDFontDict = pFonts->GetDict(0);
+ if (pCIDFontDict == NULL) {
+ return FALSE;
+ }
+ m_BaseFont = pCIDFontDict->GetString(FX_BSTRC("BaseFont"));
+ if ((m_BaseFont.Compare("CourierStd") == 0 ||
+ m_BaseFont.Compare("CourierStd-Bold") == 0 ||
+ m_BaseFont.Compare("CourierStd-BoldOblique") == 0 ||
+ m_BaseFont.Compare("CourierStd-Oblique") == 0) &&
+ !IsEmbedded()) {
+ m_bAdobeCourierStd = TRUE;
+ }
+ CPDF_Dictionary* pFontDesc =
+ pCIDFontDict->GetDict(FX_BSTRC("FontDescriptor"));
+ if (pFontDesc) {
+ LoadFontDescriptor(pFontDesc);
+ }
+ CPDF_Object* pEncoding = m_pFontDict->GetElementValue(FX_BSTRC("Encoding"));
+ if (pEncoding == NULL) {
+ return FALSE;
+ }
+ CFX_ByteString subtype = pCIDFontDict->GetString(FX_BSTRC("Subtype"));
+ m_bType1 = FALSE;
+ if (subtype == FX_BSTRC("CIDFontType0")) {
+ m_bType1 = TRUE;
+ }
+ if (pEncoding->GetType() == PDFOBJ_NAME) {
+ CFX_ByteString cmap = pEncoding->GetString();
+ m_pCMap =
+ CPDF_ModuleMgr::Get()
+ ->GetPageModule()
+ ->GetFontGlobals()
+ ->m_CMapManager.GetPredefinedCMap(cmap, m_pFontFile && m_bType1);
+ } else if (pEncoding->GetType() == PDFOBJ_STREAM) {
+ m_pAllocatedCMap = m_pCMap = new CPDF_CMap;
+ CPDF_Stream* pStream = (CPDF_Stream*)pEncoding;
+ CPDF_StreamAcc acc;
+ acc.LoadAllData(pStream, FALSE);
+ m_pCMap->LoadEmbedded(acc.GetData(), acc.GetSize());
+ } else {
+ return FALSE;
+ }
+ if (m_pCMap == NULL) {
+ return FALSE;
+ }
+ m_Charset = m_pCMap->m_Charset;
+ if (m_Charset == CIDSET_UNKNOWN) {
+ CPDF_Dictionary* pCIDInfo =
+ pCIDFontDict->GetDict(FX_BSTRC("CIDSystemInfo"));
+ if (pCIDInfo) {
+ m_Charset =
+ _CharsetFromOrdering(pCIDInfo->GetString(FX_BSTRC("Ordering")));
+ }
+ }
+ if (m_Charset != CIDSET_UNKNOWN)
+ m_pCID2UnicodeMap =
+ CPDF_ModuleMgr::Get()
+ ->GetPageModule()
+ ->GetFontGlobals()
+ ->m_CMapManager.GetCID2UnicodeMap(
+ m_Charset,
+ m_pFontFile == NULL && (m_pCMap->m_Coding == CIDCODING_CID ||
+ pCIDFontDict->KeyExist(FX_BSTRC("W"))));
+ if (m_Font.GetFace()) {
+ if (m_bType1) {
+ FXFT_Select_Charmap(m_Font.GetFace(), FXFT_ENCODING_UNICODE);
} else {
- return FALSE;
- }
- if (m_pCMap == NULL) {
- return FALSE;
- }
- m_Charset = m_pCMap->m_Charset;
- if (m_Charset == CIDSET_UNKNOWN) {
- CPDF_Dictionary* pCIDInfo = pCIDFontDict->GetDict(FX_BSTRC("CIDSystemInfo"));
- if (pCIDInfo) {
- m_Charset = _CharsetFromOrdering(pCIDInfo->GetString(FX_BSTRC("Ordering")));
- }
- }
- if (m_Charset != CIDSET_UNKNOWN)
- m_pCID2UnicodeMap = CPDF_ModuleMgr::Get()->GetPageModule()->GetFontGlobals()->m_CMapManager.GetCID2UnicodeMap(m_Charset,
- m_pFontFile == NULL && (m_pCMap->m_Coding == CIDCODING_CID || pCIDFontDict->KeyExist(FX_BSTRC("W"))));
- if (m_Font.GetFace()) {
- if (m_bType1) {
- FXFT_Select_Charmap(m_Font.GetFace(), FXFT_ENCODING_UNICODE);
- } else {
- FT_UseCIDCharmap(m_Font.GetFace(), m_pCMap->m_Coding);
- }
- }
- m_DefaultWidth = pCIDFontDict->GetInteger(FX_BSTRC("DW"), 1000);
- CPDF_Array* pWidthArray = pCIDFontDict->GetArray(FX_BSTRC("W"));
- if (pWidthArray) {
- LoadMetricsArray(pWidthArray, m_WidthList, 1);
- }
- if (!IsEmbedded()) {
- LoadSubstFont();
- }
- if (1) {
- if (m_pFontFile || (GetSubstFont()->m_SubstFlags & FXFONT_SUBST_EXACT)) {
- CPDF_Object* pmap = pCIDFontDict->GetElementValue(FX_BSTRC("CIDToGIDMap"));
- if (pmap) {
- if (pmap->GetType() == PDFOBJ_STREAM) {
- m_pCIDToGIDMap = new CPDF_StreamAcc;
- m_pCIDToGIDMap->LoadAllData((CPDF_Stream*)pmap, FALSE);
- } else if (pmap->GetString() == FX_BSTRC("Identity")) {
-#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
- if (m_pFontFile) {
- m_bCIDIsGID = TRUE;
- }
+ FT_UseCIDCharmap(m_Font.GetFace(), m_pCMap->m_Coding);
+ }
+ }
+ m_DefaultWidth = pCIDFontDict->GetInteger(FX_BSTRC("DW"), 1000);
+ CPDF_Array* pWidthArray = pCIDFontDict->GetArray(FX_BSTRC("W"));
+ if (pWidthArray) {
+ LoadMetricsArray(pWidthArray, m_WidthList, 1);
+ }
+ if (!IsEmbedded()) {
+ LoadSubstFont();
+ }
+ if (1) {
+ if (m_pFontFile || (GetSubstFont()->m_SubstFlags & FXFONT_SUBST_EXACT)) {
+ CPDF_Object* pmap =
+ pCIDFontDict->GetElementValue(FX_BSTRC("CIDToGIDMap"));
+ if (pmap) {
+ if (pmap->GetType() == PDFOBJ_STREAM) {
+ m_pCIDToGIDMap = new CPDF_StreamAcc;
+ m_pCIDToGIDMap->LoadAllData((CPDF_Stream*)pmap, FALSE);
+ } else if (pmap->GetString() == FX_BSTRC("Identity")) {
+#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
+ if (m_pFontFile) {
+ m_bCIDIsGID = TRUE;
+ }
#else
- m_bCIDIsGID = TRUE;
+ m_bCIDIsGID = TRUE;
#endif
- }
- }
- }
- }
- CheckFontMetrics();
- if (IsVertWriting()) {
- pWidthArray = pCIDFontDict->GetArray(FX_BSTRC("W2"));
- if (pWidthArray) {
- LoadMetricsArray(pWidthArray, m_VertMetrics, 3);
- }
- CPDF_Array* pDefaultArray = pCIDFontDict->GetArray(FX_BSTRC("DW2"));
- if (pDefaultArray) {
- m_DefaultVY = pDefaultArray->GetInteger(0);
- m_DefaultW1 = pDefaultArray->GetInteger(1);
- } else {
- m_DefaultVY = 880;
- m_DefaultW1 = -1000;
}
+ }
}
- return TRUE;
-}
-FX_FLOAT _CIDTransformToFloat(uint8_t ch)
-{
- if (ch < 128) {
- return ch * 1.0f / 127;
- }
- return (-255 + ch) * 1.0f / 127;
-}
-void CPDF_CIDFont::GetCharBBox(FX_DWORD charcode, FX_RECT& rect, int level)
-{
- if (charcode < 256 && m_CharBBox[charcode].Right != -1) {
- rect.bottom = m_CharBBox[charcode].Bottom;
- rect.left = m_CharBBox[charcode].Left;
- rect.right = m_CharBBox[charcode].Right;
- rect.top = m_CharBBox[charcode].Top;
- return;
+ }
+ CheckFontMetrics();
+ if (IsVertWriting()) {
+ pWidthArray = pCIDFontDict->GetArray(FX_BSTRC("W2"));
+ if (pWidthArray) {
+ LoadMetricsArray(pWidthArray, m_VertMetrics, 3);
}
- FX_BOOL bVert = FALSE;
- int glyph_index = GlyphFromCharCode(charcode, &bVert);
- if (m_Font.m_Face == NULL) {
- rect = FX_RECT(0, 0, 0, 0);
+ CPDF_Array* pDefaultArray = pCIDFontDict->GetArray(FX_BSTRC("DW2"));
+ if (pDefaultArray) {
+ m_DefaultVY = pDefaultArray->GetInteger(0);
+ m_DefaultW1 = pDefaultArray->GetInteger(1);
} else {
- rect.left = rect.bottom = rect.right = rect.top = 0;
- FXFT_Face face = m_Font.m_Face;
- if (FXFT_Is_Face_Tricky(face)) {
- int err = FXFT_Load_Glyph(face, glyph_index, FXFT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH);
- if (!err) {
- FXFT_BBox cbox;
- FXFT_Glyph glyph;
- err = FXFT_Get_Glyph(((FXFT_Face)face)->glyph, &glyph);
- if (!err) {
- FXFT_Glyph_Get_CBox(glyph, FXFT_GLYPH_BBOX_PIXELS, &cbox);
- int pixel_size_x = ((FXFT_Face)face)->size->metrics.x_ppem;
- int pixel_size_y = ((FXFT_Face)face)->size->metrics.y_ppem;
- if (pixel_size_x == 0 || pixel_size_y == 0) {
- rect.left = cbox.xMin;
- rect.right = cbox.xMax;
- rect.top = cbox.yMax;
- rect.bottom = cbox.yMin;
- } else {
- rect.left = cbox.xMin * 1000 / pixel_size_x;
- rect.right = cbox.xMax * 1000 / pixel_size_x;
- rect.top = cbox.yMax * 1000 / pixel_size_y;
- rect.bottom = cbox.yMin * 1000 / pixel_size_y;
- }
- if (rect.top > FXFT_Get_Face_Ascender(face)) {
- rect.top = FXFT_Get_Face_Ascender(face);
- }
- if (rect.bottom < FXFT_Get_Face_Descender(face)) {
- rect.bottom = FXFT_Get_Face_Descender(face);
- }
- FXFT_Done_Glyph(glyph);
- }
- }
- } else {
- int err = FXFT_Load_Glyph(face, glyph_index, FXFT_LOAD_NO_SCALE);
- if (err == 0) {
- rect.left = TT2PDF(FXFT_Get_Glyph_HoriBearingX(face), face);
- rect.right = TT2PDF(FXFT_Get_Glyph_HoriBearingX(face) + FXFT_Get_Glyph_Width(face), face);
- rect.top = TT2PDF(FXFT_Get_Glyph_HoriBearingY(face), face);
- rect.top += rect.top / 64;
- rect.bottom = TT2PDF(FXFT_Get_Glyph_HoriBearingY(face) - FXFT_Get_Glyph_Height(face), face);
- }
- }
- }
- if (m_pFontFile == NULL && m_Charset == CIDSET_JAPAN1) {
- FX_WORD CID = CIDFromCharCode(charcode);
- const uint8_t* pTransform = GetCIDTransform(CID);
- if (pTransform && !bVert) {
- CFX_AffineMatrix matrix(_CIDTransformToFloat(pTransform[0]), _CIDTransformToFloat(pTransform[1]),
- _CIDTransformToFloat(pTransform[2]), _CIDTransformToFloat(pTransform[3]),
- _CIDTransformToFloat(pTransform[4]) * 1000 , _CIDTransformToFloat(pTransform[5]) * 1000);
- CFX_FloatRect rect_f(rect);
- rect_f.Transform(&matrix);
- rect = rect_f.GetOutterRect();
- }
- }
- if (charcode < 256) {
- m_CharBBox[charcode].Bottom = (short)rect.bottom;
- m_CharBBox[charcode].Left = (short)rect.left;
- m_CharBBox[charcode].Right = (short)rect.right;
- m_CharBBox[charcode].Top = (short)rect.top;
+ m_DefaultVY = 880;
+ m_DefaultW1 = -1000;
}
+ }
+ return TRUE;
}
-int CPDF_CIDFont::GetCharWidthF(FX_DWORD charcode, int level)
-{
- if (m_pAnsiWidths && charcode < 0x80) {
- return m_pAnsiWidths[charcode];
- }
- FX_WORD cid = CIDFromCharCode(charcode);
- int size = m_WidthList.GetSize();
- FX_DWORD* list = m_WidthList.GetData();
- for (int i = 0; i < size; i += 3) {
- if (cid >= list[i] && cid <= list[i + 1]) {
- return (int)list[i + 2];
- }
- }
- return m_DefaultWidth;
+FX_FLOAT _CIDTransformToFloat(uint8_t ch) {
+ if (ch < 128) {
+ return ch * 1.0f / 127;
+ }
+ return (-255 + ch) * 1.0f / 127;
}
-short CPDF_CIDFont::GetVertWidth(FX_WORD CID) const
-{
- FX_DWORD vertsize = m_VertMetrics.GetSize() / 5;
- if (vertsize == 0) {
- return m_DefaultW1;
- }
- const FX_DWORD* pTable = m_VertMetrics.GetData();
- for (FX_DWORD i = 0; i < vertsize; i ++)
- if (pTable[i * 5] <= CID && pTable[i * 5 + 1] >= CID) {
- return (short)(int)pTable[i * 5 + 2];
+void CPDF_CIDFont::GetCharBBox(FX_DWORD charcode, FX_RECT& rect, int level) {
+ if (charcode < 256 && m_CharBBox[charcode].Right != -1) {
+ rect.bottom = m_CharBBox[charcode].Bottom;
+ rect.left = m_CharBBox[charcode].Left;
+ rect.right = m_CharBBox[charcode].Right;
+ rect.top = m_CharBBox[charcode].Top;
+ return;
+ }
+ FX_BOOL bVert = FALSE;
+ int glyph_index = GlyphFromCharCode(charcode, &bVert);
+ if (m_Font.m_Face == NULL) {
+ rect = FX_RECT(0, 0, 0, 0);
+ } else {
+ rect.left = rect.bottom = rect.right = rect.top = 0;
+ FXFT_Face face = m_Font.m_Face;
+ if (FXFT_Is_Face_Tricky(face)) {
+ int err = FXFT_Load_Glyph(face, glyph_index,
+ FXFT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH);
+ if (!err) {
+ FXFT_BBox cbox;
+ FXFT_Glyph glyph;
+ err = FXFT_Get_Glyph(((FXFT_Face)face)->glyph, &glyph);
+ if (!err) {
+ FXFT_Glyph_Get_CBox(glyph, FXFT_GLYPH_BBOX_PIXELS, &cbox);
+ int pixel_size_x = ((FXFT_Face)face)->size->metrics.x_ppem;
+ int pixel_size_y = ((FXFT_Face)face)->size->metrics.y_ppem;
+ if (pixel_size_x == 0 || pixel_size_y == 0) {
+ rect.left = cbox.xMin;
+ rect.right = cbox.xMax;
+ rect.top = cbox.yMax;
+ rect.bottom = cbox.yMin;
+ } else {
+ rect.left = cbox.xMin * 1000 / pixel_size_x;
+ rect.right = cbox.xMax * 1000 / pixel_size_x;
+ rect.top = cbox.yMax * 1000 / pixel_size_y;
+ rect.bottom = cbox.yMin * 1000 / pixel_size_y;
+ }
+ if (rect.top > FXFT_Get_Face_Ascender(face)) {
+ rect.top = FXFT_Get_Face_Ascender(face);
+ }
+ if (rect.bottom < FXFT_Get_Face_Descender(face)) {
+ rect.bottom = FXFT_Get_Face_Descender(face);
+ }
+ FXFT_Done_Glyph(glyph);
}
- return m_DefaultW1;
+ }
+ } else {
+ int err = FXFT_Load_Glyph(face, glyph_index, FXFT_LOAD_NO_SCALE);
+ if (err == 0) {
+ rect.left = TT2PDF(FXFT_Get_Glyph_HoriBearingX(face), face);
+ rect.right = TT2PDF(
+ FXFT_Get_Glyph_HoriBearingX(face) + FXFT_Get_Glyph_Width(face),
+ face);
+ rect.top = TT2PDF(FXFT_Get_Glyph_HoriBearingY(face), face);
+ rect.top += rect.top / 64;
+ rect.bottom = TT2PDF(
+ FXFT_Get_Glyph_HoriBearingY(face) - FXFT_Get_Glyph_Height(face),
+ face);
+ }
+ }
+ }
+ if (m_pFontFile == NULL && m_Charset == CIDSET_JAPAN1) {
+ FX_WORD CID = CIDFromCharCode(charcode);
+ const uint8_t* pTransform = GetCIDTransform(CID);
+ if (pTransform && !bVert) {
+ CFX_AffineMatrix matrix(_CIDTransformToFloat(pTransform[0]),
+ _CIDTransformToFloat(pTransform[1]),
+ _CIDTransformToFloat(pTransform[2]),
+ _CIDTransformToFloat(pTransform[3]),
+ _CIDTransformToFloat(pTransform[4]) * 1000,
+ _CIDTransformToFloat(pTransform[5]) * 1000);
+ CFX_FloatRect rect_f(rect);
+ rect_f.Transform(&matrix);
+ rect = rect_f.GetOutterRect();
+ }
+ }
+ if (charcode < 256) {
+ m_CharBBox[charcode].Bottom = (short)rect.bottom;
+ m_CharBBox[charcode].Left = (short)rect.left;
+ m_CharBBox[charcode].Right = (short)rect.right;
+ m_CharBBox[charcode].Top = (short)rect.top;
+ }
}
-void CPDF_CIDFont::GetVertOrigin(FX_WORD CID, short& vx, short &vy) const
-{
- FX_DWORD vertsize = m_VertMetrics.GetSize() / 5;
- if (vertsize) {
- const FX_DWORD* pTable = m_VertMetrics.GetData();
- for (FX_DWORD i = 0; i < vertsize; i ++)
- if (pTable[i * 5] <= CID && pTable[i * 5 + 1] >= CID) {
- vx = (short)(int)pTable[i * 5 + 3];
- vy = (short)(int)pTable[i * 5 + 4];
- return;
- }
- }
- FX_DWORD dwWidth = m_DefaultWidth;
- int size = m_WidthList.GetSize();
- const FX_DWORD* list = m_WidthList.GetData();
- for (int i = 0; i < size; i += 3) {
- if (CID >= list[i] && CID <= list[i + 1]) {
- dwWidth = (FX_WORD)list[i + 2];
- break;
- }
- }
- vx = (short)dwWidth / 2;
- vy = (short)m_DefaultVY;
+int CPDF_CIDFont::GetCharWidthF(FX_DWORD charcode, int level) {
+ if (m_pAnsiWidths && charcode < 0x80) {
+ return m_pAnsiWidths[charcode];
+ }
+ FX_WORD cid = CIDFromCharCode(charcode);
+ int size = m_WidthList.GetSize();
+ FX_DWORD* list = m_WidthList.GetData();
+ for (int i = 0; i < size; i += 3) {
+ if (cid >= list[i] && cid <= list[i + 1]) {
+ return (int)list[i + 2];
+ }
+ }
+ return m_DefaultWidth;
}
-int CPDF_CIDFont::GetGlyphIndex(FX_DWORD unicode, FX_BOOL *pVertGlyph)
-{
- if (pVertGlyph) {
- *pVertGlyph = FALSE;
- }
- int index = FXFT_Get_Char_Index(m_Font.m_Face, unicode );
- if (unicode == 0x2502) {
- return index;
+short CPDF_CIDFont::GetVertWidth(FX_WORD CID) const {
+ FX_DWORD vertsize = m_VertMetrics.GetSize() / 5;
+ if (vertsize == 0) {
+ return m_DefaultW1;
+ }
+ const FX_DWORD* pTable = m_VertMetrics.GetData();
+ for (FX_DWORD i = 0; i < vertsize; i++)
+ if (pTable[i * 5] <= CID && pTable[i * 5 + 1] >= CID) {
+ return (short)(int)pTable[i * 5 + 2];
}
- if (index && IsVertWriting()) {
- if (m_pTTGSUBTable) {
- TT_uint32_t vindex = 0;
- m_pTTGSUBTable->GetVerticalGlyph(index, &vindex);
- if (vindex) {
- index = vindex;
- if (pVertGlyph) {
- *pVertGlyph = TRUE;
- }
- }
- return index;
- }
- if (NULL == m_Font.m_pGsubData) {
- unsigned long length = 0;
- int error = FXFT_Load_Sfnt_Table( m_Font.m_Face, FT_MAKE_TAG('G', 'S', 'U', 'B'), 0, NULL, &length);
- if (!error) {
- m_Font.m_pGsubData = (unsigned char*)FX_Alloc(uint8_t, length);
- }
+ return m_DefaultW1;
+}
+void CPDF_CIDFont::GetVertOrigin(FX_WORD CID, short& vx, short& vy) const {
+ FX_DWORD vertsize = m_VertMetrics.GetSize() / 5;
+ if (vertsize) {
+ const FX_DWORD* pTable = m_VertMetrics.GetData();
+ for (FX_DWORD i = 0; i < vertsize; i++)
+ if (pTable[i * 5] <= CID && pTable[i * 5 + 1] >= CID) {
+ vx = (short)(int)pTable[i * 5 + 3];
+ vy = (short)(int)pTable[i * 5 + 4];
+ return;
+ }
+ }
+ FX_DWORD dwWidth = m_DefaultWidth;
+ int size = m_WidthList.GetSize();
+ const FX_DWORD* list = m_WidthList.GetData();
+ for (int i = 0; i < size; i += 3) {
+ if (CID >= list[i] && CID <= list[i + 1]) {
+ dwWidth = (FX_WORD)list[i + 2];
+ break;
+ }
+ }
+ vx = (short)dwWidth / 2;
+ vy = (short)m_DefaultVY;
+}
+int CPDF_CIDFont::GetGlyphIndex(FX_DWORD unicode, FX_BOOL* pVertGlyph) {
+ if (pVertGlyph) {
+ *pVertGlyph = FALSE;
+ }
+ int index = FXFT_Get_Char_Index(m_Font.m_Face, unicode);
+ if (unicode == 0x2502) {
+ return index;
+ }
+ if (index && IsVertWriting()) {
+ if (m_pTTGSUBTable) {
+ TT_uint32_t vindex = 0;
+ m_pTTGSUBTable->GetVerticalGlyph(index, &vindex);
+ if (vindex) {
+ index = vindex;
+ if (pVertGlyph) {
+ *pVertGlyph = TRUE;
}
- int error = FXFT_Load_Sfnt_Table( m_Font.m_Face, FT_MAKE_TAG('G', 'S', 'U', 'B'), 0, m_Font.m_pGsubData, NULL);
- if (!error && m_Font.m_pGsubData) {
- m_pTTGSUBTable = new CFX_CTTGSUBTable;
- m_pTTGSUBTable->LoadGSUBTable((FT_Bytes)m_Font.m_pGsubData);
- TT_uint32_t vindex = 0;
- m_pTTGSUBTable->GetVerticalGlyph(index, &vindex);
- if (vindex) {
- index = vindex;
- if (pVertGlyph) {
- *pVertGlyph = TRUE;
- }
- }
+ }
+ return index;
+ }
+ if (NULL == m_Font.m_pGsubData) {
+ unsigned long length = 0;
+ int error = FXFT_Load_Sfnt_Table(
+ m_Font.m_Face, FT_MAKE_TAG('G', 'S', 'U', 'B'), 0, NULL, &length);
+ if (!error) {
+ m_Font.m_pGsubData = (unsigned char*)FX_Alloc(uint8_t, length);
+ }
+ }
+ int error =
+ FXFT_Load_Sfnt_Table(m_Font.m_Face, FT_MAKE_TAG('G', 'S', 'U', 'B'), 0,
+ m_Font.m_pGsubData, NULL);
+ if (!error && m_Font.m_pGsubData) {
+ m_pTTGSUBTable = new CFX_CTTGSUBTable;
+ m_pTTGSUBTable->LoadGSUBTable((FT_Bytes)m_Font.m_pGsubData);
+ TT_uint32_t vindex = 0;
+ m_pTTGSUBTable->GetVerticalGlyph(index, &vindex);
+ if (vindex) {
+ index = vindex;
+ if (pVertGlyph) {
+ *pVertGlyph = TRUE;
}
- return index;
- }
- if (pVertGlyph) {
- *pVertGlyph = FALSE;
+ }
}
return index;
+ }
+ if (pVertGlyph) {
+ *pVertGlyph = FALSE;
+ }
+ return index;
}
-int CPDF_CIDFont::GlyphFromCharCode(FX_DWORD charcode, FX_BOOL *pVertGlyph)
-{
- if (pVertGlyph) {
- *pVertGlyph = FALSE;
- }
- if (m_pFontFile == NULL && m_pCIDToGIDMap == NULL) {
- FX_WORD cid = CIDFromCharCode(charcode);
- FX_WCHAR unicode = 0;
- if (m_bCIDIsGID) {
+int CPDF_CIDFont::GlyphFromCharCode(FX_DWORD charcode, FX_BOOL* pVertGlyph) {
+ if (pVertGlyph) {
+ *pVertGlyph = FALSE;
+ }
+ if (m_pFontFile == NULL && m_pCIDToGIDMap == NULL) {
+ FX_WORD cid = CIDFromCharCode(charcode);
+ FX_WCHAR unicode = 0;
+ if (m_bCIDIsGID) {
#if _FXM_PLATFORM_ != _FXM_PLATFORM_APPLE_
- return cid;
+ return cid;
#else
- if (m_Flags & PDFFONT_SYMBOLIC) {
- return cid;
- }
- CFX_WideString uni_str = UnicodeFromCharCode(charcode);
- if (uni_str.IsEmpty()) {
- return cid;
- }
- unicode = uni_str.GetAt(0);
+ if (m_Flags & PDFFONT_SYMBOLIC) {
+ return cid;
+ }
+ CFX_WideString uni_str = UnicodeFromCharCode(charcode);
+ if (uni_str.IsEmpty()) {
+ return cid;
+ }
+ unicode = uni_str.GetAt(0);
#endif
+ } else {
+ if (cid && m_pCID2UnicodeMap && m_pCID2UnicodeMap->IsLoaded()) {
+ unicode = m_pCID2UnicodeMap->UnicodeFromCID(cid);
+ }
+ if (unicode == 0) {
+ unicode = _UnicodeFromCharCode(charcode);
+ }
+ if (unicode == 0 && !(m_Flags & PDFFONT_SYMBOLIC)) {
+ unicode = UnicodeFromCharCode(charcode).GetAt(0);
+ }
+ }
+ if (unicode == 0) {
+ if (!m_bAdobeCourierStd) {
+ return charcode == 0 ? -1 : (int)charcode;
+ }
+ charcode += 31;
+ int index = 0, iBaseEncoding;
+ FX_BOOL bMSUnicode = FT_UseTTCharmap(m_Font.m_Face, 3, 1);
+ FX_BOOL bMacRoman = FALSE;
+ if (!bMSUnicode) {
+ bMacRoman = FT_UseTTCharmap(m_Font.m_Face, 1, 0);
+ }
+ iBaseEncoding = PDFFONT_ENCODING_STANDARD;
+ if (bMSUnicode) {
+ iBaseEncoding = PDFFONT_ENCODING_WINANSI;
+ } else if (bMacRoman) {
+ iBaseEncoding = PDFFONT_ENCODING_MACROMAN;
+ }
+ const FX_CHAR* name = GetAdobeCharName(iBaseEncoding, NULL, charcode);
+ if (name == NULL) {
+ return charcode == 0 ? -1 : (int)charcode;
+ }
+ FX_WORD unicode = PDF_UnicodeFromAdobeName(name);
+ if (unicode) {
+ if (bMSUnicode) {
+ index = FXFT_Get_Char_Index(m_Font.m_Face, unicode);
+ } else if (bMacRoman) {
+ FX_DWORD maccode =
+ FT_CharCodeFromUnicode(FXFT_ENCODING_APPLE_ROMAN, unicode);
+ index = !maccode ? FXFT_Get_Name_Index(m_Font.m_Face, (char*)name)
+ : FXFT_Get_Char_Index(m_Font.m_Face, maccode);
} else {
- if (cid && m_pCID2UnicodeMap && m_pCID2UnicodeMap->IsLoaded()) {
- unicode = m_pCID2UnicodeMap->UnicodeFromCID(cid);
- }
- if (unicode == 0) {
- unicode = _UnicodeFromCharCode(charcode);
- }
- if (unicode == 0 && !(m_Flags & PDFFONT_SYMBOLIC)) {
- unicode = UnicodeFromCharCode(charcode).GetAt(0);
- }
+ return FXFT_Get_Char_Index(m_Font.m_Face, unicode);
}
- if (unicode == 0) {
- if (!m_bAdobeCourierStd) {
- return charcode == 0 ? -1 : (int)charcode;
- }
- charcode += 31;
- int index = 0, iBaseEncoding;
- FX_BOOL bMSUnicode = FT_UseTTCharmap(m_Font.m_Face, 3, 1);
- FX_BOOL bMacRoman = FALSE;
- if (!bMSUnicode) {
- bMacRoman = FT_UseTTCharmap(m_Font.m_Face, 1, 0);
- }
- iBaseEncoding = PDFFONT_ENCODING_STANDARD;
- if (bMSUnicode) {
- iBaseEncoding = PDFFONT_ENCODING_WINANSI;
- } else if (bMacRoman) {
- iBaseEncoding = PDFFONT_ENCODING_MACROMAN;
- }
- const FX_CHAR* name = GetAdobeCharName(iBaseEncoding, NULL, charcode);
- if (name == NULL) {
- return charcode == 0 ? -1 : (int)charcode;
- }
- FX_WORD unicode = PDF_UnicodeFromAdobeName(name);
- if (unicode) {
- if (bMSUnicode) {
- index = FXFT_Get_Char_Index(m_Font.m_Face, unicode);
- } else if (bMacRoman) {
- FX_DWORD maccode = FT_CharCodeFromUnicode(FXFT_ENCODING_APPLE_ROMAN, unicode);
- index = !maccode ? FXFT_Get_Name_Index(m_Font.m_Face, (char *)name) : FXFT_Get_Char_Index(m_Font.m_Face, maccode);
- } else {
- return FXFT_Get_Char_Index(m_Font.m_Face, unicode);
- }
- } else {
- return charcode == 0 ? -1 : (int)charcode;
- }
- if (index == 0 || index == 0xffff) {
- return charcode == 0 ? -1 : (int)charcode;
- }
- return index;
- }
- if (m_Charset == CIDSET_JAPAN1) {
- if (unicode == '\\') {
- unicode = '/';
- }
+ } else {
+ return charcode == 0 ? -1 : (int)charcode;
+ }
+ if (index == 0 || index == 0xffff) {
+ return charcode == 0 ? -1 : (int)charcode;
+ }
+ return index;
+ }
+ if (m_Charset == CIDSET_JAPAN1) {
+ if (unicode == '\\') {
+ unicode = '/';
+ }
#if _FXM_PLATFORM_ != _FXM_PLATFORM_APPLE_
- else if (unicode == 0xa5) {
- unicode = 0x5c;
- }
+ else if (unicode == 0xa5) {
+ unicode = 0x5c;
+ }
#endif
- }
- if (m_Font.m_Face == NULL) {
- return unicode;
- }
- int err = FXFT_Select_Charmap(m_Font.m_Face, FXFT_ENCODING_UNICODE);
- if (err != 0) {
- int i;
- for (i = 0; i < FXFT_Get_Face_CharmapCount(m_Font.m_Face); i ++) {
- FX_DWORD ret = FT_CharCodeFromUnicode(FXFT_Get_Charmap_Encoding(FXFT_Get_Face_Charmaps(m_Font.m_Face)[i]), (FX_WCHAR)charcode);
- if (ret == 0) {
- continue;
- }
- FXFT_Set_Charmap(m_Font.m_Face, FXFT_Get_Face_Charmaps(m_Font.m_Face)[i]);
- unicode = (FX_WCHAR)ret;
- break;
- }
- if (i == FXFT_Get_Face_CharmapCount(m_Font.m_Face) && i) {
- FXFT_Set_Charmap(m_Font.m_Face, FXFT_Get_Face_Charmaps(m_Font.m_Face)[0]);
- unicode = (FX_WCHAR)charcode;
- }
- }
- if (FXFT_Get_Face_Charmap(m_Font.m_Face)) {
- int index = GetGlyphIndex(unicode, pVertGlyph);
- if (index == 0) {
- return -1;
- }
- return index;
- }
- return unicode ;
}
if (m_Font.m_Face == NULL) {
- return -1;
- }
- FX_WORD cid = CIDFromCharCode(charcode);
- if (m_bType1) {
- if (NULL == m_pCIDToGIDMap) {
- return cid;
- }
- } else {
- if (m_pCIDToGIDMap == NULL) {
- if (m_pFontFile && m_pCMap->m_pMapping == NULL) {
- return cid;
- }
- if (m_pCMap->m_Coding == CIDCODING_UNKNOWN || FXFT_Get_Face_Charmap(m_Font.m_Face) == NULL) {
- return cid;
- }
- if (FXFT_Get_Charmap_Encoding(FXFT_Get_Face_Charmap(m_Font.m_Face)) == FXFT_ENCODING_UNICODE) {
- CFX_WideString unicode_str = UnicodeFromCharCode(charcode);
- if (unicode_str.IsEmpty()) {
- return -1;
- }
- charcode = unicode_str.GetAt(0);
- }
- return GetGlyphIndex(charcode, pVertGlyph);
+ return unicode;
+ }
+ int err = FXFT_Select_Charmap(m_Font.m_Face, FXFT_ENCODING_UNICODE);
+ if (err != 0) {
+ int i;
+ for (i = 0; i < FXFT_Get_Face_CharmapCount(m_Font.m_Face); i++) {
+ FX_DWORD ret = FT_CharCodeFromUnicode(
+ FXFT_Get_Charmap_Encoding(FXFT_Get_Face_Charmaps(m_Font.m_Face)[i]),
+ (FX_WCHAR)charcode);
+ if (ret == 0) {
+ continue;
}
- }
- FX_DWORD byte_pos = cid * 2;
- if (byte_pos + 2 > m_pCIDToGIDMap->GetSize()) {
+ FXFT_Set_Charmap(m_Font.m_Face,
+ FXFT_Get_Face_Charmaps(m_Font.m_Face)[i]);
+ unicode = (FX_WCHAR)ret;
+ break;
+ }
+ if (i == FXFT_Get_Face_CharmapCount(m_Font.m_Face) && i) {
+ FXFT_Set_Charmap(m_Font.m_Face,
+ FXFT_Get_Face_Charmaps(m_Font.m_Face)[0]);
+ unicode = (FX_WCHAR)charcode;
+ }
+ }
+ if (FXFT_Get_Face_Charmap(m_Font.m_Face)) {
+ int index = GetGlyphIndex(unicode, pVertGlyph);
+ if (index == 0) {
return -1;
- }
- const uint8_t* pdata = m_pCIDToGIDMap->GetData() + byte_pos;
- return pdata[0] * 256 + pdata[1];
+ }
+ return index;
+ }
+ return unicode;
+ }
+ if (m_Font.m_Face == NULL) {
+ return -1;
+ }
+ FX_WORD cid = CIDFromCharCode(charcode);
+ if (m_bType1) {
+ if (NULL == m_pCIDToGIDMap) {
+ return cid;
+ }
+ } else {
+ if (m_pCIDToGIDMap == NULL) {
+ if (m_pFontFile && m_pCMap->m_pMapping == NULL) {
+ return cid;
+ }
+ if (m_pCMap->m_Coding == CIDCODING_UNKNOWN ||
+ FXFT_Get_Face_Charmap(m_Font.m_Face) == NULL) {
+ return cid;
+ }
+ if (FXFT_Get_Charmap_Encoding(FXFT_Get_Face_Charmap(m_Font.m_Face)) ==
+ FXFT_ENCODING_UNICODE) {
+ CFX_WideString unicode_str = UnicodeFromCharCode(charcode);
+ if (unicode_str.IsEmpty()) {
+ return -1;
+ }
+ charcode = unicode_str.GetAt(0);
+ }
+ return GetGlyphIndex(charcode, pVertGlyph);
+ }
+ }
+ FX_DWORD byte_pos = cid * 2;
+ if (byte_pos + 2 > m_pCIDToGIDMap->GetSize()) {
+ return -1;
+ }
+ const uint8_t* pdata = m_pCIDToGIDMap->GetData() + byte_pos;
+ return pdata[0] * 256 + pdata[1];
}
-FX_DWORD CPDF_CIDFont::GetNextChar(const FX_CHAR* pString, int nStrLen, int& offset) const
-{
- return m_pCMap->GetNextChar(pString, nStrLen, offset);
+FX_DWORD CPDF_CIDFont::GetNextChar(const FX_CHAR* pString,
+ int nStrLen,
+ int& offset) const {
+ return m_pCMap->GetNextChar(pString, nStrLen, offset);
}
-int CPDF_CIDFont::GetCharSize(FX_DWORD charcode) const
-{
- return m_pCMap->GetCharSize(charcode);
+int CPDF_CIDFont::GetCharSize(FX_DWORD charcode) const {
+ return m_pCMap->GetCharSize(charcode);
}
-int CPDF_CIDFont::CountChar(const FX_CHAR* pString, int size) const
-{
- return m_pCMap->CountChar(pString, size);
+int CPDF_CIDFont::CountChar(const FX_CHAR* pString, int size) const {
+ return m_pCMap->CountChar(pString, size);
}
-int CPDF_CIDFont::AppendChar(FX_CHAR* str, FX_DWORD charcode) const
-{
- return m_pCMap->AppendChar(str, charcode);
+int CPDF_CIDFont::AppendChar(FX_CHAR* str, FX_DWORD charcode) const {
+ return m_pCMap->AppendChar(str, charcode);
}
-FX_BOOL CPDF_CIDFont::IsUnicodeCompatible() const
-{
- if (!m_pCMap->IsLoaded() || m_pCID2UnicodeMap == NULL || !m_pCID2UnicodeMap->IsLoaded()) {
- return m_pCMap->m_Coding != CIDCODING_UNKNOWN;
- }
- return TRUE;
+FX_BOOL CPDF_CIDFont::IsUnicodeCompatible() const {
+ if (!m_pCMap->IsLoaded() || m_pCID2UnicodeMap == NULL ||
+ !m_pCID2UnicodeMap->IsLoaded()) {
+ return m_pCMap->m_Coding != CIDCODING_UNKNOWN;
+ }
+ return TRUE;
}
-FX_BOOL CPDF_CIDFont::IsFontStyleFromCharCode(FX_DWORD charcode) const
-{
- return TRUE;
+FX_BOOL CPDF_CIDFont::IsFontStyleFromCharCode(FX_DWORD charcode) const {
+ return TRUE;
}
-void CPDF_CIDFont::LoadSubstFont()
-{
- m_Font.LoadSubst(m_BaseFont, !m_bType1, m_Flags, m_StemV * 5, m_ItalicAngle, g_CharsetCPs[m_Charset], IsVertWriting());
+void CPDF_CIDFont::LoadSubstFont() {
+ m_Font.LoadSubst(m_BaseFont, !m_bType1, m_Flags, m_StemV * 5, m_ItalicAngle,
+ g_CharsetCPs[m_Charset], IsVertWriting());
}
-void CPDF_CIDFont::LoadMetricsArray(CPDF_Array* pArray, CFX_DWordArray& result, int nElements)
-{
- int width_status = 0;
- int iCurElement = 0;
- int first_code = 0, last_code;
- FX_DWORD count = pArray->GetCount();
- for (FX_DWORD i = 0; i < count; i ++) {
- CPDF_Object* pObj = pArray->GetElementValue(i);
- if (pObj == NULL) {
- continue;
+void CPDF_CIDFont::LoadMetricsArray(CPDF_Array* pArray,
+ CFX_DWordArray& result,
+ int nElements) {
+ int width_status = 0;
+ int iCurElement = 0;
+ int first_code = 0, last_code;
+ FX_DWORD count = pArray->GetCount();
+ for (FX_DWORD i = 0; i < count; i++) {
+ CPDF_Object* pObj = pArray->GetElementValue(i);
+ if (pObj == NULL) {
+ continue;
+ }
+ if (pObj->GetType() == PDFOBJ_ARRAY) {
+ if (width_status != 1) {
+ return;
+ }
+ CPDF_Array* pArray = (CPDF_Array*)pObj;
+ FX_DWORD count = pArray->GetCount();
+ for (FX_DWORD j = 0; j < count; j += nElements) {
+ result.Add(first_code);
+ result.Add(first_code);
+ for (int k = 0; k < nElements; k++) {
+ result.Add(pArray->GetInteger(j + k));
}
- if (pObj->GetType() == PDFOBJ_ARRAY) {
- if (width_status != 1) {
- return;
- }
- CPDF_Array* pArray = (CPDF_Array*)pObj;
- FX_DWORD count = pArray->GetCount();
- for (FX_DWORD j = 0; j < count; j += nElements) {
- result.Add(first_code);
- result.Add(first_code);
- for (int k = 0; k < nElements; k ++) {
- result.Add(pArray->GetInteger(j + k));
- }
- first_code ++;
- }
- width_status = 0;
- } else {
- if (width_status == 0) {
- first_code = pObj->GetInteger();
- width_status = 1;
- } else if (width_status == 1) {
- last_code = pObj->GetInteger();
- width_status = 2;
- iCurElement = 0;
- } else {
- if (!iCurElement) {
- result.Add(first_code);
- result.Add(last_code);
- }
- result.Add(pObj->GetInteger());
- iCurElement ++;
- if (iCurElement == nElements) {
- width_status = 0;
- }
- }
+ first_code++;
+ }
+ width_status = 0;
+ } else {
+ if (width_status == 0) {
+ first_code = pObj->GetInteger();
+ width_status = 1;
+ } else if (width_status == 1) {
+ last_code = pObj->GetInteger();
+ width_status = 2;
+ iCurElement = 0;
+ } else {
+ if (!iCurElement) {
+ result.Add(first_code);
+ result.Add(last_code);
}
+ result.Add(pObj->GetInteger());
+ iCurElement++;
+ if (iCurElement == nElements) {
+ width_status = 0;
+ }
+ }
}
+ }
}
-FX_BOOL CPDF_CIDFont::LoadGB2312()
-{
- m_BaseFont = m_pFontDict->GetString(FX_BSTRC("BaseFont"));
- CPDF_Dictionary* pFontDesc = m_pFontDict->GetDict(FX_BSTRC("FontDescriptor"));
- if (pFontDesc) {
- LoadFontDescriptor(pFontDesc);
- }
- m_Charset = CIDSET_GB1;
- m_bType1 = FALSE;
- m_pCMap = CPDF_ModuleMgr::Get()->GetPageModule()->GetFontGlobals()->m_CMapManager.GetPredefinedCMap(
- FX_BSTRC("GBK-EUC-H"), FALSE);
- m_pCID2UnicodeMap = CPDF_ModuleMgr::Get()->GetPageModule()->GetFontGlobals()->m_CMapManager.GetCID2UnicodeMap(m_Charset, FALSE);
- if (!IsEmbedded()) {
- LoadSubstFont();
- }
- CheckFontMetrics();
- m_DefaultWidth = 1000;
- m_pAnsiWidths = FX_Alloc(FX_WORD, 128);
- for (int i = 32; i < 127; i ++) {
- m_pAnsiWidths[i] = 500;
- }
- return TRUE;
+FX_BOOL CPDF_CIDFont::LoadGB2312() {
+ m_BaseFont = m_pFontDict->GetString(FX_BSTRC("BaseFont"));
+ CPDF_Dictionary* pFontDesc = m_pFontDict->GetDict(FX_BSTRC("FontDescriptor"));
+ if (pFontDesc) {
+ LoadFontDescriptor(pFontDesc);
+ }
+ m_Charset = CIDSET_GB1;
+ m_bType1 = FALSE;
+ m_pCMap = CPDF_ModuleMgr::Get()
+ ->GetPageModule()
+ ->GetFontGlobals()
+ ->m_CMapManager.GetPredefinedCMap(FX_BSTRC("GBK-EUC-H"), FALSE);
+ m_pCID2UnicodeMap = CPDF_ModuleMgr::Get()
+ ->GetPageModule()
+ ->GetFontGlobals()
+ ->m_CMapManager.GetCID2UnicodeMap(m_Charset, FALSE);
+ if (!IsEmbedded()) {
+ LoadSubstFont();
+ }
+ CheckFontMetrics();
+ m_DefaultWidth = 1000;
+ m_pAnsiWidths = FX_Alloc(FX_WORD, 128);
+ for (int i = 32; i < 127; i++) {
+ m_pAnsiWidths[i] = 500;
+ }
+ return TRUE;
}
const struct _CIDTransform {
- FX_WORD CID;
- uint8_t a, b, c, d, e, f;
-}
-Japan1_VertCIDs[] = {
- {97, 129, 0, 0, 127, 55, 0},
- {7887, 127, 0, 0, 127, 76, 89},
- {7888, 127, 0, 0, 127, 79, 94},
- {7889, 0, 129, 127, 0, 17, 127},
- {7890, 0, 129, 127, 0, 17, 127},
- {7891, 0, 129, 127, 0, 17, 127},
- {7892, 0, 129, 127, 0, 17, 127},
- {7893, 0, 129, 127, 0, 17, 127},
- {7894, 0, 129, 127, 0, 17, 127},
- {7895, 0, 129, 127, 0, 17, 127},
- {7896, 0, 129, 127, 0, 17, 127},
- {7897, 0, 129, 127, 0, 17, 127},
- {7898, 0, 129, 127, 0, 17, 127},
- {7899, 0, 129, 127, 0, 17, 104},
- {7900, 0, 129, 127, 0, 17, 127},
- {7901, 0, 129, 127, 0, 17, 104},
- {7902, 0, 129, 127, 0, 17, 127},
- {7903, 0, 129, 127, 0, 17, 127},
- {7904, 0, 129, 127, 0, 17, 127},
- {7905, 0, 129, 127, 0, 17, 114},
- {7906, 0, 129, 127, 0, 17, 127},
- {7907, 0, 129, 127, 0, 17, 127},
- {7908, 0, 129, 127, 0, 17, 127},
- {7909, 0, 129, 127, 0, 17, 127},
- {7910, 0, 129, 127, 0, 17, 127},
- {7911, 0, 129, 127, 0, 17, 127},
- {7912, 0, 129, 127, 0, 17, 127},
- {7913, 0, 129, 127, 0, 17, 127},
- {7914, 0, 129, 127, 0, 17, 127},
- {7915, 0, 129, 127, 0, 17, 114},
- {7916, 0, 129, 127, 0, 17, 127},
- {7917, 0, 129, 127, 0, 17, 127},
- {7918, 127, 0, 0, 127, 18, 25},
- {7919, 127, 0, 0, 127, 18, 25},
- {7920, 127, 0, 0, 127, 18, 25},
- {7921, 127, 0, 0, 127, 18, 25},
- {7922, 127, 0, 0, 127, 18, 25},
- {7923, 127, 0, 0, 127, 18, 25},
- {7924, 127, 0, 0, 127, 18, 25},
- {7925, 127, 0, 0, 127, 18, 25},
- {7926, 127, 0, 0, 127, 18, 25},
- {7927, 127, 0, 0, 127, 18, 25},
- {7928, 127, 0, 0, 127, 18, 25},
- {7929, 127, 0, 0, 127, 18, 25},
- {7930, 127, 0, 0, 127, 18, 25},
- {7931, 127, 0, 0, 127, 18, 25},
- {7932, 127, 0, 0, 127, 18, 25},
- {7933, 127, 0, 0, 127, 18, 25},
- {7934, 127, 0, 0, 127, 18, 25},
- {7935, 127, 0, 0, 127, 18, 25},
- {7936, 127, 0, 0, 127, 18, 25},
- {7937, 127, 0, 0, 127, 18, 25},
- {7938, 127, 0, 0, 127, 18, 25},
- {7939, 127, 0, 0, 127, 18, 25},
- {8720, 0, 129, 127, 0, 19, 102},
- {8721, 0, 129, 127, 0, 13, 127},
- {8722, 0, 129, 127, 0, 19, 108},
- {8723, 0, 129, 127, 0, 19, 102},
- {8724, 0, 129, 127, 0, 19, 102},
- {8725, 0, 129, 127, 0, 19, 102},
- {8726, 0, 129, 127, 0, 19, 102},
- {8727, 0, 129, 127, 0, 19, 102},
- {8728, 0, 129, 127, 0, 19, 114},
- {8729, 0, 129, 127, 0, 19, 114},
- {8730, 0, 129, 127, 0, 38, 108},
- {8731, 0, 129, 127, 0, 13, 108},
- {8732, 0, 129, 127, 0, 19, 108},
- {8733, 0, 129, 127, 0, 19, 108},
- {8734, 0, 129, 127, 0, 19, 108},
- {8735, 0, 129, 127, 0, 19, 108},
- {8736, 0, 129, 127, 0, 19, 102},
- {8737, 0, 129, 127, 0, 19, 102},
- {8738, 0, 129, 127, 0, 19, 102},
- {8739, 0, 129, 127, 0, 19, 102},
- {8740, 0, 129, 127, 0, 19, 102},
- {8741, 0, 129, 127, 0, 19, 102},
- {8742, 0, 129, 127, 0, 19, 102},
- {8743, 0, 129, 127, 0, 19, 102},
- {8744, 0, 129, 127, 0, 19, 102},
- {8745, 0, 129, 127, 0, 19, 102},
- {8746, 0, 129, 127, 0, 19, 114},
- {8747, 0, 129, 127, 0, 19, 114},
- {8748, 0, 129, 127, 0, 19, 102},
- {8749, 0, 129, 127, 0, 19, 102},
- {8750, 0, 129, 127, 0, 19, 102},
- {8751, 0, 129, 127, 0, 19, 102},
- {8752, 0, 129, 127, 0, 19, 102},
- {8753, 0, 129, 127, 0, 19, 102},
- {8754, 0, 129, 127, 0, 19, 102},
- {8755, 0, 129, 127, 0, 19, 102},
- {8756, 0, 129, 127, 0, 19, 102},
- {8757, 0, 129, 127, 0, 19, 102},
- {8758, 0, 129, 127, 0, 19, 102},
- {8759, 0, 129, 127, 0, 19, 102},
- {8760, 0, 129, 127, 0, 19, 102},
- {8761, 0, 129, 127, 0, 19, 102},
- {8762, 0, 129, 127, 0, 19, 102},
- {8763, 0, 129, 127, 0, 19, 102},
- {8764, 0, 129, 127, 0, 19, 102},
- {8765, 0, 129, 127, 0, 19, 102},
- {8766, 0, 129, 127, 0, 19, 102},
- {8767, 0, 129, 127, 0, 19, 102},
- {8768, 0, 129, 127, 0, 19, 102},
- {8769, 0, 129, 127, 0, 19, 102},
- {8770, 0, 129, 127, 0, 19, 102},
- {8771, 0, 129, 127, 0, 19, 102},
- {8772, 0, 129, 127, 0, 19, 102},
- {8773, 0, 129, 127, 0, 19, 102},
- {8774, 0, 129, 127, 0, 19, 102},
- {8775, 0, 129, 127, 0, 19, 102},
- {8776, 0, 129, 127, 0, 19, 102},
- {8777, 0, 129, 127, 0, 19, 102},
- {8778, 0, 129, 127, 0, 19, 102},
- {8779, 0, 129, 127, 0, 19, 114},
- {8780, 0, 129, 127, 0, 19, 108},
- {8781, 0, 129, 127, 0, 19, 114},
- {8782, 0, 129, 127, 0, 13, 114},
- {8783, 0, 129, 127, 0, 19, 108},
- {8784, 0, 129, 127, 0, 13, 114},
- {8785, 0, 129, 127, 0, 19, 108},
- {8786, 0, 129, 127, 0, 19, 108},
- {8787, 0, 129, 127, 0, 19, 108},
- {8788, 0, 129, 127, 0, 19, 108},
- {8789, 0, 129, 127, 0, 19, 108},
- {8790, 0, 129, 127, 0, 19, 108},
- {8791, 0, 129, 127, 0, 19, 108},
- {8792, 0, 129, 127, 0, 19, 108},
- {8793, 0, 129, 127, 0, 19, 108},
- {8794, 0, 129, 127, 0, 19, 108},
- {8795, 0, 129, 127, 0, 19, 108},
- {8796, 0, 129, 127, 0, 19, 108},
- {8797, 0, 129, 127, 0, 19, 108},
- {8798, 0, 129, 127, 0, 19, 108},
- {8799, 0, 129, 127, 0, 19, 108},
- {8800, 0, 129, 127, 0, 19, 108},
- {8801, 0, 129, 127, 0, 19, 108},
- {8802, 0, 129, 127, 0, 19, 108},
- {8803, 0, 129, 127, 0, 19, 108},
- {8804, 0, 129, 127, 0, 19, 108},
- {8805, 0, 129, 127, 0, 19, 108},
- {8806, 0, 129, 127, 0, 19, 108},
- {8807, 0, 129, 127, 0, 19, 108},
- {8808, 0, 129, 127, 0, 19, 108},
- {8809, 0, 129, 127, 0, 19, 108},
- {8810, 0, 129, 127, 0, 19, 108},
- {8811, 0, 129, 127, 0, 19, 114},
- {8812, 0, 129, 127, 0, 19, 102},
- {8813, 0, 129, 127, 0, 19, 114},
- {8814, 0, 129, 127, 0, 76, 102},
- {8815, 0, 129, 127, 0, 13, 121},
- {8816, 0, 129, 127, 0, 19, 114},
- {8817, 0, 129, 127, 0, 19, 127},
- {8818, 0, 129, 127, 0, 19, 114},
- {8819, 0, 129, 127, 0, 218, 108},
+ FX_WORD CID;
+ uint8_t a, b, c, d, e, f;
+} Japan1_VertCIDs[] = {
+ {97, 129, 0, 0, 127, 55, 0}, {7887, 127, 0, 0, 127, 76, 89},
+ {7888, 127, 0, 0, 127, 79, 94}, {7889, 0, 129, 127, 0, 17, 127},
+ {7890, 0, 129, 127, 0, 17, 127}, {7891, 0, 129, 127, 0, 17, 127},
+ {7892, 0, 129, 127, 0, 17, 127}, {7893, 0, 129, 127, 0, 17, 127},
+ {7894, 0, 129, 127, 0, 17, 127}, {7895, 0, 129, 127, 0, 17, 127},
+ {7896, 0, 129, 127, 0, 17, 127}, {7897, 0, 129, 127, 0, 17, 127},
+ {7898, 0, 129, 127, 0, 17, 127}, {7899, 0, 129, 127, 0, 17, 104},
+ {7900, 0, 129, 127, 0, 17, 127}, {7901, 0, 129, 127, 0, 17, 104},
+ {7902, 0, 129, 127, 0, 17, 127}, {7903, 0, 129, 127, 0, 17, 127},
+ {7904, 0, 129, 127, 0, 17, 127}, {7905, 0, 129, 127, 0, 17, 114},
+ {7906, 0, 129, 127, 0, 17, 127}, {7907, 0, 129, 127, 0, 17, 127},
+ {7908, 0, 129, 127, 0, 17, 127}, {7909, 0, 129, 127, 0, 17, 127},
+ {7910, 0, 129, 127, 0, 17, 127}, {7911, 0, 129, 127, 0, 17, 127},
+ {7912, 0, 129, 127, 0, 17, 127}, {7913, 0, 129, 127, 0, 17, 127},
+ {7914, 0, 129, 127, 0, 17, 127}, {7915, 0, 129, 127, 0, 17, 114},
+ {7916, 0, 129, 127, 0, 17, 127}, {7917, 0, 129, 127, 0, 17, 127},
+ {7918, 127, 0, 0, 127, 18, 25}, {7919, 127, 0, 0, 127, 18, 25},
+ {7920, 127, 0, 0, 127, 18, 25}, {7921, 127, 0, 0, 127, 18, 25},
+ {7922, 127, 0, 0, 127, 18, 25}, {7923, 127, 0, 0, 127, 18, 25},
+ {7924, 127, 0, 0, 127, 18, 25}, {7925, 127, 0, 0, 127, 18, 25},
+ {7926, 127, 0, 0, 127, 18, 25}, {7927, 127, 0, 0, 127, 18, 25},
+ {7928, 127, 0, 0, 127, 18, 25}, {7929, 127, 0, 0, 127, 18, 25},
+ {7930, 127, 0, 0, 127, 18, 25}, {7931, 127, 0, 0, 127, 18, 25},
+ {7932, 127, 0, 0, 127, 18, 25}, {7933, 127, 0, 0, 127, 18, 25},
+ {7934, 127, 0, 0, 127, 18, 25}, {7935, 127, 0, 0, 127, 18, 25},
+ {7936, 127, 0, 0, 127, 18, 25}, {7937, 127, 0, 0, 127, 18, 25},
+ {7938, 127, 0, 0, 127, 18, 25}, {7939, 127, 0, 0, 127, 18, 25},
+ {8720, 0, 129, 127, 0, 19, 102}, {8721, 0, 129, 127, 0, 13, 127},
+ {8722, 0, 129, 127, 0, 19, 108}, {8723, 0, 129, 127, 0, 19, 102},
+ {8724, 0, 129, 127, 0, 19, 102}, {8725, 0, 129, 127, 0, 19, 102},
+ {8726, 0, 129, 127, 0, 19, 102}, {8727, 0, 129, 127, 0, 19, 102},
+ {8728, 0, 129, 127, 0, 19, 114}, {8729, 0, 129, 127, 0, 19, 114},
+ {8730, 0, 129, 127, 0, 38, 108}, {8731, 0, 129, 127, 0, 13, 108},
+ {8732, 0, 129, 127, 0, 19, 108}, {8733, 0, 129, 127, 0, 19, 108},
+ {8734, 0, 129, 127, 0, 19, 108}, {8735, 0, 129, 127, 0, 19, 108},
+ {8736, 0, 129, 127, 0, 19, 102}, {8737, 0, 129, 127, 0, 19, 102},
+ {8738, 0, 129, 127, 0, 19, 102}, {8739, 0, 129, 127, 0, 19, 102},
+ {8740, 0, 129, 127, 0, 19, 102}, {8741, 0, 129, 127, 0, 19, 102},
+ {8742, 0, 129, 127, 0, 19, 102}, {8743, 0, 129, 127, 0, 19, 102},
+ {8744, 0, 129, 127, 0, 19, 102}, {8745, 0, 129, 127, 0, 19, 102},
+ {8746, 0, 129, 127, 0, 19, 114}, {8747, 0, 129, 127, 0, 19, 114},
+ {8748, 0, 129, 127, 0, 19, 102}, {8749, 0, 129, 127, 0, 19, 102},
+ {8750, 0, 129, 127, 0, 19, 102}, {8751, 0, 129, 127, 0, 19, 102},
+ {8752, 0, 129, 127, 0, 19, 102}, {8753, 0, 129, 127, 0, 19, 102},
+ {8754, 0, 129, 127, 0, 19, 102}, {8755, 0, 129, 127, 0, 19, 102},
+ {8756, 0, 129, 127, 0, 19, 102}, {8757, 0, 129, 127, 0, 19, 102},
+ {8758, 0, 129, 127, 0, 19, 102}, {8759, 0, 129, 127, 0, 19, 102},
+ {8760, 0, 129, 127, 0, 19, 102}, {8761, 0, 129, 127, 0, 19, 102},
+ {8762, 0, 129, 127, 0, 19, 102}, {8763, 0, 129, 127, 0, 19, 102},
+ {8764, 0, 129, 127, 0, 19, 102}, {8765, 0, 129, 127, 0, 19, 102},
+ {8766, 0, 129, 127, 0, 19, 102}, {8767, 0, 129, 127, 0, 19, 102},
+ {8768, 0, 129, 127, 0, 19, 102}, {8769, 0, 129, 127, 0, 19, 102},
+ {8770, 0, 129, 127, 0, 19, 102}, {8771, 0, 129, 127, 0, 19, 102},
+ {8772, 0, 129, 127, 0, 19, 102}, {8773, 0, 129, 127, 0, 19, 102},
+ {8774, 0, 129, 127, 0, 19, 102}, {8775, 0, 129, 127, 0, 19, 102},
+ {8776, 0, 129, 127, 0, 19, 102}, {8777, 0, 129, 127, 0, 19, 102},
+ {8778, 0, 129, 127, 0, 19, 102}, {8779, 0, 129, 127, 0, 19, 114},
+ {8780, 0, 129, 127, 0, 19, 108}, {8781, 0, 129, 127, 0, 19, 114},
+ {8782, 0, 129, 127, 0, 13, 114}, {8783, 0, 129, 127, 0, 19, 108},
+ {8784, 0, 129, 127, 0, 13, 114}, {8785, 0, 129, 127, 0, 19, 108},
+ {8786, 0, 129, 127, 0, 19, 108}, {8787, 0, 129, 127, 0, 19, 108},
+ {8788, 0, 129, 127, 0, 19, 108}, {8789, 0, 129, 127, 0, 19, 108},
+ {8790, 0, 129, 127, 0, 19, 108}, {8791, 0, 129, 127, 0, 19, 108},
+ {8792, 0, 129, 127, 0, 19, 108}, {8793, 0, 129, 127, 0, 19, 108},
+ {8794, 0, 129, 127, 0, 19, 108}, {8795, 0, 129, 127, 0, 19, 108},
+ {8796, 0, 129, 127, 0, 19, 108}, {8797, 0, 129, 127, 0, 19, 108},
+ {8798, 0, 129, 127, 0, 19, 108}, {8799, 0, 129, 127, 0, 19, 108},
+ {8800, 0, 129, 127, 0, 19, 108}, {8801, 0, 129, 127, 0, 19, 108},
+ {8802, 0, 129, 127, 0, 19, 108}, {8803, 0, 129, 127, 0, 19, 108},
+ {8804, 0, 129, 127, 0, 19, 108}, {8805, 0, 129, 127, 0, 19, 108},
+ {8806, 0, 129, 127, 0, 19, 108}, {8807, 0, 129, 127, 0, 19, 108},
+ {8808, 0, 129, 127, 0, 19, 108}, {8809, 0, 129, 127, 0, 19, 108},
+ {8810, 0, 129, 127, 0, 19, 108}, {8811, 0, 129, 127, 0, 19, 114},
+ {8812, 0, 129, 127, 0, 19, 102}, {8813, 0, 129, 127, 0, 19, 114},
+ {8814, 0, 129, 127, 0, 76, 102}, {8815, 0, 129, 127, 0, 13, 121},
+ {8816, 0, 129, 127, 0, 19, 114}, {8817, 0, 129, 127, 0, 19, 127},
+ {8818, 0, 129, 127, 0, 19, 114}, {8819, 0, 129, 127, 0, 218, 108},
};
-const uint8_t* CPDF_CIDFont::GetCIDTransform(FX_WORD CID) const
-{
- if (m_Charset != CIDSET_JAPAN1 || m_pFontFile != NULL) {
- return NULL;
- }
- int begin = 0;
- int end = sizeof Japan1_VertCIDs / sizeof(struct _CIDTransform) - 1;
- while (begin <= end) {
- int middle = (begin + end) / 2;
- FX_WORD middlecode = Japan1_VertCIDs[middle].CID;
- if (middlecode > CID) {
- end = middle - 1;
- } else if (middlecode < CID) {
- begin = middle + 1;
- } else {
- return &Japan1_VertCIDs[middle].a;
- }
- }
+const uint8_t* CPDF_CIDFont::GetCIDTransform(FX_WORD CID) const {
+ if (m_Charset != CIDSET_JAPAN1 || m_pFontFile != NULL) {
return NULL;
+ }
+ int begin = 0;
+ int end = sizeof Japan1_VertCIDs / sizeof(struct _CIDTransform) - 1;
+ while (begin <= end) {
+ int middle = (begin + end) / 2;
+ FX_WORD middlecode = Japan1_VertCIDs[middle].CID;
+ if (middlecode > CID) {
+ end = middle - 1;
+ } else if (middlecode < CID) {
+ begin = middle + 1;
+ } else {
+ return &Japan1_VertCIDs[middle].a;
+ }
+ }
+ return NULL;
}
diff --git a/core/src/fpdfapi/fpdf_font/ttgsubtable.cpp b/core/src/fpdfapi/fpdf_font/ttgsubtable.cpp
index a65359c1d4..a1717a9fd4 100644
--- a/core/src/fpdfapi/fpdf_font/ttgsubtable.cpp
+++ b/core/src/fpdfapi/fpdf_font/ttgsubtable.cpp
@@ -9,443 +9,411 @@
#include "../../../include/fxge/fx_freetype.h"
#include "ttgsubtable.h"
-CFX_GlyphMap::CFX_GlyphMap()
-{
-}
-CFX_GlyphMap::~CFX_GlyphMap()
-{
-}
+CFX_GlyphMap::CFX_GlyphMap() {}
+CFX_GlyphMap::~CFX_GlyphMap() {}
extern "C" {
- static int _CompareInt(const void* p1, const void* p2)
- {
- return (*(FX_DWORD*)p1) - (*(FX_DWORD*)p2);
- }
+static int _CompareInt(const void* p1, const void* p2) {
+ return (*(FX_DWORD*)p1) - (*(FX_DWORD*)p2);
+}
};
struct _IntPair {
- int32_t key;
- int32_t value;
+ int32_t key;
+ int32_t value;
};
-void CFX_GlyphMap::SetAt(int key, int value)
-{
- FX_DWORD count = m_Buffer.GetSize() / sizeof(_IntPair);
- _IntPair* buf = (_IntPair*)m_Buffer.GetBuffer();
- _IntPair pair = {key, value};
- if (count == 0 || key > buf[count - 1].key) {
- m_Buffer.AppendBlock(&pair, sizeof(_IntPair));
- return;
- }
- int low = 0, high = count - 1;
- while (low <= high) {
- int mid = (low + high) / 2;
- if (buf[mid].key < key) {
- low = mid + 1;
- } else if (buf[mid].key > key) {
- high = mid - 1;
- } else {
- buf[mid].value = value;
- return;
- }
- }
- m_Buffer.InsertBlock(low * sizeof(_IntPair), &pair, sizeof(_IntPair));
+void CFX_GlyphMap::SetAt(int key, int value) {
+ FX_DWORD count = m_Buffer.GetSize() / sizeof(_IntPair);
+ _IntPair* buf = (_IntPair*)m_Buffer.GetBuffer();
+ _IntPair pair = {key, value};
+ if (count == 0 || key > buf[count - 1].key) {
+ m_Buffer.AppendBlock(&pair, sizeof(_IntPair));
+ return;
+ }
+ int low = 0, high = count - 1;
+ while (low <= high) {
+ int mid = (low + high) / 2;
+ if (buf[mid].key < key) {
+ low = mid + 1;
+ } else if (buf[mid].key > key) {
+ high = mid - 1;
+ } else {
+ buf[mid].value = value;
+ return;
+ }
+ }
+ m_Buffer.InsertBlock(low * sizeof(_IntPair), &pair, sizeof(_IntPair));
}
-FX_BOOL CFX_GlyphMap::Lookup(int key, int &value)
-{
- void* pResult = FXSYS_bsearch(&key, m_Buffer.GetBuffer(), m_Buffer.GetSize() / sizeof(_IntPair),
- sizeof(_IntPair), _CompareInt);
- if (pResult == NULL) {
- return FALSE;
- }
- value = ((FX_DWORD*)pResult)[1];
- return TRUE;
+FX_BOOL CFX_GlyphMap::Lookup(int key, int& value) {
+ void* pResult = FXSYS_bsearch(&key, m_Buffer.GetBuffer(),
+ m_Buffer.GetSize() / sizeof(_IntPair),
+ sizeof(_IntPair), _CompareInt);
+ if (pResult == NULL) {
+ return FALSE;
+ }
+ value = ((FX_DWORD*)pResult)[1];
+ return TRUE;
}
-bool CFX_CTTGSUBTable::LoadGSUBTable(FT_Bytes gsub)
-{
- header.Version = gsub[0] << 24 | gsub[1] << 16 | gsub[2] << 8 | gsub[3];
- if(header.Version != 0x00010000) {
- return false;
- }
- header.ScriptList = gsub[4] << 8 | gsub[5];
- header.FeatureList = gsub[6] << 8 | gsub[7];
- header.LookupList = gsub[8] << 8 | gsub[9];
- return Parse(
- &gsub[header.ScriptList],
- &gsub[header.FeatureList],
+bool CFX_CTTGSUBTable::LoadGSUBTable(FT_Bytes gsub) {
+ header.Version = gsub[0] << 24 | gsub[1] << 16 | gsub[2] << 8 | gsub[3];
+ if (header.Version != 0x00010000) {
+ return false;
+ }
+ header.ScriptList = gsub[4] << 8 | gsub[5];
+ header.FeatureList = gsub[6] << 8 | gsub[7];
+ header.LookupList = gsub[8] << 8 | gsub[9];
+ return Parse(&gsub[header.ScriptList], &gsub[header.FeatureList],
&gsub[header.LookupList]);
}
-bool CFX_CTTGSUBTable::GetVerticalGlyph(TT_uint32_t glyphnum, TT_uint32_t *vglyphnum)
-{
- TT_uint32_t tag[] = {
- (TT_uint8_t)'v' << 24 |
- (TT_uint8_t)'r' << 16 |
- (TT_uint8_t)'t' << 8 |
- (TT_uint8_t)'2',
- (TT_uint8_t)'v' << 24 |
- (TT_uint8_t)'e' << 16 |
- (TT_uint8_t)'r' << 8 |
- (TT_uint8_t)'t',
- };
- if (!m_bFeautureMapLoad) {
- for (int i = 0; i < ScriptList.ScriptCount; i++) {
- for (int j = 0; j < (ScriptList.ScriptRecord + i)->Script.LangSysCount; ++j) {
- for (int k = 0; k < ((ScriptList.ScriptRecord + i)->Script.LangSysRecord + j)->LangSys.FeatureCount; ++k) {
- FX_DWORD index = *(((ScriptList.ScriptRecord + i)->Script.LangSysRecord + j)->LangSys.FeatureIndex + k);
- if (FeatureList.FeatureRecord[index].FeatureTag == tag[0] || FeatureList.FeatureRecord[index].FeatureTag == tag[1]) {
- FX_DWORD value;
- if (!m_featureMap.Lookup(index, value)) {
- m_featureMap.SetAt(index, index);
- }
- }
- }
- }
- }
- if (!m_featureMap.GetStartPosition()) {
- for (int i = 0; i < FeatureList.FeatureCount; i ++) {
- if (FeatureList.FeatureRecord[i].FeatureTag == tag[0] || FeatureList.FeatureRecord[i].FeatureTag == tag[1]) {
- FX_DWORD value;
- if (!m_featureMap.Lookup(i, value)) {
- m_featureMap.SetAt(i, i);
- }
- }
+bool CFX_CTTGSUBTable::GetVerticalGlyph(TT_uint32_t glyphnum,
+ TT_uint32_t* vglyphnum) {
+ TT_uint32_t tag[] = {
+ (TT_uint8_t)'v' << 24 | (TT_uint8_t)'r' << 16 | (TT_uint8_t)'t' << 8 |
+ (TT_uint8_t)'2',
+ (TT_uint8_t)'v' << 24 | (TT_uint8_t)'e' << 16 | (TT_uint8_t)'r' << 8 |
+ (TT_uint8_t)'t',
+ };
+ if (!m_bFeautureMapLoad) {
+ for (int i = 0; i < ScriptList.ScriptCount; i++) {
+ for (int j = 0; j < (ScriptList.ScriptRecord + i)->Script.LangSysCount;
+ ++j) {
+ for (int k = 0;
+ k < ((ScriptList.ScriptRecord + i)->Script.LangSysRecord + j)
+ ->LangSys.FeatureCount;
+ ++k) {
+ FX_DWORD index =
+ *(((ScriptList.ScriptRecord + i)->Script.LangSysRecord + j)
+ ->LangSys.FeatureIndex +
+ k);
+ if (FeatureList.FeatureRecord[index].FeatureTag == tag[0] ||
+ FeatureList.FeatureRecord[index].FeatureTag == tag[1]) {
+ FX_DWORD value;
+ if (!m_featureMap.Lookup(index, value)) {
+ m_featureMap.SetAt(index, index);
}
+ }
}
- m_bFeautureMapLoad = TRUE;
- }
- FX_POSITION pos = m_featureMap.GetStartPosition();
- while (pos) {
- FX_DWORD index, value;
- m_featureMap.GetNextAssoc(pos, index, value);
- if(GetVerticalGlyphSub(glyphnum, vglyphnum, &FeatureList.FeatureRecord[value].Feature)) {
- return true;
+ }
+ }
+ if (!m_featureMap.GetStartPosition()) {
+ for (int i = 0; i < FeatureList.FeatureCount; i++) {
+ if (FeatureList.FeatureRecord[i].FeatureTag == tag[0] ||
+ FeatureList.FeatureRecord[i].FeatureTag == tag[1]) {
+ FX_DWORD value;
+ if (!m_featureMap.Lookup(i, value)) {
+ m_featureMap.SetAt(i, i);
+ }
}
- }
- return false;
+ }
+ }
+ m_bFeautureMapLoad = TRUE;
+ }
+ FX_POSITION pos = m_featureMap.GetStartPosition();
+ while (pos) {
+ FX_DWORD index, value;
+ m_featureMap.GetNextAssoc(pos, index, value);
+ if (GetVerticalGlyphSub(glyphnum, vglyphnum,
+ &FeatureList.FeatureRecord[value].Feature)) {
+ return true;
+ }
+ }
+ return false;
+}
+bool CFX_CTTGSUBTable::GetVerticalGlyphSub(TT_uint32_t glyphnum,
+ TT_uint32_t* vglyphnum,
+ struct TFeature* Feature) {
+ for (int i = 0; i < Feature->LookupCount; i++) {
+ int index = Feature->LookupListIndex[i];
+ if (index < 0 || LookupList.LookupCount < index) {
+ continue;
+ }
+ if (LookupList.Lookup[index].LookupType == 1) {
+ if (GetVerticalGlyphSub2(glyphnum, vglyphnum,
+ &LookupList.Lookup[index])) {
+ return true;
+ }
+ }
+ }
+ return false;
}
-bool CFX_CTTGSUBTable::GetVerticalGlyphSub(
- TT_uint32_t glyphnum,
- TT_uint32_t *vglyphnum,
- struct TFeature *Feature)
-{
- for(int i = 0; i < Feature->LookupCount; i++) {
- int index = Feature->LookupListIndex[i];
- if(index < 0 || LookupList.LookupCount < index) {
- continue;
+bool CFX_CTTGSUBTable::GetVerticalGlyphSub2(TT_uint32_t glyphnum,
+ TT_uint32_t* vglyphnum,
+ struct TLookup* Lookup) {
+ for (int i = 0; i < Lookup->SubTableCount; i++) {
+ switch (Lookup->SubTable[i]->SubstFormat) {
+ case 1: {
+ TSingleSubstFormat1* tbl1 = (TSingleSubstFormat1*)Lookup->SubTable[i];
+ if (GetCoverageIndex(tbl1->Coverage, glyphnum) >= 0) {
+ *vglyphnum = glyphnum + tbl1->DeltaGlyphID;
+ return true;
}
- if(LookupList.Lookup[index].LookupType == 1) {
- if(GetVerticalGlyphSub2(
- glyphnum,
- vglyphnum,
- &LookupList.Lookup[index])) {
- return true;
- }
+ break;
+ }
+ case 2: {
+ TSingleSubstFormat2* tbl2 = (TSingleSubstFormat2*)Lookup->SubTable[i];
+ int index = -1;
+ index = GetCoverageIndex(tbl2->Coverage, glyphnum);
+ if (0 <= index && index < tbl2->GlyphCount) {
+ *vglyphnum = tbl2->Substitute[index];
+ return true;
}
+ break;
+ }
}
- return false;
+ }
+ return false;
}
-bool CFX_CTTGSUBTable::GetVerticalGlyphSub2(
- TT_uint32_t glyphnum,
- TT_uint32_t *vglyphnum,
- struct TLookup *Lookup)
-{
- for(int i = 0; i < Lookup->SubTableCount; i++) {
- switch(Lookup->SubTable[i]->SubstFormat) {
- case 1: {
- TSingleSubstFormat1 *tbl1 = (TSingleSubstFormat1*)Lookup->SubTable[i];
- if(GetCoverageIndex(tbl1->Coverage, glyphnum) >= 0) {
- *vglyphnum = glyphnum + tbl1->DeltaGlyphID;
- return true;
- }
- break;
- }
- case 2: {
- TSingleSubstFormat2 *tbl2 = (TSingleSubstFormat2*)Lookup->SubTable[i];
- int index = -1;
- index = GetCoverageIndex(tbl2->Coverage, glyphnum);
- if(0 <= index && index < tbl2->GlyphCount) {
- *vglyphnum = tbl2->Substitute[index];
- return true;
- }
- break;
- }
+int CFX_CTTGSUBTable::GetCoverageIndex(struct TCoverageFormatBase* Coverage,
+ TT_uint32_t g) {
+ int i = 0;
+ if (Coverage == NULL) {
+ return -1;
+ }
+ switch (Coverage->CoverageFormat) {
+ case 1: {
+ TCoverageFormat1* c1 = (TCoverageFormat1*)Coverage;
+ for (i = 0; i < c1->GlyphCount; i++) {
+ if ((TT_uint32_t)c1->GlyphArray[i] == g) {
+ return i;
}
+ }
+ return -1;
+ }
+ case 2: {
+ TCoverageFormat2* c2 = (TCoverageFormat2*)Coverage;
+ for (i = 0; i < c2->RangeCount; i++) {
+ TT_uint32_t s = c2->RangeRecord[i].Start;
+ TT_uint32_t e = c2->RangeRecord[i].End;
+ TT_uint32_t si = c2->RangeRecord[i].StartCoverageIndex;
+ if (s <= g && g <= e) {
+ return si + g - s;
+ }
+ }
+ return -1;
}
- return false;
-}
-int CFX_CTTGSUBTable::GetCoverageIndex(struct TCoverageFormatBase *Coverage, TT_uint32_t g)
-{
- int i = 0;
- if(Coverage == NULL) {
- return -1;
- }
- switch(Coverage->CoverageFormat) {
- case 1: {
- TCoverageFormat1 *c1 = (TCoverageFormat1*)Coverage;
- for(i = 0; i < c1->GlyphCount; i++) {
- if((TT_uint32_t)c1->GlyphArray[i] == g) {
- return i;
- }
- }
- return -1;
- }
- case 2: {
- TCoverageFormat2 *c2 = (TCoverageFormat2*)Coverage;
- for(i = 0; i < c2->RangeCount; i++) {
- TT_uint32_t s = c2->RangeRecord[i].Start;
- TT_uint32_t e = c2->RangeRecord[i].End;
- TT_uint32_t si = c2->RangeRecord[i].StartCoverageIndex;
- if (s <= g && g <= e) {
- return si + g - s;
- }
- }
- return -1;
- }
- }
- return -1;
+ }
+ return -1;
}
-bool CFX_CTTGSUBTable::Parse(
- FT_Bytes scriptlist,
- FT_Bytes featurelist,
- FT_Bytes lookuplist)
-{
- ParseScriptList(scriptlist, &ScriptList);
- ParseFeatureList(featurelist, &FeatureList);
- ParseLookupList(lookuplist, &LookupList);
- return true;
+bool CFX_CTTGSUBTable::Parse(FT_Bytes scriptlist,
+ FT_Bytes featurelist,
+ FT_Bytes lookuplist) {
+ ParseScriptList(scriptlist, &ScriptList);
+ ParseFeatureList(featurelist, &FeatureList);
+ ParseLookupList(lookuplist, &LookupList);
+ return true;
}
-void CFX_CTTGSUBTable::ParseScriptList(FT_Bytes raw, struct TScriptList *rec)
-{
- int i;
- FT_Bytes sp = raw;
- rec->ScriptCount = GetUInt16(sp);
- if(rec->ScriptCount <= 0) {
- return;
- }
- rec->ScriptRecord = new struct TScriptRecord[rec->ScriptCount];
- for(i = 0; i < rec->ScriptCount; i++) {
- rec->ScriptRecord[i].ScriptTag = GetUInt32(sp);
- TT_uint16_t offset = GetUInt16(sp);
- ParseScript(
- &raw[offset],
- &rec->ScriptRecord[i].Script);
- }
+void CFX_CTTGSUBTable::ParseScriptList(FT_Bytes raw, struct TScriptList* rec) {
+ int i;
+ FT_Bytes sp = raw;
+ rec->ScriptCount = GetUInt16(sp);
+ if (rec->ScriptCount <= 0) {
+ return;
+ }
+ rec->ScriptRecord = new struct TScriptRecord[rec->ScriptCount];
+ for (i = 0; i < rec->ScriptCount; i++) {
+ rec->ScriptRecord[i].ScriptTag = GetUInt32(sp);
+ TT_uint16_t offset = GetUInt16(sp);
+ ParseScript(&raw[offset], &rec->ScriptRecord[i].Script);
+ }
}
-void CFX_CTTGSUBTable::ParseScript(FT_Bytes raw, struct TScript *rec)
-{
- int i;
- FT_Bytes sp = raw;
- rec->DefaultLangSys = GetUInt16(sp);
- rec->LangSysCount = GetUInt16(sp);
- if(rec->LangSysCount <= 0) {
- return;
- }
- rec->LangSysRecord = new struct TLangSysRecord[rec->LangSysCount];
- for(i = 0; i < rec->LangSysCount; i++) {
- rec->LangSysRecord[i].LangSysTag = GetUInt32(sp);
- TT_uint16_t offset = GetUInt16(sp);
- ParseLangSys(
- &raw[offset],
- &rec->LangSysRecord[i].LangSys);
- }
+void CFX_CTTGSUBTable::ParseScript(FT_Bytes raw, struct TScript* rec) {
+ int i;
+ FT_Bytes sp = raw;
+ rec->DefaultLangSys = GetUInt16(sp);
+ rec->LangSysCount = GetUInt16(sp);
+ if (rec->LangSysCount <= 0) {
+ return;
+ }
+ rec->LangSysRecord = new struct TLangSysRecord[rec->LangSysCount];
+ for (i = 0; i < rec->LangSysCount; i++) {
+ rec->LangSysRecord[i].LangSysTag = GetUInt32(sp);
+ TT_uint16_t offset = GetUInt16(sp);
+ ParseLangSys(&raw[offset], &rec->LangSysRecord[i].LangSys);
+ }
}
-void CFX_CTTGSUBTable::ParseLangSys(FT_Bytes raw, struct TLangSys *rec)
-{
- FT_Bytes sp = raw;
- rec->LookupOrder = GetUInt16(sp);
- rec->ReqFeatureIndex = GetUInt16(sp);
- rec->FeatureCount = GetUInt16(sp);
- if(rec->FeatureCount <= 0) {
- return;
- }
- rec->FeatureIndex = new TT_uint16_t[rec->FeatureCount];
- FXSYS_memset(rec->FeatureIndex, 0, sizeof(TT_uint16_t) * rec->FeatureCount);
- for (int i = 0; i < rec->FeatureCount; ++i) {
- rec->FeatureIndex[i] = GetUInt16(sp);
- }
+void CFX_CTTGSUBTable::ParseLangSys(FT_Bytes raw, struct TLangSys* rec) {
+ FT_Bytes sp = raw;
+ rec->LookupOrder = GetUInt16(sp);
+ rec->ReqFeatureIndex = GetUInt16(sp);
+ rec->FeatureCount = GetUInt16(sp);
+ if (rec->FeatureCount <= 0) {
+ return;
+ }
+ rec->FeatureIndex = new TT_uint16_t[rec->FeatureCount];
+ FXSYS_memset(rec->FeatureIndex, 0, sizeof(TT_uint16_t) * rec->FeatureCount);
+ for (int i = 0; i < rec->FeatureCount; ++i) {
+ rec->FeatureIndex[i] = GetUInt16(sp);
+ }
}
-void CFX_CTTGSUBTable::ParseFeatureList(FT_Bytes raw, TFeatureList *rec)
-{
- int i;
- FT_Bytes sp = raw;
- rec->FeatureCount = GetUInt16(sp);
- if(rec->FeatureCount <= 0) {
- return;
- }
- rec->FeatureRecord = new struct TFeatureRecord[rec->FeatureCount];
- for(i = 0; i < rec->FeatureCount; i++) {
- rec->FeatureRecord[i].FeatureTag = GetUInt32(sp);
- TT_uint16_t offset = GetUInt16(sp);
- ParseFeature(
- &raw[offset],
- &rec->FeatureRecord[i].Feature);
- }
+void CFX_CTTGSUBTable::ParseFeatureList(FT_Bytes raw, TFeatureList* rec) {
+ int i;
+ FT_Bytes sp = raw;
+ rec->FeatureCount = GetUInt16(sp);
+ if (rec->FeatureCount <= 0) {
+ return;
+ }
+ rec->FeatureRecord = new struct TFeatureRecord[rec->FeatureCount];
+ for (i = 0; i < rec->FeatureCount; i++) {
+ rec->FeatureRecord[i].FeatureTag = GetUInt32(sp);
+ TT_uint16_t offset = GetUInt16(sp);
+ ParseFeature(&raw[offset], &rec->FeatureRecord[i].Feature);
+ }
}
-void CFX_CTTGSUBTable::ParseFeature(FT_Bytes raw, TFeature *rec)
-{
- int i;
- FT_Bytes sp = raw;
- rec->FeatureParams = GetUInt16(sp);
- rec->LookupCount = GetUInt16(sp);
- if(rec->LookupCount <= 0) {
- return;
- }
- rec->LookupListIndex = new TT_uint16_t[rec->LookupCount];
- for(i = 0; i < rec->LookupCount; i++) {
- rec->LookupListIndex[i] = GetUInt16(sp);
- }
+void CFX_CTTGSUBTable::ParseFeature(FT_Bytes raw, TFeature* rec) {
+ int i;
+ FT_Bytes sp = raw;
+ rec->FeatureParams = GetUInt16(sp);
+ rec->LookupCount = GetUInt16(sp);
+ if (rec->LookupCount <= 0) {
+ return;
+ }
+ rec->LookupListIndex = new TT_uint16_t[rec->LookupCount];
+ for (i = 0; i < rec->LookupCount; i++) {
+ rec->LookupListIndex[i] = GetUInt16(sp);
+ }
}
-void CFX_CTTGSUBTable::ParseLookupList(FT_Bytes raw, TLookupList *rec)
-{
- int i;
- FT_Bytes sp = raw;
- rec->LookupCount = GetUInt16(sp);
- if(rec->LookupCount <= 0) {
- return;
- }
- rec->Lookup = new struct TLookup[rec->LookupCount];
- for(i = 0; i < rec->LookupCount; i++) {
- TT_uint16_t offset = GetUInt16(sp);
- ParseLookup(
- &raw[offset],
- &rec->Lookup[i]);
- }
+void CFX_CTTGSUBTable::ParseLookupList(FT_Bytes raw, TLookupList* rec) {
+ int i;
+ FT_Bytes sp = raw;
+ rec->LookupCount = GetUInt16(sp);
+ if (rec->LookupCount <= 0) {
+ return;
+ }
+ rec->Lookup = new struct TLookup[rec->LookupCount];
+ for (i = 0; i < rec->LookupCount; i++) {
+ TT_uint16_t offset = GetUInt16(sp);
+ ParseLookup(&raw[offset], &rec->Lookup[i]);
+ }
}
-void CFX_CTTGSUBTable::ParseLookup(FT_Bytes raw, TLookup *rec)
-{
- int i;
- FT_Bytes sp = raw;
- rec->LookupType = GetUInt16(sp);
- rec->LookupFlag = GetUInt16(sp);
- rec->SubTableCount = GetUInt16(sp);
- if(rec->SubTableCount <= 0) {
- return;
- }
- rec->SubTable = new struct TSubTableBase*[rec->SubTableCount];
- for(i = 0; i < rec->SubTableCount; i++) {
- rec->SubTable[i] = NULL;
- }
- if(rec->LookupType != 1) {
- return;
- }
- for(i = 0; i < rec->SubTableCount; i++) {
- TT_uint16_t offset = GetUInt16(sp);
- ParseSingleSubst(
- &raw[offset],
- &rec->SubTable[i]);
- }
+void CFX_CTTGSUBTable::ParseLookup(FT_Bytes raw, TLookup* rec) {
+ int i;
+ FT_Bytes sp = raw;
+ rec->LookupType = GetUInt16(sp);
+ rec->LookupFlag = GetUInt16(sp);
+ rec->SubTableCount = GetUInt16(sp);
+ if (rec->SubTableCount <= 0) {
+ return;
+ }
+ rec->SubTable = new struct TSubTableBase*[rec->SubTableCount];
+ for (i = 0; i < rec->SubTableCount; i++) {
+ rec->SubTable[i] = NULL;
+ }
+ if (rec->LookupType != 1) {
+ return;
+ }
+ for (i = 0; i < rec->SubTableCount; i++) {
+ TT_uint16_t offset = GetUInt16(sp);
+ ParseSingleSubst(&raw[offset], &rec->SubTable[i]);
+ }
}
-void CFX_CTTGSUBTable::ParseCoverage(FT_Bytes raw, TCoverageFormatBase **rec)
-{
- FT_Bytes sp = raw;
- TT_uint16_t Format = GetUInt16(sp);
- switch(Format) {
- case 1:
- *rec = new TCoverageFormat1();
- ParseCoverageFormat1(raw, (TCoverageFormat1*)*rec);
- break;
- case 2:
- *rec = new TCoverageFormat2();
- ParseCoverageFormat2(raw, (TCoverageFormat2*)*rec);
- break;
- }
+void CFX_CTTGSUBTable::ParseCoverage(FT_Bytes raw, TCoverageFormatBase** rec) {
+ FT_Bytes sp = raw;
+ TT_uint16_t Format = GetUInt16(sp);
+ switch (Format) {
+ case 1:
+ *rec = new TCoverageFormat1();
+ ParseCoverageFormat1(raw, (TCoverageFormat1*)*rec);
+ break;
+ case 2:
+ *rec = new TCoverageFormat2();
+ ParseCoverageFormat2(raw, (TCoverageFormat2*)*rec);
+ break;
+ }
}
-void CFX_CTTGSUBTable::ParseCoverageFormat1(FT_Bytes raw, TCoverageFormat1 *rec)
-{
- int i;
- FT_Bytes sp = raw;
- GetUInt16(sp);
- rec->GlyphCount = GetUInt16(sp);
- if(rec->GlyphCount <= 0) {
- return;
- }
- rec->GlyphArray = new TT_uint16_t[rec->GlyphCount];
- for(i = 0; i < rec->GlyphCount; i++) {
- rec->GlyphArray[i] = GetUInt16(sp);
- }
+void CFX_CTTGSUBTable::ParseCoverageFormat1(FT_Bytes raw,
+ TCoverageFormat1* rec) {
+ int i;
+ FT_Bytes sp = raw;
+ GetUInt16(sp);
+ rec->GlyphCount = GetUInt16(sp);
+ if (rec->GlyphCount <= 0) {
+ return;
+ }
+ rec->GlyphArray = new TT_uint16_t[rec->GlyphCount];
+ for (i = 0; i < rec->GlyphCount; i++) {
+ rec->GlyphArray[i] = GetUInt16(sp);
+ }
}
-void CFX_CTTGSUBTable::ParseCoverageFormat2(FT_Bytes raw, TCoverageFormat2 *rec)
-{
- int i;
- FT_Bytes sp = raw;
- GetUInt16(sp);
- rec->RangeCount = GetUInt16(sp);
- if(rec->RangeCount <= 0) {
- return;
- }
- rec->RangeRecord = new TRangeRecord[rec->RangeCount];
- for(i = 0; i < rec->RangeCount; i++) {
- rec->RangeRecord[i].Start = GetUInt16(sp);
- rec->RangeRecord[i].End = GetUInt16(sp);
- rec->RangeRecord[i].StartCoverageIndex = GetUInt16(sp);
- }
+void CFX_CTTGSUBTable::ParseCoverageFormat2(FT_Bytes raw,
+ TCoverageFormat2* rec) {
+ int i;
+ FT_Bytes sp = raw;
+ GetUInt16(sp);
+ rec->RangeCount = GetUInt16(sp);
+ if (rec->RangeCount <= 0) {
+ return;
+ }
+ rec->RangeRecord = new TRangeRecord[rec->RangeCount];
+ for (i = 0; i < rec->RangeCount; i++) {
+ rec->RangeRecord[i].Start = GetUInt16(sp);
+ rec->RangeRecord[i].End = GetUInt16(sp);
+ rec->RangeRecord[i].StartCoverageIndex = GetUInt16(sp);
+ }
}
-void CFX_CTTGSUBTable::ParseSingleSubst(FT_Bytes raw, TSubTableBase **rec)
-{
- FT_Bytes sp = raw;
- TT_uint16_t Format = GetUInt16(sp);
- switch(Format) {
- case 1:
- *rec = new TSingleSubstFormat1();
- ParseSingleSubstFormat1(raw, (TSingleSubstFormat1*)*rec);
- break;
- case 2:
- *rec = new TSingleSubstFormat2();
- ParseSingleSubstFormat2(raw, (TSingleSubstFormat2*)*rec);
- break;
- }
+void CFX_CTTGSUBTable::ParseSingleSubst(FT_Bytes raw, TSubTableBase** rec) {
+ FT_Bytes sp = raw;
+ TT_uint16_t Format = GetUInt16(sp);
+ switch (Format) {
+ case 1:
+ *rec = new TSingleSubstFormat1();
+ ParseSingleSubstFormat1(raw, (TSingleSubstFormat1*)*rec);
+ break;
+ case 2:
+ *rec = new TSingleSubstFormat2();
+ ParseSingleSubstFormat2(raw, (TSingleSubstFormat2*)*rec);
+ break;
+ }
}
-void CFX_CTTGSUBTable::ParseSingleSubstFormat1(FT_Bytes raw, TSingleSubstFormat1 *rec)
-{
- FT_Bytes sp = raw;
- GetUInt16(sp);
- TT_uint16_t offset = GetUInt16(sp);
- ParseCoverage(
- &raw[offset],
- &rec->Coverage);
- rec->DeltaGlyphID = GetInt16(sp);
+void CFX_CTTGSUBTable::ParseSingleSubstFormat1(FT_Bytes raw,
+ TSingleSubstFormat1* rec) {
+ FT_Bytes sp = raw;
+ GetUInt16(sp);
+ TT_uint16_t offset = GetUInt16(sp);
+ ParseCoverage(&raw[offset], &rec->Coverage);
+ rec->DeltaGlyphID = GetInt16(sp);
}
-void CFX_CTTGSUBTable::ParseSingleSubstFormat2(FT_Bytes raw, TSingleSubstFormat2 *rec)
-{
- int i;
- FT_Bytes sp = raw;
- GetUInt16(sp);
- TT_uint16_t offset = GetUInt16(sp);
- ParseCoverage(
- &raw[offset],
- &rec->Coverage);
- rec->GlyphCount = GetUInt16(sp);
- if(rec->GlyphCount <= 0) {
- return;
- }
- rec->Substitute = new TT_uint16_t[rec->GlyphCount];
- for(i = 0; i < rec->GlyphCount; i++) {
- rec->Substitute[i] = GetUInt16(sp);
- }
+void CFX_CTTGSUBTable::ParseSingleSubstFormat2(FT_Bytes raw,
+ TSingleSubstFormat2* rec) {
+ int i;
+ FT_Bytes sp = raw;
+ GetUInt16(sp);
+ TT_uint16_t offset = GetUInt16(sp);
+ ParseCoverage(&raw[offset], &rec->Coverage);
+ rec->GlyphCount = GetUInt16(sp);
+ if (rec->GlyphCount <= 0) {
+ return;
+ }
+ rec->Substitute = new TT_uint16_t[rec->GlyphCount];
+ for (i = 0; i < rec->GlyphCount; i++) {
+ rec->Substitute[i] = GetUInt16(sp);
+ }
}
-FX_BOOL CFX_GSUBTable::GetVerticalGlyph(FX_DWORD glyphnum, FX_DWORD* vglyphnum)
-{
- return m_GsubImp.GetVerticalGlyph(glyphnum, vglyphnum);
+FX_BOOL CFX_GSUBTable::GetVerticalGlyph(FX_DWORD glyphnum,
+ FX_DWORD* vglyphnum) {
+ return m_GsubImp.GetVerticalGlyph(glyphnum, vglyphnum);
}
// static
-IFX_GSUBTable* IFX_GSUBTable::Create(CFX_Font* pFont)
-{
- if (!pFont) {
- return NULL;
- }
- if (NULL == pFont->m_pGsubData) {
- unsigned long length = 0;
- int error = FXFT_Load_Sfnt_Table(pFont->m_Face, FT_MAKE_TAG('G', 'S', 'U', 'B'), 0, NULL, &length);
- if (!error) {
- pFont->m_pGsubData = (unsigned char*)FX_Alloc(uint8_t, length);
- }
- if (!pFont->m_pGsubData) {
- return NULL;
- }
- }
- int error = FXFT_Load_Sfnt_Table(pFont->m_Face, FT_MAKE_TAG('G', 'S', 'U', 'B'), 0, pFont->m_pGsubData, NULL);
- if (!error && pFont->m_pGsubData) {
- nonstd::unique_ptr<CFX_GSUBTable> pGsubTable(new CFX_GSUBTable);
- if (pGsubTable->m_GsubImp.LoadGSUBTable((FT_Bytes)pFont->m_pGsubData)) {
- return pGsubTable.release();
- }
- }
+IFX_GSUBTable* IFX_GSUBTable::Create(CFX_Font* pFont) {
+ if (!pFont) {
return NULL;
+ }
+ if (NULL == pFont->m_pGsubData) {
+ unsigned long length = 0;
+ int error = FXFT_Load_Sfnt_Table(
+ pFont->m_Face, FT_MAKE_TAG('G', 'S', 'U', 'B'), 0, NULL, &length);
+ if (!error) {
+ pFont->m_pGsubData = (unsigned char*)FX_Alloc(uint8_t, length);
+ }
+ if (!pFont->m_pGsubData) {
+ return NULL;
+ }
+ }
+ int error =
+ FXFT_Load_Sfnt_Table(pFont->m_Face, FT_MAKE_TAG('G', 'S', 'U', 'B'), 0,
+ pFont->m_pGsubData, NULL);
+ if (!error && pFont->m_pGsubData) {
+ nonstd::unique_ptr<CFX_GSUBTable> pGsubTable(new CFX_GSUBTable);
+ if (pGsubTable->m_GsubImp.LoadGSUBTable((FT_Bytes)pFont->m_pGsubData)) {
+ return pGsubTable.release();
+ }
+ }
+ return NULL;
}
diff --git a/core/src/fpdfapi/fpdf_font/ttgsubtable.h b/core/src/fpdfapi/fpdf_font/ttgsubtable.h
index 1b18f82d6e..b717c7af8b 100644
--- a/core/src/fpdfapi/fpdf_font/ttgsubtable.h
+++ b/core/src/fpdfapi/fpdf_font/ttgsubtable.h
@@ -11,404 +11,391 @@
#include "../../../include/fxcrt/fx_basic.h"
#include "common.h"
-class CFX_GlyphMap
-{
-public:
- CFX_GlyphMap();
- ~CFX_GlyphMap();
- void SetAt(int key, int value);
- FX_BOOL Lookup(int key, int &value);
-protected:
- CFX_BinaryBuf m_Buffer;
+class CFX_GlyphMap {
+ public:
+ CFX_GlyphMap();
+ ~CFX_GlyphMap();
+ void SetAt(int key, int value);
+ FX_BOOL Lookup(int key, int& value);
+
+ protected:
+ CFX_BinaryBuf m_Buffer;
};
-class CFX_CTTGSUBTable
-{
-public:
- CFX_CTTGSUBTable(void): m_bFeautureMapLoad(FALSE), loaded(false) {};
- CFX_CTTGSUBTable(FT_Bytes gsub): m_bFeautureMapLoad(FALSE), loaded(false)
- {
- LoadGSUBTable(gsub);
+class CFX_CTTGSUBTable {
+ public:
+ CFX_CTTGSUBTable(void) : m_bFeautureMapLoad(FALSE), loaded(false){};
+ CFX_CTTGSUBTable(FT_Bytes gsub) : m_bFeautureMapLoad(FALSE), loaded(false) {
+ LoadGSUBTable(gsub);
+ }
+ virtual ~CFX_CTTGSUBTable() {}
+ bool IsOk(void) const { return loaded; }
+ bool LoadGSUBTable(FT_Bytes gsub);
+ bool GetVerticalGlyph(TT_uint32_t glyphnum, TT_uint32_t* vglyphnum);
+
+ private:
+ struct tt_gsub_header {
+ TT_uint32_t Version;
+ TT_uint16_t ScriptList;
+ TT_uint16_t FeatureList;
+ TT_uint16_t LookupList;
+ };
+ struct TLangSys {
+ TT_uint16_t LookupOrder;
+ TT_uint16_t ReqFeatureIndex;
+ TT_uint16_t FeatureCount;
+ TT_uint16_t* FeatureIndex;
+ TLangSys()
+ : LookupOrder(0),
+ ReqFeatureIndex(0),
+ FeatureCount(0),
+ FeatureIndex(NULL) {}
+ ~TLangSys() {
+ if (FeatureIndex) {
+ delete[] FeatureIndex;
+ }
}
- virtual ~CFX_CTTGSUBTable() {}
- bool IsOk(void) const
- {
- return loaded;
+
+ private:
+ TLangSys(const TLangSys&);
+ TLangSys& operator=(const TLangSys&);
+ };
+ struct TLangSysRecord {
+ TT_uint32_t LangSysTag;
+ struct TLangSys LangSys;
+ TLangSysRecord() : LangSysTag(0) {}
+
+ private:
+ TLangSysRecord(const TLangSysRecord&);
+ TLangSysRecord& operator=(const TLangSysRecord&);
+ };
+ struct TScript {
+ TT_uint16_t DefaultLangSys;
+ TT_uint16_t LangSysCount;
+ struct TLangSysRecord* LangSysRecord;
+ TScript() : DefaultLangSys(0), LangSysCount(0), LangSysRecord(NULL) {}
+ ~TScript() {
+ if (LangSysRecord) {
+ delete[] LangSysRecord;
+ }
}
- bool LoadGSUBTable(FT_Bytes gsub);
- bool GetVerticalGlyph(TT_uint32_t glyphnum, TT_uint32_t *vglyphnum);
-private:
- struct tt_gsub_header {
- TT_uint32_t Version;
- TT_uint16_t ScriptList;
- TT_uint16_t FeatureList;
- TT_uint16_t LookupList;
- };
- struct TLangSys {
- TT_uint16_t LookupOrder;
- TT_uint16_t ReqFeatureIndex;
- TT_uint16_t FeatureCount;
- TT_uint16_t *FeatureIndex;
- TLangSys(): LookupOrder(0), ReqFeatureIndex(0), FeatureCount(0), FeatureIndex(NULL) {}
- ~TLangSys()
- {
- if(FeatureIndex) {
- delete[] FeatureIndex;
- }
- }
- private:
- TLangSys(const TLangSys&);
- TLangSys& operator=(const TLangSys&);
- };
- struct TLangSysRecord {
- TT_uint32_t LangSysTag;
- struct TLangSys LangSys;
- TLangSysRecord(): LangSysTag(0) {}
- private:
- TLangSysRecord(const TLangSysRecord&);
- TLangSysRecord& operator=(const TLangSysRecord&);
- };
- struct TScript {
- TT_uint16_t DefaultLangSys;
- TT_uint16_t LangSysCount;
- struct TLangSysRecord *LangSysRecord;
- TScript(): DefaultLangSys(0), LangSysCount(0), LangSysRecord(NULL) {}
- ~TScript()
- {
- if(LangSysRecord) {
- delete[] LangSysRecord;
- }
- }
- private:
- TScript(const TScript&);
- TScript& operator=(const TScript&);
- };
- struct TScriptRecord {
- TT_uint32_t ScriptTag;
- struct TScript Script;
- TScriptRecord(): ScriptTag(0) {}
- private:
- TScriptRecord(const TScriptRecord&);
- TScriptRecord& operator=(const TScriptRecord&);
- };
- struct TScriptList {
- TT_uint16_t ScriptCount;
- struct TScriptRecord *ScriptRecord;
- TScriptList(): ScriptCount(0), ScriptRecord(NULL) {}
- ~TScriptList()
- {
- if(ScriptRecord) {
- delete[] ScriptRecord;
- }
- }
- private:
- TScriptList(const TScriptList&);
- TScriptList& operator=(const TScriptList&);
- };
- struct TFeature {
- TT_uint16_t FeatureParams;
- int LookupCount;
- TT_uint16_t *LookupListIndex;
- TFeature(): FeatureParams(0), LookupCount(0), LookupListIndex(NULL) {}
- ~TFeature()
- {
- if(LookupListIndex) {
- delete[] LookupListIndex;
- }
- }
- private:
- TFeature(const TFeature&);
- TFeature& operator=(const TFeature&);
- };
- struct TFeatureRecord {
- TT_uint32_t FeatureTag;
- struct TFeature Feature;
- TFeatureRecord(): FeatureTag(0) {}
- private:
- TFeatureRecord(const TFeatureRecord&);
- TFeatureRecord& operator=(const TFeatureRecord&);
- };
- struct TFeatureList {
- int FeatureCount;
- struct TFeatureRecord *FeatureRecord;
- TFeatureList(): FeatureCount(0), FeatureRecord(NULL) {}
- ~TFeatureList()
- {
- if(FeatureRecord) {
- delete[] FeatureRecord;
- }
- }
- private:
- TFeatureList(const TFeatureList&);
- TFeatureList& operator=(const TFeatureList&);
- };
- enum TLookupFlag {
- LOOKUPFLAG_RightToLeft = 0x0001,
- LOOKUPFLAG_IgnoreBaseGlyphs = 0x0002,
- LOOKUPFLAG_IgnoreLigatures = 0x0004,
- LOOKUPFLAG_IgnoreMarks = 0x0008,
- LOOKUPFLAG_Reserved = 0x00F0,
- LOOKUPFLAG_MarkAttachmentType = 0xFF00,
- };
- struct TCoverageFormatBase {
- TT_uint16_t CoverageFormat;
- CFX_GlyphMap m_glyphMap;
- TCoverageFormatBase(): CoverageFormat(0) {}
- virtual ~TCoverageFormatBase() {}
- private:
- TCoverageFormatBase(const TCoverageFormatBase&);
- TCoverageFormatBase& operator=(const TCoverageFormatBase&);
- };
- struct TCoverageFormat1: public TCoverageFormatBase {
- TT_uint16_t GlyphCount;
- TT_uint16_t *GlyphArray;
- TCoverageFormat1(): GlyphCount(0), GlyphArray(NULL)
- {
- CoverageFormat = 1;
- }
- ~TCoverageFormat1()
- {
- if(GlyphArray) {
- delete[] GlyphArray;
- }
- }
- private:
- TCoverageFormat1(const TCoverageFormat1&);
- TCoverageFormat1& operator=(const TCoverageFormat1&);
- };
- struct TRangeRecord {
- TT_uint16_t Start;
- TT_uint16_t End;
- TT_uint16_t StartCoverageIndex;
- TRangeRecord(): Start(0), End(0), StartCoverageIndex(0) {}
- friend bool operator > (const TRangeRecord &r1, const TRangeRecord &r2)
- {
- return r1.Start > r2.Start;
- }
- private:
- TRangeRecord(const TRangeRecord&);
- };
- struct TCoverageFormat2: public TCoverageFormatBase {
- TT_uint16_t RangeCount;
- struct TRangeRecord *RangeRecord;
- TCoverageFormat2(): RangeCount(0), RangeRecord(NULL)
- {
- CoverageFormat = 2;
- }
- ~TCoverageFormat2()
- {
- if(RangeRecord) {
- delete[] RangeRecord;
- }
- }
- private:
- TCoverageFormat2(const TCoverageFormat2&);
- TCoverageFormat2& operator=(const TCoverageFormat2&);
- };
- struct TClassDefFormatBase {
- TT_uint16_t ClassFormat;
- TClassDefFormatBase(): ClassFormat(0) {}
- virtual ~TClassDefFormatBase() {}
- private:
- TClassDefFormatBase(const TClassDefFormatBase&);
- TClassDefFormatBase& operator=(const TClassDefFormatBase&);
- };
- struct TClassDefFormat1: public TClassDefFormatBase {
- TT_uint16_t StartGlyph;
- TT_uint16_t GlyphCount;
- TT_uint16_t *ClassValueArray;
- TClassDefFormat1(): StartGlyph(0), GlyphCount(0), ClassValueArray(NULL)
- {
- ClassFormat = 1;
- }
- ~TClassDefFormat1()
- {
- if(ClassValueArray) {
- delete[] ClassValueArray;
- }
- }
- private:
- TClassDefFormat1(const TClassDefFormat1&);
- TClassDefFormat1& operator=(const TClassDefFormat1&);
- };
- struct TClassRangeRecord {
- TT_uint16_t Start;
- TT_uint16_t End;
- TT_uint16_t Class;
- TClassRangeRecord(): Start(0), End(0), Class(0) {}
- private:
- TClassRangeRecord(const TClassRangeRecord&);
- TClassRangeRecord& operator=(const TClassRangeRecord&);
- };
- struct TClassDefFormat2: public TClassDefFormatBase {
- TT_uint16_t ClassRangeCount;
- struct TClassRangeRecord *ClassRangeRecord;
- TClassDefFormat2(): ClassRangeCount(0), ClassRangeRecord(NULL)
- {
- ClassFormat = 2;
- }
- ~TClassDefFormat2()
- {
- if(ClassRangeRecord) {
- delete[] ClassRangeRecord;
- }
- }
- private:
- TClassDefFormat2(const TClassDefFormat2&);
- TClassDefFormat2& operator=(const TClassDefFormat2&);
- };
- struct TDevice {
- TT_uint16_t StartSize;
- TT_uint16_t EndSize;
- TT_uint16_t DeltaFormat;
- TDevice(): StartSize(0), EndSize(0), DeltaFormat(0) {}
- private:
- TDevice(const TDevice&);
- TDevice& operator=(const TDevice&);
- };
- struct TSubTableBase {
- TT_uint16_t SubstFormat;
- TSubTableBase(): SubstFormat(0) {}
- virtual ~TSubTableBase() {}
- private:
- TSubTableBase(const TSubTableBase&);
- TSubTableBase& operator=(const TSubTableBase&);
- };
- struct TSingleSubstFormat1: public TSubTableBase {
- TCoverageFormatBase *Coverage;
- TT_int16_t DeltaGlyphID;
- TSingleSubstFormat1(): Coverage(NULL), DeltaGlyphID(0)
- {
- SubstFormat = 1;
- }
- ~TSingleSubstFormat1()
- {
- delete Coverage;
- }
- private:
- TSingleSubstFormat1(const TSingleSubstFormat1&);
- TSingleSubstFormat1& operator=(const TSingleSubstFormat1&);
- };
- struct TSingleSubstFormat2: public TSubTableBase {
- TCoverageFormatBase *Coverage;
- TT_uint16_t GlyphCount;
- TT_uint16_t *Substitute;
- TSingleSubstFormat2(): Coverage(NULL), GlyphCount(0), Substitute(NULL)
- {
- SubstFormat = 2;
- }
- ~TSingleSubstFormat2()
- {
- delete Coverage;
- delete[] Substitute;
- }
- private:
- TSingleSubstFormat2(const TSingleSubstFormat2&);
- TSingleSubstFormat2& operator=(const TSingleSubstFormat2&);
- };
- struct TLookup {
- TT_uint16_t LookupType;
- TT_uint16_t LookupFlag;
- TT_uint16_t SubTableCount;
- struct TSubTableBase **SubTable;
- TLookup(): LookupType(0), LookupFlag(0), SubTableCount(0), SubTable(NULL) {}
- ~TLookup()
- {
- if(SubTableCount > 0 && SubTable != NULL) {
- for(int i = 0; i < SubTableCount; i++) {
- delete SubTable[i];
- }
- delete[] SubTable;
- }
- }
- private:
- TLookup(const TLookup&);
- TLookup& operator=(const TLookup&);
- };
- struct TLookupList {
- int LookupCount;
- struct TLookup *Lookup;
- TLookupList(): LookupCount(0), Lookup(NULL) {}
- ~TLookupList()
- {
- if(Lookup) {
- delete[] Lookup;
- }
- }
- private:
- TLookupList(const TLookupList&);
- TLookupList& operator=(const TLookupList&);
- };
- bool Parse(
- FT_Bytes scriptlist,
- FT_Bytes featurelist,
- FT_Bytes lookuplist);
- void ParseScriptList(FT_Bytes raw, TScriptList *rec);
- void ParseScript(FT_Bytes raw, TScript *rec);
- void ParseLangSys(FT_Bytes raw, TLangSys *rec);
- void ParseFeatureList(FT_Bytes raw, TFeatureList *rec);
- void ParseFeature(FT_Bytes raw, TFeature *rec);
- void ParseLookupList(FT_Bytes raw, TLookupList *rec);
- void ParseLookup(FT_Bytes raw, TLookup *rec);
- void ParseCoverage(FT_Bytes raw, TCoverageFormatBase **rec);
- void ParseCoverageFormat1(FT_Bytes raw, TCoverageFormat1 *rec);
- void ParseCoverageFormat2(FT_Bytes raw, TCoverageFormat2 *rec);
- void ParseSingleSubst(FT_Bytes raw, TSubTableBase **rec);
- void ParseSingleSubstFormat1(FT_Bytes raw, TSingleSubstFormat1 *rec);
- void ParseSingleSubstFormat2(FT_Bytes raw, TSingleSubstFormat2 *rec);
- bool GetVerticalGlyphSub(
- TT_uint32_t glyphnum,
- TT_uint32_t *vglyphnum,
- struct TFeature *Feature);
- bool GetVerticalGlyphSub2(
- TT_uint32_t glyphnum,
- TT_uint32_t *vglyphnum,
- struct TLookup *Lookup);
- int GetCoverageIndex(struct TCoverageFormatBase *Coverage, TT_uint32_t g);
- TT_uint8_t GetUInt8(FT_Bytes& p) const
- {
- TT_uint8_t ret = p[0];
- p += 1;
- return ret;
+
+ private:
+ TScript(const TScript&);
+ TScript& operator=(const TScript&);
+ };
+ struct TScriptRecord {
+ TT_uint32_t ScriptTag;
+ struct TScript Script;
+ TScriptRecord() : ScriptTag(0) {}
+
+ private:
+ TScriptRecord(const TScriptRecord&);
+ TScriptRecord& operator=(const TScriptRecord&);
+ };
+ struct TScriptList {
+ TT_uint16_t ScriptCount;
+ struct TScriptRecord* ScriptRecord;
+ TScriptList() : ScriptCount(0), ScriptRecord(NULL) {}
+ ~TScriptList() {
+ if (ScriptRecord) {
+ delete[] ScriptRecord;
+ }
}
- TT_int16_t GetInt16(FT_Bytes& p) const
- {
- TT_uint16_t ret = p[0] << 8 | p[1];
- p += 2;
- return *(TT_int16_t*)&ret;
+
+ private:
+ TScriptList(const TScriptList&);
+ TScriptList& operator=(const TScriptList&);
+ };
+ struct TFeature {
+ TT_uint16_t FeatureParams;
+ int LookupCount;
+ TT_uint16_t* LookupListIndex;
+ TFeature() : FeatureParams(0), LookupCount(0), LookupListIndex(NULL) {}
+ ~TFeature() {
+ if (LookupListIndex) {
+ delete[] LookupListIndex;
+ }
}
- TT_uint16_t GetUInt16(FT_Bytes& p) const
- {
- TT_uint16_t ret = p[0] << 8 | p[1];
- p += 2;
- return ret;
+
+ private:
+ TFeature(const TFeature&);
+ TFeature& operator=(const TFeature&);
+ };
+ struct TFeatureRecord {
+ TT_uint32_t FeatureTag;
+ struct TFeature Feature;
+ TFeatureRecord() : FeatureTag(0) {}
+
+ private:
+ TFeatureRecord(const TFeatureRecord&);
+ TFeatureRecord& operator=(const TFeatureRecord&);
+ };
+ struct TFeatureList {
+ int FeatureCount;
+ struct TFeatureRecord* FeatureRecord;
+ TFeatureList() : FeatureCount(0), FeatureRecord(NULL) {}
+ ~TFeatureList() {
+ if (FeatureRecord) {
+ delete[] FeatureRecord;
+ }
+ }
+
+ private:
+ TFeatureList(const TFeatureList&);
+ TFeatureList& operator=(const TFeatureList&);
+ };
+ enum TLookupFlag {
+ LOOKUPFLAG_RightToLeft = 0x0001,
+ LOOKUPFLAG_IgnoreBaseGlyphs = 0x0002,
+ LOOKUPFLAG_IgnoreLigatures = 0x0004,
+ LOOKUPFLAG_IgnoreMarks = 0x0008,
+ LOOKUPFLAG_Reserved = 0x00F0,
+ LOOKUPFLAG_MarkAttachmentType = 0xFF00,
+ };
+ struct TCoverageFormatBase {
+ TT_uint16_t CoverageFormat;
+ CFX_GlyphMap m_glyphMap;
+ TCoverageFormatBase() : CoverageFormat(0) {}
+ virtual ~TCoverageFormatBase() {}
+
+ private:
+ TCoverageFormatBase(const TCoverageFormatBase&);
+ TCoverageFormatBase& operator=(const TCoverageFormatBase&);
+ };
+ struct TCoverageFormat1 : public TCoverageFormatBase {
+ TT_uint16_t GlyphCount;
+ TT_uint16_t* GlyphArray;
+ TCoverageFormat1() : GlyphCount(0), GlyphArray(NULL) { CoverageFormat = 1; }
+ ~TCoverageFormat1() {
+ if (GlyphArray) {
+ delete[] GlyphArray;
+ }
+ }
+
+ private:
+ TCoverageFormat1(const TCoverageFormat1&);
+ TCoverageFormat1& operator=(const TCoverageFormat1&);
+ };
+ struct TRangeRecord {
+ TT_uint16_t Start;
+ TT_uint16_t End;
+ TT_uint16_t StartCoverageIndex;
+ TRangeRecord() : Start(0), End(0), StartCoverageIndex(0) {}
+ friend bool operator>(const TRangeRecord& r1, const TRangeRecord& r2) {
+ return r1.Start > r2.Start;
+ }
+
+ private:
+ TRangeRecord(const TRangeRecord&);
+ };
+ struct TCoverageFormat2 : public TCoverageFormatBase {
+ TT_uint16_t RangeCount;
+ struct TRangeRecord* RangeRecord;
+ TCoverageFormat2() : RangeCount(0), RangeRecord(NULL) {
+ CoverageFormat = 2;
+ }
+ ~TCoverageFormat2() {
+ if (RangeRecord) {
+ delete[] RangeRecord;
+ }
}
- TT_int32_t GetInt32(FT_Bytes& p) const
- {
- TT_uint32_t ret = p[0] << 24 | p[1] << 16 | p[2] << 8 | p[3];
- p += 4;
- return *(TT_int32_t*)&ret;
+
+ private:
+ TCoverageFormat2(const TCoverageFormat2&);
+ TCoverageFormat2& operator=(const TCoverageFormat2&);
+ };
+ struct TClassDefFormatBase {
+ TT_uint16_t ClassFormat;
+ TClassDefFormatBase() : ClassFormat(0) {}
+ virtual ~TClassDefFormatBase() {}
+
+ private:
+ TClassDefFormatBase(const TClassDefFormatBase&);
+ TClassDefFormatBase& operator=(const TClassDefFormatBase&);
+ };
+ struct TClassDefFormat1 : public TClassDefFormatBase {
+ TT_uint16_t StartGlyph;
+ TT_uint16_t GlyphCount;
+ TT_uint16_t* ClassValueArray;
+ TClassDefFormat1() : StartGlyph(0), GlyphCount(0), ClassValueArray(NULL) {
+ ClassFormat = 1;
}
- TT_uint32_t GetUInt32(FT_Bytes& p) const
- {
- TT_uint32_t ret = p[0] << 24 | p[1] << 16 | p[2] << 8 | p[3];
- p += 4;
- return ret;
+ ~TClassDefFormat1() {
+ if (ClassValueArray) {
+ delete[] ClassValueArray;
+ }
+ }
+
+ private:
+ TClassDefFormat1(const TClassDefFormat1&);
+ TClassDefFormat1& operator=(const TClassDefFormat1&);
+ };
+ struct TClassRangeRecord {
+ TT_uint16_t Start;
+ TT_uint16_t End;
+ TT_uint16_t Class;
+ TClassRangeRecord() : Start(0), End(0), Class(0) {}
+
+ private:
+ TClassRangeRecord(const TClassRangeRecord&);
+ TClassRangeRecord& operator=(const TClassRangeRecord&);
+ };
+ struct TClassDefFormat2 : public TClassDefFormatBase {
+ TT_uint16_t ClassRangeCount;
+ struct TClassRangeRecord* ClassRangeRecord;
+ TClassDefFormat2() : ClassRangeCount(0), ClassRangeRecord(NULL) {
+ ClassFormat = 2;
}
- CFX_CMapDWordToDWord m_featureMap;
- FX_BOOL m_bFeautureMapLoad;
- bool loaded;
- struct tt_gsub_header header;
- struct TScriptList ScriptList;
- struct TFeatureList FeatureList;
- struct TLookupList LookupList;
+ ~TClassDefFormat2() {
+ if (ClassRangeRecord) {
+ delete[] ClassRangeRecord;
+ }
+ }
+
+ private:
+ TClassDefFormat2(const TClassDefFormat2&);
+ TClassDefFormat2& operator=(const TClassDefFormat2&);
+ };
+ struct TDevice {
+ TT_uint16_t StartSize;
+ TT_uint16_t EndSize;
+ TT_uint16_t DeltaFormat;
+ TDevice() : StartSize(0), EndSize(0), DeltaFormat(0) {}
+
+ private:
+ TDevice(const TDevice&);
+ TDevice& operator=(const TDevice&);
+ };
+ struct TSubTableBase {
+ TT_uint16_t SubstFormat;
+ TSubTableBase() : SubstFormat(0) {}
+ virtual ~TSubTableBase() {}
+
+ private:
+ TSubTableBase(const TSubTableBase&);
+ TSubTableBase& operator=(const TSubTableBase&);
+ };
+ struct TSingleSubstFormat1 : public TSubTableBase {
+ TCoverageFormatBase* Coverage;
+ TT_int16_t DeltaGlyphID;
+ TSingleSubstFormat1() : Coverage(NULL), DeltaGlyphID(0) { SubstFormat = 1; }
+ ~TSingleSubstFormat1() { delete Coverage; }
+
+ private:
+ TSingleSubstFormat1(const TSingleSubstFormat1&);
+ TSingleSubstFormat1& operator=(const TSingleSubstFormat1&);
+ };
+ struct TSingleSubstFormat2 : public TSubTableBase {
+ TCoverageFormatBase* Coverage;
+ TT_uint16_t GlyphCount;
+ TT_uint16_t* Substitute;
+ TSingleSubstFormat2() : Coverage(NULL), GlyphCount(0), Substitute(NULL) {
+ SubstFormat = 2;
+ }
+ ~TSingleSubstFormat2() {
+ delete Coverage;
+ delete[] Substitute;
+ }
+
+ private:
+ TSingleSubstFormat2(const TSingleSubstFormat2&);
+ TSingleSubstFormat2& operator=(const TSingleSubstFormat2&);
+ };
+ struct TLookup {
+ TT_uint16_t LookupType;
+ TT_uint16_t LookupFlag;
+ TT_uint16_t SubTableCount;
+ struct TSubTableBase** SubTable;
+ TLookup()
+ : LookupType(0), LookupFlag(0), SubTableCount(0), SubTable(NULL) {}
+ ~TLookup() {
+ if (SubTableCount > 0 && SubTable != NULL) {
+ for (int i = 0; i < SubTableCount; i++) {
+ delete SubTable[i];
+ }
+ delete[] SubTable;
+ }
+ }
+
+ private:
+ TLookup(const TLookup&);
+ TLookup& operator=(const TLookup&);
+ };
+ struct TLookupList {
+ int LookupCount;
+ struct TLookup* Lookup;
+ TLookupList() : LookupCount(0), Lookup(NULL) {}
+ ~TLookupList() {
+ if (Lookup) {
+ delete[] Lookup;
+ }
+ }
+
+ private:
+ TLookupList(const TLookupList&);
+ TLookupList& operator=(const TLookupList&);
+ };
+ bool Parse(FT_Bytes scriptlist, FT_Bytes featurelist, FT_Bytes lookuplist);
+ void ParseScriptList(FT_Bytes raw, TScriptList* rec);
+ void ParseScript(FT_Bytes raw, TScript* rec);
+ void ParseLangSys(FT_Bytes raw, TLangSys* rec);
+ void ParseFeatureList(FT_Bytes raw, TFeatureList* rec);
+ void ParseFeature(FT_Bytes raw, TFeature* rec);
+ void ParseLookupList(FT_Bytes raw, TLookupList* rec);
+ void ParseLookup(FT_Bytes raw, TLookup* rec);
+ void ParseCoverage(FT_Bytes raw, TCoverageFormatBase** rec);
+ void ParseCoverageFormat1(FT_Bytes raw, TCoverageFormat1* rec);
+ void ParseCoverageFormat2(FT_Bytes raw, TCoverageFormat2* rec);
+ void ParseSingleSubst(FT_Bytes raw, TSubTableBase** rec);
+ void ParseSingleSubstFormat1(FT_Bytes raw, TSingleSubstFormat1* rec);
+ void ParseSingleSubstFormat2(FT_Bytes raw, TSingleSubstFormat2* rec);
+ bool GetVerticalGlyphSub(TT_uint32_t glyphnum,
+ TT_uint32_t* vglyphnum,
+ struct TFeature* Feature);
+ bool GetVerticalGlyphSub2(TT_uint32_t glyphnum,
+ TT_uint32_t* vglyphnum,
+ struct TLookup* Lookup);
+ int GetCoverageIndex(struct TCoverageFormatBase* Coverage, TT_uint32_t g);
+ TT_uint8_t GetUInt8(FT_Bytes& p) const {
+ TT_uint8_t ret = p[0];
+ p += 1;
+ return ret;
+ }
+ TT_int16_t GetInt16(FT_Bytes& p) const {
+ TT_uint16_t ret = p[0] << 8 | p[1];
+ p += 2;
+ return *(TT_int16_t*)&ret;
+ }
+ TT_uint16_t GetUInt16(FT_Bytes& p) const {
+ TT_uint16_t ret = p[0] << 8 | p[1];
+ p += 2;
+ return ret;
+ }
+ TT_int32_t GetInt32(FT_Bytes& p) const {
+ TT_uint32_t ret = p[0] << 24 | p[1] << 16 | p[2] << 8 | p[3];
+ p += 4;
+ return *(TT_int32_t*)&ret;
+ }
+ TT_uint32_t GetUInt32(FT_Bytes& p) const {
+ TT_uint32_t ret = p[0] << 24 | p[1] << 16 | p[2] << 8 | p[3];
+ p += 4;
+ return ret;
+ }
+ CFX_CMapDWordToDWord m_featureMap;
+ FX_BOOL m_bFeautureMapLoad;
+ bool loaded;
+ struct tt_gsub_header header;
+ struct TScriptList ScriptList;
+ struct TFeatureList FeatureList;
+ struct TLookupList LookupList;
};
-class CFX_GSUBTable final : public IFX_GSUBTable
-{
-public:
- ~CFX_GSUBTable() override {}
- virtual FX_BOOL GetVerticalGlyph(FX_DWORD glyphnum, FX_DWORD* vglyphnum) override;
+class CFX_GSUBTable final : public IFX_GSUBTable {
+ public:
+ ~CFX_GSUBTable() override {}
+ virtual FX_BOOL GetVerticalGlyph(FX_DWORD glyphnum,
+ FX_DWORD* vglyphnum) override;
- CFX_CTTGSUBTable m_GsubImp;
+ CFX_CTTGSUBTable m_GsubImp;
};
#endif // CORE_SRC_FPDFAPI_FPDF_FONT_TTGSUBTABLE_H_
diff --git a/core/src/fpdfapi/fpdf_page/fpdf_page.cpp b/core/src/fpdfapi/fpdf_page/fpdf_page.cpp
index f404352318..0421aba2d5 100644
--- a/core/src/fpdfapi/fpdf_page/fpdf_page.cpp
+++ b/core/src/fpdfapi/fpdf_page/fpdf_page.cpp
@@ -7,92 +7,82 @@
#include "../../../include/fpdfapi/fpdf_page.h"
#include "../../../include/fpdfapi/fpdf_module.h"
#include "pageint.h"
-CPDF_PageObject* CPDF_PageObject::Create(int type)
-{
- switch (type) {
- case PDFPAGE_TEXT:
- return new CPDF_TextObject;
- case PDFPAGE_IMAGE:
- return new CPDF_ImageObject;
- case PDFPAGE_PATH:
- return new CPDF_PathObject;
- case PDFPAGE_SHADING:
- return new CPDF_ShadingObject;
- case PDFPAGE_FORM:
- return new CPDF_FormObject;
- }
- return NULL;
-}
-CPDF_PageObject::~CPDF_PageObject()
-{
-}
-CPDF_PageObject* CPDF_PageObject::Clone() const
-{
- CPDF_PageObject* pObj = Create(m_Type);
- pObj->Copy(this);
- return pObj;
-}
-void CPDF_PageObject::Copy(const CPDF_PageObject* pSrc)
-{
- if (m_Type != pSrc->m_Type) {
- return;
- }
- CopyData(pSrc);
- CopyStates(*pSrc);
- m_Left = pSrc->m_Left;
- m_Right = pSrc->m_Right;
- m_Top = pSrc->m_Top;
- m_Bottom = pSrc->m_Bottom;
-}
-void CPDF_PageObject::AppendClipPath(CPDF_Path path, int type, FX_BOOL bAutoMerge)
-{
- m_ClipPath.AppendPath(path, type, bAutoMerge);
-}
-void CPDF_PageObject::CopyClipPath(CPDF_PageObject* pObj)
-{
- m_ClipPath = pObj->m_ClipPath;
-}
-void CPDF_PageObject::RemoveClipPath()
-{
- m_ClipPath.SetNull();
-}
-void CPDF_PageObject::RecalcBBox()
-{
- switch (m_Type) {
- case PDFPAGE_TEXT:
- ((CPDF_TextObject*)this)->RecalcPositionData();
- break;
- case PDFPAGE_PATH:
- ((CPDF_PathObject*)this)->CalcBoundingBox();
- break;
- case PDFPAGE_SHADING:
- ((CPDF_ShadingObject*)this)->CalcBoundingBox();
- break;
- }
-}
-void CPDF_PageObject::TransformClipPath(CFX_AffineMatrix& matrix)
-{
- if (m_ClipPath.IsNull()) {
- return;
- }
- m_ClipPath.GetModify();
- m_ClipPath.Transform(matrix);
-}
-void CPDF_PageObject::TransformGeneralState(CFX_AffineMatrix& matrix)
-{
- if(m_GeneralState.IsNull()) {
- return;
- }
- CPDF_GeneralStateData* pGS = m_GeneralState.GetModify();
- pGS->m_Matrix.Concat(matrix);
-}
-FX_RECT CPDF_PageObject::GetBBox(const CFX_AffineMatrix* pMatrix) const
-{
- CFX_FloatRect rect(m_Left, m_Bottom, m_Right, m_Top);
- if (pMatrix) {
- pMatrix->TransformRect(rect);
- }
- return rect.GetOutterRect();
+CPDF_PageObject* CPDF_PageObject::Create(int type) {
+ switch (type) {
+ case PDFPAGE_TEXT:
+ return new CPDF_TextObject;
+ case PDFPAGE_IMAGE:
+ return new CPDF_ImageObject;
+ case PDFPAGE_PATH:
+ return new CPDF_PathObject;
+ case PDFPAGE_SHADING:
+ return new CPDF_ShadingObject;
+ case PDFPAGE_FORM:
+ return new CPDF_FormObject;
+ }
+ return NULL;
+}
+CPDF_PageObject::~CPDF_PageObject() {}
+CPDF_PageObject* CPDF_PageObject::Clone() const {
+ CPDF_PageObject* pObj = Create(m_Type);
+ pObj->Copy(this);
+ return pObj;
+}
+void CPDF_PageObject::Copy(const CPDF_PageObject* pSrc) {
+ if (m_Type != pSrc->m_Type) {
+ return;
+ }
+ CopyData(pSrc);
+ CopyStates(*pSrc);
+ m_Left = pSrc->m_Left;
+ m_Right = pSrc->m_Right;
+ m_Top = pSrc->m_Top;
+ m_Bottom = pSrc->m_Bottom;
+}
+void CPDF_PageObject::AppendClipPath(CPDF_Path path,
+ int type,
+ FX_BOOL bAutoMerge) {
+ m_ClipPath.AppendPath(path, type, bAutoMerge);
+}
+void CPDF_PageObject::CopyClipPath(CPDF_PageObject* pObj) {
+ m_ClipPath = pObj->m_ClipPath;
+}
+void CPDF_PageObject::RemoveClipPath() {
+ m_ClipPath.SetNull();
+}
+void CPDF_PageObject::RecalcBBox() {
+ switch (m_Type) {
+ case PDFPAGE_TEXT:
+ ((CPDF_TextObject*)this)->RecalcPositionData();
+ break;
+ case PDFPAGE_PATH:
+ ((CPDF_PathObject*)this)->CalcBoundingBox();
+ break;
+ case PDFPAGE_SHADING:
+ ((CPDF_ShadingObject*)this)->CalcBoundingBox();
+ break;
+ }
+}
+void CPDF_PageObject::TransformClipPath(CFX_AffineMatrix& matrix) {
+ if (m_ClipPath.IsNull()) {
+ return;
+ }
+ m_ClipPath.GetModify();
+ m_ClipPath.Transform(matrix);
+}
+void CPDF_PageObject::TransformGeneralState(CFX_AffineMatrix& matrix) {
+ if (m_GeneralState.IsNull()) {
+ return;
+ }
+ CPDF_GeneralStateData* pGS = m_GeneralState.GetModify();
+ pGS->m_Matrix.Concat(matrix);
+}
+FX_RECT CPDF_PageObject::GetBBox(const CFX_AffineMatrix* pMatrix) const {
+ CFX_FloatRect rect(m_Left, m_Bottom, m_Right, m_Top);
+ if (pMatrix) {
+ pMatrix->TransformRect(rect);
+ }
+ return rect.GetOutterRect();
}
CPDF_TextObject::CPDF_TextObject()
@@ -100,625 +90,587 @@ CPDF_TextObject::CPDF_TextObject()
m_PosY(0),
m_nChars(0),
m_pCharCodes(nullptr),
- m_pCharPos(nullptr)
-{
- m_Type = PDFPAGE_TEXT;
+ m_pCharPos(nullptr) {
+ m_Type = PDFPAGE_TEXT;
}
-CPDF_TextObject::~CPDF_TextObject()
-{
- if (m_nChars > 1 && m_pCharCodes) {
- FX_Free(m_pCharCodes);
- }
- if (m_pCharPos) {
- FX_Free(m_pCharPos);
- }
+CPDF_TextObject::~CPDF_TextObject() {
+ if (m_nChars > 1 && m_pCharCodes) {
+ FX_Free(m_pCharCodes);
+ }
+ if (m_pCharPos) {
+ FX_Free(m_pCharPos);
+ }
}
-void CPDF_TextObject::GetItemInfo(int index, CPDF_TextObjectItem* pInfo) const
-{
- pInfo->m_CharCode =
- m_nChars == 1 ? (FX_DWORD)(uintptr_t)m_pCharCodes : m_pCharCodes[index];
- pInfo->m_OriginX = index ? m_pCharPos[index - 1] : 0;
- pInfo->m_OriginY = 0;
- if (pInfo->m_CharCode == -1) {
- return;
- }
- CPDF_Font* pFont = m_TextState.GetFont();
- if (pFont->GetFontType() != PDFFONT_CIDFONT) {
- return;
- }
- if (!((CPDF_CIDFont*)pFont)->IsVertWriting()) {
- return;
- }
- FX_WORD CID = ((CPDF_CIDFont*)pFont)->CIDFromCharCode(pInfo->m_CharCode);
- pInfo->m_OriginY = pInfo->m_OriginX;
- pInfo->m_OriginX = 0;
- short vx, vy;
- ((CPDF_CIDFont*)pFont)->GetVertOrigin(CID, vx, vy);
- FX_FLOAT fontsize = m_TextState.GetFontSize();
- pInfo->m_OriginX -= fontsize * vx / 1000;
- pInfo->m_OriginY -= fontsize * vy / 1000;
+void CPDF_TextObject::GetItemInfo(int index, CPDF_TextObjectItem* pInfo) const {
+ pInfo->m_CharCode =
+ m_nChars == 1 ? (FX_DWORD)(uintptr_t)m_pCharCodes : m_pCharCodes[index];
+ pInfo->m_OriginX = index ? m_pCharPos[index - 1] : 0;
+ pInfo->m_OriginY = 0;
+ if (pInfo->m_CharCode == -1) {
+ return;
+ }
+ CPDF_Font* pFont = m_TextState.GetFont();
+ if (pFont->GetFontType() != PDFFONT_CIDFONT) {
+ return;
+ }
+ if (!((CPDF_CIDFont*)pFont)->IsVertWriting()) {
+ return;
+ }
+ FX_WORD CID = ((CPDF_CIDFont*)pFont)->CIDFromCharCode(pInfo->m_CharCode);
+ pInfo->m_OriginY = pInfo->m_OriginX;
+ pInfo->m_OriginX = 0;
+ short vx, vy;
+ ((CPDF_CIDFont*)pFont)->GetVertOrigin(CID, vx, vy);
+ FX_FLOAT fontsize = m_TextState.GetFontSize();
+ pInfo->m_OriginX -= fontsize * vx / 1000;
+ pInfo->m_OriginY -= fontsize * vy / 1000;
}
-int CPDF_TextObject::CountChars() const
-{
- if (m_nChars == 1) {
- return 1;
+int CPDF_TextObject::CountChars() const {
+ if (m_nChars == 1) {
+ return 1;
+ }
+ int count = 0;
+ for (int i = 0; i < m_nChars; ++i)
+ if (m_pCharCodes[i] != (FX_DWORD)-1) {
+ ++count;
}
- int count = 0;
- for (int i = 0; i < m_nChars; ++i)
- if (m_pCharCodes[i] != (FX_DWORD) - 1) {
- ++count;
- }
- return count;
+ return count;
}
void CPDF_TextObject::GetCharInfo(int index,
FX_DWORD& charcode,
- FX_FLOAT& kerning) const
-{
- if (m_nChars == 1) {
- charcode = (FX_DWORD)(uintptr_t)m_pCharCodes;
- kerning = 0;
- return;
- }
- int count = 0;
- for (int i = 0; i < m_nChars; ++i) {
- if (m_pCharCodes[i] != (FX_DWORD) - 1) {
- if (count == index) {
- charcode = m_pCharCodes[i];
- if (i == m_nChars - 1 ||
- m_pCharCodes[i + 1] != (FX_DWORD) - 1) {
- kerning = 0;
- } else {
- kerning = m_pCharPos[i];
- }
- return;
- }
- ++count;
+ FX_FLOAT& kerning) const {
+ if (m_nChars == 1) {
+ charcode = (FX_DWORD)(uintptr_t)m_pCharCodes;
+ kerning = 0;
+ return;
+ }
+ int count = 0;
+ for (int i = 0; i < m_nChars; ++i) {
+ if (m_pCharCodes[i] != (FX_DWORD)-1) {
+ if (count == index) {
+ charcode = m_pCharCodes[i];
+ if (i == m_nChars - 1 || m_pCharCodes[i + 1] != (FX_DWORD)-1) {
+ kerning = 0;
+ } else {
+ kerning = m_pCharPos[i];
}
+ return;
+ }
+ ++count;
}
+ }
}
-void CPDF_TextObject::GetCharInfo(int index, CPDF_TextObjectItem* pInfo) const
-{
- if (m_nChars == 1) {
- GetItemInfo(0, pInfo);
- return;
- }
- int count = 0;
- for (int i = 0; i < m_nChars; ++i) {
- FX_DWORD charcode = m_pCharCodes[i];
- if (charcode == (FX_DWORD) - 1) {
- continue;
- }
- if (count == index) {
- GetItemInfo(i, pInfo);
- break;
- }
- ++count;
- }
+void CPDF_TextObject::GetCharInfo(int index, CPDF_TextObjectItem* pInfo) const {
+ if (m_nChars == 1) {
+ GetItemInfo(0, pInfo);
+ return;
+ }
+ int count = 0;
+ for (int i = 0; i < m_nChars; ++i) {
+ FX_DWORD charcode = m_pCharCodes[i];
+ if (charcode == (FX_DWORD)-1) {
+ continue;
+ }
+ if (count == index) {
+ GetItemInfo(i, pInfo);
+ break;
+ }
+ ++count;
+ }
}
-void CPDF_TextObject::CopyData(const CPDF_PageObject* pSrc)
-{
- const CPDF_TextObject* pSrcObj = (const CPDF_TextObject*)pSrc;
- if (m_nChars > 1 && m_pCharCodes) {
- FX_Free(m_pCharCodes);
- m_pCharCodes = nullptr;
+void CPDF_TextObject::CopyData(const CPDF_PageObject* pSrc) {
+ const CPDF_TextObject* pSrcObj = (const CPDF_TextObject*)pSrc;
+ if (m_nChars > 1 && m_pCharCodes) {
+ FX_Free(m_pCharCodes);
+ m_pCharCodes = nullptr;
+ }
+ if (m_pCharPos) {
+ FX_Free(m_pCharPos);
+ m_pCharPos = nullptr;
+ }
+ m_nChars = pSrcObj->m_nChars;
+ if (m_nChars > 1) {
+ m_pCharCodes = FX_Alloc(FX_DWORD, m_nChars);
+ m_pCharPos = FX_Alloc(FX_FLOAT, m_nChars - 1);
+ for (int i = 0; i < m_nChars; ++i) {
+ m_pCharCodes[i] = pSrcObj->m_pCharCodes[i];
}
- if (m_pCharPos) {
- FX_Free(m_pCharPos);
- m_pCharPos = nullptr;
+ for (int i = 0; i < m_nChars - 1; ++i) {
+ m_pCharPos[i] = pSrcObj->m_pCharPos[i];
}
- m_nChars = pSrcObj->m_nChars;
- if (m_nChars > 1) {
- m_pCharCodes = FX_Alloc(FX_DWORD, m_nChars);
- m_pCharPos = FX_Alloc(FX_FLOAT, m_nChars - 1);
- for (int i = 0; i < m_nChars; ++i) {
- m_pCharCodes[i] = pSrcObj->m_pCharCodes[i];
- }
- for (int i = 0; i < m_nChars - 1; ++i) {
- m_pCharPos[i] = pSrcObj->m_pCharPos[i];
- }
- } else {
- m_pCharCodes = pSrcObj->m_pCharCodes;
- }
- m_PosX = pSrcObj->m_PosX;
- m_PosY = pSrcObj->m_PosY;
+ } else {
+ m_pCharCodes = pSrcObj->m_pCharCodes;
+ }
+ m_PosX = pSrcObj->m_PosX;
+ m_PosY = pSrcObj->m_PosY;
}
-void CPDF_TextObject::GetTextMatrix(CFX_AffineMatrix* pMatrix) const
-{
- FX_FLOAT* pTextMatrix = m_TextState.GetMatrix();
- pMatrix->Set(pTextMatrix[0],
- pTextMatrix[2],
- pTextMatrix[1],
- pTextMatrix[3],
- m_PosX,
- m_PosY);
+void CPDF_TextObject::GetTextMatrix(CFX_AffineMatrix* pMatrix) const {
+ FX_FLOAT* pTextMatrix = m_TextState.GetMatrix();
+ pMatrix->Set(pTextMatrix[0], pTextMatrix[2], pTextMatrix[1], pTextMatrix[3],
+ m_PosX, m_PosY);
}
void CPDF_TextObject::SetSegments(const CFX_ByteString* pStrs,
FX_FLOAT* pKerning,
- int nsegs)
-{
- if (m_nChars > 1 && m_pCharCodes) {
- FX_Free(m_pCharCodes);
- m_pCharCodes = nullptr;
- }
- if (m_pCharPos) {
- FX_Free(m_pCharPos);
- m_pCharPos = nullptr;
- }
- CPDF_Font* pFont = m_TextState.GetFont();
- m_nChars = 0;
+ int nsegs) {
+ if (m_nChars > 1 && m_pCharCodes) {
+ FX_Free(m_pCharCodes);
+ m_pCharCodes = nullptr;
+ }
+ if (m_pCharPos) {
+ FX_Free(m_pCharPos);
+ m_pCharPos = nullptr;
+ }
+ CPDF_Font* pFont = m_TextState.GetFont();
+ m_nChars = 0;
+ for (int i = 0; i < nsegs; ++i) {
+ m_nChars += pFont->CountChar(pStrs[i], pStrs[i].GetLength());
+ }
+ m_nChars += nsegs - 1;
+ if (m_nChars > 1) {
+ m_pCharCodes = FX_Alloc(FX_DWORD, m_nChars);
+ m_pCharPos = FX_Alloc(FX_FLOAT, m_nChars - 1);
+ int index = 0;
for (int i = 0; i < nsegs; ++i) {
- m_nChars += pFont->CountChar(pStrs[i], pStrs[i].GetLength());
- }
- m_nChars += nsegs - 1;
- if (m_nChars > 1) {
- m_pCharCodes = FX_Alloc(FX_DWORD, m_nChars);
- m_pCharPos = FX_Alloc(FX_FLOAT, m_nChars - 1);
- int index = 0;
- for (int i = 0; i < nsegs; ++i) {
- const FX_CHAR* segment = pStrs[i];
- int offset = 0, len = pStrs[i].GetLength();
- while (offset < len) {
- m_pCharCodes[index++] =
- pFont->GetNextChar(segment, len, offset);
- }
- if (i != nsegs - 1) {
- m_pCharPos[index - 1] = pKerning[i];
- m_pCharCodes[index++] = (FX_DWORD) - 1;
- }
- }
- } else {
- int offset = 0;
- m_pCharCodes =
- (FX_DWORD*)(uintptr_t)pFont->GetNextChar(pStrs[0],
- pStrs[0].GetLength(),
- offset);
- }
+ const FX_CHAR* segment = pStrs[i];
+ int offset = 0, len = pStrs[i].GetLength();
+ while (offset < len) {
+ m_pCharCodes[index++] = pFont->GetNextChar(segment, len, offset);
+ }
+ if (i != nsegs - 1) {
+ m_pCharPos[index - 1] = pKerning[i];
+ m_pCharCodes[index++] = (FX_DWORD)-1;
+ }
+ }
+ } else {
+ int offset = 0;
+ m_pCharCodes = (FX_DWORD*)(uintptr_t)pFont->GetNextChar(
+ pStrs[0], pStrs[0].GetLength(), offset);
+ }
}
-void CPDF_TextObject::SetText(const CFX_ByteString& str)
-{
- SetSegments(&str, nullptr, 1);
- RecalcPositionData();
+void CPDF_TextObject::SetText(const CFX_ByteString& str) {
+ SetSegments(&str, nullptr, 1);
+ RecalcPositionData();
}
-void CPDF_TextObject::SetEmpty()
-{
- if (m_nChars > 1 && m_pCharCodes) {
- FX_Free(m_pCharCodes);
- }
- if (m_nChars > 1 && m_pCharPos) {
- FX_Free(m_pCharPos);
- }
- m_nChars = 0;
- m_pCharCodes = nullptr;
- m_pCharPos = nullptr;
- m_Left = m_Right = m_PosX;
- m_Top = m_Bottom = m_PosY;
+void CPDF_TextObject::SetEmpty() {
+ if (m_nChars > 1 && m_pCharCodes) {
+ FX_Free(m_pCharCodes);
+ }
+ if (m_nChars > 1 && m_pCharPos) {
+ FX_Free(m_pCharPos);
+ }
+ m_nChars = 0;
+ m_pCharCodes = nullptr;
+ m_pCharPos = nullptr;
+ m_Left = m_Right = m_PosX;
+ m_Top = m_Bottom = m_PosY;
}
void CPDF_TextObject::SetText(CFX_ByteString* pStrs,
FX_FLOAT* pKerning,
- int nSegs)
-{
- SetSegments(pStrs, pKerning, nSegs);
- RecalcPositionData();
+ int nSegs) {
+ SetSegments(pStrs, pKerning, nSegs);
+ RecalcPositionData();
}
void CPDF_TextObject::SetText(int nChars,
FX_DWORD* pCharCodes,
- FX_FLOAT* pKernings)
-{
- if (m_nChars > 1 && m_pCharCodes) {
- FX_Free(m_pCharCodes);
- m_pCharCodes = nullptr;
- }
- if (m_pCharPos) {
- FX_Free(m_pCharPos);
- m_pCharPos = nullptr;
- }
- int nKernings = 0;
- int i;
- for (i = 0; i < nChars - 1; ++i) {
- if (pKernings[i] != 0) {
- ++nKernings;
- }
- }
- m_nChars = nChars + nKernings;
- if (m_nChars > 1) {
- m_pCharCodes = FX_Alloc(FX_DWORD, m_nChars);
- m_pCharPos = FX_Alloc(FX_FLOAT, m_nChars - 1);
- for (int i = 0, index = 0; i < nChars; ++i) {
- m_pCharCodes[index++] = pCharCodes[i];
- if (pKernings[i] != 0 && i != nChars - 1) {
- m_pCharCodes[index] = (FX_DWORD) - 1;
- m_pCharPos[index - 1] = pKernings[i];
- ++index;
- }
- }
- } else {
- m_pCharCodes = (FX_DWORD*)(uintptr_t)pCharCodes[0];
- }
- RecalcPositionData();
+ FX_FLOAT* pKernings) {
+ if (m_nChars > 1 && m_pCharCodes) {
+ FX_Free(m_pCharCodes);
+ m_pCharCodes = nullptr;
+ }
+ if (m_pCharPos) {
+ FX_Free(m_pCharPos);
+ m_pCharPos = nullptr;
+ }
+ int nKernings = 0;
+ int i;
+ for (i = 0; i < nChars - 1; ++i) {
+ if (pKernings[i] != 0) {
+ ++nKernings;
+ }
+ }
+ m_nChars = nChars + nKernings;
+ if (m_nChars > 1) {
+ m_pCharCodes = FX_Alloc(FX_DWORD, m_nChars);
+ m_pCharPos = FX_Alloc(FX_FLOAT, m_nChars - 1);
+ for (int i = 0, index = 0; i < nChars; ++i) {
+ m_pCharCodes[index++] = pCharCodes[i];
+ if (pKernings[i] != 0 && i != nChars - 1) {
+ m_pCharCodes[index] = (FX_DWORD)-1;
+ m_pCharPos[index - 1] = pKernings[i];
+ ++index;
+ }
+ }
+ } else {
+ m_pCharCodes = (FX_DWORD*)(uintptr_t)pCharCodes[0];
+ }
+ RecalcPositionData();
}
-FX_FLOAT CPDF_TextObject::GetCharWidth(FX_DWORD charcode) const
-{
- FX_FLOAT fontsize = m_TextState.GetFontSize() / 1000;
- CPDF_Font* pFont = m_TextState.GetFont();
- FX_BOOL bVertWriting = FALSE;
- CPDF_CIDFont* pCIDFont = pFont->GetCIDFont();
- if (pCIDFont) {
- bVertWriting = pCIDFont->IsVertWriting();
- }
- if (!bVertWriting)
- return pFont->GetCharWidthF(charcode, 0) * fontsize;
+FX_FLOAT CPDF_TextObject::GetCharWidth(FX_DWORD charcode) const {
+ FX_FLOAT fontsize = m_TextState.GetFontSize() / 1000;
+ CPDF_Font* pFont = m_TextState.GetFont();
+ FX_BOOL bVertWriting = FALSE;
+ CPDF_CIDFont* pCIDFont = pFont->GetCIDFont();
+ if (pCIDFont) {
+ bVertWriting = pCIDFont->IsVertWriting();
+ }
+ if (!bVertWriting)
+ return pFont->GetCharWidthF(charcode, 0) * fontsize;
- FX_WORD CID = pCIDFont->CIDFromCharCode(charcode);
- return pCIDFont->GetVertWidth(CID) * fontsize;
+ FX_WORD CID = pCIDFont->CIDFromCharCode(charcode);
+ return pCIDFont->GetVertWidth(CID) * fontsize;
}
-FX_FLOAT CPDF_TextObject::GetSpaceCharWidth() const
-{
- CPDF_Font* pFont = m_TextState.GetFont();
- FX_DWORD charCode = m_TextState.GetFont()->CharCodeFromUnicode(32);
- if (charCode != (FX_DWORD) - 1) {
- return GetCharWidth(charCode);
- }
- FX_FLOAT fontSize = m_TextState.GetFontSize() / 4000.0f;
- FX_BOOL bVertWriting = FALSE;
- CPDF_CIDFont* pCIDFont = pFont->GetCIDFont();
- if (pCIDFont) {
- bVertWriting = pCIDFont->IsVertWriting();
- }
- FX_RECT fontRect;
- pFont->GetFontBBox(fontRect);
- fontSize *= bVertWriting ?
- (FX_FLOAT)fontRect.Height() : (FX_FLOAT)fontRect.Width();
- return fontSize;
+FX_FLOAT CPDF_TextObject::GetSpaceCharWidth() const {
+ CPDF_Font* pFont = m_TextState.GetFont();
+ FX_DWORD charCode = m_TextState.GetFont()->CharCodeFromUnicode(32);
+ if (charCode != (FX_DWORD)-1) {
+ return GetCharWidth(charCode);
+ }
+ FX_FLOAT fontSize = m_TextState.GetFontSize() / 4000.0f;
+ FX_BOOL bVertWriting = FALSE;
+ CPDF_CIDFont* pCIDFont = pFont->GetCIDFont();
+ if (pCIDFont) {
+ bVertWriting = pCIDFont->IsVertWriting();
+ }
+ FX_RECT fontRect;
+ pFont->GetFontBBox(fontRect);
+ fontSize *=
+ bVertWriting ? (FX_FLOAT)fontRect.Height() : (FX_FLOAT)fontRect.Width();
+ return fontSize;
}
-void CPDF_TextObject::GetCharRect(int index, CFX_FloatRect& rect) const
-{
- CPDF_Font* pFont = m_TextState.GetFont();
- FX_BOOL bVertWriting = FALSE;
- CPDF_CIDFont* pCIDFont = pFont->GetCIDFont();
- if (pCIDFont) {
- bVertWriting = pCIDFont->IsVertWriting();
- }
- FX_FLOAT fontsize = m_TextState.GetFontSize() / 1000;
- int count = 0;
- for (int i = 0; i < m_nChars; ++i) {
- FX_DWORD charcode = m_nChars == 1 ?
- (FX_DWORD)(uintptr_t)m_pCharCodes : m_pCharCodes[i];
- if (charcode == (FX_DWORD) - 1) {
- continue;
- }
- if (count != index) {
- ++count;
- continue;
- }
- FX_FLOAT curpos = i > 0 ? m_pCharPos[i - 1] : 0;
- FX_RECT char_rect;
- pFont->GetCharBBox(charcode, char_rect, 0);
- if (!bVertWriting) {
- rect.left = curpos + char_rect.left * fontsize;
- rect.right = curpos + char_rect.right * fontsize;
- rect.top = char_rect.top * fontsize;
- rect.bottom = char_rect.bottom * fontsize;
- } else {
- FX_WORD CID = pCIDFont->CIDFromCharCode(charcode);
- short vx, vy;
- pCIDFont->GetVertOrigin(CID, vx, vy);
- char_rect.left -= vx;
- char_rect.right -= vx;
- char_rect.top -= vy;
- char_rect.bottom -= vy;
- rect.left = char_rect.left * fontsize;
- rect.right = char_rect.right * fontsize;
- rect.top = curpos + char_rect.top * fontsize;
- rect.bottom = curpos + char_rect.bottom * fontsize;
- }
- return;
- }
+void CPDF_TextObject::GetCharRect(int index, CFX_FloatRect& rect) const {
+ CPDF_Font* pFont = m_TextState.GetFont();
+ FX_BOOL bVertWriting = FALSE;
+ CPDF_CIDFont* pCIDFont = pFont->GetCIDFont();
+ if (pCIDFont) {
+ bVertWriting = pCIDFont->IsVertWriting();
+ }
+ FX_FLOAT fontsize = m_TextState.GetFontSize() / 1000;
+ int count = 0;
+ for (int i = 0; i < m_nChars; ++i) {
+ FX_DWORD charcode =
+ m_nChars == 1 ? (FX_DWORD)(uintptr_t)m_pCharCodes : m_pCharCodes[i];
+ if (charcode == (FX_DWORD)-1) {
+ continue;
+ }
+ if (count != index) {
+ ++count;
+ continue;
+ }
+ FX_FLOAT curpos = i > 0 ? m_pCharPos[i - 1] : 0;
+ FX_RECT char_rect;
+ pFont->GetCharBBox(charcode, char_rect, 0);
+ if (!bVertWriting) {
+ rect.left = curpos + char_rect.left * fontsize;
+ rect.right = curpos + char_rect.right * fontsize;
+ rect.top = char_rect.top * fontsize;
+ rect.bottom = char_rect.bottom * fontsize;
+ } else {
+ FX_WORD CID = pCIDFont->CIDFromCharCode(charcode);
+ short vx, vy;
+ pCIDFont->GetVertOrigin(CID, vx, vy);
+ char_rect.left -= vx;
+ char_rect.right -= vx;
+ char_rect.top -= vy;
+ char_rect.bottom -= vy;
+ rect.left = char_rect.left * fontsize;
+ rect.right = char_rect.right * fontsize;
+ rect.top = curpos + char_rect.top * fontsize;
+ rect.bottom = curpos + char_rect.bottom * fontsize;
+ }
+ return;
+ }
}
void CPDF_TextObject::CalcPositionData(FX_FLOAT* pTextAdvanceX,
FX_FLOAT* pTextAdvanceY,
FX_FLOAT horz_scale,
- int level)
-{
- FX_FLOAT curpos = 0;
- FX_FLOAT min_x = 10000 * 1.0f;
- FX_FLOAT max_x = -10000 * 1.0f;
- FX_FLOAT min_y = 10000 * 1.0f;
- FX_FLOAT max_y = -10000 * 1.0f;
- CPDF_Font* pFont = m_TextState.GetFont();
- FX_BOOL bVertWriting = FALSE;
- CPDF_CIDFont* pCIDFont = pFont->GetCIDFont();
- if (pCIDFont) {
- bVertWriting = pCIDFont->IsVertWriting();
- }
- FX_FLOAT fontsize = m_TextState.GetFontSize();
- for (int i = 0; i < m_nChars; ++i) {
- FX_DWORD charcode = m_nChars == 1 ?
- (FX_DWORD)(uintptr_t)m_pCharCodes : m_pCharCodes[i];
- if (charcode == (FX_DWORD) - 1) {
- curpos -= FXSYS_Mul(m_pCharPos[i - 1], fontsize) / 1000;
- continue;
- }
- if (i) {
- m_pCharPos[i - 1] = curpos;
- }
- FX_RECT char_rect;
- pFont->GetCharBBox(charcode, char_rect, level);
- FX_FLOAT charwidth;
- if (!bVertWriting) {
- if (min_y > char_rect.top) {
- min_y = (FX_FLOAT)char_rect.top;
- }
- if (max_y < char_rect.top) {
- max_y = (FX_FLOAT)char_rect.top;
- }
- if (min_y > char_rect.bottom) {
- min_y = (FX_FLOAT)char_rect.bottom;
- }
- if (max_y < char_rect.bottom) {
- max_y = (FX_FLOAT)char_rect.bottom;
- }
- FX_FLOAT char_left = curpos + char_rect.left * fontsize / 1000;
- FX_FLOAT char_right = curpos + char_rect.right * fontsize / 1000;
- if (min_x > char_left) {
- min_x = char_left;
- }
- if (max_x < char_left) {
- max_x = char_left;
- }
- if (min_x > char_right) {
- min_x = char_right;
- }
- if (max_x < char_right) {
- max_x = char_right;
- }
- charwidth = pFont->GetCharWidthF(charcode, level) * fontsize / 1000;
- } else {
- FX_WORD CID = pCIDFont->CIDFromCharCode(charcode);
- short vx;
- short vy;
- pCIDFont->GetVertOrigin(CID, vx, vy);
- char_rect.left -= vx;
- char_rect.right -= vx;
- char_rect.top -= vy;
- char_rect.bottom -= vy;
- if (min_x > char_rect.left) {
- min_x = (FX_FLOAT)char_rect.left;
- }
- if (max_x < char_rect.left) {
- max_x = (FX_FLOAT)char_rect.left;
- }
- if (min_x > char_rect.right) {
- min_x = (FX_FLOAT)char_rect.right;
- }
- if (max_x < char_rect.right) {
- max_x = (FX_FLOAT)char_rect.right;
- }
- FX_FLOAT char_top = curpos + char_rect.top * fontsize / 1000;
- FX_FLOAT char_bottom = curpos + char_rect.bottom * fontsize / 1000;
- if (min_y > char_top) {
- min_y = char_top;
- }
- if (max_y < char_top) {
- max_y = char_top;
- }
- if (min_y > char_bottom) {
- min_y = char_bottom;
- }
- if (max_y < char_bottom) {
- max_y = char_bottom;
- }
- charwidth = pCIDFont->GetVertWidth(CID) * fontsize / 1000;
- }
- curpos += charwidth;
- if (charcode == ' ' && (!pCIDFont || pCIDFont->GetCharSize(32) == 1)) {
- curpos += m_TextState.GetObject()->m_WordSpace;
- }
- curpos += m_TextState.GetObject()->m_CharSpace;
- }
- if (bVertWriting) {
- if (pTextAdvanceX) {
- *pTextAdvanceX = 0;
- }
- if (pTextAdvanceY) {
- *pTextAdvanceY = curpos;
- }
- min_x = min_x * fontsize / 1000;
- max_x = max_x * fontsize / 1000;
+ int level) {
+ FX_FLOAT curpos = 0;
+ FX_FLOAT min_x = 10000 * 1.0f;
+ FX_FLOAT max_x = -10000 * 1.0f;
+ FX_FLOAT min_y = 10000 * 1.0f;
+ FX_FLOAT max_y = -10000 * 1.0f;
+ CPDF_Font* pFont = m_TextState.GetFont();
+ FX_BOOL bVertWriting = FALSE;
+ CPDF_CIDFont* pCIDFont = pFont->GetCIDFont();
+ if (pCIDFont) {
+ bVertWriting = pCIDFont->IsVertWriting();
+ }
+ FX_FLOAT fontsize = m_TextState.GetFontSize();
+ for (int i = 0; i < m_nChars; ++i) {
+ FX_DWORD charcode =
+ m_nChars == 1 ? (FX_DWORD)(uintptr_t)m_pCharCodes : m_pCharCodes[i];
+ if (charcode == (FX_DWORD)-1) {
+ curpos -= FXSYS_Mul(m_pCharPos[i - 1], fontsize) / 1000;
+ continue;
+ }
+ if (i) {
+ m_pCharPos[i - 1] = curpos;
+ }
+ FX_RECT char_rect;
+ pFont->GetCharBBox(charcode, char_rect, level);
+ FX_FLOAT charwidth;
+ if (!bVertWriting) {
+ if (min_y > char_rect.top) {
+ min_y = (FX_FLOAT)char_rect.top;
+ }
+ if (max_y < char_rect.top) {
+ max_y = (FX_FLOAT)char_rect.top;
+ }
+ if (min_y > char_rect.bottom) {
+ min_y = (FX_FLOAT)char_rect.bottom;
+ }
+ if (max_y < char_rect.bottom) {
+ max_y = (FX_FLOAT)char_rect.bottom;
+ }
+ FX_FLOAT char_left = curpos + char_rect.left * fontsize / 1000;
+ FX_FLOAT char_right = curpos + char_rect.right * fontsize / 1000;
+ if (min_x > char_left) {
+ min_x = char_left;
+ }
+ if (max_x < char_left) {
+ max_x = char_left;
+ }
+ if (min_x > char_right) {
+ min_x = char_right;
+ }
+ if (max_x < char_right) {
+ max_x = char_right;
+ }
+ charwidth = pFont->GetCharWidthF(charcode, level) * fontsize / 1000;
} else {
- if (pTextAdvanceX) {
- *pTextAdvanceX = FXSYS_Mul(curpos, horz_scale);
- }
- if (pTextAdvanceY) {
- *pTextAdvanceY = 0;
- }
- min_y = min_y * fontsize / 1000;
- max_y = max_y * fontsize / 1000;
- }
- CFX_AffineMatrix matrix;
- GetTextMatrix(&matrix);
- m_Left = min_x;
- m_Right = max_x;
- m_Bottom = min_y;
- m_Top = max_y;
- matrix.TransformRect(m_Left, m_Right, m_Top, m_Bottom);
- int textmode = m_TextState.GetObject()->m_TextMode;
- if (textmode == 1 || textmode == 2 || textmode == 5 || textmode == 6) {
- FX_FLOAT half_width = m_GraphState.GetObject()->m_LineWidth / 2;
- m_Left -= half_width;
- m_Right += half_width;
- m_Top += half_width;
- m_Bottom -= half_width;
- }
+ FX_WORD CID = pCIDFont->CIDFromCharCode(charcode);
+ short vx;
+ short vy;
+ pCIDFont->GetVertOrigin(CID, vx, vy);
+ char_rect.left -= vx;
+ char_rect.right -= vx;
+ char_rect.top -= vy;
+ char_rect.bottom -= vy;
+ if (min_x > char_rect.left) {
+ min_x = (FX_FLOAT)char_rect.left;
+ }
+ if (max_x < char_rect.left) {
+ max_x = (FX_FLOAT)char_rect.left;
+ }
+ if (min_x > char_rect.right) {
+ min_x = (FX_FLOAT)char_rect.right;
+ }
+ if (max_x < char_rect.right) {
+ max_x = (FX_FLOAT)char_rect.right;
+ }
+ FX_FLOAT char_top = curpos + char_rect.top * fontsize / 1000;
+ FX_FLOAT char_bottom = curpos + char_rect.bottom * fontsize / 1000;
+ if (min_y > char_top) {
+ min_y = char_top;
+ }
+ if (max_y < char_top) {
+ max_y = char_top;
+ }
+ if (min_y > char_bottom) {
+ min_y = char_bottom;
+ }
+ if (max_y < char_bottom) {
+ max_y = char_bottom;
+ }
+ charwidth = pCIDFont->GetVertWidth(CID) * fontsize / 1000;
+ }
+ curpos += charwidth;
+ if (charcode == ' ' && (!pCIDFont || pCIDFont->GetCharSize(32) == 1)) {
+ curpos += m_TextState.GetObject()->m_WordSpace;
+ }
+ curpos += m_TextState.GetObject()->m_CharSpace;
+ }
+ if (bVertWriting) {
+ if (pTextAdvanceX) {
+ *pTextAdvanceX = 0;
+ }
+ if (pTextAdvanceY) {
+ *pTextAdvanceY = curpos;
+ }
+ min_x = min_x * fontsize / 1000;
+ max_x = max_x * fontsize / 1000;
+ } else {
+ if (pTextAdvanceX) {
+ *pTextAdvanceX = FXSYS_Mul(curpos, horz_scale);
+ }
+ if (pTextAdvanceY) {
+ *pTextAdvanceY = 0;
+ }
+ min_y = min_y * fontsize / 1000;
+ max_y = max_y * fontsize / 1000;
+ }
+ CFX_AffineMatrix matrix;
+ GetTextMatrix(&matrix);
+ m_Left = min_x;
+ m_Right = max_x;
+ m_Bottom = min_y;
+ m_Top = max_y;
+ matrix.TransformRect(m_Left, m_Right, m_Top, m_Bottom);
+ int textmode = m_TextState.GetObject()->m_TextMode;
+ if (textmode == 1 || textmode == 2 || textmode == 5 || textmode == 6) {
+ FX_FLOAT half_width = m_GraphState.GetObject()->m_LineWidth / 2;
+ m_Left -= half_width;
+ m_Right += half_width;
+ m_Top += half_width;
+ m_Bottom -= half_width;
+ }
}
-void CPDF_TextObject::CalcCharPos(FX_FLOAT* pPosArray) const
-{
- CPDF_Font* pFont = m_TextState.GetFont();
- FX_BOOL bVertWriting = FALSE;
- CPDF_CIDFont* pCIDFont = pFont->GetCIDFont();
- if (pCIDFont) {
- bVertWriting = pCIDFont->IsVertWriting();
- }
- FX_FLOAT fontsize = m_TextState.GetFontSize();
- for (int i = 0, index = 0; i < m_nChars; ++i) {
- FX_DWORD charcode = m_nChars == 1 ?
- (FX_DWORD)(uintptr_t)m_pCharCodes : m_pCharCodes[i];
- if (charcode == (FX_DWORD) - 1) {
- continue;
- }
- pPosArray[index++] = i ? m_pCharPos[i - 1] : 0;
- FX_FLOAT charwidth;
- if (bVertWriting) {
- FX_WORD CID = pCIDFont->CIDFromCharCode(charcode);
- charwidth = pCIDFont->GetVertWidth(CID) * fontsize / 1000;
- } else {
- charwidth = pFont->GetCharWidthF(charcode) * fontsize / 1000;
- }
- pPosArray[index] = pPosArray[index - 1] + charwidth;
- index++;
+void CPDF_TextObject::CalcCharPos(FX_FLOAT* pPosArray) const {
+ CPDF_Font* pFont = m_TextState.GetFont();
+ FX_BOOL bVertWriting = FALSE;
+ CPDF_CIDFont* pCIDFont = pFont->GetCIDFont();
+ if (pCIDFont) {
+ bVertWriting = pCIDFont->IsVertWriting();
+ }
+ FX_FLOAT fontsize = m_TextState.GetFontSize();
+ for (int i = 0, index = 0; i < m_nChars; ++i) {
+ FX_DWORD charcode =
+ m_nChars == 1 ? (FX_DWORD)(uintptr_t)m_pCharCodes : m_pCharCodes[i];
+ if (charcode == (FX_DWORD)-1) {
+ continue;
+ }
+ pPosArray[index++] = i ? m_pCharPos[i - 1] : 0;
+ FX_FLOAT charwidth;
+ if (bVertWriting) {
+ FX_WORD CID = pCIDFont->CIDFromCharCode(charcode);
+ charwidth = pCIDFont->GetVertWidth(CID) * fontsize / 1000;
+ } else {
+ charwidth = pFont->GetCharWidthF(charcode) * fontsize / 1000;
}
+ pPosArray[index] = pPosArray[index - 1] + charwidth;
+ index++;
+ }
}
-void CPDF_TextObject::Transform(const CFX_AffineMatrix& matrix)
-{
- m_TextState.GetModify();
- CFX_AffineMatrix text_matrix;
- GetTextMatrix(&text_matrix);
- text_matrix.Concat(matrix);
- FX_FLOAT* pTextMatrix = m_TextState.GetMatrix();
- pTextMatrix[0] = text_matrix.GetA();
- pTextMatrix[1] = text_matrix.GetC();
- pTextMatrix[2] = text_matrix.GetB();
- pTextMatrix[3] = text_matrix.GetD();
- m_PosX = text_matrix.GetE();
- m_PosY = text_matrix.GetF();
- CalcPositionData(nullptr, nullptr, 0);
+void CPDF_TextObject::Transform(const CFX_AffineMatrix& matrix) {
+ m_TextState.GetModify();
+ CFX_AffineMatrix text_matrix;
+ GetTextMatrix(&text_matrix);
+ text_matrix.Concat(matrix);
+ FX_FLOAT* pTextMatrix = m_TextState.GetMatrix();
+ pTextMatrix[0] = text_matrix.GetA();
+ pTextMatrix[1] = text_matrix.GetC();
+ pTextMatrix[2] = text_matrix.GetB();
+ pTextMatrix[3] = text_matrix.GetD();
+ m_PosX = text_matrix.GetE();
+ m_PosY = text_matrix.GetF();
+ CalcPositionData(nullptr, nullptr, 0);
}
-void CPDF_TextObject::SetPosition(FX_FLOAT x, FX_FLOAT y)
-{
- FX_FLOAT dx = x - m_PosX;
- FX_FLOAT dy = y - m_PosY;
- m_PosX = x;
- m_PosY = y;
- m_Left += dx;
- m_Right += dx;
- m_Top += dy;
- m_Bottom += dy;
+void CPDF_TextObject::SetPosition(FX_FLOAT x, FX_FLOAT y) {
+ FX_FLOAT dx = x - m_PosX;
+ FX_FLOAT dy = y - m_PosY;
+ m_PosX = x;
+ m_PosY = y;
+ m_Left += dx;
+ m_Right += dx;
+ m_Top += dy;
+ m_Bottom += dy;
}
void CPDF_TextObject::SetData(int nChars,
FX_DWORD* pCharCodes,
FX_FLOAT* pCharPos,
FX_FLOAT x,
- FX_FLOAT y)
-{
- ASSERT(m_nChars == 0);
- m_nChars = nChars;
- m_PosX = x;
- m_PosY = y;
- if (nChars == 0) {
- return;
- }
- if (nChars == 1) {
- m_pCharCodes = (FX_DWORD*)(uintptr_t) * pCharCodes;
- } else {
- m_pCharCodes = FX_Alloc(FX_DWORD, nChars);
- FXSYS_memcpy(m_pCharCodes, pCharCodes, sizeof(FX_DWORD)*nChars);
- m_pCharPos = FX_Alloc(FX_FLOAT, nChars - 1);
- FXSYS_memcpy(m_pCharPos, pCharPos, sizeof(FX_FLOAT) * (nChars - 1));
- }
- RecalcPositionData();
+ FX_FLOAT y) {
+ ASSERT(m_nChars == 0);
+ m_nChars = nChars;
+ m_PosX = x;
+ m_PosY = y;
+ if (nChars == 0) {
+ return;
+ }
+ if (nChars == 1) {
+ m_pCharCodes = (FX_DWORD*)(uintptr_t)*pCharCodes;
+ } else {
+ m_pCharCodes = FX_Alloc(FX_DWORD, nChars);
+ FXSYS_memcpy(m_pCharCodes, pCharCodes, sizeof(FX_DWORD) * nChars);
+ m_pCharPos = FX_Alloc(FX_FLOAT, nChars - 1);
+ FXSYS_memcpy(m_pCharPos, pCharPos, sizeof(FX_FLOAT) * (nChars - 1));
+ }
+ RecalcPositionData();
}
-void CPDF_TextObject::SetTextState(CPDF_TextState TextState)
-{
- m_TextState = TextState;
- CalcPositionData(nullptr, nullptr, 0);
+void CPDF_TextObject::SetTextState(CPDF_TextState TextState) {
+ m_TextState = TextState;
+ CalcPositionData(nullptr, nullptr, 0);
}
-CPDF_ShadingObject::CPDF_ShadingObject()
-{
- m_pShading = NULL;
- m_Type = PDFPAGE_SHADING;
-}
-CPDF_ShadingObject::~CPDF_ShadingObject()
-{
-}
-void CPDF_ShadingObject::CopyData(const CPDF_PageObject* pSrc)
-{
- CPDF_ShadingObject* pSrcObj = (CPDF_ShadingObject*)pSrc;
- m_pShading = pSrcObj->m_pShading;
- if (m_pShading && m_pShading->m_pDocument) {
- CPDF_DocPageData* pDocPageData = m_pShading->m_pDocument->GetPageData();
- m_pShading = (CPDF_ShadingPattern*)pDocPageData->GetPattern(m_pShading->m_pShadingObj, m_pShading->m_bShadingObj, &m_pShading->m_ParentMatrix);
- }
- m_Matrix = pSrcObj->m_Matrix;
-}
-void CPDF_ShadingObject::Transform(const CFX_AffineMatrix& matrix)
-{
- if (!m_ClipPath.IsNull()) {
- m_ClipPath.GetModify();
- m_ClipPath.Transform(matrix);
- }
- m_Matrix.Concat(matrix);
- if (!m_ClipPath.IsNull()) {
- CalcBoundingBox();
- } else {
- matrix.TransformRect(m_Left, m_Right, m_Top, m_Bottom);
- }
-}
-void CPDF_ShadingObject::CalcBoundingBox()
-{
- if (m_ClipPath.IsNull()) {
- return;
- }
- CFX_FloatRect rect = m_ClipPath.GetClipBox();
- m_Left = rect.left;
- m_Bottom = rect.bottom;
- m_Right = rect.right;
- m_Top = rect.top;
-}
-CPDF_FormObject::~CPDF_FormObject()
-{
- delete m_pForm;
-}
-void CPDF_FormObject::Transform(const CFX_AffineMatrix& matrix)
-{
- m_FormMatrix.Concat(matrix);
+CPDF_ShadingObject::CPDF_ShadingObject() {
+ m_pShading = NULL;
+ m_Type = PDFPAGE_SHADING;
+}
+CPDF_ShadingObject::~CPDF_ShadingObject() {}
+void CPDF_ShadingObject::CopyData(const CPDF_PageObject* pSrc) {
+ CPDF_ShadingObject* pSrcObj = (CPDF_ShadingObject*)pSrc;
+ m_pShading = pSrcObj->m_pShading;
+ if (m_pShading && m_pShading->m_pDocument) {
+ CPDF_DocPageData* pDocPageData = m_pShading->m_pDocument->GetPageData();
+ m_pShading = (CPDF_ShadingPattern*)pDocPageData->GetPattern(
+ m_pShading->m_pShadingObj, m_pShading->m_bShadingObj,
+ &m_pShading->m_ParentMatrix);
+ }
+ m_Matrix = pSrcObj->m_Matrix;
+}
+void CPDF_ShadingObject::Transform(const CFX_AffineMatrix& matrix) {
+ if (!m_ClipPath.IsNull()) {
+ m_ClipPath.GetModify();
+ m_ClipPath.Transform(matrix);
+ }
+ m_Matrix.Concat(matrix);
+ if (!m_ClipPath.IsNull()) {
CalcBoundingBox();
-}
-void CPDF_FormObject::CopyData(const CPDF_PageObject* pSrc)
-{
- const CPDF_FormObject* pSrcObj = (const CPDF_FormObject*)pSrc;
- delete m_pForm;
- m_pForm = pSrcObj->m_pForm->Clone();
- m_FormMatrix = pSrcObj->m_FormMatrix;
-}
-void CPDF_FormObject::CalcBoundingBox()
-{
- CFX_FloatRect form_rect = m_pForm->CalcBoundingBox();
- form_rect.Transform(&m_FormMatrix);
- m_Left = form_rect.left;
- m_Bottom = form_rect.bottom;
- m_Right = form_rect.right;
- m_Top = form_rect.top;
+ } else {
+ matrix.TransformRect(m_Left, m_Right, m_Top, m_Bottom);
+ }
+}
+void CPDF_ShadingObject::CalcBoundingBox() {
+ if (m_ClipPath.IsNull()) {
+ return;
+ }
+ CFX_FloatRect rect = m_ClipPath.GetClipBox();
+ m_Left = rect.left;
+ m_Bottom = rect.bottom;
+ m_Right = rect.right;
+ m_Top = rect.top;
+}
+CPDF_FormObject::~CPDF_FormObject() {
+ delete m_pForm;
+}
+void CPDF_FormObject::Transform(const CFX_AffineMatrix& matrix) {
+ m_FormMatrix.Concat(matrix);
+ CalcBoundingBox();
+}
+void CPDF_FormObject::CopyData(const CPDF_PageObject* pSrc) {
+ const CPDF_FormObject* pSrcObj = (const CPDF_FormObject*)pSrc;
+ delete m_pForm;
+ m_pForm = pSrcObj->m_pForm->Clone();
+ m_FormMatrix = pSrcObj->m_FormMatrix;
+}
+void CPDF_FormObject::CalcBoundingBox() {
+ CFX_FloatRect form_rect = m_pForm->CalcBoundingBox();
+ form_rect.Transform(&m_FormMatrix);
+ m_Left = form_rect.left;
+ m_Bottom = form_rect.bottom;
+ m_Right = form_rect.right;
+ m_Top = form_rect.top;
}
CPDF_PageObjects::CPDF_PageObjects(FX_BOOL bReleaseMembers)
: m_pFormDict(nullptr),
@@ -731,345 +683,339 @@ CPDF_PageObjects::CPDF_PageObjects(FX_BOOL bReleaseMembers)
m_bBackgroundAlphaNeeded(FALSE),
m_bReleaseMembers(bReleaseMembers),
m_pParser(nullptr),
- m_ParseState(CONTENT_NOT_PARSED)
-{
-}
-CPDF_PageObjects::~CPDF_PageObjects()
-{
- delete m_pParser;
- if (!m_bReleaseMembers) {
- return;
- }
- FX_POSITION pos = m_ObjectList.GetHeadPosition();
- while (pos) {
- delete (CPDF_PageObject*)m_ObjectList.GetNext(pos);
- }
-}
-void CPDF_PageObjects::ContinueParse(IFX_Pause* pPause)
-{
- if (m_pParser == NULL) {
- return;
- }
- m_pParser->Continue(pPause);
- if (m_pParser->GetStatus() == CPDF_ContentParser::Done) {
- m_ParseState = CONTENT_PARSED;
- delete m_pParser;
- m_pParser = NULL;
- }
-}
-FX_POSITION CPDF_PageObjects::InsertObject(FX_POSITION posInsertAfter, CPDF_PageObject* pNewObject)
-{
- if (!posInsertAfter) {
- return m_ObjectList.AddHead(pNewObject);
- }
- return m_ObjectList.InsertAfter(posInsertAfter, pNewObject);
-}
-int CPDF_PageObjects::GetObjectIndex(CPDF_PageObject* pObj) const
-{
- int index = 0;
- FX_POSITION pos = m_ObjectList.GetHeadPosition();
- while (pos) {
- CPDF_PageObject* pThisObj = (CPDF_PageObject*)m_ObjectList.GetNext(pos);
- if (pThisObj == pObj) {
- return index;
- }
- index ++;
- }
- return -1;
-}
-CPDF_PageObject* CPDF_PageObjects::GetObjectByIndex(int index) const
-{
- FX_POSITION pos = m_ObjectList.FindIndex(index);
- if (pos == NULL) {
- return NULL;
- }
- return (CPDF_PageObject*)m_ObjectList.GetAt(pos);
-}
-void CPDF_PageObjects::Transform(const CFX_AffineMatrix& matrix)
-{
- FX_POSITION pos = m_ObjectList.GetHeadPosition();
- while (pos) {
- CPDF_PageObject* pObj = (CPDF_PageObject*)m_ObjectList.GetNext(pos);
- pObj->Transform(matrix);
- }
-}
-CFX_FloatRect CPDF_PageObjects::CalcBoundingBox() const
-{
- if (m_ObjectList.GetCount() == 0) {
- return CFX_FloatRect(0, 0, 0, 0);
- }
- FX_FLOAT left, right, top, bottom;
- left = bottom = 1000000 * 1.0f;
- right = top = -1000000 * 1.0f;
- FX_POSITION pos = m_ObjectList.GetHeadPosition();
- while (pos) {
- CPDF_PageObject* pObj = (CPDF_PageObject*)m_ObjectList.GetNext(pos);
- if (left > pObj->m_Left) {
- left = pObj->m_Left;
- }
- if (right < pObj->m_Right) {
- right = pObj->m_Right;
- }
- if (top < pObj->m_Top) {
- top = pObj->m_Top;
- }
- if (bottom > pObj->m_Bottom) {
- bottom = pObj->m_Bottom;
- }
- }
- return CFX_FloatRect(left, bottom, right, top);
-}
-void CPDF_PageObjects::LoadTransInfo()
-{
- if (m_pFormDict == NULL) {
- return;
- }
- CPDF_Dictionary* pGroup = m_pFormDict->GetDict(FX_BSTRC("Group"));
- if (pGroup == NULL) {
- return;
- }
- if (pGroup->GetString(FX_BSTRC("S")) != FX_BSTRC("Transparency")) {
- return;
- }
- m_Transparency |= PDFTRANS_GROUP;
- if (pGroup->GetInteger(FX_BSTRC("I"))) {
- m_Transparency |= PDFTRANS_ISOLATED;
- }
- if (pGroup->GetInteger(FX_BSTRC("K"))) {
- m_Transparency |= PDFTRANS_KNOCKOUT;
- }
-}
-void CPDF_PageObjects::ClearCacheObjects()
-{
- m_ParseState = CONTENT_NOT_PARSED;
+ m_ParseState(CONTENT_NOT_PARSED) {}
+CPDF_PageObjects::~CPDF_PageObjects() {
+ delete m_pParser;
+ if (!m_bReleaseMembers) {
+ return;
+ }
+ FX_POSITION pos = m_ObjectList.GetHeadPosition();
+ while (pos) {
+ delete (CPDF_PageObject*)m_ObjectList.GetNext(pos);
+ }
+}
+void CPDF_PageObjects::ContinueParse(IFX_Pause* pPause) {
+ if (m_pParser == NULL) {
+ return;
+ }
+ m_pParser->Continue(pPause);
+ if (m_pParser->GetStatus() == CPDF_ContentParser::Done) {
+ m_ParseState = CONTENT_PARSED;
delete m_pParser;
m_pParser = NULL;
- if (m_bReleaseMembers) {
- FX_POSITION pos = m_ObjectList.GetHeadPosition();
- while (pos) {
- delete (CPDF_PageObject*)m_ObjectList.GetNext(pos);
- }
- }
- m_ObjectList.RemoveAll();
-}
-CPDF_Page::CPDF_Page()
-{
- m_pPageRender = NULL;
-}
-void CPDF_Page::Load(CPDF_Document* pDocument, CPDF_Dictionary* pPageDict, FX_BOOL bPageCache)
-{
- m_pDocument = (CPDF_Document*)pDocument;
- m_pFormDict = pPageDict;
- if (bPageCache) {
- m_pPageRender = CPDF_ModuleMgr::Get()->GetRenderModule()->CreatePageCache(this);
- }
- if (pPageDict == NULL) {
- m_PageWidth = m_PageHeight = 100 * 1.0f;
- m_pPageResources = m_pResources = NULL;
- return;
- }
- CPDF_Object* pageAttr = GetPageAttr(FX_BSTRC("Resources"));
- m_pResources = pageAttr ? pageAttr->GetDict() : NULL;
- m_pPageResources = m_pResources;
- CPDF_Object* pRotate = GetPageAttr(FX_BSTRC("Rotate"));
- int rotate = 0;
- if (pRotate) {
- rotate = pRotate->GetInteger() / 90 % 4;
- }
- if (rotate < 0) {
- rotate += 4;
- }
- CPDF_Array* pMediaBox, *pCropBox;
- pMediaBox = (CPDF_Array*)GetPageAttr(FX_BSTRC("MediaBox"));
- CFX_FloatRect mediabox;
- if (pMediaBox) {
- mediabox = pMediaBox->GetRect();
- mediabox.Normalize();
- }
- if (mediabox.IsEmpty()) {
- mediabox = CFX_FloatRect(0, 0, 612, 792);
- }
- pCropBox = (CPDF_Array*)GetPageAttr(FX_BSTRC("CropBox"));
- if (pCropBox) {
- m_BBox = pCropBox->GetRect();
- m_BBox.Normalize();
- }
- if (m_BBox.IsEmpty()) {
- m_BBox = mediabox;
- } else {
- m_BBox.Intersect(mediabox);
- }
- if (rotate % 2) {
- m_PageHeight = m_BBox.right - m_BBox.left;
- m_PageWidth = m_BBox.top - m_BBox.bottom;
- } else {
- m_PageWidth = m_BBox.right - m_BBox.left;
- m_PageHeight = m_BBox.top - m_BBox.bottom;
- }
- switch (rotate) {
- case 0:
- m_PageMatrix.Set(1.0f, 0, 0, 1.0f, -m_BBox.left, -m_BBox.bottom);
- break;
- case 1:
- m_PageMatrix.Set(0, -1.0f, 1.0f, 0, -m_BBox.bottom, m_BBox.right);
- break;
- case 2:
- m_PageMatrix.Set(-1.0f, 0, 0, -1.0f, m_BBox.right, m_BBox.top);
- break;
- case 3:
- m_PageMatrix.Set(0, 1.0f, -1.0f, 0, m_BBox.top, -m_BBox.left);
- break;
- }
- m_Transparency = PDFTRANS_ISOLATED;
- LoadTransInfo();
-}
-void CPDF_Page::StartParse(CPDF_ParseOptions* pOptions, FX_BOOL bReParse)
-{
- if (bReParse) {
- ClearCacheObjects();
- }
- if (m_ParseState == CONTENT_PARSED || m_ParseState == CONTENT_PARSING) {
- return;
- }
- m_pParser = new CPDF_ContentParser;
- m_pParser->Start(this, pOptions);
- m_ParseState = CONTENT_PARSING;
-}
-void CPDF_Page::ParseContent(CPDF_ParseOptions* pOptions, FX_BOOL bReParse)
-{
- StartParse(pOptions, bReParse);
- ContinueParse(NULL);
-}
-CPDF_Page::~CPDF_Page()
-{
- if (m_pPageRender) {
- IPDF_RenderModule* pModule = CPDF_ModuleMgr::Get()->GetRenderModule();
- pModule->DestroyPageCache(m_pPageRender);
- }
-}
-CPDF_Object* FPDFAPI_GetPageAttr(CPDF_Dictionary* pPageDict, const CFX_ByteStringC& name)
-{
- int level = 0;
- while (1) {
- CPDF_Object* pObj = pPageDict->GetElementValue(name);
- if (pObj) {
- return pObj;
- }
- CPDF_Dictionary* pParent = pPageDict->GetDict(FX_BSTRC("Parent"));
- if (!pParent || pParent == pPageDict) {
- return NULL;
- }
- pPageDict = pParent;
- level ++;
- if (level == 1000) {
- return NULL;
- }
- }
-}
-CPDF_Object* CPDF_Page::GetPageAttr(const CFX_ByteStringC& name) const
-{
- return FPDFAPI_GetPageAttr(m_pFormDict, name);
-}
-CPDF_Form::CPDF_Form(CPDF_Document* pDoc, CPDF_Dictionary* pPageResources, CPDF_Stream* pFormStream, CPDF_Dictionary* pParentResources)
-{
- m_pDocument = pDoc;
- m_pFormStream = pFormStream;
- m_pFormDict = pFormStream ? pFormStream->GetDict() : NULL;
- m_pResources = m_pFormDict->GetDict(FX_BSTRC("Resources"));
- m_pPageResources = pPageResources;
- if (m_pResources == NULL) {
- m_pResources = pParentResources;
- }
- if (m_pResources == NULL) {
- m_pResources = pPageResources;
- }
- m_Transparency = 0;
- LoadTransInfo();
-}
-CPDF_Form::~CPDF_Form()
-{
-}
-void CPDF_Form::StartParse(CPDF_AllStates* pGraphicStates, CFX_AffineMatrix* pParentMatrix,
- CPDF_Type3Char* pType3Char, CPDF_ParseOptions* pOptions, int level)
-{
- if (m_ParseState == CONTENT_PARSED || m_ParseState == CONTENT_PARSING) {
- return;
- }
- m_pParser = new CPDF_ContentParser;
- m_pParser->Start(this, pGraphicStates, pParentMatrix, pType3Char, pOptions, level);
- m_ParseState = CONTENT_PARSING;
-}
-void CPDF_Form::ParseContent(CPDF_AllStates* pGraphicStates, CFX_AffineMatrix* pParentMatrix,
- CPDF_Type3Char* pType3Char, CPDF_ParseOptions* pOptions, int level)
-{
- StartParse(pGraphicStates, pParentMatrix, pType3Char, pOptions, level);
- ContinueParse(NULL);
-}
-CPDF_Form* CPDF_Form::Clone() const
-{
- CPDF_Form* pClone = new CPDF_Form(m_pDocument, m_pPageResources, m_pFormStream, m_pResources);
+ }
+}
+FX_POSITION CPDF_PageObjects::InsertObject(FX_POSITION posInsertAfter,
+ CPDF_PageObject* pNewObject) {
+ if (!posInsertAfter) {
+ return m_ObjectList.AddHead(pNewObject);
+ }
+ return m_ObjectList.InsertAfter(posInsertAfter, pNewObject);
+}
+int CPDF_PageObjects::GetObjectIndex(CPDF_PageObject* pObj) const {
+ int index = 0;
+ FX_POSITION pos = m_ObjectList.GetHeadPosition();
+ while (pos) {
+ CPDF_PageObject* pThisObj = (CPDF_PageObject*)m_ObjectList.GetNext(pos);
+ if (pThisObj == pObj) {
+ return index;
+ }
+ index++;
+ }
+ return -1;
+}
+CPDF_PageObject* CPDF_PageObjects::GetObjectByIndex(int index) const {
+ FX_POSITION pos = m_ObjectList.FindIndex(index);
+ if (pos == NULL) {
+ return NULL;
+ }
+ return (CPDF_PageObject*)m_ObjectList.GetAt(pos);
+}
+void CPDF_PageObjects::Transform(const CFX_AffineMatrix& matrix) {
+ FX_POSITION pos = m_ObjectList.GetHeadPosition();
+ while (pos) {
+ CPDF_PageObject* pObj = (CPDF_PageObject*)m_ObjectList.GetNext(pos);
+ pObj->Transform(matrix);
+ }
+}
+CFX_FloatRect CPDF_PageObjects::CalcBoundingBox() const {
+ if (m_ObjectList.GetCount() == 0) {
+ return CFX_FloatRect(0, 0, 0, 0);
+ }
+ FX_FLOAT left, right, top, bottom;
+ left = bottom = 1000000 * 1.0f;
+ right = top = -1000000 * 1.0f;
+ FX_POSITION pos = m_ObjectList.GetHeadPosition();
+ while (pos) {
+ CPDF_PageObject* pObj = (CPDF_PageObject*)m_ObjectList.GetNext(pos);
+ if (left > pObj->m_Left) {
+ left = pObj->m_Left;
+ }
+ if (right < pObj->m_Right) {
+ right = pObj->m_Right;
+ }
+ if (top < pObj->m_Top) {
+ top = pObj->m_Top;
+ }
+ if (bottom > pObj->m_Bottom) {
+ bottom = pObj->m_Bottom;
+ }
+ }
+ return CFX_FloatRect(left, bottom, right, top);
+}
+void CPDF_PageObjects::LoadTransInfo() {
+ if (m_pFormDict == NULL) {
+ return;
+ }
+ CPDF_Dictionary* pGroup = m_pFormDict->GetDict(FX_BSTRC("Group"));
+ if (pGroup == NULL) {
+ return;
+ }
+ if (pGroup->GetString(FX_BSTRC("S")) != FX_BSTRC("Transparency")) {
+ return;
+ }
+ m_Transparency |= PDFTRANS_GROUP;
+ if (pGroup->GetInteger(FX_BSTRC("I"))) {
+ m_Transparency |= PDFTRANS_ISOLATED;
+ }
+ if (pGroup->GetInteger(FX_BSTRC("K"))) {
+ m_Transparency |= PDFTRANS_KNOCKOUT;
+ }
+}
+void CPDF_PageObjects::ClearCacheObjects() {
+ m_ParseState = CONTENT_NOT_PARSED;
+ delete m_pParser;
+ m_pParser = NULL;
+ if (m_bReleaseMembers) {
FX_POSITION pos = m_ObjectList.GetHeadPosition();
while (pos) {
- CPDF_PageObject* pObj = (CPDF_PageObject*)m_ObjectList.GetNext(pos);
- pClone->m_ObjectList.AddTail(pObj->Clone());
- }
- return pClone;
-}
-void CPDF_Page::GetDisplayMatrix(CFX_AffineMatrix& matrix, int xPos, int yPos,
- int xSize, int ySize, int iRotate) const
-{
- if (m_PageWidth == 0 || m_PageHeight == 0) {
- return;
- }
- CFX_AffineMatrix display_matrix;
- int x0, y0, x1, y1, x2, y2;
- iRotate %= 4;
- switch (iRotate) {
- case 0:
- x0 = xPos;
- y0 = yPos + ySize;
- x1 = xPos;
- y1 = yPos;
- x2 = xPos + xSize;
- y2 = yPos + ySize;
- break;
- case 1:
- x0 = xPos;
- y0 = yPos;
- x1 = xPos + xSize;
- y1 = yPos;
- x2 = xPos;
- y2 = yPos + ySize;
- break;
- case 2:
- x0 = xPos + xSize;
- y0 = yPos;
- x1 = xPos + xSize;
- y1 = yPos + ySize;
- x2 = xPos;
- y2 = yPos;
- break;
- case 3:
- x0 = xPos + xSize;
- y0 = yPos + ySize;
- x1 = xPos;
- y1 = yPos + ySize;
- x2 = xPos + xSize;
- y2 = yPos;
- break;
- }
- display_matrix.Set(FXSYS_Div((FX_FLOAT)(x2 - x0), m_PageWidth),
- FXSYS_Div((FX_FLOAT)(y2 - y0), m_PageWidth),
- FXSYS_Div((FX_FLOAT)(x1 - x0), m_PageHeight),
- FXSYS_Div((FX_FLOAT)(y1 - y0), m_PageHeight),
- (FX_FLOAT)x0, (FX_FLOAT)y0);
- matrix = m_PageMatrix;
- matrix.Concat(display_matrix);
-}
-CPDF_ParseOptions::CPDF_ParseOptions()
-{
- m_bTextOnly = FALSE;
- m_bMarkedContent = TRUE;
- m_bSeparateForm = TRUE;
- m_bDecodeInlineImage = FALSE;
+ delete (CPDF_PageObject*)m_ObjectList.GetNext(pos);
+ }
+ }
+ m_ObjectList.RemoveAll();
+}
+CPDF_Page::CPDF_Page() {
+ m_pPageRender = NULL;
+}
+void CPDF_Page::Load(CPDF_Document* pDocument,
+ CPDF_Dictionary* pPageDict,
+ FX_BOOL bPageCache) {
+ m_pDocument = (CPDF_Document*)pDocument;
+ m_pFormDict = pPageDict;
+ if (bPageCache) {
+ m_pPageRender =
+ CPDF_ModuleMgr::Get()->GetRenderModule()->CreatePageCache(this);
+ }
+ if (pPageDict == NULL) {
+ m_PageWidth = m_PageHeight = 100 * 1.0f;
+ m_pPageResources = m_pResources = NULL;
+ return;
+ }
+ CPDF_Object* pageAttr = GetPageAttr(FX_BSTRC("Resources"));
+ m_pResources = pageAttr ? pageAttr->GetDict() : NULL;
+ m_pPageResources = m_pResources;
+ CPDF_Object* pRotate = GetPageAttr(FX_BSTRC("Rotate"));
+ int rotate = 0;
+ if (pRotate) {
+ rotate = pRotate->GetInteger() / 90 % 4;
+ }
+ if (rotate < 0) {
+ rotate += 4;
+ }
+ CPDF_Array *pMediaBox, *pCropBox;
+ pMediaBox = (CPDF_Array*)GetPageAttr(FX_BSTRC("MediaBox"));
+ CFX_FloatRect mediabox;
+ if (pMediaBox) {
+ mediabox = pMediaBox->GetRect();
+ mediabox.Normalize();
+ }
+ if (mediabox.IsEmpty()) {
+ mediabox = CFX_FloatRect(0, 0, 612, 792);
+ }
+ pCropBox = (CPDF_Array*)GetPageAttr(FX_BSTRC("CropBox"));
+ if (pCropBox) {
+ m_BBox = pCropBox->GetRect();
+ m_BBox.Normalize();
+ }
+ if (m_BBox.IsEmpty()) {
+ m_BBox = mediabox;
+ } else {
+ m_BBox.Intersect(mediabox);
+ }
+ if (rotate % 2) {
+ m_PageHeight = m_BBox.right - m_BBox.left;
+ m_PageWidth = m_BBox.top - m_BBox.bottom;
+ } else {
+ m_PageWidth = m_BBox.right - m_BBox.left;
+ m_PageHeight = m_BBox.top - m_BBox.bottom;
+ }
+ switch (rotate) {
+ case 0:
+ m_PageMatrix.Set(1.0f, 0, 0, 1.0f, -m_BBox.left, -m_BBox.bottom);
+ break;
+ case 1:
+ m_PageMatrix.Set(0, -1.0f, 1.0f, 0, -m_BBox.bottom, m_BBox.right);
+ break;
+ case 2:
+ m_PageMatrix.Set(-1.0f, 0, 0, -1.0f, m_BBox.right, m_BBox.top);
+ break;
+ case 3:
+ m_PageMatrix.Set(0, 1.0f, -1.0f, 0, m_BBox.top, -m_BBox.left);
+ break;
+ }
+ m_Transparency = PDFTRANS_ISOLATED;
+ LoadTransInfo();
+}
+void CPDF_Page::StartParse(CPDF_ParseOptions* pOptions, FX_BOOL bReParse) {
+ if (bReParse) {
+ ClearCacheObjects();
+ }
+ if (m_ParseState == CONTENT_PARSED || m_ParseState == CONTENT_PARSING) {
+ return;
+ }
+ m_pParser = new CPDF_ContentParser;
+ m_pParser->Start(this, pOptions);
+ m_ParseState = CONTENT_PARSING;
+}
+void CPDF_Page::ParseContent(CPDF_ParseOptions* pOptions, FX_BOOL bReParse) {
+ StartParse(pOptions, bReParse);
+ ContinueParse(NULL);
+}
+CPDF_Page::~CPDF_Page() {
+ if (m_pPageRender) {
+ IPDF_RenderModule* pModule = CPDF_ModuleMgr::Get()->GetRenderModule();
+ pModule->DestroyPageCache(m_pPageRender);
+ }
+}
+CPDF_Object* FPDFAPI_GetPageAttr(CPDF_Dictionary* pPageDict,
+ const CFX_ByteStringC& name) {
+ int level = 0;
+ while (1) {
+ CPDF_Object* pObj = pPageDict->GetElementValue(name);
+ if (pObj) {
+ return pObj;
+ }
+ CPDF_Dictionary* pParent = pPageDict->GetDict(FX_BSTRC("Parent"));
+ if (!pParent || pParent == pPageDict) {
+ return NULL;
+ }
+ pPageDict = pParent;
+ level++;
+ if (level == 1000) {
+ return NULL;
+ }
+ }
+}
+CPDF_Object* CPDF_Page::GetPageAttr(const CFX_ByteStringC& name) const {
+ return FPDFAPI_GetPageAttr(m_pFormDict, name);
+}
+CPDF_Form::CPDF_Form(CPDF_Document* pDoc,
+ CPDF_Dictionary* pPageResources,
+ CPDF_Stream* pFormStream,
+ CPDF_Dictionary* pParentResources) {
+ m_pDocument = pDoc;
+ m_pFormStream = pFormStream;
+ m_pFormDict = pFormStream ? pFormStream->GetDict() : NULL;
+ m_pResources = m_pFormDict->GetDict(FX_BSTRC("Resources"));
+ m_pPageResources = pPageResources;
+ if (m_pResources == NULL) {
+ m_pResources = pParentResources;
+ }
+ if (m_pResources == NULL) {
+ m_pResources = pPageResources;
+ }
+ m_Transparency = 0;
+ LoadTransInfo();
+}
+CPDF_Form::~CPDF_Form() {}
+void CPDF_Form::StartParse(CPDF_AllStates* pGraphicStates,
+ CFX_AffineMatrix* pParentMatrix,
+ CPDF_Type3Char* pType3Char,
+ CPDF_ParseOptions* pOptions,
+ int level) {
+ if (m_ParseState == CONTENT_PARSED || m_ParseState == CONTENT_PARSING) {
+ return;
+ }
+ m_pParser = new CPDF_ContentParser;
+ m_pParser->Start(this, pGraphicStates, pParentMatrix, pType3Char, pOptions,
+ level);
+ m_ParseState = CONTENT_PARSING;
+}
+void CPDF_Form::ParseContent(CPDF_AllStates* pGraphicStates,
+ CFX_AffineMatrix* pParentMatrix,
+ CPDF_Type3Char* pType3Char,
+ CPDF_ParseOptions* pOptions,
+ int level) {
+ StartParse(pGraphicStates, pParentMatrix, pType3Char, pOptions, level);
+ ContinueParse(NULL);
+}
+CPDF_Form* CPDF_Form::Clone() const {
+ CPDF_Form* pClone =
+ new CPDF_Form(m_pDocument, m_pPageResources, m_pFormStream, m_pResources);
+ FX_POSITION pos = m_ObjectList.GetHeadPosition();
+ while (pos) {
+ CPDF_PageObject* pObj = (CPDF_PageObject*)m_ObjectList.GetNext(pos);
+ pClone->m_ObjectList.AddTail(pObj->Clone());
+ }
+ return pClone;
+}
+void CPDF_Page::GetDisplayMatrix(CFX_AffineMatrix& matrix,
+ int xPos,
+ int yPos,
+ int xSize,
+ int ySize,
+ int iRotate) const {
+ if (m_PageWidth == 0 || m_PageHeight == 0) {
+ return;
+ }
+ CFX_AffineMatrix display_matrix;
+ int x0, y0, x1, y1, x2, y2;
+ iRotate %= 4;
+ switch (iRotate) {
+ case 0:
+ x0 = xPos;
+ y0 = yPos + ySize;
+ x1 = xPos;
+ y1 = yPos;
+ x2 = xPos + xSize;
+ y2 = yPos + ySize;
+ break;
+ case 1:
+ x0 = xPos;
+ y0 = yPos;
+ x1 = xPos + xSize;
+ y1 = yPos;
+ x2 = xPos;
+ y2 = yPos + ySize;
+ break;
+ case 2:
+ x0 = xPos + xSize;
+ y0 = yPos;
+ x1 = xPos + xSize;
+ y1 = yPos + ySize;
+ x2 = xPos;
+ y2 = yPos;
+ break;
+ case 3:
+ x0 = xPos + xSize;
+ y0 = yPos + ySize;
+ x1 = xPos;
+ y1 = yPos + ySize;
+ x2 = xPos + xSize;
+ y2 = yPos;
+ break;
+ }
+ display_matrix.Set(FXSYS_Div((FX_FLOAT)(x2 - x0), m_PageWidth),
+ FXSYS_Div((FX_FLOAT)(y2 - y0), m_PageWidth),
+ FXSYS_Div((FX_FLOAT)(x1 - x0), m_PageHeight),
+ FXSYS_Div((FX_FLOAT)(y1 - y0), m_PageHeight), (FX_FLOAT)x0,
+ (FX_FLOAT)y0);
+ matrix = m_PageMatrix;
+ matrix.Concat(display_matrix);
+}
+CPDF_ParseOptions::CPDF_ParseOptions() {
+ m_bTextOnly = FALSE;
+ m_bMarkedContent = TRUE;
+ m_bSeparateForm = TRUE;
+ m_bDecodeInlineImage = FALSE;
}
diff --git a/core/src/fpdfapi/fpdf_page/fpdf_page_colors.cpp b/core/src/fpdfapi/fpdf_page/fpdf_page_colors.cpp
index 198054ef7e..c07806c994 100644
--- a/core/src/fpdfapi/fpdf_page/fpdf_page_colors.cpp
+++ b/core/src/fpdfapi/fpdf_page/fpdf_page_colors.cpp
@@ -12,1436 +12,1543 @@
namespace {
-void sRGB_to_AdobeCMYK(FX_FLOAT R, FX_FLOAT G, FX_FLOAT B, FX_FLOAT& c, FX_FLOAT& m, FX_FLOAT& y, FX_FLOAT& k)
-{
- c = 1.0f - R;
- m = 1.0f - G;
- y = 1.0f - B;
- k = c;
- if (m < k) {
- k = m;
- }
- if (y < k) {
- k = y;
- }
+void sRGB_to_AdobeCMYK(FX_FLOAT R,
+ FX_FLOAT G,
+ FX_FLOAT B,
+ FX_FLOAT& c,
+ FX_FLOAT& m,
+ FX_FLOAT& y,
+ FX_FLOAT& k) {
+ c = 1.0f - R;
+ m = 1.0f - G;
+ y = 1.0f - B;
+ k = c;
+ if (m < k) {
+ k = m;
+ }
+ if (y < k) {
+ k = y;
+ }
}
int ComponentsForFamily(int family) {
- if (family == PDFCS_DEVICERGB)
- return 3;
- if (family == PDFCS_DEVICEGRAY)
- return 1;
- return 4;
+ if (family == PDFCS_DEVICERGB)
+ return 3;
+ if (family == PDFCS_DEVICEGRAY)
+ return 1;
+ return 4;
}
} // namespace
CPDF_DeviceCS::CPDF_DeviceCS(CPDF_Document* pDoc, int family)
- : CPDF_ColorSpace(pDoc, family, ComponentsForFamily(family)) {
-}
+ : CPDF_ColorSpace(pDoc, family, ComponentsForFamily(family)) {}
-FX_BOOL CPDF_DeviceCS::GetRGB(FX_FLOAT* pBuf, FX_FLOAT& R, FX_FLOAT& G, FX_FLOAT& B) const
-{
- if (m_Family == PDFCS_DEVICERGB) {
- R = pBuf[0];
- if (R < 0) {
- R = 0;
- } else if (R > 1) {
- R = 1;
- }
- G = pBuf[1];
- if (G < 0) {
- G = 0;
- } else if (G > 1) {
- G = 1;
- }
- B = pBuf[2];
- if (B < 0) {
- B = 0;
- } else if (B > 1) {
- B = 1;
- }
- } else if (m_Family == PDFCS_DEVICEGRAY) {
- R = *pBuf;
- if (R < 0) {
- R = 0;
- } else if (R > 1) {
- R = 1;
- }
- G = B = R;
- } else if (m_Family == PDFCS_DEVICECMYK) {
- if (!m_dwStdConversion) {
- AdobeCMYK_to_sRGB(pBuf[0], pBuf[1], pBuf[2], pBuf[3], R, G, B);
- } else {
- FX_FLOAT k = pBuf[3];
- R = 1.0f - FX_MIN(1.0f, pBuf[0] + k);
- G = 1.0f - FX_MIN(1.0f, pBuf[1] + k);
- B = 1.0f - FX_MIN(1.0f, pBuf[2] + k);
- }
+FX_BOOL CPDF_DeviceCS::GetRGB(FX_FLOAT* pBuf,
+ FX_FLOAT& R,
+ FX_FLOAT& G,
+ FX_FLOAT& B) const {
+ if (m_Family == PDFCS_DEVICERGB) {
+ R = pBuf[0];
+ if (R < 0) {
+ R = 0;
+ } else if (R > 1) {
+ R = 1;
+ }
+ G = pBuf[1];
+ if (G < 0) {
+ G = 0;
+ } else if (G > 1) {
+ G = 1;
+ }
+ B = pBuf[2];
+ if (B < 0) {
+ B = 0;
+ } else if (B > 1) {
+ B = 1;
+ }
+ } else if (m_Family == PDFCS_DEVICEGRAY) {
+ R = *pBuf;
+ if (R < 0) {
+ R = 0;
+ } else if (R > 1) {
+ R = 1;
+ }
+ G = B = R;
+ } else if (m_Family == PDFCS_DEVICECMYK) {
+ if (!m_dwStdConversion) {
+ AdobeCMYK_to_sRGB(pBuf[0], pBuf[1], pBuf[2], pBuf[3], R, G, B);
} else {
- ASSERT(m_Family == PDFCS_PATTERN);
- R = G = B = 0;
- return FALSE;
- }
- return TRUE;
-}
-FX_BOOL CPDF_DeviceCS::v_GetCMYK(FX_FLOAT* pBuf, FX_FLOAT& c, FX_FLOAT& m, FX_FLOAT& y, FX_FLOAT& k) const
-{
- if (m_Family != PDFCS_DEVICECMYK) {
- return FALSE;
- }
- c = pBuf[0];
- m = pBuf[1];
- y = pBuf[2];
- k = pBuf[3];
- return TRUE;
-}
-FX_BOOL CPDF_DeviceCS::SetRGB(FX_FLOAT* pBuf, FX_FLOAT R, FX_FLOAT G, FX_FLOAT B) const
-{
- if (m_Family == PDFCS_DEVICERGB) {
- pBuf[0] = R;
- pBuf[1] = G;
- pBuf[2] = B;
- return TRUE;
- }
- if (m_Family == PDFCS_DEVICEGRAY) {
- if (R == G && R == B) {
- *pBuf = R;
- return TRUE;
- }
- return FALSE;
- }
- if (m_Family == PDFCS_DEVICECMYK) {
- sRGB_to_AdobeCMYK(R, G, B, pBuf[0], pBuf[1], pBuf[2], pBuf[3]);
- return TRUE;
+ FX_FLOAT k = pBuf[3];
+ R = 1.0f - FX_MIN(1.0f, pBuf[0] + k);
+ G = 1.0f - FX_MIN(1.0f, pBuf[1] + k);
+ B = 1.0f - FX_MIN(1.0f, pBuf[2] + k);
}
+ } else {
+ ASSERT(m_Family == PDFCS_PATTERN);
+ R = G = B = 0;
return FALSE;
-}
-FX_BOOL CPDF_DeviceCS::v_SetCMYK(FX_FLOAT* pBuf, FX_FLOAT c, FX_FLOAT m, FX_FLOAT y, FX_FLOAT k) const
-{
- if (m_Family == PDFCS_DEVICERGB) {
- AdobeCMYK_to_sRGB(c, m, y, k, pBuf[0], pBuf[1], pBuf[2]);
- return TRUE;
- }
- if (m_Family == PDFCS_DEVICECMYK) {
- pBuf[0] = c;
- pBuf[1] = m;
- pBuf[2] = y;
- pBuf[3] = k;
- return TRUE;
- }
+ }
+ return TRUE;
+}
+FX_BOOL CPDF_DeviceCS::v_GetCMYK(FX_FLOAT* pBuf,
+ FX_FLOAT& c,
+ FX_FLOAT& m,
+ FX_FLOAT& y,
+ FX_FLOAT& k) const {
+ if (m_Family != PDFCS_DEVICECMYK) {
return FALSE;
-}
-static void ReverseRGB(uint8_t* pDestBuf, const uint8_t* pSrcBuf, int pixels)
-{
- if (pDestBuf == pSrcBuf)
- for (int i = 0; i < pixels; i ++) {
- uint8_t temp = pDestBuf[2];
- pDestBuf[2] = pDestBuf[0];
- pDestBuf[0] = temp;
- pDestBuf += 3;
- }
- else
- for (int i = 0; i < pixels; i ++) {
- *pDestBuf ++ = pSrcBuf[2];
- *pDestBuf ++ = pSrcBuf[1];
- *pDestBuf ++ = pSrcBuf[0];
- pSrcBuf += 3;
- }
-}
-void CPDF_DeviceCS::TranslateImageLine(uint8_t* pDestBuf, const uint8_t* pSrcBuf, int pixels, int image_width, int image_height, FX_BOOL bTransMask) const
-{
- if (bTransMask && m_Family == PDFCS_DEVICECMYK) {
- for (int i = 0; i < pixels; i ++) {
- int k = 255 - pSrcBuf[3];
- pDestBuf[0] = ((255 - pSrcBuf[0]) * k) / 255;
- pDestBuf[1] = ((255 - pSrcBuf[1]) * k) / 255;
- pDestBuf[2] = ((255 - pSrcBuf[2]) * k) / 255;
- pDestBuf += 3;
- pSrcBuf += 4;
- }
- return;
- }
- if (m_Family == PDFCS_DEVICERGB) {
- ReverseRGB(pDestBuf, pSrcBuf, pixels);
- } else if (m_Family == PDFCS_DEVICEGRAY) {
- for (int i = 0; i < pixels; i ++) {
- *pDestBuf ++ = pSrcBuf[i];
- *pDestBuf ++ = pSrcBuf[i];
- *pDestBuf ++ = pSrcBuf[i];
- }
- } else {
- for (int i = 0; i < pixels; i ++) {
- if (!m_dwStdConversion) {
- AdobeCMYK_to_sRGB1(pSrcBuf[0], pSrcBuf[1], pSrcBuf[2], pSrcBuf[3], pDestBuf[2], pDestBuf[1], pDestBuf[0]);
- } else {
- uint8_t k = pSrcBuf[3];
- pDestBuf[2] = 255 - FX_MIN(255, pSrcBuf[0] + k);
- pDestBuf[1] = 255 - FX_MIN(255, pSrcBuf[1] + k);
- pDestBuf[0] = 255 - FX_MIN(255, pSrcBuf[2] + k);
- }
- pSrcBuf += 4;
- pDestBuf += 3;
- }
+ }
+ c = pBuf[0];
+ m = pBuf[1];
+ y = pBuf[2];
+ k = pBuf[3];
+ return TRUE;
+}
+FX_BOOL CPDF_DeviceCS::SetRGB(FX_FLOAT* pBuf,
+ FX_FLOAT R,
+ FX_FLOAT G,
+ FX_FLOAT B) const {
+ if (m_Family == PDFCS_DEVICERGB) {
+ pBuf[0] = R;
+ pBuf[1] = G;
+ pBuf[2] = B;
+ return TRUE;
+ }
+ if (m_Family == PDFCS_DEVICEGRAY) {
+ if (R == G && R == B) {
+ *pBuf = R;
+ return TRUE;
}
+ return FALSE;
+ }
+ if (m_Family == PDFCS_DEVICECMYK) {
+ sRGB_to_AdobeCMYK(R, G, B, pBuf[0], pBuf[1], pBuf[2], pBuf[3]);
+ return TRUE;
+ }
+ return FALSE;
+}
+FX_BOOL CPDF_DeviceCS::v_SetCMYK(FX_FLOAT* pBuf,
+ FX_FLOAT c,
+ FX_FLOAT m,
+ FX_FLOAT y,
+ FX_FLOAT k) const {
+ if (m_Family == PDFCS_DEVICERGB) {
+ AdobeCMYK_to_sRGB(c, m, y, k, pBuf[0], pBuf[1], pBuf[2]);
+ return TRUE;
+ }
+ if (m_Family == PDFCS_DEVICECMYK) {
+ pBuf[0] = c;
+ pBuf[1] = m;
+ pBuf[2] = y;
+ pBuf[3] = k;
+ return TRUE;
+ }
+ return FALSE;
+}
+static void ReverseRGB(uint8_t* pDestBuf, const uint8_t* pSrcBuf, int pixels) {
+ if (pDestBuf == pSrcBuf)
+ for (int i = 0; i < pixels; i++) {
+ uint8_t temp = pDestBuf[2];
+ pDestBuf[2] = pDestBuf[0];
+ pDestBuf[0] = temp;
+ pDestBuf += 3;
+ }
+ else
+ for (int i = 0; i < pixels; i++) {
+ *pDestBuf++ = pSrcBuf[2];
+ *pDestBuf++ = pSrcBuf[1];
+ *pDestBuf++ = pSrcBuf[0];
+ pSrcBuf += 3;
+ }
+}
+void CPDF_DeviceCS::TranslateImageLine(uint8_t* pDestBuf,
+ const uint8_t* pSrcBuf,
+ int pixels,
+ int image_width,
+ int image_height,
+ FX_BOOL bTransMask) const {
+ if (bTransMask && m_Family == PDFCS_DEVICECMYK) {
+ for (int i = 0; i < pixels; i++) {
+ int k = 255 - pSrcBuf[3];
+ pDestBuf[0] = ((255 - pSrcBuf[0]) * k) / 255;
+ pDestBuf[1] = ((255 - pSrcBuf[1]) * k) / 255;
+ pDestBuf[2] = ((255 - pSrcBuf[2]) * k) / 255;
+ pDestBuf += 3;
+ pSrcBuf += 4;
+ }
+ return;
+ }
+ if (m_Family == PDFCS_DEVICERGB) {
+ ReverseRGB(pDestBuf, pSrcBuf, pixels);
+ } else if (m_Family == PDFCS_DEVICEGRAY) {
+ for (int i = 0; i < pixels; i++) {
+ *pDestBuf++ = pSrcBuf[i];
+ *pDestBuf++ = pSrcBuf[i];
+ *pDestBuf++ = pSrcBuf[i];
+ }
+ } else {
+ for (int i = 0; i < pixels; i++) {
+ if (!m_dwStdConversion) {
+ AdobeCMYK_to_sRGB1(pSrcBuf[0], pSrcBuf[1], pSrcBuf[2], pSrcBuf[3],
+ pDestBuf[2], pDestBuf[1], pDestBuf[0]);
+ } else {
+ uint8_t k = pSrcBuf[3];
+ pDestBuf[2] = 255 - FX_MIN(255, pSrcBuf[0] + k);
+ pDestBuf[1] = 255 - FX_MIN(255, pSrcBuf[1] + k);
+ pDestBuf[0] = 255 - FX_MIN(255, pSrcBuf[2] + k);
+ }
+ pSrcBuf += 4;
+ pDestBuf += 3;
+ }
+ }
}
const uint8_t g_sRGBSamples1[] = {
- 0, 3, 6, 10, 13, 15, 18, 20, 22, 23, 25, 27, 28, 30, 31, 32,
- 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49,
- 49, 50, 51, 52, 53, 53, 54, 55, 56, 56, 57, 58, 58, 59, 60, 61,
- 61, 62, 62, 63, 64, 64, 65, 66, 66, 67, 67, 68, 68, 69, 70, 70,
- 71, 71, 72, 72, 73, 73, 74, 74, 75, 76, 76, 77, 77, 78, 78, 79,
- 79, 79, 80, 80, 81, 81, 82, 82, 83, 83, 84, 84, 85, 85, 85, 86,
- 86, 87, 87, 88, 88, 88, 89, 89, 90, 90, 91, 91, 91, 92, 92, 93,
- 93, 93, 94, 94, 95, 95, 95, 96, 96, 97, 97, 97, 98, 98, 98, 99,
- 99, 99, 100, 100, 101, 101, 101, 102, 102, 102, 103, 103, 103, 104, 104, 104,
- 105, 105, 106, 106, 106, 107, 107, 107, 108, 108, 108, 109, 109, 109, 110, 110,
- 110, 110, 111, 111, 111, 112, 112, 112, 113, 113, 113, 114, 114, 114, 115, 115,
- 115, 115, 116, 116, 116, 117, 117, 117, 118, 118, 118, 118, 119, 119, 119, 120,
+ 0, 3, 6, 10, 13, 15, 18, 20, 22, 23, 25, 27, 28, 30, 31,
+ 32, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
+ 48, 49, 49, 50, 51, 52, 53, 53, 54, 55, 56, 56, 57, 58, 58,
+ 59, 60, 61, 61, 62, 62, 63, 64, 64, 65, 66, 66, 67, 67, 68,
+ 68, 69, 70, 70, 71, 71, 72, 72, 73, 73, 74, 74, 75, 76, 76,
+ 77, 77, 78, 78, 79, 79, 79, 80, 80, 81, 81, 82, 82, 83, 83,
+ 84, 84, 85, 85, 85, 86, 86, 87, 87, 88, 88, 88, 89, 89, 90,
+ 90, 91, 91, 91, 92, 92, 93, 93, 93, 94, 94, 95, 95, 95, 96,
+ 96, 97, 97, 97, 98, 98, 98, 99, 99, 99, 100, 100, 101, 101, 101,
+ 102, 102, 102, 103, 103, 103, 104, 104, 104, 105, 105, 106, 106, 106, 107,
+ 107, 107, 108, 108, 108, 109, 109, 109, 110, 110, 110, 110, 111, 111, 111,
+ 112, 112, 112, 113, 113, 113, 114, 114, 114, 115, 115, 115, 115, 116, 116,
+ 116, 117, 117, 117, 118, 118, 118, 118, 119, 119, 119, 120,
};
const uint8_t g_sRGBSamples2[] = {
- 120, 121, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136,
- 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 148, 149, 150, 151,
- 152, 153, 154, 155, 155, 156, 157, 158, 159, 159, 160, 161, 162, 163, 163, 164,
- 165, 166, 167, 167, 168, 169, 170, 170, 171, 172, 173, 173, 174, 175, 175, 176,
- 177, 178, 178, 179, 180, 180, 181, 182, 182, 183, 184, 185, 185, 186, 187, 187,
- 188, 189, 189, 190, 190, 191, 192, 192, 193, 194, 194, 195, 196, 196, 197, 197,
- 198, 199, 199, 200, 200, 201, 202, 202, 203, 203, 204, 205, 205, 206, 206, 207,
- 208, 208, 209, 209, 210, 210, 211, 212, 212, 213, 213, 214, 214, 215, 215, 216,
- 216, 217, 218, 218, 219, 219, 220, 220, 221, 221, 222, 222, 223, 223, 224, 224,
- 225, 226, 226, 227, 227, 228, 228, 229, 229, 230, 230, 231, 231, 232, 232, 233,
- 233, 234, 234, 235, 235, 236, 236, 237, 237, 238, 238, 238, 239, 239, 240, 240,
- 241, 241, 242, 242, 243, 243, 244, 244, 245, 245, 246, 246, 246, 247, 247, 248,
- 248, 249, 249, 250, 250, 251, 251, 251, 252, 252, 253, 253, 254, 254, 255, 255,
+ 120, 121, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135,
+ 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 148, 149,
+ 150, 151, 152, 153, 154, 155, 155, 156, 157, 158, 159, 159, 160, 161, 162,
+ 163, 163, 164, 165, 166, 167, 167, 168, 169, 170, 170, 171, 172, 173, 173,
+ 174, 175, 175, 176, 177, 178, 178, 179, 180, 180, 181, 182, 182, 183, 184,
+ 185, 185, 186, 187, 187, 188, 189, 189, 190, 190, 191, 192, 192, 193, 194,
+ 194, 195, 196, 196, 197, 197, 198, 199, 199, 200, 200, 201, 202, 202, 203,
+ 203, 204, 205, 205, 206, 206, 207, 208, 208, 209, 209, 210, 210, 211, 212,
+ 212, 213, 213, 214, 214, 215, 215, 216, 216, 217, 218, 218, 219, 219, 220,
+ 220, 221, 221, 222, 222, 223, 223, 224, 224, 225, 226, 226, 227, 227, 228,
+ 228, 229, 229, 230, 230, 231, 231, 232, 232, 233, 233, 234, 234, 235, 235,
+ 236, 236, 237, 237, 238, 238, 238, 239, 239, 240, 240, 241, 241, 242, 242,
+ 243, 243, 244, 244, 245, 245, 246, 246, 246, 247, 247, 248, 248, 249, 249,
+ 250, 250, 251, 251, 251, 252, 252, 253, 253, 254, 254, 255, 255,
};
-static FX_FLOAT RGB_Conversion(FX_FLOAT colorComponent)
-{
- if (colorComponent > 1) {
- colorComponent = 1;
- }
- if (colorComponent < 0) {
- colorComponent = 0;
- }
- int scale = (int)(colorComponent * 1023);
- if (scale < 0) {
- scale = 0;
- }
- if (scale < 192) {
- colorComponent = (g_sRGBSamples1[scale] / 255.0f);
- }
- else {
- colorComponent = (g_sRGBSamples2[scale / 4 - 48] / 255.0f);
- }
- return colorComponent;
+static FX_FLOAT RGB_Conversion(FX_FLOAT colorComponent) {
+ if (colorComponent > 1) {
+ colorComponent = 1;
+ }
+ if (colorComponent < 0) {
+ colorComponent = 0;
+ }
+ int scale = (int)(colorComponent * 1023);
+ if (scale < 0) {
+ scale = 0;
+ }
+ if (scale < 192) {
+ colorComponent = (g_sRGBSamples1[scale] / 255.0f);
+ } else {
+ colorComponent = (g_sRGBSamples2[scale / 4 - 48] / 255.0f);
+ }
+ return colorComponent;
}
-static void XYZ_to_sRGB(FX_FLOAT X, FX_FLOAT Y, FX_FLOAT Z, FX_FLOAT& R, FX_FLOAT& G, FX_FLOAT& B)
-{
- FX_FLOAT R1 = 3.2410f * X - 1.5374f * Y - 0.4986f * Z;
- FX_FLOAT G1 = -0.9692f * X + 1.8760f * Y + 0.0416f * Z;
- FX_FLOAT B1 = 0.0556f * X - 0.2040f * Y + 1.0570f * Z;
+static void XYZ_to_sRGB(FX_FLOAT X,
+ FX_FLOAT Y,
+ FX_FLOAT Z,
+ FX_FLOAT& R,
+ FX_FLOAT& G,
+ FX_FLOAT& B) {
+ FX_FLOAT R1 = 3.2410f * X - 1.5374f * Y - 0.4986f * Z;
+ FX_FLOAT G1 = -0.9692f * X + 1.8760f * Y + 0.0416f * Z;
+ FX_FLOAT B1 = 0.0556f * X - 0.2040f * Y + 1.0570f * Z;
- R = RGB_Conversion(R1);
- G = RGB_Conversion(G1);
- B = RGB_Conversion(B1);
+ R = RGB_Conversion(R1);
+ G = RGB_Conversion(G1);
+ B = RGB_Conversion(B1);
}
-static void XYZ_to_sRGB_WhitePoint(FX_FLOAT X, FX_FLOAT Y, FX_FLOAT Z, FX_FLOAT& R, FX_FLOAT& G, FX_FLOAT& B, FX_FLOAT Xw, FX_FLOAT Yw, FX_FLOAT Zw)
-{
- // The following RGB_xyz is based on
- // sRGB value {Rx,Ry}={0.64, 0.33}, {Gx,Gy}={0.30, 0.60}, {Bx,By}={0.15, 0.06}
+static void XYZ_to_sRGB_WhitePoint(FX_FLOAT X,
+ FX_FLOAT Y,
+ FX_FLOAT Z,
+ FX_FLOAT& R,
+ FX_FLOAT& G,
+ FX_FLOAT& B,
+ FX_FLOAT Xw,
+ FX_FLOAT Yw,
+ FX_FLOAT Zw) {
+ // The following RGB_xyz is based on
+ // sRGB value {Rx,Ry}={0.64, 0.33}, {Gx,Gy}={0.30, 0.60}, {Bx,By}={0.15, 0.06}
- FX_FLOAT Rx = 0.64f, Ry = 0.33f;
- FX_FLOAT Gx = 0.30f, Gy = 0.60f;
- FX_FLOAT Bx = 0.15f, By = 0.06f;
- CFX_Matrix_3by3 RGB_xyz(Rx, Gx, Bx, Ry, Gy, By, 1 - Rx - Ry, 1 - Gx - Gy, 1 - Bx - By);
- CFX_Vector_3by1 whitePoint(Xw, Yw, Zw);
- CFX_Vector_3by1 XYZ(X, Y, Z);
+ FX_FLOAT Rx = 0.64f, Ry = 0.33f;
+ FX_FLOAT Gx = 0.30f, Gy = 0.60f;
+ FX_FLOAT Bx = 0.15f, By = 0.06f;
+ CFX_Matrix_3by3 RGB_xyz(Rx, Gx, Bx, Ry, Gy, By, 1 - Rx - Ry, 1 - Gx - Gy,
+ 1 - Bx - By);
+ CFX_Vector_3by1 whitePoint(Xw, Yw, Zw);
+ CFX_Vector_3by1 XYZ(X, Y, Z);
- CFX_Vector_3by1 RGB_Sum_XYZ = RGB_xyz.Inverse().TransformVector(whitePoint);
- CFX_Matrix_3by3 RGB_SUM_XYZ_DIAG(RGB_Sum_XYZ.a, 0, 0, 0, RGB_Sum_XYZ.b, 0, 0, 0, RGB_Sum_XYZ.c);
- CFX_Matrix_3by3 M = RGB_xyz.Multiply(RGB_SUM_XYZ_DIAG);
- CFX_Vector_3by1 RGB = M.Inverse().TransformVector(XYZ);
+ CFX_Vector_3by1 RGB_Sum_XYZ = RGB_xyz.Inverse().TransformVector(whitePoint);
+ CFX_Matrix_3by3 RGB_SUM_XYZ_DIAG(RGB_Sum_XYZ.a, 0, 0, 0, RGB_Sum_XYZ.b, 0, 0,
+ 0, RGB_Sum_XYZ.c);
+ CFX_Matrix_3by3 M = RGB_xyz.Multiply(RGB_SUM_XYZ_DIAG);
+ CFX_Vector_3by1 RGB = M.Inverse().TransformVector(XYZ);
- R = RGB_Conversion(RGB.a);
- G = RGB_Conversion(RGB.b);
- B = RGB_Conversion(RGB.c);
-}
-class CPDF_CalGray : public CPDF_ColorSpace
-{
-public:
- explicit CPDF_CalGray(CPDF_Document* pDoc)
- : CPDF_ColorSpace(pDoc, PDFCS_CALGRAY, 1) {
- }
- FX_BOOL v_Load(CPDF_Document* pDoc, CPDF_Array* pArray) override;
- FX_BOOL GetRGB(FX_FLOAT* pBuf, FX_FLOAT& R, FX_FLOAT& G, FX_FLOAT& B) const override;
- FX_BOOL SetRGB(FX_FLOAT* pBuf, FX_FLOAT R, FX_FLOAT G, FX_FLOAT B) const override;
- void TranslateImageLine(uint8_t* pDestBuf, const uint8_t* pSrcBuf, int pixels, int image_width,
- int image_height, FX_BOOL bTransMask = FALSE) const override;
+ R = RGB_Conversion(RGB.a);
+ G = RGB_Conversion(RGB.b);
+ B = RGB_Conversion(RGB.c);
+}
+class CPDF_CalGray : public CPDF_ColorSpace {
+ public:
+ explicit CPDF_CalGray(CPDF_Document* pDoc)
+ : CPDF_ColorSpace(pDoc, PDFCS_CALGRAY, 1) {}
+ FX_BOOL v_Load(CPDF_Document* pDoc, CPDF_Array* pArray) override;
+ FX_BOOL GetRGB(FX_FLOAT* pBuf,
+ FX_FLOAT& R,
+ FX_FLOAT& G,
+ FX_FLOAT& B) const override;
+ FX_BOOL SetRGB(FX_FLOAT* pBuf,
+ FX_FLOAT R,
+ FX_FLOAT G,
+ FX_FLOAT B) const override;
+ void TranslateImageLine(uint8_t* pDestBuf,
+ const uint8_t* pSrcBuf,
+ int pixels,
+ int image_width,
+ int image_height,
+ FX_BOOL bTransMask = FALSE) const override;
-private:
- FX_FLOAT m_WhitePoint[3];
- FX_FLOAT m_BlackPoint[3];
- FX_FLOAT m_Gamma;
+ private:
+ FX_FLOAT m_WhitePoint[3];
+ FX_FLOAT m_BlackPoint[3];
+ FX_FLOAT m_Gamma;
};
-FX_BOOL CPDF_CalGray::v_Load(CPDF_Document* pDoc, CPDF_Array* pArray)
-{
- CPDF_Dictionary* pDict = pArray->GetDict(1);
- CPDF_Array* pParam = pDict->GetArray(FX_BSTRC("WhitePoint"));
- int i;
- for (i = 0; i < 3; i ++) {
- m_WhitePoint[i] = pParam ? pParam->GetNumber(i) : 0;
- }
- pParam = pDict->GetArray(FX_BSTRC("BlackPoint"));
- for (i = 0; i < 3; i ++) {
- m_BlackPoint[i] = pParam ? pParam->GetNumber(i) : 0;
- }
- m_Gamma = pDict->GetNumber(FX_BSTRC("Gamma"));
- if (m_Gamma == 0) {
- m_Gamma = 1.0f;
- }
+FX_BOOL CPDF_CalGray::v_Load(CPDF_Document* pDoc, CPDF_Array* pArray) {
+ CPDF_Dictionary* pDict = pArray->GetDict(1);
+ CPDF_Array* pParam = pDict->GetArray(FX_BSTRC("WhitePoint"));
+ int i;
+ for (i = 0; i < 3; i++) {
+ m_WhitePoint[i] = pParam ? pParam->GetNumber(i) : 0;
+ }
+ pParam = pDict->GetArray(FX_BSTRC("BlackPoint"));
+ for (i = 0; i < 3; i++) {
+ m_BlackPoint[i] = pParam ? pParam->GetNumber(i) : 0;
+ }
+ m_Gamma = pDict->GetNumber(FX_BSTRC("Gamma"));
+ if (m_Gamma == 0) {
+ m_Gamma = 1.0f;
+ }
+ return TRUE;
+}
+FX_BOOL CPDF_CalGray::GetRGB(FX_FLOAT* pBuf,
+ FX_FLOAT& R,
+ FX_FLOAT& G,
+ FX_FLOAT& B) const {
+ R = G = B = *pBuf;
+ return TRUE;
+}
+FX_BOOL CPDF_CalGray::SetRGB(FX_FLOAT* pBuf,
+ FX_FLOAT R,
+ FX_FLOAT G,
+ FX_FLOAT B) const {
+ if (R == G && R == B) {
+ *pBuf = R;
return TRUE;
-}
-FX_BOOL CPDF_CalGray::GetRGB(FX_FLOAT* pBuf, FX_FLOAT& R, FX_FLOAT& G, FX_FLOAT& B) const
-{
- R = G = B = *pBuf;
- return TRUE;
-}
-FX_BOOL CPDF_CalGray::SetRGB(FX_FLOAT* pBuf, FX_FLOAT R, FX_FLOAT G, FX_FLOAT B) const
-{
- if (R == G && R == B) {
- *pBuf = R;
- return TRUE;
- }
- return FALSE;
-}
-void CPDF_CalGray::TranslateImageLine(uint8_t* pDestBuf, const uint8_t* pSrcBuf, int pixels, int image_width, int image_height, FX_BOOL bTransMask) const
-{
- for (int i = 0; i < pixels; i ++) {
- *pDestBuf ++ = pSrcBuf[i];
- *pDestBuf ++ = pSrcBuf[i];
- *pDestBuf ++ = pSrcBuf[i];
- }
-}
-class CPDF_CalRGB : public CPDF_ColorSpace
-{
-public:
- explicit CPDF_CalRGB(CPDF_Document* pDoc)
- : CPDF_ColorSpace(pDoc, PDFCS_CALRGB, 3) {
- }
- FX_BOOL v_Load(CPDF_Document* pDoc, CPDF_Array* pArray) override;
- FX_BOOL GetRGB(FX_FLOAT* pBuf, FX_FLOAT& R, FX_FLOAT& G, FX_FLOAT& B) const override;
- FX_BOOL SetRGB(FX_FLOAT* pBuf, FX_FLOAT R, FX_FLOAT G, FX_FLOAT B) const override;
- void TranslateImageLine(uint8_t* pDestBuf, const uint8_t* pSrcBuf, int pixels, int image_width,
- int image_height, FX_BOOL bTransMask = FALSE) const override;
+ }
+ return FALSE;
+}
+void CPDF_CalGray::TranslateImageLine(uint8_t* pDestBuf,
+ const uint8_t* pSrcBuf,
+ int pixels,
+ int image_width,
+ int image_height,
+ FX_BOOL bTransMask) const {
+ for (int i = 0; i < pixels; i++) {
+ *pDestBuf++ = pSrcBuf[i];
+ *pDestBuf++ = pSrcBuf[i];
+ *pDestBuf++ = pSrcBuf[i];
+ }
+}
+class CPDF_CalRGB : public CPDF_ColorSpace {
+ public:
+ explicit CPDF_CalRGB(CPDF_Document* pDoc)
+ : CPDF_ColorSpace(pDoc, PDFCS_CALRGB, 3) {}
+ FX_BOOL v_Load(CPDF_Document* pDoc, CPDF_Array* pArray) override;
+ FX_BOOL GetRGB(FX_FLOAT* pBuf,
+ FX_FLOAT& R,
+ FX_FLOAT& G,
+ FX_FLOAT& B) const override;
+ FX_BOOL SetRGB(FX_FLOAT* pBuf,
+ FX_FLOAT R,
+ FX_FLOAT G,
+ FX_FLOAT B) const override;
+ void TranslateImageLine(uint8_t* pDestBuf,
+ const uint8_t* pSrcBuf,
+ int pixels,
+ int image_width,
+ int image_height,
+ FX_BOOL bTransMask = FALSE) const override;
- FX_FLOAT m_WhitePoint[3];
- FX_FLOAT m_BlackPoint[3];
- FX_FLOAT m_Gamma[3];
- FX_FLOAT m_Matrix[9];
- FX_BOOL m_bGamma;
- FX_BOOL m_bMatrix;
+ FX_FLOAT m_WhitePoint[3];
+ FX_FLOAT m_BlackPoint[3];
+ FX_FLOAT m_Gamma[3];
+ FX_FLOAT m_Matrix[9];
+ FX_BOOL m_bGamma;
+ FX_BOOL m_bMatrix;
};
-FX_BOOL CPDF_CalRGB::v_Load(CPDF_Document* pDoc, CPDF_Array* pArray)
-{
- CPDF_Dictionary* pDict = pArray->GetDict(1);
- if (!pDict)
- return FALSE;
+FX_BOOL CPDF_CalRGB::v_Load(CPDF_Document* pDoc, CPDF_Array* pArray) {
+ CPDF_Dictionary* pDict = pArray->GetDict(1);
+ if (!pDict)
+ return FALSE;
- CPDF_Array* pParam = pDict->GetArray(FX_BSTRC("WhitePoint"));
- int i;
- for (i = 0; i < 3; i ++) {
- m_WhitePoint[i] = pParam ? pParam->GetNumber(i) : 0;
- }
- pParam = pDict->GetArray(FX_BSTRC("BlackPoint"));
- for (i = 0; i < 3; i ++) {
- m_BlackPoint[i] = pParam ? pParam->GetNumber(i) : 0;
- }
- pParam = pDict->GetArray(FX_BSTRC("Gamma"));
- if (pParam) {
- m_bGamma = TRUE;
- for (i = 0; i < 3; i ++) {
- m_Gamma[i] = pParam->GetNumber(i);
- }
- } else {
- m_bGamma = FALSE;
- }
- pParam = pDict->GetArray(FX_BSTRC("Matrix"));
- if (pParam) {
- m_bMatrix = TRUE;
- for (i = 0; i < 9; i ++) {
- m_Matrix[i] = pParam->GetNumber(i);
- }
- } else {
- m_bMatrix = FALSE;
- }
- return TRUE;
-}
-FX_BOOL CPDF_CalRGB::GetRGB(FX_FLOAT* pBuf, FX_FLOAT& R, FX_FLOAT& G, FX_FLOAT& B) const
-{
- FX_FLOAT A_ = pBuf[0];
- FX_FLOAT B_ = pBuf[1];
- FX_FLOAT C_ = pBuf[2];
- if (m_bGamma) {
- A_ = (FX_FLOAT)FXSYS_pow(A_, m_Gamma[0]);
- B_ = (FX_FLOAT)FXSYS_pow(B_, m_Gamma[1]);
- C_ = (FX_FLOAT)FXSYS_pow(C_, m_Gamma[2]);
- }
- FX_FLOAT X, Y, Z;
- if (m_bMatrix) {
- X = m_Matrix[0] * A_ + m_Matrix[3] * B_ + m_Matrix[6] * C_;
- Y = m_Matrix[1] * A_ + m_Matrix[4] * B_ + m_Matrix[7] * C_;
- Z = m_Matrix[2] * A_ + m_Matrix[5] * B_ + m_Matrix[8] * C_;
- } else {
- X = A_;
- Y = B_;
- Z = C_;
- }
- XYZ_to_sRGB_WhitePoint(X, Y, Z, R, G, B, m_WhitePoint[0], m_WhitePoint[1], m_WhitePoint[2]);
- return TRUE;
-}
-FX_BOOL CPDF_CalRGB::SetRGB(FX_FLOAT* pBuf, FX_FLOAT R, FX_FLOAT G, FX_FLOAT B) const
-{
- pBuf[0] = R;
- pBuf[1] = G;
- pBuf[2] = B;
- return TRUE;
-}
-void CPDF_CalRGB::TranslateImageLine(uint8_t* pDestBuf, const uint8_t* pSrcBuf, int pixels, int image_width, int image_height, FX_BOOL bTransMask) const
-{
- if (bTransMask) {
- FX_FLOAT Cal[3];
- FX_FLOAT R, G, B;
- for(int i = 0; i < pixels; i ++) {
- Cal[0] = ((FX_FLOAT)pSrcBuf[2]) / 255;
- Cal[1] = ((FX_FLOAT)pSrcBuf[1]) / 255;
- Cal[2] = ((FX_FLOAT)pSrcBuf[0]) / 255;
- GetRGB(Cal, R, G, B);
- pDestBuf[0] = FXSYS_round(B * 255);
- pDestBuf[1] = FXSYS_round(G * 255);
- pDestBuf[2] = FXSYS_round(R * 255);
- pSrcBuf += 3;
- pDestBuf += 3;
- }
- }
- ReverseRGB(pDestBuf, pSrcBuf, pixels);
-}
-class CPDF_LabCS : public CPDF_ColorSpace
-{
-public:
- explicit CPDF_LabCS(CPDF_Document* pDoc)
- : CPDF_ColorSpace(pDoc, PDFCS_LAB, 3) {
- }
- void GetDefaultValue(int iComponent, FX_FLOAT& value, FX_FLOAT& min, FX_FLOAT& max) const override;
- FX_BOOL v_Load(CPDF_Document* pDoc, CPDF_Array* pArray) override;
- FX_BOOL GetRGB(FX_FLOAT* pBuf, FX_FLOAT& R, FX_FLOAT& G, FX_FLOAT& B) const override;
- FX_BOOL SetRGB(FX_FLOAT* pBuf, FX_FLOAT R, FX_FLOAT G, FX_FLOAT B) const override;
- void TranslateImageLine(uint8_t* pDestBuf, const uint8_t* pSrcBuf, int pixels, int image_width,
- int image_height, FX_BOOL bTransMask = FALSE) const;
+ CPDF_Array* pParam = pDict->GetArray(FX_BSTRC("WhitePoint"));
+ int i;
+ for (i = 0; i < 3; i++) {
+ m_WhitePoint[i] = pParam ? pParam->GetNumber(i) : 0;
+ }
+ pParam = pDict->GetArray(FX_BSTRC("BlackPoint"));
+ for (i = 0; i < 3; i++) {
+ m_BlackPoint[i] = pParam ? pParam->GetNumber(i) : 0;
+ }
+ pParam = pDict->GetArray(FX_BSTRC("Gamma"));
+ if (pParam) {
+ m_bGamma = TRUE;
+ for (i = 0; i < 3; i++) {
+ m_Gamma[i] = pParam->GetNumber(i);
+ }
+ } else {
+ m_bGamma = FALSE;
+ }
+ pParam = pDict->GetArray(FX_BSTRC("Matrix"));
+ if (pParam) {
+ m_bMatrix = TRUE;
+ for (i = 0; i < 9; i++) {
+ m_Matrix[i] = pParam->GetNumber(i);
+ }
+ } else {
+ m_bMatrix = FALSE;
+ }
+ return TRUE;
+}
+FX_BOOL CPDF_CalRGB::GetRGB(FX_FLOAT* pBuf,
+ FX_FLOAT& R,
+ FX_FLOAT& G,
+ FX_FLOAT& B) const {
+ FX_FLOAT A_ = pBuf[0];
+ FX_FLOAT B_ = pBuf[1];
+ FX_FLOAT C_ = pBuf[2];
+ if (m_bGamma) {
+ A_ = (FX_FLOAT)FXSYS_pow(A_, m_Gamma[0]);
+ B_ = (FX_FLOAT)FXSYS_pow(B_, m_Gamma[1]);
+ C_ = (FX_FLOAT)FXSYS_pow(C_, m_Gamma[2]);
+ }
+ FX_FLOAT X, Y, Z;
+ if (m_bMatrix) {
+ X = m_Matrix[0] * A_ + m_Matrix[3] * B_ + m_Matrix[6] * C_;
+ Y = m_Matrix[1] * A_ + m_Matrix[4] * B_ + m_Matrix[7] * C_;
+ Z = m_Matrix[2] * A_ + m_Matrix[5] * B_ + m_Matrix[8] * C_;
+ } else {
+ X = A_;
+ Y = B_;
+ Z = C_;
+ }
+ XYZ_to_sRGB_WhitePoint(X, Y, Z, R, G, B, m_WhitePoint[0], m_WhitePoint[1],
+ m_WhitePoint[2]);
+ return TRUE;
+}
+FX_BOOL CPDF_CalRGB::SetRGB(FX_FLOAT* pBuf,
+ FX_FLOAT R,
+ FX_FLOAT G,
+ FX_FLOAT B) const {
+ pBuf[0] = R;
+ pBuf[1] = G;
+ pBuf[2] = B;
+ return TRUE;
+}
+void CPDF_CalRGB::TranslateImageLine(uint8_t* pDestBuf,
+ const uint8_t* pSrcBuf,
+ int pixels,
+ int image_width,
+ int image_height,
+ FX_BOOL bTransMask) const {
+ if (bTransMask) {
+ FX_FLOAT Cal[3];
+ FX_FLOAT R, G, B;
+ for (int i = 0; i < pixels; i++) {
+ Cal[0] = ((FX_FLOAT)pSrcBuf[2]) / 255;
+ Cal[1] = ((FX_FLOAT)pSrcBuf[1]) / 255;
+ Cal[2] = ((FX_FLOAT)pSrcBuf[0]) / 255;
+ GetRGB(Cal, R, G, B);
+ pDestBuf[0] = FXSYS_round(B * 255);
+ pDestBuf[1] = FXSYS_round(G * 255);
+ pDestBuf[2] = FXSYS_round(R * 255);
+ pSrcBuf += 3;
+ pDestBuf += 3;
+ }
+ }
+ ReverseRGB(pDestBuf, pSrcBuf, pixels);
+}
+class CPDF_LabCS : public CPDF_ColorSpace {
+ public:
+ explicit CPDF_LabCS(CPDF_Document* pDoc)
+ : CPDF_ColorSpace(pDoc, PDFCS_LAB, 3) {}
+ void GetDefaultValue(int iComponent,
+ FX_FLOAT& value,
+ FX_FLOAT& min,
+ FX_FLOAT& max) const override;
+ FX_BOOL v_Load(CPDF_Document* pDoc, CPDF_Array* pArray) override;
+ FX_BOOL GetRGB(FX_FLOAT* pBuf,
+ FX_FLOAT& R,
+ FX_FLOAT& G,
+ FX_FLOAT& B) const override;
+ FX_BOOL SetRGB(FX_FLOAT* pBuf,
+ FX_FLOAT R,
+ FX_FLOAT G,
+ FX_FLOAT B) const override;
+ void TranslateImageLine(uint8_t* pDestBuf,
+ const uint8_t* pSrcBuf,
+ int pixels,
+ int image_width,
+ int image_height,
+ FX_BOOL bTransMask = FALSE) const;
- FX_FLOAT m_WhitePoint[3];
- FX_FLOAT m_BlackPoint[3];
- FX_FLOAT m_Ranges[4];
+ FX_FLOAT m_WhitePoint[3];
+ FX_FLOAT m_BlackPoint[3];
+ FX_FLOAT m_Ranges[4];
};
-FX_BOOL CPDF_LabCS::v_Load(CPDF_Document* pDoc, CPDF_Array* pArray)
-{
- CPDF_Dictionary* pDict = pArray->GetDict(1);
- if (!pDict) {
- return FALSE;
- }
- CPDF_Array* pParam = pDict->GetArray(FX_BSTRC("WhitePoint"));
- int i;
- for (i = 0; i < 3; i ++) {
- m_WhitePoint[i] = pParam ? pParam->GetNumber(i) : 0;
- }
- pParam = pDict->GetArray(FX_BSTRC("BlackPoint"));
- for (i = 0; i < 3; i ++) {
- m_BlackPoint[i] = pParam ? pParam->GetNumber(i) : 0;
- }
- pParam = pDict->GetArray(FX_BSTRC("Range"));
- const FX_FLOAT def_ranges[4] = { -100 * 1.0f, 100 * 1.0f, -100 * 1.0f, 100 * 1.0f};
- for (i = 0; i < 4; i ++) {
- m_Ranges[i] = pParam ? pParam->GetNumber(i) : def_ranges[i];
- }
- return TRUE;
-}
-void CPDF_LabCS::GetDefaultValue(int iComponent, FX_FLOAT& value, FX_FLOAT& min, FX_FLOAT& max) const
-{
- assert(iComponent < 3);
- value = 0;
- if (iComponent == 0) {
- min = 0;
- max = 100 * 1.0f;
- } else {
- min = m_Ranges[iComponent * 2 - 2];
- max = m_Ranges[iComponent * 2 - 1];
- if (value < min) {
- value = min;
- } else if (value > max) {
- value = max;
- }
- }
-}
-FX_BOOL CPDF_LabCS::GetRGB(FX_FLOAT* pBuf, FX_FLOAT& R, FX_FLOAT& G, FX_FLOAT& B) const
-{
- FX_FLOAT Lstar = pBuf[0];
- FX_FLOAT astar = pBuf[1];
- FX_FLOAT bstar = pBuf[2];
- FX_FLOAT M = (Lstar + 16.0f) / 116.0f;
- FX_FLOAT L = M + astar / 500.0f;
- FX_FLOAT N = M - bstar / 200.0f;
- FX_FLOAT X, Y, Z;
- if (L < 0.2069f) {
- X = 0.957f * 0.12842f * (L - 0.1379f);
- } else {
- X = 0.957f * L * L * L;
- }
- if (M < 0.2069f) {
- Y = 0.12842f * (M - 0.1379f);
- } else {
- Y = M * M * M;
- }
- if (N < 0.2069f) {
- Z = 1.0889f * 0.12842f * (N - 0.1379f);
- } else {
- Z = 1.0889f * N * N * N;
- }
- XYZ_to_sRGB(X, Y, Z, R, G, B);
- return TRUE;
-}
-FX_BOOL CPDF_LabCS::SetRGB(FX_FLOAT* pBuf, FX_FLOAT R, FX_FLOAT G, FX_FLOAT B) const
-{
+FX_BOOL CPDF_LabCS::v_Load(CPDF_Document* pDoc, CPDF_Array* pArray) {
+ CPDF_Dictionary* pDict = pArray->GetDict(1);
+ if (!pDict) {
return FALSE;
-}
-void CPDF_LabCS::TranslateImageLine(uint8_t* pDestBuf, const uint8_t* pSrcBuf, int pixels, int image_width, int image_height, FX_BOOL bTransMask) const
-{
- for (int i = 0; i < pixels; i ++) {
- FX_FLOAT lab[3];
- FX_FLOAT R, G, B;
- lab[0] = (pSrcBuf[0] * 100 / 255.0f);
- lab[1] = (FX_FLOAT)(pSrcBuf[1] - 128);
- lab[2] = (FX_FLOAT)(pSrcBuf[2] - 128);
- GetRGB(lab, R, G, B);
- pDestBuf[0] = (int32_t)(B * 255);
- pDestBuf[1] = (int32_t)(G * 255);
- pDestBuf[2] = (int32_t)(R * 255);
- pDestBuf += 3;
- pSrcBuf += 3;
- }
-}
-CPDF_IccProfile::CPDF_IccProfile(const uint8_t* pData, FX_DWORD dwSize):
- m_bsRGB(FALSE),
- m_pTransform(NULL),
- m_nSrcComponents(0)
-{
- if (dwSize == 3144 && FXSYS_memcmp(pData + 0x190, "sRGB IEC61966-2.1", 17) == 0) {
- m_bsRGB = TRUE;
- m_nSrcComponents = 3;
- }
- else if (CPDF_ModuleMgr::Get()->GetIccModule()) {
- m_pTransform = CPDF_ModuleMgr::Get()->GetIccModule()->CreateTransform_sRGB(pData, dwSize, m_nSrcComponents);
- }
-}
-CPDF_IccProfile::~CPDF_IccProfile()
-{
- if (m_pTransform) {
- CPDF_ModuleMgr::Get()->GetIccModule()->DestroyTransform(m_pTransform);
- }
-}
-class CPDF_ICCBasedCS : public CPDF_ColorSpace
-{
-public:
- explicit CPDF_ICCBasedCS(CPDF_Document* pDoc)
- : CPDF_ColorSpace(pDoc, PDFCS_ICCBASED, 0),
- m_pAlterCS(nullptr),
- m_pProfile(nullptr),
- m_pCache(nullptr),
- m_pRanges(nullptr),
- m_bOwn(FALSE) {
- }
- ~CPDF_ICCBasedCS() override;
+ }
+ CPDF_Array* pParam = pDict->GetArray(FX_BSTRC("WhitePoint"));
+ int i;
+ for (i = 0; i < 3; i++) {
+ m_WhitePoint[i] = pParam ? pParam->GetNumber(i) : 0;
+ }
+ pParam = pDict->GetArray(FX_BSTRC("BlackPoint"));
+ for (i = 0; i < 3; i++) {
+ m_BlackPoint[i] = pParam ? pParam->GetNumber(i) : 0;
+ }
+ pParam = pDict->GetArray(FX_BSTRC("Range"));
+ const FX_FLOAT def_ranges[4] = {-100 * 1.0f, 100 * 1.0f, -100 * 1.0f,
+ 100 * 1.0f};
+ for (i = 0; i < 4; i++) {
+ m_Ranges[i] = pParam ? pParam->GetNumber(i) : def_ranges[i];
+ }
+ return TRUE;
+}
+void CPDF_LabCS::GetDefaultValue(int iComponent,
+ FX_FLOAT& value,
+ FX_FLOAT& min,
+ FX_FLOAT& max) const {
+ assert(iComponent < 3);
+ value = 0;
+ if (iComponent == 0) {
+ min = 0;
+ max = 100 * 1.0f;
+ } else {
+ min = m_Ranges[iComponent * 2 - 2];
+ max = m_Ranges[iComponent * 2 - 1];
+ if (value < min) {
+ value = min;
+ } else if (value > max) {
+ value = max;
+ }
+ }
+}
+FX_BOOL CPDF_LabCS::GetRGB(FX_FLOAT* pBuf,
+ FX_FLOAT& R,
+ FX_FLOAT& G,
+ FX_FLOAT& B) const {
+ FX_FLOAT Lstar = pBuf[0];
+ FX_FLOAT astar = pBuf[1];
+ FX_FLOAT bstar = pBuf[2];
+ FX_FLOAT M = (Lstar + 16.0f) / 116.0f;
+ FX_FLOAT L = M + astar / 500.0f;
+ FX_FLOAT N = M - bstar / 200.0f;
+ FX_FLOAT X, Y, Z;
+ if (L < 0.2069f) {
+ X = 0.957f * 0.12842f * (L - 0.1379f);
+ } else {
+ X = 0.957f * L * L * L;
+ }
+ if (M < 0.2069f) {
+ Y = 0.12842f * (M - 0.1379f);
+ } else {
+ Y = M * M * M;
+ }
+ if (N < 0.2069f) {
+ Z = 1.0889f * 0.12842f * (N - 0.1379f);
+ } else {
+ Z = 1.0889f * N * N * N;
+ }
+ XYZ_to_sRGB(X, Y, Z, R, G, B);
+ return TRUE;
+}
+FX_BOOL CPDF_LabCS::SetRGB(FX_FLOAT* pBuf,
+ FX_FLOAT R,
+ FX_FLOAT G,
+ FX_FLOAT B) const {
+ return FALSE;
+}
+void CPDF_LabCS::TranslateImageLine(uint8_t* pDestBuf,
+ const uint8_t* pSrcBuf,
+ int pixels,
+ int image_width,
+ int image_height,
+ FX_BOOL bTransMask) const {
+ for (int i = 0; i < pixels; i++) {
+ FX_FLOAT lab[3];
+ FX_FLOAT R, G, B;
+ lab[0] = (pSrcBuf[0] * 100 / 255.0f);
+ lab[1] = (FX_FLOAT)(pSrcBuf[1] - 128);
+ lab[2] = (FX_FLOAT)(pSrcBuf[2] - 128);
+ GetRGB(lab, R, G, B);
+ pDestBuf[0] = (int32_t)(B * 255);
+ pDestBuf[1] = (int32_t)(G * 255);
+ pDestBuf[2] = (int32_t)(R * 255);
+ pDestBuf += 3;
+ pSrcBuf += 3;
+ }
+}
+CPDF_IccProfile::CPDF_IccProfile(const uint8_t* pData, FX_DWORD dwSize)
+ : m_bsRGB(FALSE), m_pTransform(NULL), m_nSrcComponents(0) {
+ if (dwSize == 3144 &&
+ FXSYS_memcmp(pData + 0x190, "sRGB IEC61966-2.1", 17) == 0) {
+ m_bsRGB = TRUE;
+ m_nSrcComponents = 3;
+ } else if (CPDF_ModuleMgr::Get()->GetIccModule()) {
+ m_pTransform = CPDF_ModuleMgr::Get()->GetIccModule()->CreateTransform_sRGB(
+ pData, dwSize, m_nSrcComponents);
+ }
+}
+CPDF_IccProfile::~CPDF_IccProfile() {
+ if (m_pTransform) {
+ CPDF_ModuleMgr::Get()->GetIccModule()->DestroyTransform(m_pTransform);
+ }
+}
+class CPDF_ICCBasedCS : public CPDF_ColorSpace {
+ public:
+ explicit CPDF_ICCBasedCS(CPDF_Document* pDoc)
+ : CPDF_ColorSpace(pDoc, PDFCS_ICCBASED, 0),
+ m_pAlterCS(nullptr),
+ m_pProfile(nullptr),
+ m_pCache(nullptr),
+ m_pRanges(nullptr),
+ m_bOwn(FALSE) {}
+ ~CPDF_ICCBasedCS() override;
- FX_BOOL v_Load(CPDF_Document* pDoc, CPDF_Array* pArray) override;
- FX_BOOL GetRGB(FX_FLOAT* pBuf, FX_FLOAT& R, FX_FLOAT& G, FX_FLOAT& B) const override;
- FX_BOOL SetRGB(FX_FLOAT* pBuf, FX_FLOAT R, FX_FLOAT G, FX_FLOAT B) const override;
- FX_BOOL v_GetCMYK(FX_FLOAT* pBuf, FX_FLOAT& c, FX_FLOAT& m, FX_FLOAT& y, FX_FLOAT& k) const override;
- void EnableStdConversion(FX_BOOL bEnabled) override;
- void TranslateImageLine(uint8_t* pDestBuf, const uint8_t* pSrcBuf, int pixels, int image_width,
- int image_height, FX_BOOL bTransMask = FALSE) const override;
+ FX_BOOL v_Load(CPDF_Document* pDoc, CPDF_Array* pArray) override;
+ FX_BOOL GetRGB(FX_FLOAT* pBuf,
+ FX_FLOAT& R,
+ FX_FLOAT& G,
+ FX_FLOAT& B) const override;
+ FX_BOOL SetRGB(FX_FLOAT* pBuf,
+ FX_FLOAT R,
+ FX_FLOAT G,
+ FX_FLOAT B) const override;
+ FX_BOOL v_GetCMYK(FX_FLOAT* pBuf,
+ FX_FLOAT& c,
+ FX_FLOAT& m,
+ FX_FLOAT& y,
+ FX_FLOAT& k) const override;
+ void EnableStdConversion(FX_BOOL bEnabled) override;
+ void TranslateImageLine(uint8_t* pDestBuf,
+ const uint8_t* pSrcBuf,
+ int pixels,
+ int image_width,
+ int image_height,
+ FX_BOOL bTransMask = FALSE) const override;
- CPDF_ColorSpace* m_pAlterCS;
- CPDF_IccProfile* m_pProfile;
- uint8_t* m_pCache;
- FX_FLOAT* m_pRanges;
- FX_BOOL m_bOwn;
+ CPDF_ColorSpace* m_pAlterCS;
+ CPDF_IccProfile* m_pProfile;
+ uint8_t* m_pCache;
+ FX_FLOAT* m_pRanges;
+ FX_BOOL m_bOwn;
};
-CPDF_ICCBasedCS::~CPDF_ICCBasedCS()
-{
- if (m_pCache) {
- FX_Free(m_pCache);
- }
- if (m_pRanges) {
- FX_Free(m_pRanges);
- }
- if (m_pAlterCS && m_bOwn) {
- m_pAlterCS->ReleaseCS();
- }
- if (m_pProfile && m_pDocument) {
- m_pDocument->GetPageData()->ReleaseIccProfile(m_pProfile);
- }
+CPDF_ICCBasedCS::~CPDF_ICCBasedCS() {
+ if (m_pCache) {
+ FX_Free(m_pCache);
+ }
+ if (m_pRanges) {
+ FX_Free(m_pRanges);
+ }
+ if (m_pAlterCS && m_bOwn) {
+ m_pAlterCS->ReleaseCS();
+ }
+ if (m_pProfile && m_pDocument) {
+ m_pDocument->GetPageData()->ReleaseIccProfile(m_pProfile);
+ }
}
-FX_BOOL CPDF_ICCBasedCS::v_Load(CPDF_Document* pDoc, CPDF_Array* pArray)
-{
- CPDF_Stream* pStream = pArray->GetStream(1);
- if (pStream == NULL) {
- return FALSE;
- }
- m_pProfile = pDoc->LoadIccProfile(pStream);
- if (!m_pProfile) {
- return FALSE;
- }
- m_nComponents = m_pProfile->GetComponents(); //Try using the nComponents from ICC profile
- CPDF_Dictionary* pDict = pStream->GetDict();
- if (m_pProfile->m_pTransform == NULL) { // No valid ICC profile or using sRGB
- CPDF_Object* pAlterCSObj = pDict ? pDict->GetElementValue(FX_BSTRC("Alternate")) : NULL;
- if (pAlterCSObj) {
- CPDF_ColorSpace* pAlterCS = CPDF_ColorSpace::Load(pDoc, pAlterCSObj);
- if (pAlterCS) {
- if (m_nComponents == 0) { // NO valid ICC profile
- if (pAlterCS->CountComponents() > 0) { // Use Alternative colorspace
- m_nComponents = pAlterCS->CountComponents();
- m_pAlterCS = pAlterCS;
- m_bOwn = TRUE;
- }
- else { // No valid alternative colorspace
- pAlterCS->ReleaseCS();
- int32_t nDictComponents = pDict ? pDict->GetInteger(FX_BSTRC("N")) : 0;
- if (nDictComponents != 1 && nDictComponents != 3 && nDictComponents != 4) {
- return FALSE;
- }
- m_nComponents = nDictComponents;
- }
-
- }
- else { // Using sRGB
- if (pAlterCS->CountComponents() != m_nComponents) {
- pAlterCS->ReleaseCS();
- }
- else {
- m_pAlterCS = pAlterCS;
- m_bOwn = TRUE;
- }
- }
- }
- }
- if (!m_pAlterCS) {
- if (m_nComponents == 1) {
- m_pAlterCS = GetStockCS(PDFCS_DEVICEGRAY);
- }
- else if (m_nComponents == 3) {
- m_pAlterCS = GetStockCS(PDFCS_DEVICERGB);
- }
- else if (m_nComponents == 4) {
- m_pAlterCS = GetStockCS(PDFCS_DEVICECMYK);
+FX_BOOL CPDF_ICCBasedCS::v_Load(CPDF_Document* pDoc, CPDF_Array* pArray) {
+ CPDF_Stream* pStream = pArray->GetStream(1);
+ if (pStream == NULL) {
+ return FALSE;
+ }
+ m_pProfile = pDoc->LoadIccProfile(pStream);
+ if (!m_pProfile) {
+ return FALSE;
+ }
+ m_nComponents =
+ m_pProfile
+ ->GetComponents(); // Try using the nComponents from ICC profile
+ CPDF_Dictionary* pDict = pStream->GetDict();
+ if (m_pProfile->m_pTransform == NULL) { // No valid ICC profile or using sRGB
+ CPDF_Object* pAlterCSObj =
+ pDict ? pDict->GetElementValue(FX_BSTRC("Alternate")) : NULL;
+ if (pAlterCSObj) {
+ CPDF_ColorSpace* pAlterCS = CPDF_ColorSpace::Load(pDoc, pAlterCSObj);
+ if (pAlterCS) {
+ if (m_nComponents == 0) { // NO valid ICC profile
+ if (pAlterCS->CountComponents() > 0) { // Use Alternative colorspace
+ m_nComponents = pAlterCS->CountComponents();
+ m_pAlterCS = pAlterCS;
+ m_bOwn = TRUE;
+ } else { // No valid alternative colorspace
+ pAlterCS->ReleaseCS();
+ int32_t nDictComponents =
+ pDict ? pDict->GetInteger(FX_BSTRC("N")) : 0;
+ if (nDictComponents != 1 && nDictComponents != 3 &&
+ nDictComponents != 4) {
+ return FALSE;
}
+ m_nComponents = nDictComponents;
+ }
+
+ } else { // Using sRGB
+ if (pAlterCS->CountComponents() != m_nComponents) {
+ pAlterCS->ReleaseCS();
+ } else {
+ m_pAlterCS = pAlterCS;
+ m_bOwn = TRUE;
+ }
}
- }
- CPDF_Array* pRanges = pDict->GetArray(FX_BSTRC("Range"));
- m_pRanges = FX_Alloc2D(FX_FLOAT, m_nComponents, 2);
- for (int i = 0; i < m_nComponents * 2; i ++) {
- if (pRanges) {
- m_pRanges[i] = pRanges->GetNumber(i);
- } else if (i % 2) {
- m_pRanges[i] = 1.0f;
- } else {
- m_pRanges[i] = 0;
- }
- }
- return TRUE;
-}
-FX_BOOL CPDF_ICCBasedCS::GetRGB(FX_FLOAT* pBuf, FX_FLOAT& R, FX_FLOAT& G, FX_FLOAT& B) const
-{
- if (m_pProfile && m_pProfile->m_bsRGB) {
- R = pBuf[0];
- G = pBuf[1];
- B = pBuf[2];
- return TRUE;
- }
- ICodec_IccModule *pIccModule = CPDF_ModuleMgr::Get()->GetIccModule();
- if (m_pProfile->m_pTransform == NULL || pIccModule == NULL) {
- if (m_pAlterCS) {
- m_pAlterCS->GetRGB(pBuf, R, G, B);
- } else {
- R = G = B = 0.0f;
- }
- return TRUE;
- }
- FX_FLOAT rgb[3];
- pIccModule->SetComponents(m_nComponents);
- pIccModule->Translate(m_pProfile->m_pTransform, pBuf, rgb);
- R = rgb[0];
- G = rgb[1];
- B = rgb[2];
+ }
+ }
+ if (!m_pAlterCS) {
+ if (m_nComponents == 1) {
+ m_pAlterCS = GetStockCS(PDFCS_DEVICEGRAY);
+ } else if (m_nComponents == 3) {
+ m_pAlterCS = GetStockCS(PDFCS_DEVICERGB);
+ } else if (m_nComponents == 4) {
+ m_pAlterCS = GetStockCS(PDFCS_DEVICECMYK);
+ }
+ }
+ }
+ CPDF_Array* pRanges = pDict->GetArray(FX_BSTRC("Range"));
+ m_pRanges = FX_Alloc2D(FX_FLOAT, m_nComponents, 2);
+ for (int i = 0; i < m_nComponents * 2; i++) {
+ if (pRanges) {
+ m_pRanges[i] = pRanges->GetNumber(i);
+ } else if (i % 2) {
+ m_pRanges[i] = 1.0f;
+ } else {
+ m_pRanges[i] = 0;
+ }
+ }
+ return TRUE;
+}
+FX_BOOL CPDF_ICCBasedCS::GetRGB(FX_FLOAT* pBuf,
+ FX_FLOAT& R,
+ FX_FLOAT& G,
+ FX_FLOAT& B) const {
+ if (m_pProfile && m_pProfile->m_bsRGB) {
+ R = pBuf[0];
+ G = pBuf[1];
+ B = pBuf[2];
return TRUE;
-}
-FX_BOOL CPDF_ICCBasedCS::v_GetCMYK(FX_FLOAT* pBuf, FX_FLOAT& c, FX_FLOAT& m, FX_FLOAT& y, FX_FLOAT& k) const
-{
- if (m_nComponents != 4) {
- return FALSE;
+ }
+ ICodec_IccModule* pIccModule = CPDF_ModuleMgr::Get()->GetIccModule();
+ if (m_pProfile->m_pTransform == NULL || pIccModule == NULL) {
+ if (m_pAlterCS) {
+ m_pAlterCS->GetRGB(pBuf, R, G, B);
+ } else {
+ R = G = B = 0.0f;
}
- c = pBuf[0];
- m = pBuf[1];
- y = pBuf[2];
- k = pBuf[3];
return TRUE;
-}
-FX_BOOL CPDF_ICCBasedCS::SetRGB(FX_FLOAT* pBuf, FX_FLOAT R, FX_FLOAT G, FX_FLOAT B) const
-{
+ }
+ FX_FLOAT rgb[3];
+ pIccModule->SetComponents(m_nComponents);
+ pIccModule->Translate(m_pProfile->m_pTransform, pBuf, rgb);
+ R = rgb[0];
+ G = rgb[1];
+ B = rgb[2];
+ return TRUE;
+}
+FX_BOOL CPDF_ICCBasedCS::v_GetCMYK(FX_FLOAT* pBuf,
+ FX_FLOAT& c,
+ FX_FLOAT& m,
+ FX_FLOAT& y,
+ FX_FLOAT& k) const {
+ if (m_nComponents != 4) {
return FALSE;
-}
-void CPDF_ICCBasedCS::EnableStdConversion(FX_BOOL bEnabled)
-{
- CPDF_ColorSpace::EnableStdConversion(bEnabled);
- if (m_pAlterCS) {
- m_pAlterCS->EnableStdConversion(bEnabled);
- }
-}
-void CPDF_ICCBasedCS::TranslateImageLine(uint8_t* pDestBuf, const uint8_t* pSrcBuf, int pixels, int image_width, int image_height, FX_BOOL bTransMask) const
-{
- if (m_pProfile->m_bsRGB) {
- ReverseRGB(pDestBuf, pSrcBuf, pixels);
- } else if (m_pProfile->m_pTransform) {
- int nMaxColors = 1;
- for (int i = 0; i < m_nComponents; i ++) {
- nMaxColors *= 52;
+ }
+ c = pBuf[0];
+ m = pBuf[1];
+ y = pBuf[2];
+ k = pBuf[3];
+ return TRUE;
+}
+FX_BOOL CPDF_ICCBasedCS::SetRGB(FX_FLOAT* pBuf,
+ FX_FLOAT R,
+ FX_FLOAT G,
+ FX_FLOAT B) const {
+ return FALSE;
+}
+void CPDF_ICCBasedCS::EnableStdConversion(FX_BOOL bEnabled) {
+ CPDF_ColorSpace::EnableStdConversion(bEnabled);
+ if (m_pAlterCS) {
+ m_pAlterCS->EnableStdConversion(bEnabled);
+ }
+}
+void CPDF_ICCBasedCS::TranslateImageLine(uint8_t* pDestBuf,
+ const uint8_t* pSrcBuf,
+ int pixels,
+ int image_width,
+ int image_height,
+ FX_BOOL bTransMask) const {
+ if (m_pProfile->m_bsRGB) {
+ ReverseRGB(pDestBuf, pSrcBuf, pixels);
+ } else if (m_pProfile->m_pTransform) {
+ int nMaxColors = 1;
+ for (int i = 0; i < m_nComponents; i++) {
+ nMaxColors *= 52;
+ }
+ if (m_nComponents > 3 || image_width * image_height < nMaxColors * 3 / 2) {
+ CPDF_ModuleMgr::Get()->GetIccModule()->TranslateScanline(
+ m_pProfile->m_pTransform, pDestBuf, pSrcBuf, pixels);
+ } else {
+ if (m_pCache == NULL) {
+ ((CPDF_ICCBasedCS*)this)->m_pCache = FX_Alloc2D(uint8_t, nMaxColors, 3);
+ uint8_t* temp_src = FX_Alloc2D(uint8_t, nMaxColors, m_nComponents);
+ uint8_t* pSrc = temp_src;
+ for (int i = 0; i < nMaxColors; i++) {
+ FX_DWORD color = i;
+ FX_DWORD order = nMaxColors / 52;
+ for (int c = 0; c < m_nComponents; c++) {
+ *pSrc++ = (uint8_t)(color / order * 5);
+ color %= order;
+ order /= 52;
+ }
}
- if (m_nComponents > 3 || image_width * image_height < nMaxColors * 3 / 2) {
- CPDF_ModuleMgr::Get()->GetIccModule()->TranslateScanline(m_pProfile->m_pTransform, pDestBuf, pSrcBuf, pixels);
- } else {
- if (m_pCache == NULL) {
- ((CPDF_ICCBasedCS*)this)->m_pCache = FX_Alloc2D(uint8_t, nMaxColors, 3);
- uint8_t* temp_src = FX_Alloc2D(uint8_t, nMaxColors, m_nComponents);
- uint8_t* pSrc = temp_src;
- for (int i = 0; i < nMaxColors; i ++) {
- FX_DWORD color = i;
- FX_DWORD order = nMaxColors / 52;
- for (int c = 0; c < m_nComponents; c ++) {
- *pSrc++ = (uint8_t)(color / order * 5);
- color %= order;
- order /= 52;
- }
- }
- CPDF_ModuleMgr::Get()->GetIccModule()->TranslateScanline(m_pProfile->m_pTransform, m_pCache, temp_src, nMaxColors);
- FX_Free(temp_src);
- }
- for (int i = 0; i < pixels; i ++) {
- int index = 0;
- for (int c = 0; c < m_nComponents; c ++) {
- index = index * 52 + (*pSrcBuf) / 5;
- pSrcBuf ++;
- }
- index *= 3;
- *pDestBuf++ = m_pCache[index];
- *pDestBuf++ = m_pCache[index + 1];
- *pDestBuf++ = m_pCache[index + 2];
- }
+ CPDF_ModuleMgr::Get()->GetIccModule()->TranslateScanline(
+ m_pProfile->m_pTransform, m_pCache, temp_src, nMaxColors);
+ FX_Free(temp_src);
+ }
+ for (int i = 0; i < pixels; i++) {
+ int index = 0;
+ for (int c = 0; c < m_nComponents; c++) {
+ index = index * 52 + (*pSrcBuf) / 5;
+ pSrcBuf++;
}
- } else if (m_pAlterCS) {
- m_pAlterCS->TranslateImageLine(pDestBuf, pSrcBuf, pixels, image_width, image_height);
- }
-}
-class CPDF_IndexedCS : public CPDF_ColorSpace
-{
-public:
- explicit CPDF_IndexedCS(CPDF_Document* pDoc)
- : CPDF_ColorSpace(pDoc, PDFCS_INDEXED, 1),
- m_pBaseCS(nullptr),
- m_pCountedBaseCS(nullptr),
- m_pCompMinMax(nullptr) {
- }
- ~CPDF_IndexedCS() override;
+ index *= 3;
+ *pDestBuf++ = m_pCache[index];
+ *pDestBuf++ = m_pCache[index + 1];
+ *pDestBuf++ = m_pCache[index + 2];
+ }
+ }
+ } else if (m_pAlterCS) {
+ m_pAlterCS->TranslateImageLine(pDestBuf, pSrcBuf, pixels, image_width,
+ image_height);
+ }
+}
+class CPDF_IndexedCS : public CPDF_ColorSpace {
+ public:
+ explicit CPDF_IndexedCS(CPDF_Document* pDoc)
+ : CPDF_ColorSpace(pDoc, PDFCS_INDEXED, 1),
+ m_pBaseCS(nullptr),
+ m_pCountedBaseCS(nullptr),
+ m_pCompMinMax(nullptr) {}
+ ~CPDF_IndexedCS() override;
- FX_BOOL v_Load(CPDF_Document* pDoc, CPDF_Array* pArray) override;
- FX_BOOL GetRGB(FX_FLOAT* pBuf, FX_FLOAT& R, FX_FLOAT& G, FX_FLOAT& B) const override;
- CPDF_ColorSpace* GetBaseCS() const override;
- void EnableStdConversion(FX_BOOL bEnabled) override;
+ FX_BOOL v_Load(CPDF_Document* pDoc, CPDF_Array* pArray) override;
+ FX_BOOL GetRGB(FX_FLOAT* pBuf,
+ FX_FLOAT& R,
+ FX_FLOAT& G,
+ FX_FLOAT& B) const override;
+ CPDF_ColorSpace* GetBaseCS() const override;
+ void EnableStdConversion(FX_BOOL bEnabled) override;
- CPDF_ColorSpace* m_pBaseCS;
- CPDF_CountedColorSpace* m_pCountedBaseCS;
- int m_nBaseComponents;
- int m_MaxIndex;
- CFX_ByteString m_Table;
- FX_FLOAT* m_pCompMinMax;
+ CPDF_ColorSpace* m_pBaseCS;
+ CPDF_CountedColorSpace* m_pCountedBaseCS;
+ int m_nBaseComponents;
+ int m_MaxIndex;
+ CFX_ByteString m_Table;
+ FX_FLOAT* m_pCompMinMax;
};
-CPDF_IndexedCS::~CPDF_IndexedCS()
-{
- if (m_pCompMinMax) {
- FX_Free(m_pCompMinMax);
- }
- CPDF_ColorSpace* pCS = m_pCountedBaseCS ? m_pCountedBaseCS->get() : NULL;
- if (pCS && m_pDocument) {
- m_pDocument->GetPageData()->ReleaseColorSpace(pCS->GetArray());
- }
-}
-FX_BOOL CPDF_IndexedCS::v_Load(CPDF_Document* pDoc, CPDF_Array* pArray)
-{
- if (pArray->GetCount() < 4) {
- return FALSE;
- }
- CPDF_Object* pBaseObj = pArray->GetElementValue(1);
- if (pBaseObj == m_pArray) {
- return FALSE;
- }
- CPDF_DocPageData* pDocPageData = pDoc->GetPageData();
- m_pBaseCS = pDocPageData->GetColorSpace(pBaseObj, NULL);
- if (m_pBaseCS == NULL) {
- return FALSE;
- }
- m_pCountedBaseCS = pDocPageData->FindColorSpacePtr(m_pBaseCS->GetArray());
- m_nBaseComponents = m_pBaseCS->CountComponents();
- m_pCompMinMax = FX_Alloc2D(FX_FLOAT, m_nBaseComponents, 2);
- FX_FLOAT defvalue;
- for (int i = 0; i < m_nBaseComponents; i ++) {
- m_pBaseCS->GetDefaultValue(i, defvalue, m_pCompMinMax[i * 2], m_pCompMinMax[i * 2 + 1]);
- m_pCompMinMax[i * 2 + 1] -= m_pCompMinMax[i * 2];
- }
- m_MaxIndex = pArray->GetInteger(2);
- CPDF_Object* pTableObj = pArray->GetElementValue(3);
- if (pTableObj == NULL) {
- return FALSE;
- }
- if (pTableObj->GetType() == PDFOBJ_STRING) {
- m_Table = ((CPDF_String*)pTableObj)->GetString();
- } else if (pTableObj->GetType() == PDFOBJ_STREAM) {
- CPDF_StreamAcc acc;
- acc.LoadAllData((CPDF_Stream*)pTableObj, FALSE);
- m_Table = CFX_ByteStringC(acc.GetData(), acc.GetSize());
- }
- return TRUE;
+CPDF_IndexedCS::~CPDF_IndexedCS() {
+ if (m_pCompMinMax) {
+ FX_Free(m_pCompMinMax);
+ }
+ CPDF_ColorSpace* pCS = m_pCountedBaseCS ? m_pCountedBaseCS->get() : NULL;
+ if (pCS && m_pDocument) {
+ m_pDocument->GetPageData()->ReleaseColorSpace(pCS->GetArray());
+ }
+}
+FX_BOOL CPDF_IndexedCS::v_Load(CPDF_Document* pDoc, CPDF_Array* pArray) {
+ if (pArray->GetCount() < 4) {
+ return FALSE;
+ }
+ CPDF_Object* pBaseObj = pArray->GetElementValue(1);
+ if (pBaseObj == m_pArray) {
+ return FALSE;
+ }
+ CPDF_DocPageData* pDocPageData = pDoc->GetPageData();
+ m_pBaseCS = pDocPageData->GetColorSpace(pBaseObj, NULL);
+ if (m_pBaseCS == NULL) {
+ return FALSE;
+ }
+ m_pCountedBaseCS = pDocPageData->FindColorSpacePtr(m_pBaseCS->GetArray());
+ m_nBaseComponents = m_pBaseCS->CountComponents();
+ m_pCompMinMax = FX_Alloc2D(FX_FLOAT, m_nBaseComponents, 2);
+ FX_FLOAT defvalue;
+ for (int i = 0; i < m_nBaseComponents; i++) {
+ m_pBaseCS->GetDefaultValue(i, defvalue, m_pCompMinMax[i * 2],
+ m_pCompMinMax[i * 2 + 1]);
+ m_pCompMinMax[i * 2 + 1] -= m_pCompMinMax[i * 2];
+ }
+ m_MaxIndex = pArray->GetInteger(2);
+ CPDF_Object* pTableObj = pArray->GetElementValue(3);
+ if (pTableObj == NULL) {
+ return FALSE;
+ }
+ if (pTableObj->GetType() == PDFOBJ_STRING) {
+ m_Table = ((CPDF_String*)pTableObj)->GetString();
+ } else if (pTableObj->GetType() == PDFOBJ_STREAM) {
+ CPDF_StreamAcc acc;
+ acc.LoadAllData((CPDF_Stream*)pTableObj, FALSE);
+ m_Table = CFX_ByteStringC(acc.GetData(), acc.GetSize());
+ }
+ return TRUE;
}
-FX_BOOL CPDF_IndexedCS::GetRGB(FX_FLOAT* pBuf, FX_FLOAT& R, FX_FLOAT& G, FX_FLOAT& B) const
-{
- int index = (int32_t)(*pBuf);
- if (index < 0 || index > m_MaxIndex) {
- return FALSE;
- }
- if (m_nBaseComponents) {
- if (index == INT_MAX || (index + 1) > INT_MAX / m_nBaseComponents ||
- (index + 1)*m_nBaseComponents > (int)m_Table.GetLength()) {
- R = G = B = 0;
- return FALSE;
- }
- }
- CFX_FixedBufGrow<FX_FLOAT, 16> Comps(m_nBaseComponents);
- FX_FLOAT* comps = Comps;
- const uint8_t* pTable = m_Table;
- for (int i = 0; i < m_nBaseComponents; i ++) {
- comps[i] = m_pCompMinMax[i * 2] + m_pCompMinMax[i * 2 + 1] * pTable[index * m_nBaseComponents + i] / 255;
- }
- m_pBaseCS->GetRGB(comps, R, G, B);
- return TRUE;
-}
-CPDF_ColorSpace*CPDF_IndexedCS::GetBaseCS() const
-{
- return m_pBaseCS;
-}
-void CPDF_IndexedCS::EnableStdConversion(FX_BOOL bEnabled)
-{
- CPDF_ColorSpace::EnableStdConversion(bEnabled);
- if (m_pBaseCS) {
- m_pBaseCS->EnableStdConversion(bEnabled);
- }
-}
-#define MAX_PATTERN_COLORCOMPS 16
+FX_BOOL CPDF_IndexedCS::GetRGB(FX_FLOAT* pBuf,
+ FX_FLOAT& R,
+ FX_FLOAT& G,
+ FX_FLOAT& B) const {
+ int index = (int32_t)(*pBuf);
+ if (index < 0 || index > m_MaxIndex) {
+ return FALSE;
+ }
+ if (m_nBaseComponents) {
+ if (index == INT_MAX || (index + 1) > INT_MAX / m_nBaseComponents ||
+ (index + 1) * m_nBaseComponents > (int)m_Table.GetLength()) {
+ R = G = B = 0;
+ return FALSE;
+ }
+ }
+ CFX_FixedBufGrow<FX_FLOAT, 16> Comps(m_nBaseComponents);
+ FX_FLOAT* comps = Comps;
+ const uint8_t* pTable = m_Table;
+ for (int i = 0; i < m_nBaseComponents; i++) {
+ comps[i] =
+ m_pCompMinMax[i * 2] +
+ m_pCompMinMax[i * 2 + 1] * pTable[index * m_nBaseComponents + i] / 255;
+ }
+ m_pBaseCS->GetRGB(comps, R, G, B);
+ return TRUE;
+}
+CPDF_ColorSpace* CPDF_IndexedCS::GetBaseCS() const {
+ return m_pBaseCS;
+}
+void CPDF_IndexedCS::EnableStdConversion(FX_BOOL bEnabled) {
+ CPDF_ColorSpace::EnableStdConversion(bEnabled);
+ if (m_pBaseCS) {
+ m_pBaseCS->EnableStdConversion(bEnabled);
+ }
+}
+#define MAX_PATTERN_COLORCOMPS 16
typedef struct _PatternValue {
- CPDF_Pattern* m_pPattern;
- CPDF_CountedPattern* m_pCountedPattern;
- int m_nComps;
- FX_FLOAT m_Comps[MAX_PATTERN_COLORCOMPS];
+ CPDF_Pattern* m_pPattern;
+ CPDF_CountedPattern* m_pCountedPattern;
+ int m_nComps;
+ FX_FLOAT m_Comps[MAX_PATTERN_COLORCOMPS];
} PatternValue;
-CPDF_PatternCS::~CPDF_PatternCS()
-{
- CPDF_ColorSpace* pCS = m_pCountedBaseCS ? m_pCountedBaseCS->get() : NULL;
- if (pCS && m_pDocument) {
- m_pDocument->GetPageData()->ReleaseColorSpace(pCS->GetArray());
- }
-}
-FX_BOOL CPDF_PatternCS::v_Load(CPDF_Document* pDoc, CPDF_Array* pArray)
-{
- CPDF_Object* pBaseCS = pArray->GetElementValue(1);
- if (pBaseCS == m_pArray) {
- return FALSE;
- }
- CPDF_DocPageData* pDocPageData = pDoc->GetPageData();
- m_pBaseCS = pDocPageData->GetColorSpace(pBaseCS, NULL);
- if (m_pBaseCS) {
- if (m_pBaseCS->GetFamily() == PDFCS_PATTERN) {
- return FALSE;
- }
- m_pCountedBaseCS = pDocPageData->FindColorSpacePtr(m_pBaseCS->GetArray());
- m_nComponents = m_pBaseCS->CountComponents() + 1;
- if (m_pBaseCS->CountComponents() > MAX_PATTERN_COLORCOMPS) {
- return FALSE;
- }
- } else {
- m_nComponents = 1;
- }
- return TRUE;
-}
-FX_BOOL CPDF_PatternCS::GetRGB(FX_FLOAT* pBuf, FX_FLOAT& R, FX_FLOAT& G, FX_FLOAT& B) const
-{
- if (m_pBaseCS) {
- ASSERT(m_pBaseCS->GetFamily() != PDFCS_PATTERN);
- PatternValue* pvalue = (PatternValue*)pBuf;
- if (m_pBaseCS->GetRGB(pvalue->m_Comps, R, G, B)) {
- return TRUE;
- }
- }
- R = G = B = 0.75f;
- return FALSE;
-}
-CPDF_ColorSpace* CPDF_PatternCS::GetBaseCS() const
-{
- return m_pBaseCS;
-}
-class CPDF_SeparationCS : public CPDF_ColorSpace
-{
-public:
- CPDF_SeparationCS(CPDF_Document* pDoc)
- : CPDF_ColorSpace(pDoc, PDFCS_SEPARATION, 1),
- m_pAltCS(nullptr),
- m_pFunc(nullptr) {
- }
- ~CPDF_SeparationCS() override;
- void GetDefaultValue(int iComponent, FX_FLOAT& value, FX_FLOAT& min, FX_FLOAT& max) const override;
- FX_BOOL v_Load(CPDF_Document* pDoc, CPDF_Array* pArray) override;
- FX_BOOL GetRGB(FX_FLOAT* pBuf, FX_FLOAT& R, FX_FLOAT& G, FX_FLOAT& B) const override;
- void EnableStdConversion(FX_BOOL bEnabled) override;
-
- CPDF_ColorSpace* m_pAltCS;
- CPDF_Function* m_pFunc;
- enum { None, All, Colorant } m_Type;
-};
-CPDF_SeparationCS::~CPDF_SeparationCS()
-{
- if (m_pAltCS) {
- m_pAltCS->ReleaseCS();
- }
- delete m_pFunc;
-}
-void CPDF_SeparationCS::GetDefaultValue(int iComponent, FX_FLOAT& value, FX_FLOAT& min, FX_FLOAT& max) const
-{
- value = 1.0f;
- min = 0;
- max = 1.0f;
-}
-FX_BOOL CPDF_SeparationCS::v_Load(CPDF_Document* pDoc, CPDF_Array* pArray)
-{
- CFX_ByteString name = pArray->GetString(1);
- if (name == FX_BSTRC("None")) {
- m_Type = None;
- } else {
- m_Type = Colorant;
- CPDF_Object* pAltCS = pArray->GetElementValue(2);
- if (pAltCS == m_pArray) {
- return FALSE;
- }
- m_pAltCS = Load(pDoc, pAltCS);
- if (!m_pAltCS) {
- return FALSE;
- }
- CPDF_Object* pFuncObj = pArray->GetElementValue(3);
- if (pFuncObj && pFuncObj->GetType() != PDFOBJ_NAME) {
- m_pFunc = CPDF_Function::Load(pFuncObj);
- }
- if (m_pFunc && m_pFunc->CountOutputs() < m_pAltCS->CountComponents()) {
- delete m_pFunc;
- m_pFunc = NULL;
- }
- }
- return TRUE;
-}
-FX_BOOL CPDF_SeparationCS::GetRGB(FX_FLOAT* pBuf, FX_FLOAT& R, FX_FLOAT& G, FX_FLOAT& B) const
-{
- if (m_Type == None) {
- return FALSE;
- }
- if (m_pFunc == NULL) {
- if (m_pAltCS == NULL) {
- return FALSE;
- }
- int nComps = m_pAltCS->CountComponents();
- CFX_FixedBufGrow<FX_FLOAT, 16> results(nComps);
- for (int i = 0; i < nComps; i ++) {
- results[i] = *pBuf;
- }
- m_pAltCS->GetRGB(results, R, G, B);
- return TRUE;
- }
- CFX_FixedBufGrow<FX_FLOAT, 16> results(m_pFunc->CountOutputs());
- int nresults = 0;
- m_pFunc->Call(pBuf, 1, results, nresults);
- if (nresults == 0) {
- return FALSE;
- }
- if (m_pAltCS) {
- m_pAltCS->GetRGB(results, R, G, B);
- return TRUE;
- }
- R = G = B = 0;
+CPDF_PatternCS::~CPDF_PatternCS() {
+ CPDF_ColorSpace* pCS = m_pCountedBaseCS ? m_pCountedBaseCS->get() : NULL;
+ if (pCS && m_pDocument) {
+ m_pDocument->GetPageData()->ReleaseColorSpace(pCS->GetArray());
+ }
+}
+FX_BOOL CPDF_PatternCS::v_Load(CPDF_Document* pDoc, CPDF_Array* pArray) {
+ CPDF_Object* pBaseCS = pArray->GetElementValue(1);
+ if (pBaseCS == m_pArray) {
return FALSE;
-}
-void CPDF_SeparationCS::EnableStdConversion(FX_BOOL bEnabled)
-{
- CPDF_ColorSpace::EnableStdConversion(bEnabled);
- if (m_pAltCS) {
- m_pAltCS->EnableStdConversion(bEnabled);
+ }
+ CPDF_DocPageData* pDocPageData = pDoc->GetPageData();
+ m_pBaseCS = pDocPageData->GetColorSpace(pBaseCS, NULL);
+ if (m_pBaseCS) {
+ if (m_pBaseCS->GetFamily() == PDFCS_PATTERN) {
+ return FALSE;
}
-}
-class CPDF_DeviceNCS : public CPDF_ColorSpace
-{
-public:
- CPDF_DeviceNCS(CPDF_Document* pDoc)
- : CPDF_ColorSpace(pDoc, PDFCS_DEVICEN, 0),
- m_pAltCS(nullptr),
- m_pFunc(nullptr) {
- }
- ~CPDF_DeviceNCS() override;
- void GetDefaultValue(int iComponent, FX_FLOAT& value, FX_FLOAT& min, FX_FLOAT& max) const override;
- FX_BOOL v_Load(CPDF_Document* pDoc, CPDF_Array* pArray) override;
- FX_BOOL GetRGB(FX_FLOAT* pBuf, FX_FLOAT& R, FX_FLOAT& G, FX_FLOAT& B) const override;
- void EnableStdConversion(FX_BOOL bEnabled) override;
+ m_pCountedBaseCS = pDocPageData->FindColorSpacePtr(m_pBaseCS->GetArray());
+ m_nComponents = m_pBaseCS->CountComponents() + 1;
+ if (m_pBaseCS->CountComponents() > MAX_PATTERN_COLORCOMPS) {
+ return FALSE;
+ }
+ } else {
+ m_nComponents = 1;
+ }
+ return TRUE;
+}
+FX_BOOL CPDF_PatternCS::GetRGB(FX_FLOAT* pBuf,
+ FX_FLOAT& R,
+ FX_FLOAT& G,
+ FX_FLOAT& B) const {
+ if (m_pBaseCS) {
+ ASSERT(m_pBaseCS->GetFamily() != PDFCS_PATTERN);
+ PatternValue* pvalue = (PatternValue*)pBuf;
+ if (m_pBaseCS->GetRGB(pvalue->m_Comps, R, G, B)) {
+ return TRUE;
+ }
+ }
+ R = G = B = 0.75f;
+ return FALSE;
+}
+CPDF_ColorSpace* CPDF_PatternCS::GetBaseCS() const {
+ return m_pBaseCS;
+}
+class CPDF_SeparationCS : public CPDF_ColorSpace {
+ public:
+ CPDF_SeparationCS(CPDF_Document* pDoc)
+ : CPDF_ColorSpace(pDoc, PDFCS_SEPARATION, 1),
+ m_pAltCS(nullptr),
+ m_pFunc(nullptr) {}
+ ~CPDF_SeparationCS() override;
+ void GetDefaultValue(int iComponent,
+ FX_FLOAT& value,
+ FX_FLOAT& min,
+ FX_FLOAT& max) const override;
+ FX_BOOL v_Load(CPDF_Document* pDoc, CPDF_Array* pArray) override;
+ FX_BOOL GetRGB(FX_FLOAT* pBuf,
+ FX_FLOAT& R,
+ FX_FLOAT& G,
+ FX_FLOAT& B) const override;
+ void EnableStdConversion(FX_BOOL bEnabled) override;
- CPDF_ColorSpace* m_pAltCS;
- CPDF_Function* m_pFunc;
+ CPDF_ColorSpace* m_pAltCS;
+ CPDF_Function* m_pFunc;
+ enum { None, All, Colorant } m_Type;
};
-CPDF_DeviceNCS::~CPDF_DeviceNCS()
-{
- delete m_pFunc;
- if (m_pAltCS) {
- m_pAltCS->ReleaseCS();
- }
-}
-void CPDF_DeviceNCS::GetDefaultValue(int iComponent, FX_FLOAT& value, FX_FLOAT& min, FX_FLOAT& max) const
-{
- value = 1.0f;
- min = 0;
- max = 1.0f;
-}
-FX_BOOL CPDF_DeviceNCS::v_Load(CPDF_Document* pDoc, CPDF_Array* pArray)
-{
- CPDF_Object* pObj = pArray->GetElementValue(1);
- if (!pObj) {
- return FALSE;
- }
- if (pObj->GetType() != PDFOBJ_ARRAY) {
- return FALSE;
- }
- m_nComponents = ((CPDF_Array*)pObj)->GetCount();
+CPDF_SeparationCS::~CPDF_SeparationCS() {
+ if (m_pAltCS) {
+ m_pAltCS->ReleaseCS();
+ }
+ delete m_pFunc;
+}
+void CPDF_SeparationCS::GetDefaultValue(int iComponent,
+ FX_FLOAT& value,
+ FX_FLOAT& min,
+ FX_FLOAT& max) const {
+ value = 1.0f;
+ min = 0;
+ max = 1.0f;
+}
+FX_BOOL CPDF_SeparationCS::v_Load(CPDF_Document* pDoc, CPDF_Array* pArray) {
+ CFX_ByteString name = pArray->GetString(1);
+ if (name == FX_BSTRC("None")) {
+ m_Type = None;
+ } else {
+ m_Type = Colorant;
CPDF_Object* pAltCS = pArray->GetElementValue(2);
- if (!pAltCS || pAltCS == m_pArray) {
- return FALSE;
+ if (pAltCS == m_pArray) {
+ return FALSE;
}
m_pAltCS = Load(pDoc, pAltCS);
- m_pFunc = CPDF_Function::Load(pArray->GetElementValue(3));
- if (m_pAltCS == NULL || m_pFunc == NULL) {
- return FALSE;
+ if (!m_pAltCS) {
+ return FALSE;
}
- if (m_pFunc->CountOutputs() < m_pAltCS->CountComponents()) {
- return FALSE;
+ CPDF_Object* pFuncObj = pArray->GetElementValue(3);
+ if (pFuncObj && pFuncObj->GetType() != PDFOBJ_NAME) {
+ m_pFunc = CPDF_Function::Load(pFuncObj);
}
- return TRUE;
+ if (m_pFunc && m_pFunc->CountOutputs() < m_pAltCS->CountComponents()) {
+ delete m_pFunc;
+ m_pFunc = NULL;
+ }
+ }
+ return TRUE;
}
-FX_BOOL CPDF_DeviceNCS::GetRGB(FX_FLOAT* pBuf, FX_FLOAT& R, FX_FLOAT& G, FX_FLOAT& B) const
-{
- if (m_pFunc == NULL) {
- return FALSE;
+FX_BOOL CPDF_SeparationCS::GetRGB(FX_FLOAT* pBuf,
+ FX_FLOAT& R,
+ FX_FLOAT& G,
+ FX_FLOAT& B) const {
+ if (m_Type == None) {
+ return FALSE;
+ }
+ if (m_pFunc == NULL) {
+ if (m_pAltCS == NULL) {
+ return FALSE;
}
- CFX_FixedBufGrow<FX_FLOAT, 16> results(m_pFunc->CountOutputs());
- int nresults = 0;
- m_pFunc->Call(pBuf, m_nComponents, results, nresults);
- if (nresults == 0) {
- return FALSE;
+ int nComps = m_pAltCS->CountComponents();
+ CFX_FixedBufGrow<FX_FLOAT, 16> results(nComps);
+ for (int i = 0; i < nComps; i++) {
+ results[i] = *pBuf;
}
m_pAltCS->GetRGB(results, R, G, B);
return TRUE;
-}
-void CPDF_DeviceNCS::EnableStdConversion(FX_BOOL bEnabled)
-{
- CPDF_ColorSpace::EnableStdConversion(bEnabled);
- if (m_pAltCS) {
- m_pAltCS->EnableStdConversion(bEnabled);
- }
-}
-CPDF_ColorSpace* CPDF_ColorSpace::GetStockCS(int family)
-{
- return CPDF_ModuleMgr::Get()->GetPageModule()->GetStockCS(family);;
-}
-CPDF_ColorSpace* _CSFromName(const CFX_ByteString& name)
-{
- if (name == FX_BSTRC("DeviceRGB") || name == FX_BSTRC("RGB")) {
- return CPDF_ColorSpace::GetStockCS(PDFCS_DEVICERGB);
- }
- if (name == FX_BSTRC("DeviceGray") || name == FX_BSTRC("G")) {
- return CPDF_ColorSpace::GetStockCS(PDFCS_DEVICEGRAY);
- }
- if (name == FX_BSTRC("DeviceCMYK") || name == FX_BSTRC("CMYK")) {
- return CPDF_ColorSpace::GetStockCS(PDFCS_DEVICECMYK);
- }
- if (name == FX_BSTRC("Pattern")) {
- return CPDF_ColorSpace::GetStockCS(PDFCS_PATTERN);
- }
+ }
+ CFX_FixedBufGrow<FX_FLOAT, 16> results(m_pFunc->CountOutputs());
+ int nresults = 0;
+ m_pFunc->Call(pBuf, 1, results, nresults);
+ if (nresults == 0) {
+ return FALSE;
+ }
+ if (m_pAltCS) {
+ m_pAltCS->GetRGB(results, R, G, B);
+ return TRUE;
+ }
+ R = G = B = 0;
+ return FALSE;
+}
+void CPDF_SeparationCS::EnableStdConversion(FX_BOOL bEnabled) {
+ CPDF_ColorSpace::EnableStdConversion(bEnabled);
+ if (m_pAltCS) {
+ m_pAltCS->EnableStdConversion(bEnabled);
+ }
+}
+class CPDF_DeviceNCS : public CPDF_ColorSpace {
+ public:
+ CPDF_DeviceNCS(CPDF_Document* pDoc)
+ : CPDF_ColorSpace(pDoc, PDFCS_DEVICEN, 0),
+ m_pAltCS(nullptr),
+ m_pFunc(nullptr) {}
+ ~CPDF_DeviceNCS() override;
+ void GetDefaultValue(int iComponent,
+ FX_FLOAT& value,
+ FX_FLOAT& min,
+ FX_FLOAT& max) const override;
+ FX_BOOL v_Load(CPDF_Document* pDoc, CPDF_Array* pArray) override;
+ FX_BOOL GetRGB(FX_FLOAT* pBuf,
+ FX_FLOAT& R,
+ FX_FLOAT& G,
+ FX_FLOAT& B) const override;
+ void EnableStdConversion(FX_BOOL bEnabled) override;
+
+ CPDF_ColorSpace* m_pAltCS;
+ CPDF_Function* m_pFunc;
+};
+CPDF_DeviceNCS::~CPDF_DeviceNCS() {
+ delete m_pFunc;
+ if (m_pAltCS) {
+ m_pAltCS->ReleaseCS();
+ }
+}
+void CPDF_DeviceNCS::GetDefaultValue(int iComponent,
+ FX_FLOAT& value,
+ FX_FLOAT& min,
+ FX_FLOAT& max) const {
+ value = 1.0f;
+ min = 0;
+ max = 1.0f;
+}
+FX_BOOL CPDF_DeviceNCS::v_Load(CPDF_Document* pDoc, CPDF_Array* pArray) {
+ CPDF_Object* pObj = pArray->GetElementValue(1);
+ if (!pObj) {
+ return FALSE;
+ }
+ if (pObj->GetType() != PDFOBJ_ARRAY) {
+ return FALSE;
+ }
+ m_nComponents = ((CPDF_Array*)pObj)->GetCount();
+ CPDF_Object* pAltCS = pArray->GetElementValue(2);
+ if (!pAltCS || pAltCS == m_pArray) {
+ return FALSE;
+ }
+ m_pAltCS = Load(pDoc, pAltCS);
+ m_pFunc = CPDF_Function::Load(pArray->GetElementValue(3));
+ if (m_pAltCS == NULL || m_pFunc == NULL) {
+ return FALSE;
+ }
+ if (m_pFunc->CountOutputs() < m_pAltCS->CountComponents()) {
+ return FALSE;
+ }
+ return TRUE;
+}
+FX_BOOL CPDF_DeviceNCS::GetRGB(FX_FLOAT* pBuf,
+ FX_FLOAT& R,
+ FX_FLOAT& G,
+ FX_FLOAT& B) const {
+ if (m_pFunc == NULL) {
+ return FALSE;
+ }
+ CFX_FixedBufGrow<FX_FLOAT, 16> results(m_pFunc->CountOutputs());
+ int nresults = 0;
+ m_pFunc->Call(pBuf, m_nComponents, results, nresults);
+ if (nresults == 0) {
+ return FALSE;
+ }
+ m_pAltCS->GetRGB(results, R, G, B);
+ return TRUE;
+}
+void CPDF_DeviceNCS::EnableStdConversion(FX_BOOL bEnabled) {
+ CPDF_ColorSpace::EnableStdConversion(bEnabled);
+ if (m_pAltCS) {
+ m_pAltCS->EnableStdConversion(bEnabled);
+ }
+}
+CPDF_ColorSpace* CPDF_ColorSpace::GetStockCS(int family) {
+ return CPDF_ModuleMgr::Get()->GetPageModule()->GetStockCS(family);
+ ;
+}
+CPDF_ColorSpace* _CSFromName(const CFX_ByteString& name) {
+ if (name == FX_BSTRC("DeviceRGB") || name == FX_BSTRC("RGB")) {
+ return CPDF_ColorSpace::GetStockCS(PDFCS_DEVICERGB);
+ }
+ if (name == FX_BSTRC("DeviceGray") || name == FX_BSTRC("G")) {
+ return CPDF_ColorSpace::GetStockCS(PDFCS_DEVICEGRAY);
+ }
+ if (name == FX_BSTRC("DeviceCMYK") || name == FX_BSTRC("CMYK")) {
+ return CPDF_ColorSpace::GetStockCS(PDFCS_DEVICECMYK);
+ }
+ if (name == FX_BSTRC("Pattern")) {
+ return CPDF_ColorSpace::GetStockCS(PDFCS_PATTERN);
+ }
+ return NULL;
+}
+CPDF_ColorSpace* CPDF_ColorSpace::Load(CPDF_Document* pDoc, CPDF_Object* pObj) {
+ if (pObj == NULL) {
return NULL;
-}
-CPDF_ColorSpace* CPDF_ColorSpace::Load(CPDF_Document* pDoc, CPDF_Object* pObj)
-{
- if (pObj == NULL) {
- return NULL;
- }
- if (pObj->GetType() == PDFOBJ_NAME) {
- return _CSFromName(pObj->GetString());
- }
- if (pObj->GetType() == PDFOBJ_STREAM) {
- CPDF_Dictionary *pDict = ((CPDF_Stream *)pObj)->GetDict();
- if (!pDict) {
- return NULL;
- }
- CPDF_ColorSpace *pRet = NULL;
- FX_POSITION pos = pDict->GetStartPos();
- while (pos) {
- CFX_ByteString bsKey;
- CPDF_Object *pValue = pDict->GetNextElement(pos, bsKey);
- if (pValue && pValue->GetType() == PDFOBJ_NAME) {
- pRet = _CSFromName(pValue->GetString());
- }
- if (pRet) {
- return pRet;
- }
- }
- return NULL;
- }
- if (pObj->GetType() != PDFOBJ_ARRAY) {
- return NULL;
- }
- CPDF_Array* pArray = (CPDF_Array*)pObj;
- if (pArray->GetCount() == 0) {
- return NULL;
- }
- CPDF_Object *pFamilyObj = pArray->GetElementValue(0);
- if (!pFamilyObj) {
- return NULL;
- }
- CFX_ByteString familyname = pFamilyObj->GetString();
- if (pArray->GetCount() == 1) {
- return _CSFromName(familyname);
- }
- CPDF_ColorSpace* pCS = NULL;
- FX_DWORD id = familyname.GetID();
- if (id == FXBSTR_ID('C', 'a', 'l', 'G')) {
- pCS = new CPDF_CalGray(pDoc);
- } else if (id == FXBSTR_ID('C', 'a', 'l', 'R')) {
- pCS = new CPDF_CalRGB(pDoc);
- } else if (id == FXBSTR_ID('L', 'a', 'b', 0)) {
- pCS = new CPDF_LabCS(pDoc);
- } else if (id == FXBSTR_ID('I', 'C', 'C', 'B')) {
- pCS = new CPDF_ICCBasedCS(pDoc);
- } else if (id == FXBSTR_ID('I', 'n', 'd', 'e') || id == FXBSTR_ID('I', 0, 0, 0)) {
- pCS = new CPDF_IndexedCS(pDoc);
- } else if (id == FXBSTR_ID('S', 'e', 'p', 'a')) {
- pCS = new CPDF_SeparationCS(pDoc);
- } else if (id == FXBSTR_ID('D', 'e', 'v', 'i')) {
- pCS = new CPDF_DeviceNCS(pDoc);
- } else if (id == FXBSTR_ID('P', 'a', 't', 't')) {
- pCS = new CPDF_PatternCS(pDoc);
- } else {
- return NULL;
- }
- pCS->m_pArray = pArray;
- if (!pCS->v_Load(pDoc, pArray)) {
- pCS->ReleaseCS();
- return NULL;
- }
- return pCS;
-}
-void CPDF_ColorSpace::ReleaseCS()
-{
- if (this == GetStockCS(PDFCS_DEVICERGB)) {
- return;
- }
- if (this == GetStockCS(PDFCS_DEVICEGRAY)) {
- return;
- }
- if (this == GetStockCS(PDFCS_DEVICECMYK)) {
- return;
- }
- if (this == GetStockCS(PDFCS_PATTERN)) {
- return;
- }
- delete this;
-}
-int CPDF_ColorSpace::GetBufSize() const
-{
- if (m_Family == PDFCS_PATTERN) {
- return sizeof(PatternValue);
- }
- return m_nComponents * sizeof(FX_FLOAT);
-}
-FX_FLOAT* CPDF_ColorSpace::CreateBuf()
-{
- int size = GetBufSize();
- uint8_t* pBuf = FX_Alloc(uint8_t, size);
- return (FX_FLOAT*)pBuf;
-}
-FX_BOOL CPDF_ColorSpace::sRGB() const
-{
- if (m_Family == PDFCS_DEVICERGB) {
- return TRUE;
- }
- if (m_Family != PDFCS_ICCBASED) {
- return FALSE;
- }
- CPDF_ICCBasedCS* pCS = (CPDF_ICCBasedCS*)this;
- return pCS->m_pProfile->m_bsRGB;
-}
-FX_BOOL CPDF_ColorSpace::GetCMYK(FX_FLOAT* pBuf, FX_FLOAT& c, FX_FLOAT& m, FX_FLOAT& y, FX_FLOAT& k) const
-{
- if (v_GetCMYK(pBuf, c, m, y, k)) {
- return TRUE;
- }
- FX_FLOAT R, G, B;
- if (!GetRGB(pBuf, R, G, B)) {
- return FALSE;
+ }
+ if (pObj->GetType() == PDFOBJ_NAME) {
+ return _CSFromName(pObj->GetString());
+ }
+ if (pObj->GetType() == PDFOBJ_STREAM) {
+ CPDF_Dictionary* pDict = ((CPDF_Stream*)pObj)->GetDict();
+ if (!pDict) {
+ return NULL;
+ }
+ CPDF_ColorSpace* pRet = NULL;
+ FX_POSITION pos = pDict->GetStartPos();
+ while (pos) {
+ CFX_ByteString bsKey;
+ CPDF_Object* pValue = pDict->GetNextElement(pos, bsKey);
+ if (pValue && pValue->GetType() == PDFOBJ_NAME) {
+ pRet = _CSFromName(pValue->GetString());
+ }
+ if (pRet) {
+ return pRet;
+ }
}
- sRGB_to_AdobeCMYK(R, G, B, c, m, y, k);
+ return NULL;
+ }
+ if (pObj->GetType() != PDFOBJ_ARRAY) {
+ return NULL;
+ }
+ CPDF_Array* pArray = (CPDF_Array*)pObj;
+ if (pArray->GetCount() == 0) {
+ return NULL;
+ }
+ CPDF_Object* pFamilyObj = pArray->GetElementValue(0);
+ if (!pFamilyObj) {
+ return NULL;
+ }
+ CFX_ByteString familyname = pFamilyObj->GetString();
+ if (pArray->GetCount() == 1) {
+ return _CSFromName(familyname);
+ }
+ CPDF_ColorSpace* pCS = NULL;
+ FX_DWORD id = familyname.GetID();
+ if (id == FXBSTR_ID('C', 'a', 'l', 'G')) {
+ pCS = new CPDF_CalGray(pDoc);
+ } else if (id == FXBSTR_ID('C', 'a', 'l', 'R')) {
+ pCS = new CPDF_CalRGB(pDoc);
+ } else if (id == FXBSTR_ID('L', 'a', 'b', 0)) {
+ pCS = new CPDF_LabCS(pDoc);
+ } else if (id == FXBSTR_ID('I', 'C', 'C', 'B')) {
+ pCS = new CPDF_ICCBasedCS(pDoc);
+ } else if (id == FXBSTR_ID('I', 'n', 'd', 'e') ||
+ id == FXBSTR_ID('I', 0, 0, 0)) {
+ pCS = new CPDF_IndexedCS(pDoc);
+ } else if (id == FXBSTR_ID('S', 'e', 'p', 'a')) {
+ pCS = new CPDF_SeparationCS(pDoc);
+ } else if (id == FXBSTR_ID('D', 'e', 'v', 'i')) {
+ pCS = new CPDF_DeviceNCS(pDoc);
+ } else if (id == FXBSTR_ID('P', 'a', 't', 't')) {
+ pCS = new CPDF_PatternCS(pDoc);
+ } else {
+ return NULL;
+ }
+ pCS->m_pArray = pArray;
+ if (!pCS->v_Load(pDoc, pArray)) {
+ pCS->ReleaseCS();
+ return NULL;
+ }
+ return pCS;
+}
+void CPDF_ColorSpace::ReleaseCS() {
+ if (this == GetStockCS(PDFCS_DEVICERGB)) {
+ return;
+ }
+ if (this == GetStockCS(PDFCS_DEVICEGRAY)) {
+ return;
+ }
+ if (this == GetStockCS(PDFCS_DEVICECMYK)) {
+ return;
+ }
+ if (this == GetStockCS(PDFCS_PATTERN)) {
+ return;
+ }
+ delete this;
+}
+int CPDF_ColorSpace::GetBufSize() const {
+ if (m_Family == PDFCS_PATTERN) {
+ return sizeof(PatternValue);
+ }
+ return m_nComponents * sizeof(FX_FLOAT);
+}
+FX_FLOAT* CPDF_ColorSpace::CreateBuf() {
+ int size = GetBufSize();
+ uint8_t* pBuf = FX_Alloc(uint8_t, size);
+ return (FX_FLOAT*)pBuf;
+}
+FX_BOOL CPDF_ColorSpace::sRGB() const {
+ if (m_Family == PDFCS_DEVICERGB) {
return TRUE;
-}
-FX_BOOL CPDF_ColorSpace::SetCMYK(FX_FLOAT* pBuf, FX_FLOAT c, FX_FLOAT m, FX_FLOAT y, FX_FLOAT k) const
-{
- if (v_SetCMYK(pBuf, c, m, y, k)) {
- return TRUE;
- }
- FX_FLOAT R, G, B;
- AdobeCMYK_to_sRGB(c, m, y, k, R, G, B);
- return SetRGB(pBuf, R, G, B);
-}
-void CPDF_ColorSpace::GetDefaultColor(FX_FLOAT* buf) const
-{
- if (buf == NULL || m_Family == PDFCS_PATTERN) {
- return;
- }
- FX_FLOAT min, max;
- for (int i = 0; i < m_nComponents; i ++) {
- GetDefaultValue(i, buf[i], min, max);
- }
-}
-int CPDF_ColorSpace::GetMaxIndex() const
-{
- if (m_Family != PDFCS_INDEXED) {
- return 0;
- }
- CPDF_IndexedCS* pCS = (CPDF_IndexedCS*)this;
- return pCS->m_MaxIndex;
-}
-void CPDF_ColorSpace::TranslateImageLine(uint8_t* dest_buf, const uint8_t* src_buf, int pixels, int image_width, int image_height, FX_BOOL bTransMask) const
-{
- CFX_FixedBufGrow<FX_FLOAT, 16> srcbuf(m_nComponents);
- FX_FLOAT* src = srcbuf;
- FX_FLOAT R, G, B;
- for (int i = 0; i < pixels; i ++) {
- for (int j = 0; j < m_nComponents; j ++)
- if (m_Family == PDFCS_INDEXED) {
- src[j] = (FX_FLOAT)(*src_buf ++);
- } else {
- src[j] = (FX_FLOAT)(*src_buf ++) / 255;
- }
- GetRGB(src, R, G, B);
- *dest_buf ++ = (int32_t)(B * 255);
- *dest_buf ++ = (int32_t)(G * 255);
- *dest_buf ++ = (int32_t)(R * 255);
- }
-}
-void CPDF_ColorSpace::EnableStdConversion(FX_BOOL bEnabled)
-{
- if (bEnabled) {
- m_dwStdConversion ++;
- } else if (m_dwStdConversion) {
- m_dwStdConversion --;
- }
-}
-CPDF_Color::CPDF_Color(int family)
-{
- m_pCS = CPDF_ColorSpace::GetStockCS(family);
- int nComps = 3;
- if (family == PDFCS_DEVICEGRAY) {
- nComps = 1;
- } else if (family == PDFCS_DEVICECMYK) {
- nComps = 4;
- }
- m_pBuffer = FX_Alloc(FX_FLOAT, nComps);
- for (int i = 0; i < nComps; i ++) {
- m_pBuffer[i] = 0;
- }
-}
-CPDF_Color::~CPDF_Color()
-{
- ReleaseBuffer();
- ReleaseColorSpace();
-}
-void CPDF_Color::ReleaseBuffer()
-{
- if (!m_pBuffer) {
- return;
- }
- if (m_pCS->GetFamily() == PDFCS_PATTERN) {
- PatternValue* pvalue = (PatternValue*)m_pBuffer;
- CPDF_Pattern* pPattern = pvalue->m_pCountedPattern ? pvalue->m_pCountedPattern->get() : NULL;
- if (pPattern && pPattern->m_pDocument) {
- CPDF_DocPageData *pPageData = pPattern->m_pDocument->GetPageData();
- if (pPageData) {
- pPageData->ReleasePattern(pPattern->m_pPatternObj);
- }
- }
- }
- FX_Free(m_pBuffer);
- m_pBuffer = NULL;
-}
-void CPDF_Color::ReleaseColorSpace()
-{
- if (m_pCS && m_pCS->m_pDocument && m_pCS->GetArray()) {
- m_pCS->m_pDocument->GetPageData()->ReleaseColorSpace(m_pCS->GetArray());
- m_pCS = NULL;
- }
-}
-void CPDF_Color::SetColorSpace(CPDF_ColorSpace* pCS)
-{
- if (m_pCS == pCS) {
- if (m_pBuffer == NULL) {
- m_pBuffer = pCS->CreateBuf();
- }
- ReleaseColorSpace();
- m_pCS = pCS;
- return;
+ }
+ if (m_Family != PDFCS_ICCBASED) {
+ return FALSE;
+ }
+ CPDF_ICCBasedCS* pCS = (CPDF_ICCBasedCS*)this;
+ return pCS->m_pProfile->m_bsRGB;
+}
+FX_BOOL CPDF_ColorSpace::GetCMYK(FX_FLOAT* pBuf,
+ FX_FLOAT& c,
+ FX_FLOAT& m,
+ FX_FLOAT& y,
+ FX_FLOAT& k) const {
+ if (v_GetCMYK(pBuf, c, m, y, k)) {
+ return TRUE;
+ }
+ FX_FLOAT R, G, B;
+ if (!GetRGB(pBuf, R, G, B)) {
+ return FALSE;
+ }
+ sRGB_to_AdobeCMYK(R, G, B, c, m, y, k);
+ return TRUE;
+}
+FX_BOOL CPDF_ColorSpace::SetCMYK(FX_FLOAT* pBuf,
+ FX_FLOAT c,
+ FX_FLOAT m,
+ FX_FLOAT y,
+ FX_FLOAT k) const {
+ if (v_SetCMYK(pBuf, c, m, y, k)) {
+ return TRUE;
+ }
+ FX_FLOAT R, G, B;
+ AdobeCMYK_to_sRGB(c, m, y, k, R, G, B);
+ return SetRGB(pBuf, R, G, B);
+}
+void CPDF_ColorSpace::GetDefaultColor(FX_FLOAT* buf) const {
+ if (buf == NULL || m_Family == PDFCS_PATTERN) {
+ return;
+ }
+ FX_FLOAT min, max;
+ for (int i = 0; i < m_nComponents; i++) {
+ GetDefaultValue(i, buf[i], min, max);
+ }
+}
+int CPDF_ColorSpace::GetMaxIndex() const {
+ if (m_Family != PDFCS_INDEXED) {
+ return 0;
+ }
+ CPDF_IndexedCS* pCS = (CPDF_IndexedCS*)this;
+ return pCS->m_MaxIndex;
+}
+void CPDF_ColorSpace::TranslateImageLine(uint8_t* dest_buf,
+ const uint8_t* src_buf,
+ int pixels,
+ int image_width,
+ int image_height,
+ FX_BOOL bTransMask) const {
+ CFX_FixedBufGrow<FX_FLOAT, 16> srcbuf(m_nComponents);
+ FX_FLOAT* src = srcbuf;
+ FX_FLOAT R, G, B;
+ for (int i = 0; i < pixels; i++) {
+ for (int j = 0; j < m_nComponents; j++)
+ if (m_Family == PDFCS_INDEXED) {
+ src[j] = (FX_FLOAT)(*src_buf++);
+ } else {
+ src[j] = (FX_FLOAT)(*src_buf++) / 255;
+ }
+ GetRGB(src, R, G, B);
+ *dest_buf++ = (int32_t)(B * 255);
+ *dest_buf++ = (int32_t)(G * 255);
+ *dest_buf++ = (int32_t)(R * 255);
+ }
+}
+void CPDF_ColorSpace::EnableStdConversion(FX_BOOL bEnabled) {
+ if (bEnabled) {
+ m_dwStdConversion++;
+ } else if (m_dwStdConversion) {
+ m_dwStdConversion--;
+ }
+}
+CPDF_Color::CPDF_Color(int family) {
+ m_pCS = CPDF_ColorSpace::GetStockCS(family);
+ int nComps = 3;
+ if (family == PDFCS_DEVICEGRAY) {
+ nComps = 1;
+ } else if (family == PDFCS_DEVICECMYK) {
+ nComps = 4;
+ }
+ m_pBuffer = FX_Alloc(FX_FLOAT, nComps);
+ for (int i = 0; i < nComps; i++) {
+ m_pBuffer[i] = 0;
+ }
+}
+CPDF_Color::~CPDF_Color() {
+ ReleaseBuffer();
+ ReleaseColorSpace();
+}
+void CPDF_Color::ReleaseBuffer() {
+ if (!m_pBuffer) {
+ return;
+ }
+ if (m_pCS->GetFamily() == PDFCS_PATTERN) {
+ PatternValue* pvalue = (PatternValue*)m_pBuffer;
+ CPDF_Pattern* pPattern =
+ pvalue->m_pCountedPattern ? pvalue->m_pCountedPattern->get() : NULL;
+ if (pPattern && pPattern->m_pDocument) {
+ CPDF_DocPageData* pPageData = pPattern->m_pDocument->GetPageData();
+ if (pPageData) {
+ pPageData->ReleasePattern(pPattern->m_pPatternObj);
+ }
+ }
+ }
+ FX_Free(m_pBuffer);
+ m_pBuffer = NULL;
+}
+void CPDF_Color::ReleaseColorSpace() {
+ if (m_pCS && m_pCS->m_pDocument && m_pCS->GetArray()) {
+ m_pCS->m_pDocument->GetPageData()->ReleaseColorSpace(m_pCS->GetArray());
+ m_pCS = NULL;
+ }
+}
+void CPDF_Color::SetColorSpace(CPDF_ColorSpace* pCS) {
+ if (m_pCS == pCS) {
+ if (m_pBuffer == NULL) {
+ m_pBuffer = pCS->CreateBuf();
}
- ReleaseBuffer();
ReleaseColorSpace();
m_pCS = pCS;
- if (m_pCS) {
- m_pBuffer = pCS->CreateBuf();
- pCS->GetDefaultColor(m_pBuffer);
- }
-}
-void CPDF_Color::SetValue(FX_FLOAT* comps)
-{
- if (m_pBuffer == NULL) {
- return;
- }
- if (m_pCS->GetFamily() != PDFCS_PATTERN) {
- FXSYS_memcpy(m_pBuffer, comps, m_pCS->CountComponents() * sizeof(FX_FLOAT));
- }
-}
-void CPDF_Color::SetValue(CPDF_Pattern* pPattern, FX_FLOAT* comps, int ncomps)
-{
- if (ncomps > MAX_PATTERN_COLORCOMPS) {
- return;
- }
- if (m_pCS == NULL || m_pCS->GetFamily() != PDFCS_PATTERN) {
- if (m_pBuffer) {
- FX_Free(m_pBuffer);
- }
- m_pCS = CPDF_ColorSpace::GetStockCS(PDFCS_PATTERN);
- m_pBuffer = m_pCS->CreateBuf();
- }
- CPDF_DocPageData *pDocPageData = NULL;
+ return;
+ }
+ ReleaseBuffer();
+ ReleaseColorSpace();
+ m_pCS = pCS;
+ if (m_pCS) {
+ m_pBuffer = pCS->CreateBuf();
+ pCS->GetDefaultColor(m_pBuffer);
+ }
+}
+void CPDF_Color::SetValue(FX_FLOAT* comps) {
+ if (m_pBuffer == NULL) {
+ return;
+ }
+ if (m_pCS->GetFamily() != PDFCS_PATTERN) {
+ FXSYS_memcpy(m_pBuffer, comps, m_pCS->CountComponents() * sizeof(FX_FLOAT));
+ }
+}
+void CPDF_Color::SetValue(CPDF_Pattern* pPattern, FX_FLOAT* comps, int ncomps) {
+ if (ncomps > MAX_PATTERN_COLORCOMPS) {
+ return;
+ }
+ if (m_pCS == NULL || m_pCS->GetFamily() != PDFCS_PATTERN) {
+ if (m_pBuffer) {
+ FX_Free(m_pBuffer);
+ }
+ m_pCS = CPDF_ColorSpace::GetStockCS(PDFCS_PATTERN);
+ m_pBuffer = m_pCS->CreateBuf();
+ }
+ CPDF_DocPageData* pDocPageData = NULL;
+ PatternValue* pvalue = (PatternValue*)m_pBuffer;
+ if (pvalue->m_pPattern && pvalue->m_pPattern->m_pDocument) {
+ pDocPageData = pvalue->m_pPattern->m_pDocument->GetPageData();
+ if (pDocPageData) {
+ pDocPageData->ReleasePattern(pvalue->m_pPattern->m_pPatternObj);
+ }
+ }
+ pvalue->m_nComps = ncomps;
+ pvalue->m_pPattern = pPattern;
+ if (ncomps) {
+ FXSYS_memcpy(pvalue->m_Comps, comps, ncomps * sizeof(FX_FLOAT));
+ }
+ pvalue->m_pCountedPattern = NULL;
+ if (pPattern && pPattern->m_pDocument) {
+ if (!pDocPageData) {
+ pDocPageData = pPattern->m_pDocument->GetPageData();
+ }
+ pvalue->m_pCountedPattern =
+ pDocPageData->FindPatternPtr(pPattern->m_pPatternObj);
+ }
+}
+void CPDF_Color::Copy(const CPDF_Color* pSrc) {
+ ReleaseBuffer();
+ ReleaseColorSpace();
+ m_pCS = pSrc->m_pCS;
+ if (m_pCS && m_pCS->m_pDocument) {
+ CPDF_Array* pArray = m_pCS->GetArray();
+ if (pArray) {
+ m_pCS = m_pCS->m_pDocument->GetPageData()->GetCopiedColorSpace(pArray);
+ }
+ }
+ if (m_pCS == NULL) {
+ return;
+ }
+ m_pBuffer = m_pCS->CreateBuf();
+ FXSYS_memcpy(m_pBuffer, pSrc->m_pBuffer, m_pCS->GetBufSize());
+ if (m_pCS->GetFamily() == PDFCS_PATTERN) {
PatternValue* pvalue = (PatternValue*)m_pBuffer;
if (pvalue->m_pPattern && pvalue->m_pPattern->m_pDocument) {
- pDocPageData = pvalue->m_pPattern->m_pDocument->GetPageData();
- if (pDocPageData) {
- pDocPageData->ReleasePattern(pvalue->m_pPattern->m_pPatternObj);
- }
- }
- pvalue->m_nComps = ncomps;
- pvalue->m_pPattern = pPattern;
- if (ncomps) {
- FXSYS_memcpy(pvalue->m_Comps, comps, ncomps * sizeof(FX_FLOAT));
- }
- pvalue->m_pCountedPattern = NULL;
- if (pPattern && pPattern->m_pDocument)
- {
- if (!pDocPageData) {
- pDocPageData = pPattern->m_pDocument->GetPageData();
- }
- pvalue->m_pCountedPattern = pDocPageData->FindPatternPtr(pPattern->m_pPatternObj);
- }
-}
-void CPDF_Color::Copy(const CPDF_Color* pSrc)
-{
- ReleaseBuffer();
- ReleaseColorSpace();
- m_pCS = pSrc->m_pCS;
- if (m_pCS && m_pCS->m_pDocument) {
- CPDF_Array* pArray = m_pCS->GetArray();
- if (pArray) {
- m_pCS = m_pCS->m_pDocument->GetPageData()->GetCopiedColorSpace(pArray);
- }
- }
- if (m_pCS == NULL) {
- return;
- }
- m_pBuffer = m_pCS->CreateBuf();
- FXSYS_memcpy(m_pBuffer, pSrc->m_pBuffer, m_pCS->GetBufSize());
- if (m_pCS->GetFamily() == PDFCS_PATTERN) {
- PatternValue* pvalue = (PatternValue*)m_pBuffer;
- if (pvalue->m_pPattern && pvalue->m_pPattern->m_pDocument) {
- pvalue->m_pPattern = pvalue->m_pPattern->m_pDocument->GetPageData()->GetPattern(pvalue->m_pPattern->m_pPatternObj, FALSE, &pvalue->m_pPattern->m_ParentMatrix);
- }
+ pvalue->m_pPattern =
+ pvalue->m_pPattern->m_pDocument->GetPageData()->GetPattern(
+ pvalue->m_pPattern->m_pPatternObj, FALSE,
+ &pvalue->m_pPattern->m_ParentMatrix);
}
+ }
}
-FX_BOOL CPDF_Color::GetRGB(int& R, int& G, int& B) const
-{
- if (m_pCS == NULL || m_pBuffer == NULL) {
- return FALSE;
- }
- FX_FLOAT r=0.0f, g=0.0f, b=0.0f;
- if (!m_pCS->GetRGB(m_pBuffer, r, g, b)) {
- return FALSE;
- }
- R = (int32_t)(r * 255 + 0.5f);
- G = (int32_t)(g * 255 + 0.5f);
- B = (int32_t)(b * 255 + 0.5f);
- return TRUE;
-}
-CPDF_Pattern* CPDF_Color::GetPattern() const
-{
- if (m_pBuffer == NULL || m_pCS->GetFamily() != PDFCS_PATTERN) {
- return NULL;
- }
- PatternValue* pvalue = (PatternValue*)m_pBuffer;
- return pvalue->m_pPattern;
+FX_BOOL CPDF_Color::GetRGB(int& R, int& G, int& B) const {
+ if (m_pCS == NULL || m_pBuffer == NULL) {
+ return FALSE;
+ }
+ FX_FLOAT r = 0.0f, g = 0.0f, b = 0.0f;
+ if (!m_pCS->GetRGB(m_pBuffer, r, g, b)) {
+ return FALSE;
+ }
+ R = (int32_t)(r * 255 + 0.5f);
+ G = (int32_t)(g * 255 + 0.5f);
+ B = (int32_t)(b * 255 + 0.5f);
+ return TRUE;
+}
+CPDF_Pattern* CPDF_Color::GetPattern() const {
+ if (m_pBuffer == NULL || m_pCS->GetFamily() != PDFCS_PATTERN) {
+ return NULL;
+ }
+ PatternValue* pvalue = (PatternValue*)m_pBuffer;
+ return pvalue->m_pPattern;
}
-CPDF_ColorSpace* CPDF_Color::GetPatternCS() const
-{
- if (m_pBuffer == NULL || m_pCS->GetFamily() != PDFCS_PATTERN) {
- return NULL;
- }
- return m_pCS->GetBaseCS();
+CPDF_ColorSpace* CPDF_Color::GetPatternCS() const {
+ if (m_pBuffer == NULL || m_pCS->GetFamily() != PDFCS_PATTERN) {
+ return NULL;
+ }
+ return m_pCS->GetBaseCS();
}
-FX_FLOAT* CPDF_Color::GetPatternColor() const
-{
- if (m_pBuffer == NULL || m_pCS->GetFamily() != PDFCS_PATTERN) {
- return NULL;
- }
- PatternValue* pvalue = (PatternValue*)m_pBuffer;
- return pvalue->m_nComps ? pvalue->m_Comps : NULL;
+FX_FLOAT* CPDF_Color::GetPatternColor() const {
+ if (m_pBuffer == NULL || m_pCS->GetFamily() != PDFCS_PATTERN) {
+ return NULL;
+ }
+ PatternValue* pvalue = (PatternValue*)m_pBuffer;
+ return pvalue->m_nComps ? pvalue->m_Comps : NULL;
}
-FX_BOOL CPDF_Color::IsEqual(const CPDF_Color& other) const
-{
- if (m_pCS != other.m_pCS || m_pCS == NULL) {
- return FALSE;
- }
- return FXSYS_memcmp(m_pBuffer, other.m_pBuffer, m_pCS->GetBufSize()) == 0;
+FX_BOOL CPDF_Color::IsEqual(const CPDF_Color& other) const {
+ if (m_pCS != other.m_pCS || m_pCS == NULL) {
+ return FALSE;
+ }
+ return FXSYS_memcmp(m_pBuffer, other.m_pBuffer, m_pCS->GetBufSize()) == 0;
}
diff --git a/core/src/fpdfapi/fpdf_page/fpdf_page_doc.cpp b/core/src/fpdfapi/fpdf_page/fpdf_page_doc.cpp
index 05233a12a4..74e33b56a9 100644
--- a/core/src/fpdfapi/fpdf_page/fpdf_page_doc.cpp
+++ b/core/src/fpdfapi/fpdf_page/fpdf_page_doc.cpp
@@ -10,628 +10,606 @@
#include "../fpdf_font/font_int.h"
#include "pageint.h"
-class CPDF_PageModule : public IPDF_PageModule
-{
-public:
- CPDF_PageModule()
- : m_StockGrayCS(nullptr, PDFCS_DEVICEGRAY),
- m_StockRGBCS(nullptr, PDFCS_DEVICERGB),
- m_StockCMYKCS(nullptr, PDFCS_DEVICECMYK),
- m_StockPatternCS(nullptr) {}
-
-private:
- ~CPDF_PageModule() override {}
-
- CPDF_DocPageData* CreateDocData(CPDF_Document* pDoc) override
- {
- return new CPDF_DocPageData(pDoc);
- }
-
- void ReleaseDoc(CPDF_Document* pDoc) override;
- void ClearDoc(CPDF_Document* pDoc) override;
-
- CPDF_FontGlobals* GetFontGlobals() override
- {
- return &m_FontGlobals;
- }
-
- void ClearStockFont(CPDF_Document* pDoc) override
- {
- m_FontGlobals.Clear(pDoc);
- }
-
- CPDF_ColorSpace* GetStockCS(int family) override;
- void NotifyCJKAvailable() override;
-
- CPDF_FontGlobals m_FontGlobals;
- CPDF_DeviceCS m_StockGrayCS;
- CPDF_DeviceCS m_StockRGBCS;
- CPDF_DeviceCS m_StockCMYKCS;
- CPDF_PatternCS m_StockPatternCS;
+class CPDF_PageModule : public IPDF_PageModule {
+ public:
+ CPDF_PageModule()
+ : m_StockGrayCS(nullptr, PDFCS_DEVICEGRAY),
+ m_StockRGBCS(nullptr, PDFCS_DEVICERGB),
+ m_StockCMYKCS(nullptr, PDFCS_DEVICECMYK),
+ m_StockPatternCS(nullptr) {}
+
+ private:
+ ~CPDF_PageModule() override {}
+
+ CPDF_DocPageData* CreateDocData(CPDF_Document* pDoc) override {
+ return new CPDF_DocPageData(pDoc);
+ }
+
+ void ReleaseDoc(CPDF_Document* pDoc) override;
+ void ClearDoc(CPDF_Document* pDoc) override;
+
+ CPDF_FontGlobals* GetFontGlobals() override { return &m_FontGlobals; }
+
+ void ClearStockFont(CPDF_Document* pDoc) override {
+ m_FontGlobals.Clear(pDoc);
+ }
+
+ CPDF_ColorSpace* GetStockCS(int family) override;
+ void NotifyCJKAvailable() override;
+
+ CPDF_FontGlobals m_FontGlobals;
+ CPDF_DeviceCS m_StockGrayCS;
+ CPDF_DeviceCS m_StockRGBCS;
+ CPDF_DeviceCS m_StockCMYKCS;
+ CPDF_PatternCS m_StockPatternCS;
};
-CPDF_ColorSpace* CPDF_PageModule::GetStockCS(int family)
-{
- if (family == PDFCS_DEVICEGRAY) {
- return &m_StockGrayCS;
- }
- if (family == PDFCS_DEVICERGB) {
- return &m_StockRGBCS;
- }
- if (family == PDFCS_DEVICECMYK) {
- return &m_StockCMYKCS;
- }
- if (family == PDFCS_PATTERN) {
- return &m_StockPatternCS;
- }
- return NULL;
+CPDF_ColorSpace* CPDF_PageModule::GetStockCS(int family) {
+ if (family == PDFCS_DEVICEGRAY) {
+ return &m_StockGrayCS;
+ }
+ if (family == PDFCS_DEVICERGB) {
+ return &m_StockRGBCS;
+ }
+ if (family == PDFCS_DEVICECMYK) {
+ return &m_StockCMYKCS;
+ }
+ if (family == PDFCS_PATTERN) {
+ return &m_StockPatternCS;
+ }
+ return NULL;
}
-void CPDF_ModuleMgr::InitPageModule()
-{
- m_pPageModule.reset(new CPDF_PageModule);
+void CPDF_ModuleMgr::InitPageModule() {
+ m_pPageModule.reset(new CPDF_PageModule);
}
-void CPDF_PageModule::ReleaseDoc(CPDF_Document* pDoc)
-{
- delete pDoc->GetPageData();
+void CPDF_PageModule::ReleaseDoc(CPDF_Document* pDoc) {
+ delete pDoc->GetPageData();
}
-void CPDF_PageModule::ClearDoc(CPDF_Document* pDoc)
-{
- pDoc->GetPageData()->Clear(FALSE);
+void CPDF_PageModule::ClearDoc(CPDF_Document* pDoc) {
+ pDoc->GetPageData()->Clear(FALSE);
}
-void CPDF_PageModule::NotifyCJKAvailable()
-{
- m_FontGlobals.m_CMapManager.ReloadAll();
+void CPDF_PageModule::NotifyCJKAvailable() {
+ m_FontGlobals.m_CMapManager.ReloadAll();
}
-CPDF_Font* CPDF_Document::LoadFont(CPDF_Dictionary* pFontDict)
-{
- ASSERT(pFontDict);
- return GetValidatePageData()->GetFont(pFontDict, FALSE);
+CPDF_Font* CPDF_Document::LoadFont(CPDF_Dictionary* pFontDict) {
+ ASSERT(pFontDict);
+ return GetValidatePageData()->GetFont(pFontDict, FALSE);
}
-CPDF_StreamAcc* CPDF_Document::LoadFontFile(CPDF_Stream* pStream)
-{
- return GetValidatePageData()->GetFontFileStreamAcc(pStream);
+CPDF_StreamAcc* CPDF_Document::LoadFontFile(CPDF_Stream* pStream) {
+ return GetValidatePageData()->GetFontFileStreamAcc(pStream);
}
CPDF_ColorSpace* _CSFromName(const CFX_ByteString& name);
-CPDF_ColorSpace* CPDF_Document::LoadColorSpace(CPDF_Object* pCSObj, CPDF_Dictionary* pResources)
-{
- return GetValidatePageData()->GetColorSpace(pCSObj, pResources);
+CPDF_ColorSpace* CPDF_Document::LoadColorSpace(CPDF_Object* pCSObj,
+ CPDF_Dictionary* pResources) {
+ return GetValidatePageData()->GetColorSpace(pCSObj, pResources);
}
-CPDF_Pattern* CPDF_Document::LoadPattern(CPDF_Object* pPatternObj, FX_BOOL bShading, const CFX_AffineMatrix* matrix)
-{
- return GetValidatePageData()->GetPattern(pPatternObj, bShading, matrix);
+CPDF_Pattern* CPDF_Document::LoadPattern(CPDF_Object* pPatternObj,
+ FX_BOOL bShading,
+ const CFX_AffineMatrix* matrix) {
+ return GetValidatePageData()->GetPattern(pPatternObj, bShading, matrix);
}
-CPDF_IccProfile* CPDF_Document::LoadIccProfile(CPDF_Stream* pStream)
-{
- return GetValidatePageData()->GetIccProfile(pStream);
+CPDF_IccProfile* CPDF_Document::LoadIccProfile(CPDF_Stream* pStream) {
+ return GetValidatePageData()->GetIccProfile(pStream);
}
-CPDF_Image* CPDF_Document::LoadImageF(CPDF_Object* pObj)
-{
- if (!pObj) {
- return NULL;
- }
- FXSYS_assert(pObj->GetObjNum());
- return GetValidatePageData()->GetImage(pObj);
+CPDF_Image* CPDF_Document::LoadImageF(CPDF_Object* pObj) {
+ if (!pObj) {
+ return NULL;
+ }
+ FXSYS_assert(pObj->GetObjNum());
+ return GetValidatePageData()->GetImage(pObj);
}
-void CPDF_Document::RemoveColorSpaceFromPageData(CPDF_Object* pCSObj)
-{
- if (!pCSObj) {
- return;
- }
- GetPageData()->ReleaseColorSpace(pCSObj);
+void CPDF_Document::RemoveColorSpaceFromPageData(CPDF_Object* pCSObj) {
+ if (!pCSObj) {
+ return;
+ }
+ GetPageData()->ReleaseColorSpace(pCSObj);
}
CPDF_DocPageData::CPDF_DocPageData(CPDF_Document* pPDFDoc)
- : m_pPDFDoc(pPDFDoc),
- m_bForceClear(FALSE)
-{
-}
+ : m_pPDFDoc(pPDFDoc), m_bForceClear(FALSE) {}
-CPDF_DocPageData::~CPDF_DocPageData()
-{
- Clear(FALSE);
- Clear(TRUE);
+CPDF_DocPageData::~CPDF_DocPageData() {
+ Clear(FALSE);
+ Clear(TRUE);
- for (auto& it : m_PatternMap)
- delete it.second;
- m_PatternMap.clear();
+ for (auto& it : m_PatternMap)
+ delete it.second;
+ m_PatternMap.clear();
- for (auto& it : m_FontMap)
- delete it.second;
- m_FontMap.clear();
+ for (auto& it : m_FontMap)
+ delete it.second;
+ m_FontMap.clear();
- for (auto& it : m_ColorSpaceMap)
- delete it.second;
- m_ColorSpaceMap.clear();
+ for (auto& it : m_ColorSpaceMap)
+ delete it.second;
+ m_ColorSpaceMap.clear();
}
-void CPDF_DocPageData::Clear(FX_BOOL bForceRelease)
-{
- m_bForceClear = bForceRelease;
-
- for (auto& it : m_PatternMap) {
- CPDF_CountedPattern* ptData = it.second;
- if (!ptData->get())
- continue;
-
- if (bForceRelease || ptData->use_count() < 2) {
- ptData->get()->SetForceClear(bForceRelease);
- ptData->clear();
- }
- }
-
- for (auto& it : m_FontMap) {
- CPDF_CountedFont* fontData = it.second;
- if (!fontData->get())
- continue;
-
- if (bForceRelease || fontData->use_count() < 2) {
- fontData->clear();
- }
- }
-
- for (auto& it : m_ColorSpaceMap) {
- CPDF_CountedColorSpace* csData = it.second;
- if (!csData->get())
- continue;
-
- if (bForceRelease || csData->use_count() < 2) {
- csData->get()->ReleaseCS();
- csData->reset(nullptr);
+void CPDF_DocPageData::Clear(FX_BOOL bForceRelease) {
+ m_bForceClear = bForceRelease;
+
+ for (auto& it : m_PatternMap) {
+ CPDF_CountedPattern* ptData = it.second;
+ if (!ptData->get())
+ continue;
+
+ if (bForceRelease || ptData->use_count() < 2) {
+ ptData->get()->SetForceClear(bForceRelease);
+ ptData->clear();
+ }
+ }
+
+ for (auto& it : m_FontMap) {
+ CPDF_CountedFont* fontData = it.second;
+ if (!fontData->get())
+ continue;
+
+ if (bForceRelease || fontData->use_count() < 2) {
+ fontData->clear();
+ }
+ }
+
+ for (auto& it : m_ColorSpaceMap) {
+ CPDF_CountedColorSpace* csData = it.second;
+ if (!csData->get())
+ continue;
+
+ if (bForceRelease || csData->use_count() < 2) {
+ csData->get()->ReleaseCS();
+ csData->reset(nullptr);
+ }
+ }
+
+ for (auto it = m_IccProfileMap.begin(); it != m_IccProfileMap.end();) {
+ auto curr_it = it++;
+ CPDF_CountedIccProfile* ipData = curr_it->second;
+ if (!ipData->get())
+ continue;
+
+ if (bForceRelease || ipData->use_count() < 2) {
+ CPDF_Stream* ipKey = curr_it->first;
+ FX_POSITION pos2 = m_HashProfileMap.GetStartPosition();
+ while (pos2) {
+ CFX_ByteString bsKey;
+ CPDF_Stream* pFindStream = nullptr;
+ m_HashProfileMap.GetNextAssoc(pos2, bsKey, (void*&)pFindStream);
+ if (ipKey == pFindStream) {
+ m_HashProfileMap.RemoveKey(bsKey);
+ break;
}
- }
-
- for (auto it = m_IccProfileMap.begin(); it != m_IccProfileMap.end();) {
- auto curr_it = it++;
- CPDF_CountedIccProfile* ipData = curr_it->second;
- if (!ipData->get())
- continue;
-
- if (bForceRelease || ipData->use_count() < 2) {
- CPDF_Stream* ipKey = curr_it->first;
- FX_POSITION pos2 = m_HashProfileMap.GetStartPosition();
- while (pos2) {
- CFX_ByteString bsKey;
- CPDF_Stream* pFindStream = nullptr;
- m_HashProfileMap.GetNextAssoc(pos2, bsKey, (void*&)pFindStream);
- if (ipKey == pFindStream) {
- m_HashProfileMap.RemoveKey(bsKey);
- break;
- }
- }
- delete ipData->get();
- delete ipData;
- m_IccProfileMap.erase(curr_it);
- }
- }
-
- for (auto it = m_FontFileMap.begin(); it != m_FontFileMap.end();) {
- auto curr_it = it++;
- CPDF_CountedStreamAcc* ftData = curr_it->second;
- if (!ftData->get())
- continue;
-
- if (bForceRelease || ftData->use_count() < 2) {
- delete ftData->get();
- delete ftData;
- m_FontFileMap.erase(curr_it);
- }
- }
-
- for (auto it = m_ImageMap.begin(); it != m_ImageMap.end();) {
- auto curr_it = it++;
- CPDF_CountedImage* imageData = curr_it->second;
- if (!imageData->get())
- continue;
-
- if (bForceRelease || imageData->use_count() < 2) {
- delete imageData->get();
- delete imageData;
- m_ImageMap.erase(curr_it);
- }
- }
+ }
+ delete ipData->get();
+ delete ipData;
+ m_IccProfileMap.erase(curr_it);
+ }
+ }
+
+ for (auto it = m_FontFileMap.begin(); it != m_FontFileMap.end();) {
+ auto curr_it = it++;
+ CPDF_CountedStreamAcc* ftData = curr_it->second;
+ if (!ftData->get())
+ continue;
+
+ if (bForceRelease || ftData->use_count() < 2) {
+ delete ftData->get();
+ delete ftData;
+ m_FontFileMap.erase(curr_it);
+ }
+ }
+
+ for (auto it = m_ImageMap.begin(); it != m_ImageMap.end();) {
+ auto curr_it = it++;
+ CPDF_CountedImage* imageData = curr_it->second;
+ if (!imageData->get())
+ continue;
+
+ if (bForceRelease || imageData->use_count() < 2) {
+ delete imageData->get();
+ delete imageData;
+ m_ImageMap.erase(curr_it);
+ }
+ }
}
-CPDF_Font* CPDF_DocPageData::GetFont(CPDF_Dictionary* pFontDict, FX_BOOL findOnly)
-{
- if (!pFontDict) {
- return NULL;
- }
- if (findOnly) {
- auto it = m_FontMap.find(pFontDict);
- if (it != m_FontMap.end() && it->second->get()) {
- return it->second->AddRef();
- }
- return nullptr;
- }
-
- CPDF_CountedFont* fontData = nullptr;
+CPDF_Font* CPDF_DocPageData::GetFont(CPDF_Dictionary* pFontDict,
+ FX_BOOL findOnly) {
+ if (!pFontDict) {
+ return NULL;
+ }
+ if (findOnly) {
auto it = m_FontMap.find(pFontDict);
- if (it != m_FontMap.end()) {
- fontData = it->second;
- if (fontData->get()) {
- return fontData->AddRef();
- }
+ if (it != m_FontMap.end() && it->second->get()) {
+ return it->second->AddRef();
}
+ return nullptr;
+ }
- CPDF_Font* pFont = CPDF_Font::CreateFontF(m_pPDFDoc, pFontDict);
- if (!pFont) {
- return nullptr;
- }
- if (!fontData) {
- fontData = new CPDF_CountedFont(pFont);
- m_FontMap[pFontDict] = fontData;
- } else {
- fontData->reset(pFont);
+ CPDF_CountedFont* fontData = nullptr;
+ auto it = m_FontMap.find(pFontDict);
+ if (it != m_FontMap.end()) {
+ fontData = it->second;
+ if (fontData->get()) {
+ return fontData->AddRef();
}
- return fontData->AddRef();
+ }
+
+ CPDF_Font* pFont = CPDF_Font::CreateFontF(m_pPDFDoc, pFontDict);
+ if (!pFont) {
+ return nullptr;
+ }
+ if (!fontData) {
+ fontData = new CPDF_CountedFont(pFont);
+ m_FontMap[pFontDict] = fontData;
+ } else {
+ fontData->reset(pFont);
+ }
+ return fontData->AddRef();
}
-CPDF_Font* CPDF_DocPageData::GetStandardFont(const CFX_ByteStringC& fontName, CPDF_FontEncoding* pEncoding)
-{
- if (fontName.IsEmpty())
- return nullptr;
-
- for (auto& it : m_FontMap) {
- CPDF_CountedFont* fontData = it.second;
- CPDF_Font* pFont = fontData->get();
- if (!pFont)
- continue;
- if (pFont->GetBaseFont() != fontName)
- continue;
- if (pFont->IsEmbedded())
- continue;
- if (pFont->GetFontType() != PDFFONT_TYPE1)
- continue;
- if (pFont->GetFontDict()->KeyExist(FX_BSTRC("Widths")))
- continue;
-
- CPDF_Type1Font* pT1Font = pFont->GetType1Font();
- if (pEncoding && !pT1Font->GetEncoding()->IsIdentical(pEncoding))
- continue;
-
- return fontData->AddRef();
- }
+CPDF_Font* CPDF_DocPageData::GetStandardFont(const CFX_ByteStringC& fontName,
+ CPDF_FontEncoding* pEncoding) {
+ if (fontName.IsEmpty())
+ return nullptr;
+
+ for (auto& it : m_FontMap) {
+ CPDF_CountedFont* fontData = it.second;
+ CPDF_Font* pFont = fontData->get();
+ if (!pFont)
+ continue;
+ if (pFont->GetBaseFont() != fontName)
+ continue;
+ if (pFont->IsEmbedded())
+ continue;
+ if (pFont->GetFontType() != PDFFONT_TYPE1)
+ continue;
+ if (pFont->GetFontDict()->KeyExist(FX_BSTRC("Widths")))
+ continue;
+
+ CPDF_Type1Font* pT1Font = pFont->GetType1Font();
+ if (pEncoding && !pT1Font->GetEncoding()->IsIdentical(pEncoding))
+ continue;
- CPDF_Dictionary* pDict = new CPDF_Dictionary;
- pDict->SetAtName(FX_BSTRC("Type"), FX_BSTRC("Font"));
- pDict->SetAtName(FX_BSTRC("Subtype"), FX_BSTRC("Type1"));
- pDict->SetAtName(FX_BSTRC("BaseFont"), fontName);
- if (pEncoding) {
- pDict->SetAt(FX_BSTRC("Encoding"), pEncoding->Realize());
- }
- m_pPDFDoc->AddIndirectObject(pDict);
- CPDF_Font* pFont = CPDF_Font::CreateFontF(m_pPDFDoc, pDict);
- if (!pFont) {
- return nullptr;
- }
- CPDF_CountedFont* fontData = new CPDF_CountedFont(pFont);
- m_FontMap[pDict] = fontData;
return fontData->AddRef();
+ }
+
+ CPDF_Dictionary* pDict = new CPDF_Dictionary;
+ pDict->SetAtName(FX_BSTRC("Type"), FX_BSTRC("Font"));
+ pDict->SetAtName(FX_BSTRC("Subtype"), FX_BSTRC("Type1"));
+ pDict->SetAtName(FX_BSTRC("BaseFont"), fontName);
+ if (pEncoding) {
+ pDict->SetAt(FX_BSTRC("Encoding"), pEncoding->Realize());
+ }
+ m_pPDFDoc->AddIndirectObject(pDict);
+ CPDF_Font* pFont = CPDF_Font::CreateFontF(m_pPDFDoc, pDict);
+ if (!pFont) {
+ return nullptr;
+ }
+ CPDF_CountedFont* fontData = new CPDF_CountedFont(pFont);
+ m_FontMap[pDict] = fontData;
+ return fontData->AddRef();
}
-void CPDF_DocPageData::ReleaseFont(CPDF_Dictionary* pFontDict)
-{
- if (!pFontDict)
- return;
+void CPDF_DocPageData::ReleaseFont(CPDF_Dictionary* pFontDict) {
+ if (!pFontDict)
+ return;
- auto it = m_FontMap.find(pFontDict);
- if (it == m_FontMap.end())
- return;
+ auto it = m_FontMap.find(pFontDict);
+ if (it == m_FontMap.end())
+ return;
- CPDF_CountedFont* fontData = it->second;
- if (fontData->get()) {
- fontData->RemoveRef();
- if (fontData->use_count() == 0) {
- fontData->clear();
- }
+ CPDF_CountedFont* fontData = it->second;
+ if (fontData->get()) {
+ fontData->RemoveRef();
+ if (fontData->use_count() == 0) {
+ fontData->clear();
}
+ }
}
-CPDF_ColorSpace* CPDF_DocPageData::GetColorSpace(CPDF_Object* pCSObj, CPDF_Dictionary* pResources)
-{
- if (!pCSObj) {
- return NULL;
- }
- if (pCSObj->GetType() == PDFOBJ_NAME) {
- CFX_ByteString name = pCSObj->GetConstString();
- CPDF_ColorSpace* pCS = _CSFromName(name);
- if (!pCS && pResources) {
- CPDF_Dictionary* pList = pResources->GetDict(FX_BSTRC("ColorSpace"));
- if (pList) {
- pCSObj = pList->GetElementValue(name);
- return GetColorSpace(pCSObj, NULL);
- }
- }
- if (pCS == NULL || pResources == NULL) {
- return pCS;
- }
- CPDF_Dictionary* pColorSpaces = pResources->GetDict(FX_BSTRC("ColorSpace"));
- if (pColorSpaces == NULL) {
- return pCS;
- }
- CPDF_Object* pDefaultCS = NULL;
- switch (pCS->GetFamily()) {
- case PDFCS_DEVICERGB:
- pDefaultCS = pColorSpaces->GetElementValue(FX_BSTRC("DefaultRGB"));
- break;
- case PDFCS_DEVICEGRAY:
- pDefaultCS = pColorSpaces->GetElementValue(FX_BSTRC("DefaultGray"));
- break;
- case PDFCS_DEVICECMYK:
- pDefaultCS = pColorSpaces->GetElementValue(FX_BSTRC("DefaultCMYK"));
- break;
- }
- if (pDefaultCS == NULL) {
- return pCS;
- }
- return GetColorSpace(pDefaultCS, NULL);
- }
+CPDF_ColorSpace* CPDF_DocPageData::GetColorSpace(CPDF_Object* pCSObj,
+ CPDF_Dictionary* pResources) {
+ if (!pCSObj) {
+ return NULL;
+ }
+ if (pCSObj->GetType() == PDFOBJ_NAME) {
+ CFX_ByteString name = pCSObj->GetConstString();
+ CPDF_ColorSpace* pCS = _CSFromName(name);
+ if (!pCS && pResources) {
+ CPDF_Dictionary* pList = pResources->GetDict(FX_BSTRC("ColorSpace"));
+ if (pList) {
+ pCSObj = pList->GetElementValue(name);
+ return GetColorSpace(pCSObj, NULL);
+ }
+ }
+ if (pCS == NULL || pResources == NULL) {
+ return pCS;
+ }
+ CPDF_Dictionary* pColorSpaces = pResources->GetDict(FX_BSTRC("ColorSpace"));
+ if (pColorSpaces == NULL) {
+ return pCS;
+ }
+ CPDF_Object* pDefaultCS = NULL;
+ switch (pCS->GetFamily()) {
+ case PDFCS_DEVICERGB:
+ pDefaultCS = pColorSpaces->GetElementValue(FX_BSTRC("DefaultRGB"));
+ break;
+ case PDFCS_DEVICEGRAY:
+ pDefaultCS = pColorSpaces->GetElementValue(FX_BSTRC("DefaultGray"));
+ break;
+ case PDFCS_DEVICECMYK:
+ pDefaultCS = pColorSpaces->GetElementValue(FX_BSTRC("DefaultCMYK"));
+ break;
+ }
+ if (pDefaultCS == NULL) {
+ return pCS;
+ }
+ return GetColorSpace(pDefaultCS, NULL);
+ }
+
+ if (pCSObj->GetType() != PDFOBJ_ARRAY)
+ return nullptr;
+ CPDF_Array* pArray = (CPDF_Array*)pCSObj;
+ if (pArray->GetCount() == 0)
+ return nullptr;
+ if (pArray->GetCount() == 1)
+ return GetColorSpace(pArray->GetElementValue(0), pResources);
- if (pCSObj->GetType() != PDFOBJ_ARRAY)
- return nullptr;
- CPDF_Array* pArray = (CPDF_Array*)pCSObj;
- if (pArray->GetCount() == 0)
- return nullptr;
- if (pArray->GetCount() == 1)
- return GetColorSpace(pArray->GetElementValue(0), pResources);
-
- CPDF_CountedColorSpace* csData = nullptr;
- auto it = m_ColorSpaceMap.find(pCSObj);
- if (it != m_ColorSpaceMap.end()) {
- csData = it->second;
- if (csData->get()) {
- return csData->AddRef();
- }
+ CPDF_CountedColorSpace* csData = nullptr;
+ auto it = m_ColorSpaceMap.find(pCSObj);
+ if (it != m_ColorSpaceMap.end()) {
+ csData = it->second;
+ if (csData->get()) {
+ return csData->AddRef();
}
+ }
- CPDF_ColorSpace* pCS = CPDF_ColorSpace::Load(m_pPDFDoc, pArray);
- if (!pCS)
- return nullptr;
+ CPDF_ColorSpace* pCS = CPDF_ColorSpace::Load(m_pPDFDoc, pArray);
+ if (!pCS)
+ return nullptr;
- if (!csData) {
- csData = new CPDF_CountedColorSpace(pCS);
- m_ColorSpaceMap[pCSObj] = csData;
- } else {
- csData->reset(pCS);
- }
- return csData->AddRef();
+ if (!csData) {
+ csData = new CPDF_CountedColorSpace(pCS);
+ m_ColorSpaceMap[pCSObj] = csData;
+ } else {
+ csData->reset(pCS);
+ }
+ return csData->AddRef();
}
-CPDF_ColorSpace* CPDF_DocPageData::GetCopiedColorSpace(CPDF_Object* pCSObj)
-{
- if (!pCSObj)
- return nullptr;
+CPDF_ColorSpace* CPDF_DocPageData::GetCopiedColorSpace(CPDF_Object* pCSObj) {
+ if (!pCSObj)
+ return nullptr;
- auto it = m_ColorSpaceMap.find(pCSObj);
- if (it != m_ColorSpaceMap.end())
- return it->second->AddRef();
+ auto it = m_ColorSpaceMap.find(pCSObj);
+ if (it != m_ColorSpaceMap.end())
+ return it->second->AddRef();
- return nullptr;
+ return nullptr;
}
-void CPDF_DocPageData::ReleaseColorSpace(CPDF_Object* pColorSpace)
-{
- if (!pColorSpace)
- return;
+void CPDF_DocPageData::ReleaseColorSpace(CPDF_Object* pColorSpace) {
+ if (!pColorSpace)
+ return;
- auto it = m_ColorSpaceMap.find(pColorSpace);
- if (it == m_ColorSpaceMap.end())
- return;
+ auto it = m_ColorSpaceMap.find(pColorSpace);
+ if (it == m_ColorSpaceMap.end())
+ return;
- CPDF_CountedColorSpace* csData = it->second;
- if (csData->get()) {
- csData->RemoveRef();
- if (csData->use_count() == 0) {
- csData->get()->ReleaseCS();
- csData->reset(nullptr);
- }
+ CPDF_CountedColorSpace* csData = it->second;
+ if (csData->get()) {
+ csData->RemoveRef();
+ if (csData->use_count() == 0) {
+ csData->get()->ReleaseCS();
+ csData->reset(nullptr);
}
+ }
}
-CPDF_Pattern* CPDF_DocPageData::GetPattern(CPDF_Object* pPatternObj, FX_BOOL bShading, const CFX_AffineMatrix* matrix)
-{
- if (!pPatternObj)
- return nullptr;
-
- CPDF_CountedPattern* ptData = nullptr;
- auto it = m_PatternMap.find(pPatternObj);
- if (it != m_PatternMap.end()) {
- ptData = it->second;
- if (ptData->get()) {
- return ptData->AddRef();
- }
- }
- CPDF_Pattern* pPattern = nullptr;
- if (bShading) {
- pPattern = new CPDF_ShadingPattern(m_pPDFDoc, pPatternObj, bShading, matrix);
- } else {
- CPDF_Dictionary* pDict = pPatternObj ? pPatternObj->GetDict() : nullptr;
- if (pDict) {
- int type = pDict->GetInteger(FX_BSTRC("PatternType"));
- if (type == 1) {
- pPattern = new CPDF_TilingPattern(m_pPDFDoc, pPatternObj, matrix);
- } else if (type == 2) {
- pPattern = new CPDF_ShadingPattern(m_pPDFDoc, pPatternObj, FALSE, matrix);
- }
- }
- }
- if (!pPattern)
- return nullptr;
-
- if (!ptData) {
- ptData = new CPDF_CountedPattern(pPattern);
- m_PatternMap[pPatternObj] = ptData;
- } else {
- ptData->reset(pPattern);
- }
- return ptData->AddRef();
+CPDF_Pattern* CPDF_DocPageData::GetPattern(CPDF_Object* pPatternObj,
+ FX_BOOL bShading,
+ const CFX_AffineMatrix* matrix) {
+ if (!pPatternObj)
+ return nullptr;
+
+ CPDF_CountedPattern* ptData = nullptr;
+ auto it = m_PatternMap.find(pPatternObj);
+ if (it != m_PatternMap.end()) {
+ ptData = it->second;
+ if (ptData->get()) {
+ return ptData->AddRef();
+ }
+ }
+ CPDF_Pattern* pPattern = nullptr;
+ if (bShading) {
+ pPattern =
+ new CPDF_ShadingPattern(m_pPDFDoc, pPatternObj, bShading, matrix);
+ } else {
+ CPDF_Dictionary* pDict = pPatternObj ? pPatternObj->GetDict() : nullptr;
+ if (pDict) {
+ int type = pDict->GetInteger(FX_BSTRC("PatternType"));
+ if (type == 1) {
+ pPattern = new CPDF_TilingPattern(m_pPDFDoc, pPatternObj, matrix);
+ } else if (type == 2) {
+ pPattern =
+ new CPDF_ShadingPattern(m_pPDFDoc, pPatternObj, FALSE, matrix);
+ }
+ }
+ }
+ if (!pPattern)
+ return nullptr;
+
+ if (!ptData) {
+ ptData = new CPDF_CountedPattern(pPattern);
+ m_PatternMap[pPatternObj] = ptData;
+ } else {
+ ptData->reset(pPattern);
+ }
+ return ptData->AddRef();
}
-void CPDF_DocPageData::ReleasePattern(CPDF_Object* pPatternObj)
-{
- if (!pPatternObj)
- return;
+void CPDF_DocPageData::ReleasePattern(CPDF_Object* pPatternObj) {
+ if (!pPatternObj)
+ return;
- auto it = m_PatternMap.find(pPatternObj);
- if (it == m_PatternMap.end())
- return;
+ auto it = m_PatternMap.find(pPatternObj);
+ if (it == m_PatternMap.end())
+ return;
- CPDF_CountedPattern* ptData = it->second;
- if (ptData->get()) {
- ptData->RemoveRef();
- if (ptData->use_count() == 0) {
- ptData->clear();
- }
+ CPDF_CountedPattern* ptData = it->second;
+ if (ptData->get()) {
+ ptData->RemoveRef();
+ if (ptData->use_count() == 0) {
+ ptData->clear();
}
+ }
}
-CPDF_Image* CPDF_DocPageData::GetImage(CPDF_Object* pImageStream)
-{
- if (!pImageStream)
- return nullptr;
+CPDF_Image* CPDF_DocPageData::GetImage(CPDF_Object* pImageStream) {
+ if (!pImageStream)
+ return nullptr;
- const FX_DWORD dwImageObjNum = pImageStream->GetObjNum();
- auto it = m_ImageMap.find(dwImageObjNum);
- if (it != m_ImageMap.end()) {
- return it->second->AddRef();
- }
+ const FX_DWORD dwImageObjNum = pImageStream->GetObjNum();
+ auto it = m_ImageMap.find(dwImageObjNum);
+ if (it != m_ImageMap.end()) {
+ return it->second->AddRef();
+ }
- CPDF_Image* pImage = new CPDF_Image(m_pPDFDoc);
- pImage->LoadImageF((CPDF_Stream*)pImageStream, FALSE);
+ CPDF_Image* pImage = new CPDF_Image(m_pPDFDoc);
+ pImage->LoadImageF((CPDF_Stream*)pImageStream, FALSE);
- CPDF_CountedImage* imageData = new CPDF_CountedImage(pImage);
- m_ImageMap[dwImageObjNum] = imageData;
- return imageData->AddRef();
+ CPDF_CountedImage* imageData = new CPDF_CountedImage(pImage);
+ m_ImageMap[dwImageObjNum] = imageData;
+ return imageData->AddRef();
}
-void CPDF_DocPageData::ReleaseImage(CPDF_Object* pImageStream)
-{
- if (!pImageStream || !pImageStream->GetObjNum())
- return;
+void CPDF_DocPageData::ReleaseImage(CPDF_Object* pImageStream) {
+ if (!pImageStream || !pImageStream->GetObjNum())
+ return;
- auto it = m_ImageMap.find(pImageStream->GetObjNum());
- if (it == m_ImageMap.end())
- return;
+ auto it = m_ImageMap.find(pImageStream->GetObjNum());
+ if (it == m_ImageMap.end())
+ return;
- CPDF_CountedImage* image = it->second;
- if (!image)
- return;
+ CPDF_CountedImage* image = it->second;
+ if (!image)
+ return;
- image->RemoveRef();
- if (image->use_count() == 0) {
- delete image->get();
- delete image;
- m_ImageMap.erase(it);
- }
+ image->RemoveRef();
+ if (image->use_count() == 0) {
+ delete image->get();
+ delete image;
+ m_ImageMap.erase(it);
+ }
}
-CPDF_IccProfile* CPDF_DocPageData::GetIccProfile(CPDF_Stream* pIccProfileStream)
-{
- if (!pIccProfileStream)
- return NULL;
-
- auto it = m_IccProfileMap.find(pIccProfileStream);
- if (it != m_IccProfileMap.end()) {
- return it->second->AddRef();
- }
+CPDF_IccProfile* CPDF_DocPageData::GetIccProfile(
+ CPDF_Stream* pIccProfileStream) {
+ if (!pIccProfileStream)
+ return NULL;
- CPDF_StreamAcc stream;
- stream.LoadAllData(pIccProfileStream, FALSE);
- uint8_t digest[20];
- CPDF_Stream* pCopiedStream = nullptr;
- CRYPT_SHA1Generate(stream.GetData(), stream.GetSize(), digest);
- if (m_HashProfileMap.Lookup(CFX_ByteStringC(digest, 20), (void*&)pCopiedStream)) {
- auto it_copied_stream = m_IccProfileMap.find(pCopiedStream);
- return it_copied_stream->second->AddRef();
- }
- CPDF_IccProfile* pProfile = new CPDF_IccProfile(stream.GetData(), stream.GetSize());
- CPDF_CountedIccProfile* ipData = new CPDF_CountedIccProfile(pProfile);
- m_IccProfileMap[pIccProfileStream] = ipData;
- m_HashProfileMap.SetAt(CFX_ByteStringC(digest, 20), pIccProfileStream);
- return ipData->AddRef();
+ auto it = m_IccProfileMap.find(pIccProfileStream);
+ if (it != m_IccProfileMap.end()) {
+ return it->second->AddRef();
+ }
+
+ CPDF_StreamAcc stream;
+ stream.LoadAllData(pIccProfileStream, FALSE);
+ uint8_t digest[20];
+ CPDF_Stream* pCopiedStream = nullptr;
+ CRYPT_SHA1Generate(stream.GetData(), stream.GetSize(), digest);
+ if (m_HashProfileMap.Lookup(CFX_ByteStringC(digest, 20),
+ (void*&)pCopiedStream)) {
+ auto it_copied_stream = m_IccProfileMap.find(pCopiedStream);
+ return it_copied_stream->second->AddRef();
+ }
+ CPDF_IccProfile* pProfile =
+ new CPDF_IccProfile(stream.GetData(), stream.GetSize());
+ CPDF_CountedIccProfile* ipData = new CPDF_CountedIccProfile(pProfile);
+ m_IccProfileMap[pIccProfileStream] = ipData;
+ m_HashProfileMap.SetAt(CFX_ByteStringC(digest, 20), pIccProfileStream);
+ return ipData->AddRef();
}
-void CPDF_DocPageData::ReleaseIccProfile(CPDF_IccProfile* pIccProfile)
-{
- ASSERT(pIccProfile);
-
- for (auto it = m_IccProfileMap.begin(); it != m_IccProfileMap.end(); ++it) {
- CPDF_CountedIccProfile* profile = it->second;
- if (profile->get() != pIccProfile)
- continue;
-
- profile->RemoveRef();
- if (profile->use_count() == 0) {
- delete profile->get();
- delete profile;
- m_IccProfileMap.erase(it);
- return;
- }
+void CPDF_DocPageData::ReleaseIccProfile(CPDF_IccProfile* pIccProfile) {
+ ASSERT(pIccProfile);
+
+ for (auto it = m_IccProfileMap.begin(); it != m_IccProfileMap.end(); ++it) {
+ CPDF_CountedIccProfile* profile = it->second;
+ if (profile->get() != pIccProfile)
+ continue;
+
+ profile->RemoveRef();
+ if (profile->use_count() == 0) {
+ delete profile->get();
+ delete profile;
+ m_IccProfileMap.erase(it);
+ return;
}
+ }
}
-CPDF_StreamAcc* CPDF_DocPageData::GetFontFileStreamAcc(CPDF_Stream* pFontStream)
-{
- ASSERT(pFontStream);
+CPDF_StreamAcc* CPDF_DocPageData::GetFontFileStreamAcc(
+ CPDF_Stream* pFontStream) {
+ ASSERT(pFontStream);
- auto it = m_FontFileMap.find(pFontStream);
- if (it != m_FontFileMap.end())
- return it->second->AddRef();
+ auto it = m_FontFileMap.find(pFontStream);
+ if (it != m_FontFileMap.end())
+ return it->second->AddRef();
- CPDF_Dictionary* pFontDict = pFontStream->GetDict();
- int32_t org_size = pFontDict->GetInteger(FX_BSTRC("Length1")) +
- pFontDict->GetInteger(FX_BSTRC("Length2")) +
- pFontDict->GetInteger(FX_BSTRC("Length3"));
- if (org_size < 0)
- org_size = 0;
+ CPDF_Dictionary* pFontDict = pFontStream->GetDict();
+ int32_t org_size = pFontDict->GetInteger(FX_BSTRC("Length1")) +
+ pFontDict->GetInteger(FX_BSTRC("Length2")) +
+ pFontDict->GetInteger(FX_BSTRC("Length3"));
+ if (org_size < 0)
+ org_size = 0;
- CPDF_StreamAcc* pFontFile = new CPDF_StreamAcc;
- pFontFile->LoadAllData(pFontStream, FALSE, org_size);
+ CPDF_StreamAcc* pFontFile = new CPDF_StreamAcc;
+ pFontFile->LoadAllData(pFontStream, FALSE, org_size);
- CPDF_CountedStreamAcc* ftData = new CPDF_CountedStreamAcc(pFontFile);
- m_FontFileMap[pFontStream] = ftData;
- return ftData->AddRef();
+ CPDF_CountedStreamAcc* ftData = new CPDF_CountedStreamAcc(pFontFile);
+ m_FontFileMap[pFontStream] = ftData;
+ return ftData->AddRef();
}
-void CPDF_DocPageData::ReleaseFontFileStreamAcc(CPDF_Stream* pFontStream, FX_BOOL bForce)
-{
- if (!pFontStream)
- return;
-
- auto it = m_FontFileMap.find(pFontStream);
- if (it == m_FontFileMap.end())
- return;
-
- CPDF_CountedStreamAcc* findData = it->second;
- if (!findData)
- return;
-
- findData->RemoveRef();
- if (findData->use_count() == 0 || bForce) {
- delete findData->get();
- delete findData;
- m_FontFileMap.erase(it);
- }
+void CPDF_DocPageData::ReleaseFontFileStreamAcc(CPDF_Stream* pFontStream,
+ FX_BOOL bForce) {
+ if (!pFontStream)
+ return;
+
+ auto it = m_FontFileMap.find(pFontStream);
+ if (it == m_FontFileMap.end())
+ return;
+
+ CPDF_CountedStreamAcc* findData = it->second;
+ if (!findData)
+ return;
+
+ findData->RemoveRef();
+ if (findData->use_count() == 0 || bForce) {
+ delete findData->get();
+ delete findData;
+ m_FontFileMap.erase(it);
+ }
}
-CPDF_CountedColorSpace* CPDF_DocPageData::FindColorSpacePtr(CPDF_Object* pCSObj) const
-{
- if (!pCSObj)
- return nullptr;
+CPDF_CountedColorSpace* CPDF_DocPageData::FindColorSpacePtr(
+ CPDF_Object* pCSObj) const {
+ if (!pCSObj)
+ return nullptr;
- auto it = m_ColorSpaceMap.find(pCSObj);
- return it != m_ColorSpaceMap.end() ? it->second : nullptr;
+ auto it = m_ColorSpaceMap.find(pCSObj);
+ return it != m_ColorSpaceMap.end() ? it->second : nullptr;
}
-CPDF_CountedPattern* CPDF_DocPageData::FindPatternPtr(CPDF_Object* pPatternObj) const
-{
- if (!pPatternObj)
- return nullptr;
+CPDF_CountedPattern* CPDF_DocPageData::FindPatternPtr(
+ CPDF_Object* pPatternObj) const {
+ if (!pPatternObj)
+ return nullptr;
- auto it = m_PatternMap.find(pPatternObj);
- return it != m_PatternMap.end() ? it->second : nullptr;
+ auto it = m_PatternMap.find(pPatternObj);
+ return it != m_PatternMap.end() ? it->second : nullptr;
}
diff --git a/core/src/fpdfapi/fpdf_page/fpdf_page_func.cpp b/core/src/fpdfapi/fpdf_page/fpdf_page_func.cpp
index c961f8b20f..87ff0a3b63 100644
--- a/core/src/fpdfapi/fpdf_page/fpdf_page_func.cpp
+++ b/core/src/fpdfapi/fpdf_page/fpdf_page_func.cpp
@@ -13,893 +13,907 @@
#include "pageint.h"
class CPDF_PSEngine;
-typedef enum {PSOP_ADD, PSOP_SUB, PSOP_MUL, PSOP_DIV, PSOP_IDIV, PSOP_MOD,
- PSOP_NEG, PSOP_ABS, PSOP_CEILING, PSOP_FLOOR, PSOP_ROUND, PSOP_TRUNCATE,
- PSOP_SQRT, PSOP_SIN, PSOP_COS, PSOP_ATAN, PSOP_EXP, PSOP_LN, PSOP_LOG,
- PSOP_CVI, PSOP_CVR, PSOP_EQ, PSOP_NE, PSOP_GT, PSOP_GE, PSOP_LT, PSOP_LE,
- PSOP_AND, PSOP_OR, PSOP_XOR, PSOP_NOT, PSOP_BITSHIFT, PSOP_TRUE, PSOP_FALSE,
- PSOP_IF, PSOP_IFELSE, PSOP_POP, PSOP_EXCH, PSOP_DUP, PSOP_COPY,
- PSOP_INDEX, PSOP_ROLL, PSOP_PROC, PSOP_CONST
- } PDF_PSOP;
-class CPDF_PSProc
-{
-public:
- ~CPDF_PSProc();
- FX_BOOL Parse(CPDF_SimpleParser& parser);
- FX_BOOL Execute(CPDF_PSEngine* pEngine);
- CFX_PtrArray m_Operators;
+typedef enum {
+ PSOP_ADD,
+ PSOP_SUB,
+ PSOP_MUL,
+ PSOP_DIV,
+ PSOP_IDIV,
+ PSOP_MOD,
+ PSOP_NEG,
+ PSOP_ABS,
+ PSOP_CEILING,
+ PSOP_FLOOR,
+ PSOP_ROUND,
+ PSOP_TRUNCATE,
+ PSOP_SQRT,
+ PSOP_SIN,
+ PSOP_COS,
+ PSOP_ATAN,
+ PSOP_EXP,
+ PSOP_LN,
+ PSOP_LOG,
+ PSOP_CVI,
+ PSOP_CVR,
+ PSOP_EQ,
+ PSOP_NE,
+ PSOP_GT,
+ PSOP_GE,
+ PSOP_LT,
+ PSOP_LE,
+ PSOP_AND,
+ PSOP_OR,
+ PSOP_XOR,
+ PSOP_NOT,
+ PSOP_BITSHIFT,
+ PSOP_TRUE,
+ PSOP_FALSE,
+ PSOP_IF,
+ PSOP_IFELSE,
+ PSOP_POP,
+ PSOP_EXCH,
+ PSOP_DUP,
+ PSOP_COPY,
+ PSOP_INDEX,
+ PSOP_ROLL,
+ PSOP_PROC,
+ PSOP_CONST
+} PDF_PSOP;
+class CPDF_PSProc {
+ public:
+ ~CPDF_PSProc();
+ FX_BOOL Parse(CPDF_SimpleParser& parser);
+ FX_BOOL Execute(CPDF_PSEngine* pEngine);
+ CFX_PtrArray m_Operators;
};
#define PSENGINE_STACKSIZE 100
-class CPDF_PSEngine
-{
-public:
- CPDF_PSEngine();
- ~CPDF_PSEngine();
- FX_BOOL Parse(const FX_CHAR* string, int size);
- FX_BOOL Execute()
- {
- return m_MainProc.Execute(this);
- }
- FX_BOOL DoOperator(PDF_PSOP op);
- void Reset()
- {
- m_StackCount = 0;
- }
- void Push(FX_FLOAT value);
- void Push(int value)
- {
- Push((FX_FLOAT)value);
- }
- FX_FLOAT Pop();
- int GetStackSize()
- {
- return m_StackCount;
- }
-private:
- FX_FLOAT m_Stack[PSENGINE_STACKSIZE];
- int m_StackCount;
- CPDF_PSProc m_MainProc;
+class CPDF_PSEngine {
+ public:
+ CPDF_PSEngine();
+ ~CPDF_PSEngine();
+ FX_BOOL Parse(const FX_CHAR* string, int size);
+ FX_BOOL Execute() { return m_MainProc.Execute(this); }
+ FX_BOOL DoOperator(PDF_PSOP op);
+ void Reset() { m_StackCount = 0; }
+ void Push(FX_FLOAT value);
+ void Push(int value) { Push((FX_FLOAT)value); }
+ FX_FLOAT Pop();
+ int GetStackSize() { return m_StackCount; }
+
+ private:
+ FX_FLOAT m_Stack[PSENGINE_STACKSIZE];
+ int m_StackCount;
+ CPDF_PSProc m_MainProc;
};
-CPDF_PSProc::~CPDF_PSProc()
-{
- int size = m_Operators.GetSize();
- for (int i = 0; i < size; i ++) {
- if (m_Operators[i] == (void*)PSOP_PROC) {
- delete (CPDF_PSProc*)m_Operators[i + 1];
- i ++;
- } else if (m_Operators[i] == (void*)PSOP_CONST) {
- FX_Free((FX_FLOAT*)m_Operators[i + 1]);
- i ++;
- }
- }
+CPDF_PSProc::~CPDF_PSProc() {
+ int size = m_Operators.GetSize();
+ for (int i = 0; i < size; i++) {
+ if (m_Operators[i] == (void*)PSOP_PROC) {
+ delete (CPDF_PSProc*)m_Operators[i + 1];
+ i++;
+ } else if (m_Operators[i] == (void*)PSOP_CONST) {
+ FX_Free((FX_FLOAT*)m_Operators[i + 1]);
+ i++;
+ }
+ }
}
-FX_BOOL CPDF_PSProc::Execute(CPDF_PSEngine* pEngine)
-{
- int size = m_Operators.GetSize();
- for (int i = 0; i < size; i ++) {
- PDF_PSOP op = (PDF_PSOP)(uintptr_t)m_Operators[i];
- if (op == PSOP_PROC) {
- i ++;
- } else if (op == PSOP_CONST) {
- pEngine->Push(*(FX_FLOAT*)m_Operators[i + 1]);
- i ++;
- } else if (op == PSOP_IF) {
- if (i < 2 || m_Operators[i - 2] != (void*)PSOP_PROC) {
- return FALSE;
- }
- if ((int)pEngine->Pop()) {
- ((CPDF_PSProc*)m_Operators[i - 1])->Execute(pEngine);
- }
- } else if (op == PSOP_IFELSE) {
- if (i < 4 || m_Operators[i - 2] != (void*)PSOP_PROC ||
- m_Operators[i - 4] != (void*)PSOP_PROC) {
- return FALSE;
- }
- if ((int)pEngine->Pop()) {
- ((CPDF_PSProc*)m_Operators[i - 3])->Execute(pEngine);
- } else {
- ((CPDF_PSProc*)m_Operators[i - 1])->Execute(pEngine);
- }
- } else {
- pEngine->DoOperator(op);
- }
+FX_BOOL CPDF_PSProc::Execute(CPDF_PSEngine* pEngine) {
+ int size = m_Operators.GetSize();
+ for (int i = 0; i < size; i++) {
+ PDF_PSOP op = (PDF_PSOP)(uintptr_t)m_Operators[i];
+ if (op == PSOP_PROC) {
+ i++;
+ } else if (op == PSOP_CONST) {
+ pEngine->Push(*(FX_FLOAT*)m_Operators[i + 1]);
+ i++;
+ } else if (op == PSOP_IF) {
+ if (i < 2 || m_Operators[i - 2] != (void*)PSOP_PROC) {
+ return FALSE;
+ }
+ if ((int)pEngine->Pop()) {
+ ((CPDF_PSProc*)m_Operators[i - 1])->Execute(pEngine);
+ }
+ } else if (op == PSOP_IFELSE) {
+ if (i < 4 || m_Operators[i - 2] != (void*)PSOP_PROC ||
+ m_Operators[i - 4] != (void*)PSOP_PROC) {
+ return FALSE;
+ }
+ if ((int)pEngine->Pop()) {
+ ((CPDF_PSProc*)m_Operators[i - 3])->Execute(pEngine);
+ } else {
+ ((CPDF_PSProc*)m_Operators[i - 1])->Execute(pEngine);
+ }
+ } else {
+ pEngine->DoOperator(op);
}
- return TRUE;
-}
-CPDF_PSEngine::CPDF_PSEngine()
-{
- m_StackCount = 0;
+ }
+ return TRUE;
}
-CPDF_PSEngine::~CPDF_PSEngine()
-{
+CPDF_PSEngine::CPDF_PSEngine() {
+ m_StackCount = 0;
}
-void CPDF_PSEngine::Push(FX_FLOAT v)
-{
- if (m_StackCount == 100) {
- return;
- }
- m_Stack[m_StackCount++] = v;
+CPDF_PSEngine::~CPDF_PSEngine() {}
+void CPDF_PSEngine::Push(FX_FLOAT v) {
+ if (m_StackCount == 100) {
+ return;
+ }
+ m_Stack[m_StackCount++] = v;
}
-FX_FLOAT CPDF_PSEngine::Pop()
-{
- if (m_StackCount == 0) {
- return 0;
- }
- return m_Stack[--m_StackCount];
+FX_FLOAT CPDF_PSEngine::Pop() {
+ if (m_StackCount == 0) {
+ return 0;
+ }
+ return m_Stack[--m_StackCount];
}
const struct _PDF_PSOpName {
- const FX_CHAR* name;
- PDF_PSOP op;
-} _PDF_PSOpNames[] = {
- {"add", PSOP_ADD}, {"sub", PSOP_SUB}, {"mul", PSOP_MUL}, {"div", PSOP_DIV},
- {"idiv", PSOP_IDIV}, {"mod", PSOP_MOD}, {"neg", PSOP_NEG}, {"abs", PSOP_ABS},
- {"ceiling", PSOP_CEILING}, {"floor", PSOP_FLOOR}, {"round", PSOP_ROUND},
- {"truncate", PSOP_TRUNCATE}, {"sqrt", PSOP_SQRT}, {"sin", PSOP_SIN},
- {"cos", PSOP_COS}, {"atan", PSOP_ATAN}, {"exp", PSOP_EXP}, {"ln", PSOP_LN},
- {"log", PSOP_LOG}, {"cvi", PSOP_CVI}, {"cvr", PSOP_CVR}, {"eq", PSOP_EQ},
- {"ne", PSOP_NE}, {"gt", PSOP_GT}, {"ge", PSOP_GE}, {"lt", PSOP_LT},
- {"le", PSOP_LE}, {"and", PSOP_AND}, {"or", PSOP_OR}, {"xor", PSOP_XOR},
- {"not", PSOP_NOT}, {"bitshift", PSOP_BITSHIFT}, {"true", PSOP_TRUE},
- {"false", PSOP_FALSE}, {"if", PSOP_IF}, {"ifelse", PSOP_IFELSE},
- {"pop", PSOP_POP}, {"exch", PSOP_EXCH}, {"dup", PSOP_DUP},
- {"copy", PSOP_COPY}, {"index", PSOP_INDEX}, {"roll", PSOP_ROLL},
- {NULL, PSOP_PROC}
-};
-FX_BOOL CPDF_PSEngine::Parse(const FX_CHAR* string, int size)
-{
- CPDF_SimpleParser parser((uint8_t*)string, size);
+ const FX_CHAR* name;
+ PDF_PSOP op;
+} _PDF_PSOpNames[] = {{"add", PSOP_ADD}, {"sub", PSOP_SUB},
+ {"mul", PSOP_MUL}, {"div", PSOP_DIV},
+ {"idiv", PSOP_IDIV}, {"mod", PSOP_MOD},
+ {"neg", PSOP_NEG}, {"abs", PSOP_ABS},
+ {"ceiling", PSOP_CEILING}, {"floor", PSOP_FLOOR},
+ {"round", PSOP_ROUND}, {"truncate", PSOP_TRUNCATE},
+ {"sqrt", PSOP_SQRT}, {"sin", PSOP_SIN},
+ {"cos", PSOP_COS}, {"atan", PSOP_ATAN},
+ {"exp", PSOP_EXP}, {"ln", PSOP_LN},
+ {"log", PSOP_LOG}, {"cvi", PSOP_CVI},
+ {"cvr", PSOP_CVR}, {"eq", PSOP_EQ},
+ {"ne", PSOP_NE}, {"gt", PSOP_GT},
+ {"ge", PSOP_GE}, {"lt", PSOP_LT},
+ {"le", PSOP_LE}, {"and", PSOP_AND},
+ {"or", PSOP_OR}, {"xor", PSOP_XOR},
+ {"not", PSOP_NOT}, {"bitshift", PSOP_BITSHIFT},
+ {"true", PSOP_TRUE}, {"false", PSOP_FALSE},
+ {"if", PSOP_IF}, {"ifelse", PSOP_IFELSE},
+ {"pop", PSOP_POP}, {"exch", PSOP_EXCH},
+ {"dup", PSOP_DUP}, {"copy", PSOP_COPY},
+ {"index", PSOP_INDEX}, {"roll", PSOP_ROLL},
+ {NULL, PSOP_PROC}};
+FX_BOOL CPDF_PSEngine::Parse(const FX_CHAR* string, int size) {
+ CPDF_SimpleParser parser((uint8_t*)string, size);
+ CFX_ByteStringC word = parser.GetWord();
+ if (word != FX_BSTRC("{")) {
+ return FALSE;
+ }
+ return m_MainProc.Parse(parser);
+}
+FX_BOOL CPDF_PSProc::Parse(CPDF_SimpleParser& parser) {
+ while (1) {
CFX_ByteStringC word = parser.GetWord();
- if (word != FX_BSTRC("{")) {
- return FALSE;
+ if (word.IsEmpty()) {
+ return FALSE;
}
- return m_MainProc.Parse(parser);
-}
-FX_BOOL CPDF_PSProc::Parse(CPDF_SimpleParser& parser)
-{
- while (1) {
- CFX_ByteStringC word = parser.GetWord();
- if (word.IsEmpty()) {
- return FALSE;
- }
- if (word == FX_BSTRC("}")) {
- return TRUE;
- }
- if (word == FX_BSTRC("{")) {
- CPDF_PSProc* pProc = new CPDF_PSProc;
- m_Operators.Add((void*)PSOP_PROC);
- m_Operators.Add(pProc);
- if (!pProc->Parse(parser)) {
- return FALSE;
- }
- } else {
- int i = 0;
- while (_PDF_PSOpNames[i].name) {
- if (word == CFX_ByteStringC(_PDF_PSOpNames[i].name)) {
- m_Operators.Add((void*)_PDF_PSOpNames[i].op);
- break;
- }
- i ++;
- }
- if (_PDF_PSOpNames[i].name == NULL) {
- FX_FLOAT* pd = FX_Alloc(FX_FLOAT, 1);
- *pd = FX_atof(word);
- m_Operators.Add((void*)PSOP_CONST);
- m_Operators.Add(pd);
- }
- }
+ if (word == FX_BSTRC("}")) {
+ return TRUE;
}
+ if (word == FX_BSTRC("{")) {
+ CPDF_PSProc* pProc = new CPDF_PSProc;
+ m_Operators.Add((void*)PSOP_PROC);
+ m_Operators.Add(pProc);
+ if (!pProc->Parse(parser)) {
+ return FALSE;
+ }
+ } else {
+ int i = 0;
+ while (_PDF_PSOpNames[i].name) {
+ if (word == CFX_ByteStringC(_PDF_PSOpNames[i].name)) {
+ m_Operators.Add((void*)_PDF_PSOpNames[i].op);
+ break;
+ }
+ i++;
+ }
+ if (_PDF_PSOpNames[i].name == NULL) {
+ FX_FLOAT* pd = FX_Alloc(FX_FLOAT, 1);
+ *pd = FX_atof(word);
+ m_Operators.Add((void*)PSOP_CONST);
+ m_Operators.Add(pd);
+ }
+ }
+ }
}
#define PI 3.1415926535897932384626433832795f
-FX_BOOL CPDF_PSEngine::DoOperator(PDF_PSOP op)
-{
- int i1, i2;
- FX_FLOAT d1, d2;
- switch (op) {
- case PSOP_ADD:
- d1 = Pop();
- d2 = Pop();
- Push(d1 + d2);
- break;
- case PSOP_SUB:
- d2 = Pop();
- d1 = Pop();
- Push(d1 - d2);
- break;
- case PSOP_MUL:
- d1 = Pop();
- d2 = Pop();
- Push(d1 * d2);
- break;
- case PSOP_DIV:
- d2 = Pop();
- d1 = Pop();
- Push(d1 / d2);
- break;
- case PSOP_IDIV:
- i2 = (int)Pop();
- i1 = (int)Pop();
- Push(i1 / i2);
- break;
- case PSOP_MOD:
- i2 = (int)Pop();
- i1 = (int)Pop();
- Push(i1 % i2);
- break;
- case PSOP_NEG:
- d1 = Pop();
- Push(-d1);
- break;
- case PSOP_ABS:
- d1 = Pop();
- Push((FX_FLOAT)FXSYS_fabs(d1));
- break;
- case PSOP_CEILING:
- d1 = Pop();
- Push((FX_FLOAT)FXSYS_ceil(d1));
- break;
- case PSOP_FLOOR:
- d1 = Pop();
- Push((FX_FLOAT)FXSYS_floor(d1));
- break;
- case PSOP_ROUND:
- d1 = Pop();
- Push(FXSYS_round(d1));
- break;
- case PSOP_TRUNCATE:
- i1 = (int)Pop();
- Push(i1);
- break;
- case PSOP_SQRT:
- d1 = Pop();
- Push((FX_FLOAT)FXSYS_sqrt(d1));
- break;
- case PSOP_SIN:
- d1 = Pop();
- Push((FX_FLOAT)FXSYS_sin(d1 * PI / 180.0f));
- break;
- case PSOP_COS:
- d1 = Pop();
- Push((FX_FLOAT)FXSYS_cos(d1 * PI / 180.0f));
- break;
- case PSOP_ATAN:
- d2 = Pop();
- d1 = Pop();
- d1 = (FX_FLOAT)(FXSYS_atan2(d1, d2) * 180.0 / PI);
- if (d1 < 0) {
- d1 += 360;
- }
- Push(d1);
- break;
- case PSOP_EXP:
- d2 = Pop();
- d1 = Pop();
- Push((FX_FLOAT)FXSYS_pow(d1, d2));
- break;
- case PSOP_LN:
- d1 = Pop();
- Push((FX_FLOAT)FXSYS_log(d1));
- break;
- case PSOP_LOG:
- d1 = Pop();
- Push((FX_FLOAT)FXSYS_log10(d1));
- break;
- case PSOP_CVI:
- i1 = (int)Pop();
- Push(i1);
- break;
- case PSOP_CVR:
- break;
- case PSOP_EQ:
- d2 = Pop();
- d1 = Pop();
- Push((int)(d1 == d2));
- break;
- case PSOP_NE:
- d2 = Pop();
- d1 = Pop();
- Push((int)(d1 != d2));
- break;
- case PSOP_GT:
- d2 = Pop();
- d1 = Pop();
- Push((int)(d1 > d2));
- break;
- case PSOP_GE:
- d2 = Pop();
- d1 = Pop();
- Push((int)(d1 >= d2));
- break;
- case PSOP_LT:
- d2 = Pop();
- d1 = Pop();
- Push((int)(d1 < d2));
- break;
- case PSOP_LE:
- d2 = Pop();
- d1 = Pop();
- Push((int)(d1 <= d2));
- break;
- case PSOP_AND:
- i1 = (int)Pop();
- i2 = (int)Pop();
- Push(i1 & i2);
- break;
- case PSOP_OR:
- i1 = (int)Pop();
- i2 = (int)Pop();
- Push(i1 | i2);
- break;
- case PSOP_XOR:
- i1 = (int)Pop();
- i2 = (int)Pop();
- Push(i1 ^ i2);
- break;
- case PSOP_NOT:
- i1 = (int)Pop();
- Push((int)!i1);
- break;
- case PSOP_BITSHIFT: {
- int shift = (int)Pop();
- int i = (int)Pop();
- if (shift > 0) {
- Push(i << shift);
- } else {
- Push(i >> -shift);
- }
- break;
- }
- case PSOP_TRUE:
- Push(1);
- break;
- case PSOP_FALSE:
- Push(0);
- break;
- case PSOP_POP:
- Pop();
- break;
- case PSOP_EXCH:
- d2 = Pop();
- d1 = Pop();
- Push(d2);
- Push(d1);
- break;
- case PSOP_DUP:
- d1 = Pop();
- Push(d1);
- Push(d1);
- break;
- case PSOP_COPY: {
- int n = (int)Pop();
- if (n < 0 || n > PSENGINE_STACKSIZE || m_StackCount + n > PSENGINE_STACKSIZE || n > m_StackCount) {
- break;
- }
- for (int i = 0; i < n; i ++) {
- m_Stack[m_StackCount + i] = m_Stack[m_StackCount + i - n];
- }
- m_StackCount += n;
- break;
- }
- case PSOP_INDEX: {
- int n = (int)Pop();
- if (n < 0 || n >= m_StackCount) {
- break;
- }
- Push(m_Stack[m_StackCount - n - 1]);
- break;
- }
- case PSOP_ROLL: {
- int j = (int)Pop();
- int n = (int)Pop();
- if (m_StackCount == 0) {
- break;
- }
- if (n < 0 || n > m_StackCount) {
- break;
- }
- if (j < 0)
- for (int i = 0; i < -j; i ++) {
- FX_FLOAT first = m_Stack[m_StackCount - n];
- for (int ii = 0; ii < n - 1; ii ++) {
- m_Stack[m_StackCount - n + ii] = m_Stack[m_StackCount - n + ii + 1];
- }
- m_Stack[m_StackCount - 1] = first;
- }
- else
- for (int i = 0; i < j; i ++) {
- FX_FLOAT last = m_Stack[m_StackCount - 1];
- int ii;
- for (ii = 0; ii < n - 1; ii ++) {
- m_Stack[m_StackCount - ii - 1] = m_Stack[m_StackCount - ii - 2];
- }
- m_Stack[m_StackCount - ii - 1] = last;
- }
- break;
- }
- default:
- break;
+FX_BOOL CPDF_PSEngine::DoOperator(PDF_PSOP op) {
+ int i1, i2;
+ FX_FLOAT d1, d2;
+ switch (op) {
+ case PSOP_ADD:
+ d1 = Pop();
+ d2 = Pop();
+ Push(d1 + d2);
+ break;
+ case PSOP_SUB:
+ d2 = Pop();
+ d1 = Pop();
+ Push(d1 - d2);
+ break;
+ case PSOP_MUL:
+ d1 = Pop();
+ d2 = Pop();
+ Push(d1 * d2);
+ break;
+ case PSOP_DIV:
+ d2 = Pop();
+ d1 = Pop();
+ Push(d1 / d2);
+ break;
+ case PSOP_IDIV:
+ i2 = (int)Pop();
+ i1 = (int)Pop();
+ Push(i1 / i2);
+ break;
+ case PSOP_MOD:
+ i2 = (int)Pop();
+ i1 = (int)Pop();
+ Push(i1 % i2);
+ break;
+ case PSOP_NEG:
+ d1 = Pop();
+ Push(-d1);
+ break;
+ case PSOP_ABS:
+ d1 = Pop();
+ Push((FX_FLOAT)FXSYS_fabs(d1));
+ break;
+ case PSOP_CEILING:
+ d1 = Pop();
+ Push((FX_FLOAT)FXSYS_ceil(d1));
+ break;
+ case PSOP_FLOOR:
+ d1 = Pop();
+ Push((FX_FLOAT)FXSYS_floor(d1));
+ break;
+ case PSOP_ROUND:
+ d1 = Pop();
+ Push(FXSYS_round(d1));
+ break;
+ case PSOP_TRUNCATE:
+ i1 = (int)Pop();
+ Push(i1);
+ break;
+ case PSOP_SQRT:
+ d1 = Pop();
+ Push((FX_FLOAT)FXSYS_sqrt(d1));
+ break;
+ case PSOP_SIN:
+ d1 = Pop();
+ Push((FX_FLOAT)FXSYS_sin(d1 * PI / 180.0f));
+ break;
+ case PSOP_COS:
+ d1 = Pop();
+ Push((FX_FLOAT)FXSYS_cos(d1 * PI / 180.0f));
+ break;
+ case PSOP_ATAN:
+ d2 = Pop();
+ d1 = Pop();
+ d1 = (FX_FLOAT)(FXSYS_atan2(d1, d2) * 180.0 / PI);
+ if (d1 < 0) {
+ d1 += 360;
+ }
+ Push(d1);
+ break;
+ case PSOP_EXP:
+ d2 = Pop();
+ d1 = Pop();
+ Push((FX_FLOAT)FXSYS_pow(d1, d2));
+ break;
+ case PSOP_LN:
+ d1 = Pop();
+ Push((FX_FLOAT)FXSYS_log(d1));
+ break;
+ case PSOP_LOG:
+ d1 = Pop();
+ Push((FX_FLOAT)FXSYS_log10(d1));
+ break;
+ case PSOP_CVI:
+ i1 = (int)Pop();
+ Push(i1);
+ break;
+ case PSOP_CVR:
+ break;
+ case PSOP_EQ:
+ d2 = Pop();
+ d1 = Pop();
+ Push((int)(d1 == d2));
+ break;
+ case PSOP_NE:
+ d2 = Pop();
+ d1 = Pop();
+ Push((int)(d1 != d2));
+ break;
+ case PSOP_GT:
+ d2 = Pop();
+ d1 = Pop();
+ Push((int)(d1 > d2));
+ break;
+ case PSOP_GE:
+ d2 = Pop();
+ d1 = Pop();
+ Push((int)(d1 >= d2));
+ break;
+ case PSOP_LT:
+ d2 = Pop();
+ d1 = Pop();
+ Push((int)(d1 < d2));
+ break;
+ case PSOP_LE:
+ d2 = Pop();
+ d1 = Pop();
+ Push((int)(d1 <= d2));
+ break;
+ case PSOP_AND:
+ i1 = (int)Pop();
+ i2 = (int)Pop();
+ Push(i1 & i2);
+ break;
+ case PSOP_OR:
+ i1 = (int)Pop();
+ i2 = (int)Pop();
+ Push(i1 | i2);
+ break;
+ case PSOP_XOR:
+ i1 = (int)Pop();
+ i2 = (int)Pop();
+ Push(i1 ^ i2);
+ break;
+ case PSOP_NOT:
+ i1 = (int)Pop();
+ Push((int)!i1);
+ break;
+ case PSOP_BITSHIFT: {
+ int shift = (int)Pop();
+ int i = (int)Pop();
+ if (shift > 0) {
+ Push(i << shift);
+ } else {
+ Push(i >> -shift);
+ }
+ break;
+ }
+ case PSOP_TRUE:
+ Push(1);
+ break;
+ case PSOP_FALSE:
+ Push(0);
+ break;
+ case PSOP_POP:
+ Pop();
+ break;
+ case PSOP_EXCH:
+ d2 = Pop();
+ d1 = Pop();
+ Push(d2);
+ Push(d1);
+ break;
+ case PSOP_DUP:
+ d1 = Pop();
+ Push(d1);
+ Push(d1);
+ break;
+ case PSOP_COPY: {
+ int n = (int)Pop();
+ if (n < 0 || n > PSENGINE_STACKSIZE ||
+ m_StackCount + n > PSENGINE_STACKSIZE || n > m_StackCount) {
+ break;
+ }
+ for (int i = 0; i < n; i++) {
+ m_Stack[m_StackCount + i] = m_Stack[m_StackCount + i - n];
+ }
+ m_StackCount += n;
+ break;
+ }
+ case PSOP_INDEX: {
+ int n = (int)Pop();
+ if (n < 0 || n >= m_StackCount) {
+ break;
+ }
+ Push(m_Stack[m_StackCount - n - 1]);
+ break;
+ }
+ case PSOP_ROLL: {
+ int j = (int)Pop();
+ int n = (int)Pop();
+ if (m_StackCount == 0) {
+ break;
+ }
+ if (n < 0 || n > m_StackCount) {
+ break;
+ }
+ if (j < 0)
+ for (int i = 0; i < -j; i++) {
+ FX_FLOAT first = m_Stack[m_StackCount - n];
+ for (int ii = 0; ii < n - 1; ii++) {
+ m_Stack[m_StackCount - n + ii] = m_Stack[m_StackCount - n + ii + 1];
+ }
+ m_Stack[m_StackCount - 1] = first;
+ }
+ else
+ for (int i = 0; i < j; i++) {
+ FX_FLOAT last = m_Stack[m_StackCount - 1];
+ int ii;
+ for (ii = 0; ii < n - 1; ii++) {
+ m_Stack[m_StackCount - ii - 1] = m_Stack[m_StackCount - ii - 2];
+ }
+ m_Stack[m_StackCount - ii - 1] = last;
+ }
+ break;
}
- return TRUE;
+ default:
+ break;
+ }
+ return TRUE;
}
-static FX_FLOAT PDF_Interpolate(FX_FLOAT x, FX_FLOAT xmin, FX_FLOAT xmax, FX_FLOAT ymin, FX_FLOAT ymax)
-{
- return ((x - xmin) * (ymax - ymin) / (xmax - xmin)) + ymin;
+static FX_FLOAT PDF_Interpolate(FX_FLOAT x,
+ FX_FLOAT xmin,
+ FX_FLOAT xmax,
+ FX_FLOAT ymin,
+ FX_FLOAT ymax) {
+ return ((x - xmin) * (ymax - ymin) / (xmax - xmin)) + ymin;
}
-static FX_DWORD _GetBits32(const uint8_t* pData, int bitpos, int nbits)
-{
- int result = 0;
- for (int i = 0; i < nbits; i ++)
- if (pData[(bitpos + i) / 8] & (1 << (7 - (bitpos + i) % 8))) {
- result |= 1 << (nbits - i - 1);
- }
- return result;
+static FX_DWORD _GetBits32(const uint8_t* pData, int bitpos, int nbits) {
+ int result = 0;
+ for (int i = 0; i < nbits; i++)
+ if (pData[(bitpos + i) / 8] & (1 << (7 - (bitpos + i) % 8))) {
+ result |= 1 << (nbits - i - 1);
+ }
+ return result;
}
typedef struct {
- FX_FLOAT encode_max, encode_min;
- int sizes;
+ FX_FLOAT encode_max, encode_min;
+ int sizes;
} SampleEncodeInfo;
-typedef struct {
- FX_FLOAT decode_max, decode_min;
-} SampleDecodeInfo;
-class CPDF_SampledFunc : public CPDF_Function
-{
-public:
- CPDF_SampledFunc();
- virtual ~CPDF_SampledFunc();
- virtual FX_BOOL v_Init(CPDF_Object* pObj);
- virtual FX_BOOL v_Call(FX_FLOAT* inputs, FX_FLOAT* results) const;
- SampleEncodeInfo* m_pEncodeInfo;
- SampleDecodeInfo* m_pDecodeInfo;
- FX_DWORD m_nBitsPerSample;
- FX_DWORD m_SampleMax;
- CPDF_StreamAcc* m_pSampleStream;
+typedef struct { FX_FLOAT decode_max, decode_min; } SampleDecodeInfo;
+class CPDF_SampledFunc : public CPDF_Function {
+ public:
+ CPDF_SampledFunc();
+ virtual ~CPDF_SampledFunc();
+ virtual FX_BOOL v_Init(CPDF_Object* pObj);
+ virtual FX_BOOL v_Call(FX_FLOAT* inputs, FX_FLOAT* results) const;
+ SampleEncodeInfo* m_pEncodeInfo;
+ SampleDecodeInfo* m_pDecodeInfo;
+ FX_DWORD m_nBitsPerSample;
+ FX_DWORD m_SampleMax;
+ CPDF_StreamAcc* m_pSampleStream;
};
-CPDF_SampledFunc::CPDF_SampledFunc()
-{
- m_pSampleStream = NULL;
- m_pEncodeInfo = NULL;
- m_pDecodeInfo = NULL;
+CPDF_SampledFunc::CPDF_SampledFunc() {
+ m_pSampleStream = NULL;
+ m_pEncodeInfo = NULL;
+ m_pDecodeInfo = NULL;
}
-CPDF_SampledFunc::~CPDF_SampledFunc()
-{
- delete m_pSampleStream;
- if (m_pEncodeInfo) {
- FX_Free(m_pEncodeInfo);
- }
- if (m_pDecodeInfo) {
- FX_Free(m_pDecodeInfo);
- }
+CPDF_SampledFunc::~CPDF_SampledFunc() {
+ delete m_pSampleStream;
+ if (m_pEncodeInfo) {
+ FX_Free(m_pEncodeInfo);
+ }
+ if (m_pDecodeInfo) {
+ FX_Free(m_pDecodeInfo);
+ }
}
-FX_BOOL CPDF_SampledFunc::v_Init(CPDF_Object* pObj)
-{
- if (pObj->GetType() != PDFOBJ_STREAM) {
- return FALSE;
- }
- CPDF_Stream* pStream = (CPDF_Stream*)pObj;
- CPDF_Dictionary* pDict = pStream->GetDict();
- CPDF_Array* pSize = pDict->GetArray(FX_BSTRC("Size"));
- CPDF_Array* pEncode = pDict->GetArray(FX_BSTRC("Encode"));
- CPDF_Array* pDecode = pDict->GetArray(FX_BSTRC("Decode"));
- m_nBitsPerSample = pDict->GetInteger(FX_BSTRC("BitsPerSample"));
- if (m_nBitsPerSample > 32) {
- return FALSE;
- }
- m_SampleMax = 0xffffffff >> (32 - m_nBitsPerSample);
- m_pSampleStream = new CPDF_StreamAcc;
- m_pSampleStream->LoadAllData(pStream, FALSE);
- m_pEncodeInfo = FX_Alloc(SampleEncodeInfo, m_nInputs);
- FX_SAFE_DWORD nTotalSampleBits = 1;
- for (int i = 0; i < m_nInputs; i ++) {
- m_pEncodeInfo[i].sizes = pSize ? pSize->GetInteger(i) : 0;
- if (!pSize && i == 0) {
- m_pEncodeInfo[i].sizes = pDict->GetInteger(FX_BSTRC("Size"));
- }
- nTotalSampleBits *= m_pEncodeInfo[i].sizes;
- if (pEncode) {
- m_pEncodeInfo[i].encode_min = pEncode->GetFloat(i * 2);
- m_pEncodeInfo[i].encode_max = pEncode->GetFloat(i * 2 + 1);
- } else {
- m_pEncodeInfo[i].encode_min = 0;
- if (m_pEncodeInfo[i].sizes == 1) {
- m_pEncodeInfo[i].encode_max = 1;
- } else {
- m_pEncodeInfo[i].encode_max = (FX_FLOAT)m_pEncodeInfo[i].sizes - 1;
- }
- }
- }
- nTotalSampleBits *= m_nBitsPerSample;
- nTotalSampleBits *= m_nOutputs;
- FX_SAFE_DWORD nTotalSampleBytes = nTotalSampleBits;
- nTotalSampleBytes += 7;
- nTotalSampleBytes /= 8;
- if (!nTotalSampleBytes.IsValid() ||
- nTotalSampleBytes.ValueOrDie() == 0 ||
- nTotalSampleBytes.ValueOrDie() > m_pSampleStream->GetSize()) {
- return FALSE;
- }
- m_pDecodeInfo = FX_Alloc(SampleDecodeInfo, m_nOutputs);
- for (int i = 0; i < m_nOutputs; i ++) {
- if (pDecode) {
- m_pDecodeInfo[i].decode_min = pDecode->GetFloat(2 * i);
- m_pDecodeInfo[i].decode_max = pDecode->GetFloat(2 * i + 1);
- } else {
- m_pDecodeInfo[i].decode_min = m_pRanges[i * 2];
- m_pDecodeInfo[i].decode_max = m_pRanges[i * 2 + 1];
- }
+FX_BOOL CPDF_SampledFunc::v_Init(CPDF_Object* pObj) {
+ if (pObj->GetType() != PDFOBJ_STREAM) {
+ return FALSE;
+ }
+ CPDF_Stream* pStream = (CPDF_Stream*)pObj;
+ CPDF_Dictionary* pDict = pStream->GetDict();
+ CPDF_Array* pSize = pDict->GetArray(FX_BSTRC("Size"));
+ CPDF_Array* pEncode = pDict->GetArray(FX_BSTRC("Encode"));
+ CPDF_Array* pDecode = pDict->GetArray(FX_BSTRC("Decode"));
+ m_nBitsPerSample = pDict->GetInteger(FX_BSTRC("BitsPerSample"));
+ if (m_nBitsPerSample > 32) {
+ return FALSE;
+ }
+ m_SampleMax = 0xffffffff >> (32 - m_nBitsPerSample);
+ m_pSampleStream = new CPDF_StreamAcc;
+ m_pSampleStream->LoadAllData(pStream, FALSE);
+ m_pEncodeInfo = FX_Alloc(SampleEncodeInfo, m_nInputs);
+ FX_SAFE_DWORD nTotalSampleBits = 1;
+ for (int i = 0; i < m_nInputs; i++) {
+ m_pEncodeInfo[i].sizes = pSize ? pSize->GetInteger(i) : 0;
+ if (!pSize && i == 0) {
+ m_pEncodeInfo[i].sizes = pDict->GetInteger(FX_BSTRC("Size"));
+ }
+ nTotalSampleBits *= m_pEncodeInfo[i].sizes;
+ if (pEncode) {
+ m_pEncodeInfo[i].encode_min = pEncode->GetFloat(i * 2);
+ m_pEncodeInfo[i].encode_max = pEncode->GetFloat(i * 2 + 1);
+ } else {
+ m_pEncodeInfo[i].encode_min = 0;
+ if (m_pEncodeInfo[i].sizes == 1) {
+ m_pEncodeInfo[i].encode_max = 1;
+ } else {
+ m_pEncodeInfo[i].encode_max = (FX_FLOAT)m_pEncodeInfo[i].sizes - 1;
+ }
+ }
+ }
+ nTotalSampleBits *= m_nBitsPerSample;
+ nTotalSampleBits *= m_nOutputs;
+ FX_SAFE_DWORD nTotalSampleBytes = nTotalSampleBits;
+ nTotalSampleBytes += 7;
+ nTotalSampleBytes /= 8;
+ if (!nTotalSampleBytes.IsValid() || nTotalSampleBytes.ValueOrDie() == 0 ||
+ nTotalSampleBytes.ValueOrDie() > m_pSampleStream->GetSize()) {
+ return FALSE;
+ }
+ m_pDecodeInfo = FX_Alloc(SampleDecodeInfo, m_nOutputs);
+ for (int i = 0; i < m_nOutputs; i++) {
+ if (pDecode) {
+ m_pDecodeInfo[i].decode_min = pDecode->GetFloat(2 * i);
+ m_pDecodeInfo[i].decode_max = pDecode->GetFloat(2 * i + 1);
+ } else {
+ m_pDecodeInfo[i].decode_min = m_pRanges[i * 2];
+ m_pDecodeInfo[i].decode_max = m_pRanges[i * 2 + 1];
}
- return TRUE;
+ }
+ return TRUE;
}
-FX_BOOL CPDF_SampledFunc::v_Call(FX_FLOAT* inputs, FX_FLOAT* results) const
-{
- int pos = 0;
- CFX_FixedBufGrow<FX_FLOAT, 16> encoded_input_buf(m_nInputs);
- FX_FLOAT* encoded_input = encoded_input_buf;
- CFX_FixedBufGrow<int, 32> int_buf(m_nInputs * 2);
- int* index = int_buf;
- int* blocksize = index + m_nInputs;
- for (int i = 0; i < m_nInputs; i ++) {
- if (i == 0) {
- blocksize[i] = 1;
- } else {
- blocksize[i] = blocksize[i - 1] * m_pEncodeInfo[i - 1].sizes;
- }
- encoded_input[i] = PDF_Interpolate(inputs[i], m_pDomains[i * 2], m_pDomains[i * 2 + 1],
- m_pEncodeInfo[i].encode_min, m_pEncodeInfo[i].encode_max);
- index[i] = (int)encoded_input[i];
- if (index[i] < 0) {
- index[i] = 0;
- } else if (index[i] > m_pEncodeInfo[i].sizes - 1) {
- index[i] = m_pEncodeInfo[i].sizes - 1;
+FX_BOOL CPDF_SampledFunc::v_Call(FX_FLOAT* inputs, FX_FLOAT* results) const {
+ int pos = 0;
+ CFX_FixedBufGrow<FX_FLOAT, 16> encoded_input_buf(m_nInputs);
+ FX_FLOAT* encoded_input = encoded_input_buf;
+ CFX_FixedBufGrow<int, 32> int_buf(m_nInputs * 2);
+ int* index = int_buf;
+ int* blocksize = index + m_nInputs;
+ for (int i = 0; i < m_nInputs; i++) {
+ if (i == 0) {
+ blocksize[i] = 1;
+ } else {
+ blocksize[i] = blocksize[i - 1] * m_pEncodeInfo[i - 1].sizes;
+ }
+ encoded_input[i] = PDF_Interpolate(
+ inputs[i], m_pDomains[i * 2], m_pDomains[i * 2 + 1],
+ m_pEncodeInfo[i].encode_min, m_pEncodeInfo[i].encode_max);
+ index[i] = (int)encoded_input[i];
+ if (index[i] < 0) {
+ index[i] = 0;
+ } else if (index[i] > m_pEncodeInfo[i].sizes - 1) {
+ index[i] = m_pEncodeInfo[i].sizes - 1;
+ }
+ pos += index[i] * blocksize[i];
+ }
+ FX_SAFE_INT32 bits_to_output = m_nOutputs;
+ bits_to_output *= m_nBitsPerSample;
+ if (!bits_to_output.IsValid()) {
+ return FALSE;
+ }
+ FX_SAFE_INT32 bitpos = pos;
+ bitpos *= bits_to_output.ValueOrDie();
+ if (!bitpos.IsValid()) {
+ return FALSE;
+ }
+ FX_SAFE_INT32 range_check = bitpos;
+ range_check += bits_to_output.ValueOrDie();
+ if (!range_check.IsValid()) {
+ return FALSE;
+ }
+ const uint8_t* pSampleData = m_pSampleStream->GetData();
+ if (!pSampleData) {
+ return FALSE;
+ }
+ for (int j = 0; j < m_nOutputs; j++) {
+ FX_DWORD sample =
+ _GetBits32(pSampleData, bitpos.ValueOrDie() + j * m_nBitsPerSample,
+ m_nBitsPerSample);
+ FX_FLOAT encoded = (FX_FLOAT)sample;
+ for (int i = 0; i < m_nInputs; i++) {
+ if (index[i] == m_pEncodeInfo[i].sizes - 1) {
+ if (index[i] == 0) {
+ encoded = encoded_input[i] * (FX_FLOAT)sample;
}
- pos += index[i] * blocksize[i];
- }
- FX_SAFE_INT32 bits_to_output = m_nOutputs;
- bits_to_output *= m_nBitsPerSample;
- if (!bits_to_output.IsValid()) {
- return FALSE;
- }
- FX_SAFE_INT32 bitpos = pos;
- bitpos *= bits_to_output.ValueOrDie();
- if (!bitpos.IsValid()) {
- return FALSE;
- }
- FX_SAFE_INT32 range_check = bitpos;
- range_check += bits_to_output.ValueOrDie();
- if (!range_check.IsValid()) {
- return FALSE;
- }
- const uint8_t* pSampleData = m_pSampleStream->GetData();
- if (!pSampleData) {
- return FALSE;
- }
- for (int j = 0; j < m_nOutputs; j ++) {
- FX_DWORD sample = _GetBits32(pSampleData, bitpos.ValueOrDie() + j * m_nBitsPerSample, m_nBitsPerSample);
- FX_FLOAT encoded = (FX_FLOAT)sample;
- for (int i = 0; i < m_nInputs; i ++) {
- if (index[i] == m_pEncodeInfo[i].sizes - 1) {
- if (index[i] == 0) {
- encoded = encoded_input[i] * (FX_FLOAT)sample;
- }
- } else {
- FX_SAFE_INT32 bitpos2 = blocksize[i];
- bitpos2 += pos;
- bitpos2 *= m_nOutputs;
- bitpos2 += j;
- bitpos2 *= m_nBitsPerSample;
- if (!bitpos2.IsValid()) {
- return FALSE;
- }
- FX_DWORD sample1 = _GetBits32(pSampleData, bitpos2.ValueOrDie(), m_nBitsPerSample);
- encoded += (encoded_input[i] - index[i]) * ((FX_FLOAT)sample1 - (FX_FLOAT)sample);
- }
+ } else {
+ FX_SAFE_INT32 bitpos2 = blocksize[i];
+ bitpos2 += pos;
+ bitpos2 *= m_nOutputs;
+ bitpos2 += j;
+ bitpos2 *= m_nBitsPerSample;
+ if (!bitpos2.IsValid()) {
+ return FALSE;
}
- results[j] = PDF_Interpolate(encoded, 0, (FX_FLOAT)m_SampleMax,
- m_pDecodeInfo[j].decode_min, m_pDecodeInfo[j].decode_max);
- }
- return TRUE;
+ FX_DWORD sample1 =
+ _GetBits32(pSampleData, bitpos2.ValueOrDie(), m_nBitsPerSample);
+ encoded += (encoded_input[i] - index[i]) *
+ ((FX_FLOAT)sample1 - (FX_FLOAT)sample);
+ }
+ }
+ results[j] = PDF_Interpolate(encoded, 0, (FX_FLOAT)m_SampleMax,
+ m_pDecodeInfo[j].decode_min,
+ m_pDecodeInfo[j].decode_max);
+ }
+ return TRUE;
}
-class CPDF_PSFunc : public CPDF_Function
-{
-public:
- virtual FX_BOOL v_Init(CPDF_Object* pObj);
- virtual FX_BOOL v_Call(FX_FLOAT* inputs, FX_FLOAT* results) const;
- CPDF_PSEngine m_PS;
+class CPDF_PSFunc : public CPDF_Function {
+ public:
+ virtual FX_BOOL v_Init(CPDF_Object* pObj);
+ virtual FX_BOOL v_Call(FX_FLOAT* inputs, FX_FLOAT* results) const;
+ CPDF_PSEngine m_PS;
};
-FX_BOOL CPDF_PSFunc::v_Init(CPDF_Object* pObj)
-{
- CPDF_Stream* pStream = (CPDF_Stream*)pObj;
- CPDF_StreamAcc acc;
- acc.LoadAllData(pStream, FALSE);
- return m_PS.Parse((const FX_CHAR*)acc.GetData(), acc.GetSize());
+FX_BOOL CPDF_PSFunc::v_Init(CPDF_Object* pObj) {
+ CPDF_Stream* pStream = (CPDF_Stream*)pObj;
+ CPDF_StreamAcc acc;
+ acc.LoadAllData(pStream, FALSE);
+ return m_PS.Parse((const FX_CHAR*)acc.GetData(), acc.GetSize());
}
-FX_BOOL CPDF_PSFunc::v_Call(FX_FLOAT* inputs, FX_FLOAT* results) const
-{
- CPDF_PSEngine& PS = (CPDF_PSEngine&)m_PS;
- PS.Reset();
- int i;
- for (i = 0; i < m_nInputs; i ++) {
- PS.Push(inputs[i]);
- }
- PS.Execute();
- if (PS.GetStackSize() < m_nOutputs) {
- return FALSE;
- }
- for (i = 0; i < m_nOutputs; i ++) {
- results[m_nOutputs - i - 1] = PS.Pop();
- }
- return TRUE;
+FX_BOOL CPDF_PSFunc::v_Call(FX_FLOAT* inputs, FX_FLOAT* results) const {
+ CPDF_PSEngine& PS = (CPDF_PSEngine&)m_PS;
+ PS.Reset();
+ int i;
+ for (i = 0; i < m_nInputs; i++) {
+ PS.Push(inputs[i]);
+ }
+ PS.Execute();
+ if (PS.GetStackSize() < m_nOutputs) {
+ return FALSE;
+ }
+ for (i = 0; i < m_nOutputs; i++) {
+ results[m_nOutputs - i - 1] = PS.Pop();
+ }
+ return TRUE;
}
-class CPDF_ExpIntFunc : public CPDF_Function
-{
-public:
- CPDF_ExpIntFunc();
- virtual ~CPDF_ExpIntFunc();
- virtual FX_BOOL v_Init(CPDF_Object* pObj);
- virtual FX_BOOL v_Call(FX_FLOAT* inputs, FX_FLOAT* results) const;
- FX_FLOAT m_Exponent;
- FX_FLOAT* m_pBeginValues;
- FX_FLOAT* m_pEndValues;
- int m_nOrigOutputs;
+class CPDF_ExpIntFunc : public CPDF_Function {
+ public:
+ CPDF_ExpIntFunc();
+ virtual ~CPDF_ExpIntFunc();
+ virtual FX_BOOL v_Init(CPDF_Object* pObj);
+ virtual FX_BOOL v_Call(FX_FLOAT* inputs, FX_FLOAT* results) const;
+ FX_FLOAT m_Exponent;
+ FX_FLOAT* m_pBeginValues;
+ FX_FLOAT* m_pEndValues;
+ int m_nOrigOutputs;
};
-CPDF_ExpIntFunc::CPDF_ExpIntFunc()
-{
- m_pBeginValues = NULL;
- m_pEndValues = NULL;
+CPDF_ExpIntFunc::CPDF_ExpIntFunc() {
+ m_pBeginValues = NULL;
+ m_pEndValues = NULL;
}
-CPDF_ExpIntFunc::~CPDF_ExpIntFunc()
-{
- if (m_pBeginValues) {
- FX_Free(m_pBeginValues);
- }
- if (m_pEndValues) {
- FX_Free(m_pEndValues);
- }
+CPDF_ExpIntFunc::~CPDF_ExpIntFunc() {
+ if (m_pBeginValues) {
+ FX_Free(m_pBeginValues);
+ }
+ if (m_pEndValues) {
+ FX_Free(m_pEndValues);
+ }
}
-FX_BOOL CPDF_ExpIntFunc::v_Init(CPDF_Object* pObj)
-{
- CPDF_Dictionary* pDict = pObj->GetDict();
- if (pDict == NULL) {
- return FALSE;
- }
- CPDF_Array* pArray0 = pDict->GetArray(FX_BSTRC("C0"));
- if (m_nOutputs == 0) {
- m_nOutputs = 1;
- if (pArray0) {
- m_nOutputs = pArray0->GetCount();
- }
- }
- CPDF_Array* pArray1 = pDict->GetArray(FX_BSTRC("C1"));
- m_pBeginValues = FX_Alloc2D(FX_FLOAT, m_nOutputs, 2);
- m_pEndValues = FX_Alloc2D(FX_FLOAT, m_nOutputs, 2);
- for (int i = 0; i < m_nOutputs; i ++) {
- m_pBeginValues[i] = pArray0 ? pArray0->GetFloat(i) : 0.0f;
- m_pEndValues[i] = pArray1 ? pArray1->GetFloat(i) : 1.0f;
- }
- m_Exponent = pDict->GetFloat(FX_BSTRC("N"));
- m_nOrigOutputs = m_nOutputs;
- if (m_nOutputs && m_nInputs > INT_MAX / m_nOutputs) {
- return FALSE;
- }
- m_nOutputs *= m_nInputs;
- return TRUE;
+FX_BOOL CPDF_ExpIntFunc::v_Init(CPDF_Object* pObj) {
+ CPDF_Dictionary* pDict = pObj->GetDict();
+ if (pDict == NULL) {
+ return FALSE;
+ }
+ CPDF_Array* pArray0 = pDict->GetArray(FX_BSTRC("C0"));
+ if (m_nOutputs == 0) {
+ m_nOutputs = 1;
+ if (pArray0) {
+ m_nOutputs = pArray0->GetCount();
+ }
+ }
+ CPDF_Array* pArray1 = pDict->GetArray(FX_BSTRC("C1"));
+ m_pBeginValues = FX_Alloc2D(FX_FLOAT, m_nOutputs, 2);
+ m_pEndValues = FX_Alloc2D(FX_FLOAT, m_nOutputs, 2);
+ for (int i = 0; i < m_nOutputs; i++) {
+ m_pBeginValues[i] = pArray0 ? pArray0->GetFloat(i) : 0.0f;
+ m_pEndValues[i] = pArray1 ? pArray1->GetFloat(i) : 1.0f;
+ }
+ m_Exponent = pDict->GetFloat(FX_BSTRC("N"));
+ m_nOrigOutputs = m_nOutputs;
+ if (m_nOutputs && m_nInputs > INT_MAX / m_nOutputs) {
+ return FALSE;
+ }
+ m_nOutputs *= m_nInputs;
+ return TRUE;
}
-FX_BOOL CPDF_ExpIntFunc::v_Call(FX_FLOAT* inputs, FX_FLOAT* results) const
-{
- for (int i = 0; i < m_nInputs; i ++)
- for (int j = 0; j < m_nOrigOutputs; j ++) {
- results[i * m_nOrigOutputs + j] = m_pBeginValues[j] + (FX_FLOAT)FXSYS_pow(inputs[i], m_Exponent) *
- (m_pEndValues[j] - m_pBeginValues[j]);
- }
- return TRUE;
+FX_BOOL CPDF_ExpIntFunc::v_Call(FX_FLOAT* inputs, FX_FLOAT* results) const {
+ for (int i = 0; i < m_nInputs; i++)
+ for (int j = 0; j < m_nOrigOutputs; j++) {
+ results[i * m_nOrigOutputs + j] =
+ m_pBeginValues[j] +
+ (FX_FLOAT)FXSYS_pow(inputs[i], m_Exponent) *
+ (m_pEndValues[j] - m_pBeginValues[j]);
+ }
+ return TRUE;
}
-class CPDF_StitchFunc : public CPDF_Function
-{
-public:
- CPDF_StitchFunc();
- virtual ~CPDF_StitchFunc();
- virtual FX_BOOL v_Init(CPDF_Object* pObj);
- virtual FX_BOOL v_Call(FX_FLOAT* inputs, FX_FLOAT* results) const;
- int m_nSubs;
- CPDF_Function** m_pSubFunctions;
- FX_FLOAT* m_pBounds;
- FX_FLOAT* m_pEncode;
+class CPDF_StitchFunc : public CPDF_Function {
+ public:
+ CPDF_StitchFunc();
+ virtual ~CPDF_StitchFunc();
+ virtual FX_BOOL v_Init(CPDF_Object* pObj);
+ virtual FX_BOOL v_Call(FX_FLOAT* inputs, FX_FLOAT* results) const;
+ int m_nSubs;
+ CPDF_Function** m_pSubFunctions;
+ FX_FLOAT* m_pBounds;
+ FX_FLOAT* m_pEncode;
};
-CPDF_StitchFunc::CPDF_StitchFunc()
-{
- m_nSubs = 0;
- m_pSubFunctions = NULL;
- m_pBounds = NULL;
- m_pEncode = NULL;
+CPDF_StitchFunc::CPDF_StitchFunc() {
+ m_nSubs = 0;
+ m_pSubFunctions = NULL;
+ m_pBounds = NULL;
+ m_pEncode = NULL;
}
-CPDF_StitchFunc::~CPDF_StitchFunc()
-{
- for (int i = 0; i < m_nSubs; i ++)
- delete m_pSubFunctions[i];
- if (m_pSubFunctions) {
- FX_Free(m_pSubFunctions);
- }
- if (m_pBounds) {
- FX_Free(m_pBounds);
- }
- if (m_pEncode) {
- FX_Free(m_pEncode);
- }
+CPDF_StitchFunc::~CPDF_StitchFunc() {
+ for (int i = 0; i < m_nSubs; i++)
+ delete m_pSubFunctions[i];
+ if (m_pSubFunctions) {
+ FX_Free(m_pSubFunctions);
+ }
+ if (m_pBounds) {
+ FX_Free(m_pBounds);
+ }
+ if (m_pEncode) {
+ FX_Free(m_pEncode);
+ }
}
-FX_BOOL CPDF_StitchFunc::v_Init(CPDF_Object* pObj)
-{
- CPDF_Dictionary* pDict = pObj->GetDict();
- if (pDict == NULL) {
- return FALSE;
- }
- CPDF_Array* pArray = pDict->GetArray(FX_BSTRC("Functions"));
- if (pArray == NULL) {
- return FALSE;
- }
- m_nSubs = pArray->GetCount();
- if (m_nSubs == 0) {
- return FALSE;
- }
- m_pSubFunctions = FX_Alloc(CPDF_Function*, m_nSubs);
- m_nOutputs = 0;
- int i;
- for (i = 0; i < m_nSubs; i ++) {
- CPDF_Object* pSub = pArray->GetElementValue(i);
- if (pSub == pObj) {
- return FALSE;
- }
- m_pSubFunctions[i] = CPDF_Function::Load(pSub);
- if (m_pSubFunctions[i] == NULL) {
- return FALSE;
- }
- if (m_pSubFunctions[i]->CountOutputs() > m_nOutputs) {
- m_nOutputs = m_pSubFunctions[i]->CountOutputs();
- }
- }
- m_pBounds = FX_Alloc(FX_FLOAT, m_nSubs + 1);
- m_pBounds[0] = m_pDomains[0];
- pArray = pDict->GetArray(FX_BSTRC("Bounds"));
- if (pArray == NULL) {
- return FALSE;
- }
- for (i = 0; i < m_nSubs - 1; i ++) {
- m_pBounds[i + 1] = pArray->GetFloat(i);
- }
- m_pBounds[m_nSubs] = m_pDomains[1];
- m_pEncode = FX_Alloc2D(FX_FLOAT, m_nSubs, 2);
- pArray = pDict->GetArray(FX_BSTRC("Encode"));
- if (pArray == NULL) {
- return FALSE;
- }
- for (i = 0; i < m_nSubs * 2; i ++) {
- m_pEncode[i] = pArray->GetFloat(i);
- }
- return TRUE;
-}
-FX_BOOL CPDF_StitchFunc::v_Call(FX_FLOAT* inputs, FX_FLOAT* outputs) const
-{
- FX_FLOAT input = inputs[0];
- int i;
- for (i = 0; i < m_nSubs - 1; i ++)
- if (input < m_pBounds[i + 1]) {
- break;
- }
+FX_BOOL CPDF_StitchFunc::v_Init(CPDF_Object* pObj) {
+ CPDF_Dictionary* pDict = pObj->GetDict();
+ if (pDict == NULL) {
+ return FALSE;
+ }
+ CPDF_Array* pArray = pDict->GetArray(FX_BSTRC("Functions"));
+ if (pArray == NULL) {
+ return FALSE;
+ }
+ m_nSubs = pArray->GetCount();
+ if (m_nSubs == 0) {
+ return FALSE;
+ }
+ m_pSubFunctions = FX_Alloc(CPDF_Function*, m_nSubs);
+ m_nOutputs = 0;
+ int i;
+ for (i = 0; i < m_nSubs; i++) {
+ CPDF_Object* pSub = pArray->GetElementValue(i);
+ if (pSub == pObj) {
+ return FALSE;
+ }
+ m_pSubFunctions[i] = CPDF_Function::Load(pSub);
if (m_pSubFunctions[i] == NULL) {
- return FALSE;
- }
- input = PDF_Interpolate(input, m_pBounds[i], m_pBounds[i + 1], m_pEncode[i * 2], m_pEncode[i * 2 + 1]);
- int nresults;
- m_pSubFunctions[i]->Call(&input, m_nInputs, outputs, nresults);
- return TRUE;
+ return FALSE;
+ }
+ if (m_pSubFunctions[i]->CountOutputs() > m_nOutputs) {
+ m_nOutputs = m_pSubFunctions[i]->CountOutputs();
+ }
+ }
+ m_pBounds = FX_Alloc(FX_FLOAT, m_nSubs + 1);
+ m_pBounds[0] = m_pDomains[0];
+ pArray = pDict->GetArray(FX_BSTRC("Bounds"));
+ if (pArray == NULL) {
+ return FALSE;
+ }
+ for (i = 0; i < m_nSubs - 1; i++) {
+ m_pBounds[i + 1] = pArray->GetFloat(i);
+ }
+ m_pBounds[m_nSubs] = m_pDomains[1];
+ m_pEncode = FX_Alloc2D(FX_FLOAT, m_nSubs, 2);
+ pArray = pDict->GetArray(FX_BSTRC("Encode"));
+ if (pArray == NULL) {
+ return FALSE;
+ }
+ for (i = 0; i < m_nSubs * 2; i++) {
+ m_pEncode[i] = pArray->GetFloat(i);
+ }
+ return TRUE;
}
-CPDF_Function* CPDF_Function::Load(CPDF_Object* pFuncObj)
-{
- if (pFuncObj == NULL) {
- return NULL;
- }
- CPDF_Function* pFunc = NULL;
- int type;
- if (pFuncObj->GetType() == PDFOBJ_STREAM) {
- type = ((CPDF_Stream*)pFuncObj)->GetDict()->GetInteger(FX_BSTRC("FunctionType"));
- } else if (pFuncObj->GetType() == PDFOBJ_DICTIONARY) {
- type = ((CPDF_Dictionary*)pFuncObj)->GetInteger(FX_BSTRC("FunctionType"));
- } else {
- return NULL;
- }
- if (type == 0) {
- pFunc = new CPDF_SampledFunc;
- } else if (type == 2) {
- pFunc = new CPDF_ExpIntFunc;
- } else if (type == 3) {
- pFunc = new CPDF_StitchFunc;
- } else if (type == 4) {
- pFunc = new CPDF_PSFunc;
- } else {
- return NULL;
- }
- if (!pFunc->Init(pFuncObj)) {
- delete pFunc;
- return NULL;
- }
- return pFunc;
+FX_BOOL CPDF_StitchFunc::v_Call(FX_FLOAT* inputs, FX_FLOAT* outputs) const {
+ FX_FLOAT input = inputs[0];
+ int i;
+ for (i = 0; i < m_nSubs - 1; i++)
+ if (input < m_pBounds[i + 1]) {
+ break;
+ }
+ if (m_pSubFunctions[i] == NULL) {
+ return FALSE;
+ }
+ input = PDF_Interpolate(input, m_pBounds[i], m_pBounds[i + 1],
+ m_pEncode[i * 2], m_pEncode[i * 2 + 1]);
+ int nresults;
+ m_pSubFunctions[i]->Call(&input, m_nInputs, outputs, nresults);
+ return TRUE;
+}
+CPDF_Function* CPDF_Function::Load(CPDF_Object* pFuncObj) {
+ if (pFuncObj == NULL) {
+ return NULL;
+ }
+ CPDF_Function* pFunc = NULL;
+ int type;
+ if (pFuncObj->GetType() == PDFOBJ_STREAM) {
+ type = ((CPDF_Stream*)pFuncObj)
+ ->GetDict()
+ ->GetInteger(FX_BSTRC("FunctionType"));
+ } else if (pFuncObj->GetType() == PDFOBJ_DICTIONARY) {
+ type = ((CPDF_Dictionary*)pFuncObj)->GetInteger(FX_BSTRC("FunctionType"));
+ } else {
+ return NULL;
+ }
+ if (type == 0) {
+ pFunc = new CPDF_SampledFunc;
+ } else if (type == 2) {
+ pFunc = new CPDF_ExpIntFunc;
+ } else if (type == 3) {
+ pFunc = new CPDF_StitchFunc;
+ } else if (type == 4) {
+ pFunc = new CPDF_PSFunc;
+ } else {
+ return NULL;
+ }
+ if (!pFunc->Init(pFuncObj)) {
+ delete pFunc;
+ return NULL;
+ }
+ return pFunc;
+}
+CPDF_Function::CPDF_Function() {
+ m_pDomains = NULL;
+ m_pRanges = NULL;
}
-CPDF_Function::CPDF_Function()
-{
+CPDF_Function::~CPDF_Function() {
+ if (m_pDomains) {
+ FX_Free(m_pDomains);
m_pDomains = NULL;
+ }
+ if (m_pRanges) {
+ FX_Free(m_pRanges);
m_pRanges = NULL;
+ }
}
-CPDF_Function::~CPDF_Function()
-{
- if (m_pDomains) {
- FX_Free(m_pDomains);
- m_pDomains = NULL;
- }
+FX_BOOL CPDF_Function::Init(CPDF_Object* pObj) {
+ CPDF_Dictionary* pDict;
+ if (pObj->GetType() == PDFOBJ_STREAM) {
+ pDict = ((CPDF_Stream*)pObj)->GetDict();
+ } else {
+ pDict = (CPDF_Dictionary*)pObj;
+ }
+ CPDF_Array* pDomains = pDict->GetArray(FX_BSTRC("Domain"));
+ if (pDomains == NULL) {
+ return FALSE;
+ }
+ m_nInputs = pDomains->GetCount() / 2;
+ if (m_nInputs == 0) {
+ return FALSE;
+ }
+ m_pDomains = FX_Alloc2D(FX_FLOAT, m_nInputs, 2);
+ for (int i = 0; i < m_nInputs * 2; i++) {
+ m_pDomains[i] = pDomains->GetFloat(i);
+ }
+ CPDF_Array* pRanges = pDict->GetArray(FX_BSTRC("Range"));
+ m_nOutputs = 0;
+ if (pRanges) {
+ m_nOutputs = pRanges->GetCount() / 2;
+ m_pRanges = FX_Alloc2D(FX_FLOAT, m_nOutputs, 2);
+ for (int i = 0; i < m_nOutputs * 2; i++) {
+ m_pRanges[i] = pRanges->GetFloat(i);
+ }
+ }
+ FX_DWORD old_outputs = m_nOutputs;
+ if (!v_Init(pObj)) {
+ return FALSE;
+ }
+ if (m_pRanges && m_nOutputs > (int)old_outputs) {
+ m_pRanges = FX_Realloc(FX_FLOAT, m_pRanges, m_nOutputs * 2);
if (m_pRanges) {
- FX_Free(m_pRanges);
- m_pRanges = NULL;
- }
-}
-FX_BOOL CPDF_Function::Init(CPDF_Object* pObj)
-{
- CPDF_Dictionary* pDict;
- if (pObj->GetType() == PDFOBJ_STREAM) {
- pDict = ((CPDF_Stream*)pObj)->GetDict();
- } else {
- pDict = (CPDF_Dictionary*)pObj;
- }
- CPDF_Array* pDomains = pDict->GetArray(FX_BSTRC("Domain"));
- if (pDomains == NULL) {
- return FALSE;
- }
- m_nInputs = pDomains->GetCount() / 2;
- if (m_nInputs == 0) {
- return FALSE;
- }
- m_pDomains = FX_Alloc2D(FX_FLOAT, m_nInputs, 2);
- for (int i = 0; i < m_nInputs * 2; i ++) {
- m_pDomains[i] = pDomains->GetFloat(i);
- }
- CPDF_Array* pRanges = pDict->GetArray(FX_BSTRC("Range"));
- m_nOutputs = 0;
- if (pRanges) {
- m_nOutputs = pRanges->GetCount() / 2;
- m_pRanges = FX_Alloc2D(FX_FLOAT, m_nOutputs, 2);
- for (int i = 0; i < m_nOutputs * 2; i ++) {
- m_pRanges[i] = pRanges->GetFloat(i);
- }
- }
- FX_DWORD old_outputs = m_nOutputs;
- if (!v_Init(pObj)) {
- return FALSE;
- }
- if (m_pRanges && m_nOutputs > (int)old_outputs) {
- m_pRanges = FX_Realloc(FX_FLOAT, m_pRanges, m_nOutputs * 2);
- if (m_pRanges) {
- FXSYS_memset(m_pRanges + (old_outputs * 2), 0, sizeof(FX_FLOAT) * (m_nOutputs - old_outputs) * 2);
- }
+ FXSYS_memset(m_pRanges + (old_outputs * 2), 0,
+ sizeof(FX_FLOAT) * (m_nOutputs - old_outputs) * 2);
}
- return TRUE;
+ }
+ return TRUE;
}
-FX_BOOL CPDF_Function::Call(FX_FLOAT* inputs, int ninputs, FX_FLOAT* results, int& nresults) const
-{
- if (m_nInputs != ninputs) {
- return FALSE;
- }
- nresults = m_nOutputs;
- for (int i = 0; i < m_nInputs; i ++) {
- if (inputs[i] < m_pDomains[i * 2]) {
- inputs[i] = m_pDomains[i * 2];
- } else if (inputs[i] > m_pDomains[i * 2 + 1]) {
- inputs[i] = m_pDomains[i * 2] + 1;
- }
- }
- v_Call(inputs, results);
- if (m_pRanges) {
- for (int i = 0; i < m_nOutputs; i ++) {
- if (results[i] < m_pRanges[i * 2]) {
- results[i] = m_pRanges[i * 2];
- } else if (results[i] > m_pRanges[i * 2 + 1]) {
- results[i] = m_pRanges[i * 2 + 1];
- }
- }
- }
- return TRUE;
+FX_BOOL CPDF_Function::Call(FX_FLOAT* inputs,
+ int ninputs,
+ FX_FLOAT* results,
+ int& nresults) const {
+ if (m_nInputs != ninputs) {
+ return FALSE;
+ }
+ nresults = m_nOutputs;
+ for (int i = 0; i < m_nInputs; i++) {
+ if (inputs[i] < m_pDomains[i * 2]) {
+ inputs[i] = m_pDomains[i * 2];
+ } else if (inputs[i] > m_pDomains[i * 2 + 1]) {
+ inputs[i] = m_pDomains[i * 2] + 1;
+ }
+ }
+ v_Call(inputs, results);
+ if (m_pRanges) {
+ for (int i = 0; i < m_nOutputs; i++) {
+ if (results[i] < m_pRanges[i * 2]) {
+ results[i] = m_pRanges[i * 2];
+ } else if (results[i] > m_pRanges[i * 2 + 1]) {
+ results[i] = m_pRanges[i * 2 + 1];
+ }
+ }
+ }
+ return TRUE;
}
diff --git a/core/src/fpdfapi/fpdf_page/fpdf_page_graph_state.cpp b/core/src/fpdfapi/fpdf_page/fpdf_page_graph_state.cpp
index b4d030e679..e010a28b02 100644
--- a/core/src/fpdfapi/fpdf_page/fpdf_page_graph_state.cpp
+++ b/core/src/fpdfapi/fpdf_page/fpdf_page_graph_state.cpp
@@ -11,699 +11,682 @@
#include "../fpdf_render/render_int.h"
#include "pageint.h"
-void CPDF_GraphicStates::DefaultStates()
-{
- m_ColorState.New()->Default();
-}
-void CPDF_GraphicStates::CopyStates(const CPDF_GraphicStates& src)
-{
- m_ClipPath = src.m_ClipPath;
- m_GraphState = src.m_GraphState;
- m_ColorState = src.m_ColorState;
- m_TextState = src.m_TextState;
- m_GeneralState = src.m_GeneralState;
-}
-CPDF_ClipPathData::CPDF_ClipPathData()
-{
- m_PathCount = 0;
+void CPDF_GraphicStates::DefaultStates() {
+ m_ColorState.New()->Default();
+}
+void CPDF_GraphicStates::CopyStates(const CPDF_GraphicStates& src) {
+ m_ClipPath = src.m_ClipPath;
+ m_GraphState = src.m_GraphState;
+ m_ColorState = src.m_ColorState;
+ m_TextState = src.m_TextState;
+ m_GeneralState = src.m_GeneralState;
+}
+CPDF_ClipPathData::CPDF_ClipPathData() {
+ m_PathCount = 0;
+ m_pPathList = NULL;
+ m_pTypeList = NULL;
+ m_TextCount = 0;
+ m_pTextList = NULL;
+}
+CPDF_ClipPathData::~CPDF_ClipPathData() {
+ int i;
+ delete[] m_pPathList;
+ if (m_pTypeList) {
+ FX_Free(m_pTypeList);
+ }
+ for (i = m_TextCount - 1; i > -1; i--)
+ delete m_pTextList[i];
+ if (m_pTextList) {
+ FX_Free(m_pTextList);
+ }
+}
+CPDF_ClipPathData::CPDF_ClipPathData(const CPDF_ClipPathData& src) {
+ m_pPathList = NULL;
+ m_pPathList = NULL;
+ m_pTextList = NULL;
+ m_PathCount = src.m_PathCount;
+ if (m_PathCount) {
+ int alloc_size = m_PathCount;
+ if (alloc_size % 8) {
+ alloc_size += 8 - (alloc_size % 8);
+ }
+ m_pPathList = new CPDF_Path[alloc_size];
+ for (int i = 0; i < m_PathCount; i++) {
+ m_pPathList[i] = src.m_pPathList[i];
+ }
+ m_pTypeList = FX_Alloc(uint8_t, alloc_size);
+ FXSYS_memcpy(m_pTypeList, src.m_pTypeList, m_PathCount);
+ } else {
m_pPathList = NULL;
m_pTypeList = NULL;
- m_TextCount = 0;
+ }
+ m_TextCount = src.m_TextCount;
+ if (m_TextCount) {
+ m_pTextList = FX_Alloc(CPDF_TextObject*, m_TextCount);
+ for (int i = 0; i < m_TextCount; i++) {
+ if (src.m_pTextList[i]) {
+ m_pTextList[i] = new CPDF_TextObject;
+ m_pTextList[i]->Copy(src.m_pTextList[i]);
+ } else {
+ m_pTextList[i] = NULL;
+ }
+ }
+ } else {
m_pTextList = NULL;
-}
-CPDF_ClipPathData::~CPDF_ClipPathData()
-{
- int i;
- delete[] m_pPathList;
- if (m_pTypeList) {
- FX_Free(m_pTypeList);
- }
- for (i = m_TextCount - 1; i > -1; i --)
- delete m_pTextList[i];
- if (m_pTextList) {
- FX_Free(m_pTextList);
- }
-}
-CPDF_ClipPathData::CPDF_ClipPathData(const CPDF_ClipPathData& src)
-{
- m_pPathList = NULL;
- m_pPathList = NULL;
- m_pTextList = NULL;
- m_PathCount = src.m_PathCount;
- if (m_PathCount) {
- int alloc_size = m_PathCount;
- if (alloc_size % 8) {
- alloc_size += 8 - (alloc_size % 8);
+ }
+}
+void CPDF_ClipPathData::SetCount(int path_count, int text_count) {
+ ASSERT(m_TextCount == 0 && m_PathCount == 0);
+ if (path_count) {
+ m_PathCount = path_count;
+ int alloc_size = (path_count + 7) / 8 * 8;
+ m_pPathList = new CPDF_Path[alloc_size];
+ m_pTypeList = FX_Alloc(uint8_t, alloc_size);
+ }
+ if (text_count) {
+ m_TextCount = text_count;
+ m_pTextList = FX_Alloc(CPDF_TextObject*, text_count);
+ }
+}
+CPDF_Rect CPDF_ClipPath::GetClipBox() const {
+ CPDF_Rect rect;
+ FX_BOOL bStarted = FALSE;
+ int count = GetPathCount();
+ if (count) {
+ rect = GetPath(0).GetBoundingBox();
+ for (int i = 1; i < count; i++) {
+ CPDF_Rect path_rect = GetPath(i).GetBoundingBox();
+ rect.Intersect(path_rect);
+ }
+ bStarted = TRUE;
+ }
+ count = GetTextCount();
+ if (count) {
+ CPDF_Rect layer_rect;
+ FX_BOOL bLayerStarted = FALSE;
+ for (int i = 0; i < count; i++) {
+ CPDF_TextObject* pTextObj = GetText(i);
+ if (pTextObj == NULL) {
+ if (!bStarted) {
+ rect = layer_rect;
+ bStarted = TRUE;
+ } else {
+ rect.Intersect(layer_rect);
}
- m_pPathList = new CPDF_Path[alloc_size];
- for (int i = 0; i < m_PathCount; i ++) {
- m_pPathList[i] = src.m_pPathList[i];
+ bLayerStarted = FALSE;
+ } else {
+ if (!bLayerStarted) {
+ layer_rect = pTextObj->GetBBox(NULL);
+ bLayerStarted = TRUE;
+ } else {
+ layer_rect.Union(pTextObj->GetBBox(NULL));
}
- m_pTypeList = FX_Alloc(uint8_t, alloc_size);
- FXSYS_memcpy(m_pTypeList, src.m_pTypeList, m_PathCount);
- } else {
- m_pPathList = NULL;
- m_pTypeList = NULL;
- }
- m_TextCount = src.m_TextCount;
- if (m_TextCount) {
- m_pTextList = FX_Alloc(CPDF_TextObject*, m_TextCount);
- for (int i = 0; i < m_TextCount; i ++) {
- if (src.m_pTextList[i]) {
- m_pTextList[i] = new CPDF_TextObject;
- m_pTextList[i]->Copy(src.m_pTextList[i]);
- } else {
- m_pTextList[i] = NULL;
- }
- }
- } else {
- m_pTextList = NULL;
- }
-}
-void CPDF_ClipPathData::SetCount(int path_count, int text_count)
-{
- ASSERT(m_TextCount == 0 && m_PathCount == 0);
- if (path_count) {
- m_PathCount = path_count;
- int alloc_size = (path_count + 7) / 8 * 8;
- m_pPathList = new CPDF_Path[alloc_size];
- m_pTypeList = FX_Alloc(uint8_t, alloc_size);
- }
- if (text_count) {
- m_TextCount = text_count;
- m_pTextList = FX_Alloc(CPDF_TextObject*, text_count);
- }
-}
-CPDF_Rect CPDF_ClipPath::GetClipBox() const
-{
- CPDF_Rect rect;
- FX_BOOL bStarted = FALSE;
- int count = GetPathCount();
- if (count) {
- rect = GetPath(0).GetBoundingBox();
- for (int i = 1; i < count; i ++) {
- CPDF_Rect path_rect = GetPath(i).GetBoundingBox();
- rect.Intersect(path_rect);
- }
- bStarted = TRUE;
- }
- count = GetTextCount();
- if (count) {
- CPDF_Rect layer_rect;
- FX_BOOL bLayerStarted = FALSE;
- for (int i = 0; i < count; i ++) {
- CPDF_TextObject* pTextObj = GetText(i);
- if (pTextObj == NULL) {
- if (!bStarted) {
- rect = layer_rect;
- bStarted = TRUE;
- } else {
- rect.Intersect(layer_rect);
- }
- bLayerStarted = FALSE;
- } else {
- if (!bLayerStarted) {
- layer_rect = pTextObj->GetBBox(NULL);
- bLayerStarted = TRUE;
- } else {
- layer_rect.Union(pTextObj->GetBBox(NULL));
- }
- }
- }
- }
- return rect;
-}
-void CPDF_ClipPath::AppendPath(CPDF_Path path, int type, FX_BOOL bAutoMerge)
-{
- CPDF_ClipPathData* pData = GetModify();
- if (pData->m_PathCount && bAutoMerge) {
- CPDF_Path old_path = pData->m_pPathList[pData->m_PathCount - 1];
- if (old_path.IsRect()) {
- CPDF_Rect old_rect(old_path.GetPointX(0), old_path.GetPointY(0),
- old_path.GetPointX(2), old_path.GetPointY(2));
- CPDF_Rect new_rect = path.GetBoundingBox();
- if (old_rect.Contains(new_rect)) {
- pData->m_PathCount --;
- pData->m_pPathList[pData->m_PathCount].SetNull();
- }
- }
- }
- if (pData->m_PathCount % 8 == 0) {
- CPDF_Path* pNewPath = new CPDF_Path[pData->m_PathCount + 8];
- for (int i = 0; i < pData->m_PathCount; i ++) {
- pNewPath[i] = pData->m_pPathList[i];
- }
- delete[] pData->m_pPathList;
- uint8_t* pNewType = FX_Alloc(uint8_t, pData->m_PathCount + 8);
- FXSYS_memcpy(pNewType, pData->m_pTypeList, pData->m_PathCount);
- if (pData->m_pTypeList) {
- FX_Free(pData->m_pTypeList);
- }
- pData->m_pPathList = pNewPath;
- pData->m_pTypeList = pNewType;
- }
- pData->m_pPathList[pData->m_PathCount] = path;
- pData->m_pTypeList[pData->m_PathCount] = (uint8_t)type;
- pData->m_PathCount ++;
-}
-void CPDF_ClipPath::DeletePath(int index)
-{
- CPDF_ClipPathData* pData = GetModify();
- if (index >= pData->m_PathCount) {
- return;
- }
- pData->m_pPathList[index].SetNull();
- for (int i = index; i < pData->m_PathCount - 1; i ++) {
- pData->m_pPathList[i] = pData->m_pPathList[i + 1];
- }
- pData->m_pPathList[pData->m_PathCount - 1].SetNull();
- FXSYS_memmove(pData->m_pTypeList + index, pData->m_pTypeList + index + 1, pData->m_PathCount - index - 1);
- pData->m_PathCount --;
+ }
+ }
+ }
+ return rect;
+}
+void CPDF_ClipPath::AppendPath(CPDF_Path path, int type, FX_BOOL bAutoMerge) {
+ CPDF_ClipPathData* pData = GetModify();
+ if (pData->m_PathCount && bAutoMerge) {
+ CPDF_Path old_path = pData->m_pPathList[pData->m_PathCount - 1];
+ if (old_path.IsRect()) {
+ CPDF_Rect old_rect(old_path.GetPointX(0), old_path.GetPointY(0),
+ old_path.GetPointX(2), old_path.GetPointY(2));
+ CPDF_Rect new_rect = path.GetBoundingBox();
+ if (old_rect.Contains(new_rect)) {
+ pData->m_PathCount--;
+ pData->m_pPathList[pData->m_PathCount].SetNull();
+ }
+ }
+ }
+ if (pData->m_PathCount % 8 == 0) {
+ CPDF_Path* pNewPath = new CPDF_Path[pData->m_PathCount + 8];
+ for (int i = 0; i < pData->m_PathCount; i++) {
+ pNewPath[i] = pData->m_pPathList[i];
+ }
+ delete[] pData->m_pPathList;
+ uint8_t* pNewType = FX_Alloc(uint8_t, pData->m_PathCount + 8);
+ FXSYS_memcpy(pNewType, pData->m_pTypeList, pData->m_PathCount);
+ if (pData->m_pTypeList) {
+ FX_Free(pData->m_pTypeList);
+ }
+ pData->m_pPathList = pNewPath;
+ pData->m_pTypeList = pNewType;
+ }
+ pData->m_pPathList[pData->m_PathCount] = path;
+ pData->m_pTypeList[pData->m_PathCount] = (uint8_t)type;
+ pData->m_PathCount++;
+}
+void CPDF_ClipPath::DeletePath(int index) {
+ CPDF_ClipPathData* pData = GetModify();
+ if (index >= pData->m_PathCount) {
+ return;
+ }
+ pData->m_pPathList[index].SetNull();
+ for (int i = index; i < pData->m_PathCount - 1; i++) {
+ pData->m_pPathList[i] = pData->m_pPathList[i + 1];
+ }
+ pData->m_pPathList[pData->m_PathCount - 1].SetNull();
+ FXSYS_memmove(pData->m_pTypeList + index, pData->m_pTypeList + index + 1,
+ pData->m_PathCount - index - 1);
+ pData->m_PathCount--;
}
#define FPDF_CLIPPATH_MAX_TEXTS 1024
-void CPDF_ClipPath::AppendTexts(CPDF_TextObject** pTexts, int count)
-{
- CPDF_ClipPathData* pData = GetModify();
- if (pData->m_TextCount + count > FPDF_CLIPPATH_MAX_TEXTS) {
- for (int i = 0; i < count; i ++) {
- delete pTexts[i];
+void CPDF_ClipPath::AppendTexts(CPDF_TextObject** pTexts, int count) {
+ CPDF_ClipPathData* pData = GetModify();
+ if (pData->m_TextCount + count > FPDF_CLIPPATH_MAX_TEXTS) {
+ for (int i = 0; i < count; i++) {
+ delete pTexts[i];
+ }
+ return;
+ }
+ CPDF_TextObject** pNewList =
+ FX_Alloc(CPDF_TextObject*, pData->m_TextCount + count + 1);
+ if (pData->m_pTextList) {
+ FXSYS_memcpy(pNewList, pData->m_pTextList,
+ pData->m_TextCount * sizeof(CPDF_TextObject*));
+ FX_Free(pData->m_pTextList);
+ }
+ pData->m_pTextList = pNewList;
+ for (int i = 0; i < count; i++) {
+ pData->m_pTextList[pData->m_TextCount + i] = pTexts[i];
+ }
+ pData->m_pTextList[pData->m_TextCount + count] = NULL;
+ pData->m_TextCount += count + 1;
+}
+void CPDF_ClipPath::Transform(const CPDF_Matrix& matrix) {
+ CPDF_ClipPathData* pData = GetModify();
+ int i;
+ for (i = 0; i < pData->m_PathCount; i++) {
+ pData->m_pPathList[i].Transform(&matrix);
+ }
+ for (i = 0; i < pData->m_TextCount; i++)
+ if (pData->m_pTextList[i]) {
+ pData->m_pTextList[i]->Transform(matrix);
+ }
+}
+CPDF_ColorStateData::CPDF_ColorStateData(const CPDF_ColorStateData& src) {
+ m_FillColor.Copy(&src.m_FillColor);
+ m_FillRGB = src.m_FillRGB;
+ m_StrokeColor.Copy(&src.m_StrokeColor);
+ m_StrokeRGB = src.m_StrokeRGB;
+}
+void CPDF_ColorStateData::Default() {
+ m_FillRGB = m_StrokeRGB = 0;
+ m_FillColor.SetColorSpace(CPDF_ColorSpace::GetStockCS(PDFCS_DEVICEGRAY));
+ m_StrokeColor.SetColorSpace(CPDF_ColorSpace::GetStockCS(PDFCS_DEVICEGRAY));
+}
+void CPDF_ColorState::SetFillColor(CPDF_ColorSpace* pCS,
+ FX_FLOAT* pValue,
+ int nValues) {
+ CPDF_ColorStateData* pData = GetModify();
+ SetColor(pData->m_FillColor, pData->m_FillRGB, pCS, pValue, nValues);
+}
+void CPDF_ColorState::SetStrokeColor(CPDF_ColorSpace* pCS,
+ FX_FLOAT* pValue,
+ int nValues) {
+ CPDF_ColorStateData* pData = GetModify();
+ SetColor(pData->m_StrokeColor, pData->m_StrokeRGB, pCS, pValue, nValues);
+}
+void CPDF_ColorState::SetColor(CPDF_Color& color,
+ FX_DWORD& rgb,
+ CPDF_ColorSpace* pCS,
+ FX_FLOAT* pValue,
+ int nValues) {
+ if (pCS) {
+ color.SetColorSpace(pCS);
+ } else if (color.IsNull()) {
+ color.SetColorSpace(CPDF_ColorSpace::GetStockCS(PDFCS_DEVICEGRAY));
+ }
+ if (color.m_pCS->CountComponents() > nValues) {
+ return;
+ }
+ color.SetValue(pValue);
+ int R, G, B;
+ rgb = color.GetRGB(R, G, B) ? FXSYS_RGB(R, G, B) : (FX_DWORD)-1;
+}
+void CPDF_ColorState::SetFillPattern(CPDF_Pattern* pPattern,
+ FX_FLOAT* pValue,
+ int nValues) {
+ CPDF_ColorStateData* pData = GetModify();
+ pData->m_FillColor.SetValue(pPattern, pValue, nValues);
+ int R, G, B;
+ FX_BOOL ret = pData->m_FillColor.GetRGB(R, G, B);
+ if (pPattern->m_PatternType == 1 &&
+ ((CPDF_TilingPattern*)pPattern)->m_bColored && !ret) {
+ pData->m_FillRGB = 0x00BFBFBF;
+ return;
+ }
+ pData->m_FillRGB = ret ? FXSYS_RGB(R, G, B) : (FX_DWORD)-1;
+}
+void CPDF_ColorState::SetStrokePattern(CPDF_Pattern* pPattern,
+ FX_FLOAT* pValue,
+ int nValues) {
+ CPDF_ColorStateData* pData = GetModify();
+ pData->m_StrokeColor.SetValue(pPattern, pValue, nValues);
+ int R, G, B;
+ FX_BOOL ret = pData->m_StrokeColor.GetRGB(R, G, B);
+ if (pPattern->m_PatternType == 1 &&
+ ((CPDF_TilingPattern*)pPattern)->m_bColored && !ret) {
+ pData->m_StrokeRGB = 0x00BFBFBF;
+ return;
+ }
+ pData->m_StrokeRGB =
+ pData->m_StrokeColor.GetRGB(R, G, B) ? FXSYS_RGB(R, G, B) : (FX_DWORD)-1;
+}
+CPDF_TextStateData::CPDF_TextStateData() {
+ m_pFont = NULL;
+ m_pDocument = NULL;
+ m_FontSize = 1.0f;
+ m_WordSpace = 0;
+ m_CharSpace = 0;
+ m_TextMode = 0;
+ m_Matrix[0] = m_Matrix[3] = 1.0f;
+ m_Matrix[1] = m_Matrix[2] = 0;
+ m_CTM[0] = m_CTM[3] = 1.0f;
+ m_CTM[1] = m_CTM[2] = 0;
+}
+CPDF_TextStateData::CPDF_TextStateData(const CPDF_TextStateData& src) {
+ if (this == &src) {
+ return;
+ }
+ FXSYS_memcpy(this, &src, sizeof(CPDF_TextStateData));
+ if (m_pDocument && m_pFont) {
+ m_pFont =
+ m_pDocument->GetPageData()->GetFont(m_pFont->GetFontDict(), FALSE);
+ }
+}
+CPDF_TextStateData::~CPDF_TextStateData() {
+ if (m_pDocument && m_pFont) {
+ CPDF_DocPageData* pPageData = m_pDocument->GetPageData();
+ if (pPageData && !pPageData->IsForceClear()) {
+ pPageData->ReleaseFont(m_pFont->GetFontDict());
+ }
+ }
+}
+void CPDF_TextState::SetFont(CPDF_Font* pFont) {
+ CPDF_TextStateData* pStateData = GetModify();
+ if (pStateData) {
+ CPDF_Document* pDoc = pStateData->m_pDocument;
+ CPDF_DocPageData* pPageData = pDoc ? pDoc->GetPageData() : NULL;
+ if (pPageData && pStateData->m_pFont && !pPageData->IsForceClear()) {
+ pPageData->ReleaseFont(pStateData->m_pFont->GetFontDict());
+ }
+ pStateData->m_pDocument = pFont ? pFont->m_pDocument : NULL;
+ pStateData->m_pFont = pFont;
+ }
+}
+FX_FLOAT CPDF_TextState::GetFontSizeV() const {
+ FX_FLOAT* pMatrix = GetMatrix();
+ FX_FLOAT unit = FXSYS_sqrt2(pMatrix[1], pMatrix[3]);
+ FX_FLOAT size = FXSYS_Mul(unit, GetFontSize());
+ return (FX_FLOAT)FXSYS_fabs(size);
+}
+FX_FLOAT CPDF_TextState::GetFontSizeH() const {
+ FX_FLOAT* pMatrix = GetMatrix();
+ FX_FLOAT unit = FXSYS_sqrt2(pMatrix[0], pMatrix[2]);
+ FX_FLOAT size = FXSYS_Mul(unit, GetFontSize());
+ return (FX_FLOAT)FXSYS_fabs(size);
+}
+FX_FLOAT CPDF_TextState::GetBaselineAngle() const {
+ FX_FLOAT* m_Matrix = GetMatrix();
+ return FXSYS_atan2(m_Matrix[2], m_Matrix[0]);
+}
+FX_FLOAT CPDF_TextState::GetShearAngle() const {
+ FX_FLOAT* m_Matrix = GetMatrix();
+ FX_FLOAT shear_angle = FXSYS_atan2(m_Matrix[1], m_Matrix[3]);
+ return GetBaselineAngle() + shear_angle;
+}
+CPDF_GeneralStateData::CPDF_GeneralStateData() {
+ FXSYS_memset(this, 0, sizeof(CPDF_GeneralStateData));
+ FXSYS_strcpy((FX_CHAR*)m_BlendMode, "Normal");
+ m_StrokeAlpha = 1.0f;
+ m_FillAlpha = 1.0f;
+ m_Flatness = 1.0f;
+ m_Matrix.SetIdentity();
+}
+CPDF_GeneralStateData::CPDF_GeneralStateData(const CPDF_GeneralStateData& src) {
+ FXSYS_memcpy(this, &src, sizeof(CPDF_GeneralStateData));
+ if (src.m_pTransferFunc && src.m_pTransferFunc->m_pPDFDoc) {
+ CPDF_DocRenderData* pDocCache =
+ src.m_pTransferFunc->m_pPDFDoc->GetRenderData();
+ if (!pDocCache) {
+ return;
+ }
+ m_pTransferFunc = pDocCache->GetTransferFunc(m_pTR);
+ }
+}
+CPDF_GeneralStateData::~CPDF_GeneralStateData() {
+ if (m_pTransferFunc && m_pTransferFunc->m_pPDFDoc) {
+ CPDF_DocRenderData* pDocCache = m_pTransferFunc->m_pPDFDoc->GetRenderData();
+ if (!pDocCache) {
+ return;
+ }
+ pDocCache->ReleaseTransferFunc(m_pTR);
+ }
+}
+static int GetBlendType(const CFX_ByteStringC& mode) {
+ switch (mode.GetID()) {
+ case FXBSTR_ID('N', 'o', 'r', 'm'):
+ case FXBSTR_ID('C', 'o', 'm', 'p'):
+ return FXDIB_BLEND_NORMAL;
+ case FXBSTR_ID('M', 'u', 'l', 't'):
+ return FXDIB_BLEND_MULTIPLY;
+ case FXBSTR_ID('S', 'c', 'r', 'e'):
+ return FXDIB_BLEND_SCREEN;
+ case FXBSTR_ID('O', 'v', 'e', 'r'):
+ return FXDIB_BLEND_OVERLAY;
+ case FXBSTR_ID('D', 'a', 'r', 'k'):
+ return FXDIB_BLEND_DARKEN;
+ case FXBSTR_ID('L', 'i', 'g', 'h'):
+ return FXDIB_BLEND_LIGHTEN;
+ case FXBSTR_ID('C', 'o', 'l', 'o'):
+ if (mode.GetLength() == 10) {
+ return FXDIB_BLEND_COLORDODGE;
+ }
+ if (mode.GetLength() == 9) {
+ return FXDIB_BLEND_COLORBURN;
+ }
+ return FXDIB_BLEND_COLOR;
+ case FXBSTR_ID('H', 'a', 'r', 'd'):
+ return FXDIB_BLEND_HARDLIGHT;
+ case FXBSTR_ID('S', 'o', 'f', 't'):
+ return FXDIB_BLEND_SOFTLIGHT;
+ case FXBSTR_ID('D', 'i', 'f', 'f'):
+ return FXDIB_BLEND_DIFFERENCE;
+ case FXBSTR_ID('E', 'x', 'c', 'l'):
+ return FXDIB_BLEND_EXCLUSION;
+ case FXBSTR_ID('H', 'u', 'e', 0):
+ return FXDIB_BLEND_HUE;
+ case FXBSTR_ID('S', 'a', 't', 'u'):
+ return FXDIB_BLEND_SATURATION;
+ case FXBSTR_ID('L', 'u', 'm', 'i'):
+ return FXDIB_BLEND_LUMINOSITY;
+ }
+ return FXDIB_BLEND_NORMAL;
+}
+void CPDF_GeneralStateData::SetBlendMode(const CFX_ByteStringC& blend_mode) {
+ if (blend_mode.GetLength() > 15) {
+ return;
+ }
+ FXSYS_memcpy(m_BlendMode, blend_mode.GetPtr(), blend_mode.GetLength());
+ m_BlendMode[blend_mode.GetLength()] = 0;
+ m_BlendType = ::GetBlendType(blend_mode);
+}
+int RI_StringToId(const CFX_ByteString& ri) {
+ FX_DWORD id = ri.GetID();
+ if (id == FXBSTR_ID('A', 'b', 's', 'o')) {
+ return 1;
+ }
+ if (id == FXBSTR_ID('S', 'a', 't', 'u')) {
+ return 2;
+ }
+ if (id == FXBSTR_ID('P', 'e', 'r', 'c')) {
+ return 3;
+ }
+ return 0;
+}
+void CPDF_GeneralState::SetRenderIntent(const CFX_ByteString& ri) {
+ GetModify()->m_RenderIntent = RI_StringToId(ri);
+}
+CPDF_AllStates::CPDF_AllStates() {
+ m_TextX = m_TextY = m_TextLineX = m_TextLineY = 0;
+ m_TextLeading = 0;
+ m_TextRise = 0;
+ m_TextHorzScale = 1.0f;
+}
+CPDF_AllStates::~CPDF_AllStates() {}
+void CPDF_AllStates::Copy(const CPDF_AllStates& src) {
+ CopyStates(src);
+ m_TextMatrix.Copy(src.m_TextMatrix);
+ m_ParentMatrix.Copy(src.m_ParentMatrix);
+ m_CTM.Copy(src.m_CTM);
+ m_TextX = src.m_TextX;
+ m_TextY = src.m_TextY;
+ m_TextLineX = src.m_TextLineX;
+ m_TextLineY = src.m_TextLineY;
+ m_TextLeading = src.m_TextLeading;
+ m_TextRise = src.m_TextRise;
+ m_TextHorzScale = src.m_TextHorzScale;
+}
+void CPDF_AllStates::SetLineDash(CPDF_Array* pArray,
+ FX_FLOAT phase,
+ FX_FLOAT scale) {
+ CFX_GraphStateData* pData = m_GraphState.GetModify();
+ pData->m_DashPhase = FXSYS_Mul(phase, scale);
+ pData->SetDashCount(pArray->GetCount());
+ for (FX_DWORD i = 0; i < pArray->GetCount(); i++) {
+ pData->m_DashArray[i] = FXSYS_Mul(pArray->GetNumber(i), scale);
+ }
+}
+void CPDF_AllStates::ProcessExtGS(CPDF_Dictionary* pGS,
+ CPDF_StreamContentParser* pParser) {
+ CPDF_GeneralStateData* pGeneralState = m_GeneralState.GetModify();
+ FX_POSITION pos = pGS->GetStartPos();
+ while (pos) {
+ CFX_ByteString key_str;
+ CPDF_Object* pElement = pGS->GetNextElement(pos, key_str);
+ CPDF_Object* pObject = pElement ? pElement->GetDirect() : NULL;
+ if (pObject == NULL) {
+ continue;
+ }
+ FX_DWORD key = key_str.GetID();
+ switch (key) {
+ case FXBSTR_ID('L', 'W', 0, 0):
+ m_GraphState.GetModify()->m_LineWidth = pObject->GetNumber();
+ break;
+ case FXBSTR_ID('L', 'C', 0, 0):
+ m_GraphState.GetModify()->m_LineCap =
+ (CFX_GraphStateData::LineCap)pObject->GetInteger();
+ break;
+ case FXBSTR_ID('L', 'J', 0, 0):
+ m_GraphState.GetModify()->m_LineJoin =
+ (CFX_GraphStateData::LineJoin)pObject->GetInteger();
+ break;
+ case FXBSTR_ID('M', 'L', 0, 0):
+ m_GraphState.GetModify()->m_MiterLimit = pObject->GetNumber();
+ break;
+ case FXBSTR_ID('D', 0, 0, 0): {
+ if (pObject->GetType() != PDFOBJ_ARRAY) {
+ break;
}
- return;
- }
- CPDF_TextObject** pNewList = FX_Alloc(CPDF_TextObject*, pData->m_TextCount + count + 1);
- if (pData->m_pTextList) {
- FXSYS_memcpy(pNewList, pData->m_pTextList, pData->m_TextCount * sizeof(CPDF_TextObject*));
- FX_Free(pData->m_pTextList);
- }
- pData->m_pTextList = pNewList;
- for (int i = 0; i < count; i ++) {
- pData->m_pTextList[pData->m_TextCount + i] = pTexts[i];
- }
- pData->m_pTextList[pData->m_TextCount + count] = NULL;
- pData->m_TextCount += count + 1;
-}
-void CPDF_ClipPath::Transform(const CPDF_Matrix& matrix)
-{
- CPDF_ClipPathData* pData = GetModify();
- int i;
- for (i = 0; i < pData->m_PathCount; i ++) {
- pData->m_pPathList[i].Transform(&matrix);
- }
- for (i = 0; i < pData->m_TextCount; i ++)
- if (pData->m_pTextList[i]) {
- pData->m_pTextList[i]->Transform(matrix);
+ CPDF_Array* pDash = (CPDF_Array*)pObject;
+ CPDF_Array* pArray = pDash->GetArray(0);
+ if (pArray == NULL) {
+ break;
}
-}
-CPDF_ColorStateData::CPDF_ColorStateData(const CPDF_ColorStateData& src)
-{
- m_FillColor.Copy(&src.m_FillColor);
- m_FillRGB = src.m_FillRGB;
- m_StrokeColor.Copy(&src.m_StrokeColor);
- m_StrokeRGB = src.m_StrokeRGB;
-}
-void CPDF_ColorStateData::Default()
-{
- m_FillRGB = m_StrokeRGB = 0;
- m_FillColor.SetColorSpace(CPDF_ColorSpace::GetStockCS(PDFCS_DEVICEGRAY));
- m_StrokeColor.SetColorSpace(CPDF_ColorSpace::GetStockCS(PDFCS_DEVICEGRAY));
-}
-void CPDF_ColorState::SetFillColor(CPDF_ColorSpace* pCS, FX_FLOAT* pValue, int nValues)
-{
- CPDF_ColorStateData* pData = GetModify();
- SetColor(pData->m_FillColor, pData->m_FillRGB, pCS, pValue, nValues);
-}
-void CPDF_ColorState::SetStrokeColor(CPDF_ColorSpace* pCS, FX_FLOAT* pValue, int nValues)
-{
- CPDF_ColorStateData* pData = GetModify();
- SetColor(pData->m_StrokeColor, pData->m_StrokeRGB, pCS, pValue, nValues);
-}
-void CPDF_ColorState::SetColor(CPDF_Color& color, FX_DWORD& rgb, CPDF_ColorSpace* pCS, FX_FLOAT* pValue, int nValues)
-{
- if (pCS) {
- color.SetColorSpace(pCS);
- } else if (color.IsNull()) {
- color.SetColorSpace(CPDF_ColorSpace::GetStockCS(PDFCS_DEVICEGRAY));
- }
- if (color.m_pCS->CountComponents() > nValues) {
- return;
- }
- color.SetValue(pValue);
- int R, G, B;
- rgb = color.GetRGB(R, G, B) ? FXSYS_RGB(R, G, B) : (FX_DWORD) - 1;
-}
-void CPDF_ColorState::SetFillPattern(CPDF_Pattern* pPattern, FX_FLOAT* pValue, int nValues)
-{
- CPDF_ColorStateData* pData = GetModify();
- pData->m_FillColor.SetValue(pPattern, pValue, nValues);
- int R, G, B;
- FX_BOOL ret = pData->m_FillColor.GetRGB(R, G, B);
- if (pPattern->m_PatternType == 1 && ((CPDF_TilingPattern*)pPattern)->m_bColored && !ret) {
- pData->m_FillRGB = 0x00BFBFBF;
- return;
- }
- pData->m_FillRGB = ret ? FXSYS_RGB(R, G, B) : (FX_DWORD) - 1;
-}
-void CPDF_ColorState::SetStrokePattern(CPDF_Pattern* pPattern, FX_FLOAT* pValue, int nValues)
-{
- CPDF_ColorStateData* pData = GetModify();
- pData->m_StrokeColor.SetValue(pPattern, pValue, nValues);
- int R, G, B;
- FX_BOOL ret = pData->m_StrokeColor.GetRGB(R, G, B);
- if (pPattern->m_PatternType == 1 && ((CPDF_TilingPattern*)pPattern)->m_bColored && !ret) {
- pData->m_StrokeRGB = 0x00BFBFBF;
- return;
- }
- pData->m_StrokeRGB = pData->m_StrokeColor.GetRGB(R, G, B) ? FXSYS_RGB(R, G, B) : (FX_DWORD) - 1;
-}
-CPDF_TextStateData::CPDF_TextStateData()
-{
- m_pFont = NULL;
- m_pDocument = NULL;
- m_FontSize = 1.0f;
- m_WordSpace = 0;
- m_CharSpace = 0;
- m_TextMode = 0;
- m_Matrix[0] = m_Matrix[3] = 1.0f;
- m_Matrix[1] = m_Matrix[2] = 0;
- m_CTM[0] = m_CTM[3] = 1.0f;
- m_CTM[1] = m_CTM[2] = 0;
-}
-CPDF_TextStateData::CPDF_TextStateData(const CPDF_TextStateData& src)
-{
- if (this == &src) {
- return;
- }
- FXSYS_memcpy(this, &src, sizeof(CPDF_TextStateData));
- if (m_pDocument && m_pFont) {
- m_pFont = m_pDocument->GetPageData()->GetFont(m_pFont->GetFontDict(), FALSE);
- }
-}
-CPDF_TextStateData::~CPDF_TextStateData()
-{
- if (m_pDocument && m_pFont) {
- CPDF_DocPageData *pPageData = m_pDocument->GetPageData();
- if (pPageData && !pPageData->IsForceClear()) {
- pPageData->ReleaseFont(m_pFont->GetFontDict());
+ SetLineDash(pArray, pDash->GetNumber(1), 1.0f);
+ break;
+ }
+ case FXBSTR_ID('R', 'I', 0, 0):
+ m_GeneralState.SetRenderIntent(pObject->GetString());
+ break;
+ case FXBSTR_ID('F', 'o', 'n', 't'): {
+ if (pObject->GetType() != PDFOBJ_ARRAY) {
+ break;
}
- }
-}
-void CPDF_TextState::SetFont(CPDF_Font* pFont)
-{
- CPDF_TextStateData* pStateData = GetModify();
- if (pStateData) {
- CPDF_Document* pDoc = pStateData->m_pDocument;
- CPDF_DocPageData *pPageData = pDoc ? pDoc->GetPageData() : NULL;
- if (pPageData && pStateData->m_pFont && !pPageData->IsForceClear()) {
- pPageData->ReleaseFont(pStateData->m_pFont->GetFontDict());
+ CPDF_Array* pFont = (CPDF_Array*)pObject;
+ m_TextState.GetModify()->m_FontSize = pFont->GetNumber(1);
+ m_TextState.SetFont(pParser->FindFont(pFont->GetString(0)));
+ break;
+ }
+ case FXBSTR_ID('T', 'R', 0, 0):
+ if (pGS->KeyExist(FX_BSTRC("TR2"))) {
+ continue;
}
- pStateData->m_pDocument = pFont ? pFont->m_pDocument : NULL;
- pStateData->m_pFont = pFont;
- }
-}
-FX_FLOAT CPDF_TextState::GetFontSizeV() const
-{
- FX_FLOAT* pMatrix = GetMatrix();
- FX_FLOAT unit = FXSYS_sqrt2(pMatrix[1], pMatrix[3]);
- FX_FLOAT size = FXSYS_Mul(unit, GetFontSize());
- return (FX_FLOAT)FXSYS_fabs(size);
-}
-FX_FLOAT CPDF_TextState::GetFontSizeH() const
-{
- FX_FLOAT* pMatrix = GetMatrix();
- FX_FLOAT unit = FXSYS_sqrt2(pMatrix[0], pMatrix[2]);
- FX_FLOAT size = FXSYS_Mul(unit, GetFontSize());
- return (FX_FLOAT)FXSYS_fabs(size);
-}
-FX_FLOAT CPDF_TextState::GetBaselineAngle() const
-{
- FX_FLOAT* m_Matrix = GetMatrix();
- return FXSYS_atan2(m_Matrix[2], m_Matrix[0]);
-}
-FX_FLOAT CPDF_TextState::GetShearAngle() const
-{
- FX_FLOAT* m_Matrix = GetMatrix();
- FX_FLOAT shear_angle = FXSYS_atan2(m_Matrix[1], m_Matrix[3]);
- return GetBaselineAngle() + shear_angle;
-}
-CPDF_GeneralStateData::CPDF_GeneralStateData()
-{
- FXSYS_memset(this, 0, sizeof(CPDF_GeneralStateData));
- FXSYS_strcpy((FX_CHAR*)m_BlendMode, "Normal");
- m_StrokeAlpha = 1.0f;
- m_FillAlpha = 1.0f;
- m_Flatness = 1.0f;
- m_Matrix.SetIdentity();
-}
-CPDF_GeneralStateData::CPDF_GeneralStateData(const CPDF_GeneralStateData& src)
-{
- FXSYS_memcpy(this, &src, sizeof(CPDF_GeneralStateData));
- if (src.m_pTransferFunc && src.m_pTransferFunc->m_pPDFDoc) {
- CPDF_DocRenderData* pDocCache = src.m_pTransferFunc->m_pPDFDoc->GetRenderData();
- if (!pDocCache) {
- return;
+ case FXBSTR_ID('T', 'R', '2', 0):
+ if (pObject && pObject->GetType() != PDFOBJ_NAME) {
+ pGeneralState->m_pTR = pObject;
+ } else {
+ pGeneralState->m_pTR = NULL;
}
- m_pTransferFunc = pDocCache->GetTransferFunc(m_pTR);
- }
-}
-CPDF_GeneralStateData::~CPDF_GeneralStateData()
-{
- if (m_pTransferFunc && m_pTransferFunc->m_pPDFDoc) {
- CPDF_DocRenderData* pDocCache = m_pTransferFunc->m_pPDFDoc->GetRenderData();
- if (!pDocCache) {
- return;
+ break;
+ case FXBSTR_ID('B', 'M', 0, 0): {
+ CFX_ByteString mode;
+ if (pObject->GetType() == PDFOBJ_ARRAY) {
+ mode = ((CPDF_Array*)pObject)->GetString(0);
+ } else {
+ mode = pObject->GetString();
}
- pDocCache->ReleaseTransferFunc(m_pTR);
- }
-}
-static int GetBlendType(const CFX_ByteStringC& mode)
-{
- switch (mode.GetID()) {
- case FXBSTR_ID('N', 'o', 'r', 'm'):
- case FXBSTR_ID('C', 'o', 'm', 'p'):
- return FXDIB_BLEND_NORMAL;
- case FXBSTR_ID('M', 'u', 'l', 't'):
- return FXDIB_BLEND_MULTIPLY;
- case FXBSTR_ID('S', 'c', 'r', 'e'):
- return FXDIB_BLEND_SCREEN;
- case FXBSTR_ID('O', 'v', 'e', 'r'):
- return FXDIB_BLEND_OVERLAY;
- case FXBSTR_ID('D', 'a', 'r', 'k'):
- return FXDIB_BLEND_DARKEN;
- case FXBSTR_ID('L', 'i', 'g', 'h'):
- return FXDIB_BLEND_LIGHTEN;
- case FXBSTR_ID('C', 'o', 'l', 'o'):
- if (mode.GetLength() == 10) {
- return FXDIB_BLEND_COLORDODGE;
- }
- if (mode.GetLength() == 9) {
- return FXDIB_BLEND_COLORBURN;
- }
- return FXDIB_BLEND_COLOR;
- case FXBSTR_ID('H', 'a', 'r', 'd'):
- return FXDIB_BLEND_HARDLIGHT;
- case FXBSTR_ID('S', 'o', 'f', 't'):
- return FXDIB_BLEND_SOFTLIGHT;
- case FXBSTR_ID('D', 'i', 'f', 'f'):
- return FXDIB_BLEND_DIFFERENCE;
- case FXBSTR_ID('E', 'x', 'c', 'l'):
- return FXDIB_BLEND_EXCLUSION;
- case FXBSTR_ID('H', 'u', 'e', 0):
- return FXDIB_BLEND_HUE;
- case FXBSTR_ID('S', 'a', 't', 'u'):
- return FXDIB_BLEND_SATURATION;
- case FXBSTR_ID('L', 'u', 'm', 'i'):
- return FXDIB_BLEND_LUMINOSITY;
- }
- return FXDIB_BLEND_NORMAL;
-}
-void CPDF_GeneralStateData::SetBlendMode(const CFX_ByteStringC& blend_mode)
-{
- if (blend_mode.GetLength() > 15) {
- return;
- }
- FXSYS_memcpy(m_BlendMode, blend_mode.GetPtr(), blend_mode.GetLength());
- m_BlendMode[blend_mode.GetLength()] = 0;
- m_BlendType = ::GetBlendType(blend_mode);
-}
-int RI_StringToId(const CFX_ByteString& ri)
-{
- FX_DWORD id = ri.GetID();
- if (id == FXBSTR_ID('A', 'b', 's', 'o')) {
- return 1;
- }
- if (id == FXBSTR_ID('S', 'a', 't', 'u')) {
- return 2;
- }
- if (id == FXBSTR_ID('P', 'e', 'r', 'c')) {
- return 3;
- }
- return 0;
-}
-void CPDF_GeneralState::SetRenderIntent(const CFX_ByteString& ri)
-{
- GetModify()->m_RenderIntent = RI_StringToId(ri);
-}
-CPDF_AllStates::CPDF_AllStates()
-{
- m_TextX = m_TextY = m_TextLineX = m_TextLineY = 0;
- m_TextLeading = 0;
- m_TextRise = 0;
- m_TextHorzScale = 1.0f;
-}
-CPDF_AllStates::~CPDF_AllStates()
-{
-}
-void CPDF_AllStates::Copy(const CPDF_AllStates& src)
-{
- CopyStates(src);
- m_TextMatrix.Copy(src.m_TextMatrix);
- m_ParentMatrix.Copy(src.m_ParentMatrix);
- m_CTM.Copy(src.m_CTM);
- m_TextX = src.m_TextX;
- m_TextY = src.m_TextY;
- m_TextLineX = src.m_TextLineX;
- m_TextLineY = src.m_TextLineY;
- m_TextLeading = src.m_TextLeading;
- m_TextRise = src.m_TextRise;
- m_TextHorzScale = src.m_TextHorzScale;
-}
-void CPDF_AllStates::SetLineDash(CPDF_Array* pArray, FX_FLOAT phase, FX_FLOAT scale)
-{
- CFX_GraphStateData* pData = m_GraphState.GetModify();
- pData->m_DashPhase = FXSYS_Mul(phase, scale);
- pData->SetDashCount(pArray->GetCount());
- for (FX_DWORD i = 0; i < pArray->GetCount(); i ++) {
- pData->m_DashArray[i] = FXSYS_Mul(pArray->GetNumber(i), scale);
- }
-}
-void CPDF_AllStates::ProcessExtGS(CPDF_Dictionary* pGS, CPDF_StreamContentParser* pParser)
-{
- CPDF_GeneralStateData* pGeneralState = m_GeneralState.GetModify();
- FX_POSITION pos = pGS->GetStartPos();
- while (pos) {
- CFX_ByteString key_str;
- CPDF_Object* pElement = pGS->GetNextElement(pos, key_str);
- CPDF_Object* pObject = pElement ? pElement->GetDirect() : NULL;
- if (pObject == NULL) {
- continue;
+ pGeneralState->SetBlendMode(mode);
+ if (pGeneralState->m_BlendType > FXDIB_BLEND_MULTIPLY) {
+ pParser->GetObjectList()->m_bBackgroundAlphaNeeded = TRUE;
}
- FX_DWORD key = key_str.GetID();
- switch (key) {
- case FXBSTR_ID('L', 'W', 0, 0):
- m_GraphState.GetModify()->m_LineWidth = pObject->GetNumber();
- break;
- case FXBSTR_ID('L', 'C', 0, 0):
- m_GraphState.GetModify()->m_LineCap = (CFX_GraphStateData::LineCap)pObject->GetInteger();
- break;
- case FXBSTR_ID('L', 'J', 0, 0):
- m_GraphState.GetModify()->m_LineJoin = (CFX_GraphStateData::LineJoin)pObject->GetInteger();
- break;
- case FXBSTR_ID('M', 'L', 0, 0):
- m_GraphState.GetModify()->m_MiterLimit = pObject->GetNumber();
- break;
- case FXBSTR_ID('D', 0, 0, 0): {
- if (pObject->GetType() != PDFOBJ_ARRAY) {
- break;
- }
- CPDF_Array* pDash = (CPDF_Array*)pObject;
- CPDF_Array* pArray = pDash->GetArray(0);
- if (pArray == NULL) {
- break;
- }
- SetLineDash(pArray, pDash->GetNumber(1), 1.0f);
- break;
- }
- case FXBSTR_ID('R', 'I', 0, 0):
- m_GeneralState.SetRenderIntent(pObject->GetString());
- break;
- case FXBSTR_ID('F', 'o', 'n', 't'): {
- if (pObject->GetType() != PDFOBJ_ARRAY) {
- break;
- }
- CPDF_Array* pFont = (CPDF_Array*)pObject;
- m_TextState.GetModify()->m_FontSize = pFont->GetNumber(1);
- m_TextState.SetFont(pParser->FindFont(pFont->GetString(0)));
- break;
- }
- case FXBSTR_ID('T', 'R', 0, 0):
- if (pGS->KeyExist(FX_BSTRC("TR2"))) {
- continue;
- }
- case FXBSTR_ID('T', 'R', '2', 0):
- if (pObject && pObject->GetType() != PDFOBJ_NAME) {
- pGeneralState->m_pTR = pObject;
- } else {
- pGeneralState->m_pTR = NULL;
- }
- break;
- case FXBSTR_ID('B', 'M', 0, 0): {
- CFX_ByteString mode;
- if (pObject->GetType() == PDFOBJ_ARRAY) {
- mode = ((CPDF_Array*)pObject)->GetString(0);
- } else {
- mode = pObject->GetString();
- }
- pGeneralState->SetBlendMode(mode);
- if (pGeneralState->m_BlendType > FXDIB_BLEND_MULTIPLY) {
- pParser->GetObjectList()->m_bBackgroundAlphaNeeded = TRUE;
- }
- break;
- }
- case FXBSTR_ID('S', 'M', 'a', 's'):
- if (pObject && pObject->GetType() == PDFOBJ_DICTIONARY) {
- pGeneralState->m_pSoftMask = pObject;
- FXSYS_memcpy(pGeneralState->m_SMaskMatrix, &pParser->GetCurStates()->m_CTM, sizeof(CPDF_Matrix));
- } else {
- pGeneralState->m_pSoftMask = NULL;
- }
- break;
- case FXBSTR_ID('C', 'A', 0, 0):
- pGeneralState->m_StrokeAlpha = PDF_ClipFloat(pObject->GetNumber());
- break;
- case FXBSTR_ID('c', 'a', 0, 0):
- pGeneralState->m_FillAlpha = PDF_ClipFloat(pObject->GetNumber());
- break;
- case FXBSTR_ID('O', 'P', 0, 0):
- pGeneralState->m_StrokeOP = pObject->GetInteger();
- if (!pGS->KeyExist(FX_BSTRC("op"))) {
- pGeneralState->m_FillOP = pObject->GetInteger();
- }
- break;
- case FXBSTR_ID('o', 'p', 0, 0):
- pGeneralState->m_FillOP = pObject->GetInteger();
- break;
- case FXBSTR_ID('O', 'P', 'M', 0):
- pGeneralState->m_OPMode = pObject->GetInteger();
- break;
- case FXBSTR_ID('B', 'G', 0, 0):
- if (pGS->KeyExist(FX_BSTRC("BG2"))) {
- continue;
- }
- case FXBSTR_ID('B', 'G', '2', 0):
- pGeneralState->m_pBG = pObject;
- break;
- case FXBSTR_ID('U', 'C', 'R', 0):
- if (pGS->KeyExist(FX_BSTRC("UCR2"))) {
- continue;
- }
- case FXBSTR_ID('U', 'C', 'R', '2'):
- pGeneralState->m_pUCR = pObject;
- break;
- case FXBSTR_ID('H', 'T', 0, 0):
- pGeneralState->m_pHT = pObject;
- break;
- case FXBSTR_ID('F', 'L', 0, 0):
- pGeneralState->m_Flatness = pObject->GetNumber();
- break;
- case FXBSTR_ID('S', 'M', 0, 0):
- pGeneralState->m_Smoothness = pObject->GetNumber();
- break;
- case FXBSTR_ID('S', 'A', 0, 0):
- pGeneralState->m_StrokeAdjust = pObject->GetInteger();
- break;
- case FXBSTR_ID('A', 'I', 'S', 0):
- pGeneralState->m_AlphaSource = pObject->GetInteger();
- break;
- case FXBSTR_ID('T', 'K', 0, 0):
- pGeneralState->m_TextKnockout = pObject->GetInteger();
- break;
+ break;
+ }
+ case FXBSTR_ID('S', 'M', 'a', 's'):
+ if (pObject && pObject->GetType() == PDFOBJ_DICTIONARY) {
+ pGeneralState->m_pSoftMask = pObject;
+ FXSYS_memcpy(pGeneralState->m_SMaskMatrix,
+ &pParser->GetCurStates()->m_CTM, sizeof(CPDF_Matrix));
+ } else {
+ pGeneralState->m_pSoftMask = NULL;
}
- }
- pGeneralState->m_Matrix = m_CTM;
-}
-CPDF_ContentMarkItem::CPDF_ContentMarkItem()
-{
- m_ParamType = None;
-}
-CPDF_ContentMarkItem::CPDF_ContentMarkItem(const CPDF_ContentMarkItem& src)
-{
- m_MarkName = src.m_MarkName;
- m_ParamType = src.m_ParamType;
- if (m_ParamType == DirectDict) {
- m_pParam = ((CPDF_Dictionary*)src.m_pParam)->Clone();
- } else {
- m_pParam = src.m_pParam;
- }
-}
-CPDF_ContentMarkItem::~CPDF_ContentMarkItem()
-{
- if (m_ParamType == DirectDict && m_pParam) {
- ((CPDF_Dictionary*)m_pParam)->Release();
- }
-}
-FX_BOOL CPDF_ContentMarkItem::HasMCID() const
-{
- if (m_pParam && (m_ParamType == DirectDict || m_ParamType == PropertiesDict)) {
- return ((CPDF_Dictionary *)m_pParam)->KeyExist(FX_BSTRC("MCID"));
- }
- return FALSE;
-}
-CPDF_ContentMarkData::CPDF_ContentMarkData(const CPDF_ContentMarkData& src)
-{
- for (int i = 0; i < src.m_Marks.GetSize(); i ++) {
- m_Marks.Add(src.m_Marks[i]);
- }
-}
-int CPDF_ContentMarkData::GetMCID() const
-{
- CPDF_ContentMarkItem::ParamType type = CPDF_ContentMarkItem::None;
- for (int i = 0; i < m_Marks.GetSize(); i ++) {
- type = m_Marks[i].GetParamType();
- if (type == CPDF_ContentMarkItem::PropertiesDict || type == CPDF_ContentMarkItem::DirectDict) {
- CPDF_Dictionary *pDict = (CPDF_Dictionary *)m_Marks[i].GetParam();
- if (pDict->KeyExist(FX_BSTRC("MCID"))) {
- return pDict->GetInteger(FX_BSTRC("MCID"));
- }
+ break;
+ case FXBSTR_ID('C', 'A', 0, 0):
+ pGeneralState->m_StrokeAlpha = PDF_ClipFloat(pObject->GetNumber());
+ break;
+ case FXBSTR_ID('c', 'a', 0, 0):
+ pGeneralState->m_FillAlpha = PDF_ClipFloat(pObject->GetNumber());
+ break;
+ case FXBSTR_ID('O', 'P', 0, 0):
+ pGeneralState->m_StrokeOP = pObject->GetInteger();
+ if (!pGS->KeyExist(FX_BSTRC("op"))) {
+ pGeneralState->m_FillOP = pObject->GetInteger();
}
- }
- return -1;
-}
-void CPDF_ContentMarkData::AddMark(const CFX_ByteString& name, CPDF_Dictionary* pDict, FX_BOOL bDirect)
-{
- CPDF_ContentMarkItem& item = m_Marks.Add();
- item.SetName(name);
- if (pDict == NULL) {
- return;
- }
- item.SetParam(bDirect ? CPDF_ContentMarkItem::DirectDict : CPDF_ContentMarkItem::PropertiesDict,
- bDirect ? pDict->Clone() : pDict);
-}
-void CPDF_ContentMarkData::DeleteLastMark()
-{
- int size = m_Marks.GetSize();
- if (size == 0) {
- return;
- }
- m_Marks.RemoveAt(size - 1);
-}
-FX_BOOL CPDF_ContentMark::HasMark(const CFX_ByteStringC& mark) const
-{
- if (m_pObject == NULL) {
- return FALSE;
- }
- for (int i = 0; i < m_pObject->CountItems(); i ++) {
- CPDF_ContentMarkItem& item = m_pObject->GetItem(i);
- if (item.GetName() == mark) {
- return TRUE;
+ break;
+ case FXBSTR_ID('o', 'p', 0, 0):
+ pGeneralState->m_FillOP = pObject->GetInteger();
+ break;
+ case FXBSTR_ID('O', 'P', 'M', 0):
+ pGeneralState->m_OPMode = pObject->GetInteger();
+ break;
+ case FXBSTR_ID('B', 'G', 0, 0):
+ if (pGS->KeyExist(FX_BSTRC("BG2"))) {
+ continue;
}
- }
- return FALSE;
-}
-FX_BOOL CPDF_ContentMark::LookupMark(const CFX_ByteStringC& mark, CPDF_Dictionary*& pDict) const
-{
- if (m_pObject == NULL) {
- return FALSE;
- }
- for (int i = 0; i < m_pObject->CountItems(); i ++) {
- CPDF_ContentMarkItem& item = m_pObject->GetItem(i);
- if (item.GetName() == mark) {
- pDict = NULL;
- if (item.GetParamType() == CPDF_ContentMarkItem::PropertiesDict ||
- item.GetParamType() == CPDF_ContentMarkItem::DirectDict) {
- pDict = (CPDF_Dictionary*)item.GetParam();
- }
- return TRUE;
+ case FXBSTR_ID('B', 'G', '2', 0):
+ pGeneralState->m_pBG = pObject;
+ break;
+ case FXBSTR_ID('U', 'C', 'R', 0):
+ if (pGS->KeyExist(FX_BSTRC("UCR2"))) {
+ continue;
}
- }
+ case FXBSTR_ID('U', 'C', 'R', '2'):
+ pGeneralState->m_pUCR = pObject;
+ break;
+ case FXBSTR_ID('H', 'T', 0, 0):
+ pGeneralState->m_pHT = pObject;
+ break;
+ case FXBSTR_ID('F', 'L', 0, 0):
+ pGeneralState->m_Flatness = pObject->GetNumber();
+ break;
+ case FXBSTR_ID('S', 'M', 0, 0):
+ pGeneralState->m_Smoothness = pObject->GetNumber();
+ break;
+ case FXBSTR_ID('S', 'A', 0, 0):
+ pGeneralState->m_StrokeAdjust = pObject->GetInteger();
+ break;
+ case FXBSTR_ID('A', 'I', 'S', 0):
+ pGeneralState->m_AlphaSource = pObject->GetInteger();
+ break;
+ case FXBSTR_ID('T', 'K', 0, 0):
+ pGeneralState->m_TextKnockout = pObject->GetInteger();
+ break;
+ }
+ }
+ pGeneralState->m_Matrix = m_CTM;
+}
+CPDF_ContentMarkItem::CPDF_ContentMarkItem() {
+ m_ParamType = None;
+}
+CPDF_ContentMarkItem::CPDF_ContentMarkItem(const CPDF_ContentMarkItem& src) {
+ m_MarkName = src.m_MarkName;
+ m_ParamType = src.m_ParamType;
+ if (m_ParamType == DirectDict) {
+ m_pParam = ((CPDF_Dictionary*)src.m_pParam)->Clone();
+ } else {
+ m_pParam = src.m_pParam;
+ }
+}
+CPDF_ContentMarkItem::~CPDF_ContentMarkItem() {
+ if (m_ParamType == DirectDict && m_pParam) {
+ ((CPDF_Dictionary*)m_pParam)->Release();
+ }
+}
+FX_BOOL CPDF_ContentMarkItem::HasMCID() const {
+ if (m_pParam &&
+ (m_ParamType == DirectDict || m_ParamType == PropertiesDict)) {
+ return ((CPDF_Dictionary*)m_pParam)->KeyExist(FX_BSTRC("MCID"));
+ }
+ return FALSE;
+}
+CPDF_ContentMarkData::CPDF_ContentMarkData(const CPDF_ContentMarkData& src) {
+ for (int i = 0; i < src.m_Marks.GetSize(); i++) {
+ m_Marks.Add(src.m_Marks[i]);
+ }
+}
+int CPDF_ContentMarkData::GetMCID() const {
+ CPDF_ContentMarkItem::ParamType type = CPDF_ContentMarkItem::None;
+ for (int i = 0; i < m_Marks.GetSize(); i++) {
+ type = m_Marks[i].GetParamType();
+ if (type == CPDF_ContentMarkItem::PropertiesDict ||
+ type == CPDF_ContentMarkItem::DirectDict) {
+ CPDF_Dictionary* pDict = (CPDF_Dictionary*)m_Marks[i].GetParam();
+ if (pDict->KeyExist(FX_BSTRC("MCID"))) {
+ return pDict->GetInteger(FX_BSTRC("MCID"));
+ }
+ }
+ }
+ return -1;
+}
+void CPDF_ContentMarkData::AddMark(const CFX_ByteString& name,
+ CPDF_Dictionary* pDict,
+ FX_BOOL bDirect) {
+ CPDF_ContentMarkItem& item = m_Marks.Add();
+ item.SetName(name);
+ if (pDict == NULL) {
+ return;
+ }
+ item.SetParam(bDirect ? CPDF_ContentMarkItem::DirectDict
+ : CPDF_ContentMarkItem::PropertiesDict,
+ bDirect ? pDict->Clone() : pDict);
+}
+void CPDF_ContentMarkData::DeleteLastMark() {
+ int size = m_Marks.GetSize();
+ if (size == 0) {
+ return;
+ }
+ m_Marks.RemoveAt(size - 1);
+}
+FX_BOOL CPDF_ContentMark::HasMark(const CFX_ByteStringC& mark) const {
+ if (m_pObject == NULL) {
+ return FALSE;
+ }
+ for (int i = 0; i < m_pObject->CountItems(); i++) {
+ CPDF_ContentMarkItem& item = m_pObject->GetItem(i);
+ if (item.GetName() == mark) {
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+FX_BOOL CPDF_ContentMark::LookupMark(const CFX_ByteStringC& mark,
+ CPDF_Dictionary*& pDict) const {
+ if (m_pObject == NULL) {
return FALSE;
+ }
+ for (int i = 0; i < m_pObject->CountItems(); i++) {
+ CPDF_ContentMarkItem& item = m_pObject->GetItem(i);
+ if (item.GetName() == mark) {
+ pDict = NULL;
+ if (item.GetParamType() == CPDF_ContentMarkItem::PropertiesDict ||
+ item.GetParamType() == CPDF_ContentMarkItem::DirectDict) {
+ pDict = (CPDF_Dictionary*)item.GetParam();
+ }
+ return TRUE;
+ }
+ }
+ return FALSE;
}
diff --git a/core/src/fpdfapi/fpdf_page/fpdf_page_image.cpp b/core/src/fpdfapi/fpdf_page/fpdf_page_image.cpp
index aabfd141d6..e9f70c14db 100644
--- a/core/src/fpdfapi/fpdf_page/fpdf_page_image.cpp
+++ b/core/src/fpdfapi/fpdf_page/fpdf_page_image.cpp
@@ -7,99 +7,92 @@
#include "../../../include/fpdfapi/fpdf_page.h"
#include "../../../include/fpdfapi/fpdf_pageobj.h"
#include "pageint.h"
-CPDF_ImageObject::CPDF_ImageObject()
-{
- m_pImage = NULL;
- m_Type = PDFPAGE_IMAGE;
+CPDF_ImageObject::CPDF_ImageObject() {
+ m_pImage = NULL;
+ m_Type = PDFPAGE_IMAGE;
}
-CPDF_ImageObject::~CPDF_ImageObject()
-{
- if (!m_pImage) {
- return;
- }
- if (m_pImage->IsInline() || (m_pImage->GetStream() && m_pImage->GetStream()->GetObjNum() == 0)) {
- delete m_pImage;
- } else {
- m_pImage->GetDocument()->GetPageData()->ReleaseImage(m_pImage->GetStream());
- }
+CPDF_ImageObject::~CPDF_ImageObject() {
+ if (!m_pImage) {
+ return;
+ }
+ if (m_pImage->IsInline() ||
+ (m_pImage->GetStream() && m_pImage->GetStream()->GetObjNum() == 0)) {
+ delete m_pImage;
+ } else {
+ m_pImage->GetDocument()->GetPageData()->ReleaseImage(m_pImage->GetStream());
+ }
}
-void CPDF_ImageObject::CopyData(const CPDF_PageObject* pSrc)
-{
- const CPDF_ImageObject* pSrcObj = (const CPDF_ImageObject*)pSrc;
- if (m_pImage) {
- m_pImage->Release();
- }
- m_pImage = pSrcObj->m_pImage->Clone();
- m_Matrix = pSrcObj->m_Matrix;
+void CPDF_ImageObject::CopyData(const CPDF_PageObject* pSrc) {
+ const CPDF_ImageObject* pSrcObj = (const CPDF_ImageObject*)pSrc;
+ if (m_pImage) {
+ m_pImage->Release();
+ }
+ m_pImage = pSrcObj->m_pImage->Clone();
+ m_Matrix = pSrcObj->m_Matrix;
}
-void CPDF_ImageObject::Transform(const CFX_AffineMatrix& matrix)
-{
- m_Matrix.Concat(matrix);
- CalcBoundingBox();
+void CPDF_ImageObject::Transform(const CFX_AffineMatrix& matrix) {
+ m_Matrix.Concat(matrix);
+ CalcBoundingBox();
}
-void CPDF_ImageObject::CalcBoundingBox()
-{
- m_Left = m_Bottom = 0;
- m_Right = m_Top = 1.0f;
- m_Matrix.TransformRect(m_Left, m_Right, m_Top, m_Bottom);
+void CPDF_ImageObject::CalcBoundingBox() {
+ m_Left = m_Bottom = 0;
+ m_Right = m_Top = 1.0f;
+ m_Matrix.TransformRect(m_Left, m_Right, m_Top, m_Bottom);
}
-void CPDF_Image::Release()
-{
- if (m_bInline || (m_pStream && m_pStream->GetObjNum() == 0)) {
- delete this;
- }
+void CPDF_Image::Release() {
+ if (m_bInline || (m_pStream && m_pStream->GetObjNum() == 0)) {
+ delete this;
+ }
}
-CPDF_Image* CPDF_Image::Clone()
-{
- if (m_pStream->GetObjNum()) {
- return m_pDocument->GetPageData()->GetImage(m_pStream);
- }
- CPDF_Image* pImage = new CPDF_Image(m_pDocument);
- pImage->LoadImageF((CPDF_Stream*)((CPDF_Object*)m_pStream)->Clone(), m_bInline);
- if (m_bInline) {
- CPDF_Dictionary *pInlineDict = (CPDF_Dictionary*)m_pInlineDict->Clone(TRUE);
- pImage->SetInlineDict(pInlineDict);
- }
- return pImage;
+CPDF_Image* CPDF_Image::Clone() {
+ if (m_pStream->GetObjNum()) {
+ return m_pDocument->GetPageData()->GetImage(m_pStream);
+ }
+ CPDF_Image* pImage = new CPDF_Image(m_pDocument);
+ pImage->LoadImageF((CPDF_Stream*)((CPDF_Object*)m_pStream)->Clone(),
+ m_bInline);
+ if (m_bInline) {
+ CPDF_Dictionary* pInlineDict = (CPDF_Dictionary*)m_pInlineDict->Clone(TRUE);
+ pImage->SetInlineDict(pInlineDict);
+ }
+ return pImage;
}
-CPDF_Image::CPDF_Image(CPDF_Document* pDoc)
-{
- m_pDocument = pDoc;
- m_pStream = NULL;
- m_pOC = NULL;
- m_bInline = FALSE;
- m_pInlineDict = NULL;
- m_pDIBSource = NULL;
- m_pMask = NULL;
- m_MatteColor = 0;
-}
-CPDF_Image::~CPDF_Image()
-{
- if (m_bInline) {
- if (m_pStream) {
- m_pStream->Release();
- }
- if (m_pInlineDict) {
- m_pInlineDict->Release();
- }
- }
+CPDF_Image::CPDF_Image(CPDF_Document* pDoc) {
+ m_pDocument = pDoc;
+ m_pStream = NULL;
+ m_pOC = NULL;
+ m_bInline = FALSE;
+ m_pInlineDict = NULL;
+ m_pDIBSource = NULL;
+ m_pMask = NULL;
+ m_MatteColor = 0;
}
-FX_BOOL CPDF_Image::LoadImageF(CPDF_Stream* pStream, FX_BOOL bInline)
-{
- m_pStream = pStream;
- if (m_bInline && m_pInlineDict) {
- m_pInlineDict->Release();
- m_pInlineDict = NULL;
+CPDF_Image::~CPDF_Image() {
+ if (m_bInline) {
+ if (m_pStream) {
+ m_pStream->Release();
}
- m_bInline = bInline;
- CPDF_Dictionary* pDict = pStream->GetDict();
- if (m_bInline) {
- m_pInlineDict = (CPDF_Dictionary*)pDict->Clone();
+ if (m_pInlineDict) {
+ m_pInlineDict->Release();
}
- m_pOC = pDict->GetDict(FX_BSTRC("OC"));
- m_bIsMask = !pDict->KeyExist(FX_BSTRC("ColorSpace")) || pDict->GetInteger(FX_BSTRC("ImageMask"));
- m_bInterpolate = pDict->GetInteger(FX_BSTRC("Interpolate"));
- m_Height = pDict->GetInteger(FX_BSTRC("Height"));
- m_Width = pDict->GetInteger(FX_BSTRC("Width"));
- return TRUE;
+ }
+}
+FX_BOOL CPDF_Image::LoadImageF(CPDF_Stream* pStream, FX_BOOL bInline) {
+ m_pStream = pStream;
+ if (m_bInline && m_pInlineDict) {
+ m_pInlineDict->Release();
+ m_pInlineDict = NULL;
+ }
+ m_bInline = bInline;
+ CPDF_Dictionary* pDict = pStream->GetDict();
+ if (m_bInline) {
+ m_pInlineDict = (CPDF_Dictionary*)pDict->Clone();
+ }
+ m_pOC = pDict->GetDict(FX_BSTRC("OC"));
+ m_bIsMask = !pDict->KeyExist(FX_BSTRC("ColorSpace")) ||
+ pDict->GetInteger(FX_BSTRC("ImageMask"));
+ m_bInterpolate = pDict->GetInteger(FX_BSTRC("Interpolate"));
+ m_Height = pDict->GetInteger(FX_BSTRC("Height"));
+ m_Width = pDict->GetInteger(FX_BSTRC("Width"));
+ return TRUE;
}
diff --git a/core/src/fpdfapi/fpdf_page/fpdf_page_parser.cpp b/core/src/fpdfapi/fpdf_page/fpdf_page_parser.cpp
index 892e2153b7..47ba46a0f3 100644
--- a/core/src/fpdfapi/fpdf_page/fpdf_page_parser.cpp
+++ b/core/src/fpdfapi/fpdf_page/fpdf_page_parser.cpp
@@ -9,7 +9,11 @@
#include "../../../include/fpdfapi/fpdf_serial.h"
#include "pageint.h"
-#define REQUIRE_PARAMS(count) if (m_ParamCount != count) { m_bAbort = TRUE; return; }
+#define REQUIRE_PARAMS(count) \
+ if (m_ParamCount != count) { \
+ m_bAbort = TRUE; \
+ return; \
+ }
CPDF_StreamContentParser::CPDF_StreamContentParser(
CPDF_Document* pDocument,
@@ -45,1539 +49,1556 @@ CPDF_StreamContentParser::CPDF_StreamContentParser(
m_pLastCloneImageDict(nullptr),
m_bReleaseLastDict(TRUE),
m_bColored(FALSE),
- m_bResourceMissing(FALSE)
-{
- if (pmtContentToUser) {
- m_mtContentToUser = *pmtContentToUser;
- }
- if (pOptions) {
- m_Options = *pOptions;
- }
- if (!m_pResources) {
- m_pResources = m_pParentResources;
- }
- if (!m_pResources) {
- m_pResources = m_pPageResources;
- }
- if (pBBox) {
- m_BBox = *pBBox;
- }
- if (pStates) {
- m_pCurStates->Copy(*pStates);
- } else {
- m_pCurStates->m_GeneralState.New();
- m_pCurStates->m_GraphState.New();
- m_pCurStates->m_TextState.New();
- m_pCurStates->m_ColorState.New();
- }
- for (int i = 0; i < FX_ArraySize(m_Type3Data); ++i) {
- m_Type3Data[i] = 0.0;
- }
+ m_bResourceMissing(FALSE) {
+ if (pmtContentToUser) {
+ m_mtContentToUser = *pmtContentToUser;
+ }
+ if (pOptions) {
+ m_Options = *pOptions;
+ }
+ if (!m_pResources) {
+ m_pResources = m_pParentResources;
+ }
+ if (!m_pResources) {
+ m_pResources = m_pPageResources;
+ }
+ if (pBBox) {
+ m_BBox = *pBBox;
+ }
+ if (pStates) {
+ m_pCurStates->Copy(*pStates);
+ } else {
+ m_pCurStates->m_GeneralState.New();
+ m_pCurStates->m_GraphState.New();
+ m_pCurStates->m_TextState.New();
+ m_pCurStates->m_ColorState.New();
+ }
+ for (int i = 0; i < FX_ArraySize(m_Type3Data); ++i) {
+ m_Type3Data[i] = 0.0;
+ }
}
-CPDF_StreamContentParser::~CPDF_StreamContentParser()
-{
- ClearAllParams();
- for (int i = 0; i < m_StateStack.GetSize(); ++i) {
- delete (CPDF_AllStates*)m_StateStack[i];
- }
- if (m_pPathPoints) {
- FX_Free(m_pPathPoints);
- }
- if (m_pLastImageDict) {
- m_pLastImageDict->Release();
- }
- if (m_pLastCloneImageDict) {
- m_pLastCloneImageDict->Release();
- }
-}
-int CPDF_StreamContentParser::GetNextParamPos()
-{
- if (m_ParamCount == PARAM_BUF_SIZE) {
- m_ParamStartPos ++;
- if (m_ParamStartPos == PARAM_BUF_SIZE) {
- m_ParamStartPos = 0;
- }
- if (m_ParamBuf1[m_ParamStartPos].m_Type == 0) {
- if (CPDF_Object* pObject = m_ParamBuf1[m_ParamStartPos].m_pObject)
- pObject->Release();
- }
- return m_ParamStartPos;
- }
- int index = m_ParamStartPos + m_ParamCount;
- if (index >= PARAM_BUF_SIZE) {
- index -= PARAM_BUF_SIZE;
- }
- m_ParamCount ++;
- return index;
-}
-void CPDF_StreamContentParser::AddNameParam(const FX_CHAR* name, int len)
-{
- int index = GetNextParamPos();
- if (len > 32) {
- m_ParamBuf1[index].m_Type = 0;
- m_ParamBuf1[index].m_pObject = CPDF_Name::Create(PDF_NameDecode(CFX_ByteStringC(name, len)));
- } else {
- m_ParamBuf1[index].m_Type = PDFOBJ_NAME;
- if (FXSYS_memchr(name, '#', len) == NULL) {
- FXSYS_memcpy(m_ParamBuf1[index].m_Name.m_Buffer, name, len);
- m_ParamBuf1[index].m_Name.m_Len = len;
- } else {
- CFX_ByteString str = PDF_NameDecode(CFX_ByteStringC(name, len));
- FXSYS_memcpy(m_ParamBuf1[index].m_Name.m_Buffer, str.c_str(), str.GetLength());
- m_ParamBuf1[index].m_Name.m_Len = str.GetLength();
- }
- }
-}
-void CPDF_StreamContentParser::AddNumberParam(const FX_CHAR* str, int len)
-{
- int index = GetNextParamPos();
- m_ParamBuf1[index].m_Type = PDFOBJ_NUMBER;
- FX_atonum(CFX_ByteStringC(str, len), m_ParamBuf1[index].m_Number.m_bInteger,
- &m_ParamBuf1[index].m_Number.m_Integer);
-}
-void CPDF_StreamContentParser::AddObjectParam(CPDF_Object* pObj)
-{
- int index = GetNextParamPos();
+CPDF_StreamContentParser::~CPDF_StreamContentParser() {
+ ClearAllParams();
+ for (int i = 0; i < m_StateStack.GetSize(); ++i) {
+ delete (CPDF_AllStates*)m_StateStack[i];
+ }
+ if (m_pPathPoints) {
+ FX_Free(m_pPathPoints);
+ }
+ if (m_pLastImageDict) {
+ m_pLastImageDict->Release();
+ }
+ if (m_pLastCloneImageDict) {
+ m_pLastCloneImageDict->Release();
+ }
+}
+int CPDF_StreamContentParser::GetNextParamPos() {
+ if (m_ParamCount == PARAM_BUF_SIZE) {
+ m_ParamStartPos++;
+ if (m_ParamStartPos == PARAM_BUF_SIZE) {
+ m_ParamStartPos = 0;
+ }
+ if (m_ParamBuf1[m_ParamStartPos].m_Type == 0) {
+ if (CPDF_Object* pObject = m_ParamBuf1[m_ParamStartPos].m_pObject)
+ pObject->Release();
+ }
+ return m_ParamStartPos;
+ }
+ int index = m_ParamStartPos + m_ParamCount;
+ if (index >= PARAM_BUF_SIZE) {
+ index -= PARAM_BUF_SIZE;
+ }
+ m_ParamCount++;
+ return index;
+}
+void CPDF_StreamContentParser::AddNameParam(const FX_CHAR* name, int len) {
+ int index = GetNextParamPos();
+ if (len > 32) {
m_ParamBuf1[index].m_Type = 0;
- m_ParamBuf1[index].m_pObject = pObj;
-}
-void CPDF_StreamContentParser::ClearAllParams()
-{
- FX_DWORD index = m_ParamStartPos;
- for (FX_DWORD i = 0; i < m_ParamCount; i ++) {
- if (m_ParamBuf1[index].m_Type == 0) {
- if (CPDF_Object* pObject = m_ParamBuf1[index].m_pObject)
- pObject->Release();
- }
- index ++;
- if (index == PARAM_BUF_SIZE) {
- index = 0;
- }
- }
- m_ParamStartPos = 0;
- m_ParamCount = 0;
-}
-CPDF_Object* CPDF_StreamContentParser::GetObject(FX_DWORD index)
-{
- if (index >= m_ParamCount) {
- return NULL;
- }
- int real_index = m_ParamStartPos + m_ParamCount - index - 1;
- if (real_index >= PARAM_BUF_SIZE) {
- real_index -= PARAM_BUF_SIZE;
- }
- _ContentParam& param = m_ParamBuf1[real_index];
- if (param.m_Type == PDFOBJ_NUMBER) {
- CPDF_Number* pNumber = CPDF_Number::Create(param.m_Number.m_bInteger, &param.m_Number.m_Integer);
- param.m_Type = 0;
- param.m_pObject = pNumber;
- return pNumber;
- }
- if (param.m_Type == PDFOBJ_NAME) {
- CPDF_Name* pName = CPDF_Name::Create(CFX_ByteString(param.m_Name.m_Buffer, param.m_Name.m_Len));
- param.m_Type = 0;
- param.m_pObject = pName;
- return pName;
- }
- if (param.m_Type == 0) {
- return param.m_pObject;
- }
- ASSERT(FALSE);
+ m_ParamBuf1[index].m_pObject =
+ CPDF_Name::Create(PDF_NameDecode(CFX_ByteStringC(name, len)));
+ } else {
+ m_ParamBuf1[index].m_Type = PDFOBJ_NAME;
+ if (FXSYS_memchr(name, '#', len) == NULL) {
+ FXSYS_memcpy(m_ParamBuf1[index].m_Name.m_Buffer, name, len);
+ m_ParamBuf1[index].m_Name.m_Len = len;
+ } else {
+ CFX_ByteString str = PDF_NameDecode(CFX_ByteStringC(name, len));
+ FXSYS_memcpy(m_ParamBuf1[index].m_Name.m_Buffer, str.c_str(),
+ str.GetLength());
+ m_ParamBuf1[index].m_Name.m_Len = str.GetLength();
+ }
+ }
+}
+void CPDF_StreamContentParser::AddNumberParam(const FX_CHAR* str, int len) {
+ int index = GetNextParamPos();
+ m_ParamBuf1[index].m_Type = PDFOBJ_NUMBER;
+ FX_atonum(CFX_ByteStringC(str, len), m_ParamBuf1[index].m_Number.m_bInteger,
+ &m_ParamBuf1[index].m_Number.m_Integer);
+}
+void CPDF_StreamContentParser::AddObjectParam(CPDF_Object* pObj) {
+ int index = GetNextParamPos();
+ m_ParamBuf1[index].m_Type = 0;
+ m_ParamBuf1[index].m_pObject = pObj;
+}
+void CPDF_StreamContentParser::ClearAllParams() {
+ FX_DWORD index = m_ParamStartPos;
+ for (FX_DWORD i = 0; i < m_ParamCount; i++) {
+ if (m_ParamBuf1[index].m_Type == 0) {
+ if (CPDF_Object* pObject = m_ParamBuf1[index].m_pObject)
+ pObject->Release();
+ }
+ index++;
+ if (index == PARAM_BUF_SIZE) {
+ index = 0;
+ }
+ }
+ m_ParamStartPos = 0;
+ m_ParamCount = 0;
+}
+CPDF_Object* CPDF_StreamContentParser::GetObject(FX_DWORD index) {
+ if (index >= m_ParamCount) {
return NULL;
-}
-CFX_ByteString CPDF_StreamContentParser::GetString(FX_DWORD index)
-{
- if (index >= m_ParamCount) {
- return CFX_ByteString();
- }
- int real_index = m_ParamStartPos + m_ParamCount - index - 1;
- if (real_index >= PARAM_BUF_SIZE) {
- real_index -= PARAM_BUF_SIZE;
- }
- _ContentParam& param = m_ParamBuf1[real_index];
- if (param.m_Type == PDFOBJ_NAME) {
- return CFX_ByteString(param.m_Name.m_Buffer, param.m_Name.m_Len);
- }
- if (param.m_Type == 0 && param.m_pObject) {
- return param.m_pObject->GetString();
- }
+ }
+ int real_index = m_ParamStartPos + m_ParamCount - index - 1;
+ if (real_index >= PARAM_BUF_SIZE) {
+ real_index -= PARAM_BUF_SIZE;
+ }
+ _ContentParam& param = m_ParamBuf1[real_index];
+ if (param.m_Type == PDFOBJ_NUMBER) {
+ CPDF_Number* pNumber = CPDF_Number::Create(param.m_Number.m_bInteger,
+ &param.m_Number.m_Integer);
+ param.m_Type = 0;
+ param.m_pObject = pNumber;
+ return pNumber;
+ }
+ if (param.m_Type == PDFOBJ_NAME) {
+ CPDF_Name* pName = CPDF_Name::Create(
+ CFX_ByteString(param.m_Name.m_Buffer, param.m_Name.m_Len));
+ param.m_Type = 0;
+ param.m_pObject = pName;
+ return pName;
+ }
+ if (param.m_Type == 0) {
+ return param.m_pObject;
+ }
+ ASSERT(FALSE);
+ return NULL;
+}
+CFX_ByteString CPDF_StreamContentParser::GetString(FX_DWORD index) {
+ if (index >= m_ParamCount) {
return CFX_ByteString();
-}
-FX_FLOAT CPDF_StreamContentParser::GetNumber(FX_DWORD index)
-{
- if (index >= m_ParamCount) {
- return 0;
- }
- int real_index = m_ParamStartPos + m_ParamCount - index - 1;
- if (real_index >= PARAM_BUF_SIZE) {
- real_index -= PARAM_BUF_SIZE;
- }
- _ContentParam& param = m_ParamBuf1[real_index];
- if (param.m_Type == PDFOBJ_NUMBER) {
- return param.m_Number.m_bInteger ? (FX_FLOAT)param.m_Number.m_Integer : param.m_Number.m_Float;
- }
- if (param.m_Type == 0 && param.m_pObject) {
- return param.m_pObject->GetNumber();
- }
+ }
+ int real_index = m_ParamStartPos + m_ParamCount - index - 1;
+ if (real_index >= PARAM_BUF_SIZE) {
+ real_index -= PARAM_BUF_SIZE;
+ }
+ _ContentParam& param = m_ParamBuf1[real_index];
+ if (param.m_Type == PDFOBJ_NAME) {
+ return CFX_ByteString(param.m_Name.m_Buffer, param.m_Name.m_Len);
+ }
+ if (param.m_Type == 0 && param.m_pObject) {
+ return param.m_pObject->GetString();
+ }
+ return CFX_ByteString();
+}
+FX_FLOAT CPDF_StreamContentParser::GetNumber(FX_DWORD index) {
+ if (index >= m_ParamCount) {
return 0;
-}
-FX_FLOAT CPDF_StreamContentParser::GetNumber16(FX_DWORD index)
-{
- return GetNumber(index);
-}
-void CPDF_StreamContentParser::SetGraphicStates(CPDF_PageObject* pObj, FX_BOOL bColor, FX_BOOL bText, FX_BOOL bGraph)
-{
- pObj->m_GeneralState = m_pCurStates->m_GeneralState;
- pObj->m_ClipPath = m_pCurStates->m_ClipPath;
- pObj->m_ContentMark = m_CurContentMark;
- if (bColor) {
- pObj->m_ColorState = m_pCurStates->m_ColorState;
- }
- if (bGraph) {
- pObj->m_GraphState = m_pCurStates->m_GraphState;
- }
- if (bText) {
- pObj->m_TextState = m_pCurStates->m_TextState;
- }
+ }
+ int real_index = m_ParamStartPos + m_ParamCount - index - 1;
+ if (real_index >= PARAM_BUF_SIZE) {
+ real_index -= PARAM_BUF_SIZE;
+ }
+ _ContentParam& param = m_ParamBuf1[real_index];
+ if (param.m_Type == PDFOBJ_NUMBER) {
+ return param.m_Number.m_bInteger ? (FX_FLOAT)param.m_Number.m_Integer
+ : param.m_Number.m_Float;
+ }
+ if (param.m_Type == 0 && param.m_pObject) {
+ return param.m_pObject->GetNumber();
+ }
+ return 0;
+}
+FX_FLOAT CPDF_StreamContentParser::GetNumber16(FX_DWORD index) {
+ return GetNumber(index);
+}
+void CPDF_StreamContentParser::SetGraphicStates(CPDF_PageObject* pObj,
+ FX_BOOL bColor,
+ FX_BOOL bText,
+ FX_BOOL bGraph) {
+ pObj->m_GeneralState = m_pCurStates->m_GeneralState;
+ pObj->m_ClipPath = m_pCurStates->m_ClipPath;
+ pObj->m_ContentMark = m_CurContentMark;
+ if (bColor) {
+ pObj->m_ColorState = m_pCurStates->m_ColorState;
+ }
+ if (bGraph) {
+ pObj->m_GraphState = m_pCurStates->m_GraphState;
+ }
+ if (bText) {
+ pObj->m_TextState = m_pCurStates->m_TextState;
+ }
}
-const CPDF_StreamContentParser::OpCode CPDF_StreamContentParser::g_OpCodes[] =
-{
- {FXBSTR_ID('"', 0, 0, 0), &CPDF_StreamContentParser::Handle_NextLineShowText_Space},
- {FXBSTR_ID('\'', 0, 0, 0), &CPDF_StreamContentParser::Handle_NextLineShowText},
- {FXBSTR_ID('B', 0, 0, 0), &CPDF_StreamContentParser::Handle_FillStrokePath},
- {FXBSTR_ID('B', '*', 0, 0), &CPDF_StreamContentParser::Handle_EOFillStrokePath},
- {FXBSTR_ID('B', 'D', 'C', 0), &CPDF_StreamContentParser::Handle_BeginMarkedContent_Dictionary},
- {FXBSTR_ID('B', 'I', 0, 0), &CPDF_StreamContentParser::Handle_BeginImage},
- {FXBSTR_ID('B', 'M', 'C', 0), &CPDF_StreamContentParser::Handle_BeginMarkedContent},
- {FXBSTR_ID('B', 'T', 0, 0), &CPDF_StreamContentParser::Handle_BeginText},
- {FXBSTR_ID('B', 'X', 0, 0), &CPDF_StreamContentParser::Handle_BeginSectionUndefined},
- {FXBSTR_ID('C', 'S', 0, 0), &CPDF_StreamContentParser::Handle_SetColorSpace_Stroke},
- {FXBSTR_ID('D', 'P', 0, 0), &CPDF_StreamContentParser::Handle_MarkPlace_Dictionary},
- {FXBSTR_ID('D', 'o', 0, 0), &CPDF_StreamContentParser::Handle_ExecuteXObject},
- {FXBSTR_ID('E', 'I', 0, 0), &CPDF_StreamContentParser::Handle_EndImage},
- {FXBSTR_ID('E', 'M', 'C', 0), &CPDF_StreamContentParser::Handle_EndMarkedContent},
- {FXBSTR_ID('E', 'T', 0, 0), &CPDF_StreamContentParser::Handle_EndText},
- {FXBSTR_ID('E', 'X', 0, 0), &CPDF_StreamContentParser::Handle_EndSectionUndefined},
- {FXBSTR_ID('F', 0, 0, 0), &CPDF_StreamContentParser::Handle_FillPathOld},
- {FXBSTR_ID('G', 0, 0, 0), &CPDF_StreamContentParser::Handle_SetGray_Stroke},
- {FXBSTR_ID('I', 'D', 0, 0), &CPDF_StreamContentParser::Handle_BeginImageData},
- {FXBSTR_ID('J', 0, 0, 0), &CPDF_StreamContentParser::Handle_SetLineCap},
- {FXBSTR_ID('K', 0, 0, 0), &CPDF_StreamContentParser::Handle_SetCMYKColor_Stroke},
- {FXBSTR_ID('M', 0, 0, 0), &CPDF_StreamContentParser::Handle_SetMiterLimit},
- {FXBSTR_ID('M', 'P', 0, 0), &CPDF_StreamContentParser::Handle_MarkPlace},
- {FXBSTR_ID('Q', 0, 0, 0), &CPDF_StreamContentParser::Handle_RestoreGraphState},
- {FXBSTR_ID('R', 'G', 0, 0), &CPDF_StreamContentParser::Handle_SetRGBColor_Stroke},
- {FXBSTR_ID('S', 0, 0, 0), &CPDF_StreamContentParser::Handle_StrokePath},
- {FXBSTR_ID('S', 'C', 0, 0), &CPDF_StreamContentParser::Handle_SetColor_Stroke},
- {FXBSTR_ID('S', 'C', 'N', 0), &CPDF_StreamContentParser::Handle_SetColorPS_Stroke},
- {FXBSTR_ID('T', '*', 0, 0), &CPDF_StreamContentParser::Handle_MoveToNextLine},
- {FXBSTR_ID('T', 'D', 0, 0), &CPDF_StreamContentParser::Handle_MoveTextPoint_SetLeading},
- {FXBSTR_ID('T', 'J', 0, 0), &CPDF_StreamContentParser::Handle_ShowText_Positioning},
- {FXBSTR_ID('T', 'L', 0, 0), &CPDF_StreamContentParser::Handle_SetTextLeading},
- {FXBSTR_ID('T', 'c', 0, 0), &CPDF_StreamContentParser::Handle_SetCharSpace},
- {FXBSTR_ID('T', 'd', 0, 0), &CPDF_StreamContentParser::Handle_MoveTextPoint},
- {FXBSTR_ID('T', 'f', 0, 0), &CPDF_StreamContentParser::Handle_SetFont},
- {FXBSTR_ID('T', 'j', 0, 0), &CPDF_StreamContentParser::Handle_ShowText},
- {FXBSTR_ID('T', 'm', 0, 0), &CPDF_StreamContentParser::Handle_SetTextMatrix},
- {FXBSTR_ID('T', 'r', 0, 0), &CPDF_StreamContentParser::Handle_SetTextRenderMode},
- {FXBSTR_ID('T', 's', 0, 0), &CPDF_StreamContentParser::Handle_SetTextRise},
- {FXBSTR_ID('T', 'w', 0, 0), &CPDF_StreamContentParser::Handle_SetWordSpace},
- {FXBSTR_ID('T', 'z', 0, 0), &CPDF_StreamContentParser::Handle_SetHorzScale},
- {FXBSTR_ID('W', 0, 0, 0), &CPDF_StreamContentParser::Handle_Clip},
- {FXBSTR_ID('W', '*', 0, 0), &CPDF_StreamContentParser::Handle_EOClip},
- {FXBSTR_ID('b', 0, 0, 0), &CPDF_StreamContentParser::Handle_CloseFillStrokePath},
- {FXBSTR_ID('b', '*', 0, 0), &CPDF_StreamContentParser::Handle_CloseEOFillStrokePath},
- {FXBSTR_ID('c', 0, 0, 0), &CPDF_StreamContentParser::Handle_CurveTo_123},
- {FXBSTR_ID('c', 'm', 0, 0), &CPDF_StreamContentParser::Handle_ConcatMatrix},
- {FXBSTR_ID('c', 's', 0, 0), &CPDF_StreamContentParser::Handle_SetColorSpace_Fill},
- {FXBSTR_ID('d', 0, 0, 0), &CPDF_StreamContentParser::Handle_SetDash},
- {FXBSTR_ID('d', '0', 0, 0), &CPDF_StreamContentParser::Handle_SetCharWidth},
- {FXBSTR_ID('d', '1', 0, 0), &CPDF_StreamContentParser::Handle_SetCachedDevice},
- {FXBSTR_ID('f', 0, 0, 0), &CPDF_StreamContentParser::Handle_FillPath},
- {FXBSTR_ID('f', '*', 0, 0), &CPDF_StreamContentParser::Handle_EOFillPath},
- {FXBSTR_ID('g', 0, 0, 0), &CPDF_StreamContentParser::Handle_SetGray_Fill},
- {FXBSTR_ID('g', 's', 0, 0), &CPDF_StreamContentParser::Handle_SetExtendGraphState},
- {FXBSTR_ID('h', 0, 0, 0), &CPDF_StreamContentParser::Handle_ClosePath},
- {FXBSTR_ID('i', 0, 0, 0), &CPDF_StreamContentParser::Handle_SetFlat},
- {FXBSTR_ID('j', 0, 0, 0), &CPDF_StreamContentParser::Handle_SetLineJoin},
- {FXBSTR_ID('k', 0, 0, 0), &CPDF_StreamContentParser::Handle_SetCMYKColor_Fill},
- {FXBSTR_ID('l', 0, 0, 0), &CPDF_StreamContentParser::Handle_LineTo},
- {FXBSTR_ID('m', 0, 0, 0), &CPDF_StreamContentParser::Handle_MoveTo},
- {FXBSTR_ID('n', 0, 0, 0), &CPDF_StreamContentParser::Handle_EndPath},
- {FXBSTR_ID('q', 0, 0, 0), &CPDF_StreamContentParser::Handle_SaveGraphState},
- {FXBSTR_ID('r', 'e', 0, 0), &CPDF_StreamContentParser::Handle_Rectangle},
- {FXBSTR_ID('r', 'g', 0, 0), &CPDF_StreamContentParser::Handle_SetRGBColor_Fill},
- {FXBSTR_ID('r', 'i', 0, 0), &CPDF_StreamContentParser::Handle_SetRenderIntent},
- {FXBSTR_ID('s', 0, 0, 0), &CPDF_StreamContentParser::Handle_CloseStrokePath},
- {FXBSTR_ID('s', 'c', 0, 0), &CPDF_StreamContentParser::Handle_SetColor_Fill},
- {FXBSTR_ID('s', 'c', 'n', 0), &CPDF_StreamContentParser::Handle_SetColorPS_Fill},
- {FXBSTR_ID('s', 'h', 0, 0), &CPDF_StreamContentParser::Handle_ShadeFill},
- {FXBSTR_ID('v', 0, 0, 0), &CPDF_StreamContentParser::Handle_CurveTo_23},
- {FXBSTR_ID('w', 0, 0, 0), &CPDF_StreamContentParser::Handle_SetLineWidth},
- {FXBSTR_ID('y', 0, 0, 0), &CPDF_StreamContentParser::Handle_CurveTo_13},
+const CPDF_StreamContentParser::OpCode CPDF_StreamContentParser::g_OpCodes[] = {
+ {FXBSTR_ID('"', 0, 0, 0),
+ &CPDF_StreamContentParser::Handle_NextLineShowText_Space},
+ {FXBSTR_ID('\'', 0, 0, 0),
+ &CPDF_StreamContentParser::Handle_NextLineShowText},
+ {FXBSTR_ID('B', 0, 0, 0), &CPDF_StreamContentParser::Handle_FillStrokePath},
+ {FXBSTR_ID('B', '*', 0, 0),
+ &CPDF_StreamContentParser::Handle_EOFillStrokePath},
+ {FXBSTR_ID('B', 'D', 'C', 0),
+ &CPDF_StreamContentParser::Handle_BeginMarkedContent_Dictionary},
+ {FXBSTR_ID('B', 'I', 0, 0), &CPDF_StreamContentParser::Handle_BeginImage},
+ {FXBSTR_ID('B', 'M', 'C', 0),
+ &CPDF_StreamContentParser::Handle_BeginMarkedContent},
+ {FXBSTR_ID('B', 'T', 0, 0), &CPDF_StreamContentParser::Handle_BeginText},
+ {FXBSTR_ID('B', 'X', 0, 0),
+ &CPDF_StreamContentParser::Handle_BeginSectionUndefined},
+ {FXBSTR_ID('C', 'S', 0, 0),
+ &CPDF_StreamContentParser::Handle_SetColorSpace_Stroke},
+ {FXBSTR_ID('D', 'P', 0, 0),
+ &CPDF_StreamContentParser::Handle_MarkPlace_Dictionary},
+ {FXBSTR_ID('D', 'o', 0, 0),
+ &CPDF_StreamContentParser::Handle_ExecuteXObject},
+ {FXBSTR_ID('E', 'I', 0, 0), &CPDF_StreamContentParser::Handle_EndImage},
+ {FXBSTR_ID('E', 'M', 'C', 0),
+ &CPDF_StreamContentParser::Handle_EndMarkedContent},
+ {FXBSTR_ID('E', 'T', 0, 0), &CPDF_StreamContentParser::Handle_EndText},
+ {FXBSTR_ID('E', 'X', 0, 0),
+ &CPDF_StreamContentParser::Handle_EndSectionUndefined},
+ {FXBSTR_ID('F', 0, 0, 0), &CPDF_StreamContentParser::Handle_FillPathOld},
+ {FXBSTR_ID('G', 0, 0, 0), &CPDF_StreamContentParser::Handle_SetGray_Stroke},
+ {FXBSTR_ID('I', 'D', 0, 0),
+ &CPDF_StreamContentParser::Handle_BeginImageData},
+ {FXBSTR_ID('J', 0, 0, 0), &CPDF_StreamContentParser::Handle_SetLineCap},
+ {FXBSTR_ID('K', 0, 0, 0),
+ &CPDF_StreamContentParser::Handle_SetCMYKColor_Stroke},
+ {FXBSTR_ID('M', 0, 0, 0), &CPDF_StreamContentParser::Handle_SetMiterLimit},
+ {FXBSTR_ID('M', 'P', 0, 0), &CPDF_StreamContentParser::Handle_MarkPlace},
+ {FXBSTR_ID('Q', 0, 0, 0),
+ &CPDF_StreamContentParser::Handle_RestoreGraphState},
+ {FXBSTR_ID('R', 'G', 0, 0),
+ &CPDF_StreamContentParser::Handle_SetRGBColor_Stroke},
+ {FXBSTR_ID('S', 0, 0, 0), &CPDF_StreamContentParser::Handle_StrokePath},
+ {FXBSTR_ID('S', 'C', 0, 0),
+ &CPDF_StreamContentParser::Handle_SetColor_Stroke},
+ {FXBSTR_ID('S', 'C', 'N', 0),
+ &CPDF_StreamContentParser::Handle_SetColorPS_Stroke},
+ {FXBSTR_ID('T', '*', 0, 0),
+ &CPDF_StreamContentParser::Handle_MoveToNextLine},
+ {FXBSTR_ID('T', 'D', 0, 0),
+ &CPDF_StreamContentParser::Handle_MoveTextPoint_SetLeading},
+ {FXBSTR_ID('T', 'J', 0, 0),
+ &CPDF_StreamContentParser::Handle_ShowText_Positioning},
+ {FXBSTR_ID('T', 'L', 0, 0),
+ &CPDF_StreamContentParser::Handle_SetTextLeading},
+ {FXBSTR_ID('T', 'c', 0, 0), &CPDF_StreamContentParser::Handle_SetCharSpace},
+ {FXBSTR_ID('T', 'd', 0, 0),
+ &CPDF_StreamContentParser::Handle_MoveTextPoint},
+ {FXBSTR_ID('T', 'f', 0, 0), &CPDF_StreamContentParser::Handle_SetFont},
+ {FXBSTR_ID('T', 'j', 0, 0), &CPDF_StreamContentParser::Handle_ShowText},
+ {FXBSTR_ID('T', 'm', 0, 0),
+ &CPDF_StreamContentParser::Handle_SetTextMatrix},
+ {FXBSTR_ID('T', 'r', 0, 0),
+ &CPDF_StreamContentParser::Handle_SetTextRenderMode},
+ {FXBSTR_ID('T', 's', 0, 0), &CPDF_StreamContentParser::Handle_SetTextRise},
+ {FXBSTR_ID('T', 'w', 0, 0), &CPDF_StreamContentParser::Handle_SetWordSpace},
+ {FXBSTR_ID('T', 'z', 0, 0), &CPDF_StreamContentParser::Handle_SetHorzScale},
+ {FXBSTR_ID('W', 0, 0, 0), &CPDF_StreamContentParser::Handle_Clip},
+ {FXBSTR_ID('W', '*', 0, 0), &CPDF_StreamContentParser::Handle_EOClip},
+ {FXBSTR_ID('b', 0, 0, 0),
+ &CPDF_StreamContentParser::Handle_CloseFillStrokePath},
+ {FXBSTR_ID('b', '*', 0, 0),
+ &CPDF_StreamContentParser::Handle_CloseEOFillStrokePath},
+ {FXBSTR_ID('c', 0, 0, 0), &CPDF_StreamContentParser::Handle_CurveTo_123},
+ {FXBSTR_ID('c', 'm', 0, 0), &CPDF_StreamContentParser::Handle_ConcatMatrix},
+ {FXBSTR_ID('c', 's', 0, 0),
+ &CPDF_StreamContentParser::Handle_SetColorSpace_Fill},
+ {FXBSTR_ID('d', 0, 0, 0), &CPDF_StreamContentParser::Handle_SetDash},
+ {FXBSTR_ID('d', '0', 0, 0), &CPDF_StreamContentParser::Handle_SetCharWidth},
+ {FXBSTR_ID('d', '1', 0, 0),
+ &CPDF_StreamContentParser::Handle_SetCachedDevice},
+ {FXBSTR_ID('f', 0, 0, 0), &CPDF_StreamContentParser::Handle_FillPath},
+ {FXBSTR_ID('f', '*', 0, 0), &CPDF_StreamContentParser::Handle_EOFillPath},
+ {FXBSTR_ID('g', 0, 0, 0), &CPDF_StreamContentParser::Handle_SetGray_Fill},
+ {FXBSTR_ID('g', 's', 0, 0),
+ &CPDF_StreamContentParser::Handle_SetExtendGraphState},
+ {FXBSTR_ID('h', 0, 0, 0), &CPDF_StreamContentParser::Handle_ClosePath},
+ {FXBSTR_ID('i', 0, 0, 0), &CPDF_StreamContentParser::Handle_SetFlat},
+ {FXBSTR_ID('j', 0, 0, 0), &CPDF_StreamContentParser::Handle_SetLineJoin},
+ {FXBSTR_ID('k', 0, 0, 0),
+ &CPDF_StreamContentParser::Handle_SetCMYKColor_Fill},
+ {FXBSTR_ID('l', 0, 0, 0), &CPDF_StreamContentParser::Handle_LineTo},
+ {FXBSTR_ID('m', 0, 0, 0), &CPDF_StreamContentParser::Handle_MoveTo},
+ {FXBSTR_ID('n', 0, 0, 0), &CPDF_StreamContentParser::Handle_EndPath},
+ {FXBSTR_ID('q', 0, 0, 0), &CPDF_StreamContentParser::Handle_SaveGraphState},
+ {FXBSTR_ID('r', 'e', 0, 0), &CPDF_StreamContentParser::Handle_Rectangle},
+ {FXBSTR_ID('r', 'g', 0, 0),
+ &CPDF_StreamContentParser::Handle_SetRGBColor_Fill},
+ {FXBSTR_ID('r', 'i', 0, 0),
+ &CPDF_StreamContentParser::Handle_SetRenderIntent},
+ {FXBSTR_ID('s', 0, 0, 0),
+ &CPDF_StreamContentParser::Handle_CloseStrokePath},
+ {FXBSTR_ID('s', 'c', 0, 0),
+ &CPDF_StreamContentParser::Handle_SetColor_Fill},
+ {FXBSTR_ID('s', 'c', 'n', 0),
+ &CPDF_StreamContentParser::Handle_SetColorPS_Fill},
+ {FXBSTR_ID('s', 'h', 0, 0), &CPDF_StreamContentParser::Handle_ShadeFill},
+ {FXBSTR_ID('v', 0, 0, 0), &CPDF_StreamContentParser::Handle_CurveTo_23},
+ {FXBSTR_ID('w', 0, 0, 0), &CPDF_StreamContentParser::Handle_SetLineWidth},
+ {FXBSTR_ID('y', 0, 0, 0), &CPDF_StreamContentParser::Handle_CurveTo_13},
};
-FX_BOOL CPDF_StreamContentParser::OnOperator(const FX_CHAR* op)
-{
- int i = 0;
- FX_DWORD opid = 0;
- while (i < 4 && op[i]) {
- opid = (opid << 8) + op[i];
- i ++;
- }
- while (i < 4) {
- opid <<= 8;
- i ++;
- };
- int low = 0, high = sizeof g_OpCodes / sizeof(OpCode) - 1;
- while (low <= high) {
- int middle = (low + high) / 2;
- int compare = opid - g_OpCodes[middle].m_OpId;
- if (compare == 0) {
- (this->*g_OpCodes[middle].m_OpHandler)();
- return TRUE;
- }
- if (compare < 0) {
- high = middle - 1;
- } else {
- low = middle + 1;
- }
- }
- return m_CompatCount != 0;
-}
-void CPDF_StreamContentParser::Handle_CloseFillStrokePath()
-{
- if (m_Options.m_bTextOnly) {
- return;
- }
- Handle_ClosePath();
- AddPathObject(FXFILL_WINDING, TRUE);
-}
-void CPDF_StreamContentParser::Handle_FillStrokePath()
-{
- if (m_Options.m_bTextOnly) {
- return;
- }
- AddPathObject(FXFILL_WINDING, TRUE);
-}
-void CPDF_StreamContentParser::Handle_CloseEOFillStrokePath()
-{
- if (m_Options.m_bTextOnly) {
- return;
- }
- AddPathPoint(m_PathStartX, m_PathStartY, FXPT_LINETO | FXPT_CLOSEFIGURE);
- AddPathObject(FXFILL_ALTERNATE, TRUE);
-}
-void CPDF_StreamContentParser::Handle_EOFillStrokePath()
-{
- if (m_Options.m_bTextOnly) {
- return;
- }
- AddPathObject(FXFILL_ALTERNATE, TRUE);
-}
-void CPDF_StreamContentParser::Handle_BeginMarkedContent_Dictionary()
-{
- if (!m_Options.m_bMarkedContent) {
- return;
- }
- CFX_ByteString tag = GetString(1);
- CPDF_Object* pProperty = GetObject(0);
+FX_BOOL CPDF_StreamContentParser::OnOperator(const FX_CHAR* op) {
+ int i = 0;
+ FX_DWORD opid = 0;
+ while (i < 4 && op[i]) {
+ opid = (opid << 8) + op[i];
+ i++;
+ }
+ while (i < 4) {
+ opid <<= 8;
+ i++;
+ };
+ int low = 0, high = sizeof g_OpCodes / sizeof(OpCode) - 1;
+ while (low <= high) {
+ int middle = (low + high) / 2;
+ int compare = opid - g_OpCodes[middle].m_OpId;
+ if (compare == 0) {
+ (this->*g_OpCodes[middle].m_OpHandler)();
+ return TRUE;
+ }
+ if (compare < 0) {
+ high = middle - 1;
+ } else {
+ low = middle + 1;
+ }
+ }
+ return m_CompatCount != 0;
+}
+void CPDF_StreamContentParser::Handle_CloseFillStrokePath() {
+ if (m_Options.m_bTextOnly) {
+ return;
+ }
+ Handle_ClosePath();
+ AddPathObject(FXFILL_WINDING, TRUE);
+}
+void CPDF_StreamContentParser::Handle_FillStrokePath() {
+ if (m_Options.m_bTextOnly) {
+ return;
+ }
+ AddPathObject(FXFILL_WINDING, TRUE);
+}
+void CPDF_StreamContentParser::Handle_CloseEOFillStrokePath() {
+ if (m_Options.m_bTextOnly) {
+ return;
+ }
+ AddPathPoint(m_PathStartX, m_PathStartY, FXPT_LINETO | FXPT_CLOSEFIGURE);
+ AddPathObject(FXFILL_ALTERNATE, TRUE);
+}
+void CPDF_StreamContentParser::Handle_EOFillStrokePath() {
+ if (m_Options.m_bTextOnly) {
+ return;
+ }
+ AddPathObject(FXFILL_ALTERNATE, TRUE);
+}
+void CPDF_StreamContentParser::Handle_BeginMarkedContent_Dictionary() {
+ if (!m_Options.m_bMarkedContent) {
+ return;
+ }
+ CFX_ByteString tag = GetString(1);
+ CPDF_Object* pProperty = GetObject(0);
+ if (pProperty == NULL) {
+ return;
+ }
+ FX_BOOL bDirect = TRUE;
+ if (pProperty->GetType() == PDFOBJ_NAME) {
+ pProperty = FindResourceObj(FX_BSTRC("Properties"), pProperty->GetString());
if (pProperty == NULL) {
- return;
- }
- FX_BOOL bDirect = TRUE;
- if (pProperty->GetType() == PDFOBJ_NAME) {
- pProperty = FindResourceObj(FX_BSTRC("Properties"), pProperty->GetString());
- if (pProperty == NULL) {
- return;
- }
- bDirect = FALSE;
- }
- if (pProperty->GetType() != PDFOBJ_DICTIONARY) {
- return;
- }
- m_CurContentMark.GetModify()->AddMark(tag, (CPDF_Dictionary*)pProperty, bDirect);
-}
-void CPDF_StreamContentParser::Handle_BeginMarkedContent()
-{
- if (!m_Options.m_bMarkedContent) {
- return;
- }
- CFX_ByteString tag = GetString(0);
- m_CurContentMark.GetModify()->AddMark(tag, NULL, FALSE);
+ return;
+ }
+ bDirect = FALSE;
+ }
+ if (pProperty->GetType() != PDFOBJ_DICTIONARY) {
+ return;
+ }
+ m_CurContentMark.GetModify()->AddMark(tag, (CPDF_Dictionary*)pProperty,
+ bDirect);
+}
+void CPDF_StreamContentParser::Handle_BeginMarkedContent() {
+ if (!m_Options.m_bMarkedContent) {
+ return;
+ }
+ CFX_ByteString tag = GetString(0);
+ m_CurContentMark.GetModify()->AddMark(tag, NULL, FALSE);
}
struct _FX_BSTR {
- const FX_CHAR* m_Ptr;
- int m_Size;
+ const FX_CHAR* m_Ptr;
+ int m_Size;
};
-#define _FX_BSTRC(str) {str, sizeof(str)-1}
+#define _FX_BSTRC(str) \
+ { str, sizeof(str) - 1 }
const _FX_BSTR _PDF_InlineKeyAbbr[] = {
- _FX_BSTRC("BitsPerComponent"), _FX_BSTRC("BPC"),
- _FX_BSTRC("ColorSpace"), _FX_BSTRC("CS"),
- _FX_BSTRC("Decode"), _FX_BSTRC("D"),
- _FX_BSTRC("DecodeParms"), _FX_BSTRC("DP"),
- _FX_BSTRC("Filter"), _FX_BSTRC("F"),
- _FX_BSTRC("Height"), _FX_BSTRC("H"),
- _FX_BSTRC("ImageMask"), _FX_BSTRC("IM"),
- _FX_BSTRC("Interpolate"), _FX_BSTRC("I"),
- _FX_BSTRC("Width"), _FX_BSTRC("W"),
+ _FX_BSTRC("BitsPerComponent"),
+ _FX_BSTRC("BPC"),
+ _FX_BSTRC("ColorSpace"),
+ _FX_BSTRC("CS"),
+ _FX_BSTRC("Decode"),
+ _FX_BSTRC("D"),
+ _FX_BSTRC("DecodeParms"),
+ _FX_BSTRC("DP"),
+ _FX_BSTRC("Filter"),
+ _FX_BSTRC("F"),
+ _FX_BSTRC("Height"),
+ _FX_BSTRC("H"),
+ _FX_BSTRC("ImageMask"),
+ _FX_BSTRC("IM"),
+ _FX_BSTRC("Interpolate"),
+ _FX_BSTRC("I"),
+ _FX_BSTRC("Width"),
+ _FX_BSTRC("W"),
};
const _FX_BSTR _PDF_InlineValueAbbr[] = {
- _FX_BSTRC("DeviceGray"), _FX_BSTRC("G"),
- _FX_BSTRC("DeviceRGB"), _FX_BSTRC("RGB"),
- _FX_BSTRC("DeviceCMYK"), _FX_BSTRC("CMYK"),
- _FX_BSTRC("Indexed"), _FX_BSTRC("I"),
- _FX_BSTRC("ASCIIHexDecode"), _FX_BSTRC("AHx"),
- _FX_BSTRC("ASCII85Decode"), _FX_BSTRC("A85"),
- _FX_BSTRC("LZWDecode"), _FX_BSTRC("LZW"),
- _FX_BSTRC("FlateDecode"), _FX_BSTRC("Fl"),
+ _FX_BSTRC("DeviceGray"), _FX_BSTRC("G"),
+ _FX_BSTRC("DeviceRGB"), _FX_BSTRC("RGB"),
+ _FX_BSTRC("DeviceCMYK"), _FX_BSTRC("CMYK"),
+ _FX_BSTRC("Indexed"), _FX_BSTRC("I"),
+ _FX_BSTRC("ASCIIHexDecode"), _FX_BSTRC("AHx"),
+ _FX_BSTRC("ASCII85Decode"), _FX_BSTRC("A85"),
+ _FX_BSTRC("LZWDecode"), _FX_BSTRC("LZW"),
+ _FX_BSTRC("FlateDecode"), _FX_BSTRC("Fl"),
_FX_BSTRC("RunLengthDecode"), _FX_BSTRC("RL"),
- _FX_BSTRC("CCITTFaxDecode"), _FX_BSTRC("CCF"),
- _FX_BSTRC("DCTDecode"), _FX_BSTRC("DCT"),
+ _FX_BSTRC("CCITTFaxDecode"), _FX_BSTRC("CCF"),
+ _FX_BSTRC("DCTDecode"), _FX_BSTRC("DCT"),
};
-static CFX_ByteStringC _PDF_FindFullName(const _FX_BSTR* table, int count, const CFX_ByteStringC& abbr)
-{
- int i = 0;
- while (i < count) {
- if (abbr.GetLength() == table[i + 1].m_Size && FXSYS_memcmp(abbr.GetPtr(), table[i + 1].m_Ptr, abbr.GetLength()) == 0) {
- return CFX_ByteStringC(table[i].m_Ptr, table[i].m_Size);
- }
- i += 2;
- }
- return CFX_ByteStringC();
-}
-void _PDF_ReplaceAbbr(CPDF_Object* pObj)
-{
- switch (pObj->GetType()) {
- case PDFOBJ_DICTIONARY: {
- CPDF_Dictionary* pDict = (CPDF_Dictionary*)pObj;
- FX_POSITION pos = pDict->GetStartPos();
- while (pos) {
- CFX_ByteString key;
- CPDF_Object* value = pDict->GetNextElement(pos, key);
- CFX_ByteStringC fullname = _PDF_FindFullName(_PDF_InlineKeyAbbr,
- sizeof _PDF_InlineKeyAbbr / sizeof(_FX_BSTR), key);
- if (!fullname.IsEmpty()) {
- pDict->ReplaceKey(key, fullname);
- key = fullname;
- }
- if (value->GetType() == PDFOBJ_NAME) {
- CFX_ByteString name = value->GetString();
- fullname = _PDF_FindFullName(_PDF_InlineValueAbbr,
- sizeof _PDF_InlineValueAbbr / sizeof(_FX_BSTR), name);
- if (!fullname.IsEmpty()) {
- pDict->SetAtName(key, fullname);
- }
- } else {
- _PDF_ReplaceAbbr(value);
- }
- }
- break;
- }
- case PDFOBJ_ARRAY: {
- CPDF_Array* pArray = (CPDF_Array*)pObj;
- for (FX_DWORD i = 0; i < pArray->GetCount(); i ++) {
- CPDF_Object* pElement = pArray->GetElement(i);
- if (pElement->GetType() == PDFOBJ_NAME) {
- CFX_ByteString name = pElement->GetString();
- CFX_ByteStringC fullname = _PDF_FindFullName(_PDF_InlineValueAbbr,
- sizeof _PDF_InlineValueAbbr / sizeof(_FX_BSTR), name);
- if (!fullname.IsEmpty()) {
- pArray->SetAt(i, CPDF_Name::Create(fullname));
- }
- } else {
- _PDF_ReplaceAbbr(pElement);
- }
- }
- break;
- }
- }
-}
-static CFX_ByteStringC _PDF_FindAbbrName(const _FX_BSTR* table, int count, const CFX_ByteStringC& fullName)
-{
- int i = 0;
- while (i < count) {
- if (fullName.GetLength() == table[i].m_Size && FXSYS_memcmp(fullName.GetPtr(), table[i].m_Ptr, fullName.GetLength()) == 0) {
- return CFX_ByteStringC(table[i + 1].m_Ptr, table[i + 1].m_Size);
+static CFX_ByteStringC _PDF_FindFullName(const _FX_BSTR* table,
+ int count,
+ const CFX_ByteStringC& abbr) {
+ int i = 0;
+ while (i < count) {
+ if (abbr.GetLength() == table[i + 1].m_Size &&
+ FXSYS_memcmp(abbr.GetPtr(), table[i + 1].m_Ptr, abbr.GetLength()) ==
+ 0) {
+ return CFX_ByteStringC(table[i].m_Ptr, table[i].m_Size);
+ }
+ i += 2;
+ }
+ return CFX_ByteStringC();
+}
+void _PDF_ReplaceAbbr(CPDF_Object* pObj) {
+ switch (pObj->GetType()) {
+ case PDFOBJ_DICTIONARY: {
+ CPDF_Dictionary* pDict = (CPDF_Dictionary*)pObj;
+ FX_POSITION pos = pDict->GetStartPos();
+ while (pos) {
+ CFX_ByteString key;
+ CPDF_Object* value = pDict->GetNextElement(pos, key);
+ CFX_ByteStringC fullname = _PDF_FindFullName(
+ _PDF_InlineKeyAbbr, sizeof _PDF_InlineKeyAbbr / sizeof(_FX_BSTR),
+ key);
+ if (!fullname.IsEmpty()) {
+ pDict->ReplaceKey(key, fullname);
+ key = fullname;
}
- i += 2;
- }
- return CFX_ByteStringC();
-}
-void _PDF_ReplaceFull(CPDF_Object* pObj)
-{
- switch (pObj->GetType()) {
- case PDFOBJ_DICTIONARY: {
- CPDF_Dictionary* pDict = (CPDF_Dictionary*)pObj;
- FX_POSITION pos = pDict->GetStartPos();
- while (pos) {
- CFX_ByteString key;
- CPDF_Object* value = pDict->GetNextElement(pos, key);
- CFX_ByteStringC abbrName = _PDF_FindAbbrName(_PDF_InlineKeyAbbr,
- sizeof(_PDF_InlineKeyAbbr) / sizeof(_FX_BSTR), key);
- if (!abbrName.IsEmpty()) {
- pDict->ReplaceKey(key, abbrName);
- key = abbrName;
- }
- if (value->GetType() == PDFOBJ_NAME) {
- CFX_ByteString name = value->GetString();
- abbrName = _PDF_FindAbbrName(_PDF_InlineValueAbbr,
- sizeof(_PDF_InlineValueAbbr) / sizeof(_FX_BSTR), name);
- if (!abbrName.IsEmpty()) {
- pDict->SetAtName(key, abbrName);
- }
- } else {
- _PDF_ReplaceFull(value);
- }
- }
- break;
- }
- case PDFOBJ_ARRAY: {
- CPDF_Array* pArray = (CPDF_Array*)pObj;
- for (FX_DWORD i = 0; i < pArray->GetCount(); i ++) {
- CPDF_Object* pElement = pArray->GetElement(i);
- if (pElement->GetType() == PDFOBJ_NAME) {
- CFX_ByteString name = pElement->GetString();
- CFX_ByteStringC abbrName = _PDF_FindAbbrName(_PDF_InlineValueAbbr,
- sizeof _PDF_InlineValueAbbr / sizeof(_FX_BSTR), name);
- if (!abbrName.IsEmpty()) {
- pArray->SetAt(i, CPDF_Name::Create(abbrName));
- }
- } else {
- _PDF_ReplaceFull(pElement);
- }
- }
- break;
- }
- }
-}
-void CPDF_StreamContentParser::Handle_BeginText()
-{
- m_pCurStates->m_TextMatrix.Set(1.0f, 0, 0, 1.0f, 0, 0);
- OnChangeTextMatrix();
- m_pCurStates->m_TextX = 0;
- m_pCurStates->m_TextY = 0;
- m_pCurStates->m_TextLineX = 0;
- m_pCurStates->m_TextLineY = 0;
-}
-void CPDF_StreamContentParser::Handle_BeginSectionUndefined()
-{
- m_CompatCount ++;
-}
-void CPDF_StreamContentParser::Handle_CurveTo_123()
-{
- if (m_Options.m_bTextOnly) {
- return;
- }
- AddPathPoint(GetNumber(5), GetNumber(4), FXPT_BEZIERTO);
- AddPathPoint(GetNumber(3), GetNumber(2), FXPT_BEZIERTO);
- AddPathPoint(GetNumber(1), GetNumber(0), FXPT_BEZIERTO);
-}
-void CPDF_StreamContentParser::Handle_ConcatMatrix()
-{
- FX_FLOAT a2 = GetNumber16(5), b2 = GetNumber16(4), c2 = GetNumber16(3), d2 = GetNumber16(2);
- FX_FLOAT e2 = GetNumber(1), f2 = GetNumber(0);
- CFX_AffineMatrix new_matrix(a2, b2, c2, d2, e2, f2);
- new_matrix.Concat(m_pCurStates->m_CTM);
- m_pCurStates->m_CTM = new_matrix;
- OnChangeTextMatrix();
-}
-void CPDF_StreamContentParser::Handle_SetColorSpace_Fill()
-{
- if (m_Options.m_bTextOnly) {
- return;
- }
- CFX_ByteString csname = GetString(0);
- CPDF_ColorSpace* pCS = FindColorSpace(csname);
- if (pCS == NULL) {
- return;
- }
- m_pCurStates->m_ColorState.GetModify()->m_FillColor.SetColorSpace(pCS);
-}
-void CPDF_StreamContentParser::Handle_SetColorSpace_Stroke()
-{
- if (m_Options.m_bTextOnly) {
- return;
- }
- CFX_ByteString csname = GetString(0);
- CPDF_ColorSpace* pCS = FindColorSpace(csname);
- if (pCS == NULL) {
- return;
- }
- m_pCurStates->m_ColorState.GetModify()->m_StrokeColor.SetColorSpace(pCS);
-}
-void CPDF_StreamContentParser::Handle_SetDash()
-{
- if (m_Options.m_bTextOnly) {
- return;
- }
- CPDF_Array* pArray = GetObject(1) ? GetObject(1)->GetArray() : NULL;
- if (pArray == NULL) {
- return;
- }
- m_pCurStates->SetLineDash(pArray, GetNumber(0), 1.0f);
-}
-void CPDF_StreamContentParser::Handle_SetCharWidth()
-{
- m_Type3Data[0] = GetNumber(1);
- m_Type3Data[1] = GetNumber(0);
- m_bColored = TRUE;
-}
-void CPDF_StreamContentParser::Handle_SetCachedDevice()
-{
- for (int i = 0; i < 6; i ++) {
- m_Type3Data[i] = GetNumber(5 - i);
- }
- m_bColored = FALSE;
-}
-void CPDF_StreamContentParser::Handle_ExecuteXObject()
-{
- CFX_ByteString name = GetString(0);
- if (name == m_LastImageName && m_pLastImage && m_pLastImage->GetStream() && m_pLastImage->GetStream()->GetObjNum()) {
- AddImage(NULL, m_pLastImage, FALSE);
- return;
- }
- if (m_Options.m_bTextOnly) {
- CPDF_Object* pRes = NULL;
- if (m_pResources == NULL) {
- return;
- }
- if (m_pResources == m_pPageResources) {
- CPDF_Dictionary* pList = m_pResources->GetDict(FX_BSTRC("XObject"));
- if (pList == NULL) {
- return;
- }
- pRes = pList->GetElement(name);
- if (pRes == NULL || pRes->GetType() != PDFOBJ_REFERENCE) {
- return;
- }
+ if (value->GetType() == PDFOBJ_NAME) {
+ CFX_ByteString name = value->GetString();
+ fullname = _PDF_FindFullName(
+ _PDF_InlineValueAbbr,
+ sizeof _PDF_InlineValueAbbr / sizeof(_FX_BSTR), name);
+ if (!fullname.IsEmpty()) {
+ pDict->SetAtName(key, fullname);
+ }
} else {
- CPDF_Dictionary* pList = m_pResources->GetDict(FX_BSTRC("XObject"));
- if (pList == NULL) {
- if (m_pPageResources == NULL) {
- return;
- }
- CPDF_Dictionary* pList = m_pPageResources->GetDict(FX_BSTRC("XObject"));
- if (pList == NULL) {
- return;
- }
- pRes = pList->GetElement(name);
- if (pRes == NULL || pRes->GetType() != PDFOBJ_REFERENCE) {
- return;
- }
- } else {
- pRes = pList->GetElement(name);
- if (pRes == NULL || pRes->GetType() != PDFOBJ_REFERENCE) {
- return;
- }
- }
+ _PDF_ReplaceAbbr(value);
}
- FX_BOOL bForm;
- if (m_pDocument->IsFormStream(((CPDF_Reference*)pRes)->GetRefObjNum(), bForm) && !bForm) {
- return;
- }
- }
- CPDF_Stream* pXObject = (CPDF_Stream*)FindResourceObj(FX_BSTRC("XObject"), name);
- if (pXObject == NULL || pXObject->GetType() != PDFOBJ_STREAM) {
- m_bResourceMissing = TRUE;
- return;
- }
- CFX_ByteStringC type = pXObject->GetDict() ? pXObject->GetDict()->GetConstString(FX_BSTRC("Subtype")) : CFX_ByteStringC();
- if (type == FX_BSTRC("Image")) {
- if (m_Options.m_bTextOnly) {
- return;
+ }
+ break;
+ }
+ case PDFOBJ_ARRAY: {
+ CPDF_Array* pArray = (CPDF_Array*)pObj;
+ for (FX_DWORD i = 0; i < pArray->GetCount(); i++) {
+ CPDF_Object* pElement = pArray->GetElement(i);
+ if (pElement->GetType() == PDFOBJ_NAME) {
+ CFX_ByteString name = pElement->GetString();
+ CFX_ByteStringC fullname = _PDF_FindFullName(
+ _PDF_InlineValueAbbr,
+ sizeof _PDF_InlineValueAbbr / sizeof(_FX_BSTR), name);
+ if (!fullname.IsEmpty()) {
+ pArray->SetAt(i, CPDF_Name::Create(fullname));
+ }
+ } else {
+ _PDF_ReplaceAbbr(pElement);
}
- CPDF_ImageObject* pObj = AddImage(pXObject, NULL, FALSE);
- m_LastImageName = name;
- m_pLastImage = pObj->m_pImage;
- } else if (type == FX_BSTRC("Form")) {
- AddForm(pXObject);
- } else {
- return;
- }
-}
-void CPDF_StreamContentParser::AddForm(CPDF_Stream* pStream)
-{
- if (!m_Options.m_bSeparateForm) {
- CPDF_Dictionary* pResources = pStream->GetDict()->GetDict(FX_BSTRC("Resources"));
- CFX_AffineMatrix form_matrix = pStream->GetDict()->GetMatrix(FX_BSTRC("Matrix"));
- form_matrix.Concat(m_pCurStates->m_CTM);
- CPDF_Array* pBBox = pStream->GetDict()->GetArray(FX_BSTRC("BBox"));
- CFX_FloatRect form_bbox;
- CPDF_Path ClipPath;
- if (pBBox) {
- form_bbox = pStream->GetDict()->GetRect(FX_BSTRC("BBox"));
- ClipPath.New();
- ClipPath.AppendRect(form_bbox.left, form_bbox.bottom, form_bbox.right, form_bbox.top);
- ClipPath.Transform(&form_matrix);
- form_bbox.Transform(&form_matrix);
+ }
+ break;
+ }
+ }
+}
+static CFX_ByteStringC _PDF_FindAbbrName(const _FX_BSTR* table,
+ int count,
+ const CFX_ByteStringC& fullName) {
+ int i = 0;
+ while (i < count) {
+ if (fullName.GetLength() == table[i].m_Size &&
+ FXSYS_memcmp(fullName.GetPtr(), table[i].m_Ptr, fullName.GetLength()) ==
+ 0) {
+ return CFX_ByteStringC(table[i + 1].m_Ptr, table[i + 1].m_Size);
+ }
+ i += 2;
+ }
+ return CFX_ByteStringC();
+}
+void _PDF_ReplaceFull(CPDF_Object* pObj) {
+ switch (pObj->GetType()) {
+ case PDFOBJ_DICTIONARY: {
+ CPDF_Dictionary* pDict = (CPDF_Dictionary*)pObj;
+ FX_POSITION pos = pDict->GetStartPos();
+ while (pos) {
+ CFX_ByteString key;
+ CPDF_Object* value = pDict->GetNextElement(pos, key);
+ CFX_ByteStringC abbrName = _PDF_FindAbbrName(
+ _PDF_InlineKeyAbbr, sizeof(_PDF_InlineKeyAbbr) / sizeof(_FX_BSTR),
+ key);
+ if (!abbrName.IsEmpty()) {
+ pDict->ReplaceKey(key, abbrName);
+ key = abbrName;
}
- CPDF_StreamContentParser parser(
- m_pDocument, m_pPageResources, m_pResources, &m_mtContentToUser,
- m_pObjectList, pResources, &form_bbox, &m_Options,
- m_pCurStates.get(), m_Level + 1);
- parser.m_pCurStates->m_CTM = form_matrix;
- if (ClipPath.NotNull()) {
- parser.m_pCurStates->m_ClipPath.AppendPath(ClipPath, FXFILL_WINDING, TRUE);
+ if (value->GetType() == PDFOBJ_NAME) {
+ CFX_ByteString name = value->GetString();
+ abbrName = _PDF_FindAbbrName(
+ _PDF_InlineValueAbbr,
+ sizeof(_PDF_InlineValueAbbr) / sizeof(_FX_BSTR), name);
+ if (!abbrName.IsEmpty()) {
+ pDict->SetAtName(key, abbrName);
+ }
+ } else {
+ _PDF_ReplaceFull(value);
}
- CPDF_StreamAcc stream;
- stream.LoadAllData(pStream, FALSE);
- if (stream.GetSize() == 0) {
- return;
+ }
+ break;
+ }
+ case PDFOBJ_ARRAY: {
+ CPDF_Array* pArray = (CPDF_Array*)pObj;
+ for (FX_DWORD i = 0; i < pArray->GetCount(); i++) {
+ CPDF_Object* pElement = pArray->GetElement(i);
+ if (pElement->GetType() == PDFOBJ_NAME) {
+ CFX_ByteString name = pElement->GetString();
+ CFX_ByteStringC abbrName = _PDF_FindAbbrName(
+ _PDF_InlineValueAbbr,
+ sizeof _PDF_InlineValueAbbr / sizeof(_FX_BSTR), name);
+ if (!abbrName.IsEmpty()) {
+ pArray->SetAt(i, CPDF_Name::Create(abbrName));
+ }
+ } else {
+ _PDF_ReplaceFull(pElement);
}
- parser.Parse(stream.GetData(), stream.GetSize(), 0);
- return;
- }
- CPDF_FormObject* pFormObj = new CPDF_FormObject;
- pFormObj->m_pForm = new CPDF_Form(m_pDocument, m_pPageResources, pStream, m_pResources);
- pFormObj->m_FormMatrix = m_pCurStates->m_CTM;
- pFormObj->m_FormMatrix.Concat(m_mtContentToUser);
- CPDF_AllStates status;
- status.m_GeneralState = m_pCurStates->m_GeneralState;
- status.m_GraphState = m_pCurStates->m_GraphState;
- status.m_ColorState = m_pCurStates->m_ColorState;
- status.m_TextState = m_pCurStates->m_TextState;
- pFormObj->m_pForm->ParseContent(&status, NULL, NULL, &m_Options, m_Level + 1);
- if (!m_pObjectList->m_bBackgroundAlphaNeeded && pFormObj->m_pForm->m_bBackgroundAlphaNeeded) {
- m_pObjectList->m_bBackgroundAlphaNeeded = TRUE;
- }
- pFormObj->CalcBoundingBox();
- SetGraphicStates(pFormObj, TRUE, TRUE, TRUE);
- m_pObjectList->m_ObjectList.AddTail(pFormObj);
-}
-CPDF_ImageObject* CPDF_StreamContentParser::AddImage(CPDF_Stream* pStream, CPDF_Image* pImage, FX_BOOL bInline)
-{
- if (pStream == NULL && pImage == NULL) {
- return NULL;
- }
- CFX_AffineMatrix ImageMatrix;
- ImageMatrix.Copy(m_pCurStates->m_CTM);
- ImageMatrix.Concat(m_mtContentToUser);
- CPDF_ImageObject* pImageObj = new CPDF_ImageObject;
- if (pImage) {
- pImageObj->m_pImage = m_pDocument->GetPageData()->GetImage(pImage->GetStream());
- } else if (pStream->GetObjNum()) {
- pImageObj->m_pImage = m_pDocument->LoadImageF(pStream);
- } else {
- pImageObj->m_pImage = new CPDF_Image(m_pDocument);
- pImageObj->m_pImage->LoadImageF(pStream, bInline);
- }
- SetGraphicStates(pImageObj, pImageObj->m_pImage->IsMask(), FALSE, FALSE);
- pImageObj->m_Matrix = ImageMatrix;
- pImageObj->CalcBoundingBox();
- m_pObjectList->m_ObjectList.AddTail(pImageObj);
- return pImageObj;
-}
-void CPDF_StreamContentParser::Handle_MarkPlace_Dictionary()
-{
-}
-void CPDF_StreamContentParser::Handle_EndImage()
-{
-}
-void CPDF_StreamContentParser::Handle_EndMarkedContent()
-{
- if (!m_Options.m_bMarkedContent) {
- return;
- }
- if (m_CurContentMark.IsNull()) {
- return;
+ }
+ break;
+ }
+ }
+}
+void CPDF_StreamContentParser::Handle_BeginText() {
+ m_pCurStates->m_TextMatrix.Set(1.0f, 0, 0, 1.0f, 0, 0);
+ OnChangeTextMatrix();
+ m_pCurStates->m_TextX = 0;
+ m_pCurStates->m_TextY = 0;
+ m_pCurStates->m_TextLineX = 0;
+ m_pCurStates->m_TextLineY = 0;
+}
+void CPDF_StreamContentParser::Handle_BeginSectionUndefined() {
+ m_CompatCount++;
+}
+void CPDF_StreamContentParser::Handle_CurveTo_123() {
+ if (m_Options.m_bTextOnly) {
+ return;
+ }
+ AddPathPoint(GetNumber(5), GetNumber(4), FXPT_BEZIERTO);
+ AddPathPoint(GetNumber(3), GetNumber(2), FXPT_BEZIERTO);
+ AddPathPoint(GetNumber(1), GetNumber(0), FXPT_BEZIERTO);
+}
+void CPDF_StreamContentParser::Handle_ConcatMatrix() {
+ FX_FLOAT a2 = GetNumber16(5), b2 = GetNumber16(4), c2 = GetNumber16(3),
+ d2 = GetNumber16(2);
+ FX_FLOAT e2 = GetNumber(1), f2 = GetNumber(0);
+ CFX_AffineMatrix new_matrix(a2, b2, c2, d2, e2, f2);
+ new_matrix.Concat(m_pCurStates->m_CTM);
+ m_pCurStates->m_CTM = new_matrix;
+ OnChangeTextMatrix();
+}
+void CPDF_StreamContentParser::Handle_SetColorSpace_Fill() {
+ if (m_Options.m_bTextOnly) {
+ return;
+ }
+ CFX_ByteString csname = GetString(0);
+ CPDF_ColorSpace* pCS = FindColorSpace(csname);
+ if (pCS == NULL) {
+ return;
+ }
+ m_pCurStates->m_ColorState.GetModify()->m_FillColor.SetColorSpace(pCS);
+}
+void CPDF_StreamContentParser::Handle_SetColorSpace_Stroke() {
+ if (m_Options.m_bTextOnly) {
+ return;
+ }
+ CFX_ByteString csname = GetString(0);
+ CPDF_ColorSpace* pCS = FindColorSpace(csname);
+ if (pCS == NULL) {
+ return;
+ }
+ m_pCurStates->m_ColorState.GetModify()->m_StrokeColor.SetColorSpace(pCS);
+}
+void CPDF_StreamContentParser::Handle_SetDash() {
+ if (m_Options.m_bTextOnly) {
+ return;
+ }
+ CPDF_Array* pArray = GetObject(1) ? GetObject(1)->GetArray() : NULL;
+ if (pArray == NULL) {
+ return;
+ }
+ m_pCurStates->SetLineDash(pArray, GetNumber(0), 1.0f);
+}
+void CPDF_StreamContentParser::Handle_SetCharWidth() {
+ m_Type3Data[0] = GetNumber(1);
+ m_Type3Data[1] = GetNumber(0);
+ m_bColored = TRUE;
+}
+void CPDF_StreamContentParser::Handle_SetCachedDevice() {
+ for (int i = 0; i < 6; i++) {
+ m_Type3Data[i] = GetNumber(5 - i);
+ }
+ m_bColored = FALSE;
+}
+void CPDF_StreamContentParser::Handle_ExecuteXObject() {
+ CFX_ByteString name = GetString(0);
+ if (name == m_LastImageName && m_pLastImage && m_pLastImage->GetStream() &&
+ m_pLastImage->GetStream()->GetObjNum()) {
+ AddImage(NULL, m_pLastImage, FALSE);
+ return;
+ }
+ if (m_Options.m_bTextOnly) {
+ CPDF_Object* pRes = NULL;
+ if (m_pResources == NULL) {
+ return;
}
- int count = m_CurContentMark.GetObject()->CountItems();
- if (count == 1) {
- m_CurContentMark.SetNull();
+ if (m_pResources == m_pPageResources) {
+ CPDF_Dictionary* pList = m_pResources->GetDict(FX_BSTRC("XObject"));
+ if (pList == NULL) {
return;
- }
- m_CurContentMark.GetModify()->DeleteLastMark();
-}
-void CPDF_StreamContentParser::Handle_EndText()
-{
- int count = m_ClipTextList.GetSize();
- if (count == 0) {
+ }
+ pRes = pList->GetElement(name);
+ if (pRes == NULL || pRes->GetType() != PDFOBJ_REFERENCE) {
return;
- }
- if (m_pCurStates->m_TextState.GetObject()->m_TextMode < 4) {
- for (int i = 0; i < count; i ++) {
- CPDF_TextObject* pText = (CPDF_TextObject*)m_ClipTextList.GetAt(i);
- delete pText;
- }
+ }
} else {
- m_pCurStates->m_ClipPath.AppendTexts((CPDF_TextObject**)m_ClipTextList.GetData(), count);
- }
- m_ClipTextList.RemoveAll();
-}
-void CPDF_StreamContentParser::Handle_EndSectionUndefined()
-{
- if (m_CompatCount) {
- m_CompatCount --;
- }
-}
-void CPDF_StreamContentParser::Handle_FillPath()
-{
- if (m_Options.m_bTextOnly) {
- return;
- }
- AddPathObject(FXFILL_WINDING, FALSE);
-}
-void CPDF_StreamContentParser::Handle_FillPathOld()
-{
- if (m_Options.m_bTextOnly) {
- return;
- }
- AddPathObject(FXFILL_WINDING, FALSE);
-}
-void CPDF_StreamContentParser::Handle_EOFillPath()
-{
- if (m_Options.m_bTextOnly) {
- return;
- }
- AddPathObject(FXFILL_ALTERNATE, FALSE);
-}
-void CPDF_StreamContentParser::Handle_SetGray_Fill()
-{
- FX_FLOAT value = GetNumber(0);
- CPDF_ColorSpace* pCS = CPDF_ColorSpace::GetStockCS(PDFCS_DEVICEGRAY);
- m_pCurStates->m_ColorState.SetFillColor(pCS, &value, 1);
-}
-void CPDF_StreamContentParser::Handle_SetGray_Stroke()
-{
- FX_FLOAT value = GetNumber(0);
- CPDF_ColorSpace* pCS = CPDF_ColorSpace::GetStockCS(PDFCS_DEVICEGRAY);
- m_pCurStates->m_ColorState.SetStrokeColor(pCS, &value, 1);
-}
-void CPDF_StreamContentParser::Handle_SetExtendGraphState()
-{
- CFX_ByteString name = GetString(0);
- CPDF_Dictionary* pGS = (CPDF_Dictionary*)FindResourceObj(FX_BSTRC("ExtGState"), name);
- if (pGS == NULL || pGS->GetType() != PDFOBJ_DICTIONARY) {
- m_bResourceMissing = TRUE;
- return;
- }
- m_pCurStates->ProcessExtGS(pGS, this);
-}
-void CPDF_StreamContentParser::Handle_ClosePath()
-{
- if (m_Options.m_bTextOnly) {
- return;
- }
- if (m_PathPointCount == 0) {
- return;
- }
- if (m_PathStartX != m_PathCurrentX || m_PathStartY != m_PathCurrentY) {
- AddPathPoint(m_PathStartX, m_PathStartY, FXPT_LINETO | FXPT_CLOSEFIGURE);
- } else if (m_pPathPoints[m_PathPointCount - 1].m_Flag != FXPT_MOVETO) {
- m_pPathPoints[m_PathPointCount - 1].m_Flag |= FXPT_CLOSEFIGURE;
- }
-}
-void CPDF_StreamContentParser::Handle_SetFlat()
-{
- m_pCurStates->m_GeneralState.GetModify()->m_Flatness = GetNumber(0);
-}
-void CPDF_StreamContentParser::Handle_BeginImageData()
-{
-}
-void CPDF_StreamContentParser::Handle_SetLineJoin()
-{
- m_pCurStates->m_GraphState.GetModify()->m_LineJoin = (CFX_GraphStateData::LineJoin)GetInteger(0);
-}
-void CPDF_StreamContentParser::Handle_SetLineCap()
-{
- m_pCurStates->m_GraphState.GetModify()->m_LineCap = (CFX_GraphStateData::LineCap)GetInteger(0);
-}
-void CPDF_StreamContentParser::Handle_SetCMYKColor_Fill()
-{
- REQUIRE_PARAMS(4);
- FX_FLOAT values[4];
- for (int i = 0; i < 4; i ++) {
- values[i] = GetNumber(3 - i);
- }
- CPDF_ColorSpace* pCS = CPDF_ColorSpace::GetStockCS(PDFCS_DEVICECMYK);
- m_pCurStates->m_ColorState.SetFillColor(pCS, values, 4);
-}
-void CPDF_StreamContentParser::Handle_SetCMYKColor_Stroke()
-{
- REQUIRE_PARAMS(4);
- FX_FLOAT values[4];
- for (int i = 0; i < 4; i ++) {
- values[i] = GetNumber(3 - i);
- }
- CPDF_ColorSpace* pCS = CPDF_ColorSpace::GetStockCS(PDFCS_DEVICECMYK);
- m_pCurStates->m_ColorState.SetStrokeColor(pCS, values, 4);
-}
-void CPDF_StreamContentParser::Handle_LineTo()
-{
- REQUIRE_PARAMS(2);
- if (m_Options.m_bTextOnly) {
- return;
- }
- AddPathPoint(GetNumber(1), GetNumber(0), FXPT_LINETO);
-}
-void CPDF_StreamContentParser::Handle_MoveTo()
-{
- REQUIRE_PARAMS(2);
- if (m_Options.m_bTextOnly) {
- m_pSyntax->SkipPathObject();
- return;
- }
- AddPathPoint(GetNumber(1), GetNumber(0), FXPT_MOVETO);
- ParsePathObject();
-}
-void CPDF_StreamContentParser::Handle_SetMiterLimit()
-{
- m_pCurStates->m_GraphState.GetModify()->m_MiterLimit = GetNumber(0);
-}
-void CPDF_StreamContentParser::Handle_MarkPlace()
-{
-}
-void CPDF_StreamContentParser::Handle_EndPath()
-{
- if (m_Options.m_bTextOnly) {
- return;
- }
- AddPathObject(0, FALSE);
-}
-void CPDF_StreamContentParser::Handle_SaveGraphState()
-{
- CPDF_AllStates* pStates = new CPDF_AllStates;
- pStates->Copy(*m_pCurStates);
- m_StateStack.Add(pStates);
-}
-void CPDF_StreamContentParser::Handle_RestoreGraphState()
-{
- int size = m_StateStack.GetSize();
- if (size == 0) {
- return;
- }
- CPDF_AllStates* pStates = (CPDF_AllStates*)m_StateStack.GetAt(size - 1);
- m_pCurStates->Copy(*pStates);
- delete pStates;
- m_StateStack.RemoveAt(size - 1);
-}
-void CPDF_StreamContentParser::Handle_Rectangle()
-{
- if (m_Options.m_bTextOnly) {
- return;
- }
- FX_FLOAT x = GetNumber(3), y = GetNumber(2);
- FX_FLOAT w = GetNumber(1), h = GetNumber(0);
- AddPathRect(x, y, w, h);
-}
-void CPDF_StreamContentParser::AddPathRect(FX_FLOAT x, FX_FLOAT y, FX_FLOAT w, FX_FLOAT h)
-{
- AddPathPoint(x, y, FXPT_MOVETO);
- AddPathPoint(x + w, y, FXPT_LINETO);
- AddPathPoint(x + w, y + h, FXPT_LINETO);
- AddPathPoint(x, y + h, FXPT_LINETO);
- AddPathPoint(x, y, FXPT_LINETO | FXPT_CLOSEFIGURE);
-}
-void CPDF_StreamContentParser::Handle_SetRGBColor_Fill()
-{
- REQUIRE_PARAMS(3);
- FX_FLOAT values[3];
- for (int i = 0; i < 3; i ++) {
- values[i] = GetNumber(2 - i);
- }
- CPDF_ColorSpace* pCS = CPDF_ColorSpace::GetStockCS(PDFCS_DEVICERGB);
- m_pCurStates->m_ColorState.SetFillColor(pCS, values, 3);
-}
-void CPDF_StreamContentParser::Handle_SetRGBColor_Stroke()
-{
- REQUIRE_PARAMS(3);
- FX_FLOAT values[3];
- for (int i = 0; i < 3; i ++) {
- values[i] = GetNumber(2 - i);
- }
- CPDF_ColorSpace* pCS = CPDF_ColorSpace::GetStockCS(PDFCS_DEVICERGB);
- m_pCurStates->m_ColorState.SetStrokeColor(pCS, values, 3);
-}
-void CPDF_StreamContentParser::Handle_SetRenderIntent()
-{
-}
-void CPDF_StreamContentParser::Handle_CloseStrokePath()
-{
- if (m_Options.m_bTextOnly) {
- return;
- }
- Handle_ClosePath();
- AddPathObject(0, TRUE);
-}
-void CPDF_StreamContentParser::Handle_StrokePath()
-{
- if (m_Options.m_bTextOnly) {
- return;
- }
- AddPathObject(0, TRUE);
-}
-void CPDF_StreamContentParser::Handle_SetColor_Fill()
-{
- if (m_Options.m_bTextOnly) {
- return;
- }
- FX_FLOAT values[4];
- int nargs = m_ParamCount;
- if (nargs > 4) {
- nargs = 4;
- }
- for (int i = 0; i < nargs; i ++) {
- values[i] = GetNumber(nargs - i - 1);
- }
- m_pCurStates->m_ColorState.SetFillColor(NULL, values, nargs);
-}
-void CPDF_StreamContentParser::Handle_SetColor_Stroke()
-{
- if (m_Options.m_bTextOnly) {
- return;
- }
- FX_FLOAT values[4];
- int nargs = m_ParamCount;
- if (nargs > 4) {
- nargs = 4;
- }
- for (int i = 0; i < nargs; i ++) {
- values[i] = GetNumber(nargs - i - 1);
- }
- m_pCurStates->m_ColorState.SetStrokeColor(NULL, values, nargs);
-}
-void CPDF_StreamContentParser::Handle_SetColorPS_Fill()
-{
- if (m_Options.m_bTextOnly) {
- return;
- }
- CPDF_Object* pLastParam = GetObject(0);
- if (pLastParam == NULL) {
- return;
- }
- int nargs = m_ParamCount;
- int nvalues = nargs;
- if (pLastParam->GetType() == PDFOBJ_NAME) {
- nvalues --;
- }
- FX_FLOAT* values = NULL;
- if (nvalues) {
- values = FX_Alloc(FX_FLOAT, nvalues);
- for (int i = 0; i < nvalues; i ++) {
- values[i] = GetNumber(nargs - i - 1);
+ CPDF_Dictionary* pList = m_pResources->GetDict(FX_BSTRC("XObject"));
+ if (pList == NULL) {
+ if (m_pPageResources == NULL) {
+ return;
}
- }
- if (nvalues != nargs) {
- CPDF_Pattern* pPattern = FindPattern(GetString(0), FALSE);
- if (pPattern) {
- m_pCurStates->m_ColorState.SetFillPattern(pPattern, values, nvalues);
+ CPDF_Dictionary* pList = m_pPageResources->GetDict(FX_BSTRC("XObject"));
+ if (pList == NULL) {
+ return;
}
- } else {
- m_pCurStates->m_ColorState.SetFillColor(NULL, values, nvalues);
- }
- if (values) {
- FX_Free(values);
- }
-}
-void CPDF_StreamContentParser::Handle_SetColorPS_Stroke()
-{
- if (m_Options.m_bTextOnly) {
- return;
- }
- CPDF_Object* pLastParam = GetObject(0);
- if (pLastParam == NULL) {
- return;
- }
- int nargs = m_ParamCount;
- int nvalues = nargs;
- if (pLastParam->GetType() == PDFOBJ_NAME) {
- nvalues --;
- }
- FX_FLOAT* values = NULL;
- if (nvalues) {
- values = FX_Alloc(FX_FLOAT, nvalues);
- for (int i = 0; i < nvalues; i ++) {
- values[i] = GetNumber(nargs - i - 1);
+ pRes = pList->GetElement(name);
+ if (pRes == NULL || pRes->GetType() != PDFOBJ_REFERENCE) {
+ return;
}
- }
- if (nvalues != nargs) {
- CPDF_Pattern* pPattern = FindPattern(GetString(0), FALSE);
- if (pPattern) {
- m_pCurStates->m_ColorState.SetStrokePattern(pPattern, values, nvalues);
+ } else {
+ pRes = pList->GetElement(name);
+ if (pRes == NULL || pRes->GetType() != PDFOBJ_REFERENCE) {
+ return;
}
- } else {
- m_pCurStates->m_ColorState.SetStrokeColor(NULL, values, nvalues);
- }
- if (values) {
- FX_Free(values);
- }
-}
-CFX_FloatRect _GetShadingBBox(CPDF_Stream* pStream, int type, const CFX_AffineMatrix* pMatrix,
- CPDF_Function** pFuncs, int nFuncs, CPDF_ColorSpace* pCS);
-void CPDF_StreamContentParser::Handle_ShadeFill()
-{
+ }
+ }
+ FX_BOOL bForm;
+ if (m_pDocument->IsFormStream(((CPDF_Reference*)pRes)->GetRefObjNum(),
+ bForm) &&
+ !bForm) {
+ return;
+ }
+ }
+ CPDF_Stream* pXObject =
+ (CPDF_Stream*)FindResourceObj(FX_BSTRC("XObject"), name);
+ if (pXObject == NULL || pXObject->GetType() != PDFOBJ_STREAM) {
+ m_bResourceMissing = TRUE;
+ return;
+ }
+ CFX_ByteStringC type =
+ pXObject->GetDict()
+ ? pXObject->GetDict()->GetConstString(FX_BSTRC("Subtype"))
+ : CFX_ByteStringC();
+ if (type == FX_BSTRC("Image")) {
if (m_Options.m_bTextOnly) {
- return;
- }
- CPDF_Pattern* pPattern = FindPattern(GetString(0), TRUE);
- if (pPattern == NULL) {
- return;
- }
- if (pPattern->m_PatternType != PATTERN_SHADING) {
- return;
- }
- CPDF_ShadingPattern* pShading = (CPDF_ShadingPattern*)pPattern;
- if (!pShading->m_bShadingObj) {
- return;
- }
- if (!pShading->Load()) {
- return;
- }
- CPDF_ShadingObject* pObj = new CPDF_ShadingObject;
- pObj->m_pShading = pShading;
- SetGraphicStates(pObj, FALSE, FALSE, FALSE);
- pObj->m_Matrix = m_pCurStates->m_CTM;
- pObj->m_Matrix.Concat(m_mtContentToUser);
- CFX_FloatRect bbox;
- if (!pObj->m_ClipPath.IsNull()) {
- bbox = pObj->m_ClipPath.GetClipBox();
- } else {
- bbox = m_BBox;
- }
- if (pShading->m_ShadingType >= 4) {
- bbox.Intersect(_GetShadingBBox((CPDF_Stream*)pShading->m_pShadingObj, pShading->m_ShadingType, &pObj->m_Matrix,
- pShading->m_pFunctions, pShading->m_nFuncs, pShading->m_pCS));
- }
- pObj->m_Left = bbox.left;
- pObj->m_Right = bbox.right;
- pObj->m_Top = bbox.top;
- pObj->m_Bottom = bbox.bottom;
- m_pObjectList->m_ObjectList.AddTail(pObj);
-}
-void CPDF_StreamContentParser::Handle_SetCharSpace()
-{
- m_pCurStates->m_TextState.GetModify()->m_CharSpace = GetNumber(0);
-}
-void CPDF_StreamContentParser::Handle_MoveTextPoint()
-{
- m_pCurStates->m_TextLineX += GetNumber(1);
- m_pCurStates->m_TextLineY += GetNumber(0);
- m_pCurStates->m_TextX = m_pCurStates->m_TextLineX;
- m_pCurStates->m_TextY = m_pCurStates->m_TextLineY;
-}
-void CPDF_StreamContentParser::Handle_MoveTextPoint_SetLeading()
-{
- Handle_MoveTextPoint();
- m_pCurStates->m_TextLeading = -GetNumber(0);
-}
-void CPDF_StreamContentParser::Handle_SetFont()
-{
- FX_FLOAT fs = GetNumber(0);
- if (fs == 0) {
- fs = m_DefFontSize;
- }
- m_pCurStates->m_TextState.GetModify()->m_FontSize = fs;
- CPDF_Font* pFont = FindFont(GetString(1));
- if (pFont) {
- m_pCurStates->m_TextState.SetFont(pFont);
- }
-}
-CPDF_Object* CPDF_StreamContentParser::FindResourceObj(const CFX_ByteStringC& type, const CFX_ByteString& name)
-{
- if (m_pResources == NULL) {
- return NULL;
- }
- if (m_pResources == m_pPageResources) {
- CPDF_Dictionary* pList = m_pResources->GetDict(type);
- if (pList == NULL) {
- return NULL;
- }
- CPDF_Object* pRes = pList->GetElementValue(name);
- return pRes;
- }
+ return;
+ }
+ CPDF_ImageObject* pObj = AddImage(pXObject, NULL, FALSE);
+ m_LastImageName = name;
+ m_pLastImage = pObj->m_pImage;
+ } else if (type == FX_BSTRC("Form")) {
+ AddForm(pXObject);
+ } else {
+ return;
+ }
+}
+void CPDF_StreamContentParser::AddForm(CPDF_Stream* pStream) {
+ if (!m_Options.m_bSeparateForm) {
+ CPDF_Dictionary* pResources =
+ pStream->GetDict()->GetDict(FX_BSTRC("Resources"));
+ CFX_AffineMatrix form_matrix =
+ pStream->GetDict()->GetMatrix(FX_BSTRC("Matrix"));
+ form_matrix.Concat(m_pCurStates->m_CTM);
+ CPDF_Array* pBBox = pStream->GetDict()->GetArray(FX_BSTRC("BBox"));
+ CFX_FloatRect form_bbox;
+ CPDF_Path ClipPath;
+ if (pBBox) {
+ form_bbox = pStream->GetDict()->GetRect(FX_BSTRC("BBox"));
+ ClipPath.New();
+ ClipPath.AppendRect(form_bbox.left, form_bbox.bottom, form_bbox.right,
+ form_bbox.top);
+ ClipPath.Transform(&form_matrix);
+ form_bbox.Transform(&form_matrix);
+ }
+ CPDF_StreamContentParser parser(m_pDocument, m_pPageResources, m_pResources,
+ &m_mtContentToUser, m_pObjectList,
+ pResources, &form_bbox, &m_Options,
+ m_pCurStates.get(), m_Level + 1);
+ parser.m_pCurStates->m_CTM = form_matrix;
+ if (ClipPath.NotNull()) {
+ parser.m_pCurStates->m_ClipPath.AppendPath(ClipPath, FXFILL_WINDING,
+ TRUE);
+ }
+ CPDF_StreamAcc stream;
+ stream.LoadAllData(pStream, FALSE);
+ if (stream.GetSize() == 0) {
+ return;
+ }
+ parser.Parse(stream.GetData(), stream.GetSize(), 0);
+ return;
+ }
+ CPDF_FormObject* pFormObj = new CPDF_FormObject;
+ pFormObj->m_pForm =
+ new CPDF_Form(m_pDocument, m_pPageResources, pStream, m_pResources);
+ pFormObj->m_FormMatrix = m_pCurStates->m_CTM;
+ pFormObj->m_FormMatrix.Concat(m_mtContentToUser);
+ CPDF_AllStates status;
+ status.m_GeneralState = m_pCurStates->m_GeneralState;
+ status.m_GraphState = m_pCurStates->m_GraphState;
+ status.m_ColorState = m_pCurStates->m_ColorState;
+ status.m_TextState = m_pCurStates->m_TextState;
+ pFormObj->m_pForm->ParseContent(&status, NULL, NULL, &m_Options, m_Level + 1);
+ if (!m_pObjectList->m_bBackgroundAlphaNeeded &&
+ pFormObj->m_pForm->m_bBackgroundAlphaNeeded) {
+ m_pObjectList->m_bBackgroundAlphaNeeded = TRUE;
+ }
+ pFormObj->CalcBoundingBox();
+ SetGraphicStates(pFormObj, TRUE, TRUE, TRUE);
+ m_pObjectList->m_ObjectList.AddTail(pFormObj);
+}
+CPDF_ImageObject* CPDF_StreamContentParser::AddImage(CPDF_Stream* pStream,
+ CPDF_Image* pImage,
+ FX_BOOL bInline) {
+ if (pStream == NULL && pImage == NULL) {
+ return NULL;
+ }
+ CFX_AffineMatrix ImageMatrix;
+ ImageMatrix.Copy(m_pCurStates->m_CTM);
+ ImageMatrix.Concat(m_mtContentToUser);
+ CPDF_ImageObject* pImageObj = new CPDF_ImageObject;
+ if (pImage) {
+ pImageObj->m_pImage =
+ m_pDocument->GetPageData()->GetImage(pImage->GetStream());
+ } else if (pStream->GetObjNum()) {
+ pImageObj->m_pImage = m_pDocument->LoadImageF(pStream);
+ } else {
+ pImageObj->m_pImage = new CPDF_Image(m_pDocument);
+ pImageObj->m_pImage->LoadImageF(pStream, bInline);
+ }
+ SetGraphicStates(pImageObj, pImageObj->m_pImage->IsMask(), FALSE, FALSE);
+ pImageObj->m_Matrix = ImageMatrix;
+ pImageObj->CalcBoundingBox();
+ m_pObjectList->m_ObjectList.AddTail(pImageObj);
+ return pImageObj;
+}
+void CPDF_StreamContentParser::Handle_MarkPlace_Dictionary() {}
+void CPDF_StreamContentParser::Handle_EndImage() {}
+void CPDF_StreamContentParser::Handle_EndMarkedContent() {
+ if (!m_Options.m_bMarkedContent) {
+ return;
+ }
+ if (m_CurContentMark.IsNull()) {
+ return;
+ }
+ int count = m_CurContentMark.GetObject()->CountItems();
+ if (count == 1) {
+ m_CurContentMark.SetNull();
+ return;
+ }
+ m_CurContentMark.GetModify()->DeleteLastMark();
+}
+void CPDF_StreamContentParser::Handle_EndText() {
+ int count = m_ClipTextList.GetSize();
+ if (count == 0) {
+ return;
+ }
+ if (m_pCurStates->m_TextState.GetObject()->m_TextMode < 4) {
+ for (int i = 0; i < count; i++) {
+ CPDF_TextObject* pText = (CPDF_TextObject*)m_ClipTextList.GetAt(i);
+ delete pText;
+ }
+ } else {
+ m_pCurStates->m_ClipPath.AppendTexts(
+ (CPDF_TextObject**)m_ClipTextList.GetData(), count);
+ }
+ m_ClipTextList.RemoveAll();
+}
+void CPDF_StreamContentParser::Handle_EndSectionUndefined() {
+ if (m_CompatCount) {
+ m_CompatCount--;
+ }
+}
+void CPDF_StreamContentParser::Handle_FillPath() {
+ if (m_Options.m_bTextOnly) {
+ return;
+ }
+ AddPathObject(FXFILL_WINDING, FALSE);
+}
+void CPDF_StreamContentParser::Handle_FillPathOld() {
+ if (m_Options.m_bTextOnly) {
+ return;
+ }
+ AddPathObject(FXFILL_WINDING, FALSE);
+}
+void CPDF_StreamContentParser::Handle_EOFillPath() {
+ if (m_Options.m_bTextOnly) {
+ return;
+ }
+ AddPathObject(FXFILL_ALTERNATE, FALSE);
+}
+void CPDF_StreamContentParser::Handle_SetGray_Fill() {
+ FX_FLOAT value = GetNumber(0);
+ CPDF_ColorSpace* pCS = CPDF_ColorSpace::GetStockCS(PDFCS_DEVICEGRAY);
+ m_pCurStates->m_ColorState.SetFillColor(pCS, &value, 1);
+}
+void CPDF_StreamContentParser::Handle_SetGray_Stroke() {
+ FX_FLOAT value = GetNumber(0);
+ CPDF_ColorSpace* pCS = CPDF_ColorSpace::GetStockCS(PDFCS_DEVICEGRAY);
+ m_pCurStates->m_ColorState.SetStrokeColor(pCS, &value, 1);
+}
+void CPDF_StreamContentParser::Handle_SetExtendGraphState() {
+ CFX_ByteString name = GetString(0);
+ CPDF_Dictionary* pGS =
+ (CPDF_Dictionary*)FindResourceObj(FX_BSTRC("ExtGState"), name);
+ if (pGS == NULL || pGS->GetType() != PDFOBJ_DICTIONARY) {
+ m_bResourceMissing = TRUE;
+ return;
+ }
+ m_pCurStates->ProcessExtGS(pGS, this);
+}
+void CPDF_StreamContentParser::Handle_ClosePath() {
+ if (m_Options.m_bTextOnly) {
+ return;
+ }
+ if (m_PathPointCount == 0) {
+ return;
+ }
+ if (m_PathStartX != m_PathCurrentX || m_PathStartY != m_PathCurrentY) {
+ AddPathPoint(m_PathStartX, m_PathStartY, FXPT_LINETO | FXPT_CLOSEFIGURE);
+ } else if (m_pPathPoints[m_PathPointCount - 1].m_Flag != FXPT_MOVETO) {
+ m_pPathPoints[m_PathPointCount - 1].m_Flag |= FXPT_CLOSEFIGURE;
+ }
+}
+void CPDF_StreamContentParser::Handle_SetFlat() {
+ m_pCurStates->m_GeneralState.GetModify()->m_Flatness = GetNumber(0);
+}
+void CPDF_StreamContentParser::Handle_BeginImageData() {}
+void CPDF_StreamContentParser::Handle_SetLineJoin() {
+ m_pCurStates->m_GraphState.GetModify()->m_LineJoin =
+ (CFX_GraphStateData::LineJoin)GetInteger(0);
+}
+void CPDF_StreamContentParser::Handle_SetLineCap() {
+ m_pCurStates->m_GraphState.GetModify()->m_LineCap =
+ (CFX_GraphStateData::LineCap)GetInteger(0);
+}
+void CPDF_StreamContentParser::Handle_SetCMYKColor_Fill() {
+ REQUIRE_PARAMS(4);
+ FX_FLOAT values[4];
+ for (int i = 0; i < 4; i++) {
+ values[i] = GetNumber(3 - i);
+ }
+ CPDF_ColorSpace* pCS = CPDF_ColorSpace::GetStockCS(PDFCS_DEVICECMYK);
+ m_pCurStates->m_ColorState.SetFillColor(pCS, values, 4);
+}
+void CPDF_StreamContentParser::Handle_SetCMYKColor_Stroke() {
+ REQUIRE_PARAMS(4);
+ FX_FLOAT values[4];
+ for (int i = 0; i < 4; i++) {
+ values[i] = GetNumber(3 - i);
+ }
+ CPDF_ColorSpace* pCS = CPDF_ColorSpace::GetStockCS(PDFCS_DEVICECMYK);
+ m_pCurStates->m_ColorState.SetStrokeColor(pCS, values, 4);
+}
+void CPDF_StreamContentParser::Handle_LineTo() {
+ REQUIRE_PARAMS(2);
+ if (m_Options.m_bTextOnly) {
+ return;
+ }
+ AddPathPoint(GetNumber(1), GetNumber(0), FXPT_LINETO);
+}
+void CPDF_StreamContentParser::Handle_MoveTo() {
+ REQUIRE_PARAMS(2);
+ if (m_Options.m_bTextOnly) {
+ m_pSyntax->SkipPathObject();
+ return;
+ }
+ AddPathPoint(GetNumber(1), GetNumber(0), FXPT_MOVETO);
+ ParsePathObject();
+}
+void CPDF_StreamContentParser::Handle_SetMiterLimit() {
+ m_pCurStates->m_GraphState.GetModify()->m_MiterLimit = GetNumber(0);
+}
+void CPDF_StreamContentParser::Handle_MarkPlace() {}
+void CPDF_StreamContentParser::Handle_EndPath() {
+ if (m_Options.m_bTextOnly) {
+ return;
+ }
+ AddPathObject(0, FALSE);
+}
+void CPDF_StreamContentParser::Handle_SaveGraphState() {
+ CPDF_AllStates* pStates = new CPDF_AllStates;
+ pStates->Copy(*m_pCurStates);
+ m_StateStack.Add(pStates);
+}
+void CPDF_StreamContentParser::Handle_RestoreGraphState() {
+ int size = m_StateStack.GetSize();
+ if (size == 0) {
+ return;
+ }
+ CPDF_AllStates* pStates = (CPDF_AllStates*)m_StateStack.GetAt(size - 1);
+ m_pCurStates->Copy(*pStates);
+ delete pStates;
+ m_StateStack.RemoveAt(size - 1);
+}
+void CPDF_StreamContentParser::Handle_Rectangle() {
+ if (m_Options.m_bTextOnly) {
+ return;
+ }
+ FX_FLOAT x = GetNumber(3), y = GetNumber(2);
+ FX_FLOAT w = GetNumber(1), h = GetNumber(0);
+ AddPathRect(x, y, w, h);
+}
+void CPDF_StreamContentParser::AddPathRect(FX_FLOAT x,
+ FX_FLOAT y,
+ FX_FLOAT w,
+ FX_FLOAT h) {
+ AddPathPoint(x, y, FXPT_MOVETO);
+ AddPathPoint(x + w, y, FXPT_LINETO);
+ AddPathPoint(x + w, y + h, FXPT_LINETO);
+ AddPathPoint(x, y + h, FXPT_LINETO);
+ AddPathPoint(x, y, FXPT_LINETO | FXPT_CLOSEFIGURE);
+}
+void CPDF_StreamContentParser::Handle_SetRGBColor_Fill() {
+ REQUIRE_PARAMS(3);
+ FX_FLOAT values[3];
+ for (int i = 0; i < 3; i++) {
+ values[i] = GetNumber(2 - i);
+ }
+ CPDF_ColorSpace* pCS = CPDF_ColorSpace::GetStockCS(PDFCS_DEVICERGB);
+ m_pCurStates->m_ColorState.SetFillColor(pCS, values, 3);
+}
+void CPDF_StreamContentParser::Handle_SetRGBColor_Stroke() {
+ REQUIRE_PARAMS(3);
+ FX_FLOAT values[3];
+ for (int i = 0; i < 3; i++) {
+ values[i] = GetNumber(2 - i);
+ }
+ CPDF_ColorSpace* pCS = CPDF_ColorSpace::GetStockCS(PDFCS_DEVICERGB);
+ m_pCurStates->m_ColorState.SetStrokeColor(pCS, values, 3);
+}
+void CPDF_StreamContentParser::Handle_SetRenderIntent() {}
+void CPDF_StreamContentParser::Handle_CloseStrokePath() {
+ if (m_Options.m_bTextOnly) {
+ return;
+ }
+ Handle_ClosePath();
+ AddPathObject(0, TRUE);
+}
+void CPDF_StreamContentParser::Handle_StrokePath() {
+ if (m_Options.m_bTextOnly) {
+ return;
+ }
+ AddPathObject(0, TRUE);
+}
+void CPDF_StreamContentParser::Handle_SetColor_Fill() {
+ if (m_Options.m_bTextOnly) {
+ return;
+ }
+ FX_FLOAT values[4];
+ int nargs = m_ParamCount;
+ if (nargs > 4) {
+ nargs = 4;
+ }
+ for (int i = 0; i < nargs; i++) {
+ values[i] = GetNumber(nargs - i - 1);
+ }
+ m_pCurStates->m_ColorState.SetFillColor(NULL, values, nargs);
+}
+void CPDF_StreamContentParser::Handle_SetColor_Stroke() {
+ if (m_Options.m_bTextOnly) {
+ return;
+ }
+ FX_FLOAT values[4];
+ int nargs = m_ParamCount;
+ if (nargs > 4) {
+ nargs = 4;
+ }
+ for (int i = 0; i < nargs; i++) {
+ values[i] = GetNumber(nargs - i - 1);
+ }
+ m_pCurStates->m_ColorState.SetStrokeColor(NULL, values, nargs);
+}
+void CPDF_StreamContentParser::Handle_SetColorPS_Fill() {
+ if (m_Options.m_bTextOnly) {
+ return;
+ }
+ CPDF_Object* pLastParam = GetObject(0);
+ if (pLastParam == NULL) {
+ return;
+ }
+ int nargs = m_ParamCount;
+ int nvalues = nargs;
+ if (pLastParam->GetType() == PDFOBJ_NAME) {
+ nvalues--;
+ }
+ FX_FLOAT* values = NULL;
+ if (nvalues) {
+ values = FX_Alloc(FX_FLOAT, nvalues);
+ for (int i = 0; i < nvalues; i++) {
+ values[i] = GetNumber(nargs - i - 1);
+ }
+ }
+ if (nvalues != nargs) {
+ CPDF_Pattern* pPattern = FindPattern(GetString(0), FALSE);
+ if (pPattern) {
+ m_pCurStates->m_ColorState.SetFillPattern(pPattern, values, nvalues);
+ }
+ } else {
+ m_pCurStates->m_ColorState.SetFillColor(NULL, values, nvalues);
+ }
+ if (values) {
+ FX_Free(values);
+ }
+}
+void CPDF_StreamContentParser::Handle_SetColorPS_Stroke() {
+ if (m_Options.m_bTextOnly) {
+ return;
+ }
+ CPDF_Object* pLastParam = GetObject(0);
+ if (pLastParam == NULL) {
+ return;
+ }
+ int nargs = m_ParamCount;
+ int nvalues = nargs;
+ if (pLastParam->GetType() == PDFOBJ_NAME) {
+ nvalues--;
+ }
+ FX_FLOAT* values = NULL;
+ if (nvalues) {
+ values = FX_Alloc(FX_FLOAT, nvalues);
+ for (int i = 0; i < nvalues; i++) {
+ values[i] = GetNumber(nargs - i - 1);
+ }
+ }
+ if (nvalues != nargs) {
+ CPDF_Pattern* pPattern = FindPattern(GetString(0), FALSE);
+ if (pPattern) {
+ m_pCurStates->m_ColorState.SetStrokePattern(pPattern, values, nvalues);
+ }
+ } else {
+ m_pCurStates->m_ColorState.SetStrokeColor(NULL, values, nvalues);
+ }
+ if (values) {
+ FX_Free(values);
+ }
+}
+CFX_FloatRect _GetShadingBBox(CPDF_Stream* pStream,
+ int type,
+ const CFX_AffineMatrix* pMatrix,
+ CPDF_Function** pFuncs,
+ int nFuncs,
+ CPDF_ColorSpace* pCS);
+void CPDF_StreamContentParser::Handle_ShadeFill() {
+ if (m_Options.m_bTextOnly) {
+ return;
+ }
+ CPDF_Pattern* pPattern = FindPattern(GetString(0), TRUE);
+ if (pPattern == NULL) {
+ return;
+ }
+ if (pPattern->m_PatternType != PATTERN_SHADING) {
+ return;
+ }
+ CPDF_ShadingPattern* pShading = (CPDF_ShadingPattern*)pPattern;
+ if (!pShading->m_bShadingObj) {
+ return;
+ }
+ if (!pShading->Load()) {
+ return;
+ }
+ CPDF_ShadingObject* pObj = new CPDF_ShadingObject;
+ pObj->m_pShading = pShading;
+ SetGraphicStates(pObj, FALSE, FALSE, FALSE);
+ pObj->m_Matrix = m_pCurStates->m_CTM;
+ pObj->m_Matrix.Concat(m_mtContentToUser);
+ CFX_FloatRect bbox;
+ if (!pObj->m_ClipPath.IsNull()) {
+ bbox = pObj->m_ClipPath.GetClipBox();
+ } else {
+ bbox = m_BBox;
+ }
+ if (pShading->m_ShadingType >= 4) {
+ bbox.Intersect(_GetShadingBBox((CPDF_Stream*)pShading->m_pShadingObj,
+ pShading->m_ShadingType, &pObj->m_Matrix,
+ pShading->m_pFunctions, pShading->m_nFuncs,
+ pShading->m_pCS));
+ }
+ pObj->m_Left = bbox.left;
+ pObj->m_Right = bbox.right;
+ pObj->m_Top = bbox.top;
+ pObj->m_Bottom = bbox.bottom;
+ m_pObjectList->m_ObjectList.AddTail(pObj);
+}
+void CPDF_StreamContentParser::Handle_SetCharSpace() {
+ m_pCurStates->m_TextState.GetModify()->m_CharSpace = GetNumber(0);
+}
+void CPDF_StreamContentParser::Handle_MoveTextPoint() {
+ m_pCurStates->m_TextLineX += GetNumber(1);
+ m_pCurStates->m_TextLineY += GetNumber(0);
+ m_pCurStates->m_TextX = m_pCurStates->m_TextLineX;
+ m_pCurStates->m_TextY = m_pCurStates->m_TextLineY;
+}
+void CPDF_StreamContentParser::Handle_MoveTextPoint_SetLeading() {
+ Handle_MoveTextPoint();
+ m_pCurStates->m_TextLeading = -GetNumber(0);
+}
+void CPDF_StreamContentParser::Handle_SetFont() {
+ FX_FLOAT fs = GetNumber(0);
+ if (fs == 0) {
+ fs = m_DefFontSize;
+ }
+ m_pCurStates->m_TextState.GetModify()->m_FontSize = fs;
+ CPDF_Font* pFont = FindFont(GetString(1));
+ if (pFont) {
+ m_pCurStates->m_TextState.SetFont(pFont);
+ }
+}
+CPDF_Object* CPDF_StreamContentParser::FindResourceObj(
+ const CFX_ByteStringC& type,
+ const CFX_ByteString& name) {
+ if (m_pResources == NULL) {
+ return NULL;
+ }
+ if (m_pResources == m_pPageResources) {
CPDF_Dictionary* pList = m_pResources->GetDict(type);
if (pList == NULL) {
- if (m_pPageResources == NULL) {
- return NULL;
- }
- CPDF_Dictionary* pList = m_pPageResources->GetDict(type);
- if (pList == NULL) {
- return NULL;
- }
- CPDF_Object* pRes = pList->GetElementValue(name);
- return pRes;
+ return NULL;
}
CPDF_Object* pRes = pList->GetElementValue(name);
return pRes;
-}
-CPDF_Font* CPDF_StreamContentParser::FindFont(const CFX_ByteString& name)
-{
- CPDF_Dictionary* pFontDict = (CPDF_Dictionary*)FindResourceObj(FX_BSTRC("Font"), name);
- if (pFontDict == NULL || pFontDict->GetType() != PDFOBJ_DICTIONARY) {
- m_bResourceMissing = TRUE;
- return CPDF_Font::GetStockFont(m_pDocument, FX_BSTRC("Helvetica"));
- }
- CPDF_Font* pFont = m_pDocument->LoadFont(pFontDict);
- if (pFont && pFont->GetType3Font()) {
- pFont->GetType3Font()->SetPageResources(m_pResources);
- pFont->GetType3Font()->CheckType3FontMetrics();
- }
- return pFont;
-}
-CPDF_ColorSpace* CPDF_StreamContentParser::FindColorSpace(const CFX_ByteString& name)
-{
- if (name == FX_BSTRC("Pattern")) {
- return CPDF_ColorSpace::GetStockCS(PDFCS_PATTERN);
- }
- if (name == FX_BSTRC("DeviceGray") || name == FX_BSTRC("DeviceCMYK") || name == FX_BSTRC("DeviceRGB")) {
- CFX_ByteString defname = "Default";
- defname += name.Mid(7);
- CPDF_Object* pDefObj = FindResourceObj(FX_BSTRC("ColorSpace"), defname);
- if (pDefObj == NULL) {
- if (name == FX_BSTRC("DeviceGray")) {
- return CPDF_ColorSpace::GetStockCS(PDFCS_DEVICEGRAY);
- }
- if (name == FX_BSTRC("DeviceRGB")) {
- return CPDF_ColorSpace::GetStockCS(PDFCS_DEVICERGB);
- }
- return CPDF_ColorSpace::GetStockCS(PDFCS_DEVICECMYK);
- }
- return m_pDocument->LoadColorSpace(pDefObj);
- }
- CPDF_Object* pCSObj = FindResourceObj(FX_BSTRC("ColorSpace"), name);
- if (pCSObj == NULL) {
- m_bResourceMissing = TRUE;
- return NULL;
- }
- return m_pDocument->LoadColorSpace(pCSObj);
-}
-CPDF_Pattern* CPDF_StreamContentParser::FindPattern(const CFX_ByteString& name, FX_BOOL bShading)
-{
- CPDF_Object* pPattern = FindResourceObj(bShading ? FX_BSTRC("Shading") : FX_BSTRC("Pattern"), name);
- if (pPattern == NULL || (pPattern->GetType() != PDFOBJ_DICTIONARY &&
- pPattern->GetType() != PDFOBJ_STREAM)) {
- m_bResourceMissing = TRUE;
- return NULL;
- }
- return m_pDocument->LoadPattern(pPattern, bShading, &m_pCurStates->m_ParentMatrix);
-}
-void CPDF_StreamContentParser::ConvertTextSpace(FX_FLOAT& x, FX_FLOAT& y)
-{
- m_pCurStates->m_TextMatrix.Transform(x, y, x, y);
- ConvertUserSpace(x, y);
-}
-void CPDF_StreamContentParser::ConvertUserSpace(FX_FLOAT& x, FX_FLOAT& y)
-{
- m_pCurStates->m_CTM.Transform(x, y, x, y);
- m_mtContentToUser.Transform(x, y, x, y);
-}
-void CPDF_StreamContentParser::AddTextObject(CFX_ByteString* pStrs, FX_FLOAT fInitKerning, FX_FLOAT* pKerning, int nsegs)
-{
- CPDF_Font* pFont = m_pCurStates->m_TextState.GetFont();
- if (pFont == NULL) {
- return;
- }
- if (fInitKerning != 0) {
- if (!pFont->IsVertWriting()) {
- m_pCurStates->m_TextX -= FXSYS_Mul(fInitKerning, m_pCurStates->m_TextState.GetFontSize()) / 1000;
- } else {
- m_pCurStates->m_TextY -= FXSYS_Mul(fInitKerning, m_pCurStates->m_TextState.GetFontSize()) / 1000;
- }
+ }
+ CPDF_Dictionary* pList = m_pResources->GetDict(type);
+ if (pList == NULL) {
+ if (m_pPageResources == NULL) {
+ return NULL;
}
- if (nsegs == 0) {
- return;
+ CPDF_Dictionary* pList = m_pPageResources->GetDict(type);
+ if (pList == NULL) {
+ return NULL;
}
- int textmode;
- if (pFont->GetFontType() == PDFFONT_TYPE3) {
- textmode = 0;
+ CPDF_Object* pRes = pList->GetElementValue(name);
+ return pRes;
+ }
+ CPDF_Object* pRes = pList->GetElementValue(name);
+ return pRes;
+}
+CPDF_Font* CPDF_StreamContentParser::FindFont(const CFX_ByteString& name) {
+ CPDF_Dictionary* pFontDict =
+ (CPDF_Dictionary*)FindResourceObj(FX_BSTRC("Font"), name);
+ if (pFontDict == NULL || pFontDict->GetType() != PDFOBJ_DICTIONARY) {
+ m_bResourceMissing = TRUE;
+ return CPDF_Font::GetStockFont(m_pDocument, FX_BSTRC("Helvetica"));
+ }
+ CPDF_Font* pFont = m_pDocument->LoadFont(pFontDict);
+ if (pFont && pFont->GetType3Font()) {
+ pFont->GetType3Font()->SetPageResources(m_pResources);
+ pFont->GetType3Font()->CheckType3FontMetrics();
+ }
+ return pFont;
+}
+CPDF_ColorSpace* CPDF_StreamContentParser::FindColorSpace(
+ const CFX_ByteString& name) {
+ if (name == FX_BSTRC("Pattern")) {
+ return CPDF_ColorSpace::GetStockCS(PDFCS_PATTERN);
+ }
+ if (name == FX_BSTRC("DeviceGray") || name == FX_BSTRC("DeviceCMYK") ||
+ name == FX_BSTRC("DeviceRGB")) {
+ CFX_ByteString defname = "Default";
+ defname += name.Mid(7);
+ CPDF_Object* pDefObj = FindResourceObj(FX_BSTRC("ColorSpace"), defname);
+ if (pDefObj == NULL) {
+ if (name == FX_BSTRC("DeviceGray")) {
+ return CPDF_ColorSpace::GetStockCS(PDFCS_DEVICEGRAY);
+ }
+ if (name == FX_BSTRC("DeviceRGB")) {
+ return CPDF_ColorSpace::GetStockCS(PDFCS_DEVICERGB);
+ }
+ return CPDF_ColorSpace::GetStockCS(PDFCS_DEVICECMYK);
+ }
+ return m_pDocument->LoadColorSpace(pDefObj);
+ }
+ CPDF_Object* pCSObj = FindResourceObj(FX_BSTRC("ColorSpace"), name);
+ if (pCSObj == NULL) {
+ m_bResourceMissing = TRUE;
+ return NULL;
+ }
+ return m_pDocument->LoadColorSpace(pCSObj);
+}
+CPDF_Pattern* CPDF_StreamContentParser::FindPattern(const CFX_ByteString& name,
+ FX_BOOL bShading) {
+ CPDF_Object* pPattern = FindResourceObj(
+ bShading ? FX_BSTRC("Shading") : FX_BSTRC("Pattern"), name);
+ if (pPattern == NULL || (pPattern->GetType() != PDFOBJ_DICTIONARY &&
+ pPattern->GetType() != PDFOBJ_STREAM)) {
+ m_bResourceMissing = TRUE;
+ return NULL;
+ }
+ return m_pDocument->LoadPattern(pPattern, bShading,
+ &m_pCurStates->m_ParentMatrix);
+}
+void CPDF_StreamContentParser::ConvertTextSpace(FX_FLOAT& x, FX_FLOAT& y) {
+ m_pCurStates->m_TextMatrix.Transform(x, y, x, y);
+ ConvertUserSpace(x, y);
+}
+void CPDF_StreamContentParser::ConvertUserSpace(FX_FLOAT& x, FX_FLOAT& y) {
+ m_pCurStates->m_CTM.Transform(x, y, x, y);
+ m_mtContentToUser.Transform(x, y, x, y);
+}
+void CPDF_StreamContentParser::AddTextObject(CFX_ByteString* pStrs,
+ FX_FLOAT fInitKerning,
+ FX_FLOAT* pKerning,
+ int nsegs) {
+ CPDF_Font* pFont = m_pCurStates->m_TextState.GetFont();
+ if (pFont == NULL) {
+ return;
+ }
+ if (fInitKerning != 0) {
+ if (!pFont->IsVertWriting()) {
+ m_pCurStates->m_TextX -=
+ FXSYS_Mul(fInitKerning, m_pCurStates->m_TextState.GetFontSize()) /
+ 1000;
} else {
- textmode = m_pCurStates->m_TextState.GetObject()->m_TextMode;
- }
- CPDF_TextObject* pText = new CPDF_TextObject;
- m_pLastTextObject = pText;
- SetGraphicStates(pText, TRUE, TRUE, TRUE);
- if (textmode && textmode != 3 && textmode != 4 && textmode != 7) {
- FX_FLOAT* pCTM = pText->m_TextState.GetModify()->m_CTM;
- pCTM[0] = m_pCurStates->m_CTM.a;
- pCTM[1] = m_pCurStates->m_CTM.c;
- pCTM[2] = m_pCurStates->m_CTM.b;
- pCTM[3] = m_pCurStates->m_CTM.d;
- }
- pText->SetSegments(pStrs, pKerning, nsegs);
- pText->m_PosX = m_pCurStates->m_TextX;
- pText->m_PosY = m_pCurStates->m_TextY + m_pCurStates->m_TextRise;
- ConvertTextSpace(pText->m_PosX, pText->m_PosY);
- FX_FLOAT x_advance, y_advance;
- pText->CalcPositionData(&x_advance, &y_advance, m_pCurStates->m_TextHorzScale, m_Level);
- m_pCurStates->m_TextX += x_advance;
- m_pCurStates->m_TextY += y_advance;
- if (textmode > 3) {
- CPDF_TextObject* pCopy = new CPDF_TextObject;
- pCopy->Copy(pText);
- m_ClipTextList.Add(pCopy);
- }
- m_pObjectList->m_ObjectList.AddTail(pText);
- if (pKerning && pKerning[nsegs - 1] != 0) {
- if (!pFont->IsVertWriting()) {
- m_pCurStates->m_TextX -= FXSYS_Mul(pKerning[nsegs - 1], m_pCurStates->m_TextState.GetFontSize()) / 1000;
- } else {
- m_pCurStates->m_TextY -= FXSYS_Mul(pKerning[nsegs - 1], m_pCurStates->m_TextState.GetFontSize()) / 1000;
- }
- }
-}
-void CPDF_StreamContentParser::Handle_ShowText()
-{
- CFX_ByteString str = GetString(0);
- if (str.IsEmpty()) {
- return;
- }
- AddTextObject(&str, 0, NULL, 1);
-}
-void CPDF_StreamContentParser::Handle_ShowText_Positioning()
-{
- CPDF_Array* pArray = GetObject(0) ? GetObject(0)->GetArray() : NULL;
- if (pArray == NULL) {
- return;
- }
- int n = pArray->GetCount(), nsegs = 0, i;
- for (i = 0; i < n; i ++) {
- CPDF_Object* pObj = pArray->GetElementValue(i);
- if (pObj->GetType() == PDFOBJ_STRING) {
- nsegs ++;
- }
- }
- if (nsegs == 0) {
- for (i = 0; i < n; i ++) {
- m_pCurStates->m_TextX -= FXSYS_Mul(pArray->GetNumber(i), m_pCurStates->m_TextState.GetFontSize()) / 1000;
- };
- return;
- }
- CFX_ByteString* pStrs = new CFX_ByteString[nsegs];
- FX_FLOAT* pKerning = FX_Alloc(FX_FLOAT, nsegs);
- int iSegment = 0;
- FX_FLOAT fInitKerning = 0;
- for (i = 0; i < n; i ++) {
- CPDF_Object* pObj = pArray->GetElementValue(i);
- if (pObj->GetType() == PDFOBJ_STRING) {
- CFX_ByteString str = pObj->GetString();
- if (str.IsEmpty()) {
- continue;
- }
- pStrs[iSegment] = str;
- pKerning[iSegment ++] = 0;
- } else {
- FX_FLOAT num = pObj ? pObj->GetNumber() : 0;
- if (iSegment == 0) {
- fInitKerning += num;
- } else {
- pKerning[iSegment - 1] += num;
- }
- }
- }
- AddTextObject(pStrs, fInitKerning, pKerning, iSegment);
- delete[] pStrs;
- FX_Free(pKerning);
-}
-void CPDF_StreamContentParser::Handle_SetTextLeading()
-{
- m_pCurStates->m_TextLeading = GetNumber(0);
-}
-void CPDF_StreamContentParser::Handle_SetTextMatrix()
-{
- m_pCurStates->m_TextMatrix.Set(GetNumber16(5), GetNumber16(4), GetNumber16(3),
- GetNumber16(2), GetNumber(1), GetNumber(0));
- OnChangeTextMatrix();
- m_pCurStates->m_TextX = 0;
- m_pCurStates->m_TextY = 0;
- m_pCurStates->m_TextLineX = 0;
- m_pCurStates->m_TextLineY = 0;
-}
-void CPDF_StreamContentParser::OnChangeTextMatrix()
-{
- CFX_AffineMatrix text_matrix(m_pCurStates->m_TextHorzScale, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f);
- text_matrix.Concat(m_pCurStates->m_TextMatrix);
- text_matrix.Concat(m_pCurStates->m_CTM);
- text_matrix.Concat(m_mtContentToUser);
- FX_FLOAT* pTextMatrix = m_pCurStates->m_TextState.GetModify()->m_Matrix;
- pTextMatrix[0] = text_matrix.a;
- pTextMatrix[1] = text_matrix.c;
- pTextMatrix[2] = text_matrix.b;
- pTextMatrix[3] = text_matrix.d;
-}
-void CPDF_StreamContentParser::Handle_SetTextRenderMode()
-{
- int mode = GetInteger(0);
- if (mode < 0 || mode > 7) {
- return;
- }
- m_pCurStates->m_TextState.GetModify()->m_TextMode = mode;
-}
-void CPDF_StreamContentParser::Handle_SetTextRise()
-{
- m_pCurStates->m_TextRise = GetNumber(0);
-}
-void CPDF_StreamContentParser::Handle_SetWordSpace()
-{
- m_pCurStates->m_TextState.GetModify()->m_WordSpace = GetNumber(0);
-}
-void CPDF_StreamContentParser::Handle_SetHorzScale()
-{
- if (m_ParamCount != 1) {
- return;
- }
- m_pCurStates->m_TextHorzScale = GetNumber(0) / 100;
- OnChangeTextMatrix();
-}
-void CPDF_StreamContentParser::Handle_MoveToNextLine()
-{
- m_pCurStates->m_TextLineY -= m_pCurStates->m_TextLeading;
- m_pCurStates->m_TextX = m_pCurStates->m_TextLineX;
- m_pCurStates->m_TextY = m_pCurStates->m_TextLineY;
-}
-void CPDF_StreamContentParser::Handle_CurveTo_23()
-{
- if (m_Options.m_bTextOnly) {
- return;
- }
- AddPathPoint(m_PathCurrentX, m_PathCurrentY, FXPT_BEZIERTO);
- AddPathPoint(GetNumber(3), GetNumber(2), FXPT_BEZIERTO);
- AddPathPoint(GetNumber(1), GetNumber(0), FXPT_BEZIERTO);
-}
-void CPDF_StreamContentParser::Handle_SetLineWidth()
-{
- FX_FLOAT width = GetNumber(0);
- m_pCurStates->m_GraphState.GetModify()->m_LineWidth = width;
-}
-void CPDF_StreamContentParser::Handle_Clip()
-{
- m_PathClipType = FXFILL_WINDING;
-}
-void CPDF_StreamContentParser::Handle_EOClip()
-{
- m_PathClipType = FXFILL_ALTERNATE;
-}
-void CPDF_StreamContentParser::Handle_CurveTo_13()
-{
- if (m_Options.m_bTextOnly) {
- return;
- }
- AddPathPoint(GetNumber(3), GetNumber(2), FXPT_BEZIERTO);
- AddPathPoint(GetNumber(1), GetNumber(0), FXPT_BEZIERTO);
- AddPathPoint(GetNumber(1), GetNumber(0), FXPT_BEZIERTO);
-}
-void CPDF_StreamContentParser::Handle_NextLineShowText()
-{
- Handle_MoveToNextLine();
- Handle_ShowText();
-}
-void CPDF_StreamContentParser::Handle_NextLineShowText_Space()
-{
- m_pCurStates->m_TextState.GetModify()->m_WordSpace = GetNumber(2);
- m_pCurStates->m_TextState.GetModify()->m_CharSpace = GetNumber(1);
- Handle_NextLineShowText();
-}
-void CPDF_StreamContentParser::Handle_Invalid()
-{
-}
-void CPDF_StreamContentParser::AddPathPoint(FX_FLOAT x, FX_FLOAT y, int flag)
-{
- m_PathCurrentX = x;
- m_PathCurrentY = y;
- if (flag == FXPT_MOVETO) {
- m_PathStartX = x;
- m_PathStartY = y;
- if (m_PathPointCount && m_pPathPoints[m_PathPointCount - 1].m_Flag == FXPT_MOVETO) {
- m_pPathPoints[m_PathPointCount - 1].m_PointX = x;
- m_pPathPoints[m_PathPointCount - 1].m_PointY = y;
- return;
- }
- } else if (m_PathPointCount == 0) {
- return;
- }
- m_PathPointCount ++;
- if (m_PathPointCount > m_PathAllocSize) {
- int newsize = m_PathPointCount + 256;
- FX_PATHPOINT* pNewPoints = FX_Alloc(FX_PATHPOINT, newsize);
- if (m_PathAllocSize) {
- FXSYS_memcpy(pNewPoints, m_pPathPoints, m_PathAllocSize * sizeof(FX_PATHPOINT));
- FX_Free(m_pPathPoints);
- }
- m_pPathPoints = pNewPoints;
- m_PathAllocSize = newsize;
- }
- m_pPathPoints[m_PathPointCount - 1].m_Flag = flag;
- m_pPathPoints[m_PathPointCount - 1].m_PointX = x;
- m_pPathPoints[m_PathPointCount - 1].m_PointY = y;
-}
-void CPDF_StreamContentParser::AddPathObject(int FillType, FX_BOOL bStroke)
-{
- int PathPointCount = m_PathPointCount, PathClipType = m_PathClipType;
- m_PathPointCount = 0;
- m_PathClipType = 0;
- if (PathPointCount <= 1) {
- if (PathPointCount && PathClipType) {
- CPDF_Path path;
- path.New()->AppendRect(0, 0, 0, 0);
- m_pCurStates->m_ClipPath.AppendPath(path, FXFILL_WINDING, TRUE);
- }
- return;
- }
- if (PathPointCount && m_pPathPoints[PathPointCount - 1].m_Flag == FXPT_MOVETO) {
- PathPointCount --;
- }
- CPDF_Path Path;
- CFX_PathData* pPathData = Path.New();
- pPathData->SetPointCount(PathPointCount);
- FXSYS_memcpy(pPathData->GetPoints(), m_pPathPoints, sizeof(FX_PATHPOINT) * PathPointCount);
- CFX_AffineMatrix matrix = m_pCurStates->m_CTM;
- matrix.Concat(m_mtContentToUser);
- if (bStroke || FillType) {
- CPDF_PathObject* pPathObj = new CPDF_PathObject;
- pPathObj->m_bStroke = bStroke;
- pPathObj->m_FillType = FillType;
- pPathObj->m_Path = Path;
- pPathObj->m_Matrix = matrix;
- SetGraphicStates(pPathObj, TRUE, FALSE, TRUE);
- pPathObj->CalcBoundingBox();
- m_pObjectList->m_ObjectList.AddTail(pPathObj);
- }
- if (PathClipType) {
- if (!matrix.IsIdentity()) {
- Path.Transform(&matrix);
- matrix.SetIdentity();
- }
- m_pCurStates->m_ClipPath.AppendPath(Path, PathClipType, TRUE);
- }
-}
-CFX_ByteString _FPDF_ByteStringFromHex(CFX_BinaryBuf& src_buf)
-{
- CFX_ByteTextBuf buf;
- FX_BOOL bFirst = TRUE;
- int code = 0;
- const uint8_t* str = src_buf.GetBuffer();
- FX_DWORD size = src_buf.GetSize();
- for (FX_DWORD i = 0; i < size; i ++) {
- uint8_t ch = str[i];
- if (ch >= '0' && ch <= '9') {
- if (bFirst) {
- code = (ch - '0') * 16;
- } else {
- code += ch - '0';
- buf.AppendChar((char)code);
- }
- bFirst = !bFirst;
- } else if (ch >= 'A' && ch <= 'F') {
- if (bFirst) {
- code = (ch - 'A' + 10) * 16;
- } else {
- code += ch - 'A' + 10;
- buf.AppendChar((char)code);
- }
- bFirst = !bFirst;
- } else if (ch >= 'a' && ch <= 'f') {
- if (bFirst) {
- code = (ch - 'a' + 10) * 16;
- } else {
- code += ch - 'a' + 10;
- buf.AppendChar((char)code);
- }
- bFirst = !bFirst;
- }
- }
- if (!bFirst) {
+ m_pCurStates->m_TextY -=
+ FXSYS_Mul(fInitKerning, m_pCurStates->m_TextState.GetFontSize()) /
+ 1000;
+ }
+ }
+ if (nsegs == 0) {
+ return;
+ }
+ int textmode;
+ if (pFont->GetFontType() == PDFFONT_TYPE3) {
+ textmode = 0;
+ } else {
+ textmode = m_pCurStates->m_TextState.GetObject()->m_TextMode;
+ }
+ CPDF_TextObject* pText = new CPDF_TextObject;
+ m_pLastTextObject = pText;
+ SetGraphicStates(pText, TRUE, TRUE, TRUE);
+ if (textmode && textmode != 3 && textmode != 4 && textmode != 7) {
+ FX_FLOAT* pCTM = pText->m_TextState.GetModify()->m_CTM;
+ pCTM[0] = m_pCurStates->m_CTM.a;
+ pCTM[1] = m_pCurStates->m_CTM.c;
+ pCTM[2] = m_pCurStates->m_CTM.b;
+ pCTM[3] = m_pCurStates->m_CTM.d;
+ }
+ pText->SetSegments(pStrs, pKerning, nsegs);
+ pText->m_PosX = m_pCurStates->m_TextX;
+ pText->m_PosY = m_pCurStates->m_TextY + m_pCurStates->m_TextRise;
+ ConvertTextSpace(pText->m_PosX, pText->m_PosY);
+ FX_FLOAT x_advance, y_advance;
+ pText->CalcPositionData(&x_advance, &y_advance, m_pCurStates->m_TextHorzScale,
+ m_Level);
+ m_pCurStates->m_TextX += x_advance;
+ m_pCurStates->m_TextY += y_advance;
+ if (textmode > 3) {
+ CPDF_TextObject* pCopy = new CPDF_TextObject;
+ pCopy->Copy(pText);
+ m_ClipTextList.Add(pCopy);
+ }
+ m_pObjectList->m_ObjectList.AddTail(pText);
+ if (pKerning && pKerning[nsegs - 1] != 0) {
+ if (!pFont->IsVertWriting()) {
+ m_pCurStates->m_TextX -=
+ FXSYS_Mul(pKerning[nsegs - 1],
+ m_pCurStates->m_TextState.GetFontSize()) /
+ 1000;
+ } else {
+ m_pCurStates->m_TextY -=
+ FXSYS_Mul(pKerning[nsegs - 1],
+ m_pCurStates->m_TextState.GetFontSize()) /
+ 1000;
+ }
+ }
+}
+void CPDF_StreamContentParser::Handle_ShowText() {
+ CFX_ByteString str = GetString(0);
+ if (str.IsEmpty()) {
+ return;
+ }
+ AddTextObject(&str, 0, NULL, 1);
+}
+void CPDF_StreamContentParser::Handle_ShowText_Positioning() {
+ CPDF_Array* pArray = GetObject(0) ? GetObject(0)->GetArray() : NULL;
+ if (pArray == NULL) {
+ return;
+ }
+ int n = pArray->GetCount(), nsegs = 0, i;
+ for (i = 0; i < n; i++) {
+ CPDF_Object* pObj = pArray->GetElementValue(i);
+ if (pObj->GetType() == PDFOBJ_STRING) {
+ nsegs++;
+ }
+ }
+ if (nsegs == 0) {
+ for (i = 0; i < n; i++) {
+ m_pCurStates->m_TextX -=
+ FXSYS_Mul(pArray->GetNumber(i),
+ m_pCurStates->m_TextState.GetFontSize()) /
+ 1000;
+ };
+ return;
+ }
+ CFX_ByteString* pStrs = new CFX_ByteString[nsegs];
+ FX_FLOAT* pKerning = FX_Alloc(FX_FLOAT, nsegs);
+ int iSegment = 0;
+ FX_FLOAT fInitKerning = 0;
+ for (i = 0; i < n; i++) {
+ CPDF_Object* pObj = pArray->GetElementValue(i);
+ if (pObj->GetType() == PDFOBJ_STRING) {
+ CFX_ByteString str = pObj->GetString();
+ if (str.IsEmpty()) {
+ continue;
+ }
+ pStrs[iSegment] = str;
+ pKerning[iSegment++] = 0;
+ } else {
+ FX_FLOAT num = pObj ? pObj->GetNumber() : 0;
+ if (iSegment == 0) {
+ fInitKerning += num;
+ } else {
+ pKerning[iSegment - 1] += num;
+ }
+ }
+ }
+ AddTextObject(pStrs, fInitKerning, pKerning, iSegment);
+ delete[] pStrs;
+ FX_Free(pKerning);
+}
+void CPDF_StreamContentParser::Handle_SetTextLeading() {
+ m_pCurStates->m_TextLeading = GetNumber(0);
+}
+void CPDF_StreamContentParser::Handle_SetTextMatrix() {
+ m_pCurStates->m_TextMatrix.Set(GetNumber16(5), GetNumber16(4), GetNumber16(3),
+ GetNumber16(2), GetNumber(1), GetNumber(0));
+ OnChangeTextMatrix();
+ m_pCurStates->m_TextX = 0;
+ m_pCurStates->m_TextY = 0;
+ m_pCurStates->m_TextLineX = 0;
+ m_pCurStates->m_TextLineY = 0;
+}
+void CPDF_StreamContentParser::OnChangeTextMatrix() {
+ CFX_AffineMatrix text_matrix(m_pCurStates->m_TextHorzScale, 0.0f, 0.0f, 1.0f,
+ 0.0f, 0.0f);
+ text_matrix.Concat(m_pCurStates->m_TextMatrix);
+ text_matrix.Concat(m_pCurStates->m_CTM);
+ text_matrix.Concat(m_mtContentToUser);
+ FX_FLOAT* pTextMatrix = m_pCurStates->m_TextState.GetModify()->m_Matrix;
+ pTextMatrix[0] = text_matrix.a;
+ pTextMatrix[1] = text_matrix.c;
+ pTextMatrix[2] = text_matrix.b;
+ pTextMatrix[3] = text_matrix.d;
+}
+void CPDF_StreamContentParser::Handle_SetTextRenderMode() {
+ int mode = GetInteger(0);
+ if (mode < 0 || mode > 7) {
+ return;
+ }
+ m_pCurStates->m_TextState.GetModify()->m_TextMode = mode;
+}
+void CPDF_StreamContentParser::Handle_SetTextRise() {
+ m_pCurStates->m_TextRise = GetNumber(0);
+}
+void CPDF_StreamContentParser::Handle_SetWordSpace() {
+ m_pCurStates->m_TextState.GetModify()->m_WordSpace = GetNumber(0);
+}
+void CPDF_StreamContentParser::Handle_SetHorzScale() {
+ if (m_ParamCount != 1) {
+ return;
+ }
+ m_pCurStates->m_TextHorzScale = GetNumber(0) / 100;
+ OnChangeTextMatrix();
+}
+void CPDF_StreamContentParser::Handle_MoveToNextLine() {
+ m_pCurStates->m_TextLineY -= m_pCurStates->m_TextLeading;
+ m_pCurStates->m_TextX = m_pCurStates->m_TextLineX;
+ m_pCurStates->m_TextY = m_pCurStates->m_TextLineY;
+}
+void CPDF_StreamContentParser::Handle_CurveTo_23() {
+ if (m_Options.m_bTextOnly) {
+ return;
+ }
+ AddPathPoint(m_PathCurrentX, m_PathCurrentY, FXPT_BEZIERTO);
+ AddPathPoint(GetNumber(3), GetNumber(2), FXPT_BEZIERTO);
+ AddPathPoint(GetNumber(1), GetNumber(0), FXPT_BEZIERTO);
+}
+void CPDF_StreamContentParser::Handle_SetLineWidth() {
+ FX_FLOAT width = GetNumber(0);
+ m_pCurStates->m_GraphState.GetModify()->m_LineWidth = width;
+}
+void CPDF_StreamContentParser::Handle_Clip() {
+ m_PathClipType = FXFILL_WINDING;
+}
+void CPDF_StreamContentParser::Handle_EOClip() {
+ m_PathClipType = FXFILL_ALTERNATE;
+}
+void CPDF_StreamContentParser::Handle_CurveTo_13() {
+ if (m_Options.m_bTextOnly) {
+ return;
+ }
+ AddPathPoint(GetNumber(3), GetNumber(2), FXPT_BEZIERTO);
+ AddPathPoint(GetNumber(1), GetNumber(0), FXPT_BEZIERTO);
+ AddPathPoint(GetNumber(1), GetNumber(0), FXPT_BEZIERTO);
+}
+void CPDF_StreamContentParser::Handle_NextLineShowText() {
+ Handle_MoveToNextLine();
+ Handle_ShowText();
+}
+void CPDF_StreamContentParser::Handle_NextLineShowText_Space() {
+ m_pCurStates->m_TextState.GetModify()->m_WordSpace = GetNumber(2);
+ m_pCurStates->m_TextState.GetModify()->m_CharSpace = GetNumber(1);
+ Handle_NextLineShowText();
+}
+void CPDF_StreamContentParser::Handle_Invalid() {}
+void CPDF_StreamContentParser::AddPathPoint(FX_FLOAT x, FX_FLOAT y, int flag) {
+ m_PathCurrentX = x;
+ m_PathCurrentY = y;
+ if (flag == FXPT_MOVETO) {
+ m_PathStartX = x;
+ m_PathStartY = y;
+ if (m_PathPointCount &&
+ m_pPathPoints[m_PathPointCount - 1].m_Flag == FXPT_MOVETO) {
+ m_pPathPoints[m_PathPointCount - 1].m_PointX = x;
+ m_pPathPoints[m_PathPointCount - 1].m_PointY = y;
+ return;
+ }
+ } else if (m_PathPointCount == 0) {
+ return;
+ }
+ m_PathPointCount++;
+ if (m_PathPointCount > m_PathAllocSize) {
+ int newsize = m_PathPointCount + 256;
+ FX_PATHPOINT* pNewPoints = FX_Alloc(FX_PATHPOINT, newsize);
+ if (m_PathAllocSize) {
+ FXSYS_memcpy(pNewPoints, m_pPathPoints,
+ m_PathAllocSize * sizeof(FX_PATHPOINT));
+ FX_Free(m_pPathPoints);
+ }
+ m_pPathPoints = pNewPoints;
+ m_PathAllocSize = newsize;
+ }
+ m_pPathPoints[m_PathPointCount - 1].m_Flag = flag;
+ m_pPathPoints[m_PathPointCount - 1].m_PointX = x;
+ m_pPathPoints[m_PathPointCount - 1].m_PointY = y;
+}
+void CPDF_StreamContentParser::AddPathObject(int FillType, FX_BOOL bStroke) {
+ int PathPointCount = m_PathPointCount, PathClipType = m_PathClipType;
+ m_PathPointCount = 0;
+ m_PathClipType = 0;
+ if (PathPointCount <= 1) {
+ if (PathPointCount && PathClipType) {
+ CPDF_Path path;
+ path.New()->AppendRect(0, 0, 0, 0);
+ m_pCurStates->m_ClipPath.AppendPath(path, FXFILL_WINDING, TRUE);
+ }
+ return;
+ }
+ if (PathPointCount &&
+ m_pPathPoints[PathPointCount - 1].m_Flag == FXPT_MOVETO) {
+ PathPointCount--;
+ }
+ CPDF_Path Path;
+ CFX_PathData* pPathData = Path.New();
+ pPathData->SetPointCount(PathPointCount);
+ FXSYS_memcpy(pPathData->GetPoints(), m_pPathPoints,
+ sizeof(FX_PATHPOINT) * PathPointCount);
+ CFX_AffineMatrix matrix = m_pCurStates->m_CTM;
+ matrix.Concat(m_mtContentToUser);
+ if (bStroke || FillType) {
+ CPDF_PathObject* pPathObj = new CPDF_PathObject;
+ pPathObj->m_bStroke = bStroke;
+ pPathObj->m_FillType = FillType;
+ pPathObj->m_Path = Path;
+ pPathObj->m_Matrix = matrix;
+ SetGraphicStates(pPathObj, TRUE, FALSE, TRUE);
+ pPathObj->CalcBoundingBox();
+ m_pObjectList->m_ObjectList.AddTail(pPathObj);
+ }
+ if (PathClipType) {
+ if (!matrix.IsIdentity()) {
+ Path.Transform(&matrix);
+ matrix.SetIdentity();
+ }
+ m_pCurStates->m_ClipPath.AppendPath(Path, PathClipType, TRUE);
+ }
+}
+CFX_ByteString _FPDF_ByteStringFromHex(CFX_BinaryBuf& src_buf) {
+ CFX_ByteTextBuf buf;
+ FX_BOOL bFirst = TRUE;
+ int code = 0;
+ const uint8_t* str = src_buf.GetBuffer();
+ FX_DWORD size = src_buf.GetSize();
+ for (FX_DWORD i = 0; i < size; i++) {
+ uint8_t ch = str[i];
+ if (ch >= '0' && ch <= '9') {
+ if (bFirst) {
+ code = (ch - '0') * 16;
+ } else {
+ code += ch - '0';
buf.AppendChar((char)code);
- }
- return buf.GetByteString();
+ }
+ bFirst = !bFirst;
+ } else if (ch >= 'A' && ch <= 'F') {
+ if (bFirst) {
+ code = (ch - 'A' + 10) * 16;
+ } else {
+ code += ch - 'A' + 10;
+ buf.AppendChar((char)code);
+ }
+ bFirst = !bFirst;
+ } else if (ch >= 'a' && ch <= 'f') {
+ if (bFirst) {
+ code = (ch - 'a' + 10) * 16;
+ } else {
+ code += ch - 'a' + 10;
+ buf.AppendChar((char)code);
+ }
+ bFirst = !bFirst;
+ }
+ }
+ if (!bFirst) {
+ buf.AppendChar((char)code);
+ }
+ return buf.GetByteString();
}
diff --git a/core/src/fpdfapi/fpdf_page/fpdf_page_parser_old.cpp b/core/src/fpdfapi/fpdf_page/fpdf_page_parser_old.cpp
index b2cfce73d9..78169614bd 100644
--- a/core/src/fpdfapi/fpdf_page/fpdf_page_parser_old.cpp
+++ b/core/src/fpdfapi/fpdf_page/fpdf_page_parser_old.cpp
@@ -18,1118 +18,1168 @@ const FX_CHAR* const _PDF_OpCharType =
"IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII"
"IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII"
"IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII";
-FX_BOOL _PDF_HasInvalidOpChar(const FX_CHAR* op)
-{
- if(!op) {
- return FALSE;
- }
- uint8_t ch;
- while((ch = *op++)) {
- if(_PDF_OpCharType[ch] == 'I') {
- return TRUE;
- }
- }
+FX_BOOL _PDF_HasInvalidOpChar(const FX_CHAR* op) {
+ if (!op) {
return FALSE;
+ }
+ uint8_t ch;
+ while ((ch = *op++)) {
+ if (_PDF_OpCharType[ch] == 'I') {
+ return TRUE;
+ }
+ }
+ return FALSE;
}
class CPDF_StreamParserAutoClearer {
- public:
- CPDF_StreamParserAutoClearer(CPDF_StreamParser** scoped_variable, CPDF_StreamParser* new_parser)
- : scoped_variable_(scoped_variable) {
- *scoped_variable_ = new_parser;
- }
- ~CPDF_StreamParserAutoClearer() { *scoped_variable_ = NULL; }
- private:
- CPDF_StreamParser** scoped_variable_;
+ public:
+ CPDF_StreamParserAutoClearer(CPDF_StreamParser** scoped_variable,
+ CPDF_StreamParser* new_parser)
+ : scoped_variable_(scoped_variable) {
+ *scoped_variable_ = new_parser;
+ }
+ ~CPDF_StreamParserAutoClearer() { *scoped_variable_ = NULL; }
+
+ private:
+ CPDF_StreamParser** scoped_variable_;
};
-FX_DWORD CPDF_StreamContentParser::Parse(const uint8_t* pData, FX_DWORD dwSize, FX_DWORD max_cost)
-{
- if (m_Level > _FPDF_MAX_FORM_LEVEL_) {
- return dwSize;
- }
- FX_DWORD InitObjCount = m_pObjectList->CountObjects();
- CPDF_StreamParser syntax(pData, dwSize);
- CPDF_StreamParserAutoClearer auto_clearer(&m_pSyntax, &syntax);
- m_CompatCount = 0;
- while (1) {
- FX_DWORD cost = m_pObjectList->CountObjects() - InitObjCount;
- if (max_cost && cost >= max_cost) {
- break;
- }
- switch (syntax.ParseNextElement()) {
- case CPDF_StreamParser::EndOfData:
- return m_pSyntax->GetPos();
- case CPDF_StreamParser::Keyword:
- if(!OnOperator((char*)syntax.GetWordBuf()) && _PDF_HasInvalidOpChar((char*)syntax.GetWordBuf())) {
- m_bAbort = TRUE;
- }
- if (m_bAbort) {
- return m_pSyntax->GetPos();
- }
- ClearAllParams();
- break;
- case CPDF_StreamParser::Number:
- AddNumberParam((char*)syntax.GetWordBuf(), syntax.GetWordSize());
- break;
- case CPDF_StreamParser::Name:
- AddNameParam((const FX_CHAR*)syntax.GetWordBuf() + 1, syntax.GetWordSize() - 1);
- break;
- default:
- AddObjectParam(syntax.GetObject());
- }
- }
- return m_pSyntax->GetPos();
+FX_DWORD CPDF_StreamContentParser::Parse(const uint8_t* pData,
+ FX_DWORD dwSize,
+ FX_DWORD max_cost) {
+ if (m_Level > _FPDF_MAX_FORM_LEVEL_) {
+ return dwSize;
+ }
+ FX_DWORD InitObjCount = m_pObjectList->CountObjects();
+ CPDF_StreamParser syntax(pData, dwSize);
+ CPDF_StreamParserAutoClearer auto_clearer(&m_pSyntax, &syntax);
+ m_CompatCount = 0;
+ while (1) {
+ FX_DWORD cost = m_pObjectList->CountObjects() - InitObjCount;
+ if (max_cost && cost >= max_cost) {
+ break;
+ }
+ switch (syntax.ParseNextElement()) {
+ case CPDF_StreamParser::EndOfData:
+ return m_pSyntax->GetPos();
+ case CPDF_StreamParser::Keyword:
+ if (!OnOperator((char*)syntax.GetWordBuf()) &&
+ _PDF_HasInvalidOpChar((char*)syntax.GetWordBuf())) {
+ m_bAbort = TRUE;
+ }
+ if (m_bAbort) {
+ return m_pSyntax->GetPos();
+ }
+ ClearAllParams();
+ break;
+ case CPDF_StreamParser::Number:
+ AddNumberParam((char*)syntax.GetWordBuf(), syntax.GetWordSize());
+ break;
+ case CPDF_StreamParser::Name:
+ AddNameParam((const FX_CHAR*)syntax.GetWordBuf() + 1,
+ syntax.GetWordSize() - 1);
+ break;
+ default:
+ AddObjectParam(syntax.GetObject());
+ }
+ }
+ return m_pSyntax->GetPos();
}
void _PDF_ReplaceAbbr(CPDF_Object* pObj);
-void CPDF_StreamContentParser::Handle_BeginImage()
-{
- FX_FILESIZE savePos = m_pSyntax->GetPos();
- CPDF_Dictionary* pDict = CPDF_Dictionary::Create();
- while (1) {
- CPDF_StreamParser::SyntaxType type = m_pSyntax->ParseNextElement();
- if (type == CPDF_StreamParser::Keyword) {
- CFX_ByteString bsKeyword(m_pSyntax->GetWordBuf(), m_pSyntax->GetWordSize());
- if (bsKeyword != FX_BSTRC("ID")) {
- m_pSyntax->SetPos(savePos);
- pDict->Release();
- return;
- }
- }
- if (type != CPDF_StreamParser::Name) {
- break;
- }
- CFX_ByteString key((const FX_CHAR*)m_pSyntax->GetWordBuf() + 1, m_pSyntax->GetWordSize() - 1);
- CPDF_Object* pObj = m_pSyntax->ReadNextObject();
- if (!key.IsEmpty()) {
- pDict->SetAt(key, pObj, m_pDocument);
- } else if (pObj) {
- pObj->Release();
- }
- }
- _PDF_ReplaceAbbr(pDict);
- CPDF_Object* pCSObj = NULL;
- if (pDict->KeyExist(FX_BSTRC("ColorSpace"))) {
- pCSObj = pDict->GetElementValue(FX_BSTRC("ColorSpace"));
- if (pCSObj->GetType() == PDFOBJ_NAME) {
- CFX_ByteString name = pCSObj->GetString();
- if (name != FX_BSTRC("DeviceRGB") && name != FX_BSTRC("DeviceGray") && name != FX_BSTRC("DeviceCMYK")) {
- pCSObj = FindResourceObj(FX_BSTRC("ColorSpace"), name);
- if (pCSObj && !pCSObj->GetObjNum()) {
- pCSObj = pCSObj->Clone();
- pDict->SetAt(FX_BSTRC("ColorSpace"), pCSObj, m_pDocument);
- }
- }
- }
- }
- CPDF_Stream* pStream = m_pSyntax->ReadInlineStream(m_pDocument, pDict, pCSObj, m_Options.m_bDecodeInlineImage);
- while (1) {
- CPDF_StreamParser::SyntaxType type = m_pSyntax->ParseNextElement();
- if (type == CPDF_StreamParser::EndOfData) {
- break;
- }
- if (type != CPDF_StreamParser::Keyword) {
- continue;
- }
- if (m_pSyntax->GetWordSize() == 2 && m_pSyntax->GetWordBuf()[0] == 'E' &&
- m_pSyntax->GetWordBuf()[1] == 'I') {
- break;
- }
- }
- if (m_Options.m_bTextOnly) {
- if (pStream) {
- pStream->Release();
- } else {
- pDict->Release();
- }
+void CPDF_StreamContentParser::Handle_BeginImage() {
+ FX_FILESIZE savePos = m_pSyntax->GetPos();
+ CPDF_Dictionary* pDict = CPDF_Dictionary::Create();
+ while (1) {
+ CPDF_StreamParser::SyntaxType type = m_pSyntax->ParseNextElement();
+ if (type == CPDF_StreamParser::Keyword) {
+ CFX_ByteString bsKeyword(m_pSyntax->GetWordBuf(),
+ m_pSyntax->GetWordSize());
+ if (bsKeyword != FX_BSTRC("ID")) {
+ m_pSyntax->SetPos(savePos);
+ pDict->Release();
return;
+ }
+ }
+ if (type != CPDF_StreamParser::Name) {
+ break;
+ }
+ CFX_ByteString key((const FX_CHAR*)m_pSyntax->GetWordBuf() + 1,
+ m_pSyntax->GetWordSize() - 1);
+ CPDF_Object* pObj = m_pSyntax->ReadNextObject();
+ if (!key.IsEmpty()) {
+ pDict->SetAt(key, pObj, m_pDocument);
+ } else if (pObj) {
+ pObj->Release();
+ }
+ }
+ _PDF_ReplaceAbbr(pDict);
+ CPDF_Object* pCSObj = NULL;
+ if (pDict->KeyExist(FX_BSTRC("ColorSpace"))) {
+ pCSObj = pDict->GetElementValue(FX_BSTRC("ColorSpace"));
+ if (pCSObj->GetType() == PDFOBJ_NAME) {
+ CFX_ByteString name = pCSObj->GetString();
+ if (name != FX_BSTRC("DeviceRGB") && name != FX_BSTRC("DeviceGray") &&
+ name != FX_BSTRC("DeviceCMYK")) {
+ pCSObj = FindResourceObj(FX_BSTRC("ColorSpace"), name);
+ if (pCSObj && !pCSObj->GetObjNum()) {
+ pCSObj = pCSObj->Clone();
+ pDict->SetAt(FX_BSTRC("ColorSpace"), pCSObj, m_pDocument);
+ }
+ }
+ }
+ }
+ CPDF_Stream* pStream = m_pSyntax->ReadInlineStream(
+ m_pDocument, pDict, pCSObj, m_Options.m_bDecodeInlineImage);
+ while (1) {
+ CPDF_StreamParser::SyntaxType type = m_pSyntax->ParseNextElement();
+ if (type == CPDF_StreamParser::EndOfData) {
+ break;
+ }
+ if (type != CPDF_StreamParser::Keyword) {
+ continue;
+ }
+ if (m_pSyntax->GetWordSize() == 2 && m_pSyntax->GetWordBuf()[0] == 'E' &&
+ m_pSyntax->GetWordBuf()[1] == 'I') {
+ break;
+ }
+ }
+ if (m_Options.m_bTextOnly) {
+ if (pStream) {
+ pStream->Release();
+ } else {
+ pDict->Release();
+ }
+ return;
+ }
+ pDict->SetAtName(FX_BSTRC("Subtype"), FX_BSTRC("Image"));
+ CPDF_ImageObject* pImgObj = AddImage(pStream, NULL, TRUE);
+ if (!pImgObj) {
+ if (pStream) {
+ pStream->Release();
+ } else {
+ pDict->Release();
}
- pDict->SetAtName(FX_BSTRC("Subtype"), FX_BSTRC("Image"));
- CPDF_ImageObject *pImgObj = AddImage(pStream, NULL, TRUE);
- if (!pImgObj) {
- if (pStream) {
- pStream->Release();
- } else {
- pDict->Release();
- }
- }
+ }
}
-void CPDF_StreamContentParser::ParsePathObject()
-{
- FX_FLOAT params[6] = {};
- int nParams = 0;
- int last_pos = m_pSyntax->GetPos();
- while (1) {
- CPDF_StreamParser::SyntaxType type = m_pSyntax->ParseNextElement();
- FX_BOOL bProcessed = TRUE;
- switch (type) {
- case CPDF_StreamParser::EndOfData:
- return;
- case CPDF_StreamParser::Keyword: {
- int len = m_pSyntax->GetWordSize();
- if (len == 1) {
- switch (m_pSyntax->GetWordBuf()[0]) {
- case 'm':
- AddPathPoint(params[0], params[1], FXPT_MOVETO);
- nParams = 0;
- break;
- case 'l':
- AddPathPoint(params[0], params[1], FXPT_LINETO);
- nParams = 0;
- break;
- case 'c':
- AddPathPoint(params[0], params[1], FXPT_BEZIERTO);
- AddPathPoint(params[2], params[3], FXPT_BEZIERTO);
- AddPathPoint(params[4], params[5], FXPT_BEZIERTO);
- nParams = 0;
- break;
- case 'v':
- AddPathPoint(m_PathCurrentX, m_PathCurrentY, FXPT_BEZIERTO);
- AddPathPoint(params[0], params[1], FXPT_BEZIERTO);
- AddPathPoint(params[2], params[3], FXPT_BEZIERTO);
- nParams = 0;
- break;
- case 'y':
- AddPathPoint(params[0], params[1], FXPT_BEZIERTO);
- AddPathPoint(params[2], params[3], FXPT_BEZIERTO);
- AddPathPoint(params[2], params[3], FXPT_BEZIERTO);
- nParams = 0;
- break;
- case 'h':
- Handle_ClosePath();
- nParams = 0;
- break;
- default:
- bProcessed = FALSE;
- break;
- }
- } else if (len == 2) {
- if (m_pSyntax->GetWordBuf()[0] == 'r' && m_pSyntax->GetWordBuf()[1] == 'e') {
- AddPathRect(params[0], params[1], params[2], params[3]);
- nParams = 0;
- } else {
- bProcessed = FALSE;
- }
- } else {
- bProcessed = FALSE;
- }
- if (bProcessed) {
- last_pos = m_pSyntax->GetPos();
- }
- break;
- }
- case CPDF_StreamParser::Number: {
- if (nParams == 6) {
- break;
- }
- FX_BOOL bInteger;
- int value;
- FX_atonum(CFX_ByteStringC(m_pSyntax->GetWordBuf(), m_pSyntax->GetWordSize()), bInteger, &value);
- params[nParams++] = bInteger ? (FX_FLOAT)value : *(FX_FLOAT*)&value;
- break;
- }
+void CPDF_StreamContentParser::ParsePathObject() {
+ FX_FLOAT params[6] = {};
+ int nParams = 0;
+ int last_pos = m_pSyntax->GetPos();
+ while (1) {
+ CPDF_StreamParser::SyntaxType type = m_pSyntax->ParseNextElement();
+ FX_BOOL bProcessed = TRUE;
+ switch (type) {
+ case CPDF_StreamParser::EndOfData:
+ return;
+ case CPDF_StreamParser::Keyword: {
+ int len = m_pSyntax->GetWordSize();
+ if (len == 1) {
+ switch (m_pSyntax->GetWordBuf()[0]) {
+ case 'm':
+ AddPathPoint(params[0], params[1], FXPT_MOVETO);
+ nParams = 0;
+ break;
+ case 'l':
+ AddPathPoint(params[0], params[1], FXPT_LINETO);
+ nParams = 0;
+ break;
+ case 'c':
+ AddPathPoint(params[0], params[1], FXPT_BEZIERTO);
+ AddPathPoint(params[2], params[3], FXPT_BEZIERTO);
+ AddPathPoint(params[4], params[5], FXPT_BEZIERTO);
+ nParams = 0;
+ break;
+ case 'v':
+ AddPathPoint(m_PathCurrentX, m_PathCurrentY, FXPT_BEZIERTO);
+ AddPathPoint(params[0], params[1], FXPT_BEZIERTO);
+ AddPathPoint(params[2], params[3], FXPT_BEZIERTO);
+ nParams = 0;
+ break;
+ case 'y':
+ AddPathPoint(params[0], params[1], FXPT_BEZIERTO);
+ AddPathPoint(params[2], params[3], FXPT_BEZIERTO);
+ AddPathPoint(params[2], params[3], FXPT_BEZIERTO);
+ nParams = 0;
+ break;
+ case 'h':
+ Handle_ClosePath();
+ nParams = 0;
+ break;
default:
- bProcessed = FALSE;
- }
- if (!bProcessed) {
- m_pSyntax->SetPos(last_pos);
- return;
- }
- }
+ bProcessed = FALSE;
+ break;
+ }
+ } else if (len == 2) {
+ if (m_pSyntax->GetWordBuf()[0] == 'r' &&
+ m_pSyntax->GetWordBuf()[1] == 'e') {
+ AddPathRect(params[0], params[1], params[2], params[3]);
+ nParams = 0;
+ } else {
+ bProcessed = FALSE;
+ }
+ } else {
+ bProcessed = FALSE;
+ }
+ if (bProcessed) {
+ last_pos = m_pSyntax->GetPos();
+ }
+ break;
+ }
+ case CPDF_StreamParser::Number: {
+ if (nParams == 6) {
+ break;
+ }
+ FX_BOOL bInteger;
+ int value;
+ FX_atonum(
+ CFX_ByteStringC(m_pSyntax->GetWordBuf(), m_pSyntax->GetWordSize()),
+ bInteger, &value);
+ params[nParams++] = bInteger ? (FX_FLOAT)value : *(FX_FLOAT*)&value;
+ break;
+ }
+ default:
+ bProcessed = FALSE;
+ }
+ if (!bProcessed) {
+ m_pSyntax->SetPos(last_pos);
+ return;
+ }
+ }
}
-CPDF_StreamParser::CPDF_StreamParser(const uint8_t* pData, FX_DWORD dwSize)
-{
- m_pBuf = pData;
- m_Size = dwSize;
- m_Pos = 0;
- m_pLastObj = NULL;
+CPDF_StreamParser::CPDF_StreamParser(const uint8_t* pData, FX_DWORD dwSize) {
+ m_pBuf = pData;
+ m_Size = dwSize;
+ m_Pos = 0;
+ m_pLastObj = NULL;
}
-CPDF_StreamParser::~CPDF_StreamParser()
-{
- if (m_pLastObj) {
- m_pLastObj->Release();
- }
+CPDF_StreamParser::~CPDF_StreamParser() {
+ if (m_pLastObj) {
+ m_pLastObj->Release();
+ }
}
-FX_DWORD _DecodeAllScanlines(ICodec_ScanlineDecoder* pDecoder, uint8_t*& dest_buf, FX_DWORD& dest_size)
-{
- if (pDecoder == NULL) {
- return (FX_DWORD) - 1;
- }
- int ncomps = pDecoder->CountComps();
- int bpc = pDecoder->GetBPC();
- int width = pDecoder->GetWidth();
- int height = pDecoder->GetHeight();
- int pitch = (width * ncomps * bpc + 7) / 8;
- if (height == 0 || pitch > (1 << 30) / height) {
- delete pDecoder;
- return -1;
- }
- dest_buf = FX_Alloc2D(uint8_t, pitch, height);
- dest_size = pitch * height; // Safe since checked alloc returned.
- for (int row = 0; row < height; row ++) {
- uint8_t* pLine = pDecoder->GetScanline(row);
- if (pLine == NULL) {
- break;
- }
- FXSYS_memcpy(dest_buf + row * pitch, pLine, pitch);
- }
- FX_DWORD srcoff = pDecoder->GetSrcOffset();
+FX_DWORD _DecodeAllScanlines(ICodec_ScanlineDecoder* pDecoder,
+ uint8_t*& dest_buf,
+ FX_DWORD& dest_size) {
+ if (pDecoder == NULL) {
+ return (FX_DWORD)-1;
+ }
+ int ncomps = pDecoder->CountComps();
+ int bpc = pDecoder->GetBPC();
+ int width = pDecoder->GetWidth();
+ int height = pDecoder->GetHeight();
+ int pitch = (width * ncomps * bpc + 7) / 8;
+ if (height == 0 || pitch > (1 << 30) / height) {
delete pDecoder;
- return srcoff;
+ return -1;
+ }
+ dest_buf = FX_Alloc2D(uint8_t, pitch, height);
+ dest_size = pitch * height; // Safe since checked alloc returned.
+ for (int row = 0; row < height; row++) {
+ uint8_t* pLine = pDecoder->GetScanline(row);
+ if (pLine == NULL) {
+ break;
+ }
+ FXSYS_memcpy(dest_buf + row * pitch, pLine, pitch);
+ }
+ FX_DWORD srcoff = pDecoder->GetSrcOffset();
+ delete pDecoder;
+ return srcoff;
}
-ICodec_ScanlineDecoder* FPDFAPI_CreateFaxDecoder(const uint8_t* src_buf, FX_DWORD src_size, int width, int height,
- const CPDF_Dictionary* pParams);
-FX_DWORD _A85Decode(const uint8_t* src_buf, FX_DWORD src_size, uint8_t*& dest_buf, FX_DWORD& dest_size);
-FX_DWORD _HexDecode(const uint8_t* src_buf, FX_DWORD src_size, uint8_t*& dest_buf, FX_DWORD& dest_size);
-FX_DWORD FPDFAPI_FlateOrLZWDecode(FX_BOOL bLZW, const uint8_t* src_buf, FX_DWORD src_size, CPDF_Dictionary* pParams,
- FX_DWORD estimated_size, uint8_t*& dest_buf, FX_DWORD& dest_size);
-FX_DWORD PDF_DecodeInlineStream(const uint8_t* src_buf, FX_DWORD limit,
- int width, int height, CFX_ByteString& decoder,
- CPDF_Dictionary* pParam, uint8_t*& dest_buf, FX_DWORD& dest_size)
-{
- if (decoder == FX_BSTRC("CCITTFaxDecode") || decoder == FX_BSTRC("CCF")) {
- ICodec_ScanlineDecoder* pDecoder = FPDFAPI_CreateFaxDecoder(src_buf, limit, width, height, pParam);
- return _DecodeAllScanlines(pDecoder, dest_buf, dest_size);
- }
- if (decoder == FX_BSTRC("ASCII85Decode") || decoder == FX_BSTRC("A85")) {
- return _A85Decode(src_buf, limit, dest_buf, dest_size);
- }
- if (decoder == FX_BSTRC("ASCIIHexDecode") || decoder == FX_BSTRC("AHx")) {
- return _HexDecode(src_buf, limit, dest_buf, dest_size);
- }
- if (decoder == FX_BSTRC("FlateDecode") || decoder == FX_BSTRC("Fl")) {
- return FPDFAPI_FlateOrLZWDecode(FALSE, src_buf, limit, pParam, dest_size, dest_buf, dest_size);
- }
- if (decoder == FX_BSTRC("LZWDecode") || decoder == FX_BSTRC("LZW")) {
- return FPDFAPI_FlateOrLZWDecode(TRUE, src_buf, limit, pParam, 0, dest_buf, dest_size);
- }
- if (decoder == FX_BSTRC("DCTDecode") || decoder == FX_BSTRC("DCT")) {
- ICodec_ScanlineDecoder* pDecoder = CPDF_ModuleMgr::Get()->GetJpegModule()->CreateDecoder(
- src_buf, limit, width, height, 0, pParam ? pParam->GetInteger(FX_BSTRC("ColorTransform"), 1) : 1);
- return _DecodeAllScanlines(pDecoder, dest_buf, dest_size);
- }
- if (decoder == FX_BSTRC("RunLengthDecode") || decoder == FX_BSTRC("RL")) {
- return RunLengthDecode(src_buf, limit, dest_buf, dest_size);
- }
- dest_size = 0;
- dest_buf = 0;
- return (FX_DWORD) - 1;
+ICodec_ScanlineDecoder* FPDFAPI_CreateFaxDecoder(
+ const uint8_t* src_buf,
+ FX_DWORD src_size,
+ int width,
+ int height,
+ const CPDF_Dictionary* pParams);
+FX_DWORD _A85Decode(const uint8_t* src_buf,
+ FX_DWORD src_size,
+ uint8_t*& dest_buf,
+ FX_DWORD& dest_size);
+FX_DWORD _HexDecode(const uint8_t* src_buf,
+ FX_DWORD src_size,
+ uint8_t*& dest_buf,
+ FX_DWORD& dest_size);
+FX_DWORD FPDFAPI_FlateOrLZWDecode(FX_BOOL bLZW,
+ const uint8_t* src_buf,
+ FX_DWORD src_size,
+ CPDF_Dictionary* pParams,
+ FX_DWORD estimated_size,
+ uint8_t*& dest_buf,
+ FX_DWORD& dest_size);
+FX_DWORD PDF_DecodeInlineStream(const uint8_t* src_buf,
+ FX_DWORD limit,
+ int width,
+ int height,
+ CFX_ByteString& decoder,
+ CPDF_Dictionary* pParam,
+ uint8_t*& dest_buf,
+ FX_DWORD& dest_size) {
+ if (decoder == FX_BSTRC("CCITTFaxDecode") || decoder == FX_BSTRC("CCF")) {
+ ICodec_ScanlineDecoder* pDecoder =
+ FPDFAPI_CreateFaxDecoder(src_buf, limit, width, height, pParam);
+ return _DecodeAllScanlines(pDecoder, dest_buf, dest_size);
+ }
+ if (decoder == FX_BSTRC("ASCII85Decode") || decoder == FX_BSTRC("A85")) {
+ return _A85Decode(src_buf, limit, dest_buf, dest_size);
+ }
+ if (decoder == FX_BSTRC("ASCIIHexDecode") || decoder == FX_BSTRC("AHx")) {
+ return _HexDecode(src_buf, limit, dest_buf, dest_size);
+ }
+ if (decoder == FX_BSTRC("FlateDecode") || decoder == FX_BSTRC("Fl")) {
+ return FPDFAPI_FlateOrLZWDecode(FALSE, src_buf, limit, pParam, dest_size,
+ dest_buf, dest_size);
+ }
+ if (decoder == FX_BSTRC("LZWDecode") || decoder == FX_BSTRC("LZW")) {
+ return FPDFAPI_FlateOrLZWDecode(TRUE, src_buf, limit, pParam, 0, dest_buf,
+ dest_size);
+ }
+ if (decoder == FX_BSTRC("DCTDecode") || decoder == FX_BSTRC("DCT")) {
+ ICodec_ScanlineDecoder* pDecoder =
+ CPDF_ModuleMgr::Get()->GetJpegModule()->CreateDecoder(
+ src_buf, limit, width, height, 0,
+ pParam ? pParam->GetInteger(FX_BSTRC("ColorTransform"), 1) : 1);
+ return _DecodeAllScanlines(pDecoder, dest_buf, dest_size);
+ }
+ if (decoder == FX_BSTRC("RunLengthDecode") || decoder == FX_BSTRC("RL")) {
+ return RunLengthDecode(src_buf, limit, dest_buf, dest_size);
+ }
+ dest_size = 0;
+ dest_buf = 0;
+ return (FX_DWORD)-1;
}
-CPDF_Stream* CPDF_StreamParser::ReadInlineStream(CPDF_Document* pDoc, CPDF_Dictionary* pDict, CPDF_Object* pCSObj, FX_BOOL bDecode)
-{
- if (m_Pos == m_Size) {
- return NULL;
- }
- if (PDF_CharType[m_pBuf[m_Pos]] == 'W') {
- m_Pos ++;
- }
- CFX_ByteString Decoder;
- CPDF_Dictionary* pParam = NULL;
- CPDF_Object* pFilter = pDict->GetElementValue(FX_BSTRC("Filter"));
- if (pFilter == NULL) {
- } else if (pFilter->GetType() == PDFOBJ_ARRAY) {
- Decoder = ((CPDF_Array*)pFilter)->GetString(0);
+CPDF_Stream* CPDF_StreamParser::ReadInlineStream(CPDF_Document* pDoc,
+ CPDF_Dictionary* pDict,
+ CPDF_Object* pCSObj,
+ FX_BOOL bDecode) {
+ if (m_Pos == m_Size) {
+ return NULL;
+ }
+ if (PDF_CharType[m_pBuf[m_Pos]] == 'W') {
+ m_Pos++;
+ }
+ CFX_ByteString Decoder;
+ CPDF_Dictionary* pParam = NULL;
+ CPDF_Object* pFilter = pDict->GetElementValue(FX_BSTRC("Filter"));
+ if (pFilter == NULL) {
+ } else if (pFilter->GetType() == PDFOBJ_ARRAY) {
+ Decoder = ((CPDF_Array*)pFilter)->GetString(0);
+ CPDF_Array* pParams = pDict->GetArray(FX_BSTRC("DecodeParms"));
+ if (pParams) {
+ pParam = pParams->GetDict(0);
+ }
+ } else {
+ Decoder = pFilter->GetString();
+ pParam = pDict->GetDict(FX_BSTRC("DecodeParms"));
+ }
+ FX_DWORD width = pDict->GetInteger(FX_BSTRC("Width"));
+ FX_DWORD height = pDict->GetInteger(FX_BSTRC("Height"));
+ FX_DWORD OrigSize = 0;
+ if (pCSObj != NULL) {
+ FX_DWORD bpc = pDict->GetInteger(FX_BSTRC("BitsPerComponent"));
+ FX_DWORD nComponents = 1;
+ CPDF_ColorSpace* pCS = pDoc->LoadColorSpace(pCSObj);
+ if (pCS == NULL) {
+ nComponents = 3;
+ } else {
+ nComponents = pCS->CountComponents();
+ pDoc->GetPageData()->ReleaseColorSpace(pCSObj);
+ }
+ FX_DWORD pitch = width;
+ if (bpc && pitch > INT_MAX / bpc) {
+ return NULL;
+ }
+ pitch *= bpc;
+ if (nComponents && pitch > INT_MAX / nComponents) {
+ return NULL;
+ }
+ pitch *= nComponents;
+ if (pitch > INT_MAX - 7) {
+ return NULL;
+ }
+ pitch += 7;
+ pitch /= 8;
+ OrigSize = pitch;
+ } else {
+ if (width > INT_MAX - 7) {
+ return NULL;
+ }
+ OrigSize = ((width + 7) / 8);
+ }
+ if (height && OrigSize > INT_MAX / height) {
+ return NULL;
+ }
+ OrigSize *= height;
+ uint8_t* pData = NULL;
+ FX_DWORD dwStreamSize;
+ if (Decoder.IsEmpty()) {
+ if (OrigSize > m_Size - m_Pos) {
+ OrigSize = m_Size - m_Pos;
+ }
+ pData = FX_Alloc(uint8_t, OrigSize);
+ FXSYS_memcpy(pData, m_pBuf + m_Pos, OrigSize);
+ dwStreamSize = OrigSize;
+ m_Pos += OrigSize;
+ } else {
+ FX_DWORD dwDestSize = OrigSize;
+ dwStreamSize =
+ PDF_DecodeInlineStream(m_pBuf + m_Pos, m_Size - m_Pos, width, height,
+ Decoder, pParam, pData, dwDestSize);
+ if ((int)dwStreamSize < 0) {
+ return NULL;
+ }
+ if (bDecode) {
+ m_Pos += dwStreamSize;
+ dwStreamSize = dwDestSize;
+ if (pFilter->GetType() == PDFOBJ_ARRAY) {
+ ((CPDF_Array*)pFilter)->RemoveAt(0);
CPDF_Array* pParams = pDict->GetArray(FX_BSTRC("DecodeParms"));
if (pParams) {
- pParam = pParams->GetDict(0);
+ pParams->RemoveAt(0);
}
+ } else {
+ pDict->RemoveAt(FX_BSTRC("Filter"));
+ pDict->RemoveAt(FX_BSTRC("DecodeParms"));
+ }
} else {
- Decoder = pFilter->GetString();
- pParam = pDict->GetDict(FX_BSTRC("DecodeParms"));
- }
- FX_DWORD width = pDict->GetInteger(FX_BSTRC("Width"));
- FX_DWORD height = pDict->GetInteger(FX_BSTRC("Height"));
- FX_DWORD OrigSize = 0;
- if (pCSObj != NULL) {
- FX_DWORD bpc = pDict->GetInteger(FX_BSTRC("BitsPerComponent"));
- FX_DWORD nComponents = 1;
- CPDF_ColorSpace* pCS = pDoc->LoadColorSpace(pCSObj);
- if (pCS == NULL) {
- nComponents = 3;
- } else {
- nComponents = pCS->CountComponents();
- pDoc->GetPageData()->ReleaseColorSpace(pCSObj);
- }
- FX_DWORD pitch = width;
- if (bpc && pitch > INT_MAX / bpc) {
- return NULL;
- }
- pitch *= bpc;
- if (nComponents && pitch > INT_MAX / nComponents) {
- return NULL;
- }
- pitch *= nComponents;
- if (pitch > INT_MAX - 7) {
- return NULL;
- }
- pitch += 7;
- pitch /= 8;
- OrigSize = pitch;
- } else {
- if (width > INT_MAX - 7) {
- return NULL;
- }
- OrigSize = ((width + 7) / 8);
- }
- if (height && OrigSize > INT_MAX / height) {
- return NULL;
- }
- OrigSize *= height;
- uint8_t* pData = NULL;
- FX_DWORD dwStreamSize;
- if (Decoder.IsEmpty()) {
- if (OrigSize > m_Size - m_Pos) {
- OrigSize = m_Size - m_Pos;
- }
- pData = FX_Alloc(uint8_t, OrigSize);
- FXSYS_memcpy(pData, m_pBuf + m_Pos, OrigSize);
- dwStreamSize = OrigSize;
- m_Pos += OrigSize;
- } else {
- FX_DWORD dwDestSize = OrigSize;
- dwStreamSize = PDF_DecodeInlineStream(m_pBuf + m_Pos, m_Size - m_Pos, width, height, Decoder, pParam,
- pData, dwDestSize);
- if ((int)dwStreamSize < 0) {
- return NULL;
- }
- if (bDecode) {
- m_Pos += dwStreamSize;
- dwStreamSize = dwDestSize;
- if (pFilter->GetType() == PDFOBJ_ARRAY) {
- ((CPDF_Array*)pFilter)->RemoveAt(0);
- CPDF_Array* pParams = pDict->GetArray(FX_BSTRC("DecodeParms"));
- if (pParams) {
- pParams->RemoveAt(0);
- }
- } else {
- pDict->RemoveAt(FX_BSTRC("Filter"));
- pDict->RemoveAt(FX_BSTRC("DecodeParms"));
- }
- } else {
- if (pData) {
- FX_Free(pData);
- }
- FX_DWORD dwSavePos = m_Pos;
- m_Pos += dwStreamSize;
- while (1) {
- FX_DWORD dwPrevPos = m_Pos;
- CPDF_StreamParser::SyntaxType type = ParseNextElement();
- if (type == CPDF_StreamParser::EndOfData) {
- break;
- }
- if (type != CPDF_StreamParser::Keyword) {
- dwStreamSize += m_Pos - dwPrevPos;
- continue;
- }
- if (GetWordSize() == 2 && GetWordBuf()[0] == 'E' &&
- GetWordBuf()[1] == 'I') {
- m_Pos = dwPrevPos;
- break;
- }
- dwStreamSize += m_Pos - dwPrevPos;
- }
- m_Pos = dwSavePos;
- pData = FX_Alloc(uint8_t, dwStreamSize);
- FXSYS_memcpy(pData, m_pBuf + m_Pos, dwStreamSize);
- m_Pos += dwStreamSize;
+ if (pData) {
+ FX_Free(pData);
+ }
+ FX_DWORD dwSavePos = m_Pos;
+ m_Pos += dwStreamSize;
+ while (1) {
+ FX_DWORD dwPrevPos = m_Pos;
+ CPDF_StreamParser::SyntaxType type = ParseNextElement();
+ if (type == CPDF_StreamParser::EndOfData) {
+ break;
}
- }
- pDict->SetAtInteger(FX_BSTRC("Length"), (int)dwStreamSize);
- return CPDF_Stream::Create(pData, dwStreamSize, pDict);
+ if (type != CPDF_StreamParser::Keyword) {
+ dwStreamSize += m_Pos - dwPrevPos;
+ continue;
+ }
+ if (GetWordSize() == 2 && GetWordBuf()[0] == 'E' &&
+ GetWordBuf()[1] == 'I') {
+ m_Pos = dwPrevPos;
+ break;
+ }
+ dwStreamSize += m_Pos - dwPrevPos;
+ }
+ m_Pos = dwSavePos;
+ pData = FX_Alloc(uint8_t, dwStreamSize);
+ FXSYS_memcpy(pData, m_pBuf + m_Pos, dwStreamSize);
+ m_Pos += dwStreamSize;
+ }
+ }
+ pDict->SetAtInteger(FX_BSTRC("Length"), (int)dwStreamSize);
+ return CPDF_Stream::Create(pData, dwStreamSize, pDict);
}
#define MAX_WORD_BUFFER 256
-#define MAX_STRING_LENGTH 32767
+#define MAX_STRING_LENGTH 32767
#define FXDWORD_TRUE FXDWORD_FROM_LSBFIRST(0x65757274)
#define FXDWORD_NULL FXDWORD_FROM_LSBFIRST(0x6c6c756e)
#define FXDWORD_FALS FXDWORD_FROM_LSBFIRST(0x736c6166)
-CPDF_StreamParser::SyntaxType CPDF_StreamParser::ParseNextElement()
-{
- if (m_pLastObj) {
- m_pLastObj->Release();
- m_pLastObj = NULL;
- }
- m_WordSize = 0;
- FX_BOOL bIsNumber = TRUE;
- if (m_Pos >= m_Size) {
+CPDF_StreamParser::SyntaxType CPDF_StreamParser::ParseNextElement() {
+ if (m_pLastObj) {
+ m_pLastObj->Release();
+ m_pLastObj = NULL;
+ }
+ m_WordSize = 0;
+ FX_BOOL bIsNumber = TRUE;
+ if (m_Pos >= m_Size) {
+ return EndOfData;
+ }
+ int ch = m_pBuf[m_Pos++];
+ int type = PDF_CharType[ch];
+ while (1) {
+ while (type == 'W') {
+ if (m_Size <= m_Pos) {
return EndOfData;
+ }
+ ch = m_pBuf[m_Pos++];
+ type = PDF_CharType[ch];
+ }
+ if (ch != '%') {
+ break;
}
- int ch = m_pBuf[m_Pos++];
- int type = PDF_CharType[ch];
while (1) {
- while (type == 'W') {
- if (m_Size <= m_Pos) {
- return EndOfData;
- }
- ch = m_pBuf[m_Pos++];
- type = PDF_CharType[ch];
- }
- if (ch != '%') {
- break;
- }
- while (1) {
- if (m_Size <= m_Pos) {
- return EndOfData;
- }
- ch = m_pBuf[m_Pos++];
- if (ch == '\r' || ch == '\n') {
- break;
- }
- }
- type = PDF_CharType[ch];
+ if (m_Size <= m_Pos) {
+ return EndOfData;
+ }
+ ch = m_pBuf[m_Pos++];
+ if (ch == '\r' || ch == '\n') {
+ break;
+ }
+ }
+ type = PDF_CharType[ch];
+ }
+ if (type == 'D' && ch != '/') {
+ m_Pos--;
+ m_pLastObj = ReadNextObject();
+ return Others;
+ }
+ while (1) {
+ if (m_WordSize < MAX_WORD_BUFFER) {
+ m_WordBuffer[m_WordSize++] = ch;
+ }
+ if (type != 'N') {
+ bIsNumber = FALSE;
+ }
+ if (m_Size <= m_Pos) {
+ break;
+ }
+ ch = m_pBuf[m_Pos++];
+ type = PDF_CharType[ch];
+ if (type == 'D' || type == 'W') {
+ m_Pos--;
+ break;
+ }
+ }
+ m_WordBuffer[m_WordSize] = 0;
+ if (bIsNumber) {
+ return Number;
+ }
+ if (m_WordBuffer[0] == '/') {
+ return Name;
+ }
+ if (m_WordSize == 4) {
+ if (*(FX_DWORD*)m_WordBuffer == FXDWORD_TRUE) {
+ m_pLastObj = CPDF_Boolean::Create(TRUE);
+ return Others;
+ }
+ if (*(FX_DWORD*)m_WordBuffer == FXDWORD_NULL) {
+ m_pLastObj = CPDF_Null::Create();
+ return Others;
+ }
+ } else if (m_WordSize == 5) {
+ if (*(FX_DWORD*)m_WordBuffer == FXDWORD_FALS && m_WordBuffer[4] == 'e') {
+ m_pLastObj = CPDF_Boolean::Create(FALSE);
+ return Others;
+ }
+ }
+ return Keyword;
+}
+void CPDF_StreamParser::SkipPathObject() {
+ FX_DWORD command_startpos = m_Pos;
+ if (m_Pos >= m_Size) {
+ return;
+ }
+ int ch = m_pBuf[m_Pos++];
+ int type = PDF_CharType[ch];
+ while (1) {
+ while (type == 'W') {
+ if (m_Pos >= m_Size) {
+ return;
+ }
+ ch = m_pBuf[m_Pos++];
+ type = PDF_CharType[ch];
}
- if (type == 'D' && ch != '/') {
- m_Pos --;
- m_pLastObj = ReadNextObject();
- return Others;
+ if (type != 'N') {
+ m_Pos = command_startpos;
+ return;
}
while (1) {
- if (m_WordSize < MAX_WORD_BUFFER) {
- m_WordBuffer[m_WordSize++] = ch;
- }
- if (type != 'N') {
- bIsNumber = FALSE;
- }
- if (m_Size <= m_Pos) {
- break;
+ while (type != 'W') {
+ if (m_Pos >= m_Size) {
+ return;
}
ch = m_pBuf[m_Pos++];
type = PDF_CharType[ch];
- if (type == 'D' || type == 'W') {
- m_Pos --;
- break;
- }
- }
- m_WordBuffer[m_WordSize] = 0;
- if (bIsNumber) {
- return Number;
- }
- if (m_WordBuffer[0] == '/') {
- return Name;
- }
- if (m_WordSize == 4) {
- if (*(FX_DWORD*)m_WordBuffer == FXDWORD_TRUE) {
- m_pLastObj = CPDF_Boolean::Create(TRUE);
- return Others;
+ }
+ while (type == 'W') {
+ if (m_Pos >= m_Size) {
+ return;
}
- if (*(FX_DWORD*)m_WordBuffer == FXDWORD_NULL) {
- m_pLastObj = CPDF_Null::Create();
- return Others;
- }
- } else if (m_WordSize == 5) {
- if (*(FX_DWORD*)m_WordBuffer == FXDWORD_FALS && m_WordBuffer[4] == 'e') {
- m_pLastObj = CPDF_Boolean::Create(FALSE);
- return Others;
+ ch = m_pBuf[m_Pos++];
+ type = PDF_CharType[ch];
+ }
+ if (type == 'N') {
+ continue;
+ }
+ FX_DWORD op_startpos = m_Pos - 1;
+ while (type != 'W' && type != 'D') {
+ if (m_Pos >= m_Size) {
+ return;
}
- }
- return Keyword;
+ ch = m_pBuf[m_Pos++];
+ type = PDF_CharType[ch];
+ }
+ if (m_Pos - op_startpos == 2) {
+ int op = m_pBuf[op_startpos];
+ if (op == 'm' || op == 'l' || op == 'c' || op == 'v' || op == 'y') {
+ command_startpos = m_Pos;
+ break;
+ }
+ } else if (m_Pos - op_startpos == 3) {
+ if (m_pBuf[op_startpos] == 'r' && m_pBuf[op_startpos + 1] == 'e') {
+ command_startpos = m_Pos;
+ break;
+ }
+ }
+ m_Pos = command_startpos;
+ return;
+ }
+ }
}
-void CPDF_StreamParser::SkipPathObject()
-{
- FX_DWORD command_startpos = m_Pos;
- if (m_Pos >= m_Size) {
- return;
+CPDF_Object* CPDF_StreamParser::ReadNextObject(FX_BOOL bAllowNestedArray,
+ FX_BOOL bInArray) {
+ FX_BOOL bIsNumber;
+ GetNextWord(bIsNumber);
+ if (m_WordSize == 0) {
+ return NULL;
+ }
+ if (bIsNumber) {
+ m_WordBuffer[m_WordSize] = 0;
+ return CPDF_Number::Create(CFX_ByteStringC(m_WordBuffer, m_WordSize));
+ }
+ int first_char = m_WordBuffer[0];
+ if (first_char == '/') {
+ return CPDF_Name::Create(
+ PDF_NameDecode(CFX_ByteStringC(m_WordBuffer + 1, m_WordSize - 1)));
+ }
+ if (first_char == '(') {
+ return CPDF_String::Create(ReadString());
+ }
+ if (first_char == '<') {
+ if (m_WordSize == 1) {
+ return CPDF_String::Create(ReadHexString(), TRUE);
}
- int ch = m_pBuf[m_Pos++];
- int type = PDF_CharType[ch];
+ CPDF_Dictionary* pDict = CPDF_Dictionary::Create();
while (1) {
- while (type == 'W') {
- if (m_Pos >= m_Size) {
- return;
- }
- ch = m_pBuf[m_Pos++];
- type = PDF_CharType[ch];
- }
- if (type != 'N') {
- m_Pos = command_startpos;
- return;
- }
- while (1) {
- while (type != 'W') {
- if (m_Pos >= m_Size) {
- return;
- }
- ch = m_pBuf[m_Pos++];
- type = PDF_CharType[ch];
- }
- while (type == 'W') {
- if (m_Pos >= m_Size) {
- return;
- }
- ch = m_pBuf[m_Pos++];
- type = PDF_CharType[ch];
- }
- if (type == 'N') {
- continue;
- }
- FX_DWORD op_startpos = m_Pos - 1;
- while (type != 'W' && type != 'D') {
- if (m_Pos >= m_Size) {
- return;
- }
- ch = m_pBuf[m_Pos++];
- type = PDF_CharType[ch];
- }
- if (m_Pos - op_startpos == 2) {
- int op = m_pBuf[op_startpos];
- if (op == 'm' || op == 'l' || op == 'c' || op == 'v' || op == 'y') {
- command_startpos = m_Pos;
- break;
- }
- } else if (m_Pos - op_startpos == 3) {
- if (m_pBuf[op_startpos] == 'r' && m_pBuf[op_startpos + 1] == 'e') {
- command_startpos = m_Pos;
- break;
- }
- }
- m_Pos = command_startpos;
- return;
+ GetNextWord(bIsNumber);
+ if (m_WordSize == 0) {
+ pDict->Release();
+ return NULL;
+ }
+ if (m_WordSize == 2 && m_WordBuffer[0] == '>') {
+ break;
+ }
+ if (m_WordBuffer[0] != '/') {
+ pDict->Release();
+ return NULL;
+ }
+ CFX_ByteString key =
+ PDF_NameDecode(CFX_ByteStringC(m_WordBuffer + 1, m_WordSize - 1));
+ CPDF_Object* pObj = ReadNextObject(TRUE);
+ if (pObj == NULL) {
+ if (pDict) {
+ pDict->Release();
}
- }
-}
-CPDF_Object* CPDF_StreamParser::ReadNextObject(FX_BOOL bAllowNestedArray, FX_BOOL bInArray)
-{
- FX_BOOL bIsNumber;
- GetNextWord(bIsNumber);
- if (m_WordSize == 0) {
return NULL;
- }
- if (bIsNumber) {
- m_WordBuffer[m_WordSize] = 0;
- return CPDF_Number::Create(CFX_ByteStringC(m_WordBuffer, m_WordSize));
- }
- int first_char = m_WordBuffer[0];
- if (first_char == '/') {
- return CPDF_Name::Create(PDF_NameDecode(CFX_ByteStringC(m_WordBuffer + 1, m_WordSize - 1)));
- }
- if (first_char == '(') {
- return CPDF_String::Create(ReadString());
- }
- if (first_char == '<') {
- if (m_WordSize == 1) {
- return CPDF_String::Create(ReadHexString(), TRUE);
+ }
+ if (!key.IsEmpty()) {
+ pDict->SetAt(key, pObj);
+ } else {
+ pObj->Release();
+ }
+ }
+ return pDict;
+ }
+ if (first_char == '[') {
+ if (!bAllowNestedArray && bInArray) {
+ return NULL;
+ }
+ CPDF_Array* pArray = CPDF_Array::Create();
+ while (1) {
+ CPDF_Object* pObj = ReadNextObject(bAllowNestedArray, TRUE);
+ if (pObj == NULL) {
+ if (m_WordSize == 0 || m_WordBuffer[0] == ']') {
+ return pArray;
}
- CPDF_Dictionary* pDict = CPDF_Dictionary::Create();
- while (1) {
- GetNextWord(bIsNumber);
- if (m_WordSize == 0) {
- pDict->Release();
- return NULL;
- }
- if (m_WordSize == 2 && m_WordBuffer[0] == '>') {
- break;
- }
- if (m_WordBuffer[0] != '/') {
- pDict->Release();
- return NULL;
- }
- CFX_ByteString key = PDF_NameDecode(CFX_ByteStringC(m_WordBuffer + 1, m_WordSize - 1));
- CPDF_Object* pObj = ReadNextObject(TRUE);
- if (pObj == NULL) {
- if (pDict) {
- pDict->Release();
- }
- return NULL;
- }
- if (!key.IsEmpty()) {
- pDict->SetAt(key, pObj);
- } else {
- pObj->Release();
- }
+ if (m_WordBuffer[0] == '[') {
+ continue;
}
- return pDict;
+ } else {
+ pArray->Add(pObj);
+ }
}
- if (first_char == '[') {
- if (!bAllowNestedArray && bInArray) {
- return NULL;
- }
- CPDF_Array* pArray = CPDF_Array::Create();
- while (1) {
- CPDF_Object* pObj = ReadNextObject(bAllowNestedArray, TRUE);
- if (pObj == NULL) {
- if (m_WordSize == 0 || m_WordBuffer[0] == ']') {
- return pArray;
- }
- if (m_WordBuffer[0] == '[') {
- continue;
- }
- } else {
- pArray->Add(pObj);
- }
- }
+ }
+ if (m_WordSize == 4) {
+ if (*(FX_DWORD*)m_WordBuffer == FXDWORD_TRUE) {
+ return CPDF_Boolean::Create(TRUE);
}
- if (m_WordSize == 4) {
- if (*(FX_DWORD*)m_WordBuffer == FXDWORD_TRUE) {
- return CPDF_Boolean::Create(TRUE);
- }
- if (*(FX_DWORD*)m_WordBuffer == FXDWORD_NULL) {
- return CPDF_Null::Create();
- }
- } else if (m_WordSize == 5) {
- if (*(FX_DWORD*)m_WordBuffer == FXDWORD_FALS && m_WordBuffer[4] == 'e') {
- return CPDF_Boolean::Create(FALSE);
- }
+ if (*(FX_DWORD*)m_WordBuffer == FXDWORD_NULL) {
+ return CPDF_Null::Create();
}
- return NULL;
+ } else if (m_WordSize == 5) {
+ if (*(FX_DWORD*)m_WordBuffer == FXDWORD_FALS && m_WordBuffer[4] == 'e') {
+ return CPDF_Boolean::Create(FALSE);
+ }
+ }
+ return NULL;
}
-void CPDF_StreamParser::GetNextWord(FX_BOOL& bIsNumber)
-{
- m_WordSize = 0;
- bIsNumber = TRUE;
- if (m_Size <= m_Pos) {
+void CPDF_StreamParser::GetNextWord(FX_BOOL& bIsNumber) {
+ m_WordSize = 0;
+ bIsNumber = TRUE;
+ if (m_Size <= m_Pos) {
+ return;
+ }
+ int ch = m_pBuf[m_Pos++];
+ int type = PDF_CharType[ch];
+ while (1) {
+ while (type == 'W') {
+ if (m_Size <= m_Pos) {
return;
+ }
+ ch = m_pBuf[m_Pos++];
+ type = PDF_CharType[ch];
}
- int ch = m_pBuf[m_Pos++];
- int type = PDF_CharType[ch];
- while (1) {
- while (type == 'W') {
- if (m_Size <= m_Pos) {
- return;
- }
- ch = m_pBuf[m_Pos++];
- type = PDF_CharType[ch];
- }
- if (ch != '%') {
- break;
- }
- while (1) {
- if (m_Size <= m_Pos) {
- return;
- }
- ch = m_pBuf[m_Pos++];
- if (ch == '\r' || ch == '\n') {
- break;
- }
- }
- type = PDF_CharType[ch];
- }
- if (type == 'D') {
- bIsNumber = FALSE;
- m_WordBuffer[m_WordSize++] = ch;
- if (ch == '/') {
- while (1) {
- if (m_Size <= m_Pos) {
- return;
- }
- ch = m_pBuf[m_Pos++];
- type = PDF_CharType[ch];
- if (type != 'R' && type != 'N') {
- m_Pos --;
- return;
- }
- if (m_WordSize < MAX_WORD_BUFFER) {
- m_WordBuffer[m_WordSize++] = ch;
- }
- }
- } else if (ch == '<') {
- if (m_Size <= m_Pos) {
- return;
- }
- ch = m_pBuf[m_Pos++];
- if (ch == '<') {
- m_WordBuffer[m_WordSize++] = ch;
- } else {
- m_Pos --;
- }
- } else if (ch == '>') {
- if (m_Size <= m_Pos) {
- return;
- }
- ch = m_pBuf[m_Pos++];
- if (ch == '>') {
- m_WordBuffer[m_WordSize++] = ch;
- } else {
- m_Pos --;
- }
- }
- return;
+ if (ch != '%') {
+ break;
}
while (1) {
- if (m_WordSize < MAX_WORD_BUFFER) {
- m_WordBuffer[m_WordSize++] = ch;
- }
- if (type != 'N') {
- bIsNumber = FALSE;
- }
+ if (m_Size <= m_Pos) {
+ return;
+ }
+ ch = m_pBuf[m_Pos++];
+ if (ch == '\r' || ch == '\n') {
+ break;
+ }
+ }
+ type = PDF_CharType[ch];
+ }
+ if (type == 'D') {
+ bIsNumber = FALSE;
+ m_WordBuffer[m_WordSize++] = ch;
+ if (ch == '/') {
+ while (1) {
if (m_Size <= m_Pos) {
- return;
+ return;
}
ch = m_pBuf[m_Pos++];
type = PDF_CharType[ch];
- if (type == 'D' || type == 'W') {
- m_Pos --;
- break;
+ if (type != 'R' && type != 'N') {
+ m_Pos--;
+ return;
}
- }
-}
-CFX_ByteString CPDF_StreamParser::ReadString()
-{
- if (m_Size <= m_Pos) {
- return CFX_ByteString();
- }
- int ch = m_pBuf[m_Pos++];
- CFX_ByteTextBuf buf;
- int parlevel = 0;
- int status = 0, iEscCode = 0;
- while (1) {
- switch (status) {
- case 0:
- if (ch == ')') {
- if (parlevel == 0) {
- if (buf.GetLength() > MAX_STRING_LENGTH) {
- return CFX_ByteString(buf.GetBuffer(), MAX_STRING_LENGTH);
- }
- return buf.GetByteString();
- }
- parlevel --;
- buf.AppendChar(')');
- } else if (ch == '(') {
- parlevel ++;
- buf.AppendChar('(');
- } else if (ch == '\\') {
- status = 1;
- } else {
- buf.AppendChar((char)ch);
- }
- break;
- case 1:
- if (ch >= '0' && ch <= '7') {
- iEscCode = ch - '0';
- status = 2;
- break;
- }
- if (ch == 'n') {
- buf.AppendChar('\n');
- } else if (ch == 'r') {
- buf.AppendChar('\r');
- } else if (ch == 't') {
- buf.AppendChar('\t');
- } else if (ch == 'b') {
- buf.AppendChar('\b');
- } else if (ch == 'f') {
- buf.AppendChar('\f');
- } else if (ch == '\r') {
- status = 4;
- break;
- } else if (ch == '\n') {
- } else {
- buf.AppendChar(ch);
- }
- status = 0;
- break;
- case 2:
- if (ch >= '0' && ch <= '7') {
- iEscCode = iEscCode * 8 + ch - '0';
- status = 3;
- } else {
- buf.AppendChar(iEscCode);
- status = 0;
- continue;
- }
- break;
- case 3:
- if (ch >= '0' && ch <= '7') {
- iEscCode = iEscCode * 8 + ch - '0';
- buf.AppendChar(iEscCode);
- status = 0;
- } else {
- buf.AppendChar(iEscCode);
- status = 0;
- continue;
- }
- break;
- case 4:
- status = 0;
- if (ch != '\n') {
- continue;
- }
- break;
- }
- if (m_Size <= m_Pos) {
- break;
+ if (m_WordSize < MAX_WORD_BUFFER) {
+ m_WordBuffer[m_WordSize++] = ch;
}
- ch = m_pBuf[m_Pos++];
+ }
+ } else if (ch == '<') {
+ if (m_Size <= m_Pos) {
+ return;
+ }
+ ch = m_pBuf[m_Pos++];
+ if (ch == '<') {
+ m_WordBuffer[m_WordSize++] = ch;
+ } else {
+ m_Pos--;
+ }
+ } else if (ch == '>') {
+ if (m_Size <= m_Pos) {
+ return;
+ }
+ ch = m_pBuf[m_Pos++];
+ if (ch == '>') {
+ m_WordBuffer[m_WordSize++] = ch;
+ } else {
+ m_Pos--;
+ }
}
- if (m_Size > m_Pos) {
- ch = m_pBuf[m_Pos++];
+ return;
+ }
+ while (1) {
+ if (m_WordSize < MAX_WORD_BUFFER) {
+ m_WordBuffer[m_WordSize++] = ch;
}
- if (buf.GetLength() > MAX_STRING_LENGTH) {
- return CFX_ByteString(buf.GetBuffer(), MAX_STRING_LENGTH);
+ if (type != 'N') {
+ bIsNumber = FALSE;
}
- return buf.GetByteString();
-}
-CFX_ByteString CPDF_StreamParser::ReadHexString()
-{
if (m_Size <= m_Pos) {
- return CFX_ByteString();
+ return;
}
- int ch = m_pBuf[m_Pos++];
- CFX_ByteTextBuf buf;
- FX_BOOL bFirst = TRUE;
- int code = 0;
- while (1) {
- if (ch == '>') {
- break;
- }
- if (ch >= '0' && ch <= '9') {
- if (bFirst) {
- code = (ch - '0') * 16;
- } else {
- code += ch - '0';
- buf.AppendChar((char)code);
- }
- bFirst = !bFirst;
- } else if (ch >= 'A' && ch <= 'F') {
- if (bFirst) {
- code = (ch - 'A' + 10) * 16;
- } else {
- code += ch - 'A' + 10;
- buf.AppendChar((char)code);
- }
- bFirst = !bFirst;
- } else if (ch >= 'a' && ch <= 'f') {
- if (bFirst) {
- code = (ch - 'a' + 10) * 16;
- } else {
- code += ch - 'a' + 10;
- buf.AppendChar((char)code);
+ ch = m_pBuf[m_Pos++];
+ type = PDF_CharType[ch];
+ if (type == 'D' || type == 'W') {
+ m_Pos--;
+ break;
+ }
+ }
+}
+CFX_ByteString CPDF_StreamParser::ReadString() {
+ if (m_Size <= m_Pos) {
+ return CFX_ByteString();
+ }
+ int ch = m_pBuf[m_Pos++];
+ CFX_ByteTextBuf buf;
+ int parlevel = 0;
+ int status = 0, iEscCode = 0;
+ while (1) {
+ switch (status) {
+ case 0:
+ if (ch == ')') {
+ if (parlevel == 0) {
+ if (buf.GetLength() > MAX_STRING_LENGTH) {
+ return CFX_ByteString(buf.GetBuffer(), MAX_STRING_LENGTH);
}
- bFirst = !bFirst;
+ return buf.GetByteString();
+ }
+ parlevel--;
+ buf.AppendChar(')');
+ } else if (ch == '(') {
+ parlevel++;
+ buf.AppendChar('(');
+ } else if (ch == '\\') {
+ status = 1;
+ } else {
+ buf.AppendChar((char)ch);
+ }
+ break;
+ case 1:
+ if (ch >= '0' && ch <= '7') {
+ iEscCode = ch - '0';
+ status = 2;
+ break;
+ }
+ if (ch == 'n') {
+ buf.AppendChar('\n');
+ } else if (ch == 'r') {
+ buf.AppendChar('\r');
+ } else if (ch == 't') {
+ buf.AppendChar('\t');
+ } else if (ch == 'b') {
+ buf.AppendChar('\b');
+ } else if (ch == 'f') {
+ buf.AppendChar('\f');
+ } else if (ch == '\r') {
+ status = 4;
+ break;
+ } else if (ch == '\n') {
+ } else {
+ buf.AppendChar(ch);
+ }
+ status = 0;
+ break;
+ case 2:
+ if (ch >= '0' && ch <= '7') {
+ iEscCode = iEscCode * 8 + ch - '0';
+ status = 3;
+ } else {
+ buf.AppendChar(iEscCode);
+ status = 0;
+ continue;
+ }
+ break;
+ case 3:
+ if (ch >= '0' && ch <= '7') {
+ iEscCode = iEscCode * 8 + ch - '0';
+ buf.AppendChar(iEscCode);
+ status = 0;
+ } else {
+ buf.AppendChar(iEscCode);
+ status = 0;
+ continue;
}
- if (m_Size <= m_Pos) {
- break;
+ break;
+ case 4:
+ status = 0;
+ if (ch != '\n') {
+ continue;
}
- ch = m_pBuf[m_Pos++];
+ break;
}
- if (!bFirst) {
+ if (m_Size <= m_Pos) {
+ break;
+ }
+ ch = m_pBuf[m_Pos++];
+ }
+ if (m_Size > m_Pos) {
+ ch = m_pBuf[m_Pos++];
+ }
+ if (buf.GetLength() > MAX_STRING_LENGTH) {
+ return CFX_ByteString(buf.GetBuffer(), MAX_STRING_LENGTH);
+ }
+ return buf.GetByteString();
+}
+CFX_ByteString CPDF_StreamParser::ReadHexString() {
+ if (m_Size <= m_Pos) {
+ return CFX_ByteString();
+ }
+ int ch = m_pBuf[m_Pos++];
+ CFX_ByteTextBuf buf;
+ FX_BOOL bFirst = TRUE;
+ int code = 0;
+ while (1) {
+ if (ch == '>') {
+ break;
+ }
+ if (ch >= '0' && ch <= '9') {
+ if (bFirst) {
+ code = (ch - '0') * 16;
+ } else {
+ code += ch - '0';
buf.AppendChar((char)code);
+ }
+ bFirst = !bFirst;
+ } else if (ch >= 'A' && ch <= 'F') {
+ if (bFirst) {
+ code = (ch - 'A' + 10) * 16;
+ } else {
+ code += ch - 'A' + 10;
+ buf.AppendChar((char)code);
+ }
+ bFirst = !bFirst;
+ } else if (ch >= 'a' && ch <= 'f') {
+ if (bFirst) {
+ code = (ch - 'a' + 10) * 16;
+ } else {
+ code += ch - 'a' + 10;
+ buf.AppendChar((char)code);
+ }
+ bFirst = !bFirst;
}
- if (buf.GetLength() > MAX_STRING_LENGTH) {
- return CFX_ByteString(buf.GetBuffer(), MAX_STRING_LENGTH);
- }
- return buf.GetByteString();
-}
-#define PAGEPARSE_STAGE_GETCONTENT 1
-#define PAGEPARSE_STAGE_PARSE 2
-#define PAGEPARSE_STAGE_CHECKCLIP 3
-CPDF_ContentParser::CPDF_ContentParser()
-{
- m_pParser = NULL;
- m_pStreamArray = NULL;
- m_pSingleStream = NULL;
- m_pData = NULL;
- m_Status = Ready;
- m_pType3Char = NULL;
+ if (m_Size <= m_Pos) {
+ break;
+ }
+ ch = m_pBuf[m_Pos++];
+ }
+ if (!bFirst) {
+ buf.AppendChar((char)code);
+ }
+ if (buf.GetLength() > MAX_STRING_LENGTH) {
+ return CFX_ByteString(buf.GetBuffer(), MAX_STRING_LENGTH);
+ }
+ return buf.GetByteString();
}
-CPDF_ContentParser::~CPDF_ContentParser()
-{
- Clear();
+#define PAGEPARSE_STAGE_GETCONTENT 1
+#define PAGEPARSE_STAGE_PARSE 2
+#define PAGEPARSE_STAGE_CHECKCLIP 3
+CPDF_ContentParser::CPDF_ContentParser() {
+ m_pParser = NULL;
+ m_pStreamArray = NULL;
+ m_pSingleStream = NULL;
+ m_pData = NULL;
+ m_Status = Ready;
+ m_pType3Char = NULL;
}
-void CPDF_ContentParser::Clear()
-{
- delete m_pParser;
- delete m_pSingleStream;
- if (m_pStreamArray) {
- for (FX_DWORD i = 0; i < m_nStreams; i ++)
- delete m_pStreamArray[i];
- FX_Free(m_pStreamArray);
- }
- if (m_pData && m_pSingleStream == NULL) {
- FX_Free((void*)m_pData);
- }
- m_pParser = NULL;
- m_pStreamArray = NULL;
- m_pSingleStream = NULL;
- m_pData = NULL;
- m_Status = Ready;
+CPDF_ContentParser::~CPDF_ContentParser() {
+ Clear();
}
-void CPDF_ContentParser::Start(CPDF_Page* pPage, CPDF_ParseOptions* pOptions)
-{
- if (m_Status != Ready || pPage == NULL || pPage->m_pDocument == NULL || pPage->m_pFormDict == NULL) {
- m_Status = Done;
- return;
- }
- m_pObjects = pPage;
- m_bForm = FALSE;
- if (pOptions) {
- m_Options = *pOptions;
- }
- m_Status = ToBeContinued;
- m_InternalStage = PAGEPARSE_STAGE_GETCONTENT;
- m_CurrentOffset = 0;
- CPDF_Object* pContent = pPage->m_pFormDict->GetElementValue(FX_BSTRC("Contents"));
- if (pContent == NULL) {
- m_Status = Done;
- return;
- }
- if (pContent->GetType() == PDFOBJ_STREAM) {
- m_nStreams = 0;
- m_pSingleStream = new CPDF_StreamAcc;
- m_pSingleStream->LoadAllData((CPDF_Stream*)pContent, FALSE);
- } else if (pContent->GetType() == PDFOBJ_ARRAY) {
- CPDF_Array* pArray = (CPDF_Array*)pContent;
- m_nStreams = pArray->GetCount();
- if (m_nStreams == 0) {
- m_Status = Done;
- return;
- }
- m_pStreamArray = FX_Alloc(CPDF_StreamAcc*, m_nStreams);
- } else {
- m_Status = Done;
- return;
- }
+void CPDF_ContentParser::Clear() {
+ delete m_pParser;
+ delete m_pSingleStream;
+ if (m_pStreamArray) {
+ for (FX_DWORD i = 0; i < m_nStreams; i++)
+ delete m_pStreamArray[i];
+ FX_Free(m_pStreamArray);
+ }
+ if (m_pData && m_pSingleStream == NULL) {
+ FX_Free((void*)m_pData);
+ }
+ m_pParser = NULL;
+ m_pStreamArray = NULL;
+ m_pSingleStream = NULL;
+ m_pData = NULL;
+ m_Status = Ready;
}
-void CPDF_ContentParser::Start(CPDF_Form* pForm, CPDF_AllStates* pGraphicStates,
- CFX_AffineMatrix* pParentMatrix, CPDF_Type3Char* pType3Char, CPDF_ParseOptions* pOptions, int level)
-{
- m_pType3Char = pType3Char;
- m_pObjects = pForm;
- m_bForm = TRUE;
- CFX_AffineMatrix form_matrix = pForm->m_pFormDict->GetMatrix(FX_BSTRC("Matrix"));
- if (pGraphicStates) {
- form_matrix.Concat(pGraphicStates->m_CTM);
- }
- CPDF_Array* pBBox = pForm->m_pFormDict->GetArray(FX_BSTRC("BBox"));
- CFX_FloatRect form_bbox;
- CPDF_Path ClipPath;
- if (pBBox) {
- form_bbox = pBBox->GetRect();
- ClipPath.New();
- ClipPath.AppendRect(form_bbox.left, form_bbox.bottom, form_bbox.right, form_bbox.top);
- ClipPath.Transform(&form_matrix);
- if (pParentMatrix) {
- ClipPath.Transform(pParentMatrix);
- }
- form_bbox.Transform(&form_matrix);
- if (pParentMatrix) {
- form_bbox.Transform(pParentMatrix);
- }
- }
- CPDF_Dictionary* pResources = pForm->m_pFormDict->GetDict(FX_BSTRC("Resources"));
- m_pParser = new CPDF_StreamContentParser(
- pForm->m_pDocument, pForm->m_pPageResources, pForm->m_pResources,
- pParentMatrix, pForm, pResources, &form_bbox, pOptions, pGraphicStates,
- level);
-
- m_pParser->GetCurStates()->m_CTM = form_matrix;
- m_pParser->GetCurStates()->m_ParentMatrix = form_matrix;
- if (ClipPath.NotNull()) {
- m_pParser->GetCurStates()->m_ClipPath.AppendPath(ClipPath, FXFILL_WINDING, TRUE);
- }
- if (pForm->m_Transparency & PDFTRANS_GROUP) {
- CPDF_GeneralStateData* pData = m_pParser->GetCurStates()->m_GeneralState.GetModify();
- pData->m_BlendType = FXDIB_BLEND_NORMAL;
- pData->m_StrokeAlpha = 1.0f;
- pData->m_FillAlpha = 1.0f;
- pData->m_pSoftMask = NULL;
- }
+void CPDF_ContentParser::Start(CPDF_Page* pPage, CPDF_ParseOptions* pOptions) {
+ if (m_Status != Ready || pPage == NULL || pPage->m_pDocument == NULL ||
+ pPage->m_pFormDict == NULL) {
+ m_Status = Done;
+ return;
+ }
+ m_pObjects = pPage;
+ m_bForm = FALSE;
+ if (pOptions) {
+ m_Options = *pOptions;
+ }
+ m_Status = ToBeContinued;
+ m_InternalStage = PAGEPARSE_STAGE_GETCONTENT;
+ m_CurrentOffset = 0;
+ CPDF_Object* pContent =
+ pPage->m_pFormDict->GetElementValue(FX_BSTRC("Contents"));
+ if (pContent == NULL) {
+ m_Status = Done;
+ return;
+ }
+ if (pContent->GetType() == PDFOBJ_STREAM) {
m_nStreams = 0;
m_pSingleStream = new CPDF_StreamAcc;
- if (pForm->m_pDocument) {
- m_pSingleStream->LoadAllData(pForm->m_pFormStream, FALSE);
- } else {
- m_pSingleStream->LoadAllData(pForm->m_pFormStream, FALSE);
- }
- m_pData = (uint8_t*)m_pSingleStream->GetData();
- m_Size = m_pSingleStream->GetSize();
- m_Status = ToBeContinued;
- m_InternalStage = PAGEPARSE_STAGE_PARSE;
- m_CurrentOffset = 0;
+ m_pSingleStream->LoadAllData((CPDF_Stream*)pContent, FALSE);
+ } else if (pContent->GetType() == PDFOBJ_ARRAY) {
+ CPDF_Array* pArray = (CPDF_Array*)pContent;
+ m_nStreams = pArray->GetCount();
+ if (m_nStreams == 0) {
+ m_Status = Done;
+ return;
+ }
+ m_pStreamArray = FX_Alloc(CPDF_StreamAcc*, m_nStreams);
+ } else {
+ m_Status = Done;
+ return;
+ }
}
-void CPDF_ContentParser::Continue(IFX_Pause* pPause)
-{
- int steps = 0;
- while (m_Status == ToBeContinued) {
- if (m_InternalStage == PAGEPARSE_STAGE_GETCONTENT) {
- if (m_CurrentOffset == m_nStreams) {
- if (m_pStreamArray) {
- m_Size = 0;
- FX_DWORD i;
- for (i = 0; i < m_nStreams; i ++) {
- FX_DWORD size = m_pStreamArray[i]->GetSize();
- if (m_Size + size + 1 <= m_Size) {
- m_Status = Done;
- return;
- }
- m_Size += size + 1;
- }
- m_pData = FX_Alloc(uint8_t, m_Size);
- FX_DWORD pos = 0;
- for (i = 0; i < m_nStreams; i ++) {
- FXSYS_memcpy(m_pData + pos, m_pStreamArray[i]->GetData(), m_pStreamArray[i]->GetSize());
- pos += m_pStreamArray[i]->GetSize() + 1;
- m_pData[pos - 1] = ' ';
- delete m_pStreamArray[i];
- }
- FX_Free(m_pStreamArray);
- m_pStreamArray = NULL;
- } else {
- m_pData = (uint8_t*)m_pSingleStream->GetData();
- m_Size = m_pSingleStream->GetSize();
- }
- m_InternalStage = PAGEPARSE_STAGE_PARSE;
- m_CurrentOffset = 0;
- } else {
- CPDF_Array* pContent = m_pObjects->m_pFormDict->GetArray(FX_BSTRC("Contents"));
- m_pStreamArray[m_CurrentOffset] = new CPDF_StreamAcc;
- CPDF_Stream* pStreamObj = (CPDF_Stream*)(pContent ? pContent->GetElementValue(m_CurrentOffset) : NULL);
- m_pStreamArray[m_CurrentOffset]->LoadAllData(pStreamObj, FALSE);
- m_CurrentOffset ++;
- }
- }
- if (m_InternalStage == PAGEPARSE_STAGE_PARSE) {
- if (!m_pParser) {
- m_pParser = new CPDF_StreamContentParser(
- m_pObjects->m_pDocument, m_pObjects->m_pPageResources,
- nullptr, nullptr, m_pObjects, m_pObjects->m_pResources,
- &m_pObjects->m_BBox, &m_Options, nullptr, 0);
- m_pParser->GetCurStates()->m_ColorState.GetModify()->Default();
- }
- if (m_CurrentOffset >= m_Size) {
- m_InternalStage = PAGEPARSE_STAGE_CHECKCLIP;
- } else {
- m_CurrentOffset += m_pParser->Parse(m_pData + m_CurrentOffset, m_Size - m_CurrentOffset, PARSE_STEP_LIMIT);
- if (m_pParser->ShouldAbort()) {
- m_InternalStage = PAGEPARSE_STAGE_CHECKCLIP;
- continue;
- }
- }
- }
- if (m_InternalStage == PAGEPARSE_STAGE_CHECKCLIP) {
- if (m_pType3Char) {
- m_pType3Char->m_bColored = m_pParser->IsColored();
- m_pType3Char->m_Width = FXSYS_round(m_pParser->GetType3Data()[0] * 1000);
- m_pType3Char->m_BBox.left = FXSYS_round(m_pParser->GetType3Data()[2] * 1000);
- m_pType3Char->m_BBox.bottom = FXSYS_round(m_pParser->GetType3Data()[3] * 1000);
- m_pType3Char->m_BBox.right = FXSYS_round(m_pParser->GetType3Data()[4] * 1000);
- m_pType3Char->m_BBox.top = FXSYS_round(m_pParser->GetType3Data()[5] * 1000);
- }
- FX_POSITION pos = m_pObjects->m_ObjectList.GetHeadPosition();
- while (pos) {
- CPDF_PageObject* pObj = (CPDF_PageObject*)m_pObjects->m_ObjectList.GetNext(pos);
- if (pObj->m_ClipPath.IsNull()) {
- continue;
- }
- if (pObj->m_ClipPath.GetPathCount() != 1) {
- continue;
- }
- if (pObj->m_ClipPath.GetTextCount()) {
- continue;
- }
- CPDF_Path ClipPath = pObj->m_ClipPath.GetPath(0);
- if (!ClipPath.IsRect() || pObj->m_Type == PDFPAGE_SHADING) {
- continue;
- }
- CFX_FloatRect old_rect(ClipPath.GetPointX(0), ClipPath.GetPointY(0),
- ClipPath.GetPointX(2), ClipPath.GetPointY(2));
- CFX_FloatRect obj_rect(pObj->m_Left, pObj->m_Bottom, pObj->m_Right, pObj->m_Top);
- if (old_rect.Contains(obj_rect)) {
- pObj->m_ClipPath.SetNull();
- }
+void CPDF_ContentParser::Start(CPDF_Form* pForm,
+ CPDF_AllStates* pGraphicStates,
+ CFX_AffineMatrix* pParentMatrix,
+ CPDF_Type3Char* pType3Char,
+ CPDF_ParseOptions* pOptions,
+ int level) {
+ m_pType3Char = pType3Char;
+ m_pObjects = pForm;
+ m_bForm = TRUE;
+ CFX_AffineMatrix form_matrix =
+ pForm->m_pFormDict->GetMatrix(FX_BSTRC("Matrix"));
+ if (pGraphicStates) {
+ form_matrix.Concat(pGraphicStates->m_CTM);
+ }
+ CPDF_Array* pBBox = pForm->m_pFormDict->GetArray(FX_BSTRC("BBox"));
+ CFX_FloatRect form_bbox;
+ CPDF_Path ClipPath;
+ if (pBBox) {
+ form_bbox = pBBox->GetRect();
+ ClipPath.New();
+ ClipPath.AppendRect(form_bbox.left, form_bbox.bottom, form_bbox.right,
+ form_bbox.top);
+ ClipPath.Transform(&form_matrix);
+ if (pParentMatrix) {
+ ClipPath.Transform(pParentMatrix);
+ }
+ form_bbox.Transform(&form_matrix);
+ if (pParentMatrix) {
+ form_bbox.Transform(pParentMatrix);
+ }
+ }
+ CPDF_Dictionary* pResources =
+ pForm->m_pFormDict->GetDict(FX_BSTRC("Resources"));
+ m_pParser = new CPDF_StreamContentParser(
+ pForm->m_pDocument, pForm->m_pPageResources, pForm->m_pResources,
+ pParentMatrix, pForm, pResources, &form_bbox, pOptions, pGraphicStates,
+ level);
+
+ m_pParser->GetCurStates()->m_CTM = form_matrix;
+ m_pParser->GetCurStates()->m_ParentMatrix = form_matrix;
+ if (ClipPath.NotNull()) {
+ m_pParser->GetCurStates()->m_ClipPath.AppendPath(ClipPath, FXFILL_WINDING,
+ TRUE);
+ }
+ if (pForm->m_Transparency & PDFTRANS_GROUP) {
+ CPDF_GeneralStateData* pData =
+ m_pParser->GetCurStates()->m_GeneralState.GetModify();
+ pData->m_BlendType = FXDIB_BLEND_NORMAL;
+ pData->m_StrokeAlpha = 1.0f;
+ pData->m_FillAlpha = 1.0f;
+ pData->m_pSoftMask = NULL;
+ }
+ m_nStreams = 0;
+ m_pSingleStream = new CPDF_StreamAcc;
+ if (pForm->m_pDocument) {
+ m_pSingleStream->LoadAllData(pForm->m_pFormStream, FALSE);
+ } else {
+ m_pSingleStream->LoadAllData(pForm->m_pFormStream, FALSE);
+ }
+ m_pData = (uint8_t*)m_pSingleStream->GetData();
+ m_Size = m_pSingleStream->GetSize();
+ m_Status = ToBeContinued;
+ m_InternalStage = PAGEPARSE_STAGE_PARSE;
+ m_CurrentOffset = 0;
+}
+void CPDF_ContentParser::Continue(IFX_Pause* pPause) {
+ int steps = 0;
+ while (m_Status == ToBeContinued) {
+ if (m_InternalStage == PAGEPARSE_STAGE_GETCONTENT) {
+ if (m_CurrentOffset == m_nStreams) {
+ if (m_pStreamArray) {
+ m_Size = 0;
+ FX_DWORD i;
+ for (i = 0; i < m_nStreams; i++) {
+ FX_DWORD size = m_pStreamArray[i]->GetSize();
+ if (m_Size + size + 1 <= m_Size) {
+ m_Status = Done;
+ return;
}
- m_Status = Done;
- return;
- }
- steps ++;
- if (pPause && pPause->NeedToPauseNow()) {
- break;
- }
- }
+ m_Size += size + 1;
+ }
+ m_pData = FX_Alloc(uint8_t, m_Size);
+ FX_DWORD pos = 0;
+ for (i = 0; i < m_nStreams; i++) {
+ FXSYS_memcpy(m_pData + pos, m_pStreamArray[i]->GetData(),
+ m_pStreamArray[i]->GetSize());
+ pos += m_pStreamArray[i]->GetSize() + 1;
+ m_pData[pos - 1] = ' ';
+ delete m_pStreamArray[i];
+ }
+ FX_Free(m_pStreamArray);
+ m_pStreamArray = NULL;
+ } else {
+ m_pData = (uint8_t*)m_pSingleStream->GetData();
+ m_Size = m_pSingleStream->GetSize();
+ }
+ m_InternalStage = PAGEPARSE_STAGE_PARSE;
+ m_CurrentOffset = 0;
+ } else {
+ CPDF_Array* pContent =
+ m_pObjects->m_pFormDict->GetArray(FX_BSTRC("Contents"));
+ m_pStreamArray[m_CurrentOffset] = new CPDF_StreamAcc;
+ CPDF_Stream* pStreamObj =
+ (CPDF_Stream*)(pContent ? pContent->GetElementValue(m_CurrentOffset)
+ : NULL);
+ m_pStreamArray[m_CurrentOffset]->LoadAllData(pStreamObj, FALSE);
+ m_CurrentOffset++;
+ }
+ }
+ if (m_InternalStage == PAGEPARSE_STAGE_PARSE) {
+ if (!m_pParser) {
+ m_pParser = new CPDF_StreamContentParser(
+ m_pObjects->m_pDocument, m_pObjects->m_pPageResources, nullptr,
+ nullptr, m_pObjects, m_pObjects->m_pResources, &m_pObjects->m_BBox,
+ &m_Options, nullptr, 0);
+ m_pParser->GetCurStates()->m_ColorState.GetModify()->Default();
+ }
+ if (m_CurrentOffset >= m_Size) {
+ m_InternalStage = PAGEPARSE_STAGE_CHECKCLIP;
+ } else {
+ m_CurrentOffset +=
+ m_pParser->Parse(m_pData + m_CurrentOffset,
+ m_Size - m_CurrentOffset, PARSE_STEP_LIMIT);
+ if (m_pParser->ShouldAbort()) {
+ m_InternalStage = PAGEPARSE_STAGE_CHECKCLIP;
+ continue;
+ }
+ }
+ }
+ if (m_InternalStage == PAGEPARSE_STAGE_CHECKCLIP) {
+ if (m_pType3Char) {
+ m_pType3Char->m_bColored = m_pParser->IsColored();
+ m_pType3Char->m_Width =
+ FXSYS_round(m_pParser->GetType3Data()[0] * 1000);
+ m_pType3Char->m_BBox.left =
+ FXSYS_round(m_pParser->GetType3Data()[2] * 1000);
+ m_pType3Char->m_BBox.bottom =
+ FXSYS_round(m_pParser->GetType3Data()[3] * 1000);
+ m_pType3Char->m_BBox.right =
+ FXSYS_round(m_pParser->GetType3Data()[4] * 1000);
+ m_pType3Char->m_BBox.top =
+ FXSYS_round(m_pParser->GetType3Data()[5] * 1000);
+ }
+ FX_POSITION pos = m_pObjects->m_ObjectList.GetHeadPosition();
+ while (pos) {
+ CPDF_PageObject* pObj =
+ (CPDF_PageObject*)m_pObjects->m_ObjectList.GetNext(pos);
+ if (pObj->m_ClipPath.IsNull()) {
+ continue;
+ }
+ if (pObj->m_ClipPath.GetPathCount() != 1) {
+ continue;
+ }
+ if (pObj->m_ClipPath.GetTextCount()) {
+ continue;
+ }
+ CPDF_Path ClipPath = pObj->m_ClipPath.GetPath(0);
+ if (!ClipPath.IsRect() || pObj->m_Type == PDFPAGE_SHADING) {
+ continue;
+ }
+ CFX_FloatRect old_rect(ClipPath.GetPointX(0), ClipPath.GetPointY(0),
+ ClipPath.GetPointX(2), ClipPath.GetPointY(2));
+ CFX_FloatRect obj_rect(pObj->m_Left, pObj->m_Bottom, pObj->m_Right,
+ pObj->m_Top);
+ if (old_rect.Contains(obj_rect)) {
+ pObj->m_ClipPath.SetNull();
+ }
+ }
+ m_Status = Done;
+ return;
+ }
+ steps++;
+ if (pPause && pPause->NeedToPauseNow()) {
+ break;
+ }
+ }
}
diff --git a/core/src/fpdfapi/fpdf_page/fpdf_page_path.cpp b/core/src/fpdfapi/fpdf_page/fpdf_page_path.cpp
index 90a508eab3..81b69bcb24 100644
--- a/core/src/fpdfapi/fpdf_page/fpdf_page_path.cpp
+++ b/core/src/fpdfapi/fpdf_page/fpdf_page_path.cpp
@@ -8,45 +8,41 @@
#include "../../../include/fpdfapi/fpdf_pageobj.h"
#include "../../../include/fpdfapi/fpdf_module.h"
#include "pageint.h"
-void CPDF_PathObject::CopyData(const CPDF_PageObject* pSrc)
-{
- const CPDF_PathObject* pSrcObj = (const CPDF_PathObject*)pSrc;
- m_Path = pSrcObj->m_Path;
- m_FillType = pSrcObj->m_FillType;
- m_bStroke = pSrcObj->m_bStroke;
- m_Matrix = pSrcObj->m_Matrix;
+void CPDF_PathObject::CopyData(const CPDF_PageObject* pSrc) {
+ const CPDF_PathObject* pSrcObj = (const CPDF_PathObject*)pSrc;
+ m_Path = pSrcObj->m_Path;
+ m_FillType = pSrcObj->m_FillType;
+ m_bStroke = pSrcObj->m_bStroke;
+ m_Matrix = pSrcObj->m_Matrix;
}
-void CPDF_PathObject::Transform(const CPDF_Matrix& matrix)
-{
- m_Matrix.Concat(matrix);
- CalcBoundingBox();
+void CPDF_PathObject::Transform(const CPDF_Matrix& matrix) {
+ m_Matrix.Concat(matrix);
+ CalcBoundingBox();
}
-void CPDF_PathObject::SetGraphState(CPDF_GraphState GraphState)
-{
- m_GraphState = GraphState;
- CalcBoundingBox();
+void CPDF_PathObject::SetGraphState(CPDF_GraphState GraphState) {
+ m_GraphState = GraphState;
+ CalcBoundingBox();
}
-void CPDF_PathObject::CalcBoundingBox()
-{
- if (m_Path.IsNull()) {
- return;
- }
- CFX_FloatRect rect;
- FX_FLOAT width = m_GraphState.GetObject()->m_LineWidth;
- if (m_bStroke && width != 0) {
- rect = m_Path.GetBoundingBox(width, m_GraphState.GetObject()->m_MiterLimit);
- } else {
- rect = m_Path.GetBoundingBox();
- }
- rect.Transform(&m_Matrix);
- if (width == 0 && m_bStroke) {
- rect.left += -0.5f;
- rect.right += 0.5f;
- rect.bottom += -0.5f;
- rect.top += 0.5f;
- }
- m_Left = rect.left;
- m_Right = rect.right;
- m_Top = rect.top;
- m_Bottom = rect.bottom;
+void CPDF_PathObject::CalcBoundingBox() {
+ if (m_Path.IsNull()) {
+ return;
+ }
+ CFX_FloatRect rect;
+ FX_FLOAT width = m_GraphState.GetObject()->m_LineWidth;
+ if (m_bStroke && width != 0) {
+ rect = m_Path.GetBoundingBox(width, m_GraphState.GetObject()->m_MiterLimit);
+ } else {
+ rect = m_Path.GetBoundingBox();
+ }
+ rect.Transform(&m_Matrix);
+ if (width == 0 && m_bStroke) {
+ rect.left += -0.5f;
+ rect.right += 0.5f;
+ rect.bottom += -0.5f;
+ rect.top += 0.5f;
+ }
+ m_Left = rect.left;
+ m_Right = rect.right;
+ m_Top = rect.top;
+ m_Bottom = rect.bottom;
}
diff --git a/core/src/fpdfapi/fpdf_page/fpdf_page_pattern.cpp b/core/src/fpdfapi/fpdf_page/fpdf_page_pattern.cpp
index 48b3a40495..3f915a7b79 100644
--- a/core/src/fpdfapi/fpdf_page/fpdf_page_pattern.cpp
+++ b/core/src/fpdfapi/fpdf_page/fpdf_page_pattern.cpp
@@ -7,283 +7,294 @@
#include "../../../include/fpdfapi/fpdf_page.h"
#include "pageint.h"
-CPDF_Pattern::CPDF_Pattern(const CFX_AffineMatrix* pParentMatrix) :
- m_pPatternObj(NULL), m_PatternType(PATTERN_TILING), m_pDocument(NULL), m_bForceClear(FALSE)
-{
- if (pParentMatrix) {
- m_ParentMatrix = *pParentMatrix;
- }
+CPDF_Pattern::CPDF_Pattern(const CFX_AffineMatrix* pParentMatrix)
+ : m_pPatternObj(NULL),
+ m_PatternType(PATTERN_TILING),
+ m_pDocument(NULL),
+ m_bForceClear(FALSE) {
+ if (pParentMatrix) {
+ m_ParentMatrix = *pParentMatrix;
+ }
+}
+CPDF_Pattern::~CPDF_Pattern() {}
+CPDF_TilingPattern::CPDF_TilingPattern(CPDF_Document* pDoc,
+ CPDF_Object* pPatternObj,
+ const CFX_AffineMatrix* parentMatrix)
+ : CPDF_Pattern(parentMatrix) {
+ m_PatternType = PATTERN_TILING;
+ m_pPatternObj = pPatternObj;
+ m_pDocument = pDoc;
+ CPDF_Dictionary* pDict = m_pPatternObj->GetDict();
+ ASSERT(pDict != NULL);
+ m_Pattern2Form = pDict->GetMatrix(FX_BSTRC("Matrix"));
+ m_bColored = pDict->GetInteger(FX_BSTRC("PaintType")) == 1;
+ if (parentMatrix) {
+ m_Pattern2Form.Concat(*parentMatrix);
+ }
+ m_pForm = NULL;
}
-CPDF_Pattern::~CPDF_Pattern()
-{
+CPDF_TilingPattern::~CPDF_TilingPattern() {
+ delete m_pForm;
+ m_pForm = NULL;
}
-CPDF_TilingPattern::CPDF_TilingPattern(CPDF_Document* pDoc, CPDF_Object* pPatternObj, const CFX_AffineMatrix* parentMatrix) :
- CPDF_Pattern(parentMatrix)
-{
- m_PatternType = PATTERN_TILING;
- m_pPatternObj = pPatternObj;
- m_pDocument = pDoc;
+FX_BOOL CPDF_TilingPattern::Load() {
+ if (m_pForm != NULL) {
+ return TRUE;
+ }
+ CPDF_Dictionary* pDict = m_pPatternObj->GetDict();
+ if (pDict == NULL) {
+ return FALSE;
+ }
+ m_bColored = pDict->GetInteger(FX_BSTRC("PaintType")) == 1;
+ m_XStep = (FX_FLOAT)FXSYS_fabs(pDict->GetNumber(FX_BSTRC("XStep")));
+ m_YStep = (FX_FLOAT)FXSYS_fabs(pDict->GetNumber(FX_BSTRC("YStep")));
+ if (m_pPatternObj->GetType() != PDFOBJ_STREAM) {
+ return FALSE;
+ }
+ CPDF_Stream* pStream = (CPDF_Stream*)m_pPatternObj;
+ m_pForm = new CPDF_Form(m_pDocument, NULL, pStream);
+ m_pForm->ParseContent(NULL, &m_ParentMatrix, NULL, NULL);
+ m_BBox = pDict->GetRect(FX_BSTRC("BBox"));
+ return TRUE;
+}
+CPDF_ShadingPattern::CPDF_ShadingPattern(CPDF_Document* pDoc,
+ CPDF_Object* pPatternObj,
+ FX_BOOL bShading,
+ const CFX_AffineMatrix* parentMatrix)
+ : CPDF_Pattern(parentMatrix) {
+ m_PatternType = PATTERN_SHADING;
+ m_pPatternObj = bShading ? NULL : pPatternObj;
+ m_pDocument = pDoc;
+ m_bShadingObj = bShading;
+ if (!bShading) {
CPDF_Dictionary* pDict = m_pPatternObj->GetDict();
ASSERT(pDict != NULL);
m_Pattern2Form = pDict->GetMatrix(FX_BSTRC("Matrix"));
- m_bColored = pDict->GetInteger(FX_BSTRC("PaintType")) == 1;
+ m_pShadingObj = pDict->GetElementValue(FX_BSTRC("Shading"));
if (parentMatrix) {
- m_Pattern2Form.Concat(*parentMatrix);
+ m_Pattern2Form.Concat(*parentMatrix);
}
- m_pForm = NULL;
+ } else {
+ m_pShadingObj = pPatternObj;
+ }
+ m_ShadingType = 0;
+ m_pCS = NULL;
+ m_nFuncs = 0;
+ for (int i = 0; i < 4; i++) {
+ m_pFunctions[i] = NULL;
+ }
+ m_pCountedCS = NULL;
}
-CPDF_TilingPattern::~CPDF_TilingPattern()
-{
- delete m_pForm;
- m_pForm = NULL;
+CPDF_ShadingPattern::~CPDF_ShadingPattern() {
+ Clear();
}
-FX_BOOL CPDF_TilingPattern::Load()
-{
- if (m_pForm != NULL) {
- return TRUE;
- }
- CPDF_Dictionary* pDict = m_pPatternObj->GetDict();
- if (pDict == NULL) {
- return FALSE;
- }
- m_bColored = pDict->GetInteger(FX_BSTRC("PaintType")) == 1;
- m_XStep = (FX_FLOAT)FXSYS_fabs(pDict->GetNumber(FX_BSTRC("XStep")));
- m_YStep = (FX_FLOAT)FXSYS_fabs(pDict->GetNumber(FX_BSTRC("YStep")));
- if (m_pPatternObj->GetType() != PDFOBJ_STREAM) {
- return FALSE;
- }
- CPDF_Stream* pStream = (CPDF_Stream*)m_pPatternObj;
- m_pForm = new CPDF_Form(m_pDocument, NULL, pStream);
- m_pForm->ParseContent(NULL, &m_ParentMatrix, NULL, NULL);
- m_BBox = pDict->GetRect(FX_BSTRC("BBox"));
- return TRUE;
+void CPDF_ShadingPattern::Clear() {
+ for (int i = 0; i < m_nFuncs; i++) {
+ delete m_pFunctions[i];
+ m_pFunctions[i] = NULL;
+ }
+ CPDF_ColorSpace* pCS = m_pCountedCS ? m_pCountedCS->get() : NULL;
+ if (pCS && m_pDocument) {
+ m_pDocument->GetPageData()->ReleaseColorSpace(pCS->GetArray());
+ }
+ m_ShadingType = 0;
+ m_pCS = NULL;
+ m_pCountedCS = NULL;
+ m_nFuncs = 0;
}
-CPDF_ShadingPattern::CPDF_ShadingPattern(CPDF_Document* pDoc, CPDF_Object* pPatternObj, FX_BOOL bShading, const CFX_AffineMatrix* parentMatrix) : CPDF_Pattern(parentMatrix)
-{
- m_PatternType = PATTERN_SHADING;
- m_pPatternObj = bShading ? NULL : pPatternObj;
- m_pDocument = pDoc;
- m_bShadingObj = bShading;
- if (!bShading) {
- CPDF_Dictionary* pDict = m_pPatternObj->GetDict();
- ASSERT(pDict != NULL);
- m_Pattern2Form = pDict->GetMatrix(FX_BSTRC("Matrix"));
- m_pShadingObj = pDict->GetElementValue(FX_BSTRC("Shading"));
- if (parentMatrix) {
- m_Pattern2Form.Concat(*parentMatrix);
- }
- } else {
- m_pShadingObj = pPatternObj;
- }
- m_ShadingType = 0;
- m_pCS = NULL;
+FX_BOOL CPDF_ShadingPattern::Load() {
+ if (m_ShadingType != 0) {
+ return TRUE;
+ }
+ CPDF_Dictionary* pShadingDict =
+ m_pShadingObj ? m_pShadingObj->GetDict() : NULL;
+ if (pShadingDict == NULL) {
+ return FALSE;
+ }
+ if (m_nFuncs) {
+ for (int i = 0; i < m_nFuncs; i++)
+ delete m_pFunctions[i];
m_nFuncs = 0;
- for (int i = 0; i < 4; i ++) {
- m_pFunctions[i] = NULL;
+ }
+ CPDF_Object* pFunc = pShadingDict->GetElementValue(FX_BSTRC("Function"));
+ if (pFunc) {
+ if (pFunc->GetType() == PDFOBJ_ARRAY) {
+ m_nFuncs = ((CPDF_Array*)pFunc)->GetCount();
+ if (m_nFuncs > 4) {
+ m_nFuncs = 4;
+ }
+ for (int i = 0; i < m_nFuncs; i++) {
+ m_pFunctions[i] =
+ CPDF_Function::Load(((CPDF_Array*)pFunc)->GetElementValue(i));
+ }
+ } else {
+ m_pFunctions[0] = CPDF_Function::Load(pFunc);
+ m_nFuncs = 1;
}
- m_pCountedCS = NULL;
+ }
+ CPDF_Object* pCSObj = pShadingDict->GetElementValue(FX_BSTRC("ColorSpace"));
+ if (pCSObj == NULL) {
+ return FALSE;
+ }
+ CPDF_DocPageData* pDocPageData = m_pDocument->GetPageData();
+ m_pCS = pDocPageData->GetColorSpace(pCSObj, NULL);
+ if (m_pCS) {
+ m_pCountedCS = pDocPageData->FindColorSpacePtr(m_pCS->GetArray());
+ }
+ m_ShadingType = pShadingDict->GetInteger(FX_BSTRC("ShadingType"));
+ return TRUE;
}
-CPDF_ShadingPattern::~CPDF_ShadingPattern()
-{
- Clear();
+FX_BOOL CPDF_ShadingPattern::Reload() {
+ Clear();
+ return Load();
}
-void CPDF_ShadingPattern::Clear()
-{
- for (int i = 0; i < m_nFuncs; i ++) {
- delete m_pFunctions[i];
- m_pFunctions[i] = NULL;
- }
- CPDF_ColorSpace* pCS = m_pCountedCS ? m_pCountedCS->get() : NULL;
- if (pCS && m_pDocument) {
- m_pDocument->GetPageData()->ReleaseColorSpace(pCS->GetArray());
- }
- m_ShadingType = 0;
- m_pCS = NULL;
- m_pCountedCS = NULL;
- m_nFuncs = 0;
+FX_BOOL CPDF_MeshStream::Load(CPDF_Stream* pShadingStream,
+ CPDF_Function** pFuncs,
+ int nFuncs,
+ CPDF_ColorSpace* pCS) {
+ m_Stream.LoadAllData(pShadingStream);
+ m_BitStream.Init(m_Stream.GetData(), m_Stream.GetSize());
+ m_pFuncs = pFuncs;
+ m_nFuncs = nFuncs;
+ m_pCS = pCS;
+ CPDF_Dictionary* pDict = pShadingStream->GetDict();
+ m_nCoordBits = pDict->GetInteger(FX_BSTRC("BitsPerCoordinate"));
+ m_nCompBits = pDict->GetInteger(FX_BSTRC("BitsPerComponent"));
+ m_nFlagBits = pDict->GetInteger(FX_BSTRC("BitsPerFlag"));
+ if (!m_nCoordBits || !m_nCompBits) {
+ return FALSE;
+ }
+ int nComps = pCS->CountComponents();
+ if (nComps > 8) {
+ return FALSE;
+ }
+ m_nComps = nFuncs ? 1 : nComps;
+ if (((int)m_nComps < 0) || m_nComps > 8) {
+ return FALSE;
+ }
+ m_CoordMax = m_nCoordBits == 32 ? -1 : (1 << m_nCoordBits) - 1;
+ m_CompMax = (1 << m_nCompBits) - 1;
+ CPDF_Array* pDecode = pDict->GetArray(FX_BSTRC("Decode"));
+ if (pDecode == NULL || pDecode->GetCount() != 4 + m_nComps * 2) {
+ return FALSE;
+ }
+ m_xmin = pDecode->GetNumber(0);
+ m_xmax = pDecode->GetNumber(1);
+ m_ymin = pDecode->GetNumber(2);
+ m_ymax = pDecode->GetNumber(3);
+ for (FX_DWORD i = 0; i < m_nComps; i++) {
+ m_ColorMin[i] = pDecode->GetNumber(i * 2 + 4);
+ m_ColorMax[i] = pDecode->GetNumber(i * 2 + 5);
+ }
+ return TRUE;
}
-FX_BOOL CPDF_ShadingPattern::Load()
-{
- if (m_ShadingType != 0) {
- return TRUE;
- }
- CPDF_Dictionary* pShadingDict = m_pShadingObj ? m_pShadingObj->GetDict() : NULL;
- if (pShadingDict == NULL) {
- return FALSE;
- }
- if (m_nFuncs) {
- for (int i = 0; i < m_nFuncs; i ++)
- delete m_pFunctions[i];
- m_nFuncs = 0;
- }
- CPDF_Object* pFunc = pShadingDict->GetElementValue(FX_BSTRC("Function"));
- if (pFunc) {
- if (pFunc->GetType() == PDFOBJ_ARRAY) {
- m_nFuncs = ((CPDF_Array*)pFunc)->GetCount();
- if (m_nFuncs > 4) {
- m_nFuncs = 4;
- }
- for (int i = 0; i < m_nFuncs; i ++) {
- m_pFunctions[i] = CPDF_Function::Load(((CPDF_Array*)pFunc)->GetElementValue(i));
- }
- } else {
- m_pFunctions[0] = CPDF_Function::Load(pFunc);
- m_nFuncs = 1;
- }
- }
- CPDF_Object* pCSObj = pShadingDict->GetElementValue(FX_BSTRC("ColorSpace"));
- if (pCSObj == NULL) {
- return FALSE;
- }
- CPDF_DocPageData* pDocPageData = m_pDocument->GetPageData();
- m_pCS = pDocPageData->GetColorSpace(pCSObj, NULL);
- if (m_pCS) {
- m_pCountedCS = pDocPageData->FindColorSpacePtr(m_pCS->GetArray());
- }
- m_ShadingType = pShadingDict->GetInteger(FX_BSTRC("ShadingType"));
- return TRUE;
+FX_DWORD CPDF_MeshStream::GetFlag() {
+ return m_BitStream.GetBits(m_nFlagBits) & 0x03;
}
-FX_BOOL CPDF_ShadingPattern::Reload()
-{
- Clear();
- return Load();
+void CPDF_MeshStream::GetCoords(FX_FLOAT& x, FX_FLOAT& y) {
+ if (m_nCoordBits == 32) {
+ x = m_xmin + (FX_FLOAT)(m_BitStream.GetBits(m_nCoordBits) *
+ (m_xmax - m_xmin) / (double)m_CoordMax);
+ y = m_ymin + (FX_FLOAT)(m_BitStream.GetBits(m_nCoordBits) *
+ (m_ymax - m_ymin) / (double)m_CoordMax);
+ } else {
+ x = m_xmin +
+ m_BitStream.GetBits(m_nCoordBits) * (m_xmax - m_xmin) / m_CoordMax;
+ y = m_ymin +
+ m_BitStream.GetBits(m_nCoordBits) * (m_ymax - m_ymin) / m_CoordMax;
+ }
}
-FX_BOOL CPDF_MeshStream::Load(CPDF_Stream* pShadingStream, CPDF_Function** pFuncs, int nFuncs, CPDF_ColorSpace* pCS)
-{
- m_Stream.LoadAllData(pShadingStream);
- m_BitStream.Init(m_Stream.GetData(), m_Stream.GetSize());
- m_pFuncs = pFuncs;
- m_nFuncs = nFuncs;
- m_pCS = pCS;
- CPDF_Dictionary* pDict = pShadingStream->GetDict();
- m_nCoordBits = pDict->GetInteger(FX_BSTRC("BitsPerCoordinate"));
- m_nCompBits = pDict->GetInteger(FX_BSTRC("BitsPerComponent"));
- m_nFlagBits = pDict->GetInteger(FX_BSTRC("BitsPerFlag"));
- if (!m_nCoordBits || !m_nCompBits) {
- return FALSE;
- }
- int nComps = pCS->CountComponents();
- if (nComps > 8) {
- return FALSE;
- }
- m_nComps = nFuncs ? 1 : nComps;
- if (((int)m_nComps < 0) || m_nComps > 8) {
- return FALSE;
- }
- m_CoordMax = m_nCoordBits == 32 ? -1 : (1 << m_nCoordBits) - 1;
- m_CompMax = (1 << m_nCompBits) - 1;
- CPDF_Array* pDecode = pDict->GetArray(FX_BSTRC("Decode"));
- if (pDecode == NULL || pDecode->GetCount() != 4 + m_nComps * 2) {
- return FALSE;
- }
- m_xmin = pDecode->GetNumber(0);
- m_xmax = pDecode->GetNumber(1);
- m_ymin = pDecode->GetNumber(2);
- m_ymax = pDecode->GetNumber(3);
- for (FX_DWORD i = 0; i < m_nComps; i ++) {
- m_ColorMin[i] = pDecode->GetNumber(i * 2 + 4);
- m_ColorMax[i] = pDecode->GetNumber(i * 2 + 5);
+void CPDF_MeshStream::GetColor(FX_FLOAT& r, FX_FLOAT& g, FX_FLOAT& b) {
+ FX_DWORD i;
+ FX_FLOAT color_value[8];
+ for (i = 0; i < m_nComps; i++) {
+ color_value[i] = m_ColorMin[i] +
+ m_BitStream.GetBits(m_nCompBits) *
+ (m_ColorMax[i] - m_ColorMin[i]) / m_CompMax;
+ }
+ if (m_nFuncs) {
+ static const int kMaxResults = 8;
+ FX_FLOAT result[kMaxResults];
+ int nResults;
+ FXSYS_memset(result, 0, sizeof(result));
+ for (FX_DWORD i = 0; i < m_nFuncs; i++) {
+ if (m_pFuncs[i] && m_pFuncs[i]->CountOutputs() <= kMaxResults) {
+ m_pFuncs[i]->Call(color_value, 1, result, nResults);
+ }
}
- return TRUE;
+ m_pCS->GetRGB(result, r, g, b);
+ } else {
+ m_pCS->GetRGB(color_value, r, g, b);
+ }
}
-FX_DWORD CPDF_MeshStream::GetFlag()
-{
- return m_BitStream.GetBits(m_nFlagBits) & 0x03;
+FX_DWORD CPDF_MeshStream::GetVertex(CPDF_MeshVertex& vertex,
+ CFX_AffineMatrix* pObject2Bitmap) {
+ FX_DWORD flag = GetFlag();
+ GetCoords(vertex.x, vertex.y);
+ pObject2Bitmap->Transform(vertex.x, vertex.y);
+ GetColor(vertex.r, vertex.g, vertex.b);
+ m_BitStream.ByteAlign();
+ return flag;
}
-void CPDF_MeshStream::GetCoords(FX_FLOAT& x, FX_FLOAT& y)
-{
- if (m_nCoordBits == 32) {
- x = m_xmin + (FX_FLOAT)(m_BitStream.GetBits(m_nCoordBits) * (m_xmax - m_xmin) / (double)m_CoordMax);
- y = m_ymin + (FX_FLOAT)(m_BitStream.GetBits(m_nCoordBits) * (m_ymax - m_ymin) / (double)m_CoordMax);
- } else {
- x = m_xmin + m_BitStream.GetBits(m_nCoordBits) * (m_xmax - m_xmin) / m_CoordMax;
- y = m_ymin + m_BitStream.GetBits(m_nCoordBits) * (m_ymax - m_ymin) / m_CoordMax;
+FX_BOOL CPDF_MeshStream::GetVertexRow(CPDF_MeshVertex* vertex,
+ int count,
+ CFX_AffineMatrix* pObject2Bitmap) {
+ for (int i = 0; i < count; i++) {
+ if (m_BitStream.IsEOF()) {
+ return FALSE;
}
-}
-void CPDF_MeshStream::GetColor(FX_FLOAT& r, FX_FLOAT& g, FX_FLOAT& b)
-{
- FX_DWORD i;
- FX_FLOAT color_value[8];
- for (i = 0; i < m_nComps; i ++) {
- color_value[i] = m_ColorMin[i] + m_BitStream.GetBits(m_nCompBits) * (m_ColorMax[i] - m_ColorMin[i]) / m_CompMax;
- }
- if (m_nFuncs) {
- static const int kMaxResults = 8;
- FX_FLOAT result[kMaxResults];
- int nResults;
- FXSYS_memset(result, 0, sizeof(result));
- for (FX_DWORD i = 0; i < m_nFuncs; i ++) {
- if (m_pFuncs[i] && m_pFuncs[i]->CountOutputs() <= kMaxResults) {
- m_pFuncs[i]->Call(color_value, 1, result, nResults);
- }
- }
- m_pCS->GetRGB(result, r, g, b);
- } else {
- m_pCS->GetRGB(color_value, r, g, b);
- }
-}
-FX_DWORD CPDF_MeshStream::GetVertex(CPDF_MeshVertex& vertex, CFX_AffineMatrix* pObject2Bitmap)
-{
- FX_DWORD flag = GetFlag();
- GetCoords(vertex.x, vertex.y);
- pObject2Bitmap->Transform(vertex.x, vertex.y);
- GetColor(vertex.r, vertex.g, vertex.b);
+ GetCoords(vertex[i].x, vertex[i].y);
+ pObject2Bitmap->Transform(vertex[i].x, vertex[i].y);
+ GetColor(vertex[i].r, vertex[i].g, vertex[i].b);
m_BitStream.ByteAlign();
- return flag;
+ }
+ return TRUE;
}
-FX_BOOL CPDF_MeshStream::GetVertexRow(CPDF_MeshVertex* vertex, int count, CFX_AffineMatrix* pObject2Bitmap)
-{
- for (int i = 0; i < count; i ++) {
- if (m_BitStream.IsEOF()) {
- return FALSE;
- }
- GetCoords(vertex[i].x, vertex[i].y);
- pObject2Bitmap->Transform(vertex[i].x, vertex[i].y);
- GetColor(vertex[i].r, vertex[i].g, vertex[i].b);
- m_BitStream.ByteAlign();
+CFX_FloatRect _GetShadingBBox(CPDF_Stream* pStream,
+ int type,
+ const CFX_AffineMatrix* pMatrix,
+ CPDF_Function** pFuncs,
+ int nFuncs,
+ CPDF_ColorSpace* pCS) {
+ if (pStream == NULL || pStream->GetType() != PDFOBJ_STREAM ||
+ pFuncs == NULL || pCS == NULL) {
+ return CFX_FloatRect(0, 0, 0, 0);
+ }
+ CPDF_MeshStream stream;
+ if (!stream.Load(pStream, pFuncs, nFuncs, pCS)) {
+ return CFX_FloatRect(0, 0, 0, 0);
+ }
+ CFX_FloatRect rect;
+ FX_BOOL bStarted = FALSE;
+ FX_BOOL bGouraud = type == 4 || type == 5;
+ int full_point_count = type == 7 ? 16 : (type == 6 ? 12 : 1);
+ int full_color_count = (type == 6 || type == 7) ? 4 : 1;
+ while (!stream.m_BitStream.IsEOF()) {
+ FX_DWORD flag = 0;
+ if (type != 5) {
+ flag = stream.GetFlag();
}
- return TRUE;
-}
-CFX_FloatRect _GetShadingBBox(CPDF_Stream* pStream, int type, const CFX_AffineMatrix* pMatrix,
- CPDF_Function** pFuncs, int nFuncs, CPDF_ColorSpace* pCS)
-{
- if (pStream == NULL || pStream->GetType() != PDFOBJ_STREAM || pFuncs == NULL || pCS == NULL) {
- return CFX_FloatRect(0, 0, 0, 0);
+ int point_count = full_point_count, color_count = full_color_count;
+ if (!bGouraud && flag) {
+ point_count -= 4;
+ color_count -= 2;
}
- CPDF_MeshStream stream;
- if (!stream.Load(pStream, pFuncs, nFuncs, pCS)) {
- return CFX_FloatRect(0, 0, 0, 0);
+ for (int i = 0; i < point_count; i++) {
+ FX_FLOAT x, y;
+ stream.GetCoords(x, y);
+ if (bStarted) {
+ rect.UpdateRect(x, y);
+ } else {
+ rect.InitRect(x, y);
+ bStarted = TRUE;
+ }
}
- CFX_FloatRect rect;
- FX_BOOL bStarted = FALSE;
- FX_BOOL bGouraud = type == 4 || type == 5;
- int full_point_count = type == 7 ? 16 : (type == 6 ? 12 : 1);
- int full_color_count = (type == 6 || type == 7) ? 4 : 1;
- while (!stream.m_BitStream.IsEOF()) {
- FX_DWORD flag = 0;
- if (type != 5) {
- flag = stream.GetFlag();
- }
- int point_count = full_point_count, color_count = full_color_count;
- if (!bGouraud && flag) {
- point_count -= 4;
- color_count -= 2;
- }
- for (int i = 0; i < point_count; i ++) {
- FX_FLOAT x, y;
- stream.GetCoords(x, y);
- if (bStarted) {
- rect.UpdateRect(x, y);
- } else {
- rect.InitRect(x, y);
- bStarted = TRUE;
- }
- }
- stream.m_BitStream.SkipBits(stream.m_nComps * stream.m_nCompBits * color_count);
- if (bGouraud) {
- stream.m_BitStream.ByteAlign();
- }
+ stream.m_BitStream.SkipBits(stream.m_nComps * stream.m_nCompBits *
+ color_count);
+ if (bGouraud) {
+ stream.m_BitStream.ByteAlign();
}
- rect.Transform(pMatrix);
- return rect;
+ }
+ rect.Transform(pMatrix);
+ return rect;
}
diff --git a/core/src/fpdfapi/fpdf_page/pageint.h b/core/src/fpdfapi/fpdf_page/pageint.h
index 8cd393cf32..c931af7eb2 100644
--- a/core/src/fpdfapi/fpdf_page/pageint.h
+++ b/core/src/fpdfapi/fpdf_page/pageint.h
@@ -12,486 +12,507 @@
#include "../../../../third_party/base/nonstd_unique_ptr.h"
#include "../../../include/fpdfapi/fpdf_pageobj.h"
-#define PARSE_STEP_LIMIT 100
-
-class CPDF_StreamParser
-{
-public:
-
- CPDF_StreamParser(const uint8_t* pData, FX_DWORD dwSize);
- ~CPDF_StreamParser();
-
- CPDF_Stream* ReadInlineStream(CPDF_Document* pDoc, CPDF_Dictionary* pDict, CPDF_Object* pCSObj, FX_BOOL bDecode);
- typedef enum { EndOfData, Number, Keyword, Name, Others } SyntaxType;
-
- SyntaxType ParseNextElement();
- uint8_t* GetWordBuf()
- {
- return m_WordBuffer;
- }
- FX_DWORD GetWordSize()
- {
- return m_WordSize;
- }
- CPDF_Object* GetObject()
- {
- CPDF_Object* pObj = m_pLastObj;
- m_pLastObj = NULL;
- return pObj;
- }
- FX_DWORD GetPos()
- {
- return m_Pos;
- }
- void SetPos(FX_DWORD pos)
- {
- m_Pos = pos;
- }
-
- CPDF_Object* ReadNextObject(FX_BOOL bAllowNestedArray = FALSE, FX_BOOL bInArray = FALSE);
- void SkipPathObject();
-protected:
- void GetNextWord(FX_BOOL& bIsNumber);
- CFX_ByteString ReadString();
- CFX_ByteString ReadHexString();
- const uint8_t* m_pBuf;
- FX_DWORD m_Size;
- FX_DWORD m_Pos;
- uint8_t m_WordBuffer[256];
- FX_DWORD m_WordSize;
- CPDF_Object* m_pLastObj;
+#define PARSE_STEP_LIMIT 100
+
+class CPDF_StreamParser {
+ public:
+ CPDF_StreamParser(const uint8_t* pData, FX_DWORD dwSize);
+ ~CPDF_StreamParser();
+
+ CPDF_Stream* ReadInlineStream(CPDF_Document* pDoc,
+ CPDF_Dictionary* pDict,
+ CPDF_Object* pCSObj,
+ FX_BOOL bDecode);
+ typedef enum { EndOfData, Number, Keyword, Name, Others } SyntaxType;
+
+ SyntaxType ParseNextElement();
+ uint8_t* GetWordBuf() { return m_WordBuffer; }
+ FX_DWORD GetWordSize() { return m_WordSize; }
+ CPDF_Object* GetObject() {
+ CPDF_Object* pObj = m_pLastObj;
+ m_pLastObj = NULL;
+ return pObj;
+ }
+ FX_DWORD GetPos() { return m_Pos; }
+ void SetPos(FX_DWORD pos) { m_Pos = pos; }
+
+ CPDF_Object* ReadNextObject(FX_BOOL bAllowNestedArray = FALSE,
+ FX_BOOL bInArray = FALSE);
+ void SkipPathObject();
+
+ protected:
+ void GetNextWord(FX_BOOL& bIsNumber);
+ CFX_ByteString ReadString();
+ CFX_ByteString ReadHexString();
+ const uint8_t* m_pBuf;
+ FX_DWORD m_Size;
+ FX_DWORD m_Pos;
+ uint8_t m_WordBuffer[256];
+ FX_DWORD m_WordSize;
+ CPDF_Object* m_pLastObj;
};
typedef enum {
- PDFOP_CloseFillStrokePath = 0, PDFOP_FillStrokePath,
- PDFOP_CloseEOFillStrokePath, PDFOP_EOFillStrokePath,
- PDFOP_BeginMarkedContent_Dictionary, PDFOP_BeginImage,
- PDFOP_BeginMarkedContent, PDFOP_BeginText,
- PDFOP_BeginSectionUndefined, PDFOP_CurveTo_123,
- PDFOP_ConcatMatrix, PDFOP_SetColorSpace_Fill,
- PDFOP_SetColorSpace_Stroke, PDFOP_SetDash,
- PDFOP_SetCharWidth, PDFOP_SetCachedDevice,
- PDFOP_ExecuteXObject, PDFOP_MarkPlace_Dictionary,
- PDFOP_EndImage, PDFOP_EndMarkedContent,
- PDFOP_EndText, PDFOP_EndSectionUndefined,
- PDFOP_FillPath, PDFOP_FillPathOld,
- PDFOP_EOFillPath, PDFOP_SetGray_Fill,
- PDFOP_SetGray_Stroke, PDFOP_SetExtendGraphState,
- PDFOP_ClosePath, PDFOP_SetFlat,
- PDFOP_BeginImageData, PDFOP_SetLineJoin,
- PDFOP_SetLineCap, PDFOP_SetCMYKColor_Fill,
- PDFOP_SetCMYKColor_Stroke, PDFOP_LineTo,
- PDFOP_MoveTo, PDFOP_SetMiterLimit,
- PDFOP_MarkPlace, PDFOP_EndPath,
- PDFOP_SaveGraphState, PDFOP_RestoreGraphState,
- PDFOP_Rectangle, PDFOP_SetRGBColor_Fill,
- PDFOP_SetRGBColor_Stroke, PDFOP_SetRenderIntent,
- PDFOP_CloseStrokePath, PDFOP_StrokePath,
- PDFOP_SetColor_Fill, PDFOP_SetColor_Stroke,
- PDFOP_SetColorPS_Fill, PDFOP_SetColorPS_Stroke,
- PDFOP_ShadeFill, PDFOP_SetCharSpace,
- PDFOP_MoveTextPoint, PDFOP_MoveTextPoint_SetLeading,
- PDFOP_SetFont, PDFOP_ShowText,
- PDFOP_ShowText_Positioning, PDFOP_SetTextLeading,
- PDFOP_SetTextMatrix, PDFOP_SetTextRenderMode,
- PDFOP_SetTextRise, PDFOP_SetWordSpace,
- PDFOP_SetHorzScale, PDFOP_MoveToNextLine,
- PDFOP_CurveTo_23, PDFOP_SetLineWidth,
- PDFOP_Clip, PDFOP_EOClip,
- PDFOP_CurveTo_13, PDFOP_NextLineShowText,
- PDFOP_NextLineShowText_Space, PDFOP_Invalid
+ PDFOP_CloseFillStrokePath = 0,
+ PDFOP_FillStrokePath,
+ PDFOP_CloseEOFillStrokePath,
+ PDFOP_EOFillStrokePath,
+ PDFOP_BeginMarkedContent_Dictionary,
+ PDFOP_BeginImage,
+ PDFOP_BeginMarkedContent,
+ PDFOP_BeginText,
+ PDFOP_BeginSectionUndefined,
+ PDFOP_CurveTo_123,
+ PDFOP_ConcatMatrix,
+ PDFOP_SetColorSpace_Fill,
+ PDFOP_SetColorSpace_Stroke,
+ PDFOP_SetDash,
+ PDFOP_SetCharWidth,
+ PDFOP_SetCachedDevice,
+ PDFOP_ExecuteXObject,
+ PDFOP_MarkPlace_Dictionary,
+ PDFOP_EndImage,
+ PDFOP_EndMarkedContent,
+ PDFOP_EndText,
+ PDFOP_EndSectionUndefined,
+ PDFOP_FillPath,
+ PDFOP_FillPathOld,
+ PDFOP_EOFillPath,
+ PDFOP_SetGray_Fill,
+ PDFOP_SetGray_Stroke,
+ PDFOP_SetExtendGraphState,
+ PDFOP_ClosePath,
+ PDFOP_SetFlat,
+ PDFOP_BeginImageData,
+ PDFOP_SetLineJoin,
+ PDFOP_SetLineCap,
+ PDFOP_SetCMYKColor_Fill,
+ PDFOP_SetCMYKColor_Stroke,
+ PDFOP_LineTo,
+ PDFOP_MoveTo,
+ PDFOP_SetMiterLimit,
+ PDFOP_MarkPlace,
+ PDFOP_EndPath,
+ PDFOP_SaveGraphState,
+ PDFOP_RestoreGraphState,
+ PDFOP_Rectangle,
+ PDFOP_SetRGBColor_Fill,
+ PDFOP_SetRGBColor_Stroke,
+ PDFOP_SetRenderIntent,
+ PDFOP_CloseStrokePath,
+ PDFOP_StrokePath,
+ PDFOP_SetColor_Fill,
+ PDFOP_SetColor_Stroke,
+ PDFOP_SetColorPS_Fill,
+ PDFOP_SetColorPS_Stroke,
+ PDFOP_ShadeFill,
+ PDFOP_SetCharSpace,
+ PDFOP_MoveTextPoint,
+ PDFOP_MoveTextPoint_SetLeading,
+ PDFOP_SetFont,
+ PDFOP_ShowText,
+ PDFOP_ShowText_Positioning,
+ PDFOP_SetTextLeading,
+ PDFOP_SetTextMatrix,
+ PDFOP_SetTextRenderMode,
+ PDFOP_SetTextRise,
+ PDFOP_SetWordSpace,
+ PDFOP_SetHorzScale,
+ PDFOP_MoveToNextLine,
+ PDFOP_CurveTo_23,
+ PDFOP_SetLineWidth,
+ PDFOP_Clip,
+ PDFOP_EOClip,
+ PDFOP_CurveTo_13,
+ PDFOP_NextLineShowText,
+ PDFOP_NextLineShowText_Space,
+ PDFOP_Invalid
} PDFOP;
-#define PARAM_BUF_SIZE 16
+#define PARAM_BUF_SIZE 16
typedef struct {
- int m_Type;
- union {
- struct {
- FX_BOOL m_bInteger;
- union {
- int m_Integer;
- FX_FLOAT m_Float;
- };
- } m_Number;
- CPDF_Object* m_pObject;
- struct {
- int m_Len;
- char m_Buffer[32];
- } m_Name;
- };
+ int m_Type;
+ union {
+ struct {
+ FX_BOOL m_bInteger;
+ union {
+ int m_Integer;
+ FX_FLOAT m_Float;
+ };
+ } m_Number;
+ CPDF_Object* m_pObject;
+ struct {
+ int m_Len;
+ char m_Buffer[32];
+ } m_Name;
+ };
} _ContentParam;
-#define _FPDF_MAX_FORM_LEVEL_ 30
-#define _FPDF_MAX_TYPE3_FORM_LEVEL_ 4
+#define _FPDF_MAX_FORM_LEVEL_ 30
+#define _FPDF_MAX_TYPE3_FORM_LEVEL_ 4
#define _FPDF_MAX_OBJECT_STACK_SIZE_ 512
-class CPDF_StreamContentParser
-{
-public:
- CPDF_StreamContentParser(
- CPDF_Document* pDoc,
- CPDF_Dictionary* pPageResources,
- CPDF_Dictionary* pParentResources,
- CFX_AffineMatrix* pmtContentToUser,
- CPDF_PageObjects* pObjList,
- CPDF_Dictionary* pResources,
- CFX_FloatRect* pBBox,
- CPDF_ParseOptions* pOptions,
- CPDF_AllStates* pAllStates,
- int level);
- ~CPDF_StreamContentParser();
-
- FX_BOOL ShouldAbort() const { return m_bAbort; }
- CPDF_PageObjects* GetObjectList() const { return m_pObjectList; }
- CPDF_AllStates* GetCurStates() const { return m_pCurStates.get(); }
- FX_BOOL IsColored() const { return m_bColored; }
- const FX_FLOAT* GetType3Data() const { return m_Type3Data; }
-
- void AddNumberParam(const FX_CHAR* str, int len);
- void AddObjectParam(CPDF_Object* pObj);
- void AddNameParam(const FX_CHAR* name, int size);
- int GetNextParamPos();
- void ClearAllParams();
- CPDF_Object* GetObject(FX_DWORD index);
- CFX_ByteString GetString(FX_DWORD index);
- FX_FLOAT GetNumber(FX_DWORD index);
- FX_FLOAT GetNumber16(FX_DWORD index);
- int GetInteger(FX_DWORD index)
- {
- return (int32_t)(GetNumber(index));
- }
- FX_BOOL OnOperator(const FX_CHAR* op);
- void BigCaseCaller(int index);
- FX_DWORD GetParsePos()
- {
- return m_pSyntax->GetPos();
- }
- void AddTextObject(CFX_ByteString* pText, FX_FLOAT fInitKerning, FX_FLOAT* pKerning, int count);
-
- void ConvertUserSpace(FX_FLOAT& x, FX_FLOAT& y);
- void ConvertTextSpace(FX_FLOAT& x, FX_FLOAT& y);
- void OnChangeTextMatrix();
- FX_DWORD Parse(const uint8_t* pData, FX_DWORD dwSize, FX_DWORD max_cost);
- void ParsePathObject();
- void AddPathPoint(FX_FLOAT x, FX_FLOAT y, int flag);
- void AddPathRect(FX_FLOAT x, FX_FLOAT y, FX_FLOAT w, FX_FLOAT h);
- void AddPathObject(int FillType, FX_BOOL bStroke);
- CPDF_ImageObject* AddImage(CPDF_Stream* pStream, CPDF_Image* pImage, FX_BOOL bInline);
- void AddDuplicateImage();
- void AddForm(CPDF_Stream*);
- void SetGraphicStates(CPDF_PageObject* pObj, FX_BOOL bColor, FX_BOOL bText, FX_BOOL bGraph);
- void SaveStates(CPDF_AllStates*);
- void RestoreStates(CPDF_AllStates*);
- CPDF_Font* FindFont(const CFX_ByteString& name);
- CPDF_ColorSpace* FindColorSpace(const CFX_ByteString& name);
- CPDF_Pattern* FindPattern(const CFX_ByteString& name, FX_BOOL bShading);
- CPDF_Object* FindResourceObj(const CFX_ByteStringC& type, const CFX_ByteString& name);
-
-protected:
- struct OpCode {
- FX_DWORD m_OpId;
- void (CPDF_StreamContentParser::*m_OpHandler)();
- };
- static const OpCode g_OpCodes[];
-
- void Handle_CloseFillStrokePath();
- void Handle_FillStrokePath();
- void Handle_CloseEOFillStrokePath();
- void Handle_EOFillStrokePath();
- void Handle_BeginMarkedContent_Dictionary();
- void Handle_BeginImage();
- void Handle_BeginMarkedContent();
- void Handle_BeginText();
- void Handle_BeginSectionUndefined();
- void Handle_CurveTo_123();
- void Handle_ConcatMatrix();
- void Handle_SetColorSpace_Fill();
- void Handle_SetColorSpace_Stroke();
- void Handle_SetDash();
- void Handle_SetCharWidth();
- void Handle_SetCachedDevice();
- void Handle_ExecuteXObject();
- void Handle_MarkPlace_Dictionary();
- void Handle_EndImage();
- void Handle_EndMarkedContent();
- void Handle_EndText();
- void Handle_EndSectionUndefined();
- void Handle_FillPath();
- void Handle_FillPathOld();
- void Handle_EOFillPath();
- void Handle_SetGray_Fill();
- void Handle_SetGray_Stroke();
- void Handle_SetExtendGraphState();
- void Handle_ClosePath();
- void Handle_SetFlat();
- void Handle_BeginImageData();
- void Handle_SetLineJoin();
- void Handle_SetLineCap();
- void Handle_SetCMYKColor_Fill();
- void Handle_SetCMYKColor_Stroke();
- void Handle_LineTo();
- void Handle_MoveTo();
- void Handle_SetMiterLimit();
- void Handle_MarkPlace();
- void Handle_EndPath();
- void Handle_SaveGraphState();
- void Handle_RestoreGraphState();
- void Handle_Rectangle();
- void Handle_SetRGBColor_Fill();
- void Handle_SetRGBColor_Stroke();
- void Handle_SetRenderIntent();
- void Handle_CloseStrokePath();
- void Handle_StrokePath();
- void Handle_SetColor_Fill();
- void Handle_SetColor_Stroke();
- void Handle_SetColorPS_Fill();
- void Handle_SetColorPS_Stroke();
- void Handle_ShadeFill();
- void Handle_SetCharSpace();
- void Handle_MoveTextPoint();
- void Handle_MoveTextPoint_SetLeading();
- void Handle_SetFont();
- void Handle_ShowText();
- void Handle_ShowText_Positioning();
- void Handle_SetTextLeading();
- void Handle_SetTextMatrix();
- void Handle_SetTextRenderMode();
- void Handle_SetTextRise();
- void Handle_SetWordSpace();
- void Handle_SetHorzScale();
- void Handle_MoveToNextLine();
- void Handle_CurveTo_23();
- void Handle_SetLineWidth();
- void Handle_Clip();
- void Handle_EOClip();
- void Handle_CurveTo_13();
- void Handle_NextLineShowText();
- void Handle_NextLineShowText_Space();
- void Handle_Invalid();
-
- CPDF_Document* const m_pDocument;
- CPDF_Dictionary* m_pPageResources;
- CPDF_Dictionary* m_pParentResources;
- CPDF_Dictionary* m_pResources;
- CPDF_PageObjects* m_pObjectList;
- int m_Level;
- CFX_AffineMatrix m_mtContentToUser;
- CFX_FloatRect m_BBox;
- CPDF_ParseOptions m_Options;
- _ContentParam m_ParamBuf1[PARAM_BUF_SIZE];
- FX_DWORD m_ParamStartPos;
- FX_DWORD m_ParamCount;
- FX_BOOL m_bAbort;
- CPDF_StreamParser* m_pSyntax;
- nonstd::unique_ptr<CPDF_AllStates> m_pCurStates;
- CPDF_ContentMark m_CurContentMark;
- CFX_PtrArray m_ClipTextList;
- CPDF_TextObject* m_pLastTextObject;
- FX_FLOAT m_DefFontSize;
- int m_CompatCount;
- FX_PATHPOINT* m_pPathPoints;
- int m_PathPointCount;
- int m_PathAllocSize;
- FX_FLOAT m_PathStartX;
- FX_FLOAT m_PathStartY;
- FX_FLOAT m_PathCurrentX;
- FX_FLOAT m_PathCurrentY;
- int m_PathClipType;
- CFX_ByteString m_LastImageName;
- CPDF_Image* m_pLastImage;
- CFX_BinaryBuf m_LastImageDict;
- CFX_BinaryBuf m_LastImageData;
- CPDF_Dictionary* m_pLastImageDict;
- CPDF_Dictionary* m_pLastCloneImageDict;
- FX_BOOL m_bReleaseLastDict;
- FX_BOOL m_bSameLastDict;
- FX_BOOL m_bColored;
- FX_FLOAT m_Type3Data[6];
- FX_BOOL m_bResourceMissing;
- CFX_PtrArray m_StateStack;
+class CPDF_StreamContentParser {
+ public:
+ CPDF_StreamContentParser(CPDF_Document* pDoc,
+ CPDF_Dictionary* pPageResources,
+ CPDF_Dictionary* pParentResources,
+ CFX_AffineMatrix* pmtContentToUser,
+ CPDF_PageObjects* pObjList,
+ CPDF_Dictionary* pResources,
+ CFX_FloatRect* pBBox,
+ CPDF_ParseOptions* pOptions,
+ CPDF_AllStates* pAllStates,
+ int level);
+ ~CPDF_StreamContentParser();
+
+ FX_BOOL ShouldAbort() const { return m_bAbort; }
+ CPDF_PageObjects* GetObjectList() const { return m_pObjectList; }
+ CPDF_AllStates* GetCurStates() const { return m_pCurStates.get(); }
+ FX_BOOL IsColored() const { return m_bColored; }
+ const FX_FLOAT* GetType3Data() const { return m_Type3Data; }
+
+ void AddNumberParam(const FX_CHAR* str, int len);
+ void AddObjectParam(CPDF_Object* pObj);
+ void AddNameParam(const FX_CHAR* name, int size);
+ int GetNextParamPos();
+ void ClearAllParams();
+ CPDF_Object* GetObject(FX_DWORD index);
+ CFX_ByteString GetString(FX_DWORD index);
+ FX_FLOAT GetNumber(FX_DWORD index);
+ FX_FLOAT GetNumber16(FX_DWORD index);
+ int GetInteger(FX_DWORD index) { return (int32_t)(GetNumber(index)); }
+ FX_BOOL OnOperator(const FX_CHAR* op);
+ void BigCaseCaller(int index);
+ FX_DWORD GetParsePos() { return m_pSyntax->GetPos(); }
+ void AddTextObject(CFX_ByteString* pText,
+ FX_FLOAT fInitKerning,
+ FX_FLOAT* pKerning,
+ int count);
+
+ void ConvertUserSpace(FX_FLOAT& x, FX_FLOAT& y);
+ void ConvertTextSpace(FX_FLOAT& x, FX_FLOAT& y);
+ void OnChangeTextMatrix();
+ FX_DWORD Parse(const uint8_t* pData, FX_DWORD dwSize, FX_DWORD max_cost);
+ void ParsePathObject();
+ void AddPathPoint(FX_FLOAT x, FX_FLOAT y, int flag);
+ void AddPathRect(FX_FLOAT x, FX_FLOAT y, FX_FLOAT w, FX_FLOAT h);
+ void AddPathObject(int FillType, FX_BOOL bStroke);
+ CPDF_ImageObject* AddImage(CPDF_Stream* pStream,
+ CPDF_Image* pImage,
+ FX_BOOL bInline);
+ void AddDuplicateImage();
+ void AddForm(CPDF_Stream*);
+ void SetGraphicStates(CPDF_PageObject* pObj,
+ FX_BOOL bColor,
+ FX_BOOL bText,
+ FX_BOOL bGraph);
+ void SaveStates(CPDF_AllStates*);
+ void RestoreStates(CPDF_AllStates*);
+ CPDF_Font* FindFont(const CFX_ByteString& name);
+ CPDF_ColorSpace* FindColorSpace(const CFX_ByteString& name);
+ CPDF_Pattern* FindPattern(const CFX_ByteString& name, FX_BOOL bShading);
+ CPDF_Object* FindResourceObj(const CFX_ByteStringC& type,
+ const CFX_ByteString& name);
+
+ protected:
+ struct OpCode {
+ FX_DWORD m_OpId;
+ void (CPDF_StreamContentParser::*m_OpHandler)();
+ };
+ static const OpCode g_OpCodes[];
+
+ void Handle_CloseFillStrokePath();
+ void Handle_FillStrokePath();
+ void Handle_CloseEOFillStrokePath();
+ void Handle_EOFillStrokePath();
+ void Handle_BeginMarkedContent_Dictionary();
+ void Handle_BeginImage();
+ void Handle_BeginMarkedContent();
+ void Handle_BeginText();
+ void Handle_BeginSectionUndefined();
+ void Handle_CurveTo_123();
+ void Handle_ConcatMatrix();
+ void Handle_SetColorSpace_Fill();
+ void Handle_SetColorSpace_Stroke();
+ void Handle_SetDash();
+ void Handle_SetCharWidth();
+ void Handle_SetCachedDevice();
+ void Handle_ExecuteXObject();
+ void Handle_MarkPlace_Dictionary();
+ void Handle_EndImage();
+ void Handle_EndMarkedContent();
+ void Handle_EndText();
+ void Handle_EndSectionUndefined();
+ void Handle_FillPath();
+ void Handle_FillPathOld();
+ void Handle_EOFillPath();
+ void Handle_SetGray_Fill();
+ void Handle_SetGray_Stroke();
+ void Handle_SetExtendGraphState();
+ void Handle_ClosePath();
+ void Handle_SetFlat();
+ void Handle_BeginImageData();
+ void Handle_SetLineJoin();
+ void Handle_SetLineCap();
+ void Handle_SetCMYKColor_Fill();
+ void Handle_SetCMYKColor_Stroke();
+ void Handle_LineTo();
+ void Handle_MoveTo();
+ void Handle_SetMiterLimit();
+ void Handle_MarkPlace();
+ void Handle_EndPath();
+ void Handle_SaveGraphState();
+ void Handle_RestoreGraphState();
+ void Handle_Rectangle();
+ void Handle_SetRGBColor_Fill();
+ void Handle_SetRGBColor_Stroke();
+ void Handle_SetRenderIntent();
+ void Handle_CloseStrokePath();
+ void Handle_StrokePath();
+ void Handle_SetColor_Fill();
+ void Handle_SetColor_Stroke();
+ void Handle_SetColorPS_Fill();
+ void Handle_SetColorPS_Stroke();
+ void Handle_ShadeFill();
+ void Handle_SetCharSpace();
+ void Handle_MoveTextPoint();
+ void Handle_MoveTextPoint_SetLeading();
+ void Handle_SetFont();
+ void Handle_ShowText();
+ void Handle_ShowText_Positioning();
+ void Handle_SetTextLeading();
+ void Handle_SetTextMatrix();
+ void Handle_SetTextRenderMode();
+ void Handle_SetTextRise();
+ void Handle_SetWordSpace();
+ void Handle_SetHorzScale();
+ void Handle_MoveToNextLine();
+ void Handle_CurveTo_23();
+ void Handle_SetLineWidth();
+ void Handle_Clip();
+ void Handle_EOClip();
+ void Handle_CurveTo_13();
+ void Handle_NextLineShowText();
+ void Handle_NextLineShowText_Space();
+ void Handle_Invalid();
+
+ CPDF_Document* const m_pDocument;
+ CPDF_Dictionary* m_pPageResources;
+ CPDF_Dictionary* m_pParentResources;
+ CPDF_Dictionary* m_pResources;
+ CPDF_PageObjects* m_pObjectList;
+ int m_Level;
+ CFX_AffineMatrix m_mtContentToUser;
+ CFX_FloatRect m_BBox;
+ CPDF_ParseOptions m_Options;
+ _ContentParam m_ParamBuf1[PARAM_BUF_SIZE];
+ FX_DWORD m_ParamStartPos;
+ FX_DWORD m_ParamCount;
+ FX_BOOL m_bAbort;
+ CPDF_StreamParser* m_pSyntax;
+ nonstd::unique_ptr<CPDF_AllStates> m_pCurStates;
+ CPDF_ContentMark m_CurContentMark;
+ CFX_PtrArray m_ClipTextList;
+ CPDF_TextObject* m_pLastTextObject;
+ FX_FLOAT m_DefFontSize;
+ int m_CompatCount;
+ FX_PATHPOINT* m_pPathPoints;
+ int m_PathPointCount;
+ int m_PathAllocSize;
+ FX_FLOAT m_PathStartX;
+ FX_FLOAT m_PathStartY;
+ FX_FLOAT m_PathCurrentX;
+ FX_FLOAT m_PathCurrentY;
+ int m_PathClipType;
+ CFX_ByteString m_LastImageName;
+ CPDF_Image* m_pLastImage;
+ CFX_BinaryBuf m_LastImageDict;
+ CFX_BinaryBuf m_LastImageData;
+ CPDF_Dictionary* m_pLastImageDict;
+ CPDF_Dictionary* m_pLastCloneImageDict;
+ FX_BOOL m_bReleaseLastDict;
+ FX_BOOL m_bSameLastDict;
+ FX_BOOL m_bColored;
+ FX_FLOAT m_Type3Data[6];
+ FX_BOOL m_bResourceMissing;
+ CFX_PtrArray m_StateStack;
};
-class CPDF_ContentParser
-{
-public:
- enum ParseStatus {
- Ready,
- ToBeContinued,
- Done
- };
-
- CPDF_ContentParser();
- ~CPDF_ContentParser();
-
- ParseStatus GetStatus()
- {
- return m_Status;
- }
- void Start(CPDF_Page* pPage, CPDF_ParseOptions* pOptions);
- void Start(CPDF_Form* pForm, CPDF_AllStates* pGraphicStates, CFX_AffineMatrix* pParentMatrix,
- CPDF_Type3Char* pType3Char, CPDF_ParseOptions* pOptions, int level);
- void Continue(IFX_Pause* pPause);
-
-protected:
- void Clear();
- ParseStatus m_Status;
- CPDF_PageObjects* m_pObjects;
- FX_BOOL m_bForm;
- CPDF_ParseOptions m_Options;
- CPDF_Type3Char* m_pType3Char;
- int m_InternalStage;
- CPDF_StreamAcc* m_pSingleStream;
- CPDF_StreamAcc** m_pStreamArray;
- FX_DWORD m_nStreams;
- uint8_t* m_pData;
- FX_DWORD m_Size;
- class CPDF_StreamContentParser* m_pParser;
- FX_DWORD m_CurrentOffset;
- CPDF_StreamFilter* m_pStreamFilter;
+class CPDF_ContentParser {
+ public:
+ enum ParseStatus { Ready, ToBeContinued, Done };
+
+ CPDF_ContentParser();
+ ~CPDF_ContentParser();
+
+ ParseStatus GetStatus() { return m_Status; }
+ void Start(CPDF_Page* pPage, CPDF_ParseOptions* pOptions);
+ void Start(CPDF_Form* pForm,
+ CPDF_AllStates* pGraphicStates,
+ CFX_AffineMatrix* pParentMatrix,
+ CPDF_Type3Char* pType3Char,
+ CPDF_ParseOptions* pOptions,
+ int level);
+ void Continue(IFX_Pause* pPause);
+
+ protected:
+ void Clear();
+ ParseStatus m_Status;
+ CPDF_PageObjects* m_pObjects;
+ FX_BOOL m_bForm;
+ CPDF_ParseOptions m_Options;
+ CPDF_Type3Char* m_pType3Char;
+ int m_InternalStage;
+ CPDF_StreamAcc* m_pSingleStream;
+ CPDF_StreamAcc** m_pStreamArray;
+ FX_DWORD m_nStreams;
+ uint8_t* m_pData;
+ FX_DWORD m_Size;
+ class CPDF_StreamContentParser* m_pParser;
+ FX_DWORD m_CurrentOffset;
+ CPDF_StreamFilter* m_pStreamFilter;
};
-class CPDF_AllStates : public CPDF_GraphicStates
-{
-public:
- CPDF_AllStates();
- ~CPDF_AllStates();
- void Copy(const CPDF_AllStates& src);
- void ProcessExtGS(CPDF_Dictionary* pGS, CPDF_StreamContentParser* pParser);
- void SetLineDash(CPDF_Array*, FX_FLOAT, FX_FLOAT scale);
- CFX_AffineMatrix m_TextMatrix, m_CTM, m_ParentMatrix;
- FX_FLOAT m_TextX, m_TextY, m_TextLineX, m_TextLineY;
- FX_FLOAT m_TextLeading, m_TextRise, m_TextHorzScale;
+class CPDF_AllStates : public CPDF_GraphicStates {
+ public:
+ CPDF_AllStates();
+ ~CPDF_AllStates();
+ void Copy(const CPDF_AllStates& src);
+ void ProcessExtGS(CPDF_Dictionary* pGS, CPDF_StreamContentParser* pParser);
+ void SetLineDash(CPDF_Array*, FX_FLOAT, FX_FLOAT scale);
+ CFX_AffineMatrix m_TextMatrix, m_CTM, m_ParentMatrix;
+ FX_FLOAT m_TextX, m_TextY, m_TextLineX, m_TextLineY;
+ FX_FLOAT m_TextLeading, m_TextRise, m_TextHorzScale;
};
-class CPDF_DocPageData
-{
- public:
- explicit CPDF_DocPageData(CPDF_Document *pPDFDoc);
- ~CPDF_DocPageData();
-
- void Clear(FX_BOOL bRelease = FALSE);
- CPDF_Font* GetFont(CPDF_Dictionary* pFontDict, FX_BOOL findOnly);
- CPDF_Font* GetStandardFont(const CFX_ByteStringC& fontName, CPDF_FontEncoding* pEncoding);
- void ReleaseFont(CPDF_Dictionary* pFontDict);
- CPDF_ColorSpace* GetColorSpace(CPDF_Object* pCSObj, CPDF_Dictionary* pResources);
- CPDF_ColorSpace* GetCopiedColorSpace(CPDF_Object* pCSObj);
- void ReleaseColorSpace(CPDF_Object* pColorSpace);
- CPDF_Pattern* GetPattern(CPDF_Object* pPatternObj, FX_BOOL bShading, const CFX_AffineMatrix* matrix);
- void ReleasePattern(CPDF_Object* pPatternObj);
- CPDF_Image* GetImage(CPDF_Object* pImageStream);
- void ReleaseImage(CPDF_Object* pImageStream);
- CPDF_IccProfile* GetIccProfile(CPDF_Stream* pIccProfileStream);
- void ReleaseIccProfile(CPDF_IccProfile* pIccProfile);
- CPDF_StreamAcc* GetFontFileStreamAcc(CPDF_Stream* pFontStream);
- void ReleaseFontFileStreamAcc(CPDF_Stream* pFontStream, FX_BOOL bForce = FALSE);
- FX_BOOL IsForceClear() const {return m_bForceClear;}
- CPDF_CountedColorSpace* FindColorSpacePtr(CPDF_Object* pCSObj) const;
- CPDF_CountedPattern* FindPatternPtr(CPDF_Object* pPatternObj) const;
-
- private:
- using CPDF_CountedFont = CPDF_CountedObject<CPDF_Font>;
- using CPDF_CountedIccProfile = CPDF_CountedObject<CPDF_IccProfile>;
- using CPDF_CountedImage = CPDF_CountedObject<CPDF_Image>;
- using CPDF_CountedStreamAcc = CPDF_CountedObject<CPDF_StreamAcc>;
-
- using CPDF_ColorSpaceMap = std::map<CPDF_Object*, CPDF_CountedColorSpace*>;
- using CPDF_FontFileMap = std::map<CPDF_Stream*, CPDF_CountedStreamAcc*>;
- using CPDF_FontMap = std::map<CPDF_Dictionary*, CPDF_CountedFont*>;
- using CPDF_IccProfileMap = std::map<CPDF_Stream*, CPDF_CountedIccProfile*>;
- using CPDF_ImageMap = std::map<FX_DWORD, CPDF_CountedImage*>;
- using CPDF_PatternMap = std::map<CPDF_Object*, CPDF_CountedPattern*>;
-
- CPDF_Document* const m_pPDFDoc;
- CFX_MapByteStringToPtr m_HashProfileMap;
- FX_BOOL m_bForceClear;
-
- CPDF_ColorSpaceMap m_ColorSpaceMap;
- CPDF_FontFileMap m_FontFileMap;
- CPDF_FontMap m_FontMap;
- CPDF_IccProfileMap m_IccProfileMap;
- CPDF_ImageMap m_ImageMap;
- CPDF_PatternMap m_PatternMap;
+class CPDF_DocPageData {
+ public:
+ explicit CPDF_DocPageData(CPDF_Document* pPDFDoc);
+ ~CPDF_DocPageData();
+
+ void Clear(FX_BOOL bRelease = FALSE);
+ CPDF_Font* GetFont(CPDF_Dictionary* pFontDict, FX_BOOL findOnly);
+ CPDF_Font* GetStandardFont(const CFX_ByteStringC& fontName,
+ CPDF_FontEncoding* pEncoding);
+ void ReleaseFont(CPDF_Dictionary* pFontDict);
+ CPDF_ColorSpace* GetColorSpace(CPDF_Object* pCSObj,
+ CPDF_Dictionary* pResources);
+ CPDF_ColorSpace* GetCopiedColorSpace(CPDF_Object* pCSObj);
+ void ReleaseColorSpace(CPDF_Object* pColorSpace);
+ CPDF_Pattern* GetPattern(CPDF_Object* pPatternObj,
+ FX_BOOL bShading,
+ const CFX_AffineMatrix* matrix);
+ void ReleasePattern(CPDF_Object* pPatternObj);
+ CPDF_Image* GetImage(CPDF_Object* pImageStream);
+ void ReleaseImage(CPDF_Object* pImageStream);
+ CPDF_IccProfile* GetIccProfile(CPDF_Stream* pIccProfileStream);
+ void ReleaseIccProfile(CPDF_IccProfile* pIccProfile);
+ CPDF_StreamAcc* GetFontFileStreamAcc(CPDF_Stream* pFontStream);
+ void ReleaseFontFileStreamAcc(CPDF_Stream* pFontStream,
+ FX_BOOL bForce = FALSE);
+ FX_BOOL IsForceClear() const { return m_bForceClear; }
+ CPDF_CountedColorSpace* FindColorSpacePtr(CPDF_Object* pCSObj) const;
+ CPDF_CountedPattern* FindPatternPtr(CPDF_Object* pPatternObj) const;
+
+ private:
+ using CPDF_CountedFont = CPDF_CountedObject<CPDF_Font>;
+ using CPDF_CountedIccProfile = CPDF_CountedObject<CPDF_IccProfile>;
+ using CPDF_CountedImage = CPDF_CountedObject<CPDF_Image>;
+ using CPDF_CountedStreamAcc = CPDF_CountedObject<CPDF_StreamAcc>;
+
+ using CPDF_ColorSpaceMap = std::map<CPDF_Object*, CPDF_CountedColorSpace*>;
+ using CPDF_FontFileMap = std::map<CPDF_Stream*, CPDF_CountedStreamAcc*>;
+ using CPDF_FontMap = std::map<CPDF_Dictionary*, CPDF_CountedFont*>;
+ using CPDF_IccProfileMap = std::map<CPDF_Stream*, CPDF_CountedIccProfile*>;
+ using CPDF_ImageMap = std::map<FX_DWORD, CPDF_CountedImage*>;
+ using CPDF_PatternMap = std::map<CPDF_Object*, CPDF_CountedPattern*>;
+
+ CPDF_Document* const m_pPDFDoc;
+ CFX_MapByteStringToPtr m_HashProfileMap;
+ FX_BOOL m_bForceClear;
+
+ CPDF_ColorSpaceMap m_ColorSpaceMap;
+ CPDF_FontFileMap m_FontFileMap;
+ CPDF_FontMap m_FontMap;
+ CPDF_IccProfileMap m_IccProfileMap;
+ CPDF_ImageMap m_ImageMap;
+ CPDF_PatternMap m_PatternMap;
};
-class CPDF_Function
-{
-public:
- static CPDF_Function* Load(CPDF_Object* pFuncObj);
- virtual ~CPDF_Function();
- FX_BOOL Call(FX_FLOAT* inputs, int ninputs, FX_FLOAT* results, int& nresults) const;
- int CountInputs()
- {
- return m_nInputs;
- }
- int CountOutputs()
- {
- return m_nOutputs;
- }
-protected:
- CPDF_Function();
- int m_nInputs, m_nOutputs;
- FX_FLOAT* m_pDomains;
- FX_FLOAT* m_pRanges;
- FX_BOOL Init(CPDF_Object* pObj);
- virtual FX_BOOL v_Init(CPDF_Object* pObj) = 0;
- virtual FX_BOOL v_Call(FX_FLOAT* inputs, FX_FLOAT* results) const = 0;
+class CPDF_Function {
+ public:
+ static CPDF_Function* Load(CPDF_Object* pFuncObj);
+ virtual ~CPDF_Function();
+ FX_BOOL Call(FX_FLOAT* inputs,
+ int ninputs,
+ FX_FLOAT* results,
+ int& nresults) const;
+ int CountInputs() { return m_nInputs; }
+ int CountOutputs() { return m_nOutputs; }
+
+ protected:
+ CPDF_Function();
+ int m_nInputs, m_nOutputs;
+ FX_FLOAT* m_pDomains;
+ FX_FLOAT* m_pRanges;
+ FX_BOOL Init(CPDF_Object* pObj);
+ virtual FX_BOOL v_Init(CPDF_Object* pObj) = 0;
+ virtual FX_BOOL v_Call(FX_FLOAT* inputs, FX_FLOAT* results) const = 0;
};
-class CPDF_IccProfile
-{
-public:
- CPDF_IccProfile(const uint8_t* pData, FX_DWORD dwSize);
- ~CPDF_IccProfile();
- int32_t GetComponents() const { return m_nSrcComponents; }
- FX_BOOL m_bsRGB;
- void* m_pTransform;
-private:
- int32_t m_nSrcComponents;
+class CPDF_IccProfile {
+ public:
+ CPDF_IccProfile(const uint8_t* pData, FX_DWORD dwSize);
+ ~CPDF_IccProfile();
+ int32_t GetComponents() const { return m_nSrcComponents; }
+ FX_BOOL m_bsRGB;
+ void* m_pTransform;
+
+ private:
+ int32_t m_nSrcComponents;
};
-class CPDF_DeviceCS : public CPDF_ColorSpace
-{
-public:
- CPDF_DeviceCS(CPDF_Document* pDoc, int family);
-
- FX_BOOL GetRGB(FX_FLOAT* pBuf,
- FX_FLOAT& R,
- FX_FLOAT& G,
- FX_FLOAT& B) const override;
- FX_BOOL SetRGB(FX_FLOAT* pBuf,
- FX_FLOAT R,
- FX_FLOAT G,
- FX_FLOAT B) const override;
- FX_BOOL v_GetCMYK(FX_FLOAT* pBuf,
- FX_FLOAT& c,
- FX_FLOAT& m,
- FX_FLOAT& y,
- FX_FLOAT& k) const override;
- FX_BOOL v_SetCMYK(FX_FLOAT* pBuf,
- FX_FLOAT c,
- FX_FLOAT m,
- FX_FLOAT y,
- FX_FLOAT k) const override;
- void TranslateImageLine(uint8_t* pDestBuf,
- const uint8_t* pSrcBuf,
- int pixels,
- int image_width,
- int image_height,
- FX_BOOL bTransMask = FALSE) const override;
+class CPDF_DeviceCS : public CPDF_ColorSpace {
+ public:
+ CPDF_DeviceCS(CPDF_Document* pDoc, int family);
+
+ FX_BOOL GetRGB(FX_FLOAT* pBuf,
+ FX_FLOAT& R,
+ FX_FLOAT& G,
+ FX_FLOAT& B) const override;
+ FX_BOOL SetRGB(FX_FLOAT* pBuf,
+ FX_FLOAT R,
+ FX_FLOAT G,
+ FX_FLOAT B) const override;
+ FX_BOOL v_GetCMYK(FX_FLOAT* pBuf,
+ FX_FLOAT& c,
+ FX_FLOAT& m,
+ FX_FLOAT& y,
+ FX_FLOAT& k) const override;
+ FX_BOOL v_SetCMYK(FX_FLOAT* pBuf,
+ FX_FLOAT c,
+ FX_FLOAT m,
+ FX_FLOAT y,
+ FX_FLOAT k) const override;
+ void TranslateImageLine(uint8_t* pDestBuf,
+ const uint8_t* pSrcBuf,
+ int pixels,
+ int image_width,
+ int image_height,
+ FX_BOOL bTransMask = FALSE) const override;
};
-class CPDF_PatternCS : public CPDF_ColorSpace
-{
-public:
- explicit CPDF_PatternCS(CPDF_Document* pDoc)
- : CPDF_ColorSpace(pDoc, PDFCS_PATTERN, 1),
- m_pBaseCS(nullptr),
- m_pCountedBaseCS(nullptr) {
- }
- ~CPDF_PatternCS() override;
- FX_BOOL v_Load(CPDF_Document* pDoc, CPDF_Array* pArray) override;
- FX_BOOL GetRGB(FX_FLOAT* pBuf,
- FX_FLOAT& R,
- FX_FLOAT& G,
- FX_FLOAT& B) const override;
- CPDF_ColorSpace* GetBaseCS() const override;
-
-private:
- CPDF_ColorSpace* m_pBaseCS;
- CPDF_CountedColorSpace* m_pCountedBaseCS;
+class CPDF_PatternCS : public CPDF_ColorSpace {
+ public:
+ explicit CPDF_PatternCS(CPDF_Document* pDoc)
+ : CPDF_ColorSpace(pDoc, PDFCS_PATTERN, 1),
+ m_pBaseCS(nullptr),
+ m_pCountedBaseCS(nullptr) {}
+ ~CPDF_PatternCS() override;
+ FX_BOOL v_Load(CPDF_Document* pDoc, CPDF_Array* pArray) override;
+ FX_BOOL GetRGB(FX_FLOAT* pBuf,
+ FX_FLOAT& R,
+ FX_FLOAT& G,
+ FX_FLOAT& B) const override;
+ CPDF_ColorSpace* GetBaseCS() const override;
+
+ private:
+ CPDF_ColorSpace* m_pBaseCS;
+ CPDF_CountedColorSpace* m_pCountedBaseCS;
};
#endif // CORE_SRC_FPDFAPI_FPDF_PAGE_PAGEINT_H_
diff --git a/core/src/fpdfapi/fpdf_parser/filters_int.h b/core/src/fpdfapi/fpdf_parser/filters_int.h
index 2ec54fb1f5..571801481d 100644
--- a/core/src/fpdfapi/fpdf_parser/filters_int.h
+++ b/core/src/fpdfapi/fpdf_parser/filters_int.h
@@ -7,120 +7,139 @@
#ifndef CORE_SRC_FPDFAPI_FPDF_PARSER_FILTERS_INT_H_
#define CORE_SRC_FPDFAPI_FPDF_PARSER_FILTERS_INT_H_
-class CPDF_DecryptFilter : public CFX_DataFilter
-{
-public:
- CPDF_DecryptFilter(CPDF_CryptoHandler* pCryptoHandler, FX_DWORD objnum, FX_DWORD gennum);
- virtual ~CPDF_DecryptFilter();
- virtual void v_FilterIn(const uint8_t* src_buf, FX_DWORD src_size, CFX_BinaryBuf& dest_buf);
- virtual void v_FilterFinish(CFX_BinaryBuf& dest_buf);
- CPDF_CryptoHandler* m_pCryptoHandler;
- void* m_pContext;
- FX_DWORD m_ObjNum, m_GenNum;
+class CPDF_DecryptFilter : public CFX_DataFilter {
+ public:
+ CPDF_DecryptFilter(CPDF_CryptoHandler* pCryptoHandler,
+ FX_DWORD objnum,
+ FX_DWORD gennum);
+ virtual ~CPDF_DecryptFilter();
+ virtual void v_FilterIn(const uint8_t* src_buf,
+ FX_DWORD src_size,
+ CFX_BinaryBuf& dest_buf);
+ virtual void v_FilterFinish(CFX_BinaryBuf& dest_buf);
+ CPDF_CryptoHandler* m_pCryptoHandler;
+ void* m_pContext;
+ FX_DWORD m_ObjNum, m_GenNum;
};
-class CPDF_FlateFilter : public CFX_DataFilter
-{
-public:
- CPDF_FlateFilter();
- virtual ~CPDF_FlateFilter();
- virtual void v_FilterIn(const uint8_t* src_buf, FX_DWORD src_size, CFX_BinaryBuf& dest_buf);
- virtual void v_FilterFinish(CFX_BinaryBuf& dest_buf) {}
- void* m_pContext;
- uint8_t m_DestBuffer[FPDF_FILTER_BUFFER_SIZE];
+class CPDF_FlateFilter : public CFX_DataFilter {
+ public:
+ CPDF_FlateFilter();
+ virtual ~CPDF_FlateFilter();
+ virtual void v_FilterIn(const uint8_t* src_buf,
+ FX_DWORD src_size,
+ CFX_BinaryBuf& dest_buf);
+ virtual void v_FilterFinish(CFX_BinaryBuf& dest_buf) {}
+ void* m_pContext;
+ uint8_t m_DestBuffer[FPDF_FILTER_BUFFER_SIZE];
};
-class CPDF_LzwFilter : public CFX_DataFilter
-{
-public:
- CPDF_LzwFilter(FX_BOOL bEarlyChange);
- virtual ~CPDF_LzwFilter() {}
- virtual void v_FilterIn(const uint8_t* src_buf, FX_DWORD src_size, CFX_BinaryBuf& dest_buf);
- virtual void v_FilterFinish(CFX_BinaryBuf& dest_buf) {}
- FX_BOOL m_bEarlyChange;
- FX_DWORD m_CodeArray[5021];
- FX_DWORD m_nCodes;
- FX_DWORD m_CodeLen;
- FX_DWORD m_OldCode;
- uint8_t m_LastChar;
- FX_DWORD m_nLeftBits, m_LeftBits;
- uint8_t m_DecodeStack[4000];
- FX_DWORD m_StackLen;
- void AddCode(FX_DWORD prefix_code, uint8_t append_char);
- void DecodeString(FX_DWORD code);
+class CPDF_LzwFilter : public CFX_DataFilter {
+ public:
+ CPDF_LzwFilter(FX_BOOL bEarlyChange);
+ virtual ~CPDF_LzwFilter() {}
+ virtual void v_FilterIn(const uint8_t* src_buf,
+ FX_DWORD src_size,
+ CFX_BinaryBuf& dest_buf);
+ virtual void v_FilterFinish(CFX_BinaryBuf& dest_buf) {}
+ FX_BOOL m_bEarlyChange;
+ FX_DWORD m_CodeArray[5021];
+ FX_DWORD m_nCodes;
+ FX_DWORD m_CodeLen;
+ FX_DWORD m_OldCode;
+ uint8_t m_LastChar;
+ FX_DWORD m_nLeftBits, m_LeftBits;
+ uint8_t m_DecodeStack[4000];
+ FX_DWORD m_StackLen;
+ void AddCode(FX_DWORD prefix_code, uint8_t append_char);
+ void DecodeString(FX_DWORD code);
};
-class CPDF_PredictorFilter : public CFX_DataFilter
-{
-public:
- CPDF_PredictorFilter(int predictor, int colors, int bpc, int cols);
- virtual ~CPDF_PredictorFilter();
- virtual void v_FilterIn(const uint8_t* src_buf, FX_DWORD src_size, CFX_BinaryBuf& dest_buf);
- virtual void v_FilterFinish(CFX_BinaryBuf& dest_buf) {}
- FX_BOOL m_bTiff;
- FX_DWORD m_Pitch, m_Bpp;
- uint8_t* m_pRefLine;
- uint8_t* m_pCurLine;
- FX_DWORD m_iLine, m_LineInSize;
+class CPDF_PredictorFilter : public CFX_DataFilter {
+ public:
+ CPDF_PredictorFilter(int predictor, int colors, int bpc, int cols);
+ virtual ~CPDF_PredictorFilter();
+ virtual void v_FilterIn(const uint8_t* src_buf,
+ FX_DWORD src_size,
+ CFX_BinaryBuf& dest_buf);
+ virtual void v_FilterFinish(CFX_BinaryBuf& dest_buf) {}
+ FX_BOOL m_bTiff;
+ FX_DWORD m_Pitch, m_Bpp;
+ uint8_t* m_pRefLine;
+ uint8_t* m_pCurLine;
+ FX_DWORD m_iLine, m_LineInSize;
};
-class CPDF_AsciiHexFilter : public CFX_DataFilter
-{
-public:
- CPDF_AsciiHexFilter();
- virtual ~CPDF_AsciiHexFilter() {}
- virtual void v_FilterIn(const uint8_t* src_buf, FX_DWORD src_size, CFX_BinaryBuf& dest_buf);
- virtual void v_FilterFinish(CFX_BinaryBuf& dest_buf) {}
- int m_State;
- int m_FirstDigit;
+class CPDF_AsciiHexFilter : public CFX_DataFilter {
+ public:
+ CPDF_AsciiHexFilter();
+ virtual ~CPDF_AsciiHexFilter() {}
+ virtual void v_FilterIn(const uint8_t* src_buf,
+ FX_DWORD src_size,
+ CFX_BinaryBuf& dest_buf);
+ virtual void v_FilterFinish(CFX_BinaryBuf& dest_buf) {}
+ int m_State;
+ int m_FirstDigit;
};
-class CPDF_Ascii85Filter : public CFX_DataFilter
-{
-public:
- CPDF_Ascii85Filter();
- virtual ~CPDF_Ascii85Filter() {}
- virtual void v_FilterIn(const uint8_t* src_buf, FX_DWORD src_size, CFX_BinaryBuf& dest_buf);
- virtual void v_FilterFinish(CFX_BinaryBuf& dest_buf) {}
- int m_State;
- int m_CharCount;
- FX_DWORD m_CurDWord;
+class CPDF_Ascii85Filter : public CFX_DataFilter {
+ public:
+ CPDF_Ascii85Filter();
+ virtual ~CPDF_Ascii85Filter() {}
+ virtual void v_FilterIn(const uint8_t* src_buf,
+ FX_DWORD src_size,
+ CFX_BinaryBuf& dest_buf);
+ virtual void v_FilterFinish(CFX_BinaryBuf& dest_buf) {}
+ int m_State;
+ int m_CharCount;
+ FX_DWORD m_CurDWord;
};
-class CPDF_RunLenFilter : public CFX_DataFilter
-{
-public:
- CPDF_RunLenFilter();
- virtual ~CPDF_RunLenFilter() {}
- virtual void v_FilterIn(const uint8_t* src_buf, FX_DWORD src_size, CFX_BinaryBuf& dest_buf);
- virtual void v_FilterFinish(CFX_BinaryBuf& dest_buf) {}
- int m_State;
- FX_DWORD m_Count;
+class CPDF_RunLenFilter : public CFX_DataFilter {
+ public:
+ CPDF_RunLenFilter();
+ virtual ~CPDF_RunLenFilter() {}
+ virtual void v_FilterIn(const uint8_t* src_buf,
+ FX_DWORD src_size,
+ CFX_BinaryBuf& dest_buf);
+ virtual void v_FilterFinish(CFX_BinaryBuf& dest_buf) {}
+ int m_State;
+ FX_DWORD m_Count;
};
-class CPDF_JpegFilter : public CFX_DataFilter
-{
-public:
- CPDF_JpegFilter();
- virtual ~CPDF_JpegFilter();
- virtual void v_FilterIn(const uint8_t* src_buf, FX_DWORD src_size, CFX_BinaryBuf& dest_buf);
- virtual void v_FilterFinish(CFX_BinaryBuf& dest_buf) {}
- void* m_pContext;
- CFX_BinaryBuf m_InputBuf;
- uint8_t* m_pScanline;
- int m_Pitch, m_Height, m_Width, m_nComps, m_iLine;
- FX_BOOL m_bGotHeader;
+class CPDF_JpegFilter : public CFX_DataFilter {
+ public:
+ CPDF_JpegFilter();
+ virtual ~CPDF_JpegFilter();
+ virtual void v_FilterIn(const uint8_t* src_buf,
+ FX_DWORD src_size,
+ CFX_BinaryBuf& dest_buf);
+ virtual void v_FilterFinish(CFX_BinaryBuf& dest_buf) {}
+ void* m_pContext;
+ CFX_BinaryBuf m_InputBuf;
+ uint8_t* m_pScanline;
+ int m_Pitch, m_Height, m_Width, m_nComps, m_iLine;
+ FX_BOOL m_bGotHeader;
};
-class CPDF_FaxFilter : public CFX_DataFilter
-{
-public:
- CPDF_FaxFilter();
- virtual ~CPDF_FaxFilter();
- FX_BOOL Initialize(int Encoding, int bEndOfLine, int bByteAlign, int bBlack, int nRows, int nColumns);
- virtual void v_FilterIn(const uint8_t* src_buf, FX_DWORD src_size, CFX_BinaryBuf& dest_buf);
- virtual void v_FilterFinish(CFX_BinaryBuf& dest_buf);
- int m_Encoding, m_bEndOfLine, m_bByteAlign, m_bBlack;
- int m_nRows, m_nColumns, m_Pitch, m_iRow;
- uint8_t* m_pScanlineBuf;
- uint8_t* m_pRefBuf;
- CFX_BinaryBuf m_InputBuf;
- int m_InputBitPos;
- void ProcessData(const uint8_t* src_buf, FX_DWORD src_size, int& bitpos, FX_BOOL bFinish,
- CFX_BinaryBuf& dest_buf);
- FX_BOOL ReadLine(const uint8_t* src_buf, int bitsize, int& bitpos);
+class CPDF_FaxFilter : public CFX_DataFilter {
+ public:
+ CPDF_FaxFilter();
+ virtual ~CPDF_FaxFilter();
+ FX_BOOL Initialize(int Encoding,
+ int bEndOfLine,
+ int bByteAlign,
+ int bBlack,
+ int nRows,
+ int nColumns);
+ virtual void v_FilterIn(const uint8_t* src_buf,
+ FX_DWORD src_size,
+ CFX_BinaryBuf& dest_buf);
+ virtual void v_FilterFinish(CFX_BinaryBuf& dest_buf);
+ int m_Encoding, m_bEndOfLine, m_bByteAlign, m_bBlack;
+ int m_nRows, m_nColumns, m_Pitch, m_iRow;
+ uint8_t* m_pScanlineBuf;
+ uint8_t* m_pRefBuf;
+ CFX_BinaryBuf m_InputBuf;
+ int m_InputBitPos;
+ void ProcessData(const uint8_t* src_buf,
+ FX_DWORD src_size,
+ int& bitpos,
+ FX_BOOL bFinish,
+ CFX_BinaryBuf& dest_buf);
+ FX_BOOL ReadLine(const uint8_t* src_buf, int bitsize, int& bitpos);
};
#endif // CORE_SRC_FPDFAPI_FPDF_PARSER_FILTERS_INT_H_
diff --git a/core/src/fpdfapi/fpdf_parser/fpdf_parser_decode.cpp b/core/src/fpdfapi/fpdf_parser/fpdf_parser_decode.cpp
index 47c08fb4a3..85ba130b77 100644
--- a/core/src/fpdfapi/fpdf_parser/fpdf_parser_decode.cpp
+++ b/core/src/fpdfapi/fpdf_parser/fpdf_parser_decode.cpp
@@ -8,520 +8,575 @@
#include "../../../include/fpdfapi/fpdf_module.h"
#include "../../../include/fxcodec/fx_codec.h"
#include <limits.h>
-#define _STREAM_MAX_SIZE_ 20 * 1024 * 1024
-FX_DWORD _A85Decode(const uint8_t* src_buf, FX_DWORD src_size, uint8_t*& dest_buf, FX_DWORD& dest_size)
-{
- dest_size = 0;
- dest_buf = NULL;
- if (src_size == 0) {
- return 0;
- }
- FX_DWORD zcount = 0;
- FX_DWORD pos = 0;
- while (pos < src_size) {
- uint8_t ch = src_buf[pos];
- if (ch < '!' && ch != '\n' && ch != '\r' && ch != ' ' && ch != '\t') {
- break;
- }
- if (ch == 'z') {
- zcount ++;
- } else if (ch > 'u') {
- break;
- }
- pos ++;
- }
- if (pos == 0) {
- return 0;
- }
- if (zcount > UINT_MAX / 4) {
- return (FX_DWORD) - 1;
- }
- if (zcount * 4 > UINT_MAX - (pos - zcount)) {
- return (FX_DWORD) - 1;
- }
- dest_buf = FX_Alloc(uint8_t, zcount * 4 + (pos - zcount));
- int state = 0;
- uint32_t res = 0;
- pos = dest_size = 0;
- while (pos < src_size) {
- uint8_t ch = src_buf[pos++];
- if (ch == '\n' || ch == '\r' || ch == ' ' || ch == '\t') {
- continue;
- }
- if (ch == 'z') {
- FXSYS_memset(dest_buf + dest_size, 0, 4);
- state = 0;
- res = 0;
- dest_size += 4;
- } else {
- if (ch < '!' || ch > 'u') {
- break;
- }
- res = res * 85 + ch - 33;
- state ++;
- if (state == 5) {
- for (int i = 0; i < 4; i ++) {
- dest_buf[dest_size++] = (uint8_t)(res >> (3 - i) * 8);
- }
- state = 0;
- res = 0;
- }
- }
- }
- if (state) {
- int i;
- for (i = state; i < 5; i ++) {
- res = res * 85 + 84;
- }
- for (i = 0; i < state - 1; i ++) {
- dest_buf[dest_size++] = (uint8_t)(res >> (3 - i) * 8);
+#define _STREAM_MAX_SIZE_ 20 * 1024 * 1024
+FX_DWORD _A85Decode(const uint8_t* src_buf,
+ FX_DWORD src_size,
+ uint8_t*& dest_buf,
+ FX_DWORD& dest_size) {
+ dest_size = 0;
+ dest_buf = NULL;
+ if (src_size == 0) {
+ return 0;
+ }
+ FX_DWORD zcount = 0;
+ FX_DWORD pos = 0;
+ while (pos < src_size) {
+ uint8_t ch = src_buf[pos];
+ if (ch < '!' && ch != '\n' && ch != '\r' && ch != ' ' && ch != '\t') {
+ break;
+ }
+ if (ch == 'z') {
+ zcount++;
+ } else if (ch > 'u') {
+ break;
+ }
+ pos++;
+ }
+ if (pos == 0) {
+ return 0;
+ }
+ if (zcount > UINT_MAX / 4) {
+ return (FX_DWORD)-1;
+ }
+ if (zcount * 4 > UINT_MAX - (pos - zcount)) {
+ return (FX_DWORD)-1;
+ }
+ dest_buf = FX_Alloc(uint8_t, zcount * 4 + (pos - zcount));
+ int state = 0;
+ uint32_t res = 0;
+ pos = dest_size = 0;
+ while (pos < src_size) {
+ uint8_t ch = src_buf[pos++];
+ if (ch == '\n' || ch == '\r' || ch == ' ' || ch == '\t') {
+ continue;
+ }
+ if (ch == 'z') {
+ FXSYS_memset(dest_buf + dest_size, 0, 4);
+ state = 0;
+ res = 0;
+ dest_size += 4;
+ } else {
+ if (ch < '!' || ch > 'u') {
+ break;
+ }
+ res = res * 85 + ch - 33;
+ state++;
+ if (state == 5) {
+ for (int i = 0; i < 4; i++) {
+ dest_buf[dest_size++] = (uint8_t)(res >> (3 - i) * 8);
}
- }
- if (pos < src_size && src_buf[pos] == '>') {
- pos ++;
- }
- return pos;
+ state = 0;
+ res = 0;
+ }
+ }
+ }
+ if (state) {
+ int i;
+ for (i = state; i < 5; i++) {
+ res = res * 85 + 84;
+ }
+ for (i = 0; i < state - 1; i++) {
+ dest_buf[dest_size++] = (uint8_t)(res >> (3 - i) * 8);
+ }
+ }
+ if (pos < src_size && src_buf[pos] == '>') {
+ pos++;
+ }
+ return pos;
}
-FX_DWORD _HexDecode(const uint8_t* src_buf, FX_DWORD src_size, uint8_t*& dest_buf, FX_DWORD& dest_size)
-{
- FX_DWORD i;
- for (i = 0; i < src_size; i ++)
- if (src_buf[i] == '>') {
- break;
- }
- dest_buf = FX_Alloc( uint8_t, i / 2 + 1);
- dest_size = 0;
- FX_BOOL bFirstDigit = TRUE;
- for (i = 0; i < src_size; i ++) {
- uint8_t ch = src_buf[i];
- if (ch == ' ' || ch == '\n' || ch == '\t' || ch == '\r') {
- continue;
- }
- int digit;
- if (ch <= '9' && ch >= '0') {
- digit = ch - '0';
- } else if (ch <= 'f' && ch >= 'a') {
- digit = ch - 'a' + 10;
- } else if (ch <= 'F' && ch >= 'A') {
- digit = ch - 'A' + 10;
- } else if (ch == '>') {
- i ++;
- break;
- } else {
- continue;
- }
- if (bFirstDigit) {
- dest_buf[dest_size] = digit * 16;
- } else {
- dest_buf[dest_size ++] += digit;
- }
- bFirstDigit = !bFirstDigit;
- }
- if (!bFirstDigit) {
- dest_size ++;
+FX_DWORD _HexDecode(const uint8_t* src_buf,
+ FX_DWORD src_size,
+ uint8_t*& dest_buf,
+ FX_DWORD& dest_size) {
+ FX_DWORD i;
+ for (i = 0; i < src_size; i++)
+ if (src_buf[i] == '>') {
+ break;
+ }
+ dest_buf = FX_Alloc(uint8_t, i / 2 + 1);
+ dest_size = 0;
+ FX_BOOL bFirstDigit = TRUE;
+ for (i = 0; i < src_size; i++) {
+ uint8_t ch = src_buf[i];
+ if (ch == ' ' || ch == '\n' || ch == '\t' || ch == '\r') {
+ continue;
+ }
+ int digit;
+ if (ch <= '9' && ch >= '0') {
+ digit = ch - '0';
+ } else if (ch <= 'f' && ch >= 'a') {
+ digit = ch - 'a' + 10;
+ } else if (ch <= 'F' && ch >= 'A') {
+ digit = ch - 'A' + 10;
+ } else if (ch == '>') {
+ i++;
+ break;
+ } else {
+ continue;
}
- return i;
+ if (bFirstDigit) {
+ dest_buf[dest_size] = digit * 16;
+ } else {
+ dest_buf[dest_size++] += digit;
+ }
+ bFirstDigit = !bFirstDigit;
+ }
+ if (!bFirstDigit) {
+ dest_size++;
+ }
+ return i;
}
-FX_DWORD RunLengthDecode(const uint8_t* src_buf, FX_DWORD src_size, uint8_t*& dest_buf, FX_DWORD& dest_size)
-{
- FX_DWORD i = 0;
- FX_DWORD old;
- dest_size = 0;
- while (i < src_size) {
- if (src_buf[i] < 128) {
- old = dest_size;
- dest_size += src_buf[i] + 1;
- if (dest_size < old) {
- return (FX_DWORD) - 1;
- }
- i += src_buf[i] + 2;
- } else if (src_buf[i] > 128) {
- old = dest_size;
- dest_size += 257 - src_buf[i];
- if (dest_size < old) {
- return (FX_DWORD) - 1;
- }
- i += 2;
- } else {
- break;
- }
- }
- if (dest_size >= _STREAM_MAX_SIZE_) {
- return -1;
- }
- dest_buf = FX_Alloc( uint8_t, dest_size);
- i = 0;
- int dest_count = 0;
- while (i < src_size) {
- if (src_buf[i] < 128) {
- FX_DWORD copy_len = src_buf[i] + 1;
- FX_DWORD buf_left = src_size - i - 1;
- if (buf_left < copy_len) {
- FX_DWORD delta = copy_len - buf_left;
- copy_len = buf_left;
- FXSYS_memset(dest_buf + dest_count + copy_len, '\0', delta);
- }
- FXSYS_memcpy(dest_buf + dest_count, src_buf + i + 1, copy_len);
- dest_count += src_buf[i] + 1;
- i += src_buf[i] + 2;
- } else if (src_buf[i] > 128) {
- int fill = 0;
- if (i < src_size - 1) {
- fill = src_buf[i + 1];
- }
- FXSYS_memset(dest_buf + dest_count, fill, 257 - src_buf[i]);
- dest_count += 257 - src_buf[i];
- i += 2;
- } else {
- break;
- }
- }
- FX_DWORD ret = i + 1;
- if (ret > src_size) {
- ret = src_size;
- }
- return ret;
+FX_DWORD RunLengthDecode(const uint8_t* src_buf,
+ FX_DWORD src_size,
+ uint8_t*& dest_buf,
+ FX_DWORD& dest_size) {
+ FX_DWORD i = 0;
+ FX_DWORD old;
+ dest_size = 0;
+ while (i < src_size) {
+ if (src_buf[i] < 128) {
+ old = dest_size;
+ dest_size += src_buf[i] + 1;
+ if (dest_size < old) {
+ return (FX_DWORD)-1;
+ }
+ i += src_buf[i] + 2;
+ } else if (src_buf[i] > 128) {
+ old = dest_size;
+ dest_size += 257 - src_buf[i];
+ if (dest_size < old) {
+ return (FX_DWORD)-1;
+ }
+ i += 2;
+ } else {
+ break;
+ }
+ }
+ if (dest_size >= _STREAM_MAX_SIZE_) {
+ return -1;
+ }
+ dest_buf = FX_Alloc(uint8_t, dest_size);
+ i = 0;
+ int dest_count = 0;
+ while (i < src_size) {
+ if (src_buf[i] < 128) {
+ FX_DWORD copy_len = src_buf[i] + 1;
+ FX_DWORD buf_left = src_size - i - 1;
+ if (buf_left < copy_len) {
+ FX_DWORD delta = copy_len - buf_left;
+ copy_len = buf_left;
+ FXSYS_memset(dest_buf + dest_count + copy_len, '\0', delta);
+ }
+ FXSYS_memcpy(dest_buf + dest_count, src_buf + i + 1, copy_len);
+ dest_count += src_buf[i] + 1;
+ i += src_buf[i] + 2;
+ } else if (src_buf[i] > 128) {
+ int fill = 0;
+ if (i < src_size - 1) {
+ fill = src_buf[i + 1];
+ }
+ FXSYS_memset(dest_buf + dest_count, fill, 257 - src_buf[i]);
+ dest_count += 257 - src_buf[i];
+ i += 2;
+ } else {
+ break;
+ }
+ }
+ FX_DWORD ret = i + 1;
+ if (ret > src_size) {
+ ret = src_size;
+ }
+ return ret;
}
-ICodec_ScanlineDecoder* FPDFAPI_CreateFaxDecoder(const uint8_t* src_buf, FX_DWORD src_size, int width, int height,
- const CPDF_Dictionary* pParams)
-{
- int K = 0;
- FX_BOOL EndOfLine = FALSE;
- FX_BOOL ByteAlign = FALSE;
- FX_BOOL BlackIs1 = FALSE;
- int Columns = 1728;
- int Rows = 0;
- if (pParams) {
- K = pParams->GetInteger(FX_BSTRC("K"));
- EndOfLine = pParams->GetInteger(FX_BSTRC("EndOfLine"));
- ByteAlign = pParams->GetInteger(FX_BSTRC("EncodedByteAlign"));
- BlackIs1 = pParams->GetInteger(FX_BSTRC("BlackIs1"));
- Columns = pParams->GetInteger(FX_BSTRC("Columns"), 1728);
- Rows = pParams->GetInteger(FX_BSTRC("Rows"));
- if (Rows > USHRT_MAX) {
- Rows = 0;
- }
- if (Columns <= 0 || Rows < 0 || Columns > USHRT_MAX || Rows > USHRT_MAX) {
- return NULL;
- }
- }
- return CPDF_ModuleMgr::Get()->GetFaxModule()->CreateDecoder(src_buf, src_size, width, height,
- K, EndOfLine, ByteAlign, BlackIs1, Columns, Rows);
+ICodec_ScanlineDecoder* FPDFAPI_CreateFaxDecoder(
+ const uint8_t* src_buf,
+ FX_DWORD src_size,
+ int width,
+ int height,
+ const CPDF_Dictionary* pParams) {
+ int K = 0;
+ FX_BOOL EndOfLine = FALSE;
+ FX_BOOL ByteAlign = FALSE;
+ FX_BOOL BlackIs1 = FALSE;
+ int Columns = 1728;
+ int Rows = 0;
+ if (pParams) {
+ K = pParams->GetInteger(FX_BSTRC("K"));
+ EndOfLine = pParams->GetInteger(FX_BSTRC("EndOfLine"));
+ ByteAlign = pParams->GetInteger(FX_BSTRC("EncodedByteAlign"));
+ BlackIs1 = pParams->GetInteger(FX_BSTRC("BlackIs1"));
+ Columns = pParams->GetInteger(FX_BSTRC("Columns"), 1728);
+ Rows = pParams->GetInteger(FX_BSTRC("Rows"));
+ if (Rows > USHRT_MAX) {
+ Rows = 0;
+ }
+ if (Columns <= 0 || Rows < 0 || Columns > USHRT_MAX || Rows > USHRT_MAX) {
+ return NULL;
+ }
+ }
+ return CPDF_ModuleMgr::Get()->GetFaxModule()->CreateDecoder(
+ src_buf, src_size, width, height, K, EndOfLine, ByteAlign, BlackIs1,
+ Columns, Rows);
}
-static FX_BOOL CheckFlateDecodeParams(int Colors, int BitsPerComponent, int Columns)
-{
- if (Columns < 0) {
- return FALSE;
- }
- int check = Columns;
- if (Colors < 0 || (check > 0 && Colors > INT_MAX / check)) {
- return FALSE;
- }
- check *= Colors;
- if (BitsPerComponent < 0 ||
- (check > 0 && BitsPerComponent > INT_MAX / check)) {
- return FALSE;
- }
- check *= BitsPerComponent;
- if (check > INT_MAX - 7) {
- return FALSE;
- }
- return TRUE;
+static FX_BOOL CheckFlateDecodeParams(int Colors,
+ int BitsPerComponent,
+ int Columns) {
+ if (Columns < 0) {
+ return FALSE;
+ }
+ int check = Columns;
+ if (Colors < 0 || (check > 0 && Colors > INT_MAX / check)) {
+ return FALSE;
+ }
+ check *= Colors;
+ if (BitsPerComponent < 0 ||
+ (check > 0 && BitsPerComponent > INT_MAX / check)) {
+ return FALSE;
+ }
+ check *= BitsPerComponent;
+ if (check > INT_MAX - 7) {
+ return FALSE;
+ }
+ return TRUE;
}
-ICodec_ScanlineDecoder* FPDFAPI_CreateFlateDecoder(const uint8_t* src_buf, FX_DWORD src_size, int width, int height,
- int nComps, int bpc, const CPDF_Dictionary* pParams)
-{
- int predictor = 0;
- int Colors = 0, BitsPerComponent = 0, Columns = 0;
- if (pParams) {
- predictor = ((CPDF_Dictionary*)pParams)->GetInteger(FX_BSTRC("Predictor"));
- Colors = pParams->GetInteger(FX_BSTRC("Colors"), 1);
- BitsPerComponent = pParams->GetInteger(FX_BSTRC("BitsPerComponent"), 8);
- Columns = pParams->GetInteger(FX_BSTRC("Columns"), 1);
- if (!CheckFlateDecodeParams(Colors, BitsPerComponent, Columns)) {
- return NULL;
- }
- }
- return CPDF_ModuleMgr::Get()->GetFlateModule()->CreateDecoder(src_buf, src_size, width, height,
- nComps, bpc, predictor, Colors, BitsPerComponent, Columns);
+ICodec_ScanlineDecoder* FPDFAPI_CreateFlateDecoder(
+ const uint8_t* src_buf,
+ FX_DWORD src_size,
+ int width,
+ int height,
+ int nComps,
+ int bpc,
+ const CPDF_Dictionary* pParams) {
+ int predictor = 0;
+ int Colors = 0, BitsPerComponent = 0, Columns = 0;
+ if (pParams) {
+ predictor = ((CPDF_Dictionary*)pParams)->GetInteger(FX_BSTRC("Predictor"));
+ Colors = pParams->GetInteger(FX_BSTRC("Colors"), 1);
+ BitsPerComponent = pParams->GetInteger(FX_BSTRC("BitsPerComponent"), 8);
+ Columns = pParams->GetInteger(FX_BSTRC("Columns"), 1);
+ if (!CheckFlateDecodeParams(Colors, BitsPerComponent, Columns)) {
+ return NULL;
+ }
+ }
+ return CPDF_ModuleMgr::Get()->GetFlateModule()->CreateDecoder(
+ src_buf, src_size, width, height, nComps, bpc, predictor, Colors,
+ BitsPerComponent, Columns);
}
-FX_DWORD FPDFAPI_FlateOrLZWDecode(FX_BOOL bLZW, const uint8_t* src_buf, FX_DWORD src_size, CPDF_Dictionary* pParams,
- FX_DWORD estimated_size, uint8_t*& dest_buf, FX_DWORD& dest_size)
-{
- int predictor = 0;
- FX_BOOL bEarlyChange = TRUE;
- int Colors = 0, BitsPerComponent = 0, Columns = 0;
- if (pParams) {
- predictor = ((CPDF_Dictionary*)pParams)->GetInteger(FX_BSTRC("Predictor"));
- bEarlyChange = ((CPDF_Dictionary*)pParams)->GetInteger(FX_BSTRC("EarlyChange"), 1);
- Colors = pParams->GetInteger(FX_BSTRC("Colors"), 1);
- BitsPerComponent = pParams->GetInteger(FX_BSTRC("BitsPerComponent"), 8);
- Columns = pParams->GetInteger(FX_BSTRC("Columns"), 1);
- if (!CheckFlateDecodeParams(Colors, BitsPerComponent, Columns)) {
- return (FX_DWORD) - 1;
- }
- }
- return CPDF_ModuleMgr::Get()->GetFlateModule()->FlateOrLZWDecode(bLZW, src_buf, src_size,
- bEarlyChange, predictor, Colors, BitsPerComponent, Columns, estimated_size,
- dest_buf, dest_size);
+FX_DWORD FPDFAPI_FlateOrLZWDecode(FX_BOOL bLZW,
+ const uint8_t* src_buf,
+ FX_DWORD src_size,
+ CPDF_Dictionary* pParams,
+ FX_DWORD estimated_size,
+ uint8_t*& dest_buf,
+ FX_DWORD& dest_size) {
+ int predictor = 0;
+ FX_BOOL bEarlyChange = TRUE;
+ int Colors = 0, BitsPerComponent = 0, Columns = 0;
+ if (pParams) {
+ predictor = ((CPDF_Dictionary*)pParams)->GetInteger(FX_BSTRC("Predictor"));
+ bEarlyChange =
+ ((CPDF_Dictionary*)pParams)->GetInteger(FX_BSTRC("EarlyChange"), 1);
+ Colors = pParams->GetInteger(FX_BSTRC("Colors"), 1);
+ BitsPerComponent = pParams->GetInteger(FX_BSTRC("BitsPerComponent"), 8);
+ Columns = pParams->GetInteger(FX_BSTRC("Columns"), 1);
+ if (!CheckFlateDecodeParams(Colors, BitsPerComponent, Columns)) {
+ return (FX_DWORD)-1;
+ }
+ }
+ return CPDF_ModuleMgr::Get()->GetFlateModule()->FlateOrLZWDecode(
+ bLZW, src_buf, src_size, bEarlyChange, predictor, Colors,
+ BitsPerComponent, Columns, estimated_size, dest_buf, dest_size);
}
-FX_BOOL PDF_DataDecode(const uint8_t* src_buf, FX_DWORD src_size, const CPDF_Dictionary* pDict,
- uint8_t*& dest_buf, FX_DWORD& dest_size, CFX_ByteString& ImageEncoding,
- CPDF_Dictionary*& pImageParms, FX_DWORD last_estimated_size, FX_BOOL bImageAcc)
+FX_BOOL PDF_DataDecode(const uint8_t* src_buf,
+ FX_DWORD src_size,
+ const CPDF_Dictionary* pDict,
+ uint8_t*& dest_buf,
+ FX_DWORD& dest_size,
+ CFX_ByteString& ImageEncoding,
+ CPDF_Dictionary*& pImageParms,
+ FX_DWORD last_estimated_size,
+ FX_BOOL bImageAcc)
{
- CPDF_Object* pDecoder = pDict ? pDict->GetElementValue(FX_BSTRC("Filter")) : NULL;
- if (pDecoder == NULL || (pDecoder->GetType() != PDFOBJ_ARRAY && pDecoder->GetType() != PDFOBJ_NAME)) {
- return FALSE;
- }
- CPDF_Object* pParams = pDict ? pDict->GetElementValue(FX_BSTRC("DecodeParms")) : NULL;
- CFX_ByteStringArray DecoderList;
- CFX_PtrArray ParamList;
- if (pDecoder->GetType() == PDFOBJ_ARRAY) {
- if (pParams && pParams->GetType() != PDFOBJ_ARRAY) {
- pParams = NULL;
- }
- CPDF_Array* pDecoders = (CPDF_Array*)pDecoder;
- for (FX_DWORD i = 0; i < pDecoders->GetCount(); i ++) {
- CFX_ByteStringC str = pDecoders->GetConstString(i);
- DecoderList.Add(str);
- if (pParams) {
- ParamList.Add(((CPDF_Array*)pParams)->GetDict(i));
- } else {
- ParamList.Add(NULL);
- }
- }
+ CPDF_Object* pDecoder =
+ pDict ? pDict->GetElementValue(FX_BSTRC("Filter")) : NULL;
+ if (pDecoder == NULL || (pDecoder->GetType() != PDFOBJ_ARRAY &&
+ pDecoder->GetType() != PDFOBJ_NAME)) {
+ return FALSE;
+ }
+ CPDF_Object* pParams =
+ pDict ? pDict->GetElementValue(FX_BSTRC("DecodeParms")) : NULL;
+ CFX_ByteStringArray DecoderList;
+ CFX_PtrArray ParamList;
+ if (pDecoder->GetType() == PDFOBJ_ARRAY) {
+ if (pParams && pParams->GetType() != PDFOBJ_ARRAY) {
+ pParams = NULL;
+ }
+ CPDF_Array* pDecoders = (CPDF_Array*)pDecoder;
+ for (FX_DWORD i = 0; i < pDecoders->GetCount(); i++) {
+ CFX_ByteStringC str = pDecoders->GetConstString(i);
+ DecoderList.Add(str);
+ if (pParams) {
+ ParamList.Add(((CPDF_Array*)pParams)->GetDict(i));
+ } else {
+ ParamList.Add(NULL);
+ }
+ }
+ } else {
+ DecoderList.Add(pDecoder->GetConstString());
+ ParamList.Add(pParams ? pParams->GetDict() : NULL);
+ }
+ uint8_t* last_buf = (uint8_t*)src_buf;
+ FX_DWORD last_size = src_size;
+ for (int i = 0; i < DecoderList.GetSize(); i++) {
+ int estimated_size =
+ i == DecoderList.GetSize() - 1 ? last_estimated_size : 0;
+ CFX_ByteString decoder = DecoderList[i];
+ CPDF_Dictionary* pParam = (CPDF_Dictionary*)ParamList[i];
+ uint8_t* new_buf = NULL;
+ FX_DWORD new_size = (FX_DWORD)-1;
+ int offset = -1;
+ if (decoder == FX_BSTRC("FlateDecode") || decoder == FX_BSTRC("Fl")) {
+ if (bImageAcc && i == DecoderList.GetSize() - 1) {
+ ImageEncoding = FX_BSTRC("FlateDecode");
+ dest_buf = (uint8_t*)last_buf;
+ dest_size = last_size;
+ pImageParms = pParam;
+ return TRUE;
+ }
+ offset = FPDFAPI_FlateOrLZWDecode(FALSE, last_buf, last_size, pParam,
+ estimated_size, new_buf, new_size);
+ } else if (decoder == FX_BSTRC("LZWDecode") || decoder == FX_BSTRC("LZW")) {
+ offset = FPDFAPI_FlateOrLZWDecode(TRUE, last_buf, last_size, pParam,
+ estimated_size, new_buf, new_size);
+ } else if (decoder == FX_BSTRC("ASCII85Decode") ||
+ decoder == FX_BSTRC("A85")) {
+ offset = _A85Decode(last_buf, last_size, new_buf, new_size);
+ } else if (decoder == FX_BSTRC("ASCIIHexDecode") ||
+ decoder == FX_BSTRC("AHx")) {
+ offset = _HexDecode(last_buf, last_size, new_buf, new_size);
+ } else if (decoder == FX_BSTRC("RunLengthDecode") ||
+ decoder == FX_BSTRC("RL")) {
+ if (bImageAcc && i == DecoderList.GetSize() - 1) {
+ ImageEncoding = FX_BSTRC("RunLengthDecode");
+ dest_buf = (uint8_t*)last_buf;
+ dest_size = last_size;
+ pImageParms = pParam;
+ return TRUE;
+ }
+ offset = RunLengthDecode(last_buf, last_size, new_buf, new_size);
} else {
- DecoderList.Add(pDecoder->GetConstString());
- ParamList.Add(pParams ? pParams->GetDict() : NULL);
- }
- uint8_t* last_buf = (uint8_t*)src_buf;
- FX_DWORD last_size = src_size;
- for (int i = 0; i < DecoderList.GetSize(); i ++) {
- int estimated_size = i == DecoderList.GetSize() - 1 ? last_estimated_size : 0;
- CFX_ByteString decoder = DecoderList[i];
- CPDF_Dictionary* pParam = (CPDF_Dictionary*)ParamList[i];
- uint8_t* new_buf = NULL;
- FX_DWORD new_size = (FX_DWORD) - 1;
- int offset = -1;
- if (decoder == FX_BSTRC("FlateDecode") || decoder == FX_BSTRC("Fl")) {
- if (bImageAcc && i == DecoderList.GetSize() - 1) {
- ImageEncoding = FX_BSTRC("FlateDecode");
- dest_buf = (uint8_t*)last_buf;
- dest_size = last_size;
- pImageParms = pParam;
- return TRUE;
- }
- offset = FPDFAPI_FlateOrLZWDecode(FALSE, last_buf, last_size, pParam, estimated_size, new_buf, new_size);
- } else if (decoder == FX_BSTRC("LZWDecode") || decoder == FX_BSTRC("LZW")) {
- offset = FPDFAPI_FlateOrLZWDecode(TRUE, last_buf, last_size, pParam, estimated_size, new_buf, new_size);
- } else if (decoder == FX_BSTRC("ASCII85Decode") || decoder == FX_BSTRC("A85")) {
- offset = _A85Decode(last_buf, last_size, new_buf, new_size);
- } else if (decoder == FX_BSTRC("ASCIIHexDecode") || decoder == FX_BSTRC("AHx")) {
- offset = _HexDecode(last_buf, last_size, new_buf, new_size);
- } else if (decoder == FX_BSTRC("RunLengthDecode") || decoder == FX_BSTRC("RL")) {
- if (bImageAcc && i == DecoderList.GetSize() - 1) {
- ImageEncoding = FX_BSTRC("RunLengthDecode");
- dest_buf = (uint8_t*)last_buf;
- dest_size = last_size;
- pImageParms = pParam;
- return TRUE;
- }
- offset = RunLengthDecode(last_buf, last_size, new_buf, new_size);
- } else {
- if (decoder == FX_BSTRC("DCT")) {
- decoder = "DCTDecode";
- } else if (decoder == FX_BSTRC("CCF")) {
- decoder = "CCITTFaxDecode";
- } else if (decoder == FX_BSTRC("Crypt")) {
- continue;
- }
- ImageEncoding = decoder;
- pImageParms = pParam;
- dest_buf = (uint8_t*)last_buf;
- dest_size = last_size;
- return TRUE;
- }
- if (last_buf != src_buf) {
- FX_Free(last_buf);
- }
- if (offset == -1) {
- return FALSE;
- }
- last_buf = new_buf;
- last_size = new_size;
- }
- ImageEncoding = "";
- pImageParms = NULL;
- dest_buf = last_buf;
- dest_size = last_size;
- return TRUE;
+ if (decoder == FX_BSTRC("DCT")) {
+ decoder = "DCTDecode";
+ } else if (decoder == FX_BSTRC("CCF")) {
+ decoder = "CCITTFaxDecode";
+ } else if (decoder == FX_BSTRC("Crypt")) {
+ continue;
+ }
+ ImageEncoding = decoder;
+ pImageParms = pParam;
+ dest_buf = (uint8_t*)last_buf;
+ dest_size = last_size;
+ return TRUE;
+ }
+ if (last_buf != src_buf) {
+ FX_Free(last_buf);
+ }
+ if (offset == -1) {
+ return FALSE;
+ }
+ last_buf = new_buf;
+ last_size = new_size;
+ }
+ ImageEncoding = "";
+ pImageParms = NULL;
+ dest_buf = last_buf;
+ dest_size = last_size;
+ return TRUE;
}
extern const FX_WORD PDFDocEncoding[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, 0x02d8, 0x02c7, 0x02c6, 0x02d9, 0x02dd, 0x02db,
- 0x02da, 0x02dc, 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, 0x0000, 0x2022, 0x2020,
- 0x2021, 0x2026, 0x2014, 0x2013, 0x0192, 0x2044, 0x2039, 0x203a, 0x2212, 0x2030,
- 0x201e, 0x201c, 0x201d, 0x2018, 0x2019, 0x201a, 0x2122, 0xfb01, 0xfb02, 0x0141,
- 0x0152, 0x0160, 0x0178, 0x017d, 0x0131, 0x0142, 0x0153, 0x0161, 0x017e, 0x0000,
- 0x20ac, 0x00a1, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7, 0x00a8, 0x00a9,
- 0x00aa, 0x00ab, 0x00ac, 0x0000, 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
-};
-CFX_WideString PDF_DecodeText(const uint8_t* src_data, FX_DWORD src_len, CFX_CharMap* pCharMap)
-{
- CFX_WideString result;
- if (src_len >= 2 && ((src_data[0] == 0xfe && src_data[1] == 0xff) || (src_data[0] == 0xff && src_data[1] == 0xfe))) {
- FX_BOOL bBE = src_data[0] == 0xfe;
- FX_DWORD max_chars = (src_len - 2) / 2;
- if (!max_chars) {
- return result;
- }
- if (src_data[0] == 0xff) {
- bBE = !src_data[2];
- }
- FX_WCHAR* dest_buf = result.GetBuffer(max_chars);
- const uint8_t* uni_str = src_data + 2;
- int dest_pos = 0;
- for (FX_DWORD i = 0; i < max_chars * 2; i += 2) {
- FX_WORD unicode = bBE ? (uni_str[i] << 8 | uni_str[i + 1]) : (uni_str[i + 1] << 8 | uni_str[i]);
- if (unicode == 0x1b) {
- i += 2;
- while (i < max_chars * 2) {
- FX_WORD unicode = bBE ? (uni_str[i] << 8 | uni_str[i + 1]) : (uni_str[i + 1] << 8 | uni_str[i]);
- i += 2;
- if (unicode == 0x1b) {
- break;
- }
- }
- } else {
- dest_buf[dest_pos++] = unicode;
- }
- }
- result.ReleaseBuffer(dest_pos);
- } else if (pCharMap == NULL) {
- FX_WCHAR* dest_buf = result.GetBuffer(src_len);
- for (FX_DWORD i = 0; i < src_len; i ++) {
- dest_buf[i] = PDFDocEncoding[src_data[i]];
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008,
+ 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, 0x0010, 0x0011,
+ 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 0x02d8, 0x02c7, 0x02c6,
+ 0x02d9, 0x02dd, 0x02db, 0x02da, 0x02dc, 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, 0x0000, 0x2022, 0x2020, 0x2021, 0x2026, 0x2014, 0x2013, 0x0192,
+ 0x2044, 0x2039, 0x203a, 0x2212, 0x2030, 0x201e, 0x201c, 0x201d, 0x2018,
+ 0x2019, 0x201a, 0x2122, 0xfb01, 0xfb02, 0x0141, 0x0152, 0x0160, 0x0178,
+ 0x017d, 0x0131, 0x0142, 0x0153, 0x0161, 0x017e, 0x0000, 0x20ac, 0x00a1,
+ 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7, 0x00a8, 0x00a9, 0x00aa,
+ 0x00ab, 0x00ac, 0x0000, 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};
+CFX_WideString PDF_DecodeText(const uint8_t* src_data,
+ FX_DWORD src_len,
+ CFX_CharMap* pCharMap) {
+ CFX_WideString result;
+ if (src_len >= 2 && ((src_data[0] == 0xfe && src_data[1] == 0xff) ||
+ (src_data[0] == 0xff && src_data[1] == 0xfe))) {
+ FX_BOOL bBE = src_data[0] == 0xfe;
+ FX_DWORD max_chars = (src_len - 2) / 2;
+ if (!max_chars) {
+ return result;
+ }
+ if (src_data[0] == 0xff) {
+ bBE = !src_data[2];
+ }
+ FX_WCHAR* dest_buf = result.GetBuffer(max_chars);
+ const uint8_t* uni_str = src_data + 2;
+ int dest_pos = 0;
+ for (FX_DWORD i = 0; i < max_chars * 2; i += 2) {
+ FX_WORD unicode = bBE ? (uni_str[i] << 8 | uni_str[i + 1])
+ : (uni_str[i + 1] << 8 | uni_str[i]);
+ if (unicode == 0x1b) {
+ i += 2;
+ while (i < max_chars * 2) {
+ FX_WORD unicode = bBE ? (uni_str[i] << 8 | uni_str[i + 1])
+ : (uni_str[i + 1] << 8 | uni_str[i]);
+ i += 2;
+ if (unicode == 0x1b) {
+ break;
+ }
}
- result.ReleaseBuffer(src_len);
- } else {
- return (*pCharMap->m_GetWideString)(pCharMap, CFX_ByteString((const FX_CHAR*)src_data, src_len));
- }
- return result;
+ } else {
+ dest_buf[dest_pos++] = unicode;
+ }
+ }
+ result.ReleaseBuffer(dest_pos);
+ } else if (pCharMap == NULL) {
+ FX_WCHAR* dest_buf = result.GetBuffer(src_len);
+ for (FX_DWORD i = 0; i < src_len; i++) {
+ dest_buf[i] = PDFDocEncoding[src_data[i]];
+ }
+ result.ReleaseBuffer(src_len);
+ } else {
+ return (*pCharMap->m_GetWideString)(
+ pCharMap, CFX_ByteString((const FX_CHAR*)src_data, src_len));
+ }
+ return result;
}
-CFX_ByteString PDF_EncodeText(const FX_WCHAR* pString, int len, CFX_CharMap* pCharMap)
-{
- if (len == -1) {
- len = FXSYS_wcslen(pString);
- }
- CFX_ByteString result;
- if (pCharMap == NULL) {
- FX_CHAR* dest_buf1 = result.GetBuffer(len);
- int i;
- for (i = 0; i < len; i ++) {
- int code;
- for (code = 0; code < 256; code ++)
- if (PDFDocEncoding[code] == pString[i]) {
- break;
- }
- if (code == 256) {
- break;
- }
- dest_buf1[i] = code;
- }
- result.ReleaseBuffer(i);
- if (i == len) {
- return result;
+CFX_ByteString PDF_EncodeText(const FX_WCHAR* pString,
+ int len,
+ CFX_CharMap* pCharMap) {
+ if (len == -1) {
+ len = FXSYS_wcslen(pString);
+ }
+ CFX_ByteString result;
+ if (pCharMap == NULL) {
+ FX_CHAR* dest_buf1 = result.GetBuffer(len);
+ int i;
+ for (i = 0; i < len; i++) {
+ int code;
+ for (code = 0; code < 256; code++)
+ if (PDFDocEncoding[code] == pString[i]) {
+ break;
}
+ if (code == 256) {
+ break;
+ }
+ dest_buf1[i] = code;
}
-
- if(len > INT_MAX/2-1)
- {
- result.ReleaseBuffer(0);
- return result;
+ result.ReleaseBuffer(i);
+ if (i == len) {
+ return result;
}
+ }
- int encLen = len * 2 + 2;
-
- uint8_t* dest_buf2 = (uint8_t*)result.GetBuffer(encLen);
- dest_buf2[0] = 0xfe;
- dest_buf2[1] = 0xff;
- dest_buf2 += 2;
- for (int i = 0; i < len; i ++) {
- *dest_buf2++ = pString[i] >> 8;
- *dest_buf2++ = (uint8_t)pString[i];
- }
- result.ReleaseBuffer(encLen);
+ if (len > INT_MAX / 2 - 1) {
+ result.ReleaseBuffer(0);
return result;
+ }
+
+ int encLen = len * 2 + 2;
+
+ uint8_t* dest_buf2 = (uint8_t*)result.GetBuffer(encLen);
+ dest_buf2[0] = 0xfe;
+ dest_buf2[1] = 0xff;
+ dest_buf2 += 2;
+ for (int i = 0; i < len; i++) {
+ *dest_buf2++ = pString[i] >> 8;
+ *dest_buf2++ = (uint8_t)pString[i];
+ }
+ result.ReleaseBuffer(encLen);
+ return result;
}
-CFX_ByteString PDF_EncodeString(const CFX_ByteString& src, FX_BOOL bHex)
-{
- CFX_ByteTextBuf result;
- int srclen = src.GetLength();
- if (bHex) {
- result.AppendChar('<');
- for (int i = 0; i < srclen; i ++) {
- result.AppendChar("0123456789ABCDEF"[src[i] / 16]);
- result.AppendChar("0123456789ABCDEF"[src[i] % 16]);
- }
- result.AppendChar('>');
- return result.GetByteString();
- }
- result.AppendChar('(');
- for (int i = 0; i < srclen; i ++) {
- uint8_t ch = src[i];
- if (ch == ')' || ch == '\\' || ch == '(') {
- result.AppendChar('\\');
- } else if (ch == 0x0a) {
- result << FX_BSTRC("\\n");
- continue;
- } else if (ch == 0x0d) {
- result << FX_BSTRC("\\r");
- continue;
- }
- result.AppendChar(ch);
- }
- result.AppendChar(')');
+CFX_ByteString PDF_EncodeString(const CFX_ByteString& src, FX_BOOL bHex) {
+ CFX_ByteTextBuf result;
+ int srclen = src.GetLength();
+ if (bHex) {
+ result.AppendChar('<');
+ for (int i = 0; i < srclen; i++) {
+ result.AppendChar("0123456789ABCDEF"[src[i] / 16]);
+ result.AppendChar("0123456789ABCDEF"[src[i] % 16]);
+ }
+ result.AppendChar('>');
return result.GetByteString();
+ }
+ result.AppendChar('(');
+ for (int i = 0; i < srclen; i++) {
+ uint8_t ch = src[i];
+ if (ch == ')' || ch == '\\' || ch == '(') {
+ result.AppendChar('\\');
+ } else if (ch == 0x0a) {
+ result << FX_BSTRC("\\n");
+ continue;
+ } else if (ch == 0x0d) {
+ result << FX_BSTRC("\\r");
+ continue;
+ }
+ result.AppendChar(ch);
+ }
+ result.AppendChar(')');
+ return result.GetByteString();
}
-void FlateEncode(const uint8_t* src_buf, FX_DWORD src_size, uint8_t*& dest_buf, FX_DWORD& dest_size)
-{
- CCodec_ModuleMgr* pEncoders = CPDF_ModuleMgr::Get()->GetCodecModule();
- if (pEncoders) {
- pEncoders->GetFlateModule()->Encode(src_buf, src_size, dest_buf, dest_size);
- }
+void FlateEncode(const uint8_t* src_buf,
+ FX_DWORD src_size,
+ uint8_t*& dest_buf,
+ FX_DWORD& dest_size) {
+ CCodec_ModuleMgr* pEncoders = CPDF_ModuleMgr::Get()->GetCodecModule();
+ if (pEncoders) {
+ pEncoders->GetFlateModule()->Encode(src_buf, src_size, dest_buf, dest_size);
+ }
}
-void FlateEncode(const uint8_t* src_buf, FX_DWORD src_size, int predictor, int Colors, int BitsPerComponent, int Columns,
- uint8_t*& dest_buf, FX_DWORD& dest_size)
-{
- CCodec_ModuleMgr* pEncoders = CPDF_ModuleMgr::Get()->GetCodecModule();
- if (pEncoders) {
- pEncoders->GetFlateModule()->Encode(src_buf, src_size, predictor, Colors, BitsPerComponent, Columns, dest_buf, dest_size);
- }
+void FlateEncode(const uint8_t* src_buf,
+ FX_DWORD src_size,
+ int predictor,
+ int Colors,
+ int BitsPerComponent,
+ int Columns,
+ uint8_t*& dest_buf,
+ FX_DWORD& dest_size) {
+ CCodec_ModuleMgr* pEncoders = CPDF_ModuleMgr::Get()->GetCodecModule();
+ if (pEncoders) {
+ pEncoders->GetFlateModule()->Encode(src_buf, src_size, predictor, Colors,
+ BitsPerComponent, Columns, dest_buf,
+ dest_size);
+ }
}
-FX_DWORD FlateDecode(const uint8_t* src_buf, FX_DWORD src_size, uint8_t*& dest_buf, FX_DWORD& dest_size)
-{
- CCodec_ModuleMgr* pEncoders = CPDF_ModuleMgr::Get()->GetCodecModule();
- if (pEncoders) {
- return pEncoders->GetFlateModule()->FlateOrLZWDecode(FALSE, src_buf, src_size, FALSE, 0, 0, 0, 0, 0, dest_buf, dest_size);
- }
- return 0;
+FX_DWORD FlateDecode(const uint8_t* src_buf,
+ FX_DWORD src_size,
+ uint8_t*& dest_buf,
+ FX_DWORD& dest_size) {
+ CCodec_ModuleMgr* pEncoders = CPDF_ModuleMgr::Get()->GetCodecModule();
+ if (pEncoders) {
+ return pEncoders->GetFlateModule()->FlateOrLZWDecode(
+ FALSE, src_buf, src_size, FALSE, 0, 0, 0, 0, 0, dest_buf, dest_size);
+ }
+ return 0;
}
diff --git a/core/src/fpdfapi/fpdf_parser/fpdf_parser_decode_embeddertest.cpp b/core/src/fpdfapi/fpdf_parser/fpdf_parser_decode_embeddertest.cpp
index 6f97c08d2d..3da522da4e 100644
--- a/core/src/fpdfapi/fpdf_parser/fpdf_parser_decode_embeddertest.cpp
+++ b/core/src/fpdfapi/fpdf_parser/fpdf_parser_decode_embeddertest.cpp
@@ -12,15 +12,16 @@
#include "../../../testing/embedder_test.h"
#include "testing/gtest/include/gtest/gtest.h"
-class FPDFParserDecodeEmbeddertest : public EmbedderTest {
-};
+class FPDFParserDecodeEmbeddertest : public EmbedderTest {};
// NOTE: python's zlib.compress() and zlib.decompress() may be useful for
// external validation of the FlateEncode/FlateDecode test cases.
-#define TEST_CASE(input_literal, expected_literal) \
- { (const unsigned char*)input_literal, sizeof(input_literal) - 1, \
- (const unsigned char*)expected_literal, sizeof(expected_literal) - 1 }
+#define TEST_CASE(input_literal, expected_literal) \
+ { \
+ (const unsigned char*) input_literal, sizeof(input_literal) - 1, \
+ (const unsigned char*)expected_literal, sizeof(expected_literal) - 1 \
+ }
TEST_F(FPDFParserDecodeEmbeddertest, FlateEncode) {
struct FlateEncodeCase {
@@ -29,21 +30,20 @@ TEST_F(FPDFParserDecodeEmbeddertest, FlateEncode) {
const unsigned char* expected;
unsigned int expected_size;
} flate_encode_cases[] = {
- TEST_CASE("", "\x78\x9c\x03\x00\x00\x00\x00\x01"),
- TEST_CASE(" ", "\x78\x9c\x53\x00\x00\x00\x21\x00\x21"),
- TEST_CASE("123", "\x78\x9c\x33\x34\x32\x06\x00\01\x2d\x00\x97"),
- TEST_CASE("\x00\xff", "\x78\x9c\x63\xf8\x0f\x00\x01\x01\x01\x00"),
- TEST_CASE("1 0 0 -1 29 763 cm\n0 0 555 735 re\nW n\nq\n0 0 555 734.394 re\n"
- "W n\nq\n0.8009 0 0 0.8009 0 0 cm\n1 1 1 RG 1 1 1 rg\n/G0 gs\n"
- "0 0 693 917 re\nf\nQ\nQ\n"
- ,
- "\x78\x9c\x33\x54\x30\x00\x42\x5d\x43\x05\x23\x4b\x05\x73\x33\x63"
- "\x85\xe4\x5c\x2e\x90\x80\xa9\xa9\xa9\x82\xb9\xb1\xa9\x42\x51\x2a"
- "\x57\xb8\x42\x1e\x57\x21\x92\xa0\x89\x9e\xb1\xa5\x09\x92\x84\x9e"
- "\x85\x81\x81\x25\xd8\x14\x24\x26\xd0\x18\x43\x05\x10\x0c\x72\x57"
- "\x80\x30\x8a\xd2\xb9\xf4\xdd\x0d\x14\xd2\x8b\xc1\x46\x99\x59\x1a"
- "\x2b\x58\x1a\x9a\x83\x8c\x49\xe3\x0a\x04\x42\x00\x37\x4c\x1b\x42"
- ),
+ TEST_CASE("", "\x78\x9c\x03\x00\x00\x00\x00\x01"),
+ TEST_CASE(" ", "\x78\x9c\x53\x00\x00\x00\x21\x00\x21"),
+ TEST_CASE("123", "\x78\x9c\x33\x34\x32\x06\x00\01\x2d\x00\x97"),
+ TEST_CASE("\x00\xff", "\x78\x9c\x63\xf8\x0f\x00\x01\x01\x01\x00"),
+ TEST_CASE(
+ "1 0 0 -1 29 763 cm\n0 0 555 735 re\nW n\nq\n0 0 555 734.394 re\n"
+ "W n\nq\n0.8009 0 0 0.8009 0 0 cm\n1 1 1 RG 1 1 1 rg\n/G0 gs\n"
+ "0 0 693 917 re\nf\nQ\nQ\n",
+ "\x78\x9c\x33\x54\x30\x00\x42\x5d\x43\x05\x23\x4b\x05\x73\x33\x63"
+ "\x85\xe4\x5c\x2e\x90\x80\xa9\xa9\xa9\x82\xb9\xb1\xa9\x42\x51\x2a"
+ "\x57\xb8\x42\x1e\x57\x21\x92\xa0\x89\x9e\xb1\xa5\x09\x92\x84\x9e"
+ "\x85\x81\x81\x25\xd8\x14\x24\x26\xd0\x18\x43\x05\x10\x0c\x72\x57"
+ "\x80\x30\x8a\xd2\xb9\xf4\xdd\x0d\x14\xd2\x8b\xc1\x46\x99\x59\x1a"
+ "\x2b\x58\x1a\x9a\x83\x8c\x49\xe3\x0a\x04\x42\x00\x37\x4c\x1b\x42"),
};
for (size_t i = 0; i < FX_ArraySize(flate_encode_cases); ++i) {
@@ -66,23 +66,21 @@ TEST_F(FPDFParserDecodeEmbeddertest, FlateDecode) {
const unsigned char* expected;
unsigned int expected_size;
} flate_decode_cases[] = {
- TEST_CASE("", ""),
- TEST_CASE("preposterous nonsense", ""),
- TEST_CASE("\x78\x9c\x03\x00\x00\x00\x00\x01", ""),
- TEST_CASE("\x78\x9c\x53\x00\x00\x00\x21\x00\x21", " "),
- TEST_CASE("\x78\x9c\x33\x34\x32\x06\x00\01\x2d\x00\x97", "123"),
- TEST_CASE("\x78\x9c\x63\xf8\x0f\x00\x01\x01\x01\x00", "\x00\xff"),
- TEST_CASE("\x78\x9c\x33\x54\x30\x00\x42\x5d\x43\x05\x23\x4b\x05\x73\x33\x63"
- "\x85\xe4\x5c\x2e\x90\x80\xa9\xa9\xa9\x82\xb9\xb1\xa9\x42\x51\x2a"
- "\x57\xb8\x42\x1e\x57\x21\x92\xa0\x89\x9e\xb1\xa5\x09\x92\x84\x9e"
- "\x85\x81\x81\x25\xd8\x14\x24\x26\xd0\x18\x43\x05\x10\x0c\x72\x57"
- "\x80\x30\x8a\xd2\xb9\xf4\xdd\x0d\x14\xd2\x8b\xc1\x46\x99\x59\x1a"
- "\x2b\x58\x1a\x9a\x83\x8c\x49\xe3\x0a\x04\x42\x00\x37\x4c\x1b\x42"
- ,
- "1 0 0 -1 29 763 cm\n0 0 555 735 re\nW n\nq\n0 0 555 734.394 re\n"
- "W n\nq\n0.8009 0 0 0.8009 0 0 cm\n1 1 1 RG 1 1 1 rg\n/G0 gs\n"
- "0 0 693 917 re\nf\nQ\nQ\n"
- ),
+ TEST_CASE("", ""), TEST_CASE("preposterous nonsense", ""),
+ TEST_CASE("\x78\x9c\x03\x00\x00\x00\x00\x01", ""),
+ TEST_CASE("\x78\x9c\x53\x00\x00\x00\x21\x00\x21", " "),
+ TEST_CASE("\x78\x9c\x33\x34\x32\x06\x00\01\x2d\x00\x97", "123"),
+ TEST_CASE("\x78\x9c\x63\xf8\x0f\x00\x01\x01\x01\x00", "\x00\xff"),
+ TEST_CASE(
+ "\x78\x9c\x33\x54\x30\x00\x42\x5d\x43\x05\x23\x4b\x05\x73\x33\x63"
+ "\x85\xe4\x5c\x2e\x90\x80\xa9\xa9\xa9\x82\xb9\xb1\xa9\x42\x51\x2a"
+ "\x57\xb8\x42\x1e\x57\x21\x92\xa0\x89\x9e\xb1\xa5\x09\x92\x84\x9e"
+ "\x85\x81\x81\x25\xd8\x14\x24\x26\xd0\x18\x43\x05\x10\x0c\x72\x57"
+ "\x80\x30\x8a\xd2\xb9\xf4\xdd\x0d\x14\xd2\x8b\xc1\x46\x99\x59\x1a"
+ "\x2b\x58\x1a\x9a\x83\x8c\x49\xe3\x0a\x04\x42\x00\x37\x4c\x1b\x42",
+ "1 0 0 -1 29 763 cm\n0 0 555 735 re\nW n\nq\n0 0 555 734.394 re\n"
+ "W n\nq\n0.8009 0 0 0.8009 0 0 cm\n1 1 1 RG 1 1 1 rg\n/G0 gs\n"
+ "0 0 693 917 re\nf\nQ\nQ\n"),
};
for (size_t i = 0; i < FX_ArraySize(flate_decode_cases); ++i) {
@@ -98,5 +96,4 @@ TEST_F(FPDFParserDecodeEmbeddertest, FlateDecode) {
}
}
-
#undef TEST_CASE
diff --git a/core/src/fpdfapi/fpdf_parser/fpdf_parser_document.cpp b/core/src/fpdfapi/fpdf_parser/fpdf_parser_document.cpp
index c0f45c5379..0d7bdd8379 100644
--- a/core/src/fpdfapi/fpdf_parser/fpdf_parser_document.cpp
+++ b/core/src/fpdfapi/fpdf_parser/fpdf_parser_document.cpp
@@ -7,363 +7,355 @@
#include "../../../include/fpdfapi/fpdf_parser.h"
#include "../../../include/fpdfapi/fpdf_module.h"
-CPDF_Document::CPDF_Document(CPDF_Parser* pParser) : CPDF_IndirectObjects(pParser)
-{
- ASSERT(pParser != NULL);
- m_pRootDict = NULL;
- m_pInfoDict = NULL;
- m_bLinearized = FALSE;
- m_dwFirstPageNo = 0;
- m_dwFirstPageObjNum = 0;
- m_pDocPage = CPDF_ModuleMgr::Get()->GetPageModule()->CreateDocData(this);
- m_pDocRender = CPDF_ModuleMgr::Get()->GetRenderModule()->CreateDocData(this);
+CPDF_Document::CPDF_Document(CPDF_Parser* pParser)
+ : CPDF_IndirectObjects(pParser) {
+ ASSERT(pParser != NULL);
+ m_pRootDict = NULL;
+ m_pInfoDict = NULL;
+ m_bLinearized = FALSE;
+ m_dwFirstPageNo = 0;
+ m_dwFirstPageObjNum = 0;
+ m_pDocPage = CPDF_ModuleMgr::Get()->GetPageModule()->CreateDocData(this);
+ m_pDocRender = CPDF_ModuleMgr::Get()->GetRenderModule()->CreateDocData(this);
}
-CPDF_DocPageData* CPDF_Document::GetValidatePageData()
-{
- if (m_pDocPage) {
- return m_pDocPage;
- }
- m_pDocPage = CPDF_ModuleMgr::Get()->GetPageModule()->CreateDocData(this);
+CPDF_DocPageData* CPDF_Document::GetValidatePageData() {
+ if (m_pDocPage) {
return m_pDocPage;
+ }
+ m_pDocPage = CPDF_ModuleMgr::Get()->GetPageModule()->CreateDocData(this);
+ return m_pDocPage;
}
-CPDF_DocRenderData* CPDF_Document::GetValidateRenderData()
-{
- if (m_pDocRender) {
- return m_pDocRender;
- }
- m_pDocRender = CPDF_ModuleMgr::Get()->GetRenderModule()->CreateDocData(this);
+CPDF_DocRenderData* CPDF_Document::GetValidateRenderData() {
+ if (m_pDocRender) {
return m_pDocRender;
+ }
+ m_pDocRender = CPDF_ModuleMgr::Get()->GetRenderModule()->CreateDocData(this);
+ return m_pDocRender;
}
-void CPDF_Document::LoadDoc()
-{
- m_LastObjNum = m_pParser->GetLastObjNum();
- CPDF_Object* pRootObj = GetIndirectObject(m_pParser->GetRootObjNum());
- if (pRootObj == NULL) {
- return;
- }
- m_pRootDict = pRootObj->GetDict();
- if (m_pRootDict == NULL) {
- return;
- }
- CPDF_Object* pInfoObj = GetIndirectObject(m_pParser->GetInfoObjNum());
- if (pInfoObj) {
- m_pInfoDict = pInfoObj->GetDict();
- }
- CPDF_Array* pIDArray = m_pParser->GetIDArray();
- if (pIDArray) {
- m_ID1 = pIDArray->GetString(0);
- m_ID2 = pIDArray->GetString(1);
- }
- m_PageList.SetSize(_GetPageCount());
+void CPDF_Document::LoadDoc() {
+ m_LastObjNum = m_pParser->GetLastObjNum();
+ CPDF_Object* pRootObj = GetIndirectObject(m_pParser->GetRootObjNum());
+ if (pRootObj == NULL) {
+ return;
+ }
+ m_pRootDict = pRootObj->GetDict();
+ if (m_pRootDict == NULL) {
+ return;
+ }
+ CPDF_Object* pInfoObj = GetIndirectObject(m_pParser->GetInfoObjNum());
+ if (pInfoObj) {
+ m_pInfoDict = pInfoObj->GetDict();
+ }
+ CPDF_Array* pIDArray = m_pParser->GetIDArray();
+ if (pIDArray) {
+ m_ID1 = pIDArray->GetString(0);
+ m_ID2 = pIDArray->GetString(1);
+ }
+ m_PageList.SetSize(_GetPageCount());
}
-void CPDF_Document::LoadAsynDoc(CPDF_Dictionary *pLinearized)
-{
- m_bLinearized = TRUE;
- m_LastObjNum = m_pParser->GetLastObjNum();
- CPDF_Object* indirectObj = GetIndirectObject(m_pParser->GetRootObjNum());
- m_pRootDict = indirectObj ? indirectObj->GetDict() : NULL;
- if (m_pRootDict == NULL) {
- return;
- }
- indirectObj = GetIndirectObject(m_pParser->GetInfoObjNum());
- m_pInfoDict = indirectObj ? indirectObj->GetDict() : NULL;
- CPDF_Array* pIDArray = m_pParser->GetIDArray();
- if (pIDArray) {
- m_ID1 = pIDArray->GetString(0);
- m_ID2 = pIDArray->GetString(1);
- }
- FX_DWORD dwPageCount = 0;
- CPDF_Object *pCount = pLinearized->GetElement(FX_BSTRC("N"));
- if (pCount && pCount->GetType() == PDFOBJ_NUMBER) {
- dwPageCount = pCount->GetInteger();
- }
- m_PageList.SetSize(dwPageCount);
- CPDF_Object *pNo = pLinearized->GetElement(FX_BSTRC("P"));
- if (pNo && pNo->GetType() == PDFOBJ_NUMBER) {
- m_dwFirstPageNo = pNo->GetInteger();
- }
- CPDF_Object *pObjNum = pLinearized->GetElement(FX_BSTRC("O"));
- if (pObjNum && pObjNum->GetType() == PDFOBJ_NUMBER) {
- m_dwFirstPageObjNum = pObjNum->GetInteger();
- }
+void CPDF_Document::LoadAsynDoc(CPDF_Dictionary* pLinearized) {
+ m_bLinearized = TRUE;
+ m_LastObjNum = m_pParser->GetLastObjNum();
+ CPDF_Object* indirectObj = GetIndirectObject(m_pParser->GetRootObjNum());
+ m_pRootDict = indirectObj ? indirectObj->GetDict() : NULL;
+ if (m_pRootDict == NULL) {
+ return;
+ }
+ indirectObj = GetIndirectObject(m_pParser->GetInfoObjNum());
+ m_pInfoDict = indirectObj ? indirectObj->GetDict() : NULL;
+ CPDF_Array* pIDArray = m_pParser->GetIDArray();
+ if (pIDArray) {
+ m_ID1 = pIDArray->GetString(0);
+ m_ID2 = pIDArray->GetString(1);
+ }
+ FX_DWORD dwPageCount = 0;
+ CPDF_Object* pCount = pLinearized->GetElement(FX_BSTRC("N"));
+ if (pCount && pCount->GetType() == PDFOBJ_NUMBER) {
+ dwPageCount = pCount->GetInteger();
+ }
+ m_PageList.SetSize(dwPageCount);
+ CPDF_Object* pNo = pLinearized->GetElement(FX_BSTRC("P"));
+ if (pNo && pNo->GetType() == PDFOBJ_NUMBER) {
+ m_dwFirstPageNo = pNo->GetInteger();
+ }
+ CPDF_Object* pObjNum = pLinearized->GetElement(FX_BSTRC("O"));
+ if (pObjNum && pObjNum->GetType() == PDFOBJ_NUMBER) {
+ m_dwFirstPageObjNum = pObjNum->GetInteger();
+ }
}
-void CPDF_Document::LoadPages()
-{
- m_PageList.SetSize(_GetPageCount());
+void CPDF_Document::LoadPages() {
+ m_PageList.SetSize(_GetPageCount());
}
extern void FPDF_TTFaceMapper_ReleaseDoc(CPDF_Document*);
-CPDF_Document::~CPDF_Document()
-{
- if (m_pDocPage) {
- CPDF_ModuleMgr::Get()->GetPageModule()->ReleaseDoc(this);
- CPDF_ModuleMgr::Get()->GetPageModule()->ClearStockFont(this);
- }
- if (m_pDocRender) {
- CPDF_ModuleMgr::Get()->GetRenderModule()->DestroyDocData(m_pDocRender);
- }
+CPDF_Document::~CPDF_Document() {
+ if (m_pDocPage) {
+ CPDF_ModuleMgr::Get()->GetPageModule()->ReleaseDoc(this);
+ CPDF_ModuleMgr::Get()->GetPageModule()->ClearStockFont(this);
+ }
+ if (m_pDocRender) {
+ CPDF_ModuleMgr::Get()->GetRenderModule()->DestroyDocData(m_pDocRender);
+ }
}
-#define FX_MAX_PAGE_LEVEL 1024
-CPDF_Dictionary* CPDF_Document::_FindPDFPage(CPDF_Dictionary* pPages, int iPage, int nPagesToGo, int level)
-{
- CPDF_Array* pKidList = pPages->GetArray(FX_BSTRC("Kids"));
- if (pKidList == NULL) {
- if (nPagesToGo == 0) {
- return pPages;
- }
- return NULL;
- }
- if (level >= FX_MAX_PAGE_LEVEL) {
- return NULL;
- }
- int nKids = pKidList->GetCount();
- for (int i = 0; i < nKids; i ++) {
- CPDF_Dictionary* pKid = pKidList->GetDict(i);
- if (pKid == NULL) {
- nPagesToGo --;
- continue;
- }
- if (pKid == pPages) {
- continue;
- }
- if (!pKid->KeyExist(FX_BSTRC("Kids"))) {
- if (nPagesToGo == 0) {
- return pKid;
- }
- m_PageList.SetAt(iPage - nPagesToGo, pKid->GetObjNum());
- nPagesToGo --;
- } else {
- int nPages = pKid->GetInteger(FX_BSTRC("Count"));
- if (nPagesToGo < nPages) {
- return _FindPDFPage(pKid, iPage, nPagesToGo, level + 1);
- }
- nPagesToGo -= nPages;
- }
+#define FX_MAX_PAGE_LEVEL 1024
+CPDF_Dictionary* CPDF_Document::_FindPDFPage(CPDF_Dictionary* pPages,
+ int iPage,
+ int nPagesToGo,
+ int level) {
+ CPDF_Array* pKidList = pPages->GetArray(FX_BSTRC("Kids"));
+ if (pKidList == NULL) {
+ if (nPagesToGo == 0) {
+ return pPages;
}
return NULL;
+ }
+ if (level >= FX_MAX_PAGE_LEVEL) {
+ return NULL;
+ }
+ int nKids = pKidList->GetCount();
+ for (int i = 0; i < nKids; i++) {
+ CPDF_Dictionary* pKid = pKidList->GetDict(i);
+ if (pKid == NULL) {
+ nPagesToGo--;
+ continue;
+ }
+ if (pKid == pPages) {
+ continue;
+ }
+ if (!pKid->KeyExist(FX_BSTRC("Kids"))) {
+ if (nPagesToGo == 0) {
+ return pKid;
+ }
+ m_PageList.SetAt(iPage - nPagesToGo, pKid->GetObjNum());
+ nPagesToGo--;
+ } else {
+ int nPages = pKid->GetInteger(FX_BSTRC("Count"));
+ if (nPagesToGo < nPages) {
+ return _FindPDFPage(pKid, iPage, nPagesToGo, level + 1);
+ }
+ nPagesToGo -= nPages;
+ }
+ }
+ return NULL;
+}
+CPDF_Dictionary* CPDF_Document::GetPage(int iPage) {
+ if (iPage < 0 || iPage >= m_PageList.GetSize()) {
+ return NULL;
+ }
+ if (m_bLinearized && (iPage == (int)m_dwFirstPageNo)) {
+ CPDF_Object* pObj = GetIndirectObject(m_dwFirstPageObjNum);
+ if (pObj && pObj->GetType() == PDFOBJ_DICTIONARY) {
+ return (CPDF_Dictionary*)pObj;
+ }
+ }
+ int objnum = m_PageList.GetAt(iPage);
+ if (objnum) {
+ CPDF_Object* pObj = GetIndirectObject(objnum);
+ ASSERT(pObj->GetType() == PDFOBJ_DICTIONARY);
+ return (CPDF_Dictionary*)pObj;
+ }
+ CPDF_Dictionary* pRoot = GetRoot();
+ if (pRoot == NULL) {
+ return NULL;
+ }
+ CPDF_Dictionary* pPages = pRoot->GetDict(FX_BSTRC("Pages"));
+ if (pPages == NULL) {
+ return NULL;
+ }
+ CPDF_Dictionary* pPage = _FindPDFPage(pPages, iPage, iPage, 0);
+ if (pPage == NULL) {
+ return NULL;
+ }
+ m_PageList.SetAt(iPage, pPage->GetObjNum());
+ return pPage;
}
-CPDF_Dictionary* CPDF_Document::GetPage(int iPage)
-{
- if (iPage < 0 || iPage >= m_PageList.GetSize()) {
- return NULL;
+int CPDF_Document::_FindPageIndex(CPDF_Dictionary* pNode,
+ FX_DWORD& skip_count,
+ FX_DWORD objnum,
+ int& index,
+ int level) {
+ if (pNode->KeyExist(FX_BSTRC("Kids"))) {
+ CPDF_Array* pKidList = pNode->GetArray(FX_BSTRC("Kids"));
+ if (pKidList == NULL) {
+ return -1;
}
- if (m_bLinearized && (iPage == (int)m_dwFirstPageNo)) {
- CPDF_Object* pObj = GetIndirectObject(m_dwFirstPageObjNum);
- if (pObj && pObj->GetType() == PDFOBJ_DICTIONARY) {
- return (CPDF_Dictionary*)pObj;
+ if (level >= FX_MAX_PAGE_LEVEL) {
+ return -1;
+ }
+ FX_DWORD count = pNode->GetInteger(FX_BSTRC("Count"));
+ if (count <= skip_count) {
+ skip_count -= count;
+ index += count;
+ return -1;
+ }
+ if (count && count == pKidList->GetCount()) {
+ for (FX_DWORD i = 0; i < count; i++) {
+ CPDF_Object* pKid = pKidList->GetElement(i);
+ if (pKid && pKid->GetType() == PDFOBJ_REFERENCE) {
+ if (((CPDF_Reference*)pKid)->GetRefObjNum() == objnum) {
+ m_PageList.SetAt(index + i, objnum);
+ return index + i;
+ }
}
- }
- int objnum = m_PageList.GetAt(iPage);
- if (objnum) {
- CPDF_Object* pObj = GetIndirectObject(objnum);
- ASSERT(pObj->GetType() == PDFOBJ_DICTIONARY);
- return (CPDF_Dictionary*)pObj;
- }
- CPDF_Dictionary* pRoot = GetRoot();
- if (pRoot == NULL) {
- return NULL;
- }
- CPDF_Dictionary* pPages = pRoot->GetDict(FX_BSTRC("Pages"));
- if (pPages == NULL) {
- return NULL;
- }
- CPDF_Dictionary* pPage = _FindPDFPage(pPages, iPage, iPage, 0);
- if (pPage == NULL) {
- return NULL;
- }
- m_PageList.SetAt(iPage, pPage->GetObjNum());
- return pPage;
+ }
+ }
+ for (FX_DWORD i = 0; i < pKidList->GetCount(); i++) {
+ CPDF_Dictionary* pKid = pKidList->GetDict(i);
+ if (pKid == NULL) {
+ continue;
+ }
+ if (pKid == pNode) {
+ continue;
+ }
+ int found_index =
+ _FindPageIndex(pKid, skip_count, objnum, index, level + 1);
+ if (found_index >= 0) {
+ return found_index;
+ }
+ }
+ } else {
+ if (objnum == pNode->GetObjNum()) {
+ return index;
+ }
+ if (skip_count) {
+ skip_count--;
+ }
+ index++;
+ }
+ return -1;
}
-int CPDF_Document::_FindPageIndex(CPDF_Dictionary* pNode, FX_DWORD& skip_count, FX_DWORD objnum, int& index, int level)
-{
- if (pNode->KeyExist(FX_BSTRC("Kids"))) {
- CPDF_Array* pKidList = pNode->GetArray(FX_BSTRC("Kids"));
- if (pKidList == NULL) {
- return -1;
- }
- if (level >= FX_MAX_PAGE_LEVEL) {
- return -1;
- }
- FX_DWORD count = pNode->GetInteger(FX_BSTRC("Count"));
- if (count <= skip_count) {
- skip_count -= count;
- index += count;
- return -1;
- }
- if (count && count == pKidList->GetCount()) {
- for (FX_DWORD i = 0; i < count; i ++) {
- CPDF_Object* pKid = pKidList->GetElement(i);
- if (pKid && pKid->GetType() == PDFOBJ_REFERENCE) {
- if (((CPDF_Reference*) pKid)->GetRefObjNum() == objnum) {
- m_PageList.SetAt(index + i, objnum);
- return index + i;
- }
- }
- }
- }
- for (FX_DWORD i = 0; i < pKidList->GetCount(); i ++) {
- CPDF_Dictionary* pKid = pKidList->GetDict(i);
- if (pKid == NULL) {
- continue;
- }
- if (pKid == pNode) {
- continue;
- }
- int found_index = _FindPageIndex(pKid, skip_count, objnum, index, level + 1);
- if (found_index >= 0) {
- return found_index;
- }
- }
- } else {
- if (objnum == pNode->GetObjNum()) {
- return index;
- }
- if (skip_count) {
- skip_count--;
- }
- index ++;
- }
+int CPDF_Document::GetPageIndex(FX_DWORD objnum) {
+ FX_DWORD nPages = m_PageList.GetSize();
+ FX_DWORD skip_count = 0;
+ FX_BOOL bSkipped = FALSE;
+ for (FX_DWORD i = 0; i < nPages; i++) {
+ FX_DWORD objnum1 = m_PageList.GetAt(i);
+ if (objnum1 == objnum) {
+ return i;
+ }
+ if (!bSkipped && objnum1 == 0) {
+ skip_count = i;
+ bSkipped = TRUE;
+ }
+ }
+ CPDF_Dictionary* pRoot = GetRoot();
+ if (pRoot == NULL) {
return -1;
+ }
+ CPDF_Dictionary* pPages = pRoot->GetDict(FX_BSTRC("Pages"));
+ if (pPages == NULL) {
+ return -1;
+ }
+ int index = 0;
+ return _FindPageIndex(pPages, skip_count, objnum, index);
}
-int CPDF_Document::GetPageIndex(FX_DWORD objnum)
-{
- FX_DWORD nPages = m_PageList.GetSize();
- FX_DWORD skip_count = 0;
- FX_BOOL bSkipped = FALSE;
- for (FX_DWORD i = 0; i < nPages; i ++) {
- FX_DWORD objnum1 = m_PageList.GetAt(i);
- if (objnum1 == objnum) {
- return i;
- }
- if (!bSkipped && objnum1 == 0) {
- skip_count = i;
- bSkipped = TRUE;
- }
- }
- CPDF_Dictionary* pRoot = GetRoot();
- if (pRoot == NULL) {
- return -1;
- }
- CPDF_Dictionary* pPages = pRoot->GetDict(FX_BSTRC("Pages"));
- if (pPages == NULL) {
- return -1;
- }
- int index = 0;
- return _FindPageIndex(pPages, skip_count, objnum, index);
-}
-int CPDF_Document::GetPageCount() const
-{
- return m_PageList.GetSize();
+int CPDF_Document::GetPageCount() const {
+ return m_PageList.GetSize();
}
-static int _CountPages(CPDF_Dictionary* pPages, int level)
-{
- if (level > 128) {
- return 0;
- }
- int count = pPages->GetInteger(FX_BSTRC("Count"));
- if (count > 0 && count < FPDF_PAGE_MAX_NUM) {
- return count;
- }
- CPDF_Array* pKidList = pPages->GetArray(FX_BSTRC("Kids"));
- if (pKidList == NULL) {
- return 0;
- }
- count = 0;
- for (FX_DWORD i = 0; i < pKidList->GetCount(); i ++) {
- CPDF_Dictionary* pKid = pKidList->GetDict(i);
- if (pKid == NULL) {
- continue;
- }
- if (!pKid->KeyExist(FX_BSTRC("Kids"))) {
- count ++;
- } else {
- count += _CountPages(pKid, level + 1);
- }
- }
- pPages->SetAtInteger(FX_BSTRC("Count"), count);
+static int _CountPages(CPDF_Dictionary* pPages, int level) {
+ if (level > 128) {
+ return 0;
+ }
+ int count = pPages->GetInteger(FX_BSTRC("Count"));
+ if (count > 0 && count < FPDF_PAGE_MAX_NUM) {
return count;
-}
-int CPDF_Document::_GetPageCount() const
-{
- CPDF_Dictionary* pRoot = GetRoot();
- if (pRoot == NULL) {
- return 0;
- }
- CPDF_Dictionary* pPages = pRoot->GetDict(FX_BSTRC("Pages"));
- if (pPages == NULL) {
- return 0;
- }
- if (!pPages->KeyExist(FX_BSTRC("Kids"))) {
- return 1;
+ }
+ CPDF_Array* pKidList = pPages->GetArray(FX_BSTRC("Kids"));
+ if (pKidList == NULL) {
+ return 0;
+ }
+ count = 0;
+ for (FX_DWORD i = 0; i < pKidList->GetCount(); i++) {
+ CPDF_Dictionary* pKid = pKidList->GetDict(i);
+ if (pKid == NULL) {
+ continue;
+ }
+ if (!pKid->KeyExist(FX_BSTRC("Kids"))) {
+ count++;
+ } else {
+ count += _CountPages(pKid, level + 1);
}
- return _CountPages(pPages, 0);
+ }
+ pPages->SetAtInteger(FX_BSTRC("Count"), count);
+ return count;
}
-FX_BOOL CPDF_Document::IsContentUsedElsewhere(FX_DWORD objnum, CPDF_Dictionary* pThisPageDict)
-{
- for (int i = 0; i < m_PageList.GetSize(); i ++) {
- CPDF_Dictionary* pPageDict = GetPage(i);
- if (pPageDict == pThisPageDict) {
- continue;
- }
- CPDF_Object* pContents = pPageDict ? pPageDict->GetElement(FX_BSTRC("Contents")) : NULL;
- if (pContents == NULL) {
- continue;
+int CPDF_Document::_GetPageCount() const {
+ CPDF_Dictionary* pRoot = GetRoot();
+ if (pRoot == NULL) {
+ return 0;
+ }
+ CPDF_Dictionary* pPages = pRoot->GetDict(FX_BSTRC("Pages"));
+ if (pPages == NULL) {
+ return 0;
+ }
+ if (!pPages->KeyExist(FX_BSTRC("Kids"))) {
+ return 1;
+ }
+ return _CountPages(pPages, 0);
+}
+FX_BOOL CPDF_Document::IsContentUsedElsewhere(FX_DWORD objnum,
+ CPDF_Dictionary* pThisPageDict) {
+ for (int i = 0; i < m_PageList.GetSize(); i++) {
+ CPDF_Dictionary* pPageDict = GetPage(i);
+ if (pPageDict == pThisPageDict) {
+ continue;
+ }
+ CPDF_Object* pContents =
+ pPageDict ? pPageDict->GetElement(FX_BSTRC("Contents")) : NULL;
+ if (pContents == NULL) {
+ continue;
+ }
+ if (pContents->GetDirectType() == PDFOBJ_ARRAY) {
+ CPDF_Array* pArray = (CPDF_Array*)pContents->GetDirect();
+ for (FX_DWORD j = 0; j < pArray->GetCount(); j++) {
+ CPDF_Object* pRef = pArray->GetElement(j);
+ if (pRef == NULL || pRef->GetType() != PDFOBJ_REFERENCE) {
+ continue;
}
- if (pContents->GetDirectType() == PDFOBJ_ARRAY) {
- CPDF_Array* pArray = (CPDF_Array*)pContents->GetDirect();
- for (FX_DWORD j = 0; j < pArray->GetCount(); j ++) {
- CPDF_Object* pRef = pArray->GetElement(j);
- if (pRef == NULL || pRef->GetType() != PDFOBJ_REFERENCE) {
- continue;
- }
- if (((CPDF_Reference*) pRef)->GetRefObjNum() == objnum) {
- return TRUE;
- }
- }
- } else if (pContents->GetObjNum() == objnum) {
- return TRUE;
+ if (((CPDF_Reference*)pRef)->GetRefObjNum() == objnum) {
+ return TRUE;
}
+ }
+ } else if (pContents->GetObjNum() == objnum) {
+ return TRUE;
}
- return FALSE;
+ }
+ return FALSE;
}
-FX_DWORD CPDF_Document::GetUserPermissions(FX_BOOL bCheckRevision) const
-{
- if (m_pParser == NULL) {
- return (FX_DWORD) - 1;
- }
- return m_pParser->GetPermissions(bCheckRevision);
+FX_DWORD CPDF_Document::GetUserPermissions(FX_BOOL bCheckRevision) const {
+ if (m_pParser == NULL) {
+ return (FX_DWORD)-1;
+ }
+ return m_pParser->GetPermissions(bCheckRevision);
}
-FX_BOOL CPDF_Document::IsOwner() const
-{
- if (m_pParser == NULL) {
- return TRUE;
- }
- return m_pParser->IsOwner();
+FX_BOOL CPDF_Document::IsOwner() const {
+ if (m_pParser == NULL) {
+ return TRUE;
+ }
+ return m_pParser->IsOwner();
}
-FX_BOOL CPDF_Document::IsFormStream(FX_DWORD objnum, FX_BOOL& bForm) const
-{
- {
- CPDF_Object* pObj;
- if (m_IndirectObjs.Lookup((void*)(uintptr_t)objnum, (void*&)pObj)) {
- bForm = pObj->GetType() == PDFOBJ_STREAM &&
- ((CPDF_Stream*)pObj)->GetDict()->GetString(FX_BSTRC("Subtype")) == FX_BSTRC("Form");
- return TRUE;
- }
- }
- if (m_pParser == NULL) {
- bForm = FALSE;
- return TRUE;
- }
- return m_pParser->IsFormStream(objnum, bForm);
+FX_BOOL CPDF_Document::IsFormStream(FX_DWORD objnum, FX_BOOL& bForm) const {
+ {
+ CPDF_Object* pObj;
+ if (m_IndirectObjs.Lookup((void*)(uintptr_t)objnum, (void*&)pObj)) {
+ bForm = pObj->GetType() == PDFOBJ_STREAM &&
+ ((CPDF_Stream*)pObj)->GetDict()->GetString(FX_BSTRC("Subtype")) ==
+ FX_BSTRC("Form");
+ return TRUE;
+ }
+ }
+ if (m_pParser == NULL) {
+ bForm = FALSE;
+ return TRUE;
+ }
+ return m_pParser->IsFormStream(objnum, bForm);
}
-void CPDF_Document::ClearPageData()
-{
- if (m_pDocPage) {
- CPDF_ModuleMgr::Get()->GetPageModule()->ClearDoc(this);
- }
+void CPDF_Document::ClearPageData() {
+ if (m_pDocPage) {
+ CPDF_ModuleMgr::Get()->GetPageModule()->ClearDoc(this);
+ }
}
-void CPDF_Document::ClearRenderData()
-{
- if (m_pDocRender) {
- CPDF_ModuleMgr::Get()->GetRenderModule()->ClearDocData(m_pDocRender);
- }
+void CPDF_Document::ClearRenderData() {
+ if (m_pDocRender) {
+ CPDF_ModuleMgr::Get()->GetRenderModule()->ClearDocData(m_pDocRender);
+ }
}
diff --git a/core/src/fpdfapi/fpdf_parser/fpdf_parser_encrypt.cpp b/core/src/fpdfapi/fpdf_parser/fpdf_parser_encrypt.cpp
index 9f356a4748..55e648a054 100644
--- a/core/src/fpdfapi/fpdf_parser/fpdf_parser_encrypt.cpp
+++ b/core/src/fpdfapi/fpdf_parser/fpdf_parser_encrypt.cpp
@@ -8,952 +8,1039 @@
#include "../../../include/fpdfapi/fpdf_parser.h"
#include "../../../include/fdrm/fx_crypt.h"
const uint8_t defpasscode[32] = {
- 0x28, 0xbf, 0x4e, 0x5e, 0x4e, 0x75, 0x8a, 0x41,
- 0x64, 0x00, 0x4e, 0x56, 0xff, 0xfa, 0x01, 0x08,
- 0x2e, 0x2e, 0x00, 0xb6, 0xd0, 0x68, 0x3e, 0x80,
- 0x2f, 0x0c, 0xa9, 0xfe, 0x64, 0x53, 0x69, 0x7a
-};
-void CalcEncryptKey(CPDF_Dictionary* pEncrypt, const uint8_t* password, FX_DWORD pass_size,
- uint8_t* key, int keylen, FX_BOOL bIgnoreMeta, CPDF_Array* pIdArray)
-{
- int revision = pEncrypt->GetInteger(FX_BSTRC("R"));
- uint8_t passcode[32];
- for (FX_DWORD i = 0; i < 32; i ++) {
- passcode[i] = i < pass_size ? password[i] : defpasscode[i - pass_size];
- }
- uint8_t md5[100];
- CRYPT_MD5Start(md5);
- CRYPT_MD5Update(md5, passcode, 32);
- CFX_ByteString okey = pEncrypt->GetString(FX_BSTRC("O"));
- CRYPT_MD5Update(md5, (uint8_t*)okey.c_str(), okey.GetLength());
- FX_DWORD perm = pEncrypt->GetInteger(FX_BSTRC("P"));
- CRYPT_MD5Update(md5, (uint8_t*)&perm, 4);
- if (pIdArray) {
- CFX_ByteString id = pIdArray->GetString(0);
- CRYPT_MD5Update(md5, (uint8_t*)id.c_str(), id.GetLength());
- }
- if (!bIgnoreMeta && revision >= 3 && !pEncrypt->GetInteger(FX_BSTRC("EncryptMetadata"), 1)) {
- FX_DWORD tag = (FX_DWORD) - 1;
- CRYPT_MD5Update(md5, (uint8_t*)&tag, 4);
- }
- uint8_t digest[16];
- CRYPT_MD5Finish(md5, digest);
- FX_DWORD copy_len = keylen;
- if (copy_len > sizeof(digest)) {
- copy_len = sizeof(digest);
- }
- if (revision >= 3) {
- for (int i = 0; i < 50; i ++) {
- CRYPT_MD5Generate(digest, copy_len, digest);
- }
- }
- FXSYS_memset(key, 0, keylen);
- FXSYS_memcpy(key, digest, copy_len);
+ 0x28, 0xbf, 0x4e, 0x5e, 0x4e, 0x75, 0x8a, 0x41, 0x64, 0x00, 0x4e,
+ 0x56, 0xff, 0xfa, 0x01, 0x08, 0x2e, 0x2e, 0x00, 0xb6, 0xd0, 0x68,
+ 0x3e, 0x80, 0x2f, 0x0c, 0xa9, 0xfe, 0x64, 0x53, 0x69, 0x7a};
+void CalcEncryptKey(CPDF_Dictionary* pEncrypt,
+ const uint8_t* password,
+ FX_DWORD pass_size,
+ uint8_t* key,
+ int keylen,
+ FX_BOOL bIgnoreMeta,
+ CPDF_Array* pIdArray) {
+ int revision = pEncrypt->GetInteger(FX_BSTRC("R"));
+ uint8_t passcode[32];
+ for (FX_DWORD i = 0; i < 32; i++) {
+ passcode[i] = i < pass_size ? password[i] : defpasscode[i - pass_size];
+ }
+ uint8_t md5[100];
+ CRYPT_MD5Start(md5);
+ CRYPT_MD5Update(md5, passcode, 32);
+ CFX_ByteString okey = pEncrypt->GetString(FX_BSTRC("O"));
+ CRYPT_MD5Update(md5, (uint8_t*)okey.c_str(), okey.GetLength());
+ FX_DWORD perm = pEncrypt->GetInteger(FX_BSTRC("P"));
+ CRYPT_MD5Update(md5, (uint8_t*)&perm, 4);
+ if (pIdArray) {
+ CFX_ByteString id = pIdArray->GetString(0);
+ CRYPT_MD5Update(md5, (uint8_t*)id.c_str(), id.GetLength());
+ }
+ if (!bIgnoreMeta && revision >= 3 &&
+ !pEncrypt->GetInteger(FX_BSTRC("EncryptMetadata"), 1)) {
+ FX_DWORD tag = (FX_DWORD)-1;
+ CRYPT_MD5Update(md5, (uint8_t*)&tag, 4);
+ }
+ uint8_t digest[16];
+ CRYPT_MD5Finish(md5, digest);
+ FX_DWORD copy_len = keylen;
+ if (copy_len > sizeof(digest)) {
+ copy_len = sizeof(digest);
+ }
+ if (revision >= 3) {
+ for (int i = 0; i < 50; i++) {
+ CRYPT_MD5Generate(digest, copy_len, digest);
+ }
+ }
+ FXSYS_memset(key, 0, keylen);
+ FXSYS_memcpy(key, digest, copy_len);
}
-CPDF_CryptoHandler* CPDF_StandardSecurityHandler::CreateCryptoHandler()
-{
- return new CPDF_StandardCryptoHandler;
+CPDF_CryptoHandler* CPDF_StandardSecurityHandler::CreateCryptoHandler() {
+ return new CPDF_StandardCryptoHandler;
}
-typedef struct _PDF_CRYPTOITEM {
- int32_t m_Cipher;
- int32_t m_KeyLen;
- FX_BOOL m_bChecked;
- CPDF_StandardCryptoHandler* m_pCryptoHandler;
+typedef struct _PDF_CRYPTOITEM {
+ int32_t m_Cipher;
+ int32_t m_KeyLen;
+ FX_BOOL m_bChecked;
+ CPDF_StandardCryptoHandler* m_pCryptoHandler;
} PDF_CRYPTOITEM;
-CPDF_StandardSecurityHandler::CPDF_StandardSecurityHandler()
-{
- m_Version = 0;
- m_Revision = 0;
- m_pParser = NULL;
- m_pEncryptDict = NULL;
- m_bOwner = FALSE;
- m_Permissions = 0;
- m_Cipher = FXCIPHER_NONE;
- m_KeyLen = 0;
-}
-CPDF_StandardSecurityHandler::~CPDF_StandardSecurityHandler()
-{
-}
-FX_BOOL CPDF_StandardSecurityHandler::OnInit(CPDF_Parser* pParser, CPDF_Dictionary* pEncryptDict)
-{
- m_pParser = pParser;
- if (!LoadDict(pEncryptDict)) {
- return FALSE;
- }
- if (m_Cipher == FXCIPHER_NONE) {
- return TRUE;
- }
- return CheckSecurity(m_KeyLen);
+CPDF_StandardSecurityHandler::CPDF_StandardSecurityHandler() {
+ m_Version = 0;
+ m_Revision = 0;
+ m_pParser = NULL;
+ m_pEncryptDict = NULL;
+ m_bOwner = FALSE;
+ m_Permissions = 0;
+ m_Cipher = FXCIPHER_NONE;
+ m_KeyLen = 0;
}
-FX_BOOL CPDF_StandardSecurityHandler::CheckSecurity(int32_t key_len)
-{
- CFX_ByteString password = m_pParser->GetPassword();
- if (CheckPassword(password, password.GetLength(), TRUE, m_EncryptKey, key_len)) {
- if (password.IsEmpty()) {
- if (!CheckPassword(password, password.GetLength(), FALSE, m_EncryptKey, key_len)) {
- return FALSE;
- }
- }
- m_bOwner = TRUE;
- return TRUE;
- }
- return CheckPassword(password, password.GetLength(), FALSE, m_EncryptKey, key_len);
-}
-FX_DWORD CPDF_StandardSecurityHandler::GetPermissions()
-{
- return m_Permissions;
-}
-static FX_BOOL _LoadCryptInfo(CPDF_Dictionary* pEncryptDict, const CFX_ByteStringC& name, int& cipher, int& keylen)
-{
- int Version = pEncryptDict->GetInteger(FX_BSTRC("V"));
- cipher = FXCIPHER_RC4;
- keylen = 0;
- if (Version >= 4) {
- CPDF_Dictionary* pCryptFilters = pEncryptDict->GetDict(FX_BSTRC("CF"));
- if (pCryptFilters == NULL) {
- return FALSE;
- }
- if (name == FX_BSTRC("Identity")) {
- cipher = FXCIPHER_NONE;
- } else {
- CPDF_Dictionary* pDefFilter = pCryptFilters->GetDict(name);
- if (pDefFilter == NULL) {
- return FALSE;
- }
- int nKeyBits = 0;
- if (Version == 4) {
- nKeyBits = pDefFilter->GetInteger(FX_BSTRC("Length"), 0);
- if (nKeyBits == 0) {
- nKeyBits = pEncryptDict->GetInteger(FX_BSTRC("Length"), 128);
- }
- } else {
- nKeyBits = pEncryptDict->GetInteger(FX_BSTRC("Length"), 256);
- }
- if (nKeyBits < 40) {
- nKeyBits *= 8;
- }
- keylen = nKeyBits / 8;
- CFX_ByteString cipher_name = pDefFilter->GetString(FX_BSTRC("CFM"));
- if (cipher_name == FX_BSTRC("AESV2") || cipher_name == FX_BSTRC("AESV3")) {
- cipher = FXCIPHER_AES;
- }
- }
- } else {
- keylen = Version > 1 ? pEncryptDict->GetInteger(FX_BSTRC("Length"), 40) / 8 : 5;
- }
- if (keylen > 32 || keylen < 0) {
- return FALSE;
- }
+CPDF_StandardSecurityHandler::~CPDF_StandardSecurityHandler() {}
+FX_BOOL CPDF_StandardSecurityHandler::OnInit(CPDF_Parser* pParser,
+ CPDF_Dictionary* pEncryptDict) {
+ m_pParser = pParser;
+ if (!LoadDict(pEncryptDict)) {
+ return FALSE;
+ }
+ if (m_Cipher == FXCIPHER_NONE) {
return TRUE;
+ }
+ return CheckSecurity(m_KeyLen);
}
-FX_BOOL CPDF_StandardSecurityHandler::LoadDict(CPDF_Dictionary* pEncryptDict)
-{
- m_pEncryptDict = pEncryptDict;
- m_bOwner = FALSE;
- m_Version = pEncryptDict->GetInteger(FX_BSTRC("V"));
- m_Revision = pEncryptDict->GetInteger(FX_BSTRC("R"));
- m_Permissions = pEncryptDict->GetInteger(FX_BSTRC("P"), -1);
- if (m_Version < 4) {
- return _LoadCryptInfo(pEncryptDict, CFX_ByteString(), m_Cipher, m_KeyLen);
- }
- CFX_ByteString stmf_name = pEncryptDict->GetString(FX_BSTRC("StmF"));
- CFX_ByteString strf_name = pEncryptDict->GetString(FX_BSTRC("StrF"));
- if (stmf_name != strf_name) {
- return FALSE;
- }
- if (!_LoadCryptInfo(pEncryptDict, strf_name, m_Cipher, m_KeyLen)) {
+FX_BOOL CPDF_StandardSecurityHandler::CheckSecurity(int32_t key_len) {
+ CFX_ByteString password = m_pParser->GetPassword();
+ if (CheckPassword(password, password.GetLength(), TRUE, m_EncryptKey,
+ key_len)) {
+ if (password.IsEmpty()) {
+ if (!CheckPassword(password, password.GetLength(), FALSE, m_EncryptKey,
+ key_len)) {
return FALSE;
+ }
}
+ m_bOwner = TRUE;
return TRUE;
+ }
+ return CheckPassword(password, password.GetLength(), FALSE, m_EncryptKey,
+ key_len);
}
-FX_BOOL CPDF_StandardSecurityHandler::LoadDict(CPDF_Dictionary* pEncryptDict, FX_DWORD type, int& cipher, int& key_len)
-{
- m_pEncryptDict = pEncryptDict;
- m_bOwner = FALSE;
- m_Version = pEncryptDict->GetInteger(FX_BSTRC("V"));
- m_Revision = pEncryptDict->GetInteger(FX_BSTRC("R"));
- m_Permissions = pEncryptDict->GetInteger(FX_BSTRC("P"), -1);
- CFX_ByteString strf_name, stmf_name;
- if (m_Version >= 4) {
- stmf_name = pEncryptDict->GetString(FX_BSTRC("StmF"));
- strf_name = pEncryptDict->GetString(FX_BSTRC("StrF"));
- if (stmf_name != strf_name) {
- return FALSE;
- }
- }
- if (!_LoadCryptInfo(pEncryptDict, strf_name, cipher, key_len)) {
+FX_DWORD CPDF_StandardSecurityHandler::GetPermissions() {
+ return m_Permissions;
+}
+static FX_BOOL _LoadCryptInfo(CPDF_Dictionary* pEncryptDict,
+ const CFX_ByteStringC& name,
+ int& cipher,
+ int& keylen) {
+ int Version = pEncryptDict->GetInteger(FX_BSTRC("V"));
+ cipher = FXCIPHER_RC4;
+ keylen = 0;
+ if (Version >= 4) {
+ CPDF_Dictionary* pCryptFilters = pEncryptDict->GetDict(FX_BSTRC("CF"));
+ if (pCryptFilters == NULL) {
+ return FALSE;
+ }
+ if (name == FX_BSTRC("Identity")) {
+ cipher = FXCIPHER_NONE;
+ } else {
+ CPDF_Dictionary* pDefFilter = pCryptFilters->GetDict(name);
+ if (pDefFilter == NULL) {
return FALSE;
+ }
+ int nKeyBits = 0;
+ if (Version == 4) {
+ nKeyBits = pDefFilter->GetInteger(FX_BSTRC("Length"), 0);
+ if (nKeyBits == 0) {
+ nKeyBits = pEncryptDict->GetInteger(FX_BSTRC("Length"), 128);
+ }
+ } else {
+ nKeyBits = pEncryptDict->GetInteger(FX_BSTRC("Length"), 256);
+ }
+ if (nKeyBits < 40) {
+ nKeyBits *= 8;
+ }
+ keylen = nKeyBits / 8;
+ CFX_ByteString cipher_name = pDefFilter->GetString(FX_BSTRC("CFM"));
+ if (cipher_name == FX_BSTRC("AESV2") ||
+ cipher_name == FX_BSTRC("AESV3")) {
+ cipher = FXCIPHER_AES;
+ }
+ }
+ } else {
+ keylen =
+ Version > 1 ? pEncryptDict->GetInteger(FX_BSTRC("Length"), 40) / 8 : 5;
+ }
+ if (keylen > 32 || keylen < 0) {
+ return FALSE;
+ }
+ return TRUE;
+}
+FX_BOOL CPDF_StandardSecurityHandler::LoadDict(CPDF_Dictionary* pEncryptDict) {
+ m_pEncryptDict = pEncryptDict;
+ m_bOwner = FALSE;
+ m_Version = pEncryptDict->GetInteger(FX_BSTRC("V"));
+ m_Revision = pEncryptDict->GetInteger(FX_BSTRC("R"));
+ m_Permissions = pEncryptDict->GetInteger(FX_BSTRC("P"), -1);
+ if (m_Version < 4) {
+ return _LoadCryptInfo(pEncryptDict, CFX_ByteString(), m_Cipher, m_KeyLen);
+ }
+ CFX_ByteString stmf_name = pEncryptDict->GetString(FX_BSTRC("StmF"));
+ CFX_ByteString strf_name = pEncryptDict->GetString(FX_BSTRC("StrF"));
+ if (stmf_name != strf_name) {
+ return FALSE;
+ }
+ if (!_LoadCryptInfo(pEncryptDict, strf_name, m_Cipher, m_KeyLen)) {
+ return FALSE;
+ }
+ return TRUE;
+}
+FX_BOOL CPDF_StandardSecurityHandler::LoadDict(CPDF_Dictionary* pEncryptDict,
+ FX_DWORD type,
+ int& cipher,
+ int& key_len) {
+ m_pEncryptDict = pEncryptDict;
+ m_bOwner = FALSE;
+ m_Version = pEncryptDict->GetInteger(FX_BSTRC("V"));
+ m_Revision = pEncryptDict->GetInteger(FX_BSTRC("R"));
+ m_Permissions = pEncryptDict->GetInteger(FX_BSTRC("P"), -1);
+ CFX_ByteString strf_name, stmf_name;
+ if (m_Version >= 4) {
+ stmf_name = pEncryptDict->GetString(FX_BSTRC("StmF"));
+ strf_name = pEncryptDict->GetString(FX_BSTRC("StrF"));
+ if (stmf_name != strf_name) {
+ return FALSE;
}
- m_Cipher = cipher;
- m_KeyLen = key_len;
- return TRUE;
- return TRUE;
+ }
+ if (!_LoadCryptInfo(pEncryptDict, strf_name, cipher, key_len)) {
+ return FALSE;
+ }
+ m_Cipher = cipher;
+ m_KeyLen = key_len;
+ return TRUE;
+ return TRUE;
}
-FX_BOOL CPDF_StandardSecurityHandler::GetCryptInfo(int& cipher, const uint8_t*& buffer, int& keylen)
-{
- cipher = m_Cipher;
- buffer = m_EncryptKey;
- keylen = m_KeyLen;
- return TRUE;
+FX_BOOL CPDF_StandardSecurityHandler::GetCryptInfo(int& cipher,
+ const uint8_t*& buffer,
+ int& keylen) {
+ cipher = m_Cipher;
+ buffer = m_EncryptKey;
+ keylen = m_KeyLen;
+ return TRUE;
}
-#define FX_GET_32WORD(n,b,i) \
- { \
- (n) = (FX_DWORD)(( (uint64_t) (b)[(i)] << 24 ) \
- | ( (uint64_t) (b)[(i) + 1] << 16 ) \
- | ( (uint64_t) (b)[(i) + 2] << 8 ) \
- | ( (uint64_t) (b)[(i) + 3] )); \
- }
-int BigOrder64BitsMod3(uint8_t* data)
-{
- uint64_t ret = 0;
- for (int i = 0; i < 4; ++i) {
- FX_DWORD value;
- FX_GET_32WORD(value, data, 4 * i);
- ret <<= 32;
- ret |= value;
- ret %= 3;
- }
- return (int)ret;
-}
-void Revision6_Hash(const uint8_t* password, FX_DWORD size, const uint8_t* salt, const uint8_t* vector, uint8_t* hash)
-{
- int iBlockSize = 32;
- uint8_t sha[128];
+#define FX_GET_32WORD(n, b, i) \
+ { \
+ (n) = (FX_DWORD)( \
+ ((uint64_t)(b)[(i)] << 24) | ((uint64_t)(b)[(i) + 1] << 16) | \
+ ((uint64_t)(b)[(i) + 2] << 8) | ((uint64_t)(b)[(i) + 3])); \
+ }
+int BigOrder64BitsMod3(uint8_t* data) {
+ uint64_t ret = 0;
+ for (int i = 0; i < 4; ++i) {
+ FX_DWORD value;
+ FX_GET_32WORD(value, data, 4 * i);
+ ret <<= 32;
+ ret |= value;
+ ret %= 3;
+ }
+ return (int)ret;
+}
+void Revision6_Hash(const uint8_t* password,
+ FX_DWORD size,
+ const uint8_t* salt,
+ const uint8_t* vector,
+ uint8_t* hash) {
+ int iBlockSize = 32;
+ uint8_t sha[128];
+ CRYPT_SHA256Start(sha);
+ CRYPT_SHA256Update(sha, password, size);
+ CRYPT_SHA256Update(sha, salt, 8);
+ if (vector) {
+ CRYPT_SHA256Update(sha, vector, 48);
+ }
+ uint8_t digest[32];
+ CRYPT_SHA256Finish(sha, digest);
+ CFX_ByteTextBuf buf;
+ uint8_t* input = digest;
+ uint8_t* key = input;
+ uint8_t* iv = input + 16;
+ uint8_t* E = buf.GetBuffer();
+ int iBufLen = buf.GetLength();
+ CFX_ByteTextBuf interDigest;
+ int i = 0;
+ uint8_t* aes = FX_Alloc(uint8_t, 2048);
+ while (i < 64 || i < E[iBufLen - 1] + 32) {
+ int iRoundSize = size + iBlockSize;
+ if (vector) {
+ iRoundSize += 48;
+ }
+ iBufLen = iRoundSize * 64;
+ buf.EstimateSize(iBufLen);
+ E = buf.GetBuffer();
+ CFX_ByteTextBuf content;
+ for (int j = 0; j < 64; ++j) {
+ content.AppendBlock(password, size);
+ content.AppendBlock(input, iBlockSize);
+ if (vector) {
+ content.AppendBlock(vector, 48);
+ }
+ }
+ CRYPT_AESSetKey(aes, 16, key, 16, TRUE);
+ CRYPT_AESSetIV(aes, iv);
+ CRYPT_AESEncrypt(aes, E, content.GetBuffer(), iBufLen);
+ int iHash = 0;
+ switch (BigOrder64BitsMod3(E)) {
+ case 0:
+ iHash = 0;
+ iBlockSize = 32;
+ break;
+ case 1:
+ iHash = 1;
+ iBlockSize = 48;
+ break;
+ default:
+ iHash = 2;
+ iBlockSize = 64;
+ break;
+ }
+ interDigest.EstimateSize(iBlockSize);
+ input = interDigest.GetBuffer();
+ if (iHash == 0) {
+ CRYPT_SHA256Generate(E, iBufLen, input);
+ } else if (iHash == 1) {
+ CRYPT_SHA384Generate(E, iBufLen, input);
+ } else if (iHash == 2) {
+ CRYPT_SHA512Generate(E, iBufLen, input);
+ }
+ key = input;
+ iv = input + 16;
+ ++i;
+ }
+ FX_Free(aes);
+ if (hash) {
+ FXSYS_memcpy(hash, input, 32);
+ }
+}
+FX_BOOL CPDF_StandardSecurityHandler::AES256_CheckPassword(
+ const uint8_t* password,
+ FX_DWORD size,
+ FX_BOOL bOwner,
+ uint8_t* key) {
+ CFX_ByteString okey = m_pEncryptDict
+ ? m_pEncryptDict->GetString(FX_BSTRC("O"))
+ : CFX_ByteString();
+ if (okey.GetLength() < 48) {
+ return FALSE;
+ }
+ CFX_ByteString ukey = m_pEncryptDict
+ ? m_pEncryptDict->GetString(FX_BSTRC("U"))
+ : CFX_ByteString();
+ if (ukey.GetLength() < 48) {
+ return FALSE;
+ }
+ const uint8_t* pkey = bOwner ? (const uint8_t*)okey : (const uint8_t*)ukey;
+ uint8_t sha[128];
+ uint8_t digest[32];
+ if (m_Revision >= 6) {
+ Revision6_Hash(password, size, (const uint8_t*)pkey + 32,
+ (bOwner ? (const uint8_t*)ukey : NULL), digest);
+ } else {
CRYPT_SHA256Start(sha);
CRYPT_SHA256Update(sha, password, size);
- CRYPT_SHA256Update(sha, salt, 8);
- if (vector) {
- CRYPT_SHA256Update(sha, vector, 48);
+ CRYPT_SHA256Update(sha, pkey + 32, 8);
+ if (bOwner) {
+ CRYPT_SHA256Update(sha, ukey, 48);
}
- uint8_t digest[32];
CRYPT_SHA256Finish(sha, digest);
- CFX_ByteTextBuf buf;
- uint8_t* input = digest;
- uint8_t* key = input;
- uint8_t* iv = input + 16;
- uint8_t* E = buf.GetBuffer();
- int iBufLen = buf.GetLength();
- CFX_ByteTextBuf interDigest;
- int i = 0;
- uint8_t* aes = FX_Alloc(uint8_t, 2048);
- while (i < 64 || i < E[iBufLen - 1] + 32) {
- int iRoundSize = size + iBlockSize;
- if (vector) {
- iRoundSize += 48;
- }
- iBufLen = iRoundSize * 64;
- buf.EstimateSize(iBufLen);
- E = buf.GetBuffer();
- CFX_ByteTextBuf content;
- for (int j = 0; j < 64; ++j) {
- content.AppendBlock(password, size);
- content.AppendBlock(input, iBlockSize);
- if (vector) {
- content.AppendBlock(vector, 48);
- }
- }
- CRYPT_AESSetKey(aes, 16, key, 16, TRUE);
- CRYPT_AESSetIV(aes, iv);
- CRYPT_AESEncrypt(aes, E, content.GetBuffer(), iBufLen);
- int iHash = 0;
- switch (BigOrder64BitsMod3(E)) {
- case 0:
- iHash = 0;
- iBlockSize = 32;
- break;
- case 1:
- iHash = 1;
- iBlockSize = 48;
- break;
- default:
- iHash = 2;
- iBlockSize = 64;
- break;
- }
- interDigest.EstimateSize(iBlockSize);
- input = interDigest.GetBuffer();
- if (iHash == 0) {
- CRYPT_SHA256Generate(E, iBufLen, input);
- } else if (iHash == 1) {
- CRYPT_SHA384Generate(E, iBufLen, input);
- } else if (iHash == 2) {
- CRYPT_SHA512Generate(E, iBufLen, input);
- }
- key = input;
- iv = input + 16;
- ++i;
- }
- FX_Free(aes);
- if (hash) {
- FXSYS_memcpy(hash, input, 32);
+ }
+ if (FXSYS_memcmp(digest, pkey, 32) != 0) {
+ return FALSE;
+ }
+ if (key == NULL) {
+ return TRUE;
+ }
+ if (m_Revision >= 6) {
+ Revision6_Hash(password, size, (const uint8_t*)pkey + 40,
+ (bOwner ? (const uint8_t*)ukey : NULL), digest);
+ } else {
+ CRYPT_SHA256Start(sha);
+ CRYPT_SHA256Update(sha, password, size);
+ CRYPT_SHA256Update(sha, pkey + 40, 8);
+ if (bOwner) {
+ CRYPT_SHA256Update(sha, ukey, 48);
}
+ CRYPT_SHA256Finish(sha, digest);
+ }
+ CFX_ByteString ekey =
+ m_pEncryptDict
+ ? m_pEncryptDict->GetString(bOwner ? FX_BSTRC("OE") : FX_BSTRC("UE"))
+ : CFX_ByteString();
+ if (ekey.GetLength() < 32) {
+ return FALSE;
+ }
+ uint8_t* aes = FX_Alloc(uint8_t, 2048);
+ CRYPT_AESSetKey(aes, 16, digest, 32, FALSE);
+ uint8_t iv[16];
+ FXSYS_memset(iv, 0, 16);
+ CRYPT_AESSetIV(aes, iv);
+ CRYPT_AESDecrypt(aes, key, ekey, 32);
+ CRYPT_AESSetKey(aes, 16, key, 32, FALSE);
+ CRYPT_AESSetIV(aes, iv);
+ CFX_ByteString perms = m_pEncryptDict->GetString(FX_BSTRC("Perms"));
+ if (perms.IsEmpty()) {
+ return FALSE;
+ }
+ uint8_t perms_buf[16];
+ FXSYS_memset(perms_buf, 0, sizeof(perms_buf));
+ FX_DWORD copy_len = sizeof(perms_buf);
+ if (copy_len > (FX_DWORD)perms.GetLength()) {
+ copy_len = perms.GetLength();
+ }
+ FXSYS_memcpy(perms_buf, (const uint8_t*)perms, copy_len);
+ uint8_t buf[16];
+ CRYPT_AESDecrypt(aes, buf, perms_buf, 16);
+ FX_Free(aes);
+ if (buf[9] != 'a' || buf[10] != 'd' || buf[11] != 'b') {
+ return FALSE;
+ }
+ if (FXDWORD_GET_LSBFIRST(buf) != m_Permissions) {
+ return FALSE;
+ }
+ if ((buf[8] == 'T' && !IsMetadataEncrypted()) ||
+ (buf[8] == 'F' && IsMetadataEncrypted())) {
+ return FALSE;
+ }
+ return TRUE;
}
-FX_BOOL CPDF_StandardSecurityHandler::AES256_CheckPassword(const uint8_t* password, FX_DWORD size,
- FX_BOOL bOwner, uint8_t* key)
-{
- CFX_ByteString okey = m_pEncryptDict ? m_pEncryptDict->GetString(FX_BSTRC("O")) : CFX_ByteString();
- if (okey.GetLength() < 48) {
- return FALSE;
- }
- CFX_ByteString ukey = m_pEncryptDict ? m_pEncryptDict->GetString(FX_BSTRC("U")) : CFX_ByteString();
- if (ukey.GetLength() < 48) {
- return FALSE;
- }
- const uint8_t* pkey = bOwner ? (const uint8_t*)okey : (const uint8_t*)ukey;
- uint8_t sha[128];
- uint8_t digest[32];
- if (m_Revision >= 6) {
- Revision6_Hash(password, size, (const uint8_t*)pkey + 32, (bOwner ? (const uint8_t*)ukey : NULL), digest);
- } else {
- CRYPT_SHA256Start(sha);
- CRYPT_SHA256Update(sha, password, size);
- CRYPT_SHA256Update(sha, pkey + 32, 8);
- if (bOwner) {
- CRYPT_SHA256Update(sha, ukey, 48);
- }
- CRYPT_SHA256Finish(sha, digest);
- }
- if (FXSYS_memcmp(digest, pkey, 32) != 0) {
- return FALSE;
- }
- if (key == NULL) {
- return TRUE;
- }
- if (m_Revision >= 6) {
- Revision6_Hash(password, size, (const uint8_t*)pkey + 40, (bOwner ? (const uint8_t*)ukey : NULL), digest);
- } else {
- CRYPT_SHA256Start(sha);
- CRYPT_SHA256Update(sha, password, size);
- CRYPT_SHA256Update(sha, pkey + 40, 8);
- if (bOwner) {
- CRYPT_SHA256Update(sha, ukey, 48);
- }
- CRYPT_SHA256Finish(sha, digest);
- }
- CFX_ByteString ekey = m_pEncryptDict ? m_pEncryptDict->GetString(bOwner ? FX_BSTRC("OE") : FX_BSTRC("UE")) : CFX_ByteString();
- if (ekey.GetLength() < 32) {
- return FALSE;
- }
- uint8_t* aes = FX_Alloc(uint8_t, 2048);
- CRYPT_AESSetKey(aes, 16, digest, 32, FALSE);
- uint8_t iv[16];
- FXSYS_memset(iv, 0, 16);
- CRYPT_AESSetIV(aes, iv);
- CRYPT_AESDecrypt(aes, key, ekey, 32);
- CRYPT_AESSetKey(aes, 16, key, 32, FALSE);
- CRYPT_AESSetIV(aes, iv);
- CFX_ByteString perms = m_pEncryptDict->GetString(FX_BSTRC("Perms"));
- if (perms.IsEmpty()) {
- return FALSE;
- }
- uint8_t perms_buf[16];
- FXSYS_memset(perms_buf, 0, sizeof(perms_buf));
- FX_DWORD copy_len = sizeof(perms_buf);
- if (copy_len > (FX_DWORD)perms.GetLength()) {
- copy_len = perms.GetLength();
- }
- FXSYS_memcpy(perms_buf, (const uint8_t*)perms, copy_len);
- uint8_t buf[16];
- CRYPT_AESDecrypt(aes, buf, perms_buf, 16);
- FX_Free(aes);
- if (buf[9] != 'a' || buf[10] != 'd' || buf[11] != 'b') {
- return FALSE;
- }
- if (FXDWORD_GET_LSBFIRST(buf) != m_Permissions) {
- return FALSE;
+int CPDF_StandardSecurityHandler::CheckPassword(const uint8_t* password,
+ FX_DWORD pass_size,
+ FX_BOOL bOwner,
+ uint8_t* key) {
+ return CheckPassword(password, pass_size, bOwner, key, m_KeyLen);
+}
+int CPDF_StandardSecurityHandler::CheckPassword(const uint8_t* password,
+ FX_DWORD size,
+ FX_BOOL bOwner,
+ uint8_t* key,
+ int32_t key_len) {
+ if (m_Revision >= 5) {
+ return AES256_CheckPassword(password, size, bOwner, key);
+ }
+ uint8_t keybuf[32];
+ if (key == NULL) {
+ key = keybuf;
+ }
+ if (bOwner) {
+ return CheckOwnerPassword(password, size, key, key_len);
+ }
+ return CheckUserPassword(password, size, FALSE, key, key_len) ||
+ CheckUserPassword(password, size, TRUE, key, key_len);
+}
+FX_BOOL CPDF_StandardSecurityHandler::CheckUserPassword(
+ const uint8_t* password,
+ FX_DWORD pass_size,
+ FX_BOOL bIgnoreEncryptMeta,
+ uint8_t* key,
+ int32_t key_len) {
+ CalcEncryptKey(m_pEncryptDict, password, pass_size, key, key_len,
+ bIgnoreEncryptMeta, m_pParser->GetIDArray());
+ CFX_ByteString ukey = m_pEncryptDict
+ ? m_pEncryptDict->GetString(FX_BSTRC("U"))
+ : CFX_ByteString();
+ if (ukey.GetLength() < 16) {
+ return FALSE;
+ }
+ uint8_t ukeybuf[32];
+ if (m_Revision == 2) {
+ FXSYS_memcpy(ukeybuf, defpasscode, 32);
+ CRYPT_ArcFourCryptBlock(ukeybuf, 32, key, key_len);
+ } else {
+ uint8_t test[32], tmpkey[32];
+ FX_DWORD copy_len = sizeof(test);
+ if (copy_len > (FX_DWORD)ukey.GetLength()) {
+ copy_len = ukey.GetLength();
+ }
+ FXSYS_memset(test, 0, sizeof(test));
+ FXSYS_memset(tmpkey, 0, sizeof(tmpkey));
+ FXSYS_memcpy(test, ukey.c_str(), copy_len);
+ for (int i = 19; i >= 0; i--) {
+ for (int j = 0; j < key_len; j++) {
+ tmpkey[j] = key[j] ^ i;
+ }
+ CRYPT_ArcFourCryptBlock(test, 32, tmpkey, key_len);
}
- if ((buf[8] == 'T' && !IsMetadataEncrypted()) || (buf[8] == 'F' && IsMetadataEncrypted())) {
- return FALSE;
+ uint8_t md5[100];
+ CRYPT_MD5Start(md5);
+ CRYPT_MD5Update(md5, defpasscode, 32);
+ CPDF_Array* pIdArray = m_pParser->GetIDArray();
+ if (pIdArray) {
+ CFX_ByteString id = pIdArray->GetString(0);
+ CRYPT_MD5Update(md5, (uint8_t*)id.c_str(), id.GetLength());
}
+ CRYPT_MD5Finish(md5, ukeybuf);
+ return FXSYS_memcmp(test, ukeybuf, 16) == 0;
+ }
+ if (FXSYS_memcmp((void*)ukey.c_str(), ukeybuf, 16) == 0) {
return TRUE;
+ }
+ return FALSE;
}
-int CPDF_StandardSecurityHandler::CheckPassword(const uint8_t* password, FX_DWORD pass_size, FX_BOOL bOwner, uint8_t* key)
-{
- return CheckPassword(password, pass_size, bOwner, key, m_KeyLen);
+CFX_ByteString CPDF_StandardSecurityHandler::GetUserPassword(
+ const uint8_t* owner_pass,
+ FX_DWORD pass_size) {
+ return GetUserPassword(owner_pass, pass_size, m_KeyLen);
}
-int CPDF_StandardSecurityHandler::CheckPassword(const uint8_t* password, FX_DWORD size, FX_BOOL bOwner, uint8_t* key, int32_t key_len)
-{
- if (m_Revision >= 5) {
- return AES256_CheckPassword(password, size, bOwner, key);
- }
- uint8_t keybuf[32];
- if (key == NULL) {
- key = keybuf;
- }
- if (bOwner) {
- return CheckOwnerPassword(password, size, key, key_len);
- }
- return CheckUserPassword(password, size, FALSE, key, key_len) || CheckUserPassword(password, size, TRUE, key, key_len);
+CFX_ByteString CPDF_StandardSecurityHandler::GetUserPassword(
+ const uint8_t* owner_pass,
+ FX_DWORD pass_size,
+ int32_t key_len) {
+ CFX_ByteString okey = m_pEncryptDict->GetString(FX_BSTRC("O"));
+ uint8_t passcode[32];
+ FX_DWORD i;
+ for (i = 0; i < 32; i++) {
+ passcode[i] = i < pass_size ? owner_pass[i] : defpasscode[i - pass_size];
+ }
+ uint8_t digest[16];
+ CRYPT_MD5Generate(passcode, 32, digest);
+ if (m_Revision >= 3) {
+ for (int i = 0; i < 50; i++) {
+ CRYPT_MD5Generate(digest, 16, digest);
+ }
+ }
+ uint8_t enckey[32];
+ FXSYS_memset(enckey, 0, sizeof(enckey));
+ FX_DWORD copy_len = key_len;
+ if (copy_len > sizeof(digest)) {
+ copy_len = sizeof(digest);
+ }
+ FXSYS_memcpy(enckey, digest, copy_len);
+ int okeylen = okey.GetLength();
+ if (okeylen > 32) {
+ okeylen = 32;
+ }
+ uint8_t okeybuf[64];
+ FXSYS_memset(okeybuf, 0, sizeof(okeybuf));
+ FXSYS_memcpy(okeybuf, okey.c_str(), okeylen);
+ if (m_Revision == 2) {
+ CRYPT_ArcFourCryptBlock(okeybuf, okeylen, enckey, key_len);
+ } else {
+ for (int i = 19; i >= 0; i--) {
+ uint8_t tempkey[32];
+ FXSYS_memset(tempkey, 0, sizeof(tempkey));
+ for (int j = 0; j < m_KeyLen; j++) {
+ tempkey[j] = enckey[j] ^ i;
+ }
+ CRYPT_ArcFourCryptBlock(okeybuf, okeylen, tempkey, key_len);
+ }
+ }
+ int len = 32;
+ while (len && defpasscode[len - 1] == okeybuf[len - 1]) {
+ len--;
+ }
+ return CFX_ByteString(okeybuf, len);
}
-FX_BOOL CPDF_StandardSecurityHandler::CheckUserPassword(const uint8_t* password, FX_DWORD pass_size,
- FX_BOOL bIgnoreEncryptMeta, uint8_t* key, int32_t key_len)
-{
- CalcEncryptKey(m_pEncryptDict, password, pass_size, key, key_len, bIgnoreEncryptMeta,
- m_pParser->GetIDArray());
- CFX_ByteString ukey = m_pEncryptDict ? m_pEncryptDict->GetString(FX_BSTRC("U")) : CFX_ByteString();
- if (ukey.GetLength() < 16) {
- return FALSE;
- }
- uint8_t ukeybuf[32];
- if (m_Revision == 2) {
- FXSYS_memcpy(ukeybuf, defpasscode, 32);
- CRYPT_ArcFourCryptBlock(ukeybuf, 32, key, key_len);
- } else {
- uint8_t test[32], tmpkey[32];
- FX_DWORD copy_len = sizeof(test);
- if (copy_len > (FX_DWORD)ukey.GetLength()) {
- copy_len = ukey.GetLength();
- }
- FXSYS_memset(test, 0, sizeof(test));
- FXSYS_memset(tmpkey, 0, sizeof(tmpkey));
- FXSYS_memcpy(test, ukey.c_str(), copy_len);
- for (int i = 19; i >= 0; i --) {
- for (int j = 0; j < key_len; j ++) {
- tmpkey[j] = key[j] ^ i;
- }
- CRYPT_ArcFourCryptBlock(test, 32, tmpkey, key_len);
- }
- uint8_t md5[100];
- CRYPT_MD5Start(md5);
- CRYPT_MD5Update(md5, defpasscode, 32);
- CPDF_Array* pIdArray = m_pParser->GetIDArray();
- if (pIdArray) {
- CFX_ByteString id = pIdArray->GetString(0);
- CRYPT_MD5Update(md5, (uint8_t*)id.c_str(), id.GetLength());
- }
- CRYPT_MD5Finish(md5, ukeybuf);
- return FXSYS_memcmp(test, ukeybuf, 16) == 0;
- }
- if (FXSYS_memcmp((void*)ukey.c_str(), ukeybuf, 16) == 0) {
- return TRUE;
- }
- return FALSE;
+FX_BOOL CPDF_StandardSecurityHandler::CheckOwnerPassword(
+ const uint8_t* password,
+ FX_DWORD pass_size,
+ uint8_t* key,
+ int32_t key_len) {
+ CFX_ByteString user_pass = GetUserPassword(password, pass_size, key_len);
+ if (CheckUserPassword(user_pass, user_pass.GetLength(), FALSE, key,
+ key_len)) {
+ return TRUE;
+ }
+ return CheckUserPassword(user_pass, user_pass.GetLength(), TRUE, key,
+ key_len);
}
-CFX_ByteString CPDF_StandardSecurityHandler::GetUserPassword(const uint8_t* owner_pass, FX_DWORD pass_size)
-{
- return GetUserPassword(owner_pass, pass_size, m_KeyLen);
+FX_BOOL CPDF_StandardSecurityHandler::IsMetadataEncrypted() {
+ return m_pEncryptDict->GetBoolean(FX_BSTRC("EncryptMetadata"), TRUE);
}
-CFX_ByteString CPDF_StandardSecurityHandler::GetUserPassword(const uint8_t* owner_pass, FX_DWORD pass_size, int32_t key_len)
-{
- CFX_ByteString okey = m_pEncryptDict->GetString(FX_BSTRC("O"));
+CPDF_SecurityHandler* FPDF_CreateStandardSecurityHandler() {
+ return new CPDF_StandardSecurityHandler;
+}
+void CPDF_StandardSecurityHandler::OnCreate(CPDF_Dictionary* pEncryptDict,
+ CPDF_Array* pIdArray,
+ const uint8_t* user_pass,
+ FX_DWORD user_size,
+ const uint8_t* owner_pass,
+ FX_DWORD owner_size,
+ FX_BOOL bDefault,
+ FX_DWORD type) {
+ int cipher = 0, key_len = 0;
+ if (!LoadDict(pEncryptDict, type, cipher, key_len)) {
+ return;
+ }
+ if (bDefault && (owner_pass == NULL || owner_size == 0)) {
+ owner_pass = user_pass;
+ owner_size = user_size;
+ }
+ if (m_Revision >= 5) {
+ int t = (int)time(NULL);
+ uint8_t sha[128];
+ CRYPT_SHA256Start(sha);
+ CRYPT_SHA256Update(sha, (uint8_t*)&t, sizeof t);
+ CRYPT_SHA256Update(sha, m_EncryptKey, 32);
+ CRYPT_SHA256Update(sha, (uint8_t*)"there", 5);
+ CRYPT_SHA256Finish(sha, m_EncryptKey);
+ AES256_SetPassword(pEncryptDict, user_pass, user_size, FALSE, m_EncryptKey);
+ if (bDefault) {
+ AES256_SetPassword(pEncryptDict, owner_pass, owner_size, TRUE,
+ m_EncryptKey);
+ AES256_SetPerms(
+ pEncryptDict, m_Permissions,
+ pEncryptDict->GetBoolean(FX_BSTRC("EncryptMetadata"), TRUE),
+ m_EncryptKey);
+ }
+ return;
+ }
+ if (bDefault) {
uint8_t passcode[32];
FX_DWORD i;
- for (i = 0; i < 32; i ++) {
- passcode[i] = i < pass_size ? owner_pass[i] : defpasscode[i - pass_size];
+ for (i = 0; i < 32; i++) {
+ passcode[i] =
+ i < owner_size ? owner_pass[i] : defpasscode[i - owner_size];
}
uint8_t digest[16];
CRYPT_MD5Generate(passcode, 32, digest);
if (m_Revision >= 3) {
- for (int i = 0; i < 50; i ++) {
- CRYPT_MD5Generate(digest, 16, digest);
- }
+ for (int i = 0; i < 50; i++) {
+ CRYPT_MD5Generate(digest, 16, digest);
+ }
}
uint8_t enckey[32];
- FXSYS_memset(enckey, 0, sizeof(enckey));
- FX_DWORD copy_len = key_len;
- if (copy_len > sizeof(digest)) {
- copy_len = sizeof(digest);
- }
- FXSYS_memcpy(enckey, digest, copy_len);
- int okeylen = okey.GetLength();
- if (okeylen > 32) {
- okeylen = 32;
- }
- uint8_t okeybuf[64];
- FXSYS_memset(okeybuf, 0, sizeof(okeybuf));
- FXSYS_memcpy(okeybuf, okey.c_str(), okeylen);
- if (m_Revision == 2) {
- CRYPT_ArcFourCryptBlock(okeybuf, okeylen, enckey, key_len);
- } else {
- for (int i = 19; i >= 0; i --) {
- uint8_t tempkey[32];
- FXSYS_memset(tempkey, 0, sizeof(tempkey));
- for (int j = 0; j < m_KeyLen; j ++) {
- tempkey[j] = enckey[j] ^ i;
- }
- CRYPT_ArcFourCryptBlock(okeybuf, okeylen, tempkey, key_len);
- }
+ FXSYS_memcpy(enckey, digest, key_len);
+ for (i = 0; i < 32; i++) {
+ passcode[i] = i < user_size ? user_pass[i] : defpasscode[i - user_size];
}
- int len = 32;
- while (len && defpasscode[len - 1] == okeybuf[len - 1]) {
- len --;
- }
- return CFX_ByteString(okeybuf, len);
-}
-FX_BOOL CPDF_StandardSecurityHandler::CheckOwnerPassword(const uint8_t* password, FX_DWORD pass_size,
- uint8_t* key, int32_t key_len)
-{
- CFX_ByteString user_pass = GetUserPassword(password, pass_size, key_len);
- if (CheckUserPassword(user_pass, user_pass.GetLength(), FALSE, key, key_len)) {
- return TRUE;
- }
- return CheckUserPassword(user_pass, user_pass.GetLength(), TRUE, key, key_len);
-}
-FX_BOOL CPDF_StandardSecurityHandler::IsMetadataEncrypted()
-{
- return m_pEncryptDict->GetBoolean(FX_BSTRC("EncryptMetadata"), TRUE);
-}
-CPDF_SecurityHandler* FPDF_CreateStandardSecurityHandler()
-{
- return new CPDF_StandardSecurityHandler;
-}
-void CPDF_StandardSecurityHandler::OnCreate(CPDF_Dictionary* pEncryptDict, CPDF_Array* pIdArray,
- const uint8_t* user_pass, FX_DWORD user_size,
- const uint8_t* owner_pass, FX_DWORD owner_size, FX_BOOL bDefault, FX_DWORD type)
-{
- int cipher = 0, key_len = 0;
- if (!LoadDict(pEncryptDict, type, cipher, key_len)) {
- return;
- }
- if (bDefault && (owner_pass == NULL || owner_size == 0)) {
- owner_pass = user_pass;
- owner_size = user_size;
- }
- if (m_Revision >= 5) {
- int t = (int)time(NULL);
- uint8_t sha[128];
- CRYPT_SHA256Start(sha);
- CRYPT_SHA256Update(sha, (uint8_t*)&t, sizeof t);
- CRYPT_SHA256Update(sha, m_EncryptKey, 32);
- CRYPT_SHA256Update(sha, (uint8_t*)"there", 5);
- CRYPT_SHA256Finish(sha, m_EncryptKey);
- AES256_SetPassword(pEncryptDict, user_pass, user_size, FALSE, m_EncryptKey);
- if (bDefault) {
- AES256_SetPassword(pEncryptDict, owner_pass, owner_size, TRUE, m_EncryptKey);
- AES256_SetPerms(pEncryptDict, m_Permissions, pEncryptDict->GetBoolean(FX_BSTRC("EncryptMetadata"), TRUE), m_EncryptKey);
- }
- return;
- }
- if (bDefault) {
- uint8_t passcode[32];
- FX_DWORD i;
- for (i = 0; i < 32; i ++) {
- passcode[i] = i < owner_size ? owner_pass[i] : defpasscode[i - owner_size];
- }
- uint8_t digest[16];
- CRYPT_MD5Generate(passcode, 32, digest);
- if (m_Revision >= 3) {
- for (int i = 0; i < 50; i ++) {
- CRYPT_MD5Generate(digest, 16, digest);
- }
- }
- uint8_t enckey[32];
- FXSYS_memcpy(enckey, digest, key_len);
- for (i = 0; i < 32; i ++) {
- passcode[i] = i < user_size ? user_pass[i] : defpasscode[i - user_size];
- }
- CRYPT_ArcFourCryptBlock(passcode, 32, enckey, key_len);
- uint8_t tempkey[32];
- if (m_Revision >= 3) {
- for (i = 1; i <= 19; i ++) {
- for (int j = 0; j < key_len; j ++) {
- tempkey[j] = enckey[j] ^ (uint8_t)i;
- }
- CRYPT_ArcFourCryptBlock(passcode, 32, tempkey, key_len);
- }
- }
- pEncryptDict->SetAtString(FX_BSTRC("O"), CFX_ByteString(passcode, 32));
- }
- CalcEncryptKey(m_pEncryptDict, (uint8_t*)user_pass, user_size, m_EncryptKey, key_len, FALSE, pIdArray);
- if (m_Revision < 3) {
- uint8_t tempbuf[32];
- FXSYS_memcpy(tempbuf, defpasscode, 32);
- CRYPT_ArcFourCryptBlock(tempbuf, 32, m_EncryptKey, key_len);
- pEncryptDict->SetAtString(FX_BSTRC("U"), CFX_ByteString(tempbuf, 32));
- } else {
- uint8_t md5[100];
- CRYPT_MD5Start(md5);
- CRYPT_MD5Update(md5, defpasscode, 32);
- if (pIdArray) {
- CFX_ByteString id = pIdArray->GetString(0);
- CRYPT_MD5Update(md5, (uint8_t*)id.c_str(), id.GetLength());
- }
- uint8_t digest[32];
- CRYPT_MD5Finish(md5, digest);
- CRYPT_ArcFourCryptBlock(digest, 16, m_EncryptKey, key_len);
- uint8_t tempkey[32];
- for (int i = 1; i <= 19; i ++) {
- for (int j = 0; j < key_len; j ++) {
- tempkey[j] = m_EncryptKey[j] ^ (uint8_t)i;
- }
- CRYPT_ArcFourCryptBlock(digest, 16, tempkey, key_len);
+ CRYPT_ArcFourCryptBlock(passcode, 32, enckey, key_len);
+ uint8_t tempkey[32];
+ if (m_Revision >= 3) {
+ for (i = 1; i <= 19; i++) {
+ for (int j = 0; j < key_len; j++) {
+ tempkey[j] = enckey[j] ^ (uint8_t)i;
}
- CRYPT_MD5Generate(digest, 16, digest + 16);
- pEncryptDict->SetAtString(FX_BSTRC("U"), CFX_ByteString(digest, 32));
+ CRYPT_ArcFourCryptBlock(passcode, 32, tempkey, key_len);
+ }
+ }
+ pEncryptDict->SetAtString(FX_BSTRC("O"), CFX_ByteString(passcode, 32));
+ }
+ CalcEncryptKey(m_pEncryptDict, (uint8_t*)user_pass, user_size, m_EncryptKey,
+ key_len, FALSE, pIdArray);
+ if (m_Revision < 3) {
+ uint8_t tempbuf[32];
+ FXSYS_memcpy(tempbuf, defpasscode, 32);
+ CRYPT_ArcFourCryptBlock(tempbuf, 32, m_EncryptKey, key_len);
+ pEncryptDict->SetAtString(FX_BSTRC("U"), CFX_ByteString(tempbuf, 32));
+ } else {
+ uint8_t md5[100];
+ CRYPT_MD5Start(md5);
+ CRYPT_MD5Update(md5, defpasscode, 32);
+ if (pIdArray) {
+ CFX_ByteString id = pIdArray->GetString(0);
+ CRYPT_MD5Update(md5, (uint8_t*)id.c_str(), id.GetLength());
}
+ uint8_t digest[32];
+ CRYPT_MD5Finish(md5, digest);
+ CRYPT_ArcFourCryptBlock(digest, 16, m_EncryptKey, key_len);
+ uint8_t tempkey[32];
+ for (int i = 1; i <= 19; i++) {
+ for (int j = 0; j < key_len; j++) {
+ tempkey[j] = m_EncryptKey[j] ^ (uint8_t)i;
+ }
+ CRYPT_ArcFourCryptBlock(digest, 16, tempkey, key_len);
+ }
+ CRYPT_MD5Generate(digest, 16, digest + 16);
+ pEncryptDict->SetAtString(FX_BSTRC("U"), CFX_ByteString(digest, 32));
+ }
}
-void CPDF_StandardSecurityHandler::OnCreate(CPDF_Dictionary* pEncryptDict, CPDF_Array* pIdArray,
- const uint8_t* user_pass, FX_DWORD user_size,
- const uint8_t* owner_pass, FX_DWORD owner_size, FX_DWORD type)
-{
- OnCreate(pEncryptDict, pIdArray, user_pass, user_size, owner_pass, owner_size, TRUE, type);
+void CPDF_StandardSecurityHandler::OnCreate(CPDF_Dictionary* pEncryptDict,
+ CPDF_Array* pIdArray,
+ const uint8_t* user_pass,
+ FX_DWORD user_size,
+ const uint8_t* owner_pass,
+ FX_DWORD owner_size,
+ FX_DWORD type) {
+ OnCreate(pEncryptDict, pIdArray, user_pass, user_size, owner_pass, owner_size,
+ TRUE, type);
}
-void CPDF_StandardSecurityHandler::OnCreate(CPDF_Dictionary* pEncryptDict, CPDF_Array* pIdArray, const uint8_t* user_pass, FX_DWORD user_size, FX_DWORD type)
-{
- OnCreate(pEncryptDict, pIdArray, user_pass, user_size, NULL, 0, FALSE, type);
+void CPDF_StandardSecurityHandler::OnCreate(CPDF_Dictionary* pEncryptDict,
+ CPDF_Array* pIdArray,
+ const uint8_t* user_pass,
+ FX_DWORD user_size,
+ FX_DWORD type) {
+ OnCreate(pEncryptDict, pIdArray, user_pass, user_size, NULL, 0, FALSE, type);
}
-void CPDF_StandardSecurityHandler::AES256_SetPassword(CPDF_Dictionary* pEncryptDict, const uint8_t* password, FX_DWORD size, FX_BOOL bOwner, const uint8_t* key)
-{
- uint8_t sha[128];
- CRYPT_SHA1Start(sha);
- CRYPT_SHA1Update(sha, key, 32);
- CRYPT_SHA1Update(sha, (uint8_t*)"hello", 5);
- uint8_t digest[20];
- CRYPT_SHA1Finish(sha, digest);
- CFX_ByteString ukey = pEncryptDict->GetString(FX_BSTRC("U"));
- uint8_t digest1[48];
- if (m_Revision >= 6) {
- Revision6_Hash(password, size, digest, (bOwner ? (const uint8_t*)ukey : NULL), digest1);
- } else {
- CRYPT_SHA256Start(sha);
- CRYPT_SHA256Update(sha, password, size);
- CRYPT_SHA256Update(sha, digest, 8);
- if (bOwner) {
- CRYPT_SHA256Update(sha, ukey, ukey.GetLength());
- }
- CRYPT_SHA256Finish(sha, digest1);
- }
- FXSYS_memcpy(digest1 + 32, digest, 16);
- pEncryptDict->SetAtString(bOwner ? FX_BSTRC("O") : FX_BSTRC("U"), CFX_ByteString(digest1, 48));
- if (m_Revision >= 6) {
- Revision6_Hash(password, size, digest + 8, (bOwner ? (const uint8_t*)ukey : NULL), digest1);
- } else {
- CRYPT_SHA256Start(sha);
- CRYPT_SHA256Update(sha, password, size);
- CRYPT_SHA256Update(sha, digest + 8, 8);
- if (bOwner) {
- CRYPT_SHA256Update(sha, ukey, ukey.GetLength());
- }
- CRYPT_SHA256Finish(sha, digest1);
- }
- uint8_t* aes = FX_Alloc(uint8_t, 2048);
- CRYPT_AESSetKey(aes, 16, digest1, 32, TRUE);
- uint8_t iv[16];
- FXSYS_memset(iv, 0, 16);
- CRYPT_AESSetIV(aes, iv);
- CRYPT_AESEncrypt(aes, digest1, key, 32);
- FX_Free(aes);
- pEncryptDict->SetAtString(bOwner ? FX_BSTRC("OE") : FX_BSTRC("UE"), CFX_ByteString(digest1, 32));
-}
-void CPDF_StandardSecurityHandler::AES256_SetPerms(CPDF_Dictionary* pEncryptDict, FX_DWORD permissions,
- FX_BOOL bEncryptMetadata, const uint8_t* key)
-{
- uint8_t buf[16];
- buf[0] = (uint8_t)permissions;
- buf[1] = (uint8_t)(permissions >> 8);
- buf[2] = (uint8_t)(permissions >> 16);
- buf[3] = (uint8_t)(permissions >> 24);
- buf[4] = 0xff;
- buf[5] = 0xff;
- buf[6] = 0xff;
- buf[7] = 0xff;
- buf[8] = bEncryptMetadata ? 'T' : 'F';
- buf[9] = 'a';
- buf[10] = 'd';
- buf[11] = 'b';
- uint8_t* aes = FX_Alloc(uint8_t, 2048);
- CRYPT_AESSetKey(aes, 16, key, 32, TRUE);
- uint8_t iv[16], buf1[16];
- FXSYS_memset(iv, 0, 16);
- CRYPT_AESSetIV(aes, iv);
- CRYPT_AESEncrypt(aes, buf1, buf, 16);
- FX_Free(aes);
- pEncryptDict->SetAtString(FX_BSTRC("Perms"), CFX_ByteString(buf1, 16));
-}
-void CPDF_StandardCryptoHandler::CryptBlock(FX_BOOL bEncrypt, FX_DWORD objnum, FX_DWORD gennum, const uint8_t* src_buf, FX_DWORD src_size,
- uint8_t* dest_buf, FX_DWORD& dest_size)
-{
- if (m_Cipher == FXCIPHER_NONE) {
- FXSYS_memcpy(dest_buf, src_buf, src_size);
- return;
- }
- uint8_t realkey[16];
- int realkeylen = 16;
- if (m_Cipher != FXCIPHER_AES || m_KeyLen != 32) {
- uint8_t key1[32];
- FXSYS_memcpy(key1, m_EncryptKey, m_KeyLen);
- key1[m_KeyLen + 0] = (uint8_t)objnum;
- key1[m_KeyLen + 1] = (uint8_t)(objnum >> 8);
- key1[m_KeyLen + 2] = (uint8_t)(objnum >> 16);
- key1[m_KeyLen + 3] = (uint8_t)gennum;
- key1[m_KeyLen + 4] = (uint8_t)(gennum >> 8);
- FXSYS_memcpy(key1 + m_KeyLen, &objnum, 3);
- FXSYS_memcpy(key1 + m_KeyLen + 3, &gennum, 2);
- if (m_Cipher == FXCIPHER_AES) {
- FXSYS_memcpy(key1 + m_KeyLen + 5, "sAlT", 4);
- }
- CRYPT_MD5Generate(key1, m_Cipher == FXCIPHER_AES ? m_KeyLen + 9 : m_KeyLen + 5, realkey);
- realkeylen = m_KeyLen + 5;
- if (realkeylen > 16) {
- realkeylen = 16;
- }
- }
- if (m_Cipher == FXCIPHER_AES) {
- CRYPT_AESSetKey(m_pAESContext, 16, m_KeyLen == 32 ? m_EncryptKey : realkey, m_KeyLen, bEncrypt);
- if (bEncrypt) {
- uint8_t iv[16];
- for (int i = 0; i < 16; i ++) {
- iv[i] = (uint8_t)rand();
- }
- CRYPT_AESSetIV(m_pAESContext, iv);
- FXSYS_memcpy(dest_buf, iv, 16);
- int nblocks = src_size / 16;
- CRYPT_AESEncrypt(m_pAESContext, dest_buf + 16, src_buf, nblocks * 16);
- uint8_t padding[16];
- FXSYS_memcpy(padding, src_buf + nblocks * 16, src_size % 16);
- FXSYS_memset(padding + src_size % 16, 16 - src_size % 16, 16 - src_size % 16);
- CRYPT_AESEncrypt(m_pAESContext, dest_buf + nblocks * 16 + 16, padding, 16);
- dest_size = 32 + nblocks * 16;
- } else {
- CRYPT_AESSetIV(m_pAESContext, src_buf);
- CRYPT_AESDecrypt(m_pAESContext, dest_buf, src_buf + 16, src_size - 16);
- dest_size = src_size - 16;
- dest_size -= dest_buf[dest_size - 1];
- }
- } else {
- ASSERT(dest_size == src_size);
- if (dest_buf != src_buf) {
- FXSYS_memcpy(dest_buf, src_buf, src_size);
- }
- CRYPT_ArcFourCryptBlock(dest_buf, dest_size, realkey, realkeylen);
- }
+void CPDF_StandardSecurityHandler::AES256_SetPassword(
+ CPDF_Dictionary* pEncryptDict,
+ const uint8_t* password,
+ FX_DWORD size,
+ FX_BOOL bOwner,
+ const uint8_t* key) {
+ uint8_t sha[128];
+ CRYPT_SHA1Start(sha);
+ CRYPT_SHA1Update(sha, key, 32);
+ CRYPT_SHA1Update(sha, (uint8_t*)"hello", 5);
+ uint8_t digest[20];
+ CRYPT_SHA1Finish(sha, digest);
+ CFX_ByteString ukey = pEncryptDict->GetString(FX_BSTRC("U"));
+ uint8_t digest1[48];
+ if (m_Revision >= 6) {
+ Revision6_Hash(password, size, digest,
+ (bOwner ? (const uint8_t*)ukey : NULL), digest1);
+ } else {
+ CRYPT_SHA256Start(sha);
+ CRYPT_SHA256Update(sha, password, size);
+ CRYPT_SHA256Update(sha, digest, 8);
+ if (bOwner) {
+ CRYPT_SHA256Update(sha, ukey, ukey.GetLength());
+ }
+ CRYPT_SHA256Finish(sha, digest1);
+ }
+ FXSYS_memcpy(digest1 + 32, digest, 16);
+ pEncryptDict->SetAtString(bOwner ? FX_BSTRC("O") : FX_BSTRC("U"),
+ CFX_ByteString(digest1, 48));
+ if (m_Revision >= 6) {
+ Revision6_Hash(password, size, digest + 8,
+ (bOwner ? (const uint8_t*)ukey : NULL), digest1);
+ } else {
+ CRYPT_SHA256Start(sha);
+ CRYPT_SHA256Update(sha, password, size);
+ CRYPT_SHA256Update(sha, digest + 8, 8);
+ if (bOwner) {
+ CRYPT_SHA256Update(sha, ukey, ukey.GetLength());
+ }
+ CRYPT_SHA256Finish(sha, digest1);
+ }
+ uint8_t* aes = FX_Alloc(uint8_t, 2048);
+ CRYPT_AESSetKey(aes, 16, digest1, 32, TRUE);
+ uint8_t iv[16];
+ FXSYS_memset(iv, 0, 16);
+ CRYPT_AESSetIV(aes, iv);
+ CRYPT_AESEncrypt(aes, digest1, key, 32);
+ FX_Free(aes);
+ pEncryptDict->SetAtString(bOwner ? FX_BSTRC("OE") : FX_BSTRC("UE"),
+ CFX_ByteString(digest1, 32));
}
-typedef struct _AESCryptContext {
- uint8_t m_Context[2048];
- FX_BOOL m_bIV;
- uint8_t m_Block[16];
- FX_DWORD m_BlockOffset;
-} AESCryptContext;
-void* CPDF_StandardCryptoHandler::CryptStart(FX_DWORD objnum, FX_DWORD gennum, FX_BOOL bEncrypt)
-{
- if (m_Cipher == FXCIPHER_NONE) {
- return this;
- }
- if (m_Cipher == FXCIPHER_AES && m_KeyLen == 32) {
- AESCryptContext* pContext = FX_Alloc(AESCryptContext, 1);
- pContext->m_bIV = TRUE;
- pContext->m_BlockOffset = 0;
- CRYPT_AESSetKey(pContext->m_Context, 16, m_EncryptKey, 32, bEncrypt);
- if (bEncrypt) {
- for (int i = 0; i < 16; i ++) {
- pContext->m_Block[i] = (uint8_t)rand();
- }
- CRYPT_AESSetIV(pContext->m_Context, pContext->m_Block);
- }
- return pContext;
- }
- uint8_t key1[48];
+void CPDF_StandardSecurityHandler::AES256_SetPerms(
+ CPDF_Dictionary* pEncryptDict,
+ FX_DWORD permissions,
+ FX_BOOL bEncryptMetadata,
+ const uint8_t* key) {
+ uint8_t buf[16];
+ buf[0] = (uint8_t)permissions;
+ buf[1] = (uint8_t)(permissions >> 8);
+ buf[2] = (uint8_t)(permissions >> 16);
+ buf[3] = (uint8_t)(permissions >> 24);
+ buf[4] = 0xff;
+ buf[5] = 0xff;
+ buf[6] = 0xff;
+ buf[7] = 0xff;
+ buf[8] = bEncryptMetadata ? 'T' : 'F';
+ buf[9] = 'a';
+ buf[10] = 'd';
+ buf[11] = 'b';
+ uint8_t* aes = FX_Alloc(uint8_t, 2048);
+ CRYPT_AESSetKey(aes, 16, key, 32, TRUE);
+ uint8_t iv[16], buf1[16];
+ FXSYS_memset(iv, 0, 16);
+ CRYPT_AESSetIV(aes, iv);
+ CRYPT_AESEncrypt(aes, buf1, buf, 16);
+ FX_Free(aes);
+ pEncryptDict->SetAtString(FX_BSTRC("Perms"), CFX_ByteString(buf1, 16));
+}
+void CPDF_StandardCryptoHandler::CryptBlock(FX_BOOL bEncrypt,
+ FX_DWORD objnum,
+ FX_DWORD gennum,
+ const uint8_t* src_buf,
+ FX_DWORD src_size,
+ uint8_t* dest_buf,
+ FX_DWORD& dest_size) {
+ if (m_Cipher == FXCIPHER_NONE) {
+ FXSYS_memcpy(dest_buf, src_buf, src_size);
+ return;
+ }
+ uint8_t realkey[16];
+ int realkeylen = 16;
+ if (m_Cipher != FXCIPHER_AES || m_KeyLen != 32) {
+ uint8_t key1[32];
FXSYS_memcpy(key1, m_EncryptKey, m_KeyLen);
+ key1[m_KeyLen + 0] = (uint8_t)objnum;
+ key1[m_KeyLen + 1] = (uint8_t)(objnum >> 8);
+ key1[m_KeyLen + 2] = (uint8_t)(objnum >> 16);
+ key1[m_KeyLen + 3] = (uint8_t)gennum;
+ key1[m_KeyLen + 4] = (uint8_t)(gennum >> 8);
FXSYS_memcpy(key1 + m_KeyLen, &objnum, 3);
FXSYS_memcpy(key1 + m_KeyLen + 3, &gennum, 2);
if (m_Cipher == FXCIPHER_AES) {
- FXSYS_memcpy(key1 + m_KeyLen + 5, "sAlT", 4);
+ FXSYS_memcpy(key1 + m_KeyLen + 5, "sAlT", 4);
}
- uint8_t realkey[16];
- CRYPT_MD5Generate(key1, m_Cipher == FXCIPHER_AES ? m_KeyLen + 9 : m_KeyLen + 5, realkey);
- int realkeylen = m_KeyLen + 5;
+ CRYPT_MD5Generate(
+ key1, m_Cipher == FXCIPHER_AES ? m_KeyLen + 9 : m_KeyLen + 5, realkey);
+ realkeylen = m_KeyLen + 5;
if (realkeylen > 16) {
- realkeylen = 16;
+ realkeylen = 16;
}
- if (m_Cipher == FXCIPHER_AES) {
- AESCryptContext* pContext = FX_Alloc(AESCryptContext, 1);
- pContext->m_bIV = TRUE;
- pContext->m_BlockOffset = 0;
- CRYPT_AESSetKey(pContext->m_Context, 16, realkey, 16, bEncrypt);
- if (bEncrypt) {
- for (int i = 0; i < 16; i ++) {
- pContext->m_Block[i] = (uint8_t)rand();
- }
- CRYPT_AESSetIV(pContext->m_Context, pContext->m_Block);
- }
- return pContext;
- }
- void* pContext = FX_Alloc(uint8_t, 1040);
- CRYPT_ArcFourSetup(pContext, realkey, realkeylen);
- return pContext;
+ }
+ if (m_Cipher == FXCIPHER_AES) {
+ CRYPT_AESSetKey(m_pAESContext, 16, m_KeyLen == 32 ? m_EncryptKey : realkey,
+ m_KeyLen, bEncrypt);
+ if (bEncrypt) {
+ uint8_t iv[16];
+ for (int i = 0; i < 16; i++) {
+ iv[i] = (uint8_t)rand();
+ }
+ CRYPT_AESSetIV(m_pAESContext, iv);
+ FXSYS_memcpy(dest_buf, iv, 16);
+ int nblocks = src_size / 16;
+ CRYPT_AESEncrypt(m_pAESContext, dest_buf + 16, src_buf, nblocks * 16);
+ uint8_t padding[16];
+ FXSYS_memcpy(padding, src_buf + nblocks * 16, src_size % 16);
+ FXSYS_memset(padding + src_size % 16, 16 - src_size % 16,
+ 16 - src_size % 16);
+ CRYPT_AESEncrypt(m_pAESContext, dest_buf + nblocks * 16 + 16, padding,
+ 16);
+ dest_size = 32 + nblocks * 16;
+ } else {
+ CRYPT_AESSetIV(m_pAESContext, src_buf);
+ CRYPT_AESDecrypt(m_pAESContext, dest_buf, src_buf + 16, src_size - 16);
+ dest_size = src_size - 16;
+ dest_size -= dest_buf[dest_size - 1];
+ }
+ } else {
+ ASSERT(dest_size == src_size);
+ if (dest_buf != src_buf) {
+ FXSYS_memcpy(dest_buf, src_buf, src_size);
+ }
+ CRYPT_ArcFourCryptBlock(dest_buf, dest_size, realkey, realkeylen);
+ }
}
-FX_BOOL CPDF_StandardCryptoHandler::CryptStream(void* context, const uint8_t* src_buf, FX_DWORD src_size, CFX_BinaryBuf& dest_buf, FX_BOOL bEncrypt)
-{
- if (!context) {
- return FALSE;
- }
- if (m_Cipher == FXCIPHER_NONE) {
- dest_buf.AppendBlock(src_buf, src_size);
- return TRUE;
- }
- if (m_Cipher == FXCIPHER_RC4) {
- int old_size = dest_buf.GetSize();
- dest_buf.AppendBlock(src_buf, src_size);
- CRYPT_ArcFourCrypt(context, dest_buf.GetBuffer() + old_size, src_size);
- return TRUE;
- }
- AESCryptContext* pContext = (AESCryptContext*)context;
- if (pContext->m_bIV && bEncrypt) {
- dest_buf.AppendBlock(pContext->m_Block, 16);
- pContext->m_bIV = FALSE;
+typedef struct _AESCryptContext {
+ uint8_t m_Context[2048];
+ FX_BOOL m_bIV;
+ uint8_t m_Block[16];
+ FX_DWORD m_BlockOffset;
+} AESCryptContext;
+void* CPDF_StandardCryptoHandler::CryptStart(FX_DWORD objnum,
+ FX_DWORD gennum,
+ FX_BOOL bEncrypt) {
+ if (m_Cipher == FXCIPHER_NONE) {
+ return this;
+ }
+ if (m_Cipher == FXCIPHER_AES && m_KeyLen == 32) {
+ AESCryptContext* pContext = FX_Alloc(AESCryptContext, 1);
+ pContext->m_bIV = TRUE;
+ pContext->m_BlockOffset = 0;
+ CRYPT_AESSetKey(pContext->m_Context, 16, m_EncryptKey, 32, bEncrypt);
+ if (bEncrypt) {
+ for (int i = 0; i < 16; i++) {
+ pContext->m_Block[i] = (uint8_t)rand();
+ }
+ CRYPT_AESSetIV(pContext->m_Context, pContext->m_Block);
}
- FX_DWORD src_off = 0;
- FX_DWORD src_left = src_size;
- while (1) {
- FX_DWORD copy_size = 16 - pContext->m_BlockOffset;
- if (copy_size > src_left) {
- copy_size = src_left;
- }
- FXSYS_memcpy(pContext->m_Block + pContext->m_BlockOffset, src_buf + src_off, copy_size);
- src_off += copy_size;
- src_left -= copy_size;
- pContext->m_BlockOffset += copy_size;
- if (pContext->m_BlockOffset == 16) {
- if (!bEncrypt && pContext->m_bIV) {
- CRYPT_AESSetIV(pContext->m_Context, pContext->m_Block);
- pContext->m_bIV = FALSE;
- pContext->m_BlockOffset = 0;
- } else if (src_off < src_size) {
- uint8_t block_buf[16];
- if (bEncrypt) {
- CRYPT_AESEncrypt(pContext->m_Context, block_buf, pContext->m_Block, 16);
- } else {
- CRYPT_AESDecrypt(pContext->m_Context, block_buf, pContext->m_Block, 16);
- }
- dest_buf.AppendBlock(block_buf, 16);
- pContext->m_BlockOffset = 0;
- }
- }
- if (!src_left) {
- break;
- }
+ return pContext;
+ }
+ uint8_t key1[48];
+ FXSYS_memcpy(key1, m_EncryptKey, m_KeyLen);
+ FXSYS_memcpy(key1 + m_KeyLen, &objnum, 3);
+ FXSYS_memcpy(key1 + m_KeyLen + 3, &gennum, 2);
+ if (m_Cipher == FXCIPHER_AES) {
+ FXSYS_memcpy(key1 + m_KeyLen + 5, "sAlT", 4);
+ }
+ uint8_t realkey[16];
+ CRYPT_MD5Generate(
+ key1, m_Cipher == FXCIPHER_AES ? m_KeyLen + 9 : m_KeyLen + 5, realkey);
+ int realkeylen = m_KeyLen + 5;
+ if (realkeylen > 16) {
+ realkeylen = 16;
+ }
+ if (m_Cipher == FXCIPHER_AES) {
+ AESCryptContext* pContext = FX_Alloc(AESCryptContext, 1);
+ pContext->m_bIV = TRUE;
+ pContext->m_BlockOffset = 0;
+ CRYPT_AESSetKey(pContext->m_Context, 16, realkey, 16, bEncrypt);
+ if (bEncrypt) {
+ for (int i = 0; i < 16; i++) {
+ pContext->m_Block[i] = (uint8_t)rand();
+ }
+ CRYPT_AESSetIV(pContext->m_Context, pContext->m_Block);
}
- return TRUE;
+ return pContext;
+ }
+ void* pContext = FX_Alloc(uint8_t, 1040);
+ CRYPT_ArcFourSetup(pContext, realkey, realkeylen);
+ return pContext;
}
-FX_BOOL CPDF_StandardCryptoHandler::CryptFinish(void* context, CFX_BinaryBuf& dest_buf, FX_BOOL bEncrypt)
-{
- if (!context) {
- return FALSE;
- }
- if (m_Cipher == FXCIPHER_NONE) {
- return TRUE;
- }
- if (m_Cipher == FXCIPHER_RC4) {
- FX_Free(context);
- return TRUE;
- }
- AESCryptContext* pContext = (AESCryptContext*)context;
- if (bEncrypt) {
+FX_BOOL CPDF_StandardCryptoHandler::CryptStream(void* context,
+ const uint8_t* src_buf,
+ FX_DWORD src_size,
+ CFX_BinaryBuf& dest_buf,
+ FX_BOOL bEncrypt) {
+ if (!context) {
+ return FALSE;
+ }
+ if (m_Cipher == FXCIPHER_NONE) {
+ dest_buf.AppendBlock(src_buf, src_size);
+ return TRUE;
+ }
+ if (m_Cipher == FXCIPHER_RC4) {
+ int old_size = dest_buf.GetSize();
+ dest_buf.AppendBlock(src_buf, src_size);
+ CRYPT_ArcFourCrypt(context, dest_buf.GetBuffer() + old_size, src_size);
+ return TRUE;
+ }
+ AESCryptContext* pContext = (AESCryptContext*)context;
+ if (pContext->m_bIV && bEncrypt) {
+ dest_buf.AppendBlock(pContext->m_Block, 16);
+ pContext->m_bIV = FALSE;
+ }
+ FX_DWORD src_off = 0;
+ FX_DWORD src_left = src_size;
+ while (1) {
+ FX_DWORD copy_size = 16 - pContext->m_BlockOffset;
+ if (copy_size > src_left) {
+ copy_size = src_left;
+ }
+ FXSYS_memcpy(pContext->m_Block + pContext->m_BlockOffset, src_buf + src_off,
+ copy_size);
+ src_off += copy_size;
+ src_left -= copy_size;
+ pContext->m_BlockOffset += copy_size;
+ if (pContext->m_BlockOffset == 16) {
+ if (!bEncrypt && pContext->m_bIV) {
+ CRYPT_AESSetIV(pContext->m_Context, pContext->m_Block);
+ pContext->m_bIV = FALSE;
+ pContext->m_BlockOffset = 0;
+ } else if (src_off < src_size) {
uint8_t block_buf[16];
- if (pContext->m_BlockOffset == 16) {
- CRYPT_AESEncrypt(pContext->m_Context, block_buf, pContext->m_Block, 16);
- dest_buf.AppendBlock(block_buf, 16);
- pContext->m_BlockOffset = 0;
+ if (bEncrypt) {
+ CRYPT_AESEncrypt(pContext->m_Context, block_buf, pContext->m_Block,
+ 16);
+ } else {
+ CRYPT_AESDecrypt(pContext->m_Context, block_buf, pContext->m_Block,
+ 16);
}
- FXSYS_memset(pContext->m_Block + pContext->m_BlockOffset, (uint8_t)(16 - pContext->m_BlockOffset), 16 - pContext->m_BlockOffset);
- CRYPT_AESEncrypt(pContext->m_Context, block_buf, pContext->m_Block, 16);
dest_buf.AppendBlock(block_buf, 16);
- } else if (pContext->m_BlockOffset == 16) {
- uint8_t block_buf[16];
- CRYPT_AESDecrypt(pContext->m_Context, block_buf, pContext->m_Block, 16);
- if (block_buf[15] <= 16) {
- dest_buf.AppendBlock(block_buf, 16 - block_buf[15]);
- }
+ pContext->m_BlockOffset = 0;
+ }
}
- FX_Free(pContext);
+ if (!src_left) {
+ break;
+ }
+ }
+ return TRUE;
+}
+FX_BOOL CPDF_StandardCryptoHandler::CryptFinish(void* context,
+ CFX_BinaryBuf& dest_buf,
+ FX_BOOL bEncrypt) {
+ if (!context) {
+ return FALSE;
+ }
+ if (m_Cipher == FXCIPHER_NONE) {
+ return TRUE;
+ }
+ if (m_Cipher == FXCIPHER_RC4) {
+ FX_Free(context);
return TRUE;
+ }
+ AESCryptContext* pContext = (AESCryptContext*)context;
+ if (bEncrypt) {
+ uint8_t block_buf[16];
+ if (pContext->m_BlockOffset == 16) {
+ CRYPT_AESEncrypt(pContext->m_Context, block_buf, pContext->m_Block, 16);
+ dest_buf.AppendBlock(block_buf, 16);
+ pContext->m_BlockOffset = 0;
+ }
+ FXSYS_memset(pContext->m_Block + pContext->m_BlockOffset,
+ (uint8_t)(16 - pContext->m_BlockOffset),
+ 16 - pContext->m_BlockOffset);
+ CRYPT_AESEncrypt(pContext->m_Context, block_buf, pContext->m_Block, 16);
+ dest_buf.AppendBlock(block_buf, 16);
+ } else if (pContext->m_BlockOffset == 16) {
+ uint8_t block_buf[16];
+ CRYPT_AESDecrypt(pContext->m_Context, block_buf, pContext->m_Block, 16);
+ if (block_buf[15] <= 16) {
+ dest_buf.AppendBlock(block_buf, 16 - block_buf[15]);
+ }
+ }
+ FX_Free(pContext);
+ return TRUE;
}
-void* CPDF_StandardCryptoHandler::DecryptStart(FX_DWORD objnum, FX_DWORD gennum)
-{
- return CryptStart(objnum, gennum, FALSE);
+void* CPDF_StandardCryptoHandler::DecryptStart(FX_DWORD objnum,
+ FX_DWORD gennum) {
+ return CryptStart(objnum, gennum, FALSE);
}
-FX_DWORD CPDF_StandardCryptoHandler::DecryptGetSize(FX_DWORD src_size)
-{
- return m_Cipher == FXCIPHER_AES ? src_size - 16 : src_size;
+FX_DWORD CPDF_StandardCryptoHandler::DecryptGetSize(FX_DWORD src_size) {
+ return m_Cipher == FXCIPHER_AES ? src_size - 16 : src_size;
}
-FX_BOOL CPDF_StandardCryptoHandler::Init(CPDF_Dictionary* pEncryptDict, CPDF_SecurityHandler* pSecurityHandler)
-{
- const uint8_t* key;
- if (!pSecurityHandler->GetCryptInfo(m_Cipher, key, m_KeyLen)) {
- return FALSE;
- }
- if (m_KeyLen > 32 || m_KeyLen < 0) {
+FX_BOOL CPDF_StandardCryptoHandler::Init(
+ CPDF_Dictionary* pEncryptDict,
+ CPDF_SecurityHandler* pSecurityHandler) {
+ const uint8_t* key;
+ if (!pSecurityHandler->GetCryptInfo(m_Cipher, key, m_KeyLen)) {
+ return FALSE;
+ }
+ if (m_KeyLen > 32 || m_KeyLen < 0) {
+ return FALSE;
+ }
+ if (m_Cipher != FXCIPHER_NONE) {
+ FXSYS_memcpy(m_EncryptKey, key, m_KeyLen);
+ }
+ if (m_Cipher == FXCIPHER_AES) {
+ m_pAESContext = FX_Alloc(uint8_t, 2048);
+ }
+ return TRUE;
+}
+FX_BOOL CPDF_StandardCryptoHandler::Init(int cipher,
+ const uint8_t* key,
+ int keylen) {
+ if (cipher == FXCIPHER_AES) {
+ switch (keylen) {
+ case 16:
+ case 24:
+ case 32:
+ break;
+ default:
return FALSE;
}
- if (m_Cipher != FXCIPHER_NONE) {
- FXSYS_memcpy(m_EncryptKey, key, m_KeyLen);
- }
- if (m_Cipher == FXCIPHER_AES) {
- m_pAESContext = FX_Alloc(uint8_t, 2048);
- }
- return TRUE;
+ } else if (cipher == FXCIPHER_AES2) {
+ if (keylen != 32) {
+ return FALSE;
+ }
+ } else if (cipher == FXCIPHER_RC4) {
+ if (keylen < 5 || keylen > 16) {
+ return FALSE;
+ }
+ } else {
+ if (keylen > 32) {
+ keylen = 32;
+ }
+ }
+ m_Cipher = cipher;
+ m_KeyLen = keylen;
+ FXSYS_memcpy(m_EncryptKey, key, keylen);
+ if (m_Cipher == FXCIPHER_AES) {
+ m_pAESContext = FX_Alloc(uint8_t, 2048);
+ }
+ return TRUE;
}
-FX_BOOL CPDF_StandardCryptoHandler::Init(int cipher, const uint8_t* key, int keylen)
-{
- if (cipher == FXCIPHER_AES) {
- switch(keylen) {
- case 16:
- case 24:
- case 32:
- break;
- default:
- return FALSE;
- }
- } else if (cipher == FXCIPHER_AES2) {
- if (keylen != 32) {
- return FALSE;
- }
- } else if (cipher == FXCIPHER_RC4) {
- if (keylen < 5 || keylen > 16) {
- return FALSE;
- }
- } else {
- if (keylen > 32) {
- keylen = 32;
- }
- }
- m_Cipher = cipher;
- m_KeyLen = keylen;
- FXSYS_memcpy(m_EncryptKey, key, keylen);
- if (m_Cipher == FXCIPHER_AES) {
- m_pAESContext = FX_Alloc(uint8_t, 2048);
- }
- return TRUE;
+FX_BOOL CPDF_StandardCryptoHandler::DecryptStream(void* context,
+ const uint8_t* src_buf,
+ FX_DWORD src_size,
+ CFX_BinaryBuf& dest_buf) {
+ return CryptStream(context, src_buf, src_size, dest_buf, FALSE);
}
-FX_BOOL CPDF_StandardCryptoHandler::DecryptStream(void* context, const uint8_t* src_buf, FX_DWORD src_size,
- CFX_BinaryBuf& dest_buf)
-{
- return CryptStream(context, src_buf, src_size, dest_buf, FALSE);
+FX_BOOL CPDF_StandardCryptoHandler::DecryptFinish(void* context,
+ CFX_BinaryBuf& dest_buf) {
+ return CryptFinish(context, dest_buf, FALSE);
}
-FX_BOOL CPDF_StandardCryptoHandler::DecryptFinish(void* context, CFX_BinaryBuf& dest_buf)
-{
- return CryptFinish(context, dest_buf, FALSE);
+FX_DWORD CPDF_StandardCryptoHandler::EncryptGetSize(FX_DWORD objnum,
+ FX_DWORD version,
+ const uint8_t* src_buf,
+ FX_DWORD src_size) {
+ if (m_Cipher == FXCIPHER_AES) {
+ return src_size + 32;
+ }
+ return src_size;
}
-FX_DWORD CPDF_StandardCryptoHandler::EncryptGetSize(FX_DWORD objnum, FX_DWORD version, const uint8_t* src_buf, FX_DWORD src_size)
-{
- if (m_Cipher == FXCIPHER_AES) {
- return src_size + 32;
- }
- return src_size;
+FX_BOOL CPDF_StandardCryptoHandler::EncryptContent(FX_DWORD objnum,
+ FX_DWORD gennum,
+ const uint8_t* src_buf,
+ FX_DWORD src_size,
+ uint8_t* dest_buf,
+ FX_DWORD& dest_size) {
+ CryptBlock(TRUE, objnum, gennum, src_buf, src_size, dest_buf, dest_size);
+ return TRUE;
}
-FX_BOOL CPDF_StandardCryptoHandler::EncryptContent(FX_DWORD objnum, FX_DWORD gennum, const uint8_t* src_buf, FX_DWORD src_size,
- uint8_t* dest_buf, FX_DWORD& dest_size)
-{
- CryptBlock(TRUE, objnum, gennum, src_buf, src_size, dest_buf, dest_size);
- return TRUE;
+void CPDF_CryptoHandler::Decrypt(FX_DWORD objnum,
+ FX_DWORD gennum,
+ CFX_ByteString& str) {
+ CFX_BinaryBuf dest_buf;
+ void* context = DecryptStart(objnum, gennum);
+ DecryptStream(context, (const uint8_t*)str, str.GetLength(), dest_buf);
+ DecryptFinish(context, dest_buf);
+ str = dest_buf;
}
-void CPDF_CryptoHandler::Decrypt(FX_DWORD objnum, FX_DWORD gennum, CFX_ByteString& str)
-{
- CFX_BinaryBuf dest_buf;
- void* context = DecryptStart(objnum, gennum);
- DecryptStream(context, (const uint8_t*)str, str.GetLength(), dest_buf);
- DecryptFinish(context, dest_buf);
- str = dest_buf;
-}
-CPDF_StandardCryptoHandler::CPDF_StandardCryptoHandler()
-{
- m_pAESContext = NULL;
- m_Cipher = FXCIPHER_NONE;
- m_KeyLen = 0;
-}
-CPDF_StandardCryptoHandler::~CPDF_StandardCryptoHandler()
-{
- if (m_pAESContext) {
- FX_Free(m_pAESContext);
- }
+CPDF_StandardCryptoHandler::CPDF_StandardCryptoHandler() {
+ m_pAESContext = NULL;
+ m_Cipher = FXCIPHER_NONE;
+ m_KeyLen = 0;
+}
+CPDF_StandardCryptoHandler::~CPDF_StandardCryptoHandler() {
+ if (m_pAESContext) {
+ FX_Free(m_pAESContext);
+ }
}
diff --git a/core/src/fpdfapi/fpdf_parser/fpdf_parser_fdf.cpp b/core/src/fpdfapi/fpdf_parser/fpdf_parser_fdf.cpp
index 1958fab280..19359ad7cf 100644
--- a/core/src/fpdfapi/fpdf_parser/fpdf_parser_fdf.cpp
+++ b/core/src/fpdfapi/fpdf_parser/fpdf_parser_fdf.cpp
@@ -5,29 +5,25 @@
// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
#include "../../../include/fpdfapi/fpdf_serial.h"
-CFDF_Document::CFDF_Document() : CPDF_IndirectObjects(NULL)
-{
- m_pRootDict = NULL;
- m_pFile = NULL;
- m_bOwnFile = FALSE;
+CFDF_Document::CFDF_Document() : CPDF_IndirectObjects(NULL) {
+ m_pRootDict = NULL;
+ m_pFile = NULL;
+ m_bOwnFile = FALSE;
}
-CFDF_Document::~CFDF_Document()
-{
- if (m_bOwnFile && m_pFile) {
- m_pFile->Release();
- }
+CFDF_Document::~CFDF_Document() {
+ if (m_bOwnFile && m_pFile) {
+ m_pFile->Release();
+ }
}
-CFDF_Document* CFDF_Document::CreateNewDoc()
-{
- CFDF_Document* pDoc = new CFDF_Document;
- pDoc->m_pRootDict = new CPDF_Dictionary;
- pDoc->AddIndirectObject(pDoc->m_pRootDict);
- CPDF_Dictionary* pFDFDict = new CPDF_Dictionary;
- pDoc->m_pRootDict->SetAt(FX_BSTRC("FDF"), pFDFDict);
- return pDoc;
+CFDF_Document* CFDF_Document::CreateNewDoc() {
+ CFDF_Document* pDoc = new CFDF_Document;
+ pDoc->m_pRootDict = new CPDF_Dictionary;
+ pDoc->AddIndirectObject(pDoc->m_pRootDict);
+ CPDF_Dictionary* pFDFDict = new CPDF_Dictionary;
+ pDoc->m_pRootDict->SetAt(FX_BSTRC("FDF"), pFDFDict);
+ return pDoc;
}
-CFDF_Document* CFDF_Document::ParseFile(IFX_FileRead *pFile, FX_BOOL bOwnFile)
-{
+CFDF_Document* CFDF_Document::ParseFile(IFX_FileRead* pFile, FX_BOOL bOwnFile) {
if (!pFile) {
return NULL;
}
@@ -39,151 +35,152 @@ CFDF_Document* CFDF_Document::ParseFile(IFX_FileRead *pFile, FX_BOOL bOwnFile)
}
return pDoc;
}
-CFDF_Document* CFDF_Document::ParseMemory(const uint8_t* pData, FX_DWORD size)
-{
- return CFDF_Document::ParseFile(FX_CreateMemoryStream((uint8_t*)pData, size), TRUE);
+CFDF_Document* CFDF_Document::ParseMemory(const uint8_t* pData, FX_DWORD size) {
+ return CFDF_Document::ParseFile(FX_CreateMemoryStream((uint8_t*)pData, size),
+ TRUE);
}
-void CFDF_Document::ParseStream(IFX_FileRead *pFile, FX_BOOL bOwnFile)
-{
- m_pFile = pFile;
- m_bOwnFile = bOwnFile;
- CPDF_SyntaxParser parser;
- parser.InitParser(m_pFile, 0);
- while (1) {
- FX_BOOL bNumber;
- CFX_ByteString word = parser.GetNextWord(bNumber);
- if (bNumber) {
- FX_DWORD objnum = FXSYS_atoi(word);
- word = parser.GetNextWord(bNumber);
- if (!bNumber) {
- break;
- }
- word = parser.GetNextWord(bNumber);
- if (word != FX_BSTRC("obj")) {
- break;
- }
- CPDF_Object* pObj = parser.GetObject(this, objnum, 0, 0);
- if (pObj == NULL) {
- break;
- }
- InsertIndirectObject(objnum, pObj);
- word = parser.GetNextWord(bNumber);
- if (word != FX_BSTRC("endobj")) {
- break;
- }
- } else {
- if (word != FX_BSTRC("trailer")) {
- break;
- }
- CPDF_Dictionary* pMainDict = (CPDF_Dictionary*)parser.GetObject(this, 0, 0, 0);
- if (pMainDict == NULL || pMainDict->GetType() != PDFOBJ_DICTIONARY) {
- break;
- }
- m_pRootDict = pMainDict->GetDict(FX_BSTRC("Root"));
- pMainDict->Release();
- break;
- }
- }
-}
-FX_BOOL CFDF_Document::WriteBuf(CFX_ByteTextBuf& buf) const
-{
- if (m_pRootDict == NULL) {
- return FALSE;
- }
- buf << FX_BSTRC("%FDF-1.2\r\n");
- FX_POSITION pos = m_IndirectObjs.GetStartPosition();
- while(pos) {
- size_t objnum;
- CPDF_Object* pObj;
- m_IndirectObjs.GetNextAssoc(pos, (void*&)objnum, (void*&)pObj);
- buf << (FX_DWORD)objnum << FX_BSTRC(" 0 obj\r\n") << pObj << FX_BSTRC("\r\nendobj\r\n\r\n");
+void CFDF_Document::ParseStream(IFX_FileRead* pFile, FX_BOOL bOwnFile) {
+ m_pFile = pFile;
+ m_bOwnFile = bOwnFile;
+ CPDF_SyntaxParser parser;
+ parser.InitParser(m_pFile, 0);
+ while (1) {
+ FX_BOOL bNumber;
+ CFX_ByteString word = parser.GetNextWord(bNumber);
+ if (bNumber) {
+ FX_DWORD objnum = FXSYS_atoi(word);
+ word = parser.GetNextWord(bNumber);
+ if (!bNumber) {
+ break;
+ }
+ word = parser.GetNextWord(bNumber);
+ if (word != FX_BSTRC("obj")) {
+ break;
+ }
+ CPDF_Object* pObj = parser.GetObject(this, objnum, 0, 0);
+ if (pObj == NULL) {
+ break;
+ }
+ InsertIndirectObject(objnum, pObj);
+ word = parser.GetNextWord(bNumber);
+ if (word != FX_BSTRC("endobj")) {
+ break;
+ }
+ } else {
+ if (word != FX_BSTRC("trailer")) {
+ break;
+ }
+ CPDF_Dictionary* pMainDict =
+ (CPDF_Dictionary*)parser.GetObject(this, 0, 0, 0);
+ if (pMainDict == NULL || pMainDict->GetType() != PDFOBJ_DICTIONARY) {
+ break;
+ }
+ m_pRootDict = pMainDict->GetDict(FX_BSTRC("Root"));
+ pMainDict->Release();
+ break;
}
- buf << FX_BSTRC("trailer\r\n<</Root ") << m_pRootDict->GetObjNum() << FX_BSTRC(" 0 R>>\r\n%%EOF\r\n");
- return TRUE;
+ }
}
-CFX_WideString CFDF_Document::GetWin32Path() const
-{
- CPDF_Dictionary* pDict = m_pRootDict ? m_pRootDict->GetDict(FX_BSTRC("FDF")) : NULL;
- CPDF_Object* pFileSpec = pDict ? pDict->GetElementValue(FX_BSTRC("F")) : NULL;
- if (pFileSpec == NULL) {
- return CFX_WideString();
- }
- if (pFileSpec->GetType() == PDFOBJ_STRING) {
- return FPDF_FileSpec_GetWin32Path(m_pRootDict->GetDict(FX_BSTRC("FDF")));
- }
- return FPDF_FileSpec_GetWin32Path(pFileSpec);
+FX_BOOL CFDF_Document::WriteBuf(CFX_ByteTextBuf& buf) const {
+ if (m_pRootDict == NULL) {
+ return FALSE;
+ }
+ buf << FX_BSTRC("%FDF-1.2\r\n");
+ FX_POSITION pos = m_IndirectObjs.GetStartPosition();
+ while (pos) {
+ size_t objnum;
+ CPDF_Object* pObj;
+ m_IndirectObjs.GetNextAssoc(pos, (void*&)objnum, (void*&)pObj);
+ buf << (FX_DWORD)objnum << FX_BSTRC(" 0 obj\r\n") << pObj
+ << FX_BSTRC("\r\nendobj\r\n\r\n");
+ }
+ buf << FX_BSTRC("trailer\r\n<</Root ") << m_pRootDict->GetObjNum()
+ << FX_BSTRC(" 0 R>>\r\n%%EOF\r\n");
+ return TRUE;
}
-static CFX_WideString ChangeSlash(const FX_WCHAR* str)
-{
- CFX_WideString result;
- while (*str) {
- if (*str == '\\') {
- result += '/';
- } else if (*str == '/') {
- result += '\\';
- } else {
- result += *str;
- }
- str ++;
- }
- return result;
+CFX_WideString CFDF_Document::GetWin32Path() const {
+ CPDF_Dictionary* pDict =
+ m_pRootDict ? m_pRootDict->GetDict(FX_BSTRC("FDF")) : NULL;
+ CPDF_Object* pFileSpec = pDict ? pDict->GetElementValue(FX_BSTRC("F")) : NULL;
+ if (pFileSpec == NULL) {
+ return CFX_WideString();
+ }
+ if (pFileSpec->GetType() == PDFOBJ_STRING) {
+ return FPDF_FileSpec_GetWin32Path(m_pRootDict->GetDict(FX_BSTRC("FDF")));
+ }
+ return FPDF_FileSpec_GetWin32Path(pFileSpec);
}
-void FPDF_FileSpec_SetWin32Path(CPDF_Object* pFileSpec, const CFX_WideString& filepath)
-{
- CFX_WideString result;
- if (filepath.GetLength() > 1 && filepath[1] == ':') {
- result = L"/";
- result += filepath[0];
- if (filepath[2] != '\\') {
- result += '/';
- }
- result += ChangeSlash(filepath.c_str() + 2);
- } else if (filepath.GetLength() > 1 && filepath[0] == '\\' && filepath[1] == '\\') {
- result = ChangeSlash(filepath.c_str() + 1);
+static CFX_WideString ChangeSlash(const FX_WCHAR* str) {
+ CFX_WideString result;
+ while (*str) {
+ if (*str == '\\') {
+ result += '/';
+ } else if (*str == '/') {
+ result += '\\';
} else {
- result = ChangeSlash(filepath.c_str());
- }
- if (pFileSpec->GetType() == PDFOBJ_STRING) {
- pFileSpec->SetString(CFX_ByteString::FromUnicode(result));
- } else if (pFileSpec->GetType() == PDFOBJ_DICTIONARY) {
- ((CPDF_Dictionary*)pFileSpec)->SetAtString(FX_BSTRC("F"), CFX_ByteString::FromUnicode(result));
- ((CPDF_Dictionary*)pFileSpec)->SetAtString(FX_BSTRC("UF"), PDF_EncodeText(result));
- ((CPDF_Dictionary*)pFileSpec)->RemoveAt(FX_BSTRC("FS"));
+ result += *str;
}
+ str++;
+ }
+ return result;
}
-CFX_WideString FPDF_FileSpec_GetWin32Path(const CPDF_Object* pFileSpec)
-{
- CFX_WideString wsFileName;
- if (pFileSpec->GetType() == PDFOBJ_DICTIONARY) {
- CPDF_Dictionary* pDict = (CPDF_Dictionary*)pFileSpec;
- wsFileName = pDict->GetUnicodeText(FX_BSTRC("UF"));
- if (wsFileName.IsEmpty()) {
- wsFileName = CFX_WideString::FromLocal(pDict->GetString(FX_BSTRC("F")));
- }
- if (pDict->GetString(FX_BSTRC("FS")) == FX_BSTRC("URL")) {
- return wsFileName;
- }
- if (wsFileName.IsEmpty() && pDict->KeyExist(FX_BSTRC("DOS"))) {
- wsFileName = CFX_WideString::FromLocal(pDict->GetString(FX_BSTRC("DOS")));
- }
+void FPDF_FileSpec_SetWin32Path(CPDF_Object* pFileSpec,
+ const CFX_WideString& filepath) {
+ CFX_WideString result;
+ if (filepath.GetLength() > 1 && filepath[1] == ':') {
+ result = L"/";
+ result += filepath[0];
+ if (filepath[2] != '\\') {
+ result += '/';
}
- else if (!pFileSpec)
- wsFileName = CFX_WideString();
- else {
- wsFileName = CFX_WideString::FromLocal(pFileSpec->GetString());
+ result += ChangeSlash(filepath.c_str() + 2);
+ } else if (filepath.GetLength() > 1 && filepath[0] == '\\' &&
+ filepath[1] == '\\') {
+ result = ChangeSlash(filepath.c_str() + 1);
+ } else {
+ result = ChangeSlash(filepath.c_str());
+ }
+ if (pFileSpec->GetType() == PDFOBJ_STRING) {
+ pFileSpec->SetString(CFX_ByteString::FromUnicode(result));
+ } else if (pFileSpec->GetType() == PDFOBJ_DICTIONARY) {
+ ((CPDF_Dictionary*)pFileSpec)
+ ->SetAtString(FX_BSTRC("F"), CFX_ByteString::FromUnicode(result));
+ ((CPDF_Dictionary*)pFileSpec)
+ ->SetAtString(FX_BSTRC("UF"), PDF_EncodeText(result));
+ ((CPDF_Dictionary*)pFileSpec)->RemoveAt(FX_BSTRC("FS"));
+ }
+}
+CFX_WideString FPDF_FileSpec_GetWin32Path(const CPDF_Object* pFileSpec) {
+ CFX_WideString wsFileName;
+ if (pFileSpec->GetType() == PDFOBJ_DICTIONARY) {
+ CPDF_Dictionary* pDict = (CPDF_Dictionary*)pFileSpec;
+ wsFileName = pDict->GetUnicodeText(FX_BSTRC("UF"));
+ if (wsFileName.IsEmpty()) {
+ wsFileName = CFX_WideString::FromLocal(pDict->GetString(FX_BSTRC("F")));
}
- if (wsFileName[0] != '/') {
- return ChangeSlash(wsFileName.c_str());
+ if (pDict->GetString(FX_BSTRC("FS")) == FX_BSTRC("URL")) {
+ return wsFileName;
}
- if (wsFileName[2] == '/') {
- CFX_WideString result;
- result += wsFileName[1];
- result += ':';
- result += ChangeSlash(wsFileName.c_str() + 2);
- return result;
+ if (wsFileName.IsEmpty() && pDict->KeyExist(FX_BSTRC("DOS"))) {
+ wsFileName = CFX_WideString::FromLocal(pDict->GetString(FX_BSTRC("DOS")));
}
+ } else if (!pFileSpec)
+ wsFileName = CFX_WideString();
+ else {
+ wsFileName = CFX_WideString::FromLocal(pFileSpec->GetString());
+ }
+ if (wsFileName[0] != '/') {
+ return ChangeSlash(wsFileName.c_str());
+ }
+ if (wsFileName[2] == '/') {
CFX_WideString result;
- result += '\\';
- result += ChangeSlash(wsFileName.c_str());
+ result += wsFileName[1];
+ result += ':';
+ result += ChangeSlash(wsFileName.c_str() + 2);
return result;
+ }
+ CFX_WideString result;
+ result += '\\';
+ result += ChangeSlash(wsFileName.c_str());
+ return result;
}
diff --git a/core/src/fpdfapi/fpdf_parser/fpdf_parser_filters.cpp b/core/src/fpdfapi/fpdf_parser/fpdf_parser_filters.cpp
index fed4546fab..8cb432029c 100644
--- a/core/src/fpdfapi/fpdf_parser/fpdf_parser_filters.cpp
+++ b/core/src/fpdfapi/fpdf_parser/fpdf_parser_filters.cpp
@@ -12,888 +12,918 @@
extern "C" {
-static void* my_alloc_func(void* opaque, unsigned int items, unsigned int size)
-{
- return FX_Alloc2D(uint8_t, items, size);
+static void* my_alloc_func(void* opaque,
+ unsigned int items,
+ unsigned int size) {
+ return FX_Alloc2D(uint8_t, items, size);
}
-static void my_free_func(void* opaque, void* address)
-{
- FX_Free(address);
+static void my_free_func(void* opaque, void* address) {
+ FX_Free(address);
}
} // extern "C"
-CFX_DataFilter::CFX_DataFilter()
-{
- m_bEOF = FALSE;
- m_pDestFilter = NULL;
- m_SrcPos = 0;
-}
-CFX_DataFilter::~CFX_DataFilter()
-{
- delete m_pDestFilter;
-}
-void CFX_DataFilter::SetDestFilter(CFX_DataFilter* pFilter)
-{
- if (m_pDestFilter) {
- m_pDestFilter->SetDestFilter(pFilter);
- } else {
- m_pDestFilter = pFilter;
- }
-}
-void CFX_DataFilter::FilterIn(const uint8_t* src_buf, FX_DWORD src_size, CFX_BinaryBuf& dest_buf)
-{
- if (m_bEOF) {
- return;
- }
- m_SrcPos += src_size;
- if (m_pDestFilter) {
- CFX_BinaryBuf temp_buf;
- temp_buf.EstimateSize(FPDF_FILTER_BUFFER_SIZE, FPDF_FILTER_BUFFER_SIZE);
- v_FilterIn(src_buf, src_size, temp_buf);
- m_pDestFilter->FilterIn(temp_buf.GetBuffer(), temp_buf.GetSize(), dest_buf);
- } else {
- v_FilterIn(src_buf, src_size, dest_buf);
- }
-}
-void CFX_DataFilter::FilterFinish(CFX_BinaryBuf& dest_buf)
-{
- if (m_pDestFilter) {
- CFX_BinaryBuf temp_buf;
- v_FilterFinish(temp_buf);
- if (temp_buf.GetSize()) {
- m_pDestFilter->FilterIn(temp_buf.GetBuffer(), temp_buf.GetSize(), dest_buf);
- }
- m_pDestFilter->FilterFinish(dest_buf);
- } else {
- v_FilterFinish(dest_buf);
- }
- m_bEOF = TRUE;
-}
-void CFX_DataFilter::ReportEOF(FX_DWORD left_input)
-{
- if (m_bEOF) {
- return;
- }
- m_bEOF = TRUE;
- m_SrcPos -= left_input;
-}
-CFX_DataFilter* FPDF_CreateFilter(const CFX_ByteStringC& name, const CPDF_Dictionary* pParam, int width, int height)
-{
- FX_DWORD id = name.GetID();
- switch (id) {
- case FXBSTR_ID('F', 'l', 'a', 't'):
- case FXBSTR_ID('F', 'l', 0, 0):
- case FXBSTR_ID('L', 'Z', 'W', 'D'):
- case FXBSTR_ID('L', 'Z', 'W', 0): {
- CFX_DataFilter* pFilter;
- if (id == FXBSTR_ID('L', 'Z', 'W', 'D') || id == FXBSTR_ID('L', 'Z', 'W', 0)) {
- pFilter = new CPDF_LzwFilter(pParam ? pParam->GetInteger("EarlyChange", 1) : 1);
- } else {
- pFilter = new CPDF_FlateFilter;
- }
- if ((pParam ? pParam->GetInteger("Predictor", 1) : 1) > 1) {
- CFX_DataFilter* pPredictor = new CPDF_PredictorFilter(pParam->GetInteger(FX_BSTRC("Predictor"), 1),
- pParam->GetInteger(FX_BSTRC("Colors"), 1), pParam->GetInteger(FX_BSTRC("BitsPerComponent"), 8),
- pParam->GetInteger(FX_BSTRC("Columns"), 1));
- pFilter->SetDestFilter(pPredictor);
- }
- return pFilter;
- }
- case FXBSTR_ID('A', 'S', 'C', 'I'):
- if (name == "ASCIIHexDecode") {
- return new CPDF_AsciiHexFilter;
- }
- return new CPDF_Ascii85Filter;
- case FXBSTR_ID('A', 'H', 'x', 0):
- return new CPDF_AsciiHexFilter;
- case FXBSTR_ID('A', '8', '5', 0):
- return new CPDF_Ascii85Filter;
- case FXBSTR_ID('R', 'u', 'n', 'L'):
- return new CPDF_RunLenFilter;
- case FXBSTR_ID('C', 'C', 'I', 'T'): {
- int Encoding = 0;
- int bEndOfLine = FALSE;
- int bByteAlign = FALSE;
- int bBlack = FALSE;
- int nRows = 0;
- int nColumns = 1728;
- if (pParam) {
- Encoding = pParam->GetInteger(FX_BSTRC("K"));
- bEndOfLine = pParam->GetInteger(FX_BSTRC("EndOfLine"));
- bByteAlign = pParam->GetInteger(FX_BSTRC("EncodedByteAlign"));
- bBlack = pParam->GetInteger(FX_BSTRC("BlackIs1"));
- nColumns = pParam->GetInteger(FX_BSTRC("Columns"), 1728);
- nRows = pParam->GetInteger(FX_BSTRC("Rows"));
- }
- if (nColumns == 0) {
- nColumns = width;
- }
- if (nRows == 0) {
- nRows = height;
- }
- CPDF_FaxFilter* pFilter = new CPDF_FaxFilter();
- pFilter->Initialize(Encoding, bEndOfLine, bByteAlign, bBlack, nRows, nColumns);
- return pFilter;
- }
- case FXBSTR_ID('D', 'C', 'T', 'D'):
- return new CPDF_JpegFilter;
- default:
- return NULL;
- }
-}
-CFX_DataFilter* _FPDF_CreateFilterFromDict(CPDF_Dictionary* pDict)
-{
- CPDF_Object* pDecoder = pDict->GetElementValue("Filter");
- if (pDecoder == NULL) {
- return NULL;
- }
- CFX_DataFilter* pFirstFilter = NULL;
- int width = pDict->GetInteger(FX_BSTRC("Width")), height = pDict->GetInteger(FX_BSTRC("Height"));
- CPDF_Object* pParams = pDict->GetElementValue("DecodeParms");
- if (pDecoder->GetType() == PDFOBJ_ARRAY) {
- if (pParams && pParams->GetType() != PDFOBJ_ARRAY) {
- pParams = NULL;
- }
- for (FX_DWORD i = 0; i < ((CPDF_Array*)pDecoder)->GetCount(); i ++) {
- CFX_ByteString name = ((CPDF_Array*)pDecoder)->GetString(i);
- CPDF_Dictionary* pParam = NULL;
- if (pParams) {
- pParam = ((CPDF_Array*)pParams)->GetDict(i);
- }
- CFX_DataFilter* pDestFilter = FPDF_CreateFilter(name, pParam, width, height);
- if (pDestFilter) {
- if (pFirstFilter == NULL) {
- pFirstFilter = pDestFilter;
- } else {
- pFirstFilter->SetDestFilter(pDestFilter);
- }
- }
- }
- } else {
- if (pParams && pParams->GetType() != PDFOBJ_DICTIONARY) {
- pParams = NULL;
- }
- pFirstFilter = FPDF_CreateFilter(pDecoder->GetString(), (CPDF_Dictionary*)pParams, width, height);
- }
- return pFirstFilter;
-}
-CPDF_StreamFilter* CPDF_Stream::GetStreamFilter(FX_BOOL bRaw) const
-{
- CFX_DataFilter* pFirstFilter = NULL;
- if (m_pCryptoHandler) {
- pFirstFilter = new CPDF_DecryptFilter(m_pCryptoHandler, m_ObjNum, m_GenNum);
- }
- if (!bRaw) {
- CFX_DataFilter* pFilter = _FPDF_CreateFilterFromDict(m_pDict);
- if (pFilter) {
- if (pFirstFilter == NULL) {
- pFirstFilter = pFilter;
- } else {
- pFirstFilter->SetDestFilter(pFilter);
- }
- }
- }
- CPDF_StreamFilter* pStreamFilter = new CPDF_StreamFilter;
- pStreamFilter->m_pStream = this;
- pStreamFilter->m_pFilter = pFirstFilter;
- pStreamFilter->m_pBuffer = NULL;
- pStreamFilter->m_SrcOffset = 0;
- return pStreamFilter;
-}
-CPDF_StreamFilter::~CPDF_StreamFilter()
-{
- delete m_pFilter;
- delete m_pBuffer;
-}
-#define FPDF_FILTER_BUFFER_IN_SIZE FPDF_FILTER_BUFFER_SIZE
-FX_DWORD CPDF_StreamFilter::ReadBlock(uint8_t* buffer, FX_DWORD buf_size)
-{
- if (m_pFilter == NULL) {
- FX_DWORD read_size = m_pStream->GetRawSize() - m_SrcOffset;
- if (read_size == 0) {
- return 0;
- }
- if (read_size > buf_size) {
- read_size = buf_size;
- }
- m_pStream->ReadRawData(m_SrcOffset, buffer, read_size);
- m_SrcOffset += read_size;
- return read_size;
- }
- FX_DWORD read_size = 0;
- if (m_pBuffer) {
- read_size = ReadLeftOver(buffer, buf_size);
- if (read_size == buf_size) {
- return read_size;
- }
- buffer += read_size;
- buf_size -= read_size;
- }
- ASSERT(m_pBuffer == NULL);
- if (m_pFilter->IsEOF()) {
- return read_size;
- }
- m_pBuffer = new CFX_BinaryBuf;
- m_pBuffer->EstimateSize(FPDF_FILTER_BUFFER_SIZE, FPDF_FILTER_BUFFER_SIZE);
- m_BufOffset = 0;
- while (1) {
- int src_size = m_pStream->GetRawSize() - m_SrcOffset;
- if (src_size == 0) {
- m_pFilter->FilterFinish(*m_pBuffer);
- break;
- }
- if (src_size > FPDF_FILTER_BUFFER_IN_SIZE) {
- src_size = FPDF_FILTER_BUFFER_IN_SIZE;
- }
- if (!m_pStream->ReadRawData(m_SrcOffset, m_SrcBuffer, src_size)) {
- return 0;
- }
- m_SrcOffset += src_size;
- m_pFilter->FilterIn(m_SrcBuffer, src_size, *m_pBuffer);
- if (m_pBuffer->GetSize() >= (int)buf_size) {
- break;
- }
+CFX_DataFilter::CFX_DataFilter() {
+ m_bEOF = FALSE;
+ m_pDestFilter = NULL;
+ m_SrcPos = 0;
+}
+CFX_DataFilter::~CFX_DataFilter() {
+ delete m_pDestFilter;
+}
+void CFX_DataFilter::SetDestFilter(CFX_DataFilter* pFilter) {
+ if (m_pDestFilter) {
+ m_pDestFilter->SetDestFilter(pFilter);
+ } else {
+ m_pDestFilter = pFilter;
+ }
+}
+void CFX_DataFilter::FilterIn(const uint8_t* src_buf,
+ FX_DWORD src_size,
+ CFX_BinaryBuf& dest_buf) {
+ if (m_bEOF) {
+ return;
+ }
+ m_SrcPos += src_size;
+ if (m_pDestFilter) {
+ CFX_BinaryBuf temp_buf;
+ temp_buf.EstimateSize(FPDF_FILTER_BUFFER_SIZE, FPDF_FILTER_BUFFER_SIZE);
+ v_FilterIn(src_buf, src_size, temp_buf);
+ m_pDestFilter->FilterIn(temp_buf.GetBuffer(), temp_buf.GetSize(), dest_buf);
+ } else {
+ v_FilterIn(src_buf, src_size, dest_buf);
+ }
+}
+void CFX_DataFilter::FilterFinish(CFX_BinaryBuf& dest_buf) {
+ if (m_pDestFilter) {
+ CFX_BinaryBuf temp_buf;
+ v_FilterFinish(temp_buf);
+ if (temp_buf.GetSize()) {
+ m_pDestFilter->FilterIn(temp_buf.GetBuffer(), temp_buf.GetSize(),
+ dest_buf);
+ }
+ m_pDestFilter->FilterFinish(dest_buf);
+ } else {
+ v_FilterFinish(dest_buf);
+ }
+ m_bEOF = TRUE;
+}
+void CFX_DataFilter::ReportEOF(FX_DWORD left_input) {
+ if (m_bEOF) {
+ return;
+ }
+ m_bEOF = TRUE;
+ m_SrcPos -= left_input;
+}
+CFX_DataFilter* FPDF_CreateFilter(const CFX_ByteStringC& name,
+ const CPDF_Dictionary* pParam,
+ int width,
+ int height) {
+ FX_DWORD id = name.GetID();
+ switch (id) {
+ case FXBSTR_ID('F', 'l', 'a', 't'):
+ case FXBSTR_ID('F', 'l', 0, 0):
+ case FXBSTR_ID('L', 'Z', 'W', 'D'):
+ case FXBSTR_ID('L', 'Z', 'W', 0): {
+ CFX_DataFilter* pFilter;
+ if (id == FXBSTR_ID('L', 'Z', 'W', 'D') ||
+ id == FXBSTR_ID('L', 'Z', 'W', 0)) {
+ pFilter = new CPDF_LzwFilter(
+ pParam ? pParam->GetInteger("EarlyChange", 1) : 1);
+ } else {
+ pFilter = new CPDF_FlateFilter;
+ }
+ if ((pParam ? pParam->GetInteger("Predictor", 1) : 1) > 1) {
+ CFX_DataFilter* pPredictor = new CPDF_PredictorFilter(
+ pParam->GetInteger(FX_BSTRC("Predictor"), 1),
+ pParam->GetInteger(FX_BSTRC("Colors"), 1),
+ pParam->GetInteger(FX_BSTRC("BitsPerComponent"), 8),
+ pParam->GetInteger(FX_BSTRC("Columns"), 1));
+ pFilter->SetDestFilter(pPredictor);
+ }
+ return pFilter;
+ }
+ case FXBSTR_ID('A', 'S', 'C', 'I'):
+ if (name == "ASCIIHexDecode") {
+ return new CPDF_AsciiHexFilter;
+ }
+ return new CPDF_Ascii85Filter;
+ case FXBSTR_ID('A', 'H', 'x', 0):
+ return new CPDF_AsciiHexFilter;
+ case FXBSTR_ID('A', '8', '5', 0):
+ return new CPDF_Ascii85Filter;
+ case FXBSTR_ID('R', 'u', 'n', 'L'):
+ return new CPDF_RunLenFilter;
+ case FXBSTR_ID('C', 'C', 'I', 'T'): {
+ int Encoding = 0;
+ int bEndOfLine = FALSE;
+ int bByteAlign = FALSE;
+ int bBlack = FALSE;
+ int nRows = 0;
+ int nColumns = 1728;
+ if (pParam) {
+ Encoding = pParam->GetInteger(FX_BSTRC("K"));
+ bEndOfLine = pParam->GetInteger(FX_BSTRC("EndOfLine"));
+ bByteAlign = pParam->GetInteger(FX_BSTRC("EncodedByteAlign"));
+ bBlack = pParam->GetInteger(FX_BSTRC("BlackIs1"));
+ nColumns = pParam->GetInteger(FX_BSTRC("Columns"), 1728);
+ nRows = pParam->GetInteger(FX_BSTRC("Rows"));
+ }
+ if (nColumns == 0) {
+ nColumns = width;
+ }
+ if (nRows == 0) {
+ nRows = height;
+ }
+ CPDF_FaxFilter* pFilter = new CPDF_FaxFilter();
+ pFilter->Initialize(Encoding, bEndOfLine, bByteAlign, bBlack, nRows,
+ nColumns);
+ return pFilter;
+ }
+ case FXBSTR_ID('D', 'C', 'T', 'D'):
+ return new CPDF_JpegFilter;
+ default:
+ return NULL;
+ }
+}
+CFX_DataFilter* _FPDF_CreateFilterFromDict(CPDF_Dictionary* pDict) {
+ CPDF_Object* pDecoder = pDict->GetElementValue("Filter");
+ if (pDecoder == NULL) {
+ return NULL;
+ }
+ CFX_DataFilter* pFirstFilter = NULL;
+ int width = pDict->GetInteger(FX_BSTRC("Width")),
+ height = pDict->GetInteger(FX_BSTRC("Height"));
+ CPDF_Object* pParams = pDict->GetElementValue("DecodeParms");
+ if (pDecoder->GetType() == PDFOBJ_ARRAY) {
+ if (pParams && pParams->GetType() != PDFOBJ_ARRAY) {
+ pParams = NULL;
+ }
+ for (FX_DWORD i = 0; i < ((CPDF_Array*)pDecoder)->GetCount(); i++) {
+ CFX_ByteString name = ((CPDF_Array*)pDecoder)->GetString(i);
+ CPDF_Dictionary* pParam = NULL;
+ if (pParams) {
+ pParam = ((CPDF_Array*)pParams)->GetDict(i);
+ }
+ CFX_DataFilter* pDestFilter =
+ FPDF_CreateFilter(name, pParam, width, height);
+ if (pDestFilter) {
+ if (pFirstFilter == NULL) {
+ pFirstFilter = pDestFilter;
+ } else {
+ pFirstFilter->SetDestFilter(pDestFilter);
+ }
+ }
+ }
+ } else {
+ if (pParams && pParams->GetType() != PDFOBJ_DICTIONARY) {
+ pParams = NULL;
+ }
+ pFirstFilter = FPDF_CreateFilter(pDecoder->GetString(),
+ (CPDF_Dictionary*)pParams, width, height);
+ }
+ return pFirstFilter;
+}
+CPDF_StreamFilter* CPDF_Stream::GetStreamFilter(FX_BOOL bRaw) const {
+ CFX_DataFilter* pFirstFilter = NULL;
+ if (m_pCryptoHandler) {
+ pFirstFilter = new CPDF_DecryptFilter(m_pCryptoHandler, m_ObjNum, m_GenNum);
+ }
+ if (!bRaw) {
+ CFX_DataFilter* pFilter = _FPDF_CreateFilterFromDict(m_pDict);
+ if (pFilter) {
+ if (pFirstFilter == NULL) {
+ pFirstFilter = pFilter;
+ } else {
+ pFirstFilter->SetDestFilter(pFilter);
+ }
+ }
+ }
+ CPDF_StreamFilter* pStreamFilter = new CPDF_StreamFilter;
+ pStreamFilter->m_pStream = this;
+ pStreamFilter->m_pFilter = pFirstFilter;
+ pStreamFilter->m_pBuffer = NULL;
+ pStreamFilter->m_SrcOffset = 0;
+ return pStreamFilter;
+}
+CPDF_StreamFilter::~CPDF_StreamFilter() {
+ delete m_pFilter;
+ delete m_pBuffer;
+}
+#define FPDF_FILTER_BUFFER_IN_SIZE FPDF_FILTER_BUFFER_SIZE
+FX_DWORD CPDF_StreamFilter::ReadBlock(uint8_t* buffer, FX_DWORD buf_size) {
+ if (m_pFilter == NULL) {
+ FX_DWORD read_size = m_pStream->GetRawSize() - m_SrcOffset;
+ if (read_size == 0) {
+ return 0;
}
- return read_size + ReadLeftOver(buffer, buf_size);
-}
-FX_DWORD CPDF_StreamFilter::ReadLeftOver(uint8_t* buffer, FX_DWORD buf_size)
-{
- FX_DWORD read_size = m_pBuffer->GetSize() - m_BufOffset;
if (read_size > buf_size) {
- read_size = buf_size;
- }
- FXSYS_memcpy(buffer, m_pBuffer->GetBuffer() + m_BufOffset, read_size);
- m_BufOffset += read_size;
- if (m_BufOffset == (FX_DWORD)m_pBuffer->GetSize()) {
- delete m_pBuffer;
- m_pBuffer = NULL;
+ read_size = buf_size;
}
+ m_pStream->ReadRawData(m_SrcOffset, buffer, read_size);
+ m_SrcOffset += read_size;
return read_size;
-}
-CPDF_DecryptFilter::CPDF_DecryptFilter(CPDF_CryptoHandler* pCryptoHandler, FX_DWORD objnum, FX_DWORD gennum)
-{
- m_pCryptoHandler = pCryptoHandler;
- m_pContext = NULL;
- m_ObjNum = objnum;
- m_GenNum = gennum;
-}
-CPDF_DecryptFilter::~CPDF_DecryptFilter()
-{
- CFX_BinaryBuf buf;
- if (m_pContext) {
- m_pCryptoHandler->DecryptFinish(m_pContext, buf);
- }
-}
-void CPDF_DecryptFilter::v_FilterIn(const uint8_t* src_buf, FX_DWORD src_size, CFX_BinaryBuf& dest_buf)
-{
- if (m_pContext == NULL) {
- m_pContext = m_pCryptoHandler->DecryptStart(m_ObjNum, m_GenNum);
- }
- m_pCryptoHandler->DecryptStream(m_pContext, src_buf, src_size, dest_buf);
-}
-void CPDF_DecryptFilter::v_FilterFinish(CFX_BinaryBuf& dest_buf)
-{
- m_bEOF = TRUE;
- if (m_pContext == NULL) {
+ }
+ FX_DWORD read_size = 0;
+ if (m_pBuffer) {
+ read_size = ReadLeftOver(buffer, buf_size);
+ if (read_size == buf_size) {
+ return read_size;
+ }
+ buffer += read_size;
+ buf_size -= read_size;
+ }
+ ASSERT(m_pBuffer == NULL);
+ if (m_pFilter->IsEOF()) {
+ return read_size;
+ }
+ m_pBuffer = new CFX_BinaryBuf;
+ m_pBuffer->EstimateSize(FPDF_FILTER_BUFFER_SIZE, FPDF_FILTER_BUFFER_SIZE);
+ m_BufOffset = 0;
+ while (1) {
+ int src_size = m_pStream->GetRawSize() - m_SrcOffset;
+ if (src_size == 0) {
+ m_pFilter->FilterFinish(*m_pBuffer);
+ break;
+ }
+ if (src_size > FPDF_FILTER_BUFFER_IN_SIZE) {
+ src_size = FPDF_FILTER_BUFFER_IN_SIZE;
+ }
+ if (!m_pStream->ReadRawData(m_SrcOffset, m_SrcBuffer, src_size)) {
+ return 0;
+ }
+ m_SrcOffset += src_size;
+ m_pFilter->FilterIn(m_SrcBuffer, src_size, *m_pBuffer);
+ if (m_pBuffer->GetSize() >= (int)buf_size) {
+ break;
+ }
+ }
+ return read_size + ReadLeftOver(buffer, buf_size);
+}
+FX_DWORD CPDF_StreamFilter::ReadLeftOver(uint8_t* buffer, FX_DWORD buf_size) {
+ FX_DWORD read_size = m_pBuffer->GetSize() - m_BufOffset;
+ if (read_size > buf_size) {
+ read_size = buf_size;
+ }
+ FXSYS_memcpy(buffer, m_pBuffer->GetBuffer() + m_BufOffset, read_size);
+ m_BufOffset += read_size;
+ if (m_BufOffset == (FX_DWORD)m_pBuffer->GetSize()) {
+ delete m_pBuffer;
+ m_pBuffer = NULL;
+ }
+ return read_size;
+}
+CPDF_DecryptFilter::CPDF_DecryptFilter(CPDF_CryptoHandler* pCryptoHandler,
+ FX_DWORD objnum,
+ FX_DWORD gennum) {
+ m_pCryptoHandler = pCryptoHandler;
+ m_pContext = NULL;
+ m_ObjNum = objnum;
+ m_GenNum = gennum;
+}
+CPDF_DecryptFilter::~CPDF_DecryptFilter() {
+ CFX_BinaryBuf buf;
+ if (m_pContext) {
+ m_pCryptoHandler->DecryptFinish(m_pContext, buf);
+ }
+}
+void CPDF_DecryptFilter::v_FilterIn(const uint8_t* src_buf,
+ FX_DWORD src_size,
+ CFX_BinaryBuf& dest_buf) {
+ if (m_pContext == NULL) {
+ m_pContext = m_pCryptoHandler->DecryptStart(m_ObjNum, m_GenNum);
+ }
+ m_pCryptoHandler->DecryptStream(m_pContext, src_buf, src_size, dest_buf);
+}
+void CPDF_DecryptFilter::v_FilterFinish(CFX_BinaryBuf& dest_buf) {
+ m_bEOF = TRUE;
+ if (m_pContext == NULL) {
+ return;
+ }
+ m_pCryptoHandler->DecryptFinish(m_pContext, dest_buf);
+ m_pContext = NULL;
+}
+CPDF_FlateFilter::CPDF_FlateFilter() {
+ m_pContext = NULL;
+}
+CPDF_FlateFilter::~CPDF_FlateFilter() {
+ if (m_pContext) {
+ FPDFAPI_FlateEnd(m_pContext);
+ }
+}
+void CPDF_FlateFilter::v_FilterIn(const uint8_t* src_buf,
+ FX_DWORD src_size,
+ CFX_BinaryBuf& dest_buf) {
+ if (m_pContext == NULL) {
+ m_pContext = FPDFAPI_FlateInit(my_alloc_func, my_free_func);
+ }
+ FPDFAPI_FlateInput(m_pContext, src_buf, src_size);
+ while (1) {
+ int ret =
+ FPDFAPI_FlateOutput(m_pContext, m_DestBuffer, FPDF_FILTER_BUFFER_SIZE);
+ int out_size =
+ FPDF_FILTER_BUFFER_SIZE - FPDFAPI_FlateGetAvailOut(m_pContext);
+ dest_buf.AppendBlock(m_DestBuffer, out_size);
+ if (ret == Z_BUF_ERROR) {
+ break;
+ }
+ if (ret != Z_OK) {
+ ReportEOF(FPDFAPI_FlateGetAvailIn(m_pContext));
+ break;
+ }
+ }
+}
+CPDF_LzwFilter::CPDF_LzwFilter(FX_BOOL bEarlyChange) {
+ m_bEarlyChange = bEarlyChange ? 1 : 0;
+ m_CodeLen = 9;
+ m_nCodes = 0;
+ m_nLeftBits = 0;
+ m_LeftBits = 0;
+ m_OldCode = (FX_DWORD)-1;
+}
+void CPDF_LzwFilter::v_FilterIn(const uint8_t* src_buf,
+ FX_DWORD src_size,
+ CFX_BinaryBuf& dest_buf) {
+ for (FX_DWORD i = 0; i < src_size; i++) {
+ if (m_nLeftBits + 8 < m_CodeLen) {
+ m_nLeftBits += 8;
+ m_LeftBits = (m_LeftBits << 8) | src_buf[i];
+ continue;
+ }
+ FX_DWORD new_bits = m_CodeLen - m_nLeftBits;
+ FX_DWORD code = (m_LeftBits << new_bits) | (src_buf[i] >> (8 - new_bits));
+ m_nLeftBits = 8 - new_bits;
+ m_LeftBits = src_buf[i] % (1 << m_nLeftBits);
+ if (code < 256) {
+ dest_buf.AppendByte((uint8_t)code);
+ m_LastChar = (uint8_t)code;
+ if (m_OldCode != -1) {
+ AddCode(m_OldCode, m_LastChar);
+ }
+ m_OldCode = code;
+ } else if (code == 256) {
+ m_CodeLen = 9;
+ m_nCodes = 0;
+ m_OldCode = (FX_DWORD)-1;
+ } else if (code == 257) {
+ ReportEOF(src_size - i - 1);
+ return;
+ } else {
+ if (m_OldCode == -1) {
+ ReportEOF(src_size - i - 1);
return;
- }
- m_pCryptoHandler->DecryptFinish(m_pContext, dest_buf);
- m_pContext = NULL;
-}
-CPDF_FlateFilter::CPDF_FlateFilter()
-{
- m_pContext = NULL;
-}
-CPDF_FlateFilter::~CPDF_FlateFilter()
-{
- if (m_pContext) {
- FPDFAPI_FlateEnd(m_pContext);
- }
-}
-void CPDF_FlateFilter::v_FilterIn(const uint8_t* src_buf, FX_DWORD src_size, CFX_BinaryBuf& dest_buf)
-{
- if (m_pContext == NULL) {
- m_pContext = FPDFAPI_FlateInit(my_alloc_func, my_free_func);
- }
- FPDFAPI_FlateInput(m_pContext, src_buf, src_size);
- while (1) {
- int ret = FPDFAPI_FlateOutput(m_pContext, m_DestBuffer, FPDF_FILTER_BUFFER_SIZE);
- int out_size = FPDF_FILTER_BUFFER_SIZE - FPDFAPI_FlateGetAvailOut(m_pContext);
- dest_buf.AppendBlock(m_DestBuffer, out_size);
- if (ret == Z_BUF_ERROR) {
- break;
- }
- if (ret != Z_OK) {
- ReportEOF(FPDFAPI_FlateGetAvailIn(m_pContext));
- break;
- }
- }
-}
-CPDF_LzwFilter::CPDF_LzwFilter(FX_BOOL bEarlyChange)
-{
- m_bEarlyChange = bEarlyChange ? 1 : 0;
- m_CodeLen = 9;
- m_nCodes = 0;
- m_nLeftBits = 0;
- m_LeftBits = 0;
- m_OldCode = (FX_DWORD) - 1;
-}
-void CPDF_LzwFilter::v_FilterIn(const uint8_t* src_buf, FX_DWORD src_size, CFX_BinaryBuf& dest_buf)
-{
- for (FX_DWORD i = 0; i < src_size; i ++) {
- if (m_nLeftBits + 8 < m_CodeLen) {
- m_nLeftBits += 8;
- m_LeftBits = (m_LeftBits << 8) | src_buf[i];
- continue;
- }
- FX_DWORD new_bits = m_CodeLen - m_nLeftBits;
- FX_DWORD code = (m_LeftBits << new_bits) | (src_buf[i] >> (8 - new_bits));
- m_nLeftBits = 8 - new_bits;
- m_LeftBits = src_buf[i] % (1 << m_nLeftBits);
- if (code < 256) {
- dest_buf.AppendByte((uint8_t)code);
- m_LastChar = (uint8_t)code;
- if (m_OldCode != -1) {
- AddCode(m_OldCode, m_LastChar);
- }
- m_OldCode = code;
- } else if (code == 256) {
- m_CodeLen = 9;
- m_nCodes = 0;
- m_OldCode = (FX_DWORD) - 1;
- } else if (code == 257) {
- ReportEOF(src_size - i - 1);
- return;
- } else {
- if (m_OldCode == -1) {
- ReportEOF(src_size - i - 1);
- return;
- }
- m_StackLen = 0;
- if (code >= m_nCodes + 258) {
- if (m_StackLen < sizeof(m_DecodeStack)) {
- m_DecodeStack[m_StackLen++] = m_LastChar;
- }
- DecodeString(m_OldCode);
- } else {
- DecodeString(code);
- }
- dest_buf.AppendBlock(NULL, m_StackLen);
- uint8_t* pOutput = dest_buf.GetBuffer() + dest_buf.GetSize() - m_StackLen;
- for (FX_DWORD cc = 0; cc < m_StackLen; cc ++) {
- pOutput[cc] = m_DecodeStack[m_StackLen - cc - 1];
- }
- m_LastChar = m_DecodeStack[m_StackLen - 1];
- if (m_OldCode < 256) {
- AddCode(m_OldCode, m_LastChar);
- } else if (m_OldCode - 258 >= m_nCodes) {
- ReportEOF(src_size - i - 1);
- return;
- } else {
- AddCode(m_OldCode, m_LastChar);
- }
- m_OldCode = code;
- }
- }
-}
-void CPDF_LzwFilter::AddCode(FX_DWORD prefix_code, uint8_t append_char)
-{
- if (m_nCodes + m_bEarlyChange == 4094) {
+ }
+ m_StackLen = 0;
+ if (code >= m_nCodes + 258) {
+ if (m_StackLen < sizeof(m_DecodeStack)) {
+ m_DecodeStack[m_StackLen++] = m_LastChar;
+ }
+ DecodeString(m_OldCode);
+ } else {
+ DecodeString(code);
+ }
+ dest_buf.AppendBlock(NULL, m_StackLen);
+ uint8_t* pOutput = dest_buf.GetBuffer() + dest_buf.GetSize() - m_StackLen;
+ for (FX_DWORD cc = 0; cc < m_StackLen; cc++) {
+ pOutput[cc] = m_DecodeStack[m_StackLen - cc - 1];
+ }
+ m_LastChar = m_DecodeStack[m_StackLen - 1];
+ if (m_OldCode < 256) {
+ AddCode(m_OldCode, m_LastChar);
+ } else if (m_OldCode - 258 >= m_nCodes) {
+ ReportEOF(src_size - i - 1);
return;
- }
- m_CodeArray[m_nCodes ++] = (prefix_code << 16) | append_char;
- if (m_nCodes + m_bEarlyChange == 512 - 258) {
- m_CodeLen = 10;
- } else if (m_nCodes + m_bEarlyChange == 1024 - 258) {
- m_CodeLen = 11;
- } else if (m_nCodes + m_bEarlyChange == 2048 - 258) {
- m_CodeLen = 12;
- }
-}
-void CPDF_LzwFilter::DecodeString(FX_DWORD code)
-{
- while (1) {
- int index = code - 258;
- if (index < 0 || index >= (int)m_nCodes) {
- break;
- }
- FX_DWORD data = m_CodeArray[index];
- if (m_StackLen >= sizeof(m_DecodeStack)) {
- return;
- }
- m_DecodeStack[m_StackLen++] = (uint8_t)data;
- code = data >> 16;
- }
+ } else {
+ AddCode(m_OldCode, m_LastChar);
+ }
+ m_OldCode = code;
+ }
+ }
+}
+void CPDF_LzwFilter::AddCode(FX_DWORD prefix_code, uint8_t append_char) {
+ if (m_nCodes + m_bEarlyChange == 4094) {
+ return;
+ }
+ m_CodeArray[m_nCodes++] = (prefix_code << 16) | append_char;
+ if (m_nCodes + m_bEarlyChange == 512 - 258) {
+ m_CodeLen = 10;
+ } else if (m_nCodes + m_bEarlyChange == 1024 - 258) {
+ m_CodeLen = 11;
+ } else if (m_nCodes + m_bEarlyChange == 2048 - 258) {
+ m_CodeLen = 12;
+ }
+}
+void CPDF_LzwFilter::DecodeString(FX_DWORD code) {
+ while (1) {
+ int index = code - 258;
+ if (index < 0 || index >= (int)m_nCodes) {
+ break;
+ }
+ FX_DWORD data = m_CodeArray[index];
if (m_StackLen >= sizeof(m_DecodeStack)) {
- return;
- }
- m_DecodeStack[m_StackLen++] = (uint8_t)code;
-}
-CPDF_PredictorFilter::CPDF_PredictorFilter(int predictor, int colors, int bpc, int cols)
-{
- m_bTiff = predictor < 10;
- m_pRefLine = NULL;
- m_pCurLine = NULL;
- m_iLine = 0;
- m_LineInSize = 0;
- m_Bpp = (colors * bpc + 7) / 8;
- m_Pitch = (colors * bpc * cols + 7) / 8;
+ return;
+ }
+ m_DecodeStack[m_StackLen++] = (uint8_t)data;
+ code = data >> 16;
+ }
+ if (m_StackLen >= sizeof(m_DecodeStack)) {
+ return;
+ }
+ m_DecodeStack[m_StackLen++] = (uint8_t)code;
+}
+CPDF_PredictorFilter::CPDF_PredictorFilter(int predictor,
+ int colors,
+ int bpc,
+ int cols) {
+ m_bTiff = predictor < 10;
+ m_pRefLine = NULL;
+ m_pCurLine = NULL;
+ m_iLine = 0;
+ m_LineInSize = 0;
+ m_Bpp = (colors * bpc + 7) / 8;
+ m_Pitch = (colors * bpc * cols + 7) / 8;
+ if (!m_bTiff) {
+ m_Pitch++;
+ }
+}
+CPDF_PredictorFilter::~CPDF_PredictorFilter() {
+ if (m_pCurLine) {
+ FX_Free(m_pCurLine);
+ }
+ if (m_pRefLine) {
+ FX_Free(m_pRefLine);
+ }
+}
+static uint8_t PaethPredictor(int a, int b, int c) {
+ int p = a + b - c;
+ int pa = FXSYS_abs(p - a);
+ int pb = FXSYS_abs(p - b);
+ int pc = FXSYS_abs(p - c);
+ if (pa <= pb && pa <= pc) {
+ return (uint8_t)a;
+ }
+ if (pb <= pc) {
+ return (uint8_t)b;
+ }
+ return (uint8_t)c;
+}
+static void PNG_PredictorLine(uint8_t* cur_buf,
+ uint8_t* ref_buf,
+ int pitch,
+ int Bpp) {
+ uint8_t tag = cur_buf[0];
+ if (tag == 0) {
+ return;
+ }
+ cur_buf++;
+ if (ref_buf) {
+ ref_buf++;
+ }
+ for (int byte = 0; byte < pitch; byte++) {
+ uint8_t raw_byte = cur_buf[byte];
+ switch (tag) {
+ case 1: {
+ uint8_t left = 0;
+ if (byte >= Bpp) {
+ left = cur_buf[byte - Bpp];
+ }
+ cur_buf[byte] = raw_byte + left;
+ break;
+ }
+ case 2: {
+ uint8_t up = 0;
+ if (ref_buf) {
+ up = ref_buf[byte];
+ }
+ cur_buf[byte] = raw_byte + up;
+ break;
+ }
+ case 3: {
+ uint8_t left = 0;
+ if (byte >= Bpp) {
+ left = cur_buf[byte - Bpp];
+ }
+ uint8_t up = 0;
+ if (ref_buf) {
+ up = ref_buf[byte];
+ }
+ cur_buf[byte] = raw_byte + (up + left) / 2;
+ break;
+ }
+ case 4: {
+ uint8_t left = 0;
+ if (byte >= Bpp) {
+ left = cur_buf[byte - Bpp];
+ }
+ uint8_t up = 0;
+ if (ref_buf) {
+ up = ref_buf[byte];
+ }
+ uint8_t upper_left = 0;
+ if (byte >= Bpp && ref_buf) {
+ upper_left = ref_buf[byte - Bpp];
+ }
+ cur_buf[byte] = raw_byte + PaethPredictor(left, up, upper_left);
+ break;
+ }
+ }
+ }
+}
+void CPDF_PredictorFilter::v_FilterIn(const uint8_t* src_buf,
+ FX_DWORD src_size,
+ CFX_BinaryBuf& dest_buf) {
+ if (m_pCurLine == NULL) {
+ m_pCurLine = FX_Alloc(uint8_t, m_Pitch);
if (!m_bTiff) {
- m_Pitch ++;
- }
-}
-CPDF_PredictorFilter::~CPDF_PredictorFilter()
-{
- if (m_pCurLine) {
- FX_Free(m_pCurLine);
- }
- if (m_pRefLine) {
- FX_Free(m_pRefLine);
- }
-}
-static uint8_t PaethPredictor(int a, int b, int c)
-{
- int p = a + b - c;
- int pa = FXSYS_abs(p - a);
- int pb = FXSYS_abs(p - b);
- int pc = FXSYS_abs(p - c);
- if (pa <= pb && pa <= pc) {
- return (uint8_t)a;
- }
- if (pb <= pc) {
- return (uint8_t)b;
- }
- return (uint8_t)c;
-}
-static void PNG_PredictorLine(uint8_t* cur_buf, uint8_t* ref_buf, int pitch, int Bpp)
-{
- uint8_t tag = cur_buf[0];
- if (tag == 0) {
- return;
- }
- cur_buf ++;
- if (ref_buf) {
- ref_buf ++;
- }
- for (int byte = 0; byte < pitch; byte ++) {
- uint8_t raw_byte = cur_buf[byte];
- switch (tag) {
- case 1: {
- uint8_t left = 0;
- if (byte >= Bpp) {
- left = cur_buf[byte - Bpp];
- }
- cur_buf[byte] = raw_byte + left;
- break;
- }
- case 2: {
- uint8_t up = 0;
- if (ref_buf) {
- up = ref_buf[byte];
- }
- cur_buf[byte] = raw_byte + up;
- break;
- }
- case 3: {
- uint8_t left = 0;
- if (byte >= Bpp) {
- left = cur_buf[byte - Bpp];
- }
- uint8_t up = 0;
- if (ref_buf) {
- up = ref_buf[byte];
- }
- cur_buf[byte] = raw_byte + (up + left) / 2;
- break;
- }
- case 4: {
- uint8_t left = 0;
- if (byte >= Bpp) {
- left = cur_buf[byte - Bpp];
- }
- uint8_t up = 0;
- if (ref_buf) {
- up = ref_buf[byte];
- }
- uint8_t upper_left = 0;
- if (byte >= Bpp && ref_buf) {
- upper_left = ref_buf[byte - Bpp];
- }
- cur_buf[byte] = raw_byte + PaethPredictor(left, up, upper_left);
- break;
- }
- }
- }
-}
-void CPDF_PredictorFilter::v_FilterIn(const uint8_t* src_buf, FX_DWORD src_size, CFX_BinaryBuf& dest_buf)
-{
- if (m_pCurLine == NULL) {
- m_pCurLine = FX_Alloc(uint8_t, m_Pitch);
- if (!m_bTiff) {
- m_pRefLine = FX_Alloc(uint8_t, m_Pitch);
- }
+ m_pRefLine = FX_Alloc(uint8_t, m_Pitch);
+ }
+ }
+ while (1) {
+ FX_DWORD read_size = m_Pitch - m_LineInSize;
+ if (read_size > src_size) {
+ read_size = src_size;
+ }
+ FXSYS_memcpy(m_pCurLine + m_LineInSize, src_buf, read_size);
+ m_LineInSize += read_size;
+ if (m_LineInSize < m_Pitch) {
+ break;
+ }
+ src_buf += read_size;
+ src_size -= read_size;
+ if (m_bTiff) {
+ for (FX_DWORD byte = m_Bpp; byte < m_Pitch; byte++) {
+ m_pCurLine[byte] += m_pCurLine[byte - m_Bpp];
+ }
+ dest_buf.AppendBlock(m_pCurLine, m_Pitch);
+ } else {
+ PNG_PredictorLine(m_pCurLine, m_iLine ? m_pRefLine : NULL, m_Pitch - 1,
+ m_Bpp);
+ dest_buf.AppendBlock(m_pCurLine + 1, m_Pitch - 1);
+ m_iLine++;
+ uint8_t* temp = m_pCurLine;
+ m_pCurLine = m_pRefLine;
+ m_pRefLine = temp;
}
- while (1) {
- FX_DWORD read_size = m_Pitch - m_LineInSize;
- if (read_size > src_size) {
- read_size = src_size;
- }
- FXSYS_memcpy(m_pCurLine + m_LineInSize, src_buf, read_size);
- m_LineInSize += read_size;
- if (m_LineInSize < m_Pitch) {
- break;
- }
- src_buf += read_size;
- src_size -= read_size;
- if (m_bTiff) {
- for (FX_DWORD byte = m_Bpp; byte < m_Pitch; byte ++) {
- m_pCurLine[byte] += m_pCurLine[byte - m_Bpp];
+ m_LineInSize = 0;
+ }
+}
+CPDF_Ascii85Filter::CPDF_Ascii85Filter() {
+ m_State = 0;
+ m_CharCount = 0;
+}
+void CPDF_Ascii85Filter::v_FilterIn(const uint8_t* src_buf,
+ FX_DWORD src_size,
+ CFX_BinaryBuf& dest_buf) {
+ for (FX_DWORD i = 0; i < src_size; i++) {
+ uint8_t byte = src_buf[i];
+ if (PDF_CharType[byte] == 'W') {
+ continue;
+ }
+ switch (m_State) {
+ case 0:
+ if (byte >= '!' && byte <= 'u') {
+ int digit = byte - '!';
+ m_CurDWord = digit;
+ m_CharCount = 1;
+ m_State = 1;
+ } else if (byte == 'z') {
+ int zero = 0;
+ dest_buf.AppendBlock(&zero, 4);
+ } else if (byte == '~') {
+ m_State = 2;
+ }
+ break;
+ case 1: {
+ if (byte >= '!' && byte <= 'u') {
+ int digit = byte - '!';
+ m_CurDWord = m_CurDWord * 85 + digit;
+ m_CharCount++;
+ if (m_CharCount == 5) {
+ for (int i = 0; i < 4; i++) {
+ dest_buf.AppendByte((uint8_t)(m_CurDWord >> (3 - i) * 8));
}
- dest_buf.AppendBlock(m_pCurLine, m_Pitch);
- } else {
- PNG_PredictorLine(m_pCurLine, m_iLine ? m_pRefLine : NULL, m_Pitch - 1, m_Bpp);
- dest_buf.AppendBlock(m_pCurLine + 1, m_Pitch - 1);
- m_iLine ++;
- uint8_t* temp = m_pCurLine;
- m_pCurLine = m_pRefLine;
- m_pRefLine = temp;
- }
- m_LineInSize = 0;
- }
-}
-CPDF_Ascii85Filter::CPDF_Ascii85Filter()
-{
- m_State = 0;
- m_CharCount = 0;
-}
-void CPDF_Ascii85Filter::v_FilterIn(const uint8_t* src_buf, FX_DWORD src_size, CFX_BinaryBuf& dest_buf)
-{
- for (FX_DWORD i = 0; i < src_size; i ++) {
- uint8_t byte = src_buf[i];
- if (PDF_CharType[byte] == 'W') {
- continue;
- }
- switch (m_State) {
- case 0:
- if (byte >= '!' && byte <= 'u') {
- int digit = byte - '!';
- m_CurDWord = digit;
- m_CharCount = 1;
- m_State = 1;
- } else if (byte == 'z') {
- int zero = 0;
- dest_buf.AppendBlock(&zero, 4);
- } else if (byte == '~') {
- m_State = 2;
- }
- break;
- case 1: {
- if (byte >= '!' && byte <= 'u') {
- int digit = byte - '!';
- m_CurDWord = m_CurDWord * 85 + digit;
- m_CharCount ++;
- if (m_CharCount == 5) {
- for (int i = 0; i < 4; i ++) {
- dest_buf.AppendByte((uint8_t)(m_CurDWord >> (3 - i) * 8));
- }
- m_State = 0;
- }
- } else if (byte == '~') {
- if (m_CharCount > 1) {
- int i;
- for (i = m_CharCount; i < 5; i ++) {
- m_CurDWord = m_CurDWord * 85 + 84;
- }
- for (i = 0; i < m_CharCount - 1; i ++) {
- dest_buf.AppendByte((uint8_t)(m_CurDWord >> (3 - i) * 8));
- }
- }
- m_State = 2;
- }
- break;
- }
- case 2:
- if (byte == '>') {
- ReportEOF(src_size - i - 1);
- return;
- }
- break;
- }
- }
-}
-CPDF_AsciiHexFilter::CPDF_AsciiHexFilter()
-{
- m_State = 0;
-}
-void CPDF_AsciiHexFilter::v_FilterIn(const uint8_t* src_buf, FX_DWORD src_size, CFX_BinaryBuf& dest_buf)
-{
- for (FX_DWORD i = 0; i < src_size; i ++) {
- uint8_t byte = src_buf[i];
- if (PDF_CharType[byte] == 'W') {
- continue;
- }
- int digit;
- if (byte >= '0' && byte <= '9') {
- digit = byte - '0';
- } else if (byte >= 'a' && byte <= 'f') {
- digit = byte - 'a' + 10;
- } else if (byte >= 'A' && byte <= 'F') {
- digit = byte - 'A' + 10;
- } else {
- if (m_State) {
- dest_buf.AppendByte(m_FirstDigit * 16);
+ m_State = 0;
+ }
+ } else if (byte == '~') {
+ if (m_CharCount > 1) {
+ int i;
+ for (i = m_CharCount; i < 5; i++) {
+ m_CurDWord = m_CurDWord * 85 + 84;
}
- ReportEOF(src_size - i - 1);
- return;
- }
- if (m_State == 0) {
- m_FirstDigit = digit;
- m_State ++;
- } else {
- dest_buf.AppendByte(m_FirstDigit * 16 + digit);
- m_State --;
- }
- }
-}
-CPDF_RunLenFilter::CPDF_RunLenFilter()
-{
- m_State = 0;
- m_Count = 0;
-}
-void CPDF_RunLenFilter::v_FilterIn(const uint8_t* src_buf, FX_DWORD src_size, CFX_BinaryBuf& dest_buf)
-{
- for (FX_DWORD i = 0; i < src_size; i ++) {
- uint8_t byte = src_buf[i];
- switch (m_State) {
- case 0:
- if (byte < 128) {
- m_State = 1;
- m_Count = byte + 1;
- } else if (byte == 128) {
- ReportEOF(src_size - i - 1);
- return;
- } else {
- m_State = 2;
- m_Count = 257 - byte;
- }
- break;
- case 1:
- dest_buf.AppendByte(byte);
- m_Count --;
- if (m_Count == 0) {
- m_State = 0;
- }
- break;
- case 2: {
- dest_buf.AppendBlock(NULL, m_Count);
- FXSYS_memset(dest_buf.GetBuffer() + dest_buf.GetSize() - m_Count, byte, m_Count);
- m_State = 0;
- break;
- }
- }
- }
-}
-CPDF_JpegFilter::CPDF_JpegFilter()
-{
- m_pContext = NULL;
- m_bGotHeader = FALSE;
- m_pScanline = NULL;
- m_iLine = 0;
-}
-CPDF_JpegFilter::~CPDF_JpegFilter()
-{
- if (m_pScanline) {
- FX_Free(m_pScanline);
- }
- if (m_pContext) {
- CPDF_ModuleMgr::Get()->GetJpegModule()->Finish(m_pContext);
- }
-}
-void CPDF_JpegFilter::v_FilterIn(const uint8_t* src_buf, FX_DWORD src_size, CFX_BinaryBuf& dest_buf)
-{
- if (m_pContext == NULL) {
- m_pContext = CPDF_ModuleMgr::Get()->GetJpegModule()->Start();
- }
- const uint8_t* jpeg_src_buf;
- FX_DWORD jpeg_src_size;
- CFX_BinaryBuf temp_buf;
- if (m_InputBuf.GetSize()) {
- temp_buf.EstimateSize(m_InputBuf.GetSize() + src_size);
- temp_buf.AppendBlock(m_InputBuf.GetBuffer(), m_InputBuf.GetSize());
- m_InputBuf.Clear();
- temp_buf.AppendBlock(src_buf, src_size);
- jpeg_src_buf = temp_buf.GetBuffer();
- jpeg_src_size = temp_buf.GetSize();
+ for (i = 0; i < m_CharCount - 1; i++) {
+ dest_buf.AppendByte((uint8_t)(m_CurDWord >> (3 - i) * 8));
+ }
+ }
+ m_State = 2;
+ }
+ break;
+ }
+ case 2:
+ if (byte == '>') {
+ ReportEOF(src_size - i - 1);
+ return;
+ }
+ break;
+ }
+ }
+}
+CPDF_AsciiHexFilter::CPDF_AsciiHexFilter() {
+ m_State = 0;
+}
+void CPDF_AsciiHexFilter::v_FilterIn(const uint8_t* src_buf,
+ FX_DWORD src_size,
+ CFX_BinaryBuf& dest_buf) {
+ for (FX_DWORD i = 0; i < src_size; i++) {
+ uint8_t byte = src_buf[i];
+ if (PDF_CharType[byte] == 'W') {
+ continue;
+ }
+ int digit;
+ if (byte >= '0' && byte <= '9') {
+ digit = byte - '0';
+ } else if (byte >= 'a' && byte <= 'f') {
+ digit = byte - 'a' + 10;
+ } else if (byte >= 'A' && byte <= 'F') {
+ digit = byte - 'A' + 10;
} else {
- jpeg_src_buf = src_buf;
- jpeg_src_size = src_size;
- }
- CPDF_ModuleMgr::Get()->GetJpegModule()->Input(m_pContext, jpeg_src_buf, jpeg_src_size);
- if (!m_bGotHeader) {
- int ret = CPDF_ModuleMgr::Get()->GetJpegModule()->ReadHeader(m_pContext, &m_Width, &m_Height, &m_nComps);
- int left_size = CPDF_ModuleMgr::Get()->GetJpegModule()->GetAvailInput(m_pContext);
- if (ret == 1) {
- ReportEOF(left_size);
- return;
- }
- if (ret == 2) {
- m_InputBuf.AppendBlock(jpeg_src_buf + jpeg_src_size - left_size, left_size);
- return;
- }
- CPDF_ModuleMgr::Get()->GetJpegModule()->StartScanline(m_pContext, 1);
- m_bGotHeader = TRUE;
- m_Pitch = m_Width * m_nComps;
- }
- if (m_pScanline == NULL) {
- m_pScanline = FX_Alloc(uint8_t, m_Pitch + 4);
- }
- while (1) {
- if (!CPDF_ModuleMgr::Get()->GetJpegModule()->ReadScanline(m_pContext, m_pScanline)) {
- int left_size = CPDF_ModuleMgr::Get()->GetJpegModule()->GetAvailInput(m_pContext);
- m_InputBuf.AppendBlock(jpeg_src_buf + jpeg_src_size - left_size, left_size);
- break;
- }
- dest_buf.AppendBlock(m_pScanline, m_Pitch);
- m_iLine ++;
- if (m_iLine == m_Height) {
- ReportEOF(CPDF_ModuleMgr::Get()->GetJpegModule()->GetAvailInput(m_pContext));
- return;
- }
- }
-}
-CPDF_FaxFilter::CPDF_FaxFilter()
-{
- m_Encoding = 0;
- m_bEndOfLine = FALSE;
- m_bByteAlign = FALSE;
- m_bBlack = FALSE;
- m_nRows = 0;
- m_nColumns = 0;
- m_Pitch = 0;
- m_pScanlineBuf = NULL;
- m_pRefBuf = NULL;
- m_iRow = 0;
- m_InputBitPos = 0;
-}
-CPDF_FaxFilter::~CPDF_FaxFilter()
-{
- if (m_pScanlineBuf) {
- FX_Free(m_pScanlineBuf);
- }
- if (m_pRefBuf) {
- FX_Free(m_pRefBuf);
- }
-}
-FX_BOOL CPDF_FaxFilter::Initialize(int Encoding, int bEndOfLine, int bByteAlign, int bBlack, int nRows, int nColumns)
-{
- m_Encoding = Encoding;
- m_bEndOfLine = bEndOfLine;
- m_bByteAlign = bByteAlign;
- m_bBlack = bBlack;
- m_nRows = nRows;
- m_nColumns = nColumns;
- m_Pitch = (m_nColumns + 7) / 8;
- m_pScanlineBuf = FX_Alloc(uint8_t, m_Pitch);
- m_pRefBuf = FX_Alloc(uint8_t, m_Pitch);
- FXSYS_memset(m_pScanlineBuf, 0xff, m_Pitch);
- FXSYS_memset(m_pRefBuf, 0xff, m_Pitch);
- m_iRow = 0;
- m_InputBitPos = 0;
- return TRUE;
-}
-void CPDF_FaxFilter::v_FilterIn(const uint8_t* src_buf, FX_DWORD src_size, CFX_BinaryBuf& dest_buf)
-{
- const uint8_t* fax_src_buf;
- FX_DWORD fax_src_size;
- CFX_BinaryBuf temp_buf;
- int bitpos;
- if (m_InputBuf.GetSize()) {
- temp_buf.EstimateSize(m_InputBuf.GetSize() + src_size);
- temp_buf.AppendBlock(m_InputBuf.GetBuffer(), m_InputBuf.GetSize());
- m_InputBuf.Clear();
- temp_buf.AppendBlock(src_buf, src_size);
- fax_src_buf = temp_buf.GetBuffer();
- fax_src_size = temp_buf.GetSize();
- bitpos = m_InputBitPos;
+ if (m_State) {
+ dest_buf.AppendByte(m_FirstDigit * 16);
+ }
+ ReportEOF(src_size - i - 1);
+ return;
+ }
+ if (m_State == 0) {
+ m_FirstDigit = digit;
+ m_State++;
} else {
- fax_src_buf = src_buf;
- fax_src_size = src_size;
- bitpos = 0;
- }
- ProcessData(fax_src_buf, fax_src_size, bitpos, FALSE, dest_buf);
- int left_bits = fax_src_size * 8 - bitpos;
- m_InputBuf.AppendBlock(fax_src_buf + bitpos / 8, (left_bits + 7) / 8);
- m_InputBitPos = bitpos % 8;
-}
-void CPDF_FaxFilter::v_FilterFinish(CFX_BinaryBuf& dest_buf)
-{
- ProcessData(m_InputBuf.GetBuffer(), m_InputBuf.GetSize(), m_InputBitPos, TRUE, dest_buf);
+ dest_buf.AppendByte(m_FirstDigit * 16 + digit);
+ m_State--;
+ }
+ }
+}
+CPDF_RunLenFilter::CPDF_RunLenFilter() {
+ m_State = 0;
+ m_Count = 0;
+}
+void CPDF_RunLenFilter::v_FilterIn(const uint8_t* src_buf,
+ FX_DWORD src_size,
+ CFX_BinaryBuf& dest_buf) {
+ for (FX_DWORD i = 0; i < src_size; i++) {
+ uint8_t byte = src_buf[i];
+ switch (m_State) {
+ case 0:
+ if (byte < 128) {
+ m_State = 1;
+ m_Count = byte + 1;
+ } else if (byte == 128) {
+ ReportEOF(src_size - i - 1);
+ return;
+ } else {
+ m_State = 2;
+ m_Count = 257 - byte;
+ }
+ break;
+ case 1:
+ dest_buf.AppendByte(byte);
+ m_Count--;
+ if (m_Count == 0) {
+ m_State = 0;
+ }
+ break;
+ case 2: {
+ dest_buf.AppendBlock(NULL, m_Count);
+ FXSYS_memset(dest_buf.GetBuffer() + dest_buf.GetSize() - m_Count, byte,
+ m_Count);
+ m_State = 0;
+ break;
+ }
+ }
+ }
+}
+CPDF_JpegFilter::CPDF_JpegFilter() {
+ m_pContext = NULL;
+ m_bGotHeader = FALSE;
+ m_pScanline = NULL;
+ m_iLine = 0;
+}
+CPDF_JpegFilter::~CPDF_JpegFilter() {
+ if (m_pScanline) {
+ FX_Free(m_pScanline);
+ }
+ if (m_pContext) {
+ CPDF_ModuleMgr::Get()->GetJpegModule()->Finish(m_pContext);
+ }
+}
+void CPDF_JpegFilter::v_FilterIn(const uint8_t* src_buf,
+ FX_DWORD src_size,
+ CFX_BinaryBuf& dest_buf) {
+ if (m_pContext == NULL) {
+ m_pContext = CPDF_ModuleMgr::Get()->GetJpegModule()->Start();
+ }
+ const uint8_t* jpeg_src_buf;
+ FX_DWORD jpeg_src_size;
+ CFX_BinaryBuf temp_buf;
+ if (m_InputBuf.GetSize()) {
+ temp_buf.EstimateSize(m_InputBuf.GetSize() + src_size);
+ temp_buf.AppendBlock(m_InputBuf.GetBuffer(), m_InputBuf.GetSize());
+ m_InputBuf.Clear();
+ temp_buf.AppendBlock(src_buf, src_size);
+ jpeg_src_buf = temp_buf.GetBuffer();
+ jpeg_src_size = temp_buf.GetSize();
+ } else {
+ jpeg_src_buf = src_buf;
+ jpeg_src_size = src_size;
+ }
+ CPDF_ModuleMgr::Get()->GetJpegModule()->Input(m_pContext, jpeg_src_buf,
+ jpeg_src_size);
+ if (!m_bGotHeader) {
+ int ret = CPDF_ModuleMgr::Get()->GetJpegModule()->ReadHeader(
+ m_pContext, &m_Width, &m_Height, &m_nComps);
+ int left_size =
+ CPDF_ModuleMgr::Get()->GetJpegModule()->GetAvailInput(m_pContext);
+ if (ret == 1) {
+ ReportEOF(left_size);
+ return;
+ }
+ if (ret == 2) {
+ m_InputBuf.AppendBlock(jpeg_src_buf + jpeg_src_size - left_size,
+ left_size);
+ return;
+ }
+ CPDF_ModuleMgr::Get()->GetJpegModule()->StartScanline(m_pContext, 1);
+ m_bGotHeader = TRUE;
+ m_Pitch = m_Width * m_nComps;
+ }
+ if (m_pScanline == NULL) {
+ m_pScanline = FX_Alloc(uint8_t, m_Pitch + 4);
+ }
+ while (1) {
+ if (!CPDF_ModuleMgr::Get()->GetJpegModule()->ReadScanline(m_pContext,
+ m_pScanline)) {
+ int left_size =
+ CPDF_ModuleMgr::Get()->GetJpegModule()->GetAvailInput(m_pContext);
+ m_InputBuf.AppendBlock(jpeg_src_buf + jpeg_src_size - left_size,
+ left_size);
+ break;
+ }
+ dest_buf.AppendBlock(m_pScanline, m_Pitch);
+ m_iLine++;
+ if (m_iLine == m_Height) {
+ ReportEOF(
+ CPDF_ModuleMgr::Get()->GetJpegModule()->GetAvailInput(m_pContext));
+ return;
+ }
+ }
+}
+CPDF_FaxFilter::CPDF_FaxFilter() {
+ m_Encoding = 0;
+ m_bEndOfLine = FALSE;
+ m_bByteAlign = FALSE;
+ m_bBlack = FALSE;
+ m_nRows = 0;
+ m_nColumns = 0;
+ m_Pitch = 0;
+ m_pScanlineBuf = NULL;
+ m_pRefBuf = NULL;
+ m_iRow = 0;
+ m_InputBitPos = 0;
+}
+CPDF_FaxFilter::~CPDF_FaxFilter() {
+ if (m_pScanlineBuf) {
+ FX_Free(m_pScanlineBuf);
+ }
+ if (m_pRefBuf) {
+ FX_Free(m_pRefBuf);
+ }
+}
+FX_BOOL CPDF_FaxFilter::Initialize(int Encoding,
+ int bEndOfLine,
+ int bByteAlign,
+ int bBlack,
+ int nRows,
+ int nColumns) {
+ m_Encoding = Encoding;
+ m_bEndOfLine = bEndOfLine;
+ m_bByteAlign = bByteAlign;
+ m_bBlack = bBlack;
+ m_nRows = nRows;
+ m_nColumns = nColumns;
+ m_Pitch = (m_nColumns + 7) / 8;
+ m_pScanlineBuf = FX_Alloc(uint8_t, m_Pitch);
+ m_pRefBuf = FX_Alloc(uint8_t, m_Pitch);
+ FXSYS_memset(m_pScanlineBuf, 0xff, m_Pitch);
+ FXSYS_memset(m_pRefBuf, 0xff, m_Pitch);
+ m_iRow = 0;
+ m_InputBitPos = 0;
+ return TRUE;
+}
+void CPDF_FaxFilter::v_FilterIn(const uint8_t* src_buf,
+ FX_DWORD src_size,
+ CFX_BinaryBuf& dest_buf) {
+ const uint8_t* fax_src_buf;
+ FX_DWORD fax_src_size;
+ CFX_BinaryBuf temp_buf;
+ int bitpos;
+ if (m_InputBuf.GetSize()) {
+ temp_buf.EstimateSize(m_InputBuf.GetSize() + src_size);
+ temp_buf.AppendBlock(m_InputBuf.GetBuffer(), m_InputBuf.GetSize());
+ m_InputBuf.Clear();
+ temp_buf.AppendBlock(src_buf, src_size);
+ fax_src_buf = temp_buf.GetBuffer();
+ fax_src_size = temp_buf.GetSize();
+ bitpos = m_InputBitPos;
+ } else {
+ fax_src_buf = src_buf;
+ fax_src_size = src_size;
+ bitpos = 0;
+ }
+ ProcessData(fax_src_buf, fax_src_size, bitpos, FALSE, dest_buf);
+ int left_bits = fax_src_size * 8 - bitpos;
+ m_InputBuf.AppendBlock(fax_src_buf + bitpos / 8, (left_bits + 7) / 8);
+ m_InputBitPos = bitpos % 8;
+}
+void CPDF_FaxFilter::v_FilterFinish(CFX_BinaryBuf& dest_buf) {
+ ProcessData(m_InputBuf.GetBuffer(), m_InputBuf.GetSize(), m_InputBitPos, TRUE,
+ dest_buf);
}
FX_BOOL _FaxSkipEOL(const uint8_t* src_buf, int bitsize, int& bitpos);
-FX_BOOL _FaxG4GetRow(const uint8_t* src_buf, int bitsize, int& bitpos, uint8_t* dest_buf, const uint8_t* ref_buf, int columns);
-FX_BOOL _FaxGet1DLine(const uint8_t* src_buf, int bitsize, int& bitpos, uint8_t* dest_buf, int columns);
-void CPDF_FaxFilter::ProcessData(const uint8_t* src_buf, FX_DWORD src_size, int& bitpos, FX_BOOL bFinish,
- CFX_BinaryBuf& dest_buf)
-{
- int bitsize = src_size * 8;
- while (1) {
- if ((bitsize < bitpos + 256) && !bFinish) {
- return;
- }
- int start_bitpos = bitpos;
- FXSYS_memset(m_pScanlineBuf, 0xff, m_Pitch);
- if (!ReadLine(src_buf, bitsize, bitpos)) {
- bitpos = start_bitpos;
- return;
- }
- if (m_Encoding) {
- FXSYS_memcpy(m_pRefBuf, m_pScanlineBuf, m_Pitch);
- }
- if (m_bBlack) {
- for (int i = 0; i < m_Pitch; i ++) {
- m_pScanlineBuf[i] = ~m_pScanlineBuf[i];
- }
- }
- dest_buf.AppendBlock(m_pScanlineBuf, m_Pitch);
- m_iRow ++;
- if (m_iRow == m_nRows) {
- ReportEOF(src_size - (bitpos + 7) / 8);
- return;
- }
- }
-}
-FX_BOOL CPDF_FaxFilter::ReadLine(const uint8_t* src_buf, int bitsize, int& bitpos)
-{
- if (!_FaxSkipEOL(src_buf, bitsize, bitpos)) {
- return FALSE;
- }
- FX_BOOL ret;
- if (m_Encoding < 0) {
- ret = _FaxG4GetRow(src_buf, bitsize, bitpos, m_pScanlineBuf, m_pRefBuf, m_nColumns);
- } else if (m_Encoding == 0) {
- ret = _FaxGet1DLine(src_buf, bitsize, bitpos, m_pScanlineBuf, m_nColumns);
+FX_BOOL _FaxG4GetRow(const uint8_t* src_buf,
+ int bitsize,
+ int& bitpos,
+ uint8_t* dest_buf,
+ const uint8_t* ref_buf,
+ int columns);
+FX_BOOL _FaxGet1DLine(const uint8_t* src_buf,
+ int bitsize,
+ int& bitpos,
+ uint8_t* dest_buf,
+ int columns);
+void CPDF_FaxFilter::ProcessData(const uint8_t* src_buf,
+ FX_DWORD src_size,
+ int& bitpos,
+ FX_BOOL bFinish,
+ CFX_BinaryBuf& dest_buf) {
+ int bitsize = src_size * 8;
+ while (1) {
+ if ((bitsize < bitpos + 256) && !bFinish) {
+ return;
+ }
+ int start_bitpos = bitpos;
+ FXSYS_memset(m_pScanlineBuf, 0xff, m_Pitch);
+ if (!ReadLine(src_buf, bitsize, bitpos)) {
+ bitpos = start_bitpos;
+ return;
+ }
+ if (m_Encoding) {
+ FXSYS_memcpy(m_pRefBuf, m_pScanlineBuf, m_Pitch);
+ }
+ if (m_bBlack) {
+ for (int i = 0; i < m_Pitch; i++) {
+ m_pScanlineBuf[i] = ~m_pScanlineBuf[i];
+ }
+ }
+ dest_buf.AppendBlock(m_pScanlineBuf, m_Pitch);
+ m_iRow++;
+ if (m_iRow == m_nRows) {
+ ReportEOF(src_size - (bitpos + 7) / 8);
+ return;
+ }
+ }
+}
+FX_BOOL CPDF_FaxFilter::ReadLine(const uint8_t* src_buf,
+ int bitsize,
+ int& bitpos) {
+ if (!_FaxSkipEOL(src_buf, bitsize, bitpos)) {
+ return FALSE;
+ }
+ FX_BOOL ret;
+ if (m_Encoding < 0) {
+ ret = _FaxG4GetRow(src_buf, bitsize, bitpos, m_pScanlineBuf, m_pRefBuf,
+ m_nColumns);
+ } else if (m_Encoding == 0) {
+ ret = _FaxGet1DLine(src_buf, bitsize, bitpos, m_pScanlineBuf, m_nColumns);
+ } else {
+ if (bitpos == bitsize) {
+ return FALSE;
+ }
+ FX_BOOL bNext1D = src_buf[bitpos / 8] & (1 << (7 - bitpos % 8));
+ bitpos++;
+ if (bNext1D) {
+ ret = _FaxGet1DLine(src_buf, bitsize, bitpos, m_pScanlineBuf, m_nColumns);
} else {
- if (bitpos == bitsize) {
- return FALSE;
- }
- FX_BOOL bNext1D = src_buf[bitpos / 8] & (1 << (7 - bitpos % 8));
- bitpos ++;
- if (bNext1D) {
- ret = _FaxGet1DLine(src_buf, bitsize, bitpos, m_pScanlineBuf, m_nColumns);
- } else {
- ret = _FaxG4GetRow(src_buf, bitsize, bitpos, m_pScanlineBuf, m_pRefBuf, m_nColumns);
- }
- }
- if (!ret) {
- return FALSE;
- }
- if (m_bEndOfLine)
- if (!_FaxSkipEOL(src_buf, bitsize, bitpos)) {
- return FALSE;
- }
- if (m_bByteAlign) {
- bitpos = (bitpos + 7) / 8 * 8;
+ ret = _FaxG4GetRow(src_buf, bitsize, bitpos, m_pScanlineBuf, m_pRefBuf,
+ m_nColumns);
+ }
+ }
+ if (!ret) {
+ return FALSE;
+ }
+ if (m_bEndOfLine)
+ if (!_FaxSkipEOL(src_buf, bitsize, bitpos)) {
+ return FALSE;
}
- return TRUE;
+ if (m_bByteAlign) {
+ bitpos = (bitpos + 7) / 8 * 8;
+ }
+ return TRUE;
}
diff --git a/core/src/fpdfapi/fpdf_parser/fpdf_parser_objects.cpp b/core/src/fpdfapi/fpdf_parser/fpdf_parser_objects.cpp
index c7d1dece25..932793218d 100644
--- a/core/src/fpdfapi/fpdf_parser/fpdf_parser_objects.cpp
+++ b/core/src/fpdfapi/fpdf_parser/fpdf_parser_objects.cpp
@@ -7,1282 +7,1245 @@
#include "../../../include/fpdfapi/fpdf_parser.h"
#include "../../../include/fxcrt/fx_string.h"
-//static
+// static
int CPDF_Object::s_nCurRefDepth = 0;
-void CPDF_Object::Release()
-{
- if (m_ObjNum) {
- return;
- }
- Destroy();
-}
-void CPDF_Object::Destroy()
-{
- switch (m_Type) {
- case PDFOBJ_STRING:
- delete (CPDF_String*)this;
- break;
- case PDFOBJ_NAME:
- delete (CPDF_Name*)this;
- break;
- case PDFOBJ_ARRAY:
- delete (CPDF_Array*)this;
- break;
- case PDFOBJ_DICTIONARY:
- delete (CPDF_Dictionary*)this;
- break;
- case PDFOBJ_STREAM:
- delete (CPDF_Stream*)this;
- break;
- default:
- delete this;
- }
-}
-CFX_ByteString CPDF_Object::GetString() const
-{
- switch (m_Type) {
- case PDFOBJ_BOOLEAN:
- return ((CPDF_Boolean*)this)->m_bValue ? "true" : "false";
- case PDFOBJ_NUMBER:
- return ((CPDF_Number*)this)->GetString();
- case PDFOBJ_STRING:
- return ((CPDF_String*)this)->m_String;
- case PDFOBJ_NAME:
- return ((CPDF_Name*)this)->m_Name;
- case PDFOBJ_REFERENCE: {
- CPDF_Reference* pRef = (CPDF_Reference*)(void*)this;
- if (pRef->m_pObjList == NULL) {
- break;
- }
- CPDF_Object* pObj = pRef->m_pObjList->GetIndirectObject(pRef->m_RefObjNum);
- if (pObj == NULL) {
- return CFX_ByteString();
- }
- return pObj->GetString();
- }
- }
- return CFX_ByteString();
-}
-CFX_ByteStringC CPDF_Object::GetConstString() const
-{
- switch (m_Type) {
- case PDFOBJ_STRING:
- return CFX_ByteStringC((const uint8_t*)((CPDF_String*)this)->m_String, ((CPDF_String*)this)->m_String.GetLength());
- case PDFOBJ_NAME:
- return CFX_ByteStringC((const uint8_t*)((CPDF_Name*)this)->m_Name, ((CPDF_Name*)this)->m_Name.GetLength());
- case PDFOBJ_REFERENCE: {
- CPDF_Reference* pRef = (CPDF_Reference*)(void*)this;
- if (pRef->m_pObjList == NULL) {
- break;
- }
- CPDF_Object* pObj = pRef->m_pObjList->GetIndirectObject(pRef->m_RefObjNum);
- if (pObj == NULL) {
- return CFX_ByteStringC();
- }
- return pObj->GetConstString();
- }
- }
- return CFX_ByteStringC();
-}
-FX_FLOAT CPDF_Object::GetNumber() const
-{
- switch (m_Type) {
- case PDFOBJ_NUMBER:
- return ((CPDF_Number*)this)->GetNumber();
- case PDFOBJ_REFERENCE: {
- CPDF_Reference* pRef = (CPDF_Reference*)(void*)this;
- if (pRef->m_pObjList == NULL) {
- break;
- }
- CPDF_Object* pObj = pRef->m_pObjList->GetIndirectObject(pRef->m_RefObjNum);
- if (pObj == NULL) {
- return 0;
- }
- return pObj->GetNumber();
- }
+void CPDF_Object::Release() {
+ if (m_ObjNum) {
+ return;
+ }
+ Destroy();
+}
+void CPDF_Object::Destroy() {
+ switch (m_Type) {
+ case PDFOBJ_STRING:
+ delete (CPDF_String*)this;
+ break;
+ case PDFOBJ_NAME:
+ delete (CPDF_Name*)this;
+ break;
+ case PDFOBJ_ARRAY:
+ delete (CPDF_Array*)this;
+ break;
+ case PDFOBJ_DICTIONARY:
+ delete (CPDF_Dictionary*)this;
+ break;
+ case PDFOBJ_STREAM:
+ delete (CPDF_Stream*)this;
+ break;
+ default:
+ delete this;
+ }
+}
+CFX_ByteString CPDF_Object::GetString() const {
+ switch (m_Type) {
+ case PDFOBJ_BOOLEAN:
+ return ((CPDF_Boolean*)this)->m_bValue ? "true" : "false";
+ case PDFOBJ_NUMBER:
+ return ((CPDF_Number*)this)->GetString();
+ case PDFOBJ_STRING:
+ return ((CPDF_String*)this)->m_String;
+ case PDFOBJ_NAME:
+ return ((CPDF_Name*)this)->m_Name;
+ case PDFOBJ_REFERENCE: {
+ CPDF_Reference* pRef = (CPDF_Reference*)(void*)this;
+ if (pRef->m_pObjList == NULL) {
+ break;
+ }
+ CPDF_Object* pObj =
+ pRef->m_pObjList->GetIndirectObject(pRef->m_RefObjNum);
+ if (pObj == NULL) {
+ return CFX_ByteString();
+ }
+ return pObj->GetString();
+ }
+ }
+ return CFX_ByteString();
+}
+CFX_ByteStringC CPDF_Object::GetConstString() const {
+ switch (m_Type) {
+ case PDFOBJ_STRING:
+ return CFX_ByteStringC((const uint8_t*)((CPDF_String*)this)->m_String,
+ ((CPDF_String*)this)->m_String.GetLength());
+ case PDFOBJ_NAME:
+ return CFX_ByteStringC((const uint8_t*)((CPDF_Name*)this)->m_Name,
+ ((CPDF_Name*)this)->m_Name.GetLength());
+ case PDFOBJ_REFERENCE: {
+ CPDF_Reference* pRef = (CPDF_Reference*)(void*)this;
+ if (pRef->m_pObjList == NULL) {
+ break;
+ }
+ CPDF_Object* pObj =
+ pRef->m_pObjList->GetIndirectObject(pRef->m_RefObjNum);
+ if (pObj == NULL) {
+ return CFX_ByteStringC();
+ }
+ return pObj->GetConstString();
+ }
+ }
+ return CFX_ByteStringC();
+}
+FX_FLOAT CPDF_Object::GetNumber() const {
+ switch (m_Type) {
+ case PDFOBJ_NUMBER:
+ return ((CPDF_Number*)this)->GetNumber();
+ case PDFOBJ_REFERENCE: {
+ CPDF_Reference* pRef = (CPDF_Reference*)(void*)this;
+ if (pRef->m_pObjList == NULL) {
+ break;
+ }
+ CPDF_Object* pObj =
+ pRef->m_pObjList->GetIndirectObject(pRef->m_RefObjNum);
+ if (pObj == NULL) {
+ return 0;
+ }
+ return pObj->GetNumber();
}
- return 0;
+ }
+ return 0;
}
-FX_FLOAT CPDF_Object::GetNumber16() const
-{
- return GetNumber();
+FX_FLOAT CPDF_Object::GetNumber16() const {
+ return GetNumber();
}
-int CPDF_Object::GetInteger() const
-{
- CFX_AutoRestorer<int> restorer(&s_nCurRefDepth);
- if (++s_nCurRefDepth > OBJECT_REF_MAX_DEPTH) {
- return 0;
- }
- switch (m_Type) {
- case PDFOBJ_BOOLEAN:
- return ((CPDF_Boolean*)this)->m_bValue;
- case PDFOBJ_NUMBER:
- return ((CPDF_Number*)this)->GetInteger();
- case PDFOBJ_REFERENCE: {
- CPDF_Reference* pRef = (CPDF_Reference*)(void*)this;
- PARSE_CONTEXT context;
- FXSYS_memset(&context, 0, sizeof(PARSE_CONTEXT));
- if (pRef->m_pObjList == NULL) {
- return 0;
- }
- CPDF_Object* pObj = pRef->m_pObjList->GetIndirectObject(pRef->m_RefObjNum, &context);
- if (pObj == NULL) {
- return 0;
- }
- return pObj->GetInteger();
- }
- }
+int CPDF_Object::GetInteger() const {
+ CFX_AutoRestorer<int> restorer(&s_nCurRefDepth);
+ if (++s_nCurRefDepth > OBJECT_REF_MAX_DEPTH) {
return 0;
-}
-CPDF_Dictionary* CPDF_Object::GetDict() const
-{
- switch (m_Type) {
- case PDFOBJ_DICTIONARY:
- return (CPDF_Dictionary*)this;
- case PDFOBJ_STREAM:
- return ((CPDF_Stream*)this)->GetDict();
- case PDFOBJ_REFERENCE: {
- CPDF_Reference* pRef = (CPDF_Reference*)this;
- if (pRef->m_pObjList == NULL) {
- break;
- }
- CPDF_Object* pObj = pRef->m_pObjList->GetIndirectObject(pRef->m_RefObjNum);
- if (pObj == NULL) {
- return NULL;
- }
- return pObj->GetDict();
- }
+ }
+ switch (m_Type) {
+ case PDFOBJ_BOOLEAN:
+ return ((CPDF_Boolean*)this)->m_bValue;
+ case PDFOBJ_NUMBER:
+ return ((CPDF_Number*)this)->GetInteger();
+ case PDFOBJ_REFERENCE: {
+ CPDF_Reference* pRef = (CPDF_Reference*)(void*)this;
+ PARSE_CONTEXT context;
+ FXSYS_memset(&context, 0, sizeof(PARSE_CONTEXT));
+ if (pRef->m_pObjList == NULL) {
+ return 0;
+ }
+ CPDF_Object* pObj =
+ pRef->m_pObjList->GetIndirectObject(pRef->m_RefObjNum, &context);
+ if (pObj == NULL) {
+ return 0;
+ }
+ return pObj->GetInteger();
+ }
+ }
+ return 0;
+}
+CPDF_Dictionary* CPDF_Object::GetDict() const {
+ switch (m_Type) {
+ case PDFOBJ_DICTIONARY:
+ return (CPDF_Dictionary*)this;
+ case PDFOBJ_STREAM:
+ return ((CPDF_Stream*)this)->GetDict();
+ case PDFOBJ_REFERENCE: {
+ CPDF_Reference* pRef = (CPDF_Reference*)this;
+ if (pRef->m_pObjList == NULL) {
+ break;
+ }
+ CPDF_Object* pObj =
+ pRef->m_pObjList->GetIndirectObject(pRef->m_RefObjNum);
+ if (pObj == NULL) {
+ return NULL;
+ }
+ return pObj->GetDict();
}
- return NULL;
+ }
+ return NULL;
}
-CPDF_Array* CPDF_Object::GetArray() const
-{
- if (m_Type == PDFOBJ_ARRAY)
- return (CPDF_Array*)this;
+CPDF_Array* CPDF_Object::GetArray() const {
+ if (m_Type == PDFOBJ_ARRAY)
+ return (CPDF_Array*)this;
- return NULL;
-}
-void CPDF_Object::SetString(const CFX_ByteString& str)
-{
- ASSERT(this != NULL);
- switch (m_Type) {
- case PDFOBJ_BOOLEAN:
- ((CPDF_Boolean*)this)->m_bValue = str == FX_BSTRC("true") ? 1 : 0;
- return;
- case PDFOBJ_NUMBER:
- ((CPDF_Number*)this)->SetString(str);
- return;
- case PDFOBJ_STRING:
- ((CPDF_String*)this)->m_String = str;
- return;
- case PDFOBJ_NAME:
- ((CPDF_Name*)this)->m_Name = str;
- return;
- }
- ASSERT(FALSE);
-}
-int CPDF_Object::GetDirectType() const
-{
- if (m_Type != PDFOBJ_REFERENCE) {
- return m_Type;
- }
- CPDF_Reference* pRef = (CPDF_Reference*)this;
- return pRef->m_pObjList->GetIndirectType(pRef->m_RefObjNum);
-}
-FX_BOOL CPDF_Object::IsIdentical(CPDF_Object* pOther) const
-{
- if (this == pOther) {
- return TRUE;
- }
- if (pOther == NULL) {
- return FALSE;
- }
- if (pOther->m_Type != m_Type) {
- if (m_Type == PDFOBJ_REFERENCE && GetDirect()) {
- return GetDirect()->IsIdentical(pOther);
- }
- if (pOther->m_Type == PDFOBJ_REFERENCE) {
- return IsIdentical(pOther->GetDirect());
- }
- return FALSE;
- }
- switch (m_Type) {
- case PDFOBJ_BOOLEAN:
- return (((CPDF_Boolean*)this)->Identical((CPDF_Boolean*)pOther));
- case PDFOBJ_NUMBER:
- return (((CPDF_Number*)this)->Identical((CPDF_Number*)pOther));
- case PDFOBJ_STRING:
- return (((CPDF_String*)this)->Identical((CPDF_String*)pOther));
- case PDFOBJ_NAME:
- return (((CPDF_Name*)this)->Identical((CPDF_Name*)pOther));
- case PDFOBJ_ARRAY:
- return (((CPDF_Array*)this)->Identical((CPDF_Array*)pOther));
- case PDFOBJ_DICTIONARY:
- return (((CPDF_Dictionary*)this)->Identical((CPDF_Dictionary*)pOther));
- case PDFOBJ_NULL:
- return TRUE;
- case PDFOBJ_STREAM:
- return (((CPDF_Stream*)this)->Identical((CPDF_Stream*)pOther));
- case PDFOBJ_REFERENCE:
- return (((CPDF_Reference*)this)->Identical((CPDF_Reference*)pOther));
- }
+ return NULL;
+}
+void CPDF_Object::SetString(const CFX_ByteString& str) {
+ ASSERT(this != NULL);
+ switch (m_Type) {
+ case PDFOBJ_BOOLEAN:
+ ((CPDF_Boolean*)this)->m_bValue = str == FX_BSTRC("true") ? 1 : 0;
+ return;
+ case PDFOBJ_NUMBER:
+ ((CPDF_Number*)this)->SetString(str);
+ return;
+ case PDFOBJ_STRING:
+ ((CPDF_String*)this)->m_String = str;
+ return;
+ case PDFOBJ_NAME:
+ ((CPDF_Name*)this)->m_Name = str;
+ return;
+ }
+ ASSERT(FALSE);
+}
+int CPDF_Object::GetDirectType() const {
+ if (m_Type != PDFOBJ_REFERENCE) {
+ return m_Type;
+ }
+ CPDF_Reference* pRef = (CPDF_Reference*)this;
+ return pRef->m_pObjList->GetIndirectType(pRef->m_RefObjNum);
+}
+FX_BOOL CPDF_Object::IsIdentical(CPDF_Object* pOther) const {
+ if (this == pOther) {
+ return TRUE;
+ }
+ if (pOther == NULL) {
return FALSE;
-}
-CPDF_Object* CPDF_Object::GetDirect() const
-{
- if (m_Type != PDFOBJ_REFERENCE) {
- return (CPDF_Object*)this;
+ }
+ if (pOther->m_Type != m_Type) {
+ if (m_Type == PDFOBJ_REFERENCE && GetDirect()) {
+ return GetDirect()->IsIdentical(pOther);
}
- CPDF_Reference* pRef = (CPDF_Reference*)(void*)this;
- if (pRef->m_pObjList == NULL) {
- return NULL;
- }
- return pRef->m_pObjList->GetIndirectObject(pRef->m_RefObjNum);
-}
-CPDF_Object* CPDF_Object::Clone(FX_BOOL bDirect) const
-{
- CFX_MapPtrToPtr visited;
- return CloneInternal(bDirect, &visited);
-}
-CPDF_Object* CPDF_Object::CloneInternal(FX_BOOL bDirect, CFX_MapPtrToPtr* visited) const
-{
- switch (m_Type) {
- case PDFOBJ_BOOLEAN:
- return new CPDF_Boolean(((CPDF_Boolean*)this)->m_bValue);
- case PDFOBJ_NUMBER:
- return new CPDF_Number(((CPDF_Number*)this)->m_bInteger, &((CPDF_Number*)this)->m_Integer);
- case PDFOBJ_STRING:
- return new CPDF_String(((CPDF_String*)this)->m_String, ((CPDF_String*)this)->IsHex());
- case PDFOBJ_NAME:
- return new CPDF_Name(((CPDF_Name*)this)->m_Name);
- case PDFOBJ_ARRAY: {
- CPDF_Array* pCopy = new CPDF_Array();
- CPDF_Array* pThis = (CPDF_Array*)this;
- int n = pThis->GetCount();
- for (int i = 0; i < n; i ++) {
- CPDF_Object* value = (CPDF_Object*)pThis->m_Objects.GetAt(i);
- pCopy->m_Objects.Add(value->CloneInternal(bDirect, visited));
- }
- return pCopy;
- }
- case PDFOBJ_DICTIONARY: {
- CPDF_Dictionary* pCopy = new CPDF_Dictionary();
- CPDF_Dictionary* pThis = (CPDF_Dictionary*)this;
- FX_POSITION pos = pThis->m_Map.GetStartPosition();
- while (pos) {
- CFX_ByteString key;
- CPDF_Object* value;
- pThis->m_Map.GetNextAssoc(pos, key, (void*&)value);
- pCopy->m_Map.SetAt(key, value->CloneInternal(bDirect, visited));
- }
- return pCopy;
- }
- case PDFOBJ_NULL: {
- return new CPDF_Null;
- }
- case PDFOBJ_STREAM: {
- CPDF_Stream* pThis = (CPDF_Stream*)this;
- CPDF_StreamAcc acc;
- acc.LoadAllData(pThis, TRUE);
- FX_DWORD streamSize = acc.GetSize();
- CPDF_Dictionary* pDict = pThis->GetDict();
- if (pDict)
- pDict = (CPDF_Dictionary*)((CPDF_Object*)pDict)->CloneInternal(bDirect, visited);
- return new CPDF_Stream(acc.DetachData(), streamSize, pDict);
- }
- case PDFOBJ_REFERENCE: {
- CPDF_Reference* pRef = (CPDF_Reference*)this;
- FX_DWORD obj_num = pRef->m_RefObjNum;
- if (bDirect && !visited->GetValueAt((void*)(uintptr_t)obj_num)) {
- visited->SetAt((void*)(uintptr_t)obj_num, (void*)1);
- if (!pRef->GetDirect())
- return nullptr;
-
- return pRef->GetDirect()->CloneInternal(TRUE, visited);
- }
- return new CPDF_Reference(pRef->m_pObjList, obj_num);
- }
+ if (pOther->m_Type == PDFOBJ_REFERENCE) {
+ return IsIdentical(pOther->GetDirect());
}
+ return FALSE;
+ }
+ switch (m_Type) {
+ case PDFOBJ_BOOLEAN:
+ return (((CPDF_Boolean*)this)->Identical((CPDF_Boolean*)pOther));
+ case PDFOBJ_NUMBER:
+ return (((CPDF_Number*)this)->Identical((CPDF_Number*)pOther));
+ case PDFOBJ_STRING:
+ return (((CPDF_String*)this)->Identical((CPDF_String*)pOther));
+ case PDFOBJ_NAME:
+ return (((CPDF_Name*)this)->Identical((CPDF_Name*)pOther));
+ case PDFOBJ_ARRAY:
+ return (((CPDF_Array*)this)->Identical((CPDF_Array*)pOther));
+ case PDFOBJ_DICTIONARY:
+ return (((CPDF_Dictionary*)this)->Identical((CPDF_Dictionary*)pOther));
+ case PDFOBJ_NULL:
+ return TRUE;
+ case PDFOBJ_STREAM:
+ return (((CPDF_Stream*)this)->Identical((CPDF_Stream*)pOther));
+ case PDFOBJ_REFERENCE:
+ return (((CPDF_Reference*)this)->Identical((CPDF_Reference*)pOther));
+ }
+ return FALSE;
+}
+CPDF_Object* CPDF_Object::GetDirect() const {
+ if (m_Type != PDFOBJ_REFERENCE) {
+ return (CPDF_Object*)this;
+ }
+ CPDF_Reference* pRef = (CPDF_Reference*)(void*)this;
+ if (pRef->m_pObjList == NULL) {
return NULL;
-}
-CPDF_Object* CPDF_Object::CloneRef(CPDF_IndirectObjects* pDoc) const
-{
- if (m_ObjNum) {
- return new CPDF_Reference(pDoc, m_ObjNum);
- }
- return Clone();
-}
-CFX_WideString CPDF_Object::GetUnicodeText(CFX_CharMap* pCharMap) const
-{
- if (m_Type == PDFOBJ_STRING) {
- return PDF_DecodeText(((CPDF_String*)this)->m_String, pCharMap);
- }
- if (m_Type == PDFOBJ_STREAM) {
- CPDF_StreamAcc stream;
- stream.LoadAllData((CPDF_Stream*)this, FALSE);
- CFX_WideString result = PDF_DecodeText(stream.GetData(), stream.GetSize(), pCharMap);
- return result;
- }
- if (m_Type == PDFOBJ_NAME) {
- return PDF_DecodeText(((CPDF_Name*)this)->m_Name, pCharMap);
- }
- return CFX_WideString();
-}
-void CPDF_Object::SetUnicodeText(const FX_WCHAR* pUnicodes, int len)
-{
- if (m_Type == PDFOBJ_STRING) {
- ((CPDF_String*)this)->m_String = PDF_EncodeText(pUnicodes, len);
- } else if (m_Type == PDFOBJ_STREAM) {
- CFX_ByteString result = PDF_EncodeText(pUnicodes, len);
- ((CPDF_Stream*)this)->SetData((uint8_t*)result.c_str(), result.GetLength(), FALSE, FALSE);
- }
+ }
+ return pRef->m_pObjList->GetIndirectObject(pRef->m_RefObjNum);
+}
+CPDF_Object* CPDF_Object::Clone(FX_BOOL bDirect) const {
+ CFX_MapPtrToPtr visited;
+ return CloneInternal(bDirect, &visited);
+}
+CPDF_Object* CPDF_Object::CloneInternal(FX_BOOL bDirect,
+ CFX_MapPtrToPtr* visited) const {
+ switch (m_Type) {
+ case PDFOBJ_BOOLEAN:
+ return new CPDF_Boolean(((CPDF_Boolean*)this)->m_bValue);
+ case PDFOBJ_NUMBER:
+ return new CPDF_Number(((CPDF_Number*)this)->m_bInteger,
+ &((CPDF_Number*)this)->m_Integer);
+ case PDFOBJ_STRING:
+ return new CPDF_String(((CPDF_String*)this)->m_String,
+ ((CPDF_String*)this)->IsHex());
+ case PDFOBJ_NAME:
+ return new CPDF_Name(((CPDF_Name*)this)->m_Name);
+ case PDFOBJ_ARRAY: {
+ CPDF_Array* pCopy = new CPDF_Array();
+ CPDF_Array* pThis = (CPDF_Array*)this;
+ int n = pThis->GetCount();
+ for (int i = 0; i < n; i++) {
+ CPDF_Object* value = (CPDF_Object*)pThis->m_Objects.GetAt(i);
+ pCopy->m_Objects.Add(value->CloneInternal(bDirect, visited));
+ }
+ return pCopy;
+ }
+ case PDFOBJ_DICTIONARY: {
+ CPDF_Dictionary* pCopy = new CPDF_Dictionary();
+ CPDF_Dictionary* pThis = (CPDF_Dictionary*)this;
+ FX_POSITION pos = pThis->m_Map.GetStartPosition();
+ while (pos) {
+ CFX_ByteString key;
+ CPDF_Object* value;
+ pThis->m_Map.GetNextAssoc(pos, key, (void*&)value);
+ pCopy->m_Map.SetAt(key, value->CloneInternal(bDirect, visited));
+ }
+ return pCopy;
+ }
+ case PDFOBJ_NULL: {
+ return new CPDF_Null;
+ }
+ case PDFOBJ_STREAM: {
+ CPDF_Stream* pThis = (CPDF_Stream*)this;
+ CPDF_StreamAcc acc;
+ acc.LoadAllData(pThis, TRUE);
+ FX_DWORD streamSize = acc.GetSize();
+ CPDF_Dictionary* pDict = pThis->GetDict();
+ if (pDict)
+ pDict = (CPDF_Dictionary*)((CPDF_Object*)pDict)
+ ->CloneInternal(bDirect, visited);
+ return new CPDF_Stream(acc.DetachData(), streamSize, pDict);
+ }
+ case PDFOBJ_REFERENCE: {
+ CPDF_Reference* pRef = (CPDF_Reference*)this;
+ FX_DWORD obj_num = pRef->m_RefObjNum;
+ if (bDirect && !visited->GetValueAt((void*)(uintptr_t)obj_num)) {
+ visited->SetAt((void*)(uintptr_t)obj_num, (void*)1);
+ if (!pRef->GetDirect())
+ return nullptr;
+
+ return pRef->GetDirect()->CloneInternal(TRUE, visited);
+ }
+ return new CPDF_Reference(pRef->m_pObjList, obj_num);
+ }
+ }
+ return NULL;
+}
+CPDF_Object* CPDF_Object::CloneRef(CPDF_IndirectObjects* pDoc) const {
+ if (m_ObjNum) {
+ return new CPDF_Reference(pDoc, m_ObjNum);
+ }
+ return Clone();
+}
+CFX_WideString CPDF_Object::GetUnicodeText(CFX_CharMap* pCharMap) const {
+ if (m_Type == PDFOBJ_STRING) {
+ return PDF_DecodeText(((CPDF_String*)this)->m_String, pCharMap);
+ }
+ if (m_Type == PDFOBJ_STREAM) {
+ CPDF_StreamAcc stream;
+ stream.LoadAllData((CPDF_Stream*)this, FALSE);
+ CFX_WideString result =
+ PDF_DecodeText(stream.GetData(), stream.GetSize(), pCharMap);
+ return result;
+ }
+ if (m_Type == PDFOBJ_NAME) {
+ return PDF_DecodeText(((CPDF_Name*)this)->m_Name, pCharMap);
+ }
+ return CFX_WideString();
+}
+void CPDF_Object::SetUnicodeText(const FX_WCHAR* pUnicodes, int len) {
+ if (m_Type == PDFOBJ_STRING) {
+ ((CPDF_String*)this)->m_String = PDF_EncodeText(pUnicodes, len);
+ } else if (m_Type == PDFOBJ_STREAM) {
+ CFX_ByteString result = PDF_EncodeText(pUnicodes, len);
+ ((CPDF_Stream*)this)
+ ->SetData((uint8_t*)result.c_str(), result.GetLength(), FALSE, FALSE);
+ }
}
CPDF_Number::CPDF_Number(int value)
- : CPDF_Object(PDFOBJ_NUMBER), m_bInteger(TRUE), m_Integer(value) {
-}
+ : CPDF_Object(PDFOBJ_NUMBER), m_bInteger(TRUE), m_Integer(value) {}
CPDF_Number::CPDF_Number(FX_FLOAT value)
- : CPDF_Object(PDFOBJ_NUMBER), m_bInteger(FALSE), m_Float(value) {
-}
+ : CPDF_Object(PDFOBJ_NUMBER), m_bInteger(FALSE), m_Float(value) {}
CPDF_Number::CPDF_Number(FX_BOOL bInteger, void* pData)
- : CPDF_Object(PDFOBJ_NUMBER), m_bInteger(bInteger), m_Integer(*(int*)pData) {
-}
+ : CPDF_Object(PDFOBJ_NUMBER),
+ m_bInteger(bInteger),
+ m_Integer(*(int*)pData) {}
-CPDF_Number::CPDF_Number(const CFX_ByteStringC& str) : CPDF_Object(PDFOBJ_NUMBER) {
- FX_atonum(str, m_bInteger, &m_Integer);
+CPDF_Number::CPDF_Number(const CFX_ByteStringC& str)
+ : CPDF_Object(PDFOBJ_NUMBER) {
+ FX_atonum(str, m_bInteger, &m_Integer);
}
-void CPDF_Number::SetString(const CFX_ByteStringC& str)
-{
- FX_atonum(str, m_bInteger, &m_Integer);
-}
-FX_BOOL CPDF_Number::Identical(CPDF_Number* pOther) const
-{
- return m_bInteger == pOther->m_bInteger && m_Integer == pOther->m_Integer;
-}
-CFX_ByteString CPDF_Number::GetString() const
-{
- return m_bInteger ? CFX_ByteString::FormatInteger(m_Integer, FXFORMAT_SIGNED) : CFX_ByteString::FormatFloat(m_Float);
-}
-void CPDF_Number::SetNumber(FX_FLOAT value)
-{
- m_bInteger = FALSE;
- m_Float = value;
-}
-CPDF_String::CPDF_String(const CFX_WideString& str) : CPDF_Object(PDFOBJ_STRING), m_bHex(FALSE) {
- m_String = PDF_EncodeText(str);
-}
-CPDF_Array::~CPDF_Array()
-{
- int size = m_Objects.GetSize();
- CPDF_Object** pList = (CPDF_Object**)m_Objects.GetData();
- for (int i = 0; i < size; i ++) {
- if (pList[i])
- pList[i]->Release();
- }
-}
-CFX_FloatRect CPDF_Array::GetRect()
-{
- CFX_FloatRect rect;
- if (m_Type != PDFOBJ_ARRAY || m_Objects.GetSize() != 4) {
- return rect;
- }
- rect.left = GetNumber(0);
- rect.bottom = GetNumber(1);
- rect.right = GetNumber(2);
- rect.top = GetNumber(3);
+void CPDF_Number::SetString(const CFX_ByteStringC& str) {
+ FX_atonum(str, m_bInteger, &m_Integer);
+}
+FX_BOOL CPDF_Number::Identical(CPDF_Number* pOther) const {
+ return m_bInteger == pOther->m_bInteger && m_Integer == pOther->m_Integer;
+}
+CFX_ByteString CPDF_Number::GetString() const {
+ return m_bInteger ? CFX_ByteString::FormatInteger(m_Integer, FXFORMAT_SIGNED)
+ : CFX_ByteString::FormatFloat(m_Float);
+}
+void CPDF_Number::SetNumber(FX_FLOAT value) {
+ m_bInteger = FALSE;
+ m_Float = value;
+}
+CPDF_String::CPDF_String(const CFX_WideString& str)
+ : CPDF_Object(PDFOBJ_STRING), m_bHex(FALSE) {
+ m_String = PDF_EncodeText(str);
+}
+CPDF_Array::~CPDF_Array() {
+ int size = m_Objects.GetSize();
+ CPDF_Object** pList = (CPDF_Object**)m_Objects.GetData();
+ for (int i = 0; i < size; i++) {
+ if (pList[i])
+ pList[i]->Release();
+ }
+}
+CFX_FloatRect CPDF_Array::GetRect() {
+ CFX_FloatRect rect;
+ if (m_Type != PDFOBJ_ARRAY || m_Objects.GetSize() != 4) {
return rect;
-}
-CFX_AffineMatrix CPDF_Array::GetMatrix()
-{
- CFX_AffineMatrix matrix;
- if (m_Type != PDFOBJ_ARRAY || m_Objects.GetSize() != 6) {
- return matrix;
- }
- matrix.Set(GetNumber(0), GetNumber(1), GetNumber(2), GetNumber(3), GetNumber(4), GetNumber(5));
+ }
+ rect.left = GetNumber(0);
+ rect.bottom = GetNumber(1);
+ rect.right = GetNumber(2);
+ rect.top = GetNumber(3);
+ return rect;
+}
+CFX_AffineMatrix CPDF_Array::GetMatrix() {
+ CFX_AffineMatrix matrix;
+ if (m_Type != PDFOBJ_ARRAY || m_Objects.GetSize() != 6) {
return matrix;
+ }
+ matrix.Set(GetNumber(0), GetNumber(1), GetNumber(2), GetNumber(3),
+ GetNumber(4), GetNumber(5));
+ return matrix;
}
-CPDF_Object* CPDF_Array::GetElement(FX_DWORD i) const
-{
- if (i >= (FX_DWORD)m_Objects.GetSize()) {
- return NULL;
- }
- return (CPDF_Object*)m_Objects.GetAt(i);
-}
-CPDF_Object* CPDF_Array::GetElementValue(FX_DWORD i) const
-{
- if (i >= (FX_DWORD)m_Objects.GetSize()) {
- return NULL;
- }
- return ((CPDF_Object*)m_Objects.GetAt(i))->GetDirect();
-}
-CFX_ByteString CPDF_Array::GetString(FX_DWORD i) const
-{
- if (i < (FX_DWORD)m_Objects.GetSize()) {
- CPDF_Object* p = (CPDF_Object*)m_Objects.GetAt(i);
- return p->GetString();
- }
- return CFX_ByteString();
-}
-CFX_ByteStringC CPDF_Array::GetConstString(FX_DWORD i) const
-{
- if (i < (FX_DWORD)m_Objects.GetSize()) {
- CPDF_Object* p = (CPDF_Object*)m_Objects.GetAt(i);
- return p->GetConstString();
- }
- return CFX_ByteStringC();
-}
-int CPDF_Array::GetInteger(FX_DWORD i) const
-{
- if (i >= (FX_DWORD)m_Objects.GetSize()) {
- return 0;
- }
- CPDF_Object* p = (CPDF_Object*)m_Objects.GetAt(i);
- return p->GetInteger();
-}
-FX_FLOAT CPDF_Array::GetNumber(FX_DWORD i) const
-{
- if (i >= (FX_DWORD)m_Objects.GetSize()) {
- return 0;
- }
- CPDF_Object* p = (CPDF_Object*)m_Objects.GetAt(i);
- return p->GetNumber();
-}
-CPDF_Dictionary* CPDF_Array::GetDict(FX_DWORD i) const
-{
- CPDF_Object* p = GetElementValue(i);
- if (!p) {
- return NULL;
- }
- if (p->GetType() == PDFOBJ_DICTIONARY) {
- return (CPDF_Dictionary*)p;
- }
- if (p->GetType() == PDFOBJ_STREAM) {
- return ((CPDF_Stream*)p)->GetDict();
- }
+CPDF_Object* CPDF_Array::GetElement(FX_DWORD i) const {
+ if (i >= (FX_DWORD)m_Objects.GetSize()) {
return NULL;
+ }
+ return (CPDF_Object*)m_Objects.GetAt(i);
}
-CPDF_Stream* CPDF_Array::GetStream(FX_DWORD i) const
-{
- CPDF_Object* p = GetElementValue(i);
- if (p == NULL || p->GetType() != PDFOBJ_STREAM) {
- return NULL;
- }
- return (CPDF_Stream*)p;
-}
-CPDF_Array* CPDF_Array::GetArray(FX_DWORD i) const
-{
- CPDF_Object* p = GetElementValue(i);
- if (p == NULL || p->GetType() != PDFOBJ_ARRAY) {
- return NULL;
- }
- return (CPDF_Array*)p;
+CPDF_Object* CPDF_Array::GetElementValue(FX_DWORD i) const {
+ if (i >= (FX_DWORD)m_Objects.GetSize()) {
+ return NULL;
+ }
+ return ((CPDF_Object*)m_Objects.GetAt(i))->GetDirect();
}
-void CPDF_Array::RemoveAt(FX_DWORD i)
-{
- ASSERT(m_Type == PDFOBJ_ARRAY);
- if (i >= (FX_DWORD)m_Objects.GetSize()) {
- return;
- }
+CFX_ByteString CPDF_Array::GetString(FX_DWORD i) const {
+ if (i < (FX_DWORD)m_Objects.GetSize()) {
CPDF_Object* p = (CPDF_Object*)m_Objects.GetAt(i);
- if (p)
- p->Release();
- m_Objects.RemoveAt(i);
-}
-void CPDF_Array::SetAt(FX_DWORD i, CPDF_Object* pObj, CPDF_IndirectObjects* pObjs)
-{
- ASSERT(m_Type == PDFOBJ_ARRAY);
- ASSERT(i < (FX_DWORD)m_Objects.GetSize());
- if (i >= (FX_DWORD)m_Objects.GetSize()) {
- return;
- }
- CPDF_Object* pOld = (CPDF_Object*)m_Objects.GetAt(i);
- if (pOld)
- pOld->Release();
- if (pObj->GetObjNum()) {
- ASSERT(pObjs != NULL);
- pObj = new CPDF_Reference(pObjs, pObj->GetObjNum());
- }
- m_Objects.SetAt(i, pObj);
-}
-void CPDF_Array::InsertAt(FX_DWORD index, CPDF_Object* pObj, CPDF_IndirectObjects* pObjs)
-{
- ASSERT(pObj != NULL);
- if (pObj->GetObjNum()) {
- ASSERT(pObjs != NULL);
- pObj = new CPDF_Reference(pObjs, pObj->GetObjNum());
- }
- m_Objects.InsertAt(index, pObj);
-}
-void CPDF_Array::Add(CPDF_Object* pObj, CPDF_IndirectObjects* pObjs)
-{
- ASSERT(pObj != NULL);
- if (pObj->GetObjNum()) {
- ASSERT(pObjs != NULL);
- pObj = new CPDF_Reference(pObjs, pObj->GetObjNum());
- }
- m_Objects.Add(pObj);
-}
-void CPDF_Array::AddName(const CFX_ByteString& str)
-{
- ASSERT(m_Type == PDFOBJ_ARRAY);
- Add(new CPDF_Name(str));
-}
-void CPDF_Array::AddString(const CFX_ByteString& str)
-{
- ASSERT(m_Type == PDFOBJ_ARRAY);
- Add(new CPDF_String(str));
-}
-void CPDF_Array::AddInteger(int i)
-{
- ASSERT(m_Type == PDFOBJ_ARRAY);
- Add(new CPDF_Number(i));
-}
-void CPDF_Array::AddNumber(FX_FLOAT f)
-{
- ASSERT(m_Type == PDFOBJ_ARRAY);
- CPDF_Number* pNumber = new CPDF_Number;
- pNumber->SetNumber(f);
- Add(pNumber);
-}
-void CPDF_Array::AddReference(CPDF_IndirectObjects* pDoc, FX_DWORD objnum)
-{
- ASSERT(m_Type == PDFOBJ_ARRAY);
- Add(new CPDF_Reference(pDoc, objnum));
-}
-FX_BOOL CPDF_Array::Identical(CPDF_Array* pOther) const
-{
- if (m_Objects.GetSize() != pOther->m_Objects.GetSize()) {
- return FALSE;
- }
- for (int i = 0; i < m_Objects.GetSize(); i ++)
- if (!((CPDF_Object*)m_Objects[i])->IsIdentical((CPDF_Object*)pOther->m_Objects[i])) {
- return FALSE;
- }
- return TRUE;
-}
-CPDF_Dictionary::~CPDF_Dictionary()
-{
- FX_POSITION pos = m_Map.GetStartPosition();
- while (pos) {
- void* value = m_Map.GetNextValue(pos);
- if (value)
- ((CPDF_Object*)value)->Release();
- }
-}
-FX_POSITION CPDF_Dictionary::GetStartPos() const
-{
- return m_Map.GetStartPosition();
-}
-CPDF_Object* CPDF_Dictionary::GetNextElement(FX_POSITION& pos, CFX_ByteString& key) const
-{
- if (pos == NULL) {
- return NULL;
- }
- CPDF_Object* p;
- m_Map.GetNextAssoc(pos, key, (void*&)p);
- return p;
+ return p->GetString();
+ }
+ return CFX_ByteString();
}
-CPDF_Object* CPDF_Dictionary::GetElement(const CFX_ByteStringC& key) const
-{
- CPDF_Object* p = NULL;
- m_Map.Lookup(key, (void*&)p);
- return p;
+CFX_ByteStringC CPDF_Array::GetConstString(FX_DWORD i) const {
+ if (i < (FX_DWORD)m_Objects.GetSize()) {
+ CPDF_Object* p = (CPDF_Object*)m_Objects.GetAt(i);
+ return p->GetConstString();
+ }
+ return CFX_ByteStringC();
}
-CPDF_Object* CPDF_Dictionary::GetElementValue(const CFX_ByteStringC& key) const
-{
- CPDF_Object* p = NULL;
- m_Map.Lookup(key, (void*&)p);
- return p ? p->GetDirect() : NULL;
-}
-CFX_ByteString CPDF_Dictionary::GetString(const CFX_ByteStringC& key) const
-{
- CPDF_Object* p = NULL;
- m_Map.Lookup(key, (void*&)p);
- if (p) {
- return p->GetString();
- }
- return CFX_ByteString();
-}
-CFX_ByteStringC CPDF_Dictionary::GetConstString(const CFX_ByteStringC& key) const
-{
- CPDF_Object* p = NULL;
- m_Map.Lookup(key, (void*&)p);
- if (p) {
- return p->GetConstString();
- }
- return CFX_ByteStringC();
-}
-CFX_WideString CPDF_Dictionary::GetUnicodeText(const CFX_ByteStringC& key, CFX_CharMap* pCharMap) const
-{
- CPDF_Object* p = NULL;
- m_Map.Lookup(key, (void*&)p);
- if (p) {
- if(p->GetType() == PDFOBJ_REFERENCE) {
- p = ((CPDF_Reference*)p)->GetDirect();
- if (p) {
- return p->GetUnicodeText(pCharMap);
- }
- } else {
- return p->GetUnicodeText(pCharMap);
- }
- }
- return CFX_WideString();
-}
-CFX_ByteString CPDF_Dictionary::GetString(const CFX_ByteStringC& key, const CFX_ByteStringC& def) const
-{
- CPDF_Object* p = NULL;
- m_Map.Lookup(key, (void*&)p);
- if (p) {
- return p->GetString();
- }
- return CFX_ByteString(def);
-}
-CFX_ByteStringC CPDF_Dictionary::GetConstString(const CFX_ByteStringC& key, const CFX_ByteStringC& def) const
-{
- CPDF_Object* p = NULL;
- m_Map.Lookup(key, (void*&)p);
- if (p) {
- return p->GetConstString();
- }
- return CFX_ByteStringC(def);
-}
-int CPDF_Dictionary::GetInteger(const CFX_ByteStringC& key) const
-{
- CPDF_Object* p = NULL;
- m_Map.Lookup(key, (void*&)p);
- if (p) {
- return p->GetInteger();
- }
+int CPDF_Array::GetInteger(FX_DWORD i) const {
+ if (i >= (FX_DWORD)m_Objects.GetSize()) {
return 0;
+ }
+ CPDF_Object* p = (CPDF_Object*)m_Objects.GetAt(i);
+ return p->GetInteger();
}
-int CPDF_Dictionary::GetInteger(const CFX_ByteStringC& key, int def) const
-{
- CPDF_Object* p = NULL;
- m_Map.Lookup(key, (void*&)p);
- if (p) {
- return p->GetInteger();
- }
- return def;
-}
-FX_FLOAT CPDF_Dictionary::GetNumber(const CFX_ByteStringC& key) const
-{
- CPDF_Object* p = NULL;
- m_Map.Lookup(key, (void*&)p);
- if (p) {
- return p->GetNumber();
- }
+FX_FLOAT CPDF_Array::GetNumber(FX_DWORD i) const {
+ if (i >= (FX_DWORD)m_Objects.GetSize()) {
return 0;
+ }
+ CPDF_Object* p = (CPDF_Object*)m_Objects.GetAt(i);
+ return p->GetNumber();
}
-FX_BOOL CPDF_Dictionary::GetBoolean(const CFX_ByteStringC& key, FX_BOOL bDefault) const
-{
- CPDF_Object* p = NULL;
- m_Map.Lookup(key, (void*&)p);
- if (p && p->GetType() == PDFOBJ_BOOLEAN) {
- return p->GetInteger();
- }
- return bDefault;
-}
-CPDF_Dictionary* CPDF_Dictionary::GetDict(const CFX_ByteStringC& key) const
-{
- CPDF_Object* p = GetElementValue(key);
- if (!p) {
- return nullptr;
- }
- if (p->GetType() == PDFOBJ_DICTIONARY) {
- return (CPDF_Dictionary*)p;
- }
- if (p->GetType() == PDFOBJ_STREAM) {
- return ((CPDF_Stream*)p)->GetDict();
- }
- return nullptr;
+CPDF_Dictionary* CPDF_Array::GetDict(FX_DWORD i) const {
+ CPDF_Object* p = GetElementValue(i);
+ if (!p) {
+ return NULL;
+ }
+ if (p->GetType() == PDFOBJ_DICTIONARY) {
+ return (CPDF_Dictionary*)p;
+ }
+ if (p->GetType() == PDFOBJ_STREAM) {
+ return ((CPDF_Stream*)p)->GetDict();
+ }
+ return NULL;
+}
+CPDF_Stream* CPDF_Array::GetStream(FX_DWORD i) const {
+ CPDF_Object* p = GetElementValue(i);
+ if (p == NULL || p->GetType() != PDFOBJ_STREAM) {
+ return NULL;
+ }
+ return (CPDF_Stream*)p;
}
-CPDF_Array* CPDF_Dictionary::GetArray(const CFX_ByteStringC& key) const
-{
- CPDF_Object* p = GetElementValue(key);
- if (p == NULL || p->GetType() != PDFOBJ_ARRAY) {
- return NULL;
- }
- return (CPDF_Array*)p;
+CPDF_Array* CPDF_Array::GetArray(FX_DWORD i) const {
+ CPDF_Object* p = GetElementValue(i);
+ if (p == NULL || p->GetType() != PDFOBJ_ARRAY) {
+ return NULL;
+ }
+ return (CPDF_Array*)p;
+}
+void CPDF_Array::RemoveAt(FX_DWORD i) {
+ ASSERT(m_Type == PDFOBJ_ARRAY);
+ if (i >= (FX_DWORD)m_Objects.GetSize()) {
+ return;
+ }
+ CPDF_Object* p = (CPDF_Object*)m_Objects.GetAt(i);
+ if (p)
+ p->Release();
+ m_Objects.RemoveAt(i);
+}
+void CPDF_Array::SetAt(FX_DWORD i,
+ CPDF_Object* pObj,
+ CPDF_IndirectObjects* pObjs) {
+ ASSERT(m_Type == PDFOBJ_ARRAY);
+ ASSERT(i < (FX_DWORD)m_Objects.GetSize());
+ if (i >= (FX_DWORD)m_Objects.GetSize()) {
+ return;
+ }
+ CPDF_Object* pOld = (CPDF_Object*)m_Objects.GetAt(i);
+ if (pOld)
+ pOld->Release();
+ if (pObj->GetObjNum()) {
+ ASSERT(pObjs != NULL);
+ pObj = new CPDF_Reference(pObjs, pObj->GetObjNum());
+ }
+ m_Objects.SetAt(i, pObj);
+}
+void CPDF_Array::InsertAt(FX_DWORD index,
+ CPDF_Object* pObj,
+ CPDF_IndirectObjects* pObjs) {
+ ASSERT(pObj != NULL);
+ if (pObj->GetObjNum()) {
+ ASSERT(pObjs != NULL);
+ pObj = new CPDF_Reference(pObjs, pObj->GetObjNum());
+ }
+ m_Objects.InsertAt(index, pObj);
+}
+void CPDF_Array::Add(CPDF_Object* pObj, CPDF_IndirectObjects* pObjs) {
+ ASSERT(pObj != NULL);
+ if (pObj->GetObjNum()) {
+ ASSERT(pObjs != NULL);
+ pObj = new CPDF_Reference(pObjs, pObj->GetObjNum());
+ }
+ m_Objects.Add(pObj);
+}
+void CPDF_Array::AddName(const CFX_ByteString& str) {
+ ASSERT(m_Type == PDFOBJ_ARRAY);
+ Add(new CPDF_Name(str));
+}
+void CPDF_Array::AddString(const CFX_ByteString& str) {
+ ASSERT(m_Type == PDFOBJ_ARRAY);
+ Add(new CPDF_String(str));
+}
+void CPDF_Array::AddInteger(int i) {
+ ASSERT(m_Type == PDFOBJ_ARRAY);
+ Add(new CPDF_Number(i));
+}
+void CPDF_Array::AddNumber(FX_FLOAT f) {
+ ASSERT(m_Type == PDFOBJ_ARRAY);
+ CPDF_Number* pNumber = new CPDF_Number;
+ pNumber->SetNumber(f);
+ Add(pNumber);
+}
+void CPDF_Array::AddReference(CPDF_IndirectObjects* pDoc, FX_DWORD objnum) {
+ ASSERT(m_Type == PDFOBJ_ARRAY);
+ Add(new CPDF_Reference(pDoc, objnum));
+}
+FX_BOOL CPDF_Array::Identical(CPDF_Array* pOther) const {
+ if (m_Objects.GetSize() != pOther->m_Objects.GetSize()) {
+ return FALSE;
+ }
+ for (int i = 0; i < m_Objects.GetSize(); i++)
+ if (!((CPDF_Object*)m_Objects[i])
+ ->IsIdentical((CPDF_Object*)pOther->m_Objects[i])) {
+ return FALSE;
+ }
+ return TRUE;
+}
+CPDF_Dictionary::~CPDF_Dictionary() {
+ FX_POSITION pos = m_Map.GetStartPosition();
+ while (pos) {
+ void* value = m_Map.GetNextValue(pos);
+ if (value)
+ ((CPDF_Object*)value)->Release();
+ }
+}
+FX_POSITION CPDF_Dictionary::GetStartPos() const {
+ return m_Map.GetStartPosition();
+}
+CPDF_Object* CPDF_Dictionary::GetNextElement(FX_POSITION& pos,
+ CFX_ByteString& key) const {
+ if (pos == NULL) {
+ return NULL;
+ }
+ CPDF_Object* p;
+ m_Map.GetNextAssoc(pos, key, (void*&)p);
+ return p;
+}
+CPDF_Object* CPDF_Dictionary::GetElement(const CFX_ByteStringC& key) const {
+ CPDF_Object* p = NULL;
+ m_Map.Lookup(key, (void*&)p);
+ return p;
+}
+CPDF_Object* CPDF_Dictionary::GetElementValue(
+ const CFX_ByteStringC& key) const {
+ CPDF_Object* p = NULL;
+ m_Map.Lookup(key, (void*&)p);
+ return p ? p->GetDirect() : NULL;
+}
+CFX_ByteString CPDF_Dictionary::GetString(const CFX_ByteStringC& key) const {
+ CPDF_Object* p = NULL;
+ m_Map.Lookup(key, (void*&)p);
+ if (p) {
+ return p->GetString();
+ }
+ return CFX_ByteString();
+}
+CFX_ByteStringC CPDF_Dictionary::GetConstString(
+ const CFX_ByteStringC& key) const {
+ CPDF_Object* p = NULL;
+ m_Map.Lookup(key, (void*&)p);
+ if (p) {
+ return p->GetConstString();
+ }
+ return CFX_ByteStringC();
+}
+CFX_WideString CPDF_Dictionary::GetUnicodeText(const CFX_ByteStringC& key,
+ CFX_CharMap* pCharMap) const {
+ CPDF_Object* p = NULL;
+ m_Map.Lookup(key, (void*&)p);
+ if (p) {
+ if (p->GetType() == PDFOBJ_REFERENCE) {
+ p = ((CPDF_Reference*)p)->GetDirect();
+ if (p) {
+ return p->GetUnicodeText(pCharMap);
+ }
+ } else {
+ return p->GetUnicodeText(pCharMap);
+ }
+ }
+ return CFX_WideString();
+}
+CFX_ByteString CPDF_Dictionary::GetString(const CFX_ByteStringC& key,
+ const CFX_ByteStringC& def) const {
+ CPDF_Object* p = NULL;
+ m_Map.Lookup(key, (void*&)p);
+ if (p) {
+ return p->GetString();
+ }
+ return CFX_ByteString(def);
+}
+CFX_ByteStringC CPDF_Dictionary::GetConstString(
+ const CFX_ByteStringC& key,
+ const CFX_ByteStringC& def) const {
+ CPDF_Object* p = NULL;
+ m_Map.Lookup(key, (void*&)p);
+ if (p) {
+ return p->GetConstString();
+ }
+ return CFX_ByteStringC(def);
+}
+int CPDF_Dictionary::GetInteger(const CFX_ByteStringC& key) const {
+ CPDF_Object* p = NULL;
+ m_Map.Lookup(key, (void*&)p);
+ if (p) {
+ return p->GetInteger();
+ }
+ return 0;
}
-CPDF_Stream* CPDF_Dictionary::GetStream(const CFX_ByteStringC& key) const
-{
- CPDF_Object* p = GetElementValue(key);
- if (p == NULL || p->GetType() != PDFOBJ_STREAM) {
- return NULL;
- }
- return (CPDF_Stream*)p;
-}
-CFX_FloatRect CPDF_Dictionary::GetRect(const CFX_ByteStringC& key) const
-{
- CFX_FloatRect rect;
- CPDF_Array* pArray = GetArray(key);
- if (pArray) {
- rect = pArray->GetRect();
- }
- return rect;
+int CPDF_Dictionary::GetInteger(const CFX_ByteStringC& key, int def) const {
+ CPDF_Object* p = NULL;
+ m_Map.Lookup(key, (void*&)p);
+ if (p) {
+ return p->GetInteger();
+ }
+ return def;
}
-CFX_AffineMatrix CPDF_Dictionary::GetMatrix(const CFX_ByteStringC& key) const
-{
- CFX_AffineMatrix matrix;
- CPDF_Array* pArray = GetArray(key);
- if (pArray) {
- matrix = pArray->GetMatrix();
- }
- return matrix;
+FX_FLOAT CPDF_Dictionary::GetNumber(const CFX_ByteStringC& key) const {
+ CPDF_Object* p = NULL;
+ m_Map.Lookup(key, (void*&)p);
+ if (p) {
+ return p->GetNumber();
+ }
+ return 0;
+}
+FX_BOOL CPDF_Dictionary::GetBoolean(const CFX_ByteStringC& key,
+ FX_BOOL bDefault) const {
+ CPDF_Object* p = NULL;
+ m_Map.Lookup(key, (void*&)p);
+ if (p && p->GetType() == PDFOBJ_BOOLEAN) {
+ return p->GetInteger();
+ }
+ return bDefault;
}
-FX_BOOL CPDF_Dictionary::KeyExist(const CFX_ByteStringC& key) const
-{
- void* value;
- return m_Map.Lookup(key, value);
-}
-void CPDF_Dictionary::SetAt(const CFX_ByteStringC& key, CPDF_Object* pObj, CPDF_IndirectObjects* pObjs)
-{
- ASSERT(m_Type == PDFOBJ_DICTIONARY);
- CPDF_Object* p = NULL;
- m_Map.Lookup(key, (void*&)p);
- if (p == pObj) {
- return;
- }
- if (p)
- p->Release();
- if (pObj) {
- if (pObj->GetObjNum()) {
- ASSERT(pObjs != NULL);
- pObj = new CPDF_Reference(pObjs, pObj->GetObjNum());
- }
- m_Map.SetAt(key, pObj);
- } else {
- m_Map.RemoveKey(key);
- }
+CPDF_Dictionary* CPDF_Dictionary::GetDict(const CFX_ByteStringC& key) const {
+ CPDF_Object* p = GetElementValue(key);
+ if (!p) {
+ return nullptr;
+ }
+ if (p->GetType() == PDFOBJ_DICTIONARY) {
+ return (CPDF_Dictionary*)p;
+ }
+ if (p->GetType() == PDFOBJ_STREAM) {
+ return ((CPDF_Stream*)p)->GetDict();
+ }
+ return nullptr;
+}
+CPDF_Array* CPDF_Dictionary::GetArray(const CFX_ByteStringC& key) const {
+ CPDF_Object* p = GetElementValue(key);
+ if (p == NULL || p->GetType() != PDFOBJ_ARRAY) {
+ return NULL;
+ }
+ return (CPDF_Array*)p;
}
-void CPDF_Dictionary::AddValue(const CFX_ByteStringC& key, CPDF_Object* pObj)
-{
- ASSERT(m_Type == PDFOBJ_DICTIONARY);
- m_Map.AddValue(key, pObj);
-}
-void CPDF_Dictionary::RemoveAt(const CFX_ByteStringC& key)
-{
- ASSERT(m_Type == PDFOBJ_DICTIONARY);
- CPDF_Object* p = NULL;
- m_Map.Lookup(key, (void*&)p);
- if (p == NULL) {
- return;
- }
+CPDF_Stream* CPDF_Dictionary::GetStream(const CFX_ByteStringC& key) const {
+ CPDF_Object* p = GetElementValue(key);
+ if (p == NULL || p->GetType() != PDFOBJ_STREAM) {
+ return NULL;
+ }
+ return (CPDF_Stream*)p;
+}
+CFX_FloatRect CPDF_Dictionary::GetRect(const CFX_ByteStringC& key) const {
+ CFX_FloatRect rect;
+ CPDF_Array* pArray = GetArray(key);
+ if (pArray) {
+ rect = pArray->GetRect();
+ }
+ return rect;
+}
+CFX_AffineMatrix CPDF_Dictionary::GetMatrix(const CFX_ByteStringC& key) const {
+ CFX_AffineMatrix matrix;
+ CPDF_Array* pArray = GetArray(key);
+ if (pArray) {
+ matrix = pArray->GetMatrix();
+ }
+ return matrix;
+}
+FX_BOOL CPDF_Dictionary::KeyExist(const CFX_ByteStringC& key) const {
+ void* value;
+ return m_Map.Lookup(key, value);
+}
+void CPDF_Dictionary::SetAt(const CFX_ByteStringC& key,
+ CPDF_Object* pObj,
+ CPDF_IndirectObjects* pObjs) {
+ ASSERT(m_Type == PDFOBJ_DICTIONARY);
+ CPDF_Object* p = NULL;
+ m_Map.Lookup(key, (void*&)p);
+ if (p == pObj) {
+ return;
+ }
+ if (p)
p->Release();
- m_Map.RemoveKey(key);
-}
-void CPDF_Dictionary::ReplaceKey(const CFX_ByteStringC& oldkey, const CFX_ByteStringC& newkey)
-{
- ASSERT(m_Type == PDFOBJ_DICTIONARY);
- CPDF_Object* p = NULL;
- m_Map.Lookup(oldkey, (void*&)p);
- if (p == NULL) {
- return;
- }
- m_Map.RemoveKey(oldkey);
- m_Map.SetAt(newkey, p);
-}
-FX_BOOL CPDF_Dictionary::Identical(CPDF_Dictionary* pOther) const
-{
- if (pOther == NULL) {
- return FALSE;
- }
- if (m_Map.GetCount() != pOther->m_Map.GetCount()) {
- return FALSE;
- }
- FX_POSITION pos = m_Map.GetStartPosition();
- while (pos) {
- CFX_ByteString key;
- void* value;
- m_Map.GetNextAssoc(pos, key, value);
- if (!value)
- return FALSE;
- if (!((CPDF_Object*)value)->IsIdentical(pOther->GetElement(key))) {
- return FALSE;
- }
+ if (pObj) {
+ if (pObj->GetObjNum()) {
+ ASSERT(pObjs != NULL);
+ pObj = new CPDF_Reference(pObjs, pObj->GetObjNum());
}
- return TRUE;
-}
-void CPDF_Dictionary::SetAtInteger(const CFX_ByteStringC& key, int i)
-{
- SetAt(key, new CPDF_Number(i));
-}
-void CPDF_Dictionary::SetAtName(const CFX_ByteStringC& key, const CFX_ByteString& name)
-{
- SetAt(key, new CPDF_Name(name));
-}
-void CPDF_Dictionary::SetAtString(const CFX_ByteStringC& key, const CFX_ByteString& str)
-{
- SetAt(key, new CPDF_String(str));
-}
-void CPDF_Dictionary::SetAtReference(const CFX_ByteStringC& key, CPDF_IndirectObjects* pDoc, FX_DWORD objnum)
-{
- SetAt(key, new CPDF_Reference(pDoc, objnum));
-}
-void CPDF_Dictionary::AddReference(const CFX_ByteStringC& key, CPDF_IndirectObjects* pDoc, FX_DWORD objnum)
-{
- AddValue(key, new CPDF_Reference(pDoc, objnum));
-}
-void CPDF_Dictionary::SetAtNumber(const CFX_ByteStringC& key, FX_FLOAT f)
-{
- CPDF_Number* pNumber = new CPDF_Number;
- pNumber->SetNumber(f);
- SetAt(key, pNumber);
-}
-void CPDF_Dictionary::SetAtBoolean(const CFX_ByteStringC& key, FX_BOOL bValue)
-{
- SetAt(key, new CPDF_Boolean(bValue));
-}
-void CPDF_Dictionary::SetAtRect(const CFX_ByteStringC& key, const CFX_FloatRect& rect)
-{
- CPDF_Array* pArray = new CPDF_Array;
- pArray->AddNumber(rect.left);
- pArray->AddNumber(rect.bottom);
- pArray->AddNumber(rect.right);
- pArray->AddNumber(rect.top);
- SetAt(key, pArray);
-}
-void CPDF_Dictionary::SetAtMatrix(const CFX_ByteStringC& key, const CFX_AffineMatrix& matrix)
-{
- CPDF_Array* pArray = new CPDF_Array;
- pArray->AddNumber16(matrix.a);
- pArray->AddNumber16(matrix.b);
- pArray->AddNumber16(matrix.c);
- pArray->AddNumber16(matrix.d);
- pArray->AddNumber(matrix.e);
- pArray->AddNumber(matrix.f);
- SetAt(key, pArray);
+ m_Map.SetAt(key, pObj);
+ } else {
+ m_Map.RemoveKey(key);
+ }
+}
+void CPDF_Dictionary::AddValue(const CFX_ByteStringC& key, CPDF_Object* pObj) {
+ ASSERT(m_Type == PDFOBJ_DICTIONARY);
+ m_Map.AddValue(key, pObj);
+}
+void CPDF_Dictionary::RemoveAt(const CFX_ByteStringC& key) {
+ ASSERT(m_Type == PDFOBJ_DICTIONARY);
+ CPDF_Object* p = NULL;
+ m_Map.Lookup(key, (void*&)p);
+ if (p == NULL) {
+ return;
+ }
+ p->Release();
+ m_Map.RemoveKey(key);
+}
+void CPDF_Dictionary::ReplaceKey(const CFX_ByteStringC& oldkey,
+ const CFX_ByteStringC& newkey) {
+ ASSERT(m_Type == PDFOBJ_DICTIONARY);
+ CPDF_Object* p = NULL;
+ m_Map.Lookup(oldkey, (void*&)p);
+ if (p == NULL) {
+ return;
+ }
+ m_Map.RemoveKey(oldkey);
+ m_Map.SetAt(newkey, p);
+}
+FX_BOOL CPDF_Dictionary::Identical(CPDF_Dictionary* pOther) const {
+ if (pOther == NULL) {
+ return FALSE;
+ }
+ if (m_Map.GetCount() != pOther->m_Map.GetCount()) {
+ return FALSE;
+ }
+ FX_POSITION pos = m_Map.GetStartPosition();
+ while (pos) {
+ CFX_ByteString key;
+ void* value;
+ m_Map.GetNextAssoc(pos, key, value);
+ if (!value)
+ return FALSE;
+ if (!((CPDF_Object*)value)->IsIdentical(pOther->GetElement(key))) {
+ return FALSE;
+ }
+ }
+ return TRUE;
+}
+void CPDF_Dictionary::SetAtInteger(const CFX_ByteStringC& key, int i) {
+ SetAt(key, new CPDF_Number(i));
+}
+void CPDF_Dictionary::SetAtName(const CFX_ByteStringC& key,
+ const CFX_ByteString& name) {
+ SetAt(key, new CPDF_Name(name));
+}
+void CPDF_Dictionary::SetAtString(const CFX_ByteStringC& key,
+ const CFX_ByteString& str) {
+ SetAt(key, new CPDF_String(str));
+}
+void CPDF_Dictionary::SetAtReference(const CFX_ByteStringC& key,
+ CPDF_IndirectObjects* pDoc,
+ FX_DWORD objnum) {
+ SetAt(key, new CPDF_Reference(pDoc, objnum));
+}
+void CPDF_Dictionary::AddReference(const CFX_ByteStringC& key,
+ CPDF_IndirectObjects* pDoc,
+ FX_DWORD objnum) {
+ AddValue(key, new CPDF_Reference(pDoc, objnum));
+}
+void CPDF_Dictionary::SetAtNumber(const CFX_ByteStringC& key, FX_FLOAT f) {
+ CPDF_Number* pNumber = new CPDF_Number;
+ pNumber->SetNumber(f);
+ SetAt(key, pNumber);
+}
+void CPDF_Dictionary::SetAtBoolean(const CFX_ByteStringC& key, FX_BOOL bValue) {
+ SetAt(key, new CPDF_Boolean(bValue));
+}
+void CPDF_Dictionary::SetAtRect(const CFX_ByteStringC& key,
+ const CFX_FloatRect& rect) {
+ CPDF_Array* pArray = new CPDF_Array;
+ pArray->AddNumber(rect.left);
+ pArray->AddNumber(rect.bottom);
+ pArray->AddNumber(rect.right);
+ pArray->AddNumber(rect.top);
+ SetAt(key, pArray);
+}
+void CPDF_Dictionary::SetAtMatrix(const CFX_ByteStringC& key,
+ const CFX_AffineMatrix& matrix) {
+ CPDF_Array* pArray = new CPDF_Array;
+ pArray->AddNumber16(matrix.a);
+ pArray->AddNumber16(matrix.b);
+ pArray->AddNumber16(matrix.c);
+ pArray->AddNumber16(matrix.d);
+ pArray->AddNumber(matrix.e);
+ pArray->AddNumber(matrix.f);
+ SetAt(key, pArray);
}
CPDF_Stream::CPDF_Stream(uint8_t* pData, FX_DWORD size, CPDF_Dictionary* pDict)
: CPDF_Object(PDFOBJ_STREAM) {
- m_pDict = pDict;
- m_dwSize = size;
- m_GenNum = (FX_DWORD) - 1;
- m_pDataBuf = pData;
- m_pCryptoHandler = NULL;
-}
-CPDF_Stream::~CPDF_Stream()
-{
- if (m_GenNum == (FX_DWORD) - 1 && m_pDataBuf != NULL) {
- FX_Free(m_pDataBuf);
- }
+ m_pDict = pDict;
+ m_dwSize = size;
+ m_GenNum = (FX_DWORD)-1;
+ m_pDataBuf = pData;
+ m_pCryptoHandler = NULL;
+}
+CPDF_Stream::~CPDF_Stream() {
+ if (m_GenNum == (FX_DWORD)-1 && m_pDataBuf != NULL) {
+ FX_Free(m_pDataBuf);
+ }
+ if (m_pDict) {
+ m_pDict->Release();
+ }
+}
+void CPDF_Stream::InitStream(CPDF_Dictionary* pDict) {
+ if (pDict) {
if (m_pDict) {
- m_pDict->Release();
+ m_pDict->Release();
}
+ m_pDict = pDict;
+ }
+ if (m_GenNum == (FX_DWORD)-1) {
+ if (m_pDataBuf) {
+ FX_Free(m_pDataBuf);
+ }
+ }
+ m_GenNum = 0;
+ m_pFile = NULL;
+ m_pCryptoHandler = NULL;
+ m_FileOffset = 0;
+}
+void CPDF_Stream::InitStream(uint8_t* pData,
+ FX_DWORD size,
+ CPDF_Dictionary* pDict) {
+ InitStream(pDict);
+ m_GenNum = (FX_DWORD)-1;
+ m_pDataBuf = FX_Alloc(uint8_t, size);
+ if (pData) {
+ FXSYS_memcpy(m_pDataBuf, pData, size);
+ }
+ m_dwSize = size;
+ if (m_pDict) {
+ m_pDict->SetAtInteger(FX_BSTRC("Length"), size);
+ }
}
-void CPDF_Stream::InitStream(CPDF_Dictionary* pDict)
-{
- if (pDict) {
- if (m_pDict) {
- m_pDict->Release();
- }
- m_pDict = pDict;
- }
- if (m_GenNum == (FX_DWORD) - 1) {
- if (m_pDataBuf) {
- FX_Free(m_pDataBuf);
- }
+void CPDF_Stream::SetData(const uint8_t* pData,
+ FX_DWORD size,
+ FX_BOOL bCompressed,
+ FX_BOOL bKeepBuf) {
+ if (m_GenNum == (FX_DWORD)-1) {
+ if (m_pDataBuf) {
+ FX_Free(m_pDataBuf);
}
- m_GenNum = 0;
- m_pFile = NULL;
+ } else {
+ m_GenNum = (FX_DWORD)-1;
m_pCryptoHandler = NULL;
- m_FileOffset = 0;
-}
-void CPDF_Stream::InitStream(uint8_t* pData, FX_DWORD size, CPDF_Dictionary* pDict)
-{
- InitStream(pDict);
- m_GenNum = (FX_DWORD) - 1;
+ }
+ if (bKeepBuf) {
+ m_pDataBuf = (uint8_t*)pData;
+ } else {
m_pDataBuf = FX_Alloc(uint8_t, size);
if (pData) {
- FXSYS_memcpy(m_pDataBuf, pData, size);
- }
- m_dwSize = size;
- if (m_pDict) {
- m_pDict->SetAtInteger(FX_BSTRC("Length"), size);
- }
-}
-void CPDF_Stream::SetData(const uint8_t* pData, FX_DWORD size, FX_BOOL bCompressed, FX_BOOL bKeepBuf)
-{
- if (m_GenNum == (FX_DWORD) - 1) {
- if (m_pDataBuf) {
- FX_Free(m_pDataBuf);
- }
- } else {
- m_GenNum = (FX_DWORD) - 1;
- m_pCryptoHandler = NULL;
- }
- if (bKeepBuf) {
- m_pDataBuf = (uint8_t*)pData;
- } else {
- m_pDataBuf = FX_Alloc(uint8_t, size);
- if (pData) {
- FXSYS_memcpy(m_pDataBuf, pData, size);
- }
- }
- m_dwSize = size;
- if (m_pDict == NULL) {
- m_pDict = new CPDF_Dictionary;
- }
- m_pDict->SetAtInteger(FX_BSTRC("Length"), size);
- if (!bCompressed) {
- m_pDict->RemoveAt(FX_BSTRC("Filter"));
- m_pDict->RemoveAt(FX_BSTRC("DecodeParms"));
- }
-}
-FX_BOOL CPDF_Stream::ReadRawData(FX_FILESIZE offset, uint8_t* buf, FX_DWORD size) const
-{
- if ((m_GenNum != (FX_DWORD) - 1) && m_pFile) {
- return m_pFile->ReadBlock(buf, m_FileOffset + offset, size);
- }
- if (m_pDataBuf) {
- FXSYS_memcpy(buf, m_pDataBuf + offset, size);
- }
- return TRUE;
-}
-void CPDF_Stream::InitStream(IFX_FileRead *pFile, CPDF_Dictionary* pDict)
-{
- InitStream(pDict);
- m_pFile = pFile;
- m_dwSize = (FX_DWORD)pFile->GetSize();
- if (m_pDict) {
- m_pDict->SetAtInteger(FX_BSTRC("Length"), m_dwSize);
- }
-}
-FX_BOOL CPDF_Stream::Identical(CPDF_Stream* pOther) const
-{
- if (!m_pDict)
- return pOther->m_pDict ? FALSE : TRUE;
+ FXSYS_memcpy(m_pDataBuf, pData, size);
+ }
+ }
+ m_dwSize = size;
+ if (m_pDict == NULL) {
+ m_pDict = new CPDF_Dictionary;
+ }
+ m_pDict->SetAtInteger(FX_BSTRC("Length"), size);
+ if (!bCompressed) {
+ m_pDict->RemoveAt(FX_BSTRC("Filter"));
+ m_pDict->RemoveAt(FX_BSTRC("DecodeParms"));
+ }
+}
+FX_BOOL CPDF_Stream::ReadRawData(FX_FILESIZE offset,
+ uint8_t* buf,
+ FX_DWORD size) const {
+ if ((m_GenNum != (FX_DWORD)-1) && m_pFile) {
+ return m_pFile->ReadBlock(buf, m_FileOffset + offset, size);
+ }
+ if (m_pDataBuf) {
+ FXSYS_memcpy(buf, m_pDataBuf + offset, size);
+ }
+ return TRUE;
+}
+void CPDF_Stream::InitStream(IFX_FileRead* pFile, CPDF_Dictionary* pDict) {
+ InitStream(pDict);
+ m_pFile = pFile;
+ m_dwSize = (FX_DWORD)pFile->GetSize();
+ if (m_pDict) {
+ m_pDict->SetAtInteger(FX_BSTRC("Length"), m_dwSize);
+ }
+}
+FX_BOOL CPDF_Stream::Identical(CPDF_Stream* pOther) const {
+ if (!m_pDict)
+ return pOther->m_pDict ? FALSE : TRUE;
- if (!m_pDict->Identical(pOther->m_pDict)) {
+ if (!m_pDict->Identical(pOther->m_pDict)) {
+ return FALSE;
+ }
+ if (m_dwSize != pOther->m_dwSize) {
+ return FALSE;
+ }
+ if (m_GenNum != (FX_DWORD)-1 && pOther->m_GenNum != (FX_DWORD)-1) {
+ if (m_pFile == pOther->m_pFile && m_pFile == NULL) {
+ return TRUE;
+ }
+ if (!m_pFile || !pOther->m_pFile) {
+ return FALSE;
+ }
+ uint8_t srcBuf[1024];
+ uint8_t destBuf[1024];
+ FX_DWORD size = m_dwSize;
+ FX_DWORD srcOffset = m_FileOffset;
+ FX_DWORD destOffset = pOther->m_FileOffset;
+ if (m_pFile == pOther->m_pFile && srcOffset == destOffset) {
+ return TRUE;
+ }
+ while (size > 0) {
+ FX_DWORD actualSize = size > 1024 ? 1024 : size;
+ m_pFile->ReadBlock(srcBuf, srcOffset, actualSize);
+ pOther->m_pFile->ReadBlock(destBuf, destOffset, actualSize);
+ if (FXSYS_memcmp(srcBuf, destBuf, actualSize) != 0) {
return FALSE;
+ }
+ size -= actualSize;
+ srcOffset += actualSize;
+ destOffset += actualSize;
}
- if (m_dwSize != pOther->m_dwSize) {
+ return TRUE;
+ }
+ if (m_GenNum != (FX_DWORD)-1 || pOther->m_GenNum != (FX_DWORD)-1) {
+ IFX_FileRead* pFile = NULL;
+ uint8_t* pBuf = NULL;
+ FX_DWORD offset = 0;
+ if (pOther->m_GenNum != (FX_DWORD)-1) {
+ pFile = pOther->m_pFile;
+ pBuf = m_pDataBuf;
+ offset = pOther->m_FileOffset;
+ } else if (m_GenNum != (FX_DWORD)-1) {
+ pFile = m_pFile;
+ pBuf = pOther->m_pDataBuf;
+ offset = m_FileOffset;
+ }
+ if (NULL == pBuf) {
+ return FALSE;
+ }
+ uint8_t srcBuf[1024];
+ FX_DWORD size = m_dwSize;
+ while (size > 0) {
+ FX_DWORD actualSize = std::min(size, 1024U);
+ pFile->ReadBlock(srcBuf, offset, actualSize);
+ if (FXSYS_memcmp(srcBuf, pBuf, actualSize) != 0) {
return FALSE;
+ }
+ pBuf += actualSize;
+ size -= actualSize;
+ offset += actualSize;
}
- if (m_GenNum != (FX_DWORD) - 1 && pOther->m_GenNum != (FX_DWORD) - 1) {
- if (m_pFile == pOther->m_pFile && m_pFile == NULL) {
- return TRUE;
- }
- if (!m_pFile || !pOther->m_pFile) {
- return FALSE;
- }
- uint8_t srcBuf[1024];
- uint8_t destBuf[1024];
- FX_DWORD size = m_dwSize;
- FX_DWORD srcOffset = m_FileOffset;
- FX_DWORD destOffset = pOther->m_FileOffset;
- if (m_pFile == pOther->m_pFile && srcOffset == destOffset) {
- return TRUE;
- }
- while (size > 0) {
- FX_DWORD actualSize = size > 1024 ? 1024 : size;
- m_pFile->ReadBlock(srcBuf, srcOffset, actualSize);
- pOther->m_pFile->ReadBlock(destBuf, destOffset, actualSize);
- if (FXSYS_memcmp(srcBuf, destBuf, actualSize) != 0) {
- return FALSE;
- }
- size -= actualSize;
- srcOffset += actualSize;
- destOffset += actualSize;
- }
- return TRUE;
- }
- if (m_GenNum != (FX_DWORD) - 1 || pOther->m_GenNum != (FX_DWORD) - 1) {
- IFX_FileRead* pFile = NULL;
- uint8_t* pBuf = NULL;
- FX_DWORD offset = 0;
- if (pOther->m_GenNum != (FX_DWORD) - 1) {
- pFile = pOther->m_pFile;
- pBuf = m_pDataBuf;
- offset = pOther->m_FileOffset;
- } else if (m_GenNum != (FX_DWORD) - 1) {
- pFile = m_pFile;
- pBuf = pOther->m_pDataBuf;
- offset = m_FileOffset;
- }
- if (NULL == pBuf) {
- return FALSE;
- }
- uint8_t srcBuf[1024];
- FX_DWORD size = m_dwSize;
- while (size > 0) {
- FX_DWORD actualSize = std::min(size, 1024U);
- pFile->ReadBlock(srcBuf, offset, actualSize);
- if (FXSYS_memcmp(srcBuf, pBuf, actualSize) != 0) {
- return FALSE;
- }
- pBuf += actualSize;
- size -= actualSize;
- offset += actualSize;
- }
- return TRUE;
- }
- return FXSYS_memcmp(m_pDataBuf, pOther->m_pDataBuf, m_dwSize) == 0;
-}
-CPDF_Stream* CPDF_Stream::Clone(FX_BOOL bDirect, FPDF_LPFCloneStreamCallback lpfCallback, void* pUserData) const
-{
- CPDF_Dictionary *pCloneDict = (CPDF_Dictionary*)m_pDict->Clone(bDirect);
- IFX_FileStream *pFS = NULL;
- if (lpfCallback) {
- pFS = lpfCallback((CPDF_Stream*)this, pUserData);
- }
- if (!pFS) {
- CPDF_StreamAcc acc;
- acc.LoadAllData(this, TRUE);
- FX_DWORD streamSize = acc.GetSize();
- return new CPDF_Stream(acc.DetachData(), streamSize, pCloneDict);
- }
- CPDF_Stream* pObj = new CPDF_Stream(NULL, 0, NULL);
- CPDF_StreamFilter *pSF = GetStreamFilter(TRUE);
- if (pSF) {
- uint8_t* pBuf = FX_Alloc(uint8_t, 4096);
- FX_DWORD dwRead;
- do {
- dwRead = pSF->ReadBlock(pBuf, 4096);
- if (dwRead) {
- pFS->WriteBlock(pBuf, dwRead);
- }
- } while (dwRead == 4096);
- pFS->Flush();
- FX_Free(pBuf);
- delete pSF;
- }
- pObj->InitStream((IFX_FileRead*)pFS, pCloneDict);
- return pObj;
-}
-extern FX_BOOL PDF_DataDecode(const uint8_t* src_buf, FX_DWORD src_size, const CPDF_Dictionary* pDict,
- uint8_t*& dest_buf, FX_DWORD& dest_size, CFX_ByteString& ImageEncoding,
- CPDF_Dictionary*& pImageParms, FX_DWORD estimated_size, FX_BOOL bImageAcc);
-CPDF_StreamAcc::CPDF_StreamAcc()
-{
- m_bNewBuf = FALSE;
+ return TRUE;
+ }
+ return FXSYS_memcmp(m_pDataBuf, pOther->m_pDataBuf, m_dwSize) == 0;
+}
+CPDF_Stream* CPDF_Stream::Clone(FX_BOOL bDirect,
+ FPDF_LPFCloneStreamCallback lpfCallback,
+ void* pUserData) const {
+ CPDF_Dictionary* pCloneDict = (CPDF_Dictionary*)m_pDict->Clone(bDirect);
+ IFX_FileStream* pFS = NULL;
+ if (lpfCallback) {
+ pFS = lpfCallback((CPDF_Stream*)this, pUserData);
+ }
+ if (!pFS) {
+ CPDF_StreamAcc acc;
+ acc.LoadAllData(this, TRUE);
+ FX_DWORD streamSize = acc.GetSize();
+ return new CPDF_Stream(acc.DetachData(), streamSize, pCloneDict);
+ }
+ CPDF_Stream* pObj = new CPDF_Stream(NULL, 0, NULL);
+ CPDF_StreamFilter* pSF = GetStreamFilter(TRUE);
+ if (pSF) {
+ uint8_t* pBuf = FX_Alloc(uint8_t, 4096);
+ FX_DWORD dwRead;
+ do {
+ dwRead = pSF->ReadBlock(pBuf, 4096);
+ if (dwRead) {
+ pFS->WriteBlock(pBuf, dwRead);
+ }
+ } while (dwRead == 4096);
+ pFS->Flush();
+ FX_Free(pBuf);
+ delete pSF;
+ }
+ pObj->InitStream((IFX_FileRead*)pFS, pCloneDict);
+ return pObj;
+}
+extern FX_BOOL PDF_DataDecode(const uint8_t* src_buf,
+ FX_DWORD src_size,
+ const CPDF_Dictionary* pDict,
+ uint8_t*& dest_buf,
+ FX_DWORD& dest_size,
+ CFX_ByteString& ImageEncoding,
+ CPDF_Dictionary*& pImageParms,
+ FX_DWORD estimated_size,
+ FX_BOOL bImageAcc);
+CPDF_StreamAcc::CPDF_StreamAcc() {
+ m_bNewBuf = FALSE;
+ m_pData = NULL;
+ m_dwSize = 0;
+ m_pImageParam = NULL;
+ m_pStream = NULL;
+ m_pSrcData = NULL;
+}
+void CPDF_StreamAcc::LoadAllData(const CPDF_Stream* pStream,
+ FX_BOOL bRawAccess,
+ FX_DWORD estimated_size,
+ FX_BOOL bImageAcc) {
+ if (pStream == NULL || pStream->GetType() != PDFOBJ_STREAM) {
+ return;
+ }
+ m_pStream = pStream;
+ if (pStream->IsMemoryBased() &&
+ (!pStream->GetDict()->KeyExist(FX_BSTRC("Filter")) || bRawAccess)) {
+ m_dwSize = pStream->m_dwSize;
+ m_pData = (uint8_t*)pStream->m_pDataBuf;
+ return;
+ }
+ uint8_t* pSrcData;
+ FX_DWORD dwSrcSize = pStream->m_dwSize;
+ if (dwSrcSize == 0) {
+ return;
+ }
+ if (!pStream->IsMemoryBased()) {
+ pSrcData = m_pSrcData = FX_Alloc(uint8_t, dwSrcSize);
+ if (!pStream->ReadRawData(0, pSrcData, dwSrcSize)) {
+ return;
+ }
+ } else {
+ pSrcData = pStream->m_pDataBuf;
+ }
+ uint8_t* pDecryptedData;
+ FX_DWORD dwDecryptedSize;
+ if (pStream->m_pCryptoHandler) {
+ CFX_BinaryBuf dest_buf;
+ dest_buf.EstimateSize(pStream->m_pCryptoHandler->DecryptGetSize(dwSrcSize));
+ void* context = pStream->m_pCryptoHandler->DecryptStart(
+ pStream->GetObjNum(), pStream->m_GenNum);
+ pStream->m_pCryptoHandler->DecryptStream(context, pSrcData, dwSrcSize,
+ dest_buf);
+ pStream->m_pCryptoHandler->DecryptFinish(context, dest_buf);
+ pDecryptedData = dest_buf.GetBuffer();
+ dwDecryptedSize = dest_buf.GetSize();
+ dest_buf.DetachBuffer();
+ } else {
+ pDecryptedData = pSrcData;
+ dwDecryptedSize = dwSrcSize;
+ }
+ if (!pStream->GetDict()->KeyExist(FX_BSTRC("Filter")) || bRawAccess) {
+ m_pData = pDecryptedData;
+ m_dwSize = dwDecryptedSize;
+ } else {
+ FX_BOOL bRet = PDF_DataDecode(
+ pDecryptedData, dwDecryptedSize, m_pStream->GetDict(), m_pData,
+ m_dwSize, m_ImageDecoder, m_pImageParam, estimated_size, bImageAcc);
+ if (!bRet) {
+ m_pData = pDecryptedData;
+ m_dwSize = dwDecryptedSize;
+ }
+ }
+ if (pSrcData != pStream->m_pDataBuf && pSrcData != m_pData) {
+ FX_Free(pSrcData);
+ }
+ if (pDecryptedData != pSrcData && pDecryptedData != m_pData) {
+ FX_Free(pDecryptedData);
+ }
+ m_pSrcData = NULL;
+ m_bNewBuf = m_pData != pStream->m_pDataBuf;
+}
+CPDF_StreamAcc::~CPDF_StreamAcc() {
+ if (m_bNewBuf && m_pData) {
+ FX_Free(m_pData);
+ }
+ if (m_pSrcData) {
+ FX_Free(m_pSrcData);
+ }
+}
+const uint8_t* CPDF_StreamAcc::GetData() const {
+ if (m_bNewBuf) {
+ return m_pData;
+ }
+ if (!m_pStream) {
+ return NULL;
+ }
+ return m_pStream->m_pDataBuf;
+}
+FX_DWORD CPDF_StreamAcc::GetSize() const {
+ if (m_bNewBuf) {
+ return m_dwSize;
+ }
+ if (!m_pStream) {
+ return 0;
+ }
+ return m_pStream->m_dwSize;
+}
+uint8_t* CPDF_StreamAcc::DetachData() {
+ if (m_bNewBuf) {
+ uint8_t* p = m_pData;
m_pData = NULL;
m_dwSize = 0;
- m_pImageParam = NULL;
- m_pStream = NULL;
- m_pSrcData = NULL;
-}
-void CPDF_StreamAcc::LoadAllData(const CPDF_Stream* pStream, FX_BOOL bRawAccess, FX_DWORD estimated_size,
- FX_BOOL bImageAcc)
-{
- if (pStream == NULL || pStream->GetType() != PDFOBJ_STREAM) {
- return;
- }
- m_pStream = pStream;
- if (pStream->IsMemoryBased() &&
- (!pStream->GetDict()->KeyExist(FX_BSTRC("Filter")) || bRawAccess)) {
- m_dwSize = pStream->m_dwSize;
- m_pData = (uint8_t*)pStream->m_pDataBuf;
- return;
- }
- uint8_t* pSrcData;
- FX_DWORD dwSrcSize = pStream->m_dwSize;
- if (dwSrcSize == 0) {
- return;
- }
- if (!pStream->IsMemoryBased()) {
- pSrcData = m_pSrcData = FX_Alloc(uint8_t, dwSrcSize);
- if (!pStream->ReadRawData(0, pSrcData, dwSrcSize)) {
- return;
- }
- } else {
- pSrcData = pStream->m_pDataBuf;
- }
- uint8_t* pDecryptedData;
- FX_DWORD dwDecryptedSize;
- if (pStream->m_pCryptoHandler) {
- CFX_BinaryBuf dest_buf;
- dest_buf.EstimateSize(pStream->m_pCryptoHandler->DecryptGetSize(dwSrcSize));
- void* context = pStream->m_pCryptoHandler->DecryptStart(pStream->GetObjNum(), pStream->m_GenNum);
- pStream->m_pCryptoHandler->DecryptStream(context, pSrcData, dwSrcSize, dest_buf);
- pStream->m_pCryptoHandler->DecryptFinish(context, dest_buf);
- pDecryptedData = dest_buf.GetBuffer();
- dwDecryptedSize = dest_buf.GetSize();
- dest_buf.DetachBuffer();
- } else {
- pDecryptedData = pSrcData;
- dwDecryptedSize = dwSrcSize;
- }
- if (!pStream->GetDict()->KeyExist(FX_BSTRC("Filter")) || bRawAccess) {
- m_pData = pDecryptedData;
- m_dwSize = dwDecryptedSize;
- } else {
- FX_BOOL bRet = PDF_DataDecode(pDecryptedData, dwDecryptedSize, m_pStream->GetDict(),
- m_pData, m_dwSize, m_ImageDecoder, m_pImageParam, estimated_size, bImageAcc);
- if (!bRet) {
- m_pData = pDecryptedData;
- m_dwSize = dwDecryptedSize;
- }
- }
- if (pSrcData != pStream->m_pDataBuf && pSrcData != m_pData) {
- FX_Free(pSrcData);
- }
- if (pDecryptedData != pSrcData && pDecryptedData != m_pData) {
- FX_Free(pDecryptedData);
- }
- m_pSrcData = NULL;
- m_bNewBuf = m_pData != pStream->m_pDataBuf;
-}
-CPDF_StreamAcc::~CPDF_StreamAcc()
-{
- if (m_bNewBuf && m_pData) {
- FX_Free(m_pData);
- }
- if (m_pSrcData) {
- FX_Free(m_pSrcData);
- }
-}
-const uint8_t* CPDF_StreamAcc::GetData() const
-{
- if (m_bNewBuf) {
- return m_pData;
- }
- if (!m_pStream) {
- return NULL;
- }
- return m_pStream->m_pDataBuf;
-}
-FX_DWORD CPDF_StreamAcc::GetSize() const
-{
- if (m_bNewBuf) {
- return m_dwSize;
- }
- if (!m_pStream) {
- return 0;
- }
- return m_pStream->m_dwSize;
-}
-uint8_t* CPDF_StreamAcc::DetachData()
-{
- if (m_bNewBuf) {
- uint8_t* p = m_pData;
- m_pData = NULL;
- m_dwSize = 0;
- return p;
- }
- uint8_t* p = FX_Alloc(uint8_t, m_dwSize);
- FXSYS_memcpy(p, m_pData, m_dwSize);
return p;
-}
-void CPDF_Reference::SetRef(CPDF_IndirectObjects* pDoc, FX_DWORD objnum)
-{
- m_pObjList = pDoc;
- m_RefObjNum = objnum;
-}
-CPDF_IndirectObjects::CPDF_IndirectObjects(CPDF_Parser* pParser)
-{
- m_pParser = pParser;
- m_IndirectObjs.InitHashTable(1013);
- if (pParser) {
- m_LastObjNum = m_pParser->GetLastObjNum();
- } else {
- m_LastObjNum = 0;
- }
-}
-CPDF_IndirectObjects::~CPDF_IndirectObjects()
-{
- FX_POSITION pos = m_IndirectObjs.GetStartPosition();
- while (pos) {
- void* key;
- void* value;
- m_IndirectObjs.GetNextAssoc(pos, key, value);
- ((CPDF_Object*)value)->Destroy();
- }
-}
-CPDF_Object* CPDF_IndirectObjects::GetIndirectObject(FX_DWORD objnum, struct PARSE_CONTEXT* pContext)
-{
- if (objnum == 0) {
- return NULL;
- }
+ }
+ uint8_t* p = FX_Alloc(uint8_t, m_dwSize);
+ FXSYS_memcpy(p, m_pData, m_dwSize);
+ return p;
+}
+void CPDF_Reference::SetRef(CPDF_IndirectObjects* pDoc, FX_DWORD objnum) {
+ m_pObjList = pDoc;
+ m_RefObjNum = objnum;
+}
+CPDF_IndirectObjects::CPDF_IndirectObjects(CPDF_Parser* pParser) {
+ m_pParser = pParser;
+ m_IndirectObjs.InitHashTable(1013);
+ if (pParser) {
+ m_LastObjNum = m_pParser->GetLastObjNum();
+ } else {
+ m_LastObjNum = 0;
+ }
+}
+CPDF_IndirectObjects::~CPDF_IndirectObjects() {
+ FX_POSITION pos = m_IndirectObjs.GetStartPosition();
+ while (pos) {
+ void* key;
void* value;
- {
- if (m_IndirectObjs.Lookup((void*)(uintptr_t)objnum, value)) {
- if (((CPDF_Object*)value)->GetObjNum() == -1) {
- return NULL;
- }
- return (CPDF_Object*)value;
- }
- }
- CPDF_Object* pObj = NULL;
- if (m_pParser) {
- pObj = m_pParser->ParseIndirectObject(this, objnum, pContext);
- }
- if (pObj == NULL) {
- return NULL;
- }
- pObj->m_ObjNum = objnum;
- if (m_LastObjNum < objnum) {
- m_LastObjNum = objnum;
- }
- if (m_IndirectObjs.Lookup((void*)(uintptr_t)objnum, value)) {
- if (value) {
- ((CPDF_Object *)value)->Destroy();
- }
- }
- m_IndirectObjs.SetAt((void*)(uintptr_t)objnum, pObj);
- return pObj;
-}
-int CPDF_IndirectObjects::GetIndirectType(FX_DWORD objnum)
-{
- void* value;
- if (m_IndirectObjs.Lookup((void*)(uintptr_t)objnum, value)) {
- return ((CPDF_Object*)value)->GetType();
- }
- if (m_pParser) {
- PARSE_CONTEXT context;
- FXSYS_memset(&context, 0, sizeof(PARSE_CONTEXT));
- context.m_Flags = PDFPARSE_TYPEONLY;
- return (int)(uintptr_t)m_pParser->ParseIndirectObject(this, objnum, &context);
- }
- return 0;
-}
-FX_DWORD CPDF_IndirectObjects::AddIndirectObject(CPDF_Object* pObj)
-{
- if (pObj->m_ObjNum) {
- return pObj->m_ObjNum;
- }
- m_LastObjNum ++;
- m_IndirectObjs.SetAt((void*)(uintptr_t)m_LastObjNum, pObj);
- pObj->m_ObjNum = m_LastObjNum;
- return m_LastObjNum;
-}
-void CPDF_IndirectObjects::ReleaseIndirectObject(FX_DWORD objnum)
-{
- void* value;
- if (!m_IndirectObjs.Lookup((void*)(uintptr_t)objnum, value)) {
- return;
- }
- if (((CPDF_Object*)value)->GetObjNum() == -1) {
- return;
- }
+ m_IndirectObjs.GetNextAssoc(pos, key, value);
((CPDF_Object*)value)->Destroy();
- m_IndirectObjs.RemoveKey((void*)(uintptr_t)objnum);
+ }
}
-void CPDF_IndirectObjects::InsertIndirectObject(FX_DWORD objnum, CPDF_Object* pObj)
-{
- if (objnum == 0 || pObj == NULL) {
- return;
- }
- void* value = NULL;
+CPDF_Object* CPDF_IndirectObjects::GetIndirectObject(
+ FX_DWORD objnum,
+ struct PARSE_CONTEXT* pContext) {
+ if (objnum == 0) {
+ return NULL;
+ }
+ void* value;
+ {
if (m_IndirectObjs.Lookup((void*)(uintptr_t)objnum, value)) {
- if (value) {
- if (pObj->GetGenNum() <= ((CPDF_Object*)value)->GetGenNum()) {
- return;
- }
- ((CPDF_Object*)value)->Destroy();
- }
- }
- pObj->m_ObjNum = objnum;
- m_IndirectObjs.SetAt((void*)(uintptr_t)objnum, pObj);
- if (m_LastObjNum < objnum) {
- m_LastObjNum = objnum;
- }
-}
-FX_DWORD CPDF_IndirectObjects::GetLastObjNum() const
-{
- return m_LastObjNum;
+ if (((CPDF_Object*)value)->GetObjNum() == -1) {
+ return NULL;
+ }
+ return (CPDF_Object*)value;
+ }
+ }
+ CPDF_Object* pObj = NULL;
+ if (m_pParser) {
+ pObj = m_pParser->ParseIndirectObject(this, objnum, pContext);
+ }
+ if (pObj == NULL) {
+ return NULL;
+ }
+ pObj->m_ObjNum = objnum;
+ if (m_LastObjNum < objnum) {
+ m_LastObjNum = objnum;
+ }
+ if (m_IndirectObjs.Lookup((void*)(uintptr_t)objnum, value)) {
+ if (value) {
+ ((CPDF_Object*)value)->Destroy();
+ }
+ }
+ m_IndirectObjs.SetAt((void*)(uintptr_t)objnum, pObj);
+ return pObj;
+}
+int CPDF_IndirectObjects::GetIndirectType(FX_DWORD objnum) {
+ void* value;
+ if (m_IndirectObjs.Lookup((void*)(uintptr_t)objnum, value)) {
+ return ((CPDF_Object*)value)->GetType();
+ }
+ if (m_pParser) {
+ PARSE_CONTEXT context;
+ FXSYS_memset(&context, 0, sizeof(PARSE_CONTEXT));
+ context.m_Flags = PDFPARSE_TYPEONLY;
+ return (int)(uintptr_t)m_pParser->ParseIndirectObject(this, objnum,
+ &context);
+ }
+ return 0;
+}
+FX_DWORD CPDF_IndirectObjects::AddIndirectObject(CPDF_Object* pObj) {
+ if (pObj->m_ObjNum) {
+ return pObj->m_ObjNum;
+ }
+ m_LastObjNum++;
+ m_IndirectObjs.SetAt((void*)(uintptr_t)m_LastObjNum, pObj);
+ pObj->m_ObjNum = m_LastObjNum;
+ return m_LastObjNum;
+}
+void CPDF_IndirectObjects::ReleaseIndirectObject(FX_DWORD objnum) {
+ void* value;
+ if (!m_IndirectObjs.Lookup((void*)(uintptr_t)objnum, value)) {
+ return;
+ }
+ if (((CPDF_Object*)value)->GetObjNum() == -1) {
+ return;
+ }
+ ((CPDF_Object*)value)->Destroy();
+ m_IndirectObjs.RemoveKey((void*)(uintptr_t)objnum);
+}
+void CPDF_IndirectObjects::InsertIndirectObject(FX_DWORD objnum,
+ CPDF_Object* pObj) {
+ if (objnum == 0 || pObj == NULL) {
+ return;
+ }
+ void* value = NULL;
+ if (m_IndirectObjs.Lookup((void*)(uintptr_t)objnum, value)) {
+ if (value) {
+ if (pObj->GetGenNum() <= ((CPDF_Object*)value)->GetGenNum()) {
+ return;
+ }
+ ((CPDF_Object*)value)->Destroy();
+ }
+ }
+ pObj->m_ObjNum = objnum;
+ m_IndirectObjs.SetAt((void*)(uintptr_t)objnum, pObj);
+ if (m_LastObjNum < objnum) {
+ m_LastObjNum = objnum;
+ }
+}
+FX_DWORD CPDF_IndirectObjects::GetLastObjNum() const {
+ return m_LastObjNum;
}
diff --git a/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp b/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp
index 854be75ad4..d0d449308d 100644
--- a/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp
+++ b/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp
@@ -13,4591 +13,4647 @@
#include "../../../include/fxcrt/fx_safe_types.h"
#include "../fpdf_page/pageint.h"
-FX_BOOL IsSignatureDict(const CPDF_Dictionary* pDict)
-{
- CPDF_Object* pType = pDict->GetElementValue(FX_BSTRC("Type"));
+FX_BOOL IsSignatureDict(const CPDF_Dictionary* pDict) {
+ CPDF_Object* pType = pDict->GetElementValue(FX_BSTRC("Type"));
+ if (!pType) {
+ pType = pDict->GetElementValue(FX_BSTRC("FT"));
if (!pType) {
- pType = pDict->GetElementValue(FX_BSTRC("FT"));
- if (!pType) {
- return FALSE;
- }
- }
- if (pType->GetString() == FX_BSTRC("Sig")) {
- return TRUE;
+ return FALSE;
}
- return FALSE;
+ }
+ if (pType->GetString() == FX_BSTRC("Sig")) {
+ return TRUE;
+ }
+ return FALSE;
}
-static int _CompareFileSize(const void* p1, const void* p2)
-{
- FX_FILESIZE ret = (*(FX_FILESIZE*)p1) - (*(FX_FILESIZE*)p2);
- if (ret > 0) {
- return 1;
- }
- if (ret < 0) {
- return -1;
- }
- return 0;
+static int _CompareFileSize(const void* p1, const void* p2) {
+ FX_FILESIZE ret = (*(FX_FILESIZE*)p1) - (*(FX_FILESIZE*)p2);
+ if (ret > 0) {
+ return 1;
+ }
+ if (ret < 0) {
+ return -1;
+ }
+ return 0;
}
-CPDF_Parser::CPDF_Parser()
-{
- m_pDocument = NULL;
- m_pTrailer = NULL;
- m_pEncryptDict = NULL;
- m_pSecurityHandler = NULL;
- m_pLinearized = NULL;
- m_dwFirstPageNo = 0;
- m_dwXrefStartObjNum = 0;
- m_bOwnFileRead = TRUE;
- m_FileVersion = 0;
- m_bForceUseSecurityHandler = FALSE;
+CPDF_Parser::CPDF_Parser() {
+ m_pDocument = NULL;
+ m_pTrailer = NULL;
+ m_pEncryptDict = NULL;
+ m_pSecurityHandler = NULL;
+ m_pLinearized = NULL;
+ m_dwFirstPageNo = 0;
+ m_dwXrefStartObjNum = 0;
+ m_bOwnFileRead = TRUE;
+ m_FileVersion = 0;
+ m_bForceUseSecurityHandler = FALSE;
}
-CPDF_Parser::~CPDF_Parser()
-{
- CloseParser(FALSE);
+CPDF_Parser::~CPDF_Parser() {
+ CloseParser(FALSE);
}
-FX_DWORD CPDF_Parser::GetLastObjNum()
-{
- FX_DWORD dwSize = m_CrossRef.GetSize();
- return dwSize ? dwSize - 1 : 0;
+FX_DWORD CPDF_Parser::GetLastObjNum() {
+ FX_DWORD dwSize = m_CrossRef.GetSize();
+ return dwSize ? dwSize - 1 : 0;
}
-void CPDF_Parser::SetEncryptDictionary(CPDF_Dictionary* pDict)
-{
- m_pEncryptDict = pDict;
+void CPDF_Parser::SetEncryptDictionary(CPDF_Dictionary* pDict) {
+ m_pEncryptDict = pDict;
}
-void CPDF_Parser::CloseParser(FX_BOOL bReParse)
-{
- m_bVersionUpdated = FALSE;
- if (!bReParse) {
- delete m_pDocument;
- m_pDocument = NULL;
- }
- if (m_pTrailer) {
- m_pTrailer->Release();
- m_pTrailer = NULL;
- }
- ReleaseEncryptHandler();
- SetEncryptDictionary(NULL);
- if (m_bOwnFileRead && m_Syntax.m_pFileAccess) {
- m_Syntax.m_pFileAccess->Release();
- m_Syntax.m_pFileAccess = NULL;
- }
- FX_POSITION pos = m_ObjectStreamMap.GetStartPosition();
- while (pos) {
- void* objnum;
- CPDF_StreamAcc* pStream;
- m_ObjectStreamMap.GetNextAssoc(pos, objnum, (void*&)pStream);
- delete pStream;
- }
- m_ObjectStreamMap.RemoveAll();
- m_SortedOffset.RemoveAll();
- m_CrossRef.RemoveAll();
- m_V5Type.RemoveAll();
- m_ObjVersion.RemoveAll();
- int32_t iLen = m_Trailers.GetSize();
- for (int32_t i = 0; i < iLen; ++i) {
- if (CPDF_Dictionary* trailer = m_Trailers.GetAt(i))
- trailer->Release();
- }
- m_Trailers.RemoveAll();
- if (m_pLinearized) {
- m_pLinearized->Release();
- m_pLinearized = NULL;
- }
+void CPDF_Parser::CloseParser(FX_BOOL bReParse) {
+ m_bVersionUpdated = FALSE;
+ if (!bReParse) {
+ delete m_pDocument;
+ m_pDocument = NULL;
+ }
+ if (m_pTrailer) {
+ m_pTrailer->Release();
+ m_pTrailer = NULL;
+ }
+ ReleaseEncryptHandler();
+ SetEncryptDictionary(NULL);
+ if (m_bOwnFileRead && m_Syntax.m_pFileAccess) {
+ m_Syntax.m_pFileAccess->Release();
+ m_Syntax.m_pFileAccess = NULL;
+ }
+ FX_POSITION pos = m_ObjectStreamMap.GetStartPosition();
+ while (pos) {
+ void* objnum;
+ CPDF_StreamAcc* pStream;
+ m_ObjectStreamMap.GetNextAssoc(pos, objnum, (void*&)pStream);
+ delete pStream;
+ }
+ m_ObjectStreamMap.RemoveAll();
+ m_SortedOffset.RemoveAll();
+ m_CrossRef.RemoveAll();
+ m_V5Type.RemoveAll();
+ m_ObjVersion.RemoveAll();
+ int32_t iLen = m_Trailers.GetSize();
+ for (int32_t i = 0; i < iLen; ++i) {
+ if (CPDF_Dictionary* trailer = m_Trailers.GetAt(i))
+ trailer->Release();
+ }
+ m_Trailers.RemoveAll();
+ if (m_pLinearized) {
+ m_pLinearized->Release();
+ m_pLinearized = NULL;
+ }
}
-static int32_t GetHeaderOffset(IFX_FileRead* pFile)
-{
- FX_DWORD tag = FXDWORD_FROM_LSBFIRST(0x46445025);
- uint8_t buf[4];
- int32_t offset = 0;
- while (1) {
- if (!pFile->ReadBlock(buf, offset, 4)) {
- return -1;
- }
- if (*(FX_DWORD*)buf == tag) {
- return offset;
- }
- offset ++;
- if (offset > 1024) {
- return -1;
- }
- }
- return -1;
+static int32_t GetHeaderOffset(IFX_FileRead* pFile) {
+ FX_DWORD tag = FXDWORD_FROM_LSBFIRST(0x46445025);
+ uint8_t buf[4];
+ int32_t offset = 0;
+ while (1) {
+ if (!pFile->ReadBlock(buf, offset, 4)) {
+ return -1;
+ }
+ if (*(FX_DWORD*)buf == tag) {
+ return offset;
+ }
+ offset++;
+ if (offset > 1024) {
+ return -1;
+ }
+ }
+ return -1;
}
-FX_DWORD CPDF_Parser::StartParse(const FX_CHAR* filename, FX_BOOL bReParse)
-{
- IFX_FileRead* pFileAccess = FX_CreateFileRead(filename);
- if (!pFileAccess) {
- return PDFPARSE_ERROR_FILE;
- }
- return StartParse(pFileAccess, bReParse);
+FX_DWORD CPDF_Parser::StartParse(const FX_CHAR* filename, FX_BOOL bReParse) {
+ IFX_FileRead* pFileAccess = FX_CreateFileRead(filename);
+ if (!pFileAccess) {
+ return PDFPARSE_ERROR_FILE;
+ }
+ return StartParse(pFileAccess, bReParse);
}
-FX_DWORD CPDF_Parser::StartParse(const FX_WCHAR* filename, FX_BOOL bReParse)
-{
- IFX_FileRead* pFileAccess = FX_CreateFileRead(filename);
- if (!pFileAccess) {
- return PDFPARSE_ERROR_FILE;
- }
- return StartParse(pFileAccess, bReParse);
+FX_DWORD CPDF_Parser::StartParse(const FX_WCHAR* filename, FX_BOOL bReParse) {
+ IFX_FileRead* pFileAccess = FX_CreateFileRead(filename);
+ if (!pFileAccess) {
+ return PDFPARSE_ERROR_FILE;
+ }
+ return StartParse(pFileAccess, bReParse);
}
CPDF_SecurityHandler* FPDF_CreateStandardSecurityHandler();
CPDF_SecurityHandler* FPDF_CreatePubKeyHandler(void*);
-FX_DWORD CPDF_Parser::StartParse(IFX_FileRead* pFileAccess, FX_BOOL bReParse, FX_BOOL bOwnFileRead)
-{
- CloseParser(bReParse);
- m_bXRefStream = FALSE;
- m_LastXRefOffset = 0;
- m_bOwnFileRead = bOwnFileRead;
- int32_t offset = GetHeaderOffset(pFileAccess);
- if (offset == -1) {
- if (bOwnFileRead && pFileAccess) {
- pFileAccess->Release();
- }
- return PDFPARSE_ERROR_FORMAT;
- }
- m_Syntax.InitParser(pFileAccess, offset);
- uint8_t ch;
- if (!m_Syntax.GetCharAt(5, ch)) {
- return PDFPARSE_ERROR_FORMAT;
- }
- if (ch >= '0' && ch <= '9') {
- m_FileVersion = (ch - '0') * 10;
- }
- if (!m_Syntax.GetCharAt(7, ch)) {
- return PDFPARSE_ERROR_FORMAT;
+FX_DWORD CPDF_Parser::StartParse(IFX_FileRead* pFileAccess,
+ FX_BOOL bReParse,
+ FX_BOOL bOwnFileRead) {
+ CloseParser(bReParse);
+ m_bXRefStream = FALSE;
+ m_LastXRefOffset = 0;
+ m_bOwnFileRead = bOwnFileRead;
+ int32_t offset = GetHeaderOffset(pFileAccess);
+ if (offset == -1) {
+ if (bOwnFileRead && pFileAccess) {
+ pFileAccess->Release();
+ }
+ return PDFPARSE_ERROR_FORMAT;
+ }
+ m_Syntax.InitParser(pFileAccess, offset);
+ uint8_t ch;
+ if (!m_Syntax.GetCharAt(5, ch)) {
+ return PDFPARSE_ERROR_FORMAT;
+ }
+ if (ch >= '0' && ch <= '9') {
+ m_FileVersion = (ch - '0') * 10;
+ }
+ if (!m_Syntax.GetCharAt(7, ch)) {
+ return PDFPARSE_ERROR_FORMAT;
+ }
+ if (ch >= '0' && ch <= '9') {
+ m_FileVersion += ch - '0';
+ }
+ if (m_Syntax.m_FileLen < m_Syntax.m_HeaderOffset + 9) {
+ return PDFPARSE_ERROR_FORMAT;
+ }
+ m_Syntax.RestorePos(m_Syntax.m_FileLen - m_Syntax.m_HeaderOffset - 9);
+ if (!bReParse) {
+ m_pDocument = new CPDF_Document(this);
+ }
+ FX_BOOL bXRefRebuilt = FALSE;
+ if (m_Syntax.SearchWord(FX_BSTRC("startxref"), TRUE, FALSE, 4096)) {
+ FX_FILESIZE startxref_offset = m_Syntax.SavePos();
+ void* pResult = FXSYS_bsearch(&startxref_offset, m_SortedOffset.GetData(),
+ m_SortedOffset.GetSize(), sizeof(FX_FILESIZE),
+ _CompareFileSize);
+ if (pResult == NULL) {
+ m_SortedOffset.Add(startxref_offset);
}
- if (ch >= '0' && ch <= '9') {
- m_FileVersion += ch - '0';
+ m_Syntax.GetKeyword();
+ FX_BOOL bNumber;
+ CFX_ByteString xrefpos_str = m_Syntax.GetNextWord(bNumber);
+ if (!bNumber) {
+ return PDFPARSE_ERROR_FORMAT;
}
- if (m_Syntax.m_FileLen < m_Syntax.m_HeaderOffset + 9) {
+ m_LastXRefOffset = (FX_FILESIZE)FXSYS_atoi64(xrefpos_str);
+ if (!LoadAllCrossRefV4(m_LastXRefOffset) &&
+ !LoadAllCrossRefV5(m_LastXRefOffset)) {
+ if (!RebuildCrossRef()) {
return PDFPARSE_ERROR_FORMAT;
+ }
+ bXRefRebuilt = TRUE;
+ m_LastXRefOffset = 0;
+ }
+ } else {
+ if (!RebuildCrossRef()) {
+ return PDFPARSE_ERROR_FORMAT;
+ }
+ bXRefRebuilt = TRUE;
+ }
+ FX_DWORD dwRet = SetEncryptHandler();
+ if (dwRet != PDFPARSE_ERROR_SUCCESS) {
+ return dwRet;
+ }
+ m_pDocument->LoadDoc();
+ if (m_pDocument->GetRoot() == NULL || m_pDocument->GetPageCount() == 0) {
+ if (bXRefRebuilt) {
+ return PDFPARSE_ERROR_FORMAT;
}
- m_Syntax.RestorePos(m_Syntax.m_FileLen - m_Syntax.m_HeaderOffset - 9);
- if (!bReParse) {
- m_pDocument = new CPDF_Document(this);
- }
- FX_BOOL bXRefRebuilt = FALSE;
- if (m_Syntax.SearchWord(FX_BSTRC("startxref"), TRUE, FALSE, 4096)) {
- FX_FILESIZE startxref_offset = m_Syntax.SavePos();
- void* pResult = FXSYS_bsearch(&startxref_offset, m_SortedOffset.GetData(), m_SortedOffset.GetSize(), sizeof(FX_FILESIZE), _CompareFileSize);
- if (pResult == NULL) {
- m_SortedOffset.Add(startxref_offset);
- }
- m_Syntax.GetKeyword();
- FX_BOOL bNumber;
- CFX_ByteString xrefpos_str = m_Syntax.GetNextWord(bNumber);
- if (!bNumber) {
- return PDFPARSE_ERROR_FORMAT;
- }
- m_LastXRefOffset = (FX_FILESIZE)FXSYS_atoi64(xrefpos_str);
- if (!LoadAllCrossRefV4(m_LastXRefOffset) && !LoadAllCrossRefV5(m_LastXRefOffset)) {
- if (!RebuildCrossRef()) {
- return PDFPARSE_ERROR_FORMAT;
- }
- bXRefRebuilt = TRUE;
- m_LastXRefOffset = 0;
- }
- } else {
- if (!RebuildCrossRef()) {
- return PDFPARSE_ERROR_FORMAT;
- }
- bXRefRebuilt = TRUE;
+ ReleaseEncryptHandler();
+ if (!RebuildCrossRef()) {
+ return PDFPARSE_ERROR_FORMAT;
}
- FX_DWORD dwRet = SetEncryptHandler();
+ dwRet = SetEncryptHandler();
if (dwRet != PDFPARSE_ERROR_SUCCESS) {
- return dwRet;
+ return dwRet;
}
m_pDocument->LoadDoc();
- if (m_pDocument->GetRoot() == NULL || m_pDocument->GetPageCount() == 0) {
- if (bXRefRebuilt) {
- return PDFPARSE_ERROR_FORMAT;
- }
- ReleaseEncryptHandler();
- if (!RebuildCrossRef()) {
- return PDFPARSE_ERROR_FORMAT;
- }
- dwRet = SetEncryptHandler();
- if (dwRet != PDFPARSE_ERROR_SUCCESS) {
- return dwRet;
- }
- m_pDocument->LoadDoc();
- if (m_pDocument->GetRoot() == NULL) {
- return PDFPARSE_ERROR_FORMAT;
- }
- }
- FXSYS_qsort(m_SortedOffset.GetData(), m_SortedOffset.GetSize(), sizeof(FX_FILESIZE), _CompareFileSize);
- FX_DWORD RootObjNum = GetRootObjNum();
+ if (m_pDocument->GetRoot() == NULL) {
+ return PDFPARSE_ERROR_FORMAT;
+ }
+ }
+ FXSYS_qsort(m_SortedOffset.GetData(), m_SortedOffset.GetSize(),
+ sizeof(FX_FILESIZE), _CompareFileSize);
+ FX_DWORD RootObjNum = GetRootObjNum();
+ if (RootObjNum == 0) {
+ ReleaseEncryptHandler();
+ RebuildCrossRef();
+ RootObjNum = GetRootObjNum();
if (RootObjNum == 0) {
- ReleaseEncryptHandler();
- RebuildCrossRef();
- RootObjNum = GetRootObjNum();
- if (RootObjNum == 0) {
- return PDFPARSE_ERROR_FORMAT;
- }
- dwRet = SetEncryptHandler();
- if (dwRet != PDFPARSE_ERROR_SUCCESS) {
- return dwRet;
- }
- }
- if (m_pSecurityHandler && !m_pSecurityHandler->IsMetadataEncrypted()) {
- CPDF_Reference* pMetadata = (CPDF_Reference*)m_pDocument->GetRoot()->GetElement(FX_BSTRC("Metadata"));
- if (pMetadata && pMetadata->GetType() == PDFOBJ_REFERENCE) {
- m_Syntax.m_MetadataObjnum = pMetadata->GetRefObjNum();
- }
+ return PDFPARSE_ERROR_FORMAT;
}
- return PDFPARSE_ERROR_SUCCESS;
+ dwRet = SetEncryptHandler();
+ if (dwRet != PDFPARSE_ERROR_SUCCESS) {
+ return dwRet;
+ }
+ }
+ if (m_pSecurityHandler && !m_pSecurityHandler->IsMetadataEncrypted()) {
+ CPDF_Reference* pMetadata =
+ (CPDF_Reference*)m_pDocument->GetRoot()->GetElement(
+ FX_BSTRC("Metadata"));
+ if (pMetadata && pMetadata->GetType() == PDFOBJ_REFERENCE) {
+ m_Syntax.m_MetadataObjnum = pMetadata->GetRefObjNum();
+ }
+ }
+ return PDFPARSE_ERROR_SUCCESS;
}
-FX_DWORD CPDF_Parser::SetEncryptHandler()
-{
- ReleaseEncryptHandler();
- SetEncryptDictionary(NULL);
- if (m_pTrailer == NULL) {
- return PDFPARSE_ERROR_FORMAT;
- }
- CPDF_Object* pEncryptObj = m_pTrailer->GetElement(FX_BSTRC("Encrypt"));
- if (pEncryptObj) {
- if (pEncryptObj->GetType() == PDFOBJ_DICTIONARY) {
- SetEncryptDictionary((CPDF_Dictionary*)pEncryptObj);
- } else if (pEncryptObj->GetType() == PDFOBJ_REFERENCE) {
- pEncryptObj = m_pDocument->GetIndirectObject(((CPDF_Reference*)pEncryptObj)->GetRefObjNum());
- if (pEncryptObj) {
- SetEncryptDictionary(pEncryptObj->GetDict());
- }
- }
- }
- if (m_bForceUseSecurityHandler) {
- FX_DWORD err = PDFPARSE_ERROR_HANDLER;
- if (m_pSecurityHandler == NULL) {
- return PDFPARSE_ERROR_HANDLER;
- }
- if (!m_pSecurityHandler->OnInit(this, m_pEncryptDict)) {
- return err;
- }
- CPDF_CryptoHandler* pCryptoHandler = m_pSecurityHandler->CreateCryptoHandler();
- if (!pCryptoHandler->Init(m_pEncryptDict, m_pSecurityHandler)) {
- delete pCryptoHandler;
- pCryptoHandler = NULL;
- return PDFPARSE_ERROR_HANDLER;
- }
- m_Syntax.SetEncrypt(pCryptoHandler);
- } else if (m_pEncryptDict) {
- CFX_ByteString filter = m_pEncryptDict->GetString(FX_BSTRC("Filter"));
- CPDF_SecurityHandler* pSecurityHandler = NULL;
- FX_DWORD err = PDFPARSE_ERROR_HANDLER;
- if (filter == FX_BSTRC("Standard")) {
- pSecurityHandler = FPDF_CreateStandardSecurityHandler();
- err = PDFPARSE_ERROR_PASSWORD;
- }
- if (pSecurityHandler == NULL) {
- return PDFPARSE_ERROR_HANDLER;
- }
- if (!pSecurityHandler->OnInit(this, m_pEncryptDict)) {
- delete pSecurityHandler;
- pSecurityHandler = NULL;
- return err;
- }
- m_pSecurityHandler = pSecurityHandler;
- CPDF_CryptoHandler* pCryptoHandler = pSecurityHandler->CreateCryptoHandler();
- if (!pCryptoHandler->Init(m_pEncryptDict, m_pSecurityHandler)) {
- delete pCryptoHandler;
- pCryptoHandler = NULL;
- return PDFPARSE_ERROR_HANDLER;
- }
- m_Syntax.SetEncrypt(pCryptoHandler);
+FX_DWORD CPDF_Parser::SetEncryptHandler() {
+ ReleaseEncryptHandler();
+ SetEncryptDictionary(NULL);
+ if (m_pTrailer == NULL) {
+ return PDFPARSE_ERROR_FORMAT;
+ }
+ CPDF_Object* pEncryptObj = m_pTrailer->GetElement(FX_BSTRC("Encrypt"));
+ if (pEncryptObj) {
+ if (pEncryptObj->GetType() == PDFOBJ_DICTIONARY) {
+ SetEncryptDictionary((CPDF_Dictionary*)pEncryptObj);
+ } else if (pEncryptObj->GetType() == PDFOBJ_REFERENCE) {
+ pEncryptObj = m_pDocument->GetIndirectObject(
+ ((CPDF_Reference*)pEncryptObj)->GetRefObjNum());
+ if (pEncryptObj) {
+ SetEncryptDictionary(pEncryptObj->GetDict());
+ }
+ }
+ }
+ if (m_bForceUseSecurityHandler) {
+ FX_DWORD err = PDFPARSE_ERROR_HANDLER;
+ if (m_pSecurityHandler == NULL) {
+ return PDFPARSE_ERROR_HANDLER;
+ }
+ if (!m_pSecurityHandler->OnInit(this, m_pEncryptDict)) {
+ return err;
+ }
+ CPDF_CryptoHandler* pCryptoHandler =
+ m_pSecurityHandler->CreateCryptoHandler();
+ if (!pCryptoHandler->Init(m_pEncryptDict, m_pSecurityHandler)) {
+ delete pCryptoHandler;
+ pCryptoHandler = NULL;
+ return PDFPARSE_ERROR_HANDLER;
+ }
+ m_Syntax.SetEncrypt(pCryptoHandler);
+ } else if (m_pEncryptDict) {
+ CFX_ByteString filter = m_pEncryptDict->GetString(FX_BSTRC("Filter"));
+ CPDF_SecurityHandler* pSecurityHandler = NULL;
+ FX_DWORD err = PDFPARSE_ERROR_HANDLER;
+ if (filter == FX_BSTRC("Standard")) {
+ pSecurityHandler = FPDF_CreateStandardSecurityHandler();
+ err = PDFPARSE_ERROR_PASSWORD;
+ }
+ if (pSecurityHandler == NULL) {
+ return PDFPARSE_ERROR_HANDLER;
+ }
+ if (!pSecurityHandler->OnInit(this, m_pEncryptDict)) {
+ delete pSecurityHandler;
+ pSecurityHandler = NULL;
+ return err;
}
- return PDFPARSE_ERROR_SUCCESS;
+ m_pSecurityHandler = pSecurityHandler;
+ CPDF_CryptoHandler* pCryptoHandler =
+ pSecurityHandler->CreateCryptoHandler();
+ if (!pCryptoHandler->Init(m_pEncryptDict, m_pSecurityHandler)) {
+ delete pCryptoHandler;
+ pCryptoHandler = NULL;
+ return PDFPARSE_ERROR_HANDLER;
+ }
+ m_Syntax.SetEncrypt(pCryptoHandler);
+ }
+ return PDFPARSE_ERROR_SUCCESS;
}
-void CPDF_Parser::ReleaseEncryptHandler()
-{
- delete m_Syntax.m_pCryptoHandler;
- m_Syntax.m_pCryptoHandler = NULL;
- if (!m_bForceUseSecurityHandler) {
- delete m_pSecurityHandler;
- m_pSecurityHandler = NULL;
- }
+void CPDF_Parser::ReleaseEncryptHandler() {
+ delete m_Syntax.m_pCryptoHandler;
+ m_Syntax.m_pCryptoHandler = NULL;
+ if (!m_bForceUseSecurityHandler) {
+ delete m_pSecurityHandler;
+ m_pSecurityHandler = NULL;
+ }
}
-FX_FILESIZE CPDF_Parser::GetObjectOffset(FX_DWORD objnum)
-{
- if (objnum >= (FX_DWORD)m_CrossRef.GetSize()) {
- return 0;
- }
- if (m_V5Type[objnum] == 1) {
- return m_CrossRef[objnum];
- }
- if (m_V5Type[objnum] == 2) {
- return m_CrossRef[(int32_t)m_CrossRef[objnum]];
- }
+FX_FILESIZE CPDF_Parser::GetObjectOffset(FX_DWORD objnum) {
+ if (objnum >= (FX_DWORD)m_CrossRef.GetSize()) {
return 0;
+ }
+ if (m_V5Type[objnum] == 1) {
+ return m_CrossRef[objnum];
+ }
+ if (m_V5Type[objnum] == 2) {
+ return m_CrossRef[(int32_t)m_CrossRef[objnum]];
+ }
+ return 0;
}
-static int32_t GetDirectInteger(CPDF_Dictionary* pDict, const CFX_ByteStringC& key)
-{
- CPDF_Object* pObj = pDict->GetElement(key);
- if (pObj == NULL) {
- return 0;
- }
- if (pObj->GetType() == PDFOBJ_NUMBER) {
- return ((CPDF_Number*)pObj)->GetInteger();
- }
+static int32_t GetDirectInteger(CPDF_Dictionary* pDict,
+ const CFX_ByteStringC& key) {
+ CPDF_Object* pObj = pDict->GetElement(key);
+ if (pObj == NULL) {
return 0;
+ }
+ if (pObj->GetType() == PDFOBJ_NUMBER) {
+ return ((CPDF_Number*)pObj)->GetInteger();
+ }
+ return 0;
}
-static FX_BOOL CheckDirectType(CPDF_Dictionary* pDict, const CFX_ByteStringC& key, int32_t iType)
-{
- CPDF_Object* pObj = pDict->GetElement(key);
- if (!pObj) {
- return TRUE;
- }
- return pObj->GetType() == iType;
+static FX_BOOL CheckDirectType(CPDF_Dictionary* pDict,
+ const CFX_ByteStringC& key,
+ int32_t iType) {
+ CPDF_Object* pObj = pDict->GetElement(key);
+ if (!pObj) {
+ return TRUE;
+ }
+ return pObj->GetType() == iType;
}
-FX_BOOL CPDF_Parser::LoadAllCrossRefV4(FX_FILESIZE xrefpos)
-{
- if (!LoadCrossRefV4(xrefpos, 0, TRUE, FALSE)) {
- return FALSE;
- }
- m_pTrailer = LoadTrailerV4();
- if (m_pTrailer == NULL) {
- return FALSE;
- }
- int32_t xrefsize = GetDirectInteger(m_pTrailer, FX_BSTRC("Size"));
- if (xrefsize <= 0 || xrefsize > (1 << 20)) {
- return FALSE;
- }
- m_CrossRef.SetSize(xrefsize);
- m_V5Type.SetSize(xrefsize);
- CFX_FileSizeArray CrossRefList, XRefStreamList;
- CrossRefList.Add(xrefpos);
- XRefStreamList.Add(GetDirectInteger(m_pTrailer, FX_BSTRC("XRefStm")));
- if (!CheckDirectType(m_pTrailer, FX_BSTRC("Prev"), PDFOBJ_NUMBER)) {
- return FALSE;
- }
- FX_FILESIZE newxrefpos = GetDirectInteger(m_pTrailer, FX_BSTRC("Prev"));
+FX_BOOL CPDF_Parser::LoadAllCrossRefV4(FX_FILESIZE xrefpos) {
+ if (!LoadCrossRefV4(xrefpos, 0, TRUE, FALSE)) {
+ return FALSE;
+ }
+ m_pTrailer = LoadTrailerV4();
+ if (m_pTrailer == NULL) {
+ return FALSE;
+ }
+ int32_t xrefsize = GetDirectInteger(m_pTrailer, FX_BSTRC("Size"));
+ if (xrefsize <= 0 || xrefsize > (1 << 20)) {
+ return FALSE;
+ }
+ m_CrossRef.SetSize(xrefsize);
+ m_V5Type.SetSize(xrefsize);
+ CFX_FileSizeArray CrossRefList, XRefStreamList;
+ CrossRefList.Add(xrefpos);
+ XRefStreamList.Add(GetDirectInteger(m_pTrailer, FX_BSTRC("XRefStm")));
+ if (!CheckDirectType(m_pTrailer, FX_BSTRC("Prev"), PDFOBJ_NUMBER)) {
+ return FALSE;
+ }
+ FX_FILESIZE newxrefpos = GetDirectInteger(m_pTrailer, FX_BSTRC("Prev"));
+ if (newxrefpos == xrefpos) {
+ return FALSE;
+ }
+ xrefpos = newxrefpos;
+ while (xrefpos) {
+ CrossRefList.InsertAt(0, xrefpos);
+ LoadCrossRefV4(xrefpos, 0, TRUE, FALSE);
+ CPDF_Dictionary* pDict = LoadTrailerV4();
+ if (pDict == NULL) {
+ return FALSE;
+ }
+ if (!CheckDirectType(pDict, FX_BSTRC("Prev"), PDFOBJ_NUMBER)) {
+ pDict->Release();
+ return FALSE;
+ }
+ newxrefpos = GetDirectInteger(pDict, FX_BSTRC("Prev"));
if (newxrefpos == xrefpos) {
- return FALSE;
+ pDict->Release();
+ return FALSE;
}
xrefpos = newxrefpos;
- while (xrefpos) {
- CrossRefList.InsertAt(0, xrefpos);
- LoadCrossRefV4(xrefpos, 0, TRUE, FALSE);
- CPDF_Dictionary* pDict = LoadTrailerV4();
- if (pDict == NULL) {
- return FALSE;
- }
- if (!CheckDirectType(pDict, FX_BSTRC("Prev"), PDFOBJ_NUMBER)) {
- pDict->Release();
- return FALSE;
- }
- newxrefpos = GetDirectInteger(pDict, FX_BSTRC("Prev"));
- if (newxrefpos == xrefpos) {
- pDict->Release();
- return FALSE;
- }
- xrefpos = newxrefpos;
- XRefStreamList.InsertAt(0, pDict->GetInteger(FX_BSTRC("XRefStm")));
- m_Trailers.Add(pDict);
- }
- for (int32_t i = 0; i < CrossRefList.GetSize(); i ++)
- if (!LoadCrossRefV4(CrossRefList[i], XRefStreamList[i], FALSE, i == 0)) {
- return FALSE;
- }
- return TRUE;
+ XRefStreamList.InsertAt(0, pDict->GetInteger(FX_BSTRC("XRefStm")));
+ m_Trailers.Add(pDict);
+ }
+ for (int32_t i = 0; i < CrossRefList.GetSize(); i++)
+ if (!LoadCrossRefV4(CrossRefList[i], XRefStreamList[i], FALSE, i == 0)) {
+ return FALSE;
+ }
+ return TRUE;
}
-FX_BOOL CPDF_Parser::LoadLinearizedAllCrossRefV4(FX_FILESIZE xrefpos, FX_DWORD dwObjCount)
-{
- if (!LoadLinearizedCrossRefV4(xrefpos, dwObjCount)) {
- return FALSE;
- }
- m_pTrailer = LoadTrailerV4();
- if (m_pTrailer == NULL) {
- return FALSE;
- }
- int32_t xrefsize = GetDirectInteger(m_pTrailer, FX_BSTRC("Size"));
- if (xrefsize == 0) {
- return FALSE;
- }
- CFX_FileSizeArray CrossRefList, XRefStreamList;
- CrossRefList.Add(xrefpos);
- XRefStreamList.Add(GetDirectInteger(m_pTrailer, FX_BSTRC("XRefStm")));
- xrefpos = GetDirectInteger(m_pTrailer, FX_BSTRC("Prev"));
- while (xrefpos) {
- CrossRefList.InsertAt(0, xrefpos);
- LoadCrossRefV4(xrefpos, 0, TRUE, FALSE);
- CPDF_Dictionary* pDict = LoadTrailerV4();
- if (pDict == NULL) {
- return FALSE;
- }
- xrefpos = GetDirectInteger(pDict, FX_BSTRC("Prev"));
- XRefStreamList.InsertAt(0, pDict->GetInteger(FX_BSTRC("XRefStm")));
- m_Trailers.Add(pDict);
- }
- for (int32_t i = 1; i < CrossRefList.GetSize(); i ++)
- if (!LoadCrossRefV4(CrossRefList[i], XRefStreamList[i], FALSE, i == 0)) {
- return FALSE;
- }
- return TRUE;
+FX_BOOL CPDF_Parser::LoadLinearizedAllCrossRefV4(FX_FILESIZE xrefpos,
+ FX_DWORD dwObjCount) {
+ if (!LoadLinearizedCrossRefV4(xrefpos, dwObjCount)) {
+ return FALSE;
+ }
+ m_pTrailer = LoadTrailerV4();
+ if (m_pTrailer == NULL) {
+ return FALSE;
+ }
+ int32_t xrefsize = GetDirectInteger(m_pTrailer, FX_BSTRC("Size"));
+ if (xrefsize == 0) {
+ return FALSE;
+ }
+ CFX_FileSizeArray CrossRefList, XRefStreamList;
+ CrossRefList.Add(xrefpos);
+ XRefStreamList.Add(GetDirectInteger(m_pTrailer, FX_BSTRC("XRefStm")));
+ xrefpos = GetDirectInteger(m_pTrailer, FX_BSTRC("Prev"));
+ while (xrefpos) {
+ CrossRefList.InsertAt(0, xrefpos);
+ LoadCrossRefV4(xrefpos, 0, TRUE, FALSE);
+ CPDF_Dictionary* pDict = LoadTrailerV4();
+ if (pDict == NULL) {
+ return FALSE;
+ }
+ xrefpos = GetDirectInteger(pDict, FX_BSTRC("Prev"));
+ XRefStreamList.InsertAt(0, pDict->GetInteger(FX_BSTRC("XRefStm")));
+ m_Trailers.Add(pDict);
+ }
+ for (int32_t i = 1; i < CrossRefList.GetSize(); i++)
+ if (!LoadCrossRefV4(CrossRefList[i], XRefStreamList[i], FALSE, i == 0)) {
+ return FALSE;
+ }
+ return TRUE;
}
-FX_BOOL CPDF_Parser::LoadLinearizedCrossRefV4(FX_FILESIZE pos, FX_DWORD dwObjCount)
-{
- FX_FILESIZE dwStartPos = pos - m_Syntax.m_HeaderOffset;
- m_Syntax.RestorePos(dwStartPos);
- void* pResult = FXSYS_bsearch(&pos, m_SortedOffset.GetData(), m_SortedOffset.GetSize(), sizeof(FX_FILESIZE), _CompareFileSize);
+FX_BOOL CPDF_Parser::LoadLinearizedCrossRefV4(FX_FILESIZE pos,
+ FX_DWORD dwObjCount) {
+ FX_FILESIZE dwStartPos = pos - m_Syntax.m_HeaderOffset;
+ m_Syntax.RestorePos(dwStartPos);
+ void* pResult =
+ FXSYS_bsearch(&pos, m_SortedOffset.GetData(), m_SortedOffset.GetSize(),
+ sizeof(FX_FILESIZE), _CompareFileSize);
+ if (pResult == NULL) {
+ m_SortedOffset.Add(pos);
+ }
+ FX_DWORD start_objnum = 0;
+ FX_DWORD count = dwObjCount;
+ FX_FILESIZE SavedPos = m_Syntax.SavePos();
+ int32_t recordsize = 20;
+ char* pBuf = FX_Alloc(char, 1024 * recordsize + 1);
+ pBuf[1024 * recordsize] = '\0';
+ int32_t nBlocks = count / 1024 + 1;
+ for (int32_t block = 0; block < nBlocks; block++) {
+ int32_t block_size = block == nBlocks - 1 ? count % 1024 : 1024;
+ FX_DWORD dwReadSize = block_size * recordsize;
+ if ((FX_FILESIZE)(dwStartPos + dwReadSize) > m_Syntax.m_FileLen) {
+ FX_Free(pBuf);
+ return FALSE;
+ }
+ if (!m_Syntax.ReadBlock((uint8_t*)pBuf, dwReadSize)) {
+ FX_Free(pBuf);
+ return FALSE;
+ }
+ for (int32_t i = 0; i < block_size; i++) {
+ FX_DWORD objnum = start_objnum + block * 1024 + i;
+ char* pEntry = pBuf + i * recordsize;
+ if (pEntry[17] == 'f') {
+ m_CrossRef.SetAtGrow(objnum, 0);
+ m_V5Type.SetAtGrow(objnum, 0);
+ } else {
+ int32_t offset = FXSYS_atoi(pEntry);
+ if (offset == 0) {
+ for (int32_t c = 0; c < 10; c++) {
+ if (pEntry[c] < '0' || pEntry[c] > '9') {
+ FX_Free(pBuf);
+ return FALSE;
+ }
+ }
+ }
+ m_CrossRef.SetAtGrow(objnum, offset);
+ int32_t version = FXSYS_atoi(pEntry + 11);
+ if (version >= 1) {
+ m_bVersionUpdated = TRUE;
+ }
+ m_ObjVersion.SetAtGrow(objnum, version);
+ if (m_CrossRef[objnum] < m_Syntax.m_FileLen) {
+ void* pResult = FXSYS_bsearch(
+ &m_CrossRef[objnum], m_SortedOffset.GetData(),
+ m_SortedOffset.GetSize(), sizeof(FX_FILESIZE), _CompareFileSize);
+ if (pResult == NULL) {
+ m_SortedOffset.Add(m_CrossRef[objnum]);
+ }
+ }
+ m_V5Type.SetAtGrow(objnum, 1);
+ }
+ }
+ }
+ FX_Free(pBuf);
+ m_Syntax.RestorePos(SavedPos + count * recordsize);
+ return TRUE;
+}
+FX_BOOL CPDF_Parser::LoadCrossRefV4(FX_FILESIZE pos,
+ FX_FILESIZE streampos,
+ FX_BOOL bSkip,
+ FX_BOOL bFirst) {
+ m_Syntax.RestorePos(pos);
+ if (m_Syntax.GetKeyword() != FX_BSTRC("xref")) {
+ return FALSE;
+ }
+ void* pResult =
+ FXSYS_bsearch(&pos, m_SortedOffset.GetData(), m_SortedOffset.GetSize(),
+ sizeof(FX_FILESIZE), _CompareFileSize);
+ if (pResult == NULL) {
+ m_SortedOffset.Add(pos);
+ }
+ if (streampos) {
+ void* pResult = FXSYS_bsearch(&streampos, m_SortedOffset.GetData(),
+ m_SortedOffset.GetSize(), sizeof(FX_FILESIZE),
+ _CompareFileSize);
if (pResult == NULL) {
- m_SortedOffset.Add(pos);
+ m_SortedOffset.Add(streampos);
}
- FX_DWORD start_objnum = 0;
- FX_DWORD count = dwObjCount;
+ }
+ while (1) {
FX_FILESIZE SavedPos = m_Syntax.SavePos();
+ FX_BOOL bIsNumber;
+ CFX_ByteString word = m_Syntax.GetNextWord(bIsNumber);
+ if (word.IsEmpty()) {
+ return FALSE;
+ }
+ if (!bIsNumber) {
+ m_Syntax.RestorePos(SavedPos);
+ break;
+ }
+ FX_DWORD start_objnum = FXSYS_atoi(word);
+ if (start_objnum >= (1 << 20)) {
+ return FALSE;
+ }
+ FX_DWORD count = m_Syntax.GetDirectNum();
+ m_Syntax.ToNextWord();
+ SavedPos = m_Syntax.SavePos();
+ FX_BOOL bFirstItem = FALSE;
int32_t recordsize = 20;
- char* pBuf = FX_Alloc(char, 1024 * recordsize + 1);
- pBuf[1024 * recordsize] = '\0';
- int32_t nBlocks = count / 1024 + 1;
- for (int32_t block = 0; block < nBlocks; block ++) {
+ if (bFirst) {
+ bFirstItem = TRUE;
+ }
+ m_dwXrefStartObjNum = start_objnum;
+ if (!bSkip) {
+ char* pBuf = FX_Alloc(char, 1024 * recordsize + 1);
+ pBuf[1024 * recordsize] = '\0';
+ int32_t nBlocks = count / 1024 + 1;
+ FX_BOOL bFirstBlock = TRUE;
+ for (int32_t block = 0; block < nBlocks; block++) {
int32_t block_size = block == nBlocks - 1 ? count % 1024 : 1024;
- FX_DWORD dwReadSize = block_size * recordsize;
- if ((FX_FILESIZE)(dwStartPos + dwReadSize) > m_Syntax.m_FileLen) {
- FX_Free(pBuf);
- return FALSE;
- }
- if (!m_Syntax.ReadBlock((uint8_t*)pBuf, dwReadSize)) {
- FX_Free(pBuf);
- return FALSE;
- }
- for (int32_t i = 0; i < block_size; i ++) {
- FX_DWORD objnum = start_objnum + block * 1024 + i;
- char* pEntry = pBuf + i * recordsize;
- if (pEntry[17] == 'f') {
- m_CrossRef.SetAtGrow(objnum, 0);
- m_V5Type.SetAtGrow(objnum, 0);
- } else {
- int32_t offset = FXSYS_atoi(pEntry);
- if (offset == 0) {
- for (int32_t c = 0; c < 10; c ++) {
- if (pEntry[c] < '0' || pEntry[c] > '9') {
- FX_Free(pBuf);
- return FALSE;
- }
- }
- }
- m_CrossRef.SetAtGrow(objnum, offset);
- int32_t version = FXSYS_atoi(pEntry + 11);
- if (version >= 1) {
- m_bVersionUpdated = TRUE;
- }
- m_ObjVersion.SetAtGrow(objnum, version);
- if (m_CrossRef[objnum] < m_Syntax.m_FileLen) {
- void* pResult = FXSYS_bsearch(&m_CrossRef[objnum], m_SortedOffset.GetData(), m_SortedOffset.GetSize(), sizeof(FX_FILESIZE), _CompareFileSize);
- if (pResult == NULL) {
- m_SortedOffset.Add(m_CrossRef[objnum]);
- }
+ m_Syntax.ReadBlock((uint8_t*)pBuf, block_size * recordsize);
+ for (int32_t i = 0; i < block_size; i++) {
+ FX_DWORD objnum = start_objnum + block * 1024 + i;
+ char* pEntry = pBuf + i * recordsize;
+ if (pEntry[17] == 'f') {
+ if (bFirstItem) {
+ objnum = 0;
+ bFirstItem = FALSE;
+ }
+ if (bFirstBlock) {
+ FX_FILESIZE offset = (FX_FILESIZE)FXSYS_atoi64(pEntry);
+ int32_t version = FXSYS_atoi(pEntry + 11);
+ if (offset == 0 && version == 65535 && start_objnum != 0) {
+ start_objnum--;
+ objnum = 0;
+ }
+ }
+ m_CrossRef.SetAtGrow(objnum, 0);
+ m_V5Type.SetAtGrow(objnum, 0);
+ } else {
+ FX_FILESIZE offset = (FX_FILESIZE)FXSYS_atoi64(pEntry);
+ if (offset == 0) {
+ for (int32_t c = 0; c < 10; c++) {
+ if (pEntry[c] < '0' || pEntry[c] > '9') {
+ FX_Free(pBuf);
+ return FALSE;
}
- m_V5Type.SetAtGrow(objnum, 1);
+ }
+ }
+ m_CrossRef.SetAtGrow(objnum, offset);
+ int32_t version = FXSYS_atoi(pEntry + 11);
+ if (version >= 1) {
+ m_bVersionUpdated = TRUE;
}
+ m_ObjVersion.SetAtGrow(objnum, version);
+ if (m_CrossRef[objnum] < m_Syntax.m_FileLen) {
+ void* pResult =
+ FXSYS_bsearch(&m_CrossRef[objnum], m_SortedOffset.GetData(),
+ m_SortedOffset.GetSize(), sizeof(FX_FILESIZE),
+ _CompareFileSize);
+ if (pResult == NULL) {
+ m_SortedOffset.Add(m_CrossRef[objnum]);
+ }
+ }
+ m_V5Type.SetAtGrow(objnum, 1);
+ }
+ if (bFirstBlock) {
+ bFirstBlock = FALSE;
+ }
}
+ }
+ FX_Free(pBuf);
}
- FX_Free(pBuf);
m_Syntax.RestorePos(SavedPos + count * recordsize);
- return TRUE;
-}
-FX_BOOL CPDF_Parser::LoadCrossRefV4(FX_FILESIZE pos, FX_FILESIZE streampos, FX_BOOL bSkip, FX_BOOL bFirst)
-{
- m_Syntax.RestorePos(pos);
- if (m_Syntax.GetKeyword() != FX_BSTRC("xref")) {
- return FALSE;
- }
- void* pResult = FXSYS_bsearch(&pos, m_SortedOffset.GetData(), m_SortedOffset.GetSize(), sizeof(FX_FILESIZE), _CompareFileSize);
- if (pResult == NULL) {
- m_SortedOffset.Add(pos);
+ }
+ if (streampos)
+ if (!LoadCrossRefV5(streampos, streampos, FALSE)) {
+ return FALSE;
}
- if (streampos) {
- void* pResult = FXSYS_bsearch(&streampos, m_SortedOffset.GetData(), m_SortedOffset.GetSize(), sizeof(FX_FILESIZE), _CompareFileSize);
- if (pResult == NULL) {
- m_SortedOffset.Add(streampos);
- }
+ return TRUE;
+}
+FX_BOOL CPDF_Parser::LoadAllCrossRefV5(FX_FILESIZE xrefpos) {
+ if (!LoadCrossRefV5(xrefpos, xrefpos, TRUE)) {
+ return FALSE;
+ }
+ while (xrefpos)
+ if (!LoadCrossRefV5(xrefpos, xrefpos, FALSE)) {
+ return FALSE;
}
- while (1) {
- FX_FILESIZE SavedPos = m_Syntax.SavePos();
- FX_BOOL bIsNumber;
- CFX_ByteString word = m_Syntax.GetNextWord(bIsNumber);
- if (word.IsEmpty()) {
- return FALSE;
- }
- if (!bIsNumber) {
- m_Syntax.RestorePos(SavedPos);
+ m_ObjectStreamMap.InitHashTable(101, FALSE);
+ m_bXRefStream = TRUE;
+ return TRUE;
+}
+FX_BOOL CPDF_Parser::RebuildCrossRef() {
+ m_CrossRef.RemoveAll();
+ m_V5Type.RemoveAll();
+ m_SortedOffset.RemoveAll();
+ m_ObjVersion.RemoveAll();
+ if (m_pTrailer) {
+ m_pTrailer->Release();
+ m_pTrailer = NULL;
+ }
+ int32_t status = 0;
+ int32_t inside_index = 0;
+ FX_DWORD objnum = 0, gennum = 0;
+ int32_t depth = 0;
+ uint8_t* buffer = FX_Alloc(uint8_t, 4096);
+ FX_FILESIZE pos = m_Syntax.m_HeaderOffset;
+ FX_FILESIZE start_pos = 0, start_pos1 = 0;
+ FX_FILESIZE last_obj = -1, last_xref = -1, last_trailer = -1;
+ while (pos < m_Syntax.m_FileLen) {
+ FX_BOOL bOverFlow = FALSE;
+ FX_DWORD size = (FX_DWORD)(m_Syntax.m_FileLen - pos);
+ if (size > 4096) {
+ size = 4096;
+ }
+ if (!m_Syntax.m_pFileAccess->ReadBlock(buffer, pos, size)) {
+ break;
+ }
+ for (FX_DWORD i = 0; i < size; i++) {
+ uint8_t byte = buffer[i];
+ switch (status) {
+ case 0:
+ if (PDF_CharType[byte] == 'W') {
+ status = 1;
+ }
+ if (byte <= '9' && byte >= '0') {
+ --i;
+ status = 1;
+ }
+ if (byte == '%') {
+ inside_index = 0;
+ status = 9;
+ }
+ if (byte == '(') {
+ status = 10;
+ depth = 1;
+ }
+ if (byte == '<') {
+ inside_index = 1;
+ status = 11;
+ }
+ if (byte == '\\') {
+ status = 13;
+ }
+ if (byte == 't') {
+ status = 7;
+ inside_index = 1;
+ }
+ break;
+ case 1:
+ if (PDF_CharType[byte] == 'W') {
break;
- }
- FX_DWORD start_objnum = FXSYS_atoi(word);
- if (start_objnum >= (1 << 20)) {
- return FALSE;
- }
- FX_DWORD count = m_Syntax.GetDirectNum();
- m_Syntax.ToNextWord();
- SavedPos = m_Syntax.SavePos();
- FX_BOOL bFirstItem = FALSE;
- int32_t recordsize = 20;
- if (bFirst) {
- bFirstItem = TRUE;
- }
- m_dwXrefStartObjNum = start_objnum;
- if (!bSkip) {
- char* pBuf = FX_Alloc(char, 1024 * recordsize + 1);
- pBuf[1024 * recordsize] = '\0';
- int32_t nBlocks = count / 1024 + 1;
- FX_BOOL bFirstBlock = TRUE;
- for (int32_t block = 0; block < nBlocks; block ++) {
- int32_t block_size = block == nBlocks - 1 ? count % 1024 : 1024;
- m_Syntax.ReadBlock((uint8_t*)pBuf, block_size * recordsize);
- for (int32_t i = 0; i < block_size; i ++) {
- FX_DWORD objnum = start_objnum + block * 1024 + i;
- char* pEntry = pBuf + i * recordsize;
- if (pEntry[17] == 'f') {
- if (bFirstItem) {
- objnum = 0;
- bFirstItem = FALSE;
- }
- if (bFirstBlock) {
- FX_FILESIZE offset = (FX_FILESIZE)FXSYS_atoi64(pEntry);
- int32_t version = FXSYS_atoi(pEntry + 11);
- if (offset == 0 && version == 65535 && start_objnum != 0) {
- start_objnum--;
- objnum = 0;
- }
- }
- m_CrossRef.SetAtGrow(objnum, 0);
- m_V5Type.SetAtGrow(objnum, 0);
- } else {
- FX_FILESIZE offset = (FX_FILESIZE)FXSYS_atoi64(pEntry);
- if (offset == 0) {
- for (int32_t c = 0; c < 10; c ++) {
- if (pEntry[c] < '0' || pEntry[c] > '9') {
- FX_Free(pBuf);
- return FALSE;
- }
- }
- }
- m_CrossRef.SetAtGrow(objnum, offset);
- int32_t version = FXSYS_atoi(pEntry + 11);
- if (version >= 1) {
- m_bVersionUpdated = TRUE;
- }
- m_ObjVersion.SetAtGrow(objnum, version);
- if (m_CrossRef[objnum] < m_Syntax.m_FileLen) {
- void* pResult = FXSYS_bsearch(&m_CrossRef[objnum], m_SortedOffset.GetData(), m_SortedOffset.GetSize(), sizeof(FX_FILESIZE), _CompareFileSize);
- if (pResult == NULL) {
- m_SortedOffset.Add(m_CrossRef[objnum]);
+ } else if (byte <= '9' && byte >= '0') {
+ start_pos = pos + i;
+ status = 2;
+ objnum = byte - '0';
+ } else if (byte == 't') {
+ status = 7;
+ inside_index = 1;
+ } else if (byte == 'x') {
+ status = 8;
+ inside_index = 1;
+ } else {
+ --i;
+ status = 0;
+ }
+ break;
+ case 2:
+ if (byte <= '9' && byte >= '0') {
+ objnum = objnum * 10 + byte - '0';
+ break;
+ } else if (PDF_CharType[byte] == 'W') {
+ status = 3;
+ } else {
+ --i;
+ status = 14;
+ inside_index = 0;
+ }
+ break;
+ case 3:
+ if (byte <= '9' && byte >= '0') {
+ start_pos1 = pos + i;
+ status = 4;
+ gennum = byte - '0';
+ } else if (PDF_CharType[byte] == 'W') {
+ break;
+ } else if (byte == 't') {
+ status = 7;
+ inside_index = 1;
+ } else {
+ --i;
+ status = 0;
+ }
+ break;
+ case 4:
+ if (byte <= '9' && byte >= '0') {
+ gennum = gennum * 10 + byte - '0';
+ break;
+ } else if (PDF_CharType[byte] == 'W') {
+ status = 5;
+ } else {
+ --i;
+ status = 0;
+ }
+ break;
+ case 5:
+ if (byte == 'o') {
+ status = 6;
+ inside_index = 1;
+ } else if (PDF_CharType[byte] == 'W') {
+ break;
+ } else if (byte <= '9' && byte >= '0') {
+ objnum = gennum;
+ gennum = byte - '0';
+ start_pos = start_pos1;
+ start_pos1 = pos + i;
+ status = 4;
+ } else if (byte == 't') {
+ status = 7;
+ inside_index = 1;
+ } else {
+ --i;
+ status = 0;
+ }
+ break;
+ case 6:
+ switch (inside_index) {
+ case 1:
+ if (byte != 'b') {
+ --i;
+ status = 0;
+ } else {
+ inside_index++;
+ }
+ break;
+ case 2:
+ if (byte != 'j') {
+ --i;
+ status = 0;
+ } else {
+ inside_index++;
+ }
+ break;
+ case 3:
+ if (PDF_CharType[byte] == 'W' || PDF_CharType[byte] == 'D') {
+ if (objnum > 0x1000000) {
+ status = 0;
+ break;
+ }
+ FX_FILESIZE obj_pos = start_pos - m_Syntax.m_HeaderOffset;
+ last_obj = start_pos;
+ void* pResult =
+ FXSYS_bsearch(&obj_pos, m_SortedOffset.GetData(),
+ m_SortedOffset.GetSize(), sizeof(FX_FILESIZE),
+ _CompareFileSize);
+ if (pResult == NULL) {
+ m_SortedOffset.Add(obj_pos);
+ }
+ FX_FILESIZE obj_end = 0;
+ CPDF_Object* pObject = ParseIndirectObjectAtByStrict(
+ m_pDocument, obj_pos, objnum, NULL, &obj_end);
+ if (pObject) {
+ int iType = pObject->GetType();
+ if (iType == PDFOBJ_STREAM) {
+ CPDF_Stream* pStream = (CPDF_Stream*)pObject;
+ CPDF_Dictionary* pDict = pStream->GetDict();
+ if (pDict) {
+ if (pDict->KeyExist(FX_BSTRC("Type"))) {
+ CFX_ByteString bsValue =
+ pDict->GetString(FX_BSTRC("Type"));
+ if (bsValue == FX_BSTRC("XRef") &&
+ pDict->KeyExist(FX_BSTRC("Size"))) {
+ CPDF_Object* pRoot =
+ pDict->GetElement(FX_BSTRC("Root"));
+ if (pRoot && pRoot->GetDict() &&
+ pRoot->GetDict()->GetElement(FX_BSTRC("Pages"))) {
+ if (m_pTrailer) {
+ m_pTrailer->Release();
}
+ m_pTrailer = (CPDF_Dictionary*)pDict->Clone();
+ }
}
- m_V5Type.SetAtGrow(objnum, 1);
- }
- if (bFirstBlock) {
- bFirstBlock = FALSE;
+ }
}
+ }
}
- }
- FX_Free(pBuf);
- }
- m_Syntax.RestorePos(SavedPos + count * recordsize);
- }
- if (streampos)
- if (!LoadCrossRefV5(streampos, streampos, FALSE)) {
- return FALSE;
- }
- return TRUE;
-}
-FX_BOOL CPDF_Parser::LoadAllCrossRefV5(FX_FILESIZE xrefpos)
-{
- if (!LoadCrossRefV5(xrefpos, xrefpos, TRUE)) {
- return FALSE;
- }
- while (xrefpos)
- if (!LoadCrossRefV5(xrefpos, xrefpos, FALSE)) {
- return FALSE;
- }
- m_ObjectStreamMap.InitHashTable(101, FALSE);
- m_bXRefStream = TRUE;
- return TRUE;
-}
-FX_BOOL CPDF_Parser::RebuildCrossRef()
-{
- m_CrossRef.RemoveAll();
- m_V5Type.RemoveAll();
- m_SortedOffset.RemoveAll();
- m_ObjVersion.RemoveAll();
- if (m_pTrailer) {
- m_pTrailer->Release();
- m_pTrailer = NULL;
- }
- int32_t status = 0;
- int32_t inside_index = 0;
- FX_DWORD objnum = 0, gennum = 0;
- int32_t depth = 0;
- uint8_t* buffer = FX_Alloc(uint8_t, 4096);
- FX_FILESIZE pos = m_Syntax.m_HeaderOffset;
- FX_FILESIZE start_pos = 0, start_pos1 = 0;
- FX_FILESIZE last_obj = -1, last_xref = -1, last_trailer = -1;
- while (pos < m_Syntax.m_FileLen) {
- FX_BOOL bOverFlow = FALSE;
- FX_DWORD size = (FX_DWORD)(m_Syntax.m_FileLen - pos);
- if (size > 4096) {
- size = 4096;
- }
- if (!m_Syntax.m_pFileAccess->ReadBlock(buffer, pos, size)) {
- break;
- }
- for (FX_DWORD i = 0; i < size; i ++) {
- uint8_t byte = buffer[i];
- switch (status) {
- case 0:
- if (PDF_CharType[byte] == 'W') {
- status = 1;
- }
- if (byte <= '9' && byte >= '0') {
- --i;
- status = 1;
- }
- if (byte == '%') {
- inside_index = 0;
- status = 9;
- }
- if (byte == '(') {
- status = 10;
- depth = 1;
- }
- if (byte == '<') {
- inside_index = 1;
- status = 11;
- }
- if (byte == '\\') {
- status = 13;
- }
- if (byte == 't') {
- status = 7;
- inside_index = 1;
- }
- break;
- case 1:
- if (PDF_CharType[byte] == 'W') {
- break;
- } else if (byte <= '9' && byte >= '0') {
- start_pos = pos + i;
- status = 2;
- objnum = byte - '0';
- } else if (byte == 't') {
- status = 7;
- inside_index = 1;
- } else if (byte == 'x') {
- status = 8;
- inside_index = 1;
- } else {
- --i;
- status = 0;
- }
- break;
- case 2:
- if (byte <= '9' && byte >= '0') {
- objnum = objnum * 10 + byte - '0';
- break;
- } else if (PDF_CharType[byte] == 'W') {
- status = 3;
- } else {
- --i;
- status = 14;
- inside_index = 0;
- }
- break;
- case 3:
- if (byte <= '9' && byte >= '0') {
- start_pos1 = pos + i;
- status = 4;
- gennum = byte - '0';
- } else if (PDF_CharType[byte] == 'W') {
- break;
- } else if (byte == 't') {
- status = 7;
- inside_index = 1;
- } else {
- --i;
- status = 0;
- }
- break;
- case 4:
- if (byte <= '9' && byte >= '0') {
- gennum = gennum * 10 + byte - '0';
- break;
- } else if (PDF_CharType[byte] == 'W') {
- status = 5;
- } else {
- --i;
- status = 0;
- }
- break;
- case 5:
- if (byte == 'o') {
- status = 6;
- inside_index = 1;
- } else if (PDF_CharType[byte] == 'W') {
- break;
- } else if (byte <= '9' && byte >= '0') {
- objnum = gennum;
- gennum = byte - '0';
- start_pos = start_pos1;
- start_pos1 = pos + i;
- status = 4;
- } else if (byte == 't') {
- status = 7;
- inside_index = 1;
- } else {
- --i;
- status = 0;
- }
- break;
- case 6:
- switch (inside_index) {
- case 1:
- if (byte != 'b') {
- --i;
- status = 0;
- } else {
- inside_index ++;
- }
- break;
- case 2:
- if (byte != 'j') {
- --i;
- status = 0;
- } else {
- inside_index ++;
- }
- break;
- case 3:
- if (PDF_CharType[byte] == 'W' || PDF_CharType[byte] == 'D') {
- if (objnum > 0x1000000) {
- status = 0;
- break;
- }
- FX_FILESIZE obj_pos = start_pos - m_Syntax.m_HeaderOffset;
- last_obj = start_pos;
- void* pResult = FXSYS_bsearch(&obj_pos, m_SortedOffset.GetData(), m_SortedOffset.GetSize(), sizeof(FX_FILESIZE), _CompareFileSize);
- if (pResult == NULL) {
- m_SortedOffset.Add(obj_pos);
- }
- FX_FILESIZE obj_end = 0;
- CPDF_Object *pObject = ParseIndirectObjectAtByStrict(m_pDocument, obj_pos, objnum, NULL, &obj_end);
- if (pObject) {
- int iType = pObject->GetType();
- if (iType == PDFOBJ_STREAM) {
- CPDF_Stream* pStream = (CPDF_Stream*)pObject;
- CPDF_Dictionary* pDict = pStream->GetDict();
- if (pDict) {
- if (pDict->KeyExist(FX_BSTRC("Type"))) {
- CFX_ByteString bsValue = pDict->GetString(FX_BSTRC("Type"));
- if (bsValue == FX_BSTRC("XRef") && pDict->KeyExist(FX_BSTRC("Size"))) {
- CPDF_Object* pRoot = pDict->GetElement(FX_BSTRC("Root"));
- if (pRoot && pRoot->GetDict() && pRoot->GetDict()->GetElement(FX_BSTRC("Pages"))) {
- if (m_pTrailer) {
- m_pTrailer->Release();
- }
- m_pTrailer = (CPDF_Dictionary*)pDict->Clone();
- }
- }
- }
- }
- }
- }
- FX_FILESIZE offset = 0;
- m_Syntax.RestorePos(obj_pos);
- offset = m_Syntax.FindTag(FX_BSTRC("obj"), 0);
- if (offset == -1) {
- offset = 0;
- } else {
- offset += 3;
- }
- FX_FILESIZE nLen = obj_end - obj_pos - offset;
- if ((FX_DWORD)nLen > size - i) {
- pos = obj_end + m_Syntax.m_HeaderOffset;
- bOverFlow = TRUE;
- } else {
- i += (FX_DWORD)nLen;
- }
- if (m_CrossRef.GetSize() > (int32_t)objnum && m_CrossRef[objnum]) {
- if (pObject) {
- FX_DWORD oldgen = m_ObjVersion.GetAt(objnum);
- m_CrossRef[objnum] = obj_pos;
- m_ObjVersion.SetAt(objnum, (int16_t)gennum);
- if (oldgen != gennum) {
- m_bVersionUpdated = TRUE;
- }
- }
- } else {
- m_CrossRef.SetAtGrow(objnum, obj_pos);
- m_V5Type.SetAtGrow(objnum, 1);
- m_ObjVersion.SetAtGrow(objnum, (int16_t)gennum);
- }
- if (pObject) {
- pObject->Release();
- }
- }
- --i;
- status = 0;
- break;
+ FX_FILESIZE offset = 0;
+ m_Syntax.RestorePos(obj_pos);
+ offset = m_Syntax.FindTag(FX_BSTRC("obj"), 0);
+ if (offset == -1) {
+ offset = 0;
+ } else {
+ offset += 3;
+ }
+ FX_FILESIZE nLen = obj_end - obj_pos - offset;
+ if ((FX_DWORD)nLen > size - i) {
+ pos = obj_end + m_Syntax.m_HeaderOffset;
+ bOverFlow = TRUE;
+ } else {
+ i += (FX_DWORD)nLen;
+ }
+ if (m_CrossRef.GetSize() > (int32_t)objnum &&
+ m_CrossRef[objnum]) {
+ if (pObject) {
+ FX_DWORD oldgen = m_ObjVersion.GetAt(objnum);
+ m_CrossRef[objnum] = obj_pos;
+ m_ObjVersion.SetAt(objnum, (int16_t)gennum);
+ if (oldgen != gennum) {
+ m_bVersionUpdated = TRUE;
}
- break;
- case 7:
- if (inside_index == 7) {
- if (PDF_CharType[byte] == 'W' || PDF_CharType[byte] == 'D') {
- last_trailer = pos + i - 7;
- m_Syntax.RestorePos(pos + i - m_Syntax.m_HeaderOffset);
- CPDF_Object* pObj = m_Syntax.GetObject(m_pDocument, 0, 0, 0);
- if (pObj) {
- if (pObj->GetType() != PDFOBJ_DICTIONARY && pObj->GetType() != PDFOBJ_STREAM) {
- pObj->Release();
- } else {
- CPDF_Dictionary* pTrailer = NULL;
- if (pObj->GetType() == PDFOBJ_STREAM) {
- pTrailer = ((CPDF_Stream*)pObj)->GetDict();
- } else {
- pTrailer = (CPDF_Dictionary*)pObj;
- }
- if (pTrailer) {
- if (m_pTrailer) {
- CPDF_Object* pRoot = pTrailer->GetElement(FX_BSTRC("Root"));
- if (pRoot == NULL || (pRoot->GetType() == PDFOBJ_REFERENCE &&
- (FX_DWORD)m_CrossRef.GetSize() > ((CPDF_Reference*)pRoot)->GetRefObjNum() &&
- m_CrossRef.GetAt(((CPDF_Reference*)pRoot)->GetRefObjNum()) != 0)) {
- FX_POSITION pos = pTrailer->GetStartPos();
- while (pos) {
- CFX_ByteString key;
- CPDF_Object* pObj = pTrailer->GetNextElement(pos, key);
- m_pTrailer->SetAt(key, pObj->Clone(), m_pDocument);
- }
- pObj->Release();
- } else {
- pObj->Release();
- }
- } else {
- if (pObj->GetType() == PDFOBJ_STREAM) {
- m_pTrailer = (CPDF_Dictionary*)pTrailer->Clone();
- pObj->Release();
- } else {
- m_pTrailer = pTrailer;
- }
- FX_FILESIZE dwSavePos = m_Syntax.SavePos();
- CFX_ByteString strWord = m_Syntax.GetKeyword();
- if (!strWord.Compare(FX_BSTRC("startxref"))) {
- FX_BOOL bNumber = FALSE;
- CFX_ByteString bsOffset = m_Syntax.GetNextWord(bNumber);
- if (bNumber) {
- m_LastXRefOffset = FXSYS_atoi(bsOffset);
- }
- }
- m_Syntax.RestorePos(dwSavePos);
- }
- } else {
- pObj->Release();
- }
- }
- }
+ }
+ } else {
+ m_CrossRef.SetAtGrow(objnum, obj_pos);
+ m_V5Type.SetAtGrow(objnum, 1);
+ m_ObjVersion.SetAtGrow(objnum, (int16_t)gennum);
+ }
+ if (pObject) {
+ pObject->Release();
+ }
+ }
+ --i;
+ status = 0;
+ break;
+ }
+ break;
+ case 7:
+ if (inside_index == 7) {
+ if (PDF_CharType[byte] == 'W' || PDF_CharType[byte] == 'D') {
+ last_trailer = pos + i - 7;
+ m_Syntax.RestorePos(pos + i - m_Syntax.m_HeaderOffset);
+ CPDF_Object* pObj = m_Syntax.GetObject(m_pDocument, 0, 0, 0);
+ if (pObj) {
+ if (pObj->GetType() != PDFOBJ_DICTIONARY &&
+ pObj->GetType() != PDFOBJ_STREAM) {
+ pObj->Release();
+ } else {
+ CPDF_Dictionary* pTrailer = NULL;
+ if (pObj->GetType() == PDFOBJ_STREAM) {
+ pTrailer = ((CPDF_Stream*)pObj)->GetDict();
+ } else {
+ pTrailer = (CPDF_Dictionary*)pObj;
+ }
+ if (pTrailer) {
+ if (m_pTrailer) {
+ CPDF_Object* pRoot =
+ pTrailer->GetElement(FX_BSTRC("Root"));
+ if (pRoot == NULL ||
+ (pRoot->GetType() == PDFOBJ_REFERENCE &&
+ (FX_DWORD)m_CrossRef.GetSize() >
+ ((CPDF_Reference*)pRoot)->GetRefObjNum() &&
+ m_CrossRef.GetAt(((CPDF_Reference*)pRoot)
+ ->GetRefObjNum()) != 0)) {
+ FX_POSITION pos = pTrailer->GetStartPos();
+ while (pos) {
+ CFX_ByteString key;
+ CPDF_Object* pObj =
+ pTrailer->GetNextElement(pos, key);
+ m_pTrailer->SetAt(key, pObj->Clone(), m_pDocument);
}
- --i;
- status = 0;
- } else if (byte == "trailer"[inside_index]) {
- inside_index ++;
+ pObj->Release();
+ } else {
+ pObj->Release();
+ }
} else {
- --i;
- status = 0;
- }
- break;
- case 8:
- if (inside_index == 4) {
- last_xref = pos + i - 4;
- status = 1;
- } else if (byte == "xref"[inside_index]) {
- inside_index ++;
- } else {
- --i;
- status = 0;
- }
- break;
- case 9:
- if (byte == '\r' || byte == '\n') {
- status = 0;
- }
- break;
- case 10:
- if (byte == ')') {
- if (depth > 0) {
- depth--;
+ if (pObj->GetType() == PDFOBJ_STREAM) {
+ m_pTrailer = (CPDF_Dictionary*)pTrailer->Clone();
+ pObj->Release();
+ } else {
+ m_pTrailer = pTrailer;
+ }
+ FX_FILESIZE dwSavePos = m_Syntax.SavePos();
+ CFX_ByteString strWord = m_Syntax.GetKeyword();
+ if (!strWord.Compare(FX_BSTRC("startxref"))) {
+ FX_BOOL bNumber = FALSE;
+ CFX_ByteString bsOffset = m_Syntax.GetNextWord(bNumber);
+ if (bNumber) {
+ m_LastXRefOffset = FXSYS_atoi(bsOffset);
}
- } else if (byte == '(') {
- depth++;
- }
- if (!depth) {
- status = 0;
- }
- break;
- case 11:
- if (byte == '<' && inside_index == 1) {
- status = 12;
- } else if (byte == '>') {
- status = 0;
- }
- inside_index = 0;
- break;
- case 12:
- --i;
- status = 0;
- break;
- case 13:
- if (PDF_CharType[byte] == 'D' || PDF_CharType[byte] == 'W') {
- --i;
- status = 0;
- }
- break;
- case 14:
- if (PDF_CharType[byte] == 'W') {
- status = 0;
- } else if (byte == '%' || byte == '(' || byte == '<' || byte == '\\') {
- status = 0;
- --i;
- } else if (inside_index == 6) {
- status = 0;
- --i;
- } else if (byte == "endobj"[inside_index]) {
- inside_index++;
+ }
+ m_Syntax.RestorePos(dwSavePos);
}
- break;
+ } else {
+ pObj->Release();
+ }
+ }
+ }
}
- if (bOverFlow) {
- size = 0;
- break;
+ --i;
+ status = 0;
+ } else if (byte == "trailer"[inside_index]) {
+ inside_index++;
+ } else {
+ --i;
+ status = 0;
+ }
+ break;
+ case 8:
+ if (inside_index == 4) {
+ last_xref = pos + i - 4;
+ status = 1;
+ } else if (byte == "xref"[inside_index]) {
+ inside_index++;
+ } else {
+ --i;
+ status = 0;
+ }
+ break;
+ case 9:
+ if (byte == '\r' || byte == '\n') {
+ status = 0;
+ }
+ break;
+ case 10:
+ if (byte == ')') {
+ if (depth > 0) {
+ depth--;
}
- }
- pos += size;
- }
- if (last_xref != -1 && last_xref > last_obj) {
- last_trailer = last_xref;
- } else if (last_trailer == -1 || last_xref < last_obj) {
- last_trailer = m_Syntax.m_FileLen;
- }
- FX_FILESIZE offset = last_trailer - m_Syntax.m_HeaderOffset;
- void* pResult = FXSYS_bsearch(&offset, m_SortedOffset.GetData(), m_SortedOffset.GetSize(), sizeof(FX_FILESIZE), _CompareFileSize);
- if (pResult == NULL) {
- m_SortedOffset.Add(offset);
- }
- FX_Free(buffer);
- return TRUE;
+ } else if (byte == '(') {
+ depth++;
+ }
+ if (!depth) {
+ status = 0;
+ }
+ break;
+ case 11:
+ if (byte == '<' && inside_index == 1) {
+ status = 12;
+ } else if (byte == '>') {
+ status = 0;
+ }
+ inside_index = 0;
+ break;
+ case 12:
+ --i;
+ status = 0;
+ break;
+ case 13:
+ if (PDF_CharType[byte] == 'D' || PDF_CharType[byte] == 'W') {
+ --i;
+ status = 0;
+ }
+ break;
+ case 14:
+ if (PDF_CharType[byte] == 'W') {
+ status = 0;
+ } else if (byte == '%' || byte == '(' || byte == '<' ||
+ byte == '\\') {
+ status = 0;
+ --i;
+ } else if (inside_index == 6) {
+ status = 0;
+ --i;
+ } else if (byte == "endobj"[inside_index]) {
+ inside_index++;
+ }
+ break;
+ }
+ if (bOverFlow) {
+ size = 0;
+ break;
+ }
+ }
+ pos += size;
+ }
+ if (last_xref != -1 && last_xref > last_obj) {
+ last_trailer = last_xref;
+ } else if (last_trailer == -1 || last_xref < last_obj) {
+ last_trailer = m_Syntax.m_FileLen;
+ }
+ FX_FILESIZE offset = last_trailer - m_Syntax.m_HeaderOffset;
+ void* pResult =
+ FXSYS_bsearch(&offset, m_SortedOffset.GetData(), m_SortedOffset.GetSize(),
+ sizeof(FX_FILESIZE), _CompareFileSize);
+ if (pResult == NULL) {
+ m_SortedOffset.Add(offset);
+ }
+ FX_Free(buffer);
+ return TRUE;
}
-static FX_DWORD _GetVarInt(const uint8_t* p, int32_t n)
-{
- FX_DWORD result = 0;
- for (int32_t i = 0; i < n; i ++) {
- result = result * 256 + p[i];
- }
- return result;
+static FX_DWORD _GetVarInt(const uint8_t* p, int32_t n) {
+ FX_DWORD result = 0;
+ for (int32_t i = 0; i < n; i++) {
+ result = result * 256 + p[i];
+ }
+ return result;
}
-FX_BOOL CPDF_Parser::LoadCrossRefV5(FX_FILESIZE pos, FX_FILESIZE& prev, FX_BOOL bMainXRef)
-{
- CPDF_Stream* pStream = (CPDF_Stream*)ParseIndirectObjectAt(m_pDocument, pos, 0, NULL);
- if (!pStream) {
- return FALSE;
- }
- if (m_pDocument) {
- CPDF_Dictionary * pDict = m_pDocument->GetRoot();
- if (!pDict || pDict->GetObjNum() != pStream->m_ObjNum) {
- m_pDocument->InsertIndirectObject(pStream->m_ObjNum, pStream);
- } else {
- if (pStream->GetType() == PDFOBJ_STREAM) {
- pStream->Release();
- }
- return FALSE;
- }
- }
- if (pStream->GetType() != PDFOBJ_STREAM) {
- return FALSE;
- }
- prev = pStream->GetDict()->GetInteger(FX_BSTRC("Prev"));
- int32_t size = pStream->GetDict()->GetInteger(FX_BSTRC("Size"));
- if (size < 0) {
- pStream->Release();
- return FALSE;
- }
- if (bMainXRef) {
- m_pTrailer = (CPDF_Dictionary*)pStream->GetDict()->Clone();
- m_CrossRef.SetSize(size);
- if (m_V5Type.SetSize(size)) {
- FXSYS_memset(m_V5Type.GetData(), 0, size);
- }
+FX_BOOL CPDF_Parser::LoadCrossRefV5(FX_FILESIZE pos,
+ FX_FILESIZE& prev,
+ FX_BOOL bMainXRef) {
+ CPDF_Stream* pStream =
+ (CPDF_Stream*)ParseIndirectObjectAt(m_pDocument, pos, 0, NULL);
+ if (!pStream) {
+ return FALSE;
+ }
+ if (m_pDocument) {
+ CPDF_Dictionary* pDict = m_pDocument->GetRoot();
+ if (!pDict || pDict->GetObjNum() != pStream->m_ObjNum) {
+ m_pDocument->InsertIndirectObject(pStream->m_ObjNum, pStream);
} else {
- m_Trailers.Add((CPDF_Dictionary*)pStream->GetDict()->Clone());
- }
- std::vector<std::pair<int32_t, int32_t> > arrIndex;
- CPDF_Array* pArray = pStream->GetDict()->GetArray(FX_BSTRC("Index"));
- if (pArray) {
- FX_DWORD nPairSize = pArray->GetCount() / 2;
- for (FX_DWORD i = 0; i < nPairSize; i++) {
- CPDF_Object* pStartNumObj = pArray->GetElement(i * 2);
- CPDF_Object* pCountObj = pArray->GetElement(i * 2 + 1);
- if (pStartNumObj && pStartNumObj->GetType() == PDFOBJ_NUMBER
- && pCountObj && pCountObj->GetType() == PDFOBJ_NUMBER) {
- int nStartNum = pStartNumObj->GetInteger();
- int nCount = pCountObj->GetInteger();
- if (nStartNum >= 0 && nCount > 0) {
- arrIndex.push_back(std::make_pair(nStartNum, nCount));
- }
- }
- }
- }
- if (arrIndex.size() == 0) {
- arrIndex.push_back(std::make_pair(0, size));
- }
- pArray = pStream->GetDict()->GetArray(FX_BSTRC("W"));
- if (pArray == NULL) {
- pStream->Release();
- return FALSE;
- }
- CFX_DWordArray WidthArray;
- FX_SAFE_DWORD dwAccWidth = 0;
- for (FX_DWORD i = 0; i < pArray->GetCount(); i ++) {
- WidthArray.Add(pArray->GetInteger(i));
- dwAccWidth += WidthArray[i];
- }
- if (!dwAccWidth.IsValid() || WidthArray.GetSize() < 3) {
+ if (pStream->GetType() == PDFOBJ_STREAM) {
pStream->Release();
- return FALSE;
+ }
+ return FALSE;
}
- FX_DWORD totalWidth = dwAccWidth.ValueOrDie();
- CPDF_StreamAcc acc;
- acc.LoadAllData(pStream);
- const uint8_t* pData = acc.GetData();
- FX_DWORD dwTotalSize = acc.GetSize();
- FX_DWORD segindex = 0;
- for (FX_DWORD i = 0; i < arrIndex.size(); i ++) {
- int32_t startnum = arrIndex[i].first;
- if (startnum < 0) {
- continue;
- }
- m_dwXrefStartObjNum = pdfium::base::checked_cast<FX_DWORD, int32_t> (startnum);
- FX_DWORD count = pdfium::base::checked_cast<FX_DWORD, int32_t> (arrIndex[i].second);
- FX_SAFE_DWORD dwCaculatedSize = segindex;
- dwCaculatedSize += count;
- dwCaculatedSize *= totalWidth;
- if (!dwCaculatedSize.IsValid() || dwCaculatedSize.ValueOrDie() > dwTotalSize) {
- continue;
- }
- const uint8_t* segstart = pData + segindex * totalWidth;
- FX_SAFE_DWORD dwMaxObjNum = startnum;
- dwMaxObjNum += count;
- FX_DWORD dwV5Size = pdfium::base::checked_cast<FX_DWORD, int32_t> (m_V5Type.GetSize());
- if (!dwMaxObjNum.IsValid() || dwMaxObjNum.ValueOrDie() > dwV5Size) {
- continue;
- }
- for (FX_DWORD j = 0; j < count; j ++) {
- int32_t type = 1;
- const uint8_t* entrystart = segstart + j * totalWidth;
- if (WidthArray[0]) {
- type = _GetVarInt(entrystart, WidthArray[0]);
- }
- if (m_V5Type[startnum + j] == 255) {
- FX_FILESIZE offset = _GetVarInt(entrystart + WidthArray[0], WidthArray[1]);
- m_CrossRef[startnum + j] = offset;
- void* pResult = FXSYS_bsearch(&offset, m_SortedOffset.GetData(), m_SortedOffset.GetSize(), sizeof(FX_FILESIZE), _CompareFileSize);
- if (pResult == NULL) {
- m_SortedOffset.Add(offset);
- }
- continue;
- }
- if (m_V5Type[startnum + j]) {
- continue;
- }
- m_V5Type[startnum + j] = type;
- if (type == 0) {
- m_CrossRef[startnum + j] = 0;
- } else {
- FX_FILESIZE offset = _GetVarInt(entrystart + WidthArray[0], WidthArray[1]);
- m_CrossRef[startnum + j] = offset;
- if (type == 1) {
- void* pResult = FXSYS_bsearch(&offset, m_SortedOffset.GetData(), m_SortedOffset.GetSize(), sizeof(FX_FILESIZE), _CompareFileSize);
- if (pResult == NULL) {
- m_SortedOffset.Add(offset);
- }
- } else {
- if (offset < 0 || offset >= m_V5Type.GetSize()) {
- pStream->Release();
- return FALSE;
- }
- m_V5Type[offset] = 255;
- }
- }
+ }
+ if (pStream->GetType() != PDFOBJ_STREAM) {
+ return FALSE;
+ }
+ prev = pStream->GetDict()->GetInteger(FX_BSTRC("Prev"));
+ int32_t size = pStream->GetDict()->GetInteger(FX_BSTRC("Size"));
+ if (size < 0) {
+ pStream->Release();
+ return FALSE;
+ }
+ if (bMainXRef) {
+ m_pTrailer = (CPDF_Dictionary*)pStream->GetDict()->Clone();
+ m_CrossRef.SetSize(size);
+ if (m_V5Type.SetSize(size)) {
+ FXSYS_memset(m_V5Type.GetData(), 0, size);
+ }
+ } else {
+ m_Trailers.Add((CPDF_Dictionary*)pStream->GetDict()->Clone());
+ }
+ std::vector<std::pair<int32_t, int32_t> > arrIndex;
+ CPDF_Array* pArray = pStream->GetDict()->GetArray(FX_BSTRC("Index"));
+ if (pArray) {
+ FX_DWORD nPairSize = pArray->GetCount() / 2;
+ for (FX_DWORD i = 0; i < nPairSize; i++) {
+ CPDF_Object* pStartNumObj = pArray->GetElement(i * 2);
+ CPDF_Object* pCountObj = pArray->GetElement(i * 2 + 1);
+ if (pStartNumObj && pStartNumObj->GetType() == PDFOBJ_NUMBER &&
+ pCountObj && pCountObj->GetType() == PDFOBJ_NUMBER) {
+ int nStartNum = pStartNumObj->GetInteger();
+ int nCount = pCountObj->GetInteger();
+ if (nStartNum >= 0 && nCount > 0) {
+ arrIndex.push_back(std::make_pair(nStartNum, nCount));
+ }
+ }
+ }
+ }
+ if (arrIndex.size() == 0) {
+ arrIndex.push_back(std::make_pair(0, size));
+ }
+ pArray = pStream->GetDict()->GetArray(FX_BSTRC("W"));
+ if (pArray == NULL) {
+ pStream->Release();
+ return FALSE;
+ }
+ CFX_DWordArray WidthArray;
+ FX_SAFE_DWORD dwAccWidth = 0;
+ for (FX_DWORD i = 0; i < pArray->GetCount(); i++) {
+ WidthArray.Add(pArray->GetInteger(i));
+ dwAccWidth += WidthArray[i];
+ }
+ if (!dwAccWidth.IsValid() || WidthArray.GetSize() < 3) {
+ pStream->Release();
+ return FALSE;
+ }
+ FX_DWORD totalWidth = dwAccWidth.ValueOrDie();
+ CPDF_StreamAcc acc;
+ acc.LoadAllData(pStream);
+ const uint8_t* pData = acc.GetData();
+ FX_DWORD dwTotalSize = acc.GetSize();
+ FX_DWORD segindex = 0;
+ for (FX_DWORD i = 0; i < arrIndex.size(); i++) {
+ int32_t startnum = arrIndex[i].first;
+ if (startnum < 0) {
+ continue;
+ }
+ m_dwXrefStartObjNum =
+ pdfium::base::checked_cast<FX_DWORD, int32_t>(startnum);
+ FX_DWORD count =
+ pdfium::base::checked_cast<FX_DWORD, int32_t>(arrIndex[i].second);
+ FX_SAFE_DWORD dwCaculatedSize = segindex;
+ dwCaculatedSize += count;
+ dwCaculatedSize *= totalWidth;
+ if (!dwCaculatedSize.IsValid() ||
+ dwCaculatedSize.ValueOrDie() > dwTotalSize) {
+ continue;
+ }
+ const uint8_t* segstart = pData + segindex * totalWidth;
+ FX_SAFE_DWORD dwMaxObjNum = startnum;
+ dwMaxObjNum += count;
+ FX_DWORD dwV5Size =
+ pdfium::base::checked_cast<FX_DWORD, int32_t>(m_V5Type.GetSize());
+ if (!dwMaxObjNum.IsValid() || dwMaxObjNum.ValueOrDie() > dwV5Size) {
+ continue;
+ }
+ for (FX_DWORD j = 0; j < count; j++) {
+ int32_t type = 1;
+ const uint8_t* entrystart = segstart + j * totalWidth;
+ if (WidthArray[0]) {
+ type = _GetVarInt(entrystart, WidthArray[0]);
+ }
+ if (m_V5Type[startnum + j] == 255) {
+ FX_FILESIZE offset =
+ _GetVarInt(entrystart + WidthArray[0], WidthArray[1]);
+ m_CrossRef[startnum + j] = offset;
+ void* pResult = FXSYS_bsearch(&offset, m_SortedOffset.GetData(),
+ m_SortedOffset.GetSize(),
+ sizeof(FX_FILESIZE), _CompareFileSize);
+ if (pResult == NULL) {
+ m_SortedOffset.Add(offset);
+ }
+ continue;
+ }
+ if (m_V5Type[startnum + j]) {
+ continue;
+ }
+ m_V5Type[startnum + j] = type;
+ if (type == 0) {
+ m_CrossRef[startnum + j] = 0;
+ } else {
+ FX_FILESIZE offset =
+ _GetVarInt(entrystart + WidthArray[0], WidthArray[1]);
+ m_CrossRef[startnum + j] = offset;
+ if (type == 1) {
+ void* pResult = FXSYS_bsearch(&offset, m_SortedOffset.GetData(),
+ m_SortedOffset.GetSize(),
+ sizeof(FX_FILESIZE), _CompareFileSize);
+ if (pResult == NULL) {
+ m_SortedOffset.Add(offset);
+ }
+ } else {
+ if (offset < 0 || offset >= m_V5Type.GetSize()) {
+ pStream->Release();
+ return FALSE;
+ }
+ m_V5Type[offset] = 255;
}
- segindex += count;
+ }
}
- pStream->Release();
- return TRUE;
+ segindex += count;
+ }
+ pStream->Release();
+ return TRUE;
}
-CPDF_Array* CPDF_Parser::GetIDArray()
-{
- CPDF_Object* pID = m_pTrailer ? m_pTrailer->GetElement(FX_BSTRC("ID")) : NULL;
- if (pID == NULL) {
- return NULL;
- }
- if (pID->GetType() == PDFOBJ_REFERENCE) {
- pID = ParseIndirectObject(NULL, ((CPDF_Reference*)pID)->GetRefObjNum());
- m_pTrailer->SetAt(FX_BSTRC("ID"), pID);
- }
- if (pID == NULL || pID->GetType() != PDFOBJ_ARRAY) {
- return NULL;
- }
- return (CPDF_Array*)pID;
+CPDF_Array* CPDF_Parser::GetIDArray() {
+ CPDF_Object* pID = m_pTrailer ? m_pTrailer->GetElement(FX_BSTRC("ID")) : NULL;
+ if (pID == NULL) {
+ return NULL;
+ }
+ if (pID->GetType() == PDFOBJ_REFERENCE) {
+ pID = ParseIndirectObject(NULL, ((CPDF_Reference*)pID)->GetRefObjNum());
+ m_pTrailer->SetAt(FX_BSTRC("ID"), pID);
+ }
+ if (pID == NULL || pID->GetType() != PDFOBJ_ARRAY) {
+ return NULL;
+ }
+ return (CPDF_Array*)pID;
}
-FX_DWORD CPDF_Parser::GetRootObjNum()
-{
- CPDF_Object* pRef = m_pTrailer ? m_pTrailer->GetElement(FX_BSTRC("Root")) : NULL;
- if (pRef == NULL || pRef->GetType() != PDFOBJ_REFERENCE) {
- return 0;
- }
- return ((CPDF_Reference*) pRef)->GetRefObjNum();
+FX_DWORD CPDF_Parser::GetRootObjNum() {
+ CPDF_Object* pRef =
+ m_pTrailer ? m_pTrailer->GetElement(FX_BSTRC("Root")) : NULL;
+ if (pRef == NULL || pRef->GetType() != PDFOBJ_REFERENCE) {
+ return 0;
+ }
+ return ((CPDF_Reference*)pRef)->GetRefObjNum();
}
-FX_DWORD CPDF_Parser::GetInfoObjNum()
-{
- CPDF_Object* pRef = m_pTrailer ? m_pTrailer->GetElement(FX_BSTRC("Info")) : NULL;
- if (pRef == NULL || pRef->GetType() != PDFOBJ_REFERENCE) {
- return 0;
- }
- return ((CPDF_Reference*) pRef)->GetRefObjNum();
+FX_DWORD CPDF_Parser::GetInfoObjNum() {
+ CPDF_Object* pRef =
+ m_pTrailer ? m_pTrailer->GetElement(FX_BSTRC("Info")) : NULL;
+ if (pRef == NULL || pRef->GetType() != PDFOBJ_REFERENCE) {
+ return 0;
+ }
+ return ((CPDF_Reference*)pRef)->GetRefObjNum();
}
-FX_BOOL CPDF_Parser::IsFormStream(FX_DWORD objnum, FX_BOOL& bForm)
-{
- bForm = FALSE;
- if (objnum >= (FX_DWORD)m_CrossRef.GetSize()) {
- return TRUE;
- }
- if (m_V5Type[objnum] == 0) {
- return TRUE;
- }
- if (m_V5Type[objnum] == 2) {
- return TRUE;
- }
- FX_FILESIZE pos = m_CrossRef[objnum];
- void* pResult = FXSYS_bsearch(&pos, m_SortedOffset.GetData(), m_SortedOffset.GetSize(), sizeof(FX_FILESIZE), _CompareFileSize);
- if (pResult == NULL) {
- return TRUE;
- }
- if ((FX_FILESIZE*)pResult - (FX_FILESIZE*)m_SortedOffset.GetData() == m_SortedOffset.GetSize() - 1) {
- return FALSE;
- }
- FX_FILESIZE size = ((FX_FILESIZE*)pResult)[1] - pos;
- FX_FILESIZE SavedPos = m_Syntax.SavePos();
- m_Syntax.RestorePos(pos);
- bForm = m_Syntax.SearchMultiWord(FX_BSTRC("/Form\0stream"), TRUE, size) == 0;
- m_Syntax.RestorePos(SavedPos);
+FX_BOOL CPDF_Parser::IsFormStream(FX_DWORD objnum, FX_BOOL& bForm) {
+ bForm = FALSE;
+ if (objnum >= (FX_DWORD)m_CrossRef.GetSize()) {
+ return TRUE;
+ }
+ if (m_V5Type[objnum] == 0) {
return TRUE;
+ }
+ if (m_V5Type[objnum] == 2) {
+ return TRUE;
+ }
+ FX_FILESIZE pos = m_CrossRef[objnum];
+ void* pResult =
+ FXSYS_bsearch(&pos, m_SortedOffset.GetData(), m_SortedOffset.GetSize(),
+ sizeof(FX_FILESIZE), _CompareFileSize);
+ if (pResult == NULL) {
+ return TRUE;
+ }
+ if ((FX_FILESIZE*)pResult - (FX_FILESIZE*)m_SortedOffset.GetData() ==
+ m_SortedOffset.GetSize() - 1) {
+ return FALSE;
+ }
+ FX_FILESIZE size = ((FX_FILESIZE*)pResult)[1] - pos;
+ FX_FILESIZE SavedPos = m_Syntax.SavePos();
+ m_Syntax.RestorePos(pos);
+ bForm = m_Syntax.SearchMultiWord(FX_BSTRC("/Form\0stream"), TRUE, size) == 0;
+ m_Syntax.RestorePos(SavedPos);
+ return TRUE;
}
-CPDF_Object* CPDF_Parser::ParseIndirectObject(CPDF_IndirectObjects* pObjList, FX_DWORD objnum, PARSE_CONTEXT* pContext)
-{
- if (objnum >= (FX_DWORD)m_CrossRef.GetSize()) {
- return NULL;
- }
- if (m_V5Type[objnum] == 1 || m_V5Type[objnum] == 255) {
- FX_FILESIZE pos = m_CrossRef[objnum];
- if (pos <= 0) {
- return NULL;
- }
- return ParseIndirectObjectAt(pObjList, pos, objnum, pContext);
- }
- if (m_V5Type[objnum] == 2) {
- CPDF_StreamAcc* pObjStream = GetObjectStream((FX_DWORD)m_CrossRef[objnum]);
- if (pObjStream == NULL) {
- return NULL;
- }
- int32_t n = pObjStream->GetDict()->GetInteger(FX_BSTRC("N"));
- int32_t offset = pObjStream->GetDict()->GetInteger(FX_BSTRC("First"));
- CPDF_SyntaxParser syntax;
- CFX_SmartPointer<IFX_FileStream> file(FX_CreateMemoryStream((uint8_t*)pObjStream->GetData(), (size_t)pObjStream->GetSize(), FALSE));
- syntax.InitParser(file.Get(), 0);
- CPDF_Object* pRet = NULL;
- while (n) {
- FX_DWORD thisnum = syntax.GetDirectNum();
- FX_DWORD thisoff = syntax.GetDirectNum();
- if (thisnum == objnum) {
- syntax.RestorePos(offset + thisoff);
- pRet = syntax.GetObject(pObjList, 0, 0, pContext);
- break;
- }
- n --;
- }
- return pRet;
- }
+CPDF_Object* CPDF_Parser::ParseIndirectObject(CPDF_IndirectObjects* pObjList,
+ FX_DWORD objnum,
+ PARSE_CONTEXT* pContext) {
+ if (objnum >= (FX_DWORD)m_CrossRef.GetSize()) {
return NULL;
-}
-CPDF_StreamAcc* CPDF_Parser::GetObjectStream(FX_DWORD objnum)
-{
- CPDF_StreamAcc* pStreamAcc = NULL;
- if (m_ObjectStreamMap.Lookup((void*)(uintptr_t)objnum, (void*&)pStreamAcc)) {
- return pStreamAcc;
- }
- const CPDF_Stream* pStream = m_pDocument ? (CPDF_Stream*)m_pDocument->GetIndirectObject(objnum) : NULL;
- if (pStream == NULL || pStream->GetType() != PDFOBJ_STREAM) {
- return NULL;
+ }
+ if (m_V5Type[objnum] == 1 || m_V5Type[objnum] == 255) {
+ FX_FILESIZE pos = m_CrossRef[objnum];
+ if (pos <= 0) {
+ return NULL;
+ }
+ return ParseIndirectObjectAt(pObjList, pos, objnum, pContext);
+ }
+ if (m_V5Type[objnum] == 2) {
+ CPDF_StreamAcc* pObjStream = GetObjectStream((FX_DWORD)m_CrossRef[objnum]);
+ if (pObjStream == NULL) {
+ return NULL;
+ }
+ int32_t n = pObjStream->GetDict()->GetInteger(FX_BSTRC("N"));
+ int32_t offset = pObjStream->GetDict()->GetInteger(FX_BSTRC("First"));
+ CPDF_SyntaxParser syntax;
+ CFX_SmartPointer<IFX_FileStream> file(FX_CreateMemoryStream(
+ (uint8_t*)pObjStream->GetData(), (size_t)pObjStream->GetSize(), FALSE));
+ syntax.InitParser(file.Get(), 0);
+ CPDF_Object* pRet = NULL;
+ while (n) {
+ FX_DWORD thisnum = syntax.GetDirectNum();
+ FX_DWORD thisoff = syntax.GetDirectNum();
+ if (thisnum == objnum) {
+ syntax.RestorePos(offset + thisoff);
+ pRet = syntax.GetObject(pObjList, 0, 0, pContext);
+ break;
+ }
+ n--;
}
- pStreamAcc = new CPDF_StreamAcc;
- pStreamAcc->LoadAllData(pStream);
- m_ObjectStreamMap.SetAt((void*)(uintptr_t)objnum, pStreamAcc);
+ return pRet;
+ }
+ return NULL;
+}
+CPDF_StreamAcc* CPDF_Parser::GetObjectStream(FX_DWORD objnum) {
+ CPDF_StreamAcc* pStreamAcc = NULL;
+ if (m_ObjectStreamMap.Lookup((void*)(uintptr_t)objnum, (void*&)pStreamAcc)) {
return pStreamAcc;
+ }
+ const CPDF_Stream* pStream =
+ m_pDocument ? (CPDF_Stream*)m_pDocument->GetIndirectObject(objnum) : NULL;
+ if (pStream == NULL || pStream->GetType() != PDFOBJ_STREAM) {
+ return NULL;
+ }
+ pStreamAcc = new CPDF_StreamAcc;
+ pStreamAcc->LoadAllData(pStream);
+ m_ObjectStreamMap.SetAt((void*)(uintptr_t)objnum, pStreamAcc);
+ return pStreamAcc;
}
-FX_FILESIZE CPDF_Parser::GetObjectSize(FX_DWORD objnum)
-{
- if (objnum >= (FX_DWORD)m_CrossRef.GetSize()) {
- return 0;
- }
- if (m_V5Type[objnum] == 2) {
- objnum = (FX_DWORD)m_CrossRef[objnum];
+FX_FILESIZE CPDF_Parser::GetObjectSize(FX_DWORD objnum) {
+ if (objnum >= (FX_DWORD)m_CrossRef.GetSize()) {
+ return 0;
+ }
+ if (m_V5Type[objnum] == 2) {
+ objnum = (FX_DWORD)m_CrossRef[objnum];
+ }
+ if (m_V5Type[objnum] == 1 || m_V5Type[objnum] == 255) {
+ FX_FILESIZE offset = m_CrossRef[objnum];
+ if (offset == 0) {
+ return 0;
+ }
+ void* pResult = FXSYS_bsearch(&offset, m_SortedOffset.GetData(),
+ m_SortedOffset.GetSize(), sizeof(FX_FILESIZE),
+ _CompareFileSize);
+ if (pResult == NULL) {
+ return 0;
}
- if (m_V5Type[objnum] == 1 || m_V5Type[objnum] == 255) {
- FX_FILESIZE offset = m_CrossRef[objnum];
- if (offset == 0) {
- return 0;
- }
- void* pResult = FXSYS_bsearch(&offset, m_SortedOffset.GetData(), m_SortedOffset.GetSize(), sizeof(FX_FILESIZE), _CompareFileSize);
- if (pResult == NULL) {
- return 0;
- }
- if ((FX_FILESIZE*)pResult - (FX_FILESIZE*)m_SortedOffset.GetData() == m_SortedOffset.GetSize() - 1) {
- return 0;
- }
- return ((FX_FILESIZE*)pResult)[1] - offset;
+ if ((FX_FILESIZE*)pResult - (FX_FILESIZE*)m_SortedOffset.GetData() ==
+ m_SortedOffset.GetSize() - 1) {
+ return 0;
}
- return 0;
+ return ((FX_FILESIZE*)pResult)[1] - offset;
+ }
+ return 0;
}
-void CPDF_Parser::GetIndirectBinary(FX_DWORD objnum, uint8_t*& pBuffer, FX_DWORD& size)
-{
- pBuffer = NULL;
- size = 0;
- if (objnum >= (FX_DWORD)m_CrossRef.GetSize()) {
- return;
- }
- if (m_V5Type[objnum] == 2) {
- CPDF_StreamAcc* pObjStream = GetObjectStream((FX_DWORD)m_CrossRef[objnum]);
- if (pObjStream == NULL) {
- return;
- }
- int32_t n = pObjStream->GetDict()->GetInteger(FX_BSTRC("N"));
- int32_t offset = pObjStream->GetDict()->GetInteger(FX_BSTRC("First"));
- CPDF_SyntaxParser syntax;
- const uint8_t* pData = pObjStream->GetData();
- FX_DWORD totalsize = pObjStream->GetSize();
- CFX_SmartPointer<IFX_FileStream> file(FX_CreateMemoryStream((uint8_t*)pData, (size_t)totalsize, FALSE));
- syntax.InitParser(file.Get(), 0);
- while (n) {
- FX_DWORD thisnum = syntax.GetDirectNum();
- FX_DWORD thisoff = syntax.GetDirectNum();
- if (thisnum == objnum) {
- if (n == 1) {
- size = totalsize - (thisoff + offset);
- } else {
- syntax.GetDirectNum(); // Skip nextnum.
- FX_DWORD nextoff = syntax.GetDirectNum();
- size = nextoff - thisoff;
- }
- pBuffer = FX_Alloc(uint8_t, size);
- FXSYS_memcpy(pBuffer, pData + thisoff + offset, size);
- return;
- }
- n --;
+void CPDF_Parser::GetIndirectBinary(FX_DWORD objnum,
+ uint8_t*& pBuffer,
+ FX_DWORD& size) {
+ pBuffer = NULL;
+ size = 0;
+ if (objnum >= (FX_DWORD)m_CrossRef.GetSize()) {
+ return;
+ }
+ if (m_V5Type[objnum] == 2) {
+ CPDF_StreamAcc* pObjStream = GetObjectStream((FX_DWORD)m_CrossRef[objnum]);
+ if (pObjStream == NULL) {
+ return;
+ }
+ int32_t n = pObjStream->GetDict()->GetInteger(FX_BSTRC("N"));
+ int32_t offset = pObjStream->GetDict()->GetInteger(FX_BSTRC("First"));
+ CPDF_SyntaxParser syntax;
+ const uint8_t* pData = pObjStream->GetData();
+ FX_DWORD totalsize = pObjStream->GetSize();
+ CFX_SmartPointer<IFX_FileStream> file(
+ FX_CreateMemoryStream((uint8_t*)pData, (size_t)totalsize, FALSE));
+ syntax.InitParser(file.Get(), 0);
+ while (n) {
+ FX_DWORD thisnum = syntax.GetDirectNum();
+ FX_DWORD thisoff = syntax.GetDirectNum();
+ if (thisnum == objnum) {
+ if (n == 1) {
+ size = totalsize - (thisoff + offset);
+ } else {
+ syntax.GetDirectNum(); // Skip nextnum.
+ FX_DWORD nextoff = syntax.GetDirectNum();
+ size = nextoff - thisoff;
}
+ pBuffer = FX_Alloc(uint8_t, size);
+ FXSYS_memcpy(pBuffer, pData + thisoff + offset, size);
return;
+ }
+ n--;
}
- if (m_V5Type[objnum] == 1) {
- FX_FILESIZE pos = m_CrossRef[objnum];
- if (pos == 0) {
- return;
- }
- FX_FILESIZE SavedPos = m_Syntax.SavePos();
- m_Syntax.RestorePos(pos);
- FX_BOOL bIsNumber;
- CFX_ByteString word = m_Syntax.GetNextWord(bIsNumber);
- if (!bIsNumber) {
- m_Syntax.RestorePos(SavedPos);
- return;
- }
- FX_DWORD parser_objnum = FXSYS_atoi(word);
- if (parser_objnum && parser_objnum != objnum) {
- m_Syntax.RestorePos(SavedPos);
- return;
- }
- word = m_Syntax.GetNextWord(bIsNumber);
- if (!bIsNumber) {
- m_Syntax.RestorePos(SavedPos);
- return;
- }
- if (m_Syntax.GetKeyword() != FX_BSTRC("obj")) {
- m_Syntax.RestorePos(SavedPos);
- return;
- }
- void* pResult = FXSYS_bsearch(&pos, m_SortedOffset.GetData(), m_SortedOffset.GetSize(), sizeof(FX_FILESIZE), _CompareFileSize);
- if (pResult == NULL) {
- m_Syntax.RestorePos(SavedPos);
- return;
- }
- FX_FILESIZE nextoff = ((FX_FILESIZE*)pResult)[1];
- FX_BOOL bNextOffValid = FALSE;
- if (nextoff != pos) {
- m_Syntax.RestorePos(nextoff);
- word = m_Syntax.GetNextWord(bIsNumber);
- if (word == FX_BSTRC("xref")) {
- bNextOffValid = TRUE;
- } else if (bIsNumber) {
- word = m_Syntax.GetNextWord(bIsNumber);
- if (bIsNumber && m_Syntax.GetKeyword() == FX_BSTRC("obj")) {
- bNextOffValid = TRUE;
- }
- }
- }
- if (!bNextOffValid) {
- m_Syntax.RestorePos(pos);
- while (1) {
- if (m_Syntax.GetKeyword() == FX_BSTRC("endobj")) {
- break;
- }
- if (m_Syntax.SavePos() == m_Syntax.m_FileLen) {
- break;
- }
- }
- nextoff = m_Syntax.SavePos();
- }
- size = (FX_DWORD)(nextoff - pos);
- pBuffer = FX_Alloc(uint8_t, size);
- m_Syntax.RestorePos(pos);
- m_Syntax.ReadBlock(pBuffer, size);
- m_Syntax.RestorePos(SavedPos);
+ return;
+ }
+ if (m_V5Type[objnum] == 1) {
+ FX_FILESIZE pos = m_CrossRef[objnum];
+ if (pos == 0) {
+ return;
}
-}
-CPDF_Object* CPDF_Parser::ParseIndirectObjectAt(CPDF_IndirectObjects* pObjList, FX_FILESIZE pos, FX_DWORD objnum,
- PARSE_CONTEXT* pContext)
-{
FX_FILESIZE SavedPos = m_Syntax.SavePos();
m_Syntax.RestorePos(pos);
FX_BOOL bIsNumber;
CFX_ByteString word = m_Syntax.GetNextWord(bIsNumber);
if (!bIsNumber) {
- m_Syntax.RestorePos(SavedPos);
- return NULL;
+ m_Syntax.RestorePos(SavedPos);
+ return;
}
- FX_FILESIZE objOffset = m_Syntax.SavePos();
- objOffset -= word.GetLength();
FX_DWORD parser_objnum = FXSYS_atoi(word);
- if (objnum && parser_objnum != objnum) {
- m_Syntax.RestorePos(SavedPos);
- return NULL;
+ if (parser_objnum && parser_objnum != objnum) {
+ m_Syntax.RestorePos(SavedPos);
+ return;
}
word = m_Syntax.GetNextWord(bIsNumber);
if (!bIsNumber) {
- m_Syntax.RestorePos(SavedPos);
- return NULL;
+ m_Syntax.RestorePos(SavedPos);
+ return;
}
- FX_DWORD parser_gennum = FXSYS_atoi(word);
if (m_Syntax.GetKeyword() != FX_BSTRC("obj")) {
- m_Syntax.RestorePos(SavedPos);
- return NULL;
+ m_Syntax.RestorePos(SavedPos);
+ return;
}
- CPDF_Object* pObj = m_Syntax.GetObject(pObjList, objnum, parser_gennum, pContext);
- m_Syntax.SavePos();
- CFX_ByteString bsWord = m_Syntax.GetKeyword();
- if (bsWord == FX_BSTRC("endobj")) {
- m_Syntax.SavePos();
+ void* pResult =
+ FXSYS_bsearch(&pos, m_SortedOffset.GetData(), m_SortedOffset.GetSize(),
+ sizeof(FX_FILESIZE), _CompareFileSize);
+ if (pResult == NULL) {
+ m_Syntax.RestorePos(SavedPos);
+ return;
+ }
+ FX_FILESIZE nextoff = ((FX_FILESIZE*)pResult)[1];
+ FX_BOOL bNextOffValid = FALSE;
+ if (nextoff != pos) {
+ m_Syntax.RestorePos(nextoff);
+ word = m_Syntax.GetNextWord(bIsNumber);
+ if (word == FX_BSTRC("xref")) {
+ bNextOffValid = TRUE;
+ } else if (bIsNumber) {
+ word = m_Syntax.GetNextWord(bIsNumber);
+ if (bIsNumber && m_Syntax.GetKeyword() == FX_BSTRC("obj")) {
+ bNextOffValid = TRUE;
+ }
+ }
}
- m_Syntax.RestorePos(SavedPos);
- if (pObj) {
- if (!objnum) {
- pObj->m_ObjNum = parser_objnum;
+ if (!bNextOffValid) {
+ m_Syntax.RestorePos(pos);
+ while (1) {
+ if (m_Syntax.GetKeyword() == FX_BSTRC("endobj")) {
+ break;
}
- pObj->m_GenNum = parser_gennum;
+ if (m_Syntax.SavePos() == m_Syntax.m_FileLen) {
+ break;
+ }
+ }
+ nextoff = m_Syntax.SavePos();
}
- return pObj;
-}
-CPDF_Object* CPDF_Parser::ParseIndirectObjectAtByStrict(CPDF_IndirectObjects* pObjList, FX_FILESIZE pos, FX_DWORD objnum,
- struct PARSE_CONTEXT* pContext, FX_FILESIZE *pResultPos)
-{
- FX_FILESIZE SavedPos = m_Syntax.SavePos();
+ size = (FX_DWORD)(nextoff - pos);
+ pBuffer = FX_Alloc(uint8_t, size);
m_Syntax.RestorePos(pos);
- FX_BOOL bIsNumber;
- CFX_ByteString word = m_Syntax.GetNextWord(bIsNumber);
- if (!bIsNumber) {
- m_Syntax.RestorePos(SavedPos);
- return NULL;
- }
- FX_DWORD parser_objnum = FXSYS_atoi(word);
- if (objnum && parser_objnum != objnum) {
- m_Syntax.RestorePos(SavedPos);
- return NULL;
- }
- word = m_Syntax.GetNextWord(bIsNumber);
- if (!bIsNumber) {
- m_Syntax.RestorePos(SavedPos);
- return NULL;
- }
- FX_DWORD gennum = FXSYS_atoi(word);
- if (m_Syntax.GetKeyword() != FX_BSTRC("obj")) {
- m_Syntax.RestorePos(SavedPos);
- return NULL;
- }
- CPDF_Object* pObj = m_Syntax.GetObjectByStrict(pObjList, objnum, gennum, pContext);
- if (pResultPos) {
- *pResultPos = m_Syntax.m_Pos;
- }
+ m_Syntax.ReadBlock(pBuffer, size);
m_Syntax.RestorePos(SavedPos);
- return pObj;
+ }
}
-CPDF_Dictionary* CPDF_Parser::LoadTrailerV4()
-{
- if (m_Syntax.GetKeyword() != FX_BSTRC("trailer")) {
- return NULL;
- }
- CPDF_Object* pObj = m_Syntax.GetObject(m_pDocument, 0, 0, 0);
- if (pObj == NULL || pObj->GetType() != PDFOBJ_DICTIONARY) {
- if (pObj) {
- pObj->Release();
- }
- return NULL;
- }
- return (CPDF_Dictionary*)pObj;
+CPDF_Object* CPDF_Parser::ParseIndirectObjectAt(CPDF_IndirectObjects* pObjList,
+ FX_FILESIZE pos,
+ FX_DWORD objnum,
+ PARSE_CONTEXT* pContext) {
+ FX_FILESIZE SavedPos = m_Syntax.SavePos();
+ m_Syntax.RestorePos(pos);
+ FX_BOOL bIsNumber;
+ CFX_ByteString word = m_Syntax.GetNextWord(bIsNumber);
+ if (!bIsNumber) {
+ m_Syntax.RestorePos(SavedPos);
+ return NULL;
+ }
+ FX_FILESIZE objOffset = m_Syntax.SavePos();
+ objOffset -= word.GetLength();
+ FX_DWORD parser_objnum = FXSYS_atoi(word);
+ if (objnum && parser_objnum != objnum) {
+ m_Syntax.RestorePos(SavedPos);
+ return NULL;
+ }
+ word = m_Syntax.GetNextWord(bIsNumber);
+ if (!bIsNumber) {
+ m_Syntax.RestorePos(SavedPos);
+ return NULL;
+ }
+ FX_DWORD parser_gennum = FXSYS_atoi(word);
+ if (m_Syntax.GetKeyword() != FX_BSTRC("obj")) {
+ m_Syntax.RestorePos(SavedPos);
+ return NULL;
+ }
+ CPDF_Object* pObj =
+ m_Syntax.GetObject(pObjList, objnum, parser_gennum, pContext);
+ m_Syntax.SavePos();
+ CFX_ByteString bsWord = m_Syntax.GetKeyword();
+ if (bsWord == FX_BSTRC("endobj")) {
+ m_Syntax.SavePos();
+ }
+ m_Syntax.RestorePos(SavedPos);
+ if (pObj) {
+ if (!objnum) {
+ pObj->m_ObjNum = parser_objnum;
+ }
+ pObj->m_GenNum = parser_gennum;
+ }
+ return pObj;
}
-FX_DWORD CPDF_Parser::GetPermissions(FX_BOOL bCheckRevision)
-{
- if (m_pSecurityHandler == NULL) {
- return (FX_DWORD) - 1;
- }
- FX_DWORD dwPermission = m_pSecurityHandler->GetPermissions();
- if (m_pEncryptDict && m_pEncryptDict->GetString(FX_BSTRC("Filter")) == FX_BSTRC("Standard")) {
- dwPermission &= 0xFFFFFFFC;
- dwPermission |= 0xFFFFF0C0;
- if(bCheckRevision && m_pEncryptDict->GetInteger(FX_BSTRC("R")) == 2) {
- dwPermission &= 0xFFFFF0FF;
- }
+CPDF_Object* CPDF_Parser::ParseIndirectObjectAtByStrict(
+ CPDF_IndirectObjects* pObjList,
+ FX_FILESIZE pos,
+ FX_DWORD objnum,
+ struct PARSE_CONTEXT* pContext,
+ FX_FILESIZE* pResultPos) {
+ FX_FILESIZE SavedPos = m_Syntax.SavePos();
+ m_Syntax.RestorePos(pos);
+ FX_BOOL bIsNumber;
+ CFX_ByteString word = m_Syntax.GetNextWord(bIsNumber);
+ if (!bIsNumber) {
+ m_Syntax.RestorePos(SavedPos);
+ return NULL;
+ }
+ FX_DWORD parser_objnum = FXSYS_atoi(word);
+ if (objnum && parser_objnum != objnum) {
+ m_Syntax.RestorePos(SavedPos);
+ return NULL;
+ }
+ word = m_Syntax.GetNextWord(bIsNumber);
+ if (!bIsNumber) {
+ m_Syntax.RestorePos(SavedPos);
+ return NULL;
+ }
+ FX_DWORD gennum = FXSYS_atoi(word);
+ if (m_Syntax.GetKeyword() != FX_BSTRC("obj")) {
+ m_Syntax.RestorePos(SavedPos);
+ return NULL;
+ }
+ CPDF_Object* pObj =
+ m_Syntax.GetObjectByStrict(pObjList, objnum, gennum, pContext);
+ if (pResultPos) {
+ *pResultPos = m_Syntax.m_Pos;
+ }
+ m_Syntax.RestorePos(SavedPos);
+ return pObj;
+}
+CPDF_Dictionary* CPDF_Parser::LoadTrailerV4() {
+ if (m_Syntax.GetKeyword() != FX_BSTRC("trailer")) {
+ return NULL;
+ }
+ CPDF_Object* pObj = m_Syntax.GetObject(m_pDocument, 0, 0, 0);
+ if (pObj == NULL || pObj->GetType() != PDFOBJ_DICTIONARY) {
+ if (pObj) {
+ pObj->Release();
}
- return dwPermission;
+ return NULL;
+ }
+ return (CPDF_Dictionary*)pObj;
}
-FX_BOOL CPDF_Parser::IsOwner()
-{
- return m_pSecurityHandler == NULL ? TRUE : m_pSecurityHandler->IsOwner();
+FX_DWORD CPDF_Parser::GetPermissions(FX_BOOL bCheckRevision) {
+ if (m_pSecurityHandler == NULL) {
+ return (FX_DWORD)-1;
+ }
+ FX_DWORD dwPermission = m_pSecurityHandler->GetPermissions();
+ if (m_pEncryptDict &&
+ m_pEncryptDict->GetString(FX_BSTRC("Filter")) == FX_BSTRC("Standard")) {
+ dwPermission &= 0xFFFFFFFC;
+ dwPermission |= 0xFFFFF0C0;
+ if (bCheckRevision && m_pEncryptDict->GetInteger(FX_BSTRC("R")) == 2) {
+ dwPermission &= 0xFFFFF0FF;
+ }
+ }
+ return dwPermission;
}
-void CPDF_Parser::SetSecurityHandler(CPDF_SecurityHandler* pSecurityHandler, FX_BOOL bForced)
-{
- ASSERT(m_pSecurityHandler == NULL);
- if (!m_bForceUseSecurityHandler) {
- delete m_pSecurityHandler;
- m_pSecurityHandler = NULL;
- }
- m_bForceUseSecurityHandler = bForced;
- m_pSecurityHandler = pSecurityHandler;
- if (m_bForceUseSecurityHandler) {
- return;
- }
- m_Syntax.m_pCryptoHandler = pSecurityHandler->CreateCryptoHandler();
- m_Syntax.m_pCryptoHandler->Init(NULL, pSecurityHandler);
+FX_BOOL CPDF_Parser::IsOwner() {
+ return m_pSecurityHandler == NULL ? TRUE : m_pSecurityHandler->IsOwner();
}
-FX_BOOL CPDF_Parser::IsLinearizedFile(IFX_FileRead* pFileAccess, FX_DWORD offset)
-{
- m_Syntax.InitParser(pFileAccess, offset);
- m_Syntax.RestorePos(m_Syntax.m_HeaderOffset + 9);
- FX_FILESIZE SavedPos = m_Syntax.SavePos();
- FX_BOOL bIsNumber;
- CFX_ByteString word = m_Syntax.GetNextWord(bIsNumber);
- if (!bIsNumber) {
- return FALSE;
- }
- FX_DWORD objnum = FXSYS_atoi(word);
- word = m_Syntax.GetNextWord(bIsNumber);
- if (!bIsNumber) {
- return FALSE;
- }
- FX_DWORD gennum = FXSYS_atoi(word);
- if (m_Syntax.GetKeyword() != FX_BSTRC("obj")) {
- m_Syntax.RestorePos(SavedPos);
- return FALSE;
- }
- m_pLinearized = m_Syntax.GetObject(NULL, objnum, gennum, 0);
- if (!m_pLinearized) {
- return FALSE;
- }
- if (m_pLinearized->GetDict() && m_pLinearized->GetDict()->GetElement(FX_BSTRC("Linearized"))) {
- m_Syntax.GetNextWord(bIsNumber);
- CPDF_Object *pLen = m_pLinearized->GetDict()->GetElement(FX_BSTRC("L"));
- if (!pLen) {
- m_pLinearized->Release();
- m_pLinearized = NULL;
- return FALSE;
- }
- if (pLen->GetInteger() != (int)pFileAccess->GetSize()) {
- return FALSE;
- }
- CPDF_Object *pNo = m_pLinearized->GetDict()->GetElement(FX_BSTRC("P"));
- if (pNo && pNo->GetType() == PDFOBJ_NUMBER) {
- m_dwFirstPageNo = pNo->GetInteger();
- }
- CPDF_Object *pTable = m_pLinearized->GetDict()->GetElement(FX_BSTRC("T"));
- if (pTable && pTable->GetType() == PDFOBJ_NUMBER) {
- m_LastXRefOffset = pTable->GetInteger();
- }
- return TRUE;
- }
- m_pLinearized->Release();
- m_pLinearized = NULL;
+void CPDF_Parser::SetSecurityHandler(CPDF_SecurityHandler* pSecurityHandler,
+ FX_BOOL bForced) {
+ ASSERT(m_pSecurityHandler == NULL);
+ if (!m_bForceUseSecurityHandler) {
+ delete m_pSecurityHandler;
+ m_pSecurityHandler = NULL;
+ }
+ m_bForceUseSecurityHandler = bForced;
+ m_pSecurityHandler = pSecurityHandler;
+ if (m_bForceUseSecurityHandler) {
+ return;
+ }
+ m_Syntax.m_pCryptoHandler = pSecurityHandler->CreateCryptoHandler();
+ m_Syntax.m_pCryptoHandler->Init(NULL, pSecurityHandler);
+}
+FX_BOOL CPDF_Parser::IsLinearizedFile(IFX_FileRead* pFileAccess,
+ FX_DWORD offset) {
+ m_Syntax.InitParser(pFileAccess, offset);
+ m_Syntax.RestorePos(m_Syntax.m_HeaderOffset + 9);
+ FX_FILESIZE SavedPos = m_Syntax.SavePos();
+ FX_BOOL bIsNumber;
+ CFX_ByteString word = m_Syntax.GetNextWord(bIsNumber);
+ if (!bIsNumber) {
return FALSE;
+ }
+ FX_DWORD objnum = FXSYS_atoi(word);
+ word = m_Syntax.GetNextWord(bIsNumber);
+ if (!bIsNumber) {
+ return FALSE;
+ }
+ FX_DWORD gennum = FXSYS_atoi(word);
+ if (m_Syntax.GetKeyword() != FX_BSTRC("obj")) {
+ m_Syntax.RestorePos(SavedPos);
+ return FALSE;
+ }
+ m_pLinearized = m_Syntax.GetObject(NULL, objnum, gennum, 0);
+ if (!m_pLinearized) {
+ return FALSE;
+ }
+ if (m_pLinearized->GetDict() &&
+ m_pLinearized->GetDict()->GetElement(FX_BSTRC("Linearized"))) {
+ m_Syntax.GetNextWord(bIsNumber);
+ CPDF_Object* pLen = m_pLinearized->GetDict()->GetElement(FX_BSTRC("L"));
+ if (!pLen) {
+ m_pLinearized->Release();
+ m_pLinearized = NULL;
+ return FALSE;
+ }
+ if (pLen->GetInteger() != (int)pFileAccess->GetSize()) {
+ return FALSE;
+ }
+ CPDF_Object* pNo = m_pLinearized->GetDict()->GetElement(FX_BSTRC("P"));
+ if (pNo && pNo->GetType() == PDFOBJ_NUMBER) {
+ m_dwFirstPageNo = pNo->GetInteger();
+ }
+ CPDF_Object* pTable = m_pLinearized->GetDict()->GetElement(FX_BSTRC("T"));
+ if (pTable && pTable->GetType() == PDFOBJ_NUMBER) {
+ m_LastXRefOffset = pTable->GetInteger();
+ }
+ return TRUE;
+ }
+ m_pLinearized->Release();
+ m_pLinearized = NULL;
+ return FALSE;
}
-FX_DWORD CPDF_Parser::StartAsynParse(IFX_FileRead* pFileAccess, FX_BOOL bReParse, FX_BOOL bOwnFileRead)
-{
- CloseParser(bReParse);
- m_bXRefStream = FALSE;
+FX_DWORD CPDF_Parser::StartAsynParse(IFX_FileRead* pFileAccess,
+ FX_BOOL bReParse,
+ FX_BOOL bOwnFileRead) {
+ CloseParser(bReParse);
+ m_bXRefStream = FALSE;
+ m_LastXRefOffset = 0;
+ m_bOwnFileRead = bOwnFileRead;
+ int32_t offset = GetHeaderOffset(pFileAccess);
+ if (offset == -1) {
+ return PDFPARSE_ERROR_FORMAT;
+ }
+ if (!IsLinearizedFile(pFileAccess, offset)) {
+ m_Syntax.m_pFileAccess = NULL;
+ return StartParse(pFileAccess, bReParse, bOwnFileRead);
+ }
+ if (!bReParse) {
+ m_pDocument = new CPDF_Document(this);
+ }
+ FX_FILESIZE dwFirstXRefOffset = m_Syntax.SavePos();
+ FX_BOOL bXRefRebuilt = FALSE;
+ FX_BOOL bLoadV4 = FALSE;
+ if (!(bLoadV4 = LoadCrossRefV4(dwFirstXRefOffset, 0, FALSE, FALSE)) &&
+ !LoadCrossRefV5(dwFirstXRefOffset, dwFirstXRefOffset, TRUE)) {
+ if (!RebuildCrossRef()) {
+ return PDFPARSE_ERROR_FORMAT;
+ }
+ bXRefRebuilt = TRUE;
m_LastXRefOffset = 0;
- m_bOwnFileRead = bOwnFileRead;
- int32_t offset = GetHeaderOffset(pFileAccess);
- if (offset == -1) {
- return PDFPARSE_ERROR_FORMAT;
- }
- if (!IsLinearizedFile(pFileAccess, offset)) {
- m_Syntax.m_pFileAccess = NULL;
- return StartParse(pFileAccess, bReParse, bOwnFileRead);
- }
- if (!bReParse) {
- m_pDocument = new CPDF_Document(this);
+ }
+ if (bLoadV4) {
+ m_pTrailer = LoadTrailerV4();
+ if (m_pTrailer == NULL) {
+ return FALSE;
}
- FX_FILESIZE dwFirstXRefOffset = m_Syntax.SavePos();
- FX_BOOL bXRefRebuilt = FALSE;
- FX_BOOL bLoadV4 = FALSE;
- if (!(bLoadV4 = LoadCrossRefV4(dwFirstXRefOffset, 0, FALSE, FALSE)) && !LoadCrossRefV5(dwFirstXRefOffset, dwFirstXRefOffset, TRUE)) {
- if (!RebuildCrossRef()) {
- return PDFPARSE_ERROR_FORMAT;
- }
- bXRefRebuilt = TRUE;
- m_LastXRefOffset = 0;
+ int32_t xrefsize = GetDirectInteger(m_pTrailer, FX_BSTRC("Size"));
+ if (xrefsize > 0) {
+ m_CrossRef.SetSize(xrefsize);
+ m_V5Type.SetSize(xrefsize);
+ }
+ }
+ FX_DWORD dwRet = SetEncryptHandler();
+ if (dwRet != PDFPARSE_ERROR_SUCCESS) {
+ return dwRet;
+ }
+ m_pDocument->LoadAsynDoc(m_pLinearized->GetDict());
+ if (m_pDocument->GetRoot() == NULL || m_pDocument->GetPageCount() == 0) {
+ if (bXRefRebuilt) {
+ return PDFPARSE_ERROR_FORMAT;
}
- if (bLoadV4) {
- m_pTrailer = LoadTrailerV4();
- if (m_pTrailer == NULL) {
- return FALSE;
- }
- int32_t xrefsize = GetDirectInteger(m_pTrailer, FX_BSTRC("Size"));
- if (xrefsize > 0) {
- m_CrossRef.SetSize(xrefsize);
- m_V5Type.SetSize(xrefsize);
- }
+ ReleaseEncryptHandler();
+ if (!RebuildCrossRef()) {
+ return PDFPARSE_ERROR_FORMAT;
}
- FX_DWORD dwRet = SetEncryptHandler();
+ dwRet = SetEncryptHandler();
if (dwRet != PDFPARSE_ERROR_SUCCESS) {
- return dwRet;
+ return dwRet;
}
m_pDocument->LoadAsynDoc(m_pLinearized->GetDict());
- if (m_pDocument->GetRoot() == NULL || m_pDocument->GetPageCount() == 0) {
- if (bXRefRebuilt) {
- return PDFPARSE_ERROR_FORMAT;
- }
- ReleaseEncryptHandler();
- if (!RebuildCrossRef()) {
- return PDFPARSE_ERROR_FORMAT;
- }
- dwRet = SetEncryptHandler();
- if (dwRet != PDFPARSE_ERROR_SUCCESS) {
- return dwRet;
- }
- m_pDocument->LoadAsynDoc(m_pLinearized->GetDict());
- if (m_pDocument->GetRoot() == NULL) {
- return PDFPARSE_ERROR_FORMAT;
- }
- }
- FXSYS_qsort(m_SortedOffset.GetData(), m_SortedOffset.GetSize(), sizeof(FX_FILESIZE), _CompareFileSize);
- FX_DWORD RootObjNum = GetRootObjNum();
+ if (m_pDocument->GetRoot() == NULL) {
+ return PDFPARSE_ERROR_FORMAT;
+ }
+ }
+ FXSYS_qsort(m_SortedOffset.GetData(), m_SortedOffset.GetSize(),
+ sizeof(FX_FILESIZE), _CompareFileSize);
+ FX_DWORD RootObjNum = GetRootObjNum();
+ if (RootObjNum == 0) {
+ ReleaseEncryptHandler();
+ RebuildCrossRef();
+ RootObjNum = GetRootObjNum();
if (RootObjNum == 0) {
- ReleaseEncryptHandler();
- RebuildCrossRef();
- RootObjNum = GetRootObjNum();
- if (RootObjNum == 0) {
- return PDFPARSE_ERROR_FORMAT;
- }
- dwRet = SetEncryptHandler();
- if (dwRet != PDFPARSE_ERROR_SUCCESS) {
- return dwRet;
- }
+ return PDFPARSE_ERROR_FORMAT;
}
- if (m_pSecurityHandler && m_pSecurityHandler->IsMetadataEncrypted()) {
- CPDF_Object* pMetadata = m_pDocument->GetRoot()->GetElement(FX_BSTRC("Metadata"));
- if (pMetadata && pMetadata->GetType() == PDFOBJ_REFERENCE) {
- m_Syntax.m_MetadataObjnum = ((CPDF_Reference*) pMetadata)->GetRefObjNum();
- }
+ dwRet = SetEncryptHandler();
+ if (dwRet != PDFPARSE_ERROR_SUCCESS) {
+ return dwRet;
+ }
+ }
+ if (m_pSecurityHandler && m_pSecurityHandler->IsMetadataEncrypted()) {
+ CPDF_Object* pMetadata =
+ m_pDocument->GetRoot()->GetElement(FX_BSTRC("Metadata"));
+ if (pMetadata && pMetadata->GetType() == PDFOBJ_REFERENCE) {
+ m_Syntax.m_MetadataObjnum = ((CPDF_Reference*)pMetadata)->GetRefObjNum();
}
- return PDFPARSE_ERROR_SUCCESS;
+ }
+ return PDFPARSE_ERROR_SUCCESS;
}
-FX_BOOL CPDF_Parser::LoadLinearizedAllCrossRefV5(FX_FILESIZE xrefpos)
-{
+FX_BOOL CPDF_Parser::LoadLinearizedAllCrossRefV5(FX_FILESIZE xrefpos) {
+ if (!LoadCrossRefV5(xrefpos, xrefpos, FALSE)) {
+ return FALSE;
+ }
+ while (xrefpos)
if (!LoadCrossRefV5(xrefpos, xrefpos, FALSE)) {
- return FALSE;
+ return FALSE;
}
- while (xrefpos)
- if (!LoadCrossRefV5(xrefpos, xrefpos, FALSE)) {
- return FALSE;
- }
- m_ObjectStreamMap.InitHashTable(101, FALSE);
- m_bXRefStream = TRUE;
- return TRUE;
+ m_ObjectStreamMap.InitHashTable(101, FALSE);
+ m_bXRefStream = TRUE;
+ return TRUE;
}
-FX_DWORD CPDF_Parser::LoadLinearizedMainXRefTable()
-{
- FX_DWORD dwSaveMetadataObjnum = m_Syntax.m_MetadataObjnum;
- m_Syntax.m_MetadataObjnum = 0;
- if (m_pTrailer) {
- m_pTrailer->Release();
- m_pTrailer = NULL;
- }
- m_Syntax.RestorePos(m_LastXRefOffset - m_Syntax.m_HeaderOffset);
- uint8_t ch = 0;
- FX_DWORD dwCount = 0;
- m_Syntax.GetNextChar(ch);
- int32_t type = PDF_CharType[ch];
- while (type == 'W') {
- ++dwCount;
- if (m_Syntax.m_FileLen >= (FX_FILESIZE)(m_Syntax.SavePos() + m_Syntax.m_HeaderOffset)) {
- break;
- }
- m_Syntax.GetNextChar(ch);
- type = PDF_CharType[ch];
- }
- m_LastXRefOffset += dwCount;
- FX_POSITION pos = m_ObjectStreamMap.GetStartPosition();
- while (pos) {
- void* objnum;
- CPDF_StreamAcc* pStream;
- m_ObjectStreamMap.GetNextAssoc(pos, objnum, (void*&)pStream);
- delete pStream;
- }
- m_ObjectStreamMap.RemoveAll();
- if (!LoadLinearizedAllCrossRefV4(m_LastXRefOffset, m_dwXrefStartObjNum) && !LoadLinearizedAllCrossRefV5(m_LastXRefOffset)) {
- m_LastXRefOffset = 0;
- m_Syntax.m_MetadataObjnum = dwSaveMetadataObjnum;
- return PDFPARSE_ERROR_FORMAT;
+FX_DWORD CPDF_Parser::LoadLinearizedMainXRefTable() {
+ FX_DWORD dwSaveMetadataObjnum = m_Syntax.m_MetadataObjnum;
+ m_Syntax.m_MetadataObjnum = 0;
+ if (m_pTrailer) {
+ m_pTrailer->Release();
+ m_pTrailer = NULL;
+ }
+ m_Syntax.RestorePos(m_LastXRefOffset - m_Syntax.m_HeaderOffset);
+ uint8_t ch = 0;
+ FX_DWORD dwCount = 0;
+ m_Syntax.GetNextChar(ch);
+ int32_t type = PDF_CharType[ch];
+ while (type == 'W') {
+ ++dwCount;
+ if (m_Syntax.m_FileLen >=
+ (FX_FILESIZE)(m_Syntax.SavePos() + m_Syntax.m_HeaderOffset)) {
+ break;
}
- FXSYS_qsort(m_SortedOffset.GetData(), m_SortedOffset.GetSize(), sizeof(FX_FILESIZE), _CompareFileSize);
+ m_Syntax.GetNextChar(ch);
+ type = PDF_CharType[ch];
+ }
+ m_LastXRefOffset += dwCount;
+ FX_POSITION pos = m_ObjectStreamMap.GetStartPosition();
+ while (pos) {
+ void* objnum;
+ CPDF_StreamAcc* pStream;
+ m_ObjectStreamMap.GetNextAssoc(pos, objnum, (void*&)pStream);
+ delete pStream;
+ }
+ m_ObjectStreamMap.RemoveAll();
+ if (!LoadLinearizedAllCrossRefV4(m_LastXRefOffset, m_dwXrefStartObjNum) &&
+ !LoadLinearizedAllCrossRefV5(m_LastXRefOffset)) {
+ m_LastXRefOffset = 0;
m_Syntax.m_MetadataObjnum = dwSaveMetadataObjnum;
- return PDFPARSE_ERROR_SUCCESS;
+ return PDFPARSE_ERROR_FORMAT;
+ }
+ FXSYS_qsort(m_SortedOffset.GetData(), m_SortedOffset.GetSize(),
+ sizeof(FX_FILESIZE), _CompareFileSize);
+ m_Syntax.m_MetadataObjnum = dwSaveMetadataObjnum;
+ return PDFPARSE_ERROR_SUCCESS;
}
// static
int CPDF_SyntaxParser::s_CurrentRecursionDepth = 0;
-CPDF_SyntaxParser::CPDF_SyntaxParser()
-{
- m_pFileAccess = NULL;
- m_pCryptoHandler = NULL;
- m_pFileBuf = NULL;
- m_BufSize = CPDF_ModuleMgr::kFileBufSize;
- m_pFileBuf = NULL;
- m_MetadataObjnum = 0;
- m_dwWordPos = 0;
- m_bFileStream = FALSE;
+CPDF_SyntaxParser::CPDF_SyntaxParser() {
+ m_pFileAccess = NULL;
+ m_pCryptoHandler = NULL;
+ m_pFileBuf = NULL;
+ m_BufSize = CPDF_ModuleMgr::kFileBufSize;
+ m_pFileBuf = NULL;
+ m_MetadataObjnum = 0;
+ m_dwWordPos = 0;
+ m_bFileStream = FALSE;
}
-CPDF_SyntaxParser::~CPDF_SyntaxParser()
-{
- if (m_pFileBuf) {
- FX_Free(m_pFileBuf);
- }
+CPDF_SyntaxParser::~CPDF_SyntaxParser() {
+ if (m_pFileBuf) {
+ FX_Free(m_pFileBuf);
+ }
}
-FX_BOOL CPDF_SyntaxParser::GetCharAt(FX_FILESIZE pos, uint8_t& ch)
-{
- FX_FILESIZE save_pos = m_Pos;
- m_Pos = pos;
- FX_BOOL ret = GetNextChar(ch);
- m_Pos = save_pos;
- return ret;
+FX_BOOL CPDF_SyntaxParser::GetCharAt(FX_FILESIZE pos, uint8_t& ch) {
+ FX_FILESIZE save_pos = m_Pos;
+ m_Pos = pos;
+ FX_BOOL ret = GetNextChar(ch);
+ m_Pos = save_pos;
+ return ret;
}
-FX_BOOL CPDF_SyntaxParser::GetNextChar(uint8_t& ch)
-{
- FX_FILESIZE pos = m_Pos + m_HeaderOffset;
- if (pos >= m_FileLen) {
- return FALSE;
- }
- if (m_BufOffset >= pos || (FX_FILESIZE)(m_BufOffset + m_BufSize) <= pos) {
- FX_FILESIZE read_pos = pos;
- FX_DWORD read_size = m_BufSize;
- if ((FX_FILESIZE)read_size > m_FileLen) {
- read_size = (FX_DWORD)m_FileLen;
- }
- if ((FX_FILESIZE)(read_pos + read_size) > m_FileLen) {
- if (m_FileLen < (FX_FILESIZE)read_size) {
- read_pos = 0;
- read_size = (FX_DWORD)m_FileLen;
- } else {
- read_pos = m_FileLen - read_size;
- }
- }
- if (!m_pFileAccess->ReadBlock(m_pFileBuf, read_pos, read_size)) {
- return FALSE;
- }
- m_BufOffset = read_pos;
- }
- ch = m_pFileBuf[pos - m_BufOffset];
- m_Pos ++;
- return TRUE;
+FX_BOOL CPDF_SyntaxParser::GetNextChar(uint8_t& ch) {
+ FX_FILESIZE pos = m_Pos + m_HeaderOffset;
+ if (pos >= m_FileLen) {
+ return FALSE;
+ }
+ if (m_BufOffset >= pos || (FX_FILESIZE)(m_BufOffset + m_BufSize) <= pos) {
+ FX_FILESIZE read_pos = pos;
+ FX_DWORD read_size = m_BufSize;
+ if ((FX_FILESIZE)read_size > m_FileLen) {
+ read_size = (FX_DWORD)m_FileLen;
+ }
+ if ((FX_FILESIZE)(read_pos + read_size) > m_FileLen) {
+ if (m_FileLen < (FX_FILESIZE)read_size) {
+ read_pos = 0;
+ read_size = (FX_DWORD)m_FileLen;
+ } else {
+ read_pos = m_FileLen - read_size;
+ }
+ }
+ if (!m_pFileAccess->ReadBlock(m_pFileBuf, read_pos, read_size)) {
+ return FALSE;
+ }
+ m_BufOffset = read_pos;
+ }
+ ch = m_pFileBuf[pos - m_BufOffset];
+ m_Pos++;
+ return TRUE;
}
-FX_BOOL CPDF_SyntaxParser::GetCharAtBackward(FX_FILESIZE pos, uint8_t& ch)
-{
- pos += m_HeaderOffset;
- if (pos >= m_FileLen) {
- return FALSE;
- }
- if (m_BufOffset >= pos || (FX_FILESIZE)(m_BufOffset + m_BufSize) <= pos) {
- FX_FILESIZE read_pos;
- if (pos < (FX_FILESIZE)m_BufSize) {
- read_pos = 0;
- } else {
- read_pos = pos - m_BufSize + 1;
- }
- FX_DWORD read_size = m_BufSize;
- if ((FX_FILESIZE)(read_pos + read_size) > m_FileLen) {
- if (m_FileLen < (FX_FILESIZE)read_size) {
- read_pos = 0;
- read_size = (FX_DWORD)m_FileLen;
- } else {
- read_pos = m_FileLen - read_size;
- }
- }
- if (!m_pFileAccess->ReadBlock(m_pFileBuf, read_pos, read_size)) {
- return FALSE;
- }
- m_BufOffset = read_pos;
- }
- ch = m_pFileBuf[pos - m_BufOffset];
- return TRUE;
+FX_BOOL CPDF_SyntaxParser::GetCharAtBackward(FX_FILESIZE pos, uint8_t& ch) {
+ pos += m_HeaderOffset;
+ if (pos >= m_FileLen) {
+ return FALSE;
+ }
+ if (m_BufOffset >= pos || (FX_FILESIZE)(m_BufOffset + m_BufSize) <= pos) {
+ FX_FILESIZE read_pos;
+ if (pos < (FX_FILESIZE)m_BufSize) {
+ read_pos = 0;
+ } else {
+ read_pos = pos - m_BufSize + 1;
+ }
+ FX_DWORD read_size = m_BufSize;
+ if ((FX_FILESIZE)(read_pos + read_size) > m_FileLen) {
+ if (m_FileLen < (FX_FILESIZE)read_size) {
+ read_pos = 0;
+ read_size = (FX_DWORD)m_FileLen;
+ } else {
+ read_pos = m_FileLen - read_size;
+ }
+ }
+ if (!m_pFileAccess->ReadBlock(m_pFileBuf, read_pos, read_size)) {
+ return FALSE;
+ }
+ m_BufOffset = read_pos;
+ }
+ ch = m_pFileBuf[pos - m_BufOffset];
+ return TRUE;
}
-FX_BOOL CPDF_SyntaxParser::ReadBlock(uint8_t* pBuf, FX_DWORD size)
-{
- if (!m_pFileAccess->ReadBlock(pBuf, m_Pos + m_HeaderOffset, size)) {
- return FALSE;
- }
- m_Pos += size;
- return TRUE;
+FX_BOOL CPDF_SyntaxParser::ReadBlock(uint8_t* pBuf, FX_DWORD size) {
+ if (!m_pFileAccess->ReadBlock(pBuf, m_Pos + m_HeaderOffset, size)) {
+ return FALSE;
+ }
+ m_Pos += size;
+ return TRUE;
}
#define MAX_WORD_BUFFER 256
-void CPDF_SyntaxParser::GetNextWord()
-{
- m_WordSize = 0;
- m_bIsNumber = TRUE;
- uint8_t ch;
- if (!GetNextChar(ch)) {
+void CPDF_SyntaxParser::GetNextWord() {
+ m_WordSize = 0;
+ m_bIsNumber = TRUE;
+ uint8_t ch;
+ if (!GetNextChar(ch)) {
+ return;
+ }
+ uint8_t type = PDF_CharType[ch];
+ while (1) {
+ while (type == 'W') {
+ if (!GetNextChar(ch)) {
return;
+ }
+ type = PDF_CharType[ch];
+ }
+ if (ch != '%') {
+ break;
}
- uint8_t type = PDF_CharType[ch];
while (1) {
- while (type == 'W') {
- if (!GetNextChar(ch)) {
- return;
- }
- type = PDF_CharType[ch];
+ if (!GetNextChar(ch)) {
+ return;
+ }
+ if (ch == '\r' || ch == '\n') {
+ break;
+ }
+ }
+ type = PDF_CharType[ch];
+ }
+ if (type == 'D') {
+ m_bIsNumber = FALSE;
+ m_WordBuffer[m_WordSize++] = ch;
+ if (ch == '/') {
+ while (1) {
+ if (!GetNextChar(ch)) {
+ return;
}
- if (ch != '%') {
- break;
+ type = PDF_CharType[ch];
+ if (type != 'R' && type != 'N') {
+ m_Pos--;
+ return;
}
- while (1) {
- if (!GetNextChar(ch)) {
- return;
- }
- if (ch == '\r' || ch == '\n') {
- break;
- }
+ if (m_WordSize < MAX_WORD_BUFFER) {
+ m_WordBuffer[m_WordSize++] = ch;
}
- type = PDF_CharType[ch];
- }
- if (type == 'D') {
- m_bIsNumber = FALSE;
+ }
+ } else if (ch == '<') {
+ if (!GetNextChar(ch)) {
+ return;
+ }
+ if (ch == '<') {
m_WordBuffer[m_WordSize++] = ch;
- if (ch == '/') {
- while (1) {
- if (!GetNextChar(ch)) {
- return;
- }
- type = PDF_CharType[ch];
- if (type != 'R' && type != 'N') {
- m_Pos --;
- return;
- }
- if (m_WordSize < MAX_WORD_BUFFER) {
- m_WordBuffer[m_WordSize++] = ch;
- }
- }
- } else if (ch == '<') {
- if (!GetNextChar(ch)) {
- return;
- }
- if (ch == '<') {
- m_WordBuffer[m_WordSize++] = ch;
- } else {
- m_Pos --;
- }
- } else if (ch == '>') {
- if (!GetNextChar(ch)) {
- return;
- }
- if (ch == '>') {
- m_WordBuffer[m_WordSize++] = ch;
- } else {
- m_Pos --;
- }
- }
+ } else {
+ m_Pos--;
+ }
+ } else if (ch == '>') {
+ if (!GetNextChar(ch)) {
return;
+ }
+ if (ch == '>') {
+ m_WordBuffer[m_WordSize++] = ch;
+ } else {
+ m_Pos--;
+ }
}
- while (1) {
- if (m_WordSize < MAX_WORD_BUFFER) {
- m_WordBuffer[m_WordSize++] = ch;
- }
- if (type != 'N') {
- m_bIsNumber = FALSE;
- }
- if (!GetNextChar(ch)) {
- return;
- }
- type = PDF_CharType[ch];
- if (type == 'D' || type == 'W') {
- m_Pos --;
- break;
- }
+ return;
+ }
+ while (1) {
+ if (m_WordSize < MAX_WORD_BUFFER) {
+ m_WordBuffer[m_WordSize++] = ch;
+ }
+ if (type != 'N') {
+ m_bIsNumber = FALSE;
}
-}
-CFX_ByteString CPDF_SyntaxParser::ReadString()
-{
- uint8_t ch;
if (!GetNextChar(ch)) {
- return CFX_ByteString();
+ return;
}
- CFX_ByteTextBuf buf;
- int32_t parlevel = 0;
- int32_t status = 0, iEscCode = 0;
- while (1) {
- switch (status) {
- case 0:
- if (ch == ')') {
- if (parlevel == 0) {
- return buf.GetByteString();
- }
- parlevel --;
- buf.AppendChar(')');
- } else if (ch == '(') {
- parlevel ++;
- buf.AppendChar('(');
- } else if (ch == '\\') {
- status = 1;
- } else {
- buf.AppendChar(ch);
- }
- break;
- case 1:
- if (ch >= '0' && ch <= '7') {
- iEscCode = ch - '0';
- status = 2;
- break;
- }
- if (ch == 'n') {
- buf.AppendChar('\n');
- } else if (ch == 'r') {
- buf.AppendChar('\r');
- } else if (ch == 't') {
- buf.AppendChar('\t');
- } else if (ch == 'b') {
- buf.AppendChar('\b');
- } else if (ch == 'f') {
- buf.AppendChar('\f');
- } else if (ch == '\r') {
- status = 4;
- break;
- } else if (ch == '\n') {
- } else {
- buf.AppendChar(ch);
- }
- status = 0;
- break;
- case 2:
- if (ch >= '0' && ch <= '7') {
- iEscCode = iEscCode * 8 + ch - '0';
- status = 3;
- } else {
- buf.AppendChar(iEscCode);
- status = 0;
- continue;
- }
- break;
- case 3:
- if (ch >= '0' && ch <= '7') {
- iEscCode = iEscCode * 8 + ch - '0';
- buf.AppendChar(iEscCode);
- status = 0;
- } else {
- buf.AppendChar(iEscCode);
- status = 0;
- continue;
- }
- break;
- case 4:
- status = 0;
- if (ch != '\n') {
- continue;
- }
- break;
+ type = PDF_CharType[ch];
+ if (type == 'D' || type == 'W') {
+ m_Pos--;
+ break;
+ }
+ }
+}
+CFX_ByteString CPDF_SyntaxParser::ReadString() {
+ uint8_t ch;
+ if (!GetNextChar(ch)) {
+ return CFX_ByteString();
+ }
+ CFX_ByteTextBuf buf;
+ int32_t parlevel = 0;
+ int32_t status = 0, iEscCode = 0;
+ while (1) {
+ switch (status) {
+ case 0:
+ if (ch == ')') {
+ if (parlevel == 0) {
+ return buf.GetByteString();
+ }
+ parlevel--;
+ buf.AppendChar(')');
+ } else if (ch == '(') {
+ parlevel++;
+ buf.AppendChar('(');
+ } else if (ch == '\\') {
+ status = 1;
+ } else {
+ buf.AppendChar(ch);
+ }
+ break;
+ case 1:
+ if (ch >= '0' && ch <= '7') {
+ iEscCode = ch - '0';
+ status = 2;
+ break;
+ }
+ if (ch == 'n') {
+ buf.AppendChar('\n');
+ } else if (ch == 'r') {
+ buf.AppendChar('\r');
+ } else if (ch == 't') {
+ buf.AppendChar('\t');
+ } else if (ch == 'b') {
+ buf.AppendChar('\b');
+ } else if (ch == 'f') {
+ buf.AppendChar('\f');
+ } else if (ch == '\r') {
+ status = 4;
+ break;
+ } else if (ch == '\n') {
+ } else {
+ buf.AppendChar(ch);
+ }
+ status = 0;
+ break;
+ case 2:
+ if (ch >= '0' && ch <= '7') {
+ iEscCode = iEscCode * 8 + ch - '0';
+ status = 3;
+ } else {
+ buf.AppendChar(iEscCode);
+ status = 0;
+ continue;
+ }
+ break;
+ case 3:
+ if (ch >= '0' && ch <= '7') {
+ iEscCode = iEscCode * 8 + ch - '0';
+ buf.AppendChar(iEscCode);
+ status = 0;
+ } else {
+ buf.AppendChar(iEscCode);
+ status = 0;
+ continue;
}
- if (!GetNextChar(ch)) {
- break;
+ break;
+ case 4:
+ status = 0;
+ if (ch != '\n') {
+ continue;
}
+ break;
}
- GetNextChar(ch);
- return buf.GetByteString();
-}
-CFX_ByteString CPDF_SyntaxParser::ReadHexString()
-{
- uint8_t ch;
if (!GetNextChar(ch)) {
- return CFX_ByteString();
+ break;
}
- CFX_BinaryBuf buf;
- FX_BOOL bFirst = TRUE;
- uint8_t code = 0;
- while (1) {
- if (ch == '>') {
- break;
- }
- if (ch >= '0' && ch <= '9') {
- if (bFirst) {
- code = (ch - '0') * 16;
- } else {
- code += ch - '0';
- buf.AppendByte((uint8_t)code);
- }
- bFirst = !bFirst;
- } else if (ch >= 'A' && ch <= 'F') {
- if (bFirst) {
- code = (ch - 'A' + 10) * 16;
- } else {
- code += ch - 'A' + 10;
- buf.AppendByte((uint8_t)code);
- }
- bFirst = !bFirst;
- } else if (ch >= 'a' && ch <= 'f') {
- if (bFirst) {
- code = (ch - 'a' + 10) * 16;
- } else {
- code += ch - 'a' + 10;
- buf.AppendByte((uint8_t)code);
- }
- bFirst = !bFirst;
- }
- if (!GetNextChar(ch)) {
- break;
- }
+ }
+ GetNextChar(ch);
+ return buf.GetByteString();
+}
+CFX_ByteString CPDF_SyntaxParser::ReadHexString() {
+ uint8_t ch;
+ if (!GetNextChar(ch)) {
+ return CFX_ByteString();
+ }
+ CFX_BinaryBuf buf;
+ FX_BOOL bFirst = TRUE;
+ uint8_t code = 0;
+ while (1) {
+ if (ch == '>') {
+ break;
}
- if (!bFirst) {
+ if (ch >= '0' && ch <= '9') {
+ if (bFirst) {
+ code = (ch - '0') * 16;
+ } else {
+ code += ch - '0';
+ buf.AppendByte((uint8_t)code);
+ }
+ bFirst = !bFirst;
+ } else if (ch >= 'A' && ch <= 'F') {
+ if (bFirst) {
+ code = (ch - 'A' + 10) * 16;
+ } else {
+ code += ch - 'A' + 10;
buf.AppendByte((uint8_t)code);
+ }
+ bFirst = !bFirst;
+ } else if (ch >= 'a' && ch <= 'f') {
+ if (bFirst) {
+ code = (ch - 'a' + 10) * 16;
+ } else {
+ code += ch - 'a' + 10;
+ buf.AppendByte((uint8_t)code);
+ }
+ bFirst = !bFirst;
}
- return buf.GetByteString();
-}
-void CPDF_SyntaxParser::ToNextLine()
-{
- uint8_t ch;
- while (GetNextChar(ch)) {
- if (ch == '\n') {
- break;
- }
- if (ch == '\r') {
- GetNextChar(ch);
- if (ch != '\n') {
- --m_Pos;
- }
- break;
- }
+ if (!GetNextChar(ch)) {
+ break;
}
+ }
+ if (!bFirst) {
+ buf.AppendByte((uint8_t)code);
+ }
+ return buf.GetByteString();
}
-void CPDF_SyntaxParser::ToNextWord()
-{
- uint8_t ch;
- if (!GetNextChar(ch)) {
+void CPDF_SyntaxParser::ToNextLine() {
+ uint8_t ch;
+ while (GetNextChar(ch)) {
+ if (ch == '\n') {
+ break;
+ }
+ if (ch == '\r') {
+ GetNextChar(ch);
+ if (ch != '\n') {
+ --m_Pos;
+ }
+ break;
+ }
+ }
+}
+void CPDF_SyntaxParser::ToNextWord() {
+ uint8_t ch;
+ if (!GetNextChar(ch)) {
+ return;
+ }
+ uint8_t type = PDF_CharType[ch];
+ while (1) {
+ while (type == 'W') {
+ m_dwWordPos = m_Pos;
+ if (!GetNextChar(ch)) {
return;
+ }
+ type = PDF_CharType[ch];
}
- uint8_t type = PDF_CharType[ch];
- while (1) {
- while (type == 'W') {
- m_dwWordPos = m_Pos;
- if (!GetNextChar(ch)) {
- return;
- }
- type = PDF_CharType[ch];
- }
- if (ch != '%') {
- break;
- }
- while (1) {
- if (!GetNextChar(ch)) {
- return;
- }
- if (ch == '\r' || ch == '\n') {
- break;
- }
- }
- type = PDF_CharType[ch];
+ if (ch != '%') {
+ break;
}
- m_Pos --;
+ while (1) {
+ if (!GetNextChar(ch)) {
+ return;
+ }
+ if (ch == '\r' || ch == '\n') {
+ break;
+ }
+ }
+ type = PDF_CharType[ch];
+ }
+ m_Pos--;
}
-CFX_ByteString CPDF_SyntaxParser::GetNextWord(FX_BOOL& bIsNumber)
-{
- GetNextWord();
- bIsNumber = m_bIsNumber;
- return CFX_ByteString((const FX_CHAR*)m_WordBuffer, m_WordSize);
+CFX_ByteString CPDF_SyntaxParser::GetNextWord(FX_BOOL& bIsNumber) {
+ GetNextWord();
+ bIsNumber = m_bIsNumber;
+ return CFX_ByteString((const FX_CHAR*)m_WordBuffer, m_WordSize);
}
-CFX_ByteString CPDF_SyntaxParser::GetKeyword()
-{
- GetNextWord();
- return CFX_ByteString((const FX_CHAR*)m_WordBuffer, m_WordSize);
+CFX_ByteString CPDF_SyntaxParser::GetKeyword() {
+ GetNextWord();
+ return CFX_ByteString((const FX_CHAR*)m_WordBuffer, m_WordSize);
}
-CPDF_Object* CPDF_SyntaxParser::GetObject(CPDF_IndirectObjects* pObjList, FX_DWORD objnum, FX_DWORD gennum, PARSE_CONTEXT* pContext, FX_BOOL bDecrypt)
-{
- CFX_AutoRestorer<int> restorer(&s_CurrentRecursionDepth);
- if (++s_CurrentRecursionDepth > kParserMaxRecursionDepth) {
- return NULL;
+CPDF_Object* CPDF_SyntaxParser::GetObject(CPDF_IndirectObjects* pObjList,
+ FX_DWORD objnum,
+ FX_DWORD gennum,
+ PARSE_CONTEXT* pContext,
+ FX_BOOL bDecrypt) {
+ CFX_AutoRestorer<int> restorer(&s_CurrentRecursionDepth);
+ if (++s_CurrentRecursionDepth > kParserMaxRecursionDepth) {
+ return NULL;
+ }
+ FX_FILESIZE SavedPos = m_Pos;
+ FX_BOOL bTypeOnly = pContext && (pContext->m_Flags & PDFPARSE_TYPEONLY);
+ FX_BOOL bIsNumber;
+ CFX_ByteString word = GetNextWord(bIsNumber);
+ if (word.GetLength() == 0) {
+ if (bTypeOnly) {
+ return (CPDF_Object*)PDFOBJ_INVALID;
}
+ return NULL;
+ }
+ if (bIsNumber) {
FX_FILESIZE SavedPos = m_Pos;
- FX_BOOL bTypeOnly = pContext && (pContext->m_Flags & PDFPARSE_TYPEONLY);
- FX_BOOL bIsNumber;
- CFX_ByteString word = GetNextWord(bIsNumber);
- if (word.GetLength() == 0) {
- if (bTypeOnly) {
- return (CPDF_Object*)PDFOBJ_INVALID;
- }
- return NULL;
- }
+ CFX_ByteString nextword = GetNextWord(bIsNumber);
if (bIsNumber) {
- FX_FILESIZE SavedPos = m_Pos;
- CFX_ByteString nextword = GetNextWord(bIsNumber);
- if (bIsNumber) {
- CFX_ByteString nextword2 = GetNextWord(bIsNumber);
- if (nextword2 == FX_BSTRC("R")) {
- FX_DWORD objnum = FXSYS_atoi(word);
- if (bTypeOnly) {
- return (CPDF_Object*)PDFOBJ_REFERENCE;
- }
- return new CPDF_Reference(pObjList, objnum);
- }
- }
- m_Pos = SavedPos;
+ CFX_ByteString nextword2 = GetNextWord(bIsNumber);
+ if (nextword2 == FX_BSTRC("R")) {
+ FX_DWORD objnum = FXSYS_atoi(word);
if (bTypeOnly) {
- return (CPDF_Object*)PDFOBJ_NUMBER;
+ return (CPDF_Object*)PDFOBJ_REFERENCE;
}
- return CPDF_Number::Create(word);
+ return new CPDF_Reference(pObjList, objnum);
+ }
}
- if (word == FX_BSTRC("true") || word == FX_BSTRC("false")) {
- if (bTypeOnly) {
- return (CPDF_Object*)PDFOBJ_BOOLEAN;
- }
- return CPDF_Boolean::Create(word == FX_BSTRC("true"));
+ m_Pos = SavedPos;
+ if (bTypeOnly) {
+ return (CPDF_Object*)PDFOBJ_NUMBER;
}
- if (word == FX_BSTRC("null")) {
- if (bTypeOnly) {
- return (CPDF_Object*)PDFOBJ_NULL;
- }
- return CPDF_Null::Create();
+ return CPDF_Number::Create(word);
+ }
+ if (word == FX_BSTRC("true") || word == FX_BSTRC("false")) {
+ if (bTypeOnly) {
+ return (CPDF_Object*)PDFOBJ_BOOLEAN;
}
- if (word == FX_BSTRC("(")) {
- if (bTypeOnly) {
- return (CPDF_Object*)PDFOBJ_STRING;
- }
- CFX_ByteString str = ReadString();
- if (m_pCryptoHandler && bDecrypt) {
- m_pCryptoHandler->Decrypt(objnum, gennum, str);
- }
- return CPDF_String::Create(str, FALSE);
+ return CPDF_Boolean::Create(word == FX_BSTRC("true"));
+ }
+ if (word == FX_BSTRC("null")) {
+ if (bTypeOnly) {
+ return (CPDF_Object*)PDFOBJ_NULL;
}
- if (word == FX_BSTRC("<")) {
- if (bTypeOnly) {
- return (CPDF_Object*)PDFOBJ_STRING;
- }
- CFX_ByteString str = ReadHexString();
- if (m_pCryptoHandler && bDecrypt) {
- m_pCryptoHandler->Decrypt(objnum, gennum, str);
- }
- return CPDF_String::Create(str, TRUE);
+ return CPDF_Null::Create();
+ }
+ if (word == FX_BSTRC("(")) {
+ if (bTypeOnly) {
+ return (CPDF_Object*)PDFOBJ_STRING;
}
- if (word == FX_BSTRC("[")) {
- if (bTypeOnly) {
- return (CPDF_Object*)PDFOBJ_ARRAY;
- }
- CPDF_Array* pArray = CPDF_Array::Create();
- while (1) {
- CPDF_Object* pObj = GetObject(pObjList, objnum, gennum);
- if (pObj == NULL) {
- return pArray;
- }
- pArray->Add(pObj);
- }
+ CFX_ByteString str = ReadString();
+ if (m_pCryptoHandler && bDecrypt) {
+ m_pCryptoHandler->Decrypt(objnum, gennum, str);
}
- if (word[0] == '/') {
- if (bTypeOnly) {
- return (CPDF_Object*)PDFOBJ_NAME;
- }
- return CPDF_Name::Create(
- PDF_NameDecode(CFX_ByteStringC(m_WordBuffer + 1, m_WordSize - 1)));
+ return CPDF_String::Create(str, FALSE);
+ }
+ if (word == FX_BSTRC("<")) {
+ if (bTypeOnly) {
+ return (CPDF_Object*)PDFOBJ_STRING;
}
- if (word == FX_BSTRC("<<")) {
- if (bTypeOnly) {
- return (CPDF_Object*)PDFOBJ_DICTIONARY;
- }
- if (pContext) {
- pContext->m_DictStart = SavedPos;
- }
- CPDF_Dictionary* pDict = CPDF_Dictionary::Create();
- int32_t nKeys = 0;
- FX_FILESIZE dwSignValuePos = 0;
- while (1) {
- FX_BOOL bIsNumber;
- CFX_ByteString key = GetNextWord(bIsNumber);
- if (key.IsEmpty()) {
- if (pDict)
- pDict->Release();
- return NULL;
- }
- FX_FILESIZE SavedPos = m_Pos - key.GetLength();
- if (key == FX_BSTRC(">>")) {
- break;
- }
- if (key == FX_BSTRC("endobj")) {
- m_Pos = SavedPos;
- break;
- }
- if (key[0] != '/') {
- continue;
- }
- nKeys ++;
- key = PDF_NameDecode(key);
- if (key == FX_BSTRC("/Contents")) {
- dwSignValuePos = m_Pos;
- }
- CPDF_Object* pObj = GetObject(pObjList, objnum, gennum);
- if (pObj == NULL) {
- continue;
- }
- if (key.GetLength() >= 1) {
- if (nKeys < 32) {
- pDict->SetAt(CFX_ByteStringC(key.c_str() + 1, key.GetLength() - 1), pObj);
- } else {
- pDict->AddValue(CFX_ByteStringC(key.c_str() + 1, key.GetLength() - 1), pObj);
- }
- }
- }
- if (IsSignatureDict(pDict)) {
- FX_FILESIZE dwSavePos = m_Pos;
- m_Pos = dwSignValuePos;
- CPDF_Object* pObj = GetObject(pObjList, objnum, gennum, NULL, FALSE);
- pDict->SetAt(FX_BSTRC("Contents"), pObj);
- m_Pos = dwSavePos;
- }
- if (pContext) {
- pContext->m_DictEnd = m_Pos;
- if (pContext->m_Flags & PDFPARSE_NOSTREAM) {
- return pDict;
- }
- }
- FX_FILESIZE SavedPos = m_Pos;
- FX_BOOL bIsNumber;
- CFX_ByteString nextword = GetNextWord(bIsNumber);
- if (nextword == FX_BSTRC("stream")) {
- CPDF_Stream* pStream = ReadStream(pDict, pContext, objnum, gennum);
- if (pStream) {
- return pStream;
- }
- if (pDict)
- pDict->Release();
- return NULL;
- } else {
- m_Pos = SavedPos;
- return pDict;
- }
+ CFX_ByteString str = ReadHexString();
+ if (m_pCryptoHandler && bDecrypt) {
+ m_pCryptoHandler->Decrypt(objnum, gennum, str);
}
- if (word == FX_BSTRC(">>")) {
- m_Pos = SavedPos;
- return NULL;
+ return CPDF_String::Create(str, TRUE);
+ }
+ if (word == FX_BSTRC("[")) {
+ if (bTypeOnly) {
+ return (CPDF_Object*)PDFOBJ_ARRAY;
}
+ CPDF_Array* pArray = CPDF_Array::Create();
+ while (1) {
+ CPDF_Object* pObj = GetObject(pObjList, objnum, gennum);
+ if (pObj == NULL) {
+ return pArray;
+ }
+ pArray->Add(pObj);
+ }
+ }
+ if (word[0] == '/') {
if (bTypeOnly) {
- return (CPDF_Object*)PDFOBJ_INVALID;
+ return (CPDF_Object*)PDFOBJ_NAME;
}
- return NULL;
-}
-CPDF_Object* CPDF_SyntaxParser::GetObjectByStrict(CPDF_IndirectObjects* pObjList, FX_DWORD objnum, FX_DWORD gennum, struct PARSE_CONTEXT* pContext)
-{
- CFX_AutoRestorer<int> restorer(&s_CurrentRecursionDepth);
- if (++s_CurrentRecursionDepth > kParserMaxRecursionDepth) {
+ return CPDF_Name::Create(
+ PDF_NameDecode(CFX_ByteStringC(m_WordBuffer + 1, m_WordSize - 1)));
+ }
+ if (word == FX_BSTRC("<<")) {
+ if (bTypeOnly) {
+ return (CPDF_Object*)PDFOBJ_DICTIONARY;
+ }
+ if (pContext) {
+ pContext->m_DictStart = SavedPos;
+ }
+ CPDF_Dictionary* pDict = CPDF_Dictionary::Create();
+ int32_t nKeys = 0;
+ FX_FILESIZE dwSignValuePos = 0;
+ while (1) {
+ FX_BOOL bIsNumber;
+ CFX_ByteString key = GetNextWord(bIsNumber);
+ if (key.IsEmpty()) {
+ if (pDict)
+ pDict->Release();
return NULL;
+ }
+ FX_FILESIZE SavedPos = m_Pos - key.GetLength();
+ if (key == FX_BSTRC(">>")) {
+ break;
+ }
+ if (key == FX_BSTRC("endobj")) {
+ m_Pos = SavedPos;
+ break;
+ }
+ if (key[0] != '/') {
+ continue;
+ }
+ nKeys++;
+ key = PDF_NameDecode(key);
+ if (key == FX_BSTRC("/Contents")) {
+ dwSignValuePos = m_Pos;
+ }
+ CPDF_Object* pObj = GetObject(pObjList, objnum, gennum);
+ if (pObj == NULL) {
+ continue;
+ }
+ if (key.GetLength() >= 1) {
+ if (nKeys < 32) {
+ pDict->SetAt(CFX_ByteStringC(key.c_str() + 1, key.GetLength() - 1),
+ pObj);
+ } else {
+ pDict->AddValue(CFX_ByteStringC(key.c_str() + 1, key.GetLength() - 1),
+ pObj);
+ }
+ }
+ }
+ if (IsSignatureDict(pDict)) {
+ FX_FILESIZE dwSavePos = m_Pos;
+ m_Pos = dwSignValuePos;
+ CPDF_Object* pObj = GetObject(pObjList, objnum, gennum, NULL, FALSE);
+ pDict->SetAt(FX_BSTRC("Contents"), pObj);
+ m_Pos = dwSavePos;
+ }
+ if (pContext) {
+ pContext->m_DictEnd = m_Pos;
+ if (pContext->m_Flags & PDFPARSE_NOSTREAM) {
+ return pDict;
+ }
}
FX_FILESIZE SavedPos = m_Pos;
- FX_BOOL bTypeOnly = pContext && (pContext->m_Flags & PDFPARSE_TYPEONLY);
FX_BOOL bIsNumber;
- CFX_ByteString word = GetNextWord(bIsNumber);
- if (word.GetLength() == 0) {
- if (bTypeOnly) {
- return (CPDF_Object*)PDFOBJ_INVALID;
- }
- return NULL;
+ CFX_ByteString nextword = GetNextWord(bIsNumber);
+ if (nextword == FX_BSTRC("stream")) {
+ CPDF_Stream* pStream = ReadStream(pDict, pContext, objnum, gennum);
+ if (pStream) {
+ return pStream;
+ }
+ if (pDict)
+ pDict->Release();
+ return NULL;
+ } else {
+ m_Pos = SavedPos;
+ return pDict;
}
+ }
+ if (word == FX_BSTRC(">>")) {
+ m_Pos = SavedPos;
+ return NULL;
+ }
+ if (bTypeOnly) {
+ return (CPDF_Object*)PDFOBJ_INVALID;
+ }
+ return NULL;
+}
+CPDF_Object* CPDF_SyntaxParser::GetObjectByStrict(
+ CPDF_IndirectObjects* pObjList,
+ FX_DWORD objnum,
+ FX_DWORD gennum,
+ struct PARSE_CONTEXT* pContext) {
+ CFX_AutoRestorer<int> restorer(&s_CurrentRecursionDepth);
+ if (++s_CurrentRecursionDepth > kParserMaxRecursionDepth) {
+ return NULL;
+ }
+ FX_FILESIZE SavedPos = m_Pos;
+ FX_BOOL bTypeOnly = pContext && (pContext->m_Flags & PDFPARSE_TYPEONLY);
+ FX_BOOL bIsNumber;
+ CFX_ByteString word = GetNextWord(bIsNumber);
+ if (word.GetLength() == 0) {
+ if (bTypeOnly) {
+ return (CPDF_Object*)PDFOBJ_INVALID;
+ }
+ return NULL;
+ }
+ if (bIsNumber) {
+ FX_FILESIZE SavedPos = m_Pos;
+ CFX_ByteString nextword = GetNextWord(bIsNumber);
if (bIsNumber) {
- FX_FILESIZE SavedPos = m_Pos;
- CFX_ByteString nextword = GetNextWord(bIsNumber);
- if (bIsNumber) {
- CFX_ByteString nextword2 = GetNextWord(bIsNumber);
- if (nextword2 == FX_BSTRC("R")) {
- if (bTypeOnly) {
- return (CPDF_Object*)PDFOBJ_REFERENCE;
- }
- FX_DWORD objnum = FXSYS_atoi(word);
- return new CPDF_Reference(pObjList, objnum);
- }
- }
- m_Pos = SavedPos;
+ CFX_ByteString nextword2 = GetNextWord(bIsNumber);
+ if (nextword2 == FX_BSTRC("R")) {
if (bTypeOnly) {
- return (CPDF_Object*)PDFOBJ_NUMBER;
+ return (CPDF_Object*)PDFOBJ_REFERENCE;
}
- return CPDF_Number::Create(word);
+ FX_DWORD objnum = FXSYS_atoi(word);
+ return new CPDF_Reference(pObjList, objnum);
+ }
}
- if (word == FX_BSTRC("true") || word == FX_BSTRC("false")) {
- if (bTypeOnly) {
- return (CPDF_Object*)PDFOBJ_BOOLEAN;
- }
- return CPDF_Boolean::Create(word == FX_BSTRC("true"));
+ m_Pos = SavedPos;
+ if (bTypeOnly) {
+ return (CPDF_Object*)PDFOBJ_NUMBER;
}
- if (word == FX_BSTRC("null")) {
- if (bTypeOnly) {
- return (CPDF_Object*)PDFOBJ_NULL;
- }
- return CPDF_Null::Create();
+ return CPDF_Number::Create(word);
+ }
+ if (word == FX_BSTRC("true") || word == FX_BSTRC("false")) {
+ if (bTypeOnly) {
+ return (CPDF_Object*)PDFOBJ_BOOLEAN;
}
- if (word == FX_BSTRC("(")) {
- if (bTypeOnly) {
- return (CPDF_Object*)PDFOBJ_STRING;
- }
- CFX_ByteString str = ReadString();
- if (m_pCryptoHandler) {
- m_pCryptoHandler->Decrypt(objnum, gennum, str);
- }
- return CPDF_String::Create(str, FALSE);
+ return CPDF_Boolean::Create(word == FX_BSTRC("true"));
+ }
+ if (word == FX_BSTRC("null")) {
+ if (bTypeOnly) {
+ return (CPDF_Object*)PDFOBJ_NULL;
}
- if (word == FX_BSTRC("<")) {
- if (bTypeOnly) {
- return (CPDF_Object*)PDFOBJ_STRING;
- }
- CFX_ByteString str = ReadHexString();
- if (m_pCryptoHandler) {
- m_pCryptoHandler->Decrypt(objnum, gennum, str);
- }
- return CPDF_String::Create(str, TRUE);
+ return CPDF_Null::Create();
+ }
+ if (word == FX_BSTRC("(")) {
+ if (bTypeOnly) {
+ return (CPDF_Object*)PDFOBJ_STRING;
}
- if (word == FX_BSTRC("[")) {
- if (bTypeOnly) {
- return (CPDF_Object*)PDFOBJ_ARRAY;
- }
- CPDF_Array* pArray = CPDF_Array::Create();
- while (1) {
- CPDF_Object* pObj = GetObject(pObjList, objnum, gennum);
- if (pObj == NULL) {
- if (m_WordBuffer[0] == ']') {
- return pArray;
- }
- if (pArray) {
- pArray->Release();
- }
- return NULL;
- }
- pArray->Add(pObj);
- }
+ CFX_ByteString str = ReadString();
+ if (m_pCryptoHandler) {
+ m_pCryptoHandler->Decrypt(objnum, gennum, str);
}
- if (word[0] == '/') {
- if (bTypeOnly) {
- return (CPDF_Object*)PDFOBJ_NAME;
- }
- return CPDF_Name::Create(PDF_NameDecode(CFX_ByteStringC(m_WordBuffer + 1, m_WordSize - 1)));
+ return CPDF_String::Create(str, FALSE);
+ }
+ if (word == FX_BSTRC("<")) {
+ if (bTypeOnly) {
+ return (CPDF_Object*)PDFOBJ_STRING;
}
- if (word == FX_BSTRC("<<")) {
- if (bTypeOnly) {
- return (CPDF_Object*)PDFOBJ_DICTIONARY;
- }
- if (pContext) {
- pContext->m_DictStart = SavedPos;
- }
- CPDF_Dictionary* pDict = CPDF_Dictionary::Create();
- while (1) {
- FX_BOOL bIsNumber;
- FX_FILESIZE SavedPos = m_Pos;
- CFX_ByteString key = GetNextWord(bIsNumber);
- if (key.IsEmpty()) {
- if (pDict) {
- pDict->Release();
- }
- return NULL;
- }
- if (key == FX_BSTRC(">>")) {
- break;
- }
- if (key == FX_BSTRC("endobj")) {
- m_Pos = SavedPos;
- break;
- }
- if (key[0] != '/') {
- continue;
- }
- key = PDF_NameDecode(key);
- CPDF_Object* pObj = GetObject(pObjList, objnum, gennum);
- if (pObj == NULL) {
- if (pDict) {
- pDict->Release();
- }
- uint8_t ch;
- while (1) {
- if (!GetNextChar(ch)) {
- break;
- }
- if (ch == 0x0A || ch == 0x0D) {
- break;
- }
- }
- return NULL;
- }
- if (key.GetLength() > 1) {
- pDict->AddValue(CFX_ByteStringC(key.c_str() + 1, key.GetLength() - 1), pObj);
- }
- }
- if (pContext) {
- pContext->m_DictEnd = m_Pos;
- if (pContext->m_Flags & PDFPARSE_NOSTREAM) {
- return pDict;
- }
+ CFX_ByteString str = ReadHexString();
+ if (m_pCryptoHandler) {
+ m_pCryptoHandler->Decrypt(objnum, gennum, str);
+ }
+ return CPDF_String::Create(str, TRUE);
+ }
+ if (word == FX_BSTRC("[")) {
+ if (bTypeOnly) {
+ return (CPDF_Object*)PDFOBJ_ARRAY;
+ }
+ CPDF_Array* pArray = CPDF_Array::Create();
+ while (1) {
+ CPDF_Object* pObj = GetObject(pObjList, objnum, gennum);
+ if (pObj == NULL) {
+ if (m_WordBuffer[0] == ']') {
+ return pArray;
}
- FX_FILESIZE SavedPos = m_Pos;
- FX_BOOL bIsNumber;
- CFX_ByteString nextword = GetNextWord(bIsNumber);
- if (nextword == FX_BSTRC("stream")) {
- CPDF_Stream* pStream = ReadStream(pDict, pContext, objnum, gennum);
- if (pStream) {
- return pStream;
- }
- if (pDict) {
- pDict->Release();
- }
- return NULL;
- } else {
- m_Pos = SavedPos;
- return pDict;
+ if (pArray) {
+ pArray->Release();
}
- }
- if (word == FX_BSTRC(">>")) {
- m_Pos = SavedPos;
return NULL;
+ }
+ pArray->Add(pObj);
}
+ }
+ if (word[0] == '/') {
if (bTypeOnly) {
- return (CPDF_Object*)PDFOBJ_INVALID;
+ return (CPDF_Object*)PDFOBJ_NAME;
}
- return NULL;
-}
-CPDF_Stream* CPDF_SyntaxParser::ReadStream(CPDF_Dictionary* pDict, PARSE_CONTEXT* pContext,
- FX_DWORD objnum, FX_DWORD gennum)
-{
- CPDF_Object* pLenObj = pDict->GetElement(FX_BSTRC("Length"));
- FX_FILESIZE len = 0;
- if (pLenObj && ((pLenObj->GetType() != PDFOBJ_REFERENCE) ||
- ((((CPDF_Reference*)pLenObj)->GetObjList() != NULL) &&
- ((CPDF_Reference*)pLenObj)->GetRefObjNum() != objnum))) {
- len = pLenObj->GetInteger();
+ return CPDF_Name::Create(
+ PDF_NameDecode(CFX_ByteStringC(m_WordBuffer + 1, m_WordSize - 1)));
+ }
+ if (word == FX_BSTRC("<<")) {
+ if (bTypeOnly) {
+ return (CPDF_Object*)PDFOBJ_DICTIONARY;
}
-
- ToNextLine();
- FX_FILESIZE StreamStartPos = m_Pos;
if (pContext) {
- pContext->m_DataStart = m_Pos;
+ pContext->m_DictStart = SavedPos;
}
-
- CPDF_CryptoHandler* pCryptoHandler = objnum == (FX_DWORD)m_MetadataObjnum ? NULL : m_pCryptoHandler;
- if (pCryptoHandler == NULL) {
- pdfium::base::CheckedNumeric<FX_FILESIZE> pos = m_Pos;
- pos += len;
- if (pos.IsValid() && pos.ValueOrDie() < m_FileLen) {
- m_Pos = pos.ValueOrDie();
+ CPDF_Dictionary* pDict = CPDF_Dictionary::Create();
+ while (1) {
+ FX_BOOL bIsNumber;
+ FX_FILESIZE SavedPos = m_Pos;
+ CFX_ByteString key = GetNextWord(bIsNumber);
+ if (key.IsEmpty()) {
+ if (pDict) {
+ pDict->Release();
}
- GetNextWord();
- if (m_WordSize < 9 || FXSYS_memcmp(m_WordBuffer, "endstream", 9)) {
- m_Pos = StreamStartPos;
- FX_FILESIZE offset = FindTag(FX_BSTRC("endstream"), 0);
- if (offset >= 0) {
- FX_FILESIZE curPos = m_Pos;
- m_Pos = StreamStartPos;
- FX_FILESIZE endobjOffset = FindTag(FX_BSTRC("endobj"), 0);
- if (endobjOffset < offset && endobjOffset >= 0) {
- offset = endobjOffset;
- } else {
- m_Pos = curPos;
- }
- uint8_t byte1, byte2;
- GetCharAt(StreamStartPos + offset - 1, byte1);
- GetCharAt(StreamStartPos + offset - 2, byte2);
- if (byte1 == 0x0a && byte2 == 0x0d) {
- len -= 2;
- } else if (byte1 == 0x0a || byte1 == 0x0d) {
- len --;
- }
- len = (FX_DWORD)offset;
- pDict->SetAtInteger(FX_BSTRC("Length"), len);
- } else {
- m_Pos = StreamStartPos;
- if (FindTag(FX_BSTRC("endobj"), 0) < 0) {
- return NULL;
- }
- }
+ return NULL;
+ }
+ if (key == FX_BSTRC(">>")) {
+ break;
+ }
+ if (key == FX_BSTRC("endobj")) {
+ m_Pos = SavedPos;
+ break;
+ }
+ if (key[0] != '/') {
+ continue;
+ }
+ key = PDF_NameDecode(key);
+ CPDF_Object* pObj = GetObject(pObjList, objnum, gennum);
+ if (pObj == NULL) {
+ if (pDict) {
+ pDict->Release();
}
- m_Pos = StreamStartPos;
+ uint8_t ch;
+ while (1) {
+ if (!GetNextChar(ch)) {
+ break;
+ }
+ if (ch == 0x0A || ch == 0x0D) {
+ break;
+ }
+ }
+ return NULL;
+ }
+ if (key.GetLength() > 1) {
+ pDict->AddValue(CFX_ByteStringC(key.c_str() + 1, key.GetLength() - 1),
+ pObj);
+ }
}
- CPDF_Stream* pStream;
- uint8_t* pData = FX_Alloc(uint8_t, len);
- ReadBlock(pData, len);
- if (pCryptoHandler) {
- CFX_BinaryBuf dest_buf;
- dest_buf.EstimateSize(pCryptoHandler->DecryptGetSize(len));
- void* context = pCryptoHandler->DecryptStart(objnum, gennum);
- pCryptoHandler->DecryptStream(context, pData, len, dest_buf);
- pCryptoHandler->DecryptFinish(context, dest_buf);
- FX_Free(pData);
- pData = dest_buf.GetBuffer();
- len = dest_buf.GetSize();
- dest_buf.DetachBuffer();
- }
- pStream = new CPDF_Stream(pData, len, pDict);
if (pContext) {
- pContext->m_DataEnd = pContext->m_DataStart + len;
+ pContext->m_DictEnd = m_Pos;
+ if (pContext->m_Flags & PDFPARSE_NOSTREAM) {
+ return pDict;
+ }
+ }
+ FX_FILESIZE SavedPos = m_Pos;
+ FX_BOOL bIsNumber;
+ CFX_ByteString nextword = GetNextWord(bIsNumber);
+ if (nextword == FX_BSTRC("stream")) {
+ CPDF_Stream* pStream = ReadStream(pDict, pContext, objnum, gennum);
+ if (pStream) {
+ return pStream;
+ }
+ if (pDict) {
+ pDict->Release();
+ }
+ return NULL;
+ } else {
+ m_Pos = SavedPos;
+ return pDict;
+ }
+ }
+ if (word == FX_BSTRC(">>")) {
+ m_Pos = SavedPos;
+ return NULL;
+ }
+ if (bTypeOnly) {
+ return (CPDF_Object*)PDFOBJ_INVALID;
+ }
+ return NULL;
+}
+CPDF_Stream* CPDF_SyntaxParser::ReadStream(CPDF_Dictionary* pDict,
+ PARSE_CONTEXT* pContext,
+ FX_DWORD objnum,
+ FX_DWORD gennum) {
+ CPDF_Object* pLenObj = pDict->GetElement(FX_BSTRC("Length"));
+ FX_FILESIZE len = 0;
+ if (pLenObj && ((pLenObj->GetType() != PDFOBJ_REFERENCE) ||
+ ((((CPDF_Reference*)pLenObj)->GetObjList() != NULL) &&
+ ((CPDF_Reference*)pLenObj)->GetRefObjNum() != objnum))) {
+ len = pLenObj->GetInteger();
+ }
+
+ ToNextLine();
+ FX_FILESIZE StreamStartPos = m_Pos;
+ if (pContext) {
+ pContext->m_DataStart = m_Pos;
+ }
+
+ CPDF_CryptoHandler* pCryptoHandler =
+ objnum == (FX_DWORD)m_MetadataObjnum ? NULL : m_pCryptoHandler;
+ if (pCryptoHandler == NULL) {
+ pdfium::base::CheckedNumeric<FX_FILESIZE> pos = m_Pos;
+ pos += len;
+ if (pos.IsValid() && pos.ValueOrDie() < m_FileLen) {
+ m_Pos = pos.ValueOrDie();
}
- StreamStartPos = m_Pos;
GetNextWord();
- if (m_WordSize == 6 && 0 == FXSYS_memcmp(m_WordBuffer, "endobj", 6)) {
+ if (m_WordSize < 9 || FXSYS_memcmp(m_WordBuffer, "endstream", 9)) {
+ m_Pos = StreamStartPos;
+ FX_FILESIZE offset = FindTag(FX_BSTRC("endstream"), 0);
+ if (offset >= 0) {
+ FX_FILESIZE curPos = m_Pos;
m_Pos = StreamStartPos;
- }
- return pStream;
+ FX_FILESIZE endobjOffset = FindTag(FX_BSTRC("endobj"), 0);
+ if (endobjOffset < offset && endobjOffset >= 0) {
+ offset = endobjOffset;
+ } else {
+ m_Pos = curPos;
+ }
+ uint8_t byte1, byte2;
+ GetCharAt(StreamStartPos + offset - 1, byte1);
+ GetCharAt(StreamStartPos + offset - 2, byte2);
+ if (byte1 == 0x0a && byte2 == 0x0d) {
+ len -= 2;
+ } else if (byte1 == 0x0a || byte1 == 0x0d) {
+ len--;
+ }
+ len = (FX_DWORD)offset;
+ pDict->SetAtInteger(FX_BSTRC("Length"), len);
+ } else {
+ m_Pos = StreamStartPos;
+ if (FindTag(FX_BSTRC("endobj"), 0) < 0) {
+ return NULL;
+ }
+ }
+ }
+ m_Pos = StreamStartPos;
+ }
+ CPDF_Stream* pStream;
+ uint8_t* pData = FX_Alloc(uint8_t, len);
+ ReadBlock(pData, len);
+ if (pCryptoHandler) {
+ CFX_BinaryBuf dest_buf;
+ dest_buf.EstimateSize(pCryptoHandler->DecryptGetSize(len));
+ void* context = pCryptoHandler->DecryptStart(objnum, gennum);
+ pCryptoHandler->DecryptStream(context, pData, len, dest_buf);
+ pCryptoHandler->DecryptFinish(context, dest_buf);
+ FX_Free(pData);
+ pData = dest_buf.GetBuffer();
+ len = dest_buf.GetSize();
+ dest_buf.DetachBuffer();
+ }
+ pStream = new CPDF_Stream(pData, len, pDict);
+ if (pContext) {
+ pContext->m_DataEnd = pContext->m_DataStart + len;
+ }
+ StreamStartPos = m_Pos;
+ GetNextWord();
+ if (m_WordSize == 6 && 0 == FXSYS_memcmp(m_WordBuffer, "endobj", 6)) {
+ m_Pos = StreamStartPos;
+ }
+ return pStream;
}
-void CPDF_SyntaxParser::InitParser(IFX_FileRead* pFileAccess, FX_DWORD HeaderOffset)
-{
- if (m_pFileBuf) {
- FX_Free(m_pFileBuf);
- m_pFileBuf = NULL;
- }
- m_pFileBuf = FX_Alloc(uint8_t, m_BufSize);
- m_HeaderOffset = HeaderOffset;
- m_FileLen = pFileAccess->GetSize();
- m_Pos = 0;
- m_pFileAccess = pFileAccess;
- m_BufOffset = 0;
- pFileAccess->ReadBlock(m_pFileBuf, 0, (size_t)((FX_FILESIZE)m_BufSize > m_FileLen ? m_FileLen : m_BufSize));
+void CPDF_SyntaxParser::InitParser(IFX_FileRead* pFileAccess,
+ FX_DWORD HeaderOffset) {
+ if (m_pFileBuf) {
+ FX_Free(m_pFileBuf);
+ m_pFileBuf = NULL;
+ }
+ m_pFileBuf = FX_Alloc(uint8_t, m_BufSize);
+ m_HeaderOffset = HeaderOffset;
+ m_FileLen = pFileAccess->GetSize();
+ m_Pos = 0;
+ m_pFileAccess = pFileAccess;
+ m_BufOffset = 0;
+ pFileAccess->ReadBlock(
+ m_pFileBuf, 0,
+ (size_t)((FX_FILESIZE)m_BufSize > m_FileLen ? m_FileLen : m_BufSize));
}
-int32_t CPDF_SyntaxParser::GetDirectNum()
-{
- GetNextWord();
- if (!m_bIsNumber) {
- return 0;
- }
- m_WordBuffer[m_WordSize] = 0;
- return FXSYS_atoi((const FX_CHAR*)m_WordBuffer);
+int32_t CPDF_SyntaxParser::GetDirectNum() {
+ GetNextWord();
+ if (!m_bIsNumber) {
+ return 0;
+ }
+ m_WordBuffer[m_WordSize] = 0;
+ return FXSYS_atoi((const FX_CHAR*)m_WordBuffer);
}
-FX_BOOL CPDF_SyntaxParser::IsWholeWord(FX_FILESIZE startpos, FX_FILESIZE limit, const uint8_t* tag, FX_DWORD taglen)
-{
- uint8_t type = PDF_CharType[tag[0]];
- FX_BOOL bCheckLeft = type != 'D' && type != 'W';
- type = PDF_CharType[tag[taglen - 1]];
- FX_BOOL bCheckRight = type != 'D' && type != 'W';
- uint8_t ch;
- if (bCheckRight && startpos + (int32_t)taglen <= limit && GetCharAt(startpos + (int32_t)taglen, ch)) {
- uint8_t type = PDF_CharType[ch];
- if (type == 'N' || type == 'R') {
- return FALSE;
- }
+FX_BOOL CPDF_SyntaxParser::IsWholeWord(FX_FILESIZE startpos,
+ FX_FILESIZE limit,
+ const uint8_t* tag,
+ FX_DWORD taglen) {
+ uint8_t type = PDF_CharType[tag[0]];
+ FX_BOOL bCheckLeft = type != 'D' && type != 'W';
+ type = PDF_CharType[tag[taglen - 1]];
+ FX_BOOL bCheckRight = type != 'D' && type != 'W';
+ uint8_t ch;
+ if (bCheckRight && startpos + (int32_t)taglen <= limit &&
+ GetCharAt(startpos + (int32_t)taglen, ch)) {
+ uint8_t type = PDF_CharType[ch];
+ if (type == 'N' || type == 'R') {
+ return FALSE;
}
- if (bCheckLeft && startpos > 0 && GetCharAt(startpos - 1, ch)) {
- uint8_t type = PDF_CharType[ch];
- if (type == 'N' || type == 'R') {
- return FALSE;
- }
+ }
+ if (bCheckLeft && startpos > 0 && GetCharAt(startpos - 1, ch)) {
+ uint8_t type = PDF_CharType[ch];
+ if (type == 'N' || type == 'R') {
+ return FALSE;
}
- return TRUE;
+ }
+ return TRUE;
}
-FX_BOOL CPDF_SyntaxParser::SearchWord(const CFX_ByteStringC& tag, FX_BOOL bWholeWord, FX_BOOL bForward, FX_FILESIZE limit)
-{
- int32_t taglen = tag.GetLength();
- if (taglen == 0) {
+FX_BOOL CPDF_SyntaxParser::SearchWord(const CFX_ByteStringC& tag,
+ FX_BOOL bWholeWord,
+ FX_BOOL bForward,
+ FX_FILESIZE limit) {
+ int32_t taglen = tag.GetLength();
+ if (taglen == 0) {
+ return FALSE;
+ }
+ FX_FILESIZE pos = m_Pos;
+ int32_t offset = 0;
+ if (!bForward) {
+ offset = taglen - 1;
+ }
+ const uint8_t* tag_data = tag.GetPtr();
+ uint8_t byte;
+ while (1) {
+ if (bForward) {
+ if (limit) {
+ if (pos >= m_Pos + limit) {
+ return FALSE;
+ }
+ }
+ if (!GetCharAt(pos, byte)) {
return FALSE;
+ }
+ } else {
+ if (limit) {
+ if (pos <= m_Pos - limit) {
+ return FALSE;
+ }
+ }
+ if (!GetCharAtBackward(pos, byte)) {
+ return FALSE;
+ }
+ }
+ if (byte == tag_data[offset]) {
+ if (bForward) {
+ offset++;
+ if (offset < taglen) {
+ pos++;
+ continue;
+ }
+ } else {
+ offset--;
+ if (offset >= 0) {
+ pos--;
+ continue;
+ }
+ }
+ FX_FILESIZE startpos = bForward ? pos - taglen + 1 : pos;
+ if (!bWholeWord || IsWholeWord(startpos, limit, tag.GetPtr(), taglen)) {
+ m_Pos = startpos;
+ return TRUE;
+ }
}
- FX_FILESIZE pos = m_Pos;
- int32_t offset = 0;
- if (!bForward) {
- offset = taglen - 1;
+ if (bForward) {
+ offset = byte == tag_data[0] ? 1 : 0;
+ pos++;
+ } else {
+ offset = byte == tag_data[taglen - 1] ? taglen - 2 : taglen - 1;
+ pos--;
}
- const uint8_t* tag_data = tag.GetPtr();
- uint8_t byte;
- while (1) {
- if (bForward) {
- if (limit) {
- if (pos >= m_Pos + limit) {
- return FALSE;
- }
- }
- if (!GetCharAt(pos, byte)) {
- return FALSE;
- }
- } else {
- if (limit) {
- if (pos <= m_Pos - limit) {
- return FALSE;
- }
- }
- if (!GetCharAtBackward(pos, byte)) {
- return FALSE;
- }
- }
- if (byte == tag_data[offset]) {
- if (bForward) {
- offset ++;
- if (offset < taglen) {
- pos ++;
- continue;
- }
- } else {
- offset --;
- if (offset >= 0) {
- pos --;
- continue;
- }
- }
- FX_FILESIZE startpos = bForward ? pos - taglen + 1 : pos;
- if (!bWholeWord || IsWholeWord(startpos, limit, tag.GetPtr(), taglen)) {
- m_Pos = startpos;
- return TRUE;
- }
- }
- if (bForward) {
- offset = byte == tag_data[0] ? 1 : 0;
- pos ++;
- } else {
- offset = byte == tag_data[taglen - 1] ? taglen - 2 : taglen - 1;
- pos --;
- }
- if (pos < 0) {
- return FALSE;
- }
+ if (pos < 0) {
+ return FALSE;
}
- return FALSE;
+ }
+ return FALSE;
}
struct _SearchTagRecord {
- const uint8_t* m_pTag;
- FX_DWORD m_Len;
- FX_DWORD m_Offset;
+ const uint8_t* m_pTag;
+ FX_DWORD m_Len;
+ FX_DWORD m_Offset;
};
-int32_t CPDF_SyntaxParser::SearchMultiWord(const CFX_ByteStringC& tags, FX_BOOL bWholeWord, FX_FILESIZE limit)
-{
- int32_t ntags = 1, i;
- for (i = 0; i < tags.GetLength(); i ++)
- if (tags[i] == 0) {
- ntags ++;
- }
- _SearchTagRecord* pPatterns = FX_Alloc(_SearchTagRecord, ntags);
- FX_DWORD start = 0, itag = 0, max_len = 0;
- for (i = 0; i <= tags.GetLength(); i ++) {
- if (tags[i] == 0) {
- FX_DWORD len = i - start;
- if (len > max_len) {
- max_len = len;
- }
- pPatterns[itag].m_pTag = tags.GetPtr() + start;
- pPatterns[itag].m_Len = len;
- pPatterns[itag].m_Offset = 0;
- start = i + 1;
- itag ++;
- }
- }
- FX_FILESIZE pos = m_Pos;
- uint8_t byte;
- GetCharAt(pos++, byte);
- int32_t found = -1;
- while (1) {
- for (i = 0; i < ntags; i ++) {
- if (pPatterns[i].m_pTag[pPatterns[i].m_Offset] == byte) {
- pPatterns[i].m_Offset ++;
- if (pPatterns[i].m_Offset == pPatterns[i].m_Len) {
- if (!bWholeWord || IsWholeWord(pos - pPatterns[i].m_Len, limit, pPatterns[i].m_pTag, pPatterns[i].m_Len)) {
- found = i;
- goto end;
- } else {
- if (pPatterns[i].m_pTag[0] == byte) {
- pPatterns[i].m_Offset = 1;
- } else {
- pPatterns[i].m_Offset = 0;
- }
- }
- }
+int32_t CPDF_SyntaxParser::SearchMultiWord(const CFX_ByteStringC& tags,
+ FX_BOOL bWholeWord,
+ FX_FILESIZE limit) {
+ int32_t ntags = 1, i;
+ for (i = 0; i < tags.GetLength(); i++)
+ if (tags[i] == 0) {
+ ntags++;
+ }
+ _SearchTagRecord* pPatterns = FX_Alloc(_SearchTagRecord, ntags);
+ FX_DWORD start = 0, itag = 0, max_len = 0;
+ for (i = 0; i <= tags.GetLength(); i++) {
+ if (tags[i] == 0) {
+ FX_DWORD len = i - start;
+ if (len > max_len) {
+ max_len = len;
+ }
+ pPatterns[itag].m_pTag = tags.GetPtr() + start;
+ pPatterns[itag].m_Len = len;
+ pPatterns[itag].m_Offset = 0;
+ start = i + 1;
+ itag++;
+ }
+ }
+ FX_FILESIZE pos = m_Pos;
+ uint8_t byte;
+ GetCharAt(pos++, byte);
+ int32_t found = -1;
+ while (1) {
+ for (i = 0; i < ntags; i++) {
+ if (pPatterns[i].m_pTag[pPatterns[i].m_Offset] == byte) {
+ pPatterns[i].m_Offset++;
+ if (pPatterns[i].m_Offset == pPatterns[i].m_Len) {
+ if (!bWholeWord ||
+ IsWholeWord(pos - pPatterns[i].m_Len, limit, pPatterns[i].m_pTag,
+ pPatterns[i].m_Len)) {
+ found = i;
+ goto end;
+ } else {
+ if (pPatterns[i].m_pTag[0] == byte) {
+ pPatterns[i].m_Offset = 1;
} else {
- if (pPatterns[i].m_pTag[0] == byte) {
- pPatterns[i].m_Offset = 1;
- } else {
- pPatterns[i].m_Offset = 0;
- }
+ pPatterns[i].m_Offset = 0;
}
+ }
}
- if (limit && pos >= m_Pos + limit) {
- goto end;
- }
- if (!GetCharAt(pos, byte)) {
- goto end;
+ } else {
+ if (pPatterns[i].m_pTag[0] == byte) {
+ pPatterns[i].m_Offset = 1;
+ } else {
+ pPatterns[i].m_Offset = 0;
}
- pos ++;
+ }
+ }
+ if (limit && pos >= m_Pos + limit) {
+ goto end;
}
+ if (!GetCharAt(pos, byte)) {
+ goto end;
+ }
+ pos++;
+ }
end:
- FX_Free(pPatterns);
- return found;
+ FX_Free(pPatterns);
+ return found;
}
-FX_FILESIZE CPDF_SyntaxParser::FindTag(const CFX_ByteStringC& tag, FX_FILESIZE limit)
-{
- int32_t taglen = tag.GetLength();
- int32_t match = 0;
- limit += m_Pos;
- FX_FILESIZE startpos = m_Pos;
- while (1) {
- uint8_t ch;
- if (!GetNextChar(ch)) {
- return -1;
- }
- if (ch == tag[match]) {
- match ++;
- if (match == taglen) {
- return m_Pos - startpos - taglen;
- }
- } else {
- match = ch == tag[0] ? 1 : 0;
- }
- if (limit && m_Pos == limit) {
- return -1;
- }
+FX_FILESIZE CPDF_SyntaxParser::FindTag(const CFX_ByteStringC& tag,
+ FX_FILESIZE limit) {
+ int32_t taglen = tag.GetLength();
+ int32_t match = 0;
+ limit += m_Pos;
+ FX_FILESIZE startpos = m_Pos;
+ while (1) {
+ uint8_t ch;
+ if (!GetNextChar(ch)) {
+ return -1;
}
- return -1;
+ if (ch == tag[match]) {
+ match++;
+ if (match == taglen) {
+ return m_Pos - startpos - taglen;
+ }
+ } else {
+ match = ch == tag[0] ? 1 : 0;
+ }
+ if (limit && m_Pos == limit) {
+ return -1;
+ }
+ }
+ return -1;
}
-void CPDF_SyntaxParser::GetBinary(uint8_t* buffer, FX_DWORD size)
-{
- FX_DWORD offset = 0;
- uint8_t ch;
- while (1) {
- if (!GetNextChar(ch)) {
- return;
- }
- buffer[offset++] = ch;
- if (offset == size) {
- break;
- }
+void CPDF_SyntaxParser::GetBinary(uint8_t* buffer, FX_DWORD size) {
+ FX_DWORD offset = 0;
+ uint8_t ch;
+ while (1) {
+ if (!GetNextChar(ch)) {
+ return;
+ }
+ buffer[offset++] = ch;
+ if (offset == size) {
+ break;
}
+ }
}
-class CPDF_DataAvail final : public IPDF_DataAvail
-{
-public:
- CPDF_DataAvail(IFX_FileAvail* pFileAvail, IFX_FileRead* pFileRead);
- ~CPDF_DataAvail();
+class CPDF_DataAvail final : public IPDF_DataAvail {
+ public:
+ CPDF_DataAvail(IFX_FileAvail* pFileAvail, IFX_FileRead* pFileRead);
+ ~CPDF_DataAvail();
- virtual FX_BOOL IsDocAvail(IFX_DownloadHints* pHints) override;
+ virtual FX_BOOL IsDocAvail(IFX_DownloadHints* pHints) override;
- virtual void SetDocument(CPDF_Document* pDoc) override;
+ virtual void SetDocument(CPDF_Document* pDoc) override;
- virtual FX_BOOL IsPageAvail(int iPage, IFX_DownloadHints* pHints) override;
+ virtual FX_BOOL IsPageAvail(int iPage, IFX_DownloadHints* pHints) override;
- virtual int32_t IsFormAvail(IFX_DownloadHints *pHints) override;
+ virtual int32_t IsFormAvail(IFX_DownloadHints* pHints) override;
- virtual int32_t IsLinearizedPDF() override;
+ virtual int32_t IsLinearizedPDF() override;
- virtual FX_BOOL IsLinearized() override
- {
- return m_bLinearized;
- }
+ virtual FX_BOOL IsLinearized() override { return m_bLinearized; }
- virtual void GetLinearizedMainXRefInfo(FX_FILESIZE *pPos, FX_DWORD *pSize) override;
+ virtual void GetLinearizedMainXRefInfo(FX_FILESIZE* pPos,
+ FX_DWORD* pSize) override;
-protected:
- static const int kMaxDataAvailRecursionDepth = 64;
- static int s_CurrentDataAvailRecursionDepth;
+ protected:
+ static const int kMaxDataAvailRecursionDepth = 64;
+ static int s_CurrentDataAvailRecursionDepth;
- FX_DWORD GetObjectSize(FX_DWORD objnum, FX_FILESIZE& offset);
- FX_BOOL IsObjectsAvail(CFX_PtrArray& obj_array, FX_BOOL bParsePage, IFX_DownloadHints* pHints, CFX_PtrArray &ret_array);
- FX_BOOL CheckDocStatus(IFX_DownloadHints *pHints);
- FX_BOOL CheckHeader(IFX_DownloadHints* pHints);
- FX_BOOL CheckFirstPage(IFX_DownloadHints *pHints);
- FX_BOOL CheckEnd(IFX_DownloadHints *pHints);
- FX_BOOL CheckCrossRef(IFX_DownloadHints* pHints);
- FX_BOOL CheckCrossRefItem(IFX_DownloadHints *pHints);
- FX_BOOL CheckTrailer(IFX_DownloadHints* pHints);
- FX_BOOL CheckRoot(IFX_DownloadHints* pHints);
- FX_BOOL CheckInfo(IFX_DownloadHints* pHints);
- FX_BOOL CheckPages(IFX_DownloadHints* pHints);
- FX_BOOL CheckPage(IFX_DownloadHints* pHints);
- FX_BOOL CheckResources(IFX_DownloadHints* pHints);
- FX_BOOL CheckAnnots(IFX_DownloadHints* pHints);
- FX_BOOL CheckAcroForm(IFX_DownloadHints* pHints);
- FX_BOOL CheckAcroFormSubObject(IFX_DownloadHints* pHints);
- FX_BOOL CheckTrailerAppend(IFX_DownloadHints* pHints);
- FX_BOOL CheckPageStatus(IFX_DownloadHints* pHints);
- FX_BOOL CheckAllCrossRefStream(IFX_DownloadHints *pHints);
+ FX_DWORD GetObjectSize(FX_DWORD objnum, FX_FILESIZE& offset);
+ FX_BOOL IsObjectsAvail(CFX_PtrArray& obj_array,
+ FX_BOOL bParsePage,
+ IFX_DownloadHints* pHints,
+ CFX_PtrArray& ret_array);
+ FX_BOOL CheckDocStatus(IFX_DownloadHints* pHints);
+ FX_BOOL CheckHeader(IFX_DownloadHints* pHints);
+ FX_BOOL CheckFirstPage(IFX_DownloadHints* pHints);
+ FX_BOOL CheckEnd(IFX_DownloadHints* pHints);
+ FX_BOOL CheckCrossRef(IFX_DownloadHints* pHints);
+ FX_BOOL CheckCrossRefItem(IFX_DownloadHints* pHints);
+ FX_BOOL CheckTrailer(IFX_DownloadHints* pHints);
+ FX_BOOL CheckRoot(IFX_DownloadHints* pHints);
+ FX_BOOL CheckInfo(IFX_DownloadHints* pHints);
+ FX_BOOL CheckPages(IFX_DownloadHints* pHints);
+ FX_BOOL CheckPage(IFX_DownloadHints* pHints);
+ FX_BOOL CheckResources(IFX_DownloadHints* pHints);
+ FX_BOOL CheckAnnots(IFX_DownloadHints* pHints);
+ FX_BOOL CheckAcroForm(IFX_DownloadHints* pHints);
+ FX_BOOL CheckAcroFormSubObject(IFX_DownloadHints* pHints);
+ FX_BOOL CheckTrailerAppend(IFX_DownloadHints* pHints);
+ FX_BOOL CheckPageStatus(IFX_DownloadHints* pHints);
+ FX_BOOL CheckAllCrossRefStream(IFX_DownloadHints* pHints);
- int32_t CheckCrossRefStream(IFX_DownloadHints *pHints, FX_FILESIZE &xref_offset);
- FX_BOOL IsLinearizedFile(uint8_t* pData, FX_DWORD dwLen);
- void SetStartOffset(FX_FILESIZE dwOffset);
- FX_BOOL GetNextToken(CFX_ByteString &token);
- FX_BOOL GetNextChar(uint8_t &ch);
- CPDF_Object * ParseIndirectObjectAt(FX_FILESIZE pos, FX_DWORD objnum);
- CPDF_Object * GetObject(FX_DWORD objnum, IFX_DownloadHints* pHints, FX_BOOL *pExistInFile);
- FX_BOOL GetPageKids(CPDF_Parser *pParser, CPDF_Object *pPages);
- FX_BOOL PreparePageItem();
- FX_BOOL LoadPages(IFX_DownloadHints* pHints);
- FX_BOOL LoadAllXref(IFX_DownloadHints* pHints);
- FX_BOOL LoadAllFile(IFX_DownloadHints* pHints);
- FX_BOOL CheckLinearizedData(IFX_DownloadHints* pHints);
- FX_BOOL CheckFileResources(IFX_DownloadHints* pHints);
- FX_BOOL CheckPageAnnots(int iPage, IFX_DownloadHints* pHints);
+ int32_t CheckCrossRefStream(IFX_DownloadHints* pHints,
+ FX_FILESIZE& xref_offset);
+ FX_BOOL IsLinearizedFile(uint8_t* pData, FX_DWORD dwLen);
+ void SetStartOffset(FX_FILESIZE dwOffset);
+ FX_BOOL GetNextToken(CFX_ByteString& token);
+ FX_BOOL GetNextChar(uint8_t& ch);
+ CPDF_Object* ParseIndirectObjectAt(FX_FILESIZE pos, FX_DWORD objnum);
+ CPDF_Object* GetObject(FX_DWORD objnum,
+ IFX_DownloadHints* pHints,
+ FX_BOOL* pExistInFile);
+ FX_BOOL GetPageKids(CPDF_Parser* pParser, CPDF_Object* pPages);
+ FX_BOOL PreparePageItem();
+ FX_BOOL LoadPages(IFX_DownloadHints* pHints);
+ FX_BOOL LoadAllXref(IFX_DownloadHints* pHints);
+ FX_BOOL LoadAllFile(IFX_DownloadHints* pHints);
+ FX_BOOL CheckLinearizedData(IFX_DownloadHints* pHints);
+ FX_BOOL CheckFileResources(IFX_DownloadHints* pHints);
+ FX_BOOL CheckPageAnnots(int iPage, IFX_DownloadHints* pHints);
- FX_BOOL CheckLinearizedFirstPage(int iPage, IFX_DownloadHints* pHints);
- FX_BOOL HaveResourceAncestor(CPDF_Dictionary *pDict);
- FX_BOOL CheckPage(int32_t iPage, IFX_DownloadHints* pHints);
- FX_BOOL LoadDocPages(IFX_DownloadHints* pHints);
- FX_BOOL LoadDocPage(int32_t iPage, IFX_DownloadHints* pHints);
- FX_BOOL CheckPageNode(CPDF_PageNode &pageNodes, int32_t iPage, int32_t &iCount, IFX_DownloadHints* pHints);
- FX_BOOL CheckUnkownPageNode(FX_DWORD dwPageNo, CPDF_PageNode *pPageNode, IFX_DownloadHints* pHints);
- FX_BOOL CheckArrayPageNode(FX_DWORD dwPageNo, CPDF_PageNode *pPageNode, IFX_DownloadHints* pHints);
- FX_BOOL CheckPageCount(IFX_DownloadHints* pHints);
- FX_BOOL IsFirstCheck(int iPage);
- void ResetFirstCheck(int iPage);
+ FX_BOOL CheckLinearizedFirstPage(int iPage, IFX_DownloadHints* pHints);
+ FX_BOOL HaveResourceAncestor(CPDF_Dictionary* pDict);
+ FX_BOOL CheckPage(int32_t iPage, IFX_DownloadHints* pHints);
+ FX_BOOL LoadDocPages(IFX_DownloadHints* pHints);
+ FX_BOOL LoadDocPage(int32_t iPage, IFX_DownloadHints* pHints);
+ FX_BOOL CheckPageNode(CPDF_PageNode& pageNodes,
+ int32_t iPage,
+ int32_t& iCount,
+ IFX_DownloadHints* pHints);
+ FX_BOOL CheckUnkownPageNode(FX_DWORD dwPageNo,
+ CPDF_PageNode* pPageNode,
+ IFX_DownloadHints* pHints);
+ FX_BOOL CheckArrayPageNode(FX_DWORD dwPageNo,
+ CPDF_PageNode* pPageNode,
+ IFX_DownloadHints* pHints);
+ FX_BOOL CheckPageCount(IFX_DownloadHints* pHints);
+ FX_BOOL IsFirstCheck(int iPage);
+ void ResetFirstCheck(int iPage);
- CPDF_Parser m_parser;
+ CPDF_Parser m_parser;
- CPDF_SyntaxParser m_syntaxParser;
+ CPDF_SyntaxParser m_syntaxParser;
- CPDF_Object *m_pRoot;
+ CPDF_Object* m_pRoot;
- FX_DWORD m_dwRootObjNum;
+ FX_DWORD m_dwRootObjNum;
- FX_DWORD m_dwInfoObjNum;
+ FX_DWORD m_dwInfoObjNum;
- CPDF_Object *m_pLinearized;
+ CPDF_Object* m_pLinearized;
- CPDF_Object *m_pTrailer;
+ CPDF_Object* m_pTrailer;
- FX_BOOL m_bDocAvail;
+ FX_BOOL m_bDocAvail;
- FX_FILESIZE m_dwHeaderOffset;
+ FX_FILESIZE m_dwHeaderOffset;
- FX_FILESIZE m_dwLastXRefOffset;
+ FX_FILESIZE m_dwLastXRefOffset;
- FX_FILESIZE m_dwXRefOffset;
+ FX_FILESIZE m_dwXRefOffset;
- FX_FILESIZE m_dwTrailerOffset;
+ FX_FILESIZE m_dwTrailerOffset;
- FX_FILESIZE m_dwCurrentOffset;
+ FX_FILESIZE m_dwCurrentOffset;
- PDF_DATAAVAIL_STATUS m_docStatus;
+ PDF_DATAAVAIL_STATUS m_docStatus;
- FX_FILESIZE m_dwFileLen;
+ FX_FILESIZE m_dwFileLen;
- CPDF_Document* m_pDocument;
+ CPDF_Document* m_pDocument;
- CPDF_SortObjNumArray m_objnum_array;
+ CPDF_SortObjNumArray m_objnum_array;
- CFX_PtrArray m_objs_array;
+ CFX_PtrArray m_objs_array;
- FX_FILESIZE m_Pos;
+ FX_FILESIZE m_Pos;
- FX_FILESIZE m_bufferOffset;
+ FX_FILESIZE m_bufferOffset;
- FX_DWORD m_bufferSize;
+ FX_DWORD m_bufferSize;
- CFX_ByteString m_WordBuf;
+ CFX_ByteString m_WordBuf;
- uint8_t m_WordBuffer[257];
+ uint8_t m_WordBuffer[257];
- FX_DWORD m_WordSize;
+ FX_DWORD m_WordSize;
- uint8_t m_bufferData[512];
+ uint8_t m_bufferData[512];
- CFX_FileSizeArray m_CrossOffset;
+ CFX_FileSizeArray m_CrossOffset;
- CFX_DWordArray m_XRefStreamList;
+ CFX_DWordArray m_XRefStreamList;
- CFX_DWordArray m_PageObjList;
+ CFX_DWordArray m_PageObjList;
- FX_DWORD m_PagesObjNum;
+ FX_DWORD m_PagesObjNum;
- FX_BOOL m_bLinearized;
+ FX_BOOL m_bLinearized;
- FX_DWORD m_dwFirstPageNo;
+ FX_DWORD m_dwFirstPageNo;
- FX_BOOL m_bLinearedDataOK;
+ FX_BOOL m_bLinearedDataOK;
- FX_BOOL m_bMainXRefLoadTried;
+ FX_BOOL m_bMainXRefLoadTried;
- FX_BOOL m_bMainXRefLoadedOK;
+ FX_BOOL m_bMainXRefLoadedOK;
- FX_BOOL m_bPagesTreeLoad;
+ FX_BOOL m_bPagesTreeLoad;
- FX_BOOL m_bPagesLoad;
+ FX_BOOL m_bPagesLoad;
- CPDF_Parser * m_pCurrentParser;
+ CPDF_Parser* m_pCurrentParser;
- FX_FILESIZE m_dwCurrentXRefSteam;
+ FX_FILESIZE m_dwCurrentXRefSteam;
- FX_BOOL m_bAnnotsLoad;
+ FX_BOOL m_bAnnotsLoad;
- FX_BOOL m_bHaveAcroForm;
+ FX_BOOL m_bHaveAcroForm;
- FX_DWORD m_dwAcroFormObjNum;
+ FX_DWORD m_dwAcroFormObjNum;
- FX_BOOL m_bAcroFormLoad;
+ FX_BOOL m_bAcroFormLoad;
- CPDF_Object * m_pAcroForm;
+ CPDF_Object* m_pAcroForm;
- CFX_PtrArray m_arrayAcroforms;
+ CFX_PtrArray m_arrayAcroforms;
- CPDF_Dictionary * m_pPageDict;
+ CPDF_Dictionary* m_pPageDict;
- CPDF_Object * m_pPageResource;
+ CPDF_Object* m_pPageResource;
- FX_BOOL m_bNeedDownLoadResource;
+ FX_BOOL m_bNeedDownLoadResource;
- FX_BOOL m_bPageLoadedOK;
+ FX_BOOL m_bPageLoadedOK;
- FX_BOOL m_bLinearizedFormParamLoad;
+ FX_BOOL m_bLinearizedFormParamLoad;
- CFX_PtrArray m_PagesArray;
+ CFX_PtrArray m_PagesArray;
- FX_DWORD m_dwEncryptObjNum;
+ FX_DWORD m_dwEncryptObjNum;
- FX_FILESIZE m_dwPrevXRefOffset;
+ FX_FILESIZE m_dwPrevXRefOffset;
- FX_BOOL m_bTotalLoadPageTree;
+ FX_BOOL m_bTotalLoadPageTree;
- FX_BOOL m_bCurPageDictLoadOK;
+ FX_BOOL m_bCurPageDictLoadOK;
- CPDF_PageNode m_pageNodes;
+ CPDF_PageNode m_pageNodes;
- CFX_CMapDWordToDWord * m_pageMapCheckState;
+ CFX_CMapDWordToDWord* m_pageMapCheckState;
- CFX_CMapDWordToDWord * m_pagesLoadState;
+ CFX_CMapDWordToDWord* m_pagesLoadState;
};
-IPDF_DataAvail::IPDF_DataAvail(IFX_FileAvail* pFileAvail, IFX_FileRead* pFileRead) :
- m_pFileAvail(pFileAvail),
- m_pFileRead(pFileRead) {
-}
+IPDF_DataAvail::IPDF_DataAvail(IFX_FileAvail* pFileAvail,
+ IFX_FileRead* pFileRead)
+ : m_pFileAvail(pFileAvail), m_pFileRead(pFileRead) {}
// static
-IPDF_DataAvail* IPDF_DataAvail::Create(IFX_FileAvail* pFileAvail, IFX_FileRead* pFileRead)
-{
+IPDF_DataAvail* IPDF_DataAvail::Create(IFX_FileAvail* pFileAvail,
+ IFX_FileRead* pFileRead) {
return new CPDF_DataAvail(pFileAvail, pFileRead);
}
// static
int CPDF_DataAvail::s_CurrentDataAvailRecursionDepth = 0;
-CPDF_DataAvail::CPDF_DataAvail(IFX_FileAvail* pFileAvail, IFX_FileRead* pFileRead)
- : IPDF_DataAvail(pFileAvail, pFileRead)
-{
- m_Pos = 0;
- m_dwFileLen = 0;
- if (m_pFileRead) {
- m_dwFileLen = (FX_DWORD)m_pFileRead->GetSize();
- }
- m_dwCurrentOffset = 0;
- m_WordSize = 0;
- m_dwXRefOffset = 0;
- m_bufferOffset = 0;
- m_dwFirstPageNo = 0;
- m_bufferSize = 0;
- m_PagesObjNum = 0;
- m_dwCurrentXRefSteam = 0;
- m_dwAcroFormObjNum = 0;
- m_dwInfoObjNum = 0;
- m_pDocument = 0;
- m_dwEncryptObjNum = 0;
- m_dwPrevXRefOffset = 0;
- m_dwLastXRefOffset = 0;
- m_bDocAvail = FALSE;
- m_bMainXRefLoadTried = FALSE;
- m_bDocAvail = FALSE;
- m_bLinearized = FALSE;
- m_bPagesLoad = FALSE;
- m_bPagesTreeLoad = FALSE;
- m_bMainXRefLoadedOK = FALSE;
- m_bAnnotsLoad = FALSE;
- m_bHaveAcroForm = FALSE;
- m_bAcroFormLoad = FALSE;
- m_bPageLoadedOK = FALSE;
- m_bNeedDownLoadResource = FALSE;
- m_bLinearizedFormParamLoad = FALSE;
- m_pLinearized = NULL;
- m_pRoot = NULL;
- m_pTrailer = NULL;
- m_pCurrentParser = NULL;
- m_pAcroForm = NULL;
- m_pPageDict = NULL;
- m_pPageResource = NULL;
- m_pageMapCheckState = NULL;
- m_docStatus = PDF_DATAAVAIL_HEADER;
- m_parser.m_bOwnFileRead = FALSE;
- m_bTotalLoadPageTree = FALSE;
- m_bCurPageDictLoadOK = FALSE;
- m_bLinearedDataOK = FALSE;
- m_pagesLoadState = NULL;
+CPDF_DataAvail::CPDF_DataAvail(IFX_FileAvail* pFileAvail,
+ IFX_FileRead* pFileRead)
+ : IPDF_DataAvail(pFileAvail, pFileRead) {
+ m_Pos = 0;
+ m_dwFileLen = 0;
+ if (m_pFileRead) {
+ m_dwFileLen = (FX_DWORD)m_pFileRead->GetSize();
+ }
+ m_dwCurrentOffset = 0;
+ m_WordSize = 0;
+ m_dwXRefOffset = 0;
+ m_bufferOffset = 0;
+ m_dwFirstPageNo = 0;
+ m_bufferSize = 0;
+ m_PagesObjNum = 0;
+ m_dwCurrentXRefSteam = 0;
+ m_dwAcroFormObjNum = 0;
+ m_dwInfoObjNum = 0;
+ m_pDocument = 0;
+ m_dwEncryptObjNum = 0;
+ m_dwPrevXRefOffset = 0;
+ m_dwLastXRefOffset = 0;
+ m_bDocAvail = FALSE;
+ m_bMainXRefLoadTried = FALSE;
+ m_bDocAvail = FALSE;
+ m_bLinearized = FALSE;
+ m_bPagesLoad = FALSE;
+ m_bPagesTreeLoad = FALSE;
+ m_bMainXRefLoadedOK = FALSE;
+ m_bAnnotsLoad = FALSE;
+ m_bHaveAcroForm = FALSE;
+ m_bAcroFormLoad = FALSE;
+ m_bPageLoadedOK = FALSE;
+ m_bNeedDownLoadResource = FALSE;
+ m_bLinearizedFormParamLoad = FALSE;
+ m_pLinearized = NULL;
+ m_pRoot = NULL;
+ m_pTrailer = NULL;
+ m_pCurrentParser = NULL;
+ m_pAcroForm = NULL;
+ m_pPageDict = NULL;
+ m_pPageResource = NULL;
+ m_pageMapCheckState = NULL;
+ m_docStatus = PDF_DATAAVAIL_HEADER;
+ m_parser.m_bOwnFileRead = FALSE;
+ m_bTotalLoadPageTree = FALSE;
+ m_bCurPageDictLoadOK = FALSE;
+ m_bLinearedDataOK = FALSE;
+ m_pagesLoadState = NULL;
}
-CPDF_DataAvail::~CPDF_DataAvail()
-{
- if (m_pLinearized) {
- m_pLinearized->Release();
- }
- if (m_pRoot) {
- m_pRoot->Release();
- }
- if (m_pTrailer) {
- m_pTrailer->Release();
- }
- delete m_pageMapCheckState;
- delete m_pagesLoadState;
- int32_t i = 0;
- int32_t iSize = m_arrayAcroforms.GetSize();
- for (i = 0; i < iSize; ++i) {
- ((CPDF_Object *)m_arrayAcroforms.GetAt(i))->Release();
- }
+CPDF_DataAvail::~CPDF_DataAvail() {
+ if (m_pLinearized) {
+ m_pLinearized->Release();
+ }
+ if (m_pRoot) {
+ m_pRoot->Release();
+ }
+ if (m_pTrailer) {
+ m_pTrailer->Release();
+ }
+ delete m_pageMapCheckState;
+ delete m_pagesLoadState;
+ int32_t i = 0;
+ int32_t iSize = m_arrayAcroforms.GetSize();
+ for (i = 0; i < iSize; ++i) {
+ ((CPDF_Object*)m_arrayAcroforms.GetAt(i))->Release();
+ }
}
-void CPDF_DataAvail::SetDocument(CPDF_Document* pDoc)
-{
- m_pDocument = pDoc;
+void CPDF_DataAvail::SetDocument(CPDF_Document* pDoc) {
+ m_pDocument = pDoc;
}
-FX_DWORD CPDF_DataAvail::GetObjectSize(FX_DWORD objnum, FX_FILESIZE& offset)
-{
- CPDF_Parser *pParser = (CPDF_Parser *)(m_pDocument->GetParser());
- if (pParser == NULL) {
- return 0;
- }
- if (objnum >= (FX_DWORD)pParser->m_CrossRef.GetSize()) {
- return 0;
+FX_DWORD CPDF_DataAvail::GetObjectSize(FX_DWORD objnum, FX_FILESIZE& offset) {
+ CPDF_Parser* pParser = (CPDF_Parser*)(m_pDocument->GetParser());
+ if (pParser == NULL) {
+ return 0;
+ }
+ if (objnum >= (FX_DWORD)pParser->m_CrossRef.GetSize()) {
+ return 0;
+ }
+ if (pParser->m_V5Type[objnum] == 2) {
+ objnum = (FX_DWORD)pParser->m_CrossRef[objnum];
+ }
+ if (pParser->m_V5Type[objnum] == 1 || pParser->m_V5Type[objnum] == 255) {
+ offset = pParser->m_CrossRef[objnum];
+ if (offset == 0) {
+ return 0;
+ }
+ void* pResult = FXSYS_bsearch(&offset, pParser->m_SortedOffset.GetData(),
+ pParser->m_SortedOffset.GetSize(),
+ sizeof(FX_FILESIZE), _CompareFileSize);
+ if (pResult == NULL) {
+ return 0;
}
- if (pParser->m_V5Type[objnum] == 2) {
- objnum = (FX_DWORD)pParser->m_CrossRef[objnum];
+ if ((FX_FILESIZE*)pResult -
+ (FX_FILESIZE*)pParser->m_SortedOffset.GetData() ==
+ pParser->m_SortedOffset.GetSize() - 1) {
+ return 0;
}
- if (pParser->m_V5Type[objnum] == 1 || pParser->m_V5Type[objnum] == 255) {
- offset = pParser->m_CrossRef[objnum];
- if (offset == 0) {
- return 0;
- }
- void* pResult = FXSYS_bsearch(&offset, pParser->m_SortedOffset.GetData(), pParser->m_SortedOffset.GetSize(), sizeof(FX_FILESIZE), _CompareFileSize);
- if (pResult == NULL) {
- return 0;
- }
- if ((FX_FILESIZE*)pResult - (FX_FILESIZE*)pParser->m_SortedOffset.GetData() == pParser->m_SortedOffset.GetSize() - 1) {
- return 0;
- }
- return (FX_DWORD)(((FX_FILESIZE*)pResult)[1] - offset);
- }
- return 0;
+ return (FX_DWORD)(((FX_FILESIZE*)pResult)[1] - offset);
+ }
+ return 0;
}
-FX_BOOL CPDF_DataAvail::IsObjectsAvail(CFX_PtrArray& obj_array, FX_BOOL bParsePage, IFX_DownloadHints* pHints, CFX_PtrArray &ret_array)
-{
- if (!obj_array.GetSize()) {
- return TRUE;
- }
- FX_DWORD count = 0;
- CFX_PtrArray new_obj_array;
- int32_t i = 0;
- for (i = 0; i < obj_array.GetSize(); i++) {
- CPDF_Object *pObj = (CPDF_Object *)obj_array[i];
- if (!pObj) {
- continue;
+FX_BOOL CPDF_DataAvail::IsObjectsAvail(CFX_PtrArray& obj_array,
+ FX_BOOL bParsePage,
+ IFX_DownloadHints* pHints,
+ CFX_PtrArray& ret_array) {
+ if (!obj_array.GetSize()) {
+ return TRUE;
+ }
+ FX_DWORD count = 0;
+ CFX_PtrArray new_obj_array;
+ int32_t i = 0;
+ for (i = 0; i < obj_array.GetSize(); i++) {
+ CPDF_Object* pObj = (CPDF_Object*)obj_array[i];
+ if (!pObj) {
+ continue;
+ }
+ int32_t type = pObj->GetType();
+ switch (type) {
+ case PDFOBJ_ARRAY: {
+ CPDF_Array* pArray = pObj->GetArray();
+ for (FX_DWORD k = 0; k < pArray->GetCount(); k++) {
+ new_obj_array.Add(pArray->GetElement(k));
+ }
+ } break;
+ case PDFOBJ_STREAM:
+ pObj = pObj->GetDict();
+ case PDFOBJ_DICTIONARY: {
+ CPDF_Dictionary* pDict = pObj->GetDict();
+ if (pDict && pDict->GetString("Type") == "Page" && !bParsePage) {
+ continue;
+ }
+ FX_POSITION pos = pDict->GetStartPos();
+ while (pos) {
+ CPDF_Object* value;
+ CFX_ByteString key;
+ value = pDict->GetNextElement(pos, key);
+ if (key != "Parent") {
+ new_obj_array.Add(value);
+ }
+ }
+ } break;
+ case PDFOBJ_REFERENCE: {
+ CPDF_Reference* pRef = (CPDF_Reference*)pObj;
+ FX_DWORD dwNum = pRef->GetRefObjNum();
+ FX_FILESIZE offset;
+ FX_DWORD original_size = GetObjectSize(dwNum, offset);
+ pdfium::base::CheckedNumeric<FX_DWORD> size = original_size;
+ if (size.ValueOrDefault(0) == 0 || offset < 0 ||
+ offset >= m_dwFileLen) {
+ break;
}
- int32_t type = pObj->GetType();
- switch (type) {
- case PDFOBJ_ARRAY: {
- CPDF_Array *pArray = pObj->GetArray();
- for (FX_DWORD k = 0; k < pArray->GetCount(); k++) {
- new_obj_array.Add(pArray->GetElement(k));
- }
- }
- break;
- case PDFOBJ_STREAM:
- pObj = pObj->GetDict();
- case PDFOBJ_DICTIONARY: {
- CPDF_Dictionary *pDict = pObj->GetDict();
- if (pDict && pDict->GetString("Type") == "Page" && !bParsePage) {
- continue;
- }
- FX_POSITION pos = pDict->GetStartPos();
- while (pos) {
- CPDF_Object *value;
- CFX_ByteString key;
- value = pDict->GetNextElement(pos, key);
- if (key != "Parent") {
- new_obj_array.Add(value);
- }
- }
- }
- break;
- case PDFOBJ_REFERENCE: {
- CPDF_Reference *pRef = (CPDF_Reference*)pObj;
- FX_DWORD dwNum = pRef->GetRefObjNum();
- FX_FILESIZE offset;
- FX_DWORD original_size = GetObjectSize(dwNum, offset);
- pdfium::base::CheckedNumeric<FX_DWORD> size = original_size;
- if (size.ValueOrDefault(0) == 0 || offset < 0 || offset >= m_dwFileLen) {
- break;
- }
- size += offset;
- size += 512;
- if (!size.IsValid()) {
- break;
- }
- if (size.ValueOrDie() > m_dwFileLen) {
- size = m_dwFileLen - offset;
- } else {
- size = original_size + 512;
- }
- if (!size.IsValid()) {
- break;
- }
- if (!m_pFileAvail->IsDataAvail(offset, size.ValueOrDie())) {
- pHints->AddSegment(offset, size.ValueOrDie());
- ret_array.Add(pObj);
- count++;
- } else if (!m_objnum_array.Find(dwNum)) {
- m_objnum_array.AddObjNum(dwNum);
- CPDF_Object *pReferred = m_pDocument->GetIndirectObject(pRef->GetRefObjNum(), NULL);
- if (pReferred) {
- new_obj_array.Add(pReferred);
- }
- }
- }
- break;
+ size += offset;
+ size += 512;
+ if (!size.IsValid()) {
+ break;
}
+ if (size.ValueOrDie() > m_dwFileLen) {
+ size = m_dwFileLen - offset;
+ } else {
+ size = original_size + 512;
+ }
+ if (!size.IsValid()) {
+ break;
+ }
+ if (!m_pFileAvail->IsDataAvail(offset, size.ValueOrDie())) {
+ pHints->AddSegment(offset, size.ValueOrDie());
+ ret_array.Add(pObj);
+ count++;
+ } else if (!m_objnum_array.Find(dwNum)) {
+ m_objnum_array.AddObjNum(dwNum);
+ CPDF_Object* pReferred =
+ m_pDocument->GetIndirectObject(pRef->GetRefObjNum(), NULL);
+ if (pReferred) {
+ new_obj_array.Add(pReferred);
+ }
+ }
+ } break;
+ }
+ }
+ if (count > 0) {
+ int32_t iSize = new_obj_array.GetSize();
+ for (i = 0; i < iSize; ++i) {
+ CPDF_Object* pObj = (CPDF_Object*)new_obj_array[i];
+ int32_t type = pObj->GetType();
+ if (type == PDFOBJ_REFERENCE) {
+ CPDF_Reference* pRef = (CPDF_Reference*)pObj;
+ FX_DWORD dwNum = pRef->GetRefObjNum();
+ if (!m_objnum_array.Find(dwNum)) {
+ ret_array.Add(pObj);
+ }
+ } else {
+ ret_array.Add(pObj);
+ }
}
- if (count > 0) {
- int32_t iSize = new_obj_array.GetSize();
- for (i = 0; i < iSize; ++i) {
- CPDF_Object *pObj = (CPDF_Object *)new_obj_array[i];
- int32_t type = pObj->GetType();
- if (type == PDFOBJ_REFERENCE) {
- CPDF_Reference *pRef = (CPDF_Reference *)pObj;
- FX_DWORD dwNum = pRef->GetRefObjNum();
- if (!m_objnum_array.Find(dwNum)) {
- ret_array.Add(pObj);
- }
- } else {
- ret_array.Add(pObj);
- }
- }
- return FALSE;
- }
- obj_array.RemoveAll();
- obj_array.Append(new_obj_array);
- return IsObjectsAvail(obj_array, FALSE, pHints, ret_array);
+ return FALSE;
+ }
+ obj_array.RemoveAll();
+ obj_array.Append(new_obj_array);
+ return IsObjectsAvail(obj_array, FALSE, pHints, ret_array);
}
-FX_BOOL CPDF_DataAvail::IsDocAvail(IFX_DownloadHints* pHints)
-{
- if (!m_dwFileLen && m_pFileRead) {
- m_dwFileLen = (FX_DWORD)m_pFileRead->GetSize();
- if (!m_dwFileLen) {
- return TRUE;
- }
- }
- while (!m_bDocAvail) {
- if (!CheckDocStatus(pHints)) {
- return FALSE;
- }
- }
- return TRUE;
+FX_BOOL CPDF_DataAvail::IsDocAvail(IFX_DownloadHints* pHints) {
+ if (!m_dwFileLen && m_pFileRead) {
+ m_dwFileLen = (FX_DWORD)m_pFileRead->GetSize();
+ if (!m_dwFileLen) {
+ return TRUE;
+ }
+ }
+ while (!m_bDocAvail) {
+ if (!CheckDocStatus(pHints)) {
+ return FALSE;
+ }
+ }
+ return TRUE;
}
-FX_BOOL CPDF_DataAvail::CheckAcroFormSubObject(IFX_DownloadHints* pHints)
-{
- if (!m_objs_array.GetSize()) {
- m_objs_array.RemoveAll();
- m_objnum_array.RemoveAll();
- CFX_PtrArray obj_array;
- obj_array.Append(m_arrayAcroforms);
- FX_BOOL bRet = IsObjectsAvail(obj_array, FALSE, pHints, m_objs_array);
- if (bRet) {
- m_objs_array.RemoveAll();
- }
- return bRet;
- }
- CFX_PtrArray new_objs_array;
- FX_BOOL bRet = IsObjectsAvail(m_objs_array, FALSE, pHints, new_objs_array);
+FX_BOOL CPDF_DataAvail::CheckAcroFormSubObject(IFX_DownloadHints* pHints) {
+ if (!m_objs_array.GetSize()) {
+ m_objs_array.RemoveAll();
+ m_objnum_array.RemoveAll();
+ CFX_PtrArray obj_array;
+ obj_array.Append(m_arrayAcroforms);
+ FX_BOOL bRet = IsObjectsAvail(obj_array, FALSE, pHints, m_objs_array);
if (bRet) {
- int32_t iSize = m_arrayAcroforms.GetSize();
- for (int32_t i = 0; i < iSize; ++i) {
- ((CPDF_Object *)m_arrayAcroforms.GetAt(i))->Release();
- }
- m_arrayAcroforms.RemoveAll();
- } else {
- m_objs_array.RemoveAll();
- m_objs_array.Append(new_objs_array);
+ m_objs_array.RemoveAll();
}
return bRet;
-}
-FX_BOOL CPDF_DataAvail::CheckAcroForm(IFX_DownloadHints* pHints)
-{
- FX_BOOL bExist = FALSE;
- m_pAcroForm = GetObject(m_dwAcroFormObjNum, pHints, &bExist);
- if (!bExist) {
- m_docStatus = PDF_DATAAVAIL_PAGETREE;
- return TRUE;
- }
- if (!m_pAcroForm) {
- if (m_docStatus == PDF_DATAAVAIL_ERROR) {
- m_docStatus = PDF_DATAAVAIL_LOADALLFILE;
- return TRUE;
- }
- return FALSE;
+ }
+ CFX_PtrArray new_objs_array;
+ FX_BOOL bRet = IsObjectsAvail(m_objs_array, FALSE, pHints, new_objs_array);
+ if (bRet) {
+ int32_t iSize = m_arrayAcroforms.GetSize();
+ for (int32_t i = 0; i < iSize; ++i) {
+ ((CPDF_Object*)m_arrayAcroforms.GetAt(i))->Release();
}
- m_arrayAcroforms.Add(m_pAcroForm);
+ m_arrayAcroforms.RemoveAll();
+ } else {
+ m_objs_array.RemoveAll();
+ m_objs_array.Append(new_objs_array);
+ }
+ return bRet;
+}
+FX_BOOL CPDF_DataAvail::CheckAcroForm(IFX_DownloadHints* pHints) {
+ FX_BOOL bExist = FALSE;
+ m_pAcroForm = GetObject(m_dwAcroFormObjNum, pHints, &bExist);
+ if (!bExist) {
m_docStatus = PDF_DATAAVAIL_PAGETREE;
return TRUE;
-}
-FX_BOOL CPDF_DataAvail::CheckDocStatus(IFX_DownloadHints *pHints)
-{
- switch (m_docStatus) {
- case PDF_DATAAVAIL_HEADER:
- return CheckHeader(pHints);
- case PDF_DATAAVAIL_FIRSTPAGE:
- case PDF_DATAAVAIL_FIRSTPAGE_PREPARE:
- return CheckFirstPage(pHints);
- case PDF_DATAAVAIL_END:
- return CheckEnd(pHints);
- case PDF_DATAAVAIL_CROSSREF:
- return CheckCrossRef(pHints);
- case PDF_DATAAVAIL_CROSSREF_ITEM:
- return CheckCrossRefItem(pHints);
- case PDF_DATAAVAIL_CROSSREF_STREAM:
- return CheckAllCrossRefStream(pHints);
- case PDF_DATAAVAIL_TRAILER:
- return CheckTrailer(pHints);
- case PDF_DATAAVAIL_TRAILER_APPEND:
- return CheckTrailerAppend(pHints);
- case PDF_DATAAVAIL_LOADALLCRSOSSREF:
- return LoadAllXref(pHints);
- case PDF_DATAAVAIL_LOADALLFILE:
- return LoadAllFile(pHints);
- case PDF_DATAAVAIL_ROOT:
- return CheckRoot(pHints);
- case PDF_DATAAVAIL_INFO:
- return CheckInfo(pHints);
- case PDF_DATAAVAIL_ACROFORM:
- return CheckAcroForm(pHints);
- case PDF_DATAAVAIL_PAGETREE:
- if (m_bTotalLoadPageTree) {
- return CheckPages(pHints);
- }
- return LoadDocPages(pHints);
- case PDF_DATAAVAIL_PAGE:
- if (m_bTotalLoadPageTree) {
- return CheckPage(pHints);
- }
- m_docStatus = PDF_DATAAVAIL_PAGE_LATERLOAD;
- return TRUE;
- case PDF_DATAAVAIL_ERROR:
- return LoadAllFile(pHints);
- case PDF_DATAAVAIL_PAGE_LATERLOAD:
- m_docStatus = PDF_DATAAVAIL_PAGE;
- default:
- m_bDocAvail = TRUE;
- return TRUE;
+ }
+ if (!m_pAcroForm) {
+ if (m_docStatus == PDF_DATAAVAIL_ERROR) {
+ m_docStatus = PDF_DATAAVAIL_LOADALLFILE;
+ return TRUE;
}
+ return FALSE;
+ }
+ m_arrayAcroforms.Add(m_pAcroForm);
+ m_docStatus = PDF_DATAAVAIL_PAGETREE;
+ return TRUE;
}
-FX_BOOL CPDF_DataAvail::CheckPageStatus(IFX_DownloadHints* pHints)
-{
- switch (m_docStatus) {
- case PDF_DATAAVAIL_PAGETREE:
- return CheckPages(pHints);
- case PDF_DATAAVAIL_PAGE:
- return CheckPage(pHints);
- case PDF_DATAAVAIL_ERROR:
- return LoadAllFile(pHints);
- default:
- m_bPagesTreeLoad = TRUE;
- m_bPagesLoad = TRUE;
- return TRUE;
- }
+FX_BOOL CPDF_DataAvail::CheckDocStatus(IFX_DownloadHints* pHints) {
+ switch (m_docStatus) {
+ case PDF_DATAAVAIL_HEADER:
+ return CheckHeader(pHints);
+ case PDF_DATAAVAIL_FIRSTPAGE:
+ case PDF_DATAAVAIL_FIRSTPAGE_PREPARE:
+ return CheckFirstPage(pHints);
+ case PDF_DATAAVAIL_END:
+ return CheckEnd(pHints);
+ case PDF_DATAAVAIL_CROSSREF:
+ return CheckCrossRef(pHints);
+ case PDF_DATAAVAIL_CROSSREF_ITEM:
+ return CheckCrossRefItem(pHints);
+ case PDF_DATAAVAIL_CROSSREF_STREAM:
+ return CheckAllCrossRefStream(pHints);
+ case PDF_DATAAVAIL_TRAILER:
+ return CheckTrailer(pHints);
+ case PDF_DATAAVAIL_TRAILER_APPEND:
+ return CheckTrailerAppend(pHints);
+ case PDF_DATAAVAIL_LOADALLCRSOSSREF:
+ return LoadAllXref(pHints);
+ case PDF_DATAAVAIL_LOADALLFILE:
+ return LoadAllFile(pHints);
+ case PDF_DATAAVAIL_ROOT:
+ return CheckRoot(pHints);
+ case PDF_DATAAVAIL_INFO:
+ return CheckInfo(pHints);
+ case PDF_DATAAVAIL_ACROFORM:
+ return CheckAcroForm(pHints);
+ case PDF_DATAAVAIL_PAGETREE:
+ if (m_bTotalLoadPageTree) {
+ return CheckPages(pHints);
+ }
+ return LoadDocPages(pHints);
+ case PDF_DATAAVAIL_PAGE:
+ if (m_bTotalLoadPageTree) {
+ return CheckPage(pHints);
+ }
+ m_docStatus = PDF_DATAAVAIL_PAGE_LATERLOAD;
+ return TRUE;
+ case PDF_DATAAVAIL_ERROR:
+ return LoadAllFile(pHints);
+ case PDF_DATAAVAIL_PAGE_LATERLOAD:
+ m_docStatus = PDF_DATAAVAIL_PAGE;
+ default:
+ m_bDocAvail = TRUE;
+ return TRUE;
+ }
}
-FX_BOOL CPDF_DataAvail::LoadAllFile(IFX_DownloadHints* pHints)
-{
- if (m_pFileAvail->IsDataAvail(0, (FX_DWORD)m_dwFileLen)) {
- m_docStatus = PDF_DATAAVAIL_DONE;
- return TRUE;
- }
- pHints->AddSegment(0, (FX_DWORD)m_dwFileLen);
- return FALSE;
+FX_BOOL CPDF_DataAvail::CheckPageStatus(IFX_DownloadHints* pHints) {
+ switch (m_docStatus) {
+ case PDF_DATAAVAIL_PAGETREE:
+ return CheckPages(pHints);
+ case PDF_DATAAVAIL_PAGE:
+ return CheckPage(pHints);
+ case PDF_DATAAVAIL_ERROR:
+ return LoadAllFile(pHints);
+ default:
+ m_bPagesTreeLoad = TRUE;
+ m_bPagesLoad = TRUE;
+ return TRUE;
+ }
}
-FX_BOOL CPDF_DataAvail::LoadAllXref(IFX_DownloadHints* pHints)
-{
- m_parser.m_Syntax.InitParser(m_pFileRead, (FX_DWORD)m_dwHeaderOffset);
- m_parser.m_bOwnFileRead = FALSE;
- if (!m_parser.LoadAllCrossRefV4(m_dwLastXRefOffset) && !m_parser.LoadAllCrossRefV5(m_dwLastXRefOffset)) {
- m_docStatus = PDF_DATAAVAIL_LOADALLFILE;
- return FALSE;
- }
- FXSYS_qsort(m_parser.m_SortedOffset.GetData(), m_parser.m_SortedOffset.GetSize(), sizeof(FX_FILESIZE), _CompareFileSize);
- m_dwRootObjNum = m_parser.GetRootObjNum();
- m_dwInfoObjNum = m_parser.GetInfoObjNum();
- m_pCurrentParser = &m_parser;
- m_docStatus = PDF_DATAAVAIL_ROOT;
+FX_BOOL CPDF_DataAvail::LoadAllFile(IFX_DownloadHints* pHints) {
+ if (m_pFileAvail->IsDataAvail(0, (FX_DWORD)m_dwFileLen)) {
+ m_docStatus = PDF_DATAAVAIL_DONE;
return TRUE;
+ }
+ pHints->AddSegment(0, (FX_DWORD)m_dwFileLen);
+ return FALSE;
+}
+FX_BOOL CPDF_DataAvail::LoadAllXref(IFX_DownloadHints* pHints) {
+ m_parser.m_Syntax.InitParser(m_pFileRead, (FX_DWORD)m_dwHeaderOffset);
+ m_parser.m_bOwnFileRead = FALSE;
+ if (!m_parser.LoadAllCrossRefV4(m_dwLastXRefOffset) &&
+ !m_parser.LoadAllCrossRefV5(m_dwLastXRefOffset)) {
+ m_docStatus = PDF_DATAAVAIL_LOADALLFILE;
+ return FALSE;
+ }
+ FXSYS_qsort(m_parser.m_SortedOffset.GetData(),
+ m_parser.m_SortedOffset.GetSize(), sizeof(FX_FILESIZE),
+ _CompareFileSize);
+ m_dwRootObjNum = m_parser.GetRootObjNum();
+ m_dwInfoObjNum = m_parser.GetInfoObjNum();
+ m_pCurrentParser = &m_parser;
+ m_docStatus = PDF_DATAAVAIL_ROOT;
+ return TRUE;
}
-CPDF_Object* CPDF_DataAvail::GetObject(FX_DWORD objnum, IFX_DownloadHints* pHints, FX_BOOL *pExistInFile)
-{
- CPDF_Object *pRet = NULL;
- FX_DWORD original_size = 0;
- FX_FILESIZE offset = 0;
- CPDF_Parser *pParser = NULL;
+CPDF_Object* CPDF_DataAvail::GetObject(FX_DWORD objnum,
+ IFX_DownloadHints* pHints,
+ FX_BOOL* pExistInFile) {
+ CPDF_Object* pRet = NULL;
+ FX_DWORD original_size = 0;
+ FX_FILESIZE offset = 0;
+ CPDF_Parser* pParser = NULL;
- if (pExistInFile) {
- *pExistInFile = TRUE;
- }
+ if (pExistInFile) {
+ *pExistInFile = TRUE;
+ }
- if (m_pDocument == NULL) {
- original_size = (FX_DWORD)m_parser.GetObjectSize(objnum);
- offset = m_parser.GetObjectOffset(objnum);
- pParser = &m_parser;
- } else {
- original_size = GetObjectSize(objnum, offset);
- pParser = (CPDF_Parser *)(m_pDocument->GetParser());
- }
+ if (m_pDocument == NULL) {
+ original_size = (FX_DWORD)m_parser.GetObjectSize(objnum);
+ offset = m_parser.GetObjectOffset(objnum);
+ pParser = &m_parser;
+ } else {
+ original_size = GetObjectSize(objnum, offset);
+ pParser = (CPDF_Parser*)(m_pDocument->GetParser());
+ }
- pdfium::base::CheckedNumeric<FX_DWORD> size = original_size;
- if (size.ValueOrDefault(0) == 0 || offset < 0 || offset >= m_dwFileLen) {
- if (pExistInFile)
- *pExistInFile = FALSE;
+ pdfium::base::CheckedNumeric<FX_DWORD> size = original_size;
+ if (size.ValueOrDefault(0) == 0 || offset < 0 || offset >= m_dwFileLen) {
+ if (pExistInFile)
+ *pExistInFile = FALSE;
- return NULL;
- }
+ return NULL;
+ }
- size += offset;
- size += 512;
- if (!size.IsValid()) {
- return NULL;
- }
+ size += offset;
+ size += 512;
+ if (!size.IsValid()) {
+ return NULL;
+ }
- if (size.ValueOrDie() > m_dwFileLen) {
- size = m_dwFileLen - offset;
- } else {
- size = original_size + 512;
- }
+ if (size.ValueOrDie() > m_dwFileLen) {
+ size = m_dwFileLen - offset;
+ } else {
+ size = original_size + 512;
+ }
- if (!size.IsValid()) {
- return NULL;
- }
+ if (!size.IsValid()) {
+ return NULL;
+ }
- if (!m_pFileAvail->IsDataAvail(offset, size.ValueOrDie())) {
- pHints->AddSegment(offset, size.ValueOrDie());
- return NULL;
- }
+ if (!m_pFileAvail->IsDataAvail(offset, size.ValueOrDie())) {
+ pHints->AddSegment(offset, size.ValueOrDie());
+ return NULL;
+ }
- if (pParser) {
- pRet = pParser->ParseIndirectObject(NULL, objnum, NULL);
- }
+ if (pParser) {
+ pRet = pParser->ParseIndirectObject(NULL, objnum, NULL);
+ }
- if (!pRet && pExistInFile) {
- *pExistInFile = FALSE;
- }
+ if (!pRet && pExistInFile) {
+ *pExistInFile = FALSE;
+ }
- return pRet;
+ return pRet;
}
-FX_BOOL CPDF_DataAvail::CheckInfo(IFX_DownloadHints* pHints)
-{
- FX_BOOL bExist = FALSE;
- CPDF_Object *pInfo = GetObject(m_dwInfoObjNum, pHints, &bExist);
- if (!bExist) {
- if (m_bHaveAcroForm) {
- m_docStatus = PDF_DATAAVAIL_ACROFORM;
- } else {
- m_docStatus = PDF_DATAAVAIL_PAGETREE;
- }
- return TRUE;
- }
- if (!pInfo) {
- if (m_docStatus == PDF_DATAAVAIL_ERROR) {
- m_docStatus = PDF_DATAAVAIL_LOADALLFILE;
- return TRUE;
- }
- if (m_Pos == m_dwFileLen) {
- m_docStatus = PDF_DATAAVAIL_ERROR;
- }
- return FALSE;
- }
- if (pInfo) {
- pInfo->Release();
- }
+FX_BOOL CPDF_DataAvail::CheckInfo(IFX_DownloadHints* pHints) {
+ FX_BOOL bExist = FALSE;
+ CPDF_Object* pInfo = GetObject(m_dwInfoObjNum, pHints, &bExist);
+ if (!bExist) {
if (m_bHaveAcroForm) {
- m_docStatus = PDF_DATAAVAIL_ACROFORM;
+ m_docStatus = PDF_DATAAVAIL_ACROFORM;
} else {
- m_docStatus = PDF_DATAAVAIL_PAGETREE;
+ m_docStatus = PDF_DATAAVAIL_PAGETREE;
}
return TRUE;
-}
-FX_BOOL CPDF_DataAvail::CheckRoot(IFX_DownloadHints* pHints)
-{
- FX_BOOL bExist = FALSE;
- m_pRoot = GetObject(m_dwRootObjNum, pHints, &bExist);
- if (!bExist) {
- m_docStatus = PDF_DATAAVAIL_LOADALLFILE;
- return TRUE;
+ }
+ if (!pInfo) {
+ if (m_docStatus == PDF_DATAAVAIL_ERROR) {
+ m_docStatus = PDF_DATAAVAIL_LOADALLFILE;
+ return TRUE;
}
- if (!m_pRoot) {
- if (m_docStatus == PDF_DATAAVAIL_ERROR) {
- m_docStatus = PDF_DATAAVAIL_LOADALLFILE;
- return TRUE;
- }
- return FALSE;
+ if (m_Pos == m_dwFileLen) {
+ m_docStatus = PDF_DATAAVAIL_ERROR;
}
- CPDF_Dictionary* pDict = m_pRoot->GetDict();
- if (!pDict) {
- m_docStatus = PDF_DATAAVAIL_ERROR;
- return FALSE;
- }
- CPDF_Reference* pRef = (CPDF_Reference*)pDict->GetElement(FX_BSTRC("Pages"));
- if (pRef == NULL || pRef->GetType() != PDFOBJ_REFERENCE) {
- m_docStatus = PDF_DATAAVAIL_ERROR;
- return FALSE;
- }
- m_PagesObjNum = pRef->GetRefObjNum();
- CPDF_Reference* pAcroFormRef = (CPDF_Reference*)m_pRoot->GetDict()->GetElement(FX_BSTRC("AcroForm"));
- if (pAcroFormRef && pAcroFormRef->GetType() == PDFOBJ_REFERENCE) {
- m_bHaveAcroForm = TRUE;
- m_dwAcroFormObjNum = pAcroFormRef->GetRefObjNum();
- }
- if (m_dwInfoObjNum) {
- m_docStatus = PDF_DATAAVAIL_INFO;
- } else {
- if (m_bHaveAcroForm) {
- m_docStatus = PDF_DATAAVAIL_ACROFORM;
- } else {
- m_docStatus = PDF_DATAAVAIL_PAGETREE;
- }
- }
- return TRUE;
-}
-FX_BOOL CPDF_DataAvail::PreparePageItem()
-{
- CPDF_Dictionary *pRoot = m_pDocument->GetRoot();
- CPDF_Reference* pRef = pRoot ? (CPDF_Reference*)pRoot->GetElement(FX_BSTRC("Pages")) : NULL;
- if (pRef == NULL || pRef->GetType() != PDFOBJ_REFERENCE) {
- m_docStatus = PDF_DATAAVAIL_ERROR;
- return FALSE;
- }
- m_PagesObjNum = pRef->GetRefObjNum();
- m_pCurrentParser = (CPDF_Parser *)m_pDocument->GetParser();
+ return FALSE;
+ }
+ if (pInfo) {
+ pInfo->Release();
+ }
+ if (m_bHaveAcroForm) {
+ m_docStatus = PDF_DATAAVAIL_ACROFORM;
+ } else {
m_docStatus = PDF_DATAAVAIL_PAGETREE;
- return TRUE;
+ }
+ return TRUE;
}
-FX_BOOL CPDF_DataAvail::IsFirstCheck(int iPage)
-{
- if (NULL == m_pageMapCheckState) {
- m_pageMapCheckState = new CFX_CMapDWordToDWord();
- }
- FX_DWORD dwValue = 0;
- if (!m_pageMapCheckState->Lookup(iPage, dwValue)) {
- m_pageMapCheckState->SetAt(iPage, 1);
- return TRUE;
- }
- if (dwValue != 0) {
- return FALSE;
- }
- m_pageMapCheckState->SetAt(iPage, 1);
+FX_BOOL CPDF_DataAvail::CheckRoot(IFX_DownloadHints* pHints) {
+ FX_BOOL bExist = FALSE;
+ m_pRoot = GetObject(m_dwRootObjNum, pHints, &bExist);
+ if (!bExist) {
+ m_docStatus = PDF_DATAAVAIL_LOADALLFILE;
return TRUE;
-}
-void CPDF_DataAvail::ResetFirstCheck(int iPage)
-{
- if (NULL == m_pageMapCheckState) {
- m_pageMapCheckState = new CFX_CMapDWordToDWord();
+ }
+ if (!m_pRoot) {
+ if (m_docStatus == PDF_DATAAVAIL_ERROR) {
+ m_docStatus = PDF_DATAAVAIL_LOADALLFILE;
+ return TRUE;
}
- FX_DWORD dwValue = 1;
- if (!m_pageMapCheckState->Lookup(iPage, dwValue)) {
- return;
+ return FALSE;
+ }
+ CPDF_Dictionary* pDict = m_pRoot->GetDict();
+ if (!pDict) {
+ m_docStatus = PDF_DATAAVAIL_ERROR;
+ return FALSE;
+ }
+ CPDF_Reference* pRef = (CPDF_Reference*)pDict->GetElement(FX_BSTRC("Pages"));
+ if (pRef == NULL || pRef->GetType() != PDFOBJ_REFERENCE) {
+ m_docStatus = PDF_DATAAVAIL_ERROR;
+ return FALSE;
+ }
+ m_PagesObjNum = pRef->GetRefObjNum();
+ CPDF_Reference* pAcroFormRef =
+ (CPDF_Reference*)m_pRoot->GetDict()->GetElement(FX_BSTRC("AcroForm"));
+ if (pAcroFormRef && pAcroFormRef->GetType() == PDFOBJ_REFERENCE) {
+ m_bHaveAcroForm = TRUE;
+ m_dwAcroFormObjNum = pAcroFormRef->GetRefObjNum();
+ }
+ if (m_dwInfoObjNum) {
+ m_docStatus = PDF_DATAAVAIL_INFO;
+ } else {
+ if (m_bHaveAcroForm) {
+ m_docStatus = PDF_DATAAVAIL_ACROFORM;
+ } else {
+ m_docStatus = PDF_DATAAVAIL_PAGETREE;
}
- m_pageMapCheckState->SetAt(iPage, 0);
+ }
+ return TRUE;
}
-FX_BOOL CPDF_DataAvail::CheckPage(IFX_DownloadHints* pHints)
-{
- FX_DWORD iPageObjs = m_PageObjList.GetSize();
- CFX_DWordArray UnavailObjList;
- for (FX_DWORD i = 0; i < iPageObjs; ++i) {
- FX_DWORD dwPageObjNum = m_PageObjList.GetAt(i);
- FX_BOOL bExist = FALSE;
- CPDF_Object *pObj = GetObject(dwPageObjNum, pHints, &bExist);
- if (!pObj) {
- if (bExist) {
- UnavailObjList.Add(dwPageObjNum);
- }
- continue;
- }
- if (pObj->GetType() == PDFOBJ_ARRAY) {
- CPDF_Array *pArray = pObj->GetArray();
- if (pArray) {
- int32_t iSize = pArray->GetCount();
- CPDF_Object *pItem = NULL;
- for (int32_t j = 0; j < iSize; ++j) {
- pItem = pArray->GetElement(j);
- if (pItem && pItem->GetType() == PDFOBJ_REFERENCE) {
- UnavailObjList.Add(((CPDF_Reference *)pItem)->GetRefObjNum());
- }
- }
- }
- }
- if (pObj->GetType() != PDFOBJ_DICTIONARY) {
- pObj->Release();
- continue;
- }
- CFX_ByteString type = pObj->GetDict()->GetString(FX_BSTRC("Type"));
- if (type == FX_BSTRC("Pages")) {
- m_PagesArray.Add(pObj);
- continue;
- }
- pObj->Release();
- }
- m_PageObjList.RemoveAll();
- if (UnavailObjList.GetSize()) {
- m_PageObjList.Append(UnavailObjList);
- return FALSE;
- }
- FX_DWORD iPages = m_PagesArray.GetSize();
- for (FX_DWORD i = 0; i < iPages; i++) {
- CPDF_Object *pPages = (CPDF_Object *)m_PagesArray.GetAt(i);
- if (!pPages) {
- continue;
- }
- if (!GetPageKids(m_pCurrentParser, pPages)) {
- pPages->Release();
- while (++i < iPages) {
- pPages = (CPDF_Object *)m_PagesArray.GetAt(i);
- pPages->Release();
- }
- m_PagesArray.RemoveAll();
- m_docStatus = PDF_DATAAVAIL_ERROR;
- return FALSE;
- }
- pPages->Release();
- }
- m_PagesArray.RemoveAll();
- if (!m_PageObjList.GetSize()) {
- m_docStatus = PDF_DATAAVAIL_DONE;
- }
- return TRUE;
+FX_BOOL CPDF_DataAvail::PreparePageItem() {
+ CPDF_Dictionary* pRoot = m_pDocument->GetRoot();
+ CPDF_Reference* pRef =
+ pRoot ? (CPDF_Reference*)pRoot->GetElement(FX_BSTRC("Pages")) : NULL;
+ if (pRef == NULL || pRef->GetType() != PDFOBJ_REFERENCE) {
+ m_docStatus = PDF_DATAAVAIL_ERROR;
+ return FALSE;
+ }
+ m_PagesObjNum = pRef->GetRefObjNum();
+ m_pCurrentParser = (CPDF_Parser*)m_pDocument->GetParser();
+ m_docStatus = PDF_DATAAVAIL_PAGETREE;
+ return TRUE;
}
-FX_BOOL CPDF_DataAvail::GetPageKids(CPDF_Parser *pParser, CPDF_Object *pPages)
-{
- if (!pParser) {
- m_docStatus = PDF_DATAAVAIL_ERROR;
- return FALSE;
- }
- CPDF_Dictionary* pDict = pPages->GetDict();
- CPDF_Object *pKids = pDict ? pDict->GetElement(FX_BSTRC("Kids")) : NULL;
- if (!pKids) {
- return TRUE;
- }
- switch (pKids->GetType()) {
- case PDFOBJ_REFERENCE: {
- CPDF_Reference *pKid = (CPDF_Reference *)pKids;
- m_PageObjList.Add(pKid->GetRefObjNum());
- }
- break;
- case PDFOBJ_ARRAY: {
- CPDF_Array *pKidsArray = (CPDF_Array *)pKids;
- for (FX_DWORD i = 0; i < pKidsArray->GetCount(); ++i) {
- CPDF_Object *pKid = (CPDF_Object *)pKidsArray->GetElement(i);
- if (pKid && pKid->GetType() == PDFOBJ_REFERENCE) {
- m_PageObjList.Add(((CPDF_Reference *)pKid)->GetRefObjNum());
- }
- }
- }
- break;
- default:
- m_docStatus = PDF_DATAAVAIL_ERROR;
- return FALSE;
- }
+FX_BOOL CPDF_DataAvail::IsFirstCheck(int iPage) {
+ if (NULL == m_pageMapCheckState) {
+ m_pageMapCheckState = new CFX_CMapDWordToDWord();
+ }
+ FX_DWORD dwValue = 0;
+ if (!m_pageMapCheckState->Lookup(iPage, dwValue)) {
+ m_pageMapCheckState->SetAt(iPage, 1);
return TRUE;
+ }
+ if (dwValue != 0) {
+ return FALSE;
+ }
+ m_pageMapCheckState->SetAt(iPage, 1);
+ return TRUE;
}
-FX_BOOL CPDF_DataAvail::CheckPages(IFX_DownloadHints* pHints)
-{
+void CPDF_DataAvail::ResetFirstCheck(int iPage) {
+ if (NULL == m_pageMapCheckState) {
+ m_pageMapCheckState = new CFX_CMapDWordToDWord();
+ }
+ FX_DWORD dwValue = 1;
+ if (!m_pageMapCheckState->Lookup(iPage, dwValue)) {
+ return;
+ }
+ m_pageMapCheckState->SetAt(iPage, 0);
+}
+FX_BOOL CPDF_DataAvail::CheckPage(IFX_DownloadHints* pHints) {
+ FX_DWORD iPageObjs = m_PageObjList.GetSize();
+ CFX_DWordArray UnavailObjList;
+ for (FX_DWORD i = 0; i < iPageObjs; ++i) {
+ FX_DWORD dwPageObjNum = m_PageObjList.GetAt(i);
FX_BOOL bExist = FALSE;
- CPDF_Object *pPages = GetObject(m_PagesObjNum, pHints, &bExist);
- if (!bExist) {
- m_docStatus = PDF_DATAAVAIL_LOADALLFILE;
- return TRUE;
- }
+ CPDF_Object* pObj = GetObject(dwPageObjNum, pHints, &bExist);
+ if (!pObj) {
+ if (bExist) {
+ UnavailObjList.Add(dwPageObjNum);
+ }
+ continue;
+ }
+ if (pObj->GetType() == PDFOBJ_ARRAY) {
+ CPDF_Array* pArray = pObj->GetArray();
+ if (pArray) {
+ int32_t iSize = pArray->GetCount();
+ CPDF_Object* pItem = NULL;
+ for (int32_t j = 0; j < iSize; ++j) {
+ pItem = pArray->GetElement(j);
+ if (pItem && pItem->GetType() == PDFOBJ_REFERENCE) {
+ UnavailObjList.Add(((CPDF_Reference*)pItem)->GetRefObjNum());
+ }
+ }
+ }
+ }
+ if (pObj->GetType() != PDFOBJ_DICTIONARY) {
+ pObj->Release();
+ continue;
+ }
+ CFX_ByteString type = pObj->GetDict()->GetString(FX_BSTRC("Type"));
+ if (type == FX_BSTRC("Pages")) {
+ m_PagesArray.Add(pObj);
+ continue;
+ }
+ pObj->Release();
+ }
+ m_PageObjList.RemoveAll();
+ if (UnavailObjList.GetSize()) {
+ m_PageObjList.Append(UnavailObjList);
+ return FALSE;
+ }
+ FX_DWORD iPages = m_PagesArray.GetSize();
+ for (FX_DWORD i = 0; i < iPages; i++) {
+ CPDF_Object* pPages = (CPDF_Object*)m_PagesArray.GetAt(i);
if (!pPages) {
- if (m_docStatus == PDF_DATAAVAIL_ERROR) {
- m_docStatus = PDF_DATAAVAIL_LOADALLFILE;
- return TRUE;
- }
- return FALSE;
+ continue;
}
if (!GetPageKids(m_pCurrentParser, pPages)) {
+ pPages->Release();
+ while (++i < iPages) {
+ pPages = (CPDF_Object*)m_PagesArray.GetAt(i);
pPages->Release();
- m_docStatus = PDF_DATAAVAIL_ERROR;
- return FALSE;
+ }
+ m_PagesArray.RemoveAll();
+ m_docStatus = PDF_DATAAVAIL_ERROR;
+ return FALSE;
}
pPages->Release();
- m_docStatus = PDF_DATAAVAIL_PAGE;
+ }
+ m_PagesArray.RemoveAll();
+ if (!m_PageObjList.GetSize()) {
+ m_docStatus = PDF_DATAAVAIL_DONE;
+ }
+ return TRUE;
+}
+FX_BOOL CPDF_DataAvail::GetPageKids(CPDF_Parser* pParser, CPDF_Object* pPages) {
+ if (!pParser) {
+ m_docStatus = PDF_DATAAVAIL_ERROR;
+ return FALSE;
+ }
+ CPDF_Dictionary* pDict = pPages->GetDict();
+ CPDF_Object* pKids = pDict ? pDict->GetElement(FX_BSTRC("Kids")) : NULL;
+ if (!pKids) {
return TRUE;
+ }
+ switch (pKids->GetType()) {
+ case PDFOBJ_REFERENCE: {
+ CPDF_Reference* pKid = (CPDF_Reference*)pKids;
+ m_PageObjList.Add(pKid->GetRefObjNum());
+ } break;
+ case PDFOBJ_ARRAY: {
+ CPDF_Array* pKidsArray = (CPDF_Array*)pKids;
+ for (FX_DWORD i = 0; i < pKidsArray->GetCount(); ++i) {
+ CPDF_Object* pKid = (CPDF_Object*)pKidsArray->GetElement(i);
+ if (pKid && pKid->GetType() == PDFOBJ_REFERENCE) {
+ m_PageObjList.Add(((CPDF_Reference*)pKid)->GetRefObjNum());
+ }
+ }
+ } break;
+ default:
+ m_docStatus = PDF_DATAAVAIL_ERROR;
+ return FALSE;
+ }
+ return TRUE;
}
-FX_BOOL CPDF_DataAvail::CheckHeader(IFX_DownloadHints* pHints)
-{
- FX_DWORD req_size = 1024;
- if ((FX_FILESIZE)req_size > m_dwFileLen) {
- req_size = (FX_DWORD)m_dwFileLen;
- }
- if (m_pFileAvail->IsDataAvail(0, req_size)) {
- uint8_t buffer[1024];
- m_pFileRead->ReadBlock(buffer, 0, req_size);
- if (IsLinearizedFile(buffer, req_size)) {
- m_docStatus = PDF_DATAAVAIL_FIRSTPAGE;
- } else {
- if (m_docStatus == PDF_DATAAVAIL_ERROR) {
- return FALSE;
- }
- m_docStatus = PDF_DATAAVAIL_END;
- }
- return TRUE;
+FX_BOOL CPDF_DataAvail::CheckPages(IFX_DownloadHints* pHints) {
+ FX_BOOL bExist = FALSE;
+ CPDF_Object* pPages = GetObject(m_PagesObjNum, pHints, &bExist);
+ if (!bExist) {
+ m_docStatus = PDF_DATAAVAIL_LOADALLFILE;
+ return TRUE;
+ }
+ if (!pPages) {
+ if (m_docStatus == PDF_DATAAVAIL_ERROR) {
+ m_docStatus = PDF_DATAAVAIL_LOADALLFILE;
+ return TRUE;
}
- pHints->AddSegment(0, req_size);
return FALSE;
+ }
+ if (!GetPageKids(m_pCurrentParser, pPages)) {
+ pPages->Release();
+ m_docStatus = PDF_DATAAVAIL_ERROR;
+ return FALSE;
+ }
+ pPages->Release();
+ m_docStatus = PDF_DATAAVAIL_PAGE;
+ return TRUE;
}
-FX_BOOL CPDF_DataAvail::CheckFirstPage(IFX_DownloadHints *pHints)
-{
- CPDF_Dictionary* pDict = m_pLinearized->GetDict();
- CPDF_Object *pEndOffSet = pDict ? pDict->GetElement(FX_BSTRC("E")) : NULL;
- if (!pEndOffSet) {
- m_docStatus = PDF_DATAAVAIL_ERROR;
- return FALSE;
- }
- CPDF_Object *pXRefOffset = pDict ? pDict->GetElement(FX_BSTRC("T")) : NULL;
- if (!pXRefOffset) {
- m_docStatus = PDF_DATAAVAIL_ERROR;
- return FALSE;
- }
- CPDF_Object *pFileLen = pDict ? pDict->GetElement(FX_BSTRC("L")) : NULL;
- if (!pFileLen) {
- m_docStatus = PDF_DATAAVAIL_ERROR;
- return FALSE;
- }
- FX_BOOL bNeedDownLoad = FALSE;
- if (pEndOffSet->GetType() == PDFOBJ_NUMBER) {
- FX_DWORD dwEnd = pEndOffSet->GetInteger();
- dwEnd += 512;
- if ((FX_FILESIZE)dwEnd > m_dwFileLen) {
- dwEnd = (FX_DWORD)m_dwFileLen;
- }
- int32_t iStartPos = (int32_t)(m_dwFileLen > 1024 ? 1024 : m_dwFileLen);
- int32_t iSize = dwEnd > 1024 ? dwEnd - 1024 : 0;
- if (!m_pFileAvail->IsDataAvail(iStartPos, iSize)) {
- pHints->AddSegment(iStartPos, iSize);
- bNeedDownLoad = TRUE;
- }
- }
- m_dwLastXRefOffset = 0;
- FX_FILESIZE dwFileLen = 0;
- if (pXRefOffset->GetType() == PDFOBJ_NUMBER) {
- m_dwLastXRefOffset = pXRefOffset->GetInteger();
- }
- if (pFileLen->GetType() == PDFOBJ_NUMBER) {
- dwFileLen = pFileLen->GetInteger();
- }
- if (!m_pFileAvail->IsDataAvail(m_dwLastXRefOffset, (FX_DWORD)(dwFileLen - m_dwLastXRefOffset))) {
- if (m_docStatus == PDF_DATAAVAIL_FIRSTPAGE) {
- FX_DWORD dwSize = (FX_DWORD)(dwFileLen - m_dwLastXRefOffset);
- FX_FILESIZE offset = m_dwLastXRefOffset;
- if (dwSize < 512 && dwFileLen > 512) {
- dwSize = 512;
- offset = dwFileLen - 512;
- }
- pHints->AddSegment(offset, dwSize);
- }
+FX_BOOL CPDF_DataAvail::CheckHeader(IFX_DownloadHints* pHints) {
+ FX_DWORD req_size = 1024;
+ if ((FX_FILESIZE)req_size > m_dwFileLen) {
+ req_size = (FX_DWORD)m_dwFileLen;
+ }
+ if (m_pFileAvail->IsDataAvail(0, req_size)) {
+ uint8_t buffer[1024];
+ m_pFileRead->ReadBlock(buffer, 0, req_size);
+ if (IsLinearizedFile(buffer, req_size)) {
+ m_docStatus = PDF_DATAAVAIL_FIRSTPAGE;
} else {
- m_docStatus = PDF_DATAAVAIL_FIRSTPAGE_PREPARE;
- }
- if (!bNeedDownLoad && m_docStatus == PDF_DATAAVAIL_FIRSTPAGE_PREPARE) {
- m_docStatus = PDF_DATAAVAIL_DONE;
- return TRUE;
+ if (m_docStatus == PDF_DATAAVAIL_ERROR) {
+ return FALSE;
+ }
+ m_docStatus = PDF_DATAAVAIL_END;
}
- m_docStatus = PDF_DATAAVAIL_FIRSTPAGE_PREPARE;
+ return TRUE;
+ }
+ pHints->AddSegment(0, req_size);
+ return FALSE;
+}
+FX_BOOL CPDF_DataAvail::CheckFirstPage(IFX_DownloadHints* pHints) {
+ CPDF_Dictionary* pDict = m_pLinearized->GetDict();
+ CPDF_Object* pEndOffSet = pDict ? pDict->GetElement(FX_BSTRC("E")) : NULL;
+ if (!pEndOffSet) {
+ m_docStatus = PDF_DATAAVAIL_ERROR;
+ return FALSE;
+ }
+ CPDF_Object* pXRefOffset = pDict ? pDict->GetElement(FX_BSTRC("T")) : NULL;
+ if (!pXRefOffset) {
+ m_docStatus = PDF_DATAAVAIL_ERROR;
+ return FALSE;
+ }
+ CPDF_Object* pFileLen = pDict ? pDict->GetElement(FX_BSTRC("L")) : NULL;
+ if (!pFileLen) {
+ m_docStatus = PDF_DATAAVAIL_ERROR;
return FALSE;
+ }
+ FX_BOOL bNeedDownLoad = FALSE;
+ if (pEndOffSet->GetType() == PDFOBJ_NUMBER) {
+ FX_DWORD dwEnd = pEndOffSet->GetInteger();
+ dwEnd += 512;
+ if ((FX_FILESIZE)dwEnd > m_dwFileLen) {
+ dwEnd = (FX_DWORD)m_dwFileLen;
+ }
+ int32_t iStartPos = (int32_t)(m_dwFileLen > 1024 ? 1024 : m_dwFileLen);
+ int32_t iSize = dwEnd > 1024 ? dwEnd - 1024 : 0;
+ if (!m_pFileAvail->IsDataAvail(iStartPos, iSize)) {
+ pHints->AddSegment(iStartPos, iSize);
+ bNeedDownLoad = TRUE;
+ }
+ }
+ m_dwLastXRefOffset = 0;
+ FX_FILESIZE dwFileLen = 0;
+ if (pXRefOffset->GetType() == PDFOBJ_NUMBER) {
+ m_dwLastXRefOffset = pXRefOffset->GetInteger();
+ }
+ if (pFileLen->GetType() == PDFOBJ_NUMBER) {
+ dwFileLen = pFileLen->GetInteger();
+ }
+ if (!m_pFileAvail->IsDataAvail(m_dwLastXRefOffset,
+ (FX_DWORD)(dwFileLen - m_dwLastXRefOffset))) {
+ if (m_docStatus == PDF_DATAAVAIL_FIRSTPAGE) {
+ FX_DWORD dwSize = (FX_DWORD)(dwFileLen - m_dwLastXRefOffset);
+ FX_FILESIZE offset = m_dwLastXRefOffset;
+ if (dwSize < 512 && dwFileLen > 512) {
+ dwSize = 512;
+ offset = dwFileLen - 512;
+ }
+ pHints->AddSegment(offset, dwSize);
+ }
+ } else {
+ m_docStatus = PDF_DATAAVAIL_FIRSTPAGE_PREPARE;
+ }
+ if (!bNeedDownLoad && m_docStatus == PDF_DATAAVAIL_FIRSTPAGE_PREPARE) {
+ m_docStatus = PDF_DATAAVAIL_DONE;
+ return TRUE;
+ }
+ m_docStatus = PDF_DATAAVAIL_FIRSTPAGE_PREPARE;
+ return FALSE;
}
-CPDF_Object * CPDF_DataAvail::ParseIndirectObjectAt(FX_FILESIZE pos, FX_DWORD objnum)
-{
- FX_FILESIZE SavedPos = m_syntaxParser.SavePos();
- m_syntaxParser.RestorePos(pos);
- FX_BOOL bIsNumber;
- CFX_ByteString word = m_syntaxParser.GetNextWord(bIsNumber);
- if (!bIsNumber) {
- return NULL;
- }
- FX_DWORD parser_objnum = FXSYS_atoi(word);
- if (objnum && parser_objnum != objnum) {
- return NULL;
- }
- word = m_syntaxParser.GetNextWord(bIsNumber);
- if (!bIsNumber) {
- return NULL;
- }
- FX_DWORD gennum = FXSYS_atoi(word);
- if (m_syntaxParser.GetKeyword() != FX_BSTRC("obj")) {
- m_syntaxParser.RestorePos(SavedPos);
- return NULL;
- }
- CPDF_Object* pObj = m_syntaxParser.GetObject(NULL, objnum, gennum, 0);
+CPDF_Object* CPDF_DataAvail::ParseIndirectObjectAt(FX_FILESIZE pos,
+ FX_DWORD objnum) {
+ FX_FILESIZE SavedPos = m_syntaxParser.SavePos();
+ m_syntaxParser.RestorePos(pos);
+ FX_BOOL bIsNumber;
+ CFX_ByteString word = m_syntaxParser.GetNextWord(bIsNumber);
+ if (!bIsNumber) {
+ return NULL;
+ }
+ FX_DWORD parser_objnum = FXSYS_atoi(word);
+ if (objnum && parser_objnum != objnum) {
+ return NULL;
+ }
+ word = m_syntaxParser.GetNextWord(bIsNumber);
+ if (!bIsNumber) {
+ return NULL;
+ }
+ FX_DWORD gennum = FXSYS_atoi(word);
+ if (m_syntaxParser.GetKeyword() != FX_BSTRC("obj")) {
m_syntaxParser.RestorePos(SavedPos);
- return pObj;
+ return NULL;
+ }
+ CPDF_Object* pObj = m_syntaxParser.GetObject(NULL, objnum, gennum, 0);
+ m_syntaxParser.RestorePos(SavedPos);
+ return pObj;
}
-int32_t CPDF_DataAvail::IsLinearizedPDF()
-{
- FX_DWORD req_size = 1024;
- if (!m_pFileAvail->IsDataAvail(0, req_size)) {
- return PDF_UNKNOW_LINEARIZED;
- }
- if (!m_pFileRead) {
- return PDF_NOT_LINEARIZED;
- }
- FX_FILESIZE dwSize = m_pFileRead->GetSize();
- if (dwSize < (FX_FILESIZE)req_size) {
- return PDF_UNKNOW_LINEARIZED;
- }
- uint8_t buffer[1024];
- m_pFileRead->ReadBlock(buffer, 0, req_size);
- if (IsLinearizedFile(buffer, req_size)) {
- return PDF_IS_LINEARIZED;
- }
+int32_t CPDF_DataAvail::IsLinearizedPDF() {
+ FX_DWORD req_size = 1024;
+ if (!m_pFileAvail->IsDataAvail(0, req_size)) {
+ return PDF_UNKNOW_LINEARIZED;
+ }
+ if (!m_pFileRead) {
return PDF_NOT_LINEARIZED;
+ }
+ FX_FILESIZE dwSize = m_pFileRead->GetSize();
+ if (dwSize < (FX_FILESIZE)req_size) {
+ return PDF_UNKNOW_LINEARIZED;
+ }
+ uint8_t buffer[1024];
+ m_pFileRead->ReadBlock(buffer, 0, req_size);
+ if (IsLinearizedFile(buffer, req_size)) {
+ return PDF_IS_LINEARIZED;
+ }
+ return PDF_NOT_LINEARIZED;
}
-FX_BOOL CPDF_DataAvail::IsLinearizedFile(uint8_t* pData, FX_DWORD dwLen)
-{
- CFX_SmartPointer<IFX_FileStream> file(FX_CreateMemoryStream(pData, (size_t)dwLen, FALSE));
- int32_t offset = GetHeaderOffset(file.Get());
- if (offset == -1) {
- m_docStatus = PDF_DATAAVAIL_ERROR;
- return FALSE;
- }
- m_dwHeaderOffset = offset;
- m_syntaxParser.InitParser(file.Get(), offset);
- m_syntaxParser.RestorePos(m_syntaxParser.m_HeaderOffset + 9);
- FX_BOOL bNumber = FALSE;
- CFX_ByteString wordObjNum = m_syntaxParser.GetNextWord(bNumber);
- if (!bNumber) {
- return FALSE;
- }
- FX_DWORD objnum = FXSYS_atoi(wordObjNum);
- if (m_pLinearized) {
- m_pLinearized->Release();
- m_pLinearized = NULL;
+FX_BOOL CPDF_DataAvail::IsLinearizedFile(uint8_t* pData, FX_DWORD dwLen) {
+ CFX_SmartPointer<IFX_FileStream> file(
+ FX_CreateMemoryStream(pData, (size_t)dwLen, FALSE));
+ int32_t offset = GetHeaderOffset(file.Get());
+ if (offset == -1) {
+ m_docStatus = PDF_DATAAVAIL_ERROR;
+ return FALSE;
+ }
+ m_dwHeaderOffset = offset;
+ m_syntaxParser.InitParser(file.Get(), offset);
+ m_syntaxParser.RestorePos(m_syntaxParser.m_HeaderOffset + 9);
+ FX_BOOL bNumber = FALSE;
+ CFX_ByteString wordObjNum = m_syntaxParser.GetNextWord(bNumber);
+ if (!bNumber) {
+ return FALSE;
+ }
+ FX_DWORD objnum = FXSYS_atoi(wordObjNum);
+ if (m_pLinearized) {
+ m_pLinearized->Release();
+ m_pLinearized = NULL;
+ }
+ m_pLinearized =
+ ParseIndirectObjectAt(m_syntaxParser.m_HeaderOffset + 9, objnum);
+ if (!m_pLinearized) {
+ return FALSE;
+ }
+ if (m_pLinearized->GetDict() &&
+ m_pLinearized->GetDict()->GetElement(FX_BSTRC("Linearized"))) {
+ CPDF_Object* pLen = m_pLinearized->GetDict()->GetElement(FX_BSTRC("L"));
+ if (!pLen) {
+ return FALSE;
}
- m_pLinearized = ParseIndirectObjectAt(m_syntaxParser.m_HeaderOffset + 9, objnum);
- if (!m_pLinearized) {
- return FALSE;
+ if ((FX_FILESIZE)pLen->GetInteger() != m_pFileRead->GetSize()) {
+ return FALSE;
}
- if (m_pLinearized->GetDict() && m_pLinearized->GetDict()->GetElement(FX_BSTRC("Linearized"))) {
- CPDF_Object *pLen = m_pLinearized->GetDict()->GetElement(FX_BSTRC("L"));
- if (!pLen) {
- return FALSE;
- }
- if ((FX_FILESIZE)pLen->GetInteger() != m_pFileRead->GetSize()) {
- return FALSE;
- }
- m_bLinearized = TRUE;
- CPDF_Object *pNo = m_pLinearized->GetDict()->GetElement(FX_BSTRC("P"));
- if (pNo && pNo->GetType() == PDFOBJ_NUMBER) {
- m_dwFirstPageNo = pNo->GetInteger();
- }
- return TRUE;
+ m_bLinearized = TRUE;
+ CPDF_Object* pNo = m_pLinearized->GetDict()->GetElement(FX_BSTRC("P"));
+ if (pNo && pNo->GetType() == PDFOBJ_NUMBER) {
+ m_dwFirstPageNo = pNo->GetInteger();
}
- return FALSE;
+ return TRUE;
+ }
+ return FALSE;
}
-FX_BOOL CPDF_DataAvail::CheckEnd(IFX_DownloadHints* pHints)
-{
- FX_DWORD req_pos = (FX_DWORD)(m_dwFileLen > 1024 ? m_dwFileLen - 1024 : 0);
- FX_DWORD dwSize = (FX_DWORD)(m_dwFileLen - req_pos);
- if (m_pFileAvail->IsDataAvail(req_pos, dwSize)) {
- uint8_t buffer[1024];
- m_pFileRead->ReadBlock(buffer, req_pos, dwSize);
- CFX_SmartPointer<IFX_FileStream> file(FX_CreateMemoryStream(buffer, (size_t)dwSize, FALSE));
- m_syntaxParser.InitParser(file.Get(), 0);
- m_syntaxParser.RestorePos(dwSize - 1);
- if (m_syntaxParser.SearchWord(FX_BSTRC("startxref"), TRUE, FALSE, dwSize)) {
- FX_BOOL bNumber;
- m_syntaxParser.GetNextWord(bNumber);
- CFX_ByteString xrefpos_str = m_syntaxParser.GetNextWord(bNumber);
- if (!bNumber) {
- m_docStatus = PDF_DATAAVAIL_ERROR;
- return FALSE;
- }
- m_dwXRefOffset = (FX_FILESIZE)FXSYS_atoi64(xrefpos_str);
- if (!m_dwXRefOffset || m_dwXRefOffset > m_dwFileLen) {
- m_docStatus = PDF_DATAAVAIL_LOADALLFILE;
- return TRUE;
- }
- m_dwLastXRefOffset = m_dwXRefOffset;
- SetStartOffset(m_dwXRefOffset);
- m_docStatus = PDF_DATAAVAIL_CROSSREF;
- return TRUE;
- }
+FX_BOOL CPDF_DataAvail::CheckEnd(IFX_DownloadHints* pHints) {
+ FX_DWORD req_pos = (FX_DWORD)(m_dwFileLen > 1024 ? m_dwFileLen - 1024 : 0);
+ FX_DWORD dwSize = (FX_DWORD)(m_dwFileLen - req_pos);
+ if (m_pFileAvail->IsDataAvail(req_pos, dwSize)) {
+ uint8_t buffer[1024];
+ m_pFileRead->ReadBlock(buffer, req_pos, dwSize);
+ CFX_SmartPointer<IFX_FileStream> file(
+ FX_CreateMemoryStream(buffer, (size_t)dwSize, FALSE));
+ m_syntaxParser.InitParser(file.Get(), 0);
+ m_syntaxParser.RestorePos(dwSize - 1);
+ if (m_syntaxParser.SearchWord(FX_BSTRC("startxref"), TRUE, FALSE, dwSize)) {
+ FX_BOOL bNumber;
+ m_syntaxParser.GetNextWord(bNumber);
+ CFX_ByteString xrefpos_str = m_syntaxParser.GetNextWord(bNumber);
+ if (!bNumber) {
+ m_docStatus = PDF_DATAAVAIL_ERROR;
+ return FALSE;
+ }
+ m_dwXRefOffset = (FX_FILESIZE)FXSYS_atoi64(xrefpos_str);
+ if (!m_dwXRefOffset || m_dwXRefOffset > m_dwFileLen) {
m_docStatus = PDF_DATAAVAIL_LOADALLFILE;
return TRUE;
+ }
+ m_dwLastXRefOffset = m_dwXRefOffset;
+ SetStartOffset(m_dwXRefOffset);
+ m_docStatus = PDF_DATAAVAIL_CROSSREF;
+ return TRUE;
}
- pHints->AddSegment(req_pos, dwSize);
- return FALSE;
+ m_docStatus = PDF_DATAAVAIL_LOADALLFILE;
+ return TRUE;
+ }
+ pHints->AddSegment(req_pos, dwSize);
+ return FALSE;
}
-int32_t CPDF_DataAvail::CheckCrossRefStream(IFX_DownloadHints* pHints, FX_FILESIZE &xref_offset)
-{
- xref_offset = 0;
- FX_DWORD req_size = (FX_DWORD)(m_Pos + 512 > m_dwFileLen ? m_dwFileLen - m_Pos : 512);
- if (m_pFileAvail->IsDataAvail(m_Pos, req_size)) {
- int32_t iSize = (int32_t)(m_Pos + req_size - m_dwCurrentXRefSteam);
- CFX_BinaryBuf buf(iSize);
- uint8_t* pBuf = buf.GetBuffer();
- m_pFileRead->ReadBlock(pBuf, m_dwCurrentXRefSteam, iSize);
- CFX_SmartPointer<IFX_FileStream> file(FX_CreateMemoryStream(pBuf, (size_t)iSize, FALSE));
- m_parser.m_Syntax.InitParser(file.Get(), 0);
- FX_BOOL bNumber = FALSE;
- CFX_ByteString objnum = m_parser.m_Syntax.GetNextWord(bNumber);
- if (!bNumber) {
- return -1;
- }
- FX_DWORD objNum = FXSYS_atoi(objnum);
- CPDF_Object *pObj = m_parser.ParseIndirectObjectAt(NULL, 0, objNum, NULL);
- if (!pObj) {
- m_Pos += m_parser.m_Syntax.SavePos();
- return 0;
- }
- CPDF_Dictionary* pDict = pObj->GetDict();
- CPDF_Object *pName = pDict ? pDict->GetElement(FX_BSTRC("Type")) : NULL;
- if (pName && pName->GetType() == PDFOBJ_NAME) {
- if (pName->GetString() == FX_BSTRC("XRef")) {
- m_Pos += m_parser.m_Syntax.SavePos();
- xref_offset = pObj->GetDict()->GetInteger(FX_BSTRC("Prev"));
- pObj->Release();
- return 1;
- }
- }
+int32_t CPDF_DataAvail::CheckCrossRefStream(IFX_DownloadHints* pHints,
+ FX_FILESIZE& xref_offset) {
+ xref_offset = 0;
+ FX_DWORD req_size =
+ (FX_DWORD)(m_Pos + 512 > m_dwFileLen ? m_dwFileLen - m_Pos : 512);
+ if (m_pFileAvail->IsDataAvail(m_Pos, req_size)) {
+ int32_t iSize = (int32_t)(m_Pos + req_size - m_dwCurrentXRefSteam);
+ CFX_BinaryBuf buf(iSize);
+ uint8_t* pBuf = buf.GetBuffer();
+ m_pFileRead->ReadBlock(pBuf, m_dwCurrentXRefSteam, iSize);
+ CFX_SmartPointer<IFX_FileStream> file(
+ FX_CreateMemoryStream(pBuf, (size_t)iSize, FALSE));
+ m_parser.m_Syntax.InitParser(file.Get(), 0);
+ FX_BOOL bNumber = FALSE;
+ CFX_ByteString objnum = m_parser.m_Syntax.GetNextWord(bNumber);
+ if (!bNumber) {
+ return -1;
+ }
+ FX_DWORD objNum = FXSYS_atoi(objnum);
+ CPDF_Object* pObj = m_parser.ParseIndirectObjectAt(NULL, 0, objNum, NULL);
+ if (!pObj) {
+ m_Pos += m_parser.m_Syntax.SavePos();
+ return 0;
+ }
+ CPDF_Dictionary* pDict = pObj->GetDict();
+ CPDF_Object* pName = pDict ? pDict->GetElement(FX_BSTRC("Type")) : NULL;
+ if (pName && pName->GetType() == PDFOBJ_NAME) {
+ if (pName->GetString() == FX_BSTRC("XRef")) {
+ m_Pos += m_parser.m_Syntax.SavePos();
+ xref_offset = pObj->GetDict()->GetInteger(FX_BSTRC("Prev"));
pObj->Release();
- return -1;
+ return 1;
+ }
}
- pHints->AddSegment(m_Pos, req_size);
- return 0;
+ pObj->Release();
+ return -1;
+ }
+ pHints->AddSegment(m_Pos, req_size);
+ return 0;
}
-inline void CPDF_DataAvail::SetStartOffset(FX_FILESIZE dwOffset)
-{
- m_Pos = dwOffset;
+inline void CPDF_DataAvail::SetStartOffset(FX_FILESIZE dwOffset) {
+ m_Pos = dwOffset;
}
#define MAX_WORD_BUFFER 256
-FX_BOOL CPDF_DataAvail::GetNextToken(CFX_ByteString &token)
-{
- m_WordSize = 0;
- uint8_t ch;
- if (!GetNextChar(ch)) {
+FX_BOOL CPDF_DataAvail::GetNextToken(CFX_ByteString& token) {
+ m_WordSize = 0;
+ uint8_t ch;
+ if (!GetNextChar(ch)) {
+ return FALSE;
+ }
+ uint8_t type = PDF_CharType[ch];
+ while (1) {
+ while (type == 'W') {
+ if (!GetNextChar(ch)) {
return FALSE;
+ }
+ type = PDF_CharType[ch];
}
- uint8_t type = PDF_CharType[ch];
- while (1) {
- while (type == 'W') {
- if (!GetNextChar(ch)) {
- return FALSE;
- }
- type = PDF_CharType[ch];
- }
- if (ch != '%') {
- break;
- }
- while (1) {
- if (!GetNextChar(ch)) {
- return FALSE;
- }
- if (ch == '\r' || ch == '\n') {
- break;
- }
- }
- type = PDF_CharType[ch];
- }
- if (type == 'D') {
- m_WordBuffer[m_WordSize++] = ch;
- if (ch == '/') {
- while (1) {
- if (!GetNextChar(ch)) {
- return FALSE;
- }
- type = PDF_CharType[ch];
- if (type != 'R' && type != 'N') {
- m_Pos --;
- CFX_ByteString ret(m_WordBuffer, m_WordSize);
- token = ret;
- return TRUE;
- }
- if (m_WordSize < MAX_WORD_BUFFER) {
- m_WordBuffer[m_WordSize++] = ch;
- }
- }
- } else if (ch == '<') {
- if (!GetNextChar(ch)) {
- return FALSE;
- }
- if (ch == '<') {
- m_WordBuffer[m_WordSize++] = ch;
- } else {
- m_Pos --;
- }
- } else if (ch == '>') {
- if (!GetNextChar(ch)) {
- return FALSE;
- }
- if (ch == '>') {
- m_WordBuffer[m_WordSize++] = ch;
- } else {
- m_Pos --;
- }
- }
- CFX_ByteString ret(m_WordBuffer, m_WordSize);
- token = ret;
- return TRUE;
+ if (ch != '%') {
+ break;
}
while (1) {
- if (m_WordSize < MAX_WORD_BUFFER) {
- m_WordBuffer[m_WordSize++] = ch;
- }
+ if (!GetNextChar(ch)) {
+ return FALSE;
+ }
+ if (ch == '\r' || ch == '\n') {
+ break;
+ }
+ }
+ type = PDF_CharType[ch];
+ }
+ if (type == 'D') {
+ m_WordBuffer[m_WordSize++] = ch;
+ if (ch == '/') {
+ while (1) {
if (!GetNextChar(ch)) {
- return FALSE;
+ return FALSE;
}
type = PDF_CharType[ch];
- if (type == 'D' || type == 'W') {
- m_Pos --;
- break;
+ if (type != 'R' && type != 'N') {
+ m_Pos--;
+ CFX_ByteString ret(m_WordBuffer, m_WordSize);
+ token = ret;
+ return TRUE;
+ }
+ if (m_WordSize < MAX_WORD_BUFFER) {
+ m_WordBuffer[m_WordSize++] = ch;
}
+ }
+ } else if (ch == '<') {
+ if (!GetNextChar(ch)) {
+ return FALSE;
+ }
+ if (ch == '<') {
+ m_WordBuffer[m_WordSize++] = ch;
+ } else {
+ m_Pos--;
+ }
+ } else if (ch == '>') {
+ if (!GetNextChar(ch)) {
+ return FALSE;
+ }
+ if (ch == '>') {
+ m_WordBuffer[m_WordSize++] = ch;
+ } else {
+ m_Pos--;
+ }
}
CFX_ByteString ret(m_WordBuffer, m_WordSize);
token = ret;
return TRUE;
-}
-FX_BOOL CPDF_DataAvail::GetNextChar(uint8_t &ch)
-{
- FX_FILESIZE pos = m_Pos;
- if (pos >= m_dwFileLen) {
- return FALSE;
+ }
+ while (1) {
+ if (m_WordSize < MAX_WORD_BUFFER) {
+ m_WordBuffer[m_WordSize++] = ch;
}
- if (m_bufferOffset >= pos || (FX_FILESIZE)(m_bufferOffset + m_bufferSize) <= pos) {
- FX_FILESIZE read_pos = pos;
- FX_DWORD read_size = 512;
- if ((FX_FILESIZE)read_size > m_dwFileLen) {
- read_size = (FX_DWORD)m_dwFileLen;
- }
- if ((FX_FILESIZE)(read_pos + read_size) > m_dwFileLen) {
- read_pos = m_dwFileLen - read_size;
- }
- if (!m_pFileRead->ReadBlock(m_bufferData, read_pos, read_size)) {
- return FALSE;
- }
- m_bufferOffset = read_pos;
- m_bufferSize = read_size;
+ if (!GetNextChar(ch)) {
+ return FALSE;
}
- ch = m_bufferData[pos - m_bufferOffset];
- m_Pos ++;
- return TRUE;
-}
-FX_BOOL CPDF_DataAvail::CheckCrossRefItem(IFX_DownloadHints *pHints)
-{
- int32_t iSize = 0;
- CFX_ByteString token;
- while (1) {
- if (!GetNextToken(token)) {
- iSize = (int32_t)(m_Pos + 512 > m_dwFileLen ? m_dwFileLen - m_Pos : 512);
- pHints->AddSegment(m_Pos, iSize);
- return FALSE;
- }
- if (token == "trailer") {
- m_dwTrailerOffset = m_Pos;
- m_docStatus = PDF_DATAAVAIL_TRAILER;
- return TRUE;
- }
+ type = PDF_CharType[ch];
+ if (type == 'D' || type == 'W') {
+ m_Pos--;
+ break;
}
+ }
+ CFX_ByteString ret(m_WordBuffer, m_WordSize);
+ token = ret;
+ return TRUE;
}
-FX_BOOL CPDF_DataAvail::CheckAllCrossRefStream(IFX_DownloadHints *pHints)
-{
- FX_FILESIZE xref_offset = 0;
- int32_t nRet = CheckCrossRefStream(pHints, xref_offset);
- if (nRet == 1) {
- if (!xref_offset) {
- m_docStatus = PDF_DATAAVAIL_LOADALLCRSOSSREF;
- } else {
- m_dwCurrentXRefSteam = xref_offset;
- m_Pos = xref_offset;
- }
- return TRUE;
- }
- if (nRet == -1) {
- m_docStatus = PDF_DATAAVAIL_ERROR;
- }
+FX_BOOL CPDF_DataAvail::GetNextChar(uint8_t& ch) {
+ FX_FILESIZE pos = m_Pos;
+ if (pos >= m_dwFileLen) {
return FALSE;
+ }
+ if (m_bufferOffset >= pos ||
+ (FX_FILESIZE)(m_bufferOffset + m_bufferSize) <= pos) {
+ FX_FILESIZE read_pos = pos;
+ FX_DWORD read_size = 512;
+ if ((FX_FILESIZE)read_size > m_dwFileLen) {
+ read_size = (FX_DWORD)m_dwFileLen;
+ }
+ if ((FX_FILESIZE)(read_pos + read_size) > m_dwFileLen) {
+ read_pos = m_dwFileLen - read_size;
+ }
+ if (!m_pFileRead->ReadBlock(m_bufferData, read_pos, read_size)) {
+ return FALSE;
+ }
+ m_bufferOffset = read_pos;
+ m_bufferSize = read_size;
+ }
+ ch = m_bufferData[pos - m_bufferOffset];
+ m_Pos++;
+ return TRUE;
}
-FX_BOOL CPDF_DataAvail::CheckCrossRef(IFX_DownloadHints* pHints)
-{
- int32_t iSize = 0;
- CFX_ByteString token;
+FX_BOOL CPDF_DataAvail::CheckCrossRefItem(IFX_DownloadHints* pHints) {
+ int32_t iSize = 0;
+ CFX_ByteString token;
+ while (1) {
if (!GetNextToken(token)) {
- iSize = (int32_t)(m_Pos + 512 > m_dwFileLen ? m_dwFileLen - m_Pos : 512);
- pHints->AddSegment(m_Pos, iSize);
- return FALSE;
+ iSize = (int32_t)(m_Pos + 512 > m_dwFileLen ? m_dwFileLen - m_Pos : 512);
+ pHints->AddSegment(m_Pos, iSize);
+ return FALSE;
}
- if (token == "xref") {
- m_CrossOffset.InsertAt(0, m_dwXRefOffset);
- while (1) {
- if (!GetNextToken(token)) {
- iSize = (int32_t)(m_Pos + 512 > m_dwFileLen ? m_dwFileLen - m_Pos : 512);
- pHints->AddSegment(m_Pos, iSize);
- m_docStatus = PDF_DATAAVAIL_CROSSREF_ITEM;
- return FALSE;
- }
- if (token == "trailer") {
- m_dwTrailerOffset = m_Pos;
- m_docStatus = PDF_DATAAVAIL_TRAILER;
- return TRUE;
- }
- }
- } else {
- m_docStatus = PDF_DATAAVAIL_LOADALLFILE;
- return TRUE;
+ if (token == "trailer") {
+ m_dwTrailerOffset = m_Pos;
+ m_docStatus = PDF_DATAAVAIL_TRAILER;
+ return TRUE;
}
- return FALSE;
+ }
}
-FX_BOOL CPDF_DataAvail::CheckTrailerAppend(IFX_DownloadHints* pHints)
-{
- if (m_Pos < m_dwFileLen) {
- FX_FILESIZE dwAppendPos = m_Pos + m_syntaxParser.SavePos();
- int32_t iSize = (int32_t)(dwAppendPos + 512 > m_dwFileLen ? m_dwFileLen - dwAppendPos : 512);
- if (!m_pFileAvail->IsDataAvail(dwAppendPos, iSize)) {
- pHints->AddSegment(dwAppendPos, iSize);
- return FALSE;
- }
- }
- if (m_dwPrevXRefOffset) {
- SetStartOffset(m_dwPrevXRefOffset);
- m_docStatus = PDF_DATAAVAIL_CROSSREF;
+FX_BOOL CPDF_DataAvail::CheckAllCrossRefStream(IFX_DownloadHints* pHints) {
+ FX_FILESIZE xref_offset = 0;
+ int32_t nRet = CheckCrossRefStream(pHints, xref_offset);
+ if (nRet == 1) {
+ if (!xref_offset) {
+ m_docStatus = PDF_DATAAVAIL_LOADALLCRSOSSREF;
} else {
- m_docStatus = PDF_DATAAVAIL_LOADALLCRSOSSREF;
+ m_dwCurrentXRefSteam = xref_offset;
+ m_Pos = xref_offset;
}
return TRUE;
+ }
+ if (nRet == -1) {
+ m_docStatus = PDF_DATAAVAIL_ERROR;
+ }
+ return FALSE;
}
-FX_BOOL CPDF_DataAvail::CheckTrailer(IFX_DownloadHints* pHints)
-{
- int32_t iTrailerSize = (int32_t)(m_Pos + 512 > m_dwFileLen ? m_dwFileLen - m_Pos : 512);
- if (m_pFileAvail->IsDataAvail(m_Pos, iTrailerSize)) {
- int32_t iSize = (int32_t)(m_Pos + iTrailerSize - m_dwTrailerOffset);
- CFX_BinaryBuf buf(iSize);
- uint8_t* pBuf = buf.GetBuffer();
- if (!pBuf) {
- m_docStatus = PDF_DATAAVAIL_ERROR;
- return FALSE;
- }
- if (!m_pFileRead->ReadBlock(pBuf, m_dwTrailerOffset, iSize)) {
- return FALSE;
- }
- CFX_SmartPointer<IFX_FileStream> file(FX_CreateMemoryStream(pBuf, (size_t)iSize, FALSE));
- m_syntaxParser.InitParser(file.Get(), 0);
- CPDF_Object *pTrailer = m_syntaxParser.GetObject(NULL, 0, 0, 0);
- if (!pTrailer) {
- m_Pos += m_syntaxParser.SavePos();
- pHints->AddSegment(m_Pos, iTrailerSize);
- return FALSE;
- }
- if (pTrailer->GetType() != PDFOBJ_DICTIONARY) {
- return FALSE;
- }
- CPDF_Dictionary *pTrailerDict = pTrailer->GetDict();
- if (pTrailerDict) {
- CPDF_Object *pEncrypt = pTrailerDict->GetElement("Encrypt");
- if (pEncrypt && pEncrypt->GetType() == PDFOBJ_REFERENCE) {
- m_docStatus = PDF_DATAAVAIL_LOADALLFILE;
- pTrailer->Release();
- return TRUE;
- }
- }
- FX_DWORD xrefpos = GetDirectInteger(pTrailer->GetDict(), FX_BSTRC("Prev"));
- if (xrefpos) {
- m_dwPrevXRefOffset = GetDirectInteger(pTrailer->GetDict(), FX_BSTRC("XRefStm"));
- pTrailer->Release();
- if (m_dwPrevXRefOffset) {
- m_docStatus = PDF_DATAAVAIL_LOADALLFILE;
- } else {
- m_dwPrevXRefOffset = xrefpos;
- if (m_dwPrevXRefOffset >= m_dwFileLen) {
- m_docStatus = PDF_DATAAVAIL_LOADALLFILE;
- } else {
- SetStartOffset(m_dwPrevXRefOffset);
- m_docStatus = PDF_DATAAVAIL_TRAILER_APPEND;
- }
- }
- return TRUE;
- }
- m_dwPrevXRefOffset = 0;
- m_docStatus = PDF_DATAAVAIL_TRAILER_APPEND;
- pTrailer->Release();
+FX_BOOL CPDF_DataAvail::CheckCrossRef(IFX_DownloadHints* pHints) {
+ int32_t iSize = 0;
+ CFX_ByteString token;
+ if (!GetNextToken(token)) {
+ iSize = (int32_t)(m_Pos + 512 > m_dwFileLen ? m_dwFileLen - m_Pos : 512);
+ pHints->AddSegment(m_Pos, iSize);
+ return FALSE;
+ }
+ if (token == "xref") {
+ m_CrossOffset.InsertAt(0, m_dwXRefOffset);
+ while (1) {
+ if (!GetNextToken(token)) {
+ iSize =
+ (int32_t)(m_Pos + 512 > m_dwFileLen ? m_dwFileLen - m_Pos : 512);
+ pHints->AddSegment(m_Pos, iSize);
+ m_docStatus = PDF_DATAAVAIL_CROSSREF_ITEM;
+ return FALSE;
+ }
+ if (token == "trailer") {
+ m_dwTrailerOffset = m_Pos;
+ m_docStatus = PDF_DATAAVAIL_TRAILER;
return TRUE;
+ }
}
- pHints->AddSegment(m_Pos, iTrailerSize);
- return FALSE;
+ } else {
+ m_docStatus = PDF_DATAAVAIL_LOADALLFILE;
+ return TRUE;
+ }
+ return FALSE;
}
-FX_BOOL CPDF_DataAvail::CheckPage(int32_t iPage, IFX_DownloadHints* pHints)
-{
- while (TRUE) {
- switch (m_docStatus) {
- case PDF_DATAAVAIL_PAGETREE:
- if (!LoadDocPages(pHints)) {
- return FALSE;
- }
- break;
- case PDF_DATAAVAIL_PAGE:
- if (!LoadDocPage(iPage, pHints)) {
- return FALSE;
- }
- break;
- case PDF_DATAAVAIL_ERROR:
- return LoadAllFile(pHints);
- default:
- m_bPagesTreeLoad = TRUE;
- m_bPagesLoad = TRUE;
- m_bCurPageDictLoadOK = TRUE;
- m_docStatus = PDF_DATAAVAIL_PAGE;
- return TRUE;
- }
- }
+FX_BOOL CPDF_DataAvail::CheckTrailerAppend(IFX_DownloadHints* pHints) {
+ if (m_Pos < m_dwFileLen) {
+ FX_FILESIZE dwAppendPos = m_Pos + m_syntaxParser.SavePos();
+ int32_t iSize = (int32_t)(
+ dwAppendPos + 512 > m_dwFileLen ? m_dwFileLen - dwAppendPos : 512);
+ if (!m_pFileAvail->IsDataAvail(dwAppendPos, iSize)) {
+ pHints->AddSegment(dwAppendPos, iSize);
+ return FALSE;
+ }
+ }
+ if (m_dwPrevXRefOffset) {
+ SetStartOffset(m_dwPrevXRefOffset);
+ m_docStatus = PDF_DATAAVAIL_CROSSREF;
+ } else {
+ m_docStatus = PDF_DATAAVAIL_LOADALLCRSOSSREF;
+ }
+ return TRUE;
}
-FX_BOOL CPDF_DataAvail::CheckArrayPageNode(FX_DWORD dwPageNo, CPDF_PageNode *pPageNode, IFX_DownloadHints* pHints)
-{
- FX_BOOL bExist = FALSE;
- CPDF_Object *pPages = GetObject(dwPageNo, pHints, &bExist);
- if (!bExist) {
- m_docStatus = PDF_DATAAVAIL_ERROR;
- return FALSE;
- }
- if (!pPages) {
- if (m_docStatus == PDF_DATAAVAIL_ERROR) {
- m_docStatus = PDF_DATAAVAIL_ERROR;
- return FALSE;
- }
- return FALSE;
- }
- if (pPages->GetType() != PDFOBJ_ARRAY) {
- pPages->Release();
- m_docStatus = PDF_DATAAVAIL_ERROR;
- return FALSE;
- }
- pPageNode->m_type = PDF_PAGENODE_PAGES;
- CPDF_Array* pArray = (CPDF_Array*)pPages;
- for (FX_DWORD i = 0; i < pArray->GetCount(); ++i) {
- CPDF_Object *pKid = (CPDF_Object *)pArray->GetElement(i);
- if (!pKid || pKid->GetType() != PDFOBJ_REFERENCE) {
- continue;
+FX_BOOL CPDF_DataAvail::CheckTrailer(IFX_DownloadHints* pHints) {
+ int32_t iTrailerSize =
+ (int32_t)(m_Pos + 512 > m_dwFileLen ? m_dwFileLen - m_Pos : 512);
+ if (m_pFileAvail->IsDataAvail(m_Pos, iTrailerSize)) {
+ int32_t iSize = (int32_t)(m_Pos + iTrailerSize - m_dwTrailerOffset);
+ CFX_BinaryBuf buf(iSize);
+ uint8_t* pBuf = buf.GetBuffer();
+ if (!pBuf) {
+ m_docStatus = PDF_DATAAVAIL_ERROR;
+ return FALSE;
+ }
+ if (!m_pFileRead->ReadBlock(pBuf, m_dwTrailerOffset, iSize)) {
+ return FALSE;
+ }
+ CFX_SmartPointer<IFX_FileStream> file(
+ FX_CreateMemoryStream(pBuf, (size_t)iSize, FALSE));
+ m_syntaxParser.InitParser(file.Get(), 0);
+ CPDF_Object* pTrailer = m_syntaxParser.GetObject(NULL, 0, 0, 0);
+ if (!pTrailer) {
+ m_Pos += m_syntaxParser.SavePos();
+ pHints->AddSegment(m_Pos, iTrailerSize);
+ return FALSE;
+ }
+ if (pTrailer->GetType() != PDFOBJ_DICTIONARY) {
+ return FALSE;
+ }
+ CPDF_Dictionary* pTrailerDict = pTrailer->GetDict();
+ if (pTrailerDict) {
+ CPDF_Object* pEncrypt = pTrailerDict->GetElement("Encrypt");
+ if (pEncrypt && pEncrypt->GetType() == PDFOBJ_REFERENCE) {
+ m_docStatus = PDF_DATAAVAIL_LOADALLFILE;
+ pTrailer->Release();
+ return TRUE;
+ }
+ }
+ FX_DWORD xrefpos = GetDirectInteger(pTrailer->GetDict(), FX_BSTRC("Prev"));
+ if (xrefpos) {
+ m_dwPrevXRefOffset =
+ GetDirectInteger(pTrailer->GetDict(), FX_BSTRC("XRefStm"));
+ pTrailer->Release();
+ if (m_dwPrevXRefOffset) {
+ m_docStatus = PDF_DATAAVAIL_LOADALLFILE;
+ } else {
+ m_dwPrevXRefOffset = xrefpos;
+ if (m_dwPrevXRefOffset >= m_dwFileLen) {
+ m_docStatus = PDF_DATAAVAIL_LOADALLFILE;
+ } else {
+ SetStartOffset(m_dwPrevXRefOffset);
+ m_docStatus = PDF_DATAAVAIL_TRAILER_APPEND;
}
- CPDF_PageNode *pNode = new CPDF_PageNode();
- pPageNode->m_childNode.Add(pNode);
- pNode->m_dwPageNo = ((CPDF_Reference*)pKid)->GetRefObjNum();
+ }
+ return TRUE;
}
- pPages->Release();
+ m_dwPrevXRefOffset = 0;
+ m_docStatus = PDF_DATAAVAIL_TRAILER_APPEND;
+ pTrailer->Release();
return TRUE;
+ }
+ pHints->AddSegment(m_Pos, iTrailerSize);
+ return FALSE;
}
-FX_BOOL CPDF_DataAvail::CheckUnkownPageNode(FX_DWORD dwPageNo, CPDF_PageNode *pPageNode, IFX_DownloadHints* pHints)
-{
- FX_BOOL bExist = FALSE;
- CPDF_Object *pPage = GetObject(dwPageNo, pHints, &bExist);
- if (!bExist) {
- m_docStatus = PDF_DATAAVAIL_ERROR;
- return FALSE;
- }
- if (!pPage) {
- if (m_docStatus == PDF_DATAAVAIL_ERROR) {
- m_docStatus = PDF_DATAAVAIL_ERROR;
- return FALSE;
- }
- return FALSE;
- }
- if (pPage->GetType() == PDFOBJ_ARRAY) {
- pPageNode->m_dwPageNo = dwPageNo;
- pPageNode->m_type = PDF_PAGENODE_ARRAY;
- pPage->Release();
+FX_BOOL CPDF_DataAvail::CheckPage(int32_t iPage, IFX_DownloadHints* pHints) {
+ while (TRUE) {
+ switch (m_docStatus) {
+ case PDF_DATAAVAIL_PAGETREE:
+ if (!LoadDocPages(pHints)) {
+ return FALSE;
+ }
+ break;
+ case PDF_DATAAVAIL_PAGE:
+ if (!LoadDocPage(iPage, pHints)) {
+ return FALSE;
+ }
+ break;
+ case PDF_DATAAVAIL_ERROR:
+ return LoadAllFile(pHints);
+ default:
+ m_bPagesTreeLoad = TRUE;
+ m_bPagesLoad = TRUE;
+ m_bCurPageDictLoadOK = TRUE;
+ m_docStatus = PDF_DATAAVAIL_PAGE;
return TRUE;
}
- if (pPage->GetType() != PDFOBJ_DICTIONARY) {
- pPage->Release();
- m_docStatus = PDF_DATAAVAIL_ERROR;
- return FALSE;
+ }
+}
+FX_BOOL CPDF_DataAvail::CheckArrayPageNode(FX_DWORD dwPageNo,
+ CPDF_PageNode* pPageNode,
+ IFX_DownloadHints* pHints) {
+ FX_BOOL bExist = FALSE;
+ CPDF_Object* pPages = GetObject(dwPageNo, pHints, &bExist);
+ if (!bExist) {
+ m_docStatus = PDF_DATAAVAIL_ERROR;
+ return FALSE;
+ }
+ if (!pPages) {
+ if (m_docStatus == PDF_DATAAVAIL_ERROR) {
+ m_docStatus = PDF_DATAAVAIL_ERROR;
+ return FALSE;
}
- pPageNode->m_dwPageNo = dwPageNo;
- CPDF_Dictionary* pDict = pPage->GetDict();
- CFX_ByteString type = pDict ? pDict->GetString(FX_BSTRC("Type")) : CFX_ByteString();
- if (type == FX_BSTRC("Pages")) {
- pPageNode->m_type = PDF_PAGENODE_PAGES;
- CPDF_Object *pKids = pDict->GetElement(FX_BSTRC("Kids"));
- if (!pKids) {
- m_docStatus = PDF_DATAAVAIL_PAGE;
- return TRUE;
- }
- switch (pKids->GetType()) {
- case PDFOBJ_REFERENCE: {
- CPDF_Reference *pKid = (CPDF_Reference *)pKids;
- CPDF_PageNode *pNode = new CPDF_PageNode();
- pPageNode->m_childNode.Add(pNode);
- pNode->m_dwPageNo = pKid->GetRefObjNum();
- }
- break;
- case PDFOBJ_ARRAY: {
- CPDF_Array *pKidsArray = (CPDF_Array *)pKids;
- for (FX_DWORD i = 0; i < pKidsArray->GetCount(); ++i) {
- CPDF_Object *pKid = (CPDF_Object *)pKidsArray->GetElement(i);
- if (!pKid || pKid->GetType() != PDFOBJ_REFERENCE) {
- continue;
- }
- CPDF_PageNode *pNode = new CPDF_PageNode();
- pPageNode->m_childNode.Add(pNode);
- pNode->m_dwPageNo = ((CPDF_Reference*)pKid)->GetRefObjNum();
- }
- }
- break;
- default:
- break;
- }
- } else if (type == FX_BSTRC("Page")) {
- pPageNode->m_type = PDF_PAGENODE_PAGE;
- } else {
- pPage->Release();
- m_docStatus = PDF_DATAAVAIL_ERROR;
- return FALSE;
+ return FALSE;
+ }
+ if (pPages->GetType() != PDFOBJ_ARRAY) {
+ pPages->Release();
+ m_docStatus = PDF_DATAAVAIL_ERROR;
+ return FALSE;
+ }
+ pPageNode->m_type = PDF_PAGENODE_PAGES;
+ CPDF_Array* pArray = (CPDF_Array*)pPages;
+ for (FX_DWORD i = 0; i < pArray->GetCount(); ++i) {
+ CPDF_Object* pKid = (CPDF_Object*)pArray->GetElement(i);
+ if (!pKid || pKid->GetType() != PDFOBJ_REFERENCE) {
+ continue;
+ }
+ CPDF_PageNode* pNode = new CPDF_PageNode();
+ pPageNode->m_childNode.Add(pNode);
+ pNode->m_dwPageNo = ((CPDF_Reference*)pKid)->GetRefObjNum();
+ }
+ pPages->Release();
+ return TRUE;
+}
+FX_BOOL CPDF_DataAvail::CheckUnkownPageNode(FX_DWORD dwPageNo,
+ CPDF_PageNode* pPageNode,
+ IFX_DownloadHints* pHints) {
+ FX_BOOL bExist = FALSE;
+ CPDF_Object* pPage = GetObject(dwPageNo, pHints, &bExist);
+ if (!bExist) {
+ m_docStatus = PDF_DATAAVAIL_ERROR;
+ return FALSE;
+ }
+ if (!pPage) {
+ if (m_docStatus == PDF_DATAAVAIL_ERROR) {
+ m_docStatus = PDF_DATAAVAIL_ERROR;
+ return FALSE;
}
+ return FALSE;
+ }
+ if (pPage->GetType() == PDFOBJ_ARRAY) {
+ pPageNode->m_dwPageNo = dwPageNo;
+ pPageNode->m_type = PDF_PAGENODE_ARRAY;
pPage->Release();
return TRUE;
-}
-FX_BOOL CPDF_DataAvail::CheckPageNode(CPDF_PageNode &pageNodes, int32_t iPage, int32_t &iCount, IFX_DownloadHints* pHints)
-{
- int32_t iSize = pageNodes.m_childNode.GetSize();
- if (iSize <= 0 || iPage >= iSize) {
- m_docStatus = PDF_DATAAVAIL_ERROR;
- return FALSE;
+ }
+ if (pPage->GetType() != PDFOBJ_DICTIONARY) {
+ pPage->Release();
+ m_docStatus = PDF_DATAAVAIL_ERROR;
+ return FALSE;
+ }
+ pPageNode->m_dwPageNo = dwPageNo;
+ CPDF_Dictionary* pDict = pPage->GetDict();
+ CFX_ByteString type =
+ pDict ? pDict->GetString(FX_BSTRC("Type")) : CFX_ByteString();
+ if (type == FX_BSTRC("Pages")) {
+ pPageNode->m_type = PDF_PAGENODE_PAGES;
+ CPDF_Object* pKids = pDict->GetElement(FX_BSTRC("Kids"));
+ if (!pKids) {
+ m_docStatus = PDF_DATAAVAIL_PAGE;
+ return TRUE;
}
- for (int32_t i = 0; i < iSize; ++i) {
- CPDF_PageNode *pNode = (CPDF_PageNode*)pageNodes.m_childNode.GetAt(i);
- if (!pNode) {
+ switch (pKids->GetType()) {
+ case PDFOBJ_REFERENCE: {
+ CPDF_Reference* pKid = (CPDF_Reference*)pKids;
+ CPDF_PageNode* pNode = new CPDF_PageNode();
+ pPageNode->m_childNode.Add(pNode);
+ pNode->m_dwPageNo = pKid->GetRefObjNum();
+ } break;
+ case PDFOBJ_ARRAY: {
+ CPDF_Array* pKidsArray = (CPDF_Array*)pKids;
+ for (FX_DWORD i = 0; i < pKidsArray->GetCount(); ++i) {
+ CPDF_Object* pKid = (CPDF_Object*)pKidsArray->GetElement(i);
+ if (!pKid || pKid->GetType() != PDFOBJ_REFERENCE) {
continue;
- }
- switch (pNode->m_type) {
- case PDF_PAGENODE_UNKOWN:
- if (!CheckUnkownPageNode(pNode->m_dwPageNo, pNode, pHints)) {
- return FALSE;
- }
- --i;
- break;
- case PDF_PAGENODE_PAGE:
- iCount++;
- if (iPage == iCount && m_pDocument) {
- m_pDocument->m_PageList.SetAt(iPage, pNode->m_dwPageNo);
- }
- break;
- case PDF_PAGENODE_PAGES:
- if (!CheckPageNode(*pNode, iPage, iCount, pHints)) {
- return FALSE;
- }
- break;
- case PDF_PAGENODE_ARRAY:
- if (!CheckArrayPageNode(pNode->m_dwPageNo, pNode, pHints)) {
- return FALSE;
- }
- --i;
- break;
- }
- if (iPage == iCount) {
- m_docStatus = PDF_DATAAVAIL_DONE;
- return TRUE;
- }
- }
- return TRUE;
+ }
+ CPDF_PageNode* pNode = new CPDF_PageNode();
+ pPageNode->m_childNode.Add(pNode);
+ pNode->m_dwPageNo = ((CPDF_Reference*)pKid)->GetRefObjNum();
+ }
+ } break;
+ default:
+ break;
+ }
+ } else if (type == FX_BSTRC("Page")) {
+ pPageNode->m_type = PDF_PAGENODE_PAGE;
+ } else {
+ pPage->Release();
+ m_docStatus = PDF_DATAAVAIL_ERROR;
+ return FALSE;
+ }
+ pPage->Release();
+ return TRUE;
}
-FX_BOOL CPDF_DataAvail::LoadDocPage(int32_t iPage, IFX_DownloadHints* pHints)
-{
- if (m_pDocument->GetPageCount() <= iPage || m_pDocument->m_PageList.GetAt(iPage)) {
- m_docStatus = PDF_DATAAVAIL_DONE;
- return TRUE;
- }
- if (m_pageNodes.m_type == PDF_PAGENODE_PAGE) {
- if (iPage == 0) {
- m_docStatus = PDF_DATAAVAIL_DONE;
- return TRUE;
- }
- m_docStatus = PDF_DATAAVAIL_ERROR;
- return TRUE;
- }
- int32_t iCount = -1;
- return CheckPageNode(m_pageNodes, iPage, iCount, pHints);
+FX_BOOL CPDF_DataAvail::CheckPageNode(CPDF_PageNode& pageNodes,
+ int32_t iPage,
+ int32_t& iCount,
+ IFX_DownloadHints* pHints) {
+ int32_t iSize = pageNodes.m_childNode.GetSize();
+ if (iSize <= 0 || iPage >= iSize) {
+ m_docStatus = PDF_DATAAVAIL_ERROR;
+ return FALSE;
+ }
+ for (int32_t i = 0; i < iSize; ++i) {
+ CPDF_PageNode* pNode = (CPDF_PageNode*)pageNodes.m_childNode.GetAt(i);
+ if (!pNode) {
+ continue;
+ }
+ switch (pNode->m_type) {
+ case PDF_PAGENODE_UNKOWN:
+ if (!CheckUnkownPageNode(pNode->m_dwPageNo, pNode, pHints)) {
+ return FALSE;
+ }
+ --i;
+ break;
+ case PDF_PAGENODE_PAGE:
+ iCount++;
+ if (iPage == iCount && m_pDocument) {
+ m_pDocument->m_PageList.SetAt(iPage, pNode->m_dwPageNo);
+ }
+ break;
+ case PDF_PAGENODE_PAGES:
+ if (!CheckPageNode(*pNode, iPage, iCount, pHints)) {
+ return FALSE;
+ }
+ break;
+ case PDF_PAGENODE_ARRAY:
+ if (!CheckArrayPageNode(pNode->m_dwPageNo, pNode, pHints)) {
+ return FALSE;
+ }
+ --i;
+ break;
+ }
+ if (iPage == iCount) {
+ m_docStatus = PDF_DATAAVAIL_DONE;
+ return TRUE;
+ }
+ }
+ return TRUE;
}
-FX_BOOL CPDF_DataAvail::CheckPageCount(IFX_DownloadHints* pHints)
-{
- FX_BOOL bExist = FALSE;
- CPDF_Object *pPages = GetObject(m_PagesObjNum, pHints, &bExist);
- if (!bExist) {
- m_docStatus = PDF_DATAAVAIL_ERROR;
- return FALSE;
- }
- if (!pPages) {
- return FALSE;
- }
- CPDF_Dictionary* pPagesDict = pPages->GetDict();
- if (!pPagesDict) {
- pPages->Release();
- m_docStatus = PDF_DATAAVAIL_ERROR;
- return FALSE;
- }
- if (!pPagesDict->KeyExist(FX_BSTRC("Kids"))) {
- pPages->Release();
- return TRUE;
- }
- int count = pPagesDict->GetInteger(FX_BSTRC("Count"));
- if (count > 0) {
- pPages->Release();
- return TRUE;
+FX_BOOL CPDF_DataAvail::LoadDocPage(int32_t iPage, IFX_DownloadHints* pHints) {
+ if (m_pDocument->GetPageCount() <= iPage ||
+ m_pDocument->m_PageList.GetAt(iPage)) {
+ m_docStatus = PDF_DATAAVAIL_DONE;
+ return TRUE;
+ }
+ if (m_pageNodes.m_type == PDF_PAGENODE_PAGE) {
+ if (iPage == 0) {
+ m_docStatus = PDF_DATAAVAIL_DONE;
+ return TRUE;
}
+ m_docStatus = PDF_DATAAVAIL_ERROR;
+ return TRUE;
+ }
+ int32_t iCount = -1;
+ return CheckPageNode(m_pageNodes, iPage, iCount, pHints);
+}
+FX_BOOL CPDF_DataAvail::CheckPageCount(IFX_DownloadHints* pHints) {
+ FX_BOOL bExist = FALSE;
+ CPDF_Object* pPages = GetObject(m_PagesObjNum, pHints, &bExist);
+ if (!bExist) {
+ m_docStatus = PDF_DATAAVAIL_ERROR;
+ return FALSE;
+ }
+ if (!pPages) {
+ return FALSE;
+ }
+ CPDF_Dictionary* pPagesDict = pPages->GetDict();
+ if (!pPagesDict) {
pPages->Release();
+ m_docStatus = PDF_DATAAVAIL_ERROR;
return FALSE;
+ }
+ if (!pPagesDict->KeyExist(FX_BSTRC("Kids"))) {
+ pPages->Release();
+ return TRUE;
+ }
+ int count = pPagesDict->GetInteger(FX_BSTRC("Count"));
+ if (count > 0) {
+ pPages->Release();
+ return TRUE;
+ }
+ pPages->Release();
+ return FALSE;
}
-FX_BOOL CPDF_DataAvail::LoadDocPages(IFX_DownloadHints* pHints)
-{
- if (!CheckUnkownPageNode(m_PagesObjNum, &m_pageNodes, pHints)) {
- return FALSE;
- }
- if (CheckPageCount(pHints)) {
- m_docStatus = PDF_DATAAVAIL_PAGE;
- return TRUE;
- }
- m_bTotalLoadPageTree = TRUE;
+FX_BOOL CPDF_DataAvail::LoadDocPages(IFX_DownloadHints* pHints) {
+ if (!CheckUnkownPageNode(m_PagesObjNum, &m_pageNodes, pHints)) {
return FALSE;
+ }
+ if (CheckPageCount(pHints)) {
+ m_docStatus = PDF_DATAAVAIL_PAGE;
+ return TRUE;
+ }
+ m_bTotalLoadPageTree = TRUE;
+ return FALSE;
}
-FX_BOOL CPDF_DataAvail::LoadPages(IFX_DownloadHints* pHints)
-{
- while (!m_bPagesTreeLoad) {
- if (!CheckPageStatus(pHints)) {
- return FALSE;
- }
- }
- if (m_bPagesLoad) {
- return TRUE;
+FX_BOOL CPDF_DataAvail::LoadPages(IFX_DownloadHints* pHints) {
+ while (!m_bPagesTreeLoad) {
+ if (!CheckPageStatus(pHints)) {
+ return FALSE;
}
- m_pDocument->LoadPages();
- return FALSE;
+ }
+ if (m_bPagesLoad) {
+ return TRUE;
+ }
+ m_pDocument->LoadPages();
+ return FALSE;
}
-FX_BOOL CPDF_DataAvail::CheckLinearizedData(IFX_DownloadHints* pHints)
-{
- if (m_bLinearedDataOK) {
- return TRUE;
- }
+FX_BOOL CPDF_DataAvail::CheckLinearizedData(IFX_DownloadHints* pHints) {
+ if (m_bLinearedDataOK) {
+ return TRUE;
+ }
- if (!m_bMainXRefLoadTried) {
- FX_SAFE_DWORD data_size = m_dwFileLen;
- data_size -= m_dwLastXRefOffset;
- if (!data_size.IsValid()) {
- return FALSE;
- }
- if (!m_pFileAvail->IsDataAvail(m_dwLastXRefOffset, data_size.ValueOrDie())) {
- pHints->AddSegment(m_dwLastXRefOffset, data_size.ValueOrDie());
- return FALSE;
- }
- FX_DWORD dwRet = ((CPDF_Parser *)m_pDocument->GetParser())->LoadLinearizedMainXRefTable();
- m_bMainXRefLoadTried = TRUE;
- if (dwRet != PDFPARSE_ERROR_SUCCESS) {
- return FALSE;
- }
- if (!PreparePageItem()) {
- return FALSE;
- }
- m_bMainXRefLoadedOK = TRUE;
- m_bLinearedDataOK = TRUE;
+ if (!m_bMainXRefLoadTried) {
+ FX_SAFE_DWORD data_size = m_dwFileLen;
+ data_size -= m_dwLastXRefOffset;
+ if (!data_size.IsValid()) {
+ return FALSE;
+ }
+ if (!m_pFileAvail->IsDataAvail(m_dwLastXRefOffset,
+ data_size.ValueOrDie())) {
+ pHints->AddSegment(m_dwLastXRefOffset, data_size.ValueOrDie());
+ return FALSE;
+ }
+ FX_DWORD dwRet =
+ ((CPDF_Parser*)m_pDocument->GetParser())->LoadLinearizedMainXRefTable();
+ m_bMainXRefLoadTried = TRUE;
+ if (dwRet != PDFPARSE_ERROR_SUCCESS) {
+ return FALSE;
}
+ if (!PreparePageItem()) {
+ return FALSE;
+ }
+ m_bMainXRefLoadedOK = TRUE;
+ m_bLinearedDataOK = TRUE;
+ }
- return m_bLinearedDataOK;
+ return m_bLinearedDataOK;
}
-FX_BOOL CPDF_DataAvail::CheckPageAnnots(int32_t iPage, IFX_DownloadHints* pHints)
-{
- if (!m_objs_array.GetSize()) {
- m_objs_array.RemoveAll();
- m_objnum_array.RemoveAll();
- CPDF_Dictionary *pPageDict = m_pDocument->GetPage(iPage);
- if (!pPageDict) {
- return TRUE;
- }
- CPDF_Object *pAnnots = pPageDict->GetElement(FX_BSTRC("Annots"));
- if (!pAnnots) {
- return TRUE;
- }
- CFX_PtrArray obj_array;
- obj_array.Add(pAnnots);
- FX_BOOL bRet = IsObjectsAvail(obj_array, FALSE, pHints, m_objs_array);
- if (bRet) {
- m_objs_array.RemoveAll();
- }
- return bRet;
- }
- CFX_PtrArray new_objs_array;
- FX_BOOL bRet = IsObjectsAvail(m_objs_array, FALSE, pHints, new_objs_array);
+FX_BOOL CPDF_DataAvail::CheckPageAnnots(int32_t iPage,
+ IFX_DownloadHints* pHints) {
+ if (!m_objs_array.GetSize()) {
m_objs_array.RemoveAll();
- if (!bRet) {
- m_objs_array.Append(new_objs_array);
+ m_objnum_array.RemoveAll();
+ CPDF_Dictionary* pPageDict = m_pDocument->GetPage(iPage);
+ if (!pPageDict) {
+ return TRUE;
+ }
+ CPDF_Object* pAnnots = pPageDict->GetElement(FX_BSTRC("Annots"));
+ if (!pAnnots) {
+ return TRUE;
+ }
+ CFX_PtrArray obj_array;
+ obj_array.Add(pAnnots);
+ FX_BOOL bRet = IsObjectsAvail(obj_array, FALSE, pHints, m_objs_array);
+ if (bRet) {
+ m_objs_array.RemoveAll();
}
return bRet;
+ }
+ CFX_PtrArray new_objs_array;
+ FX_BOOL bRet = IsObjectsAvail(m_objs_array, FALSE, pHints, new_objs_array);
+ m_objs_array.RemoveAll();
+ if (!bRet) {
+ m_objs_array.Append(new_objs_array);
+ }
+ return bRet;
}
-FX_BOOL CPDF_DataAvail::CheckLinearizedFirstPage(int32_t iPage, IFX_DownloadHints* pHints)
-{
- if (!m_bAnnotsLoad) {
- if (!CheckPageAnnots(iPage, pHints)) {
- return FALSE;
- }
- m_bAnnotsLoad = TRUE;
- }
- if (m_bAnnotsLoad) {
- if (!CheckLinearizedData(pHints))
- return FALSE;
- }
- m_bPageLoadedOK = FALSE;
+FX_BOOL CPDF_DataAvail::CheckLinearizedFirstPage(int32_t iPage,
+ IFX_DownloadHints* pHints) {
+ if (!m_bAnnotsLoad) {
+ if (!CheckPageAnnots(iPage, pHints)) {
+ return FALSE;
+ }
+ m_bAnnotsLoad = TRUE;
+ }
+ if (m_bAnnotsLoad) {
+ if (!CheckLinearizedData(pHints))
+ return FALSE;
+ }
+ m_bPageLoadedOK = FALSE;
+ return TRUE;
+}
+FX_BOOL CPDF_DataAvail::HaveResourceAncestor(CPDF_Dictionary* pDict) {
+ CFX_AutoRestorer<int> restorer(&s_CurrentDataAvailRecursionDepth);
+ if (++s_CurrentDataAvailRecursionDepth > kMaxDataAvailRecursionDepth) {
+ return FALSE;
+ }
+ CPDF_Object* pParent = pDict->GetElement("Parent");
+ if (!pParent) {
+ return FALSE;
+ }
+ CPDF_Dictionary* pParentDict = pParent->GetDict();
+ if (!pParentDict) {
+ return FALSE;
+ }
+ CPDF_Object* pRet = pParentDict->GetElement("Resources");
+ if (pRet) {
+ m_pPageResource = pRet;
return TRUE;
+ }
+ return HaveResourceAncestor(pParentDict);
}
-FX_BOOL CPDF_DataAvail::HaveResourceAncestor(CPDF_Dictionary *pDict)
-{
- CFX_AutoRestorer<int> restorer(&s_CurrentDataAvailRecursionDepth);
- if (++s_CurrentDataAvailRecursionDepth > kMaxDataAvailRecursionDepth) {
- return FALSE;
+FX_BOOL CPDF_DataAvail::IsPageAvail(int32_t iPage, IFX_DownloadHints* pHints) {
+ if (!m_pDocument) {
+ return FALSE;
+ }
+ if (IsFirstCheck(iPage)) {
+ m_bCurPageDictLoadOK = FALSE;
+ m_bPageLoadedOK = FALSE;
+ m_bAnnotsLoad = FALSE;
+ m_bNeedDownLoadResource = FALSE;
+ m_objs_array.RemoveAll();
+ m_objnum_array.RemoveAll();
+ }
+ if (m_pagesLoadState == NULL) {
+ m_pagesLoadState = new CFX_CMapDWordToDWord();
+ }
+ FX_DWORD dwPageLoad = 0;
+ if (m_pagesLoadState->Lookup(iPage, dwPageLoad) && dwPageLoad != 0) {
+ return TRUE;
+ }
+ if (m_bLinearized) {
+ if ((FX_DWORD)iPage == m_dwFirstPageNo) {
+ m_pagesLoadState->SetAt(iPage, TRUE);
+ return TRUE;
}
- CPDF_Object *pParent = pDict->GetElement("Parent");
- if (!pParent) {
- return FALSE;
+ if (!CheckLinearizedData(pHints)) {
+ return FALSE;
}
- CPDF_Dictionary *pParentDict = pParent->GetDict();
- if (!pParentDict) {
+ if (m_bMainXRefLoadedOK) {
+ if (m_bTotalLoadPageTree) {
+ if (!LoadPages(pHints)) {
+ return FALSE;
+ }
+ } else {
+ if (!m_bCurPageDictLoadOK && !CheckPage(iPage, pHints)) {
+ return FALSE;
+ }
+ }
+ } else {
+ if (!LoadAllFile(pHints)) {
return FALSE;
- }
- CPDF_Object *pRet = pParentDict->GetElement("Resources");
- if (pRet) {
- m_pPageResource = pRet;
- return TRUE;
- }
- return HaveResourceAncestor(pParentDict);
-}
-FX_BOOL CPDF_DataAvail::IsPageAvail(int32_t iPage, IFX_DownloadHints* pHints)
-{
- if (!m_pDocument) {
+ }
+ ((CPDF_Parser*)m_pDocument->GetParser())->RebuildCrossRef();
+ ResetFirstCheck(iPage);
+ return TRUE;
+ }
+ } else {
+ if (!m_bTotalLoadPageTree) {
+ if (!m_bCurPageDictLoadOK && !CheckPage(iPage, pHints)) {
return FALSE;
+ }
}
- if (IsFirstCheck(iPage)) {
- m_bCurPageDictLoadOK = FALSE;
- m_bPageLoadedOK = FALSE;
- m_bAnnotsLoad = FALSE;
- m_bNeedDownLoadResource = FALSE;
- m_objs_array.RemoveAll();
- m_objnum_array.RemoveAll();
- }
- if (m_pagesLoadState == NULL) {
- m_pagesLoadState = new CFX_CMapDWordToDWord();
+ }
+ if (m_bHaveAcroForm && !m_bAcroFormLoad) {
+ if (!CheckAcroFormSubObject(pHints)) {
+ return FALSE;
}
- FX_DWORD dwPageLoad = 0;
- if (m_pagesLoadState->Lookup(iPage, dwPageLoad) && dwPageLoad != 0) {
+ m_bAcroFormLoad = TRUE;
+ }
+ if (!m_bPageLoadedOK) {
+ if (!m_objs_array.GetSize()) {
+ m_objs_array.RemoveAll();
+ m_objnum_array.RemoveAll();
+ m_pPageDict = m_pDocument->GetPage(iPage);
+ if (!m_pPageDict) {
+ ResetFirstCheck(iPage);
return TRUE;
- }
- if (m_bLinearized) {
- if ((FX_DWORD)iPage == m_dwFirstPageNo) {
- m_pagesLoadState->SetAt(iPage, TRUE);
- return TRUE;
- }
- if (!CheckLinearizedData(pHints)) {
- return FALSE;
- }
- if (m_bMainXRefLoadedOK) {
- if (m_bTotalLoadPageTree) {
- if (!LoadPages(pHints)) {
- return FALSE;
- }
- } else {
- if (!m_bCurPageDictLoadOK && !CheckPage(iPage, pHints)) {
- return FALSE;
- }
- }
- } else {
- if (!LoadAllFile(pHints)) {
- return FALSE;
- }
- ((CPDF_Parser *)m_pDocument->GetParser())->RebuildCrossRef();
- ResetFirstCheck(iPage);
- return TRUE;
- }
+ }
+ CFX_PtrArray obj_array;
+ obj_array.Add(m_pPageDict);
+ FX_BOOL bRet = IsObjectsAvail(obj_array, TRUE, pHints, m_objs_array);
+ if (bRet) {
+ m_objs_array.RemoveAll();
+ m_bPageLoadedOK = TRUE;
+ } else {
+ return bRet;
+ }
} else {
- if (!m_bTotalLoadPageTree) {
- if (!m_bCurPageDictLoadOK && !CheckPage(iPage, pHints)) {
- return FALSE;
- }
- }
- }
- if (m_bHaveAcroForm && !m_bAcroFormLoad) {
- if (!CheckAcroFormSubObject(pHints)) {
- return FALSE;
- }
- m_bAcroFormLoad = TRUE;
- }
- if (!m_bPageLoadedOK) {
- if (!m_objs_array.GetSize()) {
- m_objs_array.RemoveAll();
- m_objnum_array.RemoveAll();
- m_pPageDict = m_pDocument->GetPage(iPage);
- if (!m_pPageDict) {
- ResetFirstCheck(iPage);
- return TRUE;
- }
- CFX_PtrArray obj_array;
- obj_array.Add(m_pPageDict);
- FX_BOOL bRet = IsObjectsAvail(obj_array, TRUE, pHints, m_objs_array);
- if (bRet) {
- m_objs_array.RemoveAll();
- m_bPageLoadedOK = TRUE;
- } else {
- return bRet;
- }
- } else {
- CFX_PtrArray new_objs_array;
- FX_BOOL bRet = IsObjectsAvail(m_objs_array, FALSE, pHints, new_objs_array);
- m_objs_array.RemoveAll();
- if (bRet) {
- m_bPageLoadedOK = TRUE;
- } else {
- m_objs_array.Append(new_objs_array);
- return bRet;
- }
- }
- }
- if (m_bPageLoadedOK) {
- if (!m_bAnnotsLoad) {
- if (!CheckPageAnnots(iPage, pHints)) {
- return FALSE;
- }
- m_bAnnotsLoad = TRUE;
- }
+ CFX_PtrArray new_objs_array;
+ FX_BOOL bRet =
+ IsObjectsAvail(m_objs_array, FALSE, pHints, new_objs_array);
+ m_objs_array.RemoveAll();
+ if (bRet) {
+ m_bPageLoadedOK = TRUE;
+ } else {
+ m_objs_array.Append(new_objs_array);
+ return bRet;
+ }
}
- if (m_pPageDict && !m_bNeedDownLoadResource) {
- m_pPageResource = m_pPageDict->GetElement("Resources");
- if (!m_pPageResource) {
- m_bNeedDownLoadResource = HaveResourceAncestor(m_pPageDict);
- } else {
- m_bNeedDownLoadResource = TRUE;
- }
+ }
+ if (m_bPageLoadedOK) {
+ if (!m_bAnnotsLoad) {
+ if (!CheckPageAnnots(iPage, pHints)) {
+ return FALSE;
+ }
+ m_bAnnotsLoad = TRUE;
+ }
+ }
+ if (m_pPageDict && !m_bNeedDownLoadResource) {
+ m_pPageResource = m_pPageDict->GetElement("Resources");
+ if (!m_pPageResource) {
+ m_bNeedDownLoadResource = HaveResourceAncestor(m_pPageDict);
+ } else {
+ m_bNeedDownLoadResource = TRUE;
}
- if (m_bNeedDownLoadResource) {
- FX_BOOL bRet = CheckResources(pHints);
- if (!bRet) {
- return FALSE;
- }
- m_bNeedDownLoadResource = FALSE;
+ }
+ if (m_bNeedDownLoadResource) {
+ FX_BOOL bRet = CheckResources(pHints);
+ if (!bRet) {
+ return FALSE;
}
- m_bPageLoadedOK = FALSE;
- m_bAnnotsLoad = FALSE;
- m_bCurPageDictLoadOK = FALSE;
- ResetFirstCheck(iPage);
- m_pagesLoadState->SetAt(iPage, TRUE);
- return TRUE;
+ m_bNeedDownLoadResource = FALSE;
+ }
+ m_bPageLoadedOK = FALSE;
+ m_bAnnotsLoad = FALSE;
+ m_bCurPageDictLoadOK = FALSE;
+ ResetFirstCheck(iPage);
+ m_pagesLoadState->SetAt(iPage, TRUE);
+ return TRUE;
}
-FX_BOOL CPDF_DataAvail::CheckResources(IFX_DownloadHints* pHints)
-{
- if (!m_objs_array.GetSize()) {
- m_objs_array.RemoveAll();
- CFX_PtrArray obj_array;
- obj_array.Add(m_pPageResource);
- FX_BOOL bRet = IsObjectsAvail(obj_array, TRUE, pHints, m_objs_array);
- if (bRet) {
- m_objs_array.RemoveAll();
- }
- return bRet;
- }
- CFX_PtrArray new_objs_array;
- FX_BOOL bRet = IsObjectsAvail(m_objs_array, FALSE, pHints, new_objs_array);
+FX_BOOL CPDF_DataAvail::CheckResources(IFX_DownloadHints* pHints) {
+ if (!m_objs_array.GetSize()) {
m_objs_array.RemoveAll();
- if (!bRet) {
- m_objs_array.Append(new_objs_array);
+ CFX_PtrArray obj_array;
+ obj_array.Add(m_pPageResource);
+ FX_BOOL bRet = IsObjectsAvail(obj_array, TRUE, pHints, m_objs_array);
+ if (bRet) {
+ m_objs_array.RemoveAll();
}
return bRet;
+ }
+ CFX_PtrArray new_objs_array;
+ FX_BOOL bRet = IsObjectsAvail(m_objs_array, FALSE, pHints, new_objs_array);
+ m_objs_array.RemoveAll();
+ if (!bRet) {
+ m_objs_array.Append(new_objs_array);
+ }
+ return bRet;
}
-void CPDF_DataAvail::GetLinearizedMainXRefInfo(FX_FILESIZE *pPos, FX_DWORD *pSize)
-{
- if (pPos) {
- *pPos = m_dwLastXRefOffset;
- }
- if (pSize) {
- *pSize = (FX_DWORD)(m_dwFileLen - m_dwLastXRefOffset);
- }
+void CPDF_DataAvail::GetLinearizedMainXRefInfo(FX_FILESIZE* pPos,
+ FX_DWORD* pSize) {
+ if (pPos) {
+ *pPos = m_dwLastXRefOffset;
+ }
+ if (pSize) {
+ *pSize = (FX_DWORD)(m_dwFileLen - m_dwLastXRefOffset);
+ }
}
-int32_t CPDF_DataAvail::IsFormAvail(IFX_DownloadHints *pHints)
-{
- if (!m_pDocument) {
- return PDFFORM_AVAIL;
- }
- if (!m_bLinearizedFormParamLoad) {
- CPDF_Dictionary *pRoot = m_pDocument->GetRoot();
- if (!pRoot) {
- return PDFFORM_AVAIL;
- }
- CPDF_Object *pAcroForm = pRoot->GetElement(FX_BSTRC("AcroForm"));
- if (!pAcroForm) {
- return PDFFORM_NOTEXIST;
- }
- if (!CheckLinearizedData(pHints)) {
- return PDFFORM_NOTAVAIL;
- }
- if (!m_objs_array.GetSize()) {
- m_objs_array.Add(pAcroForm->GetDict());
- }
- m_bLinearizedFormParamLoad = TRUE;
+int32_t CPDF_DataAvail::IsFormAvail(IFX_DownloadHints* pHints) {
+ if (!m_pDocument) {
+ return PDFFORM_AVAIL;
+ }
+ if (!m_bLinearizedFormParamLoad) {
+ CPDF_Dictionary* pRoot = m_pDocument->GetRoot();
+ if (!pRoot) {
+ return PDFFORM_AVAIL;
}
- CFX_PtrArray new_objs_array;
- FX_BOOL bRet = IsObjectsAvail(m_objs_array, FALSE, pHints, new_objs_array);
- m_objs_array.RemoveAll();
- if (!bRet) {
- m_objs_array.Append(new_objs_array);
- return PDFFORM_NOTAVAIL;
+ CPDF_Object* pAcroForm = pRoot->GetElement(FX_BSTRC("AcroForm"));
+ if (!pAcroForm) {
+ return PDFFORM_NOTEXIST;
}
- return PDFFORM_AVAIL;
-}
-void CPDF_SortObjNumArray::AddObjNum(FX_DWORD dwObjNum)
-{
- int32_t iNext = 0;
- if (BinarySearch(dwObjNum, iNext)) {
- return;
+ if (!CheckLinearizedData(pHints)) {
+ return PDFFORM_NOTAVAIL;
}
- m_number_array.InsertAt(iNext, dwObjNum);
+ if (!m_objs_array.GetSize()) {
+ m_objs_array.Add(pAcroForm->GetDict());
+ }
+ m_bLinearizedFormParamLoad = TRUE;
+ }
+ CFX_PtrArray new_objs_array;
+ FX_BOOL bRet = IsObjectsAvail(m_objs_array, FALSE, pHints, new_objs_array);
+ m_objs_array.RemoveAll();
+ if (!bRet) {
+ m_objs_array.Append(new_objs_array);
+ return PDFFORM_NOTAVAIL;
+ }
+ return PDFFORM_AVAIL;
}
-FX_BOOL CPDF_SortObjNumArray::Find(FX_DWORD dwObjNum)
-{
- int32_t iNext = 0;
- return BinarySearch(dwObjNum, iNext);
+void CPDF_SortObjNumArray::AddObjNum(FX_DWORD dwObjNum) {
+ int32_t iNext = 0;
+ if (BinarySearch(dwObjNum, iNext)) {
+ return;
+ }
+ m_number_array.InsertAt(iNext, dwObjNum);
}
-FX_BOOL CPDF_SortObjNumArray::BinarySearch(FX_DWORD value, int32_t &iNext)
-{
- int32_t iLow = 0;
- int32_t iHigh = m_number_array.GetSize() - 1;
- while (iLow <= iHigh) {
- int32_t iMid = (iLow + iHigh) / 2;
- if (m_number_array.GetAt(iMid) == value) {
- iNext = iMid;
- return TRUE;
- }
- if (m_number_array.GetAt(iMid) > value) {
- iHigh = iMid - 1;
- } else if (m_number_array.GetAt(iMid) < value) {
- iLow = iMid + 1;
- }
- }
- iNext = iLow;
- return FALSE;
+FX_BOOL CPDF_SortObjNumArray::Find(FX_DWORD dwObjNum) {
+ int32_t iNext = 0;
+ return BinarySearch(dwObjNum, iNext);
}
-CPDF_PageNode::~CPDF_PageNode()
-{
- int32_t iSize = m_childNode.GetSize();
- for (int32_t i = 0; i < iSize; ++i) {
- CPDF_PageNode* pNode = (CPDF_PageNode*)m_childNode[i];
- delete pNode;
- }
- m_childNode.RemoveAll();
+FX_BOOL CPDF_SortObjNumArray::BinarySearch(FX_DWORD value, int32_t& iNext) {
+ int32_t iLow = 0;
+ int32_t iHigh = m_number_array.GetSize() - 1;
+ while (iLow <= iHigh) {
+ int32_t iMid = (iLow + iHigh) / 2;
+ if (m_number_array.GetAt(iMid) == value) {
+ iNext = iMid;
+ return TRUE;
+ }
+ if (m_number_array.GetAt(iMid) > value) {
+ iHigh = iMid - 1;
+ } else if (m_number_array.GetAt(iMid) < value) {
+ iLow = iMid + 1;
+ }
+ }
+ iNext = iLow;
+ return FALSE;
+}
+CPDF_PageNode::~CPDF_PageNode() {
+ int32_t iSize = m_childNode.GetSize();
+ for (int32_t i = 0; i < iSize; ++i) {
+ CPDF_PageNode* pNode = (CPDF_PageNode*)m_childNode[i];
+ delete pNode;
+ }
+ m_childNode.RemoveAll();
}
diff --git a/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser_embeddertest.cpp b/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser_embeddertest.cpp
index 882a915edd..96ea766d4d 100644
--- a/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser_embeddertest.cpp
+++ b/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser_embeddertest.cpp
@@ -5,8 +5,7 @@
#include "../../../testing/embedder_test.h"
#include "testing/gtest/include/gtest/gtest.h"
-class FPDFParserEmbeddertest : public EmbedderTest {
-};
+class FPDFParserEmbeddertest : public EmbedderTest {};
TEST_F(FPDFParserEmbeddertest, LoadError_454695) {
// Test trailer dictionary with $$ze instead of Size.
diff --git a/core/src/fpdfapi/fpdf_parser/fpdf_parser_utility.cpp b/core/src/fpdfapi/fpdf_parser/fpdf_parser_utility.cpp
index 4903312645..9e1434139c 100644
--- a/core/src/fpdfapi/fpdf_parser/fpdf_parser_utility.cpp
+++ b/core/src/fpdfapi/fpdf_parser/fpdf_parser_utility.cpp
@@ -6,475 +6,479 @@
#include "../../../include/fpdfapi/fpdf_parser.h"
const char PDF_CharType[256] = {
- //NUL SOH STX ETX EOT ENQ ACK BEL BS HT LF VT FF CR SO SI
- 'W', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'W', 'W', 'R', 'W', 'W', 'R', 'R',
+ // NUL SOH STX ETX EOT ENQ ACK BEL BS HT LF VT FF CR SO
+ // SI
+ 'W', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'W', 'W', 'R', 'W', 'W', 'R',
+ 'R',
- //DLE DC1 DC2 DC3 DC4 NAK SYN ETB CAN EM SUB ESC FS GS RS US
- 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R',
+ // DLE DC1 DC2 DC3 DC4 NAK SYN ETB CAN EM SUB ESC FS GS RS
+ // US
+ 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R',
+ 'R',
- //SP ! " # $ % & ´ ( ) * + , - . /
- 'W', 'R', 'R', 'R', 'R', 'D', 'R', 'R', 'D', 'D', 'R', 'N', 'R', 'N', 'N', 'D',
+ // SP ! " # $ % & ´ ( ) * + , - .
+ // /
+ 'W', 'R', 'R', 'R', 'R', 'D', 'R', 'R', 'D', 'D', 'R', 'N', 'R', 'N', 'N',
+ 'D',
- // 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
- 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'R', 'R', 'D', 'R', 'D', 'R',
+ // 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
+ 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'R', 'R', 'D', 'R', 'D',
+ 'R',
- // @ A B C D E F G H I J K L M N O
- 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R',
+ // @ A B C D E F G H I J K L M N O
+ 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R',
+ 'R',
- // P Q R S T U V W X Y Z [ \ ] ^ _
- 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'D', 'R', 'D', 'R', 'R',
+ // P Q R S T U V W X Y Z [ \ ] ^ _
+ 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'D', 'R', 'D', 'R',
+ 'R',
- // ` a b c d e f g h i j k l m n o
- 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R',
+ // ` a b c d e f g h i j k l m n o
+ 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R',
+ 'R',
- // p q r s t u v w x y z { | } ~ DEL
- 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'D', 'R', 'D', 'R', 'R',
+ // p q r s t u v w x y z { | } ~
+ // DEL
+ 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'D', 'R', 'D', 'R',
+ 'R',
- 'W', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R',
- 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R',
- 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R',
- 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R',
- 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R',
- 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R',
- 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R',
- 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'W'
-};
+ 'W', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R',
+ 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R',
+ 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R',
+ 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R',
+ 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R',
+ 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R',
+ 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R',
+ 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R',
+ 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'W'};
#ifndef MAX_PATH
#define MAX_PATH 4096
#endif
-CPDF_SimpleParser::CPDF_SimpleParser(const uint8_t* pData, FX_DWORD dwSize)
-{
- m_pData = pData;
- m_dwSize = dwSize;
- m_dwCurPos = 0;
+CPDF_SimpleParser::CPDF_SimpleParser(const uint8_t* pData, FX_DWORD dwSize) {
+ m_pData = pData;
+ m_dwSize = dwSize;
+ m_dwCurPos = 0;
}
-CPDF_SimpleParser::CPDF_SimpleParser(const CFX_ByteStringC& str)
-{
- m_pData = str.GetPtr();
- m_dwSize = str.GetLength();
- m_dwCurPos = 0;
+CPDF_SimpleParser::CPDF_SimpleParser(const CFX_ByteStringC& str) {
+ m_pData = str.GetPtr();
+ m_dwSize = str.GetLength();
+ m_dwCurPos = 0;
}
-void CPDF_SimpleParser::ParseWord(const uint8_t*& pStart, FX_DWORD& dwSize, int& type)
-{
- pStart = NULL;
- dwSize = 0;
- type = PDFWORD_EOF;
- uint8_t ch;
- char chartype;
+void CPDF_SimpleParser::ParseWord(const uint8_t*& pStart,
+ FX_DWORD& dwSize,
+ int& type) {
+ pStart = NULL;
+ dwSize = 0;
+ type = PDFWORD_EOF;
+ uint8_t ch;
+ char chartype;
+ while (1) {
+ if (m_dwSize <= m_dwCurPos) {
+ return;
+ }
+ ch = m_pData[m_dwCurPos++];
+ chartype = PDF_CharType[ch];
+ while (chartype == 'W') {
+ if (m_dwSize <= m_dwCurPos) {
+ return;
+ }
+ ch = m_pData[m_dwCurPos++];
+ chartype = PDF_CharType[ch];
+ }
+ if (ch != '%') {
+ break;
+ }
while (1) {
+ if (m_dwSize <= m_dwCurPos) {
+ return;
+ }
+ ch = m_pData[m_dwCurPos++];
+ if (ch == '\r' || ch == '\n') {
+ break;
+ }
+ }
+ chartype = PDF_CharType[ch];
+ }
+ FX_DWORD start_pos = m_dwCurPos - 1;
+ pStart = m_pData + start_pos;
+ if (chartype == 'D') {
+ if (ch == '/') {
+ while (1) {
if (m_dwSize <= m_dwCurPos) {
- return;
+ return;
}
ch = m_pData[m_dwCurPos++];
chartype = PDF_CharType[ch];
- while (chartype == 'W') {
- if (m_dwSize <= m_dwCurPos) {
- return;
- }
- ch = m_pData[m_dwCurPos++];
- chartype = PDF_CharType[ch];
- }
- if (ch != '%') {
- break;
+ if (chartype != 'R' && chartype != 'N') {
+ m_dwCurPos--;
+ dwSize = m_dwCurPos - start_pos;
+ type = PDFWORD_NAME;
+ return;
}
- while (1) {
- if (m_dwSize <= m_dwCurPos) {
- return;
- }
- ch = m_pData[m_dwCurPos++];
- if (ch == '\r' || ch == '\n') {
- break;
- }
+ }
+ } else {
+ type = PDFWORD_DELIMITER;
+ dwSize = 1;
+ if (ch == '<') {
+ if (m_dwSize <= m_dwCurPos) {
+ return;
}
- chartype = PDF_CharType[ch];
- }
- FX_DWORD start_pos = m_dwCurPos - 1;
- pStart = m_pData + start_pos;
- if (chartype == 'D') {
- if (ch == '/') {
- while (1) {
- if (m_dwSize <= m_dwCurPos) {
- return;
- }
- ch = m_pData[m_dwCurPos++];
- chartype = PDF_CharType[ch];
- if (chartype != 'R' && chartype != 'N') {
- m_dwCurPos --;
- dwSize = m_dwCurPos - start_pos;
- type = PDFWORD_NAME;
- return;
- }
- }
+ ch = m_pData[m_dwCurPos++];
+ if (ch == '<') {
+ dwSize = 2;
} else {
- type = PDFWORD_DELIMITER;
- dwSize = 1;
- if (ch == '<') {
- if (m_dwSize <= m_dwCurPos) {
- return;
- }
- ch = m_pData[m_dwCurPos++];
- if (ch == '<') {
- dwSize = 2;
- } else {
- m_dwCurPos --;
- }
- } else if (ch == '>') {
- if (m_dwSize <= m_dwCurPos) {
- return;
- }
- ch = m_pData[m_dwCurPos++];
- if (ch == '>') {
- dwSize = 2;
- } else {
- m_dwCurPos --;
- }
- }
- }
- return;
- }
- type = PDFWORD_NUMBER;
- dwSize = 1;
- while (1) {
- if (chartype != 'N') {
- type = PDFWORD_TEXT;
+ m_dwCurPos--;
}
+ } else if (ch == '>') {
if (m_dwSize <= m_dwCurPos) {
- return;
+ return;
}
ch = m_pData[m_dwCurPos++];
- chartype = PDF_CharType[ch];
- if (chartype == 'D' || chartype == 'W') {
- m_dwCurPos --;
- break;
+ if (ch == '>') {
+ dwSize = 2;
+ } else {
+ m_dwCurPos--;
}
- dwSize ++;
+ }
}
-}
-CFX_ByteStringC CPDF_SimpleParser::GetWord()
-{
- const uint8_t* pStart;
- FX_DWORD dwSize;
- int type;
- ParseWord(pStart, dwSize, type);
- if (dwSize == 1 && pStart[0] == '<') {
- while (m_dwCurPos < m_dwSize && m_pData[m_dwCurPos] != '>') {
- m_dwCurPos ++;
- }
- if (m_dwCurPos < m_dwSize) {
- m_dwCurPos ++;
- }
- return CFX_ByteStringC(pStart, (FX_STRSIZE)(m_dwCurPos - (pStart - m_pData)));
- }
- if (dwSize == 1 && pStart[0] == '(') {
- int level = 1;
- while (m_dwCurPos < m_dwSize) {
- if (m_pData[m_dwCurPos] == ')') {
- level --;
- if (level == 0) {
- break;
- }
- }
- if (m_pData[m_dwCurPos] == '\\') {
- if (m_dwSize <= m_dwCurPos) {
- break;
- }
- m_dwCurPos ++;
- } else if (m_pData[m_dwCurPos] == '(') {
- level ++;
- }
- if (m_dwSize <= m_dwCurPos) {
- break;
- }
- m_dwCurPos ++;
- }
- if (m_dwCurPos < m_dwSize) {
- m_dwCurPos ++;
- }
- return CFX_ByteStringC(pStart, (FX_STRSIZE)(m_dwCurPos - (pStart - m_pData)));
+ return;
+ }
+ type = PDFWORD_NUMBER;
+ dwSize = 1;
+ while (1) {
+ if (chartype != 'N') {
+ type = PDFWORD_TEXT;
}
- return CFX_ByteStringC(pStart, dwSize);
-}
-FX_BOOL CPDF_SimpleParser::SearchToken(const CFX_ByteStringC& token)
-{
- int token_len = token.GetLength();
- while (m_dwCurPos < m_dwSize - token_len) {
- if (FXSYS_memcmp(m_pData + m_dwCurPos, token.GetPtr(), token_len) == 0) {
- break;
- }
- m_dwCurPos ++;
+ if (m_dwSize <= m_dwCurPos) {
+ return;
}
- if (m_dwCurPos == m_dwSize - token_len) {
- return FALSE;
+ ch = m_pData[m_dwCurPos++];
+ chartype = PDF_CharType[ch];
+ if (chartype == 'D' || chartype == 'W') {
+ m_dwCurPos--;
+ break;
}
- m_dwCurPos += token_len;
- return TRUE;
+ dwSize++;
+ }
}
-FX_BOOL CPDF_SimpleParser::SkipWord(const CFX_ByteStringC& token)
-{
- while (1) {
- CFX_ByteStringC word = GetWord();
- if (word.IsEmpty()) {
- return FALSE;
+CFX_ByteStringC CPDF_SimpleParser::GetWord() {
+ const uint8_t* pStart;
+ FX_DWORD dwSize;
+ int type;
+ ParseWord(pStart, dwSize, type);
+ if (dwSize == 1 && pStart[0] == '<') {
+ while (m_dwCurPos < m_dwSize && m_pData[m_dwCurPos] != '>') {
+ m_dwCurPos++;
+ }
+ if (m_dwCurPos < m_dwSize) {
+ m_dwCurPos++;
+ }
+ return CFX_ByteStringC(pStart,
+ (FX_STRSIZE)(m_dwCurPos - (pStart - m_pData)));
+ }
+ if (dwSize == 1 && pStart[0] == '(') {
+ int level = 1;
+ while (m_dwCurPos < m_dwSize) {
+ if (m_pData[m_dwCurPos] == ')') {
+ level--;
+ if (level == 0) {
+ break;
}
- if (word == token) {
- return TRUE;
+ }
+ if (m_pData[m_dwCurPos] == '\\') {
+ if (m_dwSize <= m_dwCurPos) {
+ break;
}
+ m_dwCurPos++;
+ } else if (m_pData[m_dwCurPos] == '(') {
+ level++;
+ }
+ if (m_dwSize <= m_dwCurPos) {
+ break;
+ }
+ m_dwCurPos++;
+ }
+ if (m_dwCurPos < m_dwSize) {
+ m_dwCurPos++;
+ }
+ return CFX_ByteStringC(pStart,
+ (FX_STRSIZE)(m_dwCurPos - (pStart - m_pData)));
+ }
+ return CFX_ByteStringC(pStart, dwSize);
+}
+FX_BOOL CPDF_SimpleParser::SearchToken(const CFX_ByteStringC& token) {
+ int token_len = token.GetLength();
+ while (m_dwCurPos < m_dwSize - token_len) {
+ if (FXSYS_memcmp(m_pData + m_dwCurPos, token.GetPtr(), token_len) == 0) {
+ break;
}
+ m_dwCurPos++;
+ }
+ if (m_dwCurPos == m_dwSize - token_len) {
return FALSE;
+ }
+ m_dwCurPos += token_len;
+ return TRUE;
}
-FX_BOOL CPDF_SimpleParser::FindTagPair(const CFX_ByteStringC& start_token, const CFX_ByteStringC& end_token,
- FX_DWORD& start_pos, FX_DWORD& end_pos)
-{
- if (!start_token.IsEmpty()) {
- if (!SkipWord(start_token)) {
- return FALSE;
- }
- start_pos = m_dwCurPos;
+FX_BOOL CPDF_SimpleParser::SkipWord(const CFX_ByteStringC& token) {
+ while (1) {
+ CFX_ByteStringC word = GetWord();
+ if (word.IsEmpty()) {
+ return FALSE;
}
- while (1) {
- end_pos = m_dwCurPos;
- CFX_ByteStringC word = GetWord();
- if (word.IsEmpty()) {
- return FALSE;
- }
- if (word == end_token) {
- return TRUE;
- }
+ if (word == token) {
+ return TRUE;
}
- return FALSE;
+ }
+ return FALSE;
}
-FX_BOOL CPDF_SimpleParser::FindTagParam(const CFX_ByteStringC& token, int nParams)
-{
- nParams ++;
- FX_DWORD* pBuf = FX_Alloc(FX_DWORD, nParams);
- int buf_index = 0;
- int buf_count = 0;
- while (1) {
- pBuf[buf_index++] = m_dwCurPos;
- if (buf_index == nParams) {
- buf_index = 0;
- }
- buf_count ++;
- if (buf_count > nParams) {
- buf_count = nParams;
- }
- CFX_ByteStringC word = GetWord();
- if (word.IsEmpty()) {
- FX_Free(pBuf);
- return FALSE;
- }
- if (word == token) {
- if (buf_count < nParams) {
- continue;
- }
- m_dwCurPos = pBuf[buf_index];
- FX_Free(pBuf);
- return TRUE;
- }
+FX_BOOL CPDF_SimpleParser::FindTagPair(const CFX_ByteStringC& start_token,
+ const CFX_ByteStringC& end_token,
+ FX_DWORD& start_pos,
+ FX_DWORD& end_pos) {
+ if (!start_token.IsEmpty()) {
+ if (!SkipWord(start_token)) {
+ return FALSE;
}
- return FALSE;
+ start_pos = m_dwCurPos;
+ }
+ while (1) {
+ end_pos = m_dwCurPos;
+ CFX_ByteStringC word = GetWord();
+ if (word.IsEmpty()) {
+ return FALSE;
+ }
+ if (word == end_token) {
+ return TRUE;
+ }
+ }
+ return FALSE;
}
-static int _hex2dec(char ch)
-{
- if (ch >= '0' && ch <= '9') {
- return ch - '0';
+FX_BOOL CPDF_SimpleParser::FindTagParam(const CFX_ByteStringC& token,
+ int nParams) {
+ nParams++;
+ FX_DWORD* pBuf = FX_Alloc(FX_DWORD, nParams);
+ int buf_index = 0;
+ int buf_count = 0;
+ while (1) {
+ pBuf[buf_index++] = m_dwCurPos;
+ if (buf_index == nParams) {
+ buf_index = 0;
}
- if (ch >= 'a' && ch <= 'f') {
- return ch - 'a' + 10;
+ buf_count++;
+ if (buf_count > nParams) {
+ buf_count = nParams;
}
- if (ch >= 'A' && ch <= 'F') {
- return ch - 'A' + 10;
+ CFX_ByteStringC word = GetWord();
+ if (word.IsEmpty()) {
+ FX_Free(pBuf);
+ return FALSE;
}
- return 0;
+ if (word == token) {
+ if (buf_count < nParams) {
+ continue;
+ }
+ m_dwCurPos = pBuf[buf_index];
+ FX_Free(pBuf);
+ return TRUE;
+ }
+ }
+ return FALSE;
}
-CFX_ByteString PDF_NameDecode(const CFX_ByteStringC& bstr)
-{
- int size = bstr.GetLength();
- const FX_CHAR* pSrc = bstr.GetCStr();
- if (FXSYS_memchr(pSrc, '#', size) == NULL) {
- return bstr;
- }
- CFX_ByteString result;
- FX_CHAR* pDestStart = result.GetBuffer(size);
- FX_CHAR* pDest = pDestStart;
- for (int i = 0; i < size; i ++) {
- if (pSrc[i] == '#' && i < size - 2) {
- *pDest ++ = _hex2dec(pSrc[i + 1]) * 16 + _hex2dec(pSrc[i + 2]);
- i += 2;
- } else {
- *pDest ++ = pSrc[i];
- }
+static int _hex2dec(char ch) {
+ if (ch >= '0' && ch <= '9') {
+ return ch - '0';
+ }
+ if (ch >= 'a' && ch <= 'f') {
+ return ch - 'a' + 10;
+ }
+ if (ch >= 'A' && ch <= 'F') {
+ return ch - 'A' + 10;
+ }
+ return 0;
+}
+CFX_ByteString PDF_NameDecode(const CFX_ByteStringC& bstr) {
+ int size = bstr.GetLength();
+ const FX_CHAR* pSrc = bstr.GetCStr();
+ if (FXSYS_memchr(pSrc, '#', size) == NULL) {
+ return bstr;
+ }
+ CFX_ByteString result;
+ FX_CHAR* pDestStart = result.GetBuffer(size);
+ FX_CHAR* pDest = pDestStart;
+ for (int i = 0; i < size; i++) {
+ if (pSrc[i] == '#' && i < size - 2) {
+ *pDest++ = _hex2dec(pSrc[i + 1]) * 16 + _hex2dec(pSrc[i + 2]);
+ i += 2;
+ } else {
+ *pDest++ = pSrc[i];
}
- result.ReleaseBuffer((FX_STRSIZE)(pDest - pDestStart));
- return result;
+ }
+ result.ReleaseBuffer((FX_STRSIZE)(pDest - pDestStart));
+ return result;
}
-CFX_ByteString PDF_NameDecode(const CFX_ByteString& orig)
-{
- if (FXSYS_memchr(orig.c_str(), '#', orig.GetLength()) == NULL) {
- return orig;
+CFX_ByteString PDF_NameDecode(const CFX_ByteString& orig) {
+ if (FXSYS_memchr(orig.c_str(), '#', orig.GetLength()) == NULL) {
+ return orig;
+ }
+ return PDF_NameDecode(CFX_ByteStringC(orig));
+}
+CFX_ByteString PDF_NameEncode(const CFX_ByteString& orig) {
+ uint8_t* src_buf = (uint8_t*)orig.c_str();
+ int src_len = orig.GetLength();
+ int dest_len = 0;
+ int i;
+ for (i = 0; i < src_len; i++) {
+ uint8_t ch = src_buf[i];
+ if (ch >= 0x80 || PDF_CharType[ch] == 'W' || ch == '#' ||
+ PDF_CharType[ch] == 'D') {
+ dest_len += 3;
+ } else {
+ dest_len++;
+ }
+ }
+ if (dest_len == src_len) {
+ return orig;
+ }
+ CFX_ByteString res;
+ FX_CHAR* dest_buf = res.GetBuffer(dest_len);
+ dest_len = 0;
+ for (i = 0; i < src_len; i++) {
+ uint8_t ch = src_buf[i];
+ if (ch >= 0x80 || PDF_CharType[ch] == 'W' || ch == '#' ||
+ PDF_CharType[ch] == 'D') {
+ dest_buf[dest_len++] = '#';
+ dest_buf[dest_len++] = "0123456789ABCDEF"[ch / 16];
+ dest_buf[dest_len++] = "0123456789ABCDEF"[ch % 16];
+ } else {
+ dest_buf[dest_len++] = ch;
}
- return PDF_NameDecode(CFX_ByteStringC(orig));
+ }
+ dest_buf[dest_len] = 0;
+ res.ReleaseBuffer();
+ return res;
}
-CFX_ByteString PDF_NameEncode(const CFX_ByteString& orig)
-{
- uint8_t* src_buf = (uint8_t*)orig.c_str();
- int src_len = orig.GetLength();
- int dest_len = 0;
- int i;
- for (i = 0; i < src_len; i ++) {
- uint8_t ch = src_buf[i];
- if (ch >= 0x80 || PDF_CharType[ch] == 'W' || ch == '#' ||
- PDF_CharType[ch] == 'D') {
- dest_len += 3;
+CFX_ByteTextBuf& operator<<(CFX_ByteTextBuf& buf, const CPDF_Object* pObj) {
+ if (pObj == NULL) {
+ buf << FX_BSTRC(" null");
+ return buf;
+ }
+ switch (pObj->GetType()) {
+ case PDFOBJ_NULL:
+ buf << FX_BSTRC(" null");
+ break;
+ case PDFOBJ_BOOLEAN:
+ case PDFOBJ_NUMBER:
+ buf << " " << pObj->GetString();
+ break;
+ case PDFOBJ_STRING: {
+ CFX_ByteString str = pObj->GetString();
+ FX_BOOL bHex = ((CPDF_String*)pObj)->IsHex();
+ buf << PDF_EncodeString(str, bHex);
+ break;
+ }
+ case PDFOBJ_NAME: {
+ CFX_ByteString str = pObj->GetString();
+ buf << FX_BSTRC("/") << PDF_NameEncode(str);
+ break;
+ }
+ case PDFOBJ_REFERENCE: {
+ CPDF_Reference* p = (CPDF_Reference*)pObj;
+ buf << " " << p->GetRefObjNum() << FX_BSTRC(" 0 R ");
+ break;
+ }
+ case PDFOBJ_ARRAY: {
+ CPDF_Array* p = (CPDF_Array*)pObj;
+ buf << FX_BSTRC("[");
+ for (FX_DWORD i = 0; i < p->GetCount(); i++) {
+ CPDF_Object* pElement = p->GetElement(i);
+ if (pElement->GetObjNum()) {
+ buf << " " << pElement->GetObjNum() << FX_BSTRC(" 0 R");
} else {
- dest_len ++;
+ buf << pElement;
}
+ }
+ buf << FX_BSTRC("]");
+ break;
}
- if (dest_len == src_len) {
- return orig;
- }
- CFX_ByteString res;
- FX_CHAR* dest_buf = res.GetBuffer(dest_len);
- dest_len = 0;
- for (i = 0; i < src_len; i ++) {
- uint8_t ch = src_buf[i];
- if (ch >= 0x80 || PDF_CharType[ch] == 'W' || ch == '#' ||
- PDF_CharType[ch] == 'D') {
- dest_buf[dest_len++] = '#';
- dest_buf[dest_len++] = "0123456789ABCDEF"[ch / 16];
- dest_buf[dest_len++] = "0123456789ABCDEF"[ch % 16];
+ case PDFOBJ_DICTIONARY: {
+ CPDF_Dictionary* p = (CPDF_Dictionary*)pObj;
+ buf << FX_BSTRC("<<");
+ FX_POSITION pos = p->GetStartPos();
+ while (pos) {
+ CFX_ByteString key;
+ CPDF_Object* pValue = p->GetNextElement(pos, key);
+ buf << FX_BSTRC("/") << PDF_NameEncode(key);
+ if (pValue->GetObjNum()) {
+ buf << " " << pValue->GetObjNum() << FX_BSTRC(" 0 R ");
} else {
- dest_buf[dest_len++] = ch;
+ buf << pValue;
}
+ }
+ buf << FX_BSTRC(">>");
+ break;
}
- dest_buf[dest_len] = 0;
- res.ReleaseBuffer();
- return res;
-}
-CFX_ByteTextBuf& operator << (CFX_ByteTextBuf& buf, const CPDF_Object* pObj)
-{
- if (pObj == NULL) {
- buf << FX_BSTRC(" null");
- return buf;
- }
- switch (pObj->GetType()) {
- case PDFOBJ_NULL:
- buf << FX_BSTRC(" null");
- break;
- case PDFOBJ_BOOLEAN:
- case PDFOBJ_NUMBER:
- buf << " " << pObj->GetString();
- break;
- case PDFOBJ_STRING: {
- CFX_ByteString str = pObj->GetString();
- FX_BOOL bHex = ((CPDF_String*)pObj)->IsHex();
- buf << PDF_EncodeString(str, bHex);
- break;
- }
- case PDFOBJ_NAME: {
- CFX_ByteString str = pObj->GetString();
- buf << FX_BSTRC("/") << PDF_NameEncode(str);
- break;
- }
- case PDFOBJ_REFERENCE: {
- CPDF_Reference* p = (CPDF_Reference*)pObj;
- buf << " " << p->GetRefObjNum() << FX_BSTRC(" 0 R ");
- break;
- }
- case PDFOBJ_ARRAY: {
- CPDF_Array* p = (CPDF_Array*)pObj;
- buf << FX_BSTRC("[");
- for (FX_DWORD i = 0; i < p->GetCount(); i ++) {
- CPDF_Object* pElement = p->GetElement(i);
- if (pElement->GetObjNum()) {
- buf << " " << pElement->GetObjNum() << FX_BSTRC(" 0 R");
- } else {
- buf << pElement;
- }
- }
- buf << FX_BSTRC("]");
- break;
- }
- case PDFOBJ_DICTIONARY: {
- CPDF_Dictionary* p = (CPDF_Dictionary*)pObj;
- buf << FX_BSTRC("<<");
- FX_POSITION pos = p->GetStartPos();
- while (pos) {
- CFX_ByteString key;
- CPDF_Object* pValue = p->GetNextElement(pos, key);
- buf << FX_BSTRC("/") << PDF_NameEncode(key);
- if (pValue->GetObjNum()) {
- buf << " " << pValue->GetObjNum() << FX_BSTRC(" 0 R ");
- } else {
- buf << pValue;
- }
- }
- buf << FX_BSTRC(">>");
- break;
- }
- case PDFOBJ_STREAM: {
- CPDF_Stream* p = (CPDF_Stream*)pObj;
- buf << p->GetDict() << FX_BSTRC("stream\r\n");
- CPDF_StreamAcc acc;
- acc.LoadAllData(p, TRUE);
- buf.AppendBlock(acc.GetData(), acc.GetSize());
- buf << FX_BSTRC("\r\nendstream");
- break;
- }
- default:
- ASSERT(FALSE);
- break;
+ case PDFOBJ_STREAM: {
+ CPDF_Stream* p = (CPDF_Stream*)pObj;
+ buf << p->GetDict() << FX_BSTRC("stream\r\n");
+ CPDF_StreamAcc acc;
+ acc.LoadAllData(p, TRUE);
+ buf.AppendBlock(acc.GetData(), acc.GetSize());
+ buf << FX_BSTRC("\r\nendstream");
+ break;
}
- return buf;
+ default:
+ ASSERT(FALSE);
+ break;
+ }
+ return buf;
}
-FX_FLOAT PDF_ClipFloat(FX_FLOAT f)
-{
- if (f < 0) {
- return 0;
- }
- if (f > 1.0f) {
- return 1.0f;
- }
- return f;
+FX_FLOAT PDF_ClipFloat(FX_FLOAT f) {
+ if (f < 0) {
+ return 0;
+ }
+ if (f > 1.0f) {
+ return 1.0f;
+ }
+ return f;
}
-static CPDF_Object* SearchNumberNode(CPDF_Dictionary* pNode, int num)
-{
- CPDF_Array* pLimits = pNode->GetArray("Limits");
- if (pLimits && (num < pLimits->GetInteger(0) || num > pLimits->GetInteger(1))) {
- return NULL;
- }
- CPDF_Array* pNumbers = pNode->GetArray("Nums");
- if (pNumbers) {
- FX_DWORD dwCount = pNumbers->GetCount() / 2;
- for (FX_DWORD i = 0; i < dwCount; i ++) {
- int index = pNumbers->GetInteger(i * 2);
- if (num == index) {
- return pNumbers->GetElementValue(i * 2 + 1);
- }
- if (index > num) {
- break;
- }
- }
- return NULL;
+static CPDF_Object* SearchNumberNode(CPDF_Dictionary* pNode, int num) {
+ CPDF_Array* pLimits = pNode->GetArray("Limits");
+ if (pLimits &&
+ (num < pLimits->GetInteger(0) || num > pLimits->GetInteger(1))) {
+ return NULL;
+ }
+ CPDF_Array* pNumbers = pNode->GetArray("Nums");
+ if (pNumbers) {
+ FX_DWORD dwCount = pNumbers->GetCount() / 2;
+ for (FX_DWORD i = 0; i < dwCount; i++) {
+ int index = pNumbers->GetInteger(i * 2);
+ if (num == index) {
+ return pNumbers->GetElementValue(i * 2 + 1);
+ }
+ if (index > num) {
+ break;
+ }
}
- CPDF_Array* pKids = pNode->GetArray("Kids");
- if (pKids == NULL) {
- return NULL;
+ return NULL;
+ }
+ CPDF_Array* pKids = pNode->GetArray("Kids");
+ if (pKids == NULL) {
+ return NULL;
+ }
+ for (FX_DWORD i = 0; i < pKids->GetCount(); i++) {
+ CPDF_Dictionary* pKid = pKids->GetDict(i);
+ if (pKid == NULL) {
+ continue;
}
- for (FX_DWORD i = 0; i < pKids->GetCount(); i ++) {
- CPDF_Dictionary* pKid = pKids->GetDict(i);
- if (pKid == NULL) {
- continue;
- }
- CPDF_Object* pFound = SearchNumberNode(pKid, num);
- if (pFound) {
- return pFound;
- }
+ CPDF_Object* pFound = SearchNumberNode(pKid, num);
+ if (pFound) {
+ return pFound;
}
- return NULL;
+ }
+ return NULL;
}
-CPDF_Object* CPDF_NumberTree::LookupValue(int num)
-{
- return SearchNumberNode(m_pRoot, num);
+CPDF_Object* CPDF_NumberTree::LookupValue(int num) {
+ return SearchNumberNode(m_pRoot, num);
}
diff --git a/core/src/fpdfapi/fpdf_render/fpdf_render.cpp b/core/src/fpdfapi/fpdf_render/fpdf_render.cpp
index f8b59913e4..1132d8acea 100644
--- a/core/src/fpdfapi/fpdf_render/fpdf_render.cpp
+++ b/core/src/fpdfapi/fpdf_render/fpdf_render.cpp
@@ -11,1381 +11,1437 @@
#include "render_int.h"
CPDF_DocRenderData::CPDF_DocRenderData(CPDF_Document* pPDFDoc)
- : m_pPDFDoc(pPDFDoc),
- m_pFontCache(new CFX_FontCache)
-{
-}
+ : m_pPDFDoc(pPDFDoc), m_pFontCache(new CFX_FontCache) {}
-CPDF_DocRenderData::~CPDF_DocRenderData()
-{
- Clear(TRUE);
+CPDF_DocRenderData::~CPDF_DocRenderData() {
+ Clear(TRUE);
}
-void CPDF_DocRenderData::Clear(FX_BOOL bRelease)
-{
- for (auto it = m_Type3FaceMap.begin(); it != m_Type3FaceMap.end();) {
- auto curr_it = it++;
- CPDF_CountedObject<CPDF_Type3Cache>* cache = curr_it->second;
- if (bRelease || cache->use_count() < 2) {
- delete cache->get();
- delete cache;
- m_Type3FaceMap.erase(curr_it);
- }
- }
+void CPDF_DocRenderData::Clear(FX_BOOL bRelease) {
+ for (auto it = m_Type3FaceMap.begin(); it != m_Type3FaceMap.end();) {
+ auto curr_it = it++;
+ CPDF_CountedObject<CPDF_Type3Cache>* cache = curr_it->second;
+ if (bRelease || cache->use_count() < 2) {
+ delete cache->get();
+ delete cache;
+ m_Type3FaceMap.erase(curr_it);
+ }
+ }
- for (auto it = m_TransferFuncMap.begin(); it != m_TransferFuncMap.end();) {
- auto curr_it = it++;
- CPDF_CountedObject<CPDF_TransferFunc>* value = curr_it->second;
- if (bRelease || value->use_count() < 2) {
- delete value->get();
- delete value;
- m_TransferFuncMap.erase(curr_it);
- }
- }
+ for (auto it = m_TransferFuncMap.begin(); it != m_TransferFuncMap.end();) {
+ auto curr_it = it++;
+ CPDF_CountedObject<CPDF_TransferFunc>* value = curr_it->second;
+ if (bRelease || value->use_count() < 2) {
+ delete value->get();
+ delete value;
+ m_TransferFuncMap.erase(curr_it);
+ }
+ }
- if (m_pFontCache) {
- if (bRelease) {
- delete m_pFontCache;
- m_pFontCache = NULL;
- } else {
- m_pFontCache->FreeCache(FALSE);
- }
+ if (m_pFontCache) {
+ if (bRelease) {
+ delete m_pFontCache;
+ m_pFontCache = NULL;
+ } else {
+ m_pFontCache->FreeCache(FALSE);
}
+ }
}
-CPDF_Type3Cache* CPDF_DocRenderData::GetCachedType3(CPDF_Type3Font* pFont)
-{
- CPDF_CountedObject<CPDF_Type3Cache>* pCache;
- auto it = m_Type3FaceMap.find(pFont);
- if (it == m_Type3FaceMap.end()) {
- CPDF_Type3Cache* pType3 = new CPDF_Type3Cache(pFont);
- pCache = new CPDF_CountedObject<CPDF_Type3Cache>(pType3);
- m_Type3FaceMap[pFont] = pCache;
- } else {
- pCache = it->second;
- }
- return pCache->AddRef();
+CPDF_Type3Cache* CPDF_DocRenderData::GetCachedType3(CPDF_Type3Font* pFont) {
+ CPDF_CountedObject<CPDF_Type3Cache>* pCache;
+ auto it = m_Type3FaceMap.find(pFont);
+ if (it == m_Type3FaceMap.end()) {
+ CPDF_Type3Cache* pType3 = new CPDF_Type3Cache(pFont);
+ pCache = new CPDF_CountedObject<CPDF_Type3Cache>(pType3);
+ m_Type3FaceMap[pFont] = pCache;
+ } else {
+ pCache = it->second;
+ }
+ return pCache->AddRef();
}
-void CPDF_DocRenderData::ReleaseCachedType3(CPDF_Type3Font* pFont)
-{
- auto it = m_Type3FaceMap.find(pFont);
- if (it != m_Type3FaceMap.end())
- it->second->RemoveRef();
+void CPDF_DocRenderData::ReleaseCachedType3(CPDF_Type3Font* pFont) {
+ auto it = m_Type3FaceMap.find(pFont);
+ if (it != m_Type3FaceMap.end())
+ it->second->RemoveRef();
}
-class CPDF_RenderModule : public IPDF_RenderModule
-{
-public:
- CPDF_RenderModule() {}
+class CPDF_RenderModule : public IPDF_RenderModule {
+ public:
+ CPDF_RenderModule() {}
-private:
- ~CPDF_RenderModule() override {}
+ private:
+ ~CPDF_RenderModule() override {}
- CPDF_DocRenderData* CreateDocData(CPDF_Document* pDoc) override;
- void DestroyDocData(CPDF_DocRenderData* p) override;
- void ClearDocData(CPDF_DocRenderData* p) override;
+ CPDF_DocRenderData* CreateDocData(CPDF_Document* pDoc) override;
+ void DestroyDocData(CPDF_DocRenderData* p) override;
+ void ClearDocData(CPDF_DocRenderData* p) override;
- CPDF_DocRenderData* GetRenderData() override
- {
- return &m_RenderData;
- }
+ CPDF_DocRenderData* GetRenderData() override { return &m_RenderData; }
- CPDF_PageRenderCache* CreatePageCache(CPDF_Page* pPage) override
- {
- return new CPDF_PageRenderCache(pPage);
- }
+ CPDF_PageRenderCache* CreatePageCache(CPDF_Page* pPage) override {
+ return new CPDF_PageRenderCache(pPage);
+ }
- void DestroyPageCache(CPDF_PageRenderCache* pCache) override;
+ void DestroyPageCache(CPDF_PageRenderCache* pCache) override;
- CPDF_RenderConfig* GetConfig() override
- {
- return &m_RenderConfig;
- }
+ CPDF_RenderConfig* GetConfig() override { return &m_RenderConfig; }
- CPDF_DocRenderData m_RenderData;
- CPDF_RenderConfig m_RenderConfig;
+ CPDF_DocRenderData m_RenderData;
+ CPDF_RenderConfig m_RenderConfig;
};
-CPDF_DocRenderData* CPDF_RenderModule::CreateDocData(CPDF_Document* pDoc)
-{
- return new CPDF_DocRenderData(pDoc);
+CPDF_DocRenderData* CPDF_RenderModule::CreateDocData(CPDF_Document* pDoc) {
+ return new CPDF_DocRenderData(pDoc);
}
-void CPDF_RenderModule::DestroyDocData(CPDF_DocRenderData* pDocData)
-{
- delete pDocData;
+void CPDF_RenderModule::DestroyDocData(CPDF_DocRenderData* pDocData) {
+ delete pDocData;
}
-void CPDF_RenderModule::ClearDocData(CPDF_DocRenderData* p)
-{
- if (p) {
- p->Clear(FALSE);
- }
+void CPDF_RenderModule::ClearDocData(CPDF_DocRenderData* p) {
+ if (p) {
+ p->Clear(FALSE);
+ }
}
-void CPDF_RenderModule::DestroyPageCache(CPDF_PageRenderCache* pCache)
-{
- delete pCache;
+void CPDF_RenderModule::DestroyPageCache(CPDF_PageRenderCache* pCache) {
+ delete pCache;
}
-void CPDF_ModuleMgr::InitRenderModule()
-{
- m_pRenderModule.reset(new CPDF_RenderModule);
+void CPDF_ModuleMgr::InitRenderModule() {
+ m_pRenderModule.reset(new CPDF_RenderModule);
}
CPDF_RenderOptions::CPDF_RenderOptions()
- : m_ColorMode(RENDER_COLOR_NORMAL)
- , m_Flags(RENDER_CLEARTYPE)
- , m_Interpolation(0)
- , m_AddFlags(0)
- , m_pOCContext(NULL)
- , m_dwLimitCacheSize(1024 * 1024 * 100)
- , m_HalftoneLimit(-1)
-{
-}
-FX_ARGB CPDF_RenderOptions::TranslateColor(FX_ARGB argb) const
-{
- if (m_ColorMode == RENDER_COLOR_NORMAL) {
- return argb;
- }
- if (m_ColorMode == RENDER_COLOR_ALPHA) {
- return argb;
- }
- int a, r, g, b;
- ArgbDecode(argb, a, r, g, b);
- int gray = FXRGB2GRAY(r, g, b);
- if (m_ColorMode == RENDER_COLOR_TWOCOLOR) {
- int color = (r - gray) * (r - gray) + (g - gray) * (g - gray) + (b - gray) * (b - gray);
- if (gray < 35 && color < 20) {
- return ArgbEncode(a, m_ForeColor);
- }
- if (gray > 221 && color < 20) {
- return ArgbEncode(a, m_BackColor);
- }
- return argb;
- }
- int fr = FXSYS_GetRValue(m_ForeColor);
- int fg = FXSYS_GetGValue(m_ForeColor);
- int fb = FXSYS_GetBValue(m_ForeColor);
- int br = FXSYS_GetRValue(m_BackColor);
- int bg = FXSYS_GetGValue(m_BackColor);
- int bb = FXSYS_GetBValue(m_BackColor);
- r = (br - fr) * gray / 255 + fr;
- g = (bg - fg) * gray / 255 + fg;
- b = (bb - fb) * gray / 255 + fb;
- return ArgbEncode(a, r, g, b);
+ : m_ColorMode(RENDER_COLOR_NORMAL),
+ m_Flags(RENDER_CLEARTYPE),
+ m_Interpolation(0),
+ m_AddFlags(0),
+ m_pOCContext(NULL),
+ m_dwLimitCacheSize(1024 * 1024 * 100),
+ m_HalftoneLimit(-1) {}
+FX_ARGB CPDF_RenderOptions::TranslateColor(FX_ARGB argb) const {
+ if (m_ColorMode == RENDER_COLOR_NORMAL) {
+ return argb;
+ }
+ if (m_ColorMode == RENDER_COLOR_ALPHA) {
+ return argb;
+ }
+ int a, r, g, b;
+ ArgbDecode(argb, a, r, g, b);
+ int gray = FXRGB2GRAY(r, g, b);
+ if (m_ColorMode == RENDER_COLOR_TWOCOLOR) {
+ int color = (r - gray) * (r - gray) + (g - gray) * (g - gray) +
+ (b - gray) * (b - gray);
+ if (gray < 35 && color < 20) {
+ return ArgbEncode(a, m_ForeColor);
+ }
+ if (gray > 221 && color < 20) {
+ return ArgbEncode(a, m_BackColor);
+ }
+ return argb;
+ }
+ int fr = FXSYS_GetRValue(m_ForeColor);
+ int fg = FXSYS_GetGValue(m_ForeColor);
+ int fb = FXSYS_GetBValue(m_ForeColor);
+ int br = FXSYS_GetRValue(m_BackColor);
+ int bg = FXSYS_GetGValue(m_BackColor);
+ int bb = FXSYS_GetBValue(m_BackColor);
+ r = (br - fr) * gray / 255 + fr;
+ g = (bg - fg) * gray / 255 + fg;
+ b = (bb - fb) * gray / 255 + fb;
+ return ArgbEncode(a, r, g, b);
}
// static
int CPDF_RenderStatus::s_CurrentRecursionDepth = 0;
-CPDF_RenderStatus::CPDF_RenderStatus()
-{
- m_pContext = NULL;
- m_bStopped = FALSE;
- m_pDevice = NULL;
- m_pCurObj = NULL;
- m_pStopObj = NULL;
- m_HalftoneLimit = 0;
- m_pObjectRenderer = NULL;
- m_bPrint = FALSE;
- m_Transparency = 0;
- m_DitherBits = 0;
- m_bDropObjects = FALSE;
- m_bStdCS = FALSE;
- m_GroupFamily = 0;
- m_bLoadMask = FALSE;
- m_pType3Char = NULL;
- m_T3FillColor = 0;
- m_pFormResource = NULL;
- m_pPageResource = NULL;
- m_curBlend = FXDIB_BLEND_NORMAL;
+CPDF_RenderStatus::CPDF_RenderStatus() {
+ m_pContext = NULL;
+ m_bStopped = FALSE;
+ m_pDevice = NULL;
+ m_pCurObj = NULL;
+ m_pStopObj = NULL;
+ m_HalftoneLimit = 0;
+ m_pObjectRenderer = NULL;
+ m_bPrint = FALSE;
+ m_Transparency = 0;
+ m_DitherBits = 0;
+ m_bDropObjects = FALSE;
+ m_bStdCS = FALSE;
+ m_GroupFamily = 0;
+ m_bLoadMask = FALSE;
+ m_pType3Char = NULL;
+ m_T3FillColor = 0;
+ m_pFormResource = NULL;
+ m_pPageResource = NULL;
+ m_curBlend = FXDIB_BLEND_NORMAL;
}
-CPDF_RenderStatus::~CPDF_RenderStatus()
-{
- delete m_pObjectRenderer;
+CPDF_RenderStatus::~CPDF_RenderStatus() {
+ delete m_pObjectRenderer;
}
-FX_BOOL CPDF_RenderStatus::Initialize(CPDF_RenderContext* pContext, CFX_RenderDevice* pDevice,
- const CFX_AffineMatrix* pDeviceMatrix, const CPDF_PageObject* pStopObj,
- const CPDF_RenderStatus* pParentState, const CPDF_GraphicStates* pInitialStates,
- const CPDF_RenderOptions* pOptions, int transparency, FX_BOOL bDropObjects,
- CPDF_Dictionary* pFormResource, FX_BOOL bStdCS, CPDF_Type3Char* pType3Char,
- FX_ARGB fill_color, FX_DWORD GroupFamily,
- FX_BOOL bLoadMask)
-{
- m_pContext = pContext;
- m_pDevice = pDevice;
- m_DitherBits = pDevice->GetDeviceCaps(FXDC_DITHER_BITS);
- m_bPrint = m_pDevice->GetDeviceClass() != FXDC_DISPLAY;
- if (pDeviceMatrix) {
- m_DeviceMatrix = *pDeviceMatrix;
- }
- m_pStopObj = pStopObj;
- if (pOptions) {
- m_Options = *pOptions;
- }
- m_bDropObjects = bDropObjects;
- m_bStdCS = bStdCS;
- m_T3FillColor = fill_color;
- m_pType3Char = pType3Char;
- m_GroupFamily = GroupFamily;
- m_bLoadMask = bLoadMask;
- m_pFormResource = pFormResource;
- m_pPageResource = m_pContext->m_pPageResources;
- if (pInitialStates && !m_pType3Char) {
- m_InitialStates.CopyStates(*pInitialStates);
- if (pParentState) {
- CPDF_ColorStateData* pColorData = (CPDF_ColorStateData*)(const CPDF_ColorStateData*)m_InitialStates.m_ColorState;
- CPDF_ColorStateData* pParentData = (CPDF_ColorStateData*)(const CPDF_ColorStateData*)pParentState->m_InitialStates.m_ColorState;
- if (!pColorData || pColorData->m_FillColor.IsNull()) {
- CPDF_ColorStateData* pData = m_InitialStates.m_ColorState.GetModify();
- pData->m_FillRGB = pParentData->m_FillRGB;
- pData->m_FillColor.Copy(&pParentData->m_FillColor);
- }
- if (!pColorData || pColorData->m_StrokeColor.IsNull()) {
- CPDF_ColorStateData* pData = m_InitialStates.m_ColorState.GetModify();
- pData->m_StrokeRGB = pParentData->m_FillRGB;
- pData->m_StrokeColor.Copy(&pParentData->m_StrokeColor);
- }
- }
- } else {
- m_InitialStates.DefaultStates();
+FX_BOOL CPDF_RenderStatus::Initialize(CPDF_RenderContext* pContext,
+ CFX_RenderDevice* pDevice,
+ const CFX_AffineMatrix* pDeviceMatrix,
+ const CPDF_PageObject* pStopObj,
+ const CPDF_RenderStatus* pParentState,
+ const CPDF_GraphicStates* pInitialStates,
+ const CPDF_RenderOptions* pOptions,
+ int transparency,
+ FX_BOOL bDropObjects,
+ CPDF_Dictionary* pFormResource,
+ FX_BOOL bStdCS,
+ CPDF_Type3Char* pType3Char,
+ FX_ARGB fill_color,
+ FX_DWORD GroupFamily,
+ FX_BOOL bLoadMask) {
+ m_pContext = pContext;
+ m_pDevice = pDevice;
+ m_DitherBits = pDevice->GetDeviceCaps(FXDC_DITHER_BITS);
+ m_bPrint = m_pDevice->GetDeviceClass() != FXDC_DISPLAY;
+ if (pDeviceMatrix) {
+ m_DeviceMatrix = *pDeviceMatrix;
+ }
+ m_pStopObj = pStopObj;
+ if (pOptions) {
+ m_Options = *pOptions;
+ }
+ m_bDropObjects = bDropObjects;
+ m_bStdCS = bStdCS;
+ m_T3FillColor = fill_color;
+ m_pType3Char = pType3Char;
+ m_GroupFamily = GroupFamily;
+ m_bLoadMask = bLoadMask;
+ m_pFormResource = pFormResource;
+ m_pPageResource = m_pContext->m_pPageResources;
+ if (pInitialStates && !m_pType3Char) {
+ m_InitialStates.CopyStates(*pInitialStates);
+ if (pParentState) {
+ CPDF_ColorStateData* pColorData =
+ (CPDF_ColorStateData*)(const CPDF_ColorStateData*)
+ m_InitialStates.m_ColorState;
+ CPDF_ColorStateData* pParentData =
+ (CPDF_ColorStateData*)(const CPDF_ColorStateData*)
+ pParentState->m_InitialStates.m_ColorState;
+ if (!pColorData || pColorData->m_FillColor.IsNull()) {
+ CPDF_ColorStateData* pData = m_InitialStates.m_ColorState.GetModify();
+ pData->m_FillRGB = pParentData->m_FillRGB;
+ pData->m_FillColor.Copy(&pParentData->m_FillColor);
+ }
+ if (!pColorData || pColorData->m_StrokeColor.IsNull()) {
+ CPDF_ColorStateData* pData = m_InitialStates.m_ColorState.GetModify();
+ pData->m_StrokeRGB = pParentData->m_FillRGB;
+ pData->m_StrokeColor.Copy(&pParentData->m_StrokeColor);
+ }
+ }
+ } else {
+ m_InitialStates.DefaultStates();
+ }
+ m_pObjectRenderer = NULL;
+ m_Transparency = transparency;
+ return TRUE;
+}
+void CPDF_RenderStatus::RenderObjectList(const CPDF_PageObjects* pObjs,
+ const CFX_AffineMatrix* pObj2Device) {
+ CFX_FloatRect clip_rect = m_pDevice->GetClipBox();
+ CFX_AffineMatrix device2object;
+ device2object.SetReverse(*pObj2Device);
+ device2object.TransformRect(clip_rect);
+ int index = 0;
+ FX_POSITION pos = pObjs->GetFirstObjectPosition();
+ while (pos) {
+ index++;
+ CPDF_PageObject* pCurObj = pObjs->GetNextObject(pos);
+ if (pCurObj == m_pStopObj) {
+ m_bStopped = TRUE;
+ return;
+ }
+ if (!pCurObj) {
+ continue;
+ }
+ if (pCurObj == NULL || pCurObj->m_Left > clip_rect.right ||
+ pCurObj->m_Right < clip_rect.left ||
+ pCurObj->m_Bottom > clip_rect.top ||
+ pCurObj->m_Top < clip_rect.bottom) {
+ continue;
+ }
+ RenderSingleObject(pCurObj, pObj2Device);
+ if (m_bStopped) {
+ return;
+ }
+ }
+}
+void CPDF_RenderStatus::RenderSingleObject(
+ const CPDF_PageObject* pObj,
+ const CFX_AffineMatrix* pObj2Device) {
+ CFX_AutoRestorer<int> restorer(&s_CurrentRecursionDepth);
+ if (++s_CurrentRecursionDepth > kRenderMaxRecursionDepth) {
+ return;
+ }
+ m_pCurObj = pObj;
+ if (m_Options.m_pOCContext && pObj->m_ContentMark.NotNull()) {
+ if (!m_Options.m_pOCContext->CheckObjectVisible(pObj)) {
+ return;
+ }
+ }
+ ProcessClipPath(pObj->m_ClipPath, pObj2Device);
+ if (ProcessTransparency(pObj, pObj2Device)) {
+ return;
+ }
+ ProcessObjectNoClip(pObj, pObj2Device);
+}
+FX_BOOL CPDF_RenderStatus::ContinueSingleObject(
+ const CPDF_PageObject* pObj,
+ const CFX_AffineMatrix* pObj2Device,
+ IFX_Pause* pPause) {
+ if (m_pObjectRenderer) {
+ if (m_pObjectRenderer->Continue(pPause)) {
+ return TRUE;
+ }
+ if (!m_pObjectRenderer->m_Result) {
+ DrawObjWithBackground(pObj, pObj2Device);
}
+ delete m_pObjectRenderer;
m_pObjectRenderer = NULL;
- m_Transparency = transparency;
- return TRUE;
-}
-void CPDF_RenderStatus::RenderObjectList(const CPDF_PageObjects* pObjs, const CFX_AffineMatrix* pObj2Device)
-{
- CFX_FloatRect clip_rect = m_pDevice->GetClipBox();
- CFX_AffineMatrix device2object;
- device2object.SetReverse(*pObj2Device);
- device2object.TransformRect(clip_rect);
- int index = 0;
- FX_POSITION pos = pObjs->GetFirstObjectPosition();
- while(pos) {
- index ++;
- CPDF_PageObject* pCurObj = pObjs->GetNextObject(pos);
- if (pCurObj == m_pStopObj) {
- m_bStopped = TRUE;
- return;
- }
- if (!pCurObj) {
- continue;
- }
- if(pCurObj == NULL || pCurObj->m_Left > clip_rect.right || pCurObj->m_Right < clip_rect.left ||
- pCurObj->m_Bottom > clip_rect.top || pCurObj->m_Top < clip_rect.bottom) {
- continue;
- }
- RenderSingleObject(pCurObj, pObj2Device);
- if (m_bStopped) {
- return;
- }
- }
-}
-void CPDF_RenderStatus::RenderSingleObject(const CPDF_PageObject* pObj, const CFX_AffineMatrix* pObj2Device)
-{
- CFX_AutoRestorer<int> restorer(&s_CurrentRecursionDepth);
- if (++s_CurrentRecursionDepth > kRenderMaxRecursionDepth) {
- return;
- }
- m_pCurObj = pObj;
- if (m_Options.m_pOCContext && pObj->m_ContentMark.NotNull()) {
- if (!m_Options.m_pOCContext->CheckObjectVisible(pObj)) {
- return;
- }
- }
- ProcessClipPath(pObj->m_ClipPath, pObj2Device);
- if (ProcessTransparency(pObj, pObj2Device)) {
- return;
- }
- ProcessObjectNoClip(pObj, pObj2Device);
-}
-FX_BOOL CPDF_RenderStatus::ContinueSingleObject(const CPDF_PageObject* pObj, const CFX_AffineMatrix* pObj2Device, IFX_Pause* pPause)
-{
- if (m_pObjectRenderer) {
- if (m_pObjectRenderer->Continue(pPause)) {
- return TRUE;
- }
- if (!m_pObjectRenderer->m_Result) {
- DrawObjWithBackground(pObj, pObj2Device);
- }
- delete m_pObjectRenderer;
- m_pObjectRenderer = NULL;
- return FALSE;
- }
- m_pCurObj = pObj;
- if (m_Options.m_pOCContext && pObj->m_ContentMark.NotNull())
- if (!m_Options.m_pOCContext->CheckObjectVisible(pObj)) {
- return FALSE;
- }
- ProcessClipPath(pObj->m_ClipPath, pObj2Device);
- if (ProcessTransparency(pObj, pObj2Device)) {
- return FALSE;
- }
- if (pObj->m_Type == PDFPAGE_IMAGE) {
- m_pObjectRenderer = IPDF_ObjectRenderer::Create(pObj->m_Type);
- if (!m_pObjectRenderer->Start(this, pObj, pObj2Device, FALSE)) {
- if (!m_pObjectRenderer->m_Result) {
- DrawObjWithBackground(pObj, pObj2Device);
- }
- delete m_pObjectRenderer;
- m_pObjectRenderer = NULL;
- return FALSE;
- }
- return ContinueSingleObject(pObj, pObj2Device, pPause);
- }
- ProcessObjectNoClip(pObj, pObj2Device);
return FALSE;
-}
-IPDF_ObjectRenderer* IPDF_ObjectRenderer::Create(int type)
-{
- if (type != PDFPAGE_IMAGE) {
- return NULL;
- }
- return new CPDF_ImageRenderer;
-}
-FX_BOOL CPDF_RenderStatus::GetObjectClippedRect(const CPDF_PageObject* pObj, const CFX_AffineMatrix* pObj2Device, FX_BOOL bLogical, FX_RECT &rect) const
-{
- rect = pObj->GetBBox(pObj2Device);
- FX_RECT rtClip = m_pDevice->GetClipBox();
- if (!bLogical) {
- CFX_Matrix dCTM = m_pDevice->GetCTM();
- FX_FLOAT a = FXSYS_fabs(dCTM.a);
- FX_FLOAT d = FXSYS_fabs(dCTM.d);
- if (a != 1.0f || d != 1.0f) {
- rect.right = rect.left + (int32_t)FXSYS_ceil((FX_FLOAT)rect.Width() * a);
- rect.bottom = rect.top + (int32_t)FXSYS_ceil((FX_FLOAT)rect.Height() * d);
- rtClip.right = rtClip.left + (int32_t)FXSYS_ceil((FX_FLOAT)rtClip.Width() * a);
- rtClip.bottom = rtClip.top + (int32_t)FXSYS_ceil((FX_FLOAT)rtClip.Height() * d);
- }
- }
- rect.Intersect(rtClip);
- return rect.IsEmpty();
-}
-void CPDF_RenderStatus::DitherObjectArea(const CPDF_PageObject* pObj, const CFX_AffineMatrix* pObj2Device)
-{
- CFX_DIBitmap* pBitmap = m_pDevice->GetBitmap();
- if (pBitmap == NULL) {
- return;
- }
- FX_RECT rect;
- if (GetObjectClippedRect(pObj, pObj2Device, FALSE, rect)) {
- return;
- }
- if (m_DitherBits == 2) {
- static FX_ARGB pal[4] = {0, 85, 170, 255};
- pBitmap->DitherFS(pal, 4, &rect);
- } else if (m_DitherBits == 3) {
- static FX_ARGB pal[8] = {0, 36, 73, 109, 146, 182, 219, 255};
- pBitmap->DitherFS(pal, 8, &rect);
- } else if (m_DitherBits == 4) {
- static FX_ARGB pal[16] = {0, 17, 34, 51, 68, 85, 102, 119, 136, 153, 170, 187, 204, 221, 238, 255};
- pBitmap->DitherFS(pal, 16, &rect);
- }
-}
-void CPDF_RenderStatus::ProcessObjectNoClip(const CPDF_PageObject* pObj, const CFX_AffineMatrix* pObj2Device)
-{
- FX_BOOL bRet = FALSE;
- switch (pObj->m_Type) {
- case PDFPAGE_TEXT:
- bRet = ProcessText((CPDF_TextObject*)pObj, pObj2Device, NULL);
- break;
- case PDFPAGE_PATH:
- bRet = ProcessPath((CPDF_PathObject*)pObj, pObj2Device);
- break;
- case PDFPAGE_IMAGE:
- bRet = ProcessImage((CPDF_ImageObject*)pObj, pObj2Device);
- break;
- case PDFPAGE_SHADING:
- bRet = ProcessShading((CPDF_ShadingObject*)pObj, pObj2Device);
- break;
- case PDFPAGE_FORM:
- bRet = ProcessForm((CPDF_FormObject*)pObj, pObj2Device);
- break;
- }
- if (!bRet) {
+ }
+ m_pCurObj = pObj;
+ if (m_Options.m_pOCContext && pObj->m_ContentMark.NotNull())
+ if (!m_Options.m_pOCContext->CheckObjectVisible(pObj)) {
+ return FALSE;
+ }
+ ProcessClipPath(pObj->m_ClipPath, pObj2Device);
+ if (ProcessTransparency(pObj, pObj2Device)) {
+ return FALSE;
+ }
+ if (pObj->m_Type == PDFPAGE_IMAGE) {
+ m_pObjectRenderer = IPDF_ObjectRenderer::Create(pObj->m_Type);
+ if (!m_pObjectRenderer->Start(this, pObj, pObj2Device, FALSE)) {
+ if (!m_pObjectRenderer->m_Result) {
DrawObjWithBackground(pObj, pObj2Device);
- }
-}
-FX_BOOL CPDF_RenderStatus::DrawObjWithBlend(const CPDF_PageObject* pObj, const CFX_AffineMatrix* pObj2Device)
-{
- FX_BOOL bRet = FALSE;
- switch (pObj->m_Type) {
- case PDFPAGE_PATH:
- bRet = ProcessPath((CPDF_PathObject*)pObj, pObj2Device);
- break;
- case PDFPAGE_IMAGE:
- bRet = ProcessImage((CPDF_ImageObject *)pObj, pObj2Device);
- break;
- case PDFPAGE_FORM:
- bRet = ProcessForm((CPDF_FormObject*)pObj, pObj2Device);
- break;
- }
- return bRet;
-}
-void CPDF_RenderStatus::GetScaledMatrix(CFX_Matrix &matrix) const
-{
+ }
+ delete m_pObjectRenderer;
+ m_pObjectRenderer = NULL;
+ return FALSE;
+ }
+ return ContinueSingleObject(pObj, pObj2Device, pPause);
+ }
+ ProcessObjectNoClip(pObj, pObj2Device);
+ return FALSE;
+}
+IPDF_ObjectRenderer* IPDF_ObjectRenderer::Create(int type) {
+ if (type != PDFPAGE_IMAGE) {
+ return NULL;
+ }
+ return new CPDF_ImageRenderer;
+}
+FX_BOOL CPDF_RenderStatus::GetObjectClippedRect(
+ const CPDF_PageObject* pObj,
+ const CFX_AffineMatrix* pObj2Device,
+ FX_BOOL bLogical,
+ FX_RECT& rect) const {
+ rect = pObj->GetBBox(pObj2Device);
+ FX_RECT rtClip = m_pDevice->GetClipBox();
+ if (!bLogical) {
CFX_Matrix dCTM = m_pDevice->GetCTM();
- matrix.a *= FXSYS_fabs(dCTM.a);
- matrix.d *= FXSYS_fabs(dCTM.d);
-}
-void CPDF_RenderStatus::DrawObjWithBackground(const CPDF_PageObject* pObj, const CFX_AffineMatrix* pObj2Device)
-{
- FX_RECT rect;
- if (GetObjectClippedRect(pObj, pObj2Device, FALSE, rect)) {
- return;
- }
- int res = 300;
- if (pObj->m_Type == PDFPAGE_IMAGE && m_pDevice->GetDeviceCaps(FXDC_DEVICE_CLASS) == FXDC_PRINTER) {
- res = 0;
- }
- CPDF_ScaledRenderBuffer buffer;
- if (!buffer.Initialize(m_pContext, m_pDevice, &rect, pObj, &m_Options, res)) {
- return;
- }
- CFX_AffineMatrix matrix = *pObj2Device;
- matrix.Concat(*buffer.GetMatrix());
- GetScaledMatrix(matrix);
- CPDF_Dictionary* pFormResource = NULL;
- if (pObj->m_Type == PDFPAGE_FORM) {
- CPDF_FormObject* pFormObj = (CPDF_FormObject*)pObj;
- if (pFormObj->m_pForm && pFormObj->m_pForm->m_pFormDict) {
- pFormResource = pFormObj->m_pForm->m_pFormDict->GetDict(FX_BSTRC("Resources"));
- }
- }
- CPDF_RenderStatus status;
- status.Initialize(m_pContext, buffer.GetDevice(), buffer.GetMatrix(), NULL, NULL, NULL, &m_Options, m_Transparency, m_bDropObjects, pFormResource);
- status.RenderSingleObject(pObj, &matrix);
- buffer.OutputToDevice();
-}
-FX_BOOL CPDF_RenderStatus::ProcessForm(CPDF_FormObject* pFormObj, const CFX_AffineMatrix* pObj2Device)
-{
- CPDF_Dictionary* pOC = pFormObj->m_pForm->m_pFormDict->GetDict(FX_BSTRC("OC"));
- if (pOC && m_Options.m_pOCContext && !m_Options.m_pOCContext->CheckOCGVisible(pOC)) {
- return TRUE;
- }
- CFX_AffineMatrix matrix = pFormObj->m_FormMatrix;
- matrix.Concat(*pObj2Device);
- CPDF_Dictionary* pResources = NULL;
+ FX_FLOAT a = FXSYS_fabs(dCTM.a);
+ FX_FLOAT d = FXSYS_fabs(dCTM.d);
+ if (a != 1.0f || d != 1.0f) {
+ rect.right = rect.left + (int32_t)FXSYS_ceil((FX_FLOAT)rect.Width() * a);
+ rect.bottom = rect.top + (int32_t)FXSYS_ceil((FX_FLOAT)rect.Height() * d);
+ rtClip.right =
+ rtClip.left + (int32_t)FXSYS_ceil((FX_FLOAT)rtClip.Width() * a);
+ rtClip.bottom =
+ rtClip.top + (int32_t)FXSYS_ceil((FX_FLOAT)rtClip.Height() * d);
+ }
+ }
+ rect.Intersect(rtClip);
+ return rect.IsEmpty();
+}
+void CPDF_RenderStatus::DitherObjectArea(const CPDF_PageObject* pObj,
+ const CFX_AffineMatrix* pObj2Device) {
+ CFX_DIBitmap* pBitmap = m_pDevice->GetBitmap();
+ if (pBitmap == NULL) {
+ return;
+ }
+ FX_RECT rect;
+ if (GetObjectClippedRect(pObj, pObj2Device, FALSE, rect)) {
+ return;
+ }
+ if (m_DitherBits == 2) {
+ static FX_ARGB pal[4] = {0, 85, 170, 255};
+ pBitmap->DitherFS(pal, 4, &rect);
+ } else if (m_DitherBits == 3) {
+ static FX_ARGB pal[8] = {0, 36, 73, 109, 146, 182, 219, 255};
+ pBitmap->DitherFS(pal, 8, &rect);
+ } else if (m_DitherBits == 4) {
+ static FX_ARGB pal[16] = {0, 17, 34, 51, 68, 85, 102, 119,
+ 136, 153, 170, 187, 204, 221, 238, 255};
+ pBitmap->DitherFS(pal, 16, &rect);
+ }
+}
+void CPDF_RenderStatus::ProcessObjectNoClip(
+ const CPDF_PageObject* pObj,
+ const CFX_AffineMatrix* pObj2Device) {
+ FX_BOOL bRet = FALSE;
+ switch (pObj->m_Type) {
+ case PDFPAGE_TEXT:
+ bRet = ProcessText((CPDF_TextObject*)pObj, pObj2Device, NULL);
+ break;
+ case PDFPAGE_PATH:
+ bRet = ProcessPath((CPDF_PathObject*)pObj, pObj2Device);
+ break;
+ case PDFPAGE_IMAGE:
+ bRet = ProcessImage((CPDF_ImageObject*)pObj, pObj2Device);
+ break;
+ case PDFPAGE_SHADING:
+ bRet = ProcessShading((CPDF_ShadingObject*)pObj, pObj2Device);
+ break;
+ case PDFPAGE_FORM:
+ bRet = ProcessForm((CPDF_FormObject*)pObj, pObj2Device);
+ break;
+ }
+ if (!bRet) {
+ DrawObjWithBackground(pObj, pObj2Device);
+ }
+}
+FX_BOOL CPDF_RenderStatus::DrawObjWithBlend(
+ const CPDF_PageObject* pObj,
+ const CFX_AffineMatrix* pObj2Device) {
+ FX_BOOL bRet = FALSE;
+ switch (pObj->m_Type) {
+ case PDFPAGE_PATH:
+ bRet = ProcessPath((CPDF_PathObject*)pObj, pObj2Device);
+ break;
+ case PDFPAGE_IMAGE:
+ bRet = ProcessImage((CPDF_ImageObject*)pObj, pObj2Device);
+ break;
+ case PDFPAGE_FORM:
+ bRet = ProcessForm((CPDF_FormObject*)pObj, pObj2Device);
+ break;
+ }
+ return bRet;
+}
+void CPDF_RenderStatus::GetScaledMatrix(CFX_Matrix& matrix) const {
+ CFX_Matrix dCTM = m_pDevice->GetCTM();
+ matrix.a *= FXSYS_fabs(dCTM.a);
+ matrix.d *= FXSYS_fabs(dCTM.d);
+}
+void CPDF_RenderStatus::DrawObjWithBackground(
+ const CPDF_PageObject* pObj,
+ const CFX_AffineMatrix* pObj2Device) {
+ FX_RECT rect;
+ if (GetObjectClippedRect(pObj, pObj2Device, FALSE, rect)) {
+ return;
+ }
+ int res = 300;
+ if (pObj->m_Type == PDFPAGE_IMAGE &&
+ m_pDevice->GetDeviceCaps(FXDC_DEVICE_CLASS) == FXDC_PRINTER) {
+ res = 0;
+ }
+ CPDF_ScaledRenderBuffer buffer;
+ if (!buffer.Initialize(m_pContext, m_pDevice, &rect, pObj, &m_Options, res)) {
+ return;
+ }
+ CFX_AffineMatrix matrix = *pObj2Device;
+ matrix.Concat(*buffer.GetMatrix());
+ GetScaledMatrix(matrix);
+ CPDF_Dictionary* pFormResource = NULL;
+ if (pObj->m_Type == PDFPAGE_FORM) {
+ CPDF_FormObject* pFormObj = (CPDF_FormObject*)pObj;
if (pFormObj->m_pForm && pFormObj->m_pForm->m_pFormDict) {
- pResources = pFormObj->m_pForm->m_pFormDict->GetDict(FX_BSTRC("Resources"));
- }
- CPDF_RenderStatus status;
- status.Initialize(m_pContext, m_pDevice, NULL, m_pStopObj,
- this, pFormObj, &m_Options, m_Transparency, m_bDropObjects, pResources, FALSE);
- status.m_curBlend = m_curBlend;
- m_pDevice->SaveState();
- status.RenderObjectList(pFormObj->m_pForm, &matrix);
- m_bStopped = status.m_bStopped;
- m_pDevice->RestoreState();
+ pFormResource =
+ pFormObj->m_pForm->m_pFormDict->GetDict(FX_BSTRC("Resources"));
+ }
+ }
+ CPDF_RenderStatus status;
+ status.Initialize(m_pContext, buffer.GetDevice(), buffer.GetMatrix(), NULL,
+ NULL, NULL, &m_Options, m_Transparency, m_bDropObjects,
+ pFormResource);
+ status.RenderSingleObject(pObj, &matrix);
+ buffer.OutputToDevice();
+}
+FX_BOOL CPDF_RenderStatus::ProcessForm(CPDF_FormObject* pFormObj,
+ const CFX_AffineMatrix* pObj2Device) {
+ CPDF_Dictionary* pOC =
+ pFormObj->m_pForm->m_pFormDict->GetDict(FX_BSTRC("OC"));
+ if (pOC && m_Options.m_pOCContext &&
+ !m_Options.m_pOCContext->CheckOCGVisible(pOC)) {
return TRUE;
-}
-FX_BOOL IsAvailableMatrix(const CFX_AffineMatrix& matrix)
-{
- if (matrix.a == 0 || matrix.d == 0) {
- return matrix.b != 0 && matrix.c != 0;
- }
- if (matrix.b == 0 || matrix.c == 0) {
- return matrix.a != 0 && matrix.d != 0;
- }
+ }
+ CFX_AffineMatrix matrix = pFormObj->m_FormMatrix;
+ matrix.Concat(*pObj2Device);
+ CPDF_Dictionary* pResources = NULL;
+ if (pFormObj->m_pForm && pFormObj->m_pForm->m_pFormDict) {
+ pResources = pFormObj->m_pForm->m_pFormDict->GetDict(FX_BSTRC("Resources"));
+ }
+ CPDF_RenderStatus status;
+ status.Initialize(m_pContext, m_pDevice, NULL, m_pStopObj, this, pFormObj,
+ &m_Options, m_Transparency, m_bDropObjects, pResources,
+ FALSE);
+ status.m_curBlend = m_curBlend;
+ m_pDevice->SaveState();
+ status.RenderObjectList(pFormObj->m_pForm, &matrix);
+ m_bStopped = status.m_bStopped;
+ m_pDevice->RestoreState();
+ return TRUE;
+}
+FX_BOOL IsAvailableMatrix(const CFX_AffineMatrix& matrix) {
+ if (matrix.a == 0 || matrix.d == 0) {
+ return matrix.b != 0 && matrix.c != 0;
+ }
+ if (matrix.b == 0 || matrix.c == 0) {
+ return matrix.a != 0 && matrix.d != 0;
+ }
+ return TRUE;
+}
+FX_BOOL CPDF_RenderStatus::ProcessPath(CPDF_PathObject* pPathObj,
+ const CFX_AffineMatrix* pObj2Device) {
+ int FillType = pPathObj->m_FillType;
+ FX_BOOL bStroke = pPathObj->m_bStroke;
+ ProcessPathPattern(pPathObj, pObj2Device, FillType, bStroke);
+ if (FillType == 0 && !bStroke) {
return TRUE;
-}
-FX_BOOL CPDF_RenderStatus::ProcessPath(CPDF_PathObject* pPathObj, const CFX_AffineMatrix* pObj2Device)
-{
- int FillType = pPathObj->m_FillType;
- FX_BOOL bStroke = pPathObj->m_bStroke;
- ProcessPathPattern(pPathObj, pObj2Device, FillType, bStroke);
- if (FillType == 0 && !bStroke) {
- return TRUE;
- }
- FX_DWORD fill_argb = 0;
- if (FillType) {
- fill_argb = GetFillArgb(pPathObj);
- }
- FX_DWORD stroke_argb = 0;
- if (bStroke) {
- stroke_argb = GetStrokeArgb(pPathObj);
- }
- CFX_AffineMatrix path_matrix = pPathObj->m_Matrix;
- path_matrix.Concat(*pObj2Device);
- if (!IsAvailableMatrix(path_matrix)) {
- return TRUE;
- }
- if (FillType && (m_Options.m_Flags & RENDER_RECT_AA)) {
- FillType |= FXFILL_RECT_AA;
- }
- if (m_Options.m_Flags & RENDER_FILL_FULLCOVER) {
- FillType |= FXFILL_FULLCOVER;
- }
- if (m_Options.m_Flags & RENDER_NOPATHSMOOTH) {
- FillType |= FXFILL_NOPATHSMOOTH;
- }
- if (bStroke) {
- FillType |= FX_FILL_STROKE;
- }
- const CPDF_GeneralStateData* pGeneralData = ((CPDF_PageObject*)pPathObj)->m_GeneralState;
- if (pGeneralData && pGeneralData->m_StrokeAdjust) {
- FillType |= FX_STROKE_ADJUST;
- }
- if (m_pType3Char) {
- FillType |= FX_FILL_TEXT_MODE;
- }
- CFX_GraphStateData graphState(*pPathObj->m_GraphState);
- if (m_Options.m_Flags & RENDER_THINLINE) {
- graphState.m_LineWidth = 0;
- }
- return m_pDevice->DrawPath(pPathObj->m_Path, &path_matrix, &graphState, fill_argb, stroke_argb, FillType, 0, NULL, m_curBlend);
-}
-CPDF_TransferFunc* CPDF_RenderStatus::GetTransferFunc(CPDF_Object* pObj) const
-{
- ASSERT(pObj != NULL);
- CPDF_DocRenderData* pDocCache = m_pContext->m_pDocument->GetRenderData();
- if (!pDocCache) {
- return NULL;
- }
- return pDocCache->GetTransferFunc(pObj);
-}
-FX_ARGB CPDF_RenderStatus::GetFillArgb(const CPDF_PageObject* pObj, FX_BOOL bType3) const
-{
- CPDF_ColorStateData* pColorData = (CPDF_ColorStateData*)(const CPDF_ColorStateData*)pObj->m_ColorState;
- if (m_pType3Char && !bType3 && (!m_pType3Char->m_bColored || (m_pType3Char->m_bColored && (!pColorData || pColorData->m_FillColor.IsNull())))) {
- return m_T3FillColor;
- }
- if (!pColorData || pColorData->m_FillColor.IsNull()) {
- pColorData = (CPDF_ColorStateData*)(const CPDF_ColorStateData*)m_InitialStates.m_ColorState;
- }
- FX_COLORREF rgb = pColorData->m_FillRGB;
- if (rgb == (FX_DWORD) - 1) {
- return 0;
+ }
+ FX_DWORD fill_argb = 0;
+ if (FillType) {
+ fill_argb = GetFillArgb(pPathObj);
+ }
+ FX_DWORD stroke_argb = 0;
+ if (bStroke) {
+ stroke_argb = GetStrokeArgb(pPathObj);
+ }
+ CFX_AffineMatrix path_matrix = pPathObj->m_Matrix;
+ path_matrix.Concat(*pObj2Device);
+ if (!IsAvailableMatrix(path_matrix)) {
+ return TRUE;
+ }
+ if (FillType && (m_Options.m_Flags & RENDER_RECT_AA)) {
+ FillType |= FXFILL_RECT_AA;
+ }
+ if (m_Options.m_Flags & RENDER_FILL_FULLCOVER) {
+ FillType |= FXFILL_FULLCOVER;
+ }
+ if (m_Options.m_Flags & RENDER_NOPATHSMOOTH) {
+ FillType |= FXFILL_NOPATHSMOOTH;
+ }
+ if (bStroke) {
+ FillType |= FX_FILL_STROKE;
+ }
+ const CPDF_GeneralStateData* pGeneralData =
+ ((CPDF_PageObject*)pPathObj)->m_GeneralState;
+ if (pGeneralData && pGeneralData->m_StrokeAdjust) {
+ FillType |= FX_STROKE_ADJUST;
+ }
+ if (m_pType3Char) {
+ FillType |= FX_FILL_TEXT_MODE;
+ }
+ CFX_GraphStateData graphState(*pPathObj->m_GraphState);
+ if (m_Options.m_Flags & RENDER_THINLINE) {
+ graphState.m_LineWidth = 0;
+ }
+ return m_pDevice->DrawPath(pPathObj->m_Path, &path_matrix, &graphState,
+ fill_argb, stroke_argb, FillType, 0, NULL,
+ m_curBlend);
+}
+CPDF_TransferFunc* CPDF_RenderStatus::GetTransferFunc(CPDF_Object* pObj) const {
+ ASSERT(pObj != NULL);
+ CPDF_DocRenderData* pDocCache = m_pContext->m_pDocument->GetRenderData();
+ if (!pDocCache) {
+ return NULL;
+ }
+ return pDocCache->GetTransferFunc(pObj);
+}
+FX_ARGB CPDF_RenderStatus::GetFillArgb(const CPDF_PageObject* pObj,
+ FX_BOOL bType3) const {
+ CPDF_ColorStateData* pColorData =
+ (CPDF_ColorStateData*)(const CPDF_ColorStateData*)pObj->m_ColorState;
+ if (m_pType3Char && !bType3 &&
+ (!m_pType3Char->m_bColored ||
+ (m_pType3Char->m_bColored &&
+ (!pColorData || pColorData->m_FillColor.IsNull())))) {
+ return m_T3FillColor;
+ }
+ if (!pColorData || pColorData->m_FillColor.IsNull()) {
+ pColorData = (CPDF_ColorStateData*)(const CPDF_ColorStateData*)
+ m_InitialStates.m_ColorState;
+ }
+ FX_COLORREF rgb = pColorData->m_FillRGB;
+ if (rgb == (FX_DWORD)-1) {
+ return 0;
+ }
+ const CPDF_GeneralStateData* pGeneralData = pObj->m_GeneralState;
+ int alpha;
+ if (pGeneralData) {
+ alpha = (int32_t)(pGeneralData->m_FillAlpha * 255);
+ if (pGeneralData->m_pTR) {
+ if (!pGeneralData->m_pTransferFunc) {
+ ((CPDF_GeneralStateData*)pGeneralData)->m_pTransferFunc =
+ GetTransferFunc(pGeneralData->m_pTR);
+ }
+ if (pGeneralData->m_pTransferFunc) {
+ rgb = pGeneralData->m_pTransferFunc->TranslateColor(rgb);
+ }
+ }
+ } else {
+ alpha = 255;
+ }
+ return m_Options.TranslateColor(ArgbEncode(alpha, rgb));
+}
+FX_ARGB CPDF_RenderStatus::GetStrokeArgb(const CPDF_PageObject* pObj) const {
+ CPDF_ColorStateData* pColorData =
+ (CPDF_ColorStateData*)(const CPDF_ColorStateData*)pObj->m_ColorState;
+ if (m_pType3Char && (!m_pType3Char->m_bColored ||
+ (m_pType3Char->m_bColored &&
+ (!pColorData || pColorData->m_StrokeColor.IsNull())))) {
+ return m_T3FillColor;
+ }
+ if (!pColorData || pColorData->m_StrokeColor.IsNull()) {
+ pColorData = (CPDF_ColorStateData*)(const CPDF_ColorStateData*)
+ m_InitialStates.m_ColorState;
+ }
+ FX_COLORREF rgb = pColorData->m_StrokeRGB;
+ if (rgb == (FX_DWORD)-1) {
+ return 0;
+ }
+ const CPDF_GeneralStateData* pGeneralData = pObj->m_GeneralState;
+ int alpha;
+ if (pGeneralData) {
+ alpha = (int32_t)(pGeneralData->m_StrokeAlpha * 255);
+ if (pGeneralData->m_pTR) {
+ if (!pGeneralData->m_pTransferFunc) {
+ ((CPDF_GeneralStateData*)pGeneralData)->m_pTransferFunc =
+ GetTransferFunc(pGeneralData->m_pTR);
+ }
+ if (pGeneralData->m_pTransferFunc) {
+ rgb = pGeneralData->m_pTransferFunc->TranslateColor(rgb);
+ }
+ }
+ } else {
+ alpha = 255;
+ }
+ return m_Options.TranslateColor(ArgbEncode(alpha, rgb));
+}
+void CPDF_RenderStatus::ProcessClipPath(CPDF_ClipPath ClipPath,
+ const CFX_AffineMatrix* pObj2Device) {
+ if (ClipPath.IsNull()) {
+ if (m_LastClipPath.IsNull()) {
+ return;
}
- const CPDF_GeneralStateData* pGeneralData = pObj->m_GeneralState;
- int alpha;
- if (pGeneralData) {
- alpha = (int32_t)(pGeneralData->m_FillAlpha * 255);
- if (pGeneralData->m_pTR) {
- if (!pGeneralData->m_pTransferFunc) {
- ((CPDF_GeneralStateData*)pGeneralData)->m_pTransferFunc = GetTransferFunc(pGeneralData->m_pTR);
- }
- if (pGeneralData->m_pTransferFunc) {
- rgb = pGeneralData->m_pTransferFunc->TranslateColor(rgb);
- }
- }
+ m_pDevice->RestoreState(TRUE);
+ m_LastClipPath.SetNull();
+ return;
+ }
+ if (m_LastClipPath == ClipPath) {
+ return;
+ }
+ m_LastClipPath = ClipPath;
+ m_pDevice->RestoreState(TRUE);
+ int nClipPath = ClipPath.GetPathCount();
+ int i;
+ for (i = 0; i < nClipPath; i++) {
+ const CFX_PathData* pPathData = ClipPath.GetPath(i);
+ if (pPathData == NULL) {
+ continue;
+ }
+ if (pPathData->GetPointCount() == 0) {
+ CFX_PathData EmptyPath;
+ EmptyPath.AppendRect(-1, -1, 0, 0);
+ int fill_mode = FXFILL_WINDING;
+ m_pDevice->SetClip_PathFill(&EmptyPath, NULL, fill_mode);
} else {
- alpha = 255;
- }
- return m_Options.TranslateColor(ArgbEncode(alpha, rgb));
-}
-FX_ARGB CPDF_RenderStatus::GetStrokeArgb(const CPDF_PageObject* pObj) const
-{
- CPDF_ColorStateData* pColorData = (CPDF_ColorStateData*)(const CPDF_ColorStateData*)pObj->m_ColorState;
- if (m_pType3Char && (!m_pType3Char->m_bColored || (m_pType3Char->m_bColored && (!pColorData || pColorData->m_StrokeColor.IsNull())))) {
- return m_T3FillColor;
- }
- if (!pColorData || pColorData->m_StrokeColor.IsNull()) {
- pColorData = (CPDF_ColorStateData*)(const CPDF_ColorStateData*)m_InitialStates.m_ColorState;
- }
- FX_COLORREF rgb = pColorData->m_StrokeRGB;
- if (rgb == (FX_DWORD) - 1) {
- return 0;
- }
- const CPDF_GeneralStateData* pGeneralData = pObj->m_GeneralState;
- int alpha;
- if (pGeneralData) {
- alpha = (int32_t)(pGeneralData->m_StrokeAlpha * 255);
- if (pGeneralData->m_pTR) {
- if (!pGeneralData->m_pTransferFunc) {
- ((CPDF_GeneralStateData*)pGeneralData)->m_pTransferFunc = GetTransferFunc(pGeneralData->m_pTR);
- }
- if (pGeneralData->m_pTransferFunc) {
- rgb = pGeneralData->m_pTransferFunc->TranslateColor(rgb);
- }
+ int ClipType = ClipPath.GetClipType(i);
+ m_pDevice->SetClip_PathFill(pPathData, pObj2Device, ClipType);
+ }
+ }
+ int textcount = ClipPath.GetTextCount();
+ if (textcount == 0) {
+ return;
+ }
+ if (m_pDevice->GetDeviceClass() == FXDC_DISPLAY &&
+ !(m_pDevice->GetDeviceCaps(FXDC_RENDER_CAPS) & FXRC_SOFT_CLIP)) {
+ return;
+ }
+ CFX_PathData* pTextClippingPath = NULL;
+ for (i = 0; i < textcount; i++) {
+ CPDF_TextObject* pText = ClipPath.GetText(i);
+ if (pText == NULL) {
+ if (pTextClippingPath) {
+ int fill_mode = FXFILL_WINDING;
+ if (m_Options.m_Flags & RENDER_NOTEXTSMOOTH) {
+ fill_mode |= FXFILL_NOPATHSMOOTH;
}
+ m_pDevice->SetClip_PathFill(pTextClippingPath, NULL, fill_mode);
+ delete pTextClippingPath;
+ pTextClippingPath = NULL;
+ }
} else {
- alpha = 255;
- }
- return m_Options.TranslateColor(ArgbEncode(alpha, rgb));
-}
-void CPDF_RenderStatus::ProcessClipPath(CPDF_ClipPath ClipPath, const CFX_AffineMatrix* pObj2Device)
-{
- if (ClipPath.IsNull()) {
- if (m_LastClipPath.IsNull()) {
- return;
- }
- m_pDevice->RestoreState(TRUE);
- m_LastClipPath.SetNull();
- return;
- }
- if (m_LastClipPath == ClipPath) {
- return;
- }
- m_LastClipPath = ClipPath;
- m_pDevice->RestoreState(TRUE);
- int nClipPath = ClipPath.GetPathCount();
- int i;
- for (i = 0; i < nClipPath; i++) {
- const CFX_PathData* pPathData = ClipPath.GetPath(i);
- if (pPathData == NULL) {
- continue;
- }
- if (pPathData->GetPointCount() == 0) {
- CFX_PathData EmptyPath;
- EmptyPath.AppendRect(-1, -1, 0, 0);
- int fill_mode = FXFILL_WINDING;
- m_pDevice->SetClip_PathFill(&EmptyPath, NULL, fill_mode);
- } else {
- int ClipType = ClipPath.GetClipType(i);
- m_pDevice->SetClip_PathFill(pPathData, pObj2Device, ClipType);
- }
- }
- int textcount = ClipPath.GetTextCount();
- if (textcount == 0) {
- return;
- }
- if (m_pDevice->GetDeviceClass() == FXDC_DISPLAY && !(m_pDevice->GetDeviceCaps(FXDC_RENDER_CAPS) & FXRC_SOFT_CLIP)) {
- return;
- }
- CFX_PathData* pTextClippingPath = NULL;
- for (i = 0; i < textcount; i ++) {
- CPDF_TextObject* pText = ClipPath.GetText(i);
- if (pText == NULL) {
- if (pTextClippingPath) {
- int fill_mode = FXFILL_WINDING;
- if (m_Options.m_Flags & RENDER_NOTEXTSMOOTH) {
- fill_mode |= FXFILL_NOPATHSMOOTH;
- }
- m_pDevice->SetClip_PathFill(pTextClippingPath, NULL, fill_mode);
- delete pTextClippingPath;
- pTextClippingPath = NULL;
- }
- } else {
- if (pTextClippingPath == NULL) {
- pTextClippingPath = new CFX_PathData;
- }
- ProcessText(pText, pObj2Device, pTextClippingPath);
- }
- }
- delete pTextClippingPath;
-}
-void CPDF_RenderStatus::DrawClipPath(CPDF_ClipPath ClipPath, const CFX_AffineMatrix* pObj2Device)
-{
- if (ClipPath.IsNull()) {
- return;
- }
- int fill_mode = 0;
- if (m_Options.m_Flags & RENDER_NOPATHSMOOTH) {
- fill_mode |= FXFILL_NOPATHSMOOTH;
- }
- int nClipPath = ClipPath.GetPathCount();
- int i;
- for (i = 0; i < nClipPath; i++) {
- const CFX_PathData* pPathData = ClipPath.GetPath(i);
- if (pPathData == NULL) {
- continue;
- }
- CFX_GraphStateData stroke_state;
- if (m_Options.m_Flags & RENDER_THINLINE) {
- stroke_state.m_LineWidth = 0;
- }
- m_pDevice->DrawPath(pPathData, pObj2Device, &stroke_state, 0, 0xffff0000, fill_mode);
- }
-}
-FX_BOOL CPDF_RenderStatus::SelectClipPath(CPDF_PathObject* pPathObj, const CFX_AffineMatrix* pObj2Device, FX_BOOL bStroke)
-{
- CFX_AffineMatrix path_matrix = pPathObj->m_Matrix;
- path_matrix.Concat(*pObj2Device);
- if (bStroke) {
- CFX_GraphStateData graphState(*pPathObj->m_GraphState);
- if (m_Options.m_Flags & RENDER_THINLINE) {
- graphState.m_LineWidth = 0;
- }
- return m_pDevice->SetClip_PathStroke(pPathObj->m_Path, &path_matrix, &graphState);
- }
- int fill_mode = pPathObj->m_FillType;
- if (m_Options.m_Flags & RENDER_NOPATHSMOOTH) {
- fill_mode |= FXFILL_NOPATHSMOOTH;
- }
- return m_pDevice->SetClip_PathFill(pPathObj->m_Path, &path_matrix, fill_mode);
-}
-FX_BOOL CPDF_RenderStatus::ProcessTransparency(const CPDF_PageObject* pPageObj, const CFX_AffineMatrix* pObj2Device)
-{
- const CPDF_GeneralStateData* pGeneralState = pPageObj->m_GeneralState;
- int blend_type = pGeneralState ? pGeneralState->m_BlendType : FXDIB_BLEND_NORMAL;
- if (blend_type == FXDIB_BLEND_UNSUPPORTED) {
- return TRUE;
- }
- CPDF_Dictionary* pSMaskDict = pGeneralState ? (CPDF_Dictionary*)pGeneralState->m_pSoftMask : NULL;
- if (pSMaskDict) {
- if (pPageObj->m_Type == PDFPAGE_IMAGE &&
- ((CPDF_ImageObject*)pPageObj)->m_pImage->GetDict()->KeyExist(FX_BSTRC("SMask"))) {
- pSMaskDict = NULL;
- }
- }
- CPDF_Dictionary* pFormResource = NULL;
- FX_FLOAT group_alpha = 1.0f;
- int Transparency = m_Transparency;
- FX_BOOL bGroupTransparent = FALSE;
- if (pPageObj->m_Type == PDFPAGE_FORM) {
- CPDF_FormObject* pFormObj = (CPDF_FormObject*)pPageObj;
- const CPDF_GeneralStateData *pStateData = pFormObj->m_GeneralState.GetObject();
- if (pStateData) {
- group_alpha = pStateData->m_FillAlpha;
- }
- Transparency = pFormObj->m_pForm->m_Transparency;
- bGroupTransparent = Transparency & PDFTRANS_ISOLATED ? TRUE : FALSE;
- if (pFormObj->m_pForm->m_pFormDict) {
- pFormResource = pFormObj->m_pForm->m_pFormDict->GetDict("Resources");
- }
- }
- FX_BOOL bTextClip = FALSE;
- if (pPageObj->m_ClipPath.NotNull() && pPageObj->m_ClipPath.GetTextCount() &&
- m_pDevice->GetDeviceClass() == FXDC_DISPLAY && !(m_pDevice->GetDeviceCaps(FXDC_RENDER_CAPS) & FXRC_SOFT_CLIP)) {
- bTextClip = TRUE;
- }
- if ((m_Options.m_Flags & RENDER_OVERPRINT) && pPageObj->m_Type == PDFPAGE_IMAGE && pGeneralState && pGeneralState->m_FillOP && pGeneralState->m_StrokeOP) {
- CPDF_Document* pDocument = NULL;
- CPDF_Page* pPage = NULL;
- if (m_pContext->m_pPageCache) {
- pPage = m_pContext->m_pPageCache->GetPage();
- pDocument = pPage->m_pDocument;
- } else {
- pDocument = ((CPDF_ImageObject*)pPageObj)->m_pImage->GetDocument();
- }
- CPDF_Dictionary* pPageResources = pPage ? pPage->m_pPageResources : NULL;
- CPDF_Object* pCSObj = ((CPDF_ImageObject*)pPageObj)->m_pImage->GetStream()->GetDict()->GetElementValue(FX_BSTRC("ColorSpace"));
- CPDF_ColorSpace* pColorSpace = pDocument->LoadColorSpace(pCSObj, pPageResources);
- if (pColorSpace) {
- int format = pColorSpace->GetFamily();
- if (format == PDFCS_DEVICECMYK || format == PDFCS_SEPARATION || format == PDFCS_DEVICEN) {
- blend_type = FXDIB_BLEND_DARKEN;
- }
- pDocument->GetPageData()->ReleaseColorSpace(pCSObj);
- }
- }
- if (pSMaskDict == NULL && group_alpha == 1.0f && blend_type == FXDIB_BLEND_NORMAL && !bTextClip && !bGroupTransparent) {
- return FALSE;
- }
- FX_BOOL isolated = Transparency & PDFTRANS_ISOLATED;
- if (m_bPrint) {
- FX_BOOL bRet = FALSE;
- int rendCaps = m_pDevice->GetRenderCaps();
- if (!((Transparency & PDFTRANS_ISOLATED) || pSMaskDict || bTextClip) && (rendCaps & FXRC_BLEND_MODE)) {
- int oldBlend = m_curBlend;
- m_curBlend = blend_type;
- bRet = DrawObjWithBlend(pPageObj, pObj2Device);
- m_curBlend = oldBlend;
- }
- if (!bRet) {
- DrawObjWithBackground(pPageObj, pObj2Device);
- }
- return TRUE;
- }
- FX_RECT rect = pPageObj->GetBBox(pObj2Device);
- rect.Intersect(m_pDevice->GetClipBox());
- if (rect.IsEmpty()) {
- return TRUE;
- }
- CFX_Matrix deviceCTM = m_pDevice->GetCTM();
- FX_FLOAT scaleX = FXSYS_fabs(deviceCTM.a);
- FX_FLOAT scaleY = FXSYS_fabs(deviceCTM.d);
- int width = FXSYS_round((FX_FLOAT)rect.Width() * scaleX);
- int height = FXSYS_round((FX_FLOAT)rect.Height() * scaleY);
- CFX_FxgeDevice bitmap_device;
- CFX_DIBitmap* oriDevice = NULL;
- if (!isolated && (m_pDevice->GetRenderCaps() & FXRC_GET_BITS)) {
- oriDevice = new CFX_DIBitmap;
- if (!m_pDevice->CreateCompatibleBitmap(oriDevice, width, height)) {
- return TRUE;
- }
- m_pDevice->GetDIBits(oriDevice, rect.left, rect.top);
- }
- if (!bitmap_device.Create(width, height, FXDIB_Argb, 0, oriDevice)) {
- return TRUE;
- }
- CFX_DIBitmap* bitmap = bitmap_device.GetBitmap();
- bitmap->Clear(0);
- CFX_AffineMatrix new_matrix = *pObj2Device;
- new_matrix.TranslateI(-rect.left, -rect.top);
- new_matrix.Scale(scaleX, scaleY);
- CFX_DIBitmap* pTextMask = NULL;
- if (bTextClip) {
- pTextMask = new CFX_DIBitmap;
- if (!pTextMask->Create(width, height, FXDIB_8bppMask)) {
- delete pTextMask;
- return TRUE;
- }
- pTextMask->Clear(0);
- CFX_FxgeDevice text_device;
- text_device.Attach(pTextMask);
- for (FX_DWORD i = 0; i < pPageObj->m_ClipPath.GetTextCount(); i ++) {
- CPDF_TextObject* textobj = pPageObj->m_ClipPath.GetText(i);
- if (textobj == NULL) {
- break;
- }
- CFX_AffineMatrix text_matrix;
- textobj->GetTextMatrix(&text_matrix);
- CPDF_TextRenderer::DrawTextPath(&text_device, textobj->m_nChars, textobj->m_pCharCodes, textobj->m_pCharPos,
- textobj->m_TextState.GetFont(), textobj->m_TextState.GetFontSize(),
- &text_matrix, &new_matrix, textobj->m_GraphState, (FX_ARGB) - 1, 0, NULL);
- }
- }
- CPDF_RenderStatus bitmap_render;
- bitmap_render.Initialize(m_pContext, &bitmap_device, NULL,
- m_pStopObj, NULL, NULL, &m_Options, 0, m_bDropObjects, pFormResource, TRUE);
- bitmap_render.ProcessObjectNoClip(pPageObj, &new_matrix);
- m_bStopped = bitmap_render.m_bStopped;
- if (pSMaskDict) {
- CFX_AffineMatrix smask_matrix;
- FXSYS_memcpy(&smask_matrix, pGeneralState->m_SMaskMatrix, sizeof smask_matrix);
- smask_matrix.Concat(*pObj2Device);
- CFX_DIBSource* pSMaskSource = LoadSMask(pSMaskDict, &rect, &smask_matrix);
- if (pSMaskSource) {
- bitmap->MultiplyAlpha(pSMaskSource);
- delete pSMaskSource;
- }
- }
- if (pTextMask) {
- bitmap->MultiplyAlpha(pTextMask);
- delete pTextMask;
- pTextMask = NULL;
- }
- if (Transparency & PDFTRANS_GROUP && group_alpha != 1.0f) {
- bitmap->MultiplyAlpha((int32_t)(group_alpha * 255));
- }
- Transparency = m_Transparency;
- if (pPageObj->m_Type == PDFPAGE_FORM) {
- Transparency |= PDFTRANS_GROUP;
- }
- CompositeDIBitmap(bitmap, rect.left, rect.top, 0, 255, blend_type, Transparency);
- delete oriDevice;
+ if (pTextClippingPath == NULL) {
+ pTextClippingPath = new CFX_PathData;
+ }
+ ProcessText(pText, pObj2Device, pTextClippingPath);
+ }
+ }
+ delete pTextClippingPath;
+}
+void CPDF_RenderStatus::DrawClipPath(CPDF_ClipPath ClipPath,
+ const CFX_AffineMatrix* pObj2Device) {
+ if (ClipPath.IsNull()) {
+ return;
+ }
+ int fill_mode = 0;
+ if (m_Options.m_Flags & RENDER_NOPATHSMOOTH) {
+ fill_mode |= FXFILL_NOPATHSMOOTH;
+ }
+ int nClipPath = ClipPath.GetPathCount();
+ int i;
+ for (i = 0; i < nClipPath; i++) {
+ const CFX_PathData* pPathData = ClipPath.GetPath(i);
+ if (pPathData == NULL) {
+ continue;
+ }
+ CFX_GraphStateData stroke_state;
+ if (m_Options.m_Flags & RENDER_THINLINE) {
+ stroke_state.m_LineWidth = 0;
+ }
+ m_pDevice->DrawPath(pPathData, pObj2Device, &stroke_state, 0, 0xffff0000,
+ fill_mode);
+ }
+}
+FX_BOOL CPDF_RenderStatus::SelectClipPath(CPDF_PathObject* pPathObj,
+ const CFX_AffineMatrix* pObj2Device,
+ FX_BOOL bStroke) {
+ CFX_AffineMatrix path_matrix = pPathObj->m_Matrix;
+ path_matrix.Concat(*pObj2Device);
+ if (bStroke) {
+ CFX_GraphStateData graphState(*pPathObj->m_GraphState);
+ if (m_Options.m_Flags & RENDER_THINLINE) {
+ graphState.m_LineWidth = 0;
+ }
+ return m_pDevice->SetClip_PathStroke(pPathObj->m_Path, &path_matrix,
+ &graphState);
+ }
+ int fill_mode = pPathObj->m_FillType;
+ if (m_Options.m_Flags & RENDER_NOPATHSMOOTH) {
+ fill_mode |= FXFILL_NOPATHSMOOTH;
+ }
+ return m_pDevice->SetClip_PathFill(pPathObj->m_Path, &path_matrix, fill_mode);
+}
+FX_BOOL CPDF_RenderStatus::ProcessTransparency(
+ const CPDF_PageObject* pPageObj,
+ const CFX_AffineMatrix* pObj2Device) {
+ const CPDF_GeneralStateData* pGeneralState = pPageObj->m_GeneralState;
+ int blend_type =
+ pGeneralState ? pGeneralState->m_BlendType : FXDIB_BLEND_NORMAL;
+ if (blend_type == FXDIB_BLEND_UNSUPPORTED) {
return TRUE;
-}
-CFX_DIBitmap* CPDF_RenderStatus::GetBackdrop(const CPDF_PageObject* pObj, const FX_RECT& rect, int& left, int& top,
- FX_BOOL bBackAlphaRequired)
-{
- FX_RECT bbox = rect;
- bbox.Intersect(m_pDevice->GetClipBox());
- left = bbox.left;
- top = bbox.top;
- CFX_Matrix deviceCTM = m_pDevice->GetCTM();
- FX_FLOAT scaleX = FXSYS_fabs(deviceCTM.a);
- FX_FLOAT scaleY = FXSYS_fabs(deviceCTM.d);
- int width = FXSYS_round(bbox.Width() * scaleX);
- int height = FXSYS_round(bbox.Height() * scaleY);
- CFX_DIBitmap* pBackdrop = new CFX_DIBitmap;
- if (bBackAlphaRequired && !m_bDropObjects) {
- pBackdrop->Create(width, height, FXDIB_Argb);
- } else {
- m_pDevice->CreateCompatibleBitmap(pBackdrop, width, height);
- }
- if (pBackdrop->GetBuffer() == NULL) {
- delete pBackdrop;
- return NULL;
- }
- FX_BOOL bNeedDraw;
- if (pBackdrop->HasAlpha()) {
- bNeedDraw = !(m_pDevice->GetRenderCaps() & FXRC_ALPHA_OUTPUT);
+ }
+ CPDF_Dictionary* pSMaskDict =
+ pGeneralState ? (CPDF_Dictionary*)pGeneralState->m_pSoftMask : NULL;
+ if (pSMaskDict) {
+ if (pPageObj->m_Type == PDFPAGE_IMAGE &&
+ ((CPDF_ImageObject*)pPageObj)
+ ->m_pImage->GetDict()
+ ->KeyExist(FX_BSTRC("SMask"))) {
+ pSMaskDict = NULL;
+ }
+ }
+ CPDF_Dictionary* pFormResource = NULL;
+ FX_FLOAT group_alpha = 1.0f;
+ int Transparency = m_Transparency;
+ FX_BOOL bGroupTransparent = FALSE;
+ if (pPageObj->m_Type == PDFPAGE_FORM) {
+ CPDF_FormObject* pFormObj = (CPDF_FormObject*)pPageObj;
+ const CPDF_GeneralStateData* pStateData =
+ pFormObj->m_GeneralState.GetObject();
+ if (pStateData) {
+ group_alpha = pStateData->m_FillAlpha;
+ }
+ Transparency = pFormObj->m_pForm->m_Transparency;
+ bGroupTransparent = Transparency & PDFTRANS_ISOLATED ? TRUE : FALSE;
+ if (pFormObj->m_pForm->m_pFormDict) {
+ pFormResource = pFormObj->m_pForm->m_pFormDict->GetDict("Resources");
+ }
+ }
+ FX_BOOL bTextClip = FALSE;
+ if (pPageObj->m_ClipPath.NotNull() && pPageObj->m_ClipPath.GetTextCount() &&
+ m_pDevice->GetDeviceClass() == FXDC_DISPLAY &&
+ !(m_pDevice->GetDeviceCaps(FXDC_RENDER_CAPS) & FXRC_SOFT_CLIP)) {
+ bTextClip = TRUE;
+ }
+ if ((m_Options.m_Flags & RENDER_OVERPRINT) &&
+ pPageObj->m_Type == PDFPAGE_IMAGE && pGeneralState &&
+ pGeneralState->m_FillOP && pGeneralState->m_StrokeOP) {
+ CPDF_Document* pDocument = NULL;
+ CPDF_Page* pPage = NULL;
+ if (m_pContext->m_pPageCache) {
+ pPage = m_pContext->m_pPageCache->GetPage();
+ pDocument = pPage->m_pDocument;
} else {
- bNeedDraw = !(m_pDevice->GetRenderCaps() & FXRC_GET_BITS);
+ pDocument = ((CPDF_ImageObject*)pPageObj)->m_pImage->GetDocument();
+ }
+ CPDF_Dictionary* pPageResources = pPage ? pPage->m_pPageResources : NULL;
+ CPDF_Object* pCSObj = ((CPDF_ImageObject*)pPageObj)
+ ->m_pImage->GetStream()
+ ->GetDict()
+ ->GetElementValue(FX_BSTRC("ColorSpace"));
+ CPDF_ColorSpace* pColorSpace =
+ pDocument->LoadColorSpace(pCSObj, pPageResources);
+ if (pColorSpace) {
+ int format = pColorSpace->GetFamily();
+ if (format == PDFCS_DEVICECMYK || format == PDFCS_SEPARATION ||
+ format == PDFCS_DEVICEN) {
+ blend_type = FXDIB_BLEND_DARKEN;
+ }
+ pDocument->GetPageData()->ReleaseColorSpace(pCSObj);
+ }
+ }
+ if (pSMaskDict == NULL && group_alpha == 1.0f &&
+ blend_type == FXDIB_BLEND_NORMAL && !bTextClip && !bGroupTransparent) {
+ return FALSE;
+ }
+ FX_BOOL isolated = Transparency & PDFTRANS_ISOLATED;
+ if (m_bPrint) {
+ FX_BOOL bRet = FALSE;
+ int rendCaps = m_pDevice->GetRenderCaps();
+ if (!((Transparency & PDFTRANS_ISOLATED) || pSMaskDict || bTextClip) &&
+ (rendCaps & FXRC_BLEND_MODE)) {
+ int oldBlend = m_curBlend;
+ m_curBlend = blend_type;
+ bRet = DrawObjWithBlend(pPageObj, pObj2Device);
+ m_curBlend = oldBlend;
}
- if (!bNeedDraw) {
- m_pDevice->GetDIBits(pBackdrop, left, top);
- return pBackdrop;
+ if (!bRet) {
+ DrawObjWithBackground(pPageObj, pObj2Device);
}
- CFX_AffineMatrix FinalMatrix = m_DeviceMatrix;
- FinalMatrix.TranslateI(-left, -top);
- FinalMatrix.Scale(scaleX, scaleY);
- pBackdrop->Clear(pBackdrop->HasAlpha() ? 0 : 0xffffffff);
- CFX_FxgeDevice device;
- device.Attach(pBackdrop);
- m_pContext->Render(&device, pObj, &m_Options, &FinalMatrix);
+ return TRUE;
+ }
+ FX_RECT rect = pPageObj->GetBBox(pObj2Device);
+ rect.Intersect(m_pDevice->GetClipBox());
+ if (rect.IsEmpty()) {
+ return TRUE;
+ }
+ CFX_Matrix deviceCTM = m_pDevice->GetCTM();
+ FX_FLOAT scaleX = FXSYS_fabs(deviceCTM.a);
+ FX_FLOAT scaleY = FXSYS_fabs(deviceCTM.d);
+ int width = FXSYS_round((FX_FLOAT)rect.Width() * scaleX);
+ int height = FXSYS_round((FX_FLOAT)rect.Height() * scaleY);
+ CFX_FxgeDevice bitmap_device;
+ CFX_DIBitmap* oriDevice = NULL;
+ if (!isolated && (m_pDevice->GetRenderCaps() & FXRC_GET_BITS)) {
+ oriDevice = new CFX_DIBitmap;
+ if (!m_pDevice->CreateCompatibleBitmap(oriDevice, width, height)) {
+ return TRUE;
+ }
+ m_pDevice->GetDIBits(oriDevice, rect.left, rect.top);
+ }
+ if (!bitmap_device.Create(width, height, FXDIB_Argb, 0, oriDevice)) {
+ return TRUE;
+ }
+ CFX_DIBitmap* bitmap = bitmap_device.GetBitmap();
+ bitmap->Clear(0);
+ CFX_AffineMatrix new_matrix = *pObj2Device;
+ new_matrix.TranslateI(-rect.left, -rect.top);
+ new_matrix.Scale(scaleX, scaleY);
+ CFX_DIBitmap* pTextMask = NULL;
+ if (bTextClip) {
+ pTextMask = new CFX_DIBitmap;
+ if (!pTextMask->Create(width, height, FXDIB_8bppMask)) {
+ delete pTextMask;
+ return TRUE;
+ }
+ pTextMask->Clear(0);
+ CFX_FxgeDevice text_device;
+ text_device.Attach(pTextMask);
+ for (FX_DWORD i = 0; i < pPageObj->m_ClipPath.GetTextCount(); i++) {
+ CPDF_TextObject* textobj = pPageObj->m_ClipPath.GetText(i);
+ if (textobj == NULL) {
+ break;
+ }
+ CFX_AffineMatrix text_matrix;
+ textobj->GetTextMatrix(&text_matrix);
+ CPDF_TextRenderer::DrawTextPath(
+ &text_device, textobj->m_nChars, textobj->m_pCharCodes,
+ textobj->m_pCharPos, textobj->m_TextState.GetFont(),
+ textobj->m_TextState.GetFontSize(), &text_matrix, &new_matrix,
+ textobj->m_GraphState, (FX_ARGB)-1, 0, NULL);
+ }
+ }
+ CPDF_RenderStatus bitmap_render;
+ bitmap_render.Initialize(m_pContext, &bitmap_device, NULL, m_pStopObj, NULL,
+ NULL, &m_Options, 0, m_bDropObjects, pFormResource,
+ TRUE);
+ bitmap_render.ProcessObjectNoClip(pPageObj, &new_matrix);
+ m_bStopped = bitmap_render.m_bStopped;
+ if (pSMaskDict) {
+ CFX_AffineMatrix smask_matrix;
+ FXSYS_memcpy(&smask_matrix, pGeneralState->m_SMaskMatrix,
+ sizeof smask_matrix);
+ smask_matrix.Concat(*pObj2Device);
+ CFX_DIBSource* pSMaskSource = LoadSMask(pSMaskDict, &rect, &smask_matrix);
+ if (pSMaskSource) {
+ bitmap->MultiplyAlpha(pSMaskSource);
+ delete pSMaskSource;
+ }
+ }
+ if (pTextMask) {
+ bitmap->MultiplyAlpha(pTextMask);
+ delete pTextMask;
+ pTextMask = NULL;
+ }
+ if (Transparency & PDFTRANS_GROUP && group_alpha != 1.0f) {
+ bitmap->MultiplyAlpha((int32_t)(group_alpha * 255));
+ }
+ Transparency = m_Transparency;
+ if (pPageObj->m_Type == PDFPAGE_FORM) {
+ Transparency |= PDFTRANS_GROUP;
+ }
+ CompositeDIBitmap(bitmap, rect.left, rect.top, 0, 255, blend_type,
+ Transparency);
+ delete oriDevice;
+ return TRUE;
+}
+CFX_DIBitmap* CPDF_RenderStatus::GetBackdrop(const CPDF_PageObject* pObj,
+ const FX_RECT& rect,
+ int& left,
+ int& top,
+ FX_BOOL bBackAlphaRequired) {
+ FX_RECT bbox = rect;
+ bbox.Intersect(m_pDevice->GetClipBox());
+ left = bbox.left;
+ top = bbox.top;
+ CFX_Matrix deviceCTM = m_pDevice->GetCTM();
+ FX_FLOAT scaleX = FXSYS_fabs(deviceCTM.a);
+ FX_FLOAT scaleY = FXSYS_fabs(deviceCTM.d);
+ int width = FXSYS_round(bbox.Width() * scaleX);
+ int height = FXSYS_round(bbox.Height() * scaleY);
+ CFX_DIBitmap* pBackdrop = new CFX_DIBitmap;
+ if (bBackAlphaRequired && !m_bDropObjects) {
+ pBackdrop->Create(width, height, FXDIB_Argb);
+ } else {
+ m_pDevice->CreateCompatibleBitmap(pBackdrop, width, height);
+ }
+ if (pBackdrop->GetBuffer() == NULL) {
+ delete pBackdrop;
+ return NULL;
+ }
+ FX_BOOL bNeedDraw;
+ if (pBackdrop->HasAlpha()) {
+ bNeedDraw = !(m_pDevice->GetRenderCaps() & FXRC_ALPHA_OUTPUT);
+ } else {
+ bNeedDraw = !(m_pDevice->GetRenderCaps() & FXRC_GET_BITS);
+ }
+ if (!bNeedDraw) {
+ m_pDevice->GetDIBits(pBackdrop, left, top);
return pBackdrop;
-}
-void CPDF_RenderContext::GetBackground(CFX_DIBitmap* pBuffer, const CPDF_PageObject* pObj,
- const CPDF_RenderOptions* pOptions, CFX_AffineMatrix* pFinalMatrix)
-{
- CFX_FxgeDevice device;
- device.Attach(pBuffer);
+ }
+ CFX_AffineMatrix FinalMatrix = m_DeviceMatrix;
+ FinalMatrix.TranslateI(-left, -top);
+ FinalMatrix.Scale(scaleX, scaleY);
+ pBackdrop->Clear(pBackdrop->HasAlpha() ? 0 : 0xffffffff);
+ CFX_FxgeDevice device;
+ device.Attach(pBackdrop);
+ m_pContext->Render(&device, pObj, &m_Options, &FinalMatrix);
+ return pBackdrop;
+}
+void CPDF_RenderContext::GetBackground(CFX_DIBitmap* pBuffer,
+ const CPDF_PageObject* pObj,
+ const CPDF_RenderOptions* pOptions,
+ CFX_AffineMatrix* pFinalMatrix) {
+ CFX_FxgeDevice device;
+ device.Attach(pBuffer);
- FX_RECT rect(0, 0, device.GetWidth(), device.GetHeight());
- device.FillRect(&rect, 0xffffffff);
- Render(&device, pObj, pOptions, pFinalMatrix);
-}
-CPDF_GraphicStates* CPDF_RenderStatus::CloneObjStates(const CPDF_GraphicStates* pSrcStates, FX_BOOL bStroke)
-{
- if (!pSrcStates) {
- return NULL;
- }
- CPDF_GraphicStates* pStates = new CPDF_GraphicStates;
- pStates->CopyStates(*pSrcStates);
- CPDF_Color* pObjColor = bStroke ? pSrcStates->m_ColorState.GetStrokeColor() :
- pSrcStates->m_ColorState.GetFillColor();
- if (!pObjColor->IsNull()) {
- CPDF_ColorStateData* pColorData = pStates->m_ColorState.GetModify();
- pColorData->m_FillRGB = bStroke ? pSrcStates->m_ColorState.GetObject()->m_StrokeRGB :
- pSrcStates->m_ColorState.GetObject()->m_FillRGB;
- pColorData->m_StrokeRGB = pColorData->m_FillRGB;
- }
- return pStates;
-}
-CPDF_RenderContext::CPDF_RenderContext()
-{
-}
-void CPDF_RenderContext::Create(CPDF_Document* pDoc, CPDF_PageRenderCache* pPageCache,
- CPDF_Dictionary* pPageResources, FX_BOOL bFirstLayer)
-{
- m_pDocument = pDoc;
- m_pPageResources = pPageResources;
- m_pPageCache = pPageCache;
- m_bFirstLayer = bFirstLayer;
-}
-void CPDF_RenderContext::Create(CPDF_Page* pPage, FX_BOOL bFirstLayer)
-{
- m_pDocument = pPage->m_pDocument;
- m_pPageResources = pPage->m_pPageResources;
- m_pPageCache = pPage->GetRenderCache();
- m_bFirstLayer = bFirstLayer;
-}
-CPDF_RenderContext::~CPDF_RenderContext()
-{
-}
-void CPDF_RenderContext::Clear()
-{
- m_pDocument = NULL;
- m_pPageResources = NULL;
- m_pPageCache = NULL;
- m_bFirstLayer = TRUE;
- m_ContentList.RemoveAll();
-}
-void CPDF_RenderContext::AppendObjectList(CPDF_PageObjects* pObjs, const CFX_AffineMatrix* pObject2Device)
-{
- _PDF_RenderItem* pItem = m_ContentList.AddSpace();
- pItem->m_pObjectList = pObjs;
- if (pObject2Device) {
- pItem->m_Matrix = *pObject2Device;
+ FX_RECT rect(0, 0, device.GetWidth(), device.GetHeight());
+ device.FillRect(&rect, 0xffffffff);
+ Render(&device, pObj, pOptions, pFinalMatrix);
+}
+CPDF_GraphicStates* CPDF_RenderStatus::CloneObjStates(
+ const CPDF_GraphicStates* pSrcStates,
+ FX_BOOL bStroke) {
+ if (!pSrcStates) {
+ return NULL;
+ }
+ CPDF_GraphicStates* pStates = new CPDF_GraphicStates;
+ pStates->CopyStates(*pSrcStates);
+ CPDF_Color* pObjColor = bStroke ? pSrcStates->m_ColorState.GetStrokeColor()
+ : pSrcStates->m_ColorState.GetFillColor();
+ if (!pObjColor->IsNull()) {
+ CPDF_ColorStateData* pColorData = pStates->m_ColorState.GetModify();
+ pColorData->m_FillRGB =
+ bStroke ? pSrcStates->m_ColorState.GetObject()->m_StrokeRGB
+ : pSrcStates->m_ColorState.GetObject()->m_FillRGB;
+ pColorData->m_StrokeRGB = pColorData->m_FillRGB;
+ }
+ return pStates;
+}
+CPDF_RenderContext::CPDF_RenderContext() {}
+void CPDF_RenderContext::Create(CPDF_Document* pDoc,
+ CPDF_PageRenderCache* pPageCache,
+ CPDF_Dictionary* pPageResources,
+ FX_BOOL bFirstLayer) {
+ m_pDocument = pDoc;
+ m_pPageResources = pPageResources;
+ m_pPageCache = pPageCache;
+ m_bFirstLayer = bFirstLayer;
+}
+void CPDF_RenderContext::Create(CPDF_Page* pPage, FX_BOOL bFirstLayer) {
+ m_pDocument = pPage->m_pDocument;
+ m_pPageResources = pPage->m_pPageResources;
+ m_pPageCache = pPage->GetRenderCache();
+ m_bFirstLayer = bFirstLayer;
+}
+CPDF_RenderContext::~CPDF_RenderContext() {}
+void CPDF_RenderContext::Clear() {
+ m_pDocument = NULL;
+ m_pPageResources = NULL;
+ m_pPageCache = NULL;
+ m_bFirstLayer = TRUE;
+ m_ContentList.RemoveAll();
+}
+void CPDF_RenderContext::AppendObjectList(
+ CPDF_PageObjects* pObjs,
+ const CFX_AffineMatrix* pObject2Device) {
+ _PDF_RenderItem* pItem = m_ContentList.AddSpace();
+ pItem->m_pObjectList = pObjs;
+ if (pObject2Device) {
+ pItem->m_Matrix = *pObject2Device;
+ } else {
+ pItem->m_Matrix.SetIdentity();
+ }
+}
+void CPDF_RenderContext::Render(CFX_RenderDevice* pDevice,
+ const CPDF_RenderOptions* pOptions,
+ const CFX_AffineMatrix* pLastMatrix) {
+ Render(pDevice, NULL, pOptions, pLastMatrix);
+}
+void CPDF_RenderContext::Render(CFX_RenderDevice* pDevice,
+ const CPDF_PageObject* pStopObj,
+ const CPDF_RenderOptions* pOptions,
+ const CFX_AffineMatrix* pLastMatrix) {
+ int count = m_ContentList.GetSize();
+ for (int j = 0; j < count; j++) {
+ pDevice->SaveState();
+ _PDF_RenderItem* pItem = m_ContentList.GetDataPtr(j);
+ if (pLastMatrix) {
+ CFX_AffineMatrix FinalMatrix = pItem->m_Matrix;
+ FinalMatrix.Concat(*pLastMatrix);
+ CPDF_RenderStatus status;
+ status.Initialize(this, pDevice, pLastMatrix, pStopObj, NULL, NULL,
+ pOptions, pItem->m_pObjectList->m_Transparency, FALSE,
+ NULL);
+ status.RenderObjectList(pItem->m_pObjectList, &FinalMatrix);
+ if (status.m_Options.m_Flags & RENDER_LIMITEDIMAGECACHE) {
+ m_pPageCache->CacheOptimization(status.m_Options.m_dwLimitCacheSize);
+ }
+ if (status.m_bStopped) {
+ pDevice->RestoreState();
+ break;
+ }
} else {
- pItem->m_Matrix.SetIdentity();
- }
-}
-void CPDF_RenderContext::Render(CFX_RenderDevice* pDevice, const CPDF_RenderOptions* pOptions,
- const CFX_AffineMatrix* pLastMatrix)
-{
- Render(pDevice, NULL, pOptions, pLastMatrix);
-}
-void CPDF_RenderContext::Render(CFX_RenderDevice* pDevice, const CPDF_PageObject* pStopObj,
- const CPDF_RenderOptions* pOptions, const CFX_AffineMatrix* pLastMatrix)
-{
- int count = m_ContentList.GetSize();
- for (int j = 0; j < count; j ++) {
- pDevice->SaveState();
- _PDF_RenderItem* pItem = m_ContentList.GetDataPtr(j);
- if (pLastMatrix) {
- CFX_AffineMatrix FinalMatrix = pItem->m_Matrix;
- FinalMatrix.Concat(*pLastMatrix);
- CPDF_RenderStatus status;
- status.Initialize(this, pDevice, pLastMatrix, pStopObj, NULL, NULL, pOptions,
- pItem->m_pObjectList->m_Transparency, FALSE, NULL);
- status.RenderObjectList(pItem->m_pObjectList, &FinalMatrix);
- if (status.m_Options.m_Flags & RENDER_LIMITEDIMAGECACHE) {
- m_pPageCache->CacheOptimization(status.m_Options.m_dwLimitCacheSize);
- }
- if (status.m_bStopped) {
- pDevice->RestoreState();
- break;
- }
- } else {
- CPDF_RenderStatus status;
- status.Initialize(this, pDevice, NULL, pStopObj, NULL, NULL, pOptions,
- pItem->m_pObjectList->m_Transparency, FALSE, NULL);
- status.RenderObjectList(pItem->m_pObjectList, &pItem->m_Matrix);
- if (status.m_Options.m_Flags & RENDER_LIMITEDIMAGECACHE) {
- m_pPageCache->CacheOptimization(status.m_Options.m_dwLimitCacheSize);
- }
- if (status.m_bStopped) {
- pDevice->RestoreState();
- break;
- }
- }
+ CPDF_RenderStatus status;
+ status.Initialize(this, pDevice, NULL, pStopObj, NULL, NULL, pOptions,
+ pItem->m_pObjectList->m_Transparency, FALSE, NULL);
+ status.RenderObjectList(pItem->m_pObjectList, &pItem->m_Matrix);
+ if (status.m_Options.m_Flags & RENDER_LIMITEDIMAGECACHE) {
+ m_pPageCache->CacheOptimization(status.m_Options.m_dwLimitCacheSize);
+ }
+ if (status.m_bStopped) {
pDevice->RestoreState();
+ break;
+ }
}
+ pDevice->RestoreState();
+ }
}
-void CPDF_RenderContext::DrawObjectList(CFX_RenderDevice* pDevice, CPDF_PageObjects* pObjs,
- const CFX_AffineMatrix* pObject2Device, const CPDF_RenderOptions* pOptions)
-{
- AppendObjectList(pObjs, pObject2Device);
- Render(pDevice, pOptions);
+void CPDF_RenderContext::DrawObjectList(CFX_RenderDevice* pDevice,
+ CPDF_PageObjects* pObjs,
+ const CFX_AffineMatrix* pObject2Device,
+ const CPDF_RenderOptions* pOptions) {
+ AppendObjectList(pObjs, pObject2Device);
+ Render(pDevice, pOptions);
}
CPDF_ProgressiveRenderer::CPDF_ProgressiveRenderer(
CPDF_RenderContext* pContext,
CFX_RenderDevice* pDevice,
- const CPDF_RenderOptions* pOptions) :
- m_Status(Ready),
- m_pContext(pContext),
- m_pDevice(pDevice),
- m_pOptions(pOptions),
- m_LayerIndex(0),
- m_ObjectIndex(0),
- m_ObjectPos(nullptr),
- m_PrevLastPos(nullptr)
-{
-}
+ const CPDF_RenderOptions* pOptions)
+ : m_Status(Ready),
+ m_pContext(pContext),
+ m_pDevice(pDevice),
+ m_pOptions(pOptions),
+ m_LayerIndex(0),
+ m_ObjectIndex(0),
+ m_ObjectPos(nullptr),
+ m_PrevLastPos(nullptr) {}
-CPDF_ProgressiveRenderer::~CPDF_ProgressiveRenderer()
-{
- if (m_pRenderStatus)
- m_pDevice->RestoreState();
+CPDF_ProgressiveRenderer::~CPDF_ProgressiveRenderer() {
+ if (m_pRenderStatus)
+ m_pDevice->RestoreState();
}
-void CPDF_ProgressiveRenderer::Start(IFX_Pause* pPause)
-{
- if (!m_pContext || !m_pDevice || m_Status != Ready) {
- m_Status = Failed;
- return;
- }
- m_Status = ToBeContinued;
- Continue(pPause);
+void CPDF_ProgressiveRenderer::Start(IFX_Pause* pPause) {
+ if (!m_pContext || !m_pDevice || m_Status != Ready) {
+ m_Status = Failed;
+ return;
+ }
+ m_Status = ToBeContinued;
+ Continue(pPause);
}
#define RENDER_STEP_LIMIT 100
-void CPDF_ProgressiveRenderer::Continue(IFX_Pause* pPause)
-{
- if (m_Status != ToBeContinued) {
- return;
- }
- FX_DWORD nLayers = m_pContext->m_ContentList.GetSize();
- for (; m_LayerIndex < nLayers; m_LayerIndex ++) {
- _PDF_RenderItem* pItem = m_pContext->m_ContentList.GetDataPtr(m_LayerIndex);
- FX_POSITION LastPos = pItem->m_pObjectList->GetLastObjectPosition();
- if (m_ObjectPos == NULL) {
- if (LastPos == m_PrevLastPos) {
- if (!pItem->m_pObjectList->IsParsed()) {
- pItem->m_pObjectList->ContinueParse(pPause);
- if (!pItem->m_pObjectList->IsParsed()) {
- return;
- }
- LastPos = pItem->m_pObjectList->GetLastObjectPosition();
- }
- }
- if (LastPos == m_PrevLastPos) {
- if (m_pRenderStatus) {
- m_pRenderStatus.reset();
- m_pDevice->RestoreState();
- m_ObjectPos = NULL;
- m_PrevLastPos = NULL;
- }
- continue;
- }
- if (m_PrevLastPos) {
- m_ObjectPos = m_PrevLastPos;
- pItem->m_pObjectList->GetNextObject(m_ObjectPos);
- } else {
- m_ObjectPos = pItem->m_pObjectList->GetFirstObjectPosition();
- }
- m_PrevLastPos = LastPos;
+void CPDF_ProgressiveRenderer::Continue(IFX_Pause* pPause) {
+ if (m_Status != ToBeContinued) {
+ return;
+ }
+ FX_DWORD nLayers = m_pContext->m_ContentList.GetSize();
+ for (; m_LayerIndex < nLayers; m_LayerIndex++) {
+ _PDF_RenderItem* pItem = m_pContext->m_ContentList.GetDataPtr(m_LayerIndex);
+ FX_POSITION LastPos = pItem->m_pObjectList->GetLastObjectPosition();
+ if (m_ObjectPos == NULL) {
+ if (LastPos == m_PrevLastPos) {
+ if (!pItem->m_pObjectList->IsParsed()) {
+ pItem->m_pObjectList->ContinueParse(pPause);
+ if (!pItem->m_pObjectList->IsParsed()) {
+ return;
+ }
+ LastPos = pItem->m_pObjectList->GetLastObjectPosition();
}
- if (!m_pRenderStatus) {
- m_ObjectPos = pItem->m_pObjectList->GetFirstObjectPosition();
- m_ObjectIndex = 0;
- m_pRenderStatus.reset(new CPDF_RenderStatus());
- m_pRenderStatus->Initialize(
- m_pContext, m_pDevice, NULL, NULL, NULL, NULL, m_pOptions,
- pItem->m_pObjectList->m_Transparency, FALSE, NULL);
- m_pDevice->SaveState();
- m_ClipRect = m_pDevice->GetClipBox();
- CFX_AffineMatrix device2object;
- device2object.SetReverse(pItem->m_Matrix);
- device2object.TransformRect(m_ClipRect);
+ }
+ if (LastPos == m_PrevLastPos) {
+ if (m_pRenderStatus) {
+ m_pRenderStatus.reset();
+ m_pDevice->RestoreState();
+ m_ObjectPos = NULL;
+ m_PrevLastPos = NULL;
}
- int objs_to_go = CPDF_ModuleMgr::Get()->GetRenderModule()->GetConfig()->m_RenderStepLimit;
- while (m_ObjectPos) {
- CPDF_PageObject* pCurObj = pItem->m_pObjectList->GetObjectAt(m_ObjectPos);
- if (pCurObj && pCurObj->m_Left <= m_ClipRect.right && pCurObj->m_Right >= m_ClipRect.left &&
- pCurObj->m_Bottom <= m_ClipRect.top && pCurObj->m_Top >= m_ClipRect.bottom) {
- if (m_pRenderStatus->ContinueSingleObject(pCurObj, &pItem->m_Matrix, pPause)) {
- return;
- }
- if (pCurObj->m_Type == PDFPAGE_IMAGE && m_pRenderStatus->m_Options.m_Flags & RENDER_LIMITEDIMAGECACHE) {
- m_pContext->GetPageCache()->CacheOptimization(m_pRenderStatus->m_Options.m_dwLimitCacheSize);
- }
- if (pCurObj->m_Type == PDFPAGE_FORM || pCurObj->m_Type == PDFPAGE_SHADING) {
- objs_to_go = 0;
- } else {
- objs_to_go --;
- }
- }
- m_ObjectIndex ++;
- pItem->m_pObjectList->GetNextObject(m_ObjectPos);
- if (objs_to_go == 0) {
- if (pPause && pPause->NeedToPauseNow()) {
- return;
- }
- objs_to_go = CPDF_ModuleMgr::Get()->GetRenderModule()->GetConfig()->m_RenderStepLimit;
- }
+ continue;
+ }
+ if (m_PrevLastPos) {
+ m_ObjectPos = m_PrevLastPos;
+ pItem->m_pObjectList->GetNextObject(m_ObjectPos);
+ } else {
+ m_ObjectPos = pItem->m_pObjectList->GetFirstObjectPosition();
+ }
+ m_PrevLastPos = LastPos;
+ }
+ if (!m_pRenderStatus) {
+ m_ObjectPos = pItem->m_pObjectList->GetFirstObjectPosition();
+ m_ObjectIndex = 0;
+ m_pRenderStatus.reset(new CPDF_RenderStatus());
+ m_pRenderStatus->Initialize(
+ m_pContext, m_pDevice, NULL, NULL, NULL, NULL, m_pOptions,
+ pItem->m_pObjectList->m_Transparency, FALSE, NULL);
+ m_pDevice->SaveState();
+ m_ClipRect = m_pDevice->GetClipBox();
+ CFX_AffineMatrix device2object;
+ device2object.SetReverse(pItem->m_Matrix);
+ device2object.TransformRect(m_ClipRect);
+ }
+ int objs_to_go = CPDF_ModuleMgr::Get()
+ ->GetRenderModule()
+ ->GetConfig()
+ ->m_RenderStepLimit;
+ while (m_ObjectPos) {
+ CPDF_PageObject* pCurObj = pItem->m_pObjectList->GetObjectAt(m_ObjectPos);
+ if (pCurObj && pCurObj->m_Left <= m_ClipRect.right &&
+ pCurObj->m_Right >= m_ClipRect.left &&
+ pCurObj->m_Bottom <= m_ClipRect.top &&
+ pCurObj->m_Top >= m_ClipRect.bottom) {
+ if (m_pRenderStatus->ContinueSingleObject(pCurObj, &pItem->m_Matrix,
+ pPause)) {
+ return;
}
- if (!pItem->m_pObjectList->IsParsed()) {
- return;
+ if (pCurObj->m_Type == PDFPAGE_IMAGE &&
+ m_pRenderStatus->m_Options.m_Flags & RENDER_LIMITEDIMAGECACHE) {
+ m_pContext->GetPageCache()->CacheOptimization(
+ m_pRenderStatus->m_Options.m_dwLimitCacheSize);
}
- m_pRenderStatus.reset();
- m_pDevice->RestoreState();
- m_ObjectPos = NULL;
- m_PrevLastPos = NULL;
- if (pPause && pPause->NeedToPauseNow()) {
- m_LayerIndex++;
- return;
+ if (pCurObj->m_Type == PDFPAGE_FORM ||
+ pCurObj->m_Type == PDFPAGE_SHADING) {
+ objs_to_go = 0;
+ } else {
+ objs_to_go--;
}
- }
- m_Status = Done;
-}
-int CPDF_ProgressiveRenderer::EstimateProgress()
-{
- if (!m_pContext) {
- return 0;
- }
- FX_DWORD nLayers = m_pContext->m_ContentList.GetSize();
- int nTotal = 0, nRendered = 0;
- for (FX_DWORD layer = 0; layer < nLayers; layer ++) {
- _PDF_RenderItem* pItem = m_pContext->m_ContentList.GetDataPtr(layer);
- int nObjs = pItem->m_pObjectList->CountObjects();
- if (layer == m_LayerIndex) {
- nRendered += m_ObjectIndex;
- } else if (layer < m_LayerIndex) {
- nRendered += nObjs;
+ }
+ m_ObjectIndex++;
+ pItem->m_pObjectList->GetNextObject(m_ObjectPos);
+ if (objs_to_go == 0) {
+ if (pPause && pPause->NeedToPauseNow()) {
+ return;
}
- nTotal += nObjs;
+ objs_to_go = CPDF_ModuleMgr::Get()
+ ->GetRenderModule()
+ ->GetConfig()
+ ->m_RenderStepLimit;
+ }
}
- if (nTotal == 0) {
- return 0;
+ if (!pItem->m_pObjectList->IsParsed()) {
+ return;
}
- return 100 * nRendered / nTotal;
-}
-CPDF_TransferFunc* CPDF_DocRenderData::GetTransferFunc(CPDF_Object* pObj)
-{
- if (!pObj)
- return nullptr;
+ m_pRenderStatus.reset();
+ m_pDevice->RestoreState();
+ m_ObjectPos = NULL;
+ m_PrevLastPos = NULL;
+ if (pPause && pPause->NeedToPauseNow()) {
+ m_LayerIndex++;
+ return;
+ }
+ }
+ m_Status = Done;
+}
+int CPDF_ProgressiveRenderer::EstimateProgress() {
+ if (!m_pContext) {
+ return 0;
+ }
+ FX_DWORD nLayers = m_pContext->m_ContentList.GetSize();
+ int nTotal = 0, nRendered = 0;
+ for (FX_DWORD layer = 0; layer < nLayers; layer++) {
+ _PDF_RenderItem* pItem = m_pContext->m_ContentList.GetDataPtr(layer);
+ int nObjs = pItem->m_pObjectList->CountObjects();
+ if (layer == m_LayerIndex) {
+ nRendered += m_ObjectIndex;
+ } else if (layer < m_LayerIndex) {
+ nRendered += nObjs;
+ }
+ nTotal += nObjs;
+ }
+ if (nTotal == 0) {
+ return 0;
+ }
+ return 100 * nRendered / nTotal;
+}
+CPDF_TransferFunc* CPDF_DocRenderData::GetTransferFunc(CPDF_Object* pObj) {
+ if (!pObj)
+ return nullptr;
- auto it = m_TransferFuncMap.find(pObj);
- if (it != m_TransferFuncMap.end()) {
- CPDF_CountedObject<CPDF_TransferFunc>* pTransferCounter = it->second;
- return pTransferCounter->AddRef();
- }
+ auto it = m_TransferFuncMap.find(pObj);
+ if (it != m_TransferFuncMap.end()) {
+ CPDF_CountedObject<CPDF_TransferFunc>* pTransferCounter = it->second;
+ return pTransferCounter->AddRef();
+ }
- CPDF_Function* pFuncs[3] = { nullptr, nullptr, nullptr };
- FX_BOOL bUniTransfer = TRUE;
- FX_BOOL bIdentity = TRUE;
- if (pObj->GetType() == PDFOBJ_ARRAY) {
- bUniTransfer = FALSE;
- CPDF_Array* pArray = (CPDF_Array*)pObj;
- if (pArray->GetCount() < 3)
- return nullptr;
+ CPDF_Function* pFuncs[3] = {nullptr, nullptr, nullptr};
+ FX_BOOL bUniTransfer = TRUE;
+ FX_BOOL bIdentity = TRUE;
+ if (pObj->GetType() == PDFOBJ_ARRAY) {
+ bUniTransfer = FALSE;
+ CPDF_Array* pArray = (CPDF_Array*)pObj;
+ if (pArray->GetCount() < 3)
+ return nullptr;
- for (FX_DWORD i = 0; i < 3; ++i) {
- pFuncs[2 - i] = CPDF_Function::Load(pArray->GetElementValue(i));
- if (!pFuncs[2 - i]) {
- return nullptr;
- }
- }
+ for (FX_DWORD i = 0; i < 3; ++i) {
+ pFuncs[2 - i] = CPDF_Function::Load(pArray->GetElementValue(i));
+ if (!pFuncs[2 - i]) {
+ return nullptr;
+ }
+ }
+ } else {
+ pFuncs[0] = CPDF_Function::Load(pObj);
+ if (!pFuncs[0]) {
+ return nullptr;
+ }
+ }
+ CPDF_TransferFunc* pTransfer = new CPDF_TransferFunc;
+ pTransfer->m_pPDFDoc = m_pPDFDoc;
+ CPDF_CountedObject<CPDF_TransferFunc>* pTransferCounter =
+ new CPDF_CountedObject<CPDF_TransferFunc>(pTransfer);
+ m_TransferFuncMap[pObj] = pTransferCounter;
+ static const int kMaxOutputs = 16;
+ FX_FLOAT output[kMaxOutputs];
+ FXSYS_memset(output, 0, sizeof(output));
+ FX_FLOAT input;
+ int noutput;
+ for (int v = 0; v < 256; ++v) {
+ input = (FX_FLOAT)v / 255.0f;
+ if (bUniTransfer) {
+ if (pFuncs[0] && pFuncs[0]->CountOutputs() <= kMaxOutputs)
+ pFuncs[0]->Call(&input, 1, output, noutput);
+ int o = FXSYS_round(output[0] * 255);
+ if (o != v)
+ bIdentity = FALSE;
+ for (int i = 0; i < 3; ++i) {
+ pTransfer->m_Samples[i * 256 + v] = o;
+ }
} else {
- pFuncs[0] = CPDF_Function::Load(pObj);
- if (!pFuncs[0]) {
- return nullptr;
- }
- }
- CPDF_TransferFunc* pTransfer = new CPDF_TransferFunc;
- pTransfer->m_pPDFDoc = m_pPDFDoc;
- CPDF_CountedObject<CPDF_TransferFunc>* pTransferCounter =
- new CPDF_CountedObject<CPDF_TransferFunc>(pTransfer);
- m_TransferFuncMap[pObj] = pTransferCounter;
- static const int kMaxOutputs = 16;
- FX_FLOAT output[kMaxOutputs];
- FXSYS_memset(output, 0, sizeof(output));
- FX_FLOAT input;
- int noutput;
- for (int v = 0; v < 256; ++v) {
- input = (FX_FLOAT)v / 255.0f;
- if (bUniTransfer) {
- if (pFuncs[0] && pFuncs[0]->CountOutputs() <= kMaxOutputs)
- pFuncs[0]->Call(&input, 1, output, noutput);
- int o = FXSYS_round(output[0] * 255);
- if (o != v)
- bIdentity = FALSE;
- for (int i = 0; i < 3; ++i) {
- pTransfer->m_Samples[i * 256 + v] = o;
- }
+ for (int i = 0; i < 3; ++i) {
+ if (pFuncs[i] && pFuncs[i]->CountOutputs() <= kMaxOutputs) {
+ pFuncs[i]->Call(&input, 1, output, noutput);
+ int o = FXSYS_round(output[0] * 255);
+ if (o != v)
+ bIdentity = FALSE;
+ pTransfer->m_Samples[i * 256 + v] = o;
} else {
- for (int i = 0; i < 3; ++i) {
- if (pFuncs[i] && pFuncs[i]->CountOutputs() <= kMaxOutputs) {
- pFuncs[i]->Call(&input, 1, output, noutput);
- int o = FXSYS_round(output[0] * 255);
- if (o != v)
- bIdentity = FALSE;
- pTransfer->m_Samples[i * 256 + v] = o;
- } else {
- pTransfer->m_Samples[i * 256 + v] = v;
- }
- }
+ pTransfer->m_Samples[i * 256 + v] = v;
}
+ }
}
- for (int i = 0; i < 3; ++i)
- delete pFuncs[i];
+ }
+ for (int i = 0; i < 3; ++i)
+ delete pFuncs[i];
- pTransfer->m_bIdentity = bIdentity;
- return pTransferCounter->AddRef();
+ pTransfer->m_bIdentity = bIdentity;
+ return pTransferCounter->AddRef();
}
-void CPDF_DocRenderData::ReleaseTransferFunc(CPDF_Object* pObj)
-{
- auto it = m_TransferFuncMap.find(pObj);
- if (it != m_TransferFuncMap.end())
- it->second->RemoveRef();
-}
-CPDF_RenderConfig::CPDF_RenderConfig()
-{
- m_HalftoneLimit = 0;
- m_RenderStepLimit = 100;
-}
-CPDF_RenderConfig::~CPDF_RenderConfig()
-{
-}
-CPDF_DeviceBuffer::CPDF_DeviceBuffer()
-{
- m_pBitmap = NULL;
- m_pDevice = NULL;
- m_pContext = NULL;
- m_pObject = NULL;
-}
-CPDF_DeviceBuffer::~CPDF_DeviceBuffer()
-{
- delete m_pBitmap;
-}
-FX_BOOL CPDF_DeviceBuffer::Initialize(CPDF_RenderContext* pContext, CFX_RenderDevice* pDevice, FX_RECT* pRect,
- const CPDF_PageObject* pObj, int max_dpi)
-{
- m_pDevice = pDevice;
- m_pContext = pContext;
- m_Rect = *pRect;
- m_pObject = pObj;
- m_Matrix.TranslateI(-pRect->left, -pRect->top);
+void CPDF_DocRenderData::ReleaseTransferFunc(CPDF_Object* pObj) {
+ auto it = m_TransferFuncMap.find(pObj);
+ if (it != m_TransferFuncMap.end())
+ it->second->RemoveRef();
+}
+CPDF_RenderConfig::CPDF_RenderConfig() {
+ m_HalftoneLimit = 0;
+ m_RenderStepLimit = 100;
+}
+CPDF_RenderConfig::~CPDF_RenderConfig() {}
+CPDF_DeviceBuffer::CPDF_DeviceBuffer() {
+ m_pBitmap = NULL;
+ m_pDevice = NULL;
+ m_pContext = NULL;
+ m_pObject = NULL;
+}
+CPDF_DeviceBuffer::~CPDF_DeviceBuffer() {
+ delete m_pBitmap;
+}
+FX_BOOL CPDF_DeviceBuffer::Initialize(CPDF_RenderContext* pContext,
+ CFX_RenderDevice* pDevice,
+ FX_RECT* pRect,
+ const CPDF_PageObject* pObj,
+ int max_dpi) {
+ m_pDevice = pDevice;
+ m_pContext = pContext;
+ m_Rect = *pRect;
+ m_pObject = pObj;
+ m_Matrix.TranslateI(-pRect->left, -pRect->top);
#if _FXM_PLATFORM_ != _FXM_PLATFORM_APPLE_
- int horz_size = pDevice->GetDeviceCaps(FXDC_HORZ_SIZE);
- int vert_size = pDevice->GetDeviceCaps(FXDC_VERT_SIZE);
- if (horz_size && vert_size && max_dpi) {
- int dpih = pDevice->GetDeviceCaps(FXDC_PIXEL_WIDTH) * 254 / (horz_size * 10);
- int dpiv = pDevice->GetDeviceCaps(FXDC_PIXEL_HEIGHT) * 254 / (vert_size * 10);
- if (dpih > max_dpi) {
- m_Matrix.Scale((FX_FLOAT)(max_dpi) / dpih, 1.0f);
- }
- if (dpiv > max_dpi) {
- m_Matrix.Scale(1.0f, (FX_FLOAT)(max_dpi) / (FX_FLOAT)dpiv);
- }
- }
+ int horz_size = pDevice->GetDeviceCaps(FXDC_HORZ_SIZE);
+ int vert_size = pDevice->GetDeviceCaps(FXDC_VERT_SIZE);
+ if (horz_size && vert_size && max_dpi) {
+ int dpih =
+ pDevice->GetDeviceCaps(FXDC_PIXEL_WIDTH) * 254 / (horz_size * 10);
+ int dpiv =
+ pDevice->GetDeviceCaps(FXDC_PIXEL_HEIGHT) * 254 / (vert_size * 10);
+ if (dpih > max_dpi) {
+ m_Matrix.Scale((FX_FLOAT)(max_dpi) / dpih, 1.0f);
+ }
+ if (dpiv > max_dpi) {
+ m_Matrix.Scale(1.0f, (FX_FLOAT)(max_dpi) / (FX_FLOAT)dpiv);
+ }
+ }
#endif
- CFX_Matrix ctm = m_pDevice->GetCTM();
- FX_FLOAT fScaleX = FXSYS_fabs(ctm.a);
- FX_FLOAT fScaleY = FXSYS_fabs(ctm.d);
- m_Matrix.Concat(fScaleX, 0, 0, fScaleY, 0, 0);
- CFX_FloatRect rect(*pRect);
- m_Matrix.TransformRect(rect);
- FX_RECT bitmap_rect = rect.GetOutterRect();
- m_pBitmap = new CFX_DIBitmap;
- m_pBitmap->Create(bitmap_rect.Width(), bitmap_rect.Height(), FXDIB_Argb);
- return TRUE;
-}
-void CPDF_DeviceBuffer::OutputToDevice()
-{
- if (m_pDevice->GetDeviceCaps(FXDC_RENDER_CAPS) & FXRC_GET_BITS) {
- if (m_Matrix.a == 1.0f && m_Matrix.d == 1.0f) {
- m_pDevice->SetDIBits(m_pBitmap, m_Rect.left, m_Rect.top);
- } else {
- m_pDevice->StretchDIBits(m_pBitmap, m_Rect.left, m_Rect.top, m_Rect.Width(), m_Rect.Height());
- }
+ CFX_Matrix ctm = m_pDevice->GetCTM();
+ FX_FLOAT fScaleX = FXSYS_fabs(ctm.a);
+ FX_FLOAT fScaleY = FXSYS_fabs(ctm.d);
+ m_Matrix.Concat(fScaleX, 0, 0, fScaleY, 0, 0);
+ CFX_FloatRect rect(*pRect);
+ m_Matrix.TransformRect(rect);
+ FX_RECT bitmap_rect = rect.GetOutterRect();
+ m_pBitmap = new CFX_DIBitmap;
+ m_pBitmap->Create(bitmap_rect.Width(), bitmap_rect.Height(), FXDIB_Argb);
+ return TRUE;
+}
+void CPDF_DeviceBuffer::OutputToDevice() {
+ if (m_pDevice->GetDeviceCaps(FXDC_RENDER_CAPS) & FXRC_GET_BITS) {
+ if (m_Matrix.a == 1.0f && m_Matrix.d == 1.0f) {
+ m_pDevice->SetDIBits(m_pBitmap, m_Rect.left, m_Rect.top);
} else {
- CFX_DIBitmap buffer;
- m_pDevice->CreateCompatibleBitmap(&buffer, m_pBitmap->GetWidth(), m_pBitmap->GetHeight());
- m_pContext->GetBackground(&buffer, m_pObject, NULL, &m_Matrix);
- buffer.CompositeBitmap(0, 0, buffer.GetWidth(), buffer.GetHeight(), m_pBitmap, 0, 0);
- m_pDevice->StretchDIBits(&buffer, m_Rect.left, m_Rect.top, m_Rect.Width(), m_Rect.Height());
- }
-}
-CPDF_ScaledRenderBuffer::CPDF_ScaledRenderBuffer()
-{
- m_pBitmapDevice = NULL;
-}
-CPDF_ScaledRenderBuffer::~CPDF_ScaledRenderBuffer()
-{
- delete m_pBitmapDevice;
-}
-#define _FPDFAPI_IMAGESIZE_LIMIT_ (30 * 1024 * 1024)
-FX_BOOL CPDF_ScaledRenderBuffer::Initialize(CPDF_RenderContext* pContext, CFX_RenderDevice* pDevice, FX_RECT* pRect,
- const CPDF_PageObject* pObj, const CPDF_RenderOptions *pOptions, int max_dpi)
-{
- FXSYS_assert(pRect != NULL);
- m_pDevice = pDevice;
- if (m_pDevice->GetDeviceCaps(FXDC_RENDER_CAPS) & FXRC_GET_BITS) {
- return TRUE;
- }
- m_pContext = pContext;
- m_Rect = *pRect;
- m_pObject = pObj;
- m_Matrix.TranslateI(-pRect->left, -pRect->top);
- int horz_size = pDevice->GetDeviceCaps(FXDC_HORZ_SIZE);
- int vert_size = pDevice->GetDeviceCaps(FXDC_VERT_SIZE);
- if (horz_size && vert_size && max_dpi) {
- int dpih = pDevice->GetDeviceCaps(FXDC_PIXEL_WIDTH) * 254 / (horz_size * 10);
- int dpiv = pDevice->GetDeviceCaps(FXDC_PIXEL_HEIGHT) * 254 / (vert_size * 10);
- if (dpih > max_dpi) {
- m_Matrix.Scale((FX_FLOAT)(max_dpi) / dpih, 1.0f);
- }
- if (dpiv > max_dpi) {
- m_Matrix.Scale(1.0f, (FX_FLOAT)(max_dpi) / (FX_FLOAT)dpiv);
- }
- }
- m_pBitmapDevice = new CFX_FxgeDevice;
- FXDIB_Format dibFormat = FXDIB_Rgb;
- int32_t bpp = 24;
- if (m_pDevice->GetDeviceCaps(FXDC_RENDER_CAPS) & FXRC_ALPHA_OUTPUT) {
- dibFormat = FXDIB_Argb;
- bpp = 32;
- }
- CFX_FloatRect rect;
- int32_t iWidth, iHeight, iPitch;
- while (1) {
- rect = *pRect;
- m_Matrix.TransformRect(rect);
- FX_RECT bitmap_rect = rect.GetOutterRect();
- iWidth = bitmap_rect.Width();
- iHeight = bitmap_rect.Height();
- iPitch = (iWidth * bpp + 31) / 32 * 4;
- if (iWidth * iHeight < 1) {
- return FALSE;
- }
- if (iPitch * iHeight <= _FPDFAPI_IMAGESIZE_LIMIT_ &&
- m_pBitmapDevice->Create(iWidth, iHeight, dibFormat)) {
- break;
- }
- m_Matrix.Scale(0.5f, 0.5f);
- }
- m_pContext->GetBackground(m_pBitmapDevice->GetBitmap(), m_pObject, pOptions, &m_Matrix);
+ m_pDevice->StretchDIBits(m_pBitmap, m_Rect.left, m_Rect.top,
+ m_Rect.Width(), m_Rect.Height());
+ }
+ } else {
+ CFX_DIBitmap buffer;
+ m_pDevice->CreateCompatibleBitmap(&buffer, m_pBitmap->GetWidth(),
+ m_pBitmap->GetHeight());
+ m_pContext->GetBackground(&buffer, m_pObject, NULL, &m_Matrix);
+ buffer.CompositeBitmap(0, 0, buffer.GetWidth(), buffer.GetHeight(),
+ m_pBitmap, 0, 0);
+ m_pDevice->StretchDIBits(&buffer, m_Rect.left, m_Rect.top, m_Rect.Width(),
+ m_Rect.Height());
+ }
+}
+CPDF_ScaledRenderBuffer::CPDF_ScaledRenderBuffer() {
+ m_pBitmapDevice = NULL;
+}
+CPDF_ScaledRenderBuffer::~CPDF_ScaledRenderBuffer() {
+ delete m_pBitmapDevice;
+}
+#define _FPDFAPI_IMAGESIZE_LIMIT_ (30 * 1024 * 1024)
+FX_BOOL CPDF_ScaledRenderBuffer::Initialize(CPDF_RenderContext* pContext,
+ CFX_RenderDevice* pDevice,
+ FX_RECT* pRect,
+ const CPDF_PageObject* pObj,
+ const CPDF_RenderOptions* pOptions,
+ int max_dpi) {
+ FXSYS_assert(pRect != NULL);
+ m_pDevice = pDevice;
+ if (m_pDevice->GetDeviceCaps(FXDC_RENDER_CAPS) & FXRC_GET_BITS) {
return TRUE;
-}
-void CPDF_ScaledRenderBuffer::OutputToDevice()
-{
- if (m_pBitmapDevice) {
- m_pDevice->StretchDIBits(m_pBitmapDevice->GetBitmap(), m_Rect.left, m_Rect.top, m_Rect.Width(), m_Rect.Height());
- }
-}
-FX_BOOL IPDF_OCContext::CheckObjectVisible(const CPDF_PageObject* pObj)
-{
- const CPDF_ContentMarkData* pData = pObj->m_ContentMark;
- int nItems = pData->CountItems();
- for (int i = 0; i < nItems; i ++) {
- CPDF_ContentMarkItem& item = pData->GetItem(i);
- if (item.GetName() == FX_BSTRC("OC") && item.GetParamType() == CPDF_ContentMarkItem::PropertiesDict) {
- CPDF_Dictionary* pOCG = (CPDF_Dictionary*)item.GetParam();
- if (!CheckOCGVisible(pOCG)) {
- return FALSE;
- }
- }
+ }
+ m_pContext = pContext;
+ m_Rect = *pRect;
+ m_pObject = pObj;
+ m_Matrix.TranslateI(-pRect->left, -pRect->top);
+ int horz_size = pDevice->GetDeviceCaps(FXDC_HORZ_SIZE);
+ int vert_size = pDevice->GetDeviceCaps(FXDC_VERT_SIZE);
+ if (horz_size && vert_size && max_dpi) {
+ int dpih =
+ pDevice->GetDeviceCaps(FXDC_PIXEL_WIDTH) * 254 / (horz_size * 10);
+ int dpiv =
+ pDevice->GetDeviceCaps(FXDC_PIXEL_HEIGHT) * 254 / (vert_size * 10);
+ if (dpih > max_dpi) {
+ m_Matrix.Scale((FX_FLOAT)(max_dpi) / dpih, 1.0f);
+ }
+ if (dpiv > max_dpi) {
+ m_Matrix.Scale(1.0f, (FX_FLOAT)(max_dpi) / (FX_FLOAT)dpiv);
+ }
+ }
+ m_pBitmapDevice = new CFX_FxgeDevice;
+ FXDIB_Format dibFormat = FXDIB_Rgb;
+ int32_t bpp = 24;
+ if (m_pDevice->GetDeviceCaps(FXDC_RENDER_CAPS) & FXRC_ALPHA_OUTPUT) {
+ dibFormat = FXDIB_Argb;
+ bpp = 32;
+ }
+ CFX_FloatRect rect;
+ int32_t iWidth, iHeight, iPitch;
+ while (1) {
+ rect = *pRect;
+ m_Matrix.TransformRect(rect);
+ FX_RECT bitmap_rect = rect.GetOutterRect();
+ iWidth = bitmap_rect.Width();
+ iHeight = bitmap_rect.Height();
+ iPitch = (iWidth * bpp + 31) / 32 * 4;
+ if (iWidth * iHeight < 1) {
+ return FALSE;
+ }
+ if (iPitch * iHeight <= _FPDFAPI_IMAGESIZE_LIMIT_ &&
+ m_pBitmapDevice->Create(iWidth, iHeight, dibFormat)) {
+ break;
+ }
+ m_Matrix.Scale(0.5f, 0.5f);
+ }
+ m_pContext->GetBackground(m_pBitmapDevice->GetBitmap(), m_pObject, pOptions,
+ &m_Matrix);
+ return TRUE;
+}
+void CPDF_ScaledRenderBuffer::OutputToDevice() {
+ if (m_pBitmapDevice) {
+ m_pDevice->StretchDIBits(m_pBitmapDevice->GetBitmap(), m_Rect.left,
+ m_Rect.top, m_Rect.Width(), m_Rect.Height());
+ }
+}
+FX_BOOL IPDF_OCContext::CheckObjectVisible(const CPDF_PageObject* pObj) {
+ const CPDF_ContentMarkData* pData = pObj->m_ContentMark;
+ int nItems = pData->CountItems();
+ for (int i = 0; i < nItems; i++) {
+ CPDF_ContentMarkItem& item = pData->GetItem(i);
+ if (item.GetName() == FX_BSTRC("OC") &&
+ item.GetParamType() == CPDF_ContentMarkItem::PropertiesDict) {
+ CPDF_Dictionary* pOCG = (CPDF_Dictionary*)item.GetParam();
+ if (!CheckOCGVisible(pOCG)) {
+ return FALSE;
+ }
}
- return TRUE;
+ }
+ return TRUE;
}
diff --git a/core/src/fpdfapi/fpdf_render/fpdf_render_cache.cpp b/core/src/fpdfapi/fpdf_render/fpdf_render_cache.cpp
index cdbecd65ea..8da176e040 100644
--- a/core/src/fpdfapi/fpdf_render/fpdf_render_cache.cpp
+++ b/core/src/fpdfapi/fpdf_render/fpdf_render_cache.cpp
@@ -10,344 +10,361 @@
#include "../fpdf_page/pageint.h"
#include "render_int.h"
struct CACHEINFO {
- FX_DWORD time;
- CPDF_Stream* pStream;
+ FX_DWORD time;
+ CPDF_Stream* pStream;
};
extern "C" {
- static int compare(const void* data1, const void* data2)
- {
- return ((CACHEINFO*)data1)->time - ((CACHEINFO*)data2)->time;
- }
+static int compare(const void* data1, const void* data2) {
+ return ((CACHEINFO*)data1)->time - ((CACHEINFO*)data2)->time;
+}
};
-void CPDF_Page::ClearRenderCache()
-{
- if (m_pPageRender) {
- m_pPageRender->ClearAll();
- }
+void CPDF_Page::ClearRenderCache() {
+ if (m_pPageRender) {
+ m_pPageRender->ClearAll();
+ }
}
-void CPDF_PageRenderCache::ClearAll()
-{
- FX_POSITION pos = m_ImageCaches.GetStartPosition();
- while (pos) {
- void* key;
- void* value;
- m_ImageCaches.GetNextAssoc(pos, key, value);
- delete (CPDF_ImageCache*)value;
- }
- m_ImageCaches.RemoveAll();
- m_nCacheSize = 0;
- m_nTimeCount = 0;
+void CPDF_PageRenderCache::ClearAll() {
+ FX_POSITION pos = m_ImageCaches.GetStartPosition();
+ while (pos) {
+ void* key;
+ void* value;
+ m_ImageCaches.GetNextAssoc(pos, key, value);
+ delete (CPDF_ImageCache*)value;
+ }
+ m_ImageCaches.RemoveAll();
+ m_nCacheSize = 0;
+ m_nTimeCount = 0;
}
-void CPDF_PageRenderCache::CacheOptimization(int32_t dwLimitCacheSize)
-{
- if (m_nCacheSize <= (FX_DWORD)dwLimitCacheSize) {
- return;
- }
- int nCount = m_ImageCaches.GetCount();
- CACHEINFO* pCACHEINFO = (CACHEINFO*)FX_Alloc2D(uint8_t, sizeof(CACHEINFO), nCount);
- FX_POSITION pos = m_ImageCaches.GetStartPosition();
- int i = 0;
- while (pos) {
- void* key;
- void* value;
- m_ImageCaches.GetNextAssoc(pos, key, value);
- pCACHEINFO[i].time = ((CPDF_ImageCache*)value)->GetTimeCount();
- pCACHEINFO[i++].pStream = ((CPDF_ImageCache*)value)->GetStream();
- }
- FXSYS_qsort(pCACHEINFO, nCount, sizeof (CACHEINFO), compare);
- FX_DWORD nTimeCount = m_nTimeCount;
- if (nTimeCount + 1 < nTimeCount) {
- for (i = 0; i < nCount; i ++) {
- ((CPDF_ImageCache*)(m_ImageCaches[pCACHEINFO[i].pStream]))->m_dwTimeCount = i;
- }
- m_nTimeCount = nCount;
- }
- i = 0;
- while(nCount > 15) {
- ClearImageCache(pCACHEINFO[i++].pStream);
- nCount--;
- }
- while (m_nCacheSize > (FX_DWORD)dwLimitCacheSize) {
- ClearImageCache(pCACHEINFO[i++].pStream);
- }
- FX_Free(pCACHEINFO);
+void CPDF_PageRenderCache::CacheOptimization(int32_t dwLimitCacheSize) {
+ if (m_nCacheSize <= (FX_DWORD)dwLimitCacheSize) {
+ return;
+ }
+ int nCount = m_ImageCaches.GetCount();
+ CACHEINFO* pCACHEINFO =
+ (CACHEINFO*)FX_Alloc2D(uint8_t, sizeof(CACHEINFO), nCount);
+ FX_POSITION pos = m_ImageCaches.GetStartPosition();
+ int i = 0;
+ while (pos) {
+ void* key;
+ void* value;
+ m_ImageCaches.GetNextAssoc(pos, key, value);
+ pCACHEINFO[i].time = ((CPDF_ImageCache*)value)->GetTimeCount();
+ pCACHEINFO[i++].pStream = ((CPDF_ImageCache*)value)->GetStream();
+ }
+ FXSYS_qsort(pCACHEINFO, nCount, sizeof(CACHEINFO), compare);
+ FX_DWORD nTimeCount = m_nTimeCount;
+ if (nTimeCount + 1 < nTimeCount) {
+ for (i = 0; i < nCount; i++) {
+ ((CPDF_ImageCache*)(m_ImageCaches[pCACHEINFO[i].pStream]))
+ ->m_dwTimeCount = i;
+ }
+ m_nTimeCount = nCount;
+ }
+ i = 0;
+ while (nCount > 15) {
+ ClearImageCache(pCACHEINFO[i++].pStream);
+ nCount--;
+ }
+ while (m_nCacheSize > (FX_DWORD)dwLimitCacheSize) {
+ ClearImageCache(pCACHEINFO[i++].pStream);
+ }
+ FX_Free(pCACHEINFO);
}
-void CPDF_PageRenderCache::ClearImageCache(CPDF_Stream* pStream)
-{
- void* value = m_ImageCaches.GetValueAt(pStream);
- if (value == NULL) {
- m_ImageCaches.RemoveKey(pStream);
- return;
- }
- m_nCacheSize -= ((CPDF_ImageCache*)value)->EstimateSize();
- delete (CPDF_ImageCache*)value;
+void CPDF_PageRenderCache::ClearImageCache(CPDF_Stream* pStream) {
+ void* value = m_ImageCaches.GetValueAt(pStream);
+ if (value == NULL) {
m_ImageCaches.RemoveKey(pStream);
+ return;
+ }
+ m_nCacheSize -= ((CPDF_ImageCache*)value)->EstimateSize();
+ delete (CPDF_ImageCache*)value;
+ m_ImageCaches.RemoveKey(pStream);
}
-FX_DWORD CPDF_PageRenderCache::EstimateSize()
-{
- FX_DWORD dwSize = 0;
- FX_POSITION pos = m_ImageCaches.GetStartPosition();
- while (pos) {
- void* key;
- void* value;
- m_ImageCaches.GetNextAssoc(pos, key, value);
- dwSize += ((CPDF_ImageCache*)value)->EstimateSize();
- }
- m_nCacheSize = dwSize;
- return dwSize;
+FX_DWORD CPDF_PageRenderCache::EstimateSize() {
+ FX_DWORD dwSize = 0;
+ FX_POSITION pos = m_ImageCaches.GetStartPosition();
+ while (pos) {
+ void* key;
+ void* value;
+ m_ImageCaches.GetNextAssoc(pos, key, value);
+ dwSize += ((CPDF_ImageCache*)value)->EstimateSize();
+ }
+ m_nCacheSize = dwSize;
+ return dwSize;
}
-FX_DWORD CPDF_PageRenderCache::GetCachedSize(CPDF_Stream* pStream) const
-{
- if (pStream == NULL) {
- return m_nCacheSize;
- }
- CPDF_ImageCache* pImageCache;
- if (!m_ImageCaches.Lookup(pStream, (void*&)pImageCache)) {
- return 0;
- }
- return pImageCache->EstimateSize();
+FX_DWORD CPDF_PageRenderCache::GetCachedSize(CPDF_Stream* pStream) const {
+ if (pStream == NULL) {
+ return m_nCacheSize;
+ }
+ CPDF_ImageCache* pImageCache;
+ if (!m_ImageCaches.Lookup(pStream, (void*&)pImageCache)) {
+ return 0;
+ }
+ return pImageCache->EstimateSize();
}
-void CPDF_PageRenderCache::GetCachedBitmap(CPDF_Stream* pStream, CFX_DIBSource*& pBitmap, CFX_DIBSource*& pMask, FX_DWORD& MatteColor,
- FX_BOOL bStdCS, FX_DWORD GroupFamily, FX_BOOL bLoadMask, CPDF_RenderStatus* pRenderStatus,
- int32_t downsampleWidth, int32_t downsampleHeight)
-{
- CPDF_ImageCache* pImageCache;
- FX_BOOL bFind = m_ImageCaches.Lookup(pStream, (void*&)pImageCache);
- if (!bFind) {
- pImageCache = new CPDF_ImageCache(m_pPage->m_pDocument, pStream);
- }
- m_nTimeCount ++;
- FX_BOOL bCached = pImageCache->GetCachedBitmap(pBitmap, pMask, MatteColor, m_pPage->m_pPageResources, bStdCS, GroupFamily, bLoadMask, pRenderStatus, downsampleWidth, downsampleHeight);
- if (!bFind) {
- m_ImageCaches.SetAt(pStream, pImageCache);
- }
- if (!bCached) {
- m_nCacheSize += pImageCache->EstimateSize();
- }
+void CPDF_PageRenderCache::GetCachedBitmap(CPDF_Stream* pStream,
+ CFX_DIBSource*& pBitmap,
+ CFX_DIBSource*& pMask,
+ FX_DWORD& MatteColor,
+ FX_BOOL bStdCS,
+ FX_DWORD GroupFamily,
+ FX_BOOL bLoadMask,
+ CPDF_RenderStatus* pRenderStatus,
+ int32_t downsampleWidth,
+ int32_t downsampleHeight) {
+ CPDF_ImageCache* pImageCache;
+ FX_BOOL bFind = m_ImageCaches.Lookup(pStream, (void*&)pImageCache);
+ if (!bFind) {
+ pImageCache = new CPDF_ImageCache(m_pPage->m_pDocument, pStream);
+ }
+ m_nTimeCount++;
+ FX_BOOL bCached = pImageCache->GetCachedBitmap(
+ pBitmap, pMask, MatteColor, m_pPage->m_pPageResources, bStdCS,
+ GroupFamily, bLoadMask, pRenderStatus, downsampleWidth, downsampleHeight);
+ if (!bFind) {
+ m_ImageCaches.SetAt(pStream, pImageCache);
+ }
+ if (!bCached) {
+ m_nCacheSize += pImageCache->EstimateSize();
+ }
}
-FX_BOOL CPDF_PageRenderCache::StartGetCachedBitmap(CPDF_Stream* pStream, FX_BOOL bStdCS, FX_DWORD GroupFamily, FX_BOOL bLoadMask, CPDF_RenderStatus* pRenderStatus, int32_t downsampleWidth, int32_t downsampleHeight)
-{
- m_bCurFindCache = m_ImageCaches.Lookup(pStream, (void*&)m_pCurImageCache);
- if (!m_bCurFindCache) {
- m_pCurImageCache = new CPDF_ImageCache(m_pPage->m_pDocument, pStream);
- }
- int ret = m_pCurImageCache->StartGetCachedBitmap(pRenderStatus->m_pFormResource, m_pPage->m_pPageResources, bStdCS, GroupFamily, bLoadMask, pRenderStatus, downsampleWidth, downsampleHeight);
- if (ret == 2) {
- return TRUE;
- }
- m_nTimeCount ++;
- if (!m_bCurFindCache) {
- m_ImageCaches.SetAt(pStream, m_pCurImageCache);
- }
- if (!ret) {
- m_nCacheSize += m_pCurImageCache->EstimateSize();
- }
- return FALSE;
+FX_BOOL CPDF_PageRenderCache::StartGetCachedBitmap(
+ CPDF_Stream* pStream,
+ FX_BOOL bStdCS,
+ FX_DWORD GroupFamily,
+ FX_BOOL bLoadMask,
+ CPDF_RenderStatus* pRenderStatus,
+ int32_t downsampleWidth,
+ int32_t downsampleHeight) {
+ m_bCurFindCache = m_ImageCaches.Lookup(pStream, (void*&)m_pCurImageCache);
+ if (!m_bCurFindCache) {
+ m_pCurImageCache = new CPDF_ImageCache(m_pPage->m_pDocument, pStream);
+ }
+ int ret = m_pCurImageCache->StartGetCachedBitmap(
+ pRenderStatus->m_pFormResource, m_pPage->m_pPageResources, bStdCS,
+ GroupFamily, bLoadMask, pRenderStatus, downsampleWidth, downsampleHeight);
+ if (ret == 2) {
+ return TRUE;
+ }
+ m_nTimeCount++;
+ if (!m_bCurFindCache) {
+ m_ImageCaches.SetAt(pStream, m_pCurImageCache);
+ }
+ if (!ret) {
+ m_nCacheSize += m_pCurImageCache->EstimateSize();
+ }
+ return FALSE;
}
-FX_BOOL CPDF_PageRenderCache::Continue(IFX_Pause* pPause)
-{
- int ret = m_pCurImageCache->Continue(pPause);
- if (ret == 2) {
- return TRUE;
- }
- m_nTimeCount ++;
- if (!m_bCurFindCache) {
- m_ImageCaches.SetAt(m_pCurImageCache->GetStream(), m_pCurImageCache);
- }
- if (!ret) {
- m_nCacheSize += m_pCurImageCache->EstimateSize();
- }
- return FALSE;
+FX_BOOL CPDF_PageRenderCache::Continue(IFX_Pause* pPause) {
+ int ret = m_pCurImageCache->Continue(pPause);
+ if (ret == 2) {
+ return TRUE;
+ }
+ m_nTimeCount++;
+ if (!m_bCurFindCache) {
+ m_ImageCaches.SetAt(m_pCurImageCache->GetStream(), m_pCurImageCache);
+ }
+ if (!ret) {
+ m_nCacheSize += m_pCurImageCache->EstimateSize();
+ }
+ return FALSE;
}
-void CPDF_PageRenderCache::ResetBitmap(CPDF_Stream* pStream, const CFX_DIBitmap* pBitmap)
-{
- CPDF_ImageCache* pImageCache;
- if (!m_ImageCaches.Lookup(pStream, (void*&)pImageCache)) {
- if (pBitmap == NULL) {
- return;
- }
- pImageCache = new CPDF_ImageCache(m_pPage->m_pDocument, pStream);
- m_ImageCaches.SetAt(pStream, pImageCache);
- }
- int oldsize = pImageCache->EstimateSize();
- pImageCache->Reset(pBitmap);
- m_nCacheSize = pImageCache->EstimateSize() - oldsize;
+void CPDF_PageRenderCache::ResetBitmap(CPDF_Stream* pStream,
+ const CFX_DIBitmap* pBitmap) {
+ CPDF_ImageCache* pImageCache;
+ if (!m_ImageCaches.Lookup(pStream, (void*&)pImageCache)) {
+ if (pBitmap == NULL) {
+ return;
+ }
+ pImageCache = new CPDF_ImageCache(m_pPage->m_pDocument, pStream);
+ m_ImageCaches.SetAt(pStream, pImageCache);
+ }
+ int oldsize = pImageCache->EstimateSize();
+ pImageCache->Reset(pBitmap);
+ m_nCacheSize = pImageCache->EstimateSize() - oldsize;
}
CPDF_ImageCache::CPDF_ImageCache(CPDF_Document* pDoc, CPDF_Stream* pStream)
- : m_dwTimeCount(0)
- , m_pCurBitmap(NULL)
- , m_pCurMask(NULL)
- , m_MatteColor(0)
- , m_pRenderStatus(NULL)
- , m_pDocument(pDoc)
- , m_pStream(pStream)
- , m_pCachedBitmap(NULL)
- , m_pCachedMask(NULL)
- , m_dwCacheSize(0)
-{
+ : m_dwTimeCount(0),
+ m_pCurBitmap(NULL),
+ m_pCurMask(NULL),
+ m_MatteColor(0),
+ m_pRenderStatus(NULL),
+ m_pDocument(pDoc),
+ m_pStream(pStream),
+ m_pCachedBitmap(NULL),
+ m_pCachedMask(NULL),
+ m_dwCacheSize(0) {}
+CPDF_ImageCache::~CPDF_ImageCache() {
+ delete m_pCachedBitmap;
+ m_pCachedBitmap = NULL;
+ delete m_pCachedMask;
+ m_pCachedMask = NULL;
}
-CPDF_ImageCache::~CPDF_ImageCache()
-{
- delete m_pCachedBitmap;
- m_pCachedBitmap = NULL;
- delete m_pCachedMask;
- m_pCachedMask = NULL;
+void CPDF_ImageCache::Reset(const CFX_DIBitmap* pBitmap) {
+ delete m_pCachedBitmap;
+ m_pCachedBitmap = NULL;
+ if (pBitmap) {
+ m_pCachedBitmap = pBitmap->Clone();
+ }
+ CalcSize();
}
-void CPDF_ImageCache::Reset(const CFX_DIBitmap* pBitmap)
-{
- delete m_pCachedBitmap;
- m_pCachedBitmap = NULL;
- if (pBitmap) {
- m_pCachedBitmap = pBitmap->Clone();
- }
- CalcSize();
+void CPDF_PageRenderCache::ClearImageData() {
+ FX_POSITION pos = m_ImageCaches.GetStartPosition();
+ while (pos) {
+ void* key;
+ void* value;
+ m_ImageCaches.GetNextAssoc(pos, key, value);
+ ((CPDF_ImageCache*)value)->ClearImageData();
+ }
}
-void CPDF_PageRenderCache::ClearImageData()
-{
- FX_POSITION pos = m_ImageCaches.GetStartPosition();
- while (pos) {
- void* key;
- void* value;
- m_ImageCaches.GetNextAssoc(pos, key, value);
- ((CPDF_ImageCache*)value)->ClearImageData();
- }
-}
-void CPDF_ImageCache::ClearImageData()
-{
- if (m_pCachedBitmap && m_pCachedBitmap->GetBuffer() == NULL) {
- ((CPDF_DIBSource*)m_pCachedBitmap)->ClearImageData();
- }
+void CPDF_ImageCache::ClearImageData() {
+ if (m_pCachedBitmap && m_pCachedBitmap->GetBuffer() == NULL) {
+ ((CPDF_DIBSource*)m_pCachedBitmap)->ClearImageData();
+ }
}
-static FX_DWORD FPDF_ImageCache_EstimateImageSize(const CFX_DIBSource* pDIB)
-{
- return pDIB && pDIB->GetBuffer() ? (FX_DWORD)pDIB->GetHeight() * pDIB->GetPitch() + (FX_DWORD)pDIB->GetPaletteSize() * 4 : 0;
+static FX_DWORD FPDF_ImageCache_EstimateImageSize(const CFX_DIBSource* pDIB) {
+ return pDIB && pDIB->GetBuffer()
+ ? (FX_DWORD)pDIB->GetHeight() * pDIB->GetPitch() +
+ (FX_DWORD)pDIB->GetPaletteSize() * 4
+ : 0;
}
-FX_BOOL CPDF_ImageCache::GetCachedBitmap(CFX_DIBSource*& pBitmap, CFX_DIBSource*& pMask, FX_DWORD& MatteColor, CPDF_Dictionary* pPageResources,
- FX_BOOL bStdCS, FX_DWORD GroupFamily, FX_BOOL bLoadMask, CPDF_RenderStatus* pRenderStatus,
- int32_t downsampleWidth, int32_t downsampleHeight)
-{
- if (m_pCachedBitmap) {
- pBitmap = m_pCachedBitmap;
- pMask = m_pCachedMask;
- MatteColor = m_MatteColor;
- return TRUE;
- }
- if (!pRenderStatus) {
- return FALSE;
- }
- CPDF_RenderContext*pContext = pRenderStatus->GetContext();
- CPDF_PageRenderCache* pPageRenderCache = pContext->m_pPageCache;
- m_dwTimeCount = pPageRenderCache->GetTimeCount();
- CPDF_DIBSource* pSrc = new CPDF_DIBSource;
- CPDF_DIBSource* pMaskSrc = NULL;
- if (!pSrc->Load(m_pDocument, m_pStream, &pMaskSrc, &MatteColor, pRenderStatus->m_pFormResource, pPageResources, bStdCS, GroupFamily, bLoadMask)) {
- delete pSrc;
- pBitmap = NULL;
- return FALSE;
- }
- m_MatteColor = MatteColor;
- if (pSrc->GetPitch() * pSrc->GetHeight() < FPDF_HUGE_IMAGE_SIZE) {
- m_pCachedBitmap = pSrc->Clone();
- delete pSrc;
- } else {
- m_pCachedBitmap = pSrc;
- }
- if (pMaskSrc) {
- m_pCachedMask = pMaskSrc->Clone();
- delete pMaskSrc;
- }
-
+FX_BOOL CPDF_ImageCache::GetCachedBitmap(CFX_DIBSource*& pBitmap,
+ CFX_DIBSource*& pMask,
+ FX_DWORD& MatteColor,
+ CPDF_Dictionary* pPageResources,
+ FX_BOOL bStdCS,
+ FX_DWORD GroupFamily,
+ FX_BOOL bLoadMask,
+ CPDF_RenderStatus* pRenderStatus,
+ int32_t downsampleWidth,
+ int32_t downsampleHeight) {
+ if (m_pCachedBitmap) {
pBitmap = m_pCachedBitmap;
pMask = m_pCachedMask;
- CalcSize();
+ MatteColor = m_MatteColor;
+ return TRUE;
+ }
+ if (!pRenderStatus) {
+ return FALSE;
+ }
+ CPDF_RenderContext* pContext = pRenderStatus->GetContext();
+ CPDF_PageRenderCache* pPageRenderCache = pContext->m_pPageCache;
+ m_dwTimeCount = pPageRenderCache->GetTimeCount();
+ CPDF_DIBSource* pSrc = new CPDF_DIBSource;
+ CPDF_DIBSource* pMaskSrc = NULL;
+ if (!pSrc->Load(m_pDocument, m_pStream, &pMaskSrc, &MatteColor,
+ pRenderStatus->m_pFormResource, pPageResources, bStdCS,
+ GroupFamily, bLoadMask)) {
+ delete pSrc;
+ pBitmap = NULL;
return FALSE;
+ }
+ m_MatteColor = MatteColor;
+ if (pSrc->GetPitch() * pSrc->GetHeight() < FPDF_HUGE_IMAGE_SIZE) {
+ m_pCachedBitmap = pSrc->Clone();
+ delete pSrc;
+ } else {
+ m_pCachedBitmap = pSrc;
+ }
+ if (pMaskSrc) {
+ m_pCachedMask = pMaskSrc->Clone();
+ delete pMaskSrc;
+ }
+
+ pBitmap = m_pCachedBitmap;
+ pMask = m_pCachedMask;
+ CalcSize();
+ return FALSE;
}
-CFX_DIBSource* CPDF_ImageCache::DetachBitmap()
-{
- CFX_DIBSource* pDIBSource = m_pCurBitmap;
- m_pCurBitmap = NULL;
- return pDIBSource;
+CFX_DIBSource* CPDF_ImageCache::DetachBitmap() {
+ CFX_DIBSource* pDIBSource = m_pCurBitmap;
+ m_pCurBitmap = NULL;
+ return pDIBSource;
}
-CFX_DIBSource* CPDF_ImageCache::DetachMask()
-{
- CFX_DIBSource* pDIBSource = m_pCurMask;
- m_pCurMask = NULL;
- return pDIBSource;
+CFX_DIBSource* CPDF_ImageCache::DetachMask() {
+ CFX_DIBSource* pDIBSource = m_pCurMask;
+ m_pCurMask = NULL;
+ return pDIBSource;
}
-int CPDF_ImageCache::StartGetCachedBitmap(CPDF_Dictionary* pFormResources, CPDF_Dictionary* pPageResources, FX_BOOL bStdCS,
- FX_DWORD GroupFamily, FX_BOOL bLoadMask, CPDF_RenderStatus* pRenderStatus,
- int32_t downsampleWidth, int32_t downsampleHeight)
-{
- if (m_pCachedBitmap) {
- m_pCurBitmap = m_pCachedBitmap;
- m_pCurMask = m_pCachedMask;
- return 1;
- }
- if (!pRenderStatus) {
- return 0;
- }
- m_pRenderStatus = pRenderStatus;
- m_pCurBitmap = new CPDF_DIBSource;
- int ret = ((CPDF_DIBSource*)m_pCurBitmap)->StartLoadDIBSource(m_pDocument, m_pStream, TRUE, pFormResources, pPageResources, bStdCS, GroupFamily, bLoadMask);
- if (ret == 2) {
- return ret;
- }
- if (!ret) {
- delete m_pCurBitmap;
- m_pCurBitmap = NULL;
- return 0;
- }
- ContinueGetCachedBitmap();
- return 0;
-}
-int CPDF_ImageCache::ContinueGetCachedBitmap()
-{
- m_MatteColor = ((CPDF_DIBSource*)m_pCurBitmap)->m_MatteColor;
- m_pCurMask = ((CPDF_DIBSource*)m_pCurBitmap)->DetachMask();
- CPDF_RenderContext*pContext = m_pRenderStatus->GetContext();
- CPDF_PageRenderCache* pPageRenderCache = pContext->m_pPageCache;
- m_dwTimeCount = pPageRenderCache->GetTimeCount();
- if (m_pCurBitmap->GetPitch() * m_pCurBitmap->GetHeight() < FPDF_HUGE_IMAGE_SIZE) {
- m_pCachedBitmap = m_pCurBitmap->Clone();
- delete m_pCurBitmap;
- m_pCurBitmap = NULL;
- } else {
- m_pCachedBitmap = m_pCurBitmap;
- }
- if (m_pCurMask) {
- m_pCachedMask = m_pCurMask->Clone();
- delete m_pCurMask;
- m_pCurMask = NULL;
- }
+int CPDF_ImageCache::StartGetCachedBitmap(CPDF_Dictionary* pFormResources,
+ CPDF_Dictionary* pPageResources,
+ FX_BOOL bStdCS,
+ FX_DWORD GroupFamily,
+ FX_BOOL bLoadMask,
+ CPDF_RenderStatus* pRenderStatus,
+ int32_t downsampleWidth,
+ int32_t downsampleHeight) {
+ if (m_pCachedBitmap) {
m_pCurBitmap = m_pCachedBitmap;
m_pCurMask = m_pCachedMask;
- CalcSize();
+ return 1;
+ }
+ if (!pRenderStatus) {
+ return 0;
+ }
+ m_pRenderStatus = pRenderStatus;
+ m_pCurBitmap = new CPDF_DIBSource;
+ int ret =
+ ((CPDF_DIBSource*)m_pCurBitmap)
+ ->StartLoadDIBSource(m_pDocument, m_pStream, TRUE, pFormResources,
+ pPageResources, bStdCS, GroupFamily, bLoadMask);
+ if (ret == 2) {
+ return ret;
+ }
+ if (!ret) {
+ delete m_pCurBitmap;
+ m_pCurBitmap = NULL;
return 0;
+ }
+ ContinueGetCachedBitmap();
+ return 0;
}
-int CPDF_ImageCache::Continue(IFX_Pause* pPause)
-{
- int ret = ((CPDF_DIBSource*)m_pCurBitmap)->ContinueLoadDIBSource(pPause);
- if (ret == 2) {
- return ret;
- }
- if (!ret) {
- delete m_pCurBitmap;
- m_pCurBitmap = NULL;
- return 0;
- }
- ContinueGetCachedBitmap();
+int CPDF_ImageCache::ContinueGetCachedBitmap() {
+ m_MatteColor = ((CPDF_DIBSource*)m_pCurBitmap)->m_MatteColor;
+ m_pCurMask = ((CPDF_DIBSource*)m_pCurBitmap)->DetachMask();
+ CPDF_RenderContext* pContext = m_pRenderStatus->GetContext();
+ CPDF_PageRenderCache* pPageRenderCache = pContext->m_pPageCache;
+ m_dwTimeCount = pPageRenderCache->GetTimeCount();
+ if (m_pCurBitmap->GetPitch() * m_pCurBitmap->GetHeight() <
+ FPDF_HUGE_IMAGE_SIZE) {
+ m_pCachedBitmap = m_pCurBitmap->Clone();
+ delete m_pCurBitmap;
+ m_pCurBitmap = NULL;
+ } else {
+ m_pCachedBitmap = m_pCurBitmap;
+ }
+ if (m_pCurMask) {
+ m_pCachedMask = m_pCurMask->Clone();
+ delete m_pCurMask;
+ m_pCurMask = NULL;
+ }
+ m_pCurBitmap = m_pCachedBitmap;
+ m_pCurMask = m_pCachedMask;
+ CalcSize();
+ return 0;
+}
+int CPDF_ImageCache::Continue(IFX_Pause* pPause) {
+ int ret = ((CPDF_DIBSource*)m_pCurBitmap)->ContinueLoadDIBSource(pPause);
+ if (ret == 2) {
+ return ret;
+ }
+ if (!ret) {
+ delete m_pCurBitmap;
+ m_pCurBitmap = NULL;
return 0;
+ }
+ ContinueGetCachedBitmap();
+ return 0;
}
-void CPDF_ImageCache::CalcSize()
-{
- m_dwCacheSize = FPDF_ImageCache_EstimateImageSize(m_pCachedBitmap) + FPDF_ImageCache_EstimateImageSize(m_pCachedMask);
+void CPDF_ImageCache::CalcSize() {
+ m_dwCacheSize = FPDF_ImageCache_EstimateImageSize(m_pCachedBitmap) +
+ FPDF_ImageCache_EstimateImageSize(m_pCachedMask);
}
-void CPDF_Document::ClearRenderFont()
-{
- if (m_pDocRender) {
- CFX_FontCache* pCache = m_pDocRender->GetFontCache();
- if (pCache) {
- pCache->FreeCache(FALSE);
- }
+void CPDF_Document::ClearRenderFont() {
+ if (m_pDocRender) {
+ CFX_FontCache* pCache = m_pDocRender->GetFontCache();
+ if (pCache) {
+ pCache->FreeCache(FALSE);
}
+ }
}
diff --git a/core/src/fpdfapi/fpdf_render/fpdf_render_image.cpp b/core/src/fpdfapi/fpdf_render/fpdf_render_image.cpp
index fa9325a4d2..987ffd88d4 100644
--- a/core/src/fpdfapi/fpdf_render/fpdf_render_image.cpp
+++ b/core/src/fpdfapi/fpdf_render/fpdf_render_image.cpp
@@ -13,1069 +13,1160 @@
#include "../fpdf_page/pageint.h"
#include "render_int.h"
-FX_BOOL CPDF_RenderStatus::ProcessImage(CPDF_ImageObject* pImageObj, const CFX_AffineMatrix* pObj2Device)
-{
- CPDF_ImageRenderer render;
- if (render.Start(this, pImageObj, pObj2Device, m_bStdCS, m_curBlend)) {
- render.Continue(NULL);
- }
- return render.m_Result;
+FX_BOOL CPDF_RenderStatus::ProcessImage(CPDF_ImageObject* pImageObj,
+ const CFX_AffineMatrix* pObj2Device) {
+ CPDF_ImageRenderer render;
+ if (render.Start(this, pImageObj, pObj2Device, m_bStdCS, m_curBlend)) {
+ render.Continue(NULL);
+ }
+ return render.m_Result;
}
-void CPDF_RenderStatus::CompositeDIBitmap(CFX_DIBitmap* pDIBitmap, int left, int top, FX_ARGB mask_argb,
- int bitmap_alpha, int blend_mode, int Transparency)
-{
- if (pDIBitmap == NULL) {
+void CPDF_RenderStatus::CompositeDIBitmap(CFX_DIBitmap* pDIBitmap,
+ int left,
+ int top,
+ FX_ARGB mask_argb,
+ int bitmap_alpha,
+ int blend_mode,
+ int Transparency) {
+ if (pDIBitmap == NULL) {
+ return;
+ }
+ FX_BOOL bIsolated = Transparency & PDFTRANS_ISOLATED;
+ FX_BOOL bGroup = Transparency & PDFTRANS_GROUP;
+ if (blend_mode == FXDIB_BLEND_NORMAL) {
+ if (!pDIBitmap->IsAlphaMask()) {
+ if (bitmap_alpha < 255) {
+ pDIBitmap->MultiplyAlpha(bitmap_alpha);
+ }
+ if (m_pDevice->SetDIBits(pDIBitmap, left, top)) {
return;
- }
- FX_BOOL bIsolated = Transparency & PDFTRANS_ISOLATED;
- FX_BOOL bGroup = Transparency & PDFTRANS_GROUP;
- if (blend_mode == FXDIB_BLEND_NORMAL) {
- if (!pDIBitmap->IsAlphaMask()) {
- if (bitmap_alpha < 255) {
- pDIBitmap->MultiplyAlpha(bitmap_alpha);
- }
- if (m_pDevice->SetDIBits(pDIBitmap, left, top)) {
- return;
- }
- } else {
- FX_DWORD fill_argb = m_Options.TranslateColor(mask_argb);
- if (bitmap_alpha < 255) {
- ((uint8_t*)&fill_argb)[3] = ((uint8_t*)&fill_argb)[3] * bitmap_alpha / 255;
- }
- if (m_pDevice->SetBitMask(pDIBitmap, left, top, fill_argb)) {
- return;
- }
- }
- }
- FX_BOOL bBackAlphaRequired = blend_mode && bIsolated && !m_bDropObjects;
- FX_BOOL bGetBackGround = ((m_pDevice->GetRenderCaps() & FXRC_ALPHA_OUTPUT)) ||
- (!(m_pDevice->GetRenderCaps() & FXRC_ALPHA_OUTPUT) && (m_pDevice->GetRenderCaps()
- & FXRC_GET_BITS) && !bBackAlphaRequired);
- if (bGetBackGround) {
- if (bIsolated || !bGroup) {
- if (pDIBitmap->IsAlphaMask()) {
- return;
- }
- m_pDevice->SetDIBits(pDIBitmap, left, top, blend_mode);
- } else {
- FX_RECT rect(left, top, left + pDIBitmap->GetWidth(), top + pDIBitmap->GetHeight());
- rect.Intersect(m_pDevice->GetClipBox());
- CFX_DIBitmap* pClone = NULL;
- FX_BOOL bClone = FALSE;
- if (m_pDevice->GetBackDrop() && m_pDevice->GetBitmap()) {
- bClone = TRUE;
- pClone = m_pDevice->GetBackDrop()->Clone(&rect);
- CFX_DIBitmap *pForeBitmap = m_pDevice->GetBitmap();
- pClone->CompositeBitmap(0, 0, pClone->GetWidth(), pClone->GetHeight(), pForeBitmap, rect.left, rect.top);
- left = left >= 0 ? 0 : left;
- top = top >= 0 ? 0 : top;
- if (!pDIBitmap->IsAlphaMask())
- pClone->CompositeBitmap(0, 0, pClone->GetWidth(), pClone->GetHeight(), pDIBitmap,
- left, top, blend_mode);
- else
- pClone->CompositeMask(0, 0, pClone->GetWidth(), pClone->GetHeight(), pDIBitmap,
- mask_argb, left, top, blend_mode);
- } else {
- pClone = pDIBitmap;
- }
- if (m_pDevice->GetBackDrop()) {
- m_pDevice->SetDIBits(pClone, rect.left, rect.top);
- } else {
- if (pDIBitmap->IsAlphaMask()) {
- return;
- }
- m_pDevice->SetDIBits(pDIBitmap, rect.left, rect.top, blend_mode);
- }
- if (bClone) {
- delete pClone;
- }
- }
+ }
+ } else {
+ FX_DWORD fill_argb = m_Options.TranslateColor(mask_argb);
+ if (bitmap_alpha < 255) {
+ ((uint8_t*)&fill_argb)[3] =
+ ((uint8_t*)&fill_argb)[3] * bitmap_alpha / 255;
+ }
+ if (m_pDevice->SetBitMask(pDIBitmap, left, top, fill_argb)) {
return;
- }
- int back_left, back_top;
- FX_RECT rect(left, top, left + pDIBitmap->GetWidth(), top + pDIBitmap->GetHeight());
- CFX_DIBitmap* pBackdrop = GetBackdrop(m_pCurObj, rect, back_left, back_top, blend_mode > FXDIB_BLEND_NORMAL && bIsolated);
- if (!pBackdrop) {
+ }
+ }
+ }
+ FX_BOOL bBackAlphaRequired = blend_mode && bIsolated && !m_bDropObjects;
+ FX_BOOL bGetBackGround =
+ ((m_pDevice->GetRenderCaps() & FXRC_ALPHA_OUTPUT)) ||
+ (!(m_pDevice->GetRenderCaps() & FXRC_ALPHA_OUTPUT) &&
+ (m_pDevice->GetRenderCaps() & FXRC_GET_BITS) && !bBackAlphaRequired);
+ if (bGetBackGround) {
+ if (bIsolated || !bGroup) {
+ if (pDIBitmap->IsAlphaMask()) {
return;
- }
- if (!pDIBitmap->IsAlphaMask())
- pBackdrop->CompositeBitmap(left - back_left, top - back_top, pDIBitmap->GetWidth(), pDIBitmap->GetHeight(), pDIBitmap,
- 0, 0, blend_mode);
- else
- pBackdrop->CompositeMask(left - back_left, top - back_top, pDIBitmap->GetWidth(), pDIBitmap->GetHeight(), pDIBitmap,
- mask_argb, 0, 0, blend_mode);
- CFX_DIBitmap* pBackdrop1 = new CFX_DIBitmap;
- pBackdrop1->Create(pBackdrop->GetWidth(), pBackdrop->GetHeight(), FXDIB_Rgb32);
- pBackdrop1->Clear((FX_DWORD) - 1);
- pBackdrop1->CompositeBitmap(0, 0, pBackdrop->GetWidth(), pBackdrop->GetHeight(), pBackdrop, 0, 0);
- delete pBackdrop;
- pBackdrop = pBackdrop1;
- m_pDevice->SetDIBits(pBackdrop, back_left, back_top);
- delete pBackdrop;
+ }
+ m_pDevice->SetDIBits(pDIBitmap, left, top, blend_mode);
+ } else {
+ FX_RECT rect(left, top, left + pDIBitmap->GetWidth(),
+ top + pDIBitmap->GetHeight());
+ rect.Intersect(m_pDevice->GetClipBox());
+ CFX_DIBitmap* pClone = NULL;
+ FX_BOOL bClone = FALSE;
+ if (m_pDevice->GetBackDrop() && m_pDevice->GetBitmap()) {
+ bClone = TRUE;
+ pClone = m_pDevice->GetBackDrop()->Clone(&rect);
+ CFX_DIBitmap* pForeBitmap = m_pDevice->GetBitmap();
+ pClone->CompositeBitmap(0, 0, pClone->GetWidth(), pClone->GetHeight(),
+ pForeBitmap, rect.left, rect.top);
+ left = left >= 0 ? 0 : left;
+ top = top >= 0 ? 0 : top;
+ if (!pDIBitmap->IsAlphaMask())
+ pClone->CompositeBitmap(0, 0, pClone->GetWidth(), pClone->GetHeight(),
+ pDIBitmap, left, top, blend_mode);
+ else
+ pClone->CompositeMask(0, 0, pClone->GetWidth(), pClone->GetHeight(),
+ pDIBitmap, mask_argb, left, top, blend_mode);
+ } else {
+ pClone = pDIBitmap;
+ }
+ if (m_pDevice->GetBackDrop()) {
+ m_pDevice->SetDIBits(pClone, rect.left, rect.top);
+ } else {
+ if (pDIBitmap->IsAlphaMask()) {
+ return;
+ }
+ m_pDevice->SetDIBits(pDIBitmap, rect.left, rect.top, blend_mode);
+ }
+ if (bClone) {
+ delete pClone;
+ }
+ }
+ return;
+ }
+ int back_left, back_top;
+ FX_RECT rect(left, top, left + pDIBitmap->GetWidth(),
+ top + pDIBitmap->GetHeight());
+ CFX_DIBitmap* pBackdrop =
+ GetBackdrop(m_pCurObj, rect, back_left, back_top,
+ blend_mode > FXDIB_BLEND_NORMAL && bIsolated);
+ if (!pBackdrop) {
+ return;
+ }
+ if (!pDIBitmap->IsAlphaMask())
+ pBackdrop->CompositeBitmap(left - back_left, top - back_top,
+ pDIBitmap->GetWidth(), pDIBitmap->GetHeight(),
+ pDIBitmap, 0, 0, blend_mode);
+ else
+ pBackdrop->CompositeMask(left - back_left, top - back_top,
+ pDIBitmap->GetWidth(), pDIBitmap->GetHeight(),
+ pDIBitmap, mask_argb, 0, 0, blend_mode);
+ CFX_DIBitmap* pBackdrop1 = new CFX_DIBitmap;
+ pBackdrop1->Create(pBackdrop->GetWidth(), pBackdrop->GetHeight(),
+ FXDIB_Rgb32);
+ pBackdrop1->Clear((FX_DWORD)-1);
+ pBackdrop1->CompositeBitmap(0, 0, pBackdrop->GetWidth(),
+ pBackdrop->GetHeight(), pBackdrop, 0, 0);
+ delete pBackdrop;
+ pBackdrop = pBackdrop1;
+ m_pDevice->SetDIBits(pBackdrop, back_left, back_top);
+ delete pBackdrop;
}
-FX_COLORREF CPDF_TransferFunc::TranslateColor(FX_COLORREF rgb)
-{
- return FXSYS_RGB(m_Samples[FXSYS_GetRValue(rgb)], m_Samples[256 + FXSYS_GetGValue(rgb)],
- m_Samples[512 + FXSYS_GetBValue(rgb)]);
+FX_COLORREF CPDF_TransferFunc::TranslateColor(FX_COLORREF rgb) {
+ return FXSYS_RGB(m_Samples[FXSYS_GetRValue(rgb)],
+ m_Samples[256 + FXSYS_GetGValue(rgb)],
+ m_Samples[512 + FXSYS_GetBValue(rgb)]);
}
-CFX_DIBSource* CPDF_TransferFunc::TranslateImage(const CFX_DIBSource* pSrc, FX_BOOL bAutoDropSrc)
-{
- CPDF_DIBTransferFunc* pDest = new CPDF_DIBTransferFunc(this);
- pDest->LoadSrc(pSrc, bAutoDropSrc);
- return pDest;
+CFX_DIBSource* CPDF_TransferFunc::TranslateImage(const CFX_DIBSource* pSrc,
+ FX_BOOL bAutoDropSrc) {
+ CPDF_DIBTransferFunc* pDest = new CPDF_DIBTransferFunc(this);
+ pDest->LoadSrc(pSrc, bAutoDropSrc);
+ return pDest;
}
-FXDIB_Format CPDF_DIBTransferFunc::GetDestFormat()
-{
- if (m_pSrc->IsAlphaMask()) {
- return FXDIB_8bppMask;
- }
-#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
- return (m_pSrc->HasAlpha()) ? FXDIB_Argb : FXDIB_Rgb32;
+FXDIB_Format CPDF_DIBTransferFunc::GetDestFormat() {
+ if (m_pSrc->IsAlphaMask()) {
+ return FXDIB_8bppMask;
+ }
+#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
+ return (m_pSrc->HasAlpha()) ? FXDIB_Argb : FXDIB_Rgb32;
#else
- return (m_pSrc->HasAlpha()) ? FXDIB_Argb : FXDIB_Rgb;
+ return (m_pSrc->HasAlpha()) ? FXDIB_Argb : FXDIB_Rgb;
#endif
}
-CPDF_DIBTransferFunc::CPDF_DIBTransferFunc(const CPDF_TransferFunc* pTransferFunc)
-{
- m_RampR = pTransferFunc->m_Samples;
- m_RampG = &pTransferFunc->m_Samples[256];
- m_RampB = &pTransferFunc->m_Samples[512];
+CPDF_DIBTransferFunc::CPDF_DIBTransferFunc(
+ const CPDF_TransferFunc* pTransferFunc) {
+ m_RampR = pTransferFunc->m_Samples;
+ m_RampG = &pTransferFunc->m_Samples[256];
+ m_RampB = &pTransferFunc->m_Samples[512];
}
-void CPDF_DIBTransferFunc::TranslateScanline(uint8_t* dest_buf, const uint8_t* src_buf) const
-{
- int i;
- FX_BOOL bSkip = FALSE;
- switch (m_pSrc->GetFormat()) {
- case FXDIB_1bppRgb: {
- int r0 = m_RampR[0], g0 = m_RampG[0], b0 = m_RampB[0];
- int r1 = m_RampR[255], g1 = m_RampG[255], b1 = m_RampB[255];
- for (i = 0; i < m_Width; i ++) {
- if (src_buf[i / 8] & (1 << (7 - i % 8))) {
- *dest_buf++ = b1;
- *dest_buf++ = g1;
- *dest_buf++ = r1;
- } else {
- *dest_buf++ = b0;
- *dest_buf++ = g0;
- *dest_buf++ = r0;
- }
-#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
- dest_buf++;
-#endif
- }
- break;
- }
- case FXDIB_1bppMask: {
- int m0 = m_RampR[0], m1 = m_RampR[255];
- for (i = 0; i < m_Width; i ++) {
- if (src_buf[i / 8] & (1 << (7 - i % 8))) {
- *dest_buf++ = m1;
- } else {
- *dest_buf++ = m0;
- }
- }
- break;
- }
- case FXDIB_8bppRgb: {
- FX_ARGB* pPal = m_pSrc->GetPalette();
- for (i = 0; i < m_Width; i ++) {
- if (pPal) {
- FX_ARGB src_argb = pPal[*src_buf];
- *dest_buf++ = m_RampB[FXARGB_R(src_argb)];
- *dest_buf++ = m_RampG[FXARGB_G(src_argb)];
- *dest_buf++ = m_RampR[FXARGB_B(src_argb)];
- } else {
- FX_DWORD src_byte = *src_buf;
- *dest_buf++ = m_RampB[src_byte];
- *dest_buf++ = m_RampG[src_byte];
- *dest_buf++ = m_RampR[src_byte];
- }
- src_buf ++;
-#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
- dest_buf++;
+void CPDF_DIBTransferFunc::TranslateScanline(uint8_t* dest_buf,
+ const uint8_t* src_buf) const {
+ int i;
+ FX_BOOL bSkip = FALSE;
+ switch (m_pSrc->GetFormat()) {
+ case FXDIB_1bppRgb: {
+ int r0 = m_RampR[0], g0 = m_RampG[0], b0 = m_RampB[0];
+ int r1 = m_RampR[255], g1 = m_RampG[255], b1 = m_RampB[255];
+ for (i = 0; i < m_Width; i++) {
+ if (src_buf[i / 8] & (1 << (7 - i % 8))) {
+ *dest_buf++ = b1;
+ *dest_buf++ = g1;
+ *dest_buf++ = r1;
+ } else {
+ *dest_buf++ = b0;
+ *dest_buf++ = g0;
+ *dest_buf++ = r0;
+ }
+#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
+ dest_buf++;
#endif
- }
- break;
- }
- case FXDIB_8bppMask:
- for (i = 0; i < m_Width; i ++) {
- *dest_buf++ = m_RampR[*(src_buf++)];
- }
- break;
- case FXDIB_Rgb:
- for (i = 0; i < m_Width; i ++) {
- *dest_buf++ = m_RampB[*(src_buf++)];
- *dest_buf++ = m_RampG[*(src_buf++)];
- *dest_buf++ = m_RampR[*(src_buf++)];
-#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
- dest_buf++;
+ }
+ break;
+ }
+ case FXDIB_1bppMask: {
+ int m0 = m_RampR[0], m1 = m_RampR[255];
+ for (i = 0; i < m_Width; i++) {
+ if (src_buf[i / 8] & (1 << (7 - i % 8))) {
+ *dest_buf++ = m1;
+ } else {
+ *dest_buf++ = m0;
+ }
+ }
+ break;
+ }
+ case FXDIB_8bppRgb: {
+ FX_ARGB* pPal = m_pSrc->GetPalette();
+ for (i = 0; i < m_Width; i++) {
+ if (pPal) {
+ FX_ARGB src_argb = pPal[*src_buf];
+ *dest_buf++ = m_RampB[FXARGB_R(src_argb)];
+ *dest_buf++ = m_RampG[FXARGB_G(src_argb)];
+ *dest_buf++ = m_RampR[FXARGB_B(src_argb)];
+ } else {
+ FX_DWORD src_byte = *src_buf;
+ *dest_buf++ = m_RampB[src_byte];
+ *dest_buf++ = m_RampG[src_byte];
+ *dest_buf++ = m_RampR[src_byte];
+ }
+ src_buf++;
+#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
+ dest_buf++;
#endif
- }
- break;
- case FXDIB_Rgb32:
- bSkip = TRUE;
- case FXDIB_Argb:
- for (i = 0; i < m_Width; i ++) {
- *dest_buf++ = m_RampB[*(src_buf++)];
- *dest_buf++ = m_RampG[*(src_buf++)];
- *dest_buf++ = m_RampR[*(src_buf++)];
- if (!bSkip) {
- *dest_buf++ = *src_buf;
- }
-#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
- else {
- dest_buf++;
- }
+ }
+ break;
+ }
+ case FXDIB_8bppMask:
+ for (i = 0; i < m_Width; i++) {
+ *dest_buf++ = m_RampR[*(src_buf++)];
+ }
+ break;
+ case FXDIB_Rgb:
+ for (i = 0; i < m_Width; i++) {
+ *dest_buf++ = m_RampB[*(src_buf++)];
+ *dest_buf++ = m_RampG[*(src_buf++)];
+ *dest_buf++ = m_RampR[*(src_buf++)];
+#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
+ dest_buf++;
#endif
- src_buf ++;
- }
- break;
- default:
- break;
- }
-}
-void CPDF_DIBTransferFunc::TranslateDownSamples(uint8_t* dest_buf, const uint8_t* src_buf, int pixels, int Bpp) const
-{
- if (Bpp == 8) {
- for (int i = 0; i < pixels; i ++) {
- *dest_buf++ = m_RampR[*(src_buf++)];
+ }
+ break;
+ case FXDIB_Rgb32:
+ bSkip = TRUE;
+ case FXDIB_Argb:
+ for (i = 0; i < m_Width; i++) {
+ *dest_buf++ = m_RampB[*(src_buf++)];
+ *dest_buf++ = m_RampG[*(src_buf++)];
+ *dest_buf++ = m_RampR[*(src_buf++)];
+ if (!bSkip) {
+ *dest_buf++ = *src_buf;
}
- } else if (Bpp == 24) {
- for (int i = 0; i < pixels; i ++) {
- *dest_buf++ = m_RampB[*(src_buf++)];
- *dest_buf++ = m_RampG[*(src_buf++)];
- *dest_buf++ = m_RampR[*(src_buf++)];
+#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
+ else {
+ dest_buf++;
}
- } else {
-#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
- if (!m_pSrc->HasAlpha()) {
- for (int i = 0; i < pixels; i ++) {
- *dest_buf++ = m_RampB[*(src_buf++)];
- *dest_buf++ = m_RampG[*(src_buf++)];
- *dest_buf++ = m_RampR[*(src_buf++)];
- dest_buf++;
- src_buf++;
- }
- } else
#endif
- for (int i = 0; i < pixels; i ++) {
- *dest_buf++ = m_RampB[*(src_buf++)];
- *dest_buf++ = m_RampG[*(src_buf++)];
- *dest_buf++ = m_RampR[*(src_buf++)];
- *dest_buf++ = *(src_buf++);
- }
- }
+ src_buf++;
+ }
+ break;
+ default:
+ break;
+ }
}
-static FX_BOOL _IsSupported(CPDF_ColorSpace* pCS)
-{
- if (pCS->GetFamily() == PDFCS_DEVICERGB || pCS->GetFamily() == PDFCS_DEVICEGRAY ||
- pCS->GetFamily() == PDFCS_DEVICECMYK || pCS->GetFamily() == PDFCS_CALGRAY ||
- pCS->GetFamily() == PDFCS_CALRGB) {
- return TRUE;
- }
- if (pCS->GetFamily() == PDFCS_INDEXED && _IsSupported(pCS->GetBaseCS())) {
- return TRUE;
- }
- return FALSE;
+void CPDF_DIBTransferFunc::TranslateDownSamples(uint8_t* dest_buf,
+ const uint8_t* src_buf,
+ int pixels,
+ int Bpp) const {
+ if (Bpp == 8) {
+ for (int i = 0; i < pixels; i++) {
+ *dest_buf++ = m_RampR[*(src_buf++)];
+ }
+ } else if (Bpp == 24) {
+ for (int i = 0; i < pixels; i++) {
+ *dest_buf++ = m_RampB[*(src_buf++)];
+ *dest_buf++ = m_RampG[*(src_buf++)];
+ *dest_buf++ = m_RampR[*(src_buf++)];
+ }
+ } else {
+#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
+ if (!m_pSrc->HasAlpha()) {
+ for (int i = 0; i < pixels; i++) {
+ *dest_buf++ = m_RampB[*(src_buf++)];
+ *dest_buf++ = m_RampG[*(src_buf++)];
+ *dest_buf++ = m_RampR[*(src_buf++)];
+ dest_buf++;
+ src_buf++;
+ }
+ } else
+#endif
+ for (int i = 0; i < pixels; i++) {
+ *dest_buf++ = m_RampB[*(src_buf++)];
+ *dest_buf++ = m_RampG[*(src_buf++)];
+ *dest_buf++ = m_RampR[*(src_buf++)];
+ *dest_buf++ = *(src_buf++);
+ }
+ }
}
-CPDF_ImageRenderer::CPDF_ImageRenderer()
-{
- m_pRenderStatus = NULL;
- m_pImageObject = NULL;
- m_Result = TRUE;
- m_Status = 0;
- m_pQuickStretcher = NULL;
- m_pTransformer = NULL;
- m_DeviceHandle = NULL;
- m_LoadHandle = NULL;
- m_pClone = NULL;
- m_bStdCS = FALSE;
- m_bPatternColor = FALSE;
- m_BlendType = FXDIB_BLEND_NORMAL;
- m_pPattern = NULL;
- m_pObj2Device = NULL;
+static FX_BOOL _IsSupported(CPDF_ColorSpace* pCS) {
+ if (pCS->GetFamily() == PDFCS_DEVICERGB ||
+ pCS->GetFamily() == PDFCS_DEVICEGRAY ||
+ pCS->GetFamily() == PDFCS_DEVICECMYK ||
+ pCS->GetFamily() == PDFCS_CALGRAY || pCS->GetFamily() == PDFCS_CALRGB) {
+ return TRUE;
+ }
+ if (pCS->GetFamily() == PDFCS_INDEXED && _IsSupported(pCS->GetBaseCS())) {
+ return TRUE;
+ }
+ return FALSE;
}
-CPDF_ImageRenderer::~CPDF_ImageRenderer()
-{
- delete m_pQuickStretcher;
- delete m_pTransformer;
- if (m_DeviceHandle) {
- m_pRenderStatus->m_pDevice->CancelDIBits(m_DeviceHandle);
- }
- delete (CPDF_ProgressiveImageLoaderHandle*)m_LoadHandle;
- delete m_pClone;
+CPDF_ImageRenderer::CPDF_ImageRenderer() {
+ m_pRenderStatus = NULL;
+ m_pImageObject = NULL;
+ m_Result = TRUE;
+ m_Status = 0;
+ m_pQuickStretcher = NULL;
+ m_pTransformer = NULL;
+ m_DeviceHandle = NULL;
+ m_LoadHandle = NULL;
+ m_pClone = NULL;
+ m_bStdCS = FALSE;
+ m_bPatternColor = FALSE;
+ m_BlendType = FXDIB_BLEND_NORMAL;
+ m_pPattern = NULL;
+ m_pObj2Device = NULL;
}
-FX_BOOL CPDF_ImageRenderer::StartLoadDIBSource()
-{
- CFX_FloatRect image_rect_f = m_ImageMatrix.GetUnitRect();
- FX_RECT image_rect = image_rect_f.GetOutterRect();
- int dest_width = image_rect.Width();
- int dest_height = image_rect.Height();
- if (m_ImageMatrix.a < 0) {
- dest_width = -dest_width;
- }
- if (m_ImageMatrix.d > 0) {
- dest_height = -dest_height;
- }
- if (m_Loader.StartLoadImage(m_pImageObject, m_pRenderStatus->m_pContext->m_pPageCache, m_LoadHandle, m_bStdCS,
- m_pRenderStatus->m_GroupFamily, m_pRenderStatus->m_bLoadMask, m_pRenderStatus, dest_width, dest_height)) {
- if (m_LoadHandle != NULL) {
- m_Status = 4;
- return TRUE;
- }
- return FALSE;
+CPDF_ImageRenderer::~CPDF_ImageRenderer() {
+ delete m_pQuickStretcher;
+ delete m_pTransformer;
+ if (m_DeviceHandle) {
+ m_pRenderStatus->m_pDevice->CancelDIBits(m_DeviceHandle);
+ }
+ delete (CPDF_ProgressiveImageLoaderHandle*)m_LoadHandle;
+ delete m_pClone;
+}
+FX_BOOL CPDF_ImageRenderer::StartLoadDIBSource() {
+ CFX_FloatRect image_rect_f = m_ImageMatrix.GetUnitRect();
+ FX_RECT image_rect = image_rect_f.GetOutterRect();
+ int dest_width = image_rect.Width();
+ int dest_height = image_rect.Height();
+ if (m_ImageMatrix.a < 0) {
+ dest_width = -dest_width;
+ }
+ if (m_ImageMatrix.d > 0) {
+ dest_height = -dest_height;
+ }
+ if (m_Loader.StartLoadImage(
+ m_pImageObject, m_pRenderStatus->m_pContext->m_pPageCache,
+ m_LoadHandle, m_bStdCS, m_pRenderStatus->m_GroupFamily,
+ m_pRenderStatus->m_bLoadMask, m_pRenderStatus, dest_width,
+ dest_height)) {
+ if (m_LoadHandle != NULL) {
+ m_Status = 4;
+ return TRUE;
}
return FALSE;
+ }
+ return FALSE;
}
-FX_BOOL CPDF_ImageRenderer::StartRenderDIBSource()
-{
- if (m_Loader.m_pBitmap == NULL) {
- return FALSE;
- }
- m_BitmapAlpha = 255;
- const CPDF_GeneralStateData* pGeneralState = m_pImageObject->m_GeneralState;
- if (pGeneralState) {
- m_BitmapAlpha = FXSYS_round(pGeneralState->m_FillAlpha * 255);
- }
- m_pDIBSource = m_Loader.m_pBitmap;
- if (m_pRenderStatus->m_Options.m_ColorMode == RENDER_COLOR_ALPHA && m_Loader.m_pMask == NULL) {
- return StartBitmapAlpha();
- }
- if (pGeneralState && pGeneralState->m_pTR) {
- if (!pGeneralState->m_pTransferFunc) {
- ((CPDF_GeneralStateData*)pGeneralState)->m_pTransferFunc = m_pRenderStatus->GetTransferFunc(pGeneralState->m_pTR);
- }
- if (pGeneralState->m_pTransferFunc && !pGeneralState->m_pTransferFunc->m_bIdentity) {
- m_pDIBSource = m_Loader.m_pBitmap = pGeneralState->m_pTransferFunc->TranslateImage(m_Loader.m_pBitmap, !m_Loader.m_bCached);
- if (m_Loader.m_bCached && m_Loader.m_pMask) {
- m_Loader.m_pMask = m_Loader.m_pMask->Clone();
- }
- m_Loader.m_bCached = FALSE;
- }
- }
- m_FillArgb = 0;
- m_bPatternColor = FALSE;
- m_pPattern = NULL;
- if (m_pDIBSource->IsAlphaMask()) {
- CPDF_Color* pColor = m_pImageObject->m_ColorState.GetFillColor();
- if (pColor && pColor->IsPattern()) {
- m_pPattern = pColor->GetPattern();
- if (m_pPattern != NULL) {
- m_bPatternColor = TRUE;
- }
- }
- m_FillArgb = m_pRenderStatus->GetFillArgb(m_pImageObject);
- } else if (m_pRenderStatus->m_Options.m_ColorMode == RENDER_COLOR_GRAY) {
- m_pClone = m_pDIBSource->Clone();
- m_pClone->ConvertColorScale(m_pRenderStatus->m_Options.m_BackColor, m_pRenderStatus->m_Options.m_ForeColor);
- m_pDIBSource = m_pClone;
- }
- m_Flags = 0;
- if (m_pRenderStatus->m_Options.m_Flags & RENDER_FORCE_DOWNSAMPLE) {
- m_Flags |= RENDER_FORCE_DOWNSAMPLE;
- } else if (m_pRenderStatus->m_Options.m_Flags & RENDER_FORCE_HALFTONE) {
- m_Flags |= RENDER_FORCE_HALFTONE;
- }
- if (m_pRenderStatus->m_pDevice->GetDeviceClass() != FXDC_DISPLAY) {
- CPDF_Object* pFilters = m_pImageObject->m_pImage->GetStream()->GetDict()->GetElementValue(FX_BSTRC("Filter"));
- if (pFilters) {
- if (pFilters->GetType() == PDFOBJ_NAME) {
- CFX_ByteStringC bsDecodeType = pFilters->GetConstString();
- if (bsDecodeType == FX_BSTRC("DCTDecode") || bsDecodeType == FX_BSTRC("JPXDecode")) {
- m_Flags |= FXRENDER_IMAGE_LOSSY;
- }
- } else if (pFilters->GetType() == PDFOBJ_ARRAY) {
- CPDF_Array* pArray = (CPDF_Array*)pFilters;
- for (FX_DWORD i = 0; i < pArray->GetCount(); i ++) {
- CFX_ByteStringC bsDecodeType = pArray->GetConstString(i);
- if (bsDecodeType == FX_BSTRC("DCTDecode") || bsDecodeType == FX_BSTRC("JPXDecode")) {
- m_Flags |= FXRENDER_IMAGE_LOSSY;
- break;
- }
- }
- }
- }
- }
- if (m_pRenderStatus->m_Options.m_Flags & RENDER_NOIMAGESMOOTH) {
- m_Flags |= FXDIB_NOSMOOTH;
- } else if (m_pImageObject->m_pImage->IsInterpol()) {
- m_Flags |= FXDIB_INTERPOL;
- }
- if (m_Loader.m_pMask) {
- return DrawMaskedImage();
- }
- if (m_bPatternColor) {
- return DrawPatternImage(m_pObj2Device);
- }
- if (m_BitmapAlpha == 255 && pGeneralState && pGeneralState->m_FillOP &&
- pGeneralState->m_OPMode == 0 && pGeneralState->m_BlendType == FXDIB_BLEND_NORMAL && pGeneralState->m_StrokeAlpha == 1 && pGeneralState->m_FillAlpha == 1) {
- CPDF_Document* pDocument = NULL;
- CPDF_Page* pPage = NULL;
- if (m_pRenderStatus->m_pContext->m_pPageCache) {
- pPage = m_pRenderStatus->m_pContext->m_pPageCache->GetPage();
- pDocument = pPage->m_pDocument;
- } else {
- pDocument = m_pImageObject->m_pImage->GetDocument();
+FX_BOOL CPDF_ImageRenderer::StartRenderDIBSource() {
+ if (m_Loader.m_pBitmap == NULL) {
+ return FALSE;
+ }
+ m_BitmapAlpha = 255;
+ const CPDF_GeneralStateData* pGeneralState = m_pImageObject->m_GeneralState;
+ if (pGeneralState) {
+ m_BitmapAlpha = FXSYS_round(pGeneralState->m_FillAlpha * 255);
+ }
+ m_pDIBSource = m_Loader.m_pBitmap;
+ if (m_pRenderStatus->m_Options.m_ColorMode == RENDER_COLOR_ALPHA &&
+ m_Loader.m_pMask == NULL) {
+ return StartBitmapAlpha();
+ }
+ if (pGeneralState && pGeneralState->m_pTR) {
+ if (!pGeneralState->m_pTransferFunc) {
+ ((CPDF_GeneralStateData*)pGeneralState)->m_pTransferFunc =
+ m_pRenderStatus->GetTransferFunc(pGeneralState->m_pTR);
+ }
+ if (pGeneralState->m_pTransferFunc &&
+ !pGeneralState->m_pTransferFunc->m_bIdentity) {
+ m_pDIBSource = m_Loader.m_pBitmap =
+ pGeneralState->m_pTransferFunc->TranslateImage(m_Loader.m_pBitmap,
+ !m_Loader.m_bCached);
+ if (m_Loader.m_bCached && m_Loader.m_pMask) {
+ m_Loader.m_pMask = m_Loader.m_pMask->Clone();
+ }
+ m_Loader.m_bCached = FALSE;
+ }
+ }
+ m_FillArgb = 0;
+ m_bPatternColor = FALSE;
+ m_pPattern = NULL;
+ if (m_pDIBSource->IsAlphaMask()) {
+ CPDF_Color* pColor = m_pImageObject->m_ColorState.GetFillColor();
+ if (pColor && pColor->IsPattern()) {
+ m_pPattern = pColor->GetPattern();
+ if (m_pPattern != NULL) {
+ m_bPatternColor = TRUE;
+ }
+ }
+ m_FillArgb = m_pRenderStatus->GetFillArgb(m_pImageObject);
+ } else if (m_pRenderStatus->m_Options.m_ColorMode == RENDER_COLOR_GRAY) {
+ m_pClone = m_pDIBSource->Clone();
+ m_pClone->ConvertColorScale(m_pRenderStatus->m_Options.m_BackColor,
+ m_pRenderStatus->m_Options.m_ForeColor);
+ m_pDIBSource = m_pClone;
+ }
+ m_Flags = 0;
+ if (m_pRenderStatus->m_Options.m_Flags & RENDER_FORCE_DOWNSAMPLE) {
+ m_Flags |= RENDER_FORCE_DOWNSAMPLE;
+ } else if (m_pRenderStatus->m_Options.m_Flags & RENDER_FORCE_HALFTONE) {
+ m_Flags |= RENDER_FORCE_HALFTONE;
+ }
+ if (m_pRenderStatus->m_pDevice->GetDeviceClass() != FXDC_DISPLAY) {
+ CPDF_Object* pFilters =
+ m_pImageObject->m_pImage->GetStream()->GetDict()->GetElementValue(
+ FX_BSTRC("Filter"));
+ if (pFilters) {
+ if (pFilters->GetType() == PDFOBJ_NAME) {
+ CFX_ByteStringC bsDecodeType = pFilters->GetConstString();
+ if (bsDecodeType == FX_BSTRC("DCTDecode") ||
+ bsDecodeType == FX_BSTRC("JPXDecode")) {
+ m_Flags |= FXRENDER_IMAGE_LOSSY;
}
- CPDF_Dictionary* pPageResources = pPage ? pPage->m_pPageResources : NULL;
- CPDF_Object* pCSObj = m_pImageObject->m_pImage->GetStream()->GetDict()->GetElementValue(FX_BSTRC("ColorSpace"));
- CPDF_ColorSpace* pColorSpace = pDocument->LoadColorSpace(pCSObj, pPageResources);
- if (pColorSpace) {
- int format = pColorSpace->GetFamily();
- if (format == PDFCS_DEVICECMYK || format == PDFCS_SEPARATION || format == PDFCS_DEVICEN) {
- m_BlendType = FXDIB_BLEND_DARKEN;
- }
- pDocument->GetPageData()->ReleaseColorSpace(pCSObj);
+ } else if (pFilters->GetType() == PDFOBJ_ARRAY) {
+ CPDF_Array* pArray = (CPDF_Array*)pFilters;
+ for (FX_DWORD i = 0; i < pArray->GetCount(); i++) {
+ CFX_ByteStringC bsDecodeType = pArray->GetConstString(i);
+ if (bsDecodeType == FX_BSTRC("DCTDecode") ||
+ bsDecodeType == FX_BSTRC("JPXDecode")) {
+ m_Flags |= FXRENDER_IMAGE_LOSSY;
+ break;
+ }
}
- }
- return StartDIBSource();
+ }
+ }
+ }
+ if (m_pRenderStatus->m_Options.m_Flags & RENDER_NOIMAGESMOOTH) {
+ m_Flags |= FXDIB_NOSMOOTH;
+ } else if (m_pImageObject->m_pImage->IsInterpol()) {
+ m_Flags |= FXDIB_INTERPOL;
+ }
+ if (m_Loader.m_pMask) {
+ return DrawMaskedImage();
+ }
+ if (m_bPatternColor) {
+ return DrawPatternImage(m_pObj2Device);
+ }
+ if (m_BitmapAlpha == 255 && pGeneralState && pGeneralState->m_FillOP &&
+ pGeneralState->m_OPMode == 0 &&
+ pGeneralState->m_BlendType == FXDIB_BLEND_NORMAL &&
+ pGeneralState->m_StrokeAlpha == 1 && pGeneralState->m_FillAlpha == 1) {
+ CPDF_Document* pDocument = NULL;
+ CPDF_Page* pPage = NULL;
+ if (m_pRenderStatus->m_pContext->m_pPageCache) {
+ pPage = m_pRenderStatus->m_pContext->m_pPageCache->GetPage();
+ pDocument = pPage->m_pDocument;
+ } else {
+ pDocument = m_pImageObject->m_pImage->GetDocument();
+ }
+ CPDF_Dictionary* pPageResources = pPage ? pPage->m_pPageResources : NULL;
+ CPDF_Object* pCSObj =
+ m_pImageObject->m_pImage->GetStream()->GetDict()->GetElementValue(
+ FX_BSTRC("ColorSpace"));
+ CPDF_ColorSpace* pColorSpace =
+ pDocument->LoadColorSpace(pCSObj, pPageResources);
+ if (pColorSpace) {
+ int format = pColorSpace->GetFamily();
+ if (format == PDFCS_DEVICECMYK || format == PDFCS_SEPARATION ||
+ format == PDFCS_DEVICEN) {
+ m_BlendType = FXDIB_BLEND_DARKEN;
+ }
+ pDocument->GetPageData()->ReleaseColorSpace(pCSObj);
+ }
+ }
+ return StartDIBSource();
}
-FX_BOOL CPDF_ImageRenderer::Start(CPDF_RenderStatus* pStatus, const CPDF_PageObject* pObj, const CFX_AffineMatrix* pObj2Device, FX_BOOL bStdCS, int blendType)
-{
- m_pRenderStatus = pStatus;
- m_bStdCS = bStdCS;
- m_pImageObject = (CPDF_ImageObject*)pObj;
- m_BlendType = blendType;
- m_pObj2Device = pObj2Device;
- CPDF_Dictionary* pOC = m_pImageObject->m_pImage->GetOC();
- if (pOC && m_pRenderStatus->m_Options.m_pOCContext && !m_pRenderStatus->m_Options.m_pOCContext->CheckOCGVisible(pOC)) {
- return FALSE;
- }
- m_ImageMatrix = m_pImageObject->m_Matrix;
- m_ImageMatrix.Concat(*pObj2Device);
- if (StartLoadDIBSource()) {
- return TRUE;
- }
- return StartRenderDIBSource();
+FX_BOOL CPDF_ImageRenderer::Start(CPDF_RenderStatus* pStatus,
+ const CPDF_PageObject* pObj,
+ const CFX_AffineMatrix* pObj2Device,
+ FX_BOOL bStdCS,
+ int blendType) {
+ m_pRenderStatus = pStatus;
+ m_bStdCS = bStdCS;
+ m_pImageObject = (CPDF_ImageObject*)pObj;
+ m_BlendType = blendType;
+ m_pObj2Device = pObj2Device;
+ CPDF_Dictionary* pOC = m_pImageObject->m_pImage->GetOC();
+ if (pOC && m_pRenderStatus->m_Options.m_pOCContext &&
+ !m_pRenderStatus->m_Options.m_pOCContext->CheckOCGVisible(pOC)) {
+ return FALSE;
+ }
+ m_ImageMatrix = m_pImageObject->m_Matrix;
+ m_ImageMatrix.Concat(*pObj2Device);
+ if (StartLoadDIBSource()) {
+ return TRUE;
+ }
+ return StartRenderDIBSource();
}
-FX_BOOL CPDF_ImageRenderer::Start(CPDF_RenderStatus* pStatus, const CFX_DIBSource* pDIBSource, FX_ARGB bitmap_argb,
- int bitmap_alpha, const CFX_AffineMatrix* pImage2Device, FX_DWORD flags, FX_BOOL bStdCS, int blendType)
-{
- m_pRenderStatus = pStatus;
- m_pDIBSource = pDIBSource;
- m_FillArgb = bitmap_argb;
- m_BitmapAlpha = bitmap_alpha;
- m_ImageMatrix = *pImage2Device;
- m_Flags = flags;
- m_bStdCS = bStdCS;
- m_BlendType = blendType;
- return StartDIBSource();
+FX_BOOL CPDF_ImageRenderer::Start(CPDF_RenderStatus* pStatus,
+ const CFX_DIBSource* pDIBSource,
+ FX_ARGB bitmap_argb,
+ int bitmap_alpha,
+ const CFX_AffineMatrix* pImage2Device,
+ FX_DWORD flags,
+ FX_BOOL bStdCS,
+ int blendType) {
+ m_pRenderStatus = pStatus;
+ m_pDIBSource = pDIBSource;
+ m_FillArgb = bitmap_argb;
+ m_BitmapAlpha = bitmap_alpha;
+ m_ImageMatrix = *pImage2Device;
+ m_Flags = flags;
+ m_bStdCS = bStdCS;
+ m_BlendType = blendType;
+ return StartDIBSource();
}
-FX_BOOL CPDF_ImageRenderer::DrawPatternImage(const CFX_Matrix* pObj2Device)
-{
- if (m_pRenderStatus->m_bPrint && !(m_pRenderStatus->m_pDevice->GetRenderCaps() & FXRC_BLEND_MODE)) {
- m_Result = FALSE;
- return FALSE;
- }
- FX_RECT rect = m_ImageMatrix.GetUnitRect().GetOutterRect();
- rect.Intersect(m_pRenderStatus->m_pDevice->GetClipBox());
- if (rect.IsEmpty()) {
- return FALSE;
- }
- CFX_AffineMatrix new_matrix = m_ImageMatrix;
- new_matrix.TranslateI(-rect.left, -rect.top);
- int width = rect.Width();
- int height = rect.Height();
- CFX_FxgeDevice bitmap_device1;
- if (!bitmap_device1.Create(rect.Width(), rect.Height(), FXDIB_Rgb32)) {
- return TRUE;
- }
- bitmap_device1.GetBitmap()->Clear(0xffffff);
- {
- CPDF_RenderStatus bitmap_render;
- bitmap_render.Initialize(m_pRenderStatus->m_pContext, &bitmap_device1, NULL, NULL,
- NULL, NULL, &m_pRenderStatus->m_Options, 0, m_pRenderStatus->m_bDropObjects, NULL, TRUE);
- CFX_Matrix patternDevice = *pObj2Device;
- patternDevice.Translate((FX_FLOAT) - rect.left, (FX_FLOAT) - rect.top);
- if(m_pPattern->m_PatternType == PATTERN_TILING) {
- bitmap_render.DrawTilingPattern((CPDF_TilingPattern*)m_pPattern, m_pImageObject, &patternDevice, FALSE);
- } else {
- bitmap_render.DrawShadingPattern((CPDF_ShadingPattern*)m_pPattern, m_pImageObject, &patternDevice, FALSE);
- }
- }
- {
- CFX_FxgeDevice bitmap_device2;
- if (!bitmap_device2.Create(rect.Width(), rect.Height(), FXDIB_8bppRgb)) {
- return TRUE;
- }
- bitmap_device2.GetBitmap()->Clear(0);
- CPDF_RenderStatus bitmap_render;
- bitmap_render.Initialize(m_pRenderStatus->m_pContext, &bitmap_device2, NULL, NULL,
- NULL, NULL, NULL, 0, m_pRenderStatus->m_bDropObjects, NULL, TRUE);
- CPDF_ImageRenderer image_render;
- if (image_render.Start(&bitmap_render, m_pDIBSource, 0xffffffff, 255, &new_matrix, m_Flags, TRUE)) {
- image_render.Continue(NULL);
- }
- if (m_Loader.m_MatteColor != 0xffffffff) {
- int matte_r = FXARGB_R(m_Loader.m_MatteColor);
- int matte_g = FXARGB_G(m_Loader.m_MatteColor);
- int matte_b = FXARGB_B(m_Loader.m_MatteColor);
- for (int row = 0; row < height; row ++) {
- uint8_t* dest_scan = (uint8_t*)bitmap_device1.GetBitmap()->GetScanline(row);
- const uint8_t* mask_scan = bitmap_device2.GetBitmap()->GetScanline(row);
- for (int col = 0; col < width; col ++) {
- int alpha = *mask_scan ++;
- if (alpha) {
- int orig = (*dest_scan - matte_b) * 255 / alpha + matte_b;
- if (orig < 0) {
- orig = 0;
- } else if (orig > 255) {
- orig = 255;
- }
- *dest_scan++ = orig;
- orig = (*dest_scan - matte_g) * 255 / alpha + matte_g;
- if (orig < 0) {
- orig = 0;
- } else if (orig > 255) {
- orig = 255;
- }
- *dest_scan++ = orig;
- orig = (*dest_scan - matte_r) * 255 / alpha + matte_r;
- if (orig < 0) {
- orig = 0;
- } else if (orig > 255) {
- orig = 255;
- }
- *dest_scan++ = orig;
- dest_scan ++;
- } else {
- dest_scan += 4;
- }
- }
- }
- }
- bitmap_device2.GetBitmap()->ConvertFormat(FXDIB_8bppMask);
- bitmap_device1.GetBitmap()->MultiplyAlpha(bitmap_device2.GetBitmap());
- bitmap_device1.GetBitmap()->MultiplyAlpha(255);
- }
- m_pRenderStatus->m_pDevice->SetDIBits(bitmap_device1.GetBitmap(), rect.left, rect.top, m_BlendType);
+FX_BOOL CPDF_ImageRenderer::DrawPatternImage(const CFX_Matrix* pObj2Device) {
+ if (m_pRenderStatus->m_bPrint &&
+ !(m_pRenderStatus->m_pDevice->GetRenderCaps() & FXRC_BLEND_MODE)) {
+ m_Result = FALSE;
return FALSE;
-}
-FX_BOOL CPDF_ImageRenderer::DrawMaskedImage()
-{
- if (m_pRenderStatus->m_bPrint && !(m_pRenderStatus->m_pDevice->GetRenderCaps() & FXRC_BLEND_MODE)) {
- m_Result = FALSE;
- return FALSE;
- }
- FX_RECT rect = m_ImageMatrix.GetUnitRect().GetOutterRect();
- rect.Intersect(m_pRenderStatus->m_pDevice->GetClipBox());
- if (rect.IsEmpty()) {
- return FALSE;
- }
- CFX_AffineMatrix new_matrix = m_ImageMatrix;
- new_matrix.TranslateI(-rect.left, -rect.top);
- int width = rect.Width();
- int height = rect.Height();
- CFX_FxgeDevice bitmap_device1;
- if (!bitmap_device1.Create(width, height, FXDIB_Rgb32)) {
- return TRUE;
- }
- bitmap_device1.GetBitmap()->Clear(0xffffff);
- {
- CPDF_RenderStatus bitmap_render;
- bitmap_render.Initialize(m_pRenderStatus->m_pContext, &bitmap_device1, NULL, NULL,
- NULL, NULL, NULL, 0, m_pRenderStatus->m_bDropObjects, NULL, TRUE);
- CPDF_ImageRenderer image_render;
- if (image_render.Start(&bitmap_render, m_pDIBSource, 0, 255, &new_matrix, m_Flags, TRUE)) {
- image_render.Continue(NULL);
- }
- }
- {
- CFX_FxgeDevice bitmap_device2;
- if (!bitmap_device2.Create(width, height, FXDIB_8bppRgb)) {
- return TRUE;
- }
- bitmap_device2.GetBitmap()->Clear(0);
- CPDF_RenderStatus bitmap_render;
- bitmap_render.Initialize(m_pRenderStatus->m_pContext, &bitmap_device2, NULL, NULL,
- NULL, NULL, NULL, 0, m_pRenderStatus->m_bDropObjects, NULL, TRUE);
- CPDF_ImageRenderer image_render;
- if (image_render.Start(&bitmap_render, m_Loader.m_pMask, 0xffffffff, 255, &new_matrix, m_Flags, TRUE)) {
- image_render.Continue(NULL);
- }
- if (m_Loader.m_MatteColor != 0xffffffff) {
- int matte_r = FXARGB_R(m_Loader.m_MatteColor);
- int matte_g = FXARGB_G(m_Loader.m_MatteColor);
- int matte_b = FXARGB_B(m_Loader.m_MatteColor);
- for (int row = 0; row < height; row ++) {
- uint8_t* dest_scan = (uint8_t*)bitmap_device1.GetBitmap()->GetScanline(row);
- const uint8_t* mask_scan = bitmap_device2.GetBitmap()->GetScanline(row);
- for (int col = 0; col < width; col ++) {
- int alpha = *mask_scan ++;
- if (alpha) {
- int orig = (*dest_scan - matte_b) * 255 / alpha + matte_b;
- if (orig < 0) {
- orig = 0;
- } else if (orig > 255) {
- orig = 255;
- }
- *dest_scan++ = orig;
- orig = (*dest_scan - matte_g) * 255 / alpha + matte_g;
- if (orig < 0) {
- orig = 0;
- } else if (orig > 255) {
- orig = 255;
- }
- *dest_scan++ = orig;
- orig = (*dest_scan - matte_r) * 255 / alpha + matte_r;
- if (orig < 0) {
- orig = 0;
- } else if (orig > 255) {
- orig = 255;
- }
- *dest_scan++ = orig;
- dest_scan ++;
- } else {
- dest_scan += 4;
- }
- }
+ }
+ FX_RECT rect = m_ImageMatrix.GetUnitRect().GetOutterRect();
+ rect.Intersect(m_pRenderStatus->m_pDevice->GetClipBox());
+ if (rect.IsEmpty()) {
+ return FALSE;
+ }
+ CFX_AffineMatrix new_matrix = m_ImageMatrix;
+ new_matrix.TranslateI(-rect.left, -rect.top);
+ int width = rect.Width();
+ int height = rect.Height();
+ CFX_FxgeDevice bitmap_device1;
+ if (!bitmap_device1.Create(rect.Width(), rect.Height(), FXDIB_Rgb32)) {
+ return TRUE;
+ }
+ bitmap_device1.GetBitmap()->Clear(0xffffff);
+ {
+ CPDF_RenderStatus bitmap_render;
+ bitmap_render.Initialize(m_pRenderStatus->m_pContext, &bitmap_device1, NULL,
+ NULL, NULL, NULL, &m_pRenderStatus->m_Options, 0,
+ m_pRenderStatus->m_bDropObjects, NULL, TRUE);
+ CFX_Matrix patternDevice = *pObj2Device;
+ patternDevice.Translate((FX_FLOAT)-rect.left, (FX_FLOAT)-rect.top);
+ if (m_pPattern->m_PatternType == PATTERN_TILING) {
+ bitmap_render.DrawTilingPattern((CPDF_TilingPattern*)m_pPattern,
+ m_pImageObject, &patternDevice, FALSE);
+ } else {
+ bitmap_render.DrawShadingPattern((CPDF_ShadingPattern*)m_pPattern,
+ m_pImageObject, &patternDevice, FALSE);
+ }
+ }
+ {
+ CFX_FxgeDevice bitmap_device2;
+ if (!bitmap_device2.Create(rect.Width(), rect.Height(), FXDIB_8bppRgb)) {
+ return TRUE;
+ }
+ bitmap_device2.GetBitmap()->Clear(0);
+ CPDF_RenderStatus bitmap_render;
+ bitmap_render.Initialize(m_pRenderStatus->m_pContext, &bitmap_device2, NULL,
+ NULL, NULL, NULL, NULL, 0,
+ m_pRenderStatus->m_bDropObjects, NULL, TRUE);
+ CPDF_ImageRenderer image_render;
+ if (image_render.Start(&bitmap_render, m_pDIBSource, 0xffffffff, 255,
+ &new_matrix, m_Flags, TRUE)) {
+ image_render.Continue(NULL);
+ }
+ if (m_Loader.m_MatteColor != 0xffffffff) {
+ int matte_r = FXARGB_R(m_Loader.m_MatteColor);
+ int matte_g = FXARGB_G(m_Loader.m_MatteColor);
+ int matte_b = FXARGB_B(m_Loader.m_MatteColor);
+ for (int row = 0; row < height; row++) {
+ uint8_t* dest_scan =
+ (uint8_t*)bitmap_device1.GetBitmap()->GetScanline(row);
+ const uint8_t* mask_scan = bitmap_device2.GetBitmap()->GetScanline(row);
+ for (int col = 0; col < width; col++) {
+ int alpha = *mask_scan++;
+ if (alpha) {
+ int orig = (*dest_scan - matte_b) * 255 / alpha + matte_b;
+ if (orig < 0) {
+ orig = 0;
+ } else if (orig > 255) {
+ orig = 255;
}
+ *dest_scan++ = orig;
+ orig = (*dest_scan - matte_g) * 255 / alpha + matte_g;
+ if (orig < 0) {
+ orig = 0;
+ } else if (orig > 255) {
+ orig = 255;
+ }
+ *dest_scan++ = orig;
+ orig = (*dest_scan - matte_r) * 255 / alpha + matte_r;
+ if (orig < 0) {
+ orig = 0;
+ } else if (orig > 255) {
+ orig = 255;
+ }
+ *dest_scan++ = orig;
+ dest_scan++;
+ } else {
+ dest_scan += 4;
+ }
}
- bitmap_device2.GetBitmap()->ConvertFormat(FXDIB_8bppMask);
- bitmap_device1.GetBitmap()->MultiplyAlpha(bitmap_device2.GetBitmap());
- if (m_BitmapAlpha < 255) {
- bitmap_device1.GetBitmap()->MultiplyAlpha(m_BitmapAlpha);
- }
- }
- m_pRenderStatus->m_pDevice->SetDIBits(bitmap_device1.GetBitmap(), rect.left, rect.top, m_BlendType);
- return FALSE;
+ }
+ }
+ bitmap_device2.GetBitmap()->ConvertFormat(FXDIB_8bppMask);
+ bitmap_device1.GetBitmap()->MultiplyAlpha(bitmap_device2.GetBitmap());
+ bitmap_device1.GetBitmap()->MultiplyAlpha(255);
+ }
+ m_pRenderStatus->m_pDevice->SetDIBits(bitmap_device1.GetBitmap(), rect.left,
+ rect.top, m_BlendType);
+ return FALSE;
}
-FX_BOOL CPDF_ImageRenderer::StartDIBSource()
-{
- if (!(m_Flags & RENDER_FORCE_DOWNSAMPLE) && m_pDIBSource->GetBPP() > 1) {
- int image_size = m_pDIBSource->GetBPP() / 8 * m_pDIBSource->GetWidth() * m_pDIBSource->GetHeight();
- if (image_size > FPDF_HUGE_IMAGE_SIZE && !(m_Flags & RENDER_FORCE_HALFTONE)) {
- m_Flags |= RENDER_FORCE_DOWNSAMPLE;
- }
- }
- if (m_pRenderStatus->m_pDevice->StartDIBits(m_pDIBSource, m_BitmapAlpha, m_FillArgb,
- &m_ImageMatrix, m_Flags, m_DeviceHandle, 0, NULL, m_BlendType)) {
- if (m_DeviceHandle != NULL) {
- m_Status = 3;
- return TRUE;
- }
- return FALSE;
- }
- CFX_FloatRect image_rect_f = m_ImageMatrix.GetUnitRect();
- FX_RECT image_rect = image_rect_f.GetOutterRect();
- int dest_width = image_rect.Width();
- int dest_height = image_rect.Height();
- if ((FXSYS_fabs(m_ImageMatrix.b) >= 0.5f || m_ImageMatrix.a == 0) ||
- (FXSYS_fabs(m_ImageMatrix.c) >= 0.5f || m_ImageMatrix.d == 0) ) {
- if (m_pRenderStatus->m_bPrint && !(m_pRenderStatus->m_pDevice->GetRenderCaps() & FXRC_BLEND_MODE)) {
- m_Result = FALSE;
- return FALSE;
+FX_BOOL CPDF_ImageRenderer::DrawMaskedImage() {
+ if (m_pRenderStatus->m_bPrint &&
+ !(m_pRenderStatus->m_pDevice->GetRenderCaps() & FXRC_BLEND_MODE)) {
+ m_Result = FALSE;
+ return FALSE;
+ }
+ FX_RECT rect = m_ImageMatrix.GetUnitRect().GetOutterRect();
+ rect.Intersect(m_pRenderStatus->m_pDevice->GetClipBox());
+ if (rect.IsEmpty()) {
+ return FALSE;
+ }
+ CFX_AffineMatrix new_matrix = m_ImageMatrix;
+ new_matrix.TranslateI(-rect.left, -rect.top);
+ int width = rect.Width();
+ int height = rect.Height();
+ CFX_FxgeDevice bitmap_device1;
+ if (!bitmap_device1.Create(width, height, FXDIB_Rgb32)) {
+ return TRUE;
+ }
+ bitmap_device1.GetBitmap()->Clear(0xffffff);
+ {
+ CPDF_RenderStatus bitmap_render;
+ bitmap_render.Initialize(m_pRenderStatus->m_pContext, &bitmap_device1, NULL,
+ NULL, NULL, NULL, NULL, 0,
+ m_pRenderStatus->m_bDropObjects, NULL, TRUE);
+ CPDF_ImageRenderer image_render;
+ if (image_render.Start(&bitmap_render, m_pDIBSource, 0, 255, &new_matrix,
+ m_Flags, TRUE)) {
+ image_render.Continue(NULL);
+ }
+ }
+ {
+ CFX_FxgeDevice bitmap_device2;
+ if (!bitmap_device2.Create(width, height, FXDIB_8bppRgb)) {
+ return TRUE;
+ }
+ bitmap_device2.GetBitmap()->Clear(0);
+ CPDF_RenderStatus bitmap_render;
+ bitmap_render.Initialize(m_pRenderStatus->m_pContext, &bitmap_device2, NULL,
+ NULL, NULL, NULL, NULL, 0,
+ m_pRenderStatus->m_bDropObjects, NULL, TRUE);
+ CPDF_ImageRenderer image_render;
+ if (image_render.Start(&bitmap_render, m_Loader.m_pMask, 0xffffffff, 255,
+ &new_matrix, m_Flags, TRUE)) {
+ image_render.Continue(NULL);
+ }
+ if (m_Loader.m_MatteColor != 0xffffffff) {
+ int matte_r = FXARGB_R(m_Loader.m_MatteColor);
+ int matte_g = FXARGB_G(m_Loader.m_MatteColor);
+ int matte_b = FXARGB_B(m_Loader.m_MatteColor);
+ for (int row = 0; row < height; row++) {
+ uint8_t* dest_scan =
+ (uint8_t*)bitmap_device1.GetBitmap()->GetScanline(row);
+ const uint8_t* mask_scan = bitmap_device2.GetBitmap()->GetScanline(row);
+ for (int col = 0; col < width; col++) {
+ int alpha = *mask_scan++;
+ if (alpha) {
+ int orig = (*dest_scan - matte_b) * 255 / alpha + matte_b;
+ if (orig < 0) {
+ orig = 0;
+ } else if (orig > 255) {
+ orig = 255;
+ }
+ *dest_scan++ = orig;
+ orig = (*dest_scan - matte_g) * 255 / alpha + matte_g;
+ if (orig < 0) {
+ orig = 0;
+ } else if (orig > 255) {
+ orig = 255;
+ }
+ *dest_scan++ = orig;
+ orig = (*dest_scan - matte_r) * 255 / alpha + matte_r;
+ if (orig < 0) {
+ orig = 0;
+ } else if (orig > 255) {
+ orig = 255;
+ }
+ *dest_scan++ = orig;
+ dest_scan++;
+ } else {
+ dest_scan += 4;
+ }
}
- FX_RECT clip_box = m_pRenderStatus->m_pDevice->GetClipBox();
- clip_box.Intersect(image_rect);
- m_Status = 2;
- m_pTransformer = new CFX_ImageTransformer;
- m_pTransformer->Start(m_pDIBSource, &m_ImageMatrix, m_Flags, &clip_box);
- return TRUE;
- }
- if (m_ImageMatrix.a < 0) {
- dest_width = -dest_width;
+ }
}
- if (m_ImageMatrix.d > 0) {
- dest_height = -dest_height;
+ bitmap_device2.GetBitmap()->ConvertFormat(FXDIB_8bppMask);
+ bitmap_device1.GetBitmap()->MultiplyAlpha(bitmap_device2.GetBitmap());
+ if (m_BitmapAlpha < 255) {
+ bitmap_device1.GetBitmap()->MultiplyAlpha(m_BitmapAlpha);
}
- int dest_left, dest_top;
- dest_left = dest_width > 0 ? image_rect.left : image_rect.right;
- dest_top = dest_height > 0 ? image_rect.top : image_rect.bottom;
- if (m_pDIBSource->IsOpaqueImage() && m_BitmapAlpha == 255) {
- if (m_pRenderStatus->m_pDevice->StretchDIBits(m_pDIBSource, dest_left, dest_top,
- dest_width, dest_height, m_Flags, NULL, m_BlendType)) {
- return FALSE;
- }
- }
- if (m_pDIBSource->IsAlphaMask()) {
- if (m_BitmapAlpha != 255) {
- m_FillArgb = FXARGB_MUL_ALPHA(m_FillArgb, m_BitmapAlpha);
- }
- if (m_pRenderStatus->m_pDevice->StretchBitMask(m_pDIBSource, dest_left, dest_top, dest_width, dest_height, m_FillArgb, m_Flags)) {
- return FALSE;
- }
+ }
+ m_pRenderStatus->m_pDevice->SetDIBits(bitmap_device1.GetBitmap(), rect.left,
+ rect.top, m_BlendType);
+ return FALSE;
+}
+FX_BOOL CPDF_ImageRenderer::StartDIBSource() {
+ if (!(m_Flags & RENDER_FORCE_DOWNSAMPLE) && m_pDIBSource->GetBPP() > 1) {
+ int image_size = m_pDIBSource->GetBPP() / 8 * m_pDIBSource->GetWidth() *
+ m_pDIBSource->GetHeight();
+ if (image_size > FPDF_HUGE_IMAGE_SIZE &&
+ !(m_Flags & RENDER_FORCE_HALFTONE)) {
+ m_Flags |= RENDER_FORCE_DOWNSAMPLE;
+ }
+ }
+ if (m_pRenderStatus->m_pDevice->StartDIBits(
+ m_pDIBSource, m_BitmapAlpha, m_FillArgb, &m_ImageMatrix, m_Flags,
+ m_DeviceHandle, 0, NULL, m_BlendType)) {
+ if (m_DeviceHandle != NULL) {
+ m_Status = 3;
+ return TRUE;
}
- if (m_pRenderStatus->m_bPrint && !(m_pRenderStatus->m_pDevice->GetRenderCaps() & FXRC_BLEND_MODE)) {
- m_Result = FALSE;
- return TRUE;
+ return FALSE;
+ }
+ CFX_FloatRect image_rect_f = m_ImageMatrix.GetUnitRect();
+ FX_RECT image_rect = image_rect_f.GetOutterRect();
+ int dest_width = image_rect.Width();
+ int dest_height = image_rect.Height();
+ if ((FXSYS_fabs(m_ImageMatrix.b) >= 0.5f || m_ImageMatrix.a == 0) ||
+ (FXSYS_fabs(m_ImageMatrix.c) >= 0.5f || m_ImageMatrix.d == 0)) {
+ if (m_pRenderStatus->m_bPrint &&
+ !(m_pRenderStatus->m_pDevice->GetRenderCaps() & FXRC_BLEND_MODE)) {
+ m_Result = FALSE;
+ return FALSE;
}
FX_RECT clip_box = m_pRenderStatus->m_pDevice->GetClipBox();
- FX_RECT dest_rect = clip_box;
- dest_rect.Intersect(image_rect);
- FX_RECT dest_clip(dest_rect.left - image_rect.left, dest_rect.top - image_rect.top,
- dest_rect.right - image_rect.left, dest_rect.bottom - image_rect.top);
- CFX_DIBitmap* pStretched = m_pDIBSource->StretchTo(dest_width, dest_height, m_Flags, &dest_clip);
- if (pStretched) {
- m_pRenderStatus->CompositeDIBitmap(pStretched, dest_rect.left, dest_rect.top, m_FillArgb,
- m_BitmapAlpha, m_BlendType, FALSE);
- delete pStretched;
- pStretched = NULL;
- }
- return FALSE;
+ clip_box.Intersect(image_rect);
+ m_Status = 2;
+ m_pTransformer = new CFX_ImageTransformer;
+ m_pTransformer->Start(m_pDIBSource, &m_ImageMatrix, m_Flags, &clip_box);
+ return TRUE;
+ }
+ if (m_ImageMatrix.a < 0) {
+ dest_width = -dest_width;
+ }
+ if (m_ImageMatrix.d > 0) {
+ dest_height = -dest_height;
+ }
+ int dest_left, dest_top;
+ dest_left = dest_width > 0 ? image_rect.left : image_rect.right;
+ dest_top = dest_height > 0 ? image_rect.top : image_rect.bottom;
+ if (m_pDIBSource->IsOpaqueImage() && m_BitmapAlpha == 255) {
+ if (m_pRenderStatus->m_pDevice->StretchDIBits(
+ m_pDIBSource, dest_left, dest_top, dest_width, dest_height, m_Flags,
+ NULL, m_BlendType)) {
+ return FALSE;
+ }
+ }
+ if (m_pDIBSource->IsAlphaMask()) {
+ if (m_BitmapAlpha != 255) {
+ m_FillArgb = FXARGB_MUL_ALPHA(m_FillArgb, m_BitmapAlpha);
+ }
+ if (m_pRenderStatus->m_pDevice->StretchBitMask(
+ m_pDIBSource, dest_left, dest_top, dest_width, dest_height,
+ m_FillArgb, m_Flags)) {
+ return FALSE;
+ }
+ }
+ if (m_pRenderStatus->m_bPrint &&
+ !(m_pRenderStatus->m_pDevice->GetRenderCaps() & FXRC_BLEND_MODE)) {
+ m_Result = FALSE;
+ return TRUE;
+ }
+ FX_RECT clip_box = m_pRenderStatus->m_pDevice->GetClipBox();
+ FX_RECT dest_rect = clip_box;
+ dest_rect.Intersect(image_rect);
+ FX_RECT dest_clip(
+ dest_rect.left - image_rect.left, dest_rect.top - image_rect.top,
+ dest_rect.right - image_rect.left, dest_rect.bottom - image_rect.top);
+ CFX_DIBitmap* pStretched =
+ m_pDIBSource->StretchTo(dest_width, dest_height, m_Flags, &dest_clip);
+ if (pStretched) {
+ m_pRenderStatus->CompositeDIBitmap(pStretched, dest_rect.left,
+ dest_rect.top, m_FillArgb, m_BitmapAlpha,
+ m_BlendType, FALSE);
+ delete pStretched;
+ pStretched = NULL;
+ }
+ return FALSE;
}
-FX_BOOL CPDF_ImageRenderer::StartBitmapAlpha()
-{
- if (m_pDIBSource->IsOpaqueImage()) {
- CFX_PathData path;
- path.AppendRect(0, 0, 1, 1);
- path.Transform(&m_ImageMatrix);
- FX_DWORD fill_color = ArgbEncode(0xff, m_BitmapAlpha, m_BitmapAlpha, m_BitmapAlpha);
- m_pRenderStatus->m_pDevice->DrawPath(&path, NULL, NULL, fill_color, 0, FXFILL_WINDING);
+FX_BOOL CPDF_ImageRenderer::StartBitmapAlpha() {
+ if (m_pDIBSource->IsOpaqueImage()) {
+ CFX_PathData path;
+ path.AppendRect(0, 0, 1, 1);
+ path.Transform(&m_ImageMatrix);
+ FX_DWORD fill_color =
+ ArgbEncode(0xff, m_BitmapAlpha, m_BitmapAlpha, m_BitmapAlpha);
+ m_pRenderStatus->m_pDevice->DrawPath(&path, NULL, NULL, fill_color, 0,
+ FXFILL_WINDING);
+ } else {
+ const CFX_DIBSource* pAlphaMask = m_pDIBSource->IsAlphaMask()
+ ? m_pDIBSource
+ : m_pDIBSource->GetAlphaMask();
+ if (FXSYS_fabs(m_ImageMatrix.b) >= 0.5f ||
+ FXSYS_fabs(m_ImageMatrix.c) >= 0.5f) {
+ int left, top;
+ CFX_DIBitmap* pTransformed =
+ pAlphaMask->TransformTo(&m_ImageMatrix, left, top);
+ if (pTransformed == NULL) {
+ return TRUE;
+ }
+ m_pRenderStatus->m_pDevice->SetBitMask(
+ pTransformed, left, top,
+ ArgbEncode(0xff, m_BitmapAlpha, m_BitmapAlpha, m_BitmapAlpha));
+ delete pTransformed;
} else {
- const CFX_DIBSource* pAlphaMask = m_pDIBSource->IsAlphaMask() ? m_pDIBSource : m_pDIBSource->GetAlphaMask();
- if (FXSYS_fabs(m_ImageMatrix.b) >= 0.5f || FXSYS_fabs(m_ImageMatrix.c) >= 0.5f) {
- int left, top;
- CFX_DIBitmap* pTransformed = pAlphaMask->TransformTo(&m_ImageMatrix, left, top);
- if (pTransformed == NULL) {
- return TRUE;
- }
- m_pRenderStatus->m_pDevice->SetBitMask(pTransformed, left, top, ArgbEncode(0xff, m_BitmapAlpha, m_BitmapAlpha, m_BitmapAlpha));
- delete pTransformed;
- } else {
- CFX_FloatRect image_rect_f = m_ImageMatrix.GetUnitRect();
- FX_RECT image_rect = image_rect_f.GetOutterRect();
- int dest_width = m_ImageMatrix.a > 0 ? image_rect.Width() : -image_rect.Width();
- int dest_height = m_ImageMatrix.d > 0 ? -image_rect.Height() : image_rect.Height();
- int left = dest_width > 0 ? image_rect.left : image_rect.right;
- int top = dest_height > 0 ? image_rect.top : image_rect.bottom;
- m_pRenderStatus->m_pDevice->StretchBitMask(pAlphaMask, left, top, dest_width, dest_height,
- ArgbEncode(0xff, m_BitmapAlpha, m_BitmapAlpha, m_BitmapAlpha));
- }
- if (m_pDIBSource != pAlphaMask) {
- delete pAlphaMask;
- }
- }
- return FALSE;
+ CFX_FloatRect image_rect_f = m_ImageMatrix.GetUnitRect();
+ FX_RECT image_rect = image_rect_f.GetOutterRect();
+ int dest_width =
+ m_ImageMatrix.a > 0 ? image_rect.Width() : -image_rect.Width();
+ int dest_height =
+ m_ImageMatrix.d > 0 ? -image_rect.Height() : image_rect.Height();
+ int left = dest_width > 0 ? image_rect.left : image_rect.right;
+ int top = dest_height > 0 ? image_rect.top : image_rect.bottom;
+ m_pRenderStatus->m_pDevice->StretchBitMask(
+ pAlphaMask, left, top, dest_width, dest_height,
+ ArgbEncode(0xff, m_BitmapAlpha, m_BitmapAlpha, m_BitmapAlpha));
+ }
+ if (m_pDIBSource != pAlphaMask) {
+ delete pAlphaMask;
+ }
+ }
+ return FALSE;
}
-FX_BOOL CPDF_ImageRenderer::Continue(IFX_Pause* pPause)
-{
- if (m_Status == 1) {
- if (m_pQuickStretcher->Continue(pPause)) {
- return TRUE;
- }
- if (m_pQuickStretcher->m_pBitmap->IsAlphaMask())
- m_pRenderStatus->m_pDevice->SetBitMask(m_pQuickStretcher->m_pBitmap, m_pQuickStretcher->m_ResultLeft,
- m_pQuickStretcher->m_ResultTop, m_FillArgb);
- else
- m_pRenderStatus->m_pDevice->SetDIBits(m_pQuickStretcher->m_pBitmap, m_pQuickStretcher->m_ResultLeft,
- m_pQuickStretcher->m_ResultTop, m_BlendType);
- return FALSE;
- }
- if (m_Status == 2) {
- if (m_pTransformer->Continue(pPause)) {
- return TRUE;
- }
- CFX_DIBitmap* pBitmap = m_pTransformer->m_Storer.Detach();
- if (pBitmap == NULL) {
- return FALSE;
- }
- if (pBitmap->IsAlphaMask()) {
- if (m_BitmapAlpha != 255) {
- m_FillArgb = FXARGB_MUL_ALPHA(m_FillArgb, m_BitmapAlpha);
- }
- m_Result = m_pRenderStatus->m_pDevice->SetBitMask(pBitmap,
- m_pTransformer->m_ResultLeft, m_pTransformer->m_ResultTop, m_FillArgb);
- } else {
- if (m_BitmapAlpha != 255) {
- pBitmap->MultiplyAlpha(m_BitmapAlpha);
- }
- m_Result = m_pRenderStatus->m_pDevice->SetDIBits(pBitmap,
- m_pTransformer->m_ResultLeft, m_pTransformer->m_ResultTop, m_BlendType);
- }
- delete pBitmap;
- return FALSE;
- }
- if (m_Status == 3) {
- return m_pRenderStatus->m_pDevice->ContinueDIBits(m_DeviceHandle, pPause);
- }
- if (m_Status == 4) {
- if (m_Loader.Continue(m_LoadHandle, pPause)) {
- return TRUE;
- }
- if (StartRenderDIBSource()) {
- return Continue(pPause);
- }
- }
+FX_BOOL CPDF_ImageRenderer::Continue(IFX_Pause* pPause) {
+ if (m_Status == 1) {
+ if (m_pQuickStretcher->Continue(pPause)) {
+ return TRUE;
+ }
+ if (m_pQuickStretcher->m_pBitmap->IsAlphaMask())
+ m_pRenderStatus->m_pDevice->SetBitMask(
+ m_pQuickStretcher->m_pBitmap, m_pQuickStretcher->m_ResultLeft,
+ m_pQuickStretcher->m_ResultTop, m_FillArgb);
+ else
+ m_pRenderStatus->m_pDevice->SetDIBits(
+ m_pQuickStretcher->m_pBitmap, m_pQuickStretcher->m_ResultLeft,
+ m_pQuickStretcher->m_ResultTop, m_BlendType);
return FALSE;
+ }
+ if (m_Status == 2) {
+ if (m_pTransformer->Continue(pPause)) {
+ return TRUE;
+ }
+ CFX_DIBitmap* pBitmap = m_pTransformer->m_Storer.Detach();
+ if (pBitmap == NULL) {
+ return FALSE;
+ }
+ if (pBitmap->IsAlphaMask()) {
+ if (m_BitmapAlpha != 255) {
+ m_FillArgb = FXARGB_MUL_ALPHA(m_FillArgb, m_BitmapAlpha);
+ }
+ m_Result = m_pRenderStatus->m_pDevice->SetBitMask(
+ pBitmap, m_pTransformer->m_ResultLeft, m_pTransformer->m_ResultTop,
+ m_FillArgb);
+ } else {
+ if (m_BitmapAlpha != 255) {
+ pBitmap->MultiplyAlpha(m_BitmapAlpha);
+ }
+ m_Result = m_pRenderStatus->m_pDevice->SetDIBits(
+ pBitmap, m_pTransformer->m_ResultLeft, m_pTransformer->m_ResultTop,
+ m_BlendType);
+ }
+ delete pBitmap;
+ return FALSE;
+ }
+ if (m_Status == 3) {
+ return m_pRenderStatus->m_pDevice->ContinueDIBits(m_DeviceHandle, pPause);
+ }
+ if (m_Status == 4) {
+ if (m_Loader.Continue(m_LoadHandle, pPause)) {
+ return TRUE;
+ }
+ if (StartRenderDIBSource()) {
+ return Continue(pPause);
+ }
+ }
+ return FALSE;
}
-CPDF_QuickStretcher::CPDF_QuickStretcher()
-{
- m_pBitmap = NULL;
- m_pDecoder = NULL;
- m_pCS = NULL;
+CPDF_QuickStretcher::CPDF_QuickStretcher() {
+ m_pBitmap = NULL;
+ m_pDecoder = NULL;
+ m_pCS = NULL;
}
-CPDF_QuickStretcher::~CPDF_QuickStretcher()
-{
- delete m_pBitmap;
- if (m_pCS) {
- m_pCS->ReleaseCS();
- }
- delete m_pDecoder;
+CPDF_QuickStretcher::~CPDF_QuickStretcher() {
+ delete m_pBitmap;
+ if (m_pCS) {
+ m_pCS->ReleaseCS();
+ }
+ delete m_pDecoder;
}
-ICodec_ScanlineDecoder* FPDFAPI_CreateFlateDecoder(const uint8_t* src_buf, FX_DWORD src_size, int width, int height,
- int nComps, int bpc, const CPDF_Dictionary* pParams);
-FX_BOOL CPDF_QuickStretcher::Start(CPDF_ImageObject* pImageObj, CFX_AffineMatrix* pImage2Device, const FX_RECT* pClipBox)
-{
- if (FXSYS_fabs(pImage2Device->a) < FXSYS_fabs(pImage2Device->b) * 10 && FXSYS_fabs(pImage2Device->d) < FXSYS_fabs(pImage2Device->c) * 10) {
- return FALSE;
- }
- CFX_FloatRect image_rect_f = pImage2Device->GetUnitRect();
- FX_RECT image_rect = image_rect_f.GetOutterRect();
- m_DestWidth = image_rect.Width();
- m_DestHeight = image_rect.Height();
- m_bFlipX = pImage2Device->a < 0;
- m_bFlipY = pImage2Device->d > 0;
- FX_RECT result_rect = *pClipBox;
- result_rect.Intersect(image_rect);
- if (result_rect.IsEmpty()) {
- return FALSE;
- }
- m_ResultWidth = result_rect.Width();
- m_ResultHeight = result_rect.Height();
- m_ResultLeft = result_rect.left;
- m_ResultTop = result_rect.top;
- m_ClipLeft = result_rect.left - image_rect.left;
- m_ClipTop = result_rect.top - image_rect.top;
- CPDF_Dictionary* pDict = pImageObj->m_pImage->GetDict();
- if (pDict->GetInteger(FX_BSTRC("BitsPerComponent")) != 8) {
- return FALSE;
- }
- if (pDict->KeyExist(FX_BSTRC("SMask")) || pDict->KeyExist(FX_BSTRC("Mask"))) {
- return FALSE;
- }
- m_SrcWidth = pDict->GetInteger(FX_BSTRC("Width"));
- m_SrcHeight = pDict->GetInteger(FX_BSTRC("Height"));
+ICodec_ScanlineDecoder* FPDFAPI_CreateFlateDecoder(
+ const uint8_t* src_buf,
+ FX_DWORD src_size,
+ int width,
+ int height,
+ int nComps,
+ int bpc,
+ const CPDF_Dictionary* pParams);
+FX_BOOL CPDF_QuickStretcher::Start(CPDF_ImageObject* pImageObj,
+ CFX_AffineMatrix* pImage2Device,
+ const FX_RECT* pClipBox) {
+ if (FXSYS_fabs(pImage2Device->a) < FXSYS_fabs(pImage2Device->b) * 10 &&
+ FXSYS_fabs(pImage2Device->d) < FXSYS_fabs(pImage2Device->c) * 10) {
+ return FALSE;
+ }
+ CFX_FloatRect image_rect_f = pImage2Device->GetUnitRect();
+ FX_RECT image_rect = image_rect_f.GetOutterRect();
+ m_DestWidth = image_rect.Width();
+ m_DestHeight = image_rect.Height();
+ m_bFlipX = pImage2Device->a < 0;
+ m_bFlipY = pImage2Device->d > 0;
+ FX_RECT result_rect = *pClipBox;
+ result_rect.Intersect(image_rect);
+ if (result_rect.IsEmpty()) {
+ return FALSE;
+ }
+ m_ResultWidth = result_rect.Width();
+ m_ResultHeight = result_rect.Height();
+ m_ResultLeft = result_rect.left;
+ m_ResultTop = result_rect.top;
+ m_ClipLeft = result_rect.left - image_rect.left;
+ m_ClipTop = result_rect.top - image_rect.top;
+ CPDF_Dictionary* pDict = pImageObj->m_pImage->GetDict();
+ if (pDict->GetInteger(FX_BSTRC("BitsPerComponent")) != 8) {
+ return FALSE;
+ }
+ if (pDict->KeyExist(FX_BSTRC("SMask")) || pDict->KeyExist(FX_BSTRC("Mask"))) {
+ return FALSE;
+ }
+ m_SrcWidth = pDict->GetInteger(FX_BSTRC("Width"));
+ m_SrcHeight = pDict->GetInteger(FX_BSTRC("Height"));
+ m_pCS = NULL;
+ m_Bpp = 3;
+ CPDF_Object* pCSObj = pDict->GetElementValue(FX_BSTRC("ColorSpace"));
+ if (pCSObj == NULL) {
+ return FALSE;
+ }
+ m_pCS = CPDF_ColorSpace::Load(pImageObj->m_pImage->GetDocument(), pCSObj);
+ if (m_pCS == NULL) {
+ return FALSE;
+ }
+ if (!_IsSupported(m_pCS)) {
+ return FALSE;
+ }
+ m_Bpp = m_pCS->CountComponents();
+ if (m_pCS->sRGB()) {
+ m_pCS->ReleaseCS();
m_pCS = NULL;
- m_Bpp = 3;
- CPDF_Object* pCSObj = pDict->GetElementValue(FX_BSTRC("ColorSpace"));
- if (pCSObj == NULL) {
- return FALSE;
- }
- m_pCS = CPDF_ColorSpace::Load(pImageObj->m_pImage->GetDocument(), pCSObj);
- if (m_pCS == NULL) {
- return FALSE;
- }
- if (!_IsSupported(m_pCS)) {
- return FALSE;
- }
- m_Bpp = m_pCS->CountComponents();
- if (m_pCS->sRGB()) {
- m_pCS->ReleaseCS();
- m_pCS = NULL;
- }
- CPDF_Stream* pStream = pImageObj->m_pImage->GetStream();
- m_StreamAcc.LoadAllData(pStream, FALSE, m_SrcWidth * m_SrcHeight * m_Bpp, TRUE);
- m_pDecoder = NULL;
- if (!m_StreamAcc.GetImageDecoder().IsEmpty()) {
- if (m_StreamAcc.GetImageDecoder() == FX_BSTRC("DCTDecode")) {
- const CPDF_Dictionary* pParam = m_StreamAcc.GetImageParam();
- m_pDecoder = CPDF_ModuleMgr::Get()->GetJpegModule()->CreateDecoder(
- m_StreamAcc.GetData(), m_StreamAcc.GetSize(), m_SrcWidth, m_SrcHeight, m_Bpp,
- pParam ? pParam->GetInteger(FX_BSTRC("ColorTransform"), 1) : 1);
- } else if (m_StreamAcc.GetImageDecoder() == FX_BSTRC("FlateDecode")) {
- m_pDecoder = FPDFAPI_CreateFlateDecoder(
- m_StreamAcc.GetData(), m_StreamAcc.GetSize(), m_SrcWidth, m_SrcHeight, m_Bpp, 8,
- m_StreamAcc.GetImageParam());
- } else {
- return FALSE;
- }
- m_pDecoder->DownScale(m_DestWidth, m_DestHeight);
+ }
+ CPDF_Stream* pStream = pImageObj->m_pImage->GetStream();
+ m_StreamAcc.LoadAllData(pStream, FALSE, m_SrcWidth * m_SrcHeight * m_Bpp,
+ TRUE);
+ m_pDecoder = NULL;
+ if (!m_StreamAcc.GetImageDecoder().IsEmpty()) {
+ if (m_StreamAcc.GetImageDecoder() == FX_BSTRC("DCTDecode")) {
+ const CPDF_Dictionary* pParam = m_StreamAcc.GetImageParam();
+ m_pDecoder = CPDF_ModuleMgr::Get()->GetJpegModule()->CreateDecoder(
+ m_StreamAcc.GetData(), m_StreamAcc.GetSize(), m_SrcWidth, m_SrcHeight,
+ m_Bpp,
+ pParam ? pParam->GetInteger(FX_BSTRC("ColorTransform"), 1) : 1);
+ } else if (m_StreamAcc.GetImageDecoder() == FX_BSTRC("FlateDecode")) {
+ m_pDecoder = FPDFAPI_CreateFlateDecoder(
+ m_StreamAcc.GetData(), m_StreamAcc.GetSize(), m_SrcWidth, m_SrcHeight,
+ m_Bpp, 8, m_StreamAcc.GetImageParam());
+ } else {
+ return FALSE;
}
- m_pBitmap = new CFX_DIBitmap;
-#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
- m_pBitmap->Create(m_ResultWidth, m_ResultHeight, FXDIB_Rgb32);
+ m_pDecoder->DownScale(m_DestWidth, m_DestHeight);
+ }
+ m_pBitmap = new CFX_DIBitmap;
+#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
+ m_pBitmap->Create(m_ResultWidth, m_ResultHeight, FXDIB_Rgb32);
#else
- m_pBitmap->Create(m_ResultWidth, m_ResultHeight, FXDIB_Rgb);
+ m_pBitmap->Create(m_ResultWidth, m_ResultHeight, FXDIB_Rgb);
#endif
- m_LineIndex = 0;
- return TRUE;
+ m_LineIndex = 0;
+ return TRUE;
}
-FX_BOOL CPDF_QuickStretcher::Continue(IFX_Pause* pPause)
-{
- uint8_t* result_buf = m_pBitmap->GetBuffer();
- int src_width = m_pDecoder ? m_pDecoder->GetWidth() : m_SrcWidth;
- int src_height = m_pDecoder ? m_pDecoder->GetHeight() : m_SrcHeight;
- int src_pitch = src_width * m_Bpp;
- while (m_LineIndex < m_ResultHeight) {
- int dest_y, src_y;
- if (m_bFlipY) {
- dest_y = m_ResultHeight - m_LineIndex - 1;
- src_y = (m_DestHeight - (dest_y + m_ClipTop) - 1) * src_height / m_DestHeight;
- } else {
- dest_y = m_LineIndex;
- src_y = (dest_y + m_ClipTop) * src_height / m_DestHeight;
- }
- const uint8_t* src_scan;
- if (m_pDecoder) {
- src_scan = m_pDecoder->GetScanline(src_y);
- if (src_scan == NULL) {
- break;
- }
- } else {
- src_scan = m_StreamAcc.GetData();
- if (src_scan == NULL) {
- break;
- }
- src_scan += src_y * src_pitch;
- }
- uint8_t* result_scan = result_buf + dest_y * m_pBitmap->GetPitch();
- for (int x = 0; x < m_ResultWidth; x ++) {
- int dest_x = m_ClipLeft + x;
- int src_x = (m_bFlipX ? (m_DestWidth - dest_x - 1) : dest_x) * src_width / m_DestWidth;
- const uint8_t* src_pixel = src_scan + src_x * m_Bpp;
- if (m_pCS == NULL) {
- *result_scan = src_pixel[2];
- result_scan ++;
- *result_scan = src_pixel[1];
- result_scan ++;
- *result_scan = src_pixel[0];
- result_scan ++;
-#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
- result_scan ++;
+FX_BOOL CPDF_QuickStretcher::Continue(IFX_Pause* pPause) {
+ uint8_t* result_buf = m_pBitmap->GetBuffer();
+ int src_width = m_pDecoder ? m_pDecoder->GetWidth() : m_SrcWidth;
+ int src_height = m_pDecoder ? m_pDecoder->GetHeight() : m_SrcHeight;
+ int src_pitch = src_width * m_Bpp;
+ while (m_LineIndex < m_ResultHeight) {
+ int dest_y, src_y;
+ if (m_bFlipY) {
+ dest_y = m_ResultHeight - m_LineIndex - 1;
+ src_y =
+ (m_DestHeight - (dest_y + m_ClipTop) - 1) * src_height / m_DestHeight;
+ } else {
+ dest_y = m_LineIndex;
+ src_y = (dest_y + m_ClipTop) * src_height / m_DestHeight;
+ }
+ const uint8_t* src_scan;
+ if (m_pDecoder) {
+ src_scan = m_pDecoder->GetScanline(src_y);
+ if (src_scan == NULL) {
+ break;
+ }
+ } else {
+ src_scan = m_StreamAcc.GetData();
+ if (src_scan == NULL) {
+ break;
+ }
+ src_scan += src_y * src_pitch;
+ }
+ uint8_t* result_scan = result_buf + dest_y * m_pBitmap->GetPitch();
+ for (int x = 0; x < m_ResultWidth; x++) {
+ int dest_x = m_ClipLeft + x;
+ int src_x = (m_bFlipX ? (m_DestWidth - dest_x - 1) : dest_x) * src_width /
+ m_DestWidth;
+ const uint8_t* src_pixel = src_scan + src_x * m_Bpp;
+ if (m_pCS == NULL) {
+ *result_scan = src_pixel[2];
+ result_scan++;
+ *result_scan = src_pixel[1];
+ result_scan++;
+ *result_scan = src_pixel[0];
+ result_scan++;
+#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
+ result_scan++;
#endif
- } else {
- m_pCS->TranslateImageLine(result_scan, src_pixel, 1, 0, 0);
-#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
- result_scan += 4;
+ } else {
+ m_pCS->TranslateImageLine(result_scan, src_pixel, 1, 0, 0);
+#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
+ result_scan += 4;
#else
- result_scan += 3;
+ result_scan += 3;
#endif
- }
- }
- m_LineIndex ++;
- if (pPause && pPause->NeedToPauseNow()) {
- return TRUE;
- }
+ }
}
- return FALSE;
+ m_LineIndex++;
+ if (pPause && pPause->NeedToPauseNow()) {
+ return TRUE;
+ }
+ }
+ return FALSE;
}
CFX_DIBitmap* CPDF_RenderStatus::LoadSMask(CPDF_Dictionary* pSMaskDict,
- FX_RECT* pClipRect, const CFX_AffineMatrix* pMatrix)
-{
- if (pSMaskDict == NULL) {
- return NULL;
- }
- CFX_DIBitmap* pMask = NULL;
- int width = pClipRect->right - pClipRect->left;
- int height = pClipRect->bottom - pClipRect->top;
- FX_BOOL bLuminosity = FALSE;
- bLuminosity = pSMaskDict->GetConstString(FX_BSTRC("S")) != FX_BSTRC("Alpha");
- CPDF_Stream* pGroup = pSMaskDict->GetStream(FX_BSTRC("G"));
- if (pGroup == NULL) {
- return NULL;
- }
- CPDF_Function* pFunc = NULL;
- CPDF_Object* pFuncObj = pSMaskDict->GetElementValue(FX_BSTRC("TR"));
- if (pFuncObj && (pFuncObj->GetType() == PDFOBJ_DICTIONARY || pFuncObj->GetType() == PDFOBJ_STREAM)) {
- pFunc = CPDF_Function::Load(pFuncObj);
- }
- CFX_AffineMatrix matrix = *pMatrix;
- matrix.TranslateI(-pClipRect->left, -pClipRect->top);
- CPDF_Form form(m_pContext->m_pDocument, m_pContext->m_pPageResources, pGroup);
- form.ParseContent(NULL, NULL, NULL, NULL);
- CFX_FxgeDevice bitmap_device;
-#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
- if (!bitmap_device.Create(width, height, bLuminosity ? FXDIB_Rgb32 : FXDIB_8bppMask)) {
- return NULL;
- }
+ FX_RECT* pClipRect,
+ const CFX_AffineMatrix* pMatrix) {
+ if (pSMaskDict == NULL) {
+ return NULL;
+ }
+ CFX_DIBitmap* pMask = NULL;
+ int width = pClipRect->right - pClipRect->left;
+ int height = pClipRect->bottom - pClipRect->top;
+ FX_BOOL bLuminosity = FALSE;
+ bLuminosity = pSMaskDict->GetConstString(FX_BSTRC("S")) != FX_BSTRC("Alpha");
+ CPDF_Stream* pGroup = pSMaskDict->GetStream(FX_BSTRC("G"));
+ if (pGroup == NULL) {
+ return NULL;
+ }
+ CPDF_Function* pFunc = NULL;
+ CPDF_Object* pFuncObj = pSMaskDict->GetElementValue(FX_BSTRC("TR"));
+ if (pFuncObj && (pFuncObj->GetType() == PDFOBJ_DICTIONARY ||
+ pFuncObj->GetType() == PDFOBJ_STREAM)) {
+ pFunc = CPDF_Function::Load(pFuncObj);
+ }
+ CFX_AffineMatrix matrix = *pMatrix;
+ matrix.TranslateI(-pClipRect->left, -pClipRect->top);
+ CPDF_Form form(m_pContext->m_pDocument, m_pContext->m_pPageResources, pGroup);
+ form.ParseContent(NULL, NULL, NULL, NULL);
+ CFX_FxgeDevice bitmap_device;
+#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
+ if (!bitmap_device.Create(width, height,
+ bLuminosity ? FXDIB_Rgb32 : FXDIB_8bppMask)) {
+ return NULL;
+ }
#else
- if (!bitmap_device.Create(width, height, bLuminosity ? FXDIB_Rgb : FXDIB_8bppMask)) {
- return NULL;
- }
+ if (!bitmap_device.Create(width, height,
+ bLuminosity ? FXDIB_Rgb : FXDIB_8bppMask)) {
+ return NULL;
+ }
#endif
- CFX_DIBitmap& bitmap = *bitmap_device.GetBitmap();
- CPDF_Object* pCSObj = NULL;
- CPDF_ColorSpace* pCS = NULL;
- if (bLuminosity) {
- CPDF_Array* pBC = pSMaskDict->GetArray(FX_BSTRC("BC"));
- FX_ARGB back_color = 0xff000000;
- if (pBC) {
- CPDF_Dictionary* pDict = pGroup->GetDict();
- if (pDict && pDict->GetDict(FX_BSTRC("Group")))
- pCSObj = pDict->GetDict(FX_BSTRC("Group"))->GetElementValue(FX_BSTRC("CS"));
- else
- pCSObj = NULL;
- pCS = m_pContext->m_pDocument->LoadColorSpace(pCSObj);
- if (pCS) {
- FX_FLOAT R, G, B;
- FX_DWORD comps = 8;
- if (pCS->CountComponents() > static_cast<int32_t>(comps)) {
- comps = (FX_DWORD)pCS->CountComponents();
- }
- CFX_FixedBufGrow<FX_FLOAT, 8> float_array(comps);
- FX_FLOAT* pFloats = float_array;
- FX_SAFE_DWORD num_floats = comps;
- num_floats *= sizeof(FX_FLOAT);
- if (!num_floats.IsValid()) {
- return NULL;
- }
- FXSYS_memset(pFloats, 0, num_floats.ValueOrDie());
- int count = pBC->GetCount() > 8 ? 8 : pBC->GetCount();
- for (int i = 0; i < count; i ++) {
- pFloats[i] = pBC->GetNumber(i);
- }
- pCS->GetRGB(pFloats, R, G, B);
- back_color = 0xff000000 | ((int32_t)(R * 255) << 16) | ((int32_t)(G * 255) << 8) | (int32_t)(B * 255);
- m_pContext->m_pDocument->GetPageData()->ReleaseColorSpace(pCSObj);
- }
+ CFX_DIBitmap& bitmap = *bitmap_device.GetBitmap();
+ CPDF_Object* pCSObj = NULL;
+ CPDF_ColorSpace* pCS = NULL;
+ if (bLuminosity) {
+ CPDF_Array* pBC = pSMaskDict->GetArray(FX_BSTRC("BC"));
+ FX_ARGB back_color = 0xff000000;
+ if (pBC) {
+ CPDF_Dictionary* pDict = pGroup->GetDict();
+ if (pDict && pDict->GetDict(FX_BSTRC("Group")))
+ pCSObj =
+ pDict->GetDict(FX_BSTRC("Group"))->GetElementValue(FX_BSTRC("CS"));
+ else
+ pCSObj = NULL;
+ pCS = m_pContext->m_pDocument->LoadColorSpace(pCSObj);
+ if (pCS) {
+ FX_FLOAT R, G, B;
+ FX_DWORD comps = 8;
+ if (pCS->CountComponents() > static_cast<int32_t>(comps)) {
+ comps = (FX_DWORD)pCS->CountComponents();
}
- bitmap.Clear(back_color);
- } else {
- bitmap.Clear(0);
- }
- CPDF_Dictionary* pFormResource = NULL;
- if (form.m_pFormDict) {
- pFormResource = form.m_pFormDict->GetDict(FX_BSTRC("Resources"));
- }
- CPDF_RenderOptions options;
- options.m_ColorMode = bLuminosity ? RENDER_COLOR_NORMAL : RENDER_COLOR_ALPHA;
- CPDF_RenderStatus status;
- status.Initialize(m_pContext, &bitmap_device, NULL, NULL, NULL, NULL,
- &options, 0, m_bDropObjects, pFormResource, TRUE, NULL, 0, pCS ? pCS->GetFamily() : 0, bLuminosity);
- status.RenderObjectList(&form, &matrix);
- pMask = new CFX_DIBitmap;
- if (!pMask->Create(width, height, FXDIB_8bppMask)) {
- delete pMask;
- return NULL;
- }
- uint8_t* dest_buf = pMask->GetBuffer();
- int dest_pitch = pMask->GetPitch();
- uint8_t* src_buf = bitmap.GetBuffer();
- int src_pitch = bitmap.GetPitch();
- uint8_t* pTransfer = FX_Alloc(uint8_t, 256);
- if (pFunc) {
- CFX_FixedBufGrow<FX_FLOAT, 16> results(pFunc->CountOutputs());
- for (int i = 0; i < 256; i ++) {
- FX_FLOAT input = (FX_FLOAT)i / 255.0f;
- int nresult;
- pFunc->Call(&input, 1, results, nresult);
- pTransfer[i] = FXSYS_round(results[0] * 255);
+ CFX_FixedBufGrow<FX_FLOAT, 8> float_array(comps);
+ FX_FLOAT* pFloats = float_array;
+ FX_SAFE_DWORD num_floats = comps;
+ num_floats *= sizeof(FX_FLOAT);
+ if (!num_floats.IsValid()) {
+ return NULL;
}
- } else {
- for (int i = 0; i < 256; i ++) {
- pTransfer[i] = i;
+ FXSYS_memset(pFloats, 0, num_floats.ValueOrDie());
+ int count = pBC->GetCount() > 8 ? 8 : pBC->GetCount();
+ for (int i = 0; i < count; i++) {
+ pFloats[i] = pBC->GetNumber(i);
}
- }
- if (bLuminosity) {
- int Bpp = bitmap.GetBPP() / 8;
- for (int row = 0; row < height; row ++) {
- uint8_t* dest_pos = dest_buf + row * dest_pitch;
- uint8_t* src_pos = src_buf + row * src_pitch;
- for (int col = 0; col < width; col ++) {
- *dest_pos ++ = pTransfer[FXRGB2GRAY(src_pos[2], src_pos[1], *src_pos)];
- src_pos += Bpp;
- }
- }
- } else if (pFunc) {
- int size = dest_pitch * height;
- for (int i = 0; i < size; i ++) {
- dest_buf[i] = pTransfer[src_buf[i]];
- }
- } else {
- FXSYS_memcpy(dest_buf, src_buf, dest_pitch * height);
- }
- delete pFunc;
- FX_Free(pTransfer);
- return pMask;
+ pCS->GetRGB(pFloats, R, G, B);
+ back_color = 0xff000000 | ((int32_t)(R * 255) << 16) |
+ ((int32_t)(G * 255) << 8) | (int32_t)(B * 255);
+ m_pContext->m_pDocument->GetPageData()->ReleaseColorSpace(pCSObj);
+ }
+ }
+ bitmap.Clear(back_color);
+ } else {
+ bitmap.Clear(0);
+ }
+ CPDF_Dictionary* pFormResource = NULL;
+ if (form.m_pFormDict) {
+ pFormResource = form.m_pFormDict->GetDict(FX_BSTRC("Resources"));
+ }
+ CPDF_RenderOptions options;
+ options.m_ColorMode = bLuminosity ? RENDER_COLOR_NORMAL : RENDER_COLOR_ALPHA;
+ CPDF_RenderStatus status;
+ status.Initialize(m_pContext, &bitmap_device, NULL, NULL, NULL, NULL,
+ &options, 0, m_bDropObjects, pFormResource, TRUE, NULL, 0,
+ pCS ? pCS->GetFamily() : 0, bLuminosity);
+ status.RenderObjectList(&form, &matrix);
+ pMask = new CFX_DIBitmap;
+ if (!pMask->Create(width, height, FXDIB_8bppMask)) {
+ delete pMask;
+ return NULL;
+ }
+ uint8_t* dest_buf = pMask->GetBuffer();
+ int dest_pitch = pMask->GetPitch();
+ uint8_t* src_buf = bitmap.GetBuffer();
+ int src_pitch = bitmap.GetPitch();
+ uint8_t* pTransfer = FX_Alloc(uint8_t, 256);
+ if (pFunc) {
+ CFX_FixedBufGrow<FX_FLOAT, 16> results(pFunc->CountOutputs());
+ for (int i = 0; i < 256; i++) {
+ FX_FLOAT input = (FX_FLOAT)i / 255.0f;
+ int nresult;
+ pFunc->Call(&input, 1, results, nresult);
+ pTransfer[i] = FXSYS_round(results[0] * 255);
+ }
+ } else {
+ for (int i = 0; i < 256; i++) {
+ pTransfer[i] = i;
+ }
+ }
+ if (bLuminosity) {
+ int Bpp = bitmap.GetBPP() / 8;
+ for (int row = 0; row < height; row++) {
+ uint8_t* dest_pos = dest_buf + row * dest_pitch;
+ uint8_t* src_pos = src_buf + row * src_pitch;
+ for (int col = 0; col < width; col++) {
+ *dest_pos++ = pTransfer[FXRGB2GRAY(src_pos[2], src_pos[1], *src_pos)];
+ src_pos += Bpp;
+ }
+ }
+ } else if (pFunc) {
+ int size = dest_pitch * height;
+ for (int i = 0; i < size; i++) {
+ dest_buf[i] = pTransfer[src_buf[i]];
+ }
+ } else {
+ FXSYS_memcpy(dest_buf, src_buf, dest_pitch * height);
+ }
+ delete pFunc;
+ FX_Free(pTransfer);
+ return pMask;
}
diff --git a/core/src/fpdfapi/fpdf_render/fpdf_render_loadimage.cpp b/core/src/fpdfapi/fpdf_render/fpdf_render_loadimage.cpp
index 7d17e78e24..e066957e62 100644
--- a/core/src/fpdfapi/fpdf_render/fpdf_render_loadimage.cpp
+++ b/core/src/fpdfapi/fpdf_render/fpdf_render_loadimage.cpp
@@ -16,1550 +16,1639 @@
namespace {
-unsigned int _GetBits8(const uint8_t* pData, int bitpos, int nbits)
-{
- unsigned int byte = pData[bitpos / 8];
- if (nbits == 8) {
- return byte;
- }
- if (nbits == 4) {
- return (bitpos % 8) ? (byte & 0x0f) : (byte >> 4);
- }
- if (nbits == 2) {
- return (byte >> (6 - bitpos % 8)) & 0x03;
- }
- if (nbits == 1) {
- return (byte >> (7 - bitpos % 8)) & 0x01;
- }
- if (nbits == 16) {
- return byte * 256 + pData[bitpos / 8 + 1];
- }
- return 0;
+unsigned int _GetBits8(const uint8_t* pData, int bitpos, int nbits) {
+ unsigned int byte = pData[bitpos / 8];
+ if (nbits == 8) {
+ return byte;
+ }
+ if (nbits == 4) {
+ return (bitpos % 8) ? (byte & 0x0f) : (byte >> 4);
+ }
+ if (nbits == 2) {
+ return (byte >> (6 - bitpos % 8)) & 0x03;
+ }
+ if (nbits == 1) {
+ return (byte >> (7 - bitpos % 8)) & 0x01;
+ }
+ if (nbits == 16) {
+ return byte * 256 + pData[bitpos / 8 + 1];
+ }
+ return 0;
}
FX_SAFE_DWORD CalculatePitch8(FX_DWORD bpc,
FX_DWORD components,
int width,
- int height)
-{
- FX_SAFE_DWORD pitch = bpc;
- pitch *= components;
- pitch *= width;
- pitch += 7;
- pitch /= 8;
- pitch *= height;
- return pitch;
+ int height) {
+ FX_SAFE_DWORD pitch = bpc;
+ pitch *= components;
+ pitch *= width;
+ pitch += 7;
+ pitch /= 8;
+ pitch *= height;
+ return pitch;
}
-FX_SAFE_DWORD CalculatePitch32(int bpp, int width)
-{
- FX_SAFE_DWORD pitch = bpp;
- pitch *= width;
- pitch += 31;
- pitch /= 8;
- return pitch;
+FX_SAFE_DWORD CalculatePitch32(int bpp, int width) {
+ FX_SAFE_DWORD pitch = bpp;
+ pitch *= width;
+ pitch += 31;
+ pitch /= 8;
+ return pitch;
}
// Wrapper class to hold objects allocated in CPDF_DIBSource::LoadJpxBitmap(),
// because nonstd::unique_ptr does not support custom deleters yet.
-class JpxBitMapContext
-{
- public:
- explicit JpxBitMapContext(ICodec_JpxModule* jpx_module)
- : jpx_module_(jpx_module),
- ctx_(nullptr),
- output_offsets_(nullptr) {}
+class JpxBitMapContext {
+ public:
+ explicit JpxBitMapContext(ICodec_JpxModule* jpx_module)
+ : jpx_module_(jpx_module), ctx_(nullptr), output_offsets_(nullptr) {}
- ~JpxBitMapContext() {
- FX_Free(output_offsets_);
- jpx_module_->DestroyDecoder(ctx_);
- }
+ ~JpxBitMapContext() {
+ FX_Free(output_offsets_);
+ jpx_module_->DestroyDecoder(ctx_);
+ }
- // Takes ownership of |ctx|.
- void set_context(void* ctx) {
- ctx_ = ctx;
- }
+ // Takes ownership of |ctx|.
+ void set_context(void* ctx) { ctx_ = ctx; }
- void* context() {
- return ctx_;
- }
+ void* context() { return ctx_; }
- // Takes ownership of |output_offsets|.
- void set_output_offsets(unsigned char* output_offsets) {
- output_offsets_ = output_offsets;
- }
+ // Takes ownership of |output_offsets|.
+ void set_output_offsets(unsigned char* output_offsets) {
+ output_offsets_ = output_offsets;
+ }
- unsigned char* output_offsets() {
- return output_offsets_;
- }
+ unsigned char* output_offsets() { return output_offsets_; }
- private:
- ICodec_JpxModule* jpx_module_; // Weak pointer.
- void* ctx_; // Decoder context, owned.
- unsigned char* output_offsets_; // Output offsets for decoding, owned.
+ private:
+ ICodec_JpxModule* jpx_module_; // Weak pointer.
+ void* ctx_; // Decoder context, owned.
+ unsigned char* output_offsets_; // Output offsets for decoding, owned.
- // Disallow evil constructors
- JpxBitMapContext(const JpxBitMapContext&);
- void operator=(const JpxBitMapContext&);
+ // Disallow evil constructors
+ JpxBitMapContext(const JpxBitMapContext&);
+ void operator=(const JpxBitMapContext&);
};
} // namespace
-CFX_DIBSource* CPDF_Image::LoadDIBSource(CFX_DIBSource** ppMask, FX_DWORD* pMatteColor, FX_BOOL bStdCS, FX_DWORD GroupFamily, FX_BOOL bLoadMask) const
-{
- CPDF_DIBSource* pSource = new CPDF_DIBSource;
- if (pSource->Load(m_pDocument, m_pStream, (CPDF_DIBSource**)ppMask, pMatteColor, NULL, NULL, bStdCS, GroupFamily, bLoadMask)) {
- return pSource;
- }
- delete pSource;
- return NULL;
+CFX_DIBSource* CPDF_Image::LoadDIBSource(CFX_DIBSource** ppMask,
+ FX_DWORD* pMatteColor,
+ FX_BOOL bStdCS,
+ FX_DWORD GroupFamily,
+ FX_BOOL bLoadMask) const {
+ CPDF_DIBSource* pSource = new CPDF_DIBSource;
+ if (pSource->Load(m_pDocument, m_pStream, (CPDF_DIBSource**)ppMask,
+ pMatteColor, NULL, NULL, bStdCS, GroupFamily, bLoadMask)) {
+ return pSource;
+ }
+ delete pSource;
+ return NULL;
}
-CFX_DIBSource* CPDF_Image::DetachBitmap()
-{
- CFX_DIBSource* pBitmap = m_pDIBSource;
- m_pDIBSource = NULL;
- return pBitmap;
+CFX_DIBSource* CPDF_Image::DetachBitmap() {
+ CFX_DIBSource* pBitmap = m_pDIBSource;
+ m_pDIBSource = NULL;
+ return pBitmap;
}
-CFX_DIBSource* CPDF_Image::DetachMask()
-{
- CFX_DIBSource* pBitmap = m_pMask;
- m_pMask = NULL;
- return pBitmap;
+CFX_DIBSource* CPDF_Image::DetachMask() {
+ CFX_DIBSource* pBitmap = m_pMask;
+ m_pMask = NULL;
+ return pBitmap;
}
-FX_BOOL CPDF_Image::StartLoadDIBSource(CPDF_Dictionary* pFormResource, CPDF_Dictionary* pPageResource, FX_BOOL bStdCS, FX_DWORD GroupFamily, FX_BOOL bLoadMask)
-{
- m_pDIBSource = new CPDF_DIBSource;
- int ret = ((CPDF_DIBSource*)m_pDIBSource)->StartLoadDIBSource(m_pDocument, m_pStream, TRUE, pFormResource, pPageResource, bStdCS, GroupFamily, bLoadMask);
- if (ret == 2) {
- return TRUE;
- }
- if (!ret) {
- delete m_pDIBSource;
- m_pDIBSource = NULL;
- return FALSE;
- }
- m_pMask = ((CPDF_DIBSource*)m_pDIBSource)->DetachMask();
- m_MatteColor = ((CPDF_DIBSource*)m_pDIBSource)->m_MatteColor;
+FX_BOOL CPDF_Image::StartLoadDIBSource(CPDF_Dictionary* pFormResource,
+ CPDF_Dictionary* pPageResource,
+ FX_BOOL bStdCS,
+ FX_DWORD GroupFamily,
+ FX_BOOL bLoadMask) {
+ m_pDIBSource = new CPDF_DIBSource;
+ int ret =
+ ((CPDF_DIBSource*)m_pDIBSource)
+ ->StartLoadDIBSource(m_pDocument, m_pStream, TRUE, pFormResource,
+ pPageResource, bStdCS, GroupFamily, bLoadMask);
+ if (ret == 2) {
+ return TRUE;
+ }
+ if (!ret) {
+ delete m_pDIBSource;
+ m_pDIBSource = NULL;
return FALSE;
+ }
+ m_pMask = ((CPDF_DIBSource*)m_pDIBSource)->DetachMask();
+ m_MatteColor = ((CPDF_DIBSource*)m_pDIBSource)->m_MatteColor;
+ return FALSE;
}
-FX_BOOL CPDF_Image::Continue(IFX_Pause* pPause)
-{
- int ret = ((CPDF_DIBSource*)m_pDIBSource)->ContinueLoadDIBSource(pPause);
- if (ret == 2) {
- return TRUE;
- }
- if (!ret) {
- delete m_pDIBSource;
- m_pDIBSource = NULL;
- return FALSE;
- }
- m_pMask = ((CPDF_DIBSource*)m_pDIBSource)->DetachMask();
- m_MatteColor = ((CPDF_DIBSource*)m_pDIBSource)->m_MatteColor;
+FX_BOOL CPDF_Image::Continue(IFX_Pause* pPause) {
+ int ret = ((CPDF_DIBSource*)m_pDIBSource)->ContinueLoadDIBSource(pPause);
+ if (ret == 2) {
+ return TRUE;
+ }
+ if (!ret) {
+ delete m_pDIBSource;
+ m_pDIBSource = NULL;
return FALSE;
+ }
+ m_pMask = ((CPDF_DIBSource*)m_pDIBSource)->DetachMask();
+ m_MatteColor = ((CPDF_DIBSource*)m_pDIBSource)->m_MatteColor;
+ return FALSE;
}
-CPDF_DIBSource::CPDF_DIBSource()
-{
- m_pDocument = NULL;
- m_pStreamAcc = NULL;
- m_pDict = NULL;
- m_bpp = 0;
- m_Width = m_Height = 0;
- m_pColorSpace = NULL;
- m_bDefaultDecode = TRUE;
- m_bImageMask = FALSE;
- m_bDoBpcCheck = TRUE;
- m_pPalette = NULL;
- m_pCompData = NULL;
- m_bColorKey = FALSE;
- m_pMaskedLine = m_pLineBuf = NULL;
- m_pDecoder = NULL;
- m_nComponents = 0;
- m_bpc = 0;
- m_bLoadMask = FALSE;
- m_Family = 0;
- m_pMask = NULL;
- m_MatteColor = 0;
- m_pJbig2Context = NULL;
- m_pGlobalStream = NULL;
- m_bStdCS = FALSE;
- m_pMaskStream = NULL;
- m_Status = 0;
- m_bHasMask = FALSE;
+CPDF_DIBSource::CPDF_DIBSource() {
+ m_pDocument = NULL;
+ m_pStreamAcc = NULL;
+ m_pDict = NULL;
+ m_bpp = 0;
+ m_Width = m_Height = 0;
+ m_pColorSpace = NULL;
+ m_bDefaultDecode = TRUE;
+ m_bImageMask = FALSE;
+ m_bDoBpcCheck = TRUE;
+ m_pPalette = NULL;
+ m_pCompData = NULL;
+ m_bColorKey = FALSE;
+ m_pMaskedLine = m_pLineBuf = NULL;
+ m_pDecoder = NULL;
+ m_nComponents = 0;
+ m_bpc = 0;
+ m_bLoadMask = FALSE;
+ m_Family = 0;
+ m_pMask = NULL;
+ m_MatteColor = 0;
+ m_pJbig2Context = NULL;
+ m_pGlobalStream = NULL;
+ m_bStdCS = FALSE;
+ m_pMaskStream = NULL;
+ m_Status = 0;
+ m_bHasMask = FALSE;
}
-CPDF_DIBSource::~CPDF_DIBSource()
-{
- delete m_pStreamAcc;
- if (m_pMaskedLine) {
- FX_Free(m_pMaskedLine);
- }
- if (m_pLineBuf) {
- FX_Free(m_pLineBuf);
- }
- m_pCachedBitmap.reset();
- delete m_pDecoder;
- if (m_pCompData) {
- FX_Free(m_pCompData);
- }
- CPDF_ColorSpace* pCS = m_pColorSpace;
- if (pCS && m_pDocument) {
- m_pDocument->GetPageData()->ReleaseColorSpace(pCS->GetArray());
- }
- if (m_pJbig2Context) {
- ICodec_Jbig2Module* pJbig2Module = CPDF_ModuleMgr::Get()->GetJbig2Module();
- pJbig2Module->DestroyJbig2Context(m_pJbig2Context);
- }
- delete m_pGlobalStream;
+CPDF_DIBSource::~CPDF_DIBSource() {
+ delete m_pStreamAcc;
+ if (m_pMaskedLine) {
+ FX_Free(m_pMaskedLine);
+ }
+ if (m_pLineBuf) {
+ FX_Free(m_pLineBuf);
+ }
+ m_pCachedBitmap.reset();
+ delete m_pDecoder;
+ if (m_pCompData) {
+ FX_Free(m_pCompData);
+ }
+ CPDF_ColorSpace* pCS = m_pColorSpace;
+ if (pCS && m_pDocument) {
+ m_pDocument->GetPageData()->ReleaseColorSpace(pCS->GetArray());
+ }
+ if (m_pJbig2Context) {
+ ICodec_Jbig2Module* pJbig2Module = CPDF_ModuleMgr::Get()->GetJbig2Module();
+ pJbig2Module->DestroyJbig2Context(m_pJbig2Context);
+ }
+ delete m_pGlobalStream;
}
-CFX_DIBitmap* CPDF_DIBSource::GetBitmap() const
-{
- return m_pCachedBitmap ? m_pCachedBitmap.get() : Clone();
+CFX_DIBitmap* CPDF_DIBSource::GetBitmap() const {
+ return m_pCachedBitmap ? m_pCachedBitmap.get() : Clone();
}
-void CPDF_DIBSource::ReleaseBitmap(CFX_DIBitmap* pBitmap) const
-{
- if (pBitmap && pBitmap != m_pCachedBitmap) {
- delete pBitmap;
- }
+void CPDF_DIBSource::ReleaseBitmap(CFX_DIBitmap* pBitmap) const {
+ if (pBitmap && pBitmap != m_pCachedBitmap) {
+ delete pBitmap;
+ }
}
-FX_BOOL CPDF_DIBSource::Load(CPDF_Document* pDoc, const CPDF_Stream* pStream, CPDF_DIBSource** ppMask,
- FX_DWORD* pMatteColor, CPDF_Dictionary* pFormResources, CPDF_Dictionary* pPageResources, FX_BOOL bStdCS, FX_DWORD GroupFamily, FX_BOOL bLoadMask)
-{
- if (pStream == NULL) {
- return FALSE;
- }
- m_pDocument = pDoc;
- m_pDict = pStream->GetDict();
- if (m_pDict == NULL) {
- return FALSE;
- }
- m_pStream = pStream;
- m_Width = m_pDict->GetInteger(FX_BSTRC("Width"));
- m_Height = m_pDict->GetInteger(FX_BSTRC("Height"));
- if (m_Width <= 0 || m_Height <= 0 || m_Width > 0x01ffff || m_Height > 0x01ffff) {
- return FALSE;
- }
- m_GroupFamily = GroupFamily;
- m_bLoadMask = bLoadMask;
- if (!LoadColorInfo(m_pStream->GetObjNum() != 0 ? NULL : pFormResources, pPageResources)) {
- return FALSE;
- }
- if (m_bDoBpcCheck && (m_bpc == 0 || m_nComponents == 0)) {
- return FALSE;
- }
- FX_SAFE_DWORD src_pitch =
- CalculatePitch8(m_bpc, m_nComponents, m_Width, m_Height);
- if (!src_pitch.IsValid()) {
- return FALSE;
- }
- m_pStreamAcc = new CPDF_StreamAcc;
- m_pStreamAcc->LoadAllData(pStream, FALSE, src_pitch.ValueOrDie(), TRUE);
- if (m_pStreamAcc->GetSize() == 0 || m_pStreamAcc->GetData() == NULL) {
- return FALSE;
- }
- if (!CreateDecoder()) {
- return FALSE;
- }
- if (m_bImageMask) {
- m_bpp = 1;
- m_bpc = 1;
- m_nComponents = 1;
- m_AlphaFlag = 1;
- } else if (m_bpc * m_nComponents == 1) {
- m_bpp = 1;
- } else if (m_bpc * m_nComponents <= 8) {
- m_bpp = 8;
- } else {
- m_bpp = 24;
- }
- FX_SAFE_DWORD pitch = CalculatePitch32(m_bpp, m_Width);
+FX_BOOL CPDF_DIBSource::Load(CPDF_Document* pDoc,
+ const CPDF_Stream* pStream,
+ CPDF_DIBSource** ppMask,
+ FX_DWORD* pMatteColor,
+ CPDF_Dictionary* pFormResources,
+ CPDF_Dictionary* pPageResources,
+ FX_BOOL bStdCS,
+ FX_DWORD GroupFamily,
+ FX_BOOL bLoadMask) {
+ if (pStream == NULL) {
+ return FALSE;
+ }
+ m_pDocument = pDoc;
+ m_pDict = pStream->GetDict();
+ if (m_pDict == NULL) {
+ return FALSE;
+ }
+ m_pStream = pStream;
+ m_Width = m_pDict->GetInteger(FX_BSTRC("Width"));
+ m_Height = m_pDict->GetInteger(FX_BSTRC("Height"));
+ if (m_Width <= 0 || m_Height <= 0 || m_Width > 0x01ffff ||
+ m_Height > 0x01ffff) {
+ return FALSE;
+ }
+ m_GroupFamily = GroupFamily;
+ m_bLoadMask = bLoadMask;
+ if (!LoadColorInfo(m_pStream->GetObjNum() != 0 ? NULL : pFormResources,
+ pPageResources)) {
+ return FALSE;
+ }
+ if (m_bDoBpcCheck && (m_bpc == 0 || m_nComponents == 0)) {
+ return FALSE;
+ }
+ FX_SAFE_DWORD src_pitch =
+ CalculatePitch8(m_bpc, m_nComponents, m_Width, m_Height);
+ if (!src_pitch.IsValid()) {
+ return FALSE;
+ }
+ m_pStreamAcc = new CPDF_StreamAcc;
+ m_pStreamAcc->LoadAllData(pStream, FALSE, src_pitch.ValueOrDie(), TRUE);
+ if (m_pStreamAcc->GetSize() == 0 || m_pStreamAcc->GetData() == NULL) {
+ return FALSE;
+ }
+ if (!CreateDecoder()) {
+ return FALSE;
+ }
+ if (m_bImageMask) {
+ m_bpp = 1;
+ m_bpc = 1;
+ m_nComponents = 1;
+ m_AlphaFlag = 1;
+ } else if (m_bpc * m_nComponents == 1) {
+ m_bpp = 1;
+ } else if (m_bpc * m_nComponents <= 8) {
+ m_bpp = 8;
+ } else {
+ m_bpp = 24;
+ }
+ FX_SAFE_DWORD pitch = CalculatePitch32(m_bpp, m_Width);
+ if (!pitch.IsValid()) {
+ return FALSE;
+ }
+ m_pLineBuf = FX_Alloc(uint8_t, pitch.ValueOrDie());
+ if (m_pColorSpace && bStdCS) {
+ m_pColorSpace->EnableStdConversion(TRUE);
+ }
+ LoadPalette();
+ if (m_bColorKey) {
+ m_bpp = 32;
+ m_AlphaFlag = 2;
+ pitch = CalculatePitch32(m_bpp, m_Width);
if (!pitch.IsValid()) {
- return FALSE;
- }
- m_pLineBuf = FX_Alloc(uint8_t, pitch.ValueOrDie());
- if (m_pColorSpace && bStdCS) {
- m_pColorSpace->EnableStdConversion(TRUE);
- }
- LoadPalette();
- if (m_bColorKey) {
- m_bpp = 32;
- m_AlphaFlag = 2;
- pitch = CalculatePitch32(m_bpp, m_Width);
- if (!pitch.IsValid()) {
- return FALSE;
- }
- m_pMaskedLine = FX_Alloc(uint8_t, pitch.ValueOrDie());
- }
- m_Pitch = pitch.ValueOrDie();
- if (ppMask) {
- *ppMask = LoadMask(*pMatteColor);
- }
- if (m_pColorSpace && bStdCS) {
- m_pColorSpace->EnableStdConversion(FALSE);
- }
- return TRUE;
+ return FALSE;
+ }
+ m_pMaskedLine = FX_Alloc(uint8_t, pitch.ValueOrDie());
+ }
+ m_Pitch = pitch.ValueOrDie();
+ if (ppMask) {
+ *ppMask = LoadMask(*pMatteColor);
+ }
+ if (m_pColorSpace && bStdCS) {
+ m_pColorSpace->EnableStdConversion(FALSE);
+ }
+ return TRUE;
}
-int CPDF_DIBSource::ContinueToLoadMask()
-{
- if (m_bImageMask) {
- m_bpp = 1;
- m_bpc = 1;
- m_nComponents = 1;
- m_AlphaFlag = 1;
- } else if (m_bpc * m_nComponents == 1) {
- m_bpp = 1;
- } else if (m_bpc * m_nComponents <= 8) {
- m_bpp = 8;
- } else {
- m_bpp = 24;
- }
- if (!m_bpc || !m_nComponents) {
- return 0;
- }
- FX_SAFE_DWORD pitch = CalculatePitch32(m_bpp, m_Width);
+int CPDF_DIBSource::ContinueToLoadMask() {
+ if (m_bImageMask) {
+ m_bpp = 1;
+ m_bpc = 1;
+ m_nComponents = 1;
+ m_AlphaFlag = 1;
+ } else if (m_bpc * m_nComponents == 1) {
+ m_bpp = 1;
+ } else if (m_bpc * m_nComponents <= 8) {
+ m_bpp = 8;
+ } else {
+ m_bpp = 24;
+ }
+ if (!m_bpc || !m_nComponents) {
+ return 0;
+ }
+ FX_SAFE_DWORD pitch = CalculatePitch32(m_bpp, m_Width);
+ if (!pitch.IsValid()) {
+ return 0;
+ }
+ m_pLineBuf = FX_Alloc(uint8_t, pitch.ValueOrDie());
+ if (m_pColorSpace && m_bStdCS) {
+ m_pColorSpace->EnableStdConversion(TRUE);
+ }
+ LoadPalette();
+ if (m_bColorKey) {
+ m_bpp = 32;
+ m_AlphaFlag = 2;
+ pitch = CalculatePitch32(m_bpp, m_Width);
if (!pitch.IsValid()) {
- return 0;
- }
- m_pLineBuf = FX_Alloc(uint8_t, pitch.ValueOrDie());
- if (m_pColorSpace && m_bStdCS) {
- m_pColorSpace->EnableStdConversion(TRUE);
+ return 0;
}
- LoadPalette();
- if (m_bColorKey) {
- m_bpp = 32;
- m_AlphaFlag = 2;
- pitch = CalculatePitch32(m_bpp, m_Width);
- if (!pitch.IsValid()) {
- return 0;
- }
- m_pMaskedLine = FX_Alloc(uint8_t, pitch.ValueOrDie());
- }
- m_Pitch = pitch.ValueOrDie();
- return 1;
+ m_pMaskedLine = FX_Alloc(uint8_t, pitch.ValueOrDie());
+ }
+ m_Pitch = pitch.ValueOrDie();
+ return 1;
}
-int CPDF_DIBSource::StartLoadDIBSource(CPDF_Document* pDoc, const CPDF_Stream* pStream, FX_BOOL bHasMask,
- CPDF_Dictionary* pFormResources, CPDF_Dictionary* pPageResources,
- FX_BOOL bStdCS, FX_DWORD GroupFamily, FX_BOOL bLoadMask)
-{
- if (pStream == NULL) {
- return 0;
- }
- m_pDocument = pDoc;
- m_pDict = pStream->GetDict();
- m_pStream = pStream;
- m_bStdCS = bStdCS;
- m_bHasMask = bHasMask;
- m_Width = m_pDict->GetInteger(FX_BSTRC("Width"));
- m_Height = m_pDict->GetInteger(FX_BSTRC("Height"));
- if (m_Width <= 0 || m_Height <= 0 || m_Width > 0x01ffff || m_Height > 0x01ffff) {
- return 0;
- }
- m_GroupFamily = GroupFamily;
- m_bLoadMask = bLoadMask;
- if (!LoadColorInfo(m_pStream->GetObjNum() != 0 ? NULL : pFormResources, pPageResources)) {
- return 0;
- }
- if (m_bDoBpcCheck && (m_bpc == 0 || m_nComponents == 0)) {
- return 0;
- }
- FX_SAFE_DWORD src_pitch =
- CalculatePitch8(m_bpc, m_nComponents, m_Width, m_Height);
- if (!src_pitch.IsValid()) {
- return 0;
- }
- m_pStreamAcc = new CPDF_StreamAcc;
- m_pStreamAcc->LoadAllData(pStream, FALSE, src_pitch.ValueOrDie(), TRUE);
- if (m_pStreamAcc->GetSize() == 0 || m_pStreamAcc->GetData() == NULL) {
- return 0;
- }
- int ret = CreateDecoder();
- if (ret != 1) {
- if (!ret) {
- return ret;
- }
- if (!ContinueToLoadMask()) {
- return 0;
- }
- if (m_bHasMask) {
- StratLoadMask();
- }
- return ret;
+int CPDF_DIBSource::StartLoadDIBSource(CPDF_Document* pDoc,
+ const CPDF_Stream* pStream,
+ FX_BOOL bHasMask,
+ CPDF_Dictionary* pFormResources,
+ CPDF_Dictionary* pPageResources,
+ FX_BOOL bStdCS,
+ FX_DWORD GroupFamily,
+ FX_BOOL bLoadMask) {
+ if (pStream == NULL) {
+ return 0;
+ }
+ m_pDocument = pDoc;
+ m_pDict = pStream->GetDict();
+ m_pStream = pStream;
+ m_bStdCS = bStdCS;
+ m_bHasMask = bHasMask;
+ m_Width = m_pDict->GetInteger(FX_BSTRC("Width"));
+ m_Height = m_pDict->GetInteger(FX_BSTRC("Height"));
+ if (m_Width <= 0 || m_Height <= 0 || m_Width > 0x01ffff ||
+ m_Height > 0x01ffff) {
+ return 0;
+ }
+ m_GroupFamily = GroupFamily;
+ m_bLoadMask = bLoadMask;
+ if (!LoadColorInfo(m_pStream->GetObjNum() != 0 ? NULL : pFormResources,
+ pPageResources)) {
+ return 0;
+ }
+ if (m_bDoBpcCheck && (m_bpc == 0 || m_nComponents == 0)) {
+ return 0;
+ }
+ FX_SAFE_DWORD src_pitch =
+ CalculatePitch8(m_bpc, m_nComponents, m_Width, m_Height);
+ if (!src_pitch.IsValid()) {
+ return 0;
+ }
+ m_pStreamAcc = new CPDF_StreamAcc;
+ m_pStreamAcc->LoadAllData(pStream, FALSE, src_pitch.ValueOrDie(), TRUE);
+ if (m_pStreamAcc->GetSize() == 0 || m_pStreamAcc->GetData() == NULL) {
+ return 0;
+ }
+ int ret = CreateDecoder();
+ if (ret != 1) {
+ if (!ret) {
+ return ret;
}
if (!ContinueToLoadMask()) {
- return 0;
+ return 0;
}
if (m_bHasMask) {
- ret = StratLoadMask();
- }
- if (ret == 2) {
- return ret;
- }
- if (m_pColorSpace && m_bStdCS) {
- m_pColorSpace->EnableStdConversion(FALSE);
+ StratLoadMask();
}
return ret;
+ }
+ if (!ContinueToLoadMask()) {
+ return 0;
+ }
+ if (m_bHasMask) {
+ ret = StratLoadMask();
+ }
+ if (ret == 2) {
+ return ret;
+ }
+ if (m_pColorSpace && m_bStdCS) {
+ m_pColorSpace->EnableStdConversion(FALSE);
+ }
+ return ret;
}
-int CPDF_DIBSource::ContinueLoadDIBSource(IFX_Pause* pPause)
-{
- FXCODEC_STATUS ret;
- if (m_Status == 1) {
- const CFX_ByteString& decoder = m_pStreamAcc->GetImageDecoder();
- if (decoder == FX_BSTRC("JPXDecode")) {
- return 0;
- }
- ICodec_Jbig2Module* pJbig2Module = CPDF_ModuleMgr::Get()->GetJbig2Module();
- if (m_pJbig2Context == NULL) {
- m_pJbig2Context = pJbig2Module->CreateJbig2Context();
- if (m_pStreamAcc->GetImageParam()) {
- CPDF_Stream* pGlobals = m_pStreamAcc->GetImageParam()->GetStream(FX_BSTRC("JBIG2Globals"));
- if (pGlobals) {
- m_pGlobalStream = new CPDF_StreamAcc;
- m_pGlobalStream->LoadAllData(pGlobals, FALSE);
- }
- }
- ret = pJbig2Module->StartDecode(m_pJbig2Context, m_Width, m_Height, m_pStreamAcc->GetData(), m_pStreamAcc->GetSize(),
- m_pGlobalStream ? m_pGlobalStream->GetData() : NULL, m_pGlobalStream ? m_pGlobalStream->GetSize() : 0, m_pCachedBitmap->GetBuffer(),
- m_pCachedBitmap->GetPitch(), pPause);
- if (ret < 0) {
- m_pCachedBitmap.reset();
- delete m_pGlobalStream;
- m_pGlobalStream = NULL;
- pJbig2Module->DestroyJbig2Context(m_pJbig2Context);
- m_pJbig2Context = NULL;
- return 0;
- }
- if (ret == FXCODEC_STATUS_DECODE_TOBECONTINUE) {
- return 2;
- }
- int ret1 = 1;
- if (m_bHasMask) {
- ret1 = ContinueLoadMaskDIB(pPause);
- m_Status = 2;
- }
- if (ret1 == 2) {
- return ret1;
- }
- if (m_pColorSpace && m_bStdCS) {
- m_pColorSpace->EnableStdConversion(FALSE);
- }
- return ret1;
- }
- FXCODEC_STATUS ret = pJbig2Module->ContinueDecode(m_pJbig2Context, pPause);
- if (ret < 0) {
- m_pCachedBitmap.reset();
- delete m_pGlobalStream;
- m_pGlobalStream = NULL;
- pJbig2Module->DestroyJbig2Context(m_pJbig2Context);
- m_pJbig2Context = NULL;
- return 0;
- }
- if (ret == FXCODEC_STATUS_DECODE_TOBECONTINUE) {
- return 2;
- }
- int ret1 = 1;
- if (m_bHasMask) {
- ret1 = ContinueLoadMaskDIB(pPause);
- m_Status = 2;
- }
- if (ret1 == 2) {
- return ret1;
- }
- if (m_pColorSpace && m_bStdCS) {
- m_pColorSpace->EnableStdConversion(FALSE);
+int CPDF_DIBSource::ContinueLoadDIBSource(IFX_Pause* pPause) {
+ FXCODEC_STATUS ret;
+ if (m_Status == 1) {
+ const CFX_ByteString& decoder = m_pStreamAcc->GetImageDecoder();
+ if (decoder == FX_BSTRC("JPXDecode")) {
+ return 0;
+ }
+ ICodec_Jbig2Module* pJbig2Module = CPDF_ModuleMgr::Get()->GetJbig2Module();
+ if (m_pJbig2Context == NULL) {
+ m_pJbig2Context = pJbig2Module->CreateJbig2Context();
+ if (m_pStreamAcc->GetImageParam()) {
+ CPDF_Stream* pGlobals =
+ m_pStreamAcc->GetImageParam()->GetStream(FX_BSTRC("JBIG2Globals"));
+ if (pGlobals) {
+ m_pGlobalStream = new CPDF_StreamAcc;
+ m_pGlobalStream->LoadAllData(pGlobals, FALSE);
}
+ }
+ ret = pJbig2Module->StartDecode(
+ m_pJbig2Context, m_Width, m_Height, m_pStreamAcc->GetData(),
+ m_pStreamAcc->GetSize(),
+ m_pGlobalStream ? m_pGlobalStream->GetData() : NULL,
+ m_pGlobalStream ? m_pGlobalStream->GetSize() : 0,
+ m_pCachedBitmap->GetBuffer(), m_pCachedBitmap->GetPitch(), pPause);
+ if (ret < 0) {
+ m_pCachedBitmap.reset();
+ delete m_pGlobalStream;
+ m_pGlobalStream = NULL;
+ pJbig2Module->DestroyJbig2Context(m_pJbig2Context);
+ m_pJbig2Context = NULL;
+ return 0;
+ }
+ if (ret == FXCODEC_STATUS_DECODE_TOBECONTINUE) {
+ return 2;
+ }
+ int ret1 = 1;
+ if (m_bHasMask) {
+ ret1 = ContinueLoadMaskDIB(pPause);
+ m_Status = 2;
+ }
+ if (ret1 == 2) {
return ret1;
+ }
+ if (m_pColorSpace && m_bStdCS) {
+ m_pColorSpace->EnableStdConversion(FALSE);
+ }
+ return ret1;
+ }
+ FXCODEC_STATUS ret = pJbig2Module->ContinueDecode(m_pJbig2Context, pPause);
+ if (ret < 0) {
+ m_pCachedBitmap.reset();
+ delete m_pGlobalStream;
+ m_pGlobalStream = NULL;
+ pJbig2Module->DestroyJbig2Context(m_pJbig2Context);
+ m_pJbig2Context = NULL;
+ return 0;
+ }
+ if (ret == FXCODEC_STATUS_DECODE_TOBECONTINUE) {
+ return 2;
+ }
+ int ret1 = 1;
+ if (m_bHasMask) {
+ ret1 = ContinueLoadMaskDIB(pPause);
+ m_Status = 2;
}
- if (m_Status == 2) {
- return ContinueLoadMaskDIB(pPause);
+ if (ret1 == 2) {
+ return ret1;
}
- return 0;
+ if (m_pColorSpace && m_bStdCS) {
+ m_pColorSpace->EnableStdConversion(FALSE);
+ }
+ return ret1;
+ }
+ if (m_Status == 2) {
+ return ContinueLoadMaskDIB(pPause);
+ }
+ return 0;
}
-FX_BOOL CPDF_DIBSource::LoadColorInfo(CPDF_Dictionary* pFormResources, CPDF_Dictionary* pPageResources)
-{
- m_bpc_orig = m_pDict->GetInteger(FX_BSTRC("BitsPerComponent"));
- if (m_pDict->GetInteger("ImageMask")) {
- m_bImageMask = TRUE;
- }
- if (m_bImageMask || !m_pDict->KeyExist(FX_BSTRC("ColorSpace"))) {
- if (!m_bImageMask) {
- CPDF_Object* pFilter = m_pDict->GetElementValue(FX_BSTRC("Filter"));
- if (pFilter) {
- CFX_ByteString filter;
- if (pFilter->GetType() == PDFOBJ_NAME) {
- filter = pFilter->GetString();
- if (filter == FX_BSTRC("JPXDecode")) {
- m_bDoBpcCheck = FALSE;
- return TRUE;
- }
- } else if (pFilter->GetType() == PDFOBJ_ARRAY) {
- CPDF_Array* pArray = (CPDF_Array*)pFilter;
- if (pArray->GetString(pArray->GetCount() - 1) == FX_BSTRC("JPXDecode")) {
- m_bDoBpcCheck = FALSE;
- return TRUE;
- }
- }
- }
- }
- m_bImageMask = TRUE;
- m_bpc = m_nComponents = 1;
- CPDF_Array* pDecode = m_pDict->GetArray(FX_BSTRC("Decode"));
- m_bDefaultDecode = pDecode == NULL || pDecode->GetInteger(0) == 0;
- return TRUE;
- }
- CPDF_Object* pCSObj = m_pDict->GetElementValue(FX_BSTRC("ColorSpace"));
- if (pCSObj == NULL) {
- return FALSE;
- }
- CPDF_DocPageData* pDocPageData = m_pDocument->GetPageData();
- if (pFormResources) {
- m_pColorSpace = pDocPageData->GetColorSpace(pCSObj, pFormResources);
- }
- if (m_pColorSpace == NULL) {
- m_pColorSpace = pDocPageData->GetColorSpace(pCSObj, pPageResources);
- }
- if (m_pColorSpace == NULL) {
- return FALSE;
- }
- m_Family = m_pColorSpace->GetFamily();
- m_nComponents = m_pColorSpace->CountComponents();
- if (m_Family == PDFCS_ICCBASED && pCSObj->GetType() == PDFOBJ_NAME) {
- CFX_ByteString cs = pCSObj->GetString();
- if (cs == FX_BSTRC("DeviceGray")) {
- m_nComponents = 1;
- } else if (cs == FX_BSTRC("DeviceRGB")) {
- m_nComponents = 3;
- } else if (cs == FX_BSTRC("DeviceCMYK")) {
- m_nComponents = 4;
+FX_BOOL CPDF_DIBSource::LoadColorInfo(CPDF_Dictionary* pFormResources,
+ CPDF_Dictionary* pPageResources) {
+ m_bpc_orig = m_pDict->GetInteger(FX_BSTRC("BitsPerComponent"));
+ if (m_pDict->GetInteger("ImageMask")) {
+ m_bImageMask = TRUE;
+ }
+ if (m_bImageMask || !m_pDict->KeyExist(FX_BSTRC("ColorSpace"))) {
+ if (!m_bImageMask) {
+ CPDF_Object* pFilter = m_pDict->GetElementValue(FX_BSTRC("Filter"));
+ if (pFilter) {
+ CFX_ByteString filter;
+ if (pFilter->GetType() == PDFOBJ_NAME) {
+ filter = pFilter->GetString();
+ if (filter == FX_BSTRC("JPXDecode")) {
+ m_bDoBpcCheck = FALSE;
+ return TRUE;
+ }
+ } else if (pFilter->GetType() == PDFOBJ_ARRAY) {
+ CPDF_Array* pArray = (CPDF_Array*)pFilter;
+ if (pArray->GetString(pArray->GetCount() - 1) ==
+ FX_BSTRC("JPXDecode")) {
+ m_bDoBpcCheck = FALSE;
+ return TRUE;
+ }
}
+ }
}
- ValidateDictParam();
- m_pCompData = GetDecodeAndMaskArray(m_bDefaultDecode, m_bColorKey);
- if (m_pCompData == NULL) {
- return FALSE;
- }
+ m_bImageMask = TRUE;
+ m_bpc = m_nComponents = 1;
+ CPDF_Array* pDecode = m_pDict->GetArray(FX_BSTRC("Decode"));
+ m_bDefaultDecode = pDecode == NULL || pDecode->GetInteger(0) == 0;
return TRUE;
+ }
+ CPDF_Object* pCSObj = m_pDict->GetElementValue(FX_BSTRC("ColorSpace"));
+ if (pCSObj == NULL) {
+ return FALSE;
+ }
+ CPDF_DocPageData* pDocPageData = m_pDocument->GetPageData();
+ if (pFormResources) {
+ m_pColorSpace = pDocPageData->GetColorSpace(pCSObj, pFormResources);
+ }
+ if (m_pColorSpace == NULL) {
+ m_pColorSpace = pDocPageData->GetColorSpace(pCSObj, pPageResources);
+ }
+ if (m_pColorSpace == NULL) {
+ return FALSE;
+ }
+ m_Family = m_pColorSpace->GetFamily();
+ m_nComponents = m_pColorSpace->CountComponents();
+ if (m_Family == PDFCS_ICCBASED && pCSObj->GetType() == PDFOBJ_NAME) {
+ CFX_ByteString cs = pCSObj->GetString();
+ if (cs == FX_BSTRC("DeviceGray")) {
+ m_nComponents = 1;
+ } else if (cs == FX_BSTRC("DeviceRGB")) {
+ m_nComponents = 3;
+ } else if (cs == FX_BSTRC("DeviceCMYK")) {
+ m_nComponents = 4;
+ }
+ }
+ ValidateDictParam();
+ m_pCompData = GetDecodeAndMaskArray(m_bDefaultDecode, m_bColorKey);
+ if (m_pCompData == NULL) {
+ return FALSE;
+ }
+ return TRUE;
}
-DIB_COMP_DATA* CPDF_DIBSource::GetDecodeAndMaskArray(FX_BOOL& bDefaultDecode, FX_BOOL& bColorKey)
-{
- if (m_pColorSpace == NULL) {
- return NULL;
- }
- DIB_COMP_DATA* pCompData = FX_Alloc(DIB_COMP_DATA, m_nComponents);
- int max_data = (1 << m_bpc) - 1;
- CPDF_Array* pDecode = m_pDict->GetArray(FX_BSTRC("Decode"));
- if (pDecode) {
- for (FX_DWORD i = 0; i < m_nComponents; i ++) {
- pCompData[i].m_DecodeMin = pDecode->GetNumber(i * 2);
- FX_FLOAT max = pDecode->GetNumber(i * 2 + 1);
- pCompData[i].m_DecodeStep = (max - pCompData[i].m_DecodeMin) / max_data;
- FX_FLOAT def_value, def_min, def_max;
- m_pColorSpace->GetDefaultValue(i, def_value, def_min, def_max);
- if (m_Family == PDFCS_INDEXED) {
- def_max = (FX_FLOAT)max_data;
- }
- if (def_min != pCompData[i].m_DecodeMin || def_max != max) {
- bDefaultDecode = FALSE;
- }
- }
- } else {
- for (FX_DWORD i = 0; i < m_nComponents; i ++) {
- FX_FLOAT def_value;
- m_pColorSpace->GetDefaultValue(i, def_value, pCompData[i].m_DecodeMin, pCompData[i].m_DecodeStep);
- if (m_Family == PDFCS_INDEXED) {
- pCompData[i].m_DecodeStep = (FX_FLOAT)max_data;
- }
- pCompData[i].m_DecodeStep = (pCompData[i].m_DecodeStep - pCompData[i].m_DecodeMin) / max_data;
- }
- }
- if (!m_pDict->KeyExist(FX_BSTRC("SMask"))) {
- CPDF_Object* pMask = m_pDict->GetElementValue(FX_BSTRC("Mask"));
- if (pMask == NULL) {
- return pCompData;
- }
- if (pMask->GetType() == PDFOBJ_ARRAY) {
- CPDF_Array* pArray = (CPDF_Array*)pMask;
- if (pArray->GetCount() >= m_nComponents * 2) {
- for (FX_DWORD i = 0; i < m_nComponents; i++) {
- int min_num = pArray->GetInteger(i * 2);
- int max_num = pArray->GetInteger(i * 2 + 1);
- pCompData[i].m_ColorKeyMin = FX_MAX(min_num, 0);
- pCompData[i].m_ColorKeyMax = FX_MIN(max_num, max_data);
- }
- }
- bColorKey = TRUE;
+DIB_COMP_DATA* CPDF_DIBSource::GetDecodeAndMaskArray(FX_BOOL& bDefaultDecode,
+ FX_BOOL& bColorKey) {
+ if (m_pColorSpace == NULL) {
+ return NULL;
+ }
+ DIB_COMP_DATA* pCompData = FX_Alloc(DIB_COMP_DATA, m_nComponents);
+ int max_data = (1 << m_bpc) - 1;
+ CPDF_Array* pDecode = m_pDict->GetArray(FX_BSTRC("Decode"));
+ if (pDecode) {
+ for (FX_DWORD i = 0; i < m_nComponents; i++) {
+ pCompData[i].m_DecodeMin = pDecode->GetNumber(i * 2);
+ FX_FLOAT max = pDecode->GetNumber(i * 2 + 1);
+ pCompData[i].m_DecodeStep = (max - pCompData[i].m_DecodeMin) / max_data;
+ FX_FLOAT def_value, def_min, def_max;
+ m_pColorSpace->GetDefaultValue(i, def_value, def_min, def_max);
+ if (m_Family == PDFCS_INDEXED) {
+ def_max = (FX_FLOAT)max_data;
+ }
+ if (def_min != pCompData[i].m_DecodeMin || def_max != max) {
+ bDefaultDecode = FALSE;
+ }
+ }
+ } else {
+ for (FX_DWORD i = 0; i < m_nComponents; i++) {
+ FX_FLOAT def_value;
+ m_pColorSpace->GetDefaultValue(i, def_value, pCompData[i].m_DecodeMin,
+ pCompData[i].m_DecodeStep);
+ if (m_Family == PDFCS_INDEXED) {
+ pCompData[i].m_DecodeStep = (FX_FLOAT)max_data;
+ }
+ pCompData[i].m_DecodeStep =
+ (pCompData[i].m_DecodeStep - pCompData[i].m_DecodeMin) / max_data;
+ }
+ }
+ if (!m_pDict->KeyExist(FX_BSTRC("SMask"))) {
+ CPDF_Object* pMask = m_pDict->GetElementValue(FX_BSTRC("Mask"));
+ if (pMask == NULL) {
+ return pCompData;
+ }
+ if (pMask->GetType() == PDFOBJ_ARRAY) {
+ CPDF_Array* pArray = (CPDF_Array*)pMask;
+ if (pArray->GetCount() >= m_nComponents * 2) {
+ for (FX_DWORD i = 0; i < m_nComponents; i++) {
+ int min_num = pArray->GetInteger(i * 2);
+ int max_num = pArray->GetInteger(i * 2 + 1);
+ pCompData[i].m_ColorKeyMin = FX_MAX(min_num, 0);
+ pCompData[i].m_ColorKeyMax = FX_MIN(max_num, max_data);
}
+ }
+ bColorKey = TRUE;
}
- return pCompData;
+ }
+ return pCompData;
}
-ICodec_ScanlineDecoder* FPDFAPI_CreateFaxDecoder(const uint8_t* src_buf, FX_DWORD src_size, int width, int height,
- const CPDF_Dictionary* pParams);
-ICodec_ScanlineDecoder* FPDFAPI_CreateFlateDecoder(const uint8_t* src_buf, FX_DWORD src_size, int width, int height,
- int nComps, int bpc, const CPDF_Dictionary* pParams);
-int CPDF_DIBSource::CreateDecoder()
-{
- const CFX_ByteString& decoder = m_pStreamAcc->GetImageDecoder();
- if (decoder.IsEmpty()) {
- return 1;
- }
- if (m_bDoBpcCheck && m_bpc == 0) {
- return 0;
- }
- const uint8_t* src_data = m_pStreamAcc->GetData();
- FX_DWORD src_size = m_pStreamAcc->GetSize();
- const CPDF_Dictionary* pParams = m_pStreamAcc->GetImageParam();
- if (decoder == FX_BSTRC("CCITTFaxDecode")) {
- m_pDecoder = FPDFAPI_CreateFaxDecoder(src_data, src_size, m_Width, m_Height, pParams);
- } else if (decoder == FX_BSTRC("DCTDecode")) {
- m_pDecoder = CPDF_ModuleMgr::Get()->GetJpegModule()->CreateDecoder(
- src_data, src_size, m_Width, m_Height, m_nComponents,
- pParams ? pParams->GetInteger("ColorTransform", 1) : 1);
- if (!m_pDecoder) {
- FX_BOOL bTransform = FALSE;
- int comps, bpc;
- ICodec_JpegModule* pJpegModule = CPDF_ModuleMgr::Get()->GetJpegModule();
- if (pJpegModule->LoadInfo(src_data, src_size, m_Width, m_Height, comps, bpc, bTransform)) {
- if (m_nComponents != comps) {
- FX_Free(m_pCompData);
- m_nComponents = comps;
- if (m_Family == PDFCS_LAB && m_nComponents != 3) {
- m_pCompData = NULL;
- return 0;
- }
- m_pCompData = GetDecodeAndMaskArray(m_bDefaultDecode, m_bColorKey);
- if (m_pCompData == NULL) {
- return 0;
- }
- }
- m_bpc = bpc;
- m_pDecoder = CPDF_ModuleMgr::Get()->GetJpegModule()->CreateDecoder(src_data, src_size, m_Width, m_Height,
- m_nComponents, bTransform);
- }
- }
- } else if (decoder == FX_BSTRC("FlateDecode")) {
- m_pDecoder = FPDFAPI_CreateFlateDecoder(src_data, src_size, m_Width, m_Height, m_nComponents, m_bpc, pParams);
- } else if (decoder == FX_BSTRC("JPXDecode")) {
- LoadJpxBitmap();
- return m_pCachedBitmap ? 1 : 0;
- } else if (decoder == FX_BSTRC("JBIG2Decode")) {
- m_pCachedBitmap.reset(new CFX_DIBitmap);
- if (!m_pCachedBitmap->Create(m_Width, m_Height, m_bImageMask ? FXDIB_1bppMask : FXDIB_1bppRgb)) {
- m_pCachedBitmap.reset();
+ICodec_ScanlineDecoder* FPDFAPI_CreateFaxDecoder(
+ const uint8_t* src_buf,
+ FX_DWORD src_size,
+ int width,
+ int height,
+ const CPDF_Dictionary* pParams);
+ICodec_ScanlineDecoder* FPDFAPI_CreateFlateDecoder(
+ const uint8_t* src_buf,
+ FX_DWORD src_size,
+ int width,
+ int height,
+ int nComps,
+ int bpc,
+ const CPDF_Dictionary* pParams);
+int CPDF_DIBSource::CreateDecoder() {
+ const CFX_ByteString& decoder = m_pStreamAcc->GetImageDecoder();
+ if (decoder.IsEmpty()) {
+ return 1;
+ }
+ if (m_bDoBpcCheck && m_bpc == 0) {
+ return 0;
+ }
+ const uint8_t* src_data = m_pStreamAcc->GetData();
+ FX_DWORD src_size = m_pStreamAcc->GetSize();
+ const CPDF_Dictionary* pParams = m_pStreamAcc->GetImageParam();
+ if (decoder == FX_BSTRC("CCITTFaxDecode")) {
+ m_pDecoder = FPDFAPI_CreateFaxDecoder(src_data, src_size, m_Width, m_Height,
+ pParams);
+ } else if (decoder == FX_BSTRC("DCTDecode")) {
+ m_pDecoder = CPDF_ModuleMgr::Get()->GetJpegModule()->CreateDecoder(
+ src_data, src_size, m_Width, m_Height, m_nComponents,
+ pParams ? pParams->GetInteger("ColorTransform", 1) : 1);
+ if (!m_pDecoder) {
+ FX_BOOL bTransform = FALSE;
+ int comps, bpc;
+ ICodec_JpegModule* pJpegModule = CPDF_ModuleMgr::Get()->GetJpegModule();
+ if (pJpegModule->LoadInfo(src_data, src_size, m_Width, m_Height, comps,
+ bpc, bTransform)) {
+ if (m_nComponents != comps) {
+ FX_Free(m_pCompData);
+ m_nComponents = comps;
+ if (m_Family == PDFCS_LAB && m_nComponents != 3) {
+ m_pCompData = NULL;
+ return 0;
+ }
+ m_pCompData = GetDecodeAndMaskArray(m_bDefaultDecode, m_bColorKey);
+ if (m_pCompData == NULL) {
return 0;
+ }
}
- m_Status = 1;
- return 2;
- } else if (decoder == FX_BSTRC("RunLengthDecode")) {
- m_pDecoder = CPDF_ModuleMgr::Get()->GetCodecModule()->GetBasicModule()->CreateRunLengthDecoder(src_data, src_size, m_Width, m_Height, m_nComponents, m_bpc);
- }
- if (!m_pDecoder)
- return 0;
+ m_bpc = bpc;
+ m_pDecoder = CPDF_ModuleMgr::Get()->GetJpegModule()->CreateDecoder(
+ src_data, src_size, m_Width, m_Height, m_nComponents, bTransform);
+ }
+ }
+ } else if (decoder == FX_BSTRC("FlateDecode")) {
+ m_pDecoder = FPDFAPI_CreateFlateDecoder(
+ src_data, src_size, m_Width, m_Height, m_nComponents, m_bpc, pParams);
+ } else if (decoder == FX_BSTRC("JPXDecode")) {
+ LoadJpxBitmap();
+ return m_pCachedBitmap ? 1 : 0;
+ } else if (decoder == FX_BSTRC("JBIG2Decode")) {
+ m_pCachedBitmap.reset(new CFX_DIBitmap);
+ if (!m_pCachedBitmap->Create(
+ m_Width, m_Height, m_bImageMask ? FXDIB_1bppMask : FXDIB_1bppRgb)) {
+ m_pCachedBitmap.reset();
+ return 0;
+ }
+ m_Status = 1;
+ return 2;
+ } else if (decoder == FX_BSTRC("RunLengthDecode")) {
+ m_pDecoder = CPDF_ModuleMgr::Get()
+ ->GetCodecModule()
+ ->GetBasicModule()
+ ->CreateRunLengthDecoder(src_data, src_size, m_Width,
+ m_Height, m_nComponents, m_bpc);
+ }
+ if (!m_pDecoder)
+ return 0;
- FX_SAFE_DWORD requested_pitch =
- CalculatePitch8(m_bpc, m_nComponents, m_Width, 1);
- if (!requested_pitch.IsValid()) {
- return 0;
- }
- FX_SAFE_DWORD provided_pitch = CalculatePitch8(m_pDecoder->GetBPC(),
- m_pDecoder->CountComps(),
- m_pDecoder->GetWidth(),
- 1);
- if (!provided_pitch.IsValid()) {
- return 0;
- }
- if (provided_pitch.ValueOrDie() < requested_pitch.ValueOrDie()) {
- return 0;
- }
- return 1;
+ FX_SAFE_DWORD requested_pitch =
+ CalculatePitch8(m_bpc, m_nComponents, m_Width, 1);
+ if (!requested_pitch.IsValid()) {
+ return 0;
+ }
+ FX_SAFE_DWORD provided_pitch =
+ CalculatePitch8(m_pDecoder->GetBPC(), m_pDecoder->CountComps(),
+ m_pDecoder->GetWidth(), 1);
+ if (!provided_pitch.IsValid()) {
+ return 0;
+ }
+ if (provided_pitch.ValueOrDie() < requested_pitch.ValueOrDie()) {
+ return 0;
+ }
+ return 1;
}
-void CPDF_DIBSource::LoadJpxBitmap()
-{
- ICodec_JpxModule* pJpxModule = CPDF_ModuleMgr::Get()->GetJpxModule();
- if (!pJpxModule)
- return;
+void CPDF_DIBSource::LoadJpxBitmap() {
+ ICodec_JpxModule* pJpxModule = CPDF_ModuleMgr::Get()->GetJpxModule();
+ if (!pJpxModule)
+ return;
- nonstd::unique_ptr<JpxBitMapContext> context(
- new JpxBitMapContext(pJpxModule));
- context->set_context(pJpxModule->CreateDecoder(m_pStreamAcc->GetData(),
- m_pStreamAcc->GetSize(),
- m_pColorSpace != nullptr));
- if (!context->context())
- return;
+ nonstd::unique_ptr<JpxBitMapContext> context(
+ new JpxBitMapContext(pJpxModule));
+ context->set_context(pJpxModule->CreateDecoder(m_pStreamAcc->GetData(),
+ m_pStreamAcc->GetSize(),
+ m_pColorSpace != nullptr));
+ if (!context->context())
+ return;
- FX_DWORD width = 0;
- FX_DWORD height = 0;
- FX_DWORD codestream_nComps = 0;
- FX_DWORD image_nComps = 0;
- pJpxModule->GetImageInfo(context->context(), width, height,
- codestream_nComps, image_nComps);
- if ((int)width < m_Width || (int)height < m_Height)
- return;
+ FX_DWORD width = 0;
+ FX_DWORD height = 0;
+ FX_DWORD codestream_nComps = 0;
+ FX_DWORD image_nComps = 0;
+ pJpxModule->GetImageInfo(context->context(), width, height, codestream_nComps,
+ image_nComps);
+ if ((int)width < m_Width || (int)height < m_Height)
+ return;
- int output_nComps;
- FX_BOOL bTranslateColor;
- FX_BOOL bSwapRGB = FALSE;
- if (m_pColorSpace) {
- if (codestream_nComps != (FX_DWORD)m_pColorSpace->CountComponents())
- return;
- output_nComps = codestream_nComps;
- bTranslateColor = FALSE;
- if (m_pColorSpace == CPDF_ColorSpace::GetStockCS(PDFCS_DEVICERGB)) {
- bSwapRGB = TRUE;
- m_pColorSpace = nullptr;
- }
+ int output_nComps;
+ FX_BOOL bTranslateColor;
+ FX_BOOL bSwapRGB = FALSE;
+ if (m_pColorSpace) {
+ if (codestream_nComps != (FX_DWORD)m_pColorSpace->CountComponents())
+ return;
+ output_nComps = codestream_nComps;
+ bTranslateColor = FALSE;
+ if (m_pColorSpace == CPDF_ColorSpace::GetStockCS(PDFCS_DEVICERGB)) {
+ bSwapRGB = TRUE;
+ m_pColorSpace = nullptr;
+ }
+ } else {
+ bTranslateColor = TRUE;
+ if (image_nComps) {
+ output_nComps = image_nComps;
} else {
- bTranslateColor = TRUE;
- if (image_nComps) {
- output_nComps = image_nComps;
- } else {
- output_nComps = codestream_nComps;
- }
- if (output_nComps == 3) {
- bSwapRGB = TRUE;
- } else if (output_nComps == 4) {
- m_pColorSpace = CPDF_ColorSpace::GetStockCS(PDFCS_DEVICECMYK);
- bTranslateColor = FALSE;
- }
- m_nComponents = output_nComps;
+ output_nComps = codestream_nComps;
}
- FXDIB_Format format;
- if (output_nComps == 1) {
- format = FXDIB_8bppRgb;
- } else if (output_nComps <= 3) {
- format = FXDIB_Rgb;
+ if (output_nComps == 3) {
+ bSwapRGB = TRUE;
} else if (output_nComps == 4) {
- format = FXDIB_Rgb32;
- } else {
- width = (width * output_nComps + 2) / 3;
- format = FXDIB_Rgb;
- }
- m_pCachedBitmap.reset(new CFX_DIBitmap);
- if (!m_pCachedBitmap->Create(width, height, format)) {
- m_pCachedBitmap.reset();
- return;
- }
- m_pCachedBitmap->Clear(0xFFFFFFFF);
- context->set_output_offsets(FX_Alloc(uint8_t, output_nComps));
- for (int i = 0; i < output_nComps; ++i)
- context->output_offsets()[i] = i;
- if (bSwapRGB) {
- context->output_offsets()[0] = 2;
- context->output_offsets()[2] = 0;
- }
- if (!pJpxModule->Decode(context->context(),
- m_pCachedBitmap->GetBuffer(),
- m_pCachedBitmap->GetPitch(),
- bTranslateColor,
- context->output_offsets())) {
- m_pCachedBitmap.reset();
- return;
- }
- if (m_pColorSpace &&
- m_pColorSpace->GetFamily() == PDFCS_INDEXED &&
- m_bpc < 8) {
- int scale = 8 - m_bpc;
- for (FX_DWORD row = 0; row < height; ++row) {
- uint8_t* scanline = (uint8_t*)m_pCachedBitmap->GetScanline(row);
- for (FX_DWORD col = 0; col < width; ++col) {
- *scanline = (*scanline) >> scale;
- ++scanline;
- }
- }
- }
- m_bpc = 8;
+ m_pColorSpace = CPDF_ColorSpace::GetStockCS(PDFCS_DEVICECMYK);
+ bTranslateColor = FALSE;
+ }
+ m_nComponents = output_nComps;
+ }
+ FXDIB_Format format;
+ if (output_nComps == 1) {
+ format = FXDIB_8bppRgb;
+ } else if (output_nComps <= 3) {
+ format = FXDIB_Rgb;
+ } else if (output_nComps == 4) {
+ format = FXDIB_Rgb32;
+ } else {
+ width = (width * output_nComps + 2) / 3;
+ format = FXDIB_Rgb;
+ }
+ m_pCachedBitmap.reset(new CFX_DIBitmap);
+ if (!m_pCachedBitmap->Create(width, height, format)) {
+ m_pCachedBitmap.reset();
+ return;
+ }
+ m_pCachedBitmap->Clear(0xFFFFFFFF);
+ context->set_output_offsets(FX_Alloc(uint8_t, output_nComps));
+ for (int i = 0; i < output_nComps; ++i)
+ context->output_offsets()[i] = i;
+ if (bSwapRGB) {
+ context->output_offsets()[0] = 2;
+ context->output_offsets()[2] = 0;
+ }
+ if (!pJpxModule->Decode(context->context(), m_pCachedBitmap->GetBuffer(),
+ m_pCachedBitmap->GetPitch(), bTranslateColor,
+ context->output_offsets())) {
+ m_pCachedBitmap.reset();
+ return;
+ }
+ if (m_pColorSpace && m_pColorSpace->GetFamily() == PDFCS_INDEXED &&
+ m_bpc < 8) {
+ int scale = 8 - m_bpc;
+ for (FX_DWORD row = 0; row < height; ++row) {
+ uint8_t* scanline = (uint8_t*)m_pCachedBitmap->GetScanline(row);
+ for (FX_DWORD col = 0; col < width; ++col) {
+ *scanline = (*scanline) >> scale;
+ ++scanline;
+ }
+ }
+ }
+ m_bpc = 8;
}
-CPDF_DIBSource* CPDF_DIBSource::LoadMask(FX_DWORD& MatteColor)
-{
- MatteColor = 0xffffffff;
- CPDF_Stream* pSoftMask = m_pDict->GetStream(FX_BSTRC("SMask"));
- if (pSoftMask) {
- CPDF_Array* pMatte = pSoftMask->GetDict()->GetArray(FX_BSTRC("Matte"));
- if (pMatte != NULL && m_pColorSpace && (FX_DWORD)m_pColorSpace->CountComponents() <= m_nComponents) {
- FX_FLOAT* pColor = FX_Alloc(FX_FLOAT, m_nComponents);
- for (FX_DWORD i = 0; i < m_nComponents; i ++) {
- pColor[i] = pMatte->GetFloat(i);
- }
- FX_FLOAT R, G, B;
- m_pColorSpace->GetRGB(pColor, R, G, B);
- FX_Free(pColor);
- MatteColor = FXARGB_MAKE(0, FXSYS_round(R * 255), FXSYS_round(G * 255), FXSYS_round(B * 255));
- }
- return LoadMaskDIB(pSoftMask);
- }
- CPDF_Object* pMask = m_pDict->GetElementValue(FX_BSTRC("Mask"));
- if (pMask == NULL) {
- return NULL;
- }
- if (pMask->GetType() == PDFOBJ_STREAM) {
- return LoadMaskDIB((CPDF_Stream*)pMask);
- }
+CPDF_DIBSource* CPDF_DIBSource::LoadMask(FX_DWORD& MatteColor) {
+ MatteColor = 0xffffffff;
+ CPDF_Stream* pSoftMask = m_pDict->GetStream(FX_BSTRC("SMask"));
+ if (pSoftMask) {
+ CPDF_Array* pMatte = pSoftMask->GetDict()->GetArray(FX_BSTRC("Matte"));
+ if (pMatte != NULL && m_pColorSpace &&
+ (FX_DWORD)m_pColorSpace->CountComponents() <= m_nComponents) {
+ FX_FLOAT* pColor = FX_Alloc(FX_FLOAT, m_nComponents);
+ for (FX_DWORD i = 0; i < m_nComponents; i++) {
+ pColor[i] = pMatte->GetFloat(i);
+ }
+ FX_FLOAT R, G, B;
+ m_pColorSpace->GetRGB(pColor, R, G, B);
+ FX_Free(pColor);
+ MatteColor = FXARGB_MAKE(0, FXSYS_round(R * 255), FXSYS_round(G * 255),
+ FXSYS_round(B * 255));
+ }
+ return LoadMaskDIB(pSoftMask);
+ }
+ CPDF_Object* pMask = m_pDict->GetElementValue(FX_BSTRC("Mask"));
+ if (pMask == NULL) {
return NULL;
+ }
+ if (pMask->GetType() == PDFOBJ_STREAM) {
+ return LoadMaskDIB((CPDF_Stream*)pMask);
+ }
+ return NULL;
}
-int CPDF_DIBSource::StratLoadMask()
-{
- m_MatteColor = 0xffffffff;
- m_pMaskStream = m_pDict->GetStream(FX_BSTRC("SMask"));
- if (m_pMaskStream) {
- CPDF_Array* pMatte = m_pMaskStream->GetDict()->GetArray(FX_BSTRC("Matte"));
- if (pMatte != NULL && m_pColorSpace && (FX_DWORD)m_pColorSpace->CountComponents() <= m_nComponents) {
- FX_FLOAT R, G, B;
- FX_FLOAT* pColor = FX_Alloc(FX_FLOAT, m_nComponents);
- for (FX_DWORD i = 0; i < m_nComponents; i ++) {
- pColor[i] = pMatte->GetFloat(i);
- }
- m_pColorSpace->GetRGB(pColor, R, G, B);
- FX_Free(pColor);
- m_MatteColor = FXARGB_MAKE(0, FXSYS_round(R * 255), FXSYS_round(G * 255), FXSYS_round(B * 255));
- }
- return StartLoadMaskDIB();
- }
- m_pMaskStream = m_pDict->GetElementValue(FX_BSTRC("Mask"));
- if (m_pMaskStream == NULL) {
- return 1;
- }
- if (m_pMaskStream->GetType() == PDFOBJ_STREAM) {
- return StartLoadMaskDIB();
- }
+int CPDF_DIBSource::StratLoadMask() {
+ m_MatteColor = 0xffffffff;
+ m_pMaskStream = m_pDict->GetStream(FX_BSTRC("SMask"));
+ if (m_pMaskStream) {
+ CPDF_Array* pMatte = m_pMaskStream->GetDict()->GetArray(FX_BSTRC("Matte"));
+ if (pMatte != NULL && m_pColorSpace &&
+ (FX_DWORD)m_pColorSpace->CountComponents() <= m_nComponents) {
+ FX_FLOAT R, G, B;
+ FX_FLOAT* pColor = FX_Alloc(FX_FLOAT, m_nComponents);
+ for (FX_DWORD i = 0; i < m_nComponents; i++) {
+ pColor[i] = pMatte->GetFloat(i);
+ }
+ m_pColorSpace->GetRGB(pColor, R, G, B);
+ FX_Free(pColor);
+ m_MatteColor = FXARGB_MAKE(0, FXSYS_round(R * 255), FXSYS_round(G * 255),
+ FXSYS_round(B * 255));
+ }
+ return StartLoadMaskDIB();
+ }
+ m_pMaskStream = m_pDict->GetElementValue(FX_BSTRC("Mask"));
+ if (m_pMaskStream == NULL) {
return 1;
+ }
+ if (m_pMaskStream->GetType() == PDFOBJ_STREAM) {
+ return StartLoadMaskDIB();
+ }
+ return 1;
}
-int CPDF_DIBSource::ContinueLoadMaskDIB(IFX_Pause* pPause)
-{
- if (m_pMask == NULL) {
- return 1;
- }
- int ret = m_pMask->ContinueLoadDIBSource(pPause);
- if (ret == 2) {
- return ret;
- }
- if (m_pColorSpace && m_bStdCS) {
- m_pColorSpace->EnableStdConversion(FALSE);
- }
- if (!ret) {
- delete m_pMask;
- m_pMask = NULL;
- return ret;
- }
+int CPDF_DIBSource::ContinueLoadMaskDIB(IFX_Pause* pPause) {
+ if (m_pMask == NULL) {
return 1;
-}
-CPDF_DIBSource* CPDF_DIBSource::DetachMask()
-{
- CPDF_DIBSource* pDIBSource = m_pMask;
+ }
+ int ret = m_pMask->ContinueLoadDIBSource(pPause);
+ if (ret == 2) {
+ return ret;
+ }
+ if (m_pColorSpace && m_bStdCS) {
+ m_pColorSpace->EnableStdConversion(FALSE);
+ }
+ if (!ret) {
+ delete m_pMask;
m_pMask = NULL;
- return pDIBSource;
+ return ret;
+ }
+ return 1;
}
-CPDF_DIBSource* CPDF_DIBSource::LoadMaskDIB(CPDF_Stream* pMask)
-{
- CPDF_DIBSource* pMaskSource = new CPDF_DIBSource;
- if (!pMaskSource->Load(m_pDocument, pMask, NULL, NULL, NULL, NULL, TRUE)) {
- delete pMaskSource;
- return NULL;
- }
- return pMaskSource;
+CPDF_DIBSource* CPDF_DIBSource::DetachMask() {
+ CPDF_DIBSource* pDIBSource = m_pMask;
+ m_pMask = NULL;
+ return pDIBSource;
}
-int CPDF_DIBSource::StartLoadMaskDIB()
-{
- m_pMask = new CPDF_DIBSource;
- int ret = m_pMask->StartLoadDIBSource(m_pDocument, (CPDF_Stream*)m_pMaskStream, FALSE, NULL, NULL, TRUE);
- if (ret == 2) {
- if (m_Status == 0) {
- m_Status = 2;
- }
- return 2;
- }
- if (!ret) {
- delete m_pMask;
- m_pMask = NULL;
- return 1;
- }
+CPDF_DIBSource* CPDF_DIBSource::LoadMaskDIB(CPDF_Stream* pMask) {
+ CPDF_DIBSource* pMaskSource = new CPDF_DIBSource;
+ if (!pMaskSource->Load(m_pDocument, pMask, NULL, NULL, NULL, NULL, TRUE)) {
+ delete pMaskSource;
+ return NULL;
+ }
+ return pMaskSource;
+}
+int CPDF_DIBSource::StartLoadMaskDIB() {
+ m_pMask = new CPDF_DIBSource;
+ int ret = m_pMask->StartLoadDIBSource(
+ m_pDocument, (CPDF_Stream*)m_pMaskStream, FALSE, NULL, NULL, TRUE);
+ if (ret == 2) {
+ if (m_Status == 0) {
+ m_Status = 2;
+ }
+ return 2;
+ }
+ if (!ret) {
+ delete m_pMask;
+ m_pMask = NULL;
return 1;
+ }
+ return 1;
}
-void CPDF_DIBSource::LoadPalette()
-{
- if (m_bpc == 0) {
- return;
- }
- if (m_bpc * m_nComponents > 8) {
- return;
- }
- if (m_pColorSpace == NULL) {
- return;
- }
- if (m_bpc * m_nComponents == 1) {
- if (m_bDefaultDecode && (m_Family == PDFCS_DEVICEGRAY || m_Family == PDFCS_DEVICERGB)) {
- return;
- }
- if (m_pColorSpace->CountComponents() > 3) {
- return;
- }
- FX_FLOAT color_values[3];
- color_values[0] = m_pCompData[0].m_DecodeMin;
- color_values[1] = color_values[2] = color_values[0];
- FX_FLOAT R=0.0f, G=0.0f, B=0.0f;
- m_pColorSpace->GetRGB(color_values, R, G, B);
- FX_ARGB argb0 = ArgbEncode(255, FXSYS_round(R * 255), FXSYS_round(G * 255), FXSYS_round(B * 255));
- color_values[0] += m_pCompData[0].m_DecodeStep;
- color_values[1] += m_pCompData[0].m_DecodeStep;
- color_values[2] += m_pCompData[0].m_DecodeStep;
- m_pColorSpace->GetRGB(color_values, R, G, B);
- FX_ARGB argb1 = ArgbEncode(255, FXSYS_round(R * 255), FXSYS_round(G * 255), FXSYS_round(B * 255));
- if (argb0 != 0xFF000000 || argb1 != 0xFFFFFFFF) {
- SetPaletteArgb(0, argb0);
- SetPaletteArgb(1, argb1);
- }
- return;
- }
- if (m_pColorSpace == CPDF_ColorSpace::GetStockCS(PDFCS_DEVICEGRAY) && m_bpc == 8 && m_bDefaultDecode) {
- } else {
- int palette_count = 1 << (m_bpc * m_nComponents);
- CFX_FixedBufGrow<FX_FLOAT, 16> color_values(m_nComponents);
- FX_FLOAT* color_value = color_values;
- for (int i = 0; i < palette_count; i ++) {
- int color_data = i;
- for (FX_DWORD j = 0; j < m_nComponents; j ++) {
- int encoded_component = color_data % (1 << m_bpc);
- color_data /= 1 << m_bpc;
- color_value[j] = m_pCompData[j].m_DecodeMin + m_pCompData[j].m_DecodeStep * encoded_component;
- }
- FX_FLOAT R = 0, G = 0, B = 0;
- if (m_nComponents == 1 && m_Family == PDFCS_ICCBASED && m_pColorSpace->CountComponents() > 1) {
- int nComponents = m_pColorSpace->CountComponents();
- FX_FLOAT* temp_buf = FX_Alloc(FX_FLOAT, nComponents);
- for (int i = 0; i < nComponents; i++) {
- temp_buf[i] = *color_value;
- }
- m_pColorSpace->GetRGB(temp_buf, R, G, B);
- FX_Free(temp_buf);
- } else {
- m_pColorSpace->GetRGB(color_value, R, G, B);
- }
- SetPaletteArgb(i, ArgbEncode(255, FXSYS_round(R * 255), FXSYS_round(G * 255), FXSYS_round(B * 255)));
+void CPDF_DIBSource::LoadPalette() {
+ if (m_bpc == 0) {
+ return;
+ }
+ if (m_bpc * m_nComponents > 8) {
+ return;
+ }
+ if (m_pColorSpace == NULL) {
+ return;
+ }
+ if (m_bpc * m_nComponents == 1) {
+ if (m_bDefaultDecode &&
+ (m_Family == PDFCS_DEVICEGRAY || m_Family == PDFCS_DEVICERGB)) {
+ return;
+ }
+ if (m_pColorSpace->CountComponents() > 3) {
+ return;
+ }
+ FX_FLOAT color_values[3];
+ color_values[0] = m_pCompData[0].m_DecodeMin;
+ color_values[1] = color_values[2] = color_values[0];
+ FX_FLOAT R = 0.0f, G = 0.0f, B = 0.0f;
+ m_pColorSpace->GetRGB(color_values, R, G, B);
+ FX_ARGB argb0 = ArgbEncode(255, FXSYS_round(R * 255), FXSYS_round(G * 255),
+ FXSYS_round(B * 255));
+ color_values[0] += m_pCompData[0].m_DecodeStep;
+ color_values[1] += m_pCompData[0].m_DecodeStep;
+ color_values[2] += m_pCompData[0].m_DecodeStep;
+ m_pColorSpace->GetRGB(color_values, R, G, B);
+ FX_ARGB argb1 = ArgbEncode(255, FXSYS_round(R * 255), FXSYS_round(G * 255),
+ FXSYS_round(B * 255));
+ if (argb0 != 0xFF000000 || argb1 != 0xFFFFFFFF) {
+ SetPaletteArgb(0, argb0);
+ SetPaletteArgb(1, argb1);
+ }
+ return;
+ }
+ if (m_pColorSpace == CPDF_ColorSpace::GetStockCS(PDFCS_DEVICEGRAY) &&
+ m_bpc == 8 && m_bDefaultDecode) {
+ } else {
+ int palette_count = 1 << (m_bpc * m_nComponents);
+ CFX_FixedBufGrow<FX_FLOAT, 16> color_values(m_nComponents);
+ FX_FLOAT* color_value = color_values;
+ for (int i = 0; i < palette_count; i++) {
+ int color_data = i;
+ for (FX_DWORD j = 0; j < m_nComponents; j++) {
+ int encoded_component = color_data % (1 << m_bpc);
+ color_data /= 1 << m_bpc;
+ color_value[j] = m_pCompData[j].m_DecodeMin +
+ m_pCompData[j].m_DecodeStep * encoded_component;
+ }
+ FX_FLOAT R = 0, G = 0, B = 0;
+ if (m_nComponents == 1 && m_Family == PDFCS_ICCBASED &&
+ m_pColorSpace->CountComponents() > 1) {
+ int nComponents = m_pColorSpace->CountComponents();
+ FX_FLOAT* temp_buf = FX_Alloc(FX_FLOAT, nComponents);
+ for (int i = 0; i < nComponents; i++) {
+ temp_buf[i] = *color_value;
}
- }
+ m_pColorSpace->GetRGB(temp_buf, R, G, B);
+ FX_Free(temp_buf);
+ } else {
+ m_pColorSpace->GetRGB(color_value, R, G, B);
+ }
+ SetPaletteArgb(i, ArgbEncode(255, FXSYS_round(R * 255),
+ FXSYS_round(G * 255), FXSYS_round(B * 255)));
+ }
+ }
}
-void CPDF_DIBSource::ValidateDictParam()
-{
- m_bpc = m_bpc_orig;
- CPDF_Object * pFilter = m_pDict->GetElementValue(FX_BSTRC("Filter"));
- if (pFilter) {
- if (pFilter->GetType() == PDFOBJ_NAME) {
- CFX_ByteString filter = pFilter->GetString();
- if (filter == FX_BSTRC("CCITTFaxDecode") || filter == FX_BSTRC("JBIG2Decode")) {
- m_bpc = 1;
- m_nComponents = 1;
- }
- if (filter == FX_BSTRC("RunLengthDecode") || filter == FX_BSTRC("DCTDecode")) {
- m_bpc = 8;
- }
- } else if (pFilter->GetType() == PDFOBJ_ARRAY) {
- CPDF_Array *pArray = (CPDF_Array *)pFilter;
- if (pArray->GetString(pArray->GetCount() - 1) == FX_BSTRC("CCITTFaxDecode") ||
- pArray->GetString(pArray->GetCount() - 1) == FX_BSTRC("JBIG2Decode")) {
- m_bpc = 1;
- m_nComponents = 1;
- }
- if (pArray->GetString(pArray->GetCount() - 1) == FX_BSTRC("DCTDecode")) {
- // Previously, pArray->GetString(pArray->GetCount() - 1) == FX_BSTRC("RunLengthDecode") was checked in the "if" statement as well,
- // but too many documents don't conform to it.
- m_bpc = 8;
- }
- }
- }
- if (m_bpc != 1 && m_bpc != 2 && m_bpc != 4 && m_bpc != 8 && m_bpc != 16) {
- m_bpc = 0;
- }
+void CPDF_DIBSource::ValidateDictParam() {
+ m_bpc = m_bpc_orig;
+ CPDF_Object* pFilter = m_pDict->GetElementValue(FX_BSTRC("Filter"));
+ if (pFilter) {
+ if (pFilter->GetType() == PDFOBJ_NAME) {
+ CFX_ByteString filter = pFilter->GetString();
+ if (filter == FX_BSTRC("CCITTFaxDecode") ||
+ filter == FX_BSTRC("JBIG2Decode")) {
+ m_bpc = 1;
+ m_nComponents = 1;
+ }
+ if (filter == FX_BSTRC("RunLengthDecode") ||
+ filter == FX_BSTRC("DCTDecode")) {
+ m_bpc = 8;
+ }
+ } else if (pFilter->GetType() == PDFOBJ_ARRAY) {
+ CPDF_Array* pArray = (CPDF_Array*)pFilter;
+ if (pArray->GetString(pArray->GetCount() - 1) ==
+ FX_BSTRC("CCITTFaxDecode") ||
+ pArray->GetString(pArray->GetCount() - 1) ==
+ FX_BSTRC("JBIG2Decode")) {
+ m_bpc = 1;
+ m_nComponents = 1;
+ }
+ if (pArray->GetString(pArray->GetCount() - 1) == FX_BSTRC("DCTDecode")) {
+ // Previously, pArray->GetString(pArray->GetCount() - 1) ==
+ // FX_BSTRC("RunLengthDecode") was checked in the "if" statement as
+ // well,
+ // but too many documents don't conform to it.
+ m_bpc = 8;
+ }
+ }
+ }
+ if (m_bpc != 1 && m_bpc != 2 && m_bpc != 4 && m_bpc != 8 && m_bpc != 16) {
+ m_bpc = 0;
+ }
}
-#define NORMALCOLOR_MAX(color, max) (color) > (max) ? (max) : (color) < 0 ? 0 : (color);
-void CPDF_DIBSource::TranslateScanline24bpp(uint8_t* dest_scan, const uint8_t* src_scan) const
-{
- if (m_bpc == 0) {
- return;
- }
- int max_data = (1 << m_bpc) - 1;
- if (m_bDefaultDecode) {
- if (m_Family == PDFCS_DEVICERGB || m_Family == PDFCS_CALRGB) {
- const uint8_t* src_pos = src_scan;
- switch (m_bpc) {
- case 16:
- for (int col = 0; col < m_Width; col ++) {
- *dest_scan++ = src_pos[4];
- *dest_scan++ = src_pos[2];
- *dest_scan++ = *src_pos;
- src_pos += 6;
- }
- break;
- case 8:
- for (int column = 0; column < m_Width; column ++) {
- *dest_scan++ = src_pos[2];
- *dest_scan++ = src_pos[1];
- *dest_scan++ = *src_pos;
- src_pos += 3;
- }
- break;
- default:
- int src_bit_pos = 0;
- int dest_byte_pos = 0;
- for (int column = 0; column < m_Width; column ++) {
- int R = _GetBits8(src_scan, src_bit_pos, m_bpc);
- src_bit_pos += m_bpc;
- int G = _GetBits8(src_scan, src_bit_pos, m_bpc);
- src_bit_pos += m_bpc;
- int B = _GetBits8(src_scan, src_bit_pos, m_bpc);
- src_bit_pos += m_bpc;
- R = NORMALCOLOR_MAX(R, max_data);
- G = NORMALCOLOR_MAX(G, max_data);
- B = NORMALCOLOR_MAX(B, max_data);
- dest_scan[dest_byte_pos] = B * 255 / max_data;
- dest_scan[dest_byte_pos + 1] = G * 255 / max_data;
- dest_scan[dest_byte_pos + 2] = R * 255 / max_data;
- dest_byte_pos += 3;
- }
- break;
- }
- return;
- }
- if (m_bpc == 8) {
- if (m_nComponents == m_pColorSpace->CountComponents())
- m_pColorSpace->TranslateImageLine(dest_scan, src_scan, m_Width, m_Width, m_Height,
- m_bLoadMask && m_GroupFamily == PDFCS_DEVICECMYK && m_Family == PDFCS_DEVICECMYK);
- return;
- }
- }
- CFX_FixedBufGrow<FX_FLOAT, 16> color_values1(m_nComponents);
- FX_FLOAT* color_values = color_values1;
- FX_FLOAT R = 0.0f, G = 0.0f, B = 0.0f;
- if (m_bpc == 8) {
- int src_byte_pos = 0;
- int dest_byte_pos = 0;
- for (int column = 0; column < m_Width; column ++) {
- for (FX_DWORD color = 0; color < m_nComponents; color ++) {
- int data = src_scan[src_byte_pos ++];
- color_values[color] = m_pCompData[color].m_DecodeMin +
- m_pCompData[color].m_DecodeStep * data;
- }
- if (m_bLoadMask && m_GroupFamily == PDFCS_DEVICECMYK && m_Family == PDFCS_DEVICECMYK) {
- FX_FLOAT k = 1.0f - color_values[3];
- R = (1.0f - color_values[0]) * k;
- G = (1.0f - color_values[1]) * k;
- B = (1.0f - color_values[2]) * k;
- } else {
- m_pColorSpace->GetRGB(color_values, R, G, B);
- }
- R = NORMALCOLOR_MAX(R, 1);
- G = NORMALCOLOR_MAX(G, 1);
- B = NORMALCOLOR_MAX(B, 1);
- dest_scan[dest_byte_pos] = (int32_t)(B * 255);
- dest_scan[dest_byte_pos + 1] = (int32_t)(G * 255);
- dest_scan[dest_byte_pos + 2] = (int32_t)(R * 255);
- dest_byte_pos += 3;
- }
- } else {
- int src_bit_pos = 0;
- int dest_byte_pos = 0;
- for (int column = 0; column < m_Width; column ++) {
- for (FX_DWORD color = 0; color < m_nComponents; color ++) {
- int data = _GetBits8(src_scan, src_bit_pos, m_bpc);
- color_values[color] = m_pCompData[color].m_DecodeMin +
- m_pCompData[color].m_DecodeStep * data;
- src_bit_pos += m_bpc;
- }
- if (m_bLoadMask && m_GroupFamily == PDFCS_DEVICECMYK && m_Family == PDFCS_DEVICECMYK) {
- FX_FLOAT k = 1.0f - color_values[3];
- R = (1.0f - color_values[0]) * k;
- G = (1.0f - color_values[1]) * k;
- B = (1.0f - color_values[2]) * k;
- } else {
- m_pColorSpace->GetRGB(color_values, R, G, B);
- }
- R = NORMALCOLOR_MAX(R, 1);
- G = NORMALCOLOR_MAX(G, 1);
- B = NORMALCOLOR_MAX(B, 1);
- dest_scan[dest_byte_pos] = (int32_t)(B * 255);
- dest_scan[dest_byte_pos + 1] = (int32_t)(G * 255);
- dest_scan[dest_byte_pos + 2] = (int32_t)(R * 255);
+#define NORMALCOLOR_MAX(color, max) \
+ (color) > (max) ? (max) : (color) < 0 ? 0 : (color);
+void CPDF_DIBSource::TranslateScanline24bpp(uint8_t* dest_scan,
+ const uint8_t* src_scan) const {
+ if (m_bpc == 0) {
+ return;
+ }
+ int max_data = (1 << m_bpc) - 1;
+ if (m_bDefaultDecode) {
+ if (m_Family == PDFCS_DEVICERGB || m_Family == PDFCS_CALRGB) {
+ const uint8_t* src_pos = src_scan;
+ switch (m_bpc) {
+ case 16:
+ for (int col = 0; col < m_Width; col++) {
+ *dest_scan++ = src_pos[4];
+ *dest_scan++ = src_pos[2];
+ *dest_scan++ = *src_pos;
+ src_pos += 6;
+ }
+ break;
+ case 8:
+ for (int column = 0; column < m_Width; column++) {
+ *dest_scan++ = src_pos[2];
+ *dest_scan++ = src_pos[1];
+ *dest_scan++ = *src_pos;
+ src_pos += 3;
+ }
+ break;
+ default:
+ int src_bit_pos = 0;
+ int dest_byte_pos = 0;
+ for (int column = 0; column < m_Width; column++) {
+ int R = _GetBits8(src_scan, src_bit_pos, m_bpc);
+ src_bit_pos += m_bpc;
+ int G = _GetBits8(src_scan, src_bit_pos, m_bpc);
+ src_bit_pos += m_bpc;
+ int B = _GetBits8(src_scan, src_bit_pos, m_bpc);
+ src_bit_pos += m_bpc;
+ R = NORMALCOLOR_MAX(R, max_data);
+ G = NORMALCOLOR_MAX(G, max_data);
+ B = NORMALCOLOR_MAX(B, max_data);
+ dest_scan[dest_byte_pos] = B * 255 / max_data;
+ dest_scan[dest_byte_pos + 1] = G * 255 / max_data;
+ dest_scan[dest_byte_pos + 2] = R * 255 / max_data;
dest_byte_pos += 3;
- }
+ }
+ break;
+ }
+ return;
}
+ if (m_bpc == 8) {
+ if (m_nComponents == m_pColorSpace->CountComponents())
+ m_pColorSpace->TranslateImageLine(
+ dest_scan, src_scan, m_Width, m_Width, m_Height,
+ m_bLoadMask && m_GroupFamily == PDFCS_DEVICECMYK &&
+ m_Family == PDFCS_DEVICECMYK);
+ return;
+ }
+ }
+ CFX_FixedBufGrow<FX_FLOAT, 16> color_values1(m_nComponents);
+ FX_FLOAT* color_values = color_values1;
+ FX_FLOAT R = 0.0f, G = 0.0f, B = 0.0f;
+ if (m_bpc == 8) {
+ int src_byte_pos = 0;
+ int dest_byte_pos = 0;
+ for (int column = 0; column < m_Width; column++) {
+ for (FX_DWORD color = 0; color < m_nComponents; color++) {
+ int data = src_scan[src_byte_pos++];
+ color_values[color] = m_pCompData[color].m_DecodeMin +
+ m_pCompData[color].m_DecodeStep * data;
+ }
+ if (m_bLoadMask && m_GroupFamily == PDFCS_DEVICECMYK &&
+ m_Family == PDFCS_DEVICECMYK) {
+ FX_FLOAT k = 1.0f - color_values[3];
+ R = (1.0f - color_values[0]) * k;
+ G = (1.0f - color_values[1]) * k;
+ B = (1.0f - color_values[2]) * k;
+ } else {
+ m_pColorSpace->GetRGB(color_values, R, G, B);
+ }
+ R = NORMALCOLOR_MAX(R, 1);
+ G = NORMALCOLOR_MAX(G, 1);
+ B = NORMALCOLOR_MAX(B, 1);
+ dest_scan[dest_byte_pos] = (int32_t)(B * 255);
+ dest_scan[dest_byte_pos + 1] = (int32_t)(G * 255);
+ dest_scan[dest_byte_pos + 2] = (int32_t)(R * 255);
+ dest_byte_pos += 3;
+ }
+ } else {
+ int src_bit_pos = 0;
+ int dest_byte_pos = 0;
+ for (int column = 0; column < m_Width; column++) {
+ for (FX_DWORD color = 0; color < m_nComponents; color++) {
+ int data = _GetBits8(src_scan, src_bit_pos, m_bpc);
+ color_values[color] = m_pCompData[color].m_DecodeMin +
+ m_pCompData[color].m_DecodeStep * data;
+ src_bit_pos += m_bpc;
+ }
+ if (m_bLoadMask && m_GroupFamily == PDFCS_DEVICECMYK &&
+ m_Family == PDFCS_DEVICECMYK) {
+ FX_FLOAT k = 1.0f - color_values[3];
+ R = (1.0f - color_values[0]) * k;
+ G = (1.0f - color_values[1]) * k;
+ B = (1.0f - color_values[2]) * k;
+ } else {
+ m_pColorSpace->GetRGB(color_values, R, G, B);
+ }
+ R = NORMALCOLOR_MAX(R, 1);
+ G = NORMALCOLOR_MAX(G, 1);
+ B = NORMALCOLOR_MAX(B, 1);
+ dest_scan[dest_byte_pos] = (int32_t)(B * 255);
+ dest_scan[dest_byte_pos + 1] = (int32_t)(G * 255);
+ dest_scan[dest_byte_pos + 2] = (int32_t)(R * 255);
+ dest_byte_pos += 3;
+ }
+ }
}
-uint8_t* CPDF_DIBSource::GetBuffer() const
-{
- if (m_pCachedBitmap) {
- return m_pCachedBitmap->GetBuffer();
- }
- return NULL;
+uint8_t* CPDF_DIBSource::GetBuffer() const {
+ if (m_pCachedBitmap) {
+ return m_pCachedBitmap->GetBuffer();
+ }
+ return NULL;
}
-const uint8_t* CPDF_DIBSource::GetScanline(int line) const
-{
- if (m_bpc == 0) {
- return NULL;
- }
- FX_SAFE_DWORD src_pitch = CalculatePitch8(m_bpc, m_nComponents, m_Width, 1);
- if (!src_pitch.IsValid())
- return NULL;
- FX_DWORD src_pitch_value = src_pitch.ValueOrDie();
- const uint8_t* pSrcLine = NULL;
- if (m_pCachedBitmap) {
- if (line >= m_pCachedBitmap->GetHeight()) {
- line = m_pCachedBitmap->GetHeight() - 1;
- }
- pSrcLine = m_pCachedBitmap->GetScanline(line);
- } else if (m_pDecoder) {
- pSrcLine = m_pDecoder->GetScanline(line);
- } else {
- if (m_pStreamAcc->GetSize() >= (line + 1) * src_pitch_value) {
- pSrcLine = m_pStreamAcc->GetData() + line * src_pitch_value;
- }
- }
- if (pSrcLine == NULL) {
- uint8_t* pLineBuf = m_pMaskedLine ? m_pMaskedLine : m_pLineBuf;
- FXSYS_memset(pLineBuf, 0xff, m_Pitch);
- return pLineBuf;
- }
- if (m_bpc * m_nComponents == 1) {
- if (m_bImageMask && m_bDefaultDecode) {
- for (FX_DWORD i = 0; i < src_pitch_value; i++) {
- m_pLineBuf[i] = ~pSrcLine[i];
- }
- } else if (m_bColorKey) {
- FX_DWORD reset_argb, set_argb;
- reset_argb = m_pPalette ? m_pPalette[0] : 0xff000000;
- set_argb = m_pPalette ? m_pPalette[1] : 0xffffffff;
- if (m_pCompData[0].m_ColorKeyMin == 0) {
- reset_argb = 0;
- }
- if (m_pCompData[0].m_ColorKeyMax == 1) {
- set_argb = 0;
- }
- set_argb = FXARGB_TODIB(set_argb);
- reset_argb = FXARGB_TODIB(reset_argb);
- FX_DWORD* dest_scan = (FX_DWORD*)m_pMaskedLine;
- for (int col = 0; col < m_Width; col ++) {
- if (pSrcLine[col / 8] & (1 << (7 - col % 8))) {
- *dest_scan = set_argb;
- } else {
- *dest_scan = reset_argb;
- }
- dest_scan ++;
- }
- return m_pMaskedLine;
+const uint8_t* CPDF_DIBSource::GetScanline(int line) const {
+ if (m_bpc == 0) {
+ return NULL;
+ }
+ FX_SAFE_DWORD src_pitch = CalculatePitch8(m_bpc, m_nComponents, m_Width, 1);
+ if (!src_pitch.IsValid())
+ return NULL;
+ FX_DWORD src_pitch_value = src_pitch.ValueOrDie();
+ const uint8_t* pSrcLine = NULL;
+ if (m_pCachedBitmap) {
+ if (line >= m_pCachedBitmap->GetHeight()) {
+ line = m_pCachedBitmap->GetHeight() - 1;
+ }
+ pSrcLine = m_pCachedBitmap->GetScanline(line);
+ } else if (m_pDecoder) {
+ pSrcLine = m_pDecoder->GetScanline(line);
+ } else {
+ if (m_pStreamAcc->GetSize() >= (line + 1) * src_pitch_value) {
+ pSrcLine = m_pStreamAcc->GetData() + line * src_pitch_value;
+ }
+ }
+ if (pSrcLine == NULL) {
+ uint8_t* pLineBuf = m_pMaskedLine ? m_pMaskedLine : m_pLineBuf;
+ FXSYS_memset(pLineBuf, 0xff, m_Pitch);
+ return pLineBuf;
+ }
+ if (m_bpc * m_nComponents == 1) {
+ if (m_bImageMask && m_bDefaultDecode) {
+ for (FX_DWORD i = 0; i < src_pitch_value; i++) {
+ m_pLineBuf[i] = ~pSrcLine[i];
+ }
+ } else if (m_bColorKey) {
+ FX_DWORD reset_argb, set_argb;
+ reset_argb = m_pPalette ? m_pPalette[0] : 0xff000000;
+ set_argb = m_pPalette ? m_pPalette[1] : 0xffffffff;
+ if (m_pCompData[0].m_ColorKeyMin == 0) {
+ reset_argb = 0;
+ }
+ if (m_pCompData[0].m_ColorKeyMax == 1) {
+ set_argb = 0;
+ }
+ set_argb = FXARGB_TODIB(set_argb);
+ reset_argb = FXARGB_TODIB(reset_argb);
+ FX_DWORD* dest_scan = (FX_DWORD*)m_pMaskedLine;
+ for (int col = 0; col < m_Width; col++) {
+ if (pSrcLine[col / 8] & (1 << (7 - col % 8))) {
+ *dest_scan = set_argb;
} else {
- FXSYS_memcpy(m_pLineBuf, pSrcLine, src_pitch_value);
+ *dest_scan = reset_argb;
}
- return m_pLineBuf;
+ dest_scan++;
+ }
+ return m_pMaskedLine;
+ } else {
+ FXSYS_memcpy(m_pLineBuf, pSrcLine, src_pitch_value);
}
- if (m_bpc * m_nComponents <= 8) {
- if (m_bpc == 8) {
- FXSYS_memcpy(m_pLineBuf, pSrcLine, src_pitch_value);
- } else {
- int src_bit_pos = 0;
- for (int col = 0; col < m_Width; col ++) {
- int color_index = 0;
- for (FX_DWORD color = 0; color < m_nComponents; color ++) {
- int data = _GetBits8(pSrcLine, src_bit_pos, m_bpc);
- color_index |= data << (color * m_bpc);
- src_bit_pos += m_bpc;
- }
- m_pLineBuf[col] = color_index;
- }
- }
- if (m_bColorKey) {
- uint8_t* pDestPixel = m_pMaskedLine;
- const uint8_t* pSrcPixel = m_pLineBuf;
- for (int col = 0; col < m_Width; col ++) {
- uint8_t index = *pSrcPixel++;
- if (m_pPalette) {
- *pDestPixel++ = FXARGB_B(m_pPalette[index]);
- *pDestPixel++ = FXARGB_G(m_pPalette[index]);
- *pDestPixel++ = FXARGB_R(m_pPalette[index]);
- } else {
- *pDestPixel++ = index;
- *pDestPixel++ = index;
- *pDestPixel++ = index;
- }
- *pDestPixel = (index < m_pCompData[0].m_ColorKeyMin || index > m_pCompData[0].m_ColorKeyMax) ? 0xff : 0;
- pDestPixel ++ ;
- }
- return m_pMaskedLine;
+ return m_pLineBuf;
+ }
+ if (m_bpc * m_nComponents <= 8) {
+ if (m_bpc == 8) {
+ FXSYS_memcpy(m_pLineBuf, pSrcLine, src_pitch_value);
+ } else {
+ int src_bit_pos = 0;
+ for (int col = 0; col < m_Width; col++) {
+ int color_index = 0;
+ for (FX_DWORD color = 0; color < m_nComponents; color++) {
+ int data = _GetBits8(pSrcLine, src_bit_pos, m_bpc);
+ color_index |= data << (color * m_bpc);
+ src_bit_pos += m_bpc;
}
- return m_pLineBuf;
+ m_pLineBuf[col] = color_index;
+ }
}
if (m_bColorKey) {
- if (m_nComponents == 3 && m_bpc == 8) {
- uint8_t* alpha_channel = m_pMaskedLine + 3;
- for (int col = 0; col < m_Width; col ++) {
- const uint8_t* pPixel = pSrcLine + col * 3;
- alpha_channel[col * 4] = (pPixel[0] < m_pCompData[0].m_ColorKeyMin || pPixel[0] > m_pCompData[0].m_ColorKeyMax ||
- pPixel[1] < m_pCompData[1].m_ColorKeyMin || pPixel[1] > m_pCompData[1].m_ColorKeyMax ||
- pPixel[2] < m_pCompData[2].m_ColorKeyMin || pPixel[2] > m_pCompData[2].m_ColorKeyMax) ? 0xff : 0;
- }
+ uint8_t* pDestPixel = m_pMaskedLine;
+ const uint8_t* pSrcPixel = m_pLineBuf;
+ for (int col = 0; col < m_Width; col++) {
+ uint8_t index = *pSrcPixel++;
+ if (m_pPalette) {
+ *pDestPixel++ = FXARGB_B(m_pPalette[index]);
+ *pDestPixel++ = FXARGB_G(m_pPalette[index]);
+ *pDestPixel++ = FXARGB_R(m_pPalette[index]);
} else {
- FXSYS_memset(m_pMaskedLine, 0xff, m_Pitch);
- }
- }
- if (m_pColorSpace) {
- TranslateScanline24bpp(m_pLineBuf, pSrcLine);
- pSrcLine = m_pLineBuf;
- }
- if (m_bColorKey) {
- const uint8_t* pSrcPixel = pSrcLine;
- uint8_t* pDestPixel = m_pMaskedLine;
- for (int col = 0; col < m_Width; col ++) {
- *pDestPixel++ = *pSrcPixel++;
- *pDestPixel++ = *pSrcPixel++;
- *pDestPixel++ = *pSrcPixel++;
- pDestPixel ++;
+ *pDestPixel++ = index;
+ *pDestPixel++ = index;
+ *pDestPixel++ = index;
}
- return m_pMaskedLine;
- }
- return pSrcLine;
+ *pDestPixel = (index < m_pCompData[0].m_ColorKeyMin ||
+ index > m_pCompData[0].m_ColorKeyMax)
+ ? 0xff
+ : 0;
+ pDestPixel++;
+ }
+ return m_pMaskedLine;
+ }
+ return m_pLineBuf;
+ }
+ if (m_bColorKey) {
+ if (m_nComponents == 3 && m_bpc == 8) {
+ uint8_t* alpha_channel = m_pMaskedLine + 3;
+ for (int col = 0; col < m_Width; col++) {
+ const uint8_t* pPixel = pSrcLine + col * 3;
+ alpha_channel[col * 4] = (pPixel[0] < m_pCompData[0].m_ColorKeyMin ||
+ pPixel[0] > m_pCompData[0].m_ColorKeyMax ||
+ pPixel[1] < m_pCompData[1].m_ColorKeyMin ||
+ pPixel[1] > m_pCompData[1].m_ColorKeyMax ||
+ pPixel[2] < m_pCompData[2].m_ColorKeyMin ||
+ pPixel[2] > m_pCompData[2].m_ColorKeyMax)
+ ? 0xff
+ : 0;
+ }
+ } else {
+ FXSYS_memset(m_pMaskedLine, 0xff, m_Pitch);
+ }
+ }
+ if (m_pColorSpace) {
+ TranslateScanline24bpp(m_pLineBuf, pSrcLine);
+ pSrcLine = m_pLineBuf;
+ }
+ if (m_bColorKey) {
+ const uint8_t* pSrcPixel = pSrcLine;
+ uint8_t* pDestPixel = m_pMaskedLine;
+ for (int col = 0; col < m_Width; col++) {
+ *pDestPixel++ = *pSrcPixel++;
+ *pDestPixel++ = *pSrcPixel++;
+ *pDestPixel++ = *pSrcPixel++;
+ pDestPixel++;
+ }
+ return m_pMaskedLine;
+ }
+ return pSrcLine;
}
-FX_BOOL CPDF_DIBSource::SkipToScanline(int line, IFX_Pause* pPause) const
-{
- if (m_pDecoder) {
- return m_pDecoder->SkipToScanline(line, pPause);
- }
- return FALSE;
+FX_BOOL CPDF_DIBSource::SkipToScanline(int line, IFX_Pause* pPause) const {
+ if (m_pDecoder) {
+ return m_pDecoder->SkipToScanline(line, pPause);
+ }
+ return FALSE;
}
-void CPDF_DIBSource::DownSampleScanline(int line, uint8_t* dest_scan, int dest_bpp,
- int dest_width, FX_BOOL bFlipX, int clip_left, int clip_width) const
-{
- if (line < 0 || dest_scan == NULL || dest_bpp <= 0 ||
- dest_width <= 0 || clip_left < 0 || clip_width <= 0) {
- return;
- }
+void CPDF_DIBSource::DownSampleScanline(int line,
+ uint8_t* dest_scan,
+ int dest_bpp,
+ int dest_width,
+ FX_BOOL bFlipX,
+ int clip_left,
+ int clip_width) const {
+ if (line < 0 || dest_scan == NULL || dest_bpp <= 0 || dest_width <= 0 ||
+ clip_left < 0 || clip_width <= 0) {
+ return;
+ }
- FX_DWORD src_width = m_Width;
- FX_SAFE_DWORD pitch = CalculatePitch8(m_bpc, m_nComponents, m_Width, 1);
+ FX_DWORD src_width = m_Width;
+ FX_SAFE_DWORD pitch = CalculatePitch8(m_bpc, m_nComponents, m_Width, 1);
+ if (!pitch.IsValid()) {
+ return;
+ }
+
+ const uint8_t* pSrcLine = NULL;
+ if (m_pCachedBitmap) {
+ pSrcLine = m_pCachedBitmap->GetScanline(line);
+ } else if (m_pDecoder) {
+ pSrcLine = m_pDecoder->GetScanline(line);
+ } else {
+ FX_DWORD src_pitch = pitch.ValueOrDie();
+ pitch *= (line + 1);
if (!pitch.IsValid()) {
- return;
+ return;
}
- const uint8_t* pSrcLine = NULL;
- if (m_pCachedBitmap) {
- pSrcLine = m_pCachedBitmap->GetScanline(line);
- } else if (m_pDecoder) {
- pSrcLine = m_pDecoder->GetScanline(line);
- } else {
- FX_DWORD src_pitch = pitch.ValueOrDie();
- pitch *= (line+1);
- if (!pitch.IsValid()) {
- return;
- }
+ if (m_pStreamAcc->GetSize() >= pitch.ValueOrDie()) {
+ pSrcLine = m_pStreamAcc->GetData() + line * src_pitch;
+ }
+ }
+ int orig_Bpp = m_bpc * m_nComponents / 8;
+ int dest_Bpp = dest_bpp / 8;
+ if (pSrcLine == NULL) {
+ FXSYS_memset(dest_scan, 0xff, dest_Bpp * clip_width);
+ return;
+ }
- if (m_pStreamAcc->GetSize() >= pitch.ValueOrDie()) {
- pSrcLine = m_pStreamAcc->GetData() + line * src_pitch;
- }
- }
- int orig_Bpp = m_bpc * m_nComponents / 8;
- int dest_Bpp = dest_bpp / 8;
- if (pSrcLine == NULL) {
- FXSYS_memset(dest_scan, 0xff, dest_Bpp * clip_width);
- return;
- }
+ FX_SAFE_INT32 max_src_x = clip_left;
+ max_src_x += clip_width - 1;
+ max_src_x *= src_width;
+ max_src_x /= dest_width;
+ if (!max_src_x.IsValid()) {
+ return;
+ }
- FX_SAFE_INT32 max_src_x = clip_left;
- max_src_x += clip_width - 1;
- max_src_x *= src_width;
- max_src_x /= dest_width;
- if (!max_src_x.IsValid()) {
- return;
- }
-
- CFX_FixedBufGrow<uint8_t, 128> temp(orig_Bpp);
- if (m_bpc * m_nComponents == 1) {
- FX_DWORD set_argb = (FX_DWORD) - 1, reset_argb = 0;
- if (m_bImageMask) {
- if (m_bDefaultDecode) {
- set_argb = 0;
- reset_argb = (FX_DWORD) - 1;
- }
- } else if (m_bColorKey) {
- reset_argb = m_pPalette ? m_pPalette[0] : 0xff000000;
- set_argb = m_pPalette ? m_pPalette[1] : 0xffffffff;
- if (m_pCompData[0].m_ColorKeyMin == 0) {
- reset_argb = 0;
- }
- if (m_pCompData[0].m_ColorKeyMax == 1) {
- set_argb = 0;
- }
- set_argb = FXARGB_TODIB(set_argb);
- reset_argb = FXARGB_TODIB(reset_argb);
- for (int i = 0; i < clip_width; i ++) {
- FX_DWORD src_x = (clip_left + i) * src_width / dest_width;
- if (bFlipX) {
- src_x = src_width - src_x - 1;
- }
- src_x %= src_width;
- if (pSrcLine[src_x / 8] & (1 << (7 - src_x % 8))) {
- ((FX_DWORD*)dest_scan)[i] = set_argb;
- } else {
- ((FX_DWORD*)dest_scan)[i] = reset_argb;
- }
- }
- return;
+ CFX_FixedBufGrow<uint8_t, 128> temp(orig_Bpp);
+ if (m_bpc * m_nComponents == 1) {
+ FX_DWORD set_argb = (FX_DWORD)-1, reset_argb = 0;
+ if (m_bImageMask) {
+ if (m_bDefaultDecode) {
+ set_argb = 0;
+ reset_argb = (FX_DWORD)-1;
+ }
+ } else if (m_bColorKey) {
+ reset_argb = m_pPalette ? m_pPalette[0] : 0xff000000;
+ set_argb = m_pPalette ? m_pPalette[1] : 0xffffffff;
+ if (m_pCompData[0].m_ColorKeyMin == 0) {
+ reset_argb = 0;
+ }
+ if (m_pCompData[0].m_ColorKeyMax == 1) {
+ set_argb = 0;
+ }
+ set_argb = FXARGB_TODIB(set_argb);
+ reset_argb = FXARGB_TODIB(reset_argb);
+ for (int i = 0; i < clip_width; i++) {
+ FX_DWORD src_x = (clip_left + i) * src_width / dest_width;
+ if (bFlipX) {
+ src_x = src_width - src_x - 1;
+ }
+ src_x %= src_width;
+ if (pSrcLine[src_x / 8] & (1 << (7 - src_x % 8))) {
+ ((FX_DWORD*)dest_scan)[i] = set_argb;
} else {
- if (dest_Bpp == 1) {
- } else if (m_pPalette) {
- reset_argb = m_pPalette[0];
- set_argb = m_pPalette[1];
- }
+ ((FX_DWORD*)dest_scan)[i] = reset_argb;
}
- for (int i = 0; i < clip_width; i ++) {
- FX_DWORD src_x = (clip_left + i) * src_width / dest_width;
- if (bFlipX) {
- src_x = src_width - src_x - 1;
- }
- src_x %= src_width;
- int dest_pos = i * dest_Bpp;
- if (pSrcLine[src_x / 8] & (1 << (7 - src_x % 8))) {
- if (dest_Bpp == 1) {
- dest_scan[dest_pos] = (uint8_t)set_argb;
- } else if (dest_Bpp == 3) {
- dest_scan[dest_pos] = FXARGB_B(set_argb);
- dest_scan[dest_pos + 1] = FXARGB_G(set_argb);
- dest_scan[dest_pos + 2] = FXARGB_R(set_argb);
- } else {
- *(FX_DWORD*)(dest_scan + dest_pos) = set_argb;
- }
- } else {
- if (dest_Bpp == 1) {
- dest_scan[dest_pos] = (uint8_t)reset_argb;
- } else if (dest_Bpp == 3) {
- dest_scan[dest_pos] = FXARGB_B(reset_argb);
- dest_scan[dest_pos + 1] = FXARGB_G(reset_argb);
- dest_scan[dest_pos + 2] = FXARGB_R(reset_argb);
- } else {
- *(FX_DWORD*)(dest_scan + dest_pos) = reset_argb;
- }
- }
+ }
+ return;
+ } else {
+ if (dest_Bpp == 1) {
+ } else if (m_pPalette) {
+ reset_argb = m_pPalette[0];
+ set_argb = m_pPalette[1];
+ }
+ }
+ for (int i = 0; i < clip_width; i++) {
+ FX_DWORD src_x = (clip_left + i) * src_width / dest_width;
+ if (bFlipX) {
+ src_x = src_width - src_x - 1;
+ }
+ src_x %= src_width;
+ int dest_pos = i * dest_Bpp;
+ if (pSrcLine[src_x / 8] & (1 << (7 - src_x % 8))) {
+ if (dest_Bpp == 1) {
+ dest_scan[dest_pos] = (uint8_t)set_argb;
+ } else if (dest_Bpp == 3) {
+ dest_scan[dest_pos] = FXARGB_B(set_argb);
+ dest_scan[dest_pos + 1] = FXARGB_G(set_argb);
+ dest_scan[dest_pos + 2] = FXARGB_R(set_argb);
+ } else {
+ *(FX_DWORD*)(dest_scan + dest_pos) = set_argb;
}
- return;
- } else if (m_bpc * m_nComponents <= 8) {
- if (m_bpc < 8) {
- int src_bit_pos = 0;
- for (FX_DWORD col = 0; col < src_width; col ++) {
- int color_index = 0;
- for (FX_DWORD color = 0; color < m_nComponents; color ++) {
- int data = _GetBits8(pSrcLine, src_bit_pos, m_bpc);
- color_index |= data << (color * m_bpc);
- src_bit_pos += m_bpc;
- }
- m_pLineBuf[col] = color_index;
- }
- pSrcLine = m_pLineBuf;
+ } else {
+ if (dest_Bpp == 1) {
+ dest_scan[dest_pos] = (uint8_t)reset_argb;
+ } else if (dest_Bpp == 3) {
+ dest_scan[dest_pos] = FXARGB_B(reset_argb);
+ dest_scan[dest_pos + 1] = FXARGB_G(reset_argb);
+ dest_scan[dest_pos + 2] = FXARGB_R(reset_argb);
+ } else {
+ *(FX_DWORD*)(dest_scan + dest_pos) = reset_argb;
}
- if (m_bColorKey) {
- for (int i = 0; i < clip_width; i ++) {
- FX_DWORD src_x = (clip_left + i) * src_width / dest_width;
- if (bFlipX) {
- src_x = src_width - src_x - 1;
- }
- src_x %= src_width;
- uint8_t* pDestPixel = dest_scan + i * 4;
- uint8_t index = pSrcLine[src_x];
- if (m_pPalette) {
- *pDestPixel++ = FXARGB_B(m_pPalette[index]);
- *pDestPixel++ = FXARGB_G(m_pPalette[index]);
- *pDestPixel++ = FXARGB_R(m_pPalette[index]);
- } else {
- *pDestPixel++ = index;
- *pDestPixel++ = index;
- *pDestPixel++ = index;
- }
- *pDestPixel = (index < m_pCompData[0].m_ColorKeyMin || index > m_pCompData[0].m_ColorKeyMax) ? 0xff : 0;
- }
- return;
+ }
+ }
+ return;
+ } else if (m_bpc * m_nComponents <= 8) {
+ if (m_bpc < 8) {
+ int src_bit_pos = 0;
+ for (FX_DWORD col = 0; col < src_width; col++) {
+ int color_index = 0;
+ for (FX_DWORD color = 0; color < m_nComponents; color++) {
+ int data = _GetBits8(pSrcLine, src_bit_pos, m_bpc);
+ color_index |= data << (color * m_bpc);
+ src_bit_pos += m_bpc;
}
- for (int i = 0; i < clip_width; i ++) {
- FX_DWORD src_x = (clip_left + i) * src_width / dest_width;
- if (bFlipX) {
- src_x = src_width - src_x - 1;
- }
- src_x %= src_width;
- uint8_t index = pSrcLine[src_x];
- if (dest_Bpp == 1) {
- dest_scan[i] = index;
- } else {
- int dest_pos = i * dest_Bpp;
- FX_ARGB argb = m_pPalette[index];
- dest_scan[dest_pos] = FXARGB_B(argb);
- dest_scan[dest_pos + 1] = FXARGB_G(argb);
- dest_scan[dest_pos + 2] = FXARGB_R(argb);
- }
+ m_pLineBuf[col] = color_index;
+ }
+ pSrcLine = m_pLineBuf;
+ }
+ if (m_bColorKey) {
+ for (int i = 0; i < clip_width; i++) {
+ FX_DWORD src_x = (clip_left + i) * src_width / dest_width;
+ if (bFlipX) {
+ src_x = src_width - src_x - 1;
}
- return;
- } else {
- int last_src_x = -1;
- FX_ARGB last_argb;
- FX_FLOAT orig_Not8Bpp = (FX_FLOAT)m_bpc * (FX_FLOAT)m_nComponents / 8.0f;
- FX_FLOAT unit_To8Bpc = 255.0f / ((1 << m_bpc) - 1);
- for (int i = 0; i < clip_width; i ++) {
- int dest_x = clip_left + i;
- FX_DWORD src_x = (bFlipX ? (dest_width - dest_x - 1) : dest_x) * (int64_t)src_width / dest_width;
- src_x %= src_width;
- const uint8_t* pSrcPixel = NULL;
- if (m_bpc % 8 == 0) {
- pSrcPixel = pSrcLine + src_x * orig_Bpp;
- } else {
- pSrcPixel = pSrcLine + (int)(src_x * orig_Not8Bpp);
- }
- uint8_t* pDestPixel = dest_scan + i * dest_Bpp;
- FX_ARGB argb;
- if (src_x == last_src_x) {
- argb = last_argb;
- } else {
- if (m_pColorSpace) {
- uint8_t color[4];
- if (!m_bDefaultDecode) {
- for (int i = 0; i < m_nComponents; i ++) {
- int color_value = (int)((m_pCompData[i].m_DecodeMin + m_pCompData[i].m_DecodeStep * (FX_FLOAT)pSrcPixel[i]) * 255.0f + 0.5f);
- temp[i] = color_value > 255 ? 255 : (color_value < 0 ? 0 : color_value);
- }
- m_pColorSpace->TranslateImageLine(color, temp, 1, 0, 0, m_bLoadMask && m_GroupFamily == PDFCS_DEVICECMYK && m_Family == PDFCS_DEVICECMYK);
- } else {
- if (m_bpc < 8) {
- int src_bit_pos = 0;
- if (src_x % 2) {
- src_bit_pos = 4;
- }
- for (FX_DWORD i = 0; i < m_nComponents; i ++) {
- temp[i] = (uint8_t)(_GetBits8(pSrcPixel, src_bit_pos, m_bpc) * unit_To8Bpc);
- src_bit_pos += m_bpc;
- }
- m_pColorSpace->TranslateImageLine(color, temp, 1, 0, 0, m_bLoadMask && m_GroupFamily == PDFCS_DEVICECMYK && m_Family == PDFCS_DEVICECMYK);
- } else {
- m_pColorSpace->TranslateImageLine(color, pSrcPixel, 1, 0, 0, m_bLoadMask && m_GroupFamily == PDFCS_DEVICECMYK && m_Family == PDFCS_DEVICECMYK);
- }
- }
- argb = FXARGB_MAKE(0xff, color[2], color[1], color[0]);
- } else {
- argb = FXARGB_MAKE(0xff, pSrcPixel[2], pSrcPixel[1], pSrcPixel[0]);
- }
- if (m_bColorKey) {
- int alpha = 0xff;
- if (m_nComponents == 3 && m_bpc == 8) {
- alpha = (pSrcPixel[0] < m_pCompData[0].m_ColorKeyMin ||
- pSrcPixel[0] > m_pCompData[0].m_ColorKeyMax ||
- pSrcPixel[1] < m_pCompData[1].m_ColorKeyMin ||
- pSrcPixel[1] > m_pCompData[1].m_ColorKeyMax ||
- pSrcPixel[2] < m_pCompData[2].m_ColorKeyMin ||
- pSrcPixel[2] > m_pCompData[2].m_ColorKeyMax) ? 0xff : 0;
- }
- argb &= 0xffffff;
- argb |= alpha << 24;
- }
- last_src_x = src_x;
- last_argb = argb;
+ src_x %= src_width;
+ uint8_t* pDestPixel = dest_scan + i * 4;
+ uint8_t index = pSrcLine[src_x];
+ if (m_pPalette) {
+ *pDestPixel++ = FXARGB_B(m_pPalette[index]);
+ *pDestPixel++ = FXARGB_G(m_pPalette[index]);
+ *pDestPixel++ = FXARGB_R(m_pPalette[index]);
+ } else {
+ *pDestPixel++ = index;
+ *pDestPixel++ = index;
+ *pDestPixel++ = index;
+ }
+ *pDestPixel = (index < m_pCompData[0].m_ColorKeyMin ||
+ index > m_pCompData[0].m_ColorKeyMax)
+ ? 0xff
+ : 0;
+ }
+ return;
+ }
+ for (int i = 0; i < clip_width; i++) {
+ FX_DWORD src_x = (clip_left + i) * src_width / dest_width;
+ if (bFlipX) {
+ src_x = src_width - src_x - 1;
+ }
+ src_x %= src_width;
+ uint8_t index = pSrcLine[src_x];
+ if (dest_Bpp == 1) {
+ dest_scan[i] = index;
+ } else {
+ int dest_pos = i * dest_Bpp;
+ FX_ARGB argb = m_pPalette[index];
+ dest_scan[dest_pos] = FXARGB_B(argb);
+ dest_scan[dest_pos + 1] = FXARGB_G(argb);
+ dest_scan[dest_pos + 2] = FXARGB_R(argb);
+ }
+ }
+ return;
+ } else {
+ int last_src_x = -1;
+ FX_ARGB last_argb;
+ FX_FLOAT orig_Not8Bpp = (FX_FLOAT)m_bpc * (FX_FLOAT)m_nComponents / 8.0f;
+ FX_FLOAT unit_To8Bpc = 255.0f / ((1 << m_bpc) - 1);
+ for (int i = 0; i < clip_width; i++) {
+ int dest_x = clip_left + i;
+ FX_DWORD src_x = (bFlipX ? (dest_width - dest_x - 1) : dest_x) *
+ (int64_t)src_width / dest_width;
+ src_x %= src_width;
+ const uint8_t* pSrcPixel = NULL;
+ if (m_bpc % 8 == 0) {
+ pSrcPixel = pSrcLine + src_x * orig_Bpp;
+ } else {
+ pSrcPixel = pSrcLine + (int)(src_x * orig_Not8Bpp);
+ }
+ uint8_t* pDestPixel = dest_scan + i * dest_Bpp;
+ FX_ARGB argb;
+ if (src_x == last_src_x) {
+ argb = last_argb;
+ } else {
+ if (m_pColorSpace) {
+ uint8_t color[4];
+ if (!m_bDefaultDecode) {
+ for (int i = 0; i < m_nComponents; i++) {
+ int color_value =
+ (int)((m_pCompData[i].m_DecodeMin +
+ m_pCompData[i].m_DecodeStep * (FX_FLOAT)pSrcPixel[i]) *
+ 255.0f +
+ 0.5f);
+ temp[i] =
+ color_value > 255 ? 255 : (color_value < 0 ? 0 : color_value);
}
- if (dest_Bpp == 4) {
- *(FX_DWORD*)pDestPixel = FXARGB_TODIB(argb);
+ m_pColorSpace->TranslateImageLine(
+ color, temp, 1, 0, 0, m_bLoadMask &&
+ m_GroupFamily == PDFCS_DEVICECMYK &&
+ m_Family == PDFCS_DEVICECMYK);
+ } else {
+ if (m_bpc < 8) {
+ int src_bit_pos = 0;
+ if (src_x % 2) {
+ src_bit_pos = 4;
+ }
+ for (FX_DWORD i = 0; i < m_nComponents; i++) {
+ temp[i] = (uint8_t)(_GetBits8(pSrcPixel, src_bit_pos, m_bpc) *
+ unit_To8Bpc);
+ src_bit_pos += m_bpc;
+ }
+ m_pColorSpace->TranslateImageLine(
+ color, temp, 1, 0, 0, m_bLoadMask &&
+ m_GroupFamily == PDFCS_DEVICECMYK &&
+ m_Family == PDFCS_DEVICECMYK);
} else {
- *pDestPixel++ = FXARGB_B(argb);
- *pDestPixel++ = FXARGB_G(argb);
- *pDestPixel = FXARGB_R(argb);
+ m_pColorSpace->TranslateImageLine(
+ color, pSrcPixel, 1, 0, 0,
+ m_bLoadMask && m_GroupFamily == PDFCS_DEVICECMYK &&
+ m_Family == PDFCS_DEVICECMYK);
}
+ }
+ argb = FXARGB_MAKE(0xff, color[2], color[1], color[0]);
+ } else {
+ argb = FXARGB_MAKE(0xff, pSrcPixel[2], pSrcPixel[1], pSrcPixel[0]);
}
- }
+ if (m_bColorKey) {
+ int alpha = 0xff;
+ if (m_nComponents == 3 && m_bpc == 8) {
+ alpha = (pSrcPixel[0] < m_pCompData[0].m_ColorKeyMin ||
+ pSrcPixel[0] > m_pCompData[0].m_ColorKeyMax ||
+ pSrcPixel[1] < m_pCompData[1].m_ColorKeyMin ||
+ pSrcPixel[1] > m_pCompData[1].m_ColorKeyMax ||
+ pSrcPixel[2] < m_pCompData[2].m_ColorKeyMin ||
+ pSrcPixel[2] > m_pCompData[2].m_ColorKeyMax)
+ ? 0xff
+ : 0;
+ }
+ argb &= 0xffffff;
+ argb |= alpha << 24;
+ }
+ last_src_x = src_x;
+ last_argb = argb;
+ }
+ if (dest_Bpp == 4) {
+ *(FX_DWORD*)pDestPixel = FXARGB_TODIB(argb);
+ } else {
+ *pDestPixel++ = FXARGB_B(argb);
+ *pDestPixel++ = FXARGB_G(argb);
+ *pDestPixel = FXARGB_R(argb);
+ }
+ }
+ }
}
-void CPDF_DIBSource::SetDownSampleSize(int dest_width, int dest_height) const
-{
- if (m_pDecoder) {
- m_pDecoder->DownScale(dest_width, dest_height);
- ((CPDF_DIBSource*)this)->m_Width = m_pDecoder->GetWidth();
- ((CPDF_DIBSource*)this)->m_Height = m_pDecoder->GetHeight();
- }
+void CPDF_DIBSource::SetDownSampleSize(int dest_width, int dest_height) const {
+ if (m_pDecoder) {
+ m_pDecoder->DownScale(dest_width, dest_height);
+ ((CPDF_DIBSource*)this)->m_Width = m_pDecoder->GetWidth();
+ ((CPDF_DIBSource*)this)->m_Height = m_pDecoder->GetHeight();
+ }
}
-void CPDF_DIBSource::ClearImageData()
-{
- if (m_pDecoder) {
- m_pDecoder->ClearImageData();
- }
+void CPDF_DIBSource::ClearImageData() {
+ if (m_pDecoder) {
+ m_pDecoder->ClearImageData();
+ }
}
-CPDF_ProgressiveImageLoaderHandle::CPDF_ProgressiveImageLoaderHandle()
-{
- m_pImageLoader = NULL;
- m_pCache = NULL;
- m_pImage = NULL;
+CPDF_ProgressiveImageLoaderHandle::CPDF_ProgressiveImageLoaderHandle() {
+ m_pImageLoader = NULL;
+ m_pCache = NULL;
+ m_pImage = NULL;
}
-CPDF_ProgressiveImageLoaderHandle::~CPDF_ProgressiveImageLoaderHandle()
-{
+CPDF_ProgressiveImageLoaderHandle::~CPDF_ProgressiveImageLoaderHandle() {}
+FX_BOOL CPDF_ProgressiveImageLoaderHandle::Start(
+ CPDF_ImageLoader* pImageLoader,
+ const CPDF_ImageObject* pImage,
+ CPDF_PageRenderCache* pCache,
+ FX_BOOL bStdCS,
+ FX_DWORD GroupFamily,
+ FX_BOOL bLoadMask,
+ CPDF_RenderStatus* pRenderStatus,
+ int32_t nDownsampleWidth,
+ int32_t nDownsampleHeight) {
+ m_pImageLoader = pImageLoader;
+ m_pCache = pCache;
+ m_pImage = (CPDF_ImageObject*)pImage;
+ m_nDownsampleWidth = nDownsampleWidth;
+ m_nDownsampleHeight = nDownsampleHeight;
+ FX_BOOL ret;
+ if (pCache) {
+ ret = pCache->StartGetCachedBitmap(pImage->m_pImage->GetStream(), bStdCS,
+ GroupFamily, bLoadMask, pRenderStatus,
+ m_nDownsampleWidth, m_nDownsampleHeight);
+ if (ret == FALSE) {
+ m_pImageLoader->m_bCached = TRUE;
+ m_pImageLoader->m_pBitmap = pCache->m_pCurImageCache->DetachBitmap();
+ m_pImageLoader->m_pMask = pCache->m_pCurImageCache->DetachMask();
+ m_pImageLoader->m_MatteColor = pCache->m_pCurImageCache->m_MatteColor;
+ }
+ } else {
+ ret = pImage->m_pImage->StartLoadDIBSource(pRenderStatus->m_pFormResource,
+ pRenderStatus->m_pPageResource,
+ bStdCS, GroupFamily, bLoadMask);
+ if (ret == FALSE) {
+ m_pImageLoader->m_bCached = FALSE;
+ m_pImageLoader->m_pBitmap = m_pImage->m_pImage->DetachBitmap();
+ m_pImageLoader->m_pMask = m_pImage->m_pImage->DetachMask();
+ m_pImageLoader->m_MatteColor = m_pImage->m_pImage->m_MatteColor;
+ }
+ }
+ return ret;
}
-FX_BOOL CPDF_ProgressiveImageLoaderHandle::Start(CPDF_ImageLoader* pImageLoader, const CPDF_ImageObject* pImage, CPDF_PageRenderCache* pCache, FX_BOOL bStdCS, FX_DWORD GroupFamily, FX_BOOL bLoadMask, CPDF_RenderStatus* pRenderStatus, int32_t nDownsampleWidth, int32_t nDownsampleHeight)
-{
- m_pImageLoader = pImageLoader;
- m_pCache = pCache;
- m_pImage = (CPDF_ImageObject*)pImage;
- m_nDownsampleWidth = nDownsampleWidth;
- m_nDownsampleHeight = nDownsampleHeight;
- FX_BOOL ret;
- if (pCache) {
- ret = pCache->StartGetCachedBitmap(pImage->m_pImage->GetStream(), bStdCS, GroupFamily, bLoadMask, pRenderStatus, m_nDownsampleWidth, m_nDownsampleHeight);
- if (ret == FALSE) {
- m_pImageLoader->m_bCached = TRUE;
- m_pImageLoader->m_pBitmap = pCache->m_pCurImageCache->DetachBitmap();
- m_pImageLoader->m_pMask = pCache->m_pCurImageCache->DetachMask();
- m_pImageLoader->m_MatteColor = pCache->m_pCurImageCache->m_MatteColor;
- }
- } else {
- ret = pImage->m_pImage->StartLoadDIBSource(pRenderStatus->m_pFormResource, pRenderStatus->m_pPageResource, bStdCS, GroupFamily, bLoadMask);
- if (ret == FALSE) {
- m_pImageLoader->m_bCached = FALSE;
- m_pImageLoader->m_pBitmap = m_pImage->m_pImage->DetachBitmap();
- m_pImageLoader->m_pMask = m_pImage->m_pImage->DetachMask();
- m_pImageLoader->m_MatteColor = m_pImage->m_pImage->m_MatteColor;
- }
- }
- return ret;
+FX_BOOL CPDF_ProgressiveImageLoaderHandle::Continue(IFX_Pause* pPause) {
+ FX_BOOL ret;
+ if (m_pCache) {
+ ret = m_pCache->Continue(pPause);
+ if (ret == FALSE) {
+ m_pImageLoader->m_bCached = TRUE;
+ m_pImageLoader->m_pBitmap = m_pCache->m_pCurImageCache->DetachBitmap();
+ m_pImageLoader->m_pMask = m_pCache->m_pCurImageCache->DetachMask();
+ m_pImageLoader->m_MatteColor = m_pCache->m_pCurImageCache->m_MatteColor;
+ }
+ } else {
+ ret = m_pImage->m_pImage->Continue(pPause);
+ if (ret == FALSE) {
+ m_pImageLoader->m_bCached = FALSE;
+ m_pImageLoader->m_pBitmap = m_pImage->m_pImage->DetachBitmap();
+ m_pImageLoader->m_pMask = m_pImage->m_pImage->DetachMask();
+ m_pImageLoader->m_MatteColor = m_pImage->m_pImage->m_MatteColor;
+ }
+ }
+ return ret;
}
-FX_BOOL CPDF_ProgressiveImageLoaderHandle::Continue(IFX_Pause* pPause)
-{
- FX_BOOL ret;
- if (m_pCache) {
- ret = m_pCache->Continue(pPause);
- if (ret == FALSE) {
- m_pImageLoader->m_bCached = TRUE;
- m_pImageLoader->m_pBitmap = m_pCache->m_pCurImageCache->DetachBitmap();
- m_pImageLoader->m_pMask = m_pCache->m_pCurImageCache->DetachMask();
- m_pImageLoader->m_MatteColor = m_pCache->m_pCurImageCache->m_MatteColor;
- }
- } else {
- ret = m_pImage->m_pImage->Continue(pPause);
- if (ret == FALSE) {
- m_pImageLoader->m_bCached = FALSE;
- m_pImageLoader->m_pBitmap = m_pImage->m_pImage->DetachBitmap();
- m_pImageLoader->m_pMask = m_pImage->m_pImage->DetachMask();
- m_pImageLoader->m_MatteColor = m_pImage->m_pImage->m_MatteColor;
- }
- }
- return ret;
-}
-FX_BOOL CPDF_ImageLoader::Load(const CPDF_ImageObject* pImage, CPDF_PageRenderCache* pCache, FX_BOOL bStdCS, FX_DWORD GroupFamily, FX_BOOL bLoadMask, CPDF_RenderStatus* pRenderStatus)
-{
- if (pImage == NULL) {
- return FALSE;
- }
- if (pCache) {
- pCache->GetCachedBitmap(pImage->m_pImage->GetStream(), m_pBitmap, m_pMask, m_MatteColor, bStdCS, GroupFamily, bLoadMask, pRenderStatus, m_nDownsampleWidth, m_nDownsampleHeight);
- m_bCached = TRUE;
- } else {
- m_pBitmap = pImage->m_pImage->LoadDIBSource(&m_pMask, &m_MatteColor, bStdCS, GroupFamily, bLoadMask);
- m_bCached = FALSE;
- }
+FX_BOOL CPDF_ImageLoader::Load(const CPDF_ImageObject* pImage,
+ CPDF_PageRenderCache* pCache,
+ FX_BOOL bStdCS,
+ FX_DWORD GroupFamily,
+ FX_BOOL bLoadMask,
+ CPDF_RenderStatus* pRenderStatus) {
+ if (pImage == NULL) {
return FALSE;
+ }
+ if (pCache) {
+ pCache->GetCachedBitmap(pImage->m_pImage->GetStream(), m_pBitmap, m_pMask,
+ m_MatteColor, bStdCS, GroupFamily, bLoadMask,
+ pRenderStatus, m_nDownsampleWidth,
+ m_nDownsampleHeight);
+ m_bCached = TRUE;
+ } else {
+ m_pBitmap = pImage->m_pImage->LoadDIBSource(&m_pMask, &m_MatteColor, bStdCS,
+ GroupFamily, bLoadMask);
+ m_bCached = FALSE;
+ }
+ return FALSE;
}
-FX_BOOL CPDF_ImageLoader::StartLoadImage(const CPDF_ImageObject* pImage, CPDF_PageRenderCache* pCache, void*& LoadHandle, FX_BOOL bStdCS, FX_DWORD GroupFamily, FX_BOOL bLoadMask, CPDF_RenderStatus* pRenderStatus, int32_t nDownsampleWidth, int32_t nDownsampleHeight)
-{
- m_nDownsampleWidth = nDownsampleWidth;
- m_nDownsampleHeight = nDownsampleHeight;
- CPDF_ProgressiveImageLoaderHandle* pLoaderHandle = new CPDF_ProgressiveImageLoaderHandle;
- FX_BOOL ret = pLoaderHandle->Start(this, pImage, pCache, bStdCS, GroupFamily, bLoadMask, pRenderStatus, m_nDownsampleWidth, m_nDownsampleHeight);
- LoadHandle = pLoaderHandle;
- return ret;
+FX_BOOL CPDF_ImageLoader::StartLoadImage(const CPDF_ImageObject* pImage,
+ CPDF_PageRenderCache* pCache,
+ void*& LoadHandle,
+ FX_BOOL bStdCS,
+ FX_DWORD GroupFamily,
+ FX_BOOL bLoadMask,
+ CPDF_RenderStatus* pRenderStatus,
+ int32_t nDownsampleWidth,
+ int32_t nDownsampleHeight) {
+ m_nDownsampleWidth = nDownsampleWidth;
+ m_nDownsampleHeight = nDownsampleHeight;
+ CPDF_ProgressiveImageLoaderHandle* pLoaderHandle =
+ new CPDF_ProgressiveImageLoaderHandle;
+ FX_BOOL ret = pLoaderHandle->Start(this, pImage, pCache, bStdCS, GroupFamily,
+ bLoadMask, pRenderStatus,
+ m_nDownsampleWidth, m_nDownsampleHeight);
+ LoadHandle = pLoaderHandle;
+ return ret;
}
-FX_BOOL CPDF_ImageLoader::Continue(void* LoadHandle, IFX_Pause* pPause)
-{
- return ((CPDF_ProgressiveImageLoaderHandle*)LoadHandle)->Continue(pPause);
+FX_BOOL CPDF_ImageLoader::Continue(void* LoadHandle, IFX_Pause* pPause) {
+ return ((CPDF_ProgressiveImageLoaderHandle*)LoadHandle)->Continue(pPause);
}
-CPDF_ImageLoader::~CPDF_ImageLoader()
-{
- if (!m_bCached) {
- delete m_pBitmap;
- delete m_pMask;
- }
+CPDF_ImageLoader::~CPDF_ImageLoader() {
+ if (!m_bCached) {
+ delete m_pBitmap;
+ delete m_pMask;
+ }
}
diff --git a/core/src/fpdfapi/fpdf_render/fpdf_render_pattern.cpp b/core/src/fpdfapi/fpdf_render/fpdf_render_pattern.cpp
index 3ee2222d8b..b64002c13e 100644
--- a/core/src/fpdfapi/fpdf_render/fpdf_render_pattern.cpp
+++ b/core/src/fpdfapi/fpdf_render/fpdf_render_pattern.cpp
@@ -10,1101 +10,1212 @@
#include "../fpdf_page/pageint.h"
#include "render_int.h"
#define SHADING_STEPS 256
-static void _DrawAxialShading(CFX_DIBitmap* pBitmap, CFX_AffineMatrix* pObject2Bitmap,
- CPDF_Dictionary* pDict, CPDF_Function** pFuncs, int nFuncs,
- CPDF_ColorSpace* pCS, int alpha)
-{
- ASSERT(pBitmap->GetFormat() == FXDIB_Argb);
- CPDF_Array* pCoords = pDict->GetArray(FX_BSTRC("Coords"));
- if (pCoords == NULL) {
- return;
- }
- FX_FLOAT start_x = pCoords->GetNumber(0);
- FX_FLOAT start_y = pCoords->GetNumber(1);
- FX_FLOAT end_x = pCoords->GetNumber(2);
- FX_FLOAT end_y = pCoords->GetNumber(3);
- FX_FLOAT t_min = 0, t_max = 1.0f;
- CPDF_Array* pArray = pDict->GetArray(FX_BSTRC("Domain"));
- if (pArray) {
- t_min = pArray->GetNumber(0);
- t_max = pArray->GetNumber(1);
- }
- FX_BOOL bStartExtend = FALSE, bEndExtend = FALSE;
- pArray = pDict->GetArray(FX_BSTRC("Extend"));
- if (pArray) {
- bStartExtend = pArray->GetInteger(0);
- bEndExtend = pArray->GetInteger(1);
- }
- int width = pBitmap->GetWidth();
- int height = pBitmap->GetHeight();
- FX_FLOAT x_span = end_x - start_x;
- FX_FLOAT y_span = end_y - start_y;
- FX_FLOAT axis_len_square = FXSYS_Mul(x_span, x_span) + FXSYS_Mul(y_span, y_span);
- CFX_AffineMatrix matrix;
- matrix.SetReverse(*pObject2Bitmap);
- int total_results = 0;
- for (int j = 0; j < nFuncs; j ++) {
- if (pFuncs[j]) {
- total_results += pFuncs[j]->CountOutputs();
+static void _DrawAxialShading(CFX_DIBitmap* pBitmap,
+ CFX_AffineMatrix* pObject2Bitmap,
+ CPDF_Dictionary* pDict,
+ CPDF_Function** pFuncs,
+ int nFuncs,
+ CPDF_ColorSpace* pCS,
+ int alpha) {
+ ASSERT(pBitmap->GetFormat() == FXDIB_Argb);
+ CPDF_Array* pCoords = pDict->GetArray(FX_BSTRC("Coords"));
+ if (pCoords == NULL) {
+ return;
+ }
+ FX_FLOAT start_x = pCoords->GetNumber(0);
+ FX_FLOAT start_y = pCoords->GetNumber(1);
+ FX_FLOAT end_x = pCoords->GetNumber(2);
+ FX_FLOAT end_y = pCoords->GetNumber(3);
+ FX_FLOAT t_min = 0, t_max = 1.0f;
+ CPDF_Array* pArray = pDict->GetArray(FX_BSTRC("Domain"));
+ if (pArray) {
+ t_min = pArray->GetNumber(0);
+ t_max = pArray->GetNumber(1);
+ }
+ FX_BOOL bStartExtend = FALSE, bEndExtend = FALSE;
+ pArray = pDict->GetArray(FX_BSTRC("Extend"));
+ if (pArray) {
+ bStartExtend = pArray->GetInteger(0);
+ bEndExtend = pArray->GetInteger(1);
+ }
+ int width = pBitmap->GetWidth();
+ int height = pBitmap->GetHeight();
+ FX_FLOAT x_span = end_x - start_x;
+ FX_FLOAT y_span = end_y - start_y;
+ FX_FLOAT axis_len_square =
+ FXSYS_Mul(x_span, x_span) + FXSYS_Mul(y_span, y_span);
+ CFX_AffineMatrix matrix;
+ matrix.SetReverse(*pObject2Bitmap);
+ int total_results = 0;
+ for (int j = 0; j < nFuncs; j++) {
+ if (pFuncs[j]) {
+ total_results += pFuncs[j]->CountOutputs();
+ }
+ }
+ if (pCS->CountComponents() > total_results) {
+ total_results = pCS->CountComponents();
+ }
+ CFX_FixedBufGrow<FX_FLOAT, 16> result_array(total_results);
+ FX_FLOAT* pResults = result_array;
+ FXSYS_memset(pResults, 0, total_results * sizeof(FX_FLOAT));
+ FX_DWORD rgb_array[SHADING_STEPS];
+ for (int i = 0; i < SHADING_STEPS; i++) {
+ FX_FLOAT input = (t_max - t_min) * i / SHADING_STEPS + t_min;
+ int offset = 0;
+ for (int j = 0; j < nFuncs; j++) {
+ if (pFuncs[j]) {
+ int nresults = 0;
+ if (pFuncs[j]->Call(&input, 1, pResults + offset, nresults)) {
+ offset += nresults;
}
- }
- if (pCS->CountComponents() > total_results) {
- total_results = pCS->CountComponents();
- }
- CFX_FixedBufGrow<FX_FLOAT, 16> result_array(total_results);
- FX_FLOAT* pResults = result_array;
- FXSYS_memset(pResults, 0, total_results * sizeof(FX_FLOAT));
- FX_DWORD rgb_array[SHADING_STEPS];
- for (int i = 0; i < SHADING_STEPS; i ++) {
- FX_FLOAT input = (t_max - t_min) * i / SHADING_STEPS + t_min;
- int offset = 0;
- for (int j = 0; j < nFuncs; j ++) {
- if (pFuncs[j]) {
- int nresults = 0;
- if (pFuncs[j]->Call(&input, 1, pResults + offset, nresults)) {
- offset += nresults;
- }
- }
+ }
+ }
+ FX_FLOAT R = 0.0f, G = 0.0f, B = 0.0f;
+ pCS->GetRGB(pResults, R, G, B);
+ rgb_array[i] =
+ FXARGB_TODIB(FXARGB_MAKE(alpha, FXSYS_round(R * 255),
+ FXSYS_round(G * 255), FXSYS_round(B * 255)));
+ }
+ int pitch = pBitmap->GetPitch();
+ for (int row = 0; row < height; row++) {
+ FX_DWORD* dib_buf = (FX_DWORD*)(pBitmap->GetBuffer() + row * pitch);
+ for (int column = 0; column < width; column++) {
+ FX_FLOAT x = (FX_FLOAT)column, y = (FX_FLOAT)row;
+ matrix.Transform(x, y);
+ FX_FLOAT scale = FXSYS_Div(
+ FXSYS_Mul(x - start_x, x_span) + FXSYS_Mul(y - start_y, y_span),
+ axis_len_square);
+ int index = (int32_t)(scale * (SHADING_STEPS - 1));
+ if (index < 0) {
+ if (!bStartExtend) {
+ continue;
}
- FX_FLOAT R = 0.0f, G = 0.0f, B = 0.0f;
- pCS->GetRGB(pResults, R, G, B);
- rgb_array[i] = FXARGB_TODIB(FXARGB_MAKE(alpha, FXSYS_round(R * 255), FXSYS_round(G * 255), FXSYS_round(B * 255)));
- }
- int pitch = pBitmap->GetPitch();
- for (int row = 0; row < height; row ++) {
- FX_DWORD* dib_buf = (FX_DWORD*)(pBitmap->GetBuffer() + row * pitch);
- for (int column = 0; column < width; column ++) {
- FX_FLOAT x = (FX_FLOAT)column, y = (FX_FLOAT)row;
- matrix.Transform(x, y);
- FX_FLOAT scale = FXSYS_Div(FXSYS_Mul(x - start_x, x_span) + FXSYS_Mul(y - start_y, y_span), axis_len_square);
- int index = (int32_t)(scale * (SHADING_STEPS - 1));
- if (index < 0) {
- if (!bStartExtend) {
- continue;
- }
- index = 0;
- } else if (index >= SHADING_STEPS) {
- if (!bEndExtend) {
- continue;
- }
- index = SHADING_STEPS - 1;
- }
- dib_buf[column] = rgb_array[index];
+ index = 0;
+ } else if (index >= SHADING_STEPS) {
+ if (!bEndExtend) {
+ continue;
}
+ index = SHADING_STEPS - 1;
+ }
+ dib_buf[column] = rgb_array[index];
}
+ }
}
-static void _DrawRadialShading(CFX_DIBitmap* pBitmap, CFX_AffineMatrix* pObject2Bitmap,
- CPDF_Dictionary* pDict, CPDF_Function** pFuncs, int nFuncs,
- CPDF_ColorSpace* pCS, int alpha)
-{
- ASSERT(pBitmap->GetFormat() == FXDIB_Argb);
- CPDF_Array* pCoords = pDict->GetArray(FX_BSTRC("Coords"));
- if (pCoords == NULL) {
- return;
- }
- FX_FLOAT start_x = pCoords->GetNumber(0);
- FX_FLOAT start_y = pCoords->GetNumber(1);
- FX_FLOAT start_r = pCoords->GetNumber(2);
- FX_FLOAT end_x = pCoords->GetNumber(3);
- FX_FLOAT end_y = pCoords->GetNumber(4);
- FX_FLOAT end_r = pCoords->GetNumber(5);
- CFX_AffineMatrix matrix;
- matrix.SetReverse(*pObject2Bitmap);
- FX_FLOAT t_min = 0, t_max = 1.0f;
- CPDF_Array* pArray = pDict->GetArray(FX_BSTRC("Domain"));
- if (pArray) {
- t_min = pArray->GetNumber(0);
- t_max = pArray->GetNumber(1);
- }
- FX_BOOL bStartExtend = FALSE, bEndExtend = FALSE;
- pArray = pDict->GetArray(FX_BSTRC("Extend"));
- if (pArray) {
- bStartExtend = pArray->GetInteger(0);
- bEndExtend = pArray->GetInteger(1);
- }
- int total_results = 0;
- for (int j = 0; j < nFuncs; j ++) {
- if (pFuncs[j]) {
- total_results += pFuncs[j]->CountOutputs();
+static void _DrawRadialShading(CFX_DIBitmap* pBitmap,
+ CFX_AffineMatrix* pObject2Bitmap,
+ CPDF_Dictionary* pDict,
+ CPDF_Function** pFuncs,
+ int nFuncs,
+ CPDF_ColorSpace* pCS,
+ int alpha) {
+ ASSERT(pBitmap->GetFormat() == FXDIB_Argb);
+ CPDF_Array* pCoords = pDict->GetArray(FX_BSTRC("Coords"));
+ if (pCoords == NULL) {
+ return;
+ }
+ FX_FLOAT start_x = pCoords->GetNumber(0);
+ FX_FLOAT start_y = pCoords->GetNumber(1);
+ FX_FLOAT start_r = pCoords->GetNumber(2);
+ FX_FLOAT end_x = pCoords->GetNumber(3);
+ FX_FLOAT end_y = pCoords->GetNumber(4);
+ FX_FLOAT end_r = pCoords->GetNumber(5);
+ CFX_AffineMatrix matrix;
+ matrix.SetReverse(*pObject2Bitmap);
+ FX_FLOAT t_min = 0, t_max = 1.0f;
+ CPDF_Array* pArray = pDict->GetArray(FX_BSTRC("Domain"));
+ if (pArray) {
+ t_min = pArray->GetNumber(0);
+ t_max = pArray->GetNumber(1);
+ }
+ FX_BOOL bStartExtend = FALSE, bEndExtend = FALSE;
+ pArray = pDict->GetArray(FX_BSTRC("Extend"));
+ if (pArray) {
+ bStartExtend = pArray->GetInteger(0);
+ bEndExtend = pArray->GetInteger(1);
+ }
+ int total_results = 0;
+ for (int j = 0; j < nFuncs; j++) {
+ if (pFuncs[j]) {
+ total_results += pFuncs[j]->CountOutputs();
+ }
+ }
+ if (pCS->CountComponents() > total_results) {
+ total_results = pCS->CountComponents();
+ }
+ CFX_FixedBufGrow<FX_FLOAT, 16> result_array(total_results);
+ FX_FLOAT* pResults = result_array;
+ FXSYS_memset(pResults, 0, total_results * sizeof(FX_FLOAT));
+ FX_DWORD rgb_array[SHADING_STEPS];
+ for (int i = 0; i < SHADING_STEPS; i++) {
+ FX_FLOAT input = (t_max - t_min) * i / SHADING_STEPS + t_min;
+ int offset = 0;
+ for (int j = 0; j < nFuncs; j++) {
+ if (pFuncs[j]) {
+ int nresults;
+ if (pFuncs[j]->Call(&input, 1, pResults + offset, nresults)) {
+ offset += nresults;
}
- }
- if (pCS->CountComponents() > total_results) {
- total_results = pCS->CountComponents();
- }
- CFX_FixedBufGrow<FX_FLOAT, 16> result_array(total_results);
- FX_FLOAT* pResults = result_array;
- FXSYS_memset(pResults, 0, total_results * sizeof(FX_FLOAT));
- FX_DWORD rgb_array[SHADING_STEPS];
- for (int i = 0; i < SHADING_STEPS; i ++) {
- FX_FLOAT input = (t_max - t_min) * i / SHADING_STEPS + t_min;
- int offset = 0;
- for (int j = 0; j < nFuncs; j ++) {
- if (pFuncs[j]) {
- int nresults;
- if (pFuncs[j]->Call(&input, 1, pResults + offset, nresults)) {
- offset += nresults;
- }
- }
- }
- FX_FLOAT R = 0.0f, G = 0.0f, B = 0.0f;
- pCS->GetRGB(pResults, R, G, B);
- rgb_array[i] = FXARGB_TODIB(FXARGB_MAKE(alpha, FXSYS_round(R * 255), FXSYS_round(G * 255), FXSYS_round(B * 255)));
- }
- FX_FLOAT a = FXSYS_Mul(start_x - end_x, start_x - end_x) +
- FXSYS_Mul(start_y - end_y, start_y - end_y) - FXSYS_Mul(start_r - end_r, start_r - end_r);
- int width = pBitmap->GetWidth();
- int height = pBitmap->GetHeight();
- int pitch = pBitmap->GetPitch();
- FX_BOOL bDecreasing = FALSE;
- if (start_r > end_r) {
- int length = (int)FXSYS_sqrt((FXSYS_Mul(start_x - end_x, start_x - end_x) + FXSYS_Mul(start_y - end_y, start_y - end_y)));
- if (length < start_r - end_r) {
- bDecreasing = TRUE;
+ }
+ }
+ FX_FLOAT R = 0.0f, G = 0.0f, B = 0.0f;
+ pCS->GetRGB(pResults, R, G, B);
+ rgb_array[i] =
+ FXARGB_TODIB(FXARGB_MAKE(alpha, FXSYS_round(R * 255),
+ FXSYS_round(G * 255), FXSYS_round(B * 255)));
+ }
+ FX_FLOAT a = FXSYS_Mul(start_x - end_x, start_x - end_x) +
+ FXSYS_Mul(start_y - end_y, start_y - end_y) -
+ FXSYS_Mul(start_r - end_r, start_r - end_r);
+ int width = pBitmap->GetWidth();
+ int height = pBitmap->GetHeight();
+ int pitch = pBitmap->GetPitch();
+ FX_BOOL bDecreasing = FALSE;
+ if (start_r > end_r) {
+ int length = (int)FXSYS_sqrt((FXSYS_Mul(start_x - end_x, start_x - end_x) +
+ FXSYS_Mul(start_y - end_y, start_y - end_y)));
+ if (length < start_r - end_r) {
+ bDecreasing = TRUE;
+ }
+ }
+ for (int row = 0; row < height; row++) {
+ FX_DWORD* dib_buf = (FX_DWORD*)(pBitmap->GetBuffer() + row * pitch);
+ for (int column = 0; column < width; column++) {
+ FX_FLOAT x = (FX_FLOAT)column, y = (FX_FLOAT)row;
+ matrix.Transform(x, y);
+ FX_FLOAT b = -2 * (FXSYS_Mul(x - start_x, end_x - start_x) +
+ FXSYS_Mul(y - start_y, end_y - start_y) +
+ FXSYS_Mul(start_r, end_r - start_r));
+ FX_FLOAT c = FXSYS_Mul(x - start_x, x - start_x) +
+ FXSYS_Mul(y - start_y, y - start_y) -
+ FXSYS_Mul(start_r, start_r);
+ FX_FLOAT s;
+ if (a == 0) {
+ s = FXSYS_Div(-c, b);
+ } else {
+ FX_FLOAT b2_4ac = FXSYS_Mul(b, b) - 4 * FXSYS_Mul(a, c);
+ if (b2_4ac < 0) {
+ continue;
}
- }
- for (int row = 0; row < height; row ++) {
- FX_DWORD* dib_buf = (FX_DWORD*)(pBitmap->GetBuffer() + row * pitch);
- for (int column = 0; column < width; column ++) {
- FX_FLOAT x = (FX_FLOAT)column, y = (FX_FLOAT)row;
- matrix.Transform(x, y);
- FX_FLOAT b = -2 * (FXSYS_Mul(x - start_x, end_x - start_x) + FXSYS_Mul(y - start_y, end_y - start_y) +
- FXSYS_Mul(start_r, end_r - start_r));
- FX_FLOAT c = FXSYS_Mul(x - start_x, x - start_x) + FXSYS_Mul(y - start_y, y - start_y) -
- FXSYS_Mul(start_r, start_r);
- FX_FLOAT s;
- if (a == 0) {
- s = FXSYS_Div(-c, b);
- } else {
- FX_FLOAT b2_4ac = FXSYS_Mul(b, b) - 4 * FXSYS_Mul(a, c);
- if (b2_4ac < 0) {
- continue;
- }
- FX_FLOAT root = FXSYS_sqrt(b2_4ac);
- FX_FLOAT s1, s2;
- if (a > 0) {
- s1 = FXSYS_Div(-b - root, 2 * a);
- s2 = FXSYS_Div(-b + root, 2 * a);
- } else {
- s2 = FXSYS_Div(-b - root, 2 * a);
- s1 = FXSYS_Div(-b + root, 2 * a);
- }
- if (bDecreasing) {
- if (s1 >= 0 || bStartExtend) {
- s = s1;
- } else {
- s = s2;
- }
- } else {
- if (s2 <= 1.0f || bEndExtend) {
- s = s2;
- } else {
- s = s1;
- }
- }
- if ((start_r + s * (end_r - start_r)) < 0) {
- continue;
- }
- }
- int index = (int32_t)(s * (SHADING_STEPS - 1));
- if (index < 0) {
- if (!bStartExtend) {
- continue;
- }
- index = 0;
- }
- if (index >= SHADING_STEPS) {
- if (!bEndExtend) {
- continue;
- }
- index = SHADING_STEPS - 1;
- }
- dib_buf[column] = rgb_array[index];
+ FX_FLOAT root = FXSYS_sqrt(b2_4ac);
+ FX_FLOAT s1, s2;
+ if (a > 0) {
+ s1 = FXSYS_Div(-b - root, 2 * a);
+ s2 = FXSYS_Div(-b + root, 2 * a);
+ } else {
+ s2 = FXSYS_Div(-b - root, 2 * a);
+ s1 = FXSYS_Div(-b + root, 2 * a);
}
- }
-}
-static void _DrawFuncShading(CFX_DIBitmap* pBitmap, CFX_AffineMatrix* pObject2Bitmap,
- CPDF_Dictionary* pDict, CPDF_Function** pFuncs, int nFuncs,
- CPDF_ColorSpace* pCS, int alpha)
-{
- ASSERT(pBitmap->GetFormat() == FXDIB_Argb);
- CPDF_Array* pDomain = pDict->GetArray(FX_BSTRC("Domain"));
- FX_FLOAT xmin = 0, ymin = 0, xmax = 1.0f, ymax = 1.0f;
- if (pDomain) {
- xmin = pDomain->GetNumber(0);
- xmax = pDomain->GetNumber(1);
- ymin = pDomain->GetNumber(2);
- ymax = pDomain->GetNumber(3);
- }
- CFX_AffineMatrix mtDomain2Target = pDict->GetMatrix(FX_BSTRC("Matrix"));
- CFX_AffineMatrix matrix, reverse_matrix;
- matrix.SetReverse(*pObject2Bitmap);
- reverse_matrix.SetReverse(mtDomain2Target);
- matrix.Concat(reverse_matrix);
- int width = pBitmap->GetWidth();
- int height = pBitmap->GetHeight();
- int pitch = pBitmap->GetPitch();
- int total_results = 0;
- for (int j = 0; j < nFuncs; j ++) {
- if (pFuncs[j]) {
- total_results += pFuncs[j]->CountOutputs();
+ if (bDecreasing) {
+ if (s1 >= 0 || bStartExtend) {
+ s = s1;
+ } else {
+ s = s2;
+ }
+ } else {
+ if (s2 <= 1.0f || bEndExtend) {
+ s = s2;
+ } else {
+ s = s1;
+ }
}
- }
- if (pCS->CountComponents() > total_results) {
- total_results = pCS->CountComponents();
- }
- CFX_FixedBufGrow<FX_FLOAT, 16> result_array(total_results);
- FX_FLOAT* pResults = result_array;
- FXSYS_memset(pResults, 0, total_results * sizeof(FX_FLOAT));
- for (int row = 0; row < height; row ++) {
- FX_DWORD* dib_buf = (FX_DWORD*)(pBitmap->GetBuffer() + row * pitch);
- for (int column = 0; column < width; column ++) {
- FX_FLOAT x = (FX_FLOAT)column, y = (FX_FLOAT)row;
- matrix.Transform(x, y);
- if (x < xmin || x > xmax || y < ymin || y > ymax) {
- continue;
- }
- FX_FLOAT input[2];
- int offset = 0;
- input[0] = x;
- input[1] = y;
- for (int j = 0; j < nFuncs; j ++) {
- if (pFuncs[j]) {
- int nresults;
- if (pFuncs[j]->Call(input, 2, pResults + offset, nresults)) {
- offset += nresults;
- }
- }
- }
- FX_FLOAT R = 0.0f, G = 0.0f, B = 0.0f;
- pCS->GetRGB(pResults, R, G, B);
- dib_buf[column] = FXARGB_TODIB(FXARGB_MAKE(alpha, (int32_t)(R * 255), (int32_t)(G * 255), (int32_t)(B * 255)));
+ if ((start_r + s * (end_r - start_r)) < 0) {
+ continue;
}
- }
-}
-FX_BOOL _GetScanlineIntersect(int y, FX_FLOAT x1, FX_FLOAT y1, FX_FLOAT x2, FX_FLOAT y2, FX_FLOAT& x)
-{
- if (y1 == y2) {
- return FALSE;
- }
- if (y1 < y2) {
- if (y < y1 || y > y2) {
- return FALSE;
+ }
+ int index = (int32_t)(s * (SHADING_STEPS - 1));
+ if (index < 0) {
+ if (!bStartExtend) {
+ continue;
}
- } else {
- if (y < y2 || y > y1) {
- return FALSE;
+ index = 0;
+ }
+ if (index >= SHADING_STEPS) {
+ if (!bEndExtend) {
+ continue;
}
+ index = SHADING_STEPS - 1;
+ }
+ dib_buf[column] = rgb_array[index];
}
- x = x1 + FXSYS_MulDiv(x2 - x1, y - y1, y2 - y1);
- return TRUE;
+ }
}
-static void _DrawGouraud(CFX_DIBitmap* pBitmap, int alpha, CPDF_MeshVertex triangle[3])
-{
- FX_FLOAT min_y = triangle[0].y, max_y = triangle[0].y;
- for (int i = 1; i < 3; i ++) {
- if (min_y > triangle[i].y) {
- min_y = triangle[i].y;
- }
- if (max_y < triangle[i].y) {
- max_y = triangle[i].y;
- }
- }
- if (min_y == max_y) {
- return;
- }
- int min_yi = (int)FXSYS_floor(min_y), max_yi = (int)FXSYS_ceil(max_y);
- if (min_yi < 0) {
- min_yi = 0;
- }
- if (max_yi >= pBitmap->GetHeight()) {
- max_yi = pBitmap->GetHeight() - 1;
- }
- for (int y = min_yi; y <= max_yi; y ++) {
- int nIntersects = 0;
- FX_FLOAT inter_x[3], r[3], g[3], b[3];
- for (int i = 0; i < 3; i ++) {
- CPDF_MeshVertex& vertex1 = triangle[i];
- CPDF_MeshVertex& vertex2 = triangle[(i + 1) % 3];
- FX_BOOL bIntersect = _GetScanlineIntersect(y, vertex1.x, vertex1.y,
- vertex2.x, vertex2.y, inter_x[nIntersects]);
- if (!bIntersect) {
- continue;
- }
- r[nIntersects] = vertex1.r + FXSYS_MulDiv(vertex2.r - vertex1.r, y - vertex1.y, vertex2.y - vertex1.y);
- g[nIntersects] = vertex1.g + FXSYS_MulDiv(vertex2.g - vertex1.g, y - vertex1.y, vertex2.y - vertex1.y);
- b[nIntersects] = vertex1.b + FXSYS_MulDiv(vertex2.b - vertex1.b, y - vertex1.y, vertex2.y - vertex1.y);
- nIntersects ++;
- }
- if (nIntersects != 2) {
- continue;
- }
- int min_x, max_x, start_index, end_index;
- if (inter_x[0] < inter_x[1]) {
- min_x = (int)FXSYS_floor(inter_x[0]);
- max_x = (int)FXSYS_ceil(inter_x[1]);
- start_index = 0;
- end_index = 1;
- } else {
- min_x = (int)FXSYS_floor(inter_x[1]);
- max_x = (int)FXSYS_ceil(inter_x[0]);
- start_index = 1;
- end_index = 0;
- }
- int start_x = min_x, end_x = max_x;
- if (start_x < 0) {
- start_x = 0;
- }
- if (end_x > pBitmap->GetWidth()) {
- end_x = pBitmap->GetWidth();
- }
- uint8_t* dib_buf = pBitmap->GetBuffer() + y * pBitmap->GetPitch() + start_x * 4;
- FX_FLOAT r_unit = (r[end_index] - r[start_index]) / (max_x - min_x);
- FX_FLOAT g_unit = (g[end_index] - g[start_index]) / (max_x - min_x);
- FX_FLOAT b_unit = (b[end_index] - b[start_index]) / (max_x - min_x);
- FX_FLOAT R = r[start_index] + (start_x - min_x) * r_unit;
- FX_FLOAT G = g[start_index] + (start_x - min_x) * g_unit;
- FX_FLOAT B = b[start_index] + (start_x - min_x) * b_unit;
- for (int x = start_x; x < end_x; x ++) {
- R += r_unit;
- G += g_unit;
- B += b_unit;
- FXARGB_SETDIB(dib_buf, FXARGB_MAKE(alpha, (int32_t)(R * 255), (int32_t)(G * 255), (int32_t)(B * 255)));
- dib_buf += 4;
+static void _DrawFuncShading(CFX_DIBitmap* pBitmap,
+ CFX_AffineMatrix* pObject2Bitmap,
+ CPDF_Dictionary* pDict,
+ CPDF_Function** pFuncs,
+ int nFuncs,
+ CPDF_ColorSpace* pCS,
+ int alpha) {
+ ASSERT(pBitmap->GetFormat() == FXDIB_Argb);
+ CPDF_Array* pDomain = pDict->GetArray(FX_BSTRC("Domain"));
+ FX_FLOAT xmin = 0, ymin = 0, xmax = 1.0f, ymax = 1.0f;
+ if (pDomain) {
+ xmin = pDomain->GetNumber(0);
+ xmax = pDomain->GetNumber(1);
+ ymin = pDomain->GetNumber(2);
+ ymax = pDomain->GetNumber(3);
+ }
+ CFX_AffineMatrix mtDomain2Target = pDict->GetMatrix(FX_BSTRC("Matrix"));
+ CFX_AffineMatrix matrix, reverse_matrix;
+ matrix.SetReverse(*pObject2Bitmap);
+ reverse_matrix.SetReverse(mtDomain2Target);
+ matrix.Concat(reverse_matrix);
+ int width = pBitmap->GetWidth();
+ int height = pBitmap->GetHeight();
+ int pitch = pBitmap->GetPitch();
+ int total_results = 0;
+ for (int j = 0; j < nFuncs; j++) {
+ if (pFuncs[j]) {
+ total_results += pFuncs[j]->CountOutputs();
+ }
+ }
+ if (pCS->CountComponents() > total_results) {
+ total_results = pCS->CountComponents();
+ }
+ CFX_FixedBufGrow<FX_FLOAT, 16> result_array(total_results);
+ FX_FLOAT* pResults = result_array;
+ FXSYS_memset(pResults, 0, total_results * sizeof(FX_FLOAT));
+ for (int row = 0; row < height; row++) {
+ FX_DWORD* dib_buf = (FX_DWORD*)(pBitmap->GetBuffer() + row * pitch);
+ for (int column = 0; column < width; column++) {
+ FX_FLOAT x = (FX_FLOAT)column, y = (FX_FLOAT)row;
+ matrix.Transform(x, y);
+ if (x < xmin || x > xmax || y < ymin || y > ymax) {
+ continue;
+ }
+ FX_FLOAT input[2];
+ int offset = 0;
+ input[0] = x;
+ input[1] = y;
+ for (int j = 0; j < nFuncs; j++) {
+ if (pFuncs[j]) {
+ int nresults;
+ if (pFuncs[j]->Call(input, 2, pResults + offset, nresults)) {
+ offset += nresults;
+ }
}
+ }
+ FX_FLOAT R = 0.0f, G = 0.0f, B = 0.0f;
+ pCS->GetRGB(pResults, R, G, B);
+ dib_buf[column] = FXARGB_TODIB(FXARGB_MAKE(
+ alpha, (int32_t)(R * 255), (int32_t)(G * 255), (int32_t)(B * 255)));
}
+ }
}
-static void _DrawFreeGouraudShading(CFX_DIBitmap* pBitmap, CFX_AffineMatrix* pObject2Bitmap,
- CPDF_Stream* pShadingStream, CPDF_Function** pFuncs, int nFuncs,
- CPDF_ColorSpace* pCS, int alpha)
-{
- ASSERT(pBitmap->GetFormat() == FXDIB_Argb);
- if (pShadingStream->GetType() != PDFOBJ_STREAM) {
- return;
- }
- CPDF_MeshStream stream;
- if (!stream.Load(pShadingStream, pFuncs, nFuncs, pCS)) {
- return;
- }
- CPDF_MeshVertex triangle[3];
- FXSYS_memset(triangle, 0, sizeof(triangle));
+FX_BOOL _GetScanlineIntersect(int y,
+ FX_FLOAT x1,
+ FX_FLOAT y1,
+ FX_FLOAT x2,
+ FX_FLOAT y2,
+ FX_FLOAT& x) {
+ if (y1 == y2) {
+ return FALSE;
+ }
+ if (y1 < y2) {
+ if (y < y1 || y > y2) {
+ return FALSE;
+ }
+ } else {
+ if (y < y2 || y > y1) {
+ return FALSE;
+ }
+ }
+ x = x1 + FXSYS_MulDiv(x2 - x1, y - y1, y2 - y1);
+ return TRUE;
+}
+static void _DrawGouraud(CFX_DIBitmap* pBitmap,
+ int alpha,
+ CPDF_MeshVertex triangle[3]) {
+ FX_FLOAT min_y = triangle[0].y, max_y = triangle[0].y;
+ for (int i = 1; i < 3; i++) {
+ if (min_y > triangle[i].y) {
+ min_y = triangle[i].y;
+ }
+ if (max_y < triangle[i].y) {
+ max_y = triangle[i].y;
+ }
+ }
+ if (min_y == max_y) {
+ return;
+ }
+ int min_yi = (int)FXSYS_floor(min_y), max_yi = (int)FXSYS_ceil(max_y);
+ if (min_yi < 0) {
+ min_yi = 0;
+ }
+ if (max_yi >= pBitmap->GetHeight()) {
+ max_yi = pBitmap->GetHeight() - 1;
+ }
+ for (int y = min_yi; y <= max_yi; y++) {
+ int nIntersects = 0;
+ FX_FLOAT inter_x[3], r[3], g[3], b[3];
+ for (int i = 0; i < 3; i++) {
+ CPDF_MeshVertex& vertex1 = triangle[i];
+ CPDF_MeshVertex& vertex2 = triangle[(i + 1) % 3];
+ FX_BOOL bIntersect = _GetScanlineIntersect(
+ y, vertex1.x, vertex1.y, vertex2.x, vertex2.y, inter_x[nIntersects]);
+ if (!bIntersect) {
+ continue;
+ }
+ r[nIntersects] =
+ vertex1.r + FXSYS_MulDiv(vertex2.r - vertex1.r, y - vertex1.y,
+ vertex2.y - vertex1.y);
+ g[nIntersects] =
+ vertex1.g + FXSYS_MulDiv(vertex2.g - vertex1.g, y - vertex1.y,
+ vertex2.y - vertex1.y);
+ b[nIntersects] =
+ vertex1.b + FXSYS_MulDiv(vertex2.b - vertex1.b, y - vertex1.y,
+ vertex2.y - vertex1.y);
+ nIntersects++;
+ }
+ if (nIntersects != 2) {
+ continue;
+ }
+ int min_x, max_x, start_index, end_index;
+ if (inter_x[0] < inter_x[1]) {
+ min_x = (int)FXSYS_floor(inter_x[0]);
+ max_x = (int)FXSYS_ceil(inter_x[1]);
+ start_index = 0;
+ end_index = 1;
+ } else {
+ min_x = (int)FXSYS_floor(inter_x[1]);
+ max_x = (int)FXSYS_ceil(inter_x[0]);
+ start_index = 1;
+ end_index = 0;
+ }
+ int start_x = min_x, end_x = max_x;
+ if (start_x < 0) {
+ start_x = 0;
+ }
+ if (end_x > pBitmap->GetWidth()) {
+ end_x = pBitmap->GetWidth();
+ }
+ uint8_t* dib_buf =
+ pBitmap->GetBuffer() + y * pBitmap->GetPitch() + start_x * 4;
+ FX_FLOAT r_unit = (r[end_index] - r[start_index]) / (max_x - min_x);
+ FX_FLOAT g_unit = (g[end_index] - g[start_index]) / (max_x - min_x);
+ FX_FLOAT b_unit = (b[end_index] - b[start_index]) / (max_x - min_x);
+ FX_FLOAT R = r[start_index] + (start_x - min_x) * r_unit;
+ FX_FLOAT G = g[start_index] + (start_x - min_x) * g_unit;
+ FX_FLOAT B = b[start_index] + (start_x - min_x) * b_unit;
+ for (int x = start_x; x < end_x; x++) {
+ R += r_unit;
+ G += g_unit;
+ B += b_unit;
+ FXARGB_SETDIB(dib_buf,
+ FXARGB_MAKE(alpha, (int32_t)(R * 255), (int32_t)(G * 255),
+ (int32_t)(B * 255)));
+ dib_buf += 4;
+ }
+ }
+}
+static void _DrawFreeGouraudShading(CFX_DIBitmap* pBitmap,
+ CFX_AffineMatrix* pObject2Bitmap,
+ CPDF_Stream* pShadingStream,
+ CPDF_Function** pFuncs,
+ int nFuncs,
+ CPDF_ColorSpace* pCS,
+ int alpha) {
+ ASSERT(pBitmap->GetFormat() == FXDIB_Argb);
+ if (pShadingStream->GetType() != PDFOBJ_STREAM) {
+ return;
+ }
+ CPDF_MeshStream stream;
+ if (!stream.Load(pShadingStream, pFuncs, nFuncs, pCS)) {
+ return;
+ }
+ CPDF_MeshVertex triangle[3];
+ FXSYS_memset(triangle, 0, sizeof(triangle));
- while (!stream.m_BitStream.IsEOF()) {
- CPDF_MeshVertex vertex;
- FX_DWORD flag = stream.GetVertex(vertex, pObject2Bitmap);
- if (flag == 0) {
- triangle[0] = vertex;
- for (int j = 1; j < 3; j ++) {
- stream.GetVertex(triangle[j], pObject2Bitmap);
- }
- } else {
- if (flag == 1) {
- triangle[0] = triangle[1];
- }
- triangle[1] = triangle[2];
- triangle[2] = vertex;
- }
- _DrawGouraud(pBitmap, alpha, triangle);
- }
+ while (!stream.m_BitStream.IsEOF()) {
+ CPDF_MeshVertex vertex;
+ FX_DWORD flag = stream.GetVertex(vertex, pObject2Bitmap);
+ if (flag == 0) {
+ triangle[0] = vertex;
+ for (int j = 1; j < 3; j++) {
+ stream.GetVertex(triangle[j], pObject2Bitmap);
+ }
+ } else {
+ if (flag == 1) {
+ triangle[0] = triangle[1];
+ }
+ triangle[1] = triangle[2];
+ triangle[2] = vertex;
+ }
+ _DrawGouraud(pBitmap, alpha, triangle);
+ }
}
-static void _DrawLatticeGouraudShading(CFX_DIBitmap* pBitmap, CFX_AffineMatrix* pObject2Bitmap,
- CPDF_Stream* pShadingStream, CPDF_Function** pFuncs, int nFuncs,
- CPDF_ColorSpace* pCS, int alpha)
-{
- ASSERT(pBitmap->GetFormat() == FXDIB_Argb);
- if (pShadingStream->GetType() != PDFOBJ_STREAM) {
- return;
- }
- int row_verts = pShadingStream->GetDict()->GetInteger("VerticesPerRow");
- if (row_verts < 2) {
- return;
- }
- CPDF_MeshStream stream;
- if (!stream.Load(pShadingStream, pFuncs, nFuncs, pCS)) {
- return;
- }
- CPDF_MeshVertex* vertex = FX_Alloc2D(CPDF_MeshVertex, row_verts, 2);
- if (!stream.GetVertexRow(vertex, row_verts, pObject2Bitmap)) {
- FX_Free(vertex);
- return;
- }
- int last_index = 0;
- while (1) {
- CPDF_MeshVertex* last_row = vertex + last_index * row_verts;
- CPDF_MeshVertex* this_row = vertex + (1 - last_index) * row_verts;
- if (!stream.GetVertexRow(this_row, row_verts, pObject2Bitmap)) {
- FX_Free(vertex);
- return;
- }
- CPDF_MeshVertex triangle[3];
- for (int i = 1; i < row_verts; i ++) {
- triangle[0] = last_row[i];
- triangle[1] = this_row[i - 1];
- triangle[2] = last_row[i - 1];
- _DrawGouraud(pBitmap, alpha, triangle);
- triangle[2] = this_row[i];
- _DrawGouraud(pBitmap, alpha, triangle);
- }
- last_index = 1 - last_index;
- }
+static void _DrawLatticeGouraudShading(CFX_DIBitmap* pBitmap,
+ CFX_AffineMatrix* pObject2Bitmap,
+ CPDF_Stream* pShadingStream,
+ CPDF_Function** pFuncs,
+ int nFuncs,
+ CPDF_ColorSpace* pCS,
+ int alpha) {
+ ASSERT(pBitmap->GetFormat() == FXDIB_Argb);
+ if (pShadingStream->GetType() != PDFOBJ_STREAM) {
+ return;
+ }
+ int row_verts = pShadingStream->GetDict()->GetInteger("VerticesPerRow");
+ if (row_verts < 2) {
+ return;
+ }
+ CPDF_MeshStream stream;
+ if (!stream.Load(pShadingStream, pFuncs, nFuncs, pCS)) {
+ return;
+ }
+ CPDF_MeshVertex* vertex = FX_Alloc2D(CPDF_MeshVertex, row_verts, 2);
+ if (!stream.GetVertexRow(vertex, row_verts, pObject2Bitmap)) {
FX_Free(vertex);
+ return;
+ }
+ int last_index = 0;
+ while (1) {
+ CPDF_MeshVertex* last_row = vertex + last_index * row_verts;
+ CPDF_MeshVertex* this_row = vertex + (1 - last_index) * row_verts;
+ if (!stream.GetVertexRow(this_row, row_verts, pObject2Bitmap)) {
+ FX_Free(vertex);
+ return;
+ }
+ CPDF_MeshVertex triangle[3];
+ for (int i = 1; i < row_verts; i++) {
+ triangle[0] = last_row[i];
+ triangle[1] = this_row[i - 1];
+ triangle[2] = last_row[i - 1];
+ _DrawGouraud(pBitmap, alpha, triangle);
+ triangle[2] = this_row[i];
+ _DrawGouraud(pBitmap, alpha, triangle);
+ }
+ last_index = 1 - last_index;
+ }
+ FX_Free(vertex);
}
struct Coon_BezierCoeff {
- float a, b, c, d;
- void FromPoints(float p0, float p1, float p2, float p3)
- {
- a = -p0 + 3 * p1 - 3 * p2 + p3;
- b = 3 * p0 - 6 * p1 + 3 * p2;
- c = -3 * p0 + 3 * p1;
- d = p0;
- }
- Coon_BezierCoeff first_half()
- {
- Coon_BezierCoeff result;
- result.a = a / 8;
- result.b = b / 4;
- result.c = c / 2;
- result.d = d;
- return result;
- }
- Coon_BezierCoeff second_half()
- {
- Coon_BezierCoeff result;
- result.a = a / 8;
- result.b = 3 * a / 8 + b / 4;
- result.c = 3 * a / 8 + b / 2 + c / 2;
- result.d = a / 8 + b / 4 + c / 2 + d;
- return result;
- }
- void GetPoints(float p[4])
- {
- p[0] = d;
- p[1] = c / 3 + p[0];
- p[2] = b / 3 - p[0] + 2 * p[1];
- p[3] = a + p[0] - 3 * p[1] + 3 * p[2];
- }
- void GetPointsReverse(float p[4])
- {
- p[3] = d;
- p[2] = c / 3 + p[3];
- p[1] = b / 3 - p[3] + 2 * p[2];
- p[0] = a + p[3] - 3 * p[2] + 3 * p[1];
- }
- void BezierInterpol(Coon_BezierCoeff& C1, Coon_BezierCoeff& C2, Coon_BezierCoeff& D1, Coon_BezierCoeff& D2)
- {
- a = (D1.a + D2.a) / 2;
- b = (D1.b + D2.b) / 2;
- c = (D1.c + D2.c) / 2 - (C1.a / 8 + C1.b / 4 + C1.c / 2) + (C2.a / 8 + C2.b / 4) + (-C1.d + D2.d) / 2 - (C2.a + C2.b) / 2;
- d = C1.a / 8 + C1.b / 4 + C1.c / 2 + C1.d;
- }
- float Distance()
- {
- float dis = a + b + c;
- return dis < 0 ? -dis : dis;
- }
+ float a, b, c, d;
+ void FromPoints(float p0, float p1, float p2, float p3) {
+ a = -p0 + 3 * p1 - 3 * p2 + p3;
+ b = 3 * p0 - 6 * p1 + 3 * p2;
+ c = -3 * p0 + 3 * p1;
+ d = p0;
+ }
+ Coon_BezierCoeff first_half() {
+ Coon_BezierCoeff result;
+ result.a = a / 8;
+ result.b = b / 4;
+ result.c = c / 2;
+ result.d = d;
+ return result;
+ }
+ Coon_BezierCoeff second_half() {
+ Coon_BezierCoeff result;
+ result.a = a / 8;
+ result.b = 3 * a / 8 + b / 4;
+ result.c = 3 * a / 8 + b / 2 + c / 2;
+ result.d = a / 8 + b / 4 + c / 2 + d;
+ return result;
+ }
+ void GetPoints(float p[4]) {
+ p[0] = d;
+ p[1] = c / 3 + p[0];
+ p[2] = b / 3 - p[0] + 2 * p[1];
+ p[3] = a + p[0] - 3 * p[1] + 3 * p[2];
+ }
+ void GetPointsReverse(float p[4]) {
+ p[3] = d;
+ p[2] = c / 3 + p[3];
+ p[1] = b / 3 - p[3] + 2 * p[2];
+ p[0] = a + p[3] - 3 * p[2] + 3 * p[1];
+ }
+ void BezierInterpol(Coon_BezierCoeff& C1,
+ Coon_BezierCoeff& C2,
+ Coon_BezierCoeff& D1,
+ Coon_BezierCoeff& D2) {
+ a = (D1.a + D2.a) / 2;
+ b = (D1.b + D2.b) / 2;
+ c = (D1.c + D2.c) / 2 - (C1.a / 8 + C1.b / 4 + C1.c / 2) +
+ (C2.a / 8 + C2.b / 4) + (-C1.d + D2.d) / 2 - (C2.a + C2.b) / 2;
+ d = C1.a / 8 + C1.b / 4 + C1.c / 2 + C1.d;
+ }
+ float Distance() {
+ float dis = a + b + c;
+ return dis < 0 ? -dis : dis;
+ }
};
struct Coon_Bezier {
- Coon_BezierCoeff x, y;
- void FromPoints(float x0, float y0, float x1, float y1, float x2, float y2, float x3, float y3)
- {
- x.FromPoints(x0, x1, x2, x3);
- y.FromPoints(y0, y1, y2, y3);
- }
- Coon_Bezier first_half()
- {
- Coon_Bezier result;
- result.x = x.first_half();
- result.y = y.first_half();
- return result;
- }
- Coon_Bezier second_half()
- {
- Coon_Bezier result;
- result.x = x.second_half();
- result.y = y.second_half();
- return result;
- }
- void BezierInterpol(Coon_Bezier& C1, Coon_Bezier& C2, Coon_Bezier& D1, Coon_Bezier& D2)
- {
- x.BezierInterpol(C1.x, C2.x, D1.x, D2.x);
- y.BezierInterpol(C1.y, C2.y, D1.y, D2.y);
- }
- void GetPoints(FX_PATHPOINT* pPoints)
- {
- float p[4];
- int i;
- x.GetPoints(p);
- for (i = 0; i < 4; i ++) {
- pPoints[i].m_PointX = p[i];
- }
- y.GetPoints(p);
- for (i = 0; i < 4; i ++) {
- pPoints[i].m_PointY = p[i];
- }
- }
- void GetPointsReverse(FX_PATHPOINT* pPoints)
- {
- float p[4];
- int i;
- x.GetPointsReverse(p);
- for (i = 0; i < 4; i ++) {
- pPoints[i].m_PointX = p[i];
- }
- y.GetPointsReverse(p);
- for (i = 0; i < 4; i ++) {
- pPoints[i].m_PointY = p[i];
- }
- }
- float Distance()
- {
- return x.Distance() + y.Distance();
- }
+ Coon_BezierCoeff x, y;
+ void FromPoints(float x0,
+ float y0,
+ float x1,
+ float y1,
+ float x2,
+ float y2,
+ float x3,
+ float y3) {
+ x.FromPoints(x0, x1, x2, x3);
+ y.FromPoints(y0, y1, y2, y3);
+ }
+ Coon_Bezier first_half() {
+ Coon_Bezier result;
+ result.x = x.first_half();
+ result.y = y.first_half();
+ return result;
+ }
+ Coon_Bezier second_half() {
+ Coon_Bezier result;
+ result.x = x.second_half();
+ result.y = y.second_half();
+ return result;
+ }
+ void BezierInterpol(Coon_Bezier& C1,
+ Coon_Bezier& C2,
+ Coon_Bezier& D1,
+ Coon_Bezier& D2) {
+ x.BezierInterpol(C1.x, C2.x, D1.x, D2.x);
+ y.BezierInterpol(C1.y, C2.y, D1.y, D2.y);
+ }
+ void GetPoints(FX_PATHPOINT* pPoints) {
+ float p[4];
+ int i;
+ x.GetPoints(p);
+ for (i = 0; i < 4; i++) {
+ pPoints[i].m_PointX = p[i];
+ }
+ y.GetPoints(p);
+ for (i = 0; i < 4; i++) {
+ pPoints[i].m_PointY = p[i];
+ }
+ }
+ void GetPointsReverse(FX_PATHPOINT* pPoints) {
+ float p[4];
+ int i;
+ x.GetPointsReverse(p);
+ for (i = 0; i < 4; i++) {
+ pPoints[i].m_PointX = p[i];
+ }
+ y.GetPointsReverse(p);
+ for (i = 0; i < 4; i++) {
+ pPoints[i].m_PointY = p[i];
+ }
+ }
+ float Distance() { return x.Distance() + y.Distance(); }
};
-static int _BiInterpol(int c0, int c1, int c2, int c3, int x, int y, int x_scale, int y_scale)
-{
- int x1 = c0 + (c3 - c0) * x / x_scale;
- int x2 = c1 + (c2 - c1) * x / x_scale;
- return x1 + (x2 - x1) * y / y_scale;
+static int _BiInterpol(int c0,
+ int c1,
+ int c2,
+ int c3,
+ int x,
+ int y,
+ int x_scale,
+ int y_scale) {
+ int x1 = c0 + (c3 - c0) * x / x_scale;
+ int x2 = c1 + (c2 - c1) * x / x_scale;
+ return x1 + (x2 - x1) * y / y_scale;
}
struct Coon_Color {
- Coon_Color()
- {
- FXSYS_memset(comp, 0, sizeof(int) * 3);
- }
- int comp[3];
- void BiInterpol(Coon_Color colors[4], int x, int y, int x_scale, int y_scale)
- {
- for (int i = 0; i < 3; i ++)
- comp[i] = _BiInterpol(colors[0].comp[i], colors[1].comp[i], colors[2].comp[i], colors[3].comp[i],
- x, y, x_scale, y_scale);
- }
- int Distance(Coon_Color& o)
- {
- int max, diff;
- max = FXSYS_abs(comp[0] - o.comp[0]);
- diff = FXSYS_abs(comp[1] - o.comp[1]);
- if (max < diff) {
- max = diff;
- }
- diff = FXSYS_abs(comp[2] - o.comp[2]);
- if (max < diff) {
- max = diff;
- }
- return max;
- }
+ Coon_Color() { FXSYS_memset(comp, 0, sizeof(int) * 3); }
+ int comp[3];
+ void BiInterpol(Coon_Color colors[4],
+ int x,
+ int y,
+ int x_scale,
+ int y_scale) {
+ for (int i = 0; i < 3; i++)
+ comp[i] =
+ _BiInterpol(colors[0].comp[i], colors[1].comp[i], colors[2].comp[i],
+ colors[3].comp[i], x, y, x_scale, y_scale);
+ }
+ int Distance(Coon_Color& o) {
+ int max, diff;
+ max = FXSYS_abs(comp[0] - o.comp[0]);
+ diff = FXSYS_abs(comp[1] - o.comp[1]);
+ if (max < diff) {
+ max = diff;
+ }
+ diff = FXSYS_abs(comp[2] - o.comp[2]);
+ if (max < diff) {
+ max = diff;
+ }
+ return max;
+ }
};
struct CPDF_PatchDrawer {
- Coon_Color patch_colors[4];
- int max_delta;
- CFX_PathData path;
- CFX_RenderDevice* pDevice;
- int fill_mode;
- int alpha;
- void Draw(int x_scale, int y_scale, int left, int bottom, Coon_Bezier C1, Coon_Bezier C2, Coon_Bezier D1, Coon_Bezier D2)
- {
- FX_BOOL bSmall = C1.Distance() < 2 && C2.Distance() < 2 && D1.Distance() < 2 && D2.Distance() < 2;
- Coon_Color div_colors[4];
- int d_bottom, d_left, d_top, d_right;
- div_colors[0].BiInterpol(patch_colors, left, bottom, x_scale, y_scale);
- if (!bSmall) {
- div_colors[1].BiInterpol(patch_colors, left, bottom + 1, x_scale, y_scale);
- div_colors[2].BiInterpol(patch_colors, left + 1, bottom + 1, x_scale, y_scale);
- div_colors[3].BiInterpol(patch_colors, left + 1, bottom, x_scale, y_scale);
- d_bottom = div_colors[3].Distance(div_colors[0]);
- d_left = div_colors[1].Distance(div_colors[0]);
- d_top = div_colors[1].Distance(div_colors[2]);
- d_right = div_colors[2].Distance(div_colors[3]);
- }
-#define COONCOLOR_THRESHOLD 4
- if (bSmall || (d_bottom < COONCOLOR_THRESHOLD && d_left < COONCOLOR_THRESHOLD &&
- d_top < COONCOLOR_THRESHOLD && d_right < COONCOLOR_THRESHOLD)) {
- FX_PATHPOINT* pPoints = path.GetPoints();
- C1.GetPoints(pPoints);
- D2.GetPoints(pPoints + 3);
- C2.GetPointsReverse(pPoints + 6);
- D1.GetPointsReverse(pPoints + 9);
- int fillFlags = FXFILL_WINDING | FXFILL_FULLCOVER;
- if (fill_mode & RENDER_NOPATHSMOOTH) {
- fillFlags |= FXFILL_NOPATHSMOOTH;
- }
- pDevice->DrawPath(&path, NULL, NULL, FXARGB_MAKE(alpha, div_colors[0].comp[0], div_colors[0].comp[1], div_colors[0].comp[2]), 0, fillFlags);
- } else {
- if (d_bottom < COONCOLOR_THRESHOLD && d_top < COONCOLOR_THRESHOLD) {
- Coon_Bezier m1;
- m1.BezierInterpol(D1, D2, C1, C2);
- y_scale *= 2;
- bottom *= 2;
- Draw(x_scale, y_scale, left, bottom, C1, m1, D1.first_half(), D2.first_half());
- Draw(x_scale, y_scale, left, bottom + 1, m1, C2, D1.second_half(), D2.second_half());
- } else if (d_left < COONCOLOR_THRESHOLD && d_right < COONCOLOR_THRESHOLD) {
- Coon_Bezier m2;
- m2.BezierInterpol(C1, C2, D1, D2);
- x_scale *= 2;
- left *= 2;
- Draw(x_scale, y_scale, left, bottom, C1.first_half(), C2.first_half(), D1, m2);
- Draw(x_scale, y_scale, left + 1, bottom, C1.second_half(), C2.second_half(), m2, D2);
- } else {
- Coon_Bezier m1, m2;
- m1.BezierInterpol(D1, D2, C1, C2);
- m2.BezierInterpol(C1, C2, D1, D2);
- Coon_Bezier m1f = m1.first_half();
- Coon_Bezier m1s = m1.second_half();
- Coon_Bezier m2f = m2.first_half();
- Coon_Bezier m2s = m2.second_half();
- x_scale *= 2;
- y_scale *= 2;
- left *= 2;
- bottom *= 2;
- Draw(x_scale, y_scale, left, bottom, C1.first_half(), m1f, D1.first_half(), m2f);
- Draw(x_scale, y_scale, left, bottom + 1, m1f, C2.first_half(), D1.second_half(), m2s);
- Draw(x_scale, y_scale, left + 1, bottom, C1.second_half(), m1s, m2f, D2.first_half());
- Draw(x_scale, y_scale, left + 1, bottom + 1, m1s, C2.second_half(), m2s, D2.second_half());
- }
- }
+ Coon_Color patch_colors[4];
+ int max_delta;
+ CFX_PathData path;
+ CFX_RenderDevice* pDevice;
+ int fill_mode;
+ int alpha;
+ void Draw(int x_scale,
+ int y_scale,
+ int left,
+ int bottom,
+ Coon_Bezier C1,
+ Coon_Bezier C2,
+ Coon_Bezier D1,
+ Coon_Bezier D2) {
+ FX_BOOL bSmall = C1.Distance() < 2 && C2.Distance() < 2 &&
+ D1.Distance() < 2 && D2.Distance() < 2;
+ Coon_Color div_colors[4];
+ int d_bottom, d_left, d_top, d_right;
+ div_colors[0].BiInterpol(patch_colors, left, bottom, x_scale, y_scale);
+ if (!bSmall) {
+ div_colors[1].BiInterpol(patch_colors, left, bottom + 1, x_scale,
+ y_scale);
+ div_colors[2].BiInterpol(patch_colors, left + 1, bottom + 1, x_scale,
+ y_scale);
+ div_colors[3].BiInterpol(patch_colors, left + 1, bottom, x_scale,
+ y_scale);
+ d_bottom = div_colors[3].Distance(div_colors[0]);
+ d_left = div_colors[1].Distance(div_colors[0]);
+ d_top = div_colors[1].Distance(div_colors[2]);
+ d_right = div_colors[2].Distance(div_colors[3]);
}
+#define COONCOLOR_THRESHOLD 4
+ if (bSmall ||
+ (d_bottom < COONCOLOR_THRESHOLD && d_left < COONCOLOR_THRESHOLD &&
+ d_top < COONCOLOR_THRESHOLD && d_right < COONCOLOR_THRESHOLD)) {
+ FX_PATHPOINT* pPoints = path.GetPoints();
+ C1.GetPoints(pPoints);
+ D2.GetPoints(pPoints + 3);
+ C2.GetPointsReverse(pPoints + 6);
+ D1.GetPointsReverse(pPoints + 9);
+ int fillFlags = FXFILL_WINDING | FXFILL_FULLCOVER;
+ if (fill_mode & RENDER_NOPATHSMOOTH) {
+ fillFlags |= FXFILL_NOPATHSMOOTH;
+ }
+ pDevice->DrawPath(
+ &path, NULL, NULL,
+ FXARGB_MAKE(alpha, div_colors[0].comp[0], div_colors[0].comp[1],
+ div_colors[0].comp[2]),
+ 0, fillFlags);
+ } else {
+ if (d_bottom < COONCOLOR_THRESHOLD && d_top < COONCOLOR_THRESHOLD) {
+ Coon_Bezier m1;
+ m1.BezierInterpol(D1, D2, C1, C2);
+ y_scale *= 2;
+ bottom *= 2;
+ Draw(x_scale, y_scale, left, bottom, C1, m1, D1.first_half(),
+ D2.first_half());
+ Draw(x_scale, y_scale, left, bottom + 1, m1, C2, D1.second_half(),
+ D2.second_half());
+ } else if (d_left < COONCOLOR_THRESHOLD &&
+ d_right < COONCOLOR_THRESHOLD) {
+ Coon_Bezier m2;
+ m2.BezierInterpol(C1, C2, D1, D2);
+ x_scale *= 2;
+ left *= 2;
+ Draw(x_scale, y_scale, left, bottom, C1.first_half(), C2.first_half(),
+ D1, m2);
+ Draw(x_scale, y_scale, left + 1, bottom, C1.second_half(),
+ C2.second_half(), m2, D2);
+ } else {
+ Coon_Bezier m1, m2;
+ m1.BezierInterpol(D1, D2, C1, C2);
+ m2.BezierInterpol(C1, C2, D1, D2);
+ Coon_Bezier m1f = m1.first_half();
+ Coon_Bezier m1s = m1.second_half();
+ Coon_Bezier m2f = m2.first_half();
+ Coon_Bezier m2s = m2.second_half();
+ x_scale *= 2;
+ y_scale *= 2;
+ left *= 2;
+ bottom *= 2;
+ Draw(x_scale, y_scale, left, bottom, C1.first_half(), m1f,
+ D1.first_half(), m2f);
+ Draw(x_scale, y_scale, left, bottom + 1, m1f, C2.first_half(),
+ D1.second_half(), m2s);
+ Draw(x_scale, y_scale, left + 1, bottom, C1.second_half(), m1s, m2f,
+ D2.first_half());
+ Draw(x_scale, y_scale, left + 1, bottom + 1, m1s, C2.second_half(), m2s,
+ D2.second_half());
+ }
+ }
+ }
};
-FX_BOOL _CheckCoonTensorPara(const CPDF_MeshStream &stream)
-{
- FX_BOOL bCoorBits = ( stream.m_nCoordBits== 1 ||
- stream.m_nCoordBits == 2 ||
- stream.m_nCoordBits == 4 ||
- stream.m_nCoordBits == 8 ||
- stream.m_nCoordBits == 12 ||
- stream.m_nCoordBits == 16 ||
- stream.m_nCoordBits == 24 ||
- stream.m_nCoordBits == 32 );
+FX_BOOL _CheckCoonTensorPara(const CPDF_MeshStream& stream) {
+ FX_BOOL bCoorBits = (stream.m_nCoordBits == 1 || stream.m_nCoordBits == 2 ||
+ stream.m_nCoordBits == 4 || stream.m_nCoordBits == 8 ||
+ stream.m_nCoordBits == 12 || stream.m_nCoordBits == 16 ||
+ stream.m_nCoordBits == 24 || stream.m_nCoordBits == 32);
- FX_BOOL bCompBits = ( stream.m_nCompBits == 1 ||
- stream.m_nCompBits == 2 ||
- stream.m_nCompBits == 4 ||
- stream.m_nCompBits == 8 ||
- stream.m_nCompBits == 12 ||
- stream.m_nCompBits == 16 );
+ FX_BOOL bCompBits = (stream.m_nCompBits == 1 || stream.m_nCompBits == 2 ||
+ stream.m_nCompBits == 4 || stream.m_nCompBits == 8 ||
+ stream.m_nCompBits == 12 || stream.m_nCompBits == 16);
- FX_BOOL bFlagBits = ( stream.m_nFlagBits == 2 ||
- stream.m_nFlagBits == 4 ||
- stream.m_nFlagBits == 8 );
+ FX_BOOL bFlagBits = (stream.m_nFlagBits == 2 || stream.m_nFlagBits == 4 ||
+ stream.m_nFlagBits == 8);
- return bCoorBits && bCompBits && bFlagBits;
+ return bCoorBits && bCompBits && bFlagBits;
}
-static void _DrawCoonPatchMeshes(FX_BOOL bTensor, CFX_DIBitmap* pBitmap, CFX_AffineMatrix* pObject2Bitmap,
- CPDF_Stream* pShadingStream, CPDF_Function** pFuncs, int nFuncs,
- CPDF_ColorSpace* pCS, int fill_mode, int alpha)
-{
- ASSERT(pBitmap->GetFormat() == FXDIB_Argb);
- if (pShadingStream->GetType() != PDFOBJ_STREAM) {
- return;
- }
- CFX_FxgeDevice device;
- device.Attach(pBitmap);
- CPDF_MeshStream stream;
- if (!stream.Load(pShadingStream, pFuncs, nFuncs, pCS)) {
- return;
- }
+static void _DrawCoonPatchMeshes(FX_BOOL bTensor,
+ CFX_DIBitmap* pBitmap,
+ CFX_AffineMatrix* pObject2Bitmap,
+ CPDF_Stream* pShadingStream,
+ CPDF_Function** pFuncs,
+ int nFuncs,
+ CPDF_ColorSpace* pCS,
+ int fill_mode,
+ int alpha) {
+ ASSERT(pBitmap->GetFormat() == FXDIB_Argb);
+ if (pShadingStream->GetType() != PDFOBJ_STREAM) {
+ return;
+ }
+ CFX_FxgeDevice device;
+ device.Attach(pBitmap);
+ CPDF_MeshStream stream;
+ if (!stream.Load(pShadingStream, pFuncs, nFuncs, pCS)) {
+ return;
+ }
- if (!_CheckCoonTensorPara(stream)) {
- return;
- }
+ if (!_CheckCoonTensorPara(stream)) {
+ return;
+ }
- CPDF_PatchDrawer patch;
- patch.alpha = alpha;
- patch.pDevice = &device;
- patch.fill_mode = fill_mode;
- patch.path.SetPointCount(13);
- FX_PATHPOINT* pPoints = patch.path.GetPoints();
- pPoints[0].m_Flag = FXPT_MOVETO;
- for (int i = 1; i < 13; i ++) {
- pPoints[i].m_Flag = FXPT_BEZIERTO;
- }
- CFX_FloatPoint coords[16];
- for (int i = 0; i < 16; i ++) {
- coords[i].Set(0.0f, 0.0f);
- }
+ CPDF_PatchDrawer patch;
+ patch.alpha = alpha;
+ patch.pDevice = &device;
+ patch.fill_mode = fill_mode;
+ patch.path.SetPointCount(13);
+ FX_PATHPOINT* pPoints = patch.path.GetPoints();
+ pPoints[0].m_Flag = FXPT_MOVETO;
+ for (int i = 1; i < 13; i++) {
+ pPoints[i].m_Flag = FXPT_BEZIERTO;
+ }
+ CFX_FloatPoint coords[16];
+ for (int i = 0; i < 16; i++) {
+ coords[i].Set(0.0f, 0.0f);
+ }
- int point_count = bTensor ? 16 : 12;
- while (!stream.m_BitStream.IsEOF()) {
- FX_DWORD flag = stream.GetFlag();
- int iStartPoint = 0, iStartColor = 0, i = 0;
- if (flag) {
- iStartPoint = 4;
- iStartColor = 2;
- CFX_FloatPoint tempCoords[4];
- for (i = 0; i < 4; i ++) {
- tempCoords[i] = coords[(flag * 3 + i) % 12];
- }
- FXSYS_memcpy(coords, tempCoords, sizeof(CFX_FloatPoint) * 4);
- Coon_Color tempColors[2];
- tempColors[0] = patch.patch_colors[flag];
- tempColors[1] = patch.patch_colors[(flag + 1) % 4];
- FXSYS_memcpy(patch.patch_colors, tempColors, sizeof(Coon_Color) * 2);
- }
- for (i = iStartPoint; i < point_count; i ++) {
- stream.GetCoords(coords[i].x, coords[i].y);
- pObject2Bitmap->Transform(coords[i].x, coords[i].y);
- }
- for (i = iStartColor; i < 4; i ++) {
- FX_FLOAT r=0.0f, g=0.0f, b=0.0f;
- stream.GetColor(r, g, b);
- patch.patch_colors[i].comp[0] = (int32_t)(r * 255);
- patch.patch_colors[i].comp[1] = (int32_t)(g * 255);
- patch.patch_colors[i].comp[2] = (int32_t)(b * 255);
- }
- CFX_FloatRect bbox = CFX_FloatRect::GetBBox(coords, point_count);
- if (bbox.right <= 0 || bbox.left >= (FX_FLOAT)pBitmap->GetWidth() || bbox.top <= 0 ||
- bbox.bottom >= (FX_FLOAT)pBitmap->GetHeight()) {
- continue;
- }
- Coon_Bezier C1, C2, D1, D2;
- C1.FromPoints(coords[0].x, coords[0].y, coords[11].x, coords[11].y, coords[10].x, coords[10].y,
- coords[9].x, coords[9].y);
- C2.FromPoints(coords[3].x, coords[3].y, coords[4].x, coords[4].y, coords[5].x, coords[5].y,
- coords[6].x, coords[6].y);
- D1.FromPoints(coords[0].x, coords[0].y, coords[1].x, coords[1].y, coords[2].x, coords[2].y,
- coords[3].x, coords[3].y);
- D2.FromPoints(coords[9].x, coords[9].y, coords[8].x, coords[8].y, coords[7].x, coords[7].y,
- coords[6].x, coords[6].y);
- patch.Draw(1, 1, 0, 0, C1, C2, D1, D2);
- }
+ int point_count = bTensor ? 16 : 12;
+ while (!stream.m_BitStream.IsEOF()) {
+ FX_DWORD flag = stream.GetFlag();
+ int iStartPoint = 0, iStartColor = 0, i = 0;
+ if (flag) {
+ iStartPoint = 4;
+ iStartColor = 2;
+ CFX_FloatPoint tempCoords[4];
+ for (i = 0; i < 4; i++) {
+ tempCoords[i] = coords[(flag * 3 + i) % 12];
+ }
+ FXSYS_memcpy(coords, tempCoords, sizeof(CFX_FloatPoint) * 4);
+ Coon_Color tempColors[2];
+ tempColors[0] = patch.patch_colors[flag];
+ tempColors[1] = patch.patch_colors[(flag + 1) % 4];
+ FXSYS_memcpy(patch.patch_colors, tempColors, sizeof(Coon_Color) * 2);
+ }
+ for (i = iStartPoint; i < point_count; i++) {
+ stream.GetCoords(coords[i].x, coords[i].y);
+ pObject2Bitmap->Transform(coords[i].x, coords[i].y);
+ }
+ for (i = iStartColor; i < 4; i++) {
+ FX_FLOAT r = 0.0f, g = 0.0f, b = 0.0f;
+ stream.GetColor(r, g, b);
+ patch.patch_colors[i].comp[0] = (int32_t)(r * 255);
+ patch.patch_colors[i].comp[1] = (int32_t)(g * 255);
+ patch.patch_colors[i].comp[2] = (int32_t)(b * 255);
+ }
+ CFX_FloatRect bbox = CFX_FloatRect::GetBBox(coords, point_count);
+ if (bbox.right <= 0 || bbox.left >= (FX_FLOAT)pBitmap->GetWidth() ||
+ bbox.top <= 0 || bbox.bottom >= (FX_FLOAT)pBitmap->GetHeight()) {
+ continue;
+ }
+ Coon_Bezier C1, C2, D1, D2;
+ C1.FromPoints(coords[0].x, coords[0].y, coords[11].x, coords[11].y,
+ coords[10].x, coords[10].y, coords[9].x, coords[9].y);
+ C2.FromPoints(coords[3].x, coords[3].y, coords[4].x, coords[4].y,
+ coords[5].x, coords[5].y, coords[6].x, coords[6].y);
+ D1.FromPoints(coords[0].x, coords[0].y, coords[1].x, coords[1].y,
+ coords[2].x, coords[2].y, coords[3].x, coords[3].y);
+ D2.FromPoints(coords[9].x, coords[9].y, coords[8].x, coords[8].y,
+ coords[7].x, coords[7].y, coords[6].x, coords[6].y);
+ patch.Draw(1, 1, 0, 0, C1, C2, D1, D2);
+ }
}
-void CPDF_RenderStatus::DrawShading(CPDF_ShadingPattern* pPattern, CFX_AffineMatrix* pMatrix,
- FX_RECT& clip_rect, int alpha, FX_BOOL bAlphaMode)
-{
- CPDF_Function** pFuncs = pPattern->m_pFunctions;
- int nFuncs = pPattern->m_nFuncs;
- CPDF_Dictionary* pDict = pPattern->m_pShadingObj->GetDict();
- CPDF_ColorSpace* pColorSpace = pPattern->m_pCS;
- if (pColorSpace == NULL) {
- return;
- }
- FX_ARGB background = 0;
- if (!pPattern->m_bShadingObj && pPattern->m_pShadingObj->GetDict()->KeyExist(FX_BSTRC("Background"))) {
- CPDF_Array* pBackColor = pPattern->m_pShadingObj->GetDict()->GetArray(FX_BSTRC("Background"));
- if (pBackColor && pBackColor->GetCount() >= (FX_DWORD)pColorSpace->CountComponents()) {
- CFX_FixedBufGrow<FX_FLOAT, 16> comps(pColorSpace->CountComponents());
- for (int i = 0; i < pColorSpace->CountComponents(); i ++) {
- comps[i] = pBackColor->GetNumber(i);
- }
- FX_FLOAT R = 0.0f, G = 0.0f, B = 0.0f;
- pColorSpace->GetRGB(comps, R, G, B);
- background = ArgbEncode(255, (int32_t)(R * 255), (int32_t)(G * 255), (int32_t)(B * 255));
- }
- }
- if (pDict->KeyExist(FX_BSTRC("BBox"))) {
- CFX_FloatRect rect = pDict->GetRect(FX_BSTRC("BBox"));
- rect.Transform(pMatrix);
- clip_rect.Intersect(rect.GetOutterRect());
- }
- CPDF_DeviceBuffer buffer;
- buffer.Initialize(m_pContext, m_pDevice, &clip_rect, m_pCurObj, 150);
- CFX_AffineMatrix FinalMatrix = *pMatrix;
- FinalMatrix.Concat(*buffer.GetMatrix());
- CFX_DIBitmap* pBitmap = buffer.GetBitmap();
- if (pBitmap->GetBuffer() == NULL) {
- return;
- }
- pBitmap->Clear(background);
- int fill_mode = m_Options.m_Flags;
- switch (pPattern->m_ShadingType) {
- case 1:
- _DrawFuncShading(pBitmap, &FinalMatrix, pDict, pFuncs, nFuncs, pColorSpace, alpha);
- break;
- case 2:
- _DrawAxialShading(pBitmap, &FinalMatrix, pDict, pFuncs, nFuncs, pColorSpace, alpha);
- break;
- case 3:
- _DrawRadialShading(pBitmap, &FinalMatrix, pDict, pFuncs, nFuncs, pColorSpace, alpha);
- break;
- case 4: {
- _DrawFreeGouraudShading(pBitmap, &FinalMatrix, (CPDF_Stream*)pPattern->m_pShadingObj,
- pFuncs, nFuncs, pColorSpace, alpha);
- }
- break;
- case 5: {
- _DrawLatticeGouraudShading(pBitmap, &FinalMatrix, (CPDF_Stream*)pPattern->m_pShadingObj,
- pFuncs, nFuncs, pColorSpace, alpha);
- }
- break;
- case 6:
- case 7: {
- _DrawCoonPatchMeshes(pPattern->m_ShadingType - 6, pBitmap, &FinalMatrix, (CPDF_Stream*)pPattern->m_pShadingObj,
- pFuncs, nFuncs, pColorSpace, fill_mode, alpha);
- }
- break;
- }
- if (bAlphaMode) {
- pBitmap->LoadChannel(FXDIB_Red, pBitmap, FXDIB_Alpha);
- }
- if (m_Options.m_ColorMode == RENDER_COLOR_GRAY) {
- pBitmap->ConvertColorScale(m_Options.m_ForeColor, m_Options.m_BackColor);
- }
- buffer.OutputToDevice();
+void CPDF_RenderStatus::DrawShading(CPDF_ShadingPattern* pPattern,
+ CFX_AffineMatrix* pMatrix,
+ FX_RECT& clip_rect,
+ int alpha,
+ FX_BOOL bAlphaMode) {
+ CPDF_Function** pFuncs = pPattern->m_pFunctions;
+ int nFuncs = pPattern->m_nFuncs;
+ CPDF_Dictionary* pDict = pPattern->m_pShadingObj->GetDict();
+ CPDF_ColorSpace* pColorSpace = pPattern->m_pCS;
+ if (pColorSpace == NULL) {
+ return;
+ }
+ FX_ARGB background = 0;
+ if (!pPattern->m_bShadingObj &&
+ pPattern->m_pShadingObj->GetDict()->KeyExist(FX_BSTRC("Background"))) {
+ CPDF_Array* pBackColor =
+ pPattern->m_pShadingObj->GetDict()->GetArray(FX_BSTRC("Background"));
+ if (pBackColor &&
+ pBackColor->GetCount() >= (FX_DWORD)pColorSpace->CountComponents()) {
+ CFX_FixedBufGrow<FX_FLOAT, 16> comps(pColorSpace->CountComponents());
+ for (int i = 0; i < pColorSpace->CountComponents(); i++) {
+ comps[i] = pBackColor->GetNumber(i);
+ }
+ FX_FLOAT R = 0.0f, G = 0.0f, B = 0.0f;
+ pColorSpace->GetRGB(comps, R, G, B);
+ background = ArgbEncode(255, (int32_t)(R * 255), (int32_t)(G * 255),
+ (int32_t)(B * 255));
+ }
+ }
+ if (pDict->KeyExist(FX_BSTRC("BBox"))) {
+ CFX_FloatRect rect = pDict->GetRect(FX_BSTRC("BBox"));
+ rect.Transform(pMatrix);
+ clip_rect.Intersect(rect.GetOutterRect());
+ }
+ CPDF_DeviceBuffer buffer;
+ buffer.Initialize(m_pContext, m_pDevice, &clip_rect, m_pCurObj, 150);
+ CFX_AffineMatrix FinalMatrix = *pMatrix;
+ FinalMatrix.Concat(*buffer.GetMatrix());
+ CFX_DIBitmap* pBitmap = buffer.GetBitmap();
+ if (pBitmap->GetBuffer() == NULL) {
+ return;
+ }
+ pBitmap->Clear(background);
+ int fill_mode = m_Options.m_Flags;
+ switch (pPattern->m_ShadingType) {
+ case 1:
+ _DrawFuncShading(pBitmap, &FinalMatrix, pDict, pFuncs, nFuncs,
+ pColorSpace, alpha);
+ break;
+ case 2:
+ _DrawAxialShading(pBitmap, &FinalMatrix, pDict, pFuncs, nFuncs,
+ pColorSpace, alpha);
+ break;
+ case 3:
+ _DrawRadialShading(pBitmap, &FinalMatrix, pDict, pFuncs, nFuncs,
+ pColorSpace, alpha);
+ break;
+ case 4: {
+ _DrawFreeGouraudShading(pBitmap, &FinalMatrix,
+ (CPDF_Stream*)pPattern->m_pShadingObj, pFuncs,
+ nFuncs, pColorSpace, alpha);
+ } break;
+ case 5: {
+ _DrawLatticeGouraudShading(pBitmap, &FinalMatrix,
+ (CPDF_Stream*)pPattern->m_pShadingObj, pFuncs,
+ nFuncs, pColorSpace, alpha);
+ } break;
+ case 6:
+ case 7: {
+ _DrawCoonPatchMeshes(pPattern->m_ShadingType - 6, pBitmap, &FinalMatrix,
+ (CPDF_Stream*)pPattern->m_pShadingObj, pFuncs,
+ nFuncs, pColorSpace, fill_mode, alpha);
+ } break;
+ }
+ if (bAlphaMode) {
+ pBitmap->LoadChannel(FXDIB_Red, pBitmap, FXDIB_Alpha);
+ }
+ if (m_Options.m_ColorMode == RENDER_COLOR_GRAY) {
+ pBitmap->ConvertColorScale(m_Options.m_ForeColor, m_Options.m_BackColor);
+ }
+ buffer.OutputToDevice();
}
-void CPDF_RenderStatus::DrawShadingPattern(CPDF_ShadingPattern* pattern, CPDF_PageObject* pPageObj, const CFX_AffineMatrix* pObj2Device, FX_BOOL bStroke)
-{
- if (!pattern->Load()) {
- return;
- }
- m_pDevice->SaveState();
- if (pPageObj->m_Type == PDFPAGE_PATH) {
- if (!SelectClipPath((CPDF_PathObject*)pPageObj, pObj2Device, bStroke)) {
- m_pDevice->RestoreState();
- return;
- }
- } else if (pPageObj->m_Type == PDFPAGE_IMAGE) {
- FX_RECT rect = pPageObj->GetBBox(pObj2Device);
- m_pDevice->SetClip_Rect(&rect);
- } else {
- return;
- }
- FX_RECT rect;
- if (GetObjectClippedRect(pPageObj, pObj2Device, FALSE, rect)) {
- m_pDevice->RestoreState();
- return;
- }
- CFX_AffineMatrix matrix = pattern->m_Pattern2Form;
- matrix.Concat(*pObj2Device);
- GetScaledMatrix(matrix);
- int alpha = pPageObj->m_GeneralState.GetAlpha(bStroke);
- DrawShading(pattern, &matrix, rect, alpha, m_Options.m_ColorMode == RENDER_COLOR_ALPHA);
+void CPDF_RenderStatus::DrawShadingPattern(CPDF_ShadingPattern* pattern,
+ CPDF_PageObject* pPageObj,
+ const CFX_AffineMatrix* pObj2Device,
+ FX_BOOL bStroke) {
+ if (!pattern->Load()) {
+ return;
+ }
+ m_pDevice->SaveState();
+ if (pPageObj->m_Type == PDFPAGE_PATH) {
+ if (!SelectClipPath((CPDF_PathObject*)pPageObj, pObj2Device, bStroke)) {
+ m_pDevice->RestoreState();
+ return;
+ }
+ } else if (pPageObj->m_Type == PDFPAGE_IMAGE) {
+ FX_RECT rect = pPageObj->GetBBox(pObj2Device);
+ m_pDevice->SetClip_Rect(&rect);
+ } else {
+ return;
+ }
+ FX_RECT rect;
+ if (GetObjectClippedRect(pPageObj, pObj2Device, FALSE, rect)) {
m_pDevice->RestoreState();
+ return;
+ }
+ CFX_AffineMatrix matrix = pattern->m_Pattern2Form;
+ matrix.Concat(*pObj2Device);
+ GetScaledMatrix(matrix);
+ int alpha = pPageObj->m_GeneralState.GetAlpha(bStroke);
+ DrawShading(pattern, &matrix, rect, alpha,
+ m_Options.m_ColorMode == RENDER_COLOR_ALPHA);
+ m_pDevice->RestoreState();
}
-FX_BOOL CPDF_RenderStatus::ProcessShading(CPDF_ShadingObject* pShadingObj, const CFX_AffineMatrix* pObj2Device)
-{
- FX_RECT rect = pShadingObj->GetBBox(pObj2Device);
- FX_RECT clip_box = m_pDevice->GetClipBox();
- rect.Intersect(clip_box);
- if (rect.IsEmpty()) {
- return TRUE;
- }
- CFX_AffineMatrix matrix = pShadingObj->m_Matrix;
- matrix.Concat(*pObj2Device);
- DrawShading(pShadingObj->m_pShading, &matrix, rect, pShadingObj->m_GeneralState.GetAlpha(FALSE),
- m_Options.m_ColorMode == RENDER_COLOR_ALPHA);
+FX_BOOL CPDF_RenderStatus::ProcessShading(CPDF_ShadingObject* pShadingObj,
+ const CFX_AffineMatrix* pObj2Device) {
+ FX_RECT rect = pShadingObj->GetBBox(pObj2Device);
+ FX_RECT clip_box = m_pDevice->GetClipBox();
+ rect.Intersect(clip_box);
+ if (rect.IsEmpty()) {
return TRUE;
+ }
+ CFX_AffineMatrix matrix = pShadingObj->m_Matrix;
+ matrix.Concat(*pObj2Device);
+ DrawShading(pShadingObj->m_pShading, &matrix, rect,
+ pShadingObj->m_GeneralState.GetAlpha(FALSE),
+ m_Options.m_ColorMode == RENDER_COLOR_ALPHA);
+ return TRUE;
}
-static CFX_DIBitmap* DrawPatternBitmap(CPDF_Document* pDoc, CPDF_PageRenderCache* pCache,
- CPDF_TilingPattern* pPattern, const CFX_AffineMatrix* pObject2Device,
- int width, int height, int flags)
-{
- CFX_DIBitmap* pBitmap = new CFX_DIBitmap;
- if (!pBitmap->Create(width, height, pPattern->m_bColored ? FXDIB_Argb : FXDIB_8bppMask)) {
- delete pBitmap;
- return NULL;
- }
- CFX_FxgeDevice bitmap_device;
- bitmap_device.Attach(pBitmap);
- pBitmap->Clear(0);
- CFX_FloatRect cell_bbox = pPattern->m_BBox;
- pPattern->m_Pattern2Form.TransformRect(cell_bbox);
- pObject2Device->TransformRect(cell_bbox);
- CFX_FloatRect bitmap_rect(0.0f, 0.0f, (FX_FLOAT)width, (FX_FLOAT)height);
- CFX_AffineMatrix mtAdjust;
- mtAdjust.MatchRect(bitmap_rect, cell_bbox);
- CFX_AffineMatrix mtPattern2Bitmap = *pObject2Device;
- mtPattern2Bitmap.Concat(mtAdjust);
- CPDF_RenderOptions options;
- if (!pPattern->m_bColored) {
- options.m_ColorMode = RENDER_COLOR_ALPHA;
- }
- flags |= RENDER_FORCE_HALFTONE;
- options.m_Flags = flags;
- CPDF_RenderContext context;
- context.Create(pDoc, pCache, NULL);
- context.DrawObjectList(&bitmap_device, pPattern->m_pForm, &mtPattern2Bitmap, &options);
- return pBitmap;
+static CFX_DIBitmap* DrawPatternBitmap(CPDF_Document* pDoc,
+ CPDF_PageRenderCache* pCache,
+ CPDF_TilingPattern* pPattern,
+ const CFX_AffineMatrix* pObject2Device,
+ int width,
+ int height,
+ int flags) {
+ CFX_DIBitmap* pBitmap = new CFX_DIBitmap;
+ if (!pBitmap->Create(width, height,
+ pPattern->m_bColored ? FXDIB_Argb : FXDIB_8bppMask)) {
+ delete pBitmap;
+ return NULL;
+ }
+ CFX_FxgeDevice bitmap_device;
+ bitmap_device.Attach(pBitmap);
+ pBitmap->Clear(0);
+ CFX_FloatRect cell_bbox = pPattern->m_BBox;
+ pPattern->m_Pattern2Form.TransformRect(cell_bbox);
+ pObject2Device->TransformRect(cell_bbox);
+ CFX_FloatRect bitmap_rect(0.0f, 0.0f, (FX_FLOAT)width, (FX_FLOAT)height);
+ CFX_AffineMatrix mtAdjust;
+ mtAdjust.MatchRect(bitmap_rect, cell_bbox);
+ CFX_AffineMatrix mtPattern2Bitmap = *pObject2Device;
+ mtPattern2Bitmap.Concat(mtAdjust);
+ CPDF_RenderOptions options;
+ if (!pPattern->m_bColored) {
+ options.m_ColorMode = RENDER_COLOR_ALPHA;
+ }
+ flags |= RENDER_FORCE_HALFTONE;
+ options.m_Flags = flags;
+ CPDF_RenderContext context;
+ context.Create(pDoc, pCache, NULL);
+ context.DrawObjectList(&bitmap_device, pPattern->m_pForm, &mtPattern2Bitmap,
+ &options);
+ return pBitmap;
}
-void CPDF_RenderStatus::DrawTilingPattern(CPDF_TilingPattern* pPattern, CPDF_PageObject* pPageObj, const CFX_AffineMatrix* pObj2Device, FX_BOOL bStroke)
-{
- if (!pPattern->Load()) {
- return;
- }
- m_pDevice->SaveState();
- if (pPageObj->m_Type == PDFPAGE_PATH) {
- if (!SelectClipPath((CPDF_PathObject*)pPageObj, pObj2Device, bStroke)) {
- m_pDevice->RestoreState();
- return;
- }
- } else if (pPageObj->m_Type == PDFPAGE_IMAGE) {
- FX_RECT rect = pPageObj->GetBBox(pObj2Device);
- m_pDevice->SetClip_Rect(&rect);
- } else {
- return;
- }
- FX_RECT clip_box = m_pDevice->GetClipBox();
- if (clip_box.IsEmpty()) {
- m_pDevice->RestoreState();
- return;
- }
- CFX_Matrix dCTM = m_pDevice->GetCTM();
- FX_FLOAT sa = FXSYS_fabs(dCTM.a);
- FX_FLOAT sd = FXSYS_fabs(dCTM.d);
- clip_box.right = clip_box.left + (int32_t)FXSYS_ceil(clip_box.Width() * sa);
- clip_box.bottom = clip_box.top + (int32_t)FXSYS_ceil(clip_box.Height() * sd);
- CFX_AffineMatrix mtPattern2Device = pPattern->m_Pattern2Form;
- mtPattern2Device.Concat(*pObj2Device);
- GetScaledMatrix(mtPattern2Device);
- FX_BOOL bAligned = FALSE;
- if (pPattern->m_BBox.left == 0 && pPattern->m_BBox.bottom == 0 &&
- pPattern->m_BBox.right == pPattern->m_XStep && pPattern->m_BBox.top == pPattern->m_YStep &&
- (mtPattern2Device.IsScaled() || mtPattern2Device.Is90Rotated())) {
- bAligned = TRUE;
- }
- CFX_FloatRect cell_bbox = pPattern->m_BBox;
- mtPattern2Device.TransformRect(cell_bbox);
- int width = (int)FXSYS_ceil(cell_bbox.Width());
- int height = (int)FXSYS_ceil(cell_bbox.Height());
- if (width == 0) {
- width = 1;
- }
- if (height == 0) {
- height = 1;
- }
- int min_col, max_col, min_row, max_row;
- CFX_AffineMatrix mtDevice2Pattern;
- mtDevice2Pattern.SetReverse(mtPattern2Device);
- CFX_FloatRect clip_box_p(clip_box);
- clip_box_p.Transform(&mtDevice2Pattern);
- min_col = (int)FXSYS_ceil(FXSYS_Div(clip_box_p.left - pPattern->m_BBox.right, pPattern->m_XStep));
- max_col = (int)FXSYS_floor(FXSYS_Div(clip_box_p.right - pPattern->m_BBox.left, pPattern->m_XStep));
- min_row = (int)FXSYS_ceil(FXSYS_Div(clip_box_p.bottom - pPattern->m_BBox.top, pPattern->m_YStep));
- max_row = (int)FXSYS_floor(FXSYS_Div(clip_box_p.top - pPattern->m_BBox.bottom, pPattern->m_YStep));
- if (width > clip_box.Width() || height > clip_box.Height() || width * height > clip_box.Width() * clip_box.Height()) {
- CPDF_GraphicStates* pStates = NULL;
- if (!pPattern->m_bColored) {
- pStates = CloneObjStates(pPageObj, bStroke);
- }
- CPDF_Dictionary* pFormResource = NULL;
- if (pPattern->m_pForm->m_pFormDict) {
- pFormResource = pPattern->m_pForm->m_pFormDict->GetDict(FX_BSTRC("Resources"));
- }
- for (int col = min_col; col <= max_col; col ++)
- for (int row = min_row; row <= max_row; row ++) {
- FX_FLOAT orig_x, orig_y;
- orig_x = col * pPattern->m_XStep;
- orig_y = row * pPattern->m_YStep;
- mtPattern2Device.Transform(orig_x, orig_y);
- CFX_AffineMatrix matrix = *pObj2Device;
- matrix.Translate(orig_x - mtPattern2Device.e, orig_y - mtPattern2Device.f);
- m_pDevice->SaveState();
- CPDF_RenderStatus status;
- status.Initialize(m_pContext, m_pDevice, NULL, NULL, this, pStates, &m_Options,
- pPattern->m_pForm->m_Transparency, m_bDropObjects, pFormResource);
- status.RenderObjectList(pPattern->m_pForm, &matrix);
- m_pDevice->RestoreState();
- }
+void CPDF_RenderStatus::DrawTilingPattern(CPDF_TilingPattern* pPattern,
+ CPDF_PageObject* pPageObj,
+ const CFX_AffineMatrix* pObj2Device,
+ FX_BOOL bStroke) {
+ if (!pPattern->Load()) {
+ return;
+ }
+ m_pDevice->SaveState();
+ if (pPageObj->m_Type == PDFPAGE_PATH) {
+ if (!SelectClipPath((CPDF_PathObject*)pPageObj, pObj2Device, bStroke)) {
+ m_pDevice->RestoreState();
+ return;
+ }
+ } else if (pPageObj->m_Type == PDFPAGE_IMAGE) {
+ FX_RECT rect = pPageObj->GetBBox(pObj2Device);
+ m_pDevice->SetClip_Rect(&rect);
+ } else {
+ return;
+ }
+ FX_RECT clip_box = m_pDevice->GetClipBox();
+ if (clip_box.IsEmpty()) {
+ m_pDevice->RestoreState();
+ return;
+ }
+ CFX_Matrix dCTM = m_pDevice->GetCTM();
+ FX_FLOAT sa = FXSYS_fabs(dCTM.a);
+ FX_FLOAT sd = FXSYS_fabs(dCTM.d);
+ clip_box.right = clip_box.left + (int32_t)FXSYS_ceil(clip_box.Width() * sa);
+ clip_box.bottom = clip_box.top + (int32_t)FXSYS_ceil(clip_box.Height() * sd);
+ CFX_AffineMatrix mtPattern2Device = pPattern->m_Pattern2Form;
+ mtPattern2Device.Concat(*pObj2Device);
+ GetScaledMatrix(mtPattern2Device);
+ FX_BOOL bAligned = FALSE;
+ if (pPattern->m_BBox.left == 0 && pPattern->m_BBox.bottom == 0 &&
+ pPattern->m_BBox.right == pPattern->m_XStep &&
+ pPattern->m_BBox.top == pPattern->m_YStep &&
+ (mtPattern2Device.IsScaled() || mtPattern2Device.Is90Rotated())) {
+ bAligned = TRUE;
+ }
+ CFX_FloatRect cell_bbox = pPattern->m_BBox;
+ mtPattern2Device.TransformRect(cell_bbox);
+ int width = (int)FXSYS_ceil(cell_bbox.Width());
+ int height = (int)FXSYS_ceil(cell_bbox.Height());
+ if (width == 0) {
+ width = 1;
+ }
+ if (height == 0) {
+ height = 1;
+ }
+ int min_col, max_col, min_row, max_row;
+ CFX_AffineMatrix mtDevice2Pattern;
+ mtDevice2Pattern.SetReverse(mtPattern2Device);
+ CFX_FloatRect clip_box_p(clip_box);
+ clip_box_p.Transform(&mtDevice2Pattern);
+ min_col = (int)FXSYS_ceil(
+ FXSYS_Div(clip_box_p.left - pPattern->m_BBox.right, pPattern->m_XStep));
+ max_col = (int)FXSYS_floor(
+ FXSYS_Div(clip_box_p.right - pPattern->m_BBox.left, pPattern->m_XStep));
+ min_row = (int)FXSYS_ceil(
+ FXSYS_Div(clip_box_p.bottom - pPattern->m_BBox.top, pPattern->m_YStep));
+ max_row = (int)FXSYS_floor(
+ FXSYS_Div(clip_box_p.top - pPattern->m_BBox.bottom, pPattern->m_YStep));
+ if (width > clip_box.Width() || height > clip_box.Height() ||
+ width * height > clip_box.Width() * clip_box.Height()) {
+ CPDF_GraphicStates* pStates = NULL;
+ if (!pPattern->m_bColored) {
+ pStates = CloneObjStates(pPageObj, bStroke);
+ }
+ CPDF_Dictionary* pFormResource = NULL;
+ if (pPattern->m_pForm->m_pFormDict) {
+ pFormResource =
+ pPattern->m_pForm->m_pFormDict->GetDict(FX_BSTRC("Resources"));
+ }
+ for (int col = min_col; col <= max_col; col++)
+ for (int row = min_row; row <= max_row; row++) {
+ FX_FLOAT orig_x, orig_y;
+ orig_x = col * pPattern->m_XStep;
+ orig_y = row * pPattern->m_YStep;
+ mtPattern2Device.Transform(orig_x, orig_y);
+ CFX_AffineMatrix matrix = *pObj2Device;
+ matrix.Translate(orig_x - mtPattern2Device.e,
+ orig_y - mtPattern2Device.f);
+ m_pDevice->SaveState();
+ CPDF_RenderStatus status;
+ status.Initialize(m_pContext, m_pDevice, NULL, NULL, this, pStates,
+ &m_Options, pPattern->m_pForm->m_Transparency,
+ m_bDropObjects, pFormResource);
+ status.RenderObjectList(pPattern->m_pForm, &matrix);
m_pDevice->RestoreState();
- delete pStates;
- return;
- }
- if (bAligned) {
- int orig_x = FXSYS_round(mtPattern2Device.e);
- int orig_y = FXSYS_round(mtPattern2Device.f);
- min_col = (clip_box.left - orig_x) / width;
- if (clip_box.left < orig_x) {
- min_col --;
- }
- max_col = (clip_box.right - orig_x) / width;
- if (clip_box.right <= orig_x) {
- max_col --;
- }
- min_row = (clip_box.top - orig_y) / height;
- if (clip_box.top < orig_y) {
- min_row --;
+ }
+ m_pDevice->RestoreState();
+ delete pStates;
+ return;
+ }
+ if (bAligned) {
+ int orig_x = FXSYS_round(mtPattern2Device.e);
+ int orig_y = FXSYS_round(mtPattern2Device.f);
+ min_col = (clip_box.left - orig_x) / width;
+ if (clip_box.left < orig_x) {
+ min_col--;
+ }
+ max_col = (clip_box.right - orig_x) / width;
+ if (clip_box.right <= orig_x) {
+ max_col--;
+ }
+ min_row = (clip_box.top - orig_y) / height;
+ if (clip_box.top < orig_y) {
+ min_row--;
+ }
+ max_row = (clip_box.bottom - orig_y) / height;
+ if (clip_box.bottom <= orig_y) {
+ max_row--;
+ }
+ }
+ FX_FLOAT left_offset = cell_bbox.left - mtPattern2Device.e;
+ FX_FLOAT top_offset = cell_bbox.bottom - mtPattern2Device.f;
+ CFX_DIBitmap* pPatternBitmap = NULL;
+ if (width * height < 16) {
+ CFX_DIBitmap* pEnlargedBitmap =
+ DrawPatternBitmap(m_pContext->m_pDocument, m_pContext->m_pPageCache,
+ pPattern, pObj2Device, 8, 8, m_Options.m_Flags);
+ pPatternBitmap = pEnlargedBitmap->StretchTo(width, height);
+ delete pEnlargedBitmap;
+ } else {
+ pPatternBitmap = DrawPatternBitmap(
+ m_pContext->m_pDocument, m_pContext->m_pPageCache, pPattern,
+ pObj2Device, width, height, m_Options.m_Flags);
+ }
+ if (pPatternBitmap == NULL) {
+ m_pDevice->RestoreState();
+ return;
+ }
+ if (m_Options.m_ColorMode == RENDER_COLOR_GRAY) {
+ pPatternBitmap->ConvertColorScale(m_Options.m_ForeColor,
+ m_Options.m_BackColor);
+ }
+ FX_ARGB fill_argb = GetFillArgb(pPageObj);
+ int clip_width = clip_box.right - clip_box.left;
+ int clip_height = clip_box.bottom - clip_box.top;
+ CFX_DIBitmap screen;
+ if (!screen.Create(clip_width, clip_height, FXDIB_Argb)) {
+ return;
+ }
+ screen.Clear(0);
+ FX_DWORD* src_buf = (FX_DWORD*)pPatternBitmap->GetBuffer();
+ for (int col = min_col; col <= max_col; col++) {
+ for (int row = min_row; row <= max_row; row++) {
+ int start_x, start_y;
+ if (bAligned) {
+ start_x = FXSYS_round(mtPattern2Device.e) + col * width - clip_box.left;
+ start_y = FXSYS_round(mtPattern2Device.f) + row * height - clip_box.top;
+ } else {
+ FX_FLOAT orig_x = col * pPattern->m_XStep;
+ FX_FLOAT orig_y = row * pPattern->m_YStep;
+ mtPattern2Device.Transform(orig_x, orig_y);
+ start_x = FXSYS_round(orig_x + left_offset) - clip_box.left;
+ start_y = FXSYS_round(orig_y + top_offset) - clip_box.top;
+ }
+ if (width == 1 && height == 1) {
+ if (start_x < 0 || start_x >= clip_box.Width() || start_y < 0 ||
+ start_y >= clip_box.Height()) {
+ continue;
}
- max_row = (clip_box.bottom - orig_y) / height;
- if (clip_box.bottom <= orig_y) {
- max_row --;
+ FX_DWORD* dest_buf =
+ (FX_DWORD*)(screen.GetBuffer() + screen.GetPitch() * start_y +
+ start_x * 4);
+ if (pPattern->m_bColored) {
+ *dest_buf = *src_buf;
+ } else {
+ *dest_buf = (*(uint8_t*)src_buf << 24) | (fill_argb & 0xffffff);
}
- }
- FX_FLOAT left_offset = cell_bbox.left - mtPattern2Device.e;
- FX_FLOAT top_offset = cell_bbox.bottom - mtPattern2Device.f;
- CFX_DIBitmap* pPatternBitmap = NULL;
- if (width * height < 16) {
- CFX_DIBitmap* pEnlargedBitmap = DrawPatternBitmap(m_pContext->m_pDocument, m_pContext->m_pPageCache, pPattern, pObj2Device, 8, 8, m_Options.m_Flags);
- pPatternBitmap = pEnlargedBitmap->StretchTo(width, height);
- delete pEnlargedBitmap;
- } else {
- pPatternBitmap = DrawPatternBitmap(m_pContext->m_pDocument, m_pContext->m_pPageCache, pPattern, pObj2Device, width, height, m_Options.m_Flags);
- }
- if (pPatternBitmap == NULL) {
- m_pDevice->RestoreState();
- return;
- }
- if (m_Options.m_ColorMode == RENDER_COLOR_GRAY) {
- pPatternBitmap->ConvertColorScale(m_Options.m_ForeColor, m_Options.m_BackColor);
- }
- FX_ARGB fill_argb = GetFillArgb(pPageObj);
- int clip_width = clip_box.right - clip_box.left;
- int clip_height = clip_box.bottom - clip_box.top;
- CFX_DIBitmap screen;
- if (!screen.Create(clip_width, clip_height, FXDIB_Argb)) {
- return;
- }
- screen.Clear(0);
- FX_DWORD* src_buf = (FX_DWORD*)pPatternBitmap->GetBuffer();
- for (int col = min_col; col <= max_col; col ++) {
- for (int row = min_row; row <= max_row; row ++) {
- int start_x, start_y;
- if (bAligned) {
- start_x = FXSYS_round(mtPattern2Device.e) + col * width - clip_box.left;
- start_y = FXSYS_round(mtPattern2Device.f) + row * height - clip_box.top;
- } else {
- FX_FLOAT orig_x = col * pPattern->m_XStep;
- FX_FLOAT orig_y = row * pPattern->m_YStep;
- mtPattern2Device.Transform(orig_x, orig_y);
- start_x = FXSYS_round(orig_x + left_offset) - clip_box.left;
- start_y = FXSYS_round(orig_y + top_offset) - clip_box.top;
- }
- if (width == 1 && height == 1) {
- if (start_x < 0 || start_x >= clip_box.Width() || start_y < 0 || start_y >= clip_box.Height()) {
- continue;
- }
- FX_DWORD* dest_buf = (FX_DWORD*)(screen.GetBuffer() + screen.GetPitch() * start_y + start_x * 4);
- if (pPattern->m_bColored) {
- *dest_buf = *src_buf;
- } else {
- *dest_buf = (*(uint8_t*)src_buf << 24) | (fill_argb & 0xffffff);
- }
- } else {
- if (pPattern->m_bColored) {
- screen.CompositeBitmap(start_x, start_y, width, height, pPatternBitmap, 0, 0);
- } else {
- screen.CompositeMask(start_x, start_y, width, height, pPatternBitmap, fill_argb, 0, 0);
- }
- }
+ } else {
+ if (pPattern->m_bColored) {
+ screen.CompositeBitmap(start_x, start_y, width, height,
+ pPatternBitmap, 0, 0);
+ } else {
+ screen.CompositeMask(start_x, start_y, width, height, pPatternBitmap,
+ fill_argb, 0, 0);
}
+ }
}
- CompositeDIBitmap(&screen, clip_box.left, clip_box.top, 0, 255, FXDIB_BLEND_NORMAL, FALSE);
- m_pDevice->RestoreState();
- delete pPatternBitmap;
+ }
+ CompositeDIBitmap(&screen, clip_box.left, clip_box.top, 0, 255,
+ FXDIB_BLEND_NORMAL, FALSE);
+ m_pDevice->RestoreState();
+ delete pPatternBitmap;
}
-void CPDF_RenderStatus::DrawPathWithPattern(CPDF_PathObject* pPathObj, const CFX_AffineMatrix* pObj2Device, CPDF_Color* pColor, FX_BOOL bStroke)
-{
- CPDF_Pattern* pattern = pColor->GetPattern();
- if (pattern == NULL) {
- return;
- }
- if(pattern->m_PatternType == PATTERN_TILING) {
- DrawTilingPattern((CPDF_TilingPattern*)pattern, pPathObj, pObj2Device, bStroke);
- } else {
- DrawShadingPattern((CPDF_ShadingPattern*)pattern, pPathObj, pObj2Device, bStroke);
- }
+void CPDF_RenderStatus::DrawPathWithPattern(CPDF_PathObject* pPathObj,
+ const CFX_AffineMatrix* pObj2Device,
+ CPDF_Color* pColor,
+ FX_BOOL bStroke) {
+ CPDF_Pattern* pattern = pColor->GetPattern();
+ if (pattern == NULL) {
+ return;
+ }
+ if (pattern->m_PatternType == PATTERN_TILING) {
+ DrawTilingPattern((CPDF_TilingPattern*)pattern, pPathObj, pObj2Device,
+ bStroke);
+ } else {
+ DrawShadingPattern((CPDF_ShadingPattern*)pattern, pPathObj, pObj2Device,
+ bStroke);
+ }
}
-void CPDF_RenderStatus::ProcessPathPattern(CPDF_PathObject* pPathObj, const CFX_AffineMatrix* pObj2Device, int& filltype, FX_BOOL& bStroke)
-{
- if(filltype) {
- CPDF_Color& FillColor = *pPathObj->m_ColorState.GetFillColor();
- if(FillColor.m_pCS && FillColor.m_pCS->GetFamily() == PDFCS_PATTERN) {
- DrawPathWithPattern(pPathObj, pObj2Device, &FillColor, FALSE);
- filltype = 0;
- }
- }
- if(bStroke) {
- CPDF_Color& StrokeColor = *pPathObj->m_ColorState.GetStrokeColor();
- if(StrokeColor.m_pCS && StrokeColor.m_pCS->GetFamily() == PDFCS_PATTERN) {
- DrawPathWithPattern(pPathObj, pObj2Device, &StrokeColor, TRUE);
- bStroke = FALSE;
- }
- }
+void CPDF_RenderStatus::ProcessPathPattern(CPDF_PathObject* pPathObj,
+ const CFX_AffineMatrix* pObj2Device,
+ int& filltype,
+ FX_BOOL& bStroke) {
+ if (filltype) {
+ CPDF_Color& FillColor = *pPathObj->m_ColorState.GetFillColor();
+ if (FillColor.m_pCS && FillColor.m_pCS->GetFamily() == PDFCS_PATTERN) {
+ DrawPathWithPattern(pPathObj, pObj2Device, &FillColor, FALSE);
+ filltype = 0;
+ }
+ }
+ if (bStroke) {
+ CPDF_Color& StrokeColor = *pPathObj->m_ColorState.GetStrokeColor();
+ if (StrokeColor.m_pCS && StrokeColor.m_pCS->GetFamily() == PDFCS_PATTERN) {
+ DrawPathWithPattern(pPathObj, pObj2Device, &StrokeColor, TRUE);
+ bStroke = FALSE;
+ }
+ }
}
diff --git a/core/src/fpdfapi/fpdf_render/fpdf_render_text.cpp b/core/src/fpdfapi/fpdf_render/fpdf_render_text.cpp
index ad5dc58a1c..7d6921f544 100644
--- a/core/src/fpdfapi/fpdf_render/fpdf_render_text.cpp
+++ b/core/src/fpdfapi/fpdf_render/fpdf_render_text.cpp
@@ -10,723 +10,791 @@
#include "../fpdf_page/pageint.h"
#include "render_int.h"
extern FX_BOOL IsAvailableMatrix(const CFX_AffineMatrix& matrix);
-CPDF_Type3Cache::~CPDF_Type3Cache()
-{
- FX_POSITION pos = m_SizeMap.GetStartPosition();
- CFX_ByteString Key;
- CPDF_Type3Glyphs* pSizeCache = NULL;
- while(pos) {
- pSizeCache = (CPDF_Type3Glyphs*)m_SizeMap.GetNextValue(pos);
- delete pSizeCache;
- }
- m_SizeMap.RemoveAll();
+CPDF_Type3Cache::~CPDF_Type3Cache() {
+ FX_POSITION pos = m_SizeMap.GetStartPosition();
+ CFX_ByteString Key;
+ CPDF_Type3Glyphs* pSizeCache = NULL;
+ while (pos) {
+ pSizeCache = (CPDF_Type3Glyphs*)m_SizeMap.GetNextValue(pos);
+ delete pSizeCache;
+ }
+ m_SizeMap.RemoveAll();
}
-CFX_GlyphBitmap* CPDF_Type3Cache::LoadGlyph(FX_DWORD charcode, const CFX_AffineMatrix* pMatrix, FX_FLOAT retinaScaleX, FX_FLOAT retinaScaleY)
-{
- _CPDF_UniqueKeyGen keygen;
- keygen.Generate(4, FXSYS_round(pMatrix->a * 10000), FXSYS_round(pMatrix->b * 10000),
- FXSYS_round(pMatrix->c * 10000), FXSYS_round(pMatrix->d * 10000));
- CFX_ByteStringC FaceGlyphsKey(keygen.m_Key, keygen.m_KeyLen);
- CPDF_Type3Glyphs* pSizeCache = NULL;
- if(!m_SizeMap.Lookup(FaceGlyphsKey, (void*&)pSizeCache)) {
- pSizeCache = new CPDF_Type3Glyphs;
- m_SizeMap.SetAt(FaceGlyphsKey, pSizeCache);
- }
- CFX_GlyphBitmap* pGlyphBitmap;
- if(pSizeCache->m_GlyphMap.Lookup((void*)(uintptr_t)charcode, (void*&)pGlyphBitmap)) {
- return pGlyphBitmap;
- }
- pGlyphBitmap = RenderGlyph(pSizeCache, charcode, pMatrix, retinaScaleX, retinaScaleY);
- pSizeCache->m_GlyphMap.SetAt((void*)(uintptr_t)charcode, pGlyphBitmap);
+CFX_GlyphBitmap* CPDF_Type3Cache::LoadGlyph(FX_DWORD charcode,
+ const CFX_AffineMatrix* pMatrix,
+ FX_FLOAT retinaScaleX,
+ FX_FLOAT retinaScaleY) {
+ _CPDF_UniqueKeyGen keygen;
+ keygen.Generate(
+ 4, FXSYS_round(pMatrix->a * 10000), FXSYS_round(pMatrix->b * 10000),
+ FXSYS_round(pMatrix->c * 10000), FXSYS_round(pMatrix->d * 10000));
+ CFX_ByteStringC FaceGlyphsKey(keygen.m_Key, keygen.m_KeyLen);
+ CPDF_Type3Glyphs* pSizeCache = NULL;
+ if (!m_SizeMap.Lookup(FaceGlyphsKey, (void*&)pSizeCache)) {
+ pSizeCache = new CPDF_Type3Glyphs;
+ m_SizeMap.SetAt(FaceGlyphsKey, pSizeCache);
+ }
+ CFX_GlyphBitmap* pGlyphBitmap;
+ if (pSizeCache->m_GlyphMap.Lookup((void*)(uintptr_t)charcode,
+ (void*&)pGlyphBitmap)) {
return pGlyphBitmap;
+ }
+ pGlyphBitmap =
+ RenderGlyph(pSizeCache, charcode, pMatrix, retinaScaleX, retinaScaleY);
+ pSizeCache->m_GlyphMap.SetAt((void*)(uintptr_t)charcode, pGlyphBitmap);
+ return pGlyphBitmap;
}
-CPDF_Type3Glyphs::~CPDF_Type3Glyphs()
-{
- FX_POSITION pos = m_GlyphMap.GetStartPosition();
- void* Key;
- CFX_GlyphBitmap* pGlyphBitmap;
- while(pos) {
- m_GlyphMap.GetNextAssoc(pos, Key, (void*&)pGlyphBitmap);
- delete pGlyphBitmap;
- }
+CPDF_Type3Glyphs::~CPDF_Type3Glyphs() {
+ FX_POSITION pos = m_GlyphMap.GetStartPosition();
+ void* Key;
+ CFX_GlyphBitmap* pGlyphBitmap;
+ while (pos) {
+ m_GlyphMap.GetNextAssoc(pos, Key, (void*&)pGlyphBitmap);
+ delete pGlyphBitmap;
+ }
}
-static int _AdjustBlue(FX_FLOAT pos, int& count, int blues[])
-{
- FX_FLOAT min_distance = 1000000.0f * 1.0f;
- int closest_pos = -1;
- for (int i = 0; i < count; i ++) {
- FX_FLOAT distance = (FX_FLOAT)FXSYS_fabs(pos - (FX_FLOAT)blues[i]);
- if (distance < 1.0f * 80.0f / 100.0f && distance < min_distance) {
- min_distance = distance;
- closest_pos = i;
- }
- }
- if (closest_pos >= 0) {
- return blues[closest_pos];
- }
- int new_pos = FXSYS_round(pos);
- if (count == TYPE3_MAX_BLUES) {
- return new_pos;
- }
- blues[count++] = new_pos;
+static int _AdjustBlue(FX_FLOAT pos, int& count, int blues[]) {
+ FX_FLOAT min_distance = 1000000.0f * 1.0f;
+ int closest_pos = -1;
+ for (int i = 0; i < count; i++) {
+ FX_FLOAT distance = (FX_FLOAT)FXSYS_fabs(pos - (FX_FLOAT)blues[i]);
+ if (distance < 1.0f * 80.0f / 100.0f && distance < min_distance) {
+ min_distance = distance;
+ closest_pos = i;
+ }
+ }
+ if (closest_pos >= 0) {
+ return blues[closest_pos];
+ }
+ int new_pos = FXSYS_round(pos);
+ if (count == TYPE3_MAX_BLUES) {
return new_pos;
+ }
+ blues[count++] = new_pos;
+ return new_pos;
}
-void CPDF_Type3Glyphs::AdjustBlue(FX_FLOAT top, FX_FLOAT bottom, int& top_line, int& bottom_line)
-{
- top_line = _AdjustBlue(top, m_TopBlueCount, m_TopBlue);
- bottom_line = _AdjustBlue(bottom, m_BottomBlueCount, m_BottomBlue);
+void CPDF_Type3Glyphs::AdjustBlue(FX_FLOAT top,
+ FX_FLOAT bottom,
+ int& top_line,
+ int& bottom_line) {
+ top_line = _AdjustBlue(top, m_TopBlueCount, m_TopBlue);
+ bottom_line = _AdjustBlue(bottom, m_BottomBlueCount, m_BottomBlue);
}
-static FX_BOOL _IsScanLine1bpp(uint8_t* pBuf, int width)
-{
- int size = width / 8;
- for (int i = 0; i < size; i ++)
- if (pBuf[i]) {
- return TRUE;
- }
- if (width % 8)
- if (pBuf[width / 8] & (0xff << (8 - width % 8))) {
- return TRUE;
- }
- return FALSE;
-}
-static FX_BOOL _IsScanLine8bpp(uint8_t* pBuf, int width)
-{
- for (int i = 0; i < width; i ++)
- if (pBuf[i] > 0x40) {
- return TRUE;
- }
- return FALSE;
+static FX_BOOL _IsScanLine1bpp(uint8_t* pBuf, int width) {
+ int size = width / 8;
+ for (int i = 0; i < size; i++)
+ if (pBuf[i]) {
+ return TRUE;
+ }
+ if (width % 8)
+ if (pBuf[width / 8] & (0xff << (8 - width % 8))) {
+ return TRUE;
+ }
+ return FALSE;
}
-static int _DetectFirstLastScan(const CFX_DIBitmap* pBitmap, FX_BOOL bFirst)
-{
- int height = pBitmap->GetHeight(), pitch = pBitmap->GetPitch(), width = pBitmap->GetWidth();
- int bpp = pBitmap->GetBPP();
- if (bpp > 8) {
- width *= bpp / 8;
- }
- uint8_t* pBuf = pBitmap->GetBuffer();
- int line = bFirst ? 0 : height - 1;
- int line_step = bFirst ? 1 : -1;
- int line_end = bFirst ? height : -1;
- while (line != line_end) {
- if (bpp == 1) {
- if (_IsScanLine1bpp(pBuf + line * pitch, width)) {
- return line;
- }
- } else {
- if (_IsScanLine8bpp(pBuf + line * pitch, width)) {
- return line;
- }
- }
- line += line_step;
+static FX_BOOL _IsScanLine8bpp(uint8_t* pBuf, int width) {
+ for (int i = 0; i < width; i++)
+ if (pBuf[i] > 0x40) {
+ return TRUE;
}
- return -1;
+ return FALSE;
}
-CFX_GlyphBitmap* CPDF_Type3Cache::RenderGlyph(CPDF_Type3Glyphs* pSize, FX_DWORD charcode, const CFX_AffineMatrix* pMatrix, FX_FLOAT retinaScaleX, FX_FLOAT retinaScaleY)
-{
- CPDF_Type3Char* pChar = m_pFont->LoadChar(charcode);
- if (pChar == NULL || pChar->m_pBitmap == NULL) {
- return NULL;
- }
- CFX_DIBitmap* pBitmap = pChar->m_pBitmap;
- CFX_AffineMatrix image_matrix, text_matrix;
- image_matrix = pChar->m_ImageMatrix;
- text_matrix.Set(pMatrix->a, pMatrix->b, pMatrix->c, pMatrix->d, 0, 0);
- image_matrix.Concat(text_matrix);
- CFX_DIBitmap* pResBitmap = NULL;
- int left, top;
- if (FXSYS_fabs(image_matrix.b) < FXSYS_fabs(image_matrix.a) / 100 && FXSYS_fabs(image_matrix.c) < FXSYS_fabs(image_matrix.d) / 100) {
- int top_line, bottom_line;
- top_line = _DetectFirstLastScan(pBitmap, TRUE);
- bottom_line = _DetectFirstLastScan(pBitmap, FALSE);
- if (top_line == 0 && bottom_line == pBitmap->GetHeight() - 1) {
- FX_FLOAT top_y = image_matrix.d + image_matrix.f;
- FX_FLOAT bottom_y = image_matrix.f;
- FX_BOOL bFlipped = top_y > bottom_y;
- if (bFlipped) {
- FX_FLOAT temp = top_y;
- top_y = bottom_y;
- bottom_y = temp;
- }
- pSize->AdjustBlue(top_y, bottom_y, top_line, bottom_line);
- pResBitmap = pBitmap->StretchTo((int)(FXSYS_round(image_matrix.a) * retinaScaleX), (int)((bFlipped ? top_line - bottom_line : bottom_line - top_line) * retinaScaleY));
- top = top_line;
- if (image_matrix.a < 0) {
- image_matrix.Scale(retinaScaleX, retinaScaleY);
- left = FXSYS_round(image_matrix.e + image_matrix.a);
- } else {
- left = FXSYS_round(image_matrix.e);
- }
- } else {
- }
+static int _DetectFirstLastScan(const CFX_DIBitmap* pBitmap, FX_BOOL bFirst) {
+ int height = pBitmap->GetHeight(), pitch = pBitmap->GetPitch(),
+ width = pBitmap->GetWidth();
+ int bpp = pBitmap->GetBPP();
+ if (bpp > 8) {
+ width *= bpp / 8;
+ }
+ uint8_t* pBuf = pBitmap->GetBuffer();
+ int line = bFirst ? 0 : height - 1;
+ int line_step = bFirst ? 1 : -1;
+ int line_end = bFirst ? height : -1;
+ while (line != line_end) {
+ if (bpp == 1) {
+ if (_IsScanLine1bpp(pBuf + line * pitch, width)) {
+ return line;
+ }
+ } else {
+ if (_IsScanLine8bpp(pBuf + line * pitch, width)) {
+ return line;
+ }
}
- if (pResBitmap == NULL) {
+ line += line_step;
+ }
+ return -1;
+}
+CFX_GlyphBitmap* CPDF_Type3Cache::RenderGlyph(CPDF_Type3Glyphs* pSize,
+ FX_DWORD charcode,
+ const CFX_AffineMatrix* pMatrix,
+ FX_FLOAT retinaScaleX,
+ FX_FLOAT retinaScaleY) {
+ CPDF_Type3Char* pChar = m_pFont->LoadChar(charcode);
+ if (pChar == NULL || pChar->m_pBitmap == NULL) {
+ return NULL;
+ }
+ CFX_DIBitmap* pBitmap = pChar->m_pBitmap;
+ CFX_AffineMatrix image_matrix, text_matrix;
+ image_matrix = pChar->m_ImageMatrix;
+ text_matrix.Set(pMatrix->a, pMatrix->b, pMatrix->c, pMatrix->d, 0, 0);
+ image_matrix.Concat(text_matrix);
+ CFX_DIBitmap* pResBitmap = NULL;
+ int left, top;
+ if (FXSYS_fabs(image_matrix.b) < FXSYS_fabs(image_matrix.a) / 100 &&
+ FXSYS_fabs(image_matrix.c) < FXSYS_fabs(image_matrix.d) / 100) {
+ int top_line, bottom_line;
+ top_line = _DetectFirstLastScan(pBitmap, TRUE);
+ bottom_line = _DetectFirstLastScan(pBitmap, FALSE);
+ if (top_line == 0 && bottom_line == pBitmap->GetHeight() - 1) {
+ FX_FLOAT top_y = image_matrix.d + image_matrix.f;
+ FX_FLOAT bottom_y = image_matrix.f;
+ FX_BOOL bFlipped = top_y > bottom_y;
+ if (bFlipped) {
+ FX_FLOAT temp = top_y;
+ top_y = bottom_y;
+ bottom_y = temp;
+ }
+ pSize->AdjustBlue(top_y, bottom_y, top_line, bottom_line);
+ pResBitmap = pBitmap->StretchTo(
+ (int)(FXSYS_round(image_matrix.a) * retinaScaleX),
+ (int)((bFlipped ? top_line - bottom_line : bottom_line - top_line) *
+ retinaScaleY));
+ top = top_line;
+ if (image_matrix.a < 0) {
image_matrix.Scale(retinaScaleX, retinaScaleY);
- pResBitmap = pBitmap->TransformTo(&image_matrix, left, top);
- }
- if (pResBitmap == NULL) {
- return NULL;
+ left = FXSYS_round(image_matrix.e + image_matrix.a);
+ } else {
+ left = FXSYS_round(image_matrix.e);
+ }
+ } else {
}
- CFX_GlyphBitmap* pGlyph = new CFX_GlyphBitmap;
- pGlyph->m_Left = left;
- pGlyph->m_Top = -top;
- pGlyph->m_Bitmap.TakeOver(pResBitmap);
- delete pResBitmap;
- return pGlyph;
+ }
+ if (pResBitmap == NULL) {
+ image_matrix.Scale(retinaScaleX, retinaScaleY);
+ pResBitmap = pBitmap->TransformTo(&image_matrix, left, top);
+ }
+ if (pResBitmap == NULL) {
+ return NULL;
+ }
+ CFX_GlyphBitmap* pGlyph = new CFX_GlyphBitmap;
+ pGlyph->m_Left = left;
+ pGlyph->m_Top = -top;
+ pGlyph->m_Bitmap.TakeOver(pResBitmap);
+ delete pResBitmap;
+ return pGlyph;
}
-void _CPDF_UniqueKeyGen::Generate(int count, ...)
-{
- va_list argList;
- va_start(argList, count);
- for (int i = 0; i < count; i ++) {
- int p = va_arg(argList, int);
- ((FX_DWORD*)m_Key)[i] = p;
- }
- va_end(argList);
- m_KeyLen = count * sizeof(FX_DWORD);
+void _CPDF_UniqueKeyGen::Generate(int count, ...) {
+ va_list argList;
+ va_start(argList, count);
+ for (int i = 0; i < count; i++) {
+ int p = va_arg(argList, int);
+ ((FX_DWORD*)m_Key)[i] = p;
+ }
+ va_end(argList);
+ m_KeyLen = count * sizeof(FX_DWORD);
}
-FX_BOOL CPDF_RenderStatus::ProcessText(const CPDF_TextObject* textobj, const CFX_AffineMatrix* pObj2Device, CFX_PathData* pClippingPath)
-{
- if(textobj->m_nChars == 0) {
- return TRUE;
- }
- int text_render_mode = textobj->m_TextState.GetObject()->m_TextMode;
- if (text_render_mode == 3) {
- return TRUE;
- }
- CPDF_Font* pFont = textobj->m_TextState.GetFont();
- if (pFont->GetFontType() == PDFFONT_TYPE3) {
- return ProcessType3Text(textobj, pObj2Device);
- }
- FX_BOOL bFill = FALSE, bStroke = FALSE, bClip = FALSE;
- if (pClippingPath) {
- bClip = TRUE;
- } else {
- switch (text_render_mode) {
- case 0:
- case 4:
- bFill = TRUE;
- break;
- case 1:
- case 5:
- if (pFont->GetFace() == NULL && !(pFont->GetSubstFont()->m_SubstFlags & FXFONT_SUBST_GLYPHPATH)) {
- bFill = TRUE;
- } else {
- bStroke = TRUE;
- }
- break;
- case 2:
- case 6:
- if (pFont->GetFace() == NULL && !(pFont->GetSubstFont()->m_SubstFlags & FXFONT_SUBST_GLYPHPATH)) {
- bFill = TRUE;
- } else {
- bFill = bStroke = TRUE;
- }
- break;
- case 3:
- case 7:
- return TRUE;
- default:
- bFill = TRUE;
- }
- }
- FX_ARGB stroke_argb = 0, fill_argb = 0;
- FX_BOOL bPattern = FALSE;
- if (bStroke) {
- if (textobj->m_ColorState.GetStrokeColor()->IsPattern()) {
- bPattern = TRUE;
+FX_BOOL CPDF_RenderStatus::ProcessText(const CPDF_TextObject* textobj,
+ const CFX_AffineMatrix* pObj2Device,
+ CFX_PathData* pClippingPath) {
+ if (textobj->m_nChars == 0) {
+ return TRUE;
+ }
+ int text_render_mode = textobj->m_TextState.GetObject()->m_TextMode;
+ if (text_render_mode == 3) {
+ return TRUE;
+ }
+ CPDF_Font* pFont = textobj->m_TextState.GetFont();
+ if (pFont->GetFontType() == PDFFONT_TYPE3) {
+ return ProcessType3Text(textobj, pObj2Device);
+ }
+ FX_BOOL bFill = FALSE, bStroke = FALSE, bClip = FALSE;
+ if (pClippingPath) {
+ bClip = TRUE;
+ } else {
+ switch (text_render_mode) {
+ case 0:
+ case 4:
+ bFill = TRUE;
+ break;
+ case 1:
+ case 5:
+ if (pFont->GetFace() == NULL &&
+ !(pFont->GetSubstFont()->m_SubstFlags & FXFONT_SUBST_GLYPHPATH)) {
+ bFill = TRUE;
} else {
- stroke_argb = GetStrokeArgb(textobj);
- }
- }
- if (bFill) {
- if (textobj->m_ColorState.GetFillColor()->IsPattern()) {
- bPattern = TRUE;
+ bStroke = TRUE;
+ }
+ break;
+ case 2:
+ case 6:
+ if (pFont->GetFace() == NULL &&
+ !(pFont->GetSubstFont()->m_SubstFlags & FXFONT_SUBST_GLYPHPATH)) {
+ bFill = TRUE;
} else {
- fill_argb = GetFillArgb(textobj);
+ bFill = bStroke = TRUE;
}
- }
- CFX_AffineMatrix text_matrix;
- textobj->GetTextMatrix(&text_matrix);
- if(IsAvailableMatrix(text_matrix) == FALSE) {
- return TRUE;
- }
- FX_FLOAT font_size = textobj->m_TextState.GetFontSize();
- if (bPattern) {
- DrawTextPathWithPattern(textobj, pObj2Device, pFont, font_size, &text_matrix, bFill, bStroke);
+ break;
+ case 3:
+ case 7:
return TRUE;
+ default:
+ bFill = TRUE;
+ }
+ }
+ FX_ARGB stroke_argb = 0, fill_argb = 0;
+ FX_BOOL bPattern = FALSE;
+ if (bStroke) {
+ if (textobj->m_ColorState.GetStrokeColor()->IsPattern()) {
+ bPattern = TRUE;
+ } else {
+ stroke_argb = GetStrokeArgb(textobj);
}
- if (bClip || bStroke) {
- const CFX_AffineMatrix* pDeviceMatrix = pObj2Device;
- CFX_AffineMatrix device_matrix;
- if (bStroke) {
- const FX_FLOAT* pCTM = textobj->m_TextState.GetObject()->m_CTM;
- if (pCTM[0] != 1.0f || pCTM[3] != 1.0f) {
- CFX_AffineMatrix ctm(pCTM[0], pCTM[1], pCTM[2], pCTM[3], 0, 0);
- text_matrix.ConcatInverse(ctm);
- device_matrix.Copy(ctm);
- device_matrix.Concat(*pObj2Device);
- pDeviceMatrix = &device_matrix;
- }
- }
- int flag = 0;
- if (bStroke && bFill) {
- flag |= FX_FILL_STROKE;
- flag |= FX_STROKE_TEXT_MODE;
- }
- const CPDF_GeneralStateData* pGeneralData = ((CPDF_PageObject*)textobj)->m_GeneralState;
- if (pGeneralData && pGeneralData->m_StrokeAdjust) {
- flag |= FX_STROKE_ADJUST;
- }
- if (m_Options.m_Flags & RENDER_NOTEXTSMOOTH) {
- flag |= FXFILL_NOPATHSMOOTH;
- }
- return CPDF_TextRenderer::DrawTextPath(m_pDevice, textobj->m_nChars, textobj->m_pCharCodes, textobj->m_pCharPos, pFont, font_size,
- &text_matrix, pDeviceMatrix, textobj->m_GraphState, fill_argb, stroke_argb, pClippingPath, flag);
+ }
+ if (bFill) {
+ if (textobj->m_ColorState.GetFillColor()->IsPattern()) {
+ bPattern = TRUE;
+ } else {
+ fill_argb = GetFillArgb(textobj);
}
- text_matrix.Concat(*pObj2Device);
- return CPDF_TextRenderer::DrawNormalText(m_pDevice, textobj->m_nChars, textobj->m_pCharCodes, textobj->m_pCharPos, pFont, font_size,
- &text_matrix, fill_argb, &m_Options);
+ }
+ CFX_AffineMatrix text_matrix;
+ textobj->GetTextMatrix(&text_matrix);
+ if (IsAvailableMatrix(text_matrix) == FALSE) {
+ return TRUE;
+ }
+ FX_FLOAT font_size = textobj->m_TextState.GetFontSize();
+ if (bPattern) {
+ DrawTextPathWithPattern(textobj, pObj2Device, pFont, font_size,
+ &text_matrix, bFill, bStroke);
+ return TRUE;
+ }
+ if (bClip || bStroke) {
+ const CFX_AffineMatrix* pDeviceMatrix = pObj2Device;
+ CFX_AffineMatrix device_matrix;
+ if (bStroke) {
+ const FX_FLOAT* pCTM = textobj->m_TextState.GetObject()->m_CTM;
+ if (pCTM[0] != 1.0f || pCTM[3] != 1.0f) {
+ CFX_AffineMatrix ctm(pCTM[0], pCTM[1], pCTM[2], pCTM[3], 0, 0);
+ text_matrix.ConcatInverse(ctm);
+ device_matrix.Copy(ctm);
+ device_matrix.Concat(*pObj2Device);
+ pDeviceMatrix = &device_matrix;
+ }
+ }
+ int flag = 0;
+ if (bStroke && bFill) {
+ flag |= FX_FILL_STROKE;
+ flag |= FX_STROKE_TEXT_MODE;
+ }
+ const CPDF_GeneralStateData* pGeneralData =
+ ((CPDF_PageObject*)textobj)->m_GeneralState;
+ if (pGeneralData && pGeneralData->m_StrokeAdjust) {
+ flag |= FX_STROKE_ADJUST;
+ }
+ if (m_Options.m_Flags & RENDER_NOTEXTSMOOTH) {
+ flag |= FXFILL_NOPATHSMOOTH;
+ }
+ return CPDF_TextRenderer::DrawTextPath(
+ m_pDevice, textobj->m_nChars, textobj->m_pCharCodes,
+ textobj->m_pCharPos, pFont, font_size, &text_matrix, pDeviceMatrix,
+ textobj->m_GraphState, fill_argb, stroke_argb, pClippingPath, flag);
+ }
+ text_matrix.Concat(*pObj2Device);
+ return CPDF_TextRenderer::DrawNormalText(
+ m_pDevice, textobj->m_nChars, textobj->m_pCharCodes, textobj->m_pCharPos,
+ pFont, font_size, &text_matrix, fill_argb, &m_Options);
}
-CPDF_Type3Cache* CPDF_RenderStatus::GetCachedType3(CPDF_Type3Font* pFont)
-{
- if (pFont->m_pDocument == NULL) {
- return NULL;
- }
- pFont->m_pDocument->GetPageData()->GetFont(pFont->GetFontDict(), FALSE);
- return pFont->m_pDocument->GetRenderData()->GetCachedType3(pFont);
+CPDF_Type3Cache* CPDF_RenderStatus::GetCachedType3(CPDF_Type3Font* pFont) {
+ if (pFont->m_pDocument == NULL) {
+ return NULL;
+ }
+ pFont->m_pDocument->GetPageData()->GetFont(pFont->GetFontDict(), FALSE);
+ return pFont->m_pDocument->GetRenderData()->GetCachedType3(pFont);
}
-static void ReleaseCachedType3(CPDF_Type3Font* pFont)
-{
- if (pFont->m_pDocument == NULL) {
- return;
- }
- pFont->m_pDocument->GetRenderData()->ReleaseCachedType3(pFont);
- pFont->m_pDocument->GetPageData()->ReleaseFont(pFont->GetFontDict());
+static void ReleaseCachedType3(CPDF_Type3Font* pFont) {
+ if (pFont->m_pDocument == NULL) {
+ return;
+ }
+ pFont->m_pDocument->GetRenderData()->ReleaseCachedType3(pFont);
+ pFont->m_pDocument->GetPageData()->ReleaseFont(pFont->GetFontDict());
}
-FX_BOOL CPDF_Type3Char::LoadBitmap(CPDF_RenderContext* pContext)
-{
- if (m_pBitmap != NULL || m_pForm == NULL) {
- return TRUE;
- }
- if (m_pForm->CountObjects() == 1 && !m_bColored) {
- CPDF_PageObject *pPageObj = m_pForm->GetObjectAt(m_pForm->GetFirstObjectPosition());
- if (pPageObj->m_Type == PDFPAGE_IMAGE) {
- CPDF_ImageObject* pImage = (CPDF_ImageObject*)pPageObj;
- m_ImageMatrix = pImage->m_Matrix;
- const CFX_DIBSource* pSource = pImage->m_pImage->LoadDIBSource();
- if (pSource) {
- m_pBitmap = pSource->Clone();
- delete pSource;
- }
- delete m_pForm;
- m_pForm = NULL;
- return TRUE;
- }
- }
- return FALSE;
+FX_BOOL CPDF_Type3Char::LoadBitmap(CPDF_RenderContext* pContext) {
+ if (m_pBitmap != NULL || m_pForm == NULL) {
+ return TRUE;
+ }
+ if (m_pForm->CountObjects() == 1 && !m_bColored) {
+ CPDF_PageObject* pPageObj =
+ m_pForm->GetObjectAt(m_pForm->GetFirstObjectPosition());
+ if (pPageObj->m_Type == PDFPAGE_IMAGE) {
+ CPDF_ImageObject* pImage = (CPDF_ImageObject*)pPageObj;
+ m_ImageMatrix = pImage->m_Matrix;
+ const CFX_DIBSource* pSource = pImage->m_pImage->LoadDIBSource();
+ if (pSource) {
+ m_pBitmap = pSource->Clone();
+ delete pSource;
+ }
+ delete m_pForm;
+ m_pForm = NULL;
+ return TRUE;
+ }
+ }
+ return FALSE;
}
-class CPDF_RefType3Cache
-{
-public:
- CPDF_RefType3Cache(CPDF_Type3Font* pType3Font)
- {
- m_dwCount = 0;
- m_pType3Font = pType3Font;
- }
- ~CPDF_RefType3Cache()
- {
- while(m_dwCount--) {
- ReleaseCachedType3(m_pType3Font);
- }
- }
- FX_DWORD m_dwCount;
- CPDF_Type3Font* m_pType3Font;
+class CPDF_RefType3Cache {
+ public:
+ CPDF_RefType3Cache(CPDF_Type3Font* pType3Font) {
+ m_dwCount = 0;
+ m_pType3Font = pType3Font;
+ }
+ ~CPDF_RefType3Cache() {
+ while (m_dwCount--) {
+ ReleaseCachedType3(m_pType3Font);
+ }
+ }
+ FX_DWORD m_dwCount;
+ CPDF_Type3Font* m_pType3Font;
};
-FX_BOOL CPDF_RenderStatus::ProcessType3Text(const CPDF_TextObject* textobj, const CFX_AffineMatrix* pObj2Device)
-{
- CPDF_Type3Font* pType3Font = textobj->m_TextState.GetFont()->GetType3Font();
- for (int j = 0; j < m_Type3FontCache.GetSize(); j++)
- if ((CPDF_Type3Font*)m_Type3FontCache.GetAt(j) == pType3Font) {
- return TRUE;
- }
- CFX_Matrix dCTM = m_pDevice->GetCTM();
- FX_FLOAT sa = FXSYS_fabs(dCTM.a);
- FX_FLOAT sd = FXSYS_fabs(dCTM.d);
- CFX_AffineMatrix text_matrix;
- textobj->GetTextMatrix(&text_matrix);
- CFX_AffineMatrix char_matrix = pType3Font->GetFontMatrix();
- FX_FLOAT font_size = textobj->m_TextState.GetFontSize();
- char_matrix.Scale(font_size, font_size);
- FX_ARGB fill_argb = GetFillArgb(textobj, TRUE);
- int fill_alpha = FXARGB_A(fill_argb);
- int device_class = m_pDevice->GetDeviceClass();
- FXTEXT_GLYPHPOS* pGlyphAndPos = NULL;
- if (device_class == FXDC_DISPLAY) {
- pGlyphAndPos = FX_Alloc(FXTEXT_GLYPHPOS, textobj->m_nChars);
- } else if (fill_alpha < 255) {
- return FALSE;
- }
- CPDF_RefType3Cache refTypeCache(pType3Font);
- FX_DWORD *pChars = textobj->m_pCharCodes;
- if (textobj->m_nChars == 1) {
- pChars = (FX_DWORD*)(&textobj->m_pCharCodes);
- }
- for (int iChar = 0; iChar < textobj->m_nChars; iChar ++) {
- FX_DWORD charcode = pChars[iChar];
- if (charcode == (FX_DWORD) - 1) {
- continue;
- }
- CPDF_Type3Char* pType3Char = pType3Font->LoadChar(charcode);
- if (pType3Char == NULL) {
+FX_BOOL CPDF_RenderStatus::ProcessType3Text(
+ const CPDF_TextObject* textobj,
+ const CFX_AffineMatrix* pObj2Device) {
+ CPDF_Type3Font* pType3Font = textobj->m_TextState.GetFont()->GetType3Font();
+ for (int j = 0; j < m_Type3FontCache.GetSize(); j++)
+ if ((CPDF_Type3Font*)m_Type3FontCache.GetAt(j) == pType3Font) {
+ return TRUE;
+ }
+ CFX_Matrix dCTM = m_pDevice->GetCTM();
+ FX_FLOAT sa = FXSYS_fabs(dCTM.a);
+ FX_FLOAT sd = FXSYS_fabs(dCTM.d);
+ CFX_AffineMatrix text_matrix;
+ textobj->GetTextMatrix(&text_matrix);
+ CFX_AffineMatrix char_matrix = pType3Font->GetFontMatrix();
+ FX_FLOAT font_size = textobj->m_TextState.GetFontSize();
+ char_matrix.Scale(font_size, font_size);
+ FX_ARGB fill_argb = GetFillArgb(textobj, TRUE);
+ int fill_alpha = FXARGB_A(fill_argb);
+ int device_class = m_pDevice->GetDeviceClass();
+ FXTEXT_GLYPHPOS* pGlyphAndPos = NULL;
+ if (device_class == FXDC_DISPLAY) {
+ pGlyphAndPos = FX_Alloc(FXTEXT_GLYPHPOS, textobj->m_nChars);
+ } else if (fill_alpha < 255) {
+ return FALSE;
+ }
+ CPDF_RefType3Cache refTypeCache(pType3Font);
+ FX_DWORD* pChars = textobj->m_pCharCodes;
+ if (textobj->m_nChars == 1) {
+ pChars = (FX_DWORD*)(&textobj->m_pCharCodes);
+ }
+ for (int iChar = 0; iChar < textobj->m_nChars; iChar++) {
+ FX_DWORD charcode = pChars[iChar];
+ if (charcode == (FX_DWORD)-1) {
+ continue;
+ }
+ CPDF_Type3Char* pType3Char = pType3Font->LoadChar(charcode);
+ if (pType3Char == NULL) {
+ continue;
+ }
+ CFX_AffineMatrix matrix = char_matrix;
+ matrix.e += iChar ? textobj->m_pCharPos[iChar - 1] : 0;
+ matrix.Concat(text_matrix);
+ matrix.Concat(*pObj2Device);
+ if (!pType3Char->LoadBitmap(m_pContext)) {
+ if (pGlyphAndPos) {
+ for (int i = 0; i < iChar; i++) {
+ FXTEXT_GLYPHPOS& glyph = pGlyphAndPos[i];
+ if (glyph.m_pGlyph == NULL) {
continue;
+ }
+ m_pDevice->SetBitMask(&glyph.m_pGlyph->m_Bitmap,
+ glyph.m_OriginX + glyph.m_pGlyph->m_Left,
+ glyph.m_OriginY - glyph.m_pGlyph->m_Top,
+ fill_argb);
}
- CFX_AffineMatrix matrix = char_matrix;
- matrix.e += iChar ? textobj->m_pCharPos[iChar - 1] : 0;
- matrix.Concat(text_matrix);
- matrix.Concat(*pObj2Device);
- if (!pType3Char->LoadBitmap(m_pContext)) {
- if (pGlyphAndPos) {
- for (int i = 0; i < iChar; i ++) {
- FXTEXT_GLYPHPOS& glyph = pGlyphAndPos[i];
- if (glyph.m_pGlyph == NULL) {
- continue;
- }
- m_pDevice->SetBitMask(&glyph.m_pGlyph->m_Bitmap,
- glyph.m_OriginX + glyph.m_pGlyph->m_Left,
- glyph.m_OriginY - glyph.m_pGlyph->m_Top, fill_argb);
- }
- FX_Free(pGlyphAndPos);
- pGlyphAndPos = NULL;
- }
- CPDF_GraphicStates* pStates = CloneObjStates(textobj, FALSE);
- CPDF_RenderOptions Options = m_Options;
- Options.m_Flags |= RENDER_FORCE_HALFTONE | RENDER_RECT_AA;
- Options.m_Flags &= ~RENDER_FORCE_DOWNSAMPLE;
- CPDF_Dictionary* pFormResource = NULL;
- if (pType3Char->m_pForm && pType3Char->m_pForm->m_pFormDict) {
- pFormResource = pType3Char->m_pForm->m_pFormDict->GetDict(FX_BSTRC("Resources"));
- }
- if (fill_alpha == 255) {
- CPDF_RenderStatus status;
- status.Initialize(m_pContext, m_pDevice, NULL, NULL, this, pStates, &Options,
- pType3Char->m_pForm->m_Transparency, m_bDropObjects, pFormResource, FALSE, pType3Char, fill_argb);
- status.m_Type3FontCache.Append(m_Type3FontCache);
- status.m_Type3FontCache.Add(pType3Font);
- m_pDevice->SaveState();
- status.RenderObjectList(pType3Char->m_pForm, &matrix);
- m_pDevice->RestoreState();
- } else {
- CFX_FloatRect rect_f = pType3Char->m_pForm->CalcBoundingBox();
- rect_f.Transform(&matrix);
- FX_RECT rect = rect_f.GetOutterRect();
- CFX_FxgeDevice bitmap_device;
- if (!bitmap_device.Create((int)(rect.Width() * sa), (int)(rect.Height() * sd), FXDIB_Argb)) {
- return TRUE;
- }
- bitmap_device.GetBitmap()->Clear(0);
- CPDF_RenderStatus status;
- status.Initialize(m_pContext, &bitmap_device, NULL, NULL, this, pStates, &Options,
- pType3Char->m_pForm->m_Transparency, m_bDropObjects, pFormResource, FALSE, pType3Char, fill_argb);
- status.m_Type3FontCache.Append(m_Type3FontCache);
- status.m_Type3FontCache.Add(pType3Font);
- matrix.TranslateI(-rect.left, -rect.top);
- matrix.Scale(sa, sd);
- status.RenderObjectList(pType3Char->m_pForm, &matrix);
- m_pDevice->SetDIBits(bitmap_device.GetBitmap(), rect.left, rect.top);
- }
- delete pStates;
- } else if (pType3Char->m_pBitmap) {
- if (device_class == FXDC_DISPLAY) {
- CPDF_Type3Cache* pCache = GetCachedType3(pType3Font);
- refTypeCache.m_dwCount++;
- CFX_GlyphBitmap* pBitmap = pCache->LoadGlyph(charcode, &matrix, sa, sd);
- if (pBitmap == NULL) {
- continue;
- }
- int origin_x = FXSYS_round(matrix.e);
- int origin_y = FXSYS_round(matrix.f);
- if (pGlyphAndPos) {
- pGlyphAndPos[iChar].m_pGlyph = pBitmap;
- pGlyphAndPos[iChar].m_OriginX = origin_x;
- pGlyphAndPos[iChar].m_OriginY = origin_y;
- } else {
- m_pDevice->SetBitMask(&pBitmap->m_Bitmap, origin_x + pBitmap->m_Left, origin_y - pBitmap->m_Top, fill_argb);
- }
- } else {
- CFX_AffineMatrix image_matrix = pType3Char->m_ImageMatrix;
- image_matrix.Concat(matrix);
- CPDF_ImageRenderer renderer;
- if (renderer.Start(this, pType3Char->m_pBitmap, fill_argb, 255, &image_matrix, 0, FALSE)) {
- renderer.Continue(NULL);
- }
- if (!renderer.m_Result) {
- return FALSE;
- }
- }
- }
- }
- if (pGlyphAndPos) {
- FX_RECT rect = FXGE_GetGlyphsBBox(pGlyphAndPos, textobj->m_nChars, 0, sa, sd);
- CFX_DIBitmap bitmap;
- if (!bitmap.Create((int)(rect.Width() * sa), (int)(rect.Height() * sd), FXDIB_8bppMask)) {
- FX_Free(pGlyphAndPos);
- return TRUE;
- }
- bitmap.Clear(0);
- for (int iChar = 0; iChar < textobj->m_nChars; iChar ++) {
- FXTEXT_GLYPHPOS& glyph = pGlyphAndPos[iChar];
- if (glyph.m_pGlyph == NULL) {
- continue;
- }
- bitmap.TransferBitmap((int)((glyph.m_OriginX + glyph.m_pGlyph->m_Left - rect.left) * sa),
- (int)((glyph.m_OriginY - glyph.m_pGlyph->m_Top - rect.top) * sd),
- glyph.m_pGlyph->m_Bitmap.GetWidth(), glyph.m_pGlyph->m_Bitmap.GetHeight(),
- &glyph.m_pGlyph->m_Bitmap, 0, 0);
- }
- m_pDevice->SetBitMask(&bitmap, rect.left, rect.top, fill_argb);
FX_Free(pGlyphAndPos);
- }
- return TRUE;
+ pGlyphAndPos = NULL;
+ }
+ CPDF_GraphicStates* pStates = CloneObjStates(textobj, FALSE);
+ CPDF_RenderOptions Options = m_Options;
+ Options.m_Flags |= RENDER_FORCE_HALFTONE | RENDER_RECT_AA;
+ Options.m_Flags &= ~RENDER_FORCE_DOWNSAMPLE;
+ CPDF_Dictionary* pFormResource = NULL;
+ if (pType3Char->m_pForm && pType3Char->m_pForm->m_pFormDict) {
+ pFormResource =
+ pType3Char->m_pForm->m_pFormDict->GetDict(FX_BSTRC("Resources"));
+ }
+ if (fill_alpha == 255) {
+ CPDF_RenderStatus status;
+ status.Initialize(m_pContext, m_pDevice, NULL, NULL, this, pStates,
+ &Options, pType3Char->m_pForm->m_Transparency,
+ m_bDropObjects, pFormResource, FALSE, pType3Char,
+ fill_argb);
+ status.m_Type3FontCache.Append(m_Type3FontCache);
+ status.m_Type3FontCache.Add(pType3Font);
+ m_pDevice->SaveState();
+ status.RenderObjectList(pType3Char->m_pForm, &matrix);
+ m_pDevice->RestoreState();
+ } else {
+ CFX_FloatRect rect_f = pType3Char->m_pForm->CalcBoundingBox();
+ rect_f.Transform(&matrix);
+ FX_RECT rect = rect_f.GetOutterRect();
+ CFX_FxgeDevice bitmap_device;
+ if (!bitmap_device.Create((int)(rect.Width() * sa),
+ (int)(rect.Height() * sd), FXDIB_Argb)) {
+ return TRUE;
+ }
+ bitmap_device.GetBitmap()->Clear(0);
+ CPDF_RenderStatus status;
+ status.Initialize(m_pContext, &bitmap_device, NULL, NULL, this, pStates,
+ &Options, pType3Char->m_pForm->m_Transparency,
+ m_bDropObjects, pFormResource, FALSE, pType3Char,
+ fill_argb);
+ status.m_Type3FontCache.Append(m_Type3FontCache);
+ status.m_Type3FontCache.Add(pType3Font);
+ matrix.TranslateI(-rect.left, -rect.top);
+ matrix.Scale(sa, sd);
+ status.RenderObjectList(pType3Char->m_pForm, &matrix);
+ m_pDevice->SetDIBits(bitmap_device.GetBitmap(), rect.left, rect.top);
+ }
+ delete pStates;
+ } else if (pType3Char->m_pBitmap) {
+ if (device_class == FXDC_DISPLAY) {
+ CPDF_Type3Cache* pCache = GetCachedType3(pType3Font);
+ refTypeCache.m_dwCount++;
+ CFX_GlyphBitmap* pBitmap = pCache->LoadGlyph(charcode, &matrix, sa, sd);
+ if (pBitmap == NULL) {
+ continue;
+ }
+ int origin_x = FXSYS_round(matrix.e);
+ int origin_y = FXSYS_round(matrix.f);
+ if (pGlyphAndPos) {
+ pGlyphAndPos[iChar].m_pGlyph = pBitmap;
+ pGlyphAndPos[iChar].m_OriginX = origin_x;
+ pGlyphAndPos[iChar].m_OriginY = origin_y;
+ } else {
+ m_pDevice->SetBitMask(&pBitmap->m_Bitmap, origin_x + pBitmap->m_Left,
+ origin_y - pBitmap->m_Top, fill_argb);
+ }
+ } else {
+ CFX_AffineMatrix image_matrix = pType3Char->m_ImageMatrix;
+ image_matrix.Concat(matrix);
+ CPDF_ImageRenderer renderer;
+ if (renderer.Start(this, pType3Char->m_pBitmap, fill_argb, 255,
+ &image_matrix, 0, FALSE)) {
+ renderer.Continue(NULL);
+ }
+ if (!renderer.m_Result) {
+ return FALSE;
+ }
+ }
+ }
+ }
+ if (pGlyphAndPos) {
+ FX_RECT rect =
+ FXGE_GetGlyphsBBox(pGlyphAndPos, textobj->m_nChars, 0, sa, sd);
+ CFX_DIBitmap bitmap;
+ if (!bitmap.Create((int)(rect.Width() * sa), (int)(rect.Height() * sd),
+ FXDIB_8bppMask)) {
+ FX_Free(pGlyphAndPos);
+ return TRUE;
+ }
+ bitmap.Clear(0);
+ for (int iChar = 0; iChar < textobj->m_nChars; iChar++) {
+ FXTEXT_GLYPHPOS& glyph = pGlyphAndPos[iChar];
+ if (glyph.m_pGlyph == NULL) {
+ continue;
+ }
+ bitmap.TransferBitmap(
+ (int)((glyph.m_OriginX + glyph.m_pGlyph->m_Left - rect.left) * sa),
+ (int)((glyph.m_OriginY - glyph.m_pGlyph->m_Top - rect.top) * sd),
+ glyph.m_pGlyph->m_Bitmap.GetWidth(),
+ glyph.m_pGlyph->m_Bitmap.GetHeight(), &glyph.m_pGlyph->m_Bitmap, 0,
+ 0);
+ }
+ m_pDevice->SetBitMask(&bitmap, rect.left, rect.top, fill_argb);
+ FX_Free(pGlyphAndPos);
+ }
+ return TRUE;
}
-class CPDF_CharPosList
-{
-public:
- CPDF_CharPosList();
- ~CPDF_CharPosList();
- void Load(int nChars, FX_DWORD* pCharCodes, FX_FLOAT* pCharPos, CPDF_Font* pFont, FX_FLOAT font_size);
- FXTEXT_CHARPOS* m_pCharPos;
- FX_DWORD m_nChars;
+class CPDF_CharPosList {
+ public:
+ CPDF_CharPosList();
+ ~CPDF_CharPosList();
+ void Load(int nChars,
+ FX_DWORD* pCharCodes,
+ FX_FLOAT* pCharPos,
+ CPDF_Font* pFont,
+ FX_FLOAT font_size);
+ FXTEXT_CHARPOS* m_pCharPos;
+ FX_DWORD m_nChars;
};
FX_FLOAT _CIDTransformToFloat(uint8_t ch);
-CPDF_CharPosList::CPDF_CharPosList()
-{
- m_pCharPos = NULL;
+CPDF_CharPosList::CPDF_CharPosList() {
+ m_pCharPos = NULL;
}
-CPDF_CharPosList::~CPDF_CharPosList()
-{
- if (m_pCharPos) {
- FX_Free(m_pCharPos);
- }
+CPDF_CharPosList::~CPDF_CharPosList() {
+ if (m_pCharPos) {
+ FX_Free(m_pCharPos);
+ }
}
-void CPDF_CharPosList::Load(int nChars, FX_DWORD* pCharCodes, FX_FLOAT* pCharPos, CPDF_Font* pFont,
- FX_FLOAT FontSize)
-{
- m_pCharPos = FX_Alloc(FXTEXT_CHARPOS, nChars);
- m_nChars = 0;
- CPDF_CIDFont* pCIDFont = pFont->GetCIDFont();
- FX_BOOL bVertWriting = pCIDFont && pCIDFont->IsVertWriting();
- for (int iChar = 0; iChar < nChars; iChar ++) {
- FX_DWORD CharCode = nChars == 1 ? (FX_DWORD)(uintptr_t)pCharCodes : pCharCodes[iChar];
- if (CharCode == (FX_DWORD) - 1) {
- continue;
- }
- FX_BOOL bVert = FALSE;
- FXTEXT_CHARPOS& charpos = m_pCharPos[m_nChars++];
- if (pCIDFont) {
- charpos.m_bFontStyle = pCIDFont->IsFontStyleFromCharCode(CharCode);
- }
- charpos.m_GlyphIndex = pFont->GlyphFromCharCode(CharCode, &bVert);
-#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
- charpos.m_ExtGID = pFont->GlyphFromCharCodeExt(CharCode);
+void CPDF_CharPosList::Load(int nChars,
+ FX_DWORD* pCharCodes,
+ FX_FLOAT* pCharPos,
+ CPDF_Font* pFont,
+ FX_FLOAT FontSize) {
+ m_pCharPos = FX_Alloc(FXTEXT_CHARPOS, nChars);
+ m_nChars = 0;
+ CPDF_CIDFont* pCIDFont = pFont->GetCIDFont();
+ FX_BOOL bVertWriting = pCIDFont && pCIDFont->IsVertWriting();
+ for (int iChar = 0; iChar < nChars; iChar++) {
+ FX_DWORD CharCode =
+ nChars == 1 ? (FX_DWORD)(uintptr_t)pCharCodes : pCharCodes[iChar];
+ if (CharCode == (FX_DWORD)-1) {
+ continue;
+ }
+ FX_BOOL bVert = FALSE;
+ FXTEXT_CHARPOS& charpos = m_pCharPos[m_nChars++];
+ if (pCIDFont) {
+ charpos.m_bFontStyle = pCIDFont->IsFontStyleFromCharCode(CharCode);
+ }
+ charpos.m_GlyphIndex = pFont->GlyphFromCharCode(CharCode, &bVert);
+#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
+ charpos.m_ExtGID = pFont->GlyphFromCharCodeExt(CharCode);
#endif
- if (!pFont->IsEmbedded() && pFont->GetFontType() != PDFFONT_CIDFONT) {
- charpos.m_FontCharWidth = pFont->GetCharWidthF(CharCode);
- } else {
- charpos.m_FontCharWidth = 0;
- }
- charpos.m_OriginX = iChar ? pCharPos[iChar - 1] : 0;
- charpos.m_OriginY = 0;
- charpos.m_bGlyphAdjust = FALSE;
- if (pCIDFont == NULL) {
- continue;
- }
- FX_WORD CID = pCIDFont->CIDFromCharCode(CharCode);
- if (bVertWriting) {
- charpos.m_OriginY = charpos.m_OriginX;
- charpos.m_OriginX = 0;
- short vx, vy;
- pCIDFont->GetVertOrigin(CID, vx, vy);
- charpos.m_OriginX -= FontSize * vx / 1000;
- charpos.m_OriginY -= FontSize * vy / 1000;
- }
- const uint8_t* pTransform = pCIDFont->GetCIDTransform(CID);
- if (pTransform && !bVert) {
- charpos.m_AdjustMatrix[0] = _CIDTransformToFloat(pTransform[0]);
- charpos.m_AdjustMatrix[2] = _CIDTransformToFloat(pTransform[2]);
- charpos.m_AdjustMatrix[1] = _CIDTransformToFloat(pTransform[1]);
- charpos.m_AdjustMatrix[3] = _CIDTransformToFloat(pTransform[3]);
- charpos.m_OriginX += _CIDTransformToFloat(pTransform[4]) * FontSize;
- charpos.m_OriginY += _CIDTransformToFloat(pTransform[5]) * FontSize;
- charpos.m_bGlyphAdjust = TRUE;
- }
- }
+ if (!pFont->IsEmbedded() && pFont->GetFontType() != PDFFONT_CIDFONT) {
+ charpos.m_FontCharWidth = pFont->GetCharWidthF(CharCode);
+ } else {
+ charpos.m_FontCharWidth = 0;
+ }
+ charpos.m_OriginX = iChar ? pCharPos[iChar - 1] : 0;
+ charpos.m_OriginY = 0;
+ charpos.m_bGlyphAdjust = FALSE;
+ if (pCIDFont == NULL) {
+ continue;
+ }
+ FX_WORD CID = pCIDFont->CIDFromCharCode(CharCode);
+ if (bVertWriting) {
+ charpos.m_OriginY = charpos.m_OriginX;
+ charpos.m_OriginX = 0;
+ short vx, vy;
+ pCIDFont->GetVertOrigin(CID, vx, vy);
+ charpos.m_OriginX -= FontSize * vx / 1000;
+ charpos.m_OriginY -= FontSize * vy / 1000;
+ }
+ const uint8_t* pTransform = pCIDFont->GetCIDTransform(CID);
+ if (pTransform && !bVert) {
+ charpos.m_AdjustMatrix[0] = _CIDTransformToFloat(pTransform[0]);
+ charpos.m_AdjustMatrix[2] = _CIDTransformToFloat(pTransform[2]);
+ charpos.m_AdjustMatrix[1] = _CIDTransformToFloat(pTransform[1]);
+ charpos.m_AdjustMatrix[3] = _CIDTransformToFloat(pTransform[3]);
+ charpos.m_OriginX += _CIDTransformToFloat(pTransform[4]) * FontSize;
+ charpos.m_OriginY += _CIDTransformToFloat(pTransform[5]) * FontSize;
+ charpos.m_bGlyphAdjust = TRUE;
+ }
+ }
}
-FX_BOOL CPDF_TextRenderer::DrawTextPath(CFX_RenderDevice* pDevice, int nChars, FX_DWORD* pCharCodes, FX_FLOAT* pCharPos,
- CPDF_Font* pFont, FX_FLOAT font_size,
- const CFX_AffineMatrix* pText2User, const CFX_AffineMatrix* pUser2Device,
+FX_BOOL CPDF_TextRenderer::DrawTextPath(CFX_RenderDevice* pDevice,
+ int nChars,
+ FX_DWORD* pCharCodes,
+ FX_FLOAT* pCharPos,
+ CPDF_Font* pFont,
+ FX_FLOAT font_size,
+ const CFX_AffineMatrix* pText2User,
+ const CFX_AffineMatrix* pUser2Device,
const CFX_GraphStateData* pGraphState,
- FX_ARGB fill_argb, FX_ARGB stroke_argb, CFX_PathData* pClippingPath, int nFlag)
-{
- CFX_FontCache* pCache = pFont->m_pDocument ? pFont->m_pDocument->GetRenderData()->GetFontCache() : NULL;
- CPDF_CharPosList CharPosList;
- CharPosList.Load(nChars, pCharCodes, pCharPos, pFont, font_size);
- return pDevice->DrawTextPath(CharPosList.m_nChars, CharPosList.m_pCharPos,
- &pFont->m_Font, pCache, font_size, pText2User, pUser2Device,
- pGraphState, fill_argb, stroke_argb, pClippingPath, nFlag);
+ FX_ARGB fill_argb,
+ FX_ARGB stroke_argb,
+ CFX_PathData* pClippingPath,
+ int nFlag) {
+ CFX_FontCache* pCache =
+ pFont->m_pDocument ? pFont->m_pDocument->GetRenderData()->GetFontCache()
+ : NULL;
+ CPDF_CharPosList CharPosList;
+ CharPosList.Load(nChars, pCharCodes, pCharPos, pFont, font_size);
+ return pDevice->DrawTextPath(CharPosList.m_nChars, CharPosList.m_pCharPos,
+ &pFont->m_Font, pCache, font_size, pText2User,
+ pUser2Device, pGraphState, fill_argb,
+ stroke_argb, pClippingPath, nFlag);
}
-void CPDF_TextRenderer::DrawTextString(CFX_RenderDevice* pDevice, int left, int top, CPDF_Font* pFont, int height,
- const CFX_ByteString& str, FX_ARGB argb)
-{
- FX_RECT font_bbox;
- pFont->GetFontBBox(font_bbox);
- FX_FLOAT font_size = (FX_FLOAT)height * 1000.0f / (FX_FLOAT)(font_bbox.top - font_bbox.bottom);
- FX_FLOAT origin_x = (FX_FLOAT)left;
- FX_FLOAT origin_y = (FX_FLOAT)top + font_size * (FX_FLOAT)font_bbox.top / 1000.0f;
- CFX_AffineMatrix matrix(1.0f, 0, 0, -1.0f, 0, 0);
- DrawTextString(pDevice, origin_x, origin_y, pFont, font_size, &matrix, str, argb);
+void CPDF_TextRenderer::DrawTextString(CFX_RenderDevice* pDevice,
+ int left,
+ int top,
+ CPDF_Font* pFont,
+ int height,
+ const CFX_ByteString& str,
+ FX_ARGB argb) {
+ FX_RECT font_bbox;
+ pFont->GetFontBBox(font_bbox);
+ FX_FLOAT font_size =
+ (FX_FLOAT)height * 1000.0f / (FX_FLOAT)(font_bbox.top - font_bbox.bottom);
+ FX_FLOAT origin_x = (FX_FLOAT)left;
+ FX_FLOAT origin_y =
+ (FX_FLOAT)top + font_size * (FX_FLOAT)font_bbox.top / 1000.0f;
+ CFX_AffineMatrix matrix(1.0f, 0, 0, -1.0f, 0, 0);
+ DrawTextString(pDevice, origin_x, origin_y, pFont, font_size, &matrix, str,
+ argb);
}
-void CPDF_TextRenderer::DrawTextString(CFX_RenderDevice* pDevice, FX_FLOAT origin_x, FX_FLOAT origin_y, CPDF_Font* pFont, FX_FLOAT font_size,
- const CFX_AffineMatrix* pMatrix, const CFX_ByteString& str, FX_ARGB fill_argb,
- FX_ARGB stroke_argb, const CFX_GraphStateData* pGraphState, const CPDF_RenderOptions* pOptions)
-{
- int nChars = pFont->CountChar(str, str.GetLength());
- if (nChars == 0) {
- return;
- }
- FX_DWORD charcode;
- int offset = 0;
- FX_DWORD* pCharCodes;
- FX_FLOAT* pCharPos;
- if (nChars == 1) {
- charcode = pFont->GetNextChar(str, str.GetLength(), offset);
- pCharCodes = (FX_DWORD*)(uintptr_t)charcode;
- pCharPos = NULL;
- } else {
- pCharCodes = FX_Alloc(FX_DWORD, nChars);
- pCharPos = FX_Alloc(FX_FLOAT, nChars - 1);
- FX_FLOAT cur_pos = 0;
- for (int i = 0; i < nChars; i ++) {
- pCharCodes[i] = pFont->GetNextChar(str, str.GetLength(), offset);
- if (i) {
- pCharPos[i - 1] = cur_pos;
- }
- cur_pos += pFont->GetCharWidthF(pCharCodes[i]) * font_size / 1000;
- }
- }
- CFX_AffineMatrix matrix;
- if (pMatrix) {
- matrix = *pMatrix;
- }
- matrix.e = origin_x;
- matrix.f = origin_y;
- if (pFont->GetFontType() == PDFFONT_TYPE3)
- ;
- else if (stroke_argb == 0) {
- DrawNormalText(pDevice, nChars, pCharCodes, pCharPos, pFont, font_size, &matrix, fill_argb, pOptions);
- } else
- DrawTextPath(pDevice, nChars, pCharCodes, pCharPos, pFont, font_size, &matrix, NULL, pGraphState,
- fill_argb, stroke_argb, NULL);
- if (nChars > 1) {
- FX_Free(pCharCodes);
- FX_Free(pCharPos);
- }
+void CPDF_TextRenderer::DrawTextString(CFX_RenderDevice* pDevice,
+ FX_FLOAT origin_x,
+ FX_FLOAT origin_y,
+ CPDF_Font* pFont,
+ FX_FLOAT font_size,
+ const CFX_AffineMatrix* pMatrix,
+ const CFX_ByteString& str,
+ FX_ARGB fill_argb,
+ FX_ARGB stroke_argb,
+ const CFX_GraphStateData* pGraphState,
+ const CPDF_RenderOptions* pOptions) {
+ int nChars = pFont->CountChar(str, str.GetLength());
+ if (nChars == 0) {
+ return;
+ }
+ FX_DWORD charcode;
+ int offset = 0;
+ FX_DWORD* pCharCodes;
+ FX_FLOAT* pCharPos;
+ if (nChars == 1) {
+ charcode = pFont->GetNextChar(str, str.GetLength(), offset);
+ pCharCodes = (FX_DWORD*)(uintptr_t)charcode;
+ pCharPos = NULL;
+ } else {
+ pCharCodes = FX_Alloc(FX_DWORD, nChars);
+ pCharPos = FX_Alloc(FX_FLOAT, nChars - 1);
+ FX_FLOAT cur_pos = 0;
+ for (int i = 0; i < nChars; i++) {
+ pCharCodes[i] = pFont->GetNextChar(str, str.GetLength(), offset);
+ if (i) {
+ pCharPos[i - 1] = cur_pos;
+ }
+ cur_pos += pFont->GetCharWidthF(pCharCodes[i]) * font_size / 1000;
+ }
+ }
+ CFX_AffineMatrix matrix;
+ if (pMatrix) {
+ matrix = *pMatrix;
+ }
+ matrix.e = origin_x;
+ matrix.f = origin_y;
+ if (pFont->GetFontType() == PDFFONT_TYPE3)
+ ;
+ else if (stroke_argb == 0) {
+ DrawNormalText(pDevice, nChars, pCharCodes, pCharPos, pFont, font_size,
+ &matrix, fill_argb, pOptions);
+ } else
+ DrawTextPath(pDevice, nChars, pCharCodes, pCharPos, pFont, font_size,
+ &matrix, NULL, pGraphState, fill_argb, stroke_argb, NULL);
+ if (nChars > 1) {
+ FX_Free(pCharCodes);
+ FX_Free(pCharPos);
+ }
}
-FX_BOOL CPDF_TextRenderer::DrawNormalText(CFX_RenderDevice* pDevice, int nChars, FX_DWORD* pCharCodes, FX_FLOAT* pCharPos,
- CPDF_Font* pFont, FX_FLOAT font_size,
- const CFX_AffineMatrix* pText2Device,
- FX_ARGB fill_argb, const CPDF_RenderOptions* pOptions)
-{
- CFX_FontCache* pCache = pFont->m_pDocument ? pFont->m_pDocument->GetRenderData()->GetFontCache() : NULL;
- CPDF_CharPosList CharPosList;
- CharPosList.Load(nChars, pCharCodes, pCharPos, pFont, font_size);
- int FXGE_flags = 0;
- if (pOptions) {
- FX_DWORD dwFlags = pOptions->m_Flags;
- if (dwFlags & RENDER_CLEARTYPE) {
- FXGE_flags |= FXTEXT_CLEARTYPE;
- if (dwFlags & RENDER_BGR_STRIPE) {
- FXGE_flags |= FXTEXT_BGR_STRIPE;
- }
- }
- if (dwFlags & RENDER_NOTEXTSMOOTH) {
- FXGE_flags |= FXTEXT_NOSMOOTH;
- }
- if (dwFlags & RENDER_PRINTGRAPHICTEXT) {
- FXGE_flags |= FXTEXT_PRINTGRAPHICTEXT;
- }
- if (dwFlags & RENDER_NO_NATIVETEXT) {
- FXGE_flags |= FXTEXT_NO_NATIVETEXT;
- }
- if (dwFlags & RENDER_PRINTIMAGETEXT) {
- FXGE_flags |= FXTEXT_PRINTIMAGETEXT;
- }
- } else {
- FXGE_flags = FXTEXT_CLEARTYPE;
- }
- if (pFont->GetFontType() & PDFFONT_CIDFONT) {
- FXGE_flags |= FXFONT_CIDFONT;
- }
- return pDevice->DrawNormalText(CharPosList.m_nChars, CharPosList.m_pCharPos, &pFont->m_Font, pCache, font_size, pText2Device, fill_argb, FXGE_flags);
+FX_BOOL CPDF_TextRenderer::DrawNormalText(CFX_RenderDevice* pDevice,
+ int nChars,
+ FX_DWORD* pCharCodes,
+ FX_FLOAT* pCharPos,
+ CPDF_Font* pFont,
+ FX_FLOAT font_size,
+ const CFX_AffineMatrix* pText2Device,
+ FX_ARGB fill_argb,
+ const CPDF_RenderOptions* pOptions) {
+ CFX_FontCache* pCache =
+ pFont->m_pDocument ? pFont->m_pDocument->GetRenderData()->GetFontCache()
+ : NULL;
+ CPDF_CharPosList CharPosList;
+ CharPosList.Load(nChars, pCharCodes, pCharPos, pFont, font_size);
+ int FXGE_flags = 0;
+ if (pOptions) {
+ FX_DWORD dwFlags = pOptions->m_Flags;
+ if (dwFlags & RENDER_CLEARTYPE) {
+ FXGE_flags |= FXTEXT_CLEARTYPE;
+ if (dwFlags & RENDER_BGR_STRIPE) {
+ FXGE_flags |= FXTEXT_BGR_STRIPE;
+ }
+ }
+ if (dwFlags & RENDER_NOTEXTSMOOTH) {
+ FXGE_flags |= FXTEXT_NOSMOOTH;
+ }
+ if (dwFlags & RENDER_PRINTGRAPHICTEXT) {
+ FXGE_flags |= FXTEXT_PRINTGRAPHICTEXT;
+ }
+ if (dwFlags & RENDER_NO_NATIVETEXT) {
+ FXGE_flags |= FXTEXT_NO_NATIVETEXT;
+ }
+ if (dwFlags & RENDER_PRINTIMAGETEXT) {
+ FXGE_flags |= FXTEXT_PRINTIMAGETEXT;
+ }
+ } else {
+ FXGE_flags = FXTEXT_CLEARTYPE;
+ }
+ if (pFont->GetFontType() & PDFFONT_CIDFONT) {
+ FXGE_flags |= FXFONT_CIDFONT;
+ }
+ return pDevice->DrawNormalText(CharPosList.m_nChars, CharPosList.m_pCharPos,
+ &pFont->m_Font, pCache, font_size,
+ pText2Device, fill_argb, FXGE_flags);
}
-void CPDF_RenderStatus::DrawTextPathWithPattern(const CPDF_TextObject* textobj, const CFX_AffineMatrix* pObj2Device,
- CPDF_Font* pFont, FX_FLOAT font_size,
- const CFX_AffineMatrix* pTextMatrix, FX_BOOL bFill, FX_BOOL bStroke)
-{
- if (!bStroke) {
- CPDF_PathObject path;
- CPDF_TextObject* pCopy = new CPDF_TextObject;
- pCopy->Copy(textobj);
- path.m_bStroke = FALSE;
- path.m_FillType = FXFILL_WINDING;
- path.m_ClipPath.AppendTexts(&pCopy, 1);
- path.m_ColorState = textobj->m_ColorState;
- path.m_Path.New()->AppendRect(textobj->m_Left, textobj->m_Bottom, textobj->m_Right, textobj->m_Top);
- path.m_Left = textobj->m_Left;
- path.m_Bottom = textobj->m_Bottom;
- path.m_Right = textobj->m_Right;
- path.m_Top = textobj->m_Top;
- RenderSingleObject(&path, pObj2Device);
- return;
- }
- CFX_FontCache* pCache;
- if (pFont->m_pDocument) {
- pCache = pFont->m_pDocument->GetRenderData()->GetFontCache();
- } else {
- pCache = CFX_GEModule::Get()->GetFontCache();
- }
- CFX_FaceCache* pFaceCache = pCache->GetCachedFace(&pFont->m_Font);
- FX_FONTCACHE_DEFINE(pCache, &pFont->m_Font);
- CPDF_CharPosList CharPosList;
- CharPosList.Load(textobj->m_nChars, textobj->m_pCharCodes, textobj->m_pCharPos, pFont, font_size);
- for (FX_DWORD i = 0; i < CharPosList.m_nChars; i ++) {
- FXTEXT_CHARPOS& charpos = CharPosList.m_pCharPos[i];
- const CFX_PathData* pPath = pFaceCache->LoadGlyphPath(&pFont->m_Font, charpos.m_GlyphIndex,
- charpos.m_FontCharWidth);
- if (pPath == NULL) {
- continue;
- }
- CPDF_PathObject path;
- path.m_GraphState = textobj->m_GraphState;
- path.m_ColorState = textobj->m_ColorState;
- CFX_AffineMatrix matrix;
- if (charpos.m_bGlyphAdjust)
- matrix.Set(charpos.m_AdjustMatrix[0], charpos.m_AdjustMatrix[1],
- charpos.m_AdjustMatrix[2], charpos.m_AdjustMatrix[3], 0, 0);
- matrix.Concat(font_size, 0, 0, font_size, charpos.m_OriginX, charpos.m_OriginY);
- path.m_Path.New()->Append(pPath, &matrix);
- path.m_Matrix = *pTextMatrix;
- path.m_bStroke = bStroke;
- path.m_FillType = bFill ? FXFILL_WINDING : 0;
- path.CalcBoundingBox();
- ProcessPath(&path, pObj2Device);
- }
+void CPDF_RenderStatus::DrawTextPathWithPattern(
+ const CPDF_TextObject* textobj,
+ const CFX_AffineMatrix* pObj2Device,
+ CPDF_Font* pFont,
+ FX_FLOAT font_size,
+ const CFX_AffineMatrix* pTextMatrix,
+ FX_BOOL bFill,
+ FX_BOOL bStroke) {
+ if (!bStroke) {
+ CPDF_PathObject path;
+ CPDF_TextObject* pCopy = new CPDF_TextObject;
+ pCopy->Copy(textobj);
+ path.m_bStroke = FALSE;
+ path.m_FillType = FXFILL_WINDING;
+ path.m_ClipPath.AppendTexts(&pCopy, 1);
+ path.m_ColorState = textobj->m_ColorState;
+ path.m_Path.New()->AppendRect(textobj->m_Left, textobj->m_Bottom,
+ textobj->m_Right, textobj->m_Top);
+ path.m_Left = textobj->m_Left;
+ path.m_Bottom = textobj->m_Bottom;
+ path.m_Right = textobj->m_Right;
+ path.m_Top = textobj->m_Top;
+ RenderSingleObject(&path, pObj2Device);
+ return;
+ }
+ CFX_FontCache* pCache;
+ if (pFont->m_pDocument) {
+ pCache = pFont->m_pDocument->GetRenderData()->GetFontCache();
+ } else {
+ pCache = CFX_GEModule::Get()->GetFontCache();
+ }
+ CFX_FaceCache* pFaceCache = pCache->GetCachedFace(&pFont->m_Font);
+ FX_FONTCACHE_DEFINE(pCache, &pFont->m_Font);
+ CPDF_CharPosList CharPosList;
+ CharPosList.Load(textobj->m_nChars, textobj->m_pCharCodes,
+ textobj->m_pCharPos, pFont, font_size);
+ for (FX_DWORD i = 0; i < CharPosList.m_nChars; i++) {
+ FXTEXT_CHARPOS& charpos = CharPosList.m_pCharPos[i];
+ const CFX_PathData* pPath = pFaceCache->LoadGlyphPath(
+ &pFont->m_Font, charpos.m_GlyphIndex, charpos.m_FontCharWidth);
+ if (pPath == NULL) {
+ continue;
+ }
+ CPDF_PathObject path;
+ path.m_GraphState = textobj->m_GraphState;
+ path.m_ColorState = textobj->m_ColorState;
+ CFX_AffineMatrix matrix;
+ if (charpos.m_bGlyphAdjust)
+ matrix.Set(charpos.m_AdjustMatrix[0], charpos.m_AdjustMatrix[1],
+ charpos.m_AdjustMatrix[2], charpos.m_AdjustMatrix[3], 0, 0);
+ matrix.Concat(font_size, 0, 0, font_size, charpos.m_OriginX,
+ charpos.m_OriginY);
+ path.m_Path.New()->Append(pPath, &matrix);
+ path.m_Matrix = *pTextMatrix;
+ path.m_bStroke = bStroke;
+ path.m_FillType = bFill ? FXFILL_WINDING : 0;
+ path.CalcBoundingBox();
+ ProcessPath(&path, pObj2Device);
+ }
}
-CFX_PathData* CPDF_Font::LoadGlyphPath(FX_DWORD charcode, int dest_width)
-{
- int glyph_index = GlyphFromCharCode(charcode);
- if (m_Font.m_Face == NULL) {
- return NULL;
- }
- return m_Font.LoadGlyphPath(glyph_index, dest_width);
+CFX_PathData* CPDF_Font::LoadGlyphPath(FX_DWORD charcode, int dest_width) {
+ int glyph_index = GlyphFromCharCode(charcode);
+ if (m_Font.m_Face == NULL) {
+ return NULL;
+ }
+ return m_Font.LoadGlyphPath(glyph_index, dest_width);
}
diff --git a/core/src/fpdfapi/fpdf_render/render_int.h b/core/src/fpdfapi/fpdf_render/render_int.h
index e5fb831a63..d6b314d853 100644
--- a/core/src/fpdfapi/fpdf_render/render_int.h
+++ b/core/src/fpdfapi/fpdf_render/render_int.h
@@ -13,463 +13,582 @@
#include "../../../include/fpdfapi/fpdf_pageobj.h"
class CPDF_QuickStretcher;
-#define TYPE3_MAX_BLUES 16
-class CPDF_Type3Glyphs
-{
-public:
- CPDF_Type3Glyphs()
- {
- m_GlyphMap.InitHashTable(253);
- m_TopBlueCount = m_BottomBlueCount = 0;
- }
- ~CPDF_Type3Glyphs();
- CFX_MapPtrToPtr m_GlyphMap;
- void AdjustBlue(FX_FLOAT top, FX_FLOAT bottom, int& top_line, int& bottom_line);
+#define TYPE3_MAX_BLUES 16
+class CPDF_Type3Glyphs {
+ public:
+ CPDF_Type3Glyphs() {
+ m_GlyphMap.InitHashTable(253);
+ m_TopBlueCount = m_BottomBlueCount = 0;
+ }
+ ~CPDF_Type3Glyphs();
+ CFX_MapPtrToPtr m_GlyphMap;
+ void AdjustBlue(FX_FLOAT top,
+ FX_FLOAT bottom,
+ int& top_line,
+ int& bottom_line);
- int m_TopBlue[TYPE3_MAX_BLUES], m_BottomBlue[TYPE3_MAX_BLUES];
- int m_TopBlueCount, m_BottomBlueCount;
+ int m_TopBlue[TYPE3_MAX_BLUES], m_BottomBlue[TYPE3_MAX_BLUES];
+ int m_TopBlueCount, m_BottomBlueCount;
};
class CFX_GlyphBitmap;
-class CPDF_Type3Cache
-{
-public:
- CPDF_Type3Cache(CPDF_Type3Font* pFont)
- {
- m_pFont = pFont;
- }
- ~CPDF_Type3Cache();
- CFX_GlyphBitmap* LoadGlyph(FX_DWORD charcode, const CFX_AffineMatrix* pMatrix, FX_FLOAT retinaScaleX = 1.0f, FX_FLOAT retinaScaleY = 1.0f);
-protected:
- CFX_GlyphBitmap* RenderGlyph(CPDF_Type3Glyphs* pSize, FX_DWORD charcode, const CFX_AffineMatrix* pMatrix, FX_FLOAT retinaScaleX = 1.0f, FX_FLOAT retinaScaleY = 1.0f);
- CPDF_Type3Font* m_pFont;
- CFX_MapByteStringToPtr m_SizeMap;
+class CPDF_Type3Cache {
+ public:
+ CPDF_Type3Cache(CPDF_Type3Font* pFont) { m_pFont = pFont; }
+ ~CPDF_Type3Cache();
+ CFX_GlyphBitmap* LoadGlyph(FX_DWORD charcode,
+ const CFX_AffineMatrix* pMatrix,
+ FX_FLOAT retinaScaleX = 1.0f,
+ FX_FLOAT retinaScaleY = 1.0f);
+
+ protected:
+ CFX_GlyphBitmap* RenderGlyph(CPDF_Type3Glyphs* pSize,
+ FX_DWORD charcode,
+ const CFX_AffineMatrix* pMatrix,
+ FX_FLOAT retinaScaleX = 1.0f,
+ FX_FLOAT retinaScaleY = 1.0f);
+ CPDF_Type3Font* m_pFont;
+ CFX_MapByteStringToPtr m_SizeMap;
};
-class CPDF_TransferFunc
-{
-public:
- CPDF_Document* m_pPDFDoc;
- uint8_t m_Samples[256 * 3];
- FX_BOOL m_bIdentity;
+class CPDF_TransferFunc {
+ public:
+ CPDF_Document* m_pPDFDoc;
+ uint8_t m_Samples[256 * 3];
+ FX_BOOL m_bIdentity;
- CFX_DIBSource* TranslateImage(const CFX_DIBSource* pSrc, FX_BOOL bAutoDropSrc);
- FX_COLORREF TranslateColor(FX_COLORREF src);
+ CFX_DIBSource* TranslateImage(const CFX_DIBSource* pSrc,
+ FX_BOOL bAutoDropSrc);
+ FX_COLORREF TranslateColor(FX_COLORREF src);
};
-class CPDF_DocRenderData
-{
-public:
- CPDF_DocRenderData(CPDF_Document* pPDFDoc = NULL);
- ~CPDF_DocRenderData();
- CPDF_Type3Cache* GetCachedType3(CPDF_Type3Font* pFont);
- CPDF_TransferFunc* GetTransferFunc(CPDF_Object* pObj);
- CFX_FontCache* GetFontCache()
- {
- return m_pFontCache;
- }
- void Clear(FX_BOOL bRelease = FALSE);
- void ReleaseCachedType3(CPDF_Type3Font* pFont);
- void ReleaseTransferFunc(CPDF_Object* pObj);
-private:
- using CPDF_Type3CacheMap =
- std::map<CPDF_Font*, CPDF_CountedObject<CPDF_Type3Cache>*>;
- using CPDF_TransferFuncMap =
- std::map<CPDF_Object*, CPDF_CountedObject<CPDF_TransferFunc>*> ;
+class CPDF_DocRenderData {
+ public:
+ CPDF_DocRenderData(CPDF_Document* pPDFDoc = NULL);
+ ~CPDF_DocRenderData();
+ CPDF_Type3Cache* GetCachedType3(CPDF_Type3Font* pFont);
+ CPDF_TransferFunc* GetTransferFunc(CPDF_Object* pObj);
+ CFX_FontCache* GetFontCache() { return m_pFontCache; }
+ void Clear(FX_BOOL bRelease = FALSE);
+ void ReleaseCachedType3(CPDF_Type3Font* pFont);
+ void ReleaseTransferFunc(CPDF_Object* pObj);
+
+ private:
+ using CPDF_Type3CacheMap =
+ std::map<CPDF_Font*, CPDF_CountedObject<CPDF_Type3Cache>*>;
+ using CPDF_TransferFuncMap =
+ std::map<CPDF_Object*, CPDF_CountedObject<CPDF_TransferFunc>*>;
- CPDF_Document* m_pPDFDoc;
- CFX_FontCache* m_pFontCache;
- CPDF_Type3CacheMap m_Type3FaceMap;
- CPDF_TransferFuncMap m_TransferFuncMap;
+ CPDF_Document* m_pPDFDoc;
+ CFX_FontCache* m_pFontCache;
+ CPDF_Type3CacheMap m_Type3FaceMap;
+ CPDF_TransferFuncMap m_TransferFuncMap;
};
struct _PDF_RenderItem {
-public:
- CPDF_PageObjects* m_pObjectList;
- CFX_AffineMatrix m_Matrix;
+ public:
+ CPDF_PageObjects* m_pObjectList;
+ CFX_AffineMatrix m_Matrix;
};
-typedef CFX_ArrayTemplate<_PDF_RenderItem> CPDF_RenderLayer;
-class IPDF_ObjectRenderer
-{
-public:
- static IPDF_ObjectRenderer* Create(int type);
- virtual ~IPDF_ObjectRenderer() {}
- virtual FX_BOOL Start(CPDF_RenderStatus* pRenderStatus, const CPDF_PageObject* pObj, const CFX_AffineMatrix* pObj2Device, FX_BOOL bStdCS, int blendType = FXDIB_BLEND_NORMAL) = 0;
- virtual FX_BOOL Continue(IFX_Pause* pPause) = 0;
- FX_BOOL m_Result;
+typedef CFX_ArrayTemplate<_PDF_RenderItem> CPDF_RenderLayer;
+class IPDF_ObjectRenderer {
+ public:
+ static IPDF_ObjectRenderer* Create(int type);
+ virtual ~IPDF_ObjectRenderer() {}
+ virtual FX_BOOL Start(CPDF_RenderStatus* pRenderStatus,
+ const CPDF_PageObject* pObj,
+ const CFX_AffineMatrix* pObj2Device,
+ FX_BOOL bStdCS,
+ int blendType = FXDIB_BLEND_NORMAL) = 0;
+ virtual FX_BOOL Continue(IFX_Pause* pPause) = 0;
+ FX_BOOL m_Result;
};
-class CPDF_RenderStatus
-{
-public:
- CPDF_RenderStatus();
- ~CPDF_RenderStatus();
- FX_BOOL Initialize(class CPDF_RenderContext* pContext, CFX_RenderDevice* pDevice, const CFX_AffineMatrix* pDeviceMatrix,
- const CPDF_PageObject* pStopObj, const CPDF_RenderStatus* pParentStatus,
- const CPDF_GraphicStates* pInitialStates, const CPDF_RenderOptions* pOptions,
- int transparency, FX_BOOL bDropObjects, CPDF_Dictionary* pFormResource = NULL,
- FX_BOOL bStdCS = FALSE, CPDF_Type3Char* pType3Char = NULL, FX_ARGB fill_color = 0,
- FX_DWORD GroupFamily = 0, FX_BOOL bLoadMask = FALSE);
- void RenderObjectList(const CPDF_PageObjects* pObjs, const CFX_AffineMatrix* pObj2Device);
- void RenderSingleObject(const CPDF_PageObject* pObj, const CFX_AffineMatrix* pObj2Device);
- FX_BOOL ContinueSingleObject(const CPDF_PageObject* pObj, const CFX_AffineMatrix* pObj2Device, IFX_Pause* pPause);
- CPDF_RenderOptions m_Options;
- CPDF_Dictionary* m_pFormResource;
- CPDF_Dictionary* m_pPageResource;
- CFX_PtrArray m_Type3FontCache;
- CPDF_RenderContext* GetContext()
- {
- return m_pContext;
- }
-protected:
- friend class CPDF_ImageRenderer;
- friend class CPDF_RenderContext;
- void ProcessClipPath(CPDF_ClipPath ClipPath, const CFX_AffineMatrix* pObj2Device);
- void DrawClipPath(CPDF_ClipPath ClipPath, const CFX_AffineMatrix* pObj2Device);
- FX_BOOL ProcessTransparency(const CPDF_PageObject* PageObj, const CFX_AffineMatrix* pObj2Device);
- void ProcessObjectNoClip(const CPDF_PageObject* PageObj, const CFX_AffineMatrix* pObj2Device);
- void DrawObjWithBackground(const CPDF_PageObject* pObj, const CFX_AffineMatrix* pObj2Device);
- FX_BOOL DrawObjWithBlend(const CPDF_PageObject* pObj, const CFX_AffineMatrix* pObj2Device);
- FX_BOOL ProcessPath(CPDF_PathObject* pPathObj, const CFX_AffineMatrix* pObj2Device);
- void ProcessPathPattern(CPDF_PathObject* pPathObj, const CFX_AffineMatrix* pObj2Device, int& filltype, FX_BOOL& bStroke);
- void DrawPathWithPattern(CPDF_PathObject* pPathObj, const CFX_AffineMatrix* pObj2Device, CPDF_Color* pColor, FX_BOOL bStroke);
- void DrawTilingPattern(CPDF_TilingPattern* pPattern, CPDF_PageObject* pPageObj, const CFX_AffineMatrix* pObj2Device, FX_BOOL bStroke);
- void DrawShadingPattern(CPDF_ShadingPattern* pPattern, CPDF_PageObject* pPageObj, const CFX_AffineMatrix* pObj2Device, FX_BOOL bStroke);
- FX_BOOL SelectClipPath(CPDF_PathObject* pPathObj, const CFX_AffineMatrix* pObj2Device, FX_BOOL bStroke);
- FX_BOOL ProcessImage(CPDF_ImageObject* pImageObj, const CFX_AffineMatrix* pObj2Device);
- FX_BOOL OutputBitmapAlpha(CPDF_ImageObject* pImageObj, const CFX_AffineMatrix* pImage2Device);
- FX_BOOL OutputImage(CPDF_ImageObject* pImageObj, const CFX_AffineMatrix* pImage2Device);
- FX_BOOL OutputDIBSource(const CFX_DIBSource* pOutputBitmap, FX_ARGB fill_argb, int bitmap_alpha,
- const CFX_AffineMatrix* pImage2Device, CPDF_ImageCache* pImageCache, FX_DWORD flags);
- void CompositeDIBitmap(CFX_DIBitmap* pDIBitmap, int left, int top, FX_ARGB mask_argb,
- int bitmap_alpha, int blend_mode, int bIsolated);
- FX_BOOL ProcessShading(CPDF_ShadingObject* pShadingObj, const CFX_AffineMatrix* pObj2Device);
- void DrawShading(CPDF_ShadingPattern* pPattern, CFX_AffineMatrix* pMatrix, FX_RECT& clip_rect,
- int alpha, FX_BOOL bAlphaMode);
- FX_BOOL ProcessType3Text(const CPDF_TextObject* textobj, const CFX_AffineMatrix* pObj2Device);
- FX_BOOL ProcessText(const CPDF_TextObject* textobj, const CFX_AffineMatrix* pObj2Device, CFX_PathData* pClippingPath);
- void DrawTextPathWithPattern(const CPDF_TextObject* textobj, const CFX_AffineMatrix* pObj2Device,
- CPDF_Font* pFont, FX_FLOAT font_size,
- const CFX_AffineMatrix* pTextMatrix, FX_BOOL bFill, FX_BOOL bStroke);
- FX_BOOL ProcessForm(CPDF_FormObject* pFormObj, const CFX_AffineMatrix* pObj2Device);
- CFX_DIBitmap* GetBackdrop(const CPDF_PageObject* pObj, const FX_RECT& rect, int& left, int& top,
- FX_BOOL bBackAlphaRequired);
- CFX_DIBitmap* LoadSMask(CPDF_Dictionary* pSMaskDict, FX_RECT* pClipRect, const CFX_AffineMatrix* pMatrix);
- void Init(CPDF_RenderContext* pParent);
- static class CPDF_Type3Cache* GetCachedType3(CPDF_Type3Font* pFont);
- static CPDF_GraphicStates* CloneObjStates(const CPDF_GraphicStates* pPathObj, FX_BOOL bStroke);
- CPDF_TransferFunc* GetTransferFunc(CPDF_Object* pObject) const;
- FX_ARGB GetFillArgb(const CPDF_PageObject* pObj, FX_BOOL bType3 = FALSE) const;
- FX_ARGB GetStrokeArgb(const CPDF_PageObject* pObj) const;
- CPDF_RenderContext* m_pContext;
- FX_BOOL m_bStopped;
- void DitherObjectArea(const CPDF_PageObject* pObj, const CFX_AffineMatrix* pObj2Device);
- FX_BOOL GetObjectClippedRect(const CPDF_PageObject* pObj, const CFX_AffineMatrix* pObj2Device, FX_BOOL bLogical, FX_RECT &rect) const;
- void GetScaledMatrix(CFX_Matrix &matrix) const;
+class CPDF_RenderStatus {
+ public:
+ CPDF_RenderStatus();
+ ~CPDF_RenderStatus();
+ FX_BOOL Initialize(class CPDF_RenderContext* pContext,
+ CFX_RenderDevice* pDevice,
+ const CFX_AffineMatrix* pDeviceMatrix,
+ const CPDF_PageObject* pStopObj,
+ const CPDF_RenderStatus* pParentStatus,
+ const CPDF_GraphicStates* pInitialStates,
+ const CPDF_RenderOptions* pOptions,
+ int transparency,
+ FX_BOOL bDropObjects,
+ CPDF_Dictionary* pFormResource = NULL,
+ FX_BOOL bStdCS = FALSE,
+ CPDF_Type3Char* pType3Char = NULL,
+ FX_ARGB fill_color = 0,
+ FX_DWORD GroupFamily = 0,
+ FX_BOOL bLoadMask = FALSE);
+ void RenderObjectList(const CPDF_PageObjects* pObjs,
+ const CFX_AffineMatrix* pObj2Device);
+ void RenderSingleObject(const CPDF_PageObject* pObj,
+ const CFX_AffineMatrix* pObj2Device);
+ FX_BOOL ContinueSingleObject(const CPDF_PageObject* pObj,
+ const CFX_AffineMatrix* pObj2Device,
+ IFX_Pause* pPause);
+ CPDF_RenderOptions m_Options;
+ CPDF_Dictionary* m_pFormResource;
+ CPDF_Dictionary* m_pPageResource;
+ CFX_PtrArray m_Type3FontCache;
+ CPDF_RenderContext* GetContext() { return m_pContext; }
+
+ protected:
+ friend class CPDF_ImageRenderer;
+ friend class CPDF_RenderContext;
+ void ProcessClipPath(CPDF_ClipPath ClipPath,
+ const CFX_AffineMatrix* pObj2Device);
+ void DrawClipPath(CPDF_ClipPath ClipPath,
+ const CFX_AffineMatrix* pObj2Device);
+ FX_BOOL ProcessTransparency(const CPDF_PageObject* PageObj,
+ const CFX_AffineMatrix* pObj2Device);
+ void ProcessObjectNoClip(const CPDF_PageObject* PageObj,
+ const CFX_AffineMatrix* pObj2Device);
+ void DrawObjWithBackground(const CPDF_PageObject* pObj,
+ const CFX_AffineMatrix* pObj2Device);
+ FX_BOOL DrawObjWithBlend(const CPDF_PageObject* pObj,
+ const CFX_AffineMatrix* pObj2Device);
+ FX_BOOL ProcessPath(CPDF_PathObject* pPathObj,
+ const CFX_AffineMatrix* pObj2Device);
+ void ProcessPathPattern(CPDF_PathObject* pPathObj,
+ const CFX_AffineMatrix* pObj2Device,
+ int& filltype,
+ FX_BOOL& bStroke);
+ void DrawPathWithPattern(CPDF_PathObject* pPathObj,
+ const CFX_AffineMatrix* pObj2Device,
+ CPDF_Color* pColor,
+ FX_BOOL bStroke);
+ void DrawTilingPattern(CPDF_TilingPattern* pPattern,
+ CPDF_PageObject* pPageObj,
+ const CFX_AffineMatrix* pObj2Device,
+ FX_BOOL bStroke);
+ void DrawShadingPattern(CPDF_ShadingPattern* pPattern,
+ CPDF_PageObject* pPageObj,
+ const CFX_AffineMatrix* pObj2Device,
+ FX_BOOL bStroke);
+ FX_BOOL SelectClipPath(CPDF_PathObject* pPathObj,
+ const CFX_AffineMatrix* pObj2Device,
+ FX_BOOL bStroke);
+ FX_BOOL ProcessImage(CPDF_ImageObject* pImageObj,
+ const CFX_AffineMatrix* pObj2Device);
+ FX_BOOL OutputBitmapAlpha(CPDF_ImageObject* pImageObj,
+ const CFX_AffineMatrix* pImage2Device);
+ FX_BOOL OutputImage(CPDF_ImageObject* pImageObj,
+ const CFX_AffineMatrix* pImage2Device);
+ FX_BOOL OutputDIBSource(const CFX_DIBSource* pOutputBitmap,
+ FX_ARGB fill_argb,
+ int bitmap_alpha,
+ const CFX_AffineMatrix* pImage2Device,
+ CPDF_ImageCache* pImageCache,
+ FX_DWORD flags);
+ void CompositeDIBitmap(CFX_DIBitmap* pDIBitmap,
+ int left,
+ int top,
+ FX_ARGB mask_argb,
+ int bitmap_alpha,
+ int blend_mode,
+ int bIsolated);
+ FX_BOOL ProcessShading(CPDF_ShadingObject* pShadingObj,
+ const CFX_AffineMatrix* pObj2Device);
+ void DrawShading(CPDF_ShadingPattern* pPattern,
+ CFX_AffineMatrix* pMatrix,
+ FX_RECT& clip_rect,
+ int alpha,
+ FX_BOOL bAlphaMode);
+ FX_BOOL ProcessType3Text(const CPDF_TextObject* textobj,
+ const CFX_AffineMatrix* pObj2Device);
+ FX_BOOL ProcessText(const CPDF_TextObject* textobj,
+ const CFX_AffineMatrix* pObj2Device,
+ CFX_PathData* pClippingPath);
+ void DrawTextPathWithPattern(const CPDF_TextObject* textobj,
+ const CFX_AffineMatrix* pObj2Device,
+ CPDF_Font* pFont,
+ FX_FLOAT font_size,
+ const CFX_AffineMatrix* pTextMatrix,
+ FX_BOOL bFill,
+ FX_BOOL bStroke);
+ FX_BOOL ProcessForm(CPDF_FormObject* pFormObj,
+ const CFX_AffineMatrix* pObj2Device);
+ CFX_DIBitmap* GetBackdrop(const CPDF_PageObject* pObj,
+ const FX_RECT& rect,
+ int& left,
+ int& top,
+ FX_BOOL bBackAlphaRequired);
+ CFX_DIBitmap* LoadSMask(CPDF_Dictionary* pSMaskDict,
+ FX_RECT* pClipRect,
+ const CFX_AffineMatrix* pMatrix);
+ void Init(CPDF_RenderContext* pParent);
+ static class CPDF_Type3Cache* GetCachedType3(CPDF_Type3Font* pFont);
+ static CPDF_GraphicStates* CloneObjStates(const CPDF_GraphicStates* pPathObj,
+ FX_BOOL bStroke);
+ CPDF_TransferFunc* GetTransferFunc(CPDF_Object* pObject) const;
+ FX_ARGB GetFillArgb(const CPDF_PageObject* pObj,
+ FX_BOOL bType3 = FALSE) const;
+ FX_ARGB GetStrokeArgb(const CPDF_PageObject* pObj) const;
+ CPDF_RenderContext* m_pContext;
+ FX_BOOL m_bStopped;
+ void DitherObjectArea(const CPDF_PageObject* pObj,
+ const CFX_AffineMatrix* pObj2Device);
+ FX_BOOL GetObjectClippedRect(const CPDF_PageObject* pObj,
+ const CFX_AffineMatrix* pObj2Device,
+ FX_BOOL bLogical,
+ FX_RECT& rect) const;
+ void GetScaledMatrix(CFX_Matrix& matrix) const;
-protected:
- static const int kRenderMaxRecursionDepth = 64;
- static int s_CurrentRecursionDepth;
+ protected:
+ static const int kRenderMaxRecursionDepth = 64;
+ static int s_CurrentRecursionDepth;
- CFX_RenderDevice* m_pDevice;
- CFX_AffineMatrix m_DeviceMatrix;
- CPDF_ClipPath m_LastClipPath;
- const CPDF_PageObject* m_pCurObj;
- const CPDF_PageObject* m_pStopObj;
- CPDF_GraphicStates m_InitialStates;
- int m_HalftoneLimit;
- IPDF_ObjectRenderer* m_pObjectRenderer;
- FX_BOOL m_bPrint;
- int m_Transparency;
- int m_DitherBits;
- FX_BOOL m_bDropObjects;
- FX_BOOL m_bStdCS;
- FX_DWORD m_GroupFamily;
- FX_BOOL m_bLoadMask;
- CPDF_Type3Char * m_pType3Char;
- FX_ARGB m_T3FillColor;
- int m_curBlend;
+ CFX_RenderDevice* m_pDevice;
+ CFX_AffineMatrix m_DeviceMatrix;
+ CPDF_ClipPath m_LastClipPath;
+ const CPDF_PageObject* m_pCurObj;
+ const CPDF_PageObject* m_pStopObj;
+ CPDF_GraphicStates m_InitialStates;
+ int m_HalftoneLimit;
+ IPDF_ObjectRenderer* m_pObjectRenderer;
+ FX_BOOL m_bPrint;
+ int m_Transparency;
+ int m_DitherBits;
+ FX_BOOL m_bDropObjects;
+ FX_BOOL m_bStdCS;
+ FX_DWORD m_GroupFamily;
+ FX_BOOL m_bLoadMask;
+ CPDF_Type3Char* m_pType3Char;
+ FX_ARGB m_T3FillColor;
+ int m_curBlend;
};
-class CPDF_ImageLoader
-{
-public:
- CPDF_ImageLoader()
- {
- m_pBitmap = NULL;
- m_pMask = NULL;
- m_MatteColor = 0;
- m_bCached = FALSE;
- m_nDownsampleWidth = 0;
- m_nDownsampleHeight = 0;
- }
+class CPDF_ImageLoader {
+ public:
+ CPDF_ImageLoader() {
+ m_pBitmap = NULL;
+ m_pMask = NULL;
+ m_MatteColor = 0;
+ m_bCached = FALSE;
+ m_nDownsampleWidth = 0;
+ m_nDownsampleHeight = 0;
+ }
- FX_BOOL Load(const CPDF_ImageObject* pImage, CPDF_PageRenderCache* pCache, FX_BOOL bStdCS = FALSE, FX_DWORD GroupFamily = 0, FX_BOOL bLoadMask = FALSE, CPDF_RenderStatus* pRenderStatus = NULL);
+ FX_BOOL Load(const CPDF_ImageObject* pImage,
+ CPDF_PageRenderCache* pCache,
+ FX_BOOL bStdCS = FALSE,
+ FX_DWORD GroupFamily = 0,
+ FX_BOOL bLoadMask = FALSE,
+ CPDF_RenderStatus* pRenderStatus = NULL);
- FX_BOOL StartLoadImage(const CPDF_ImageObject* pImage, CPDF_PageRenderCache* pCache, void*& LoadHandle, FX_BOOL bStdCS = FALSE, FX_DWORD GroupFamily = 0, FX_BOOL bLoadMask = FALSE, CPDF_RenderStatus* pRenderStatus = NULL, int32_t nDownsampleWidth = 0, int32_t nDownsampleHeight = 0);
- FX_BOOL Continue(void* LoadHandle, IFX_Pause* pPause);
- ~CPDF_ImageLoader();
- CFX_DIBSource* m_pBitmap;
- CFX_DIBSource* m_pMask;
- FX_DWORD m_MatteColor;
- FX_BOOL m_bCached;
-protected:
- int32_t m_nDownsampleWidth;
- int32_t m_nDownsampleHeight;
+ FX_BOOL StartLoadImage(const CPDF_ImageObject* pImage,
+ CPDF_PageRenderCache* pCache,
+ void*& LoadHandle,
+ FX_BOOL bStdCS = FALSE,
+ FX_DWORD GroupFamily = 0,
+ FX_BOOL bLoadMask = FALSE,
+ CPDF_RenderStatus* pRenderStatus = NULL,
+ int32_t nDownsampleWidth = 0,
+ int32_t nDownsampleHeight = 0);
+ FX_BOOL Continue(void* LoadHandle, IFX_Pause* pPause);
+ ~CPDF_ImageLoader();
+ CFX_DIBSource* m_pBitmap;
+ CFX_DIBSource* m_pMask;
+ FX_DWORD m_MatteColor;
+ FX_BOOL m_bCached;
+
+ protected:
+ int32_t m_nDownsampleWidth;
+ int32_t m_nDownsampleHeight;
};
-class CPDF_ProgressiveImageLoaderHandle
-{
-public:
- CPDF_ProgressiveImageLoaderHandle();
- ~CPDF_ProgressiveImageLoaderHandle();
+class CPDF_ProgressiveImageLoaderHandle {
+ public:
+ CPDF_ProgressiveImageLoaderHandle();
+ ~CPDF_ProgressiveImageLoaderHandle();
+
+ FX_BOOL Start(CPDF_ImageLoader* pImageLoader,
+ const CPDF_ImageObject* pImage,
+ CPDF_PageRenderCache* pCache,
+ FX_BOOL bStdCS = FALSE,
+ FX_DWORD GroupFamily = 0,
+ FX_BOOL bLoadMask = FALSE,
+ CPDF_RenderStatus* pRenderStatus = NULL,
+ int32_t nDownsampleWidth = 0,
+ int32_t nDownsampleHeight = 0);
+ FX_BOOL Continue(IFX_Pause* pPause);
- FX_BOOL Start(CPDF_ImageLoader* pImageLoader, const CPDF_ImageObject* pImage, CPDF_PageRenderCache* pCache, FX_BOOL bStdCS = FALSE, FX_DWORD GroupFamily = 0, FX_BOOL bLoadMask = FALSE, CPDF_RenderStatus* pRenderStatus = NULL, int32_t nDownsampleWidth = 0, int32_t nDownsampleHeight = 0);
- FX_BOOL Continue(IFX_Pause* pPause);
-protected:
- CPDF_ImageLoader* m_pImageLoader;
- CPDF_PageRenderCache* m_pCache;
- CPDF_ImageObject* m_pImage;
- int32_t m_nDownsampleWidth;
- int32_t m_nDownsampleHeight;
+ protected:
+ CPDF_ImageLoader* m_pImageLoader;
+ CPDF_PageRenderCache* m_pCache;
+ CPDF_ImageObject* m_pImage;
+ int32_t m_nDownsampleWidth;
+ int32_t m_nDownsampleHeight;
};
class CFX_ImageTransformer;
-class CPDF_ImageRenderer : public IPDF_ObjectRenderer
-{
-public:
- CPDF_ImageRenderer();
- ~CPDF_ImageRenderer();
- FX_BOOL Start(CPDF_RenderStatus* pStatus, const CPDF_PageObject* pObj, const CFX_AffineMatrix* pObj2Device, FX_BOOL bStdCS, int blendType = FXDIB_BLEND_NORMAL);
- FX_BOOL Start(CPDF_RenderStatus* pStatus, const CFX_DIBSource* pDIBSource, FX_ARGB bitmap_argb,
- int bitmap_alpha, const CFX_AffineMatrix* pImage2Device, FX_DWORD flags, FX_BOOL bStdCS, int blendType = FXDIB_BLEND_NORMAL);
- FX_BOOL Continue(IFX_Pause* pPause);
-protected:
- CPDF_RenderStatus* m_pRenderStatus;
- CPDF_ImageObject* m_pImageObject;
- int m_Status;
- const CFX_AffineMatrix* m_pObj2Device;
- CFX_AffineMatrix m_ImageMatrix;
- CPDF_ImageLoader m_Loader;
- const CFX_DIBSource* m_pDIBSource;
- CFX_DIBitmap* m_pClone;
- int m_BitmapAlpha;
- FX_BOOL m_bPatternColor;
- CPDF_Pattern* m_pPattern;
- FX_ARGB m_FillArgb;
- FX_DWORD m_Flags;
- CPDF_QuickStretcher* m_pQuickStretcher;
- CFX_ImageTransformer* m_pTransformer;
- void* m_DeviceHandle;
- void* m_LoadHandle;
- FX_BOOL m_bStdCS;
- int m_BlendType;
- FX_BOOL StartBitmapAlpha();
- FX_BOOL StartDIBSource();
- FX_BOOL StartRenderDIBSource();
- FX_BOOL StartLoadDIBSource();
- FX_BOOL DrawMaskedImage();
- FX_BOOL DrawPatternImage(const CFX_Matrix* pObj2Device);
+class CPDF_ImageRenderer : public IPDF_ObjectRenderer {
+ public:
+ CPDF_ImageRenderer();
+ ~CPDF_ImageRenderer();
+ FX_BOOL Start(CPDF_RenderStatus* pStatus,
+ const CPDF_PageObject* pObj,
+ const CFX_AffineMatrix* pObj2Device,
+ FX_BOOL bStdCS,
+ int blendType = FXDIB_BLEND_NORMAL);
+ FX_BOOL Start(CPDF_RenderStatus* pStatus,
+ const CFX_DIBSource* pDIBSource,
+ FX_ARGB bitmap_argb,
+ int bitmap_alpha,
+ const CFX_AffineMatrix* pImage2Device,
+ FX_DWORD flags,
+ FX_BOOL bStdCS,
+ int blendType = FXDIB_BLEND_NORMAL);
+ FX_BOOL Continue(IFX_Pause* pPause);
+
+ protected:
+ CPDF_RenderStatus* m_pRenderStatus;
+ CPDF_ImageObject* m_pImageObject;
+ int m_Status;
+ const CFX_AffineMatrix* m_pObj2Device;
+ CFX_AffineMatrix m_ImageMatrix;
+ CPDF_ImageLoader m_Loader;
+ const CFX_DIBSource* m_pDIBSource;
+ CFX_DIBitmap* m_pClone;
+ int m_BitmapAlpha;
+ FX_BOOL m_bPatternColor;
+ CPDF_Pattern* m_pPattern;
+ FX_ARGB m_FillArgb;
+ FX_DWORD m_Flags;
+ CPDF_QuickStretcher* m_pQuickStretcher;
+ CFX_ImageTransformer* m_pTransformer;
+ void* m_DeviceHandle;
+ void* m_LoadHandle;
+ FX_BOOL m_bStdCS;
+ int m_BlendType;
+ FX_BOOL StartBitmapAlpha();
+ FX_BOOL StartDIBSource();
+ FX_BOOL StartRenderDIBSource();
+ FX_BOOL StartLoadDIBSource();
+ FX_BOOL DrawMaskedImage();
+ FX_BOOL DrawPatternImage(const CFX_Matrix* pObj2Device);
};
-class CPDF_ScaledRenderBuffer
-{
-public:
- CPDF_ScaledRenderBuffer();
- ~CPDF_ScaledRenderBuffer();
- FX_BOOL Initialize(CPDF_RenderContext* pContext, CFX_RenderDevice* pDevice, FX_RECT* pRect,
- const CPDF_PageObject* pObj, const CPDF_RenderOptions *pOptions = NULL, int max_dpi = 0);
- CFX_RenderDevice* GetDevice()
- {
- return m_pBitmapDevice ? m_pBitmapDevice : m_pDevice;
- }
- CFX_AffineMatrix* GetMatrix()
- {
- return &m_Matrix;
- }
- void OutputToDevice();
-private:
- CFX_RenderDevice* m_pDevice;
- CPDF_RenderContext* m_pContext;
- FX_RECT m_Rect;
- const CPDF_PageObject* m_pObject;
- CFX_FxgeDevice* m_pBitmapDevice;
- CFX_AffineMatrix m_Matrix;
+class CPDF_ScaledRenderBuffer {
+ public:
+ CPDF_ScaledRenderBuffer();
+ ~CPDF_ScaledRenderBuffer();
+ FX_BOOL Initialize(CPDF_RenderContext* pContext,
+ CFX_RenderDevice* pDevice,
+ FX_RECT* pRect,
+ const CPDF_PageObject* pObj,
+ const CPDF_RenderOptions* pOptions = NULL,
+ int max_dpi = 0);
+ CFX_RenderDevice* GetDevice() {
+ return m_pBitmapDevice ? m_pBitmapDevice : m_pDevice;
+ }
+ CFX_AffineMatrix* GetMatrix() { return &m_Matrix; }
+ void OutputToDevice();
+
+ private:
+ CFX_RenderDevice* m_pDevice;
+ CPDF_RenderContext* m_pContext;
+ FX_RECT m_Rect;
+ const CPDF_PageObject* m_pObject;
+ CFX_FxgeDevice* m_pBitmapDevice;
+ CFX_AffineMatrix m_Matrix;
};
class ICodec_ScanlineDecoder;
-class CPDF_QuickStretcher
-{
-public:
- CPDF_QuickStretcher();
- ~CPDF_QuickStretcher();
- FX_BOOL Start(CPDF_ImageObject* pImageObj, CFX_AffineMatrix* pImage2Device, const FX_RECT* pClipBox);
- FX_BOOL Continue(IFX_Pause* pPause);
- CFX_DIBitmap* m_pBitmap;
- int m_ResultLeft, m_ResultTop, m_ClipLeft, m_ClipTop;
- int m_DestWidth, m_DestHeight, m_ResultWidth, m_ResultHeight;
- int m_Bpp, m_SrcWidth, m_SrcHeight;
- FX_BOOL m_bFlipX, m_bFlipY;
- CPDF_ColorSpace* m_pCS;
- ICodec_ScanlineDecoder* m_pDecoder;
- CPDF_StreamAcc m_StreamAcc;
- int m_LineIndex;
+class CPDF_QuickStretcher {
+ public:
+ CPDF_QuickStretcher();
+ ~CPDF_QuickStretcher();
+ FX_BOOL Start(CPDF_ImageObject* pImageObj,
+ CFX_AffineMatrix* pImage2Device,
+ const FX_RECT* pClipBox);
+ FX_BOOL Continue(IFX_Pause* pPause);
+ CFX_DIBitmap* m_pBitmap;
+ int m_ResultLeft, m_ResultTop, m_ClipLeft, m_ClipTop;
+ int m_DestWidth, m_DestHeight, m_ResultWidth, m_ResultHeight;
+ int m_Bpp, m_SrcWidth, m_SrcHeight;
+ FX_BOOL m_bFlipX, m_bFlipY;
+ CPDF_ColorSpace* m_pCS;
+ ICodec_ScanlineDecoder* m_pDecoder;
+ CPDF_StreamAcc m_StreamAcc;
+ int m_LineIndex;
};
-class CPDF_DeviceBuffer
-{
-public:
- CPDF_DeviceBuffer();
- ~CPDF_DeviceBuffer();
- FX_BOOL Initialize(CPDF_RenderContext* pContext, CFX_RenderDevice* pDevice, FX_RECT* pRect,
- const CPDF_PageObject* pObj, int max_dpi = 0);
- void OutputToDevice();
- CFX_DIBitmap* GetBitmap() const
- {
- return m_pBitmap;
- }
- const CFX_AffineMatrix* GetMatrix() const
- {
- return &m_Matrix;
- }
-private:
- CFX_RenderDevice* m_pDevice;
- CPDF_RenderContext* m_pContext;
- FX_RECT m_Rect;
- const CPDF_PageObject* m_pObject;
- CFX_DIBitmap* m_pBitmap;
- CFX_AffineMatrix m_Matrix;
+class CPDF_DeviceBuffer {
+ public:
+ CPDF_DeviceBuffer();
+ ~CPDF_DeviceBuffer();
+ FX_BOOL Initialize(CPDF_RenderContext* pContext,
+ CFX_RenderDevice* pDevice,
+ FX_RECT* pRect,
+ const CPDF_PageObject* pObj,
+ int max_dpi = 0);
+ void OutputToDevice();
+ CFX_DIBitmap* GetBitmap() const { return m_pBitmap; }
+ const CFX_AffineMatrix* GetMatrix() const { return &m_Matrix; }
+
+ private:
+ CFX_RenderDevice* m_pDevice;
+ CPDF_RenderContext* m_pContext;
+ FX_RECT m_Rect;
+ const CPDF_PageObject* m_pObject;
+ CFX_DIBitmap* m_pBitmap;
+ CFX_AffineMatrix m_Matrix;
};
-class CPDF_ImageCache
-{
-public:
- CPDF_ImageCache(CPDF_Document* pDoc, CPDF_Stream* pStream);
- ~CPDF_ImageCache();
- void ClearImageData();
- void Reset(const CFX_DIBitmap* pBitmap);
- FX_BOOL GetCachedBitmap(CFX_DIBSource*& pBitmap, CFX_DIBSource*& pMask, FX_DWORD& MatteColor, CPDF_Dictionary* pPageResources,
- FX_BOOL bStdCS = FALSE, FX_DWORD GroupFamily = 0, FX_BOOL bLoadMask = FALSE,
- CPDF_RenderStatus* pRenderStatus = NULL, int32_t downsampleWidth = 0, int32_t downsampleHeight = 0);
- FX_DWORD EstimateSize() const
- {
- return m_dwCacheSize;
- }
- FX_DWORD GetTimeCount() const
- {
- return m_dwTimeCount;
- }
- CPDF_Stream* GetStream() const
- {
- return m_pStream;
- }
- void SetTimeCount(FX_DWORD dwTimeCount)
- {
- m_dwTimeCount = dwTimeCount;
- }
- int m_dwTimeCount;
-public:
- int StartGetCachedBitmap(CPDF_Dictionary* pFormResources, CPDF_Dictionary* pPageResources,
- FX_BOOL bStdCS = FALSE, FX_DWORD GroupFamily = 0,
- FX_BOOL bLoadMask = FALSE, CPDF_RenderStatus* pRenderStatus = NULL, int32_t downsampleWidth = 0, int32_t downsampleHeight = 0);
- int Continue(IFX_Pause* pPause);
- int ContinueGetCachedBitmap();
- CFX_DIBSource* DetachBitmap();
- CFX_DIBSource* DetachMask();
- CFX_DIBSource* m_pCurBitmap;
- CFX_DIBSource* m_pCurMask;
- FX_DWORD m_MatteColor;
- CPDF_RenderStatus* m_pRenderStatus;
-protected:
- CPDF_Document* m_pDocument;
- CPDF_Stream* m_pStream;
- CFX_DIBSource* m_pCachedBitmap;
- CFX_DIBSource* m_pCachedMask;
- FX_DWORD m_dwCacheSize;
- void CalcSize();
+class CPDF_ImageCache {
+ public:
+ CPDF_ImageCache(CPDF_Document* pDoc, CPDF_Stream* pStream);
+ ~CPDF_ImageCache();
+ void ClearImageData();
+ void Reset(const CFX_DIBitmap* pBitmap);
+ FX_BOOL GetCachedBitmap(CFX_DIBSource*& pBitmap,
+ CFX_DIBSource*& pMask,
+ FX_DWORD& MatteColor,
+ CPDF_Dictionary* pPageResources,
+ FX_BOOL bStdCS = FALSE,
+ FX_DWORD GroupFamily = 0,
+ FX_BOOL bLoadMask = FALSE,
+ CPDF_RenderStatus* pRenderStatus = NULL,
+ int32_t downsampleWidth = 0,
+ int32_t downsampleHeight = 0);
+ FX_DWORD EstimateSize() const { return m_dwCacheSize; }
+ FX_DWORD GetTimeCount() const { return m_dwTimeCount; }
+ CPDF_Stream* GetStream() const { return m_pStream; }
+ void SetTimeCount(FX_DWORD dwTimeCount) { m_dwTimeCount = dwTimeCount; }
+ int m_dwTimeCount;
+
+ public:
+ int StartGetCachedBitmap(CPDF_Dictionary* pFormResources,
+ CPDF_Dictionary* pPageResources,
+ FX_BOOL bStdCS = FALSE,
+ FX_DWORD GroupFamily = 0,
+ FX_BOOL bLoadMask = FALSE,
+ CPDF_RenderStatus* pRenderStatus = NULL,
+ int32_t downsampleWidth = 0,
+ int32_t downsampleHeight = 0);
+ int Continue(IFX_Pause* pPause);
+ int ContinueGetCachedBitmap();
+ CFX_DIBSource* DetachBitmap();
+ CFX_DIBSource* DetachMask();
+ CFX_DIBSource* m_pCurBitmap;
+ CFX_DIBSource* m_pCurMask;
+ FX_DWORD m_MatteColor;
+ CPDF_RenderStatus* m_pRenderStatus;
+
+ protected:
+ CPDF_Document* m_pDocument;
+ CPDF_Stream* m_pStream;
+ CFX_DIBSource* m_pCachedBitmap;
+ CFX_DIBSource* m_pCachedMask;
+ FX_DWORD m_dwCacheSize;
+ void CalcSize();
};
typedef struct {
- FX_FLOAT m_DecodeMin;
- FX_FLOAT m_DecodeStep;
- int m_ColorKeyMin;
- int m_ColorKeyMax;
+ FX_FLOAT m_DecodeMin;
+ FX_FLOAT m_DecodeStep;
+ int m_ColorKeyMin;
+ int m_ColorKeyMax;
} DIB_COMP_DATA;
-class CPDF_DIBSource : public CFX_DIBSource
-{
-public:
- CPDF_DIBSource();
- virtual ~CPDF_DIBSource();
- FX_BOOL Load(CPDF_Document* pDoc, const CPDF_Stream* pStream,
- CPDF_DIBSource** ppMask, FX_DWORD* pMatteColor,
- CPDF_Dictionary* pFormResources, CPDF_Dictionary* pPageResources,
- FX_BOOL bStdCS = FALSE, FX_DWORD GroupFamily = 0, FX_BOOL bLoadMask = FALSE);
- virtual FX_BOOL SkipToScanline(int line, IFX_Pause* pPause) const;
- virtual uint8_t* GetBuffer() const;
- virtual const uint8_t* GetScanline(int line) const;
- virtual void DownSampleScanline(int line, uint8_t* dest_scan, int dest_bpp,
- int dest_width, FX_BOOL bFlipX, int clip_left, int clip_width) const;
- virtual void SetDownSampleSize(int dest_width, int dest_height) const;
- CFX_DIBitmap* GetBitmap() const;
- void ReleaseBitmap(CFX_DIBitmap*) const;
- void ClearImageData();
-public:
- int StartLoadDIBSource(CPDF_Document* pDoc, const CPDF_Stream* pStream, FX_BOOL bHasMask,
- CPDF_Dictionary* pFormResources, CPDF_Dictionary* pPageResources,
- FX_BOOL bStdCS = FALSE, FX_DWORD GroupFamily = 0, FX_BOOL bLoadMask = FALSE);
- int ContinueLoadDIBSource(IFX_Pause* pPause);
- int StratLoadMask();
- int StartLoadMaskDIB();
- int ContinueLoadMaskDIB(IFX_Pause* pPause);
- int ContinueToLoadMask();
- CPDF_DIBSource* DetachMask();
- CPDF_DIBSource* m_pMask;
- FX_DWORD m_MatteColor;
- void* m_pJbig2Context;
- CPDF_StreamAcc* m_pGlobalStream;
- FX_BOOL m_bStdCS;
- int m_Status;
- CPDF_Object* m_pMaskStream;
- FX_BOOL m_bHasMask;
-protected:
- FX_BOOL LoadColorInfo(CPDF_Dictionary* pFormResources, CPDF_Dictionary* pPageResources);
- DIB_COMP_DATA* GetDecodeAndMaskArray(FX_BOOL& bDefaultDecode, FX_BOOL& bColorKey);
- CPDF_DIBSource* LoadMask(FX_DWORD& MatteColor);
- CPDF_DIBSource* LoadMaskDIB(CPDF_Stream* pMask);
- void LoadJpxBitmap();
- void LoadPalette();
- int CreateDecoder();
- void TranslateScanline24bpp(uint8_t* dest_scan, const uint8_t* src_scan) const;
- void ValidateDictParam();
- CPDF_Document* m_pDocument;
- const CPDF_Stream* m_pStream;
- CPDF_StreamAcc* m_pStreamAcc;
- const CPDF_Dictionary* m_pDict;
- CPDF_ColorSpace* m_pColorSpace;
- FX_DWORD m_Family;
- FX_DWORD m_bpc;
- FX_DWORD m_bpc_orig;
- FX_DWORD m_nComponents;
- FX_DWORD m_GroupFamily;
- FX_BOOL m_bLoadMask;
- FX_BOOL m_bDefaultDecode;
- FX_BOOL m_bImageMask;
- FX_BOOL m_bDoBpcCheck;
- FX_BOOL m_bColorKey;
- DIB_COMP_DATA* m_pCompData;
- uint8_t* m_pLineBuf;
- uint8_t* m_pMaskedLine;
- nonstd::unique_ptr<CFX_DIBitmap> m_pCachedBitmap;
- ICodec_ScanlineDecoder* m_pDecoder;
+class CPDF_DIBSource : public CFX_DIBSource {
+ public:
+ CPDF_DIBSource();
+ virtual ~CPDF_DIBSource();
+ FX_BOOL Load(CPDF_Document* pDoc,
+ const CPDF_Stream* pStream,
+ CPDF_DIBSource** ppMask,
+ FX_DWORD* pMatteColor,
+ CPDF_Dictionary* pFormResources,
+ CPDF_Dictionary* pPageResources,
+ FX_BOOL bStdCS = FALSE,
+ FX_DWORD GroupFamily = 0,
+ FX_BOOL bLoadMask = FALSE);
+ virtual FX_BOOL SkipToScanline(int line, IFX_Pause* pPause) const;
+ virtual uint8_t* GetBuffer() const;
+ virtual const uint8_t* GetScanline(int line) const;
+ virtual void DownSampleScanline(int line,
+ uint8_t* dest_scan,
+ int dest_bpp,
+ int dest_width,
+ FX_BOOL bFlipX,
+ int clip_left,
+ int clip_width) const;
+ virtual void SetDownSampleSize(int dest_width, int dest_height) const;
+ CFX_DIBitmap* GetBitmap() const;
+ void ReleaseBitmap(CFX_DIBitmap*) const;
+ void ClearImageData();
+
+ public:
+ int StartLoadDIBSource(CPDF_Document* pDoc,
+ const CPDF_Stream* pStream,
+ FX_BOOL bHasMask,
+ CPDF_Dictionary* pFormResources,
+ CPDF_Dictionary* pPageResources,
+ FX_BOOL bStdCS = FALSE,
+ FX_DWORD GroupFamily = 0,
+ FX_BOOL bLoadMask = FALSE);
+ int ContinueLoadDIBSource(IFX_Pause* pPause);
+ int StratLoadMask();
+ int StartLoadMaskDIB();
+ int ContinueLoadMaskDIB(IFX_Pause* pPause);
+ int ContinueToLoadMask();
+ CPDF_DIBSource* DetachMask();
+ CPDF_DIBSource* m_pMask;
+ FX_DWORD m_MatteColor;
+ void* m_pJbig2Context;
+ CPDF_StreamAcc* m_pGlobalStream;
+ FX_BOOL m_bStdCS;
+ int m_Status;
+ CPDF_Object* m_pMaskStream;
+ FX_BOOL m_bHasMask;
+
+ protected:
+ FX_BOOL LoadColorInfo(CPDF_Dictionary* pFormResources,
+ CPDF_Dictionary* pPageResources);
+ DIB_COMP_DATA* GetDecodeAndMaskArray(FX_BOOL& bDefaultDecode,
+ FX_BOOL& bColorKey);
+ CPDF_DIBSource* LoadMask(FX_DWORD& MatteColor);
+ CPDF_DIBSource* LoadMaskDIB(CPDF_Stream* pMask);
+ void LoadJpxBitmap();
+ void LoadPalette();
+ int CreateDecoder();
+ void TranslateScanline24bpp(uint8_t* dest_scan,
+ const uint8_t* src_scan) const;
+ void ValidateDictParam();
+ CPDF_Document* m_pDocument;
+ const CPDF_Stream* m_pStream;
+ CPDF_StreamAcc* m_pStreamAcc;
+ const CPDF_Dictionary* m_pDict;
+ CPDF_ColorSpace* m_pColorSpace;
+ FX_DWORD m_Family;
+ FX_DWORD m_bpc;
+ FX_DWORD m_bpc_orig;
+ FX_DWORD m_nComponents;
+ FX_DWORD m_GroupFamily;
+ FX_BOOL m_bLoadMask;
+ FX_BOOL m_bDefaultDecode;
+ FX_BOOL m_bImageMask;
+ FX_BOOL m_bDoBpcCheck;
+ FX_BOOL m_bColorKey;
+ DIB_COMP_DATA* m_pCompData;
+ uint8_t* m_pLineBuf;
+ uint8_t* m_pMaskedLine;
+ nonstd::unique_ptr<CFX_DIBitmap> m_pCachedBitmap;
+ ICodec_ScanlineDecoder* m_pDecoder;
};
-#define FPDF_HUGE_IMAGE_SIZE 60000000
-class CPDF_DIBTransferFunc : public CFX_FilteredDIB
-{
-public:
- CPDF_DIBTransferFunc(const CPDF_TransferFunc* pTransferFunc);
- virtual FXDIB_Format GetDestFormat();
- virtual FX_ARGB* GetDestPalette()
- {
- return NULL;
- }
- virtual void TranslateScanline(uint8_t* dest_buf, const uint8_t* src_buf) const;
- virtual void TranslateDownSamples(uint8_t* dest_buf, const uint8_t* src_buf, int pixels, int Bpp) const;
- const uint8_t* m_RampR;
- const uint8_t* m_RampG;
- const uint8_t* m_RampB;
+#define FPDF_HUGE_IMAGE_SIZE 60000000
+class CPDF_DIBTransferFunc : public CFX_FilteredDIB {
+ public:
+ CPDF_DIBTransferFunc(const CPDF_TransferFunc* pTransferFunc);
+ virtual FXDIB_Format GetDestFormat();
+ virtual FX_ARGB* GetDestPalette() { return NULL; }
+ virtual void TranslateScanline(uint8_t* dest_buf,
+ const uint8_t* src_buf) const;
+ virtual void TranslateDownSamples(uint8_t* dest_buf,
+ const uint8_t* src_buf,
+ int pixels,
+ int Bpp) const;
+ const uint8_t* m_RampR;
+ const uint8_t* m_RampG;
+ const uint8_t* m_RampB;
};
struct _CPDF_UniqueKeyGen {
- void Generate(int count, ...);
- FX_CHAR m_Key[128];
- int m_KeyLen;
+ void Generate(int count, ...);
+ FX_CHAR m_Key[128];
+ int m_KeyLen;
};
#endif // CORE_SRC_FPDFAPI_FPDF_RENDER_RENDER_INT_H_
diff --git a/core/src/fpdfdoc/doc_action.cpp b/core/src/fpdfdoc/doc_action.cpp
index 851b2d6709..f8a11e5682 100644
--- a/core/src/fpdfdoc/doc_action.cpp
+++ b/core/src/fpdfdoc/doc_action.cpp
@@ -5,368 +5,346 @@
// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
#include "../../include/fpdfdoc/fpdf_doc.h"
-CPDF_Dest CPDF_Action::GetDest(CPDF_Document* pDoc) const
-{
- if (!m_pDict) {
- return CPDF_Dest();
- }
- CFX_ByteString type = m_pDict->GetString("S");
- if (type != "GoTo" && type != "GoToR") {
- return CPDF_Dest();
- }
- CPDF_Object* pDest = m_pDict->GetElementValue("D");
- if (!pDest) {
- return CPDF_Dest();
- }
- if (pDest->GetType() == PDFOBJ_STRING || pDest->GetType() == PDFOBJ_NAME) {
- CPDF_NameTree name_tree(pDoc, FX_BSTRC("Dests"));
- CFX_ByteStringC name = pDest->GetString();
- return CPDF_Dest(name_tree.LookupNamedDest(pDoc, name));
- }
- if (pDest->GetType() == PDFOBJ_ARRAY) {
- return CPDF_Dest((CPDF_Array*)pDest);
- }
+CPDF_Dest CPDF_Action::GetDest(CPDF_Document* pDoc) const {
+ if (!m_pDict) {
return CPDF_Dest();
+ }
+ CFX_ByteString type = m_pDict->GetString("S");
+ if (type != "GoTo" && type != "GoToR") {
+ return CPDF_Dest();
+ }
+ CPDF_Object* pDest = m_pDict->GetElementValue("D");
+ if (!pDest) {
+ return CPDF_Dest();
+ }
+ if (pDest->GetType() == PDFOBJ_STRING || pDest->GetType() == PDFOBJ_NAME) {
+ CPDF_NameTree name_tree(pDoc, FX_BSTRC("Dests"));
+ CFX_ByteStringC name = pDest->GetString();
+ return CPDF_Dest(name_tree.LookupNamedDest(pDoc, name));
+ }
+ if (pDest->GetType() == PDFOBJ_ARRAY) {
+ return CPDF_Dest((CPDF_Array*)pDest);
+ }
+ return CPDF_Dest();
}
-const FX_CHAR* g_sATypes[] = {"Unknown", "GoTo", "GoToR", "GoToE", "Launch", "Thread", "URI", "Sound", "Movie",
- "Hide", "Named", "SubmitForm", "ResetForm", "ImportData", "JavaScript", "SetOCGState",
- "Rendition", "Trans", "GoTo3DView", ""
- };
-CPDF_Action::ActionType CPDF_Action::GetType() const
-{
- ActionType eType = Unknown;
- if (m_pDict != NULL) {
- CFX_ByteString csType = m_pDict->GetString("S");
- if (!csType.IsEmpty()) {
- int i = 0;
- while (g_sATypes[i][0] != '\0') {
- if (csType == g_sATypes[i]) {
- return (ActionType)i;
- }
- i ++;
- }
+const FX_CHAR* g_sATypes[] = {
+ "Unknown", "GoTo", "GoToR", "GoToE", "Launch",
+ "Thread", "URI", "Sound", "Movie", "Hide",
+ "Named", "SubmitForm", "ResetForm", "ImportData", "JavaScript",
+ "SetOCGState", "Rendition", "Trans", "GoTo3DView", ""};
+CPDF_Action::ActionType CPDF_Action::GetType() const {
+ ActionType eType = Unknown;
+ if (m_pDict != NULL) {
+ CFX_ByteString csType = m_pDict->GetString("S");
+ if (!csType.IsEmpty()) {
+ int i = 0;
+ while (g_sATypes[i][0] != '\0') {
+ if (csType == g_sATypes[i]) {
+ return (ActionType)i;
}
+ i++;
+ }
}
- return eType;
+ }
+ return eType;
}
-CFX_WideString CPDF_Action::GetFilePath() const
-{
- CFX_ByteString type = m_pDict->GetString("S");
- if (type != "GoToR" && type != "Launch" &&
- type != "SubmitForm" && type != "ImportData") {
- return CFX_WideString();
- }
- CPDF_Object* pFile = m_pDict->GetElementValue("F");
- CFX_WideString path;
- if (pFile == NULL) {
- if (type == "Launch") {
- CPDF_Dictionary* pWinDict = m_pDict->GetDict(FX_BSTRC("Win"));
- if (pWinDict) {
- return CFX_WideString::FromLocal(pWinDict->GetString(FX_BSTRC("F")));
- }
- }
- return path;
+CFX_WideString CPDF_Action::GetFilePath() const {
+ CFX_ByteString type = m_pDict->GetString("S");
+ if (type != "GoToR" && type != "Launch" && type != "SubmitForm" &&
+ type != "ImportData") {
+ return CFX_WideString();
+ }
+ CPDF_Object* pFile = m_pDict->GetElementValue("F");
+ CFX_WideString path;
+ if (pFile == NULL) {
+ if (type == "Launch") {
+ CPDF_Dictionary* pWinDict = m_pDict->GetDict(FX_BSTRC("Win"));
+ if (pWinDict) {
+ return CFX_WideString::FromLocal(pWinDict->GetString(FX_BSTRC("F")));
+ }
}
- CPDF_FileSpec filespec(pFile);
- filespec.GetFileName(path);
return path;
+ }
+ CPDF_FileSpec filespec(pFile);
+ filespec.GetFileName(path);
+ return path;
}
-CFX_ByteString CPDF_Action::GetURI(CPDF_Document* pDoc) const
-{
- CFX_ByteString csURI;
- if (m_pDict == NULL) {
- return csURI;
- }
- if (m_pDict->GetString("S") != "URI") {
- return csURI;
- }
- csURI = m_pDict->GetString("URI");
- CPDF_Dictionary* pRoot = pDoc->GetRoot();
- CPDF_Dictionary* pURI = pRoot->GetDict("URI");
- if (pURI != NULL) {
- if (csURI.Find(FX_BSTRC(":"), 0) < 1) {
- csURI = pURI->GetString("Base") + csURI;
- }
- }
+CFX_ByteString CPDF_Action::GetURI(CPDF_Document* pDoc) const {
+ CFX_ByteString csURI;
+ if (m_pDict == NULL) {
return csURI;
+ }
+ if (m_pDict->GetString("S") != "URI") {
+ return csURI;
+ }
+ csURI = m_pDict->GetString("URI");
+ CPDF_Dictionary* pRoot = pDoc->GetRoot();
+ CPDF_Dictionary* pURI = pRoot->GetDict("URI");
+ if (pURI != NULL) {
+ if (csURI.Find(FX_BSTRC(":"), 0) < 1) {
+ csURI = pURI->GetString("Base") + csURI;
+ }
+ }
+ return csURI;
}
-FX_DWORD CPDF_ActionFields::GetFieldsCount() const
-{
- if (m_pAction == NULL) {
- return 0;
- }
- CPDF_Dictionary* pDict = m_pAction->GetDict();
- if (pDict == NULL) {
- return 0;
- }
- CFX_ByteString csType = pDict->GetString("S");
- CPDF_Object* pFields = NULL;
- if (csType == "Hide") {
- pFields = pDict->GetElementValue("T");
- } else {
- pFields = pDict->GetArray("Fields");
- }
- if (pFields == NULL) {
- return 0;
- }
- int iType = pFields->GetType();
- if (iType == PDFOBJ_DICTIONARY) {
- return 1;
- }
- if (iType == PDFOBJ_STRING) {
- return 1;
- }
- if (iType == PDFOBJ_ARRAY) {
- return ((CPDF_Array*)pFields)->GetCount();
- }
+FX_DWORD CPDF_ActionFields::GetFieldsCount() const {
+ if (m_pAction == NULL) {
+ return 0;
+ }
+ CPDF_Dictionary* pDict = m_pAction->GetDict();
+ if (pDict == NULL) {
+ return 0;
+ }
+ CFX_ByteString csType = pDict->GetString("S");
+ CPDF_Object* pFields = NULL;
+ if (csType == "Hide") {
+ pFields = pDict->GetElementValue("T");
+ } else {
+ pFields = pDict->GetArray("Fields");
+ }
+ if (pFields == NULL) {
return 0;
+ }
+ int iType = pFields->GetType();
+ if (iType == PDFOBJ_DICTIONARY) {
+ return 1;
+ }
+ if (iType == PDFOBJ_STRING) {
+ return 1;
+ }
+ if (iType == PDFOBJ_ARRAY) {
+ return ((CPDF_Array*)pFields)->GetCount();
+ }
+ return 0;
}
-void CPDF_ActionFields::GetAllFields(CFX_PtrArray& fieldObjects) const
-{
- fieldObjects.RemoveAll();
- if (m_pAction == NULL) {
- return;
- }
- CPDF_Dictionary* pDict = m_pAction->GetDict();
- if (pDict == NULL) {
- return;
- }
- CFX_ByteString csType = pDict->GetString("S");
- CPDF_Object* pFields = NULL;
- if (csType == "Hide") {
- pFields = pDict->GetElementValue("T");
- } else {
- pFields = pDict->GetArray("Fields");
- }
- if (pFields == NULL) {
- return;
- }
- int iType = pFields->GetType();
- if (iType == PDFOBJ_DICTIONARY || iType == PDFOBJ_STRING) {
- fieldObjects.Add(pFields);
- } else if (iType == PDFOBJ_ARRAY) {
- CPDF_Array* pArray = (CPDF_Array*)pFields;
- FX_DWORD iCount = pArray->GetCount();
- for (FX_DWORD i = 0; i < iCount; i ++) {
- CPDF_Object* pObj = pArray->GetElementValue(i);
- if (pObj != NULL) {
- fieldObjects.Add(pObj);
- }
- }
- }
+void CPDF_ActionFields::GetAllFields(CFX_PtrArray& fieldObjects) const {
+ fieldObjects.RemoveAll();
+ if (m_pAction == NULL) {
+ return;
+ }
+ CPDF_Dictionary* pDict = m_pAction->GetDict();
+ if (pDict == NULL) {
+ return;
+ }
+ CFX_ByteString csType = pDict->GetString("S");
+ CPDF_Object* pFields = NULL;
+ if (csType == "Hide") {
+ pFields = pDict->GetElementValue("T");
+ } else {
+ pFields = pDict->GetArray("Fields");
+ }
+ if (pFields == NULL) {
+ return;
+ }
+ int iType = pFields->GetType();
+ if (iType == PDFOBJ_DICTIONARY || iType == PDFOBJ_STRING) {
+ fieldObjects.Add(pFields);
+ } else if (iType == PDFOBJ_ARRAY) {
+ CPDF_Array* pArray = (CPDF_Array*)pFields;
+ FX_DWORD iCount = pArray->GetCount();
+ for (FX_DWORD i = 0; i < iCount; i++) {
+ CPDF_Object* pObj = pArray->GetElementValue(i);
+ if (pObj != NULL) {
+ fieldObjects.Add(pObj);
+ }
+ }
+ }
}
-CPDF_Object* CPDF_ActionFields::GetField(FX_DWORD iIndex) const
-{
- if (m_pAction == NULL) {
- return NULL;
- }
- CPDF_Dictionary* pDict = m_pAction->GetDict();
- if (pDict == NULL) {
- return NULL;
- }
- CFX_ByteString csType = pDict->GetString("S");
- CPDF_Object* pFields = NULL;
- if (csType == "Hide") {
- pFields = pDict->GetElementValue("T");
- } else {
- pFields = pDict->GetArray("Fields");
- }
- if (pFields == NULL) {
- return NULL;
- }
- CPDF_Object* pFindObj = NULL;
- int iType = pFields->GetType();
- if (iType == PDFOBJ_DICTIONARY || iType == PDFOBJ_STRING) {
- if (iIndex == 0) {
- pFindObj = pFields;
- }
- } else if (iType == PDFOBJ_ARRAY) {
- pFindObj = ((CPDF_Array*)pFields)->GetElementValue(iIndex);
- }
- return pFindObj;
+CPDF_Object* CPDF_ActionFields::GetField(FX_DWORD iIndex) const {
+ if (m_pAction == NULL) {
+ return NULL;
+ }
+ CPDF_Dictionary* pDict = m_pAction->GetDict();
+ if (pDict == NULL) {
+ return NULL;
+ }
+ CFX_ByteString csType = pDict->GetString("S");
+ CPDF_Object* pFields = NULL;
+ if (csType == "Hide") {
+ pFields = pDict->GetElementValue("T");
+ } else {
+ pFields = pDict->GetArray("Fields");
+ }
+ if (pFields == NULL) {
+ return NULL;
+ }
+ CPDF_Object* pFindObj = NULL;
+ int iType = pFields->GetType();
+ if (iType == PDFOBJ_DICTIONARY || iType == PDFOBJ_STRING) {
+ if (iIndex == 0) {
+ pFindObj = pFields;
+ }
+ } else if (iType == PDFOBJ_ARRAY) {
+ pFindObj = ((CPDF_Array*)pFields)->GetElementValue(iIndex);
+ }
+ return pFindObj;
}
-CPDF_LWinParam CPDF_Action::GetWinParam() const
-{
- if (m_pDict == NULL) {
- return NULL;
- }
- if (m_pDict->GetString("S") != "Launch") {
- return NULL;
- }
- return m_pDict->GetDict("Win");
+CPDF_LWinParam CPDF_Action::GetWinParam() const {
+ if (m_pDict == NULL) {
+ return NULL;
+ }
+ if (m_pDict->GetString("S") != "Launch") {
+ return NULL;
+ }
+ return m_pDict->GetDict("Win");
}
-CFX_WideString CPDF_Action::GetJavaScript() const
-{
- CFX_WideString csJS;
- if (m_pDict == NULL) {
- return csJS;
- }
- CPDF_Object* pJS = m_pDict->GetElementValue("JS");
- if (pJS != NULL) {
- return pJS->GetUnicodeText();
- }
+CFX_WideString CPDF_Action::GetJavaScript() const {
+ CFX_WideString csJS;
+ if (m_pDict == NULL) {
return csJS;
+ }
+ CPDF_Object* pJS = m_pDict->GetElementValue("JS");
+ if (pJS != NULL) {
+ return pJS->GetUnicodeText();
+ }
+ return csJS;
}
-CPDF_Dictionary* CPDF_Action::GetAnnot() const
-{
- if (!m_pDict) {
- return nullptr;
- }
- CFX_ByteString csType = m_pDict->GetString("S");
- if (csType == FX_BSTRC("Rendition")) {
- return m_pDict->GetDict("AN");
- }
- if (csType == FX_BSTRC("Movie")) {
- return m_pDict->GetDict("Annotation");
- }
+CPDF_Dictionary* CPDF_Action::GetAnnot() const {
+ if (!m_pDict) {
return nullptr;
+ }
+ CFX_ByteString csType = m_pDict->GetString("S");
+ if (csType == FX_BSTRC("Rendition")) {
+ return m_pDict->GetDict("AN");
+ }
+ if (csType == FX_BSTRC("Movie")) {
+ return m_pDict->GetDict("Annotation");
+ }
+ return nullptr;
}
-int32_t CPDF_Action::GetOperationType() const
-{
- if (m_pDict == NULL) {
- return 0;
- }
- CFX_ByteString csType = m_pDict->GetString("S");
- if (csType == FX_BSTRC("Rendition")) {
- return m_pDict->GetInteger("OP");
- }
- if (csType == FX_BSTRC("Movie")) {
- CFX_ByteString csOP = m_pDict->GetString("Operation");
- if (csOP == FX_BSTRC("Play")) {
- return 0;
- }
- if (csOP == FX_BSTRC("Stop")) {
- return 1;
- }
- if (csOP == FX_BSTRC("Pause")) {
- return 2;
- }
- if (csOP == FX_BSTRC("Resume")) {
- return 3;
- }
- }
+int32_t CPDF_Action::GetOperationType() const {
+ if (m_pDict == NULL) {
return 0;
+ }
+ CFX_ByteString csType = m_pDict->GetString("S");
+ if (csType == FX_BSTRC("Rendition")) {
+ return m_pDict->GetInteger("OP");
+ }
+ if (csType == FX_BSTRC("Movie")) {
+ CFX_ByteString csOP = m_pDict->GetString("Operation");
+ if (csOP == FX_BSTRC("Play")) {
+ return 0;
+ }
+ if (csOP == FX_BSTRC("Stop")) {
+ return 1;
+ }
+ if (csOP == FX_BSTRC("Pause")) {
+ return 2;
+ }
+ if (csOP == FX_BSTRC("Resume")) {
+ return 3;
+ }
+ }
+ return 0;
}
-FX_DWORD CPDF_Action::GetSubActionsCount() const
-{
- if (m_pDict == NULL || !m_pDict->KeyExist("Next")) {
- return 0;
- }
- CPDF_Object* pNext = m_pDict->GetElementValue("Next");
- if (!pNext) {
- return 0;
- }
- int iObjType = pNext->GetType();
- if (iObjType == PDFOBJ_DICTIONARY) {
- return 1;
- }
- if (iObjType == PDFOBJ_ARRAY) {
- return ((CPDF_Array*)pNext)->GetCount();
- }
+FX_DWORD CPDF_Action::GetSubActionsCount() const {
+ if (m_pDict == NULL || !m_pDict->KeyExist("Next")) {
return 0;
+ }
+ CPDF_Object* pNext = m_pDict->GetElementValue("Next");
+ if (!pNext) {
+ return 0;
+ }
+ int iObjType = pNext->GetType();
+ if (iObjType == PDFOBJ_DICTIONARY) {
+ return 1;
+ }
+ if (iObjType == PDFOBJ_ARRAY) {
+ return ((CPDF_Array*)pNext)->GetCount();
+ }
+ return 0;
}
-CPDF_Action CPDF_Action::GetSubAction(FX_DWORD iIndex) const
-{
- if (m_pDict == NULL || !m_pDict->KeyExist("Next")) {
- return CPDF_Action();
- }
- CPDF_Object* pNext = m_pDict->GetElementValue("Next");
- int iObjType = pNext->GetType();
- if (iObjType == PDFOBJ_DICTIONARY) {
- CPDF_Dictionary *pDict = static_cast<CPDF_Dictionary*>(pNext);
- if (iIndex == 0) {
- return CPDF_Action(pDict);
- }
- } else if (iObjType == PDFOBJ_ARRAY) {
- CPDF_Array* pArray = static_cast<CPDF_Array*>(pNext);
- return CPDF_Action(pArray->GetDict(iIndex));
- }
+CPDF_Action CPDF_Action::GetSubAction(FX_DWORD iIndex) const {
+ if (m_pDict == NULL || !m_pDict->KeyExist("Next")) {
return CPDF_Action();
+ }
+ CPDF_Object* pNext = m_pDict->GetElementValue("Next");
+ int iObjType = pNext->GetType();
+ if (iObjType == PDFOBJ_DICTIONARY) {
+ CPDF_Dictionary* pDict = static_cast<CPDF_Dictionary*>(pNext);
+ if (iIndex == 0) {
+ return CPDF_Action(pDict);
+ }
+ } else if (iObjType == PDFOBJ_ARRAY) {
+ CPDF_Array* pArray = static_cast<CPDF_Array*>(pNext);
+ return CPDF_Action(pArray->GetDict(iIndex));
+ }
+ return CPDF_Action();
}
-const FX_CHAR* g_sAATypes[] = {"E", "X", "D", "U", "Fo", "Bl", "PO", "PC", "PV", "PI",
- "O", "C",
- "K", "F", "V", "C",
- "WC", "WS", "DS", "WP", "DP",
- ""
- };
-FX_BOOL CPDF_AAction::ActionExist(AActionType eType) const
-{
- if (m_pDict == NULL) {
- return FALSE;
- }
- return m_pDict->KeyExist(g_sAATypes[(int)eType]);
+const FX_CHAR* g_sAATypes[] = {"E", "X", "D", "U", "Fo", "Bl", "PO", "PC",
+ "PV", "PI", "O", "C", "K", "F", "V", "C",
+ "WC", "WS", "DS", "WP", "DP", ""};
+FX_BOOL CPDF_AAction::ActionExist(AActionType eType) const {
+ if (m_pDict == NULL) {
+ return FALSE;
+ }
+ return m_pDict->KeyExist(g_sAATypes[(int)eType]);
}
-CPDF_Action CPDF_AAction::GetAction(AActionType eType) const
-{
- if (!m_pDict) {
- return CPDF_Action();
- }
- return CPDF_Action(m_pDict->GetDict(g_sAATypes[(int)eType]));
+CPDF_Action CPDF_AAction::GetAction(AActionType eType) const {
+ if (!m_pDict) {
+ return CPDF_Action();
+ }
+ return CPDF_Action(m_pDict->GetDict(g_sAATypes[(int)eType]));
}
-FX_POSITION CPDF_AAction::GetStartPos() const
-{
- if (m_pDict == NULL) {
- return NULL;
- }
- return m_pDict->GetStartPos();
+FX_POSITION CPDF_AAction::GetStartPos() const {
+ if (m_pDict == NULL) {
+ return NULL;
+ }
+ return m_pDict->GetStartPos();
}
-CPDF_Action CPDF_AAction::GetNextAction(FX_POSITION& pos, AActionType& eType) const
-{
- if (m_pDict == NULL) {
- return CPDF_Action();
- }
- CFX_ByteString csKey;
- CPDF_Object* pObj = m_pDict->GetNextElement(pos, csKey);
- if (!pObj) {
- return CPDF_Action();
- }
- CPDF_Object* pDirect = pObj->GetDirect();
- if (!pDirect || pDirect->GetType() != PDFOBJ_DICTIONARY) {
- return CPDF_Action();
- }
- int i = 0;
- while (g_sAATypes[i][0] != '\0') {
- if (csKey == g_sAATypes[i]) {
- break;
- }
- i++;
- }
- eType = (AActionType)i;
- return CPDF_Action(static_cast<CPDF_Dictionary*>(pDirect));
+CPDF_Action CPDF_AAction::GetNextAction(FX_POSITION& pos,
+ AActionType& eType) const {
+ if (m_pDict == NULL) {
+ return CPDF_Action();
+ }
+ CFX_ByteString csKey;
+ CPDF_Object* pObj = m_pDict->GetNextElement(pos, csKey);
+ if (!pObj) {
+ return CPDF_Action();
+ }
+ CPDF_Object* pDirect = pObj->GetDirect();
+ if (!pDirect || pDirect->GetType() != PDFOBJ_DICTIONARY) {
+ return CPDF_Action();
+ }
+ int i = 0;
+ while (g_sAATypes[i][0] != '\0') {
+ if (csKey == g_sAATypes[i]) {
+ break;
+ }
+ i++;
+ }
+ eType = (AActionType)i;
+ return CPDF_Action(static_cast<CPDF_Dictionary*>(pDirect));
}
-CPDF_DocJSActions::CPDF_DocJSActions(CPDF_Document* pDoc)
-{
- m_pDocument = pDoc;
+CPDF_DocJSActions::CPDF_DocJSActions(CPDF_Document* pDoc) {
+ m_pDocument = pDoc;
}
-int CPDF_DocJSActions::CountJSActions() const
-{
- ASSERT(m_pDocument != NULL);
- CPDF_NameTree name_tree(m_pDocument, FX_BSTRC("JavaScript"));
- return name_tree.GetCount();
+int CPDF_DocJSActions::CountJSActions() const {
+ ASSERT(m_pDocument != NULL);
+ CPDF_NameTree name_tree(m_pDocument, FX_BSTRC("JavaScript"));
+ return name_tree.GetCount();
}
-CPDF_Action CPDF_DocJSActions::GetJSAction(int index, CFX_ByteString& csName) const
-{
- ASSERT(m_pDocument != NULL);
- CPDF_NameTree name_tree(m_pDocument, FX_BSTRC("JavaScript"));
- CPDF_Object *pAction = name_tree.LookupValue(index, csName);
- if (pAction == NULL || pAction->GetType() != PDFOBJ_DICTIONARY) {
- return CPDF_Action();
- }
- return CPDF_Action(pAction->GetDict());
+CPDF_Action CPDF_DocJSActions::GetJSAction(int index,
+ CFX_ByteString& csName) const {
+ ASSERT(m_pDocument != NULL);
+ CPDF_NameTree name_tree(m_pDocument, FX_BSTRC("JavaScript"));
+ CPDF_Object* pAction = name_tree.LookupValue(index, csName);
+ if (pAction == NULL || pAction->GetType() != PDFOBJ_DICTIONARY) {
+ return CPDF_Action();
+ }
+ return CPDF_Action(pAction->GetDict());
}
-CPDF_Action CPDF_DocJSActions::GetJSAction(const CFX_ByteString& csName) const
-{
- ASSERT(m_pDocument != NULL);
- CPDF_NameTree name_tree(m_pDocument, FX_BSTRC("JavaScript"));
- CPDF_Object *pAction = name_tree.LookupValue(csName);
- if (pAction == NULL || pAction->GetType() != PDFOBJ_DICTIONARY) {
- return CPDF_Action();
- }
- return CPDF_Action(pAction->GetDict());
+CPDF_Action CPDF_DocJSActions::GetJSAction(const CFX_ByteString& csName) const {
+ ASSERT(m_pDocument != NULL);
+ CPDF_NameTree name_tree(m_pDocument, FX_BSTRC("JavaScript"));
+ CPDF_Object* pAction = name_tree.LookupValue(csName);
+ if (pAction == NULL || pAction->GetType() != PDFOBJ_DICTIONARY) {
+ return CPDF_Action();
+ }
+ return CPDF_Action(pAction->GetDict());
}
-int CPDF_DocJSActions::FindJSAction(const CFX_ByteString& csName) const
-{
- ASSERT(m_pDocument != NULL);
- CPDF_NameTree name_tree(m_pDocument, FX_BSTRC("JavaScript"));
- return name_tree.GetIndex(csName);
+int CPDF_DocJSActions::FindJSAction(const CFX_ByteString& csName) const {
+ ASSERT(m_pDocument != NULL);
+ CPDF_NameTree name_tree(m_pDocument, FX_BSTRC("JavaScript"));
+ return name_tree.GetIndex(csName);
}
diff --git a/core/src/fpdfdoc/doc_annot.cpp b/core/src/fpdfdoc/doc_annot.cpp
index 0a746190c0..6f5ff797f2 100644
--- a/core/src/fpdfdoc/doc_annot.cpp
+++ b/core/src/fpdfdoc/doc_annot.cpp
@@ -8,361 +8,376 @@
#include "../../include/fpdfdoc/fpdf_doc.h"
#include "../../include/fpdfapi/fpdf_pageobj.h"
-CPDF_AnnotList::CPDF_AnnotList(CPDF_Page* pPage)
-{
- ASSERT(pPage != NULL);
- m_pPageDict = pPage->m_pFormDict;
- if (m_pPageDict == NULL) {
- return;
+CPDF_AnnotList::CPDF_AnnotList(CPDF_Page* pPage) {
+ ASSERT(pPage != NULL);
+ m_pPageDict = pPage->m_pFormDict;
+ if (m_pPageDict == NULL) {
+ return;
+ }
+ m_pDocument = pPage->m_pDocument;
+ CPDF_Array* pAnnots = m_pPageDict->GetArray("Annots");
+ if (pAnnots == NULL) {
+ return;
+ }
+ CPDF_Dictionary* pRoot = m_pDocument->GetRoot();
+ CPDF_Dictionary* pAcroForm = pRoot->GetDict("AcroForm");
+ FX_BOOL bRegenerateAP = pAcroForm && pAcroForm->GetBoolean("NeedAppearances");
+ for (FX_DWORD i = 0; i < pAnnots->GetCount(); ++i) {
+ CPDF_Dictionary* pDict = (CPDF_Dictionary*)pAnnots->GetElementValue(i);
+ if (pDict == NULL || pDict->GetType() != PDFOBJ_DICTIONARY) {
+ continue;
}
- m_pDocument = pPage->m_pDocument;
- CPDF_Array* pAnnots = m_pPageDict->GetArray("Annots");
- if (pAnnots == NULL) {
- return;
- }
- CPDF_Dictionary* pRoot = m_pDocument->GetRoot();
- CPDF_Dictionary* pAcroForm = pRoot->GetDict("AcroForm");
- FX_BOOL bRegenerateAP = pAcroForm && pAcroForm->GetBoolean("NeedAppearances");
- for (FX_DWORD i = 0; i < pAnnots->GetCount(); ++i) {
- CPDF_Dictionary* pDict = (CPDF_Dictionary*)pAnnots->GetElementValue(i);
- if (pDict == NULL || pDict->GetType() != PDFOBJ_DICTIONARY) {
- continue;
- }
- FX_DWORD dwObjNum = pDict->GetObjNum();
- if (dwObjNum == 0) {
- dwObjNum = m_pDocument->AddIndirectObject(pDict);
- CPDF_Reference* pAction = new CPDF_Reference(m_pDocument, dwObjNum);
- pAnnots->InsertAt(i, pAction);
- pAnnots->RemoveAt(i + 1);
- pDict = pAnnots->GetDict(i);
- }
- CPDF_Annot* pAnnot = new CPDF_Annot(pDict, this);
- m_AnnotList.Add(pAnnot);
- if (bRegenerateAP && pDict->GetConstString(FX_BSTRC("Subtype")) == FX_BSTRC("Widget"))
- if (CPDF_InterForm::UpdatingAPEnabled()) {
- FPDF_GenerateAP(m_pDocument, pDict);
- }
+ FX_DWORD dwObjNum = pDict->GetObjNum();
+ if (dwObjNum == 0) {
+ dwObjNum = m_pDocument->AddIndirectObject(pDict);
+ CPDF_Reference* pAction = new CPDF_Reference(m_pDocument, dwObjNum);
+ pAnnots->InsertAt(i, pAction);
+ pAnnots->RemoveAt(i + 1);
+ pDict = pAnnots->GetDict(i);
}
+ CPDF_Annot* pAnnot = new CPDF_Annot(pDict, this);
+ m_AnnotList.Add(pAnnot);
+ if (bRegenerateAP &&
+ pDict->GetConstString(FX_BSTRC("Subtype")) == FX_BSTRC("Widget"))
+ if (CPDF_InterForm::UpdatingAPEnabled()) {
+ FPDF_GenerateAP(m_pDocument, pDict);
+ }
+ }
+}
+CPDF_AnnotList::~CPDF_AnnotList() {
+ int i = 0;
+ for (i = 0; i < m_AnnotList.GetSize(); ++i) {
+ delete (CPDF_Annot*)m_AnnotList[i];
+ }
+ for (i = 0; i < m_Borders.GetSize(); ++i) {
+ delete (CPDF_PageObjects*)m_Borders[i];
+ }
}
-CPDF_AnnotList::~CPDF_AnnotList()
-{
- int i = 0;
- for (i = 0; i < m_AnnotList.GetSize(); ++i) {
- delete (CPDF_Annot*)m_AnnotList[i];
+void CPDF_AnnotList::DisplayPass(const CPDF_Page* pPage,
+ CFX_RenderDevice* pDevice,
+ CPDF_RenderContext* pContext,
+ FX_BOOL bPrinting,
+ CFX_AffineMatrix* pMatrix,
+ FX_BOOL bWidgetPass,
+ CPDF_RenderOptions* pOptions,
+ FX_RECT* clip_rect) {
+ for (int i = 0; i < m_AnnotList.GetSize(); ++i) {
+ CPDF_Annot* pAnnot = (CPDF_Annot*)m_AnnotList[i];
+ FX_BOOL bWidget = pAnnot->GetSubType() == "Widget";
+ if ((bWidgetPass && !bWidget) || (!bWidgetPass && bWidget)) {
+ continue;
}
- for (i = 0; i < m_Borders.GetSize(); ++i) {
- delete (CPDF_PageObjects*)m_Borders[i];
+ FX_DWORD annot_flags = pAnnot->GetFlags();
+ if (annot_flags & ANNOTFLAG_HIDDEN) {
+ continue;
}
-}
-void CPDF_AnnotList::DisplayPass(const CPDF_Page* pPage, CFX_RenderDevice* pDevice,
- CPDF_RenderContext* pContext, FX_BOOL bPrinting, CFX_AffineMatrix* pMatrix,
- FX_BOOL bWidgetPass, CPDF_RenderOptions* pOptions, FX_RECT* clip_rect)
-{
- for (int i = 0; i < m_AnnotList.GetSize(); ++i) {
- CPDF_Annot* pAnnot = (CPDF_Annot*)m_AnnotList[i];
- FX_BOOL bWidget = pAnnot->GetSubType() == "Widget";
- if ((bWidgetPass && !bWidget) || (!bWidgetPass && bWidget)) {
- continue;
- }
- FX_DWORD annot_flags = pAnnot->GetFlags();
- if (annot_flags & ANNOTFLAG_HIDDEN) {
- continue;
- }
- if (bPrinting && (annot_flags & ANNOTFLAG_PRINT) == 0) {
- continue;
- }
- if (!bPrinting && (annot_flags & ANNOTFLAG_NOVIEW)) {
- continue;
- }
- if (pOptions != NULL) {
- IPDF_OCContext* pOCContext = pOptions->m_pOCContext;
- CPDF_Dictionary* pAnnotDict = pAnnot->GetAnnotDict();
- if (pOCContext != NULL && pAnnotDict != NULL &&
- !pOCContext->CheckOCGVisible(pAnnotDict->GetDict(FX_BSTRC("OC")))) {
- continue;
- }
- }
- CPDF_Rect annot_rect_f;
- pAnnot->GetRect(annot_rect_f);
- CFX_Matrix matrix;
- matrix = *pMatrix;
- if (clip_rect) {
- annot_rect_f.Transform(&matrix);
- FX_RECT annot_rect = annot_rect_f.GetOutterRect();
- annot_rect.Intersect(*clip_rect);
- if (annot_rect.IsEmpty()) {
- continue;
- }
- }
- if (pContext) {
- pAnnot->DrawInContext(pPage, pContext, &matrix, CPDF_Annot::Normal);
- } else if (!pAnnot->DrawAppearance(pPage, pDevice, &matrix, CPDF_Annot::Normal, pOptions)) {
- pAnnot->DrawBorder(pDevice, &matrix, pOptions);
- }
+ if (bPrinting && (annot_flags & ANNOTFLAG_PRINT) == 0) {
+ continue;
}
-}
-void CPDF_AnnotList::DisplayAnnots(const CPDF_Page* pPage, CFX_RenderDevice* pDevice,
- CFX_AffineMatrix* pUser2Device,
- FX_BOOL bShowWidget, CPDF_RenderOptions* pOptions)
-{
- FX_RECT clip_rect;
- if (pDevice) {
- clip_rect = pDevice->GetClipBox();
+ if (!bPrinting && (annot_flags & ANNOTFLAG_NOVIEW)) {
+ continue;
}
- FX_BOOL bPrinting = pDevice->GetDeviceClass() == FXDC_PRINTER || (pOptions && (pOptions->m_Flags & RENDER_PRINTPREVIEW));
- DisplayAnnots(pPage, pDevice, NULL, bPrinting, pUser2Device, bShowWidget ? 3 : 1, pOptions, &clip_rect);
-}
-void CPDF_AnnotList::DisplayAnnots(const CPDF_Page* pPage, CFX_RenderDevice* pDevice, CPDF_RenderContext* pContext,
- FX_BOOL bPrinting, CFX_AffineMatrix* pUser2Device, FX_DWORD dwAnnotFlags,
- CPDF_RenderOptions* pOptions, FX_RECT* pClipRect)
-{
- if (dwAnnotFlags & 0x01) {
- DisplayPass(pPage, pDevice, pContext, bPrinting, pUser2Device, FALSE, pOptions, pClipRect);
+ if (pOptions != NULL) {
+ IPDF_OCContext* pOCContext = pOptions->m_pOCContext;
+ CPDF_Dictionary* pAnnotDict = pAnnot->GetAnnotDict();
+ if (pOCContext != NULL && pAnnotDict != NULL &&
+ !pOCContext->CheckOCGVisible(pAnnotDict->GetDict(FX_BSTRC("OC")))) {
+ continue;
+ }
}
- if (dwAnnotFlags & 0x02) {
- DisplayPass(pPage, pDevice, pContext, bPrinting, pUser2Device, TRUE, pOptions, pClipRect);
+ CPDF_Rect annot_rect_f;
+ pAnnot->GetRect(annot_rect_f);
+ CFX_Matrix matrix;
+ matrix = *pMatrix;
+ if (clip_rect) {
+ annot_rect_f.Transform(&matrix);
+ FX_RECT annot_rect = annot_rect_f.GetOutterRect();
+ annot_rect.Intersect(*clip_rect);
+ if (annot_rect.IsEmpty()) {
+ continue;
+ }
+ }
+ if (pContext) {
+ pAnnot->DrawInContext(pPage, pContext, &matrix, CPDF_Annot::Normal);
+ } else if (!pAnnot->DrawAppearance(pPage, pDevice, &matrix,
+ CPDF_Annot::Normal, pOptions)) {
+ pAnnot->DrawBorder(pDevice, &matrix, pOptions);
}
+ }
}
-int CPDF_AnnotList::GetIndex(CPDF_Annot* pAnnot)
-{
- for (int i = 0; i < m_AnnotList.GetSize(); ++i)
- if (m_AnnotList[i] == (void*)pAnnot) {
- return i;
- }
- return -1;
+void CPDF_AnnotList::DisplayAnnots(const CPDF_Page* pPage,
+ CFX_RenderDevice* pDevice,
+ CFX_AffineMatrix* pUser2Device,
+ FX_BOOL bShowWidget,
+ CPDF_RenderOptions* pOptions) {
+ FX_RECT clip_rect;
+ if (pDevice) {
+ clip_rect = pDevice->GetClipBox();
+ }
+ FX_BOOL bPrinting = pDevice->GetDeviceClass() == FXDC_PRINTER ||
+ (pOptions && (pOptions->m_Flags & RENDER_PRINTPREVIEW));
+ DisplayAnnots(pPage, pDevice, NULL, bPrinting, pUser2Device,
+ bShowWidget ? 3 : 1, pOptions, &clip_rect);
+}
+void CPDF_AnnotList::DisplayAnnots(const CPDF_Page* pPage,
+ CFX_RenderDevice* pDevice,
+ CPDF_RenderContext* pContext,
+ FX_BOOL bPrinting,
+ CFX_AffineMatrix* pUser2Device,
+ FX_DWORD dwAnnotFlags,
+ CPDF_RenderOptions* pOptions,
+ FX_RECT* pClipRect) {
+ if (dwAnnotFlags & 0x01) {
+ DisplayPass(pPage, pDevice, pContext, bPrinting, pUser2Device, FALSE,
+ pOptions, pClipRect);
+ }
+ if (dwAnnotFlags & 0x02) {
+ DisplayPass(pPage, pDevice, pContext, bPrinting, pUser2Device, TRUE,
+ pOptions, pClipRect);
+ }
+}
+int CPDF_AnnotList::GetIndex(CPDF_Annot* pAnnot) {
+ for (int i = 0; i < m_AnnotList.GetSize(); ++i)
+ if (m_AnnotList[i] == (void*)pAnnot) {
+ return i;
+ }
+ return -1;
}
CPDF_Annot::CPDF_Annot(CPDF_Dictionary* pDict, CPDF_AnnotList* pList)
: m_pAnnotDict(pDict),
m_pList(pList),
- m_sSubtype(m_pAnnotDict->GetConstString(FX_BSTRC("Subtype")))
-{
-}
-CPDF_Annot::~CPDF_Annot()
-{
- ClearCachedAP();
+ m_sSubtype(m_pAnnotDict->GetConstString(FX_BSTRC("Subtype"))) {}
+CPDF_Annot::~CPDF_Annot() {
+ ClearCachedAP();
}
-void CPDF_Annot::ClearCachedAP()
-{
- FX_POSITION pos = m_APMap.GetStartPosition();
- while (pos) {
- void* pForm;
- void* pObjects;
- m_APMap.GetNextAssoc(pos, pForm, pObjects);
- delete (CPDF_PageObjects*)pObjects;
- }
- m_APMap.RemoveAll();
+void CPDF_Annot::ClearCachedAP() {
+ FX_POSITION pos = m_APMap.GetStartPosition();
+ while (pos) {
+ void* pForm;
+ void* pObjects;
+ m_APMap.GetNextAssoc(pos, pForm, pObjects);
+ delete (CPDF_PageObjects*)pObjects;
+ }
+ m_APMap.RemoveAll();
}
-CFX_ByteString CPDF_Annot::GetSubType() const
-{
- return m_sSubtype;
+CFX_ByteString CPDF_Annot::GetSubType() const {
+ return m_sSubtype;
}
-void CPDF_Annot::GetRect(CPDF_Rect& rect) const
-{
- if (m_pAnnotDict == NULL) {
- return;
- }
- rect = m_pAnnotDict->GetRect("Rect");
- rect.Normalize();
+void CPDF_Annot::GetRect(CPDF_Rect& rect) const {
+ if (m_pAnnotDict == NULL) {
+ return;
+ }
+ rect = m_pAnnotDict->GetRect("Rect");
+ rect.Normalize();
}
-FX_DWORD CPDF_Annot::GetFlags() const
-{
- return m_pAnnotDict->GetInteger("F");
+FX_DWORD CPDF_Annot::GetFlags() const {
+ return m_pAnnotDict->GetInteger("F");
}
-CPDF_Dictionary* CPDF_Annot::GetAnnotDict()
-{
- return m_pAnnotDict;
+CPDF_Dictionary* CPDF_Annot::GetAnnotDict() {
+ return m_pAnnotDict;
}
-CPDF_Stream* FPDFDOC_GetAnnotAP(CPDF_Dictionary* pAnnotDict, CPDF_Annot::AppearanceMode mode)
-{
- CPDF_Dictionary* pAP = pAnnotDict->GetDict("AP");
- if (pAP == NULL) {
- return NULL;
- }
- const FX_CHAR* ap_entry = "N";
- if (mode == CPDF_Annot::Down) {
- ap_entry = "D";
- } else if (mode == CPDF_Annot::Rollover) {
- ap_entry = "R";
- }
- if (!pAP->KeyExist(ap_entry)) {
- ap_entry = "N";
- }
- CPDF_Object* psub = pAP->GetElementValue(ap_entry);
- if (psub == NULL) {
- return NULL;
+CPDF_Stream* FPDFDOC_GetAnnotAP(CPDF_Dictionary* pAnnotDict,
+ CPDF_Annot::AppearanceMode mode) {
+ CPDF_Dictionary* pAP = pAnnotDict->GetDict("AP");
+ if (pAP == NULL) {
+ return NULL;
+ }
+ const FX_CHAR* ap_entry = "N";
+ if (mode == CPDF_Annot::Down) {
+ ap_entry = "D";
+ } else if (mode == CPDF_Annot::Rollover) {
+ ap_entry = "R";
+ }
+ if (!pAP->KeyExist(ap_entry)) {
+ ap_entry = "N";
+ }
+ CPDF_Object* psub = pAP->GetElementValue(ap_entry);
+ if (psub == NULL) {
+ return NULL;
+ }
+ CPDF_Stream* pStream = NULL;
+ if (psub->GetType() == PDFOBJ_STREAM) {
+ pStream = (CPDF_Stream*)psub;
+ } else if (psub->GetType() == PDFOBJ_DICTIONARY) {
+ CFX_ByteString as = pAnnotDict->GetString("AS");
+ if (as.IsEmpty()) {
+ CFX_ByteString value = pAnnotDict->GetString(FX_BSTRC("V"));
+ if (value.IsEmpty()) {
+ CPDF_Dictionary* pDict = pAnnotDict->GetDict(FX_BSTRC("Parent"));
+ value = pDict ? pDict->GetString(FX_BSTRC("V")) : CFX_ByteString();
+ }
+ if (value.IsEmpty() || !((CPDF_Dictionary*)psub)->KeyExist(value)) {
+ as = FX_BSTRC("Off");
+ } else {
+ as = value;
+ }
}
- CPDF_Stream* pStream = NULL;
- if (psub->GetType() == PDFOBJ_STREAM) {
- pStream = (CPDF_Stream*)psub;
- } else if (psub->GetType() == PDFOBJ_DICTIONARY) {
- CFX_ByteString as = pAnnotDict->GetString("AS");
- if (as.IsEmpty()) {
- CFX_ByteString value = pAnnotDict->GetString(FX_BSTRC("V"));
- if (value.IsEmpty()) {
- CPDF_Dictionary* pDict = pAnnotDict->GetDict(FX_BSTRC("Parent"));
- value = pDict ? pDict->GetString(FX_BSTRC("V")) : CFX_ByteString();
- }
- if (value.IsEmpty() || !((CPDF_Dictionary*)psub)->KeyExist(value)) {
- as = FX_BSTRC("Off");
- } else {
- as = value;
- }
- }
- pStream = ((CPDF_Dictionary*)psub)->GetStream(as);
- }
- return pStream;
+ pStream = ((CPDF_Dictionary*)psub)->GetStream(as);
+ }
+ return pStream;
}
-CPDF_Form* CPDF_Annot::GetAPForm(const CPDF_Page* pPage, AppearanceMode mode)
-{
- CPDF_Stream* pStream = FPDFDOC_GetAnnotAP(m_pAnnotDict, mode);
- if (pStream == NULL) {
- return NULL;
- }
- CPDF_Form* pForm;
- if (m_APMap.Lookup(pStream, (void*&)pForm)) {
- return pForm;
- }
- pForm = new CPDF_Form(m_pList->m_pDocument, pPage->m_pResources, pStream);
- pForm->ParseContent(NULL, NULL, NULL, NULL);
- m_APMap.SetAt(pStream, pForm);
+CPDF_Form* CPDF_Annot::GetAPForm(const CPDF_Page* pPage, AppearanceMode mode) {
+ CPDF_Stream* pStream = FPDFDOC_GetAnnotAP(m_pAnnotDict, mode);
+ if (pStream == NULL) {
+ return NULL;
+ }
+ CPDF_Form* pForm;
+ if (m_APMap.Lookup(pStream, (void*&)pForm)) {
return pForm;
+ }
+ pForm = new CPDF_Form(m_pList->m_pDocument, pPage->m_pResources, pStream);
+ pForm->ParseContent(NULL, NULL, NULL, NULL);
+ m_APMap.SetAt(pStream, pForm);
+ return pForm;
}
-static CPDF_Form* FPDFDOC_Annot_GetMatrix(const CPDF_Page* pPage, CPDF_Annot* pAnnot, CPDF_Annot::AppearanceMode mode, const CFX_AffineMatrix* pUser2Device, CFX_Matrix &matrix)
-{
- CPDF_Form* pForm = pAnnot->GetAPForm(pPage, mode);
- if (!pForm) {
- return NULL;
- }
- CFX_FloatRect form_bbox = pForm->m_pFormDict->GetRect(FX_BSTRC("BBox"));
- CFX_Matrix form_matrix = pForm->m_pFormDict->GetMatrix(FX_BSTRC("Matrix"));
- form_matrix.TransformRect(form_bbox);
- CPDF_Rect arect;
- pAnnot->GetRect(arect);
- matrix.MatchRect(arect, form_bbox);
- matrix.Concat(*pUser2Device);
- return pForm;
+static CPDF_Form* FPDFDOC_Annot_GetMatrix(const CPDF_Page* pPage,
+ CPDF_Annot* pAnnot,
+ CPDF_Annot::AppearanceMode mode,
+ const CFX_AffineMatrix* pUser2Device,
+ CFX_Matrix& matrix) {
+ CPDF_Form* pForm = pAnnot->GetAPForm(pPage, mode);
+ if (!pForm) {
+ return NULL;
+ }
+ CFX_FloatRect form_bbox = pForm->m_pFormDict->GetRect(FX_BSTRC("BBox"));
+ CFX_Matrix form_matrix = pForm->m_pFormDict->GetMatrix(FX_BSTRC("Matrix"));
+ form_matrix.TransformRect(form_bbox);
+ CPDF_Rect arect;
+ pAnnot->GetRect(arect);
+ matrix.MatchRect(arect, form_bbox);
+ matrix.Concat(*pUser2Device);
+ return pForm;
}
-FX_BOOL CPDF_Annot::DrawAppearance(const CPDF_Page* pPage, CFX_RenderDevice* pDevice, const CFX_AffineMatrix* pUser2Device,
- AppearanceMode mode, const CPDF_RenderOptions* pOptions)
-{
- CFX_Matrix matrix;
- CPDF_Form* pForm = FPDFDOC_Annot_GetMatrix(pPage, this, mode, pUser2Device, matrix);
- if (!pForm) {
- return FALSE;
- }
- CPDF_RenderContext context;
- context.Create((CPDF_Page*)pPage);
- context.DrawObjectList(pDevice, pForm, &matrix, pOptions);
- return TRUE;
+FX_BOOL CPDF_Annot::DrawAppearance(const CPDF_Page* pPage,
+ CFX_RenderDevice* pDevice,
+ const CFX_AffineMatrix* pUser2Device,
+ AppearanceMode mode,
+ const CPDF_RenderOptions* pOptions) {
+ CFX_Matrix matrix;
+ CPDF_Form* pForm =
+ FPDFDOC_Annot_GetMatrix(pPage, this, mode, pUser2Device, matrix);
+ if (!pForm) {
+ return FALSE;
+ }
+ CPDF_RenderContext context;
+ context.Create((CPDF_Page*)pPage);
+ context.DrawObjectList(pDevice, pForm, &matrix, pOptions);
+ return TRUE;
}
-FX_BOOL CPDF_Annot::DrawInContext(const CPDF_Page* pPage, const CPDF_RenderContext* pContext, const CFX_AffineMatrix* pUser2Device, AppearanceMode mode)
-{
- CFX_Matrix matrix;
- CPDF_Form* pForm = FPDFDOC_Annot_GetMatrix(pPage, this, mode, pUser2Device, matrix);
- if (!pForm) {
- return FALSE;
- }
- ((CPDF_RenderContext*)pContext)->AppendObjectList(pForm, &matrix);
- return TRUE;
+FX_BOOL CPDF_Annot::DrawInContext(const CPDF_Page* pPage,
+ const CPDF_RenderContext* pContext,
+ const CFX_AffineMatrix* pUser2Device,
+ AppearanceMode mode) {
+ CFX_Matrix matrix;
+ CPDF_Form* pForm =
+ FPDFDOC_Annot_GetMatrix(pPage, this, mode, pUser2Device, matrix);
+ if (!pForm) {
+ return FALSE;
+ }
+ ((CPDF_RenderContext*)pContext)->AppendObjectList(pForm, &matrix);
+ return TRUE;
}
-void CPDF_Annot::DrawBorder(CFX_RenderDevice* pDevice, const CFX_AffineMatrix* pUser2Device, const CPDF_RenderOptions* pOptions)
-{
- if (GetSubType() == "Popup") {
- return;
- }
- FX_DWORD annot_flags = GetFlags();
- if (annot_flags & ANNOTFLAG_HIDDEN) {
- return;
- }
- FX_BOOL bPrinting = pDevice->GetDeviceClass() == FXDC_PRINTER || (pOptions && (pOptions->m_Flags & RENDER_PRINTPREVIEW));
- if (bPrinting && (annot_flags & ANNOTFLAG_PRINT) == 0) {
- return;
- }
- if (!bPrinting && (annot_flags & ANNOTFLAG_NOVIEW)) {
- return;
- }
- CPDF_Dictionary* pBS = m_pAnnotDict->GetDict("BS");
- char style_char;
- FX_FLOAT width;
- CPDF_Array* pDashArray = NULL;
- if (pBS == NULL) {
- CPDF_Array* pBorderArray = m_pAnnotDict->GetArray("Border");
- style_char = 'S';
- if (pBorderArray) {
- width = pBorderArray->GetNumber(2);
- if (pBorderArray->GetCount() == 4) {
- pDashArray = pBorderArray->GetArray(3);
- if (pDashArray == NULL) {
- return;
- }
- int nLen = pDashArray->GetCount();
- int i = 0;
- for (; i < nLen; ++i) {
- CPDF_Object*pObj = pDashArray->GetElementValue(i);
- if (pObj && pObj->GetInteger()) {
- break;
- }
- }
- if (i == nLen) {
- return;
- }
- style_char = 'D';
- }
- } else {
- width = 1;
+void CPDF_Annot::DrawBorder(CFX_RenderDevice* pDevice,
+ const CFX_AffineMatrix* pUser2Device,
+ const CPDF_RenderOptions* pOptions) {
+ if (GetSubType() == "Popup") {
+ return;
+ }
+ FX_DWORD annot_flags = GetFlags();
+ if (annot_flags & ANNOTFLAG_HIDDEN) {
+ return;
+ }
+ FX_BOOL bPrinting = pDevice->GetDeviceClass() == FXDC_PRINTER ||
+ (pOptions && (pOptions->m_Flags & RENDER_PRINTPREVIEW));
+ if (bPrinting && (annot_flags & ANNOTFLAG_PRINT) == 0) {
+ return;
+ }
+ if (!bPrinting && (annot_flags & ANNOTFLAG_NOVIEW)) {
+ return;
+ }
+ CPDF_Dictionary* pBS = m_pAnnotDict->GetDict("BS");
+ char style_char;
+ FX_FLOAT width;
+ CPDF_Array* pDashArray = NULL;
+ if (pBS == NULL) {
+ CPDF_Array* pBorderArray = m_pAnnotDict->GetArray("Border");
+ style_char = 'S';
+ if (pBorderArray) {
+ width = pBorderArray->GetNumber(2);
+ if (pBorderArray->GetCount() == 4) {
+ pDashArray = pBorderArray->GetArray(3);
+ if (pDashArray == NULL) {
+ return;
}
- } else {
- CFX_ByteString style = pBS->GetString("S");
- pDashArray = pBS->GetArray("D");
- style_char = style[1];
- width = pBS->GetNumber("W");
- }
- if (width <= 0) {
- return;
- }
- CPDF_Array* pColor = m_pAnnotDict->GetArray("C");
- FX_DWORD argb = 0xff000000;
- if (pColor != NULL) {
- int R = (int32_t)(pColor->GetNumber(0) * 255);
- int G = (int32_t)(pColor->GetNumber(1) * 255);
- int B = (int32_t)(pColor->GetNumber(2) * 255);
- argb = ArgbEncode(0xff, R, G, B);
- }
- CPDF_GraphStateData graph_state;
- graph_state.m_LineWidth = width;
- if (style_char == 'D') {
- if (pDashArray) {
- FX_DWORD dash_count = pDashArray->GetCount();
- if (dash_count % 2) {
- dash_count++;
- }
- graph_state.m_DashArray = FX_Alloc(FX_FLOAT, dash_count);
- graph_state.m_DashCount = dash_count;
- FX_DWORD i;
- for (i = 0; i < pDashArray->GetCount(); ++i) {
- graph_state.m_DashArray[i] = pDashArray->GetNumber(i);
- }
- if (i < dash_count) {
- graph_state.m_DashArray[i] = graph_state.m_DashArray[i - 1];
- }
- } else {
- graph_state.m_DashArray = FX_Alloc(FX_FLOAT, 2);
- graph_state.m_DashCount = 2;
- graph_state.m_DashArray[0] = graph_state.m_DashArray[1] = 3 * 1.0f;
+ int nLen = pDashArray->GetCount();
+ int i = 0;
+ for (; i < nLen; ++i) {
+ CPDF_Object* pObj = pDashArray->GetElementValue(i);
+ if (pObj && pObj->GetInteger()) {
+ break;
+ }
}
+ if (i == nLen) {
+ return;
+ }
+ style_char = 'D';
+ }
+ } else {
+ width = 1;
}
- CFX_FloatRect rect;
- GetRect(rect);
- CPDF_PathData path;
- width /= 2;
- path.AppendRect(rect.left + width, rect.bottom + width, rect.right - width, rect.top - width);
- int fill_type = 0;
- if (pOptions && (pOptions->m_Flags & RENDER_NOPATHSMOOTH)) {
- fill_type |= FXFILL_NOPATHSMOOTH;
+ } else {
+ CFX_ByteString style = pBS->GetString("S");
+ pDashArray = pBS->GetArray("D");
+ style_char = style[1];
+ width = pBS->GetNumber("W");
+ }
+ if (width <= 0) {
+ return;
+ }
+ CPDF_Array* pColor = m_pAnnotDict->GetArray("C");
+ FX_DWORD argb = 0xff000000;
+ if (pColor != NULL) {
+ int R = (int32_t)(pColor->GetNumber(0) * 255);
+ int G = (int32_t)(pColor->GetNumber(1) * 255);
+ int B = (int32_t)(pColor->GetNumber(2) * 255);
+ argb = ArgbEncode(0xff, R, G, B);
+ }
+ CPDF_GraphStateData graph_state;
+ graph_state.m_LineWidth = width;
+ if (style_char == 'D') {
+ if (pDashArray) {
+ FX_DWORD dash_count = pDashArray->GetCount();
+ if (dash_count % 2) {
+ dash_count++;
+ }
+ graph_state.m_DashArray = FX_Alloc(FX_FLOAT, dash_count);
+ graph_state.m_DashCount = dash_count;
+ FX_DWORD i;
+ for (i = 0; i < pDashArray->GetCount(); ++i) {
+ graph_state.m_DashArray[i] = pDashArray->GetNumber(i);
+ }
+ if (i < dash_count) {
+ graph_state.m_DashArray[i] = graph_state.m_DashArray[i - 1];
+ }
+ } else {
+ graph_state.m_DashArray = FX_Alloc(FX_FLOAT, 2);
+ graph_state.m_DashCount = 2;
+ graph_state.m_DashArray[0] = graph_state.m_DashArray[1] = 3 * 1.0f;
}
- pDevice->DrawPath(&path, pUser2Device, &graph_state, argb, argb, fill_type);
+ }
+ CFX_FloatRect rect;
+ GetRect(rect);
+ CPDF_PathData path;
+ width /= 2;
+ path.AppendRect(rect.left + width, rect.bottom + width, rect.right - width,
+ rect.top - width);
+ int fill_type = 0;
+ if (pOptions && (pOptions->m_Flags & RENDER_NOPATHSMOOTH)) {
+ fill_type |= FXFILL_NOPATHSMOOTH;
+ }
+ pDevice->DrawPath(&path, pUser2Device, &graph_state, argb, argb, fill_type);
}
diff --git a/core/src/fpdfdoc/doc_ap.cpp b/core/src/fpdfdoc/doc_ap.cpp
index f94a4d60e0..feedb32989 100644
--- a/core/src/fpdfdoc/doc_ap.cpp
+++ b/core/src/fpdfdoc/doc_ap.cpp
@@ -8,803 +8,923 @@
#include "../../include/fpdfdoc/fpdf_vt.h"
#include "pdf_vt.h"
#include "../../include/fpdfdoc/fpdf_ap.h"
-FX_BOOL FPDF_GenerateAP(CPDF_Document* pDoc, CPDF_Dictionary* pAnnotDict)
-{
- if (!pAnnotDict || pAnnotDict->GetConstString("Subtype") != FX_BSTRC("Widget")) {
- return FALSE;
- }
- CFX_ByteString field_type = FPDF_GetFieldAttr(pAnnotDict, "FT")->GetString();
- FX_DWORD flags = FPDF_GetFieldAttr(pAnnotDict, "Ff")? FPDF_GetFieldAttr(pAnnotDict, "Ff")->GetInteger() : 0;
- if (field_type == "Tx") {
- return CPVT_GenerateAP::GenerateTextFieldAP(pDoc, pAnnotDict);
- }
- if (field_type == "Ch") {
- return (flags & (1 << 17)) ?
- CPVT_GenerateAP::GenerateComboBoxAP(pDoc, pAnnotDict) :
- CPVT_GenerateAP::GenerateListBoxAP(pDoc, pAnnotDict);
- }
- if (field_type == "Btn") {
- if (!(flags & (1 << 16))) {
- if (!pAnnotDict->KeyExist("AS")) {
- if (CPDF_Dictionary* pParentDict = pAnnotDict->GetDict("Parent")) {
- if (pParentDict->KeyExist("AS")) {
- pAnnotDict->SetAtString("AS", pParentDict->GetString("AS"));
- }
- }
- }
+FX_BOOL FPDF_GenerateAP(CPDF_Document* pDoc, CPDF_Dictionary* pAnnotDict) {
+ if (!pAnnotDict ||
+ pAnnotDict->GetConstString("Subtype") != FX_BSTRC("Widget")) {
+ return FALSE;
+ }
+ CFX_ByteString field_type = FPDF_GetFieldAttr(pAnnotDict, "FT")->GetString();
+ FX_DWORD flags = FPDF_GetFieldAttr(pAnnotDict, "Ff")
+ ? FPDF_GetFieldAttr(pAnnotDict, "Ff")->GetInteger()
+ : 0;
+ if (field_type == "Tx") {
+ return CPVT_GenerateAP::GenerateTextFieldAP(pDoc, pAnnotDict);
+ }
+ if (field_type == "Ch") {
+ return (flags & (1 << 17))
+ ? CPVT_GenerateAP::GenerateComboBoxAP(pDoc, pAnnotDict)
+ : CPVT_GenerateAP::GenerateListBoxAP(pDoc, pAnnotDict);
+ }
+ if (field_type == "Btn") {
+ if (!(flags & (1 << 16))) {
+ if (!pAnnotDict->KeyExist("AS")) {
+ if (CPDF_Dictionary* pParentDict = pAnnotDict->GetDict("Parent")) {
+ if (pParentDict->KeyExist("AS")) {
+ pAnnotDict->SetAtString("AS", pParentDict->GetString("AS"));
+ }
}
+ }
}
- return FALSE;
+ }
+ return FALSE;
}
-class CPVT_FontMap : public IPVT_FontMap
-{
-public:
- CPVT_FontMap(CPDF_Document * pDoc, CPDF_Dictionary * pResDict, CPDF_Font * pDefFont,
- const CFX_ByteString & sDefFontAlias);
- virtual ~CPVT_FontMap();
- CPDF_Font* GetPDFFont(int32_t nFontIndex);
- CFX_ByteString GetPDFFontAlias(int32_t nFontIndex);
- static void GetAnnotSysPDFFont(CPDF_Document * pDoc, CPDF_Dictionary * pResDict,
- CPDF_Font * & pSysFont, CFX_ByteString & sSysFontAlias);
-private:
- CPDF_Document* m_pDocument;
- CPDF_Dictionary* m_pResDict;
- CPDF_Font* m_pDefFont;
- CFX_ByteString m_sDefFontAlias;
- CPDF_Font* m_pSysFont;
- CFX_ByteString m_sSysFontAlias;
+class CPVT_FontMap : public IPVT_FontMap {
+ public:
+ CPVT_FontMap(CPDF_Document* pDoc,
+ CPDF_Dictionary* pResDict,
+ CPDF_Font* pDefFont,
+ const CFX_ByteString& sDefFontAlias);
+ virtual ~CPVT_FontMap();
+ CPDF_Font* GetPDFFont(int32_t nFontIndex);
+ CFX_ByteString GetPDFFontAlias(int32_t nFontIndex);
+ static void GetAnnotSysPDFFont(CPDF_Document* pDoc,
+ CPDF_Dictionary* pResDict,
+ CPDF_Font*& pSysFont,
+ CFX_ByteString& sSysFontAlias);
+
+ private:
+ CPDF_Document* m_pDocument;
+ CPDF_Dictionary* m_pResDict;
+ CPDF_Font* m_pDefFont;
+ CFX_ByteString m_sDefFontAlias;
+ CPDF_Font* m_pSysFont;
+ CFX_ByteString m_sSysFontAlias;
};
-CPVT_FontMap::CPVT_FontMap(CPDF_Document * pDoc, CPDF_Dictionary * pResDict, CPDF_Font * pDefFont,
- const CFX_ByteString & sDefFontAlias) :
- m_pDocument(pDoc),
- m_pResDict(pResDict),
- m_pDefFont(pDefFont),
- m_sDefFontAlias(sDefFontAlias),
- m_pSysFont(NULL),
- m_sSysFontAlias()
-{
-}
-CPVT_FontMap::~CPVT_FontMap()
-{
-}
-extern CPDF_Font* AddNativeInterFormFont(CPDF_Dictionary*& pFormDict, CPDF_Document* pDocument, CFX_ByteString& csNameTag);
-void CPVT_FontMap::GetAnnotSysPDFFont(CPDF_Document * pDoc, CPDF_Dictionary * pResDict,
- CPDF_Font * & pSysFont, CFX_ByteString & sSysFontAlias)
-{
- if (pDoc && pResDict) {
- CFX_ByteString sFontAlias;
- CPDF_Dictionary* pFormDict = pDoc->GetRoot()->GetDict("AcroForm");
- if (CPDF_Font * pPDFFont = AddNativeInterFormFont(pFormDict, pDoc, sSysFontAlias)) {
- if (CPDF_Dictionary * pFontList = pResDict->GetDict("Font")) {
- if (!pFontList->KeyExist(sSysFontAlias)) {
- pFontList->SetAtReference(sSysFontAlias, pDoc, pPDFFont->GetFontDict());
- }
- }
- pSysFont = pPDFFont;
+CPVT_FontMap::CPVT_FontMap(CPDF_Document* pDoc,
+ CPDF_Dictionary* pResDict,
+ CPDF_Font* pDefFont,
+ const CFX_ByteString& sDefFontAlias)
+ : m_pDocument(pDoc),
+ m_pResDict(pResDict),
+ m_pDefFont(pDefFont),
+ m_sDefFontAlias(sDefFontAlias),
+ m_pSysFont(NULL),
+ m_sSysFontAlias() {}
+CPVT_FontMap::~CPVT_FontMap() {}
+extern CPDF_Font* AddNativeInterFormFont(CPDF_Dictionary*& pFormDict,
+ CPDF_Document* pDocument,
+ CFX_ByteString& csNameTag);
+void CPVT_FontMap::GetAnnotSysPDFFont(CPDF_Document* pDoc,
+ CPDF_Dictionary* pResDict,
+ CPDF_Font*& pSysFont,
+ CFX_ByteString& sSysFontAlias) {
+ if (pDoc && pResDict) {
+ CFX_ByteString sFontAlias;
+ CPDF_Dictionary* pFormDict = pDoc->GetRoot()->GetDict("AcroForm");
+ if (CPDF_Font* pPDFFont =
+ AddNativeInterFormFont(pFormDict, pDoc, sSysFontAlias)) {
+ if (CPDF_Dictionary* pFontList = pResDict->GetDict("Font")) {
+ if (!pFontList->KeyExist(sSysFontAlias)) {
+ pFontList->SetAtReference(sSysFontAlias, pDoc,
+ pPDFFont->GetFontDict());
}
+ }
+ pSysFont = pPDFFont;
}
+ }
}
-CPDF_Font* CPVT_FontMap::GetPDFFont(int32_t nFontIndex)
-{
- switch (nFontIndex) {
- case 0:
- return m_pDefFont;
- case 1:
- if (!m_pSysFont) {
- GetAnnotSysPDFFont(m_pDocument, m_pResDict, m_pSysFont, m_sSysFontAlias);
- }
- return m_pSysFont;
- }
- return NULL;
+CPDF_Font* CPVT_FontMap::GetPDFFont(int32_t nFontIndex) {
+ switch (nFontIndex) {
+ case 0:
+ return m_pDefFont;
+ case 1:
+ if (!m_pSysFont) {
+ GetAnnotSysPDFFont(m_pDocument, m_pResDict, m_pSysFont,
+ m_sSysFontAlias);
+ }
+ return m_pSysFont;
+ }
+ return NULL;
}
-CFX_ByteString CPVT_FontMap::GetPDFFontAlias(int32_t nFontIndex)
-{
- switch (nFontIndex) {
- case 0:
- return m_sDefFontAlias;
- case 1:
- if (!m_pSysFont) {
- GetAnnotSysPDFFont(m_pDocument, m_pResDict, m_pSysFont, m_sSysFontAlias);
- }
- return m_sSysFontAlias;
- }
- return "";
+CFX_ByteString CPVT_FontMap::GetPDFFontAlias(int32_t nFontIndex) {
+ switch (nFontIndex) {
+ case 0:
+ return m_sDefFontAlias;
+ case 1:
+ if (!m_pSysFont) {
+ GetAnnotSysPDFFont(m_pDocument, m_pResDict, m_pSysFont,
+ m_sSysFontAlias);
+ }
+ return m_sSysFontAlias;
+ }
+ return "";
}
-CPVT_Provider::CPVT_Provider(IPVT_FontMap * pFontMap) : m_pFontMap(pFontMap)
-{
- ASSERT (m_pFontMap != NULL);
+CPVT_Provider::CPVT_Provider(IPVT_FontMap* pFontMap) : m_pFontMap(pFontMap) {
+ ASSERT(m_pFontMap != NULL);
}
-CPVT_Provider::~CPVT_Provider()
-{
-}
-int32_t CPVT_Provider::GetCharWidth(int32_t nFontIndex, FX_WORD word, int32_t nWordStyle)
-{
- if (CPDF_Font* pPDFFont = m_pFontMap->GetPDFFont(nFontIndex)) {
- FX_DWORD charcode = pPDFFont->CharCodeFromUnicode(word);
- if (charcode != -1) {
- return pPDFFont->GetCharWidthF(charcode);
- }
- }
- return 0;
+CPVT_Provider::~CPVT_Provider() {}
+int32_t CPVT_Provider::GetCharWidth(int32_t nFontIndex,
+ FX_WORD word,
+ int32_t nWordStyle) {
+ if (CPDF_Font* pPDFFont = m_pFontMap->GetPDFFont(nFontIndex)) {
+ FX_DWORD charcode = pPDFFont->CharCodeFromUnicode(word);
+ if (charcode != -1) {
+ return pPDFFont->GetCharWidthF(charcode);
+ }
+ }
+ return 0;
}
-int32_t CPVT_Provider::GetTypeAscent(int32_t nFontIndex)
-{
- if (CPDF_Font* pPDFFont = m_pFontMap->GetPDFFont(nFontIndex)) {
- return pPDFFont->GetTypeAscent();
- }
- return 0;
+int32_t CPVT_Provider::GetTypeAscent(int32_t nFontIndex) {
+ if (CPDF_Font* pPDFFont = m_pFontMap->GetPDFFont(nFontIndex)) {
+ return pPDFFont->GetTypeAscent();
+ }
+ return 0;
}
-int32_t CPVT_Provider::GetTypeDescent(int32_t nFontIndex)
-{
- if (CPDF_Font* pPDFFont = m_pFontMap->GetPDFFont(nFontIndex)) {
- return pPDFFont->GetTypeDescent();
- }
- return 0;
+int32_t CPVT_Provider::GetTypeDescent(int32_t nFontIndex) {
+ if (CPDF_Font* pPDFFont = m_pFontMap->GetPDFFont(nFontIndex)) {
+ return pPDFFont->GetTypeDescent();
+ }
+ return 0;
}
-int32_t CPVT_Provider::GetWordFontIndex(FX_WORD word, int32_t charset, int32_t nFontIndex)
-{
- if (CPDF_Font* pDefFont = m_pFontMap->GetPDFFont(0)) {
- if (pDefFont->CharCodeFromUnicode(word) != -1) {
- return 0;
- }
- }
- if (CPDF_Font* pSysFont = m_pFontMap->GetPDFFont(1))
- if (pSysFont->CharCodeFromUnicode(word) != -1) {
- return 1;
- }
- return -1;
+int32_t CPVT_Provider::GetWordFontIndex(FX_WORD word,
+ int32_t charset,
+ int32_t nFontIndex) {
+ if (CPDF_Font* pDefFont = m_pFontMap->GetPDFFont(0)) {
+ if (pDefFont->CharCodeFromUnicode(word) != -1) {
+ return 0;
+ }
+ }
+ if (CPDF_Font* pSysFont = m_pFontMap->GetPDFFont(1))
+ if (pSysFont->CharCodeFromUnicode(word) != -1) {
+ return 1;
+ }
+ return -1;
}
-FX_BOOL CPVT_Provider::IsLatinWord(FX_WORD word)
-{
- if ((word >= 0x61 && word <= 0x7A) || (word >= 0x41 && word <= 0x5A) || word == 0x2D || word == 0x27) {
- return TRUE;
- }
- return FALSE;
+FX_BOOL CPVT_Provider::IsLatinWord(FX_WORD word) {
+ if ((word >= 0x61 && word <= 0x7A) || (word >= 0x41 && word <= 0x5A) ||
+ word == 0x2D || word == 0x27) {
+ return TRUE;
+ }
+ return FALSE;
}
-int32_t CPVT_Provider::GetDefaultFontIndex()
-{
- return 0;
+int32_t CPVT_Provider::GetDefaultFontIndex() {
+ return 0;
}
-static CFX_ByteString GetPDFWordString(IPVT_FontMap * pFontMap, int32_t nFontIndex, FX_WORD Word, FX_WORD SubWord)
-{
- CFX_ByteString sWord;
- if (SubWord > 0) {
- sWord.Format("%c", SubWord);
- } else {
- if (pFontMap) {
- if (CPDF_Font * pPDFFont = pFontMap->GetPDFFont(nFontIndex)) {
- if (pPDFFont->GetBaseFont().Compare("Symbol") == 0 || pPDFFont->GetBaseFont().Compare("ZapfDingbats") == 0) {
- sWord.Format("%c", Word);
- } else {
- FX_DWORD dwCharCode = pPDFFont->CharCodeFromUnicode(Word);
- if (dwCharCode != -1) {
- pPDFFont->AppendChar(sWord, dwCharCode);
- }
- }
- }
+static CFX_ByteString GetPDFWordString(IPVT_FontMap* pFontMap,
+ int32_t nFontIndex,
+ FX_WORD Word,
+ FX_WORD SubWord) {
+ CFX_ByteString sWord;
+ if (SubWord > 0) {
+ sWord.Format("%c", SubWord);
+ } else {
+ if (pFontMap) {
+ if (CPDF_Font* pPDFFont = pFontMap->GetPDFFont(nFontIndex)) {
+ if (pPDFFont->GetBaseFont().Compare("Symbol") == 0 ||
+ pPDFFont->GetBaseFont().Compare("ZapfDingbats") == 0) {
+ sWord.Format("%c", Word);
+ } else {
+ FX_DWORD dwCharCode = pPDFFont->CharCodeFromUnicode(Word);
+ if (dwCharCode != -1) {
+ pPDFFont->AppendChar(sWord, dwCharCode);
+ }
}
+ }
}
- return sWord;
+ }
+ return sWord;
}
-static CFX_ByteString GetWordRenderString(const CFX_ByteString & strWords)
-{
- if (strWords.GetLength() > 0) {
- return PDF_EncodeString(strWords) + " Tj\n";
- }
- return "";
+static CFX_ByteString GetWordRenderString(const CFX_ByteString& strWords) {
+ if (strWords.GetLength() > 0) {
+ return PDF_EncodeString(strWords) + " Tj\n";
+ }
+ return "";
}
-static CFX_ByteString GetFontSetString(IPVT_FontMap * pFontMap, int32_t nFontIndex, FX_FLOAT fFontSize)
-{
- CFX_ByteTextBuf sRet;
- if (pFontMap) {
- CFX_ByteString sFontAlias = pFontMap->GetPDFFontAlias(nFontIndex);
- if (sFontAlias.GetLength() > 0 && fFontSize > 0 ) {
- sRet << "/" << sFontAlias << " " << fFontSize << " Tf\n";
- }
- }
- return sRet.GetByteString();
+static CFX_ByteString GetFontSetString(IPVT_FontMap* pFontMap,
+ int32_t nFontIndex,
+ FX_FLOAT fFontSize) {
+ CFX_ByteTextBuf sRet;
+ if (pFontMap) {
+ CFX_ByteString sFontAlias = pFontMap->GetPDFFontAlias(nFontIndex);
+ if (sFontAlias.GetLength() > 0 && fFontSize > 0) {
+ sRet << "/" << sFontAlias << " " << fFontSize << " Tf\n";
+ }
+ }
+ return sRet.GetByteString();
}
-static CPVT_Color ParseColor(const CFX_ByteString & str)
-{
- CPDF_SimpleParser syntax(str);
- syntax.SetPos(0);
- if (syntax.FindTagParam("g", 1)) {
- return CPVT_Color(CT_GRAY, FX_atof(syntax.GetWord()));
- }
- syntax.SetPos(0);
- if (syntax.FindTagParam("rg", 3)) {
- FX_FLOAT f1 = FX_atof(syntax.GetWord());
- FX_FLOAT f2 = FX_atof(syntax.GetWord());
- FX_FLOAT f3 = FX_atof(syntax.GetWord());
- return CPVT_Color(CT_RGB, f1, f2, f3);
- }
- syntax.SetPos(0);
- if (syntax.FindTagParam("k", 4)) {
- FX_FLOAT f1 = FX_atof(syntax.GetWord());
- FX_FLOAT f2 = FX_atof(syntax.GetWord());
- FX_FLOAT f3 = FX_atof(syntax.GetWord());
- FX_FLOAT f4 = FX_atof(syntax.GetWord());
- return CPVT_Color(CT_CMYK, f1, f2, f3, f4);
- }
- return CPVT_Color(CT_TRANSPARENT);
+static CPVT_Color ParseColor(const CFX_ByteString& str) {
+ CPDF_SimpleParser syntax(str);
+ syntax.SetPos(0);
+ if (syntax.FindTagParam("g", 1)) {
+ return CPVT_Color(CT_GRAY, FX_atof(syntax.GetWord()));
+ }
+ syntax.SetPos(0);
+ if (syntax.FindTagParam("rg", 3)) {
+ FX_FLOAT f1 = FX_atof(syntax.GetWord());
+ FX_FLOAT f2 = FX_atof(syntax.GetWord());
+ FX_FLOAT f3 = FX_atof(syntax.GetWord());
+ return CPVT_Color(CT_RGB, f1, f2, f3);
+ }
+ syntax.SetPos(0);
+ if (syntax.FindTagParam("k", 4)) {
+ FX_FLOAT f1 = FX_atof(syntax.GetWord());
+ FX_FLOAT f2 = FX_atof(syntax.GetWord());
+ FX_FLOAT f3 = FX_atof(syntax.GetWord());
+ FX_FLOAT f4 = FX_atof(syntax.GetWord());
+ return CPVT_Color(CT_CMYK, f1, f2, f3, f4);
+ }
+ return CPVT_Color(CT_TRANSPARENT);
}
-static CPVT_Color ParseColor(const CPDF_Array & array)
-{
- CPVT_Color rt;
- switch (array.GetCount()) {
- case 1:
- rt = CPVT_Color(CT_GRAY, array.GetFloat(0));
- break;
- case 3:
- rt = CPVT_Color(CT_RGB, array.GetFloat(0), array.GetFloat(1), array.GetFloat(2));
- break;
- case 4:
- rt = CPVT_Color(CT_CMYK, array.GetFloat(0), array.GetFloat(1), array.GetFloat(2), array.GetFloat(3));
- break;
- }
- return rt;
+static CPVT_Color ParseColor(const CPDF_Array& array) {
+ CPVT_Color rt;
+ switch (array.GetCount()) {
+ case 1:
+ rt = CPVT_Color(CT_GRAY, array.GetFloat(0));
+ break;
+ case 3:
+ rt = CPVT_Color(CT_RGB, array.GetFloat(0), array.GetFloat(1),
+ array.GetFloat(2));
+ break;
+ case 4:
+ rt = CPVT_Color(CT_CMYK, array.GetFloat(0), array.GetFloat(1),
+ array.GetFloat(2), array.GetFloat(3));
+ break;
+ }
+ return rt;
}
-static FX_BOOL GenerateWidgetAP(CPDF_Document* pDoc, CPDF_Dictionary* pAnnotDict, const int32_t & nWidgetType)
-{
- CPDF_Dictionary* pFormDict = NULL;
- if (CPDF_Dictionary * pRootDict = pDoc->GetRoot()) {
- pFormDict = pRootDict->GetDict("AcroForm");
- }
- if (!pFormDict) {
- return FALSE;
- }
- CFX_ByteString DA;
- if (CPDF_Object* pDAObj = FPDF_GetFieldAttr(pAnnotDict, "DA")) {
- DA = pDAObj->GetString();
- }
- if (DA.IsEmpty()) {
- DA = pFormDict->GetString("DA");
- }
- if (DA.IsEmpty()) {
- return FALSE;
- }
- CPDF_SimpleParser syntax(DA);
- syntax.FindTagParam("Tf", 2);
- CFX_ByteString sFontName = syntax.GetWord();
- sFontName = PDF_NameDecode(sFontName);
- if (sFontName.IsEmpty()) {
- return FALSE;
- }
- FX_FLOAT fFontSize = FX_atof(syntax.GetWord());
- CPVT_Color crText = ParseColor(DA);
- FX_BOOL bUseFormRes = FALSE;
- CPDF_Dictionary * pFontDict = NULL;
- CPDF_Dictionary* pDRDict = pAnnotDict->GetDict(FX_BSTRC("DR"));
- if (pDRDict == NULL) {
- pDRDict = pFormDict->GetDict(FX_BSTRC("DR"));
- bUseFormRes = TRUE;
- }
- CPDF_Dictionary * pDRFontDict = NULL;
- if (pDRDict && (pDRFontDict = pDRDict->GetDict("Font"))) {
+static FX_BOOL GenerateWidgetAP(CPDF_Document* pDoc,
+ CPDF_Dictionary* pAnnotDict,
+ const int32_t& nWidgetType) {
+ CPDF_Dictionary* pFormDict = NULL;
+ if (CPDF_Dictionary* pRootDict = pDoc->GetRoot()) {
+ pFormDict = pRootDict->GetDict("AcroForm");
+ }
+ if (!pFormDict) {
+ return FALSE;
+ }
+ CFX_ByteString DA;
+ if (CPDF_Object* pDAObj = FPDF_GetFieldAttr(pAnnotDict, "DA")) {
+ DA = pDAObj->GetString();
+ }
+ if (DA.IsEmpty()) {
+ DA = pFormDict->GetString("DA");
+ }
+ if (DA.IsEmpty()) {
+ return FALSE;
+ }
+ CPDF_SimpleParser syntax(DA);
+ syntax.FindTagParam("Tf", 2);
+ CFX_ByteString sFontName = syntax.GetWord();
+ sFontName = PDF_NameDecode(sFontName);
+ if (sFontName.IsEmpty()) {
+ return FALSE;
+ }
+ FX_FLOAT fFontSize = FX_atof(syntax.GetWord());
+ CPVT_Color crText = ParseColor(DA);
+ FX_BOOL bUseFormRes = FALSE;
+ CPDF_Dictionary* pFontDict = NULL;
+ CPDF_Dictionary* pDRDict = pAnnotDict->GetDict(FX_BSTRC("DR"));
+ if (pDRDict == NULL) {
+ pDRDict = pFormDict->GetDict(FX_BSTRC("DR"));
+ bUseFormRes = TRUE;
+ }
+ CPDF_Dictionary* pDRFontDict = NULL;
+ if (pDRDict && (pDRFontDict = pDRDict->GetDict("Font"))) {
+ pFontDict = pDRFontDict->GetDict(sFontName.Mid(1));
+ if (!pFontDict && !bUseFormRes) {
+ pDRDict = pFormDict->GetDict(FX_BSTRC("DR"));
+ pDRFontDict = pDRDict->GetDict("Font");
+ if (pDRFontDict) {
pFontDict = pDRFontDict->GetDict(sFontName.Mid(1));
- if (!pFontDict && !bUseFormRes) {
- pDRDict = pFormDict->GetDict(FX_BSTRC("DR"));
- pDRFontDict = pDRDict->GetDict("Font");
- if (pDRFontDict) {
- pFontDict = pDRFontDict->GetDict(sFontName.Mid(1));
- }
- }
- }
- if (!pDRFontDict) {
- return FALSE;
- }
- if (!pFontDict) {
- pFontDict = CPDF_Dictionary::Create();
- if (pFontDict == NULL) {
- return FALSE;
- }
- pFontDict->SetAtName(FX_BSTRC("Type"), "Font");
- pFontDict->SetAtName(FX_BSTRC("Subtype"), "Type1");
- pFontDict->SetAtName(FX_BSTRC("BaseFont"), "Helvetica");
- pFontDict->SetAtName(FX_BSTRC("Encoding"), "WinAnsiEncoding");
- pDoc->AddIndirectObject(pFontDict);
- pDRFontDict->SetAtReference(sFontName.Mid(1), pDoc, pFontDict);
- }
- CPDF_Font* pDefFont = pDoc->LoadFont(pFontDict);
- if (!pDefFont) {
- return FALSE;
- }
- CPDF_Rect rcAnnot = pAnnotDict->GetRect("Rect");
- int32_t nRotate = 0;
- if (CPDF_Dictionary * pMKDict = pAnnotDict->GetDict("MK")) {
- nRotate = pMKDict->GetInteger("R");
- }
- CPDF_Rect rcBBox;
- CPDF_Matrix matrix;
- switch (nRotate % 360) {
- case 0:
- rcBBox = CPDF_Rect(0, 0, rcAnnot.right - rcAnnot.left, rcAnnot.top - rcAnnot.bottom);
- break;
- case 90:
- matrix = CPDF_Matrix(0, 1, -1, 0, rcAnnot.right - rcAnnot.left, 0);
- rcBBox = CPDF_Rect(0, 0, rcAnnot.top - rcAnnot.bottom, rcAnnot.right - rcAnnot.left);
- break;
- case 180:
- matrix = CPDF_Matrix(-1, 0, 0, -1, rcAnnot.right - rcAnnot.left, rcAnnot.top - rcAnnot.bottom);
- rcBBox = CPDF_Rect(0, 0, rcAnnot.right - rcAnnot.left, rcAnnot.top - rcAnnot.bottom);
- break;
- case 270:
- matrix = CPDF_Matrix(0, -1, 1, 0, 0, rcAnnot.top - rcAnnot.bottom);
- rcBBox = CPDF_Rect(0, 0, rcAnnot.top - rcAnnot.bottom, rcAnnot.right - rcAnnot.left);
- break;
- }
- int32_t nBorderStyle = PBS_SOLID;
- FX_FLOAT fBorderWidth = 1;
- CPVT_Dash dsBorder(3, 0, 0);
- CPVT_Color crLeftTop, crRightBottom;
- if (CPDF_Dictionary * pBSDict = pAnnotDict->GetDict("BS")) {
- if (pBSDict->KeyExist("W")) {
- fBorderWidth = pBSDict->GetNumber("W");
- }
- if (CPDF_Array * pArray = pBSDict->GetArray("D")) {
- dsBorder = CPVT_Dash(pArray->GetInteger(0), pArray->GetInteger(1), pArray->GetInteger(2));
- }
- switch (pBSDict->GetString("S").GetAt(0)) {
- case 'S':
- nBorderStyle = PBS_SOLID;
- break;
- case 'D':
- nBorderStyle = PBS_DASH;
- break;
- case 'B':
- nBorderStyle = PBS_BEVELED;
- fBorderWidth *= 2;
- crLeftTop = CPVT_Color(CT_GRAY, 1);
- crRightBottom = CPVT_Color(CT_GRAY, 0.5);
- break;
- case 'I':
- nBorderStyle = PBS_INSET;
- fBorderWidth *= 2;
- crLeftTop = CPVT_Color(CT_GRAY, 0.5);
- crRightBottom = CPVT_Color(CT_GRAY, 0.75);
- break;
- case 'U':
- nBorderStyle = PBS_UNDERLINED;
- break;
- }
- }
- CPVT_Color crBorder, crBG;
- if (CPDF_Dictionary * pMKDict = pAnnotDict->GetDict("MK")) {
- if (CPDF_Array * pArray = pMKDict->GetArray("BC")) {
- crBorder = ParseColor(*pArray);
- }
- if (CPDF_Array * pArray = pMKDict->GetArray("BG")) {
- crBG = ParseColor(*pArray);
- }
- }
- CFX_ByteTextBuf sAppStream;
- CFX_ByteString sBG = CPVT_GenerateAP::GenerateColorAP(crBG, TRUE);
- if (sBG.GetLength() > 0) {
- sAppStream << "q\n" << sBG << rcBBox.left << " " << rcBBox.bottom << " "
- << rcBBox.Width() << " " << rcBBox.Height() << " re f\n" << "Q\n";
+ }
}
- CFX_ByteString sBorderStream = CPVT_GenerateAP::GenerateBorderAP(rcBBox, fBorderWidth,
- crBorder, crLeftTop, crRightBottom, nBorderStyle, dsBorder);
- if (sBorderStream.GetLength() > 0) {
- sAppStream << "q\n" << sBorderStream << "Q\n";
- }
- CPDF_Rect rcBody = CPDF_Rect(rcBBox.left + fBorderWidth, rcBBox.bottom + fBorderWidth,
- rcBBox.right - fBorderWidth, rcBBox.top - fBorderWidth);
- rcBody.Normalize();
- CPDF_Dictionary* pAPDict = pAnnotDict->GetDict("AP");
+ }
+ if (!pDRFontDict) {
+ return FALSE;
+ }
+ if (!pFontDict) {
+ pFontDict = CPDF_Dictionary::Create();
+ if (pFontDict == NULL) {
+ return FALSE;
+ }
+ pFontDict->SetAtName(FX_BSTRC("Type"), "Font");
+ pFontDict->SetAtName(FX_BSTRC("Subtype"), "Type1");
+ pFontDict->SetAtName(FX_BSTRC("BaseFont"), "Helvetica");
+ pFontDict->SetAtName(FX_BSTRC("Encoding"), "WinAnsiEncoding");
+ pDoc->AddIndirectObject(pFontDict);
+ pDRFontDict->SetAtReference(sFontName.Mid(1), pDoc, pFontDict);
+ }
+ CPDF_Font* pDefFont = pDoc->LoadFont(pFontDict);
+ if (!pDefFont) {
+ return FALSE;
+ }
+ CPDF_Rect rcAnnot = pAnnotDict->GetRect("Rect");
+ int32_t nRotate = 0;
+ if (CPDF_Dictionary* pMKDict = pAnnotDict->GetDict("MK")) {
+ nRotate = pMKDict->GetInteger("R");
+ }
+ CPDF_Rect rcBBox;
+ CPDF_Matrix matrix;
+ switch (nRotate % 360) {
+ case 0:
+ rcBBox = CPDF_Rect(0, 0, rcAnnot.right - rcAnnot.left,
+ rcAnnot.top - rcAnnot.bottom);
+ break;
+ case 90:
+ matrix = CPDF_Matrix(0, 1, -1, 0, rcAnnot.right - rcAnnot.left, 0);
+ rcBBox = CPDF_Rect(0, 0, rcAnnot.top - rcAnnot.bottom,
+ rcAnnot.right - rcAnnot.left);
+ break;
+ case 180:
+ matrix = CPDF_Matrix(-1, 0, 0, -1, rcAnnot.right - rcAnnot.left,
+ rcAnnot.top - rcAnnot.bottom);
+ rcBBox = CPDF_Rect(0, 0, rcAnnot.right - rcAnnot.left,
+ rcAnnot.top - rcAnnot.bottom);
+ break;
+ case 270:
+ matrix = CPDF_Matrix(0, -1, 1, 0, 0, rcAnnot.top - rcAnnot.bottom);
+ rcBBox = CPDF_Rect(0, 0, rcAnnot.top - rcAnnot.bottom,
+ rcAnnot.right - rcAnnot.left);
+ break;
+ }
+ int32_t nBorderStyle = PBS_SOLID;
+ FX_FLOAT fBorderWidth = 1;
+ CPVT_Dash dsBorder(3, 0, 0);
+ CPVT_Color crLeftTop, crRightBottom;
+ if (CPDF_Dictionary* pBSDict = pAnnotDict->GetDict("BS")) {
+ if (pBSDict->KeyExist("W")) {
+ fBorderWidth = pBSDict->GetNumber("W");
+ }
+ if (CPDF_Array* pArray = pBSDict->GetArray("D")) {
+ dsBorder = CPVT_Dash(pArray->GetInteger(0), pArray->GetInteger(1),
+ pArray->GetInteger(2));
+ }
+ switch (pBSDict->GetString("S").GetAt(0)) {
+ case 'S':
+ nBorderStyle = PBS_SOLID;
+ break;
+ case 'D':
+ nBorderStyle = PBS_DASH;
+ break;
+ case 'B':
+ nBorderStyle = PBS_BEVELED;
+ fBorderWidth *= 2;
+ crLeftTop = CPVT_Color(CT_GRAY, 1);
+ crRightBottom = CPVT_Color(CT_GRAY, 0.5);
+ break;
+ case 'I':
+ nBorderStyle = PBS_INSET;
+ fBorderWidth *= 2;
+ crLeftTop = CPVT_Color(CT_GRAY, 0.5);
+ crRightBottom = CPVT_Color(CT_GRAY, 0.75);
+ break;
+ case 'U':
+ nBorderStyle = PBS_UNDERLINED;
+ break;
+ }
+ }
+ CPVT_Color crBorder, crBG;
+ if (CPDF_Dictionary* pMKDict = pAnnotDict->GetDict("MK")) {
+ if (CPDF_Array* pArray = pMKDict->GetArray("BC")) {
+ crBorder = ParseColor(*pArray);
+ }
+ if (CPDF_Array* pArray = pMKDict->GetArray("BG")) {
+ crBG = ParseColor(*pArray);
+ }
+ }
+ CFX_ByteTextBuf sAppStream;
+ CFX_ByteString sBG = CPVT_GenerateAP::GenerateColorAP(crBG, TRUE);
+ if (sBG.GetLength() > 0) {
+ sAppStream << "q\n" << sBG << rcBBox.left << " " << rcBBox.bottom << " "
+ << rcBBox.Width() << " " << rcBBox.Height() << " re f\n"
+ << "Q\n";
+ }
+ CFX_ByteString sBorderStream = CPVT_GenerateAP::GenerateBorderAP(
+ rcBBox, fBorderWidth, crBorder, crLeftTop, crRightBottom, nBorderStyle,
+ dsBorder);
+ if (sBorderStream.GetLength() > 0) {
+ sAppStream << "q\n" << sBorderStream << "Q\n";
+ }
+ CPDF_Rect rcBody =
+ CPDF_Rect(rcBBox.left + fBorderWidth, rcBBox.bottom + fBorderWidth,
+ rcBBox.right - fBorderWidth, rcBBox.top - fBorderWidth);
+ rcBody.Normalize();
+ CPDF_Dictionary* pAPDict = pAnnotDict->GetDict("AP");
+ if (pAPDict == NULL) {
+ pAPDict = CPDF_Dictionary::Create();
if (pAPDict == NULL) {
- pAPDict = CPDF_Dictionary::Create();
- if (pAPDict == NULL) {
- return FALSE;
- }
- pAnnotDict->SetAt("AP", pAPDict);
+ return FALSE;
}
- CPDF_Stream* pNormalStream = pAPDict->GetStream("N");
+ pAnnotDict->SetAt("AP", pAPDict);
+ }
+ CPDF_Stream* pNormalStream = pAPDict->GetStream("N");
+ if (pNormalStream == NULL) {
+ pNormalStream = CPDF_Stream::Create(NULL, 0, NULL);
if (pNormalStream == NULL) {
- pNormalStream = CPDF_Stream::Create(NULL, 0, NULL);
- if (pNormalStream == NULL) {
- return FALSE;
+ return FALSE;
+ }
+ int32_t objnum = pDoc->AddIndirectObject(pNormalStream);
+ pAnnotDict->GetDict("AP")->SetAtReference("N", pDoc, objnum);
+ }
+ CPDF_Dictionary* pStreamDict = pNormalStream->GetDict();
+ if (pStreamDict) {
+ pStreamDict->SetAtMatrix("Matrix", matrix);
+ pStreamDict->SetAtRect("BBox", rcBBox);
+ CPDF_Dictionary* pStreamResList = pStreamDict->GetDict("Resources");
+ if (pStreamResList) {
+ CPDF_Dictionary* pStreamResFontList = pStreamResList->GetDict("Font");
+ if (!pStreamResFontList) {
+ pStreamResFontList = CPDF_Dictionary::Create();
+ if (pStreamResFontList == NULL) {
+ return FALSE;
}
- int32_t objnum = pDoc->AddIndirectObject(pNormalStream);
- pAnnotDict->GetDict("AP")->SetAtReference("N", pDoc, objnum);
- }
- CPDF_Dictionary * pStreamDict = pNormalStream->GetDict();
- if (pStreamDict) {
- pStreamDict->SetAtMatrix("Matrix", matrix);
- pStreamDict->SetAtRect("BBox", rcBBox);
- CPDF_Dictionary* pStreamResList = pStreamDict->GetDict("Resources");
- if (pStreamResList) {
- CPDF_Dictionary* pStreamResFontList = pStreamResList->GetDict("Font");
- if (!pStreamResFontList) {
- pStreamResFontList = CPDF_Dictionary::Create();
- if (pStreamResFontList == NULL) {
- return FALSE;
- }
- pStreamResList->SetAt("Font", pStreamResFontList);
- }
- if (!pStreamResFontList->KeyExist(sFontName)) {
- pStreamResFontList->SetAtReference(sFontName, pDoc, pFontDict);
- }
- } else {
- pStreamDict->SetAt("Resources", pFormDict->GetDict("DR")->Clone());
- pStreamResList = pStreamDict->GetDict("Resources");
+ pStreamResList->SetAt("Font", pStreamResFontList);
+ }
+ if (!pStreamResFontList->KeyExist(sFontName)) {
+ pStreamResFontList->SetAtReference(sFontName, pDoc, pFontDict);
+ }
+ } else {
+ pStreamDict->SetAt("Resources", pFormDict->GetDict("DR")->Clone());
+ pStreamResList = pStreamDict->GetDict("Resources");
+ }
+ }
+ switch (nWidgetType) {
+ case 0: {
+ CFX_WideString swValue =
+ FPDF_GetFieldAttr(pAnnotDict, "V")
+ ? FPDF_GetFieldAttr(pAnnotDict, "V")->GetUnicodeText()
+ : CFX_WideString();
+ int32_t nAlign = FPDF_GetFieldAttr(pAnnotDict, "Q")
+ ? FPDF_GetFieldAttr(pAnnotDict, "Q")->GetInteger()
+ : 0;
+ FX_DWORD dwFlags = FPDF_GetFieldAttr(pAnnotDict, "Ff")
+ ? FPDF_GetFieldAttr(pAnnotDict, "Ff")->GetInteger()
+ : 0;
+ FX_DWORD dwMaxLen =
+ FPDF_GetFieldAttr(pAnnotDict, "MaxLen")
+ ? FPDF_GetFieldAttr(pAnnotDict, "MaxLen")->GetInteger()
+ : 0;
+ CPVT_FontMap map(pDoc,
+ pStreamDict ? pStreamDict->GetDict("Resources") : NULL,
+ pDefFont, sFontName.Right(sFontName.GetLength() - 1));
+ CPVT_Provider prd(&map);
+ CPDF_VariableText vt;
+ vt.SetProvider(&prd);
+ vt.SetPlateRect(rcBody);
+ vt.SetAlignment(nAlign);
+ if (IsFloatZero(fFontSize)) {
+ vt.SetAutoFontSize(TRUE);
+ } else {
+ vt.SetFontSize(fFontSize);
+ }
+ FX_BOOL bMultiLine = (dwFlags >> 12) & 1;
+ if (bMultiLine) {
+ vt.SetMultiLine(TRUE);
+ vt.SetAutoReturn(TRUE);
+ }
+ FX_WORD subWord = 0;
+ if ((dwFlags >> 13) & 1) {
+ subWord = '*';
+ vt.SetPasswordChar(subWord);
+ }
+ FX_BOOL bCharArray = (dwFlags >> 24) & 1;
+ if (bCharArray) {
+ vt.SetCharArray(dwMaxLen);
+ } else {
+ vt.SetLimitChar(dwMaxLen);
+ }
+ vt.Initialize();
+ vt.SetText(swValue.c_str());
+ vt.RearrangeAll();
+ CPDF_Rect rcContent = vt.GetContentRect();
+ CPDF_Point ptOffset(0.0f, 0.0f);
+ if (!bMultiLine) {
+ ptOffset =
+ CPDF_Point(0.0f, (rcContent.Height() - rcBody.Height()) / 2.0f);
+ }
+ CFX_ByteString sBody = CPVT_GenerateAP::GenerateEditAP(
+ &map, vt.GetIterator(), ptOffset, !bCharArray, subWord);
+ if (sBody.GetLength() > 0) {
+ sAppStream << "/Tx BMC\n"
+ << "q\n";
+ if (rcContent.Width() > rcBody.Width() ||
+ rcContent.Height() > rcBody.Height()) {
+ sAppStream << rcBody.left << " " << rcBody.bottom << " "
+ << rcBody.Width() << " " << rcBody.Height()
+ << " re\nW\nn\n";
}
- }
- switch (nWidgetType) {
- case 0: {
- CFX_WideString swValue = FPDF_GetFieldAttr(pAnnotDict, "V")? FPDF_GetFieldAttr(pAnnotDict, "V")->GetUnicodeText() : CFX_WideString();
- int32_t nAlign = FPDF_GetFieldAttr(pAnnotDict, "Q")? FPDF_GetFieldAttr(pAnnotDict, "Q")->GetInteger() : 0;
- FX_DWORD dwFlags = FPDF_GetFieldAttr(pAnnotDict, "Ff")? FPDF_GetFieldAttr(pAnnotDict, "Ff")->GetInteger() : 0;
- FX_DWORD dwMaxLen = FPDF_GetFieldAttr(pAnnotDict, "MaxLen") ? FPDF_GetFieldAttr(pAnnotDict, "MaxLen")->GetInteger() : 0;
- CPVT_FontMap map(pDoc, pStreamDict ? pStreamDict->GetDict("Resources") : NULL , pDefFont, sFontName.Right(sFontName.GetLength() - 1));
- CPVT_Provider prd(&map);
- CPDF_VariableText vt;
- vt.SetProvider(&prd);
- vt.SetPlateRect(rcBody);
- vt.SetAlignment(nAlign);
- if (IsFloatZero(fFontSize)) {
- vt.SetAutoFontSize(TRUE);
- } else {
- vt.SetFontSize(fFontSize);
- }
- FX_BOOL bMultiLine = (dwFlags >> 12) & 1;
- if (bMultiLine) {
- vt.SetMultiLine(TRUE);
- vt.SetAutoReturn(TRUE);
- }
- FX_WORD subWord = 0;
- if ((dwFlags >> 13) & 1) {
- subWord = '*';
- vt.SetPasswordChar(subWord);
- }
- FX_BOOL bCharArray = (dwFlags >> 24) & 1;
- if (bCharArray) {
- vt.SetCharArray(dwMaxLen);
- } else {
- vt.SetLimitChar(dwMaxLen);
- }
- vt.Initialize();
- vt.SetText(swValue.c_str());
- vt.RearrangeAll();
- CPDF_Rect rcContent = vt.GetContentRect();
- CPDF_Point ptOffset(0.0f, 0.0f);
- if (!bMultiLine) {
- ptOffset = CPDF_Point(0.0f, (rcContent.Height() - rcBody.Height()) / 2.0f);
- }
- CFX_ByteString sBody = CPVT_GenerateAP::GenerateEditAP(&map, vt.GetIterator(), ptOffset, !bCharArray, subWord);
- if (sBody.GetLength() > 0) {
- sAppStream << "/Tx BMC\n" << "q\n";
- if (rcContent.Width() > rcBody.Width() ||
- rcContent.Height() > rcBody.Height()) {
- sAppStream << rcBody.left << " " << rcBody.bottom << " "
- << rcBody.Width() << " " << rcBody.Height() << " re\nW\nn\n";
- }
- sAppStream << "BT\n" << CPVT_GenerateAP::GenerateColorAP(crText, TRUE) << sBody << "ET\n" << "Q\nEMC\n";
- }
- }
+ sAppStream << "BT\n" << CPVT_GenerateAP::GenerateColorAP(crText, TRUE)
+ << sBody << "ET\n"
+ << "Q\nEMC\n";
+ }
+ } break;
+ case 1: {
+ CFX_WideString swValue =
+ FPDF_GetFieldAttr(pAnnotDict, "V")
+ ? FPDF_GetFieldAttr(pAnnotDict, "V")->GetUnicodeText()
+ : CFX_WideString();
+ CPVT_FontMap map(pDoc,
+ pStreamDict ? pStreamDict->GetDict("Resources") : NULL,
+ pDefFont, sFontName.Right(sFontName.GetLength() - 1));
+ CPVT_Provider prd(&map);
+ CPDF_VariableText vt;
+ vt.SetProvider(&prd);
+ CPDF_Rect rcButton = rcBody;
+ rcButton.left = rcButton.right - 13;
+ rcButton.Normalize();
+ CPDF_Rect rcEdit = rcBody;
+ rcEdit.right = rcButton.left;
+ rcEdit.Normalize();
+ vt.SetPlateRect(rcEdit);
+ if (IsFloatZero(fFontSize)) {
+ vt.SetAutoFontSize(TRUE);
+ } else {
+ vt.SetFontSize(fFontSize);
+ }
+ vt.Initialize();
+ vt.SetText(swValue.c_str());
+ vt.RearrangeAll();
+ CPDF_Rect rcContent = vt.GetContentRect();
+ CPDF_Point ptOffset =
+ CPDF_Point(0.0f, (rcContent.Height() - rcEdit.Height()) / 2.0f);
+ CFX_ByteString sEdit = CPVT_GenerateAP::GenerateEditAP(
+ &map, vt.GetIterator(), ptOffset, TRUE, 0);
+ if (sEdit.GetLength() > 0) {
+ sAppStream << "/Tx BMC\n"
+ << "q\n";
+ sAppStream << rcEdit.left << " " << rcEdit.bottom << " "
+ << rcEdit.Width() << " " << rcEdit.Height() << " re\nW\nn\n";
+ sAppStream << "BT\n" << CPVT_GenerateAP::GenerateColorAP(crText, TRUE)
+ << sEdit << "ET\n"
+ << "Q\nEMC\n";
+ }
+ CFX_ByteString sButton = CPVT_GenerateAP::GenerateColorAP(
+ CPVT_Color(CT_RGB, 220.0f / 255.0f, 220.0f / 255.0f, 220.0f / 255.0f),
+ TRUE);
+ if (sButton.GetLength() > 0 && !rcButton.IsEmpty()) {
+ sAppStream << "q\n" << sButton;
+ sAppStream << rcButton.left << " " << rcButton.bottom << " "
+ << rcButton.Width() << " " << rcButton.Height() << " re f\n";
+ sAppStream << "Q\n";
+ CFX_ByteString sButtonBorder = CPVT_GenerateAP::GenerateBorderAP(
+ rcButton, 2, CPVT_Color(CT_GRAY, 0), CPVT_Color(CT_GRAY, 1),
+ CPVT_Color(CT_GRAY, 0.5), PBS_BEVELED, CPVT_Dash(3, 0, 0));
+ if (sButtonBorder.GetLength() > 0) {
+ sAppStream << "q\n" << sButtonBorder << "Q\n";
+ }
+ CPDF_Point ptCenter = CPDF_Point((rcButton.left + rcButton.right) / 2,
+ (rcButton.top + rcButton.bottom) / 2);
+ if (IsFloatBigger(rcButton.Width(), 6) &&
+ IsFloatBigger(rcButton.Height(), 6)) {
+ sAppStream << "q\n"
+ << " 0 g\n";
+ sAppStream << ptCenter.x - 3 << " " << ptCenter.y + 1.5f << " m\n";
+ sAppStream << ptCenter.x + 3 << " " << ptCenter.y + 1.5f << " l\n";
+ sAppStream << ptCenter.x << " " << ptCenter.y - 1.5f << " l\n";
+ sAppStream << ptCenter.x - 3 << " " << ptCenter.y + 1.5f << " l f\n";
+ sAppStream << sButton << "Q\n";
+ }
+ }
+ } break;
+ case 2: {
+ CPVT_FontMap map(pDoc,
+ pStreamDict ? pStreamDict->GetDict("Resources") : NULL,
+ pDefFont, sFontName.Right(sFontName.GetLength() - 1));
+ CPVT_Provider prd(&map);
+ CPDF_Array* pOpts = FPDF_GetFieldAttr(pAnnotDict, "Opt")
+ ? FPDF_GetFieldAttr(pAnnotDict, "Opt")->GetArray()
+ : NULL;
+ CPDF_Array* pSels = FPDF_GetFieldAttr(pAnnotDict, "I")
+ ? FPDF_GetFieldAttr(pAnnotDict, "I")->GetArray()
+ : NULL;
+ int32_t nTop = FPDF_GetFieldAttr(pAnnotDict, "TI")
+ ? FPDF_GetFieldAttr(pAnnotDict, "TI")->GetInteger()
+ : 0;
+ CFX_ByteTextBuf sBody;
+ if (pOpts) {
+ FX_FLOAT fy = rcBody.top;
+ for (int32_t i = nTop, sz = pOpts->GetCount(); i < sz; i++) {
+ if (IsFloatSmaller(fy, rcBody.bottom)) {
break;
- case 1: {
- CFX_WideString swValue = FPDF_GetFieldAttr(pAnnotDict, "V") ? FPDF_GetFieldAttr(pAnnotDict, "V")->GetUnicodeText() : CFX_WideString();
- CPVT_FontMap map(pDoc, pStreamDict ? pStreamDict->GetDict("Resources"):NULL, pDefFont, sFontName.Right(sFontName.GetLength() - 1));
- CPVT_Provider prd(&map);
- CPDF_VariableText vt;
- vt.SetProvider(&prd);
- CPDF_Rect rcButton = rcBody;
- rcButton.left = rcButton.right - 13;
- rcButton.Normalize();
- CPDF_Rect rcEdit = rcBody;
- rcEdit.right = rcButton.left;
- rcEdit.Normalize();
- vt.SetPlateRect(rcEdit);
- if (IsFloatZero(fFontSize)) {
- vt.SetAutoFontSize(TRUE);
- } else {
- vt.SetFontSize(fFontSize);
- }
- vt.Initialize();
- vt.SetText(swValue.c_str());
- vt.RearrangeAll();
- CPDF_Rect rcContent = vt.GetContentRect();
- CPDF_Point ptOffset = CPDF_Point(0.0f, (rcContent.Height() - rcEdit.Height()) / 2.0f);
- CFX_ByteString sEdit = CPVT_GenerateAP::GenerateEditAP(&map, vt.GetIterator(), ptOffset, TRUE, 0);
- if (sEdit.GetLength() > 0) {
- sAppStream << "/Tx BMC\n" << "q\n";
- sAppStream << rcEdit.left << " " << rcEdit.bottom << " "
- << rcEdit.Width() << " " << rcEdit.Height() << " re\nW\nn\n";
- sAppStream << "BT\n" << CPVT_GenerateAP::GenerateColorAP(crText, TRUE) << sEdit << "ET\n" << "Q\nEMC\n";
- }
- CFX_ByteString sButton = CPVT_GenerateAP::GenerateColorAP(CPVT_Color(CT_RGB, 220.0f / 255.0f, 220.0f / 255.0f, 220.0f / 255.0f), TRUE);
- if (sButton.GetLength() > 0 && !rcButton.IsEmpty()) {
- sAppStream << "q\n" << sButton;
- sAppStream << rcButton.left << " " << rcButton.bottom << " "
- << rcButton.Width() << " " << rcButton.Height() << " re f\n";
- sAppStream << "Q\n";
- CFX_ByteString sButtonBorder = CPVT_GenerateAP::GenerateBorderAP(rcButton, 2, CPVT_Color(CT_GRAY, 0), CPVT_Color(CT_GRAY, 1), CPVT_Color(CT_GRAY, 0.5), PBS_BEVELED, CPVT_Dash(3, 0, 0));
- if (sButtonBorder.GetLength() > 0) {
- sAppStream << "q\n" << sButtonBorder << "Q\n";
- }
- CPDF_Point ptCenter = CPDF_Point((rcButton.left + rcButton.right) / 2, (rcButton.top + rcButton.bottom) / 2);
- if (IsFloatBigger(rcButton.Width(), 6) && IsFloatBigger(rcButton.Height(), 6)) {
- sAppStream << "q\n" << " 0 g\n";
- sAppStream << ptCenter.x - 3 << " " << ptCenter.y + 1.5f << " m\n";
- sAppStream << ptCenter.x + 3 << " " << ptCenter.y + 1.5f << " l\n";
- sAppStream << ptCenter.x << " " << ptCenter.y - 1.5f << " l\n";
- sAppStream << ptCenter.x - 3 << " " << ptCenter.y + 1.5f << " l f\n";
- sAppStream << sButton << "Q\n";
- }
- }
+ }
+ if (CPDF_Object* pOpt = pOpts->GetElementValue(i)) {
+ CFX_WideString swItem;
+ if (pOpt->GetType() == PDFOBJ_STRING) {
+ swItem = pOpt->GetUnicodeText();
+ } else if (pOpt->GetType() == PDFOBJ_ARRAY) {
+ swItem =
+ ((CPDF_Array*)pOpt)->GetElementValue(1)->GetUnicodeText();
}
- break;
- case 2: {
- CPVT_FontMap map(pDoc, pStreamDict ? pStreamDict->GetDict("Resources"):NULL, pDefFont, sFontName.Right(sFontName.GetLength() - 1));
- CPVT_Provider prd(&map);
- CPDF_Array * pOpts = FPDF_GetFieldAttr(pAnnotDict, "Opt") ? FPDF_GetFieldAttr(pAnnotDict, "Opt")->GetArray() : NULL;
- CPDF_Array * pSels = FPDF_GetFieldAttr(pAnnotDict, "I") ? FPDF_GetFieldAttr(pAnnotDict, "I")->GetArray() : NULL;
- int32_t nTop = FPDF_GetFieldAttr(pAnnotDict, "TI") ? FPDF_GetFieldAttr(pAnnotDict, "TI")->GetInteger() : 0;
- CFX_ByteTextBuf sBody;
- if (pOpts) {
- FX_FLOAT fy = rcBody.top;
- for (int32_t i = nTop, sz = pOpts->GetCount(); i < sz; i++) {
- if (IsFloatSmaller(fy, rcBody.bottom)) {
- break;
- }
- if (CPDF_Object* pOpt = pOpts->GetElementValue(i)) {
- CFX_WideString swItem;
- if (pOpt->GetType() == PDFOBJ_STRING) {
- swItem = pOpt->GetUnicodeText();
- } else if (pOpt->GetType() == PDFOBJ_ARRAY) {
- swItem = ((CPDF_Array*)pOpt)->GetElementValue(1)->GetUnicodeText();
- }
- FX_BOOL bSelected = FALSE;
- if (pSels) {
- for (FX_DWORD s = 0, ssz = pSels->GetCount(); s < ssz; s++) {
- if (i == pSels->GetInteger(s)) {
- bSelected = TRUE;
- break;
- }
- }
- }
- CPDF_VariableText vt;
- vt.SetProvider(&prd);
- vt.SetPlateRect(CPDF_Rect(rcBody.left, 0.0f, rcBody.right, 0.0f));
- if (IsFloatZero(fFontSize)) {
- vt.SetFontSize(12.0f);
- } else {
- vt.SetFontSize(fFontSize);
- }
- vt.Initialize();
- vt.SetText(swItem.c_str());
- vt.RearrangeAll();
- FX_FLOAT fItemHeight = vt.GetContentRect().Height();
- if (bSelected) {
- CPDF_Rect rcItem = CPDF_Rect(rcBody.left, fy - fItemHeight, rcBody.right, fy);
- sBody << "q\n" << CPVT_GenerateAP::GenerateColorAP(CPVT_Color(CT_RGB, 0, 51.0f / 255.0f, 113.0f / 255.0f), TRUE)
- << rcItem.left << " " << rcItem.bottom << " " << rcItem.Width() << " " << rcItem.Height() << " re f\n" << "Q\n";
- sBody << "BT\n" << CPVT_GenerateAP::GenerateColorAP(CPVT_Color(CT_GRAY, 1), TRUE) << CPVT_GenerateAP::GenerateEditAP(&map, vt.GetIterator(), CPDF_Point(0.0f, fy), TRUE, 0) << "ET\n";
- } else {
- sBody << "BT\n" << CPVT_GenerateAP::GenerateColorAP(crText, TRUE) << CPVT_GenerateAP::GenerateEditAP(&map, vt.GetIterator(), CPDF_Point(0.0f, fy), TRUE, 0) << "ET\n";
- }
- fy -= fItemHeight;
- }
- }
- }
- if (sBody.GetSize() > 0) {
- sAppStream << "/Tx BMC\n" << "q\n";
- sAppStream << rcBody.left << " " << rcBody.bottom << " "
- << rcBody.Width() << " " << rcBody.Height() << " re\nW\nn\n";
- sAppStream << sBody.GetByteString() << "Q\nEMC\n";
+ FX_BOOL bSelected = FALSE;
+ if (pSels) {
+ for (FX_DWORD s = 0, ssz = pSels->GetCount(); s < ssz; s++) {
+ if (i == pSels->GetInteger(s)) {
+ bSelected = TRUE;
+ break;
}
+ }
}
- break;
- }
- if (pNormalStream) {
- pNormalStream->SetData((uint8_t*)sAppStream.GetBuffer(), sAppStream.GetSize(), FALSE, FALSE);
- pStreamDict = pNormalStream->GetDict();
- if (pStreamDict) {
- pStreamDict->SetAtMatrix("Matrix", matrix);
- pStreamDict->SetAtRect("BBox", rcBBox);
- CPDF_Dictionary* pStreamResList = pStreamDict->GetDict("Resources");
- if (pStreamResList) {
- CPDF_Dictionary* pStreamResFontList = pStreamResList->GetDict("Font");
- if (!pStreamResFontList) {
- pStreamResFontList = CPDF_Dictionary::Create();
- if (pStreamResFontList == NULL) {
- return FALSE;
- }
- pStreamResList->SetAt("Font", pStreamResFontList);
- }
- if (!pStreamResFontList->KeyExist(sFontName)) {
- pStreamResFontList->SetAtReference(sFontName, pDoc, pFontDict);
- }
+ CPDF_VariableText vt;
+ vt.SetProvider(&prd);
+ vt.SetPlateRect(CPDF_Rect(rcBody.left, 0.0f, rcBody.right, 0.0f));
+ if (IsFloatZero(fFontSize)) {
+ vt.SetFontSize(12.0f);
} else {
- pStreamDict->SetAt("Resources", pFormDict->GetDict("DR")->Clone());
- pStreamResList = pStreamDict->GetDict("Resources");
+ vt.SetFontSize(fFontSize);
}
+ vt.Initialize();
+ vt.SetText(swItem.c_str());
+ vt.RearrangeAll();
+ FX_FLOAT fItemHeight = vt.GetContentRect().Height();
+ if (bSelected) {
+ CPDF_Rect rcItem =
+ CPDF_Rect(rcBody.left, fy - fItemHeight, rcBody.right, fy);
+ sBody << "q\n" << CPVT_GenerateAP::GenerateColorAP(
+ CPVT_Color(CT_RGB, 0, 51.0f / 255.0f,
+ 113.0f / 255.0f),
+ TRUE)
+ << rcItem.left << " " << rcItem.bottom << " "
+ << rcItem.Width() << " " << rcItem.Height() << " re f\n"
+ << "Q\n";
+ sBody << "BT\n" << CPVT_GenerateAP::GenerateColorAP(
+ CPVT_Color(CT_GRAY, 1), TRUE)
+ << CPVT_GenerateAP::GenerateEditAP(&map, vt.GetIterator(),
+ CPDF_Point(0.0f, fy),
+ TRUE, 0)
+ << "ET\n";
+ } else {
+ sBody << "BT\n" << CPVT_GenerateAP::GenerateColorAP(crText, TRUE)
+ << CPVT_GenerateAP::GenerateEditAP(&map, vt.GetIterator(),
+ CPDF_Point(0.0f, fy),
+ TRUE, 0)
+ << "ET\n";
+ }
+ fy -= fItemHeight;
+ }
+ }
+ }
+ if (sBody.GetSize() > 0) {
+ sAppStream << "/Tx BMC\n"
+ << "q\n";
+ sAppStream << rcBody.left << " " << rcBody.bottom << " "
+ << rcBody.Width() << " " << rcBody.Height() << " re\nW\nn\n";
+ sAppStream << sBody.GetByteString() << "Q\nEMC\n";
+ }
+ } break;
+ }
+ if (pNormalStream) {
+ pNormalStream->SetData((uint8_t*)sAppStream.GetBuffer(),
+ sAppStream.GetSize(), FALSE, FALSE);
+ pStreamDict = pNormalStream->GetDict();
+ if (pStreamDict) {
+ pStreamDict->SetAtMatrix("Matrix", matrix);
+ pStreamDict->SetAtRect("BBox", rcBBox);
+ CPDF_Dictionary* pStreamResList = pStreamDict->GetDict("Resources");
+ if (pStreamResList) {
+ CPDF_Dictionary* pStreamResFontList = pStreamResList->GetDict("Font");
+ if (!pStreamResFontList) {
+ pStreamResFontList = CPDF_Dictionary::Create();
+ if (pStreamResFontList == NULL) {
+ return FALSE;
+ }
+ pStreamResList->SetAt("Font", pStreamResFontList);
+ }
+ if (!pStreamResFontList->KeyExist(sFontName)) {
+ pStreamResFontList->SetAtReference(sFontName, pDoc, pFontDict);
}
+ } else {
+ pStreamDict->SetAt("Resources", pFormDict->GetDict("DR")->Clone());
+ pStreamResList = pStreamDict->GetDict("Resources");
+ }
}
- return TRUE;
+ }
+ return TRUE;
}
-FX_BOOL CPVT_GenerateAP::GenerateTextFieldAP(CPDF_Document* pDoc, CPDF_Dictionary* pAnnotDict)
-{
- return GenerateWidgetAP(pDoc, pAnnotDict, 0);
+FX_BOOL CPVT_GenerateAP::GenerateTextFieldAP(CPDF_Document* pDoc,
+ CPDF_Dictionary* pAnnotDict) {
+ return GenerateWidgetAP(pDoc, pAnnotDict, 0);
}
-FX_BOOL CPVT_GenerateAP::GenerateComboBoxAP(CPDF_Document* pDoc, CPDF_Dictionary* pAnnotDict)
-{
- return GenerateWidgetAP(pDoc, pAnnotDict, 1);
+FX_BOOL CPVT_GenerateAP::GenerateComboBoxAP(CPDF_Document* pDoc,
+ CPDF_Dictionary* pAnnotDict) {
+ return GenerateWidgetAP(pDoc, pAnnotDict, 1);
}
-FX_BOOL CPVT_GenerateAP::GenerateListBoxAP(CPDF_Document* pDoc, CPDF_Dictionary* pAnnotDict)
-{
- return GenerateWidgetAP(pDoc, pAnnotDict, 2);
+FX_BOOL CPVT_GenerateAP::GenerateListBoxAP(CPDF_Document* pDoc,
+ CPDF_Dictionary* pAnnotDict) {
+ return GenerateWidgetAP(pDoc, pAnnotDict, 2);
}
-CFX_ByteString CPVT_GenerateAP::GenerateEditAP(IPVT_FontMap * pFontMap, IPDF_VariableText_Iterator* pIterator, const CPDF_Point & ptOffset, FX_BOOL bContinuous, FX_WORD SubWord, const CPVT_WordRange * pVisible)
-{
- CFX_ByteTextBuf sEditStream, sLineStream, sWords;
- CPDF_Point ptOld(0.0f, 0.0f), ptNew(0.0f, 0.0f);
- int32_t nCurFontIndex = -1;
- if (pIterator) {
- if (pVisible) {
- pIterator->SetAt(pVisible->BeginPos);
- } else {
- pIterator->SetAt(0);
- }
- CPVT_WordPlace oldplace;
- while (pIterator->NextWord()) {
- CPVT_WordPlace place = pIterator->GetAt();
- if (pVisible && place.WordCmp(pVisible->EndPos) > 0) {
- break;
- }
- if (bContinuous) {
- if (place.LineCmp(oldplace) != 0) {
- if (sWords.GetSize() > 0) {
- sLineStream << GetWordRenderString(sWords.GetByteString());
- sEditStream << sLineStream;
- sLineStream.Clear();
- sWords.Clear();
- }
- CPVT_Word word;
- if (pIterator->GetWord(word)) {
- ptNew = CPDF_Point(word.ptWord.x + ptOffset.x, word.ptWord.y + ptOffset.y);
- } else {
- CPVT_Line line;
- pIterator->GetLine(line);
- ptNew = CPDF_Point(line.ptLine.x + ptOffset.x, line.ptLine.y + ptOffset.y);
- }
- if (ptNew.x != ptOld.x || ptNew.y != ptOld.y) {
- sLineStream << ptNew.x - ptOld.x << " " << ptNew.y - ptOld.y << " Td\n";
- ptOld = ptNew;
- }
- }
- CPVT_Word word;
- if (pIterator->GetWord(word)) {
- if (word.nFontIndex != nCurFontIndex) {
- if (sWords.GetSize() > 0) {
- sLineStream << GetWordRenderString(sWords.GetByteString());
- sWords.Clear();
- }
- sLineStream << GetFontSetString(pFontMap, word.nFontIndex, word.fFontSize);
- nCurFontIndex = word.nFontIndex;
- }
- sWords << GetPDFWordString(pFontMap, nCurFontIndex, word.Word, SubWord);
- }
- oldplace = place;
- } else {
- CPVT_Word word;
- if (pIterator->GetWord(word)) {
- ptNew = CPDF_Point(word.ptWord.x + ptOffset.x, word.ptWord.y + ptOffset.y);
- if (ptNew.x != ptOld.x || ptNew.y != ptOld.y) {
- sEditStream << ptNew.x - ptOld.x << " " << ptNew.y - ptOld.y << " Td\n";
- ptOld = ptNew;
- }
- if (word.nFontIndex != nCurFontIndex) {
- sEditStream << GetFontSetString(pFontMap, word.nFontIndex, word.fFontSize);
- nCurFontIndex = word.nFontIndex;
- }
- sEditStream << GetWordRenderString(GetPDFWordString(pFontMap, nCurFontIndex, word.Word, SubWord));
- }
- }
- }
- if (sWords.GetSize() > 0) {
+CFX_ByteString CPVT_GenerateAP::GenerateEditAP(
+ IPVT_FontMap* pFontMap,
+ IPDF_VariableText_Iterator* pIterator,
+ const CPDF_Point& ptOffset,
+ FX_BOOL bContinuous,
+ FX_WORD SubWord,
+ const CPVT_WordRange* pVisible) {
+ CFX_ByteTextBuf sEditStream, sLineStream, sWords;
+ CPDF_Point ptOld(0.0f, 0.0f), ptNew(0.0f, 0.0f);
+ int32_t nCurFontIndex = -1;
+ if (pIterator) {
+ if (pVisible) {
+ pIterator->SetAt(pVisible->BeginPos);
+ } else {
+ pIterator->SetAt(0);
+ }
+ CPVT_WordPlace oldplace;
+ while (pIterator->NextWord()) {
+ CPVT_WordPlace place = pIterator->GetAt();
+ if (pVisible && place.WordCmp(pVisible->EndPos) > 0) {
+ break;
+ }
+ if (bContinuous) {
+ if (place.LineCmp(oldplace) != 0) {
+ if (sWords.GetSize() > 0) {
sLineStream << GetWordRenderString(sWords.GetByteString());
sEditStream << sLineStream;
+ sLineStream.Clear();
sWords.Clear();
+ }
+ CPVT_Word word;
+ if (pIterator->GetWord(word)) {
+ ptNew = CPDF_Point(word.ptWord.x + ptOffset.x,
+ word.ptWord.y + ptOffset.y);
+ } else {
+ CPVT_Line line;
+ pIterator->GetLine(line);
+ ptNew = CPDF_Point(line.ptLine.x + ptOffset.x,
+ line.ptLine.y + ptOffset.y);
+ }
+ if (ptNew.x != ptOld.x || ptNew.y != ptOld.y) {
+ sLineStream << ptNew.x - ptOld.x << " " << ptNew.y - ptOld.y
+ << " Td\n";
+ ptOld = ptNew;
+ }
+ }
+ CPVT_Word word;
+ if (pIterator->GetWord(word)) {
+ if (word.nFontIndex != nCurFontIndex) {
+ if (sWords.GetSize() > 0) {
+ sLineStream << GetWordRenderString(sWords.GetByteString());
+ sWords.Clear();
+ }
+ sLineStream << GetFontSetString(pFontMap, word.nFontIndex,
+ word.fFontSize);
+ nCurFontIndex = word.nFontIndex;
+ }
+ sWords << GetPDFWordString(pFontMap, nCurFontIndex, word.Word,
+ SubWord);
}
+ oldplace = place;
+ } else {
+ CPVT_Word word;
+ if (pIterator->GetWord(word)) {
+ ptNew = CPDF_Point(word.ptWord.x + ptOffset.x,
+ word.ptWord.y + ptOffset.y);
+ if (ptNew.x != ptOld.x || ptNew.y != ptOld.y) {
+ sEditStream << ptNew.x - ptOld.x << " " << ptNew.y - ptOld.y
+ << " Td\n";
+ ptOld = ptNew;
+ }
+ if (word.nFontIndex != nCurFontIndex) {
+ sEditStream << GetFontSetString(pFontMap, word.nFontIndex,
+ word.fFontSize);
+ nCurFontIndex = word.nFontIndex;
+ }
+ sEditStream << GetWordRenderString(
+ GetPDFWordString(pFontMap, nCurFontIndex, word.Word, SubWord));
+ }
+ }
+ }
+ if (sWords.GetSize() > 0) {
+ sLineStream << GetWordRenderString(sWords.GetByteString());
+ sEditStream << sLineStream;
+ sWords.Clear();
}
- return sEditStream.GetByteString();
+ }
+ return sEditStream.GetByteString();
}
-CFX_ByteString CPVT_GenerateAP::GenerateBorderAP(const CPDF_Rect & rect, FX_FLOAT fWidth,
- const CPVT_Color & color, const CPVT_Color & crLeftTop, const CPVT_Color & crRightBottom,
- int32_t nStyle, const CPVT_Dash & dash)
-{
- CFX_ByteTextBuf sAppStream;
- CFX_ByteString sColor;
- FX_FLOAT fLeft = rect.left;
- FX_FLOAT fRight = rect.right;
- FX_FLOAT fTop = rect.top;
- FX_FLOAT fBottom = rect.bottom;
- if (fWidth > 0.0f) {
- FX_FLOAT fHalfWidth = fWidth / 2.0f;
- switch (nStyle) {
- default:
- case PBS_SOLID:
- sColor = GenerateColorAP(color, TRUE);
- if (sColor.GetLength() > 0) {
- sAppStream << sColor;
- sAppStream << fLeft << " " << fBottom << " " << fRight - fLeft << " " << fTop - fBottom << " re\n";
- sAppStream << fLeft + fWidth << " " << fBottom + fWidth << " "
- << fRight - fLeft - fWidth * 2 << " " << fTop - fBottom - fWidth * 2 << " re\n";
- sAppStream << "f*\n";
- }
- break;
- case PBS_DASH:
- sColor = GenerateColorAP(color, FALSE);
- if (sColor.GetLength() > 0) {
- sAppStream << sColor;
- sAppStream << fWidth << " w" << " [" << dash.nDash << " " << dash.nGap << "] " << dash.nPhase << " d\n";
- sAppStream << fLeft + fWidth / 2 << " " << fBottom + fWidth / 2 << " m\n";
- sAppStream << fLeft + fWidth / 2 << " " << fTop - fWidth / 2 << " l\n";
- sAppStream << fRight - fWidth / 2 << " " << fTop - fWidth / 2 << " l\n";
- sAppStream << fRight - fWidth / 2 << " " << fBottom + fWidth / 2 << " l\n";
- sAppStream << fLeft + fWidth / 2 << " " << fBottom + fWidth / 2 << " l S\n";
- }
- break;
- case PBS_BEVELED:
- case PBS_INSET:
- sColor = GenerateColorAP(crLeftTop, TRUE);
- if (sColor.GetLength() > 0) {
- sAppStream << sColor;
- sAppStream << fLeft + fHalfWidth << " " << fBottom + fHalfWidth << " m\n";
- sAppStream << fLeft + fHalfWidth << " " << fTop - fHalfWidth << " l\n";
- sAppStream << fRight - fHalfWidth << " " << fTop - fHalfWidth << " l\n";
- sAppStream << fRight - fHalfWidth * 2 << " " << fTop - fHalfWidth * 2 << " l\n";
- sAppStream << fLeft + fHalfWidth * 2 << " " << fTop - fHalfWidth * 2 << " l\n";
- sAppStream << fLeft + fHalfWidth * 2 << " " << fBottom + fHalfWidth * 2 << " l f\n";
- }
- sColor = GenerateColorAP(crRightBottom, TRUE);
- if (sColor.GetLength() > 0) {
- sAppStream << sColor;
- sAppStream << fRight - fHalfWidth << " " << fTop - fHalfWidth << " m\n";
- sAppStream << fRight - fHalfWidth << " " << fBottom + fHalfWidth << " l\n";
- sAppStream << fLeft + fHalfWidth << " " << fBottom + fHalfWidth << " l\n";
- sAppStream << fLeft + fHalfWidth * 2 << " " << fBottom + fHalfWidth * 2 << " l\n";
- sAppStream << fRight - fHalfWidth * 2 << " " << fBottom + fHalfWidth * 2 << " l\n";
- sAppStream << fRight - fHalfWidth * 2 << " " << fTop - fHalfWidth * 2 << " l f\n";
- }
- sColor = GenerateColorAP(color, TRUE);
- if (sColor.GetLength() > 0) {
- sAppStream << sColor;
- sAppStream << fLeft << " " << fBottom << " " << fRight - fLeft << " " << fTop - fBottom << " re\n";
- sAppStream << fLeft + fHalfWidth << " " << fBottom + fHalfWidth << " "
- << fRight - fLeft - fHalfWidth * 2 << " " << fTop - fBottom - fHalfWidth * 2 << " re f*\n";
- }
- break;
- case PBS_UNDERLINED:
- sColor = GenerateColorAP(color, FALSE);
- if (sColor.GetLength() > 0) {
- sAppStream << sColor;
- sAppStream << fWidth << " w\n";
- sAppStream << fLeft << " " << fBottom + fWidth / 2 << " m\n";
- sAppStream << fRight << " " << fBottom + fWidth / 2 << " l S\n";
- }
- break;
+CFX_ByteString CPVT_GenerateAP::GenerateBorderAP(
+ const CPDF_Rect& rect,
+ FX_FLOAT fWidth,
+ const CPVT_Color& color,
+ const CPVT_Color& crLeftTop,
+ const CPVT_Color& crRightBottom,
+ int32_t nStyle,
+ const CPVT_Dash& dash) {
+ CFX_ByteTextBuf sAppStream;
+ CFX_ByteString sColor;
+ FX_FLOAT fLeft = rect.left;
+ FX_FLOAT fRight = rect.right;
+ FX_FLOAT fTop = rect.top;
+ FX_FLOAT fBottom = rect.bottom;
+ if (fWidth > 0.0f) {
+ FX_FLOAT fHalfWidth = fWidth / 2.0f;
+ switch (nStyle) {
+ default:
+ case PBS_SOLID:
+ sColor = GenerateColorAP(color, TRUE);
+ if (sColor.GetLength() > 0) {
+ sAppStream << sColor;
+ sAppStream << fLeft << " " << fBottom << " " << fRight - fLeft << " "
+ << fTop - fBottom << " re\n";
+ sAppStream << fLeft + fWidth << " " << fBottom + fWidth << " "
+ << fRight - fLeft - fWidth * 2 << " "
+ << fTop - fBottom - fWidth * 2 << " re\n";
+ sAppStream << "f*\n";
+ }
+ break;
+ case PBS_DASH:
+ sColor = GenerateColorAP(color, FALSE);
+ if (sColor.GetLength() > 0) {
+ sAppStream << sColor;
+ sAppStream << fWidth << " w"
+ << " [" << dash.nDash << " " << dash.nGap << "] "
+ << dash.nPhase << " d\n";
+ sAppStream << fLeft + fWidth / 2 << " " << fBottom + fWidth / 2
+ << " m\n";
+ sAppStream << fLeft + fWidth / 2 << " " << fTop - fWidth / 2
+ << " l\n";
+ sAppStream << fRight - fWidth / 2 << " " << fTop - fWidth / 2
+ << " l\n";
+ sAppStream << fRight - fWidth / 2 << " " << fBottom + fWidth / 2
+ << " l\n";
+ sAppStream << fLeft + fWidth / 2 << " " << fBottom + fWidth / 2
+ << " l S\n";
}
+ break;
+ case PBS_BEVELED:
+ case PBS_INSET:
+ sColor = GenerateColorAP(crLeftTop, TRUE);
+ if (sColor.GetLength() > 0) {
+ sAppStream << sColor;
+ sAppStream << fLeft + fHalfWidth << " " << fBottom + fHalfWidth
+ << " m\n";
+ sAppStream << fLeft + fHalfWidth << " " << fTop - fHalfWidth
+ << " l\n";
+ sAppStream << fRight - fHalfWidth << " " << fTop - fHalfWidth
+ << " l\n";
+ sAppStream << fRight - fHalfWidth * 2 << " " << fTop - fHalfWidth * 2
+ << " l\n";
+ sAppStream << fLeft + fHalfWidth * 2 << " " << fTop - fHalfWidth * 2
+ << " l\n";
+ sAppStream << fLeft + fHalfWidth * 2 << " "
+ << fBottom + fHalfWidth * 2 << " l f\n";
+ }
+ sColor = GenerateColorAP(crRightBottom, TRUE);
+ if (sColor.GetLength() > 0) {
+ sAppStream << sColor;
+ sAppStream << fRight - fHalfWidth << " " << fTop - fHalfWidth
+ << " m\n";
+ sAppStream << fRight - fHalfWidth << " " << fBottom + fHalfWidth
+ << " l\n";
+ sAppStream << fLeft + fHalfWidth << " " << fBottom + fHalfWidth
+ << " l\n";
+ sAppStream << fLeft + fHalfWidth * 2 << " "
+ << fBottom + fHalfWidth * 2 << " l\n";
+ sAppStream << fRight - fHalfWidth * 2 << " "
+ << fBottom + fHalfWidth * 2 << " l\n";
+ sAppStream << fRight - fHalfWidth * 2 << " " << fTop - fHalfWidth * 2
+ << " l f\n";
+ }
+ sColor = GenerateColorAP(color, TRUE);
+ if (sColor.GetLength() > 0) {
+ sAppStream << sColor;
+ sAppStream << fLeft << " " << fBottom << " " << fRight - fLeft << " "
+ << fTop - fBottom << " re\n";
+ sAppStream << fLeft + fHalfWidth << " " << fBottom + fHalfWidth << " "
+ << fRight - fLeft - fHalfWidth * 2 << " "
+ << fTop - fBottom - fHalfWidth * 2 << " re f*\n";
+ }
+ break;
+ case PBS_UNDERLINED:
+ sColor = GenerateColorAP(color, FALSE);
+ if (sColor.GetLength() > 0) {
+ sAppStream << sColor;
+ sAppStream << fWidth << " w\n";
+ sAppStream << fLeft << " " << fBottom + fWidth / 2 << " m\n";
+ sAppStream << fRight << " " << fBottom + fWidth / 2 << " l S\n";
+ }
+ break;
}
- return sAppStream.GetByteString();
+ }
+ return sAppStream.GetByteString();
}
-CFX_ByteString CPVT_GenerateAP::GenerateColorAP(const CPVT_Color & color, const FX_BOOL & bFillOrStroke)
-{
- CFX_ByteTextBuf sColorStream;
- switch (color.nColorType) {
- case CT_RGB:
- sColorStream << color.fColor1 << " " << color.fColor2 << " " << color.fColor3 << " "
- << (bFillOrStroke ? "rg" : "RG") << "\n";
- break;
- case CT_GRAY:
- sColorStream << color.fColor1 << " " << (bFillOrStroke ? "g" : "G") << "\n";
- break;
- case CT_CMYK:
- sColorStream << color.fColor1 << " " << color.fColor2 << " " << color.fColor3 << " " << color.fColor4 << " "
- << (bFillOrStroke ? "k" : "K") << "\n";
- break;
- }
- return sColorStream.GetByteString();
+CFX_ByteString CPVT_GenerateAP::GenerateColorAP(const CPVT_Color& color,
+ const FX_BOOL& bFillOrStroke) {
+ CFX_ByteTextBuf sColorStream;
+ switch (color.nColorType) {
+ case CT_RGB:
+ sColorStream << color.fColor1 << " " << color.fColor2 << " "
+ << color.fColor3 << " " << (bFillOrStroke ? "rg" : "RG")
+ << "\n";
+ break;
+ case CT_GRAY:
+ sColorStream << color.fColor1 << " " << (bFillOrStroke ? "g" : "G")
+ << "\n";
+ break;
+ case CT_CMYK:
+ sColorStream << color.fColor1 << " " << color.fColor2 << " "
+ << color.fColor3 << " " << color.fColor4 << " "
+ << (bFillOrStroke ? "k" : "K") << "\n";
+ break;
+ }
+ return sColorStream.GetByteString();
}
diff --git a/core/src/fpdfdoc/doc_basic.cpp b/core/src/fpdfdoc/doc_basic.cpp
index 3ba109b016..39b5788c86 100644
--- a/core/src/fpdfdoc/doc_basic.cpp
+++ b/core/src/fpdfdoc/doc_basic.cpp
@@ -6,566 +6,558 @@
#include "../../include/fpdfdoc/fpdf_doc.h"
const int nMaxRecursion = 32;
-int CPDF_Dest::GetPageIndex(CPDF_Document* pDoc)
-{
- if (m_pObj == NULL || m_pObj->GetType() != PDFOBJ_ARRAY) {
- return 0;
- }
- CPDF_Object* pPage = ((CPDF_Array*)m_pObj)->GetElementValue(0);
- if (pPage == NULL) {
- return 0;
- }
- if (pPage->GetType() == PDFOBJ_NUMBER) {
- return pPage->GetInteger();
- }
- if (pPage->GetType() != PDFOBJ_DICTIONARY) {
- return 0;
- }
- return pDoc->GetPageIndex(pPage->GetObjNum());
+int CPDF_Dest::GetPageIndex(CPDF_Document* pDoc) {
+ if (m_pObj == NULL || m_pObj->GetType() != PDFOBJ_ARRAY) {
+ return 0;
+ }
+ CPDF_Object* pPage = ((CPDF_Array*)m_pObj)->GetElementValue(0);
+ if (pPage == NULL) {
+ return 0;
+ }
+ if (pPage->GetType() == PDFOBJ_NUMBER) {
+ return pPage->GetInteger();
+ }
+ if (pPage->GetType() != PDFOBJ_DICTIONARY) {
+ return 0;
+ }
+ return pDoc->GetPageIndex(pPage->GetObjNum());
}
-FX_DWORD CPDF_Dest::GetPageObjNum()
-{
- if (m_pObj == NULL || m_pObj->GetType() != PDFOBJ_ARRAY) {
- return 0;
- }
- CPDF_Object* pPage = ((CPDF_Array*)m_pObj)->GetElementValue(0);
- if (pPage == NULL) {
- return 0;
- }
- if (pPage->GetType() == PDFOBJ_NUMBER) {
- return pPage->GetInteger();
- }
- if (pPage->GetType() == PDFOBJ_DICTIONARY) {
- return pPage->GetObjNum();
- }
+FX_DWORD CPDF_Dest::GetPageObjNum() {
+ if (m_pObj == NULL || m_pObj->GetType() != PDFOBJ_ARRAY) {
+ return 0;
+ }
+ CPDF_Object* pPage = ((CPDF_Array*)m_pObj)->GetElementValue(0);
+ if (pPage == NULL) {
return 0;
+ }
+ if (pPage->GetType() == PDFOBJ_NUMBER) {
+ return pPage->GetInteger();
+ }
+ if (pPage->GetType() == PDFOBJ_DICTIONARY) {
+ return pPage->GetObjNum();
+ }
+ return 0;
}
-const FX_CHAR* g_sZoomModes[] = {"XYZ", "Fit", "FitH", "FitV", "FitR", "FitB", "FitBH", "FitBV", ""};
-int CPDF_Dest::GetZoomMode()
-{
- if (m_pObj == NULL || m_pObj->GetType() != PDFOBJ_ARRAY) {
- return 0;
- }
- CFX_ByteString mode;
- CPDF_Object* pObj = ((CPDF_Array*)m_pObj)->GetElementValue(1);
- mode = pObj ? pObj->GetString() : CFX_ByteString();
- int i = 0;
- while (g_sZoomModes[i][0] != '\0') {
- if (mode == g_sZoomModes[i]) {
- return i + 1;
- }
- i ++;
- }
+const FX_CHAR* g_sZoomModes[] = {"XYZ", "Fit", "FitH", "FitV", "FitR",
+ "FitB", "FitBH", "FitBV", ""};
+int CPDF_Dest::GetZoomMode() {
+ if (m_pObj == NULL || m_pObj->GetType() != PDFOBJ_ARRAY) {
return 0;
+ }
+ CFX_ByteString mode;
+ CPDF_Object* pObj = ((CPDF_Array*)m_pObj)->GetElementValue(1);
+ mode = pObj ? pObj->GetString() : CFX_ByteString();
+ int i = 0;
+ while (g_sZoomModes[i][0] != '\0') {
+ if (mode == g_sZoomModes[i]) {
+ return i + 1;
+ }
+ i++;
+ }
+ return 0;
}
-FX_FLOAT CPDF_Dest::GetParam(int index)
-{
- if (m_pObj == NULL || m_pObj->GetType() != PDFOBJ_ARRAY) {
- return 0;
- }
- return ((CPDF_Array*)m_pObj)->GetNumber(2 + index);
+FX_FLOAT CPDF_Dest::GetParam(int index) {
+ if (m_pObj == NULL || m_pObj->GetType() != PDFOBJ_ARRAY) {
+ return 0;
+ }
+ return ((CPDF_Array*)m_pObj)->GetNumber(2 + index);
}
-CFX_ByteString CPDF_Dest::GetRemoteName()
-{
- if (m_pObj == NULL) {
- return CFX_ByteString();
- }
- return m_pObj->GetString();
+CFX_ByteString CPDF_Dest::GetRemoteName() {
+ if (m_pObj == NULL) {
+ return CFX_ByteString();
+ }
+ return m_pObj->GetString();
}
-CPDF_NameTree::CPDF_NameTree(CPDF_Document* pDoc, const CFX_ByteStringC& category)
-{
- if (pDoc->GetRoot() && pDoc->GetRoot()->GetDict(FX_BSTRC("Names")))
- m_pRoot = pDoc->GetRoot()->GetDict(FX_BSTRC("Names"))->GetDict(category);
- else
- m_pRoot = NULL;
+CPDF_NameTree::CPDF_NameTree(CPDF_Document* pDoc,
+ const CFX_ByteStringC& category) {
+ if (pDoc->GetRoot() && pDoc->GetRoot()->GetDict(FX_BSTRC("Names")))
+ m_pRoot = pDoc->GetRoot()->GetDict(FX_BSTRC("Names"))->GetDict(category);
+ else
+ m_pRoot = NULL;
}
-static CPDF_Object* SearchNameNode(CPDF_Dictionary* pNode, const CFX_ByteString& csName,
- int& nIndex, CPDF_Array** ppFind, int nLevel = 0)
-{
- if (nLevel > nMaxRecursion) {
- return NULL;
- }
- CPDF_Array* pLimits = pNode->GetArray(FX_BSTRC("Limits"));
- if (pLimits != NULL) {
- CFX_ByteString csLeft = pLimits->GetString(0);
- CFX_ByteString csRight = pLimits->GetString(1);
- if (csLeft.Compare(csRight) > 0) {
- CFX_ByteString csTmp = csRight;
- csRight = csLeft;
- csLeft = csTmp;
- }
- if (csName.Compare(csLeft) < 0 || csName.Compare(csRight) > 0) {
- return NULL;
- }
- }
- CPDF_Array* pNames = pNode->GetArray(FX_BSTRC("Names"));
- if (pNames) {
- FX_DWORD dwCount = pNames->GetCount() / 2;
- for (FX_DWORD i = 0; i < dwCount; i ++) {
- CFX_ByteString csValue = pNames->GetString(i * 2);
- int32_t iCompare = csValue.Compare(csName);
- if (iCompare <= 0) {
- if (ppFind != NULL) {
- *ppFind = pNames;
- }
- if (iCompare < 0) {
- continue;
- }
- } else {
- break;
- }
- nIndex += i;
- return pNames->GetElementValue(i * 2 + 1);
- }
- nIndex += dwCount;
- return NULL;
- }
- CPDF_Array* pKids = pNode->GetArray(FX_BSTRC("Kids"));
- if (pKids == NULL) {
- return NULL;
- }
- for (FX_DWORD i = 0; i < pKids->GetCount(); i ++) {
- CPDF_Dictionary* pKid = pKids->GetDict(i);
- if (pKid == NULL) {
- continue;
- }
- CPDF_Object* pFound = SearchNameNode(pKid, csName, nIndex, ppFind, nLevel + 1);
- if (pFound) {
- return pFound;
- }
- }
+static CPDF_Object* SearchNameNode(CPDF_Dictionary* pNode,
+ const CFX_ByteString& csName,
+ int& nIndex,
+ CPDF_Array** ppFind,
+ int nLevel = 0) {
+ if (nLevel > nMaxRecursion) {
return NULL;
-}
-static CPDF_Object* SearchNameNode(CPDF_Dictionary* pNode, int nIndex, int& nCurIndex,
- CFX_ByteString& csName, CPDF_Array** ppFind, int nLevel = 0)
-{
- if (nLevel > nMaxRecursion) {
- return NULL;
- }
- CPDF_Array* pNames = pNode->GetArray(FX_BSTRC("Names"));
- if (pNames) {
- int nCount = pNames->GetCount() / 2;
- if (nIndex >= nCurIndex + nCount) {
- nCurIndex += nCount;
- return NULL;
- }
+ }
+ CPDF_Array* pLimits = pNode->GetArray(FX_BSTRC("Limits"));
+ if (pLimits != NULL) {
+ CFX_ByteString csLeft = pLimits->GetString(0);
+ CFX_ByteString csRight = pLimits->GetString(1);
+ if (csLeft.Compare(csRight) > 0) {
+ CFX_ByteString csTmp = csRight;
+ csRight = csLeft;
+ csLeft = csTmp;
+ }
+ if (csName.Compare(csLeft) < 0 || csName.Compare(csRight) > 0) {
+ return NULL;
+ }
+ }
+ CPDF_Array* pNames = pNode->GetArray(FX_BSTRC("Names"));
+ if (pNames) {
+ FX_DWORD dwCount = pNames->GetCount() / 2;
+ for (FX_DWORD i = 0; i < dwCount; i++) {
+ CFX_ByteString csValue = pNames->GetString(i * 2);
+ int32_t iCompare = csValue.Compare(csName);
+ if (iCompare <= 0) {
if (ppFind != NULL) {
- *ppFind = pNames;
+ *ppFind = pNames;
}
- csName = pNames->GetString((nIndex - nCurIndex) * 2);
- return pNames->GetElementValue((nIndex - nCurIndex) * 2 + 1);
- }
- CPDF_Array* pKids = pNode->GetArray(FX_BSTRC("Kids"));
- if (pKids == NULL) {
- return NULL;
- }
- for (FX_DWORD i = 0; i < pKids->GetCount(); i ++) {
- CPDF_Dictionary* pKid = pKids->GetDict(i);
- if (pKid == NULL) {
- continue;
- }
- CPDF_Object* pFound = SearchNameNode(pKid, nIndex, nCurIndex, csName, ppFind, nLevel + 1);
- if (pFound) {
- return pFound;
+ if (iCompare < 0) {
+ continue;
}
+ } else {
+ break;
+ }
+ nIndex += i;
+ return pNames->GetElementValue(i * 2 + 1);
}
+ nIndex += dwCount;
+ return NULL;
+ }
+ CPDF_Array* pKids = pNode->GetArray(FX_BSTRC("Kids"));
+ if (pKids == NULL) {
return NULL;
+ }
+ for (FX_DWORD i = 0; i < pKids->GetCount(); i++) {
+ CPDF_Dictionary* pKid = pKids->GetDict(i);
+ if (pKid == NULL) {
+ continue;
+ }
+ CPDF_Object* pFound =
+ SearchNameNode(pKid, csName, nIndex, ppFind, nLevel + 1);
+ if (pFound) {
+ return pFound;
+ }
+ }
+ return NULL;
}
-static int CountNames(CPDF_Dictionary* pNode, int nLevel = 0)
-{
- if (nLevel > nMaxRecursion) {
- return 0;
- }
- CPDF_Array* pNames = pNode->GetArray(FX_BSTRC("Names"));
- if (pNames) {
- return pNames->GetCount() / 2;
- }
- CPDF_Array* pKids = pNode->GetArray(FX_BSTRC("Kids"));
- if (pKids == NULL) {
- return 0;
- }
- int nCount = 0;
- for (FX_DWORD i = 0; i < pKids->GetCount(); i ++) {
- CPDF_Dictionary* pKid = pKids->GetDict(i);
- if (pKid == NULL) {
- continue;
- }
- nCount += CountNames(pKid, nLevel + 1);
- }
- return nCount;
+static CPDF_Object* SearchNameNode(CPDF_Dictionary* pNode,
+ int nIndex,
+ int& nCurIndex,
+ CFX_ByteString& csName,
+ CPDF_Array** ppFind,
+ int nLevel = 0) {
+ if (nLevel > nMaxRecursion) {
+ return NULL;
+ }
+ CPDF_Array* pNames = pNode->GetArray(FX_BSTRC("Names"));
+ if (pNames) {
+ int nCount = pNames->GetCount() / 2;
+ if (nIndex >= nCurIndex + nCount) {
+ nCurIndex += nCount;
+ return NULL;
+ }
+ if (ppFind != NULL) {
+ *ppFind = pNames;
+ }
+ csName = pNames->GetString((nIndex - nCurIndex) * 2);
+ return pNames->GetElementValue((nIndex - nCurIndex) * 2 + 1);
+ }
+ CPDF_Array* pKids = pNode->GetArray(FX_BSTRC("Kids"));
+ if (pKids == NULL) {
+ return NULL;
+ }
+ for (FX_DWORD i = 0; i < pKids->GetCount(); i++) {
+ CPDF_Dictionary* pKid = pKids->GetDict(i);
+ if (pKid == NULL) {
+ continue;
+ }
+ CPDF_Object* pFound =
+ SearchNameNode(pKid, nIndex, nCurIndex, csName, ppFind, nLevel + 1);
+ if (pFound) {
+ return pFound;
+ }
+ }
+ return NULL;
}
-int CPDF_NameTree::GetCount() const
-{
- if (m_pRoot == NULL) {
- return 0;
- }
- return ::CountNames(m_pRoot);
+static int CountNames(CPDF_Dictionary* pNode, int nLevel = 0) {
+ if (nLevel > nMaxRecursion) {
+ return 0;
+ }
+ CPDF_Array* pNames = pNode->GetArray(FX_BSTRC("Names"));
+ if (pNames) {
+ return pNames->GetCount() / 2;
+ }
+ CPDF_Array* pKids = pNode->GetArray(FX_BSTRC("Kids"));
+ if (pKids == NULL) {
+ return 0;
+ }
+ int nCount = 0;
+ for (FX_DWORD i = 0; i < pKids->GetCount(); i++) {
+ CPDF_Dictionary* pKid = pKids->GetDict(i);
+ if (pKid == NULL) {
+ continue;
+ }
+ nCount += CountNames(pKid, nLevel + 1);
+ }
+ return nCount;
}
-int CPDF_NameTree::GetIndex(const CFX_ByteString& csName) const
-{
- if (m_pRoot == NULL) {
- return -1;
- }
- int nIndex = 0;
- if (SearchNameNode(m_pRoot, csName, nIndex, NULL) == NULL) {
- return -1;
- }
- return nIndex;
+int CPDF_NameTree::GetCount() const {
+ if (m_pRoot == NULL) {
+ return 0;
+ }
+ return ::CountNames(m_pRoot);
}
-CPDF_Object* CPDF_NameTree::LookupValue(int nIndex, CFX_ByteString& csName) const
-{
- if (m_pRoot == NULL) {
- return NULL;
- }
- int nCurIndex = 0;
- return SearchNameNode(m_pRoot, nIndex, nCurIndex, csName, NULL);
+int CPDF_NameTree::GetIndex(const CFX_ByteString& csName) const {
+ if (m_pRoot == NULL) {
+ return -1;
+ }
+ int nIndex = 0;
+ if (SearchNameNode(m_pRoot, csName, nIndex, NULL) == NULL) {
+ return -1;
+ }
+ return nIndex;
}
-CPDF_Object* CPDF_NameTree::LookupValue(const CFX_ByteString& csName) const
-{
- if (m_pRoot == NULL) {
- return NULL;
- }
- int nIndex = 0;
- return SearchNameNode(m_pRoot, csName, nIndex, NULL);
+CPDF_Object* CPDF_NameTree::LookupValue(int nIndex,
+ CFX_ByteString& csName) const {
+ if (m_pRoot == NULL) {
+ return NULL;
+ }
+ int nCurIndex = 0;
+ return SearchNameNode(m_pRoot, nIndex, nCurIndex, csName, NULL);
}
-CPDF_Array* CPDF_NameTree::LookupNamedDest(CPDF_Document* pDoc, const CFX_ByteStringC& sName)
-{
- CPDF_Object* pValue = LookupValue(sName);
- if (pValue == NULL) {
- CPDF_Dictionary* pDests = pDoc->GetRoot()->GetDict(FX_BSTRC("Dests"));
- if (pDests == NULL) {
- return NULL;
- }
- pValue = pDests->GetElementValue(sName);
- }
- if (pValue == NULL) {
- return NULL;
- }
- if (pValue->GetType() == PDFOBJ_ARRAY) {
- return (CPDF_Array*)pValue;
- }
- if (pValue->GetType() == PDFOBJ_DICTIONARY) {
- return ((CPDF_Dictionary*)pValue)->GetArray(FX_BSTRC("D"));
- }
+CPDF_Object* CPDF_NameTree::LookupValue(const CFX_ByteString& csName) const {
+ if (m_pRoot == NULL) {
return NULL;
+ }
+ int nIndex = 0;
+ return SearchNameNode(m_pRoot, csName, nIndex, NULL);
}
-#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ || _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
-static CFX_WideString ChangeSlashToPlatform(const FX_WCHAR* str)
-{
- CFX_WideString result;
- while (*str) {
- if (*str == '/') {
-#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
- result += ':';
+CPDF_Array* CPDF_NameTree::LookupNamedDest(CPDF_Document* pDoc,
+ const CFX_ByteStringC& sName) {
+ CPDF_Object* pValue = LookupValue(sName);
+ if (pValue == NULL) {
+ CPDF_Dictionary* pDests = pDoc->GetRoot()->GetDict(FX_BSTRC("Dests"));
+ if (pDests == NULL) {
+ return NULL;
+ }
+ pValue = pDests->GetElementValue(sName);
+ }
+ if (pValue == NULL) {
+ return NULL;
+ }
+ if (pValue->GetType() == PDFOBJ_ARRAY) {
+ return (CPDF_Array*)pValue;
+ }
+ if (pValue->GetType() == PDFOBJ_DICTIONARY) {
+ return ((CPDF_Dictionary*)pValue)->GetArray(FX_BSTRC("D"));
+ }
+ return NULL;
+}
+#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ || \
+ _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
+static CFX_WideString ChangeSlashToPlatform(const FX_WCHAR* str) {
+ CFX_WideString result;
+ while (*str) {
+ if (*str == '/') {
+#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
+ result += ':';
#else
- result += '\\';
+ result += '\\';
#endif
- } else {
- result += *str;
- }
- str++;
+ } else {
+ result += *str;
}
- return result;
+ str++;
+ }
+ return result;
}
-static CFX_WideString ChangeSlashToPDF(const FX_WCHAR* str)
-{
- CFX_WideString result;
- while (*str) {
- if (*str == '\\' || *str == ':') {
- result += '/';
- } else {
- result += *str;
- }
- str++;
+static CFX_WideString ChangeSlashToPDF(const FX_WCHAR* str) {
+ CFX_WideString result;
+ while (*str) {
+ if (*str == '\\' || *str == ':') {
+ result += '/';
+ } else {
+ result += *str;
}
- return result;
+ str++;
+ }
+ return result;
}
#endif
-static CFX_WideString FILESPEC_DecodeFileName(const CFX_WideStringC& filepath)
-{
- if (filepath.GetLength() <= 1) {
- return CFX_WideString();
- }
-#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
- if (filepath.Left(sizeof("/Mac") - 1) == CFX_WideStringC(L"/Mac")) {
- return ChangeSlashToPlatform(filepath.GetPtr() + 1);
- }
+static CFX_WideString FILESPEC_DecodeFileName(const CFX_WideStringC& filepath) {
+ if (filepath.GetLength() <= 1) {
+ return CFX_WideString();
+ }
+#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
+ if (filepath.Left(sizeof("/Mac") - 1) == CFX_WideStringC(L"/Mac")) {
+ return ChangeSlashToPlatform(filepath.GetPtr() + 1);
+ }
+ return ChangeSlashToPlatform(filepath.GetPtr());
+#elif _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
+ if (filepath.GetAt(0) != '/') {
return ChangeSlashToPlatform(filepath.GetPtr());
-#elif _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
- if (filepath.GetAt(0) != '/') {
- return ChangeSlashToPlatform(filepath.GetPtr());
- }
- if (filepath.GetAt(1) == '/') {
- return ChangeSlashToPlatform(filepath.GetPtr() + 1);
- }
- if (filepath.GetAt(2) == '/') {
- CFX_WideString result;
- result += filepath.GetAt(1);
- result += ':';
- result += ChangeSlashToPlatform(filepath.GetPtr() + 2);
- return result;
- }
+ }
+ if (filepath.GetAt(1) == '/') {
+ return ChangeSlashToPlatform(filepath.GetPtr() + 1);
+ }
+ if (filepath.GetAt(2) == '/') {
CFX_WideString result;
- result += '\\';
- result += ChangeSlashToPlatform(filepath.GetPtr());
+ result += filepath.GetAt(1);
+ result += ':';
+ result += ChangeSlashToPlatform(filepath.GetPtr() + 2);
return result;
+ }
+ CFX_WideString result;
+ result += '\\';
+ result += ChangeSlashToPlatform(filepath.GetPtr());
+ return result;
#else
- return filepath;
+ return filepath;
#endif
}
-FX_BOOL CPDF_FileSpec::GetFileName(CFX_WideString &csFileName) const
-{
- if (m_pObj == NULL) {
+FX_BOOL CPDF_FileSpec::GetFileName(CFX_WideString& csFileName) const {
+ if (m_pObj == NULL) {
+ return FALSE;
+ }
+ if (m_pObj->GetType() == PDFOBJ_DICTIONARY) {
+ CPDF_Dictionary* pDict = (CPDF_Dictionary*)m_pObj;
+ csFileName = pDict->GetUnicodeText(FX_BSTRC("UF"));
+ if (csFileName.IsEmpty()) {
+ csFileName = CFX_WideString::FromLocal(pDict->GetString(FX_BSTRC("F")));
+ }
+ if (pDict->GetString(FX_BSTRC("FS")) == FX_BSTRC("URL")) {
+ return TRUE;
+ }
+ if (csFileName.IsEmpty()) {
+ if (pDict->KeyExist(FX_BSTRC("DOS"))) {
+ csFileName =
+ CFX_WideString::FromLocal(pDict->GetString(FX_BSTRC("DOS")));
+ } else if (pDict->KeyExist(FX_BSTRC("Mac"))) {
+ csFileName =
+ CFX_WideString::FromLocal(pDict->GetString(FX_BSTRC("Mac")));
+ } else if (pDict->KeyExist(FX_BSTRC("Unix"))) {
+ csFileName =
+ CFX_WideString::FromLocal(pDict->GetString(FX_BSTRC("Unix")));
+ } else {
return FALSE;
+ }
}
- if (m_pObj->GetType() == PDFOBJ_DICTIONARY) {
- CPDF_Dictionary* pDict = (CPDF_Dictionary*)m_pObj;
- csFileName = pDict->GetUnicodeText(FX_BSTRC("UF"));
- if (csFileName.IsEmpty()) {
- csFileName = CFX_WideString::FromLocal(pDict->GetString(FX_BSTRC("F")));
- }
- if (pDict->GetString(FX_BSTRC("FS")) == FX_BSTRC("URL")) {
- return TRUE;
- }
- if (csFileName.IsEmpty()) {
- if (pDict->KeyExist(FX_BSTRC("DOS"))) {
- csFileName = CFX_WideString::FromLocal(pDict->GetString(FX_BSTRC("DOS")));
- } else if (pDict->KeyExist(FX_BSTRC("Mac"))) {
- csFileName = CFX_WideString::FromLocal(pDict->GetString(FX_BSTRC("Mac")));
- } else if (pDict->KeyExist(FX_BSTRC("Unix"))) {
- csFileName = CFX_WideString::FromLocal(pDict->GetString(FX_BSTRC("Unix")));
- } else {
- return FALSE;
- }
- }
- } else {
- csFileName = CFX_WideString::FromLocal(m_pObj->GetString());
- }
- csFileName = FILESPEC_DecodeFileName(csFileName);
- return TRUE;
+ } else {
+ csFileName = CFX_WideString::FromLocal(m_pObj->GetString());
+ }
+ csFileName = FILESPEC_DecodeFileName(csFileName);
+ return TRUE;
}
-CPDF_FileSpec::CPDF_FileSpec()
-{
- m_pObj = CPDF_Dictionary::Create();
- if (m_pObj != NULL) {
- ((CPDF_Dictionary*)m_pObj)->SetAtName(FX_BSTRC("Type"), FX_BSTRC("Filespec"));
- }
+CPDF_FileSpec::CPDF_FileSpec() {
+ m_pObj = CPDF_Dictionary::Create();
+ if (m_pObj != NULL) {
+ ((CPDF_Dictionary*)m_pObj)
+ ->SetAtName(FX_BSTRC("Type"), FX_BSTRC("Filespec"));
+ }
}
-FX_BOOL CPDF_FileSpec::IsURL() const
-{
- if (m_pObj == NULL) {
- return FALSE;
- }
- if (m_pObj->GetType() != PDFOBJ_DICTIONARY) {
- return FALSE;
- }
- return ((CPDF_Dictionary*)m_pObj)->GetString(FX_BSTRC("FS")) == FX_BSTRC("URL");
+FX_BOOL CPDF_FileSpec::IsURL() const {
+ if (m_pObj == NULL) {
+ return FALSE;
+ }
+ if (m_pObj->GetType() != PDFOBJ_DICTIONARY) {
+ return FALSE;
+ }
+ return ((CPDF_Dictionary*)m_pObj)->GetString(FX_BSTRC("FS")) ==
+ FX_BSTRC("URL");
}
-CFX_WideString FILESPEC_EncodeFileName(const CFX_WideStringC& filepath)
-{
- if (filepath.GetLength() <= 1) {
- return CFX_WideString();
- }
-#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
- if (filepath.GetAt(1) == ':') {
- CFX_WideString result;
- result = '/';
- result += filepath.GetAt(0);
- if (filepath.GetAt(2) != '\\') {
- result += '/';
- }
- result += ChangeSlashToPDF(filepath.GetPtr() + 2);
- return result;
- }
- if (filepath.GetAt(0) == '\\' && filepath.GetAt(1) == '\\') {
- return ChangeSlashToPDF(filepath.GetPtr() + 1);
- }
- if (filepath.GetAt(0) == '\\') {
- CFX_WideString result;
- result = '/';
- result += ChangeSlashToPDF(filepath.GetPtr());
- return result;
- }
- return ChangeSlashToPDF(filepath.GetPtr());
-#elif _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
- if (filepath.Left(sizeof("Mac") - 1) == FX_WSTRC(L"Mac")) {
- CFX_WideString result;
- result = '/';
- result += ChangeSlashToPDF(filepath.GetPtr());
- return result;
+CFX_WideString FILESPEC_EncodeFileName(const CFX_WideStringC& filepath) {
+ if (filepath.GetLength() <= 1) {
+ return CFX_WideString();
+ }
+#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
+ if (filepath.GetAt(1) == ':') {
+ CFX_WideString result;
+ result = '/';
+ result += filepath.GetAt(0);
+ if (filepath.GetAt(2) != '\\') {
+ result += '/';
}
- return ChangeSlashToPDF(filepath.GetPtr());
+ result += ChangeSlashToPDF(filepath.GetPtr() + 2);
+ return result;
+ }
+ if (filepath.GetAt(0) == '\\' && filepath.GetAt(1) == '\\') {
+ return ChangeSlashToPDF(filepath.GetPtr() + 1);
+ }
+ if (filepath.GetAt(0) == '\\') {
+ CFX_WideString result;
+ result = '/';
+ result += ChangeSlashToPDF(filepath.GetPtr());
+ return result;
+ }
+ return ChangeSlashToPDF(filepath.GetPtr());
+#elif _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
+ if (filepath.Left(sizeof("Mac") - 1) == FX_WSTRC(L"Mac")) {
+ CFX_WideString result;
+ result = '/';
+ result += ChangeSlashToPDF(filepath.GetPtr());
+ return result;
+ }
+ return ChangeSlashToPDF(filepath.GetPtr());
#else
- return filepath;
+ return filepath;
#endif
}
-CPDF_Stream* CPDF_FileSpec::GetFileStream() const
-{
- if (m_pObj == NULL) {
- return NULL;
- }
- int32_t iType = m_pObj->GetType();
- if (iType == PDFOBJ_STREAM) {
- return (CPDF_Stream*)m_pObj;
- } else if (iType == PDFOBJ_DICTIONARY) {
- CPDF_Dictionary *pEF = ((CPDF_Dictionary*)m_pObj)->GetDict(FX_BSTRC("EF"));
- if (pEF == NULL) {
- return NULL;
- }
- return pEF->GetStream(FX_BSTRC("F"));
- }
+CPDF_Stream* CPDF_FileSpec::GetFileStream() const {
+ if (m_pObj == NULL) {
return NULL;
+ }
+ int32_t iType = m_pObj->GetType();
+ if (iType == PDFOBJ_STREAM) {
+ return (CPDF_Stream*)m_pObj;
+ } else if (iType == PDFOBJ_DICTIONARY) {
+ CPDF_Dictionary* pEF = ((CPDF_Dictionary*)m_pObj)->GetDict(FX_BSTRC("EF"));
+ if (pEF == NULL) {
+ return NULL;
+ }
+ return pEF->GetStream(FX_BSTRC("F"));
+ }
+ return NULL;
}
-static void FPDFDOC_FILESPEC_SetFileName(CPDF_Object *pObj, const CFX_WideStringC& wsFileName, FX_BOOL bURL)
-{
- ASSERT(pObj != NULL);
- CFX_WideString wsStr;
- if (bURL) {
- wsStr = wsFileName;
- } else {
- wsStr = FILESPEC_EncodeFileName(wsFileName);
- }
- int32_t iType = pObj->GetType();
- if (iType == PDFOBJ_STRING) {
- pObj->SetString(CFX_ByteString::FromUnicode(wsStr));
- } else if (iType == PDFOBJ_DICTIONARY) {
- CPDF_Dictionary* pDict = (CPDF_Dictionary*)pObj;
- pDict->SetAtString(FX_BSTRC("F"), CFX_ByteString::FromUnicode(wsStr));
- pDict->SetAtString(FX_BSTRC("UF"), PDF_EncodeText(wsStr));
- }
+static void FPDFDOC_FILESPEC_SetFileName(CPDF_Object* pObj,
+ const CFX_WideStringC& wsFileName,
+ FX_BOOL bURL) {
+ ASSERT(pObj != NULL);
+ CFX_WideString wsStr;
+ if (bURL) {
+ wsStr = wsFileName;
+ } else {
+ wsStr = FILESPEC_EncodeFileName(wsFileName);
+ }
+ int32_t iType = pObj->GetType();
+ if (iType == PDFOBJ_STRING) {
+ pObj->SetString(CFX_ByteString::FromUnicode(wsStr));
+ } else if (iType == PDFOBJ_DICTIONARY) {
+ CPDF_Dictionary* pDict = (CPDF_Dictionary*)pObj;
+ pDict->SetAtString(FX_BSTRC("F"), CFX_ByteString::FromUnicode(wsStr));
+ pDict->SetAtString(FX_BSTRC("UF"), PDF_EncodeText(wsStr));
+ }
}
-void CPDF_FileSpec::SetFileName(const CFX_WideStringC& wsFileName, FX_BOOL bURL)
-{
- ASSERT(m_pObj != NULL);
- if (m_pObj->GetType() == PDFOBJ_DICTIONARY && bURL) {
- ((CPDF_Dictionary*)m_pObj)->SetAtName(FX_BSTRC("FS"), "URL");
- }
- FPDFDOC_FILESPEC_SetFileName(m_pObj, wsFileName, bURL);
+void CPDF_FileSpec::SetFileName(const CFX_WideStringC& wsFileName,
+ FX_BOOL bURL) {
+ ASSERT(m_pObj != NULL);
+ if (m_pObj->GetType() == PDFOBJ_DICTIONARY && bURL) {
+ ((CPDF_Dictionary*)m_pObj)->SetAtName(FX_BSTRC("FS"), "URL");
+ }
+ FPDFDOC_FILESPEC_SetFileName(m_pObj, wsFileName, bURL);
}
-static CFX_WideString _MakeRoman(int num)
-{
- const int arabic[] = {
- 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1
- };
- const CFX_WideString roman[] = {
- L"m", L"cm", L"d", L"cd", L"c", L"xc", L"l", L"xl", L"x", L"ix", L"v", L"iv", L"i"
- };
- const int nMaxNum = 1000000;
- num %= nMaxNum;
- int i = 0;
- CFX_WideString wsRomanNumber;
- while (num > 0) {
- while (num >= arabic[i]) {
- num = num - arabic[i];
- wsRomanNumber += roman[i];
- }
- i = i + 1;
- }
- return wsRomanNumber;
+static CFX_WideString _MakeRoman(int num) {
+ const int arabic[] = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};
+ const CFX_WideString roman[] = {L"m", L"cm", L"d", L"cd", L"c",
+ L"xc", L"l", L"xl", L"x", L"ix",
+ L"v", L"iv", L"i"};
+ const int nMaxNum = 1000000;
+ num %= nMaxNum;
+ int i = 0;
+ CFX_WideString wsRomanNumber;
+ while (num > 0) {
+ while (num >= arabic[i]) {
+ num = num - arabic[i];
+ wsRomanNumber += roman[i];
+ }
+ i = i + 1;
+ }
+ return wsRomanNumber;
}
-static CFX_WideString _MakeLetters(int num)
-{
- if (num == 0) {
- return CFX_WideString();
- }
- CFX_WideString wsLetters;
- const int nMaxCount = 1000;
- const int nLetterCount = 26;
- num -= 1;
- int count = num / nLetterCount + 1;
- count %= nMaxCount;
- FX_WCHAR ch = L'a' + num % nLetterCount;
- for (int i = 0; i < count; i++) {
- wsLetters += ch;
- }
- return wsLetters;
+static CFX_WideString _MakeLetters(int num) {
+ if (num == 0) {
+ return CFX_WideString();
+ }
+ CFX_WideString wsLetters;
+ const int nMaxCount = 1000;
+ const int nLetterCount = 26;
+ num -= 1;
+ int count = num / nLetterCount + 1;
+ count %= nMaxCount;
+ FX_WCHAR ch = L'a' + num % nLetterCount;
+ for (int i = 0; i < count; i++) {
+ wsLetters += ch;
+ }
+ return wsLetters;
}
-static CFX_WideString _GetLabelNumPortion(int num, const CFX_ByteString& bsStyle)
-{
- CFX_WideString wsNumPortion;
- if (bsStyle.IsEmpty()) {
- return wsNumPortion;
- }
- if (bsStyle == "D") {
- wsNumPortion.Format(L"%d", num);
- } else if (bsStyle == "R") {
- wsNumPortion = _MakeRoman(num);
- wsNumPortion.MakeUpper();
- } else if (bsStyle == "r") {
- wsNumPortion = _MakeRoman(num);
- } else if (bsStyle == "A") {
- wsNumPortion = _MakeLetters(num);
- wsNumPortion.MakeUpper();
- } else if (bsStyle == "a") {
- wsNumPortion = _MakeLetters(num);
- }
+static CFX_WideString _GetLabelNumPortion(int num,
+ const CFX_ByteString& bsStyle) {
+ CFX_WideString wsNumPortion;
+ if (bsStyle.IsEmpty()) {
return wsNumPortion;
+ }
+ if (bsStyle == "D") {
+ wsNumPortion.Format(L"%d", num);
+ } else if (bsStyle == "R") {
+ wsNumPortion = _MakeRoman(num);
+ wsNumPortion.MakeUpper();
+ } else if (bsStyle == "r") {
+ wsNumPortion = _MakeRoman(num);
+ } else if (bsStyle == "A") {
+ wsNumPortion = _MakeLetters(num);
+ wsNumPortion.MakeUpper();
+ } else if (bsStyle == "a") {
+ wsNumPortion = _MakeLetters(num);
+ }
+ return wsNumPortion;
}
-CFX_WideString CPDF_PageLabel::GetLabel(int nPage) const
-{
- CFX_WideString wsLabel;
- if (m_pDocument == NULL) {
- return wsLabel;
- }
- CPDF_Dictionary* pPDFRoot = m_pDocument->GetRoot();
- if (pPDFRoot == NULL) {
- return wsLabel;
- }
- CPDF_Dictionary* pLabels = pPDFRoot->GetDict(FX_BSTRC("PageLabels"));
- CPDF_NumberTree numberTree(pLabels);
- CPDF_Object* pValue = NULL;
- int n = nPage;
- while (n >= 0) {
- pValue = numberTree.LookupValue(n);
- if (pValue != NULL) {
- break;
- }
- n--;
- }
+CFX_WideString CPDF_PageLabel::GetLabel(int nPage) const {
+ CFX_WideString wsLabel;
+ if (m_pDocument == NULL) {
+ return wsLabel;
+ }
+ CPDF_Dictionary* pPDFRoot = m_pDocument->GetRoot();
+ if (pPDFRoot == NULL) {
+ return wsLabel;
+ }
+ CPDF_Dictionary* pLabels = pPDFRoot->GetDict(FX_BSTRC("PageLabels"));
+ CPDF_NumberTree numberTree(pLabels);
+ CPDF_Object* pValue = NULL;
+ int n = nPage;
+ while (n >= 0) {
+ pValue = numberTree.LookupValue(n);
if (pValue != NULL) {
- pValue = pValue->GetDirect();
- if (pValue->GetType() == PDFOBJ_DICTIONARY) {
- CPDF_Dictionary* pLabel = (CPDF_Dictionary*)pValue;
- if (pLabel->KeyExist(FX_BSTRC("P"))) {
- wsLabel += pLabel->GetUnicodeText(FX_BSTRC("P"));
- }
- CFX_ByteString bsNumberingStyle = pLabel->GetString(FX_BSTRC("S"), NULL);
- int nLabelNum = nPage - n + pLabel->GetInteger(FX_BSTRC("St"), 1);
- CFX_WideString wsNumPortion = _GetLabelNumPortion(nLabelNum, bsNumberingStyle);
- wsLabel += wsNumPortion;
- return wsLabel;
- }
+ break;
}
- wsLabel.Format(L"%d", nPage + 1);
- return wsLabel;
+ n--;
+ }
+ if (pValue != NULL) {
+ pValue = pValue->GetDirect();
+ if (pValue->GetType() == PDFOBJ_DICTIONARY) {
+ CPDF_Dictionary* pLabel = (CPDF_Dictionary*)pValue;
+ if (pLabel->KeyExist(FX_BSTRC("P"))) {
+ wsLabel += pLabel->GetUnicodeText(FX_BSTRC("P"));
+ }
+ CFX_ByteString bsNumberingStyle = pLabel->GetString(FX_BSTRC("S"), NULL);
+ int nLabelNum = nPage - n + pLabel->GetInteger(FX_BSTRC("St"), 1);
+ CFX_WideString wsNumPortion =
+ _GetLabelNumPortion(nLabelNum, bsNumberingStyle);
+ wsLabel += wsNumPortion;
+ return wsLabel;
+ }
+ }
+ wsLabel.Format(L"%d", nPage + 1);
+ return wsLabel;
}
-int32_t CPDF_PageLabel::GetPageByLabel(const CFX_ByteStringC& bsLabel) const
-{
- if (m_pDocument == NULL) {
- return -1;
- }
- CPDF_Dictionary* pPDFRoot = m_pDocument->GetRoot();
- if (pPDFRoot == NULL) {
- return -1;
- }
- int nPages = m_pDocument->GetPageCount();
- CFX_ByteString bsLbl;
- CFX_ByteString bsOrig = bsLabel;
- for (int i = 0; i < nPages; i++) {
- bsLbl = PDF_EncodeText(GetLabel(i));
- if (!bsLbl.Compare(bsOrig)) {
- return i;
- }
- }
- bsLbl = bsOrig;
- int nPage = FXSYS_atoi(bsLbl);
- if (nPage > 0 && nPage <= nPages) {
- return nPage;
- }
+int32_t CPDF_PageLabel::GetPageByLabel(const CFX_ByteStringC& bsLabel) const {
+ if (m_pDocument == NULL) {
+ return -1;
+ }
+ CPDF_Dictionary* pPDFRoot = m_pDocument->GetRoot();
+ if (pPDFRoot == NULL) {
return -1;
+ }
+ int nPages = m_pDocument->GetPageCount();
+ CFX_ByteString bsLbl;
+ CFX_ByteString bsOrig = bsLabel;
+ for (int i = 0; i < nPages; i++) {
+ bsLbl = PDF_EncodeText(GetLabel(i));
+ if (!bsLbl.Compare(bsOrig)) {
+ return i;
+ }
+ }
+ bsLbl = bsOrig;
+ int nPage = FXSYS_atoi(bsLbl);
+ if (nPage > 0 && nPage <= nPages) {
+ return nPage;
+ }
+ return -1;
}
-int32_t CPDF_PageLabel::GetPageByLabel(const CFX_WideStringC& wsLabel) const
-{
- CFX_ByteString bsLabel = PDF_EncodeText(wsLabel.GetPtr());
- return GetPageByLabel(bsLabel);
+int32_t CPDF_PageLabel::GetPageByLabel(const CFX_WideStringC& wsLabel) const {
+ CFX_ByteString bsLabel = PDF_EncodeText(wsLabel.GetPtr());
+ return GetPageByLabel(bsLabel);
}
diff --git a/core/src/fpdfdoc/doc_bookmark.cpp b/core/src/fpdfdoc/doc_bookmark.cpp
index 9f0d586a6c..2fea810ecc 100644
--- a/core/src/fpdfdoc/doc_bookmark.cpp
+++ b/core/src/fpdfdoc/doc_bookmark.cpp
@@ -9,90 +9,85 @@
#include "../../../third_party/base/nonstd_unique_ptr.h"
#include "../../include/fpdfdoc/fpdf_doc.h"
-CPDF_Bookmark CPDF_BookmarkTree::GetFirstChild(const CPDF_Bookmark& parent) const
-{
- if (!parent.m_pDict) {
- CPDF_Dictionary* pRoot = m_pDocument->GetRoot()->GetDict("Outlines");
- if (!pRoot) {
- return CPDF_Bookmark();
- }
- return CPDF_Bookmark(pRoot->GetDict("First"));
+CPDF_Bookmark CPDF_BookmarkTree::GetFirstChild(
+ const CPDF_Bookmark& parent) const {
+ if (!parent.m_pDict) {
+ CPDF_Dictionary* pRoot = m_pDocument->GetRoot()->GetDict("Outlines");
+ if (!pRoot) {
+ return CPDF_Bookmark();
}
- return CPDF_Bookmark(parent.m_pDict->GetDict("First"));
+ return CPDF_Bookmark(pRoot->GetDict("First"));
+ }
+ return CPDF_Bookmark(parent.m_pDict->GetDict("First"));
}
-CPDF_Bookmark CPDF_BookmarkTree::GetNextSibling(const CPDF_Bookmark& bookmark) const
-{
- if (!bookmark.m_pDict) {
- return CPDF_Bookmark();
- }
- CPDF_Dictionary *pNext = bookmark.m_pDict->GetDict("Next");
- return pNext == bookmark.m_pDict ? CPDF_Bookmark() : CPDF_Bookmark(pNext);
+CPDF_Bookmark CPDF_BookmarkTree::GetNextSibling(
+ const CPDF_Bookmark& bookmark) const {
+ if (!bookmark.m_pDict) {
+ return CPDF_Bookmark();
+ }
+ CPDF_Dictionary* pNext = bookmark.m_pDict->GetDict("Next");
+ return pNext == bookmark.m_pDict ? CPDF_Bookmark() : CPDF_Bookmark(pNext);
}
-FX_DWORD CPDF_Bookmark::GetColorRef() const
-{
- if (!m_pDict) {
- return 0;
- }
- CPDF_Array* pColor = m_pDict->GetArray("C");
- if (!pColor) {
- return FXSYS_RGB(0, 0, 0);
- }
- int r = FXSYS_round(pColor->GetNumber(0) * 255);
- int g = FXSYS_round(pColor->GetNumber(1) * 255);
- int b = FXSYS_round(pColor->GetNumber(2) * 255);
- return FXSYS_RGB(r, g, b);
+FX_DWORD CPDF_Bookmark::GetColorRef() const {
+ if (!m_pDict) {
+ return 0;
+ }
+ CPDF_Array* pColor = m_pDict->GetArray("C");
+ if (!pColor) {
+ return FXSYS_RGB(0, 0, 0);
+ }
+ int r = FXSYS_round(pColor->GetNumber(0) * 255);
+ int g = FXSYS_round(pColor->GetNumber(1) * 255);
+ int b = FXSYS_round(pColor->GetNumber(2) * 255);
+ return FXSYS_RGB(r, g, b);
}
-FX_DWORD CPDF_Bookmark::GetFontStyle() const
-{
- if (!m_pDict) {
- return 0;
- }
- return m_pDict->GetInteger("F");
+FX_DWORD CPDF_Bookmark::GetFontStyle() const {
+ if (!m_pDict) {
+ return 0;
+ }
+ return m_pDict->GetInteger("F");
}
-CFX_WideString CPDF_Bookmark::GetTitle() const
-{
- if (!m_pDict) {
- return CFX_WideString();
- }
- CPDF_String* pString = (CPDF_String*)m_pDict->GetElementValue("Title");
- if (!pString || pString->GetType() != PDFOBJ_STRING) {
- return CFX_WideString();
- }
- CFX_WideString title = pString->GetUnicodeText();
- int len = title.GetLength();
- if (!len) {
- return CFX_WideString();
- }
- nonstd::unique_ptr<FX_WCHAR[]> buf(new FX_WCHAR[len]);
- for (int i = 0; i < len; i++) {
- FX_WCHAR w = title[i];
- buf[i] = w > 0x20 ? w : 0x20;
- }
- return CFX_WideString(buf.get(), len);
+CFX_WideString CPDF_Bookmark::GetTitle() const {
+ if (!m_pDict) {
+ return CFX_WideString();
+ }
+ CPDF_String* pString = (CPDF_String*)m_pDict->GetElementValue("Title");
+ if (!pString || pString->GetType() != PDFOBJ_STRING) {
+ return CFX_WideString();
+ }
+ CFX_WideString title = pString->GetUnicodeText();
+ int len = title.GetLength();
+ if (!len) {
+ return CFX_WideString();
+ }
+ nonstd::unique_ptr<FX_WCHAR[]> buf(new FX_WCHAR[len]);
+ for (int i = 0; i < len; i++) {
+ FX_WCHAR w = title[i];
+ buf[i] = w > 0x20 ? w : 0x20;
+ }
+ return CFX_WideString(buf.get(), len);
}
-CPDF_Dest CPDF_Bookmark::GetDest(CPDF_Document* pDocument) const
-{
- if (!m_pDict) {
- return CPDF_Dest();
- }
- CPDF_Object* pDest = m_pDict->GetElementValue("Dest");
- if (!pDest) {
- return CPDF_Dest();
- }
- if (pDest->GetType() == PDFOBJ_STRING || pDest->GetType() == PDFOBJ_NAME) {
- CPDF_NameTree name_tree(pDocument, FX_BSTRC("Dests"));
- CFX_ByteStringC name = pDest->GetString();
- return CPDF_Dest(name_tree.LookupNamedDest(pDocument, name));
- }
- if (pDest->GetType() == PDFOBJ_ARRAY) {
- return CPDF_Dest((CPDF_Array*)pDest);
- }
+CPDF_Dest CPDF_Bookmark::GetDest(CPDF_Document* pDocument) const {
+ if (!m_pDict) {
+ return CPDF_Dest();
+ }
+ CPDF_Object* pDest = m_pDict->GetElementValue("Dest");
+ if (!pDest) {
return CPDF_Dest();
+ }
+ if (pDest->GetType() == PDFOBJ_STRING || pDest->GetType() == PDFOBJ_NAME) {
+ CPDF_NameTree name_tree(pDocument, FX_BSTRC("Dests"));
+ CFX_ByteStringC name = pDest->GetString();
+ return CPDF_Dest(name_tree.LookupNamedDest(pDocument, name));
+ }
+ if (pDest->GetType() == PDFOBJ_ARRAY) {
+ return CPDF_Dest((CPDF_Array*)pDest);
+ }
+ return CPDF_Dest();
}
-CPDF_Action CPDF_Bookmark::GetAction() const
-{
- if (!m_pDict) {
- return CPDF_Action();
- }
- return CPDF_Action(m_pDict->GetDict("A"));
+CPDF_Action CPDF_Bookmark::GetAction() const {
+ if (!m_pDict) {
+ return CPDF_Action();
+ }
+ return CPDF_Action(m_pDict->GetDict("A"));
}
diff --git a/core/src/fpdfdoc/doc_form.cpp b/core/src/fpdfdoc/doc_form.cpp
index 735231cc1d..a59f35eeac 100644
--- a/core/src/fpdfdoc/doc_form.cpp
+++ b/core/src/fpdfdoc/doc_form.cpp
@@ -9,1619 +9,1617 @@
const int nMaxRecursion = 32;
-class _CFieldNameExtractor
-{
-public:
- _CFieldNameExtractor(const CFX_WideString& full_name)
- {
- m_pStart = full_name.c_str();
- m_pEnd = m_pStart + full_name.GetLength();
- m_pCur = m_pStart;
- }
- void GetNext(const FX_WCHAR* &pSubName, FX_STRSIZE& size)
- {
- pSubName = m_pCur;
- while (m_pCur < m_pEnd && m_pCur[0] != L'.') {
- m_pCur++;
- }
- size = (FX_STRSIZE)(m_pCur - pSubName);
- if (m_pCur < m_pEnd && m_pCur[0] == L'.') {
- m_pCur++;
- }
- }
-protected:
- const FX_WCHAR* m_pStart;
- const FX_WCHAR* m_pEnd;
- const FX_WCHAR* m_pCur;
-};
-class CFieldTree
-{
-public:
- struct _Node {
- _Node *parent;
- CFX_PtrArray children;
- CFX_WideString short_name;
- CPDF_FormField *field_ptr;
- int CountFields(int nLevel = 0)
- {
- if (nLevel > nMaxRecursion) {
- return 0;
- }
- if (field_ptr) {
- return 1;
- }
- int count = 0;
- for (int i = 0; i < children.GetSize(); i ++) {
- count += ((_Node *)children.GetAt(i))->CountFields(nLevel + 1);
- }
- return count;
- }
- CPDF_FormField* GetField(int* fields_to_go)
- {
- if (field_ptr) {
- if (*fields_to_go == 0) {
- return field_ptr;
- }
- --*fields_to_go;
- return NULL;
- }
- for (int i = 0; i < children.GetSize(); i++) {
- _Node *pNode = (_Node *)children.GetAt(i);
- CPDF_FormField* pField = pNode->GetField(fields_to_go);
- if (pField) {
- return pField;
- }
- }
- return NULL;
- }
- CPDF_FormField* GetField(int index)
- {
- int fields_to_go = index;
- return GetField(&fields_to_go);
- }
- };
- CFieldTree();
- ~CFieldTree();
- void SetField(const CFX_WideString &full_name, CPDF_FormField *field_ptr);
- CPDF_FormField *GetField(const CFX_WideString &full_name);
- CPDF_FormField *RemoveField(const CFX_WideString &full_name);
- void RemoveAll();
- _Node *FindNode(const CFX_WideString &full_name);
- _Node * AddChild(_Node *pParent, const CFX_WideString &short_name, CPDF_FormField *field_ptr);
- void RemoveNode(_Node *pNode, int nLevel = 0);
- _Node *_Lookup(_Node *pParent, const CFX_WideString &short_name);
- _Node m_Root;
+class _CFieldNameExtractor {
+ public:
+ _CFieldNameExtractor(const CFX_WideString& full_name) {
+ m_pStart = full_name.c_str();
+ m_pEnd = m_pStart + full_name.GetLength();
+ m_pCur = m_pStart;
+ }
+ void GetNext(const FX_WCHAR*& pSubName, FX_STRSIZE& size) {
+ pSubName = m_pCur;
+ while (m_pCur < m_pEnd && m_pCur[0] != L'.') {
+ m_pCur++;
+ }
+ size = (FX_STRSIZE)(m_pCur - pSubName);
+ if (m_pCur < m_pEnd && m_pCur[0] == L'.') {
+ m_pCur++;
+ }
+ }
+
+ protected:
+ const FX_WCHAR* m_pStart;
+ const FX_WCHAR* m_pEnd;
+ const FX_WCHAR* m_pCur;
};
-CFieldTree::CFieldTree()
-{
- m_Root.parent = NULL;
- m_Root.field_ptr = NULL;
-}
-CFieldTree::~CFieldTree()
-{
- RemoveAll();
-}
-CFieldTree::_Node *CFieldTree::AddChild(_Node *pParent, const CFX_WideString &short_name, CPDF_FormField *field_ptr)
-{
- if (pParent == NULL) {
+class CFieldTree {
+ public:
+ struct _Node {
+ _Node* parent;
+ CFX_PtrArray children;
+ CFX_WideString short_name;
+ CPDF_FormField* field_ptr;
+ int CountFields(int nLevel = 0) {
+ if (nLevel > nMaxRecursion) {
+ return 0;
+ }
+ if (field_ptr) {
+ return 1;
+ }
+ int count = 0;
+ for (int i = 0; i < children.GetSize(); i++) {
+ count += ((_Node*)children.GetAt(i))->CountFields(nLevel + 1);
+ }
+ return count;
+ }
+ CPDF_FormField* GetField(int* fields_to_go) {
+ if (field_ptr) {
+ if (*fields_to_go == 0) {
+ return field_ptr;
+ }
+ --*fields_to_go;
return NULL;
- }
- _Node* pNode = new _Node;
- pNode->parent = pParent;
- pNode->short_name = short_name;
- pNode->field_ptr = field_ptr;
- pParent->children.Add(pNode);
- return pNode;
+ }
+ for (int i = 0; i < children.GetSize(); i++) {
+ _Node* pNode = (_Node*)children.GetAt(i);
+ CPDF_FormField* pField = pNode->GetField(fields_to_go);
+ if (pField) {
+ return pField;
+ }
+ }
+ return NULL;
+ }
+ CPDF_FormField* GetField(int index) {
+ int fields_to_go = index;
+ return GetField(&fields_to_go);
+ }
+ };
+ CFieldTree();
+ ~CFieldTree();
+ void SetField(const CFX_WideString& full_name, CPDF_FormField* field_ptr);
+ CPDF_FormField* GetField(const CFX_WideString& full_name);
+ CPDF_FormField* RemoveField(const CFX_WideString& full_name);
+ void RemoveAll();
+ _Node* FindNode(const CFX_WideString& full_name);
+ _Node* AddChild(_Node* pParent,
+ const CFX_WideString& short_name,
+ CPDF_FormField* field_ptr);
+ void RemoveNode(_Node* pNode, int nLevel = 0);
+ _Node* _Lookup(_Node* pParent, const CFX_WideString& short_name);
+ _Node m_Root;
+};
+CFieldTree::CFieldTree() {
+ m_Root.parent = NULL;
+ m_Root.field_ptr = NULL;
}
-void CFieldTree::RemoveNode(_Node *pNode, int nLevel)
-{
- if (pNode == NULL) {
- return ;
- }
- if (nLevel > nMaxRecursion) {
- delete pNode;
- return ;
- }
- CFX_PtrArray& ptr_array = pNode->children;
- for (int i = 0; i < ptr_array.GetSize(); i ++) {
- _Node *pChild = (_Node *)ptr_array[i];
- RemoveNode(pChild, nLevel + 1);
- }
- delete pNode;
+CFieldTree::~CFieldTree() {
+ RemoveAll();
}
-CFieldTree::_Node *CFieldTree::_Lookup(_Node *pParent, const CFX_WideString &short_name)
-{
- if (pParent == NULL) {
- return NULL;
- }
- CFX_PtrArray& ptr_array = pParent->children;
- for (int i = 0; i < ptr_array.GetSize(); i ++) {
- _Node *pNode = (_Node *)ptr_array[i];
- if (pNode->short_name.GetLength() == short_name.GetLength() &&
- FXSYS_memcmp(pNode->short_name.c_str(), short_name.c_str(), short_name.GetLength()*sizeof(FX_WCHAR)) == 0) {
- return pNode;
- }
- }
+CFieldTree::_Node* CFieldTree::AddChild(_Node* pParent,
+ const CFX_WideString& short_name,
+ CPDF_FormField* field_ptr) {
+ if (pParent == NULL) {
return NULL;
-}
-void CFieldTree::RemoveAll()
-{
- CFX_PtrArray& ptr_array = m_Root.children;
- for (int i = 0; i < ptr_array.GetSize(); i ++) {
- _Node *pNode = (_Node *)ptr_array[i];
- RemoveNode(pNode);
- }
-}
-void CFieldTree::SetField(const CFX_WideString &full_name, CPDF_FormField *field_ptr)
-{
- if (full_name == L"") {
- return;
+ }
+ _Node* pNode = new _Node;
+ pNode->parent = pParent;
+ pNode->short_name = short_name;
+ pNode->field_ptr = field_ptr;
+ pParent->children.Add(pNode);
+ return pNode;
+}
+void CFieldTree::RemoveNode(_Node* pNode, int nLevel) {
+ if (pNode == NULL) {
+ return;
+ }
+ if (nLevel > nMaxRecursion) {
+ delete pNode;
+ return;
+ }
+ CFX_PtrArray& ptr_array = pNode->children;
+ for (int i = 0; i < ptr_array.GetSize(); i++) {
+ _Node* pChild = (_Node*)ptr_array[i];
+ RemoveNode(pChild, nLevel + 1);
+ }
+ delete pNode;
+}
+CFieldTree::_Node* CFieldTree::_Lookup(_Node* pParent,
+ const CFX_WideString& short_name) {
+ if (pParent == NULL) {
+ return NULL;
+ }
+ CFX_PtrArray& ptr_array = pParent->children;
+ for (int i = 0; i < ptr_array.GetSize(); i++) {
+ _Node* pNode = (_Node*)ptr_array[i];
+ if (pNode->short_name.GetLength() == short_name.GetLength() &&
+ FXSYS_memcmp(pNode->short_name.c_str(), short_name.c_str(),
+ short_name.GetLength() * sizeof(FX_WCHAR)) == 0) {
+ return pNode;
+ }
+ }
+ return NULL;
+}
+void CFieldTree::RemoveAll() {
+ CFX_PtrArray& ptr_array = m_Root.children;
+ for (int i = 0; i < ptr_array.GetSize(); i++) {
+ _Node* pNode = (_Node*)ptr_array[i];
+ RemoveNode(pNode);
+ }
+}
+void CFieldTree::SetField(const CFX_WideString& full_name,
+ CPDF_FormField* field_ptr) {
+ if (full_name == L"") {
+ return;
+ }
+ _CFieldNameExtractor name_extractor(full_name);
+ const FX_WCHAR* pName;
+ FX_STRSIZE nLength;
+ name_extractor.GetNext(pName, nLength);
+ _Node *pNode = &m_Root, *pLast = NULL;
+ while (nLength > 0) {
+ pLast = pNode;
+ CFX_WideString name = CFX_WideString(pName, nLength);
+ pNode = _Lookup(pLast, name);
+ if (pNode == NULL) {
+ pNode = AddChild(pLast, name, NULL);
}
- _CFieldNameExtractor name_extractor(full_name);
- const FX_WCHAR* pName;
- FX_STRSIZE nLength;
name_extractor.GetNext(pName, nLength);
- _Node *pNode = &m_Root, *pLast = NULL;
- while (nLength > 0) {
- pLast = pNode;
- CFX_WideString name = CFX_WideString(pName, nLength);
- pNode = _Lookup(pLast, name);
- if (pNode == NULL) {
- pNode = AddChild(pLast, name, NULL);
- }
- name_extractor.GetNext(pName, nLength);
- }
- if (pNode != &m_Root) {
- pNode->field_ptr = field_ptr;
- }
+ }
+ if (pNode != &m_Root) {
+ pNode->field_ptr = field_ptr;
+ }
}
-CPDF_FormField *CFieldTree::GetField(const CFX_WideString &full_name)
-{
- if (full_name == L"") {
- return NULL;
- }
- _CFieldNameExtractor name_extractor(full_name);
- const FX_WCHAR* pName;
- FX_STRSIZE nLength;
- name_extractor.GetNext(pName, nLength);
- _Node *pNode = &m_Root, *pLast = NULL;
- while (nLength > 0 && pNode) {
- pLast = pNode;
- CFX_WideString name = CFX_WideString(pName, nLength);
- pNode = _Lookup(pLast, name);
- name_extractor.GetNext(pName, nLength);
- }
- return pNode ? pNode->field_ptr : NULL;
-}
-CPDF_FormField *CFieldTree::RemoveField(const CFX_WideString & full_name)
-{
- if (full_name == L"") {
- return NULL;
- }
- _CFieldNameExtractor name_extractor(full_name);
- const FX_WCHAR* pName;
- FX_STRSIZE nLength;
+CPDF_FormField* CFieldTree::GetField(const CFX_WideString& full_name) {
+ if (full_name == L"") {
+ return NULL;
+ }
+ _CFieldNameExtractor name_extractor(full_name);
+ const FX_WCHAR* pName;
+ FX_STRSIZE nLength;
+ name_extractor.GetNext(pName, nLength);
+ _Node *pNode = &m_Root, *pLast = NULL;
+ while (nLength > 0 && pNode) {
+ pLast = pNode;
+ CFX_WideString name = CFX_WideString(pName, nLength);
+ pNode = _Lookup(pLast, name);
name_extractor.GetNext(pName, nLength);
- _Node *pNode = &m_Root, *pLast = NULL;
- while (nLength > 0 && pNode) {
- pLast = pNode;
- CFX_WideString name = CFX_WideString(pName, nLength);
- pNode = _Lookup(pLast, name);
- name_extractor.GetNext(pName, nLength);
- }
- if (pNode && pNode != &m_Root) {
- CFX_PtrArray& ptr_array = pLast->children;
- for (int i = 0; i < ptr_array.GetSize(); i ++) {
- if (pNode == (_Node *)ptr_array[i]) {
- ptr_array.RemoveAt(i);
- break;
- }
- }
- CPDF_FormField *pField = pNode->field_ptr;
- RemoveNode(pNode);
- return pField;
- }
+ }
+ return pNode ? pNode->field_ptr : NULL;
+}
+CPDF_FormField* CFieldTree::RemoveField(const CFX_WideString& full_name) {
+ if (full_name == L"") {
return NULL;
+ }
+ _CFieldNameExtractor name_extractor(full_name);
+ const FX_WCHAR* pName;
+ FX_STRSIZE nLength;
+ name_extractor.GetNext(pName, nLength);
+ _Node *pNode = &m_Root, *pLast = NULL;
+ while (nLength > 0 && pNode) {
+ pLast = pNode;
+ CFX_WideString name = CFX_WideString(pName, nLength);
+ pNode = _Lookup(pLast, name);
+ name_extractor.GetNext(pName, nLength);
+ }
+ if (pNode && pNode != &m_Root) {
+ CFX_PtrArray& ptr_array = pLast->children;
+ for (int i = 0; i < ptr_array.GetSize(); i++) {
+ if (pNode == (_Node*)ptr_array[i]) {
+ ptr_array.RemoveAt(i);
+ break;
+ }
+ }
+ CPDF_FormField* pField = pNode->field_ptr;
+ RemoveNode(pNode);
+ return pField;
+ }
+ return NULL;
}
-CFieldTree::_Node *CFieldTree::FindNode(const CFX_WideString& full_name)
-{
- if (full_name == L"") {
- return NULL;
- }
- _CFieldNameExtractor name_extractor(full_name);
- const FX_WCHAR* pName;
- FX_STRSIZE nLength;
+CFieldTree::_Node* CFieldTree::FindNode(const CFX_WideString& full_name) {
+ if (full_name == L"") {
+ return NULL;
+ }
+ _CFieldNameExtractor name_extractor(full_name);
+ const FX_WCHAR* pName;
+ FX_STRSIZE nLength;
+ name_extractor.GetNext(pName, nLength);
+ _Node *pNode = &m_Root, *pLast = NULL;
+ while (nLength > 0 && pNode) {
+ pLast = pNode;
+ CFX_WideString name = CFX_WideString(pName, nLength);
+ pNode = _Lookup(pLast, name);
name_extractor.GetNext(pName, nLength);
- _Node *pNode = &m_Root, *pLast = NULL;
- while (nLength > 0 && pNode) {
- pLast = pNode;
- CFX_WideString name = CFX_WideString(pName, nLength);
- pNode = _Lookup(pLast, name);
- name_extractor.GetNext(pName, nLength);
- }
- return pNode;
-}
-CPDF_InterForm::CPDF_InterForm(CPDF_Document* pDocument, FX_BOOL bGenerateAP) : CFX_PrivateData()
-{
- m_pDocument = pDocument;
- m_bGenerateAP = bGenerateAP;
- m_pFormNotify = NULL;
- m_bUpdated = FALSE;
- m_pFieldTree = new CFieldTree;
- CPDF_Dictionary* pRoot = m_pDocument->GetRoot();
- m_pFormDict = pRoot->GetDict("AcroForm");
- if (m_pFormDict == NULL) {
- return;
- }
- CPDF_Array* pFields = m_pFormDict->GetArray("Fields");
- if (pFields == NULL) {
- return;
- }
- int count = pFields->GetCount();
- for (int i = 0; i < count; i ++) {
- LoadField(pFields->GetDict(i));
- }
-}
-CPDF_InterForm::~CPDF_InterForm()
-{
- FX_POSITION pos = m_ControlMap.GetStartPosition();
- while (pos) {
- void* key;
- void* value;
- m_ControlMap.GetNextAssoc(pos, key, value);
- delete (CPDF_FormControl*)value;
- }
- if (m_pFieldTree != NULL) {
- int nCount = m_pFieldTree->m_Root.CountFields();
- for (int i = 0; i < nCount; i++) {
- CPDF_FormField *pField = m_pFieldTree->m_Root.GetField(i);
- delete pField;
- }
- delete m_pFieldTree;
- }
-}
-FX_BOOL CPDF_InterForm::m_bUpdateAP = TRUE;
-FX_BOOL CPDF_InterForm::UpdatingAPEnabled()
-{
- return m_bUpdateAP;
-}
-void CPDF_InterForm::EnableUpdateAP(FX_BOOL bUpdateAP)
-{
- m_bUpdateAP = bUpdateAP;
-}
-CFX_ByteString CPDF_InterForm::GenerateNewResourceName(const CPDF_Dictionary* pResDict, const FX_CHAR* csType, int iMinLen, const FX_CHAR* csPrefix)
-{
- CFX_ByteString csStr = csPrefix;
- CFX_ByteString csBType = csType;
- if (csStr.IsEmpty()) {
- if (csBType == "ExtGState") {
- csStr = "GS";
- } else if (csBType == "ColorSpace") {
- csStr = "CS";
- } else if (csBType == "Font") {
- csStr = "ZiTi";
- } else {
- csStr = "Res";
- }
- }
- CFX_ByteString csTmp = csStr;
- int iCount = csStr.GetLength();
- int m = 0;
- if (iMinLen > 0) {
- csTmp = "";
- while (m < iMinLen && m < iCount) {
- csTmp += csStr[m ++];
- }
- while (m < iMinLen) {
- csTmp += '0' + m % 10;
- m ++;
- }
+ }
+ return pNode;
+}
+CPDF_InterForm::CPDF_InterForm(CPDF_Document* pDocument, FX_BOOL bGenerateAP)
+ : CFX_PrivateData() {
+ m_pDocument = pDocument;
+ m_bGenerateAP = bGenerateAP;
+ m_pFormNotify = NULL;
+ m_bUpdated = FALSE;
+ m_pFieldTree = new CFieldTree;
+ CPDF_Dictionary* pRoot = m_pDocument->GetRoot();
+ m_pFormDict = pRoot->GetDict("AcroForm");
+ if (m_pFormDict == NULL) {
+ return;
+ }
+ CPDF_Array* pFields = m_pFormDict->GetArray("Fields");
+ if (pFields == NULL) {
+ return;
+ }
+ int count = pFields->GetCount();
+ for (int i = 0; i < count; i++) {
+ LoadField(pFields->GetDict(i));
+ }
+}
+CPDF_InterForm::~CPDF_InterForm() {
+ FX_POSITION pos = m_ControlMap.GetStartPosition();
+ while (pos) {
+ void* key;
+ void* value;
+ m_ControlMap.GetNextAssoc(pos, key, value);
+ delete (CPDF_FormControl*)value;
+ }
+ if (m_pFieldTree != NULL) {
+ int nCount = m_pFieldTree->m_Root.CountFields();
+ for (int i = 0; i < nCount; i++) {
+ CPDF_FormField* pField = m_pFieldTree->m_Root.GetField(i);
+ delete pField;
+ }
+ delete m_pFieldTree;
+ }
+}
+FX_BOOL CPDF_InterForm::m_bUpdateAP = TRUE;
+FX_BOOL CPDF_InterForm::UpdatingAPEnabled() {
+ return m_bUpdateAP;
+}
+void CPDF_InterForm::EnableUpdateAP(FX_BOOL bUpdateAP) {
+ m_bUpdateAP = bUpdateAP;
+}
+CFX_ByteString CPDF_InterForm::GenerateNewResourceName(
+ const CPDF_Dictionary* pResDict,
+ const FX_CHAR* csType,
+ int iMinLen,
+ const FX_CHAR* csPrefix) {
+ CFX_ByteString csStr = csPrefix;
+ CFX_ByteString csBType = csType;
+ if (csStr.IsEmpty()) {
+ if (csBType == "ExtGState") {
+ csStr = "GS";
+ } else if (csBType == "ColorSpace") {
+ csStr = "CS";
+ } else if (csBType == "Font") {
+ csStr = "ZiTi";
} else {
- m = iCount;
- }
- if (pResDict == NULL) {
- return csTmp;
- }
- CPDF_Dictionary* pDict = pResDict->GetDict(csType);
- if (pDict == NULL) {
- return csTmp;
- }
- int num = 0;
- CFX_ByteString bsNum;
- while (TRUE) {
- if (!pDict->KeyExist(csTmp + bsNum)) {
- return csTmp + bsNum;
- }
- if (m < iCount) {
- csTmp += csStr[m ++];
- } else {
- bsNum.Format("%d", num++);
- }
- m ++;
- }
+ csStr = "Res";
+ }
+ }
+ CFX_ByteString csTmp = csStr;
+ int iCount = csStr.GetLength();
+ int m = 0;
+ if (iMinLen > 0) {
+ csTmp = "";
+ while (m < iMinLen && m < iCount) {
+ csTmp += csStr[m++];
+ }
+ while (m < iMinLen) {
+ csTmp += '0' + m % 10;
+ m++;
+ }
+ } else {
+ m = iCount;
+ }
+ if (pResDict == NULL) {
return csTmp;
+ }
+ CPDF_Dictionary* pDict = pResDict->GetDict(csType);
+ if (pDict == NULL) {
+ return csTmp;
+ }
+ int num = 0;
+ CFX_ByteString bsNum;
+ while (TRUE) {
+ if (!pDict->KeyExist(csTmp + bsNum)) {
+ return csTmp + bsNum;
+ }
+ if (m < iCount) {
+ csTmp += csStr[m++];
+ } else {
+ bsNum.Format("%d", num++);
+ }
+ m++;
+ }
+ return csTmp;
}
#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
typedef struct _PDF_FONTDATA {
- FX_BOOL bFind;
- LOGFONTA lf;
+ FX_BOOL bFind;
+ LOGFONTA lf;
} PDF_FONTDATA, FAR* LPDF_FONTDATA;
-static int CALLBACK EnumFontFamExProc( ENUMLOGFONTEXA *lpelfe,
- NEWTEXTMETRICEX *lpntme,
- DWORD FontType,
- LPARAM lParam
- )
-{
- if (FontType != 0x004 || strchr(lpelfe->elfLogFont.lfFaceName, '@') != NULL) {
- return 1;
- }
- LPDF_FONTDATA pData = (LPDF_FONTDATA)lParam;
- memcpy(&pData->lf, &lpelfe->elfLogFont, sizeof(LOGFONTA));
- pData->bFind = TRUE;
- return 0;
-}
-static FX_BOOL RetrieveSpecificFont(LOGFONTA& lf)
-{
- PDF_FONTDATA fd;
- memset(&fd, 0, sizeof(PDF_FONTDATA));
- HDC hDC = ::GetDC(NULL);
- EnumFontFamiliesExA(hDC, &lf, (FONTENUMPROCA)EnumFontFamExProc, (LPARAM)&fd, 0);
- ::ReleaseDC(NULL, hDC);
- if (fd.bFind) {
- memcpy(&lf, &fd.lf, sizeof(LOGFONTA));
- }
- return fd.bFind;
-}
-static FX_BOOL RetrieveSpecificFont(uint8_t charSet, uint8_t pitchAndFamily, LPCSTR pcsFontName, LOGFONTA& lf)
-{
+static int CALLBACK EnumFontFamExProc(ENUMLOGFONTEXA* lpelfe,
+ NEWTEXTMETRICEX* lpntme,
+ DWORD FontType,
+ LPARAM lParam) {
+ if (FontType != 0x004 || strchr(lpelfe->elfLogFont.lfFaceName, '@') != NULL) {
+ return 1;
+ }
+ LPDF_FONTDATA pData = (LPDF_FONTDATA)lParam;
+ memcpy(&pData->lf, &lpelfe->elfLogFont, sizeof(LOGFONTA));
+ pData->bFind = TRUE;
+ return 0;
+}
+static FX_BOOL RetrieveSpecificFont(LOGFONTA& lf) {
+ PDF_FONTDATA fd;
+ memset(&fd, 0, sizeof(PDF_FONTDATA));
+ HDC hDC = ::GetDC(NULL);
+ EnumFontFamiliesExA(hDC, &lf, (FONTENUMPROCA)EnumFontFamExProc, (LPARAM)&fd,
+ 0);
+ ::ReleaseDC(NULL, hDC);
+ if (fd.bFind) {
+ memcpy(&lf, &fd.lf, sizeof(LOGFONTA));
+ }
+ return fd.bFind;
+}
+static FX_BOOL RetrieveSpecificFont(uint8_t charSet,
+ uint8_t pitchAndFamily,
+ LPCSTR pcsFontName,
+ LOGFONTA& lf) {
+ memset(&lf, 0, sizeof(LOGFONTA));
+ lf.lfCharSet = charSet;
+ lf.lfPitchAndFamily = pitchAndFamily;
+ if (pcsFontName != NULL) {
+ strcpy(lf.lfFaceName, pcsFontName);
+ }
+ return RetrieveSpecificFont(lf);
+}
+static FX_BOOL RetrieveStockFont(int iFontObject,
+ uint8_t charSet,
+ LOGFONTA& lf) {
+ HFONT hFont = (HFONT)::GetStockObject(iFontObject);
+ if (hFont != NULL) {
memset(&lf, 0, sizeof(LOGFONTA));
- lf.lfCharSet = charSet;
- lf.lfPitchAndFamily = pitchAndFamily;
- if (pcsFontName != NULL) {
- strcpy(lf.lfFaceName, pcsFontName);
- }
- return RetrieveSpecificFont(lf);
-}
-static FX_BOOL RetrieveStockFont(int iFontObject, uint8_t charSet, LOGFONTA& lf)
-{
- HFONT hFont = (HFONT)::GetStockObject(iFontObject);
- if (hFont != NULL) {
- memset(&lf, 0, sizeof(LOGFONTA));
- int iRet = ::GetObject(hFont, sizeof(LOGFONTA), &lf);
- if (iRet > 0 && (lf.lfCharSet == charSet || charSet == 255)) {
- return RetrieveSpecificFont(lf);
- }
+ int iRet = ::GetObject(hFont, sizeof(LOGFONTA), &lf);
+ if (iRet > 0 && (lf.lfCharSet == charSet || charSet == 255)) {
+ return RetrieveSpecificFont(lf);
}
- return FALSE;
+ }
+ return FALSE;
}
#endif
-CPDF_Font* CPDF_InterForm::AddSystemDefaultFont(const CPDF_Document* pDocument)
-{
- if (pDocument == NULL) {
- return NULL;
- }
- CPDF_Font* pFont = NULL;
+CPDF_Font* CPDF_InterForm::AddSystemDefaultFont(
+ const CPDF_Document* pDocument) {
+ if (pDocument == NULL) {
+ return NULL;
+ }
+ CPDF_Font* pFont = NULL;
#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
- LOGFONTA lf;
- FX_BOOL bRet;
- bRet = RetrieveStockFont(DEFAULT_GUI_FONT, 255, lf);
- if (!bRet) {
- bRet = RetrieveStockFont(SYSTEM_FONT, 255, lf);
- }
- if (bRet) {
- pFont = ((CPDF_Document*)pDocument)->AddWindowsFont(&lf, FALSE, TRUE);
- }
+ LOGFONTA lf;
+ FX_BOOL bRet;
+ bRet = RetrieveStockFont(DEFAULT_GUI_FONT, 255, lf);
+ if (!bRet) {
+ bRet = RetrieveStockFont(SYSTEM_FONT, 255, lf);
+ }
+ if (bRet) {
+ pFont = ((CPDF_Document*)pDocument)->AddWindowsFont(&lf, FALSE, TRUE);
+ }
#endif
- return pFont;
+ return pFont;
}
-CPDF_Font* CPDF_InterForm::AddSystemFont(const CPDF_Document* pDocument, CFX_ByteString csFontName, uint8_t iCharSet)
-{
- if (pDocument == NULL || csFontName.IsEmpty()) {
- return NULL;
- }
-#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
- if (iCharSet == 1) {
- iCharSet = GetNativeCharSet();
- }
- HFONT hFont = ::CreateFontA(0, 0, 0, 0, 0, 0, 0, 0, iCharSet, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, csFontName.c_str());
- if (hFont != NULL) {
- LOGFONTA lf;
- memset(&lf, 0, sizeof(LOGFONTA));
- ::GetObjectA(hFont, sizeof(LOGFONTA), &lf);
- ::DeleteObject(hFont);
- if (strlen(lf.lfFaceName) > 0) {
- return ((CPDF_Document*)pDocument)->AddWindowsFont(&lf, FALSE, TRUE);
- }
- }
-#endif
+CPDF_Font* CPDF_InterForm::AddSystemFont(const CPDF_Document* pDocument,
+ CFX_ByteString csFontName,
+ uint8_t iCharSet) {
+ if (pDocument == NULL || csFontName.IsEmpty()) {
return NULL;
-}
-CPDF_Font* CPDF_InterForm::AddSystemFont(const CPDF_Document* pDocument, CFX_WideString csFontName, uint8_t iCharSet)
-{
- if (pDocument == NULL || csFontName.IsEmpty()) {
- return NULL;
- }
+ }
#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
- if (iCharSet == 1) {
- iCharSet = GetNativeCharSet();
- }
- HFONT hFont = ::CreateFontW(0, 0, 0, 0, 0, 0, 0, 0, iCharSet, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, csFontName.c_str());
- if (hFont != NULL) {
- LOGFONTA lf;
- memset(&lf, 0, sizeof(LOGFONTA));
- ::GetObject(hFont, sizeof(LOGFONTA), &lf);
- ::DeleteObject(hFont);
- if (strlen(lf.lfFaceName) > 0) {
- return ((CPDF_Document*)pDocument)->AddWindowsFont(&lf, FALSE, TRUE);
- }
+ if (iCharSet == 1) {
+ iCharSet = GetNativeCharSet();
+ }
+ HFONT hFont = ::CreateFontA(
+ 0, 0, 0, 0, 0, 0, 0, 0, iCharSet, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,
+ DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, csFontName.c_str());
+ if (hFont != NULL) {
+ LOGFONTA lf;
+ memset(&lf, 0, sizeof(LOGFONTA));
+ ::GetObjectA(hFont, sizeof(LOGFONTA), &lf);
+ ::DeleteObject(hFont);
+ if (strlen(lf.lfFaceName) > 0) {
+ return ((CPDF_Document*)pDocument)->AddWindowsFont(&lf, FALSE, TRUE);
}
+ }
#endif
- return NULL;
+ return NULL;
}
-CPDF_Font* CPDF_InterForm::AddStandardFont(const CPDF_Document* pDocument, CFX_ByteString csFontName)
-{
- if (pDocument == NULL || csFontName.IsEmpty()) {
- return NULL;
- }
- CPDF_Font* pFont = NULL;
- if (csFontName == "ZapfDingbats") {
- pFont = ((CPDF_Document*)pDocument)->AddStandardFont(csFontName, NULL);
- } else {
- CPDF_FontEncoding encoding(PDFFONT_ENCODING_WINANSI);
- pFont = ((CPDF_Document*)pDocument)->AddStandardFont(csFontName, &encoding);
- }
- return pFont;
-}
-CFX_ByteString CPDF_InterForm::GetNativeFont(uint8_t charSet, void* pLogFont)
-{
- CFX_ByteString csFontName;
+CPDF_Font* CPDF_InterForm::AddSystemFont(const CPDF_Document* pDocument,
+ CFX_WideString csFontName,
+ uint8_t iCharSet) {
+ if (pDocument == NULL || csFontName.IsEmpty()) {
+ return NULL;
+ }
#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
+ if (iCharSet == 1) {
+ iCharSet = GetNativeCharSet();
+ }
+ HFONT hFont = ::CreateFontW(
+ 0, 0, 0, 0, 0, 0, 0, 0, iCharSet, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,
+ DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, csFontName.c_str());
+ if (hFont != NULL) {
LOGFONTA lf;
- FX_BOOL bRet;
- if (charSet == ANSI_CHARSET) {
- csFontName = "Helvetica";
- return csFontName;
- }
- bRet = FALSE;
- if (charSet == SHIFTJIS_CHARSET) {
- bRet = RetrieveSpecificFont(charSet, DEFAULT_PITCH | FF_DONTCARE, "MS Mincho", lf);
- } else if (charSet == GB2312_CHARSET) {
- bRet = RetrieveSpecificFont(charSet, DEFAULT_PITCH | FF_DONTCARE, "SimSun", lf);
- } else if (charSet == CHINESEBIG5_CHARSET) {
- bRet = RetrieveSpecificFont(charSet, DEFAULT_PITCH | FF_DONTCARE, "MingLiU", lf);
- }
- if (!bRet) {
- bRet = RetrieveSpecificFont(charSet, DEFAULT_PITCH | FF_DONTCARE, "Arial Unicode MS", lf);
- }
- if (!bRet) {
- bRet = RetrieveSpecificFont(charSet, DEFAULT_PITCH | FF_DONTCARE, "Microsoft Sans Serif", lf);
- }
- if (!bRet) {
- bRet = RetrieveSpecificFont(charSet, DEFAULT_PITCH | FF_DONTCARE, NULL, lf);
- }
- if (bRet) {
- if (pLogFont != NULL) {
- memcpy(pLogFont, &lf, sizeof(LOGFONTA));
- }
- csFontName = lf.lfFaceName;
- return csFontName;
+ memset(&lf, 0, sizeof(LOGFONTA));
+ ::GetObject(hFont, sizeof(LOGFONTA), &lf);
+ ::DeleteObject(hFont);
+ if (strlen(lf.lfFaceName) > 0) {
+ return ((CPDF_Document*)pDocument)->AddWindowsFont(&lf, FALSE, TRUE);
}
+ }
#endif
+ return NULL;
+}
+CPDF_Font* CPDF_InterForm::AddStandardFont(const CPDF_Document* pDocument,
+ CFX_ByteString csFontName) {
+ if (pDocument == NULL || csFontName.IsEmpty()) {
+ return NULL;
+ }
+ CPDF_Font* pFont = NULL;
+ if (csFontName == "ZapfDingbats") {
+ pFont = ((CPDF_Document*)pDocument)->AddStandardFont(csFontName, NULL);
+ } else {
+ CPDF_FontEncoding encoding(PDFFONT_ENCODING_WINANSI);
+ pFont = ((CPDF_Document*)pDocument)->AddStandardFont(csFontName, &encoding);
+ }
+ return pFont;
+}
+CFX_ByteString CPDF_InterForm::GetNativeFont(uint8_t charSet, void* pLogFont) {
+ CFX_ByteString csFontName;
+#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
+ LOGFONTA lf;
+ FX_BOOL bRet;
+ if (charSet == ANSI_CHARSET) {
+ csFontName = "Helvetica";
return csFontName;
+ }
+ bRet = FALSE;
+ if (charSet == SHIFTJIS_CHARSET) {
+ bRet = RetrieveSpecificFont(charSet, DEFAULT_PITCH | FF_DONTCARE,
+ "MS Mincho", lf);
+ } else if (charSet == GB2312_CHARSET) {
+ bRet = RetrieveSpecificFont(charSet, DEFAULT_PITCH | FF_DONTCARE, "SimSun",
+ lf);
+ } else if (charSet == CHINESEBIG5_CHARSET) {
+ bRet = RetrieveSpecificFont(charSet, DEFAULT_PITCH | FF_DONTCARE, "MingLiU",
+ lf);
+ }
+ if (!bRet) {
+ bRet = RetrieveSpecificFont(charSet, DEFAULT_PITCH | FF_DONTCARE,
+ "Arial Unicode MS", lf);
+ }
+ if (!bRet) {
+ bRet = RetrieveSpecificFont(charSet, DEFAULT_PITCH | FF_DONTCARE,
+ "Microsoft Sans Serif", lf);
+ }
+ if (!bRet) {
+ bRet = RetrieveSpecificFont(charSet, DEFAULT_PITCH | FF_DONTCARE, NULL, lf);
+ }
+ if (bRet) {
+ if (pLogFont != NULL) {
+ memcpy(pLogFont, &lf, sizeof(LOGFONTA));
+ }
+ csFontName = lf.lfFaceName;
+ return csFontName;
+ }
+#endif
+ return csFontName;
}
-CFX_ByteString CPDF_InterForm::GetNativeFont(void* pLogFont)
-{
+CFX_ByteString CPDF_InterForm::GetNativeFont(void* pLogFont) {
#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
- uint8_t charSet = GetNativeCharSet();
- return GetNativeFont(charSet, pLogFont);
+ uint8_t charSet = GetNativeCharSet();
+ return GetNativeFont(charSet, pLogFont);
#else
- return CFX_ByteString();
+ return CFX_ByteString();
#endif
}
-uint8_t CPDF_InterForm::GetNativeCharSet()
-{
+uint8_t CPDF_InterForm::GetNativeCharSet() {
#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
- uint8_t charSet = ANSI_CHARSET;
- UINT iCodePage = ::GetACP();
- switch (iCodePage) {
- case 932:
- charSet = SHIFTJIS_CHARSET;
- break;
- case 936:
- charSet = GB2312_CHARSET;
- break;
- case 950:
- charSet = CHINESEBIG5_CHARSET;
- break;
- case 1252:
- charSet = ANSI_CHARSET;
- break;
- case 874:
- charSet = THAI_CHARSET;
- break;
- case 949:
- charSet = HANGUL_CHARSET;
- break;
- case 1200:
- charSet = ANSI_CHARSET;
- break;
- case 1250:
- charSet = EASTEUROPE_CHARSET;
- break;
- case 1251:
- charSet = RUSSIAN_CHARSET;
- break;
- case 1253:
- charSet = GREEK_CHARSET;
- break;
- case 1254:
- charSet = TURKISH_CHARSET;
- break;
- case 1255:
- charSet = HEBREW_CHARSET;
- break;
- case 1256:
- charSet = ARABIC_CHARSET;
- break;
- case 1257:
- charSet = BALTIC_CHARSET;
- break;
- case 1258:
- charSet = VIETNAMESE_CHARSET;
- break;
- case 1361:
- charSet = JOHAB_CHARSET;
- break;
- }
- return charSet;
+ uint8_t charSet = ANSI_CHARSET;
+ UINT iCodePage = ::GetACP();
+ switch (iCodePage) {
+ case 932:
+ charSet = SHIFTJIS_CHARSET;
+ break;
+ case 936:
+ charSet = GB2312_CHARSET;
+ break;
+ case 950:
+ charSet = CHINESEBIG5_CHARSET;
+ break;
+ case 1252:
+ charSet = ANSI_CHARSET;
+ break;
+ case 874:
+ charSet = THAI_CHARSET;
+ break;
+ case 949:
+ charSet = HANGUL_CHARSET;
+ break;
+ case 1200:
+ charSet = ANSI_CHARSET;
+ break;
+ case 1250:
+ charSet = EASTEUROPE_CHARSET;
+ break;
+ case 1251:
+ charSet = RUSSIAN_CHARSET;
+ break;
+ case 1253:
+ charSet = GREEK_CHARSET;
+ break;
+ case 1254:
+ charSet = TURKISH_CHARSET;
+ break;
+ case 1255:
+ charSet = HEBREW_CHARSET;
+ break;
+ case 1256:
+ charSet = ARABIC_CHARSET;
+ break;
+ case 1257:
+ charSet = BALTIC_CHARSET;
+ break;
+ case 1258:
+ charSet = VIETNAMESE_CHARSET;
+ break;
+ case 1361:
+ charSet = JOHAB_CHARSET;
+ break;
+ }
+ return charSet;
#else
- return 0;
+ return 0;
#endif
}
-CPDF_Font* CPDF_InterForm::AddNativeFont(uint8_t charSet, const CPDF_Document* pDocument)
-{
- if (pDocument == NULL) {
- return NULL;
- }
- CPDF_Font* pFont = NULL;
+CPDF_Font* CPDF_InterForm::AddNativeFont(uint8_t charSet,
+ const CPDF_Document* pDocument) {
+ if (pDocument == NULL) {
+ return NULL;
+ }
+ CPDF_Font* pFont = NULL;
#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
- LOGFONTA lf;
- CFX_ByteString csFontName = GetNativeFont(charSet, &lf);
- if (!csFontName.IsEmpty()) {
- if (csFontName == "Helvetica") {
- pFont = AddStandardFont(pDocument, csFontName);
- } else {
- pFont = ((CPDF_Document*)pDocument)->AddWindowsFont(&lf, FALSE, TRUE);
- }
+ LOGFONTA lf;
+ CFX_ByteString csFontName = GetNativeFont(charSet, &lf);
+ if (!csFontName.IsEmpty()) {
+ if (csFontName == "Helvetica") {
+ pFont = AddStandardFont(pDocument, csFontName);
+ } else {
+ pFont = ((CPDF_Document*)pDocument)->AddWindowsFont(&lf, FALSE, TRUE);
}
+ }
#endif
- return pFont;
-}
-CPDF_Font* CPDF_InterForm::AddNativeFont(const CPDF_Document* pDocument)
-{
- if (pDocument == NULL) {
- return NULL;
- }
- CPDF_Font* pFont = NULL;
- uint8_t charSet = GetNativeCharSet();
- pFont = AddNativeFont(charSet, pDocument);
- return pFont;
+ return pFont;
}
-FX_BOOL CPDF_InterForm::ValidateFieldName(CFX_WideString& csNewFieldName, int iType, const CPDF_FormField* pExcludedField, const CPDF_FormControl* pExcludedControl)
-{
- if (csNewFieldName.IsEmpty()) {
- return FALSE;
- }
- int iPos = 0;
- int iLength = csNewFieldName.GetLength();
- CFX_WideString csSub;
- while (TRUE) {
- while (iPos < iLength && (csNewFieldName[iPos] == L'.' || csNewFieldName[iPos] == L' ')) {
- iPos ++;
- }
- if (iPos < iLength && !csSub.IsEmpty()) {
- csSub += L'.';
- }
- while (iPos < iLength && csNewFieldName[iPos] != L'.') {
- csSub += csNewFieldName[iPos ++];
+CPDF_Font* CPDF_InterForm::AddNativeFont(const CPDF_Document* pDocument) {
+ if (pDocument == NULL) {
+ return NULL;
+ }
+ CPDF_Font* pFont = NULL;
+ uint8_t charSet = GetNativeCharSet();
+ pFont = AddNativeFont(charSet, pDocument);
+ return pFont;
+}
+FX_BOOL CPDF_InterForm::ValidateFieldName(
+ CFX_WideString& csNewFieldName,
+ int iType,
+ const CPDF_FormField* pExcludedField,
+ const CPDF_FormControl* pExcludedControl) {
+ if (csNewFieldName.IsEmpty()) {
+ return FALSE;
+ }
+ int iPos = 0;
+ int iLength = csNewFieldName.GetLength();
+ CFX_WideString csSub;
+ while (TRUE) {
+ while (iPos < iLength &&
+ (csNewFieldName[iPos] == L'.' || csNewFieldName[iPos] == L' ')) {
+ iPos++;
+ }
+ if (iPos < iLength && !csSub.IsEmpty()) {
+ csSub += L'.';
+ }
+ while (iPos < iLength && csNewFieldName[iPos] != L'.') {
+ csSub += csNewFieldName[iPos++];
+ }
+ for (int i = csSub.GetLength() - 1; i > -1; i--) {
+ if (csSub[i] == L' ' || csSub[i] == L'.') {
+ csSub.SetAt(i, L'\0');
+ } else {
+ break;
+ }
+ }
+ FX_DWORD dwCount = m_pFieldTree->m_Root.CountFields();
+ for (FX_DWORD m = 0; m < dwCount; m++) {
+ CPDF_FormField* pField = m_pFieldTree->m_Root.GetField(m);
+ if (pField == NULL) {
+ continue;
+ }
+ if (pField == pExcludedField) {
+ if (pExcludedControl != NULL) {
+ if (pField->CountControls() < 2) {
+ continue;
+ }
+ } else {
+ continue;
}
- for (int i = csSub.GetLength() - 1; i > -1; i --) {
- if (csSub[i] == L' ' || csSub[i] == L'.') {
- csSub.SetAt(i, L'\0');
- } else {
- break;
- }
+ }
+ CFX_WideString csFullName = pField->GetFullName();
+ int iRet = CompareFieldName(csSub, csFullName);
+ if (iRet == 1) {
+ if (pField->GetFieldType() != iType) {
+ return FALSE;
}
- FX_DWORD dwCount = m_pFieldTree->m_Root.CountFields();
- for (FX_DWORD m = 0; m < dwCount; m ++) {
- CPDF_FormField* pField = m_pFieldTree->m_Root.GetField(m);
- if (pField == NULL) {
- continue;
- }
- if (pField == pExcludedField) {
- if (pExcludedControl != NULL) {
- if (pField->CountControls() < 2) {
- continue;
- }
- } else {
- continue;
- }
- }
- CFX_WideString csFullName = pField->GetFullName();
- int iRet = CompareFieldName(csSub, csFullName);
- if (iRet == 1) {
- if (pField->GetFieldType() != iType) {
- return FALSE;
- }
- } else if (iRet == 2 && csSub == csNewFieldName) {
- if (csFullName[iPos] == L'.') {
- return FALSE;
- }
- } else if (iRet == 3 && csSub == csNewFieldName) {
- if (csNewFieldName[csFullName.GetLength()] == L'.') {
- return FALSE;
- }
- }
+ } else if (iRet == 2 && csSub == csNewFieldName) {
+ if (csFullName[iPos] == L'.') {
+ return FALSE;
}
- if (iPos >= iLength) {
- break;
+ } else if (iRet == 3 && csSub == csNewFieldName) {
+ if (csNewFieldName[csFullName.GetLength()] == L'.') {
+ return FALSE;
}
+ }
}
- if (csSub.IsEmpty()) {
- return FALSE;
+ if (iPos >= iLength) {
+ break;
}
- csNewFieldName = csSub;
- return TRUE;
-}
-FX_BOOL CPDF_InterForm::ValidateFieldName(CFX_WideString& csNewFieldName, int iType)
-{
- return ValidateFieldName(csNewFieldName, iType, NULL, NULL);
-}
-FX_BOOL CPDF_InterForm::ValidateFieldName(const CPDF_FormField* pField, CFX_WideString& csNewFieldName)
-{
- if (pField == NULL || csNewFieldName.IsEmpty()) {
- return FALSE;
- }
- return ValidateFieldName(csNewFieldName, ((CPDF_FormField*)pField)->GetFieldType(), pField, NULL);
+ }
+ if (csSub.IsEmpty()) {
+ return FALSE;
+ }
+ csNewFieldName = csSub;
+ return TRUE;
}
-FX_BOOL CPDF_InterForm::ValidateFieldName(const CPDF_FormControl* pControl, CFX_WideString& csNewFieldName)
-{
- if (pControl == NULL || csNewFieldName.IsEmpty()) {
- return FALSE;
- }
- CPDF_FormField* pField = ((CPDF_FormControl*)pControl)->GetField();
- return ValidateFieldName(csNewFieldName, pField->GetFieldType(), pField, pControl);
+FX_BOOL CPDF_InterForm::ValidateFieldName(CFX_WideString& csNewFieldName,
+ int iType) {
+ return ValidateFieldName(csNewFieldName, iType, NULL, NULL);
}
-int CPDF_InterForm::CompareFieldName(const CFX_ByteString& name1, const CFX_ByteString& name2)
-{
- const FX_CHAR* ptr1 = name1;
- const FX_CHAR* ptr2 = name2;
- if (name1.GetLength() == name2.GetLength()) {
- return name1 == name2 ? 1 : 0;
- }
- int i = 0;
- while (ptr1[i] == ptr2[i]) {
- i ++;
- }
- if (i == name1.GetLength()) {
- return 2;
- }
- if (i == name2.GetLength()) {
- return 3;
- }
- return 0;
+FX_BOOL CPDF_InterForm::ValidateFieldName(const CPDF_FormField* pField,
+ CFX_WideString& csNewFieldName) {
+ if (pField == NULL || csNewFieldName.IsEmpty()) {
+ return FALSE;
+ }
+ return ValidateFieldName(
+ csNewFieldName, ((CPDF_FormField*)pField)->GetFieldType(), pField, NULL);
}
-int CPDF_InterForm::CompareFieldName(const CFX_WideString& name1, const CFX_WideString& name2)
-{
- const FX_WCHAR* ptr1 = name1.c_str();
- const FX_WCHAR* ptr2 = name2.c_str();
- if (name1.GetLength() == name2.GetLength()) {
- return name1 == name2 ? 1 : 0;
- }
- int i = 0;
- while (ptr1[i] == ptr2[i]) {
- i ++;
- }
- if (i == name1.GetLength()) {
- return 2;
- }
- if (i == name2.GetLength()) {
- return 3;
- }
+FX_BOOL CPDF_InterForm::ValidateFieldName(const CPDF_FormControl* pControl,
+ CFX_WideString& csNewFieldName) {
+ if (pControl == NULL || csNewFieldName.IsEmpty()) {
+ return FALSE;
+ }
+ CPDF_FormField* pField = ((CPDF_FormControl*)pControl)->GetField();
+ return ValidateFieldName(csNewFieldName, pField->GetFieldType(), pField,
+ pControl);
+}
+int CPDF_InterForm::CompareFieldName(const CFX_ByteString& name1,
+ const CFX_ByteString& name2) {
+ const FX_CHAR* ptr1 = name1;
+ const FX_CHAR* ptr2 = name2;
+ if (name1.GetLength() == name2.GetLength()) {
+ return name1 == name2 ? 1 : 0;
+ }
+ int i = 0;
+ while (ptr1[i] == ptr2[i]) {
+ i++;
+ }
+ if (i == name1.GetLength()) {
+ return 2;
+ }
+ if (i == name2.GetLength()) {
+ return 3;
+ }
+ return 0;
+}
+int CPDF_InterForm::CompareFieldName(const CFX_WideString& name1,
+ const CFX_WideString& name2) {
+ const FX_WCHAR* ptr1 = name1.c_str();
+ const FX_WCHAR* ptr2 = name2.c_str();
+ if (name1.GetLength() == name2.GetLength()) {
+ return name1 == name2 ? 1 : 0;
+ }
+ int i = 0;
+ while (ptr1[i] == ptr2[i]) {
+ i++;
+ }
+ if (i == name1.GetLength()) {
+ return 2;
+ }
+ if (i == name2.GetLength()) {
+ return 3;
+ }
+ return 0;
+}
+FX_DWORD CPDF_InterForm::CountFields(const CFX_WideString& csFieldName) {
+ if (csFieldName.IsEmpty()) {
+ return (FX_DWORD)m_pFieldTree->m_Root.CountFields();
+ }
+ CFieldTree::_Node* pNode = m_pFieldTree->FindNode(csFieldName);
+ if (pNode == NULL) {
return 0;
-}
-FX_DWORD CPDF_InterForm::CountFields(const CFX_WideString &csFieldName)
-{
- if (csFieldName.IsEmpty()) {
- return (FX_DWORD)m_pFieldTree->m_Root.CountFields();
- }
- CFieldTree::_Node *pNode = m_pFieldTree->FindNode(csFieldName);
- if (pNode == NULL) {
- return 0;
- }
- return pNode->CountFields();
-}
-CPDF_FormField* CPDF_InterForm::GetField(FX_DWORD index, const CFX_WideString &csFieldName)
-{
- if (csFieldName == L"") {
- return m_pFieldTree->m_Root.GetField(index);
- }
- CFieldTree::_Node *pNode = m_pFieldTree->FindNode(csFieldName);
- if (pNode == NULL) {
- return NULL;
- }
- return pNode->GetField(index);
-}
-void CPDF_InterForm::GetAllFieldNames(CFX_WideStringArray& allFieldNames)
-{
- allFieldNames.RemoveAll();
- int nCount = m_pFieldTree->m_Root.CountFields();
- for (int i = 0; i < nCount; i ++) {
- CPDF_FormField *pField = m_pFieldTree->m_Root.GetField(i);
- if (pField) {
- CFX_WideString full_name = GetFullName(pField->GetFieldDict());
- allFieldNames.Add(full_name);
- }
- }
-}
-FX_BOOL CPDF_InterForm::IsValidFormField(const void* pField)
-{
- if (pField == NULL) {
- return FALSE;
- }
- int nCount = m_pFieldTree->m_Root.CountFields();
- for (int i = 0; i < nCount; i++) {
- CPDF_FormField *pFormField = m_pFieldTree->m_Root.GetField(i);
- if (pField == pFormField) {
- return TRUE;
- }
- }
+ }
+ return pNode->CountFields();
+}
+CPDF_FormField* CPDF_InterForm::GetField(FX_DWORD index,
+ const CFX_WideString& csFieldName) {
+ if (csFieldName == L"") {
+ return m_pFieldTree->m_Root.GetField(index);
+ }
+ CFieldTree::_Node* pNode = m_pFieldTree->FindNode(csFieldName);
+ if (pNode == NULL) {
+ return NULL;
+ }
+ return pNode->GetField(index);
+}
+void CPDF_InterForm::GetAllFieldNames(CFX_WideStringArray& allFieldNames) {
+ allFieldNames.RemoveAll();
+ int nCount = m_pFieldTree->m_Root.CountFields();
+ for (int i = 0; i < nCount; i++) {
+ CPDF_FormField* pField = m_pFieldTree->m_Root.GetField(i);
+ if (pField) {
+ CFX_WideString full_name = GetFullName(pField->GetFieldDict());
+ allFieldNames.Add(full_name);
+ }
+ }
+}
+FX_BOOL CPDF_InterForm::IsValidFormField(const void* pField) {
+ if (pField == NULL) {
return FALSE;
-}
-CPDF_FormField* CPDF_InterForm::GetFieldByDict(CPDF_Dictionary* pFieldDict) const
-{
- if (pFieldDict == NULL) {
- return NULL;
- }
- CFX_WideString csWName = GetFullName(pFieldDict);
- return m_pFieldTree->GetField(csWName);
-}
-FX_DWORD CPDF_InterForm::CountControls(CFX_WideString csFieldName)
-{
- if (csFieldName.IsEmpty()) {
- return (FX_DWORD)m_ControlMap.GetCount();
- }
- CPDF_FormField *pField = m_pFieldTree->GetField(csFieldName);
- if (pField == NULL) {
- return 0;
- }
- return pField->m_ControlList.GetSize();
-}
-CPDF_FormControl* CPDF_InterForm::GetControl(FX_DWORD index, CFX_WideString csFieldName)
-{
- CPDF_FormField *pField = m_pFieldTree->GetField(csFieldName);
- if (pField == NULL) {
- return NULL;
- }
- if (index < (FX_DWORD)pField->m_ControlList.GetSize()) {
- return (CPDF_FormControl *)pField->m_ControlList.GetAt(index);
- }
+ }
+ int nCount = m_pFieldTree->m_Root.CountFields();
+ for (int i = 0; i < nCount; i++) {
+ CPDF_FormField* pFormField = m_pFieldTree->m_Root.GetField(i);
+ if (pField == pFormField) {
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+CPDF_FormField* CPDF_InterForm::GetFieldByDict(
+ CPDF_Dictionary* pFieldDict) const {
+ if (pFieldDict == NULL) {
return NULL;
+ }
+ CFX_WideString csWName = GetFullName(pFieldDict);
+ return m_pFieldTree->GetField(csWName);
+}
+FX_DWORD CPDF_InterForm::CountControls(CFX_WideString csFieldName) {
+ if (csFieldName.IsEmpty()) {
+ return (FX_DWORD)m_ControlMap.GetCount();
+ }
+ CPDF_FormField* pField = m_pFieldTree->GetField(csFieldName);
+ if (pField == NULL) {
+ return 0;
+ }
+ return pField->m_ControlList.GetSize();
}
-FX_BOOL CPDF_InterForm::IsValidFormControl(const void* pControl)
-{
- if (pControl == NULL) {
- return FALSE;
- }
- FX_POSITION pos = m_ControlMap.GetStartPosition();
- while (pos) {
- CPDF_Dictionary* pWidgetDict = NULL;
- void* pFormControl = NULL;
- m_ControlMap.GetNextAssoc(pos, (void*&)pWidgetDict, pFormControl);
- if (pControl == pFormControl) {
- return TRUE;
- }
- }
+CPDF_FormControl* CPDF_InterForm::GetControl(FX_DWORD index,
+ CFX_WideString csFieldName) {
+ CPDF_FormField* pField = m_pFieldTree->GetField(csFieldName);
+ if (pField == NULL) {
+ return NULL;
+ }
+ if (index < (FX_DWORD)pField->m_ControlList.GetSize()) {
+ return (CPDF_FormControl*)pField->m_ControlList.GetAt(index);
+ }
+ return NULL;
+}
+FX_BOOL CPDF_InterForm::IsValidFormControl(const void* pControl) {
+ if (pControl == NULL) {
return FALSE;
-}
-int CPDF_InterForm::CountPageControls(CPDF_Page* pPage) const
-{
- CPDF_Array* pAnnotList = pPage->m_pFormDict->GetArray("Annots");
- if (pAnnotList == NULL) {
- return 0;
- }
- int count = 0;
- for (FX_DWORD i = 0; i < pAnnotList->GetCount(); i ++) {
- CPDF_Dictionary* pAnnot = pAnnotList->GetDict(i);
- if (pAnnot == NULL) {
- continue;
- }
- CPDF_FormControl* pControl;
- if (!m_ControlMap.Lookup(pAnnot, (void*&)pControl)) {
- continue;
- }
- count ++;
- }
- return count;
-}
-CPDF_FormControl* CPDF_InterForm::GetPageControl(CPDF_Page* pPage, int index) const
-{
- CPDF_Array* pAnnotList = pPage->m_pFormDict->GetArray("Annots");
- if (pAnnotList == NULL) {
- return NULL;
- }
- int count = 0;
- for (FX_DWORD i = 0; i < pAnnotList->GetCount(); i ++) {
- CPDF_Dictionary* pAnnot = pAnnotList->GetDict(i);
- if (pAnnot == NULL) {
- continue;
- }
- CPDF_FormControl* pControl;
- if (!m_ControlMap.Lookup(pAnnot, (void*&)pControl)) {
- continue;
- }
- if (index == count) {
- return pControl;
- }
- count ++;
- }
+ }
+ FX_POSITION pos = m_ControlMap.GetStartPosition();
+ while (pos) {
+ CPDF_Dictionary* pWidgetDict = NULL;
+ void* pFormControl = NULL;
+ m_ControlMap.GetNextAssoc(pos, (void*&)pWidgetDict, pFormControl);
+ if (pControl == pFormControl) {
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+int CPDF_InterForm::CountPageControls(CPDF_Page* pPage) const {
+ CPDF_Array* pAnnotList = pPage->m_pFormDict->GetArray("Annots");
+ if (pAnnotList == NULL) {
+ return 0;
+ }
+ int count = 0;
+ for (FX_DWORD i = 0; i < pAnnotList->GetCount(); i++) {
+ CPDF_Dictionary* pAnnot = pAnnotList->GetDict(i);
+ if (pAnnot == NULL) {
+ continue;
+ }
+ CPDF_FormControl* pControl;
+ if (!m_ControlMap.Lookup(pAnnot, (void*&)pControl)) {
+ continue;
+ }
+ count++;
+ }
+ return count;
+}
+CPDF_FormControl* CPDF_InterForm::GetPageControl(CPDF_Page* pPage,
+ int index) const {
+ CPDF_Array* pAnnotList = pPage->m_pFormDict->GetArray("Annots");
+ if (pAnnotList == NULL) {
return NULL;
-}
-CPDF_FormControl* CPDF_InterForm::GetControlAtPoint(CPDF_Page* pPage, FX_FLOAT pdf_x, FX_FLOAT pdf_y) const
-{
- CPDF_Array* pAnnotList = pPage->m_pFormDict->GetArray("Annots");
- if (pAnnotList == NULL) {
- return NULL;
- }
- for (FX_DWORD i = pAnnotList->GetCount(); i > 0; i --) {
- CPDF_Dictionary* pAnnot = pAnnotList->GetDict(i - 1);
- if (pAnnot == NULL) {
- continue;
- }
- CPDF_FormControl* pControl;
- if (!m_ControlMap.Lookup(pAnnot, (void*&)pControl)) {
- continue;
- }
- CFX_FloatRect rect = pControl->GetRect();
- if (rect.Contains(pdf_x, pdf_y)) {
- return pControl;
- }
- }
+ }
+ int count = 0;
+ for (FX_DWORD i = 0; i < pAnnotList->GetCount(); i++) {
+ CPDF_Dictionary* pAnnot = pAnnotList->GetDict(i);
+ if (pAnnot == NULL) {
+ continue;
+ }
+ CPDF_FormControl* pControl;
+ if (!m_ControlMap.Lookup(pAnnot, (void*&)pControl)) {
+ continue;
+ }
+ if (index == count) {
+ return pControl;
+ }
+ count++;
+ }
+ return NULL;
+}
+CPDF_FormControl* CPDF_InterForm::GetControlAtPoint(CPDF_Page* pPage,
+ FX_FLOAT pdf_x,
+ FX_FLOAT pdf_y) const {
+ CPDF_Array* pAnnotList = pPage->m_pFormDict->GetArray("Annots");
+ if (pAnnotList == NULL) {
return NULL;
-}
-CPDF_FormControl* CPDF_InterForm::GetControlByDict(CPDF_Dictionary* pWidgetDict) const
-{
- CPDF_FormControl* pControl = NULL;
- m_ControlMap.Lookup(pWidgetDict, (void*&)pControl);
- return pControl;
-}
-FX_DWORD CPDF_InterForm::CountInternalFields(const CFX_WideString& csFieldName) const
-{
- if (!m_pFormDict) {
- return 0;
- }
- CPDF_Array* pArray = m_pFormDict->GetArray("Fields");
- if (!pArray) {
- return 0;
- }
- if (csFieldName.IsEmpty()) {
- return pArray->GetCount();
- }
- int iLength = csFieldName.GetLength();
- int iPos = 0;
- CPDF_Dictionary* pDict = NULL;
- while (pArray != NULL) {
- CFX_WideString csSub;
- if (iPos < iLength && csFieldName[iPos] == L'.') {
- iPos ++;
- }
- while (iPos < iLength && csFieldName[iPos] != L'.') {
- csSub += csFieldName[iPos ++];
- }
- int iCount = pArray->GetCount();
- FX_BOOL bFind = FALSE;
- for (int i = 0; i < iCount; i ++) {
- pDict = pArray->GetDict(i);
- if (pDict == NULL) {
- continue;
- }
- CFX_WideString csT = pDict->GetUnicodeText("T");
- if (csT == csSub) {
- bFind = TRUE;
- break;
- }
- }
- if (!bFind) {
- return 0;
- }
- if (iPos >= iLength) {
- break;
- }
- pArray = pDict->GetArray("Kids");
- }
- if (!pDict) {
- return 0;
+ }
+ for (FX_DWORD i = pAnnotList->GetCount(); i > 0; i--) {
+ CPDF_Dictionary* pAnnot = pAnnotList->GetDict(i - 1);
+ if (pAnnot == NULL) {
+ continue;
+ }
+ CPDF_FormControl* pControl;
+ if (!m_ControlMap.Lookup(pAnnot, (void*&)pControl)) {
+ continue;
+ }
+ CFX_FloatRect rect = pControl->GetRect();
+ if (rect.Contains(pdf_x, pdf_y)) {
+ return pControl;
+ }
+ }
+ return NULL;
+}
+CPDF_FormControl* CPDF_InterForm::GetControlByDict(
+ CPDF_Dictionary* pWidgetDict) const {
+ CPDF_FormControl* pControl = NULL;
+ m_ControlMap.Lookup(pWidgetDict, (void*&)pControl);
+ return pControl;
+}
+FX_DWORD CPDF_InterForm::CountInternalFields(
+ const CFX_WideString& csFieldName) const {
+ if (!m_pFormDict) {
+ return 0;
+ }
+ CPDF_Array* pArray = m_pFormDict->GetArray("Fields");
+ if (!pArray) {
+ return 0;
+ }
+ if (csFieldName.IsEmpty()) {
+ return pArray->GetCount();
+ }
+ int iLength = csFieldName.GetLength();
+ int iPos = 0;
+ CPDF_Dictionary* pDict = NULL;
+ while (pArray != NULL) {
+ CFX_WideString csSub;
+ if (iPos < iLength && csFieldName[iPos] == L'.') {
+ iPos++;
+ }
+ while (iPos < iLength && csFieldName[iPos] != L'.') {
+ csSub += csFieldName[iPos++];
+ }
+ int iCount = pArray->GetCount();
+ FX_BOOL bFind = FALSE;
+ for (int i = 0; i < iCount; i++) {
+ pDict = pArray->GetDict(i);
+ if (pDict == NULL) {
+ continue;
+ }
+ CFX_WideString csT = pDict->GetUnicodeText("T");
+ if (csT == csSub) {
+ bFind = TRUE;
+ break;
+ }
+ }
+ if (!bFind) {
+ return 0;
+ }
+ if (iPos >= iLength) {
+ break;
}
pArray = pDict->GetArray("Kids");
- return pArray ? pArray->GetCount() : 1;
+ }
+ if (!pDict) {
+ return 0;
+ }
+ pArray = pDict->GetArray("Kids");
+ return pArray ? pArray->GetCount() : 1;
}
-CPDF_Dictionary* CPDF_InterForm::GetInternalField(FX_DWORD index, const CFX_WideString& csFieldName) const
-{
- if (!m_pFormDict) {
- return nullptr;
- }
- CPDF_Array* pArray = m_pFormDict->GetArray("Fields");
- if (!pArray) {
- return nullptr;
- }
- if (csFieldName.IsEmpty()) {
- return pArray->GetDict(index);
- }
- int iLength = csFieldName.GetLength();
- int iPos = 0;
- CPDF_Dictionary* pDict = NULL;
- while (pArray != NULL) {
- CFX_WideString csSub;
- if (iPos < iLength && csFieldName[iPos] == L'.') {
- iPos ++;
- }
- while (iPos < iLength && csFieldName[iPos] != L'.') {
- csSub += csFieldName[iPos ++];
- }
- int iCount = pArray->GetCount();
- FX_BOOL bFind = FALSE;
- for (int i = 0; i < iCount; i ++) {
- pDict = pArray->GetDict(i);
- if (pDict == NULL) {
- continue;
- }
- CFX_WideString csT = pDict->GetUnicodeText("T");
- if (csT == csSub) {
- bFind = TRUE;
- break;
- }
- }
- if (!bFind) {
- return NULL;
- }
- if (iPos >= iLength) {
- break;
- }
- pArray = pDict->GetArray("Kids");
- }
- if (!pDict) {
- return nullptr;
+CPDF_Dictionary* CPDF_InterForm::GetInternalField(
+ FX_DWORD index,
+ const CFX_WideString& csFieldName) const {
+ if (!m_pFormDict) {
+ return nullptr;
+ }
+ CPDF_Array* pArray = m_pFormDict->GetArray("Fields");
+ if (!pArray) {
+ return nullptr;
+ }
+ if (csFieldName.IsEmpty()) {
+ return pArray->GetDict(index);
+ }
+ int iLength = csFieldName.GetLength();
+ int iPos = 0;
+ CPDF_Dictionary* pDict = NULL;
+ while (pArray != NULL) {
+ CFX_WideString csSub;
+ if (iPos < iLength && csFieldName[iPos] == L'.') {
+ iPos++;
+ }
+ while (iPos < iLength && csFieldName[iPos] != L'.') {
+ csSub += csFieldName[iPos++];
+ }
+ int iCount = pArray->GetCount();
+ FX_BOOL bFind = FALSE;
+ for (int i = 0; i < iCount; i++) {
+ pDict = pArray->GetDict(i);
+ if (pDict == NULL) {
+ continue;
+ }
+ CFX_WideString csT = pDict->GetUnicodeText("T");
+ if (csT == csSub) {
+ bFind = TRUE;
+ break;
+ }
+ }
+ if (!bFind) {
+ return NULL;
+ }
+ if (iPos >= iLength) {
+ break;
}
pArray = pDict->GetArray("Kids");
- return pArray ? pArray->GetDict(index) : pDict;
-}
-FX_BOOL CPDF_InterForm::NeedConstructAP()
-{
- if (m_pFormDict == NULL) {
- return FALSE;
- }
- return m_pFormDict->GetBoolean("NeedAppearances");
-}
-void CPDF_InterForm::NeedConstructAP(FX_BOOL bNeedAP)
-{
- if (m_pFormDict == NULL) {
- InitInterFormDict(m_pFormDict, m_pDocument);
- }
- m_pFormDict->SetAtBoolean("NeedAppearances", bNeedAP);
- m_bGenerateAP = bNeedAP;
-}
-int CPDF_InterForm::CountFieldsInCalculationOrder()
-{
- if (m_pFormDict == NULL) {
- return 0;
- }
- CPDF_Array* pArray = m_pFormDict->GetArray("CO");
- if (pArray == NULL) {
- return 0;
- }
- return pArray->GetCount();
+ }
+ if (!pDict) {
+ return nullptr;
+ }
+ pArray = pDict->GetArray("Kids");
+ return pArray ? pArray->GetDict(index) : pDict;
+}
+FX_BOOL CPDF_InterForm::NeedConstructAP() {
+ if (m_pFormDict == NULL) {
+ return FALSE;
+ }
+ return m_pFormDict->GetBoolean("NeedAppearances");
+}
+void CPDF_InterForm::NeedConstructAP(FX_BOOL bNeedAP) {
+ if (m_pFormDict == NULL) {
+ InitInterFormDict(m_pFormDict, m_pDocument);
+ }
+ m_pFormDict->SetAtBoolean("NeedAppearances", bNeedAP);
+ m_bGenerateAP = bNeedAP;
+}
+int CPDF_InterForm::CountFieldsInCalculationOrder() {
+ if (m_pFormDict == NULL) {
+ return 0;
+ }
+ CPDF_Array* pArray = m_pFormDict->GetArray("CO");
+ if (pArray == NULL) {
+ return 0;
+ }
+ return pArray->GetCount();
}
-CPDF_FormField* CPDF_InterForm::GetFieldInCalculationOrder(int index)
-{
- if (m_pFormDict == NULL || index < 0) {
- return NULL;
- }
- CPDF_Array* pArray = m_pFormDict->GetArray("CO");
- if (pArray == NULL) {
- return NULL;
- }
- CPDF_Object* pElement = pArray->GetElementValue(index);
- if (pElement != NULL && pElement->GetType() == PDFOBJ_DICTIONARY) {
- return GetFieldByDict((CPDF_Dictionary*)pElement);
- }
+CPDF_FormField* CPDF_InterForm::GetFieldInCalculationOrder(int index) {
+ if (m_pFormDict == NULL || index < 0) {
return NULL;
-}
-int CPDF_InterForm::FindFieldInCalculationOrder(const CPDF_FormField* pField)
-{
- if (m_pFormDict == NULL || pField == NULL) {
- return -1;
- }
- CPDF_Array* pArray = m_pFormDict->GetArray("CO");
- if (pArray == NULL) {
- return -1;
- }
- for (FX_DWORD i = 0; i < pArray->GetCount(); i ++) {
- CPDF_Object* pElement = pArray->GetElementValue(i);
- if (pElement == pField->m_pDict) {
- return i;
- }
- }
+ }
+ CPDF_Array* pArray = m_pFormDict->GetArray("CO");
+ if (pArray == NULL) {
+ return NULL;
+ }
+ CPDF_Object* pElement = pArray->GetElementValue(index);
+ if (pElement != NULL && pElement->GetType() == PDFOBJ_DICTIONARY) {
+ return GetFieldByDict((CPDF_Dictionary*)pElement);
+ }
+ return NULL;
+}
+int CPDF_InterForm::FindFieldInCalculationOrder(const CPDF_FormField* pField) {
+ if (m_pFormDict == NULL || pField == NULL) {
return -1;
-}
-FX_DWORD CPDF_InterForm::CountFormFonts()
-{
- return CountInterFormFonts(m_pFormDict);
-}
-CPDF_Font* CPDF_InterForm::GetFormFont(FX_DWORD index, CFX_ByteString& csNameTag)
-{
- return GetInterFormFont(m_pFormDict, m_pDocument, index, csNameTag);
-}
-CPDF_Font* CPDF_InterForm::GetFormFont(CFX_ByteString csNameTag)
-{
- return GetInterFormFont(m_pFormDict, m_pDocument, csNameTag);
-}
-CPDF_Font* CPDF_InterForm::GetFormFont(CFX_ByteString csFontName, CFX_ByteString& csNameTag)
-{
- return GetInterFormFont(m_pFormDict, m_pDocument, csFontName, csNameTag);
-}
-CPDF_Font* CPDF_InterForm::GetNativeFormFont(uint8_t charSet, CFX_ByteString& csNameTag)
-{
- return GetNativeInterFormFont(m_pFormDict, m_pDocument, charSet, csNameTag);
-}
-CPDF_Font* CPDF_InterForm::GetNativeFormFont(CFX_ByteString& csNameTag)
-{
- return GetNativeInterFormFont(m_pFormDict, m_pDocument, csNameTag);
-}
-FX_BOOL CPDF_InterForm::FindFormFont(const CPDF_Font* pFont, CFX_ByteString& csNameTag)
-{
- return FindInterFormFont(m_pFormDict, pFont, csNameTag);
-}
-FX_BOOL CPDF_InterForm::FindFormFont(CFX_ByteString csFontName, CPDF_Font*& pFont, CFX_ByteString& csNameTag)
-{
- return FindInterFormFont(m_pFormDict, m_pDocument, csFontName, pFont, csNameTag);
-}
-void CPDF_InterForm::AddFormFont(const CPDF_Font* pFont, CFX_ByteString& csNameTag)
-{
- AddInterFormFont(m_pFormDict, m_pDocument, pFont, csNameTag);
- m_bUpdated = TRUE;
-}
-CPDF_Font* CPDF_InterForm::AddNativeFormFont(uint8_t charSet, CFX_ByteString& csNameTag)
-{
- m_bUpdated = TRUE;
- return AddNativeInterFormFont(m_pFormDict, m_pDocument, charSet, csNameTag);
-}
-CPDF_Font* CPDF_InterForm::AddNativeFormFont(CFX_ByteString& csNameTag)
-{
- m_bUpdated = TRUE;
- return AddNativeInterFormFont(m_pFormDict, m_pDocument, csNameTag);
-}
-void CPDF_InterForm::RemoveFormFont(const CPDF_Font* pFont)
-{
- m_bUpdated = TRUE;
- RemoveInterFormFont(m_pFormDict, pFont);
-}
-void CPDF_InterForm::RemoveFormFont(CFX_ByteString csNameTag)
-{
- m_bUpdated = TRUE;
- RemoveInterFormFont(m_pFormDict, csNameTag);
-}
-CPDF_DefaultAppearance CPDF_InterForm::GetDefaultAppearance()
-{
- CFX_ByteString csDA;
- if (m_pFormDict == NULL) {
- return csDA;
- }
- csDA = m_pFormDict->GetString("DA");
+ }
+ CPDF_Array* pArray = m_pFormDict->GetArray("CO");
+ if (pArray == NULL) {
+ return -1;
+ }
+ for (FX_DWORD i = 0; i < pArray->GetCount(); i++) {
+ CPDF_Object* pElement = pArray->GetElementValue(i);
+ if (pElement == pField->m_pDict) {
+ return i;
+ }
+ }
+ return -1;
+}
+FX_DWORD CPDF_InterForm::CountFormFonts() {
+ return CountInterFormFonts(m_pFormDict);
+}
+CPDF_Font* CPDF_InterForm::GetFormFont(FX_DWORD index,
+ CFX_ByteString& csNameTag) {
+ return GetInterFormFont(m_pFormDict, m_pDocument, index, csNameTag);
+}
+CPDF_Font* CPDF_InterForm::GetFormFont(CFX_ByteString csNameTag) {
+ return GetInterFormFont(m_pFormDict, m_pDocument, csNameTag);
+}
+CPDF_Font* CPDF_InterForm::GetFormFont(CFX_ByteString csFontName,
+ CFX_ByteString& csNameTag) {
+ return GetInterFormFont(m_pFormDict, m_pDocument, csFontName, csNameTag);
+}
+CPDF_Font* CPDF_InterForm::GetNativeFormFont(uint8_t charSet,
+ CFX_ByteString& csNameTag) {
+ return GetNativeInterFormFont(m_pFormDict, m_pDocument, charSet, csNameTag);
+}
+CPDF_Font* CPDF_InterForm::GetNativeFormFont(CFX_ByteString& csNameTag) {
+ return GetNativeInterFormFont(m_pFormDict, m_pDocument, csNameTag);
+}
+FX_BOOL CPDF_InterForm::FindFormFont(const CPDF_Font* pFont,
+ CFX_ByteString& csNameTag) {
+ return FindInterFormFont(m_pFormDict, pFont, csNameTag);
+}
+FX_BOOL CPDF_InterForm::FindFormFont(CFX_ByteString csFontName,
+ CPDF_Font*& pFont,
+ CFX_ByteString& csNameTag) {
+ return FindInterFormFont(m_pFormDict, m_pDocument, csFontName, pFont,
+ csNameTag);
+}
+void CPDF_InterForm::AddFormFont(const CPDF_Font* pFont,
+ CFX_ByteString& csNameTag) {
+ AddInterFormFont(m_pFormDict, m_pDocument, pFont, csNameTag);
+ m_bUpdated = TRUE;
+}
+CPDF_Font* CPDF_InterForm::AddNativeFormFont(uint8_t charSet,
+ CFX_ByteString& csNameTag) {
+ m_bUpdated = TRUE;
+ return AddNativeInterFormFont(m_pFormDict, m_pDocument, charSet, csNameTag);
+}
+CPDF_Font* CPDF_InterForm::AddNativeFormFont(CFX_ByteString& csNameTag) {
+ m_bUpdated = TRUE;
+ return AddNativeInterFormFont(m_pFormDict, m_pDocument, csNameTag);
+}
+void CPDF_InterForm::RemoveFormFont(const CPDF_Font* pFont) {
+ m_bUpdated = TRUE;
+ RemoveInterFormFont(m_pFormDict, pFont);
+}
+void CPDF_InterForm::RemoveFormFont(CFX_ByteString csNameTag) {
+ m_bUpdated = TRUE;
+ RemoveInterFormFont(m_pFormDict, csNameTag);
+}
+CPDF_DefaultAppearance CPDF_InterForm::GetDefaultAppearance() {
+ CFX_ByteString csDA;
+ if (m_pFormDict == NULL) {
return csDA;
+ }
+ csDA = m_pFormDict->GetString("DA");
+ return csDA;
}
-CPDF_Font* CPDF_InterForm::GetDefaultFormFont()
-{
- return GetDefaultInterFormFont(m_pFormDict, m_pDocument);
+CPDF_Font* CPDF_InterForm::GetDefaultFormFont() {
+ return GetDefaultInterFormFont(m_pFormDict, m_pDocument);
}
-int CPDF_InterForm::GetFormAlignment()
-{
- if (m_pFormDict == NULL) {
- return 0;
- }
- return m_pFormDict->GetInteger("Q", 0);
-}
-FX_BOOL CPDF_InterForm::ResetForm(const CFX_PtrArray& fields, FX_BOOL bIncludeOrExclude, FX_BOOL bNotify)
-{
- if (bNotify && m_pFormNotify != NULL) {
- int iRet = m_pFormNotify->BeforeFormReset(this);
- if (iRet < 0) {
- return FALSE;
- }
- }
- int nCount = m_pFieldTree->m_Root.CountFields();
- for (int i = 0; i < nCount; i++) {
- CPDF_FormField* pField = m_pFieldTree->m_Root.GetField(i);
- if (pField == NULL) {
- continue;
- }
- FX_BOOL bFind = FALSE;
- int iCount = fields.GetSize();
- for (int i = 0; i < iCount; i ++) {
- if (pField == (CPDF_FormField*)fields[i]) {
- bFind = TRUE;
- break;
- }
- }
- if ((bIncludeOrExclude && bFind) || (!bIncludeOrExclude && !bFind)) {
- pField->ResetField(bNotify);
- }
- }
- if (bNotify && m_pFormNotify != NULL) {
- m_pFormNotify->AfterFormReset(this);
+int CPDF_InterForm::GetFormAlignment() {
+ if (m_pFormDict == NULL) {
+ return 0;
+ }
+ return m_pFormDict->GetInteger("Q", 0);
+}
+FX_BOOL CPDF_InterForm::ResetForm(const CFX_PtrArray& fields,
+ FX_BOOL bIncludeOrExclude,
+ FX_BOOL bNotify) {
+ if (bNotify && m_pFormNotify != NULL) {
+ int iRet = m_pFormNotify->BeforeFormReset(this);
+ if (iRet < 0) {
+ return FALSE;
+ }
+ }
+ int nCount = m_pFieldTree->m_Root.CountFields();
+ for (int i = 0; i < nCount; i++) {
+ CPDF_FormField* pField = m_pFieldTree->m_Root.GetField(i);
+ if (pField == NULL) {
+ continue;
+ }
+ FX_BOOL bFind = FALSE;
+ int iCount = fields.GetSize();
+ for (int i = 0; i < iCount; i++) {
+ if (pField == (CPDF_FormField*)fields[i]) {
+ bFind = TRUE;
+ break;
+ }
+ }
+ if ((bIncludeOrExclude && bFind) || (!bIncludeOrExclude && !bFind)) {
+ pField->ResetField(bNotify);
+ }
+ }
+ if (bNotify && m_pFormNotify != NULL) {
+ m_pFormNotify->AfterFormReset(this);
+ }
+ return TRUE;
+}
+FX_BOOL CPDF_InterForm::ResetForm(FX_BOOL bNotify) {
+ if (bNotify && m_pFormNotify != NULL) {
+ int iRet = m_pFormNotify->BeforeFormReset(this);
+ if (iRet < 0) {
+ return FALSE;
+ }
+ }
+ int nCount = m_pFieldTree->m_Root.CountFields();
+ for (int i = 0; i < nCount; i++) {
+ CPDF_FormField* pField = m_pFieldTree->m_Root.GetField(i);
+ if (pField == NULL) {
+ continue;
+ }
+ pField->ResetField(bNotify);
+ }
+ if (bNotify && m_pFormNotify != NULL) {
+ m_pFormNotify->AfterFormReset(this);
+ }
+ return TRUE;
+}
+void CPDF_InterForm::ReloadForm() {
+ FX_POSITION pos = m_ControlMap.GetStartPosition();
+ while (pos) {
+ CPDF_Dictionary* pWidgetDict;
+ CPDF_FormControl* pControl;
+ m_ControlMap.GetNextAssoc(pos, (void*&)pWidgetDict, (void*&)pControl);
+ delete pControl;
+ }
+ m_ControlMap.RemoveAll();
+ int nCount = m_pFieldTree->m_Root.CountFields();
+ for (int k = 0; k < nCount; k++) {
+ CPDF_FormField* pField = m_pFieldTree->m_Root.GetField(k);
+ delete pField;
+ }
+ m_pFieldTree->RemoveAll();
+ if (m_pFormDict == NULL) {
+ return;
+ }
+ CPDF_Array* pFields = m_pFormDict->GetArray("Fields");
+ if (pFields == NULL) {
+ return;
+ }
+ int iCount = pFields->GetCount();
+ for (int i = 0; i < iCount; i++) {
+ LoadField(pFields->GetDict(i));
+ }
+}
+void CPDF_InterForm::LoadField(CPDF_Dictionary* pFieldDict, int nLevel) {
+ if (nLevel > nMaxRecursion) {
+ return;
+ }
+ if (pFieldDict == NULL) {
+ return;
+ }
+ FX_DWORD dwParentObjNum = pFieldDict->GetObjNum();
+ CPDF_Array* pKids = pFieldDict->GetArray("Kids");
+ if (!pKids) {
+ AddTerminalField(pFieldDict);
+ return;
+ }
+ CPDF_Dictionary* pFirstKid = pKids->GetDict(0);
+ if (pFirstKid == NULL) {
+ return;
+ }
+ if (pFirstKid->KeyExist("T") || pFirstKid->KeyExist("Kids")) {
+ for (FX_DWORD i = 0; i < pKids->GetCount(); i++) {
+ CPDF_Dictionary* pChildDict = pKids->GetDict(i);
+ if (pChildDict) {
+ if (pChildDict->GetObjNum() != dwParentObjNum) {
+ LoadField(pChildDict, nLevel + 1);
+ }
+ }
+ }
+ } else {
+ AddTerminalField(pFieldDict);
+ }
+}
+FX_BOOL CPDF_InterForm::HasXFAForm() const {
+ return m_pFormDict && m_pFormDict->GetArray(FX_BSTRC("XFA")) != NULL;
+}
+void CPDF_InterForm::FixPageFields(const CPDF_Page* pPage) {
+ ASSERT(pPage != NULL);
+ CPDF_Dictionary* pPageDict = pPage->m_pFormDict;
+ if (pPageDict == NULL) {
+ return;
+ }
+ CPDF_Array* pAnnots = pPageDict->GetArray(FX_BSTRC("Annots"));
+ if (pAnnots == NULL) {
+ return;
+ }
+ int iAnnotCount = pAnnots->GetCount();
+ for (int i = 0; i < iAnnotCount; i++) {
+ CPDF_Dictionary* pAnnot = pAnnots->GetDict(i);
+ if (pAnnot != NULL && pAnnot->GetString(FX_BSTRC("Subtype")) == "Widget") {
+ LoadField(pAnnot);
+ }
+ }
+}
+CPDF_FormField* CPDF_InterForm::AddTerminalField(
+ const CPDF_Dictionary* pFieldDict) {
+ if (!pFieldDict->KeyExist(FX_BSTRC("T"))) {
+ return NULL;
+ }
+ CPDF_Dictionary* pDict = (CPDF_Dictionary*)pFieldDict;
+ CFX_WideString csWName = GetFullName(pDict);
+ if (csWName.IsEmpty()) {
+ return NULL;
+ }
+ CPDF_FormField* pField = NULL;
+ pField = m_pFieldTree->GetField(csWName);
+ if (pField == NULL) {
+ CPDF_Dictionary* pParent = (CPDF_Dictionary*)pFieldDict;
+ if (!pFieldDict->KeyExist(FX_BSTRC("T")) &&
+ pFieldDict->GetString(FX_BSTRC("Subtype")) == FX_BSTRC("Widget")) {
+ pParent = pFieldDict->GetDict(FX_BSTRC("Parent"));
+ if (!pParent) {
+ pParent = (CPDF_Dictionary*)pFieldDict;
+ }
+ }
+ if (pParent && pParent != pFieldDict &&
+ !pParent->KeyExist(FX_BSTRC("FT"))) {
+ if (pFieldDict->KeyExist(FX_BSTRC("FT"))) {
+ CPDF_Object* pFTValue = pFieldDict->GetElementValue(FX_BSTRC("FT"));
+ if (pFTValue) {
+ pParent->SetAt(FX_BSTRC("FT"), pFTValue->Clone());
+ }
+ }
+ if (pFieldDict->KeyExist(FX_BSTRC("Ff"))) {
+ CPDF_Object* pFfValue = pFieldDict->GetElementValue(FX_BSTRC("Ff"));
+ if (pFfValue) {
+ pParent->SetAt(FX_BSTRC("Ff"), pFfValue->Clone());
+ }
+ }
+ }
+ pField = new CPDF_FormField(this, pParent);
+ CPDF_Object* pTObj = pDict->GetElement("T");
+ if (pTObj && pTObj->GetType() == PDFOBJ_REFERENCE) {
+ CPDF_Object* pClone = pTObj->Clone(TRUE);
+ if (pClone) {
+ pDict->SetAt("T", pClone);
+ } else {
+ pDict->SetAtName("T", "");
+ }
+ }
+ m_pFieldTree->SetField(csWName, pField);
+ }
+ CPDF_Array* pKids = pFieldDict->GetArray("Kids");
+ if (pKids == NULL) {
+ if (pFieldDict->GetString("Subtype") == "Widget") {
+ AddControl(pField, pFieldDict);
+ }
+ } else {
+ for (FX_DWORD i = 0; i < pKids->GetCount(); i++) {
+ CPDF_Dictionary* pKid = pKids->GetDict(i);
+ if (pKid == NULL) {
+ continue;
+ }
+ if (pKid->GetString("Subtype") != "Widget") {
+ continue;
+ }
+ AddControl(pField, pKid);
+ }
+ }
+ return pField;
+}
+CPDF_FormControl* CPDF_InterForm::AddControl(
+ const CPDF_FormField* pField,
+ const CPDF_Dictionary* pWidgetDict) {
+ void* rValue = NULL;
+ if (m_ControlMap.Lookup((CPDF_Dictionary*)pWidgetDict, rValue)) {
+ return (CPDF_FormControl*)rValue;
+ }
+ CPDF_FormControl* pControl = new CPDF_FormControl(
+ (CPDF_FormField*)pField, (CPDF_Dictionary*)pWidgetDict);
+ m_ControlMap.SetAt((CPDF_Dictionary*)pWidgetDict, pControl);
+ ((CPDF_FormField*)pField)->m_ControlList.Add(pControl);
+ return pControl;
+}
+CPDF_FormField* CPDF_InterForm::CheckRequiredFields(
+ const CFX_PtrArray* fields,
+ FX_BOOL bIncludeOrExclude) const {
+ int nCount = m_pFieldTree->m_Root.CountFields();
+ for (int i = 0; i < nCount; i++) {
+ CPDF_FormField* pField = m_pFieldTree->m_Root.GetField(i);
+ if (pField == NULL) {
+ continue;
}
- return TRUE;
-}
-FX_BOOL CPDF_InterForm::ResetForm(FX_BOOL bNotify)
-{
- if (bNotify && m_pFormNotify != NULL) {
- int iRet = m_pFormNotify->BeforeFormReset(this);
- if (iRet < 0) {
- return FALSE;
- }
+ int32_t iType = pField->GetType();
+ if (iType == CPDF_FormField::PushButton ||
+ iType == CPDF_FormField::CheckBox || iType == CPDF_FormField::ListBox) {
+ continue;
}
- int nCount = m_pFieldTree->m_Root.CountFields();
- for (int i = 0; i < nCount; i++) {
- CPDF_FormField* pField = m_pFieldTree->m_Root.GetField(i);
- if (pField == NULL) {
- continue;
- }
- pField->ResetField(bNotify);
+ FX_DWORD dwFlags = pField->GetFieldFlags();
+ if (dwFlags & 0x04) {
+ continue;
}
- if (bNotify && m_pFormNotify != NULL) {
- m_pFormNotify->AfterFormReset(this);
+ FX_BOOL bFind = TRUE;
+ if (fields != NULL) {
+ bFind = fields->Find(pField, 0) >= 0;
}
- return TRUE;
-}
-void CPDF_InterForm::ReloadForm()
-{
- FX_POSITION pos = m_ControlMap.GetStartPosition();
- while (pos) {
- CPDF_Dictionary* pWidgetDict;
- CPDF_FormControl* pControl;
- m_ControlMap.GetNextAssoc(pos, (void*&)pWidgetDict, (void*&)pControl);
- delete pControl;
- }
- m_ControlMap.RemoveAll();
- int nCount = m_pFieldTree->m_Root.CountFields();
- for (int k = 0; k < nCount; k ++) {
- CPDF_FormField* pField = m_pFieldTree->m_Root.GetField(k);
- delete pField;
- }
- m_pFieldTree->RemoveAll();
- if (m_pFormDict == NULL) {
- return;
- }
- CPDF_Array* pFields = m_pFormDict->GetArray("Fields");
- if (pFields == NULL) {
- return;
- }
- int iCount = pFields->GetCount();
- for (int i = 0; i < iCount; i ++) {
- LoadField(pFields->GetDict(i));
- }
-}
-void CPDF_InterForm::LoadField(CPDF_Dictionary* pFieldDict, int nLevel)
-{
- if (nLevel > nMaxRecursion) {
- return;
- }
- if (pFieldDict == NULL) {
- return;
- }
- FX_DWORD dwParentObjNum = pFieldDict->GetObjNum();
- CPDF_Array* pKids = pFieldDict->GetArray("Kids");
- if (!pKids) {
- AddTerminalField(pFieldDict);
- return;
- }
- CPDF_Dictionary* pFirstKid = pKids->GetDict(0);
- if (pFirstKid == NULL) {
- return;
- }
- if (pFirstKid->KeyExist("T") || pFirstKid->KeyExist("Kids")) {
- for (FX_DWORD i = 0; i < pKids->GetCount(); i ++) {
- CPDF_Dictionary * pChildDict = pKids->GetDict(i);
- if (pChildDict) {
- if (pChildDict->GetObjNum() != dwParentObjNum) {
- LoadField(pChildDict, nLevel + 1);
- }
- }
- }
- } else {
- AddTerminalField(pFieldDict);
+ if ((bIncludeOrExclude && bFind) || (!bIncludeOrExclude && !bFind)) {
+ CPDF_Dictionary* pFieldDict = pField->m_pDict;
+ if ((dwFlags & 0x02) != 0 && pFieldDict->GetString("V").IsEmpty()) {
+ return pField;
+ }
}
+ }
+ return NULL;
}
-FX_BOOL CPDF_InterForm::HasXFAForm() const
-{
- return m_pFormDict && m_pFormDict->GetArray(FX_BSTRC("XFA")) != NULL;
-}
-void CPDF_InterForm::FixPageFields(const CPDF_Page* pPage)
-{
- ASSERT(pPage != NULL);
- CPDF_Dictionary* pPageDict = pPage->m_pFormDict;
- if (pPageDict == NULL) {
- return;
- }
- CPDF_Array* pAnnots = pPageDict->GetArray(FX_BSTRC("Annots"));
- if (pAnnots == NULL) {
- return;
- }
- int iAnnotCount = pAnnots->GetCount();
- for (int i = 0; i < iAnnotCount; i++) {
- CPDF_Dictionary* pAnnot = pAnnots->GetDict(i);
- if (pAnnot != NULL && pAnnot->GetString(FX_BSTRC("Subtype")) == "Widget") {
- LoadField(pAnnot);
- }
- }
+CFDF_Document* CPDF_InterForm::ExportToFDF(const CFX_WideStringC& pdf_path,
+ FX_BOOL bSimpleFileSpec) const {
+ CFX_PtrArray fields;
+ int nCount = m_pFieldTree->m_Root.CountFields();
+ for (int i = 0; i < nCount; i++) {
+ CPDF_FormField* pField = m_pFieldTree->m_Root.GetField(i);
+ fields.Add(pField);
+ }
+ return ExportToFDF(pdf_path, fields, TRUE, bSimpleFileSpec);
}
-CPDF_FormField* CPDF_InterForm::AddTerminalField(const CPDF_Dictionary* pFieldDict)
-{
- if (!pFieldDict->KeyExist(FX_BSTRC("T"))) {
- return NULL;
- }
- CPDF_Dictionary* pDict = (CPDF_Dictionary*)pFieldDict;
- CFX_WideString csWName = GetFullName(pDict);
- if (csWName.IsEmpty()) {
- return NULL;
- }
- CPDF_FormField* pField = NULL;
- pField = m_pFieldTree->GetField(csWName);
- if (pField == NULL) {
- CPDF_Dictionary *pParent = (CPDF_Dictionary*)pFieldDict;
- if (!pFieldDict->KeyExist(FX_BSTRC("T")) &&
- pFieldDict->GetString(FX_BSTRC("Subtype")) == FX_BSTRC("Widget")) {
- pParent = pFieldDict->GetDict(FX_BSTRC("Parent"));
- if (!pParent) {
- pParent = (CPDF_Dictionary*)pFieldDict;
- }
- }
- if (pParent && pParent != pFieldDict && !pParent->KeyExist(FX_BSTRC("FT"))) {
- if (pFieldDict->KeyExist(FX_BSTRC("FT"))) {
- CPDF_Object *pFTValue = pFieldDict->GetElementValue(FX_BSTRC("FT"));
- if (pFTValue) {
- pParent->SetAt(FX_BSTRC("FT"), pFTValue->Clone());
- }
- }
- if (pFieldDict->KeyExist(FX_BSTRC("Ff"))) {
- CPDF_Object *pFfValue = pFieldDict->GetElementValue(FX_BSTRC("Ff"));
- if (pFfValue) {
- pParent->SetAt(FX_BSTRC("Ff"), pFfValue->Clone());
- }
- }
- }
- pField = new CPDF_FormField(this, pParent);
- CPDF_Object* pTObj = pDict->GetElement("T");
- if (pTObj && pTObj->GetType() == PDFOBJ_REFERENCE) {
- CPDF_Object* pClone = pTObj->Clone(TRUE);
- if (pClone) {
- pDict->SetAt("T", pClone);
- } else {
- pDict->SetAtName("T", "");
- }
- }
- m_pFieldTree->SetField(csWName, pField);
- }
- CPDF_Array* pKids = pFieldDict->GetArray("Kids");
- if (pKids == NULL) {
- if (pFieldDict->GetString("Subtype") == "Widget") {
- AddControl(pField, pFieldDict);
- }
+CFX_WideString FILESPEC_EncodeFileName(const CFX_WideStringC& filepath);
+CFDF_Document* CPDF_InterForm::ExportToFDF(const CFX_WideStringC& pdf_path,
+ CFX_PtrArray& fields,
+ FX_BOOL bIncludeOrExclude,
+ FX_BOOL bSimpleFileSpec) const {
+ CFDF_Document* pDoc = CFDF_Document::CreateNewDoc();
+ if (pDoc == NULL) {
+ return NULL;
+ }
+ CPDF_Dictionary* pMainDict = pDoc->GetRoot()->GetDict("FDF");
+ if (!pdf_path.IsEmpty()) {
+ if (bSimpleFileSpec) {
+ CFX_WideString wsFilePath = FILESPEC_EncodeFileName(pdf_path);
+ pMainDict->SetAtString(FX_BSTRC("F"),
+ CFX_ByteString::FromUnicode(wsFilePath));
+ pMainDict->SetAtString(FX_BSTRC("UF"), PDF_EncodeText(wsFilePath));
} else {
- for (FX_DWORD i = 0; i < pKids->GetCount(); i ++) {
- CPDF_Dictionary* pKid = pKids->GetDict(i);
- if (pKid == NULL) {
- continue;
- }
- if (pKid->GetString("Subtype") != "Widget") {
- continue;
- }
- AddControl(pField, pKid);
- }
- }
- return pField;
-}
-CPDF_FormControl* CPDF_InterForm::AddControl(const CPDF_FormField* pField, const CPDF_Dictionary* pWidgetDict)
-{
- void *rValue = NULL;
- if (m_ControlMap.Lookup((CPDF_Dictionary*)pWidgetDict, rValue)) {
- return (CPDF_FormControl*)rValue;
- }
- CPDF_FormControl* pControl = new CPDF_FormControl((CPDF_FormField*)pField, (CPDF_Dictionary*)pWidgetDict);
- m_ControlMap.SetAt((CPDF_Dictionary*)pWidgetDict, pControl);
- ((CPDF_FormField*)pField)->m_ControlList.Add(pControl);
- return pControl;
-}
-CPDF_FormField* CPDF_InterForm::CheckRequiredFields(const CFX_PtrArray *fields, FX_BOOL bIncludeOrExclude) const
-{
- int nCount = m_pFieldTree->m_Root.CountFields();
- for (int i = 0; i < nCount; i++) {
- CPDF_FormField* pField = m_pFieldTree->m_Root.GetField(i);
- if (pField == NULL) {
- continue;
- }
- int32_t iType = pField->GetType();
- if (iType == CPDF_FormField::PushButton || iType == CPDF_FormField::CheckBox || iType == CPDF_FormField::ListBox) {
- continue;
- }
- FX_DWORD dwFlags = pField->GetFieldFlags();
- if (dwFlags & 0x04) {
- continue;
- }
- FX_BOOL bFind = TRUE;
- if (fields != NULL) {
- bFind = fields->Find(pField, 0) >= 0;
- }
- if ((bIncludeOrExclude && bFind) || (!bIncludeOrExclude && !bFind)) {
- CPDF_Dictionary *pFieldDict = pField->m_pDict;
- if ((dwFlags & 0x02) != 0 && pFieldDict->GetString("V").IsEmpty()) {
- return pField;
- }
- }
+ CPDF_FileSpec filespec;
+ filespec.SetFileName(pdf_path);
+ pMainDict->SetAt("F", (CPDF_Object*)filespec);
}
+ }
+ CPDF_Array* pFields = CPDF_Array::Create();
+ if (pFields == NULL) {
return NULL;
-}
-CFDF_Document* CPDF_InterForm::ExportToFDF(const CFX_WideStringC& pdf_path, FX_BOOL bSimpleFileSpec) const
-{
- CFX_PtrArray fields;
- int nCount = m_pFieldTree->m_Root.CountFields();
- for (int i = 0; i < nCount; i ++) {
- CPDF_FormField* pField = m_pFieldTree->m_Root.GetField(i);
- fields.Add(pField);
- }
- return ExportToFDF(pdf_path, fields, TRUE, bSimpleFileSpec);
-}
-CFX_WideString FILESPEC_EncodeFileName(const CFX_WideStringC& filepath);
-CFDF_Document* CPDF_InterForm::ExportToFDF(const CFX_WideStringC& pdf_path, CFX_PtrArray& fields, FX_BOOL bIncludeOrExclude, FX_BOOL bSimpleFileSpec) const
-{
- CFDF_Document* pDoc = CFDF_Document::CreateNewDoc();
- if (pDoc == NULL) {
+ }
+ pMainDict->SetAt("Fields", pFields);
+ int nCount = m_pFieldTree->m_Root.CountFields();
+ for (int i = 0; i < nCount; i++) {
+ CPDF_FormField* pField = m_pFieldTree->m_Root.GetField(i);
+ if (pField == NULL || pField->GetType() == CPDF_FormField::PushButton) {
+ continue;
+ }
+ FX_DWORD dwFlags = pField->GetFieldFlags();
+ if (dwFlags & 0x04) {
+ continue;
+ }
+ FX_BOOL bFind = fields.Find(pField, 0) >= 0;
+ if ((bIncludeOrExclude && bFind) || (!bIncludeOrExclude && !bFind)) {
+ if ((dwFlags & 0x02) != 0 && pField->m_pDict->GetString("V").IsEmpty()) {
+ continue;
+ }
+ CFX_WideString fullname = GetFullName(pField->GetFieldDict());
+ CPDF_Dictionary* pFieldDict = CPDF_Dictionary::Create();
+ if (pFieldDict == NULL) {
return NULL;
- }
- CPDF_Dictionary* pMainDict = pDoc->GetRoot()->GetDict("FDF");
- if (!pdf_path.IsEmpty()) {
- if (bSimpleFileSpec) {
- CFX_WideString wsFilePath = FILESPEC_EncodeFileName(pdf_path);
- pMainDict->SetAtString(FX_BSTRC("F"), CFX_ByteString::FromUnicode(wsFilePath));
- pMainDict->SetAtString(FX_BSTRC("UF"), PDF_EncodeText(wsFilePath));
- } else {
- CPDF_FileSpec filespec;
- filespec.SetFileName(pdf_path);
- pMainDict->SetAt("F", (CPDF_Object*)filespec);
- }
- }
- CPDF_Array* pFields = CPDF_Array::Create();
- if (pFields == NULL) {
+ }
+ CPDF_String* pString = CPDF_String::Create(fullname);
+ if (pString == NULL) {
+ pFieldDict->Release();
return NULL;
- }
- pMainDict->SetAt("Fields", pFields);
- int nCount = m_pFieldTree->m_Root.CountFields();
- for (int i = 0; i < nCount; i ++) {
- CPDF_FormField* pField = m_pFieldTree->m_Root.GetField(i);
- if (pField == NULL || pField->GetType() == CPDF_FormField::PushButton) {
- continue;
- }
- FX_DWORD dwFlags = pField->GetFieldFlags();
- if (dwFlags & 0x04) {
- continue;
+ }
+ pFieldDict->SetAt("T", pString);
+ if (pField->GetType() == CPDF_FormField::CheckBox ||
+ pField->GetType() == CPDF_FormField::RadioButton) {
+ CFX_WideString csExport = pField->GetCheckValue(FALSE);
+ CFX_ByteString csBExport = PDF_EncodeText(csExport);
+ CPDF_Object* pOpt = FPDF_GetFieldAttr(pField->m_pDict, "Opt");
+ if (pOpt == NULL) {
+ pFieldDict->SetAtName("V", csBExport);
+ } else {
+ pFieldDict->SetAtString("V", csBExport);
}
- FX_BOOL bFind = fields.Find(pField, 0) >= 0;
- if ((bIncludeOrExclude && bFind) || (!bIncludeOrExclude && !bFind)) {
- if ((dwFlags & 0x02) != 0 && pField->m_pDict->GetString("V").IsEmpty()) {
- continue;
- }
- CFX_WideString fullname = GetFullName(pField->GetFieldDict());
- CPDF_Dictionary* pFieldDict = CPDF_Dictionary::Create();
- if (pFieldDict == NULL) {
- return NULL;
- }
- CPDF_String* pString = CPDF_String::Create(fullname);
- if (pString == NULL) {
- pFieldDict->Release();
- return NULL;
- }
- pFieldDict->SetAt("T", pString);
- if (pField->GetType() == CPDF_FormField::CheckBox || pField->GetType() == CPDF_FormField::RadioButton) {
- CFX_WideString csExport = pField->GetCheckValue(FALSE);
- CFX_ByteString csBExport = PDF_EncodeText(csExport);
- CPDF_Object* pOpt = FPDF_GetFieldAttr(pField->m_pDict, "Opt");
- if (pOpt == NULL) {
- pFieldDict->SetAtName("V", csBExport);
- } else {
- pFieldDict->SetAtString("V", csBExport);
- }
- } else {
- CPDF_Object* pV = FPDF_GetFieldAttr(pField->m_pDict, "V");
- if (pV != NULL) {
- pFieldDict->SetAt("V", pV->Clone(TRUE));
- }
- }
- pFields->Add(pFieldDict);
+ } else {
+ CPDF_Object* pV = FPDF_GetFieldAttr(pField->m_pDict, "V");
+ if (pV != NULL) {
+ pFieldDict->SetAt("V", pV->Clone(TRUE));
}
+ }
+ pFields->Add(pFieldDict);
}
- return pDoc;
+ }
+ return pDoc;
}
const struct _SupportFieldEncoding {
- const FX_CHAR* m_name;
- int32_t m_codePage;
+ const FX_CHAR* m_name;
+ int32_t m_codePage;
} g_fieldEncoding[] = {
- { "BigFive", 950 },
- { "GBK", 936 },
- { "Shift-JIS", 932 },
- { "UHC", 949 },
+ {"BigFive", 950},
+ {"GBK", 936},
+ {"Shift-JIS", 932},
+ {"UHC", 949},
};
-static void FPDFDOC_FDF_GetFieldValue(CPDF_Dictionary *pFieldDict, CFX_WideString &csValue, CFX_ByteString &bsEncoding)
-{
- ASSERT(pFieldDict != NULL);
- CFX_ByteString csBValue = pFieldDict->GetString("V");
- int32_t iCount = sizeof(g_fieldEncoding) / sizeof(g_fieldEncoding[0]);
- int32_t i = 0;
- for (; i < iCount; ++i)
- if (bsEncoding == g_fieldEncoding[i].m_name) {
- break;
- }
- if (i < iCount) {
- CFX_CharMap *pCharMap = CFX_CharMap::GetDefaultMapper(g_fieldEncoding[i].m_codePage);
- FXSYS_assert(pCharMap != NULL);
- csValue.ConvertFrom(csBValue, pCharMap);
- return;
- }
- CFX_ByteString csTemp = csBValue.Left(2);
- if (csTemp == "\xFF\xFE" || csTemp == "\xFE\xFF") {
- csValue = PDF_DecodeText(csBValue);
- } else {
- csValue = CFX_WideString::FromLocal(csBValue);
- }
-}
-void CPDF_InterForm::FDF_ImportField(CPDF_Dictionary* pFieldDict, const CFX_WideString& parent_name, FX_BOOL bNotify, int nLevel)
-{
- CFX_WideString name;
- if (!parent_name.IsEmpty()) {
- name = parent_name + L".";
- }
- name += pFieldDict->GetUnicodeText("T");
- CPDF_Array* pKids = pFieldDict->GetArray("Kids");
- if (pKids) {
- for (FX_DWORD i = 0; i < pKids->GetCount(); i ++) {
- CPDF_Dictionary* pKid = pKids->GetDict(i);
- if (pKid == NULL) {
- continue;
- }
- if (nLevel <= nMaxRecursion) {
- FDF_ImportField(pKid, name, bNotify, nLevel + 1);
- }
- }
- return;
- }
- if (!pFieldDict->KeyExist("V")) {
- return;
- }
- CPDF_FormField* pField = m_pFieldTree->GetField(name);
- if (pField == NULL) {
- return;
- }
- CFX_WideString csWValue;
- FPDFDOC_FDF_GetFieldValue(pFieldDict, csWValue, m_bsEncoding);
- int iType = pField->GetFieldType();
- if (bNotify && m_pFormNotify != NULL) {
- int iRet = 0;
- if (iType == FIELDTYPE_LISTBOX) {
- iRet = m_pFormNotify->BeforeSelectionChange(pField, csWValue);
- } else if (iType == FIELDTYPE_COMBOBOX || iType == FIELDTYPE_TEXTFIELD) {
- iRet = m_pFormNotify->BeforeValueChange(pField, csWValue);
- }
- if (iRet < 0) {
- return;
- }
- }
- CFX_ByteArray statusArray;
+static void FPDFDOC_FDF_GetFieldValue(CPDF_Dictionary* pFieldDict,
+ CFX_WideString& csValue,
+ CFX_ByteString& bsEncoding) {
+ ASSERT(pFieldDict != NULL);
+ CFX_ByteString csBValue = pFieldDict->GetString("V");
+ int32_t iCount = sizeof(g_fieldEncoding) / sizeof(g_fieldEncoding[0]);
+ int32_t i = 0;
+ for (; i < iCount; ++i)
+ if (bsEncoding == g_fieldEncoding[i].m_name) {
+ break;
+ }
+ if (i < iCount) {
+ CFX_CharMap* pCharMap =
+ CFX_CharMap::GetDefaultMapper(g_fieldEncoding[i].m_codePage);
+ FXSYS_assert(pCharMap != NULL);
+ csValue.ConvertFrom(csBValue, pCharMap);
+ return;
+ }
+ CFX_ByteString csTemp = csBValue.Left(2);
+ if (csTemp == "\xFF\xFE" || csTemp == "\xFE\xFF") {
+ csValue = PDF_DecodeText(csBValue);
+ } else {
+ csValue = CFX_WideString::FromLocal(csBValue);
+ }
+}
+void CPDF_InterForm::FDF_ImportField(CPDF_Dictionary* pFieldDict,
+ const CFX_WideString& parent_name,
+ FX_BOOL bNotify,
+ int nLevel) {
+ CFX_WideString name;
+ if (!parent_name.IsEmpty()) {
+ name = parent_name + L".";
+ }
+ name += pFieldDict->GetUnicodeText("T");
+ CPDF_Array* pKids = pFieldDict->GetArray("Kids");
+ if (pKids) {
+ for (FX_DWORD i = 0; i < pKids->GetCount(); i++) {
+ CPDF_Dictionary* pKid = pKids->GetDict(i);
+ if (pKid == NULL) {
+ continue;
+ }
+ if (nLevel <= nMaxRecursion) {
+ FDF_ImportField(pKid, name, bNotify, nLevel + 1);
+ }
+ }
+ return;
+ }
+ if (!pFieldDict->KeyExist("V")) {
+ return;
+ }
+ CPDF_FormField* pField = m_pFieldTree->GetField(name);
+ if (pField == NULL) {
+ return;
+ }
+ CFX_WideString csWValue;
+ FPDFDOC_FDF_GetFieldValue(pFieldDict, csWValue, m_bsEncoding);
+ int iType = pField->GetFieldType();
+ if (bNotify && m_pFormNotify != NULL) {
+ int iRet = 0;
+ if (iType == FIELDTYPE_LISTBOX) {
+ iRet = m_pFormNotify->BeforeSelectionChange(pField, csWValue);
+ } else if (iType == FIELDTYPE_COMBOBOX || iType == FIELDTYPE_TEXTFIELD) {
+ iRet = m_pFormNotify->BeforeValueChange(pField, csWValue);
+ }
+ if (iRet < 0) {
+ return;
+ }
+ }
+ CFX_ByteArray statusArray;
+ if (iType == FIELDTYPE_CHECKBOX || iType == FIELDTYPE_RADIOBUTTON) {
+ SaveCheckedFieldStatus(pField, statusArray);
+ }
+ pField->SetValue(csWValue);
+ CPDF_FormField::Type eType = pField->GetType();
+ if ((eType == CPDF_FormField::ListBox || eType == CPDF_FormField::ComboBox) &&
+ pFieldDict->KeyExist("Opt")) {
+ pField->m_pDict->SetAt("Opt",
+ pFieldDict->GetElementValue("Opt")->Clone(TRUE));
+ }
+ if (bNotify && m_pFormNotify != NULL) {
if (iType == FIELDTYPE_CHECKBOX || iType == FIELDTYPE_RADIOBUTTON) {
- SaveCheckedFieldStatus(pField, statusArray);
- }
- pField->SetValue(csWValue);
- CPDF_FormField::Type eType = pField->GetType();
- if ((eType == CPDF_FormField::ListBox || eType == CPDF_FormField::ComboBox) && pFieldDict->KeyExist("Opt")) {
- pField->m_pDict->SetAt("Opt", pFieldDict->GetElementValue("Opt")->Clone(TRUE));
- }
- if (bNotify && m_pFormNotify != NULL) {
- if (iType == FIELDTYPE_CHECKBOX || iType == FIELDTYPE_RADIOBUTTON) {
- m_pFormNotify->AfterCheckedStatusChange(pField, statusArray);
- } else if (iType == FIELDTYPE_LISTBOX) {
- m_pFormNotify->AfterSelectionChange(pField);
- } else if (iType == FIELDTYPE_COMBOBOX || iType == FIELDTYPE_TEXTFIELD) {
- m_pFormNotify->AfterValueChange(pField);
- }
- }
- if (CPDF_InterForm::m_bUpdateAP) {
- pField->UpdateAP(NULL);
+ m_pFormNotify->AfterCheckedStatusChange(pField, statusArray);
+ } else if (iType == FIELDTYPE_LISTBOX) {
+ m_pFormNotify->AfterSelectionChange(pField);
+ } else if (iType == FIELDTYPE_COMBOBOX || iType == FIELDTYPE_TEXTFIELD) {
+ m_pFormNotify->AfterValueChange(pField);
+ }
+ }
+ if (CPDF_InterForm::m_bUpdateAP) {
+ pField->UpdateAP(NULL);
+ }
+}
+FX_BOOL CPDF_InterForm::ImportFromFDF(const CFDF_Document* pFDF,
+ FX_BOOL bNotify) {
+ if (pFDF == NULL) {
+ return FALSE;
+ }
+ CPDF_Dictionary* pMainDict = pFDF->GetRoot()->GetDict("FDF");
+ if (pMainDict == NULL) {
+ return FALSE;
+ }
+ CPDF_Array* pFields = pMainDict->GetArray("Fields");
+ if (pFields == NULL) {
+ return FALSE;
+ }
+ m_bsEncoding = pMainDict->GetString(FX_BSTRC("Encoding"));
+ if (bNotify && m_pFormNotify != NULL) {
+ int iRet = m_pFormNotify->BeforeFormImportData(this);
+ if (iRet < 0) {
+ return FALSE;
+ }
+ }
+ for (FX_DWORD i = 0; i < pFields->GetCount(); i++) {
+ CPDF_Dictionary* pField = pFields->GetDict(i);
+ if (pField == NULL) {
+ continue;
}
+ FDF_ImportField(pField, L"", bNotify);
+ }
+ if (bNotify && m_pFormNotify != NULL) {
+ m_pFormNotify->AfterFormImportData(this);
+ }
+ return TRUE;
}
-FX_BOOL CPDF_InterForm::ImportFromFDF(const CFDF_Document* pFDF, FX_BOOL bNotify)
-{
- if (pFDF == NULL) {
- return FALSE;
- }
- CPDF_Dictionary* pMainDict = pFDF->GetRoot()->GetDict("FDF");
- if (pMainDict == NULL) {
- return FALSE;
- }
- CPDF_Array* pFields = pMainDict->GetArray("Fields");
- if (pFields == NULL) {
- return FALSE;
- }
- m_bsEncoding = pMainDict->GetString(FX_BSTRC("Encoding"));
- if (bNotify && m_pFormNotify != NULL) {
- int iRet = m_pFormNotify->BeforeFormImportData(this);
- if (iRet < 0) {
- return FALSE;
- }
- }
- for (FX_DWORD i = 0; i < pFields->GetCount(); i ++) {
- CPDF_Dictionary* pField = pFields->GetDict(i);
- if (pField == NULL) {
- continue;
- }
- FDF_ImportField(pField, L"", bNotify);
+void CPDF_InterForm::SetFormNotify(const CPDF_FormNotify* pNotify) {
+ m_pFormNotify = (CPDF_FormNotify*)pNotify;
+}
+int CPDF_InterForm::GetPageWithWidget(int iCurPage, FX_BOOL bNext) {
+ if (iCurPage < 0) {
+ return -1;
+ }
+ int iPageCount = m_pDocument->GetPageCount();
+ if (iCurPage >= iPageCount) {
+ return -1;
+ }
+ int iNewPage = iCurPage;
+ do {
+ iNewPage += bNext ? 1 : -1;
+ if (iNewPage >= iPageCount) {
+ iNewPage = 0;
}
- if (bNotify && m_pFormNotify != NULL) {
- m_pFormNotify->AfterFormImportData(this);
+ if (iNewPage < 0) {
+ iNewPage = iPageCount - 1;
}
- return TRUE;
-}
-void CPDF_InterForm::SetFormNotify(const CPDF_FormNotify* pNotify)
-{
- m_pFormNotify = (CPDF_FormNotify*)pNotify;
-}
-int CPDF_InterForm::GetPageWithWidget(int iCurPage, FX_BOOL bNext)
-{
- if (iCurPage < 0) {
- return -1;
+ if (iNewPage == iCurPage) {
+ break;
}
- int iPageCount = m_pDocument->GetPageCount();
- if (iCurPage >= iPageCount) {
- return -1;
+ CPDF_Dictionary* pPageDict = m_pDocument->GetPage(iNewPage);
+ if (pPageDict == NULL) {
+ continue;
}
- int iNewPage = iCurPage;
- do {
- iNewPage += bNext ? 1 : -1;
- if (iNewPage >= iPageCount) {
- iNewPage = 0;
- }
- if (iNewPage < 0) {
- iNewPage = iPageCount - 1;
- }
- if (iNewPage == iCurPage) {
- break;
- }
- CPDF_Dictionary* pPageDict = m_pDocument->GetPage(iNewPage);
- if (pPageDict == NULL) {
- continue;
- }
- CPDF_Array* pAnnots = pPageDict->GetArray("Annots");
- if (pAnnots == NULL) {
- continue;
- }
- FX_DWORD dwCount = pAnnots->GetCount();
- for (FX_DWORD i = 0; i < dwCount; i ++) {
- CPDF_Object* pAnnotDict = pAnnots->GetElementValue(i);
- if (pAnnotDict == NULL) {
- continue;
- }
- CPDF_FormControl* pControl = NULL;
- if (m_ControlMap.Lookup(pAnnotDict, (void*&)pControl)) {
- return iNewPage;
- }
- }
- } while (TRUE);
- return -1;
+ CPDF_Array* pAnnots = pPageDict->GetArray("Annots");
+ if (pAnnots == NULL) {
+ continue;
+ }
+ FX_DWORD dwCount = pAnnots->GetCount();
+ for (FX_DWORD i = 0; i < dwCount; i++) {
+ CPDF_Object* pAnnotDict = pAnnots->GetElementValue(i);
+ if (pAnnotDict == NULL) {
+ continue;
+ }
+ CPDF_FormControl* pControl = NULL;
+ if (m_ControlMap.Lookup(pAnnotDict, (void*&)pControl)) {
+ return iNewPage;
+ }
+ }
+ } while (TRUE);
+ return -1;
}
diff --git a/core/src/fpdfdoc/doc_formcontrol.cpp b/core/src/fpdfdoc/doc_formcontrol.cpp
index 87eee92c2e..db7cf37fdb 100644
--- a/core/src/fpdfdoc/doc_formcontrol.cpp
+++ b/core/src/fpdfdoc/doc_formcontrol.cpp
@@ -5,460 +5,444 @@
// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
#include "../../include/fpdfdoc/fpdf_doc.h"
-CPDF_FormControl::CPDF_FormControl(CPDF_FormField* pField, CPDF_Dictionary* pWidgetDict)
-{
- m_pField = pField;
- m_pWidgetDict = pWidgetDict;
- m_pForm = m_pField->m_pForm;
-}
-CFX_FloatRect CPDF_FormControl::GetRect()
-{
- return m_pWidgetDict->GetRect("Rect");
-}
-CFX_ByteString CPDF_FormControl::GetOnStateName()
-{
- ASSERT(GetType() == CPDF_FormField::CheckBox || GetType() == CPDF_FormField::RadioButton);
- CFX_ByteString csOn;
- CPDF_Dictionary* pAP = m_pWidgetDict->GetDict("AP");
- if (pAP == NULL) {
- return csOn;
- }
- CPDF_Dictionary* pN = pAP->GetDict("N");
- if (pN == NULL) {
- return csOn;
- }
- FX_POSITION pos = pN->GetStartPos();
- while (pos) {
- pN->GetNextElement(pos, csOn);
- if (csOn != "Off") {
- return csOn;
- }
- }
- return CFX_ByteString();
-}
-void CPDF_FormControl::SetOnStateName(const CFX_ByteString& csOn)
-{
- ASSERT(GetType() == CPDF_FormField::CheckBox || GetType() == CPDF_FormField::RadioButton);
- CFX_ByteString csValue = csOn;
- if (csValue.IsEmpty()) {
- csValue = "Yes";
- }
- if (csValue == "Off") {
- csValue = "Yes";
- }
- CFX_ByteString csAS = m_pWidgetDict->GetString("AS", "Off");
- if (csAS != "Off") {
- m_pWidgetDict->SetAtName("AS", csValue);
- }
- CPDF_Dictionary* pAP = m_pWidgetDict->GetDict("AP");
- if (pAP == NULL) {
- return;
- }
- FX_POSITION pos1 = pAP->GetStartPos();
- while (pos1) {
- CFX_ByteString csKey1;
- CPDF_Object* pObj1 = pAP->GetNextElement(pos1, csKey1);
- if (pObj1 == NULL) {
- continue;
- }
- CPDF_Object* pObjDirect1 = pObj1->GetDirect();
- if (pObjDirect1->GetType() != PDFOBJ_DICTIONARY) {
- continue;
- }
- CPDF_Dictionary* pSubDict = (CPDF_Dictionary*)pObjDirect1;
- FX_POSITION pos2 = pSubDict->GetStartPos();
- while (pos2) {
- CFX_ByteString csKey2;
- CPDF_Object* pObj2 = pSubDict->GetNextElement(pos2, csKey2);
- if (pObj2 == NULL) {
- continue;
- }
- if (csKey2 != "Off") {
- pSubDict->ReplaceKey(csKey2, csValue);
- break;
- }
- }
- }
-}
-CFX_ByteString CPDF_FormControl::GetCheckedAPState()
-{
- ASSERT(GetType() == CPDF_FormField::CheckBox || GetType() == CPDF_FormField::RadioButton);
- CFX_ByteString csOn = GetOnStateName();
- if (GetType() == CPDF_FormField::RadioButton || GetType() == CPDF_FormField::CheckBox) {
- CPDF_Object* pOpt = FPDF_GetFieldAttr(m_pField->m_pDict, "Opt");
- if (pOpt != NULL && pOpt->GetType() == PDFOBJ_ARRAY) {
- int iIndex = m_pField->GetControlIndex(this);
- csOn.Format("%d", iIndex);
- }
- }
- if (csOn.IsEmpty()) {
- csOn = "Yes";
- }
+CPDF_FormControl::CPDF_FormControl(CPDF_FormField* pField,
+ CPDF_Dictionary* pWidgetDict) {
+ m_pField = pField;
+ m_pWidgetDict = pWidgetDict;
+ m_pForm = m_pField->m_pForm;
+}
+CFX_FloatRect CPDF_FormControl::GetRect() {
+ return m_pWidgetDict->GetRect("Rect");
+}
+CFX_ByteString CPDF_FormControl::GetOnStateName() {
+ ASSERT(GetType() == CPDF_FormField::CheckBox ||
+ GetType() == CPDF_FormField::RadioButton);
+ CFX_ByteString csOn;
+ CPDF_Dictionary* pAP = m_pWidgetDict->GetDict("AP");
+ if (pAP == NULL) {
return csOn;
-}
-CFX_WideString CPDF_FormControl::GetExportValue()
-{
- ASSERT(GetType() == CPDF_FormField::CheckBox || GetType() == CPDF_FormField::RadioButton);
- CFX_ByteString csOn = GetOnStateName();
- if (GetType() == CPDF_FormField::RadioButton || GetType() == CPDF_FormField::CheckBox) {
- CPDF_Object* pOpt = FPDF_GetFieldAttr(m_pField->m_pDict, "Opt");
- if (pOpt != NULL && pOpt->GetType() == PDFOBJ_ARRAY) {
- int iIndex = m_pField->GetControlIndex(this);
- csOn = ((CPDF_Array*)pOpt)->GetString(iIndex);
- }
- }
- if (csOn.IsEmpty()) {
- csOn = "Yes";
- }
- CFX_WideString csWOn = PDF_DecodeText(csOn);
- return csWOn;
-}
-FX_BOOL CPDF_FormControl::IsChecked()
-{
- ASSERT(GetType() == CPDF_FormField::CheckBox || GetType() == CPDF_FormField::RadioButton);
- CFX_ByteString csOn = GetOnStateName();
- CFX_ByteString csAS = m_pWidgetDict->GetString("AS");
- return csAS == csOn;
-}
-FX_BOOL CPDF_FormControl::IsDefaultChecked()
-{
- ASSERT(GetType() == CPDF_FormField::CheckBox || GetType() == CPDF_FormField::RadioButton);
- CPDF_Object* pDV = FPDF_GetFieldAttr(m_pField->m_pDict, "DV");
- if (pDV == NULL) {
- return FALSE;
- }
- CFX_ByteString csDV = pDV->GetString();
- CFX_ByteString csOn = GetOnStateName();
- return (csDV == csOn);
-}
-void CPDF_FormControl::CheckControl(FX_BOOL bChecked)
-{
- ASSERT(GetType() == CPDF_FormField::CheckBox || GetType() == CPDF_FormField::RadioButton);
- CFX_ByteString csOn = GetOnStateName();
- CFX_ByteString csOldAS = m_pWidgetDict->GetString("AS", "Off");
- CFX_ByteString csAS = "Off";
- if (bChecked) {
- csAS = csOn;
- }
- if (csOldAS == csAS) {
- return;
- }
- m_pWidgetDict->SetAtName("AS", csAS);
- m_pForm->m_bUpdated = TRUE;
-}
-CPDF_Stream* FPDFDOC_GetAnnotAP(CPDF_Dictionary* pAnnotDict, CPDF_Annot::AppearanceMode mode);
-void CPDF_FormControl::DrawControl(CFX_RenderDevice* pDevice, CFX_AffineMatrix* pMatrix, CPDF_Page* pPage,
- CPDF_Annot::AppearanceMode mode, const CPDF_RenderOptions* pOptions)
-{
- if (m_pWidgetDict->GetInteger("F") & ANNOTFLAG_HIDDEN) {
- return;
- }
- CPDF_Stream* pStream = FPDFDOC_GetAnnotAP(m_pWidgetDict, mode);
- if (pStream == NULL) {
- return;
- }
- CFX_FloatRect form_bbox = pStream->GetDict()->GetRect("BBox");
- CFX_AffineMatrix form_matrix = pStream->GetDict()->GetMatrix("Matrix");
- form_matrix.TransformRect(form_bbox);
- CFX_FloatRect arect = m_pWidgetDict->GetRect("Rect");
- CFX_AffineMatrix matrix;
- matrix.MatchRect(arect, form_bbox);
- matrix.Concat(*pMatrix);
- CPDF_Form form(m_pField->m_pForm->m_pDocument, m_pField->m_pForm->m_pFormDict->GetDict("DR"), pStream);
- form.ParseContent(NULL, NULL, NULL, NULL);
- CPDF_RenderContext context;
- context.Create(pPage);
- context.DrawObjectList(pDevice, &form, &matrix, pOptions);
+ }
+ CPDF_Dictionary* pN = pAP->GetDict("N");
+ if (pN == NULL) {
+ return csOn;
+ }
+ FX_POSITION pos = pN->GetStartPos();
+ while (pos) {
+ pN->GetNextElement(pos, csOn);
+ if (csOn != "Off") {
+ return csOn;
+ }
+ }
+ return CFX_ByteString();
+}
+void CPDF_FormControl::SetOnStateName(const CFX_ByteString& csOn) {
+ ASSERT(GetType() == CPDF_FormField::CheckBox ||
+ GetType() == CPDF_FormField::RadioButton);
+ CFX_ByteString csValue = csOn;
+ if (csValue.IsEmpty()) {
+ csValue = "Yes";
+ }
+ if (csValue == "Off") {
+ csValue = "Yes";
+ }
+ CFX_ByteString csAS = m_pWidgetDict->GetString("AS", "Off");
+ if (csAS != "Off") {
+ m_pWidgetDict->SetAtName("AS", csValue);
+ }
+ CPDF_Dictionary* pAP = m_pWidgetDict->GetDict("AP");
+ if (pAP == NULL) {
+ return;
+ }
+ FX_POSITION pos1 = pAP->GetStartPos();
+ while (pos1) {
+ CFX_ByteString csKey1;
+ CPDF_Object* pObj1 = pAP->GetNextElement(pos1, csKey1);
+ if (pObj1 == NULL) {
+ continue;
+ }
+ CPDF_Object* pObjDirect1 = pObj1->GetDirect();
+ if (pObjDirect1->GetType() != PDFOBJ_DICTIONARY) {
+ continue;
+ }
+ CPDF_Dictionary* pSubDict = (CPDF_Dictionary*)pObjDirect1;
+ FX_POSITION pos2 = pSubDict->GetStartPos();
+ while (pos2) {
+ CFX_ByteString csKey2;
+ CPDF_Object* pObj2 = pSubDict->GetNextElement(pos2, csKey2);
+ if (pObj2 == NULL) {
+ continue;
+ }
+ if (csKey2 != "Off") {
+ pSubDict->ReplaceKey(csKey2, csValue);
+ break;
+ }
+ }
+ }
+}
+CFX_ByteString CPDF_FormControl::GetCheckedAPState() {
+ ASSERT(GetType() == CPDF_FormField::CheckBox ||
+ GetType() == CPDF_FormField::RadioButton);
+ CFX_ByteString csOn = GetOnStateName();
+ if (GetType() == CPDF_FormField::RadioButton ||
+ GetType() == CPDF_FormField::CheckBox) {
+ CPDF_Object* pOpt = FPDF_GetFieldAttr(m_pField->m_pDict, "Opt");
+ if (pOpt != NULL && pOpt->GetType() == PDFOBJ_ARRAY) {
+ int iIndex = m_pField->GetControlIndex(this);
+ csOn.Format("%d", iIndex);
+ }
+ }
+ if (csOn.IsEmpty()) {
+ csOn = "Yes";
+ }
+ return csOn;
+}
+CFX_WideString CPDF_FormControl::GetExportValue() {
+ ASSERT(GetType() == CPDF_FormField::CheckBox ||
+ GetType() == CPDF_FormField::RadioButton);
+ CFX_ByteString csOn = GetOnStateName();
+ if (GetType() == CPDF_FormField::RadioButton ||
+ GetType() == CPDF_FormField::CheckBox) {
+ CPDF_Object* pOpt = FPDF_GetFieldAttr(m_pField->m_pDict, "Opt");
+ if (pOpt != NULL && pOpt->GetType() == PDFOBJ_ARRAY) {
+ int iIndex = m_pField->GetControlIndex(this);
+ csOn = ((CPDF_Array*)pOpt)->GetString(iIndex);
+ }
+ }
+ if (csOn.IsEmpty()) {
+ csOn = "Yes";
+ }
+ CFX_WideString csWOn = PDF_DecodeText(csOn);
+ return csWOn;
+}
+FX_BOOL CPDF_FormControl::IsChecked() {
+ ASSERT(GetType() == CPDF_FormField::CheckBox ||
+ GetType() == CPDF_FormField::RadioButton);
+ CFX_ByteString csOn = GetOnStateName();
+ CFX_ByteString csAS = m_pWidgetDict->GetString("AS");
+ return csAS == csOn;
+}
+FX_BOOL CPDF_FormControl::IsDefaultChecked() {
+ ASSERT(GetType() == CPDF_FormField::CheckBox ||
+ GetType() == CPDF_FormField::RadioButton);
+ CPDF_Object* pDV = FPDF_GetFieldAttr(m_pField->m_pDict, "DV");
+ if (pDV == NULL) {
+ return FALSE;
+ }
+ CFX_ByteString csDV = pDV->GetString();
+ CFX_ByteString csOn = GetOnStateName();
+ return (csDV == csOn);
+}
+void CPDF_FormControl::CheckControl(FX_BOOL bChecked) {
+ ASSERT(GetType() == CPDF_FormField::CheckBox ||
+ GetType() == CPDF_FormField::RadioButton);
+ CFX_ByteString csOn = GetOnStateName();
+ CFX_ByteString csOldAS = m_pWidgetDict->GetString("AS", "Off");
+ CFX_ByteString csAS = "Off";
+ if (bChecked) {
+ csAS = csOn;
+ }
+ if (csOldAS == csAS) {
+ return;
+ }
+ m_pWidgetDict->SetAtName("AS", csAS);
+ m_pForm->m_bUpdated = TRUE;
+}
+CPDF_Stream* FPDFDOC_GetAnnotAP(CPDF_Dictionary* pAnnotDict,
+ CPDF_Annot::AppearanceMode mode);
+void CPDF_FormControl::DrawControl(CFX_RenderDevice* pDevice,
+ CFX_AffineMatrix* pMatrix,
+ CPDF_Page* pPage,
+ CPDF_Annot::AppearanceMode mode,
+ const CPDF_RenderOptions* pOptions) {
+ if (m_pWidgetDict->GetInteger("F") & ANNOTFLAG_HIDDEN) {
+ return;
+ }
+ CPDF_Stream* pStream = FPDFDOC_GetAnnotAP(m_pWidgetDict, mode);
+ if (pStream == NULL) {
+ return;
+ }
+ CFX_FloatRect form_bbox = pStream->GetDict()->GetRect("BBox");
+ CFX_AffineMatrix form_matrix = pStream->GetDict()->GetMatrix("Matrix");
+ form_matrix.TransformRect(form_bbox);
+ CFX_FloatRect arect = m_pWidgetDict->GetRect("Rect");
+ CFX_AffineMatrix matrix;
+ matrix.MatchRect(arect, form_bbox);
+ matrix.Concat(*pMatrix);
+ CPDF_Form form(m_pField->m_pForm->m_pDocument,
+ m_pField->m_pForm->m_pFormDict->GetDict("DR"), pStream);
+ form.ParseContent(NULL, NULL, NULL, NULL);
+ CPDF_RenderContext context;
+ context.Create(pPage);
+ context.DrawObjectList(pDevice, &form, &matrix, pOptions);
}
const FX_CHAR* g_sHighlightingMode[] = {"N", "I", "O", "P", "T", ""};
-CPDF_FormControl::HighlightingMode CPDF_FormControl::GetHighlightingMode()
-{
- if (m_pWidgetDict == NULL) {
- return Invert;
- }
- CFX_ByteString csH = m_pWidgetDict->GetString("H", "I");
- int i = 0;
- while (g_sHighlightingMode[i][0] != '\0') {
- if (csH.Equal(g_sHighlightingMode[i])) {
- return (HighlightingMode)i;
- }
- i ++;
- }
+CPDF_FormControl::HighlightingMode CPDF_FormControl::GetHighlightingMode() {
+ if (m_pWidgetDict == NULL) {
return Invert;
-}
-CPDF_ApSettings CPDF_FormControl::GetMK(FX_BOOL bCreate)
-{
- if (!m_pWidgetDict) {
- return NULL;
- }
- CPDF_ApSettings mk = m_pWidgetDict->GetDict(FX_BSTRC("MK"));
- if (!mk && bCreate) {
- mk = CPDF_Dictionary::Create();
- if (mk == NULL) {
- return NULL;
- }
- m_pWidgetDict->SetAt(FX_BSTRC("MK"), mk);
- }
- return mk;
-}
-FX_BOOL CPDF_FormControl::HasMKEntry(CFX_ByteString csEntry)
-{
- CPDF_ApSettings mk = GetMK(FALSE);
- return mk.HasMKEntry(csEntry);
-}
-int CPDF_FormControl::GetRotation()
-{
- CPDF_ApSettings mk = GetMK(FALSE);
- return mk.GetRotation();
-}
-FX_ARGB CPDF_FormControl::GetColor(int& iColorType, CFX_ByteString csEntry)
-{
- CPDF_ApSettings mk = GetMK(FALSE);
- return mk.GetColor(iColorType, csEntry);
-}
-FX_FLOAT CPDF_FormControl::GetOriginalColor(int index, CFX_ByteString csEntry)
-{
- CPDF_ApSettings mk = GetMK(FALSE);
- return mk.GetOriginalColor(index, csEntry);
-}
-void CPDF_FormControl::GetOriginalColor(int& iColorType, FX_FLOAT fc[4], CFX_ByteString csEntry)
-{
- CPDF_ApSettings mk = GetMK(FALSE);
- mk.GetOriginalColor(iColorType, fc, csEntry);
-}
-CFX_WideString CPDF_FormControl::GetCaption(CFX_ByteString csEntry)
-{
- CPDF_ApSettings mk = GetMK(FALSE);
- return mk.GetCaption(csEntry);
-}
-CPDF_Stream* CPDF_FormControl::GetIcon(CFX_ByteString csEntry)
-{
- CPDF_ApSettings mk = GetMK(FALSE);
- return mk.GetIcon(csEntry);
-}
-CPDF_IconFit CPDF_FormControl::GetIconFit()
-{
- CPDF_ApSettings mk = GetMK(FALSE);
- return mk.GetIconFit();
-}
-int CPDF_FormControl::GetTextPosition()
-{
- CPDF_ApSettings mk = GetMK(FALSE);
- return mk.GetTextPosition();
-}
-CPDF_Action CPDF_FormControl::GetAction()
-{
- if (!m_pWidgetDict) {
- return CPDF_Action();
- }
- if (m_pWidgetDict->KeyExist("A")) {
- return CPDF_Action(m_pWidgetDict->GetDict("A"));
- }
- CPDF_Object* pObj = FPDF_GetFieldAttr(m_pField->m_pDict, "A");
- if (!pObj) {
- return CPDF_Action();
- }
- return CPDF_Action(pObj->GetDict());
-}
-CPDF_AAction CPDF_FormControl::GetAdditionalAction()
-{
- if (!m_pWidgetDict) {
- return nullptr;
- }
- if (m_pWidgetDict->KeyExist("AA")) {
- return m_pWidgetDict->GetDict("AA");
- }
- return m_pField->GetAdditionalAction();
-}
-CPDF_DefaultAppearance CPDF_FormControl::GetDefaultAppearance()
-{
- if (!m_pWidgetDict) {
- return CFX_ByteString();
- }
- if (m_pWidgetDict->KeyExist("DA")) {
- return m_pWidgetDict->GetString("DA");
- }
- CPDF_Object* pObj = FPDF_GetFieldAttr(m_pField->m_pDict, "DA");
- if (!pObj) {
- return m_pField->m_pForm->GetDefaultAppearance();
- }
- return pObj->GetString();
+ }
+ CFX_ByteString csH = m_pWidgetDict->GetString("H", "I");
+ int i = 0;
+ while (g_sHighlightingMode[i][0] != '\0') {
+ if (csH.Equal(g_sHighlightingMode[i])) {
+ return (HighlightingMode)i;
+ }
+ i++;
+ }
+ return Invert;
+}
+CPDF_ApSettings CPDF_FormControl::GetMK(FX_BOOL bCreate) {
+ if (!m_pWidgetDict) {
+ return NULL;
+ }
+ CPDF_ApSettings mk = m_pWidgetDict->GetDict(FX_BSTRC("MK"));
+ if (!mk && bCreate) {
+ mk = CPDF_Dictionary::Create();
+ if (mk == NULL) {
+ return NULL;
+ }
+ m_pWidgetDict->SetAt(FX_BSTRC("MK"), mk);
+ }
+ return mk;
+}
+FX_BOOL CPDF_FormControl::HasMKEntry(CFX_ByteString csEntry) {
+ CPDF_ApSettings mk = GetMK(FALSE);
+ return mk.HasMKEntry(csEntry);
+}
+int CPDF_FormControl::GetRotation() {
+ CPDF_ApSettings mk = GetMK(FALSE);
+ return mk.GetRotation();
+}
+FX_ARGB CPDF_FormControl::GetColor(int& iColorType, CFX_ByteString csEntry) {
+ CPDF_ApSettings mk = GetMK(FALSE);
+ return mk.GetColor(iColorType, csEntry);
+}
+FX_FLOAT CPDF_FormControl::GetOriginalColor(int index, CFX_ByteString csEntry) {
+ CPDF_ApSettings mk = GetMK(FALSE);
+ return mk.GetOriginalColor(index, csEntry);
+}
+void CPDF_FormControl::GetOriginalColor(int& iColorType,
+ FX_FLOAT fc[4],
+ CFX_ByteString csEntry) {
+ CPDF_ApSettings mk = GetMK(FALSE);
+ mk.GetOriginalColor(iColorType, fc, csEntry);
+}
+CFX_WideString CPDF_FormControl::GetCaption(CFX_ByteString csEntry) {
+ CPDF_ApSettings mk = GetMK(FALSE);
+ return mk.GetCaption(csEntry);
+}
+CPDF_Stream* CPDF_FormControl::GetIcon(CFX_ByteString csEntry) {
+ CPDF_ApSettings mk = GetMK(FALSE);
+ return mk.GetIcon(csEntry);
+}
+CPDF_IconFit CPDF_FormControl::GetIconFit() {
+ CPDF_ApSettings mk = GetMK(FALSE);
+ return mk.GetIconFit();
+}
+int CPDF_FormControl::GetTextPosition() {
+ CPDF_ApSettings mk = GetMK(FALSE);
+ return mk.GetTextPosition();
+}
+CPDF_Action CPDF_FormControl::GetAction() {
+ if (!m_pWidgetDict) {
+ return CPDF_Action();
+ }
+ if (m_pWidgetDict->KeyExist("A")) {
+ return CPDF_Action(m_pWidgetDict->GetDict("A"));
+ }
+ CPDF_Object* pObj = FPDF_GetFieldAttr(m_pField->m_pDict, "A");
+ if (!pObj) {
+ return CPDF_Action();
+ }
+ return CPDF_Action(pObj->GetDict());
+}
+CPDF_AAction CPDF_FormControl::GetAdditionalAction() {
+ if (!m_pWidgetDict) {
+ return nullptr;
+ }
+ if (m_pWidgetDict->KeyExist("AA")) {
+ return m_pWidgetDict->GetDict("AA");
+ }
+ return m_pField->GetAdditionalAction();
+}
+CPDF_DefaultAppearance CPDF_FormControl::GetDefaultAppearance() {
+ if (!m_pWidgetDict) {
+ return CFX_ByteString();
+ }
+ if (m_pWidgetDict->KeyExist("DA")) {
+ return m_pWidgetDict->GetString("DA");
+ }
+ CPDF_Object* pObj = FPDF_GetFieldAttr(m_pField->m_pDict, "DA");
+ if (!pObj) {
+ return m_pField->m_pForm->GetDefaultAppearance();
+ }
+ return pObj->GetString();
}
-CPDF_Font* CPDF_FormControl::GetDefaultControlFont()
-{
- CPDF_DefaultAppearance cDA = GetDefaultAppearance();
- CFX_ByteString csFontNameTag;
- FX_FLOAT fFontSize;
- cDA.GetFont(csFontNameTag, fFontSize);
- if (csFontNameTag.IsEmpty())
- return nullptr;
+CPDF_Font* CPDF_FormControl::GetDefaultControlFont() {
+ CPDF_DefaultAppearance cDA = GetDefaultAppearance();
+ CFX_ByteString csFontNameTag;
+ FX_FLOAT fFontSize;
+ cDA.GetFont(csFontNameTag, fFontSize);
+ if (csFontNameTag.IsEmpty())
+ return nullptr;
- CPDF_Object* pObj = FPDF_GetFieldAttr(m_pWidgetDict, "DR");
- if (pObj && pObj->GetType() == PDFOBJ_DICTIONARY) {
- CPDF_Dictionary* pFonts = ((CPDF_Dictionary*)pObj)->GetDict("Font");
- if (pFonts) {
- CPDF_Dictionary* pElement = pFonts->GetDict(csFontNameTag);
- if (pElement) {
- CPDF_Font* pFont =
- m_pField->m_pForm->m_pDocument->LoadFont(pElement);
- if (pFont) {
- return pFont;
- }
- }
+ CPDF_Object* pObj = FPDF_GetFieldAttr(m_pWidgetDict, "DR");
+ if (pObj && pObj->GetType() == PDFOBJ_DICTIONARY) {
+ CPDF_Dictionary* pFonts = ((CPDF_Dictionary*)pObj)->GetDict("Font");
+ if (pFonts) {
+ CPDF_Dictionary* pElement = pFonts->GetDict(csFontNameTag);
+ if (pElement) {
+ CPDF_Font* pFont = m_pField->m_pForm->m_pDocument->LoadFont(pElement);
+ if (pFont) {
+ return pFont;
}
+ }
}
- if (CPDF_Font* pFormFont = m_pField->m_pForm->GetFormFont(csFontNameTag))
- return pFormFont;
+ }
+ if (CPDF_Font* pFormFont = m_pField->m_pForm->GetFormFont(csFontNameTag))
+ return pFormFont;
- CPDF_Dictionary *pPageDict = m_pWidgetDict->GetDict("P");
- pObj = FPDF_GetFieldAttr(pPageDict, "Resources");
- if (pObj && pObj->GetType() == PDFOBJ_DICTIONARY) {
- CPDF_Dictionary* pFonts = ((CPDF_Dictionary*)pObj)->GetDict("Font");
- if (pFonts) {
- CPDF_Dictionary* pElement = pFonts->GetDict(csFontNameTag);
- if (pElement) {
- CPDF_Font* pFont =
- m_pField->m_pForm->m_pDocument->LoadFont(pElement);
- if (pFont) {
- return pFont;
- }
- }
+ CPDF_Dictionary* pPageDict = m_pWidgetDict->GetDict("P");
+ pObj = FPDF_GetFieldAttr(pPageDict, "Resources");
+ if (pObj && pObj->GetType() == PDFOBJ_DICTIONARY) {
+ CPDF_Dictionary* pFonts = ((CPDF_Dictionary*)pObj)->GetDict("Font");
+ if (pFonts) {
+ CPDF_Dictionary* pElement = pFonts->GetDict(csFontNameTag);
+ if (pElement) {
+ CPDF_Font* pFont = m_pField->m_pForm->m_pDocument->LoadFont(pElement);
+ if (pFont) {
+ return pFont;
}
+ }
}
- return nullptr;
+ }
+ return nullptr;
}
-int CPDF_FormControl::GetControlAlignment()
-{
- if (!m_pWidgetDict) {
- return 0;
- }
- if (m_pWidgetDict->KeyExist("Q")) {
- return m_pWidgetDict->GetInteger("Q", 0);
- }
- CPDF_Object* pObj = FPDF_GetFieldAttr(m_pField->m_pDict, "Q");
- if (pObj == NULL) {
- return m_pField->m_pForm->GetFormAlignment();
- }
- return pObj->GetInteger();
-}
-FX_BOOL CPDF_ApSettings::HasMKEntry(const CFX_ByteStringC& csEntry)
-{
- if (m_pDict == NULL) {
- return FALSE;
- }
- return m_pDict->KeyExist(csEntry);
-}
-int CPDF_ApSettings::GetRotation()
-{
- if (m_pDict == NULL) {
- return 0;
- }
- return m_pDict->GetInteger(FX_BSTRC("R"));
+int CPDF_FormControl::GetControlAlignment() {
+ if (!m_pWidgetDict) {
+ return 0;
+ }
+ if (m_pWidgetDict->KeyExist("Q")) {
+ return m_pWidgetDict->GetInteger("Q", 0);
+ }
+ CPDF_Object* pObj = FPDF_GetFieldAttr(m_pField->m_pDict, "Q");
+ if (pObj == NULL) {
+ return m_pField->m_pForm->GetFormAlignment();
+ }
+ return pObj->GetInteger();
+}
+FX_BOOL CPDF_ApSettings::HasMKEntry(const CFX_ByteStringC& csEntry) {
+ if (m_pDict == NULL) {
+ return FALSE;
+ }
+ return m_pDict->KeyExist(csEntry);
+}
+int CPDF_ApSettings::GetRotation() {
+ if (m_pDict == NULL) {
+ return 0;
+ }
+ return m_pDict->GetInteger(FX_BSTRC("R"));
}
-FX_ARGB CPDF_ApSettings::GetColor(int& iColorType, const CFX_ByteStringC& csEntry)
-{
- iColorType = COLORTYPE_TRANSPARENT;
- if (m_pDict == NULL) {
- return 0;
- }
- FX_ARGB color = 0;
- CPDF_Array* pEntry = m_pDict->GetArray(csEntry);
- if (pEntry == NULL) {
- return color;
- }
- FX_DWORD dwCount = pEntry->GetCount();
- if (dwCount == 1) {
- iColorType = COLORTYPE_GRAY;
- FX_FLOAT g = pEntry->GetNumber(0) * 255;
- color = ArgbEncode(255, (int)g, (int)g, (int)g);
- } else if (dwCount == 3) {
- iColorType = COLORTYPE_RGB;
- FX_FLOAT r = pEntry->GetNumber(0) * 255;
- FX_FLOAT g = pEntry->GetNumber(1) * 255;
- FX_FLOAT b = pEntry->GetNumber(2) * 255;
- color = ArgbEncode(255, (int)r, (int)g, (int)b);
- } else if (dwCount == 4) {
- iColorType = COLORTYPE_CMYK;
- FX_FLOAT c = pEntry->GetNumber(0);
- FX_FLOAT m = pEntry->GetNumber(1);
- FX_FLOAT y = pEntry->GetNumber(2);
- FX_FLOAT k = pEntry->GetNumber(3);
- FX_FLOAT r = 1.0f - FX_MIN(1.0f, c + k);
- FX_FLOAT g = 1.0f - FX_MIN(1.0f, m + k);
- FX_FLOAT b = 1.0f - FX_MIN(1.0f, y + k);
- color = ArgbEncode(255, (int)(r * 255), (int)(g * 255), (int)(b * 255));
- }
+FX_ARGB CPDF_ApSettings::GetColor(int& iColorType,
+ const CFX_ByteStringC& csEntry) {
+ iColorType = COLORTYPE_TRANSPARENT;
+ if (m_pDict == NULL) {
+ return 0;
+ }
+ FX_ARGB color = 0;
+ CPDF_Array* pEntry = m_pDict->GetArray(csEntry);
+ if (pEntry == NULL) {
return color;
-}
-FX_FLOAT CPDF_ApSettings::GetOriginalColor(int index, const CFX_ByteStringC& csEntry)
-{
- if (m_pDict == NULL) {
- return 0;
- }
- CPDF_Array* pEntry = m_pDict->GetArray(csEntry);
- if (pEntry != NULL) {
- return pEntry->GetNumber(index);
- }
+ }
+ FX_DWORD dwCount = pEntry->GetCount();
+ if (dwCount == 1) {
+ iColorType = COLORTYPE_GRAY;
+ FX_FLOAT g = pEntry->GetNumber(0) * 255;
+ color = ArgbEncode(255, (int)g, (int)g, (int)g);
+ } else if (dwCount == 3) {
+ iColorType = COLORTYPE_RGB;
+ FX_FLOAT r = pEntry->GetNumber(0) * 255;
+ FX_FLOAT g = pEntry->GetNumber(1) * 255;
+ FX_FLOAT b = pEntry->GetNumber(2) * 255;
+ color = ArgbEncode(255, (int)r, (int)g, (int)b);
+ } else if (dwCount == 4) {
+ iColorType = COLORTYPE_CMYK;
+ FX_FLOAT c = pEntry->GetNumber(0);
+ FX_FLOAT m = pEntry->GetNumber(1);
+ FX_FLOAT y = pEntry->GetNumber(2);
+ FX_FLOAT k = pEntry->GetNumber(3);
+ FX_FLOAT r = 1.0f - FX_MIN(1.0f, c + k);
+ FX_FLOAT g = 1.0f - FX_MIN(1.0f, m + k);
+ FX_FLOAT b = 1.0f - FX_MIN(1.0f, y + k);
+ color = ArgbEncode(255, (int)(r * 255), (int)(g * 255), (int)(b * 255));
+ }
+ return color;
+}
+FX_FLOAT CPDF_ApSettings::GetOriginalColor(int index,
+ const CFX_ByteStringC& csEntry) {
+ if (m_pDict == NULL) {
return 0;
-}
-void CPDF_ApSettings::GetOriginalColor(int& iColorType, FX_FLOAT fc[4], const CFX_ByteStringC& csEntry)
-{
- iColorType = COLORTYPE_TRANSPARENT;
- for (int i = 0; i < 4; i ++) {
- fc[i] = 0;
- }
- if (m_pDict == NULL) {
- return;
- }
- CPDF_Array* pEntry = m_pDict->GetArray(csEntry);
- if (pEntry == NULL) {
- return;
- }
- FX_DWORD dwCount = pEntry->GetCount();
- if (dwCount == 1) {
- iColorType = COLORTYPE_GRAY;
- fc[0] = pEntry->GetNumber(0);
- } else if (dwCount == 3) {
- iColorType = COLORTYPE_RGB;
- fc[0] = pEntry->GetNumber(0);
- fc[1] = pEntry->GetNumber(1);
- fc[2] = pEntry->GetNumber(2);
- } else if (dwCount == 4) {
- iColorType = COLORTYPE_CMYK;
- fc[0] = pEntry->GetNumber(0);
- fc[1] = pEntry->GetNumber(1);
- fc[2] = pEntry->GetNumber(2);
- fc[3] = pEntry->GetNumber(3);
- }
-}
-CFX_WideString CPDF_ApSettings::GetCaption(const CFX_ByteStringC& csEntry)
-{
- CFX_WideString csCaption;
- if (m_pDict == NULL) {
- return csCaption;
- }
- return m_pDict->GetUnicodeText(csEntry);
-}
-CPDF_Stream* CPDF_ApSettings::GetIcon(const CFX_ByteStringC& csEntry)
-{
- if (m_pDict == NULL) {
- return NULL;
- }
- return m_pDict->GetStream(csEntry);
-}
-CPDF_IconFit CPDF_ApSettings::GetIconFit()
-{
- if (m_pDict == NULL) {
- return NULL;
- }
- return m_pDict->GetDict(FX_BSTRC("IF"));
-}
-int CPDF_ApSettings::GetTextPosition()
-{
- if (m_pDict == NULL) {
- return TEXTPOS_CAPTION;
- }
- return m_pDict->GetInteger(FX_BSTRC("TP"), TEXTPOS_CAPTION);
+ }
+ CPDF_Array* pEntry = m_pDict->GetArray(csEntry);
+ if (pEntry != NULL) {
+ return pEntry->GetNumber(index);
+ }
+ return 0;
+}
+void CPDF_ApSettings::GetOriginalColor(int& iColorType,
+ FX_FLOAT fc[4],
+ const CFX_ByteStringC& csEntry) {
+ iColorType = COLORTYPE_TRANSPARENT;
+ for (int i = 0; i < 4; i++) {
+ fc[i] = 0;
+ }
+ if (m_pDict == NULL) {
+ return;
+ }
+ CPDF_Array* pEntry = m_pDict->GetArray(csEntry);
+ if (pEntry == NULL) {
+ return;
+ }
+ FX_DWORD dwCount = pEntry->GetCount();
+ if (dwCount == 1) {
+ iColorType = COLORTYPE_GRAY;
+ fc[0] = pEntry->GetNumber(0);
+ } else if (dwCount == 3) {
+ iColorType = COLORTYPE_RGB;
+ fc[0] = pEntry->GetNumber(0);
+ fc[1] = pEntry->GetNumber(1);
+ fc[2] = pEntry->GetNumber(2);
+ } else if (dwCount == 4) {
+ iColorType = COLORTYPE_CMYK;
+ fc[0] = pEntry->GetNumber(0);
+ fc[1] = pEntry->GetNumber(1);
+ fc[2] = pEntry->GetNumber(2);
+ fc[3] = pEntry->GetNumber(3);
+ }
+}
+CFX_WideString CPDF_ApSettings::GetCaption(const CFX_ByteStringC& csEntry) {
+ CFX_WideString csCaption;
+ if (m_pDict == NULL) {
+ return csCaption;
+ }
+ return m_pDict->GetUnicodeText(csEntry);
+}
+CPDF_Stream* CPDF_ApSettings::GetIcon(const CFX_ByteStringC& csEntry) {
+ if (m_pDict == NULL) {
+ return NULL;
+ }
+ return m_pDict->GetStream(csEntry);
+}
+CPDF_IconFit CPDF_ApSettings::GetIconFit() {
+ if (m_pDict == NULL) {
+ return NULL;
+ }
+ return m_pDict->GetDict(FX_BSTRC("IF"));
+}
+int CPDF_ApSettings::GetTextPosition() {
+ if (m_pDict == NULL) {
+ return TEXTPOS_CAPTION;
+ }
+ return m_pDict->GetInteger(FX_BSTRC("TP"), TEXTPOS_CAPTION);
}
diff --git a/core/src/fpdfdoc/doc_formfield.cpp b/core/src/fpdfdoc/doc_formfield.cpp
index 087eba8aa4..8541d9c144 100644
--- a/core/src/fpdfdoc/doc_formfield.cpp
+++ b/core/src/fpdfdoc/doc_formfield.cpp
@@ -7,1100 +7,1068 @@
#include "../../include/fpdfdoc/fpdf_doc.h"
#include "doc_utils.h"
-FX_BOOL PDF_FormField_IsUnison(CPDF_FormField *pField)
-{
- FX_BOOL bUnison = FALSE;
- if (pField->GetType() == CPDF_FormField::CheckBox) {
- bUnison = TRUE;
+FX_BOOL PDF_FormField_IsUnison(CPDF_FormField* pField) {
+ FX_BOOL bUnison = FALSE;
+ if (pField->GetType() == CPDF_FormField::CheckBox) {
+ bUnison = TRUE;
+ } else {
+ FX_DWORD dwFlags = pField->GetFieldFlags();
+ bUnison = ((dwFlags & 0x2000000) != 0);
+ }
+ return bUnison;
+}
+CPDF_FormField::CPDF_FormField(CPDF_InterForm* pForm, CPDF_Dictionary* pDict) {
+ m_pDict = pDict;
+ m_Type = Unknown;
+ m_pForm = pForm;
+ m_pFont = NULL;
+ m_FontSize = 0;
+ SyncFieldFlags();
+}
+CPDF_FormField::~CPDF_FormField() {}
+void CPDF_FormField::SyncFieldFlags() {
+ CFX_ByteString type_name = FPDF_GetFieldAttr(m_pDict, "FT")
+ ? FPDF_GetFieldAttr(m_pDict, "FT")->GetString()
+ : CFX_ByteString();
+ FX_DWORD flags = FPDF_GetFieldAttr(m_pDict, "Ff")
+ ? FPDF_GetFieldAttr(m_pDict, "Ff")->GetInteger()
+ : 0;
+ m_Flags = 0;
+ if (flags & 1) {
+ m_Flags |= FORMFIELD_READONLY;
+ }
+ if (flags & 2) {
+ m_Flags |= FORMFIELD_REQUIRED;
+ }
+ if (flags & 4) {
+ m_Flags |= FORMFIELD_NOEXPORT;
+ }
+ if (type_name == "Btn") {
+ if (flags & 0x8000) {
+ m_Type = RadioButton;
+ if (flags & 0x4000) {
+ m_Flags |= FORMRADIO_NOTOGGLEOFF;
+ }
+ if (flags & 0x2000000) {
+ m_Flags |= FORMRADIO_UNISON;
+ }
+ } else if (flags & 0x10000) {
+ m_Type = PushButton;
} else {
- FX_DWORD dwFlags = pField->GetFieldFlags();
- bUnison = ((dwFlags & 0x2000000) != 0);
+ m_Type = CheckBox;
}
- return bUnison;
-}
-CPDF_FormField::CPDF_FormField(CPDF_InterForm* pForm, CPDF_Dictionary* pDict)
-{
- m_pDict = pDict;
- m_Type = Unknown;
- m_pForm = pForm;
- m_pFont = NULL;
- m_FontSize = 0;
- SyncFieldFlags();
+ } else if (type_name == "Tx") {
+ if (flags & 0x100000) {
+ m_Type = File;
+ } else if (flags & 0x2000000) {
+ m_Type = RichText;
+ } else {
+ m_Type = Text;
+ if (flags & 0x1000) {
+ m_Flags |= FORMTEXT_MULTILINE;
+ }
+ if (flags & 0x2000) {
+ m_Flags |= FORMTEXT_PASSWORD;
+ }
+ if (flags & 0x800000) {
+ m_Flags |= FORMTEXT_NOSCROLL;
+ }
+ if (flags & 0x100000) {
+ m_Flags |= FORMTEXT_COMB;
+ }
+ }
+ LoadDA();
+ } else if (type_name == "Ch") {
+ if (flags & 0x20000) {
+ m_Type = ComboBox;
+ if (flags & 0x40000) {
+ m_Flags |= FORMCOMBO_EDIT;
+ }
+ } else {
+ m_Type = ListBox;
+ if (flags & 0x200000) {
+ m_Flags |= FORMLIST_MULTISELECT;
+ }
+ }
+ LoadDA();
+ } else if (type_name == "Sig") {
+ m_Type = Sign;
+ }
}
-CPDF_FormField::~CPDF_FormField()
-{
+CFX_WideString CPDF_FormField::GetFullName() {
+ return ::GetFullName(m_pDict);
}
-void CPDF_FormField::SyncFieldFlags()
-{
- CFX_ByteString type_name = FPDF_GetFieldAttr(m_pDict, "FT") ? FPDF_GetFieldAttr(m_pDict, "FT")->GetString() : CFX_ByteString();
- FX_DWORD flags = FPDF_GetFieldAttr(m_pDict, "Ff")? FPDF_GetFieldAttr(m_pDict, "Ff")->GetInteger() : 0;
- m_Flags = 0;
- if (flags & 1) {
- m_Flags |= FORMFIELD_READONLY;
- }
- if (flags & 2) {
- m_Flags |= FORMFIELD_REQUIRED;
- }
- if (flags & 4) {
- m_Flags |= FORMFIELD_NOEXPORT;
- }
- if (type_name == "Btn") {
- if (flags & 0x8000) {
- m_Type = RadioButton;
- if (flags & 0x4000) {
- m_Flags |= FORMRADIO_NOTOGGLEOFF;
- }
- if (flags & 0x2000000) {
- m_Flags |= FORMRADIO_UNISON;
- }
- } else if (flags & 0x10000) {
- m_Type = PushButton;
+FX_BOOL CPDF_FormField::ResetField(FX_BOOL bNotify) {
+ switch (m_Type) {
+ case CPDF_FormField::CheckBox:
+ case CPDF_FormField::RadioButton: {
+ CFX_ByteArray statusArray;
+ if (bNotify && m_pForm->m_pFormNotify != NULL) {
+ SaveCheckedFieldStatus(this, statusArray);
+ }
+ int iCount = CountControls();
+ if (iCount) {
+ if (PDF_FormField_IsUnison(this)) {
+ for (int i = 0; i < iCount; i++) {
+ CheckControl(i, GetControl(i)->IsDefaultChecked(), FALSE);
+ }
} else {
- m_Type = CheckBox;
+ for (int i = 0; i < iCount; i++) {
+ CPDF_FormControl* pControl = GetControl(i);
+ FX_BOOL bChecked = pControl->IsDefaultChecked();
+ CheckControl(i, bChecked, FALSE);
+ }
}
- } else if (type_name == "Tx") {
- if (flags & 0x100000) {
- m_Type = File;
- } else if (flags & 0x2000000) {
- m_Type = RichText;
- } else {
- m_Type = Text;
- if (flags & 0x1000) {
- m_Flags |= FORMTEXT_MULTILINE;
- }
- if (flags & 0x2000) {
- m_Flags |= FORMTEXT_PASSWORD;
- }
- if (flags & 0x800000) {
- m_Flags |= FORMTEXT_NOSCROLL;
- }
- if (flags & 0x100000) {
- m_Flags |= FORMTEXT_COMB;
- }
+ }
+ if (bNotify && m_pForm->m_pFormNotify != NULL) {
+ m_pForm->m_pFormNotify->AfterCheckedStatusChange(this, statusArray);
+ }
+ } break;
+ case CPDF_FormField::ComboBox: {
+ CFX_WideString csValue;
+ ClearSelection();
+ int iIndex = GetDefaultSelectedItem();
+ if (iIndex >= 0) {
+ csValue = GetOptionLabel(iIndex);
+ }
+ if (bNotify && m_pForm->m_pFormNotify != NULL) {
+ int iRet = m_pForm->m_pFormNotify->BeforeValueChange(this, csValue);
+ if (iRet < 0) {
+ return FALSE;
}
- LoadDA();
- } else if (type_name == "Ch") {
- if (flags & 0x20000) {
- m_Type = ComboBox;
- if (flags & 0x40000) {
- m_Flags |= FORMCOMBO_EDIT;
- }
- } else {
- m_Type = ListBox;
- if (flags & 0x200000) {
- m_Flags |= FORMLIST_MULTISELECT;
- }
+ }
+ SetItemSelection(iIndex, TRUE);
+ if (bNotify && m_pForm->m_pFormNotify != NULL) {
+ m_pForm->m_pFormNotify->AfterValueChange(this);
+ }
+ } break;
+ case CPDF_FormField::ListBox: {
+ CFX_WideString csValue;
+ ClearSelection();
+ int iIndex = GetDefaultSelectedItem();
+ if (iIndex >= 0) {
+ csValue = GetOptionLabel(iIndex);
+ }
+ if (bNotify && m_pForm->m_pFormNotify != NULL) {
+ int iRet = m_pForm->m_pFormNotify->BeforeSelectionChange(this, csValue);
+ if (iRet < 0) {
+ return FALSE;
}
- LoadDA();
- } else if (type_name == "Sig") {
- m_Type = Sign;
- }
-}
-CFX_WideString CPDF_FormField::GetFullName()
-{
- return ::GetFullName(m_pDict);
-}
-FX_BOOL CPDF_FormField::ResetField(FX_BOOL bNotify)
-{
- switch (m_Type) {
- case CPDF_FormField::CheckBox:
- case CPDF_FormField::RadioButton: {
- CFX_ByteArray statusArray;
- if (bNotify && m_pForm->m_pFormNotify != NULL) {
- SaveCheckedFieldStatus(this, statusArray);
- }
- int iCount = CountControls();
- if (iCount) {
- if (PDF_FormField_IsUnison(this)) {
- for(int i = 0; i < iCount; i++) {
- CheckControl(i, GetControl(i)->IsDefaultChecked(), FALSE);
- }
- } else {
- for (int i = 0; i < iCount; i ++) {
- CPDF_FormControl* pControl = GetControl(i);
- FX_BOOL bChecked = pControl->IsDefaultChecked();
- CheckControl(i, bChecked, FALSE);
- }
- }
- }
- if (bNotify && m_pForm->m_pFormNotify != NULL) {
- m_pForm->m_pFormNotify->AfterCheckedStatusChange(this, statusArray);
- }
- }
- break;
- case CPDF_FormField::ComboBox: {
- CFX_WideString csValue;
- ClearSelection();
- int iIndex = GetDefaultSelectedItem();
- if (iIndex >= 0) {
- csValue = GetOptionLabel(iIndex);
- }
- if (bNotify && m_pForm->m_pFormNotify != NULL) {
- int iRet = m_pForm->m_pFormNotify->BeforeValueChange(this, csValue);
- if (iRet < 0) {
- return FALSE;
- }
- }
- SetItemSelection(iIndex, TRUE);
- if (bNotify && m_pForm->m_pFormNotify != NULL) {
- m_pForm->m_pFormNotify->AfterValueChange(this);
- }
- }
- break;
- case CPDF_FormField::ListBox: {
- CFX_WideString csValue;
- ClearSelection();
- int iIndex = GetDefaultSelectedItem();
- if (iIndex >= 0) {
- csValue = GetOptionLabel(iIndex);
- }
- if (bNotify && m_pForm->m_pFormNotify != NULL) {
- int iRet = m_pForm->m_pFormNotify->BeforeSelectionChange(this, csValue);
- if (iRet < 0) {
- return FALSE;
- }
- }
- SetItemSelection(iIndex, TRUE);
- if (bNotify && m_pForm->m_pFormNotify != NULL) {
- m_pForm->m_pFormNotify->AfterSelectionChange(this);
- }
- }
- break;
- case CPDF_FormField::Text:
- case CPDF_FormField::RichText:
- case CPDF_FormField::File:
- default: {
- CPDF_Object* pDV = FPDF_GetFieldAttr(m_pDict, "DV");
- CFX_WideString csDValue;
- if (pDV != NULL) {
- csDValue = pDV->GetUnicodeText();
- }
- CPDF_Object* pV = FPDF_GetFieldAttr(m_pDict, "V");
- CFX_WideString csValue;
- if (pV != NULL) {
- csValue = pV->GetUnicodeText();
- }
- CPDF_Object* pRV = FPDF_GetFieldAttr(m_pDict, "RV");
- if (!pRV && (csDValue == csValue)) {
- return FALSE;
- }
- if (bNotify && m_pForm->m_pFormNotify != NULL) {
- int iRet = m_pForm->m_pFormNotify->BeforeValueChange(this, csDValue);
- if (iRet < 0) {
- return FALSE;
- }
- }
- if (pDV == NULL) {
- m_pDict->RemoveAt("V");
- m_pDict->RemoveAt("RV");
- } else {
- CPDF_Object* pClone = pDV->Clone();
- if (pClone == NULL) {
- return FALSE;
- }
- m_pDict->SetAt("V", pClone);
- if(pRV) {
- CPDF_Object* pCloneR = pDV->Clone();
- m_pDict->SetAt("RV", pCloneR);
- }
- }
- if (bNotify && m_pForm->m_pFormNotify != NULL) {
- m_pForm->m_pFormNotify->AfterValueChange(this);
- }
- m_pForm->m_bUpdated = TRUE;
- }
- break;
- }
- return TRUE;
-}
-int CPDF_FormField::GetControlIndex(const CPDF_FormControl* pControl)
-{
- if (pControl == NULL) {
- return -1;
- }
- int iCount = m_ControlList.GetSize();
- for (int i = 0; i < iCount; i ++) {
- CPDF_FormControl* pFind = (CPDF_FormControl*)m_ControlList.GetAt(i);
- if (pFind == pControl) {
- return i;
+ }
+ SetItemSelection(iIndex, TRUE);
+ if (bNotify && m_pForm->m_pFormNotify != NULL) {
+ m_pForm->m_pFormNotify->AfterSelectionChange(this);
+ }
+ } break;
+ case CPDF_FormField::Text:
+ case CPDF_FormField::RichText:
+ case CPDF_FormField::File:
+ default: {
+ CPDF_Object* pDV = FPDF_GetFieldAttr(m_pDict, "DV");
+ CFX_WideString csDValue;
+ if (pDV != NULL) {
+ csDValue = pDV->GetUnicodeText();
+ }
+ CPDF_Object* pV = FPDF_GetFieldAttr(m_pDict, "V");
+ CFX_WideString csValue;
+ if (pV != NULL) {
+ csValue = pV->GetUnicodeText();
+ }
+ CPDF_Object* pRV = FPDF_GetFieldAttr(m_pDict, "RV");
+ if (!pRV && (csDValue == csValue)) {
+ return FALSE;
+ }
+ if (bNotify && m_pForm->m_pFormNotify != NULL) {
+ int iRet = m_pForm->m_pFormNotify->BeforeValueChange(this, csDValue);
+ if (iRet < 0) {
+ return FALSE;
}
- }
+ }
+ if (pDV == NULL) {
+ m_pDict->RemoveAt("V");
+ m_pDict->RemoveAt("RV");
+ } else {
+ CPDF_Object* pClone = pDV->Clone();
+ if (pClone == NULL) {
+ return FALSE;
+ }
+ m_pDict->SetAt("V", pClone);
+ if (pRV) {
+ CPDF_Object* pCloneR = pDV->Clone();
+ m_pDict->SetAt("RV", pCloneR);
+ }
+ }
+ if (bNotify && m_pForm->m_pFormNotify != NULL) {
+ m_pForm->m_pFormNotify->AfterValueChange(this);
+ }
+ m_pForm->m_bUpdated = TRUE;
+ } break;
+ }
+ return TRUE;
+}
+int CPDF_FormField::GetControlIndex(const CPDF_FormControl* pControl) {
+ if (pControl == NULL) {
return -1;
+ }
+ int iCount = m_ControlList.GetSize();
+ for (int i = 0; i < iCount; i++) {
+ CPDF_FormControl* pFind = (CPDF_FormControl*)m_ControlList.GetAt(i);
+ if (pFind == pControl) {
+ return i;
+ }
+ }
+ return -1;
}
-int CPDF_FormField::GetFieldType()
-{
- switch (m_Type) {
- case PushButton:
- return FIELDTYPE_PUSHBUTTON;
- case CheckBox:
- return FIELDTYPE_CHECKBOX;
- case RadioButton:
- return FIELDTYPE_RADIOBUTTON;
- case ComboBox:
- return FIELDTYPE_COMBOBOX;
- case ListBox:
- return FIELDTYPE_LISTBOX;
- case Text:
- case RichText:
- case File:
- return FIELDTYPE_TEXTFIELD;
- case Sign:
- return FIELDTYPE_SIGNATURE;
- default:
- break;
- }
- return FIELDTYPE_UNKNOWN;
+int CPDF_FormField::GetFieldType() {
+ switch (m_Type) {
+ case PushButton:
+ return FIELDTYPE_PUSHBUTTON;
+ case CheckBox:
+ return FIELDTYPE_CHECKBOX;
+ case RadioButton:
+ return FIELDTYPE_RADIOBUTTON;
+ case ComboBox:
+ return FIELDTYPE_COMBOBOX;
+ case ListBox:
+ return FIELDTYPE_LISTBOX;
+ case Text:
+ case RichText:
+ case File:
+ return FIELDTYPE_TEXTFIELD;
+ case Sign:
+ return FIELDTYPE_SIGNATURE;
+ default:
+ break;
+ }
+ return FIELDTYPE_UNKNOWN;
}
-CPDF_AAction CPDF_FormField::GetAdditionalAction()
-{
- CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "AA");
- if (pObj == NULL) {
- return NULL;
- }
- return pObj->GetDict();
+CPDF_AAction CPDF_FormField::GetAdditionalAction() {
+ CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "AA");
+ if (pObj == NULL) {
+ return NULL;
+ }
+ return pObj->GetDict();
}
-CFX_WideString CPDF_FormField::GetAlternateName()
-{
- CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "TU");
- if (pObj == NULL) {
- return L"";
- }
- return pObj->GetUnicodeText();
+CFX_WideString CPDF_FormField::GetAlternateName() {
+ CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "TU");
+ if (pObj == NULL) {
+ return L"";
+ }
+ return pObj->GetUnicodeText();
}
-CFX_WideString CPDF_FormField::GetMappingName()
-{
- CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "TM");
- if (pObj == NULL) {
- return L"";
- }
- return pObj->GetUnicodeText();
+CFX_WideString CPDF_FormField::GetMappingName() {
+ CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "TM");
+ if (pObj == NULL) {
+ return L"";
+ }
+ return pObj->GetUnicodeText();
}
-FX_DWORD CPDF_FormField::GetFieldFlags()
-{
- CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "Ff");
- if (pObj == NULL) {
- return 0;
- }
- return pObj->GetInteger();
+FX_DWORD CPDF_FormField::GetFieldFlags() {
+ CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "Ff");
+ if (pObj == NULL) {
+ return 0;
+ }
+ return pObj->GetInteger();
}
-CFX_ByteString CPDF_FormField::GetDefaultStyle()
-{
- CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "DS");
- if (pObj == NULL) {
- return "";
- }
- return pObj->GetString();
+CFX_ByteString CPDF_FormField::GetDefaultStyle() {
+ CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "DS");
+ if (pObj == NULL) {
+ return "";
+ }
+ return pObj->GetString();
}
-CFX_WideString CPDF_FormField::GetRichTextString()
-{
- CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "RV");
- if (pObj == NULL) {
- return L"";
- }
- return pObj->GetUnicodeText();
+CFX_WideString CPDF_FormField::GetRichTextString() {
+ CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "RV");
+ if (pObj == NULL) {
+ return L"";
+ }
+ return pObj->GetUnicodeText();
}
-CFX_WideString CPDF_FormField::GetValue(FX_BOOL bDefault)
-{
- if (GetType() == CheckBox || GetType() == RadioButton) {
- return GetCheckValue(bDefault);
+CFX_WideString CPDF_FormField::GetValue(FX_BOOL bDefault) {
+ if (GetType() == CheckBox || GetType() == RadioButton) {
+ return GetCheckValue(bDefault);
+ }
+ CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict, bDefault ? "DV" : "V");
+ if (pValue == NULL) {
+ if (!bDefault) {
+ if (m_Type == RichText) {
+ pValue = FPDF_GetFieldAttr(m_pDict, "V");
+ }
+ if (pValue == NULL && m_Type != Text) {
+ pValue = FPDF_GetFieldAttr(m_pDict, "DV");
+ }
}
- CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict, bDefault ? "DV" : "V");
if (pValue == NULL) {
- if (!bDefault) {
- if (m_Type == RichText) {
- pValue = FPDF_GetFieldAttr(m_pDict, "V");
- }
- if (pValue == NULL && m_Type != Text) {
- pValue = FPDF_GetFieldAttr(m_pDict, "DV");
- }
- }
- if (pValue == NULL) {
- return CFX_WideString();
- }
- }
- switch (pValue->GetType()) {
- case PDFOBJ_STRING:
- case PDFOBJ_STREAM:
- return pValue->GetUnicodeText();
- case PDFOBJ_ARRAY:
- pValue = ((CPDF_Array*)pValue)->GetElementValue(0);
- if (pValue) {
- return pValue->GetUnicodeText();
- }
- break;
- }
- return CFX_WideString();
+ return CFX_WideString();
+ }
+ }
+ switch (pValue->GetType()) {
+ case PDFOBJ_STRING:
+ case PDFOBJ_STREAM:
+ return pValue->GetUnicodeText();
+ case PDFOBJ_ARRAY:
+ pValue = ((CPDF_Array*)pValue)->GetElementValue(0);
+ if (pValue) {
+ return pValue->GetUnicodeText();
+ }
+ break;
+ }
+ return CFX_WideString();
}
-CFX_WideString CPDF_FormField::GetValue()
-{
- return GetValue(FALSE);
+CFX_WideString CPDF_FormField::GetValue() {
+ return GetValue(FALSE);
}
-CFX_WideString CPDF_FormField::GetDefaultValue()
-{
- return GetValue(TRUE);
+CFX_WideString CPDF_FormField::GetDefaultValue() {
+ return GetValue(TRUE);
}
-FX_BOOL CPDF_FormField::SetValue(const CFX_WideString& value, FX_BOOL bDefault, FX_BOOL bNotify)
-{
- switch (m_Type) {
- case CheckBox:
- case RadioButton: {
- SetCheckValue(value, bDefault, bNotify);
- return TRUE;
- }
- case File:
- case RichText:
- case Text:
- case ComboBox: {
- CFX_WideString csValue = value;
- if (bNotify && m_pForm->m_pFormNotify != NULL) {
- int iRet = m_pForm->m_pFormNotify->BeforeValueChange(this, csValue);
- if (iRet < 0) {
- return FALSE;
- }
- }
- int iIndex = FindOptionValue(csValue);
- if (iIndex < 0) {
- CFX_ByteString bsEncodeText = PDF_EncodeText(csValue);
- m_pDict->SetAtString(bDefault ? "DV" : "V", bsEncodeText);
- if (m_Type == RichText && !bDefault) {
- m_pDict->SetAtString("RV", bsEncodeText);
- }
- m_pDict->RemoveAt("I");
- } else {
- m_pDict->SetAtString(bDefault ? "DV" : "V", PDF_EncodeText(csValue));
- if (bDefault) {
- } else {
- ClearSelection();
- SetItemSelection(iIndex, TRUE);
- }
- }
- if (bNotify && m_pForm->m_pFormNotify != NULL) {
- m_pForm->m_pFormNotify->AfterValueChange(this);
- }
- m_pForm->m_bUpdated = TRUE;
- }
- break;
- case ListBox: {
- int iIndex = FindOptionValue(value);
- if (iIndex < 0) {
- return FALSE;
- }
- if (bDefault && iIndex == GetDefaultSelectedItem()) {
- return FALSE;
- }
- if (bNotify && m_pForm->m_pFormNotify != NULL) {
- CFX_WideString csValue = value;
- int iRet = m_pForm->m_pFormNotify->BeforeSelectionChange(this, csValue);
- if (iRet < 0) {
- return FALSE;
- }
- }
- if (bDefault) {
- } else {
- ClearSelection();
- SetItemSelection(iIndex, TRUE);
- }
- if (bNotify && m_pForm->m_pFormNotify != NULL) {
- m_pForm->m_pFormNotify->AfterSelectionChange(this);
- }
- m_pForm->m_bUpdated = TRUE;
- break;
- }
- default:
- break;
- }
- if (CPDF_InterForm::m_bUpdateAP) {
- UpdateAP(NULL);
- }
- return TRUE;
-}
-FX_BOOL CPDF_FormField::SetValue(const CFX_WideString& value, FX_BOOL bNotify)
-{
- return SetValue(value, FALSE, bNotify);
-}
-int CPDF_FormField::GetMaxLen()
-{
- CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "MaxLen");
- if (pObj == NULL) {
- int iCount = m_ControlList.GetSize();
- for (int i = 0; i < iCount; i ++) {
- CPDF_FormControl* pControl = (CPDF_FormControl*)m_ControlList.GetAt(i);
- if (pControl == NULL) {
- continue;
- }
- CPDF_Dictionary* pWidgetDict = pControl->m_pWidgetDict;
- if (pWidgetDict->KeyExist("MaxLen")) {
- return pWidgetDict->GetInteger("MaxLen");
- }
+FX_BOOL CPDF_FormField::SetValue(const CFX_WideString& value,
+ FX_BOOL bDefault,
+ FX_BOOL bNotify) {
+ switch (m_Type) {
+ case CheckBox:
+ case RadioButton: {
+ SetCheckValue(value, bDefault, bNotify);
+ return TRUE;
+ }
+ case File:
+ case RichText:
+ case Text:
+ case ComboBox: {
+ CFX_WideString csValue = value;
+ if (bNotify && m_pForm->m_pFormNotify != NULL) {
+ int iRet = m_pForm->m_pFormNotify->BeforeValueChange(this, csValue);
+ if (iRet < 0) {
+ return FALSE;
}
- return 0;
- }
- return pObj->GetInteger();
-}
-int CPDF_FormField::CountSelectedItems()
-{
- CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict, "V");
- if (pValue == NULL) {
- pValue = FPDF_GetFieldAttr(m_pDict, "I");
- if (pValue == NULL) {
- return 0;
+ }
+ int iIndex = FindOptionValue(csValue);
+ if (iIndex < 0) {
+ CFX_ByteString bsEncodeText = PDF_EncodeText(csValue);
+ m_pDict->SetAtString(bDefault ? "DV" : "V", bsEncodeText);
+ if (m_Type == RichText && !bDefault) {
+ m_pDict->SetAtString("RV", bsEncodeText);
}
- }
- if (pValue->GetType() == PDFOBJ_STRING) {
- if (pValue->GetString().IsEmpty()) {
- return 0;
+ m_pDict->RemoveAt("I");
+ } else {
+ m_pDict->SetAtString(bDefault ? "DV" : "V", PDF_EncodeText(csValue));
+ if (bDefault) {
+ } else {
+ ClearSelection();
+ SetItemSelection(iIndex, TRUE);
}
- return 1;
- }
- if (pValue->GetType() == PDFOBJ_NUMBER) {
- if (pValue->GetString().IsEmpty()) {
- return 0;
+ }
+ if (bNotify && m_pForm->m_pFormNotify != NULL) {
+ m_pForm->m_pFormNotify->AfterValueChange(this);
+ }
+ m_pForm->m_bUpdated = TRUE;
+ } break;
+ case ListBox: {
+ int iIndex = FindOptionValue(value);
+ if (iIndex < 0) {
+ return FALSE;
+ }
+ if (bDefault && iIndex == GetDefaultSelectedItem()) {
+ return FALSE;
+ }
+ if (bNotify && m_pForm->m_pFormNotify != NULL) {
+ CFX_WideString csValue = value;
+ int iRet = m_pForm->m_pFormNotify->BeforeSelectionChange(this, csValue);
+ if (iRet < 0) {
+ return FALSE;
}
- return 1;
- }
- if (pValue->GetType() != PDFOBJ_ARRAY) {
- return 0;
- }
- return ((CPDF_Array*)pValue)->GetCount();
+ }
+ if (bDefault) {
+ } else {
+ ClearSelection();
+ SetItemSelection(iIndex, TRUE);
+ }
+ if (bNotify && m_pForm->m_pFormNotify != NULL) {
+ m_pForm->m_pFormNotify->AfterSelectionChange(this);
+ }
+ m_pForm->m_bUpdated = TRUE;
+ break;
+ }
+ default:
+ break;
+ }
+ if (CPDF_InterForm::m_bUpdateAP) {
+ UpdateAP(NULL);
+ }
+ return TRUE;
}
-int CPDF_FormField::GetSelectedIndex(int index)
-{
- CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict, "V");
+FX_BOOL CPDF_FormField::SetValue(const CFX_WideString& value, FX_BOOL bNotify) {
+ return SetValue(value, FALSE, bNotify);
+}
+int CPDF_FormField::GetMaxLen() {
+ CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "MaxLen");
+ if (pObj == NULL) {
+ int iCount = m_ControlList.GetSize();
+ for (int i = 0; i < iCount; i++) {
+ CPDF_FormControl* pControl = (CPDF_FormControl*)m_ControlList.GetAt(i);
+ if (pControl == NULL) {
+ continue;
+ }
+ CPDF_Dictionary* pWidgetDict = pControl->m_pWidgetDict;
+ if (pWidgetDict->KeyExist("MaxLen")) {
+ return pWidgetDict->GetInteger("MaxLen");
+ }
+ }
+ return 0;
+ }
+ return pObj->GetInteger();
+}
+int CPDF_FormField::CountSelectedItems() {
+ CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict, "V");
+ if (pValue == NULL) {
+ pValue = FPDF_GetFieldAttr(m_pDict, "I");
if (pValue == NULL) {
- pValue = FPDF_GetFieldAttr(m_pDict, "I");
- if (pValue == NULL) {
- return -1;
- }
- }
- if (pValue->GetType() == PDFOBJ_NUMBER) {
- return pValue->GetInteger();
- }
- CFX_WideString sel_value;
- if (pValue->GetType() == PDFOBJ_STRING) {
- if (index != 0) {
- return -1;
- }
- sel_value = pValue->GetUnicodeText();
- } else {
- if (pValue->GetType() != PDFOBJ_ARRAY) {
- return -1;
- }
- if (index < 0) {
- return -1;
- }
- CPDF_Object* elementValue = ((CPDF_Array*)pValue)->GetElementValue(index);
- sel_value = elementValue ? elementValue->GetUnicodeText() : CFX_WideString();
- }
- if (index < CountSelectedOptions()) {
- int iOptIndex = GetSelectedOptionIndex(index);
- CFX_WideString csOpt = GetOptionValue(iOptIndex);
- if (csOpt == sel_value) {
- return iOptIndex;
- }
- }
- int nOpts = CountOptions();
- for (int i = 0; i < nOpts; i ++) {
- if (sel_value == GetOptionValue(i)) {
- return i;
- }
- }
- return -1;
+ return 0;
+ }
+ }
+ if (pValue->GetType() == PDFOBJ_STRING) {
+ if (pValue->GetString().IsEmpty()) {
+ return 0;
+ }
+ return 1;
+ }
+ if (pValue->GetType() == PDFOBJ_NUMBER) {
+ if (pValue->GetString().IsEmpty()) {
+ return 0;
+ }
+ return 1;
+ }
+ if (pValue->GetType() != PDFOBJ_ARRAY) {
+ return 0;
+ }
+ return ((CPDF_Array*)pValue)->GetCount();
}
-FX_BOOL CPDF_FormField::ClearSelection(FX_BOOL bNotify)
-{
- if (bNotify && m_pForm->m_pFormNotify != NULL) {
- int iRet = 0;
- CFX_WideString csValue;
- int iIndex = GetSelectedIndex(0);
- if (iIndex >= 0) {
- csValue = GetOptionLabel(iIndex);
- }
- if (GetType() == ListBox) {
- iRet = m_pForm->m_pFormNotify->BeforeSelectionChange(this, csValue);
- }
- if (GetType() == ComboBox) {
- iRet = m_pForm->m_pFormNotify->BeforeValueChange(this, csValue);
- }
- if (iRet < 0) {
- return FALSE;
- }
- }
- m_pDict->RemoveAt("V");
- m_pDict->RemoveAt("I");
- if (bNotify && m_pForm->m_pFormNotify != NULL) {
- if (GetType() == ListBox) {
- m_pForm->m_pFormNotify->AfterSelectionChange(this);
- }
- if (GetType() == ComboBox) {
- m_pForm->m_pFormNotify->AfterValueChange(this);
- }
- }
- if (CPDF_InterForm::m_bUpdateAP) {
- UpdateAP(NULL);
- }
- m_pForm->m_bUpdated = TRUE;
- return TRUE;
+int CPDF_FormField::GetSelectedIndex(int index) {
+ CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict, "V");
+ if (pValue == NULL) {
+ pValue = FPDF_GetFieldAttr(m_pDict, "I");
+ if (pValue == NULL) {
+ return -1;
+ }
+ }
+ if (pValue->GetType() == PDFOBJ_NUMBER) {
+ return pValue->GetInteger();
+ }
+ CFX_WideString sel_value;
+ if (pValue->GetType() == PDFOBJ_STRING) {
+ if (index != 0) {
+ return -1;
+ }
+ sel_value = pValue->GetUnicodeText();
+ } else {
+ if (pValue->GetType() != PDFOBJ_ARRAY) {
+ return -1;
+ }
+ if (index < 0) {
+ return -1;
+ }
+ CPDF_Object* elementValue = ((CPDF_Array*)pValue)->GetElementValue(index);
+ sel_value =
+ elementValue ? elementValue->GetUnicodeText() : CFX_WideString();
+ }
+ if (index < CountSelectedOptions()) {
+ int iOptIndex = GetSelectedOptionIndex(index);
+ CFX_WideString csOpt = GetOptionValue(iOptIndex);
+ if (csOpt == sel_value) {
+ return iOptIndex;
+ }
+ }
+ int nOpts = CountOptions();
+ for (int i = 0; i < nOpts; i++) {
+ if (sel_value == GetOptionValue(i)) {
+ return i;
+ }
+ }
+ return -1;
}
-FX_BOOL CPDF_FormField::IsItemSelected(int index)
-{
- ASSERT(GetType() == ComboBox || GetType() == ListBox);
- if (index < 0 || index >= CountOptions()) {
- return FALSE;
- }
- if (IsOptionSelected(index)) {
- return TRUE;
- }
- CFX_WideString opt_value = GetOptionValue(index);
- CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict, "V");
+FX_BOOL CPDF_FormField::ClearSelection(FX_BOOL bNotify) {
+ if (bNotify && m_pForm->m_pFormNotify != NULL) {
+ int iRet = 0;
+ CFX_WideString csValue;
+ int iIndex = GetSelectedIndex(0);
+ if (iIndex >= 0) {
+ csValue = GetOptionLabel(iIndex);
+ }
+ if (GetType() == ListBox) {
+ iRet = m_pForm->m_pFormNotify->BeforeSelectionChange(this, csValue);
+ }
+ if (GetType() == ComboBox) {
+ iRet = m_pForm->m_pFormNotify->BeforeValueChange(this, csValue);
+ }
+ if (iRet < 0) {
+ return FALSE;
+ }
+ }
+ m_pDict->RemoveAt("V");
+ m_pDict->RemoveAt("I");
+ if (bNotify && m_pForm->m_pFormNotify != NULL) {
+ if (GetType() == ListBox) {
+ m_pForm->m_pFormNotify->AfterSelectionChange(this);
+ }
+ if (GetType() == ComboBox) {
+ m_pForm->m_pFormNotify->AfterValueChange(this);
+ }
+ }
+ if (CPDF_InterForm::m_bUpdateAP) {
+ UpdateAP(NULL);
+ }
+ m_pForm->m_bUpdated = TRUE;
+ return TRUE;
+}
+FX_BOOL CPDF_FormField::IsItemSelected(int index) {
+ ASSERT(GetType() == ComboBox || GetType() == ListBox);
+ if (index < 0 || index >= CountOptions()) {
+ return FALSE;
+ }
+ if (IsOptionSelected(index)) {
+ return TRUE;
+ }
+ CFX_WideString opt_value = GetOptionValue(index);
+ CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict, "V");
+ if (pValue == NULL) {
+ pValue = FPDF_GetFieldAttr(m_pDict, "I");
if (pValue == NULL) {
- pValue = FPDF_GetFieldAttr(m_pDict, "I");
- if (pValue == NULL) {
- return FALSE;
- }
- }
- if (pValue->GetType() == PDFOBJ_STRING) {
- if (pValue->GetUnicodeText() == opt_value) {
- return TRUE;
- }
- return FALSE;
+ return FALSE;
}
- if (pValue->GetType() == PDFOBJ_NUMBER) {
- if (pValue->GetString().IsEmpty()) {
- return FALSE;
- }
- if (pValue->GetInteger() == index) {
- return TRUE;
- }
- return FALSE;
+ }
+ if (pValue->GetType() == PDFOBJ_STRING) {
+ if (pValue->GetUnicodeText() == opt_value) {
+ return TRUE;
}
- if (pValue->GetType() != PDFOBJ_ARRAY) {
- return FALSE;
+ return FALSE;
+ }
+ if (pValue->GetType() == PDFOBJ_NUMBER) {
+ if (pValue->GetString().IsEmpty()) {
+ return FALSE;
}
- CPDF_Array* pArray = (CPDF_Array*)pValue;
- int iPos = -1;
- for (int j = 0; j < CountSelectedOptions(); j ++) {
- if (GetSelectedOptionIndex(j) == index) {
- iPos = j;
- break;
- }
+ if (pValue->GetInteger() == index) {
+ return TRUE;
}
- for (FX_DWORD i = 0; i < pArray->GetCount(); i ++)
- if (pArray->GetElementValue(i)->GetUnicodeText() == opt_value && (int)i == iPos) {
- return TRUE;
- }
return FALSE;
+ }
+ if (pValue->GetType() != PDFOBJ_ARRAY) {
+ return FALSE;
+ }
+ CPDF_Array* pArray = (CPDF_Array*)pValue;
+ int iPos = -1;
+ for (int j = 0; j < CountSelectedOptions(); j++) {
+ if (GetSelectedOptionIndex(j) == index) {
+ iPos = j;
+ break;
+ }
+ }
+ for (FX_DWORD i = 0; i < pArray->GetCount(); i++)
+ if (pArray->GetElementValue(i)->GetUnicodeText() == opt_value &&
+ (int)i == iPos) {
+ return TRUE;
+ }
+ return FALSE;
}
-FX_BOOL CPDF_FormField::SetItemSelection(int index, FX_BOOL bSelected, FX_BOOL bNotify)
-{
- ASSERT(GetType() == ComboBox || GetType() == ListBox);
- if (index < 0 || index >= CountOptions()) {
- return FALSE;
+FX_BOOL CPDF_FormField::SetItemSelection(int index,
+ FX_BOOL bSelected,
+ FX_BOOL bNotify) {
+ ASSERT(GetType() == ComboBox || GetType() == ListBox);
+ if (index < 0 || index >= CountOptions()) {
+ return FALSE;
+ }
+ CFX_WideString opt_value = GetOptionValue(index);
+ if (bNotify && m_pForm->m_pFormNotify != NULL) {
+ int iRet = 0;
+ if (GetType() == ListBox) {
+ iRet = m_pForm->m_pFormNotify->BeforeSelectionChange(this, opt_value);
}
- CFX_WideString opt_value = GetOptionValue(index);
- if (bNotify && m_pForm->m_pFormNotify != NULL) {
- int iRet = 0;
- if (GetType() == ListBox) {
- iRet = m_pForm->m_pFormNotify->BeforeSelectionChange(this, opt_value);
- }
- if (GetType() == ComboBox) {
- iRet = m_pForm->m_pFormNotify->BeforeValueChange(this, opt_value);
- }
- if (iRet < 0) {
- return FALSE;
- }
+ if (GetType() == ComboBox) {
+ iRet = m_pForm->m_pFormNotify->BeforeValueChange(this, opt_value);
}
- if (!bSelected) {
- CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict, "V");
- if (pValue != NULL) {
- if (m_Type == ListBox) {
- SelectOption(index, FALSE);
- if (pValue->GetType() == PDFOBJ_STRING) {
- if (pValue->GetUnicodeText() == opt_value) {
- m_pDict->RemoveAt("V");
- }
- } else if (pValue->GetType() == PDFOBJ_ARRAY) {
- CPDF_Array* pArray = CPDF_Array::Create();
- if (pArray == NULL) {
- return FALSE;
- }
- int iCount = CountOptions();
- for (int i = 0; i < iCount; i ++) {
- if (i != index) {
- if (IsItemSelected(i)) {
- opt_value = GetOptionValue(i);
- pArray->AddString(PDF_EncodeText(opt_value));
- }
- }
- }
- if (pArray->GetCount() < 1) {
- pArray->Release();
- } else {
- m_pDict->SetAt("V", pArray);
- }
- }
- } else if (m_Type == ComboBox) {
- m_pDict->RemoveAt("V");
- m_pDict->RemoveAt("I");
- }
- }
- } else {
- if (m_Type == ListBox) {
- SelectOption(index, TRUE);
- if (!(m_Flags & FORMLIST_MULTISELECT)) {
- m_pDict->SetAtString("V", PDF_EncodeText(opt_value));
- } else {
- CPDF_Array* pArray = CPDF_Array::Create();
- if (pArray == NULL) {
- return FALSE;
- }
- FX_BOOL bSelected;
- int iCount = CountOptions();
- for (int i = 0; i < iCount; i ++) {
- if (i != index) {
- bSelected = IsItemSelected(i);
- } else {
- bSelected = TRUE;
- }
- if (bSelected) {
- opt_value = GetOptionValue(i);
- pArray->AddString(PDF_EncodeText(opt_value));
- }
- }
- m_pDict->SetAt("V", pArray);
- }
- } else if (m_Type == ComboBox) {
- m_pDict->SetAtString("V", PDF_EncodeText(opt_value));
- CPDF_Array* pI = CPDF_Array::Create();
- if (pI == NULL) {
- return FALSE;
+ if (iRet < 0) {
+ return FALSE;
+ }
+ }
+ if (!bSelected) {
+ CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict, "V");
+ if (pValue != NULL) {
+ if (m_Type == ListBox) {
+ SelectOption(index, FALSE);
+ if (pValue->GetType() == PDFOBJ_STRING) {
+ if (pValue->GetUnicodeText() == opt_value) {
+ m_pDict->RemoveAt("V");
+ }
+ } else if (pValue->GetType() == PDFOBJ_ARRAY) {
+ CPDF_Array* pArray = CPDF_Array::Create();
+ if (pArray == NULL) {
+ return FALSE;
+ }
+ int iCount = CountOptions();
+ for (int i = 0; i < iCount; i++) {
+ if (i != index) {
+ if (IsItemSelected(i)) {
+ opt_value = GetOptionValue(i);
+ pArray->AddString(PDF_EncodeText(opt_value));
+ }
}
- pI->AddInteger(index);
- m_pDict->SetAt("I", pI);
+ }
+ if (pArray->GetCount() < 1) {
+ pArray->Release();
+ } else {
+ m_pDict->SetAt("V", pArray);
+ }
}
- }
- if (bNotify && m_pForm->m_pFormNotify != NULL) {
- if (GetType() == ListBox) {
- m_pForm->m_pFormNotify->AfterSelectionChange(this);
+ } else if (m_Type == ComboBox) {
+ m_pDict->RemoveAt("V");
+ m_pDict->RemoveAt("I");
+ }
+ }
+ } else {
+ if (m_Type == ListBox) {
+ SelectOption(index, TRUE);
+ if (!(m_Flags & FORMLIST_MULTISELECT)) {
+ m_pDict->SetAtString("V", PDF_EncodeText(opt_value));
+ } else {
+ CPDF_Array* pArray = CPDF_Array::Create();
+ if (pArray == NULL) {
+ return FALSE;
}
- if (GetType() == ComboBox) {
- m_pForm->m_pFormNotify->AfterValueChange(this);
+ FX_BOOL bSelected;
+ int iCount = CountOptions();
+ for (int i = 0; i < iCount; i++) {
+ if (i != index) {
+ bSelected = IsItemSelected(i);
+ } else {
+ bSelected = TRUE;
+ }
+ if (bSelected) {
+ opt_value = GetOptionValue(i);
+ pArray->AddString(PDF_EncodeText(opt_value));
+ }
}
- }
- if (CPDF_InterForm::m_bUpdateAP) {
- UpdateAP(NULL);
- }
- m_pForm->m_bUpdated = TRUE;
- return TRUE;
-}
-FX_BOOL CPDF_FormField::IsItemDefaultSelected(int index)
-{
- ASSERT(GetType() == ComboBox || GetType() == ListBox);
- if (index < 0 || index >= CountOptions()) {
+ m_pDict->SetAt("V", pArray);
+ }
+ } else if (m_Type == ComboBox) {
+ m_pDict->SetAtString("V", PDF_EncodeText(opt_value));
+ CPDF_Array* pI = CPDF_Array::Create();
+ if (pI == NULL) {
return FALSE;
- }
- int iDVIndex = GetDefaultSelectedItem();
- if (iDVIndex < 0) {
- return FALSE;
- }
- return (iDVIndex == index);
+ }
+ pI->AddInteger(index);
+ m_pDict->SetAt("I", pI);
+ }
+ }
+ if (bNotify && m_pForm->m_pFormNotify != NULL) {
+ if (GetType() == ListBox) {
+ m_pForm->m_pFormNotify->AfterSelectionChange(this);
+ }
+ if (GetType() == ComboBox) {
+ m_pForm->m_pFormNotify->AfterValueChange(this);
+ }
+ }
+ if (CPDF_InterForm::m_bUpdateAP) {
+ UpdateAP(NULL);
+ }
+ m_pForm->m_bUpdated = TRUE;
+ return TRUE;
}
-int CPDF_FormField::GetDefaultSelectedItem()
-{
- ASSERT(GetType() == ComboBox || GetType() == ListBox);
- CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict, "DV");
- if (pValue == NULL) {
- return -1;
- }
- CFX_WideString csDV = pValue->GetUnicodeText();
- if (csDV.IsEmpty()) {
- return -1;
- }
- int iCount = CountOptions();
- for (int i = 0; i < iCount; i ++) {
- if (csDV == GetOptionValue(i)) {
- return i;
- }
- }
+FX_BOOL CPDF_FormField::IsItemDefaultSelected(int index) {
+ ASSERT(GetType() == ComboBox || GetType() == ListBox);
+ if (index < 0 || index >= CountOptions()) {
+ return FALSE;
+ }
+ int iDVIndex = GetDefaultSelectedItem();
+ if (iDVIndex < 0) {
+ return FALSE;
+ }
+ return (iDVIndex == index);
+}
+int CPDF_FormField::GetDefaultSelectedItem() {
+ ASSERT(GetType() == ComboBox || GetType() == ListBox);
+ CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict, "DV");
+ if (pValue == NULL) {
+ return -1;
+ }
+ CFX_WideString csDV = pValue->GetUnicodeText();
+ if (csDV.IsEmpty()) {
return -1;
+ }
+ int iCount = CountOptions();
+ for (int i = 0; i < iCount; i++) {
+ if (csDV == GetOptionValue(i)) {
+ return i;
+ }
+ }
+ return -1;
}
-void CPDF_FormField::UpdateAP(CPDF_FormControl* pControl)
-{
- if (m_Type == PushButton) {
- return;
- }
- if (m_Type == RadioButton || m_Type == CheckBox) {
- return;
- }
- if (!m_pForm->m_bGenerateAP) {
- return;
- }
- for (int i = 0; i < CountControls(); i ++) {
- CPDF_FormControl* pControl = GetControl(i);
- FPDF_GenerateAP(m_pForm->m_pDocument, pControl->m_pWidgetDict);
- }
+void CPDF_FormField::UpdateAP(CPDF_FormControl* pControl) {
+ if (m_Type == PushButton) {
+ return;
+ }
+ if (m_Type == RadioButton || m_Type == CheckBox) {
+ return;
+ }
+ if (!m_pForm->m_bGenerateAP) {
+ return;
+ }
+ for (int i = 0; i < CountControls(); i++) {
+ CPDF_FormControl* pControl = GetControl(i);
+ FPDF_GenerateAP(m_pForm->m_pDocument, pControl->m_pWidgetDict);
+ }
}
-int CPDF_FormField::CountOptions()
-{
- CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict, "Opt");
- if (pValue == NULL || pValue->GetType() != PDFOBJ_ARRAY) {
- return 0;
- }
- return ((CPDF_Array*)pValue)->GetCount();
+int CPDF_FormField::CountOptions() {
+ CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict, "Opt");
+ if (pValue == NULL || pValue->GetType() != PDFOBJ_ARRAY) {
+ return 0;
+ }
+ return ((CPDF_Array*)pValue)->GetCount();
}
-CFX_WideString CPDF_FormField::GetOptionText(int index, int sub_index)
-{
- CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict, "Opt");
- if (pValue == NULL || pValue->GetType() != PDFOBJ_ARRAY) {
- return CFX_WideString();
- }
- CPDF_Object* pOption = ((CPDF_Array*)pValue)->GetElementValue(index);
- if (pOption == NULL) {
- return CFX_WideString();
- }
- if (pOption->GetType() == PDFOBJ_ARRAY) {
- pOption = ((CPDF_Array*)pOption)->GetElementValue(sub_index);
- }
- if (pOption == NULL || pOption->GetType() != PDFOBJ_STRING) {
- return CFX_WideString();
- }
- return ((CPDF_String*)pOption)->GetUnicodeText();
-}
-CFX_WideString CPDF_FormField::GetOptionLabel(int index)
-{
- return GetOptionText(index, 1);
+CFX_WideString CPDF_FormField::GetOptionText(int index, int sub_index) {
+ CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict, "Opt");
+ if (pValue == NULL || pValue->GetType() != PDFOBJ_ARRAY) {
+ return CFX_WideString();
+ }
+ CPDF_Object* pOption = ((CPDF_Array*)pValue)->GetElementValue(index);
+ if (pOption == NULL) {
+ return CFX_WideString();
+ }
+ if (pOption->GetType() == PDFOBJ_ARRAY) {
+ pOption = ((CPDF_Array*)pOption)->GetElementValue(sub_index);
+ }
+ if (pOption == NULL || pOption->GetType() != PDFOBJ_STRING) {
+ return CFX_WideString();
+ }
+ return ((CPDF_String*)pOption)->GetUnicodeText();
}
-CFX_WideString CPDF_FormField::GetOptionValue(int index)
-{
- return GetOptionText(index, 0);
+CFX_WideString CPDF_FormField::GetOptionLabel(int index) {
+ return GetOptionText(index, 1);
}
-int CPDF_FormField::FindOption(CFX_WideString csOptLabel)
-{
- int iCount = CountOptions();
- for (int i = 0; i < iCount; i ++) {
- CFX_WideString csValue = GetOptionValue(i);
- if (csValue == csOptLabel) {
- return i;
- }
- }
- return -1;
+CFX_WideString CPDF_FormField::GetOptionValue(int index) {
+ return GetOptionText(index, 0);
}
-int CPDF_FormField::FindOptionValue(const CFX_WideString& csOptValue, int iStartIndex)
-{
- if (iStartIndex < 0) {
- iStartIndex = 0;
- }
- int iCount = CountOptions();
- for (; iStartIndex < iCount; iStartIndex ++) {
- CFX_WideString csValue = GetOptionValue(iStartIndex);
- if (csValue == csOptValue) {
- return iStartIndex;
- }
- }
- return -1;
+int CPDF_FormField::FindOption(CFX_WideString csOptLabel) {
+ int iCount = CountOptions();
+ for (int i = 0; i < iCount; i++) {
+ CFX_WideString csValue = GetOptionValue(i);
+ if (csValue == csOptLabel) {
+ return i;
+ }
+ }
+ return -1;
}
-FX_BOOL CPDF_FormField::CheckControl(int iControlIndex, FX_BOOL bChecked, FX_BOOL bNotify)
-{
- ASSERT(GetType() == CheckBox || GetType() == RadioButton);
- CPDF_FormControl* pControl = GetControl(iControlIndex);
- if (pControl == NULL) {
- return FALSE;
- }
- if (!bChecked && pControl->IsChecked() == bChecked) {
- return FALSE;
- }
- CFX_ByteArray statusArray;
- if (bNotify && m_pForm->m_pFormNotify != NULL) {
- SaveCheckedFieldStatus(this, statusArray);
- }
- CFX_WideString csWExport = pControl->GetExportValue();
- CFX_ByteString csBExport = PDF_EncodeText(csWExport);
- int iCount = CountControls();
- FX_BOOL bUnison = PDF_FormField_IsUnison(this);
- for (int i = 0; i < iCount; i ++) {
- CPDF_FormControl* pCtrl = GetControl(i);
- if (bUnison) {
- CFX_WideString csEValue = pCtrl->GetExportValue();
- if (csEValue == csWExport) {
- if (pCtrl->GetOnStateName() == pControl->GetOnStateName()) {
- pCtrl->CheckControl(bChecked);
- } else if (bChecked) {
- pCtrl->CheckControl(FALSE);
- }
- } else if (bChecked) {
- pCtrl->CheckControl(FALSE);
- }
- } else {
- if (i == iControlIndex) {
- pCtrl->CheckControl(bChecked);
- } else if (bChecked) {
- pCtrl->CheckControl(FALSE);
- }
- }
- }
- CPDF_Object* pOpt = FPDF_GetFieldAttr(m_pDict, "Opt");
- if (pOpt == NULL || pOpt->GetType() != PDFOBJ_ARRAY) {
- if (bChecked) {
- m_pDict->SetAtName("V", csBExport);
- } else {
- CFX_ByteString csV;
- CPDF_Object* pV = FPDF_GetFieldAttr(m_pDict, "V");
- if (pV != NULL) {
- csV = pV->GetString();
- }
- if (csV == csBExport) {
- m_pDict->SetAtName("V", "Off");
- }
- }
- } else if (bChecked) {
- CFX_ByteString csIndex;
- csIndex.Format("%d", iControlIndex);
- m_pDict->SetAtName("V", csIndex);
- }
- if (bNotify && m_pForm->m_pFormNotify != NULL) {
- m_pForm->m_pFormNotify->AfterCheckedStatusChange(this, statusArray);
- }
- m_pForm->m_bUpdated = TRUE;
- return TRUE;
+int CPDF_FormField::FindOptionValue(const CFX_WideString& csOptValue,
+ int iStartIndex) {
+ if (iStartIndex < 0) {
+ iStartIndex = 0;
+ }
+ int iCount = CountOptions();
+ for (; iStartIndex < iCount; iStartIndex++) {
+ CFX_WideString csValue = GetOptionValue(iStartIndex);
+ if (csValue == csOptValue) {
+ return iStartIndex;
+ }
+ }
+ return -1;
}
-CFX_WideString CPDF_FormField::GetCheckValue(FX_BOOL bDefault)
-{
- ASSERT(GetType() == CheckBox || GetType() == RadioButton);
- CFX_WideString csExport = L"Off";
- FX_BOOL bChecked;
- int iCount = CountControls();
- for (int i = 0; i < iCount; i ++) {
- CPDF_FormControl* pControl = GetControl(i);
- if (bDefault) {
- bChecked = pControl->IsDefaultChecked();
- } else {
- bChecked = pControl->IsChecked();
- }
- if (bChecked) {
- csExport = pControl->GetExportValue();
- break;
+FX_BOOL CPDF_FormField::CheckControl(int iControlIndex,
+ FX_BOOL bChecked,
+ FX_BOOL bNotify) {
+ ASSERT(GetType() == CheckBox || GetType() == RadioButton);
+ CPDF_FormControl* pControl = GetControl(iControlIndex);
+ if (pControl == NULL) {
+ return FALSE;
+ }
+ if (!bChecked && pControl->IsChecked() == bChecked) {
+ return FALSE;
+ }
+ CFX_ByteArray statusArray;
+ if (bNotify && m_pForm->m_pFormNotify != NULL) {
+ SaveCheckedFieldStatus(this, statusArray);
+ }
+ CFX_WideString csWExport = pControl->GetExportValue();
+ CFX_ByteString csBExport = PDF_EncodeText(csWExport);
+ int iCount = CountControls();
+ FX_BOOL bUnison = PDF_FormField_IsUnison(this);
+ for (int i = 0; i < iCount; i++) {
+ CPDF_FormControl* pCtrl = GetControl(i);
+ if (bUnison) {
+ CFX_WideString csEValue = pCtrl->GetExportValue();
+ if (csEValue == csWExport) {
+ if (pCtrl->GetOnStateName() == pControl->GetOnStateName()) {
+ pCtrl->CheckControl(bChecked);
+ } else if (bChecked) {
+ pCtrl->CheckControl(FALSE);
}
- }
- return csExport;
+ } else if (bChecked) {
+ pCtrl->CheckControl(FALSE);
+ }
+ } else {
+ if (i == iControlIndex) {
+ pCtrl->CheckControl(bChecked);
+ } else if (bChecked) {
+ pCtrl->CheckControl(FALSE);
+ }
+ }
+ }
+ CPDF_Object* pOpt = FPDF_GetFieldAttr(m_pDict, "Opt");
+ if (pOpt == NULL || pOpt->GetType() != PDFOBJ_ARRAY) {
+ if (bChecked) {
+ m_pDict->SetAtName("V", csBExport);
+ } else {
+ CFX_ByteString csV;
+ CPDF_Object* pV = FPDF_GetFieldAttr(m_pDict, "V");
+ if (pV != NULL) {
+ csV = pV->GetString();
+ }
+ if (csV == csBExport) {
+ m_pDict->SetAtName("V", "Off");
+ }
+ }
+ } else if (bChecked) {
+ CFX_ByteString csIndex;
+ csIndex.Format("%d", iControlIndex);
+ m_pDict->SetAtName("V", csIndex);
+ }
+ if (bNotify && m_pForm->m_pFormNotify != NULL) {
+ m_pForm->m_pFormNotify->AfterCheckedStatusChange(this, statusArray);
+ }
+ m_pForm->m_bUpdated = TRUE;
+ return TRUE;
}
-FX_BOOL CPDF_FormField::SetCheckValue(const CFX_WideString& value, FX_BOOL bDefault, FX_BOOL bNotify)
-{
- ASSERT(GetType() == CheckBox || GetType() == RadioButton);
- CFX_ByteArray statusArray;
- if (bNotify && m_pForm->m_pFormNotify != NULL) {
- SaveCheckedFieldStatus(this, statusArray);
- }
- int iCount = CountControls();
- for (int i = 0; i < iCount; i ++) {
- CPDF_FormControl* pControl = GetControl(i);
- CFX_WideString csExport = pControl->GetExportValue();
- if (csExport == value) {
- if (bDefault) {
- } else {
- CheckControl(GetControlIndex(pControl), TRUE);
- }
- break;
- } else {
- if (bDefault) {
- } else {
- CheckControl(GetControlIndex(pControl), FALSE);
- }
- }
+CFX_WideString CPDF_FormField::GetCheckValue(FX_BOOL bDefault) {
+ ASSERT(GetType() == CheckBox || GetType() == RadioButton);
+ CFX_WideString csExport = L"Off";
+ FX_BOOL bChecked;
+ int iCount = CountControls();
+ for (int i = 0; i < iCount; i++) {
+ CPDF_FormControl* pControl = GetControl(i);
+ if (bDefault) {
+ bChecked = pControl->IsDefaultChecked();
+ } else {
+ bChecked = pControl->IsChecked();
}
- if (bNotify && m_pForm->m_pFormNotify != NULL) {
- m_pForm->m_pFormNotify->AfterCheckedStatusChange(this, statusArray);
+ if (bChecked) {
+ csExport = pControl->GetExportValue();
+ break;
}
- m_pForm->m_bUpdated = TRUE;
- return TRUE;
+ }
+ return csExport;
}
-int CPDF_FormField::GetTopVisibleIndex()
-{
- CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "TI");
- if (pObj == NULL) {
- return 0;
- }
- return pObj->GetInteger();
+FX_BOOL CPDF_FormField::SetCheckValue(const CFX_WideString& value,
+ FX_BOOL bDefault,
+ FX_BOOL bNotify) {
+ ASSERT(GetType() == CheckBox || GetType() == RadioButton);
+ CFX_ByteArray statusArray;
+ if (bNotify && m_pForm->m_pFormNotify != NULL) {
+ SaveCheckedFieldStatus(this, statusArray);
+ }
+ int iCount = CountControls();
+ for (int i = 0; i < iCount; i++) {
+ CPDF_FormControl* pControl = GetControl(i);
+ CFX_WideString csExport = pControl->GetExportValue();
+ if (csExport == value) {
+ if (bDefault) {
+ } else {
+ CheckControl(GetControlIndex(pControl), TRUE);
+ }
+ break;
+ } else {
+ if (bDefault) {
+ } else {
+ CheckControl(GetControlIndex(pControl), FALSE);
+ }
+ }
+ }
+ if (bNotify && m_pForm->m_pFormNotify != NULL) {
+ m_pForm->m_pFormNotify->AfterCheckedStatusChange(this, statusArray);
+ }
+ m_pForm->m_bUpdated = TRUE;
+ return TRUE;
}
-int CPDF_FormField::CountSelectedOptions()
-{
- CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "I");
- if (pObj == NULL) {
- return 0;
- }
- CPDF_Array* pArray = pObj->GetArray();
- if (pArray == NULL) {
- return 0;
- }
- return (int)pArray->GetCount();
+int CPDF_FormField::GetTopVisibleIndex() {
+ CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "TI");
+ if (pObj == NULL) {
+ return 0;
+ }
+ return pObj->GetInteger();
}
-int CPDF_FormField::GetSelectedOptionIndex(int index)
-{
- CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "I");
- if (pObj == NULL) {
- return -1;
- }
- CPDF_Array* pArray = pObj->GetArray();
- if (pArray == NULL) {
- return -1;
- }
- int iCount = (int)pArray->GetCount();
- if (iCount > 0 && index < iCount) {
- return pArray->GetInteger(index);
- }
+int CPDF_FormField::CountSelectedOptions() {
+ CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "I");
+ if (pObj == NULL) {
+ return 0;
+ }
+ CPDF_Array* pArray = pObj->GetArray();
+ if (pArray == NULL) {
+ return 0;
+ }
+ return (int)pArray->GetCount();
+}
+int CPDF_FormField::GetSelectedOptionIndex(int index) {
+ CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "I");
+ if (pObj == NULL) {
+ return -1;
+ }
+ CPDF_Array* pArray = pObj->GetArray();
+ if (pArray == NULL) {
return -1;
+ }
+ int iCount = (int)pArray->GetCount();
+ if (iCount > 0 && index < iCount) {
+ return pArray->GetInteger(index);
+ }
+ return -1;
}
-FX_BOOL CPDF_FormField::IsOptionSelected(int iOptIndex)
-{
- CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "I");
- if (pObj == NULL) {
- return FALSE;
- }
- CPDF_Array* pArray = pObj->GetArray();
- if (pArray == NULL) {
- return FALSE;
- }
- int iCount = (int)pArray->GetCount();
- for (int i = 0; i < iCount; i ++) {
- if (pArray->GetInteger(i) == iOptIndex) {
- return TRUE;
- }
- }
+FX_BOOL CPDF_FormField::IsOptionSelected(int iOptIndex) {
+ CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "I");
+ if (pObj == NULL) {
return FALSE;
+ }
+ CPDF_Array* pArray = pObj->GetArray();
+ if (pArray == NULL) {
+ return FALSE;
+ }
+ int iCount = (int)pArray->GetCount();
+ for (int i = 0; i < iCount; i++) {
+ if (pArray->GetInteger(i) == iOptIndex) {
+ return TRUE;
+ }
+ }
+ return FALSE;
}
-FX_BOOL CPDF_FormField::SelectOption(int iOptIndex, FX_BOOL bSelected, FX_BOOL bNotify)
-{
- CPDF_Array* pArray = m_pDict->GetArray("I");
- if (pArray == NULL) {
- if (!bSelected) {
- return TRUE;
- }
- pArray = CPDF_Array::Create();
- if (pArray == NULL) {
- return FALSE;
- }
- m_pDict->SetAt("I", pArray);
- }
- FX_BOOL bReturn = FALSE;
- for (int i = 0; i < (int)pArray->GetCount(); i ++) {
- int iFind = pArray->GetInteger(i);
- if (iFind == iOptIndex) {
- if (bSelected) {
- return TRUE;
- }
- if (bNotify && m_pForm->m_pFormNotify != NULL) {
- int iRet = 0;
- CFX_WideString csValue = GetOptionLabel(iOptIndex);
- if (GetType() == ListBox) {
- iRet = m_pForm->m_pFormNotify->BeforeSelectionChange(this, csValue);
- }
- if (GetType() == ComboBox) {
- iRet = m_pForm->m_pFormNotify->BeforeValueChange(this, csValue);
- }
- if (iRet < 0) {
- return FALSE;
- }
- }
- pArray->RemoveAt(i);
- bReturn = TRUE;
- break;
- } else if (iFind > iOptIndex) {
- if (!bSelected) {
- continue;
- }
- if (bNotify && m_pForm->m_pFormNotify != NULL) {
- int iRet = 0;
- CFX_WideString csValue = GetOptionLabel(iOptIndex);
- if (GetType() == ListBox) {
- iRet = m_pForm->m_pFormNotify->BeforeSelectionChange(this, csValue);
- }
- if (GetType() == ComboBox) {
- iRet = m_pForm->m_pFormNotify->BeforeValueChange(this, csValue);
- }
- if (iRet < 0) {
- return FALSE;
- }
- }
- CPDF_Number* pNum = CPDF_Number::Create(iOptIndex);
- if (pNum == NULL) {
- return FALSE;
- }
- pArray->InsertAt(i, pNum);
- bReturn = TRUE;
- break;
- }
- }
- if (!bReturn) {
- if (bSelected) {
- pArray->AddInteger(iOptIndex);
- }
- if (pArray->GetCount() == 0) {
- m_pDict->RemoveAt("I");
- }
- }
- if (bNotify && m_pForm->m_pFormNotify != NULL) {
- if (GetType() == ListBox) {
- m_pForm->m_pFormNotify->AfterSelectionChange(this);
- }
- if (GetType() == ComboBox) {
- m_pForm->m_pFormNotify->AfterValueChange(this);
- }
+FX_BOOL CPDF_FormField::SelectOption(int iOptIndex,
+ FX_BOOL bSelected,
+ FX_BOOL bNotify) {
+ CPDF_Array* pArray = m_pDict->GetArray("I");
+ if (pArray == NULL) {
+ if (!bSelected) {
+ return TRUE;
}
- m_pForm->m_bUpdated = TRUE;
- return TRUE;
-}
-FX_BOOL CPDF_FormField::ClearSelectedOptions(FX_BOOL bNotify)
-{
- if (bNotify && m_pForm->m_pFormNotify != NULL) {
+ pArray = CPDF_Array::Create();
+ if (pArray == NULL) {
+ return FALSE;
+ }
+ m_pDict->SetAt("I", pArray);
+ }
+ FX_BOOL bReturn = FALSE;
+ for (int i = 0; i < (int)pArray->GetCount(); i++) {
+ int iFind = pArray->GetInteger(i);
+ if (iFind == iOptIndex) {
+ if (bSelected) {
+ return TRUE;
+ }
+ if (bNotify && m_pForm->m_pFormNotify != NULL) {
int iRet = 0;
- CFX_WideString csValue;
- int iIndex = GetSelectedIndex(0);
- if (iIndex >= 0) {
- csValue = GetOptionLabel(iIndex);
- }
+ CFX_WideString csValue = GetOptionLabel(iOptIndex);
if (GetType() == ListBox) {
- iRet = m_pForm->m_pFormNotify->BeforeSelectionChange(this, csValue);
+ iRet = m_pForm->m_pFormNotify->BeforeSelectionChange(this, csValue);
}
if (GetType() == ComboBox) {
- iRet = m_pForm->m_pFormNotify->BeforeValueChange(this, csValue);
+ iRet = m_pForm->m_pFormNotify->BeforeValueChange(this, csValue);
}
if (iRet < 0) {
- return FALSE;
+ return FALSE;
}
- }
- m_pDict->RemoveAt("I");
- if (bNotify && m_pForm->m_pFormNotify != NULL) {
+ }
+ pArray->RemoveAt(i);
+ bReturn = TRUE;
+ break;
+ } else if (iFind > iOptIndex) {
+ if (!bSelected) {
+ continue;
+ }
+ if (bNotify && m_pForm->m_pFormNotify != NULL) {
+ int iRet = 0;
+ CFX_WideString csValue = GetOptionLabel(iOptIndex);
if (GetType() == ListBox) {
- m_pForm->m_pFormNotify->AfterSelectionChange(this);
+ iRet = m_pForm->m_pFormNotify->BeforeSelectionChange(this, csValue);
}
if (GetType() == ComboBox) {
- m_pForm->m_pFormNotify->AfterValueChange(this);
+ iRet = m_pForm->m_pFormNotify->BeforeValueChange(this, csValue);
}
- }
- m_pForm->m_bUpdated = TRUE;
- return TRUE;
+ if (iRet < 0) {
+ return FALSE;
+ }
+ }
+ CPDF_Number* pNum = CPDF_Number::Create(iOptIndex);
+ if (pNum == NULL) {
+ return FALSE;
+ }
+ pArray->InsertAt(i, pNum);
+ bReturn = TRUE;
+ break;
+ }
+ }
+ if (!bReturn) {
+ if (bSelected) {
+ pArray->AddInteger(iOptIndex);
+ }
+ if (pArray->GetCount() == 0) {
+ m_pDict->RemoveAt("I");
+ }
+ }
+ if (bNotify && m_pForm->m_pFormNotify != NULL) {
+ if (GetType() == ListBox) {
+ m_pForm->m_pFormNotify->AfterSelectionChange(this);
+ }
+ if (GetType() == ComboBox) {
+ m_pForm->m_pFormNotify->AfterValueChange(this);
+ }
+ }
+ m_pForm->m_bUpdated = TRUE;
+ return TRUE;
}
-void CPDF_FormField::LoadDA()
-{
- CFX_ByteString DA;
- if (CPDF_Object* pObj_t = FPDF_GetFieldAttr(m_pDict, "DA")) {
- DA = pObj_t->GetString();
- }
- if (DA.IsEmpty() && m_pForm->m_pFormDict) {
- DA = m_pForm->m_pFormDict->GetString("DA");
- }
- if (DA.IsEmpty()) {
- return;
- }
- CPDF_SimpleParser syntax(DA);
- syntax.FindTagParam("Tf", 2);
- CFX_ByteString font_name = syntax.GetWord();
- CPDF_Dictionary* pFontDict = NULL;
- if (m_pForm->m_pFormDict && m_pForm->m_pFormDict->GetDict("DR") &&
- m_pForm->m_pFormDict->GetDict("DR")->GetDict("Font") )
- pFontDict = m_pForm->m_pFormDict->GetDict("DR")->GetDict("Font")->GetDict(font_name);
+FX_BOOL CPDF_FormField::ClearSelectedOptions(FX_BOOL bNotify) {
+ if (bNotify && m_pForm->m_pFormNotify != NULL) {
+ int iRet = 0;
+ CFX_WideString csValue;
+ int iIndex = GetSelectedIndex(0);
+ if (iIndex >= 0) {
+ csValue = GetOptionLabel(iIndex);
+ }
+ if (GetType() == ListBox) {
+ iRet = m_pForm->m_pFormNotify->BeforeSelectionChange(this, csValue);
+ }
+ if (GetType() == ComboBox) {
+ iRet = m_pForm->m_pFormNotify->BeforeValueChange(this, csValue);
+ }
+ if (iRet < 0) {
+ return FALSE;
+ }
+ }
+ m_pDict->RemoveAt("I");
+ if (bNotify && m_pForm->m_pFormNotify != NULL) {
+ if (GetType() == ListBox) {
+ m_pForm->m_pFormNotify->AfterSelectionChange(this);
+ }
+ if (GetType() == ComboBox) {
+ m_pForm->m_pFormNotify->AfterValueChange(this);
+ }
+ }
+ m_pForm->m_bUpdated = TRUE;
+ return TRUE;
+}
+void CPDF_FormField::LoadDA() {
+ CFX_ByteString DA;
+ if (CPDF_Object* pObj_t = FPDF_GetFieldAttr(m_pDict, "DA")) {
+ DA = pObj_t->GetString();
+ }
+ if (DA.IsEmpty() && m_pForm->m_pFormDict) {
+ DA = m_pForm->m_pFormDict->GetString("DA");
+ }
+ if (DA.IsEmpty()) {
+ return;
+ }
+ CPDF_SimpleParser syntax(DA);
+ syntax.FindTagParam("Tf", 2);
+ CFX_ByteString font_name = syntax.GetWord();
+ CPDF_Dictionary* pFontDict = NULL;
+ if (m_pForm->m_pFormDict && m_pForm->m_pFormDict->GetDict("DR") &&
+ m_pForm->m_pFormDict->GetDict("DR")->GetDict("Font"))
+ pFontDict = m_pForm->m_pFormDict->GetDict("DR")->GetDict("Font")->GetDict(
+ font_name);
- if (pFontDict == NULL) {
- return;
- }
- m_pFont = m_pForm->m_pDocument->LoadFont(pFontDict);
- m_FontSize = FX_atof(syntax.GetWord());
+ if (pFontDict == NULL) {
+ return;
+ }
+ m_pFont = m_pForm->m_pDocument->LoadFont(pFontDict);
+ m_FontSize = FX_atof(syntax.GetWord());
}
diff --git a/core/src/fpdfdoc/doc_link.cpp b/core/src/fpdfdoc/doc_link.cpp
index fdae96ac2e..15bd14c31e 100644
--- a/core/src/fpdfdoc/doc_link.cpp
+++ b/core/src/fpdfdoc/doc_link.cpp
@@ -6,100 +6,93 @@
#include "../../include/fpdfdoc/fpdf_doc.h"
-CPDF_LinkList::~CPDF_LinkList()
-{
- FX_POSITION pos = m_PageMap.GetStartPosition();
- while (pos) {
- void* key;
- void* value;
- m_PageMap.GetNextAssoc(pos, key, value);
- delete (CFX_PtrArray*)value;
- }
+CPDF_LinkList::~CPDF_LinkList() {
+ FX_POSITION pos = m_PageMap.GetStartPosition();
+ while (pos) {
+ void* key;
+ void* value;
+ m_PageMap.GetNextAssoc(pos, key, value);
+ delete (CFX_PtrArray*)value;
+ }
}
-CFX_PtrArray* CPDF_LinkList::GetPageLinks(CPDF_Page* pPage)
-{
- FX_DWORD objnum = pPage->m_pFormDict->GetObjNum();
- if (objnum == 0) {
- return NULL;
- }
- CFX_PtrArray* pPageLinkList = NULL;
- if (!m_PageMap.Lookup((void*)(uintptr_t)objnum, (void*&)pPageLinkList)) {
- pPageLinkList = new CFX_PtrArray;
- m_PageMap.SetAt((void*)(uintptr_t)objnum, pPageLinkList);
- LoadPageLinks(pPage, pPageLinkList);
- }
- return pPageLinkList;
+CFX_PtrArray* CPDF_LinkList::GetPageLinks(CPDF_Page* pPage) {
+ FX_DWORD objnum = pPage->m_pFormDict->GetObjNum();
+ if (objnum == 0) {
+ return NULL;
+ }
+ CFX_PtrArray* pPageLinkList = NULL;
+ if (!m_PageMap.Lookup((void*)(uintptr_t)objnum, (void*&)pPageLinkList)) {
+ pPageLinkList = new CFX_PtrArray;
+ m_PageMap.SetAt((void*)(uintptr_t)objnum, pPageLinkList);
+ LoadPageLinks(pPage, pPageLinkList);
+ }
+ return pPageLinkList;
}
-int CPDF_LinkList::CountLinks(CPDF_Page* pPage)
-{
- CFX_PtrArray* pPageLinkList = GetPageLinks(pPage);
- if (pPageLinkList == NULL) {
- return 0;
- }
- return pPageLinkList->GetSize();
+int CPDF_LinkList::CountLinks(CPDF_Page* pPage) {
+ CFX_PtrArray* pPageLinkList = GetPageLinks(pPage);
+ if (pPageLinkList == NULL) {
+ return 0;
+ }
+ return pPageLinkList->GetSize();
}
-CPDF_Link CPDF_LinkList::GetLink(CPDF_Page* pPage, int index)
-{
- CFX_PtrArray* pPageLinkList = GetPageLinks(pPage);
- if (!pPageLinkList) {
- return CPDF_Link();
- }
- return CPDF_Link((CPDF_Dictionary*)pPageLinkList->GetAt(index));
+CPDF_Link CPDF_LinkList::GetLink(CPDF_Page* pPage, int index) {
+ CFX_PtrArray* pPageLinkList = GetPageLinks(pPage);
+ if (!pPageLinkList) {
+ return CPDF_Link();
+ }
+ return CPDF_Link((CPDF_Dictionary*)pPageLinkList->GetAt(index));
}
-CPDF_Link CPDF_LinkList::GetLinkAtPoint(CPDF_Page* pPage, FX_FLOAT pdf_x, FX_FLOAT pdf_y)
-{
- CFX_PtrArray* pPageLinkList = GetPageLinks(pPage);
- if (!pPageLinkList) {
- return CPDF_Link();
- }
- int size = pPageLinkList->GetSize();
- for (int i = size - 1; i >= 0; --i) {
- CPDF_Link link((CPDF_Dictionary*)pPageLinkList->GetAt(i));
- CPDF_Rect rect = link.GetRect();
- if (rect.Contains(pdf_x, pdf_y)) {
- return link;
- }
- }
+CPDF_Link CPDF_LinkList::GetLinkAtPoint(CPDF_Page* pPage,
+ FX_FLOAT pdf_x,
+ FX_FLOAT pdf_y) {
+ CFX_PtrArray* pPageLinkList = GetPageLinks(pPage);
+ if (!pPageLinkList) {
return CPDF_Link();
+ }
+ int size = pPageLinkList->GetSize();
+ for (int i = size - 1; i >= 0; --i) {
+ CPDF_Link link((CPDF_Dictionary*)pPageLinkList->GetAt(i));
+ CPDF_Rect rect = link.GetRect();
+ if (rect.Contains(pdf_x, pdf_y)) {
+ return link;
+ }
+ }
+ return CPDF_Link();
}
-void CPDF_LinkList::LoadPageLinks(CPDF_Page* pPage, CFX_PtrArray* pList)
-{
- CPDF_Array* pAnnotList = pPage->m_pFormDict->GetArray("Annots");
- if (pAnnotList == NULL) {
- return;
+void CPDF_LinkList::LoadPageLinks(CPDF_Page* pPage, CFX_PtrArray* pList) {
+ CPDF_Array* pAnnotList = pPage->m_pFormDict->GetArray("Annots");
+ if (pAnnotList == NULL) {
+ return;
+ }
+ for (FX_DWORD i = 0; i < pAnnotList->GetCount(); i++) {
+ CPDF_Dictionary* pAnnot = pAnnotList->GetDict(i);
+ if (pAnnot == NULL) {
+ continue;
}
- for (FX_DWORD i = 0; i < pAnnotList->GetCount(); i ++) {
- CPDF_Dictionary* pAnnot = pAnnotList->GetDict(i);
- if (pAnnot == NULL) {
- continue;
- }
- if (pAnnot->GetString("Subtype") != "Link") {
- continue;
- }
- pList->Add(pAnnot);
+ if (pAnnot->GetString("Subtype") != "Link") {
+ continue;
}
+ pList->Add(pAnnot);
+ }
}
-CPDF_Rect CPDF_Link::GetRect()
-{
- return m_pDict->GetRect("Rect");
+CPDF_Rect CPDF_Link::GetRect() {
+ return m_pDict->GetRect("Rect");
}
-CPDF_Dest CPDF_Link::GetDest(CPDF_Document* pDoc)
-{
- CPDF_Object* pDest = m_pDict->GetElementValue("Dest");
- if (pDest == NULL) {
- return CPDF_Dest();
- }
- if (pDest->GetType() == PDFOBJ_STRING || pDest->GetType() == PDFOBJ_NAME) {
- CPDF_NameTree name_tree(pDoc, FX_BSTRC("Dests"));
- CFX_ByteStringC name = pDest->GetString();
- return CPDF_Dest(name_tree.LookupNamedDest(pDoc, name));
- }
- if (pDest->GetType() == PDFOBJ_ARRAY) {
- return CPDF_Dest((CPDF_Array*)pDest);
- }
+CPDF_Dest CPDF_Link::GetDest(CPDF_Document* pDoc) {
+ CPDF_Object* pDest = m_pDict->GetElementValue("Dest");
+ if (pDest == NULL) {
return CPDF_Dest();
+ }
+ if (pDest->GetType() == PDFOBJ_STRING || pDest->GetType() == PDFOBJ_NAME) {
+ CPDF_NameTree name_tree(pDoc, FX_BSTRC("Dests"));
+ CFX_ByteStringC name = pDest->GetString();
+ return CPDF_Dest(name_tree.LookupNamedDest(pDoc, name));
+ }
+ if (pDest->GetType() == PDFOBJ_ARRAY) {
+ return CPDF_Dest((CPDF_Array*)pDest);
+ }
+ return CPDF_Dest();
}
-CPDF_Action CPDF_Link::GetAction()
-{
- return CPDF_Action(m_pDict->GetDict("A"));
+CPDF_Action CPDF_Link::GetAction() {
+ return CPDF_Action(m_pDict->GetDict("A"));
}
diff --git a/core/src/fpdfdoc/doc_metadata.cpp b/core/src/fpdfdoc/doc_metadata.cpp
index aeeb1d1f60..b617eecf87 100644
--- a/core/src/fpdfdoc/doc_metadata.cpp
+++ b/core/src/fpdfdoc/doc_metadata.cpp
@@ -7,142 +7,133 @@
#include "../../include/fpdfdoc/fpdf_doc.h"
#include "../../include/fxcrt/fx_xml.h"
typedef struct _PDFDOC_METADATA {
- CPDF_Document *m_pDoc;
- CXML_Element *m_pXmlElmnt;
- CXML_Element *m_pElmntRdf;
- CFX_CMapByteStringToPtr *m_pStringMap;
-} PDFDOC_METADATA, * PDFDOC_LPMETADATA;
-typedef PDFDOC_METADATA const * PDFDOC_LPCMETADATA;
+ CPDF_Document* m_pDoc;
+ CXML_Element* m_pXmlElmnt;
+ CXML_Element* m_pElmntRdf;
+ CFX_CMapByteStringToPtr* m_pStringMap;
+} PDFDOC_METADATA, *PDFDOC_LPMETADATA;
+typedef PDFDOC_METADATA const* PDFDOC_LPCMETADATA;
const FX_CHAR* const gs_FPDFDOC_Metadata_Titles[] = {
- "Title", "title",
- "Subject", "description",
- "Author", "creator",
- "Keywords", "Keywords",
- "Producer", "Producer",
- "Creator", "CreatorTool",
- "CreationDate", "CreateDate",
- "ModDate", "ModifyDate",
- "MetadataDate", "MetadataDate"
-};
-CPDF_Metadata::CPDF_Metadata()
-{
- m_pData = FX_Alloc(PDFDOC_METADATA, 1);
- CFX_CMapByteStringToPtr *&pStringMap = ((PDFDOC_LPMETADATA)m_pData)->m_pStringMap;
- pStringMap = new CFX_CMapByteStringToPtr;
- CFX_ByteString bstr;
- for (int i = 0; i < 18; i += 2) {
- bstr = gs_FPDFDOC_Metadata_Titles[i];
- pStringMap->AddValue(bstr, (void*)gs_FPDFDOC_Metadata_Titles[i + 1]);
- }
-
+ "Title", "title", "Subject", "description", "Author",
+ "creator", "Keywords", "Keywords", "Producer", "Producer",
+ "Creator", "CreatorTool", "CreationDate", "CreateDate", "ModDate",
+ "ModifyDate", "MetadataDate", "MetadataDate"};
+CPDF_Metadata::CPDF_Metadata() {
+ m_pData = FX_Alloc(PDFDOC_METADATA, 1);
+ CFX_CMapByteStringToPtr*& pStringMap =
+ ((PDFDOC_LPMETADATA)m_pData)->m_pStringMap;
+ pStringMap = new CFX_CMapByteStringToPtr;
+ CFX_ByteString bstr;
+ for (int i = 0; i < 18; i += 2) {
+ bstr = gs_FPDFDOC_Metadata_Titles[i];
+ pStringMap->AddValue(bstr, (void*)gs_FPDFDOC_Metadata_Titles[i + 1]);
+ }
}
-CPDF_Metadata::~CPDF_Metadata()
-{
- FXSYS_assert(m_pData != NULL);
- CXML_Element *&p = ((PDFDOC_LPMETADATA)m_pData)->m_pXmlElmnt;
- delete p;
- CFX_CMapByteStringToPtr *pStringMap = ((PDFDOC_LPMETADATA)m_pData)->m_pStringMap;
- if (pStringMap) {
- pStringMap->RemoveAll();
- delete pStringMap;
- }
- FX_Free(m_pData);
+CPDF_Metadata::~CPDF_Metadata() {
+ FXSYS_assert(m_pData != NULL);
+ CXML_Element*& p = ((PDFDOC_LPMETADATA)m_pData)->m_pXmlElmnt;
+ delete p;
+ CFX_CMapByteStringToPtr* pStringMap =
+ ((PDFDOC_LPMETADATA)m_pData)->m_pStringMap;
+ if (pStringMap) {
+ pStringMap->RemoveAll();
+ delete pStringMap;
+ }
+ FX_Free(m_pData);
}
-void CPDF_Metadata::LoadDoc(CPDF_Document *pDoc)
-{
- FXSYS_assert(pDoc != NULL);
- ((PDFDOC_LPMETADATA)m_pData)->m_pDoc = pDoc;
- CPDF_Dictionary *pRoot = pDoc->GetRoot();
- CPDF_Stream *pStream = pRoot->GetStream(FX_BSTRC("Metadata"));
- if (!pStream) {
- return;
- }
- CPDF_StreamAcc acc;
- acc.LoadAllData(pStream, FALSE);
- int size = acc.GetSize();
- const uint8_t* pBuf = acc.GetData();
- CXML_Element *&pXmlElmnt = ((PDFDOC_LPMETADATA)m_pData)->m_pXmlElmnt;
- pXmlElmnt = CXML_Element::Parse(pBuf, size);
- if (!pXmlElmnt) {
- return;
- }
- CXML_Element *&pElmntRdf = ((PDFDOC_LPMETADATA)m_pData)->m_pElmntRdf;
- if (pXmlElmnt->GetTagName() == FX_BSTRC("RDF")) {
- pElmntRdf = pXmlElmnt;
- } else {
- pElmntRdf = pXmlElmnt->GetElement(NULL, FX_BSTRC("RDF"));
- }
+void CPDF_Metadata::LoadDoc(CPDF_Document* pDoc) {
+ FXSYS_assert(pDoc != NULL);
+ ((PDFDOC_LPMETADATA)m_pData)->m_pDoc = pDoc;
+ CPDF_Dictionary* pRoot = pDoc->GetRoot();
+ CPDF_Stream* pStream = pRoot->GetStream(FX_BSTRC("Metadata"));
+ if (!pStream) {
+ return;
+ }
+ CPDF_StreamAcc acc;
+ acc.LoadAllData(pStream, FALSE);
+ int size = acc.GetSize();
+ const uint8_t* pBuf = acc.GetData();
+ CXML_Element*& pXmlElmnt = ((PDFDOC_LPMETADATA)m_pData)->m_pXmlElmnt;
+ pXmlElmnt = CXML_Element::Parse(pBuf, size);
+ if (!pXmlElmnt) {
+ return;
+ }
+ CXML_Element*& pElmntRdf = ((PDFDOC_LPMETADATA)m_pData)->m_pElmntRdf;
+ if (pXmlElmnt->GetTagName() == FX_BSTRC("RDF")) {
+ pElmntRdf = pXmlElmnt;
+ } else {
+ pElmntRdf = pXmlElmnt->GetElement(NULL, FX_BSTRC("RDF"));
+ }
}
-int32_t CPDF_Metadata::GetString(const CFX_ByteStringC& bsItem, CFX_WideString &wsStr)
-{
- if (!((PDFDOC_LPMETADATA)m_pData)->m_pXmlElmnt) {
- return -1;
- }
- if (!((PDFDOC_LPMETADATA)m_pData)->m_pStringMap) {
- return -1;
+int32_t CPDF_Metadata::GetString(const CFX_ByteStringC& bsItem,
+ CFX_WideString& wsStr) {
+ if (!((PDFDOC_LPMETADATA)m_pData)->m_pXmlElmnt) {
+ return -1;
+ }
+ if (!((PDFDOC_LPMETADATA)m_pData)->m_pStringMap) {
+ return -1;
+ }
+ void* szTag;
+ if (!((PDFDOC_LPMETADATA)m_pData)->m_pStringMap->Lookup(bsItem, szTag)) {
+ return -1;
+ }
+ CFX_ByteString bsTag = (const FX_CHAR*)szTag;
+ wsStr = L"";
+ CXML_Element* pElmntRdf = ((PDFDOC_LPMETADATA)m_pData)->m_pElmntRdf;
+ if (!pElmntRdf) {
+ return -1;
+ }
+ int nChild = pElmntRdf->CountChildren();
+ for (int i = 0; i < nChild; i++) {
+ CXML_Element* pTag =
+ pElmntRdf->GetElement(NULL, FX_BSTRC("Description"), i);
+ if (!pTag) {
+ continue;
}
- void *szTag;
- if (!((PDFDOC_LPMETADATA)m_pData)->m_pStringMap->Lookup(bsItem, szTag)) {
- return -1;
+ if (bsItem == FX_BSTRC("Title") || bsItem == FX_BSTRC("Subject")) {
+ CXML_Element* pElmnt = pTag->GetElement(NULL, bsTag);
+ if (!pElmnt) {
+ continue;
+ }
+ pElmnt = pElmnt->GetElement(NULL, FX_BSTRC("Alt"));
+ if (!pElmnt) {
+ continue;
+ }
+ pElmnt = pElmnt->GetElement(NULL, FX_BSTRC("li"));
+ if (!pElmnt) {
+ continue;
+ }
+ wsStr = pElmnt->GetContent(0);
+ return wsStr.GetLength();
}
- CFX_ByteString bsTag = (const FX_CHAR*)szTag;
- wsStr = L"";
- CXML_Element *pElmntRdf = ((PDFDOC_LPMETADATA)m_pData)->m_pElmntRdf;
- if (!pElmntRdf) {
- return -1;
+ if (bsItem == FX_BSTRC("Author")) {
+ CXML_Element* pElmnt = pTag->GetElement(NULL, bsTag);
+ if (!pElmnt) {
+ continue;
+ }
+ pElmnt = pElmnt->GetElement(NULL, FX_BSTRC("Seq"));
+ if (!pElmnt) {
+ continue;
+ }
+ pElmnt = pElmnt->GetElement(NULL, FX_BSTRC("li"));
+ if (!pElmnt) {
+ continue;
+ }
+ wsStr = pElmnt->GetContent(0);
+ return wsStr.GetLength();
}
- int nChild = pElmntRdf->CountChildren();
- for (int i = 0; i < nChild; i++) {
- CXML_Element *pTag = pElmntRdf->GetElement(NULL, FX_BSTRC("Description"), i);
- if (!pTag) {
- continue;
- }
- if (bsItem == FX_BSTRC("Title") || bsItem == FX_BSTRC("Subject")) {
- CXML_Element *pElmnt = pTag->GetElement(NULL, bsTag);
- if (!pElmnt) {
- continue;
- }
- pElmnt = pElmnt->GetElement(NULL, FX_BSTRC("Alt"));
- if (!pElmnt) {
- continue;
- }
- pElmnt = pElmnt->GetElement(NULL, FX_BSTRC("li"));
- if (!pElmnt) {
- continue;
- }
- wsStr = pElmnt->GetContent(0);
- return wsStr.GetLength();
- }
- if (bsItem == FX_BSTRC("Author")) {
- CXML_Element *pElmnt = pTag->GetElement(NULL, bsTag);
- if (!pElmnt) {
- continue;
- }
- pElmnt = pElmnt->GetElement(NULL, FX_BSTRC("Seq"));
- if (!pElmnt) {
- continue;
- }
- pElmnt = pElmnt->GetElement(NULL, FX_BSTRC("li"));
- if (!pElmnt) {
- continue;
- }
- wsStr = pElmnt->GetContent(0);
- return wsStr.GetLength();
- }
- CXML_Element *pElmnt = pTag->GetElement(NULL, bsTag);
- if (!pElmnt) {
- continue;
- }
- wsStr = pElmnt->GetContent(0);
- return wsStr.GetLength();
+ CXML_Element* pElmnt = pTag->GetElement(NULL, bsTag);
+ if (!pElmnt) {
+ continue;
}
- return -1;
+ wsStr = pElmnt->GetContent(0);
+ return wsStr.GetLength();
+ }
+ return -1;
}
-CXML_Element* CPDF_Metadata::GetRoot() const
-{
- return ((PDFDOC_LPMETADATA)m_pData)->m_pXmlElmnt;
+CXML_Element* CPDF_Metadata::GetRoot() const {
+ return ((PDFDOC_LPMETADATA)m_pData)->m_pXmlElmnt;
}
-CXML_Element* CPDF_Metadata::GetRDF() const
-{
- return ((PDFDOC_LPMETADATA)m_pData)->m_pElmntRdf;
+CXML_Element* CPDF_Metadata::GetRDF() const {
+ return ((PDFDOC_LPMETADATA)m_pData)->m_pElmntRdf;
}
diff --git a/core/src/fpdfdoc/doc_ocg.cpp b/core/src/fpdfdoc/doc_ocg.cpp
index d525227219..70ad9c710d 100644
--- a/core/src/fpdfdoc/doc_ocg.cpp
+++ b/core/src/fpdfdoc/doc_ocg.cpp
@@ -5,297 +5,303 @@
// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
#include "../../include/fpdfdoc/fpdf_doc.h"
-static int32_t FPDFDOC_OCG_FindGroup(const CPDF_Object *pObject, const CPDF_Dictionary *pGroupDict)
-{
- if (pObject == NULL || pGroupDict == NULL) {
- return -1;
- }
- int32_t iType = pObject->GetType();
- if (iType == PDFOBJ_ARRAY) {
- FX_DWORD dwCount = ((CPDF_Array*)pObject)->GetCount();
- for (FX_DWORD i = 0; i < dwCount; i++) {
- if (((CPDF_Array*)pObject)->GetDict(i) == pGroupDict) {
- return i;
- }
- }
- return -1;
- }
- if (pObject->GetDict() == pGroupDict) {
- return 0;
+static int32_t FPDFDOC_OCG_FindGroup(const CPDF_Object* pObject,
+ const CPDF_Dictionary* pGroupDict) {
+ if (pObject == NULL || pGroupDict == NULL) {
+ return -1;
+ }
+ int32_t iType = pObject->GetType();
+ if (iType == PDFOBJ_ARRAY) {
+ FX_DWORD dwCount = ((CPDF_Array*)pObject)->GetCount();
+ for (FX_DWORD i = 0; i < dwCount; i++) {
+ if (((CPDF_Array*)pObject)->GetDict(i) == pGroupDict) {
+ return i;
+ }
}
return -1;
+ }
+ if (pObject->GetDict() == pGroupDict) {
+ return 0;
+ }
+ return -1;
}
-static FX_BOOL FPDFDOC_OCG_HasIntent(const CPDF_Dictionary *pDict, const CFX_ByteStringC& csElement, const CFX_ByteStringC& csDef = FX_BSTRC(""))
-{
- FXSYS_assert(pDict != NULL);
- CPDF_Object *pIntent = pDict->GetElementValue(FX_BSTRC("Intent"));
- if (pIntent == NULL) {
- return csElement == csDef;
- }
- CFX_ByteString bsIntent;
- if (pIntent->GetType() == PDFOBJ_ARRAY) {
- FX_DWORD dwCount = ((CPDF_Array*)pIntent)->GetCount();
- for (FX_DWORD i = 0; i < dwCount; i++) {
- bsIntent = ((CPDF_Array*)pIntent)->GetString(i);
- if (bsIntent == FX_BSTRC("All") || bsIntent == csElement) {
- return TRUE;
- }
- }
- return FALSE;
+static FX_BOOL FPDFDOC_OCG_HasIntent(
+ const CPDF_Dictionary* pDict,
+ const CFX_ByteStringC& csElement,
+ const CFX_ByteStringC& csDef = FX_BSTRC("")) {
+ FXSYS_assert(pDict != NULL);
+ CPDF_Object* pIntent = pDict->GetElementValue(FX_BSTRC("Intent"));
+ if (pIntent == NULL) {
+ return csElement == csDef;
+ }
+ CFX_ByteString bsIntent;
+ if (pIntent->GetType() == PDFOBJ_ARRAY) {
+ FX_DWORD dwCount = ((CPDF_Array*)pIntent)->GetCount();
+ for (FX_DWORD i = 0; i < dwCount; i++) {
+ bsIntent = ((CPDF_Array*)pIntent)->GetString(i);
+ if (bsIntent == FX_BSTRC("All") || bsIntent == csElement) {
+ return TRUE;
+ }
}
- bsIntent = pIntent->GetString();
- return bsIntent == FX_BSTRC("All") || bsIntent == csElement;
+ return FALSE;
+ }
+ bsIntent = pIntent->GetString();
+ return bsIntent == FX_BSTRC("All") || bsIntent == csElement;
}
-static CPDF_Dictionary* FPDFDOC_OCG_GetConfig(CPDF_Document *pDoc, const CPDF_Dictionary *pOCGDict, const CFX_ByteStringC& bsState)
-{
- FXSYS_assert(pDoc && pOCGDict);
- CPDF_Dictionary *pOCProperties = pDoc->GetRoot()->GetDict(FX_BSTRC("OCProperties"));
- if (!pOCProperties) {
- return NULL;
- }
- CPDF_Array *pOCGs = pOCProperties->GetArray(FX_BSTRC("OCGs"));
- if (!pOCGs) {
- return NULL;
- }
- if (FPDFDOC_OCG_FindGroup(pOCGs, pOCGDict) < 0) {
- return NULL;
- }
- CPDF_Dictionary *pConfig = pOCProperties->GetDict(FX_BSTRC("D"));
- CPDF_Array *pConfigs = pOCProperties->GetArray(FX_BSTRC("Configs"));
- if (pConfigs) {
- CPDF_Dictionary *pFind;
- int32_t iCount = pConfigs->GetCount();
- for (int32_t i = 0; i < iCount; i ++) {
- pFind = pConfigs->GetDict(i);
- if (!pFind) {
- continue;
- }
- if (!FPDFDOC_OCG_HasIntent(pFind, FX_BSTRC("View"), FX_BSTRC("View"))) {
- continue;
- }
- pConfig = pFind;
- break;
- }
+static CPDF_Dictionary* FPDFDOC_OCG_GetConfig(CPDF_Document* pDoc,
+ const CPDF_Dictionary* pOCGDict,
+ const CFX_ByteStringC& bsState) {
+ FXSYS_assert(pDoc && pOCGDict);
+ CPDF_Dictionary* pOCProperties =
+ pDoc->GetRoot()->GetDict(FX_BSTRC("OCProperties"));
+ if (!pOCProperties) {
+ return NULL;
+ }
+ CPDF_Array* pOCGs = pOCProperties->GetArray(FX_BSTRC("OCGs"));
+ if (!pOCGs) {
+ return NULL;
+ }
+ if (FPDFDOC_OCG_FindGroup(pOCGs, pOCGDict) < 0) {
+ return NULL;
+ }
+ CPDF_Dictionary* pConfig = pOCProperties->GetDict(FX_BSTRC("D"));
+ CPDF_Array* pConfigs = pOCProperties->GetArray(FX_BSTRC("Configs"));
+ if (pConfigs) {
+ CPDF_Dictionary* pFind;
+ int32_t iCount = pConfigs->GetCount();
+ for (int32_t i = 0; i < iCount; i++) {
+ pFind = pConfigs->GetDict(i);
+ if (!pFind) {
+ continue;
+ }
+ if (!FPDFDOC_OCG_HasIntent(pFind, FX_BSTRC("View"), FX_BSTRC("View"))) {
+ continue;
+ }
+ pConfig = pFind;
+ break;
}
- return pConfig;
+ }
+ return pConfig;
}
-static CFX_ByteString FPDFDOC_OCG_GetUsageTypeString(CPDF_OCContext::UsageType eType)
-{
- CFX_ByteString csState = FX_BSTRC("View");
- if (eType == CPDF_OCContext::Design) {
- csState = FX_BSTRC("Design");
- } else if (eType == CPDF_OCContext::Print) {
- csState = FX_BSTRC("Print");
- } else if (eType == CPDF_OCContext::Export) {
- csState = FX_BSTRC("Export");
- }
- return csState;
+static CFX_ByteString FPDFDOC_OCG_GetUsageTypeString(
+ CPDF_OCContext::UsageType eType) {
+ CFX_ByteString csState = FX_BSTRC("View");
+ if (eType == CPDF_OCContext::Design) {
+ csState = FX_BSTRC("Design");
+ } else if (eType == CPDF_OCContext::Print) {
+ csState = FX_BSTRC("Print");
+ } else if (eType == CPDF_OCContext::Export) {
+ csState = FX_BSTRC("Export");
+ }
+ return csState;
}
-CPDF_OCContext::CPDF_OCContext(CPDF_Document *pDoc, UsageType eUsageType)
-{
- FXSYS_assert(pDoc != NULL);
- m_pDocument = pDoc;
- m_eUsageType = eUsageType;
+CPDF_OCContext::CPDF_OCContext(CPDF_Document* pDoc, UsageType eUsageType) {
+ FXSYS_assert(pDoc != NULL);
+ m_pDocument = pDoc;
+ m_eUsageType = eUsageType;
}
-CPDF_OCContext::~CPDF_OCContext()
-{
- m_OCGStates.clear();
+CPDF_OCContext::~CPDF_OCContext() {
+ m_OCGStates.clear();
}
-FX_BOOL CPDF_OCContext::LoadOCGStateFromConfig(const CFX_ByteStringC& csConfig, const CPDF_Dictionary *pOCGDict, FX_BOOL &bValidConfig) const
-{
- CPDF_Dictionary *pConfig = FPDFDOC_OCG_GetConfig(m_pDocument, pOCGDict, csConfig);
- if (!pConfig) {
- return TRUE;
+FX_BOOL CPDF_OCContext::LoadOCGStateFromConfig(const CFX_ByteStringC& csConfig,
+ const CPDF_Dictionary* pOCGDict,
+ FX_BOOL& bValidConfig) const {
+ CPDF_Dictionary* pConfig =
+ FPDFDOC_OCG_GetConfig(m_pDocument, pOCGDict, csConfig);
+ if (!pConfig) {
+ return TRUE;
+ }
+ bValidConfig = TRUE;
+ FX_BOOL bState = pConfig->GetString(FX_BSTRC("BaseState"), FX_BSTRC("ON")) !=
+ FX_BSTRC("OFF");
+ CPDF_Array* pArray = pConfig->GetArray(FX_BSTRC("ON"));
+ if (pArray) {
+ if (FPDFDOC_OCG_FindGroup(pArray, pOCGDict) >= 0) {
+ bState = TRUE;
}
- bValidConfig = TRUE;
- FX_BOOL bState = pConfig->GetString(FX_BSTRC("BaseState"), FX_BSTRC("ON")) != FX_BSTRC("OFF");
- CPDF_Array *pArray = pConfig->GetArray(FX_BSTRC("ON"));
- if (pArray) {
- if (FPDFDOC_OCG_FindGroup(pArray, pOCGDict) >= 0) {
- bState = TRUE;
- }
+ }
+ pArray = pConfig->GetArray(FX_BSTRC("OFF"));
+ if (pArray) {
+ if (FPDFDOC_OCG_FindGroup(pArray, pOCGDict) >= 0) {
+ bState = FALSE;
}
- pArray = pConfig->GetArray(FX_BSTRC("OFF"));
- if (pArray) {
- if (FPDFDOC_OCG_FindGroup(pArray, pOCGDict) >= 0) {
- bState = FALSE;
- }
+ }
+ pArray = pConfig->GetArray(FX_BSTRC("AS"));
+ if (pArray) {
+ CFX_ByteString csFind = csConfig + FX_BSTRC("State");
+ int32_t iCount = pArray->GetCount();
+ for (int32_t i = 0; i < iCount; i++) {
+ CPDF_Dictionary* pUsage = pArray->GetDict(i);
+ if (!pUsage) {
+ continue;
+ }
+ if (pUsage->GetString(FX_BSTRC("Event"), FX_BSTRC("View")) != csConfig) {
+ continue;
+ }
+ CPDF_Array* pOCGs = pUsage->GetArray(FX_BSTRC("OCGs"));
+ if (!pOCGs) {
+ continue;
+ }
+ if (FPDFDOC_OCG_FindGroup(pOCGs, pOCGDict) < 0) {
+ continue;
+ }
+ CPDF_Dictionary* pState = pUsage->GetDict(csConfig);
+ if (!pState) {
+ continue;
+ }
+ bState = pState->GetString(csFind) != FX_BSTRC("OFF");
}
- pArray = pConfig->GetArray(FX_BSTRC("AS"));
- if (pArray) {
- CFX_ByteString csFind = csConfig + FX_BSTRC("State");
- int32_t iCount = pArray->GetCount();
- for (int32_t i = 0; i < iCount; i ++) {
- CPDF_Dictionary *pUsage = pArray->GetDict(i);
- if (!pUsage) {
- continue;
- }
- if (pUsage->GetString(FX_BSTRC("Event"), FX_BSTRC("View")) != csConfig) {
- continue;
- }
- CPDF_Array *pOCGs = pUsage->GetArray(FX_BSTRC("OCGs"));
- if (!pOCGs) {
- continue;
- }
- if (FPDFDOC_OCG_FindGroup(pOCGs, pOCGDict) < 0) {
- continue;
- }
- CPDF_Dictionary *pState = pUsage->GetDict(csConfig);
- if (!pState) {
- continue;
- }
- bState = pState->GetString(csFind) != FX_BSTRC("OFF");
- }
- }
- return bState;
+ }
+ return bState;
}
-FX_BOOL CPDF_OCContext::LoadOCGState(const CPDF_Dictionary *pOCGDict) const
-{
- if (!FPDFDOC_OCG_HasIntent(pOCGDict, FX_BSTRC("View"), FX_BSTRC("View"))) {
- return TRUE;
+FX_BOOL CPDF_OCContext::LoadOCGState(const CPDF_Dictionary* pOCGDict) const {
+ if (!FPDFDOC_OCG_HasIntent(pOCGDict, FX_BSTRC("View"), FX_BSTRC("View"))) {
+ return TRUE;
+ }
+ CFX_ByteString csState = FPDFDOC_OCG_GetUsageTypeString(m_eUsageType);
+ CPDF_Dictionary* pUsage = pOCGDict->GetDict(FX_BSTRC("Usage"));
+ if (pUsage) {
+ CPDF_Dictionary* pState = pUsage->GetDict(csState);
+ if (pState) {
+ CFX_ByteString csFind = csState + FX_BSTRC("State");
+ if (pState->KeyExist(csFind)) {
+ return pState->GetString(csFind) != FX_BSTRC("OFF");
+ }
}
- CFX_ByteString csState = FPDFDOC_OCG_GetUsageTypeString(m_eUsageType);
- CPDF_Dictionary *pUsage = pOCGDict->GetDict(FX_BSTRC("Usage"));
- if (pUsage) {
- CPDF_Dictionary *pState = pUsage->GetDict(csState);
- if (pState) {
- CFX_ByteString csFind = csState + FX_BSTRC("State");
- if (pState->KeyExist(csFind)) {
- return pState->GetString(csFind) != FX_BSTRC("OFF");
- }
- }
- if (csState != FX_BSTRC("View")) {
- pState = pUsage->GetDict(FX_BSTRC("View"));
- if (pState && pState->KeyExist(FX_BSTRC("ViewState"))) {
- return pState->GetString(FX_BSTRC("ViewState")) != FX_BSTRC("OFF");
- }
- }
+ if (csState != FX_BSTRC("View")) {
+ pState = pUsage->GetDict(FX_BSTRC("View"));
+ if (pState && pState->KeyExist(FX_BSTRC("ViewState"))) {
+ return pState->GetString(FX_BSTRC("ViewState")) != FX_BSTRC("OFF");
+ }
}
- FX_BOOL bDefValid = FALSE;
- return LoadOCGStateFromConfig(csState, pOCGDict, bDefValid);
+ }
+ FX_BOOL bDefValid = FALSE;
+ return LoadOCGStateFromConfig(csState, pOCGDict, bDefValid);
}
-FX_BOOL CPDF_OCContext::GetOCGVisible(const CPDF_Dictionary* pOCGDict)
-{
- if (!pOCGDict)
- return FALSE;
+FX_BOOL CPDF_OCContext::GetOCGVisible(const CPDF_Dictionary* pOCGDict) {
+ if (!pOCGDict)
+ return FALSE;
- const auto it = m_OCGStates.find(pOCGDict);
- if (it != m_OCGStates.end())
- return it->second;
+ const auto it = m_OCGStates.find(pOCGDict);
+ if (it != m_OCGStates.end())
+ return it->second;
- FX_BOOL bState = LoadOCGState(pOCGDict);
- m_OCGStates[pOCGDict] = bState;
- return bState;
+ FX_BOOL bState = LoadOCGState(pOCGDict);
+ m_OCGStates[pOCGDict] = bState;
+ return bState;
}
-FX_BOOL CPDF_OCContext::GetOCGVE(CPDF_Array *pExpression, FX_BOOL bFromConfig, int nLevel)
-{
- if (nLevel > 32) {
- return FALSE;
+FX_BOOL CPDF_OCContext::GetOCGVE(CPDF_Array* pExpression,
+ FX_BOOL bFromConfig,
+ int nLevel) {
+ if (nLevel > 32) {
+ return FALSE;
+ }
+ if (pExpression == NULL) {
+ return FALSE;
+ }
+ int32_t iCount = pExpression->GetCount();
+ CPDF_Object* pOCGObj;
+ CFX_ByteString csOperator = pExpression->GetString(0);
+ if (csOperator == FX_BSTRC("Not")) {
+ pOCGObj = pExpression->GetElementValue(1);
+ if (pOCGObj == NULL) {
+ return FALSE;
}
- if (pExpression == NULL) {
- return FALSE;
+ if (pOCGObj->GetType() == PDFOBJ_DICTIONARY) {
+ return !(bFromConfig ? LoadOCGState((CPDF_Dictionary*)pOCGObj)
+ : GetOCGVisible((CPDF_Dictionary*)pOCGObj));
}
- int32_t iCount = pExpression->GetCount();
- CPDF_Object *pOCGObj;
- CFX_ByteString csOperator = pExpression->GetString(0);
- if (csOperator == FX_BSTRC("Not")) {
- pOCGObj = pExpression->GetElementValue(1);
- if (pOCGObj == NULL) {
- return FALSE;
- }
- if (pOCGObj->GetType() == PDFOBJ_DICTIONARY) {
- return !(bFromConfig ? LoadOCGState((CPDF_Dictionary*)pOCGObj) : GetOCGVisible((CPDF_Dictionary*)pOCGObj));
- }
- if (pOCGObj->GetType() == PDFOBJ_ARRAY) {
- return !GetOCGVE((CPDF_Array*)pOCGObj, bFromConfig, nLevel + 1);
- }
- return FALSE;
+ if (pOCGObj->GetType() == PDFOBJ_ARRAY) {
+ return !GetOCGVE((CPDF_Array*)pOCGObj, bFromConfig, nLevel + 1);
}
- if (csOperator == FX_BSTRC("Or") || csOperator == FX_BSTRC("And")) {
- FX_BOOL bValue = FALSE;
- for (int32_t i = 1; i < iCount; i ++) {
- pOCGObj = pExpression->GetElementValue(1);
- if (pOCGObj == NULL) {
- continue;
- }
- FX_BOOL bItem = FALSE;
- if (pOCGObj->GetType() == PDFOBJ_DICTIONARY) {
- bItem = bFromConfig ? LoadOCGState((CPDF_Dictionary*)pOCGObj) : GetOCGVisible((CPDF_Dictionary*)pOCGObj);
- } else if (pOCGObj->GetType() == PDFOBJ_ARRAY) {
- bItem = GetOCGVE((CPDF_Array*)pOCGObj, bFromConfig, nLevel + 1);
- }
- if (i == 1) {
- bValue = bItem;
- } else {
- if (csOperator == FX_BSTRC("Or")) {
- bValue = bValue || bItem;
- } else {
- bValue = bValue && bItem;
- }
- }
+ return FALSE;
+ }
+ if (csOperator == FX_BSTRC("Or") || csOperator == FX_BSTRC("And")) {
+ FX_BOOL bValue = FALSE;
+ for (int32_t i = 1; i < iCount; i++) {
+ pOCGObj = pExpression->GetElementValue(1);
+ if (pOCGObj == NULL) {
+ continue;
+ }
+ FX_BOOL bItem = FALSE;
+ if (pOCGObj->GetType() == PDFOBJ_DICTIONARY) {
+ bItem = bFromConfig ? LoadOCGState((CPDF_Dictionary*)pOCGObj)
+ : GetOCGVisible((CPDF_Dictionary*)pOCGObj);
+ } else if (pOCGObj->GetType() == PDFOBJ_ARRAY) {
+ bItem = GetOCGVE((CPDF_Array*)pOCGObj, bFromConfig, nLevel + 1);
+ }
+ if (i == 1) {
+ bValue = bItem;
+ } else {
+ if (csOperator == FX_BSTRC("Or")) {
+ bValue = bValue || bItem;
+ } else {
+ bValue = bValue && bItem;
}
- return bValue;
+ }
}
- return FALSE;
+ return bValue;
+ }
+ return FALSE;
}
-FX_BOOL CPDF_OCContext::LoadOCMDState(const CPDF_Dictionary *pOCMDDict, FX_BOOL bFromConfig)
-{
- FXSYS_assert(pOCMDDict != NULL);
- CPDF_Array *pVE = pOCMDDict->GetArray(FX_BSTRC("VE"));
- if (pVE != NULL) {
- return GetOCGVE(pVE, bFromConfig);
- }
- CFX_ByteString csP = pOCMDDict->GetString(FX_BSTRC("P"), FX_BSTRC("AnyOn"));
- CPDF_Object *pOCGObj = pOCMDDict->GetElementValue(FX_BSTRC("OCGs"));
- if (pOCGObj == NULL) {
- return TRUE;
+FX_BOOL CPDF_OCContext::LoadOCMDState(const CPDF_Dictionary* pOCMDDict,
+ FX_BOOL bFromConfig) {
+ FXSYS_assert(pOCMDDict != NULL);
+ CPDF_Array* pVE = pOCMDDict->GetArray(FX_BSTRC("VE"));
+ if (pVE != NULL) {
+ return GetOCGVE(pVE, bFromConfig);
+ }
+ CFX_ByteString csP = pOCMDDict->GetString(FX_BSTRC("P"), FX_BSTRC("AnyOn"));
+ CPDF_Object* pOCGObj = pOCMDDict->GetElementValue(FX_BSTRC("OCGs"));
+ if (pOCGObj == NULL) {
+ return TRUE;
+ }
+ if (pOCGObj->GetType() == PDFOBJ_DICTIONARY) {
+ return bFromConfig ? LoadOCGState((CPDF_Dictionary*)pOCGObj)
+ : GetOCGVisible((CPDF_Dictionary*)pOCGObj);
+ }
+ if (pOCGObj->GetType() != PDFOBJ_ARRAY) {
+ return TRUE;
+ }
+ FX_BOOL bState = FALSE;
+ if (csP == FX_BSTRC("AllOn") || csP == FX_BSTRC("AllOff")) {
+ bState = TRUE;
+ }
+ int32_t iCount = ((CPDF_Array*)pOCGObj)->GetCount();
+ for (int32_t i = 0; i < iCount; i++) {
+ FX_BOOL bItem = TRUE;
+ CPDF_Dictionary* pItemDict = ((CPDF_Array*)pOCGObj)->GetDict(i);
+ if (pItemDict) {
+ bItem = bFromConfig ? LoadOCGState(pItemDict) : GetOCGVisible(pItemDict);
}
- if (pOCGObj->GetType() == PDFOBJ_DICTIONARY) {
- return bFromConfig ? LoadOCGState((CPDF_Dictionary*)pOCGObj) : GetOCGVisible((CPDF_Dictionary*)pOCGObj);
+ if (csP == FX_BSTRC("AnyOn") && bItem) {
+ return TRUE;
}
- if (pOCGObj->GetType() != PDFOBJ_ARRAY) {
- return TRUE;
+ if (csP == FX_BSTRC("AnyOff") && !bItem) {
+ return TRUE;
}
- FX_BOOL bState = FALSE;
- if (csP == FX_BSTRC("AllOn") || csP == FX_BSTRC("AllOff")) {
- bState = TRUE;
+ if (csP == FX_BSTRC("AllOn") && !bItem) {
+ return FALSE;
}
- int32_t iCount = ((CPDF_Array*)pOCGObj)->GetCount();
- for (int32_t i = 0; i < iCount; i ++) {
- FX_BOOL bItem = TRUE;
- CPDF_Dictionary* pItemDict = ((CPDF_Array*)pOCGObj)->GetDict(i);
- if (pItemDict) {
- bItem = bFromConfig ? LoadOCGState(pItemDict) : GetOCGVisible(pItemDict);
- }
- if (csP == FX_BSTRC("AnyOn") && bItem) {
- return TRUE;
- }
- if (csP == FX_BSTRC("AnyOff") && !bItem) {
- return TRUE;
- }
- if (csP == FX_BSTRC("AllOn") && !bItem) {
- return FALSE;
- }
- if (csP == FX_BSTRC("AllOff") && bItem) {
- return FALSE;
- }
+ if (csP == FX_BSTRC("AllOff") && bItem) {
+ return FALSE;
}
- return bState;
+ }
+ return bState;
}
-FX_BOOL CPDF_OCContext::CheckOCGVisible(const CPDF_Dictionary *pOCGDict)
-{
- if (!pOCGDict) {
- return TRUE;
- }
- CFX_ByteString csType = pOCGDict->GetString(FX_BSTRC("Type"), FX_BSTRC("OCG"));
- if (csType == FX_BSTRC("OCG")) {
- return GetOCGVisible(pOCGDict);
- }
- return LoadOCMDState(pOCGDict, FALSE);
+FX_BOOL CPDF_OCContext::CheckOCGVisible(const CPDF_Dictionary* pOCGDict) {
+ if (!pOCGDict) {
+ return TRUE;
+ }
+ CFX_ByteString csType =
+ pOCGDict->GetString(FX_BSTRC("Type"), FX_BSTRC("OCG"));
+ if (csType == FX_BSTRC("OCG")) {
+ return GetOCGVisible(pOCGDict);
+ }
+ return LoadOCMDState(pOCGDict, FALSE);
}
-void CPDF_OCContext::ResetOCContext()
-{
- m_OCGStates.clear();
+void CPDF_OCContext::ResetOCContext() {
+ m_OCGStates.clear();
}
diff --git a/core/src/fpdfdoc/doc_tagged.cpp b/core/src/fpdfdoc/doc_tagged.cpp
index e9f0c55e2b..facad46886 100644
--- a/core/src/fpdfdoc/doc_tagged.cpp
+++ b/core/src/fpdfdoc/doc_tagged.cpp
@@ -9,430 +9,451 @@
#include "../../include/fpdfdoc/fpdf_tagged.h"
#include "tagged_int.h"
const int nMaxRecursion = 32;
-static FX_BOOL IsTagged(const CPDF_Document* pDoc)
-{
- CPDF_Dictionary* pCatalog = pDoc->GetRoot();
- CPDF_Dictionary* pMarkInfo = pCatalog->GetDict(FX_BSTRC("MarkInfo"));
- return pMarkInfo != NULL && pMarkInfo->GetInteger(FX_BSTRC("Marked"));
+static FX_BOOL IsTagged(const CPDF_Document* pDoc) {
+ CPDF_Dictionary* pCatalog = pDoc->GetRoot();
+ CPDF_Dictionary* pMarkInfo = pCatalog->GetDict(FX_BSTRC("MarkInfo"));
+ return pMarkInfo != NULL && pMarkInfo->GetInteger(FX_BSTRC("Marked"));
}
-CPDF_StructTree* CPDF_StructTree::LoadPage(const CPDF_Document* pDoc, const CPDF_Dictionary* pPageDict)
-{
- if (!IsTagged(pDoc)) {
- return NULL;
- }
- CPDF_StructTreeImpl* pTree = new CPDF_StructTreeImpl(pDoc);
- pTree->LoadPageTree(pPageDict);
- return pTree;
+CPDF_StructTree* CPDF_StructTree::LoadPage(const CPDF_Document* pDoc,
+ const CPDF_Dictionary* pPageDict) {
+ if (!IsTagged(pDoc)) {
+ return NULL;
+ }
+ CPDF_StructTreeImpl* pTree = new CPDF_StructTreeImpl(pDoc);
+ pTree->LoadPageTree(pPageDict);
+ return pTree;
}
-CPDF_StructTree* CPDF_StructTree::LoadDoc(const CPDF_Document* pDoc)
-{
- if (!IsTagged(pDoc)) {
- return NULL;
- }
- CPDF_StructTreeImpl* pTree = new CPDF_StructTreeImpl(pDoc);
- pTree->LoadDocTree();
- return pTree;
+CPDF_StructTree* CPDF_StructTree::LoadDoc(const CPDF_Document* pDoc) {
+ if (!IsTagged(pDoc)) {
+ return NULL;
+ }
+ CPDF_StructTreeImpl* pTree = new CPDF_StructTreeImpl(pDoc);
+ pTree->LoadDocTree();
+ return pTree;
}
-CPDF_StructTreeImpl::CPDF_StructTreeImpl(const CPDF_Document* pDoc)
-{
- CPDF_Dictionary* pCatalog = pDoc->GetRoot();
- m_pTreeRoot = pCatalog->GetDict(FX_BSTRC("StructTreeRoot"));
- if (m_pTreeRoot == NULL) {
- return;
+CPDF_StructTreeImpl::CPDF_StructTreeImpl(const CPDF_Document* pDoc) {
+ CPDF_Dictionary* pCatalog = pDoc->GetRoot();
+ m_pTreeRoot = pCatalog->GetDict(FX_BSTRC("StructTreeRoot"));
+ if (m_pTreeRoot == NULL) {
+ return;
+ }
+ m_pRoleMap = m_pTreeRoot->GetDict(FX_BSTRC("RoleMap"));
+}
+CPDF_StructTreeImpl::~CPDF_StructTreeImpl() {
+ for (int i = 0; i < m_Kids.GetSize(); i++)
+ if (m_Kids[i]) {
+ m_Kids[i]->Release();
}
- m_pRoleMap = m_pTreeRoot->GetDict(FX_BSTRC("RoleMap"));
}
-CPDF_StructTreeImpl::~CPDF_StructTreeImpl()
-{
- for (int i = 0; i < m_Kids.GetSize(); i ++)
- if (m_Kids[i]) {
- m_Kids[i]->Release();
- }
+void CPDF_StructTreeImpl::LoadDocTree() {
+ m_pPage = NULL;
+ if (m_pTreeRoot == NULL) {
+ return;
+ }
+ CPDF_Object* pKids = m_pTreeRoot->GetElementValue(FX_BSTRC("K"));
+ if (pKids == NULL) {
+ return;
+ }
+ if (pKids->GetType() == PDFOBJ_DICTIONARY) {
+ CPDF_StructElementImpl* pStructElementImpl =
+ new CPDF_StructElementImpl(this, NULL, (CPDF_Dictionary*)pKids);
+ m_Kids.Add(pStructElementImpl);
+ return;
+ }
+ if (pKids->GetType() != PDFOBJ_ARRAY) {
+ return;
+ }
+ CPDF_Array* pArray = (CPDF_Array*)pKids;
+ for (FX_DWORD i = 0; i < pArray->GetCount(); i++) {
+ CPDF_Dictionary* pKid = pArray->GetDict(i);
+ CPDF_StructElementImpl* pStructElementImpl =
+ new CPDF_StructElementImpl(this, NULL, pKid);
+ m_Kids.Add(pStructElementImpl);
+ }
}
-void CPDF_StructTreeImpl::LoadDocTree()
-{
- m_pPage = NULL;
- if (m_pTreeRoot == NULL) {
- return;
- }
- CPDF_Object* pKids = m_pTreeRoot->GetElementValue(FX_BSTRC("K"));
- if (pKids == NULL) {
- return;
- }
- if (pKids->GetType() == PDFOBJ_DICTIONARY) {
- CPDF_StructElementImpl* pStructElementImpl = new CPDF_StructElementImpl(this, NULL, (CPDF_Dictionary*)pKids);
- m_Kids.Add(pStructElementImpl);
- return;
- }
- if (pKids->GetType() != PDFOBJ_ARRAY) {
- return;
- }
- CPDF_Array* pArray = (CPDF_Array*)pKids;
- for (FX_DWORD i = 0; i < pArray->GetCount(); i ++) {
- CPDF_Dictionary* pKid = pArray->GetDict(i);
- CPDF_StructElementImpl* pStructElementImpl = new CPDF_StructElementImpl(this, NULL, pKid);
- m_Kids.Add(pStructElementImpl);
- }
+void CPDF_StructTreeImpl::LoadPageTree(const CPDF_Dictionary* pPageDict) {
+ m_pPage = pPageDict;
+ if (m_pTreeRoot == NULL) {
+ return;
+ }
+ CPDF_Object* pKids = m_pTreeRoot->GetElementValue(FX_BSTRC("K"));
+ if (pKids == NULL) {
+ return;
+ }
+ FX_DWORD dwKids = 0;
+ if (pKids->GetType() == PDFOBJ_DICTIONARY) {
+ dwKids = 1;
+ } else if (pKids->GetType() == PDFOBJ_ARRAY) {
+ dwKids = ((CPDF_Array*)pKids)->GetCount();
+ } else {
+ return;
+ }
+ FX_DWORD i;
+ m_Kids.SetSize(dwKids);
+ for (i = 0; i < dwKids; i++) {
+ m_Kids[i] = NULL;
+ }
+ CFX_MapPtrToPtr element_map;
+ CPDF_Dictionary* pParentTree = m_pTreeRoot->GetDict(FX_BSTRC("ParentTree"));
+ if (pParentTree == NULL) {
+ return;
+ }
+ CPDF_NumberTree parent_tree(pParentTree);
+ int parents_id = pPageDict->GetInteger(FX_BSTRC("StructParents"), -1);
+ if (parents_id >= 0) {
+ CPDF_Object* pParents = parent_tree.LookupValue(parents_id);
+ if (pParents == NULL || pParents->GetType() != PDFOBJ_ARRAY) {
+ return;
+ }
+ CPDF_Array* pParentArray = (CPDF_Array*)pParents;
+ for (i = 0; i < pParentArray->GetCount(); i++) {
+ CPDF_Dictionary* pParent = pParentArray->GetDict(i);
+ if (pParent == NULL) {
+ continue;
+ }
+ AddPageNode(pParent, element_map);
+ }
+ }
}
-void CPDF_StructTreeImpl::LoadPageTree(const CPDF_Dictionary* pPageDict)
-{
- m_pPage = pPageDict;
- if (m_pTreeRoot == NULL) {
- return;
- }
- CPDF_Object* pKids = m_pTreeRoot->GetElementValue(FX_BSTRC("K"));
- if (pKids == NULL) {
- return;
- }
- FX_DWORD dwKids = 0;
- if (pKids->GetType() == PDFOBJ_DICTIONARY) {
- dwKids = 1;
- } else if (pKids->GetType() == PDFOBJ_ARRAY) {
- dwKids = ((CPDF_Array*)pKids)->GetCount();
- } else {
- return;
- }
- FX_DWORD i;
- m_Kids.SetSize(dwKids);
- for (i = 0; i < dwKids; i ++) {
- m_Kids[i] = NULL;
- }
- CFX_MapPtrToPtr element_map;
- CPDF_Dictionary* pParentTree = m_pTreeRoot->GetDict(FX_BSTRC("ParentTree"));
- if (pParentTree == NULL) {
- return;
- }
- CPDF_NumberTree parent_tree(pParentTree);
- int parents_id = pPageDict->GetInteger(FX_BSTRC("StructParents"), -1);
- if (parents_id >= 0) {
- CPDF_Object* pParents = parent_tree.LookupValue(parents_id);
- if (pParents == NULL || pParents->GetType() != PDFOBJ_ARRAY) {
- return;
- }
- CPDF_Array* pParentArray = (CPDF_Array*)pParents;
- for (i = 0; i < pParentArray->GetCount(); i ++) {
- CPDF_Dictionary* pParent = pParentArray->GetDict(i);
- if (pParent == NULL) {
- continue;
- }
- AddPageNode(pParent, element_map);
- }
- }
+CPDF_StructElementImpl* CPDF_StructTreeImpl::AddPageNode(CPDF_Dictionary* pDict,
+ CFX_MapPtrToPtr& map,
+ int nLevel) {
+ if (nLevel > nMaxRecursion) {
+ return NULL;
+ }
+ CPDF_StructElementImpl* pElement = NULL;
+ if (map.Lookup(pDict, (void*&)pElement)) {
+ return pElement;
+ }
+ pElement = new CPDF_StructElementImpl(this, NULL, pDict);
+ map.SetAt(pDict, pElement);
+ CPDF_Dictionary* pParent = pDict->GetDict(FX_BSTRC("P"));
+ if (pParent == NULL ||
+ pParent->GetString(FX_BSTRC("Type")) == FX_BSTRC("StructTreeRoot")) {
+ if (!AddTopLevelNode(pDict, pElement)) {
+ pElement->Release();
+ map.RemoveKey(pDict);
+ }
+ } else {
+ CPDF_StructElementImpl* pParentElement =
+ AddPageNode(pParent, map, nLevel + 1);
+ FX_BOOL bSave = FALSE;
+ for (int i = 0; i < pParentElement->m_Kids.GetSize(); i++) {
+ if (pParentElement->m_Kids[i].m_Type != CPDF_StructKid::Element) {
+ continue;
+ }
+ if (pParentElement->m_Kids[i].m_Element.m_pDict != pDict) {
+ continue;
+ }
+ pParentElement->m_Kids[i].m_Element.m_pElement = pElement->Retain();
+ bSave = TRUE;
+ }
+ if (!bSave) {
+ pElement->Release();
+ map.RemoveKey(pDict);
+ }
+ }
+ return pElement;
}
-CPDF_StructElementImpl* CPDF_StructTreeImpl::AddPageNode(CPDF_Dictionary* pDict, CFX_MapPtrToPtr& map, int nLevel)
-{
- if (nLevel > nMaxRecursion) {
- return NULL;
- }
- CPDF_StructElementImpl* pElement = NULL;
- if (map.Lookup(pDict, (void*&)pElement)) {
- return pElement;
- }
- pElement = new CPDF_StructElementImpl(this, NULL, pDict);
- map.SetAt(pDict, pElement);
- CPDF_Dictionary* pParent = pDict->GetDict(FX_BSTRC("P"));
- if (pParent == NULL || pParent->GetString(FX_BSTRC("Type")) == FX_BSTRC("StructTreeRoot")) {
- if (!AddTopLevelNode(pDict, pElement)) {
- pElement->Release();
- map.RemoveKey(pDict);
- }
+FX_BOOL CPDF_StructTreeImpl::AddTopLevelNode(CPDF_Dictionary* pDict,
+ CPDF_StructElementImpl* pElement) {
+ CPDF_Object* pObj = m_pTreeRoot->GetElementValue(FX_BSTRC("K"));
+ if (!pObj) {
+ return FALSE;
+ }
+ if (pObj->GetType() == PDFOBJ_DICTIONARY) {
+ if (pObj->GetObjNum() == pDict->GetObjNum()) {
+ if (m_Kids[0]) {
+ m_Kids[0]->Release();
+ }
+ m_Kids[0] = pElement->Retain();
} else {
- CPDF_StructElementImpl* pParentElement = AddPageNode(pParent, map, nLevel + 1);
- FX_BOOL bSave = FALSE;
- for (int i = 0; i < pParentElement->m_Kids.GetSize(); i ++) {
- if (pParentElement->m_Kids[i].m_Type != CPDF_StructKid::Element) {
- continue;
- }
- if (pParentElement->m_Kids[i].m_Element.m_pDict != pDict) {
- continue;
- }
- pParentElement->m_Kids[i].m_Element.m_pElement = pElement->Retain();
- bSave = TRUE;
- }
- if (!bSave) {
- pElement->Release();
- map.RemoveKey(pDict);
- }
+ return FALSE;
}
- return pElement;
+ }
+ if (pObj->GetType() == PDFOBJ_ARRAY) {
+ CPDF_Array* pTopKids = (CPDF_Array*)pObj;
+ FX_DWORD i;
+ FX_BOOL bSave = FALSE;
+ for (i = 0; i < pTopKids->GetCount(); i++) {
+ CPDF_Object* pKidRef = pTopKids->GetElement(i);
+ if (pKidRef == NULL || pKidRef->GetType() != PDFOBJ_REFERENCE) {
+ continue;
+ }
+ if (((CPDF_Reference*)pKidRef)->GetRefObjNum() != pDict->GetObjNum()) {
+ continue;
+ }
+ if (m_Kids[i]) {
+ m_Kids[i]->Release();
+ }
+ m_Kids[i] = pElement->Retain();
+ bSave = TRUE;
+ }
+ if (!bSave) {
+ return FALSE;
+ }
+ }
+ return TRUE;
}
-FX_BOOL CPDF_StructTreeImpl::AddTopLevelNode(CPDF_Dictionary* pDict, CPDF_StructElementImpl* pElement)
-{
- CPDF_Object *pObj = m_pTreeRoot->GetElementValue(FX_BSTRC("K"));
- if (!pObj) {
- return FALSE;
- }
- if (pObj->GetType() == PDFOBJ_DICTIONARY) {
- if (pObj->GetObjNum() == pDict->GetObjNum()) {
- if (m_Kids[0]) {
- m_Kids[0]->Release();
- }
- m_Kids[0] = pElement->Retain();
- } else {
- return FALSE;
- }
- }
- if (pObj->GetType() == PDFOBJ_ARRAY) {
- CPDF_Array* pTopKids = (CPDF_Array*)pObj;
- FX_DWORD i;
- FX_BOOL bSave = FALSE;
- for (i = 0; i < pTopKids->GetCount(); i ++) {
- CPDF_Object* pKidRef = pTopKids->GetElement(i);
- if (pKidRef == NULL || pKidRef->GetType() != PDFOBJ_REFERENCE) {
- continue;
- }
- if (((CPDF_Reference*) pKidRef)->GetRefObjNum() != pDict->GetObjNum()) {
- continue;
- }
- if (m_Kids[i]) {
- m_Kids[i]->Release();
- }
- m_Kids[i] = pElement->Retain();
- bSave = TRUE;
- }
- if (!bSave) {
- return FALSE;
- }
- }
- return TRUE;
+CPDF_StructElementImpl::CPDF_StructElementImpl(CPDF_StructTreeImpl* pTree,
+ CPDF_StructElementImpl* pParent,
+ CPDF_Dictionary* pDict)
+ : m_RefCount(0) {
+ m_pTree = pTree;
+ m_pDict = pDict;
+ m_Type = pDict->GetString(FX_BSTRC("S"));
+ if (pTree->m_pRoleMap) {
+ CFX_ByteString mapped = pTree->m_pRoleMap->GetString(m_Type);
+ if (!mapped.IsEmpty()) {
+ m_Type = mapped;
+ }
+ }
+ m_pParent = pParent;
+ LoadKids(pDict);
}
-CPDF_StructElementImpl::CPDF_StructElementImpl(CPDF_StructTreeImpl* pTree, CPDF_StructElementImpl* pParent, CPDF_Dictionary* pDict)
- : m_RefCount(0)
-{
- m_pTree = pTree;
- m_pDict = pDict;
- m_Type = pDict->GetString(FX_BSTRC("S"));
- if (pTree->m_pRoleMap) {
- CFX_ByteString mapped = pTree->m_pRoleMap->GetString(m_Type);
- if (!mapped.IsEmpty()) {
- m_Type = mapped;
- }
+CPDF_StructElementImpl::~CPDF_StructElementImpl() {
+ for (int i = 0; i < m_Kids.GetSize(); i++) {
+ if (m_Kids[i].m_Type == CPDF_StructKid::Element &&
+ m_Kids[i].m_Element.m_pElement) {
+ ((CPDF_StructElementImpl*)m_Kids[i].m_Element.m_pElement)->Release();
}
- m_pParent = pParent;
- LoadKids(pDict);
+ }
}
-CPDF_StructElementImpl::~CPDF_StructElementImpl()
-{
- for (int i = 0; i < m_Kids.GetSize(); i ++) {
- if (m_Kids[i].m_Type == CPDF_StructKid::Element && m_Kids[i].m_Element.m_pElement) {
- ((CPDF_StructElementImpl*)m_Kids[i].m_Element.m_pElement)->Release();
- }
- }
+CPDF_StructElementImpl* CPDF_StructElementImpl::Retain() {
+ m_RefCount++;
+ return this;
}
-CPDF_StructElementImpl* CPDF_StructElementImpl::Retain()
-{
- m_RefCount++;
- return this;
+void CPDF_StructElementImpl::Release() {
+ if (--m_RefCount < 1) {
+ delete this;
+ }
}
-void CPDF_StructElementImpl::Release()
-{
- if(--m_RefCount < 1) {
- delete this;
- }
+void CPDF_StructElementImpl::LoadKids(CPDF_Dictionary* pDict) {
+ CPDF_Object* pObj = pDict->GetElement(FX_BSTRC("Pg"));
+ FX_DWORD PageObjNum = 0;
+ if (pObj && pObj->GetType() == PDFOBJ_REFERENCE) {
+ PageObjNum = ((CPDF_Reference*)pObj)->GetRefObjNum();
+ }
+ CPDF_Object* pKids = pDict->GetElementValue(FX_BSTRC("K"));
+ if (pKids == NULL) {
+ return;
+ }
+ if (pKids->GetType() == PDFOBJ_ARRAY) {
+ CPDF_Array* pArray = (CPDF_Array*)pKids;
+ m_Kids.SetSize(pArray->GetCount());
+ for (FX_DWORD i = 0; i < pArray->GetCount(); i++) {
+ CPDF_Object* pKid = pArray->GetElementValue(i);
+ LoadKid(PageObjNum, pKid, &m_Kids[i]);
+ }
+ } else {
+ m_Kids.SetSize(1);
+ LoadKid(PageObjNum, pKids, &m_Kids[0]);
+ }
}
-void CPDF_StructElementImpl::LoadKids(CPDF_Dictionary* pDict)
-{
- CPDF_Object* pObj = pDict->GetElement(FX_BSTRC("Pg"));
- FX_DWORD PageObjNum = 0;
- if (pObj && pObj->GetType() == PDFOBJ_REFERENCE) {
- PageObjNum = ((CPDF_Reference*)pObj)->GetRefObjNum();
- }
- CPDF_Object* pKids = pDict->GetElementValue(FX_BSTRC("K"));
- if (pKids == NULL) {
- return;
- }
- if (pKids->GetType() == PDFOBJ_ARRAY) {
- CPDF_Array* pArray = (CPDF_Array*)pKids;
- m_Kids.SetSize(pArray->GetCount());
- for (FX_DWORD i = 0; i < pArray->GetCount(); i ++) {
- CPDF_Object* pKid = pArray->GetElementValue(i);
- LoadKid(PageObjNum, pKid, &m_Kids[i]);
- }
+void CPDF_StructElementImpl::LoadKid(FX_DWORD PageObjNum,
+ CPDF_Object* pKidObj,
+ CPDF_StructKid* pKid) {
+ pKid->m_Type = CPDF_StructKid::Invalid;
+ if (pKidObj == NULL) {
+ return;
+ }
+ if (pKidObj->GetType() == PDFOBJ_NUMBER) {
+ if (m_pTree->m_pPage && m_pTree->m_pPage->GetObjNum() != PageObjNum) {
+ return;
+ }
+ pKid->m_Type = CPDF_StructKid::PageContent;
+ pKid->m_PageContent.m_ContentId = pKidObj->GetInteger();
+ pKid->m_PageContent.m_PageObjNum = PageObjNum;
+ return;
+ }
+ if (pKidObj->GetType() != PDFOBJ_DICTIONARY) {
+ return;
+ }
+ CPDF_Dictionary* pKidDict = (CPDF_Dictionary*)pKidObj;
+ CPDF_Object* pPageObj = pKidDict->GetElement(FX_BSTRC("Pg"));
+ if (pPageObj && pPageObj->GetType() == PDFOBJ_REFERENCE) {
+ PageObjNum = ((CPDF_Reference*)pPageObj)->GetRefObjNum();
+ }
+ CFX_ByteString type = pKidDict->GetString(FX_BSTRC("Type"));
+ if (type == FX_BSTRC("MCR")) {
+ if (m_pTree->m_pPage && m_pTree->m_pPage->GetObjNum() != PageObjNum) {
+ return;
+ }
+ pKid->m_Type = CPDF_StructKid::StreamContent;
+ CPDF_Object* pStreamObj = pKidDict->GetElement(FX_BSTRC("Stm"));
+ if (pStreamObj && pStreamObj->GetType() == PDFOBJ_REFERENCE) {
+ pKid->m_StreamContent.m_RefObjNum =
+ ((CPDF_Reference*)pStreamObj)->GetRefObjNum();
} else {
- m_Kids.SetSize(1);
- LoadKid(PageObjNum, pKids, &m_Kids[0]);
- }
-}
-void CPDF_StructElementImpl::LoadKid(FX_DWORD PageObjNum, CPDF_Object* pKidObj, CPDF_StructKid* pKid)
-{
- pKid->m_Type = CPDF_StructKid::Invalid;
- if (pKidObj == NULL) {
- return;
+ pKid->m_StreamContent.m_RefObjNum = 0;
}
- if (pKidObj->GetType() == PDFOBJ_NUMBER) {
- if (m_pTree->m_pPage && m_pTree->m_pPage->GetObjNum() != PageObjNum) {
- return;
- }
- pKid->m_Type = CPDF_StructKid::PageContent;
- pKid->m_PageContent.m_ContentId = pKidObj->GetInteger();
- pKid->m_PageContent.m_PageObjNum = PageObjNum;
- return;
+ pKid->m_StreamContent.m_PageObjNum = PageObjNum;
+ pKid->m_StreamContent.m_ContentId = pKidDict->GetInteger(FX_BSTRC("MCID"));
+ } else if (type == FX_BSTRC("OBJR")) {
+ if (m_pTree->m_pPage && m_pTree->m_pPage->GetObjNum() != PageObjNum) {
+ return;
}
- if (pKidObj->GetType() != PDFOBJ_DICTIONARY) {
- return;
- }
- CPDF_Dictionary* pKidDict = (CPDF_Dictionary*)pKidObj;
- CPDF_Object* pPageObj = pKidDict->GetElement(FX_BSTRC("Pg"));
- if (pPageObj && pPageObj->GetType() == PDFOBJ_REFERENCE) {
- PageObjNum = ((CPDF_Reference*)pPageObj)->GetRefObjNum();
- }
- CFX_ByteString type = pKidDict->GetString(FX_BSTRC("Type"));
- if (type == FX_BSTRC("MCR")) {
- if (m_pTree->m_pPage && m_pTree->m_pPage->GetObjNum() != PageObjNum) {
- return;
- }
- pKid->m_Type = CPDF_StructKid::StreamContent;
- CPDF_Object* pStreamObj = pKidDict->GetElement(FX_BSTRC("Stm"));
- if (pStreamObj && pStreamObj->GetType() == PDFOBJ_REFERENCE) {
- pKid->m_StreamContent.m_RefObjNum = ((CPDF_Reference*)pStreamObj)->GetRefObjNum();
- } else {
- pKid->m_StreamContent.m_RefObjNum = 0;
- }
- pKid->m_StreamContent.m_PageObjNum = PageObjNum;
- pKid->m_StreamContent.m_ContentId = pKidDict->GetInteger(FX_BSTRC("MCID"));
- } else if (type == FX_BSTRC("OBJR")) {
- if (m_pTree->m_pPage && m_pTree->m_pPage->GetObjNum() != PageObjNum) {
- return;
- }
- pKid->m_Type = CPDF_StructKid::Object;
- CPDF_Object* pObj = pKidDict->GetElement(FX_BSTRC("Obj"));
- if (pObj && pObj->GetType() == PDFOBJ_REFERENCE) {
- pKid->m_Object.m_RefObjNum = ((CPDF_Reference*)pObj)->GetRefObjNum();
- } else {
- pKid->m_Object.m_RefObjNum = 0;
- }
- pKid->m_Object.m_PageObjNum = PageObjNum;
+ pKid->m_Type = CPDF_StructKid::Object;
+ CPDF_Object* pObj = pKidDict->GetElement(FX_BSTRC("Obj"));
+ if (pObj && pObj->GetType() == PDFOBJ_REFERENCE) {
+ pKid->m_Object.m_RefObjNum = ((CPDF_Reference*)pObj)->GetRefObjNum();
+ } else {
+ pKid->m_Object.m_RefObjNum = 0;
+ }
+ pKid->m_Object.m_PageObjNum = PageObjNum;
+ } else {
+ pKid->m_Type = CPDF_StructKid::Element;
+ pKid->m_Element.m_pDict = pKidDict;
+ if (m_pTree->m_pPage == NULL) {
+ pKid->m_Element.m_pElement =
+ new CPDF_StructElementImpl(m_pTree, this, pKidDict);
} else {
- pKid->m_Type = CPDF_StructKid::Element;
- pKid->m_Element.m_pDict = pKidDict;
- if (m_pTree->m_pPage == NULL) {
- pKid->m_Element.m_pElement = new CPDF_StructElementImpl(m_pTree, this, pKidDict);
- } else {
- pKid->m_Element.m_pElement = NULL;
- }
+ pKid->m_Element.m_pElement = NULL;
}
+ }
}
-static CPDF_Dictionary* FindAttrDict(CPDF_Object* pAttrs, const CFX_ByteStringC& owner, FX_FLOAT nLevel = 0.0F)
-{
- if (nLevel > nMaxRecursion) {
- return NULL;
- }
- if (pAttrs == NULL) {
- return NULL;
- }
- CPDF_Dictionary* pDict = NULL;
- if (pAttrs->GetType() == PDFOBJ_DICTIONARY) {
- pDict = (CPDF_Dictionary*)pAttrs;
- } else if (pAttrs->GetType() == PDFOBJ_STREAM) {
- pDict = ((CPDF_Stream*)pAttrs)->GetDict();
- } else if (pAttrs->GetType() == PDFOBJ_ARRAY) {
- CPDF_Array* pArray = (CPDF_Array*)pAttrs;
- for (FX_DWORD i = 0; i < pArray->GetCount(); i ++) {
- CPDF_Object* pElement = pArray->GetElementValue(i);
- pDict = FindAttrDict(pElement, owner, nLevel + 1);
- if (pDict) {
- return pDict;
- }
- }
- }
- if (pDict && pDict->GetString(FX_BSTRC("O")) == owner) {
+static CPDF_Dictionary* FindAttrDict(CPDF_Object* pAttrs,
+ const CFX_ByteStringC& owner,
+ FX_FLOAT nLevel = 0.0F) {
+ if (nLevel > nMaxRecursion) {
+ return NULL;
+ }
+ if (pAttrs == NULL) {
+ return NULL;
+ }
+ CPDF_Dictionary* pDict = NULL;
+ if (pAttrs->GetType() == PDFOBJ_DICTIONARY) {
+ pDict = (CPDF_Dictionary*)pAttrs;
+ } else if (pAttrs->GetType() == PDFOBJ_STREAM) {
+ pDict = ((CPDF_Stream*)pAttrs)->GetDict();
+ } else if (pAttrs->GetType() == PDFOBJ_ARRAY) {
+ CPDF_Array* pArray = (CPDF_Array*)pAttrs;
+ for (FX_DWORD i = 0; i < pArray->GetCount(); i++) {
+ CPDF_Object* pElement = pArray->GetElementValue(i);
+ pDict = FindAttrDict(pElement, owner, nLevel + 1);
+ if (pDict) {
return pDict;
+ }
}
- return NULL;
+ }
+ if (pDict && pDict->GetString(FX_BSTRC("O")) == owner) {
+ return pDict;
+ }
+ return NULL;
}
-CPDF_Object* CPDF_StructElementImpl::GetAttr(const CFX_ByteStringC& owner, const CFX_ByteStringC& name, FX_BOOL bInheritable, FX_FLOAT fLevel)
-{
- if (fLevel > nMaxRecursion) {
- return NULL;
- }
- if (bInheritable) {
- CPDF_Object* pAttr = GetAttr(owner, name, FALSE);
- if (pAttr) {
- return pAttr;
- }
- if (m_pParent == NULL) {
- return NULL;
- }
- return m_pParent->GetAttr(owner, name, TRUE, fLevel + 1);
- }
- CPDF_Object* pA = m_pDict->GetElementValue(FX_BSTRC("A"));
- if (pA) {
- CPDF_Dictionary* pAttrDict = FindAttrDict(pA, owner);
- if (pAttrDict) {
- CPDF_Object* pAttr = pAttrDict->GetElementValue(name);
- if (pAttr) {
- return pAttr;
- }
- }
- }
- CPDF_Object* pC = m_pDict->GetElementValue(FX_BSTRC("C"));
- if (pC == NULL) {
- return NULL;
- }
- CPDF_Dictionary* pClassMap = m_pTree->m_pTreeRoot->GetDict(FX_BSTRC("ClassMap"));
- if (pClassMap == NULL) {
- return NULL;
- }
- if (pC->GetType() == PDFOBJ_ARRAY) {
- CPDF_Array* pArray = (CPDF_Array*)pC;
- for (FX_DWORD i = 0; i < pArray->GetCount(); i ++) {
- CFX_ByteString class_name = pArray->GetString(i);
- CPDF_Dictionary* pClassDict = pClassMap->GetDict(class_name);
- if (pClassDict && pClassDict->GetString(FX_BSTRC("O")) == owner) {
- return pClassDict->GetElementValue(name);
- }
- }
- return NULL;
+CPDF_Object* CPDF_StructElementImpl::GetAttr(const CFX_ByteStringC& owner,
+ const CFX_ByteStringC& name,
+ FX_BOOL bInheritable,
+ FX_FLOAT fLevel) {
+ if (fLevel > nMaxRecursion) {
+ return NULL;
+ }
+ if (bInheritable) {
+ CPDF_Object* pAttr = GetAttr(owner, name, FALSE);
+ if (pAttr) {
+ return pAttr;
+ }
+ if (m_pParent == NULL) {
+ return NULL;
+ }
+ return m_pParent->GetAttr(owner, name, TRUE, fLevel + 1);
+ }
+ CPDF_Object* pA = m_pDict->GetElementValue(FX_BSTRC("A"));
+ if (pA) {
+ CPDF_Dictionary* pAttrDict = FindAttrDict(pA, owner);
+ if (pAttrDict) {
+ CPDF_Object* pAttr = pAttrDict->GetElementValue(name);
+ if (pAttr) {
+ return pAttr;
+ }
}
- CFX_ByteString class_name = pC->GetString();
- CPDF_Dictionary* pClassDict = pClassMap->GetDict(class_name);
- if (pClassDict && pClassDict->GetString(FX_BSTRC("O")) == owner) {
+ }
+ CPDF_Object* pC = m_pDict->GetElementValue(FX_BSTRC("C"));
+ if (pC == NULL) {
+ return NULL;
+ }
+ CPDF_Dictionary* pClassMap =
+ m_pTree->m_pTreeRoot->GetDict(FX_BSTRC("ClassMap"));
+ if (pClassMap == NULL) {
+ return NULL;
+ }
+ if (pC->GetType() == PDFOBJ_ARRAY) {
+ CPDF_Array* pArray = (CPDF_Array*)pC;
+ for (FX_DWORD i = 0; i < pArray->GetCount(); i++) {
+ CFX_ByteString class_name = pArray->GetString(i);
+ CPDF_Dictionary* pClassDict = pClassMap->GetDict(class_name);
+ if (pClassDict && pClassDict->GetString(FX_BSTRC("O")) == owner) {
return pClassDict->GetElementValue(name);
+ }
}
return NULL;
+ }
+ CFX_ByteString class_name = pC->GetString();
+ CPDF_Dictionary* pClassDict = pClassMap->GetDict(class_name);
+ if (pClassDict && pClassDict->GetString(FX_BSTRC("O")) == owner) {
+ return pClassDict->GetElementValue(name);
+ }
+ return NULL;
}
-CPDF_Object* CPDF_StructElementImpl::GetAttr(const CFX_ByteStringC& owner, const CFX_ByteStringC& name, FX_BOOL bInheritable, int subindex)
-{
- CPDF_Object* pAttr = GetAttr(owner, name, bInheritable);
- if (pAttr == NULL || subindex == -1 || pAttr->GetType() != PDFOBJ_ARRAY) {
- return pAttr;
- }
- CPDF_Array* pArray = (CPDF_Array*)pAttr;
- if (subindex >= (int)pArray->GetCount()) {
- return pAttr;
- }
- return pArray->GetElementValue(subindex);
+CPDF_Object* CPDF_StructElementImpl::GetAttr(const CFX_ByteStringC& owner,
+ const CFX_ByteStringC& name,
+ FX_BOOL bInheritable,
+ int subindex) {
+ CPDF_Object* pAttr = GetAttr(owner, name, bInheritable);
+ if (pAttr == NULL || subindex == -1 || pAttr->GetType() != PDFOBJ_ARRAY) {
+ return pAttr;
+ }
+ CPDF_Array* pArray = (CPDF_Array*)pAttr;
+ if (subindex >= (int)pArray->GetCount()) {
+ return pAttr;
+ }
+ return pArray->GetElementValue(subindex);
}
-CFX_ByteString CPDF_StructElementImpl::GetName(const CFX_ByteStringC& owner, const CFX_ByteStringC& name, const CFX_ByteStringC& default_value, FX_BOOL bInheritable, int subindex)
-{
- CPDF_Object* pAttr = GetAttr(owner, name, bInheritable, subindex);
- if (pAttr == NULL || pAttr->GetType() != PDFOBJ_NAME) {
- return default_value;
- }
- return pAttr->GetString();
+CFX_ByteString CPDF_StructElementImpl::GetName(
+ const CFX_ByteStringC& owner,
+ const CFX_ByteStringC& name,
+ const CFX_ByteStringC& default_value,
+ FX_BOOL bInheritable,
+ int subindex) {
+ CPDF_Object* pAttr = GetAttr(owner, name, bInheritable, subindex);
+ if (pAttr == NULL || pAttr->GetType() != PDFOBJ_NAME) {
+ return default_value;
+ }
+ return pAttr->GetString();
}
-FX_ARGB CPDF_StructElementImpl::GetColor(const CFX_ByteStringC& owner, const CFX_ByteStringC& name, FX_ARGB default_value, FX_BOOL bInheritable, int subindex)
-{
- CPDF_Object* pAttr = GetAttr(owner, name, bInheritable, subindex);
- if (pAttr == NULL || pAttr->GetType() != PDFOBJ_ARRAY) {
- return default_value;
- }
- CPDF_Array* pArray = (CPDF_Array*)pAttr;
- return 0xff000000 | ((int)(pArray->GetNumber(0) * 255) << 16) | ((int)(pArray->GetNumber(1) * 255) << 8) | (int)(pArray->GetNumber(2) * 255);
+FX_ARGB CPDF_StructElementImpl::GetColor(const CFX_ByteStringC& owner,
+ const CFX_ByteStringC& name,
+ FX_ARGB default_value,
+ FX_BOOL bInheritable,
+ int subindex) {
+ CPDF_Object* pAttr = GetAttr(owner, name, bInheritable, subindex);
+ if (pAttr == NULL || pAttr->GetType() != PDFOBJ_ARRAY) {
+ return default_value;
+ }
+ CPDF_Array* pArray = (CPDF_Array*)pAttr;
+ return 0xff000000 | ((int)(pArray->GetNumber(0) * 255) << 16) |
+ ((int)(pArray->GetNumber(1) * 255) << 8) |
+ (int)(pArray->GetNumber(2) * 255);
}
-FX_FLOAT CPDF_StructElementImpl::GetNumber(const CFX_ByteStringC& owner, const CFX_ByteStringC& name, FX_FLOAT default_value, FX_BOOL bInheritable, int subindex)
-{
- CPDF_Object* pAttr = GetAttr(owner, name, bInheritable, subindex);
- if (pAttr == NULL || pAttr->GetType() != PDFOBJ_NUMBER) {
- return default_value;
- }
- return pAttr->GetNumber();
+FX_FLOAT CPDF_StructElementImpl::GetNumber(const CFX_ByteStringC& owner,
+ const CFX_ByteStringC& name,
+ FX_FLOAT default_value,
+ FX_BOOL bInheritable,
+ int subindex) {
+ CPDF_Object* pAttr = GetAttr(owner, name, bInheritable, subindex);
+ if (pAttr == NULL || pAttr->GetType() != PDFOBJ_NUMBER) {
+ return default_value;
+ }
+ return pAttr->GetNumber();
}
-int CPDF_StructElementImpl::GetInteger(const CFX_ByteStringC& owner, const CFX_ByteStringC& name, int default_value, FX_BOOL bInheritable, int subindex)
-{
- CPDF_Object* pAttr = GetAttr(owner, name, bInheritable, subindex);
- if (pAttr == NULL || pAttr->GetType() != PDFOBJ_NUMBER) {
- return default_value;
- }
- return pAttr->GetInteger();
+int CPDF_StructElementImpl::GetInteger(const CFX_ByteStringC& owner,
+ const CFX_ByteStringC& name,
+ int default_value,
+ FX_BOOL bInheritable,
+ int subindex) {
+ CPDF_Object* pAttr = GetAttr(owner, name, bInheritable, subindex);
+ if (pAttr == NULL || pAttr->GetType() != PDFOBJ_NUMBER) {
+ return default_value;
+ }
+ return pAttr->GetInteger();
}
diff --git a/core/src/fpdfdoc/doc_utils.cpp b/core/src/fpdfdoc/doc_utils.cpp
index 96d2ccf689..1ed0017078 100644
--- a/core/src/fpdfdoc/doc_utils.cpp
+++ b/core/src/fpdfdoc/doc_utils.cpp
@@ -9,724 +9,732 @@
static const int FPDFDOC_UTILS_MAXRECURSION = 32;
-CFX_WideString GetFullName(CPDF_Dictionary* pFieldDict)
-{
- CFX_WideString full_name;
- CPDF_Dictionary* pLevel = pFieldDict;
- while (pLevel) {
- CFX_WideString short_name = pLevel->GetUnicodeText("T");
- if (short_name != L"") {
- if (full_name == L"") {
- full_name = short_name;
- } else {
- full_name = short_name + L"." + full_name;
- }
- }
- pLevel = pLevel->GetDict("Parent");
- }
- return full_name;
-}
-FX_BOOL CPDF_DefaultAppearance::HasFont()
-{
- if (m_csDA.IsEmpty()) {
- return FALSE;
- }
- CPDF_SimpleParser syntax(m_csDA);
- return syntax.FindTagParam("Tf", 2);
+CFX_WideString GetFullName(CPDF_Dictionary* pFieldDict) {
+ CFX_WideString full_name;
+ CPDF_Dictionary* pLevel = pFieldDict;
+ while (pLevel) {
+ CFX_WideString short_name = pLevel->GetUnicodeText("T");
+ if (short_name != L"") {
+ if (full_name == L"") {
+ full_name = short_name;
+ } else {
+ full_name = short_name + L"." + full_name;
+ }
+ }
+ pLevel = pLevel->GetDict("Parent");
+ }
+ return full_name;
+}
+FX_BOOL CPDF_DefaultAppearance::HasFont() {
+ if (m_csDA.IsEmpty()) {
+ return FALSE;
+ }
+ CPDF_SimpleParser syntax(m_csDA);
+ return syntax.FindTagParam("Tf", 2);
}
-CFX_ByteString CPDF_DefaultAppearance::GetFontString()
-{
- CFX_ByteString csFont;
- if (m_csDA.IsEmpty()) {
- return csFont;
- }
- CPDF_SimpleParser syntax(m_csDA);
- if (syntax.FindTagParam("Tf", 2)) {
- csFont += (CFX_ByteString)syntax.GetWord();
- csFont += " ";
- csFont += (CFX_ByteString)syntax.GetWord();
- csFont += " ";
- csFont += (CFX_ByteString)syntax.GetWord();
- }
+CFX_ByteString CPDF_DefaultAppearance::GetFontString() {
+ CFX_ByteString csFont;
+ if (m_csDA.IsEmpty()) {
return csFont;
-}
-void CPDF_DefaultAppearance::GetFont(CFX_ByteString& csFontNameTag, FX_FLOAT& fFontSize)
-{
- csFontNameTag = "";
- fFontSize = 0;
- if (m_csDA.IsEmpty()) {
- return;
- }
- CPDF_SimpleParser syntax(m_csDA);
- if (syntax.FindTagParam("Tf", 2)) {
- csFontNameTag = (CFX_ByteString)syntax.GetWord();
- csFontNameTag.Delete(0, 1);
- fFontSize = FX_atof((CFX_ByteString)syntax.GetWord());
- }
- csFontNameTag = PDF_NameDecode(csFontNameTag);
-}
-FX_BOOL CPDF_DefaultAppearance::HasColor(FX_BOOL bStrokingOperation)
-{
- if (m_csDA.IsEmpty()) {
- return FALSE;
- }
- CPDF_SimpleParser syntax(m_csDA);
- if (syntax.FindTagParam(bStrokingOperation ? "G" : "g", 1)) {
- return TRUE;
- }
- syntax.SetPos(0);
- if (syntax.FindTagParam(bStrokingOperation ? "RG" : "rg", 3)) {
- return TRUE;
- }
- syntax.SetPos(0);
- return syntax.FindTagParam(bStrokingOperation ? "K" : "k", 4);
-}
-CFX_ByteString CPDF_DefaultAppearance::GetColorString(FX_BOOL bStrokingOperation)
-{
- CFX_ByteString csColor;
- if (m_csDA.IsEmpty()) {
- return csColor;
- }
- CPDF_SimpleParser syntax(m_csDA);
- if (syntax.FindTagParam(bStrokingOperation ? "G" : "g", 1)) {
- csColor += (CFX_ByteString)syntax.GetWord();
- csColor += " ";
- csColor += (CFX_ByteString)syntax.GetWord();
- return csColor;
- }
- syntax.SetPos(0);
- if (syntax.FindTagParam(bStrokingOperation ? "RG" : "rg", 3)) {
- csColor += (CFX_ByteString)syntax.GetWord();
- csColor += " ";
- csColor += (CFX_ByteString)syntax.GetWord();
- csColor += " ";
- csColor += (CFX_ByteString)syntax.GetWord();
- csColor += " ";
- csColor += (CFX_ByteString)syntax.GetWord();
- return csColor;
- }
- syntax.SetPos(0);
- if (syntax.FindTagParam(bStrokingOperation ? "K" : "k", 4)) {
- csColor += (CFX_ByteString)syntax.GetWord();
- csColor += " ";
- csColor += (CFX_ByteString)syntax.GetWord();
- csColor += " ";
- csColor += (CFX_ByteString)syntax.GetWord();
- csColor += " ";
- csColor += (CFX_ByteString)syntax.GetWord();
- csColor += " ";
- csColor += (CFX_ByteString)syntax.GetWord();
- }
+ }
+ CPDF_SimpleParser syntax(m_csDA);
+ if (syntax.FindTagParam("Tf", 2)) {
+ csFont += (CFX_ByteString)syntax.GetWord();
+ csFont += " ";
+ csFont += (CFX_ByteString)syntax.GetWord();
+ csFont += " ";
+ csFont += (CFX_ByteString)syntax.GetWord();
+ }
+ return csFont;
+}
+void CPDF_DefaultAppearance::GetFont(CFX_ByteString& csFontNameTag,
+ FX_FLOAT& fFontSize) {
+ csFontNameTag = "";
+ fFontSize = 0;
+ if (m_csDA.IsEmpty()) {
+ return;
+ }
+ CPDF_SimpleParser syntax(m_csDA);
+ if (syntax.FindTagParam("Tf", 2)) {
+ csFontNameTag = (CFX_ByteString)syntax.GetWord();
+ csFontNameTag.Delete(0, 1);
+ fFontSize = FX_atof((CFX_ByteString)syntax.GetWord());
+ }
+ csFontNameTag = PDF_NameDecode(csFontNameTag);
+}
+FX_BOOL CPDF_DefaultAppearance::HasColor(FX_BOOL bStrokingOperation) {
+ if (m_csDA.IsEmpty()) {
+ return FALSE;
+ }
+ CPDF_SimpleParser syntax(m_csDA);
+ if (syntax.FindTagParam(bStrokingOperation ? "G" : "g", 1)) {
+ return TRUE;
+ }
+ syntax.SetPos(0);
+ if (syntax.FindTagParam(bStrokingOperation ? "RG" : "rg", 3)) {
+ return TRUE;
+ }
+ syntax.SetPos(0);
+ return syntax.FindTagParam(bStrokingOperation ? "K" : "k", 4);
+}
+CFX_ByteString CPDF_DefaultAppearance::GetColorString(
+ FX_BOOL bStrokingOperation) {
+ CFX_ByteString csColor;
+ if (m_csDA.IsEmpty()) {
+ return csColor;
+ }
+ CPDF_SimpleParser syntax(m_csDA);
+ if (syntax.FindTagParam(bStrokingOperation ? "G" : "g", 1)) {
+ csColor += (CFX_ByteString)syntax.GetWord();
+ csColor += " ";
+ csColor += (CFX_ByteString)syntax.GetWord();
return csColor;
+ }
+ syntax.SetPos(0);
+ if (syntax.FindTagParam(bStrokingOperation ? "RG" : "rg", 3)) {
+ csColor += (CFX_ByteString)syntax.GetWord();
+ csColor += " ";
+ csColor += (CFX_ByteString)syntax.GetWord();
+ csColor += " ";
+ csColor += (CFX_ByteString)syntax.GetWord();
+ csColor += " ";
+ csColor += (CFX_ByteString)syntax.GetWord();
+ return csColor;
+ }
+ syntax.SetPos(0);
+ if (syntax.FindTagParam(bStrokingOperation ? "K" : "k", 4)) {
+ csColor += (CFX_ByteString)syntax.GetWord();
+ csColor += " ";
+ csColor += (CFX_ByteString)syntax.GetWord();
+ csColor += " ";
+ csColor += (CFX_ByteString)syntax.GetWord();
+ csColor += " ";
+ csColor += (CFX_ByteString)syntax.GetWord();
+ csColor += " ";
+ csColor += (CFX_ByteString)syntax.GetWord();
+ }
+ return csColor;
+}
+void CPDF_DefaultAppearance::GetColor(int& iColorType,
+ FX_FLOAT fc[4],
+ FX_BOOL bStrokingOperation) {
+ iColorType = COLORTYPE_TRANSPARENT;
+ for (int c = 0; c < 4; c++) {
+ fc[c] = 0;
+ }
+ if (m_csDA.IsEmpty()) {
+ return;
+ }
+ CPDF_SimpleParser syntax(m_csDA);
+ if (syntax.FindTagParam(bStrokingOperation ? "G" : "g", 1)) {
+ iColorType = COLORTYPE_GRAY;
+ fc[0] = FX_atof((CFX_ByteString)syntax.GetWord());
+ return;
+ }
+ syntax.SetPos(0);
+ if (syntax.FindTagParam(bStrokingOperation ? "RG" : "rg", 3)) {
+ iColorType = COLORTYPE_RGB;
+ fc[0] = FX_atof((CFX_ByteString)syntax.GetWord());
+ fc[1] = FX_atof((CFX_ByteString)syntax.GetWord());
+ fc[2] = FX_atof((CFX_ByteString)syntax.GetWord());
+ return;
+ }
+ syntax.SetPos(0);
+ if (syntax.FindTagParam(bStrokingOperation ? "K" : "k", 4)) {
+ iColorType = COLORTYPE_CMYK;
+ fc[0] = FX_atof((CFX_ByteString)syntax.GetWord());
+ fc[1] = FX_atof((CFX_ByteString)syntax.GetWord());
+ fc[2] = FX_atof((CFX_ByteString)syntax.GetWord());
+ fc[3] = FX_atof((CFX_ByteString)syntax.GetWord());
+ }
+}
+void CPDF_DefaultAppearance::GetColor(FX_ARGB& color,
+ int& iColorType,
+ FX_BOOL bStrokingOperation) {
+ color = 0;
+ iColorType = COLORTYPE_TRANSPARENT;
+ if (m_csDA.IsEmpty()) {
+ return;
+ }
+ CPDF_SimpleParser syntax(m_csDA);
+ if (syntax.FindTagParam(bStrokingOperation ? "G" : "g", 1)) {
+ iColorType = COLORTYPE_GRAY;
+ FX_FLOAT g = FX_atof((CFX_ByteString)syntax.GetWord()) * 255 + 0.5f;
+ color = ArgbEncode(255, (int)g, (int)g, (int)g);
+ return;
+ }
+ syntax.SetPos(0);
+ if (syntax.FindTagParam(bStrokingOperation ? "RG" : "rg", 3)) {
+ iColorType = COLORTYPE_RGB;
+ FX_FLOAT r = FX_atof((CFX_ByteString)syntax.GetWord()) * 255 + 0.5f;
+ FX_FLOAT g = FX_atof((CFX_ByteString)syntax.GetWord()) * 255 + 0.5f;
+ FX_FLOAT b = FX_atof((CFX_ByteString)syntax.GetWord()) * 255 + 0.5f;
+ color = ArgbEncode(255, (int)r, (int)g, (int)b);
+ return;
+ }
+ syntax.SetPos(0);
+ if (syntax.FindTagParam(bStrokingOperation ? "K" : "k", 4)) {
+ iColorType = COLORTYPE_CMYK;
+ FX_FLOAT c = FX_atof((CFX_ByteString)syntax.GetWord());
+ FX_FLOAT m = FX_atof((CFX_ByteString)syntax.GetWord());
+ FX_FLOAT y = FX_atof((CFX_ByteString)syntax.GetWord());
+ FX_FLOAT k = FX_atof((CFX_ByteString)syntax.GetWord());
+ FX_FLOAT r = 1.0f - FX_MIN(1.0f, c + k);
+ FX_FLOAT g = 1.0f - FX_MIN(1.0f, m + k);
+ FX_FLOAT b = 1.0f - FX_MIN(1.0f, y + k);
+ color = ArgbEncode(255, (int)(r * 255 + 0.5f), (int)(g * 255 + 0.5f),
+ (int)(b * 255 + 0.5f));
+ }
+}
+FX_BOOL CPDF_DefaultAppearance::HasTextMatrix() {
+ if (m_csDA.IsEmpty()) {
+ return FALSE;
+ }
+ CPDF_SimpleParser syntax(m_csDA);
+ return syntax.FindTagParam("Tm", 6);
}
-void CPDF_DefaultAppearance::GetColor(int& iColorType, FX_FLOAT fc[4], FX_BOOL bStrokingOperation)
-{
- iColorType = COLORTYPE_TRANSPARENT;
- for (int c = 0; c < 4; c ++) {
- fc[c] = 0;
- }
- if (m_csDA.IsEmpty()) {
- return;
- }
- CPDF_SimpleParser syntax(m_csDA);
- if (syntax.FindTagParam(bStrokingOperation ? "G" : "g", 1)) {
- iColorType = COLORTYPE_GRAY;
- fc[0] = FX_atof((CFX_ByteString)syntax.GetWord());
- return;
- }
- syntax.SetPos(0);
- if (syntax.FindTagParam(bStrokingOperation ? "RG" : "rg", 3)) {
- iColorType = COLORTYPE_RGB;
- fc[0] = FX_atof((CFX_ByteString)syntax.GetWord());
- fc[1] = FX_atof((CFX_ByteString)syntax.GetWord());
- fc[2] = FX_atof((CFX_ByteString)syntax.GetWord());
- return;
- }
- syntax.SetPos(0);
- if (syntax.FindTagParam(bStrokingOperation ? "K" : "k", 4)) {
- iColorType = COLORTYPE_CMYK;
- fc[0] = FX_atof((CFX_ByteString)syntax.GetWord());
- fc[1] = FX_atof((CFX_ByteString)syntax.GetWord());
- fc[2] = FX_atof((CFX_ByteString)syntax.GetWord());
- fc[3] = FX_atof((CFX_ByteString)syntax.GetWord());
- }
-}
-void CPDF_DefaultAppearance::GetColor(FX_ARGB& color, int& iColorType, FX_BOOL bStrokingOperation)
-{
- color = 0;
- iColorType = COLORTYPE_TRANSPARENT;
- if (m_csDA.IsEmpty()) {
- return;
- }
- CPDF_SimpleParser syntax(m_csDA);
- if (syntax.FindTagParam(bStrokingOperation ? "G" : "g", 1)) {
- iColorType = COLORTYPE_GRAY;
- FX_FLOAT g = FX_atof((CFX_ByteString)syntax.GetWord()) * 255 + 0.5f;
- color = ArgbEncode(255, (int)g, (int)g, (int)g);
- return;
- }
- syntax.SetPos(0);
- if (syntax.FindTagParam(bStrokingOperation ? "RG" : "rg", 3)) {
- iColorType = COLORTYPE_RGB;
- FX_FLOAT r = FX_atof((CFX_ByteString)syntax.GetWord()) * 255 + 0.5f;
- FX_FLOAT g = FX_atof((CFX_ByteString)syntax.GetWord()) * 255 + 0.5f;
- FX_FLOAT b = FX_atof((CFX_ByteString)syntax.GetWord()) * 255 + 0.5f;
- color = ArgbEncode(255, (int)r, (int)g, (int)b);
- return;
- }
- syntax.SetPos(0);
- if (syntax.FindTagParam(bStrokingOperation ? "K" : "k", 4)) {
- iColorType = COLORTYPE_CMYK;
- FX_FLOAT c = FX_atof((CFX_ByteString)syntax.GetWord());
- FX_FLOAT m = FX_atof((CFX_ByteString)syntax.GetWord());
- FX_FLOAT y = FX_atof((CFX_ByteString)syntax.GetWord());
- FX_FLOAT k = FX_atof((CFX_ByteString)syntax.GetWord());
- FX_FLOAT r = 1.0f - FX_MIN(1.0f, c + k);
- FX_FLOAT g = 1.0f - FX_MIN(1.0f, m + k);
- FX_FLOAT b = 1.0f - FX_MIN(1.0f, y + k);
- color = ArgbEncode(255, (int)(r * 255 + 0.5f), (int)(g * 255 + 0.5f), (int)(b * 255 + 0.5f));
- }
-}
-FX_BOOL CPDF_DefaultAppearance::HasTextMatrix()
-{
- if (m_csDA.IsEmpty()) {
- return FALSE;
- }
- CPDF_SimpleParser syntax(m_csDA);
- return syntax.FindTagParam("Tm", 6);
-}
-CFX_ByteString CPDF_DefaultAppearance::GetTextMatrixString()
-{
- CFX_ByteString csTM;
- if (m_csDA.IsEmpty()) {
- return csTM;
- }
- CPDF_SimpleParser syntax(m_csDA);
- if (syntax.FindTagParam("Tm", 6)) {
- for (int i = 0; i < 6; i ++) {
- csTM += (CFX_ByteString)syntax.GetWord();
- csTM += " ";
- }
- csTM += (CFX_ByteString)syntax.GetWord();
- }
+CFX_ByteString CPDF_DefaultAppearance::GetTextMatrixString() {
+ CFX_ByteString csTM;
+ if (m_csDA.IsEmpty()) {
return csTM;
-}
-CFX_AffineMatrix CPDF_DefaultAppearance::GetTextMatrix()
-{
- CFX_AffineMatrix tm;
- if (m_csDA.IsEmpty()) {
- return tm;
- }
- CPDF_SimpleParser syntax(m_csDA);
- if (syntax.FindTagParam("Tm", 6)) {
- FX_FLOAT f[6];
- for (int i = 0; i < 6; i ++) {
- f[i] = FX_atof((CFX_ByteString)syntax.GetWord());
- }
- tm.Set(f[0], f[1], f[2], f[3], f[4], f[5]);
- }
+ }
+ CPDF_SimpleParser syntax(m_csDA);
+ if (syntax.FindTagParam("Tm", 6)) {
+ for (int i = 0; i < 6; i++) {
+ csTM += (CFX_ByteString)syntax.GetWord();
+ csTM += " ";
+ }
+ csTM += (CFX_ByteString)syntax.GetWord();
+ }
+ return csTM;
+}
+CFX_AffineMatrix CPDF_DefaultAppearance::GetTextMatrix() {
+ CFX_AffineMatrix tm;
+ if (m_csDA.IsEmpty()) {
return tm;
-}
-void InitInterFormDict(CPDF_Dictionary*& pFormDict, CPDF_Document* pDocument)
-{
- if (pDocument == NULL) {
- return;
- }
+ }
+ CPDF_SimpleParser syntax(m_csDA);
+ if (syntax.FindTagParam("Tm", 6)) {
+ FX_FLOAT f[6];
+ for (int i = 0; i < 6; i++) {
+ f[i] = FX_atof((CFX_ByteString)syntax.GetWord());
+ }
+ tm.Set(f[0], f[1], f[2], f[3], f[4], f[5]);
+ }
+ return tm;
+}
+void InitInterFormDict(CPDF_Dictionary*& pFormDict, CPDF_Document* pDocument) {
+ if (pDocument == NULL) {
+ return;
+ }
+ if (pFormDict == NULL) {
+ pFormDict = CPDF_Dictionary::Create();
if (pFormDict == NULL) {
- pFormDict = CPDF_Dictionary::Create();
- if (pFormDict == NULL) {
- return;
- }
- FX_DWORD dwObjNum = pDocument->AddIndirectObject(pFormDict);
- CPDF_Dictionary* pRoot = pDocument->GetRoot();
- pRoot->SetAtReference("AcroForm", pDocument, dwObjNum);
- }
- CFX_ByteString csDA;
- if (!pFormDict->KeyExist("DR")) {
- CPDF_Font* pFont = NULL;
- CFX_ByteString csBaseName, csDefault;
- uint8_t charSet = CPDF_InterForm::GetNativeCharSet();
- pFont = CPDF_InterForm::AddStandardFont(pDocument, "Helvetica");
- if (pFont != NULL) {
- AddInterFormFont(pFormDict, pDocument, pFont, csBaseName);
- csDefault = csBaseName;
- }
- if (charSet != 0) {
- CFX_ByteString csFontName = CPDF_InterForm::GetNativeFont(charSet, NULL);
- if (pFont == NULL || csFontName != "Helvetica") {
- pFont = CPDF_InterForm::AddNativeFont(pDocument);
- if (pFont != NULL) {
- csBaseName = "";
- AddInterFormFont(pFormDict, pDocument, pFont, csBaseName);
- csDefault = csBaseName;
- }
- }
- }
- if (pFont != NULL) {
- csDA = "/" + PDF_NameEncode(csDefault) + " 0 Tf";
- }
- }
- if (!csDA.IsEmpty()) {
- csDA += " ";
- }
- csDA += "0 g";
- if (!pFormDict->KeyExist("DA")) {
- pFormDict->SetAtString("DA", csDA);
- }
-}
-FX_DWORD CountInterFormFonts(CPDF_Dictionary* pFormDict)
-{
- if (pFormDict == NULL) {
- return 0;
- }
- CPDF_Dictionary* pDR = pFormDict->GetDict("DR");
- if (pDR == NULL) {
- return 0;
- }
- CPDF_Dictionary* pFonts = pDR->GetDict("Font");
- if (pFonts == NULL) {
- return 0;
- }
- FX_DWORD dwCount = 0;
- FX_POSITION pos = pFonts->GetStartPos();
- while (pos) {
- CPDF_Object* pObj = NULL;
- CFX_ByteString csKey;
- pObj = pFonts->GetNextElement(pos, csKey);
- if (pObj == NULL) {
- continue;
- }
- CPDF_Object* pDirect = pObj->GetDirect();
- if (pDirect != NULL && pDirect->GetType() == PDFOBJ_DICTIONARY) {
- if (((CPDF_Dictionary*)pDirect)->GetString("Type") == "Font") {
- dwCount ++;
- }
- }
- }
- return dwCount;
-}
-CPDF_Font* GetInterFormFont(CPDF_Dictionary* pFormDict, CPDF_Document* pDocument, FX_DWORD index, CFX_ByteString& csNameTag)
-{
- if (pFormDict == NULL) {
- return NULL;
+ return;
+ }
+ FX_DWORD dwObjNum = pDocument->AddIndirectObject(pFormDict);
+ CPDF_Dictionary* pRoot = pDocument->GetRoot();
+ pRoot->SetAtReference("AcroForm", pDocument, dwObjNum);
+ }
+ CFX_ByteString csDA;
+ if (!pFormDict->KeyExist("DR")) {
+ CPDF_Font* pFont = NULL;
+ CFX_ByteString csBaseName, csDefault;
+ uint8_t charSet = CPDF_InterForm::GetNativeCharSet();
+ pFont = CPDF_InterForm::AddStandardFont(pDocument, "Helvetica");
+ if (pFont != NULL) {
+ AddInterFormFont(pFormDict, pDocument, pFont, csBaseName);
+ csDefault = csBaseName;
}
- CPDF_Dictionary* pDR = pFormDict->GetDict("DR");
- if (pDR == NULL) {
- return NULL;
- }
- CPDF_Dictionary* pFonts = pDR->GetDict("Font");
- if (pFonts == NULL) {
- return NULL;
- }
- FX_DWORD dwCount = 0;
- FX_POSITION pos = pFonts->GetStartPos();
- while (pos) {
- CPDF_Object* pObj = NULL;
- CFX_ByteString csKey;
- pObj = pFonts->GetNextElement(pos, csKey);
- if (pObj == NULL) {
- continue;
- }
- CPDF_Object* pDirect = pObj->GetDirect();
- if (pDirect == NULL || pDirect->GetType() != PDFOBJ_DICTIONARY) {
- continue;
- }
- CPDF_Dictionary* pElement = (CPDF_Dictionary*)pDirect;
- if (pElement->GetString("Type") != "Font") {
- continue;
- }
- if (dwCount == index) {
- csNameTag = csKey;
- return pDocument->LoadFont(pElement);
+ if (charSet != 0) {
+ CFX_ByteString csFontName = CPDF_InterForm::GetNativeFont(charSet, NULL);
+ if (pFont == NULL || csFontName != "Helvetica") {
+ pFont = CPDF_InterForm::AddNativeFont(pDocument);
+ if (pFont != NULL) {
+ csBaseName = "";
+ AddInterFormFont(pFormDict, pDocument, pFont, csBaseName);
+ csDefault = csBaseName;
}
- dwCount ++;
+ }
}
+ if (pFont != NULL) {
+ csDA = "/" + PDF_NameEncode(csDefault) + " 0 Tf";
+ }
+ }
+ if (!csDA.IsEmpty()) {
+ csDA += " ";
+ }
+ csDA += "0 g";
+ if (!pFormDict->KeyExist("DA")) {
+ pFormDict->SetAtString("DA", csDA);
+ }
+}
+FX_DWORD CountInterFormFonts(CPDF_Dictionary* pFormDict) {
+ if (pFormDict == NULL) {
+ return 0;
+ }
+ CPDF_Dictionary* pDR = pFormDict->GetDict("DR");
+ if (pDR == NULL) {
+ return 0;
+ }
+ CPDF_Dictionary* pFonts = pDR->GetDict("Font");
+ if (pFonts == NULL) {
+ return 0;
+ }
+ FX_DWORD dwCount = 0;
+ FX_POSITION pos = pFonts->GetStartPos();
+ while (pos) {
+ CPDF_Object* pObj = NULL;
+ CFX_ByteString csKey;
+ pObj = pFonts->GetNextElement(pos, csKey);
+ if (pObj == NULL) {
+ continue;
+ }
+ CPDF_Object* pDirect = pObj->GetDirect();
+ if (pDirect != NULL && pDirect->GetType() == PDFOBJ_DICTIONARY) {
+ if (((CPDF_Dictionary*)pDirect)->GetString("Type") == "Font") {
+ dwCount++;
+ }
+ }
+ }
+ return dwCount;
+}
+CPDF_Font* GetInterFormFont(CPDF_Dictionary* pFormDict,
+ CPDF_Document* pDocument,
+ FX_DWORD index,
+ CFX_ByteString& csNameTag) {
+ if (pFormDict == NULL) {
return NULL;
-}
-CPDF_Font* GetInterFormFont(CPDF_Dictionary* pFormDict, CPDF_Document* pDocument, CFX_ByteString csNameTag)
-{
- CFX_ByteString csAlias = PDF_NameDecode(csNameTag);
- if (pFormDict == NULL || csAlias.IsEmpty()) {
- return NULL;
- }
- CPDF_Dictionary* pDR = pFormDict->GetDict("DR");
- if (pDR == NULL) {
- return NULL;
- }
- CPDF_Dictionary* pFonts = pDR->GetDict("Font");
- if (pFonts == NULL) {
- return NULL;
- }
- CPDF_Dictionary* pElement = pFonts->GetDict(csAlias);
- if (pElement == NULL) {
- return NULL;
- }
- if (pElement->GetString("Type") == "Font") {
- return pDocument->LoadFont(pElement);
- }
+ }
+ CPDF_Dictionary* pDR = pFormDict->GetDict("DR");
+ if (pDR == NULL) {
return NULL;
-}
-CPDF_Font* GetInterFormFont(CPDF_Dictionary* pFormDict, CPDF_Document* pDocument, CFX_ByteString csFontName, CFX_ByteString& csNameTag)
-{
- if (pFormDict == NULL || csFontName.IsEmpty()) {
- return NULL;
- }
- CPDF_Dictionary* pDR = pFormDict->GetDict("DR");
- if (pDR == NULL) {
- return NULL;
- }
- CPDF_Dictionary* pFonts = pDR->GetDict("Font");
- if (pFonts == NULL) {
- return NULL;
- }
- FX_POSITION pos = pFonts->GetStartPos();
- while (pos) {
- CPDF_Object* pObj = NULL;
- CFX_ByteString csKey;
- pObj = pFonts->GetNextElement(pos, csKey);
- if (pObj == NULL) {
- continue;
- }
- CPDF_Object* pDirect = pObj->GetDirect();
- if (pDirect == NULL || pDirect->GetType() != PDFOBJ_DICTIONARY) {
- continue;
- }
- CPDF_Dictionary* pElement = (CPDF_Dictionary*)pDirect;
- if (pElement->GetString("Type") != "Font") {
- continue;
- }
- CPDF_Font* pFind = pDocument->LoadFont(pElement);
- if (pFind == NULL) {
- continue;
- }
- CFX_ByteString csBaseFont;
- csBaseFont = pFind->GetBaseFont();
- csBaseFont.Remove(' ');
- if (csBaseFont == csFontName) {
- csNameTag = csKey;
- return pFind;
- }
- }
+ }
+ CPDF_Dictionary* pFonts = pDR->GetDict("Font");
+ if (pFonts == NULL) {
return NULL;
-}
-CPDF_Font* GetNativeInterFormFont(CPDF_Dictionary* pFormDict, CPDF_Document* pDocument, uint8_t charSet, CFX_ByteString& csNameTag)
-{
- if (pFormDict == NULL) {
- return NULL;
- }
- CPDF_Dictionary* pDR = pFormDict->GetDict("DR");
- if (pDR == NULL) {
- return NULL;
- }
- CPDF_Dictionary* pFonts = pDR->GetDict("Font");
- if (pFonts == NULL) {
- return NULL;
- }
- FX_POSITION pos = pFonts->GetStartPos();
- while (pos) {
- CPDF_Object* pObj = NULL;
- CFX_ByteString csKey;
- pObj = pFonts->GetNextElement(pos, csKey);
- if (pObj == NULL) {
- continue;
- }
- CPDF_Object* pDirect = pObj->GetDirect();
- if (pDirect == NULL || pDirect->GetType() != PDFOBJ_DICTIONARY) {
- continue;
- }
- CPDF_Dictionary* pElement = (CPDF_Dictionary*)pDirect;
- if (pElement->GetString("Type") != "Font") {
- continue;
- }
- CPDF_Font* pFind = pDocument->LoadFont(pElement);
- if (pFind == NULL) {
- continue;
- }
- CFX_SubstFont* pSubst = (CFX_SubstFont*)pFind->GetSubstFont();
- if (pSubst == NULL) {
- continue;
- }
- if (pSubst->m_Charset == (int)charSet) {
- csNameTag = csKey;
- return pFind;
- }
- }
+ }
+ FX_DWORD dwCount = 0;
+ FX_POSITION pos = pFonts->GetStartPos();
+ while (pos) {
+ CPDF_Object* pObj = NULL;
+ CFX_ByteString csKey;
+ pObj = pFonts->GetNextElement(pos, csKey);
+ if (pObj == NULL) {
+ continue;
+ }
+ CPDF_Object* pDirect = pObj->GetDirect();
+ if (pDirect == NULL || pDirect->GetType() != PDFOBJ_DICTIONARY) {
+ continue;
+ }
+ CPDF_Dictionary* pElement = (CPDF_Dictionary*)pDirect;
+ if (pElement->GetString("Type") != "Font") {
+ continue;
+ }
+ if (dwCount == index) {
+ csNameTag = csKey;
+ return pDocument->LoadFont(pElement);
+ }
+ dwCount++;
+ }
+ return NULL;
+}
+CPDF_Font* GetInterFormFont(CPDF_Dictionary* pFormDict,
+ CPDF_Document* pDocument,
+ CFX_ByteString csNameTag) {
+ CFX_ByteString csAlias = PDF_NameDecode(csNameTag);
+ if (pFormDict == NULL || csAlias.IsEmpty()) {
return NULL;
-}
-CPDF_Font* GetNativeInterFormFont(CPDF_Dictionary* pFormDict, CPDF_Document* pDocument, CFX_ByteString& csNameTag)
-{
- csNameTag = "";
- uint8_t charSet = CPDF_InterForm::GetNativeCharSet();
- CFX_SubstFont* pSubst;
- CPDF_Font* pFont = GetDefaultInterFormFont(pFormDict, pDocument);
- if (pFont != NULL) {
- pSubst = (CFX_SubstFont*)pFont->GetSubstFont();
- if (pSubst != NULL && pSubst->m_Charset == (int)charSet) {
- FindInterFormFont(pFormDict, pFont, csNameTag);
- return pFont;
- }
- }
- return GetNativeInterFormFont(pFormDict, pDocument, charSet, csNameTag);
-}
-FX_BOOL FindInterFormFont(CPDF_Dictionary* pFormDict, const CPDF_Font* pFont, CFX_ByteString& csNameTag)
-{
- if (pFormDict == NULL || pFont == NULL) {
- return FALSE;
- }
- CPDF_Dictionary* pDR = pFormDict->GetDict("DR");
- if (pDR == NULL) {
- return FALSE;
- }
- CPDF_Dictionary* pFonts = pDR->GetDict("Font");
- if (pFonts == NULL) {
- return FALSE;
- }
- FX_POSITION pos = pFonts->GetStartPos();
- while (pos) {
- CPDF_Object* pObj = NULL;
- CFX_ByteString csKey;
- pObj = pFonts->GetNextElement(pos, csKey);
- if (pObj == NULL) {
- continue;
- }
- CPDF_Object* pDirect = pObj->GetDirect();
- if (pDirect == NULL || pDirect->GetType() != PDFOBJ_DICTIONARY) {
- continue;
- }
- CPDF_Dictionary* pElement = (CPDF_Dictionary*)pDirect;
- if (pElement->GetString("Type") != "Font") {
- continue;
- }
- if (pFont->GetFontDict() == pElement) {
- csNameTag = csKey;
- return TRUE;
- }
- }
+ }
+ CPDF_Dictionary* pDR = pFormDict->GetDict("DR");
+ if (pDR == NULL) {
+ return NULL;
+ }
+ CPDF_Dictionary* pFonts = pDR->GetDict("Font");
+ if (pFonts == NULL) {
+ return NULL;
+ }
+ CPDF_Dictionary* pElement = pFonts->GetDict(csAlias);
+ if (pElement == NULL) {
+ return NULL;
+ }
+ if (pElement->GetString("Type") == "Font") {
+ return pDocument->LoadFont(pElement);
+ }
+ return NULL;
+}
+CPDF_Font* GetInterFormFont(CPDF_Dictionary* pFormDict,
+ CPDF_Document* pDocument,
+ CFX_ByteString csFontName,
+ CFX_ByteString& csNameTag) {
+ if (pFormDict == NULL || csFontName.IsEmpty()) {
+ return NULL;
+ }
+ CPDF_Dictionary* pDR = pFormDict->GetDict("DR");
+ if (pDR == NULL) {
+ return NULL;
+ }
+ CPDF_Dictionary* pFonts = pDR->GetDict("Font");
+ if (pFonts == NULL) {
+ return NULL;
+ }
+ FX_POSITION pos = pFonts->GetStartPos();
+ while (pos) {
+ CPDF_Object* pObj = NULL;
+ CFX_ByteString csKey;
+ pObj = pFonts->GetNextElement(pos, csKey);
+ if (pObj == NULL) {
+ continue;
+ }
+ CPDF_Object* pDirect = pObj->GetDirect();
+ if (pDirect == NULL || pDirect->GetType() != PDFOBJ_DICTIONARY) {
+ continue;
+ }
+ CPDF_Dictionary* pElement = (CPDF_Dictionary*)pDirect;
+ if (pElement->GetString("Type") != "Font") {
+ continue;
+ }
+ CPDF_Font* pFind = pDocument->LoadFont(pElement);
+ if (pFind == NULL) {
+ continue;
+ }
+ CFX_ByteString csBaseFont;
+ csBaseFont = pFind->GetBaseFont();
+ csBaseFont.Remove(' ');
+ if (csBaseFont == csFontName) {
+ csNameTag = csKey;
+ return pFind;
+ }
+ }
+ return NULL;
+}
+CPDF_Font* GetNativeInterFormFont(CPDF_Dictionary* pFormDict,
+ CPDF_Document* pDocument,
+ uint8_t charSet,
+ CFX_ByteString& csNameTag) {
+ if (pFormDict == NULL) {
+ return NULL;
+ }
+ CPDF_Dictionary* pDR = pFormDict->GetDict("DR");
+ if (pDR == NULL) {
+ return NULL;
+ }
+ CPDF_Dictionary* pFonts = pDR->GetDict("Font");
+ if (pFonts == NULL) {
+ return NULL;
+ }
+ FX_POSITION pos = pFonts->GetStartPos();
+ while (pos) {
+ CPDF_Object* pObj = NULL;
+ CFX_ByteString csKey;
+ pObj = pFonts->GetNextElement(pos, csKey);
+ if (pObj == NULL) {
+ continue;
+ }
+ CPDF_Object* pDirect = pObj->GetDirect();
+ if (pDirect == NULL || pDirect->GetType() != PDFOBJ_DICTIONARY) {
+ continue;
+ }
+ CPDF_Dictionary* pElement = (CPDF_Dictionary*)pDirect;
+ if (pElement->GetString("Type") != "Font") {
+ continue;
+ }
+ CPDF_Font* pFind = pDocument->LoadFont(pElement);
+ if (pFind == NULL) {
+ continue;
+ }
+ CFX_SubstFont* pSubst = (CFX_SubstFont*)pFind->GetSubstFont();
+ if (pSubst == NULL) {
+ continue;
+ }
+ if (pSubst->m_Charset == (int)charSet) {
+ csNameTag = csKey;
+ return pFind;
+ }
+ }
+ return NULL;
+}
+CPDF_Font* GetNativeInterFormFont(CPDF_Dictionary* pFormDict,
+ CPDF_Document* pDocument,
+ CFX_ByteString& csNameTag) {
+ csNameTag = "";
+ uint8_t charSet = CPDF_InterForm::GetNativeCharSet();
+ CFX_SubstFont* pSubst;
+ CPDF_Font* pFont = GetDefaultInterFormFont(pFormDict, pDocument);
+ if (pFont != NULL) {
+ pSubst = (CFX_SubstFont*)pFont->GetSubstFont();
+ if (pSubst != NULL && pSubst->m_Charset == (int)charSet) {
+ FindInterFormFont(pFormDict, pFont, csNameTag);
+ return pFont;
+ }
+ }
+ return GetNativeInterFormFont(pFormDict, pDocument, charSet, csNameTag);
+}
+FX_BOOL FindInterFormFont(CPDF_Dictionary* pFormDict,
+ const CPDF_Font* pFont,
+ CFX_ByteString& csNameTag) {
+ if (pFormDict == NULL || pFont == NULL) {
return FALSE;
-}
-FX_BOOL FindInterFormFont(CPDF_Dictionary* pFormDict, CPDF_Document* pDocument, CFX_ByteString csFontName, CPDF_Font*& pFont, CFX_ByteString& csNameTag)
-{
- if (pFormDict == NULL) {
- return FALSE;
- }
- CPDF_Dictionary* pDR = pFormDict->GetDict("DR");
- if (pDR == NULL) {
- return FALSE;
- }
- CPDF_Dictionary* pFonts = pDR->GetDict("Font");
- if (pFonts == NULL) {
- return FALSE;
- }
- if (csFontName.GetLength() > 0) {
- csFontName.Remove(' ');
- }
- FX_POSITION pos = pFonts->GetStartPos();
- while (pos) {
- CPDF_Object* pObj = NULL;
- CFX_ByteString csKey, csTmp;
- pObj = pFonts->GetNextElement(pos, csKey);
- if (pObj == NULL) {
- continue;
- }
- CPDF_Object* pDirect = pObj->GetDirect();
- if (pDirect == NULL || pDirect->GetType() != PDFOBJ_DICTIONARY) {
- continue;
- }
- CPDF_Dictionary* pElement = (CPDF_Dictionary*)pDirect;
- if (pElement->GetString("Type") != "Font") {
- continue;
- }
- pFont = pDocument->LoadFont(pElement);
- if (pFont == NULL) {
- continue;
- }
- CFX_ByteString csBaseFont;
- csBaseFont = pFont->GetBaseFont();
- csBaseFont.Remove(' ');
- if (csBaseFont == csFontName) {
- csNameTag = csKey;
- return TRUE;
- }
- }
+ }
+ CPDF_Dictionary* pDR = pFormDict->GetDict("DR");
+ if (pDR == NULL) {
return FALSE;
-}
-void AddInterFormFont(CPDF_Dictionary*& pFormDict, CPDF_Document* pDocument, const CPDF_Font* pFont, CFX_ByteString& csNameTag)
-{
+ }
+ CPDF_Dictionary* pFonts = pDR->GetDict("Font");
+ if (pFonts == NULL) {
+ return FALSE;
+ }
+ FX_POSITION pos = pFonts->GetStartPos();
+ while (pos) {
+ CPDF_Object* pObj = NULL;
+ CFX_ByteString csKey;
+ pObj = pFonts->GetNextElement(pos, csKey);
+ if (pObj == NULL) {
+ continue;
+ }
+ CPDF_Object* pDirect = pObj->GetDirect();
+ if (pDirect == NULL || pDirect->GetType() != PDFOBJ_DICTIONARY) {
+ continue;
+ }
+ CPDF_Dictionary* pElement = (CPDF_Dictionary*)pDirect;
+ if (pElement->GetString("Type") != "Font") {
+ continue;
+ }
+ if (pFont->GetFontDict() == pElement) {
+ csNameTag = csKey;
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+FX_BOOL FindInterFormFont(CPDF_Dictionary* pFormDict,
+ CPDF_Document* pDocument,
+ CFX_ByteString csFontName,
+ CPDF_Font*& pFont,
+ CFX_ByteString& csNameTag) {
+ if (pFormDict == NULL) {
+ return FALSE;
+ }
+ CPDF_Dictionary* pDR = pFormDict->GetDict("DR");
+ if (pDR == NULL) {
+ return FALSE;
+ }
+ CPDF_Dictionary* pFonts = pDR->GetDict("Font");
+ if (pFonts == NULL) {
+ return FALSE;
+ }
+ if (csFontName.GetLength() > 0) {
+ csFontName.Remove(' ');
+ }
+ FX_POSITION pos = pFonts->GetStartPos();
+ while (pos) {
+ CPDF_Object* pObj = NULL;
+ CFX_ByteString csKey, csTmp;
+ pObj = pFonts->GetNextElement(pos, csKey);
+ if (pObj == NULL) {
+ continue;
+ }
+ CPDF_Object* pDirect = pObj->GetDirect();
+ if (pDirect == NULL || pDirect->GetType() != PDFOBJ_DICTIONARY) {
+ continue;
+ }
+ CPDF_Dictionary* pElement = (CPDF_Dictionary*)pDirect;
+ if (pElement->GetString("Type") != "Font") {
+ continue;
+ }
+ pFont = pDocument->LoadFont(pElement);
if (pFont == NULL) {
- return;
- }
- if (pFormDict == NULL) {
- InitInterFormDict(pFormDict, pDocument);
- }
- CFX_ByteString csTag;
- if (FindInterFormFont(pFormDict, pFont, csTag)) {
- csNameTag = csTag;
- return;
- }
- if (pFormDict == NULL) {
- InitInterFormDict(pFormDict, pDocument);
- }
- CPDF_Dictionary* pDR = pFormDict->GetDict("DR");
+ continue;
+ }
+ CFX_ByteString csBaseFont;
+ csBaseFont = pFont->GetBaseFont();
+ csBaseFont.Remove(' ');
+ if (csBaseFont == csFontName) {
+ csNameTag = csKey;
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+void AddInterFormFont(CPDF_Dictionary*& pFormDict,
+ CPDF_Document* pDocument,
+ const CPDF_Font* pFont,
+ CFX_ByteString& csNameTag) {
+ if (pFont == NULL) {
+ return;
+ }
+ if (pFormDict == NULL) {
+ InitInterFormDict(pFormDict, pDocument);
+ }
+ CFX_ByteString csTag;
+ if (FindInterFormFont(pFormDict, pFont, csTag)) {
+ csNameTag = csTag;
+ return;
+ }
+ if (pFormDict == NULL) {
+ InitInterFormDict(pFormDict, pDocument);
+ }
+ CPDF_Dictionary* pDR = pFormDict->GetDict("DR");
+ if (pDR == NULL) {
+ pDR = CPDF_Dictionary::Create();
if (pDR == NULL) {
- pDR = CPDF_Dictionary::Create();
- if (pDR == NULL) {
- return;
- }
- pFormDict->SetAt("DR", pDR);
- }
- CPDF_Dictionary* pFonts = pDR->GetDict("Font");
- if (pFonts == NULL) {
- pFonts = CPDF_Dictionary::Create();
- pDR->SetAt("Font", pFonts);
- }
- if (csNameTag.IsEmpty()) {
- csNameTag = pFont->GetBaseFont();
- }
- csNameTag.Remove(' ');
- csNameTag = CPDF_InterForm::GenerateNewResourceName(pDR, "Font", 4, csNameTag);
- pFonts->SetAtReference(csNameTag, pDocument, pFont->GetFontDict());
-}
-CPDF_Font* AddNativeInterFormFont(CPDF_Dictionary*& pFormDict, CPDF_Document* pDocument, uint8_t charSet, CFX_ByteString& csNameTag)
-{
- if (pFormDict == NULL) {
- InitInterFormDict(pFormDict, pDocument);
- }
- CFX_ByteString csTemp;
- CPDF_Font* pFont = GetNativeInterFormFont(pFormDict, pDocument, charSet, csTemp);
- if (pFont != NULL) {
- csNameTag = csTemp;
- return pFont;
- }
- CFX_ByteString csFontName = CPDF_InterForm::GetNativeFont(charSet);
- if (!csFontName.IsEmpty()) {
- if (FindInterFormFont(pFormDict, pDocument, csFontName, pFont, csNameTag)) {
- return pFont;
- }
- }
- pFont = CPDF_InterForm::AddNativeFont(charSet, pDocument);
- if (pFont != NULL) {
- AddInterFormFont(pFormDict, pDocument, pFont, csNameTag);
- }
+ return;
+ }
+ pFormDict->SetAt("DR", pDR);
+ }
+ CPDF_Dictionary* pFonts = pDR->GetDict("Font");
+ if (pFonts == NULL) {
+ pFonts = CPDF_Dictionary::Create();
+ pDR->SetAt("Font", pFonts);
+ }
+ if (csNameTag.IsEmpty()) {
+ csNameTag = pFont->GetBaseFont();
+ }
+ csNameTag.Remove(' ');
+ csNameTag =
+ CPDF_InterForm::GenerateNewResourceName(pDR, "Font", 4, csNameTag);
+ pFonts->SetAtReference(csNameTag, pDocument, pFont->GetFontDict());
+}
+CPDF_Font* AddNativeInterFormFont(CPDF_Dictionary*& pFormDict,
+ CPDF_Document* pDocument,
+ uint8_t charSet,
+ CFX_ByteString& csNameTag) {
+ if (pFormDict == NULL) {
+ InitInterFormDict(pFormDict, pDocument);
+ }
+ CFX_ByteString csTemp;
+ CPDF_Font* pFont =
+ GetNativeInterFormFont(pFormDict, pDocument, charSet, csTemp);
+ if (pFont != NULL) {
+ csNameTag = csTemp;
return pFont;
-}
-CPDF_Font* AddNativeInterFormFont(CPDF_Dictionary*& pFormDict, CPDF_Document* pDocument, CFX_ByteString& csNameTag)
-{
- uint8_t charSet = CPDF_InterForm::GetNativeCharSet();
- return AddNativeInterFormFont(pFormDict, pDocument, charSet, csNameTag);
-}
-void RemoveInterFormFont(CPDF_Dictionary* pFormDict, const CPDF_Font* pFont)
-{
- if (pFormDict == NULL || pFont == NULL) {
- return;
- }
- CFX_ByteString csTag;
- if (!FindInterFormFont(pFormDict, pFont, csTag)) {
- return;
- }
- CPDF_Dictionary* pDR = pFormDict->GetDict("DR");
- CPDF_Dictionary* pFonts = pDR->GetDict("Font");
- pFonts->RemoveAt(csTag);
-}
-void RemoveInterFormFont(CPDF_Dictionary* pFormDict, CFX_ByteString csNameTag)
-{
- if (pFormDict == NULL || csNameTag.IsEmpty()) {
- return;
- }
- CPDF_Dictionary* pDR = pFormDict->GetDict("DR");
- if (pDR == NULL) {
- return;
- }
- CPDF_Dictionary* pFonts = pDR->GetDict("Font");
- if (pFonts == NULL) {
- return;
- }
- pFonts->RemoveAt(csNameTag);
-}
-CPDF_Font* GetDefaultInterFormFont(CPDF_Dictionary* pFormDict, CPDF_Document* pDocument)
-{
- if (pFormDict == NULL) {
- return NULL;
- }
- CPDF_DefaultAppearance cDA = pFormDict->GetString("DA");
- CFX_ByteString csFontNameTag;
- FX_FLOAT fFontSize;
- cDA.GetFont(csFontNameTag, fFontSize);
- return GetInterFormFont(pFormDict, pDocument, csFontNameTag);
-}
-CPDF_IconFit::ScaleMethod CPDF_IconFit::GetScaleMethod()
-{
- if (!m_pDict) {
- return Always;
- }
- CFX_ByteString csSW = m_pDict->GetString("SW", "A");
- if (csSW == "B") {
- return Bigger;
- }
- if (csSW == "S") {
- return Smaller;
- }
- if (csSW == "N") {
- return Never;
- }
+ }
+ CFX_ByteString csFontName = CPDF_InterForm::GetNativeFont(charSet);
+ if (!csFontName.IsEmpty()) {
+ if (FindInterFormFont(pFormDict, pDocument, csFontName, pFont, csNameTag)) {
+ return pFont;
+ }
+ }
+ pFont = CPDF_InterForm::AddNativeFont(charSet, pDocument);
+ if (pFont != NULL) {
+ AddInterFormFont(pFormDict, pDocument, pFont, csNameTag);
+ }
+ return pFont;
+}
+CPDF_Font* AddNativeInterFormFont(CPDF_Dictionary*& pFormDict,
+ CPDF_Document* pDocument,
+ CFX_ByteString& csNameTag) {
+ uint8_t charSet = CPDF_InterForm::GetNativeCharSet();
+ return AddNativeInterFormFont(pFormDict, pDocument, charSet, csNameTag);
+}
+void RemoveInterFormFont(CPDF_Dictionary* pFormDict, const CPDF_Font* pFont) {
+ if (pFormDict == NULL || pFont == NULL) {
+ return;
+ }
+ CFX_ByteString csTag;
+ if (!FindInterFormFont(pFormDict, pFont, csTag)) {
+ return;
+ }
+ CPDF_Dictionary* pDR = pFormDict->GetDict("DR");
+ CPDF_Dictionary* pFonts = pDR->GetDict("Font");
+ pFonts->RemoveAt(csTag);
+}
+void RemoveInterFormFont(CPDF_Dictionary* pFormDict, CFX_ByteString csNameTag) {
+ if (pFormDict == NULL || csNameTag.IsEmpty()) {
+ return;
+ }
+ CPDF_Dictionary* pDR = pFormDict->GetDict("DR");
+ if (pDR == NULL) {
+ return;
+ }
+ CPDF_Dictionary* pFonts = pDR->GetDict("Font");
+ if (pFonts == NULL) {
+ return;
+ }
+ pFonts->RemoveAt(csNameTag);
+}
+CPDF_Font* GetDefaultInterFormFont(CPDF_Dictionary* pFormDict,
+ CPDF_Document* pDocument) {
+ if (pFormDict == NULL) {
+ return NULL;
+ }
+ CPDF_DefaultAppearance cDA = pFormDict->GetString("DA");
+ CFX_ByteString csFontNameTag;
+ FX_FLOAT fFontSize;
+ cDA.GetFont(csFontNameTag, fFontSize);
+ return GetInterFormFont(pFormDict, pDocument, csFontNameTag);
+}
+CPDF_IconFit::ScaleMethod CPDF_IconFit::GetScaleMethod() {
+ if (!m_pDict) {
return Always;
-}
-FX_BOOL CPDF_IconFit::IsProportionalScale()
-{
- if (m_pDict == NULL) {
- return TRUE;
- }
- return m_pDict->GetString("S", "P") != "A";
-}
-void CPDF_IconFit::GetIconPosition(FX_FLOAT& fLeft, FX_FLOAT& fBottom)
-{
- fLeft = fBottom = 0.5;
- if (m_pDict == NULL) {
- return;
- }
- CPDF_Array* pA = m_pDict->GetArray("A");
- if (pA != NULL) {
- FX_DWORD dwCount = pA->GetCount();
- if (dwCount > 0) {
- fLeft = pA->GetNumber(0);
- }
- if (dwCount > 1) {
- fBottom = pA->GetNumber(1);
- }
- }
-}
-FX_BOOL CPDF_IconFit::GetFittingBounds()
-{
- if (m_pDict == NULL) {
- return FALSE;
- }
- return m_pDict->GetBoolean("FB");
-}
-void SaveCheckedFieldStatus(CPDF_FormField* pField, CFX_ByteArray& statusArray)
-{
- int iCount = pField->CountControls();
- for (int i = 0; i < iCount; i ++) {
- CPDF_FormControl* pControl = pField->GetControl(i);
- if (pControl == NULL) {
- continue;
- }
- statusArray.Add(pControl->IsChecked() ? 1 : 0);
- }
-}
-CPDF_Object* FPDF_GetFieldAttr(CPDF_Dictionary* pFieldDict, const FX_CHAR* name, int nLevel)
-{
- if (nLevel > FPDFDOC_UTILS_MAXRECURSION) {
- return NULL;
- }
- if (pFieldDict == NULL) {
- return NULL;
- }
- CPDF_Object* pAttr = pFieldDict->GetElementValue(name);
- if (pAttr) {
- return pAttr;
- }
- CPDF_Dictionary* pParent = pFieldDict->GetDict("Parent");
- if (pParent == NULL) {
- return NULL;
- }
- return FPDF_GetFieldAttr(pParent, name, nLevel + 1);
+ }
+ CFX_ByteString csSW = m_pDict->GetString("SW", "A");
+ if (csSW == "B") {
+ return Bigger;
+ }
+ if (csSW == "S") {
+ return Smaller;
+ }
+ if (csSW == "N") {
+ return Never;
+ }
+ return Always;
+}
+FX_BOOL CPDF_IconFit::IsProportionalScale() {
+ if (m_pDict == NULL) {
+ return TRUE;
+ }
+ return m_pDict->GetString("S", "P") != "A";
+}
+void CPDF_IconFit::GetIconPosition(FX_FLOAT& fLeft, FX_FLOAT& fBottom) {
+ fLeft = fBottom = 0.5;
+ if (m_pDict == NULL) {
+ return;
+ }
+ CPDF_Array* pA = m_pDict->GetArray("A");
+ if (pA != NULL) {
+ FX_DWORD dwCount = pA->GetCount();
+ if (dwCount > 0) {
+ fLeft = pA->GetNumber(0);
+ }
+ if (dwCount > 1) {
+ fBottom = pA->GetNumber(1);
+ }
+ }
+}
+FX_BOOL CPDF_IconFit::GetFittingBounds() {
+ if (m_pDict == NULL) {
+ return FALSE;
+ }
+ return m_pDict->GetBoolean("FB");
+}
+void SaveCheckedFieldStatus(CPDF_FormField* pField,
+ CFX_ByteArray& statusArray) {
+ int iCount = pField->CountControls();
+ for (int i = 0; i < iCount; i++) {
+ CPDF_FormControl* pControl = pField->GetControl(i);
+ if (pControl == NULL) {
+ continue;
+ }
+ statusArray.Add(pControl->IsChecked() ? 1 : 0);
+ }
+}
+CPDF_Object* FPDF_GetFieldAttr(CPDF_Dictionary* pFieldDict,
+ const FX_CHAR* name,
+ int nLevel) {
+ if (nLevel > FPDFDOC_UTILS_MAXRECURSION) {
+ return NULL;
+ }
+ if (pFieldDict == NULL) {
+ return NULL;
+ }
+ CPDF_Object* pAttr = pFieldDict->GetElementValue(name);
+ if (pAttr) {
+ return pAttr;
+ }
+ CPDF_Dictionary* pParent = pFieldDict->GetDict("Parent");
+ if (pParent == NULL) {
+ return NULL;
+ }
+ return FPDF_GetFieldAttr(pParent, name, nLevel + 1);
}
diff --git a/core/src/fpdfdoc/doc_utils.h b/core/src/fpdfdoc/doc_utils.h
index 6bb1d30dbb..4a6652f9c6 100644
--- a/core/src/fpdfdoc/doc_utils.h
+++ b/core/src/fpdfdoc/doc_utils.h
@@ -7,27 +7,57 @@
#ifndef CORE_SRC_FPDFDOC_DOC_UTILS_H_
#define CORE_SRC_FPDFDOC_DOC_UTILS_H_
-CFX_WideString GetFullName(CPDF_Dictionary* pFieldDict);
-void InitInterFormDict(CPDF_Dictionary*& pFormDict, CPDF_Document* pDocument);
-FX_DWORD CountInterFormFonts(CPDF_Dictionary* pFormDict);
-CPDF_Font* GetInterFormFont(CPDF_Dictionary* pFormDict, CPDF_Document* pDocument, FX_DWORD index, CFX_ByteString& csNameTag);
-CPDF_Font* GetInterFormFont(CPDF_Dictionary* pFormDict, CPDF_Document* pDocument, CFX_ByteString csNameTag);
-CPDF_Font* GetInterFormFont(CPDF_Dictionary* pFormDict, CPDF_Document* pDocument, CFX_ByteString csFontName, CFX_ByteString& csNameTag);
-CPDF_Font* GetNativeInterFormFont(CPDF_Dictionary* pFormDict, CPDF_Document* pDocument, uint8_t charSet, CFX_ByteString& csNameTag);
-CPDF_Font* GetNativeInterFormFont(CPDF_Dictionary* pFormDict, CPDF_Document* pDocument, CFX_ByteString& csNameTag);
-FX_BOOL FindInterFormFont(CPDF_Dictionary* pFormDict, const CPDF_Font* pFont, CFX_ByteString& csNameTag);
-FX_BOOL FindInterFormFont(CPDF_Dictionary* pFormDict, CPDF_Document* pDocument, CFX_ByteString csFontName, CPDF_Font*& pFont, CFX_ByteString& csNameTag);
-void AddInterFormFont(CPDF_Dictionary*& pFormDict, CPDF_Document* pDocument, const CPDF_Font* pFont, CFX_ByteString& csNameTag);
-CPDF_Font* AddNativeInterFormFont(CPDF_Dictionary*& pFormDict, CPDF_Document* pDocument, uint8_t charSet, CFX_ByteString& csNameTag);
-CPDF_Font* AddNativeInterFormFont(CPDF_Dictionary*& pFormDict, CPDF_Document* pDocument, CFX_ByteString& csNameTag);
-void RemoveInterFormFont(CPDF_Dictionary* pFormDict, const CPDF_Font* pFont);
-void RemoveInterFormFont(CPDF_Dictionary* pFormDict, CFX_ByteString csNameTag);
-CPDF_Font* GetDefaultInterFormFont(CPDF_Dictionary* pFormDict, CPDF_Document* pDocument);
-void SetDefaultInterFormFont(CPDF_Dictionary*& pFormDict, CPDF_Document* pDocument, const CPDF_Font* pFont);
-void SaveCheckedFieldStatus(CPDF_FormField* pField, CFX_ByteArray& statusArray);
-FX_BOOL NeedPDFEncodeForFieldFullName(const CFX_WideString& csFieldName);
-FX_BOOL NeedPDFEncodeForFieldTree(CPDF_Dictionary* pFieldDict, int nLevel = 0);
-void EncodeFieldName(const CFX_WideString& csName, CFX_ByteString& csT);
-void UpdateEncodeFieldName(CPDF_Dictionary* pFieldDict, int nLevel = 0);
+CFX_WideString GetFullName(CPDF_Dictionary* pFieldDict);
+void InitInterFormDict(CPDF_Dictionary*& pFormDict, CPDF_Document* pDocument);
+FX_DWORD CountInterFormFonts(CPDF_Dictionary* pFormDict);
+CPDF_Font* GetInterFormFont(CPDF_Dictionary* pFormDict,
+ CPDF_Document* pDocument,
+ FX_DWORD index,
+ CFX_ByteString& csNameTag);
+CPDF_Font* GetInterFormFont(CPDF_Dictionary* pFormDict,
+ CPDF_Document* pDocument,
+ CFX_ByteString csNameTag);
+CPDF_Font* GetInterFormFont(CPDF_Dictionary* pFormDict,
+ CPDF_Document* pDocument,
+ CFX_ByteString csFontName,
+ CFX_ByteString& csNameTag);
+CPDF_Font* GetNativeInterFormFont(CPDF_Dictionary* pFormDict,
+ CPDF_Document* pDocument,
+ uint8_t charSet,
+ CFX_ByteString& csNameTag);
+CPDF_Font* GetNativeInterFormFont(CPDF_Dictionary* pFormDict,
+ CPDF_Document* pDocument,
+ CFX_ByteString& csNameTag);
+FX_BOOL FindInterFormFont(CPDF_Dictionary* pFormDict,
+ const CPDF_Font* pFont,
+ CFX_ByteString& csNameTag);
+FX_BOOL FindInterFormFont(CPDF_Dictionary* pFormDict,
+ CPDF_Document* pDocument,
+ CFX_ByteString csFontName,
+ CPDF_Font*& pFont,
+ CFX_ByteString& csNameTag);
+void AddInterFormFont(CPDF_Dictionary*& pFormDict,
+ CPDF_Document* pDocument,
+ const CPDF_Font* pFont,
+ CFX_ByteString& csNameTag);
+CPDF_Font* AddNativeInterFormFont(CPDF_Dictionary*& pFormDict,
+ CPDF_Document* pDocument,
+ uint8_t charSet,
+ CFX_ByteString& csNameTag);
+CPDF_Font* AddNativeInterFormFont(CPDF_Dictionary*& pFormDict,
+ CPDF_Document* pDocument,
+ CFX_ByteString& csNameTag);
+void RemoveInterFormFont(CPDF_Dictionary* pFormDict, const CPDF_Font* pFont);
+void RemoveInterFormFont(CPDF_Dictionary* pFormDict, CFX_ByteString csNameTag);
+CPDF_Font* GetDefaultInterFormFont(CPDF_Dictionary* pFormDict,
+ CPDF_Document* pDocument);
+void SetDefaultInterFormFont(CPDF_Dictionary*& pFormDict,
+ CPDF_Document* pDocument,
+ const CPDF_Font* pFont);
+void SaveCheckedFieldStatus(CPDF_FormField* pField, CFX_ByteArray& statusArray);
+FX_BOOL NeedPDFEncodeForFieldFullName(const CFX_WideString& csFieldName);
+FX_BOOL NeedPDFEncodeForFieldTree(CPDF_Dictionary* pFieldDict, int nLevel = 0);
+void EncodeFieldName(const CFX_WideString& csName, CFX_ByteString& csT);
+void UpdateEncodeFieldName(CPDF_Dictionary* pFieldDict, int nLevel = 0);
#endif // CORE_SRC_FPDFDOC_DOC_UTILS_H_
diff --git a/core/src/fpdfdoc/doc_viewerPreferences.cpp b/core/src/fpdfdoc/doc_viewerPreferences.cpp
index eb824eb5a4..50962b7d47 100644
--- a/core/src/fpdfdoc/doc_viewerPreferences.cpp
+++ b/core/src/fpdfdoc/doc_viewerPreferences.cpp
@@ -5,56 +5,48 @@
// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
#include "../../include/fpdfdoc/fpdf_doc.h"
-CPDF_ViewerPreferences::CPDF_ViewerPreferences(CPDF_Document *pDoc): m_pDoc(pDoc)
-{
+CPDF_ViewerPreferences::CPDF_ViewerPreferences(CPDF_Document* pDoc)
+ : m_pDoc(pDoc) {}
+CPDF_ViewerPreferences::~CPDF_ViewerPreferences() {}
+FX_BOOL CPDF_ViewerPreferences::IsDirectionR2L() const {
+ CPDF_Dictionary* pDict = m_pDoc->GetRoot();
+ pDict = pDict->GetDict(FX_BSTRC("ViewerPreferences"));
+ if (!pDict) {
+ return FALSE;
+ }
+ return FX_BSTRC("R2L") == pDict->GetString(FX_BSTRC("Direction"));
}
-CPDF_ViewerPreferences::~CPDF_ViewerPreferences()
-{
+FX_BOOL CPDF_ViewerPreferences::PrintScaling() const {
+ CPDF_Dictionary* pDict = m_pDoc->GetRoot();
+ pDict = pDict->GetDict(FX_BSTRC("ViewerPreferences"));
+ if (!pDict) {
+ return TRUE;
+ }
+ return FX_BSTRC("None") != pDict->GetString(FX_BSTRC("PrintScaling"));
}
-FX_BOOL CPDF_ViewerPreferences::IsDirectionR2L() const
-{
- CPDF_Dictionary *pDict = m_pDoc->GetRoot();
- pDict = pDict->GetDict(FX_BSTRC("ViewerPreferences"));
- if (!pDict) {
- return FALSE;
- }
- return FX_BSTRC("R2L") == pDict->GetString(FX_BSTRC("Direction"));
+int32_t CPDF_ViewerPreferences::NumCopies() const {
+ CPDF_Dictionary* pDict = m_pDoc->GetRoot();
+ pDict = pDict->GetDict(FX_BSTRC("ViewerPreferences"));
+ if (!pDict) {
+ return 1;
+ }
+ return pDict->GetInteger(FX_BSTRC("NumCopies"));
}
-FX_BOOL CPDF_ViewerPreferences::PrintScaling() const
-{
- CPDF_Dictionary *pDict = m_pDoc->GetRoot();
- pDict = pDict->GetDict(FX_BSTRC("ViewerPreferences"));
- if (!pDict) {
- return TRUE;
- }
- return FX_BSTRC("None") != pDict->GetString(FX_BSTRC("PrintScaling"));
-}
-int32_t CPDF_ViewerPreferences::NumCopies() const
-{
- CPDF_Dictionary *pDict = m_pDoc->GetRoot();
- pDict = pDict->GetDict(FX_BSTRC("ViewerPreferences"));
- if (!pDict) {
- return 1;
- }
- return pDict->GetInteger(FX_BSTRC("NumCopies"));
-}
-CPDF_Array* CPDF_ViewerPreferences::PrintPageRange() const
-{
- CPDF_Dictionary *pDict = m_pDoc->GetRoot();
- CPDF_Array *pRange = NULL;
- pDict = pDict->GetDict(FX_BSTRC("ViewerPreferences"));
- if (!pDict) {
- return pRange;
- }
- pRange = pDict->GetArray(FX_BSTRC("PrintPageRange"));
+CPDF_Array* CPDF_ViewerPreferences::PrintPageRange() const {
+ CPDF_Dictionary* pDict = m_pDoc->GetRoot();
+ CPDF_Array* pRange = NULL;
+ pDict = pDict->GetDict(FX_BSTRC("ViewerPreferences"));
+ if (!pDict) {
return pRange;
+ }
+ pRange = pDict->GetArray(FX_BSTRC("PrintPageRange"));
+ return pRange;
}
-CFX_ByteString CPDF_ViewerPreferences::Duplex() const
-{
- CPDF_Dictionary *pDict = m_pDoc->GetRoot();
- pDict = pDict->GetDict(FX_BSTRC("ViewerPreferences"));
- if (!pDict) {
- return FX_BSTRC("None");
- }
- return pDict->GetString(FX_BSTRC("Duplex"));
+CFX_ByteString CPDF_ViewerPreferences::Duplex() const {
+ CPDF_Dictionary* pDict = m_pDoc->GetRoot();
+ pDict = pDict->GetDict(FX_BSTRC("ViewerPreferences"));
+ if (!pDict) {
+ return FX_BSTRC("None");
+ }
+ return pDict->GetString(FX_BSTRC("Duplex"));
}
diff --git a/core/src/fpdfdoc/doc_vt.cpp b/core/src/fpdfdoc/doc_vt.cpp
index 230ba764e4..b7c8ed80f6 100644
--- a/core/src/fpdfdoc/doc_vt.cpp
+++ b/core/src/fpdfdoc/doc_vt.cpp
@@ -7,1833 +7,1823 @@
#include "../../include/fpdfdoc/fpdf_doc.h"
#include "../../include/fpdfdoc/fpdf_vt.h"
#include "pdf_vt.h"
-const uint8_t gFontSizeSteps[] = { 4, 6, 8, 9, 10, 12, 14, 18, 20, 25, 30, 35, 40, 45, 50, 55, 60, 70, 80, 90, 100, 110, 120, 130, 144};
-#define PVT_RETURN_LENGTH 1
-#define PVT_DEFAULT_FONTSIZE 18.0f
-#define PVTWORD_SCRIPT_NORMAL 0
-#define PVTWORD_SCRIPT_SUPER 1
-#define PVTWORD_SCRIPT_SUB 2
-#define PVT_FONTSCALE 0.001f
-#define PVT_PERCENT 0.01f
-#define PVT_HALF 0.5f
-CLine::CLine()
-{
-}
-CLine::~CLine()
-{
-}
-CPVT_WordPlace CLine::GetBeginWordPlace() const
-{
- return CPVT_WordPlace(LinePlace.nSecIndex, LinePlace.nLineIndex, -1);
-}
-CPVT_WordPlace CLine::GetEndWordPlace() const
-{
- return CPVT_WordPlace(LinePlace.nSecIndex, LinePlace.nLineIndex, m_LineInfo.nEndWordIndex);
-}
-CPVT_WordPlace CLine::GetPrevWordPlace(const CPVT_WordPlace & place) const
-{
- if (place.nWordIndex > m_LineInfo.nEndWordIndex) {
- return CPVT_WordPlace(place.nSecIndex, place.nLineIndex, m_LineInfo.nEndWordIndex);
- }
- return CPVT_WordPlace(place.nSecIndex, place.nLineIndex, place.nWordIndex - 1);
-}
-CPVT_WordPlace CLine::GetNextWordPlace(const CPVT_WordPlace & place) const
-{
- if (place.nWordIndex < m_LineInfo.nBeginWordIndex) {
- return CPVT_WordPlace(place.nSecIndex, place.nLineIndex, m_LineInfo.nBeginWordIndex);
- }
- return CPVT_WordPlace(place.nSecIndex, place.nLineIndex, place.nWordIndex + 1);
-}
-CSection::CSection(CPDF_VariableText * pVT) : m_pVT(pVT)
-{
-}
-CSection::~CSection()
-{
- ResetAll();
-}
-void CSection::ResetAll()
-{
- ResetWordArray();
- ResetLineArray();
-}
-void CSection::ResetLineArray()
-{
- m_LineArray.RemoveAll();
-}
-void CSection::ResetWordArray()
-{
- for (int32_t i = 0, sz = m_WordArray.GetSize(); i < sz; i++) {
- delete m_WordArray.GetAt(i);
- }
- m_WordArray.RemoveAll();
-}
-void CSection::ResetLinePlace()
-{
- for (int32_t i = 0, sz = m_LineArray.GetSize(); i < sz; i++) {
- if (CLine * pLine = m_LineArray.GetAt(i)) {
- pLine->LinePlace = CPVT_WordPlace(SecPlace.nSecIndex, i, -1);
- }
- }
-}
-CPVT_WordPlace CSection::AddWord(const CPVT_WordPlace & place, const CPVT_WordInfo & wordinfo)
-{
- CPVT_WordInfo * pWord = new CPVT_WordInfo(wordinfo);
- int32_t nWordIndex = FPDF_MAX(FPDF_MIN(place.nWordIndex, m_WordArray.GetSize()), 0);
- if (nWordIndex == m_WordArray.GetSize()) {
- m_WordArray.Add(pWord);
+const uint8_t gFontSizeSteps[] = {4, 6, 8, 9, 10, 12, 14, 18, 20,
+ 25, 30, 35, 40, 45, 50, 55, 60, 70,
+ 80, 90, 100, 110, 120, 130, 144};
+#define PVT_RETURN_LENGTH 1
+#define PVT_DEFAULT_FONTSIZE 18.0f
+#define PVTWORD_SCRIPT_NORMAL 0
+#define PVTWORD_SCRIPT_SUPER 1
+#define PVTWORD_SCRIPT_SUB 2
+#define PVT_FONTSCALE 0.001f
+#define PVT_PERCENT 0.01f
+#define PVT_HALF 0.5f
+CLine::CLine() {}
+CLine::~CLine() {}
+CPVT_WordPlace CLine::GetBeginWordPlace() const {
+ return CPVT_WordPlace(LinePlace.nSecIndex, LinePlace.nLineIndex, -1);
+}
+CPVT_WordPlace CLine::GetEndWordPlace() const {
+ return CPVT_WordPlace(LinePlace.nSecIndex, LinePlace.nLineIndex,
+ m_LineInfo.nEndWordIndex);
+}
+CPVT_WordPlace CLine::GetPrevWordPlace(const CPVT_WordPlace& place) const {
+ if (place.nWordIndex > m_LineInfo.nEndWordIndex) {
+ return CPVT_WordPlace(place.nSecIndex, place.nLineIndex,
+ m_LineInfo.nEndWordIndex);
+ }
+ return CPVT_WordPlace(place.nSecIndex, place.nLineIndex,
+ place.nWordIndex - 1);
+}
+CPVT_WordPlace CLine::GetNextWordPlace(const CPVT_WordPlace& place) const {
+ if (place.nWordIndex < m_LineInfo.nBeginWordIndex) {
+ return CPVT_WordPlace(place.nSecIndex, place.nLineIndex,
+ m_LineInfo.nBeginWordIndex);
+ }
+ return CPVT_WordPlace(place.nSecIndex, place.nLineIndex,
+ place.nWordIndex + 1);
+}
+CSection::CSection(CPDF_VariableText* pVT) : m_pVT(pVT) {}
+CSection::~CSection() {
+ ResetAll();
+}
+void CSection::ResetAll() {
+ ResetWordArray();
+ ResetLineArray();
+}
+void CSection::ResetLineArray() {
+ m_LineArray.RemoveAll();
+}
+void CSection::ResetWordArray() {
+ for (int32_t i = 0, sz = m_WordArray.GetSize(); i < sz; i++) {
+ delete m_WordArray.GetAt(i);
+ }
+ m_WordArray.RemoveAll();
+}
+void CSection::ResetLinePlace() {
+ for (int32_t i = 0, sz = m_LineArray.GetSize(); i < sz; i++) {
+ if (CLine* pLine = m_LineArray.GetAt(i)) {
+ pLine->LinePlace = CPVT_WordPlace(SecPlace.nSecIndex, i, -1);
+ }
+ }
+}
+CPVT_WordPlace CSection::AddWord(const CPVT_WordPlace& place,
+ const CPVT_WordInfo& wordinfo) {
+ CPVT_WordInfo* pWord = new CPVT_WordInfo(wordinfo);
+ int32_t nWordIndex =
+ FPDF_MAX(FPDF_MIN(place.nWordIndex, m_WordArray.GetSize()), 0);
+ if (nWordIndex == m_WordArray.GetSize()) {
+ m_WordArray.Add(pWord);
+ } else {
+ m_WordArray.InsertAt(nWordIndex, pWord);
+ }
+ return place;
+}
+CPVT_WordPlace CSection::AddLine(const CPVT_LineInfo& lineinfo) {
+ return CPVT_WordPlace(SecPlace.nSecIndex, m_LineArray.Add(lineinfo), -1);
+}
+CPVT_FloatRect CSection::Rearrange() {
+ ASSERT(m_pVT != NULL);
+ if (m_pVT->m_nCharArray > 0) {
+ return CTypeset(this).CharArray();
+ }
+ return CTypeset(this).Typeset();
+}
+CPVT_Size CSection::GetSectionSize(FX_FLOAT fFontSize) {
+ return CTypeset(this).GetEditSize(fFontSize);
+}
+CPVT_WordPlace CSection::GetBeginWordPlace() const {
+ if (CLine* pLine = m_LineArray.GetAt(0)) {
+ return pLine->GetBeginWordPlace();
+ }
+ return SecPlace;
+}
+CPVT_WordPlace CSection::GetEndWordPlace() const {
+ if (CLine* pLine = m_LineArray.GetAt(m_LineArray.GetSize() - 1)) {
+ return pLine->GetEndWordPlace();
+ }
+ return SecPlace;
+}
+CPVT_WordPlace CSection::GetPrevWordPlace(const CPVT_WordPlace& place) const {
+ if (place.nLineIndex < 0) {
+ return GetBeginWordPlace();
+ }
+ if (place.nLineIndex >= m_LineArray.GetSize()) {
+ return GetEndWordPlace();
+ }
+ if (CLine* pLine = m_LineArray.GetAt(place.nLineIndex)) {
+ if (place.nWordIndex == pLine->m_LineInfo.nBeginWordIndex) {
+ return CPVT_WordPlace(place.nSecIndex, place.nLineIndex, -1);
+ }
+ if (place.nWordIndex < pLine->m_LineInfo.nBeginWordIndex) {
+ if (CLine* pPrevLine = m_LineArray.GetAt(place.nLineIndex - 1)) {
+ return pPrevLine->GetEndWordPlace();
+ }
} else {
- m_WordArray.InsertAt(nWordIndex, pWord);
- }
- return place;
-}
-CPVT_WordPlace CSection::AddLine(const CPVT_LineInfo & lineinfo)
-{
- return CPVT_WordPlace(SecPlace.nSecIndex, m_LineArray.Add(lineinfo), -1);
-}
-CPVT_FloatRect CSection::Rearrange()
-{
- ASSERT(m_pVT != NULL);
- if (m_pVT->m_nCharArray > 0) {
- return CTypeset(this).CharArray();
- }
- return CTypeset(this).Typeset();
-}
-CPVT_Size CSection::GetSectionSize(FX_FLOAT fFontSize)
-{
- return CTypeset(this).GetEditSize(fFontSize);
-}
-CPVT_WordPlace CSection::GetBeginWordPlace() const
-{
- if (CLine * pLine = m_LineArray.GetAt(0)) {
- return pLine->GetBeginWordPlace();
- }
- return SecPlace;
-}
-CPVT_WordPlace CSection::GetEndWordPlace() const
-{
- if (CLine * pLine = m_LineArray.GetAt(m_LineArray.GetSize() - 1)) {
- return pLine->GetEndWordPlace();
- }
- return SecPlace;
-}
-CPVT_WordPlace CSection::GetPrevWordPlace(const CPVT_WordPlace & place) const
-{
- if (place.nLineIndex < 0) {
- return GetBeginWordPlace();
- }
- if (place.nLineIndex >= m_LineArray.GetSize()) {
- return GetEndWordPlace();
- }
- if (CLine * pLine = m_LineArray.GetAt(place.nLineIndex)) {
- if (place.nWordIndex == pLine->m_LineInfo.nBeginWordIndex) {
- return CPVT_WordPlace(place.nSecIndex, place.nLineIndex, -1);
- }
- if (place.nWordIndex < pLine->m_LineInfo.nBeginWordIndex) {
- if (CLine * pPrevLine = m_LineArray.GetAt(place.nLineIndex - 1)) {
- return pPrevLine->GetEndWordPlace();
- }
- } else {
- return pLine->GetPrevWordPlace(place);
- }
+ return pLine->GetPrevWordPlace(place);
}
- return place;
-}
-CPVT_WordPlace CSection::GetNextWordPlace(const CPVT_WordPlace & place) const
-{
- if (place.nLineIndex < 0) {
- return GetBeginWordPlace();
- }
- if (place.nLineIndex >= m_LineArray.GetSize()) {
- return GetEndWordPlace();
- }
- if (CLine * pLine = m_LineArray.GetAt(place.nLineIndex)) {
- if (place.nWordIndex >= pLine->m_LineInfo.nEndWordIndex) {
- if (CLine * pNextLine = m_LineArray.GetAt(place.nLineIndex + 1)) {
- return pNextLine->GetBeginWordPlace();
- }
- } else {
- return pLine->GetNextWordPlace(place);
- }
- }
- return place;
-}
-void CSection::UpdateWordPlace(CPVT_WordPlace & place) const
-{
- int32_t nLeft = 0;
- int32_t nRight = m_LineArray.GetSize() - 1;
- int32_t nMid = (nLeft + nRight) / 2;
- while (nLeft <= nRight) {
- if (CLine * pLine = m_LineArray.GetAt(nMid)) {
- if (place.nWordIndex < pLine->m_LineInfo.nBeginWordIndex) {
- nRight = nMid - 1;
- nMid = (nLeft + nRight) / 2;
- } else if (place.nWordIndex > pLine->m_LineInfo.nEndWordIndex) {
- nLeft = nMid + 1;
- nMid = (nLeft + nRight) / 2;
- } else {
- place.nLineIndex = nMid;
- return;
- }
- } else {
- break;
- }
- }
-}
-CPVT_WordPlace CSection::SearchWordPlace(const CPDF_Point & point) const
-{
- ASSERT(m_pVT != NULL);
- CPVT_WordPlace place = GetBeginWordPlace();
- FX_BOOL bUp = TRUE;
- FX_BOOL bDown = TRUE;
- int32_t nLeft = 0;
- int32_t nRight = m_LineArray.GetSize() - 1;
- int32_t nMid = m_LineArray.GetSize() / 2;
- FX_FLOAT fTop = 0;
- FX_FLOAT fBottom = 0;
- while (nLeft <= nRight) {
- if (CLine * pLine = m_LineArray.GetAt(nMid)) {
- fTop = pLine->m_LineInfo.fLineY - pLine->m_LineInfo.fLineAscent - m_pVT->GetLineLeading(m_SecInfo);
- fBottom = pLine->m_LineInfo.fLineY - pLine->m_LineInfo.fLineDescent;
- if (IsFloatBigger(point.y, fTop)) {
- bUp = FALSE;
- }
- if (IsFloatSmaller(point.y, fBottom)) {
- bDown = FALSE;
- }
- if (IsFloatSmaller(point.y, fTop)) {
- nRight = nMid - 1;
- nMid = (nLeft + nRight) / 2;
- continue;
- } else if (IsFloatBigger(point.y, fBottom)) {
- nLeft = nMid + 1;
- nMid = (nLeft + nRight) / 2;
- continue;
- } else {
- place = SearchWordPlace(point.x,
- CPVT_WordRange(pLine->GetNextWordPlace(pLine->GetBeginWordPlace()), pLine->GetEndWordPlace())
- );
- place.nLineIndex = nMid;
- return place;
- }
- }
- }
- if (bUp) {
- place = GetBeginWordPlace();
- }
- if (bDown) {
- place = GetEndWordPlace();
- }
- return place;
+ }
+ return place;
}
-CPVT_WordPlace CSection::SearchWordPlace(FX_FLOAT fx, const CPVT_WordPlace & lineplace) const
-{
- if (CLine * pLine = m_LineArray.GetAt(lineplace.nLineIndex)) {
- return SearchWordPlace(fx - m_SecInfo.rcSection.left,
- CPVT_WordRange(pLine->GetNextWordPlace(pLine->GetBeginWordPlace()), pLine->GetEndWordPlace()));
- }
+CPVT_WordPlace CSection::GetNextWordPlace(const CPVT_WordPlace& place) const {
+ if (place.nLineIndex < 0) {
return GetBeginWordPlace();
-}
-CPVT_WordPlace CSection::SearchWordPlace(FX_FLOAT fx, const CPVT_WordRange & range) const
-{
- CPVT_WordPlace wordplace = range.BeginPos;
- wordplace.nWordIndex = -1;
- if (!m_pVT) {
- return wordplace;
- }
- int32_t nLeft = range.BeginPos.nWordIndex;
- int32_t nRight = range.EndPos.nWordIndex + 1;
- int32_t nMid = (nLeft + nRight) / 2;
- while (nLeft < nRight) {
- if (nMid == nLeft) {
- break;
- }
- if (nMid == nRight) {
- nMid--;
- break;
- }
- if (CPVT_WordInfo * pWord = m_WordArray.GetAt(nMid)) {
- if (fx > pWord->fWordX + m_pVT->GetWordWidth(*pWord) * PVT_HALF) {
- nLeft = nMid;
- nMid = (nLeft + nRight) / 2;
- continue;
- } else {
- nRight = nMid;
- nMid = (nLeft + nRight) / 2;
- continue;
- }
- } else {
- break;
- }
- }
- if (CPVT_WordInfo * pWord = m_WordArray.GetAt(nMid)) {
- if (fx > pWord->fWordX + m_pVT->GetWordWidth(*pWord) * PVT_HALF) {
- wordplace.nWordIndex = nMid;
- }
- }
+ }
+ if (place.nLineIndex >= m_LineArray.GetSize()) {
+ return GetEndWordPlace();
+ }
+ if (CLine* pLine = m_LineArray.GetAt(place.nLineIndex)) {
+ if (place.nWordIndex >= pLine->m_LineInfo.nEndWordIndex) {
+ if (CLine* pNextLine = m_LineArray.GetAt(place.nLineIndex + 1)) {
+ return pNextLine->GetBeginWordPlace();
+ }
+ } else {
+ return pLine->GetNextWordPlace(place);
+ }
+ }
+ return place;
+}
+void CSection::UpdateWordPlace(CPVT_WordPlace& place) const {
+ int32_t nLeft = 0;
+ int32_t nRight = m_LineArray.GetSize() - 1;
+ int32_t nMid = (nLeft + nRight) / 2;
+ while (nLeft <= nRight) {
+ if (CLine* pLine = m_LineArray.GetAt(nMid)) {
+ if (place.nWordIndex < pLine->m_LineInfo.nBeginWordIndex) {
+ nRight = nMid - 1;
+ nMid = (nLeft + nRight) / 2;
+ } else if (place.nWordIndex > pLine->m_LineInfo.nEndWordIndex) {
+ nLeft = nMid + 1;
+ nMid = (nLeft + nRight) / 2;
+ } else {
+ place.nLineIndex = nMid;
+ return;
+ }
+ } else {
+ break;
+ }
+ }
+}
+CPVT_WordPlace CSection::SearchWordPlace(const CPDF_Point& point) const {
+ ASSERT(m_pVT != NULL);
+ CPVT_WordPlace place = GetBeginWordPlace();
+ FX_BOOL bUp = TRUE;
+ FX_BOOL bDown = TRUE;
+ int32_t nLeft = 0;
+ int32_t nRight = m_LineArray.GetSize() - 1;
+ int32_t nMid = m_LineArray.GetSize() / 2;
+ FX_FLOAT fTop = 0;
+ FX_FLOAT fBottom = 0;
+ while (nLeft <= nRight) {
+ if (CLine* pLine = m_LineArray.GetAt(nMid)) {
+ fTop = pLine->m_LineInfo.fLineY - pLine->m_LineInfo.fLineAscent -
+ m_pVT->GetLineLeading(m_SecInfo);
+ fBottom = pLine->m_LineInfo.fLineY - pLine->m_LineInfo.fLineDescent;
+ if (IsFloatBigger(point.y, fTop)) {
+ bUp = FALSE;
+ }
+ if (IsFloatSmaller(point.y, fBottom)) {
+ bDown = FALSE;
+ }
+ if (IsFloatSmaller(point.y, fTop)) {
+ nRight = nMid - 1;
+ nMid = (nLeft + nRight) / 2;
+ continue;
+ } else if (IsFloatBigger(point.y, fBottom)) {
+ nLeft = nMid + 1;
+ nMid = (nLeft + nRight) / 2;
+ continue;
+ } else {
+ place = SearchWordPlace(
+ point.x,
+ CPVT_WordRange(pLine->GetNextWordPlace(pLine->GetBeginWordPlace()),
+ pLine->GetEndWordPlace()));
+ place.nLineIndex = nMid;
+ return place;
+ }
+ }
+ }
+ if (bUp) {
+ place = GetBeginWordPlace();
+ }
+ if (bDown) {
+ place = GetEndWordPlace();
+ }
+ return place;
+}
+CPVT_WordPlace CSection::SearchWordPlace(
+ FX_FLOAT fx,
+ const CPVT_WordPlace& lineplace) const {
+ if (CLine* pLine = m_LineArray.GetAt(lineplace.nLineIndex)) {
+ return SearchWordPlace(
+ fx - m_SecInfo.rcSection.left,
+ CPVT_WordRange(pLine->GetNextWordPlace(pLine->GetBeginWordPlace()),
+ pLine->GetEndWordPlace()));
+ }
+ return GetBeginWordPlace();
+}
+CPVT_WordPlace CSection::SearchWordPlace(FX_FLOAT fx,
+ const CPVT_WordRange& range) const {
+ CPVT_WordPlace wordplace = range.BeginPos;
+ wordplace.nWordIndex = -1;
+ if (!m_pVT) {
return wordplace;
-}
-void CSection::ClearLeftWords(int32_t nWordIndex)
-{
- for (int32_t i = nWordIndex; i >= 0; i--) {
- delete m_WordArray.GetAt(i);
- m_WordArray.RemoveAt(i);
- }
-}
-void CSection::ClearRightWords(int32_t nWordIndex)
-{
- for (int32_t i = m_WordArray.GetSize() - 1; i > nWordIndex; i--) {
- delete m_WordArray.GetAt(i);
- m_WordArray.RemoveAt(i);
- }
-}
-void CSection::ClearMidWords(int32_t nBeginIndex, int32_t nEndIndex)
-{
- for (int32_t i = nEndIndex; i > nBeginIndex; i--) {
- delete m_WordArray.GetAt(i);
- m_WordArray.RemoveAt(i);
- }
-}
-void CSection::ClearWords(const CPVT_WordRange & PlaceRange)
-{
- CPVT_WordPlace SecBeginPos = GetBeginWordPlace();
- CPVT_WordPlace SecEndPos = GetEndWordPlace();
- if (PlaceRange.BeginPos.WordCmp(SecBeginPos) >= 0) {
- if (PlaceRange.EndPos.WordCmp(SecEndPos) <= 0) {
- ClearMidWords(PlaceRange.BeginPos.nWordIndex, PlaceRange.EndPos.nWordIndex);
- } else {
- ClearRightWords(PlaceRange.BeginPos.nWordIndex);
- }
- } else if (PlaceRange.EndPos.WordCmp(SecEndPos) <= 0) {
- ClearLeftWords(PlaceRange.EndPos.nWordIndex);
+ }
+ int32_t nLeft = range.BeginPos.nWordIndex;
+ int32_t nRight = range.EndPos.nWordIndex + 1;
+ int32_t nMid = (nLeft + nRight) / 2;
+ while (nLeft < nRight) {
+ if (nMid == nLeft) {
+ break;
+ }
+ if (nMid == nRight) {
+ nMid--;
+ break;
+ }
+ if (CPVT_WordInfo* pWord = m_WordArray.GetAt(nMid)) {
+ if (fx > pWord->fWordX + m_pVT->GetWordWidth(*pWord) * PVT_HALF) {
+ nLeft = nMid;
+ nMid = (nLeft + nRight) / 2;
+ continue;
+ } else {
+ nRight = nMid;
+ nMid = (nLeft + nRight) / 2;
+ continue;
+ }
} else {
- ResetWordArray();
- }
-}
-void CSection::ClearWord(const CPVT_WordPlace & place)
-{
- delete m_WordArray.GetAt(place.nWordIndex);
- m_WordArray.RemoveAt(place.nWordIndex);
-}
-CTypeset::CTypeset(CSection * pSection) : m_rcRet(0.0f, 0.0f, 0.0f, 0.0f), m_pVT(pSection->m_pVT), m_pSection(pSection)
-{
-}
-CTypeset::~CTypeset()
-{
-}
-CPVT_FloatRect CTypeset::CharArray()
-{
- ASSERT(m_pSection != NULL);
- ASSERT(m_pVT != NULL);
- FX_FLOAT fLineAscent = m_pVT->GetFontAscent(m_pVT->GetDefaultFontIndex(), m_pVT->GetFontSize());
- FX_FLOAT fLineDescent = m_pVT->GetFontDescent(m_pVT->GetDefaultFontIndex(), m_pVT->GetFontSize());
- m_rcRet.Default();
- FX_FLOAT x = 0.0f, y = 0.0f;
- FX_FLOAT fNextWidth;
- int32_t nStart = 0;
- FX_FLOAT fNodeWidth = m_pVT->GetPlateWidth() / (m_pVT->m_nCharArray <= 0 ? 1 : m_pVT->m_nCharArray);
- if (CLine * pLine = m_pSection->m_LineArray.GetAt(0)) {
- x = 0.0f;
- y += m_pVT->GetLineLeading(m_pSection->m_SecInfo);
- y += fLineAscent;
- nStart = 0;
- switch (m_pVT->GetAlignment(m_pSection->m_SecInfo)) {
- case 0:
- pLine->m_LineInfo.fLineX = fNodeWidth * PVT_HALF;
- break;
- case 1:
- nStart = (m_pVT->m_nCharArray - m_pSection->m_WordArray.GetSize()) / 2;
- pLine->m_LineInfo.fLineX = fNodeWidth * nStart - fNodeWidth * PVT_HALF;
- break;
- case 2:
- nStart = m_pVT->m_nCharArray - m_pSection->m_WordArray.GetSize();
- pLine->m_LineInfo.fLineX = fNodeWidth * nStart - fNodeWidth * PVT_HALF;
- break;
- }
- for (int32_t w = 0, sz = m_pSection->m_WordArray.GetSize(); w < sz; w++) {
- if (w >= m_pVT->m_nCharArray) {
- break;
- }
- fNextWidth = 0;
- if (CPVT_WordInfo * pNextWord = (CPVT_WordInfo *)m_pSection->m_WordArray.GetAt(w + 1)) {
- pNextWord->fWordTail = 0;
- fNextWidth = m_pVT->GetWordWidth(*pNextWord);
- }
- if (CPVT_WordInfo * pWord = (CPVT_WordInfo *)m_pSection->m_WordArray.GetAt(w)) {
- pWord->fWordTail = 0;
- FX_FLOAT fWordWidth = m_pVT->GetWordWidth(*pWord);
- FX_FLOAT fWordAscent = m_pVT->GetWordAscent(*pWord);
- FX_FLOAT fWordDescent = m_pVT->GetWordDescent(*pWord);
- x = (FX_FLOAT)(fNodeWidth * (w + nStart + 0.5) - fWordWidth * PVT_HALF);
- pWord->fWordX = x;
- pWord->fWordY = y;
- if (w == 0) {
- pLine->m_LineInfo.fLineX = x;
- }
- if (w != m_pSection->m_WordArray.GetSize() - 1)
- pWord->fWordTail = (fNodeWidth - (fWordWidth + fNextWidth) * PVT_HALF > 0 ?
- fNodeWidth - (fWordWidth + fNextWidth) * PVT_HALF : 0);
- else {
- pWord->fWordTail = 0;
- }
- x += fWordWidth;
- fLineAscent = FPDF_MAX(fLineAscent, fWordAscent);
- fLineDescent = FPDF_MIN(fLineDescent, fWordDescent);
- }
- }
- pLine->m_LineInfo.nBeginWordIndex = 0;
- pLine->m_LineInfo.nEndWordIndex = m_pSection->m_WordArray.GetSize() - 1;
- pLine->m_LineInfo.fLineY = y;
- pLine->m_LineInfo.fLineWidth = x - pLine->m_LineInfo.fLineX;
- pLine->m_LineInfo.fLineAscent = fLineAscent;
- pLine->m_LineInfo.fLineDescent = fLineDescent;
- y += (-fLineDescent);
- }
- return m_rcRet = CPVT_FloatRect(0, 0, x, y);
-}
-CPVT_Size CTypeset::GetEditSize(FX_FLOAT fFontSize)
-{
- ASSERT(m_pSection != NULL);
- ASSERT(m_pVT != NULL);
- SplitLines(FALSE, fFontSize);
- return CPVT_Size(m_rcRet.Width(), m_rcRet.Height());
-}
-CPVT_FloatRect CTypeset::Typeset()
-{
- ASSERT(m_pSection != NULL);
- ASSERT(m_pVT != NULL);
- m_pSection->m_LineArray.Empty();
- SplitLines(TRUE, 0.0f);
- m_pSection->m_LineArray.Clear();
- OutputLines();
- return m_rcRet;
+ break;
+ }
+ }
+ if (CPVT_WordInfo* pWord = m_WordArray.GetAt(nMid)) {
+ if (fx > pWord->fWordX + m_pVT->GetWordWidth(*pWord) * PVT_HALF) {
+ wordplace.nWordIndex = nMid;
+ }
+ }
+ return wordplace;
+}
+void CSection::ClearLeftWords(int32_t nWordIndex) {
+ for (int32_t i = nWordIndex; i >= 0; i--) {
+ delete m_WordArray.GetAt(i);
+ m_WordArray.RemoveAt(i);
+ }
+}
+void CSection::ClearRightWords(int32_t nWordIndex) {
+ for (int32_t i = m_WordArray.GetSize() - 1; i > nWordIndex; i--) {
+ delete m_WordArray.GetAt(i);
+ m_WordArray.RemoveAt(i);
+ }
+}
+void CSection::ClearMidWords(int32_t nBeginIndex, int32_t nEndIndex) {
+ for (int32_t i = nEndIndex; i > nBeginIndex; i--) {
+ delete m_WordArray.GetAt(i);
+ m_WordArray.RemoveAt(i);
+ }
+}
+void CSection::ClearWords(const CPVT_WordRange& PlaceRange) {
+ CPVT_WordPlace SecBeginPos = GetBeginWordPlace();
+ CPVT_WordPlace SecEndPos = GetEndWordPlace();
+ if (PlaceRange.BeginPos.WordCmp(SecBeginPos) >= 0) {
+ if (PlaceRange.EndPos.WordCmp(SecEndPos) <= 0) {
+ ClearMidWords(PlaceRange.BeginPos.nWordIndex,
+ PlaceRange.EndPos.nWordIndex);
+ } else {
+ ClearRightWords(PlaceRange.BeginPos.nWordIndex);
+ }
+ } else if (PlaceRange.EndPos.WordCmp(SecEndPos) <= 0) {
+ ClearLeftWords(PlaceRange.EndPos.nWordIndex);
+ } else {
+ ResetWordArray();
+ }
+}
+void CSection::ClearWord(const CPVT_WordPlace& place) {
+ delete m_WordArray.GetAt(place.nWordIndex);
+ m_WordArray.RemoveAt(place.nWordIndex);
+}
+CTypeset::CTypeset(CSection* pSection)
+ : m_rcRet(0.0f, 0.0f, 0.0f, 0.0f),
+ m_pVT(pSection->m_pVT),
+ m_pSection(pSection) {}
+CTypeset::~CTypeset() {}
+CPVT_FloatRect CTypeset::CharArray() {
+ ASSERT(m_pSection != NULL);
+ ASSERT(m_pVT != NULL);
+ FX_FLOAT fLineAscent =
+ m_pVT->GetFontAscent(m_pVT->GetDefaultFontIndex(), m_pVT->GetFontSize());
+ FX_FLOAT fLineDescent =
+ m_pVT->GetFontDescent(m_pVT->GetDefaultFontIndex(), m_pVT->GetFontSize());
+ m_rcRet.Default();
+ FX_FLOAT x = 0.0f, y = 0.0f;
+ FX_FLOAT fNextWidth;
+ int32_t nStart = 0;
+ FX_FLOAT fNodeWidth = m_pVT->GetPlateWidth() /
+ (m_pVT->m_nCharArray <= 0 ? 1 : m_pVT->m_nCharArray);
+ if (CLine* pLine = m_pSection->m_LineArray.GetAt(0)) {
+ x = 0.0f;
+ y += m_pVT->GetLineLeading(m_pSection->m_SecInfo);
+ y += fLineAscent;
+ nStart = 0;
+ switch (m_pVT->GetAlignment(m_pSection->m_SecInfo)) {
+ case 0:
+ pLine->m_LineInfo.fLineX = fNodeWidth * PVT_HALF;
+ break;
+ case 1:
+ nStart = (m_pVT->m_nCharArray - m_pSection->m_WordArray.GetSize()) / 2;
+ pLine->m_LineInfo.fLineX = fNodeWidth * nStart - fNodeWidth * PVT_HALF;
+ break;
+ case 2:
+ nStart = m_pVT->m_nCharArray - m_pSection->m_WordArray.GetSize();
+ pLine->m_LineInfo.fLineX = fNodeWidth * nStart - fNodeWidth * PVT_HALF;
+ break;
+ }
+ for (int32_t w = 0, sz = m_pSection->m_WordArray.GetSize(); w < sz; w++) {
+ if (w >= m_pVT->m_nCharArray) {
+ break;
+ }
+ fNextWidth = 0;
+ if (CPVT_WordInfo* pNextWord =
+ (CPVT_WordInfo*)m_pSection->m_WordArray.GetAt(w + 1)) {
+ pNextWord->fWordTail = 0;
+ fNextWidth = m_pVT->GetWordWidth(*pNextWord);
+ }
+ if (CPVT_WordInfo* pWord =
+ (CPVT_WordInfo*)m_pSection->m_WordArray.GetAt(w)) {
+ pWord->fWordTail = 0;
+ FX_FLOAT fWordWidth = m_pVT->GetWordWidth(*pWord);
+ FX_FLOAT fWordAscent = m_pVT->GetWordAscent(*pWord);
+ FX_FLOAT fWordDescent = m_pVT->GetWordDescent(*pWord);
+ x = (FX_FLOAT)(fNodeWidth * (w + nStart + 0.5) - fWordWidth * PVT_HALF);
+ pWord->fWordX = x;
+ pWord->fWordY = y;
+ if (w == 0) {
+ pLine->m_LineInfo.fLineX = x;
+ }
+ if (w != m_pSection->m_WordArray.GetSize() - 1)
+ pWord->fWordTail =
+ (fNodeWidth - (fWordWidth + fNextWidth) * PVT_HALF > 0
+ ? fNodeWidth - (fWordWidth + fNextWidth) * PVT_HALF
+ : 0);
+ else {
+ pWord->fWordTail = 0;
+ }
+ x += fWordWidth;
+ fLineAscent = FPDF_MAX(fLineAscent, fWordAscent);
+ fLineDescent = FPDF_MIN(fLineDescent, fWordDescent);
+ }
+ }
+ pLine->m_LineInfo.nBeginWordIndex = 0;
+ pLine->m_LineInfo.nEndWordIndex = m_pSection->m_WordArray.GetSize() - 1;
+ pLine->m_LineInfo.fLineY = y;
+ pLine->m_LineInfo.fLineWidth = x - pLine->m_LineInfo.fLineX;
+ pLine->m_LineInfo.fLineAscent = fLineAscent;
+ pLine->m_LineInfo.fLineDescent = fLineDescent;
+ y += (-fLineDescent);
+ }
+ return m_rcRet = CPVT_FloatRect(0, 0, x, y);
+}
+CPVT_Size CTypeset::GetEditSize(FX_FLOAT fFontSize) {
+ ASSERT(m_pSection != NULL);
+ ASSERT(m_pVT != NULL);
+ SplitLines(FALSE, fFontSize);
+ return CPVT_Size(m_rcRet.Width(), m_rcRet.Height());
+}
+CPVT_FloatRect CTypeset::Typeset() {
+ ASSERT(m_pSection != NULL);
+ ASSERT(m_pVT != NULL);
+ m_pSection->m_LineArray.Empty();
+ SplitLines(TRUE, 0.0f);
+ m_pSection->m_LineArray.Clear();
+ OutputLines();
+ return m_rcRet;
}
static int special_chars[128] = {
- 0x0000, 0x000C, 0x0008, 0x000C, 0x0008, 0x0000, 0x0020, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0008, 0x0008, 0x0000, 0x0010, 0x0000, 0x0000, 0x0028,
- 0x000C, 0x0008, 0x0000, 0x0000, 0x0028, 0x0028, 0x0028, 0x0028,
- 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002,
- 0x0002, 0x0002, 0x0008, 0x0008, 0x0000, 0x0000, 0x0000, 0x0008,
- 0x0000, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001,
- 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001,
- 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001,
- 0x0001, 0x0001, 0x0001, 0x000C, 0x0000, 0x0008, 0x0000, 0x0000,
- 0x0000, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001,
- 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001,
- 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001,
- 0x0001, 0x0001, 0x0001, 0x000C, 0x0000, 0x0008, 0x0000, 0x0000,
+ 0x0000, 0x000C, 0x0008, 0x000C, 0x0008, 0x0000, 0x0020, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0008, 0x0008, 0x0000,
+ 0x0010, 0x0000, 0x0000, 0x0028, 0x000C, 0x0008, 0x0000, 0x0000, 0x0028,
+ 0x0028, 0x0028, 0x0028, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002,
+ 0x0002, 0x0002, 0x0002, 0x0002, 0x0008, 0x0008, 0x0000, 0x0000, 0x0000,
+ 0x0008, 0x0000, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001,
+ 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001,
+ 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001,
+ 0x0001, 0x000C, 0x0000, 0x0008, 0x0000, 0x0000, 0x0000, 0x0001, 0x0001,
+ 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001,
+ 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001,
+ 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x000C, 0x0000, 0x0008,
+ 0x0000, 0x0000,
};
-static FX_BOOL IsLatin(FX_WORD word)
-{
- if (word <= 0x007F) {
- if (special_chars[word] & 0x0001) {
- return TRUE;
- }
- }
- if ((word >= 0x00C0 && word <= 0x00FF) ||
- (word >= 0x0100 && word <= 0x024F) ||
- (word >= 0x1E00 && word <= 0x1EFF) ||
- (word >= 0x2C60 && word <= 0x2C7F) ||
- (word >= 0xA720 && word <= 0xA7FF) ||
- (word >= 0xFF21 && word <= 0xFF3A) ||
- (word >= 0xFF41 && word <= 0xFF5A)) {
- return TRUE;
- }
- return FALSE;
-}
-static FX_BOOL IsDigit(FX_DWORD word)
-{
- return (word >= 0x0030 && word <= 0x0039) ? TRUE : FALSE;
-}
-static FX_BOOL IsCJK(FX_DWORD word)
-{
- if ((word >= 0x1100 && word <= 0x11FF) ||
- (word >= 0x2E80 && word <= 0x2FFF) ||
- (word >= 0x3040 && word <= 0x9FBF) ||
- (word >= 0xAC00 && word <= 0xD7AF) ||
- (word >= 0xF900 && word <= 0xFAFF) ||
- (word >= 0xFE30 && word <= 0xFE4F) ||
- (word >= 0x20000 && word <= 0x2A6DF) ||
- (word >= 0x2F800 && word <= 0x2FA1F)) {
- return TRUE;
- }
- if (word >= 0x3000 && word <= 0x303F) {
- if (word == 0x3005 || word == 0x3006 || word == 0x3021 || word == 0x3022 ||
- word == 0x3023 || word == 0x3024 || word == 0x3025 || word == 0x3026 ||
- word == 0x3027 || word == 0x3028 || word == 0x3029 || word == 0x3031 ||
- word == 0x3032 || word == 0x3033 || word == 0x3034 || word == 0x3035) {
- return TRUE;
- }
- return FALSE;
- }
- if (word >= 0xFF66 && word <= 0xFF9D) {
- return TRUE;
+static FX_BOOL IsLatin(FX_WORD word) {
+ if (word <= 0x007F) {
+ if (special_chars[word] & 0x0001) {
+ return TRUE;
+ }
+ }
+ if ((word >= 0x00C0 && word <= 0x00FF) ||
+ (word >= 0x0100 && word <= 0x024F) ||
+ (word >= 0x1E00 && word <= 0x1EFF) ||
+ (word >= 0x2C60 && word <= 0x2C7F) ||
+ (word >= 0xA720 && word <= 0xA7FF) ||
+ (word >= 0xFF21 && word <= 0xFF3A) ||
+ (word >= 0xFF41 && word <= 0xFF5A)) {
+ return TRUE;
+ }
+ return FALSE;
+}
+static FX_BOOL IsDigit(FX_DWORD word) {
+ return (word >= 0x0030 && word <= 0x0039) ? TRUE : FALSE;
+}
+static FX_BOOL IsCJK(FX_DWORD word) {
+ if ((word >= 0x1100 && word <= 0x11FF) ||
+ (word >= 0x2E80 && word <= 0x2FFF) ||
+ (word >= 0x3040 && word <= 0x9FBF) ||
+ (word >= 0xAC00 && word <= 0xD7AF) ||
+ (word >= 0xF900 && word <= 0xFAFF) ||
+ (word >= 0xFE30 && word <= 0xFE4F) ||
+ (word >= 0x20000 && word <= 0x2A6DF) ||
+ (word >= 0x2F800 && word <= 0x2FA1F)) {
+ return TRUE;
+ }
+ if (word >= 0x3000 && word <= 0x303F) {
+ if (word == 0x3005 || word == 0x3006 || word == 0x3021 || word == 0x3022 ||
+ word == 0x3023 || word == 0x3024 || word == 0x3025 || word == 0x3026 ||
+ word == 0x3027 || word == 0x3028 || word == 0x3029 || word == 0x3031 ||
+ word == 0x3032 || word == 0x3033 || word == 0x3034 || word == 0x3035) {
+ return TRUE;
}
return FALSE;
+ }
+ if (word >= 0xFF66 && word <= 0xFF9D) {
+ return TRUE;
+ }
+ return FALSE;
+}
+static FX_BOOL IsPunctuation(FX_DWORD word) {
+ if (word <= 0x007F) {
+ if ((special_chars[word] >> 3) & 1) {
+ return TRUE;
+ }
+ } else if (word >= 0x0080 && word <= 0x00FF) {
+ if (word == 0x0082 || word == 0x0084 || word == 0x0085 || word == 0x0091 ||
+ word == 0x0092 || word == 0x0093 || word <= 0x0094 || word == 0x0096 ||
+ word == 0x00B4 || word == 0x00B8) {
+ return TRUE;
+ }
+ } else if (word >= 0x2000 && word <= 0x206F) {
+ if (word == 0x2010 || word == 0x2011 || word == 0x2012 || word == 0x2013 ||
+ word == 0x2018 || word == 0x2019 || word == 0x201A || word == 0x201B ||
+ word == 0x201C || word == 0x201D || word == 0x201E || word == 0x201F ||
+ word == 0x2032 || word == 0x2033 || word == 0x2034 || word == 0x2035 ||
+ word == 0x2036 || word == 0x2037 || word == 0x203C || word == 0x203D ||
+ word == 0x203E || word == 0x2044) {
+ return TRUE;
+ }
+ } else if (word >= 0x3000 && word <= 0x303F) {
+ if (word == 0x3001 || word == 0x3002 || word == 0x3003 || word == 0x3005 ||
+ word == 0x3009 || word == 0x300A || word == 0x300B || word == 0x300C ||
+ word == 0x300D || word == 0x300F || word == 0x300E || word == 0x3010 ||
+ word == 0x3011 || word == 0x3014 || word == 0x3015 || word == 0x3016 ||
+ word == 0x3017 || word == 0x3018 || word == 0x3019 || word == 0x301A ||
+ word == 0x301B || word == 0x301D || word == 0x301E || word == 0x301F) {
+ return TRUE;
+ }
+ } else if (word >= 0xFE50 && word <= 0xFE6F) {
+ if ((word >= 0xFE50 && word <= 0xFE5E) || word == 0xFE63) {
+ return TRUE;
+ }
+ } else if (word >= 0xFF00 && word <= 0xFFEF) {
+ if (word == 0xFF01 || word == 0xFF02 || word == 0xFF07 || word == 0xFF08 ||
+ word == 0xFF09 || word == 0xFF0C || word == 0xFF0E || word == 0xFF0F ||
+ word == 0xFF1A || word == 0xFF1B || word == 0xFF1F || word == 0xFF3B ||
+ word == 0xFF3D || word == 0xFF40 || word == 0xFF5B || word == 0xFF5C ||
+ word == 0xFF5D || word == 0xFF61 || word == 0xFF62 || word == 0xFF63 ||
+ word == 0xFF64 || word == 0xFF65 || word == 0xFF9E || word == 0xFF9F) {
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+static FX_BOOL IsConnectiveSymbol(FX_DWORD word) {
+ if (word <= 0x007F) {
+ if ((special_chars[word] >> 5) & 1) {
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+static FX_BOOL IsOpenStylePunctuation(FX_DWORD word) {
+ if (word <= 0x007F) {
+ if ((special_chars[word] >> 2) & 1) {
+ return TRUE;
+ }
+ } else if (word == 0x300A || word == 0x300C || word == 0x300E ||
+ word == 0x3010 || word == 0x3014 || word == 0x3016 ||
+ word == 0x3018 || word == 0x301A || word == 0xFF08 ||
+ word == 0xFF3B || word == 0xFF5B || word == 0xFF62) {
+ return TRUE;
+ }
+ return FALSE;
+}
+static FX_BOOL IsCurrencySymbol(FX_WORD word) {
+ if (word == 0x0024 || word == 0x0080 || word == 0x00A2 || word == 0x00A3 ||
+ word == 0x00A4 || word == 0x00A5 || (word >= 0x20A0 && word <= 0x20CF) ||
+ word == 0xFE69 || word == 0xFF04 || word == 0xFFE0 || word == 0xFFE1 ||
+ word == 0xFFE5 || word == 0xFFE6) {
+ return TRUE;
+ }
+ return FALSE;
}
-static FX_BOOL IsPunctuation(FX_DWORD word)
-{
- if (word <= 0x007F) {
- if ((special_chars[word] >> 3) & 1) {
- return TRUE;
- }
- } else if (word >= 0x0080 && word <= 0x00FF) {
- if (word == 0x0082 || word == 0x0084 || word == 0x0085 || word == 0x0091 ||
- word == 0x0092 || word == 0x0093 || word <= 0x0094 || word == 0x0096 ||
- word == 0x00B4 || word == 0x00B8) {
- return TRUE;
- }
- } else if (word >= 0x2000 && word <= 0x206F) {
- if (word == 0x2010 || word == 0x2011 || word == 0x2012 || word == 0x2013 ||
- word == 0x2018 || word == 0x2019 || word == 0x201A || word == 0x201B ||
- word == 0x201C || word == 0x201D || word == 0x201E || word == 0x201F ||
- word == 0x2032 || word == 0x2033 || word == 0x2034 || word == 0x2035 ||
- word == 0x2036 || word == 0x2037 || word == 0x203C || word == 0x203D ||
- word == 0x203E || word == 0x2044) {
- return TRUE;
- }
- } else if (word >= 0x3000 && word <= 0x303F) {
- if (word == 0x3001 || word == 0x3002 || word == 0x3003 || word == 0x3005 ||
- word == 0x3009 || word == 0x300A || word == 0x300B || word == 0x300C ||
- word == 0x300D || word == 0x300F || word == 0x300E || word == 0x3010 ||
- word == 0x3011 || word == 0x3014 || word == 0x3015 || word == 0x3016 ||
- word == 0x3017 || word == 0x3018 || word == 0x3019 || word == 0x301A ||
- word == 0x301B || word == 0x301D || word == 0x301E || word == 0x301F) {
- return TRUE;
- }
- } else if (word >= 0xFE50 && word <= 0xFE6F) {
- if ((word >= 0xFE50 && word <= 0xFE5E) || word == 0xFE63) {
- return TRUE;
- }
- } else if (word >= 0xFF00 && word <= 0xFFEF) {
- if (word == 0xFF01 || word == 0xFF02 || word == 0xFF07 || word == 0xFF08 ||
- word == 0xFF09 || word == 0xFF0C || word == 0xFF0E || word == 0xFF0F ||
- word == 0xFF1A || word == 0xFF1B || word == 0xFF1F || word == 0xFF3B ||
- word == 0xFF3D || word == 0xFF40 || word == 0xFF5B || word == 0xFF5C ||
- word == 0xFF5D || word == 0xFF61 || word == 0xFF62 || word == 0xFF63 ||
- word == 0xFF64 || word == 0xFF65 || word == 0xFF9E || word == 0xFF9F) {
- return TRUE;
- }
- }
- return FALSE;
+static FX_BOOL IsPrefixSymbol(FX_WORD word) {
+ if (IsCurrencySymbol(word)) {
+ return TRUE;
+ }
+ if (word == 0x2116) {
+ return TRUE;
+ }
+ return FALSE;
}
-static FX_BOOL IsConnectiveSymbol(FX_DWORD word)
-{
- if (word <= 0x007F) {
- if ((special_chars[word] >> 5) & 1) {
- return TRUE;
- }
- }
- return FALSE;
+static FX_BOOL IsSpace(FX_WORD word) {
+ return (word == 0x0020 || word == 0x3000) ? TRUE : FALSE;
}
-static FX_BOOL IsOpenStylePunctuation(FX_DWORD word)
-{
- if (word <= 0x007F) {
- if ((special_chars[word] >> 2) & 1) {
- return TRUE;
- }
- } else if (word == 0x300A || word == 0x300C || word == 0x300E || word == 0x3010 ||
- word == 0x3014 || word == 0x3016 || word == 0x3018 || word == 0x301A ||
- word == 0xFF08 || word == 0xFF3B || word == 0xFF5B || word == 0xFF62) {
- return TRUE;
- }
+static FX_BOOL NeedDivision(FX_WORD prevWord, FX_WORD curWord) {
+ if ((IsLatin(prevWord) || IsDigit(prevWord)) &&
+ (IsLatin(curWord) || IsDigit(curWord))) {
return FALSE;
-}
-static FX_BOOL IsCurrencySymbol(FX_WORD word)
-{
- if (word == 0x0024 || word == 0x0080 || word == 0x00A2 || word == 0x00A3 ||
- word == 0x00A4 || word == 0x00A5 || (word >= 0x20A0 && word <= 0x20CF) ||
- word == 0xFE69 || word == 0xFF04 || word == 0xFFE0 || word == 0xFFE1 ||
- word == 0xFFE5 || word == 0xFFE6) {
- return TRUE;
- }
+ }
+ if (IsSpace(curWord) || IsPunctuation(curWord)) {
return FALSE;
-}
-static FX_BOOL IsPrefixSymbol(FX_WORD word)
-{
- if (IsCurrencySymbol(word)) {
- return TRUE;
- }
- if (word == 0x2116) {
- return TRUE;
- }
+ }
+ if (IsConnectiveSymbol(prevWord) || IsConnectiveSymbol(curWord)) {
return FALSE;
-}
-static FX_BOOL IsSpace(FX_WORD word)
-{
- return (word == 0x0020 || word == 0x3000) ? TRUE : FALSE;
-}
-static FX_BOOL NeedDivision(FX_WORD prevWord, FX_WORD curWord)
-{
- if ((IsLatin(prevWord) || IsDigit(prevWord)) && (IsLatin(curWord) || IsDigit(curWord))) {
- return FALSE;
- }
- if (IsSpace(curWord) || IsPunctuation(curWord)) {
- return FALSE;
- }
- if (IsConnectiveSymbol(prevWord) || IsConnectiveSymbol(curWord)) {
- return FALSE;
- }
- if (IsSpace(prevWord) || IsPunctuation(prevWord)) {
- return TRUE;
- }
- if (IsPrefixSymbol(prevWord)) {
- return FALSE;
- }
- if (IsPrefixSymbol(curWord) || IsCJK(curWord)) {
- return TRUE;
- }
- if (IsCJK(prevWord)) {
- return TRUE;
- }
+ }
+ if (IsSpace(prevWord) || IsPunctuation(prevWord)) {
+ return TRUE;
+ }
+ if (IsPrefixSymbol(prevWord)) {
return FALSE;
-}
-void CTypeset::SplitLines(FX_BOOL bTypeset, FX_FLOAT fFontSize)
-{
- ASSERT(m_pVT != NULL);
- ASSERT(m_pSection != NULL);
- int32_t nLineHead = 0;
- int32_t nLineTail = 0;
- FX_FLOAT fMaxX = 0.0f, fMaxY = 0.0f;
- FX_FLOAT fLineWidth = 0.0f, fBackupLineWidth = 0.0f;
- FX_FLOAT fLineAscent = 0.0f, fBackupLineAscent = 0.0f;
- FX_FLOAT fLineDescent = 0.0f, fBackupLineDescent = 0.0f;
- int32_t nWordStartPos = 0;
- FX_BOOL bFullWord = FALSE;
- int32_t nLineFullWordIndex = 0;
- int32_t nCharIndex = 0;
- CPVT_LineInfo line;
- FX_FLOAT fWordWidth = 0;
- FX_FLOAT fTypesetWidth = FPDF_MAX(m_pVT->GetPlateWidth() - m_pVT->GetLineIndent(m_pSection->m_SecInfo), 0.0f);
- int32_t nTotalWords = m_pSection->m_WordArray.GetSize();
- FX_BOOL bOpened = FALSE;
- if (nTotalWords > 0) {
- int32_t i = 0;
- while (i < nTotalWords) {
- CPVT_WordInfo * pWord = m_pSection->m_WordArray.GetAt(i);
- CPVT_WordInfo* pOldWord = pWord;
- if (i > 0) {
- pOldWord = m_pSection->m_WordArray.GetAt(i - 1);
- }
- if (pWord) {
- if (bTypeset) {
- fLineAscent = FPDF_MAX(fLineAscent, m_pVT->GetWordAscent(*pWord, TRUE));
- fLineDescent = FPDF_MIN(fLineDescent, m_pVT->GetWordDescent(*pWord, TRUE));
- fWordWidth = m_pVT->GetWordWidth(*pWord);
- } else {
- fLineAscent = FPDF_MAX(fLineAscent, m_pVT->GetWordAscent(*pWord, fFontSize));
- fLineDescent = FPDF_MIN(fLineDescent, m_pVT->GetWordDescent(*pWord, fFontSize));
- fWordWidth = m_pVT->GetWordWidth(pWord->nFontIndex,
- pWord->Word,
- m_pVT->m_wSubWord,
- m_pVT->m_fCharSpace,
- m_pVT->m_nHorzScale,
- fFontSize,
- pWord->fWordTail,
- 0);
- }
- if (!bOpened) {
- if (IsOpenStylePunctuation(pWord->Word)) {
- bOpened = TRUE;
- bFullWord = TRUE;
- } else if (pOldWord != NULL) {
- if (NeedDivision(pOldWord->Word, pWord->Word)) {
- bFullWord = TRUE;
- }
- }
- } else {
- if (!IsSpace(pWord->Word) && !IsOpenStylePunctuation(pWord->Word)) {
- bOpened = FALSE;
- }
- }
- if (bFullWord) {
- bFullWord = FALSE;
- if (nCharIndex > 0) {
- nLineFullWordIndex ++;
- }
- nWordStartPos = i;
- fBackupLineWidth = fLineWidth;
- fBackupLineAscent = fLineAscent;
- fBackupLineDescent = fLineDescent;
- }
- nCharIndex++;
- }
- if (m_pVT->m_bLimitWidth && fTypesetWidth > 0 &&
- fLineWidth + fWordWidth > fTypesetWidth) {
- if (nLineFullWordIndex > 0) {
- i = nWordStartPos;
- fLineWidth = fBackupLineWidth;
- fLineAscent = fBackupLineAscent;
- fLineDescent = fBackupLineDescent;
- }
- if (nCharIndex == 1) {
- fLineWidth = fWordWidth;
- i++;
- }
- nLineTail = i - 1;
- if (bTypeset) {
- line.nBeginWordIndex = nLineHead;
- line.nEndWordIndex = nLineTail;
- line.nTotalWord = nLineTail - nLineHead + 1;
- line.fLineWidth = fLineWidth;
- line.fLineAscent = fLineAscent;
- line.fLineDescent = fLineDescent;
- m_pSection->AddLine(line);
- }
- fMaxY += (fLineAscent + m_pVT->GetLineLeading(m_pSection->m_SecInfo));
- fMaxY += (-fLineDescent);
- fMaxX = FPDF_MAX(fLineWidth, fMaxX);
- nLineHead = i;
- fLineWidth = 0.0f;
- fLineAscent = 0.0f;
- fLineDescent = 0.0f;
- nCharIndex = 0;
- nLineFullWordIndex = 0;
- bFullWord = FALSE;
- } else {
- fLineWidth += fWordWidth;
- i++;
- }
- }
- if (nLineHead <= nTotalWords - 1) {
- nLineTail = nTotalWords - 1;
- if (bTypeset) {
- line.nBeginWordIndex = nLineHead;
- line.nEndWordIndex = nLineTail;
- line.nTotalWord = nLineTail - nLineHead + 1;
- line.fLineWidth = fLineWidth;
- line.fLineAscent = fLineAscent;
- line.fLineDescent = fLineDescent;
- m_pSection->AddLine(line);
- }
- fMaxY += (fLineAscent + m_pVT->GetLineLeading(m_pSection->m_SecInfo));
- fMaxY += (-fLineDescent);
- fMaxX = FPDF_MAX(fLineWidth, fMaxX);
- }
- } else {
+ }
+ if (IsPrefixSymbol(curWord) || IsCJK(curWord)) {
+ return TRUE;
+ }
+ if (IsCJK(prevWord)) {
+ return TRUE;
+ }
+ return FALSE;
+}
+void CTypeset::SplitLines(FX_BOOL bTypeset, FX_FLOAT fFontSize) {
+ ASSERT(m_pVT != NULL);
+ ASSERT(m_pSection != NULL);
+ int32_t nLineHead = 0;
+ int32_t nLineTail = 0;
+ FX_FLOAT fMaxX = 0.0f, fMaxY = 0.0f;
+ FX_FLOAT fLineWidth = 0.0f, fBackupLineWidth = 0.0f;
+ FX_FLOAT fLineAscent = 0.0f, fBackupLineAscent = 0.0f;
+ FX_FLOAT fLineDescent = 0.0f, fBackupLineDescent = 0.0f;
+ int32_t nWordStartPos = 0;
+ FX_BOOL bFullWord = FALSE;
+ int32_t nLineFullWordIndex = 0;
+ int32_t nCharIndex = 0;
+ CPVT_LineInfo line;
+ FX_FLOAT fWordWidth = 0;
+ FX_FLOAT fTypesetWidth = FPDF_MAX(
+ m_pVT->GetPlateWidth() - m_pVT->GetLineIndent(m_pSection->m_SecInfo),
+ 0.0f);
+ int32_t nTotalWords = m_pSection->m_WordArray.GetSize();
+ FX_BOOL bOpened = FALSE;
+ if (nTotalWords > 0) {
+ int32_t i = 0;
+ while (i < nTotalWords) {
+ CPVT_WordInfo* pWord = m_pSection->m_WordArray.GetAt(i);
+ CPVT_WordInfo* pOldWord = pWord;
+ if (i > 0) {
+ pOldWord = m_pSection->m_WordArray.GetAt(i - 1);
+ }
+ if (pWord) {
if (bTypeset) {
- fLineAscent = m_pVT->GetLineAscent(m_pSection->m_SecInfo);
- fLineDescent = m_pVT->GetLineDescent(m_pSection->m_SecInfo);
+ fLineAscent =
+ FPDF_MAX(fLineAscent, m_pVT->GetWordAscent(*pWord, TRUE));
+ fLineDescent =
+ FPDF_MIN(fLineDescent, m_pVT->GetWordDescent(*pWord, TRUE));
+ fWordWidth = m_pVT->GetWordWidth(*pWord);
} else {
- fLineAscent = m_pVT->GetFontAscent(m_pVT->GetDefaultFontIndex(), fFontSize);
- fLineDescent = m_pVT->GetFontDescent(m_pVT->GetDefaultFontIndex(), fFontSize);
- }
+ fLineAscent =
+ FPDF_MAX(fLineAscent, m_pVT->GetWordAscent(*pWord, fFontSize));
+ fLineDescent =
+ FPDF_MIN(fLineDescent, m_pVT->GetWordDescent(*pWord, fFontSize));
+ fWordWidth = m_pVT->GetWordWidth(
+ pWord->nFontIndex, pWord->Word, m_pVT->m_wSubWord,
+ m_pVT->m_fCharSpace, m_pVT->m_nHorzScale, fFontSize,
+ pWord->fWordTail, 0);
+ }
+ if (!bOpened) {
+ if (IsOpenStylePunctuation(pWord->Word)) {
+ bOpened = TRUE;
+ bFullWord = TRUE;
+ } else if (pOldWord != NULL) {
+ if (NeedDivision(pOldWord->Word, pWord->Word)) {
+ bFullWord = TRUE;
+ }
+ }
+ } else {
+ if (!IsSpace(pWord->Word) && !IsOpenStylePunctuation(pWord->Word)) {
+ bOpened = FALSE;
+ }
+ }
+ if (bFullWord) {
+ bFullWord = FALSE;
+ if (nCharIndex > 0) {
+ nLineFullWordIndex++;
+ }
+ nWordStartPos = i;
+ fBackupLineWidth = fLineWidth;
+ fBackupLineAscent = fLineAscent;
+ fBackupLineDescent = fLineDescent;
+ }
+ nCharIndex++;
+ }
+ if (m_pVT->m_bLimitWidth && fTypesetWidth > 0 &&
+ fLineWidth + fWordWidth > fTypesetWidth) {
+ if (nLineFullWordIndex > 0) {
+ i = nWordStartPos;
+ fLineWidth = fBackupLineWidth;
+ fLineAscent = fBackupLineAscent;
+ fLineDescent = fBackupLineDescent;
+ }
+ if (nCharIndex == 1) {
+ fLineWidth = fWordWidth;
+ i++;
+ }
+ nLineTail = i - 1;
if (bTypeset) {
- line.nBeginWordIndex = -1;
- line.nEndWordIndex = -1;
- line.nTotalWord = 0;
- line.fLineWidth = 0;
- line.fLineAscent = fLineAscent;
- line.fLineDescent = fLineDescent;
- m_pSection->AddLine(line);
- }
- fMaxY += (m_pVT->GetLineLeading(m_pSection->m_SecInfo) + fLineAscent + (-fLineDescent));
- }
- m_rcRet = CPVT_FloatRect(0, 0, fMaxX, fMaxY);
-}
-void CTypeset::OutputLines()
-{
- ASSERT(m_pVT != NULL);
- ASSERT(m_pSection != NULL);
- FX_FLOAT fMinX = 0.0f, fMinY = 0.0f, fMaxX = 0.0f, fMaxY = 0.0f;
- FX_FLOAT fPosX = 0.0f, fPosY = 0.0f;
- FX_FLOAT fLineIndent = m_pVT->GetLineIndent(m_pSection->m_SecInfo);
- FX_FLOAT fTypesetWidth = FPDF_MAX(m_pVT->GetPlateWidth() - fLineIndent, 0.0f);
- switch (m_pVT->GetAlignment(m_pSection->m_SecInfo)) {
- default:
- case 0:
- fMinX = 0.0f;
+ line.nBeginWordIndex = nLineHead;
+ line.nEndWordIndex = nLineTail;
+ line.nTotalWord = nLineTail - nLineHead + 1;
+ line.fLineWidth = fLineWidth;
+ line.fLineAscent = fLineAscent;
+ line.fLineDescent = fLineDescent;
+ m_pSection->AddLine(line);
+ }
+ fMaxY += (fLineAscent + m_pVT->GetLineLeading(m_pSection->m_SecInfo));
+ fMaxY += (-fLineDescent);
+ fMaxX = FPDF_MAX(fLineWidth, fMaxX);
+ nLineHead = i;
+ fLineWidth = 0.0f;
+ fLineAscent = 0.0f;
+ fLineDescent = 0.0f;
+ nCharIndex = 0;
+ nLineFullWordIndex = 0;
+ bFullWord = FALSE;
+ } else {
+ fLineWidth += fWordWidth;
+ i++;
+ }
+ }
+ if (nLineHead <= nTotalWords - 1) {
+ nLineTail = nTotalWords - 1;
+ if (bTypeset) {
+ line.nBeginWordIndex = nLineHead;
+ line.nEndWordIndex = nLineTail;
+ line.nTotalWord = nLineTail - nLineHead + 1;
+ line.fLineWidth = fLineWidth;
+ line.fLineAscent = fLineAscent;
+ line.fLineDescent = fLineDescent;
+ m_pSection->AddLine(line);
+ }
+ fMaxY += (fLineAscent + m_pVT->GetLineLeading(m_pSection->m_SecInfo));
+ fMaxY += (-fLineDescent);
+ fMaxX = FPDF_MAX(fLineWidth, fMaxX);
+ }
+ } else {
+ if (bTypeset) {
+ fLineAscent = m_pVT->GetLineAscent(m_pSection->m_SecInfo);
+ fLineDescent = m_pVT->GetLineDescent(m_pSection->m_SecInfo);
+ } else {
+ fLineAscent =
+ m_pVT->GetFontAscent(m_pVT->GetDefaultFontIndex(), fFontSize);
+ fLineDescent =
+ m_pVT->GetFontDescent(m_pVT->GetDefaultFontIndex(), fFontSize);
+ }
+ if (bTypeset) {
+ line.nBeginWordIndex = -1;
+ line.nEndWordIndex = -1;
+ line.nTotalWord = 0;
+ line.fLineWidth = 0;
+ line.fLineAscent = fLineAscent;
+ line.fLineDescent = fLineDescent;
+ m_pSection->AddLine(line);
+ }
+ fMaxY += (m_pVT->GetLineLeading(m_pSection->m_SecInfo) + fLineAscent +
+ (-fLineDescent));
+ }
+ m_rcRet = CPVT_FloatRect(0, 0, fMaxX, fMaxY);
+}
+void CTypeset::OutputLines() {
+ ASSERT(m_pVT != NULL);
+ ASSERT(m_pSection != NULL);
+ FX_FLOAT fMinX = 0.0f, fMinY = 0.0f, fMaxX = 0.0f, fMaxY = 0.0f;
+ FX_FLOAT fPosX = 0.0f, fPosY = 0.0f;
+ FX_FLOAT fLineIndent = m_pVT->GetLineIndent(m_pSection->m_SecInfo);
+ FX_FLOAT fTypesetWidth = FPDF_MAX(m_pVT->GetPlateWidth() - fLineIndent, 0.0f);
+ switch (m_pVT->GetAlignment(m_pSection->m_SecInfo)) {
+ default:
+ case 0:
+ fMinX = 0.0f;
+ break;
+ case 1:
+ fMinX = (fTypesetWidth - m_rcRet.Width()) * PVT_HALF;
+ break;
+ case 2:
+ fMinX = fTypesetWidth - m_rcRet.Width();
+ break;
+ }
+ fMaxX = fMinX + m_rcRet.Width();
+ fMinY = 0.0f;
+ fMaxY = m_rcRet.Height();
+ int32_t nTotalLines = m_pSection->m_LineArray.GetSize();
+ if (nTotalLines > 0) {
+ m_pSection->m_SecInfo.nTotalLine = nTotalLines;
+ for (int32_t l = 0; l < nTotalLines; l++) {
+ if (CLine* pLine = m_pSection->m_LineArray.GetAt(l)) {
+ switch (m_pVT->GetAlignment(m_pSection->m_SecInfo)) {
+ default:
+ case 0:
+ fPosX = 0;
break;
- case 1:
- fMinX = (fTypesetWidth - m_rcRet.Width()) * PVT_HALF;
+ case 1:
+ fPosX = (fTypesetWidth - pLine->m_LineInfo.fLineWidth) * PVT_HALF;
break;
- case 2:
- fMinX = fTypesetWidth - m_rcRet.Width();
+ case 2:
+ fPosX = fTypesetWidth - pLine->m_LineInfo.fLineWidth;
break;
- }
- fMaxX = fMinX + m_rcRet.Width();
- fMinY = 0.0f;
- fMaxY = m_rcRet.Height();
- int32_t nTotalLines = m_pSection->m_LineArray.GetSize();
- if (nTotalLines > 0) {
- m_pSection->m_SecInfo.nTotalLine = nTotalLines;
- for (int32_t l = 0; l < nTotalLines; l++) {
- if (CLine * pLine = m_pSection->m_LineArray.GetAt(l)) {
- switch (m_pVT->GetAlignment(m_pSection->m_SecInfo)) {
- default:
- case 0:
- fPosX = 0;
- break;
- case 1:
- fPosX = (fTypesetWidth - pLine->m_LineInfo.fLineWidth) * PVT_HALF;
- break;
- case 2:
- fPosX = fTypesetWidth - pLine->m_LineInfo.fLineWidth;
- break;
- }
- fPosX += fLineIndent;
- fPosY += m_pVT->GetLineLeading(m_pSection->m_SecInfo);
- fPosY += pLine->m_LineInfo.fLineAscent;
- pLine->m_LineInfo.fLineX = fPosX - fMinX;
- pLine->m_LineInfo.fLineY = fPosY - fMinY;
- for (int32_t w = pLine->m_LineInfo.nBeginWordIndex; w <= pLine->m_LineInfo.nEndWordIndex; w++) {
- if (CPVT_WordInfo * pWord = m_pSection->m_WordArray.GetAt(w)) {
- pWord->fWordX = fPosX - fMinX;
- if (pWord->pWordProps) {
- switch (pWord->pWordProps->nScriptType) {
- default:
- case PVTWORD_SCRIPT_NORMAL:
- pWord->fWordY = fPosY - fMinY;
- break;
- case PVTWORD_SCRIPT_SUPER:
- pWord->fWordY = fPosY - m_pVT->GetWordAscent(*pWord) - fMinY;
- break;
- case PVTWORD_SCRIPT_SUB:
- pWord->fWordY = fPosY - m_pVT->GetWordDescent(*pWord) - fMinY;
- break;
- }
- } else {
- pWord->fWordY = fPosY - fMinY;
- }
- fPosX += m_pVT->GetWordWidth(*pWord);
- }
- }
- fPosY += (-pLine->m_LineInfo.fLineDescent);
- }
}
- }
- m_rcRet = CPVT_FloatRect(fMinX, fMinY, fMaxX, fMaxY);
-}
-CPDF_VariableText::CPDF_VariableText() :
- m_nLimitChar(0),
- m_nCharArray(0),
- m_bMultiLine(FALSE),
- m_bLimitWidth(FALSE),
- m_bAutoFontSize(FALSE),
- m_nAlignment(0),
- m_fLineLeading(0.0f),
- m_fCharSpace(0.0f),
- m_nHorzScale(100),
- m_wSubWord(0),
- m_fFontSize(0.0f),
- m_bInitial(FALSE),
- m_bRichText(FALSE),
- m_pVTProvider(NULL),
- m_pVTIterator(NULL)
-{
-}
-CPDF_VariableText::~CPDF_VariableText()
-{
- delete m_pVTIterator;
- m_pVTIterator = NULL;
- ResetAll();
-}
-void CPDF_VariableText::Initialize()
-{
- if (!m_bInitial) {
- CPVT_SectionInfo secinfo;
- if (m_bRichText) {
- secinfo.pSecProps = new CPVT_SecProps(0.0f, 0.0f, 0);
- secinfo.pWordProps = new CPVT_WordProps(GetDefaultFontIndex(), PVT_DEFAULT_FONTSIZE, 0, 0, 0);
- }
- CPVT_WordPlace place;
- place.nSecIndex = 0;
- AddSection(place, secinfo);
- CPVT_LineInfo lineinfo;
- lineinfo.fLineAscent = GetFontAscent(GetDefaultFontIndex(), GetFontSize());
- lineinfo.fLineDescent = GetFontDescent(GetDefaultFontIndex(), GetFontSize());
- AddLine(place, lineinfo);
- if (CSection * pSection = m_SectionArray.GetAt(0)) {
- pSection->ResetLinePlace();
- }
- m_bInitial = TRUE;
- }
-}
-void CPDF_VariableText::ResetAll()
-{
- m_bInitial = FALSE;
- ResetSectionArray();
-}
-CPVT_WordPlace CPDF_VariableText::InsertWord(const CPVT_WordPlace & place, FX_WORD word, int32_t charset,
- const CPVT_WordProps * pWordProps)
-{
- int32_t nTotlaWords = GetTotalWords();
- if (m_nLimitChar > 0 && nTotlaWords >= m_nLimitChar) {
- return place;
- }
- if (m_nCharArray > 0 && nTotlaWords >= m_nCharArray) {
- return place;
- }
- CPVT_WordPlace newplace = place;
- newplace.nWordIndex ++;
- if (m_bRichText) {
- CPVT_WordProps * pNewProps = pWordProps ? new CPVT_WordProps(*pWordProps) : new CPVT_WordProps();
- pNewProps->nFontIndex = GetWordFontIndex(word, charset, pWordProps->nFontIndex);
- return AddWord(newplace, CPVT_WordInfo(word, charset, -1, pNewProps));
- }
- int32_t nFontIndex = GetSubWord() > 0 ? GetDefaultFontIndex() : GetWordFontIndex(word, charset, GetDefaultFontIndex());
- return AddWord(newplace, CPVT_WordInfo(word, charset, nFontIndex, NULL));
-}
-CPVT_WordPlace CPDF_VariableText::InsertSection(const CPVT_WordPlace & place, const CPVT_SecProps * pSecProps,
- const CPVT_WordProps * pWordProps)
-{
- int32_t nTotlaWords = GetTotalWords();
- if (m_nLimitChar > 0 && nTotlaWords >= m_nLimitChar) {
- return place;
- }
- if (m_nCharArray > 0 && nTotlaWords >= m_nCharArray) {
- return place;
- }
- if (!m_bMultiLine) {
- return place;
- }
- CPVT_WordPlace wordplace = place;
- UpdateWordPlace(wordplace);
- CPVT_WordPlace newplace = place;
- if (CSection * pSection = m_SectionArray.GetAt(wordplace.nSecIndex)) {
- CPVT_WordPlace NewPlace(wordplace.nSecIndex + 1, 0, -1);
- CPVT_SectionInfo secinfo;
- if (m_bRichText) {
- if (pSecProps) {
- secinfo.pSecProps = new CPVT_SecProps(*pSecProps);
- }
- if (pWordProps) {
- secinfo.pWordProps = new CPVT_WordProps(*pWordProps);
- }
- }
- AddSection(NewPlace, secinfo);
- newplace = NewPlace;
- if (CSection * pNewSection = m_SectionArray.GetAt(NewPlace.nSecIndex)) {
- for (int32_t w = wordplace.nWordIndex + 1, sz = pSection->m_WordArray.GetSize(); w < sz; w++) {
- if (CPVT_WordInfo * pWord = pSection->m_WordArray.GetAt(w)) {
- NewPlace.nWordIndex++;
- pNewSection->AddWord(NewPlace, *pWord);
- }
+ fPosX += fLineIndent;
+ fPosY += m_pVT->GetLineLeading(m_pSection->m_SecInfo);
+ fPosY += pLine->m_LineInfo.fLineAscent;
+ pLine->m_LineInfo.fLineX = fPosX - fMinX;
+ pLine->m_LineInfo.fLineY = fPosY - fMinY;
+ for (int32_t w = pLine->m_LineInfo.nBeginWordIndex;
+ w <= pLine->m_LineInfo.nEndWordIndex; w++) {
+ if (CPVT_WordInfo* pWord = m_pSection->m_WordArray.GetAt(w)) {
+ pWord->fWordX = fPosX - fMinX;
+ if (pWord->pWordProps) {
+ switch (pWord->pWordProps->nScriptType) {
+ default:
+ case PVTWORD_SCRIPT_NORMAL:
+ pWord->fWordY = fPosY - fMinY;
+ break;
+ case PVTWORD_SCRIPT_SUPER:
+ pWord->fWordY = fPosY - m_pVT->GetWordAscent(*pWord) - fMinY;
+ break;
+ case PVTWORD_SCRIPT_SUB:
+ pWord->fWordY = fPosY - m_pVT->GetWordDescent(*pWord) - fMinY;
+ break;
+ }
+ } else {
+ pWord->fWordY = fPosY - fMinY;
}
- }
- ClearSectionRightWords(wordplace);
- }
- return newplace;
-}
-CPVT_WordPlace CPDF_VariableText::InsertText(const CPVT_WordPlace & place, const FX_WCHAR* text, int32_t charset,
- const CPVT_SecProps * pSecProps, const CPVT_WordProps * pProps)
-{
- CFX_WideString swText = text;
- CPVT_WordPlace wp = place;
- for (int32_t i = 0, sz = swText.GetLength(); i < sz; i++) {
- CPVT_WordPlace oldwp = wp;
- FX_WORD word = swText.GetAt(i);
- switch (word) {
- case 0x0D:
- if (m_bMultiLine) {
- if (swText.GetAt(i + 1) == 0x0A) {
- i += 1;
- }
- wp = InsertSection(wp, pSecProps, pProps);
- }
- break;
- case 0x0A:
- if (m_bMultiLine) {
- if (swText.GetAt(i + 1) == 0x0D) {
- i += 1;
- }
- wp = InsertSection(wp, pSecProps, pProps);
- }
- break;
- case 0x09:
- word = 0x20;
- default:
- wp = InsertWord(wp, word, charset, pProps);
- break;
- }
- if (wp == oldwp) {
- break;
- }
- }
- return wp;
-}
-CPVT_WordPlace CPDF_VariableText::DeleteWords(const CPVT_WordRange & PlaceRange)
-{
- FX_BOOL bLastSecPos = FALSE;
- if (CSection * pSection = m_SectionArray.GetAt(PlaceRange.EndPos.nSecIndex)) {
- bLastSecPos = (PlaceRange.EndPos == pSection->GetEndWordPlace());
- }
- ClearWords(PlaceRange);
- if (PlaceRange.BeginPos.nSecIndex != PlaceRange.EndPos.nSecIndex) {
- ClearEmptySections(PlaceRange);
- if (!bLastSecPos) {
- LinkLatterSection(PlaceRange.BeginPos);
- }
- }
- return PlaceRange.BeginPos;
-}
-CPVT_WordPlace CPDF_VariableText::DeleteWord(const CPVT_WordPlace & place)
-{
- return ClearRightWord(AjustLineHeader(place, TRUE));
-}
-CPVT_WordPlace CPDF_VariableText::BackSpaceWord(const CPVT_WordPlace & place)
-{
- return ClearLeftWord(AjustLineHeader(place, TRUE));
-}
-void CPDF_VariableText::SetText(const FX_WCHAR* text, int32_t charset, const CPVT_SecProps * pSecProps,
- const CPVT_WordProps * pWordProps)
-{
- DeleteWords(CPVT_WordRange(GetBeginWordPlace(), GetEndWordPlace()));
- CFX_WideString swText = text;
- CPVT_WordPlace wp(0, 0, -1);
+ fPosX += m_pVT->GetWordWidth(*pWord);
+ }
+ }
+ fPosY += (-pLine->m_LineInfo.fLineDescent);
+ }
+ }
+ }
+ m_rcRet = CPVT_FloatRect(fMinX, fMinY, fMaxX, fMaxY);
+}
+CPDF_VariableText::CPDF_VariableText()
+ : m_nLimitChar(0),
+ m_nCharArray(0),
+ m_bMultiLine(FALSE),
+ m_bLimitWidth(FALSE),
+ m_bAutoFontSize(FALSE),
+ m_nAlignment(0),
+ m_fLineLeading(0.0f),
+ m_fCharSpace(0.0f),
+ m_nHorzScale(100),
+ m_wSubWord(0),
+ m_fFontSize(0.0f),
+ m_bInitial(FALSE),
+ m_bRichText(FALSE),
+ m_pVTProvider(NULL),
+ m_pVTIterator(NULL) {}
+CPDF_VariableText::~CPDF_VariableText() {
+ delete m_pVTIterator;
+ m_pVTIterator = NULL;
+ ResetAll();
+}
+void CPDF_VariableText::Initialize() {
+ if (!m_bInitial) {
CPVT_SectionInfo secinfo;
if (m_bRichText) {
- if (pSecProps) {
- secinfo.pSecProps = new CPVT_SecProps(*pSecProps);
- }
- if (pWordProps) {
- secinfo.pWordProps = new CPVT_WordProps(*pWordProps);
- }
- }
- if (CSection * pSection = m_SectionArray.GetAt(0)) {
- pSection->m_SecInfo = secinfo;
- }
- int32_t nCharCount = 0;
- for (int32_t i = 0, sz = swText.GetLength(); i < sz; i++) {
- if (m_nLimitChar > 0 && nCharCount >= m_nLimitChar) {
- break;
- }
- if (m_nCharArray > 0 && nCharCount >= m_nCharArray) {
- break;
- }
- FX_WORD word = swText.GetAt(i);
- switch (word) {
- case 0x0D:
- if (m_bMultiLine) {
- if (swText.GetAt(i + 1) == 0x0A) {
- i += 1;
- }
- wp.nSecIndex ++;
- wp.nLineIndex = 0;
- wp.nWordIndex = -1;
- AddSection(wp, secinfo);
- }
- break;
- case 0x0A:
- if (m_bMultiLine) {
- if (swText.GetAt(i + 1) == 0x0D) {
- i += 1;
- }
- wp.nSecIndex ++;
- wp.nLineIndex = 0;
- wp.nWordIndex = -1;
- AddSection(wp, secinfo);
- }
- break;
- case 0x09:
- word = 0x20;
- default:
- wp = InsertWord(wp, word, charset, pWordProps);
- break;
- }
- nCharCount++;
- }
-}
-void CPDF_VariableText::UpdateWordPlace(CPVT_WordPlace & place) const
-{
- if (place.nSecIndex < 0) {
- place = GetBeginWordPlace();
- }
- if (place.nSecIndex >= m_SectionArray.GetSize()) {
- place = GetEndWordPlace();
- }
- place = AjustLineHeader(place, TRUE);
- if (CSection * pSection = m_SectionArray.GetAt(place.nSecIndex)) {
- pSection->UpdateWordPlace(place);
- }
-}
-int32_t CPDF_VariableText::WordPlaceToWordIndex(const CPVT_WordPlace & place) const
-{
- CPVT_WordPlace newplace = place;
- UpdateWordPlace(newplace);
- int32_t nIndex = 0;
- int32_t i = 0;
- int32_t sz = 0;
- for (i = 0, sz = m_SectionArray.GetSize(); i < sz && i < newplace.nSecIndex; i++) {
- if (CSection * pSection = m_SectionArray.GetAt(i)) {
- nIndex += pSection->m_WordArray.GetSize();
- if (i != m_SectionArray.GetSize() - 1) {
- nIndex += PVT_RETURN_LENGTH;
- }
- }
- }
- if (i >= 0 && i < m_SectionArray.GetSize()) {
- nIndex += newplace.nWordIndex + PVT_RETURN_LENGTH;
- }
- return nIndex;
-}
-CPVT_WordPlace CPDF_VariableText::WordIndexToWordPlace(int32_t index) const
-{
- CPVT_WordPlace place = GetBeginWordPlace();
- int32_t nOldIndex = 0 , nIndex = 0;
- FX_BOOL bFind = FALSE;
- for (int32_t i = 0, sz = m_SectionArray.GetSize(); i < sz; i++) {
- if (CSection * pSection = m_SectionArray.GetAt(i)) {
- nIndex += pSection->m_WordArray.GetSize();
- if (nIndex == index) {
- place = pSection->GetEndWordPlace();
- bFind = TRUE;
- break;
- } else if (nIndex > index) {
- place.nSecIndex = i;
- place.nWordIndex = index - nOldIndex - 1;
- pSection->UpdateWordPlace(place);
- bFind = TRUE;
- break;
- }
- if (i != m_SectionArray.GetSize() - 1) {
- nIndex += PVT_RETURN_LENGTH;
- }
- nOldIndex = nIndex;
- }
- }
- if (!bFind) {
- place = GetEndWordPlace();
+ secinfo.pSecProps = new CPVT_SecProps(0.0f, 0.0f, 0);
+ secinfo.pWordProps = new CPVT_WordProps(GetDefaultFontIndex(),
+ PVT_DEFAULT_FONTSIZE, 0, 0, 0);
}
+ CPVT_WordPlace place;
+ place.nSecIndex = 0;
+ AddSection(place, secinfo);
+ CPVT_LineInfo lineinfo;
+ lineinfo.fLineAscent = GetFontAscent(GetDefaultFontIndex(), GetFontSize());
+ lineinfo.fLineDescent =
+ GetFontDescent(GetDefaultFontIndex(), GetFontSize());
+ AddLine(place, lineinfo);
+ if (CSection* pSection = m_SectionArray.GetAt(0)) {
+ pSection->ResetLinePlace();
+ }
+ m_bInitial = TRUE;
+ }
+}
+void CPDF_VariableText::ResetAll() {
+ m_bInitial = FALSE;
+ ResetSectionArray();
+}
+CPVT_WordPlace CPDF_VariableText::InsertWord(const CPVT_WordPlace& place,
+ FX_WORD word,
+ int32_t charset,
+ const CPVT_WordProps* pWordProps) {
+ int32_t nTotlaWords = GetTotalWords();
+ if (m_nLimitChar > 0 && nTotlaWords >= m_nLimitChar) {
return place;
-}
-CPVT_WordPlace CPDF_VariableText::GetBeginWordPlace() const
-{
- return m_bInitial ? CPVT_WordPlace(0, 0, -1) : CPVT_WordPlace();
-}
-CPVT_WordPlace CPDF_VariableText::GetEndWordPlace() const
-{
- if (CSection * pSection = m_SectionArray.GetAt(m_SectionArray.GetSize() - 1)) {
- return pSection->GetEndWordPlace();
- }
- return CPVT_WordPlace();
-}
-CPVT_WordPlace CPDF_VariableText::GetPrevWordPlace(const CPVT_WordPlace & place) const
-{
- if( place.nSecIndex < 0) {
- return GetBeginWordPlace();
- }
- if (place.nSecIndex >= m_SectionArray.GetSize()) {
- return GetEndWordPlace();
- }
- if (CSection * pSection = m_SectionArray.GetAt(place.nSecIndex)) {
- if (place.WordCmp(pSection->GetBeginWordPlace()) <= 0) {
- if (CSection * pPrevSection = m_SectionArray.GetAt(place.nSecIndex - 1)) {
- return pPrevSection->GetEndWordPlace();
- }
- return GetBeginWordPlace();
- }
- return pSection->GetPrevWordPlace(place);
- }
+ }
+ if (m_nCharArray > 0 && nTotlaWords >= m_nCharArray) {
return place;
-}
-CPVT_WordPlace CPDF_VariableText::GetNextWordPlace(const CPVT_WordPlace & place) const
-{
- if (place.nSecIndex < 0) {
- return GetBeginWordPlace();
- }
- if (place.nSecIndex >= m_SectionArray.GetSize()) {
- return GetEndWordPlace();
- }
- if (CSection * pSection = m_SectionArray.GetAt(place.nSecIndex)) {
- if (place.WordCmp(pSection->GetEndWordPlace()) >= 0) {
- if (CSection * pNextSection = m_SectionArray.GetAt(place.nSecIndex + 1)) {
- return pNextSection->GetBeginWordPlace();
- }
- return GetEndWordPlace();
- }
- return pSection->GetNextWordPlace(place);
- }
+ }
+ CPVT_WordPlace newplace = place;
+ newplace.nWordIndex++;
+ if (m_bRichText) {
+ CPVT_WordProps* pNewProps =
+ pWordProps ? new CPVT_WordProps(*pWordProps) : new CPVT_WordProps();
+ pNewProps->nFontIndex =
+ GetWordFontIndex(word, charset, pWordProps->nFontIndex);
+ return AddWord(newplace, CPVT_WordInfo(word, charset, -1, pNewProps));
+ }
+ int32_t nFontIndex =
+ GetSubWord() > 0 ? GetDefaultFontIndex()
+ : GetWordFontIndex(word, charset, GetDefaultFontIndex());
+ return AddWord(newplace, CPVT_WordInfo(word, charset, nFontIndex, NULL));
+}
+CPVT_WordPlace CPDF_VariableText::InsertSection(
+ const CPVT_WordPlace& place,
+ const CPVT_SecProps* pSecProps,
+ const CPVT_WordProps* pWordProps) {
+ int32_t nTotlaWords = GetTotalWords();
+ if (m_nLimitChar > 0 && nTotlaWords >= m_nLimitChar) {
return place;
-}
-CPVT_WordPlace CPDF_VariableText::SearchWordPlace(const CPDF_Point & point) const
-{
- CPDF_Point pt = OutToIn(point);
- CPVT_WordPlace place = GetBeginWordPlace();
- int32_t nLeft = 0;
- int32_t nRight = m_SectionArray.GetSize() - 1;
- int32_t nMid = m_SectionArray.GetSize() / 2;
- FX_BOOL bUp = TRUE;
- FX_BOOL bDown = TRUE;
- while (nLeft <= nRight) {
- if (CSection * pSection = m_SectionArray.GetAt(nMid)) {
- if (IsFloatBigger(pt.y, pSection->m_SecInfo.rcSection.top)) {
- bUp = FALSE;
- }
- if (IsFloatBigger(pSection->m_SecInfo.rcSection.bottom, pt.y)) {
- bDown = FALSE;
- }
- if (IsFloatSmaller(pt.y, pSection->m_SecInfo.rcSection.top)) {
- nRight = nMid - 1;
- nMid = (nLeft + nRight) / 2;
- continue;
- } else if (IsFloatBigger(pt.y, pSection->m_SecInfo.rcSection.bottom)) {
- nLeft = nMid + 1;
- nMid = (nLeft + nRight) / 2;
- continue;
- } else {
- place = pSection->SearchWordPlace(
- CPDF_Point(pt.x - pSection->m_SecInfo.rcSection.left, pt.y - pSection->m_SecInfo.rcSection.top)
- );
- place.nSecIndex = nMid;
- return place;
- }
- } else {
- break;
- }
- }
- if (bUp) {
- place = GetBeginWordPlace();
- }
- if (bDown) {
- place = GetEndWordPlace();
- }
+ }
+ if (m_nCharArray > 0 && nTotlaWords >= m_nCharArray) {
return place;
-}
-CPVT_WordPlace CPDF_VariableText::GetUpWordPlace(const CPVT_WordPlace & place, const CPDF_Point & point) const
-{
- if (CSection * pSection = m_SectionArray.GetAt(place.nSecIndex)) {
- CPVT_WordPlace temp = place;
- CPDF_Point pt = OutToIn(point);
- if (temp.nLineIndex-- > 0) {
- return pSection->SearchWordPlace(pt.x - pSection->m_SecInfo.rcSection.left, temp);
- }
- if (temp.nSecIndex-- > 0) {
- if (CSection * pLastSection = m_SectionArray.GetAt(temp.nSecIndex)) {
- temp.nLineIndex = pLastSection->m_LineArray.GetSize() - 1;
- return pLastSection->SearchWordPlace(pt.x - pLastSection->m_SecInfo.rcSection.left, temp);
- }
- }
- }
+ }
+ if (!m_bMultiLine) {
return place;
-}
-CPVT_WordPlace CPDF_VariableText::GetDownWordPlace(const CPVT_WordPlace & place, const CPDF_Point & point) const
-{
- if (CSection * pSection = m_SectionArray.GetAt(place.nSecIndex)) {
- CPVT_WordPlace temp = place;
- CPDF_Point pt = OutToIn(point);
- if (temp.nLineIndex++ < pSection->m_LineArray.GetSize() - 1) {
- return pSection->SearchWordPlace(pt.x - pSection->m_SecInfo.rcSection.left, temp);
- }
- if (temp.nSecIndex++ < m_SectionArray.GetSize() - 1) {
- if (CSection * pNextSection = m_SectionArray.GetAt(temp.nSecIndex)) {
- temp.nLineIndex = 0;
- return pNextSection->SearchWordPlace(pt.x - pSection->m_SecInfo.rcSection.left, temp);
- }
- }
- }
- return place;
-}
-CPVT_WordPlace CPDF_VariableText::GetLineBeginPlace(const CPVT_WordPlace & place) const
-{
- return CPVT_WordPlace(place.nSecIndex, place.nLineIndex, -1);
-}
-CPVT_WordPlace CPDF_VariableText::GetLineEndPlace(const CPVT_WordPlace & place) const
-{
- if (CSection* pSection = m_SectionArray.GetAt(place.nSecIndex)) {
- if (CLine* pLine = pSection->m_LineArray.GetAt(place.nLineIndex))
- return pLine->GetEndWordPlace();
- }
- return place;
-}
-CPVT_WordPlace CPDF_VariableText::GetSectionBeginPlace(const CPVT_WordPlace & place) const
-{
- return CPVT_WordPlace(place.nSecIndex, 0, -1);
-}
-CPVT_WordPlace CPDF_VariableText::GetSectionEndPlace(const CPVT_WordPlace & place) const
-{
- if (CSection * pSection = m_SectionArray.GetAt(place.nSecIndex)) {
- return pSection->GetEndWordPlace();
- }
- return place;
-}
-int32_t CPDF_VariableText::GetTotalWords() const
-{
- int32_t nTotal = 0;
- for (int32_t i = 0, sz = m_SectionArray.GetSize(); i < sz; i++)
- if (CSection * pSection = m_SectionArray.GetAt(i)) {
- nTotal += (pSection->m_WordArray.GetSize() + PVT_RETURN_LENGTH);
- }
- return nTotal - PVT_RETURN_LENGTH;
-}
-void CPDF_VariableText::ResetSectionArray()
-{
- for (int32_t s = 0, sz = m_SectionArray.GetSize(); s < sz; s++) {
- delete m_SectionArray.GetAt(s);
- }
- m_SectionArray.RemoveAll();
-}
-CPVT_WordPlace CPDF_VariableText::AddSection(const CPVT_WordPlace & place, const CPVT_SectionInfo & secinfo)
-{
- if (IsValid() && !m_bMultiLine) {
- return place;
- }
- int32_t nSecIndex = FPDF_MAX(FPDF_MIN(place.nSecIndex, m_SectionArray.GetSize()), 0);
- CSection * pSection = new CSection(this);
+ }
+ CPVT_WordPlace wordplace = place;
+ UpdateWordPlace(wordplace);
+ CPVT_WordPlace newplace = place;
+ if (CSection* pSection = m_SectionArray.GetAt(wordplace.nSecIndex)) {
+ CPVT_WordPlace NewPlace(wordplace.nSecIndex + 1, 0, -1);
+ CPVT_SectionInfo secinfo;
+ if (m_bRichText) {
+ if (pSecProps) {
+ secinfo.pSecProps = new CPVT_SecProps(*pSecProps);
+ }
+ if (pWordProps) {
+ secinfo.pWordProps = new CPVT_WordProps(*pWordProps);
+ }
+ }
+ AddSection(NewPlace, secinfo);
+ newplace = NewPlace;
+ if (CSection* pNewSection = m_SectionArray.GetAt(NewPlace.nSecIndex)) {
+ for (int32_t w = wordplace.nWordIndex + 1,
+ sz = pSection->m_WordArray.GetSize();
+ w < sz; w++) {
+ if (CPVT_WordInfo* pWord = pSection->m_WordArray.GetAt(w)) {
+ NewPlace.nWordIndex++;
+ pNewSection->AddWord(NewPlace, *pWord);
+ }
+ }
+ }
+ ClearSectionRightWords(wordplace);
+ }
+ return newplace;
+}
+CPVT_WordPlace CPDF_VariableText::InsertText(const CPVT_WordPlace& place,
+ const FX_WCHAR* text,
+ int32_t charset,
+ const CPVT_SecProps* pSecProps,
+ const CPVT_WordProps* pProps) {
+ CFX_WideString swText = text;
+ CPVT_WordPlace wp = place;
+ for (int32_t i = 0, sz = swText.GetLength(); i < sz; i++) {
+ CPVT_WordPlace oldwp = wp;
+ FX_WORD word = swText.GetAt(i);
+ switch (word) {
+ case 0x0D:
+ if (m_bMultiLine) {
+ if (swText.GetAt(i + 1) == 0x0A) {
+ i += 1;
+ }
+ wp = InsertSection(wp, pSecProps, pProps);
+ }
+ break;
+ case 0x0A:
+ if (m_bMultiLine) {
+ if (swText.GetAt(i + 1) == 0x0D) {
+ i += 1;
+ }
+ wp = InsertSection(wp, pSecProps, pProps);
+ }
+ break;
+ case 0x09:
+ word = 0x20;
+ default:
+ wp = InsertWord(wp, word, charset, pProps);
+ break;
+ }
+ if (wp == oldwp) {
+ break;
+ }
+ }
+ return wp;
+}
+CPVT_WordPlace CPDF_VariableText::DeleteWords(
+ const CPVT_WordRange& PlaceRange) {
+ FX_BOOL bLastSecPos = FALSE;
+ if (CSection* pSection = m_SectionArray.GetAt(PlaceRange.EndPos.nSecIndex)) {
+ bLastSecPos = (PlaceRange.EndPos == pSection->GetEndWordPlace());
+ }
+ ClearWords(PlaceRange);
+ if (PlaceRange.BeginPos.nSecIndex != PlaceRange.EndPos.nSecIndex) {
+ ClearEmptySections(PlaceRange);
+ if (!bLastSecPos) {
+ LinkLatterSection(PlaceRange.BeginPos);
+ }
+ }
+ return PlaceRange.BeginPos;
+}
+CPVT_WordPlace CPDF_VariableText::DeleteWord(const CPVT_WordPlace& place) {
+ return ClearRightWord(AjustLineHeader(place, TRUE));
+}
+CPVT_WordPlace CPDF_VariableText::BackSpaceWord(const CPVT_WordPlace& place) {
+ return ClearLeftWord(AjustLineHeader(place, TRUE));
+}
+void CPDF_VariableText::SetText(const FX_WCHAR* text,
+ int32_t charset,
+ const CPVT_SecProps* pSecProps,
+ const CPVT_WordProps* pWordProps) {
+ DeleteWords(CPVT_WordRange(GetBeginWordPlace(), GetEndWordPlace()));
+ CFX_WideString swText = text;
+ CPVT_WordPlace wp(0, 0, -1);
+ CPVT_SectionInfo secinfo;
+ if (m_bRichText) {
+ if (pSecProps) {
+ secinfo.pSecProps = new CPVT_SecProps(*pSecProps);
+ }
+ if (pWordProps) {
+ secinfo.pWordProps = new CPVT_WordProps(*pWordProps);
+ }
+ }
+ if (CSection* pSection = m_SectionArray.GetAt(0)) {
pSection->m_SecInfo = secinfo;
- pSection->SecPlace.nSecIndex = nSecIndex;
- if (nSecIndex == m_SectionArray.GetSize()) {
- m_SectionArray.Add(pSection);
+ }
+ int32_t nCharCount = 0;
+ for (int32_t i = 0, sz = swText.GetLength(); i < sz; i++) {
+ if (m_nLimitChar > 0 && nCharCount >= m_nLimitChar) {
+ break;
+ }
+ if (m_nCharArray > 0 && nCharCount >= m_nCharArray) {
+ break;
+ }
+ FX_WORD word = swText.GetAt(i);
+ switch (word) {
+ case 0x0D:
+ if (m_bMultiLine) {
+ if (swText.GetAt(i + 1) == 0x0A) {
+ i += 1;
+ }
+ wp.nSecIndex++;
+ wp.nLineIndex = 0;
+ wp.nWordIndex = -1;
+ AddSection(wp, secinfo);
+ }
+ break;
+ case 0x0A:
+ if (m_bMultiLine) {
+ if (swText.GetAt(i + 1) == 0x0D) {
+ i += 1;
+ }
+ wp.nSecIndex++;
+ wp.nLineIndex = 0;
+ wp.nWordIndex = -1;
+ AddSection(wp, secinfo);
+ }
+ break;
+ case 0x09:
+ word = 0x20;
+ default:
+ wp = InsertWord(wp, word, charset, pWordProps);
+ break;
+ }
+ nCharCount++;
+ }
+}
+void CPDF_VariableText::UpdateWordPlace(CPVT_WordPlace& place) const {
+ if (place.nSecIndex < 0) {
+ place = GetBeginWordPlace();
+ }
+ if (place.nSecIndex >= m_SectionArray.GetSize()) {
+ place = GetEndWordPlace();
+ }
+ place = AjustLineHeader(place, TRUE);
+ if (CSection* pSection = m_SectionArray.GetAt(place.nSecIndex)) {
+ pSection->UpdateWordPlace(place);
+ }
+}
+int32_t CPDF_VariableText::WordPlaceToWordIndex(
+ const CPVT_WordPlace& place) const {
+ CPVT_WordPlace newplace = place;
+ UpdateWordPlace(newplace);
+ int32_t nIndex = 0;
+ int32_t i = 0;
+ int32_t sz = 0;
+ for (i = 0, sz = m_SectionArray.GetSize(); i < sz && i < newplace.nSecIndex;
+ i++) {
+ if (CSection* pSection = m_SectionArray.GetAt(i)) {
+ nIndex += pSection->m_WordArray.GetSize();
+ if (i != m_SectionArray.GetSize() - 1) {
+ nIndex += PVT_RETURN_LENGTH;
+ }
+ }
+ }
+ if (i >= 0 && i < m_SectionArray.GetSize()) {
+ nIndex += newplace.nWordIndex + PVT_RETURN_LENGTH;
+ }
+ return nIndex;
+}
+CPVT_WordPlace CPDF_VariableText::WordIndexToWordPlace(int32_t index) const {
+ CPVT_WordPlace place = GetBeginWordPlace();
+ int32_t nOldIndex = 0, nIndex = 0;
+ FX_BOOL bFind = FALSE;
+ for (int32_t i = 0, sz = m_SectionArray.GetSize(); i < sz; i++) {
+ if (CSection* pSection = m_SectionArray.GetAt(i)) {
+ nIndex += pSection->m_WordArray.GetSize();
+ if (nIndex == index) {
+ place = pSection->GetEndWordPlace();
+ bFind = TRUE;
+ break;
+ } else if (nIndex > index) {
+ place.nSecIndex = i;
+ place.nWordIndex = index - nOldIndex - 1;
+ pSection->UpdateWordPlace(place);
+ bFind = TRUE;
+ break;
+ }
+ if (i != m_SectionArray.GetSize() - 1) {
+ nIndex += PVT_RETURN_LENGTH;
+ }
+ nOldIndex = nIndex;
+ }
+ }
+ if (!bFind) {
+ place = GetEndWordPlace();
+ }
+ return place;
+}
+CPVT_WordPlace CPDF_VariableText::GetBeginWordPlace() const {
+ return m_bInitial ? CPVT_WordPlace(0, 0, -1) : CPVT_WordPlace();
+}
+CPVT_WordPlace CPDF_VariableText::GetEndWordPlace() const {
+ if (CSection* pSection = m_SectionArray.GetAt(m_SectionArray.GetSize() - 1)) {
+ return pSection->GetEndWordPlace();
+ }
+ return CPVT_WordPlace();
+}
+CPVT_WordPlace CPDF_VariableText::GetPrevWordPlace(
+ const CPVT_WordPlace& place) const {
+ if (place.nSecIndex < 0) {
+ return GetBeginWordPlace();
+ }
+ if (place.nSecIndex >= m_SectionArray.GetSize()) {
+ return GetEndWordPlace();
+ }
+ if (CSection* pSection = m_SectionArray.GetAt(place.nSecIndex)) {
+ if (place.WordCmp(pSection->GetBeginWordPlace()) <= 0) {
+ if (CSection* pPrevSection = m_SectionArray.GetAt(place.nSecIndex - 1)) {
+ return pPrevSection->GetEndWordPlace();
+ }
+ return GetBeginWordPlace();
+ }
+ return pSection->GetPrevWordPlace(place);
+ }
+ return place;
+}
+CPVT_WordPlace CPDF_VariableText::GetNextWordPlace(
+ const CPVT_WordPlace& place) const {
+ if (place.nSecIndex < 0) {
+ return GetBeginWordPlace();
+ }
+ if (place.nSecIndex >= m_SectionArray.GetSize()) {
+ return GetEndWordPlace();
+ }
+ if (CSection* pSection = m_SectionArray.GetAt(place.nSecIndex)) {
+ if (place.WordCmp(pSection->GetEndWordPlace()) >= 0) {
+ if (CSection* pNextSection = m_SectionArray.GetAt(place.nSecIndex + 1)) {
+ return pNextSection->GetBeginWordPlace();
+ }
+ return GetEndWordPlace();
+ }
+ return pSection->GetNextWordPlace(place);
+ }
+ return place;
+}
+CPVT_WordPlace CPDF_VariableText::SearchWordPlace(
+ const CPDF_Point& point) const {
+ CPDF_Point pt = OutToIn(point);
+ CPVT_WordPlace place = GetBeginWordPlace();
+ int32_t nLeft = 0;
+ int32_t nRight = m_SectionArray.GetSize() - 1;
+ int32_t nMid = m_SectionArray.GetSize() / 2;
+ FX_BOOL bUp = TRUE;
+ FX_BOOL bDown = TRUE;
+ while (nLeft <= nRight) {
+ if (CSection* pSection = m_SectionArray.GetAt(nMid)) {
+ if (IsFloatBigger(pt.y, pSection->m_SecInfo.rcSection.top)) {
+ bUp = FALSE;
+ }
+ if (IsFloatBigger(pSection->m_SecInfo.rcSection.bottom, pt.y)) {
+ bDown = FALSE;
+ }
+ if (IsFloatSmaller(pt.y, pSection->m_SecInfo.rcSection.top)) {
+ nRight = nMid - 1;
+ nMid = (nLeft + nRight) / 2;
+ continue;
+ } else if (IsFloatBigger(pt.y, pSection->m_SecInfo.rcSection.bottom)) {
+ nLeft = nMid + 1;
+ nMid = (nLeft + nRight) / 2;
+ continue;
+ } else {
+ place = pSection->SearchWordPlace(
+ CPDF_Point(pt.x - pSection->m_SecInfo.rcSection.left,
+ pt.y - pSection->m_SecInfo.rcSection.top));
+ place.nSecIndex = nMid;
+ return place;
+ }
} else {
- m_SectionArray.InsertAt(nSecIndex, pSection);
- }
+ break;
+ }
+ }
+ if (bUp) {
+ place = GetBeginWordPlace();
+ }
+ if (bDown) {
+ place = GetEndWordPlace();
+ }
+ return place;
+}
+CPVT_WordPlace CPDF_VariableText::GetUpWordPlace(
+ const CPVT_WordPlace& place,
+ const CPDF_Point& point) const {
+ if (CSection* pSection = m_SectionArray.GetAt(place.nSecIndex)) {
+ CPVT_WordPlace temp = place;
+ CPDF_Point pt = OutToIn(point);
+ if (temp.nLineIndex-- > 0) {
+ return pSection->SearchWordPlace(
+ pt.x - pSection->m_SecInfo.rcSection.left, temp);
+ }
+ if (temp.nSecIndex-- > 0) {
+ if (CSection* pLastSection = m_SectionArray.GetAt(temp.nSecIndex)) {
+ temp.nLineIndex = pLastSection->m_LineArray.GetSize() - 1;
+ return pLastSection->SearchWordPlace(
+ pt.x - pLastSection->m_SecInfo.rcSection.left, temp);
+ }
+ }
+ }
+ return place;
+}
+CPVT_WordPlace CPDF_VariableText::GetDownWordPlace(
+ const CPVT_WordPlace& place,
+ const CPDF_Point& point) const {
+ if (CSection* pSection = m_SectionArray.GetAt(place.nSecIndex)) {
+ CPVT_WordPlace temp = place;
+ CPDF_Point pt = OutToIn(point);
+ if (temp.nLineIndex++ < pSection->m_LineArray.GetSize() - 1) {
+ return pSection->SearchWordPlace(
+ pt.x - pSection->m_SecInfo.rcSection.left, temp);
+ }
+ if (temp.nSecIndex++ < m_SectionArray.GetSize() - 1) {
+ if (CSection* pNextSection = m_SectionArray.GetAt(temp.nSecIndex)) {
+ temp.nLineIndex = 0;
+ return pNextSection->SearchWordPlace(
+ pt.x - pSection->m_SecInfo.rcSection.left, temp);
+ }
+ }
+ }
+ return place;
+}
+CPVT_WordPlace CPDF_VariableText::GetLineBeginPlace(
+ const CPVT_WordPlace& place) const {
+ return CPVT_WordPlace(place.nSecIndex, place.nLineIndex, -1);
+}
+CPVT_WordPlace CPDF_VariableText::GetLineEndPlace(
+ const CPVT_WordPlace& place) const {
+ if (CSection* pSection = m_SectionArray.GetAt(place.nSecIndex)) {
+ if (CLine* pLine = pSection->m_LineArray.GetAt(place.nLineIndex))
+ return pLine->GetEndWordPlace();
+ }
+ return place;
+}
+CPVT_WordPlace CPDF_VariableText::GetSectionBeginPlace(
+ const CPVT_WordPlace& place) const {
+ return CPVT_WordPlace(place.nSecIndex, 0, -1);
+}
+CPVT_WordPlace CPDF_VariableText::GetSectionEndPlace(
+ const CPVT_WordPlace& place) const {
+ if (CSection* pSection = m_SectionArray.GetAt(place.nSecIndex)) {
+ return pSection->GetEndWordPlace();
+ }
+ return place;
+}
+int32_t CPDF_VariableText::GetTotalWords() const {
+ int32_t nTotal = 0;
+ for (int32_t i = 0, sz = m_SectionArray.GetSize(); i < sz; i++)
+ if (CSection* pSection = m_SectionArray.GetAt(i)) {
+ nTotal += (pSection->m_WordArray.GetSize() + PVT_RETURN_LENGTH);
+ }
+ return nTotal - PVT_RETURN_LENGTH;
+}
+void CPDF_VariableText::ResetSectionArray() {
+ for (int32_t s = 0, sz = m_SectionArray.GetSize(); s < sz; s++) {
+ delete m_SectionArray.GetAt(s);
+ }
+ m_SectionArray.RemoveAll();
+}
+CPVT_WordPlace CPDF_VariableText::AddSection(const CPVT_WordPlace& place,
+ const CPVT_SectionInfo& secinfo) {
+ if (IsValid() && !m_bMultiLine) {
return place;
-}
-CPVT_WordPlace CPDF_VariableText::AddLine(const CPVT_WordPlace & place, const CPVT_LineInfo & lineinfo)
-{
- if (m_SectionArray.IsEmpty()) {
- return place;
- }
- if (CSection * pSection = m_SectionArray.GetAt(place.nSecIndex)) {
- return pSection->AddLine(lineinfo);
- }
+ }
+ int32_t nSecIndex =
+ FPDF_MAX(FPDF_MIN(place.nSecIndex, m_SectionArray.GetSize()), 0);
+ CSection* pSection = new CSection(this);
+ pSection->m_SecInfo = secinfo;
+ pSection->SecPlace.nSecIndex = nSecIndex;
+ if (nSecIndex == m_SectionArray.GetSize()) {
+ m_SectionArray.Add(pSection);
+ } else {
+ m_SectionArray.InsertAt(nSecIndex, pSection);
+ }
+ return place;
+}
+CPVT_WordPlace CPDF_VariableText::AddLine(const CPVT_WordPlace& place,
+ const CPVT_LineInfo& lineinfo) {
+ if (m_SectionArray.IsEmpty()) {
return place;
-}
-CPVT_WordPlace CPDF_VariableText::AddWord(const CPVT_WordPlace & place, const CPVT_WordInfo & wordinfo)
-{
- if (m_SectionArray.GetSize() <= 0) {
- return place;
- }
- CPVT_WordPlace newplace = place;
- newplace.nSecIndex = FPDF_MAX(FPDF_MIN(newplace.nSecIndex, m_SectionArray.GetSize() - 1), 0);
- if (CSection * pSection = m_SectionArray.GetAt(newplace.nSecIndex)) {
- return pSection->AddWord(newplace, wordinfo);
- }
+ }
+ if (CSection* pSection = m_SectionArray.GetAt(place.nSecIndex)) {
+ return pSection->AddLine(lineinfo);
+ }
+ return place;
+}
+CPVT_WordPlace CPDF_VariableText::AddWord(const CPVT_WordPlace& place,
+ const CPVT_WordInfo& wordinfo) {
+ if (m_SectionArray.GetSize() <= 0) {
return place;
-}
-FX_BOOL CPDF_VariableText::GetWordInfo(const CPVT_WordPlace & place, CPVT_WordInfo & wordinfo)
-{
- if (CSection * pSection = m_SectionArray.GetAt(place.nSecIndex)) {
- if (CPVT_WordInfo * pWord = pSection->m_WordArray.GetAt(place.nWordIndex)) {
- wordinfo = *pWord;
- return TRUE;
- }
- }
- return FALSE;
-}
-FX_BOOL CPDF_VariableText::SetWordInfo(const CPVT_WordPlace & place, const CPVT_WordInfo & wordinfo)
-{
- if (CSection * pSection = m_SectionArray.GetAt(place.nSecIndex)) {
- if (CPVT_WordInfo * pWord = pSection->m_WordArray.GetAt(place.nWordIndex)) {
- *pWord = wordinfo;
- return TRUE;
- }
- }
- return FALSE;
-}
-FX_BOOL CPDF_VariableText::GetLineInfo(const CPVT_WordPlace & place, CPVT_LineInfo & lineinfo)
-{
- if (CSection * pSection = m_SectionArray.GetAt(place.nSecIndex)) {
- if (CLine * pLine = pSection->m_LineArray.GetAt(place.nLineIndex)) {
- lineinfo = pLine->m_LineInfo;
- return TRUE;
- }
- }
- return FALSE;
-}
-FX_BOOL CPDF_VariableText::GetSectionInfo(const CPVT_WordPlace & place, CPVT_SectionInfo & secinfo)
-{
- if (CSection * pSection = m_SectionArray.GetAt(place.nSecIndex)) {
- secinfo = pSection->m_SecInfo;
- return TRUE;
- }
+ }
+ CPVT_WordPlace newplace = place;
+ newplace.nSecIndex =
+ FPDF_MAX(FPDF_MIN(newplace.nSecIndex, m_SectionArray.GetSize() - 1), 0);
+ if (CSection* pSection = m_SectionArray.GetAt(newplace.nSecIndex)) {
+ return pSection->AddWord(newplace, wordinfo);
+ }
+ return place;
+}
+FX_BOOL CPDF_VariableText::GetWordInfo(const CPVT_WordPlace& place,
+ CPVT_WordInfo& wordinfo) {
+ if (CSection* pSection = m_SectionArray.GetAt(place.nSecIndex)) {
+ if (CPVT_WordInfo* pWord = pSection->m_WordArray.GetAt(place.nWordIndex)) {
+ wordinfo = *pWord;
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+FX_BOOL CPDF_VariableText::SetWordInfo(const CPVT_WordPlace& place,
+ const CPVT_WordInfo& wordinfo) {
+ if (CSection* pSection = m_SectionArray.GetAt(place.nSecIndex)) {
+ if (CPVT_WordInfo* pWord = pSection->m_WordArray.GetAt(place.nWordIndex)) {
+ *pWord = wordinfo;
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+FX_BOOL CPDF_VariableText::GetLineInfo(const CPVT_WordPlace& place,
+ CPVT_LineInfo& lineinfo) {
+ if (CSection* pSection = m_SectionArray.GetAt(place.nSecIndex)) {
+ if (CLine* pLine = pSection->m_LineArray.GetAt(place.nLineIndex)) {
+ lineinfo = pLine->m_LineInfo;
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+FX_BOOL CPDF_VariableText::GetSectionInfo(const CPVT_WordPlace& place,
+ CPVT_SectionInfo& secinfo) {
+ if (CSection* pSection = m_SectionArray.GetAt(place.nSecIndex)) {
+ secinfo = pSection->m_SecInfo;
+ return TRUE;
+ }
+ return FALSE;
+}
+CPDF_Rect CPDF_VariableText::GetContentRect() const {
+ return InToOut(CPDF_EditContainer::GetContentRect());
+}
+FX_FLOAT CPDF_VariableText::GetWordFontSize(const CPVT_WordInfo& WordInfo,
+ FX_BOOL bFactFontSize) {
+ return m_bRichText && WordInfo.pWordProps
+ ? (WordInfo.pWordProps->nScriptType == PVTWORD_SCRIPT_NORMAL ||
+ bFactFontSize
+ ? WordInfo.pWordProps->fFontSize
+ : WordInfo.pWordProps->fFontSize * PVT_HALF)
+ : GetFontSize();
+}
+int32_t CPDF_VariableText::GetWordFontIndex(const CPVT_WordInfo& WordInfo) {
+ return m_bRichText && WordInfo.pWordProps ? WordInfo.pWordProps->nFontIndex
+ : WordInfo.nFontIndex;
+}
+FX_FLOAT CPDF_VariableText::GetWordWidth(int32_t nFontIndex,
+ FX_WORD Word,
+ FX_WORD SubWord,
+ FX_FLOAT fCharSpace,
+ int32_t nHorzScale,
+ FX_FLOAT fFontSize,
+ FX_FLOAT fWordTail,
+ int32_t nWordStyle) {
+ return (GetCharWidth(nFontIndex, Word, SubWord, nWordStyle) * fFontSize *
+ PVT_FONTSCALE +
+ fCharSpace) *
+ nHorzScale * PVT_PERCENT +
+ fWordTail;
+}
+FX_FLOAT CPDF_VariableText::GetWordWidth(const CPVT_WordInfo& WordInfo) {
+ return GetWordWidth(
+ GetWordFontIndex(WordInfo), WordInfo.Word, GetSubWord(),
+ GetCharSpace(WordInfo), GetHorzScale(WordInfo), GetWordFontSize(WordInfo),
+ WordInfo.fWordTail,
+ WordInfo.pWordProps ? WordInfo.pWordProps->nWordStyle : 0);
+}
+FX_FLOAT CPDF_VariableText::GetLineAscent(const CPVT_SectionInfo& SecInfo) {
+ return m_bRichText && SecInfo.pWordProps
+ ? GetFontAscent(SecInfo.pWordProps->nFontIndex,
+ SecInfo.pWordProps->fFontSize)
+ : GetFontAscent(GetDefaultFontIndex(), GetFontSize());
+}
+FX_FLOAT CPDF_VariableText::GetLineDescent(const CPVT_SectionInfo& SecInfo) {
+ return m_bRichText && SecInfo.pWordProps
+ ? GetFontDescent(SecInfo.pWordProps->nFontIndex,
+ SecInfo.pWordProps->fFontSize)
+ : GetFontDescent(GetDefaultFontIndex(), GetFontSize());
+}
+FX_FLOAT CPDF_VariableText::GetFontAscent(int32_t nFontIndex,
+ FX_FLOAT fFontSize) {
+ return (FX_FLOAT)GetTypeAscent(nFontIndex) * fFontSize * PVT_FONTSCALE;
+}
+FX_FLOAT CPDF_VariableText::GetFontDescent(int32_t nFontIndex,
+ FX_FLOAT fFontSize) {
+ return (FX_FLOAT)GetTypeDescent(nFontIndex) * fFontSize * PVT_FONTSCALE;
+}
+FX_FLOAT CPDF_VariableText::GetWordAscent(const CPVT_WordInfo& WordInfo,
+ FX_FLOAT fFontSize) {
+ return GetFontAscent(GetWordFontIndex(WordInfo), fFontSize);
+}
+FX_FLOAT CPDF_VariableText::GetWordDescent(const CPVT_WordInfo& WordInfo,
+ FX_FLOAT fFontSize) {
+ return GetFontDescent(GetWordFontIndex(WordInfo), fFontSize);
+}
+FX_FLOAT CPDF_VariableText::GetWordAscent(const CPVT_WordInfo& WordInfo,
+ FX_BOOL bFactFontSize) {
+ return GetFontAscent(GetWordFontIndex(WordInfo),
+ GetWordFontSize(WordInfo, bFactFontSize));
+}
+FX_FLOAT CPDF_VariableText::GetWordDescent(const CPVT_WordInfo& WordInfo,
+ FX_BOOL bFactFontSize) {
+ return GetFontDescent(GetWordFontIndex(WordInfo),
+ GetWordFontSize(WordInfo, bFactFontSize));
+}
+FX_FLOAT CPDF_VariableText::GetLineLeading(const CPVT_SectionInfo& SecInfo) {
+ return m_bRichText && SecInfo.pSecProps ? SecInfo.pSecProps->fLineLeading
+ : m_fLineLeading;
+}
+FX_FLOAT CPDF_VariableText::GetLineIndent(const CPVT_SectionInfo& SecInfo) {
+ return m_bRichText && SecInfo.pSecProps ? SecInfo.pSecProps->fLineIndent
+ : 0.0f;
+}
+int32_t CPDF_VariableText::GetAlignment(const CPVT_SectionInfo& SecInfo) {
+ return m_bRichText && SecInfo.pSecProps ? SecInfo.pSecProps->nAlignment
+ : m_nAlignment;
+}
+FX_FLOAT CPDF_VariableText::GetCharSpace(const CPVT_WordInfo& WordInfo) {
+ return m_bRichText && WordInfo.pWordProps ? WordInfo.pWordProps->fCharSpace
+ : m_fCharSpace;
+}
+int32_t CPDF_VariableText::GetHorzScale(const CPVT_WordInfo& WordInfo) {
+ return m_bRichText && WordInfo.pWordProps ? WordInfo.pWordProps->nHorzScale
+ : m_nHorzScale;
+}
+void CPDF_VariableText::ClearSectionRightWords(const CPVT_WordPlace& place) {
+ CPVT_WordPlace wordplace = AjustLineHeader(place, TRUE);
+ if (CSection* pSection = m_SectionArray.GetAt(place.nSecIndex)) {
+ for (int32_t w = pSection->m_WordArray.GetSize() - 1;
+ w > wordplace.nWordIndex; w--) {
+ delete pSection->m_WordArray.GetAt(w);
+ pSection->m_WordArray.RemoveAt(w);
+ }
+ }
+}
+CPVT_WordPlace CPDF_VariableText::AjustLineHeader(const CPVT_WordPlace& place,
+ FX_BOOL bPrevOrNext) const {
+ if (place.nWordIndex < 0 && place.nLineIndex > 0) {
+ return bPrevOrNext ? GetPrevWordPlace(place) : GetNextWordPlace(place);
+ }
+ return place;
+}
+FX_BOOL CPDF_VariableText::ClearEmptySection(const CPVT_WordPlace& place) {
+ if (place.nSecIndex == 0 && m_SectionArray.GetSize() == 1) {
return FALSE;
-}
-CPDF_Rect CPDF_VariableText::GetContentRect() const
-{
- return InToOut(CPDF_EditContainer::GetContentRect());
-}
-FX_FLOAT CPDF_VariableText::GetWordFontSize(const CPVT_WordInfo & WordInfo, FX_BOOL bFactFontSize)
-{
- return m_bRichText && WordInfo.pWordProps ? (WordInfo.pWordProps->nScriptType == PVTWORD_SCRIPT_NORMAL || bFactFontSize ? WordInfo.pWordProps->fFontSize : WordInfo.pWordProps->fFontSize * PVT_HALF) : GetFontSize();
-}
-int32_t CPDF_VariableText::GetWordFontIndex(const CPVT_WordInfo & WordInfo)
-{
- return m_bRichText && WordInfo.pWordProps ? WordInfo.pWordProps->nFontIndex : WordInfo.nFontIndex;
-}
-FX_FLOAT CPDF_VariableText::GetWordWidth(int32_t nFontIndex, FX_WORD Word, FX_WORD SubWord,
- FX_FLOAT fCharSpace, int32_t nHorzScale,
- FX_FLOAT fFontSize, FX_FLOAT fWordTail, int32_t nWordStyle)
-{
- return (GetCharWidth(nFontIndex, Word, SubWord, nWordStyle) * fFontSize * PVT_FONTSCALE + fCharSpace) * nHorzScale * PVT_PERCENT + fWordTail;
-}
-FX_FLOAT CPDF_VariableText::GetWordWidth(const CPVT_WordInfo & WordInfo)
-{
- return GetWordWidth(GetWordFontIndex(WordInfo), WordInfo.Word, GetSubWord(), GetCharSpace(WordInfo), GetHorzScale(WordInfo),
- GetWordFontSize(WordInfo), WordInfo.fWordTail,
- WordInfo.pWordProps ? WordInfo.pWordProps->nWordStyle : 0);
-}
-FX_FLOAT CPDF_VariableText::GetLineAscent(const CPVT_SectionInfo & SecInfo)
-{
- return m_bRichText && SecInfo.pWordProps ? GetFontAscent(SecInfo.pWordProps->nFontIndex, SecInfo.pWordProps->fFontSize) :
- GetFontAscent(GetDefaultFontIndex(), GetFontSize());
-}
-FX_FLOAT CPDF_VariableText::GetLineDescent(const CPVT_SectionInfo & SecInfo)
-{
- return m_bRichText && SecInfo.pWordProps ? GetFontDescent(SecInfo.pWordProps->nFontIndex, SecInfo.pWordProps->fFontSize) :
- GetFontDescent(GetDefaultFontIndex(), GetFontSize());
-}
-FX_FLOAT CPDF_VariableText::GetFontAscent(int32_t nFontIndex, FX_FLOAT fFontSize)
-{
- return (FX_FLOAT)GetTypeAscent(nFontIndex) * fFontSize * PVT_FONTSCALE;
-}
-FX_FLOAT CPDF_VariableText::GetFontDescent(int32_t nFontIndex, FX_FLOAT fFontSize)
-{
- return (FX_FLOAT)GetTypeDescent(nFontIndex) * fFontSize * PVT_FONTSCALE;
-}
-FX_FLOAT CPDF_VariableText::GetWordAscent(const CPVT_WordInfo & WordInfo, FX_FLOAT fFontSize)
-{
- return GetFontAscent(GetWordFontIndex(WordInfo), fFontSize);
-}
-FX_FLOAT CPDF_VariableText::GetWordDescent(const CPVT_WordInfo & WordInfo, FX_FLOAT fFontSize)
-{
- return GetFontDescent(GetWordFontIndex(WordInfo), fFontSize);
-}
-FX_FLOAT CPDF_VariableText::GetWordAscent(const CPVT_WordInfo & WordInfo, FX_BOOL bFactFontSize)
-{
- return GetFontAscent(GetWordFontIndex(WordInfo), GetWordFontSize(WordInfo, bFactFontSize));
-}
-FX_FLOAT CPDF_VariableText::GetWordDescent(const CPVT_WordInfo & WordInfo, FX_BOOL bFactFontSize)
-{
- return GetFontDescent(GetWordFontIndex(WordInfo), GetWordFontSize(WordInfo, bFactFontSize));
-}
-FX_FLOAT CPDF_VariableText::GetLineLeading(const CPVT_SectionInfo & SecInfo)
-{
- return m_bRichText && SecInfo.pSecProps ? SecInfo.pSecProps->fLineLeading : m_fLineLeading;
-}
-FX_FLOAT CPDF_VariableText::GetLineIndent(const CPVT_SectionInfo & SecInfo)
-{
- return m_bRichText && SecInfo.pSecProps ? SecInfo.pSecProps->fLineIndent : 0.0f;
-}
-int32_t CPDF_VariableText::GetAlignment(const CPVT_SectionInfo& SecInfo)
-{
- return m_bRichText && SecInfo.pSecProps ? SecInfo.pSecProps->nAlignment : m_nAlignment;
-}
-FX_FLOAT CPDF_VariableText::GetCharSpace(const CPVT_WordInfo & WordInfo)
-{
- return m_bRichText && WordInfo.pWordProps ? WordInfo.pWordProps->fCharSpace : m_fCharSpace;
-}
-int32_t CPDF_VariableText::GetHorzScale(const CPVT_WordInfo & WordInfo)
-{
- return m_bRichText && WordInfo.pWordProps ? WordInfo.pWordProps->nHorzScale : m_nHorzScale;
-}
-void CPDF_VariableText::ClearSectionRightWords(const CPVT_WordPlace & place)
-{
- CPVT_WordPlace wordplace = AjustLineHeader(place, TRUE);
- if (CSection * pSection = m_SectionArray.GetAt(place.nSecIndex)) {
- for (int32_t w = pSection->m_WordArray.GetSize() - 1; w > wordplace.nWordIndex; w--) {
- delete pSection->m_WordArray.GetAt(w);
- pSection->m_WordArray.RemoveAt(w);
- }
- }
-}
-CPVT_WordPlace CPDF_VariableText::AjustLineHeader(const CPVT_WordPlace & place, FX_BOOL bPrevOrNext) const
-{
- if (place.nWordIndex < 0 && place.nLineIndex > 0) {
- return bPrevOrNext ? GetPrevWordPlace(place) : GetNextWordPlace(place);
- }
- return place;
-}
-FX_BOOL CPDF_VariableText::ClearEmptySection(const CPVT_WordPlace & place)
-{
- if (place.nSecIndex == 0 && m_SectionArray.GetSize() == 1) {
- return FALSE;
- }
- if (CSection * pSection = m_SectionArray.GetAt(place.nSecIndex)) {
+ }
+ if (CSection* pSection = m_SectionArray.GetAt(place.nSecIndex)) {
+ if (pSection->m_WordArray.GetSize() == 0) {
+ delete pSection;
+ m_SectionArray.RemoveAt(place.nSecIndex);
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+void CPDF_VariableText::ClearEmptySections(const CPVT_WordRange& PlaceRange) {
+ CPVT_WordPlace wordplace;
+ for (int32_t s = PlaceRange.EndPos.nSecIndex;
+ s > PlaceRange.BeginPos.nSecIndex; s--) {
+ wordplace.nSecIndex = s;
+ ClearEmptySection(wordplace);
+ }
+}
+void CPDF_VariableText::LinkLatterSection(const CPVT_WordPlace& place) {
+ CPVT_WordPlace oldplace = AjustLineHeader(place, TRUE);
+ if (CSection* pNextSection = m_SectionArray.GetAt(place.nSecIndex + 1)) {
+ if (CSection* pSection = m_SectionArray.GetAt(oldplace.nSecIndex)) {
+ for (int32_t w = 0, sz = pNextSection->m_WordArray.GetSize(); w < sz;
+ w++) {
+ if (CPVT_WordInfo* pWord = pNextSection->m_WordArray.GetAt(w)) {
+ oldplace.nWordIndex++;
+ pSection->AddWord(oldplace, *pWord);
+ }
+ }
+ }
+ delete pNextSection;
+ m_SectionArray.RemoveAt(place.nSecIndex + 1);
+ }
+}
+void CPDF_VariableText::ClearWords(const CPVT_WordRange& PlaceRange) {
+ CPVT_WordRange NewRange;
+ NewRange.BeginPos = AjustLineHeader(PlaceRange.BeginPos, TRUE);
+ NewRange.EndPos = AjustLineHeader(PlaceRange.EndPos, TRUE);
+ for (int32_t s = NewRange.EndPos.nSecIndex; s >= NewRange.BeginPos.nSecIndex;
+ s--) {
+ if (CSection* pSection = m_SectionArray.GetAt(s)) {
+ pSection->ClearWords(NewRange);
+ }
+ }
+}
+CPVT_WordPlace CPDF_VariableText::ClearLeftWord(const CPVT_WordPlace& place) {
+ if (CSection* pSection = m_SectionArray.GetAt(place.nSecIndex)) {
+ CPVT_WordPlace leftplace = GetPrevWordPlace(place);
+ if (leftplace != place) {
+ if (leftplace.nSecIndex != place.nSecIndex) {
if (pSection->m_WordArray.GetSize() == 0) {
- delete pSection;
- m_SectionArray.RemoveAt(place.nSecIndex);
- return TRUE;
- }
- }
- return FALSE;
-}
-void CPDF_VariableText::ClearEmptySections(const CPVT_WordRange & PlaceRange)
-{
- CPVT_WordPlace wordplace;
- for (int32_t s = PlaceRange.EndPos.nSecIndex; s > PlaceRange.BeginPos.nSecIndex; s--) {
- wordplace.nSecIndex = s;
- ClearEmptySection(wordplace);
- }
-}
-void CPDF_VariableText::LinkLatterSection(const CPVT_WordPlace & place)
-{
- CPVT_WordPlace oldplace = AjustLineHeader(place, TRUE);
- if (CSection * pNextSection = m_SectionArray.GetAt(place.nSecIndex + 1)) {
- if (CSection * pSection = m_SectionArray.GetAt(oldplace.nSecIndex)) {
- for (int32_t w = 0, sz = pNextSection->m_WordArray.GetSize(); w < sz; w++) {
- if (CPVT_WordInfo * pWord = pNextSection->m_WordArray.GetAt(w)) {
- oldplace.nWordIndex ++;
- pSection->AddWord(oldplace, *pWord);
- }
- }
- }
- delete pNextSection;
- m_SectionArray.RemoveAt(place.nSecIndex + 1);
- }
-}
-void CPDF_VariableText::ClearWords(const CPVT_WordRange & PlaceRange)
-{
- CPVT_WordRange NewRange;
- NewRange.BeginPos = AjustLineHeader(PlaceRange.BeginPos, TRUE);
- NewRange.EndPos = AjustLineHeader(PlaceRange.EndPos, TRUE);
- for (int32_t s = NewRange.EndPos.nSecIndex; s >= NewRange.BeginPos.nSecIndex; s--) {
- if (CSection * pSection = m_SectionArray.GetAt(s)) {
- pSection->ClearWords(NewRange);
- }
- }
-}
-CPVT_WordPlace CPDF_VariableText::ClearLeftWord(const CPVT_WordPlace & place)
-{
- if (CSection * pSection = m_SectionArray.GetAt(place.nSecIndex)) {
- CPVT_WordPlace leftplace = GetPrevWordPlace(place);
- if (leftplace != place) {
- if (leftplace.nSecIndex != place.nSecIndex) {
- if (pSection->m_WordArray.GetSize() == 0) {
- ClearEmptySection(place);
- } else {
- LinkLatterSection(leftplace);
- }
- } else {
- pSection->ClearWord(place);
- }
- }
- return leftplace;
- }
- return place;
-}
-CPVT_WordPlace CPDF_VariableText::ClearRightWord(const CPVT_WordPlace & place)
-{
- if (CSection * pSection = m_SectionArray.GetAt(place.nSecIndex)) {
- CPVT_WordPlace rightplace = AjustLineHeader(GetNextWordPlace(place), FALSE);
- if (rightplace != place) {
- if(rightplace.nSecIndex != place.nSecIndex) {
- LinkLatterSection(place);
- } else {
- pSection->ClearWord(rightplace);
- }
- }
- }
- return place;
-}
-void CPDF_VariableText::RearrangeAll()
-{
- Rearrange(CPVT_WordRange(GetBeginWordPlace(), GetEndWordPlace()));
-}
-void CPDF_VariableText::RearrangePart(const CPVT_WordRange & PlaceRange)
-{
- Rearrange(PlaceRange);
-}
-CPVT_FloatRect CPDF_VariableText::Rearrange(const CPVT_WordRange & PlaceRange)
-{
- CPVT_FloatRect rcRet;
- if (IsValid()) {
- if (m_bAutoFontSize) {
- SetFontSize(GetAutoFontSize());
- rcRet = RearrangeSections(CPVT_WordRange(GetBeginWordPlace(), GetEndWordPlace()));
+ ClearEmptySection(place);
} else {
- rcRet = RearrangeSections(PlaceRange);
- }
- }
- SetContentRect(rcRet);
- return rcRet;
-}
-FX_FLOAT CPDF_VariableText::GetAutoFontSize()
-{
- int32_t nTotal = sizeof(gFontSizeSteps) / sizeof(uint8_t);
- if (IsMultiLine()) {
- nTotal /= 4;
- }
- if (nTotal <= 0) {
- return 0;
- }
- if (GetPlateWidth() <= 0) {
- return 0;
- }
- int32_t nLeft = 0;
- int32_t nRight = nTotal - 1;
- int32_t nMid = nTotal / 2;
- while (nLeft <= nRight) {
- if (IsBigger(gFontSizeSteps[nMid])) {
- nRight = nMid - 1;
- nMid = (nLeft + nRight) / 2;
- continue;
+ LinkLatterSection(leftplace);
+ }
+ } else {
+ pSection->ClearWord(place);
+ }
+ }
+ return leftplace;
+ }
+ return place;
+}
+CPVT_WordPlace CPDF_VariableText::ClearRightWord(const CPVT_WordPlace& place) {
+ if (CSection* pSection = m_SectionArray.GetAt(place.nSecIndex)) {
+ CPVT_WordPlace rightplace = AjustLineHeader(GetNextWordPlace(place), FALSE);
+ if (rightplace != place) {
+ if (rightplace.nSecIndex != place.nSecIndex) {
+ LinkLatterSection(place);
+ } else {
+ pSection->ClearWord(rightplace);
+ }
+ }
+ }
+ return place;
+}
+void CPDF_VariableText::RearrangeAll() {
+ Rearrange(CPVT_WordRange(GetBeginWordPlace(), GetEndWordPlace()));
+}
+void CPDF_VariableText::RearrangePart(const CPVT_WordRange& PlaceRange) {
+ Rearrange(PlaceRange);
+}
+CPVT_FloatRect CPDF_VariableText::Rearrange(const CPVT_WordRange& PlaceRange) {
+ CPVT_FloatRect rcRet;
+ if (IsValid()) {
+ if (m_bAutoFontSize) {
+ SetFontSize(GetAutoFontSize());
+ rcRet = RearrangeSections(
+ CPVT_WordRange(GetBeginWordPlace(), GetEndWordPlace()));
+ } else {
+ rcRet = RearrangeSections(PlaceRange);
+ }
+ }
+ SetContentRect(rcRet);
+ return rcRet;
+}
+FX_FLOAT CPDF_VariableText::GetAutoFontSize() {
+ int32_t nTotal = sizeof(gFontSizeSteps) / sizeof(uint8_t);
+ if (IsMultiLine()) {
+ nTotal /= 4;
+ }
+ if (nTotal <= 0) {
+ return 0;
+ }
+ if (GetPlateWidth() <= 0) {
+ return 0;
+ }
+ int32_t nLeft = 0;
+ int32_t nRight = nTotal - 1;
+ int32_t nMid = nTotal / 2;
+ while (nLeft <= nRight) {
+ if (IsBigger(gFontSizeSteps[nMid])) {
+ nRight = nMid - 1;
+ nMid = (nLeft + nRight) / 2;
+ continue;
+ } else {
+ nLeft = nMid + 1;
+ nMid = (nLeft + nRight) / 2;
+ continue;
+ }
+ }
+ return (FX_FLOAT)gFontSizeSteps[nMid];
+}
+FX_BOOL CPDF_VariableText::IsBigger(FX_FLOAT fFontSize) {
+ FX_BOOL bBigger = FALSE;
+ CPVT_Size szTotal;
+ for (int32_t s = 0, sz = m_SectionArray.GetSize(); s < sz; s++) {
+ if (CSection* pSection = m_SectionArray.GetAt(s)) {
+ CPVT_Size size = pSection->GetSectionSize(fFontSize);
+ szTotal.x = FPDF_MAX(size.x, szTotal.x);
+ szTotal.y += size.y;
+ if (IsFloatBigger(szTotal.x, GetPlateWidth()) ||
+ IsFloatBigger(szTotal.y, GetPlateHeight())) {
+ bBigger = TRUE;
+ break;
+ }
+ }
+ }
+ return bBigger;
+}
+CPVT_FloatRect CPDF_VariableText::RearrangeSections(
+ const CPVT_WordRange& PlaceRange) {
+ CPVT_WordPlace place;
+ FX_FLOAT fPosY = 0;
+ FX_FLOAT fOldHeight;
+ int32_t nSSecIndex = PlaceRange.BeginPos.nSecIndex;
+ int32_t nESecIndex = PlaceRange.EndPos.nSecIndex;
+ CPVT_FloatRect rcRet;
+ for (int32_t s = 0, sz = m_SectionArray.GetSize(); s < sz; s++) {
+ place.nSecIndex = s;
+ if (CSection* pSection = m_SectionArray.GetAt(s)) {
+ pSection->SecPlace = place;
+ CPVT_FloatRect rcSec = pSection->m_SecInfo.rcSection;
+ if (s >= nSSecIndex) {
+ if (s <= nESecIndex) {
+ rcSec = pSection->Rearrange();
+ rcSec.top += fPosY;
+ rcSec.bottom += fPosY;
} else {
- nLeft = nMid + 1;
- nMid = (nLeft + nRight) / 2;
- continue;
- }
- }
- return (FX_FLOAT)gFontSizeSteps[nMid];
-}
-FX_BOOL CPDF_VariableText::IsBigger(FX_FLOAT fFontSize)
-{
- FX_BOOL bBigger = FALSE;
- CPVT_Size szTotal;
- for (int32_t s = 0, sz = m_SectionArray.GetSize(); s < sz; s++) {
- if (CSection * pSection = m_SectionArray.GetAt(s)) {
- CPVT_Size size = pSection->GetSectionSize(fFontSize);
- szTotal.x = FPDF_MAX(size.x, szTotal.x);
- szTotal.y += size.y;
- if (IsFloatBigger(szTotal.x, GetPlateWidth())
- || IsFloatBigger(szTotal.y, GetPlateHeight())
- ) {
- bBigger = TRUE;
- break;
- }
- }
- }
- return bBigger;
-}
-CPVT_FloatRect CPDF_VariableText::RearrangeSections(const CPVT_WordRange & PlaceRange)
-{
- CPVT_WordPlace place;
- FX_FLOAT fPosY = 0;
- FX_FLOAT fOldHeight;
- int32_t nSSecIndex = PlaceRange.BeginPos.nSecIndex;
- int32_t nESecIndex = PlaceRange.EndPos.nSecIndex;
- CPVT_FloatRect rcRet;
- for (int32_t s = 0, sz = m_SectionArray.GetSize(); s < sz; s++) {
- place.nSecIndex = s;
- if (CSection * pSection = m_SectionArray.GetAt(s)) {
- pSection->SecPlace = place;
- CPVT_FloatRect rcSec = pSection->m_SecInfo.rcSection;
- if (s >= nSSecIndex) {
- if (s <= nESecIndex) {
- rcSec = pSection->Rearrange();
- rcSec.top += fPosY;
- rcSec.bottom += fPosY;
- } else {
- fOldHeight = pSection->m_SecInfo.rcSection.bottom - pSection->m_SecInfo.rcSection.top;
- rcSec.top = fPosY;
- rcSec.bottom = fPosY + fOldHeight;
- }
- pSection->m_SecInfo.rcSection = rcSec;
- pSection->ResetLinePlace();
- }
- if (s == 0) {
- rcRet = rcSec;
- } else {
- rcRet.left = FPDF_MIN(rcSec.left, rcRet.left);
- rcRet.top = FPDF_MIN(rcSec.top, rcRet.top);
- rcRet.right = FPDF_MAX(rcSec.right, rcRet.right);
- rcRet.bottom = FPDF_MAX(rcSec.bottom, rcRet.bottom);
- }
- fPosY += rcSec.Height();
- }
- }
- return rcRet;
-}
-int32_t CPDF_VariableText::GetCharWidth(int32_t nFontIndex, FX_WORD Word, FX_WORD SubWord, int32_t nWordStyle)
-{
- if (!m_pVTProvider) {
- return 0;
- }
- if (SubWord > 0) {
- return m_pVTProvider->GetCharWidth(nFontIndex, SubWord, nWordStyle);
- }
- return m_pVTProvider->GetCharWidth(nFontIndex, Word, nWordStyle);
-}
-int32_t CPDF_VariableText::GetTypeAscent(int32_t nFontIndex)
-{
- return m_pVTProvider ? m_pVTProvider->GetTypeAscent(nFontIndex) : 0;
-}
-int32_t CPDF_VariableText::GetTypeDescent(int32_t nFontIndex)
-{
- return m_pVTProvider ? m_pVTProvider->GetTypeDescent(nFontIndex) : 0;
-}
-int32_t CPDF_VariableText::GetWordFontIndex(FX_WORD word, int32_t charset, int32_t nFontIndex)
-{
- return m_pVTProvider ? m_pVTProvider->GetWordFontIndex(word, charset, nFontIndex) : -1;
-}
-int32_t CPDF_VariableText::GetDefaultFontIndex()
-{
- return m_pVTProvider ? m_pVTProvider->GetDefaultFontIndex() : -1;
-}
-FX_BOOL CPDF_VariableText::IsLatinWord(FX_WORD word)
-{
- return m_pVTProvider ? m_pVTProvider->IsLatinWord(word) : FALSE;
-}
-IPDF_VariableText_Iterator * CPDF_VariableText::GetIterator()
-{
- if (!m_pVTIterator) {
- m_pVTIterator = new CPDF_VariableText_Iterator(this);
- }
- return m_pVTIterator;
-}
-IPDF_VariableText_Provider* CPDF_VariableText::SetProvider(IPDF_VariableText_Provider * pProvider)
-{
- IPDF_VariableText_Provider* pOld = m_pVTProvider;
- m_pVTProvider = pProvider;
- return pOld;
-}
-CPDF_VariableText_Iterator::CPDF_VariableText_Iterator(CPDF_VariableText * pVT):
- m_CurPos(-1, -1, -1),
- m_pVT(pVT)
-{
-}
-CPDF_VariableText_Iterator::~CPDF_VariableText_Iterator()
-{
-}
-void CPDF_VariableText_Iterator::SetAt(int32_t nWordIndex)
-{
- ASSERT(m_pVT != NULL);
- m_CurPos = m_pVT->WordIndexToWordPlace(nWordIndex);
-}
-void CPDF_VariableText_Iterator::SetAt(const CPVT_WordPlace & place)
-{
- ASSERT(m_pVT != NULL);
- m_CurPos = place;
-}
-FX_BOOL CPDF_VariableText_Iterator::NextWord()
-{
- if (m_CurPos == m_pVT->GetEndWordPlace()) {
- return FALSE;
- }
- m_CurPos = m_pVT->GetNextWordPlace(m_CurPos);
- return TRUE;
-}
-FX_BOOL CPDF_VariableText_Iterator::PrevWord()
-{
- if (m_CurPos == m_pVT->GetBeginWordPlace()) {
- return FALSE;
- }
- m_CurPos = m_pVT->GetPrevWordPlace(m_CurPos);
- return TRUE;
-}
-FX_BOOL CPDF_VariableText_Iterator::NextLine()
-{
- if (CSection * pSection = m_pVT->m_SectionArray.GetAt(m_CurPos.nSecIndex)) {
- if (m_CurPos.nLineIndex < pSection->m_LineArray.GetSize() - 1) {
- m_CurPos = CPVT_WordPlace(m_CurPos.nSecIndex, m_CurPos.nLineIndex + 1, -1);
- return TRUE;
- }
- if (m_CurPos.nSecIndex < m_pVT->m_SectionArray.GetSize() - 1) {
- m_CurPos = CPVT_WordPlace(m_CurPos.nSecIndex + 1, 0, -1);
- return TRUE;
- }
- }
+ fOldHeight = pSection->m_SecInfo.rcSection.bottom -
+ pSection->m_SecInfo.rcSection.top;
+ rcSec.top = fPosY;
+ rcSec.bottom = fPosY + fOldHeight;
+ }
+ pSection->m_SecInfo.rcSection = rcSec;
+ pSection->ResetLinePlace();
+ }
+ if (s == 0) {
+ rcRet = rcSec;
+ } else {
+ rcRet.left = FPDF_MIN(rcSec.left, rcRet.left);
+ rcRet.top = FPDF_MIN(rcSec.top, rcRet.top);
+ rcRet.right = FPDF_MAX(rcSec.right, rcRet.right);
+ rcRet.bottom = FPDF_MAX(rcSec.bottom, rcRet.bottom);
+ }
+ fPosY += rcSec.Height();
+ }
+ }
+ return rcRet;
+}
+int32_t CPDF_VariableText::GetCharWidth(int32_t nFontIndex,
+ FX_WORD Word,
+ FX_WORD SubWord,
+ int32_t nWordStyle) {
+ if (!m_pVTProvider) {
+ return 0;
+ }
+ if (SubWord > 0) {
+ return m_pVTProvider->GetCharWidth(nFontIndex, SubWord, nWordStyle);
+ }
+ return m_pVTProvider->GetCharWidth(nFontIndex, Word, nWordStyle);
+}
+int32_t CPDF_VariableText::GetTypeAscent(int32_t nFontIndex) {
+ return m_pVTProvider ? m_pVTProvider->GetTypeAscent(nFontIndex) : 0;
+}
+int32_t CPDF_VariableText::GetTypeDescent(int32_t nFontIndex) {
+ return m_pVTProvider ? m_pVTProvider->GetTypeDescent(nFontIndex) : 0;
+}
+int32_t CPDF_VariableText::GetWordFontIndex(FX_WORD word,
+ int32_t charset,
+ int32_t nFontIndex) {
+ return m_pVTProvider
+ ? m_pVTProvider->GetWordFontIndex(word, charset, nFontIndex)
+ : -1;
+}
+int32_t CPDF_VariableText::GetDefaultFontIndex() {
+ return m_pVTProvider ? m_pVTProvider->GetDefaultFontIndex() : -1;
+}
+FX_BOOL CPDF_VariableText::IsLatinWord(FX_WORD word) {
+ return m_pVTProvider ? m_pVTProvider->IsLatinWord(word) : FALSE;
+}
+IPDF_VariableText_Iterator* CPDF_VariableText::GetIterator() {
+ if (!m_pVTIterator) {
+ m_pVTIterator = new CPDF_VariableText_Iterator(this);
+ }
+ return m_pVTIterator;
+}
+IPDF_VariableText_Provider* CPDF_VariableText::SetProvider(
+ IPDF_VariableText_Provider* pProvider) {
+ IPDF_VariableText_Provider* pOld = m_pVTProvider;
+ m_pVTProvider = pProvider;
+ return pOld;
+}
+CPDF_VariableText_Iterator::CPDF_VariableText_Iterator(CPDF_VariableText* pVT)
+ : m_CurPos(-1, -1, -1), m_pVT(pVT) {}
+CPDF_VariableText_Iterator::~CPDF_VariableText_Iterator() {}
+void CPDF_VariableText_Iterator::SetAt(int32_t nWordIndex) {
+ ASSERT(m_pVT != NULL);
+ m_CurPos = m_pVT->WordIndexToWordPlace(nWordIndex);
+}
+void CPDF_VariableText_Iterator::SetAt(const CPVT_WordPlace& place) {
+ ASSERT(m_pVT != NULL);
+ m_CurPos = place;
+}
+FX_BOOL CPDF_VariableText_Iterator::NextWord() {
+ if (m_CurPos == m_pVT->GetEndWordPlace()) {
return FALSE;
+ }
+ m_CurPos = m_pVT->GetNextWordPlace(m_CurPos);
+ return TRUE;
}
-FX_BOOL CPDF_VariableText_Iterator::PrevLine()
-{
- if (m_pVT->m_SectionArray.GetAt(m_CurPos.nSecIndex)) {
- if (m_CurPos.nLineIndex > 0) {
- m_CurPos = CPVT_WordPlace(m_CurPos.nSecIndex, m_CurPos.nLineIndex - 1, -1);
- return TRUE;
- }
- if (m_CurPos.nSecIndex > 0) {
- if (CSection * pLastSection = m_pVT->m_SectionArray.GetAt(m_CurPos.nSecIndex - 1)) {
- m_CurPos = CPVT_WordPlace(m_CurPos.nSecIndex - 1, pLastSection->m_LineArray.GetSize() - 1, -1);
- return TRUE;
- }
- }
- }
+FX_BOOL CPDF_VariableText_Iterator::PrevWord() {
+ if (m_CurPos == m_pVT->GetBeginWordPlace()) {
return FALSE;
+ }
+ m_CurPos = m_pVT->GetPrevWordPlace(m_CurPos);
+ return TRUE;
}
-FX_BOOL CPDF_VariableText_Iterator::NextSection()
-{
+FX_BOOL CPDF_VariableText_Iterator::NextLine() {
+ if (CSection* pSection = m_pVT->m_SectionArray.GetAt(m_CurPos.nSecIndex)) {
+ if (m_CurPos.nLineIndex < pSection->m_LineArray.GetSize() - 1) {
+ m_CurPos =
+ CPVT_WordPlace(m_CurPos.nSecIndex, m_CurPos.nLineIndex + 1, -1);
+ return TRUE;
+ }
if (m_CurPos.nSecIndex < m_pVT->m_SectionArray.GetSize() - 1) {
- m_CurPos = CPVT_WordPlace(m_CurPos.nSecIndex + 1, 0, -1);
- return TRUE;
+ m_CurPos = CPVT_WordPlace(m_CurPos.nSecIndex + 1, 0, -1);
+ return TRUE;
}
- return FALSE;
+ }
+ return FALSE;
}
-FX_BOOL CPDF_VariableText_Iterator::PrevSection()
-{
- ASSERT(m_pVT != NULL);
+FX_BOOL CPDF_VariableText_Iterator::PrevLine() {
+ if (m_pVT->m_SectionArray.GetAt(m_CurPos.nSecIndex)) {
+ if (m_CurPos.nLineIndex > 0) {
+ m_CurPos =
+ CPVT_WordPlace(m_CurPos.nSecIndex, m_CurPos.nLineIndex - 1, -1);
+ return TRUE;
+ }
if (m_CurPos.nSecIndex > 0) {
- m_CurPos = CPVT_WordPlace(m_CurPos.nSecIndex - 1, 0, -1);
+ if (CSection* pLastSection =
+ m_pVT->m_SectionArray.GetAt(m_CurPos.nSecIndex - 1)) {
+ m_CurPos = CPVT_WordPlace(m_CurPos.nSecIndex - 1,
+ pLastSection->m_LineArray.GetSize() - 1, -1);
return TRUE;
+ }
}
- return FALSE;
+ }
+ return FALSE;
}
-FX_BOOL CPDF_VariableText_Iterator::GetWord(CPVT_Word & word) const
-{
- ASSERT(m_pVT != NULL);
- word.WordPlace = m_CurPos;
- if (CSection * pSection = m_pVT->m_SectionArray.GetAt(m_CurPos.nSecIndex)) {
- if (pSection->m_LineArray.GetAt(m_CurPos.nLineIndex)) {
- if (CPVT_WordInfo * pWord = pSection->m_WordArray.GetAt(m_CurPos.nWordIndex)) {
- word.Word = pWord->Word;
- word.nCharset = pWord->nCharset;
- word.fWidth = m_pVT->GetWordWidth(*pWord);
- word.ptWord = m_pVT->InToOut(
- CPDF_Point(pWord->fWordX + pSection->m_SecInfo.rcSection.left,
- pWord->fWordY + pSection->m_SecInfo.rcSection.top) );
- word.fAscent = m_pVT->GetWordAscent(*pWord);
- word.fDescent = m_pVT->GetWordDescent(*pWord);
- if (pWord->pWordProps) {
- word.WordProps = *pWord->pWordProps;
- }
- word.nFontIndex = m_pVT->GetWordFontIndex(*pWord);
- word.fFontSize = m_pVT->GetWordFontSize(*pWord);
- return TRUE;
- }
- }
- }
- return FALSE;
-}
-FX_BOOL CPDF_VariableText_Iterator::SetWord(const CPVT_Word & word)
-{
- ASSERT(m_pVT != NULL);
- if (CSection * pSection = m_pVT->m_SectionArray.GetAt(m_CurPos.nSecIndex)) {
- if (CPVT_WordInfo * pWord = pSection->m_WordArray.GetAt(m_CurPos.nWordIndex)) {
- if (pWord->pWordProps) {
- *pWord->pWordProps = word.WordProps;
- }
- return TRUE;
- }
- }
- return FALSE;
-}
-FX_BOOL CPDF_VariableText_Iterator::GetLine(CPVT_Line & line) const
-{
- ASSERT(m_pVT != NULL);
- line.lineplace = CPVT_WordPlace(m_CurPos.nSecIndex, m_CurPos.nLineIndex, -1);
- if (CSection * pSection = m_pVT->m_SectionArray.GetAt(m_CurPos.nSecIndex)) {
- if (CLine * pLine = pSection->m_LineArray.GetAt(m_CurPos.nLineIndex)) {
- line.ptLine = m_pVT->InToOut(
- CPDF_Point(pLine->m_LineInfo.fLineX + pSection->m_SecInfo.rcSection.left,
- pLine->m_LineInfo.fLineY + pSection->m_SecInfo.rcSection.top) );
- line.fLineWidth = pLine->m_LineInfo.fLineWidth;
- line.fLineAscent = pLine->m_LineInfo.fLineAscent;
- line.fLineDescent = pLine->m_LineInfo.fLineDescent;
- line.lineEnd = pLine->GetEndWordPlace();
- return TRUE;
- }
- }
- return FALSE;
+FX_BOOL CPDF_VariableText_Iterator::NextSection() {
+ if (m_CurPos.nSecIndex < m_pVT->m_SectionArray.GetSize() - 1) {
+ m_CurPos = CPVT_WordPlace(m_CurPos.nSecIndex + 1, 0, -1);
+ return TRUE;
+ }
+ return FALSE;
}
-FX_BOOL CPDF_VariableText_Iterator::GetSection(CPVT_Section & section) const
-{
- ASSERT(m_pVT != NULL);
- section.secplace = CPVT_WordPlace(m_CurPos.nSecIndex, 0, -1);
- if (CSection * pSection = m_pVT->m_SectionArray.GetAt(m_CurPos.nSecIndex)) {
- section.rcSection = m_pVT->InToOut(pSection->m_SecInfo.rcSection);
- if (pSection->m_SecInfo.pSecProps) {
- section.SecProps = *pSection->m_SecInfo.pSecProps;
- }
- if (pSection->m_SecInfo.pWordProps) {
- section.WordProps = *pSection->m_SecInfo.pWordProps;
- }
+FX_BOOL CPDF_VariableText_Iterator::PrevSection() {
+ ASSERT(m_pVT != NULL);
+ if (m_CurPos.nSecIndex > 0) {
+ m_CurPos = CPVT_WordPlace(m_CurPos.nSecIndex - 1, 0, -1);
+ return TRUE;
+ }
+ return FALSE;
+}
+FX_BOOL CPDF_VariableText_Iterator::GetWord(CPVT_Word& word) const {
+ ASSERT(m_pVT != NULL);
+ word.WordPlace = m_CurPos;
+ if (CSection* pSection = m_pVT->m_SectionArray.GetAt(m_CurPos.nSecIndex)) {
+ if (pSection->m_LineArray.GetAt(m_CurPos.nLineIndex)) {
+ if (CPVT_WordInfo* pWord =
+ pSection->m_WordArray.GetAt(m_CurPos.nWordIndex)) {
+ word.Word = pWord->Word;
+ word.nCharset = pWord->nCharset;
+ word.fWidth = m_pVT->GetWordWidth(*pWord);
+ word.ptWord = m_pVT->InToOut(
+ CPDF_Point(pWord->fWordX + pSection->m_SecInfo.rcSection.left,
+ pWord->fWordY + pSection->m_SecInfo.rcSection.top));
+ word.fAscent = m_pVT->GetWordAscent(*pWord);
+ word.fDescent = m_pVT->GetWordDescent(*pWord);
+ if (pWord->pWordProps) {
+ word.WordProps = *pWord->pWordProps;
+ }
+ word.nFontIndex = m_pVT->GetWordFontIndex(*pWord);
+ word.fFontSize = m_pVT->GetWordFontSize(*pWord);
return TRUE;
+ }
+ }
+ }
+ return FALSE;
+}
+FX_BOOL CPDF_VariableText_Iterator::SetWord(const CPVT_Word& word) {
+ ASSERT(m_pVT != NULL);
+ if (CSection* pSection = m_pVT->m_SectionArray.GetAt(m_CurPos.nSecIndex)) {
+ if (CPVT_WordInfo* pWord =
+ pSection->m_WordArray.GetAt(m_CurPos.nWordIndex)) {
+ if (pWord->pWordProps) {
+ *pWord->pWordProps = word.WordProps;
+ }
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+FX_BOOL CPDF_VariableText_Iterator::GetLine(CPVT_Line& line) const {
+ ASSERT(m_pVT != NULL);
+ line.lineplace = CPVT_WordPlace(m_CurPos.nSecIndex, m_CurPos.nLineIndex, -1);
+ if (CSection* pSection = m_pVT->m_SectionArray.GetAt(m_CurPos.nSecIndex)) {
+ if (CLine* pLine = pSection->m_LineArray.GetAt(m_CurPos.nLineIndex)) {
+ line.ptLine = m_pVT->InToOut(CPDF_Point(
+ pLine->m_LineInfo.fLineX + pSection->m_SecInfo.rcSection.left,
+ pLine->m_LineInfo.fLineY + pSection->m_SecInfo.rcSection.top));
+ line.fLineWidth = pLine->m_LineInfo.fLineWidth;
+ line.fLineAscent = pLine->m_LineInfo.fLineAscent;
+ line.fLineDescent = pLine->m_LineInfo.fLineDescent;
+ line.lineEnd = pLine->GetEndWordPlace();
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+FX_BOOL CPDF_VariableText_Iterator::GetSection(CPVT_Section& section) const {
+ ASSERT(m_pVT != NULL);
+ section.secplace = CPVT_WordPlace(m_CurPos.nSecIndex, 0, -1);
+ if (CSection* pSection = m_pVT->m_SectionArray.GetAt(m_CurPos.nSecIndex)) {
+ section.rcSection = m_pVT->InToOut(pSection->m_SecInfo.rcSection);
+ if (pSection->m_SecInfo.pSecProps) {
+ section.SecProps = *pSection->m_SecInfo.pSecProps;
+ }
+ if (pSection->m_SecInfo.pWordProps) {
+ section.WordProps = *pSection->m_SecInfo.pWordProps;
}
- return FALSE;
+ return TRUE;
+ }
+ return FALSE;
}
-FX_BOOL CPDF_VariableText_Iterator::SetSection(const CPVT_Section & section)
-{
- ASSERT(m_pVT != NULL);
- if (CSection * pSection = m_pVT->m_SectionArray.GetAt(m_CurPos.nSecIndex)) {
- if (pSection->m_SecInfo.pSecProps) {
- *pSection->m_SecInfo.pSecProps = section.SecProps;
- }
- if (pSection->m_SecInfo.pWordProps) {
- *pSection->m_SecInfo.pWordProps = section.WordProps;
- }
- return TRUE;
+FX_BOOL CPDF_VariableText_Iterator::SetSection(const CPVT_Section& section) {
+ ASSERT(m_pVT != NULL);
+ if (CSection* pSection = m_pVT->m_SectionArray.GetAt(m_CurPos.nSecIndex)) {
+ if (pSection->m_SecInfo.pSecProps) {
+ *pSection->m_SecInfo.pSecProps = section.SecProps;
}
- return FALSE;
+ if (pSection->m_SecInfo.pWordProps) {
+ *pSection->m_SecInfo.pWordProps = section.WordProps;
+ }
+ return TRUE;
+ }
+ return FALSE;
}
diff --git a/core/src/fpdfdoc/doc_vtmodule.cpp b/core/src/fpdfdoc/doc_vtmodule.cpp
index 39a89b5ac7..834d459de3 100644
--- a/core/src/fpdfdoc/doc_vtmodule.cpp
+++ b/core/src/fpdfdoc/doc_vtmodule.cpp
@@ -7,11 +7,9 @@
#include "../../include/fpdfdoc/fpdf_doc.h"
#include "../../include/fpdfdoc/fpdf_vt.h"
#include "pdf_vt.h"
-IPDF_VariableText* IPDF_VariableText::NewVariableText()
-{
- return new CPDF_VariableText();
+IPDF_VariableText* IPDF_VariableText::NewVariableText() {
+ return new CPDF_VariableText();
}
-void IPDF_VariableText::DelVariableText(IPDF_VariableText* pVT)
-{
- delete (CPDF_VariableText*)pVT;
+void IPDF_VariableText::DelVariableText(IPDF_VariableText* pVT) {
+ delete (CPDF_VariableText*)pVT;
}
diff --git a/core/src/fpdfdoc/pdf_vt.h b/core/src/fpdfdoc/pdf_vt.h
index a75490fcd5..d3010da73b 100644
--- a/core/src/fpdfdoc/pdf_vt.h
+++ b/core/src/fpdfdoc/pdf_vt.h
@@ -19,614 +19,526 @@ class CTypeset;
class CPDF_EditContainer;
class CPDF_VariableText;
class CPDF_VariableText_Iterator;
-#define IsFloatZero(f) ((f) < 0.0001 && (f) > -0.0001)
-#define IsFloatBigger(fa,fb) ((fa) > (fb) && !IsFloatZero((fa) - (fb)))
-#define IsFloatSmaller(fa,fb) ((fa) < (fb) && !IsFloatZero((fa) - (fb)))
-template<class T> T FPDF_MIN (const T & i, const T & j)
-{
- return ((i < j) ? i : j);
+#define IsFloatZero(f) ((f) < 0.0001 && (f) > -0.0001)
+#define IsFloatBigger(fa, fb) ((fa) > (fb) && !IsFloatZero((fa) - (fb)))
+#define IsFloatSmaller(fa, fb) ((fa) < (fb) && !IsFloatZero((fa) - (fb)))
+template <class T>
+T FPDF_MIN(const T& i, const T& j) {
+ return ((i < j) ? i : j);
}
-template<class T> T FPDF_MAX (const T & i, const T & j)
-{
- return ((i > j) ? i : j);
+template <class T>
+T FPDF_MAX(const T& i, const T& j) {
+ return ((i > j) ? i : j);
}
-class CPVT_Size
-{
-public:
- CPVT_Size() : x(0.0f), y(0.0f)
- {
- }
- CPVT_Size(FX_FLOAT other_x, FX_FLOAT other_y)
- {
- x = other_x;
- y = other_y;
- }
- FX_FLOAT x, y;
+class CPVT_Size {
+ public:
+ CPVT_Size() : x(0.0f), y(0.0f) {}
+ CPVT_Size(FX_FLOAT other_x, FX_FLOAT other_y) {
+ x = other_x;
+ y = other_y;
+ }
+ FX_FLOAT x, y;
};
-class CPVT_FloatRect : public CFX_FloatRect
-{
-public:
- CPVT_FloatRect()
- {
- left = top = right = bottom = 0.0f;
- }
- CPVT_FloatRect(FX_FLOAT other_left,
- FX_FLOAT other_top,
- FX_FLOAT other_right,
- FX_FLOAT other_bottom)
- {
- left = other_left;
- top = other_top;
- right = other_right;
- bottom = other_bottom;
- }
- CPVT_FloatRect(const CPDF_Rect & rect)
- {
- left = rect.left;
- top = rect.top;
- right = rect.right;
- bottom = rect.bottom;
- }
- void Default()
- {
- left = top = right = bottom = 0.0f;
- }
- FX_FLOAT Height() const
- {
- if (top > bottom)
- return top - bottom;
- return bottom - top;
- }
+class CPVT_FloatRect : public CFX_FloatRect {
+ public:
+ CPVT_FloatRect() { left = top = right = bottom = 0.0f; }
+ CPVT_FloatRect(FX_FLOAT other_left,
+ FX_FLOAT other_top,
+ FX_FLOAT other_right,
+ FX_FLOAT other_bottom) {
+ left = other_left;
+ top = other_top;
+ right = other_right;
+ bottom = other_bottom;
+ }
+ CPVT_FloatRect(const CPDF_Rect& rect) {
+ left = rect.left;
+ top = rect.top;
+ right = rect.right;
+ bottom = rect.bottom;
+ }
+ void Default() { left = top = right = bottom = 0.0f; }
+ FX_FLOAT Height() const {
+ if (top > bottom)
+ return top - bottom;
+ return bottom - top;
+ }
};
struct CPVT_SectionInfo {
- CPVT_SectionInfo() : rcSection(), nTotalLine(0), pSecProps(NULL), pWordProps(NULL)
- {
- }
- virtual ~CPVT_SectionInfo()
- {
- delete pSecProps;
- delete pWordProps;
- }
- CPVT_SectionInfo(const CPVT_SectionInfo & other): rcSection(), nTotalLine(0), pSecProps(NULL), pWordProps(NULL)
- {
- operator = (other);
- }
- void operator = (const CPVT_SectionInfo & other)
- {
- if (this == &other) {
- return;
- }
- rcSection = other.rcSection;
- nTotalLine = other.nTotalLine;
- if (other.pSecProps) {
- if (pSecProps) {
- *pSecProps = *other.pSecProps;
- } else {
- pSecProps = new CPVT_SecProps(*other.pSecProps);
- }
- }
- if (other.pWordProps) {
- if (pWordProps) {
- *pWordProps = *other.pWordProps;
- } else {
- pWordProps = new CPVT_WordProps(*other.pWordProps);
- }
- }
- }
- CPVT_FloatRect rcSection;
- int32_t nTotalLine;
- CPVT_SecProps* pSecProps;
- CPVT_WordProps* pWordProps;
+ CPVT_SectionInfo()
+ : rcSection(), nTotalLine(0), pSecProps(NULL), pWordProps(NULL) {}
+ virtual ~CPVT_SectionInfo() {
+ delete pSecProps;
+ delete pWordProps;
+ }
+ CPVT_SectionInfo(const CPVT_SectionInfo& other)
+ : rcSection(), nTotalLine(0), pSecProps(NULL), pWordProps(NULL) {
+ operator=(other);
+ }
+ void operator=(const CPVT_SectionInfo& other) {
+ if (this == &other) {
+ return;
+ }
+ rcSection = other.rcSection;
+ nTotalLine = other.nTotalLine;
+ if (other.pSecProps) {
+ if (pSecProps) {
+ *pSecProps = *other.pSecProps;
+ } else {
+ pSecProps = new CPVT_SecProps(*other.pSecProps);
+ }
+ }
+ if (other.pWordProps) {
+ if (pWordProps) {
+ *pWordProps = *other.pWordProps;
+ } else {
+ pWordProps = new CPVT_WordProps(*other.pWordProps);
+ }
+ }
+ }
+ CPVT_FloatRect rcSection;
+ int32_t nTotalLine;
+ CPVT_SecProps* pSecProps;
+ CPVT_WordProps* pWordProps;
};
struct CPVT_LineInfo {
- CPVT_LineInfo() : nTotalWord(0), nBeginWordIndex(-1), nEndWordIndex(-1),
- fLineX(0.0f), fLineY(0.0f), fLineWidth(0.0f), fLineAscent(0.0f), fLineDescent(0.0f)
- {
- }
- int32_t nTotalWord;
- int32_t nBeginWordIndex;
- int32_t nEndWordIndex;
- FX_FLOAT fLineX;
- FX_FLOAT fLineY;
- FX_FLOAT fLineWidth;
- FX_FLOAT fLineAscent;
- FX_FLOAT fLineDescent;
+ CPVT_LineInfo()
+ : nTotalWord(0),
+ nBeginWordIndex(-1),
+ nEndWordIndex(-1),
+ fLineX(0.0f),
+ fLineY(0.0f),
+ fLineWidth(0.0f),
+ fLineAscent(0.0f),
+ fLineDescent(0.0f) {}
+ int32_t nTotalWord;
+ int32_t nBeginWordIndex;
+ int32_t nEndWordIndex;
+ FX_FLOAT fLineX;
+ FX_FLOAT fLineY;
+ FX_FLOAT fLineWidth;
+ FX_FLOAT fLineAscent;
+ FX_FLOAT fLineDescent;
};
-struct CPVT_WordInfo {
- CPVT_WordInfo() : Word(0), nCharset(0),
- fWordX(0.0f), fWordY(0.0f), fWordTail(0.0f), nFontIndex(-1), pWordProps(NULL)
- {
- }
- CPVT_WordInfo(FX_WORD word, int32_t charset, int32_t fontIndex, CPVT_WordProps * pProps):
- Word(word), nCharset(charset), fWordX(0.0f), fWordY(0.0f), fWordTail(0.0f),
- nFontIndex(fontIndex), pWordProps(pProps)
- {
- }
- virtual ~CPVT_WordInfo()
- {
- delete pWordProps;
- }
- CPVT_WordInfo(const CPVT_WordInfo & word): Word(0), nCharset(0),
- fWordX(0.0f), fWordY(0.0f), fWordTail(0.0f), nFontIndex(-1), pWordProps(NULL)
- {
- operator = (word);
- }
- void operator = (const CPVT_WordInfo & word)
- {
- if (this == &word) {
- return;
- }
- Word = word.Word;
- nCharset = word.nCharset;
- nFontIndex = word.nFontIndex;
- if (word.pWordProps) {
- if (pWordProps) {
- *pWordProps = *word.pWordProps;
- } else {
- pWordProps = new CPVT_WordProps(*word.pWordProps);
- }
- }
- }
- FX_WORD Word;
- int32_t nCharset;
- FX_FLOAT fWordX;
- FX_FLOAT fWordY;
- FX_FLOAT fWordTail;
- int32_t nFontIndex;
- CPVT_WordProps* pWordProps;
+struct CPVT_WordInfo {
+ CPVT_WordInfo()
+ : Word(0),
+ nCharset(0),
+ fWordX(0.0f),
+ fWordY(0.0f),
+ fWordTail(0.0f),
+ nFontIndex(-1),
+ pWordProps(NULL) {}
+ CPVT_WordInfo(FX_WORD word,
+ int32_t charset,
+ int32_t fontIndex,
+ CPVT_WordProps* pProps)
+ : Word(word),
+ nCharset(charset),
+ fWordX(0.0f),
+ fWordY(0.0f),
+ fWordTail(0.0f),
+ nFontIndex(fontIndex),
+ pWordProps(pProps) {}
+ virtual ~CPVT_WordInfo() { delete pWordProps; }
+ CPVT_WordInfo(const CPVT_WordInfo& word)
+ : Word(0),
+ nCharset(0),
+ fWordX(0.0f),
+ fWordY(0.0f),
+ fWordTail(0.0f),
+ nFontIndex(-1),
+ pWordProps(NULL) {
+ operator=(word);
+ }
+ void operator=(const CPVT_WordInfo& word) {
+ if (this == &word) {
+ return;
+ }
+ Word = word.Word;
+ nCharset = word.nCharset;
+ nFontIndex = word.nFontIndex;
+ if (word.pWordProps) {
+ if (pWordProps) {
+ *pWordProps = *word.pWordProps;
+ } else {
+ pWordProps = new CPVT_WordProps(*word.pWordProps);
+ }
+ }
+ }
+ FX_WORD Word;
+ int32_t nCharset;
+ FX_FLOAT fWordX;
+ FX_FLOAT fWordY;
+ FX_FLOAT fWordTail;
+ int32_t nFontIndex;
+ CPVT_WordProps* pWordProps;
};
struct CPVT_FloatRange {
- CPVT_FloatRange() : fMin(0.0f), fMax(0.0f)
- {
- }
- CPVT_FloatRange(FX_FLOAT min, FX_FLOAT max) : fMin(min), fMax(max)
- {
- }
- FX_FLOAT Range() const
- {
- return fMax - fMin;
- }
- FX_FLOAT fMin, fMax;
+ CPVT_FloatRange() : fMin(0.0f), fMax(0.0f) {}
+ CPVT_FloatRange(FX_FLOAT min, FX_FLOAT max) : fMin(min), fMax(max) {}
+ FX_FLOAT Range() const { return fMax - fMin; }
+ FX_FLOAT fMin, fMax;
};
-template<class TYPE> class CPVT_ArrayTemplate : public CFX_ArrayTemplate<TYPE>
-{
-public:
- FX_BOOL IsEmpty()
- {
- return CFX_ArrayTemplate<TYPE>::GetSize() <= 0;
- }
- TYPE GetAt(int nIndex) const
- {
- if (nIndex >= 0 && nIndex < CFX_ArrayTemplate<TYPE>::GetSize()) {
- return CFX_ArrayTemplate<TYPE>::GetAt(nIndex);
- }
- return NULL;
- }
- void RemoveAt(int nIndex)
- {
- if (nIndex >= 0 && nIndex < CFX_ArrayTemplate<TYPE>::GetSize()) {
- CFX_ArrayTemplate<TYPE>::RemoveAt(nIndex);
- }
- }
+template <class TYPE>
+class CPVT_ArrayTemplate : public CFX_ArrayTemplate<TYPE> {
+ public:
+ FX_BOOL IsEmpty() { return CFX_ArrayTemplate<TYPE>::GetSize() <= 0; }
+ TYPE GetAt(int nIndex) const {
+ if (nIndex >= 0 && nIndex < CFX_ArrayTemplate<TYPE>::GetSize()) {
+ return CFX_ArrayTemplate<TYPE>::GetAt(nIndex);
+ }
+ return NULL;
+ }
+ void RemoveAt(int nIndex) {
+ if (nIndex >= 0 && nIndex < CFX_ArrayTemplate<TYPE>::GetSize()) {
+ CFX_ArrayTemplate<TYPE>::RemoveAt(nIndex);
+ }
+ }
};
-class CLine
-{
-public:
- CLine();
- virtual ~CLine();
- CPVT_WordPlace GetBeginWordPlace() const;
- CPVT_WordPlace GetEndWordPlace() const;
- CPVT_WordPlace GetPrevWordPlace(const CPVT_WordPlace & place) const;
- CPVT_WordPlace GetNextWordPlace(const CPVT_WordPlace & place) const;
- CPVT_WordPlace LinePlace;
- CPVT_LineInfo m_LineInfo;
+class CLine {
+ public:
+ CLine();
+ virtual ~CLine();
+ CPVT_WordPlace GetBeginWordPlace() const;
+ CPVT_WordPlace GetEndWordPlace() const;
+ CPVT_WordPlace GetPrevWordPlace(const CPVT_WordPlace& place) const;
+ CPVT_WordPlace GetNextWordPlace(const CPVT_WordPlace& place) const;
+ CPVT_WordPlace LinePlace;
+ CPVT_LineInfo m_LineInfo;
};
-class CLines
-{
-public:
- CLines() : m_nTotal(0) {}
- virtual ~CLines()
- {
- RemoveAll();
- }
- int32_t GetSize() const
- {
- return m_Lines.GetSize();
- }
- CLine * GetAt(int32_t nIndex) const
- {
- return m_Lines.GetAt(nIndex);
- }
- void Empty()
- {
- m_nTotal = 0;
- }
- void RemoveAll()
- {
- for (int32_t i = 0, sz = GetSize(); i < sz; i++) {
- delete GetAt(i);
- }
- m_Lines.RemoveAll();
- m_nTotal = 0;
- }
- int32_t Add(const CPVT_LineInfo & lineinfo)
- {
- if (m_nTotal >= GetSize()) {
- CLine* pLine = new CLine;
- pLine->m_LineInfo = lineinfo;
- m_Lines.Add(pLine);
- } else if (CLine* pLine = GetAt(m_nTotal)) {
- pLine->m_LineInfo = lineinfo;
- }
- return m_nTotal++;
- }
- void Clear()
- {
- for (int32_t i = GetSize() - 1; i >= m_nTotal; i--) {
- delete GetAt(i);
- m_Lines.RemoveAt(i);
- }
- }
-private:
- CPVT_ArrayTemplate<CLine*> m_Lines;
- int32_t m_nTotal;
+class CLines {
+ public:
+ CLines() : m_nTotal(0) {}
+ virtual ~CLines() { RemoveAll(); }
+ int32_t GetSize() const { return m_Lines.GetSize(); }
+ CLine* GetAt(int32_t nIndex) const { return m_Lines.GetAt(nIndex); }
+ void Empty() { m_nTotal = 0; }
+ void RemoveAll() {
+ for (int32_t i = 0, sz = GetSize(); i < sz; i++) {
+ delete GetAt(i);
+ }
+ m_Lines.RemoveAll();
+ m_nTotal = 0;
+ }
+ int32_t Add(const CPVT_LineInfo& lineinfo) {
+ if (m_nTotal >= GetSize()) {
+ CLine* pLine = new CLine;
+ pLine->m_LineInfo = lineinfo;
+ m_Lines.Add(pLine);
+ } else if (CLine* pLine = GetAt(m_nTotal)) {
+ pLine->m_LineInfo = lineinfo;
+ }
+ return m_nTotal++;
+ }
+ void Clear() {
+ for (int32_t i = GetSize() - 1; i >= m_nTotal; i--) {
+ delete GetAt(i);
+ m_Lines.RemoveAt(i);
+ }
+ }
+
+ private:
+ CPVT_ArrayTemplate<CLine*> m_Lines;
+ int32_t m_nTotal;
};
-class CSection
-{
- friend class CTypeset;
-public:
- CSection(CPDF_VariableText * pVT);
- virtual ~CSection();
- void ResetAll();
- void ResetLineArray();
- void ResetWordArray();
- void ResetLinePlace();
- CPVT_WordPlace AddWord(const CPVT_WordPlace & place, const CPVT_WordInfo & wordinfo);
- CPVT_WordPlace AddLine(const CPVT_LineInfo & lineinfo);
- void ClearWords(const CPVT_WordRange & PlaceRange);
- void ClearWord(const CPVT_WordPlace & place);
- CPVT_FloatRect Rearrange();
- CPVT_Size GetSectionSize(FX_FLOAT fFontSize);
- CPVT_WordPlace GetBeginWordPlace() const;
- CPVT_WordPlace GetEndWordPlace() const;
- CPVT_WordPlace GetPrevWordPlace(const CPVT_WordPlace & place) const;
- CPVT_WordPlace GetNextWordPlace(const CPVT_WordPlace & place) const;
- void UpdateWordPlace(CPVT_WordPlace & place) const;
- CPVT_WordPlace SearchWordPlace(const CPDF_Point & point) const;
- CPVT_WordPlace SearchWordPlace(FX_FLOAT fx, const CPVT_WordPlace & lineplace) const;
- CPVT_WordPlace SearchWordPlace(FX_FLOAT fx, const CPVT_WordRange & range) const;
-public:
- CPVT_WordPlace SecPlace;
- CPVT_SectionInfo m_SecInfo;
- CLines m_LineArray;
- CPVT_ArrayTemplate<CPVT_WordInfo*> m_WordArray;
-private:
- void ClearLeftWords(int32_t nWordIndex);
- void ClearRightWords(int32_t nWordIndex);
- void ClearMidWords(int32_t nBeginIndex, int32_t nEndIndex);
+class CSection {
+ friend class CTypeset;
+
+ public:
+ CSection(CPDF_VariableText* pVT);
+ virtual ~CSection();
+ void ResetAll();
+ void ResetLineArray();
+ void ResetWordArray();
+ void ResetLinePlace();
+ CPVT_WordPlace AddWord(const CPVT_WordPlace& place,
+ const CPVT_WordInfo& wordinfo);
+ CPVT_WordPlace AddLine(const CPVT_LineInfo& lineinfo);
+ void ClearWords(const CPVT_WordRange& PlaceRange);
+ void ClearWord(const CPVT_WordPlace& place);
+ CPVT_FloatRect Rearrange();
+ CPVT_Size GetSectionSize(FX_FLOAT fFontSize);
+ CPVT_WordPlace GetBeginWordPlace() const;
+ CPVT_WordPlace GetEndWordPlace() const;
+ CPVT_WordPlace GetPrevWordPlace(const CPVT_WordPlace& place) const;
+ CPVT_WordPlace GetNextWordPlace(const CPVT_WordPlace& place) const;
+ void UpdateWordPlace(CPVT_WordPlace& place) const;
+ CPVT_WordPlace SearchWordPlace(const CPDF_Point& point) const;
+ CPVT_WordPlace SearchWordPlace(FX_FLOAT fx,
+ const CPVT_WordPlace& lineplace) const;
+ CPVT_WordPlace SearchWordPlace(FX_FLOAT fx,
+ const CPVT_WordRange& range) const;
+
+ public:
+ CPVT_WordPlace SecPlace;
+ CPVT_SectionInfo m_SecInfo;
+ CLines m_LineArray;
+ CPVT_ArrayTemplate<CPVT_WordInfo*> m_WordArray;
- CPDF_VariableText *m_pVT;
+ private:
+ void ClearLeftWords(int32_t nWordIndex);
+ void ClearRightWords(int32_t nWordIndex);
+ void ClearMidWords(int32_t nBeginIndex, int32_t nEndIndex);
+
+ CPDF_VariableText* m_pVT;
};
-class CTypeset
-{
-public:
- CTypeset(CSection * pSection);
- virtual ~CTypeset();
- CPVT_Size GetEditSize(FX_FLOAT fFontSize);
- CPVT_FloatRect Typeset();
- CPVT_FloatRect CharArray();
-private:
- void SplitLines(FX_BOOL bTypeset, FX_FLOAT fFontSize);
- void OutputLines();
+class CTypeset {
+ public:
+ CTypeset(CSection* pSection);
+ virtual ~CTypeset();
+ CPVT_Size GetEditSize(FX_FLOAT fFontSize);
+ CPVT_FloatRect Typeset();
+ CPVT_FloatRect CharArray();
+
+ private:
+ void SplitLines(FX_BOOL bTypeset, FX_FLOAT fFontSize);
+ void OutputLines();
- CPVT_FloatRect m_rcRet;
- CPDF_VariableText * m_pVT;
- CSection * m_pSection;
+ CPVT_FloatRect m_rcRet;
+ CPDF_VariableText* m_pVT;
+ CSection* m_pSection;
};
-class CPDF_EditContainer
-{
-public:
- CPDF_EditContainer(): m_rcPlate(0, 0, 0, 0), m_rcContent(0, 0, 0, 0) {};
- virtual ~CPDF_EditContainer() {};
- virtual void SetPlateRect(const CPDF_Rect & rect)
- {
- m_rcPlate = rect;
- };
- virtual const CPDF_Rect & GetPlateRect() const
- {
- return m_rcPlate;
- };
- virtual void SetContentRect(const CPVT_FloatRect & rect)
- {
- m_rcContent = rect;
- };
- virtual CPDF_Rect GetContentRect() const
- {
- return m_rcContent;
- };
- FX_FLOAT GetPlateWidth() const
- {
- return m_rcPlate.right - m_rcPlate.left;
- };
- FX_FLOAT GetPlateHeight() const
- {
- return m_rcPlate.top - m_rcPlate.bottom;
- };
- CPVT_Size GetPlateSize() const
- {
- return CPVT_Size(GetPlateWidth(), GetPlateHeight());
- };
- CPDF_Point GetBTPoint() const
- {
- return CPDF_Point(m_rcPlate.left, m_rcPlate.top);
- };
- CPDF_Point GetETPoint() const
- {
- return CPDF_Point(m_rcPlate.right, m_rcPlate.bottom);
- };
- inline CPDF_Point InToOut(const CPDF_Point & point) const
- {
- return CPDF_Point(point.x + GetBTPoint().x, GetBTPoint().y - point.y);
- };
- inline CPDF_Point OutToIn(const CPDF_Point & point) const
- {
- return CPDF_Point(point.x - GetBTPoint().x, GetBTPoint().y - point.y);
- };
- inline CPDF_Rect InToOut(const CPVT_FloatRect & rect) const
- {
- CPDF_Point ptLeftTop = InToOut(CPDF_Point(rect.left, rect.top));
- CPDF_Point ptRightBottom = InToOut(CPDF_Point(rect.right, rect.bottom));
- return CPDF_Rect(ptLeftTop.x, ptRightBottom.y, ptRightBottom.x, ptLeftTop.y);
- };
- inline CPVT_FloatRect OutToIn(const CPDF_Rect & rect) const
- {
- CPDF_Point ptLeftTop = OutToIn(CPDF_Point(rect.left, rect.top));
- CPDF_Point ptRightBottom = OutToIn(CPDF_Point(rect.right, rect.bottom));
- return CPVT_FloatRect(ptLeftTop.x, ptLeftTop.y, ptRightBottom.x, ptRightBottom.y);
- };
+class CPDF_EditContainer {
+ public:
+ CPDF_EditContainer() : m_rcPlate(0, 0, 0, 0), m_rcContent(0, 0, 0, 0){};
+ virtual ~CPDF_EditContainer(){};
+ virtual void SetPlateRect(const CPDF_Rect& rect) { m_rcPlate = rect; };
+ virtual const CPDF_Rect& GetPlateRect() const { return m_rcPlate; };
+ virtual void SetContentRect(const CPVT_FloatRect& rect) {
+ m_rcContent = rect;
+ };
+ virtual CPDF_Rect GetContentRect() const { return m_rcContent; };
+ FX_FLOAT GetPlateWidth() const { return m_rcPlate.right - m_rcPlate.left; };
+ FX_FLOAT GetPlateHeight() const { return m_rcPlate.top - m_rcPlate.bottom; };
+ CPVT_Size GetPlateSize() const {
+ return CPVT_Size(GetPlateWidth(), GetPlateHeight());
+ };
+ CPDF_Point GetBTPoint() const {
+ return CPDF_Point(m_rcPlate.left, m_rcPlate.top);
+ };
+ CPDF_Point GetETPoint() const {
+ return CPDF_Point(m_rcPlate.right, m_rcPlate.bottom);
+ };
+ inline CPDF_Point InToOut(const CPDF_Point& point) const {
+ return CPDF_Point(point.x + GetBTPoint().x, GetBTPoint().y - point.y);
+ };
+ inline CPDF_Point OutToIn(const CPDF_Point& point) const {
+ return CPDF_Point(point.x - GetBTPoint().x, GetBTPoint().y - point.y);
+ };
+ inline CPDF_Rect InToOut(const CPVT_FloatRect& rect) const {
+ CPDF_Point ptLeftTop = InToOut(CPDF_Point(rect.left, rect.top));
+ CPDF_Point ptRightBottom = InToOut(CPDF_Point(rect.right, rect.bottom));
+ return CPDF_Rect(ptLeftTop.x, ptRightBottom.y, ptRightBottom.x,
+ ptLeftTop.y);
+ };
+ inline CPVT_FloatRect OutToIn(const CPDF_Rect& rect) const {
+ CPDF_Point ptLeftTop = OutToIn(CPDF_Point(rect.left, rect.top));
+ CPDF_Point ptRightBottom = OutToIn(CPDF_Point(rect.right, rect.bottom));
+ return CPVT_FloatRect(ptLeftTop.x, ptLeftTop.y, ptRightBottom.x,
+ ptRightBottom.y);
+ };
-private:
- CPDF_Rect m_rcPlate;
- CPVT_FloatRect m_rcContent;
+ private:
+ CPDF_Rect m_rcPlate;
+ CPVT_FloatRect m_rcContent;
};
-class CPDF_VariableText : public IPDF_VariableText, private CPDF_EditContainer
-{
- friend class CTypeset;
- friend class CSection;
- friend class CPDF_VariableText_Iterator;
-public:
- CPDF_VariableText();
- virtual ~CPDF_VariableText();
- IPDF_VariableText_Provider* SetProvider(IPDF_VariableText_Provider * pProvider);
- IPDF_VariableText_Iterator* GetIterator();
- void SetPlateRect(const CPDF_Rect & rect)
- {
- CPDF_EditContainer::SetPlateRect(rect);
- }
- void SetAlignment(int32_t nFormat = 0)
- {
- m_nAlignment = nFormat;
- }
- void SetPasswordChar(FX_WORD wSubWord = '*')
- {
- m_wSubWord = wSubWord;
- }
- void SetLimitChar(int32_t nLimitChar = 0)
- {
- m_nLimitChar = nLimitChar;
- }
- void SetCharSpace(FX_FLOAT fCharSpace = 0.0f)
- {
- m_fCharSpace = fCharSpace;
- }
- void SetHorzScale(int32_t nHorzScale = 100)
- {
- m_nHorzScale = nHorzScale;
- }
- void SetMultiLine(FX_BOOL bMultiLine = TRUE)
- {
- m_bMultiLine = bMultiLine;
- }
- void SetAutoReturn(FX_BOOL bAuto = TRUE)
- {
- m_bLimitWidth = bAuto;
- }
- void SetFontSize(FX_FLOAT fFontSize)
- {
- m_fFontSize = fFontSize;
- }
- void SetCharArray(int32_t nCharArray = 0)
- {
- m_nCharArray = nCharArray;
- }
- void SetAutoFontSize(FX_BOOL bAuto = TRUE)
- {
- m_bAutoFontSize = bAuto;
- }
- void SetRichText(FX_BOOL bRichText)
- {
- m_bRichText = bRichText;
- }
- void SetLineLeading(FX_FLOAT fLineLeading)
- {
- m_fLineLeading = fLineLeading;
- }
- void Initialize();
- FX_BOOL IsValid() const
- {
- return m_bInitial;
- }
- FX_BOOL IsRichText() const
- {
- return m_bRichText;
- }
- void RearrangeAll();
- void RearrangePart(const CPVT_WordRange & PlaceRange);
- void ResetAll();
- void SetText(const FX_WCHAR* text, int32_t charset = 1, const CPVT_SecProps * pSecProps = NULL,
- const CPVT_WordProps * pWordProps = NULL);
- CPVT_WordPlace InsertWord(const CPVT_WordPlace & place, FX_WORD word, int32_t charset = 1,
- const CPVT_WordProps * pWordProps = NULL);
- CPVT_WordPlace InsertSection(const CPVT_WordPlace & place, const CPVT_SecProps * pSecProps = NULL,
- const CPVT_WordProps * pWordProps = NULL);
- CPVT_WordPlace InsertText(const CPVT_WordPlace & place, const FX_WCHAR* text, int32_t charset = 1,
- const CPVT_SecProps * pSecProps = NULL, const CPVT_WordProps * pWordProps = NULL);
- CPVT_WordPlace DeleteWords(const CPVT_WordRange & PlaceRange);
- CPVT_WordPlace DeleteWord(const CPVT_WordPlace & place);
- CPVT_WordPlace BackSpaceWord(const CPVT_WordPlace & place);
- const CPDF_Rect & GetPlateRect() const
- {
- return CPDF_EditContainer::GetPlateRect();
- }
- CPDF_Rect GetContentRect() const;
- int32_t GetTotalWords() const;
- FX_FLOAT GetFontSize() const
- {
- return m_fFontSize;
- }
- int32_t GetAlignment() const
- {
- return m_nAlignment;
- }
- int32_t GetCharArray() const
- {
- return m_nCharArray;
- }
- int32_t GetLimitChar() const
- {
- return m_nLimitChar;
- }
- FX_BOOL IsMultiLine() const
- {
- return m_bMultiLine;
- }
- int32_t GetHorzScale() const
- {
- return m_nHorzScale;
- }
- FX_FLOAT GetCharSpace() const
- {
- return m_fCharSpace;
- }
+class CPDF_VariableText : public IPDF_VariableText, private CPDF_EditContainer {
+ friend class CTypeset;
+ friend class CSection;
+ friend class CPDF_VariableText_Iterator;
- CPVT_WordPlace GetBeginWordPlace() const;
- CPVT_WordPlace GetEndWordPlace() const;
- CPVT_WordPlace GetPrevWordPlace(const CPVT_WordPlace & place) const;
- CPVT_WordPlace GetNextWordPlace(const CPVT_WordPlace & place) const;
- CPVT_WordPlace SearchWordPlace(const CPDF_Point & point) const;
- CPVT_WordPlace GetUpWordPlace(const CPVT_WordPlace & place, const CPDF_Point & point) const;
- CPVT_WordPlace GetDownWordPlace(const CPVT_WordPlace & place, const CPDF_Point & point) const;
- CPVT_WordPlace GetLineBeginPlace(const CPVT_WordPlace & place) const;
- CPVT_WordPlace GetLineEndPlace(const CPVT_WordPlace & place) const;
- CPVT_WordPlace GetSectionBeginPlace(const CPVT_WordPlace & place) const;
- CPVT_WordPlace GetSectionEndPlace(const CPVT_WordPlace & place) const;
- void UpdateWordPlace(CPVT_WordPlace & place) const;
- int32_t WordPlaceToWordIndex(const CPVT_WordPlace & place) const;
- CPVT_WordPlace WordIndexToWordPlace(int32_t index) const;
- FX_WORD GetPasswordChar() const
- {
- return GetSubWord();
- }
- FX_WORD GetSubWord() const
- {
- return m_wSubWord;
- }
-private:
- int32_t GetCharWidth(int32_t nFontIndex, FX_WORD Word, FX_WORD SubWord, int32_t nWordStyle);
- int32_t GetTypeAscent(int32_t nFontIndex);
- int32_t GetTypeDescent(int32_t nFontIndex);
- int32_t GetWordFontIndex(FX_WORD word, int32_t charset, int32_t nFontIndex);
- int32_t GetDefaultFontIndex();
- FX_BOOL IsLatinWord(FX_WORD word);
-private:
+ public:
+ CPDF_VariableText();
+ virtual ~CPDF_VariableText();
+ IPDF_VariableText_Provider* SetProvider(
+ IPDF_VariableText_Provider* pProvider);
+ IPDF_VariableText_Iterator* GetIterator();
+ void SetPlateRect(const CPDF_Rect& rect) {
+ CPDF_EditContainer::SetPlateRect(rect);
+ }
+ void SetAlignment(int32_t nFormat = 0) { m_nAlignment = nFormat; }
+ void SetPasswordChar(FX_WORD wSubWord = '*') { m_wSubWord = wSubWord; }
+ void SetLimitChar(int32_t nLimitChar = 0) { m_nLimitChar = nLimitChar; }
+ void SetCharSpace(FX_FLOAT fCharSpace = 0.0f) { m_fCharSpace = fCharSpace; }
+ void SetHorzScale(int32_t nHorzScale = 100) { m_nHorzScale = nHorzScale; }
+ void SetMultiLine(FX_BOOL bMultiLine = TRUE) { m_bMultiLine = bMultiLine; }
+ void SetAutoReturn(FX_BOOL bAuto = TRUE) { m_bLimitWidth = bAuto; }
+ void SetFontSize(FX_FLOAT fFontSize) { m_fFontSize = fFontSize; }
+ void SetCharArray(int32_t nCharArray = 0) { m_nCharArray = nCharArray; }
+ void SetAutoFontSize(FX_BOOL bAuto = TRUE) { m_bAutoFontSize = bAuto; }
+ void SetRichText(FX_BOOL bRichText) { m_bRichText = bRichText; }
+ void SetLineLeading(FX_FLOAT fLineLeading) { m_fLineLeading = fLineLeading; }
+ void Initialize();
+ FX_BOOL IsValid() const { return m_bInitial; }
+ FX_BOOL IsRichText() const { return m_bRichText; }
+ void RearrangeAll();
+ void RearrangePart(const CPVT_WordRange& PlaceRange);
+ void ResetAll();
+ void SetText(const FX_WCHAR* text,
+ int32_t charset = 1,
+ const CPVT_SecProps* pSecProps = NULL,
+ const CPVT_WordProps* pWordProps = NULL);
+ CPVT_WordPlace InsertWord(const CPVT_WordPlace& place,
+ FX_WORD word,
+ int32_t charset = 1,
+ const CPVT_WordProps* pWordProps = NULL);
+ CPVT_WordPlace InsertSection(const CPVT_WordPlace& place,
+ const CPVT_SecProps* pSecProps = NULL,
+ const CPVT_WordProps* pWordProps = NULL);
+ CPVT_WordPlace InsertText(const CPVT_WordPlace& place,
+ const FX_WCHAR* text,
+ int32_t charset = 1,
+ const CPVT_SecProps* pSecProps = NULL,
+ const CPVT_WordProps* pWordProps = NULL);
+ CPVT_WordPlace DeleteWords(const CPVT_WordRange& PlaceRange);
+ CPVT_WordPlace DeleteWord(const CPVT_WordPlace& place);
+ CPVT_WordPlace BackSpaceWord(const CPVT_WordPlace& place);
+ const CPDF_Rect& GetPlateRect() const {
+ return CPDF_EditContainer::GetPlateRect();
+ }
+ CPDF_Rect GetContentRect() const;
+ int32_t GetTotalWords() const;
+ FX_FLOAT GetFontSize() const { return m_fFontSize; }
+ int32_t GetAlignment() const { return m_nAlignment; }
+ int32_t GetCharArray() const { return m_nCharArray; }
+ int32_t GetLimitChar() const { return m_nLimitChar; }
+ FX_BOOL IsMultiLine() const { return m_bMultiLine; }
+ int32_t GetHorzScale() const { return m_nHorzScale; }
+ FX_FLOAT GetCharSpace() const { return m_fCharSpace; }
+
+ CPVT_WordPlace GetBeginWordPlace() const;
+ CPVT_WordPlace GetEndWordPlace() const;
+ CPVT_WordPlace GetPrevWordPlace(const CPVT_WordPlace& place) const;
+ CPVT_WordPlace GetNextWordPlace(const CPVT_WordPlace& place) const;
+ CPVT_WordPlace SearchWordPlace(const CPDF_Point& point) const;
+ CPVT_WordPlace GetUpWordPlace(const CPVT_WordPlace& place,
+ const CPDF_Point& point) const;
+ CPVT_WordPlace GetDownWordPlace(const CPVT_WordPlace& place,
+ const CPDF_Point& point) const;
+ CPVT_WordPlace GetLineBeginPlace(const CPVT_WordPlace& place) const;
+ CPVT_WordPlace GetLineEndPlace(const CPVT_WordPlace& place) const;
+ CPVT_WordPlace GetSectionBeginPlace(const CPVT_WordPlace& place) const;
+ CPVT_WordPlace GetSectionEndPlace(const CPVT_WordPlace& place) const;
+ void UpdateWordPlace(CPVT_WordPlace& place) const;
+ int32_t WordPlaceToWordIndex(const CPVT_WordPlace& place) const;
+ CPVT_WordPlace WordIndexToWordPlace(int32_t index) const;
+ FX_WORD GetPasswordChar() const { return GetSubWord(); }
+ FX_WORD GetSubWord() const { return m_wSubWord; }
+
+ private:
+ int32_t GetCharWidth(int32_t nFontIndex,
+ FX_WORD Word,
+ FX_WORD SubWord,
+ int32_t nWordStyle);
+ int32_t GetTypeAscent(int32_t nFontIndex);
+ int32_t GetTypeDescent(int32_t nFontIndex);
+ int32_t GetWordFontIndex(FX_WORD word, int32_t charset, int32_t nFontIndex);
+ int32_t GetDefaultFontIndex();
+ FX_BOOL IsLatinWord(FX_WORD word);
- CPVT_WordPlace AddSection(const CPVT_WordPlace & place, const CPVT_SectionInfo & secinfo);
- CPVT_WordPlace AddLine(const CPVT_WordPlace & place, const CPVT_LineInfo & lineinfo);
- CPVT_WordPlace AddWord(const CPVT_WordPlace & place, const CPVT_WordInfo & wordinfo);
- FX_BOOL GetWordInfo(const CPVT_WordPlace & place, CPVT_WordInfo & wordinfo);
- FX_BOOL SetWordInfo(const CPVT_WordPlace & place, const CPVT_WordInfo & wordinfo);
- FX_BOOL GetLineInfo(const CPVT_WordPlace & place, CPVT_LineInfo & lineinfo);
- FX_BOOL GetSectionInfo(const CPVT_WordPlace & place, CPVT_SectionInfo & secinfo);
- FX_FLOAT GetWordFontSize(const CPVT_WordInfo & WordInfo, FX_BOOL bFactFontSize = FALSE);
- FX_FLOAT GetWordWidth(int32_t nFontIndex, FX_WORD Word, FX_WORD SubWord,
- FX_FLOAT fCharSpace, int32_t nHorzScale,
- FX_FLOAT fFontSize, FX_FLOAT fWordTail, int32_t nWordStyle);
- FX_FLOAT GetWordWidth(const CPVT_WordInfo & WordInfo);
- FX_FLOAT GetWordAscent(const CPVT_WordInfo & WordInfo, FX_FLOAT fFontSize);
- FX_FLOAT GetWordDescent(const CPVT_WordInfo & WordInfo, FX_FLOAT fFontSize);
- FX_FLOAT GetWordAscent(const CPVT_WordInfo & WordInfo, FX_BOOL bFactFontSize = FALSE);
- FX_FLOAT GetWordDescent(const CPVT_WordInfo & WordInfo, FX_BOOL bFactFontSize = FALSE);
- FX_FLOAT GetLineAscent(const CPVT_SectionInfo & SecInfo);
- FX_FLOAT GetLineDescent(const CPVT_SectionInfo & SecInfo);
- FX_FLOAT GetFontAscent(int32_t nFontIndex, FX_FLOAT fFontSize);
- FX_FLOAT GetFontDescent(int32_t nFontIndex, FX_FLOAT fFontSize);
- int32_t GetWordFontIndex(const CPVT_WordInfo & WordInfo);
- FX_FLOAT GetCharSpace(const CPVT_WordInfo & WordInfo);
- int32_t GetHorzScale(const CPVT_WordInfo & WordInfo);
- FX_FLOAT GetLineLeading(const CPVT_SectionInfo & SecInfo);
- FX_FLOAT GetLineIndent(const CPVT_SectionInfo & SecInfo);
- int32_t GetAlignment(const CPVT_SectionInfo& SecInfo);
+ private:
+ CPVT_WordPlace AddSection(const CPVT_WordPlace& place,
+ const CPVT_SectionInfo& secinfo);
+ CPVT_WordPlace AddLine(const CPVT_WordPlace& place,
+ const CPVT_LineInfo& lineinfo);
+ CPVT_WordPlace AddWord(const CPVT_WordPlace& place,
+ const CPVT_WordInfo& wordinfo);
+ FX_BOOL GetWordInfo(const CPVT_WordPlace& place, CPVT_WordInfo& wordinfo);
+ FX_BOOL SetWordInfo(const CPVT_WordPlace& place,
+ const CPVT_WordInfo& wordinfo);
+ FX_BOOL GetLineInfo(const CPVT_WordPlace& place, CPVT_LineInfo& lineinfo);
+ FX_BOOL GetSectionInfo(const CPVT_WordPlace& place,
+ CPVT_SectionInfo& secinfo);
+ FX_FLOAT GetWordFontSize(const CPVT_WordInfo& WordInfo,
+ FX_BOOL bFactFontSize = FALSE);
+ FX_FLOAT GetWordWidth(int32_t nFontIndex,
+ FX_WORD Word,
+ FX_WORD SubWord,
+ FX_FLOAT fCharSpace,
+ int32_t nHorzScale,
+ FX_FLOAT fFontSize,
+ FX_FLOAT fWordTail,
+ int32_t nWordStyle);
+ FX_FLOAT GetWordWidth(const CPVT_WordInfo& WordInfo);
+ FX_FLOAT GetWordAscent(const CPVT_WordInfo& WordInfo, FX_FLOAT fFontSize);
+ FX_FLOAT GetWordDescent(const CPVT_WordInfo& WordInfo, FX_FLOAT fFontSize);
+ FX_FLOAT GetWordAscent(const CPVT_WordInfo& WordInfo,
+ FX_BOOL bFactFontSize = FALSE);
+ FX_FLOAT GetWordDescent(const CPVT_WordInfo& WordInfo,
+ FX_BOOL bFactFontSize = FALSE);
+ FX_FLOAT GetLineAscent(const CPVT_SectionInfo& SecInfo);
+ FX_FLOAT GetLineDescent(const CPVT_SectionInfo& SecInfo);
+ FX_FLOAT GetFontAscent(int32_t nFontIndex, FX_FLOAT fFontSize);
+ FX_FLOAT GetFontDescent(int32_t nFontIndex, FX_FLOAT fFontSize);
+ int32_t GetWordFontIndex(const CPVT_WordInfo& WordInfo);
+ FX_FLOAT GetCharSpace(const CPVT_WordInfo& WordInfo);
+ int32_t GetHorzScale(const CPVT_WordInfo& WordInfo);
+ FX_FLOAT GetLineLeading(const CPVT_SectionInfo& SecInfo);
+ FX_FLOAT GetLineIndent(const CPVT_SectionInfo& SecInfo);
+ int32_t GetAlignment(const CPVT_SectionInfo& SecInfo);
- void ClearSectionRightWords(const CPVT_WordPlace & place);
- CPVT_WordPlace AjustLineHeader(const CPVT_WordPlace & place, FX_BOOL bPrevOrNext) const;
- FX_BOOL ClearEmptySection(const CPVT_WordPlace & place);
- void ClearEmptySections(const CPVT_WordRange & PlaceRange);
- void LinkLatterSection(const CPVT_WordPlace & place);
- void ClearWords(const CPVT_WordRange & PlaceRange);
- CPVT_WordPlace ClearLeftWord(const CPVT_WordPlace & place);
- CPVT_WordPlace ClearRightWord(const CPVT_WordPlace & place);
-private:
- CPVT_FloatRect Rearrange(const CPVT_WordRange & PlaceRange);
- FX_FLOAT GetAutoFontSize();
- FX_BOOL IsBigger(FX_FLOAT fFontSize);
- CPVT_FloatRect RearrangeSections(const CPVT_WordRange & PlaceRange);
-private:
- void ResetSectionArray();
-private:
- CPVT_ArrayTemplate<CSection*> m_SectionArray;
- int32_t m_nLimitChar;
- int32_t m_nCharArray;
- FX_BOOL m_bMultiLine;
- FX_BOOL m_bLimitWidth;
- FX_BOOL m_bAutoFontSize;
- int32_t m_nAlignment;
- FX_FLOAT m_fLineLeading;
- FX_FLOAT m_fCharSpace;
- int32_t m_nHorzScale;
- FX_WORD m_wSubWord;
- FX_FLOAT m_fFontSize;
+ void ClearSectionRightWords(const CPVT_WordPlace& place);
+ CPVT_WordPlace AjustLineHeader(const CPVT_WordPlace& place,
+ FX_BOOL bPrevOrNext) const;
+ FX_BOOL ClearEmptySection(const CPVT_WordPlace& place);
+ void ClearEmptySections(const CPVT_WordRange& PlaceRange);
+ void LinkLatterSection(const CPVT_WordPlace& place);
+ void ClearWords(const CPVT_WordRange& PlaceRange);
+ CPVT_WordPlace ClearLeftWord(const CPVT_WordPlace& place);
+ CPVT_WordPlace ClearRightWord(const CPVT_WordPlace& place);
-private:
- FX_BOOL m_bInitial;
- FX_BOOL m_bRichText;
- IPDF_VariableText_Provider * m_pVTProvider;
- CPDF_VariableText_Iterator * m_pVTIterator;
+ private:
+ CPVT_FloatRect Rearrange(const CPVT_WordRange& PlaceRange);
+ FX_FLOAT GetAutoFontSize();
+ FX_BOOL IsBigger(FX_FLOAT fFontSize);
+ CPVT_FloatRect RearrangeSections(const CPVT_WordRange& PlaceRange);
+
+ private:
+ void ResetSectionArray();
+
+ private:
+ CPVT_ArrayTemplate<CSection*> m_SectionArray;
+ int32_t m_nLimitChar;
+ int32_t m_nCharArray;
+ FX_BOOL m_bMultiLine;
+ FX_BOOL m_bLimitWidth;
+ FX_BOOL m_bAutoFontSize;
+ int32_t m_nAlignment;
+ FX_FLOAT m_fLineLeading;
+ FX_FLOAT m_fCharSpace;
+ int32_t m_nHorzScale;
+ FX_WORD m_wSubWord;
+ FX_FLOAT m_fFontSize;
+
+ private:
+ FX_BOOL m_bInitial;
+ FX_BOOL m_bRichText;
+ IPDF_VariableText_Provider* m_pVTProvider;
+ CPDF_VariableText_Iterator* m_pVTIterator;
};
-class CPDF_VariableText_Iterator : public IPDF_VariableText_Iterator
-{
-public:
- CPDF_VariableText_Iterator(CPDF_VariableText * pVT);
- virtual ~CPDF_VariableText_Iterator();
- FX_BOOL NextWord();
- FX_BOOL PrevWord();
- FX_BOOL NextLine();
- FX_BOOL PrevLine();
- FX_BOOL NextSection();
- FX_BOOL PrevSection();
- FX_BOOL SetWord(const CPVT_Word & word);
- FX_BOOL GetWord(CPVT_Word & word) const;
- FX_BOOL GetLine(CPVT_Line & line) const;
- FX_BOOL GetSection(CPVT_Section & section) const;
- FX_BOOL SetSection(const CPVT_Section & section);
- void SetAt(int32_t nWordIndex);
- void SetAt(const CPVT_WordPlace & place);
- const CPVT_WordPlace & GetAt() const
- {
- return m_CurPos;
- };
-private:
- CPVT_WordPlace m_CurPos;
- CPDF_VariableText * m_pVT;
+class CPDF_VariableText_Iterator : public IPDF_VariableText_Iterator {
+ public:
+ CPDF_VariableText_Iterator(CPDF_VariableText* pVT);
+ virtual ~CPDF_VariableText_Iterator();
+ FX_BOOL NextWord();
+ FX_BOOL PrevWord();
+ FX_BOOL NextLine();
+ FX_BOOL PrevLine();
+ FX_BOOL NextSection();
+ FX_BOOL PrevSection();
+ FX_BOOL SetWord(const CPVT_Word& word);
+ FX_BOOL GetWord(CPVT_Word& word) const;
+ FX_BOOL GetLine(CPVT_Line& line) const;
+ FX_BOOL GetSection(CPVT_Section& section) const;
+ FX_BOOL SetSection(const CPVT_Section& section);
+ void SetAt(int32_t nWordIndex);
+ void SetAt(const CPVT_WordPlace& place);
+ const CPVT_WordPlace& GetAt() const { return m_CurPos; };
+
+ private:
+ CPVT_WordPlace m_CurPos;
+ CPDF_VariableText* m_pVT;
};
#endif // CORE_SRC_FPDFDOC_PDF_VT_H_
diff --git a/core/src/fpdfdoc/tagged_int.h b/core/src/fpdfdoc/tagged_int.h
index 9c643a6d6b..7cf368083c 100644
--- a/core/src/fpdfdoc/tagged_int.h
+++ b/core/src/fpdfdoc/tagged_int.h
@@ -10,86 +10,90 @@
#include "../../include/fpdfdoc/fpdf_tagged.h"
class CPDF_StructElementImpl;
-class CPDF_StructTreeImpl : public CPDF_StructTree
-{
-public:
- CPDF_StructTreeImpl(const CPDF_Document* pDoc);
- ~CPDF_StructTreeImpl();
- int CountTopElements() const
- {
- return m_Kids.GetSize();
- }
- CPDF_StructElement* GetTopElement(int i) const
- {
- return (CPDF_StructElement*)m_Kids.GetAt(i);
- }
- void LoadDocTree();
- void LoadPageTree(const CPDF_Dictionary* pPageDict);
- CPDF_StructElementImpl* AddPageNode(CPDF_Dictionary* pElement, CFX_MapPtrToPtr& map, int nLevel = 0);
- FX_BOOL AddTopLevelNode(CPDF_Dictionary* pDict, CPDF_StructElementImpl* pElement);
-protected:
- const CPDF_Dictionary* m_pTreeRoot;
- const CPDF_Dictionary* m_pRoleMap;
- const CPDF_Dictionary* m_pPage;
- CFX_ArrayTemplate<CPDF_StructElementImpl*> m_Kids;
- friend class CPDF_StructElementImpl;
+class CPDF_StructTreeImpl : public CPDF_StructTree {
+ public:
+ CPDF_StructTreeImpl(const CPDF_Document* pDoc);
+ ~CPDF_StructTreeImpl();
+ int CountTopElements() const { return m_Kids.GetSize(); }
+ CPDF_StructElement* GetTopElement(int i) const {
+ return (CPDF_StructElement*)m_Kids.GetAt(i);
+ }
+ void LoadDocTree();
+ void LoadPageTree(const CPDF_Dictionary* pPageDict);
+ CPDF_StructElementImpl* AddPageNode(CPDF_Dictionary* pElement,
+ CFX_MapPtrToPtr& map,
+ int nLevel = 0);
+ FX_BOOL AddTopLevelNode(CPDF_Dictionary* pDict,
+ CPDF_StructElementImpl* pElement);
+
+ protected:
+ const CPDF_Dictionary* m_pTreeRoot;
+ const CPDF_Dictionary* m_pRoleMap;
+ const CPDF_Dictionary* m_pPage;
+ CFX_ArrayTemplate<CPDF_StructElementImpl*> m_Kids;
+ friend class CPDF_StructElementImpl;
};
-class CPDF_StructElementImpl final : public CPDF_StructElement
-{
-public:
- CPDF_StructElementImpl(CPDF_StructTreeImpl* pTree, CPDF_StructElementImpl* pParent, CPDF_Dictionary* pDict);
- CPDF_StructTree* GetTree() const
- {
- return m_pTree;
- }
- const CFX_ByteString& GetType() const
- {
- return m_Type;
- }
- CPDF_StructElement* GetParent() const
- {
- return m_pParent;
- }
- CPDF_Dictionary * GetDict() const
- {
- return m_pDict;
- }
- int CountKids() const
- {
- return m_Kids.GetSize();
- }
- const CPDF_StructKid& GetKid(int index) const
- {
- return m_Kids.GetData()[index];
- }
- CFX_PtrArray* GetObjectArray()
- {
- return &m_ObjectArray;
- }
+class CPDF_StructElementImpl final : public CPDF_StructElement {
+ public:
+ CPDF_StructElementImpl(CPDF_StructTreeImpl* pTree,
+ CPDF_StructElementImpl* pParent,
+ CPDF_Dictionary* pDict);
+ CPDF_StructTree* GetTree() const { return m_pTree; }
+ const CFX_ByteString& GetType() const { return m_Type; }
+ CPDF_StructElement* GetParent() const { return m_pParent; }
+ CPDF_Dictionary* GetDict() const { return m_pDict; }
+ int CountKids() const { return m_Kids.GetSize(); }
+ const CPDF_StructKid& GetKid(int index) const {
+ return m_Kids.GetData()[index];
+ }
+ CFX_PtrArray* GetObjectArray() { return &m_ObjectArray; }
+
+ CPDF_Object* GetAttr(const CFX_ByteStringC& owner,
+ const CFX_ByteStringC& name,
+ FX_BOOL bInheritable = FALSE,
+ FX_FLOAT fLevel = 0.0F);
- CPDF_Object* GetAttr(const CFX_ByteStringC& owner, const CFX_ByteStringC& name, FX_BOOL bInheritable = FALSE, FX_FLOAT fLevel = 0.0F);
+ CFX_ByteString GetName(const CFX_ByteStringC& owner,
+ const CFX_ByteStringC& name,
+ const CFX_ByteStringC& default_value,
+ FX_BOOL bInheritable = FALSE,
+ int subindex = -1);
+ FX_ARGB GetColor(const CFX_ByteStringC& owner,
+ const CFX_ByteStringC& name,
+ FX_ARGB default_value,
+ FX_BOOL bInheritable = FALSE,
+ int subindex = -1);
+ FX_FLOAT GetNumber(const CFX_ByteStringC& owner,
+ const CFX_ByteStringC& name,
+ FX_FLOAT default_value,
+ FX_BOOL bInheritable = FALSE,
+ int subindex = -1);
+ int GetInteger(const CFX_ByteStringC& owner,
+ const CFX_ByteStringC& name,
+ int default_value,
+ FX_BOOL bInheritable = FALSE,
+ int subindex = -1);
+ CFX_PtrArray m_ObjectArray;
+ void LoadKids(CPDF_Dictionary* pDict);
+ void LoadKid(FX_DWORD PageObjNum, CPDF_Object* pObj, CPDF_StructKid* pKid);
+ CPDF_Object* GetAttr(const CFX_ByteStringC& owner,
+ const CFX_ByteStringC& name,
+ FX_BOOL bInheritable,
+ int subindex);
+ CPDF_StructElementImpl* Retain();
+ void Release();
- CFX_ByteString GetName(const CFX_ByteStringC& owner, const CFX_ByteStringC& name, const CFX_ByteStringC& default_value, FX_BOOL bInheritable = FALSE, int subindex = -1);
- FX_ARGB GetColor(const CFX_ByteStringC& owner, const CFX_ByteStringC& name, FX_ARGB default_value, FX_BOOL bInheritable = FALSE, int subindex = -1);
- FX_FLOAT GetNumber(const CFX_ByteStringC& owner, const CFX_ByteStringC& name, FX_FLOAT default_value, FX_BOOL bInheritable = FALSE, int subindex = -1);
- int GetInteger(const CFX_ByteStringC& owner, const CFX_ByteStringC& name, int default_value, FX_BOOL bInheritable = FALSE, int subindex = -1);
- CFX_PtrArray m_ObjectArray;
- void LoadKids(CPDF_Dictionary* pDict);
- void LoadKid(FX_DWORD PageObjNum, CPDF_Object* pObj, CPDF_StructKid* pKid);
- CPDF_Object* GetAttr(const CFX_ByteStringC& owner, const CFX_ByteStringC& name, FX_BOOL bInheritable, int subindex);
- CPDF_StructElementImpl* Retain();
- void Release();
-protected:
- ~CPDF_StructElementImpl();
+ protected:
+ ~CPDF_StructElementImpl();
- CPDF_StructTreeImpl* m_pTree;
- CFX_ByteString m_Type;
- CPDF_StructElementImpl* m_pParent;
- CPDF_Dictionary* m_pDict;
- CFX_ArrayTemplate<CPDF_StructKid> m_Kids;
- int m_RefCount;
+ CPDF_StructTreeImpl* m_pTree;
+ CFX_ByteString m_Type;
+ CPDF_StructElementImpl* m_pParent;
+ CPDF_Dictionary* m_pDict;
+ CFX_ArrayTemplate<CPDF_StructKid> m_Kids;
+ int m_RefCount;
- friend class CPDF_StructTreeImpl;
+ friend class CPDF_StructTreeImpl;
};
#endif // CORE_SRC_FPDFDOC_TAGGED_INT_H_
diff --git a/core/src/fpdftext/fpdf_text.cpp b/core/src/fpdftext/fpdf_text.cpp
index 7203a694ab..52fcb5abd7 100644
--- a/core/src/fpdftext/fpdf_text.cpp
+++ b/core/src/fpdftext/fpdf_text.cpp
@@ -14,765 +14,791 @@
#include "text_int.h"
#include "txtproc.h"
-CFX_ByteString CharFromUnicodeAlt(FX_WCHAR unicode, int destcp, const FX_CHAR* defchar)
-{
- if (destcp == 0) {
- if (unicode < 0x80) {
- return CFX_ByteString((char)unicode);
- }
- const FX_CHAR* altstr = FCS_GetAltStr(unicode);
- if (altstr) {
- return CFX_ByteString(altstr, -1);
- }
- return CFX_ByteString(defchar, -1);
- }
- char buf[10];
- int iDef = 0;
- int ret = FXSYS_WideCharToMultiByte(destcp, 0, (wchar_t*)&unicode, 1, buf, 10, NULL, &iDef);
- if (ret && !iDef) {
- return CFX_ByteString(buf, ret);
+CFX_ByteString CharFromUnicodeAlt(FX_WCHAR unicode,
+ int destcp,
+ const FX_CHAR* defchar) {
+ if (destcp == 0) {
+ if (unicode < 0x80) {
+ return CFX_ByteString((char)unicode);
}
const FX_CHAR* altstr = FCS_GetAltStr(unicode);
if (altstr) {
- return CFX_ByteString(altstr, -1);
+ return CFX_ByteString(altstr, -1);
}
return CFX_ByteString(defchar, -1);
+ }
+ char buf[10];
+ int iDef = 0;
+ int ret = FXSYS_WideCharToMultiByte(destcp, 0, (wchar_t*)&unicode, 1, buf, 10,
+ NULL, &iDef);
+ if (ret && !iDef) {
+ return CFX_ByteString(buf, ret);
+ }
+ const FX_CHAR* altstr = FCS_GetAltStr(unicode);
+ if (altstr) {
+ return CFX_ByteString(altstr, -1);
+ }
+ return CFX_ByteString(defchar, -1);
}
-CTextPage::CTextPage()
-{
+CTextPage::CTextPage() {}
+CTextPage::~CTextPage() {
+ int i;
+ for (i = 0; i < m_BaseLines.GetSize(); i++) {
+ CTextBaseLine* pBaseLine = (CTextBaseLine*)m_BaseLines.GetAt(i);
+ delete pBaseLine;
+ }
+ for (i = 0; i < m_TextColumns.GetSize(); i++) {
+ CTextColumn* pTextColumn = (CTextColumn*)m_TextColumns.GetAt(i);
+ delete pTextColumn;
+ }
}
-CTextPage::~CTextPage()
-{
- int i;
- for (i = 0; i < m_BaseLines.GetSize(); i ++) {
- CTextBaseLine* pBaseLine = (CTextBaseLine*)m_BaseLines.GetAt(i);
- delete pBaseLine;
- }
- for (i = 0; i < m_TextColumns.GetSize(); i ++) {
- CTextColumn* pTextColumn = (CTextColumn*)m_TextColumns.GetAt(i);
- delete pTextColumn;
- }
-}
-void CTextPage::ProcessObject(CPDF_PageObject* pObject)
-{
- if (pObject->m_Type != PDFPAGE_TEXT) {
- return;
- }
- CPDF_TextObject* pText = (CPDF_TextObject*)pObject;
- CPDF_Font* pFont = pText->m_TextState.GetFont();
- int count = pText->CountItems();
- FX_FLOAT* pPosArray = FX_Alloc2D(FX_FLOAT, count, 2);
- pText->CalcCharPos(pPosArray);
+void CTextPage::ProcessObject(CPDF_PageObject* pObject) {
+ if (pObject->m_Type != PDFPAGE_TEXT) {
+ return;
+ }
+ CPDF_TextObject* pText = (CPDF_TextObject*)pObject;
+ CPDF_Font* pFont = pText->m_TextState.GetFont();
+ int count = pText->CountItems();
+ FX_FLOAT* pPosArray = FX_Alloc2D(FX_FLOAT, count, 2);
+ pText->CalcCharPos(pPosArray);
- FX_FLOAT fontsize_h = pText->m_TextState.GetFontSizeH();
- FX_FLOAT fontsize_v = pText->m_TextState.GetFontSizeV();
- FX_DWORD space_charcode = pFont->CharCodeFromUnicode(' ');
- FX_FLOAT spacew = 0;
- if (space_charcode != -1) {
- spacew = fontsize_h * pFont->GetCharWidthF(space_charcode) / 1000;
- }
- if (spacew == 0) {
- spacew = fontsize_h / 4;
- }
- if (pText->m_TextState.GetBaselineAngle() != 0) {
- int cc = 0;
- CFX_AffineMatrix matrix;
- pText->GetTextMatrix(&matrix);
- for (int i = 0; i < pText->m_nChars; i ++) {
- FX_DWORD charcode = pText->m_nChars == 1 ? (FX_DWORD)(uintptr_t)pText->m_pCharCodes : pText->m_pCharCodes[i];
- if (charcode == (FX_DWORD) - 1) {
- continue;
- }
- FX_RECT char_box;
- pFont->GetCharBBox(charcode, char_box);
- FX_FLOAT char_left = pPosArray ? pPosArray[cc * 2] : char_box.left * pText->m_TextState.GetFontSize() / 1000;
- FX_FLOAT char_right = pPosArray ? pPosArray[cc * 2 + 1] : char_box.right * pText->m_TextState.GetFontSize() / 1000;
- FX_FLOAT char_top = char_box.top * pText->m_TextState.GetFontSize() / 1000;
- FX_FLOAT char_bottom = char_box.bottom * pText->m_TextState.GetFontSize() / 1000;
- cc ++;
- FX_FLOAT char_origx, char_origy;
- matrix.Transform(char_left, 0, char_origx, char_origy);
- matrix.TransformRect(char_left, char_right, char_top, char_bottom);
- CFX_ByteString str;
- pFont->AppendChar(str, charcode);
- InsertTextBox(NULL, char_origy, char_left, char_right, char_top,
- char_bottom, spacew, fontsize_v, str, pFont);
- }
- if (pPosArray) {
- FX_Free(pPosArray);
- }
- return;
- }
- FX_FLOAT ratio_h = fontsize_h / pText->m_TextState.GetFontSize();
- for (int ii = 0; ii < count * 2; ii ++) {
- pPosArray[ii] *= ratio_h;
- }
- FX_FLOAT baseline = pText->m_PosY;
- CTextBaseLine* pBaseLine = NULL;
- FX_FLOAT topy = pText->m_Top;
- FX_FLOAT bottomy = pText->m_Bottom;
- FX_FLOAT leftx = pText->m_Left;
+ FX_FLOAT fontsize_h = pText->m_TextState.GetFontSizeH();
+ FX_FLOAT fontsize_v = pText->m_TextState.GetFontSizeV();
+ FX_DWORD space_charcode = pFont->CharCodeFromUnicode(' ');
+ FX_FLOAT spacew = 0;
+ if (space_charcode != -1) {
+ spacew = fontsize_h * pFont->GetCharWidthF(space_charcode) / 1000;
+ }
+ if (spacew == 0) {
+ spacew = fontsize_h / 4;
+ }
+ if (pText->m_TextState.GetBaselineAngle() != 0) {
int cc = 0;
- CFX_ByteString segment;
- int space_count = 0;
- FX_FLOAT last_left = 0, last_right = 0, segment_left = 0, segment_right = 0;
- for (int i = 0; i < pText->m_nChars; i ++) {
- FX_DWORD charcode = pText->m_nChars == 1 ? (FX_DWORD)(uintptr_t)pText->m_pCharCodes : pText->m_pCharCodes[i];
- if (charcode == (FX_DWORD) - 1) {
- continue;
- }
- FX_FLOAT char_left = pPosArray[cc * 2];
- FX_FLOAT char_right = pPosArray[cc * 2 + 1];
- cc ++;
- if (char_left < last_left || (char_left - last_right) > spacew / 2) {
- pBaseLine = InsertTextBox(pBaseLine, baseline, leftx + segment_left, leftx + segment_right,
- topy, bottomy, spacew, fontsize_v, segment, pFont);
- segment_left = char_left;
- segment = "";
- }
- if (space_count > 1) {
- pBaseLine = InsertTextBox(pBaseLine, baseline, leftx + segment_left, leftx + segment_right,
- topy, bottomy, spacew, fontsize_v, segment, pFont);
- segment = "";
- } else if (space_count == 1) {
- pFont->AppendChar(segment, ' ');
- }
- if (segment.GetLength() == 0) {
- segment_left = char_left;
- }
- segment_right = char_right;
- pFont->AppendChar(segment, charcode);
- space_count = 0;
- last_left = char_left;
- last_right = char_right;
- }
- if (segment.GetLength())
- pBaseLine = InsertTextBox(pBaseLine, baseline, leftx + segment_left, leftx + segment_right,
- topy, bottomy, spacew, fontsize_v, segment, pFont);
- FX_Free(pPosArray);
+ CFX_AffineMatrix matrix;
+ pText->GetTextMatrix(&matrix);
+ for (int i = 0; i < pText->m_nChars; i++) {
+ FX_DWORD charcode = pText->m_nChars == 1
+ ? (FX_DWORD)(uintptr_t)pText->m_pCharCodes
+ : pText->m_pCharCodes[i];
+ if (charcode == (FX_DWORD)-1) {
+ continue;
+ }
+ FX_RECT char_box;
+ pFont->GetCharBBox(charcode, char_box);
+ FX_FLOAT char_left =
+ pPosArray ? pPosArray[cc * 2]
+ : char_box.left * pText->m_TextState.GetFontSize() / 1000;
+ FX_FLOAT char_right =
+ pPosArray ? pPosArray[cc * 2 + 1]
+ : char_box.right * pText->m_TextState.GetFontSize() / 1000;
+ FX_FLOAT char_top =
+ char_box.top * pText->m_TextState.GetFontSize() / 1000;
+ FX_FLOAT char_bottom =
+ char_box.bottom * pText->m_TextState.GetFontSize() / 1000;
+ cc++;
+ FX_FLOAT char_origx, char_origy;
+ matrix.Transform(char_left, 0, char_origx, char_origy);
+ matrix.TransformRect(char_left, char_right, char_top, char_bottom);
+ CFX_ByteString str;
+ pFont->AppendChar(str, charcode);
+ InsertTextBox(NULL, char_origy, char_left, char_right, char_top,
+ char_bottom, spacew, fontsize_v, str, pFont);
+ }
+ if (pPosArray) {
+ FX_Free(pPosArray);
+ }
+ return;
+ }
+ FX_FLOAT ratio_h = fontsize_h / pText->m_TextState.GetFontSize();
+ for (int ii = 0; ii < count * 2; ii++) {
+ pPosArray[ii] *= ratio_h;
+ }
+ FX_FLOAT baseline = pText->m_PosY;
+ CTextBaseLine* pBaseLine = NULL;
+ FX_FLOAT topy = pText->m_Top;
+ FX_FLOAT bottomy = pText->m_Bottom;
+ FX_FLOAT leftx = pText->m_Left;
+ int cc = 0;
+ CFX_ByteString segment;
+ int space_count = 0;
+ FX_FLOAT last_left = 0, last_right = 0, segment_left = 0, segment_right = 0;
+ for (int i = 0; i < pText->m_nChars; i++) {
+ FX_DWORD charcode = pText->m_nChars == 1
+ ? (FX_DWORD)(uintptr_t)pText->m_pCharCodes
+ : pText->m_pCharCodes[i];
+ if (charcode == (FX_DWORD)-1) {
+ continue;
+ }
+ FX_FLOAT char_left = pPosArray[cc * 2];
+ FX_FLOAT char_right = pPosArray[cc * 2 + 1];
+ cc++;
+ if (char_left < last_left || (char_left - last_right) > spacew / 2) {
+ pBaseLine = InsertTextBox(pBaseLine, baseline, leftx + segment_left,
+ leftx + segment_right, topy, bottomy, spacew,
+ fontsize_v, segment, pFont);
+ segment_left = char_left;
+ segment = "";
+ }
+ if (space_count > 1) {
+ pBaseLine = InsertTextBox(pBaseLine, baseline, leftx + segment_left,
+ leftx + segment_right, topy, bottomy, spacew,
+ fontsize_v, segment, pFont);
+ segment = "";
+ } else if (space_count == 1) {
+ pFont->AppendChar(segment, ' ');
+ }
+ if (segment.GetLength() == 0) {
+ segment_left = char_left;
+ }
+ segment_right = char_right;
+ pFont->AppendChar(segment, charcode);
+ space_count = 0;
+ last_left = char_left;
+ last_right = char_right;
+ }
+ if (segment.GetLength())
+ pBaseLine = InsertTextBox(pBaseLine, baseline, leftx + segment_left,
+ leftx + segment_right, topy, bottomy, spacew,
+ fontsize_v, segment, pFont);
+ FX_Free(pPosArray);
}
-CTextBaseLine* CTextPage::InsertTextBox(CTextBaseLine* pBaseLine, FX_FLOAT basey, FX_FLOAT leftx,
- FX_FLOAT rightx, FX_FLOAT topy, FX_FLOAT bottomy, FX_FLOAT spacew, FX_FLOAT fontsize_v,
- CFX_ByteString& str, CPDF_Font* pFont)
-{
- if (str.GetLength() == 0) {
- return NULL;
+CTextBaseLine* CTextPage::InsertTextBox(CTextBaseLine* pBaseLine,
+ FX_FLOAT basey,
+ FX_FLOAT leftx,
+ FX_FLOAT rightx,
+ FX_FLOAT topy,
+ FX_FLOAT bottomy,
+ FX_FLOAT spacew,
+ FX_FLOAT fontsize_v,
+ CFX_ByteString& str,
+ CPDF_Font* pFont) {
+ if (str.GetLength() == 0) {
+ return NULL;
+ }
+ if (pBaseLine == NULL) {
+ int i;
+ for (i = 0; i < m_BaseLines.GetSize(); i++) {
+ CTextBaseLine* pExistLine = (CTextBaseLine*)m_BaseLines.GetAt(i);
+ if (pExistLine->m_BaseLine == basey) {
+ pBaseLine = pExistLine;
+ break;
+ }
+ if (pExistLine->m_BaseLine < basey) {
+ break;
+ }
}
if (pBaseLine == NULL) {
- int i;
- for (i = 0; i < m_BaseLines.GetSize(); i ++) {
- CTextBaseLine* pExistLine = (CTextBaseLine*)m_BaseLines.GetAt(i);
- if (pExistLine->m_BaseLine == basey) {
- pBaseLine = pExistLine;
- break;
- }
- if (pExistLine->m_BaseLine < basey) {
- break;
- }
- }
- if (pBaseLine == NULL) {
- pBaseLine = new CTextBaseLine;
- pBaseLine->m_BaseLine = basey;
- m_BaseLines.InsertAt(i, pBaseLine);
- }
- }
- CFX_WideString text;
- const FX_CHAR* pStr = str;
- int len = str.GetLength(), offset = 0;
- while (offset < len) {
- FX_DWORD ch = pFont->GetNextChar(pStr, len, offset);
- CFX_WideString unicode_str = pFont->UnicodeFromCharCode(ch);
- if (unicode_str.IsEmpty()) {
- text += (FX_WCHAR)ch;
- }
- else {
- text += unicode_str;
- }
+ pBaseLine = new CTextBaseLine;
+ pBaseLine->m_BaseLine = basey;
+ m_BaseLines.InsertAt(i, pBaseLine);
+ }
+ }
+ CFX_WideString text;
+ const FX_CHAR* pStr = str;
+ int len = str.GetLength(), offset = 0;
+ while (offset < len) {
+ FX_DWORD ch = pFont->GetNextChar(pStr, len, offset);
+ CFX_WideString unicode_str = pFont->UnicodeFromCharCode(ch);
+ if (unicode_str.IsEmpty()) {
+ text += (FX_WCHAR)ch;
+ } else {
+ text += unicode_str;
}
- pBaseLine->InsertTextBox(leftx, rightx, topy, bottomy, spacew, fontsize_v, text);
- return pBaseLine;
+ }
+ pBaseLine->InsertTextBox(leftx, rightx, topy, bottomy, spacew, fontsize_v,
+ text);
+ return pBaseLine;
}
-void CTextPage::WriteOutput(CFX_WideStringArray& lines, int iMinWidth)
-{
- FX_FLOAT lastheight = -1;
- FX_FLOAT lastbaseline = -1;
- FX_FLOAT MinLeftX = 1000000;
- FX_FLOAT MaxRightX = 0;
- int i;
- for (i = 0; i < m_BaseLines.GetSize(); i ++) {
- CTextBaseLine* pBaseLine = (CTextBaseLine*)m_BaseLines.GetAt(i);
- FX_FLOAT leftx, rightx;
- if (pBaseLine->GetWidth(leftx, rightx)) {
- if (leftx < MinLeftX) {
- MinLeftX = leftx;
- }
- if (rightx > MaxRightX) {
- MaxRightX = rightx;
- }
- }
- }
- for (i = 0; i < m_BaseLines.GetSize(); i ++) {
- CTextBaseLine* pBaseLine = (CTextBaseLine*)m_BaseLines.GetAt(i);
- pBaseLine->MergeBoxes();
- }
- for (i = 1; i < m_BaseLines.GetSize(); i ++) {
- CTextBaseLine* pBaseLine = (CTextBaseLine*)m_BaseLines.GetAt(i);
- CTextBaseLine* pPrevLine = (CTextBaseLine*)m_BaseLines.GetAt(i - 1);
- if (pBaseLine->CanMerge(pPrevLine)) {
- pPrevLine->Merge(pBaseLine);
- delete pBaseLine;
- m_BaseLines.RemoveAt(i);
- i --;
- }
- }
- if (m_bAutoWidth) {
- int* widths = FX_Alloc(int, m_BaseLines.GetSize());
- for (i = 0; i < m_BaseLines.GetSize(); i ++) {
- widths[i] = 0;
- CTextBaseLine* pBaseLine = (CTextBaseLine*)m_BaseLines.GetAt(i);
- int TotalChars = 0;
- FX_FLOAT TotalWidth = 0;
- int minchars;
- pBaseLine->CountChars(TotalChars, TotalWidth, minchars);
- if (TotalChars) {
- FX_FLOAT charwidth = TotalWidth / TotalChars;
- widths[i] = (int)((MaxRightX - MinLeftX) / charwidth);
- }
- if (widths[i] > 1000) {
- widths[i] = 1000;
- }
- if (widths[i] < minchars) {
- widths[i] = minchars;
- }
- }
- int AvgWidth = 0, widthcount = 0;
- for (i = 0; i < m_BaseLines.GetSize(); i ++)
- if (widths[i]) {
- AvgWidth += widths[i];
- widthcount ++;
- }
- AvgWidth = int((FX_FLOAT)AvgWidth / widthcount + 0.5);
- int MaxWidth = 0;
- for (i = 0; i < m_BaseLines.GetSize(); i ++)
- if (MaxWidth < widths[i]) {
- MaxWidth = widths[i];
- }
- if (MaxWidth > AvgWidth * 6 / 5) {
- MaxWidth = AvgWidth * 6 / 5;
- }
- FX_Free(widths);
- if (iMinWidth < MaxWidth) {
- iMinWidth = MaxWidth;
- }
- }
- for (i = 0; i < m_BaseLines.GetSize(); i ++) {
- CTextBaseLine* pBaseLine = (CTextBaseLine*)m_BaseLines.GetAt(i);
- pBaseLine->MergeBoxes();
- }
- if (m_bKeepColumn) {
- FindColumns();
- }
- for (i = 0; i < m_BaseLines.GetSize(); i ++) {
- CTextBaseLine* pBaseLine = (CTextBaseLine*)m_BaseLines.GetAt(i);
- if (lastheight >= 0) {
- FX_FLOAT dy = lastbaseline - pBaseLine->m_BaseLine;
- if (dy >= (pBaseLine->m_MaxFontSizeV) * 1.5 || dy >= lastheight * 1.5) {
- lines.Add(L"");
- }
- }
- lastheight = pBaseLine->m_MaxFontSizeV;
- lastbaseline = pBaseLine->m_BaseLine;
- CFX_WideString str;
- pBaseLine->WriteOutput(str, MinLeftX, MaxRightX - MinLeftX, iMinWidth);
- lines.Add(str);
- }
+void CTextPage::WriteOutput(CFX_WideStringArray& lines, int iMinWidth) {
+ FX_FLOAT lastheight = -1;
+ FX_FLOAT lastbaseline = -1;
+ FX_FLOAT MinLeftX = 1000000;
+ FX_FLOAT MaxRightX = 0;
+ int i;
+ for (i = 0; i < m_BaseLines.GetSize(); i++) {
+ CTextBaseLine* pBaseLine = (CTextBaseLine*)m_BaseLines.GetAt(i);
+ FX_FLOAT leftx, rightx;
+ if (pBaseLine->GetWidth(leftx, rightx)) {
+ if (leftx < MinLeftX) {
+ MinLeftX = leftx;
+ }
+ if (rightx > MaxRightX) {
+ MaxRightX = rightx;
+ }
+ }
+ }
+ for (i = 0; i < m_BaseLines.GetSize(); i++) {
+ CTextBaseLine* pBaseLine = (CTextBaseLine*)m_BaseLines.GetAt(i);
+ pBaseLine->MergeBoxes();
+ }
+ for (i = 1; i < m_BaseLines.GetSize(); i++) {
+ CTextBaseLine* pBaseLine = (CTextBaseLine*)m_BaseLines.GetAt(i);
+ CTextBaseLine* pPrevLine = (CTextBaseLine*)m_BaseLines.GetAt(i - 1);
+ if (pBaseLine->CanMerge(pPrevLine)) {
+ pPrevLine->Merge(pBaseLine);
+ delete pBaseLine;
+ m_BaseLines.RemoveAt(i);
+ i--;
+ }
+ }
+ if (m_bAutoWidth) {
+ int* widths = FX_Alloc(int, m_BaseLines.GetSize());
+ for (i = 0; i < m_BaseLines.GetSize(); i++) {
+ widths[i] = 0;
+ CTextBaseLine* pBaseLine = (CTextBaseLine*)m_BaseLines.GetAt(i);
+ int TotalChars = 0;
+ FX_FLOAT TotalWidth = 0;
+ int minchars;
+ pBaseLine->CountChars(TotalChars, TotalWidth, minchars);
+ if (TotalChars) {
+ FX_FLOAT charwidth = TotalWidth / TotalChars;
+ widths[i] = (int)((MaxRightX - MinLeftX) / charwidth);
+ }
+ if (widths[i] > 1000) {
+ widths[i] = 1000;
+ }
+ if (widths[i] < minchars) {
+ widths[i] = minchars;
+ }
+ }
+ int AvgWidth = 0, widthcount = 0;
+ for (i = 0; i < m_BaseLines.GetSize(); i++)
+ if (widths[i]) {
+ AvgWidth += widths[i];
+ widthcount++;
+ }
+ AvgWidth = int((FX_FLOAT)AvgWidth / widthcount + 0.5);
+ int MaxWidth = 0;
+ for (i = 0; i < m_BaseLines.GetSize(); i++)
+ if (MaxWidth < widths[i]) {
+ MaxWidth = widths[i];
+ }
+ if (MaxWidth > AvgWidth * 6 / 5) {
+ MaxWidth = AvgWidth * 6 / 5;
+ }
+ FX_Free(widths);
+ if (iMinWidth < MaxWidth) {
+ iMinWidth = MaxWidth;
+ }
+ }
+ for (i = 0; i < m_BaseLines.GetSize(); i++) {
+ CTextBaseLine* pBaseLine = (CTextBaseLine*)m_BaseLines.GetAt(i);
+ pBaseLine->MergeBoxes();
+ }
+ if (m_bKeepColumn) {
+ FindColumns();
+ }
+ for (i = 0; i < m_BaseLines.GetSize(); i++) {
+ CTextBaseLine* pBaseLine = (CTextBaseLine*)m_BaseLines.GetAt(i);
+ if (lastheight >= 0) {
+ FX_FLOAT dy = lastbaseline - pBaseLine->m_BaseLine;
+ if (dy >= (pBaseLine->m_MaxFontSizeV) * 1.5 || dy >= lastheight * 1.5) {
+ lines.Add(L"");
+ }
+ }
+ lastheight = pBaseLine->m_MaxFontSizeV;
+ lastbaseline = pBaseLine->m_BaseLine;
+ CFX_WideString str;
+ pBaseLine->WriteOutput(str, MinLeftX, MaxRightX - MinLeftX, iMinWidth);
+ lines.Add(str);
+ }
}
-void NormalizeCompositeChar(FX_WCHAR wChar, CFX_WideString& sDest)
-{
- wChar = FX_GetMirrorChar(wChar, TRUE, FALSE);
- FX_WCHAR* pDst = NULL;
- FX_STRSIZE nCount = FX_Unicode_GetNormalization(wChar, pDst);
- if (nCount < 1 ) {
- sDest += wChar;
- return;
- }
- pDst = new FX_WCHAR[nCount];
- FX_Unicode_GetNormalization(wChar, pDst);
- for (int nIndex = 0; nIndex < nCount; nIndex++) {
- sDest += pDst[nIndex];
- }
- delete[] pDst;
+void NormalizeCompositeChar(FX_WCHAR wChar, CFX_WideString& sDest) {
+ wChar = FX_GetMirrorChar(wChar, TRUE, FALSE);
+ FX_WCHAR* pDst = NULL;
+ FX_STRSIZE nCount = FX_Unicode_GetNormalization(wChar, pDst);
+ if (nCount < 1) {
+ sDest += wChar;
+ return;
+ }
+ pDst = new FX_WCHAR[nCount];
+ FX_Unicode_GetNormalization(wChar, pDst);
+ for (int nIndex = 0; nIndex < nCount; nIndex++) {
+ sDest += pDst[nIndex];
+ }
+ delete[] pDst;
}
-void NormalizeString(CFX_WideString& str)
-{
- if (str.GetLength() <= 0) {
- return;
- }
- CFX_WideString sBuffer;
- nonstd::unique_ptr<IFX_BidiChar> pBidiChar(IFX_BidiChar::Create());
- CFX_WordArray order;
- FX_BOOL bR2L = FALSE;
- int32_t start = 0, count = 0, i = 0;
- int nR2L = 0, nL2R = 0;
- for (i = 0; i < str.GetLength(); i++) {
- if(pBidiChar->AppendChar(str.GetAt(i))) {
- int32_t ret = pBidiChar->GetBidiInfo(start, count);
- order.Add(start);
- order.Add(count);
- order.Add(ret);
- if(!bR2L) {
- if(ret == 2) {
- nR2L++;
- } else if (ret == 1) {
- nL2R++;
- }
- }
- }
- }
- if(pBidiChar->EndChar()) {
- int32_t ret = pBidiChar->GetBidiInfo(start, count);
- order.Add(start);
- order.Add(count);
- order.Add(ret);
- if(!bR2L) {
- if(ret == 2) {
- nR2L++;
- } else if(ret == 1) {
- nL2R++;
- }
- }
- }
- if(nR2L > 0 && nR2L >= nL2R) {
- bR2L = TRUE;
- }
- if(bR2L) {
- int count = order.GetSize();
- for(int j = count - 1; j > 0; j -= 3) {
- int ret = order.GetAt(j);
- int start = order.GetAt(j - 2);
- int count1 = order.GetAt(j - 1);
- if(ret == 2 || ret == 0) {
- for(int i = start + count1 - 1; i >= start; i--) {
- NormalizeCompositeChar(str[i], sBuffer);
- }
- } else {
- i = j;
- FX_BOOL bSymbol = FALSE;
- while(i > 0 && order.GetAt(i) != 2) {
- bSymbol = !order.GetAt(i);
- i -= 3;
- }
- int end = start + count1 ;
- int n = 0;
- if(bSymbol) {
- n = i + 6;
- } else {
- n = i + 3;
- }
- if(n >= j) {
- for(int m = start; m < end; m++) {
- sBuffer += str[m];
- }
- } else {
- i = j;
- j = n;
- for(; n <= i; n += 3) {
- int start = order.GetAt(n - 2);
- int count1 = order.GetAt(n - 1);
- int end = start + count1 ;
- for(int m = start; m < end; m++) {
- sBuffer += str[m];
- }
- }
- }
- }
+void NormalizeString(CFX_WideString& str) {
+ if (str.GetLength() <= 0) {
+ return;
+ }
+ CFX_WideString sBuffer;
+ nonstd::unique_ptr<IFX_BidiChar> pBidiChar(IFX_BidiChar::Create());
+ CFX_WordArray order;
+ FX_BOOL bR2L = FALSE;
+ int32_t start = 0, count = 0, i = 0;
+ int nR2L = 0, nL2R = 0;
+ for (i = 0; i < str.GetLength(); i++) {
+ if (pBidiChar->AppendChar(str.GetAt(i))) {
+ int32_t ret = pBidiChar->GetBidiInfo(start, count);
+ order.Add(start);
+ order.Add(count);
+ order.Add(ret);
+ if (!bR2L) {
+ if (ret == 2) {
+ nR2L++;
+ } else if (ret == 1) {
+ nL2R++;
+ }
+ }
+ }
+ }
+ if (pBidiChar->EndChar()) {
+ int32_t ret = pBidiChar->GetBidiInfo(start, count);
+ order.Add(start);
+ order.Add(count);
+ order.Add(ret);
+ if (!bR2L) {
+ if (ret == 2) {
+ nR2L++;
+ } else if (ret == 1) {
+ nL2R++;
+ }
+ }
+ }
+ if (nR2L > 0 && nR2L >= nL2R) {
+ bR2L = TRUE;
+ }
+ if (bR2L) {
+ int count = order.GetSize();
+ for (int j = count - 1; j > 0; j -= 3) {
+ int ret = order.GetAt(j);
+ int start = order.GetAt(j - 2);
+ int count1 = order.GetAt(j - 1);
+ if (ret == 2 || ret == 0) {
+ for (int i = start + count1 - 1; i >= start; i--) {
+ NormalizeCompositeChar(str[i], sBuffer);
+ }
+ } else {
+ i = j;
+ FX_BOOL bSymbol = FALSE;
+ while (i > 0 && order.GetAt(i) != 2) {
+ bSymbol = !order.GetAt(i);
+ i -= 3;
+ }
+ int end = start + count1;
+ int n = 0;
+ if (bSymbol) {
+ n = i + 6;
+ } else {
+ n = i + 3;
}
- } else {
- int count = order.GetSize();
- FX_BOOL bL2R = FALSE;
- for(int j = 0; j < count; j += 3) {
- int ret = order.GetAt(j + 2);
- int start = order.GetAt(j);
- int count1 = order.GetAt(j + 1);
- if(ret == 2 || (j == 0 && ret == 0 && !bL2R)) {
- int i = j + 3;
- while(bR2L && i < count) {
- if(order.GetAt(i + 2) == 1) {
- break;
- } else {
- i += 3;
- }
- }
- if(i == 3) {
- j = -3;
- bL2R = TRUE;
- continue;
- }
- int end = str.GetLength() - 1;
- if(i < count) {
- end = order.GetAt(i) - 1;
- }
- j = i - 3;
- for(int n = end; n >= start; n--) {
- NormalizeCompositeChar(str[i], sBuffer);
- }
- } else {
- int end = start + count1 ;
- for(int i = start; i < end; i++) {
- sBuffer += str[i];
- }
+ if (n >= j) {
+ for (int m = start; m < end; m++) {
+ sBuffer += str[m];
+ }
+ } else {
+ i = j;
+ j = n;
+ for (; n <= i; n += 3) {
+ int start = order.GetAt(n - 2);
+ int count1 = order.GetAt(n - 1);
+ int end = start + count1;
+ for (int m = start; m < end; m++) {
+ sBuffer += str[m];
}
+ }
+ }
+ }
+ }
+ } else {
+ int count = order.GetSize();
+ FX_BOOL bL2R = FALSE;
+ for (int j = 0; j < count; j += 3) {
+ int ret = order.GetAt(j + 2);
+ int start = order.GetAt(j);
+ int count1 = order.GetAt(j + 1);
+ if (ret == 2 || (j == 0 && ret == 0 && !bL2R)) {
+ int i = j + 3;
+ while (bR2L && i < count) {
+ if (order.GetAt(i + 2) == 1) {
+ break;
+ } else {
+ i += 3;
+ }
}
- }
- str.Empty();
- str += sBuffer;
-}
-static FX_BOOL IsNumber(CFX_WideString& str)
-{
- for (int i = 0; i < str.GetLength(); i ++) {
- FX_WCHAR ch = str[i];
- if ((ch < '0' || ch > '9') && ch != '-' && ch != '+' && ch != '.' && ch != ' ') {
- return FALSE;
+ if (i == 3) {
+ j = -3;
+ bL2R = TRUE;
+ continue;
}
- }
- return TRUE;
-}
-void CTextPage::FindColumns()
-{
- int i;
- for (i = 0; i < m_BaseLines.GetSize(); i ++) {
- CTextBaseLine* pBaseLine = (CTextBaseLine*)m_BaseLines.GetAt(i);
- for (int j = 0; j < pBaseLine->m_TextList.GetSize(); j ++) {
- CTextBox* pTextBox = (CTextBox*)pBaseLine->m_TextList.GetAt(j);
- CTextColumn* pColumn = FindColumn(pTextBox->m_Right);
- if (pColumn == NULL) {
- pColumn = new CTextColumn;
- pColumn->m_Count = 1;
- pColumn->m_AvgPos = pTextBox->m_Right;
- pColumn->m_TextPos = -1;
- m_TextColumns.Add(pColumn);
- } else {
- pColumn->m_AvgPos = (pColumn->m_Count * pColumn->m_AvgPos + pTextBox->m_Right) /
- (pColumn->m_Count + 1);
- pColumn->m_Count ++;
- }
+ int end = str.GetLength() - 1;
+ if (i < count) {
+ end = order.GetAt(i) - 1;
}
- }
- int mincount = m_BaseLines.GetSize() / 4;
- for (i = 0; i < m_TextColumns.GetSize(); i ++) {
- CTextColumn* pTextColumn = (CTextColumn*)m_TextColumns.GetAt(i);
- if (pTextColumn->m_Count >= mincount) {
- continue;
+ j = i - 3;
+ for (int n = end; n >= start; n--) {
+ NormalizeCompositeChar(str[i], sBuffer);
}
- delete pTextColumn;
- m_TextColumns.RemoveAt(i);
- i --;
- }
- for (i = 0; i < m_BaseLines.GetSize(); i ++) {
- CTextBaseLine* pBaseLine = (CTextBaseLine*)m_BaseLines.GetAt(i);
- for (int j = 0; j < pBaseLine->m_TextList.GetSize(); j ++) {
- CTextBox* pTextBox = (CTextBox*)pBaseLine->m_TextList.GetAt(j);
- if (IsNumber(pTextBox->m_Text)) {
- pTextBox->m_pColumn = FindColumn(pTextBox->m_Right);
- }
+ } else {
+ int end = start + count1;
+ for (int i = start; i < end; i++) {
+ sBuffer += str[i];
}
+ }
}
+ }
+ str.Empty();
+ str += sBuffer;
}
-CTextColumn* CTextPage::FindColumn(FX_FLOAT xpos)
-{
- for (int i = 0; i < m_TextColumns.GetSize(); i ++) {
- CTextColumn* pColumn = (CTextColumn*)m_TextColumns.GetAt(i);
- if (pColumn->m_AvgPos < xpos + 1 && pColumn->m_AvgPos > xpos - 1) {
- return pColumn;
- }
- }
- return NULL;
+static FX_BOOL IsNumber(CFX_WideString& str) {
+ for (int i = 0; i < str.GetLength(); i++) {
+ FX_WCHAR ch = str[i];
+ if ((ch < '0' || ch > '9') && ch != '-' && ch != '+' && ch != '.' &&
+ ch != ' ') {
+ return FALSE;
+ }
+ }
+ return TRUE;
}
-void CTextPage::BreakSpace(CPDF_TextObject* pTextObj)
-{
+void CTextPage::FindColumns() {
+ int i;
+ for (i = 0; i < m_BaseLines.GetSize(); i++) {
+ CTextBaseLine* pBaseLine = (CTextBaseLine*)m_BaseLines.GetAt(i);
+ for (int j = 0; j < pBaseLine->m_TextList.GetSize(); j++) {
+ CTextBox* pTextBox = (CTextBox*)pBaseLine->m_TextList.GetAt(j);
+ CTextColumn* pColumn = FindColumn(pTextBox->m_Right);
+ if (pColumn == NULL) {
+ pColumn = new CTextColumn;
+ pColumn->m_Count = 1;
+ pColumn->m_AvgPos = pTextBox->m_Right;
+ pColumn->m_TextPos = -1;
+ m_TextColumns.Add(pColumn);
+ } else {
+ pColumn->m_AvgPos =
+ (pColumn->m_Count * pColumn->m_AvgPos + pTextBox->m_Right) /
+ (pColumn->m_Count + 1);
+ pColumn->m_Count++;
+ }
+ }
+ }
+ int mincount = m_BaseLines.GetSize() / 4;
+ for (i = 0; i < m_TextColumns.GetSize(); i++) {
+ CTextColumn* pTextColumn = (CTextColumn*)m_TextColumns.GetAt(i);
+ if (pTextColumn->m_Count >= mincount) {
+ continue;
+ }
+ delete pTextColumn;
+ m_TextColumns.RemoveAt(i);
+ i--;
+ }
+ for (i = 0; i < m_BaseLines.GetSize(); i++) {
+ CTextBaseLine* pBaseLine = (CTextBaseLine*)m_BaseLines.GetAt(i);
+ for (int j = 0; j < pBaseLine->m_TextList.GetSize(); j++) {
+ CTextBox* pTextBox = (CTextBox*)pBaseLine->m_TextList.GetAt(j);
+ if (IsNumber(pTextBox->m_Text)) {
+ pTextBox->m_pColumn = FindColumn(pTextBox->m_Right);
+ }
+ }
+ }
}
-CTextBaseLine::CTextBaseLine()
-{
- m_Top = -100000;
- m_Bottom = 100000;
- m_MaxFontSizeV = 0;
+CTextColumn* CTextPage::FindColumn(FX_FLOAT xpos) {
+ for (int i = 0; i < m_TextColumns.GetSize(); i++) {
+ CTextColumn* pColumn = (CTextColumn*)m_TextColumns.GetAt(i);
+ if (pColumn->m_AvgPos < xpos + 1 && pColumn->m_AvgPos > xpos - 1) {
+ return pColumn;
+ }
+ }
+ return NULL;
}
-CTextBaseLine::~CTextBaseLine()
-{
- for (int i = 0; i < m_TextList.GetSize(); i ++) {
- CTextBox* pText = (CTextBox*)m_TextList.GetAt(i);
- delete pText;
- }
+void CTextPage::BreakSpace(CPDF_TextObject* pTextObj) {}
+CTextBaseLine::CTextBaseLine() {
+ m_Top = -100000;
+ m_Bottom = 100000;
+ m_MaxFontSizeV = 0;
}
-void CTextBaseLine::InsertTextBox(FX_FLOAT leftx, FX_FLOAT rightx, FX_FLOAT topy, FX_FLOAT bottomy,
- FX_FLOAT spacew, FX_FLOAT fontsize_v, const CFX_WideString& text)
-{
- if (m_Top < topy) {
- m_Top = topy;
- }
- if (m_Bottom > bottomy) {
- m_Bottom = bottomy;
- }
- if (m_MaxFontSizeV < fontsize_v) {
- m_MaxFontSizeV = fontsize_v;
- }
- int i;
- for (i = 0; i < m_TextList.GetSize(); i ++) {
- CTextBox* pText = (CTextBox*)m_TextList.GetAt(i);
- if (pText->m_Left > leftx) {
- break;
- }
- }
- CTextBox* pText = new CTextBox;
- pText->m_Text = text;
- pText->m_Left = leftx;
- pText->m_Right = rightx;
- pText->m_Top = topy;
- pText->m_Bottom = bottomy;
- pText->m_SpaceWidth = spacew;
- pText->m_FontSizeV = fontsize_v;
- pText->m_pColumn = NULL;
- m_TextList.InsertAt(i, pText);
+CTextBaseLine::~CTextBaseLine() {
+ for (int i = 0; i < m_TextList.GetSize(); i++) {
+ CTextBox* pText = (CTextBox*)m_TextList.GetAt(i);
+ delete pText;
+ }
}
-FX_BOOL GetIntersection(FX_FLOAT low1, FX_FLOAT high1, FX_FLOAT low2, FX_FLOAT high2,
- FX_FLOAT& interlow, FX_FLOAT& interhigh);
-FX_BOOL CTextBaseLine::CanMerge(CTextBaseLine* pOther)
-{
- FX_FLOAT inter_top, inter_bottom;
- if (!GetIntersection(m_Bottom, m_Top, pOther->m_Bottom, pOther->m_Top,
- inter_bottom, inter_top)) {
- return FALSE;
- }
- FX_FLOAT inter_h = inter_top - inter_bottom;
- if (inter_h < (m_Top - m_Bottom) / 2 && inter_h < (pOther->m_Top - pOther->m_Bottom) / 2) {
+void CTextBaseLine::InsertTextBox(FX_FLOAT leftx,
+ FX_FLOAT rightx,
+ FX_FLOAT topy,
+ FX_FLOAT bottomy,
+ FX_FLOAT spacew,
+ FX_FLOAT fontsize_v,
+ const CFX_WideString& text) {
+ if (m_Top < topy) {
+ m_Top = topy;
+ }
+ if (m_Bottom > bottomy) {
+ m_Bottom = bottomy;
+ }
+ if (m_MaxFontSizeV < fontsize_v) {
+ m_MaxFontSizeV = fontsize_v;
+ }
+ int i;
+ for (i = 0; i < m_TextList.GetSize(); i++) {
+ CTextBox* pText = (CTextBox*)m_TextList.GetAt(i);
+ if (pText->m_Left > leftx) {
+ break;
+ }
+ }
+ CTextBox* pText = new CTextBox;
+ pText->m_Text = text;
+ pText->m_Left = leftx;
+ pText->m_Right = rightx;
+ pText->m_Top = topy;
+ pText->m_Bottom = bottomy;
+ pText->m_SpaceWidth = spacew;
+ pText->m_FontSizeV = fontsize_v;
+ pText->m_pColumn = NULL;
+ m_TextList.InsertAt(i, pText);
+}
+FX_BOOL GetIntersection(FX_FLOAT low1,
+ FX_FLOAT high1,
+ FX_FLOAT low2,
+ FX_FLOAT high2,
+ FX_FLOAT& interlow,
+ FX_FLOAT& interhigh);
+FX_BOOL CTextBaseLine::CanMerge(CTextBaseLine* pOther) {
+ FX_FLOAT inter_top, inter_bottom;
+ if (!GetIntersection(m_Bottom, m_Top, pOther->m_Bottom, pOther->m_Top,
+ inter_bottom, inter_top)) {
+ return FALSE;
+ }
+ FX_FLOAT inter_h = inter_top - inter_bottom;
+ if (inter_h < (m_Top - m_Bottom) / 2 &&
+ inter_h < (pOther->m_Top - pOther->m_Bottom) / 2) {
+ return FALSE;
+ }
+ FX_FLOAT dy = (FX_FLOAT)FXSYS_fabs(m_BaseLine - pOther->m_BaseLine);
+ for (int i = 0; i < m_TextList.GetSize(); i++) {
+ CTextBox* pText = (CTextBox*)m_TextList.GetAt(i);
+ for (int j = 0; j < pOther->m_TextList.GetSize(); j++) {
+ CTextBox* pOtherText = (CTextBox*)pOther->m_TextList.GetAt(j);
+ FX_FLOAT inter_left, inter_right;
+ if (!GetIntersection(pText->m_Left, pText->m_Right, pOtherText->m_Left,
+ pOtherText->m_Right, inter_left, inter_right)) {
+ continue;
+ }
+ FX_FLOAT inter_w = inter_right - inter_left;
+ if (inter_w < pText->m_SpaceWidth / 2 &&
+ inter_w < pOtherText->m_SpaceWidth / 2) {
+ continue;
+ }
+ if (dy >= (pText->m_Bottom - pText->m_Top) / 2 ||
+ dy >= (pOtherText->m_Bottom - pOtherText->m_Top) / 2) {
return FALSE;
+ }
}
- FX_FLOAT dy = (FX_FLOAT)FXSYS_fabs(m_BaseLine - pOther->m_BaseLine);
- for (int i = 0; i < m_TextList.GetSize(); i ++) {
- CTextBox* pText = (CTextBox*)m_TextList.GetAt(i);
- for (int j = 0; j < pOther->m_TextList.GetSize(); j ++) {
- CTextBox* pOtherText = (CTextBox*)pOther->m_TextList.GetAt(j);
- FX_FLOAT inter_left, inter_right;
- if (!GetIntersection(pText->m_Left, pText->m_Right,
- pOtherText->m_Left, pOtherText->m_Right, inter_left, inter_right)) {
- continue;
- }
- FX_FLOAT inter_w = inter_right - inter_left;
- if (inter_w < pText->m_SpaceWidth / 2 && inter_w < pOtherText->m_SpaceWidth / 2) {
- continue;
- }
- if (dy >= (pText->m_Bottom - pText->m_Top) / 2 ||
- dy >= (pOtherText->m_Bottom - pOtherText->m_Top) / 2) {
- return FALSE;
- }
- }
- }
- return TRUE;
+ }
+ return TRUE;
}
-void CTextBaseLine::Merge(CTextBaseLine* pOther)
-{
- for (int i = 0; i < pOther->m_TextList.GetSize(); i ++) {
- CTextBox* pText = (CTextBox*)pOther->m_TextList.GetAt(i);
- InsertTextBox(pText->m_Left, pText->m_Right, pText->m_Top, pText->m_Bottom,
- pText->m_SpaceWidth, pText->m_FontSizeV, pText->m_Text);
- }
+void CTextBaseLine::Merge(CTextBaseLine* pOther) {
+ for (int i = 0; i < pOther->m_TextList.GetSize(); i++) {
+ CTextBox* pText = (CTextBox*)pOther->m_TextList.GetAt(i);
+ InsertTextBox(pText->m_Left, pText->m_Right, pText->m_Top, pText->m_Bottom,
+ pText->m_SpaceWidth, pText->m_FontSizeV, pText->m_Text);
+ }
}
-FX_BOOL CTextBaseLine::GetWidth(FX_FLOAT& leftx, FX_FLOAT& rightx)
-{
- int i;
- for (i = 0; i < m_TextList.GetSize(); i ++) {
- CTextBox* pText = (CTextBox*)m_TextList.GetAt(i);
- if (pText->m_Text != L" ") {
- break;
- }
- }
- if (i == m_TextList.GetSize()) {
- return FALSE;
- }
+FX_BOOL CTextBaseLine::GetWidth(FX_FLOAT& leftx, FX_FLOAT& rightx) {
+ int i;
+ for (i = 0; i < m_TextList.GetSize(); i++) {
CTextBox* pText = (CTextBox*)m_TextList.GetAt(i);
- leftx = pText->m_Left;
- for (i = m_TextList.GetSize() - 1; i >= 0; i --) {
- CTextBox* pText = (CTextBox*)m_TextList.GetAt(i);
- if (pText->m_Text != L" ") {
- break;
- }
+ if (pText->m_Text != L" ") {
+ break;
+ }
+ }
+ if (i == m_TextList.GetSize()) {
+ return FALSE;
+ }
+ CTextBox* pText = (CTextBox*)m_TextList.GetAt(i);
+ leftx = pText->m_Left;
+ for (i = m_TextList.GetSize() - 1; i >= 0; i--) {
+ CTextBox* pText = (CTextBox*)m_TextList.GetAt(i);
+ if (pText->m_Text != L" ") {
+ break;
}
- pText = (CTextBox*)m_TextList.GetAt(i);
- rightx = pText->m_Right;
- return TRUE;
+ }
+ pText = (CTextBox*)m_TextList.GetAt(i);
+ rightx = pText->m_Right;
+ return TRUE;
}
-void CTextBaseLine::MergeBoxes()
-{
- int i = 0;
- while (1) {
- if (i >= m_TextList.GetSize() - 1) {
- break;
- }
- CTextBox* pThisText = (CTextBox*)m_TextList.GetAt(i);
- CTextBox* pNextText = (CTextBox*)m_TextList.GetAt(i + 1);
- FX_FLOAT dx = pNextText->m_Left - pThisText->m_Right;
- FX_FLOAT spacew = (pThisText->m_SpaceWidth == 0.0) ?
- pNextText->m_SpaceWidth : pThisText->m_SpaceWidth;
- if (spacew > 0.0 && dx < spacew * 2) {
- pThisText->m_Right = pNextText->m_Right;
- if (dx > spacew * 1.5) {
- pThisText->m_Text += L" ";
- } else if (dx > spacew / 3) {
- pThisText->m_Text += L' ';
- }
- pThisText->m_Text += pNextText->m_Text;
- pThisText->m_SpaceWidth = pNextText->m_SpaceWidth == 0.0 ?
- spacew : pNextText->m_SpaceWidth;
- m_TextList.RemoveAt(i + 1);
- delete pNextText;
- } else {
- i ++;
- }
+void CTextBaseLine::MergeBoxes() {
+ int i = 0;
+ while (1) {
+ if (i >= m_TextList.GetSize() - 1) {
+ break;
+ }
+ CTextBox* pThisText = (CTextBox*)m_TextList.GetAt(i);
+ CTextBox* pNextText = (CTextBox*)m_TextList.GetAt(i + 1);
+ FX_FLOAT dx = pNextText->m_Left - pThisText->m_Right;
+ FX_FLOAT spacew = (pThisText->m_SpaceWidth == 0.0)
+ ? pNextText->m_SpaceWidth
+ : pThisText->m_SpaceWidth;
+ if (spacew > 0.0 && dx < spacew * 2) {
+ pThisText->m_Right = pNextText->m_Right;
+ if (dx > spacew * 1.5) {
+ pThisText->m_Text += L" ";
+ } else if (dx > spacew / 3) {
+ pThisText->m_Text += L' ';
+ }
+ pThisText->m_Text += pNextText->m_Text;
+ pThisText->m_SpaceWidth =
+ pNextText->m_SpaceWidth == 0.0 ? spacew : pNextText->m_SpaceWidth;
+ m_TextList.RemoveAt(i + 1);
+ delete pNextText;
+ } else {
+ i++;
}
+ }
}
-void CTextBaseLine::WriteOutput(CFX_WideString& str, FX_FLOAT leftx, FX_FLOAT pagewidth,
- int iTextWidth)
-{
- int lastpos = -1;
- for (int i = 0; i < m_TextList.GetSize(); i ++) {
- CTextBox* pText = (CTextBox*)m_TextList.GetAt(i);
- int xpos;
- if (pText->m_pColumn) {
- xpos = (int)((pText->m_pColumn->m_AvgPos - leftx) * iTextWidth / pagewidth + 0.5);
- xpos -= pText->m_Text.GetLength();
- } else {
- xpos = (int)((pText->m_Left - leftx) * iTextWidth / pagewidth + 0.5);
- }
- if (xpos <= lastpos) {
- xpos = lastpos + 1;
- }
- for (int j = lastpos + 1; j < xpos; j ++) {
- str += ' ';
- }
- CFX_WideString sSrc(pText->m_Text);
- NormalizeString(sSrc);
- str += sSrc;
- str += ' ';
- lastpos = xpos + pText->m_Text.GetLength();
+void CTextBaseLine::WriteOutput(CFX_WideString& str,
+ FX_FLOAT leftx,
+ FX_FLOAT pagewidth,
+ int iTextWidth) {
+ int lastpos = -1;
+ for (int i = 0; i < m_TextList.GetSize(); i++) {
+ CTextBox* pText = (CTextBox*)m_TextList.GetAt(i);
+ int xpos;
+ if (pText->m_pColumn) {
+ xpos =
+ (int)((pText->m_pColumn->m_AvgPos - leftx) * iTextWidth / pagewidth +
+ 0.5);
+ xpos -= pText->m_Text.GetLength();
+ } else {
+ xpos = (int)((pText->m_Left - leftx) * iTextWidth / pagewidth + 0.5);
+ }
+ if (xpos <= lastpos) {
+ xpos = lastpos + 1;
}
+ for (int j = lastpos + 1; j < xpos; j++) {
+ str += ' ';
+ }
+ CFX_WideString sSrc(pText->m_Text);
+ NormalizeString(sSrc);
+ str += sSrc;
+ str += ' ';
+ lastpos = xpos + pText->m_Text.GetLength();
+ }
}
-void CTextBaseLine::CountChars(int& count, FX_FLOAT& width, int& minchars)
-{
- minchars = 0;
- for (int i = 0; i < m_TextList.GetSize(); i ++) {
- CTextBox* pText = (CTextBox*)m_TextList.GetAt(i);
- if (pText->m_Right - pText->m_Left < 0.002) {
- continue;
- }
- count += pText->m_Text.GetLength();
- width += pText->m_Right - pText->m_Left;
- minchars += pText->m_Text.GetLength() + 1;
+void CTextBaseLine::CountChars(int& count, FX_FLOAT& width, int& minchars) {
+ minchars = 0;
+ for (int i = 0; i < m_TextList.GetSize(); i++) {
+ CTextBox* pText = (CTextBox*)m_TextList.GetAt(i);
+ if (pText->m_Right - pText->m_Left < 0.002) {
+ continue;
}
+ count += pText->m_Text.GetLength();
+ width += pText->m_Right - pText->m_Left;
+ minchars += pText->m_Text.GetLength() + 1;
+ }
}
#define PI 3.1415926535897932384626433832795
-static void CheckRotate(CPDF_Page& page, CFX_FloatRect& page_bbox)
-{
- int total_count = 0, rotated_count[3] = {0, 0, 0};
- FX_POSITION pos = page.GetFirstObjectPosition();
- while (pos) {
- CPDF_PageObject* pObj = page.GetNextObject(pos);
- if (pObj->m_Type != PDFPAGE_TEXT) {
- continue;
- }
- total_count ++;
- CPDF_TextObject* pText = (CPDF_TextObject*)pObj;
- FX_FLOAT angle = pText->m_TextState.GetBaselineAngle();
- if (angle == 0.0) {
- continue;
- }
- int degree = (int)(angle * 180 / PI + 0.5);
- if (degree % 90) {
- continue;
- }
- if (degree < 0) {
- degree += 360;
- }
- int index = degree / 90 % 3 - 1;
- if (index < 0) {
- continue;
- }
- rotated_count[index] ++;
- }
- if (total_count == 0) {
- return;
- }
- CFX_AffineMatrix matrix;
- if (rotated_count[0] > total_count * 2 / 3) {
- matrix.Set(0, -1, 1, 0, 0, page.GetPageHeight());
- } else if (rotated_count[1] > total_count * 2 / 3) {
- matrix.Set(-1, 0, 0, -1, page.GetPageWidth(), page.GetPageHeight());
- } else if (rotated_count[2] > total_count * 2 / 3) {
- matrix.Set(0, 1, -1, 0, page.GetPageWidth(), 0);
- } else {
- return;
- }
- page.Transform(matrix);
- page_bbox.Transform(&matrix);
+static void CheckRotate(CPDF_Page& page, CFX_FloatRect& page_bbox) {
+ int total_count = 0, rotated_count[3] = {0, 0, 0};
+ FX_POSITION pos = page.GetFirstObjectPosition();
+ while (pos) {
+ CPDF_PageObject* pObj = page.GetNextObject(pos);
+ if (pObj->m_Type != PDFPAGE_TEXT) {
+ continue;
+ }
+ total_count++;
+ CPDF_TextObject* pText = (CPDF_TextObject*)pObj;
+ FX_FLOAT angle = pText->m_TextState.GetBaselineAngle();
+ if (angle == 0.0) {
+ continue;
+ }
+ int degree = (int)(angle * 180 / PI + 0.5);
+ if (degree % 90) {
+ continue;
+ }
+ if (degree < 0) {
+ degree += 360;
+ }
+ int index = degree / 90 % 3 - 1;
+ if (index < 0) {
+ continue;
+ }
+ rotated_count[index]++;
+ }
+ if (total_count == 0) {
+ return;
+ }
+ CFX_AffineMatrix matrix;
+ if (rotated_count[0] > total_count * 2 / 3) {
+ matrix.Set(0, -1, 1, 0, 0, page.GetPageHeight());
+ } else if (rotated_count[1] > total_count * 2 / 3) {
+ matrix.Set(-1, 0, 0, -1, page.GetPageWidth(), page.GetPageHeight());
+ } else if (rotated_count[2] > total_count * 2 / 3) {
+ matrix.Set(0, 1, -1, 0, page.GetPageWidth(), 0);
+ } else {
+ return;
+ }
+ page.Transform(matrix);
+ page_bbox.Transform(&matrix);
}
-void PDF_GetPageText_Unicode(CFX_WideStringArray& lines, CPDF_Document* pDoc, CPDF_Dictionary* pPage,
- int iMinWidth, FX_DWORD flags)
-{
- lines.RemoveAll();
- if (pPage == NULL) {
- return;
- }
- CPDF_Page page;
- page.Load(pDoc, pPage);
- CPDF_ParseOptions options;
- options.m_bTextOnly = TRUE;
- options.m_bSeparateForm = FALSE;
- page.ParseContent(&options);
- CFX_FloatRect page_bbox = page.GetPageBBox();
- if (flags & PDF2TXT_AUTO_ROTATE) {
- CheckRotate(page, page_bbox);
- }
- CTextPage texts;
- texts.m_bAutoWidth = flags & PDF2TXT_AUTO_WIDTH;
- texts.m_bKeepColumn = flags & PDF2TXT_KEEP_COLUMN;
- texts.m_bBreakSpace = TRUE;
- FX_POSITION pos = page.GetFirstObjectPosition();
- while (pos) {
- CPDF_PageObject* pObject = page.GetNextObject(pos);
- if (!(flags & PDF2TXT_INCLUDE_INVISIBLE)) {
- CFX_FloatRect rect(pObject->m_Left, pObject->m_Bottom, pObject->m_Right, pObject->m_Top);
- if (!page_bbox.Contains(rect)) {
- continue;
- }
- }
- texts.ProcessObject(pObject);
- }
- texts.WriteOutput(lines, iMinWidth);
+void PDF_GetPageText_Unicode(CFX_WideStringArray& lines,
+ CPDF_Document* pDoc,
+ CPDF_Dictionary* pPage,
+ int iMinWidth,
+ FX_DWORD flags) {
+ lines.RemoveAll();
+ if (pPage == NULL) {
+ return;
+ }
+ CPDF_Page page;
+ page.Load(pDoc, pPage);
+ CPDF_ParseOptions options;
+ options.m_bTextOnly = TRUE;
+ options.m_bSeparateForm = FALSE;
+ page.ParseContent(&options);
+ CFX_FloatRect page_bbox = page.GetPageBBox();
+ if (flags & PDF2TXT_AUTO_ROTATE) {
+ CheckRotate(page, page_bbox);
+ }
+ CTextPage texts;
+ texts.m_bAutoWidth = flags & PDF2TXT_AUTO_WIDTH;
+ texts.m_bKeepColumn = flags & PDF2TXT_KEEP_COLUMN;
+ texts.m_bBreakSpace = TRUE;
+ FX_POSITION pos = page.GetFirstObjectPosition();
+ while (pos) {
+ CPDF_PageObject* pObject = page.GetNextObject(pos);
+ if (!(flags & PDF2TXT_INCLUDE_INVISIBLE)) {
+ CFX_FloatRect rect(pObject->m_Left, pObject->m_Bottom, pObject->m_Right,
+ pObject->m_Top);
+ if (!page_bbox.Contains(rect)) {
+ continue;
+ }
+ }
+ texts.ProcessObject(pObject);
+ }
+ texts.WriteOutput(lines, iMinWidth);
}
-void PDF_GetPageText(CFX_ByteStringArray& lines, CPDF_Document* pDoc, CPDF_Dictionary* pPage,
- int iMinWidth, FX_DWORD flags)
-{
- lines.RemoveAll();
- CFX_WideStringArray wlines;
- PDF_GetPageText_Unicode(wlines, pDoc, pPage, iMinWidth, flags);
- for (int i = 0; i < wlines.GetSize(); i ++) {
- CFX_WideString wstr = wlines[i];
- CFX_ByteString str;
- for (int c = 0; c < wstr.GetLength(); c ++) {
- str += CharFromUnicodeAlt(wstr[c], FXSYS_GetACP(), "?");
- }
- lines.Add(str);
- }
+void PDF_GetPageText(CFX_ByteStringArray& lines,
+ CPDF_Document* pDoc,
+ CPDF_Dictionary* pPage,
+ int iMinWidth,
+ FX_DWORD flags) {
+ lines.RemoveAll();
+ CFX_WideStringArray wlines;
+ PDF_GetPageText_Unicode(wlines, pDoc, pPage, iMinWidth, flags);
+ for (int i = 0; i < wlines.GetSize(); i++) {
+ CFX_WideString wstr = wlines[i];
+ CFX_ByteString str;
+ for (int c = 0; c < wstr.GetLength(); c++) {
+ str += CharFromUnicodeAlt(wstr[c], FXSYS_GetACP(), "?");
+ }
+ lines.Add(str);
+ }
}
-extern void _PDF_GetTextStream_Unicode(CFX_WideTextBuf& buffer, CPDF_PageObjects* pPage, FX_BOOL bUseLF,
+extern void _PDF_GetTextStream_Unicode(CFX_WideTextBuf& buffer,
+ CPDF_PageObjects* pPage,
+ FX_BOOL bUseLF,
CFX_PtrArray* pObjArray);
-void PDF_GetTextStream_Unicode(CFX_WideTextBuf& buffer, CPDF_Document* pDoc, CPDF_Dictionary* pPage, FX_DWORD flags)
-{
- buffer.EstimateSize(0, 10240);
- CPDF_Page page;
- page.Load(pDoc, pPage);
- CPDF_ParseOptions options;
- options.m_bTextOnly = TRUE;
- options.m_bSeparateForm = FALSE;
- page.ParseContent(&options);
- _PDF_GetTextStream_Unicode(buffer, &page, TRUE, NULL);
+void PDF_GetTextStream_Unicode(CFX_WideTextBuf& buffer,
+ CPDF_Document* pDoc,
+ CPDF_Dictionary* pPage,
+ FX_DWORD flags) {
+ buffer.EstimateSize(0, 10240);
+ CPDF_Page page;
+ page.Load(pDoc, pPage);
+ CPDF_ParseOptions options;
+ options.m_bTextOnly = TRUE;
+ options.m_bSeparateForm = FALSE;
+ page.ParseContent(&options);
+ _PDF_GetTextStream_Unicode(buffer, &page, TRUE, NULL);
}
diff --git a/core/src/fpdftext/fpdf_text_int.cpp b/core/src/fpdftext/fpdf_text_int.cpp
index 0e9c5ba0f4..7b2f3abf48 100644
--- a/core/src/fpdftext/fpdf_text_int.cpp
+++ b/core/src/fpdftext/fpdf_text_int.cpp
@@ -19,129 +19,126 @@
namespace {
-FX_BOOL _IsIgnoreSpaceCharacter(FX_WCHAR curChar)
-{
- if(curChar < 255 ) {
- return FALSE;
- }
- if ( (curChar >= 0x0600 && curChar <= 0x06FF)
- || (curChar >= 0xFE70 && curChar <= 0xFEFF)
- || (curChar >= 0xFB50 && curChar <= 0xFDFF)
- || (curChar >= 0x0400 && curChar <= 0x04FF)
- || (curChar >= 0x0500 && curChar <= 0x052F)
- || (curChar >= 0xA640 && curChar <= 0xA69F)
- || (curChar >= 0x2DE0 && curChar <= 0x2DFF)
- || curChar == 8467
- || (curChar >= 0x2000 && curChar <= 0x206F)) {
- return FALSE;
- }
- return TRUE;
+FX_BOOL _IsIgnoreSpaceCharacter(FX_WCHAR curChar) {
+ if (curChar < 255) {
+ return FALSE;
+ }
+ if ((curChar >= 0x0600 && curChar <= 0x06FF) ||
+ (curChar >= 0xFE70 && curChar <= 0xFEFF) ||
+ (curChar >= 0xFB50 && curChar <= 0xFDFF) ||
+ (curChar >= 0x0400 && curChar <= 0x04FF) ||
+ (curChar >= 0x0500 && curChar <= 0x052F) ||
+ (curChar >= 0xA640 && curChar <= 0xA69F) ||
+ (curChar >= 0x2DE0 && curChar <= 0x2DFF) || curChar == 8467 ||
+ (curChar >= 0x2000 && curChar <= 0x206F)) {
+ return FALSE;
+ }
+ return TRUE;
}
-FX_FLOAT _NormalizeThreshold(FX_FLOAT threshold)
-{
- if (threshold < 300) {
- return threshold / 2.0f;
- }
- if (threshold < 500) {
- return threshold / 4.0f;
- }
- if (threshold < 700) {
- return threshold / 5.0f;
- }
- return threshold / 6.0f;
+FX_FLOAT _NormalizeThreshold(FX_FLOAT threshold) {
+ if (threshold < 300) {
+ return threshold / 2.0f;
+ }
+ if (threshold < 500) {
+ return threshold / 4.0f;
+ }
+ if (threshold < 700) {
+ return threshold / 5.0f;
+ }
+ return threshold / 6.0f;
}
FX_FLOAT _CalculateBaseSpace(const CPDF_TextObject* pTextObj,
- const CFX_AffineMatrix& matrix)
-{
- FX_FLOAT baseSpace = 0.0;
- const int nItems = pTextObj->CountItems();
- if (pTextObj->m_TextState.GetObject()->m_CharSpace && nItems >= 3) {
- FX_BOOL bAllChar = TRUE;
- FX_FLOAT spacing = matrix.TransformDistance(
- pTextObj->m_TextState.GetObject()->m_CharSpace);
- baseSpace = spacing;
- for (int i = 0; i < nItems; i++) {
- CPDF_TextObjectItem item;
- pTextObj->GetItemInfo(i, &item);
- if (item.m_CharCode == (FX_DWORD) - 1) {
- FX_FLOAT fontsize_h = pTextObj->m_TextState.GetFontSizeH();
- FX_FLOAT kerning = -fontsize_h * item.m_OriginX / 1000;
- baseSpace = std::min(baseSpace, kerning + spacing);
- bAllChar = FALSE;
- }
- }
- if (baseSpace < 0.0 || (nItems == 3 && !bAllChar)) {
- baseSpace = 0.0;
- }
+ const CFX_AffineMatrix& matrix) {
+ FX_FLOAT baseSpace = 0.0;
+ const int nItems = pTextObj->CountItems();
+ if (pTextObj->m_TextState.GetObject()->m_CharSpace && nItems >= 3) {
+ FX_BOOL bAllChar = TRUE;
+ FX_FLOAT spacing = matrix.TransformDistance(
+ pTextObj->m_TextState.GetObject()->m_CharSpace);
+ baseSpace = spacing;
+ for (int i = 0; i < nItems; i++) {
+ CPDF_TextObjectItem item;
+ pTextObj->GetItemInfo(i, &item);
+ if (item.m_CharCode == (FX_DWORD)-1) {
+ FX_FLOAT fontsize_h = pTextObj->m_TextState.GetFontSizeH();
+ FX_FLOAT kerning = -fontsize_h * item.m_OriginX / 1000;
+ baseSpace = std::min(baseSpace, kerning + spacing);
+ bAllChar = FALSE;
+ }
+ }
+ if (baseSpace < 0.0 || (nItems == 3 && !bAllChar)) {
+ baseSpace = 0.0;
}
- return baseSpace;
+ }
+ return baseSpace;
}
} // namespace
CPDFText_ParseOptions::CPDFText_ParseOptions()
- : m_bGetCharCodeOnly(FALSE), m_bNormalizeObjs(TRUE), m_bOutputHyphen(FALSE)
-{
-}
-IPDF_TextPage* IPDF_TextPage::CreateTextPage(const CPDF_Page* pPage, CPDFText_ParseOptions ParserOptions)
-{
- return new CPDF_TextPage(pPage, ParserOptions);
-}
-IPDF_TextPage* IPDF_TextPage::CreateTextPage(const CPDF_Page* pPage, int flags)
-{
- return new CPDF_TextPage(pPage, flags);
-}
-IPDF_TextPage* IPDF_TextPage::CreateTextPage(const CPDF_PageObjects* pObjs, int flags)
-{
- return new CPDF_TextPage(pObjs, flags);
-}
-IPDF_TextPageFind* IPDF_TextPageFind::CreatePageFind(const IPDF_TextPage* pTextPage)
-{
- if (!pTextPage) {
- return NULL;
- }
- return new CPDF_TextPageFind(pTextPage);
-}
-IPDF_LinkExtract* IPDF_LinkExtract::CreateLinkExtract()
-{
- return new CPDF_LinkExtract();
-}
-#define TEXT_BLANK_CHAR L' '
-#define TEXT_LINEFEED_CHAR L'\n'
-#define TEXT_RETURN_CHAR L'\r'
-#define TEXT_EMPTY L""
-#define TEXT_BLANK L" "
-#define TEXT_RETURN_LINEFEED L"\r\n"
-#define TEXT_LINEFEED L"\n"
-#define TEXT_CHARRATIO_GAPDELTA 0.070
+ : m_bGetCharCodeOnly(FALSE),
+ m_bNormalizeObjs(TRUE),
+ m_bOutputHyphen(FALSE) {}
+IPDF_TextPage* IPDF_TextPage::CreateTextPage(
+ const CPDF_Page* pPage,
+ CPDFText_ParseOptions ParserOptions) {
+ return new CPDF_TextPage(pPage, ParserOptions);
+}
+IPDF_TextPage* IPDF_TextPage::CreateTextPage(const CPDF_Page* pPage,
+ int flags) {
+ return new CPDF_TextPage(pPage, flags);
+}
+IPDF_TextPage* IPDF_TextPage::CreateTextPage(const CPDF_PageObjects* pObjs,
+ int flags) {
+ return new CPDF_TextPage(pObjs, flags);
+}
+IPDF_TextPageFind* IPDF_TextPageFind::CreatePageFind(
+ const IPDF_TextPage* pTextPage) {
+ if (!pTextPage) {
+ return NULL;
+ }
+ return new CPDF_TextPageFind(pTextPage);
+}
+IPDF_LinkExtract* IPDF_LinkExtract::CreateLinkExtract() {
+ return new CPDF_LinkExtract();
+}
+#define TEXT_BLANK_CHAR L' '
+#define TEXT_LINEFEED_CHAR L'\n'
+#define TEXT_RETURN_CHAR L'\r'
+#define TEXT_EMPTY L""
+#define TEXT_BLANK L" "
+#define TEXT_RETURN_LINEFEED L"\r\n"
+#define TEXT_LINEFEED L"\n"
+#define TEXT_CHARRATIO_GAPDELTA 0.070
CPDF_TextPage::CPDF_TextPage(const CPDF_Page* pPage, int flags)
: m_charList(512),
m_TempCharList(50),
m_pPreTextObj(NULL),
m_IsParsered(FALSE),
m_TextlineDir(-1),
- m_CurlineRect(0, 0, 0, 0)
-{
- m_pPage = pPage;
- m_parserflag = flags;
- m_TextBuf.EstimateSize(0, 10240);
- pPage->GetDisplayMatrix(m_DisplayMatrix, 0, 0, (int) pPage->GetPageWidth(), (int)pPage->GetPageHeight(), 0);
-}
-CPDF_TextPage::CPDF_TextPage(const CPDF_Page* pPage, CPDFText_ParseOptions ParserOptions)
- : m_ParseOptions(ParserOptions)
- , m_charList(512)
- , m_TempCharList(50)
- , m_pPreTextObj(NULL)
- , m_IsParsered(FALSE)
- , m_TextlineDir(-1)
- , m_CurlineRect(0, 0, 0, 0)
-{
- m_pPage = pPage;
- m_parserflag = 0;
- m_TextBuf.EstimateSize(0, 10240);
- pPage->GetDisplayMatrix(m_DisplayMatrix, 0, 0, (int) pPage->GetPageWidth(), (int)pPage->GetPageHeight(), 0);
+ m_CurlineRect(0, 0, 0, 0) {
+ m_pPage = pPage;
+ m_parserflag = flags;
+ m_TextBuf.EstimateSize(0, 10240);
+ pPage->GetDisplayMatrix(m_DisplayMatrix, 0, 0, (int)pPage->GetPageWidth(),
+ (int)pPage->GetPageHeight(), 0);
+}
+CPDF_TextPage::CPDF_TextPage(const CPDF_Page* pPage,
+ CPDFText_ParseOptions ParserOptions)
+ : m_ParseOptions(ParserOptions),
+ m_charList(512),
+ m_TempCharList(50),
+ m_pPreTextObj(NULL),
+ m_IsParsered(FALSE),
+ m_TextlineDir(-1),
+ m_CurlineRect(0, 0, 0, 0) {
+ m_pPage = pPage;
+ m_parserflag = 0;
+ m_TextBuf.EstimateSize(0, 10240);
+ pPage->GetDisplayMatrix(m_DisplayMatrix, 0, 0, (int)pPage->GetPageWidth(),
+ (int)pPage->GetPageHeight(), 0);
}
CPDF_TextPage::CPDF_TextPage(const CPDF_PageObjects* pPage, int flags)
: m_charList(512),
@@ -149,1938 +146,2021 @@ CPDF_TextPage::CPDF_TextPage(const CPDF_PageObjects* pPage, int flags)
m_pPreTextObj(NULL),
m_IsParsered(FALSE),
m_TextlineDir(-1),
- m_CurlineRect(0, 0, 0, 0)
-{
- m_pPage = pPage;
- m_parserflag = flags;
- m_TextBuf.EstimateSize(0, 10240);
- CFX_FloatRect pageRect = pPage->CalcBoundingBox();
- m_DisplayMatrix = CFX_AffineMatrix(1, 0, 0, -1, pageRect.right, pageRect.top);
-}
-void CPDF_TextPage::NormalizeObjects(FX_BOOL bNormalize)
-{
- m_ParseOptions.m_bNormalizeObjs = bNormalize;
-}
-bool CPDF_TextPage::IsControlChar(const PAGECHAR_INFO& charInfo)
-{
- switch (charInfo.m_Unicode) {
- case 0x2:
- case 0x3:
- case 0x93:
- case 0x94:
- case 0x96:
- case 0x97:
- case 0x98:
- case 0xfffe:
- return charInfo.m_Flag != FPDFTEXT_CHAR_HYPHEN;
- default:
- return false;
- }
-}
-FX_BOOL CPDF_TextPage::ParseTextPage()
-{
- if (!m_pPage) {
- m_IsParsered = FALSE;
- return FALSE;
- }
+ m_CurlineRect(0, 0, 0, 0) {
+ m_pPage = pPage;
+ m_parserflag = flags;
+ m_TextBuf.EstimateSize(0, 10240);
+ CFX_FloatRect pageRect = pPage->CalcBoundingBox();
+ m_DisplayMatrix = CFX_AffineMatrix(1, 0, 0, -1, pageRect.right, pageRect.top);
+}
+void CPDF_TextPage::NormalizeObjects(FX_BOOL bNormalize) {
+ m_ParseOptions.m_bNormalizeObjs = bNormalize;
+}
+bool CPDF_TextPage::IsControlChar(const PAGECHAR_INFO& charInfo) {
+ switch (charInfo.m_Unicode) {
+ case 0x2:
+ case 0x3:
+ case 0x93:
+ case 0x94:
+ case 0x96:
+ case 0x97:
+ case 0x98:
+ case 0xfffe:
+ return charInfo.m_Flag != FPDFTEXT_CHAR_HYPHEN;
+ default:
+ return false;
+ }
+}
+FX_BOOL CPDF_TextPage::ParseTextPage() {
+ if (!m_pPage) {
m_IsParsered = FALSE;
- m_TextBuf.Clear();
- m_charList.RemoveAll();
- m_pPreTextObj = NULL;
- ProcessObject();
- m_IsParsered = TRUE;
- if(!m_ParseOptions.m_bGetCharCodeOnly) {
- m_CharIndex.RemoveAll();
- int nCount = m_charList.GetSize();
- if(nCount) {
- m_CharIndex.Add(0);
- }
- for(int i = 0; i < nCount; i++) {
- int indexSize = m_CharIndex.GetSize();
- FX_BOOL bNormal = FALSE;
- PAGECHAR_INFO charinfo = *(PAGECHAR_INFO*)m_charList.GetAt(i);
- if(charinfo.m_Flag == FPDFTEXT_CHAR_GENERATED) {
- bNormal = TRUE;
- }
- else if(charinfo.m_Unicode == 0 || IsControlChar(charinfo))
- bNormal = FALSE;
- else {
- bNormal = TRUE;
- }
- if(bNormal) {
- if(indexSize % 2) {
- m_CharIndex.Add(1);
- } else {
- if(indexSize <= 0) {
- continue;
- }
- m_CharIndex.SetAt(indexSize - 1, m_CharIndex.GetAt(indexSize - 1) + 1);
- }
- } else {
- if(indexSize % 2) {
- if(indexSize <= 0) {
- continue;
- }
- m_CharIndex.SetAt(indexSize - 1, i + 1);
- } else {
- m_CharIndex.Add(i + 1);
- }
- }
- }
- int indexSize = m_CharIndex.GetSize();
- if(indexSize % 2) {
- m_CharIndex.RemoveAt(indexSize - 1);
- }
- }
- return TRUE;
-}
-int CPDF_TextPage::CountChars() const
-{
- if(m_ParseOptions.m_bGetCharCodeOnly) {
- return m_TextBuf.GetSize();
- }
- return m_charList.GetSize();
-}
-int CPDF_TextPage::CharIndexFromTextIndex(int TextIndex) const
-{
- int indexSize = m_CharIndex.GetSize();
- int count = 0;
- for(int i = 0; i < indexSize; i += 2) {
- count += m_CharIndex.GetAt(i + 1);
- if(count > TextIndex) {
- return TextIndex - count + m_CharIndex.GetAt(i + 1) + m_CharIndex.GetAt(i);
- }
- }
- return -1;
-}
-int CPDF_TextPage::TextIndexFromCharIndex(int CharIndex) const
-{
- int indexSize = m_CharIndex.GetSize();
- int count = 0;
- for(int i = 0; i < indexSize; i += 2) {
- count += m_CharIndex.GetAt(i + 1);
- if(m_CharIndex.GetAt(i + 1) + m_CharIndex.GetAt(i) > CharIndex) {
- if(CharIndex - m_CharIndex.GetAt(i) < 0) {
- return -1;
- }
- return CharIndex - m_CharIndex.GetAt(i) + count - m_CharIndex.GetAt(i + 1);
- }
- }
- return -1;
-}
-void CPDF_TextPage::GetRectArray(int start, int nCount, CFX_RectArray& rectArray) const
-{
- if(m_ParseOptions.m_bGetCharCodeOnly) {
- return;
- }
- if(start < 0 || nCount == 0) {
- return;
- }
- if (!m_IsParsered) {
- return;
- }
- PAGECHAR_INFO info_curchar;
- CPDF_TextObject* pCurObj = NULL;
- CFX_FloatRect rect;
- int curPos = start;
- FX_BOOL flagNewRect = TRUE;
- if (nCount + start > m_charList.GetSize() || nCount == -1) {
- nCount = m_charList.GetSize() - start;
- }
- while (nCount--) {
- info_curchar = *(PAGECHAR_INFO*)m_charList.GetAt(curPos++);
- if (info_curchar.m_Flag == FPDFTEXT_CHAR_GENERATED) {
+ return FALSE;
+ }
+ m_IsParsered = FALSE;
+ m_TextBuf.Clear();
+ m_charList.RemoveAll();
+ m_pPreTextObj = NULL;
+ ProcessObject();
+ m_IsParsered = TRUE;
+ if (!m_ParseOptions.m_bGetCharCodeOnly) {
+ m_CharIndex.RemoveAll();
+ int nCount = m_charList.GetSize();
+ if (nCount) {
+ m_CharIndex.Add(0);
+ }
+ for (int i = 0; i < nCount; i++) {
+ int indexSize = m_CharIndex.GetSize();
+ FX_BOOL bNormal = FALSE;
+ PAGECHAR_INFO charinfo = *(PAGECHAR_INFO*)m_charList.GetAt(i);
+ if (charinfo.m_Flag == FPDFTEXT_CHAR_GENERATED) {
+ bNormal = TRUE;
+ } else if (charinfo.m_Unicode == 0 || IsControlChar(charinfo))
+ bNormal = FALSE;
+ else {
+ bNormal = TRUE;
+ }
+ if (bNormal) {
+ if (indexSize % 2) {
+ m_CharIndex.Add(1);
+ } else {
+ if (indexSize <= 0) {
continue;
+ }
+ m_CharIndex.SetAt(indexSize - 1,
+ m_CharIndex.GetAt(indexSize - 1) + 1);
}
- if(info_curchar.m_CharBox.Width() < 0.01 || info_curchar.m_CharBox.Height() < 0.01) {
+ } else {
+ if (indexSize % 2) {
+ if (indexSize <= 0) {
continue;
- }
- if(!pCurObj) {
- pCurObj = info_curchar.m_pTextObj;
- }
- if (pCurObj != info_curchar.m_pTextObj) {
- rectArray.Add(rect);
- pCurObj = info_curchar.m_pTextObj;
- flagNewRect = TRUE;
- }
- if (flagNewRect) {
- FX_FLOAT orgX = info_curchar.m_OriginX, orgY = info_curchar.m_OriginY;
- CFX_AffineMatrix matrix, matrix_reverse;
- info_curchar.m_pTextObj->GetTextMatrix(&matrix);
- matrix.Concat(info_curchar.m_Matrix);
- matrix_reverse.SetReverse(matrix);
- matrix_reverse.Transform(orgX, orgY);
- rect.left = info_curchar.m_CharBox.left;
- rect.right = info_curchar.m_CharBox.right;
- if (pCurObj->GetFont()->GetTypeDescent()) {
- rect.bottom = orgY + pCurObj->GetFont()->GetTypeDescent() * pCurObj->GetFontSize() / 1000;
- FX_FLOAT xPosTemp = orgX;
- matrix.Transform(xPosTemp, rect.bottom);
- } else {
- rect.bottom = info_curchar.m_CharBox.bottom;
- }
- if (pCurObj->GetFont()->GetTypeAscent()) {
- rect.top = orgY + pCurObj->GetFont()->GetTypeAscent() * pCurObj->GetFontSize() / 1000;
- FX_FLOAT xPosTemp = orgX + GetCharWidth(info_curchar.m_CharCode, pCurObj->GetFont()) * pCurObj->GetFontSize() / 1000;
- matrix.Transform(xPosTemp, rect.top);
- } else {
- rect.top = info_curchar.m_CharBox.top;
- }
- flagNewRect = FALSE;
- rect = info_curchar.m_CharBox;
- rect.Normalize();
+ }
+ m_CharIndex.SetAt(indexSize - 1, i + 1);
} else {
- info_curchar.m_CharBox.Normalize();
- if (rect.left > info_curchar.m_CharBox.left) {
- rect.left = info_curchar.m_CharBox.left;
- }
- if (rect.right < info_curchar.m_CharBox.right) {
- rect.right = info_curchar.m_CharBox.right;
- }
- if ( rect.top < info_curchar.m_CharBox.top) {
- rect.top = info_curchar.m_CharBox.top;
- }
- if (rect.bottom > info_curchar.m_CharBox.bottom) {
- rect.bottom = info_curchar.m_CharBox.bottom;
- }
+ m_CharIndex.Add(i + 1);
}
+ }
}
- rectArray.Add(rect);
- return;
-}
-int CPDF_TextPage::GetIndexAtPos(CPDF_Point point , FX_FLOAT xTorelance, FX_FLOAT yTorelance) const
-{
- if(m_ParseOptions.m_bGetCharCodeOnly) {
- return -3;
- }
- if (!m_IsParsered) {
- return -3;
- }
- int pos = 0;
- int NearPos = -1;
- double xdif = 5000, ydif = 5000;
- while(pos < m_charList.GetSize()) {
- PAGECHAR_INFO charinfo = *(PAGECHAR_INFO*)(m_charList.GetAt(pos));
- CFX_FloatRect charrect = charinfo.m_CharBox;
- if (charrect.Contains(point.x, point.y)) {
- break;
- }
- if (xTorelance > 0 || yTorelance > 0) {
- CFX_FloatRect charRectExt;
- charrect.Normalize();
- charRectExt.left = charrect.left - xTorelance / 2;
- charRectExt.right = charrect.right + xTorelance / 2;
- charRectExt.top = charrect.top + yTorelance / 2;
- charRectExt.bottom = charrect.bottom - yTorelance / 2;
- if (charRectExt.Contains(point.x, point.y)) {
- double curXdif, curYdif;
- curXdif = FXSYS_fabs(point.x - charrect.left) < FXSYS_fabs(point.x - charrect.right) ? FXSYS_fabs(point.x - charrect.left) : FXSYS_fabs(point.x - charrect.right);
- curYdif = FXSYS_fabs(point.y - charrect.bottom) < FXSYS_fabs(point.y - charrect.top ) ? FXSYS_fabs(point.y - charrect.bottom) : FXSYS_fabs(point.y - charrect.top);
- if (curYdif + curXdif < xdif + ydif) {
- ydif = curYdif;
- xdif = curXdif;
- NearPos = pos;
- }
- }
- }
- ++pos;
- }
- if (pos >= m_charList.GetSize()) {
- pos = NearPos;
- }
- return pos;
-}
-CFX_WideString CPDF_TextPage::GetTextByRect(const CFX_FloatRect& rect) const
-{
- CFX_WideString strText;
- if(m_ParseOptions.m_bGetCharCodeOnly || !m_IsParsered) {
- return strText;
- }
- int nCount = m_charList.GetSize();
- int pos = 0;
- FX_FLOAT posy = 0;
- FX_BOOL IsContainPreChar = FALSE;
- FX_BOOL ISAddLineFeed = FALSE;
- while (pos < nCount) {
- PAGECHAR_INFO charinfo = *(PAGECHAR_INFO*)m_charList.GetAt(pos++);
- if (IsRectIntersect(rect, charinfo.m_CharBox)) {
- if (FXSYS_fabs(posy - charinfo.m_OriginY) > 0 && !IsContainPreChar && ISAddLineFeed) {
- posy = charinfo.m_OriginY;
- if (strText.GetLength() > 0) {
- strText += L"\r\n";
- }
- }
- IsContainPreChar = TRUE;
- ISAddLineFeed = FALSE;
- if (charinfo.m_Unicode) {
- strText += charinfo.m_Unicode;
- }
- } else if (charinfo.m_Unicode == 32) {
- if (IsContainPreChar && charinfo.m_Unicode) {
- strText += charinfo.m_Unicode;
- IsContainPreChar = FALSE;
- ISAddLineFeed = FALSE;
- }
- } else {
- IsContainPreChar = FALSE;
- ISAddLineFeed = TRUE;
- }
+ int indexSize = m_CharIndex.GetSize();
+ if (indexSize % 2) {
+ m_CharIndex.RemoveAt(indexSize - 1);
+ }
+ }
+ return TRUE;
+}
+int CPDF_TextPage::CountChars() const {
+ if (m_ParseOptions.m_bGetCharCodeOnly) {
+ return m_TextBuf.GetSize();
+ }
+ return m_charList.GetSize();
+}
+int CPDF_TextPage::CharIndexFromTextIndex(int TextIndex) const {
+ int indexSize = m_CharIndex.GetSize();
+ int count = 0;
+ for (int i = 0; i < indexSize; i += 2) {
+ count += m_CharIndex.GetAt(i + 1);
+ if (count > TextIndex) {
+ return TextIndex - count + m_CharIndex.GetAt(i + 1) +
+ m_CharIndex.GetAt(i);
+ }
+ }
+ return -1;
+}
+int CPDF_TextPage::TextIndexFromCharIndex(int CharIndex) const {
+ int indexSize = m_CharIndex.GetSize();
+ int count = 0;
+ for (int i = 0; i < indexSize; i += 2) {
+ count += m_CharIndex.GetAt(i + 1);
+ if (m_CharIndex.GetAt(i + 1) + m_CharIndex.GetAt(i) > CharIndex) {
+ if (CharIndex - m_CharIndex.GetAt(i) < 0) {
+ return -1;
+ }
+ return CharIndex - m_CharIndex.GetAt(i) + count -
+ m_CharIndex.GetAt(i + 1);
}
- return strText;
+ }
+ return -1;
}
-void CPDF_TextPage::GetRectsArrayByRect(const CFX_FloatRect& rect, CFX_RectArray& resRectArray) const
-{
- if(m_ParseOptions.m_bGetCharCodeOnly) {
- return;
- }
- if (!m_IsParsered) {
- return;
- }
- CFX_FloatRect curRect;
- FX_BOOL flagNewRect = TRUE;
- CPDF_TextObject* pCurObj = NULL;
- int nCount = m_charList.GetSize();
- int pos = 0;
- while (pos < nCount) {
- PAGECHAR_INFO info_curchar = *(PAGECHAR_INFO*)m_charList.GetAt(pos++);
- if (info_curchar.m_Flag == FPDFTEXT_CHAR_GENERATED) {
- continue;
- }
- if (IsRectIntersect(rect, info_curchar.m_CharBox)) {
- if(!pCurObj) {
- pCurObj = info_curchar.m_pTextObj;
- }
- if (pCurObj != info_curchar.m_pTextObj) {
- resRectArray.Add(curRect);
- pCurObj = info_curchar.m_pTextObj;
- flagNewRect = TRUE;
- }
- if (flagNewRect) {
- curRect = info_curchar.m_CharBox;
- flagNewRect = FALSE;
- curRect.Normalize();
- } else {
- info_curchar.m_CharBox.Normalize();
- if (curRect.left > info_curchar.m_CharBox.left) {
- curRect.left = info_curchar.m_CharBox.left;
- }
- if (curRect.right < info_curchar.m_CharBox.right) {
- curRect.right = info_curchar.m_CharBox.right;
- }
- if ( curRect.top < info_curchar.m_CharBox.top) {
- curRect.top = info_curchar.m_CharBox.top;
- }
- if (curRect.bottom > info_curchar.m_CharBox.bottom) {
- curRect.bottom = info_curchar.m_CharBox.bottom;
- }
- }
- }
- }
- resRectArray.Add(curRect);
+void CPDF_TextPage::GetRectArray(int start,
+ int nCount,
+ CFX_RectArray& rectArray) const {
+ if (m_ParseOptions.m_bGetCharCodeOnly) {
return;
-}
-int CPDF_TextPage::GetIndexAtPos(FX_FLOAT x, FX_FLOAT y, FX_FLOAT xTorelance, FX_FLOAT yTorelance) const
-{
- if(m_ParseOptions.m_bGetCharCodeOnly) {
- return -3;
- }
- CPDF_Point point(x, y);
- return GetIndexAtPos(point, xTorelance, yTorelance);
-}
-void CPDF_TextPage::GetCharInfo(int index, FPDF_CHAR_INFO & info) const
-{
- if(m_ParseOptions.m_bGetCharCodeOnly) {
- return;
- }
- if (!m_IsParsered) {
- return;
- }
- if (index < 0 || index >= m_charList.GetSize()) {
- return;
- }
- PAGECHAR_INFO charinfo;
- charinfo = *(PAGECHAR_INFO*)m_charList.GetAt(index);
- info.m_Charcode = charinfo.m_CharCode;
- info.m_OriginX = charinfo.m_OriginX;
- info.m_OriginY = charinfo.m_OriginY;
- info.m_Unicode = charinfo.m_Unicode;
- info.m_Flag = charinfo.m_Flag;
- info.m_CharBox = charinfo.m_CharBox;
- info.m_pTextObj = charinfo.m_pTextObj;
- if (charinfo.m_pTextObj && charinfo.m_pTextObj->GetFont()) {
- info.m_FontSize = charinfo.m_pTextObj->GetFontSize();
- }
- info.m_Matrix.Copy(charinfo.m_Matrix);
+ }
+ if (start < 0 || nCount == 0) {
return;
-}
-void CPDF_TextPage::CheckMarkedContentObject(int32_t& start, int32_t& nCount) const
-{
- PAGECHAR_INFO charinfo = *(PAGECHAR_INFO*)m_charList.GetAt(start);
- PAGECHAR_INFO charinfo2 = *(PAGECHAR_INFO*)m_charList.GetAt(start + nCount - 1);
- if (FPDFTEXT_CHAR_PIECE != charinfo.m_Flag && FPDFTEXT_CHAR_PIECE != charinfo2.m_Flag) {
- return;
- }
- if (FPDFTEXT_CHAR_PIECE == charinfo.m_Flag) {
- PAGECHAR_INFO charinfo1 = charinfo;
- int startIndex = start;
- while(FPDFTEXT_CHAR_PIECE == charinfo1.m_Flag && charinfo1.m_Index == charinfo.m_Index) {
- startIndex--;
- if (startIndex < 0) {
- break;
- }
- charinfo1 = *(PAGECHAR_INFO*)m_charList.GetAt(startIndex);
- }
- startIndex++;
- start = startIndex;
- }
- if (FPDFTEXT_CHAR_PIECE == charinfo2.m_Flag) {
- PAGECHAR_INFO charinfo3 = charinfo2;
- int endIndex = start + nCount - 1;
- while(FPDFTEXT_CHAR_PIECE == charinfo3.m_Flag && charinfo3.m_Index == charinfo2.m_Index) {
- endIndex++;
- if (endIndex >= m_charList.GetSize()) {
- break;
- }
- charinfo3 = *(PAGECHAR_INFO*)m_charList.GetAt(endIndex);
- }
- endIndex--;
- nCount = endIndex - start + 1;
- }
-}
-CFX_WideString CPDF_TextPage::GetPageText(int start , int nCount) const
-{
- if (!m_IsParsered || nCount == 0) {
- return L"";
- }
- if (start < 0) {
- start = 0;
- }
- if (nCount == -1) {
- nCount = m_charList.GetSize() - start;
- return m_TextBuf.GetWideString().Mid(start, m_TextBuf.GetWideString().GetLength());
- }
- if(nCount <= 0 || m_charList.GetSize() <= 0) {
- return L"";
- }
- if(nCount + start > m_charList.GetSize() - 1) {
- nCount = m_charList.GetSize() - start;
- }
- if (nCount <= 0) {
- return L"";
- }
- CheckMarkedContentObject(start, nCount);
- int startindex = 0;
- PAGECHAR_INFO charinfo = *(PAGECHAR_INFO*)m_charList.GetAt(start);
- int startOffset = 0;
- while(charinfo.m_Index == -1) {
- startOffset++;
- if (startOffset > nCount || start + startOffset >= m_charList.GetSize()) {
- return L"";
- }
- charinfo = *(PAGECHAR_INFO*)m_charList.GetAt(start + startOffset);
- }
- startindex = charinfo.m_Index;
- charinfo = *(PAGECHAR_INFO*)m_charList.GetAt(start + nCount - 1);
- int nCountOffset = 0;
- while (charinfo.m_Index == -1) {
- nCountOffset++;
- if (nCountOffset >= nCount) {
- return L"";
- }
- charinfo = *(PAGECHAR_INFO*)m_charList.GetAt(start + nCount - nCountOffset - 1);
- }
- nCount = start + nCount - nCountOffset - startindex;
- if(nCount <= 0) {
- return L"";
- }
- return m_TextBuf.GetWideString().Mid(startindex, nCount);
-}
-int CPDF_TextPage::CountRects(int start, int nCount)
-{
- if(m_ParseOptions.m_bGetCharCodeOnly) {
- return -1;
- }
- if (!m_IsParsered) {
- return -1;
- }
- if (start < 0) {
- return -1;
- }
- if (nCount == -1 || nCount + start > m_charList.GetSize() ) {
- nCount = m_charList.GetSize() - start;
- }
- m_SelRects.RemoveAll();
- GetRectArray(start, nCount, m_SelRects);
- return m_SelRects.GetSize();
-}
-void CPDF_TextPage::GetRect(int rectIndex, FX_FLOAT& left, FX_FLOAT& top, FX_FLOAT& right, FX_FLOAT &bottom) const
-{
- if(m_ParseOptions.m_bGetCharCodeOnly) {
- return ;
- }
- if (!m_IsParsered || rectIndex < 0 || rectIndex >= m_SelRects.GetSize()) {
- return;
+ }
+ if (!m_IsParsered) {
+ return;
+ }
+ PAGECHAR_INFO info_curchar;
+ CPDF_TextObject* pCurObj = NULL;
+ CFX_FloatRect rect;
+ int curPos = start;
+ FX_BOOL flagNewRect = TRUE;
+ if (nCount + start > m_charList.GetSize() || nCount == -1) {
+ nCount = m_charList.GetSize() - start;
+ }
+ while (nCount--) {
+ info_curchar = *(PAGECHAR_INFO*)m_charList.GetAt(curPos++);
+ if (info_curchar.m_Flag == FPDFTEXT_CHAR_GENERATED) {
+ continue;
+ }
+ if (info_curchar.m_CharBox.Width() < 0.01 ||
+ info_curchar.m_CharBox.Height() < 0.01) {
+ continue;
+ }
+ if (!pCurObj) {
+ pCurObj = info_curchar.m_pTextObj;
+ }
+ if (pCurObj != info_curchar.m_pTextObj) {
+ rectArray.Add(rect);
+ pCurObj = info_curchar.m_pTextObj;
+ flagNewRect = TRUE;
+ }
+ if (flagNewRect) {
+ FX_FLOAT orgX = info_curchar.m_OriginX, orgY = info_curchar.m_OriginY;
+ CFX_AffineMatrix matrix, matrix_reverse;
+ info_curchar.m_pTextObj->GetTextMatrix(&matrix);
+ matrix.Concat(info_curchar.m_Matrix);
+ matrix_reverse.SetReverse(matrix);
+ matrix_reverse.Transform(orgX, orgY);
+ rect.left = info_curchar.m_CharBox.left;
+ rect.right = info_curchar.m_CharBox.right;
+ if (pCurObj->GetFont()->GetTypeDescent()) {
+ rect.bottom = orgY +
+ pCurObj->GetFont()->GetTypeDescent() *
+ pCurObj->GetFontSize() / 1000;
+ FX_FLOAT xPosTemp = orgX;
+ matrix.Transform(xPosTemp, rect.bottom);
+ } else {
+ rect.bottom = info_curchar.m_CharBox.bottom;
+ }
+ if (pCurObj->GetFont()->GetTypeAscent()) {
+ rect.top =
+ orgY +
+ pCurObj->GetFont()->GetTypeAscent() * pCurObj->GetFontSize() / 1000;
+ FX_FLOAT xPosTemp =
+ orgX +
+ GetCharWidth(info_curchar.m_CharCode, pCurObj->GetFont()) *
+ pCurObj->GetFontSize() / 1000;
+ matrix.Transform(xPosTemp, rect.top);
+ } else {
+ rect.top = info_curchar.m_CharBox.top;
+ }
+ flagNewRect = FALSE;
+ rect = info_curchar.m_CharBox;
+ rect.Normalize();
+ } else {
+ info_curchar.m_CharBox.Normalize();
+ if (rect.left > info_curchar.m_CharBox.left) {
+ rect.left = info_curchar.m_CharBox.left;
+ }
+ if (rect.right < info_curchar.m_CharBox.right) {
+ rect.right = info_curchar.m_CharBox.right;
+ }
+ if (rect.top < info_curchar.m_CharBox.top) {
+ rect.top = info_curchar.m_CharBox.top;
+ }
+ if (rect.bottom > info_curchar.m_CharBox.bottom) {
+ rect.bottom = info_curchar.m_CharBox.bottom;
+ }
+ }
+ }
+ rectArray.Add(rect);
+ return;
+}
+int CPDF_TextPage::GetIndexAtPos(CPDF_Point point,
+ FX_FLOAT xTorelance,
+ FX_FLOAT yTorelance) const {
+ if (m_ParseOptions.m_bGetCharCodeOnly) {
+ return -3;
+ }
+ if (!m_IsParsered) {
+ return -3;
+ }
+ int pos = 0;
+ int NearPos = -1;
+ double xdif = 5000, ydif = 5000;
+ while (pos < m_charList.GetSize()) {
+ PAGECHAR_INFO charinfo = *(PAGECHAR_INFO*)(m_charList.GetAt(pos));
+ CFX_FloatRect charrect = charinfo.m_CharBox;
+ if (charrect.Contains(point.x, point.y)) {
+ break;
+ }
+ if (xTorelance > 0 || yTorelance > 0) {
+ CFX_FloatRect charRectExt;
+ charrect.Normalize();
+ charRectExt.left = charrect.left - xTorelance / 2;
+ charRectExt.right = charrect.right + xTorelance / 2;
+ charRectExt.top = charrect.top + yTorelance / 2;
+ charRectExt.bottom = charrect.bottom - yTorelance / 2;
+ if (charRectExt.Contains(point.x, point.y)) {
+ double curXdif, curYdif;
+ curXdif = FXSYS_fabs(point.x - charrect.left) <
+ FXSYS_fabs(point.x - charrect.right)
+ ? FXSYS_fabs(point.x - charrect.left)
+ : FXSYS_fabs(point.x - charrect.right);
+ curYdif = FXSYS_fabs(point.y - charrect.bottom) <
+ FXSYS_fabs(point.y - charrect.top)
+ ? FXSYS_fabs(point.y - charrect.bottom)
+ : FXSYS_fabs(point.y - charrect.top);
+ if (curYdif + curXdif < xdif + ydif) {
+ ydif = curYdif;
+ xdif = curXdif;
+ NearPos = pos;
+ }
+ }
+ }
+ ++pos;
+ }
+ if (pos >= m_charList.GetSize()) {
+ pos = NearPos;
+ }
+ return pos;
+}
+CFX_WideString CPDF_TextPage::GetTextByRect(const CFX_FloatRect& rect) const {
+ CFX_WideString strText;
+ if (m_ParseOptions.m_bGetCharCodeOnly || !m_IsParsered) {
+ return strText;
+ }
+ int nCount = m_charList.GetSize();
+ int pos = 0;
+ FX_FLOAT posy = 0;
+ FX_BOOL IsContainPreChar = FALSE;
+ FX_BOOL ISAddLineFeed = FALSE;
+ while (pos < nCount) {
+ PAGECHAR_INFO charinfo = *(PAGECHAR_INFO*)m_charList.GetAt(pos++);
+ if (IsRectIntersect(rect, charinfo.m_CharBox)) {
+ if (FXSYS_fabs(posy - charinfo.m_OriginY) > 0 && !IsContainPreChar &&
+ ISAddLineFeed) {
+ posy = charinfo.m_OriginY;
+ if (strText.GetLength() > 0) {
+ strText += L"\r\n";
+ }
+ }
+ IsContainPreChar = TRUE;
+ ISAddLineFeed = FALSE;
+ if (charinfo.m_Unicode) {
+ strText += charinfo.m_Unicode;
+ }
+ } else if (charinfo.m_Unicode == 32) {
+ if (IsContainPreChar && charinfo.m_Unicode) {
+ strText += charinfo.m_Unicode;
+ IsContainPreChar = FALSE;
+ ISAddLineFeed = FALSE;
+ }
+ } else {
+ IsContainPreChar = FALSE;
+ ISAddLineFeed = TRUE;
}
- left = m_SelRects.GetAt(rectIndex).left;
- top = m_SelRects.GetAt(rectIndex).top;
- right = m_SelRects.GetAt(rectIndex).right;
- bottom = m_SelRects.GetAt(rectIndex).bottom;
+ }
+ return strText;
}
-FX_BOOL CPDF_TextPage::GetBaselineRotate(int start, int end, int& Rotate)
-{
- if(m_ParseOptions.m_bGetCharCodeOnly) {
- return FALSE;
- }
- if(end == start) {
- return FALSE;
+void CPDF_TextPage::GetRectsArrayByRect(const CFX_FloatRect& rect,
+ CFX_RectArray& resRectArray) const {
+ if (m_ParseOptions.m_bGetCharCodeOnly) {
+ return;
+ }
+ if (!m_IsParsered) {
+ return;
+ }
+ CFX_FloatRect curRect;
+ FX_BOOL flagNewRect = TRUE;
+ CPDF_TextObject* pCurObj = NULL;
+ int nCount = m_charList.GetSize();
+ int pos = 0;
+ while (pos < nCount) {
+ PAGECHAR_INFO info_curchar = *(PAGECHAR_INFO*)m_charList.GetAt(pos++);
+ if (info_curchar.m_Flag == FPDFTEXT_CHAR_GENERATED) {
+ continue;
+ }
+ if (IsRectIntersect(rect, info_curchar.m_CharBox)) {
+ if (!pCurObj) {
+ pCurObj = info_curchar.m_pTextObj;
+ }
+ if (pCurObj != info_curchar.m_pTextObj) {
+ resRectArray.Add(curRect);
+ pCurObj = info_curchar.m_pTextObj;
+ flagNewRect = TRUE;
+ }
+ if (flagNewRect) {
+ curRect = info_curchar.m_CharBox;
+ flagNewRect = FALSE;
+ curRect.Normalize();
+ } else {
+ info_curchar.m_CharBox.Normalize();
+ if (curRect.left > info_curchar.m_CharBox.left) {
+ curRect.left = info_curchar.m_CharBox.left;
+ }
+ if (curRect.right < info_curchar.m_CharBox.right) {
+ curRect.right = info_curchar.m_CharBox.right;
+ }
+ if (curRect.top < info_curchar.m_CharBox.top) {
+ curRect.top = info_curchar.m_CharBox.top;
+ }
+ if (curRect.bottom > info_curchar.m_CharBox.bottom) {
+ curRect.bottom = info_curchar.m_CharBox.bottom;
+ }
+ }
+ }
+ }
+ resRectArray.Add(curRect);
+ return;
+}
+int CPDF_TextPage::GetIndexAtPos(FX_FLOAT x,
+ FX_FLOAT y,
+ FX_FLOAT xTorelance,
+ FX_FLOAT yTorelance) const {
+ if (m_ParseOptions.m_bGetCharCodeOnly) {
+ return -3;
+ }
+ CPDF_Point point(x, y);
+ return GetIndexAtPos(point, xTorelance, yTorelance);
+}
+void CPDF_TextPage::GetCharInfo(int index, FPDF_CHAR_INFO& info) const {
+ if (m_ParseOptions.m_bGetCharCodeOnly) {
+ return;
+ }
+ if (!m_IsParsered) {
+ return;
+ }
+ if (index < 0 || index >= m_charList.GetSize()) {
+ return;
+ }
+ PAGECHAR_INFO charinfo;
+ charinfo = *(PAGECHAR_INFO*)m_charList.GetAt(index);
+ info.m_Charcode = charinfo.m_CharCode;
+ info.m_OriginX = charinfo.m_OriginX;
+ info.m_OriginY = charinfo.m_OriginY;
+ info.m_Unicode = charinfo.m_Unicode;
+ info.m_Flag = charinfo.m_Flag;
+ info.m_CharBox = charinfo.m_CharBox;
+ info.m_pTextObj = charinfo.m_pTextObj;
+ if (charinfo.m_pTextObj && charinfo.m_pTextObj->GetFont()) {
+ info.m_FontSize = charinfo.m_pTextObj->GetFontSize();
+ }
+ info.m_Matrix.Copy(charinfo.m_Matrix);
+ return;
+}
+void CPDF_TextPage::CheckMarkedContentObject(int32_t& start,
+ int32_t& nCount) const {
+ PAGECHAR_INFO charinfo = *(PAGECHAR_INFO*)m_charList.GetAt(start);
+ PAGECHAR_INFO charinfo2 =
+ *(PAGECHAR_INFO*)m_charList.GetAt(start + nCount - 1);
+ if (FPDFTEXT_CHAR_PIECE != charinfo.m_Flag &&
+ FPDFTEXT_CHAR_PIECE != charinfo2.m_Flag) {
+ return;
+ }
+ if (FPDFTEXT_CHAR_PIECE == charinfo.m_Flag) {
+ PAGECHAR_INFO charinfo1 = charinfo;
+ int startIndex = start;
+ while (FPDFTEXT_CHAR_PIECE == charinfo1.m_Flag &&
+ charinfo1.m_Index == charinfo.m_Index) {
+ startIndex--;
+ if (startIndex < 0) {
+ break;
+ }
+ charinfo1 = *(PAGECHAR_INFO*)m_charList.GetAt(startIndex);
+ }
+ startIndex++;
+ start = startIndex;
+ }
+ if (FPDFTEXT_CHAR_PIECE == charinfo2.m_Flag) {
+ PAGECHAR_INFO charinfo3 = charinfo2;
+ int endIndex = start + nCount - 1;
+ while (FPDFTEXT_CHAR_PIECE == charinfo3.m_Flag &&
+ charinfo3.m_Index == charinfo2.m_Index) {
+ endIndex++;
+ if (endIndex >= m_charList.GetSize()) {
+ break;
+ }
+ charinfo3 = *(PAGECHAR_INFO*)m_charList.GetAt(endIndex);
+ }
+ endIndex--;
+ nCount = endIndex - start + 1;
+ }
+}
+CFX_WideString CPDF_TextPage::GetPageText(int start, int nCount) const {
+ if (!m_IsParsered || nCount == 0) {
+ return L"";
+ }
+ if (start < 0) {
+ start = 0;
+ }
+ if (nCount == -1) {
+ nCount = m_charList.GetSize() - start;
+ return m_TextBuf.GetWideString().Mid(start,
+ m_TextBuf.GetWideString().GetLength());
+ }
+ if (nCount <= 0 || m_charList.GetSize() <= 0) {
+ return L"";
+ }
+ if (nCount + start > m_charList.GetSize() - 1) {
+ nCount = m_charList.GetSize() - start;
+ }
+ if (nCount <= 0) {
+ return L"";
+ }
+ CheckMarkedContentObject(start, nCount);
+ int startindex = 0;
+ PAGECHAR_INFO charinfo = *(PAGECHAR_INFO*)m_charList.GetAt(start);
+ int startOffset = 0;
+ while (charinfo.m_Index == -1) {
+ startOffset++;
+ if (startOffset > nCount || start + startOffset >= m_charList.GetSize()) {
+ return L"";
+ }
+ charinfo = *(PAGECHAR_INFO*)m_charList.GetAt(start + startOffset);
+ }
+ startindex = charinfo.m_Index;
+ charinfo = *(PAGECHAR_INFO*)m_charList.GetAt(start + nCount - 1);
+ int nCountOffset = 0;
+ while (charinfo.m_Index == -1) {
+ nCountOffset++;
+ if (nCountOffset >= nCount) {
+ return L"";
+ }
+ charinfo =
+ *(PAGECHAR_INFO*)m_charList.GetAt(start + nCount - nCountOffset - 1);
+ }
+ nCount = start + nCount - nCountOffset - startindex;
+ if (nCount <= 0) {
+ return L"";
+ }
+ return m_TextBuf.GetWideString().Mid(startindex, nCount);
+}
+int CPDF_TextPage::CountRects(int start, int nCount) {
+ if (m_ParseOptions.m_bGetCharCodeOnly) {
+ return -1;
+ }
+ if (!m_IsParsered) {
+ return -1;
+ }
+ if (start < 0) {
+ return -1;
+ }
+ if (nCount == -1 || nCount + start > m_charList.GetSize()) {
+ nCount = m_charList.GetSize() - start;
+ }
+ m_SelRects.RemoveAll();
+ GetRectArray(start, nCount, m_SelRects);
+ return m_SelRects.GetSize();
+}
+void CPDF_TextPage::GetRect(int rectIndex,
+ FX_FLOAT& left,
+ FX_FLOAT& top,
+ FX_FLOAT& right,
+ FX_FLOAT& bottom) const {
+ if (m_ParseOptions.m_bGetCharCodeOnly) {
+ return;
+ }
+ if (!m_IsParsered || rectIndex < 0 || rectIndex >= m_SelRects.GetSize()) {
+ return;
+ }
+ left = m_SelRects.GetAt(rectIndex).left;
+ top = m_SelRects.GetAt(rectIndex).top;
+ right = m_SelRects.GetAt(rectIndex).right;
+ bottom = m_SelRects.GetAt(rectIndex).bottom;
+}
+FX_BOOL CPDF_TextPage::GetBaselineRotate(int start, int end, int& Rotate) {
+ if (m_ParseOptions.m_bGetCharCodeOnly) {
+ return FALSE;
+ }
+ if (end == start) {
+ return FALSE;
+ }
+ FX_FLOAT dx, dy;
+ FPDF_CHAR_INFO info1, info2;
+ GetCharInfo(start, info1);
+ GetCharInfo(end, info2);
+ while (info2.m_CharBox.Width() == 0 || info2.m_CharBox.Height() == 0) {
+ end--;
+ if (end <= start) {
+ return FALSE;
}
- FX_FLOAT dx, dy;
- FPDF_CHAR_INFO info1, info2;
- GetCharInfo(start, info1);
GetCharInfo(end, info2);
- while(info2.m_CharBox.Width() == 0 || info2.m_CharBox.Height() == 0) {
- end--;
- if(end <= start) {
- return FALSE;
- }
- GetCharInfo(end, info2);
- }
- dx = (info2.m_OriginX - info1.m_OriginX);
- dy = (info2.m_OriginY - info1.m_OriginY);
- if(dx == 0) {
- if(dy > 0) {
- Rotate = 90;
- } else if (dy < 0) {
- Rotate = 270;
- } else {
- Rotate = 0;
- }
+ }
+ dx = (info2.m_OriginX - info1.m_OriginX);
+ dy = (info2.m_OriginY - info1.m_OriginY);
+ if (dx == 0) {
+ if (dy > 0) {
+ Rotate = 90;
+ } else if (dy < 0) {
+ Rotate = 270;
} else {
- float a = FXSYS_atan2(dy, dx);
- Rotate = (int)(a * 180 / FX_PI + 0.5);
- }
- if(Rotate < 0) {
- Rotate = -Rotate;
- } else if(Rotate > 0) {
- Rotate = 360 - Rotate;
- }
- return TRUE;
-}
-FX_BOOL CPDF_TextPage::GetBaselineRotate(const CFX_FloatRect& rect , int& Rotate)
-{
- if(m_ParseOptions.m_bGetCharCodeOnly) {
- return FALSE;
- }
- int start, end, count, n = CountBoundedSegments(rect.left, rect.top, rect.right, rect.bottom, TRUE);
- if(n < 1) {
- return FALSE;
- }
- if(n > 1) {
- GetBoundedSegment(n - 1, start, count);
- end = start + count - 1;
- GetBoundedSegment(0, start, count);
+ Rotate = 0;
+ }
+ } else {
+ float a = FXSYS_atan2(dy, dx);
+ Rotate = (int)(a * 180 / FX_PI + 0.5);
+ }
+ if (Rotate < 0) {
+ Rotate = -Rotate;
+ } else if (Rotate > 0) {
+ Rotate = 360 - Rotate;
+ }
+ return TRUE;
+}
+FX_BOOL CPDF_TextPage::GetBaselineRotate(const CFX_FloatRect& rect,
+ int& Rotate) {
+ if (m_ParseOptions.m_bGetCharCodeOnly) {
+ return FALSE;
+ }
+ int start, end, count,
+ n = CountBoundedSegments(rect.left, rect.top, rect.right, rect.bottom,
+ TRUE);
+ if (n < 1) {
+ return FALSE;
+ }
+ if (n > 1) {
+ GetBoundedSegment(n - 1, start, count);
+ end = start + count - 1;
+ GetBoundedSegment(0, start, count);
+ } else {
+ GetBoundedSegment(0, start, count);
+ end = start + count - 1;
+ }
+ return GetBaselineRotate(start, end, Rotate);
+}
+FX_BOOL CPDF_TextPage::GetBaselineRotate(int rectIndex, int& Rotate) {
+ if (m_ParseOptions.m_bGetCharCodeOnly) {
+ return FALSE;
+ }
+ if (!m_IsParsered || rectIndex < 0 || rectIndex > m_SelRects.GetSize()) {
+ return FALSE;
+ }
+ CFX_FloatRect rect = m_SelRects.GetAt(rectIndex);
+ return GetBaselineRotate(rect, Rotate);
+}
+int CPDF_TextPage::CountBoundedSegments(FX_FLOAT left,
+ FX_FLOAT top,
+ FX_FLOAT right,
+ FX_FLOAT bottom,
+ FX_BOOL bContains) {
+ if (m_ParseOptions.m_bGetCharCodeOnly) {
+ return -1;
+ }
+ m_Segment.RemoveAll();
+ if (!m_IsParsered) {
+ return -1;
+ }
+ CFX_FloatRect rect(left, bottom, right, top);
+ rect.Normalize();
+ int nCount = m_charList.GetSize();
+ int pos = 0;
+ FPDF_SEGMENT segment;
+ segment.m_Start = 0;
+ segment.m_nCount = 0;
+ int segmentStatus = 0;
+ FX_BOOL IsContainPreChar = FALSE;
+ while (pos < nCount) {
+ PAGECHAR_INFO charinfo = *(PAGECHAR_INFO*)m_charList.GetAt(pos);
+ if (bContains && rect.Contains(charinfo.m_CharBox)) {
+ if (segmentStatus == 0 || segmentStatus == 2) {
+ segment.m_Start = pos;
+ segment.m_nCount = 1;
+ segmentStatus = 1;
+ } else if (segmentStatus == 1) {
+ segment.m_nCount++;
+ }
+ IsContainPreChar = TRUE;
+ } else if (!bContains &&
+ (IsRectIntersect(rect, charinfo.m_CharBox) ||
+ rect.Contains(charinfo.m_OriginX, charinfo.m_OriginY))) {
+ if (segmentStatus == 0 || segmentStatus == 2) {
+ segment.m_Start = pos;
+ segment.m_nCount = 1;
+ segmentStatus = 1;
+ } else if (segmentStatus == 1) {
+ segment.m_nCount++;
+ }
+ IsContainPreChar = TRUE;
+ } else if (charinfo.m_Unicode == 32) {
+ if (IsContainPreChar == TRUE) {
+ if (segmentStatus == 0 || segmentStatus == 2) {
+ segment.m_Start = pos;
+ segment.m_nCount = 1;
+ segmentStatus = 1;
+ } else if (segmentStatus == 1) {
+ segment.m_nCount++;
+ }
+ IsContainPreChar = FALSE;
+ } else {
+ if (segmentStatus == 1) {
+ segmentStatus = 2;
+ m_Segment.Add(segment);
+ segment.m_Start = 0;
+ segment.m_nCount = 0;
+ }
+ }
} else {
- GetBoundedSegment(0, start, count);
- end = start + count - 1;
- }
- return GetBaselineRotate(start, end, Rotate);
-}
-FX_BOOL CPDF_TextPage::GetBaselineRotate(int rectIndex, int& Rotate)
-{
- if(m_ParseOptions.m_bGetCharCodeOnly) {
- return FALSE;
- }
- if (!m_IsParsered || rectIndex < 0 || rectIndex > m_SelRects.GetSize()) {
- return FALSE;
- }
- CFX_FloatRect rect = m_SelRects.GetAt(rectIndex);
- return GetBaselineRotate(rect , Rotate);
-}
-int CPDF_TextPage::CountBoundedSegments(FX_FLOAT left, FX_FLOAT top, FX_FLOAT right, FX_FLOAT bottom, FX_BOOL bContains )
-{
- if(m_ParseOptions.m_bGetCharCodeOnly) {
- return -1;
- }
- m_Segment.RemoveAll();
- if (!m_IsParsered) {
- return -1;
- }
- CFX_FloatRect rect(left, bottom, right, top);
- rect.Normalize();
- int nCount = m_charList.GetSize();
- int pos = 0;
- FPDF_SEGMENT segment;
- segment.m_Start = 0;
- segment.m_nCount = 0;
- int segmentStatus = 0;
- FX_BOOL IsContainPreChar = FALSE;
- while (pos < nCount) {
- PAGECHAR_INFO charinfo = *(PAGECHAR_INFO*)m_charList.GetAt(pos);
- if(bContains && rect.Contains(charinfo.m_CharBox)) {
- if (segmentStatus == 0 || segmentStatus == 2) {
- segment.m_Start = pos;
- segment.m_nCount = 1;
- segmentStatus = 1;
- } else if (segmentStatus == 1) {
- segment.m_nCount++;
- }
- IsContainPreChar = TRUE;
- } else if (!bContains && (IsRectIntersect(rect, charinfo.m_CharBox) || rect.Contains(charinfo.m_OriginX, charinfo.m_OriginY))) {
- if (segmentStatus == 0 || segmentStatus == 2) {
- segment.m_Start = pos;
- segment.m_nCount = 1;
- segmentStatus = 1;
- } else if (segmentStatus == 1) {
- segment.m_nCount++;
- }
- IsContainPreChar = TRUE;
- } else if (charinfo.m_Unicode == 32) {
- if (IsContainPreChar == TRUE) {
- if (segmentStatus == 0 || segmentStatus == 2) {
- segment.m_Start = pos;
- segment.m_nCount = 1;
- segmentStatus = 1;
- } else if (segmentStatus == 1) {
- segment.m_nCount++;
- }
- IsContainPreChar = FALSE;
- } else {
- if (segmentStatus == 1) {
- segmentStatus = 2;
- m_Segment.Add(segment);
- segment.m_Start = 0;
- segment.m_nCount = 0;
- }
- }
- } else {
- if (segmentStatus == 1) {
- segmentStatus = 2;
- m_Segment.Add(segment);
- segment.m_Start = 0;
- segment.m_nCount = 0;
- }
- IsContainPreChar = FALSE;
- }
- pos++;
- }
- if (segmentStatus == 1) {
+ if (segmentStatus == 1) {
segmentStatus = 2;
m_Segment.Add(segment);
segment.m_Start = 0;
segment.m_nCount = 0;
- }
- return m_Segment.GetSize();
-}
-void CPDF_TextPage::GetBoundedSegment(int index, int& start, int& count) const
-{
- if(m_ParseOptions.m_bGetCharCodeOnly) {
- return ;
- }
- if (index < 0 || index >= m_Segment.GetSize()) {
- return;
- }
- start = m_Segment.GetAt(index).m_Start;
- count = m_Segment.GetAt(index).m_nCount;
+ }
+ IsContainPreChar = FALSE;
+ }
+ pos++;
+ }
+ if (segmentStatus == 1) {
+ segmentStatus = 2;
+ m_Segment.Add(segment);
+ segment.m_Start = 0;
+ segment.m_nCount = 0;
+ }
+ return m_Segment.GetSize();
}
-int CPDF_TextPage::GetWordBreak(int index, int direction) const
-{
- if(m_ParseOptions.m_bGetCharCodeOnly) {
- return -1;
- }
- if (!m_IsParsered) {
- return -1;
- }
- if (direction != FPDFTEXT_LEFT && direction != FPDFTEXT_RIGHT) {
- return -1;
- }
- if (index < 0 || index >= m_charList.GetSize()) {
- return -1;
- }
- PAGECHAR_INFO charinfo;
- charinfo = *(PAGECHAR_INFO*)m_charList.GetAt(index);
- if (charinfo.m_Index == -1 || charinfo.m_Flag == FPDFTEXT_CHAR_GENERATED) {
- return index;
- }
- if (!IsLetter(charinfo.m_Unicode)) {
- return index;
- }
- int breakPos = index;
- if (direction == FPDFTEXT_LEFT) {
- while (--breakPos > 0) {
- charinfo = *(PAGECHAR_INFO*)m_charList.GetAt(breakPos);
- if (!IsLetter(charinfo.m_Unicode)) {
- return breakPos;
- }
- }
- } else if (direction == FPDFTEXT_RIGHT) {
- while (++breakPos < m_charList.GetSize()) {
- charinfo = *(PAGECHAR_INFO*)m_charList.GetAt(breakPos);
- if (!IsLetter(charinfo.m_Unicode)) {
- return breakPos;
- }
- }
- }
- return breakPos;
+void CPDF_TextPage::GetBoundedSegment(int index, int& start, int& count) const {
+ if (m_ParseOptions.m_bGetCharCodeOnly) {
+ return;
+ }
+ if (index < 0 || index >= m_Segment.GetSize()) {
+ return;
+ }
+ start = m_Segment.GetAt(index).m_Start;
+ count = m_Segment.GetAt(index).m_nCount;
}
-int32_t CPDF_TextPage::FindTextlineFlowDirection()
-{
- if (!m_pPage) {
- return -1;
- }
- const int32_t nPageWidth = (int32_t)((CPDF_Page*)m_pPage)->GetPageWidth();
- const int32_t nPageHeight = (int32_t)((CPDF_Page*)m_pPage)->GetPageHeight();
- CFX_ByteArray nHorizontalMask;
- if (!nHorizontalMask.SetSize(nPageWidth)) {
- return -1;
- }
- uint8_t* pDataH = nHorizontalMask.GetData();
- CFX_ByteArray nVerticalMask;
- if (!nVerticalMask.SetSize(nPageHeight)) {
- return -1;
- }
- uint8_t* pDataV = nVerticalMask.GetData();
- int32_t index = 0;
- FX_FLOAT fLineHeight = 0.0f;
- CPDF_PageObject* pPageObj = NULL;
- FX_POSITION pos = NULL;
- pos = m_pPage->GetFirstObjectPosition();
- if(!pos) {
- return -1;
- }
- while(pos) {
- pPageObj = m_pPage->GetNextObject(pos);
- if(NULL == pPageObj) {
- continue;
- }
- if(PDFPAGE_TEXT != pPageObj->m_Type) {
- continue;
- }
- int32_t minH = (int32_t)pPageObj->m_Left < 0 ? 0 : (int32_t)pPageObj->m_Left;
- int32_t maxH = (int32_t)pPageObj->m_Right > nPageWidth ? nPageWidth : (int32_t)pPageObj->m_Right;
- int32_t minV = (int32_t)pPageObj->m_Bottom < 0 ? 0 : (int32_t)pPageObj->m_Bottom;
- int32_t maxV = (int32_t)pPageObj->m_Top > nPageHeight ? nPageHeight : (int32_t)pPageObj->m_Top;
- if (minH >= maxH || minV >= maxV) {
- continue;
- }
- FXSYS_memset(pDataH + minH, 1, maxH - minH);
- FXSYS_memset(pDataV + minV, 1, maxV - minV);
- if (fLineHeight <= 0.0f) {
- fLineHeight = pPageObj->m_Top - pPageObj->m_Bottom;
- }
- pPageObj = NULL;
- }
- int32_t nStartH = 0;
- int32_t nEndH = 0;
- FX_FLOAT nSumH = 0.0f;
- for (index = 0; index < nPageWidth; index++)
- if(1 == nHorizontalMask[index]) {
- break;
- }
- nStartH = index;
- for (index = nPageWidth; index > 0; index--)
- if(1 == nHorizontalMask[index - 1]) {
- break;
- }
- nEndH = index;
- for (index = nStartH; index < nEndH; index++) {
- nSumH += nHorizontalMask[index];
- }
- nSumH /= nEndH - nStartH;
- int32_t nStartV = 0;
- int32_t nEndV = 0;
- FX_FLOAT nSumV = 0.0f;
- for (index = 0; index < nPageHeight; index++)
- if(1 == nVerticalMask[index]) {
- break;
- }
- nStartV = index;
- for (index = nPageHeight; index > 0; index--)
- if(1 == nVerticalMask[index - 1]) {
- break;
- }
- nEndV = index;
- for (index = nStartV; index < nEndV; index++) {
- nSumV += nVerticalMask[index];
- }
- nSumV /= nEndV - nStartV;
- if ((nEndV - nStartV) < (int32_t)(2 * fLineHeight)) {
- return 0;
- }
- if ((nEndH - nStartH) < (int32_t)(2 * fLineHeight)) {
- return 1;
- }
- if (nSumH > 0.8f) {
- return 0;
- }
- if (nSumH - nSumV > 0.0f) {
- return 0;
- }
- if (nSumV - nSumH > 0.0f) {
- return 1;
- }
+int CPDF_TextPage::GetWordBreak(int index, int direction) const {
+ if (m_ParseOptions.m_bGetCharCodeOnly) {
return -1;
-}
-void CPDF_TextPage::ProcessObject()
-{
- CPDF_PageObject* pPageObj = NULL;
- if (!m_pPage) {
- return;
- }
- FX_POSITION pos;
- pos = m_pPage->GetFirstObjectPosition();
- if (!pos) {
- return;
- }
- m_TextlineDir = FindTextlineFlowDirection();
- int nCount = 0;
- while (pos) {
- pPageObj = m_pPage->GetNextObject(pos);
- if(pPageObj) {
- if(pPageObj->m_Type == PDFPAGE_TEXT) {
- CFX_AffineMatrix matrix;
- ProcessTextObject((CPDF_TextObject*)pPageObj, matrix, pos);
- nCount++;
- } else if (pPageObj->m_Type == PDFPAGE_FORM) {
- CFX_AffineMatrix formMatrix(1, 0, 0, 1, 0, 0);
- ProcessFormObject((CPDF_FormObject*)pPageObj, formMatrix);
- }
- }
- pPageObj = NULL;
- }
- int count = m_LineObj.GetSize();
- for(int i = 0; i < count; i++) {
- ProcessTextObject(m_LineObj.GetAt(i));
- }
- m_LineObj.RemoveAll();
- CloseTempLine();
-}
-void CPDF_TextPage::ProcessFormObject(CPDF_FormObject* pFormObj, const CFX_AffineMatrix& formMatrix)
-{
- CPDF_PageObject* pPageObj = NULL;
- FX_POSITION pos;
- if (!pFormObj) {
- return;
- }
- pos = pFormObj->m_pForm->GetFirstObjectPosition();
- if (!pos) {
+ }
+ if (!m_IsParsered) {
+ return -1;
+ }
+ if (direction != FPDFTEXT_LEFT && direction != FPDFTEXT_RIGHT) {
+ return -1;
+ }
+ if (index < 0 || index >= m_charList.GetSize()) {
+ return -1;
+ }
+ PAGECHAR_INFO charinfo;
+ charinfo = *(PAGECHAR_INFO*)m_charList.GetAt(index);
+ if (charinfo.m_Index == -1 || charinfo.m_Flag == FPDFTEXT_CHAR_GENERATED) {
+ return index;
+ }
+ if (!IsLetter(charinfo.m_Unicode)) {
+ return index;
+ }
+ int breakPos = index;
+ if (direction == FPDFTEXT_LEFT) {
+ while (--breakPos > 0) {
+ charinfo = *(PAGECHAR_INFO*)m_charList.GetAt(breakPos);
+ if (!IsLetter(charinfo.m_Unicode)) {
+ return breakPos;
+ }
+ }
+ } else if (direction == FPDFTEXT_RIGHT) {
+ while (++breakPos < m_charList.GetSize()) {
+ charinfo = *(PAGECHAR_INFO*)m_charList.GetAt(breakPos);
+ if (!IsLetter(charinfo.m_Unicode)) {
+ return breakPos;
+ }
+ }
+ }
+ return breakPos;
+}
+int32_t CPDF_TextPage::FindTextlineFlowDirection() {
+ if (!m_pPage) {
+ return -1;
+ }
+ const int32_t nPageWidth = (int32_t)((CPDF_Page*)m_pPage)->GetPageWidth();
+ const int32_t nPageHeight = (int32_t)((CPDF_Page*)m_pPage)->GetPageHeight();
+ CFX_ByteArray nHorizontalMask;
+ if (!nHorizontalMask.SetSize(nPageWidth)) {
+ return -1;
+ }
+ uint8_t* pDataH = nHorizontalMask.GetData();
+ CFX_ByteArray nVerticalMask;
+ if (!nVerticalMask.SetSize(nPageHeight)) {
+ return -1;
+ }
+ uint8_t* pDataV = nVerticalMask.GetData();
+ int32_t index = 0;
+ FX_FLOAT fLineHeight = 0.0f;
+ CPDF_PageObject* pPageObj = NULL;
+ FX_POSITION pos = NULL;
+ pos = m_pPage->GetFirstObjectPosition();
+ if (!pos) {
+ return -1;
+ }
+ while (pos) {
+ pPageObj = m_pPage->GetNextObject(pos);
+ if (NULL == pPageObj) {
+ continue;
+ }
+ if (PDFPAGE_TEXT != pPageObj->m_Type) {
+ continue;
+ }
+ int32_t minH =
+ (int32_t)pPageObj->m_Left < 0 ? 0 : (int32_t)pPageObj->m_Left;
+ int32_t maxH = (int32_t)pPageObj->m_Right > nPageWidth
+ ? nPageWidth
+ : (int32_t)pPageObj->m_Right;
+ int32_t minV =
+ (int32_t)pPageObj->m_Bottom < 0 ? 0 : (int32_t)pPageObj->m_Bottom;
+ int32_t maxV = (int32_t)pPageObj->m_Top > nPageHeight
+ ? nPageHeight
+ : (int32_t)pPageObj->m_Top;
+ if (minH >= maxH || minV >= maxV) {
+ continue;
+ }
+ FXSYS_memset(pDataH + minH, 1, maxH - minH);
+ FXSYS_memset(pDataV + minV, 1, maxV - minV);
+ if (fLineHeight <= 0.0f) {
+ fLineHeight = pPageObj->m_Top - pPageObj->m_Bottom;
+ }
+ pPageObj = NULL;
+ }
+ int32_t nStartH = 0;
+ int32_t nEndH = 0;
+ FX_FLOAT nSumH = 0.0f;
+ for (index = 0; index < nPageWidth; index++)
+ if (1 == nHorizontalMask[index]) {
+ break;
+ }
+ nStartH = index;
+ for (index = nPageWidth; index > 0; index--)
+ if (1 == nHorizontalMask[index - 1]) {
+ break;
+ }
+ nEndH = index;
+ for (index = nStartH; index < nEndH; index++) {
+ nSumH += nHorizontalMask[index];
+ }
+ nSumH /= nEndH - nStartH;
+ int32_t nStartV = 0;
+ int32_t nEndV = 0;
+ FX_FLOAT nSumV = 0.0f;
+ for (index = 0; index < nPageHeight; index++)
+ if (1 == nVerticalMask[index]) {
+ break;
+ }
+ nStartV = index;
+ for (index = nPageHeight; index > 0; index--)
+ if (1 == nVerticalMask[index - 1]) {
+ break;
+ }
+ nEndV = index;
+ for (index = nStartV; index < nEndV; index++) {
+ nSumV += nVerticalMask[index];
+ }
+ nSumV /= nEndV - nStartV;
+ if ((nEndV - nStartV) < (int32_t)(2 * fLineHeight)) {
+ return 0;
+ }
+ if ((nEndH - nStartH) < (int32_t)(2 * fLineHeight)) {
+ return 1;
+ }
+ if (nSumH > 0.8f) {
+ return 0;
+ }
+ if (nSumH - nSumV > 0.0f) {
+ return 0;
+ }
+ if (nSumV - nSumH > 0.0f) {
+ return 1;
+ }
+ return -1;
+}
+void CPDF_TextPage::ProcessObject() {
+ CPDF_PageObject* pPageObj = NULL;
+ if (!m_pPage) {
+ return;
+ }
+ FX_POSITION pos;
+ pos = m_pPage->GetFirstObjectPosition();
+ if (!pos) {
+ return;
+ }
+ m_TextlineDir = FindTextlineFlowDirection();
+ int nCount = 0;
+ while (pos) {
+ pPageObj = m_pPage->GetNextObject(pos);
+ if (pPageObj) {
+ if (pPageObj->m_Type == PDFPAGE_TEXT) {
+ CFX_AffineMatrix matrix;
+ ProcessTextObject((CPDF_TextObject*)pPageObj, matrix, pos);
+ nCount++;
+ } else if (pPageObj->m_Type == PDFPAGE_FORM) {
+ CFX_AffineMatrix formMatrix(1, 0, 0, 1, 0, 0);
+ ProcessFormObject((CPDF_FormObject*)pPageObj, formMatrix);
+ }
+ }
+ pPageObj = NULL;
+ }
+ int count = m_LineObj.GetSize();
+ for (int i = 0; i < count; i++) {
+ ProcessTextObject(m_LineObj.GetAt(i));
+ }
+ m_LineObj.RemoveAll();
+ CloseTempLine();
+}
+void CPDF_TextPage::ProcessFormObject(CPDF_FormObject* pFormObj,
+ const CFX_AffineMatrix& formMatrix) {
+ CPDF_PageObject* pPageObj = NULL;
+ FX_POSITION pos;
+ if (!pFormObj) {
+ return;
+ }
+ pos = pFormObj->m_pForm->GetFirstObjectPosition();
+ if (!pos) {
+ return;
+ }
+ CFX_AffineMatrix curFormMatrix;
+ curFormMatrix.Copy(pFormObj->m_FormMatrix);
+ curFormMatrix.Concat(formMatrix);
+ while (pos) {
+ pPageObj = pFormObj->m_pForm->GetNextObject(pos);
+ if (pPageObj) {
+ if (pPageObj->m_Type == PDFPAGE_TEXT) {
+ ProcessTextObject((CPDF_TextObject*)pPageObj, curFormMatrix, pos);
+ } else if (pPageObj->m_Type == PDFPAGE_FORM) {
+ ProcessFormObject((CPDF_FormObject*)pPageObj, curFormMatrix);
+ }
+ }
+ pPageObj = NULL;
+ }
+}
+int CPDF_TextPage::GetCharWidth(FX_DWORD charCode, CPDF_Font* pFont) const {
+ if (charCode == -1) {
+ return 0;
+ }
+ int w = pFont->GetCharWidthF(charCode);
+ if (w == 0) {
+ CFX_ByteString str;
+ pFont->AppendChar(str, charCode);
+ w = pFont->GetStringWidth(str, 1);
+ if (w == 0) {
+ FX_RECT BBox;
+ pFont->GetCharBBox(charCode, BBox);
+ w = BBox.right - BBox.left;
+ }
+ }
+ return w;
+}
+void CPDF_TextPage::OnPiece(IFX_BidiChar* pBidi, CFX_WideString& str) {
+ int32_t start, count;
+ int32_t ret = pBidi->GetBidiInfo(start, count);
+ if (ret == 2) {
+ for (int i = start + count - 1; i >= start; i--) {
+ m_TextBuf.AppendChar(str.GetAt(i));
+ m_charList.Add(*(PAGECHAR_INFO*)m_TempCharList.GetAt(i));
+ }
+ } else {
+ int end = start + count;
+ for (int i = start; i < end; i++) {
+ m_TextBuf.AppendChar(str.GetAt(i));
+ m_charList.Add(*(PAGECHAR_INFO*)m_TempCharList.GetAt(i));
+ }
+ }
+}
+void CPDF_TextPage::AddCharInfoByLRDirection(CFX_WideString& str, int i) {
+ PAGECHAR_INFO Info = *(PAGECHAR_INFO*)m_TempCharList.GetAt(i);
+ FX_WCHAR wChar = str.GetAt(i);
+ if (!IsControlChar(Info)) {
+ Info.m_Index = m_TextBuf.GetLength();
+ if (wChar >= 0xFB00 && wChar <= 0xFB06) {
+ FX_WCHAR* pDst = NULL;
+ FX_STRSIZE nCount = FX_Unicode_GetNormalization(wChar, pDst);
+ if (nCount >= 1) {
+ pDst = FX_Alloc(FX_WCHAR, nCount);
+ FX_Unicode_GetNormalization(wChar, pDst);
+ for (int nIndex = 0; nIndex < nCount; nIndex++) {
+ PAGECHAR_INFO Info2 = Info;
+ Info2.m_Unicode = pDst[nIndex];
+ Info2.m_Flag = FPDFTEXT_CHAR_PIECE;
+ m_TextBuf.AppendChar(Info2.m_Unicode);
+ if (!m_ParseOptions.m_bGetCharCodeOnly) {
+ m_charList.Add(Info2);
+ }
+ }
+ FX_Free(pDst);
return;
- }
- CFX_AffineMatrix curFormMatrix;
- curFormMatrix.Copy(pFormObj->m_FormMatrix);
- curFormMatrix.Concat(formMatrix);
- while (pos) {
- pPageObj = pFormObj->m_pForm->GetNextObject(pos);
- if(pPageObj) {
- if(pPageObj->m_Type == PDFPAGE_TEXT) {
- ProcessTextObject((CPDF_TextObject*)pPageObj, curFormMatrix, pos);
- } else if (pPageObj->m_Type == PDFPAGE_FORM) {
- ProcessFormObject((CPDF_FormObject*)pPageObj, curFormMatrix);
- }
- }
- pPageObj = NULL;
- }
-}
-int CPDF_TextPage::GetCharWidth(FX_DWORD charCode, CPDF_Font* pFont) const
-{
- if(charCode == -1) {
- return 0;
- }
- int w = pFont->GetCharWidthF(charCode);
- if(w == 0) {
- CFX_ByteString str;
- pFont->AppendChar(str, charCode);
- w = pFont->GetStringWidth(str, 1);
- if(w == 0) {
- FX_RECT BBox;
- pFont->GetCharBBox(charCode, BBox);
- w = BBox.right - BBox.left;
- }
- }
- return w;
-}
-void CPDF_TextPage::OnPiece(IFX_BidiChar* pBidi, CFX_WideString& str)
-{
- int32_t start, count;
- int32_t ret = pBidi->GetBidiInfo(start, count);
- if(ret == 2) {
- for(int i = start + count - 1; i >= start; i--) {
- m_TextBuf.AppendChar(str.GetAt(i));
- m_charList.Add(*(PAGECHAR_INFO*)m_TempCharList.GetAt(i));
- }
- } else {
- int end = start + count ;
- for(int i = start; i < end; i++) {
- m_TextBuf.AppendChar(str.GetAt(i));
- m_charList.Add(*(PAGECHAR_INFO*)m_TempCharList.GetAt(i));
- }
- }
-}
-void CPDF_TextPage::AddCharInfoByLRDirection(CFX_WideString& str, int i)
-{
- PAGECHAR_INFO Info = *(PAGECHAR_INFO*)m_TempCharList.GetAt(i);
- FX_WCHAR wChar = str.GetAt(i);
- if(!IsControlChar(Info)) {
- Info.m_Index = m_TextBuf.GetLength();
- if (wChar >= 0xFB00 && wChar <= 0xFB06) {
- FX_WCHAR* pDst = NULL;
- FX_STRSIZE nCount = FX_Unicode_GetNormalization(wChar, pDst);
- if (nCount >= 1) {
- pDst = FX_Alloc(FX_WCHAR, nCount);
- FX_Unicode_GetNormalization(wChar, pDst);
- for (int nIndex = 0; nIndex < nCount; nIndex++) {
- PAGECHAR_INFO Info2 = Info;
- Info2.m_Unicode = pDst[nIndex];
- Info2.m_Flag = FPDFTEXT_CHAR_PIECE;
- m_TextBuf.AppendChar(Info2.m_Unicode);
- if( !m_ParseOptions.m_bGetCharCodeOnly) {
- m_charList.Add(Info2);
- }
- }
- FX_Free(pDst);
- return;
- }
- }
- m_TextBuf.AppendChar(wChar);
- } else {
- Info.m_Index = -1;
- }
- if( !m_ParseOptions.m_bGetCharCodeOnly) {
- m_charList.Add(Info);
- }
-}
-void CPDF_TextPage::AddCharInfoByRLDirection(CFX_WideString& str, int i)
-{
- PAGECHAR_INFO Info = *(PAGECHAR_INFO*)m_TempCharList.GetAt(i);
- if(!IsControlChar(Info)) {
- Info.m_Index = m_TextBuf.GetLength();
- FX_WCHAR wChar = FX_GetMirrorChar(str.GetAt(i), TRUE, FALSE);
- FX_WCHAR* pDst = NULL;
- FX_STRSIZE nCount = FX_Unicode_GetNormalization(wChar, pDst);
- if (nCount >= 1) {
- pDst = FX_Alloc(FX_WCHAR, nCount);
- FX_Unicode_GetNormalization(wChar, pDst);
- for (int nIndex = 0; nIndex < nCount; nIndex++) {
- PAGECHAR_INFO Info2 = Info;
- Info2.m_Unicode = pDst[nIndex];
- Info2.m_Flag = FPDFTEXT_CHAR_PIECE;
- m_TextBuf.AppendChar(Info2.m_Unicode);
- if( !m_ParseOptions.m_bGetCharCodeOnly) {
- m_charList.Add(Info2);
- }
- }
- FX_Free(pDst);
- return;
- }
- Info.m_Unicode = wChar;
- m_TextBuf.AppendChar(Info.m_Unicode);
+ }
+ }
+ m_TextBuf.AppendChar(wChar);
+ } else {
+ Info.m_Index = -1;
+ }
+ if (!m_ParseOptions.m_bGetCharCodeOnly) {
+ m_charList.Add(Info);
+ }
+}
+void CPDF_TextPage::AddCharInfoByRLDirection(CFX_WideString& str, int i) {
+ PAGECHAR_INFO Info = *(PAGECHAR_INFO*)m_TempCharList.GetAt(i);
+ if (!IsControlChar(Info)) {
+ Info.m_Index = m_TextBuf.GetLength();
+ FX_WCHAR wChar = FX_GetMirrorChar(str.GetAt(i), TRUE, FALSE);
+ FX_WCHAR* pDst = NULL;
+ FX_STRSIZE nCount = FX_Unicode_GetNormalization(wChar, pDst);
+ if (nCount >= 1) {
+ pDst = FX_Alloc(FX_WCHAR, nCount);
+ FX_Unicode_GetNormalization(wChar, pDst);
+ for (int nIndex = 0; nIndex < nCount; nIndex++) {
+ PAGECHAR_INFO Info2 = Info;
+ Info2.m_Unicode = pDst[nIndex];
+ Info2.m_Flag = FPDFTEXT_CHAR_PIECE;
+ m_TextBuf.AppendChar(Info2.m_Unicode);
+ if (!m_ParseOptions.m_bGetCharCodeOnly) {
+ m_charList.Add(Info2);
+ }
+ }
+ FX_Free(pDst);
+ return;
+ }
+ Info.m_Unicode = wChar;
+ m_TextBuf.AppendChar(Info.m_Unicode);
+ } else {
+ Info.m_Index = -1;
+ }
+ if (!m_ParseOptions.m_bGetCharCodeOnly) {
+ m_charList.Add(Info);
+ }
+}
+void CPDF_TextPage::CloseTempLine() {
+ int count1 = m_TempCharList.GetSize();
+ if (count1 <= 0) {
+ return;
+ }
+ nonstd::unique_ptr<IFX_BidiChar> pBidiChar(IFX_BidiChar::Create());
+ CFX_WideString str = m_TempTextBuf.GetWideString();
+ CFX_WordArray order;
+ FX_BOOL bR2L = FALSE;
+ int32_t start = 0, count = 0;
+ int nR2L = 0, nL2R = 0;
+ FX_BOOL bPrevSpace = FALSE;
+ for (int i = 0; i < str.GetLength(); i++) {
+ if (str.GetAt(i) == 32) {
+ if (bPrevSpace) {
+ m_TempTextBuf.Delete(i, 1);
+ m_TempCharList.Delete(i);
+ str.Delete(i);
+ count1--;
+ i--;
+ continue;
+ }
+ bPrevSpace = TRUE;
} else {
- Info.m_Index = -1;
- }
- if( !m_ParseOptions.m_bGetCharCodeOnly) {
- m_charList.Add(Info);
- }
-}
-void CPDF_TextPage::CloseTempLine()
-{
- int count1 = m_TempCharList.GetSize();
- if (count1 <= 0) {
- return;
- }
- nonstd::unique_ptr<IFX_BidiChar> pBidiChar(IFX_BidiChar::Create());
- CFX_WideString str = m_TempTextBuf.GetWideString();
- CFX_WordArray order;
- FX_BOOL bR2L = FALSE;
- int32_t start = 0, count = 0;
- int nR2L = 0, nL2R = 0;
- FX_BOOL bPrevSpace = FALSE;
- for (int i = 0; i < str.GetLength(); i++) {
- if(str.GetAt(i) == 32) {
- if(bPrevSpace) {
- m_TempTextBuf.Delete(i, 1);
- m_TempCharList.Delete(i);
- str.Delete(i);
- count1--;
- i--;
- continue;
- }
- bPrevSpace = TRUE;
+ bPrevSpace = FALSE;
+ }
+ if (pBidiChar->AppendChar(str.GetAt(i))) {
+ int32_t ret = pBidiChar->GetBidiInfo(start, count);
+ order.Add(start);
+ order.Add(count);
+ order.Add(ret);
+ if (!bR2L) {
+ if (ret == 2) {
+ nR2L++;
+ } else if (ret == 1) {
+ nL2R++;
+ }
+ }
+ }
+ }
+ if (pBidiChar->EndChar()) {
+ int32_t ret = pBidiChar->GetBidiInfo(start, count);
+ order.Add(start);
+ order.Add(count);
+ order.Add(ret);
+ if (!bR2L) {
+ if (ret == 2) {
+ nR2L++;
+ } else if (ret == 1) {
+ nL2R++;
+ }
+ }
+ }
+ if (nR2L > 0 && nR2L >= nL2R) {
+ bR2L = TRUE;
+ }
+ if (m_parserflag == FPDFTEXT_RLTB || bR2L) {
+ int count = order.GetSize();
+ for (int i = count - 1; i > 0; i -= 3) {
+ int ret = order.GetAt(i);
+ int start = order.GetAt(i - 2);
+ int count1 = order.GetAt(i - 1);
+ if (ret == 2 || ret == 0) {
+ for (int j = start + count1 - 1; j >= start; j--) {
+ AddCharInfoByRLDirection(str, j);
+ }
+ } else {
+ int j = i;
+ FX_BOOL bSymbol = FALSE;
+ while (j > 0 && order.GetAt(j) != 2) {
+ bSymbol = !order.GetAt(j);
+ j -= 3;
+ }
+ int end = start + count1;
+ int n = 0;
+ if (bSymbol) {
+ n = j + 6;
} else {
- bPrevSpace = FALSE;
- }
- if(pBidiChar->AppendChar(str.GetAt(i))) {
- int32_t ret = pBidiChar->GetBidiInfo(start, count);
- order.Add(start);
- order.Add(count);
- order.Add(ret);
- if(!bR2L) {
- if(ret == 2) {
- nR2L++;
- } else if (ret == 1) {
- nL2R++;
- }
- }
- }
- }
- if(pBidiChar->EndChar()) {
- int32_t ret = pBidiChar->GetBidiInfo(start, count);
- order.Add(start);
- order.Add(count);
- order.Add(ret);
- if(!bR2L) {
- if(ret == 2) {
- nR2L++;
- } else if(ret == 1) {
- nL2R++;
- }
+ n = j + 3;
}
- }
- if(nR2L > 0 && nR2L >= nL2R) {
- bR2L = TRUE;
- }
- if (m_parserflag == FPDFTEXT_RLTB || bR2L) {
- int count = order.GetSize();
- for(int i = count - 1; i > 0; i -= 3) {
- int ret = order.GetAt(i);
- int start = order.GetAt(i - 2);
- int count1 = order.GetAt(i - 1);
- if(ret == 2 || ret == 0) {
- for(int j = start + count1 - 1; j >= start; j--) {
- AddCharInfoByRLDirection(str, j);
- }
- } else {
- int j = i;
- FX_BOOL bSymbol = FALSE;
- while(j > 0 && order.GetAt(j) != 2) {
- bSymbol = !order.GetAt(j);
- j -= 3;
- }
- int end = start + count1 ;
- int n = 0;
- if(bSymbol) {
- n = j + 6;
- } else {
- n = j + 3;
- }
- if(n >= i) {
- for(int m = start; m < end; m++) {
- AddCharInfoByLRDirection(str, m);
- }
- } else {
- j = i;
- i = n;
- for(; n <= j; n += 3) {
- int start = order.GetAt(n - 2);
- int count1 = order.GetAt(n - 1);
- int end = start + count1 ;
- for(int m = start; m < end; m++) {
- AddCharInfoByLRDirection(str, m);
- }
- }
- }
- }
- }
- } else {
- int count = order.GetSize();
- FX_BOOL bL2R = FALSE;
- for(int i = 0; i < count; i += 3) {
- int ret = order.GetAt(i + 2);
- int start = order.GetAt(i);
- int count1 = order.GetAt(i + 1);
- if(ret == 2 || (i == 0 && ret == 0 && !bL2R)) {
- int j = i + 3;
- while(bR2L && j < count) {
- if(order.GetAt(j + 2) == 1) {
- break;
- } else {
- j += 3;
- }
- }
- if(j == 3) {
- i = -3;
- bL2R = TRUE;
- continue;
- }
- int end = m_TempCharList.GetSize() - 1;
- if(j < count) {
- end = order.GetAt(j) - 1;
- }
- i = j - 3;
- for(int n = end; n >= start; n--) {
- AddCharInfoByRLDirection(str, n);
- }
- } else {
- int end = start + count1 ;
- for(int n = start; n < end; n++) {
- AddCharInfoByLRDirection(str, n);
- }
- }
- }
- }
- order.RemoveAll();
- m_TempCharList.RemoveAll();
- m_TempTextBuf.Delete(0, m_TempTextBuf.GetLength());
-}
-void CPDF_TextPage::ProcessTextObject(CPDF_TextObject* pTextObj, const CFX_AffineMatrix& formMatrix, FX_POSITION ObjPos)
-{
- CFX_FloatRect re(pTextObj->m_Left, pTextObj->m_Bottom, pTextObj->m_Right, pTextObj->m_Top);
- if(FXSYS_fabs(pTextObj->m_Right - pTextObj->m_Left) < 0.01f ) {
- return;
- }
- int count = m_LineObj.GetSize();
- PDFTEXT_Obj Obj;
- Obj.m_pTextObj = pTextObj;
- Obj.m_formMatrix = formMatrix;
- if(count == 0) {
- m_LineObj.Add(Obj);
- return;
- }
- if (IsSameAsPreTextObject(pTextObj, ObjPos)) {
- return;
- }
- PDFTEXT_Obj prev_Obj = m_LineObj.GetAt(count - 1);
- CPDF_TextObjectItem item;
- int nItem = prev_Obj.m_pTextObj->CountItems();
- prev_Obj.m_pTextObj->GetItemInfo(nItem - 1, &item);
- FX_FLOAT prev_width = GetCharWidth(item.m_CharCode, prev_Obj.m_pTextObj->GetFont()) * prev_Obj.m_pTextObj->GetFontSize() / 1000;
- CFX_AffineMatrix prev_matrix;
- prev_Obj.m_pTextObj->GetTextMatrix(&prev_matrix);
- prev_width = FXSYS_fabs(prev_width);
- prev_matrix.Concat(prev_Obj.m_formMatrix);
- prev_width = prev_matrix.TransformDistance(prev_width);
- pTextObj->GetItemInfo(0, &item);
- FX_FLOAT this_width = GetCharWidth(item.m_CharCode, pTextObj->GetFont()) * pTextObj->GetFontSize() / 1000;
- this_width = FXSYS_fabs(this_width);
- CFX_AffineMatrix this_matrix;
- pTextObj->GetTextMatrix(&this_matrix);
- this_width = FXSYS_fabs(this_width);
- this_matrix.Concat(formMatrix);
- this_width = this_matrix.TransformDistance(this_width);
- FX_FLOAT threshold = prev_width > this_width ? prev_width / 4 : this_width / 4;
- FX_FLOAT prev_x = prev_Obj.m_pTextObj->GetPosX(), prev_y = prev_Obj.m_pTextObj->GetPosY();
- prev_Obj.m_formMatrix.Transform(prev_x, prev_y);
- m_DisplayMatrix.Transform(prev_x, prev_y);
- FX_FLOAT this_x = pTextObj->GetPosX(), this_y = pTextObj->GetPosY();
- formMatrix.Transform(this_x, this_y);
- m_DisplayMatrix.Transform(this_x, this_y);
- if (FXSYS_fabs(this_y - prev_y) > threshold * 2) {
- for(int i = 0; i < count; i++) {
- ProcessTextObject(m_LineObj.GetAt(i));
- }
- m_LineObj.RemoveAll();
- m_LineObj.Add(Obj);
- return;
- }
- int i = 0;
- if(m_ParseOptions.m_bNormalizeObjs) {
- for(i = count - 1; i >= 0; i--) {
- PDFTEXT_Obj prev_Obj = m_LineObj.GetAt(i);
- CFX_AffineMatrix prev_matrix;
- prev_Obj.m_pTextObj->GetTextMatrix(&prev_matrix);
- FX_FLOAT Prev_x = prev_Obj.m_pTextObj->GetPosX(), Prev_y = prev_Obj.m_pTextObj->GetPosY();
- prev_Obj.m_formMatrix.Transform(Prev_x, Prev_y);
- m_DisplayMatrix.Transform(Prev_x, Prev_y);
- if(this_x >= Prev_x) {
- if(i == count - 1) {
- m_LineObj.Add(Obj);
- } else {
- m_LineObj.InsertAt(i + 1, Obj);
- }
- break;
- }
- }
- if(i < 0) {
- m_LineObj.InsertAt(0, Obj);
- }
- } else {
- m_LineObj.Add(Obj);
- }
-}
-int32_t CPDF_TextPage::PreMarkedContent(PDFTEXT_Obj Obj)
-{
- CPDF_TextObject* pTextObj = Obj.m_pTextObj;
- CPDF_ContentMarkData* pMarkData = (CPDF_ContentMarkData*)pTextObj->m_ContentMark.GetObject();
- if(!pMarkData) {
- return FPDFTEXT_MC_PASS;
- }
- int nContentMark = pMarkData->CountItems();
- if (nContentMark < 1) {
- return FPDFTEXT_MC_PASS;
- }
- CFX_WideString actText;
- FX_BOOL bExist = FALSE;
- CPDF_Dictionary* pDict = NULL;
- int n = 0;
- for (n = 0; n < nContentMark; n++) {
- CPDF_ContentMarkItem& item = pMarkData->GetItem(n);
- CFX_ByteString tagStr = (CFX_ByteString)item.GetName();
- pDict = (CPDF_Dictionary*)item.GetParam();
- CPDF_String* temp = (CPDF_String*)(pDict ? pDict->GetElement(FX_BSTRC("ActualText")) : NULL);
- if (temp) {
- bExist = TRUE;
- actText = temp->GetUnicodeText();
- }
- }
- if (!bExist) {
- return FPDFTEXT_MC_PASS;
- }
- if (m_pPreTextObj) {
- if (CPDF_ContentMarkData* pPreMarkData = (CPDF_ContentMarkData*)m_pPreTextObj->m_ContentMark.GetObject()) {
- if (pPreMarkData->CountItems() == n) {
- CPDF_ContentMarkItem& item = pPreMarkData->GetItem(n - 1);
- if (pDict == item.GetParam()) {
- return FPDFTEXT_MC_DONE;
- }
- }
- }
- }
- CPDF_Font* pFont = pTextObj->GetFont();
- FX_STRSIZE nItems = actText.GetLength();
- if (nItems < 1) {
- return FPDFTEXT_MC_PASS;
- }
- bExist = FALSE;
- for (FX_STRSIZE i = 0; i < nItems; i++) {
- FX_WCHAR wChar = actText.GetAt(i);
- if (-1 == pFont->CharCodeFromUnicode(wChar)) {
- continue;
+ if (n >= i) {
+ for (int m = start; m < end; m++) {
+ AddCharInfoByLRDirection(str, m);
+ }
} else {
- bExist = TRUE;
- break;
- }
- }
- if (!bExist) {
- return FPDFTEXT_MC_PASS;
- }
- bExist = FALSE;
- for (FX_STRSIZE i = 0; i < nItems; i++) {
- FX_WCHAR wChar = actText.GetAt(i);
- if ((wChar > 0x80 && wChar < 0xFFFD) || (wChar <= 0x80 && isprint(wChar))) {
- bExist = TRUE;
+ j = i;
+ i = n;
+ for (; n <= j; n += 3) {
+ int start = order.GetAt(n - 2);
+ int count1 = order.GetAt(n - 1);
+ int end = start + count1;
+ for (int m = start; m < end; m++) {
+ AddCharInfoByLRDirection(str, m);
+ }
+ }
+ }
+ }
+ }
+ } else {
+ int count = order.GetSize();
+ FX_BOOL bL2R = FALSE;
+ for (int i = 0; i < count; i += 3) {
+ int ret = order.GetAt(i + 2);
+ int start = order.GetAt(i);
+ int count1 = order.GetAt(i + 1);
+ if (ret == 2 || (i == 0 && ret == 0 && !bL2R)) {
+ int j = i + 3;
+ while (bR2L && j < count) {
+ if (order.GetAt(j + 2) == 1) {
break;
- }
- }
- if (!bExist) {
- return FPDFTEXT_MC_DONE;
- }
- return FPDFTEXT_MC_DELAY;
-}
-void CPDF_TextPage::ProcessMarkedContent(PDFTEXT_Obj Obj)
-{
- CPDF_TextObject* pTextObj = Obj.m_pTextObj;
- CPDF_ContentMarkData* pMarkData = (CPDF_ContentMarkData*)pTextObj->m_ContentMark.GetObject();
- if(!pMarkData) {
- return;
- }
- int nContentMark = pMarkData->CountItems();
- if (nContentMark < 1) {
- return;
- }
- CFX_WideString actText;
- CPDF_Dictionary* pDict = NULL;
- int n = 0;
- for (n = 0; n < nContentMark; n++) {
- CPDF_ContentMarkItem& item = pMarkData->GetItem(n);
- CFX_ByteString tagStr = (CFX_ByteString)item.GetName();
- pDict = (CPDF_Dictionary*)item.GetParam();
- CPDF_String* temp = (CPDF_String*)(pDict ? pDict->GetElement(FX_BSTRC("ActualText")) : NULL);
- if (temp) {
- actText = temp->GetUnicodeText();
- }
- }
- FX_STRSIZE nItems = actText.GetLength();
- if (nItems < 1) {
- return;
- }
- CPDF_Font* pFont = pTextObj->GetFont();
- CFX_AffineMatrix formMatrix = Obj.m_formMatrix;
- CFX_AffineMatrix matrix;
- pTextObj->GetTextMatrix(&matrix);
- matrix.Concat(formMatrix);
- FX_FLOAT fPosX = pTextObj->GetPosX();
- FX_FLOAT fPosY = pTextObj->GetPosY();
- int nCharInfoIndex = m_TextBuf.GetLength();
- CFX_FloatRect charBox;
- charBox.top = pTextObj->m_Top;
- charBox.left = pTextObj->m_Left;
- charBox.right = pTextObj->m_Right;
- charBox.bottom = pTextObj->m_Bottom;
- for (FX_STRSIZE k = 0; k < nItems; k++) {
- FX_WCHAR wChar = actText.GetAt(k);
- if (wChar <= 0x80 && !isprint(wChar)) {
- wChar = 0x20;
- }
- if (wChar >= 0xFFFD) {
- continue;
- }
- PAGECHAR_INFO charinfo;
- charinfo.m_OriginX = fPosX;
- charinfo.m_OriginY = fPosY;
- charinfo.m_Index = nCharInfoIndex;
- charinfo.m_Unicode = wChar;
- charinfo.m_CharCode = pFont->CharCodeFromUnicode(wChar);
- charinfo.m_Flag = FPDFTEXT_CHAR_PIECE;
- charinfo.m_pTextObj = pTextObj;
- charinfo.m_CharBox.top = charBox.top;
- charinfo.m_CharBox.left = charBox.left;
- charinfo.m_CharBox.right = charBox.right;
- charinfo.m_CharBox.bottom = charBox.bottom;
- charinfo.m_Matrix.Copy(matrix);
- m_TempTextBuf.AppendChar(wChar);
- m_TempCharList.Add(charinfo);
- }
-}
-void CPDF_TextPage::FindPreviousTextObject(void)
-{
- if (m_TempCharList.GetSize() < 1 && m_charList.GetSize() < 1) {
- return;
- }
- PAGECHAR_INFO preChar;
- if (m_TempCharList.GetSize() >= 1) {
- preChar = *(PAGECHAR_INFO*)m_TempCharList.GetAt(m_TempCharList.GetSize() - 1);
- } else {
- preChar = *(PAGECHAR_INFO*)m_charList.GetAt(m_charList.GetSize() - 1);
- }
- if (preChar.m_pTextObj) {
- m_pPreTextObj = preChar.m_pTextObj;
- }
-}
-void CPDF_TextPage::ProcessTextObject(PDFTEXT_Obj Obj)
-{
- CPDF_TextObject* pTextObj = Obj.m_pTextObj;
- if(FXSYS_fabs(pTextObj->m_Right - pTextObj->m_Left) < 0.01f ) {
- return;
- }
- CFX_AffineMatrix formMatrix = Obj.m_formMatrix;
- CPDF_Font* pFont = pTextObj->GetFont();
- CFX_AffineMatrix matrix;
- pTextObj->GetTextMatrix(&matrix);
- matrix.Concat(formMatrix);
- int32_t bPreMKC = PreMarkedContent(Obj);
- if (FPDFTEXT_MC_DONE == bPreMKC) {
- m_pPreTextObj = pTextObj;
- m_perMatrix.Copy(formMatrix);
- return;
+ } else {
+ j += 3;
+ }
+ }
+ if (j == 3) {
+ i = -3;
+ bL2R = TRUE;
+ continue;
+ }
+ int end = m_TempCharList.GetSize() - 1;
+ if (j < count) {
+ end = order.GetAt(j) - 1;
+ }
+ i = j - 3;
+ for (int n = end; n >= start; n--) {
+ AddCharInfoByRLDirection(str, n);
+ }
+ } else {
+ int end = start + count1;
+ for (int n = start; n < end; n++) {
+ AddCharInfoByLRDirection(str, n);
+ }
+ }
+ }
+ }
+ order.RemoveAll();
+ m_TempCharList.RemoveAll();
+ m_TempTextBuf.Delete(0, m_TempTextBuf.GetLength());
+}
+void CPDF_TextPage::ProcessTextObject(CPDF_TextObject* pTextObj,
+ const CFX_AffineMatrix& formMatrix,
+ FX_POSITION ObjPos) {
+ CFX_FloatRect re(pTextObj->m_Left, pTextObj->m_Bottom, pTextObj->m_Right,
+ pTextObj->m_Top);
+ if (FXSYS_fabs(pTextObj->m_Right - pTextObj->m_Left) < 0.01f) {
+ return;
+ }
+ int count = m_LineObj.GetSize();
+ PDFTEXT_Obj Obj;
+ Obj.m_pTextObj = pTextObj;
+ Obj.m_formMatrix = formMatrix;
+ if (count == 0) {
+ m_LineObj.Add(Obj);
+ return;
+ }
+ if (IsSameAsPreTextObject(pTextObj, ObjPos)) {
+ return;
+ }
+ PDFTEXT_Obj prev_Obj = m_LineObj.GetAt(count - 1);
+ CPDF_TextObjectItem item;
+ int nItem = prev_Obj.m_pTextObj->CountItems();
+ prev_Obj.m_pTextObj->GetItemInfo(nItem - 1, &item);
+ FX_FLOAT prev_width =
+ GetCharWidth(item.m_CharCode, prev_Obj.m_pTextObj->GetFont()) *
+ prev_Obj.m_pTextObj->GetFontSize() / 1000;
+ CFX_AffineMatrix prev_matrix;
+ prev_Obj.m_pTextObj->GetTextMatrix(&prev_matrix);
+ prev_width = FXSYS_fabs(prev_width);
+ prev_matrix.Concat(prev_Obj.m_formMatrix);
+ prev_width = prev_matrix.TransformDistance(prev_width);
+ pTextObj->GetItemInfo(0, &item);
+ FX_FLOAT this_width = GetCharWidth(item.m_CharCode, pTextObj->GetFont()) *
+ pTextObj->GetFontSize() / 1000;
+ this_width = FXSYS_fabs(this_width);
+ CFX_AffineMatrix this_matrix;
+ pTextObj->GetTextMatrix(&this_matrix);
+ this_width = FXSYS_fabs(this_width);
+ this_matrix.Concat(formMatrix);
+ this_width = this_matrix.TransformDistance(this_width);
+ FX_FLOAT threshold =
+ prev_width > this_width ? prev_width / 4 : this_width / 4;
+ FX_FLOAT prev_x = prev_Obj.m_pTextObj->GetPosX(),
+ prev_y = prev_Obj.m_pTextObj->GetPosY();
+ prev_Obj.m_formMatrix.Transform(prev_x, prev_y);
+ m_DisplayMatrix.Transform(prev_x, prev_y);
+ FX_FLOAT this_x = pTextObj->GetPosX(), this_y = pTextObj->GetPosY();
+ formMatrix.Transform(this_x, this_y);
+ m_DisplayMatrix.Transform(this_x, this_y);
+ if (FXSYS_fabs(this_y - prev_y) > threshold * 2) {
+ for (int i = 0; i < count; i++) {
+ ProcessTextObject(m_LineObj.GetAt(i));
}
- int result = 0;
- if (m_pPreTextObj) {
- result = ProcessInsertObject(pTextObj, formMatrix);
- if (2 == result) {
- m_CurlineRect = CFX_FloatRect(Obj.m_pTextObj->m_Left, Obj.m_pTextObj->m_Bottom, Obj.m_pTextObj->m_Right, Obj.m_pTextObj->m_Top);
+ m_LineObj.RemoveAll();
+ m_LineObj.Add(Obj);
+ return;
+ }
+ int i = 0;
+ if (m_ParseOptions.m_bNormalizeObjs) {
+ for (i = count - 1; i >= 0; i--) {
+ PDFTEXT_Obj prev_Obj = m_LineObj.GetAt(i);
+ CFX_AffineMatrix prev_matrix;
+ prev_Obj.m_pTextObj->GetTextMatrix(&prev_matrix);
+ FX_FLOAT Prev_x = prev_Obj.m_pTextObj->GetPosX(),
+ Prev_y = prev_Obj.m_pTextObj->GetPosY();
+ prev_Obj.m_formMatrix.Transform(Prev_x, Prev_y);
+ m_DisplayMatrix.Transform(Prev_x, Prev_y);
+ if (this_x >= Prev_x) {
+ if (i == count - 1) {
+ m_LineObj.Add(Obj);
} else {
- m_CurlineRect.Union(CFX_FloatRect(Obj.m_pTextObj->m_Left, Obj.m_pTextObj->m_Bottom, Obj.m_pTextObj->m_Right, Obj.m_pTextObj->m_Top));
- }
- PAGECHAR_INFO generateChar;
- if (result == 1) {
- if (GenerateCharInfo(TEXT_BLANK_CHAR, generateChar)) {
- if (!formMatrix.IsIdentity()) {
- generateChar.m_Matrix.Copy(formMatrix);
- }
- m_TempTextBuf.AppendChar(TEXT_BLANK_CHAR);
- m_TempCharList.Add(generateChar);
- }
- } else if(result == 2) {
- CloseTempLine();
- if(m_TextBuf.GetSize()) {
- if(m_ParseOptions.m_bGetCharCodeOnly) {
- m_TextBuf.AppendChar(TEXT_RETURN_CHAR);
- m_TextBuf.AppendChar(TEXT_LINEFEED_CHAR);
- } else {
- if(GenerateCharInfo(TEXT_RETURN_CHAR, generateChar)) {
- m_TextBuf.AppendChar(TEXT_RETURN_CHAR);
- if (!formMatrix.IsIdentity()) {
- generateChar.m_Matrix.Copy(formMatrix);
- }
- m_charList.Add(generateChar);
- }
- if(GenerateCharInfo(TEXT_LINEFEED_CHAR, generateChar)) {
- m_TextBuf.AppendChar(TEXT_LINEFEED_CHAR);
- if (!formMatrix.IsIdentity()) {
- generateChar.m_Matrix.Copy(formMatrix);
- }
- m_charList.Add(generateChar);
- }
- }
- }
- } else if (result == 3 && !m_ParseOptions.m_bOutputHyphen) {
- int32_t nChars = pTextObj->CountChars();
- if (nChars == 1) {
- CPDF_TextObjectItem item;
- pTextObj->GetCharInfo(0, &item);
- CFX_WideString wstrItem = pTextObj->GetFont()->UnicodeFromCharCode(item.m_CharCode);
- if(wstrItem.IsEmpty()) {
- wstrItem += (FX_WCHAR)item.m_CharCode;
- }
- FX_WCHAR curChar = wstrItem.GetAt(0);
- if (0x2D == curChar || 0xAD == curChar) {
- return;
- }
- }
- while (m_TempTextBuf.GetSize() > 0 && m_TempTextBuf.GetWideString().GetAt(m_TempTextBuf.GetLength() - 1) == 0x20) {
- m_TempTextBuf.Delete(m_TempTextBuf.GetLength() - 1, 1);
- m_TempCharList.Delete(m_TempCharList.GetSize() - 1);
- }
- PAGECHAR_INFO* cha = (PAGECHAR_INFO*)m_TempCharList.GetAt(m_TempCharList.GetSize() - 1);
- m_TempTextBuf.Delete(m_TempTextBuf.GetLength() - 1, 1);
- cha->m_Unicode = 0x2;
- cha->m_Flag = FPDFTEXT_CHAR_HYPHEN;
- m_TempTextBuf.AppendChar(0xfffe);
- }
+ m_LineObj.InsertAt(i + 1, Obj);
+ }
+ break;
+ }
+ }
+ if (i < 0) {
+ m_LineObj.InsertAt(0, Obj);
+ }
+ } else {
+ m_LineObj.Add(Obj);
+ }
+}
+int32_t CPDF_TextPage::PreMarkedContent(PDFTEXT_Obj Obj) {
+ CPDF_TextObject* pTextObj = Obj.m_pTextObj;
+ CPDF_ContentMarkData* pMarkData =
+ (CPDF_ContentMarkData*)pTextObj->m_ContentMark.GetObject();
+ if (!pMarkData) {
+ return FPDFTEXT_MC_PASS;
+ }
+ int nContentMark = pMarkData->CountItems();
+ if (nContentMark < 1) {
+ return FPDFTEXT_MC_PASS;
+ }
+ CFX_WideString actText;
+ FX_BOOL bExist = FALSE;
+ CPDF_Dictionary* pDict = NULL;
+ int n = 0;
+ for (n = 0; n < nContentMark; n++) {
+ CPDF_ContentMarkItem& item = pMarkData->GetItem(n);
+ CFX_ByteString tagStr = (CFX_ByteString)item.GetName();
+ pDict = (CPDF_Dictionary*)item.GetParam();
+ CPDF_String* temp =
+ (CPDF_String*)(pDict ? pDict->GetElement(FX_BSTRC("ActualText"))
+ : NULL);
+ if (temp) {
+ bExist = TRUE;
+ actText = temp->GetUnicodeText();
+ }
+ }
+ if (!bExist) {
+ return FPDFTEXT_MC_PASS;
+ }
+ if (m_pPreTextObj) {
+ if (CPDF_ContentMarkData* pPreMarkData =
+ (CPDF_ContentMarkData*)m_pPreTextObj->m_ContentMark.GetObject()) {
+ if (pPreMarkData->CountItems() == n) {
+ CPDF_ContentMarkItem& item = pPreMarkData->GetItem(n - 1);
+ if (pDict == item.GetParam()) {
+ return FPDFTEXT_MC_DONE;
+ }
+ }
+ }
+ }
+ CPDF_Font* pFont = pTextObj->GetFont();
+ FX_STRSIZE nItems = actText.GetLength();
+ if (nItems < 1) {
+ return FPDFTEXT_MC_PASS;
+ }
+ bExist = FALSE;
+ for (FX_STRSIZE i = 0; i < nItems; i++) {
+ FX_WCHAR wChar = actText.GetAt(i);
+ if (-1 == pFont->CharCodeFromUnicode(wChar)) {
+ continue;
} else {
- m_CurlineRect = CFX_FloatRect(Obj.m_pTextObj->m_Left, Obj.m_pTextObj->m_Bottom, Obj.m_pTextObj->m_Right, Obj.m_pTextObj->m_Top);
- }
- if (FPDFTEXT_MC_DELAY == bPreMKC) {
- ProcessMarkedContent(Obj);
- m_pPreTextObj = pTextObj;
- m_perMatrix.Copy(formMatrix);
- return;
+ bExist = TRUE;
+ break;
+ }
+ }
+ if (!bExist) {
+ return FPDFTEXT_MC_PASS;
+ }
+ bExist = FALSE;
+ for (FX_STRSIZE i = 0; i < nItems; i++) {
+ FX_WCHAR wChar = actText.GetAt(i);
+ if ((wChar > 0x80 && wChar < 0xFFFD) || (wChar <= 0x80 && isprint(wChar))) {
+ bExist = TRUE;
+ break;
+ }
+ }
+ if (!bExist) {
+ return FPDFTEXT_MC_DONE;
+ }
+ return FPDFTEXT_MC_DELAY;
+}
+void CPDF_TextPage::ProcessMarkedContent(PDFTEXT_Obj Obj) {
+ CPDF_TextObject* pTextObj = Obj.m_pTextObj;
+ CPDF_ContentMarkData* pMarkData =
+ (CPDF_ContentMarkData*)pTextObj->m_ContentMark.GetObject();
+ if (!pMarkData) {
+ return;
+ }
+ int nContentMark = pMarkData->CountItems();
+ if (nContentMark < 1) {
+ return;
+ }
+ CFX_WideString actText;
+ CPDF_Dictionary* pDict = NULL;
+ int n = 0;
+ for (n = 0; n < nContentMark; n++) {
+ CPDF_ContentMarkItem& item = pMarkData->GetItem(n);
+ CFX_ByteString tagStr = (CFX_ByteString)item.GetName();
+ pDict = (CPDF_Dictionary*)item.GetParam();
+ CPDF_String* temp =
+ (CPDF_String*)(pDict ? pDict->GetElement(FX_BSTRC("ActualText"))
+ : NULL);
+ if (temp) {
+ actText = temp->GetUnicodeText();
+ }
+ }
+ FX_STRSIZE nItems = actText.GetLength();
+ if (nItems < 1) {
+ return;
+ }
+ CPDF_Font* pFont = pTextObj->GetFont();
+ CFX_AffineMatrix formMatrix = Obj.m_formMatrix;
+ CFX_AffineMatrix matrix;
+ pTextObj->GetTextMatrix(&matrix);
+ matrix.Concat(formMatrix);
+ FX_FLOAT fPosX = pTextObj->GetPosX();
+ FX_FLOAT fPosY = pTextObj->GetPosY();
+ int nCharInfoIndex = m_TextBuf.GetLength();
+ CFX_FloatRect charBox;
+ charBox.top = pTextObj->m_Top;
+ charBox.left = pTextObj->m_Left;
+ charBox.right = pTextObj->m_Right;
+ charBox.bottom = pTextObj->m_Bottom;
+ for (FX_STRSIZE k = 0; k < nItems; k++) {
+ FX_WCHAR wChar = actText.GetAt(k);
+ if (wChar <= 0x80 && !isprint(wChar)) {
+ wChar = 0x20;
+ }
+ if (wChar >= 0xFFFD) {
+ continue;
}
+ PAGECHAR_INFO charinfo;
+ charinfo.m_OriginX = fPosX;
+ charinfo.m_OriginY = fPosY;
+ charinfo.m_Index = nCharInfoIndex;
+ charinfo.m_Unicode = wChar;
+ charinfo.m_CharCode = pFont->CharCodeFromUnicode(wChar);
+ charinfo.m_Flag = FPDFTEXT_CHAR_PIECE;
+ charinfo.m_pTextObj = pTextObj;
+ charinfo.m_CharBox.top = charBox.top;
+ charinfo.m_CharBox.left = charBox.left;
+ charinfo.m_CharBox.right = charBox.right;
+ charinfo.m_CharBox.bottom = charBox.bottom;
+ charinfo.m_Matrix.Copy(matrix);
+ m_TempTextBuf.AppendChar(wChar);
+ m_TempCharList.Add(charinfo);
+ }
+}
+void CPDF_TextPage::FindPreviousTextObject(void) {
+ if (m_TempCharList.GetSize() < 1 && m_charList.GetSize() < 1) {
+ return;
+ }
+ PAGECHAR_INFO preChar;
+ if (m_TempCharList.GetSize() >= 1) {
+ preChar =
+ *(PAGECHAR_INFO*)m_TempCharList.GetAt(m_TempCharList.GetSize() - 1);
+ } else {
+ preChar = *(PAGECHAR_INFO*)m_charList.GetAt(m_charList.GetSize() - 1);
+ }
+ if (preChar.m_pTextObj) {
+ m_pPreTextObj = preChar.m_pTextObj;
+ }
+}
+void CPDF_TextPage::ProcessTextObject(PDFTEXT_Obj Obj) {
+ CPDF_TextObject* pTextObj = Obj.m_pTextObj;
+ if (FXSYS_fabs(pTextObj->m_Right - pTextObj->m_Left) < 0.01f) {
+ return;
+ }
+ CFX_AffineMatrix formMatrix = Obj.m_formMatrix;
+ CPDF_Font* pFont = pTextObj->GetFont();
+ CFX_AffineMatrix matrix;
+ pTextObj->GetTextMatrix(&matrix);
+ matrix.Concat(formMatrix);
+ int32_t bPreMKC = PreMarkedContent(Obj);
+ if (FPDFTEXT_MC_DONE == bPreMKC) {
+ m_pPreTextObj = pTextObj;
+ m_perMatrix.Copy(formMatrix);
+ return;
+ }
+ int result = 0;
+ if (m_pPreTextObj) {
+ result = ProcessInsertObject(pTextObj, formMatrix);
+ if (2 == result) {
+ m_CurlineRect =
+ CFX_FloatRect(Obj.m_pTextObj->m_Left, Obj.m_pTextObj->m_Bottom,
+ Obj.m_pTextObj->m_Right, Obj.m_pTextObj->m_Top);
+ } else {
+ m_CurlineRect.Union(
+ CFX_FloatRect(Obj.m_pTextObj->m_Left, Obj.m_pTextObj->m_Bottom,
+ Obj.m_pTextObj->m_Right, Obj.m_pTextObj->m_Top));
+ }
+ PAGECHAR_INFO generateChar;
+ if (result == 1) {
+ if (GenerateCharInfo(TEXT_BLANK_CHAR, generateChar)) {
+ if (!formMatrix.IsIdentity()) {
+ generateChar.m_Matrix.Copy(formMatrix);
+ }
+ m_TempTextBuf.AppendChar(TEXT_BLANK_CHAR);
+ m_TempCharList.Add(generateChar);
+ }
+ } else if (result == 2) {
+ CloseTempLine();
+ if (m_TextBuf.GetSize()) {
+ if (m_ParseOptions.m_bGetCharCodeOnly) {
+ m_TextBuf.AppendChar(TEXT_RETURN_CHAR);
+ m_TextBuf.AppendChar(TEXT_LINEFEED_CHAR);
+ } else {
+ if (GenerateCharInfo(TEXT_RETURN_CHAR, generateChar)) {
+ m_TextBuf.AppendChar(TEXT_RETURN_CHAR);
+ if (!formMatrix.IsIdentity()) {
+ generateChar.m_Matrix.Copy(formMatrix);
+ }
+ m_charList.Add(generateChar);
+ }
+ if (GenerateCharInfo(TEXT_LINEFEED_CHAR, generateChar)) {
+ m_TextBuf.AppendChar(TEXT_LINEFEED_CHAR);
+ if (!formMatrix.IsIdentity()) {
+ generateChar.m_Matrix.Copy(formMatrix);
+ }
+ m_charList.Add(generateChar);
+ }
+ }
+ }
+ } else if (result == 3 && !m_ParseOptions.m_bOutputHyphen) {
+ int32_t nChars = pTextObj->CountChars();
+ if (nChars == 1) {
+ CPDF_TextObjectItem item;
+ pTextObj->GetCharInfo(0, &item);
+ CFX_WideString wstrItem =
+ pTextObj->GetFont()->UnicodeFromCharCode(item.m_CharCode);
+ if (wstrItem.IsEmpty()) {
+ wstrItem += (FX_WCHAR)item.m_CharCode;
+ }
+ FX_WCHAR curChar = wstrItem.GetAt(0);
+ if (0x2D == curChar || 0xAD == curChar) {
+ return;
+ }
+ }
+ while (m_TempTextBuf.GetSize() > 0 &&
+ m_TempTextBuf.GetWideString().GetAt(m_TempTextBuf.GetLength() -
+ 1) == 0x20) {
+ m_TempTextBuf.Delete(m_TempTextBuf.GetLength() - 1, 1);
+ m_TempCharList.Delete(m_TempCharList.GetSize() - 1);
+ }
+ PAGECHAR_INFO* cha =
+ (PAGECHAR_INFO*)m_TempCharList.GetAt(m_TempCharList.GetSize() - 1);
+ m_TempTextBuf.Delete(m_TempTextBuf.GetLength() - 1, 1);
+ cha->m_Unicode = 0x2;
+ cha->m_Flag = FPDFTEXT_CHAR_HYPHEN;
+ m_TempTextBuf.AppendChar(0xfffe);
+ }
+ } else {
+ m_CurlineRect =
+ CFX_FloatRect(Obj.m_pTextObj->m_Left, Obj.m_pTextObj->m_Bottom,
+ Obj.m_pTextObj->m_Right, Obj.m_pTextObj->m_Top);
+ }
+ if (FPDFTEXT_MC_DELAY == bPreMKC) {
+ ProcessMarkedContent(Obj);
m_pPreTextObj = pTextObj;
m_perMatrix.Copy(formMatrix);
- int nItems = pTextObj->CountItems();
- FX_FLOAT baseSpace = _CalculateBaseSpace(pTextObj, matrix);
+ return;
+ }
+ m_pPreTextObj = pTextObj;
+ m_perMatrix.Copy(formMatrix);
+ int nItems = pTextObj->CountItems();
+ FX_FLOAT baseSpace = _CalculateBaseSpace(pTextObj, matrix);
- const FX_BOOL bR2L = IsRightToLeft(pTextObj, pFont, nItems);
- const FX_BOOL bIsBidiAndMirrorInverse =
- bR2L && (matrix.a * matrix.d - matrix.b * matrix.c) < 0;
- int32_t iBufStartAppend = m_TempTextBuf.GetLength();
- int32_t iCharListStartAppend = m_TempCharList.GetSize();
+ const FX_BOOL bR2L = IsRightToLeft(pTextObj, pFont, nItems);
+ const FX_BOOL bIsBidiAndMirrorInverse =
+ bR2L && (matrix.a * matrix.d - matrix.b * matrix.c) < 0;
+ int32_t iBufStartAppend = m_TempTextBuf.GetLength();
+ int32_t iCharListStartAppend = m_TempCharList.GetSize();
- FX_FLOAT spacing = 0;
- for (int i = 0; i < nItems; i++) {
- CPDF_TextObjectItem item;
- PAGECHAR_INFO charinfo;
- charinfo.m_OriginX = 0;
- charinfo.m_OriginY = 0;
- pTextObj->GetItemInfo(i, &item);
- if (item.m_CharCode == (FX_DWORD) - 1) {
- CFX_WideString str = m_TempTextBuf.GetWideString();
- if(str.IsEmpty()) {
- str = m_TextBuf.GetWideString();
- }
- if (str.IsEmpty() || str.GetAt(str.GetLength() - 1) == TEXT_BLANK_CHAR) {
- continue;
- }
- FX_FLOAT fontsize_h = pTextObj->m_TextState.GetFontSizeH();
- spacing = -fontsize_h * item.m_OriginX / 1000;
- continue;
- }
- FX_FLOAT charSpace = pTextObj->m_TextState.GetObject()->m_CharSpace;
- if (charSpace > 0.001) {
- spacing += matrix.TransformDistance(charSpace);
- } else if(charSpace < -0.001) {
- spacing -= matrix.TransformDistance(FXSYS_fabs(charSpace));
- }
- spacing -= baseSpace;
- if (spacing && i > 0) {
- int last_width = 0;
- FX_FLOAT fontsize_h = pTextObj->m_TextState.GetFontSizeH();
- FX_DWORD space_charcode = pFont->CharCodeFromUnicode(' ');
- FX_FLOAT threshold = 0;
- if (space_charcode != -1) {
- threshold = fontsize_h * pFont->GetCharWidthF(space_charcode) / 1000 ;
- }
- if (threshold > fontsize_h / 3) {
- threshold = 0;
- } else {
- threshold /= 2;
- }
- if (threshold == 0) {
- threshold = fontsize_h;
- int this_width = FXSYS_abs(GetCharWidth(item.m_CharCode, pFont));
- threshold = this_width > last_width ? (FX_FLOAT)this_width : (FX_FLOAT)last_width;
- threshold = _NormalizeThreshold(threshold);
- threshold = fontsize_h * threshold / 1000;
- }
- if (threshold && (spacing && spacing >= threshold) ) {
- charinfo.m_Unicode = TEXT_BLANK_CHAR;
- charinfo.m_Flag = FPDFTEXT_CHAR_GENERATED;
- charinfo.m_pTextObj = pTextObj;
- charinfo.m_Index = m_TextBuf.GetLength();
- m_TempTextBuf.AppendChar(TEXT_BLANK_CHAR);
- charinfo.m_CharCode = -1;
- charinfo.m_Matrix.Copy(formMatrix);
- matrix.Transform(item.m_OriginX, item.m_OriginY, charinfo.m_OriginX, charinfo.m_OriginY);
- charinfo.m_CharBox = CFX_FloatRect(charinfo.m_OriginX, charinfo.m_OriginY, charinfo.m_OriginX, charinfo.m_OriginY);
- m_TempCharList.Add(charinfo);
- }
- if (item.m_CharCode == (FX_DWORD) - 1) {
- continue;
- }
- }
- spacing = 0;
- CFX_WideString wstrItem = pFont->UnicodeFromCharCode(item.m_CharCode);
- FX_BOOL bNoUnicode = FALSE;
- FX_WCHAR wChar = wstrItem.GetAt(0);
- if ((wstrItem.IsEmpty() || wChar == 0) && item.m_CharCode) {
- if(wstrItem.IsEmpty()) {
- wstrItem += (FX_WCHAR)item.m_CharCode;
- } else {
- wstrItem.SetAt(0, (FX_WCHAR)item.m_CharCode);
- }
- bNoUnicode = TRUE;
- }
- charinfo.m_Index = -1;
- charinfo.m_CharCode = item.m_CharCode;
- if(bNoUnicode) {
- charinfo.m_Flag = FPDFTEXT_CHAR_UNUNICODE;
- } else {
- charinfo.m_Flag = FPDFTEXT_CHAR_NORMAL;
- }
+ FX_FLOAT spacing = 0;
+ for (int i = 0; i < nItems; i++) {
+ CPDF_TextObjectItem item;
+ PAGECHAR_INFO charinfo;
+ charinfo.m_OriginX = 0;
+ charinfo.m_OriginY = 0;
+ pTextObj->GetItemInfo(i, &item);
+ if (item.m_CharCode == (FX_DWORD)-1) {
+ CFX_WideString str = m_TempTextBuf.GetWideString();
+ if (str.IsEmpty()) {
+ str = m_TextBuf.GetWideString();
+ }
+ if (str.IsEmpty() || str.GetAt(str.GetLength() - 1) == TEXT_BLANK_CHAR) {
+ continue;
+ }
+ FX_FLOAT fontsize_h = pTextObj->m_TextState.GetFontSizeH();
+ spacing = -fontsize_h * item.m_OriginX / 1000;
+ continue;
+ }
+ FX_FLOAT charSpace = pTextObj->m_TextState.GetObject()->m_CharSpace;
+ if (charSpace > 0.001) {
+ spacing += matrix.TransformDistance(charSpace);
+ } else if (charSpace < -0.001) {
+ spacing -= matrix.TransformDistance(FXSYS_fabs(charSpace));
+ }
+ spacing -= baseSpace;
+ if (spacing && i > 0) {
+ int last_width = 0;
+ FX_FLOAT fontsize_h = pTextObj->m_TextState.GetFontSizeH();
+ FX_DWORD space_charcode = pFont->CharCodeFromUnicode(' ');
+ FX_FLOAT threshold = 0;
+ if (space_charcode != -1) {
+ threshold = fontsize_h * pFont->GetCharWidthF(space_charcode) / 1000;
+ }
+ if (threshold > fontsize_h / 3) {
+ threshold = 0;
+ } else {
+ threshold /= 2;
+ }
+ if (threshold == 0) {
+ threshold = fontsize_h;
+ int this_width = FXSYS_abs(GetCharWidth(item.m_CharCode, pFont));
+ threshold = this_width > last_width ? (FX_FLOAT)this_width
+ : (FX_FLOAT)last_width;
+ threshold = _NormalizeThreshold(threshold);
+ threshold = fontsize_h * threshold / 1000;
+ }
+ if (threshold && (spacing && spacing >= threshold)) {
+ charinfo.m_Unicode = TEXT_BLANK_CHAR;
+ charinfo.m_Flag = FPDFTEXT_CHAR_GENERATED;
charinfo.m_pTextObj = pTextObj;
- charinfo.m_OriginX = 0, charinfo.m_OriginY = 0;
- matrix.Transform(item.m_OriginX, item.m_OriginY, charinfo.m_OriginX, charinfo.m_OriginY);
- FX_RECT rect(0, 0, 0, 0);
- rect.Intersect(0, 0, 0, 0);
- charinfo.m_pTextObj->GetFont()->GetCharBBox(charinfo.m_CharCode, rect);
- charinfo.m_CharBox.top = rect.top * pTextObj->GetFontSize() / 1000 + item.m_OriginY;
- charinfo.m_CharBox.left = rect.left * pTextObj->GetFontSize() / 1000 + item.m_OriginX;
- charinfo.m_CharBox.right = rect.right * pTextObj->GetFontSize() / 1000 + item.m_OriginX;
- charinfo.m_CharBox.bottom = rect.bottom * pTextObj->GetFontSize() / 1000 + item.m_OriginY;
- if (fabsf(charinfo.m_CharBox.top - charinfo.m_CharBox.bottom) < 0.01f) {
- charinfo.m_CharBox.top = charinfo.m_CharBox.bottom + pTextObj->GetFontSize();
- }
- if (fabsf(charinfo.m_CharBox.right - charinfo.m_CharBox.left) < 0.01f) {
- charinfo.m_CharBox.right = charinfo.m_CharBox.left + pTextObj->GetCharWidth(charinfo.m_CharCode);
- }
- matrix.TransformRect(charinfo.m_CharBox);
- charinfo.m_Matrix.Copy(matrix);
- if (wstrItem.IsEmpty()) {
- charinfo.m_Unicode = 0;
- m_TempCharList.Add(charinfo);
+ charinfo.m_Index = m_TextBuf.GetLength();
+ m_TempTextBuf.AppendChar(TEXT_BLANK_CHAR);
+ charinfo.m_CharCode = -1;
+ charinfo.m_Matrix.Copy(formMatrix);
+ matrix.Transform(item.m_OriginX, item.m_OriginY, charinfo.m_OriginX,
+ charinfo.m_OriginY);
+ charinfo.m_CharBox =
+ CFX_FloatRect(charinfo.m_OriginX, charinfo.m_OriginY,
+ charinfo.m_OriginX, charinfo.m_OriginY);
+ m_TempCharList.Add(charinfo);
+ }
+ if (item.m_CharCode == (FX_DWORD)-1) {
+ continue;
+ }
+ }
+ spacing = 0;
+ CFX_WideString wstrItem = pFont->UnicodeFromCharCode(item.m_CharCode);
+ FX_BOOL bNoUnicode = FALSE;
+ FX_WCHAR wChar = wstrItem.GetAt(0);
+ if ((wstrItem.IsEmpty() || wChar == 0) && item.m_CharCode) {
+ if (wstrItem.IsEmpty()) {
+ wstrItem += (FX_WCHAR)item.m_CharCode;
+ } else {
+ wstrItem.SetAt(0, (FX_WCHAR)item.m_CharCode);
+ }
+ bNoUnicode = TRUE;
+ }
+ charinfo.m_Index = -1;
+ charinfo.m_CharCode = item.m_CharCode;
+ if (bNoUnicode) {
+ charinfo.m_Flag = FPDFTEXT_CHAR_UNUNICODE;
+ } else {
+ charinfo.m_Flag = FPDFTEXT_CHAR_NORMAL;
+ }
+ charinfo.m_pTextObj = pTextObj;
+ charinfo.m_OriginX = 0, charinfo.m_OriginY = 0;
+ matrix.Transform(item.m_OriginX, item.m_OriginY, charinfo.m_OriginX,
+ charinfo.m_OriginY);
+ FX_RECT rect(0, 0, 0, 0);
+ rect.Intersect(0, 0, 0, 0);
+ charinfo.m_pTextObj->GetFont()->GetCharBBox(charinfo.m_CharCode, rect);
+ charinfo.m_CharBox.top =
+ rect.top * pTextObj->GetFontSize() / 1000 + item.m_OriginY;
+ charinfo.m_CharBox.left =
+ rect.left * pTextObj->GetFontSize() / 1000 + item.m_OriginX;
+ charinfo.m_CharBox.right =
+ rect.right * pTextObj->GetFontSize() / 1000 + item.m_OriginX;
+ charinfo.m_CharBox.bottom =
+ rect.bottom * pTextObj->GetFontSize() / 1000 + item.m_OriginY;
+ if (fabsf(charinfo.m_CharBox.top - charinfo.m_CharBox.bottom) < 0.01f) {
+ charinfo.m_CharBox.top =
+ charinfo.m_CharBox.bottom + pTextObj->GetFontSize();
+ }
+ if (fabsf(charinfo.m_CharBox.right - charinfo.m_CharBox.left) < 0.01f) {
+ charinfo.m_CharBox.right =
+ charinfo.m_CharBox.left + pTextObj->GetCharWidth(charinfo.m_CharCode);
+ }
+ matrix.TransformRect(charinfo.m_CharBox);
+ charinfo.m_Matrix.Copy(matrix);
+ if (wstrItem.IsEmpty()) {
+ charinfo.m_Unicode = 0;
+ m_TempCharList.Add(charinfo);
+ m_TempTextBuf.AppendChar(0xfffe);
+ continue;
+ } else {
+ int nTotal = wstrItem.GetLength();
+ FX_BOOL bDel = FALSE;
+ const int count = std::min(m_TempCharList.GetSize(), 7);
+ FX_FLOAT threshold = charinfo.m_Matrix.TransformXDistance(
+ (FX_FLOAT)TEXT_CHARRATIO_GAPDELTA * pTextObj->GetFontSize());
+ for (int n = m_TempCharList.GetSize();
+ n > m_TempCharList.GetSize() - count; n--) {
+ PAGECHAR_INFO* charinfo1 = (PAGECHAR_INFO*)m_TempCharList.GetAt(n - 1);
+ if (charinfo1->m_CharCode == charinfo.m_CharCode &&
+ charinfo1->m_pTextObj->GetFont() ==
+ charinfo.m_pTextObj->GetFont() &&
+ FXSYS_fabs(charinfo1->m_OriginX - charinfo.m_OriginX) < threshold &&
+ FXSYS_fabs(charinfo1->m_OriginY - charinfo.m_OriginY) < threshold) {
+ bDel = TRUE;
+ break;
+ }
+ }
+ if (!bDel) {
+ for (int nIndex = 0; nIndex < nTotal; nIndex++) {
+ charinfo.m_Unicode = wstrItem.GetAt(nIndex);
+ if (charinfo.m_Unicode) {
+ charinfo.m_Index = m_TextBuf.GetLength();
+ m_TempTextBuf.AppendChar(charinfo.m_Unicode);
+ } else {
m_TempTextBuf.AppendChar(0xfffe);
- continue;
- } else {
- int nTotal = wstrItem.GetLength();
- FX_BOOL bDel = FALSE;
- const int count = std::min(m_TempCharList.GetSize(), 7);
- FX_FLOAT threshold = charinfo.m_Matrix.TransformXDistance((FX_FLOAT)TEXT_CHARRATIO_GAPDELTA * pTextObj->GetFontSize());
- for (int n = m_TempCharList.GetSize();
- n > m_TempCharList.GetSize() - count;
- n--) {
- PAGECHAR_INFO* charinfo1 = (PAGECHAR_INFO*)m_TempCharList.GetAt(n - 1);
- if(charinfo1->m_CharCode == charinfo.m_CharCode &&
- charinfo1->m_pTextObj->GetFont() == charinfo.m_pTextObj->GetFont() &&
- FXSYS_fabs(charinfo1->m_OriginX - charinfo.m_OriginX) < threshold &&
- FXSYS_fabs(charinfo1->m_OriginY - charinfo.m_OriginY) < threshold) {
- bDel = TRUE;
- break;
- }
- }
- if(!bDel) {
- for (int nIndex = 0; nIndex < nTotal; nIndex++) {
- charinfo.m_Unicode = wstrItem.GetAt(nIndex);
- if (charinfo.m_Unicode) {
- charinfo.m_Index = m_TextBuf.GetLength();
- m_TempTextBuf.AppendChar(charinfo.m_Unicode);
- } else {
- m_TempTextBuf.AppendChar(0xfffe);
- }
- m_TempCharList.Add(charinfo);
- }
- } else if(i == 0) {
- CFX_WideString str = m_TempTextBuf.GetWideString();
- if (!str.IsEmpty() && str.GetAt(str.GetLength() - 1) == TEXT_BLANK_CHAR) {
- m_TempTextBuf.Delete(m_TempTextBuf.GetLength() - 1, 1);
- m_TempCharList.Delete(m_TempCharList.GetSize() - 1);
- }
- }
+ }
+ m_TempCharList.Add(charinfo);
}
+ } else if (i == 0) {
+ CFX_WideString str = m_TempTextBuf.GetWideString();
+ if (!str.IsEmpty() &&
+ str.GetAt(str.GetLength() - 1) == TEXT_BLANK_CHAR) {
+ m_TempTextBuf.Delete(m_TempTextBuf.GetLength() - 1, 1);
+ m_TempCharList.Delete(m_TempCharList.GetSize() - 1);
+ }
+ }
}
- if (bIsBidiAndMirrorInverse) {
- SwapTempTextBuf(iCharListStartAppend, iBufStartAppend);
- }
+ }
+ if (bIsBidiAndMirrorInverse) {
+ SwapTempTextBuf(iCharListStartAppend, iBufStartAppend);
+ }
}
void CPDF_TextPage::SwapTempTextBuf(int32_t iCharListStartAppend,
- int32_t iBufStartAppend)
-{
- int32_t i, j;
- i = iCharListStartAppend;
- j = m_TempCharList.GetSize() - 1;
- for (; i < j; i++, j--) {
- std::swap(m_TempCharList[i], m_TempCharList[j]);
- std::swap(m_TempCharList[i].m_Index, m_TempCharList[j].m_Index);
- }
- FX_WCHAR * pTempBuffer = m_TempTextBuf.GetBuffer();
- i = iBufStartAppend;
- j = m_TempTextBuf.GetLength() - 1;
- for (; i < j; i++, j--) {
- std::swap(pTempBuffer[i], pTempBuffer[j]);
- }
+ int32_t iBufStartAppend) {
+ int32_t i, j;
+ i = iCharListStartAppend;
+ j = m_TempCharList.GetSize() - 1;
+ for (; i < j; i++, j--) {
+ std::swap(m_TempCharList[i], m_TempCharList[j]);
+ std::swap(m_TempCharList[i].m_Index, m_TempCharList[j].m_Index);
+ }
+ FX_WCHAR* pTempBuffer = m_TempTextBuf.GetBuffer();
+ i = iBufStartAppend;
+ j = m_TempTextBuf.GetLength() - 1;
+ for (; i < j; i++, j--) {
+ std::swap(pTempBuffer[i], pTempBuffer[j]);
+ }
}
FX_BOOL CPDF_TextPage::IsRightToLeft(const CPDF_TextObject* pTextObj,
const CPDF_Font* pFont,
- int nItems) const
-{
- nonstd::unique_ptr<IFX_BidiChar> pBidiChar(IFX_BidiChar::Create());
- int32_t nR2L = 0;
- int32_t nL2R = 0;
- int32_t start = 0, count = 0;
- CPDF_TextObjectItem item;
- for (int32_t i = 0; i < nItems; i++) {
- pTextObj->GetItemInfo(i, &item);
- if (item.m_CharCode == (FX_DWORD)-1) {
- continue;
- }
- CFX_WideString wstrItem = pFont->UnicodeFromCharCode(item.m_CharCode);
- FX_WCHAR wChar = wstrItem.GetAt(0);
- if ((wstrItem.IsEmpty() || wChar == 0) && item.m_CharCode) {
- wChar = (FX_WCHAR)item.m_CharCode;
- }
- if (!wChar) {
- continue;
- }
- if (pBidiChar->AppendChar(wChar)) {
- int32_t ret = pBidiChar->GetBidiInfo(start, count);
- if (ret == 2) {
- nR2L++;
- }
- else if (ret == 1) {
- nL2R++;
- }
- }
- }
- if (pBidiChar->EndChar()) {
- int32_t ret = pBidiChar->GetBidiInfo(start, count);
- if (ret == 2) {
- nR2L++;
- }
- else if (ret == 1) {
- nL2R++;
- }
- }
- return (nR2L > 0 && nR2L >= nL2R);
-}
-int32_t CPDF_TextPage::GetTextObjectWritingMode(const CPDF_TextObject* pTextObj)
-{
- int32_t nChars = pTextObj->CountChars();
- if (nChars == 1) {
- return m_TextlineDir;
- }
- CPDF_TextObjectItem first, last;
- pTextObj->GetCharInfo(0, &first);
- pTextObj->GetCharInfo(nChars - 1, &last);
- CFX_Matrix textMatrix;
- pTextObj->GetTextMatrix(&textMatrix);
- textMatrix.TransformPoint(first.m_OriginX, first.m_OriginY);
- textMatrix.TransformPoint(last.m_OriginX, last.m_OriginY);
- FX_FLOAT dX = FXSYS_fabs(last.m_OriginX - first.m_OriginX);
- FX_FLOAT dY = FXSYS_fabs(last.m_OriginY - first.m_OriginY);
- if (dX <= 0.0001f && dY <= 0.0001f) {
- return -1;
- }
- CFX_VectorF v;
- v.Set(dX, dY);
- v.Normalize();
- if (v.y <= 0.0872f) {
- return v.x <= 0.0872f ? m_TextlineDir : 0;
- }
- if (v.x <= 0.0872f) {
- return 1;
- }
+ int nItems) const {
+ nonstd::unique_ptr<IFX_BidiChar> pBidiChar(IFX_BidiChar::Create());
+ int32_t nR2L = 0;
+ int32_t nL2R = 0;
+ int32_t start = 0, count = 0;
+ CPDF_TextObjectItem item;
+ for (int32_t i = 0; i < nItems; i++) {
+ pTextObj->GetItemInfo(i, &item);
+ if (item.m_CharCode == (FX_DWORD)-1) {
+ continue;
+ }
+ CFX_WideString wstrItem = pFont->UnicodeFromCharCode(item.m_CharCode);
+ FX_WCHAR wChar = wstrItem.GetAt(0);
+ if ((wstrItem.IsEmpty() || wChar == 0) && item.m_CharCode) {
+ wChar = (FX_WCHAR)item.m_CharCode;
+ }
+ if (!wChar) {
+ continue;
+ }
+ if (pBidiChar->AppendChar(wChar)) {
+ int32_t ret = pBidiChar->GetBidiInfo(start, count);
+ if (ret == 2) {
+ nR2L++;
+ } else if (ret == 1) {
+ nL2R++;
+ }
+ }
+ }
+ if (pBidiChar->EndChar()) {
+ int32_t ret = pBidiChar->GetBidiInfo(start, count);
+ if (ret == 2) {
+ nR2L++;
+ } else if (ret == 1) {
+ nL2R++;
+ }
+ }
+ return (nR2L > 0 && nR2L >= nL2R);
+}
+int32_t CPDF_TextPage::GetTextObjectWritingMode(
+ const CPDF_TextObject* pTextObj) {
+ int32_t nChars = pTextObj->CountChars();
+ if (nChars == 1) {
return m_TextlineDir;
-}
-FX_BOOL CPDF_TextPage::IsHyphen(FX_WCHAR curChar)
-{
- CFX_WideString strCurText = m_TempTextBuf.GetWideString();
- if(strCurText.GetLength() == 0) {
- strCurText = m_TextBuf.GetWideString();
- }
- FX_STRSIZE nCount = strCurText.GetLength();
- int nIndex = nCount - 1;
- FX_WCHAR wcTmp = strCurText.GetAt(nIndex);
- while(wcTmp == 0x20 && nIndex <= nCount - 1 && nIndex >= 0) {
- wcTmp = strCurText.GetAt(--nIndex);
- }
- if (0x2D == wcTmp || 0xAD == wcTmp) {
- if (--nIndex > 0) {
- FX_WCHAR preChar = strCurText.GetAt((nIndex));
- if (((preChar >= L'A' && preChar <= L'Z') || (preChar >= L'a' && preChar <= L'z'))
- && ((curChar >= L'A' && curChar <= L'Z') || (curChar >= L'a' && curChar <= L'z'))) {
- return TRUE;
- }
- }
- int size = m_TempCharList.GetSize();
- PAGECHAR_INFO preChar;
- if (size) {
- preChar = (PAGECHAR_INFO)m_TempCharList[size - 1];
- } else {
- size = m_charList.GetSize();
- if(size == 0) {
- return FALSE;
- }
- preChar = (PAGECHAR_INFO)m_charList[size - 1];
- }
- if (FPDFTEXT_CHAR_PIECE == preChar.m_Flag)
- if (0xAD == preChar.m_Unicode || 0x2D == preChar.m_Unicode) {
- return TRUE;
- }
- }
- return FALSE;
-}
-int CPDF_TextPage::ProcessInsertObject(const CPDF_TextObject* pObj, const CFX_AffineMatrix& formMatrix)
-{
- FindPreviousTextObject();
- FX_BOOL bNewline = FALSE;
- int WritingMode = GetTextObjectWritingMode(pObj);
- if(WritingMode == -1) {
- WritingMode = GetTextObjectWritingMode(m_pPreTextObj);
- }
- CFX_FloatRect this_rect(pObj->m_Left, pObj->m_Bottom, pObj->m_Right, pObj->m_Top);
- CFX_FloatRect prev_rect(m_pPreTextObj->m_Left, m_pPreTextObj->m_Bottom, m_pPreTextObj->m_Right, m_pPreTextObj->m_Top);
- CPDF_TextObjectItem PrevItem, item;
- int nItem = m_pPreTextObj->CountItems();
- m_pPreTextObj->GetItemInfo(nItem - 1, &PrevItem);
- pObj->GetItemInfo(0, &item);
- CFX_WideString wstrItem = pObj->GetFont()->UnicodeFromCharCode(item.m_CharCode);
- if(wstrItem.IsEmpty()) {
- wstrItem += (FX_WCHAR)item.m_CharCode;
- }
- FX_WCHAR curChar = wstrItem.GetAt(0);
- if(WritingMode == 0) {
- if(this_rect.Height() > 4.5 && prev_rect.Height() > 4.5) {
- FX_FLOAT top = this_rect.top < prev_rect.top ? this_rect.top : prev_rect.top;
- FX_FLOAT bottom = this_rect.bottom > prev_rect.bottom ? this_rect.bottom : prev_rect.bottom;
- if(bottom >= top) {
- if(IsHyphen(curChar)) {
- return 3;
- }
- return 2;
- }
- }
- } else if (WritingMode == 1) {
- if(this_rect.Width() > pObj->GetFontSize() * 0.1f && prev_rect.Width() > m_pPreTextObj->GetFontSize() * 0.1f) {
- FX_FLOAT left = this_rect.left > m_CurlineRect.left ? this_rect.left : m_CurlineRect.left;
- FX_FLOAT right = this_rect.right < m_CurlineRect.right ? this_rect.right : m_CurlineRect.right;
- if(right <= left) {
- if(IsHyphen(curChar)) {
- return 3;
- }
- return 2;
- }
- }
- }
- FX_FLOAT last_pos = PrevItem.m_OriginX;
- int nLastWidth = GetCharWidth(PrevItem.m_CharCode, m_pPreTextObj->GetFont());
- FX_FLOAT last_width = nLastWidth * m_pPreTextObj->GetFontSize() / 1000;
- last_width = FXSYS_fabs(last_width);
- int nThisWidth = GetCharWidth(item.m_CharCode, pObj->GetFont());
- FX_FLOAT this_width = nThisWidth * pObj->GetFontSize() / 1000;
- this_width = FXSYS_fabs(this_width);
- FX_FLOAT threshold = last_width > this_width ? last_width / 4 : this_width / 4;
- CFX_AffineMatrix prev_matrix, prev_reverse;
- m_pPreTextObj->GetTextMatrix(&prev_matrix);
- prev_matrix.Concat(m_perMatrix);
- prev_reverse.SetReverse(prev_matrix);
- FX_FLOAT x = pObj->GetPosX();
- FX_FLOAT y = pObj->GetPosY();
- formMatrix.Transform(x, y);
- prev_reverse.Transform(x, y);
- if(last_width < this_width) {
- threshold = prev_reverse.TransformDistance(threshold);
- }
- CFX_FloatRect rect1(m_pPreTextObj->m_Left, pObj->m_Bottom, m_pPreTextObj->m_Right, pObj->m_Top);
- CFX_FloatRect rect2(m_pPreTextObj->m_Left, m_pPreTextObj->m_Bottom, m_pPreTextObj->m_Right, m_pPreTextObj->m_Top);
- CFX_FloatRect rect3 = rect1;
- rect1.Intersect(rect2);
- if (WritingMode == 0) {
- if ((rect1.IsEmpty() && rect2.Height() > 5 && rect3.Height() > 5)
- || ((y > threshold * 2 || y < threshold * -3) && (FXSYS_fabs(y) < 1 ? FXSYS_fabs(x) < FXSYS_fabs(y) : TRUE))) {
- bNewline = TRUE;
- if(nItem > 1 ) {
- CPDF_TextObjectItem tempItem;
- m_pPreTextObj->GetItemInfo(0, &tempItem);
- CFX_AffineMatrix m;
- m_pPreTextObj->GetTextMatrix(&m);
- if(PrevItem.m_OriginX > tempItem.m_OriginX &&
- m_DisplayMatrix.a > 0.9 && m_DisplayMatrix.b < 0.1 &&
- m_DisplayMatrix.c < 0.1 && m_DisplayMatrix.d < -0.9
- && m.b < 0.1 && m.c < 0.1 ) {
- CFX_FloatRect re(0, m_pPreTextObj->m_Bottom, 1000, m_pPreTextObj->m_Top);
- if(re.Contains(pObj->GetPosX(), pObj->GetPosY())) {
- bNewline = FALSE;
- } else {
- CFX_FloatRect re(0, pObj->m_Bottom, 1000, pObj->m_Top);
- if(re.Contains(m_pPreTextObj->GetPosX(), m_pPreTextObj->GetPosY())) {
- bNewline = FALSE;
- }
- }
- }
- }
- }
- }
- if(bNewline) {
- if(IsHyphen(curChar)) {
- return 3;
- }
- return 2;
+ }
+ CPDF_TextObjectItem first, last;
+ pTextObj->GetCharInfo(0, &first);
+ pTextObj->GetCharInfo(nChars - 1, &last);
+ CFX_Matrix textMatrix;
+ pTextObj->GetTextMatrix(&textMatrix);
+ textMatrix.TransformPoint(first.m_OriginX, first.m_OriginY);
+ textMatrix.TransformPoint(last.m_OriginX, last.m_OriginY);
+ FX_FLOAT dX = FXSYS_fabs(last.m_OriginX - first.m_OriginX);
+ FX_FLOAT dY = FXSYS_fabs(last.m_OriginY - first.m_OriginY);
+ if (dX <= 0.0001f && dY <= 0.0001f) {
+ return -1;
+ }
+ CFX_VectorF v;
+ v.Set(dX, dY);
+ v.Normalize();
+ if (v.y <= 0.0872f) {
+ return v.x <= 0.0872f ? m_TextlineDir : 0;
+ }
+ if (v.x <= 0.0872f) {
+ return 1;
+ }
+ return m_TextlineDir;
+}
+FX_BOOL CPDF_TextPage::IsHyphen(FX_WCHAR curChar) {
+ CFX_WideString strCurText = m_TempTextBuf.GetWideString();
+ if (strCurText.GetLength() == 0) {
+ strCurText = m_TextBuf.GetWideString();
+ }
+ FX_STRSIZE nCount = strCurText.GetLength();
+ int nIndex = nCount - 1;
+ FX_WCHAR wcTmp = strCurText.GetAt(nIndex);
+ while (wcTmp == 0x20 && nIndex <= nCount - 1 && nIndex >= 0) {
+ wcTmp = strCurText.GetAt(--nIndex);
+ }
+ if (0x2D == wcTmp || 0xAD == wcTmp) {
+ if (--nIndex > 0) {
+ FX_WCHAR preChar = strCurText.GetAt((nIndex));
+ if (((preChar >= L'A' && preChar <= L'Z') ||
+ (preChar >= L'a' && preChar <= L'z')) &&
+ ((curChar >= L'A' && curChar <= L'Z') ||
+ (curChar >= L'a' && curChar <= L'z'))) {
+ return TRUE;
+ }
}
- int32_t nChars = pObj->CountChars();
- if (nChars == 1 && ( 0x2D == curChar || 0xAD == curChar))
- if (IsHyphen(curChar)) {
- return 3;
- }
- CFX_WideString PrevStr = m_pPreTextObj->GetFont()->UnicodeFromCharCode(PrevItem.m_CharCode);
- FX_WCHAR preChar = PrevStr.GetAt(PrevStr.GetLength() - 1);
- CFX_AffineMatrix matrix;
- pObj->GetTextMatrix(&matrix);
- matrix.Concat(formMatrix);
- threshold = (FX_FLOAT)(nLastWidth > nThisWidth ? nLastWidth : nThisWidth);
- threshold = threshold > 400 ? (threshold < 700 ? threshold / 4 : (threshold > 800 ? threshold / 6 : threshold / 5)) : (threshold / 2);
- if(nLastWidth >= nThisWidth) {
- threshold *= FXSYS_fabs(m_pPreTextObj->GetFontSize());
+ int size = m_TempCharList.GetSize();
+ PAGECHAR_INFO preChar;
+ if (size) {
+ preChar = (PAGECHAR_INFO)m_TempCharList[size - 1];
} else {
- threshold *= FXSYS_fabs(pObj->GetFontSize());
- threshold = matrix.TransformDistance(threshold);
- threshold = prev_reverse.TransformDistance(threshold);
- }
- threshold /= 1000;
- if((threshold < 1.4881 && threshold > 1.4879)
- || (threshold < 1.39001 && threshold > 1.38999)) {
- threshold *= 1.5;
- }
- if (FXSYS_fabs(last_pos + last_width - x) > threshold && curChar != L' ' && preChar != L' ')
- if (curChar != L' ' && preChar != L' ') {
- if((x - last_pos - last_width) > threshold || (last_pos - x - last_width) > threshold) {
- return 1;
- }
- if(x < 0 && (last_pos - x - last_width) > threshold) {
- return 1;
- }
- if((x - last_pos - last_width) > this_width || (x - last_pos - this_width) > last_width ) {
- return 1;
- }
- }
- return 0;
-}
-FX_BOOL CPDF_TextPage::IsSameTextObject(CPDF_TextObject* pTextObj1, CPDF_TextObject* pTextObj2)
-{
- if (!pTextObj1 || !pTextObj2) {
+ size = m_charList.GetSize();
+ if (size == 0) {
return FALSE;
+ }
+ preChar = (PAGECHAR_INFO)m_charList[size - 1];
}
- CFX_FloatRect rcPreObj(pTextObj2->m_Left, pTextObj2->m_Bottom, pTextObj2->m_Right, pTextObj2->m_Top);
- CFX_FloatRect rcCurObj(pTextObj1->m_Left, pTextObj1->m_Bottom, pTextObj1->m_Right, pTextObj1->m_Top);
- if (rcPreObj.IsEmpty() && rcCurObj.IsEmpty() && !m_ParseOptions.m_bGetCharCodeOnly) {
- FX_FLOAT dbXdif = FXSYS_fabs(rcPreObj.left - rcCurObj.left);
- int nCount = m_charList.GetSize();
- if (nCount >= 2) {
- PAGECHAR_INFO perCharTemp = (PAGECHAR_INFO)m_charList[nCount - 2];
- FX_FLOAT dbSpace = perCharTemp.m_CharBox.Width();
- if (dbXdif > dbSpace) {
- return FALSE;
- }
- }
- }
- if (!rcPreObj.IsEmpty() || !rcCurObj.IsEmpty()) {
- rcPreObj.Intersect(rcCurObj);
- if (rcPreObj.IsEmpty()) {
- return FALSE;
- }
- if (FXSYS_fabs(rcPreObj.Width() - rcCurObj.Width()) > rcCurObj.Width() / 2) {
- return FALSE;
- }
- if (pTextObj2->GetFontSize() != pTextObj1->GetFontSize()) {
- return FALSE;
+ if (FPDFTEXT_CHAR_PIECE == preChar.m_Flag)
+ if (0xAD == preChar.m_Unicode || 0x2D == preChar.m_Unicode) {
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+int CPDF_TextPage::ProcessInsertObject(const CPDF_TextObject* pObj,
+ const CFX_AffineMatrix& formMatrix) {
+ FindPreviousTextObject();
+ FX_BOOL bNewline = FALSE;
+ int WritingMode = GetTextObjectWritingMode(pObj);
+ if (WritingMode == -1) {
+ WritingMode = GetTextObjectWritingMode(m_pPreTextObj);
+ }
+ CFX_FloatRect this_rect(pObj->m_Left, pObj->m_Bottom, pObj->m_Right,
+ pObj->m_Top);
+ CFX_FloatRect prev_rect(m_pPreTextObj->m_Left, m_pPreTextObj->m_Bottom,
+ m_pPreTextObj->m_Right, m_pPreTextObj->m_Top);
+ CPDF_TextObjectItem PrevItem, item;
+ int nItem = m_pPreTextObj->CountItems();
+ m_pPreTextObj->GetItemInfo(nItem - 1, &PrevItem);
+ pObj->GetItemInfo(0, &item);
+ CFX_WideString wstrItem =
+ pObj->GetFont()->UnicodeFromCharCode(item.m_CharCode);
+ if (wstrItem.IsEmpty()) {
+ wstrItem += (FX_WCHAR)item.m_CharCode;
+ }
+ FX_WCHAR curChar = wstrItem.GetAt(0);
+ if (WritingMode == 0) {
+ if (this_rect.Height() > 4.5 && prev_rect.Height() > 4.5) {
+ FX_FLOAT top =
+ this_rect.top < prev_rect.top ? this_rect.top : prev_rect.top;
+ FX_FLOAT bottom = this_rect.bottom > prev_rect.bottom ? this_rect.bottom
+ : prev_rect.bottom;
+ if (bottom >= top) {
+ if (IsHyphen(curChar)) {
+ return 3;
}
- }
- int nPreCount = pTextObj2->CountItems();
- int nCurCount = pTextObj1->CountItems();
- if (nPreCount != nCurCount) {
- return FALSE;
- }
- CPDF_TextObjectItem itemPer, itemCur;
- for (int i = 0; i < nPreCount; i++) {
- pTextObj2->GetItemInfo(i, &itemPer);
- pTextObj1->GetItemInfo(i, &itemCur);
- if (itemCur.m_CharCode != itemPer.m_CharCode) {
- return FALSE;
+ return 2;
+ }
+ }
+ } else if (WritingMode == 1) {
+ if (this_rect.Width() > pObj->GetFontSize() * 0.1f &&
+ prev_rect.Width() > m_pPreTextObj->GetFontSize() * 0.1f) {
+ FX_FLOAT left = this_rect.left > m_CurlineRect.left ? this_rect.left
+ : m_CurlineRect.left;
+ FX_FLOAT right = this_rect.right < m_CurlineRect.right
+ ? this_rect.right
+ : m_CurlineRect.right;
+ if (right <= left) {
+ if (IsHyphen(curChar)) {
+ return 3;
}
+ return 2;
+ }
+ }
+ }
+ FX_FLOAT last_pos = PrevItem.m_OriginX;
+ int nLastWidth = GetCharWidth(PrevItem.m_CharCode, m_pPreTextObj->GetFont());
+ FX_FLOAT last_width = nLastWidth * m_pPreTextObj->GetFontSize() / 1000;
+ last_width = FXSYS_fabs(last_width);
+ int nThisWidth = GetCharWidth(item.m_CharCode, pObj->GetFont());
+ FX_FLOAT this_width = nThisWidth * pObj->GetFontSize() / 1000;
+ this_width = FXSYS_fabs(this_width);
+ FX_FLOAT threshold =
+ last_width > this_width ? last_width / 4 : this_width / 4;
+ CFX_AffineMatrix prev_matrix, prev_reverse;
+ m_pPreTextObj->GetTextMatrix(&prev_matrix);
+ prev_matrix.Concat(m_perMatrix);
+ prev_reverse.SetReverse(prev_matrix);
+ FX_FLOAT x = pObj->GetPosX();
+ FX_FLOAT y = pObj->GetPosY();
+ formMatrix.Transform(x, y);
+ prev_reverse.Transform(x, y);
+ if (last_width < this_width) {
+ threshold = prev_reverse.TransformDistance(threshold);
+ }
+ CFX_FloatRect rect1(m_pPreTextObj->m_Left, pObj->m_Bottom,
+ m_pPreTextObj->m_Right, pObj->m_Top);
+ CFX_FloatRect rect2(m_pPreTextObj->m_Left, m_pPreTextObj->m_Bottom,
+ m_pPreTextObj->m_Right, m_pPreTextObj->m_Top);
+ CFX_FloatRect rect3 = rect1;
+ rect1.Intersect(rect2);
+ if (WritingMode == 0) {
+ if ((rect1.IsEmpty() && rect2.Height() > 5 && rect3.Height() > 5) ||
+ ((y > threshold * 2 || y < threshold * -3) &&
+ (FXSYS_fabs(y) < 1 ? FXSYS_fabs(x) < FXSYS_fabs(y) : TRUE))) {
+ bNewline = TRUE;
+ if (nItem > 1) {
+ CPDF_TextObjectItem tempItem;
+ m_pPreTextObj->GetItemInfo(0, &tempItem);
+ CFX_AffineMatrix m;
+ m_pPreTextObj->GetTextMatrix(&m);
+ if (PrevItem.m_OriginX > tempItem.m_OriginX &&
+ m_DisplayMatrix.a > 0.9 && m_DisplayMatrix.b < 0.1 &&
+ m_DisplayMatrix.c < 0.1 && m_DisplayMatrix.d < -0.9 && m.b < 0.1 &&
+ m.c < 0.1) {
+ CFX_FloatRect re(0, m_pPreTextObj->m_Bottom, 1000,
+ m_pPreTextObj->m_Top);
+ if (re.Contains(pObj->GetPosX(), pObj->GetPosY())) {
+ bNewline = FALSE;
+ } else {
+ CFX_FloatRect re(0, pObj->m_Bottom, 1000, pObj->m_Top);
+ if (re.Contains(m_pPreTextObj->GetPosX(),
+ m_pPreTextObj->GetPosY())) {
+ bNewline = FALSE;
+ }
+ }
+ }
+ }
+ }
+ }
+ if (bNewline) {
+ if (IsHyphen(curChar)) {
+ return 3;
+ }
+ return 2;
+ }
+ int32_t nChars = pObj->CountChars();
+ if (nChars == 1 && (0x2D == curChar || 0xAD == curChar))
+ if (IsHyphen(curChar)) {
+ return 3;
+ }
+ CFX_WideString PrevStr =
+ m_pPreTextObj->GetFont()->UnicodeFromCharCode(PrevItem.m_CharCode);
+ FX_WCHAR preChar = PrevStr.GetAt(PrevStr.GetLength() - 1);
+ CFX_AffineMatrix matrix;
+ pObj->GetTextMatrix(&matrix);
+ matrix.Concat(formMatrix);
+ threshold = (FX_FLOAT)(nLastWidth > nThisWidth ? nLastWidth : nThisWidth);
+ threshold = threshold > 400
+ ? (threshold < 700
+ ? threshold / 4
+ : (threshold > 800 ? threshold / 6 : threshold / 5))
+ : (threshold / 2);
+ if (nLastWidth >= nThisWidth) {
+ threshold *= FXSYS_fabs(m_pPreTextObj->GetFontSize());
+ } else {
+ threshold *= FXSYS_fabs(pObj->GetFontSize());
+ threshold = matrix.TransformDistance(threshold);
+ threshold = prev_reverse.TransformDistance(threshold);
+ }
+ threshold /= 1000;
+ if ((threshold < 1.4881 && threshold > 1.4879) ||
+ (threshold < 1.39001 && threshold > 1.38999)) {
+ threshold *= 1.5;
+ }
+ if (FXSYS_fabs(last_pos + last_width - x) > threshold && curChar != L' ' &&
+ preChar != L' ')
+ if (curChar != L' ' && preChar != L' ') {
+ if ((x - last_pos - last_width) > threshold ||
+ (last_pos - x - last_width) > threshold) {
+ return 1;
+ }
+ if (x < 0 && (last_pos - x - last_width) > threshold) {
+ return 1;
+ }
+ if ((x - last_pos - last_width) > this_width ||
+ (x - last_pos - this_width) > last_width) {
+ return 1;
+ }
}
- if(FXSYS_fabs(pTextObj1->GetPosX() - pTextObj2->GetPosX()) > GetCharWidth(itemPer.m_CharCode, pTextObj2->GetFont())*pTextObj2->GetFontSize() / 1000 * 0.9 ||
- FXSYS_fabs(pTextObj1->GetPosY() - pTextObj2->GetPosY()) >
- FX_MAX(FX_MAX(rcPreObj.Height() , rcPreObj.Width()), pTextObj2->GetFontSize()) / 8) {
- return FALSE;
- }
- return TRUE;
+ return 0;
}
-FX_BOOL CPDF_TextPage::IsSameAsPreTextObject(CPDF_TextObject* pTextObj, FX_POSITION ObjPos)
-{
- if (!pTextObj) {
+FX_BOOL CPDF_TextPage::IsSameTextObject(CPDF_TextObject* pTextObj1,
+ CPDF_TextObject* pTextObj2) {
+ if (!pTextObj1 || !pTextObj2) {
+ return FALSE;
+ }
+ CFX_FloatRect rcPreObj(pTextObj2->m_Left, pTextObj2->m_Bottom,
+ pTextObj2->m_Right, pTextObj2->m_Top);
+ CFX_FloatRect rcCurObj(pTextObj1->m_Left, pTextObj1->m_Bottom,
+ pTextObj1->m_Right, pTextObj1->m_Top);
+ if (rcPreObj.IsEmpty() && rcCurObj.IsEmpty() &&
+ !m_ParseOptions.m_bGetCharCodeOnly) {
+ FX_FLOAT dbXdif = FXSYS_fabs(rcPreObj.left - rcCurObj.left);
+ int nCount = m_charList.GetSize();
+ if (nCount >= 2) {
+ PAGECHAR_INFO perCharTemp = (PAGECHAR_INFO)m_charList[nCount - 2];
+ FX_FLOAT dbSpace = perCharTemp.m_CharBox.Width();
+ if (dbXdif > dbSpace) {
return FALSE;
+ }
}
- int i = 0;
- if (!ObjPos) {
- ObjPos = m_pPage->GetLastObjectPosition();
+ }
+ if (!rcPreObj.IsEmpty() || !rcCurObj.IsEmpty()) {
+ rcPreObj.Intersect(rcCurObj);
+ if (rcPreObj.IsEmpty()) {
+ return FALSE;
}
- CPDF_PageObject* pObj = m_pPage->GetPrevObject(ObjPos);
- while (i < 5 && ObjPos) {
- pObj = m_pPage->GetPrevObject(ObjPos);
- if(pObj == pTextObj) {
- continue;
- }
- if(pObj->m_Type != PDFPAGE_TEXT) {
- continue;
- }
- if(IsSameTextObject((CPDF_TextObject*)pObj, pTextObj)) {
- return TRUE;
- }
- i++;
+ if (FXSYS_fabs(rcPreObj.Width() - rcCurObj.Width()) >
+ rcCurObj.Width() / 2) {
+ return FALSE;
}
- return FALSE;
-}
-FX_BOOL CPDF_TextPage::GenerateCharInfo(FX_WCHAR unicode, PAGECHAR_INFO& info)
-{
- int size = m_TempCharList.GetSize();
- PAGECHAR_INFO preChar;
- if (size) {
- preChar = (PAGECHAR_INFO)m_TempCharList[size - 1];
- } else {
- size = m_charList.GetSize();
- if(size == 0) {
- return FALSE;
- }
- preChar = (PAGECHAR_INFO)m_charList[size - 1];
- }
- info.m_Index = m_TextBuf.GetLength();
- info.m_Unicode = unicode;
- info.m_pTextObj = NULL;
- info.m_CharCode = -1;
- info.m_Flag = FPDFTEXT_CHAR_GENERATED;
- int preWidth = 0;
- if (preChar.m_pTextObj && preChar.m_CharCode != (FX_DWORD) - 1) {
- preWidth = GetCharWidth(preChar.m_CharCode, preChar.m_pTextObj->GetFont());
- }
- FX_FLOAT fs = 0;
- if(preChar.m_pTextObj) {
- fs = preChar.m_pTextObj->GetFontSize();
- } else {
- fs = preChar.m_CharBox.Height();
+ if (pTextObj2->GetFontSize() != pTextObj1->GetFontSize()) {
+ return FALSE;
}
- if(!fs) {
- fs = 1;
- }
- info.m_OriginX = preChar.m_OriginX + preWidth * (fs) / 1000;
- info.m_OriginY = preChar.m_OriginY;
- info.m_CharBox = CFX_FloatRect(info.m_OriginX, info.m_OriginY, info.m_OriginX, info.m_OriginY);
- return TRUE;
-}
-FX_BOOL CPDF_TextPage::IsRectIntersect(const CFX_FloatRect& rect1, const CFX_FloatRect& rect2)
-{
- CFX_FloatRect rect = rect1;
- rect.Intersect(rect2);
- return !rect.IsEmpty();
+ }
+ int nPreCount = pTextObj2->CountItems();
+ int nCurCount = pTextObj1->CountItems();
+ if (nPreCount != nCurCount) {
+ return FALSE;
+ }
+ CPDF_TextObjectItem itemPer, itemCur;
+ for (int i = 0; i < nPreCount; i++) {
+ pTextObj2->GetItemInfo(i, &itemPer);
+ pTextObj1->GetItemInfo(i, &itemCur);
+ if (itemCur.m_CharCode != itemPer.m_CharCode) {
+ return FALSE;
+ }
+ }
+ if (FXSYS_fabs(pTextObj1->GetPosX() - pTextObj2->GetPosX()) >
+ GetCharWidth(itemPer.m_CharCode, pTextObj2->GetFont()) *
+ pTextObj2->GetFontSize() / 1000 * 0.9 ||
+ FXSYS_fabs(pTextObj1->GetPosY() - pTextObj2->GetPosY()) >
+ FX_MAX(FX_MAX(rcPreObj.Height(), rcPreObj.Width()),
+ pTextObj2->GetFontSize()) /
+ 8) {
+ return FALSE;
+ }
+ return TRUE;
}
-FX_BOOL CPDF_TextPage::IsLetter(FX_WCHAR unicode)
-{
- if (unicode < L'A') {
- return FALSE;
- }
- if (unicode > L'Z' && unicode < L'a') {
- return FALSE;
- }
- if (unicode > L'z') {
- return FALSE;
- }
- return TRUE;
+FX_BOOL CPDF_TextPage::IsSameAsPreTextObject(CPDF_TextObject* pTextObj,
+ FX_POSITION ObjPos) {
+ if (!pTextObj) {
+ return FALSE;
+ }
+ int i = 0;
+ if (!ObjPos) {
+ ObjPos = m_pPage->GetLastObjectPosition();
+ }
+ CPDF_PageObject* pObj = m_pPage->GetPrevObject(ObjPos);
+ while (i < 5 && ObjPos) {
+ pObj = m_pPage->GetPrevObject(ObjPos);
+ if (pObj == pTextObj) {
+ continue;
+ }
+ if (pObj->m_Type != PDFPAGE_TEXT) {
+ continue;
+ }
+ if (IsSameTextObject((CPDF_TextObject*)pObj, pTextObj)) {
+ return TRUE;
+ }
+ i++;
+ }
+ return FALSE;
+}
+FX_BOOL CPDF_TextPage::GenerateCharInfo(FX_WCHAR unicode, PAGECHAR_INFO& info) {
+ int size = m_TempCharList.GetSize();
+ PAGECHAR_INFO preChar;
+ if (size) {
+ preChar = (PAGECHAR_INFO)m_TempCharList[size - 1];
+ } else {
+ size = m_charList.GetSize();
+ if (size == 0) {
+ return FALSE;
+ }
+ preChar = (PAGECHAR_INFO)m_charList[size - 1];
+ }
+ info.m_Index = m_TextBuf.GetLength();
+ info.m_Unicode = unicode;
+ info.m_pTextObj = NULL;
+ info.m_CharCode = -1;
+ info.m_Flag = FPDFTEXT_CHAR_GENERATED;
+ int preWidth = 0;
+ if (preChar.m_pTextObj && preChar.m_CharCode != (FX_DWORD)-1) {
+ preWidth = GetCharWidth(preChar.m_CharCode, preChar.m_pTextObj->GetFont());
+ }
+ FX_FLOAT fs = 0;
+ if (preChar.m_pTextObj) {
+ fs = preChar.m_pTextObj->GetFontSize();
+ } else {
+ fs = preChar.m_CharBox.Height();
+ }
+ if (!fs) {
+ fs = 1;
+ }
+ info.m_OriginX = preChar.m_OriginX + preWidth * (fs) / 1000;
+ info.m_OriginY = preChar.m_OriginY;
+ info.m_CharBox = CFX_FloatRect(info.m_OriginX, info.m_OriginY, info.m_OriginX,
+ info.m_OriginY);
+ return TRUE;
+}
+FX_BOOL CPDF_TextPage::IsRectIntersect(const CFX_FloatRect& rect1,
+ const CFX_FloatRect& rect2) {
+ CFX_FloatRect rect = rect1;
+ rect.Intersect(rect2);
+ return !rect.IsEmpty();
+}
+FX_BOOL CPDF_TextPage::IsLetter(FX_WCHAR unicode) {
+ if (unicode < L'A') {
+ return FALSE;
+ }
+ if (unicode > L'Z' && unicode < L'a') {
+ return FALSE;
+ }
+ if (unicode > L'z') {
+ return FALSE;
+ }
+ return TRUE;
}
CPDF_TextPageFind::CPDF_TextPageFind(const IPDF_TextPage* pTextPage)
: m_pTextPage(pTextPage),
@@ -2091,609 +2171,615 @@ CPDF_TextPageFind::CPDF_TextPageFind(const IPDF_TextPage* pTextPage)
m_bMatchWholeWord(FALSE),
m_resStart(0),
m_resEnd(-1),
- m_IsFind(FALSE)
-{
- m_strText = m_pTextPage->GetPageText();
- int nCount = pTextPage->CountChars();
- if(nCount) {
- m_CharIndex.Add(0);
- }
- for(int i = 0; i < nCount; i++) {
- FPDF_CHAR_INFO info;
- pTextPage->GetCharInfo(i, info);
- int indexSize = m_CharIndex.GetSize();
- if(info.m_Flag == CHAR_NORMAL || info.m_Flag == CHAR_GENERATED) {
- if(indexSize % 2) {
- m_CharIndex.Add(1);
- } else {
- if(indexSize <= 0) {
- continue;
- }
- m_CharIndex.SetAt(indexSize - 1, m_CharIndex.GetAt(indexSize - 1) + 1);
- }
- } else {
- if(indexSize % 2) {
- if(indexSize <= 0) {
- continue;
- }
- m_CharIndex.SetAt(indexSize - 1, i + 1);
- } else {
- m_CharIndex.Add(i + 1);
- }
- }
- }
- int indexSize = m_CharIndex.GetSize();
- if(indexSize % 2) {
- m_CharIndex.RemoveAt(indexSize - 1);
- }
-}
-int CPDF_TextPageFind::GetCharIndex(int index) const
-{
- return m_pTextPage->CharIndexFromTextIndex(index);
+ m_IsFind(FALSE) {
+ m_strText = m_pTextPage->GetPageText();
+ int nCount = pTextPage->CountChars();
+ if (nCount) {
+ m_CharIndex.Add(0);
+ }
+ for (int i = 0; i < nCount; i++) {
+ FPDF_CHAR_INFO info;
+ pTextPage->GetCharInfo(i, info);
int indexSize = m_CharIndex.GetSize();
- int count = 0;
- for(int i = 0; i < indexSize; i += 2) {
- count += m_CharIndex.GetAt(i + 1);
- if(count > index) {
- return index - count + m_CharIndex.GetAt(i + 1) + m_CharIndex.GetAt(i);
- }
- }
- return -1;
-}
-FX_BOOL CPDF_TextPageFind::FindFirst(const CFX_WideString& findwhat, int flags, int startPos)
-{
- if (!m_pTextPage) {
- return FALSE;
- }
- if (m_strText.IsEmpty() || m_bMatchCase != (flags & FPDFTEXT_MATCHCASE)) {
- m_strText = m_pTextPage->GetPageText();
- }
- CFX_WideString findwhatStr = findwhat;
- m_findWhat = findwhatStr;
- m_flags = flags;
- m_bMatchCase = flags & FPDFTEXT_MATCHCASE;
- if (m_strText.IsEmpty()) {
- m_IsFind = FALSE;
- return TRUE;
- }
- FX_STRSIZE len = findwhatStr.GetLength();
- if (!m_bMatchCase) {
- findwhatStr.MakeLower();
- m_strText.MakeLower();
- }
- m_bMatchWholeWord = flags & FPDFTEXT_MATCHWHOLEWORD;
- m_findNextStart = startPos;
- if (startPos == -1) {
- m_findPreStart = m_strText.GetLength() - 1;
+ if (info.m_Flag == CHAR_NORMAL || info.m_Flag == CHAR_GENERATED) {
+ if (indexSize % 2) {
+ m_CharIndex.Add(1);
+ } else {
+ if (indexSize <= 0) {
+ continue;
+ }
+ m_CharIndex.SetAt(indexSize - 1, m_CharIndex.GetAt(indexSize - 1) + 1);
+ }
} else {
- m_findPreStart = startPos;
- }
- m_csFindWhatArray.RemoveAll();
- int i = 0;
- while(i < len) {
- if(findwhatStr.GetAt(i) != ' ') {
- break;
- }
- i++;
- }
- if(i < len) {
- ExtractFindWhat(findwhatStr);
- } else {
- m_csFindWhatArray.Add(findwhatStr);
- }
- if(m_csFindWhatArray.GetSize() <= 0) {
- return FALSE;
- }
- m_IsFind = TRUE;
- m_resStart = 0;
- m_resEnd = -1;
+ if (indexSize % 2) {
+ if (indexSize <= 0) {
+ continue;
+ }
+ m_CharIndex.SetAt(indexSize - 1, i + 1);
+ } else {
+ m_CharIndex.Add(i + 1);
+ }
+ }
+ }
+ int indexSize = m_CharIndex.GetSize();
+ if (indexSize % 2) {
+ m_CharIndex.RemoveAt(indexSize - 1);
+ }
+}
+int CPDF_TextPageFind::GetCharIndex(int index) const {
+ return m_pTextPage->CharIndexFromTextIndex(index);
+ int indexSize = m_CharIndex.GetSize();
+ int count = 0;
+ for (int i = 0; i < indexSize; i += 2) {
+ count += m_CharIndex.GetAt(i + 1);
+ if (count > index) {
+ return index - count + m_CharIndex.GetAt(i + 1) + m_CharIndex.GetAt(i);
+ }
+ }
+ return -1;
+}
+FX_BOOL CPDF_TextPageFind::FindFirst(const CFX_WideString& findwhat,
+ int flags,
+ int startPos) {
+ if (!m_pTextPage) {
+ return FALSE;
+ }
+ if (m_strText.IsEmpty() || m_bMatchCase != (flags & FPDFTEXT_MATCHCASE)) {
+ m_strText = m_pTextPage->GetPageText();
+ }
+ CFX_WideString findwhatStr = findwhat;
+ m_findWhat = findwhatStr;
+ m_flags = flags;
+ m_bMatchCase = flags & FPDFTEXT_MATCHCASE;
+ if (m_strText.IsEmpty()) {
+ m_IsFind = FALSE;
return TRUE;
-}
-FX_BOOL CPDF_TextPageFind::FindNext()
-{
- if (!m_pTextPage) {
- return FALSE;
- }
- m_resArray.RemoveAll();
- if(m_findNextStart == -1) {
- return FALSE;
- }
- if(m_strText.IsEmpty()) {
- m_IsFind = FALSE;
- return m_IsFind;
- }
- int strLen = m_strText.GetLength();
- if (m_findNextStart > strLen - 1) {
- m_IsFind = FALSE;
- return m_IsFind;
- }
- int nCount = m_csFindWhatArray.GetSize();
- int nResultPos = 0;
- int nStartPos = 0;
- nStartPos = m_findNextStart;
- FX_BOOL bSpaceStart = FALSE;
- for(int iWord = 0; iWord < nCount; iWord++) {
- CFX_WideString csWord = m_csFindWhatArray[iWord];
- if(csWord.IsEmpty()) {
- if(iWord == nCount - 1) {
- FX_WCHAR strInsert = m_strText.GetAt(nStartPos);
- if(strInsert == TEXT_LINEFEED_CHAR || strInsert == TEXT_BLANK_CHAR || strInsert == TEXT_RETURN_CHAR || strInsert == 160) {
- nResultPos = nStartPos + 1;
- break;
- }
- iWord = -1;
- } else if(iWord == 0) {
- bSpaceStart = TRUE;
- }
- continue;
- }
- int endIndex;
- nResultPos = m_strText.Find(csWord.c_str(), nStartPos);
- if (nResultPos == -1) {
- m_IsFind = FALSE;
- return m_IsFind;
- }
- endIndex = nResultPos + csWord.GetLength() - 1;
- if(iWord == 0) {
- m_resStart = nResultPos;
- }
- FX_BOOL bMatch = TRUE;
- if(iWord != 0 && !bSpaceStart) {
- int PreResEndPos = nStartPos;
- int curChar = csWord.GetAt(0);
- CFX_WideString lastWord = m_csFindWhatArray[iWord - 1];
- int lastChar = lastWord.GetAt(lastWord.GetLength() - 1);
- if(nStartPos == nResultPos && !(_IsIgnoreSpaceCharacter(lastChar) || _IsIgnoreSpaceCharacter(curChar))) {
- bMatch = FALSE;
- }
- for(int d = PreResEndPos; d < nResultPos; d++) {
- FX_WCHAR strInsert = m_strText.GetAt(d);
- if(strInsert != TEXT_LINEFEED_CHAR && strInsert != TEXT_BLANK_CHAR && strInsert != TEXT_RETURN_CHAR && strInsert != 160) {
- bMatch = FALSE;
- break;
- }
- }
- } else if(bSpaceStart) {
- if(nResultPos > 0) {
- FX_WCHAR strInsert = m_strText.GetAt(nResultPos - 1);
- if(strInsert != TEXT_LINEFEED_CHAR && strInsert != TEXT_BLANK_CHAR && strInsert != TEXT_RETURN_CHAR && strInsert != 160) {
- bMatch = FALSE;
- m_resStart = nResultPos;
- } else {
- m_resStart = nResultPos - 1;
- }
- }
- }
- if(m_bMatchWholeWord && bMatch) {
- bMatch = IsMatchWholeWord(m_strText, nResultPos, endIndex);
- }
- nStartPos = endIndex + 1;
- if(!bMatch) {
- iWord = -1;
- if(bSpaceStart) {
- nStartPos = m_resStart + m_csFindWhatArray[1].GetLength();
- } else {
- nStartPos = m_resStart + m_csFindWhatArray[0].GetLength();
- }
- }
- }
- m_resEnd = nResultPos + m_csFindWhatArray[m_csFindWhatArray.GetSize() - 1].GetLength() - 1;
- m_IsFind = TRUE;
- int resStart = GetCharIndex(m_resStart);
- int resEnd = GetCharIndex(m_resEnd);
- m_pTextPage->GetRectArray(resStart, resEnd - resStart + 1, m_resArray);
- if(m_flags & FPDFTEXT_CONSECUTIVE) {
- m_findNextStart = m_resStart + 1;
- m_findPreStart = m_resEnd - 1;
- } else {
- m_findNextStart = m_resEnd + 1;
- m_findPreStart = m_resStart - 1;
- }
+ }
+ FX_STRSIZE len = findwhatStr.GetLength();
+ if (!m_bMatchCase) {
+ findwhatStr.MakeLower();
+ m_strText.MakeLower();
+ }
+ m_bMatchWholeWord = flags & FPDFTEXT_MATCHWHOLEWORD;
+ m_findNextStart = startPos;
+ if (startPos == -1) {
+ m_findPreStart = m_strText.GetLength() - 1;
+ } else {
+ m_findPreStart = startPos;
+ }
+ m_csFindWhatArray.RemoveAll();
+ int i = 0;
+ while (i < len) {
+ if (findwhatStr.GetAt(i) != ' ') {
+ break;
+ }
+ i++;
+ }
+ if (i < len) {
+ ExtractFindWhat(findwhatStr);
+ } else {
+ m_csFindWhatArray.Add(findwhatStr);
+ }
+ if (m_csFindWhatArray.GetSize() <= 0) {
+ return FALSE;
+ }
+ m_IsFind = TRUE;
+ m_resStart = 0;
+ m_resEnd = -1;
+ return TRUE;
+}
+FX_BOOL CPDF_TextPageFind::FindNext() {
+ if (!m_pTextPage) {
+ return FALSE;
+ }
+ m_resArray.RemoveAll();
+ if (m_findNextStart == -1) {
+ return FALSE;
+ }
+ if (m_strText.IsEmpty()) {
+ m_IsFind = FALSE;
return m_IsFind;
-}
-FX_BOOL CPDF_TextPageFind::FindPrev()
-{
- if (!m_pTextPage) {
- return FALSE;
- }
- m_resArray.RemoveAll();
- if(m_strText.IsEmpty() || m_findPreStart < 0) {
- m_IsFind = FALSE;
- return m_IsFind;
- }
- CPDF_TextPageFind findEngine(m_pTextPage);
- FX_BOOL ret = findEngine.FindFirst(m_findWhat, m_flags);
- if(!ret) {
- m_IsFind = FALSE;
- return m_IsFind;
- }
- int order = -1, MatchedCount = 0;
- while(ret) {
- ret = findEngine.FindNext();
- if(ret) {
- int order1 = findEngine.GetCurOrder() ;
- int MatchedCount1 = findEngine.GetMatchedCount();
- if(((order1 + MatchedCount1) - 1) > m_findPreStart) {
- break;
- }
- order = order1;
- MatchedCount = MatchedCount1;
- }
- }
- if(order == -1) {
- m_IsFind = FALSE;
- return m_IsFind;
- }
- m_resStart = m_pTextPage->TextIndexFromCharIndex(order);
- m_resEnd = m_pTextPage->TextIndexFromCharIndex(order + MatchedCount - 1);
- m_IsFind = TRUE;
- m_pTextPage->GetRectArray(order, MatchedCount, m_resArray);
- if(m_flags & FPDFTEXT_CONSECUTIVE) {
- m_findNextStart = m_resStart + 1;
- m_findPreStart = m_resEnd - 1;
- } else {
- m_findNextStart = m_resEnd + 1;
- m_findPreStart = m_resStart - 1;
- }
+ }
+ int strLen = m_strText.GetLength();
+ if (m_findNextStart > strLen - 1) {
+ m_IsFind = FALSE;
return m_IsFind;
-}
-void CPDF_TextPageFind::ExtractFindWhat(const CFX_WideString& findwhat)
-{
- if(findwhat.IsEmpty()) {
- return ;
- }
- int index = 0;
- while(1) {
- CFX_WideString csWord = TEXT_EMPTY;
- int ret = ExtractSubString(csWord, findwhat.c_str(), index, TEXT_BLANK_CHAR);
- if(csWord.IsEmpty()) {
- if(ret) {
- m_csFindWhatArray.Add(CFX_WideString(L""));
- index++;
- continue;
- } else {
- break;
- }
- }
- int pos = 0;
- while(pos < csWord.GetLength()) {
- CFX_WideString curStr = csWord.Mid(pos, 1);
- FX_WCHAR curChar = csWord.GetAt(pos);
- if (_IsIgnoreSpaceCharacter(curChar)) {
- if (pos > 0 && curChar == 0x2019) {
- pos++;
- continue;
- }
- if (pos > 0 ) {
- CFX_WideString preStr = csWord.Mid(0, pos);
- m_csFindWhatArray.Add(preStr);
- }
- m_csFindWhatArray.Add(curStr);
- if (pos == csWord.GetLength() - 1) {
- csWord.Empty();
- break;
- }
- csWord = csWord.Right(csWord.GetLength() - pos - 1);
- pos = 0;
- continue;
- }
- pos++;
- }
- if (!csWord.IsEmpty()) {
- m_csFindWhatArray.Add(csWord);
- }
+ }
+ int nCount = m_csFindWhatArray.GetSize();
+ int nResultPos = 0;
+ int nStartPos = 0;
+ nStartPos = m_findNextStart;
+ FX_BOOL bSpaceStart = FALSE;
+ for (int iWord = 0; iWord < nCount; iWord++) {
+ CFX_WideString csWord = m_csFindWhatArray[iWord];
+ if (csWord.IsEmpty()) {
+ if (iWord == nCount - 1) {
+ FX_WCHAR strInsert = m_strText.GetAt(nStartPos);
+ if (strInsert == TEXT_LINEFEED_CHAR || strInsert == TEXT_BLANK_CHAR ||
+ strInsert == TEXT_RETURN_CHAR || strInsert == 160) {
+ nResultPos = nStartPos + 1;
+ break;
+ }
+ iWord = -1;
+ } else if (iWord == 0) {
+ bSpaceStart = TRUE;
+ }
+ continue;
+ }
+ int endIndex;
+ nResultPos = m_strText.Find(csWord.c_str(), nStartPos);
+ if (nResultPos == -1) {
+ m_IsFind = FALSE;
+ return m_IsFind;
+ }
+ endIndex = nResultPos + csWord.GetLength() - 1;
+ if (iWord == 0) {
+ m_resStart = nResultPos;
+ }
+ FX_BOOL bMatch = TRUE;
+ if (iWord != 0 && !bSpaceStart) {
+ int PreResEndPos = nStartPos;
+ int curChar = csWord.GetAt(0);
+ CFX_WideString lastWord = m_csFindWhatArray[iWord - 1];
+ int lastChar = lastWord.GetAt(lastWord.GetLength() - 1);
+ if (nStartPos == nResultPos &&
+ !(_IsIgnoreSpaceCharacter(lastChar) ||
+ _IsIgnoreSpaceCharacter(curChar))) {
+ bMatch = FALSE;
+ }
+ for (int d = PreResEndPos; d < nResultPos; d++) {
+ FX_WCHAR strInsert = m_strText.GetAt(d);
+ if (strInsert != TEXT_LINEFEED_CHAR && strInsert != TEXT_BLANK_CHAR &&
+ strInsert != TEXT_RETURN_CHAR && strInsert != 160) {
+ bMatch = FALSE;
+ break;
+ }
+ }
+ } else if (bSpaceStart) {
+ if (nResultPos > 0) {
+ FX_WCHAR strInsert = m_strText.GetAt(nResultPos - 1);
+ if (strInsert != TEXT_LINEFEED_CHAR && strInsert != TEXT_BLANK_CHAR &&
+ strInsert != TEXT_RETURN_CHAR && strInsert != 160) {
+ bMatch = FALSE;
+ m_resStart = nResultPos;
+ } else {
+ m_resStart = nResultPos - 1;
+ }
+ }
+ }
+ if (m_bMatchWholeWord && bMatch) {
+ bMatch = IsMatchWholeWord(m_strText, nResultPos, endIndex);
+ }
+ nStartPos = endIndex + 1;
+ if (!bMatch) {
+ iWord = -1;
+ if (bSpaceStart) {
+ nStartPos = m_resStart + m_csFindWhatArray[1].GetLength();
+ } else {
+ nStartPos = m_resStart + m_csFindWhatArray[0].GetLength();
+ }
+ }
+ }
+ m_resEnd = nResultPos +
+ m_csFindWhatArray[m_csFindWhatArray.GetSize() - 1].GetLength() - 1;
+ m_IsFind = TRUE;
+ int resStart = GetCharIndex(m_resStart);
+ int resEnd = GetCharIndex(m_resEnd);
+ m_pTextPage->GetRectArray(resStart, resEnd - resStart + 1, m_resArray);
+ if (m_flags & FPDFTEXT_CONSECUTIVE) {
+ m_findNextStart = m_resStart + 1;
+ m_findPreStart = m_resEnd - 1;
+ } else {
+ m_findNextStart = m_resEnd + 1;
+ m_findPreStart = m_resStart - 1;
+ }
+ return m_IsFind;
+}
+FX_BOOL CPDF_TextPageFind::FindPrev() {
+ if (!m_pTextPage) {
+ return FALSE;
+ }
+ m_resArray.RemoveAll();
+ if (m_strText.IsEmpty() || m_findPreStart < 0) {
+ m_IsFind = FALSE;
+ return m_IsFind;
+ }
+ CPDF_TextPageFind findEngine(m_pTextPage);
+ FX_BOOL ret = findEngine.FindFirst(m_findWhat, m_flags);
+ if (!ret) {
+ m_IsFind = FALSE;
+ return m_IsFind;
+ }
+ int order = -1, MatchedCount = 0;
+ while (ret) {
+ ret = findEngine.FindNext();
+ if (ret) {
+ int order1 = findEngine.GetCurOrder();
+ int MatchedCount1 = findEngine.GetMatchedCount();
+ if (((order1 + MatchedCount1) - 1) > m_findPreStart) {
+ break;
+ }
+ order = order1;
+ MatchedCount = MatchedCount1;
+ }
+ }
+ if (order == -1) {
+ m_IsFind = FALSE;
+ return m_IsFind;
+ }
+ m_resStart = m_pTextPage->TextIndexFromCharIndex(order);
+ m_resEnd = m_pTextPage->TextIndexFromCharIndex(order + MatchedCount - 1);
+ m_IsFind = TRUE;
+ m_pTextPage->GetRectArray(order, MatchedCount, m_resArray);
+ if (m_flags & FPDFTEXT_CONSECUTIVE) {
+ m_findNextStart = m_resStart + 1;
+ m_findPreStart = m_resEnd - 1;
+ } else {
+ m_findNextStart = m_resEnd + 1;
+ m_findPreStart = m_resStart - 1;
+ }
+ return m_IsFind;
+}
+void CPDF_TextPageFind::ExtractFindWhat(const CFX_WideString& findwhat) {
+ if (findwhat.IsEmpty()) {
+ return;
+ }
+ int index = 0;
+ while (1) {
+ CFX_WideString csWord = TEXT_EMPTY;
+ int ret =
+ ExtractSubString(csWord, findwhat.c_str(), index, TEXT_BLANK_CHAR);
+ if (csWord.IsEmpty()) {
+ if (ret) {
+ m_csFindWhatArray.Add(CFX_WideString(L""));
index++;
+ continue;
+ } else {
+ break;
+ }
}
-}
-FX_BOOL CPDF_TextPageFind::IsMatchWholeWord(const CFX_WideString& csPageText, int startPos, int endPos)
-{
- int char_left = 0;
- int char_right = 0;
- int char_count = endPos - startPos + 1;
- if(char_count < 1) {
- return FALSE;
- }
- if (char_count == 1 && csPageText.GetAt(startPos) > 255) {
- return TRUE;
- }
- if(startPos - 1 >= 0 ) {
- char_left = csPageText.GetAt(startPos - 1);
- }
- if(startPos + char_count < csPageText.GetLength()) {
- char_right = csPageText.GetAt(startPos + char_count);
- }
- if ((char_left > 'A' && char_left < 'a') || (char_left > 'a' && char_left < 'z') || (char_left > 0xfb00 && char_left < 0xfb06) || (char_left >= '0' && char_left <= '9') ||
- (char_right > 'A' && char_right < 'a') || (char_right > 'a' && char_right < 'z') || (char_right > 0xfb00 && char_right < 0xfb06) || (char_right >= '0' && char_right <= '9')) {
- return FALSE;
- }
- if(!(('A' > char_left || char_left > 'Z') && ('a' > char_left || char_left > 'z')
- && ('A' > char_right || char_right > 'Z') && ('a' > char_right || char_right > 'z'))) {
- return FALSE;
- }
- if (char_count > 0) {
- if (csPageText.GetAt(startPos) >= L'0' && csPageText.GetAt(startPos) <= L'9' && char_left >= L'0' && char_left <= L'9') {
- return FALSE;
- }
- if (csPageText.GetAt(endPos) >= L'0' && csPageText.GetAt(endPos) <= L'9' && char_right >= L'0' && char_right <= L'9') {
- return FALSE;
- }
- }
+ int pos = 0;
+ while (pos < csWord.GetLength()) {
+ CFX_WideString curStr = csWord.Mid(pos, 1);
+ FX_WCHAR curChar = csWord.GetAt(pos);
+ if (_IsIgnoreSpaceCharacter(curChar)) {
+ if (pos > 0 && curChar == 0x2019) {
+ pos++;
+ continue;
+ }
+ if (pos > 0) {
+ CFX_WideString preStr = csWord.Mid(0, pos);
+ m_csFindWhatArray.Add(preStr);
+ }
+ m_csFindWhatArray.Add(curStr);
+ if (pos == csWord.GetLength() - 1) {
+ csWord.Empty();
+ break;
+ }
+ csWord = csWord.Right(csWord.GetLength() - pos - 1);
+ pos = 0;
+ continue;
+ }
+ pos++;
+ }
+ if (!csWord.IsEmpty()) {
+ m_csFindWhatArray.Add(csWord);
+ }
+ index++;
+ }
+}
+FX_BOOL CPDF_TextPageFind::IsMatchWholeWord(const CFX_WideString& csPageText,
+ int startPos,
+ int endPos) {
+ int char_left = 0;
+ int char_right = 0;
+ int char_count = endPos - startPos + 1;
+ if (char_count < 1) {
+ return FALSE;
+ }
+ if (char_count == 1 && csPageText.GetAt(startPos) > 255) {
return TRUE;
-}
-FX_BOOL CPDF_TextPageFind::ExtractSubString(CFX_WideString& rString, const FX_WCHAR* lpszFullString,
- int iSubString, FX_WCHAR chSep)
-{
+ }
+ if (startPos - 1 >= 0) {
+ char_left = csPageText.GetAt(startPos - 1);
+ }
+ if (startPos + char_count < csPageText.GetLength()) {
+ char_right = csPageText.GetAt(startPos + char_count);
+ }
+ if ((char_left > 'A' && char_left < 'a') ||
+ (char_left > 'a' && char_left < 'z') ||
+ (char_left > 0xfb00 && char_left < 0xfb06) ||
+ (char_left >= '0' && char_left <= '9') ||
+ (char_right > 'A' && char_right < 'a') ||
+ (char_right > 'a' && char_right < 'z') ||
+ (char_right > 0xfb00 && char_right < 0xfb06) ||
+ (char_right >= '0' && char_right <= '9')) {
+ return FALSE;
+ }
+ if (!(('A' > char_left || char_left > 'Z') &&
+ ('a' > char_left || char_left > 'z') &&
+ ('A' > char_right || char_right > 'Z') &&
+ ('a' > char_right || char_right > 'z'))) {
+ return FALSE;
+ }
+ if (char_count > 0) {
+ if (csPageText.GetAt(startPos) >= L'0' &&
+ csPageText.GetAt(startPos) <= L'9' && char_left >= L'0' &&
+ char_left <= L'9') {
+ return FALSE;
+ }
+ if (csPageText.GetAt(endPos) >= L'0' && csPageText.GetAt(endPos) <= L'9' &&
+ char_right >= L'0' && char_right <= L'9') {
+ return FALSE;
+ }
+ }
+ return TRUE;
+}
+FX_BOOL CPDF_TextPageFind::ExtractSubString(CFX_WideString& rString,
+ const FX_WCHAR* lpszFullString,
+ int iSubString,
+ FX_WCHAR chSep) {
+ if (lpszFullString == NULL) {
+ return FALSE;
+ }
+ while (iSubString--) {
+ lpszFullString = FXSYS_wcschr(lpszFullString, chSep);
if (lpszFullString == NULL) {
- return FALSE;
- }
- while (iSubString--) {
- lpszFullString = FXSYS_wcschr(lpszFullString, chSep);
- if (lpszFullString == NULL) {
- rString.Empty();
- return FALSE;
- }
- lpszFullString++;
- while(*lpszFullString == chSep) {
- lpszFullString++;
- }
- }
- const FX_WCHAR* lpchEnd = FXSYS_wcschr(lpszFullString, chSep);
- int nLen = (lpchEnd == NULL) ?
- (int)FXSYS_wcslen(lpszFullString) : (int)(lpchEnd - lpszFullString);
- ASSERT(nLen >= 0);
- FXSYS_memcpy(rString.GetBuffer(nLen), lpszFullString, nLen * sizeof(FX_WCHAR));
- rString.ReleaseBuffer();
- return TRUE;
-}
-CFX_WideString CPDF_TextPageFind::MakeReverse(const CFX_WideString& str)
-{
- CFX_WideString str2;
- str2.Empty();
- int nlen = str.GetLength();
- for(int i = nlen - 1; i >= 0; i--) {
- str2 += str.GetAt(i);
- }
- return str2;
-}
-void CPDF_TextPageFind::GetRectArray(CFX_RectArray& rects) const
-{
- rects.Copy(m_resArray);
-}
-int CPDF_TextPageFind::GetCurOrder() const
-{
- return GetCharIndex(m_resStart);
-}
-int CPDF_TextPageFind::GetMatchedCount()const
-{
- int resStart = GetCharIndex(m_resStart);
- int resEnd = GetCharIndex(m_resEnd);
- return resEnd - resStart + 1;
-}
-CPDF_LinkExtract::CPDF_LinkExtract()
- : m_pTextPage(NULL),
- m_IsParserd(FALSE)
-{
-}
-CPDF_LinkExtract::~CPDF_LinkExtract()
-{
- DeleteLinkList();
-}
-FX_BOOL CPDF_LinkExtract::ExtractLinks(const IPDF_TextPage* pTextPage)
-{
- if (!pTextPage || !pTextPage->IsParsered()) {
- return FALSE;
- }
- m_pTextPage = (const CPDF_TextPage*)pTextPage;
- m_strPageText = m_pTextPage->GetPageText(0, -1);
- DeleteLinkList();
- if (m_strPageText.IsEmpty()) {
- return FALSE;
- }
- parserLink();
- m_IsParserd = TRUE;
- return TRUE;
-}
-void CPDF_LinkExtract::DeleteLinkList()
-{
- while (m_LinkList.GetSize()) {
- CPDF_LinkExt* linkinfo = NULL;
- linkinfo = m_LinkList.GetAt(0);
- m_LinkList.RemoveAt(0);
- delete linkinfo;
- }
- m_LinkList.RemoveAll();
-}
-int CPDF_LinkExtract::CountLinks() const
-{
- if (!m_IsParserd) {
- return -1;
- }
- return m_LinkList.GetSize();
-}
-void CPDF_LinkExtract::parserLink()
-{
- int start = 0, pos = 0;
- int TotalChar = m_pTextPage->CountChars();
- while (pos < TotalChar) {
- FPDF_CHAR_INFO pageChar;
- m_pTextPage->GetCharInfo(pos, pageChar);
- if (pageChar.m_Flag == CHAR_GENERATED || pageChar.m_Unicode == 0x20 || pos == TotalChar - 1) {
- int nCount = pos - start;
- if(pos == TotalChar - 1) {
- nCount++;
- }
- CFX_WideString strBeCheck;
- strBeCheck = m_pTextPage->GetPageText(start, nCount);
- if (strBeCheck.GetLength() > 5) {
- while(strBeCheck.GetLength() > 0) {
- FX_WCHAR ch = strBeCheck.GetAt(strBeCheck.GetLength() - 1);
- if (ch == L')' || ch == L',' || ch == L'>' || ch == L'.') {
- strBeCheck = strBeCheck.Mid(0, strBeCheck.GetLength() - 1);
- nCount--;
- } else {
- break;
- }
- }
- if (nCount > 5 && (CheckWebLink(strBeCheck) || CheckMailLink(strBeCheck))) {
- if (!AppendToLinkList(start, nCount, strBeCheck)) {
- break;
- }
- }
- }
- start = ++pos;
- } else {
- pos++;
- }
- }
-}
-FX_BOOL CPDF_LinkExtract::CheckWebLink(CFX_WideString& strBeCheck)
-{
- CFX_WideString str = strBeCheck;
- str.MakeLower();
- if (str.Find(L"http://www.") != -1) {
- strBeCheck = strBeCheck.Right(str.GetLength() - str.Find(L"http://www."));
- return TRUE;
- }
- if (str.Find(L"http://") != -1) {
- strBeCheck = strBeCheck.Right(str.GetLength() - str.Find(L"http://"));
- return TRUE;
- }
- if (str.Find(L"https://www.") != -1) {
- strBeCheck = strBeCheck.Right(str.GetLength() - str.Find(L"https://www."));
- return TRUE;
- }
- if (str.Find(L"https://") != -1) {
- strBeCheck = strBeCheck.Right(str.GetLength() - str.Find(L"https://"));
- return TRUE;
- }
- if (str.Find(L"www.") != -1) {
- strBeCheck = strBeCheck.Right(str.GetLength() - str.Find(L"www."));
- strBeCheck = L"http://" + strBeCheck;
- return TRUE;
- }
+ rString.Empty();
+ return FALSE;
+ }
+ lpszFullString++;
+ while (*lpszFullString == chSep) {
+ lpszFullString++;
+ }
+ }
+ const FX_WCHAR* lpchEnd = FXSYS_wcschr(lpszFullString, chSep);
+ int nLen = (lpchEnd == NULL) ? (int)FXSYS_wcslen(lpszFullString)
+ : (int)(lpchEnd - lpszFullString);
+ ASSERT(nLen >= 0);
+ FXSYS_memcpy(rString.GetBuffer(nLen), lpszFullString,
+ nLen * sizeof(FX_WCHAR));
+ rString.ReleaseBuffer();
+ return TRUE;
+}
+CFX_WideString CPDF_TextPageFind::MakeReverse(const CFX_WideString& str) {
+ CFX_WideString str2;
+ str2.Empty();
+ int nlen = str.GetLength();
+ for (int i = nlen - 1; i >= 0; i--) {
+ str2 += str.GetAt(i);
+ }
+ return str2;
+}
+void CPDF_TextPageFind::GetRectArray(CFX_RectArray& rects) const {
+ rects.Copy(m_resArray);
+}
+int CPDF_TextPageFind::GetCurOrder() const {
+ return GetCharIndex(m_resStart);
+}
+int CPDF_TextPageFind::GetMatchedCount() const {
+ int resStart = GetCharIndex(m_resStart);
+ int resEnd = GetCharIndex(m_resEnd);
+ return resEnd - resStart + 1;
+}
+CPDF_LinkExtract::CPDF_LinkExtract() : m_pTextPage(NULL), m_IsParserd(FALSE) {}
+CPDF_LinkExtract::~CPDF_LinkExtract() {
+ DeleteLinkList();
+}
+FX_BOOL CPDF_LinkExtract::ExtractLinks(const IPDF_TextPage* pTextPage) {
+ if (!pTextPage || !pTextPage->IsParsered()) {
return FALSE;
-}
-FX_BOOL CPDF_LinkExtract::CheckMailLink(CFX_WideString& str)
-{
- str.MakeLower();
- int aPos = str.Find(L'@');
- if (aPos < 1) {
- return FALSE;
- }
- if (str.GetAt(aPos - 1) == L'.' || str.GetAt(aPos - 1) == L'_') {
- return FALSE;
- }
- int i;
- for (i = aPos - 1; i >= 0; i--) {
- FX_WCHAR ch = str.GetAt(i);
- if (ch == L'_' || ch == L'.' || (ch >= L'a' && ch <= L'z') || (ch >= L'0' && ch <= L'9')) {
- continue;
- } else {
- if (i == aPos - 1) {
- return FALSE;
- }
- str = str.Right(str.GetLength() - i - 1);
- break;
- }
- }
- aPos = str.Find(L'@');
- if (aPos < 1) {
- return FALSE;
- }
- CFX_WideString strtemp = L"";
- for (i = 0; i < aPos; i++) {
- FX_WCHAR wch = str.GetAt(i);
- if (wch >= L'a' && wch <= L'z') {
+ }
+ m_pTextPage = (const CPDF_TextPage*)pTextPage;
+ m_strPageText = m_pTextPage->GetPageText(0, -1);
+ DeleteLinkList();
+ if (m_strPageText.IsEmpty()) {
+ return FALSE;
+ }
+ parserLink();
+ m_IsParserd = TRUE;
+ return TRUE;
+}
+void CPDF_LinkExtract::DeleteLinkList() {
+ while (m_LinkList.GetSize()) {
+ CPDF_LinkExt* linkinfo = NULL;
+ linkinfo = m_LinkList.GetAt(0);
+ m_LinkList.RemoveAt(0);
+ delete linkinfo;
+ }
+ m_LinkList.RemoveAll();
+}
+int CPDF_LinkExtract::CountLinks() const {
+ if (!m_IsParserd) {
+ return -1;
+ }
+ return m_LinkList.GetSize();
+}
+void CPDF_LinkExtract::parserLink() {
+ int start = 0, pos = 0;
+ int TotalChar = m_pTextPage->CountChars();
+ while (pos < TotalChar) {
+ FPDF_CHAR_INFO pageChar;
+ m_pTextPage->GetCharInfo(pos, pageChar);
+ if (pageChar.m_Flag == CHAR_GENERATED || pageChar.m_Unicode == 0x20 ||
+ pos == TotalChar - 1) {
+ int nCount = pos - start;
+ if (pos == TotalChar - 1) {
+ nCount++;
+ }
+ CFX_WideString strBeCheck;
+ strBeCheck = m_pTextPage->GetPageText(start, nCount);
+ if (strBeCheck.GetLength() > 5) {
+ while (strBeCheck.GetLength() > 0) {
+ FX_WCHAR ch = strBeCheck.GetAt(strBeCheck.GetLength() - 1);
+ if (ch == L')' || ch == L',' || ch == L'>' || ch == L'.') {
+ strBeCheck = strBeCheck.Mid(0, strBeCheck.GetLength() - 1);
+ nCount--;
+ } else {
break;
- } else {
- strtemp = str.Right(str.GetLength() - i + 1);
+ }
}
- }
- if (strtemp != L"") {
- str = strtemp;
- }
- aPos = str.Find(L'@');
- if (aPos < 1) {
- return FALSE;
- }
- str.TrimRight(L'.');
- strtemp = str;
- int ePos = str.Find(L'.');
- if (ePos == -1) {
- return FALSE;
- }
- while (ePos != -1) {
- strtemp = strtemp.Right(strtemp.GetLength() - ePos - 1);
- ePos = strtemp.Find('.');
- }
- ePos = strtemp.GetLength();
- for (i = 0; i < ePos; i++) {
- FX_WCHAR wch = str.GetAt(i);
- if ((wch >= L'a' && wch <= L'z') || (wch >= L'0' && wch <= L'9')) {
- continue;
- } else {
- str = str.Left(str.GetLength() - ePos + i + 1);
- ePos = ePos - i - 1;
+ if (nCount > 5 &&
+ (CheckWebLink(strBeCheck) || CheckMailLink(strBeCheck))) {
+ if (!AppendToLinkList(start, nCount, strBeCheck)) {
break;
+ }
}
+ }
+ start = ++pos;
+ } else {
+ pos++;
}
- int nLen = str.GetLength();
- for (i = aPos + 1; i < nLen - ePos; i++) {
- FX_WCHAR wch = str.GetAt(i);
- if (wch == L'-' || wch == L'.' || (wch >= L'a' && wch <= L'z') || (wch >= L'0' && wch <= L'9')) {
- continue;
- } else {
- return FALSE;
- }
- }
- if (str.Find(L"mailto:") == -1) {
- str = L"mailto:" + str;
- }
- return TRUE;
+ }
}
-FX_BOOL CPDF_LinkExtract::AppendToLinkList(int start, int count, const CFX_WideString& strUrl)
-{
- CPDF_LinkExt* linkInfo = new CPDF_LinkExt;
- linkInfo->m_strUrl = strUrl;
- linkInfo->m_Start = start;
- linkInfo->m_Count = count;
- m_LinkList.Add(linkInfo);
+FX_BOOL CPDF_LinkExtract::CheckWebLink(CFX_WideString& strBeCheck) {
+ CFX_WideString str = strBeCheck;
+ str.MakeLower();
+ if (str.Find(L"http://www.") != -1) {
+ strBeCheck = strBeCheck.Right(str.GetLength() - str.Find(L"http://www."));
return TRUE;
+ }
+ if (str.Find(L"http://") != -1) {
+ strBeCheck = strBeCheck.Right(str.GetLength() - str.Find(L"http://"));
+ return TRUE;
+ }
+ if (str.Find(L"https://www.") != -1) {
+ strBeCheck = strBeCheck.Right(str.GetLength() - str.Find(L"https://www."));
+ return TRUE;
+ }
+ if (str.Find(L"https://") != -1) {
+ strBeCheck = strBeCheck.Right(str.GetLength() - str.Find(L"https://"));
+ return TRUE;
+ }
+ if (str.Find(L"www.") != -1) {
+ strBeCheck = strBeCheck.Right(str.GetLength() - str.Find(L"www."));
+ strBeCheck = L"http://" + strBeCheck;
+ return TRUE;
+ }
+ return FALSE;
}
-CFX_WideString CPDF_LinkExtract::GetURL(int index) const
-{
- if (!m_IsParserd || index < 0 || index >= m_LinkList.GetSize()) {
- return L"";
- }
- CPDF_LinkExt* link = NULL;
- link = m_LinkList.GetAt(index);
- if (!link) {
- return L"";
- }
- return link->m_strUrl;
-}
-void CPDF_LinkExtract::GetBoundedSegment(int index, int& start, int& count) const
-{
- if (!m_IsParserd || index < 0 || index >= m_LinkList.GetSize()) {
- return ;
- }
- CPDF_LinkExt* link = NULL;
- link = m_LinkList.GetAt(index);
- if (!link) {
- return ;
+FX_BOOL CPDF_LinkExtract::CheckMailLink(CFX_WideString& str) {
+ str.MakeLower();
+ int aPos = str.Find(L'@');
+ if (aPos < 1) {
+ return FALSE;
+ }
+ if (str.GetAt(aPos - 1) == L'.' || str.GetAt(aPos - 1) == L'_') {
+ return FALSE;
+ }
+ int i;
+ for (i = aPos - 1; i >= 0; i--) {
+ FX_WCHAR ch = str.GetAt(i);
+ if (ch == L'_' || ch == L'.' || (ch >= L'a' && ch <= L'z') ||
+ (ch >= L'0' && ch <= L'9')) {
+ continue;
+ } else {
+ if (i == aPos - 1) {
+ return FALSE;
+ }
+ str = str.Right(str.GetLength() - i - 1);
+ break;
}
- start = link->m_Start;
- count = link->m_Count;
+ }
+ aPos = str.Find(L'@');
+ if (aPos < 1) {
+ return FALSE;
+ }
+ CFX_WideString strtemp = L"";
+ for (i = 0; i < aPos; i++) {
+ FX_WCHAR wch = str.GetAt(i);
+ if (wch >= L'a' && wch <= L'z') {
+ break;
+ } else {
+ strtemp = str.Right(str.GetLength() - i + 1);
+ }
+ }
+ if (strtemp != L"") {
+ str = strtemp;
+ }
+ aPos = str.Find(L'@');
+ if (aPos < 1) {
+ return FALSE;
+ }
+ str.TrimRight(L'.');
+ strtemp = str;
+ int ePos = str.Find(L'.');
+ if (ePos == -1) {
+ return FALSE;
+ }
+ while (ePos != -1) {
+ strtemp = strtemp.Right(strtemp.GetLength() - ePos - 1);
+ ePos = strtemp.Find('.');
+ }
+ ePos = strtemp.GetLength();
+ for (i = 0; i < ePos; i++) {
+ FX_WCHAR wch = str.GetAt(i);
+ if ((wch >= L'a' && wch <= L'z') || (wch >= L'0' && wch <= L'9')) {
+ continue;
+ } else {
+ str = str.Left(str.GetLength() - ePos + i + 1);
+ ePos = ePos - i - 1;
+ break;
+ }
+ }
+ int nLen = str.GetLength();
+ for (i = aPos + 1; i < nLen - ePos; i++) {
+ FX_WCHAR wch = str.GetAt(i);
+ if (wch == L'-' || wch == L'.' || (wch >= L'a' && wch <= L'z') ||
+ (wch >= L'0' && wch <= L'9')) {
+ continue;
+ } else {
+ return FALSE;
+ }
+ }
+ if (str.Find(L"mailto:") == -1) {
+ str = L"mailto:" + str;
+ }
+ return TRUE;
+}
+FX_BOOL CPDF_LinkExtract::AppendToLinkList(int start,
+ int count,
+ const CFX_WideString& strUrl) {
+ CPDF_LinkExt* linkInfo = new CPDF_LinkExt;
+ linkInfo->m_strUrl = strUrl;
+ linkInfo->m_Start = start;
+ linkInfo->m_Count = count;
+ m_LinkList.Add(linkInfo);
+ return TRUE;
+}
+CFX_WideString CPDF_LinkExtract::GetURL(int index) const {
+ if (!m_IsParserd || index < 0 || index >= m_LinkList.GetSize()) {
+ return L"";
+ }
+ CPDF_LinkExt* link = NULL;
+ link = m_LinkList.GetAt(index);
+ if (!link) {
+ return L"";
+ }
+ return link->m_strUrl;
+}
+void CPDF_LinkExtract::GetBoundedSegment(int index,
+ int& start,
+ int& count) const {
+ if (!m_IsParserd || index < 0 || index >= m_LinkList.GetSize()) {
+ return;
+ }
+ CPDF_LinkExt* link = NULL;
+ link = m_LinkList.GetAt(index);
+ if (!link) {
+ return;
+ }
+ start = link->m_Start;
+ count = link->m_Count;
}
-void CPDF_LinkExtract::GetRects(int index, CFX_RectArray& rects) const
-{
- if (!m_IsParserd || index < 0 || index >= m_LinkList.GetSize()) {
- return;
- }
- CPDF_LinkExt* link = NULL;
- link = m_LinkList.GetAt(index);
- if (!link) {
- return ;
- }
- m_pTextPage->GetRectArray(link->m_Start, link->m_Count, rects);
+void CPDF_LinkExtract::GetRects(int index, CFX_RectArray& rects) const {
+ if (!m_IsParserd || index < 0 || index >= m_LinkList.GetSize()) {
+ return;
+ }
+ CPDF_LinkExt* link = NULL;
+ link = m_LinkList.GetAt(index);
+ if (!link) {
+ return;
+ }
+ m_pTextPage->GetRectArray(link->m_Start, link->m_Count, rects);
}
diff --git a/core/src/fpdftext/fpdf_text_search.cpp b/core/src/fpdftext/fpdf_text_search.cpp
index 21a2564ae6..95839b54fb 100644
--- a/core/src/fpdftext/fpdf_text_search.cpp
+++ b/core/src/fpdftext/fpdf_text_search.cpp
@@ -6,315 +6,330 @@
#include "../../include/fpdfapi/fpdf_pageobj.h"
#include "../../include/fpdfapi/fpdf_page.h"
-class CPDF_TextStream
-{
-public:
- CPDF_TextStream(CFX_WideTextBuf& buffer, FX_BOOL bUseLF, CFX_PtrArray* pObjArray);
- ~CPDF_TextStream() {}
- FX_BOOL ProcessObject(const CPDF_TextObject* pObj, FX_BOOL bFirstLine);
- CFX_WideTextBuf& m_Buffer;
- FX_BOOL m_bUseLF;
- CFX_PtrArray* m_pObjArray;
- const CPDF_TextObject* m_pLastObj;
+class CPDF_TextStream {
+ public:
+ CPDF_TextStream(CFX_WideTextBuf& buffer,
+ FX_BOOL bUseLF,
+ CFX_PtrArray* pObjArray);
+ ~CPDF_TextStream() {}
+ FX_BOOL ProcessObject(const CPDF_TextObject* pObj, FX_BOOL bFirstLine);
+ CFX_WideTextBuf& m_Buffer;
+ FX_BOOL m_bUseLF;
+ CFX_PtrArray* m_pObjArray;
+ const CPDF_TextObject* m_pLastObj;
};
-CPDF_TextStream::CPDF_TextStream(CFX_WideTextBuf& buffer, FX_BOOL bUseLF, CFX_PtrArray* pObjArray) : m_Buffer(buffer)
-{
- m_pLastObj = NULL;
- m_bUseLF = bUseLF;
- m_pObjArray = pObjArray;
+CPDF_TextStream::CPDF_TextStream(CFX_WideTextBuf& buffer,
+ FX_BOOL bUseLF,
+ CFX_PtrArray* pObjArray)
+ : m_Buffer(buffer) {
+ m_pLastObj = NULL;
+ m_bUseLF = bUseLF;
+ m_pObjArray = pObjArray;
}
-FX_BOOL FPDFText_IsSameTextObject(const CPDF_TextObject* pTextObj1, const CPDF_TextObject* pTextObj2)
-{
- if (!pTextObj1 || !pTextObj2) {
- return FALSE;
+FX_BOOL FPDFText_IsSameTextObject(const CPDF_TextObject* pTextObj1,
+ const CPDF_TextObject* pTextObj2) {
+ if (!pTextObj1 || !pTextObj2) {
+ return FALSE;
+ }
+ CFX_FloatRect rcPreObj(pTextObj2->m_Left, pTextObj2->m_Bottom,
+ pTextObj2->m_Right, pTextObj2->m_Top);
+ CFX_FloatRect rcCurObj(pTextObj1->m_Left, pTextObj1->m_Bottom,
+ pTextObj1->m_Right, pTextObj1->m_Top);
+ if (rcPreObj.IsEmpty() && rcCurObj.IsEmpty()) {
+ return TRUE;
+ }
+ if (!rcPreObj.IsEmpty() || !rcCurObj.IsEmpty()) {
+ rcPreObj.Intersect(rcCurObj);
+ if (rcPreObj.IsEmpty()) {
+ return FALSE;
}
- CFX_FloatRect rcPreObj(pTextObj2->m_Left, pTextObj2->m_Bottom, pTextObj2->m_Right, pTextObj2->m_Top);
- CFX_FloatRect rcCurObj(pTextObj1->m_Left, pTextObj1->m_Bottom, pTextObj1->m_Right, pTextObj1->m_Top);
- if (rcPreObj.IsEmpty() && rcCurObj.IsEmpty()) {
- return TRUE;
+ if (FXSYS_fabs(rcPreObj.Width() - rcCurObj.Width()) >
+ rcCurObj.Width() / 2) {
+ return FALSE;
}
- if (!rcPreObj.IsEmpty() || !rcCurObj.IsEmpty()) {
- rcPreObj.Intersect(rcCurObj);
- if (rcPreObj.IsEmpty()) {
- return FALSE;
- }
- if (FXSYS_fabs(rcPreObj.Width() - rcCurObj.Width()) > rcCurObj.Width() / 2) {
- return FALSE;
- }
- if (pTextObj2->GetFontSize() != pTextObj1->GetFontSize()) {
- return FALSE;
- }
- }
- int nPreCount = pTextObj2->CountItems();
- int nCurCount = pTextObj1->CountItems();
- if (nPreCount != nCurCount) {
- return FALSE;
+ if (pTextObj2->GetFontSize() != pTextObj1->GetFontSize()) {
+ return FALSE;
}
- for (int i = 0; i < nPreCount; i++) {
- CPDF_TextObjectItem itemPer, itemCur;
- pTextObj2->GetItemInfo(i, &itemPer);
- pTextObj1->GetItemInfo(i, &itemCur);
- if (itemCur.m_CharCode != itemPer.m_CharCode) {
- return FALSE;
- }
+ }
+ int nPreCount = pTextObj2->CountItems();
+ int nCurCount = pTextObj1->CountItems();
+ if (nPreCount != nCurCount) {
+ return FALSE;
+ }
+ for (int i = 0; i < nPreCount; i++) {
+ CPDF_TextObjectItem itemPer, itemCur;
+ pTextObj2->GetItemInfo(i, &itemPer);
+ pTextObj1->GetItemInfo(i, &itemCur);
+ if (itemCur.m_CharCode != itemPer.m_CharCode) {
+ return FALSE;
}
- return TRUE;
+ }
+ return TRUE;
}
-int GetCharWidth(FX_DWORD charCode, CPDF_Font* pFont)
-{
- if(charCode == -1) {
- return 0;
- }
- int w = pFont->GetCharWidthF(charCode);
- if(w == 0) {
- CFX_ByteString str;
- pFont->AppendChar(str, charCode);
- w = pFont->GetStringWidth(str, 1);
- if(w == 0) {
- FX_RECT BBox;
- pFont->GetCharBBox(charCode, BBox);
- w = BBox.right - BBox.left;
- }
+int GetCharWidth(FX_DWORD charCode, CPDF_Font* pFont) {
+ if (charCode == -1) {
+ return 0;
+ }
+ int w = pFont->GetCharWidthF(charCode);
+ if (w == 0) {
+ CFX_ByteString str;
+ pFont->AppendChar(str, charCode);
+ w = pFont->GetStringWidth(str, 1);
+ if (w == 0) {
+ FX_RECT BBox;
+ pFont->GetCharBBox(charCode, BBox);
+ w = BBox.right - BBox.left;
}
- return w;
+ }
+ return w;
}
-int FPDFText_ProcessInterObj(const CPDF_TextObject* pPrevObj, const CPDF_TextObject* pObj)
-{
- if(FPDFText_IsSameTextObject(pPrevObj, pObj)) {
- return -1;
+int FPDFText_ProcessInterObj(const CPDF_TextObject* pPrevObj,
+ const CPDF_TextObject* pObj) {
+ if (FPDFText_IsSameTextObject(pPrevObj, pObj)) {
+ return -1;
+ }
+ CPDF_TextObjectItem item;
+ int nItem = pPrevObj->CountItems();
+ pPrevObj->GetItemInfo(nItem - 1, &item);
+ FX_WCHAR preChar = 0, curChar = 0;
+ CFX_WideString wstr =
+ pPrevObj->GetFont()->UnicodeFromCharCode(item.m_CharCode);
+ if (wstr.GetLength()) {
+ preChar = wstr.GetAt(0);
+ }
+ FX_FLOAT last_pos = item.m_OriginX;
+ int nLastWidth = GetCharWidth(item.m_CharCode, pPrevObj->GetFont());
+ FX_FLOAT last_width = nLastWidth * pPrevObj->GetFontSize() / 1000;
+ last_width = FXSYS_fabs(last_width);
+ pObj->GetItemInfo(0, &item);
+ wstr = pObj->GetFont()->UnicodeFromCharCode(item.m_CharCode);
+ if (wstr.GetLength()) {
+ curChar = wstr.GetAt(0);
+ }
+ int nThisWidth = GetCharWidth(item.m_CharCode, pObj->GetFont());
+ FX_FLOAT this_width = nThisWidth * pObj->GetFontSize() / 1000;
+ this_width = FXSYS_fabs(this_width);
+ FX_FLOAT threshold =
+ last_width > this_width ? last_width / 4 : this_width / 4;
+ CFX_AffineMatrix prev_matrix, prev_reverse;
+ pPrevObj->GetTextMatrix(&prev_matrix);
+ prev_reverse.SetReverse(prev_matrix);
+ FX_FLOAT x = pObj->GetPosX(), y = pObj->GetPosY();
+ prev_reverse.Transform(x, y);
+ if (FXSYS_fabs(y) > threshold * 2) {
+ return 2;
+ }
+ threshold = (FX_FLOAT)(nLastWidth > nThisWidth ? nLastWidth : nThisWidth);
+ threshold = threshold > 400
+ ? (threshold < 700 ? threshold / 4 : threshold / 5)
+ : (threshold / 2);
+ threshold *= nLastWidth > nThisWidth ? FXSYS_fabs(pPrevObj->GetFontSize())
+ : FXSYS_fabs(pObj->GetFontSize());
+ threshold /= 1000;
+ if (FXSYS_fabs(last_pos + last_width - x) > threshold && curChar != L' ' &&
+ preChar != L' ')
+ if (curChar != L' ' && preChar != L' ') {
+ if ((x - last_pos - last_width) > threshold ||
+ (last_pos - x - last_width) > threshold) {
+ return 1;
+ }
+ if (x < 0 && (last_pos - x - last_width) > threshold) {
+ return 1;
+ }
+ if ((x - last_pos - last_width) > this_width ||
+ (x - last_pos - this_width) > last_width) {
+ return 1;
+ }
}
- CPDF_TextObjectItem item;
- int nItem = pPrevObj->CountItems();
- pPrevObj->GetItemInfo(nItem - 1, &item);
- FX_WCHAR preChar = 0, curChar = 0;
- CFX_WideString wstr = pPrevObj->GetFont()->UnicodeFromCharCode(item.m_CharCode);
- if(wstr.GetLength()) {
- preChar = wstr.GetAt(0);
- }
- FX_FLOAT last_pos = item.m_OriginX;
- int nLastWidth = GetCharWidth(item.m_CharCode, pPrevObj->GetFont());
- FX_FLOAT last_width = nLastWidth * pPrevObj->GetFontSize() / 1000;
- last_width = FXSYS_fabs(last_width);
- pObj->GetItemInfo(0, &item);
- wstr = pObj->GetFont()->UnicodeFromCharCode(item.m_CharCode);
- if(wstr.GetLength()) {
- curChar = wstr.GetAt(0);
- }
- int nThisWidth = GetCharWidth(item.m_CharCode, pObj->GetFont());
- FX_FLOAT this_width = nThisWidth * pObj->GetFontSize() / 1000;
- this_width = FXSYS_fabs(this_width);
- FX_FLOAT threshold = last_width > this_width ? last_width / 4 : this_width / 4;
- CFX_AffineMatrix prev_matrix, prev_reverse;
- pPrevObj->GetTextMatrix(&prev_matrix);
- prev_reverse.SetReverse(prev_matrix);
- FX_FLOAT x = pObj->GetPosX(), y = pObj->GetPosY();
- prev_reverse.Transform(x, y);
- if (FXSYS_fabs(y) > threshold * 2) {
- return 2;
- }
- threshold = (FX_FLOAT)(nLastWidth > nThisWidth ? nLastWidth : nThisWidth);
- threshold = threshold > 400 ? (threshold < 700 ? threshold / 4 : threshold / 5) : (threshold / 2);
- threshold *= nLastWidth > nThisWidth ? FXSYS_fabs(pPrevObj->GetFontSize()) : FXSYS_fabs(pObj->GetFontSize());
- threshold /= 1000;
- if (FXSYS_fabs(last_pos + last_width - x) > threshold && curChar != L' ' && preChar != L' ')
- if(curChar != L' ' && preChar != L' ') {
- if((x - last_pos - last_width) > threshold || (last_pos - x - last_width) > threshold) {
- return 1;
- }
- if(x < 0 && (last_pos - x - last_width) > threshold) {
- return 1;
- }
- if((x - last_pos - last_width) > this_width || (x - last_pos - this_width) > last_width ) {
- return 1;
- }
- }
- if(last_pos + last_width > x + this_width && curChar == L' ') {
- return 3;
- }
- return 0;
+ if (last_pos + last_width > x + this_width && curChar == L' ') {
+ return 3;
+ }
+ return 0;
}
-FX_BOOL CPDF_TextStream::ProcessObject(const CPDF_TextObject* pObj, FX_BOOL bFirstLine)
-{
- CPDF_Font* pFont = pObj->GetFont();
- CFX_AffineMatrix matrix;
- pObj->GetTextMatrix(&matrix);
- int item_index = 0;
- if (m_pLastObj) {
- int result = FPDFText_ProcessInterObj(m_pLastObj, pObj);
- if (result == 2) {
- int len = m_Buffer.GetLength();
- if (len && m_bUseLF && m_Buffer.GetBuffer()[len - 1] == L'-') {
- m_Buffer.Delete(len - 1, 1);
- if (m_pObjArray) {
- m_pObjArray->RemoveAt((len - 1) * 2, 2);
- }
- } else {
- if (bFirstLine) {
- return TRUE;
- }
- if (m_bUseLF) {
- m_Buffer.AppendChar(L'\r');
- m_Buffer.AppendChar(L'\n');
- if (m_pObjArray) {
- for (int i = 0; i < 4; i ++) {
- m_pObjArray->Add(NULL);
- }
- }
- } else {
- m_Buffer.AppendChar(' ');
- if (m_pObjArray) {
- m_pObjArray->Add(NULL);
- m_pObjArray->Add(NULL);
- }
- }
- }
- } else if (result == 1) {
- m_Buffer.AppendChar(L' ');
- if (m_pObjArray) {
- m_pObjArray->Add(NULL);
- m_pObjArray->Add(NULL);
- }
- } else if (result == -1) {
- m_pLastObj = pObj;
- return FALSE;
- } else if (result == 3) {
- item_index = 1;
+FX_BOOL CPDF_TextStream::ProcessObject(const CPDF_TextObject* pObj,
+ FX_BOOL bFirstLine) {
+ CPDF_Font* pFont = pObj->GetFont();
+ CFX_AffineMatrix matrix;
+ pObj->GetTextMatrix(&matrix);
+ int item_index = 0;
+ if (m_pLastObj) {
+ int result = FPDFText_ProcessInterObj(m_pLastObj, pObj);
+ if (result == 2) {
+ int len = m_Buffer.GetLength();
+ if (len && m_bUseLF && m_Buffer.GetBuffer()[len - 1] == L'-') {
+ m_Buffer.Delete(len - 1, 1);
+ if (m_pObjArray) {
+ m_pObjArray->RemoveAt((len - 1) * 2, 2);
}
- }
- m_pLastObj = pObj;
- int nItems = pObj->CountItems();
- FX_FLOAT Ignorekerning = 0;
- for(int i = 1; i < nItems - 1; i += 2) {
- CPDF_TextObjectItem item;
- pObj->GetItemInfo(i, &item);
- if (item.m_CharCode == (FX_DWORD) - 1) {
- if(i == 1) {
- Ignorekerning = item.m_OriginX;
- } else if(Ignorekerning > item.m_OriginX) {
- Ignorekerning = item.m_OriginX;
+ } else {
+ if (bFirstLine) {
+ return TRUE;
+ }
+ if (m_bUseLF) {
+ m_Buffer.AppendChar(L'\r');
+ m_Buffer.AppendChar(L'\n');
+ if (m_pObjArray) {
+ for (int i = 0; i < 4; i++) {
+ m_pObjArray->Add(NULL);
}
+ }
} else {
- Ignorekerning = 0;
- break;
+ m_Buffer.AppendChar(' ');
+ if (m_pObjArray) {
+ m_pObjArray->Add(NULL);
+ m_pObjArray->Add(NULL);
+ }
}
+ }
+ } else if (result == 1) {
+ m_Buffer.AppendChar(L' ');
+ if (m_pObjArray) {
+ m_pObjArray->Add(NULL);
+ m_pObjArray->Add(NULL);
+ }
+ } else if (result == -1) {
+ m_pLastObj = pObj;
+ return FALSE;
+ } else if (result == 3) {
+ item_index = 1;
}
- FX_FLOAT spacing = 0;
- for (; item_index < nItems; item_index ++) {
- CPDF_TextObjectItem item;
- pObj->GetItemInfo(item_index, &item);
- if (item.m_CharCode == (FX_DWORD) - 1) {
- CFX_WideString wstr = m_Buffer.GetWideString();
- if (wstr.IsEmpty() || wstr.GetAt(wstr.GetLength() - 1) == L' ') {
- continue;
- }
- FX_FLOAT fontsize_h = pObj->m_TextState.GetFontSizeH();
- spacing = -fontsize_h * (item.m_OriginX - Ignorekerning) / 1000;
- continue;
+ }
+ m_pLastObj = pObj;
+ int nItems = pObj->CountItems();
+ FX_FLOAT Ignorekerning = 0;
+ for (int i = 1; i < nItems - 1; i += 2) {
+ CPDF_TextObjectItem item;
+ pObj->GetItemInfo(i, &item);
+ if (item.m_CharCode == (FX_DWORD)-1) {
+ if (i == 1) {
+ Ignorekerning = item.m_OriginX;
+ } else if (Ignorekerning > item.m_OriginX) {
+ Ignorekerning = item.m_OriginX;
+ }
+ } else {
+ Ignorekerning = 0;
+ break;
+ }
+ }
+ FX_FLOAT spacing = 0;
+ for (; item_index < nItems; item_index++) {
+ CPDF_TextObjectItem item;
+ pObj->GetItemInfo(item_index, &item);
+ if (item.m_CharCode == (FX_DWORD)-1) {
+ CFX_WideString wstr = m_Buffer.GetWideString();
+ if (wstr.IsEmpty() || wstr.GetAt(wstr.GetLength() - 1) == L' ') {
+ continue;
+ }
+ FX_FLOAT fontsize_h = pObj->m_TextState.GetFontSizeH();
+ spacing = -fontsize_h * (item.m_OriginX - Ignorekerning) / 1000;
+ continue;
+ }
+ FX_FLOAT charSpace = pObj->m_TextState.GetObject()->m_CharSpace;
+ if (nItems > 3 && !spacing) {
+ charSpace = 0;
+ }
+ if ((spacing || charSpace) && item_index > 0) {
+ int last_width = 0;
+ FX_FLOAT fontsize_h = pObj->m_TextState.GetFontSizeH();
+ FX_DWORD space_charcode = pFont->CharCodeFromUnicode(' ');
+ FX_FLOAT threshold = 0;
+ if (space_charcode != -1) {
+ threshold = fontsize_h * pFont->GetCharWidthF(space_charcode) / 1000;
+ }
+ if (threshold > fontsize_h / 3) {
+ threshold = 0;
+ } else {
+ threshold /= 2;
+ }
+ if (threshold == 0) {
+ threshold = fontsize_h;
+ int this_width = FXSYS_abs(GetCharWidth(item.m_CharCode, pFont));
+ threshold = this_width > last_width ? (FX_FLOAT)this_width
+ : (FX_FLOAT)last_width;
+ int nDivide = 6;
+ if (threshold < 300) {
+ nDivide = 2;
+ } else if (threshold < 500) {
+ nDivide = 4;
+ } else if (threshold < 700) {
+ nDivide = 5;
}
- FX_FLOAT charSpace = pObj->m_TextState.GetObject()->m_CharSpace;
- if(nItems > 3 && !spacing) {
- charSpace = 0;
+ threshold = threshold / nDivide;
+ threshold = fontsize_h * threshold / 1000;
+ }
+ if (charSpace > 0.001) {
+ spacing += matrix.TransformDistance(charSpace);
+ } else if (charSpace < -0.001) {
+ spacing -= matrix.TransformDistance(FXSYS_fabs(charSpace));
+ }
+ if (threshold && (spacing && spacing >= threshold)) {
+ m_Buffer.AppendChar(L' ');
+ if (m_pObjArray) {
+ m_pObjArray->Add(NULL);
+ m_pObjArray->Add(NULL);
}
- if((spacing || charSpace) && item_index > 0) {
- int last_width = 0;
- FX_FLOAT fontsize_h = pObj->m_TextState.GetFontSizeH();
- FX_DWORD space_charcode = pFont->CharCodeFromUnicode(' ');
- FX_FLOAT threshold = 0;
- if (space_charcode != -1) {
- threshold = fontsize_h * pFont->GetCharWidthF(space_charcode) / 1000 ;
- }
- if(threshold > fontsize_h / 3) {
- threshold = 0;
- } else {
- threshold /= 2;
- }
- if (threshold == 0) {
- threshold = fontsize_h;
- int this_width = FXSYS_abs(GetCharWidth(item.m_CharCode, pFont));
- threshold = this_width > last_width ? (FX_FLOAT)this_width : (FX_FLOAT)last_width;
- int nDivide = 6;
- if (threshold < 300) {
- nDivide = 2;
- } else if (threshold < 500) {
- nDivide = 4;
- } else if (threshold < 700) {
- nDivide = 5;
- }
- threshold = threshold / nDivide;
- threshold = fontsize_h * threshold / 1000;
- }
- if(charSpace > 0.001) {
- spacing += matrix.TransformDistance(charSpace);
- } else if(charSpace < -0.001) {
- spacing -= matrix.TransformDistance(FXSYS_fabs(charSpace));
- }
- if (threshold && (spacing && spacing >= threshold) ) {
- m_Buffer.AppendChar(L' ');
- if (m_pObjArray) {
- m_pObjArray->Add(NULL);
- m_pObjArray->Add(NULL);
- }
- }
- if (item.m_CharCode == (FX_DWORD) - 1) {
- continue;
- }
- spacing = 0;
- }
- CFX_WideString unicode_str = pFont->UnicodeFromCharCode(item.m_CharCode);
- if (unicode_str.IsEmpty()) {
- m_Buffer.AppendChar((FX_WCHAR)item.m_CharCode);
- if (m_pObjArray) {
- m_pObjArray->Add((void*)pObj);
- m_pObjArray->Add((void*)(intptr_t)item_index);
- }
- } else {
- m_Buffer << unicode_str;
- if (m_pObjArray) {
- for (int i = 0; i < unicode_str.GetLength(); i ++) {
- m_pObjArray->Add((void*)pObj);
- m_pObjArray->Add((void*)(intptr_t)item_index);
- }
- }
+ }
+ if (item.m_CharCode == (FX_DWORD)-1) {
+ continue;
+ }
+ spacing = 0;
+ }
+ CFX_WideString unicode_str = pFont->UnicodeFromCharCode(item.m_CharCode);
+ if (unicode_str.IsEmpty()) {
+ m_Buffer.AppendChar((FX_WCHAR)item.m_CharCode);
+ if (m_pObjArray) {
+ m_pObjArray->Add((void*)pObj);
+ m_pObjArray->Add((void*)(intptr_t)item_index);
+ }
+ } else {
+ m_Buffer << unicode_str;
+ if (m_pObjArray) {
+ for (int i = 0; i < unicode_str.GetLength(); i++) {
+ m_pObjArray->Add((void*)pObj);
+ m_pObjArray->Add((void*)(intptr_t)item_index);
}
+ }
}
- return FALSE;
+ }
+ return FALSE;
}
-void _PDF_GetTextStream_Unicode(CFX_WideTextBuf& buffer, CPDF_PageObjects* pPage, FX_BOOL bUseLF,
- CFX_PtrArray* pObjArray)
-{
- CPDF_TextStream textstream(buffer, bUseLF, pObjArray);
- FX_POSITION pos = pPage->GetFirstObjectPosition();
- while (pos) {
- CPDF_PageObject* pObject = pPage->GetNextObject(pos);
- if (pObject == NULL) {
- continue;
- }
- if (pObject->m_Type != PDFPAGE_TEXT) {
- continue;
- }
- textstream.ProcessObject((CPDF_TextObject*)pObject, FALSE);
+void _PDF_GetTextStream_Unicode(CFX_WideTextBuf& buffer,
+ CPDF_PageObjects* pPage,
+ FX_BOOL bUseLF,
+ CFX_PtrArray* pObjArray) {
+ CPDF_TextStream textstream(buffer, bUseLF, pObjArray);
+ FX_POSITION pos = pPage->GetFirstObjectPosition();
+ while (pos) {
+ CPDF_PageObject* pObject = pPage->GetNextObject(pos);
+ if (pObject == NULL) {
+ continue;
+ }
+ if (pObject->m_Type != PDFPAGE_TEXT) {
+ continue;
}
+ textstream.ProcessObject((CPDF_TextObject*)pObject, FALSE);
+ }
}
-CFX_WideString PDF_GetFirstTextLine_Unicode(CPDF_Document* pDoc, CPDF_Dictionary* pPage)
-{
- CFX_WideTextBuf buffer;
- buffer.EstimateSize(0, 1024);
- CPDF_Page page;
- page.Load(pDoc, pPage);
- CPDF_ParseOptions options;
- options.m_bTextOnly = TRUE;
- options.m_bSeparateForm = FALSE;
- page.ParseContent(&options);
- CPDF_TextStream textstream(buffer, FALSE, NULL);
- FX_POSITION pos = page.GetFirstObjectPosition();
- while (pos) {
- CPDF_PageObject* pObject = page.GetNextObject(pos);
- if (pObject->m_Type != PDFPAGE_TEXT) {
- continue;
- }
- if (textstream.ProcessObject((CPDF_TextObject*)pObject, TRUE)) {
- break;
- }
+CFX_WideString PDF_GetFirstTextLine_Unicode(CPDF_Document* pDoc,
+ CPDF_Dictionary* pPage) {
+ CFX_WideTextBuf buffer;
+ buffer.EstimateSize(0, 1024);
+ CPDF_Page page;
+ page.Load(pDoc, pPage);
+ CPDF_ParseOptions options;
+ options.m_bTextOnly = TRUE;
+ options.m_bSeparateForm = FALSE;
+ page.ParseContent(&options);
+ CPDF_TextStream textstream(buffer, FALSE, NULL);
+ FX_POSITION pos = page.GetFirstObjectPosition();
+ while (pos) {
+ CPDF_PageObject* pObject = page.GetNextObject(pos);
+ if (pObject->m_Type != PDFPAGE_TEXT) {
+ continue;
+ }
+ if (textstream.ProcessObject((CPDF_TextObject*)pObject, TRUE)) {
+ break;
}
- return buffer.GetWideString();
+ }
+ return buffer.GetWideString();
}
diff --git a/core/src/fpdftext/text_int.h b/core/src/fpdftext/text_int.h
index 7f15be1b0a..f92ca549fe 100644
--- a/core/src/fpdftext/text_int.h
+++ b/core/src/fpdftext/text_int.h
@@ -11,200 +11,224 @@ class CPDF_TextPage;
class CPDF_LinkExtract;
class CPDF_TextPageFind;
class CPDF_DocProgressiveSearch;
-#define FPDFTEXT_CHAR_ERROR -1
-#define FPDFTEXT_CHAR_NORMAL 0
-#define FPDFTEXT_CHAR_GENERATED 1
-#define FPDFTEXT_CHAR_UNUNICODE 2
-#define FPDFTEXT_CHAR_HYPHEN 3
-#define FPDFTEXT_CHAR_PIECE 4
-#define FPDFTEXT_MC_PASS 0
-#define FPDFTEXT_MC_DONE 1
-#define FPDFTEXT_MC_DELAY 2
+#define FPDFTEXT_CHAR_ERROR -1
+#define FPDFTEXT_CHAR_NORMAL 0
+#define FPDFTEXT_CHAR_GENERATED 1
+#define FPDFTEXT_CHAR_UNUNICODE 2
+#define FPDFTEXT_CHAR_HYPHEN 3
+#define FPDFTEXT_CHAR_PIECE 4
+#define FPDFTEXT_MC_PASS 0
+#define FPDFTEXT_MC_DONE 1
+#define FPDFTEXT_MC_DELAY 2
typedef struct _PAGECHAR_INFO {
- int m_CharCode;
- FX_WCHAR m_Unicode;
- FX_FLOAT m_OriginX;
- FX_FLOAT m_OriginY;
- int32_t m_Flag;
- CFX_FloatRect m_CharBox;
- CPDF_TextObject* m_pTextObj;
- CFX_AffineMatrix m_Matrix;
- int m_Index;
+ int m_CharCode;
+ FX_WCHAR m_Unicode;
+ FX_FLOAT m_OriginX;
+ FX_FLOAT m_OriginY;
+ int32_t m_Flag;
+ CFX_FloatRect m_CharBox;
+ CPDF_TextObject* m_pTextObj;
+ CFX_AffineMatrix m_Matrix;
+ int m_Index;
} PAGECHAR_INFO;
-typedef CFX_SegmentedArray<PAGECHAR_INFO> PAGECHAR_InfoArray;
+typedef CFX_SegmentedArray<PAGECHAR_INFO> PAGECHAR_InfoArray;
typedef struct {
- int m_Start;
- int m_nCount;
+ int m_Start;
+ int m_nCount;
} FPDF_SEGMENT;
typedef CFX_ArrayTemplate<FPDF_SEGMENT> SEGMENT_Array;
typedef struct {
- CPDF_TextObject* m_pTextObj;
- CFX_AffineMatrix m_formMatrix;
+ CPDF_TextObject* m_pTextObj;
+ CFX_AffineMatrix m_formMatrix;
} PDFTEXT_Obj;
typedef CFX_ArrayTemplate<PDFTEXT_Obj> LINEOBJ;
-class CPDF_TextPage: public IPDF_TextPage
-{
-public:
- CPDF_TextPage(const CPDF_Page* pPage, int flags = 0);
- CPDF_TextPage(const CPDF_PageObjects* pPage, int flags = 0);
- CPDF_TextPage(const CPDF_Page* pPage, CPDFText_ParseOptions ParserOptions);
- virtual FX_BOOL ParseTextPage();
- virtual void NormalizeObjects(FX_BOOL bNormalize);
- virtual FX_BOOL IsParsered() const
- {
- return m_IsParsered;
- }
- virtual ~CPDF_TextPage() {};
-public:
- virtual int CharIndexFromTextIndex(int TextIndex)const ;
- virtual int TextIndexFromCharIndex(int CharIndex)const;
- virtual int CountChars() const;
- virtual void GetCharInfo(int index, FPDF_CHAR_INFO & info) const;
- virtual void GetRectArray(int start, int nCount, CFX_RectArray& rectArray) const;
- virtual int GetIndexAtPos(CPDF_Point point, FX_FLOAT xTorelance, FX_FLOAT yTorelance) const;
- virtual int GetIndexAtPos(FX_FLOAT x, FX_FLOAT y, FX_FLOAT xTorelance,
- FX_FLOAT yTorelance) const;
- virtual CFX_WideString GetTextByRect(const CFX_FloatRect& rect) const;
- virtual void GetRectsArrayByRect(const CFX_FloatRect& rect, CFX_RectArray& resRectArray) const;
- virtual CFX_WideString GetPageText(int start = 0, int nCount = -1) const;
-
- virtual int CountRects(int start, int nCount);
- virtual void GetRect(int rectIndex, FX_FLOAT& left, FX_FLOAT& top
- , FX_FLOAT& right, FX_FLOAT &bottom) const;
- virtual FX_BOOL GetBaselineRotate(int rectIndex, int& Rotate);
- virtual FX_BOOL GetBaselineRotate(const CFX_FloatRect& rect, int& Rotate);
- virtual int CountBoundedSegments(FX_FLOAT left, FX_FLOAT top,
- FX_FLOAT right, FX_FLOAT bottom, FX_BOOL bContains = FALSE);
- virtual void GetBoundedSegment(int index, int& start, int& count) const;
- virtual int GetWordBreak(int index, int direction) const;
-public:
- const PAGECHAR_InfoArray* GetCharList() const
- {
- return &m_charList;
- }
- static FX_BOOL IsRectIntersect(const CFX_FloatRect& rect1, const CFX_FloatRect& rect2);
- static FX_BOOL IsLetter(FX_WCHAR unicode);
-private:
- FX_BOOL IsHyphen(FX_WCHAR curChar);
- bool IsControlChar(const PAGECHAR_INFO& charInfo);
- FX_BOOL GetBaselineRotate(int start, int end, int& Rotate);
- void ProcessObject();
- void ProcessFormObject(CPDF_FormObject* pFormObj, const CFX_AffineMatrix& formMatrix);
- void ProcessTextObject(PDFTEXT_Obj pObj);
- void ProcessTextObject(CPDF_TextObject* pTextObj, const CFX_AffineMatrix& formMatrix, FX_POSITION ObjPos);
- int ProcessInsertObject(const CPDF_TextObject* pObj, const CFX_AffineMatrix& formMatrix);
- FX_BOOL GenerateCharInfo(FX_WCHAR unicode, PAGECHAR_INFO& info);
- FX_BOOL IsSameAsPreTextObject(CPDF_TextObject* pTextObj, FX_POSITION ObjPos);
- FX_BOOL IsSameTextObject(CPDF_TextObject* pTextObj1, CPDF_TextObject* pTextObj2);
- int GetCharWidth(FX_DWORD charCode, CPDF_Font* pFont) const;
- void CloseTempLine();
- void OnPiece(IFX_BidiChar* pBidi, CFX_WideString& str);
- int32_t PreMarkedContent(PDFTEXT_Obj pObj);
- void ProcessMarkedContent(PDFTEXT_Obj pObj);
- void CheckMarkedContentObject(int32_t& start, int32_t& nCount) const;
- void FindPreviousTextObject(void);
- void AddCharInfoByLRDirection(CFX_WideString& str, int i);
- void AddCharInfoByRLDirection(CFX_WideString& str, int i);
- int32_t GetTextObjectWritingMode(const CPDF_TextObject* pTextObj);
- int32_t FindTextlineFlowDirection();
- void SwapTempTextBuf(int32_t iCharListStartAppend,
- int32_t iBufStartAppend);
- FX_BOOL IsRightToLeft(const CPDF_TextObject* pTextObj,
- const CPDF_Font* pFont,
- int nItems) const;
-protected:
- CPDFText_ParseOptions m_ParseOptions;
- CFX_WordArray m_CharIndex;
- const CPDF_PageObjects* m_pPage;
- PAGECHAR_InfoArray m_charList;
- CFX_WideTextBuf m_TextBuf;
- PAGECHAR_InfoArray m_TempCharList;
- CFX_WideTextBuf m_TempTextBuf;
- int m_parserflag;
- CPDF_TextObject* m_pPreTextObj;
- CFX_AffineMatrix m_perMatrix;
- FX_BOOL m_IsParsered;
- CFX_AffineMatrix m_DisplayMatrix;
-
- SEGMENT_Array m_Segment;
- CFX_RectArray m_SelRects;
- LINEOBJ m_LineObj;
- int32_t m_TextlineDir;
- CFX_FloatRect m_CurlineRect;
+class CPDF_TextPage : public IPDF_TextPage {
+ public:
+ CPDF_TextPage(const CPDF_Page* pPage, int flags = 0);
+ CPDF_TextPage(const CPDF_PageObjects* pPage, int flags = 0);
+ CPDF_TextPage(const CPDF_Page* pPage, CPDFText_ParseOptions ParserOptions);
+ virtual FX_BOOL ParseTextPage();
+ virtual void NormalizeObjects(FX_BOOL bNormalize);
+ virtual FX_BOOL IsParsered() const { return m_IsParsered; }
+ virtual ~CPDF_TextPage(){};
+
+ public:
+ virtual int CharIndexFromTextIndex(int TextIndex) const;
+ virtual int TextIndexFromCharIndex(int CharIndex) const;
+ virtual int CountChars() const;
+ virtual void GetCharInfo(int index, FPDF_CHAR_INFO& info) const;
+ virtual void GetRectArray(int start,
+ int nCount,
+ CFX_RectArray& rectArray) const;
+ virtual int GetIndexAtPos(CPDF_Point point,
+ FX_FLOAT xTorelance,
+ FX_FLOAT yTorelance) const;
+ virtual int GetIndexAtPos(FX_FLOAT x,
+ FX_FLOAT y,
+ FX_FLOAT xTorelance,
+ FX_FLOAT yTorelance) const;
+ virtual CFX_WideString GetTextByRect(const CFX_FloatRect& rect) const;
+ virtual void GetRectsArrayByRect(const CFX_FloatRect& rect,
+ CFX_RectArray& resRectArray) const;
+ virtual CFX_WideString GetPageText(int start = 0, int nCount = -1) const;
+
+ virtual int CountRects(int start, int nCount);
+ virtual void GetRect(int rectIndex,
+ FX_FLOAT& left,
+ FX_FLOAT& top,
+ FX_FLOAT& right,
+ FX_FLOAT& bottom) const;
+ virtual FX_BOOL GetBaselineRotate(int rectIndex, int& Rotate);
+ virtual FX_BOOL GetBaselineRotate(const CFX_FloatRect& rect, int& Rotate);
+ virtual int CountBoundedSegments(FX_FLOAT left,
+ FX_FLOAT top,
+ FX_FLOAT right,
+ FX_FLOAT bottom,
+ FX_BOOL bContains = FALSE);
+ virtual void GetBoundedSegment(int index, int& start, int& count) const;
+ virtual int GetWordBreak(int index, int direction) const;
+
+ public:
+ const PAGECHAR_InfoArray* GetCharList() const { return &m_charList; }
+ static FX_BOOL IsRectIntersect(const CFX_FloatRect& rect1,
+ const CFX_FloatRect& rect2);
+ static FX_BOOL IsLetter(FX_WCHAR unicode);
+
+ private:
+ FX_BOOL IsHyphen(FX_WCHAR curChar);
+ bool IsControlChar(const PAGECHAR_INFO& charInfo);
+ FX_BOOL GetBaselineRotate(int start, int end, int& Rotate);
+ void ProcessObject();
+ void ProcessFormObject(CPDF_FormObject* pFormObj,
+ const CFX_AffineMatrix& formMatrix);
+ void ProcessTextObject(PDFTEXT_Obj pObj);
+ void ProcessTextObject(CPDF_TextObject* pTextObj,
+ const CFX_AffineMatrix& formMatrix,
+ FX_POSITION ObjPos);
+ int ProcessInsertObject(const CPDF_TextObject* pObj,
+ const CFX_AffineMatrix& formMatrix);
+ FX_BOOL GenerateCharInfo(FX_WCHAR unicode, PAGECHAR_INFO& info);
+ FX_BOOL IsSameAsPreTextObject(CPDF_TextObject* pTextObj, FX_POSITION ObjPos);
+ FX_BOOL IsSameTextObject(CPDF_TextObject* pTextObj1,
+ CPDF_TextObject* pTextObj2);
+ int GetCharWidth(FX_DWORD charCode, CPDF_Font* pFont) const;
+ void CloseTempLine();
+ void OnPiece(IFX_BidiChar* pBidi, CFX_WideString& str);
+ int32_t PreMarkedContent(PDFTEXT_Obj pObj);
+ void ProcessMarkedContent(PDFTEXT_Obj pObj);
+ void CheckMarkedContentObject(int32_t& start, int32_t& nCount) const;
+ void FindPreviousTextObject(void);
+ void AddCharInfoByLRDirection(CFX_WideString& str, int i);
+ void AddCharInfoByRLDirection(CFX_WideString& str, int i);
+ int32_t GetTextObjectWritingMode(const CPDF_TextObject* pTextObj);
+ int32_t FindTextlineFlowDirection();
+ void SwapTempTextBuf(int32_t iCharListStartAppend, int32_t iBufStartAppend);
+ FX_BOOL IsRightToLeft(const CPDF_TextObject* pTextObj,
+ const CPDF_Font* pFont,
+ int nItems) const;
+
+ protected:
+ CPDFText_ParseOptions m_ParseOptions;
+ CFX_WordArray m_CharIndex;
+ const CPDF_PageObjects* m_pPage;
+ PAGECHAR_InfoArray m_charList;
+ CFX_WideTextBuf m_TextBuf;
+ PAGECHAR_InfoArray m_TempCharList;
+ CFX_WideTextBuf m_TempTextBuf;
+ int m_parserflag;
+ CPDF_TextObject* m_pPreTextObj;
+ CFX_AffineMatrix m_perMatrix;
+ FX_BOOL m_IsParsered;
+ CFX_AffineMatrix m_DisplayMatrix;
+
+ SEGMENT_Array m_Segment;
+ CFX_RectArray m_SelRects;
+ LINEOBJ m_LineObj;
+ int32_t m_TextlineDir;
+ CFX_FloatRect m_CurlineRect;
};
-class CPDF_TextPageFind: public IPDF_TextPageFind
-{
-public:
- CPDF_TextPageFind(const IPDF_TextPage* pTextPage);
- virtual ~CPDF_TextPageFind() {};
-public:
- virtual FX_BOOL FindFirst(const CFX_WideString& findwhat, int flags, int startPos = 0);
- virtual FX_BOOL FindNext();
- virtual FX_BOOL FindPrev();
-
- virtual void GetRectArray(CFX_RectArray& rects) const;
- virtual int GetCurOrder() const;
- virtual int GetMatchedCount()const;
-protected:
- void ExtractFindWhat(const CFX_WideString& findwhat);
- FX_BOOL IsMatchWholeWord(const CFX_WideString& csPageText, int startPos, int endPos);
- FX_BOOL ExtractSubString(CFX_WideString& rString, const FX_WCHAR* lpszFullString,
- int iSubString, FX_WCHAR chSep);
- CFX_WideString MakeReverse(const CFX_WideString& str);
- int ReverseFind(const CFX_WideString& csPageText, const CFX_WideString& csWord, int nStartPos, int& WordLength);
- int GetCharIndex(int index) const;
-private:
- CFX_WordArray m_CharIndex;
- const IPDF_TextPage* m_pTextPage;
- CFX_WideString m_strText;
- CFX_WideString m_findWhat;
- int m_flags;
- CFX_WideStringArray m_csFindWhatArray;
- int m_findNextStart;
- int m_findPreStart;
- FX_BOOL m_bMatchCase;
- FX_BOOL m_bMatchWholeWord;
- int m_resStart;
- int m_resEnd;
- CFX_RectArray m_resArray;
- FX_BOOL m_IsFind;
+class CPDF_TextPageFind : public IPDF_TextPageFind {
+ public:
+ CPDF_TextPageFind(const IPDF_TextPage* pTextPage);
+ virtual ~CPDF_TextPageFind(){};
+
+ public:
+ virtual FX_BOOL FindFirst(const CFX_WideString& findwhat,
+ int flags,
+ int startPos = 0);
+ virtual FX_BOOL FindNext();
+ virtual FX_BOOL FindPrev();
+
+ virtual void GetRectArray(CFX_RectArray& rects) const;
+ virtual int GetCurOrder() const;
+ virtual int GetMatchedCount() const;
+
+ protected:
+ void ExtractFindWhat(const CFX_WideString& findwhat);
+ FX_BOOL IsMatchWholeWord(const CFX_WideString& csPageText,
+ int startPos,
+ int endPos);
+ FX_BOOL ExtractSubString(CFX_WideString& rString,
+ const FX_WCHAR* lpszFullString,
+ int iSubString,
+ FX_WCHAR chSep);
+ CFX_WideString MakeReverse(const CFX_WideString& str);
+ int ReverseFind(const CFX_WideString& csPageText,
+ const CFX_WideString& csWord,
+ int nStartPos,
+ int& WordLength);
+ int GetCharIndex(int index) const;
+
+ private:
+ CFX_WordArray m_CharIndex;
+ const IPDF_TextPage* m_pTextPage;
+ CFX_WideString m_strText;
+ CFX_WideString m_findWhat;
+ int m_flags;
+ CFX_WideStringArray m_csFindWhatArray;
+ int m_findNextStart;
+ int m_findPreStart;
+ FX_BOOL m_bMatchCase;
+ FX_BOOL m_bMatchWholeWord;
+ int m_resStart;
+ int m_resEnd;
+ CFX_RectArray m_resArray;
+ FX_BOOL m_IsFind;
};
-class CPDF_LinkExt
-{
-public:
- CPDF_LinkExt() {};
- int m_Start;
- int m_Count;
- CFX_WideString m_strUrl;
- virtual ~CPDF_LinkExt() {};
+class CPDF_LinkExt {
+ public:
+ CPDF_LinkExt(){};
+ int m_Start;
+ int m_Count;
+ CFX_WideString m_strUrl;
+ virtual ~CPDF_LinkExt(){};
};
typedef CFX_ArrayTemplate<CPDF_LinkExt*> LINK_InfoArray;
-class CPDF_LinkExtract: public IPDF_LinkExtract
-{
-public:
- CPDF_LinkExtract();
- virtual ~CPDF_LinkExtract();
- virtual FX_BOOL ExtractLinks(const IPDF_TextPage* pTextPage);
- virtual FX_BOOL IsExtract() const
- {
- return m_IsParserd;
- }
-public:
- virtual int CountLinks() const;
- virtual CFX_WideString GetURL(int index) const;
- virtual void GetBoundedSegment(int index, int& start, int& count) const;
- virtual void GetRects(int index, CFX_RectArray& rects)const;
-protected:
- void parserLink();
- void DeleteLinkList();
- FX_BOOL CheckWebLink(CFX_WideString& strBeCheck);
- FX_BOOL CheckMailLink(CFX_WideString& str);
- FX_BOOL AppendToLinkList(int start, int count, const CFX_WideString& strUrl);
-private:
- LINK_InfoArray m_LinkList;
- const CPDF_TextPage* m_pTextPage;
- CFX_WideString m_strPageText;
- FX_BOOL m_IsParserd;
+class CPDF_LinkExtract : public IPDF_LinkExtract {
+ public:
+ CPDF_LinkExtract();
+ virtual ~CPDF_LinkExtract();
+ virtual FX_BOOL ExtractLinks(const IPDF_TextPage* pTextPage);
+ virtual FX_BOOL IsExtract() const { return m_IsParserd; }
+
+ public:
+ virtual int CountLinks() const;
+ virtual CFX_WideString GetURL(int index) const;
+ virtual void GetBoundedSegment(int index, int& start, int& count) const;
+ virtual void GetRects(int index, CFX_RectArray& rects) const;
+
+ protected:
+ void parserLink();
+ void DeleteLinkList();
+ FX_BOOL CheckWebLink(CFX_WideString& strBeCheck);
+ FX_BOOL CheckMailLink(CFX_WideString& str);
+ FX_BOOL AppendToLinkList(int start, int count, const CFX_WideString& strUrl);
+
+ private:
+ LINK_InfoArray m_LinkList;
+ const CPDF_TextPage* m_pTextPage;
+ CFX_WideString m_strPageText;
+ FX_BOOL m_IsParserd;
};
FX_STRSIZE FX_Unicode_GetNormalization(FX_WCHAR wch, FX_WCHAR* pDst);
void NormalizeString(CFX_WideString& str);
diff --git a/core/src/fpdftext/txtproc.h b/core/src/fpdftext/txtproc.h
index 275aabd53b..22088f2450 100644
--- a/core/src/fpdftext/txtproc.h
+++ b/core/src/fpdftext/txtproc.h
@@ -7,66 +7,77 @@
#ifndef CORE_SRC_FPDFTEXT_TXTPROC_H_
#define CORE_SRC_FPDFTEXT_TXTPROC_H_
-class CTextColumn
-{
-public:
- FX_FLOAT m_AvgPos;
- int m_Count;
- int m_TextPos;
+class CTextColumn {
+ public:
+ FX_FLOAT m_AvgPos;
+ int m_Count;
+ int m_TextPos;
};
-class CTextBox
-{
-public:
- CFX_WideString m_Text;
- FX_FLOAT m_Left;
- FX_FLOAT m_Right;
- FX_FLOAT m_SpaceWidth;
- FX_FLOAT m_Top;
- FX_FLOAT m_Bottom;
- FX_FLOAT m_FontSizeV;
- CTextColumn* m_pColumn;
+class CTextBox {
+ public:
+ CFX_WideString m_Text;
+ FX_FLOAT m_Left;
+ FX_FLOAT m_Right;
+ FX_FLOAT m_SpaceWidth;
+ FX_FLOAT m_Top;
+ FX_FLOAT m_Bottom;
+ FX_FLOAT m_FontSizeV;
+ CTextColumn* m_pColumn;
};
-class CTextBaseLine
-{
-public:
- CTextBaseLine();
- ~CTextBaseLine();
- void InsertTextBox(FX_FLOAT leftx, FX_FLOAT rightx, FX_FLOAT topy, FX_FLOAT bottomy,
- FX_FLOAT spacew, FX_FLOAT fontsize_v, const CFX_WideString& str);
- FX_BOOL GetWidth(FX_FLOAT& leftx, FX_FLOAT& rightx);
- FX_BOOL CanMerge(CTextBaseLine* pOther);
- void Merge(CTextBaseLine* pOther);
- void MergeBoxes();
- void CountChars(int& count, FX_FLOAT& width, int& minchars);
- void WriteOutput(CFX_WideString& str, FX_FLOAT leftx, FX_FLOAT width, int iWidth);
- FX_FLOAT m_BaseLine;
- FX_FLOAT m_Top;
- FX_FLOAT m_Bottom;
- FX_FLOAT m_MaxFontSizeV;
- CFX_PtrArray m_TextList;
+class CTextBaseLine {
+ public:
+ CTextBaseLine();
+ ~CTextBaseLine();
+ void InsertTextBox(FX_FLOAT leftx,
+ FX_FLOAT rightx,
+ FX_FLOAT topy,
+ FX_FLOAT bottomy,
+ FX_FLOAT spacew,
+ FX_FLOAT fontsize_v,
+ const CFX_WideString& str);
+ FX_BOOL GetWidth(FX_FLOAT& leftx, FX_FLOAT& rightx);
+ FX_BOOL CanMerge(CTextBaseLine* pOther);
+ void Merge(CTextBaseLine* pOther);
+ void MergeBoxes();
+ void CountChars(int& count, FX_FLOAT& width, int& minchars);
+ void WriteOutput(CFX_WideString& str,
+ FX_FLOAT leftx,
+ FX_FLOAT width,
+ int iWidth);
+ FX_FLOAT m_BaseLine;
+ FX_FLOAT m_Top;
+ FX_FLOAT m_Bottom;
+ FX_FLOAT m_MaxFontSizeV;
+ CFX_PtrArray m_TextList;
};
class CPDF_PageObject;
class CPDF_TextObject;
-class CTextPage
-{
-public:
- CTextPage();
- ~CTextPage();
- void ProcessObject(CPDF_PageObject* pObj);
- CTextBaseLine* InsertTextBox(CTextBaseLine* pBaseLine, FX_FLOAT basey, FX_FLOAT leftx,
- FX_FLOAT rightx, FX_FLOAT topy, FX_FLOAT bottomy, FX_FLOAT spacew, FX_FLOAT fontsize_v,
- CFX_ByteString& str, CPDF_Font* pFont);
- void WriteOutput(CFX_WideStringArray& lines, int iMinWidth);
- FX_BOOL m_bAutoWidth;
- FX_BOOL m_bKeepColumn;
- FX_BOOL m_bBreakSpace;
+class CTextPage {
+ public:
+ CTextPage();
+ ~CTextPage();
+ void ProcessObject(CPDF_PageObject* pObj);
+ CTextBaseLine* InsertTextBox(CTextBaseLine* pBaseLine,
+ FX_FLOAT basey,
+ FX_FLOAT leftx,
+ FX_FLOAT rightx,
+ FX_FLOAT topy,
+ FX_FLOAT bottomy,
+ FX_FLOAT spacew,
+ FX_FLOAT fontsize_v,
+ CFX_ByteString& str,
+ CPDF_Font* pFont);
+ void WriteOutput(CFX_WideStringArray& lines, int iMinWidth);
+ FX_BOOL m_bAutoWidth;
+ FX_BOOL m_bKeepColumn;
+ FX_BOOL m_bBreakSpace;
-private:
- CFX_PtrArray m_BaseLines;
- CFX_PtrArray m_TextColumns;
- void FindColumns();
- CTextColumn* FindColumn(FX_FLOAT xpos);
- void BreakSpace(CPDF_TextObject* pTextObj);
+ private:
+ CFX_PtrArray m_BaseLines;
+ CFX_PtrArray m_TextColumns;
+ void FindColumns();
+ CTextColumn* FindColumn(FX_FLOAT xpos);
+ void BreakSpace(CPDF_TextObject* pTextObj);
};
#endif // CORE_SRC_FPDFTEXT_TXTPROC_H_
diff --git a/core/src/fpdftext/unicodenormalization.cpp b/core/src/fpdftext/unicodenormalization.cpp
index 468900c7d8..446c6940eb 100644
--- a/core/src/fpdftext/unicodenormalization.cpp
+++ b/core/src/fpdftext/unicodenormalization.cpp
@@ -12,65 +12,60 @@ extern const FX_WCHAR g_UnicodeData_Normalization_Map2[];
extern const FX_WCHAR g_UnicodeData_Normalization_Map3[];
extern const FX_WCHAR g_UnicodeData_Normalization_Map4[];
const FX_WCHAR* g_UnicodeData_Normalization_Maps[5] = {
- NULL,
- g_UnicodeData_Normalization_Map1,
- g_UnicodeData_Normalization_Map2,
- g_UnicodeData_Normalization_Map3,
- g_UnicodeData_Normalization_Map4
-};
-FX_STRSIZE FX_Unicode_GetNormalization(FX_WCHAR wch, FX_WCHAR* pDst)
-{
- wch = wch & 0xFFFF;
- FX_WCHAR wFind = g_UnicodeData_Normalization[wch];
- if (!wFind) {
- if (pDst) {
- *pDst = wch;
- }
- return 1;
- }
- if(wFind >= 0x8000) {
- wch = wFind - 0x8000;
- wFind = 1;
- } else {
- wch = wFind & 0x0FFF;
- wFind >>= 12;
- }
- const FX_WCHAR* pMap = g_UnicodeData_Normalization_Maps[wFind];
- if (pMap == g_UnicodeData_Normalization_Map4) {
- pMap = g_UnicodeData_Normalization_Map4 + wch;
- wFind = (FX_WCHAR)(*pMap ++);
- } else {
- pMap += wch;
- }
+ NULL, g_UnicodeData_Normalization_Map1, g_UnicodeData_Normalization_Map2,
+ g_UnicodeData_Normalization_Map3, g_UnicodeData_Normalization_Map4};
+FX_STRSIZE FX_Unicode_GetNormalization(FX_WCHAR wch, FX_WCHAR* pDst) {
+ wch = wch & 0xFFFF;
+ FX_WCHAR wFind = g_UnicodeData_Normalization[wch];
+ if (!wFind) {
if (pDst) {
- FX_WCHAR n = wFind;
- while (n --) {
- *pDst ++ = *pMap ++;
- }
+ *pDst = wch;
}
- return (FX_STRSIZE)wFind;
-}
-FX_STRSIZE FX_WideString_GetNormalization(const CFX_WideStringC& wsSrc, FX_WCHAR* pDst)
-{
- FX_STRSIZE nCount = 0;
- for (FX_STRSIZE len = 0; len < wsSrc.GetLength(); len ++) {
- FX_WCHAR wch = wsSrc.GetAt(len);
- if(pDst) {
- nCount += FX_Unicode_GetNormalization(wch, pDst + nCount);
- } else {
- nCount += FX_Unicode_GetNormalization(wch, pDst);
- }
+ return 1;
+ }
+ if (wFind >= 0x8000) {
+ wch = wFind - 0x8000;
+ wFind = 1;
+ } else {
+ wch = wFind & 0x0FFF;
+ wFind >>= 12;
+ }
+ const FX_WCHAR* pMap = g_UnicodeData_Normalization_Maps[wFind];
+ if (pMap == g_UnicodeData_Normalization_Map4) {
+ pMap = g_UnicodeData_Normalization_Map4 + wch;
+ wFind = (FX_WCHAR)(*pMap++);
+ } else {
+ pMap += wch;
+ }
+ if (pDst) {
+ FX_WCHAR n = wFind;
+ while (n--) {
+ *pDst++ = *pMap++;
}
- return nCount;
+ }
+ return (FX_STRSIZE)wFind;
}
-FX_STRSIZE FX_WideString_GetNormalization(const CFX_WideStringC& wsSrc, CFX_WideString &wsDst)
-{
- FX_STRSIZE nLen = FX_WideString_GetNormalization(wsSrc, (FX_WCHAR*)NULL);
- if (!nLen) {
- return 0;
+FX_STRSIZE FX_WideString_GetNormalization(const CFX_WideStringC& wsSrc,
+ FX_WCHAR* pDst) {
+ FX_STRSIZE nCount = 0;
+ for (FX_STRSIZE len = 0; len < wsSrc.GetLength(); len++) {
+ FX_WCHAR wch = wsSrc.GetAt(len);
+ if (pDst) {
+ nCount += FX_Unicode_GetNormalization(wch, pDst + nCount);
+ } else {
+ nCount += FX_Unicode_GetNormalization(wch, pDst);
}
- FX_WCHAR* pBuf = wsDst.GetBuffer(nLen);
- FX_WideString_GetNormalization(wsSrc, pBuf);
- wsDst.ReleaseBuffer(nLen);
- return nLen;
+ }
+ return nCount;
+}
+FX_STRSIZE FX_WideString_GetNormalization(const CFX_WideStringC& wsSrc,
+ CFX_WideString& wsDst) {
+ FX_STRSIZE nLen = FX_WideString_GetNormalization(wsSrc, (FX_WCHAR*)NULL);
+ if (!nLen) {
+ return 0;
+ }
+ FX_WCHAR* pBuf = wsDst.GetBuffer(nLen);
+ FX_WideString_GetNormalization(wsSrc, pBuf);
+ wsDst.ReleaseBuffer(nLen);
+ return nLen;
}
diff --git a/core/src/fpdftext/unicodenormalizationdata.cpp b/core/src/fpdftext/unicodenormalizationdata.cpp
index 1b903ecc2d..8185a6467b 100644
--- a/core/src/fpdftext/unicodenormalizationdata.cpp
+++ b/core/src/fpdftext/unicodenormalizationdata.cpp
@@ -6,4656 +6,8264 @@
#include "../../include/fxcrt/fx_system.h"
extern const FX_WCHAR g_UnicodeData_Normalization[65536] = {
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x8000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8001, 0x0000, 0x2000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2002, 0x8002, 0x0000, 0x2004, 0x0000, 0x0000, 0x8003,
- 0x8004, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8005, 0x0000, 0x8006, 0x0000, 0x0000, 0x0000, 0x8007, 0x8008,
- 0x0000, 0x0000, 0x8009, 0x800A, 0x800B, 0x800C, 0x0000, 0x0000, 0x800D, 0x800E, 0x800F, 0x0000, 0x3000, 0x3003, 0x3006, 0x0000,
- 0x8010, 0x8011, 0x8012, 0x8013, 0x8014, 0x8015, 0x0000, 0x8016, 0x8017, 0x8018, 0x8019, 0x801A, 0x801B, 0x801C, 0x801D, 0x801E,
- 0x801F, 0x8020, 0x8021, 0x8022, 0x8023, 0x8024, 0x8025, 0x0000, 0x8026, 0x8027, 0x8028, 0x8029, 0x802A, 0x802B, 0x0000, 0x0000,
- 0x802C, 0x802D, 0x802E, 0x802F, 0x8030, 0x8031, 0x0000, 0x8032, 0x8033, 0x8034, 0x8035, 0x8036, 0x8037, 0x8038, 0x8039, 0x803A,
- 0x0000, 0x803B, 0x803C, 0x803D, 0x803E, 0x803F, 0x8040, 0x0000, 0x8041, 0x8042, 0x8043, 0x8044, 0x8045, 0x8046, 0x0000, 0x8047,
- 0x8048, 0x8049, 0x804A, 0x804B, 0x804C, 0x804D, 0x804E, 0x804F, 0x8050, 0x8051, 0x8052, 0x8053, 0x8054, 0x8055, 0x8056, 0x8057,
- 0x8058, 0x8059, 0x805A, 0x805B, 0x805C, 0x805D, 0x805E, 0x805F, 0x8060, 0x8061, 0x8062, 0x8063, 0x8064, 0x8065, 0x8066, 0x8067,
- 0x8068, 0x8069, 0x806A, 0x806B, 0x806C, 0x806D, 0x806E, 0x806F, 0x8070, 0x8071, 0x8072, 0x8073, 0x8074, 0x8075, 0x8076, 0x8077,
- 0x8078, 0x0000, 0x2006, 0x2008, 0x8079, 0x807A, 0x807B, 0x807C, 0x807D, 0x807E, 0x807F, 0x8080, 0x8081, 0x8082, 0x8083, 0x8084,
- 0x8085, 0x8086, 0x8087, 0x8088, 0x8089, 0x808A, 0x808B, 0x808C, 0x808D, 0x808E, 0x0000, 0x0000, 0x808F, 0x8090, 0x8091, 0x8092,
- 0x8093, 0x8094, 0x200A, 0x200C, 0x8095, 0x8096, 0x8097, 0x8098, 0x8099, 0x809A, 0x809B, 0x809C, 0x809D, 0x809E, 0x809F, 0x80A0,
- 0x80A1, 0x80A2, 0x80A3, 0x80A4, 0x80A5, 0x80A6, 0x80A7, 0x80A8, 0x80A9, 0x80AA, 0x80AB, 0x80AC, 0x80AD, 0x80AE, 0x80AF, 0x80B0,
- 0x80B1, 0x80B2, 0x80B3, 0x80B4, 0x80B5, 0x80B6, 0x80B7, 0x80B8, 0x80B9, 0x80BA, 0x80BB, 0x80BC, 0x80BD, 0x80BE, 0x80BF, 0x80C0,
- 0x80C1, 0x80C2, 0x80C3, 0x80C4, 0x0000, 0x0000, 0x0000, 0x80C5, 0x80C6, 0x80C7, 0x80C8, 0x80C9, 0x80CA, 0x0000, 0x80CB, 0x0000,
- 0x80CC, 0x80CD, 0x80CE, 0x80CF, 0x0000, 0x0000, 0x0000, 0x80D0, 0x80D1, 0x80D2, 0x80D3, 0x0000, 0x80D4, 0x80D5, 0x80D6, 0x80D7,
- 0x80D8, 0x80D9, 0x0000, 0x0000, 0x80DA, 0x80DB, 0x0000, 0x0000, 0x0000, 0x0000, 0x80DC, 0x80DD, 0x80DE, 0x80DF, 0x80E0, 0x80E1,
- 0x80E2, 0x0000, 0x80E3, 0x80E4, 0x80E5, 0x80E6, 0x80E7, 0x0000, 0x80E8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x200E, 0x2010, 0x2012, 0x2014, 0x2016, 0x2018, 0x201A, 0x201C, 0x201E, 0x80E9, 0x80EA, 0x80EB,
- 0x80EC, 0x80ED, 0x80EE, 0x80EF, 0x80F0, 0x80F1, 0x80F2, 0x80F3, 0x80F4, 0x80F5, 0x80F6, 0x80F7, 0x80F8, 0x80F9, 0x80FA, 0x80FB,
- 0x80FC, 0x80FD, 0x80FE, 0x80FF, 0x8100, 0x8101, 0x8102, 0x8103, 0x8104, 0x8105, 0x8106, 0x8107, 0x8108, 0x8109, 0x810A, 0x810B,
- 0x810C, 0x2020, 0x2022, 0x2024, 0x810D, 0x810E, 0x0000, 0x0000, 0x810F, 0x8110, 0x8111, 0x8112, 0x8113, 0x8114, 0x8115, 0x8116,
- 0x8117, 0x8118, 0x8119, 0x811A, 0x811B, 0x811C, 0x811D, 0x811E, 0x811F, 0x8120, 0x8121, 0x8122, 0x8123, 0x8124, 0x8125, 0x8126,
- 0x8127, 0x8128, 0x8129, 0x812A, 0x812B, 0x812C, 0x812D, 0x812E, 0x812F, 0x8130, 0x8131, 0x8132, 0x0000, 0x0000, 0x8133, 0x8134,
- 0x8135, 0x8136, 0x0000, 0x0000, 0x8137, 0x8138, 0x8139, 0x813A, 0x813B, 0x813C, 0x813D, 0x813E, 0x813F, 0x8140, 0x8141, 0x8142,
- 0x8143, 0x8144, 0x8145, 0x8146, 0x8147, 0x8148, 0x8149, 0x814A, 0x2026, 0x2028, 0x814B, 0x814C, 0x814D, 0x814E, 0x814F, 0x8150,
- 0x8151, 0x0000, 0x0000, 0x8152, 0x8153, 0x8154, 0x8155, 0x8156, 0x8157, 0x8158, 0x8159, 0x815A, 0x815B, 0x815C, 0x815D, 0x815E,
- 0x815F, 0x0000, 0x8160, 0x8161, 0x8162, 0x8163, 0x8164, 0x8165, 0x8166, 0x0000, 0x8167, 0x8168, 0x8169, 0x816A, 0x816B, 0x816C,
- 0x816D, 0x816E, 0x816F, 0x0000, 0x0000, 0x8170, 0x8171, 0x0000, 0x8172, 0x0000, 0x8173, 0x8174, 0x8175, 0x8176, 0x0000, 0x8177,
- 0x8178, 0x8179, 0x817A, 0x817B, 0x817C, 0x817D, 0x202A, 0x0000, 0x0000, 0x817E, 0x817F, 0x8180, 0x8181, 0x8182, 0x8183, 0x8184,
- 0x8185, 0x8186, 0x8187, 0x0000, 0x8188, 0x8189, 0x818A, 0x818B, 0x818C, 0x818D, 0x0000, 0x818E, 0x818F, 0x8190, 0x8191, 0x8192,
- 0x8193, 0x8194, 0x0000, 0x8195, 0x0000, 0x0000, 0x0000, 0x8196, 0x0000, 0x8197, 0x8198, 0x8199, 0x819A, 0x819B, 0x819C, 0x819D,
- 0x819E, 0x0000, 0x0000, 0x202C, 0x202E, 0x2030, 0x2032, 0x2034, 0x2036, 0x2038, 0x203A, 0x203C, 0x0000, 0x0000, 0x819F, 0x81A0,
- 0x81A1, 0x81A2, 0x81A3, 0x81A4, 0x81A5, 0x81A6, 0x81A7, 0x81A8, 0x81A9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x81AA, 0x81AB, 0x81AC, 0x81AD, 0x81AE, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x81AF, 0x81B0, 0x0000, 0x81B1, 0x81B2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x81B3, 0x81B4, 0x81B5, 0x81B6, 0x81B7, 0x81B8, 0x81B9, 0x81BA, 0x81BB, 0x81BC, 0x81BD, 0x81BE, 0x81BF,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x81C0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x81C1, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x81C2, 0x81C3, 0x81C4, 0x81C5, 0x81C6, 0x81C7, 0x81C8, 0x0000, 0x81C9, 0x0000, 0x81CA, 0x81CB,
- 0x81CC, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x81CD, 0x81CE, 0x81CF, 0x81D0, 0x81D1, 0x81D2,
- 0x81D3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x81D4, 0x81D5, 0x81D6, 0x81D7, 0x81D8, 0x0000,
- 0x81D9, 0x81DA, 0x81DB, 0x81DC, 0x81DD, 0x81DE, 0x81DF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x81E0, 0x81E1, 0x81E2, 0x0000, 0x81E3, 0x81E4, 0x0000, 0x0000, 0x0000, 0x81E5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x81E6, 0x81E7, 0x0000, 0x81E8, 0x0000, 0x0000, 0x0000, 0x81E9, 0x0000, 0x0000, 0x0000, 0x0000, 0x81EA, 0x81EB, 0x81EC, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x81ED, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x81EE, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x81EF, 0x81F0, 0x0000, 0x81F1, 0x0000, 0x0000, 0x0000, 0x81F2, 0x0000, 0x0000, 0x0000, 0x0000, 0x81F3, 0x81F4, 0x81F5, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x81F6, 0x81F7, 0x0000, 0x0000, 0x81F8, 0x81F9, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x81FA, 0x81FB, 0x0000, 0x0000, 0x0000, 0x0000, 0x81FC, 0x81FD, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x81FE, 0x81FF, 0x0000, 0x0000, 0x8200, 0x8201,
- 0x8202, 0x8203, 0x8204, 0x8205, 0x8206, 0x8207, 0x8208, 0x8209, 0x820A, 0x820B, 0x820C, 0x820D, 0x820E, 0x820F, 0x8210, 0x8211,
- 0x8212, 0x8213, 0x8214, 0x8215, 0x203E, 0x2040, 0x8216, 0x8217, 0x0000, 0x0000, 0x8218, 0x8219, 0x821A, 0x821B, 0x0000, 0x0000,
- 0x821C, 0x821D, 0x821E, 0x821F, 0x2042, 0x2044, 0x8220, 0x8221, 0x8222, 0x8223, 0x0000, 0x0000, 0x8224, 0x8225, 0x8226, 0x8227,
- 0x0000, 0x8228, 0x8229, 0x822A, 0x822B, 0x822C, 0x822D, 0x822E, 0x822F, 0x8230, 0x8231, 0x0000, 0x0000, 0x8232, 0x8233, 0x0000,
- 0x8234, 0x8235, 0x8236, 0x8237, 0x2046, 0x2048, 0x8238, 0x8239, 0x0000, 0x0000, 0x823A, 0x823B, 0x823C, 0x823D, 0x823E, 0x823F,
- 0x0000, 0x0000, 0x8240, 0x8241, 0x8242, 0x8243, 0x8244, 0x8245, 0x0000, 0x0000, 0x8246, 0x8247, 0x8248, 0x8249, 0x824A, 0x824B,
- 0x824C, 0x824D, 0x824E, 0x824F, 0x8250, 0x8251, 0x8252, 0x8253, 0x8254, 0x8255, 0x8256, 0x8257, 0x8258, 0x8259, 0x825A, 0x825B,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x825C, 0x825D, 0x825E, 0x825F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x204A, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x204C, 0x204E, 0x2050, 0x2052, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x2054, 0x0000, 0x2056, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x2058, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x205A, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x205C, 0x0000, 0x0000, 0x205E, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2060, 0x2062, 0x2064, 0x2066, 0x2068, 0x206A, 0x206C, 0x206E,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2070, 0x2072, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2074, 0x2076, 0x0000, 0x2078,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x207A, 0x0000, 0x0000, 0x207C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x207E, 0x2080, 0x2082, 0x0000, 0x0000, 0x2084, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2086, 0x0000, 0x0000, 0x2088, 0x208A, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x208C, 0x208E, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x2090, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2092, 0x2094, 0x2096, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2098, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x209A, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x209C, 0x209E, 0x0000, 0x20A0, 0x20A2, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x20A4, 0x20A6, 0x20A8, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x20AA, 0x0000, 0x20AC, 0x20AE, 0x20B0, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x20B2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x20B4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x20B6, 0x20B8, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8260, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x20BA, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x20BC, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x20BE, 0x0000, 0x0000, 0x0000, 0x0000, 0x20C0, 0x0000, 0x0000, 0x0000, 0x0000, 0x20C2, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x20C4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x20C6, 0x0000, 0x20C8, 0x20CA, 0x20CC, 0x20CE, 0x20D0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x20D2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x20D4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x20D6, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x20D8, 0x0000, 0x0000, 0x0000, 0x0000, 0x20DA, 0x0000, 0x0000, 0x0000, 0x0000, 0x20DC, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x20DE, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x20E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8261, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x20E2, 0x0000, 0x20E4, 0x0000, 0x20E6, 0x0000, 0x20E8, 0x0000, 0x20EA, 0x0000,
- 0x0000, 0x0000, 0x20EC, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x20EE, 0x0000, 0x20F0, 0x0000, 0x0000,
- 0x20F2, 0x20F4, 0x0000, 0x20F6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8262, 0x8263, 0x8264, 0x8265,
- 0x8266, 0x8267, 0x8268, 0x8269, 0x826A, 0x826B, 0x826C, 0x826D, 0x826E, 0x826F, 0x8270, 0x0000, 0x8271, 0x8272, 0x8273, 0x8274,
- 0x8275, 0x8276, 0x8277, 0x8278, 0x8279, 0x827A, 0x827B, 0x827C, 0x827D, 0x827E, 0x827F, 0x8280, 0x8281, 0x8282, 0x0000, 0x8283,
- 0x8284, 0x8285, 0x8286, 0x8287, 0x8288, 0x8289, 0x828A, 0x828B, 0x828C, 0x828D, 0x828E, 0x828F, 0x8290, 0x8291, 0x8292, 0x8293,
- 0x8294, 0x8295, 0x8296, 0x8297, 0x8298, 0x8299, 0x829A, 0x829B, 0x829C, 0x829D, 0x829E, 0x0000, 0x829F, 0x82A0, 0x82A1, 0x82A2,
- 0x82A3, 0x82A4, 0x82A5, 0x82A6, 0x82A7, 0x82A8, 0x82A9, 0x82AA, 0x82AB, 0x0000, 0x20F8, 0x82AC, 0x0000, 0x82AD, 0x82AE, 0x82AF,
- 0x82B0, 0x82B1, 0x82B2, 0x82B3, 0x82B4, 0x82B5, 0x82B6, 0x82B7, 0x82B8, 0x82B9, 0x82BA, 0x82BB, 0x82BC, 0x82BD, 0x82BE, 0x82BF,
- 0x82C0, 0x82C1, 0x82C2, 0x82C3, 0x82C4, 0x82C5, 0x82C6, 0x0000, 0x82C7, 0x0000, 0x0000, 0x82C8, 0x82C9, 0x82CA, 0x82CB, 0x82CC,
- 0x82CD, 0x82CE, 0x82CF, 0x82D0, 0x82D1, 0x82D2, 0x82D3, 0x82D4, 0x82D5, 0x82D6, 0x82D7, 0x82D8, 0x82D9, 0x82DA, 0x82DB, 0x82DC,
- 0x82DD, 0x82DE, 0x82DF, 0x82E0, 0x82E1, 0x82E2, 0x82E3, 0x82E4, 0x82E5, 0x82E6, 0x82E7, 0x82E8, 0x82E9, 0x82EA, 0x82EB, 0x82EC,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x82ED, 0x82EE, 0x82EF, 0x82F0, 0x82F1, 0x82F2, 0x82F3, 0x82F4, 0x82F5, 0x82F6, 0x82F7, 0x82F8, 0x82F9, 0x82FA, 0x82FB, 0x82FC,
- 0x82FD, 0x82FE, 0x82FF, 0x8300, 0x8301, 0x8302, 0x8303, 0x8304, 0x8305, 0x8306, 0x8307, 0x8308, 0x8309, 0x830A, 0x830B, 0x830C,
- 0x830D, 0x830E, 0x830F, 0x8310, 0x8311, 0x8312, 0x8313, 0x8314, 0x8315, 0x8316, 0x8317, 0x8318, 0x8319, 0x831A, 0x831B, 0x831C,
- 0x831D, 0x831E, 0x831F, 0x8320, 0x8321, 0x8322, 0x8323, 0x8324, 0x8325, 0x8326, 0x8327, 0x8328, 0x8329, 0x832A, 0x832B, 0x832C,
- 0x832D, 0x832E, 0x832F, 0x8330, 0x8331, 0x8332, 0x8333, 0x8334, 0x8335, 0x8336, 0x8337, 0x8338, 0x8339, 0x833A, 0x833B, 0x833C,
- 0x833D, 0x833E, 0x833F, 0x8340, 0x8341, 0x8342, 0x8343, 0x8344, 0x8345, 0x8346, 0x8347, 0x8348, 0x8349, 0x834A, 0x834B, 0x834C,
- 0x834D, 0x834E, 0x834F, 0x8350, 0x8351, 0x8352, 0x8353, 0x8354, 0x8355, 0x8356, 0x8357, 0x8358, 0x8359, 0x835A, 0x835B, 0x835C,
- 0x835D, 0x835E, 0x835F, 0x8360, 0x8361, 0x8362, 0x8363, 0x8364, 0x8365, 0x8366, 0x8367, 0x8368, 0x8369, 0x836A, 0x836B, 0x836C,
- 0x836D, 0x836E, 0x836F, 0x8370, 0x8371, 0x8372, 0x8373, 0x8374, 0x8375, 0x8376, 0x8377, 0x8378, 0x8379, 0x837A, 0x837B, 0x837C,
- 0x837D, 0x837E, 0x837F, 0x8380, 0x8381, 0x8382, 0x8383, 0x8384, 0x8385, 0x8386, 0x8387, 0x8388, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x8389, 0x838A, 0x838B, 0x838C, 0x838D, 0x838E, 0x838F, 0x8390, 0x8391, 0x8392, 0x8393, 0x8394, 0x8395, 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, 0x83B3, 0x83B4, 0x83B5, 0x83B6, 0x83B7, 0x83B8,
- 0x83B9, 0x83BA, 0x83BB, 0x83BC, 0x83BD, 0x83BE, 0x83BF, 0x83C0, 0x83C1, 0x83C2, 0x83C3, 0x83C4, 0x83C5, 0x83C6, 0x83C7, 0x83C8,
- 0x83C9, 0x83CA, 0x83CB, 0x83CC, 0x83CD, 0x83CE, 0x83CF, 0x83D0, 0x83D1, 0x83D2, 0x83D3, 0x83D4, 0x83D5, 0x83D6, 0x83D7, 0x83D8,
- 0x83D9, 0x83DA, 0x83DB, 0x83DC, 0x83DD, 0x83DE, 0x83DF, 0x83E0, 0x83E1, 0x83E2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x83E3, 0x83E4, 0x83E5, 0x83E6, 0x83E7, 0x83E8, 0x83E9, 0x83EA, 0x83EB, 0x83EC, 0x83ED, 0x83EE, 0x83EF, 0x83F0, 0x83F1, 0x83F2,
- 0x83F3, 0x83F4, 0x83F5, 0x83F6, 0x83F7, 0x83F8, 0x0000, 0x0000, 0x83F9, 0x83FA, 0x83FB, 0x83FC, 0x83FD, 0x83FE, 0x0000, 0x0000,
- 0x83FF, 0x8400, 0x8401, 0x8402, 0x8403, 0x8404, 0x8405, 0x8406, 0x8407, 0x8408, 0x8409, 0x840A, 0x840B, 0x840C, 0x840D, 0x840E,
- 0x840F, 0x8410, 0x8411, 0x8412, 0x8413, 0x8414, 0x8415, 0x8416, 0x8417, 0x8418, 0x8419, 0x841A, 0x841B, 0x841C, 0x841D, 0x841E,
- 0x841F, 0x8420, 0x8421, 0x8422, 0x8423, 0x8424, 0x0000, 0x0000, 0x8425, 0x8426, 0x8427, 0x8428, 0x8429, 0x842A, 0x0000, 0x0000,
- 0x842B, 0x842C, 0x842D, 0x842E, 0x842F, 0x8430, 0x8431, 0x8432, 0x0000, 0x8433, 0x0000, 0x8434, 0x0000, 0x8435, 0x0000, 0x8436,
- 0x8437, 0x8438, 0x8439, 0x843A, 0x843B, 0x843C, 0x843D, 0x843E, 0x843F, 0x8440, 0x8441, 0x8442, 0x8443, 0x8444, 0x8445, 0x8446,
- 0x8447, 0x8448, 0x8449, 0x844A, 0x844B, 0x844C, 0x844D, 0x844E, 0x844F, 0x8450, 0x8451, 0x8452, 0x8453, 0x8454, 0x0000, 0x0000,
- 0x8455, 0x8456, 0x8457, 0x8458, 0x8459, 0x845A, 0x845B, 0x845C, 0x845D, 0x845E, 0x845F, 0x8460, 0x8461, 0x8462, 0x8463, 0x8464,
- 0x8465, 0x8466, 0x8467, 0x8468, 0x8469, 0x846A, 0x846B, 0x846C, 0x846D, 0x846E, 0x846F, 0x8470, 0x8471, 0x8472, 0x8473, 0x8474,
- 0x8475, 0x8476, 0x8477, 0x8478, 0x8479, 0x847A, 0x847B, 0x847C, 0x847D, 0x847E, 0x847F, 0x8480, 0x8481, 0x8482, 0x8483, 0x8484,
- 0x8485, 0x8486, 0x8487, 0x8488, 0x8489, 0x0000, 0x848A, 0x848B, 0x848C, 0x848D, 0x848E, 0x848F, 0x8490, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x8491, 0x8492, 0x8493, 0x0000, 0x8494, 0x8495, 0x8496, 0x8497, 0x8498, 0x8499, 0x849A, 0x0000, 0x0000, 0x0000,
- 0x849B, 0x849C, 0x849D, 0x849E, 0x0000, 0x0000, 0x849F, 0x84A0, 0x84A1, 0x84A2, 0x84A3, 0x84A4, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x84A5, 0x84A6, 0x84A7, 0x84A8, 0x84A9, 0x84AA, 0x84AB, 0x84AC, 0x84AD, 0x84AE, 0x84AF, 0x84B0, 0x84B1, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x84B2, 0x84B3, 0x84B4, 0x0000, 0x84B5, 0x84B6, 0x84B7, 0x84B8, 0x84B9, 0x84BA, 0x84BB, 0x84BC, 0x84BD, 0x0000,
- 0x84BE, 0x84BF, 0x84C0, 0x84C1, 0x84C2, 0x84C3, 0x84C4, 0x84C5, 0x84C6, 0x84C7, 0x84C8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x84C9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x84CA, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x84CB, 0x20FA, 0x3009, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x84CC,
- 0x0000, 0x0000, 0x0000, 0x20FC, 0x300C, 0x0000, 0x20FE, 0x300F, 0x0000, 0x0000, 0x0000, 0x0000, 0x2100, 0x0000, 0x2102, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2104, 0x2106, 0x2108, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x84CD,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x84CE, 0x84CF, 0x0000, 0x0000, 0x84D0, 0x84D1, 0x84D2, 0x84D3, 0x84D4, 0x84D5, 0x84D6, 0x84D7, 0x84D8, 0x84D9, 0x84DA, 0x84DB,
- 0x84DC, 0x84DD, 0x84DE, 0x84DF, 0x84E0, 0x84E1, 0x84E2, 0x84E3, 0x84E4, 0x84E5, 0x84E6, 0x84E7, 0x84E8, 0x84E9, 0x84EA, 0x0000,
- 0x84EB, 0x84EC, 0x84ED, 0x84EE, 0x84EF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x210A, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x3012, 0x3015, 0x84F0, 0x210C, 0x0000, 0x3018, 0x301B, 0x84F1, 0x0000, 0x210E, 0x84F2, 0x84F3, 0x84F4, 0x84F5, 0x84F6, 0x84F7,
- 0x84F8, 0x84F9, 0x84FA, 0x84FB, 0x0000, 0x84FC, 0x2110, 0x0000, 0x0000, 0x84FD, 0x84FE, 0x84FF, 0x8500, 0x8501, 0x8502, 0x8503,
- 0x2112, 0x301E, 0x2114, 0x8504, 0x8505, 0x0000, 0x8506, 0x8507, 0x8508, 0x0000, 0x8509, 0x850A, 0x850B, 0x850C, 0x850D, 0x850E,
- 0x850F, 0x8510, 0x0000, 0x8511, 0x8512, 0x8513, 0x8514, 0x8515, 0x8516, 0x8517, 0x0000, 0x3021, 0x8518, 0x8519, 0x851A, 0x851B,
- 0x851C, 0x0000, 0x0000, 0x0000, 0x0000, 0x851D, 0x851E, 0x851F, 0x8520, 0x8521, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x3024, 0x3027, 0x4005, 0x302A, 0x302D, 0x3030, 0x3033, 0x3036, 0x3039, 0x303C, 0x303F, 0x3042, 0x3045, 0x3048, 0x304B, 0x2116,
- 0x8522, 0x2118, 0x304E, 0x211A, 0x8523, 0x211C, 0x3051, 0x400A, 0x211E, 0x8524, 0x2120, 0x3054, 0x8525, 0x8526, 0x8527, 0x8528,
- 0x8529, 0x2122, 0x3057, 0x2124, 0x852A, 0x2126, 0x305A, 0x400F, 0x2128, 0x852B, 0x212A, 0x305D, 0x852C, 0x852D, 0x852E, 0x852F,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3060, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x212C, 0x212E, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2130, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2132, 0x2134, 0x2136,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x8530, 0x0000, 0x0000, 0x0000, 0x0000, 0x8531, 0x0000, 0x0000, 0x8532, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x2138, 0x0000, 0x213A, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x213C, 0x3063, 0x0000, 0x213E,
- 0x3066, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x2140, 0x0000, 0x0000, 0x2142, 0x0000, 0x0000, 0x2144, 0x0000, 0x2146, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x2148, 0x0000, 0x214A, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x214C, 0x214E, 0x2150,
- 0x2152, 0x2154, 0x0000, 0x0000, 0x2156, 0x2158, 0x0000, 0x0000, 0x215A, 0x215C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x215E, 0x2160, 0x0000, 0x0000, 0x2162, 0x2164, 0x0000, 0x0000, 0x2166, 0x2168, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x216A, 0x216C, 0x216E, 0x2170,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x2172, 0x2174, 0x2176, 0x2178, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x217A, 0x217C, 0x217E, 0x2180, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8533, 0x8534, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x3069, 0x306C, 0x306F, 0x3072, 0x3075, 0x3078, 0x307B, 0x307E, 0x2182, 0x2184, 0x2186, 0x2188, 0x218A, 0x218C, 0x218E, 0x2190,
- 0x3081, 0x3084, 0x3087, 0x308A, 0x308D, 0x3090, 0x3093, 0x3096, 0x3099, 0x2192, 0x309C, 0x309F, 0x2194, 0x2196, 0x2198, 0x219A,
- 0x219C, 0x30A2, 0x8535, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x8536, 0x8537, 0x8538, 0x8539, 0x853A, 0x853B, 0x853C, 0x853D, 0x853E, 0x219E, 0x21A0, 0x21A2, 0x21A4, 0x21A6, 0x21A8, 0x21AA,
- 0x21AC, 0x21AE, 0x21B0, 0x21B2, 0x30A5, 0x30A8, 0x30AB, 0x30AE, 0x30B1, 0x30B4, 0x30B7, 0x30BA, 0x30BD, 0x4014, 0x4019, 0x401E,
- 0x4023, 0x4028, 0x402D, 0x4032, 0x4037, 0x403C, 0x4041, 0x4046, 0x21B4, 0x21B6, 0x21B8, 0x21BA, 0x21BC, 0x21BE, 0x21C0, 0x21C2,
- 0x21C4, 0x30C0, 0x30C3, 0x30C6, 0x30C9, 0x30CC, 0x30CF, 0x30D2, 0x30D5, 0x30D8, 0x30DB, 0x30DE, 0x30E1, 0x30E4, 0x30E7, 0x30EA,
- 0x30ED, 0x30F0, 0x30F3, 0x30F6, 0x30F9, 0x30FC, 0x30FF, 0x3102, 0x3105, 0x3108, 0x310B, 0x310E, 0x3111, 0x3114, 0x3117, 0x311A,
- 0x311D, 0x3120, 0x3123, 0x3126, 0x3129, 0x312C, 0x853F, 0x8540, 0x8541, 0x8542, 0x8543, 0x8544, 0x8545, 0x8546, 0x8547, 0x8548,
- 0x8549, 0x854A, 0x854B, 0x854C, 0x854D, 0x854E, 0x854F, 0x8550, 0x8551, 0x8552, 0x8553, 0x8554, 0x8555, 0x8556, 0x8557, 0x8558,
- 0x8559, 0x855A, 0x855B, 0x855C, 0x855D, 0x855E, 0x855F, 0x8560, 0x8561, 0x8562, 0x8563, 0x8564, 0x8565, 0x8566, 0x8567, 0x8568,
- 0x8569, 0x856A, 0x856B, 0x856C, 0x856D, 0x856E, 0x856F, 0x8570, 0x8571, 0x8572, 0x8573, 0x21C6, 0x21C8, 0x21CA, 0x21CC, 0x21CE,
- 0x21D0, 0x21D2, 0x21D4, 0x21D6, 0x21D8, 0x8574, 0x8575, 0x8576, 0x8577, 0x8578, 0x8579, 0x857A, 0x857B, 0x857C, 0x21DA, 0x857D,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x857E, 0x857F, 0x8580, 0x8581, 0x8582, 0x8583, 0x8584, 0x8585, 0x8586, 0x21DC,
- 0x8587, 0x8588, 0x8589, 0x858A, 0x858B, 0x858C, 0x858D, 0x858E, 0x858F, 0x21DE, 0x8590, 0x8591, 0x8592, 0x8593, 0x8594, 0x8595,
- 0x8596, 0x8597, 0x8598, 0x21E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x404B, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x312F, 0x21E2, 0x3132, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x21E4, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x8599, 0x859A, 0x859B, 0x859C, 0x859D, 0x859E, 0x859F, 0x85A0, 0x85A1, 0x85A2, 0x85A3, 0x85A4, 0x85A5, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x85A6, 0x85A7, 0x85A8, 0x85A9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x85AA, 0x85AB, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x85AC,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x85AD,
- 0x85AE, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x85AF, 0x0000, 0x0000, 0x85B0, 0x0000, 0x85B1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x85B2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x85B3, 0x0000, 0x0000, 0x0000, 0x0000, 0x85B4, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x85B5, 0x85B6, 0x0000, 0x0000, 0x0000, 0x85B7, 0x85B8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x85B9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x85BA, 0x85BB, 0x85BC, 0x85BD, 0x85BE, 0x85BF, 0x85C0, 0x85C1, 0x85C2, 0x85C3, 0x85C4, 0x85C5, 0x85C6, 0x85C7, 0x85C8, 0x85C9,
- 0x85CA, 0x85CB, 0x85CC, 0x85CD, 0x85CE, 0x85CF, 0x85D0, 0x85D1, 0x85D2, 0x85D3, 0x85D4, 0x85D5, 0x85D6, 0x85D7, 0x85D8, 0x85D9,
- 0x85DA, 0x85DB, 0x85DC, 0x85DD, 0x85DE, 0x85DF, 0x85E0, 0x85E1, 0x85E2, 0x85E3, 0x85E4, 0x85E5, 0x85E6, 0x85E7, 0x85E8, 0x85E9,
- 0x85EA, 0x85EB, 0x85EC, 0x85ED, 0x85EE, 0x85EF, 0x85F0, 0x85F1, 0x85F2, 0x85F3, 0x85F4, 0x85F5, 0x85F6, 0x85F7, 0x85F8, 0x85F9,
- 0x85FA, 0x85FB, 0x85FC, 0x85FD, 0x85FE, 0x85FF, 0x8600, 0x8601, 0x8602, 0x8603, 0x8604, 0x8605, 0x8606, 0x8607, 0x8608, 0x8609,
- 0x860A, 0x860B, 0x860C, 0x860D, 0x860E, 0x860F, 0x8610, 0x8611, 0x8612, 0x8613, 0x8614, 0x8615, 0x8616, 0x8617, 0x8618, 0x8619,
- 0x861A, 0x861B, 0x861C, 0x861D, 0x861E, 0x861F, 0x8620, 0x8621, 0x8622, 0x8623, 0x8624, 0x8625, 0x8626, 0x8627, 0x8628, 0x8629,
- 0x862A, 0x862B, 0x862C, 0x862D, 0x862E, 0x862F, 0x8630, 0x8631, 0x8632, 0x8633, 0x8634, 0x8635, 0x8636, 0x8637, 0x8638, 0x8639,
- 0x863A, 0x863B, 0x863C, 0x863D, 0x863E, 0x863F, 0x8640, 0x8641, 0x8642, 0x8643, 0x8644, 0x8645, 0x8646, 0x8647, 0x8648, 0x8649,
- 0x864A, 0x864B, 0x864C, 0x864D, 0x864E, 0x864F, 0x8650, 0x8651, 0x8652, 0x8653, 0x8654, 0x8655, 0x8656, 0x8657, 0x8658, 0x8659,
- 0x865A, 0x865B, 0x865C, 0x865D, 0x865E, 0x865F, 0x8660, 0x8661, 0x8662, 0x8663, 0x8664, 0x8665, 0x8666, 0x8667, 0x8668, 0x8669,
- 0x866A, 0x866B, 0x866C, 0x866D, 0x866E, 0x866F, 0x8670, 0x8671, 0x8672, 0x8673, 0x8674, 0x8675, 0x8676, 0x8677, 0x8678, 0x8679,
- 0x867A, 0x867B, 0x867C, 0x867D, 0x867E, 0x867F, 0x8680, 0x8681, 0x8682, 0x8683, 0x8684, 0x8685, 0x8686, 0x8687, 0x8688, 0x8689,
- 0x868A, 0x868B, 0x868C, 0x868D, 0x868E, 0x868F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x8690, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8691, 0x0000, 0x8692, 0x8693, 0x8694, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x21E6, 0x0000, 0x21E8, 0x0000,
- 0x21EA, 0x0000, 0x21EC, 0x0000, 0x21EE, 0x0000, 0x21F0, 0x0000, 0x21F2, 0x0000, 0x21F4, 0x0000, 0x21F6, 0x0000, 0x21F8, 0x0000,
- 0x21FA, 0x0000, 0x21FC, 0x0000, 0x0000, 0x21FE, 0x0000, 0x2200, 0x0000, 0x2202, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x2204, 0x2206, 0x0000, 0x2208, 0x220A, 0x0000, 0x220C, 0x220E, 0x0000, 0x2210, 0x2212, 0x0000, 0x2214, 0x2216, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x2218, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x221A, 0x221C, 0x0000, 0x221E, 0x2220,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2222, 0x0000, 0x2224, 0x0000,
- 0x2226, 0x0000, 0x2228, 0x0000, 0x222A, 0x0000, 0x222C, 0x0000, 0x222E, 0x0000, 0x2230, 0x0000, 0x2232, 0x0000, 0x2234, 0x0000,
- 0x2236, 0x0000, 0x2238, 0x0000, 0x0000, 0x223A, 0x0000, 0x223C, 0x0000, 0x223E, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x2240, 0x2242, 0x0000, 0x2244, 0x2246, 0x0000, 0x2248, 0x224A, 0x0000, 0x224C, 0x224E, 0x0000, 0x2250, 0x2252, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x2254, 0x0000, 0x0000, 0x2256, 0x2258, 0x225A, 0x225C, 0x0000, 0x0000, 0x0000, 0x225E, 0x2260,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x8695, 0x8696, 0x8697, 0x8698, 0x8699, 0x869A, 0x869B, 0x869C, 0x869D, 0x869E, 0x869F, 0x86A0, 0x86A1, 0x86A2, 0x86A3,
- 0x86A4, 0x86A5, 0x86A6, 0x86A7, 0x86A8, 0x86A9, 0x86AA, 0x86AB, 0x86AC, 0x86AD, 0x86AE, 0x86AF, 0x86B0, 0x86B1, 0x86B2, 0x86B3,
- 0x86B4, 0x86B5, 0x86B6, 0x86B7, 0x86B8, 0x86B9, 0x86BA, 0x86BB, 0x86BC, 0x86BD, 0x86BE, 0x86BF, 0x86C0, 0x86C1, 0x86C2, 0x86C3,
- 0x86C4, 0x86C5, 0x86C6, 0x86C7, 0x86C8, 0x86C9, 0x86CA, 0x86CB, 0x86CC, 0x86CD, 0x86CE, 0x86CF, 0x86D0, 0x86D1, 0x86D2, 0x86D3,
- 0x86D4, 0x86D5, 0x86D6, 0x86D7, 0x86D8, 0x86D9, 0x86DA, 0x86DB, 0x86DC, 0x86DD, 0x86DE, 0x86DF, 0x86E0, 0x86E1, 0x86E2, 0x86E3,
- 0x86E4, 0x86E5, 0x86E6, 0x86E7, 0x86E8, 0x86E9, 0x86EA, 0x86EB, 0x86EC, 0x86ED, 0x86EE, 0x86EF, 0x86F0, 0x86F1, 0x86F2, 0x0000,
- 0x0000, 0x0000, 0x86F3, 0x86F4, 0x86F5, 0x86F6, 0x86F7, 0x86F8, 0x86F9, 0x86FA, 0x86FB, 0x86FC, 0x86FD, 0x86FE, 0x86FF, 0x8700,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x3135, 0x3138, 0x313B, 0x313E, 0x3141, 0x3144, 0x3147, 0x314A, 0x314D, 0x3150, 0x3153, 0x3156, 0x3159, 0x315C, 0x4050, 0x4055,
- 0x405A, 0x405F, 0x4064, 0x4069, 0x406E, 0x4073, 0x4078, 0x407D, 0x4082, 0x4087, 0x408C, 0x4091, 0x4096, 0x409B, 0x40A3, 0x0000,
- 0x315F, 0x3162, 0x3165, 0x3168, 0x316B, 0x316E, 0x3171, 0x3174, 0x3177, 0x317A, 0x317D, 0x3180, 0x3183, 0x3186, 0x3189, 0x318C,
- 0x318F, 0x3192, 0x3195, 0x3198, 0x319B, 0x319E, 0x31A1, 0x31A4, 0x31A7, 0x31AA, 0x31AD, 0x31B0, 0x31B3, 0x31B6, 0x31B9, 0x31BC,
- 0x31BF, 0x31C2, 0x31C5, 0x31C8, 0x8701, 0x8702, 0x8703, 0x8704, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x31CB, 0x2262, 0x2264, 0x2266, 0x2268, 0x226A, 0x226C, 0x226E, 0x2270, 0x2272, 0x2274, 0x2276, 0x2278, 0x227A, 0x227C, 0x227E,
- 0x8705, 0x8706, 0x8707, 0x8708, 0x8709, 0x870A, 0x870B, 0x870C, 0x870D, 0x870E, 0x870F, 0x8710, 0x8711, 0x8712, 0x2280, 0x2282,
- 0x2284, 0x2286, 0x2288, 0x228A, 0x228C, 0x228E, 0x2290, 0x2292, 0x2294, 0x2296, 0x2298, 0x229A, 0x40AA, 0x40B0, 0x229C, 0x0000,
- 0x8713, 0x8714, 0x8715, 0x8716, 0x8717, 0x8718, 0x8719, 0x871A, 0x871B, 0x871C, 0x871D, 0x871E, 0x871F, 0x8720, 0x8721, 0x8722,
- 0x8723, 0x8724, 0x8725, 0x8726, 0x8727, 0x8728, 0x8729, 0x872A, 0x872B, 0x872C, 0x872D, 0x872E, 0x872F, 0x8730, 0x8731, 0x8732,
- 0x8733, 0x8734, 0x8735, 0x8736, 0x8737, 0x8738, 0x8739, 0x873A, 0x873B, 0x873C, 0x873D, 0x873E, 0x873F, 0x8740, 0x8741, 0x8742,
- 0x8743, 0x229E, 0x22A0, 0x22A2, 0x22A4, 0x22A6, 0x22A8, 0x22AA, 0x22AC, 0x22AE, 0x22B0, 0x22B2, 0x22B4, 0x22B6, 0x22B8, 0x22BA,
- 0x22BC, 0x22BE, 0x22C0, 0x22C2, 0x22C4, 0x22C6, 0x22C8, 0x22CA, 0x22CC, 0x31CE, 0x31D1, 0x31D4, 0x22CE, 0x31D7, 0x22D0, 0x31DA,
- 0x8744, 0x8745, 0x8746, 0x8747, 0x8748, 0x8749, 0x874A, 0x874B, 0x874C, 0x874D, 0x874E, 0x874F, 0x8750, 0x8751, 0x8752, 0x8753,
- 0x8754, 0x8755, 0x8756, 0x8757, 0x8758, 0x8759, 0x875A, 0x875B, 0x875C, 0x875D, 0x875E, 0x875F, 0x8760, 0x8761, 0x8762, 0x8763,
- 0x8764, 0x8765, 0x8766, 0x8767, 0x8768, 0x8769, 0x876A, 0x876B, 0x876C, 0x876D, 0x876E, 0x876F, 0x8770, 0x8771, 0x8772, 0x0000,
- 0x40B5, 0x40BA, 0x40BF, 0x31DD, 0x40C4, 0x31E0, 0x31E3, 0x40C9, 0x40CF, 0x31E6, 0x31E9, 0x31EC, 0x40D4, 0x40D9, 0x31EF, 0x31F2,
- 0x22D2, 0x31F5, 0x40DE, 0x40E3, 0x22D4, 0x40E8, 0x40EE, 0x40F5, 0x31F8, 0x40FB, 0x4101, 0x4107, 0x31FB, 0x31FE, 0x3201, 0x410C,
- 0x4111, 0x4117, 0x3204, 0x3207, 0x320A, 0x22D6, 0x22D8, 0x22DA, 0x22DC, 0x320D, 0x3210, 0x411C, 0x3213, 0x4122, 0x4127, 0x3216,
- 0x22DE, 0x22E0, 0x412D, 0x4133, 0x4138, 0x3219, 0x413E, 0x22E2, 0x321C, 0x321F, 0x3222, 0x3225, 0x3228, 0x4144, 0x322B, 0x22E4,
- 0x322E, 0x3231, 0x3234, 0x4149, 0x3237, 0x323A, 0x323D, 0x414E, 0x4154, 0x22E6, 0x4159, 0x22E8, 0x415F, 0x4164, 0x3240, 0x3243,
- 0x3246, 0x4169, 0x22EA, 0x3249, 0x416E, 0x22EC, 0x4173, 0x324C, 0x22EE, 0x22F0, 0x22F2, 0x22F4, 0x22F6, 0x22F8, 0x22FA, 0x22FC,
- 0x22FE, 0x2300, 0x324F, 0x3252, 0x3255, 0x3258, 0x325B, 0x325E, 0x3261, 0x3264, 0x3267, 0x326A, 0x326D, 0x3270, 0x3273, 0x3276,
- 0x3279, 0x327C, 0x2302, 0x2304, 0x327F, 0x2306, 0x2308, 0x230A, 0x3282, 0x3285, 0x230C, 0x230E, 0x2310, 0x2312, 0x2314, 0x4179,
- 0x2316, 0x2318, 0x231A, 0x231C, 0x231E, 0x2320, 0x2322, 0x2324, 0x3288, 0x417E, 0x2326, 0x2328, 0x232A, 0x232C, 0x232E, 0x2330,
- 0x2332, 0x328B, 0x328E, 0x3291, 0x3294, 0x2334, 0x2336, 0x2338, 0x233A, 0x233C, 0x233E, 0x2340, 0x2342, 0x2344, 0x2346, 0x3297,
- 0x329A, 0x2348, 0x329D, 0x32A0, 0x32A3, 0x234A, 0x32A6, 0x32A9, 0x4183, 0x234C, 0x32AC, 0x32AF, 0x32B2, 0x32B5, 0x4188, 0x418E,
- 0x234E, 0x2350, 0x2352, 0x2354, 0x2356, 0x2358, 0x235A, 0x235C, 0x235E, 0x2360, 0x2362, 0x2364, 0x2366, 0x2368, 0x236A, 0x236C,
- 0x236E, 0x2370, 0x4195, 0x2372, 0x2374, 0x2376, 0x419A, 0x32B8, 0x2378, 0x237A, 0x237C, 0x237E, 0x2380, 0x2382, 0x2384, 0x2386,
- 0x2388, 0x238A, 0x32BB, 0x238C, 0x238E, 0x32BE, 0x32C1, 0x2390, 0x419F, 0x32C4, 0x2392, 0x2394, 0x2396, 0x2398, 0x32C7, 0x32CA,
- 0x239A, 0x239C, 0x239E, 0x23A0, 0x23A2, 0x23A4, 0x23A6, 0x23A8, 0x23AA, 0x32CD, 0x32D0, 0x32D3, 0x32D6, 0x32D9, 0x32DC, 0x32DF,
- 0x32E2, 0x32E5, 0x32E8, 0x32EB, 0x32EE, 0x32F1, 0x32F4, 0x32F7, 0x32FA, 0x32FD, 0x3300, 0x3303, 0x3306, 0x3309, 0x330C, 0x330F,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8773,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8774, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8775, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8776, 0x0000,
- 0x0000, 0x0000, 0x8777, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8778, 0x0000, 0x0000, 0x0000, 0x0000, 0x8779, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x877A, 0x877B, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x877C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x877D, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x877E, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x877F, 0x8780, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x8781, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x8782, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8783, 0x0000, 0x0000, 0x8784, 0x0000, 0x8785, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x8786, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8787, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8788, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x8789, 0x878A, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x878B, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x878C, 0x0000, 0x0000, 0x0000, 0x0000, 0x878D, 0x0000, 0x878E, 0x878F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x8790, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8791, 0x0000, 0x8792,
- 0x0000, 0x0000, 0x0000, 0x8793, 0x8794, 0x8795, 0x0000, 0x8796, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8797, 0x0000,
- 0x0000, 0x0000, 0x8798, 0x0000, 0x0000, 0x8799, 0x0000, 0x0000, 0x0000, 0x879A, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x879B, 0x0000, 0x0000, 0x0000, 0x879C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x879D, 0x0000, 0x0000, 0x879E, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x879F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x87A0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x87A1, 0x0000, 0x87A2, 0x0000, 0x87A3, 0x0000, 0x0000, 0x0000, 0x0000, 0x87A4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x87A5, 0x0000, 0x0000, 0x0000, 0x87A6, 0x87A7, 0x0000, 0x0000, 0x87A8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x87A9,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x87AA, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x87AB, 0x0000, 0x0000, 0x0000, 0x0000, 0x87AC, 0x0000, 0x0000, 0x87AD, 0x87AE, 0x87AF, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x87B0, 0x0000, 0x0000, 0x0000, 0x0000, 0x87B1, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x87B2, 0x0000, 0x0000, 0x0000, 0x0000, 0x87B3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x87B4, 0x0000, 0x87B5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x87B6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x87B7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x87B8, 0x87B9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x87BA, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x87BB, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x87BC, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x87BD, 0x0000, 0x0000, 0x0000, 0x0000, 0x87BE, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x87BF, 0x0000, 0x0000, 0x87C0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x87C1, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x87C2, 0x0000, 0x87C3, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x87C4, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x87C5, 0x87C6, 0x0000, 0x87C7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x87C8, 0x0000, 0x0000, 0x0000, 0x87C9, 0x0000, 0x87CA, 0x87CB, 0x0000, 0x87CC, 0x87CD, 0x0000, 0x0000,
- 0x0000, 0x87CE, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x87CF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x87D0, 0x0000, 0x87D1, 0x0000, 0x87D2, 0x0000, 0x0000, 0x0000, 0x87D3, 0x87D4, 0x0000,
- 0x0000, 0x0000, 0x87D5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x87D6, 0x0000, 0x87D7, 0x0000, 0x87D8, 0x0000, 0x0000, 0x87D9, 0x0000, 0x0000, 0x87DA, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x87DB, 0x0000, 0x87DC,
- 0x0000, 0x87DD, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x87DE, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x87DF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x87E0, 0x0000, 0x87E1, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x87E2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x87E3, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x87E4, 0x0000, 0x87E5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x87E6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x87E7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x87E8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x87E9, 0x0000, 0x0000, 0x87EA, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x87EB, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x87EC, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x87ED, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x87EE, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x87EF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x87F0,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x87F1, 0x87F2,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x87F3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x87F4, 0x0000, 0x87F5, 0x0000, 0x87F6, 0x0000,
- 0x0000, 0x0000, 0x87F7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x87F8, 0x87F9, 0x0000, 0x0000, 0x87FA, 0x0000, 0x0000, 0x0000, 0x87FB, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x87FC, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x87FD, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x87FE, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x87FF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8800, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x8801, 0x0000, 0x8802, 0x8803, 0x0000, 0x0000, 0x0000, 0x0000, 0x8804, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8805, 0x0000, 0x0000, 0x0000, 0x0000, 0x8806, 0x8807,
- 0x8808, 0x0000, 0x0000, 0x0000, 0x0000, 0x8809, 0x0000, 0x0000, 0x880A, 0x0000, 0x0000, 0x0000, 0x0000, 0x880B, 0x0000, 0x0000,
- 0x0000, 0x880C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x880D, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x880E, 0x0000, 0x0000,
- 0x880F, 0x0000, 0x0000, 0x0000, 0x0000, 0x8810, 0x8811, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8812,
- 0x0000, 0x0000, 0x8813, 0x0000, 0x8814, 0x0000, 0x0000, 0x0000, 0x8815, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x8816, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8817, 0x0000, 0x0000, 0x0000, 0x0000, 0x8818, 0x0000, 0x0000, 0x0000,
- 0x8819, 0x0000, 0x0000, 0x0000, 0x0000, 0x881A, 0x0000, 0x0000, 0x0000, 0x881B, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x881C, 0x0000, 0x881D, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x881E, 0x881F, 0x8820, 0x0000, 0x8821, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x8822, 0x8823, 0x8824, 0x0000, 0x0000, 0x8825, 0x0000, 0x0000, 0x8826, 0x8827, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x8828, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8829, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x882A, 0x0000, 0x0000, 0x0000, 0x882B, 0x0000, 0x882C, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x882D, 0x882E, 0x0000, 0x0000, 0x882F, 0x0000, 0x8830, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x8831, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8832, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8833, 0x0000, 0x0000, 0x0000, 0x0000, 0x8834, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8835, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8836,
- 0x0000, 0x8837, 0x0000, 0x0000, 0x8838, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8839, 0x883A, 0x0000, 0x0000, 0x0000, 0x883B,
- 0x0000, 0x0000, 0x883C, 0x0000, 0x0000, 0x0000, 0x0000, 0x883D, 0x0000, 0x0000, 0x883E, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x883F, 0x0000, 0x8840, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8841, 0x0000, 0x0000, 0x0000, 0x8842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8843, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8844, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8845, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x8846, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8847, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8848, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x8849, 0x0000, 0x0000, 0x0000, 0x0000, 0x884A, 0x884B, 0x884C, 0x0000, 0x0000, 0x0000, 0x884D, 0x884E,
- 0x0000, 0x0000, 0x884F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8850, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8851,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8852, 0x0000, 0x8853, 0x8854, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x8855, 0x0000, 0x8856, 0x0000, 0x0000, 0x8857, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8858, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x8859, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x885A, 0x0000, 0x885B, 0x885C, 0x0000, 0x0000, 0x0000, 0x885D, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x885E, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x885F, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8860, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8861, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8862, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x8863, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8864, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8865, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8866, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8867,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8868, 0x8869, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x886A, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x886B, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x886C, 0x0000, 0x0000, 0x0000, 0x886D,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x886E, 0x0000, 0x0000, 0x886F, 0x8870, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8871, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x8872, 0x0000, 0x0000, 0x8873, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8874, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x8875, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8876, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8877, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8878, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8879, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x887A,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x887B, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x887C, 0x0000, 0x0000, 0x0000, 0x887D, 0x887E, 0x0000, 0x887F, 0x0000, 0x8880, 0x8881, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8882, 0x8883, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8884, 0x8885, 0x0000, 0x0000, 0x8886, 0x0000, 0x8887, 0x8888, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8889, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x888A, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x888B, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x888C, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x888D, 0x0000, 0x888E, 0x0000, 0x0000, 0x888F, 0x8890, 0x0000, 0x0000, 0x0000, 0x8891, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x8892, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x8893, 0x0000, 0x8894, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8895, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8896, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8897, 0x0000, 0x8898, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x8899, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x889A, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x889B, 0x0000, 0x0000, 0x889C, 0x0000, 0x0000, 0x889D, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x889E, 0x0000, 0x0000, 0x889F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x88A0, 0x0000, 0x88A1, 0x0000, 0x0000, 0x0000, 0x0000, 0x88A2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x88A3, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x88A4, 0x0000, 0x0000, 0x0000, 0x88A5, 0x0000, 0x88A6, 0x0000, 0x88A7, 0x88A8, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x88A9, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x88AA, 0x0000, 0x88AB, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x88AC, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x88AD, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x88AE, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x88AF, 0x0000, 0x0000, 0x88B0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x88B1, 0x0000, 0x0000, 0x88B2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x88B3, 0x88B4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x88B5,
- 0x0000, 0x0000, 0x0000, 0x88B6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x88B7, 0x88B8, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x88B9, 0x0000, 0x0000, 0x0000, 0x0000, 0x88BA, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x88BB, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x88BC, 0x88BD, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x88BE, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x88BF, 0x0000, 0x0000, 0x88C0, 0x0000, 0x88C1,
- 0x88C2, 0x88C3, 0x88C4, 0x88C5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x88C6, 0x0000, 0x0000, 0x88C7, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x88C8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x88C9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x88CA, 0x0000, 0x88CB, 0x0000, 0x88CC, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x88CD, 0x0000, 0x0000, 0x0000, 0x88CE, 0x0000, 0x88CF, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x88D0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x88D1, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x88D2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x88D3, 0x0000,
- 0x88D4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x88D5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x88D6, 0x0000, 0x0000, 0x0000, 0x88D7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x88D8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x88D9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x88DA, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x88DB, 0x88DC, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x88DD, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x88DE, 0x88DF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x88E0, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x88E1, 0x88E2, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x88E3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x88E4, 0x0000, 0x0000, 0x88E5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x88E6, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x88E7, 0x0000, 0x88E8, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x88E9, 0x0000, 0x88EA, 0x0000, 0x0000, 0x0000, 0x0000, 0x88EB,
- 0x0000, 0x0000, 0x0000, 0x88EC, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x88ED, 0x88EE, 0x0000, 0x0000, 0x88EF, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x88F0, 0x0000, 0x0000, 0x88F1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x88F2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x88F3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x88F4, 0x88F5, 0x88F6, 0x0000, 0x0000, 0x0000, 0x88F7, 0x0000, 0x0000, 0x0000, 0x88F8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x88F9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x88FA, 0x0000, 0x0000, 0x88FB, 0x0000,
- 0x0000, 0x0000, 0x88FC, 0x0000, 0x0000, 0x0000, 0x88FD, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x88FE, 0x0000, 0x88FF, 0x0000, 0x0000, 0x8900, 0x8901, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8902,
- 0x0000, 0x0000, 0x0000, 0x8903, 0x0000, 0x0000, 0x0000, 0x0000, 0x8904, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x8905, 0x0000, 0x0000, 0x0000, 0x8906, 0x8907, 0x8908, 0x0000, 0x8909, 0x0000, 0x890A, 0x0000, 0x890B, 0x0000,
- 0x890C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x890D, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x890E, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x890F, 0x0000, 0x8910, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x8911, 0x0000, 0x8912, 0x0000, 0x0000, 0x0000, 0x8913, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8914, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8915, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8916, 0x0000, 0x0000, 0x8917, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x8918, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x8919, 0x891A, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x891B, 0x0000, 0x891C, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x891D, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x891E, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x891F, 0x8920, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8921, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8922, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8923, 0x8924, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8925, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x8926, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8927, 0x0000, 0x0000, 0x8928,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8929,
- 0x0000, 0x0000, 0x0000, 0x892A, 0x0000, 0x0000, 0x892B, 0x0000, 0x0000, 0x0000, 0x0000, 0x892C, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x892D, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x892E, 0x0000, 0x0000, 0x892F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8930,
- 0x0000, 0x0000, 0x0000, 0x8931, 0x0000, 0x8932, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8933, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x8934, 0x8935, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8936, 0x0000, 0x0000, 0x8937, 0x8938,
- 0x0000, 0x8939, 0x0000, 0x0000, 0x893A, 0x0000, 0x0000, 0x893B, 0x0000, 0x0000, 0x893C, 0x893D, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x893E, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x893F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x8940, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8941, 0x0000, 0x0000, 0x8942,
- 0x8943, 0x8944, 0x8945, 0x0000, 0x8946, 0x0000, 0x0000, 0x8947, 0x0000, 0x0000, 0x8948, 0x8949, 0x894A, 0x0000, 0x894B, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x894C, 0x0000, 0x894D, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x894E,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x894F, 0x0000, 0x8950, 0x0000, 0x0000, 0x8951, 0x0000, 0x8952, 0x8953, 0x8954, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x8955, 0x8956, 0x8957, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8958, 0x0000, 0x8959, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x895A, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x895B, 0x895C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x895D, 0x0000, 0x0000, 0x895E, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x895F, 0x8960, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8961, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8962, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8963, 0x0000, 0x0000, 0x0000, 0x0000, 0x8964, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8965, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x8966, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8967, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8968, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8969, 0x896A, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x896B, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x896C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x896D, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x896E, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x896F, 0x0000, 0x8970, 0x8971, 0x0000, 0x8972, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8973, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x8974, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8975, 0x0000, 0x0000, 0x0000, 0x8976, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8977, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x8978, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8979, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x897A, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x897B, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x897C,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x897D, 0x0000, 0x0000, 0x0000, 0x897E, 0x0000, 0x0000, 0x0000, 0x0000, 0x897F, 0x0000, 0x8980,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x8981, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8982, 0x8983, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8984,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8985, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x8986, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8987,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8988, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x8989, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x898A, 0x0000, 0x0000, 0x0000, 0x0000, 0x898B, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x898C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x898D, 0x0000, 0x0000, 0x0000, 0x898E, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x898F,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8990, 0x0000, 0x8991, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x8992, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x8993, 0x0000, 0x0000, 0x8994, 0x8995, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x8996, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x8997, 0x8998, 0x0000, 0x0000, 0x8999, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x899A, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x899B, 0x0000, 0x0000, 0x0000, 0x0000, 0x899C, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x899D, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x899E, 0x899F, 0x89A0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x89A1, 0x0000, 0x0000, 0x89A2, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x89A3,
- 0x0000, 0x0000, 0x89A4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x89A5, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x89A6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x89A7, 0x0000, 0x89A8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x89A9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x89AA, 0x0000, 0x0000, 0x89AB,
- 0x0000, 0x0000, 0x89AC, 0x89AD, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x89AE, 0x89AF,
- 0x0000, 0x0000, 0x0000, 0x89B0, 0x0000, 0x0000, 0x0000, 0x0000, 0x89B1, 0x0000, 0x0000, 0x89B2, 0x0000, 0x0000, 0x89B3, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x89B4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x89B5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x89B6, 0x89B7, 0x0000, 0x89B8, 0x89B9, 0x89BA,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x89BB, 0x0000, 0x89BC, 0x89BD, 0x0000, 0x89BE, 0x89BF, 0x89C0, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x89C1, 0x0000, 0x0000, 0x0000, 0x0000, 0x89C2, 0x0000, 0x89C3, 0x89C4, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x89C5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x89C6, 0x0000, 0x0000, 0x0000, 0x0000, 0x89C7,
- 0x0000, 0x0000, 0x89C8, 0x0000, 0x0000, 0x0000, 0x89C9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x89CA, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x89CB, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x89CC,
- 0x0000, 0x89CD, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x89CE, 0x0000, 0x0000, 0x0000, 0x0000, 0x89CF, 0x89D0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x89D1,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x89D2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x89D3, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x89D4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x89D5, 0x0000, 0x0000, 0x89D6, 0x89D7,
- 0x0000, 0x0000, 0x89D8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x89D9, 0x0000, 0x89DA, 0x0000, 0x0000, 0x0000,
- 0x89DB, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x89DC, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x89DD,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x89DE, 0x0000, 0x0000, 0x0000, 0x89DF, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x89E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x89E1, 0x89E2, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x89E3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x89E4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x89E5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x89E6, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x89E7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x89E8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x89E9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x89EA, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x89EB, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x89EC, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x89ED, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x89EE, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x89EF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x89F0, 0x0000, 0x0000, 0x89F1, 0x0000, 0x89F2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x89F3, 0x89F4, 0x0000, 0x0000, 0x0000, 0x89F5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x89F6, 0x0000, 0x89F7, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x89F8, 0x0000, 0x0000, 0x0000, 0x89F9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x89FA, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x89FB, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x89FC, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x89FD, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x89FE, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x89FF, 0x8A00,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A01, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A02, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A03, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A04, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x8A05, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A06, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x8A07, 0x8A08, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A09, 0x0000, 0x8A0A, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A0B, 0x0000, 0x0000, 0x8A0C,
- 0x0000, 0x0000, 0x8A0D, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A0E, 0x0000, 0x0000, 0x8A0F, 0x0000, 0x0000, 0x8A10, 0x8A11,
- 0x0000, 0x8A12, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A13, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A14, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x8A15, 0x8A16, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A17, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x8A18, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A19, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A1A,
- 0x0000, 0x8A1B, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x8A1C, 0x0000, 0x0000, 0x8A1D, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A1E, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x8A1F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A20,
- 0x8A21, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A22,
- 0x8A23, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A24, 0x8A25, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x8A26, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A27, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x8A28, 0x0000, 0x0000, 0x0000, 0x8A29, 0x0000, 0x8A2A, 0x0000, 0x0000, 0x8A2B, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A2C, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x8A2D, 0x0000, 0x8A2E, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A2F, 0x0000, 0x0000, 0x8A30, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A31,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x8A32, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A33, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x8A34, 0x8A35, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A36, 0x0000, 0x8A37, 0x0000, 0x8A38, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A39, 0x8A3A, 0x0000, 0x0000, 0x8A3B, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A3C,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A3D, 0x0000, 0x0000, 0x8A3E, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A3F, 0x0000, 0x8A40,
- 0x8A41, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A42, 0x8A43, 0x8A44, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x8A45, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A46, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x8A47, 0x8A48, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x8A49, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A4A, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A4B, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x8A4C, 0x8A4D, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A4E, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A4F, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A50, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A51,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x8A52, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x8A53, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A54, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x8A55, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A56, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x8A57, 0x0000, 0x0000, 0x8A58, 0x0000, 0x0000, 0x0000, 0x8A59, 0x0000, 0x0000, 0x8A5A, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x8A5B, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A5C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x8A5D, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A5E, 0x0000,
- 0x0000, 0x8A5F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A60, 0x8A61, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x8A62, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A63, 0x0000, 0x0000, 0x8A64, 0x0000, 0x0000, 0x8A65,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A66, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A67, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x8A68, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A69, 0x0000, 0x8A6A, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A6B, 0x0000, 0x0000,
- 0x8A6C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A6D, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A6E, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x8A6F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A70, 0x0000, 0x0000, 0x0000, 0x8A71, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A72, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A73, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A74, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A75, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A76, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x8A77, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A78, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x8A79, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A7A, 0x0000, 0x0000, 0x0000, 0x8A7B, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A7C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A7D, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A7E, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x8A7F, 0x0000, 0x0000, 0x8A80, 0x8A81, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A82, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A83, 0x0000, 0x8A84, 0x8A85, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x8A86, 0x0000, 0x8A87, 0x0000, 0x0000, 0x8A88, 0x0000, 0x8A89, 0x8A8A, 0x0000, 0x8A8B, 0x8A8C, 0x8A8D, 0x0000, 0x0000, 0x0000,
- 0x8A8E, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A8F, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A90, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A91,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A92, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x8A93, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x8A94, 0x8A95, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A96, 0x8A97, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A98,
- 0x0000, 0x0000, 0x8A99, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A9A, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x8A9B, 0x0000, 0x8A9C, 0x0000, 0x0000, 0x8A9D, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A9E, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x8A9F, 0x0000, 0x0000, 0x0000, 0x0000, 0x8AA0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8AA1, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8AA2, 0x0000, 0x0000, 0x0000, 0x0000, 0x8AA3,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x8AA4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8AA5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8AA6, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8AA7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x8AA8, 0x8AA9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8AAA, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x8AAB, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8AAC, 0x8AAD, 0x0000, 0x0000, 0x0000,
- 0x8AAE, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8AAF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8AB0, 0x0000, 0x0000, 0x8AB1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8AB2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x8AB3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8AB4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x8AB5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8AB6, 0x0000, 0x8AB7, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x8AB8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8AB9, 0x0000,
- 0x0000, 0x8ABA, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8ABB, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x8ABC, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8ABD, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x8ABE, 0x0000, 0x0000, 0x0000, 0x8ABF, 0x8AC0, 0x0000, 0x8AC1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8AC2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8AC3,
- 0x0000, 0x0000, 0x8AC4, 0x0000, 0x8AC5, 0x0000, 0x0000, 0x8AC6, 0x0000, 0x8AC7, 0x0000, 0x0000, 0x8AC8, 0x8AC9, 0x8ACA, 0x0000,
- 0x8ACB, 0x8ACC, 0x8ACD, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8ACE, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8ACF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x8AD0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8AD1, 0x0000, 0x8AD2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x8AD3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8AD4, 0x0000, 0x8AD5, 0x0000,
- 0x0000, 0x8AD6, 0x0000, 0x8AD7, 0x8AD8, 0x0000, 0x0000, 0x8AD9, 0x0000, 0x0000, 0x8ADA, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8ADB, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8ADC, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8ADD,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8ADE, 0x0000, 0x8ADF, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8AE0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8AE1, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8AE2, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8AE3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8AE4, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x8AE5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8AE6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8AE7,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8AE8, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x8AE9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8AEA, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x8AEB, 0x0000, 0x0000, 0x0000, 0x8AEC, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8AED,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8AEE, 0x0000, 0x0000, 0x0000, 0x8AEF, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8AF0, 0x0000, 0x8AF1, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x8AF2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8AF3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x8AF4, 0x0000, 0x0000, 0x0000, 0x8AF5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8AF6,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8AF7, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x8AF8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8AF9, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8AFA, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8AFB, 0x0000, 0x0000, 0x0000, 0x8AFC, 0x8AFD, 0x8AFE, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x8AFF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8B00,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8B01, 0x8B02, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8B03, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8B04, 0x0000, 0x0000, 0x0000, 0x8B05, 0x0000, 0x0000, 0x0000, 0x8B06, 0x0000,
- 0x0000, 0x8B07, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8B08,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8B09, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8B0A, 0x0000, 0x0000, 0x8B0B, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8B0C, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8B0D, 0x0000,
- 0x0000, 0x8B0E, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8B0F, 0x8B10, 0x8B11, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x8B12, 0x8B13, 0x8B14, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8B15, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8B16, 0x8B17, 0x0000, 0x0000, 0x0000, 0x8B18, 0x8B19,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8B1A, 0x8B1B, 0x0000, 0x0000, 0x0000, 0x8B1C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x8B1D, 0x8B1E, 0x0000, 0x8B1F, 0x0000, 0x0000, 0x8B20, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8B21, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8B22, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8B23, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8B24, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8B25, 0x0000, 0x0000, 0x0000, 0x8B26,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x8B27, 0x0000, 0x0000, 0x0000, 0x8B28, 0x0000, 0x0000, 0x0000, 0x0000, 0x8B29, 0x0000, 0x8B2A, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x8B2B, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x8B2C, 0x0000, 0x0000, 0x0000, 0x0000, 0x8B2D, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x8B2E, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x8B2F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8B30, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8B31, 0x0000,
- 0x0000, 0x8B32, 0x0000, 0x8B33, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8B34, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8B35, 0x0000, 0x8B36, 0x0000, 0x0000, 0x0000, 0x8B37, 0x8B38, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x8B39, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8B3A, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8B3B, 0x0000, 0x8B3C, 0x8B3D, 0x0000, 0x0000, 0x8B3E,
- 0x8B3F, 0x0000, 0x0000, 0x0000, 0x8B40, 0x0000, 0x0000, 0x0000, 0x0000, 0x8B41, 0x0000, 0x0000, 0x8B42, 0x0000, 0x8B43, 0x0000,
- 0x0000, 0x0000, 0x8B44, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8B45, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8B46, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8B47, 0x8B48, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8B49, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x8B4A, 0x8B4B, 0x0000, 0x8B4C, 0x0000, 0x8B4D, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8B4E, 0x0000,
- 0x8B4F, 0x0000, 0x8B50, 0x0000, 0x8B51, 0x8B52, 0x8B53, 0x8B54, 0x8B55, 0x8B56, 0x0000, 0x8B57, 0x0000, 0x8B58, 0x0000, 0x0000,
- 0x8B59, 0x0000, 0x0000, 0x8B5A, 0x8B5B, 0x8B5C, 0x0000, 0x8B5D, 0x0000, 0x8B5E, 0x8B5F, 0x8B60, 0x8B61, 0x8B62, 0x0000, 0x0000,
- 0x0000, 0x8B63, 0x0000, 0x0000, 0x0000, 0x8B64, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8B65, 0x0000,
- 0x8B66, 0x8B67, 0x8B68, 0x8B69, 0x0000, 0x8B6A, 0x0000, 0x0000, 0x0000, 0x8B6B, 0x8B6C, 0x0000, 0x8B6D, 0x0000, 0x0000, 0x8B6E,
- 0x8B6F, 0x0000, 0x8B70, 0x8B71, 0x8B72, 0x0000, 0x8B73, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8B74, 0x0000,
- 0x8B75, 0x0000, 0x0000, 0x0000, 0x0000, 0x8B76, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8B77, 0x0000, 0x8B78, 0x8B79, 0x0000,
- 0x0000, 0x8B7A, 0x8B7B, 0x0000, 0x0000, 0x0000, 0x8B7C, 0x0000, 0x8B7D, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x8B7E, 0x8B7F, 0x8B80, 0x8B81, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8B82, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x8B83, 0x0000, 0x8B84, 0x0000, 0x0000, 0x8B85, 0x0000, 0x8B86, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8B87,
- 0x0000, 0x0000, 0x0000, 0x8B88, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8B89, 0x0000, 0x8B8A, 0x0000,
- 0x8B8B, 0x0000, 0x8B8C, 0x8B8D, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8B8E, 0x8B8F, 0x0000, 0x0000,
- 0x8B90, 0x8B91, 0x8B92, 0x0000, 0x8B93, 0x0000, 0x0000, 0x0000, 0x8B94, 0x8B95, 0x8B96, 0x8B97, 0x0000, 0x8B98, 0x8B99, 0x8B9A,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x8B9B, 0x0000, 0x0000, 0x8B9C, 0x0000, 0x0000, 0x8B9D, 0x8B9E, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x8B9F, 0x0000, 0x0000, 0x0000, 0x0000, 0x8BA0, 0x8BA1, 0x8BA2, 0x8BA3, 0x0000, 0x0000, 0x8BA4, 0x8BA5, 0x0000,
- 0x8BA6, 0x8BA7, 0x0000, 0x8BA8, 0x0000, 0x0000, 0x8BA9, 0x0000, 0x8BAA, 0x8BAB, 0x0000, 0x0000, 0x8BAC, 0x0000, 0x0000, 0x8BAD,
- 0x0000, 0x8BAE, 0x8BAF, 0x0000, 0x8BB0, 0x0000, 0x8BB1, 0x0000, 0x0000, 0x8BB2, 0x0000, 0x8BB3, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8BB4, 0x8BB5, 0x8BB6, 0x8BB7, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x8BB8, 0x8BB9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8BBA, 0x0000, 0x0000, 0x0000, 0x8BBB, 0x0000, 0x8BBC, 0x8BBD, 0x8BBE,
- 0x0000, 0x0000, 0x0000, 0x8BBF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8BC0, 0x0000, 0x0000, 0x8BC1, 0x0000,
- 0x0000, 0x8BC2, 0x8BC3, 0x0000, 0x0000, 0x8BC4, 0x8BC5, 0x8BC6, 0x0000, 0x8BC7, 0x0000, 0x0000, 0x0000, 0x8BC8, 0x8BC9, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x8BCA, 0x0000, 0x8BCB, 0x8BCC, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x8BCD, 0x0000, 0x8BCE, 0x8BCF, 0x0000, 0x0000, 0x0000, 0x0000, 0x8BD0, 0x0000, 0x0000, 0x0000, 0x8BD1, 0x0000,
- 0x0000, 0x8BD2, 0x8BD3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8BD4, 0x8BD5, 0x8BD6, 0x0000, 0x8BD7, 0x0000, 0x8BD8,
- 0x8BD9, 0x0000, 0x0000, 0x8BDA, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8BDB, 0x0000, 0x0000, 0x8BDC, 0x8BDD, 0x8BDE, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8BDF, 0x0000, 0x8BE0, 0x0000, 0x8BE1, 0x0000, 0x0000, 0x8BE2,
- 0x0000, 0x0000, 0x0000, 0x8BE3, 0x0000, 0x0000, 0x8BE4, 0x0000, 0x8BE5, 0x0000, 0x0000, 0x0000, 0x8BE6, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8BE7, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8BE8, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x8BE9, 0x0000, 0x0000, 0x0000, 0x0000, 0x8BEA, 0x0000, 0x8BEB, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8BEC, 0x8BED, 0x0000, 0x8BEE, 0x0000, 0x0000, 0x8BEF, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8BF0, 0x0000, 0x0000, 0x8BF1, 0x8BF2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8BF3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x8BF4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x8BF5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8BF6, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8BF7, 0x0000, 0x0000, 0x0000, 0x8BF8, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8BF9, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8BFA, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8BFB, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8BFC,
- 0x8BFD, 0x0000, 0x8BFE, 0x8BFF, 0x0000, 0x8C00, 0x8C01, 0x8C02, 0x0000, 0x8C03, 0x0000, 0x0000, 0x0000, 0x8C04, 0x8C05, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C06, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C07, 0x0000, 0x0000, 0x8C08, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C09, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C0A, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C0B, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C0C, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C0D, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x8C0E, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C0F, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C10, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x8C11, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C12, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x8C13, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C14, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C15, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x8C16, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C17, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C18, 0x8C19, 0x8C1A,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C1B, 0x0000, 0x0000, 0x0000, 0x8C1C, 0x0000, 0x8C1D,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C1E, 0x0000, 0x8C1F, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C20,
- 0x8C21, 0x0000, 0x8C22, 0x0000, 0x0000, 0x8C23, 0x0000, 0x0000, 0x8C24, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C25, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C26, 0x8C27, 0x8C28, 0x8C29, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C2A, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x8C2B, 0x0000, 0x8C2C, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C2D, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x8C2E, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C2F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x8C30, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C31, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C32, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x8C33, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C34, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x8C35, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C36, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C37, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x8C38, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C39, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C3A,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C3B, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C3C, 0x0000, 0x0000, 0x8C3D, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C3E, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C3F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C40, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x8C41, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C42, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C43, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C44, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x8C45, 0x0000, 0x0000, 0x0000, 0x8C46, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C47, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C48, 0x0000, 0x0000, 0x0000,
- 0x8C49, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C4A, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C4B, 0x8C4C,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x8C4D, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C4E, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C4F, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x8C50, 0x0000, 0x8C51, 0x8C52, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C53, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x8C54, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C55, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C56, 0x0000,
- 0x0000, 0x0000, 0x8C57, 0x0000, 0x0000, 0x8C58, 0x0000, 0x0000, 0x8C59, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x8C5A, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C5B, 0x0000, 0x0000, 0x8C5C, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C5D, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C5E, 0x0000, 0x8C5F, 0x0000, 0x8C60, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x8C61, 0x0000, 0x0000, 0x8C62, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C63,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C64, 0x0000, 0x0000, 0x8C65, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C66, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C67, 0x0000, 0x0000, 0x0000, 0x8C68, 0x8C69, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C6A, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C6B, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C6C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C6D, 0x0000, 0x0000, 0x8C6E, 0x8C6F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x8C70, 0x0000, 0x0000, 0x0000, 0x8C71, 0x0000, 0x8C72, 0x8C73, 0x0000, 0x0000, 0x8C74, 0x8C75, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C76, 0x0000, 0x0000, 0x8C77, 0x0000, 0x0000, 0x0000, 0x8C78, 0x0000,
- 0x0000, 0x0000, 0x8C79, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C7A, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C7B, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C7C,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C7D, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C7E, 0x8C7F, 0x0000, 0x0000, 0x8C80,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C81, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C82,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C83, 0x8C84, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C85, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C86, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C87,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C88, 0x0000, 0x8C89, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C8A, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x8C8B, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C8C, 0x0000,
- 0x0000, 0x0000, 0x8C8D, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C8E, 0x0000, 0x0000, 0x0000, 0x8C8F,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x8C90, 0x0000, 0x0000, 0x0000, 0x8C91, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C92, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x8C93, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C94, 0x0000, 0x0000, 0x8C95,
- 0x0000, 0x0000, 0x8C96, 0x0000, 0x0000, 0x0000, 0x8C97, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C98, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x8C99, 0x0000, 0x0000, 0x0000, 0x8C9A, 0x8C9B, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C9C, 0x0000, 0x0000,
- 0x8C9D, 0x8C9E, 0x0000, 0x0000, 0x8C9F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8CA0,
- 0x0000, 0x0000, 0x0000, 0x8CA1, 0x0000, 0x0000, 0x0000, 0x0000, 0x8CA2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x8CA3, 0x0000, 0x0000, 0x0000, 0x0000, 0x8CA4, 0x0000, 0x0000, 0x0000, 0x0000, 0x8CA5, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8CA6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x8CA7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8CA8, 0x0000, 0x8CA9, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8CAA, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8CAB, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8CAC, 0x8CAD, 0x0000, 0x0000,
- 0x0000, 0x8CAE, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8CAF, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8CB0, 0x0000, 0x0000, 0x0000, 0x0000, 0x8CB1, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8CB2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x8CB3, 0x8CB4, 0x0000, 0x8CB5, 0x0000, 0x0000, 0x8CB6, 0x0000, 0x0000, 0x8CB7, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8CB8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8CB9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8CBA, 0x0000, 0x0000,
- 0x8CBB, 0x0000, 0x0000, 0x0000, 0x8CBC, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8CBD, 0x0000, 0x0000, 0x0000, 0x0000, 0x8CBE,
- 0x0000, 0x0000, 0x8CBF, 0x0000, 0x8CC0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8CC1, 0x0000, 0x0000, 0x0000, 0x8CC2,
- 0x0000, 0x0000, 0x0000, 0x8CC3, 0x0000, 0x0000, 0x8CC4, 0x0000, 0x8CC5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x8CC6, 0x0000, 0x0000, 0x0000, 0x8CC7, 0x8CC8, 0x0000, 0x0000, 0x0000, 0x8CC9, 0x0000, 0x8CCA, 0x0000, 0x0000, 0x8CCB,
- 0x0000, 0x0000, 0x8CCC, 0x0000, 0x0000, 0x0000, 0x0000, 0x8CCD, 0x0000, 0x0000, 0x8CCE, 0x0000, 0x0000, 0x8CCF, 0x0000, 0x8CD0,
- 0x8CD1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x8CD2, 0x0000, 0x8CD3, 0x0000, 0x8CD4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x8CD5, 0x8CD6, 0x0000, 0x0000, 0x0000, 0x0000, 0x8CD7, 0x0000, 0x8CD8, 0x0000, 0x8CD9, 0x0000, 0x8CDA, 0x0000,
- 0x8CDB, 0x0000, 0x0000, 0x8CDC, 0x0000, 0x8CDD, 0x8CDE, 0x8CDF, 0x8CE0, 0x0000, 0x0000, 0x8CE1, 0x0000, 0x8CE2, 0x0000, 0x8CE3,
- 0x0000, 0x0000, 0x0000, 0x8CE4, 0x0000, 0x8CE5, 0x0000, 0x0000, 0x0000, 0x0000, 0x8CE6, 0x0000, 0x0000, 0x8CE7, 0x0000, 0x0000,
- 0x0000, 0x8CE8, 0x0000, 0x0000, 0x8CE9, 0x0000, 0x8CEA, 0x0000, 0x0000, 0x0000, 0x8CEB, 0x0000, 0x8CEC, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x8CED, 0x0000, 0x0000, 0x0000, 0x0000, 0x8CEE, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8CEF, 0x0000,
- 0x8CF0, 0x0000, 0x8CF1, 0x0000, 0x8CF2, 0x8CF3, 0x0000, 0x0000, 0x8CF4, 0x0000, 0x0000, 0x8CF5, 0x0000, 0x0000, 0x8CF6, 0x0000,
- 0x8CF7, 0x8CF8, 0x8CF9, 0x8CFA, 0x0000, 0x0000, 0x8CFB, 0x0000, 0x0000, 0x8CFC, 0x0000, 0x8CFD, 0x8CFE, 0x8CFF, 0x8D00, 0x0000,
- 0x8D01, 0x8D02, 0x8D03, 0x8D04, 0x0000, 0x8D05, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8D06, 0x0000, 0x0000, 0x8D07,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x8D08, 0x8D09, 0x8D0A, 0x8D0B, 0x0000, 0x0000, 0x0000, 0x0000, 0x8D0C, 0x8D0D, 0x0000, 0x0000,
- 0x0000, 0x8D0E, 0x8D0F, 0x0000, 0x0000, 0x8D10, 0x0000, 0x0000, 0x8D11, 0x0000, 0x8D12, 0x0000, 0x0000, 0x0000, 0x8D13, 0x0000,
- 0x8D14, 0x8D15, 0x0000, 0x8D16, 0x8D17, 0x8D18, 0x8D19, 0x0000, 0x8D1A, 0x0000, 0x8D1B, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x8D1C, 0x0000, 0x8D1D, 0x0000, 0x0000, 0x0000, 0x8D1E, 0x0000, 0x0000, 0x8D1F, 0x0000, 0x0000, 0x8D20, 0x0000, 0x0000, 0x8D21,
- 0x0000, 0x0000, 0x8D22, 0x0000, 0x8D23, 0x0000, 0x0000, 0x8D24, 0x0000, 0x8D25, 0x0000, 0x8D26, 0x0000, 0x8D27, 0x0000, 0x8D28,
- 0x0000, 0x8D29, 0x8D2A, 0x0000, 0x0000, 0x0000, 0x8D2B, 0x8D2C, 0x0000, 0x0000, 0x0000, 0x8D2D, 0x8D2E, 0x8D2F, 0x8D30, 0x0000,
- 0x0000, 0x8D31, 0x8D32, 0x0000, 0x8D33, 0x0000, 0x8D34, 0x8D35, 0x0000, 0x0000, 0x0000, 0x8D36, 0x0000, 0x8D37, 0x8D38, 0x0000,
- 0x0000, 0x8D39, 0x0000, 0x8D3A, 0x0000, 0x0000, 0x8D3B, 0x8D3C, 0x8D3D, 0x0000, 0x8D3E, 0x0000, 0x8D3F, 0x0000, 0x8D40, 0x0000,
- 0x8D41, 0x8D42, 0x8D43, 0x0000, 0x8D44, 0x8D45, 0x0000, 0x0000, 0x0000, 0x0000, 0x8D46, 0x0000, 0x0000, 0x0000, 0x8D47, 0x0000,
- 0x8D48, 0x0000, 0x0000, 0x0000, 0x8D49, 0x0000, 0x8D4A, 0x8D4B, 0x0000, 0x8D4C, 0x0000, 0x8D4D, 0x0000, 0x8D4E, 0x0000, 0x0000,
- 0x8D4F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8D50, 0x0000, 0x0000, 0x8D51, 0x8D52, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x8D53, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8D54, 0x0000, 0x0000, 0x0000, 0x0000, 0x8D55, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8D56, 0x0000, 0x0000, 0x0000, 0x0000, 0x8D57, 0x8D58,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8D59, 0x0000, 0x8D5A, 0x8D5B, 0x8D5C, 0x0000, 0x8D5D, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8D5E, 0x0000, 0x0000, 0x0000, 0x8D5F,
- 0x8D60, 0x0000, 0x0000, 0x0000, 0x8D61, 0x0000, 0x0000, 0x8D62, 0x8D63, 0x0000, 0x0000, 0x0000, 0x0000, 0x8D64, 0x8D65, 0x0000,
- 0x8D66, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8D67, 0x8D68, 0x0000, 0x0000, 0x8D69, 0x0000,
- 0x0000, 0x0000, 0x8D6A, 0x8D6B, 0x0000, 0x8D6C, 0x8D6D, 0x0000, 0x0000, 0x0000, 0x8D6E, 0x0000, 0x8D6F, 0x0000, 0x8D70, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8D71, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8D72, 0x0000,
- 0x8D73, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8D74, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8D75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x8D76, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8D77, 0x8D78, 0x0000,
- 0x8D79, 0x8D7A, 0x8D7B, 0x0000, 0x0000, 0x0000, 0x0000, 0x8D7C, 0x8D7D, 0x8D7E, 0x8D7F, 0x8D80, 0x8D81, 0x0000, 0x0000, 0x8D82,
- 0x8D83, 0x0000, 0x8D84, 0x8D85, 0x8D86, 0x0000, 0x8D87, 0x8D88, 0x8D89, 0x0000, 0x8D8A, 0x8D8B, 0x8D8C, 0x8D8D, 0x0000, 0x8D8E,
- 0x8D8F, 0x8D90, 0x8D91, 0x8D92, 0x8D93, 0x8D94, 0x0000, 0x8D95, 0x8D96, 0x0000, 0x8D97, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x8D98, 0x8D99, 0x8D9A, 0x0000, 0x8D9B, 0x0000, 0x0000, 0x0000, 0x8D9C, 0x8D9D, 0x0000, 0x8D9E, 0x0000, 0x8D9F, 0x0000,
- 0x8DA0, 0x8DA1, 0x8DA2, 0x8DA3, 0x8DA4, 0x0000, 0x8DA5, 0x8DA6, 0x0000, 0x0000, 0x8DA7, 0x0000, 0x8DA8, 0x8DA9, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x8DAA, 0x8DAB, 0x0000, 0x0000, 0x0000, 0x0000, 0x8DAC, 0x8DAD, 0x8DAE, 0x8DAF, 0x8DB0, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x8DB1, 0x8DB2, 0x0000, 0x8DB3, 0x8DB4, 0x0000, 0x8DB5, 0x0000, 0x0000, 0x8DB6, 0x0000, 0x8DB7,
- 0x8DB8, 0x0000, 0x0000, 0x8DB9, 0x8DBA, 0x0000, 0x8DBB, 0x8DBC, 0x0000, 0x0000, 0x0000, 0x8DBD, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8DBE, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8DBF, 0x0000, 0x0000, 0x0000, 0x8DC0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8DC1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x8DC2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x8DC3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x8DC4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x8DC5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8DC6, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8DC7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x8DC8, 0x0000, 0x0000, 0x8DC9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8DCA, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x8DCB, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8DCC, 0x8DCD, 0x8DCE, 0x0000, 0x8DCF, 0x0000, 0x0000,
- 0x0000, 0x8DD0, 0x8DD1, 0x8DD2, 0x0000, 0x8DD3, 0x0000, 0x0000, 0x0000, 0x0000, 0x8DD4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x8DD5, 0x0000, 0x0000, 0x0000, 0x8DD6, 0x8DD7, 0x0000, 0x0000, 0x0000, 0x8DD8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x8DD9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8DDA, 0x8DDB, 0x8DDC, 0x8DDD, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x8DDE, 0x0000, 0x8DDF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8DE0, 0x0000, 0x0000, 0x0000, 0x8DE1,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8DE2, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x8DE3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8DE4, 0x8DE5, 0x8DE6, 0x8DE7, 0x8DE8, 0x0000, 0x8DE9, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x8DEA, 0x0000, 0x8DEB, 0x0000, 0x8DEC, 0x8DED, 0x8DEE, 0x8DEF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x8DF0, 0x0000, 0x8DF1, 0x8DF2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8DF3, 0x8DF4, 0x8DF5, 0x8DF6, 0x8DF7,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8DF8, 0x8DF9, 0x0000, 0x0000, 0x8DFA, 0x8DFB, 0x0000, 0x0000, 0x0000, 0x0000, 0x8DFC,
- 0x0000, 0x0000, 0x0000, 0x8DFD, 0x0000, 0x0000, 0x0000, 0x0000, 0x8DFE, 0x0000, 0x0000, 0x8DFF, 0x0000, 0x0000, 0x8E00, 0x8E01,
- 0x8E02, 0x0000, 0x8E03, 0x0000, 0x8E04, 0x8E05, 0x8E06, 0x0000, 0x0000, 0x8E07, 0x0000, 0x0000, 0x0000, 0x8E08, 0x8E09, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x8E0A, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8E0B,
- 0x0000, 0x8E0C, 0x8E0D, 0x0000, 0x8E0E, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8E0F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8E10, 0x8E11, 0x8E12,
- 0x0000, 0x0000, 0x8E13, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8E14, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x8E15, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x8E16, 0x8E17, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8E18, 0x8E19, 0x0000, 0x0000, 0x8E1A, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x8E1B, 0x8E1C, 0x0000, 0x0000, 0x0000, 0x8E1D, 0x0000, 0x0000, 0x8E1E, 0x0000, 0x8E1F, 0x0000,
- 0x8E20, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8E21, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x8E22, 0x0000, 0x0000, 0x0000, 0x0000, 0x8E23, 0x8E24, 0x0000, 0x8E25, 0x0000, 0x8E26, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x8E27, 0x0000, 0x0000, 0x8E28, 0x0000, 0x0000, 0x8E29, 0x0000, 0x0000, 0x8E2A, 0x0000, 0x0000, 0x0000, 0x0000, 0x8E2B,
- 0x8E2C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8E2D,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8E2E, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8E2F, 0x0000, 0x0000, 0x8E30, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x8E31, 0x0000, 0x8E32, 0x0000, 0x8E33, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8E34, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8E35, 0x0000, 0x0000,
- 0x8E36, 0x0000, 0x8E37, 0x0000, 0x8E38, 0x0000, 0x8E39, 0x0000, 0x0000, 0x0000, 0x8E3A, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8E3B, 0x8E3C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x8E3D, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8E3E, 0x0000, 0x8E3F, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8E40, 0x8E41, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x8E42, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x8E43, 0x8E44, 0x0000, 0x8E45, 0x0000, 0x8E46, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8E47, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x8E48, 0x8E49, 0x0000, 0x8E4A, 0x8E4B, 0x8E4C, 0x0000, 0x0000, 0x0000, 0x8E4D, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x8E4E, 0x8E4F, 0x0000, 0x0000, 0x8E50, 0x0000, 0x8E51, 0x0000, 0x0000, 0x8E52, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8E53, 0x0000, 0x8E54, 0x0000, 0x8E55, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x8E56, 0x8E57, 0x0000, 0x8E58, 0x8E59, 0x0000, 0x0000, 0x0000, 0x0000, 0x8E5A, 0x0000, 0x0000, 0x0000, 0x8E5B, 0x0000, 0x0000,
- 0x8E5C, 0x8E5D, 0x0000, 0x0000, 0x8E5E, 0x8E5F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8E60, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x8E61, 0x0000, 0x0000, 0x8E62, 0x8E63, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8E64, 0x0000,
- 0x8E65, 0x0000, 0x0000, 0x8E66, 0x8E67, 0x0000, 0x0000, 0x8E68, 0x8E69, 0x8E6A, 0x8E6B, 0x0000, 0x0000, 0x8E6C, 0x8E6D, 0x8E6E,
- 0x8E6F, 0x0000, 0x0000, 0x0000, 0x0000, 0x8E70, 0x0000, 0x0000, 0x8E71, 0x8E72, 0x0000, 0x8E73, 0x0000, 0x8E74, 0x0000, 0x0000,
- 0x0000, 0x8E75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8E76, 0x0000, 0x0000, 0x8E77, 0x8E78, 0x0000, 0x0000, 0x8E79, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x8E7A, 0x0000, 0x8E7B, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8E7C, 0x8E7D, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8E7E, 0x0000, 0x8E7F, 0x0000, 0x8E80, 0x8E81, 0x0000, 0x0000, 0x0000, 0x8E82,
- 0x8E83, 0x0000, 0x0000, 0x8E84, 0x0000, 0x8E85, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8E86, 0x0000, 0x0000,
- 0x0000, 0x8E87, 0x0000, 0x8E88, 0x0000, 0x0000, 0x8E89, 0x0000, 0x8E8A, 0x0000, 0x8E8B, 0x8E8C, 0x8E8D, 0x0000, 0x0000, 0x0000,
- 0x8E8E, 0x0000, 0x0000, 0x8E8F, 0x0000, 0x8E90, 0x8E91, 0x0000, 0x8E92, 0x0000, 0x8E93, 0x8E94, 0x8E95, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x8E96, 0x0000, 0x0000, 0x0000, 0x8E97, 0x0000, 0x8E98, 0x0000, 0x8E99, 0x8E9A, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x8E9B, 0x0000, 0x8E9C, 0x0000, 0x8E9D, 0x0000, 0x8E9E, 0x0000, 0x0000, 0x0000, 0x0000, 0x8E9F, 0x0000, 0x0000, 0x8EA0,
- 0x0000, 0x0000, 0x8EA1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8EA2, 0x0000, 0x8EA3,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x8EA4, 0x8EA5, 0x8EA6, 0x0000, 0x8EA7, 0x8EA8, 0x8EA9, 0x0000, 0x0000, 0x0000, 0x8EAA, 0x8EAB,
- 0x8EAC, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8EAD, 0x0000, 0x0000, 0x0000, 0x8EAE, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x8EAF, 0x0000, 0x0000, 0x8EB0, 0x0000, 0x8EB1, 0x0000, 0x8EB2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8EB3,
- 0x8EB4, 0x0000, 0x8EB5, 0x0000, 0x0000, 0x8EB6, 0x0000, 0x0000, 0x8EB7, 0x8EB8, 0x8EB9, 0x8EBA, 0x0000, 0x0000, 0x0000, 0x8EBB,
- 0x8EBC, 0x8EBD, 0x8EBE, 0x0000, 0x0000, 0x0000, 0x8EBF, 0x0000, 0x8EC0, 0x8EC1, 0x0000, 0x8EC2, 0x0000, 0x0000, 0x8EC3, 0x8EC4,
- 0x0000, 0x0000, 0x0000, 0x8EC5, 0x0000, 0x0000, 0x8EC6, 0x0000, 0x8EC7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x8EC8, 0x0000, 0x0000, 0x0000, 0x0000, 0x8EC9, 0x8ECA, 0x0000, 0x0000, 0x8ECB, 0x8ECC, 0x0000, 0x8ECD, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x8ECE, 0x0000, 0x0000, 0x0000, 0x8ECF, 0x0000, 0x8ED0, 0x8ED1, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x8ED2, 0x0000, 0x0000, 0x0000, 0x8ED3, 0x8ED4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8ED5, 0x0000, 0x0000, 0x0000,
- 0x8ED6, 0x0000, 0x0000, 0x0000, 0x0000, 0x8ED7, 0x8ED8, 0x0000, 0x0000, 0x0000, 0x8ED9, 0x0000, 0x0000, 0x0000, 0x8EDA, 0x0000,
- 0x0000, 0x0000, 0x8EDB, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8EDC, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x8EDD, 0x0000, 0x8EDE, 0x0000, 0x8EDF, 0x0000, 0x0000, 0x8EE0, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x8EE1, 0x8EE2, 0x8EE3, 0x0000, 0x0000, 0x8EE4, 0x8EE5, 0x0000, 0x8EE6, 0x8EE7, 0x0000, 0x8EE8, 0x0000, 0x8EE9, 0x0000,
- 0x8EEA, 0x0000, 0x0000, 0x8EEB, 0x0000, 0x8EEC, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x8EED, 0x0000, 0x0000, 0x0000, 0x8EEE, 0x8EEF, 0x0000, 0x0000, 0x0000, 0x8EF0, 0x8EF1, 0x0000, 0x0000,
- 0x8EF2, 0x8EF3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8EF4, 0x8EF5, 0x0000, 0x0000, 0x0000, 0x8EF6, 0x8EF7, 0x8EF8, 0x8EF9,
- 0x0000, 0x8EFA, 0x8EFB, 0x0000, 0x8EFC, 0x0000, 0x0000, 0x0000, 0x8EFD, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x8EFE, 0x0000, 0x0000, 0x0000, 0x0000, 0x8EFF, 0x0000, 0x0000, 0x0000, 0x8F00, 0x0000, 0x0000, 0x0000, 0x8F01, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x8F02, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x8F03, 0x0000, 0x0000, 0x8F04, 0x8F05, 0x0000, 0x0000, 0x0000, 0x8F06, 0x8F07, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8F08, 0x8F09, 0x0000, 0x0000, 0x8F0A, 0x0000, 0x0000, 0x8F0B, 0x0000,
- 0x0000, 0x0000, 0x8F0C, 0x8F0D, 0x0000, 0x8F0E, 0x8F0F, 0x0000, 0x8F10, 0x0000, 0x8F11, 0x0000, 0x0000, 0x0000, 0x0000, 0x8F12,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x8F13, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8F14, 0x0000, 0x8F15, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x8F16, 0x0000, 0x0000, 0x0000, 0x8F17, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8F18, 0x0000,
- 0x8F19, 0x0000, 0x0000, 0x8F1A, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8F1B, 0x0000, 0x0000,
- 0x8F1C, 0x8F1D, 0x8F1E, 0x0000, 0x0000, 0x0000, 0x0000, 0x8F1F, 0x0000, 0x8F20, 0x0000, 0x0000, 0x8F21, 0x8F22, 0x8F23, 0x8F24,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8F25, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x8F26, 0x0000, 0x8F27, 0x8F28, 0x0000, 0x0000, 0x8F29, 0x0000, 0x8F2A, 0x8F2B, 0x0000, 0x8F2C, 0x8F2D, 0x0000, 0x8F2E, 0x8F2F,
- 0x0000, 0x0000, 0x8F30, 0x8F31, 0x8F32, 0x0000, 0x0000, 0x0000, 0x8F33, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x8F34, 0x0000, 0x8F35, 0x0000, 0x8F36, 0x0000, 0x0000, 0x8F37, 0x8F38, 0x0000, 0x8F39, 0x8F3A, 0x8F3B, 0x0000, 0x0000,
- 0x0000, 0x8F3C, 0x0000, 0x0000, 0x0000, 0x0000, 0x8F3D, 0x0000, 0x0000, 0x8F3E, 0x0000, 0x8F3F, 0x8F40, 0x8F41, 0x8F42, 0x8F43,
- 0x0000, 0x0000, 0x0000, 0x8F44, 0x0000, 0x0000, 0x8F45, 0x8F46, 0x8F47, 0x0000, 0x8F48, 0x8F49, 0x8F4A, 0x0000, 0x0000, 0x0000,
- 0x8F4B, 0x0000, 0x8F4C, 0x8F4D, 0x8F4E, 0x8F4F, 0x8F50, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8F51, 0x0000, 0x8F52, 0x0000,
- 0x8F53, 0x8F54, 0x8F55, 0x0000, 0x8F56, 0x8F57, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8F58, 0x0000, 0x0000, 0x0000, 0x0000, 0x8F59, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x8F5A, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x8F5B, 0x0000, 0x0000, 0x8F5C, 0x0000, 0x0000, 0x0000, 0x0000, 0x8F5D, 0x0000, 0x0000, 0x0000, 0x0000, 0x8F5E, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8F5F, 0x8F60, 0x0000, 0x0000, 0x0000, 0x8F61, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8F62, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8F63, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8F64, 0x0000, 0x8F65, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x8F66, 0x0000, 0x0000, 0x8F67, 0x0000, 0x0000, 0x0000, 0x8F68, 0x0000, 0x0000, 0x8F69, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8F6A, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8F6B, 0x0000, 0x0000, 0x8F6C, 0x0000, 0x8F6D, 0x8F6E, 0x0000, 0x8F6F, 0x0000,
- 0x0000, 0x0000, 0x8F70, 0x8F71, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x8F72, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8F73, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x8F74, 0x0000, 0x0000, 0x0000, 0x0000, 0x8F75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8F76, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x8F77, 0x0000, 0x8F78, 0x0000, 0x8F79, 0x0000, 0x8F7A, 0x8F7B, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8F7C, 0x0000, 0x8F7D, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8F7E, 0x0000, 0x8F7F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x8F80, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8F81,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8F82, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x8F83, 0x0000, 0x8F84, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8F85, 0x0000, 0x8F86, 0x8F87, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x8F88, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8F89, 0x0000, 0x0000, 0x8F8A, 0x0000, 0x8F8B, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8F8C, 0x0000, 0x0000, 0x0000, 0x8F8D,
- 0x0000, 0x8F8E, 0x8F8F, 0x8F90, 0x0000, 0x8F91, 0x8F92, 0x8F93, 0x8F94, 0x0000, 0x8F95, 0x0000, 0x8F96, 0x0000, 0x8F97, 0x8F98,
- 0x8F99, 0x8F9A, 0x8F9B, 0x8F9C, 0x0000, 0x0000, 0x0000, 0x8F9D, 0x8F9E, 0x0000, 0x0000, 0x0000, 0x8F9F, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x8FA0, 0x0000, 0x0000, 0x8FA1, 0x0000, 0x8FA2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8FA3, 0x0000, 0x0000,
- 0x8FA4, 0x0000, 0x8FA5, 0x0000, 0x0000, 0x0000, 0x0000, 0x8FA6, 0x8FA7, 0x8FA8, 0x0000, 0x8FA9, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8FAA, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8FAB, 0x8FAC, 0x8FAD, 0x8FAE,
- 0x0000, 0x0000, 0x8FAF, 0x8FB0, 0x0000, 0x0000, 0x0000, 0x0000, 0x8FB1, 0x8FB2, 0x0000, 0x8FB3, 0x0000, 0x0000, 0x8FB4, 0x0000,
- 0x0000, 0x0000, 0x8FB5, 0x0000, 0x0000, 0x8FB6, 0x0000, 0x8FB7, 0x0000, 0x0000, 0x0000, 0x8FB8, 0x8FB9, 0x0000, 0x0000, 0x8FBA,
- 0x8FBB, 0x8FBC, 0x0000, 0x8FBD, 0x8FBE, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8FBF, 0x0000, 0x0000, 0x0000, 0x0000, 0x8FC0, 0x8FC1, 0x8FC2,
- 0x0000, 0x8FC3, 0x0000, 0x0000, 0x0000, 0x0000, 0x8FC4, 0x0000, 0x8FC5, 0x0000, 0x8FC6, 0x8FC7, 0x8FC8, 0x0000, 0x0000, 0x0000,
- 0x8FC9, 0x0000, 0x0000, 0x0000, 0x8FCA, 0x0000, 0x8FCB, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8FCC, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x8FCD, 0x8FCE, 0x0000, 0x8FCF, 0x0000, 0x0000, 0x0000, 0x8FD0, 0x8FD1, 0x8FD2, 0x0000, 0x8FD3, 0x0000, 0x8FD4,
- 0x0000, 0x0000, 0x8FD5, 0x0000, 0x8FD6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8FD7, 0x8FD8, 0x8FD9, 0x8FDA,
- 0x0000, 0x0000, 0x0000, 0x8FDB, 0x8FDC, 0x8FDD, 0x0000, 0x0000, 0x0000, 0x8FDE, 0x8FDF, 0x0000, 0x8FE0, 0x0000, 0x8FE1, 0x0000,
- 0x0000, 0x8FE2, 0x8FE3, 0x8FE4, 0x0000, 0x0000, 0x8FE5, 0x0000, 0x8FE6, 0x0000, 0x8FE7, 0x8FE8, 0x8FE9, 0x0000, 0x8FEA, 0x0000,
- 0x0000, 0x8FEB, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8FEC, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x8FED, 0x0000, 0x8FEE, 0x0000, 0x8FEF, 0x8FF0, 0x0000, 0x0000, 0x0000, 0x8FF1, 0x0000, 0x8FF2, 0x0000, 0x8FF3, 0x8FF4,
- 0x0000, 0x8FF5, 0x0000, 0x8FF6, 0x0000, 0x8FF7, 0x0000, 0x0000, 0x8FF8, 0x8FF9, 0x0000, 0x8FFA, 0x8FFB, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x8FFC, 0x0000, 0x0000, 0x0000, 0x0000, 0x8FFD, 0x0000, 0x0000, 0x0000, 0x0000, 0x8FFE, 0x0000, 0x8FFF, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9000, 0x9001, 0x9002, 0x0000,
- 0x0000, 0x9003, 0x0000, 0x9004, 0x9005, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x9006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x9007, 0x9008, 0x9009, 0x0000, 0x900A, 0x900B, 0x0000, 0x0000, 0x900C, 0x900D, 0x0000, 0x900E, 0x0000, 0x900F, 0x0000, 0x9010,
- 0x0000, 0x0000, 0x9011, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9012, 0x0000, 0x0000,
- 0x9013, 0x9014, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9015, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9016,
- 0x0000, 0x9017, 0x9018, 0x0000, 0x0000, 0x9019, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x901A, 0x901B, 0x901C,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x901D, 0x0000, 0x0000, 0x901E, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x901F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9020, 0x0000, 0x9021, 0x9022, 0x0000,
- 0x9023, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9024, 0x9025, 0x9026, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9027, 0x0000,
- 0x9028, 0x9029, 0x902A, 0x902B, 0x902C, 0x902D, 0x0000, 0x0000, 0x0000, 0x0000, 0x902E, 0x0000, 0x902F, 0x9030, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9031, 0x0000, 0x9032, 0x0000, 0x0000, 0x9033, 0x9034, 0x0000, 0x0000, 0x0000, 0x9035,
- 0x0000, 0x0000, 0x9036, 0x0000, 0x9037, 0x9038, 0x9039, 0x0000, 0x0000, 0x0000, 0x903A, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x903B,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x903C,
- 0x0000, 0x0000, 0x903D, 0x0000, 0x903E, 0x903F, 0x9040, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9041, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9042, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9043, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x9044, 0x0000, 0x0000, 0x9045, 0x0000, 0x9046, 0x0000, 0x9047, 0x0000, 0x0000, 0x0000, 0x0000, 0x9048, 0x0000,
- 0x0000, 0x9049, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x904A, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x904B, 0x0000, 0x904C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x904D, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x904E,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x904F, 0x0000, 0x0000, 0x9050, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x9051, 0x0000, 0x9052, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9053, 0x9054, 0x0000,
- 0x9055, 0x9056, 0x9057, 0x9058, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9059, 0x0000, 0x0000, 0x0000, 0x905A, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x905B, 0x0000, 0x0000, 0x0000, 0x905C, 0x905D, 0x0000, 0x905E, 0x905F, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x9060, 0x9061, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9062, 0x0000, 0x9063, 0x9064, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x9065, 0x9066, 0x9067, 0x9068, 0x0000, 0x0000, 0x0000, 0x9069, 0x0000, 0x906A, 0x0000, 0x0000,
- 0x0000, 0x906B, 0x906C, 0x0000, 0x906D, 0x0000, 0x0000, 0x906E, 0x906F, 0x0000, 0x9070, 0x9071, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x9072, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9073, 0x0000, 0x9074,
- 0x0000, 0x0000, 0x9075, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9076, 0x9077, 0x0000, 0x0000, 0x0000, 0x9078, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x9079, 0x907A, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x907B, 0x0000, 0x0000, 0x907C,
- 0x0000, 0x0000, 0x0000, 0x907D, 0x0000, 0x907E, 0x0000, 0x0000, 0x907F, 0x9080, 0x0000, 0x0000, 0x0000, 0x9081, 0x9082, 0x0000,
- 0x0000, 0x9083, 0x9084, 0x0000, 0x0000, 0x0000, 0x0000, 0x9085, 0x0000, 0x9086, 0x9087, 0x9088, 0x0000, 0x0000, 0x9089, 0x0000,
- 0x0000, 0x0000, 0x908A, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x908B, 0x908C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x908D, 0x0000, 0x908E, 0x0000, 0x908F, 0x9090, 0x9091, 0x0000, 0x0000, 0x0000, 0x0000, 0x9092, 0x0000, 0x9093,
- 0x9094, 0x0000, 0x0000, 0x9095, 0x0000, 0x0000, 0x0000, 0x9096, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9097, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9098, 0x9099, 0x0000, 0x909A, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x909B, 0x0000, 0x909C, 0x0000, 0x909D, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x909E, 0x909F, 0x90A0, 0x0000, 0x90A1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x90A2, 0x90A3, 0x0000, 0x90A4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x90A5, 0x0000, 0x0000, 0x90A6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x90A7, 0x0000, 0x90A8, 0x90A9, 0x90AA,
- 0x0000, 0x0000, 0x0000, 0x90AB, 0x0000, 0x0000, 0x90AC, 0x0000, 0x90AD, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x90AE,
- 0x90AF, 0x0000, 0x0000, 0x0000, 0x90B0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x90B1, 0x0000, 0x0000, 0x0000, 0x90B2,
- 0x0000, 0x0000, 0x90B3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x90B4, 0x90B5, 0x90B6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x90B7, 0x90B8, 0x0000, 0x0000,
- 0x90B9, 0x90BA, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x90BB, 0x0000, 0x90BC, 0x0000, 0x0000, 0x90BD,
- 0x0000, 0x0000, 0x90BE, 0x0000, 0x0000, 0x0000, 0x0000, 0x90BF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x90C0, 0x0000, 0x90C1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x90C2, 0x0000, 0x0000, 0x90C3, 0x0000, 0x90C4, 0x0000, 0x90C5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x90C6, 0x0000, 0x0000, 0x90C7, 0x90C8, 0x0000, 0x0000, 0x0000, 0x90C9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x90CA,
- 0x0000, 0x0000, 0x90CB, 0x0000, 0x90CC, 0x0000, 0x0000, 0x0000, 0x0000, 0x90CD, 0x90CE, 0x90CF, 0x90D0, 0x0000, 0x0000, 0x90D1,
- 0x0000, 0x90D2, 0x90D3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x90D4, 0x0000, 0x0000, 0x90D5, 0x90D6, 0x0000, 0x90D7, 0x90D8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x90D9, 0x90DA, 0x0000, 0x0000, 0x0000, 0x0000, 0x90DB, 0x0000, 0x0000, 0x0000, 0x90DC,
- 0x0000, 0x0000, 0x90DD, 0x0000, 0x90DE, 0x0000, 0x0000, 0x0000, 0x90DF, 0x90E0, 0x90E1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x90E2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x90E3, 0x0000, 0x0000, 0x90E4, 0x0000, 0x90E5, 0x90E6, 0x0000, 0x90E7, 0x90E8, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x90E9, 0x0000, 0x0000, 0x0000, 0x0000, 0x90EA, 0x0000, 0x90EB, 0x90EC, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x90ED, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x90EE, 0x0000, 0x0000, 0x0000, 0x90EF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x90F0, 0x90F1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x90F2, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x90F3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x90F4, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x90F5, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x90F6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x90F7, 0x0000, 0x90F8, 0x90F9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x90FA, 0x0000, 0x90FB,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x90FC, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x90FD, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x90FE, 0x90FF, 0x0000, 0x0000, 0x9100, 0x9101,
- 0x0000, 0x0000, 0x9102, 0x0000, 0x9103, 0x9104, 0x0000, 0x0000, 0x0000, 0x9105, 0x0000, 0x0000, 0x9106, 0x0000, 0x0000, 0x9107,
- 0x9108, 0x9109, 0x0000, 0x0000, 0x0000, 0x0000, 0x910A, 0x0000, 0x0000, 0x0000, 0x910B, 0x0000, 0x910C, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x910D, 0x0000, 0x0000, 0x0000, 0x0000, 0x910E, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x910F, 0x9110, 0x0000,
- 0x9111, 0x0000, 0x0000, 0x0000, 0x9112, 0x9113, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9114, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x9115, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x9116, 0x9117, 0x9118, 0x9119, 0x911A, 0x911B, 0x911C, 0x911D, 0x911E, 0x911F, 0x9120, 0x9121, 0x9122, 0x9123, 0x9124, 0x9125,
- 0x9126, 0x9127, 0x9128, 0x9129, 0x912A, 0x912B, 0x912C, 0x912D, 0x912E, 0x912F, 0x9130, 0x9131, 0x9132, 0x9133, 0x9134, 0x9135,
- 0x9136, 0x9137, 0x9138, 0x9139, 0x913A, 0x913B, 0x913C, 0x913D, 0x913E, 0x913F, 0x9140, 0x9141, 0x9142, 0x9143, 0x9144, 0x9145,
- 0x9146, 0x9147, 0x9148, 0x9149, 0x914A, 0x914B, 0x914C, 0x914D, 0x914E, 0x914F, 0x9150, 0x9151, 0x9152, 0x9153, 0x9154, 0x9155,
- 0x9156, 0x9157, 0x9158, 0x9159, 0x915A, 0x915B, 0x915C, 0x915D, 0x915E, 0x915F, 0x9160, 0x9161, 0x9162, 0x9163, 0x9164, 0x9165,
- 0x9166, 0x9167, 0x9168, 0x9169, 0x916A, 0x916B, 0x916C, 0x916D, 0x916E, 0x916F, 0x9170, 0x9171, 0x9172, 0x9173, 0x9174, 0x9175,
- 0x9176, 0x9177, 0x9178, 0x9179, 0x917A, 0x917B, 0x917C, 0x917D, 0x917E, 0x917F, 0x9180, 0x9181, 0x9182, 0x9183, 0x9184, 0x9185,
- 0x9186, 0x9187, 0x9188, 0x9189, 0x918A, 0x918B, 0x918C, 0x918D, 0x918E, 0x918F, 0x9190, 0x9191, 0x9192, 0x9193, 0x9194, 0x9195,
- 0x9196, 0x9197, 0x9198, 0x9199, 0x919A, 0x919B, 0x919C, 0x919D, 0x919E, 0x919F, 0x91A0, 0x91A1, 0x91A2, 0x91A3, 0x91A4, 0x91A5,
- 0x91A6, 0x91A7, 0x91A8, 0x91A9, 0x91AA, 0x91AB, 0x91AC, 0x91AD, 0x91AE, 0x91AF, 0x91B0, 0x91B1, 0x91B2, 0x91B3, 0x91B4, 0x91B5,
- 0x91B6, 0x91B7, 0x91B8, 0x91B9, 0x91BA, 0x91BB, 0x91BC, 0x91BD, 0x91BE, 0x91BF, 0x91C0, 0x91C1, 0x91C2, 0x91C3, 0x91C4, 0x91C5,
- 0x91C6, 0x91C7, 0x91C8, 0x91C9, 0x91CA, 0x91CB, 0x91CC, 0x91CD, 0x91CE, 0x91CF, 0x91D0, 0x91D1, 0x91D2, 0x91D3, 0x91D4, 0x91D5,
- 0x91D6, 0x91D7, 0x91D8, 0x91D9, 0x91DA, 0x91DB, 0x91DC, 0x91DD, 0x91DE, 0x91DF, 0x91E0, 0x91E1, 0x91E2, 0x91E3, 0x91E4, 0x91E5,
- 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, 0x0000, 0x0000,
- 0x9224, 0x0000, 0x9225, 0x0000, 0x0000, 0x9226, 0x9227, 0x9228, 0x9229, 0x922A, 0x922B, 0x922C, 0x922D, 0x922E, 0x922F, 0x0000,
- 0x9230, 0x0000, 0x9231, 0x0000, 0x0000, 0x9232, 0x9233, 0x0000, 0x0000, 0x0000, 0x9234, 0x9235, 0x9236, 0x9237, 0x0000, 0x0000,
- 0x9238, 0x9239, 0x923A, 0x923B, 0x923C, 0x923D, 0x923E, 0x923F, 0x9240, 0x9241, 0x9242, 0x9243, 0x9244, 0x9245, 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, 0x0000, 0x9274, 0x0000, 0x0000,
- 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, 0x928E, 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, 0x92A8, 0x92A9, 0x92AA, 0x92AB, 0x92AC, 0x92AD, 0x92AE, 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, 0x92C8, 0x92C9, 0x92CA, 0x92CB, 0x92CC, 0x92CD, 0x92CE, 0x92CF, 0x92D0, 0x92D1, 0x92D2, 0x92D3, 0x0000,
- 0x0000, 0x0000, 0x92D4, 0x92D5, 0x92D6, 0x0000, 0x0000, 0x0000, 0x92D7, 0x92D8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x23AC, 0x23AE, 0x23B0, 0x3312, 0x3315, 0x23B2, 0x23B4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x23B6, 0x23B8, 0x23BA, 0x23BC, 0x23BE, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x23C0, 0x0000, 0x23C2,
- 0x92D9, 0x92DA, 0x92DB, 0x92DC, 0x92DD, 0x92DE, 0x92DF, 0x92E0, 0x92E1, 0x92E2, 0x23C4, 0x23C6, 0x23C8, 0x23CA, 0x23CC, 0x23CE,
- 0x23D0, 0x23D2, 0x23D4, 0x23D6, 0x23D8, 0x23DA, 0x23DC, 0x0000, 0x23DE, 0x23E0, 0x23E2, 0x23E4, 0x23E6, 0x0000, 0x23E8, 0x0000,
- 0x23EA, 0x23EC, 0x0000, 0x23EE, 0x23F0, 0x0000, 0x23F2, 0x23F4, 0x23F6, 0x23F8, 0x23FA, 0x23FC, 0x23FE, 0x2400, 0x2402, 0x2404,
- 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, 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, 0x933E, 0x933F, 0x9340, 0x9341, 0x9342,
- 0x9343, 0x9344, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x9345, 0x9346, 0x9347, 0x9348, 0x9349, 0x934A, 0x934B, 0x934C, 0x934D, 0x934E, 0x934F, 0x9350, 0x9351,
- 0x9352, 0x9353, 0x9354, 0x9355, 0x9356, 0x9357, 0x9358, 0x9359, 0x935A, 0x935B, 0x2406, 0x2408, 0x240A, 0x240C, 0x240E, 0x2410,
- 0x2412, 0x2414, 0x2416, 0x2418, 0x241A, 0x241C, 0x241E, 0x2420, 0x2422, 0x2424, 0x2426, 0x2428, 0x935C, 0x935D, 0x935E, 0x935F,
- 0x242A, 0x242C, 0x242E, 0x2430, 0x2432, 0x2434, 0x2436, 0x2438, 0x243A, 0x243C, 0x243E, 0x2440, 0x2442, 0x2444, 0x2446, 0x2448,
- 0x244A, 0x244C, 0x244E, 0x2450, 0x2452, 0x2454, 0x2456, 0x2458, 0x245A, 0x245C, 0x245E, 0x2460, 0x2462, 0x2464, 0x2466, 0x2468,
- 0x246A, 0x246C, 0x246E, 0x2470, 0x2472, 0x2474, 0x2476, 0x2478, 0x247A, 0x247C, 0x247E, 0x2480, 0x2482, 0x2484, 0x2486, 0x2488,
- 0x248A, 0x248C, 0x248E, 0x2490, 0x2492, 0x2494, 0x2496, 0x2498, 0x249A, 0x249C, 0x249E, 0x24A0, 0x24A2, 0x24A4, 0x24A6, 0x24A8,
- 0x24AA, 0x24AC, 0x24AE, 0x24B0, 0x24B2, 0x24B4, 0x24B6, 0x24B8, 0x24BA, 0x24BC, 0x24BE, 0x24C0, 0x24C2, 0x24C4, 0x24C6, 0x24C8,
- 0x24CA, 0x24CC, 0x24CE, 0x24D0, 0x24D2, 0x24D4, 0x24D6, 0x24D8, 0x24DA, 0x24DC, 0x24DE, 0x24E0, 0x24E2, 0x24E4, 0x24E6, 0x24E8,
- 0x24EA, 0x24EC, 0x24EE, 0x24F0, 0x24F2, 0x24F4, 0x24F6, 0x24F8, 0x24FA, 0x24FC, 0x24FE, 0x2500, 0x2502, 0x2504, 0x2506, 0x2508,
- 0x250A, 0x250C, 0x250E, 0x2510, 0x2512, 0x2514, 0x2516, 0x2518, 0x251A, 0x251C, 0x251E, 0x2520, 0x2522, 0x2524, 0x2526, 0x2528,
- 0x252A, 0x252C, 0x252E, 0x2530, 0x2532, 0x2534, 0x2536, 0x2538, 0x253A, 0x253C, 0x253E, 0x2540, 0x2542, 0x2544, 0x2546, 0x2548,
- 0x254A, 0x254C, 0x254E, 0x2550, 0x2552, 0x2554, 0x2556, 0x2558, 0x255A, 0x255C, 0x255E, 0x2560, 0x2562, 0x2564, 0x2566, 0x2568,
- 0x256A, 0x256C, 0x256E, 0x2570, 0x2572, 0x2574, 0x2576, 0x2578, 0x257A, 0x257C, 0x257E, 0x2580, 0x2582, 0x2584, 0x2586, 0x2588,
- 0x258A, 0x258C, 0x258E, 0x2590, 0x2592, 0x2594, 0x2596, 0x2598, 0x259A, 0x259C, 0x259E, 0x25A0, 0x25A2, 0x25A4, 0x25A6, 0x25A8,
- 0x25AA, 0x25AC, 0x25AE, 0x25B0, 0x25B2, 0x25B4, 0x25B6, 0x25B8, 0x25BA, 0x25BC, 0x25BE, 0x25C0, 0x25C2, 0x25C4, 0x25C6, 0x25C8,
- 0x25CA, 0x25CC, 0x25CE, 0x25D0, 0x25D2, 0x25D4, 0x25D6, 0x25D8, 0x25DA, 0x25DC, 0x25DE, 0x25E0, 0x25E2, 0x25E4, 0x25E6, 0x25E8,
- 0x25EA, 0x25EC, 0x25EE, 0x25F0, 0x25F2, 0x25F4, 0x25F6, 0x25F8, 0x25FA, 0x25FC, 0x25FE, 0x2600, 0x2602, 0x2604, 0x2606, 0x2608,
- 0x260A, 0x260C, 0x3318, 0x331B, 0x331E, 0x260E, 0x2610, 0x2612, 0x2614, 0x2616, 0x2618, 0x261A, 0x261C, 0x261E, 0x2620, 0x2622,
- 0x2624, 0x2626, 0x2628, 0x262A, 0x262C, 0x262E, 0x2630, 0x2632, 0x2634, 0x2636, 0x2638, 0x263A, 0x263C, 0x263E, 0x2640, 0x2642,
- 0x2644, 0x2646, 0x2648, 0x264A, 0x264C, 0x264E, 0x2650, 0x2652, 0x2654, 0x2656, 0x2658, 0x265A, 0x265C, 0x265E, 0x2660, 0x2662,
- 0x2664, 0x2666, 0x2668, 0x266A, 0x266C, 0x266E, 0x2670, 0x2672, 0x2674, 0x2676, 0x2678, 0x267A, 0x267C, 0x267E, 0x2680, 0x2682,
- 0x2684, 0x2686, 0x2688, 0x268A, 0x268C, 0x268E, 0x2690, 0x2692, 0x2694, 0x2696, 0x2698, 0x269A, 0x269C, 0x269E, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x3321, 0x3324, 0x3327, 0x332A, 0x332D, 0x3330, 0x3333, 0x3336, 0x3339, 0x333C, 0x333F, 0x3342, 0x3345, 0x3348, 0x334B, 0x334E,
- 0x3351, 0x3354, 0x3357, 0x335A, 0x335D, 0x3360, 0x3363, 0x3366, 0x3369, 0x336C, 0x336F, 0x3372, 0x3375, 0x3378, 0x337B, 0x337E,
- 0x3381, 0x3384, 0x3387, 0x338A, 0x338D, 0x3390, 0x3393, 0x3396, 0x3399, 0x339C, 0x339F, 0x33A2, 0x33A5, 0x33A8, 0x33AB, 0x33AE,
- 0x33B1, 0x33B4, 0x33B7, 0x33BA, 0x33BD, 0x33C0, 0x33C3, 0x33C6, 0x33C9, 0x33CC, 0x33CF, 0x33D2, 0x33D5, 0x33D8, 0x33DB, 0x33DE,
- 0x0000, 0x0000, 0x33E1, 0x33E4, 0x33E7, 0x33EA, 0x33ED, 0x33F0, 0x33F3, 0x33F6, 0x33F9, 0x33FC, 0x33FF, 0x3402, 0x3405, 0x3408,
- 0x340B, 0x340E, 0x3411, 0x3414, 0x3417, 0x341A, 0x341D, 0x3420, 0x3423, 0x3426, 0x3429, 0x342C, 0x342F, 0x3432, 0x3435, 0x3438,
- 0x343B, 0x343E, 0x3441, 0x3444, 0x3447, 0x344A, 0x344D, 0x3450, 0x3453, 0x3456, 0x3459, 0x345C, 0x345F, 0x3462, 0x3465, 0x3468,
- 0x346B, 0x346E, 0x3471, 0x3474, 0x3477, 0x347A, 0x347D, 0x3480, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x3483, 0x3486, 0x41A4, 0x41A9, 0x41AE, 0x41B3, 0x41B8, 0x41BD, 0x41C2, 0x3489, 0x41C7, 0x41DA, 0x41E3, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x9360, 0x9361, 0x9362, 0x9363, 0x9364, 0x9365, 0x9366, 0x9367, 0x9368, 0x9369, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x936A, 0x936B, 0x936C, 0x936D, 0x936E, 0x936F, 0x9370, 0x9371, 0x9372, 0x9373, 0x9374, 0x9375, 0x9376, 0x9377, 0x9378, 0x9379,
- 0x937A, 0x937B, 0x937C, 0x937D, 0x937E, 0x0000, 0x0000, 0x937F, 0x9380, 0x9381, 0x9382, 0x9383, 0x9384, 0x9385, 0x9386, 0x9387,
- 0x9388, 0x9389, 0x938A, 0x0000, 0x938B, 0x938C, 0x938D, 0x938E, 0x938F, 0x9390, 0x9391, 0x9392, 0x9393, 0x9394, 0x9395, 0x9396,
- 0x9397, 0x9398, 0x9399, 0x939A, 0x939B, 0x939C, 0x939D, 0x0000, 0x939E, 0x939F, 0x93A0, 0x93A1, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x93A2, 0x26A0, 0x93A3, 0x0000, 0x93A4, 0x0000, 0x93A5, 0x26A2, 0x93A6, 0x26A4, 0x93A7, 0x26A6, 0x93A8, 0x26A8, 0x93A9, 0x26AA,
- 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,
- 0x93CA, 0x93CB, 0x93CC, 0x93CD, 0x93CE, 0x93CF, 0x93D0, 0x93D1, 0x93D2, 0x93D3, 0x93D4, 0x93D5, 0x93D6, 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, 0x26AC, 0x26AE, 0x26B0, 0x26B2, 0x26B4, 0x26B6, 0x26B8, 0x26BA, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x941F, 0x9420, 0x9421, 0x9422, 0x9423, 0x9424, 0x9425, 0x9426, 0x9427, 0x9428, 0x9429, 0x942A, 0x942B, 0x942C, 0x942D,
- 0x942E, 0x942F, 0x9430, 0x9431, 0x9432, 0x9433, 0x9434, 0x9435, 0x9436, 0x9437, 0x9438, 0x9439, 0x943A, 0x943B, 0x943C, 0x943D,
- 0x943E, 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, 0x946B, 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, 0x9485, 0x9486, 0x9487, 0x9488, 0x9489, 0x948A, 0x948B, 0x948C, 0x948D,
- 0x948E, 0x948F, 0x9490, 0x9491, 0x9492, 0x9493, 0x9494, 0x9495, 0x9496, 0x9497, 0x9498, 0x9499, 0x949A, 0x949B, 0x949C, 0x949D,
- 0x949E, 0x949F, 0x94A0, 0x94A1, 0x94A2, 0x94A3, 0x94A4, 0x94A5, 0x94A6, 0x94A7, 0x94A8, 0x94A9, 0x94AA, 0x94AB, 0x94AC, 0x94AD,
- 0x94AE, 0x94AF, 0x94B0, 0x94B1, 0x94B2, 0x94B3, 0x94B4, 0x94B5, 0x94B6, 0x94B7, 0x94B8, 0x94B9, 0x94BA, 0x94BB, 0x94BC, 0x94BD,
- 0x94BE, 0x94BF, 0x94C0, 0x94C1, 0x94C2, 0x94C3, 0x94C4, 0x94C5, 0x94C6, 0x94C7, 0x94C8, 0x94C9, 0x94CA, 0x94CB, 0x94CC, 0x94CD,
- 0x94CE, 0x94CF, 0x94D0, 0x94D1, 0x94D2, 0x94D3, 0x94D4, 0x94D5, 0x94D6, 0x94D7, 0x94D8, 0x94D9, 0x94DA, 0x94DB, 0x94DC, 0x0000,
- 0x0000, 0x0000, 0x94DD, 0x94DE, 0x94DF, 0x94E0, 0x94E1, 0x94E2, 0x0000, 0x0000, 0x94E3, 0x94E4, 0x94E5, 0x94E6, 0x94E7, 0x94E8,
- 0x0000, 0x0000, 0x94E9, 0x94EA, 0x94EB, 0x94EC, 0x94ED, 0x94EE, 0x0000, 0x0000, 0x94EF, 0x94F0, 0x94F1, 0x0000, 0x0000, 0x0000,
- 0x94F2, 0x94F3, 0x94F4, 0x94F5, 0x94F6, 0x94F7, 0x94F8, 0x0000, 0x94F9, 0x94FA, 0x94FB, 0x94FC, 0x94FD, 0x94FE, 0x94FF, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
-};
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x8001, 0x0000, 0x2000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x2002, 0x8002, 0x0000, 0x2004, 0x0000, 0x0000, 0x8003, 0x8004, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8005, 0x0000, 0x8006,
+ 0x0000, 0x0000, 0x0000, 0x8007, 0x8008, 0x0000, 0x0000, 0x8009, 0x800A,
+ 0x800B, 0x800C, 0x0000, 0x0000, 0x800D, 0x800E, 0x800F, 0x0000, 0x3000,
+ 0x3003, 0x3006, 0x0000, 0x8010, 0x8011, 0x8012, 0x8013, 0x8014, 0x8015,
+ 0x0000, 0x8016, 0x8017, 0x8018, 0x8019, 0x801A, 0x801B, 0x801C, 0x801D,
+ 0x801E, 0x801F, 0x8020, 0x8021, 0x8022, 0x8023, 0x8024, 0x8025, 0x0000,
+ 0x8026, 0x8027, 0x8028, 0x8029, 0x802A, 0x802B, 0x0000, 0x0000, 0x802C,
+ 0x802D, 0x802E, 0x802F, 0x8030, 0x8031, 0x0000, 0x8032, 0x8033, 0x8034,
+ 0x8035, 0x8036, 0x8037, 0x8038, 0x8039, 0x803A, 0x0000, 0x803B, 0x803C,
+ 0x803D, 0x803E, 0x803F, 0x8040, 0x0000, 0x8041, 0x8042, 0x8043, 0x8044,
+ 0x8045, 0x8046, 0x0000, 0x8047, 0x8048, 0x8049, 0x804A, 0x804B, 0x804C,
+ 0x804D, 0x804E, 0x804F, 0x8050, 0x8051, 0x8052, 0x8053, 0x8054, 0x8055,
+ 0x8056, 0x8057, 0x8058, 0x8059, 0x805A, 0x805B, 0x805C, 0x805D, 0x805E,
+ 0x805F, 0x8060, 0x8061, 0x8062, 0x8063, 0x8064, 0x8065, 0x8066, 0x8067,
+ 0x8068, 0x8069, 0x806A, 0x806B, 0x806C, 0x806D, 0x806E, 0x806F, 0x8070,
+ 0x8071, 0x8072, 0x8073, 0x8074, 0x8075, 0x8076, 0x8077, 0x8078, 0x0000,
+ 0x2006, 0x2008, 0x8079, 0x807A, 0x807B, 0x807C, 0x807D, 0x807E, 0x807F,
+ 0x8080, 0x8081, 0x8082, 0x8083, 0x8084, 0x8085, 0x8086, 0x8087, 0x8088,
+ 0x8089, 0x808A, 0x808B, 0x808C, 0x808D, 0x808E, 0x0000, 0x0000, 0x808F,
+ 0x8090, 0x8091, 0x8092, 0x8093, 0x8094, 0x200A, 0x200C, 0x8095, 0x8096,
+ 0x8097, 0x8098, 0x8099, 0x809A, 0x809B, 0x809C, 0x809D, 0x809E, 0x809F,
+ 0x80A0, 0x80A1, 0x80A2, 0x80A3, 0x80A4, 0x80A5, 0x80A6, 0x80A7, 0x80A8,
+ 0x80A9, 0x80AA, 0x80AB, 0x80AC, 0x80AD, 0x80AE, 0x80AF, 0x80B0, 0x80B1,
+ 0x80B2, 0x80B3, 0x80B4, 0x80B5, 0x80B6, 0x80B7, 0x80B8, 0x80B9, 0x80BA,
+ 0x80BB, 0x80BC, 0x80BD, 0x80BE, 0x80BF, 0x80C0, 0x80C1, 0x80C2, 0x80C3,
+ 0x80C4, 0x0000, 0x0000, 0x0000, 0x80C5, 0x80C6, 0x80C7, 0x80C8, 0x80C9,
+ 0x80CA, 0x0000, 0x80CB, 0x0000, 0x80CC, 0x80CD, 0x80CE, 0x80CF, 0x0000,
+ 0x0000, 0x0000, 0x80D0, 0x80D1, 0x80D2, 0x80D3, 0x0000, 0x80D4, 0x80D5,
+ 0x80D6, 0x80D7, 0x80D8, 0x80D9, 0x0000, 0x0000, 0x80DA, 0x80DB, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x80DC, 0x80DD, 0x80DE, 0x80DF, 0x80E0, 0x80E1,
+ 0x80E2, 0x0000, 0x80E3, 0x80E4, 0x80E5, 0x80E6, 0x80E7, 0x0000, 0x80E8,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x200E, 0x2010, 0x2012, 0x2014, 0x2016, 0x2018, 0x201A,
+ 0x201C, 0x201E, 0x80E9, 0x80EA, 0x80EB, 0x80EC, 0x80ED, 0x80EE, 0x80EF,
+ 0x80F0, 0x80F1, 0x80F2, 0x80F3, 0x80F4, 0x80F5, 0x80F6, 0x80F7, 0x80F8,
+ 0x80F9, 0x80FA, 0x80FB, 0x80FC, 0x80FD, 0x80FE, 0x80FF, 0x8100, 0x8101,
+ 0x8102, 0x8103, 0x8104, 0x8105, 0x8106, 0x8107, 0x8108, 0x8109, 0x810A,
+ 0x810B, 0x810C, 0x2020, 0x2022, 0x2024, 0x810D, 0x810E, 0x0000, 0x0000,
+ 0x810F, 0x8110, 0x8111, 0x8112, 0x8113, 0x8114, 0x8115, 0x8116, 0x8117,
+ 0x8118, 0x8119, 0x811A, 0x811B, 0x811C, 0x811D, 0x811E, 0x811F, 0x8120,
+ 0x8121, 0x8122, 0x8123, 0x8124, 0x8125, 0x8126, 0x8127, 0x8128, 0x8129,
+ 0x812A, 0x812B, 0x812C, 0x812D, 0x812E, 0x812F, 0x8130, 0x8131, 0x8132,
+ 0x0000, 0x0000, 0x8133, 0x8134, 0x8135, 0x8136, 0x0000, 0x0000, 0x8137,
+ 0x8138, 0x8139, 0x813A, 0x813B, 0x813C, 0x813D, 0x813E, 0x813F, 0x8140,
+ 0x8141, 0x8142, 0x8143, 0x8144, 0x8145, 0x8146, 0x8147, 0x8148, 0x8149,
+ 0x814A, 0x2026, 0x2028, 0x814B, 0x814C, 0x814D, 0x814E, 0x814F, 0x8150,
+ 0x8151, 0x0000, 0x0000, 0x8152, 0x8153, 0x8154, 0x8155, 0x8156, 0x8157,
+ 0x8158, 0x8159, 0x815A, 0x815B, 0x815C, 0x815D, 0x815E, 0x815F, 0x0000,
+ 0x8160, 0x8161, 0x8162, 0x8163, 0x8164, 0x8165, 0x8166, 0x0000, 0x8167,
+ 0x8168, 0x8169, 0x816A, 0x816B, 0x816C, 0x816D, 0x816E, 0x816F, 0x0000,
+ 0x0000, 0x8170, 0x8171, 0x0000, 0x8172, 0x0000, 0x8173, 0x8174, 0x8175,
+ 0x8176, 0x0000, 0x8177, 0x8178, 0x8179, 0x817A, 0x817B, 0x817C, 0x817D,
+ 0x202A, 0x0000, 0x0000, 0x817E, 0x817F, 0x8180, 0x8181, 0x8182, 0x8183,
+ 0x8184, 0x8185, 0x8186, 0x8187, 0x0000, 0x8188, 0x8189, 0x818A, 0x818B,
+ 0x818C, 0x818D, 0x0000, 0x818E, 0x818F, 0x8190, 0x8191, 0x8192, 0x8193,
+ 0x8194, 0x0000, 0x8195, 0x0000, 0x0000, 0x0000, 0x8196, 0x0000, 0x8197,
+ 0x8198, 0x8199, 0x819A, 0x819B, 0x819C, 0x819D, 0x819E, 0x0000, 0x0000,
+ 0x202C, 0x202E, 0x2030, 0x2032, 0x2034, 0x2036, 0x2038, 0x203A, 0x203C,
+ 0x0000, 0x0000, 0x819F, 0x81A0, 0x81A1, 0x81A2, 0x81A3, 0x81A4, 0x81A5,
+ 0x81A6, 0x81A7, 0x81A8, 0x81A9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x81AA, 0x81AB,
+ 0x81AC, 0x81AD, 0x81AE, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x81AF, 0x81B0, 0x0000, 0x81B1, 0x81B2,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x81B3, 0x81B4, 0x81B5, 0x81B6, 0x81B7, 0x81B8,
+ 0x81B9, 0x81BA, 0x81BB, 0x81BC, 0x81BD, 0x81BE, 0x81BF, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x81C0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x81C1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x81C2, 0x81C3, 0x81C4, 0x81C5, 0x81C6, 0x81C7, 0x81C8, 0x0000, 0x81C9,
+ 0x0000, 0x81CA, 0x81CB, 0x81CC, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x81CD, 0x81CE, 0x81CF, 0x81D0, 0x81D1, 0x81D2, 0x81D3,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x81D4, 0x81D5,
+ 0x81D6, 0x81D7, 0x81D8, 0x0000, 0x81D9, 0x81DA, 0x81DB, 0x81DC, 0x81DD,
+ 0x81DE, 0x81DF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x81E0, 0x81E1, 0x81E2, 0x0000, 0x81E3, 0x81E4, 0x0000, 0x0000, 0x0000,
+ 0x81E5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x81E6, 0x81E7,
+ 0x0000, 0x81E8, 0x0000, 0x0000, 0x0000, 0x81E9, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x81EA, 0x81EB, 0x81EC, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x81ED, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x81EE, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x81EF, 0x81F0, 0x0000,
+ 0x81F1, 0x0000, 0x0000, 0x0000, 0x81F2, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x81F3, 0x81F4, 0x81F5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x81F6, 0x81F7, 0x0000, 0x0000, 0x81F8, 0x81F9,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x81FA,
+ 0x81FB, 0x0000, 0x0000, 0x0000, 0x0000, 0x81FC, 0x81FD, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x81FE, 0x81FF, 0x0000, 0x0000, 0x8200, 0x8201, 0x8202, 0x8203,
+ 0x8204, 0x8205, 0x8206, 0x8207, 0x8208, 0x8209, 0x820A, 0x820B, 0x820C,
+ 0x820D, 0x820E, 0x820F, 0x8210, 0x8211, 0x8212, 0x8213, 0x8214, 0x8215,
+ 0x203E, 0x2040, 0x8216, 0x8217, 0x0000, 0x0000, 0x8218, 0x8219, 0x821A,
+ 0x821B, 0x0000, 0x0000, 0x821C, 0x821D, 0x821E, 0x821F, 0x2042, 0x2044,
+ 0x8220, 0x8221, 0x8222, 0x8223, 0x0000, 0x0000, 0x8224, 0x8225, 0x8226,
+ 0x8227, 0x0000, 0x8228, 0x8229, 0x822A, 0x822B, 0x822C, 0x822D, 0x822E,
+ 0x822F, 0x8230, 0x8231, 0x0000, 0x0000, 0x8232, 0x8233, 0x0000, 0x8234,
+ 0x8235, 0x8236, 0x8237, 0x2046, 0x2048, 0x8238, 0x8239, 0x0000, 0x0000,
+ 0x823A, 0x823B, 0x823C, 0x823D, 0x823E, 0x823F, 0x0000, 0x0000, 0x8240,
+ 0x8241, 0x8242, 0x8243, 0x8244, 0x8245, 0x0000, 0x0000, 0x8246, 0x8247,
+ 0x8248, 0x8249, 0x824A, 0x824B, 0x824C, 0x824D, 0x824E, 0x824F, 0x8250,
+ 0x8251, 0x8252, 0x8253, 0x8254, 0x8255, 0x8256, 0x8257, 0x8258, 0x8259,
+ 0x825A, 0x825B, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x825C, 0x825D, 0x825E, 0x825F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x204A, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x204C, 0x204E, 0x2050,
+ 0x2052, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x2054, 0x0000, 0x2056, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x2058, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x205A, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x205C, 0x0000, 0x0000, 0x205E, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2060, 0x2062,
+ 0x2064, 0x2066, 0x2068, 0x206A, 0x206C, 0x206E, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2070, 0x2072, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x2074, 0x2076, 0x0000, 0x2078, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x207A, 0x0000, 0x0000, 0x207C, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x207E, 0x2080, 0x2082, 0x0000, 0x0000, 0x2084,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2086,
+ 0x0000, 0x0000, 0x2088, 0x208A, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x208C, 0x208E, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x2090, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x2092, 0x2094, 0x2096, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x2098, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x209A, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x209C, 0x209E, 0x0000, 0x20A0, 0x20A2,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x20A4, 0x20A6, 0x20A8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x20AA, 0x0000, 0x20AC, 0x20AE, 0x20B0, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x20B2,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x20B4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x20B6, 0x20B8, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8260, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x20BA, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x20BC, 0x0000, 0x0000, 0x0000, 0x0000, 0x20BE, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x20C0, 0x0000, 0x0000, 0x0000, 0x0000, 0x20C2,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x20C4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x20C6, 0x0000, 0x20C8, 0x20CA, 0x20CC,
+ 0x20CE, 0x20D0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x20D2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x20D4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x20D6, 0x0000, 0x0000, 0x0000, 0x0000, 0x20D8, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x20DA, 0x0000, 0x0000, 0x0000, 0x0000, 0x20DC, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x20DE, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x20E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8261, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x20E2, 0x0000, 0x20E4,
+ 0x0000, 0x20E6, 0x0000, 0x20E8, 0x0000, 0x20EA, 0x0000, 0x0000, 0x0000,
+ 0x20EC, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x20EE, 0x0000, 0x20F0, 0x0000,
+ 0x0000, 0x20F2, 0x20F4, 0x0000, 0x20F6, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8262, 0x8263,
+ 0x8264, 0x8265, 0x8266, 0x8267, 0x8268, 0x8269, 0x826A, 0x826B, 0x826C,
+ 0x826D, 0x826E, 0x826F, 0x8270, 0x0000, 0x8271, 0x8272, 0x8273, 0x8274,
+ 0x8275, 0x8276, 0x8277, 0x8278, 0x8279, 0x827A, 0x827B, 0x827C, 0x827D,
+ 0x827E, 0x827F, 0x8280, 0x8281, 0x8282, 0x0000, 0x8283, 0x8284, 0x8285,
+ 0x8286, 0x8287, 0x8288, 0x8289, 0x828A, 0x828B, 0x828C, 0x828D, 0x828E,
+ 0x828F, 0x8290, 0x8291, 0x8292, 0x8293, 0x8294, 0x8295, 0x8296, 0x8297,
+ 0x8298, 0x8299, 0x829A, 0x829B, 0x829C, 0x829D, 0x829E, 0x0000, 0x829F,
+ 0x82A0, 0x82A1, 0x82A2, 0x82A3, 0x82A4, 0x82A5, 0x82A6, 0x82A7, 0x82A8,
+ 0x82A9, 0x82AA, 0x82AB, 0x0000, 0x20F8, 0x82AC, 0x0000, 0x82AD, 0x82AE,
+ 0x82AF, 0x82B0, 0x82B1, 0x82B2, 0x82B3, 0x82B4, 0x82B5, 0x82B6, 0x82B7,
+ 0x82B8, 0x82B9, 0x82BA, 0x82BB, 0x82BC, 0x82BD, 0x82BE, 0x82BF, 0x82C0,
+ 0x82C1, 0x82C2, 0x82C3, 0x82C4, 0x82C5, 0x82C6, 0x0000, 0x82C7, 0x0000,
+ 0x0000, 0x82C8, 0x82C9, 0x82CA, 0x82CB, 0x82CC, 0x82CD, 0x82CE, 0x82CF,
+ 0x82D0, 0x82D1, 0x82D2, 0x82D3, 0x82D4, 0x82D5, 0x82D6, 0x82D7, 0x82D8,
+ 0x82D9, 0x82DA, 0x82DB, 0x82DC, 0x82DD, 0x82DE, 0x82DF, 0x82E0, 0x82E1,
+ 0x82E2, 0x82E3, 0x82E4, 0x82E5, 0x82E6, 0x82E7, 0x82E8, 0x82E9, 0x82EA,
+ 0x82EB, 0x82EC, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x82ED, 0x82EE, 0x82EF, 0x82F0, 0x82F1, 0x82F2,
+ 0x82F3, 0x82F4, 0x82F5, 0x82F6, 0x82F7, 0x82F8, 0x82F9, 0x82FA, 0x82FB,
+ 0x82FC, 0x82FD, 0x82FE, 0x82FF, 0x8300, 0x8301, 0x8302, 0x8303, 0x8304,
+ 0x8305, 0x8306, 0x8307, 0x8308, 0x8309, 0x830A, 0x830B, 0x830C, 0x830D,
+ 0x830E, 0x830F, 0x8310, 0x8311, 0x8312, 0x8313, 0x8314, 0x8315, 0x8316,
+ 0x8317, 0x8318, 0x8319, 0x831A, 0x831B, 0x831C, 0x831D, 0x831E, 0x831F,
+ 0x8320, 0x8321, 0x8322, 0x8323, 0x8324, 0x8325, 0x8326, 0x8327, 0x8328,
+ 0x8329, 0x832A, 0x832B, 0x832C, 0x832D, 0x832E, 0x832F, 0x8330, 0x8331,
+ 0x8332, 0x8333, 0x8334, 0x8335, 0x8336, 0x8337, 0x8338, 0x8339, 0x833A,
+ 0x833B, 0x833C, 0x833D, 0x833E, 0x833F, 0x8340, 0x8341, 0x8342, 0x8343,
+ 0x8344, 0x8345, 0x8346, 0x8347, 0x8348, 0x8349, 0x834A, 0x834B, 0x834C,
+ 0x834D, 0x834E, 0x834F, 0x8350, 0x8351, 0x8352, 0x8353, 0x8354, 0x8355,
+ 0x8356, 0x8357, 0x8358, 0x8359, 0x835A, 0x835B, 0x835C, 0x835D, 0x835E,
+ 0x835F, 0x8360, 0x8361, 0x8362, 0x8363, 0x8364, 0x8365, 0x8366, 0x8367,
+ 0x8368, 0x8369, 0x836A, 0x836B, 0x836C, 0x836D, 0x836E, 0x836F, 0x8370,
+ 0x8371, 0x8372, 0x8373, 0x8374, 0x8375, 0x8376, 0x8377, 0x8378, 0x8379,
+ 0x837A, 0x837B, 0x837C, 0x837D, 0x837E, 0x837F, 0x8380, 0x8381, 0x8382,
+ 0x8383, 0x8384, 0x8385, 0x8386, 0x8387, 0x8388, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8389, 0x838A, 0x838B, 0x838C, 0x838D, 0x838E, 0x838F, 0x8390,
+ 0x8391, 0x8392, 0x8393, 0x8394, 0x8395, 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, 0x83B3, 0x83B4,
+ 0x83B5, 0x83B6, 0x83B7, 0x83B8, 0x83B9, 0x83BA, 0x83BB, 0x83BC, 0x83BD,
+ 0x83BE, 0x83BF, 0x83C0, 0x83C1, 0x83C2, 0x83C3, 0x83C4, 0x83C5, 0x83C6,
+ 0x83C7, 0x83C8, 0x83C9, 0x83CA, 0x83CB, 0x83CC, 0x83CD, 0x83CE, 0x83CF,
+ 0x83D0, 0x83D1, 0x83D2, 0x83D3, 0x83D4, 0x83D5, 0x83D6, 0x83D7, 0x83D8,
+ 0x83D9, 0x83DA, 0x83DB, 0x83DC, 0x83DD, 0x83DE, 0x83DF, 0x83E0, 0x83E1,
+ 0x83E2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x83E3, 0x83E4,
+ 0x83E5, 0x83E6, 0x83E7, 0x83E8, 0x83E9, 0x83EA, 0x83EB, 0x83EC, 0x83ED,
+ 0x83EE, 0x83EF, 0x83F0, 0x83F1, 0x83F2, 0x83F3, 0x83F4, 0x83F5, 0x83F6,
+ 0x83F7, 0x83F8, 0x0000, 0x0000, 0x83F9, 0x83FA, 0x83FB, 0x83FC, 0x83FD,
+ 0x83FE, 0x0000, 0x0000, 0x83FF, 0x8400, 0x8401, 0x8402, 0x8403, 0x8404,
+ 0x8405, 0x8406, 0x8407, 0x8408, 0x8409, 0x840A, 0x840B, 0x840C, 0x840D,
+ 0x840E, 0x840F, 0x8410, 0x8411, 0x8412, 0x8413, 0x8414, 0x8415, 0x8416,
+ 0x8417, 0x8418, 0x8419, 0x841A, 0x841B, 0x841C, 0x841D, 0x841E, 0x841F,
+ 0x8420, 0x8421, 0x8422, 0x8423, 0x8424, 0x0000, 0x0000, 0x8425, 0x8426,
+ 0x8427, 0x8428, 0x8429, 0x842A, 0x0000, 0x0000, 0x842B, 0x842C, 0x842D,
+ 0x842E, 0x842F, 0x8430, 0x8431, 0x8432, 0x0000, 0x8433, 0x0000, 0x8434,
+ 0x0000, 0x8435, 0x0000, 0x8436, 0x8437, 0x8438, 0x8439, 0x843A, 0x843B,
+ 0x843C, 0x843D, 0x843E, 0x843F, 0x8440, 0x8441, 0x8442, 0x8443, 0x8444,
+ 0x8445, 0x8446, 0x8447, 0x8448, 0x8449, 0x844A, 0x844B, 0x844C, 0x844D,
+ 0x844E, 0x844F, 0x8450, 0x8451, 0x8452, 0x8453, 0x8454, 0x0000, 0x0000,
+ 0x8455, 0x8456, 0x8457, 0x8458, 0x8459, 0x845A, 0x845B, 0x845C, 0x845D,
+ 0x845E, 0x845F, 0x8460, 0x8461, 0x8462, 0x8463, 0x8464, 0x8465, 0x8466,
+ 0x8467, 0x8468, 0x8469, 0x846A, 0x846B, 0x846C, 0x846D, 0x846E, 0x846F,
+ 0x8470, 0x8471, 0x8472, 0x8473, 0x8474, 0x8475, 0x8476, 0x8477, 0x8478,
+ 0x8479, 0x847A, 0x847B, 0x847C, 0x847D, 0x847E, 0x847F, 0x8480, 0x8481,
+ 0x8482, 0x8483, 0x8484, 0x8485, 0x8486, 0x8487, 0x8488, 0x8489, 0x0000,
+ 0x848A, 0x848B, 0x848C, 0x848D, 0x848E, 0x848F, 0x8490, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x8491, 0x8492, 0x8493, 0x0000, 0x8494, 0x8495,
+ 0x8496, 0x8497, 0x8498, 0x8499, 0x849A, 0x0000, 0x0000, 0x0000, 0x849B,
+ 0x849C, 0x849D, 0x849E, 0x0000, 0x0000, 0x849F, 0x84A0, 0x84A1, 0x84A2,
+ 0x84A3, 0x84A4, 0x0000, 0x0000, 0x0000, 0x0000, 0x84A5, 0x84A6, 0x84A7,
+ 0x84A8, 0x84A9, 0x84AA, 0x84AB, 0x84AC, 0x84AD, 0x84AE, 0x84AF, 0x84B0,
+ 0x84B1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x84B2, 0x84B3, 0x84B4,
+ 0x0000, 0x84B5, 0x84B6, 0x84B7, 0x84B8, 0x84B9, 0x84BA, 0x84BB, 0x84BC,
+ 0x84BD, 0x0000, 0x84BE, 0x84BF, 0x84C0, 0x84C1, 0x84C2, 0x84C3, 0x84C4,
+ 0x84C5, 0x84C6, 0x84C7, 0x84C8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x84C9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x84CA, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x84CB, 0x20FA, 0x3009, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x84CC, 0x0000, 0x0000, 0x0000, 0x20FC,
+ 0x300C, 0x0000, 0x20FE, 0x300F, 0x0000, 0x0000, 0x0000, 0x0000, 0x2100,
+ 0x0000, 0x2102, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x2104, 0x2106, 0x2108, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x84CD, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x84CE, 0x84CF, 0x0000,
+ 0x0000, 0x84D0, 0x84D1, 0x84D2, 0x84D3, 0x84D4, 0x84D5, 0x84D6, 0x84D7,
+ 0x84D8, 0x84D9, 0x84DA, 0x84DB, 0x84DC, 0x84DD, 0x84DE, 0x84DF, 0x84E0,
+ 0x84E1, 0x84E2, 0x84E3, 0x84E4, 0x84E5, 0x84E6, 0x84E7, 0x84E8, 0x84E9,
+ 0x84EA, 0x0000, 0x84EB, 0x84EC, 0x84ED, 0x84EE, 0x84EF, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x210A,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3012, 0x3015, 0x84F0,
+ 0x210C, 0x0000, 0x3018, 0x301B, 0x84F1, 0x0000, 0x210E, 0x84F2, 0x84F3,
+ 0x84F4, 0x84F5, 0x84F6, 0x84F7, 0x84F8, 0x84F9, 0x84FA, 0x84FB, 0x0000,
+ 0x84FC, 0x2110, 0x0000, 0x0000, 0x84FD, 0x84FE, 0x84FF, 0x8500, 0x8501,
+ 0x8502, 0x8503, 0x2112, 0x301E, 0x2114, 0x8504, 0x8505, 0x0000, 0x8506,
+ 0x8507, 0x8508, 0x0000, 0x8509, 0x850A, 0x850B, 0x850C, 0x850D, 0x850E,
+ 0x850F, 0x8510, 0x0000, 0x8511, 0x8512, 0x8513, 0x8514, 0x8515, 0x8516,
+ 0x8517, 0x0000, 0x3021, 0x8518, 0x8519, 0x851A, 0x851B, 0x851C, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x851D, 0x851E, 0x851F, 0x8520, 0x8521, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3024, 0x3027, 0x4005, 0x302A,
+ 0x302D, 0x3030, 0x3033, 0x3036, 0x3039, 0x303C, 0x303F, 0x3042, 0x3045,
+ 0x3048, 0x304B, 0x2116, 0x8522, 0x2118, 0x304E, 0x211A, 0x8523, 0x211C,
+ 0x3051, 0x400A, 0x211E, 0x8524, 0x2120, 0x3054, 0x8525, 0x8526, 0x8527,
+ 0x8528, 0x8529, 0x2122, 0x3057, 0x2124, 0x852A, 0x2126, 0x305A, 0x400F,
+ 0x2128, 0x852B, 0x212A, 0x305D, 0x852C, 0x852D, 0x852E, 0x852F, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3060,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x212C, 0x212E,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x2130, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x2132, 0x2134, 0x2136, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8530, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8531, 0x0000, 0x0000, 0x8532, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x2138, 0x0000, 0x213A, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x213C, 0x3063, 0x0000, 0x213E, 0x3066, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x2140, 0x0000, 0x0000, 0x2142, 0x0000, 0x0000,
+ 0x2144, 0x0000, 0x2146, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2148, 0x0000,
+ 0x214A, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x214C, 0x214E, 0x2150, 0x2152, 0x2154, 0x0000, 0x0000,
+ 0x2156, 0x2158, 0x0000, 0x0000, 0x215A, 0x215C, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x215E, 0x2160, 0x0000, 0x0000, 0x2162, 0x2164,
+ 0x0000, 0x0000, 0x2166, 0x2168, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x216A, 0x216C, 0x216E, 0x2170, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x2172, 0x2174, 0x2176, 0x2178, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x217A, 0x217C, 0x217E, 0x2180, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8533, 0x8534, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x3069, 0x306C, 0x306F, 0x3072, 0x3075, 0x3078, 0x307B, 0x307E, 0x2182,
+ 0x2184, 0x2186, 0x2188, 0x218A, 0x218C, 0x218E, 0x2190, 0x3081, 0x3084,
+ 0x3087, 0x308A, 0x308D, 0x3090, 0x3093, 0x3096, 0x3099, 0x2192, 0x309C,
+ 0x309F, 0x2194, 0x2196, 0x2198, 0x219A, 0x219C, 0x30A2, 0x8535, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8536, 0x8537, 0x8538,
+ 0x8539, 0x853A, 0x853B, 0x853C, 0x853D, 0x853E, 0x219E, 0x21A0, 0x21A2,
+ 0x21A4, 0x21A6, 0x21A8, 0x21AA, 0x21AC, 0x21AE, 0x21B0, 0x21B2, 0x30A5,
+ 0x30A8, 0x30AB, 0x30AE, 0x30B1, 0x30B4, 0x30B7, 0x30BA, 0x30BD, 0x4014,
+ 0x4019, 0x401E, 0x4023, 0x4028, 0x402D, 0x4032, 0x4037, 0x403C, 0x4041,
+ 0x4046, 0x21B4, 0x21B6, 0x21B8, 0x21BA, 0x21BC, 0x21BE, 0x21C0, 0x21C2,
+ 0x21C4, 0x30C0, 0x30C3, 0x30C6, 0x30C9, 0x30CC, 0x30CF, 0x30D2, 0x30D5,
+ 0x30D8, 0x30DB, 0x30DE, 0x30E1, 0x30E4, 0x30E7, 0x30EA, 0x30ED, 0x30F0,
+ 0x30F3, 0x30F6, 0x30F9, 0x30FC, 0x30FF, 0x3102, 0x3105, 0x3108, 0x310B,
+ 0x310E, 0x3111, 0x3114, 0x3117, 0x311A, 0x311D, 0x3120, 0x3123, 0x3126,
+ 0x3129, 0x312C, 0x853F, 0x8540, 0x8541, 0x8542, 0x8543, 0x8544, 0x8545,
+ 0x8546, 0x8547, 0x8548, 0x8549, 0x854A, 0x854B, 0x854C, 0x854D, 0x854E,
+ 0x854F, 0x8550, 0x8551, 0x8552, 0x8553, 0x8554, 0x8555, 0x8556, 0x8557,
+ 0x8558, 0x8559, 0x855A, 0x855B, 0x855C, 0x855D, 0x855E, 0x855F, 0x8560,
+ 0x8561, 0x8562, 0x8563, 0x8564, 0x8565, 0x8566, 0x8567, 0x8568, 0x8569,
+ 0x856A, 0x856B, 0x856C, 0x856D, 0x856E, 0x856F, 0x8570, 0x8571, 0x8572,
+ 0x8573, 0x21C6, 0x21C8, 0x21CA, 0x21CC, 0x21CE, 0x21D0, 0x21D2, 0x21D4,
+ 0x21D6, 0x21D8, 0x8574, 0x8575, 0x8576, 0x8577, 0x8578, 0x8579, 0x857A,
+ 0x857B, 0x857C, 0x21DA, 0x857D, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x857E, 0x857F, 0x8580, 0x8581, 0x8582,
+ 0x8583, 0x8584, 0x8585, 0x8586, 0x21DC, 0x8587, 0x8588, 0x8589, 0x858A,
+ 0x858B, 0x858C, 0x858D, 0x858E, 0x858F, 0x21DE, 0x8590, 0x8591, 0x8592,
+ 0x8593, 0x8594, 0x8595, 0x8596, 0x8597, 0x8598, 0x21E0, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x404B, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x312F, 0x21E2, 0x3132, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x21E4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x8599, 0x859A, 0x859B, 0x859C, 0x859D, 0x859E, 0x859F,
+ 0x85A0, 0x85A1, 0x85A2, 0x85A3, 0x85A4, 0x85A5, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x85A6, 0x85A7, 0x85A8, 0x85A9, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x85AA, 0x85AB, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x85AC, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x85AD, 0x85AE, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x85AF,
+ 0x0000, 0x0000, 0x85B0, 0x0000, 0x85B1, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x85B2, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x85B3, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x85B4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x85B5, 0x85B6, 0x0000,
+ 0x0000, 0x0000, 0x85B7, 0x85B8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x85B9, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x85BA,
+ 0x85BB, 0x85BC, 0x85BD, 0x85BE, 0x85BF, 0x85C0, 0x85C1, 0x85C2, 0x85C3,
+ 0x85C4, 0x85C5, 0x85C6, 0x85C7, 0x85C8, 0x85C9, 0x85CA, 0x85CB, 0x85CC,
+ 0x85CD, 0x85CE, 0x85CF, 0x85D0, 0x85D1, 0x85D2, 0x85D3, 0x85D4, 0x85D5,
+ 0x85D6, 0x85D7, 0x85D8, 0x85D9, 0x85DA, 0x85DB, 0x85DC, 0x85DD, 0x85DE,
+ 0x85DF, 0x85E0, 0x85E1, 0x85E2, 0x85E3, 0x85E4, 0x85E5, 0x85E6, 0x85E7,
+ 0x85E8, 0x85E9, 0x85EA, 0x85EB, 0x85EC, 0x85ED, 0x85EE, 0x85EF, 0x85F0,
+ 0x85F1, 0x85F2, 0x85F3, 0x85F4, 0x85F5, 0x85F6, 0x85F7, 0x85F8, 0x85F9,
+ 0x85FA, 0x85FB, 0x85FC, 0x85FD, 0x85FE, 0x85FF, 0x8600, 0x8601, 0x8602,
+ 0x8603, 0x8604, 0x8605, 0x8606, 0x8607, 0x8608, 0x8609, 0x860A, 0x860B,
+ 0x860C, 0x860D, 0x860E, 0x860F, 0x8610, 0x8611, 0x8612, 0x8613, 0x8614,
+ 0x8615, 0x8616, 0x8617, 0x8618, 0x8619, 0x861A, 0x861B, 0x861C, 0x861D,
+ 0x861E, 0x861F, 0x8620, 0x8621, 0x8622, 0x8623, 0x8624, 0x8625, 0x8626,
+ 0x8627, 0x8628, 0x8629, 0x862A, 0x862B, 0x862C, 0x862D, 0x862E, 0x862F,
+ 0x8630, 0x8631, 0x8632, 0x8633, 0x8634, 0x8635, 0x8636, 0x8637, 0x8638,
+ 0x8639, 0x863A, 0x863B, 0x863C, 0x863D, 0x863E, 0x863F, 0x8640, 0x8641,
+ 0x8642, 0x8643, 0x8644, 0x8645, 0x8646, 0x8647, 0x8648, 0x8649, 0x864A,
+ 0x864B, 0x864C, 0x864D, 0x864E, 0x864F, 0x8650, 0x8651, 0x8652, 0x8653,
+ 0x8654, 0x8655, 0x8656, 0x8657, 0x8658, 0x8659, 0x865A, 0x865B, 0x865C,
+ 0x865D, 0x865E, 0x865F, 0x8660, 0x8661, 0x8662, 0x8663, 0x8664, 0x8665,
+ 0x8666, 0x8667, 0x8668, 0x8669, 0x866A, 0x866B, 0x866C, 0x866D, 0x866E,
+ 0x866F, 0x8670, 0x8671, 0x8672, 0x8673, 0x8674, 0x8675, 0x8676, 0x8677,
+ 0x8678, 0x8679, 0x867A, 0x867B, 0x867C, 0x867D, 0x867E, 0x867F, 0x8680,
+ 0x8681, 0x8682, 0x8683, 0x8684, 0x8685, 0x8686, 0x8687, 0x8688, 0x8689,
+ 0x868A, 0x868B, 0x868C, 0x868D, 0x868E, 0x868F, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x8690, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x8691, 0x0000, 0x8692, 0x8693, 0x8694, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x21E6, 0x0000,
+ 0x21E8, 0x0000, 0x21EA, 0x0000, 0x21EC, 0x0000, 0x21EE, 0x0000, 0x21F0,
+ 0x0000, 0x21F2, 0x0000, 0x21F4, 0x0000, 0x21F6, 0x0000, 0x21F8, 0x0000,
+ 0x21FA, 0x0000, 0x21FC, 0x0000, 0x0000, 0x21FE, 0x0000, 0x2200, 0x0000,
+ 0x2202, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2204, 0x2206,
+ 0x0000, 0x2208, 0x220A, 0x0000, 0x220C, 0x220E, 0x0000, 0x2210, 0x2212,
+ 0x0000, 0x2214, 0x2216, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2218, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x221A, 0x221C, 0x0000, 0x221E,
+ 0x2220, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x2222, 0x0000, 0x2224, 0x0000, 0x2226,
+ 0x0000, 0x2228, 0x0000, 0x222A, 0x0000, 0x222C, 0x0000, 0x222E, 0x0000,
+ 0x2230, 0x0000, 0x2232, 0x0000, 0x2234, 0x0000, 0x2236, 0x0000, 0x2238,
+ 0x0000, 0x0000, 0x223A, 0x0000, 0x223C, 0x0000, 0x223E, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x2240, 0x2242, 0x0000, 0x2244, 0x2246,
+ 0x0000, 0x2248, 0x224A, 0x0000, 0x224C, 0x224E, 0x0000, 0x2250, 0x2252,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x2254, 0x0000, 0x0000, 0x2256, 0x2258,
+ 0x225A, 0x225C, 0x0000, 0x0000, 0x0000, 0x225E, 0x2260, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x8695, 0x8696, 0x8697, 0x8698, 0x8699, 0x869A, 0x869B,
+ 0x869C, 0x869D, 0x869E, 0x869F, 0x86A0, 0x86A1, 0x86A2, 0x86A3, 0x86A4,
+ 0x86A5, 0x86A6, 0x86A7, 0x86A8, 0x86A9, 0x86AA, 0x86AB, 0x86AC, 0x86AD,
+ 0x86AE, 0x86AF, 0x86B0, 0x86B1, 0x86B2, 0x86B3, 0x86B4, 0x86B5, 0x86B6,
+ 0x86B7, 0x86B8, 0x86B9, 0x86BA, 0x86BB, 0x86BC, 0x86BD, 0x86BE, 0x86BF,
+ 0x86C0, 0x86C1, 0x86C2, 0x86C3, 0x86C4, 0x86C5, 0x86C6, 0x86C7, 0x86C8,
+ 0x86C9, 0x86CA, 0x86CB, 0x86CC, 0x86CD, 0x86CE, 0x86CF, 0x86D0, 0x86D1,
+ 0x86D2, 0x86D3, 0x86D4, 0x86D5, 0x86D6, 0x86D7, 0x86D8, 0x86D9, 0x86DA,
+ 0x86DB, 0x86DC, 0x86DD, 0x86DE, 0x86DF, 0x86E0, 0x86E1, 0x86E2, 0x86E3,
+ 0x86E4, 0x86E5, 0x86E6, 0x86E7, 0x86E8, 0x86E9, 0x86EA, 0x86EB, 0x86EC,
+ 0x86ED, 0x86EE, 0x86EF, 0x86F0, 0x86F1, 0x86F2, 0x0000, 0x0000, 0x0000,
+ 0x86F3, 0x86F4, 0x86F5, 0x86F6, 0x86F7, 0x86F8, 0x86F9, 0x86FA, 0x86FB,
+ 0x86FC, 0x86FD, 0x86FE, 0x86FF, 0x8700, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x3135, 0x3138, 0x313B, 0x313E, 0x3141, 0x3144, 0x3147,
+ 0x314A, 0x314D, 0x3150, 0x3153, 0x3156, 0x3159, 0x315C, 0x4050, 0x4055,
+ 0x405A, 0x405F, 0x4064, 0x4069, 0x406E, 0x4073, 0x4078, 0x407D, 0x4082,
+ 0x4087, 0x408C, 0x4091, 0x4096, 0x409B, 0x40A3, 0x0000, 0x315F, 0x3162,
+ 0x3165, 0x3168, 0x316B, 0x316E, 0x3171, 0x3174, 0x3177, 0x317A, 0x317D,
+ 0x3180, 0x3183, 0x3186, 0x3189, 0x318C, 0x318F, 0x3192, 0x3195, 0x3198,
+ 0x319B, 0x319E, 0x31A1, 0x31A4, 0x31A7, 0x31AA, 0x31AD, 0x31B0, 0x31B3,
+ 0x31B6, 0x31B9, 0x31BC, 0x31BF, 0x31C2, 0x31C5, 0x31C8, 0x8701, 0x8702,
+ 0x8703, 0x8704, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x31CB, 0x2262, 0x2264, 0x2266, 0x2268, 0x226A, 0x226C, 0x226E,
+ 0x2270, 0x2272, 0x2274, 0x2276, 0x2278, 0x227A, 0x227C, 0x227E, 0x8705,
+ 0x8706, 0x8707, 0x8708, 0x8709, 0x870A, 0x870B, 0x870C, 0x870D, 0x870E,
+ 0x870F, 0x8710, 0x8711, 0x8712, 0x2280, 0x2282, 0x2284, 0x2286, 0x2288,
+ 0x228A, 0x228C, 0x228E, 0x2290, 0x2292, 0x2294, 0x2296, 0x2298, 0x229A,
+ 0x40AA, 0x40B0, 0x229C, 0x0000, 0x8713, 0x8714, 0x8715, 0x8716, 0x8717,
+ 0x8718, 0x8719, 0x871A, 0x871B, 0x871C, 0x871D, 0x871E, 0x871F, 0x8720,
+ 0x8721, 0x8722, 0x8723, 0x8724, 0x8725, 0x8726, 0x8727, 0x8728, 0x8729,
+ 0x872A, 0x872B, 0x872C, 0x872D, 0x872E, 0x872F, 0x8730, 0x8731, 0x8732,
+ 0x8733, 0x8734, 0x8735, 0x8736, 0x8737, 0x8738, 0x8739, 0x873A, 0x873B,
+ 0x873C, 0x873D, 0x873E, 0x873F, 0x8740, 0x8741, 0x8742, 0x8743, 0x229E,
+ 0x22A0, 0x22A2, 0x22A4, 0x22A6, 0x22A8, 0x22AA, 0x22AC, 0x22AE, 0x22B0,
+ 0x22B2, 0x22B4, 0x22B6, 0x22B8, 0x22BA, 0x22BC, 0x22BE, 0x22C0, 0x22C2,
+ 0x22C4, 0x22C6, 0x22C8, 0x22CA, 0x22CC, 0x31CE, 0x31D1, 0x31D4, 0x22CE,
+ 0x31D7, 0x22D0, 0x31DA, 0x8744, 0x8745, 0x8746, 0x8747, 0x8748, 0x8749,
+ 0x874A, 0x874B, 0x874C, 0x874D, 0x874E, 0x874F, 0x8750, 0x8751, 0x8752,
+ 0x8753, 0x8754, 0x8755, 0x8756, 0x8757, 0x8758, 0x8759, 0x875A, 0x875B,
+ 0x875C, 0x875D, 0x875E, 0x875F, 0x8760, 0x8761, 0x8762, 0x8763, 0x8764,
+ 0x8765, 0x8766, 0x8767, 0x8768, 0x8769, 0x876A, 0x876B, 0x876C, 0x876D,
+ 0x876E, 0x876F, 0x8770, 0x8771, 0x8772, 0x0000, 0x40B5, 0x40BA, 0x40BF,
+ 0x31DD, 0x40C4, 0x31E0, 0x31E3, 0x40C9, 0x40CF, 0x31E6, 0x31E9, 0x31EC,
+ 0x40D4, 0x40D9, 0x31EF, 0x31F2, 0x22D2, 0x31F5, 0x40DE, 0x40E3, 0x22D4,
+ 0x40E8, 0x40EE, 0x40F5, 0x31F8, 0x40FB, 0x4101, 0x4107, 0x31FB, 0x31FE,
+ 0x3201, 0x410C, 0x4111, 0x4117, 0x3204, 0x3207, 0x320A, 0x22D6, 0x22D8,
+ 0x22DA, 0x22DC, 0x320D, 0x3210, 0x411C, 0x3213, 0x4122, 0x4127, 0x3216,
+ 0x22DE, 0x22E0, 0x412D, 0x4133, 0x4138, 0x3219, 0x413E, 0x22E2, 0x321C,
+ 0x321F, 0x3222, 0x3225, 0x3228, 0x4144, 0x322B, 0x22E4, 0x322E, 0x3231,
+ 0x3234, 0x4149, 0x3237, 0x323A, 0x323D, 0x414E, 0x4154, 0x22E6, 0x4159,
+ 0x22E8, 0x415F, 0x4164, 0x3240, 0x3243, 0x3246, 0x4169, 0x22EA, 0x3249,
+ 0x416E, 0x22EC, 0x4173, 0x324C, 0x22EE, 0x22F0, 0x22F2, 0x22F4, 0x22F6,
+ 0x22F8, 0x22FA, 0x22FC, 0x22FE, 0x2300, 0x324F, 0x3252, 0x3255, 0x3258,
+ 0x325B, 0x325E, 0x3261, 0x3264, 0x3267, 0x326A, 0x326D, 0x3270, 0x3273,
+ 0x3276, 0x3279, 0x327C, 0x2302, 0x2304, 0x327F, 0x2306, 0x2308, 0x230A,
+ 0x3282, 0x3285, 0x230C, 0x230E, 0x2310, 0x2312, 0x2314, 0x4179, 0x2316,
+ 0x2318, 0x231A, 0x231C, 0x231E, 0x2320, 0x2322, 0x2324, 0x3288, 0x417E,
+ 0x2326, 0x2328, 0x232A, 0x232C, 0x232E, 0x2330, 0x2332, 0x328B, 0x328E,
+ 0x3291, 0x3294, 0x2334, 0x2336, 0x2338, 0x233A, 0x233C, 0x233E, 0x2340,
+ 0x2342, 0x2344, 0x2346, 0x3297, 0x329A, 0x2348, 0x329D, 0x32A0, 0x32A3,
+ 0x234A, 0x32A6, 0x32A9, 0x4183, 0x234C, 0x32AC, 0x32AF, 0x32B2, 0x32B5,
+ 0x4188, 0x418E, 0x234E, 0x2350, 0x2352, 0x2354, 0x2356, 0x2358, 0x235A,
+ 0x235C, 0x235E, 0x2360, 0x2362, 0x2364, 0x2366, 0x2368, 0x236A, 0x236C,
+ 0x236E, 0x2370, 0x4195, 0x2372, 0x2374, 0x2376, 0x419A, 0x32B8, 0x2378,
+ 0x237A, 0x237C, 0x237E, 0x2380, 0x2382, 0x2384, 0x2386, 0x2388, 0x238A,
+ 0x32BB, 0x238C, 0x238E, 0x32BE, 0x32C1, 0x2390, 0x419F, 0x32C4, 0x2392,
+ 0x2394, 0x2396, 0x2398, 0x32C7, 0x32CA, 0x239A, 0x239C, 0x239E, 0x23A0,
+ 0x23A2, 0x23A4, 0x23A6, 0x23A8, 0x23AA, 0x32CD, 0x32D0, 0x32D3, 0x32D6,
+ 0x32D9, 0x32DC, 0x32DF, 0x32E2, 0x32E5, 0x32E8, 0x32EB, 0x32EE, 0x32F1,
+ 0x32F4, 0x32F7, 0x32FA, 0x32FD, 0x3300, 0x3303, 0x3306, 0x3309, 0x330C,
+ 0x330F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8773, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8774,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8775, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8776, 0x0000, 0x0000,
+ 0x0000, 0x8777, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8778, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x8779, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x877A, 0x877B, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x877C, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x877D, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x877E, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x877F, 0x8780, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8781, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8782, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x8783, 0x0000, 0x0000, 0x8784, 0x0000, 0x8785, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x8786, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x8787, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8788, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x8789, 0x878A, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x878B, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x878C, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x878D, 0x0000, 0x878E, 0x878F, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8790, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8791, 0x0000,
+ 0x8792, 0x0000, 0x0000, 0x0000, 0x8793, 0x8794, 0x8795, 0x0000, 0x8796,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8797, 0x0000, 0x0000,
+ 0x0000, 0x8798, 0x0000, 0x0000, 0x8799, 0x0000, 0x0000, 0x0000, 0x879A,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x879B, 0x0000,
+ 0x0000, 0x0000, 0x879C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x879D, 0x0000, 0x0000, 0x879E, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x879F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x87A0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x87A1, 0x0000, 0x87A2, 0x0000, 0x87A3, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x87A4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x87A5, 0x0000,
+ 0x0000, 0x0000, 0x87A6, 0x87A7, 0x0000, 0x0000, 0x87A8, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x87A9, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x87AA, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x87AB, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x87AC, 0x0000, 0x0000, 0x87AD, 0x87AE, 0x87AF, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x87B0,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x87B1, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x87B2, 0x0000, 0x0000, 0x0000, 0x0000, 0x87B3, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x87B4, 0x0000, 0x87B5, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x87B6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x87B7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x87B8, 0x87B9,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x87BA, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x87BB, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x87BC, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x87BD, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x87BE, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x87BF, 0x0000, 0x0000, 0x87C0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x87C1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x87C2, 0x0000, 0x87C3, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x87C4, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x87C5, 0x87C6, 0x0000, 0x87C7, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x87C8, 0x0000, 0x0000, 0x0000, 0x87C9, 0x0000, 0x87CA, 0x87CB, 0x0000,
+ 0x87CC, 0x87CD, 0x0000, 0x0000, 0x0000, 0x87CE, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x87CF,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x87D0, 0x0000, 0x87D1, 0x0000, 0x87D2, 0x0000, 0x0000, 0x0000,
+ 0x87D3, 0x87D4, 0x0000, 0x0000, 0x0000, 0x87D5, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x87D6, 0x0000, 0x87D7, 0x0000, 0x87D8, 0x0000, 0x0000,
+ 0x87D9, 0x0000, 0x0000, 0x87DA, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x87DB,
+ 0x0000, 0x87DC, 0x0000, 0x87DD, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x87DE, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x87DF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x87E0, 0x0000, 0x87E1, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x87E2,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x87E3, 0x0000, 0x0000, 0x0000, 0x0000, 0x87E4, 0x0000, 0x87E5,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x87E6, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x87E7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x87E8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x87E9, 0x0000, 0x0000, 0x87EA, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x87EB, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x87EC, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x87ED, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x87EE, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x87EF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x87F0, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x87F1, 0x87F2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x87F3,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x87F4, 0x0000, 0x87F5,
+ 0x0000, 0x87F6, 0x0000, 0x0000, 0x0000, 0x87F7, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x87F8, 0x87F9,
+ 0x0000, 0x0000, 0x87FA, 0x0000, 0x0000, 0x0000, 0x87FB, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x87FC, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x87FD, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x87FE, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x87FF,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8800, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x8801, 0x0000, 0x8802, 0x8803, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x8804, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8805, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x8806, 0x8807, 0x8808, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8809, 0x0000, 0x0000, 0x880A, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x880B, 0x0000, 0x0000, 0x0000, 0x880C, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x880D, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x880E, 0x0000, 0x0000, 0x880F,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x8810, 0x8811, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8812, 0x0000, 0x0000, 0x8813,
+ 0x0000, 0x8814, 0x0000, 0x0000, 0x0000, 0x8815, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x8816, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x8817, 0x0000, 0x0000, 0x0000, 0x0000, 0x8818, 0x0000,
+ 0x0000, 0x0000, 0x8819, 0x0000, 0x0000, 0x0000, 0x0000, 0x881A, 0x0000,
+ 0x0000, 0x0000, 0x881B, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x881C, 0x0000, 0x881D,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x881E, 0x881F, 0x8820, 0x0000, 0x8821, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8822, 0x8823, 0x8824, 0x0000,
+ 0x0000, 0x8825, 0x0000, 0x0000, 0x8826, 0x8827, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x8828, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x8829, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x882A, 0x0000, 0x0000, 0x0000, 0x882B,
+ 0x0000, 0x882C, 0x0000, 0x0000, 0x0000, 0x0000, 0x882D, 0x882E, 0x0000,
+ 0x0000, 0x882F, 0x0000, 0x8830, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8831, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8832, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8833, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x8834, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x8835, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x8836, 0x0000, 0x8837, 0x0000, 0x0000, 0x8838,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x8839, 0x883A, 0x0000, 0x0000, 0x0000, 0x883B,
+ 0x0000, 0x0000, 0x883C, 0x0000, 0x0000, 0x0000, 0x0000, 0x883D, 0x0000,
+ 0x0000, 0x883E, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x883F, 0x0000, 0x8840, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8841, 0x0000, 0x0000, 0x0000, 0x8842, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x8843, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x8844, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x8845, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8846, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x8847, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x8848, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8849, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x884A, 0x884B, 0x884C, 0x0000, 0x0000, 0x0000, 0x884D, 0x884E,
+ 0x0000, 0x0000, 0x884F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8850, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8851, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8852,
+ 0x0000, 0x8853, 0x8854, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8855, 0x0000, 0x8856, 0x0000, 0x0000, 0x8857, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x8858, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x8859, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x885A, 0x0000, 0x885B, 0x885C, 0x0000, 0x0000, 0x0000, 0x885D, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x885E, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x885F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x8860, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8861, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8862, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x8863, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x8864, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8865, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8866, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x8867, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8868,
+ 0x8869, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x886A,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x886B, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x886C,
+ 0x0000, 0x0000, 0x0000, 0x886D, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x886E, 0x0000, 0x0000, 0x886F, 0x8870, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x8871, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8872, 0x0000, 0x0000, 0x8873, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8874, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8875, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8876, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8877,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x8878, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8879, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x887A, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x887B, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x887C, 0x0000, 0x0000, 0x0000,
+ 0x887D, 0x887E, 0x0000, 0x887F, 0x0000, 0x8880, 0x8881, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8882, 0x8883, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8884, 0x8885, 0x0000,
+ 0x0000, 0x8886, 0x0000, 0x8887, 0x8888, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8889, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x888A, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x888B, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x888C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x888D, 0x0000,
+ 0x888E, 0x0000, 0x0000, 0x888F, 0x8890, 0x0000, 0x0000, 0x0000, 0x8891,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8892, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8893, 0x0000, 0x8894, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8895, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8896, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8897,
+ 0x0000, 0x8898, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8899, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x889A, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x889B, 0x0000, 0x0000,
+ 0x889C, 0x0000, 0x0000, 0x889D, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x889E, 0x0000,
+ 0x0000, 0x889F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x88A0, 0x0000, 0x88A1, 0x0000, 0x0000, 0x0000, 0x0000, 0x88A2,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x88A3, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x88A4, 0x0000, 0x0000, 0x0000, 0x88A5, 0x0000,
+ 0x88A6, 0x0000, 0x88A7, 0x88A8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x88A9,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x88AA, 0x0000, 0x88AB,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x88AC, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x88AD,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x88AE, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x88AF, 0x0000, 0x0000, 0x88B0, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x88B1,
+ 0x0000, 0x0000, 0x88B2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x88B3, 0x88B4, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x88B5, 0x0000, 0x0000, 0x0000, 0x88B6, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x88B7, 0x88B8, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x88B9, 0x0000, 0x0000, 0x0000, 0x0000, 0x88BA, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x88BB, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x88BC, 0x88BD, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x88BE, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x88BF, 0x0000, 0x0000, 0x88C0, 0x0000, 0x88C1, 0x88C2, 0x88C3, 0x88C4,
+ 0x88C5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x88C6, 0x0000, 0x0000,
+ 0x88C7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x88C8, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x88C9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x88CA,
+ 0x0000, 0x88CB, 0x0000, 0x88CC, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x88CD, 0x0000, 0x0000, 0x0000, 0x88CE, 0x0000, 0x88CF,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x88D0, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x88D1, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x88D2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x88D3, 0x0000,
+ 0x88D4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x88D5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x88D6, 0x0000, 0x0000, 0x0000, 0x88D7, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x88D8, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x88D9,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x88DA, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x88DB, 0x88DC,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x88DD, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x88DE, 0x88DF, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x88E0, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x88E1, 0x88E2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x88E3, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x88E4,
+ 0x0000, 0x0000, 0x88E5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x88E6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x88E7, 0x0000, 0x88E8, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x88E9,
+ 0x0000, 0x88EA, 0x0000, 0x0000, 0x0000, 0x0000, 0x88EB, 0x0000, 0x0000,
+ 0x0000, 0x88EC, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x88ED,
+ 0x88EE, 0x0000, 0x0000, 0x88EF, 0x0000, 0x0000, 0x0000, 0x0000, 0x88F0,
+ 0x0000, 0x0000, 0x88F1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x88F2, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x88F3, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x88F4, 0x88F5, 0x88F6, 0x0000, 0x0000, 0x0000, 0x88F7, 0x0000,
+ 0x0000, 0x0000, 0x88F8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x88F9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x88FA, 0x0000, 0x0000, 0x88FB, 0x0000, 0x0000, 0x0000, 0x88FC,
+ 0x0000, 0x0000, 0x0000, 0x88FD, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x88FE, 0x0000, 0x88FF, 0x0000, 0x0000, 0x8900, 0x8901,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8902,
+ 0x0000, 0x0000, 0x0000, 0x8903, 0x0000, 0x0000, 0x0000, 0x0000, 0x8904,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8905, 0x0000, 0x0000, 0x0000, 0x8906, 0x8907, 0x8908, 0x0000, 0x8909,
+ 0x0000, 0x890A, 0x0000, 0x890B, 0x0000, 0x890C, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x890D, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x890E, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x890F,
+ 0x0000, 0x8910, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8911,
+ 0x0000, 0x8912, 0x0000, 0x0000, 0x0000, 0x8913, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8914, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8915,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8916, 0x0000, 0x0000, 0x8917,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8918, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8919, 0x891A, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x891B, 0x0000, 0x891C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x891D,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x891E, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x891F, 0x8920, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x8921, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8922,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8923,
+ 0x8924, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x8925, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x8926, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8927, 0x0000, 0x0000,
+ 0x8928, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8929, 0x0000,
+ 0x0000, 0x0000, 0x892A, 0x0000, 0x0000, 0x892B, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x892C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x892D, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x892E, 0x0000, 0x0000, 0x892F, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8930, 0x0000, 0x0000, 0x0000, 0x8931, 0x0000, 0x8932, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x8933, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x8934, 0x8935, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x8936, 0x0000, 0x0000, 0x8937, 0x8938, 0x0000, 0x8939,
+ 0x0000, 0x0000, 0x893A, 0x0000, 0x0000, 0x893B, 0x0000, 0x0000, 0x893C,
+ 0x893D, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x893E, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x893F, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x8940, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8941, 0x0000, 0x0000,
+ 0x8942, 0x8943, 0x8944, 0x8945, 0x0000, 0x8946, 0x0000, 0x0000, 0x8947,
+ 0x0000, 0x0000, 0x8948, 0x8949, 0x894A, 0x0000, 0x894B, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x894C, 0x0000, 0x894D, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x894E, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x894F, 0x0000, 0x8950, 0x0000, 0x0000, 0x8951, 0x0000, 0x8952,
+ 0x8953, 0x8954, 0x0000, 0x0000, 0x0000, 0x0000, 0x8955, 0x8956, 0x8957,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8958, 0x0000, 0x8959, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x895A, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x895B, 0x895C, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x895D,
+ 0x0000, 0x0000, 0x895E, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x895F, 0x8960, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x8961, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8962, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x8963, 0x0000, 0x0000, 0x0000, 0x0000, 0x8964, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8965, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8966, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x8967, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8968, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x8969, 0x896A, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x896B, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x896C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x896D, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x896E, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x896F, 0x0000, 0x8970, 0x8971, 0x0000, 0x8972, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8973, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x8974, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8975, 0x0000, 0x0000, 0x0000, 0x8976, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8977,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8978, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8979, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x897A, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x897B, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x897C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x897D, 0x0000, 0x0000,
+ 0x0000, 0x897E, 0x0000, 0x0000, 0x0000, 0x0000, 0x897F, 0x0000, 0x8980,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8981, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8982, 0x8983, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8984, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8985,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8986, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x8987, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8988,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8989,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x898A, 0x0000, 0x0000, 0x0000, 0x0000, 0x898B, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x898C, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x898D, 0x0000, 0x0000, 0x0000,
+ 0x898E, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x898F,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x8990, 0x0000, 0x8991, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8992, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8993, 0x0000, 0x0000, 0x8994, 0x8995, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8996, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x8997, 0x8998, 0x0000, 0x0000, 0x8999, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x899A, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x899B,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x899C, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x899D, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x899E, 0x899F, 0x89A0, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x89A1, 0x0000, 0x0000, 0x89A2, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x89A3, 0x0000, 0x0000,
+ 0x89A4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x89A5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x89A6, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x89A7, 0x0000, 0x89A8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x89A9, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x89AA, 0x0000, 0x0000, 0x89AB, 0x0000,
+ 0x0000, 0x89AC, 0x89AD, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x89AE, 0x89AF, 0x0000, 0x0000, 0x0000,
+ 0x89B0, 0x0000, 0x0000, 0x0000, 0x0000, 0x89B1, 0x0000, 0x0000, 0x89B2,
+ 0x0000, 0x0000, 0x89B3, 0x0000, 0x0000, 0x0000, 0x0000, 0x89B4, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x89B5, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x89B6, 0x89B7, 0x0000, 0x89B8, 0x89B9, 0x89BA,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x89BB, 0x0000, 0x89BC, 0x89BD,
+ 0x0000, 0x89BE, 0x89BF, 0x89C0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x89C1, 0x0000, 0x0000, 0x0000, 0x0000, 0x89C2, 0x0000, 0x89C3,
+ 0x89C4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x89C5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x89C6, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x89C7, 0x0000, 0x0000, 0x89C8, 0x0000, 0x0000, 0x0000,
+ 0x89C9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x89CA, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x89CB, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x89CC, 0x0000, 0x89CD, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x89CE, 0x0000, 0x0000, 0x0000, 0x0000, 0x89CF, 0x89D0,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x89D1, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x89D2, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x89D3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x89D4, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x89D5, 0x0000, 0x0000, 0x89D6,
+ 0x89D7, 0x0000, 0x0000, 0x89D8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x89D9, 0x0000, 0x89DA, 0x0000, 0x0000, 0x0000, 0x89DB,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x89DC, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x89DD,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x89DE,
+ 0x0000, 0x0000, 0x0000, 0x89DF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x89E0,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x89E1, 0x89E2,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x89E3, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x89E4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x89E5, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x89E6, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x89E7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x89E8, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x89E9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x89EA, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x89EB,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x89EC, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x89ED, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x89EE, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x89EF, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x89F0,
+ 0x0000, 0x0000, 0x89F1, 0x0000, 0x89F2, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x89F3, 0x89F4, 0x0000,
+ 0x0000, 0x0000, 0x89F5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x89F6, 0x0000, 0x89F7,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x89F8, 0x0000, 0x0000,
+ 0x0000, 0x89F9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x89FA, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x89FB, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x89FC, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x89FD, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x89FE, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x89FF, 0x8A00, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8A01, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A02, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x8A03, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A04,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A05, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A06, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A07, 0x8A08, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A09, 0x0000, 0x8A0A, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8A0B, 0x0000, 0x0000, 0x8A0C, 0x0000, 0x0000, 0x8A0D, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x8A0E, 0x0000, 0x0000, 0x8A0F, 0x0000,
+ 0x0000, 0x8A10, 0x8A11, 0x0000, 0x8A12, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x8A13, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x8A14, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8A15, 0x8A16, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x8A17, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A18,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A19, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x8A1A, 0x0000, 0x8A1B, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x8A1C, 0x0000, 0x0000, 0x8A1D, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x8A1E, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x8A1F, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A20, 0x8A21, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x8A22, 0x8A23, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x8A24, 0x8A25, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x8A26, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8A27, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8A28, 0x0000, 0x0000, 0x0000, 0x8A29, 0x0000, 0x8A2A, 0x0000,
+ 0x0000, 0x8A2B, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A2C, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A2D, 0x0000,
+ 0x8A2E, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8A2F, 0x0000, 0x0000, 0x8A30, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8A31, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A32, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x8A33, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8A34, 0x8A35, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8A36, 0x0000, 0x8A37, 0x0000, 0x8A38, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x8A39, 0x8A3A, 0x0000, 0x0000, 0x8A3B, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x8A3C, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8A3D, 0x0000, 0x0000, 0x8A3E, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8A3F, 0x0000, 0x8A40, 0x8A41, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8A42, 0x8A43, 0x8A44, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x8A45, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A46, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x8A47, 0x8A48, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A49, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A4A, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8A4B, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A4C, 0x8A4D,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x8A4E, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A4F, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x8A50, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A51, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A52,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A53,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x8A54, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x8A55, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8A56, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8A57, 0x0000, 0x0000, 0x8A58, 0x0000, 0x0000, 0x0000, 0x8A59,
+ 0x0000, 0x0000, 0x8A5A, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x8A5B, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8A5C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A5D,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x8A5E, 0x0000, 0x0000, 0x8A5F, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x8A60, 0x8A61, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A62, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x8A63, 0x0000, 0x0000, 0x8A64, 0x0000, 0x0000,
+ 0x8A65, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A66, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A67, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x8A68, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x8A69, 0x0000, 0x8A6A, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8A6B, 0x0000, 0x0000, 0x8A6C, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A6D, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A6E, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x8A6F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8A70, 0x0000, 0x0000, 0x0000, 0x8A71, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x8A72, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x8A73, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A74, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x8A75, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A76,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A77, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x8A78, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8A79, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x8A7A, 0x0000, 0x0000, 0x0000, 0x8A7B, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A7C,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8A7D, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A7E, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x8A7F, 0x0000, 0x0000, 0x8A80, 0x8A81, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A82, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A83, 0x0000, 0x8A84,
+ 0x8A85, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A86, 0x0000, 0x8A87, 0x0000,
+ 0x0000, 0x8A88, 0x0000, 0x8A89, 0x8A8A, 0x0000, 0x8A8B, 0x8A8C, 0x8A8D,
+ 0x0000, 0x0000, 0x0000, 0x8A8E, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x8A8F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8A90, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A91, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A92,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A93, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A94, 0x8A95, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x8A96, 0x8A97, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A98,
+ 0x0000, 0x0000, 0x8A99, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A9A, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x8A9B, 0x0000, 0x8A9C, 0x0000, 0x0000,
+ 0x8A9D, 0x0000, 0x0000, 0x0000, 0x0000, 0x8A9E, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8A9F, 0x0000, 0x0000, 0x0000, 0x0000, 0x8AA0, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8AA1, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8AA2, 0x0000, 0x0000, 0x0000, 0x0000, 0x8AA3, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8AA4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8AA5, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x8AA6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x8AA7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8AA8, 0x8AA9,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x8AAA, 0x0000, 0x0000, 0x0000, 0x0000, 0x8AAB,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8AAC,
+ 0x8AAD, 0x0000, 0x0000, 0x0000, 0x8AAE, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8AAF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8AB0, 0x0000, 0x0000, 0x8AB1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8AB2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8AB3,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8AB4, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8AB5, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8AB6, 0x0000, 0x8AB7,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8AB8, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8AB9, 0x0000,
+ 0x0000, 0x8ABA, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8ABB, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8ABC, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8ABD,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8ABE, 0x0000,
+ 0x0000, 0x0000, 0x8ABF, 0x8AC0, 0x0000, 0x8AC1, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x8AC2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8AC3, 0x0000, 0x0000, 0x8AC4, 0x0000, 0x8AC5, 0x0000, 0x0000, 0x8AC6,
+ 0x0000, 0x8AC7, 0x0000, 0x0000, 0x8AC8, 0x8AC9, 0x8ACA, 0x0000, 0x8ACB,
+ 0x8ACC, 0x8ACD, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x8ACE, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8ACF, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8AD0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8AD1,
+ 0x0000, 0x8AD2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8AD3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8AD4,
+ 0x0000, 0x8AD5, 0x0000, 0x0000, 0x8AD6, 0x0000, 0x8AD7, 0x8AD8, 0x0000,
+ 0x0000, 0x8AD9, 0x0000, 0x0000, 0x8ADA, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8ADB, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8ADC, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8ADD, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8ADE, 0x0000, 0x8ADF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8AE0,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x8AE1, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8AE2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8AE3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8AE4, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x8AE5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8AE6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x8AE7, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8AE8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8AE9,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8AEA, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x8AEB, 0x0000, 0x0000, 0x0000, 0x8AEC,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8AED, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8AEE, 0x0000, 0x0000, 0x0000, 0x8AEF, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8AF0, 0x0000, 0x8AF1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8AF2, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8AF3, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8AF4, 0x0000, 0x0000, 0x0000,
+ 0x8AF5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8AF6,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x8AF7, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x8AF8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x8AF9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8AFA, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8AFB, 0x0000, 0x0000, 0x0000, 0x8AFC, 0x8AFD, 0x8AFE, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x8AFF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8B00,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x8B01, 0x8B02, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x8B03, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x8B04, 0x0000, 0x0000, 0x0000, 0x8B05, 0x0000, 0x0000,
+ 0x0000, 0x8B06, 0x0000, 0x0000, 0x8B07, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8B08, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8B09, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8B0A, 0x0000,
+ 0x0000, 0x8B0B, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x8B0C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x8B0D, 0x0000, 0x0000, 0x8B0E, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8B0F, 0x8B10, 0x8B11,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8B12,
+ 0x8B13, 0x8B14, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8B15,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8B16, 0x8B17, 0x0000, 0x0000, 0x0000, 0x8B18, 0x8B19, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x8B1A, 0x8B1B, 0x0000, 0x0000, 0x0000, 0x8B1C,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8B1D, 0x8B1E, 0x0000, 0x8B1F, 0x0000, 0x0000, 0x8B20, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8B21, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x8B22, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x8B23, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8B24, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8B25, 0x0000, 0x0000, 0x0000, 0x8B26, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8B27, 0x0000, 0x0000, 0x0000, 0x8B28, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8B29, 0x0000, 0x8B2A, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x8B2B, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8B2C, 0x0000, 0x0000, 0x0000, 0x0000, 0x8B2D, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8B2E, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8B2F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8B30, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x8B31, 0x0000, 0x0000, 0x8B32, 0x0000,
+ 0x8B33, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8B34,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x8B35, 0x0000, 0x8B36, 0x0000, 0x0000, 0x0000, 0x8B37,
+ 0x8B38, 0x0000, 0x0000, 0x0000, 0x0000, 0x8B39, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8B3A, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8B3B, 0x0000, 0x8B3C, 0x8B3D, 0x0000, 0x0000, 0x8B3E, 0x8B3F, 0x0000,
+ 0x0000, 0x0000, 0x8B40, 0x0000, 0x0000, 0x0000, 0x0000, 0x8B41, 0x0000,
+ 0x0000, 0x8B42, 0x0000, 0x8B43, 0x0000, 0x0000, 0x0000, 0x8B44, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8B45, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x8B46, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8B47, 0x8B48, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8B49, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8B4A,
+ 0x8B4B, 0x0000, 0x8B4C, 0x0000, 0x8B4D, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x8B4E, 0x0000, 0x8B4F, 0x0000, 0x8B50, 0x0000,
+ 0x8B51, 0x8B52, 0x8B53, 0x8B54, 0x8B55, 0x8B56, 0x0000, 0x8B57, 0x0000,
+ 0x8B58, 0x0000, 0x0000, 0x8B59, 0x0000, 0x0000, 0x8B5A, 0x8B5B, 0x8B5C,
+ 0x0000, 0x8B5D, 0x0000, 0x8B5E, 0x8B5F, 0x8B60, 0x8B61, 0x8B62, 0x0000,
+ 0x0000, 0x0000, 0x8B63, 0x0000, 0x0000, 0x0000, 0x8B64, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8B65, 0x0000, 0x8B66,
+ 0x8B67, 0x8B68, 0x8B69, 0x0000, 0x8B6A, 0x0000, 0x0000, 0x0000, 0x8B6B,
+ 0x8B6C, 0x0000, 0x8B6D, 0x0000, 0x0000, 0x8B6E, 0x8B6F, 0x0000, 0x8B70,
+ 0x8B71, 0x8B72, 0x0000, 0x8B73, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x8B74, 0x0000, 0x8B75, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8B76, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8B77, 0x0000, 0x8B78,
+ 0x8B79, 0x0000, 0x0000, 0x8B7A, 0x8B7B, 0x0000, 0x0000, 0x0000, 0x8B7C,
+ 0x0000, 0x8B7D, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8B7E, 0x8B7F, 0x8B80, 0x8B81, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8B82, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8B83,
+ 0x0000, 0x8B84, 0x0000, 0x0000, 0x8B85, 0x0000, 0x8B86, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x8B87, 0x0000, 0x0000, 0x0000, 0x8B88,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8B89,
+ 0x0000, 0x8B8A, 0x0000, 0x8B8B, 0x0000, 0x8B8C, 0x8B8D, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8B8E, 0x8B8F, 0x0000,
+ 0x0000, 0x8B90, 0x8B91, 0x8B92, 0x0000, 0x8B93, 0x0000, 0x0000, 0x0000,
+ 0x8B94, 0x8B95, 0x8B96, 0x8B97, 0x0000, 0x8B98, 0x8B99, 0x8B9A, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x8B9B, 0x0000, 0x0000, 0x8B9C, 0x0000, 0x0000,
+ 0x8B9D, 0x8B9E, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8B9F,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x8BA0, 0x8BA1, 0x8BA2, 0x8BA3, 0x0000,
+ 0x0000, 0x8BA4, 0x8BA5, 0x0000, 0x8BA6, 0x8BA7, 0x0000, 0x8BA8, 0x0000,
+ 0x0000, 0x8BA9, 0x0000, 0x8BAA, 0x8BAB, 0x0000, 0x0000, 0x8BAC, 0x0000,
+ 0x0000, 0x8BAD, 0x0000, 0x8BAE, 0x8BAF, 0x0000, 0x8BB0, 0x0000, 0x8BB1,
+ 0x0000, 0x0000, 0x8BB2, 0x0000, 0x8BB3, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8BB4,
+ 0x8BB5, 0x8BB6, 0x8BB7, 0x0000, 0x0000, 0x0000, 0x0000, 0x8BB8, 0x8BB9,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8BBA, 0x0000, 0x0000, 0x0000,
+ 0x8BBB, 0x0000, 0x8BBC, 0x8BBD, 0x8BBE, 0x0000, 0x0000, 0x0000, 0x8BBF,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8BC0, 0x0000,
+ 0x0000, 0x8BC1, 0x0000, 0x0000, 0x8BC2, 0x8BC3, 0x0000, 0x0000, 0x8BC4,
+ 0x8BC5, 0x8BC6, 0x0000, 0x8BC7, 0x0000, 0x0000, 0x0000, 0x8BC8, 0x8BC9,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x8BCA, 0x0000, 0x8BCB, 0x8BCC, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8BCD, 0x0000, 0x8BCE, 0x8BCF, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8BD0, 0x0000, 0x0000, 0x0000, 0x8BD1, 0x0000, 0x0000, 0x8BD2, 0x8BD3,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8BD4, 0x8BD5, 0x8BD6,
+ 0x0000, 0x8BD7, 0x0000, 0x8BD8, 0x8BD9, 0x0000, 0x0000, 0x8BDA, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x8BDB, 0x0000, 0x0000, 0x8BDC, 0x8BDD,
+ 0x8BDE, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8BDF, 0x0000, 0x8BE0, 0x0000, 0x8BE1, 0x0000, 0x0000, 0x8BE2,
+ 0x0000, 0x0000, 0x0000, 0x8BE3, 0x0000, 0x0000, 0x8BE4, 0x0000, 0x8BE5,
+ 0x0000, 0x0000, 0x0000, 0x8BE6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x8BE7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8BE8,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8BE9,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x8BEA, 0x0000, 0x8BEB, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x8BEC, 0x8BED, 0x0000, 0x8BEE, 0x0000, 0x0000, 0x8BEF,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8BF0, 0x0000,
+ 0x0000, 0x8BF1, 0x8BF2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8BF3, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8BF4, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x8BF5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8BF6, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8BF7, 0x0000, 0x0000, 0x0000, 0x8BF8, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8BF9, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x8BFA, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x8BFB, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x8BFC, 0x8BFD, 0x0000, 0x8BFE, 0x8BFF, 0x0000, 0x8C00,
+ 0x8C01, 0x8C02, 0x0000, 0x8C03, 0x0000, 0x0000, 0x0000, 0x8C04, 0x8C05,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C06, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C07,
+ 0x0000, 0x0000, 0x8C08, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x8C09, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8C0A, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C0B, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8C0C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C0D,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8C0E, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C0F, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x8C10, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8C11, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C12, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C13,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C14,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x8C15, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8C16, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8C17, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x8C18, 0x8C19, 0x8C1A, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C1B, 0x0000, 0x0000,
+ 0x0000, 0x8C1C, 0x0000, 0x8C1D, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x8C1E, 0x0000, 0x8C1F, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8C20, 0x8C21, 0x0000, 0x8C22, 0x0000, 0x0000, 0x8C23, 0x0000,
+ 0x0000, 0x8C24, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8C25, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C26, 0x8C27, 0x8C28, 0x8C29,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C2A, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C2B,
+ 0x0000, 0x8C2C, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C2D, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x8C2E, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8C2F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C30, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C31, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x8C32, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C33, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x8C34, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8C35, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C36, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C37,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x8C38, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C39, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C3A, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C3B, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x8C3C, 0x0000, 0x0000, 0x8C3D, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C3E, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C3F, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C40, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C41, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x8C42, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8C43, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C44,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C45, 0x0000, 0x0000,
+ 0x0000, 0x8C46, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x8C47, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C48, 0x0000, 0x0000, 0x0000,
+ 0x8C49, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x8C4A, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8C4B, 0x8C4C, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C4D, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C4E, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x8C4F, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8C50, 0x0000, 0x8C51, 0x8C52, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8C53, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x8C54, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C55,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C56, 0x0000,
+ 0x0000, 0x0000, 0x8C57, 0x0000, 0x0000, 0x8C58, 0x0000, 0x0000, 0x8C59,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8C5A, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C5B,
+ 0x0000, 0x0000, 0x8C5C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x8C5D, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x8C5E, 0x0000, 0x8C5F, 0x0000, 0x8C60, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x8C61, 0x0000, 0x0000, 0x8C62, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C63, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C64, 0x0000, 0x0000, 0x8C65,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C66, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x8C67, 0x0000, 0x0000, 0x0000, 0x8C68,
+ 0x8C69, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C6A, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C6B, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8C6C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x8C6D, 0x0000, 0x0000, 0x8C6E, 0x8C6F,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C70, 0x0000, 0x0000, 0x0000,
+ 0x8C71, 0x0000, 0x8C72, 0x8C73, 0x0000, 0x0000, 0x8C74, 0x8C75, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8C76, 0x0000, 0x0000, 0x8C77, 0x0000, 0x0000, 0x0000, 0x8C78,
+ 0x0000, 0x0000, 0x0000, 0x8C79, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C7A, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8C7B, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C7C, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8C7D, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C7E, 0x8C7F, 0x0000,
+ 0x0000, 0x8C80, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8C81, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C82,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x8C83, 0x8C84, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C85, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x8C86, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C87, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x8C88, 0x0000, 0x8C89, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x8C8A, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C8B, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C8C, 0x0000, 0x0000, 0x0000,
+ 0x8C8D, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C8E, 0x0000,
+ 0x0000, 0x0000, 0x8C8F, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C90, 0x0000,
+ 0x0000, 0x0000, 0x8C91, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C92,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x8C93, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x8C94, 0x0000, 0x0000, 0x8C95, 0x0000, 0x0000, 0x8C96,
+ 0x0000, 0x0000, 0x0000, 0x8C97, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C98,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C99, 0x0000, 0x0000, 0x0000,
+ 0x8C9A, 0x8C9B, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C9C,
+ 0x0000, 0x0000, 0x8C9D, 0x8C9E, 0x0000, 0x0000, 0x8C9F, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8CA0,
+ 0x0000, 0x0000, 0x0000, 0x8CA1, 0x0000, 0x0000, 0x0000, 0x0000, 0x8CA2,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8CA3,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x8CA4, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8CA5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x8CA6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8CA7, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8CA8, 0x0000, 0x8CA9, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8CAA, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8CAB,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8CAC,
+ 0x8CAD, 0x0000, 0x0000, 0x0000, 0x8CAE, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8CAF, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8CB0, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x8CB1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8CB2, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x8CB3, 0x8CB4, 0x0000, 0x8CB5, 0x0000,
+ 0x0000, 0x8CB6, 0x0000, 0x0000, 0x8CB7, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8CB8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x8CB9, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x8CBA, 0x0000, 0x0000, 0x8CBB, 0x0000, 0x0000, 0x0000,
+ 0x8CBC, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8CBD, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x8CBE, 0x0000, 0x0000, 0x8CBF, 0x0000, 0x8CC0, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x8CC1, 0x0000, 0x0000, 0x0000, 0x8CC2, 0x0000,
+ 0x0000, 0x0000, 0x8CC3, 0x0000, 0x0000, 0x8CC4, 0x0000, 0x8CC5, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8CC6, 0x0000,
+ 0x0000, 0x0000, 0x8CC7, 0x8CC8, 0x0000, 0x0000, 0x0000, 0x8CC9, 0x0000,
+ 0x8CCA, 0x0000, 0x0000, 0x8CCB, 0x0000, 0x0000, 0x8CCC, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x8CCD, 0x0000, 0x0000, 0x8CCE, 0x0000, 0x0000, 0x8CCF,
+ 0x0000, 0x8CD0, 0x8CD1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8CD2, 0x0000, 0x8CD3, 0x0000, 0x8CD4, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8CD5, 0x8CD6, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x8CD7, 0x0000, 0x8CD8, 0x0000, 0x8CD9, 0x0000, 0x8CDA,
+ 0x0000, 0x8CDB, 0x0000, 0x0000, 0x8CDC, 0x0000, 0x8CDD, 0x8CDE, 0x8CDF,
+ 0x8CE0, 0x0000, 0x0000, 0x8CE1, 0x0000, 0x8CE2, 0x0000, 0x8CE3, 0x0000,
+ 0x0000, 0x0000, 0x8CE4, 0x0000, 0x8CE5, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8CE6, 0x0000, 0x0000, 0x8CE7, 0x0000, 0x0000, 0x0000, 0x8CE8, 0x0000,
+ 0x0000, 0x8CE9, 0x0000, 0x8CEA, 0x0000, 0x0000, 0x0000, 0x8CEB, 0x0000,
+ 0x8CEC, 0x0000, 0x0000, 0x0000, 0x0000, 0x8CED, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8CEE, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8CEF, 0x0000, 0x8CF0, 0x0000, 0x8CF1, 0x0000, 0x8CF2, 0x8CF3, 0x0000,
+ 0x0000, 0x8CF4, 0x0000, 0x0000, 0x8CF5, 0x0000, 0x0000, 0x8CF6, 0x0000,
+ 0x8CF7, 0x8CF8, 0x8CF9, 0x8CFA, 0x0000, 0x0000, 0x8CFB, 0x0000, 0x0000,
+ 0x8CFC, 0x0000, 0x8CFD, 0x8CFE, 0x8CFF, 0x8D00, 0x0000, 0x8D01, 0x8D02,
+ 0x8D03, 0x8D04, 0x0000, 0x8D05, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8D06, 0x0000, 0x0000, 0x8D07, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8D08, 0x8D09, 0x8D0A, 0x8D0B, 0x0000, 0x0000, 0x0000, 0x0000, 0x8D0C,
+ 0x8D0D, 0x0000, 0x0000, 0x0000, 0x8D0E, 0x8D0F, 0x0000, 0x0000, 0x8D10,
+ 0x0000, 0x0000, 0x8D11, 0x0000, 0x8D12, 0x0000, 0x0000, 0x0000, 0x8D13,
+ 0x0000, 0x8D14, 0x8D15, 0x0000, 0x8D16, 0x8D17, 0x8D18, 0x8D19, 0x0000,
+ 0x8D1A, 0x0000, 0x8D1B, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8D1C,
+ 0x0000, 0x8D1D, 0x0000, 0x0000, 0x0000, 0x8D1E, 0x0000, 0x0000, 0x8D1F,
+ 0x0000, 0x0000, 0x8D20, 0x0000, 0x0000, 0x8D21, 0x0000, 0x0000, 0x8D22,
+ 0x0000, 0x8D23, 0x0000, 0x0000, 0x8D24, 0x0000, 0x8D25, 0x0000, 0x8D26,
+ 0x0000, 0x8D27, 0x0000, 0x8D28, 0x0000, 0x8D29, 0x8D2A, 0x0000, 0x0000,
+ 0x0000, 0x8D2B, 0x8D2C, 0x0000, 0x0000, 0x0000, 0x8D2D, 0x8D2E, 0x8D2F,
+ 0x8D30, 0x0000, 0x0000, 0x8D31, 0x8D32, 0x0000, 0x8D33, 0x0000, 0x8D34,
+ 0x8D35, 0x0000, 0x0000, 0x0000, 0x8D36, 0x0000, 0x8D37, 0x8D38, 0x0000,
+ 0x0000, 0x8D39, 0x0000, 0x8D3A, 0x0000, 0x0000, 0x8D3B, 0x8D3C, 0x8D3D,
+ 0x0000, 0x8D3E, 0x0000, 0x8D3F, 0x0000, 0x8D40, 0x0000, 0x8D41, 0x8D42,
+ 0x8D43, 0x0000, 0x8D44, 0x8D45, 0x0000, 0x0000, 0x0000, 0x0000, 0x8D46,
+ 0x0000, 0x0000, 0x0000, 0x8D47, 0x0000, 0x8D48, 0x0000, 0x0000, 0x0000,
+ 0x8D49, 0x0000, 0x8D4A, 0x8D4B, 0x0000, 0x8D4C, 0x0000, 0x8D4D, 0x0000,
+ 0x8D4E, 0x0000, 0x0000, 0x8D4F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x8D50, 0x0000, 0x0000, 0x8D51, 0x8D52, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x8D53, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8D54, 0x0000, 0x0000, 0x0000, 0x0000, 0x8D55, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8D56,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x8D57, 0x8D58, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x8D59, 0x0000, 0x8D5A, 0x8D5B, 0x8D5C, 0x0000,
+ 0x8D5D, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8D5E, 0x0000, 0x0000,
+ 0x0000, 0x8D5F, 0x8D60, 0x0000, 0x0000, 0x0000, 0x8D61, 0x0000, 0x0000,
+ 0x8D62, 0x8D63, 0x0000, 0x0000, 0x0000, 0x0000, 0x8D64, 0x8D65, 0x0000,
+ 0x8D66, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8D67, 0x8D68, 0x0000, 0x0000, 0x8D69, 0x0000, 0x0000, 0x0000,
+ 0x8D6A, 0x8D6B, 0x0000, 0x8D6C, 0x8D6D, 0x0000, 0x0000, 0x0000, 0x8D6E,
+ 0x0000, 0x8D6F, 0x0000, 0x8D70, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x8D71, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8D72,
+ 0x0000, 0x8D73, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x8D74, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x8D75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8D76, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8D77, 0x8D78, 0x0000,
+ 0x8D79, 0x8D7A, 0x8D7B, 0x0000, 0x0000, 0x0000, 0x0000, 0x8D7C, 0x8D7D,
+ 0x8D7E, 0x8D7F, 0x8D80, 0x8D81, 0x0000, 0x0000, 0x8D82, 0x8D83, 0x0000,
+ 0x8D84, 0x8D85, 0x8D86, 0x0000, 0x8D87, 0x8D88, 0x8D89, 0x0000, 0x8D8A,
+ 0x8D8B, 0x8D8C, 0x8D8D, 0x0000, 0x8D8E, 0x8D8F, 0x8D90, 0x8D91, 0x8D92,
+ 0x8D93, 0x8D94, 0x0000, 0x8D95, 0x8D96, 0x0000, 0x8D97, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x8D98, 0x8D99, 0x8D9A, 0x0000, 0x8D9B,
+ 0x0000, 0x0000, 0x0000, 0x8D9C, 0x8D9D, 0x0000, 0x8D9E, 0x0000, 0x8D9F,
+ 0x0000, 0x8DA0, 0x8DA1, 0x8DA2, 0x8DA3, 0x8DA4, 0x0000, 0x8DA5, 0x8DA6,
+ 0x0000, 0x0000, 0x8DA7, 0x0000, 0x8DA8, 0x8DA9, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x8DAA, 0x8DAB, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8DAC, 0x8DAD, 0x8DAE, 0x8DAF, 0x8DB0, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8DB1, 0x8DB2, 0x0000, 0x8DB3, 0x8DB4, 0x0000, 0x8DB5, 0x0000,
+ 0x0000, 0x8DB6, 0x0000, 0x8DB7, 0x8DB8, 0x0000, 0x0000, 0x8DB9, 0x8DBA,
+ 0x0000, 0x8DBB, 0x8DBC, 0x0000, 0x0000, 0x0000, 0x8DBD, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8DBE, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x8DBF, 0x0000, 0x0000, 0x0000, 0x8DC0, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x8DC1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x8DC2, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8DC3, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8DC4,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8DC5,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8DC6, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8DC7, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8DC8, 0x0000,
+ 0x0000, 0x8DC9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8DCA, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8DCB, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x8DCC, 0x8DCD, 0x8DCE, 0x0000, 0x8DCF, 0x0000,
+ 0x0000, 0x0000, 0x8DD0, 0x8DD1, 0x8DD2, 0x0000, 0x8DD3, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x8DD4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8DD5, 0x0000, 0x0000, 0x0000, 0x8DD6, 0x8DD7, 0x0000, 0x0000, 0x0000,
+ 0x8DD8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x8DD9, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8DDA, 0x8DDB, 0x8DDC, 0x8DDD,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x8DDE, 0x0000, 0x8DDF, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x8DE0, 0x0000, 0x0000, 0x0000, 0x8DE1,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x8DE2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8DE3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8DE4, 0x8DE5, 0x8DE6,
+ 0x8DE7, 0x8DE8, 0x0000, 0x8DE9, 0x0000, 0x0000, 0x0000, 0x0000, 0x8DEA,
+ 0x0000, 0x8DEB, 0x0000, 0x8DEC, 0x8DED, 0x8DEE, 0x8DEF, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8DF0, 0x0000, 0x8DF1, 0x8DF2,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8DF3, 0x8DF4, 0x8DF5, 0x8DF6,
+ 0x8DF7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8DF8, 0x8DF9, 0x0000,
+ 0x0000, 0x8DFA, 0x8DFB, 0x0000, 0x0000, 0x0000, 0x0000, 0x8DFC, 0x0000,
+ 0x0000, 0x0000, 0x8DFD, 0x0000, 0x0000, 0x0000, 0x0000, 0x8DFE, 0x0000,
+ 0x0000, 0x8DFF, 0x0000, 0x0000, 0x8E00, 0x8E01, 0x8E02, 0x0000, 0x8E03,
+ 0x0000, 0x8E04, 0x8E05, 0x8E06, 0x0000, 0x0000, 0x8E07, 0x0000, 0x0000,
+ 0x0000, 0x8E08, 0x8E09, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8E0A,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8E0B, 0x0000, 0x8E0C, 0x8E0D, 0x0000, 0x8E0E, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8E0F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8E10, 0x8E11,
+ 0x8E12, 0x0000, 0x0000, 0x8E13, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8E14, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8E15,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x8E16, 0x8E17, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x8E18, 0x8E19, 0x0000, 0x0000, 0x8E1A, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x8E1B, 0x8E1C, 0x0000, 0x0000, 0x0000, 0x8E1D,
+ 0x0000, 0x0000, 0x8E1E, 0x0000, 0x8E1F, 0x0000, 0x8E20, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8E21, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8E22, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x8E23, 0x8E24, 0x0000, 0x8E25, 0x0000, 0x8E26, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x8E27, 0x0000, 0x0000, 0x8E28, 0x0000, 0x0000,
+ 0x8E29, 0x0000, 0x0000, 0x8E2A, 0x0000, 0x0000, 0x0000, 0x0000, 0x8E2B,
+ 0x8E2C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8E2D, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x8E2E, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8E2F, 0x0000, 0x0000, 0x8E30, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x8E31, 0x0000, 0x8E32, 0x0000, 0x8E33,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8E34, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x8E35, 0x0000, 0x0000, 0x8E36, 0x0000,
+ 0x8E37, 0x0000, 0x8E38, 0x0000, 0x8E39, 0x0000, 0x0000, 0x0000, 0x8E3A,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x8E3B, 0x8E3C, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8E3D, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8E3E, 0x0000,
+ 0x8E3F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x8E40, 0x8E41, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8E42, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8E43, 0x8E44,
+ 0x0000, 0x8E45, 0x0000, 0x8E46, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8E47, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8E48, 0x8E49, 0x0000, 0x8E4A, 0x8E4B, 0x8E4C, 0x0000, 0x0000, 0x0000,
+ 0x8E4D, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8E4E, 0x8E4F, 0x0000,
+ 0x0000, 0x8E50, 0x0000, 0x8E51, 0x0000, 0x0000, 0x8E52, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8E53, 0x0000, 0x8E54,
+ 0x0000, 0x8E55, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8E56,
+ 0x8E57, 0x0000, 0x8E58, 0x8E59, 0x0000, 0x0000, 0x0000, 0x0000, 0x8E5A,
+ 0x0000, 0x0000, 0x0000, 0x8E5B, 0x0000, 0x0000, 0x8E5C, 0x8E5D, 0x0000,
+ 0x0000, 0x8E5E, 0x8E5F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x8E60, 0x0000, 0x0000, 0x0000, 0x0000, 0x8E61, 0x0000,
+ 0x0000, 0x8E62, 0x8E63, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8E64, 0x0000, 0x8E65, 0x0000, 0x0000, 0x8E66, 0x8E67, 0x0000, 0x0000,
+ 0x8E68, 0x8E69, 0x8E6A, 0x8E6B, 0x0000, 0x0000, 0x8E6C, 0x8E6D, 0x8E6E,
+ 0x8E6F, 0x0000, 0x0000, 0x0000, 0x0000, 0x8E70, 0x0000, 0x0000, 0x8E71,
+ 0x8E72, 0x0000, 0x8E73, 0x0000, 0x8E74, 0x0000, 0x0000, 0x0000, 0x8E75,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8E76, 0x0000, 0x0000, 0x8E77,
+ 0x8E78, 0x0000, 0x0000, 0x8E79, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8E7A, 0x0000, 0x8E7B, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8E7C,
+ 0x8E7D, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8E7E, 0x0000, 0x8E7F, 0x0000, 0x8E80, 0x8E81, 0x0000, 0x0000, 0x0000,
+ 0x8E82, 0x8E83, 0x0000, 0x0000, 0x8E84, 0x0000, 0x8E85, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8E86, 0x0000, 0x0000, 0x0000,
+ 0x8E87, 0x0000, 0x8E88, 0x0000, 0x0000, 0x8E89, 0x0000, 0x8E8A, 0x0000,
+ 0x8E8B, 0x8E8C, 0x8E8D, 0x0000, 0x0000, 0x0000, 0x8E8E, 0x0000, 0x0000,
+ 0x8E8F, 0x0000, 0x8E90, 0x8E91, 0x0000, 0x8E92, 0x0000, 0x8E93, 0x8E94,
+ 0x8E95, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8E96, 0x0000,
+ 0x0000, 0x0000, 0x8E97, 0x0000, 0x8E98, 0x0000, 0x8E99, 0x8E9A, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x8E9B, 0x0000, 0x8E9C, 0x0000, 0x8E9D, 0x0000,
+ 0x8E9E, 0x0000, 0x0000, 0x0000, 0x0000, 0x8E9F, 0x0000, 0x0000, 0x8EA0,
+ 0x0000, 0x0000, 0x8EA1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x8EA2, 0x0000, 0x8EA3, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x8EA4, 0x8EA5, 0x8EA6, 0x0000, 0x8EA7, 0x8EA8, 0x8EA9,
+ 0x0000, 0x0000, 0x0000, 0x8EAA, 0x8EAB, 0x8EAC, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x8EAD, 0x0000, 0x0000, 0x0000, 0x8EAE,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x8EAF, 0x0000, 0x0000, 0x8EB0, 0x0000,
+ 0x8EB1, 0x0000, 0x8EB2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8EB3, 0x8EB4, 0x0000, 0x8EB5, 0x0000, 0x0000, 0x8EB6, 0x0000, 0x0000,
+ 0x8EB7, 0x8EB8, 0x8EB9, 0x8EBA, 0x0000, 0x0000, 0x0000, 0x8EBB, 0x8EBC,
+ 0x8EBD, 0x8EBE, 0x0000, 0x0000, 0x0000, 0x8EBF, 0x0000, 0x8EC0, 0x8EC1,
+ 0x0000, 0x8EC2, 0x0000, 0x0000, 0x8EC3, 0x8EC4, 0x0000, 0x0000, 0x0000,
+ 0x8EC5, 0x0000, 0x0000, 0x8EC6, 0x0000, 0x8EC7, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8EC8, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8EC9, 0x8ECA, 0x0000, 0x0000, 0x8ECB, 0x8ECC, 0x0000, 0x8ECD,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8ECE, 0x0000, 0x0000,
+ 0x0000, 0x8ECF, 0x0000, 0x8ED0, 0x8ED1, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8ED2, 0x0000, 0x0000, 0x0000, 0x8ED3, 0x8ED4, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x8ED5, 0x0000, 0x0000, 0x0000, 0x8ED6, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x8ED7, 0x8ED8, 0x0000, 0x0000, 0x0000, 0x8ED9,
+ 0x0000, 0x0000, 0x0000, 0x8EDA, 0x0000, 0x0000, 0x0000, 0x8EDB, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8EDC, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8EDD, 0x0000,
+ 0x8EDE, 0x0000, 0x8EDF, 0x0000, 0x0000, 0x8EE0, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x8EE1, 0x8EE2, 0x8EE3, 0x0000, 0x0000, 0x8EE4, 0x8EE5,
+ 0x0000, 0x8EE6, 0x8EE7, 0x0000, 0x8EE8, 0x0000, 0x8EE9, 0x0000, 0x8EEA,
+ 0x0000, 0x0000, 0x8EEB, 0x0000, 0x8EEC, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8EED, 0x0000, 0x0000, 0x0000, 0x8EEE, 0x8EEF, 0x0000, 0x0000, 0x0000,
+ 0x8EF0, 0x8EF1, 0x0000, 0x0000, 0x8EF2, 0x8EF3, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x8EF4, 0x8EF5, 0x0000, 0x0000, 0x0000, 0x8EF6, 0x8EF7,
+ 0x8EF8, 0x8EF9, 0x0000, 0x8EFA, 0x8EFB, 0x0000, 0x8EFC, 0x0000, 0x0000,
+ 0x0000, 0x8EFD, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8EFE, 0x0000, 0x0000, 0x0000, 0x0000, 0x8EFF, 0x0000, 0x0000, 0x0000,
+ 0x8F00, 0x0000, 0x0000, 0x0000, 0x8F01, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8F02, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8F03, 0x0000, 0x0000, 0x8F04,
+ 0x8F05, 0x0000, 0x0000, 0x0000, 0x8F06, 0x8F07, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8F08, 0x8F09, 0x0000, 0x0000, 0x8F0A, 0x0000, 0x0000, 0x8F0B,
+ 0x0000, 0x0000, 0x0000, 0x8F0C, 0x8F0D, 0x0000, 0x8F0E, 0x8F0F, 0x0000,
+ 0x8F10, 0x0000, 0x8F11, 0x0000, 0x0000, 0x0000, 0x0000, 0x8F12, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x8F13, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8F14, 0x0000, 0x8F15, 0x0000, 0x0000, 0x0000, 0x0000, 0x8F16, 0x0000,
+ 0x0000, 0x0000, 0x8F17, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x8F18, 0x0000, 0x8F19, 0x0000, 0x0000, 0x8F1A, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8F1B,
+ 0x0000, 0x0000, 0x8F1C, 0x8F1D, 0x8F1E, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8F1F, 0x0000, 0x8F20, 0x0000, 0x0000, 0x8F21, 0x8F22, 0x8F23, 0x8F24,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x8F25, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x8F26, 0x0000, 0x8F27, 0x8F28, 0x0000,
+ 0x0000, 0x8F29, 0x0000, 0x8F2A, 0x8F2B, 0x0000, 0x8F2C, 0x8F2D, 0x0000,
+ 0x8F2E, 0x8F2F, 0x0000, 0x0000, 0x8F30, 0x8F31, 0x8F32, 0x0000, 0x0000,
+ 0x0000, 0x8F33, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8F34, 0x0000, 0x8F35, 0x0000, 0x8F36, 0x0000, 0x0000, 0x8F37,
+ 0x8F38, 0x0000, 0x8F39, 0x8F3A, 0x8F3B, 0x0000, 0x0000, 0x0000, 0x8F3C,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x8F3D, 0x0000, 0x0000, 0x8F3E, 0x0000,
+ 0x8F3F, 0x8F40, 0x8F41, 0x8F42, 0x8F43, 0x0000, 0x0000, 0x0000, 0x8F44,
+ 0x0000, 0x0000, 0x8F45, 0x8F46, 0x8F47, 0x0000, 0x8F48, 0x8F49, 0x8F4A,
+ 0x0000, 0x0000, 0x0000, 0x8F4B, 0x0000, 0x8F4C, 0x8F4D, 0x8F4E, 0x8F4F,
+ 0x8F50, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8F51, 0x0000, 0x8F52,
+ 0x0000, 0x8F53, 0x8F54, 0x8F55, 0x0000, 0x8F56, 0x8F57, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x8F58, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8F59, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8F5A, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8F5B, 0x0000, 0x0000, 0x8F5C, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8F5D, 0x0000, 0x0000, 0x0000, 0x0000, 0x8F5E, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8F5F,
+ 0x8F60, 0x0000, 0x0000, 0x0000, 0x8F61, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x8F62, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8F63,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x8F64, 0x0000, 0x8F65, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x8F66, 0x0000, 0x0000, 0x8F67, 0x0000, 0x0000,
+ 0x0000, 0x8F68, 0x0000, 0x0000, 0x8F69, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x8F6A, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x8F6B, 0x0000, 0x0000, 0x8F6C, 0x0000,
+ 0x8F6D, 0x8F6E, 0x0000, 0x8F6F, 0x0000, 0x0000, 0x0000, 0x8F70, 0x8F71,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8F72, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8F73, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8F74,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x8F75, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8F76,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x8F77, 0x0000, 0x8F78, 0x0000, 0x8F79,
+ 0x0000, 0x8F7A, 0x8F7B, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8F7C, 0x0000, 0x8F7D, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x8F7E, 0x0000, 0x8F7F, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x8F80, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8F81, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8F82, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8F83, 0x0000, 0x8F84, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x8F85, 0x0000, 0x8F86, 0x8F87, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8F88, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x8F89, 0x0000, 0x0000, 0x8F8A, 0x0000, 0x8F8B, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8F8C, 0x0000, 0x0000, 0x0000, 0x8F8D, 0x0000, 0x8F8E, 0x8F8F, 0x8F90,
+ 0x0000, 0x8F91, 0x8F92, 0x8F93, 0x8F94, 0x0000, 0x8F95, 0x0000, 0x8F96,
+ 0x0000, 0x8F97, 0x8F98, 0x8F99, 0x8F9A, 0x8F9B, 0x8F9C, 0x0000, 0x0000,
+ 0x0000, 0x8F9D, 0x8F9E, 0x0000, 0x0000, 0x0000, 0x8F9F, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x8FA0, 0x0000, 0x0000, 0x8FA1, 0x0000, 0x8FA2, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8FA3, 0x0000, 0x0000, 0x8FA4,
+ 0x0000, 0x8FA5, 0x0000, 0x0000, 0x0000, 0x0000, 0x8FA6, 0x8FA7, 0x8FA8,
+ 0x0000, 0x8FA9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x8FAA, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8FAB, 0x8FAC, 0x8FAD, 0x8FAE, 0x0000, 0x0000, 0x8FAF, 0x8FB0, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x8FB1, 0x8FB2, 0x0000, 0x8FB3, 0x0000, 0x0000,
+ 0x8FB4, 0x0000, 0x0000, 0x0000, 0x8FB5, 0x0000, 0x0000, 0x8FB6, 0x0000,
+ 0x8FB7, 0x0000, 0x0000, 0x0000, 0x8FB8, 0x8FB9, 0x0000, 0x0000, 0x8FBA,
+ 0x8FBB, 0x8FBC, 0x0000, 0x8FBD, 0x8FBE, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x8FBF, 0x0000, 0x0000, 0x0000, 0x0000, 0x8FC0, 0x8FC1,
+ 0x8FC2, 0x0000, 0x8FC3, 0x0000, 0x0000, 0x0000, 0x0000, 0x8FC4, 0x0000,
+ 0x8FC5, 0x0000, 0x8FC6, 0x8FC7, 0x8FC8, 0x0000, 0x0000, 0x0000, 0x8FC9,
+ 0x0000, 0x0000, 0x0000, 0x8FCA, 0x0000, 0x8FCB, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8FCC,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8FCD, 0x8FCE, 0x0000,
+ 0x8FCF, 0x0000, 0x0000, 0x0000, 0x8FD0, 0x8FD1, 0x8FD2, 0x0000, 0x8FD3,
+ 0x0000, 0x8FD4, 0x0000, 0x0000, 0x8FD5, 0x0000, 0x8FD6, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8FD7, 0x8FD8, 0x8FD9, 0x8FDA,
+ 0x0000, 0x0000, 0x0000, 0x8FDB, 0x8FDC, 0x8FDD, 0x0000, 0x0000, 0x0000,
+ 0x8FDE, 0x8FDF, 0x0000, 0x8FE0, 0x0000, 0x8FE1, 0x0000, 0x0000, 0x8FE2,
+ 0x8FE3, 0x8FE4, 0x0000, 0x0000, 0x8FE5, 0x0000, 0x8FE6, 0x0000, 0x8FE7,
+ 0x8FE8, 0x8FE9, 0x0000, 0x8FEA, 0x0000, 0x0000, 0x8FEB, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x8FEC, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x8FED, 0x0000, 0x8FEE, 0x0000, 0x8FEF,
+ 0x8FF0, 0x0000, 0x0000, 0x0000, 0x8FF1, 0x0000, 0x8FF2, 0x0000, 0x8FF3,
+ 0x8FF4, 0x0000, 0x8FF5, 0x0000, 0x8FF6, 0x0000, 0x8FF7, 0x0000, 0x0000,
+ 0x8FF8, 0x8FF9, 0x0000, 0x8FFA, 0x8FFB, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8FFC, 0x0000, 0x0000, 0x0000, 0x0000, 0x8FFD, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x8FFE, 0x0000, 0x8FFF, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x9000, 0x9001, 0x9002, 0x0000, 0x0000, 0x9003, 0x0000, 0x9004,
+ 0x9005, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x9006, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x9007, 0x9008, 0x9009, 0x0000, 0x900A, 0x900B, 0x0000, 0x0000,
+ 0x900C, 0x900D, 0x0000, 0x900E, 0x0000, 0x900F, 0x0000, 0x9010, 0x0000,
+ 0x0000, 0x9011, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x9012, 0x0000, 0x0000, 0x9013, 0x9014, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9015, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x9016, 0x0000, 0x9017, 0x9018, 0x0000, 0x0000,
+ 0x9019, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x901A,
+ 0x901B, 0x901C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x901D,
+ 0x0000, 0x0000, 0x901E, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x901F, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x9020, 0x0000, 0x9021, 0x9022, 0x0000, 0x9023, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x9024, 0x9025, 0x9026, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x9027, 0x0000, 0x9028, 0x9029, 0x902A, 0x902B,
+ 0x902C, 0x902D, 0x0000, 0x0000, 0x0000, 0x0000, 0x902E, 0x0000, 0x902F,
+ 0x9030, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9031,
+ 0x0000, 0x9032, 0x0000, 0x0000, 0x9033, 0x9034, 0x0000, 0x0000, 0x0000,
+ 0x9035, 0x0000, 0x0000, 0x9036, 0x0000, 0x9037, 0x9038, 0x9039, 0x0000,
+ 0x0000, 0x0000, 0x903A, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x903B,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x903C, 0x0000, 0x0000, 0x903D, 0x0000,
+ 0x903E, 0x903F, 0x9040, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9041,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9042, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x9043, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9044, 0x0000, 0x0000,
+ 0x9045, 0x0000, 0x9046, 0x0000, 0x9047, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x9048, 0x0000, 0x0000, 0x9049, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x904A, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x904B, 0x0000, 0x904C,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x904D, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x904E, 0x0000, 0x0000, 0x0000, 0x0000, 0x904F, 0x0000,
+ 0x0000, 0x9050, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x9051, 0x0000, 0x9052, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9053, 0x9054, 0x0000, 0x9055,
+ 0x9056, 0x9057, 0x9058, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x9059, 0x0000, 0x0000, 0x0000, 0x905A, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x905B, 0x0000, 0x0000, 0x0000, 0x905C, 0x905D,
+ 0x0000, 0x905E, 0x905F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x9060, 0x9061, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x9062, 0x0000, 0x9063, 0x9064, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x9065, 0x9066, 0x9067, 0x9068, 0x0000,
+ 0x0000, 0x0000, 0x9069, 0x0000, 0x906A, 0x0000, 0x0000, 0x0000, 0x906B,
+ 0x906C, 0x0000, 0x906D, 0x0000, 0x0000, 0x906E, 0x906F, 0x0000, 0x9070,
+ 0x9071, 0x0000, 0x0000, 0x0000, 0x0000, 0x9072, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x9073, 0x0000, 0x9074, 0x0000, 0x0000, 0x9075, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x9076, 0x9077, 0x0000, 0x0000, 0x0000, 0x9078, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x9079, 0x907A, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x907B, 0x0000, 0x0000, 0x907C, 0x0000,
+ 0x0000, 0x0000, 0x907D, 0x0000, 0x907E, 0x0000, 0x0000, 0x907F, 0x9080,
+ 0x0000, 0x0000, 0x0000, 0x9081, 0x9082, 0x0000, 0x0000, 0x9083, 0x9084,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x9085, 0x0000, 0x9086, 0x9087, 0x9088,
+ 0x0000, 0x0000, 0x9089, 0x0000, 0x0000, 0x0000, 0x908A, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x908B, 0x908C, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x908D, 0x0000, 0x908E, 0x0000, 0x908F,
+ 0x9090, 0x9091, 0x0000, 0x0000, 0x0000, 0x0000, 0x9092, 0x0000, 0x9093,
+ 0x9094, 0x0000, 0x0000, 0x9095, 0x0000, 0x0000, 0x0000, 0x9096, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x9097, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9098, 0x9099, 0x0000, 0x909A,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x909B, 0x0000,
+ 0x909C, 0x0000, 0x909D, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x909E, 0x909F, 0x90A0, 0x0000, 0x90A1, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x90A2, 0x90A3, 0x0000, 0x90A4, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x90A5, 0x0000,
+ 0x0000, 0x90A6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x90A7, 0x0000,
+ 0x90A8, 0x90A9, 0x90AA, 0x0000, 0x0000, 0x0000, 0x90AB, 0x0000, 0x0000,
+ 0x90AC, 0x0000, 0x90AD, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x90AE, 0x90AF, 0x0000, 0x0000, 0x0000, 0x90B0, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x90B1, 0x0000, 0x0000, 0x0000, 0x90B2, 0x0000,
+ 0x0000, 0x90B3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x90B4, 0x90B5,
+ 0x90B6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x90B7, 0x90B8, 0x0000, 0x0000, 0x90B9, 0x90BA, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x90BB, 0x0000, 0x90BC, 0x0000,
+ 0x0000, 0x90BD, 0x0000, 0x0000, 0x90BE, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x90BF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x90C0, 0x0000,
+ 0x90C1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x90C2, 0x0000, 0x0000, 0x90C3, 0x0000, 0x90C4, 0x0000, 0x90C5,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x90C6, 0x0000, 0x0000,
+ 0x90C7, 0x90C8, 0x0000, 0x0000, 0x0000, 0x90C9, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x90CA, 0x0000, 0x0000, 0x90CB, 0x0000, 0x90CC, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x90CD, 0x90CE, 0x90CF, 0x90D0, 0x0000, 0x0000,
+ 0x90D1, 0x0000, 0x90D2, 0x90D3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x90D4, 0x0000, 0x0000, 0x90D5, 0x90D6, 0x0000, 0x90D7,
+ 0x90D8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x90D9, 0x90DA, 0x0000, 0x0000, 0x0000, 0x0000, 0x90DB,
+ 0x0000, 0x0000, 0x0000, 0x90DC, 0x0000, 0x0000, 0x90DD, 0x0000, 0x90DE,
+ 0x0000, 0x0000, 0x0000, 0x90DF, 0x90E0, 0x90E1, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x90E2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x90E3, 0x0000, 0x0000, 0x90E4,
+ 0x0000, 0x90E5, 0x90E6, 0x0000, 0x90E7, 0x90E8, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x90E9, 0x0000, 0x0000, 0x0000, 0x0000, 0x90EA, 0x0000,
+ 0x90EB, 0x90EC, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x90ED, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x90EE, 0x0000, 0x0000, 0x0000,
+ 0x90EF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x90F0, 0x90F1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x90F2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x90F3,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x90F4,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x90F5,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x90F6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x90F7, 0x0000, 0x90F8, 0x90F9, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x90FA, 0x0000, 0x90FB, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x90FC, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x90FD, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x90FE,
+ 0x90FF, 0x0000, 0x0000, 0x9100, 0x9101, 0x0000, 0x0000, 0x9102, 0x0000,
+ 0x9103, 0x9104, 0x0000, 0x0000, 0x0000, 0x9105, 0x0000, 0x0000, 0x9106,
+ 0x0000, 0x0000, 0x9107, 0x9108, 0x9109, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x910A, 0x0000, 0x0000, 0x0000, 0x910B, 0x0000, 0x910C, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x910D, 0x0000, 0x0000, 0x0000, 0x0000, 0x910E,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x910F, 0x9110, 0x0000, 0x9111, 0x0000, 0x0000,
+ 0x0000, 0x9112, 0x9113, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x9114, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9115, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9116, 0x9117, 0x9118,
+ 0x9119, 0x911A, 0x911B, 0x911C, 0x911D, 0x911E, 0x911F, 0x9120, 0x9121,
+ 0x9122, 0x9123, 0x9124, 0x9125, 0x9126, 0x9127, 0x9128, 0x9129, 0x912A,
+ 0x912B, 0x912C, 0x912D, 0x912E, 0x912F, 0x9130, 0x9131, 0x9132, 0x9133,
+ 0x9134, 0x9135, 0x9136, 0x9137, 0x9138, 0x9139, 0x913A, 0x913B, 0x913C,
+ 0x913D, 0x913E, 0x913F, 0x9140, 0x9141, 0x9142, 0x9143, 0x9144, 0x9145,
+ 0x9146, 0x9147, 0x9148, 0x9149, 0x914A, 0x914B, 0x914C, 0x914D, 0x914E,
+ 0x914F, 0x9150, 0x9151, 0x9152, 0x9153, 0x9154, 0x9155, 0x9156, 0x9157,
+ 0x9158, 0x9159, 0x915A, 0x915B, 0x915C, 0x915D, 0x915E, 0x915F, 0x9160,
+ 0x9161, 0x9162, 0x9163, 0x9164, 0x9165, 0x9166, 0x9167, 0x9168, 0x9169,
+ 0x916A, 0x916B, 0x916C, 0x916D, 0x916E, 0x916F, 0x9170, 0x9171, 0x9172,
+ 0x9173, 0x9174, 0x9175, 0x9176, 0x9177, 0x9178, 0x9179, 0x917A, 0x917B,
+ 0x917C, 0x917D, 0x917E, 0x917F, 0x9180, 0x9181, 0x9182, 0x9183, 0x9184,
+ 0x9185, 0x9186, 0x9187, 0x9188, 0x9189, 0x918A, 0x918B, 0x918C, 0x918D,
+ 0x918E, 0x918F, 0x9190, 0x9191, 0x9192, 0x9193, 0x9194, 0x9195, 0x9196,
+ 0x9197, 0x9198, 0x9199, 0x919A, 0x919B, 0x919C, 0x919D, 0x919E, 0x919F,
+ 0x91A0, 0x91A1, 0x91A2, 0x91A3, 0x91A4, 0x91A5, 0x91A6, 0x91A7, 0x91A8,
+ 0x91A9, 0x91AA, 0x91AB, 0x91AC, 0x91AD, 0x91AE, 0x91AF, 0x91B0, 0x91B1,
+ 0x91B2, 0x91B3, 0x91B4, 0x91B5, 0x91B6, 0x91B7, 0x91B8, 0x91B9, 0x91BA,
+ 0x91BB, 0x91BC, 0x91BD, 0x91BE, 0x91BF, 0x91C0, 0x91C1, 0x91C2, 0x91C3,
+ 0x91C4, 0x91C5, 0x91C6, 0x91C7, 0x91C8, 0x91C9, 0x91CA, 0x91CB, 0x91CC,
+ 0x91CD, 0x91CE, 0x91CF, 0x91D0, 0x91D1, 0x91D2, 0x91D3, 0x91D4, 0x91D5,
+ 0x91D6, 0x91D7, 0x91D8, 0x91D9, 0x91DA, 0x91DB, 0x91DC, 0x91DD, 0x91DE,
+ 0x91DF, 0x91E0, 0x91E1, 0x91E2, 0x91E3, 0x91E4, 0x91E5, 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, 0x0000, 0x0000, 0x9224,
+ 0x0000, 0x9225, 0x0000, 0x0000, 0x9226, 0x9227, 0x9228, 0x9229, 0x922A,
+ 0x922B, 0x922C, 0x922D, 0x922E, 0x922F, 0x0000, 0x9230, 0x0000, 0x9231,
+ 0x0000, 0x0000, 0x9232, 0x9233, 0x0000, 0x0000, 0x0000, 0x9234, 0x9235,
+ 0x9236, 0x9237, 0x0000, 0x0000, 0x9238, 0x9239, 0x923A, 0x923B, 0x923C,
+ 0x923D, 0x923E, 0x923F, 0x9240, 0x9241, 0x9242, 0x9243, 0x9244, 0x9245,
+ 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, 0x0000, 0x9274, 0x0000, 0x0000, 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, 0x928E, 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, 0x92A8, 0x92A9, 0x92AA, 0x92AB, 0x92AC, 0x92AD, 0x92AE,
+ 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, 0x92C8, 0x92C9,
+ 0x92CA, 0x92CB, 0x92CC, 0x92CD, 0x92CE, 0x92CF, 0x92D0, 0x92D1, 0x92D2,
+ 0x92D3, 0x0000, 0x0000, 0x0000, 0x92D4, 0x92D5, 0x92D6, 0x0000, 0x0000,
+ 0x0000, 0x92D7, 0x92D8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x23AC, 0x23AE, 0x23B0, 0x3312,
+ 0x3315, 0x23B2, 0x23B4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x23B6, 0x23B8, 0x23BA,
+ 0x23BC, 0x23BE, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x23C0, 0x0000,
+ 0x23C2, 0x92D9, 0x92DA, 0x92DB, 0x92DC, 0x92DD, 0x92DE, 0x92DF, 0x92E0,
+ 0x92E1, 0x92E2, 0x23C4, 0x23C6, 0x23C8, 0x23CA, 0x23CC, 0x23CE, 0x23D0,
+ 0x23D2, 0x23D4, 0x23D6, 0x23D8, 0x23DA, 0x23DC, 0x0000, 0x23DE, 0x23E0,
+ 0x23E2, 0x23E4, 0x23E6, 0x0000, 0x23E8, 0x0000, 0x23EA, 0x23EC, 0x0000,
+ 0x23EE, 0x23F0, 0x0000, 0x23F2, 0x23F4, 0x23F6, 0x23F8, 0x23FA, 0x23FC,
+ 0x23FE, 0x2400, 0x2402, 0x2404, 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, 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, 0x933E, 0x933F, 0x9340, 0x9341,
+ 0x9342, 0x9343, 0x9344, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x9345, 0x9346, 0x9347, 0x9348, 0x9349, 0x934A, 0x934B, 0x934C, 0x934D,
+ 0x934E, 0x934F, 0x9350, 0x9351, 0x9352, 0x9353, 0x9354, 0x9355, 0x9356,
+ 0x9357, 0x9358, 0x9359, 0x935A, 0x935B, 0x2406, 0x2408, 0x240A, 0x240C,
+ 0x240E, 0x2410, 0x2412, 0x2414, 0x2416, 0x2418, 0x241A, 0x241C, 0x241E,
+ 0x2420, 0x2422, 0x2424, 0x2426, 0x2428, 0x935C, 0x935D, 0x935E, 0x935F,
+ 0x242A, 0x242C, 0x242E, 0x2430, 0x2432, 0x2434, 0x2436, 0x2438, 0x243A,
+ 0x243C, 0x243E, 0x2440, 0x2442, 0x2444, 0x2446, 0x2448, 0x244A, 0x244C,
+ 0x244E, 0x2450, 0x2452, 0x2454, 0x2456, 0x2458, 0x245A, 0x245C, 0x245E,
+ 0x2460, 0x2462, 0x2464, 0x2466, 0x2468, 0x246A, 0x246C, 0x246E, 0x2470,
+ 0x2472, 0x2474, 0x2476, 0x2478, 0x247A, 0x247C, 0x247E, 0x2480, 0x2482,
+ 0x2484, 0x2486, 0x2488, 0x248A, 0x248C, 0x248E, 0x2490, 0x2492, 0x2494,
+ 0x2496, 0x2498, 0x249A, 0x249C, 0x249E, 0x24A0, 0x24A2, 0x24A4, 0x24A6,
+ 0x24A8, 0x24AA, 0x24AC, 0x24AE, 0x24B0, 0x24B2, 0x24B4, 0x24B6, 0x24B8,
+ 0x24BA, 0x24BC, 0x24BE, 0x24C0, 0x24C2, 0x24C4, 0x24C6, 0x24C8, 0x24CA,
+ 0x24CC, 0x24CE, 0x24D0, 0x24D2, 0x24D4, 0x24D6, 0x24D8, 0x24DA, 0x24DC,
+ 0x24DE, 0x24E0, 0x24E2, 0x24E4, 0x24E6, 0x24E8, 0x24EA, 0x24EC, 0x24EE,
+ 0x24F0, 0x24F2, 0x24F4, 0x24F6, 0x24F8, 0x24FA, 0x24FC, 0x24FE, 0x2500,
+ 0x2502, 0x2504, 0x2506, 0x2508, 0x250A, 0x250C, 0x250E, 0x2510, 0x2512,
+ 0x2514, 0x2516, 0x2518, 0x251A, 0x251C, 0x251E, 0x2520, 0x2522, 0x2524,
+ 0x2526, 0x2528, 0x252A, 0x252C, 0x252E, 0x2530, 0x2532, 0x2534, 0x2536,
+ 0x2538, 0x253A, 0x253C, 0x253E, 0x2540, 0x2542, 0x2544, 0x2546, 0x2548,
+ 0x254A, 0x254C, 0x254E, 0x2550, 0x2552, 0x2554, 0x2556, 0x2558, 0x255A,
+ 0x255C, 0x255E, 0x2560, 0x2562, 0x2564, 0x2566, 0x2568, 0x256A, 0x256C,
+ 0x256E, 0x2570, 0x2572, 0x2574, 0x2576, 0x2578, 0x257A, 0x257C, 0x257E,
+ 0x2580, 0x2582, 0x2584, 0x2586, 0x2588, 0x258A, 0x258C, 0x258E, 0x2590,
+ 0x2592, 0x2594, 0x2596, 0x2598, 0x259A, 0x259C, 0x259E, 0x25A0, 0x25A2,
+ 0x25A4, 0x25A6, 0x25A8, 0x25AA, 0x25AC, 0x25AE, 0x25B0, 0x25B2, 0x25B4,
+ 0x25B6, 0x25B8, 0x25BA, 0x25BC, 0x25BE, 0x25C0, 0x25C2, 0x25C4, 0x25C6,
+ 0x25C8, 0x25CA, 0x25CC, 0x25CE, 0x25D0, 0x25D2, 0x25D4, 0x25D6, 0x25D8,
+ 0x25DA, 0x25DC, 0x25DE, 0x25E0, 0x25E2, 0x25E4, 0x25E6, 0x25E8, 0x25EA,
+ 0x25EC, 0x25EE, 0x25F0, 0x25F2, 0x25F4, 0x25F6, 0x25F8, 0x25FA, 0x25FC,
+ 0x25FE, 0x2600, 0x2602, 0x2604, 0x2606, 0x2608, 0x260A, 0x260C, 0x3318,
+ 0x331B, 0x331E, 0x260E, 0x2610, 0x2612, 0x2614, 0x2616, 0x2618, 0x261A,
+ 0x261C, 0x261E, 0x2620, 0x2622, 0x2624, 0x2626, 0x2628, 0x262A, 0x262C,
+ 0x262E, 0x2630, 0x2632, 0x2634, 0x2636, 0x2638, 0x263A, 0x263C, 0x263E,
+ 0x2640, 0x2642, 0x2644, 0x2646, 0x2648, 0x264A, 0x264C, 0x264E, 0x2650,
+ 0x2652, 0x2654, 0x2656, 0x2658, 0x265A, 0x265C, 0x265E, 0x2660, 0x2662,
+ 0x2664, 0x2666, 0x2668, 0x266A, 0x266C, 0x266E, 0x2670, 0x2672, 0x2674,
+ 0x2676, 0x2678, 0x267A, 0x267C, 0x267E, 0x2680, 0x2682, 0x2684, 0x2686,
+ 0x2688, 0x268A, 0x268C, 0x268E, 0x2690, 0x2692, 0x2694, 0x2696, 0x2698,
+ 0x269A, 0x269C, 0x269E, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x3321, 0x3324, 0x3327, 0x332A, 0x332D, 0x3330,
+ 0x3333, 0x3336, 0x3339, 0x333C, 0x333F, 0x3342, 0x3345, 0x3348, 0x334B,
+ 0x334E, 0x3351, 0x3354, 0x3357, 0x335A, 0x335D, 0x3360, 0x3363, 0x3366,
+ 0x3369, 0x336C, 0x336F, 0x3372, 0x3375, 0x3378, 0x337B, 0x337E, 0x3381,
+ 0x3384, 0x3387, 0x338A, 0x338D, 0x3390, 0x3393, 0x3396, 0x3399, 0x339C,
+ 0x339F, 0x33A2, 0x33A5, 0x33A8, 0x33AB, 0x33AE, 0x33B1, 0x33B4, 0x33B7,
+ 0x33BA, 0x33BD, 0x33C0, 0x33C3, 0x33C6, 0x33C9, 0x33CC, 0x33CF, 0x33D2,
+ 0x33D5, 0x33D8, 0x33DB, 0x33DE, 0x0000, 0x0000, 0x33E1, 0x33E4, 0x33E7,
+ 0x33EA, 0x33ED, 0x33F0, 0x33F3, 0x33F6, 0x33F9, 0x33FC, 0x33FF, 0x3402,
+ 0x3405, 0x3408, 0x340B, 0x340E, 0x3411, 0x3414, 0x3417, 0x341A, 0x341D,
+ 0x3420, 0x3423, 0x3426, 0x3429, 0x342C, 0x342F, 0x3432, 0x3435, 0x3438,
+ 0x343B, 0x343E, 0x3441, 0x3444, 0x3447, 0x344A, 0x344D, 0x3450, 0x3453,
+ 0x3456, 0x3459, 0x345C, 0x345F, 0x3462, 0x3465, 0x3468, 0x346B, 0x346E,
+ 0x3471, 0x3474, 0x3477, 0x347A, 0x347D, 0x3480, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x3483, 0x3486, 0x41A4, 0x41A9, 0x41AE, 0x41B3, 0x41B8, 0x41BD,
+ 0x41C2, 0x3489, 0x41C7, 0x41DA, 0x41E3, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9360, 0x9361, 0x9362,
+ 0x9363, 0x9364, 0x9365, 0x9366, 0x9367, 0x9368, 0x9369, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x936A, 0x936B, 0x936C, 0x936D, 0x936E, 0x936F, 0x9370,
+ 0x9371, 0x9372, 0x9373, 0x9374, 0x9375, 0x9376, 0x9377, 0x9378, 0x9379,
+ 0x937A, 0x937B, 0x937C, 0x937D, 0x937E, 0x0000, 0x0000, 0x937F, 0x9380,
+ 0x9381, 0x9382, 0x9383, 0x9384, 0x9385, 0x9386, 0x9387, 0x9388, 0x9389,
+ 0x938A, 0x0000, 0x938B, 0x938C, 0x938D, 0x938E, 0x938F, 0x9390, 0x9391,
+ 0x9392, 0x9393, 0x9394, 0x9395, 0x9396, 0x9397, 0x9398, 0x9399, 0x939A,
+ 0x939B, 0x939C, 0x939D, 0x0000, 0x939E, 0x939F, 0x93A0, 0x93A1, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x93A2, 0x26A0, 0x93A3, 0x0000, 0x93A4, 0x0000,
+ 0x93A5, 0x26A2, 0x93A6, 0x26A4, 0x93A7, 0x26A6, 0x93A8, 0x26A8, 0x93A9,
+ 0x26AA, 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, 0x93CA, 0x93CB, 0x93CC,
+ 0x93CD, 0x93CE, 0x93CF, 0x93D0, 0x93D1, 0x93D2, 0x93D3, 0x93D4, 0x93D5,
+ 0x93D6, 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, 0x26AC, 0x26AE, 0x26B0, 0x26B2, 0x26B4, 0x26B6, 0x26B8, 0x26BA,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x941F, 0x9420, 0x9421, 0x9422, 0x9423,
+ 0x9424, 0x9425, 0x9426, 0x9427, 0x9428, 0x9429, 0x942A, 0x942B, 0x942C,
+ 0x942D, 0x942E, 0x942F, 0x9430, 0x9431, 0x9432, 0x9433, 0x9434, 0x9435,
+ 0x9436, 0x9437, 0x9438, 0x9439, 0x943A, 0x943B, 0x943C, 0x943D, 0x943E,
+ 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, 0x946B,
+ 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, 0x9485, 0x9486,
+ 0x9487, 0x9488, 0x9489, 0x948A, 0x948B, 0x948C, 0x948D, 0x948E, 0x948F,
+ 0x9490, 0x9491, 0x9492, 0x9493, 0x9494, 0x9495, 0x9496, 0x9497, 0x9498,
+ 0x9499, 0x949A, 0x949B, 0x949C, 0x949D, 0x949E, 0x949F, 0x94A0, 0x94A1,
+ 0x94A2, 0x94A3, 0x94A4, 0x94A5, 0x94A6, 0x94A7, 0x94A8, 0x94A9, 0x94AA,
+ 0x94AB, 0x94AC, 0x94AD, 0x94AE, 0x94AF, 0x94B0, 0x94B1, 0x94B2, 0x94B3,
+ 0x94B4, 0x94B5, 0x94B6, 0x94B7, 0x94B8, 0x94B9, 0x94BA, 0x94BB, 0x94BC,
+ 0x94BD, 0x94BE, 0x94BF, 0x94C0, 0x94C1, 0x94C2, 0x94C3, 0x94C4, 0x94C5,
+ 0x94C6, 0x94C7, 0x94C8, 0x94C9, 0x94CA, 0x94CB, 0x94CC, 0x94CD, 0x94CE,
+ 0x94CF, 0x94D0, 0x94D1, 0x94D2, 0x94D3, 0x94D4, 0x94D5, 0x94D6, 0x94D7,
+ 0x94D8, 0x94D9, 0x94DA, 0x94DB, 0x94DC, 0x0000, 0x0000, 0x0000, 0x94DD,
+ 0x94DE, 0x94DF, 0x94E0, 0x94E1, 0x94E2, 0x0000, 0x0000, 0x94E3, 0x94E4,
+ 0x94E5, 0x94E6, 0x94E7, 0x94E8, 0x0000, 0x0000, 0x94E9, 0x94EA, 0x94EB,
+ 0x94EC, 0x94ED, 0x94EE, 0x0000, 0x0000, 0x94EF, 0x94F0, 0x94F1, 0x0000,
+ 0x0000, 0x0000, 0x94F2, 0x94F3, 0x94F4, 0x94F5, 0x94F6, 0x94F7, 0x94F8,
+ 0x0000, 0x94F9, 0x94FA, 0x94FB, 0x94FC, 0x94FD, 0x94FE, 0x94FF, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000};
extern const FX_WCHAR g_UnicodeData_Normalization_Map1[5376] = {
- 0x0066, 0x0053, 0x0053, 0x0059, 0x0020, 0x0308, 0x0061, 0x0052, 0x0304, 0x0032, 0x0033, 0x0301, 0x03BC, 0x0327, 0x0031, 0x006F,
- 0x0041, 0x0041, 0x0041, 0x0041, 0x0041, 0x0041, 0x0043, 0x0045, 0x0045, 0x0045, 0x0045, 0x0049, 0x0049, 0x0049, 0x0049, 0x0044,
- 0x004E, 0x004F, 0x004F, 0x004F, 0x004F, 0x004F, 0x004F, 0x0055, 0x0055, 0x0055, 0x0055, 0x0059, 0x0061, 0x0061, 0x0061, 0x0061,
- 0x0061, 0x0061, 0x0063, 0x0065, 0x0065, 0x0065, 0x0065, 0x0069, 0x0069, 0x0069, 0x0069, 0x006E, 0x006F, 0x006F, 0x006F, 0x006F,
- 0x006F, 0x006F, 0x0075, 0x0075, 0x0075, 0x0075, 0x0079, 0x0079, 0x0041, 0x0061, 0x0041, 0x0061, 0x0041, 0x0061, 0x0043, 0x0063,
- 0x0043, 0x0063, 0x0043, 0x0063, 0x0043, 0x0063, 0x0044, 0x0064, 0x0044, 0x0064, 0x0045, 0x0065, 0x0045, 0x0065, 0x0045, 0x0065,
- 0x0045, 0x0065, 0x0045, 0x0065, 0x0047, 0x0067, 0x0047, 0x0067, 0x0047, 0x0067, 0x0047, 0x0067, 0x0048, 0x0068, 0x0048, 0x0068,
- 0x0049, 0x0069, 0x0049, 0x0069, 0x0049, 0x0069, 0x0049, 0x0069, 0x0049, 0x004A, 0x006A, 0x004B, 0x006B, 0x004B, 0x004C, 0x006C,
- 0x004C, 0x006C, 0x004C, 0x006C, 0x004C, 0x006C, 0x004C, 0x006C, 0x004E, 0x006E, 0x004E, 0x006E, 0x004E, 0x006E, 0x006E, 0x004F,
- 0x006F, 0x004F, 0x006F, 0x004F, 0x006F, 0x0052, 0x0072, 0x0052, 0x0072, 0x0052, 0x0072, 0x0053, 0x0073, 0x0053, 0x0073, 0x0053,
- 0x0073, 0x0053, 0x0073, 0x0054, 0x0074, 0x0054, 0x0074, 0x0054, 0x0074, 0x0055, 0x0075, 0x0055, 0x0075, 0x0055, 0x0075, 0x0055,
- 0x0075, 0x0055, 0x0075, 0x0055, 0x0075, 0x0057, 0x0077, 0x0059, 0x0079, 0x0059, 0x005A, 0x007A, 0x005A, 0x007A, 0x005A, 0x007A,
- 0x0073, 0x0062, 0x0042, 0x0042, 0x0062, 0x0043, 0x0063, 0x0044, 0x0044, 0x0044, 0x0064, 0x0045, 0x0045, 0x0046, 0x0066, 0x0047,
- 0x0049, 0x004B, 0x006B, 0x006C, 0x004D, 0x004E, 0x006E, 0x004F, 0x004F, 0x006F, 0x0050, 0x0070, 0x0283, 0x0074, 0x0054, 0x0074,
- 0x0054, 0x0055, 0x0075, 0x0056, 0x0059, 0x0079, 0x005A, 0x007A, 0x01B7, 0x0041, 0x0061, 0x0049, 0x0069, 0x004F, 0x006F, 0x0055,
- 0x0075, 0x00DC, 0x00FC, 0x00DC, 0x00FC, 0x00DC, 0x00FC, 0x00DC, 0x00FC, 0x0065, 0x0041, 0x0061, 0x0041, 0x0061, 0x00C6, 0x00E6,
- 0x0047, 0x0067, 0x0047, 0x0067, 0x004B, 0x006B, 0x004F, 0x006F, 0x01EA, 0x01EB, 0x01B7, 0x0292, 0x006A, 0x0047, 0x0067, 0x004E,
- 0x006E, 0x0041, 0x0061, 0x00C6, 0x00E6, 0x00D8, 0x00F8, 0x0041, 0x0061, 0x0041, 0x0061, 0x0045, 0x0065, 0x0045, 0x0065, 0x0049,
- 0x0069, 0x0049, 0x0069, 0x004F, 0x006F, 0x004F, 0x006F, 0x0052, 0x0072, 0x0052, 0x0072, 0x0055, 0x0075, 0x0055, 0x0075, 0x0053,
- 0x0073, 0x0054, 0x0074, 0x0048, 0x0068, 0x004E, 0x0064, 0x005A, 0x007A, 0x0041, 0x0061, 0x0045, 0x0065, 0x00D6, 0x00F6, 0x00D5,
- 0x00F5, 0x004F, 0x006F, 0x022E, 0x022F, 0x0059, 0x0079, 0x006C, 0x006E, 0x0074, 0x006A, 0x0041, 0x0043, 0x0063, 0x004C, 0x0054,
- 0x0053, 0x005A, 0x0042, 0x0055, 0x0056, 0x0045, 0x0065, 0x004A, 0x006A, 0x0051, 0x0071, 0x0052, 0x0072, 0x0059, 0x0079, 0x0061,
- 0x0251, 0x0062, 0x006F, 0x0063, 0x0064, 0x0064, 0x0065, 0x0259, 0x0065, 0x0065, 0x0065, 0x0065, 0x006A, 0x0067, 0x0067, 0x0047,
- 0x0068, 0x0068, 0x0069, 0x0049, 0x006C, 0x006C, 0x006C, 0x006D, 0x006D, 0x006D, 0x006E, 0x006E, 0x006E, 0x006F, 0x0072, 0x0072,
- 0x0072, 0x0072, 0x0072, 0x0072, 0x0072, 0x0052, 0x0052, 0x0073, 0x006A, 0x0283, 0x0283, 0x0074, 0x0074, 0x0055, 0x0076, 0x0076,
- 0x0077, 0x0079, 0x0059, 0x007A, 0x007A, 0x0292, 0x0043, 0x0042, 0x0065, 0x0047, 0x0048, 0x006A, 0x006B, 0x004C, 0x0071, 0x0068,
- 0x0068, 0x0068, 0x0068, 0x006A, 0x0072, 0x0279, 0x027B, 0x0281, 0x0077, 0x0079, 0x0263, 0x006C, 0x0073, 0x0078, 0x0295, 0x0300,
- 0x0301, 0x0313, 0x0308, 0x0061, 0x0065, 0x0069, 0x006F, 0x0075, 0x0063, 0x0064, 0x0068, 0x006D, 0x0072, 0x0074, 0x0076, 0x0078,
- 0x02B9, 0x003B, 0x0020, 0x00A8, 0x0391, 0x00B7, 0x0395, 0x0397, 0x0399, 0x039F, 0x03A5, 0x03A9, 0x03CA, 0x0399, 0x03A5, 0x03B1,
- 0x03B5, 0x03B7, 0x03B9, 0x03CB, 0x03B9, 0x03C5, 0x03BF, 0x03C5, 0x03C9, 0x03B2, 0x03B8, 0x03A5, 0x03D2, 0x03D2, 0x03C6, 0x03C0,
- 0x03BA, 0x03C1, 0x03C2, 0x0398, 0x03B5, 0x03A3, 0x0415, 0x0415, 0x0413, 0x0406, 0x041A, 0x0418, 0x0423, 0x0418, 0x0438, 0x0435,
- 0x0435, 0x0433, 0x0456, 0x043A, 0x0438, 0x0443, 0x0466, 0x0467, 0x046A, 0x046B, 0x0474, 0x0475, 0x0460, 0x0461, 0x0419, 0x0439,
- 0x0420, 0x0440, 0x0413, 0x0433, 0x0413, 0x0433, 0x0413, 0x0433, 0x0416, 0x0436, 0x0417, 0x0437, 0x041A, 0x043A, 0x041A, 0x043A,
- 0x041A, 0x043A, 0x041A, 0x043A, 0x041D, 0x043D, 0x041F, 0x043F, 0x0421, 0x0441, 0x0422, 0x0442, 0x04AE, 0x04AF, 0x0425, 0x0445,
- 0x0427, 0x0447, 0x0427, 0x0447, 0x0416, 0x0436, 0x04BC, 0x04BD, 0x0416, 0x0436, 0x041A, 0x043A, 0x041B, 0x043B, 0x041D, 0x043D,
- 0x041D, 0x043D, 0x041C, 0x043C, 0x0410, 0x0430, 0x0410, 0x0430, 0x0415, 0x0435, 0x04D8, 0x04D9, 0x0416, 0x0436, 0x0417, 0x0437,
- 0x0418, 0x0438, 0x0418, 0x0438, 0x041E, 0x043E, 0x04E8, 0x04E9, 0x042D, 0x044D, 0x0423, 0x0443, 0x0423, 0x0443, 0x0423, 0x0443,
- 0x0427, 0x0447, 0x0413, 0x0433, 0x042B, 0x044B, 0x0413, 0x0433, 0x0425, 0x0445, 0x0425, 0x0445, 0x0417, 0x0437, 0x041B, 0x043B,
- 0x0F0B, 0x10DC, 0x0041, 0x00C6, 0x0042, 0x0042, 0x0044, 0x0045, 0x018E, 0x0047, 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D,
- 0x004E, 0x004F, 0x0222, 0x0050, 0x0052, 0x0054, 0x0055, 0x0057, 0x0061, 0x0250, 0x0251, 0x1D02, 0x0062, 0x0064, 0x0065, 0x0259,
- 0x025B, 0x025C, 0x0067, 0x006B, 0x006D, 0x014B, 0x006F, 0x0254, 0x1D16, 0x1D17, 0x0070, 0x0074, 0x0075, 0x1D1D, 0x026F, 0x0076,
- 0x1D25, 0x03B2, 0x03B3, 0x03B4, 0x03C6, 0x03C7, 0x0069, 0x0072, 0x0075, 0x0076, 0x03B2, 0x03B3, 0x03C1, 0x03C6, 0x03C7, 0x0062,
- 0x0064, 0x0066, 0x006D, 0x006E, 0x0070, 0x0072, 0x0072, 0x0073, 0x0074, 0x007A, 0x0067, 0x043D, 0x004C, 0x0070, 0x0055, 0x028A,
- 0x0062, 0x0064, 0x0066, 0x0067, 0x006B, 0x006C, 0x006D, 0x006E, 0x0070, 0x0072, 0x0073, 0x0283, 0x0076, 0x0078, 0x007A, 0x0061,
- 0x0251, 0x0064, 0x0065, 0x0065, 0x0065, 0x0065, 0x0069, 0x0283, 0x0252, 0x0063, 0x0255, 0x00F0, 0x025C, 0x0066, 0x025F, 0x0261,
- 0x0265, 0x0268, 0x0269, 0x026A, 0x1D7B, 0x029D, 0x026D, 0x1D85, 0x029F, 0x0271, 0x0270, 0x0272, 0x0273, 0x0274, 0x0275, 0x0278,
- 0x0282, 0x0283, 0x01AB, 0x0289, 0x028A, 0x1D1C, 0x028B, 0x028C, 0x007A, 0x0290, 0x0291, 0x0292, 0x03B8, 0x0041, 0x0061, 0x0042,
- 0x0062, 0x0042, 0x0062, 0x0042, 0x0062, 0x0043, 0x0063, 0x0044, 0x0064, 0x0044, 0x0064, 0x0044, 0x0064, 0x0044, 0x0064, 0x0044,
- 0x0064, 0x0045, 0x0065, 0x0045, 0x0065, 0x0045, 0x0065, 0x0045, 0x0065, 0x0228, 0x0229, 0x0046, 0x0066, 0x0047, 0x0067, 0x0048,
- 0x0068, 0x0048, 0x0068, 0x0048, 0x0068, 0x0048, 0x0068, 0x0048, 0x0068, 0x0049, 0x0069, 0x00CF, 0x00EF, 0x004B, 0x006B, 0x004B,
- 0x006B, 0x004B, 0x006B, 0x004C, 0x006C, 0x004C, 0x006C, 0x004C, 0x006C, 0x004C, 0x006C, 0x004D, 0x006D, 0x004D, 0x006D, 0x004D,
- 0x006D, 0x004E, 0x006E, 0x004E, 0x006E, 0x004E, 0x006E, 0x004E, 0x006E, 0x00D5, 0x00F5, 0x00D5, 0x00F5, 0x014C, 0x014D, 0x014C,
- 0x014D, 0x0050, 0x0070, 0x0050, 0x0070, 0x0052, 0x0072, 0x0052, 0x0072, 0x0052, 0x0072, 0x0052, 0x0072, 0x0053, 0x0073, 0x0053,
- 0x0073, 0x0053, 0x0073, 0x0053, 0x0073, 0x0053, 0x0073, 0x0054, 0x0074, 0x0054, 0x0074, 0x0054, 0x0074, 0x0054, 0x0074, 0x0055,
- 0x0075, 0x0055, 0x0075, 0x0055, 0x0075, 0x0168, 0x0169, 0x016A, 0x016B, 0x0056, 0x0076, 0x0056, 0x0076, 0x0057, 0x0077, 0x0057,
- 0x0077, 0x0057, 0x0077, 0x0057, 0x0077, 0x0057, 0x0077, 0x0058, 0x0078, 0x0058, 0x0078, 0x0059, 0x0079, 0x005A, 0x007A, 0x005A,
- 0x007A, 0x005A, 0x007A, 0x0068, 0x0074, 0x0077, 0x0079, 0x0061, 0x017F, 0x0041, 0x0061, 0x0041, 0x0061, 0x0041, 0x0061, 0x0041,
- 0x0061, 0x0041, 0x0061, 0x0041, 0x0061, 0x0041, 0x0061, 0x0041, 0x0061, 0x0041, 0x0061, 0x0041, 0x0061, 0x0041, 0x0061, 0x0041,
- 0x0061, 0x0045, 0x0065, 0x0045, 0x0065, 0x0045, 0x0065, 0x0045, 0x0065, 0x0045, 0x0065, 0x0045, 0x0065, 0x0045, 0x0065, 0x0045,
- 0x0065, 0x0049, 0x0069, 0x0049, 0x0069, 0x004F, 0x006F, 0x004F, 0x006F, 0x004F, 0x006F, 0x004F, 0x006F, 0x004F, 0x006F, 0x004F,
- 0x006F, 0x004F, 0x006F, 0x004F, 0x006F, 0x004F, 0x006F, 0x004F, 0x006F, 0x004F, 0x006F, 0x004F, 0x006F, 0x0055, 0x0075, 0x0055,
- 0x0075, 0x0055, 0x0075, 0x0055, 0x0075, 0x0055, 0x0075, 0x0055, 0x0075, 0x0055, 0x0075, 0x0059, 0x0079, 0x0059, 0x0079, 0x0059,
- 0x0079, 0x0059, 0x0079, 0x03B1, 0x03B1, 0x03B1, 0x03B1, 0x03B1, 0x03B1, 0x03B1, 0x03B1, 0x0391, 0x0391, 0x0391, 0x0391, 0x0391,
- 0x0391, 0x0391, 0x0391, 0x03B5, 0x03B5, 0x03B5, 0x03B5, 0x03B5, 0x03B5, 0x0395, 0x0395, 0x0395, 0x0395, 0x0395, 0x0395, 0x03B7,
- 0x03B7, 0x03B7, 0x03B7, 0x03B7, 0x03B7, 0x03B7, 0x03B7, 0x0397, 0x0397, 0x0397, 0x0397, 0x0397, 0x0397, 0x0397, 0x0397, 0x03B9,
- 0x03B9, 0x03B9, 0x03B9, 0x03B9, 0x03B9, 0x03B9, 0x03B9, 0x0399, 0x0399, 0x0399, 0x0399, 0x0399, 0x0399, 0x0399, 0x0399, 0x03BF,
- 0x03BF, 0x03BF, 0x03BF, 0x03BF, 0x03BF, 0x039F, 0x039F, 0x039F, 0x039F, 0x039F, 0x039F, 0x03C5, 0x03C5, 0x03C5, 0x03C5, 0x03C5,
- 0x03C5, 0x03C5, 0x03C5, 0x03A5, 0x03A5, 0x03A5, 0x03A5, 0x03C9, 0x03C9, 0x03C9, 0x03C9, 0x03C9, 0x03C9, 0x03C9, 0x03C9, 0x03A9,
- 0x03A9, 0x03A9, 0x03A9, 0x03A9, 0x03A9, 0x03A9, 0x03A9, 0x03B1, 0x03B1, 0x03B5, 0x03B5, 0x03B7, 0x03B7, 0x03B9, 0x03B9, 0x03BF,
- 0x03BF, 0x03C5, 0x03C5, 0x03C9, 0x03C9, 0x03B1, 0x03B1, 0x03B1, 0x03B1, 0x03B1, 0x03B1, 0x03B1, 0x03B1, 0x0391, 0x0391, 0x0391,
- 0x0391, 0x0391, 0x0391, 0x0391, 0x0391, 0x03B7, 0x03B7, 0x03B7, 0x03B7, 0x03B7, 0x03B7, 0x03B7, 0x03B7, 0x0397, 0x0397, 0x0397,
- 0x0397, 0x0397, 0x0397, 0x0397, 0x0397, 0x03C9, 0x03C9, 0x03C9, 0x03C9, 0x03C9, 0x03C9, 0x03C9, 0x03C9, 0x03A9, 0x03A9, 0x03A9,
- 0x03A9, 0x03A9, 0x03A9, 0x03A9, 0x03A9, 0x03B1, 0x03B1, 0x03B1, 0x03B1, 0x03B1, 0x03B1, 0x03B1, 0x0391, 0x0391, 0x0391, 0x0391,
- 0x0391, 0x03B7, 0x03B7, 0x03B7, 0x03B7, 0x03B7, 0x0395, 0x0395, 0x0397, 0x0397, 0x0397, 0x03B9, 0x03B9, 0x03B9, 0x03B9, 0x03B9,
- 0x03B9, 0x0399, 0x0399, 0x0399, 0x0399, 0x03C5, 0x03C5, 0x03C5, 0x03C5, 0x03C1, 0x03C1, 0x03C5, 0x03C5, 0x03A5, 0x03A5, 0x03A5,
- 0x03A5, 0x03A1, 0x03C9, 0x03C9, 0x03C9, 0x03C9, 0x03C9, 0x039F, 0x039F, 0x03A9, 0x03A9, 0x03A9, 0x00B4, 0x0314, 0x0020, 0x0020,
- 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x2010, 0x0333, 0x002E, 0x0020, 0x0020, 0x0030, 0x0069,
- 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x002B, 0x2212, 0x003D, 0x0028, 0x0029, 0x006E, 0x0030, 0x0031, 0x0032, 0x0033,
- 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x002B, 0x2212, 0x003D, 0x0028, 0x0029, 0x0061, 0x0065, 0x006F, 0x0078, 0x0259,
- 0x0043, 0x0190, 0x0067, 0x0048, 0x0048, 0x0048, 0x0068, 0x0068, 0x0049, 0x0049, 0x004C, 0x006C, 0x004E, 0x0050, 0x0051, 0x0052,
- 0x0052, 0x0052, 0x0052, 0x0052, 0x0056, 0x005A, 0x03A9, 0x01B1, 0x005A, 0x004B, 0x00C5, 0x0042, 0x0043, 0x0065, 0x0065, 0x0045,
- 0x0046, 0x004D, 0x006F, 0x05D0, 0x05D1, 0x05D2, 0x05D3, 0x0069, 0x03C0, 0x03B3, 0x0393, 0x03A0, 0x2211, 0x0044, 0x0064, 0x0065,
- 0x0069, 0x006A, 0x0049, 0x0056, 0x0058, 0x004C, 0x0043, 0x0044, 0x004D, 0x0069, 0x0076, 0x0078, 0x006C, 0x0063, 0x0064, 0x006D,
- 0x2203, 0x2208, 0x220B, 0x3008, 0x3009, 0x0062, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 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, 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, 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x0030, 0x0031, 0x0032,
- 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039,
- 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x004C, 0x006C, 0x004C, 0x0050, 0x0052, 0x0061, 0x0074,
- 0x0048, 0x0068, 0x004B, 0x006B, 0x005A, 0x007A, 0x0076, 0x0057, 0x0058, 0x0076, 0x006A, 0x0056, 0x2D61, 0x6BCD, 0x6C11, 0x864E,
- 0x897F, 0x89D2, 0x957F, 0x9752, 0x98DF, 0x9AA8, 0x9B3C, 0x9EA6, 0x9EC4, 0x9F9F, 0x4E00, 0x4E28, 0x4E36, 0x4E3F, 0x4E59, 0x4E85,
- 0x4E8C, 0x4EA0, 0x4EBA, 0x513F, 0x5165, 0x516B, 0x5182, 0x5196, 0x51AB, 0x51E0, 0x51F5, 0x5200, 0x529B, 0x52F9, 0x5315, 0x531A,
- 0x5338, 0x5341, 0x535C, 0x5369, 0x5382, 0x53B6, 0x53C8, 0x53E3, 0x56D7, 0x571F, 0x58EB, 0x5902, 0x590A, 0x5915, 0x5927, 0x5973,
- 0x5B50, 0x5B80, 0x5BF8, 0x5C0F, 0x5C22, 0x5C38, 0x5C6E, 0x5C71, 0x5DDB, 0x5DE5, 0x5DF1, 0x5DFE, 0x5E72, 0x5E7A, 0x5E7F, 0x5EF4,
- 0x5EFE, 0x5F0B, 0x5F13, 0x5F50, 0x5F61, 0x5F73, 0x5FC3, 0x6208, 0x6236, 0x624B, 0x652F, 0x6534, 0x6587, 0x6597, 0x65A4, 0x65B9,
- 0x65E0, 0x65E5, 0x66F0, 0x6708, 0x6728, 0x6B20, 0x6B62, 0x6B79, 0x6BB3, 0x6BCB, 0x6BD4, 0x6BDB, 0x6C0F, 0x6C14, 0x6C34, 0x706B,
- 0x722A, 0x7236, 0x723B, 0x723F, 0x7247, 0x7259, 0x725B, 0x72AC, 0x7384, 0x7389, 0x74DC, 0x74E6, 0x7518, 0x751F, 0x7528, 0x7530,
- 0x758B, 0x7592, 0x7676, 0x767D, 0x76AE, 0x76BF, 0x76EE, 0x77DB, 0x77E2, 0x77F3, 0x793A, 0x79B8, 0x79BE, 0x7A74, 0x7ACB, 0x7AF9,
- 0x7C73, 0x7CF8, 0x7F36, 0x7F51, 0x7F8A, 0x7FBD, 0x8001, 0x800C, 0x8012, 0x8033, 0x807F, 0x8089, 0x81E3, 0x81EA, 0x81F3, 0x81FC,
- 0x820C, 0x821B, 0x821F, 0x826E, 0x8272, 0x8278, 0x864D, 0x866B, 0x8840, 0x884C, 0x8863, 0x897E, 0x898B, 0x89D2, 0x8A00, 0x8C37,
- 0x8C46, 0x8C55, 0x8C78, 0x8C9D, 0x8D64, 0x8D70, 0x8DB3, 0x8EAB, 0x8ECA, 0x8F9B, 0x8FB0, 0x8FB5, 0x9091, 0x9149, 0x91C6, 0x91CC,
- 0x91D1, 0x9577, 0x9580, 0x961C, 0x96B6, 0x96B9, 0x96E8, 0x9751, 0x975E, 0x9762, 0x9769, 0x97CB, 0x97ED, 0x97F3, 0x9801, 0x98A8,
- 0x98DB, 0x98DF, 0x9996, 0x9999, 0x99AC, 0x9AA8, 0x9AD8, 0x9ADF, 0x9B25, 0x9B2F, 0x9B32, 0x9B3C, 0x9B5A, 0x9CE5, 0x9E75, 0x9E7F,
- 0x9EA5, 0x9EBB, 0x9EC3, 0x9ECD, 0x9ED1, 0x9EF9, 0x9EFD, 0x9F0E, 0x9F13, 0x9F20, 0x9F3B, 0x9F4A, 0x9F52, 0x9F8D, 0x9F9C, 0x9FA0,
- 0x0020, 0x3012, 0x5341, 0x5344, 0x5345, 0x1100, 0x1101, 0x11AA, 0x1102, 0x11AC, 0x11AD, 0x1103, 0x1104, 0x1105, 0x11B0, 0x11B1,
- 0x11B2, 0x11B3, 0x11B4, 0x11B5, 0x111A, 0x1106, 0x1107, 0x1108, 0x1121, 0x1109, 0x110A, 0x110B, 0x110C, 0x110D, 0x110E, 0x110F,
- 0x1110, 0x1111, 0x1112, 0x1161, 0x1162, 0x1163, 0x1164, 0x1165, 0x1166, 0x1167, 0x1168, 0x1169, 0x116A, 0x116B, 0x116C, 0x116D,
- 0x116E, 0x116F, 0x1170, 0x1171, 0x1172, 0x1173, 0x1174, 0x1175, 0x1160, 0x1114, 0x1115, 0x11C7, 0x11C8, 0x11CC, 0x11CE, 0x11D3,
- 0x11D7, 0x11D9, 0x111C, 0x11DD, 0x11DF, 0x111D, 0x111E, 0x1120, 0x1122, 0x1123, 0x1127, 0x1129, 0x112B, 0x112C, 0x112D, 0x112E,
- 0x112F, 0x1132, 0x1136, 0x1140, 0x1147, 0x114C, 0x11F1, 0x11F2, 0x1157, 0x1158, 0x1159, 0x1184, 0x1185, 0x1188, 0x1191, 0x1192,
- 0x1194, 0x119E, 0x11A1, 0x4E00, 0x4E8C, 0x4E09, 0x56DB, 0x4E0A, 0x4E2D, 0x4E0B, 0x7532, 0x4E59, 0x4E19, 0x4E01, 0x5929, 0x5730,
- 0x4EBA, 0x554F, 0x5E7C, 0x6587, 0x7B8F, 0x1100, 0x1102, 0x1103, 0x1105, 0x1106, 0x1107, 0x1109, 0x110B, 0x110C, 0x110E, 0x110F,
- 0x1110, 0x1111, 0x1112, 0x4E00, 0x4E8C, 0x4E09, 0x56DB, 0x4E94, 0x516D, 0x4E03, 0x516B, 0x4E5D, 0x5341, 0x6708, 0x706B, 0x6C34,
- 0x6728, 0x91D1, 0x571F, 0x65E5, 0x682A, 0x6709, 0x793E, 0x540D, 0x7279, 0x8CA1, 0x795D, 0x52B4, 0x79D8, 0x7537, 0x5973, 0x9069,
- 0x512A, 0x5370, 0x6CE8, 0x9805, 0x4F11, 0x5199, 0x6B63, 0x4E0A, 0x4E2D, 0x4E0B, 0x5DE6, 0x53F3, 0x533B, 0x5B97, 0x5B66, 0x76E3,
- 0x4F01, 0x8CC7, 0x5354, 0x591C, 0x30A2, 0x30A4, 0x30A6, 0x30A8, 0x30AA, 0x30AB, 0x30AD, 0x30AF, 0x30B1, 0x30B3, 0x30B5, 0x30B7,
- 0x30B9, 0x30BB, 0x30BD, 0x30BF, 0x30C1, 0x30C4, 0x30C6, 0x30C8, 0x30CA, 0x30CB, 0x30CC, 0x30CD, 0x30CE, 0x30CF, 0x30D2, 0x30D5,
- 0x30D8, 0x30DB, 0x30DE, 0x30DF, 0x30E0, 0x30E1, 0x30E2, 0x30E4, 0x30E6, 0x30E8, 0x30E9, 0x30EA, 0x30EB, 0x30EC, 0x30ED, 0x30EF,
- 0x30F0, 0x30F1, 0x30F2, 0x4E22, 0x5E76, 0x5E7A, 0x5E72, 0x4E71, 0x4E98, 0x4E9A, 0x4F2B, 0x5E03, 0x5360, 0x6765, 0x4FA3, 0x4FE3,
- 0x7CFB, 0x4FA0, 0x4F25, 0x4FE9, 0x4ED3, 0x4E2A, 0x4EEC, 0x4F26, 0x4F1F, 0x4FA7, 0x4FA6, 0x4F2A, 0x6770, 0x4F27, 0x4F1E, 0x5907,
- 0x5BB6, 0x4F63, 0x506C, 0x4F20, 0x4F1B, 0x503A, 0x4F24, 0x503E, 0x507B, 0x4EC5, 0x4F65, 0x4FA8, 0x4EC6, 0x4FA5, 0x507E, 0x96C7,
- 0x4EF7, 0x4EEA, 0x4FAC, 0x4EBF, 0x4FED, 0x50A7, 0x4FE6, 0x4FAA, 0x5C3D, 0x507F, 0x4F18, 0x50A8, 0x4FEA, 0x50A9, 0x50A5, 0x4FE8,
- 0x51F6, 0x5151, 0x513F, 0x5156, 0x5185, 0x4E24, 0x518C, 0x80C4, 0x5199, 0x5E42, 0x51BB, 0x51DB, 0x51EF, 0x522B, 0x5220, 0x522D,
- 0x5219, 0x5239, 0x521A, 0x5265, 0x5250, 0x5240, 0x521B, 0x522C, 0x5212, 0x5267, 0x5218, 0x523D, 0x523F, 0x5251, 0x5242, 0x52B2,
- 0x52A8, 0x52D6, 0x52A1, 0x80DC, 0x52B3, 0x52BF, 0x52A2, 0x52CB, 0x52B1, 0x529D, 0x5300, 0x5326, 0x6C47, 0x532E, 0x533A, 0x534F,
- 0x6064, 0x5374, 0x538D, 0x538C, 0x5389, 0x53A3, 0x53C2, 0x4E1B, 0x54A4, 0x5434, 0x5450, 0x5415, 0x5458, 0x55B1, 0x5457, 0x5FF5,
- 0x95EE, 0x54D1, 0x542F, 0x5524, 0x4E27, 0x4E54, 0x5355, 0x54DF, 0x545B, 0x556C, 0x551D, 0x5417, 0x545C, 0x5522, 0x54D4, 0x53F9,
- 0x55BD, 0x5455, 0x5567, 0x5C1D, 0x551B, 0x54D7, 0x5520, 0x5578, 0x53FD, 0x54D3, 0x5452, 0x5574, 0x6076, 0x5618, 0x549D, 0x54D2,
- 0x54DD, 0x54D5, 0x55F3, 0x54D9, 0x55B7, 0x5428, 0x549B, 0x5413, 0x54DC, 0x5C1D, 0x565C, 0x556E, 0x5456, 0x5499, 0x4EB8, 0x55BE,
- 0x4E25, 0x5624, 0x556D, 0x55EB, 0x56A3, 0x5181, 0x5453, 0x5570, 0x5631, 0x56F1, 0x56F5, 0x56FD, 0x56F4, 0x56ED, 0x5706, 0x56FE,
- 0x56E2, 0x57AD, 0x6267, 0x575A, 0x57A9, 0x57DA, 0x5C27, 0x62A5, 0x573A, 0x5757, 0x8314, 0x57B2, 0x57D8, 0x6D82, 0x51A2, 0x575E,
- 0x57D9, 0x5C18, 0x5811, 0x57AB, 0x5760, 0x5815, 0x575F, 0x57A6, 0x575B, 0x538B, 0x5792, 0x5739, 0x5786, 0x574F, 0x5785, 0x575C,
- 0x575D, 0x58EE, 0x58F6, 0x58F8, 0x5BFF, 0x591F, 0x68A6, 0x4F19, 0x5939, 0x5942, 0x5965, 0x5941, 0x593A, 0x594B, 0x59F9, 0x5986,
- 0x59D7, 0x5978, 0x5A31, 0x5A04, 0x5987, 0x5A05, 0x5A32, 0x59AB, 0x5AAA, 0x5988, 0x59AA, 0x59A9, 0x5A34, 0x5A73, 0x5A06, 0x5A75,
- 0x5A07, 0x5AF1, 0x5AD2, 0x5B37, 0x5AD4, 0x5A74, 0x5A76, 0x5A08, 0x5B59, 0x5B66, 0x5B6A, 0x5BAB, 0x5BDD, 0x5B9E, 0x5B81, 0x5BA1,
- 0x5199, 0x5BBD, 0x5BA0, 0x5B9D, 0x5C06, 0x4E13, 0x5BFB, 0x5BF9, 0x5BFC, 0x5C34, 0x5C4A, 0x5C38, 0x5C49, 0x5C61, 0x5C42, 0x5C5F,
- 0x5C66, 0x5C5E, 0x5188, 0x5C98, 0x5C9B, 0x5CE1, 0x5D03, 0x5C97, 0x4ED1, 0x5CE5, 0x5C9A, 0x5D5D, 0x5D2D, 0x5C96, 0x5D5A, 0x5D02,
- 0x5CE4, 0x5CE3, 0x5CC4, 0x5D04, 0x5C99, 0x5D58, 0x5CAD, 0x5C7F, 0x5CB3, 0x5CBF, 0x5CE6, 0x5DC5, 0x5DEF, 0x5E05, 0x5E08, 0x5E10,
- 0x5E26, 0x5E27, 0x5E0F, 0x5E3C, 0x5E3B, 0x5E1C, 0x5E01, 0x5E2E, 0x5E31, 0x5E72, 0x51E0, 0x5E93, 0x5395, 0x53A2, 0x53A6, 0x53A8,
- 0x53AE, 0x5E99, 0x5382, 0x5E91, 0x5E9F, 0x5E7F, 0x5EEA, 0x5E90, 0x5385, 0x5F11, 0x5F2A, 0x5F20, 0x5F3A, 0x5F39, 0x5F25, 0x5F2F,
- 0x5F66, 0x540E, 0x5F84, 0x4ECE, 0x5F95, 0x590D, 0x5F81, 0x5F7B, 0x6052, 0x803B, 0x60A6, 0x6005, 0x95F7, 0x6076, 0x607C, 0x607D,
- 0x607B, 0x7231, 0x60EC, 0x60AB, 0x6006, 0x607A, 0x5FFE, 0x6001, 0x6120, 0x60E8, 0x60ED, 0x6078, 0x60EF, 0x6004, 0x6002, 0x8651,
- 0x60AD, 0x5E86, 0x5FE7, 0x60EB, 0x601C, 0x51ED, 0x6126, 0x616D, 0x60EE, 0x6124, 0x60AF, 0x6003, 0x5BAA, 0x5FC6, 0x6073, 0x5E94,
- 0x603F, 0x61D4, 0x603C, 0x61D1, 0x6079, 0x60E9, 0x61D2, 0x6000, 0x60AC, 0x5FCF, 0x60E7, 0x6151, 0x604B, 0x6206, 0x620B, 0x6217,
- 0x622C, 0x6218, 0x620F, 0x6237, 0x629B, 0x631F, 0x820D, 0x626A, 0x5377, 0x626B, 0x62A1, 0x6323, 0x6302, 0x91C7, 0x62E3, 0x626C,
- 0x6362, 0x6325, 0x635F, 0x6447, 0x6363, 0x62A2, 0x63B4, 0x63BC, 0x6402, 0x631A, 0x62A0, 0x629F, 0x63BA, 0x635E, 0x6491, 0x6320,
- 0x6322, 0x63B8, 0x62E8, 0x629A, 0x6251, 0x63FF, 0x631E, 0x631D, 0x6361, 0x62E5, 0x63B3, 0x62E9, 0x51FB, 0x6321, 0x62C5, 0x636E,
- 0x6324, 0x62DF, 0x6448, 0x62E7, 0x6401, 0x63B7, 0x6269, 0x64B7, 0x6446, 0x64DE, 0x64B8, 0x6270, 0x6445, 0x64B5, 0x62E2, 0x62E6,
- 0x6484, 0x6400, 0x64BA, 0x643A, 0x6444, 0x6512, 0x631B, 0x644A, 0x6405, 0x63FD, 0x668B, 0x8D25, 0x53D9, 0x654C, 0x6570, 0x655B,
- 0x6BD9, 0x6593, 0x65A9, 0x65AD, 0x4E8E, 0x5347, 0x65F6, 0x664B, 0x663C, 0x6655, 0x6656, 0x65F8, 0x7545, 0x6682, 0x6635, 0x6654,
- 0x5386, 0x6619, 0x6653, 0x66A7, 0x65F7, 0x663D, 0x6652, 0x4E66, 0x4F1A, 0x80E7, 0x4E1C, 0x6805, 0x6746, 0x6800, 0x67A7, 0x6761,
- 0x67AD, 0x5F03, 0x67A8, 0x67A3, 0x680B, 0x6808, 0x6816, 0x6860, 0x6768, 0x67AB, 0x6862, 0x4E1A, 0x6781, 0x6769, 0x8363, 0x6864,
- 0x6784, 0x67AA, 0x6760, 0x68BF, 0x6920, 0x6901, 0x6868, 0x6869, 0x4E50, 0x679E, 0x697C, 0x6807, 0x67A2, 0x6837, 0x6734, 0x6811,
- 0x6866, 0x6861, 0x6865, 0x673A, 0x692D, 0x6A2A, 0x6AA9, 0x69DC, 0x67FD, 0x6863, 0x6867, 0x69DA, 0x68C0, 0x6A2F, 0x68BC, 0x53F0,
- 0x69DF, 0x67E0, 0x69DB, 0x82D8, 0x67DC, 0x6A79, 0x6988, 0x6809, 0x691F, 0x6A7C, 0x680E, 0x6A71, 0x69E0, 0x680C, 0x67A5, 0x6A65,
- 0x6987, 0x680A, 0x6989, 0x68C2, 0x6A31, 0x680F, 0x6743, 0x6924, 0x683E, 0x6984, 0x94A6, 0x6B27, 0x6B24, 0x6B22, 0x5C81, 0x5386,
- 0x5F52, 0x6B81, 0x6B8B, 0x6B92, 0x6B87, 0x6B9A, 0x6B93, 0x6BA1, 0x6B7C, 0x6740, 0x58F3, 0x6BC1, 0x6BB4, 0x6BF5, 0x6BE1, 0x6C07,
- 0x6C14, 0x6C22, 0x6C29, 0x6C32, 0x51FC, 0x51B3, 0x51B1, 0x6CA1, 0x51B5, 0x6CC4, 0x6C79, 0x6D43, 0x6CFE, 0x51C9, 0x51C4, 0x6CEA,
- 0x6E0C, 0x51C0, 0x6CA6, 0x6E0A, 0x6D9E, 0x6D45, 0x6DA3, 0x51CF, 0x6CA8, 0x6DA1, 0x6D4B, 0x6D51, 0x51D1, 0x6D48, 0x6D8C, 0x6D07,
- 0x6C64, 0x6CA9, 0x51C6, 0x6C9F, 0x6E29, 0x6DA2, 0x6E7F, 0x6CA7, 0x706D, 0x6DA4, 0x8365, 0x6CAA, 0x6EDE, 0x6E17, 0x6D52, 0x6D50,
- 0x6EDA, 0x6EE1, 0x6E14, 0x6E87, 0x6CA4, 0x6C49, 0x6D9F, 0x6E0D, 0x6DA8, 0x6E10, 0x6D46, 0x988D, 0x6CFC, 0x6D01, 0x6F5C, 0x6DA6,
- 0x6D54, 0x6E83, 0x6DA0, 0x6DA9, 0x6D47, 0x6D9D, 0x6C84, 0x6DA7, 0x6E11, 0x6CFD, 0x6EEA, 0x6CF6, 0x6D4D, 0x6D4A, 0x6D53, 0x6E7F,
- 0x6CDE, 0x6D4E, 0x6D9B, 0x6EE5, 0x6F4D, 0x6EE8, 0x6E85, 0x6CFA, 0x6EE4, 0x6EE2, 0x6E0E, 0x6CFB, 0x6D4F, 0x6FD2, 0x6CF8, 0x6CA5,
- 0x6F47, 0x6F46, 0x6F74, 0x6CF7, 0x6FD1, 0x6F4B, 0x6F9C, 0x6CA3, 0x6EE0, 0x6D12, 0x6EE9, 0x704F, 0x6E7E, 0x6EE6, 0x6EDF, 0x707E,
- 0x4E3A, 0x4E4C, 0x70C3, 0x65E0, 0x70BC, 0x709C, 0x70DF, 0x8315, 0x7115, 0x70E6, 0x7080, 0x8367, 0x709D, 0x70ED, 0x70BD, 0x70E8,
- 0x706F, 0x7096, 0x70E7, 0x70EB, 0x7116, 0x8425, 0x707F, 0x70DB, 0x70E9, 0x70EC, 0x7118, 0x70C1, 0x7089, 0x70C2, 0x4E89, 0x4E3A,
- 0x7237, 0x5C14, 0x5899, 0x724D, 0x7275, 0x8366, 0x7266, 0x728A, 0x727A, 0x72B6, 0x72ED, 0x72C8, 0x72F0, 0x72B9, 0x72F2, 0x72B8,
- 0x72F1, 0x72EE, 0x5956, 0x72EC, 0x72EF, 0x7303, 0x72DE, 0x83B7, 0x730E, 0x72B7, 0x517D, 0x736D, 0x732E, 0x7315, 0x7321, 0x73B0,
- 0x73D0, 0x73F2, 0x73AE, 0x739A, 0x7410, 0x7476, 0x83B9, 0x739B, 0x7405, 0x73B1, 0x740F, 0x740E, 0x7391, 0x7477, 0x73F0, 0x73AF,
- 0x7399, 0x73BA, 0x743C, 0x73D1, 0x748E, 0x74D2, 0x74EF, 0x74EE, 0x4EA7, 0x4EA7, 0x4EA9, 0x6BD5, 0x753B, 0x7572, 0x5F02, 0x5F53,
- 0x7574, 0x53E0, 0x75C9, 0x9178, 0x75F9, 0x75D6, 0x75AF, 0x75A1, 0x75EA, 0x7617, 0x75AE, 0x759F, 0x75AD, 0x7618, 0x7597, 0x75E8,
- 0x75EB, 0x7605, 0x75A0, 0x762A, 0x75D2, 0x7596, 0x75AC, 0x765E, 0x7663, 0x763F, 0x763E, 0x75C8, 0x762B, 0x766B, 0x53D1, 0x7691,
- 0x75B1, 0x76B2, 0x76B1, 0x676F, 0x76D7, 0x76CF, 0x5C3D, 0x76D1, 0x76D8, 0x5362, 0x8361, 0x7726, 0x4F17, 0x56F0, 0x7741, 0x7750,
- 0x772F, 0x7792, 0x4E86, 0x7786, 0x7751, 0x772C, 0x77A9, 0x77EB, 0x7845, 0x70AE, 0x7841, 0x7856, 0x7817, 0x781A, 0x7855, 0x7800,
- 0x786E, 0x7801, 0x7859, 0x7816, 0x789C, 0x789B, 0x77F6, 0x7857, 0x785A, 0x7840, 0x788D, 0x77FF, 0x783A, 0x783E, 0x77FE, 0x783B,
- 0x7984, 0x7978, 0x796F, 0x794E, 0x5FA1, 0x7985, 0x793C, 0x7977, 0x79C3, 0x7C7C, 0x7A0E, 0x79C6, 0x68F1, 0x79CD, 0x79F0, 0x7A23,
- 0x79EF, 0x9896, 0x79FE, 0x7A51, 0x79FD, 0x7A33, 0x7A9D, 0x6D3C, 0x7A77, 0x7A91, 0x7A8E, 0x7AAD, 0x7AA5, 0x7A9C, 0x7A8D, 0x7AA6,
- 0x7A83, 0x7ADE, 0x7B14, 0x7B0B, 0x7B15, 0x7B3A, 0x7B5D, 0x8282, 0x8303, 0x7B51, 0x7BA7, 0x7B7C, 0x7B03, 0x7B5B, 0x7B5A, 0x7BA6,
- 0x7BD3, 0x7BAA, 0x7B80, 0x7BD1, 0x7BAB, 0x6A90, 0x7B5C, 0x7B7E, 0x5E18, 0x7BEE, 0x7B79, 0x7B93, 0x7BEF, 0x7BA8, 0x7C41, 0x7B3C,
- 0x7B7E, 0x7B3E, 0x7BF1, 0x7BA9, 0x5401, 0x5986, 0x7CA4, 0x7CC1, 0x7CAA, 0x7CAE, 0x7CF5, 0x7C9D, 0x7C74, 0x7C9C, 0x7EA0, 0x7EAA,
- 0x7EA3, 0x7EA6, 0x7EA2, 0x7EA1, 0x7EA5, 0x7EA8, 0x7EAB, 0x7EB9, 0x7EB3, 0x7EBD, 0x7EBE, 0x7EAF, 0x7EB0, 0x7EB1, 0x7EB8, 0x7EA7,
- 0x7EB7, 0x7EAD, 0x7EB4, 0x7EBA, 0x624E, 0x624E, 0x7EC6, 0x7EC2, 0x7EC1, 0x7EC5, 0x7EBB, 0x7ECD, 0x7EC0, 0x7ECB, 0x7ED0, 0x7ECC,
- 0x7EC8, 0x5F26, 0x7EC4, 0x7ECA, 0x7ED7, 0x7ED3, 0x7EDD, 0x7EE6, 0x7ED4, 0x7EDE, 0x7EDC, 0x7EDA, 0x7ED9, 0x7ED2, 0x7ED6, 0x7EDF,
- 0x4E1D, 0x7EDB, 0x7EE2, 0x7ED1, 0x7EE1, 0x7EE0, 0x7EE8, 0x7EE5, 0x7ECF, 0x7EFC, 0x7F0D, 0x7EFF, 0x7EF8, 0x7EFB, 0x7EF6, 0x7EF4,
- 0x7EFE, 0x7EB2, 0x7F51, 0x7F00, 0x7EB6, 0x7EFA, 0x7EEE, 0x7EFD, 0x7EF0, 0x7EEB, 0x7EF5, 0x7EF2, 0x7F01, 0x7D27, 0x7EEF, 0x7EEA,
- 0x7F03, 0x7F04, 0x7F02, 0x7EBF, 0x7F09, 0x7F0E, 0x7F14, 0x7F17, 0x7F18, 0x7F0C, 0x7F16, 0x7F13, 0x7F05, 0x7EAC, 0x7F11, 0x7F08,
- 0x7EC3, 0x7F0F, 0x7F07, 0x81F4, 0x8426, 0x7F19, 0x7F22, 0x7F12, 0x7EC9, 0x7F23, 0x7F1E, 0x7F1A, 0x7F1C, 0x7F1F, 0x7F1B, 0x53BF,
- 0x7F1D, 0x7F29, 0x7EB5, 0x7F27, 0x7F26, 0x7D77, 0x7F15, 0x7F25, 0x603B, 0x7EE9, 0x7EF7, 0x7F2B, 0x7F2A, 0x7F2F, 0x7EC7, 0x7F2E,
- 0x7F2D, 0x7ED5, 0x7EE3, 0x7F0B, 0x7EF3, 0x7ED8, 0x7CFB, 0x8327, 0x7F33, 0x7F32, 0x7F34, 0x7ECE, 0x7EE7, 0x7F24, 0x7F31, 0x7F2C,
- 0x7EA9, 0x7EED, 0x7F20, 0x7F28, 0x7EA4, 0x7F35, 0x7F06, 0x94B5, 0x7F42, 0x7F5A, 0x9A82, 0x7F62, 0x7F57, 0x7F74, 0x7F81, 0x8288,
- 0x7F9F, 0x7FA1, 0x4E49, 0x81BB, 0x4E60, 0x7FC6, 0x7FDA, 0x7FD8, 0x7FD9, 0x8027, 0x5723, 0x95FB, 0x8054, 0x806A, 0x58F0, 0x8038,
- 0x8069, 0x8042, 0x804C, 0x804D, 0x542C, 0x804B, 0x8083, 0x80C1, 0x8109, 0x80EB, 0x8131, 0x80C0, 0x80BE, 0x80E8, 0x8136, 0x8111,
- 0x80BF, 0x811A, 0x80A0, 0x817D, 0x8158, 0x80A4, 0x80F6, 0x817B, 0x80C6, 0x810D, 0x8113, 0x8138, 0x8110, 0x8191, 0x814A, 0x80EA,
- 0x810F, 0x8114, 0x81DC, 0x5367, 0x4E34, 0x53F0, 0x4E0E, 0x5174, 0x4E3E, 0x65E7, 0x8231, 0x8223, 0x8230, 0x823B, 0x8270, 0x8273,
- 0x82C4, 0x520D, 0x82CE, 0x5179, 0x8346, 0x8C46, 0x5E84, 0x830E, 0x835A, 0x82CB, 0x534E, 0x70DF, 0x82CC, 0x83B1, 0x4E07, 0x83B4,
- 0x53F6, 0x836D, 0x7740, 0x82C7, 0x8364, 0x641C, 0x83B3, 0x8385, 0x82CD, 0x836A, 0x76D6, 0x83B2, 0x82C1, 0x83BC, 0x835C, 0x848C,
- 0x848B, 0x8471, 0x8311, 0x836B, 0x8368, 0x8487, 0x835E, 0x836C, 0x83B8, 0x835B, 0x8489, 0x829C, 0x8427, 0x84E3, 0x835F, 0x84DF,
- 0x8297, 0x59DC, 0x8537, 0x83B6, 0x8350, 0x8428, 0x8360, 0x501F, 0x84DD, 0x8369, 0x827A, 0x836F, 0x85AE, 0x82C8, 0x853C, 0x853A,
- 0x841A, 0x8572, 0x82A6, 0x82CF, 0x8574, 0x82F9, 0x8616, 0x85D3, 0x8539, 0x830F, 0x5170, 0x84E0, 0x841D, 0x5904, 0x865A, 0x864F,
- 0x53F7, 0x4E8F, 0x866C, 0x86F1, 0x8715, 0x86AC, 0x8680, 0x732C, 0x867E, 0x8671, 0x8717, 0x86F3, 0x8682, 0x8424, 0x877C, 0x8780,
- 0x86F0, 0x8748, 0x87A8, 0x866E, 0x8749, 0x86F2, 0x866B, 0x86CF, 0x8681, 0x8683, 0x8747, 0x867F, 0x874E, 0x86F4, 0x877E, 0x869D,
- 0x8721, 0x86CE, 0x87CF, 0x86CA, 0x8695, 0x86EE, 0x4F17, 0x672F, 0x536B, 0x51B2, 0x886E, 0x8885, 0x8865, 0x88C5, 0x91CC, 0x5236,
- 0x590D, 0x88C8, 0x8886, 0x88E4, 0x88E2, 0x7F21, 0x891B, 0x4EB5, 0x88E5, 0x8884, 0x88E3, 0x88C6, 0x8934, 0x889C, 0x886C, 0x88AD,
- 0x8955, 0x89C1, 0x89C4, 0x89C5, 0x89C6, 0x89C7, 0x89CB, 0x89CD, 0x89CE, 0x4EB2, 0x89CA, 0x89CF, 0x89D0, 0x89D1, 0x89C9, 0x89C8,
- 0x89CC, 0x89C2, 0x89DE, 0x89EF, 0x89E6, 0x8BA2, 0x8BA3, 0x8BA1, 0x8BAF, 0x8BA7, 0x8BA8, 0x8BA6, 0x8BAD, 0x8BAA, 0x8BAB, 0x8BAC,
- 0x8BB0, 0x8BB9, 0x8BB6, 0x8BBC, 0x8BC0, 0x8BB7, 0x8BBF, 0x8BBE, 0x8BB8, 0x8BC9, 0x8BC3, 0x8BCA, 0x8BC1, 0x8BC2, 0x8BCB, 0x8BB5,
- 0x8BC8, 0x8BD2, 0x8BCF, 0x8BC4, 0x8BCE, 0x8BC5, 0x8BCD, 0x548F, 0x8BE9, 0x8BE2, 0x8BE3, 0x8BD5, 0x8BD7, 0x8BE7, 0x8BDF, 0x8BE1,
- 0x8BE0, 0x8BD8, 0x8BDD, 0x8BE5, 0x8BE6, 0x8BDC, 0x8BD9, 0x8BD6, 0x8BD4, 0x8BDB, 0x8BD3, 0x5938, 0x5FD7, 0x8BA4, 0x8BF3, 0x8BF6,
- 0x8BDE, 0x8BF1, 0x8BEE, 0x8BED, 0x8BDA, 0x8BEB, 0x8BEC, 0x8BEF, 0x8BF0, 0x8BF5, 0x8BF2, 0x8BF4, 0x8C01, 0x8BFE, 0x8C07, 0x8BFD,
- 0x8C0A, 0x8C03, 0x8C04, 0x8C06, 0x8C08, 0x8BFF, 0x8BF7, 0x8BE4, 0x8BF9, 0x8BFC, 0x8C05, 0x8BBA, 0x8C02, 0x8C00, 0x8C0D, 0x8C1E,
- 0x8C1D, 0x8C25, 0x8BE8, 0x8C14, 0x8C1B, 0x8C10, 0x8C0F, 0x8C15, 0x8C18, 0x8BB3, 0x8C19, 0x8C0C, 0x8BBD, 0x8BF8, 0x8C1A, 0x8C16,
- 0x8BFA, 0x8C0B, 0x8C12, 0x8C13, 0x8A8A, 0x8BCC, 0x8C0E, 0x8C1C, 0x8C27, 0x8C11, 0x8C21, 0x8C24, 0x8C26, 0x8BB2, 0x8C22, 0x8C23,
- 0x8C1F, 0x8C2A, 0x8C2C, 0x8BB4, 0x8C28, 0x8C29, 0x8BC1, 0x8C32, 0x8BA5, 0x8C2E, 0x8BC6, 0x8C2F, 0x8C2D, 0x8C31, 0x8C35, 0x8BD1,
- 0x8BAE, 0x8C34, 0x62A4, 0x8BEA, 0x8A89, 0x8C2B, 0x8BFB, 0x53D8, 0x8A5F, 0x96E0, 0x8C17, 0x8BA9, 0x8C30, 0x8C36, 0x8D5E, 0x8C20,
- 0x8C33, 0x5C82, 0x7AD6, 0x4E30, 0x732A, 0x8C6E, 0x732B, 0x8D1D, 0x8D1E, 0x8D1F, 0x8D22, 0x8D21, 0x8D2B, 0x8D27, 0x8D29, 0x8D2A,
- 0x8D2F, 0x8D23, 0x8D2E, 0x8D33, 0x8D40, 0x8D30, 0x8D35, 0x8D2C, 0x4E70, 0x8D37, 0x8D36, 0x8D39, 0x8D34, 0x8D3B, 0x8D38, 0x8D3A,
- 0x8D32, 0x8D42, 0x8D41, 0x8D3F, 0x8D45, 0x8D44, 0x8D3E, 0x8D3C, 0x8D48, 0x8D4A, 0x5BBE, 0x8D47, 0x8D52, 0x8D49, 0x8D50, 0x8D4F,
- 0x8D54, 0x8D53, 0x8D24, 0x5356, 0x8D31, 0x8D4B, 0x8D55, 0x8D28, 0x8D26, 0x8D4C, 0x8D56, 0x8D57, 0x8D5A, 0x8D59, 0x8D2D, 0x8D5B,
- 0x8D5C, 0x8D3D, 0x8D58, 0x8D5F, 0x8D60, 0x8D5E, 0x8D61, 0x8D62, 0x8D46, 0x8D43, 0x8D51, 0x8D4E, 0x8D5D, 0x8D63, 0x8D6A, 0x8D76,
- 0x8D75, 0x8D8B, 0x8DB1, 0x8FF9, 0x8DF5, 0x8E0A, 0x8DC4, 0x8DF8, 0x8DD6, 0x8E52, 0x8DF7, 0x8DF6, 0x8DB8, 0x8E0C, 0x8DFB, 0x8DC3,
- 0x8E2F, 0x8DDE, 0x8E2C, 0x8E70, 0x8DF9, 0x8E51, 0x8E7F, 0x8E9C, 0x8E8F, 0x8EAF, 0x8F66, 0x8F67, 0x8F68, 0x519B, 0x8F69, 0x8F6B,
- 0x8F6D, 0x8F6F, 0x8F78, 0x8F71, 0x8F74, 0x8F75, 0x8F7A, 0x8F72, 0x8F76, 0x8F7C, 0x8F83, 0x8F82, 0x8F81, 0x8F80, 0x8F7D, 0x8F7E,
- 0x8F84, 0x8F85, 0x8F7B, 0x8F86, 0x8F8E, 0x8F89, 0x8F8B, 0x8F8D, 0x8F8A, 0x8F87, 0x8F88, 0x8F6E, 0x8F91, 0x8F8F, 0x8F93, 0x8F90,
- 0x8F97, 0x8206, 0x8F92, 0x6BC2, 0x8F96, 0x8F95, 0x8F98, 0x8F6C, 0x8F99, 0x8F7F, 0x8F9A, 0x8F70, 0x8F94, 0x8F79, 0x8F73, 0x529E,
- 0x8F9E, 0x8FAB, 0x8FA9, 0x519C, 0x8FD9, 0x8FDE, 0x5468, 0x8FDB, 0x6E38, 0x8FD0, 0x8FC7, 0x8FBE, 0x8FDD, 0x9065, 0x900A, 0x9012,
- 0x8FDC, 0x9002, 0x8FDF, 0x8FC1, 0x9009, 0x9057, 0x8FBD, 0x8FC8, 0x8FD8, 0x8FE9, 0x8FB9, 0x903B, 0x9026, 0x90CF, 0x90AE, 0x90D3,
- 0x4E61, 0x90B9, 0x90AC, 0x90E7, 0x9093, 0x90D1, 0x90BB, 0x90F8, 0x90BA, 0x90D0, 0x909D, 0x9142, 0x90E6, 0x814C, 0x4E11, 0x915D,
- 0x533B, 0x9171, 0x9166, 0x917F, 0x8845, 0x917E, 0x917D, 0x91CA, 0x9487, 0x948C, 0x948A, 0x9489, 0x948B, 0x9488, 0x9493, 0x9490,
- 0x948F, 0x9492, 0x948E, 0x9497, 0x948D, 0x9495, 0x94AF, 0x94AB, 0x9498, 0x94AD, 0x94A0, 0x949D, 0x94A4, 0x94A3, 0x949E, 0x94AE,
- 0x94A7, 0x9499, 0x949B, 0x94AA, 0x94CC, 0x94C8, 0x94B6, 0x94C3, 0x94B4, 0x94B9, 0x94CD, 0x94B0, 0x94B8, 0x94C0, 0x94BF, 0x94BE,
- 0x949C, 0x94CA, 0x94C9, 0x94C7, 0x94CB, 0x94C2, 0x94B3, 0x94C6, 0x94C5, 0x94BA, 0x94A9, 0x94B2, 0x94BC, 0x94BD, 0x94CF, 0x94F0,
- 0x94D2, 0x94EC, 0x94EA, 0x94F6, 0x94F3, 0x94DC, 0x94DA, 0x94E3, 0x94E8, 0x94E2, 0x94ED, 0x94EB, 0x94E6, 0x8854, 0x94D1, 0x94F7,
- 0x94F1, 0x94DF, 0x94F5, 0x94D5, 0x94EF, 0x94D0, 0x9510, 0x9500, 0x9508, 0x9511, 0x9509, 0x94DD, 0x9512, 0x950C, 0x94A1, 0x94E4,
- 0x94D7, 0x950B, 0x950A, 0x9513, 0x9504, 0x9503, 0x9514, 0x9507, 0x94D3, 0x94FA, 0x94D6, 0x9506, 0x9502, 0x952F, 0x94A2, 0x951E,
- 0x5F55, 0x9516, 0x9529, 0x94D4, 0x9525, 0x9515, 0x951F, 0x9524, 0x9531, 0x94EE, 0x951B, 0x952C, 0x952D, 0x951C, 0x94B1, 0x9526,
- 0x951A, 0x9520, 0x9521, 0x9522, 0x9519, 0x9530, 0x8868, 0x94FC, 0x9528, 0x9494, 0x9534, 0x94FE, 0x9505, 0x9540, 0x9537, 0x94E1,
- 0x9496, 0x953B, 0x953D, 0x9538, 0x9532, 0x9539, 0x953E, 0x952E, 0x9536, 0x9517, 0x953A, 0x9541, 0x9551, 0x9555, 0x9501, 0x9549,
- 0x9548, 0x9543, 0x94A8, 0x84E5, 0x954F, 0x94E0, 0x94E9, 0x953C, 0x9550, 0x9547, 0x9552, 0x954D, 0x9553, 0x955E, 0x955F, 0x94FE,
- 0x9546, 0x9559, 0x9560, 0x955D, 0x94FF, 0x9535, 0x9557, 0x9558, 0x955B, 0x94F2, 0x955C, 0x9556, 0x9542, 0x933E, 0x955A, 0x94E7,
- 0x956A, 0x9508, 0x94D9, 0x9563, 0x9566, 0x9561, 0x949F, 0x956B, 0x950F, 0x9544, 0x954C, 0x9570, 0x956F, 0x956D, 0x94C1, 0x956E,
- 0x94CE, 0x94DB, 0x9571, 0x94F8, 0x956C, 0x9554, 0x9274, 0x9527, 0x9574, 0x94C4, 0x9573, 0x9567, 0x94A5, 0x9575, 0x9576, 0x954A,
- 0x9569, 0x9523, 0x94BB, 0x92AE, 0x51FF, 0x957F, 0x95E8, 0x95E9, 0x95EA, 0x95EB, 0x95EC, 0x95ED, 0x5F00, 0x95F6, 0x95F3, 0x95F0,
- 0x95F2, 0x95F4, 0x95F5, 0x95F8, 0x9602, 0x9601, 0x9600, 0x95FA, 0x95FD, 0x9603, 0x9606, 0x95FE, 0x9605, 0x960A, 0x9609, 0x960E,
- 0x960F, 0x960D, 0x9608, 0x960C, 0x9612, 0x677F, 0x6697, 0x95F1, 0x9614, 0x9615, 0x9611, 0x9617, 0x9618, 0x95FF, 0x9616, 0x9619,
- 0x95EF, 0x5173, 0x961A, 0x9613, 0x9610, 0x8F9F, 0x961B, 0x95FC, 0x9649, 0x9655, 0x9635, 0x9634, 0x9648, 0x9646, 0x9633, 0x9667,
- 0x961F, 0x9636, 0x9668, 0x9645, 0x968F, 0x9669, 0x9690, 0x9647, 0x96B6, 0x53EA, 0x96BD, 0x867D, 0x53CC, 0x96CF, 0x6742, 0x9E21,
- 0x79BB, 0x96BE, 0x4E91, 0x7535, 0x9721, 0x96FE, 0x9701, 0x96F3, 0x972D, 0x53C7, 0x7075, 0x53C6, 0x9753, 0x9759, 0x817C, 0x9765,
- 0x9F17, 0x5DE9, 0x979F, 0x7F30, 0x9791, 0x97AF, 0x97E6, 0x97E7, 0x97E9, 0x97EA, 0x97EC, 0x97EB, 0x97F5, 0x54CD, 0x9875, 0x9876,
- 0x9877, 0x9879, 0x987A, 0x9878, 0x987B, 0x987C, 0x9882, 0x9880, 0x9883, 0x9884, 0x987D, 0x9881, 0x987F, 0x9887, 0x9886, 0x988C,
- 0x9889, 0x9890, 0x988F, 0x5934, 0x988A, 0x988B, 0x9894, 0x9888, 0x9893, 0x9891, 0x9897, 0x9898, 0x989D, 0x989A, 0x989C, 0x9899,
- 0x989B, 0x613F, 0x98A1, 0x98A0, 0x7C7B, 0x989F, 0x98A2, 0x987E, 0x98A4, 0x98A5, 0x663E, 0x98A6, 0x9885, 0x989E, 0x98A7, 0x98CE,
- 0x98D0, 0x98D1, 0x98D2, 0x53F0, 0x98D3, 0x98D4, 0x98CF, 0x98D6, 0x98D5, 0x98D7, 0x98D8, 0x98D9, 0x98DE, 0x9965, 0x9964, 0x9966,
- 0x9968, 0x996A, 0x996B, 0x996C, 0x996D, 0x996E, 0x9974, 0x9972, 0x9971, 0x9970, 0x9973, 0x997A, 0x9978, 0x997C, 0x9977, 0x517B,
- 0x9975, 0x9979, 0x997D, 0x9981, 0x997F, 0x997E, 0x4F59, 0x80B4, 0x9984, 0x9983, 0x996F, 0x9985, 0x9986, 0x7CC7, 0x9967, 0x5582,
- 0x9989, 0x998E, 0x9969, 0x998F, 0x998A, 0x998C, 0x998D, 0x9992, 0x9990, 0x9991, 0x9988, 0x9994, 0x9976, 0x98E8, 0x990D, 0x998B,
- 0x9A6C, 0x9A6D, 0x51AF, 0x9A6E, 0x9A70, 0x9A6F, 0x9A73, 0x9A7B, 0x9A7D, 0x9A79, 0x9A75, 0x9A7E, 0x9A80, 0x9A78, 0x9A76, 0x9A7C,
- 0x9A77, 0x9A88, 0x9A87, 0x9A83, 0x9A86, 0x9A8E, 0x9A8F, 0x9A8B, 0x9A8D, 0x9A93, 0x9A92, 0x9A91, 0x9A90, 0x9A9B, 0x9A97, 0x9A99,
- 0x9A9E, 0x9A98, 0x9A9D, 0x817E, 0x9A7A, 0x9A9A, 0x9A9F, 0x9AA1, 0x84E6, 0x9A9C, 0x9A96, 0x9AA0, 0x9AA2, 0x9A71, 0x9A85, 0x9A95,
- 0x9A81, 0x9A84, 0x9A8C, 0x60CA, 0x9A7F, 0x9AA4, 0x9A74, 0x9AA7, 0x9AA5, 0x9AA6, 0x9A8A, 0x80AE, 0x9AC5, 0x810F, 0x4F53, 0x9ACC,
- 0x9ACB, 0x53D1, 0x677E, 0x80E1, 0x9B13, 0x6597, 0x95F9, 0x960B, 0x9604, 0x90C1, 0x9B49, 0x9B47, 0x9C7C, 0x9C80, 0x9C81, 0x9C82,
- 0x9C7F, 0x9C85, 0x9C86, 0x9C8F, 0x9C87, 0x9C90, 0x9C8D, 0x9C8B, 0x9C8A, 0x9C92, 0x9C95, 0x9C96, 0x9C94, 0x9C9B, 0x9C91, 0x9C9C,
- 0x9CA7, 0x9CA0, 0x9CA9, 0x9CA4, 0x9CA8, 0x9CBB, 0x9CAF, 0x9CAD, 0x9C9E, 0x9CB7, 0x9CB4, 0x9CB1, 0x9CB5, 0x9CB2, 0x9CB3, 0x9CB8,
- 0x9CAE, 0x9CB0, 0x9CB6, 0x9CAB, 0x9CCA, 0x9C97, 0x9CBD, 0x9CC7, 0x9CC5, 0x9CC6, 0x9CC3, 0x9CD2, 0x9CD1, 0x9CA5, 0x9CCF, 0x9CCE,
- 0x9CD0, 0x9CCD, 0x9CC1, 0x9CA2, 0x9CCC, 0x9CA6, 0x9CA3, 0x9CB9, 0x9CD7, 0x9CD4, 0x9CC9, 0x9CD5, 0x9CD6, 0x9CDF, 0x9CDD, 0x9CDC,
- 0x9CDE, 0x9C9F, 0x9CBC, 0x9C8E, 0x9C99, 0x9CE3, 0x9CE2, 0x9C9A, 0x9CC4, 0x9C88, 0x9CA1, 0x9E1F, 0x51EB, 0x9E20, 0x9E24, 0x51E4,
- 0x9E23, 0x9E22, 0x9E29, 0x9E28, 0x9E26, 0x9E30, 0x9E35, 0x9E33, 0x9E32, 0x9E2E, 0x9E31, 0x9E2A, 0x9E2F, 0x9E2D, 0x9E38, 0x9E39,
- 0x9E3B, 0x9E3F, 0x9E3D, 0x9E3A, 0x9E43, 0x9E46, 0x9E41, 0x9E48, 0x9E45, 0x9E44, 0x9E49, 0x9E4C, 0x9E4F, 0x9E4E, 0x9E4A, 0x9E53,
- 0x9E2B, 0x9E51, 0x9E4B, 0x9E59, 0x9E55, 0x9E57, 0x9E56, 0x9E4D, 0x9E5B, 0x9E5C, 0x83BA, 0x9E5F, 0x9E64, 0x9E60, 0x9E61, 0x9E58,
- 0x9E63, 0x9E5A, 0x9E62, 0x9E5E, 0x9E67, 0x9E65, 0x9E25, 0x9E37, 0x9E68, 0x9E36, 0x9E6A, 0x9E54, 0x9E69, 0x9E6B, 0x9E47, 0x9E6C,
- 0x9E70, 0x9E6D, 0x9E6F, 0x9E2C, 0x9E74, 0x9E66, 0x9E73, 0x9E42, 0x9E3E, 0x5364, 0x9E7E, 0x7877, 0x76D0, 0x4E3D, 0x9EA6, 0x9EB8,
- 0x9EB9, 0x9762, 0x4E48, 0x9EC4, 0x9EC9, 0x70B9, 0x515A, 0x9709, 0x9EE1, 0x9EE9, 0x9EFE, 0x9F0B, 0x9F0D, 0x9F39, 0x9F50, 0x658B,
- 0x8D4D, 0x9F51, 0x9F7F, 0x9F80, 0x9F81, 0x9F85, 0x9F87, 0x9F83, 0x9F86, 0x9F84, 0x9F88, 0x9F8A, 0x9F89, 0x9F8B, 0x9F8C, 0x9F99,
- 0x5390, 0x5E9E, 0x9F9A, 0x9F9B, 0x9F9F, 0xA76F, 0x8C48, 0x66F4, 0x8ECA, 0x8CC8, 0x6ED1, 0x4E32, 0x53E5, 0x9F9C, 0x9F9C, 0x5951,
- 0x91D1, 0x5587, 0x5948, 0x61F6, 0x7669, 0x7F85, 0x863F, 0x87BA, 0x88F8, 0x908F, 0x6A02, 0x6D1B, 0x70D9, 0x73DE, 0x843D, 0x916A,
- 0x99F1, 0x4E82, 0x5375, 0x6B04, 0x721B, 0x862D, 0x9E1E, 0x5D50, 0x6FEB, 0x85CD, 0x8964, 0x62C9, 0x81D8, 0x881F, 0x5ECA, 0x6717,
- 0x6D6A, 0x72FC, 0x90CE, 0x4F86, 0x51B7, 0x52DE, 0x64C4, 0x6AD3, 0x7210, 0x76E7, 0x8001, 0x8606, 0x865C, 0x8DEF, 0x9732, 0x9B6F,
- 0x9DFA, 0x788C, 0x797F, 0x7DA0, 0x83C9, 0x9304, 0x9E7F, 0x8AD6, 0x58DF, 0x5F04, 0x7C60, 0x807E, 0x7262, 0x78CA, 0x8CC2, 0x96F7,
- 0x58D8, 0x5C62, 0x6A13, 0x6DDA, 0x6F0F, 0x7D2F, 0x7E37, 0x964B, 0x52D2, 0x808B, 0x51DC, 0x51CC, 0x7A1C, 0x7DBE, 0x83F1, 0x9675,
- 0x8B80, 0x62CF, 0x6A02, 0x8AFE, 0x4E39, 0x5BE7, 0x6012, 0x7387, 0x7570, 0x5317, 0x78FB, 0x4FBF, 0x5FA9, 0x4E0D, 0x6CCC, 0x6578,
- 0x7D22, 0x53C3, 0x585E, 0x7701, 0x8449, 0x8AAA, 0x6BBA, 0x8FB0, 0x6C88, 0x62FE, 0x82E5, 0x63A0, 0x7565, 0x4EAE, 0x5169, 0x51C9,
- 0x6881, 0x7CE7, 0x826F, 0x8AD2, 0x91CF, 0x52F5, 0x5442, 0x5973, 0x5EEC, 0x65C5, 0x6FFE, 0x792A, 0x95AD, 0x9A6A, 0x9E97, 0x9ECE,
- 0x529B, 0x66C6, 0x6B77, 0x8F62, 0x5E74, 0x6190, 0x6200, 0x649A, 0x6F23, 0x7149, 0x7489, 0x79CA, 0x7DF4, 0x806F, 0x8F26, 0x84EE,
- 0x9023, 0x934A, 0x5217, 0x52A3, 0x54BD, 0x70C8, 0x88C2, 0x8AAA, 0x5EC9, 0x5FF5, 0x637B, 0x6BAE, 0x7C3E, 0x7375, 0x4EE4, 0x56F9,
- 0x5BE7, 0x5DBA, 0x601C, 0x73B2, 0x7469, 0x7F9A, 0x8046, 0x9234, 0x96F6, 0x9748, 0x9818, 0x4F8B, 0x79AE, 0x91B4, 0x96B8, 0x60E1,
- 0x4E86, 0x50DA, 0x5BEE, 0x5C3F, 0x6599, 0x6A02, 0x71CE, 0x7642, 0x84FC, 0x907C, 0x9F8D, 0x6688, 0x962E, 0x5289, 0x677B, 0x67F3,
- 0x6D41, 0x6E9C, 0x7409, 0x7559, 0x786B, 0x7D10, 0x985E, 0x516D, 0x622E, 0x9678, 0x502B, 0x5D19, 0x6DEA, 0x8F2A, 0x5F8B, 0x6144,
- 0x6817, 0x7387, 0x9686, 0x5229, 0x540F, 0x5C65, 0x6613, 0x674E, 0x68A8, 0x6CE5, 0x7406, 0x75E2, 0x7F79, 0x88CF, 0x88E1, 0x91CC,
- 0x96E2, 0x533F, 0x6EBA, 0x541D, 0x71D0, 0x7498, 0x85FA, 0x96A3, 0x9C57, 0x9E9F, 0x6797, 0x6DCB, 0x81E8, 0x7ACB, 0x7B20, 0x7C92,
- 0x72C0, 0x7099, 0x8B58, 0x4EC0, 0x8336, 0x523A, 0x5207, 0x5EA6, 0x62D3, 0x7CD6, 0x5B85, 0x6D1E, 0x66B4, 0x8F3B, 0x884C, 0x964D,
- 0x898B, 0x5ED3, 0x5140, 0x55C0, 0x585A, 0x6674, 0x51DE, 0x732A, 0x76CA, 0x793C, 0x795E, 0x7965, 0x798F, 0x9756, 0x7CBE, 0x7FBD,
- 0x8612, 0x8AF8, 0x9038, 0x90FD, 0x98EF, 0x98FC, 0x9928, 0x9DB4, 0x4FAE, 0x50E7, 0x514D, 0x52C9, 0x52E4, 0x5351, 0x559D, 0x5606,
- 0x5668, 0x5840, 0x58A8, 0x5C64, 0x5C6E, 0x6094, 0x6168, 0x618E, 0x61F2, 0x654F, 0x65E2, 0x6691, 0x6885, 0x6D77, 0x6E1A, 0x6F22,
- 0x716E, 0x722B, 0x7422, 0x7891, 0x793E, 0x7949, 0x7948, 0x7950, 0x7956, 0x795D, 0x798D, 0x798E, 0x7A40, 0x7A81, 0x7BC0, 0x7DF4,
- 0x7E09, 0x7E41, 0x7F72, 0x8005, 0x81ED, 0x8279, 0x8279, 0x8457, 0x8910, 0x8996, 0x8B01, 0x8B39, 0x8CD3, 0x8D08, 0x8FB6, 0x9038,
- 0x96E3, 0x97FF, 0x983B, 0x6075, 0x8218, 0x4E26, 0x51B5, 0x5168, 0x4F80, 0x5145, 0x5180, 0x52C7, 0x52FA, 0x559D, 0x5555, 0x5599,
- 0x55E2, 0x585A, 0x58B3, 0x5944, 0x5954, 0x5A62, 0x5B28, 0x5ED2, 0x5ED9, 0x5F69, 0x5FAD, 0x60D8, 0x614E, 0x6108, 0x618E, 0x6160,
- 0x61F2, 0x6234, 0x63C4, 0x641C, 0x6452, 0x6556, 0x6674, 0x6717, 0x671B, 0x6756, 0x6B79, 0x6BBA, 0x6D41, 0x6EDB, 0x6ECB, 0x6F22,
- 0x701E, 0x716E, 0x77A7, 0x7235, 0x72AF, 0x732A, 0x7471, 0x7506, 0x753B, 0x761D, 0x761F, 0x76CA, 0x76DB, 0x76F4, 0x774A, 0x7740,
- 0x78CC, 0x7AB1, 0x7BC0, 0x7C7B, 0x7D5B, 0x7DF4, 0x7F3E, 0x8005, 0x8352, 0x83EF, 0x8779, 0x8941, 0x8986, 0x8996, 0x8ABF, 0x8AF8,
- 0x8ACB, 0x8B01, 0x8AFE, 0x8AED, 0x8B39, 0x8B8A, 0x8D08, 0x8F38, 0x9072, 0x9199, 0x9276, 0x967C, 0x96E3, 0x9756, 0x97DB, 0x97FF,
- 0x980B, 0x983B, 0x9B12, 0x9F9C, 0x3B9D, 0x4018, 0x4039, 0x9F43, 0x9F8E, 0x05E2, 0x05D0, 0x05D3, 0x05D4, 0x05DB, 0x05DC, 0x05DD,
- 0x05E8, 0x05EA, 0x002B, 0x0671, 0x0671, 0x067B, 0x067B, 0x067B, 0x067B, 0x067E, 0x067E, 0x067E, 0x067E, 0x0680, 0x0680, 0x0680,
- 0x0680, 0x067A, 0x067A, 0x067A, 0x067A, 0x067F, 0x067F, 0x067F, 0x067F, 0x0679, 0x0679, 0x0679, 0x0679, 0x06A4, 0x06A4, 0x06A4,
- 0x06A4, 0x06A6, 0x06A6, 0x06A6, 0x06A6, 0x0684, 0x0684, 0x0684, 0x0684, 0x0683, 0x0683, 0x0683, 0x0683, 0x0686, 0x0686, 0x0686,
- 0x0686, 0x0687, 0x0687, 0x0687, 0x0687, 0x068D, 0x068D, 0x068C, 0x068C, 0x068E, 0x068E, 0x0688, 0x0688, 0x0698, 0x0698, 0x0691,
- 0x0691, 0x06A9, 0x06A9, 0x06A9, 0x06A9, 0x06AF, 0x06AF, 0x06AF, 0x06AF, 0x06B3, 0x06B3, 0x06B3, 0x06B3, 0x06B1, 0x06B1, 0x06B1,
- 0x06B1, 0x06BA, 0x06BA, 0x06BB, 0x06BB, 0x06BB, 0x06BB, 0x06C0, 0x06C0, 0x06C1, 0x06C1, 0x06C1, 0x06C1, 0x06BE, 0x06BE, 0x06BE,
- 0x06BE, 0x06D2, 0x06D2, 0x06D3, 0x06D3, 0x06AD, 0x06AD, 0x06AD, 0x06AD, 0x06C7, 0x06C7, 0x06C6, 0x06C6, 0x06C8, 0x06C8, 0x0677,
- 0x06CB, 0x06CB, 0x06C5, 0x06C5, 0x06C9, 0x06C9, 0x06D0, 0x06D0, 0x06D0, 0x06D0, 0x0649, 0x0649, 0x06CC, 0x06CC, 0x06CC, 0x06CC,
- 0x002C, 0x3001, 0x3002, 0x003A, 0x003B, 0x0021, 0x003F, 0x3016, 0x3017, 0x2026, 0x2025, 0x2014, 0x2013, 0x005F, 0x005F, 0x0028,
- 0x0029, 0x007B, 0x007D, 0x3014, 0x3015, 0x3010, 0x3011, 0x300A, 0x300B, 0x3008, 0x3009, 0x300C, 0x300D, 0x300E, 0x300F, 0x005B,
- 0x005D, 0x203E, 0x203E, 0x203E, 0x203E, 0x005F, 0x005F, 0x005F, 0x002C, 0x3001, 0x002E, 0x003B, 0x003A, 0x003F, 0x0021, 0x2014,
- 0x0028, 0x0029, 0x007B, 0x007D, 0x3014, 0x3015, 0x0023, 0x0026, 0x002A, 0x002B, 0x002D, 0x003C, 0x003E, 0x003D, 0x005C, 0x0024,
- 0x0025, 0x0040, 0x064B, 0x064C, 0x064D, 0x064E, 0x064F, 0x0650, 0x0651, 0x0652, 0x0621, 0x0622, 0x0622, 0x0623, 0x0623, 0x0624,
- 0x0624, 0x0625, 0x0625, 0x0626, 0x0626, 0x0626, 0x0626, 0x0627, 0x0627, 0x0628, 0x0628, 0x0628, 0x0628, 0x0629, 0x0629, 0x062A,
- 0x062A, 0x062A, 0x062A, 0x062B, 0x062B, 0x062B, 0x062B, 0x062C, 0x062C, 0x062C, 0x062C, 0x062D, 0x062D, 0x062D, 0x062D, 0x062E,
- 0x062E, 0x062E, 0x062E, 0x062F, 0x062F, 0x0630, 0x0630, 0x0631, 0x0631, 0x0632, 0x0632, 0x0633, 0x0633, 0x0633, 0x0633, 0x0634,
- 0x0634, 0x0634, 0x0634, 0x0635, 0x0635, 0x0635, 0x0635, 0x0636, 0x0636, 0x0636, 0x0636, 0x0637, 0x0637, 0x0637, 0x0637, 0x0638,
- 0x0638, 0x0638, 0x0638, 0x0639, 0x0639, 0x0639, 0x0639, 0x063A, 0x063A, 0x063A, 0x063A, 0x0641, 0x0641, 0x0641, 0x0641, 0x0642,
- 0x0642, 0x0642, 0x0642, 0x0643, 0x0643, 0x0643, 0x0643, 0x0644, 0x0644, 0x0644, 0x0644, 0x0645, 0x0645, 0x0645, 0x0645, 0x0646,
- 0x0646, 0x0646, 0x0646, 0x0647, 0x0647, 0x0647, 0x0647, 0x0648, 0x0648, 0x0649, 0x0649, 0x064A, 0x064A, 0x064A, 0x064A, 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, 0x2985, 0x2986, 0x3002,
- 0x300C, 0x300D, 0x3001, 0x30FB, 0x30F2, 0x30A1, 0x30A3, 0x30A5, 0x30A7, 0x30A9, 0x30E3, 0x30E5, 0x30E7, 0x30C3, 0x30FC, 0x30A2,
- 0x30A4, 0x30A6, 0x30A8, 0x30AA, 0x30AB, 0x30AD, 0x30AF, 0x30B1, 0x30B3, 0x30B5, 0x30B7, 0x30B9, 0x30BB, 0x30BD, 0x30BF, 0x30C1,
- 0x30C4, 0x30C6, 0x30C8, 0x30CA, 0x30CB, 0x30CC, 0x30CD, 0x30CE, 0x30CF, 0x30D2, 0x30D5, 0x30D8, 0x30DB, 0x30DE, 0x30DF, 0x30E0,
- 0x30E1, 0x30E2, 0x30E4, 0x30E6, 0x30E8, 0x30E9, 0x30EA, 0x30EB, 0x30EC, 0x30ED, 0x30EF, 0x30F3, 0x3099, 0x309A, 0x3164, 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, 0x00A2, 0x00A3, 0x00AC, 0x00AF, 0x00A6, 0x00A5, 0x20A9, 0x2502, 0x2190, 0x2191, 0x2192, 0x2193, 0x25A0, 0x25CB
-};
+ 0x0066, 0x0053, 0x0053, 0x0059, 0x0020, 0x0308, 0x0061, 0x0052, 0x0304,
+ 0x0032, 0x0033, 0x0301, 0x03BC, 0x0327, 0x0031, 0x006F, 0x0041, 0x0041,
+ 0x0041, 0x0041, 0x0041, 0x0041, 0x0043, 0x0045, 0x0045, 0x0045, 0x0045,
+ 0x0049, 0x0049, 0x0049, 0x0049, 0x0044, 0x004E, 0x004F, 0x004F, 0x004F,
+ 0x004F, 0x004F, 0x004F, 0x0055, 0x0055, 0x0055, 0x0055, 0x0059, 0x0061,
+ 0x0061, 0x0061, 0x0061, 0x0061, 0x0061, 0x0063, 0x0065, 0x0065, 0x0065,
+ 0x0065, 0x0069, 0x0069, 0x0069, 0x0069, 0x006E, 0x006F, 0x006F, 0x006F,
+ 0x006F, 0x006F, 0x006F, 0x0075, 0x0075, 0x0075, 0x0075, 0x0079, 0x0079,
+ 0x0041, 0x0061, 0x0041, 0x0061, 0x0041, 0x0061, 0x0043, 0x0063, 0x0043,
+ 0x0063, 0x0043, 0x0063, 0x0043, 0x0063, 0x0044, 0x0064, 0x0044, 0x0064,
+ 0x0045, 0x0065, 0x0045, 0x0065, 0x0045, 0x0065, 0x0045, 0x0065, 0x0045,
+ 0x0065, 0x0047, 0x0067, 0x0047, 0x0067, 0x0047, 0x0067, 0x0047, 0x0067,
+ 0x0048, 0x0068, 0x0048, 0x0068, 0x0049, 0x0069, 0x0049, 0x0069, 0x0049,
+ 0x0069, 0x0049, 0x0069, 0x0049, 0x004A, 0x006A, 0x004B, 0x006B, 0x004B,
+ 0x004C, 0x006C, 0x004C, 0x006C, 0x004C, 0x006C, 0x004C, 0x006C, 0x004C,
+ 0x006C, 0x004E, 0x006E, 0x004E, 0x006E, 0x004E, 0x006E, 0x006E, 0x004F,
+ 0x006F, 0x004F, 0x006F, 0x004F, 0x006F, 0x0052, 0x0072, 0x0052, 0x0072,
+ 0x0052, 0x0072, 0x0053, 0x0073, 0x0053, 0x0073, 0x0053, 0x0073, 0x0053,
+ 0x0073, 0x0054, 0x0074, 0x0054, 0x0074, 0x0054, 0x0074, 0x0055, 0x0075,
+ 0x0055, 0x0075, 0x0055, 0x0075, 0x0055, 0x0075, 0x0055, 0x0075, 0x0055,
+ 0x0075, 0x0057, 0x0077, 0x0059, 0x0079, 0x0059, 0x005A, 0x007A, 0x005A,
+ 0x007A, 0x005A, 0x007A, 0x0073, 0x0062, 0x0042, 0x0042, 0x0062, 0x0043,
+ 0x0063, 0x0044, 0x0044, 0x0044, 0x0064, 0x0045, 0x0045, 0x0046, 0x0066,
+ 0x0047, 0x0049, 0x004B, 0x006B, 0x006C, 0x004D, 0x004E, 0x006E, 0x004F,
+ 0x004F, 0x006F, 0x0050, 0x0070, 0x0283, 0x0074, 0x0054, 0x0074, 0x0054,
+ 0x0055, 0x0075, 0x0056, 0x0059, 0x0079, 0x005A, 0x007A, 0x01B7, 0x0041,
+ 0x0061, 0x0049, 0x0069, 0x004F, 0x006F, 0x0055, 0x0075, 0x00DC, 0x00FC,
+ 0x00DC, 0x00FC, 0x00DC, 0x00FC, 0x00DC, 0x00FC, 0x0065, 0x0041, 0x0061,
+ 0x0041, 0x0061, 0x00C6, 0x00E6, 0x0047, 0x0067, 0x0047, 0x0067, 0x004B,
+ 0x006B, 0x004F, 0x006F, 0x01EA, 0x01EB, 0x01B7, 0x0292, 0x006A, 0x0047,
+ 0x0067, 0x004E, 0x006E, 0x0041, 0x0061, 0x00C6, 0x00E6, 0x00D8, 0x00F8,
+ 0x0041, 0x0061, 0x0041, 0x0061, 0x0045, 0x0065, 0x0045, 0x0065, 0x0049,
+ 0x0069, 0x0049, 0x0069, 0x004F, 0x006F, 0x004F, 0x006F, 0x0052, 0x0072,
+ 0x0052, 0x0072, 0x0055, 0x0075, 0x0055, 0x0075, 0x0053, 0x0073, 0x0054,
+ 0x0074, 0x0048, 0x0068, 0x004E, 0x0064, 0x005A, 0x007A, 0x0041, 0x0061,
+ 0x0045, 0x0065, 0x00D6, 0x00F6, 0x00D5, 0x00F5, 0x004F, 0x006F, 0x022E,
+ 0x022F, 0x0059, 0x0079, 0x006C, 0x006E, 0x0074, 0x006A, 0x0041, 0x0043,
+ 0x0063, 0x004C, 0x0054, 0x0053, 0x005A, 0x0042, 0x0055, 0x0056, 0x0045,
+ 0x0065, 0x004A, 0x006A, 0x0051, 0x0071, 0x0052, 0x0072, 0x0059, 0x0079,
+ 0x0061, 0x0251, 0x0062, 0x006F, 0x0063, 0x0064, 0x0064, 0x0065, 0x0259,
+ 0x0065, 0x0065, 0x0065, 0x0065, 0x006A, 0x0067, 0x0067, 0x0047, 0x0068,
+ 0x0068, 0x0069, 0x0049, 0x006C, 0x006C, 0x006C, 0x006D, 0x006D, 0x006D,
+ 0x006E, 0x006E, 0x006E, 0x006F, 0x0072, 0x0072, 0x0072, 0x0072, 0x0072,
+ 0x0072, 0x0072, 0x0052, 0x0052, 0x0073, 0x006A, 0x0283, 0x0283, 0x0074,
+ 0x0074, 0x0055, 0x0076, 0x0076, 0x0077, 0x0079, 0x0059, 0x007A, 0x007A,
+ 0x0292, 0x0043, 0x0042, 0x0065, 0x0047, 0x0048, 0x006A, 0x006B, 0x004C,
+ 0x0071, 0x0068, 0x0068, 0x0068, 0x0068, 0x006A, 0x0072, 0x0279, 0x027B,
+ 0x0281, 0x0077, 0x0079, 0x0263, 0x006C, 0x0073, 0x0078, 0x0295, 0x0300,
+ 0x0301, 0x0313, 0x0308, 0x0061, 0x0065, 0x0069, 0x006F, 0x0075, 0x0063,
+ 0x0064, 0x0068, 0x006D, 0x0072, 0x0074, 0x0076, 0x0078, 0x02B9, 0x003B,
+ 0x0020, 0x00A8, 0x0391, 0x00B7, 0x0395, 0x0397, 0x0399, 0x039F, 0x03A5,
+ 0x03A9, 0x03CA, 0x0399, 0x03A5, 0x03B1, 0x03B5, 0x03B7, 0x03B9, 0x03CB,
+ 0x03B9, 0x03C5, 0x03BF, 0x03C5, 0x03C9, 0x03B2, 0x03B8, 0x03A5, 0x03D2,
+ 0x03D2, 0x03C6, 0x03C0, 0x03BA, 0x03C1, 0x03C2, 0x0398, 0x03B5, 0x03A3,
+ 0x0415, 0x0415, 0x0413, 0x0406, 0x041A, 0x0418, 0x0423, 0x0418, 0x0438,
+ 0x0435, 0x0435, 0x0433, 0x0456, 0x043A, 0x0438, 0x0443, 0x0466, 0x0467,
+ 0x046A, 0x046B, 0x0474, 0x0475, 0x0460, 0x0461, 0x0419, 0x0439, 0x0420,
+ 0x0440, 0x0413, 0x0433, 0x0413, 0x0433, 0x0413, 0x0433, 0x0416, 0x0436,
+ 0x0417, 0x0437, 0x041A, 0x043A, 0x041A, 0x043A, 0x041A, 0x043A, 0x041A,
+ 0x043A, 0x041D, 0x043D, 0x041F, 0x043F, 0x0421, 0x0441, 0x0422, 0x0442,
+ 0x04AE, 0x04AF, 0x0425, 0x0445, 0x0427, 0x0447, 0x0427, 0x0447, 0x0416,
+ 0x0436, 0x04BC, 0x04BD, 0x0416, 0x0436, 0x041A, 0x043A, 0x041B, 0x043B,
+ 0x041D, 0x043D, 0x041D, 0x043D, 0x041C, 0x043C, 0x0410, 0x0430, 0x0410,
+ 0x0430, 0x0415, 0x0435, 0x04D8, 0x04D9, 0x0416, 0x0436, 0x0417, 0x0437,
+ 0x0418, 0x0438, 0x0418, 0x0438, 0x041E, 0x043E, 0x04E8, 0x04E9, 0x042D,
+ 0x044D, 0x0423, 0x0443, 0x0423, 0x0443, 0x0423, 0x0443, 0x0427, 0x0447,
+ 0x0413, 0x0433, 0x042B, 0x044B, 0x0413, 0x0433, 0x0425, 0x0445, 0x0425,
+ 0x0445, 0x0417, 0x0437, 0x041B, 0x043B, 0x0F0B, 0x10DC, 0x0041, 0x00C6,
+ 0x0042, 0x0042, 0x0044, 0x0045, 0x018E, 0x0047, 0x0048, 0x0049, 0x004A,
+ 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 0x0222, 0x0050, 0x0052, 0x0054,
+ 0x0055, 0x0057, 0x0061, 0x0250, 0x0251, 0x1D02, 0x0062, 0x0064, 0x0065,
+ 0x0259, 0x025B, 0x025C, 0x0067, 0x006B, 0x006D, 0x014B, 0x006F, 0x0254,
+ 0x1D16, 0x1D17, 0x0070, 0x0074, 0x0075, 0x1D1D, 0x026F, 0x0076, 0x1D25,
+ 0x03B2, 0x03B3, 0x03B4, 0x03C6, 0x03C7, 0x0069, 0x0072, 0x0075, 0x0076,
+ 0x03B2, 0x03B3, 0x03C1, 0x03C6, 0x03C7, 0x0062, 0x0064, 0x0066, 0x006D,
+ 0x006E, 0x0070, 0x0072, 0x0072, 0x0073, 0x0074, 0x007A, 0x0067, 0x043D,
+ 0x004C, 0x0070, 0x0055, 0x028A, 0x0062, 0x0064, 0x0066, 0x0067, 0x006B,
+ 0x006C, 0x006D, 0x006E, 0x0070, 0x0072, 0x0073, 0x0283, 0x0076, 0x0078,
+ 0x007A, 0x0061, 0x0251, 0x0064, 0x0065, 0x0065, 0x0065, 0x0065, 0x0069,
+ 0x0283, 0x0252, 0x0063, 0x0255, 0x00F0, 0x025C, 0x0066, 0x025F, 0x0261,
+ 0x0265, 0x0268, 0x0269, 0x026A, 0x1D7B, 0x029D, 0x026D, 0x1D85, 0x029F,
+ 0x0271, 0x0270, 0x0272, 0x0273, 0x0274, 0x0275, 0x0278, 0x0282, 0x0283,
+ 0x01AB, 0x0289, 0x028A, 0x1D1C, 0x028B, 0x028C, 0x007A, 0x0290, 0x0291,
+ 0x0292, 0x03B8, 0x0041, 0x0061, 0x0042, 0x0062, 0x0042, 0x0062, 0x0042,
+ 0x0062, 0x0043, 0x0063, 0x0044, 0x0064, 0x0044, 0x0064, 0x0044, 0x0064,
+ 0x0044, 0x0064, 0x0044, 0x0064, 0x0045, 0x0065, 0x0045, 0x0065, 0x0045,
+ 0x0065, 0x0045, 0x0065, 0x0228, 0x0229, 0x0046, 0x0066, 0x0047, 0x0067,
+ 0x0048, 0x0068, 0x0048, 0x0068, 0x0048, 0x0068, 0x0048, 0x0068, 0x0048,
+ 0x0068, 0x0049, 0x0069, 0x00CF, 0x00EF, 0x004B, 0x006B, 0x004B, 0x006B,
+ 0x004B, 0x006B, 0x004C, 0x006C, 0x004C, 0x006C, 0x004C, 0x006C, 0x004C,
+ 0x006C, 0x004D, 0x006D, 0x004D, 0x006D, 0x004D, 0x006D, 0x004E, 0x006E,
+ 0x004E, 0x006E, 0x004E, 0x006E, 0x004E, 0x006E, 0x00D5, 0x00F5, 0x00D5,
+ 0x00F5, 0x014C, 0x014D, 0x014C, 0x014D, 0x0050, 0x0070, 0x0050, 0x0070,
+ 0x0052, 0x0072, 0x0052, 0x0072, 0x0052, 0x0072, 0x0052, 0x0072, 0x0053,
+ 0x0073, 0x0053, 0x0073, 0x0053, 0x0073, 0x0053, 0x0073, 0x0053, 0x0073,
+ 0x0054, 0x0074, 0x0054, 0x0074, 0x0054, 0x0074, 0x0054, 0x0074, 0x0055,
+ 0x0075, 0x0055, 0x0075, 0x0055, 0x0075, 0x0168, 0x0169, 0x016A, 0x016B,
+ 0x0056, 0x0076, 0x0056, 0x0076, 0x0057, 0x0077, 0x0057, 0x0077, 0x0057,
+ 0x0077, 0x0057, 0x0077, 0x0057, 0x0077, 0x0058, 0x0078, 0x0058, 0x0078,
+ 0x0059, 0x0079, 0x005A, 0x007A, 0x005A, 0x007A, 0x005A, 0x007A, 0x0068,
+ 0x0074, 0x0077, 0x0079, 0x0061, 0x017F, 0x0041, 0x0061, 0x0041, 0x0061,
+ 0x0041, 0x0061, 0x0041, 0x0061, 0x0041, 0x0061, 0x0041, 0x0061, 0x0041,
+ 0x0061, 0x0041, 0x0061, 0x0041, 0x0061, 0x0041, 0x0061, 0x0041, 0x0061,
+ 0x0041, 0x0061, 0x0045, 0x0065, 0x0045, 0x0065, 0x0045, 0x0065, 0x0045,
+ 0x0065, 0x0045, 0x0065, 0x0045, 0x0065, 0x0045, 0x0065, 0x0045, 0x0065,
+ 0x0049, 0x0069, 0x0049, 0x0069, 0x004F, 0x006F, 0x004F, 0x006F, 0x004F,
+ 0x006F, 0x004F, 0x006F, 0x004F, 0x006F, 0x004F, 0x006F, 0x004F, 0x006F,
+ 0x004F, 0x006F, 0x004F, 0x006F, 0x004F, 0x006F, 0x004F, 0x006F, 0x004F,
+ 0x006F, 0x0055, 0x0075, 0x0055, 0x0075, 0x0055, 0x0075, 0x0055, 0x0075,
+ 0x0055, 0x0075, 0x0055, 0x0075, 0x0055, 0x0075, 0x0059, 0x0079, 0x0059,
+ 0x0079, 0x0059, 0x0079, 0x0059, 0x0079, 0x03B1, 0x03B1, 0x03B1, 0x03B1,
+ 0x03B1, 0x03B1, 0x03B1, 0x03B1, 0x0391, 0x0391, 0x0391, 0x0391, 0x0391,
+ 0x0391, 0x0391, 0x0391, 0x03B5, 0x03B5, 0x03B5, 0x03B5, 0x03B5, 0x03B5,
+ 0x0395, 0x0395, 0x0395, 0x0395, 0x0395, 0x0395, 0x03B7, 0x03B7, 0x03B7,
+ 0x03B7, 0x03B7, 0x03B7, 0x03B7, 0x03B7, 0x0397, 0x0397, 0x0397, 0x0397,
+ 0x0397, 0x0397, 0x0397, 0x0397, 0x03B9, 0x03B9, 0x03B9, 0x03B9, 0x03B9,
+ 0x03B9, 0x03B9, 0x03B9, 0x0399, 0x0399, 0x0399, 0x0399, 0x0399, 0x0399,
+ 0x0399, 0x0399, 0x03BF, 0x03BF, 0x03BF, 0x03BF, 0x03BF, 0x03BF, 0x039F,
+ 0x039F, 0x039F, 0x039F, 0x039F, 0x039F, 0x03C5, 0x03C5, 0x03C5, 0x03C5,
+ 0x03C5, 0x03C5, 0x03C5, 0x03C5, 0x03A5, 0x03A5, 0x03A5, 0x03A5, 0x03C9,
+ 0x03C9, 0x03C9, 0x03C9, 0x03C9, 0x03C9, 0x03C9, 0x03C9, 0x03A9, 0x03A9,
+ 0x03A9, 0x03A9, 0x03A9, 0x03A9, 0x03A9, 0x03A9, 0x03B1, 0x03B1, 0x03B5,
+ 0x03B5, 0x03B7, 0x03B7, 0x03B9, 0x03B9, 0x03BF, 0x03BF, 0x03C5, 0x03C5,
+ 0x03C9, 0x03C9, 0x03B1, 0x03B1, 0x03B1, 0x03B1, 0x03B1, 0x03B1, 0x03B1,
+ 0x03B1, 0x0391, 0x0391, 0x0391, 0x0391, 0x0391, 0x0391, 0x0391, 0x0391,
+ 0x03B7, 0x03B7, 0x03B7, 0x03B7, 0x03B7, 0x03B7, 0x03B7, 0x03B7, 0x0397,
+ 0x0397, 0x0397, 0x0397, 0x0397, 0x0397, 0x0397, 0x0397, 0x03C9, 0x03C9,
+ 0x03C9, 0x03C9, 0x03C9, 0x03C9, 0x03C9, 0x03C9, 0x03A9, 0x03A9, 0x03A9,
+ 0x03A9, 0x03A9, 0x03A9, 0x03A9, 0x03A9, 0x03B1, 0x03B1, 0x03B1, 0x03B1,
+ 0x03B1, 0x03B1, 0x03B1, 0x0391, 0x0391, 0x0391, 0x0391, 0x0391, 0x03B7,
+ 0x03B7, 0x03B7, 0x03B7, 0x03B7, 0x0395, 0x0395, 0x0397, 0x0397, 0x0397,
+ 0x03B9, 0x03B9, 0x03B9, 0x03B9, 0x03B9, 0x03B9, 0x0399, 0x0399, 0x0399,
+ 0x0399, 0x03C5, 0x03C5, 0x03C5, 0x03C5, 0x03C1, 0x03C1, 0x03C5, 0x03C5,
+ 0x03A5, 0x03A5, 0x03A5, 0x03A5, 0x03A1, 0x03C9, 0x03C9, 0x03C9, 0x03C9,
+ 0x03C9, 0x039F, 0x039F, 0x03A9, 0x03A9, 0x03A9, 0x00B4, 0x0314, 0x0020,
+ 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020,
+ 0x0020, 0x2010, 0x0333, 0x002E, 0x0020, 0x0020, 0x0030, 0x0069, 0x0034,
+ 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x002B, 0x2212, 0x003D, 0x0028,
+ 0x0029, 0x006E, 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036,
+ 0x0037, 0x0038, 0x0039, 0x002B, 0x2212, 0x003D, 0x0028, 0x0029, 0x0061,
+ 0x0065, 0x006F, 0x0078, 0x0259, 0x0043, 0x0190, 0x0067, 0x0048, 0x0048,
+ 0x0048, 0x0068, 0x0068, 0x0049, 0x0049, 0x004C, 0x006C, 0x004E, 0x0050,
+ 0x0051, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0056, 0x005A, 0x03A9,
+ 0x01B1, 0x005A, 0x004B, 0x00C5, 0x0042, 0x0043, 0x0065, 0x0065, 0x0045,
+ 0x0046, 0x004D, 0x006F, 0x05D0, 0x05D1, 0x05D2, 0x05D3, 0x0069, 0x03C0,
+ 0x03B3, 0x0393, 0x03A0, 0x2211, 0x0044, 0x0064, 0x0065, 0x0069, 0x006A,
+ 0x0049, 0x0056, 0x0058, 0x004C, 0x0043, 0x0044, 0x004D, 0x0069, 0x0076,
+ 0x0078, 0x006C, 0x0063, 0x0064, 0x006D, 0x2203, 0x2208, 0x220B, 0x3008,
+ 0x3009, 0x0062, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 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, 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,
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038,
+ 0x0039, 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x004C, 0x006C, 0x004C, 0x0050, 0x0052, 0x0061, 0x0074,
+ 0x0048, 0x0068, 0x004B, 0x006B, 0x005A, 0x007A, 0x0076, 0x0057, 0x0058,
+ 0x0076, 0x006A, 0x0056, 0x2D61, 0x6BCD, 0x6C11, 0x864E, 0x897F, 0x89D2,
+ 0x957F, 0x9752, 0x98DF, 0x9AA8, 0x9B3C, 0x9EA6, 0x9EC4, 0x9F9F, 0x4E00,
+ 0x4E28, 0x4E36, 0x4E3F, 0x4E59, 0x4E85, 0x4E8C, 0x4EA0, 0x4EBA, 0x513F,
+ 0x5165, 0x516B, 0x5182, 0x5196, 0x51AB, 0x51E0, 0x51F5, 0x5200, 0x529B,
+ 0x52F9, 0x5315, 0x531A, 0x5338, 0x5341, 0x535C, 0x5369, 0x5382, 0x53B6,
+ 0x53C8, 0x53E3, 0x56D7, 0x571F, 0x58EB, 0x5902, 0x590A, 0x5915, 0x5927,
+ 0x5973, 0x5B50, 0x5B80, 0x5BF8, 0x5C0F, 0x5C22, 0x5C38, 0x5C6E, 0x5C71,
+ 0x5DDB, 0x5DE5, 0x5DF1, 0x5DFE, 0x5E72, 0x5E7A, 0x5E7F, 0x5EF4, 0x5EFE,
+ 0x5F0B, 0x5F13, 0x5F50, 0x5F61, 0x5F73, 0x5FC3, 0x6208, 0x6236, 0x624B,
+ 0x652F, 0x6534, 0x6587, 0x6597, 0x65A4, 0x65B9, 0x65E0, 0x65E5, 0x66F0,
+ 0x6708, 0x6728, 0x6B20, 0x6B62, 0x6B79, 0x6BB3, 0x6BCB, 0x6BD4, 0x6BDB,
+ 0x6C0F, 0x6C14, 0x6C34, 0x706B, 0x722A, 0x7236, 0x723B, 0x723F, 0x7247,
+ 0x7259, 0x725B, 0x72AC, 0x7384, 0x7389, 0x74DC, 0x74E6, 0x7518, 0x751F,
+ 0x7528, 0x7530, 0x758B, 0x7592, 0x7676, 0x767D, 0x76AE, 0x76BF, 0x76EE,
+ 0x77DB, 0x77E2, 0x77F3, 0x793A, 0x79B8, 0x79BE, 0x7A74, 0x7ACB, 0x7AF9,
+ 0x7C73, 0x7CF8, 0x7F36, 0x7F51, 0x7F8A, 0x7FBD, 0x8001, 0x800C, 0x8012,
+ 0x8033, 0x807F, 0x8089, 0x81E3, 0x81EA, 0x81F3, 0x81FC, 0x820C, 0x821B,
+ 0x821F, 0x826E, 0x8272, 0x8278, 0x864D, 0x866B, 0x8840, 0x884C, 0x8863,
+ 0x897E, 0x898B, 0x89D2, 0x8A00, 0x8C37, 0x8C46, 0x8C55, 0x8C78, 0x8C9D,
+ 0x8D64, 0x8D70, 0x8DB3, 0x8EAB, 0x8ECA, 0x8F9B, 0x8FB0, 0x8FB5, 0x9091,
+ 0x9149, 0x91C6, 0x91CC, 0x91D1, 0x9577, 0x9580, 0x961C, 0x96B6, 0x96B9,
+ 0x96E8, 0x9751, 0x975E, 0x9762, 0x9769, 0x97CB, 0x97ED, 0x97F3, 0x9801,
+ 0x98A8, 0x98DB, 0x98DF, 0x9996, 0x9999, 0x99AC, 0x9AA8, 0x9AD8, 0x9ADF,
+ 0x9B25, 0x9B2F, 0x9B32, 0x9B3C, 0x9B5A, 0x9CE5, 0x9E75, 0x9E7F, 0x9EA5,
+ 0x9EBB, 0x9EC3, 0x9ECD, 0x9ED1, 0x9EF9, 0x9EFD, 0x9F0E, 0x9F13, 0x9F20,
+ 0x9F3B, 0x9F4A, 0x9F52, 0x9F8D, 0x9F9C, 0x9FA0, 0x0020, 0x3012, 0x5341,
+ 0x5344, 0x5345, 0x1100, 0x1101, 0x11AA, 0x1102, 0x11AC, 0x11AD, 0x1103,
+ 0x1104, 0x1105, 0x11B0, 0x11B1, 0x11B2, 0x11B3, 0x11B4, 0x11B5, 0x111A,
+ 0x1106, 0x1107, 0x1108, 0x1121, 0x1109, 0x110A, 0x110B, 0x110C, 0x110D,
+ 0x110E, 0x110F, 0x1110, 0x1111, 0x1112, 0x1161, 0x1162, 0x1163, 0x1164,
+ 0x1165, 0x1166, 0x1167, 0x1168, 0x1169, 0x116A, 0x116B, 0x116C, 0x116D,
+ 0x116E, 0x116F, 0x1170, 0x1171, 0x1172, 0x1173, 0x1174, 0x1175, 0x1160,
+ 0x1114, 0x1115, 0x11C7, 0x11C8, 0x11CC, 0x11CE, 0x11D3, 0x11D7, 0x11D9,
+ 0x111C, 0x11DD, 0x11DF, 0x111D, 0x111E, 0x1120, 0x1122, 0x1123, 0x1127,
+ 0x1129, 0x112B, 0x112C, 0x112D, 0x112E, 0x112F, 0x1132, 0x1136, 0x1140,
+ 0x1147, 0x114C, 0x11F1, 0x11F2, 0x1157, 0x1158, 0x1159, 0x1184, 0x1185,
+ 0x1188, 0x1191, 0x1192, 0x1194, 0x119E, 0x11A1, 0x4E00, 0x4E8C, 0x4E09,
+ 0x56DB, 0x4E0A, 0x4E2D, 0x4E0B, 0x7532, 0x4E59, 0x4E19, 0x4E01, 0x5929,
+ 0x5730, 0x4EBA, 0x554F, 0x5E7C, 0x6587, 0x7B8F, 0x1100, 0x1102, 0x1103,
+ 0x1105, 0x1106, 0x1107, 0x1109, 0x110B, 0x110C, 0x110E, 0x110F, 0x1110,
+ 0x1111, 0x1112, 0x4E00, 0x4E8C, 0x4E09, 0x56DB, 0x4E94, 0x516D, 0x4E03,
+ 0x516B, 0x4E5D, 0x5341, 0x6708, 0x706B, 0x6C34, 0x6728, 0x91D1, 0x571F,
+ 0x65E5, 0x682A, 0x6709, 0x793E, 0x540D, 0x7279, 0x8CA1, 0x795D, 0x52B4,
+ 0x79D8, 0x7537, 0x5973, 0x9069, 0x512A, 0x5370, 0x6CE8, 0x9805, 0x4F11,
+ 0x5199, 0x6B63, 0x4E0A, 0x4E2D, 0x4E0B, 0x5DE6, 0x53F3, 0x533B, 0x5B97,
+ 0x5B66, 0x76E3, 0x4F01, 0x8CC7, 0x5354, 0x591C, 0x30A2, 0x30A4, 0x30A6,
+ 0x30A8, 0x30AA, 0x30AB, 0x30AD, 0x30AF, 0x30B1, 0x30B3, 0x30B5, 0x30B7,
+ 0x30B9, 0x30BB, 0x30BD, 0x30BF, 0x30C1, 0x30C4, 0x30C6, 0x30C8, 0x30CA,
+ 0x30CB, 0x30CC, 0x30CD, 0x30CE, 0x30CF, 0x30D2, 0x30D5, 0x30D8, 0x30DB,
+ 0x30DE, 0x30DF, 0x30E0, 0x30E1, 0x30E2, 0x30E4, 0x30E6, 0x30E8, 0x30E9,
+ 0x30EA, 0x30EB, 0x30EC, 0x30ED, 0x30EF, 0x30F0, 0x30F1, 0x30F2, 0x4E22,
+ 0x5E76, 0x5E7A, 0x5E72, 0x4E71, 0x4E98, 0x4E9A, 0x4F2B, 0x5E03, 0x5360,
+ 0x6765, 0x4FA3, 0x4FE3, 0x7CFB, 0x4FA0, 0x4F25, 0x4FE9, 0x4ED3, 0x4E2A,
+ 0x4EEC, 0x4F26, 0x4F1F, 0x4FA7, 0x4FA6, 0x4F2A, 0x6770, 0x4F27, 0x4F1E,
+ 0x5907, 0x5BB6, 0x4F63, 0x506C, 0x4F20, 0x4F1B, 0x503A, 0x4F24, 0x503E,
+ 0x507B, 0x4EC5, 0x4F65, 0x4FA8, 0x4EC6, 0x4FA5, 0x507E, 0x96C7, 0x4EF7,
+ 0x4EEA, 0x4FAC, 0x4EBF, 0x4FED, 0x50A7, 0x4FE6, 0x4FAA, 0x5C3D, 0x507F,
+ 0x4F18, 0x50A8, 0x4FEA, 0x50A9, 0x50A5, 0x4FE8, 0x51F6, 0x5151, 0x513F,
+ 0x5156, 0x5185, 0x4E24, 0x518C, 0x80C4, 0x5199, 0x5E42, 0x51BB, 0x51DB,
+ 0x51EF, 0x522B, 0x5220, 0x522D, 0x5219, 0x5239, 0x521A, 0x5265, 0x5250,
+ 0x5240, 0x521B, 0x522C, 0x5212, 0x5267, 0x5218, 0x523D, 0x523F, 0x5251,
+ 0x5242, 0x52B2, 0x52A8, 0x52D6, 0x52A1, 0x80DC, 0x52B3, 0x52BF, 0x52A2,
+ 0x52CB, 0x52B1, 0x529D, 0x5300, 0x5326, 0x6C47, 0x532E, 0x533A, 0x534F,
+ 0x6064, 0x5374, 0x538D, 0x538C, 0x5389, 0x53A3, 0x53C2, 0x4E1B, 0x54A4,
+ 0x5434, 0x5450, 0x5415, 0x5458, 0x55B1, 0x5457, 0x5FF5, 0x95EE, 0x54D1,
+ 0x542F, 0x5524, 0x4E27, 0x4E54, 0x5355, 0x54DF, 0x545B, 0x556C, 0x551D,
+ 0x5417, 0x545C, 0x5522, 0x54D4, 0x53F9, 0x55BD, 0x5455, 0x5567, 0x5C1D,
+ 0x551B, 0x54D7, 0x5520, 0x5578, 0x53FD, 0x54D3, 0x5452, 0x5574, 0x6076,
+ 0x5618, 0x549D, 0x54D2, 0x54DD, 0x54D5, 0x55F3, 0x54D9, 0x55B7, 0x5428,
+ 0x549B, 0x5413, 0x54DC, 0x5C1D, 0x565C, 0x556E, 0x5456, 0x5499, 0x4EB8,
+ 0x55BE, 0x4E25, 0x5624, 0x556D, 0x55EB, 0x56A3, 0x5181, 0x5453, 0x5570,
+ 0x5631, 0x56F1, 0x56F5, 0x56FD, 0x56F4, 0x56ED, 0x5706, 0x56FE, 0x56E2,
+ 0x57AD, 0x6267, 0x575A, 0x57A9, 0x57DA, 0x5C27, 0x62A5, 0x573A, 0x5757,
+ 0x8314, 0x57B2, 0x57D8, 0x6D82, 0x51A2, 0x575E, 0x57D9, 0x5C18, 0x5811,
+ 0x57AB, 0x5760, 0x5815, 0x575F, 0x57A6, 0x575B, 0x538B, 0x5792, 0x5739,
+ 0x5786, 0x574F, 0x5785, 0x575C, 0x575D, 0x58EE, 0x58F6, 0x58F8, 0x5BFF,
+ 0x591F, 0x68A6, 0x4F19, 0x5939, 0x5942, 0x5965, 0x5941, 0x593A, 0x594B,
+ 0x59F9, 0x5986, 0x59D7, 0x5978, 0x5A31, 0x5A04, 0x5987, 0x5A05, 0x5A32,
+ 0x59AB, 0x5AAA, 0x5988, 0x59AA, 0x59A9, 0x5A34, 0x5A73, 0x5A06, 0x5A75,
+ 0x5A07, 0x5AF1, 0x5AD2, 0x5B37, 0x5AD4, 0x5A74, 0x5A76, 0x5A08, 0x5B59,
+ 0x5B66, 0x5B6A, 0x5BAB, 0x5BDD, 0x5B9E, 0x5B81, 0x5BA1, 0x5199, 0x5BBD,
+ 0x5BA0, 0x5B9D, 0x5C06, 0x4E13, 0x5BFB, 0x5BF9, 0x5BFC, 0x5C34, 0x5C4A,
+ 0x5C38, 0x5C49, 0x5C61, 0x5C42, 0x5C5F, 0x5C66, 0x5C5E, 0x5188, 0x5C98,
+ 0x5C9B, 0x5CE1, 0x5D03, 0x5C97, 0x4ED1, 0x5CE5, 0x5C9A, 0x5D5D, 0x5D2D,
+ 0x5C96, 0x5D5A, 0x5D02, 0x5CE4, 0x5CE3, 0x5CC4, 0x5D04, 0x5C99, 0x5D58,
+ 0x5CAD, 0x5C7F, 0x5CB3, 0x5CBF, 0x5CE6, 0x5DC5, 0x5DEF, 0x5E05, 0x5E08,
+ 0x5E10, 0x5E26, 0x5E27, 0x5E0F, 0x5E3C, 0x5E3B, 0x5E1C, 0x5E01, 0x5E2E,
+ 0x5E31, 0x5E72, 0x51E0, 0x5E93, 0x5395, 0x53A2, 0x53A6, 0x53A8, 0x53AE,
+ 0x5E99, 0x5382, 0x5E91, 0x5E9F, 0x5E7F, 0x5EEA, 0x5E90, 0x5385, 0x5F11,
+ 0x5F2A, 0x5F20, 0x5F3A, 0x5F39, 0x5F25, 0x5F2F, 0x5F66, 0x540E, 0x5F84,
+ 0x4ECE, 0x5F95, 0x590D, 0x5F81, 0x5F7B, 0x6052, 0x803B, 0x60A6, 0x6005,
+ 0x95F7, 0x6076, 0x607C, 0x607D, 0x607B, 0x7231, 0x60EC, 0x60AB, 0x6006,
+ 0x607A, 0x5FFE, 0x6001, 0x6120, 0x60E8, 0x60ED, 0x6078, 0x60EF, 0x6004,
+ 0x6002, 0x8651, 0x60AD, 0x5E86, 0x5FE7, 0x60EB, 0x601C, 0x51ED, 0x6126,
+ 0x616D, 0x60EE, 0x6124, 0x60AF, 0x6003, 0x5BAA, 0x5FC6, 0x6073, 0x5E94,
+ 0x603F, 0x61D4, 0x603C, 0x61D1, 0x6079, 0x60E9, 0x61D2, 0x6000, 0x60AC,
+ 0x5FCF, 0x60E7, 0x6151, 0x604B, 0x6206, 0x620B, 0x6217, 0x622C, 0x6218,
+ 0x620F, 0x6237, 0x629B, 0x631F, 0x820D, 0x626A, 0x5377, 0x626B, 0x62A1,
+ 0x6323, 0x6302, 0x91C7, 0x62E3, 0x626C, 0x6362, 0x6325, 0x635F, 0x6447,
+ 0x6363, 0x62A2, 0x63B4, 0x63BC, 0x6402, 0x631A, 0x62A0, 0x629F, 0x63BA,
+ 0x635E, 0x6491, 0x6320, 0x6322, 0x63B8, 0x62E8, 0x629A, 0x6251, 0x63FF,
+ 0x631E, 0x631D, 0x6361, 0x62E5, 0x63B3, 0x62E9, 0x51FB, 0x6321, 0x62C5,
+ 0x636E, 0x6324, 0x62DF, 0x6448, 0x62E7, 0x6401, 0x63B7, 0x6269, 0x64B7,
+ 0x6446, 0x64DE, 0x64B8, 0x6270, 0x6445, 0x64B5, 0x62E2, 0x62E6, 0x6484,
+ 0x6400, 0x64BA, 0x643A, 0x6444, 0x6512, 0x631B, 0x644A, 0x6405, 0x63FD,
+ 0x668B, 0x8D25, 0x53D9, 0x654C, 0x6570, 0x655B, 0x6BD9, 0x6593, 0x65A9,
+ 0x65AD, 0x4E8E, 0x5347, 0x65F6, 0x664B, 0x663C, 0x6655, 0x6656, 0x65F8,
+ 0x7545, 0x6682, 0x6635, 0x6654, 0x5386, 0x6619, 0x6653, 0x66A7, 0x65F7,
+ 0x663D, 0x6652, 0x4E66, 0x4F1A, 0x80E7, 0x4E1C, 0x6805, 0x6746, 0x6800,
+ 0x67A7, 0x6761, 0x67AD, 0x5F03, 0x67A8, 0x67A3, 0x680B, 0x6808, 0x6816,
+ 0x6860, 0x6768, 0x67AB, 0x6862, 0x4E1A, 0x6781, 0x6769, 0x8363, 0x6864,
+ 0x6784, 0x67AA, 0x6760, 0x68BF, 0x6920, 0x6901, 0x6868, 0x6869, 0x4E50,
+ 0x679E, 0x697C, 0x6807, 0x67A2, 0x6837, 0x6734, 0x6811, 0x6866, 0x6861,
+ 0x6865, 0x673A, 0x692D, 0x6A2A, 0x6AA9, 0x69DC, 0x67FD, 0x6863, 0x6867,
+ 0x69DA, 0x68C0, 0x6A2F, 0x68BC, 0x53F0, 0x69DF, 0x67E0, 0x69DB, 0x82D8,
+ 0x67DC, 0x6A79, 0x6988, 0x6809, 0x691F, 0x6A7C, 0x680E, 0x6A71, 0x69E0,
+ 0x680C, 0x67A5, 0x6A65, 0x6987, 0x680A, 0x6989, 0x68C2, 0x6A31, 0x680F,
+ 0x6743, 0x6924, 0x683E, 0x6984, 0x94A6, 0x6B27, 0x6B24, 0x6B22, 0x5C81,
+ 0x5386, 0x5F52, 0x6B81, 0x6B8B, 0x6B92, 0x6B87, 0x6B9A, 0x6B93, 0x6BA1,
+ 0x6B7C, 0x6740, 0x58F3, 0x6BC1, 0x6BB4, 0x6BF5, 0x6BE1, 0x6C07, 0x6C14,
+ 0x6C22, 0x6C29, 0x6C32, 0x51FC, 0x51B3, 0x51B1, 0x6CA1, 0x51B5, 0x6CC4,
+ 0x6C79, 0x6D43, 0x6CFE, 0x51C9, 0x51C4, 0x6CEA, 0x6E0C, 0x51C0, 0x6CA6,
+ 0x6E0A, 0x6D9E, 0x6D45, 0x6DA3, 0x51CF, 0x6CA8, 0x6DA1, 0x6D4B, 0x6D51,
+ 0x51D1, 0x6D48, 0x6D8C, 0x6D07, 0x6C64, 0x6CA9, 0x51C6, 0x6C9F, 0x6E29,
+ 0x6DA2, 0x6E7F, 0x6CA7, 0x706D, 0x6DA4, 0x8365, 0x6CAA, 0x6EDE, 0x6E17,
+ 0x6D52, 0x6D50, 0x6EDA, 0x6EE1, 0x6E14, 0x6E87, 0x6CA4, 0x6C49, 0x6D9F,
+ 0x6E0D, 0x6DA8, 0x6E10, 0x6D46, 0x988D, 0x6CFC, 0x6D01, 0x6F5C, 0x6DA6,
+ 0x6D54, 0x6E83, 0x6DA0, 0x6DA9, 0x6D47, 0x6D9D, 0x6C84, 0x6DA7, 0x6E11,
+ 0x6CFD, 0x6EEA, 0x6CF6, 0x6D4D, 0x6D4A, 0x6D53, 0x6E7F, 0x6CDE, 0x6D4E,
+ 0x6D9B, 0x6EE5, 0x6F4D, 0x6EE8, 0x6E85, 0x6CFA, 0x6EE4, 0x6EE2, 0x6E0E,
+ 0x6CFB, 0x6D4F, 0x6FD2, 0x6CF8, 0x6CA5, 0x6F47, 0x6F46, 0x6F74, 0x6CF7,
+ 0x6FD1, 0x6F4B, 0x6F9C, 0x6CA3, 0x6EE0, 0x6D12, 0x6EE9, 0x704F, 0x6E7E,
+ 0x6EE6, 0x6EDF, 0x707E, 0x4E3A, 0x4E4C, 0x70C3, 0x65E0, 0x70BC, 0x709C,
+ 0x70DF, 0x8315, 0x7115, 0x70E6, 0x7080, 0x8367, 0x709D, 0x70ED, 0x70BD,
+ 0x70E8, 0x706F, 0x7096, 0x70E7, 0x70EB, 0x7116, 0x8425, 0x707F, 0x70DB,
+ 0x70E9, 0x70EC, 0x7118, 0x70C1, 0x7089, 0x70C2, 0x4E89, 0x4E3A, 0x7237,
+ 0x5C14, 0x5899, 0x724D, 0x7275, 0x8366, 0x7266, 0x728A, 0x727A, 0x72B6,
+ 0x72ED, 0x72C8, 0x72F0, 0x72B9, 0x72F2, 0x72B8, 0x72F1, 0x72EE, 0x5956,
+ 0x72EC, 0x72EF, 0x7303, 0x72DE, 0x83B7, 0x730E, 0x72B7, 0x517D, 0x736D,
+ 0x732E, 0x7315, 0x7321, 0x73B0, 0x73D0, 0x73F2, 0x73AE, 0x739A, 0x7410,
+ 0x7476, 0x83B9, 0x739B, 0x7405, 0x73B1, 0x740F, 0x740E, 0x7391, 0x7477,
+ 0x73F0, 0x73AF, 0x7399, 0x73BA, 0x743C, 0x73D1, 0x748E, 0x74D2, 0x74EF,
+ 0x74EE, 0x4EA7, 0x4EA7, 0x4EA9, 0x6BD5, 0x753B, 0x7572, 0x5F02, 0x5F53,
+ 0x7574, 0x53E0, 0x75C9, 0x9178, 0x75F9, 0x75D6, 0x75AF, 0x75A1, 0x75EA,
+ 0x7617, 0x75AE, 0x759F, 0x75AD, 0x7618, 0x7597, 0x75E8, 0x75EB, 0x7605,
+ 0x75A0, 0x762A, 0x75D2, 0x7596, 0x75AC, 0x765E, 0x7663, 0x763F, 0x763E,
+ 0x75C8, 0x762B, 0x766B, 0x53D1, 0x7691, 0x75B1, 0x76B2, 0x76B1, 0x676F,
+ 0x76D7, 0x76CF, 0x5C3D, 0x76D1, 0x76D8, 0x5362, 0x8361, 0x7726, 0x4F17,
+ 0x56F0, 0x7741, 0x7750, 0x772F, 0x7792, 0x4E86, 0x7786, 0x7751, 0x772C,
+ 0x77A9, 0x77EB, 0x7845, 0x70AE, 0x7841, 0x7856, 0x7817, 0x781A, 0x7855,
+ 0x7800, 0x786E, 0x7801, 0x7859, 0x7816, 0x789C, 0x789B, 0x77F6, 0x7857,
+ 0x785A, 0x7840, 0x788D, 0x77FF, 0x783A, 0x783E, 0x77FE, 0x783B, 0x7984,
+ 0x7978, 0x796F, 0x794E, 0x5FA1, 0x7985, 0x793C, 0x7977, 0x79C3, 0x7C7C,
+ 0x7A0E, 0x79C6, 0x68F1, 0x79CD, 0x79F0, 0x7A23, 0x79EF, 0x9896, 0x79FE,
+ 0x7A51, 0x79FD, 0x7A33, 0x7A9D, 0x6D3C, 0x7A77, 0x7A91, 0x7A8E, 0x7AAD,
+ 0x7AA5, 0x7A9C, 0x7A8D, 0x7AA6, 0x7A83, 0x7ADE, 0x7B14, 0x7B0B, 0x7B15,
+ 0x7B3A, 0x7B5D, 0x8282, 0x8303, 0x7B51, 0x7BA7, 0x7B7C, 0x7B03, 0x7B5B,
+ 0x7B5A, 0x7BA6, 0x7BD3, 0x7BAA, 0x7B80, 0x7BD1, 0x7BAB, 0x6A90, 0x7B5C,
+ 0x7B7E, 0x5E18, 0x7BEE, 0x7B79, 0x7B93, 0x7BEF, 0x7BA8, 0x7C41, 0x7B3C,
+ 0x7B7E, 0x7B3E, 0x7BF1, 0x7BA9, 0x5401, 0x5986, 0x7CA4, 0x7CC1, 0x7CAA,
+ 0x7CAE, 0x7CF5, 0x7C9D, 0x7C74, 0x7C9C, 0x7EA0, 0x7EAA, 0x7EA3, 0x7EA6,
+ 0x7EA2, 0x7EA1, 0x7EA5, 0x7EA8, 0x7EAB, 0x7EB9, 0x7EB3, 0x7EBD, 0x7EBE,
+ 0x7EAF, 0x7EB0, 0x7EB1, 0x7EB8, 0x7EA7, 0x7EB7, 0x7EAD, 0x7EB4, 0x7EBA,
+ 0x624E, 0x624E, 0x7EC6, 0x7EC2, 0x7EC1, 0x7EC5, 0x7EBB, 0x7ECD, 0x7EC0,
+ 0x7ECB, 0x7ED0, 0x7ECC, 0x7EC8, 0x5F26, 0x7EC4, 0x7ECA, 0x7ED7, 0x7ED3,
+ 0x7EDD, 0x7EE6, 0x7ED4, 0x7EDE, 0x7EDC, 0x7EDA, 0x7ED9, 0x7ED2, 0x7ED6,
+ 0x7EDF, 0x4E1D, 0x7EDB, 0x7EE2, 0x7ED1, 0x7EE1, 0x7EE0, 0x7EE8, 0x7EE5,
+ 0x7ECF, 0x7EFC, 0x7F0D, 0x7EFF, 0x7EF8, 0x7EFB, 0x7EF6, 0x7EF4, 0x7EFE,
+ 0x7EB2, 0x7F51, 0x7F00, 0x7EB6, 0x7EFA, 0x7EEE, 0x7EFD, 0x7EF0, 0x7EEB,
+ 0x7EF5, 0x7EF2, 0x7F01, 0x7D27, 0x7EEF, 0x7EEA, 0x7F03, 0x7F04, 0x7F02,
+ 0x7EBF, 0x7F09, 0x7F0E, 0x7F14, 0x7F17, 0x7F18, 0x7F0C, 0x7F16, 0x7F13,
+ 0x7F05, 0x7EAC, 0x7F11, 0x7F08, 0x7EC3, 0x7F0F, 0x7F07, 0x81F4, 0x8426,
+ 0x7F19, 0x7F22, 0x7F12, 0x7EC9, 0x7F23, 0x7F1E, 0x7F1A, 0x7F1C, 0x7F1F,
+ 0x7F1B, 0x53BF, 0x7F1D, 0x7F29, 0x7EB5, 0x7F27, 0x7F26, 0x7D77, 0x7F15,
+ 0x7F25, 0x603B, 0x7EE9, 0x7EF7, 0x7F2B, 0x7F2A, 0x7F2F, 0x7EC7, 0x7F2E,
+ 0x7F2D, 0x7ED5, 0x7EE3, 0x7F0B, 0x7EF3, 0x7ED8, 0x7CFB, 0x8327, 0x7F33,
+ 0x7F32, 0x7F34, 0x7ECE, 0x7EE7, 0x7F24, 0x7F31, 0x7F2C, 0x7EA9, 0x7EED,
+ 0x7F20, 0x7F28, 0x7EA4, 0x7F35, 0x7F06, 0x94B5, 0x7F42, 0x7F5A, 0x9A82,
+ 0x7F62, 0x7F57, 0x7F74, 0x7F81, 0x8288, 0x7F9F, 0x7FA1, 0x4E49, 0x81BB,
+ 0x4E60, 0x7FC6, 0x7FDA, 0x7FD8, 0x7FD9, 0x8027, 0x5723, 0x95FB, 0x8054,
+ 0x806A, 0x58F0, 0x8038, 0x8069, 0x8042, 0x804C, 0x804D, 0x542C, 0x804B,
+ 0x8083, 0x80C1, 0x8109, 0x80EB, 0x8131, 0x80C0, 0x80BE, 0x80E8, 0x8136,
+ 0x8111, 0x80BF, 0x811A, 0x80A0, 0x817D, 0x8158, 0x80A4, 0x80F6, 0x817B,
+ 0x80C6, 0x810D, 0x8113, 0x8138, 0x8110, 0x8191, 0x814A, 0x80EA, 0x810F,
+ 0x8114, 0x81DC, 0x5367, 0x4E34, 0x53F0, 0x4E0E, 0x5174, 0x4E3E, 0x65E7,
+ 0x8231, 0x8223, 0x8230, 0x823B, 0x8270, 0x8273, 0x82C4, 0x520D, 0x82CE,
+ 0x5179, 0x8346, 0x8C46, 0x5E84, 0x830E, 0x835A, 0x82CB, 0x534E, 0x70DF,
+ 0x82CC, 0x83B1, 0x4E07, 0x83B4, 0x53F6, 0x836D, 0x7740, 0x82C7, 0x8364,
+ 0x641C, 0x83B3, 0x8385, 0x82CD, 0x836A, 0x76D6, 0x83B2, 0x82C1, 0x83BC,
+ 0x835C, 0x848C, 0x848B, 0x8471, 0x8311, 0x836B, 0x8368, 0x8487, 0x835E,
+ 0x836C, 0x83B8, 0x835B, 0x8489, 0x829C, 0x8427, 0x84E3, 0x835F, 0x84DF,
+ 0x8297, 0x59DC, 0x8537, 0x83B6, 0x8350, 0x8428, 0x8360, 0x501F, 0x84DD,
+ 0x8369, 0x827A, 0x836F, 0x85AE, 0x82C8, 0x853C, 0x853A, 0x841A, 0x8572,
+ 0x82A6, 0x82CF, 0x8574, 0x82F9, 0x8616, 0x85D3, 0x8539, 0x830F, 0x5170,
+ 0x84E0, 0x841D, 0x5904, 0x865A, 0x864F, 0x53F7, 0x4E8F, 0x866C, 0x86F1,
+ 0x8715, 0x86AC, 0x8680, 0x732C, 0x867E, 0x8671, 0x8717, 0x86F3, 0x8682,
+ 0x8424, 0x877C, 0x8780, 0x86F0, 0x8748, 0x87A8, 0x866E, 0x8749, 0x86F2,
+ 0x866B, 0x86CF, 0x8681, 0x8683, 0x8747, 0x867F, 0x874E, 0x86F4, 0x877E,
+ 0x869D, 0x8721, 0x86CE, 0x87CF, 0x86CA, 0x8695, 0x86EE, 0x4F17, 0x672F,
+ 0x536B, 0x51B2, 0x886E, 0x8885, 0x8865, 0x88C5, 0x91CC, 0x5236, 0x590D,
+ 0x88C8, 0x8886, 0x88E4, 0x88E2, 0x7F21, 0x891B, 0x4EB5, 0x88E5, 0x8884,
+ 0x88E3, 0x88C6, 0x8934, 0x889C, 0x886C, 0x88AD, 0x8955, 0x89C1, 0x89C4,
+ 0x89C5, 0x89C6, 0x89C7, 0x89CB, 0x89CD, 0x89CE, 0x4EB2, 0x89CA, 0x89CF,
+ 0x89D0, 0x89D1, 0x89C9, 0x89C8, 0x89CC, 0x89C2, 0x89DE, 0x89EF, 0x89E6,
+ 0x8BA2, 0x8BA3, 0x8BA1, 0x8BAF, 0x8BA7, 0x8BA8, 0x8BA6, 0x8BAD, 0x8BAA,
+ 0x8BAB, 0x8BAC, 0x8BB0, 0x8BB9, 0x8BB6, 0x8BBC, 0x8BC0, 0x8BB7, 0x8BBF,
+ 0x8BBE, 0x8BB8, 0x8BC9, 0x8BC3, 0x8BCA, 0x8BC1, 0x8BC2, 0x8BCB, 0x8BB5,
+ 0x8BC8, 0x8BD2, 0x8BCF, 0x8BC4, 0x8BCE, 0x8BC5, 0x8BCD, 0x548F, 0x8BE9,
+ 0x8BE2, 0x8BE3, 0x8BD5, 0x8BD7, 0x8BE7, 0x8BDF, 0x8BE1, 0x8BE0, 0x8BD8,
+ 0x8BDD, 0x8BE5, 0x8BE6, 0x8BDC, 0x8BD9, 0x8BD6, 0x8BD4, 0x8BDB, 0x8BD3,
+ 0x5938, 0x5FD7, 0x8BA4, 0x8BF3, 0x8BF6, 0x8BDE, 0x8BF1, 0x8BEE, 0x8BED,
+ 0x8BDA, 0x8BEB, 0x8BEC, 0x8BEF, 0x8BF0, 0x8BF5, 0x8BF2, 0x8BF4, 0x8C01,
+ 0x8BFE, 0x8C07, 0x8BFD, 0x8C0A, 0x8C03, 0x8C04, 0x8C06, 0x8C08, 0x8BFF,
+ 0x8BF7, 0x8BE4, 0x8BF9, 0x8BFC, 0x8C05, 0x8BBA, 0x8C02, 0x8C00, 0x8C0D,
+ 0x8C1E, 0x8C1D, 0x8C25, 0x8BE8, 0x8C14, 0x8C1B, 0x8C10, 0x8C0F, 0x8C15,
+ 0x8C18, 0x8BB3, 0x8C19, 0x8C0C, 0x8BBD, 0x8BF8, 0x8C1A, 0x8C16, 0x8BFA,
+ 0x8C0B, 0x8C12, 0x8C13, 0x8A8A, 0x8BCC, 0x8C0E, 0x8C1C, 0x8C27, 0x8C11,
+ 0x8C21, 0x8C24, 0x8C26, 0x8BB2, 0x8C22, 0x8C23, 0x8C1F, 0x8C2A, 0x8C2C,
+ 0x8BB4, 0x8C28, 0x8C29, 0x8BC1, 0x8C32, 0x8BA5, 0x8C2E, 0x8BC6, 0x8C2F,
+ 0x8C2D, 0x8C31, 0x8C35, 0x8BD1, 0x8BAE, 0x8C34, 0x62A4, 0x8BEA, 0x8A89,
+ 0x8C2B, 0x8BFB, 0x53D8, 0x8A5F, 0x96E0, 0x8C17, 0x8BA9, 0x8C30, 0x8C36,
+ 0x8D5E, 0x8C20, 0x8C33, 0x5C82, 0x7AD6, 0x4E30, 0x732A, 0x8C6E, 0x732B,
+ 0x8D1D, 0x8D1E, 0x8D1F, 0x8D22, 0x8D21, 0x8D2B, 0x8D27, 0x8D29, 0x8D2A,
+ 0x8D2F, 0x8D23, 0x8D2E, 0x8D33, 0x8D40, 0x8D30, 0x8D35, 0x8D2C, 0x4E70,
+ 0x8D37, 0x8D36, 0x8D39, 0x8D34, 0x8D3B, 0x8D38, 0x8D3A, 0x8D32, 0x8D42,
+ 0x8D41, 0x8D3F, 0x8D45, 0x8D44, 0x8D3E, 0x8D3C, 0x8D48, 0x8D4A, 0x5BBE,
+ 0x8D47, 0x8D52, 0x8D49, 0x8D50, 0x8D4F, 0x8D54, 0x8D53, 0x8D24, 0x5356,
+ 0x8D31, 0x8D4B, 0x8D55, 0x8D28, 0x8D26, 0x8D4C, 0x8D56, 0x8D57, 0x8D5A,
+ 0x8D59, 0x8D2D, 0x8D5B, 0x8D5C, 0x8D3D, 0x8D58, 0x8D5F, 0x8D60, 0x8D5E,
+ 0x8D61, 0x8D62, 0x8D46, 0x8D43, 0x8D51, 0x8D4E, 0x8D5D, 0x8D63, 0x8D6A,
+ 0x8D76, 0x8D75, 0x8D8B, 0x8DB1, 0x8FF9, 0x8DF5, 0x8E0A, 0x8DC4, 0x8DF8,
+ 0x8DD6, 0x8E52, 0x8DF7, 0x8DF6, 0x8DB8, 0x8E0C, 0x8DFB, 0x8DC3, 0x8E2F,
+ 0x8DDE, 0x8E2C, 0x8E70, 0x8DF9, 0x8E51, 0x8E7F, 0x8E9C, 0x8E8F, 0x8EAF,
+ 0x8F66, 0x8F67, 0x8F68, 0x519B, 0x8F69, 0x8F6B, 0x8F6D, 0x8F6F, 0x8F78,
+ 0x8F71, 0x8F74, 0x8F75, 0x8F7A, 0x8F72, 0x8F76, 0x8F7C, 0x8F83, 0x8F82,
+ 0x8F81, 0x8F80, 0x8F7D, 0x8F7E, 0x8F84, 0x8F85, 0x8F7B, 0x8F86, 0x8F8E,
+ 0x8F89, 0x8F8B, 0x8F8D, 0x8F8A, 0x8F87, 0x8F88, 0x8F6E, 0x8F91, 0x8F8F,
+ 0x8F93, 0x8F90, 0x8F97, 0x8206, 0x8F92, 0x6BC2, 0x8F96, 0x8F95, 0x8F98,
+ 0x8F6C, 0x8F99, 0x8F7F, 0x8F9A, 0x8F70, 0x8F94, 0x8F79, 0x8F73, 0x529E,
+ 0x8F9E, 0x8FAB, 0x8FA9, 0x519C, 0x8FD9, 0x8FDE, 0x5468, 0x8FDB, 0x6E38,
+ 0x8FD0, 0x8FC7, 0x8FBE, 0x8FDD, 0x9065, 0x900A, 0x9012, 0x8FDC, 0x9002,
+ 0x8FDF, 0x8FC1, 0x9009, 0x9057, 0x8FBD, 0x8FC8, 0x8FD8, 0x8FE9, 0x8FB9,
+ 0x903B, 0x9026, 0x90CF, 0x90AE, 0x90D3, 0x4E61, 0x90B9, 0x90AC, 0x90E7,
+ 0x9093, 0x90D1, 0x90BB, 0x90F8, 0x90BA, 0x90D0, 0x909D, 0x9142, 0x90E6,
+ 0x814C, 0x4E11, 0x915D, 0x533B, 0x9171, 0x9166, 0x917F, 0x8845, 0x917E,
+ 0x917D, 0x91CA, 0x9487, 0x948C, 0x948A, 0x9489, 0x948B, 0x9488, 0x9493,
+ 0x9490, 0x948F, 0x9492, 0x948E, 0x9497, 0x948D, 0x9495, 0x94AF, 0x94AB,
+ 0x9498, 0x94AD, 0x94A0, 0x949D, 0x94A4, 0x94A3, 0x949E, 0x94AE, 0x94A7,
+ 0x9499, 0x949B, 0x94AA, 0x94CC, 0x94C8, 0x94B6, 0x94C3, 0x94B4, 0x94B9,
+ 0x94CD, 0x94B0, 0x94B8, 0x94C0, 0x94BF, 0x94BE, 0x949C, 0x94CA, 0x94C9,
+ 0x94C7, 0x94CB, 0x94C2, 0x94B3, 0x94C6, 0x94C5, 0x94BA, 0x94A9, 0x94B2,
+ 0x94BC, 0x94BD, 0x94CF, 0x94F0, 0x94D2, 0x94EC, 0x94EA, 0x94F6, 0x94F3,
+ 0x94DC, 0x94DA, 0x94E3, 0x94E8, 0x94E2, 0x94ED, 0x94EB, 0x94E6, 0x8854,
+ 0x94D1, 0x94F7, 0x94F1, 0x94DF, 0x94F5, 0x94D5, 0x94EF, 0x94D0, 0x9510,
+ 0x9500, 0x9508, 0x9511, 0x9509, 0x94DD, 0x9512, 0x950C, 0x94A1, 0x94E4,
+ 0x94D7, 0x950B, 0x950A, 0x9513, 0x9504, 0x9503, 0x9514, 0x9507, 0x94D3,
+ 0x94FA, 0x94D6, 0x9506, 0x9502, 0x952F, 0x94A2, 0x951E, 0x5F55, 0x9516,
+ 0x9529, 0x94D4, 0x9525, 0x9515, 0x951F, 0x9524, 0x9531, 0x94EE, 0x951B,
+ 0x952C, 0x952D, 0x951C, 0x94B1, 0x9526, 0x951A, 0x9520, 0x9521, 0x9522,
+ 0x9519, 0x9530, 0x8868, 0x94FC, 0x9528, 0x9494, 0x9534, 0x94FE, 0x9505,
+ 0x9540, 0x9537, 0x94E1, 0x9496, 0x953B, 0x953D, 0x9538, 0x9532, 0x9539,
+ 0x953E, 0x952E, 0x9536, 0x9517, 0x953A, 0x9541, 0x9551, 0x9555, 0x9501,
+ 0x9549, 0x9548, 0x9543, 0x94A8, 0x84E5, 0x954F, 0x94E0, 0x94E9, 0x953C,
+ 0x9550, 0x9547, 0x9552, 0x954D, 0x9553, 0x955E, 0x955F, 0x94FE, 0x9546,
+ 0x9559, 0x9560, 0x955D, 0x94FF, 0x9535, 0x9557, 0x9558, 0x955B, 0x94F2,
+ 0x955C, 0x9556, 0x9542, 0x933E, 0x955A, 0x94E7, 0x956A, 0x9508, 0x94D9,
+ 0x9563, 0x9566, 0x9561, 0x949F, 0x956B, 0x950F, 0x9544, 0x954C, 0x9570,
+ 0x956F, 0x956D, 0x94C1, 0x956E, 0x94CE, 0x94DB, 0x9571, 0x94F8, 0x956C,
+ 0x9554, 0x9274, 0x9527, 0x9574, 0x94C4, 0x9573, 0x9567, 0x94A5, 0x9575,
+ 0x9576, 0x954A, 0x9569, 0x9523, 0x94BB, 0x92AE, 0x51FF, 0x957F, 0x95E8,
+ 0x95E9, 0x95EA, 0x95EB, 0x95EC, 0x95ED, 0x5F00, 0x95F6, 0x95F3, 0x95F0,
+ 0x95F2, 0x95F4, 0x95F5, 0x95F8, 0x9602, 0x9601, 0x9600, 0x95FA, 0x95FD,
+ 0x9603, 0x9606, 0x95FE, 0x9605, 0x960A, 0x9609, 0x960E, 0x960F, 0x960D,
+ 0x9608, 0x960C, 0x9612, 0x677F, 0x6697, 0x95F1, 0x9614, 0x9615, 0x9611,
+ 0x9617, 0x9618, 0x95FF, 0x9616, 0x9619, 0x95EF, 0x5173, 0x961A, 0x9613,
+ 0x9610, 0x8F9F, 0x961B, 0x95FC, 0x9649, 0x9655, 0x9635, 0x9634, 0x9648,
+ 0x9646, 0x9633, 0x9667, 0x961F, 0x9636, 0x9668, 0x9645, 0x968F, 0x9669,
+ 0x9690, 0x9647, 0x96B6, 0x53EA, 0x96BD, 0x867D, 0x53CC, 0x96CF, 0x6742,
+ 0x9E21, 0x79BB, 0x96BE, 0x4E91, 0x7535, 0x9721, 0x96FE, 0x9701, 0x96F3,
+ 0x972D, 0x53C7, 0x7075, 0x53C6, 0x9753, 0x9759, 0x817C, 0x9765, 0x9F17,
+ 0x5DE9, 0x979F, 0x7F30, 0x9791, 0x97AF, 0x97E6, 0x97E7, 0x97E9, 0x97EA,
+ 0x97EC, 0x97EB, 0x97F5, 0x54CD, 0x9875, 0x9876, 0x9877, 0x9879, 0x987A,
+ 0x9878, 0x987B, 0x987C, 0x9882, 0x9880, 0x9883, 0x9884, 0x987D, 0x9881,
+ 0x987F, 0x9887, 0x9886, 0x988C, 0x9889, 0x9890, 0x988F, 0x5934, 0x988A,
+ 0x988B, 0x9894, 0x9888, 0x9893, 0x9891, 0x9897, 0x9898, 0x989D, 0x989A,
+ 0x989C, 0x9899, 0x989B, 0x613F, 0x98A1, 0x98A0, 0x7C7B, 0x989F, 0x98A2,
+ 0x987E, 0x98A4, 0x98A5, 0x663E, 0x98A6, 0x9885, 0x989E, 0x98A7, 0x98CE,
+ 0x98D0, 0x98D1, 0x98D2, 0x53F0, 0x98D3, 0x98D4, 0x98CF, 0x98D6, 0x98D5,
+ 0x98D7, 0x98D8, 0x98D9, 0x98DE, 0x9965, 0x9964, 0x9966, 0x9968, 0x996A,
+ 0x996B, 0x996C, 0x996D, 0x996E, 0x9974, 0x9972, 0x9971, 0x9970, 0x9973,
+ 0x997A, 0x9978, 0x997C, 0x9977, 0x517B, 0x9975, 0x9979, 0x997D, 0x9981,
+ 0x997F, 0x997E, 0x4F59, 0x80B4, 0x9984, 0x9983, 0x996F, 0x9985, 0x9986,
+ 0x7CC7, 0x9967, 0x5582, 0x9989, 0x998E, 0x9969, 0x998F, 0x998A, 0x998C,
+ 0x998D, 0x9992, 0x9990, 0x9991, 0x9988, 0x9994, 0x9976, 0x98E8, 0x990D,
+ 0x998B, 0x9A6C, 0x9A6D, 0x51AF, 0x9A6E, 0x9A70, 0x9A6F, 0x9A73, 0x9A7B,
+ 0x9A7D, 0x9A79, 0x9A75, 0x9A7E, 0x9A80, 0x9A78, 0x9A76, 0x9A7C, 0x9A77,
+ 0x9A88, 0x9A87, 0x9A83, 0x9A86, 0x9A8E, 0x9A8F, 0x9A8B, 0x9A8D, 0x9A93,
+ 0x9A92, 0x9A91, 0x9A90, 0x9A9B, 0x9A97, 0x9A99, 0x9A9E, 0x9A98, 0x9A9D,
+ 0x817E, 0x9A7A, 0x9A9A, 0x9A9F, 0x9AA1, 0x84E6, 0x9A9C, 0x9A96, 0x9AA0,
+ 0x9AA2, 0x9A71, 0x9A85, 0x9A95, 0x9A81, 0x9A84, 0x9A8C, 0x60CA, 0x9A7F,
+ 0x9AA4, 0x9A74, 0x9AA7, 0x9AA5, 0x9AA6, 0x9A8A, 0x80AE, 0x9AC5, 0x810F,
+ 0x4F53, 0x9ACC, 0x9ACB, 0x53D1, 0x677E, 0x80E1, 0x9B13, 0x6597, 0x95F9,
+ 0x960B, 0x9604, 0x90C1, 0x9B49, 0x9B47, 0x9C7C, 0x9C80, 0x9C81, 0x9C82,
+ 0x9C7F, 0x9C85, 0x9C86, 0x9C8F, 0x9C87, 0x9C90, 0x9C8D, 0x9C8B, 0x9C8A,
+ 0x9C92, 0x9C95, 0x9C96, 0x9C94, 0x9C9B, 0x9C91, 0x9C9C, 0x9CA7, 0x9CA0,
+ 0x9CA9, 0x9CA4, 0x9CA8, 0x9CBB, 0x9CAF, 0x9CAD, 0x9C9E, 0x9CB7, 0x9CB4,
+ 0x9CB1, 0x9CB5, 0x9CB2, 0x9CB3, 0x9CB8, 0x9CAE, 0x9CB0, 0x9CB6, 0x9CAB,
+ 0x9CCA, 0x9C97, 0x9CBD, 0x9CC7, 0x9CC5, 0x9CC6, 0x9CC3, 0x9CD2, 0x9CD1,
+ 0x9CA5, 0x9CCF, 0x9CCE, 0x9CD0, 0x9CCD, 0x9CC1, 0x9CA2, 0x9CCC, 0x9CA6,
+ 0x9CA3, 0x9CB9, 0x9CD7, 0x9CD4, 0x9CC9, 0x9CD5, 0x9CD6, 0x9CDF, 0x9CDD,
+ 0x9CDC, 0x9CDE, 0x9C9F, 0x9CBC, 0x9C8E, 0x9C99, 0x9CE3, 0x9CE2, 0x9C9A,
+ 0x9CC4, 0x9C88, 0x9CA1, 0x9E1F, 0x51EB, 0x9E20, 0x9E24, 0x51E4, 0x9E23,
+ 0x9E22, 0x9E29, 0x9E28, 0x9E26, 0x9E30, 0x9E35, 0x9E33, 0x9E32, 0x9E2E,
+ 0x9E31, 0x9E2A, 0x9E2F, 0x9E2D, 0x9E38, 0x9E39, 0x9E3B, 0x9E3F, 0x9E3D,
+ 0x9E3A, 0x9E43, 0x9E46, 0x9E41, 0x9E48, 0x9E45, 0x9E44, 0x9E49, 0x9E4C,
+ 0x9E4F, 0x9E4E, 0x9E4A, 0x9E53, 0x9E2B, 0x9E51, 0x9E4B, 0x9E59, 0x9E55,
+ 0x9E57, 0x9E56, 0x9E4D, 0x9E5B, 0x9E5C, 0x83BA, 0x9E5F, 0x9E64, 0x9E60,
+ 0x9E61, 0x9E58, 0x9E63, 0x9E5A, 0x9E62, 0x9E5E, 0x9E67, 0x9E65, 0x9E25,
+ 0x9E37, 0x9E68, 0x9E36, 0x9E6A, 0x9E54, 0x9E69, 0x9E6B, 0x9E47, 0x9E6C,
+ 0x9E70, 0x9E6D, 0x9E6F, 0x9E2C, 0x9E74, 0x9E66, 0x9E73, 0x9E42, 0x9E3E,
+ 0x5364, 0x9E7E, 0x7877, 0x76D0, 0x4E3D, 0x9EA6, 0x9EB8, 0x9EB9, 0x9762,
+ 0x4E48, 0x9EC4, 0x9EC9, 0x70B9, 0x515A, 0x9709, 0x9EE1, 0x9EE9, 0x9EFE,
+ 0x9F0B, 0x9F0D, 0x9F39, 0x9F50, 0x658B, 0x8D4D, 0x9F51, 0x9F7F, 0x9F80,
+ 0x9F81, 0x9F85, 0x9F87, 0x9F83, 0x9F86, 0x9F84, 0x9F88, 0x9F8A, 0x9F89,
+ 0x9F8B, 0x9F8C, 0x9F99, 0x5390, 0x5E9E, 0x9F9A, 0x9F9B, 0x9F9F, 0xA76F,
+ 0x8C48, 0x66F4, 0x8ECA, 0x8CC8, 0x6ED1, 0x4E32, 0x53E5, 0x9F9C, 0x9F9C,
+ 0x5951, 0x91D1, 0x5587, 0x5948, 0x61F6, 0x7669, 0x7F85, 0x863F, 0x87BA,
+ 0x88F8, 0x908F, 0x6A02, 0x6D1B, 0x70D9, 0x73DE, 0x843D, 0x916A, 0x99F1,
+ 0x4E82, 0x5375, 0x6B04, 0x721B, 0x862D, 0x9E1E, 0x5D50, 0x6FEB, 0x85CD,
+ 0x8964, 0x62C9, 0x81D8, 0x881F, 0x5ECA, 0x6717, 0x6D6A, 0x72FC, 0x90CE,
+ 0x4F86, 0x51B7, 0x52DE, 0x64C4, 0x6AD3, 0x7210, 0x76E7, 0x8001, 0x8606,
+ 0x865C, 0x8DEF, 0x9732, 0x9B6F, 0x9DFA, 0x788C, 0x797F, 0x7DA0, 0x83C9,
+ 0x9304, 0x9E7F, 0x8AD6, 0x58DF, 0x5F04, 0x7C60, 0x807E, 0x7262, 0x78CA,
+ 0x8CC2, 0x96F7, 0x58D8, 0x5C62, 0x6A13, 0x6DDA, 0x6F0F, 0x7D2F, 0x7E37,
+ 0x964B, 0x52D2, 0x808B, 0x51DC, 0x51CC, 0x7A1C, 0x7DBE, 0x83F1, 0x9675,
+ 0x8B80, 0x62CF, 0x6A02, 0x8AFE, 0x4E39, 0x5BE7, 0x6012, 0x7387, 0x7570,
+ 0x5317, 0x78FB, 0x4FBF, 0x5FA9, 0x4E0D, 0x6CCC, 0x6578, 0x7D22, 0x53C3,
+ 0x585E, 0x7701, 0x8449, 0x8AAA, 0x6BBA, 0x8FB0, 0x6C88, 0x62FE, 0x82E5,
+ 0x63A0, 0x7565, 0x4EAE, 0x5169, 0x51C9, 0x6881, 0x7CE7, 0x826F, 0x8AD2,
+ 0x91CF, 0x52F5, 0x5442, 0x5973, 0x5EEC, 0x65C5, 0x6FFE, 0x792A, 0x95AD,
+ 0x9A6A, 0x9E97, 0x9ECE, 0x529B, 0x66C6, 0x6B77, 0x8F62, 0x5E74, 0x6190,
+ 0x6200, 0x649A, 0x6F23, 0x7149, 0x7489, 0x79CA, 0x7DF4, 0x806F, 0x8F26,
+ 0x84EE, 0x9023, 0x934A, 0x5217, 0x52A3, 0x54BD, 0x70C8, 0x88C2, 0x8AAA,
+ 0x5EC9, 0x5FF5, 0x637B, 0x6BAE, 0x7C3E, 0x7375, 0x4EE4, 0x56F9, 0x5BE7,
+ 0x5DBA, 0x601C, 0x73B2, 0x7469, 0x7F9A, 0x8046, 0x9234, 0x96F6, 0x9748,
+ 0x9818, 0x4F8B, 0x79AE, 0x91B4, 0x96B8, 0x60E1, 0x4E86, 0x50DA, 0x5BEE,
+ 0x5C3F, 0x6599, 0x6A02, 0x71CE, 0x7642, 0x84FC, 0x907C, 0x9F8D, 0x6688,
+ 0x962E, 0x5289, 0x677B, 0x67F3, 0x6D41, 0x6E9C, 0x7409, 0x7559, 0x786B,
+ 0x7D10, 0x985E, 0x516D, 0x622E, 0x9678, 0x502B, 0x5D19, 0x6DEA, 0x8F2A,
+ 0x5F8B, 0x6144, 0x6817, 0x7387, 0x9686, 0x5229, 0x540F, 0x5C65, 0x6613,
+ 0x674E, 0x68A8, 0x6CE5, 0x7406, 0x75E2, 0x7F79, 0x88CF, 0x88E1, 0x91CC,
+ 0x96E2, 0x533F, 0x6EBA, 0x541D, 0x71D0, 0x7498, 0x85FA, 0x96A3, 0x9C57,
+ 0x9E9F, 0x6797, 0x6DCB, 0x81E8, 0x7ACB, 0x7B20, 0x7C92, 0x72C0, 0x7099,
+ 0x8B58, 0x4EC0, 0x8336, 0x523A, 0x5207, 0x5EA6, 0x62D3, 0x7CD6, 0x5B85,
+ 0x6D1E, 0x66B4, 0x8F3B, 0x884C, 0x964D, 0x898B, 0x5ED3, 0x5140, 0x55C0,
+ 0x585A, 0x6674, 0x51DE, 0x732A, 0x76CA, 0x793C, 0x795E, 0x7965, 0x798F,
+ 0x9756, 0x7CBE, 0x7FBD, 0x8612, 0x8AF8, 0x9038, 0x90FD, 0x98EF, 0x98FC,
+ 0x9928, 0x9DB4, 0x4FAE, 0x50E7, 0x514D, 0x52C9, 0x52E4, 0x5351, 0x559D,
+ 0x5606, 0x5668, 0x5840, 0x58A8, 0x5C64, 0x5C6E, 0x6094, 0x6168, 0x618E,
+ 0x61F2, 0x654F, 0x65E2, 0x6691, 0x6885, 0x6D77, 0x6E1A, 0x6F22, 0x716E,
+ 0x722B, 0x7422, 0x7891, 0x793E, 0x7949, 0x7948, 0x7950, 0x7956, 0x795D,
+ 0x798D, 0x798E, 0x7A40, 0x7A81, 0x7BC0, 0x7DF4, 0x7E09, 0x7E41, 0x7F72,
+ 0x8005, 0x81ED, 0x8279, 0x8279, 0x8457, 0x8910, 0x8996, 0x8B01, 0x8B39,
+ 0x8CD3, 0x8D08, 0x8FB6, 0x9038, 0x96E3, 0x97FF, 0x983B, 0x6075, 0x8218,
+ 0x4E26, 0x51B5, 0x5168, 0x4F80, 0x5145, 0x5180, 0x52C7, 0x52FA, 0x559D,
+ 0x5555, 0x5599, 0x55E2, 0x585A, 0x58B3, 0x5944, 0x5954, 0x5A62, 0x5B28,
+ 0x5ED2, 0x5ED9, 0x5F69, 0x5FAD, 0x60D8, 0x614E, 0x6108, 0x618E, 0x6160,
+ 0x61F2, 0x6234, 0x63C4, 0x641C, 0x6452, 0x6556, 0x6674, 0x6717, 0x671B,
+ 0x6756, 0x6B79, 0x6BBA, 0x6D41, 0x6EDB, 0x6ECB, 0x6F22, 0x701E, 0x716E,
+ 0x77A7, 0x7235, 0x72AF, 0x732A, 0x7471, 0x7506, 0x753B, 0x761D, 0x761F,
+ 0x76CA, 0x76DB, 0x76F4, 0x774A, 0x7740, 0x78CC, 0x7AB1, 0x7BC0, 0x7C7B,
+ 0x7D5B, 0x7DF4, 0x7F3E, 0x8005, 0x8352, 0x83EF, 0x8779, 0x8941, 0x8986,
+ 0x8996, 0x8ABF, 0x8AF8, 0x8ACB, 0x8B01, 0x8AFE, 0x8AED, 0x8B39, 0x8B8A,
+ 0x8D08, 0x8F38, 0x9072, 0x9199, 0x9276, 0x967C, 0x96E3, 0x9756, 0x97DB,
+ 0x97FF, 0x980B, 0x983B, 0x9B12, 0x9F9C, 0x3B9D, 0x4018, 0x4039, 0x9F43,
+ 0x9F8E, 0x05E2, 0x05D0, 0x05D3, 0x05D4, 0x05DB, 0x05DC, 0x05DD, 0x05E8,
+ 0x05EA, 0x002B, 0x0671, 0x0671, 0x067B, 0x067B, 0x067B, 0x067B, 0x067E,
+ 0x067E, 0x067E, 0x067E, 0x0680, 0x0680, 0x0680, 0x0680, 0x067A, 0x067A,
+ 0x067A, 0x067A, 0x067F, 0x067F, 0x067F, 0x067F, 0x0679, 0x0679, 0x0679,
+ 0x0679, 0x06A4, 0x06A4, 0x06A4, 0x06A4, 0x06A6, 0x06A6, 0x06A6, 0x06A6,
+ 0x0684, 0x0684, 0x0684, 0x0684, 0x0683, 0x0683, 0x0683, 0x0683, 0x0686,
+ 0x0686, 0x0686, 0x0686, 0x0687, 0x0687, 0x0687, 0x0687, 0x068D, 0x068D,
+ 0x068C, 0x068C, 0x068E, 0x068E, 0x0688, 0x0688, 0x0698, 0x0698, 0x0691,
+ 0x0691, 0x06A9, 0x06A9, 0x06A9, 0x06A9, 0x06AF, 0x06AF, 0x06AF, 0x06AF,
+ 0x06B3, 0x06B3, 0x06B3, 0x06B3, 0x06B1, 0x06B1, 0x06B1, 0x06B1, 0x06BA,
+ 0x06BA, 0x06BB, 0x06BB, 0x06BB, 0x06BB, 0x06C0, 0x06C0, 0x06C1, 0x06C1,
+ 0x06C1, 0x06C1, 0x06BE, 0x06BE, 0x06BE, 0x06BE, 0x06D2, 0x06D2, 0x06D3,
+ 0x06D3, 0x06AD, 0x06AD, 0x06AD, 0x06AD, 0x06C7, 0x06C7, 0x06C6, 0x06C6,
+ 0x06C8, 0x06C8, 0x0677, 0x06CB, 0x06CB, 0x06C5, 0x06C5, 0x06C9, 0x06C9,
+ 0x06D0, 0x06D0, 0x06D0, 0x06D0, 0x0649, 0x0649, 0x06CC, 0x06CC, 0x06CC,
+ 0x06CC, 0x002C, 0x3001, 0x3002, 0x003A, 0x003B, 0x0021, 0x003F, 0x3016,
+ 0x3017, 0x2026, 0x2025, 0x2014, 0x2013, 0x005F, 0x005F, 0x0028, 0x0029,
+ 0x007B, 0x007D, 0x3014, 0x3015, 0x3010, 0x3011, 0x300A, 0x300B, 0x3008,
+ 0x3009, 0x300C, 0x300D, 0x300E, 0x300F, 0x005B, 0x005D, 0x203E, 0x203E,
+ 0x203E, 0x203E, 0x005F, 0x005F, 0x005F, 0x002C, 0x3001, 0x002E, 0x003B,
+ 0x003A, 0x003F, 0x0021, 0x2014, 0x0028, 0x0029, 0x007B, 0x007D, 0x3014,
+ 0x3015, 0x0023, 0x0026, 0x002A, 0x002B, 0x002D, 0x003C, 0x003E, 0x003D,
+ 0x005C, 0x0024, 0x0025, 0x0040, 0x064B, 0x064C, 0x064D, 0x064E, 0x064F,
+ 0x0650, 0x0651, 0x0652, 0x0621, 0x0622, 0x0622, 0x0623, 0x0623, 0x0624,
+ 0x0624, 0x0625, 0x0625, 0x0626, 0x0626, 0x0626, 0x0626, 0x0627, 0x0627,
+ 0x0628, 0x0628, 0x0628, 0x0628, 0x0629, 0x0629, 0x062A, 0x062A, 0x062A,
+ 0x062A, 0x062B, 0x062B, 0x062B, 0x062B, 0x062C, 0x062C, 0x062C, 0x062C,
+ 0x062D, 0x062D, 0x062D, 0x062D, 0x062E, 0x062E, 0x062E, 0x062E, 0x062F,
+ 0x062F, 0x0630, 0x0630, 0x0631, 0x0631, 0x0632, 0x0632, 0x0633, 0x0633,
+ 0x0633, 0x0633, 0x0634, 0x0634, 0x0634, 0x0634, 0x0635, 0x0635, 0x0635,
+ 0x0635, 0x0636, 0x0636, 0x0636, 0x0636, 0x0637, 0x0637, 0x0637, 0x0637,
+ 0x0638, 0x0638, 0x0638, 0x0638, 0x0639, 0x0639, 0x0639, 0x0639, 0x063A,
+ 0x063A, 0x063A, 0x063A, 0x0641, 0x0641, 0x0641, 0x0641, 0x0642, 0x0642,
+ 0x0642, 0x0642, 0x0643, 0x0643, 0x0643, 0x0643, 0x0644, 0x0644, 0x0644,
+ 0x0644, 0x0645, 0x0645, 0x0645, 0x0645, 0x0646, 0x0646, 0x0646, 0x0646,
+ 0x0647, 0x0647, 0x0647, 0x0647, 0x0648, 0x0648, 0x0649, 0x0649, 0x064A,
+ 0x064A, 0x064A, 0x064A, 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, 0x2985, 0x2986,
+ 0x3002, 0x300C, 0x300D, 0x3001, 0x30FB, 0x30F2, 0x30A1, 0x30A3, 0x30A5,
+ 0x30A7, 0x30A9, 0x30E3, 0x30E5, 0x30E7, 0x30C3, 0x30FC, 0x30A2, 0x30A4,
+ 0x30A6, 0x30A8, 0x30AA, 0x30AB, 0x30AD, 0x30AF, 0x30B1, 0x30B3, 0x30B5,
+ 0x30B7, 0x30B9, 0x30BB, 0x30BD, 0x30BF, 0x30C1, 0x30C4, 0x30C6, 0x30C8,
+ 0x30CA, 0x30CB, 0x30CC, 0x30CD, 0x30CE, 0x30CF, 0x30D2, 0x30D5, 0x30D8,
+ 0x30DB, 0x30DE, 0x30DF, 0x30E0, 0x30E1, 0x30E2, 0x30E4, 0x30E6, 0x30E8,
+ 0x30E9, 0x30EA, 0x30EB, 0x30EC, 0x30ED, 0x30EF, 0x30F3, 0x3099, 0x309A,
+ 0x3164, 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, 0x00A2, 0x00A3,
+ 0x00AC, 0x00AF, 0x00A6, 0x00A5, 0x20A9, 0x2502, 0x2190, 0x2191, 0x2192,
+ 0x2193, 0x25A0, 0x25CB};
extern const FX_WCHAR g_UnicodeData_Normalization_Map2[1724] = {
- 0x004F, 0x0045, 0x0054, 0x004D, 0x006F, 0x0065, 0x0049, 0x004A, 0x0069, 0x006A, 0x004F, 0x0045, 0x006F, 0x0065, 0x0044, 0x017D,
- 0x0044, 0x017E, 0x0064, 0x017E, 0x004C, 0x004A, 0x004C, 0x006A, 0x006C, 0x006A, 0x004E, 0x004A, 0x004E, 0x006A, 0x006E, 0x006A,
- 0x0044, 0x005A, 0x0044, 0x007A, 0x0064, 0x007A, 0x0064, 0x0062, 0x0071, 0x0070, 0x004F, 0x0045, 0x0064, 0x007A, 0x0064, 0x0292,
- 0x0064, 0x007A, 0x0074, 0x0073, 0x0074, 0x0283, 0x0074, 0x0063, 0x0066, 0x014B, 0x006C, 0x0073, 0x006C, 0x007A, 0x041D, 0x0413,
- 0x043D, 0x0433, 0x0422, 0x0426, 0x0442, 0x0446, 0x0410, 0x0415, 0x0430, 0x0435, 0x0565, 0x0582, 0x0627, 0x0674, 0x0648, 0x0674,
- 0x06C7, 0x0674, 0x064A, 0x0674, 0x06D5, 0x0654, 0x06C1, 0x0654, 0x06D2, 0x0654, 0x0928, 0x093C, 0x0930, 0x093C, 0x0933, 0x093C,
- 0x0915, 0x093C, 0x0916, 0x093C, 0x0917, 0x093C, 0x091C, 0x093C, 0x0921, 0x093C, 0x0922, 0x093C, 0x092B, 0x093C, 0x092F, 0x093C,
- 0x09C7, 0x09BE, 0x09C7, 0x09D7, 0x09A1, 0x09BC, 0x09A2, 0x09BC, 0x09AF, 0x09BC, 0x0A32, 0x0A3C, 0x0A38, 0x0A3C, 0x0A16, 0x0A3C,
- 0x0A17, 0x0A3C, 0x0A1C, 0x0A3C, 0x0A2B, 0x0A3C, 0x0B47, 0x0B56, 0x0B47, 0x0B3E, 0x0B47, 0x0B57, 0x0B21, 0x0B3C, 0x0B22, 0x0B3C,
- 0x0B92, 0x0BD7, 0x0BC6, 0x0BBE, 0x0BC7, 0x0BBE, 0x0BC6, 0x0BD7, 0x0C46, 0x0C56, 0x0CBF, 0x0CD5, 0x0CC6, 0x0CD5, 0x0CC6, 0x0CD6,
- 0x0CC6, 0x0CC2, 0x0CCA, 0x0CD5, 0x0D46, 0x0D3E, 0x0D47, 0x0D3E, 0x0D46, 0x0D57, 0x0DD9, 0x0DCA, 0x0DD9, 0x0DCF, 0x0DDC, 0x0DCA,
- 0x0DD9, 0x0DDF, 0x0E4D, 0x0E32, 0x0ECD, 0x0EB2, 0x0EAB, 0x0E99, 0x0EAB, 0x0EA1, 0x0F42, 0x0FB7, 0x0F4C, 0x0FB7, 0x0F51, 0x0FB7,
- 0x0F56, 0x0FB7, 0x0F5B, 0x0FB7, 0x0F40, 0x0FB5, 0x0F71, 0x0F72, 0x0F71, 0x0F74, 0x0FB2, 0x0F80, 0x0FB2, 0x0F81, 0x0FB3, 0x0F80,
- 0x0FB3, 0x0F81, 0x0F71, 0x0F80, 0x0F92, 0x0FB7, 0x0F9C, 0x0FB7, 0x0FA1, 0x0FB7, 0x0FA6, 0x0FB7, 0x0FAB, 0x0FB7, 0x0F90, 0x0FB5,
- 0x1025, 0x102E, 0x1B05, 0x1B35, 0x1B07, 0x1B35, 0x1B09, 0x1B35, 0x1B0B, 0x1B35, 0x1B0D, 0x1B35, 0x1B11, 0x1B35, 0x1B3A, 0x1B35,
- 0x1B3C, 0x1B35, 0x1B3E, 0x1B35, 0x1B3F, 0x1B35, 0x1B42, 0x1B35, 0x0074, 0x0068, 0x002E, 0x002E, 0x2032, 0x2032, 0x2035, 0x2035,
- 0x0021, 0x0021, 0x0020, 0x0305, 0x003F, 0x003F, 0x003F, 0x0021, 0x0021, 0x003F, 0x0052, 0x0073, 0x00B0, 0x0043, 0x00B0, 0x0046,
- 0x004E, 0x006F, 0x0053, 0x004D, 0x0054, 0x004D, 0x0031, 0x002F, 0x0049, 0x0049, 0x0049, 0x0056, 0x0056, 0x0049, 0x0049, 0x0058,
- 0x0058, 0x0049, 0x0069, 0x0069, 0x0069, 0x0076, 0x0076, 0x0069, 0x0069, 0x0078, 0x0078, 0x0069, 0x2190, 0x0338, 0x2192, 0x0338,
- 0x2194, 0x0338, 0x21D0, 0x0338, 0x21D4, 0x0338, 0x21D2, 0x0338, 0x2223, 0x0338, 0x2225, 0x0338, 0x222B, 0x222B, 0x222E, 0x222E,
- 0x223C, 0x0338, 0x2243, 0x0338, 0x2245, 0x0338, 0x2248, 0x0338, 0x003D, 0x002F, 0x2261, 0x002F, 0x224D, 0x002F, 0x003C, 0x002F,
- 0x003E, 0x002F, 0x2264, 0x002F, 0x2265, 0x002F, 0x2272, 0x002F, 0x2273, 0x002F, 0x2276, 0x002F, 0x2277, 0x002F, 0x227A, 0x002F,
- 0x227B, 0x002F, 0x2282, 0x002F, 0x2283, 0x002F, 0x2286, 0x002F, 0x2287, 0x002F, 0x22A2, 0x002F, 0x22A8, 0x002F, 0x22A9, 0x002F,
- 0x22AB, 0x002F, 0x227C, 0x002F, 0x227D, 0x002F, 0x2291, 0x002F, 0x2292, 0x002F, 0x22B2, 0x002F, 0x22B3, 0x002F, 0x22B4, 0x002F,
- 0x22B5, 0x002F, 0x0042, 0x0053, 0x0048, 0x0054, 0x004C, 0x0046, 0x0056, 0x0054, 0x0046, 0x0046, 0x0043, 0x0052, 0x0053, 0x0053,
- 0x0053, 0x0049, 0x0045, 0x004D, 0x0046, 0x0053, 0x0047, 0x0053, 0x0052, 0x0053, 0x0055, 0x0053, 0x0053, 0x0050, 0x0031, 0x0030,
- 0x0031, 0x0031, 0x0031, 0x0032, 0x0031, 0x0033, 0x0031, 0x0034, 0x0031, 0x0035, 0x0031, 0x0036, 0x0031, 0x0037, 0x0031, 0x0038,
- 0x0031, 0x0039, 0x0032, 0x0030, 0x0031, 0x002E, 0x0032, 0x002E, 0x0033, 0x002E, 0x0034, 0x002E, 0x0035, 0x002E, 0x0036, 0x002E,
- 0x0037, 0x002E, 0x0038, 0x002E, 0x0039, 0x002E, 0x0031, 0x0031, 0x0031, 0x0032, 0x0031, 0x0033, 0x0031, 0x0034, 0x0031, 0x0035,
- 0x0031, 0x0036, 0x0031, 0x0037, 0x0031, 0x0038, 0x0031, 0x0039, 0x0032, 0x0030, 0x0031, 0x0030, 0x0031, 0x0030, 0x0031, 0x0030,
- 0x0031, 0x0030, 0x003D, 0x003D, 0x2ADD, 0x002F, 0x304B, 0x3099, 0x304D, 0x3099, 0x304F, 0x3099, 0x3051, 0x3099, 0x3053, 0x3099,
- 0x3055, 0x3099, 0x3057, 0x3099, 0x3059, 0x3099, 0x305B, 0x3099, 0x305D, 0x3099, 0x305F, 0x3099, 0x3061, 0x3099, 0x3064, 0x3099,
- 0x3066, 0x3099, 0x3068, 0x3099, 0x306F, 0x3099, 0x306F, 0x309A, 0x3072, 0x3099, 0x3072, 0x309A, 0x3075, 0x3099, 0x3075, 0x309A,
- 0x3078, 0x3099, 0x3078, 0x309A, 0x307B, 0x3099, 0x307B, 0x309A, 0x3046, 0x3099, 0x0020, 0x3099, 0x0020, 0x309A, 0x309D, 0x3099,
- 0x3088, 0x308A, 0x30AB, 0x3099, 0x30AD, 0x3099, 0x30AF, 0x3099, 0x30B1, 0x3099, 0x30B3, 0x3099, 0x30B5, 0x3099, 0x30B7, 0x3099,
- 0x30B9, 0x3099, 0x30BB, 0x3099, 0x30BD, 0x3099, 0x30BF, 0x3099, 0x30C1, 0x3099, 0x30C4, 0x3099, 0x30C6, 0x3099, 0x30C8, 0x3099,
- 0x30CF, 0x3099, 0x30CF, 0x309A, 0x30D2, 0x3099, 0x30D2, 0x309A, 0x30D5, 0x3099, 0x30D5, 0x309A, 0x30D8, 0x3099, 0x30D8, 0x309A,
- 0x30DB, 0x3099, 0x30DB, 0x309A, 0x30A6, 0x3099, 0x30EF, 0x3099, 0x30F0, 0x3099, 0x30F1, 0x3099, 0x30F2, 0x3099, 0x30FD, 0x3099,
- 0x30B3, 0x30C8, 0x0032, 0x0031, 0x0032, 0x0032, 0x0032, 0x0033, 0x0032, 0x0034, 0x0032, 0x0035, 0x0032, 0x0036, 0x0032, 0x0037,
- 0x0032, 0x0038, 0x0032, 0x0039, 0x0033, 0x0030, 0x0033, 0x0031, 0x0033, 0x0032, 0x0033, 0x0033, 0x0033, 0x0034, 0x0033, 0x0035,
- 0x1100, 0x1161, 0x1102, 0x1161, 0x1103, 0x1161, 0x1105, 0x1161, 0x1106, 0x1161, 0x1107, 0x1161, 0x1109, 0x1161, 0x110B, 0x1161,
- 0x110C, 0x1161, 0x110E, 0x1161, 0x110F, 0x1161, 0x1110, 0x1161, 0x1111, 0x1161, 0x1112, 0x1161, 0x110B, 0x116E, 0x0033, 0x0036,
- 0x0033, 0x0037, 0x0033, 0x0038, 0x0033, 0x0039, 0x0034, 0x0030, 0x0034, 0x0031, 0x0034, 0x0032, 0x0034, 0x0033, 0x0034, 0x0034,
- 0x0034, 0x0035, 0x0034, 0x0036, 0x0034, 0x0037, 0x0034, 0x0038, 0x0034, 0x0039, 0x0035, 0x0030, 0x0031, 0x6708, 0x0032, 0x6708,
- 0x0033, 0x6708, 0x0034, 0x6708, 0x0035, 0x6708, 0x0036, 0x6708, 0x0037, 0x6708, 0x0038, 0x6708, 0x0039, 0x6708, 0x0048, 0x0067,
- 0x0065, 0x0056, 0x30AE, 0x30AC, 0x30AD, 0x30ED, 0x30C7, 0x30B7, 0x30C9, 0x30EB, 0x30C8, 0x30F3, 0x30CA, 0x30CE, 0x30D4, 0x30B3,
- 0x30D3, 0x30EB, 0x30DA, 0x30BD, 0x30DB, 0x30F3, 0x30DF, 0x30EA, 0x30E1, 0x30AC, 0x30EA, 0x30E9, 0x30EC, 0x30E0, 0x0030, 0x70B9,
- 0x0031, 0x70B9, 0x0032, 0x70B9, 0x0033, 0x70B9, 0x0034, 0x70B9, 0x0035, 0x70B9, 0x0036, 0x70B9, 0x0037, 0x70B9, 0x0038, 0x70B9,
- 0x0039, 0x70B9, 0x0064, 0x0061, 0x0041, 0x0055, 0x006F, 0x0056, 0x0070, 0x0063, 0x0064, 0x006D, 0x0049, 0x0055, 0x5E73, 0x6210,
- 0x662D, 0x548C, 0x5927, 0x6B63, 0x660E, 0x6CBB, 0x0070, 0x0041, 0x006E, 0x0041, 0x03BC, 0x0041, 0x006D, 0x0041, 0x006B, 0x0041,
- 0x004B, 0x0042, 0x004D, 0x0042, 0x0047, 0x0042, 0x0070, 0x0046, 0x006E, 0x0046, 0x03BC, 0x0046, 0x03BC, 0x0067, 0x006D, 0x0067,
- 0x006B, 0x0067, 0x0048, 0x007A, 0x03BC, 0x2113, 0x006D, 0x2113, 0x0064, 0x2113, 0x006B, 0x2113, 0x0066, 0x006D, 0x006E, 0x006D,
- 0x03BC, 0x006D, 0x006D, 0x006D, 0x0063, 0x006D, 0x006B, 0x006D, 0x006D, 0x00B2, 0x006D, 0x00B3, 0x0050, 0x0061, 0x0070, 0x0073,
- 0x006E, 0x0073, 0x03BC, 0x0073, 0x006D, 0x0073, 0x0070, 0x0056, 0x006E, 0x0056, 0x03BC, 0x0056, 0x006D, 0x0056, 0x006B, 0x0056,
- 0x004D, 0x0056, 0x0070, 0x0057, 0x006E, 0x0057, 0x03BC, 0x0057, 0x006D, 0x0057, 0x006B, 0x0057, 0x004D, 0x0057, 0x006B, 0x03A9,
- 0x004D, 0x03A9, 0x0042, 0x0071, 0x0063, 0x0063, 0x0063, 0x0064, 0x0064, 0x0042, 0x0047, 0x0079, 0x0068, 0x0061, 0x0048, 0x0050,
- 0x0069, 0x006E, 0x004B, 0x004B, 0x004B, 0x004D, 0x006B, 0x0074, 0x006C, 0x006D, 0x006C, 0x006E, 0x006C, 0x0078, 0x006D, 0x0062,
- 0x0050, 0x0048, 0x0050, 0x0052, 0x0073, 0x0072, 0x0053, 0x0076, 0x0057, 0x0062, 0x0031, 0x65E5, 0x0032, 0x65E5, 0x0033, 0x65E5,
- 0x0034, 0x65E5, 0x0035, 0x65E5, 0x0036, 0x65E5, 0x0037, 0x65E5, 0x0038, 0x65E5, 0x0039, 0x65E5, 0x0066, 0x0066, 0x0066, 0x0069,
- 0x0066, 0x006C, 0x017F, 0x0074, 0x0073, 0x0074, 0x0574, 0x0576, 0x0574, 0x0565, 0x0574, 0x056B, 0x057E, 0x0576, 0x0574, 0x056D,
- 0x05D9, 0x05B4, 0x05F2, 0x05B7, 0x05E9, 0x05C1, 0x05E9, 0x05C2, 0xFB49, 0x05C1, 0xFB49, 0x05C2, 0x05D0, 0x05B7, 0x05D0, 0x05B8,
- 0x05D0, 0x05BC, 0x05D1, 0x05BC, 0x05D2, 0x05BC, 0x05D3, 0x05BC, 0x05D4, 0x05BC, 0x05D5, 0x05BC, 0x05D6, 0x05BC, 0x05D8, 0x05BC,
- 0x05D9, 0x05BC, 0x05DA, 0x05BC, 0x05DB, 0x05BC, 0x05DC, 0x05BC, 0x05DE, 0x05BC, 0x05E0, 0x05BC, 0x05E1, 0x05BC, 0x05E3, 0x05BC,
- 0x05E4, 0x05BC, 0x05E6, 0x05BC, 0x05E7, 0x05BC, 0x05E8, 0x05BC, 0x05E9, 0x05BC, 0x05EA, 0x05BC, 0x05D5, 0x05B9, 0x05D1, 0x05BF,
- 0x05DB, 0x05BF, 0x05E4, 0x05BF, 0x05D0, 0x05DC, 0x0626, 0x0627, 0x0626, 0x0627, 0x0626, 0x06D5, 0x0626, 0x06D5, 0x0626, 0x0648,
- 0x0626, 0x0648, 0x0626, 0x06C7, 0x0626, 0x06C7, 0x0626, 0x06C6, 0x0626, 0x06C6, 0x0626, 0x06C8, 0x0626, 0x06C8, 0x0626, 0x06D0,
- 0x0626, 0x06D0, 0x0626, 0x06D0, 0x0626, 0x0649, 0x0626, 0x0649, 0x0626, 0x0649, 0x0626, 0x062C, 0x0626, 0x062D, 0x0626, 0x0645,
- 0x0626, 0x0649, 0x0626, 0x064A, 0x0628, 0x062C, 0x0628, 0x062D, 0x0628, 0x062E, 0x0628, 0x0645, 0x0628, 0x0649, 0x0628, 0x064A,
- 0x062A, 0x062C, 0x062A, 0x062D, 0x062A, 0x062E, 0x062A, 0x0645, 0x062A, 0x0649, 0x062A, 0x064A, 0x062B, 0x062C, 0x062B, 0x0645,
- 0x062B, 0x0649, 0x062B, 0x064A, 0x062C, 0x062D, 0x062C, 0x0645, 0x062D, 0x062C, 0x062D, 0x0645, 0x062E, 0x062C, 0x062E, 0x062D,
- 0x062E, 0x0645, 0x0633, 0x062C, 0x0633, 0x062D, 0x0633, 0x062E, 0x0633, 0x0645, 0x0635, 0x062D, 0x0635, 0x0645, 0x0636, 0x062C,
- 0x0636, 0x062D, 0x0636, 0x062E, 0x0636, 0x0645, 0x0637, 0x062D, 0x0637, 0x0645, 0x0638, 0x0645, 0x0639, 0x062C, 0x0639, 0x0645,
- 0x063A, 0x062C, 0x063A, 0x0645, 0x0641, 0x062C, 0x0641, 0x062D, 0x0641, 0x062E, 0x0641, 0x0645, 0x0641, 0x0649, 0x0641, 0x064A,
- 0x0642, 0x062D, 0x0642, 0x0645, 0x0642, 0x0649, 0x0642, 0x064A, 0x0643, 0x0627, 0x0643, 0x062C, 0x0643, 0x062D, 0x0643, 0x062E,
- 0x0643, 0x0644, 0x0643, 0x0645, 0x0643, 0x0649, 0x0643, 0x064A, 0x0644, 0x062C, 0x0644, 0x062D, 0x0644, 0x062E, 0x0644, 0x0645,
- 0x0644, 0x0649, 0x0644, 0x064A, 0x0645, 0x062C, 0x0645, 0x062D, 0x0645, 0x062E, 0x0645, 0x0645, 0x0645, 0x0649, 0x0645, 0x064A,
- 0x0646, 0x062C, 0x0646, 0x062D, 0x0646, 0x062E, 0x0646, 0x0645, 0x0646, 0x0649, 0x0646, 0x064A, 0x0647, 0x062C, 0x0647, 0x0645,
- 0x0647, 0x0649, 0x0647, 0x064A, 0x064A, 0x062C, 0x064A, 0x062D, 0x064A, 0x062E, 0x064A, 0x0645, 0x064A, 0x0649, 0x064A, 0x064A,
- 0x0630, 0x0670, 0x0631, 0x0670, 0x0649, 0x0670, 0x064C, 0x0651, 0x064D, 0x0651, 0x064E, 0x0651, 0x064F, 0x0651, 0x0650, 0x0651,
- 0x0651, 0x0670, 0x0626, 0x0631, 0x0626, 0x0632, 0x0626, 0x0645, 0x0626, 0x0646, 0x0626, 0x0649, 0x0626, 0x064A, 0x0628, 0x0631,
- 0x0628, 0x0632, 0x0628, 0x0645, 0x0628, 0x0646, 0x0628, 0x0649, 0x0628, 0x064A, 0x062A, 0x0631, 0x062A, 0x0632, 0x062A, 0x0645,
- 0x062A, 0x0646, 0x062A, 0x0649, 0x062A, 0x064A, 0x062B, 0x0631, 0x062B, 0x0632, 0x062B, 0x0645, 0x062B, 0x0646, 0x062B, 0x0649,
- 0x062B, 0x064A, 0x0641, 0x0649, 0x0641, 0x064A, 0x0642, 0x0649, 0x0642, 0x064A, 0x0643, 0x0627, 0x0643, 0x0644, 0x0643, 0x0645,
- 0x0643, 0x0649, 0x0643, 0x064A, 0x0644, 0x0645, 0x0644, 0x0649, 0x0644, 0x064A, 0x0645, 0x0627, 0x0645, 0x0645, 0x0646, 0x0631,
- 0x0646, 0x0632, 0x0646, 0x0645, 0x0646, 0x0646, 0x0646, 0x0649, 0x0646, 0x064A, 0x0649, 0x0670, 0x064A, 0x0631, 0x064A, 0x0632,
- 0x064A, 0x0645, 0x064A, 0x0646, 0x064A, 0x0649, 0x064A, 0x064A, 0x0626, 0x062C, 0x0626, 0x062D, 0x0626, 0x062E, 0x0626, 0x0645,
- 0x0626, 0x0647, 0x0628, 0x062C, 0x0628, 0x062D, 0x0628, 0x062E, 0x0628, 0x0645, 0x0628, 0x0647, 0x062A, 0x062C, 0x062A, 0x062D,
- 0x062A, 0x062E, 0x062A, 0x0645, 0x062A, 0x0647, 0x062B, 0x0645, 0x062C, 0x062D, 0x062C, 0x0645, 0x062D, 0x062C, 0x062D, 0x0645,
- 0x062E, 0x062C, 0x062E, 0x0645, 0x0633, 0x062C, 0x0633, 0x062D, 0x0633, 0x062E, 0x0633, 0x0645, 0x0635, 0x062D, 0x0635, 0x062E,
- 0x0635, 0x0645, 0x0636, 0x062C, 0x0636, 0x062D, 0x0636, 0x062E, 0x0636, 0x0645, 0x0637, 0x062D, 0x0638, 0x0645, 0x0639, 0x062C,
- 0x0639, 0x0645, 0x063A, 0x062C, 0x063A, 0x0645, 0x0641, 0x062C, 0x0641, 0x062D, 0x0641, 0x062E, 0x0641, 0x0645, 0x0642, 0x062D,
- 0x0642, 0x0645, 0x0643, 0x062C, 0x0643, 0x062D, 0x0643, 0x062E, 0x0643, 0x0644, 0x0643, 0x0645, 0x0644, 0x062C, 0x0644, 0x062D,
- 0x0644, 0x062E, 0x0644, 0x0645, 0x0644, 0x0647, 0x0645, 0x062C, 0x0645, 0x062D, 0x0645, 0x062E, 0x0645, 0x0645, 0x0646, 0x062C,
- 0x0646, 0x062D, 0x0646, 0x062E, 0x0646, 0x0645, 0x0646, 0x0647, 0x0647, 0x062C, 0x0647, 0x0645, 0x0647, 0x0670, 0x064A, 0x062C,
- 0x064A, 0x062D, 0x064A, 0x062E, 0x064A, 0x0645, 0x064A, 0x0647, 0x0626, 0x0645, 0x0626, 0x0647, 0x0628, 0x0645, 0x0628, 0x0647,
- 0x062A, 0x0645, 0x062A, 0x0647, 0x062B, 0x0645, 0x062B, 0x0647, 0x0633, 0x0645, 0x0633, 0x0647, 0x0634, 0x0645, 0x0634, 0x0647,
- 0x0643, 0x0644, 0x0643, 0x0645, 0x0644, 0x0645, 0x0646, 0x0645, 0x0646, 0x0647, 0x064A, 0x0645, 0x064A, 0x0647, 0x0637, 0x0649,
- 0x0637, 0x064A, 0x0639, 0x0649, 0x0639, 0x064A, 0x063A, 0x0649, 0x063A, 0x064A, 0x0633, 0x0649, 0x0633, 0x064A, 0x0634, 0x0649,
- 0x0634, 0x064A, 0x062D, 0x0649, 0x062D, 0x064A, 0x062C, 0x0649, 0x062C, 0x064A, 0x062E, 0x0649, 0x062E, 0x064A, 0x0635, 0x0649,
- 0x0635, 0x064A, 0x0636, 0x0649, 0x0636, 0x064A, 0x0634, 0x062C, 0x0634, 0x062D, 0x0634, 0x062E, 0x0634, 0x0645, 0x0634, 0x0631,
- 0x0633, 0x0631, 0x0635, 0x0631, 0x0636, 0x0631, 0x0637, 0x0649, 0x0637, 0x064A, 0x0639, 0x0649, 0x0639, 0x064A, 0x063A, 0x0649,
- 0x063A, 0x064A, 0x0633, 0x0649, 0x0633, 0x064A, 0x0634, 0x0649, 0x0634, 0x064A, 0x062D, 0x0649, 0x062D, 0x064A, 0x062C, 0x0649,
- 0x062C, 0x064A, 0x062E, 0x0649, 0x062E, 0x064A, 0x0635, 0x0649, 0x0635, 0x064A, 0x0636, 0x0649, 0x0636, 0x064A, 0x0634, 0x062C,
- 0x0634, 0x062D, 0x0634, 0x062E, 0x0634, 0x0645, 0x0634, 0x0631, 0x0633, 0x0631, 0x0635, 0x0631, 0x0636, 0x0631, 0x0634, 0x062C,
- 0x0634, 0x062D, 0x0634, 0x062E, 0x0634, 0x0645, 0x0633, 0x0647, 0x0634, 0x0647, 0x0637, 0x0645, 0x0633, 0x062C, 0x0633, 0x062D,
- 0x0633, 0x062E, 0x0634, 0x062C, 0x0634, 0x062D, 0x0634, 0x062E, 0x0637, 0x0645, 0x0638, 0x0645, 0x0627, 0x064B, 0x0627, 0x064B,
- 0x0640, 0x064B, 0x0640, 0x064E, 0x0640, 0x064F, 0x0640, 0x0650, 0x0640, 0x0651, 0x0640, 0x0652, 0x0644, 0x0622, 0x0644, 0x0622,
- 0x0644, 0x0623, 0x0644, 0x0623, 0x0644, 0x0625, 0x0644, 0x0625, 0x0644, 0x0627, 0x0644, 0x0627
-};
+ 0x004F, 0x0045, 0x0054, 0x004D, 0x006F, 0x0065, 0x0049, 0x004A, 0x0069,
+ 0x006A, 0x004F, 0x0045, 0x006F, 0x0065, 0x0044, 0x017D, 0x0044, 0x017E,
+ 0x0064, 0x017E, 0x004C, 0x004A, 0x004C, 0x006A, 0x006C, 0x006A, 0x004E,
+ 0x004A, 0x004E, 0x006A, 0x006E, 0x006A, 0x0044, 0x005A, 0x0044, 0x007A,
+ 0x0064, 0x007A, 0x0064, 0x0062, 0x0071, 0x0070, 0x004F, 0x0045, 0x0064,
+ 0x007A, 0x0064, 0x0292, 0x0064, 0x007A, 0x0074, 0x0073, 0x0074, 0x0283,
+ 0x0074, 0x0063, 0x0066, 0x014B, 0x006C, 0x0073, 0x006C, 0x007A, 0x041D,
+ 0x0413, 0x043D, 0x0433, 0x0422, 0x0426, 0x0442, 0x0446, 0x0410, 0x0415,
+ 0x0430, 0x0435, 0x0565, 0x0582, 0x0627, 0x0674, 0x0648, 0x0674, 0x06C7,
+ 0x0674, 0x064A, 0x0674, 0x06D5, 0x0654, 0x06C1, 0x0654, 0x06D2, 0x0654,
+ 0x0928, 0x093C, 0x0930, 0x093C, 0x0933, 0x093C, 0x0915, 0x093C, 0x0916,
+ 0x093C, 0x0917, 0x093C, 0x091C, 0x093C, 0x0921, 0x093C, 0x0922, 0x093C,
+ 0x092B, 0x093C, 0x092F, 0x093C, 0x09C7, 0x09BE, 0x09C7, 0x09D7, 0x09A1,
+ 0x09BC, 0x09A2, 0x09BC, 0x09AF, 0x09BC, 0x0A32, 0x0A3C, 0x0A38, 0x0A3C,
+ 0x0A16, 0x0A3C, 0x0A17, 0x0A3C, 0x0A1C, 0x0A3C, 0x0A2B, 0x0A3C, 0x0B47,
+ 0x0B56, 0x0B47, 0x0B3E, 0x0B47, 0x0B57, 0x0B21, 0x0B3C, 0x0B22, 0x0B3C,
+ 0x0B92, 0x0BD7, 0x0BC6, 0x0BBE, 0x0BC7, 0x0BBE, 0x0BC6, 0x0BD7, 0x0C46,
+ 0x0C56, 0x0CBF, 0x0CD5, 0x0CC6, 0x0CD5, 0x0CC6, 0x0CD6, 0x0CC6, 0x0CC2,
+ 0x0CCA, 0x0CD5, 0x0D46, 0x0D3E, 0x0D47, 0x0D3E, 0x0D46, 0x0D57, 0x0DD9,
+ 0x0DCA, 0x0DD9, 0x0DCF, 0x0DDC, 0x0DCA, 0x0DD9, 0x0DDF, 0x0E4D, 0x0E32,
+ 0x0ECD, 0x0EB2, 0x0EAB, 0x0E99, 0x0EAB, 0x0EA1, 0x0F42, 0x0FB7, 0x0F4C,
+ 0x0FB7, 0x0F51, 0x0FB7, 0x0F56, 0x0FB7, 0x0F5B, 0x0FB7, 0x0F40, 0x0FB5,
+ 0x0F71, 0x0F72, 0x0F71, 0x0F74, 0x0FB2, 0x0F80, 0x0FB2, 0x0F81, 0x0FB3,
+ 0x0F80, 0x0FB3, 0x0F81, 0x0F71, 0x0F80, 0x0F92, 0x0FB7, 0x0F9C, 0x0FB7,
+ 0x0FA1, 0x0FB7, 0x0FA6, 0x0FB7, 0x0FAB, 0x0FB7, 0x0F90, 0x0FB5, 0x1025,
+ 0x102E, 0x1B05, 0x1B35, 0x1B07, 0x1B35, 0x1B09, 0x1B35, 0x1B0B, 0x1B35,
+ 0x1B0D, 0x1B35, 0x1B11, 0x1B35, 0x1B3A, 0x1B35, 0x1B3C, 0x1B35, 0x1B3E,
+ 0x1B35, 0x1B3F, 0x1B35, 0x1B42, 0x1B35, 0x0074, 0x0068, 0x002E, 0x002E,
+ 0x2032, 0x2032, 0x2035, 0x2035, 0x0021, 0x0021, 0x0020, 0x0305, 0x003F,
+ 0x003F, 0x003F, 0x0021, 0x0021, 0x003F, 0x0052, 0x0073, 0x00B0, 0x0043,
+ 0x00B0, 0x0046, 0x004E, 0x006F, 0x0053, 0x004D, 0x0054, 0x004D, 0x0031,
+ 0x002F, 0x0049, 0x0049, 0x0049, 0x0056, 0x0056, 0x0049, 0x0049, 0x0058,
+ 0x0058, 0x0049, 0x0069, 0x0069, 0x0069, 0x0076, 0x0076, 0x0069, 0x0069,
+ 0x0078, 0x0078, 0x0069, 0x2190, 0x0338, 0x2192, 0x0338, 0x2194, 0x0338,
+ 0x21D0, 0x0338, 0x21D4, 0x0338, 0x21D2, 0x0338, 0x2223, 0x0338, 0x2225,
+ 0x0338, 0x222B, 0x222B, 0x222E, 0x222E, 0x223C, 0x0338, 0x2243, 0x0338,
+ 0x2245, 0x0338, 0x2248, 0x0338, 0x003D, 0x002F, 0x2261, 0x002F, 0x224D,
+ 0x002F, 0x003C, 0x002F, 0x003E, 0x002F, 0x2264, 0x002F, 0x2265, 0x002F,
+ 0x2272, 0x002F, 0x2273, 0x002F, 0x2276, 0x002F, 0x2277, 0x002F, 0x227A,
+ 0x002F, 0x227B, 0x002F, 0x2282, 0x002F, 0x2283, 0x002F, 0x2286, 0x002F,
+ 0x2287, 0x002F, 0x22A2, 0x002F, 0x22A8, 0x002F, 0x22A9, 0x002F, 0x22AB,
+ 0x002F, 0x227C, 0x002F, 0x227D, 0x002F, 0x2291, 0x002F, 0x2292, 0x002F,
+ 0x22B2, 0x002F, 0x22B3, 0x002F, 0x22B4, 0x002F, 0x22B5, 0x002F, 0x0042,
+ 0x0053, 0x0048, 0x0054, 0x004C, 0x0046, 0x0056, 0x0054, 0x0046, 0x0046,
+ 0x0043, 0x0052, 0x0053, 0x0053, 0x0053, 0x0049, 0x0045, 0x004D, 0x0046,
+ 0x0053, 0x0047, 0x0053, 0x0052, 0x0053, 0x0055, 0x0053, 0x0053, 0x0050,
+ 0x0031, 0x0030, 0x0031, 0x0031, 0x0031, 0x0032, 0x0031, 0x0033, 0x0031,
+ 0x0034, 0x0031, 0x0035, 0x0031, 0x0036, 0x0031, 0x0037, 0x0031, 0x0038,
+ 0x0031, 0x0039, 0x0032, 0x0030, 0x0031, 0x002E, 0x0032, 0x002E, 0x0033,
+ 0x002E, 0x0034, 0x002E, 0x0035, 0x002E, 0x0036, 0x002E, 0x0037, 0x002E,
+ 0x0038, 0x002E, 0x0039, 0x002E, 0x0031, 0x0031, 0x0031, 0x0032, 0x0031,
+ 0x0033, 0x0031, 0x0034, 0x0031, 0x0035, 0x0031, 0x0036, 0x0031, 0x0037,
+ 0x0031, 0x0038, 0x0031, 0x0039, 0x0032, 0x0030, 0x0031, 0x0030, 0x0031,
+ 0x0030, 0x0031, 0x0030, 0x0031, 0x0030, 0x003D, 0x003D, 0x2ADD, 0x002F,
+ 0x304B, 0x3099, 0x304D, 0x3099, 0x304F, 0x3099, 0x3051, 0x3099, 0x3053,
+ 0x3099, 0x3055, 0x3099, 0x3057, 0x3099, 0x3059, 0x3099, 0x305B, 0x3099,
+ 0x305D, 0x3099, 0x305F, 0x3099, 0x3061, 0x3099, 0x3064, 0x3099, 0x3066,
+ 0x3099, 0x3068, 0x3099, 0x306F, 0x3099, 0x306F, 0x309A, 0x3072, 0x3099,
+ 0x3072, 0x309A, 0x3075, 0x3099, 0x3075, 0x309A, 0x3078, 0x3099, 0x3078,
+ 0x309A, 0x307B, 0x3099, 0x307B, 0x309A, 0x3046, 0x3099, 0x0020, 0x3099,
+ 0x0020, 0x309A, 0x309D, 0x3099, 0x3088, 0x308A, 0x30AB, 0x3099, 0x30AD,
+ 0x3099, 0x30AF, 0x3099, 0x30B1, 0x3099, 0x30B3, 0x3099, 0x30B5, 0x3099,
+ 0x30B7, 0x3099, 0x30B9, 0x3099, 0x30BB, 0x3099, 0x30BD, 0x3099, 0x30BF,
+ 0x3099, 0x30C1, 0x3099, 0x30C4, 0x3099, 0x30C6, 0x3099, 0x30C8, 0x3099,
+ 0x30CF, 0x3099, 0x30CF, 0x309A, 0x30D2, 0x3099, 0x30D2, 0x309A, 0x30D5,
+ 0x3099, 0x30D5, 0x309A, 0x30D8, 0x3099, 0x30D8, 0x309A, 0x30DB, 0x3099,
+ 0x30DB, 0x309A, 0x30A6, 0x3099, 0x30EF, 0x3099, 0x30F0, 0x3099, 0x30F1,
+ 0x3099, 0x30F2, 0x3099, 0x30FD, 0x3099, 0x30B3, 0x30C8, 0x0032, 0x0031,
+ 0x0032, 0x0032, 0x0032, 0x0033, 0x0032, 0x0034, 0x0032, 0x0035, 0x0032,
+ 0x0036, 0x0032, 0x0037, 0x0032, 0x0038, 0x0032, 0x0039, 0x0033, 0x0030,
+ 0x0033, 0x0031, 0x0033, 0x0032, 0x0033, 0x0033, 0x0033, 0x0034, 0x0033,
+ 0x0035, 0x1100, 0x1161, 0x1102, 0x1161, 0x1103, 0x1161, 0x1105, 0x1161,
+ 0x1106, 0x1161, 0x1107, 0x1161, 0x1109, 0x1161, 0x110B, 0x1161, 0x110C,
+ 0x1161, 0x110E, 0x1161, 0x110F, 0x1161, 0x1110, 0x1161, 0x1111, 0x1161,
+ 0x1112, 0x1161, 0x110B, 0x116E, 0x0033, 0x0036, 0x0033, 0x0037, 0x0033,
+ 0x0038, 0x0033, 0x0039, 0x0034, 0x0030, 0x0034, 0x0031, 0x0034, 0x0032,
+ 0x0034, 0x0033, 0x0034, 0x0034, 0x0034, 0x0035, 0x0034, 0x0036, 0x0034,
+ 0x0037, 0x0034, 0x0038, 0x0034, 0x0039, 0x0035, 0x0030, 0x0031, 0x6708,
+ 0x0032, 0x6708, 0x0033, 0x6708, 0x0034, 0x6708, 0x0035, 0x6708, 0x0036,
+ 0x6708, 0x0037, 0x6708, 0x0038, 0x6708, 0x0039, 0x6708, 0x0048, 0x0067,
+ 0x0065, 0x0056, 0x30AE, 0x30AC, 0x30AD, 0x30ED, 0x30C7, 0x30B7, 0x30C9,
+ 0x30EB, 0x30C8, 0x30F3, 0x30CA, 0x30CE, 0x30D4, 0x30B3, 0x30D3, 0x30EB,
+ 0x30DA, 0x30BD, 0x30DB, 0x30F3, 0x30DF, 0x30EA, 0x30E1, 0x30AC, 0x30EA,
+ 0x30E9, 0x30EC, 0x30E0, 0x0030, 0x70B9, 0x0031, 0x70B9, 0x0032, 0x70B9,
+ 0x0033, 0x70B9, 0x0034, 0x70B9, 0x0035, 0x70B9, 0x0036, 0x70B9, 0x0037,
+ 0x70B9, 0x0038, 0x70B9, 0x0039, 0x70B9, 0x0064, 0x0061, 0x0041, 0x0055,
+ 0x006F, 0x0056, 0x0070, 0x0063, 0x0064, 0x006D, 0x0049, 0x0055, 0x5E73,
+ 0x6210, 0x662D, 0x548C, 0x5927, 0x6B63, 0x660E, 0x6CBB, 0x0070, 0x0041,
+ 0x006E, 0x0041, 0x03BC, 0x0041, 0x006D, 0x0041, 0x006B, 0x0041, 0x004B,
+ 0x0042, 0x004D, 0x0042, 0x0047, 0x0042, 0x0070, 0x0046, 0x006E, 0x0046,
+ 0x03BC, 0x0046, 0x03BC, 0x0067, 0x006D, 0x0067, 0x006B, 0x0067, 0x0048,
+ 0x007A, 0x03BC, 0x2113, 0x006D, 0x2113, 0x0064, 0x2113, 0x006B, 0x2113,
+ 0x0066, 0x006D, 0x006E, 0x006D, 0x03BC, 0x006D, 0x006D, 0x006D, 0x0063,
+ 0x006D, 0x006B, 0x006D, 0x006D, 0x00B2, 0x006D, 0x00B3, 0x0050, 0x0061,
+ 0x0070, 0x0073, 0x006E, 0x0073, 0x03BC, 0x0073, 0x006D, 0x0073, 0x0070,
+ 0x0056, 0x006E, 0x0056, 0x03BC, 0x0056, 0x006D, 0x0056, 0x006B, 0x0056,
+ 0x004D, 0x0056, 0x0070, 0x0057, 0x006E, 0x0057, 0x03BC, 0x0057, 0x006D,
+ 0x0057, 0x006B, 0x0057, 0x004D, 0x0057, 0x006B, 0x03A9, 0x004D, 0x03A9,
+ 0x0042, 0x0071, 0x0063, 0x0063, 0x0063, 0x0064, 0x0064, 0x0042, 0x0047,
+ 0x0079, 0x0068, 0x0061, 0x0048, 0x0050, 0x0069, 0x006E, 0x004B, 0x004B,
+ 0x004B, 0x004D, 0x006B, 0x0074, 0x006C, 0x006D, 0x006C, 0x006E, 0x006C,
+ 0x0078, 0x006D, 0x0062, 0x0050, 0x0048, 0x0050, 0x0052, 0x0073, 0x0072,
+ 0x0053, 0x0076, 0x0057, 0x0062, 0x0031, 0x65E5, 0x0032, 0x65E5, 0x0033,
+ 0x65E5, 0x0034, 0x65E5, 0x0035, 0x65E5, 0x0036, 0x65E5, 0x0037, 0x65E5,
+ 0x0038, 0x65E5, 0x0039, 0x65E5, 0x0066, 0x0066, 0x0066, 0x0069, 0x0066,
+ 0x006C, 0x017F, 0x0074, 0x0073, 0x0074, 0x0574, 0x0576, 0x0574, 0x0565,
+ 0x0574, 0x056B, 0x057E, 0x0576, 0x0574, 0x056D, 0x05D9, 0x05B4, 0x05F2,
+ 0x05B7, 0x05E9, 0x05C1, 0x05E9, 0x05C2, 0xFB49, 0x05C1, 0xFB49, 0x05C2,
+ 0x05D0, 0x05B7, 0x05D0, 0x05B8, 0x05D0, 0x05BC, 0x05D1, 0x05BC, 0x05D2,
+ 0x05BC, 0x05D3, 0x05BC, 0x05D4, 0x05BC, 0x05D5, 0x05BC, 0x05D6, 0x05BC,
+ 0x05D8, 0x05BC, 0x05D9, 0x05BC, 0x05DA, 0x05BC, 0x05DB, 0x05BC, 0x05DC,
+ 0x05BC, 0x05DE, 0x05BC, 0x05E0, 0x05BC, 0x05E1, 0x05BC, 0x05E3, 0x05BC,
+ 0x05E4, 0x05BC, 0x05E6, 0x05BC, 0x05E7, 0x05BC, 0x05E8, 0x05BC, 0x05E9,
+ 0x05BC, 0x05EA, 0x05BC, 0x05D5, 0x05B9, 0x05D1, 0x05BF, 0x05DB, 0x05BF,
+ 0x05E4, 0x05BF, 0x05D0, 0x05DC, 0x0626, 0x0627, 0x0626, 0x0627, 0x0626,
+ 0x06D5, 0x0626, 0x06D5, 0x0626, 0x0648, 0x0626, 0x0648, 0x0626, 0x06C7,
+ 0x0626, 0x06C7, 0x0626, 0x06C6, 0x0626, 0x06C6, 0x0626, 0x06C8, 0x0626,
+ 0x06C8, 0x0626, 0x06D0, 0x0626, 0x06D0, 0x0626, 0x06D0, 0x0626, 0x0649,
+ 0x0626, 0x0649, 0x0626, 0x0649, 0x0626, 0x062C, 0x0626, 0x062D, 0x0626,
+ 0x0645, 0x0626, 0x0649, 0x0626, 0x064A, 0x0628, 0x062C, 0x0628, 0x062D,
+ 0x0628, 0x062E, 0x0628, 0x0645, 0x0628, 0x0649, 0x0628, 0x064A, 0x062A,
+ 0x062C, 0x062A, 0x062D, 0x062A, 0x062E, 0x062A, 0x0645, 0x062A, 0x0649,
+ 0x062A, 0x064A, 0x062B, 0x062C, 0x062B, 0x0645, 0x062B, 0x0649, 0x062B,
+ 0x064A, 0x062C, 0x062D, 0x062C, 0x0645, 0x062D, 0x062C, 0x062D, 0x0645,
+ 0x062E, 0x062C, 0x062E, 0x062D, 0x062E, 0x0645, 0x0633, 0x062C, 0x0633,
+ 0x062D, 0x0633, 0x062E, 0x0633, 0x0645, 0x0635, 0x062D, 0x0635, 0x0645,
+ 0x0636, 0x062C, 0x0636, 0x062D, 0x0636, 0x062E, 0x0636, 0x0645, 0x0637,
+ 0x062D, 0x0637, 0x0645, 0x0638, 0x0645, 0x0639, 0x062C, 0x0639, 0x0645,
+ 0x063A, 0x062C, 0x063A, 0x0645, 0x0641, 0x062C, 0x0641, 0x062D, 0x0641,
+ 0x062E, 0x0641, 0x0645, 0x0641, 0x0649, 0x0641, 0x064A, 0x0642, 0x062D,
+ 0x0642, 0x0645, 0x0642, 0x0649, 0x0642, 0x064A, 0x0643, 0x0627, 0x0643,
+ 0x062C, 0x0643, 0x062D, 0x0643, 0x062E, 0x0643, 0x0644, 0x0643, 0x0645,
+ 0x0643, 0x0649, 0x0643, 0x064A, 0x0644, 0x062C, 0x0644, 0x062D, 0x0644,
+ 0x062E, 0x0644, 0x0645, 0x0644, 0x0649, 0x0644, 0x064A, 0x0645, 0x062C,
+ 0x0645, 0x062D, 0x0645, 0x062E, 0x0645, 0x0645, 0x0645, 0x0649, 0x0645,
+ 0x064A, 0x0646, 0x062C, 0x0646, 0x062D, 0x0646, 0x062E, 0x0646, 0x0645,
+ 0x0646, 0x0649, 0x0646, 0x064A, 0x0647, 0x062C, 0x0647, 0x0645, 0x0647,
+ 0x0649, 0x0647, 0x064A, 0x064A, 0x062C, 0x064A, 0x062D, 0x064A, 0x062E,
+ 0x064A, 0x0645, 0x064A, 0x0649, 0x064A, 0x064A, 0x0630, 0x0670, 0x0631,
+ 0x0670, 0x0649, 0x0670, 0x064C, 0x0651, 0x064D, 0x0651, 0x064E, 0x0651,
+ 0x064F, 0x0651, 0x0650, 0x0651, 0x0651, 0x0670, 0x0626, 0x0631, 0x0626,
+ 0x0632, 0x0626, 0x0645, 0x0626, 0x0646, 0x0626, 0x0649, 0x0626, 0x064A,
+ 0x0628, 0x0631, 0x0628, 0x0632, 0x0628, 0x0645, 0x0628, 0x0646, 0x0628,
+ 0x0649, 0x0628, 0x064A, 0x062A, 0x0631, 0x062A, 0x0632, 0x062A, 0x0645,
+ 0x062A, 0x0646, 0x062A, 0x0649, 0x062A, 0x064A, 0x062B, 0x0631, 0x062B,
+ 0x0632, 0x062B, 0x0645, 0x062B, 0x0646, 0x062B, 0x0649, 0x062B, 0x064A,
+ 0x0641, 0x0649, 0x0641, 0x064A, 0x0642, 0x0649, 0x0642, 0x064A, 0x0643,
+ 0x0627, 0x0643, 0x0644, 0x0643, 0x0645, 0x0643, 0x0649, 0x0643, 0x064A,
+ 0x0644, 0x0645, 0x0644, 0x0649, 0x0644, 0x064A, 0x0645, 0x0627, 0x0645,
+ 0x0645, 0x0646, 0x0631, 0x0646, 0x0632, 0x0646, 0x0645, 0x0646, 0x0646,
+ 0x0646, 0x0649, 0x0646, 0x064A, 0x0649, 0x0670, 0x064A, 0x0631, 0x064A,
+ 0x0632, 0x064A, 0x0645, 0x064A, 0x0646, 0x064A, 0x0649, 0x064A, 0x064A,
+ 0x0626, 0x062C, 0x0626, 0x062D, 0x0626, 0x062E, 0x0626, 0x0645, 0x0626,
+ 0x0647, 0x0628, 0x062C, 0x0628, 0x062D, 0x0628, 0x062E, 0x0628, 0x0645,
+ 0x0628, 0x0647, 0x062A, 0x062C, 0x062A, 0x062D, 0x062A, 0x062E, 0x062A,
+ 0x0645, 0x062A, 0x0647, 0x062B, 0x0645, 0x062C, 0x062D, 0x062C, 0x0645,
+ 0x062D, 0x062C, 0x062D, 0x0645, 0x062E, 0x062C, 0x062E, 0x0645, 0x0633,
+ 0x062C, 0x0633, 0x062D, 0x0633, 0x062E, 0x0633, 0x0645, 0x0635, 0x062D,
+ 0x0635, 0x062E, 0x0635, 0x0645, 0x0636, 0x062C, 0x0636, 0x062D, 0x0636,
+ 0x062E, 0x0636, 0x0645, 0x0637, 0x062D, 0x0638, 0x0645, 0x0639, 0x062C,
+ 0x0639, 0x0645, 0x063A, 0x062C, 0x063A, 0x0645, 0x0641, 0x062C, 0x0641,
+ 0x062D, 0x0641, 0x062E, 0x0641, 0x0645, 0x0642, 0x062D, 0x0642, 0x0645,
+ 0x0643, 0x062C, 0x0643, 0x062D, 0x0643, 0x062E, 0x0643, 0x0644, 0x0643,
+ 0x0645, 0x0644, 0x062C, 0x0644, 0x062D, 0x0644, 0x062E, 0x0644, 0x0645,
+ 0x0644, 0x0647, 0x0645, 0x062C, 0x0645, 0x062D, 0x0645, 0x062E, 0x0645,
+ 0x0645, 0x0646, 0x062C, 0x0646, 0x062D, 0x0646, 0x062E, 0x0646, 0x0645,
+ 0x0646, 0x0647, 0x0647, 0x062C, 0x0647, 0x0645, 0x0647, 0x0670, 0x064A,
+ 0x062C, 0x064A, 0x062D, 0x064A, 0x062E, 0x064A, 0x0645, 0x064A, 0x0647,
+ 0x0626, 0x0645, 0x0626, 0x0647, 0x0628, 0x0645, 0x0628, 0x0647, 0x062A,
+ 0x0645, 0x062A, 0x0647, 0x062B, 0x0645, 0x062B, 0x0647, 0x0633, 0x0645,
+ 0x0633, 0x0647, 0x0634, 0x0645, 0x0634, 0x0647, 0x0643, 0x0644, 0x0643,
+ 0x0645, 0x0644, 0x0645, 0x0646, 0x0645, 0x0646, 0x0647, 0x064A, 0x0645,
+ 0x064A, 0x0647, 0x0637, 0x0649, 0x0637, 0x064A, 0x0639, 0x0649, 0x0639,
+ 0x064A, 0x063A, 0x0649, 0x063A, 0x064A, 0x0633, 0x0649, 0x0633, 0x064A,
+ 0x0634, 0x0649, 0x0634, 0x064A, 0x062D, 0x0649, 0x062D, 0x064A, 0x062C,
+ 0x0649, 0x062C, 0x064A, 0x062E, 0x0649, 0x062E, 0x064A, 0x0635, 0x0649,
+ 0x0635, 0x064A, 0x0636, 0x0649, 0x0636, 0x064A, 0x0634, 0x062C, 0x0634,
+ 0x062D, 0x0634, 0x062E, 0x0634, 0x0645, 0x0634, 0x0631, 0x0633, 0x0631,
+ 0x0635, 0x0631, 0x0636, 0x0631, 0x0637, 0x0649, 0x0637, 0x064A, 0x0639,
+ 0x0649, 0x0639, 0x064A, 0x063A, 0x0649, 0x063A, 0x064A, 0x0633, 0x0649,
+ 0x0633, 0x064A, 0x0634, 0x0649, 0x0634, 0x064A, 0x062D, 0x0649, 0x062D,
+ 0x064A, 0x062C, 0x0649, 0x062C, 0x064A, 0x062E, 0x0649, 0x062E, 0x064A,
+ 0x0635, 0x0649, 0x0635, 0x064A, 0x0636, 0x0649, 0x0636, 0x064A, 0x0634,
+ 0x062C, 0x0634, 0x062D, 0x0634, 0x062E, 0x0634, 0x0645, 0x0634, 0x0631,
+ 0x0633, 0x0631, 0x0635, 0x0631, 0x0636, 0x0631, 0x0634, 0x062C, 0x0634,
+ 0x062D, 0x0634, 0x062E, 0x0634, 0x0645, 0x0633, 0x0647, 0x0634, 0x0647,
+ 0x0637, 0x0645, 0x0633, 0x062C, 0x0633, 0x062D, 0x0633, 0x062E, 0x0634,
+ 0x062C, 0x0634, 0x062D, 0x0634, 0x062E, 0x0637, 0x0645, 0x0638, 0x0645,
+ 0x0627, 0x064B, 0x0627, 0x064B, 0x0640, 0x064B, 0x0640, 0x064E, 0x0640,
+ 0x064F, 0x0640, 0x0650, 0x0640, 0x0651, 0x0640, 0x0652, 0x0644, 0x0622,
+ 0x0644, 0x0622, 0x0644, 0x0623, 0x0644, 0x0623, 0x0644, 0x0625, 0x0644,
+ 0x0625, 0x0644, 0x0627, 0x0644, 0x0627};
extern const FX_WCHAR g_UnicodeData_Normalization_Map3[1164] = {
- 0x0031, 0x002F, 0x0034, 0x0031, 0x002F, 0x0032, 0x0033, 0x002F, 0x0034, 0x002E, 0x002E, 0x002E, 0x2032, 0x2032, 0x2032, 0x2035,
- 0x2035, 0x2035, 0x0061, 0x002F, 0x0063, 0x0061, 0x002F, 0x0073, 0x0063, 0x002F, 0x006F, 0x0063, 0x002F, 0x0075, 0x0054, 0x0045,
- 0x004C, 0x0046, 0x0041, 0x0058, 0x0031, 0x002F, 0x0037, 0x0031, 0x002F, 0x0039, 0x0031, 0x002F, 0x0033, 0x0032, 0x002F, 0x0033,
- 0x0031, 0x002F, 0x0035, 0x0032, 0x002F, 0x0035, 0x0033, 0x002F, 0x0035, 0x0034, 0x002F, 0x0035, 0x0031, 0x002F, 0x0036, 0x0035,
- 0x002F, 0x0036, 0x0031, 0x002F, 0x0038, 0x0033, 0x002F, 0x0038, 0x0035, 0x002F, 0x0038, 0x0037, 0x002F, 0x0038, 0x0049, 0x0049,
- 0x0049, 0x0056, 0x0049, 0x0049, 0x0058, 0x0049, 0x0049, 0x0069, 0x0069, 0x0069, 0x0076, 0x0069, 0x0069, 0x0078, 0x0069, 0x0069,
- 0x0030, 0x2044, 0x0033, 0x222B, 0x222B, 0x222B, 0x222E, 0x222E, 0x222E, 0x004E, 0x0055, 0x004C, 0x0053, 0x004F, 0x0048, 0x0053,
- 0x0054, 0x0058, 0x0045, 0x0054, 0x0058, 0x0045, 0x004F, 0x0054, 0x0045, 0x004E, 0x0051, 0x0041, 0x0043, 0x004B, 0x0042, 0x0045,
- 0x004C, 0x0044, 0x004C, 0x0045, 0x0044, 0x0043, 0x0031, 0x0044, 0x0043, 0x0032, 0x0044, 0x0043, 0x0033, 0x0044, 0x0043, 0x0034,
- 0x004E, 0x0041, 0x004B, 0x0053, 0x0059, 0x004E, 0x0045, 0x0054, 0x0042, 0x0043, 0x0041, 0x004E, 0x0053, 0x0055, 0x0042, 0x0045,
- 0x0053, 0x0043, 0x0044, 0x0045, 0x004C, 0x0028, 0x0031, 0x0029, 0x0028, 0x0032, 0x0029, 0x0028, 0x0033, 0x0029, 0x0028, 0x0034,
- 0x0029, 0x0028, 0x0035, 0x0029, 0x0028, 0x0036, 0x0029, 0x0028, 0x0037, 0x0029, 0x0028, 0x0038, 0x0029, 0x0028, 0x0039, 0x0029,
- 0x0031, 0x0030, 0x002E, 0x0031, 0x0031, 0x002E, 0x0031, 0x0032, 0x002E, 0x0031, 0x0033, 0x002E, 0x0031, 0x0034, 0x002E, 0x0031,
- 0x0035, 0x002E, 0x0031, 0x0036, 0x002E, 0x0031, 0x0037, 0x002E, 0x0031, 0x0038, 0x002E, 0x0031, 0x0039, 0x002E, 0x0032, 0x0030,
- 0x002E, 0x0028, 0x0061, 0x0029, 0x0028, 0x0062, 0x0029, 0x0028, 0x0063, 0x0029, 0x0028, 0x0064, 0x0029, 0x0028, 0x0065, 0x0029,
- 0x0028, 0x0066, 0x0029, 0x0028, 0x0067, 0x0029, 0x0028, 0x0068, 0x0029, 0x0028, 0x0069, 0x0029, 0x0028, 0x006A, 0x0029, 0x0028,
- 0x006B, 0x0029, 0x0028, 0x006C, 0x0029, 0x0028, 0x006D, 0x0029, 0x0028, 0x006E, 0x0029, 0x0028, 0x006F, 0x0029, 0x0028, 0x0070,
- 0x0029, 0x0028, 0x0071, 0x0029, 0x0028, 0x0072, 0x0029, 0x0028, 0x0073, 0x0029, 0x0028, 0x0074, 0x0029, 0x0028, 0x0075, 0x0029,
- 0x0028, 0x0076, 0x0029, 0x0028, 0x0077, 0x0029, 0x0028, 0x0078, 0x0029, 0x0028, 0x0079, 0x0029, 0x0028, 0x007A, 0x0029, 0x003A,
- 0x003A, 0x003D, 0x003D, 0x003D, 0x003D, 0x0028, 0x1100, 0x0029, 0x0028, 0x1102, 0x0029, 0x0028, 0x1103, 0x0029, 0x0028, 0x1105,
- 0x0029, 0x0028, 0x1106, 0x0029, 0x0028, 0x1107, 0x0029, 0x0028, 0x1109, 0x0029, 0x0028, 0x110B, 0x0029, 0x0028, 0x110C, 0x0029,
- 0x0028, 0x110E, 0x0029, 0x0028, 0x110F, 0x0029, 0x0028, 0x1110, 0x0029, 0x0028, 0x1111, 0x0029, 0x0028, 0x1112, 0x0029, 0x0028,
- 0x4E00, 0x0029, 0x0028, 0x4E8C, 0x0029, 0x0028, 0x4E09, 0x0029, 0x0028, 0x56DB, 0x0029, 0x0028, 0x4E94, 0x0029, 0x0028, 0x516D,
- 0x0029, 0x0028, 0x4E03, 0x0029, 0x0028, 0x516B, 0x0029, 0x0028, 0x4E5D, 0x0029, 0x0028, 0x5341, 0x0029, 0x0028, 0x6708, 0x0029,
- 0x0028, 0x706B, 0x0029, 0x0028, 0x6C34, 0x0029, 0x0028, 0x6728, 0x0029, 0x0028, 0x91D1, 0x0029, 0x0028, 0x571F, 0x0029, 0x0028,
- 0x65E5, 0x0029, 0x0028, 0x682A, 0x0029, 0x0028, 0x6709, 0x0029, 0x0028, 0x793E, 0x0029, 0x0028, 0x540D, 0x0029, 0x0028, 0x7279,
- 0x0029, 0x0028, 0x8CA1, 0x0029, 0x0028, 0x795D, 0x0029, 0x0028, 0x52B4, 0x0029, 0x0028, 0x4EE3, 0x0029, 0x0028, 0x547C, 0x0029,
- 0x0028, 0x5B66, 0x0029, 0x0028, 0x76E3, 0x0029, 0x0028, 0x4F01, 0x0029, 0x0028, 0x8CC7, 0x0029, 0x0028, 0x5354, 0x0029, 0x0028,
- 0x796D, 0x0029, 0x0028, 0x4F11, 0x0029, 0x0028, 0x81EA, 0x0029, 0x0028, 0x81F3, 0x0029, 0x0050, 0x0054, 0x0045, 0x0031, 0x0030,
- 0x6708, 0x0031, 0x0031, 0x6708, 0x0031, 0x0032, 0x6708, 0x0065, 0x0072, 0x0067, 0x004C, 0x0054, 0x0044, 0x30A2, 0x30FC, 0x30EB,
- 0x30A4, 0x30F3, 0x30C1, 0x30A6, 0x30A9, 0x30F3, 0x30AA, 0x30F3, 0x30B9, 0x30AA, 0x30FC, 0x30E0, 0x30AB, 0x30A4, 0x30EA, 0x30AC,
- 0x30ED, 0x30F3, 0x30AC, 0x30F3, 0x30DE, 0x30AE, 0x30CB, 0x30FC, 0x30B0, 0x30E9, 0x30E0, 0x30B1, 0x30FC, 0x30B9, 0x30B3, 0x30EB,
- 0x30CA, 0x30B3, 0x30FC, 0x30DD, 0x30BB, 0x30F3, 0x30C1, 0x30BB, 0x30F3, 0x30C8, 0x30C0, 0x30FC, 0x30B9, 0x30CE, 0x30C3, 0x30C8,
- 0x30CF, 0x30A4, 0x30C4, 0x30D1, 0x30FC, 0x30C4, 0x30D4, 0x30AF, 0x30EB, 0x30D5, 0x30E9, 0x30F3, 0x30DA, 0x30CB, 0x30D2, 0x30D8,
- 0x30EB, 0x30C4, 0x30DA, 0x30F3, 0x30B9, 0x30DA, 0x30FC, 0x30B8, 0x30D9, 0x30FC, 0x30BF, 0x30DC, 0x30EB, 0x30C8, 0x30DD, 0x30F3,
- 0x30C9, 0x30DB, 0x30FC, 0x30EB, 0x30DB, 0x30FC, 0x30F3, 0x30DE, 0x30A4, 0x30EB, 0x30DE, 0x30C3, 0x30CF, 0x30DE, 0x30EB, 0x30AF,
- 0x30E4, 0x30FC, 0x30C9, 0x30E4, 0x30FC, 0x30EB, 0x30E6, 0x30A2, 0x30F3, 0x30EB, 0x30D4, 0x30FC, 0x30EF, 0x30C3, 0x30C8, 0x0031,
- 0x0030, 0x70B9, 0x0031, 0x0031, 0x70B9, 0x0031, 0x0032, 0x70B9, 0x0031, 0x0033, 0x70B9, 0x0031, 0x0034, 0x70B9, 0x0031, 0x0035,
- 0x70B9, 0x0031, 0x0036, 0x70B9, 0x0031, 0x0037, 0x70B9, 0x0031, 0x0038, 0x70B9, 0x0031, 0x0039, 0x70B9, 0x0032, 0x0030, 0x70B9,
- 0x0032, 0x0031, 0x70B9, 0x0032, 0x0032, 0x70B9, 0x0032, 0x0033, 0x70B9, 0x0032, 0x0034, 0x70B9, 0x0068, 0x0050, 0x0061, 0x0062,
- 0x0061, 0x0072, 0x0064, 0x006D, 0x00B2, 0x0064, 0x006D, 0x00B3, 0x0063, 0x0061, 0x006C, 0x006B, 0x0048, 0x007A, 0x004D, 0x0048,
- 0x007A, 0x0047, 0x0048, 0x007A, 0x0054, 0x0048, 0x007A, 0x006D, 0x006D, 0x00B2, 0x0063, 0x006D, 0x00B2, 0x006B, 0x006D, 0x00B2,
- 0x006D, 0x006D, 0x00B3, 0x0063, 0x006D, 0x00B3, 0x006B, 0x006D, 0x00B3, 0x006D, 0x2215, 0x0073, 0x006B, 0x0050, 0x0061, 0x004D,
- 0x0050, 0x0061, 0x0047, 0x0050, 0x0061, 0x0072, 0x0061, 0x0064, 0x0043, 0x006F, 0x002E, 0x006C, 0x006F, 0x0067, 0x006D, 0x0069,
- 0x006C, 0x006D, 0x006F, 0x006C, 0x0050, 0x0050, 0x004D, 0x0056, 0x2215, 0x006D, 0x0041, 0x2215, 0x006D, 0x0031, 0x0030, 0x65E5,
- 0x0031, 0x0031, 0x65E5, 0x0031, 0x0032, 0x65E5, 0x0031, 0x0033, 0x65E5, 0x0031, 0x0034, 0x65E5, 0x0031, 0x0035, 0x65E5, 0x0031,
- 0x0036, 0x65E5, 0x0031, 0x0037, 0x65E5, 0x0031, 0x0038, 0x65E5, 0x0031, 0x0039, 0x65E5, 0x0032, 0x0030, 0x65E5, 0x0032, 0x0031,
- 0x65E5, 0x0032, 0x0032, 0x65E5, 0x0032, 0x0033, 0x65E5, 0x0032, 0x0034, 0x65E5, 0x0032, 0x0035, 0x65E5, 0x0032, 0x0036, 0x65E5,
- 0x0032, 0x0037, 0x65E5, 0x0032, 0x0038, 0x65E5, 0x0032, 0x0039, 0x65E5, 0x0033, 0x0030, 0x65E5, 0x0033, 0x0031, 0x65E5, 0x0067,
- 0x0061, 0x006C, 0x0066, 0x0066, 0x0069, 0x0066, 0x0066, 0x006C, 0x0640, 0x064E, 0x0651, 0x0640, 0x064F, 0x0651, 0x0640, 0x0650,
- 0x0651, 0x062A, 0x062C, 0x0645, 0x062A, 0x062D, 0x062C, 0x062A, 0x062D, 0x062C, 0x062A, 0x062D, 0x0645, 0x062A, 0x062E, 0x0645,
- 0x062A, 0x0645, 0x062C, 0x062A, 0x0645, 0x062D, 0x062A, 0x0645, 0x062E, 0x062C, 0x0645, 0x062D, 0x062C, 0x0645, 0x062D, 0x062D,
- 0x0645, 0x064A, 0x062D, 0x0645, 0x0649, 0x0633, 0x062D, 0x062C, 0x0633, 0x062C, 0x062D, 0x0633, 0x062C, 0x0649, 0x0633, 0x0645,
- 0x062D, 0x0633, 0x0645, 0x062D, 0x0633, 0x0645, 0x062C, 0x0633, 0x0645, 0x0645, 0x0633, 0x0645, 0x0645, 0x0635, 0x062D, 0x062D,
- 0x0635, 0x062D, 0x062D, 0x0635, 0x0645, 0x0645, 0x0634, 0x062D, 0x0645, 0x0634, 0x062D, 0x0645, 0x0634, 0x062C, 0x064A, 0x0634,
- 0x0645, 0x062E, 0x0634, 0x0645, 0x062E, 0x0634, 0x0645, 0x0645, 0x0634, 0x0645, 0x0645, 0x0636, 0x062D, 0x0649, 0x0636, 0x062E,
- 0x0645, 0x0636, 0x062E, 0x0645, 0x0637, 0x0645, 0x062D, 0x0637, 0x0645, 0x062D, 0x0637, 0x0645, 0x0645, 0x0637, 0x0645, 0x064A,
- 0x0639, 0x062C, 0x0645, 0x0639, 0x0645, 0x0645, 0x0639, 0x0645, 0x0645, 0x0639, 0x0645, 0x0649, 0x063A, 0x0645, 0x0645, 0x063A,
- 0x0645, 0x064A, 0x063A, 0x0645, 0x0649, 0x0641, 0x062E, 0x0645, 0x0641, 0x062E, 0x0645, 0x0642, 0x0645, 0x062D, 0x0642, 0x0645,
- 0x0645, 0x0644, 0x062D, 0x0645, 0x0644, 0x062D, 0x064A, 0x0644, 0x062D, 0x0649, 0x0644, 0x062C, 0x062C, 0x0644, 0x062C, 0x062C,
- 0x0644, 0x062E, 0x0645, 0x0644, 0x062E, 0x0645, 0x0644, 0x0645, 0x062D, 0x0644, 0x0645, 0x062D, 0x0645, 0x062D, 0x062C, 0x0645,
- 0x062D, 0x0645, 0x0645, 0x062D, 0x064A, 0x0645, 0x062C, 0x062D, 0x0645, 0x062C, 0x0645, 0x0645, 0x062E, 0x062C, 0x0645, 0x062E,
- 0x0645, 0x0645, 0x062C, 0x062E, 0x0647, 0x0645, 0x062C, 0x0647, 0x0645, 0x0645, 0x0646, 0x062D, 0x0645, 0x0646, 0x062D, 0x0649,
- 0x0646, 0x062C, 0x0645, 0x0646, 0x062C, 0x0645, 0x0646, 0x062C, 0x0649, 0x0646, 0x0645, 0x064A, 0x0646, 0x0645, 0x0649, 0x064A,
- 0x0645, 0x0645, 0x064A, 0x0645, 0x0645, 0x0628, 0x062E, 0x064A, 0x062A, 0x062C, 0x064A, 0x062A, 0x062C, 0x0649, 0x062A, 0x062E,
- 0x064A, 0x062A, 0x062E, 0x0649, 0x062A, 0x0645, 0x064A, 0x062A, 0x0645, 0x0649, 0x062C, 0x0645, 0x064A, 0x062C, 0x062D, 0x0649,
- 0x062C, 0x0645, 0x0649, 0x0633, 0x062E, 0x0649, 0x0635, 0x062D, 0x064A, 0x0634, 0x062D, 0x064A, 0x0636, 0x062D, 0x064A, 0x0644,
- 0x062C, 0x064A, 0x0644, 0x0645, 0x064A, 0x064A, 0x062D, 0x064A, 0x064A, 0x062C, 0x064A, 0x064A, 0x0645, 0x064A, 0x0645, 0x0645,
- 0x064A, 0x0642, 0x0645, 0x064A, 0x0646, 0x062D, 0x064A, 0x0642, 0x0645, 0x062D, 0x0644, 0x062D, 0x0645, 0x0639, 0x0645, 0x064A,
- 0x0643, 0x0645, 0x064A, 0x0646, 0x062C, 0x062D, 0x0645, 0x062E, 0x064A, 0x0644, 0x062C, 0x0645, 0x0643, 0x0645, 0x0645, 0x0644,
- 0x062C, 0x0645, 0x0646, 0x062C, 0x062D, 0x062C, 0x062D, 0x064A, 0x062D, 0x062C, 0x064A, 0x0645, 0x062C, 0x064A, 0x0641, 0x0645,
- 0x064A, 0x0628, 0x062D, 0x064A, 0x0643, 0x0645, 0x0645, 0x0639, 0x062C, 0x0645, 0x0635, 0x0645, 0x0645, 0x0633, 0x062E, 0x064A,
- 0x0646, 0x062C, 0x064A, 0x0635, 0x0644, 0x06D2, 0x0642, 0x0644, 0x06D2, 0x0635, 0x0644, 0x0649
-};
+ 0x0031, 0x002F, 0x0034, 0x0031, 0x002F, 0x0032, 0x0033, 0x002F, 0x0034,
+ 0x002E, 0x002E, 0x002E, 0x2032, 0x2032, 0x2032, 0x2035, 0x2035, 0x2035,
+ 0x0061, 0x002F, 0x0063, 0x0061, 0x002F, 0x0073, 0x0063, 0x002F, 0x006F,
+ 0x0063, 0x002F, 0x0075, 0x0054, 0x0045, 0x004C, 0x0046, 0x0041, 0x0058,
+ 0x0031, 0x002F, 0x0037, 0x0031, 0x002F, 0x0039, 0x0031, 0x002F, 0x0033,
+ 0x0032, 0x002F, 0x0033, 0x0031, 0x002F, 0x0035, 0x0032, 0x002F, 0x0035,
+ 0x0033, 0x002F, 0x0035, 0x0034, 0x002F, 0x0035, 0x0031, 0x002F, 0x0036,
+ 0x0035, 0x002F, 0x0036, 0x0031, 0x002F, 0x0038, 0x0033, 0x002F, 0x0038,
+ 0x0035, 0x002F, 0x0038, 0x0037, 0x002F, 0x0038, 0x0049, 0x0049, 0x0049,
+ 0x0056, 0x0049, 0x0049, 0x0058, 0x0049, 0x0049, 0x0069, 0x0069, 0x0069,
+ 0x0076, 0x0069, 0x0069, 0x0078, 0x0069, 0x0069, 0x0030, 0x2044, 0x0033,
+ 0x222B, 0x222B, 0x222B, 0x222E, 0x222E, 0x222E, 0x004E, 0x0055, 0x004C,
+ 0x0053, 0x004F, 0x0048, 0x0053, 0x0054, 0x0058, 0x0045, 0x0054, 0x0058,
+ 0x0045, 0x004F, 0x0054, 0x0045, 0x004E, 0x0051, 0x0041, 0x0043, 0x004B,
+ 0x0042, 0x0045, 0x004C, 0x0044, 0x004C, 0x0045, 0x0044, 0x0043, 0x0031,
+ 0x0044, 0x0043, 0x0032, 0x0044, 0x0043, 0x0033, 0x0044, 0x0043, 0x0034,
+ 0x004E, 0x0041, 0x004B, 0x0053, 0x0059, 0x004E, 0x0045, 0x0054, 0x0042,
+ 0x0043, 0x0041, 0x004E, 0x0053, 0x0055, 0x0042, 0x0045, 0x0053, 0x0043,
+ 0x0044, 0x0045, 0x004C, 0x0028, 0x0031, 0x0029, 0x0028, 0x0032, 0x0029,
+ 0x0028, 0x0033, 0x0029, 0x0028, 0x0034, 0x0029, 0x0028, 0x0035, 0x0029,
+ 0x0028, 0x0036, 0x0029, 0x0028, 0x0037, 0x0029, 0x0028, 0x0038, 0x0029,
+ 0x0028, 0x0039, 0x0029, 0x0031, 0x0030, 0x002E, 0x0031, 0x0031, 0x002E,
+ 0x0031, 0x0032, 0x002E, 0x0031, 0x0033, 0x002E, 0x0031, 0x0034, 0x002E,
+ 0x0031, 0x0035, 0x002E, 0x0031, 0x0036, 0x002E, 0x0031, 0x0037, 0x002E,
+ 0x0031, 0x0038, 0x002E, 0x0031, 0x0039, 0x002E, 0x0032, 0x0030, 0x002E,
+ 0x0028, 0x0061, 0x0029, 0x0028, 0x0062, 0x0029, 0x0028, 0x0063, 0x0029,
+ 0x0028, 0x0064, 0x0029, 0x0028, 0x0065, 0x0029, 0x0028, 0x0066, 0x0029,
+ 0x0028, 0x0067, 0x0029, 0x0028, 0x0068, 0x0029, 0x0028, 0x0069, 0x0029,
+ 0x0028, 0x006A, 0x0029, 0x0028, 0x006B, 0x0029, 0x0028, 0x006C, 0x0029,
+ 0x0028, 0x006D, 0x0029, 0x0028, 0x006E, 0x0029, 0x0028, 0x006F, 0x0029,
+ 0x0028, 0x0070, 0x0029, 0x0028, 0x0071, 0x0029, 0x0028, 0x0072, 0x0029,
+ 0x0028, 0x0073, 0x0029, 0x0028, 0x0074, 0x0029, 0x0028, 0x0075, 0x0029,
+ 0x0028, 0x0076, 0x0029, 0x0028, 0x0077, 0x0029, 0x0028, 0x0078, 0x0029,
+ 0x0028, 0x0079, 0x0029, 0x0028, 0x007A, 0x0029, 0x003A, 0x003A, 0x003D,
+ 0x003D, 0x003D, 0x003D, 0x0028, 0x1100, 0x0029, 0x0028, 0x1102, 0x0029,
+ 0x0028, 0x1103, 0x0029, 0x0028, 0x1105, 0x0029, 0x0028, 0x1106, 0x0029,
+ 0x0028, 0x1107, 0x0029, 0x0028, 0x1109, 0x0029, 0x0028, 0x110B, 0x0029,
+ 0x0028, 0x110C, 0x0029, 0x0028, 0x110E, 0x0029, 0x0028, 0x110F, 0x0029,
+ 0x0028, 0x1110, 0x0029, 0x0028, 0x1111, 0x0029, 0x0028, 0x1112, 0x0029,
+ 0x0028, 0x4E00, 0x0029, 0x0028, 0x4E8C, 0x0029, 0x0028, 0x4E09, 0x0029,
+ 0x0028, 0x56DB, 0x0029, 0x0028, 0x4E94, 0x0029, 0x0028, 0x516D, 0x0029,
+ 0x0028, 0x4E03, 0x0029, 0x0028, 0x516B, 0x0029, 0x0028, 0x4E5D, 0x0029,
+ 0x0028, 0x5341, 0x0029, 0x0028, 0x6708, 0x0029, 0x0028, 0x706B, 0x0029,
+ 0x0028, 0x6C34, 0x0029, 0x0028, 0x6728, 0x0029, 0x0028, 0x91D1, 0x0029,
+ 0x0028, 0x571F, 0x0029, 0x0028, 0x65E5, 0x0029, 0x0028, 0x682A, 0x0029,
+ 0x0028, 0x6709, 0x0029, 0x0028, 0x793E, 0x0029, 0x0028, 0x540D, 0x0029,
+ 0x0028, 0x7279, 0x0029, 0x0028, 0x8CA1, 0x0029, 0x0028, 0x795D, 0x0029,
+ 0x0028, 0x52B4, 0x0029, 0x0028, 0x4EE3, 0x0029, 0x0028, 0x547C, 0x0029,
+ 0x0028, 0x5B66, 0x0029, 0x0028, 0x76E3, 0x0029, 0x0028, 0x4F01, 0x0029,
+ 0x0028, 0x8CC7, 0x0029, 0x0028, 0x5354, 0x0029, 0x0028, 0x796D, 0x0029,
+ 0x0028, 0x4F11, 0x0029, 0x0028, 0x81EA, 0x0029, 0x0028, 0x81F3, 0x0029,
+ 0x0050, 0x0054, 0x0045, 0x0031, 0x0030, 0x6708, 0x0031, 0x0031, 0x6708,
+ 0x0031, 0x0032, 0x6708, 0x0065, 0x0072, 0x0067, 0x004C, 0x0054, 0x0044,
+ 0x30A2, 0x30FC, 0x30EB, 0x30A4, 0x30F3, 0x30C1, 0x30A6, 0x30A9, 0x30F3,
+ 0x30AA, 0x30F3, 0x30B9, 0x30AA, 0x30FC, 0x30E0, 0x30AB, 0x30A4, 0x30EA,
+ 0x30AC, 0x30ED, 0x30F3, 0x30AC, 0x30F3, 0x30DE, 0x30AE, 0x30CB, 0x30FC,
+ 0x30B0, 0x30E9, 0x30E0, 0x30B1, 0x30FC, 0x30B9, 0x30B3, 0x30EB, 0x30CA,
+ 0x30B3, 0x30FC, 0x30DD, 0x30BB, 0x30F3, 0x30C1, 0x30BB, 0x30F3, 0x30C8,
+ 0x30C0, 0x30FC, 0x30B9, 0x30CE, 0x30C3, 0x30C8, 0x30CF, 0x30A4, 0x30C4,
+ 0x30D1, 0x30FC, 0x30C4, 0x30D4, 0x30AF, 0x30EB, 0x30D5, 0x30E9, 0x30F3,
+ 0x30DA, 0x30CB, 0x30D2, 0x30D8, 0x30EB, 0x30C4, 0x30DA, 0x30F3, 0x30B9,
+ 0x30DA, 0x30FC, 0x30B8, 0x30D9, 0x30FC, 0x30BF, 0x30DC, 0x30EB, 0x30C8,
+ 0x30DD, 0x30F3, 0x30C9, 0x30DB, 0x30FC, 0x30EB, 0x30DB, 0x30FC, 0x30F3,
+ 0x30DE, 0x30A4, 0x30EB, 0x30DE, 0x30C3, 0x30CF, 0x30DE, 0x30EB, 0x30AF,
+ 0x30E4, 0x30FC, 0x30C9, 0x30E4, 0x30FC, 0x30EB, 0x30E6, 0x30A2, 0x30F3,
+ 0x30EB, 0x30D4, 0x30FC, 0x30EF, 0x30C3, 0x30C8, 0x0031, 0x0030, 0x70B9,
+ 0x0031, 0x0031, 0x70B9, 0x0031, 0x0032, 0x70B9, 0x0031, 0x0033, 0x70B9,
+ 0x0031, 0x0034, 0x70B9, 0x0031, 0x0035, 0x70B9, 0x0031, 0x0036, 0x70B9,
+ 0x0031, 0x0037, 0x70B9, 0x0031, 0x0038, 0x70B9, 0x0031, 0x0039, 0x70B9,
+ 0x0032, 0x0030, 0x70B9, 0x0032, 0x0031, 0x70B9, 0x0032, 0x0032, 0x70B9,
+ 0x0032, 0x0033, 0x70B9, 0x0032, 0x0034, 0x70B9, 0x0068, 0x0050, 0x0061,
+ 0x0062, 0x0061, 0x0072, 0x0064, 0x006D, 0x00B2, 0x0064, 0x006D, 0x00B3,
+ 0x0063, 0x0061, 0x006C, 0x006B, 0x0048, 0x007A, 0x004D, 0x0048, 0x007A,
+ 0x0047, 0x0048, 0x007A, 0x0054, 0x0048, 0x007A, 0x006D, 0x006D, 0x00B2,
+ 0x0063, 0x006D, 0x00B2, 0x006B, 0x006D, 0x00B2, 0x006D, 0x006D, 0x00B3,
+ 0x0063, 0x006D, 0x00B3, 0x006B, 0x006D, 0x00B3, 0x006D, 0x2215, 0x0073,
+ 0x006B, 0x0050, 0x0061, 0x004D, 0x0050, 0x0061, 0x0047, 0x0050, 0x0061,
+ 0x0072, 0x0061, 0x0064, 0x0043, 0x006F, 0x002E, 0x006C, 0x006F, 0x0067,
+ 0x006D, 0x0069, 0x006C, 0x006D, 0x006F, 0x006C, 0x0050, 0x0050, 0x004D,
+ 0x0056, 0x2215, 0x006D, 0x0041, 0x2215, 0x006D, 0x0031, 0x0030, 0x65E5,
+ 0x0031, 0x0031, 0x65E5, 0x0031, 0x0032, 0x65E5, 0x0031, 0x0033, 0x65E5,
+ 0x0031, 0x0034, 0x65E5, 0x0031, 0x0035, 0x65E5, 0x0031, 0x0036, 0x65E5,
+ 0x0031, 0x0037, 0x65E5, 0x0031, 0x0038, 0x65E5, 0x0031, 0x0039, 0x65E5,
+ 0x0032, 0x0030, 0x65E5, 0x0032, 0x0031, 0x65E5, 0x0032, 0x0032, 0x65E5,
+ 0x0032, 0x0033, 0x65E5, 0x0032, 0x0034, 0x65E5, 0x0032, 0x0035, 0x65E5,
+ 0x0032, 0x0036, 0x65E5, 0x0032, 0x0037, 0x65E5, 0x0032, 0x0038, 0x65E5,
+ 0x0032, 0x0039, 0x65E5, 0x0033, 0x0030, 0x65E5, 0x0033, 0x0031, 0x65E5,
+ 0x0067, 0x0061, 0x006C, 0x0066, 0x0066, 0x0069, 0x0066, 0x0066, 0x006C,
+ 0x0640, 0x064E, 0x0651, 0x0640, 0x064F, 0x0651, 0x0640, 0x0650, 0x0651,
+ 0x062A, 0x062C, 0x0645, 0x062A, 0x062D, 0x062C, 0x062A, 0x062D, 0x062C,
+ 0x062A, 0x062D, 0x0645, 0x062A, 0x062E, 0x0645, 0x062A, 0x0645, 0x062C,
+ 0x062A, 0x0645, 0x062D, 0x062A, 0x0645, 0x062E, 0x062C, 0x0645, 0x062D,
+ 0x062C, 0x0645, 0x062D, 0x062D, 0x0645, 0x064A, 0x062D, 0x0645, 0x0649,
+ 0x0633, 0x062D, 0x062C, 0x0633, 0x062C, 0x062D, 0x0633, 0x062C, 0x0649,
+ 0x0633, 0x0645, 0x062D, 0x0633, 0x0645, 0x062D, 0x0633, 0x0645, 0x062C,
+ 0x0633, 0x0645, 0x0645, 0x0633, 0x0645, 0x0645, 0x0635, 0x062D, 0x062D,
+ 0x0635, 0x062D, 0x062D, 0x0635, 0x0645, 0x0645, 0x0634, 0x062D, 0x0645,
+ 0x0634, 0x062D, 0x0645, 0x0634, 0x062C, 0x064A, 0x0634, 0x0645, 0x062E,
+ 0x0634, 0x0645, 0x062E, 0x0634, 0x0645, 0x0645, 0x0634, 0x0645, 0x0645,
+ 0x0636, 0x062D, 0x0649, 0x0636, 0x062E, 0x0645, 0x0636, 0x062E, 0x0645,
+ 0x0637, 0x0645, 0x062D, 0x0637, 0x0645, 0x062D, 0x0637, 0x0645, 0x0645,
+ 0x0637, 0x0645, 0x064A, 0x0639, 0x062C, 0x0645, 0x0639, 0x0645, 0x0645,
+ 0x0639, 0x0645, 0x0645, 0x0639, 0x0645, 0x0649, 0x063A, 0x0645, 0x0645,
+ 0x063A, 0x0645, 0x064A, 0x063A, 0x0645, 0x0649, 0x0641, 0x062E, 0x0645,
+ 0x0641, 0x062E, 0x0645, 0x0642, 0x0645, 0x062D, 0x0642, 0x0645, 0x0645,
+ 0x0644, 0x062D, 0x0645, 0x0644, 0x062D, 0x064A, 0x0644, 0x062D, 0x0649,
+ 0x0644, 0x062C, 0x062C, 0x0644, 0x062C, 0x062C, 0x0644, 0x062E, 0x0645,
+ 0x0644, 0x062E, 0x0645, 0x0644, 0x0645, 0x062D, 0x0644, 0x0645, 0x062D,
+ 0x0645, 0x062D, 0x062C, 0x0645, 0x062D, 0x0645, 0x0645, 0x062D, 0x064A,
+ 0x0645, 0x062C, 0x062D, 0x0645, 0x062C, 0x0645, 0x0645, 0x062E, 0x062C,
+ 0x0645, 0x062E, 0x0645, 0x0645, 0x062C, 0x062E, 0x0647, 0x0645, 0x062C,
+ 0x0647, 0x0645, 0x0645, 0x0646, 0x062D, 0x0645, 0x0646, 0x062D, 0x0649,
+ 0x0646, 0x062C, 0x0645, 0x0646, 0x062C, 0x0645, 0x0646, 0x062C, 0x0649,
+ 0x0646, 0x0645, 0x064A, 0x0646, 0x0645, 0x0649, 0x064A, 0x0645, 0x0645,
+ 0x064A, 0x0645, 0x0645, 0x0628, 0x062E, 0x064A, 0x062A, 0x062C, 0x064A,
+ 0x062A, 0x062C, 0x0649, 0x062A, 0x062E, 0x064A, 0x062A, 0x062E, 0x0649,
+ 0x062A, 0x0645, 0x064A, 0x062A, 0x0645, 0x0649, 0x062C, 0x0645, 0x064A,
+ 0x062C, 0x062D, 0x0649, 0x062C, 0x0645, 0x0649, 0x0633, 0x062E, 0x0649,
+ 0x0635, 0x062D, 0x064A, 0x0634, 0x062D, 0x064A, 0x0636, 0x062D, 0x064A,
+ 0x0644, 0x062C, 0x064A, 0x0644, 0x0645, 0x064A, 0x064A, 0x062D, 0x064A,
+ 0x064A, 0x062C, 0x064A, 0x064A, 0x0645, 0x064A, 0x0645, 0x0645, 0x064A,
+ 0x0642, 0x0645, 0x064A, 0x0646, 0x062D, 0x064A, 0x0642, 0x0645, 0x062D,
+ 0x0644, 0x062D, 0x0645, 0x0639, 0x0645, 0x064A, 0x0643, 0x0645, 0x064A,
+ 0x0646, 0x062C, 0x062D, 0x0645, 0x062E, 0x064A, 0x0644, 0x062C, 0x0645,
+ 0x0643, 0x0645, 0x0645, 0x0644, 0x062C, 0x0645, 0x0646, 0x062C, 0x062D,
+ 0x062C, 0x062D, 0x064A, 0x062D, 0x062C, 0x064A, 0x0645, 0x062C, 0x064A,
+ 0x0641, 0x0645, 0x064A, 0x0628, 0x062D, 0x064A, 0x0643, 0x0645, 0x0645,
+ 0x0639, 0x062C, 0x0645, 0x0635, 0x0645, 0x0645, 0x0633, 0x062E, 0x064A,
+ 0x0646, 0x062C, 0x064A, 0x0635, 0x0644, 0x06D2, 0x0642, 0x0644, 0x06D2,
+ 0x0635, 0x0644, 0x0649};
extern const FX_WCHAR g_UnicodeData_Normalization_Map4[488] = {
- 0x0004, 0x2032, 0x2032, 0x2032, 0x2032, 0x0004, 0x0031, 0x002F, 0x0031, 0x0030, 0x0004, 0x0056, 0x0049, 0x0049, 0x0049, 0x0004,
- 0x0076, 0x0069, 0x0069, 0x0069, 0x0004, 0x0028, 0x0031, 0x0030, 0x0029, 0x0004, 0x0028, 0x0031, 0x0031, 0x0029, 0x0004, 0x0028,
- 0x0031, 0x0032, 0x0029, 0x0004, 0x0028, 0x0031, 0x0033, 0x0029, 0x0004, 0x0028, 0x0031, 0x0034, 0x0029, 0x0004, 0x0028, 0x0031,
- 0x0035, 0x0029, 0x0004, 0x0028, 0x0031, 0x0036, 0x0029, 0x0004, 0x0028, 0x0031, 0x0037, 0x0029, 0x0004, 0x0028, 0x0031, 0x0038,
- 0x0029, 0x0004, 0x0028, 0x0031, 0x0039, 0x0029, 0x0004, 0x0028, 0x0032, 0x0030, 0x0029, 0x0004, 0x222B, 0x222B, 0x222B, 0x222B,
- 0x0004, 0x0028, 0x1100, 0x1161, 0x0029, 0x0004, 0x0028, 0x1102, 0x1161, 0x0029, 0x0004, 0x0028, 0x1103, 0x1161, 0x0029, 0x0004,
- 0x0028, 0x1105, 0x1161, 0x0029, 0x0004, 0x0028, 0x1106, 0x1161, 0x0029, 0x0004, 0x0028, 0x1107, 0x1161, 0x0029, 0x0004, 0x0028,
- 0x1109, 0x1161, 0x0029, 0x0004, 0x0028, 0x110B, 0x1161, 0x0029, 0x0004, 0x0028, 0x110C, 0x1161, 0x0029, 0x0004, 0x0028, 0x110E,
- 0x1161, 0x0029, 0x0004, 0x0028, 0x110F, 0x1161, 0x0029, 0x0004, 0x0028, 0x1110, 0x1161, 0x0029, 0x0004, 0x0028, 0x1111, 0x1161,
- 0x0029, 0x0004, 0x0028, 0x1112, 0x1161, 0x0029, 0x0004, 0x0028, 0x110C, 0x116E, 0x0029, 0x0007, 0x0028, 0x110B, 0x1169, 0x110C,
- 0x1165, 0x11AB, 0x0029, 0x0006, 0x0028, 0x110B, 0x1169, 0x1112, 0x116E, 0x0029, 0x0005, 0x110E, 0x1161, 0x11B7, 0x1100, 0x1169,
- 0x0004, 0x110C, 0x116E, 0x110B, 0x1174, 0x0004, 0x30A2, 0x30D1, 0x30FC, 0x30C8, 0x0004, 0x30A2, 0x30EB, 0x30D5, 0x30A1, 0x0004,
- 0x30A2, 0x30F3, 0x30DA, 0x30A2, 0x0004, 0x30A4, 0x30CB, 0x30F3, 0x30B0, 0x0005, 0x30A8, 0x30B9, 0x30AF, 0x30FC, 0x30C9, 0x0004,
- 0x30A8, 0x30FC, 0x30AB, 0x30FC, 0x0004, 0x30AB, 0x30E9, 0x30C3, 0x30C8, 0x0004, 0x30AB, 0x30ED, 0x30EA, 0x30FC, 0x0004, 0x30AD,
- 0x30E5, 0x30EA, 0x30FC, 0x0004, 0x30AE, 0x30EB, 0x30C0, 0x30FC, 0x0005, 0x30AD, 0x30ED, 0x30B0, 0x30E9, 0x30E0, 0x0006, 0x30AD,
- 0x30ED, 0x30E1, 0x30FC, 0x30C8, 0x30EB, 0x0005, 0x30AD, 0x30ED, 0x30EF, 0x30C3, 0x30C8, 0x0005, 0x30B0, 0x30E9, 0x30E0, 0x30C8,
- 0x30F3, 0x0005, 0x30AF, 0x30EB, 0x30BC, 0x30A4, 0x30ED, 0x0004, 0x30AF, 0x30ED, 0x30FC, 0x30CD, 0x0004, 0x30B5, 0x30A4, 0x30AF,
- 0x30EB, 0x0005, 0x30B5, 0x30F3, 0x30C1, 0x30FC, 0x30E0, 0x0004, 0x30B7, 0x30EA, 0x30F3, 0x30B0, 0x0005, 0x30D1, 0x30FC, 0x30BB,
- 0x30F3, 0x30C8, 0x0004, 0x30D0, 0x30FC, 0x30EC, 0x30EB, 0x0005, 0x30D4, 0x30A2, 0x30B9, 0x30C8, 0x30EB, 0x0005, 0x30D5, 0x30A1,
- 0x30E9, 0x30C3, 0x30C9, 0x0004, 0x30D5, 0x30A3, 0x30FC, 0x30C8, 0x0005, 0x30D6, 0x30C3, 0x30B7, 0x30A7, 0x30EB, 0x0005, 0x30D8,
- 0x30AF, 0x30BF, 0x30FC, 0x30EB, 0x0004, 0x30DD, 0x30A4, 0x30F3, 0x30C8, 0x0004, 0x30DE, 0x30A4, 0x30AF, 0x30ED, 0x0005, 0x30DE,
- 0x30F3, 0x30B7, 0x30E7, 0x30F3, 0x0004, 0x30DF, 0x30AF, 0x30ED, 0x30F3, 0x0005, 0x30DF, 0x30EA, 0x30D0, 0x30FC, 0x30EB, 0x0004,
- 0x30E1, 0x30AC, 0x30C8, 0x30F3, 0x0004, 0x30E1, 0x30FC, 0x30C8, 0x30EB, 0x0004, 0x30EA, 0x30C3, 0x30C8, 0x30EB, 0x0004, 0x30EB,
- 0x30FC, 0x30D6, 0x30EB, 0x0005, 0x30EC, 0x30F3, 0x30C8, 0x30B2, 0x30F3, 0x0004, 0x682A, 0x5F0F, 0x4F1A, 0x793E, 0x0004, 0x006B,
- 0x0063, 0x0061, 0x006C, 0x0004, 0x006D, 0x2215, 0x0073, 0x00B2, 0x0005, 0x0072, 0x0061, 0x0064, 0x2215, 0x0073, 0x0006, 0x0072,
- 0x0061, 0x0064, 0x2215, 0x0073, 0x00B2, 0x0004, 0x0061, 0x002E, 0x006D, 0x002E, 0x0004, 0x0043, 0x2215, 0x006B, 0x0067, 0x0004,
- 0x0070, 0x002E, 0x006D, 0x002E, 0x0004, 0x0627, 0x0644, 0x0644, 0x0647, 0x0004, 0x0627, 0x0643, 0x0628, 0x0631, 0x0004, 0x0645,
- 0x062D, 0x0645, 0x062F, 0x0004, 0x0635, 0x0644, 0x0639, 0x0645, 0x0004, 0x0631, 0x0633, 0x0648, 0x0644, 0x0004, 0x0639, 0x0644,
- 0x064A, 0x0647, 0x0004, 0x0648, 0x0633, 0x0644, 0x0645, 0x0012, 0x0635, 0x0644, 0x0649, 0x0020, 0x0627, 0x0644, 0x0644, 0x0647,
- 0x0020, 0x0639, 0x0644, 0x064A, 0x0647, 0x0020, 0x0648, 0x0633, 0x0644, 0x0645, 0x0008, 0x062C, 0x0644, 0x0020, 0x062C, 0x0644,
- 0x0627, 0x0644, 0x0647, 0x0004, 0x0631, 0x06CC, 0x0627, 0x0644
-};
+ 0x0004, 0x2032, 0x2032, 0x2032, 0x2032, 0x0004, 0x0031, 0x002F, 0x0031,
+ 0x0030, 0x0004, 0x0056, 0x0049, 0x0049, 0x0049, 0x0004, 0x0076, 0x0069,
+ 0x0069, 0x0069, 0x0004, 0x0028, 0x0031, 0x0030, 0x0029, 0x0004, 0x0028,
+ 0x0031, 0x0031, 0x0029, 0x0004, 0x0028, 0x0031, 0x0032, 0x0029, 0x0004,
+ 0x0028, 0x0031, 0x0033, 0x0029, 0x0004, 0x0028, 0x0031, 0x0034, 0x0029,
+ 0x0004, 0x0028, 0x0031, 0x0035, 0x0029, 0x0004, 0x0028, 0x0031, 0x0036,
+ 0x0029, 0x0004, 0x0028, 0x0031, 0x0037, 0x0029, 0x0004, 0x0028, 0x0031,
+ 0x0038, 0x0029, 0x0004, 0x0028, 0x0031, 0x0039, 0x0029, 0x0004, 0x0028,
+ 0x0032, 0x0030, 0x0029, 0x0004, 0x222B, 0x222B, 0x222B, 0x222B, 0x0004,
+ 0x0028, 0x1100, 0x1161, 0x0029, 0x0004, 0x0028, 0x1102, 0x1161, 0x0029,
+ 0x0004, 0x0028, 0x1103, 0x1161, 0x0029, 0x0004, 0x0028, 0x1105, 0x1161,
+ 0x0029, 0x0004, 0x0028, 0x1106, 0x1161, 0x0029, 0x0004, 0x0028, 0x1107,
+ 0x1161, 0x0029, 0x0004, 0x0028, 0x1109, 0x1161, 0x0029, 0x0004, 0x0028,
+ 0x110B, 0x1161, 0x0029, 0x0004, 0x0028, 0x110C, 0x1161, 0x0029, 0x0004,
+ 0x0028, 0x110E, 0x1161, 0x0029, 0x0004, 0x0028, 0x110F, 0x1161, 0x0029,
+ 0x0004, 0x0028, 0x1110, 0x1161, 0x0029, 0x0004, 0x0028, 0x1111, 0x1161,
+ 0x0029, 0x0004, 0x0028, 0x1112, 0x1161, 0x0029, 0x0004, 0x0028, 0x110C,
+ 0x116E, 0x0029, 0x0007, 0x0028, 0x110B, 0x1169, 0x110C, 0x1165, 0x11AB,
+ 0x0029, 0x0006, 0x0028, 0x110B, 0x1169, 0x1112, 0x116E, 0x0029, 0x0005,
+ 0x110E, 0x1161, 0x11B7, 0x1100, 0x1169, 0x0004, 0x110C, 0x116E, 0x110B,
+ 0x1174, 0x0004, 0x30A2, 0x30D1, 0x30FC, 0x30C8, 0x0004, 0x30A2, 0x30EB,
+ 0x30D5, 0x30A1, 0x0004, 0x30A2, 0x30F3, 0x30DA, 0x30A2, 0x0004, 0x30A4,
+ 0x30CB, 0x30F3, 0x30B0, 0x0005, 0x30A8, 0x30B9, 0x30AF, 0x30FC, 0x30C9,
+ 0x0004, 0x30A8, 0x30FC, 0x30AB, 0x30FC, 0x0004, 0x30AB, 0x30E9, 0x30C3,
+ 0x30C8, 0x0004, 0x30AB, 0x30ED, 0x30EA, 0x30FC, 0x0004, 0x30AD, 0x30E5,
+ 0x30EA, 0x30FC, 0x0004, 0x30AE, 0x30EB, 0x30C0, 0x30FC, 0x0005, 0x30AD,
+ 0x30ED, 0x30B0, 0x30E9, 0x30E0, 0x0006, 0x30AD, 0x30ED, 0x30E1, 0x30FC,
+ 0x30C8, 0x30EB, 0x0005, 0x30AD, 0x30ED, 0x30EF, 0x30C3, 0x30C8, 0x0005,
+ 0x30B0, 0x30E9, 0x30E0, 0x30C8, 0x30F3, 0x0005, 0x30AF, 0x30EB, 0x30BC,
+ 0x30A4, 0x30ED, 0x0004, 0x30AF, 0x30ED, 0x30FC, 0x30CD, 0x0004, 0x30B5,
+ 0x30A4, 0x30AF, 0x30EB, 0x0005, 0x30B5, 0x30F3, 0x30C1, 0x30FC, 0x30E0,
+ 0x0004, 0x30B7, 0x30EA, 0x30F3, 0x30B0, 0x0005, 0x30D1, 0x30FC, 0x30BB,
+ 0x30F3, 0x30C8, 0x0004, 0x30D0, 0x30FC, 0x30EC, 0x30EB, 0x0005, 0x30D4,
+ 0x30A2, 0x30B9, 0x30C8, 0x30EB, 0x0005, 0x30D5, 0x30A1, 0x30E9, 0x30C3,
+ 0x30C9, 0x0004, 0x30D5, 0x30A3, 0x30FC, 0x30C8, 0x0005, 0x30D6, 0x30C3,
+ 0x30B7, 0x30A7, 0x30EB, 0x0005, 0x30D8, 0x30AF, 0x30BF, 0x30FC, 0x30EB,
+ 0x0004, 0x30DD, 0x30A4, 0x30F3, 0x30C8, 0x0004, 0x30DE, 0x30A4, 0x30AF,
+ 0x30ED, 0x0005, 0x30DE, 0x30F3, 0x30B7, 0x30E7, 0x30F3, 0x0004, 0x30DF,
+ 0x30AF, 0x30ED, 0x30F3, 0x0005, 0x30DF, 0x30EA, 0x30D0, 0x30FC, 0x30EB,
+ 0x0004, 0x30E1, 0x30AC, 0x30C8, 0x30F3, 0x0004, 0x30E1, 0x30FC, 0x30C8,
+ 0x30EB, 0x0004, 0x30EA, 0x30C3, 0x30C8, 0x30EB, 0x0004, 0x30EB, 0x30FC,
+ 0x30D6, 0x30EB, 0x0005, 0x30EC, 0x30F3, 0x30C8, 0x30B2, 0x30F3, 0x0004,
+ 0x682A, 0x5F0F, 0x4F1A, 0x793E, 0x0004, 0x006B, 0x0063, 0x0061, 0x006C,
+ 0x0004, 0x006D, 0x2215, 0x0073, 0x00B2, 0x0005, 0x0072, 0x0061, 0x0064,
+ 0x2215, 0x0073, 0x0006, 0x0072, 0x0061, 0x0064, 0x2215, 0x0073, 0x00B2,
+ 0x0004, 0x0061, 0x002E, 0x006D, 0x002E, 0x0004, 0x0043, 0x2215, 0x006B,
+ 0x0067, 0x0004, 0x0070, 0x002E, 0x006D, 0x002E, 0x0004, 0x0627, 0x0644,
+ 0x0644, 0x0647, 0x0004, 0x0627, 0x0643, 0x0628, 0x0631, 0x0004, 0x0645,
+ 0x062D, 0x0645, 0x062F, 0x0004, 0x0635, 0x0644, 0x0639, 0x0645, 0x0004,
+ 0x0631, 0x0633, 0x0648, 0x0644, 0x0004, 0x0639, 0x0644, 0x064A, 0x0647,
+ 0x0004, 0x0648, 0x0633, 0x0644, 0x0645, 0x0012, 0x0635, 0x0644, 0x0649,
+ 0x0020, 0x0627, 0x0644, 0x0644, 0x0647, 0x0020, 0x0639, 0x0644, 0x064A,
+ 0x0647, 0x0020, 0x0648, 0x0633, 0x0644, 0x0645, 0x0008, 0x062C, 0x0644,
+ 0x0020, 0x062C, 0x0644, 0x0627, 0x0644, 0x0647, 0x0004, 0x0631, 0x06CC,
+ 0x0627, 0x0644};
diff --git a/core/src/fxcodec/codec/codec_int.h b/core/src/fxcodec/codec/codec_int.h
index 7668f84a20..e9449693dd 100644
--- a/core/src/fxcodec/codec/codec_int.h
+++ b/core/src/fxcodec/codec/codec_int.h
@@ -14,286 +14,359 @@
#include "../../../include/fxcodec/fx_codec.h"
#include "../jbig2/JBig2_Context.h"
-class CCodec_BasicModule : public ICodec_BasicModule
-{
-public:
- virtual FX_BOOL RunLengthEncode(const uint8_t* src_buf, FX_DWORD src_size, uint8_t*& dest_buf,
- FX_DWORD& dest_size);
- virtual FX_BOOL A85Encode(const uint8_t* src_buf, FX_DWORD src_size, uint8_t*& dest_buf,
- FX_DWORD& dest_size);
- virtual ICodec_ScanlineDecoder* CreateRunLengthDecoder(const uint8_t* src_buf, FX_DWORD src_size, int width, int height,
- int nComps, int bpc);
+class CCodec_BasicModule : public ICodec_BasicModule {
+ public:
+ virtual FX_BOOL RunLengthEncode(const uint8_t* src_buf,
+ FX_DWORD src_size,
+ uint8_t*& dest_buf,
+ FX_DWORD& dest_size);
+ virtual FX_BOOL A85Encode(const uint8_t* src_buf,
+ FX_DWORD src_size,
+ uint8_t*& dest_buf,
+ FX_DWORD& dest_size);
+ virtual ICodec_ScanlineDecoder* CreateRunLengthDecoder(const uint8_t* src_buf,
+ FX_DWORD src_size,
+ int width,
+ int height,
+ int nComps,
+ int bpc);
};
struct CCodec_ImageDataCache {
- int m_Width, m_Height;
- int m_nCachedLines;
- uint8_t m_Data;
+ int m_Width, m_Height;
+ int m_nCachedLines;
+ uint8_t m_Data;
};
-class CCodec_ScanlineDecoder : public ICodec_ScanlineDecoder
-{
-public:
+class CCodec_ScanlineDecoder : public ICodec_ScanlineDecoder {
+ public:
+ CCodec_ScanlineDecoder();
- CCodec_ScanlineDecoder();
+ virtual ~CCodec_ScanlineDecoder();
- virtual ~CCodec_ScanlineDecoder();
+ virtual FX_DWORD GetSrcOffset() { return -1; }
- virtual FX_DWORD GetSrcOffset()
- {
- return -1;
- }
+ virtual void DownScale(int dest_width, int dest_height);
- virtual void DownScale(int dest_width, int dest_height);
+ uint8_t* GetScanline(int line);
- uint8_t* GetScanline(int line);
+ FX_BOOL SkipToScanline(int line, IFX_Pause* pPause);
- FX_BOOL SkipToScanline(int line, IFX_Pause* pPause);
+ int GetWidth() { return m_OutputWidth; }
- int GetWidth()
- {
- return m_OutputWidth;
- }
+ int GetHeight() { return m_OutputHeight; }
- int GetHeight()
- {
- return m_OutputHeight;
- }
+ int CountComps() { return m_nComps; }
- int CountComps()
- {
- return m_nComps;
- }
+ int GetBPC() { return m_bpc; }
- int GetBPC()
- {
- return m_bpc;
- }
+ FX_BOOL IsColorTransformed() { return m_bColorTransformed; }
- FX_BOOL IsColorTransformed()
- {
- return m_bColorTransformed;
+ void ClearImageData() {
+ if (m_pDataCache) {
+ FX_Free(m_pDataCache);
}
+ m_pDataCache = NULL;
+ }
- void ClearImageData()
- {
- if (m_pDataCache) {
- FX_Free(m_pDataCache);
- }
- m_pDataCache = NULL;
- }
-protected:
+ protected:
+ int m_OrigWidth;
- int m_OrigWidth;
+ int m_OrigHeight;
- int m_OrigHeight;
+ int m_DownScale;
- int m_DownScale;
+ int m_OutputWidth;
- int m_OutputWidth;
+ int m_OutputHeight;
- int m_OutputHeight;
+ int m_nComps;
- int m_nComps;
+ int m_bpc;
- int m_bpc;
+ int m_Pitch;
- int m_Pitch;
+ FX_BOOL m_bColorTransformed;
- FX_BOOL m_bColorTransformed;
+ uint8_t* ReadNextLine();
- uint8_t* ReadNextLine();
+ virtual FX_BOOL v_Rewind() = 0;
- virtual FX_BOOL v_Rewind() = 0;
+ virtual uint8_t* v_GetNextLine() = 0;
- virtual uint8_t* v_GetNextLine() = 0;
+ virtual void v_DownScale(int dest_width, int dest_height) = 0;
- virtual void v_DownScale(int dest_width, int dest_height) = 0;
+ int m_NextLine;
- int m_NextLine;
+ uint8_t* m_pLastScanline;
- uint8_t* m_pLastScanline;
-
- CCodec_ImageDataCache* m_pDataCache;
+ CCodec_ImageDataCache* m_pDataCache;
};
-class CCodec_FaxModule : public ICodec_FaxModule
-{
-public:
- virtual ICodec_ScanlineDecoder* CreateDecoder(const uint8_t* src_buf, FX_DWORD src_size, int width, int height,
- int K, FX_BOOL EndOfLine, FX_BOOL EncodedByteAlign, FX_BOOL BlackIs1, int Columns, int Rows);
- FX_BOOL Encode(const uint8_t* src_buf, int width, int height, int pitch, uint8_t*& dest_buf, FX_DWORD& dest_size);
+class CCodec_FaxModule : public ICodec_FaxModule {
+ public:
+ virtual ICodec_ScanlineDecoder* CreateDecoder(const uint8_t* src_buf,
+ FX_DWORD src_size,
+ int width,
+ int height,
+ int K,
+ FX_BOOL EndOfLine,
+ FX_BOOL EncodedByteAlign,
+ FX_BOOL BlackIs1,
+ int Columns,
+ int Rows);
+ FX_BOOL Encode(const uint8_t* src_buf,
+ int width,
+ int height,
+ int pitch,
+ uint8_t*& dest_buf,
+ FX_DWORD& dest_size);
};
-class CCodec_FlateModule : public ICodec_FlateModule
-{
-public:
- virtual ICodec_ScanlineDecoder* CreateDecoder(const uint8_t* src_buf, FX_DWORD src_size, int width, int height,
- int nComps, int bpc, int predictor, int Colors, int BitsPerComponent, int Columns);
- virtual FX_DWORD FlateOrLZWDecode(FX_BOOL bLZW, const uint8_t* src_buf, FX_DWORD src_size, FX_BOOL bEarlyChange,
- int predictor, int Colors, int BitsPerComponent, int Columns,
- FX_DWORD estimated_size, uint8_t*& dest_buf, FX_DWORD& dest_size);
- virtual FX_BOOL Encode(const uint8_t* src_buf, FX_DWORD src_size,
- int predictor, int Colors, int BitsPerComponent, int Columns,
- uint8_t*& dest_buf, FX_DWORD& dest_size);
- virtual FX_BOOL Encode(const uint8_t* src_buf, FX_DWORD src_size, uint8_t*& dest_buf, FX_DWORD& dest_size);
+class CCodec_FlateModule : public ICodec_FlateModule {
+ public:
+ virtual ICodec_ScanlineDecoder* CreateDecoder(const uint8_t* src_buf,
+ FX_DWORD src_size,
+ int width,
+ int height,
+ int nComps,
+ int bpc,
+ int predictor,
+ int Colors,
+ int BitsPerComponent,
+ int Columns);
+ virtual FX_DWORD FlateOrLZWDecode(FX_BOOL bLZW,
+ const uint8_t* src_buf,
+ FX_DWORD src_size,
+ FX_BOOL bEarlyChange,
+ int predictor,
+ int Colors,
+ int BitsPerComponent,
+ int Columns,
+ FX_DWORD estimated_size,
+ uint8_t*& dest_buf,
+ FX_DWORD& dest_size);
+ virtual FX_BOOL Encode(const uint8_t* src_buf,
+ FX_DWORD src_size,
+ int predictor,
+ int Colors,
+ int BitsPerComponent,
+ int Columns,
+ uint8_t*& dest_buf,
+ FX_DWORD& dest_size);
+ virtual FX_BOOL Encode(const uint8_t* src_buf,
+ FX_DWORD src_size,
+ uint8_t*& dest_buf,
+ FX_DWORD& dest_size);
};
-class CCodec_JpegModule : public ICodec_JpegModule
-{
-public:
- CCodec_JpegModule() : m_pExtProvider(NULL) {}
- void SetPovider(IFX_JpegProvider* pJP)
- {
- m_pExtProvider = pJP;
- }
- ICodec_ScanlineDecoder* CreateDecoder(const uint8_t* src_buf, FX_DWORD src_size,
- int width, int height, int nComps, FX_BOOL ColorTransform);
- FX_BOOL LoadInfo(const uint8_t* src_buf, FX_DWORD src_size, int& width, int& height,
- int& num_components, int& bits_per_components, FX_BOOL& color_transform,
- uint8_t** icc_buf_ptr, FX_DWORD* icc_length);
- FX_BOOL Encode(const CFX_DIBSource* pSource, uint8_t*& dest_buf, FX_STRSIZE& dest_size, int quality, const uint8_t* icc_buf, FX_DWORD icc_length);
- virtual void* Start();
- virtual void Finish(void* pContext);
- virtual void Input(void* pContext, const uint8_t* src_buf, FX_DWORD src_size);
- virtual int ReadHeader(void* pContext, int* width, int* height, int* nComps);
- virtual int StartScanline(void* pContext, int down_scale);
- virtual FX_BOOL ReadScanline(void* pContext, uint8_t* dest_buf);
- virtual FX_DWORD GetAvailInput(void* pContext, uint8_t** avail_buf_ptr);
-protected:
- IFX_JpegProvider* m_pExtProvider;
+class CCodec_JpegModule : public ICodec_JpegModule {
+ public:
+ CCodec_JpegModule() : m_pExtProvider(NULL) {}
+ void SetPovider(IFX_JpegProvider* pJP) { m_pExtProvider = pJP; }
+ ICodec_ScanlineDecoder* CreateDecoder(const uint8_t* src_buf,
+ FX_DWORD src_size,
+ int width,
+ int height,
+ int nComps,
+ FX_BOOL ColorTransform);
+ FX_BOOL LoadInfo(const uint8_t* src_buf,
+ FX_DWORD src_size,
+ int& width,
+ int& height,
+ int& num_components,
+ int& bits_per_components,
+ FX_BOOL& color_transform,
+ uint8_t** icc_buf_ptr,
+ FX_DWORD* icc_length);
+ FX_BOOL Encode(const CFX_DIBSource* pSource,
+ uint8_t*& dest_buf,
+ FX_STRSIZE& dest_size,
+ int quality,
+ const uint8_t* icc_buf,
+ FX_DWORD icc_length);
+ virtual void* Start();
+ virtual void Finish(void* pContext);
+ virtual void Input(void* pContext, const uint8_t* src_buf, FX_DWORD src_size);
+ virtual int ReadHeader(void* pContext, int* width, int* height, int* nComps);
+ virtual int StartScanline(void* pContext, int down_scale);
+ virtual FX_BOOL ReadScanline(void* pContext, uint8_t* dest_buf);
+ virtual FX_DWORD GetAvailInput(void* pContext, uint8_t** avail_buf_ptr);
+
+ protected:
+ IFX_JpegProvider* m_pExtProvider;
};
-class CCodec_IccModule : public ICodec_IccModule
-{
-public:
- virtual IccCS GetProfileCS(const uint8_t* pProfileData, unsigned int dwProfileSize);
- virtual IccCS GetProfileCS(IFX_FileRead* pFile);
- virtual void* CreateTransform(ICodec_IccModule::IccParam* pInputParam,
- ICodec_IccModule::IccParam* pOutputParam,
- ICodec_IccModule::IccParam* pProofParam = NULL,
- FX_DWORD dwIntent = Icc_INTENT_PERCEPTUAL,
- FX_DWORD dwFlag = Icc_FLAGS_DEFAULT,
- FX_DWORD dwPrfIntent = Icc_INTENT_ABSOLUTE_COLORIMETRIC,
- FX_DWORD dwPrfFlag = Icc_FLAGS_SOFTPROOFING
- );
- virtual void* CreateTransform_sRGB(const uint8_t* pProfileData, FX_DWORD dwProfileSize, int32_t& nComponents, int32_t intent = 0,
- FX_DWORD dwSrcFormat = Icc_FORMAT_DEFAULT);
- virtual void* CreateTransform_CMYK(const uint8_t* pSrcProfileData, FX_DWORD dwSrcProfileSize, int32_t& nSrcComponents,
- const uint8_t* pDstProfileData, FX_DWORD dwDstProfileSize, int32_t intent = 0,
- FX_DWORD dwSrcFormat = Icc_FORMAT_DEFAULT,
- FX_DWORD dwDstFormat = Icc_FORMAT_DEFAULT
- );
- virtual void DestroyTransform(void* pTransform);
- virtual void Translate(void* pTransform, FX_FLOAT* pSrcValues, FX_FLOAT* pDestValues);
- virtual void TranslateScanline(void* pTransform, uint8_t* pDest, const uint8_t* pSrc, int pixels);
- virtual void SetComponents(FX_DWORD nComponents) {m_nComponents = nComponents;}
- virtual ~CCodec_IccModule();
-protected:
- CFX_MapByteStringToPtr m_MapTranform;
- CFX_MapByteStringToPtr m_MapProfile;
- FX_DWORD m_nComponents;
- typedef enum {
- Icc_CLASS_INPUT = 0,
- Icc_CLASS_OUTPUT,
- Icc_CLASS_PROOF,
- Icc_CLASS_MAX
- } Icc_CLASS;
- void* CreateProfile(ICodec_IccModule::IccParam* pIccParam, Icc_CLASS ic, CFX_BinaryBuf* pTransformKey);
+class CCodec_IccModule : public ICodec_IccModule {
+ public:
+ virtual IccCS GetProfileCS(const uint8_t* pProfileData,
+ unsigned int dwProfileSize);
+ virtual IccCS GetProfileCS(IFX_FileRead* pFile);
+ virtual void* CreateTransform(
+ ICodec_IccModule::IccParam* pInputParam,
+ ICodec_IccModule::IccParam* pOutputParam,
+ ICodec_IccModule::IccParam* pProofParam = NULL,
+ FX_DWORD dwIntent = Icc_INTENT_PERCEPTUAL,
+ FX_DWORD dwFlag = Icc_FLAGS_DEFAULT,
+ FX_DWORD dwPrfIntent = Icc_INTENT_ABSOLUTE_COLORIMETRIC,
+ FX_DWORD dwPrfFlag = Icc_FLAGS_SOFTPROOFING);
+ virtual void* CreateTransform_sRGB(const uint8_t* pProfileData,
+ FX_DWORD dwProfileSize,
+ int32_t& nComponents,
+ int32_t intent = 0,
+ FX_DWORD dwSrcFormat = Icc_FORMAT_DEFAULT);
+ virtual void* CreateTransform_CMYK(const uint8_t* pSrcProfileData,
+ FX_DWORD dwSrcProfileSize,
+ int32_t& nSrcComponents,
+ const uint8_t* pDstProfileData,
+ FX_DWORD dwDstProfileSize,
+ int32_t intent = 0,
+ FX_DWORD dwSrcFormat = Icc_FORMAT_DEFAULT,
+ FX_DWORD dwDstFormat = Icc_FORMAT_DEFAULT);
+ virtual void DestroyTransform(void* pTransform);
+ virtual void Translate(void* pTransform,
+ FX_FLOAT* pSrcValues,
+ FX_FLOAT* pDestValues);
+ virtual void TranslateScanline(void* pTransform,
+ uint8_t* pDest,
+ const uint8_t* pSrc,
+ int pixels);
+ virtual void SetComponents(FX_DWORD nComponents) {
+ m_nComponents = nComponents;
+ }
+ virtual ~CCodec_IccModule();
+
+ protected:
+ CFX_MapByteStringToPtr m_MapTranform;
+ CFX_MapByteStringToPtr m_MapProfile;
+ FX_DWORD m_nComponents;
+ typedef enum {
+ Icc_CLASS_INPUT = 0,
+ Icc_CLASS_OUTPUT,
+ Icc_CLASS_PROOF,
+ Icc_CLASS_MAX
+ } Icc_CLASS;
+ void* CreateProfile(ICodec_IccModule::IccParam* pIccParam,
+ Icc_CLASS ic,
+ CFX_BinaryBuf* pTransformKey);
};
-class CCodec_JpxModule : public ICodec_JpxModule
-{
-public:
- CCodec_JpxModule();
- void* CreateDecoder(const uint8_t* src_buf, FX_DWORD src_size, FX_BOOL useColorSpace = FALSE);
- void GetImageInfo(void* ctx, FX_DWORD& width, FX_DWORD& height,
- FX_DWORD& codestream_nComps, FX_DWORD& output_nComps);
- FX_BOOL Decode(void* ctx, uint8_t* dest_data, int pitch, FX_BOOL bTranslateColor, uint8_t* offsets);
- void DestroyDecoder(void* ctx);
+class CCodec_JpxModule : public ICodec_JpxModule {
+ public:
+ CCodec_JpxModule();
+ void* CreateDecoder(const uint8_t* src_buf,
+ FX_DWORD src_size,
+ FX_BOOL useColorSpace = FALSE);
+ void GetImageInfo(void* ctx,
+ FX_DWORD& width,
+ FX_DWORD& height,
+ FX_DWORD& codestream_nComps,
+ FX_DWORD& output_nComps);
+ FX_BOOL Decode(void* ctx,
+ uint8_t* dest_data,
+ int pitch,
+ FX_BOOL bTranslateColor,
+ uint8_t* offsets);
+ void DestroyDecoder(void* ctx);
};
-class CPDF_Jbig2Interface : public CJBig2_Module
-{
-public:
- virtual void *JBig2_Malloc(FX_DWORD dwSize)
- {
- return FX_Alloc(uint8_t, dwSize);
+class CPDF_Jbig2Interface : public CJBig2_Module {
+ public:
+ virtual void* JBig2_Malloc(FX_DWORD dwSize) {
+ return FX_Alloc(uint8_t, dwSize);
+ }
+ virtual void* JBig2_Malloc2(FX_DWORD num, FX_DWORD dwSize) {
+ if (dwSize && num >= UINT_MAX / dwSize) {
+ return NULL;
}
- virtual void *JBig2_Malloc2(FX_DWORD num, FX_DWORD dwSize)
- {
- if (dwSize && num >= UINT_MAX / dwSize) {
- return NULL;
- }
- return FX_Alloc(uint8_t, num * dwSize);
+ return FX_Alloc(uint8_t, num * dwSize);
+ }
+ virtual void* JBig2_Malloc3(FX_DWORD num, FX_DWORD dwSize, FX_DWORD dwSize2) {
+ if (dwSize2 && dwSize >= UINT_MAX / dwSize2) {
+ return NULL;
}
- virtual void *JBig2_Malloc3(FX_DWORD num, FX_DWORD dwSize, FX_DWORD dwSize2)
- {
- if (dwSize2 && dwSize >= UINT_MAX / dwSize2) {
- return NULL;
- }
- FX_DWORD size = dwSize2 * dwSize;
- if (size && num >= UINT_MAX / size) {
- return NULL;
- }
- return FX_Alloc(uint8_t, num * size);
- }
- virtual void *JBig2_Realloc(void* pMem, FX_DWORD dwSize)
- {
- return FX_Realloc(uint8_t, pMem, dwSize);
- }
- virtual void JBig2_Free(void* pMem)
- {
- FX_Free(pMem);
+ FX_DWORD size = dwSize2 * dwSize;
+ if (size && num >= UINT_MAX / size) {
+ return NULL;
}
+ return FX_Alloc(uint8_t, num * size);
+ }
+ virtual void* JBig2_Realloc(void* pMem, FX_DWORD dwSize) {
+ return FX_Realloc(uint8_t, pMem, dwSize);
+ }
+ virtual void JBig2_Free(void* pMem) { FX_Free(pMem); }
};
-class CCodec_Jbig2Context
-{
-public:
- CCodec_Jbig2Context();
- ~CCodec_Jbig2Context() {};
-
- FX_DWORD m_width;
- FX_DWORD m_height;
- uint8_t* m_src_buf;
- FX_DWORD m_src_size;
- const uint8_t* m_global_data;
- FX_DWORD m_global_size;
- uint8_t* m_dest_buf;
- FX_DWORD m_dest_pitch;
- FX_BOOL m_bFileReader;
- IFX_Pause* m_pPause;
- CJBig2_Context* m_pContext;
- CJBig2_Image* m_dest_image;
+class CCodec_Jbig2Context {
+ public:
+ CCodec_Jbig2Context();
+ ~CCodec_Jbig2Context(){};
+
+ FX_DWORD m_width;
+ FX_DWORD m_height;
+ uint8_t* m_src_buf;
+ FX_DWORD m_src_size;
+ const uint8_t* m_global_data;
+ FX_DWORD m_global_size;
+ uint8_t* m_dest_buf;
+ FX_DWORD m_dest_pitch;
+ FX_BOOL m_bFileReader;
+ IFX_Pause* m_pPause;
+ CJBig2_Context* m_pContext;
+ CJBig2_Image* m_dest_image;
};
-class CCodec_Jbig2Module : public ICodec_Jbig2Module
-{
-public:
- CCodec_Jbig2Module() {};
- ~CCodec_Jbig2Module();
- FX_BOOL Decode(FX_DWORD width, FX_DWORD height, const uint8_t* src_buf, FX_DWORD src_size,
- const uint8_t* global_data, FX_DWORD global_size, uint8_t* dest_buf, FX_DWORD dest_pitch);
- FX_BOOL Decode(IFX_FileRead* file_ptr,
- FX_DWORD& width, FX_DWORD& height, FX_DWORD& pitch, uint8_t*& dest_buf);
- void* CreateJbig2Context();
- FXCODEC_STATUS StartDecode(void* pJbig2Context, FX_DWORD width, FX_DWORD height, const uint8_t* src_buf, FX_DWORD src_size,
- const uint8_t* global_data, FX_DWORD global_size, uint8_t* dest_buf, FX_DWORD dest_pitch, IFX_Pause* pPause);
-
- FXCODEC_STATUS StartDecode(void* pJbig2Context, IFX_FileRead* file_ptr,
- FX_DWORD& width, FX_DWORD& height, FX_DWORD& pitch, uint8_t*& dest_buf, IFX_Pause* pPause);
- FXCODEC_STATUS ContinueDecode(void* pJbig2Context, IFX_Pause* pPause);
- void DestroyJbig2Context(void* pJbig2Context);
- CPDF_Jbig2Interface m_Module;
- std::list<CJBig2_CachePair> m_SymbolDictCache;
-private:
+class CCodec_Jbig2Module : public ICodec_Jbig2Module {
+ public:
+ CCodec_Jbig2Module(){};
+ ~CCodec_Jbig2Module();
+ FX_BOOL Decode(FX_DWORD width,
+ FX_DWORD height,
+ const uint8_t* src_buf,
+ FX_DWORD src_size,
+ const uint8_t* global_data,
+ FX_DWORD global_size,
+ uint8_t* dest_buf,
+ FX_DWORD dest_pitch);
+ FX_BOOL Decode(IFX_FileRead* file_ptr,
+ FX_DWORD& width,
+ FX_DWORD& height,
+ FX_DWORD& pitch,
+ uint8_t*& dest_buf);
+ void* CreateJbig2Context();
+ FXCODEC_STATUS StartDecode(void* pJbig2Context,
+ FX_DWORD width,
+ FX_DWORD height,
+ const uint8_t* src_buf,
+ FX_DWORD src_size,
+ const uint8_t* global_data,
+ FX_DWORD global_size,
+ uint8_t* dest_buf,
+ FX_DWORD dest_pitch,
+ IFX_Pause* pPause);
+
+ FXCODEC_STATUS StartDecode(void* pJbig2Context,
+ IFX_FileRead* file_ptr,
+ FX_DWORD& width,
+ FX_DWORD& height,
+ FX_DWORD& pitch,
+ uint8_t*& dest_buf,
+ IFX_Pause* pPause);
+ FXCODEC_STATUS ContinueDecode(void* pJbig2Context, IFX_Pause* pPause);
+ void DestroyJbig2Context(void* pJbig2Context);
+ CPDF_Jbig2Interface m_Module;
+ std::list<CJBig2_CachePair> m_SymbolDictCache;
+
+ private:
};
struct DecodeData {
-public:
- DecodeData(unsigned char* src_data, OPJ_SIZE_T src_size) :
- src_data(src_data), src_size(src_size), offset(0) {
- }
- unsigned char* src_data;
- OPJ_SIZE_T src_size;
- OPJ_SIZE_T offset;
+ public:
+ DecodeData(unsigned char* src_data, OPJ_SIZE_T src_size)
+ : src_data(src_data), src_size(src_size), offset(0) {}
+ unsigned char* src_data;
+ OPJ_SIZE_T src_size;
+ OPJ_SIZE_T offset;
};
/* Wrappers for C-style callbacks. */
-OPJ_SIZE_T opj_read_from_memory (void* p_buffer, OPJ_SIZE_T nb_bytes, void* p_user_data);
-OPJ_SIZE_T opj_write_from_memory (void* p_buffer, OPJ_SIZE_T nb_bytes, void* p_user_data);
-OPJ_OFF_T opj_skip_from_memory (OPJ_OFF_T nb_bytes, void* p_user_data);
-OPJ_BOOL opj_seek_from_memory (OPJ_OFF_T nb_bytes, void* p_user_data);
+OPJ_SIZE_T opj_read_from_memory(void* p_buffer,
+ OPJ_SIZE_T nb_bytes,
+ void* p_user_data);
+OPJ_SIZE_T opj_write_from_memory(void* p_buffer,
+ OPJ_SIZE_T nb_bytes,
+ void* p_user_data);
+OPJ_OFF_T opj_skip_from_memory(OPJ_OFF_T nb_bytes, void* p_user_data);
+OPJ_BOOL opj_seek_from_memory(OPJ_OFF_T nb_bytes, void* p_user_data);
#endif // CORE_SRC_FXCODEC_CODEC_CODEC_INT_H_
diff --git a/core/src/fxcodec/codec/fx_codec.cpp b/core/src/fxcodec/codec/fx_codec.cpp
index 9bbcce105f..806cac1bc3 100644
--- a/core/src/fxcodec/codec/fx_codec.cpp
+++ b/core/src/fxcodec/codec/fx_codec.cpp
@@ -7,405 +7,402 @@
#include "../../../include/fxcodec/fx_codec.h"
#include "codec_int.h"
CCodec_ModuleMgr::CCodec_ModuleMgr()
- : m_pBasicModule(new CCodec_BasicModule),
- m_pFaxModule(new CCodec_FaxModule),
- m_pJpegModule(new CCodec_JpegModule),
- m_pJpxModule(new CCodec_JpxModule),
- m_pJbig2Module(new CCodec_Jbig2Module),
- m_pIccModule(new CCodec_IccModule),
- m_pFlateModule(new CCodec_FlateModule) {
+ : m_pBasicModule(new CCodec_BasicModule),
+ m_pFaxModule(new CCodec_FaxModule),
+ m_pJpegModule(new CCodec_JpegModule),
+ m_pJpxModule(new CCodec_JpxModule),
+ m_pJbig2Module(new CCodec_Jbig2Module),
+ m_pIccModule(new CCodec_IccModule),
+ m_pFlateModule(new CCodec_FlateModule) {}
+CCodec_ScanlineDecoder::CCodec_ScanlineDecoder() {
+ m_NextLine = -1;
+ m_pDataCache = NULL;
+ m_pLastScanline = NULL;
}
-CCodec_ScanlineDecoder::CCodec_ScanlineDecoder()
-{
- m_NextLine = -1;
- m_pDataCache = NULL;
- m_pLastScanline = NULL;
+CCodec_ScanlineDecoder::~CCodec_ScanlineDecoder() {
+ if (m_pDataCache) {
+ FX_Free(m_pDataCache);
+ }
}
-CCodec_ScanlineDecoder::~CCodec_ScanlineDecoder()
-{
- if (m_pDataCache) {
- FX_Free(m_pDataCache);
+uint8_t* CCodec_ScanlineDecoder::GetScanline(int line) {
+ if (m_pDataCache && line < m_pDataCache->m_nCachedLines) {
+ return &m_pDataCache->m_Data + line * m_Pitch;
+ }
+ if (m_NextLine == line + 1) {
+ return m_pLastScanline;
+ }
+ if (m_NextLine < 0 || m_NextLine > line) {
+ if (!v_Rewind()) {
+ return NULL;
}
+ m_NextLine = 0;
+ }
+ while (m_NextLine < line) {
+ ReadNextLine();
+ m_NextLine++;
+ }
+ m_pLastScanline = ReadNextLine();
+ m_NextLine++;
+ return m_pLastScanline;
}
-uint8_t* CCodec_ScanlineDecoder::GetScanline(int line)
-{
- if (m_pDataCache && line < m_pDataCache->m_nCachedLines) {
- return &m_pDataCache->m_Data + line * m_Pitch;
- }
- if (m_NextLine == line + 1) {
- return m_pLastScanline;
- }
- if (m_NextLine < 0 || m_NextLine > line) {
- if (!v_Rewind()) {
- return NULL;
- }
- m_NextLine = 0;
- }
- while (m_NextLine < line) {
- ReadNextLine();
- m_NextLine ++;
- }
+FX_BOOL CCodec_ScanlineDecoder::SkipToScanline(int line, IFX_Pause* pPause) {
+ if (m_pDataCache && line < m_pDataCache->m_nCachedLines) {
+ return FALSE;
+ }
+ if (m_NextLine == line || m_NextLine == line + 1) {
+ return FALSE;
+ }
+ if (m_NextLine < 0 || m_NextLine > line) {
+ v_Rewind();
+ m_NextLine = 0;
+ }
+ m_pLastScanline = NULL;
+ while (m_NextLine < line) {
m_pLastScanline = ReadNextLine();
- m_NextLine ++;
- return m_pLastScanline;
-}
-FX_BOOL CCodec_ScanlineDecoder::SkipToScanline(int line, IFX_Pause* pPause)
-{
- if (m_pDataCache && line < m_pDataCache->m_nCachedLines) {
- return FALSE;
- }
- if (m_NextLine == line || m_NextLine == line + 1) {
- return FALSE;
- }
- if (m_NextLine < 0 || m_NextLine > line) {
- v_Rewind();
- m_NextLine = 0;
- }
- m_pLastScanline = NULL;
- while (m_NextLine < line) {
- m_pLastScanline = ReadNextLine();
- m_NextLine ++;
- if (pPause && pPause->NeedToPauseNow()) {
- return TRUE;
- }
+ m_NextLine++;
+ if (pPause && pPause->NeedToPauseNow()) {
+ return TRUE;
}
- return FALSE;
+ }
+ return FALSE;
}
-uint8_t* CCodec_ScanlineDecoder::ReadNextLine()
-{
- uint8_t* pLine = v_GetNextLine();
- if (pLine == NULL) {
- return NULL;
- }
- if (m_pDataCache && m_NextLine == m_pDataCache->m_nCachedLines) {
- FXSYS_memcpy(&m_pDataCache->m_Data + m_NextLine * m_Pitch, pLine, m_Pitch);
- m_pDataCache->m_nCachedLines ++;
- }
- return pLine;
+uint8_t* CCodec_ScanlineDecoder::ReadNextLine() {
+ uint8_t* pLine = v_GetNextLine();
+ if (pLine == NULL) {
+ return NULL;
+ }
+ if (m_pDataCache && m_NextLine == m_pDataCache->m_nCachedLines) {
+ FXSYS_memcpy(&m_pDataCache->m_Data + m_NextLine * m_Pitch, pLine, m_Pitch);
+ m_pDataCache->m_nCachedLines++;
+ }
+ return pLine;
}
-void CCodec_ScanlineDecoder::DownScale(int dest_width, int dest_height)
-{
- if (dest_width < 0) {
- dest_width = -dest_width;
- }
- if (dest_height < 0) {
- dest_height = -dest_height;
- }
- v_DownScale(dest_width, dest_height);
- if (m_pDataCache) {
- if (m_pDataCache->m_Height == m_OutputHeight && m_pDataCache->m_Width == m_OutputWidth) {
- return;
- }
- FX_Free(m_pDataCache);
- m_pDataCache = NULL;
- }
- m_pDataCache = (CCodec_ImageDataCache*)FX_TryAlloc(uint8_t, sizeof(CCodec_ImageDataCache) + m_Pitch * m_OutputHeight);
- if (m_pDataCache == NULL) {
- return;
+void CCodec_ScanlineDecoder::DownScale(int dest_width, int dest_height) {
+ if (dest_width < 0) {
+ dest_width = -dest_width;
+ }
+ if (dest_height < 0) {
+ dest_height = -dest_height;
+ }
+ v_DownScale(dest_width, dest_height);
+ if (m_pDataCache) {
+ if (m_pDataCache->m_Height == m_OutputHeight &&
+ m_pDataCache->m_Width == m_OutputWidth) {
+ return;
}
- m_pDataCache->m_Height = m_OutputHeight;
- m_pDataCache->m_Width = m_OutputWidth;
- m_pDataCache->m_nCachedLines = 0;
+ FX_Free(m_pDataCache);
+ m_pDataCache = NULL;
+ }
+ m_pDataCache = (CCodec_ImageDataCache*)FX_TryAlloc(
+ uint8_t, sizeof(CCodec_ImageDataCache) + m_Pitch * m_OutputHeight);
+ if (m_pDataCache == NULL) {
+ return;
+ }
+ m_pDataCache->m_Height = m_OutputHeight;
+ m_pDataCache->m_Width = m_OutputWidth;
+ m_pDataCache->m_nCachedLines = 0;
}
-FX_BOOL CCodec_BasicModule::RunLengthEncode(const uint8_t* src_buf, FX_DWORD src_size, uint8_t*& dest_buf,
- FX_DWORD& dest_size)
-{
- return FALSE;
+FX_BOOL CCodec_BasicModule::RunLengthEncode(const uint8_t* src_buf,
+ FX_DWORD src_size,
+ uint8_t*& dest_buf,
+ FX_DWORD& dest_size) {
+ return FALSE;
}
-extern "C" double FXstrtod(const char* nptr, char** endptr)
-{
- double ret = 0.0;
- const char* ptr = nptr;
- const char* exp_ptr = NULL;
- int e_number = 0,
- e_signal = 0,
- e_point = 0,
- is_negative = 0;
- int exp_ret = 0, exp_sig = 1,
- fra_ret = 0, fra_count = 0, fra_base = 1;
- if(nptr == NULL) {
- return 0.0;
+extern "C" double FXstrtod(const char* nptr, char** endptr) {
+ double ret = 0.0;
+ const char* ptr = nptr;
+ const char* exp_ptr = NULL;
+ int e_number = 0, e_signal = 0, e_point = 0, is_negative = 0;
+ int exp_ret = 0, exp_sig = 1, fra_ret = 0, fra_count = 0, fra_base = 1;
+ if (nptr == NULL) {
+ return 0.0;
+ }
+ for (;; ptr++) {
+ if (!e_number && !e_point && (*ptr == '\t' || *ptr == ' ')) {
+ continue;
}
- for (;; ptr++) {
- if(!e_number && !e_point && (*ptr == '\t' || *ptr == ' ')) {
- continue;
- }
- if(*ptr >= '0' && *ptr <= '9') {
- if(!e_number) {
- e_number = 1;
- }
- if(!e_point) {
- ret *= 10;
- ret += (*ptr - '0');
- } else {
- fra_count++;
- fra_ret *= 10;
- fra_ret += (*ptr - '0');
- }
- continue;
- }
- if(!e_point && *ptr == '.') {
- e_point = 1;
- continue;
- }
- if(!e_number && !e_point && !e_signal) {
- switch(*ptr) {
- case '-':
- is_negative = 1;
- case '+':
- e_signal = 1;
- continue;
- }
- }
- if(e_number && (*ptr == 'e' || *ptr == 'E')) {
-#define EXPONENT_DETECT(ptr) \
- for(;;ptr++){ \
- if(*ptr < '0' || *ptr > '9'){ \
- if(endptr) *endptr = (char*)ptr; \
- break; \
- }else{ \
- exp_ret *= 10; \
- exp_ret += (*ptr - '0'); \
- continue; \
- } \
+ if (*ptr >= '0' && *ptr <= '9') {
+ if (!e_number) {
+ e_number = 1;
+ }
+ if (!e_point) {
+ ret *= 10;
+ ret += (*ptr - '0');
+ } else {
+ fra_count++;
+ fra_ret *= 10;
+ fra_ret += (*ptr - '0');
+ }
+ continue;
}
- exp_ptr = ptr++;
- if(*ptr == '+' || *ptr == '-') {
- exp_sig = (*ptr++ == '+') ? 1 : -1;
- if(*ptr < '0' || *ptr > '9') {
- if(endptr) {
- *endptr = (char*)exp_ptr;
- }
- break;
- }
- EXPONENT_DETECT(ptr);
- } else if(*ptr >= '0' && *ptr <= '9') {
- EXPONENT_DETECT(ptr);
- } else {
- if(endptr) {
- *endptr = (char*)exp_ptr;
- }
- break;
- }
-#undef EXPONENT_DETECT
- break;
- }
- if(ptr != nptr && !e_number) {
- if(endptr) {
- *endptr = (char*)nptr;
- }
- break;
+ if (!e_point && *ptr == '.') {
+ e_point = 1;
+ continue;
+ }
+ if (!e_number && !e_point && !e_signal) {
+ switch (*ptr) {
+ case '-':
+ is_negative = 1;
+ case '+':
+ e_signal = 1;
+ continue;
+ }
+ }
+ if (e_number && (*ptr == 'e' || *ptr == 'E')) {
+#define EXPONENT_DETECT(ptr) \
+ for (;; ptr++) { \
+ if (*ptr < '0' || *ptr > '9') { \
+ if (endptr) \
+ *endptr = (char*)ptr; \
+ break; \
+ } else { \
+ exp_ret *= 10; \
+ exp_ret += (*ptr - '0'); \
+ continue; \
+ } \
+ }
+ exp_ptr = ptr++;
+ if (*ptr == '+' || *ptr == '-') {
+ exp_sig = (*ptr++ == '+') ? 1 : -1;
+ if (*ptr < '0' || *ptr > '9') {
+ if (endptr) {
+ *endptr = (char*)exp_ptr;
+ }
+ break;
}
- if(endptr) {
- *endptr = (char*)ptr;
+ EXPONENT_DETECT(ptr);
+ } else if (*ptr >= '0' && *ptr <= '9') {
+ EXPONENT_DETECT(ptr);
+ } else {
+ if (endptr) {
+ *endptr = (char*)exp_ptr;
}
break;
+ }
+#undef EXPONENT_DETECT
+ break;
}
- while(fra_count--) {
- fra_base *= 10;
+ if (ptr != nptr && !e_number) {
+ if (endptr) {
+ *endptr = (char*)nptr;
+ }
+ break;
}
- ret += (double)fra_ret / (double)fra_base;
- if(exp_sig == 1) {
- while(exp_ret--) {
- ret *= 10.0;
- }
- } else {
- while(exp_ret--) {
- ret /= 10.0;
- }
+ if (endptr) {
+ *endptr = (char*)ptr;
+ }
+ break;
+ }
+ while (fra_count--) {
+ fra_base *= 10;
+ }
+ ret += (double)fra_ret / (double)fra_base;
+ if (exp_sig == 1) {
+ while (exp_ret--) {
+ ret *= 10.0;
+ }
+ } else {
+ while (exp_ret--) {
+ ret /= 10.0;
}
- return is_negative ? -ret : ret;
+ }
+ return is_negative ? -ret : ret;
}
-FX_BOOL CCodec_BasicModule::A85Encode(const uint8_t* src_buf, FX_DWORD src_size, uint8_t*& dest_buf,
- FX_DWORD& dest_size)
-{
- return FALSE;
+FX_BOOL CCodec_BasicModule::A85Encode(const uint8_t* src_buf,
+ FX_DWORD src_size,
+ uint8_t*& dest_buf,
+ FX_DWORD& dest_size) {
+ return FALSE;
}
-class CCodec_RLScanlineDecoder : public CCodec_ScanlineDecoder
-{
-public:
- CCodec_RLScanlineDecoder();
- virtual ~CCodec_RLScanlineDecoder();
- FX_BOOL Create(const uint8_t* src_buf, FX_DWORD src_size, int width, int height, int nComps, int bpc);
- virtual void v_DownScale(int dest_width, int dest_height) {}
- virtual FX_BOOL v_Rewind();
- virtual uint8_t* v_GetNextLine();
- virtual FX_DWORD GetSrcOffset()
- {
- return m_SrcOffset;
- }
-protected:
- FX_BOOL CheckDestSize();
- void GetNextOperator();
- void UpdateOperator(uint8_t used_bytes);
+class CCodec_RLScanlineDecoder : public CCodec_ScanlineDecoder {
+ public:
+ CCodec_RLScanlineDecoder();
+ virtual ~CCodec_RLScanlineDecoder();
+ FX_BOOL Create(const uint8_t* src_buf,
+ FX_DWORD src_size,
+ int width,
+ int height,
+ int nComps,
+ int bpc);
+ virtual void v_DownScale(int dest_width, int dest_height) {}
+ virtual FX_BOOL v_Rewind();
+ virtual uint8_t* v_GetNextLine();
+ virtual FX_DWORD GetSrcOffset() { return m_SrcOffset; }
- uint8_t* m_pScanline;
- const uint8_t* m_pSrcBuf;
- FX_DWORD m_SrcSize;
- FX_DWORD m_dwLineBytes;
- FX_DWORD m_SrcOffset;
- FX_BOOL m_bEOD;
- uint8_t m_Operator;
+ protected:
+ FX_BOOL CheckDestSize();
+ void GetNextOperator();
+ void UpdateOperator(uint8_t used_bytes);
+
+ uint8_t* m_pScanline;
+ const uint8_t* m_pSrcBuf;
+ FX_DWORD m_SrcSize;
+ FX_DWORD m_dwLineBytes;
+ FX_DWORD m_SrcOffset;
+ FX_BOOL m_bEOD;
+ uint8_t m_Operator;
};
CCodec_RLScanlineDecoder::CCodec_RLScanlineDecoder()
- : m_pScanline(NULL)
- , m_pSrcBuf(NULL)
- , m_SrcSize(0)
- , m_dwLineBytes(0)
- , m_SrcOffset(0)
- , m_bEOD(FALSE)
- , m_Operator(0)
-{
-}
-CCodec_RLScanlineDecoder::~CCodec_RLScanlineDecoder()
-{
- if (m_pScanline) {
- FX_Free(m_pScanline);
- }
+ : m_pScanline(NULL),
+ m_pSrcBuf(NULL),
+ m_SrcSize(0),
+ m_dwLineBytes(0),
+ m_SrcOffset(0),
+ m_bEOD(FALSE),
+ m_Operator(0) {}
+CCodec_RLScanlineDecoder::~CCodec_RLScanlineDecoder() {
+ if (m_pScanline) {
+ FX_Free(m_pScanline);
+ }
}
-FX_BOOL CCodec_RLScanlineDecoder::CheckDestSize()
-{
- FX_DWORD i = 0;
- FX_DWORD old_size = 0;
- FX_DWORD dest_size = 0;
- while (i < m_SrcSize) {
- if (m_pSrcBuf[i] < 128) {
- old_size = dest_size;
- dest_size += m_pSrcBuf[i] + 1;
- if (dest_size < old_size) {
- return FALSE;
- }
- i += m_pSrcBuf[i] + 2;
- } else if (m_pSrcBuf[i] > 128) {
- old_size = dest_size;
- dest_size += 257 - m_pSrcBuf[i];
- if (dest_size < old_size) {
- return FALSE;
- }
- i += 2;
- } else {
- break;
- }
- }
- if (((FX_DWORD)m_OrigWidth * m_nComps * m_bpc * m_OrigHeight + 7) / 8 > dest_size) {
+FX_BOOL CCodec_RLScanlineDecoder::CheckDestSize() {
+ FX_DWORD i = 0;
+ FX_DWORD old_size = 0;
+ FX_DWORD dest_size = 0;
+ while (i < m_SrcSize) {
+ if (m_pSrcBuf[i] < 128) {
+ old_size = dest_size;
+ dest_size += m_pSrcBuf[i] + 1;
+ if (dest_size < old_size) {
+ return FALSE;
+ }
+ i += m_pSrcBuf[i] + 2;
+ } else if (m_pSrcBuf[i] > 128) {
+ old_size = dest_size;
+ dest_size += 257 - m_pSrcBuf[i];
+ if (dest_size < old_size) {
return FALSE;
+ }
+ i += 2;
+ } else {
+ break;
}
- return TRUE;
+ }
+ if (((FX_DWORD)m_OrigWidth * m_nComps * m_bpc * m_OrigHeight + 7) / 8 >
+ dest_size) {
+ return FALSE;
+ }
+ return TRUE;
}
-FX_BOOL CCodec_RLScanlineDecoder::Create(const uint8_t* src_buf, FX_DWORD src_size, int width, int height, int nComps, int bpc)
-{
- m_pSrcBuf = src_buf;
- m_SrcSize = src_size;
- m_OutputWidth = m_OrigWidth = width;
- m_OutputHeight = m_OrigHeight = height;
- m_nComps = nComps;
- m_bpc = bpc;
- m_bColorTransformed = FALSE;
- m_DownScale = 1;
- m_Pitch = (width * nComps * bpc + 31) / 32 * 4;
- m_dwLineBytes = (width * nComps * bpc + 7) / 8;
- m_pScanline = FX_Alloc(uint8_t, m_Pitch);
- return CheckDestSize();
+FX_BOOL CCodec_RLScanlineDecoder::Create(const uint8_t* src_buf,
+ FX_DWORD src_size,
+ int width,
+ int height,
+ int nComps,
+ int bpc) {
+ m_pSrcBuf = src_buf;
+ m_SrcSize = src_size;
+ m_OutputWidth = m_OrigWidth = width;
+ m_OutputHeight = m_OrigHeight = height;
+ m_nComps = nComps;
+ m_bpc = bpc;
+ m_bColorTransformed = FALSE;
+ m_DownScale = 1;
+ m_Pitch = (width * nComps * bpc + 31) / 32 * 4;
+ m_dwLineBytes = (width * nComps * bpc + 7) / 8;
+ m_pScanline = FX_Alloc(uint8_t, m_Pitch);
+ return CheckDestSize();
}
-FX_BOOL CCodec_RLScanlineDecoder::v_Rewind()
-{
- FXSYS_memset(m_pScanline, 0, m_Pitch);
- m_SrcOffset = 0;
- m_bEOD = FALSE;
- m_Operator = 0;
- return TRUE;
+FX_BOOL CCodec_RLScanlineDecoder::v_Rewind() {
+ FXSYS_memset(m_pScanline, 0, m_Pitch);
+ m_SrcOffset = 0;
+ m_bEOD = FALSE;
+ m_Operator = 0;
+ return TRUE;
}
-uint8_t* CCodec_RLScanlineDecoder::v_GetNextLine()
-{
- if (m_SrcOffset == 0) {
- GetNextOperator();
- } else {
- if (m_bEOD) {
- return NULL;
- }
+uint8_t* CCodec_RLScanlineDecoder::v_GetNextLine() {
+ if (m_SrcOffset == 0) {
+ GetNextOperator();
+ } else {
+ if (m_bEOD) {
+ return NULL;
}
- FXSYS_memset(m_pScanline, 0, m_Pitch);
- FX_DWORD col_pos = 0;
- FX_BOOL eol = FALSE;
- while (m_SrcOffset < m_SrcSize && !eol) {
- if (m_Operator < 128) {
- FX_DWORD copy_len = m_Operator + 1;
- if (col_pos + copy_len >= m_dwLineBytes) {
- copy_len = m_dwLineBytes - col_pos;
- eol = TRUE;
- }
- if (copy_len >= m_SrcSize - m_SrcOffset) {
- copy_len = m_SrcSize - m_SrcOffset;
- m_bEOD = TRUE;
- }
- FXSYS_memcpy(m_pScanline + col_pos, m_pSrcBuf + m_SrcOffset, copy_len);
- col_pos += copy_len;
- UpdateOperator((uint8_t)copy_len);
- } else if (m_Operator > 128) {
- int fill = 0;
- if (m_SrcOffset - 1 < m_SrcSize - 1) {
- fill = m_pSrcBuf[m_SrcOffset];
- }
- FX_DWORD duplicate_len = 257 - m_Operator;
- if (col_pos + duplicate_len >= m_dwLineBytes) {
- duplicate_len = m_dwLineBytes - col_pos;
- eol = TRUE;
- }
- FXSYS_memset(m_pScanline + col_pos, fill, duplicate_len);
- col_pos += duplicate_len;
- UpdateOperator((uint8_t)duplicate_len);
- } else {
- m_bEOD = TRUE;
- break;
- }
+ }
+ FXSYS_memset(m_pScanline, 0, m_Pitch);
+ FX_DWORD col_pos = 0;
+ FX_BOOL eol = FALSE;
+ while (m_SrcOffset < m_SrcSize && !eol) {
+ if (m_Operator < 128) {
+ FX_DWORD copy_len = m_Operator + 1;
+ if (col_pos + copy_len >= m_dwLineBytes) {
+ copy_len = m_dwLineBytes - col_pos;
+ eol = TRUE;
+ }
+ if (copy_len >= m_SrcSize - m_SrcOffset) {
+ copy_len = m_SrcSize - m_SrcOffset;
+ m_bEOD = TRUE;
+ }
+ FXSYS_memcpy(m_pScanline + col_pos, m_pSrcBuf + m_SrcOffset, copy_len);
+ col_pos += copy_len;
+ UpdateOperator((uint8_t)copy_len);
+ } else if (m_Operator > 128) {
+ int fill = 0;
+ if (m_SrcOffset - 1 < m_SrcSize - 1) {
+ fill = m_pSrcBuf[m_SrcOffset];
+ }
+ FX_DWORD duplicate_len = 257 - m_Operator;
+ if (col_pos + duplicate_len >= m_dwLineBytes) {
+ duplicate_len = m_dwLineBytes - col_pos;
+ eol = TRUE;
+ }
+ FXSYS_memset(m_pScanline + col_pos, fill, duplicate_len);
+ col_pos += duplicate_len;
+ UpdateOperator((uint8_t)duplicate_len);
+ } else {
+ m_bEOD = TRUE;
+ break;
}
- return m_pScanline;
+ }
+ return m_pScanline;
}
-void CCodec_RLScanlineDecoder::GetNextOperator()
-{
- if (m_SrcOffset >= m_SrcSize) {
- m_Operator = 128;
- return;
- }
- m_Operator = m_pSrcBuf[m_SrcOffset];
- m_SrcOffset ++;
+void CCodec_RLScanlineDecoder::GetNextOperator() {
+ if (m_SrcOffset >= m_SrcSize) {
+ m_Operator = 128;
+ return;
+ }
+ m_Operator = m_pSrcBuf[m_SrcOffset];
+ m_SrcOffset++;
}
-void CCodec_RLScanlineDecoder::UpdateOperator(uint8_t used_bytes)
-{
- if (used_bytes == 0) {
- return;
+void CCodec_RLScanlineDecoder::UpdateOperator(uint8_t used_bytes) {
+ if (used_bytes == 0) {
+ return;
+ }
+ if (m_Operator < 128) {
+ FXSYS_assert((FX_DWORD)m_Operator + 1 >= used_bytes);
+ if (used_bytes == m_Operator + 1) {
+ m_SrcOffset += used_bytes;
+ GetNextOperator();
+ return;
}
- if (m_Operator < 128) {
- FXSYS_assert((FX_DWORD)m_Operator + 1 >= used_bytes);
- if (used_bytes == m_Operator + 1) {
- m_SrcOffset += used_bytes;
- GetNextOperator();
- return;
- }
- m_Operator -= used_bytes;
- m_SrcOffset += used_bytes;
- if (m_SrcOffset >= m_SrcSize) {
- m_Operator = 128;
- }
- return;
- }
- uint8_t count = 257 - m_Operator;
- FXSYS_assert((FX_DWORD)count >= used_bytes);
- if (used_bytes == count) {
- m_SrcOffset ++;
- GetNextOperator();
- return;
+ m_Operator -= used_bytes;
+ m_SrcOffset += used_bytes;
+ if (m_SrcOffset >= m_SrcSize) {
+ m_Operator = 128;
}
- count -= used_bytes;
- m_Operator = 257 - count;
+ return;
+ }
+ uint8_t count = 257 - m_Operator;
+ FXSYS_assert((FX_DWORD)count >= used_bytes);
+ if (used_bytes == count) {
+ m_SrcOffset++;
+ GetNextOperator();
+ return;
+ }
+ count -= used_bytes;
+ m_Operator = 257 - count;
}
-ICodec_ScanlineDecoder* CCodec_BasicModule::CreateRunLengthDecoder(const uint8_t* src_buf, FX_DWORD src_size, int width, int height,
- int nComps, int bpc)
-{
- CCodec_RLScanlineDecoder* pRLScanlineDecoder = new CCodec_RLScanlineDecoder;
- if (!pRLScanlineDecoder->Create(src_buf, src_size, width, height, nComps, bpc)) {
- delete pRLScanlineDecoder;
- return NULL;
- }
- return pRLScanlineDecoder;
+ICodec_ScanlineDecoder* CCodec_BasicModule::CreateRunLengthDecoder(
+ const uint8_t* src_buf,
+ FX_DWORD src_size,
+ int width,
+ int height,
+ int nComps,
+ int bpc) {
+ CCodec_RLScanlineDecoder* pRLScanlineDecoder = new CCodec_RLScanlineDecoder;
+ if (!pRLScanlineDecoder->Create(src_buf, src_size, width, height, nComps,
+ bpc)) {
+ delete pRLScanlineDecoder;
+ return NULL;
+ }
+ return pRLScanlineDecoder;
}
diff --git a/core/src/fxcodec/codec/fx_codec_fax.cpp b/core/src/fxcodec/codec/fx_codec_fax.cpp
index d45600372f..4260309380 100644
--- a/core/src/fxcodec/codec/fx_codec_fax.cpp
+++ b/core/src/fxcodec/codec/fx_codec_fax.cpp
@@ -7,981 +7,813 @@
#include "../../../include/fxcodec/fx_codec.h"
#include "codec_int.h"
const uint8_t OneLeadPos[256] = {
- 8, 7, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 8, 7, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
};
const uint8_t ZeroLeadPos[256] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 7, 8,
};
-int _FindBit(const uint8_t* data_buf, int max_pos, int start_pos, int bit)
-{
- if (start_pos >= max_pos) {
- return max_pos;
- }
- const uint8_t* leading_pos = bit ? OneLeadPos : ZeroLeadPos;
- if (start_pos % 8) {
- uint8_t data = data_buf[start_pos / 8];
- if (bit) {
- data &= 0xff >> (start_pos % 8);
- } else {
- data |= 0xff << (8 - start_pos % 8);
- }
- if (leading_pos[data] < 8) {
- return start_pos / 8 * 8 + leading_pos[data];
- }
- start_pos += 7;
- }
- uint8_t skip = bit ? 0x00 : 0xff;
- int byte_pos = start_pos / 8;
- int max_byte = (max_pos + 7) / 8;
- while (byte_pos < max_byte) {
- if (data_buf[byte_pos] != skip) {
- break;
- }
- byte_pos ++;
- }
- if (byte_pos == max_byte) {
- return max_pos;
- }
- int pos = leading_pos[data_buf[byte_pos]] + byte_pos * 8;
- if (pos > max_pos) {
- pos = max_pos;
- }
- return pos;
+int _FindBit(const uint8_t* data_buf, int max_pos, int start_pos, int bit) {
+ if (start_pos >= max_pos) {
+ return max_pos;
+ }
+ const uint8_t* leading_pos = bit ? OneLeadPos : ZeroLeadPos;
+ if (start_pos % 8) {
+ uint8_t data = data_buf[start_pos / 8];
+ if (bit) {
+ data &= 0xff >> (start_pos % 8);
+ } else {
+ data |= 0xff << (8 - start_pos % 8);
+ }
+ if (leading_pos[data] < 8) {
+ return start_pos / 8 * 8 + leading_pos[data];
+ }
+ start_pos += 7;
+ }
+ uint8_t skip = bit ? 0x00 : 0xff;
+ int byte_pos = start_pos / 8;
+ int max_byte = (max_pos + 7) / 8;
+ while (byte_pos < max_byte) {
+ if (data_buf[byte_pos] != skip) {
+ break;
+ }
+ byte_pos++;
+ }
+ if (byte_pos == max_byte) {
+ return max_pos;
+ }
+ int pos = leading_pos[data_buf[byte_pos]] + byte_pos * 8;
+ if (pos > max_pos) {
+ pos = max_pos;
+ }
+ return pos;
+}
+void _FaxG4FindB1B2(const uint8_t* ref_buf,
+ int columns,
+ int a0,
+ FX_BOOL a0color,
+ int& b1,
+ int& b2) {
+ if (a0color) {
+ a0color = 1;
+ }
+ uint8_t first_bit =
+ (a0 < 0) ? 1 : ((ref_buf[a0 / 8] & (1 << (7 - a0 % 8))) != 0);
+ b1 = _FindBit(ref_buf, columns, a0 + 1, !first_bit);
+ if (b1 >= columns) {
+ b1 = b2 = columns;
+ return;
+ }
+ if (first_bit == !a0color) {
+ b1 = _FindBit(ref_buf, columns, b1 + 1, first_bit);
+ first_bit = !first_bit;
+ }
+ if (b1 >= columns) {
+ b1 = b2 = columns;
+ return;
+ }
+ b2 = _FindBit(ref_buf, columns, b1 + 1, first_bit);
+}
+void _FaxFillBits(uint8_t* dest_buf, int columns, int startpos, int endpos) {
+ if (startpos < 0) {
+ startpos = 0;
+ }
+ if (endpos < 0) {
+ endpos = 0;
+ }
+ if (endpos >= columns) {
+ endpos = columns;
+ }
+ if (startpos >= endpos) {
+ return;
+ }
+ int first_byte = startpos / 8;
+ int last_byte = (endpos - 1) / 8;
+ if (first_byte == last_byte) {
+ for (int i = startpos % 8; i <= (endpos - 1) % 8; i++) {
+ dest_buf[first_byte] -= 1 << (7 - i);
+ }
+ return;
+ }
+ int i;
+ for (i = startpos % 8; i < 8; i++) {
+ dest_buf[first_byte] -= 1 << (7 - i);
+ }
+ for (i = 0; i <= (endpos - 1) % 8; i++) {
+ dest_buf[last_byte] -= 1 << (7 - i);
+ }
+ if (last_byte > first_byte + 1) {
+ FXSYS_memset(dest_buf + first_byte + 1, 0, last_byte - first_byte - 1);
+ }
}
-void _FaxG4FindB1B2(const uint8_t* ref_buf, int columns, int a0, FX_BOOL a0color, int& b1, int& b2)
-{
- if (a0color) {
- a0color = 1;
+#define NEXTBIT \
+ src_buf[bitpos / 8] & (1 << (7 - bitpos % 8)); \
+ bitpos++;
+#define ADDBIT(code, bit) \
+ code = code << 1; \
+ if (bit) \
+ code++;
+#define GETBIT(bitpos) src_buf[bitpos / 8] & (1 << (7 - bitpos % 8))
+static const uint8_t FaxBlackRunIns[] = {
+ 0, 2, 0x02, 3, 0, 0x03,
+ 2, 0, 2, 0x02, 1, 0,
+ 0x03, 4, 0, 2, 0x02, 6,
+ 0, 0x03, 5, 0, 1, 0x03,
+ 7, 0, 2, 0x04, 9, 0,
+ 0x05, 8, 0, 3, 0x04, 10,
+ 0, 0x05, 11, 0, 0x07, 12,
+ 0, 2, 0x04, 13, 0, 0x07,
+ 14, 0, 1, 0x18, 15, 0,
+ 5, 0x08, 18, 0, 0x0f, 64,
+ 0, 0x17, 16, 0, 0x18, 17,
+ 0, 0x37, 0, 0, 10, 0x08,
+ 0x00, 0x07, 0x0c, 0x40, 0x07, 0x0d,
+ 0x80, 0x07, 0x17, 24, 0, 0x18,
+ 25, 0, 0x28, 23, 0, 0x37,
+ 22, 0, 0x67, 19, 0, 0x68,
+ 20, 0, 0x6c, 21, 0, 54,
+ 0x12, 1984 % 256, 1984 / 256, 0x13, 2048 % 256, 2048 / 256,
+ 0x14, 2112 % 256, 2112 / 256, 0x15, 2176 % 256, 2176 / 256,
+ 0x16, 2240 % 256, 2240 / 256, 0x17, 2304 % 256, 2304 / 256,
+ 0x1c, 2368 % 256, 2368 / 256, 0x1d, 2432 % 256, 2432 / 256,
+ 0x1e, 2496 % 256, 2496 / 256, 0x1f, 2560 % 256, 2560 / 256,
+ 0x24, 52, 0, 0x27, 55, 0,
+ 0x28, 56, 0, 0x2b, 59, 0,
+ 0x2c, 60, 0, 0x33, 320 % 256, 320 / 256,
+ 0x34, 384 % 256, 384 / 256, 0x35, 448 % 256, 448 / 256,
+ 0x37, 53, 0, 0x38, 54, 0,
+ 0x52, 50, 0, 0x53, 51, 0,
+ 0x54, 44, 0, 0x55, 45, 0,
+ 0x56, 46, 0, 0x57, 47, 0,
+ 0x58, 57, 0, 0x59, 58, 0,
+ 0x5a, 61, 0, 0x5b, 256 % 256, 256 / 256,
+ 0x64, 48, 0, 0x65, 49, 0,
+ 0x66, 62, 0, 0x67, 63, 0,
+ 0x68, 30, 0, 0x69, 31, 0,
+ 0x6a, 32, 0, 0x6b, 33, 0,
+ 0x6c, 40, 0, 0x6d, 41, 0,
+ 0xc8, 128, 0, 0xc9, 192, 0,
+ 0xca, 26, 0, 0xcb, 27, 0,
+ 0xcc, 28, 0, 0xcd, 29, 0,
+ 0xd2, 34, 0, 0xd3, 35, 0,
+ 0xd4, 36, 0, 0xd5, 37, 0,
+ 0xd6, 38, 0, 0xd7, 39, 0,
+ 0xda, 42, 0, 0xdb, 43, 0,
+ 20, 0x4a, 640 % 256, 640 / 256, 0x4b, 704 % 256,
+ 704 / 256, 0x4c, 768 % 256, 768 / 256, 0x4d, 832 % 256,
+ 832 / 256, 0x52, 1280 % 256, 1280 / 256, 0x53, 1344 % 256,
+ 1344 / 256, 0x54, 1408 % 256, 1408 / 256, 0x55, 1472 % 256,
+ 1472 / 256, 0x5a, 1536 % 256, 1536 / 256, 0x5b, 1600 % 256,
+ 1600 / 256, 0x64, 1664 % 256, 1664 / 256, 0x65, 1728 % 256,
+ 1728 / 256, 0x6c, 512 % 256, 512 / 256, 0x6d, 576 % 256,
+ 576 / 256, 0x72, 896 % 256, 896 / 256, 0x73, 960 % 256,
+ 960 / 256, 0x74, 1024 % 256, 1024 / 256, 0x75, 1088 % 256,
+ 1088 / 256, 0x76, 1152 % 256, 1152 / 256, 0x77, 1216 % 256,
+ 1216 / 256, 0xff};
+static const uint8_t FaxWhiteRunIns[] = {
+ 0, 0, 0, 6, 0x07, 2,
+ 0, 0x08, 3, 0, 0x0B, 4,
+ 0, 0x0C, 5, 0, 0x0E, 6,
+ 0, 0x0F, 7, 0, 6, 0x07,
+ 10, 0, 0x08, 11, 0, 0x12,
+ 128, 0, 0x13, 8, 0, 0x14,
+ 9, 0, 0x1b, 64, 0, 9,
+ 0x03, 13, 0, 0x07, 1, 0,
+ 0x08, 12, 0, 0x17, 192, 0,
+ 0x18, 1664 % 256, 1664 / 256, 0x2a, 16, 0,
+ 0x2B, 17, 0, 0x34, 14, 0,
+ 0x35, 15, 0, 12, 0x03, 22,
+ 0, 0x04, 23, 0, 0x08, 20,
+ 0, 0x0c, 19, 0, 0x13, 26,
+ 0, 0x17, 21, 0, 0x18, 28,
+ 0, 0x24, 27, 0, 0x27, 18,
+ 0, 0x28, 24, 0, 0x2B, 25,
+ 0, 0x37, 256 % 256, 256 / 256, 42, 0x02,
+ 29, 0, 0x03, 30, 0, 0x04,
+ 45, 0, 0x05, 46, 0, 0x0a,
+ 47, 0, 0x0b, 48, 0, 0x12,
+ 33, 0, 0x13, 34, 0, 0x14,
+ 35, 0, 0x15, 36, 0, 0x16,
+ 37, 0, 0x17, 38, 0, 0x1a,
+ 31, 0, 0x1b, 32, 0, 0x24,
+ 53, 0, 0x25, 54, 0, 0x28,
+ 39, 0, 0x29, 40, 0, 0x2a,
+ 41, 0, 0x2b, 42, 0, 0x2c,
+ 43, 0, 0x2d, 44, 0, 0x32,
+ 61, 0, 0x33, 62, 0, 0x34,
+ 63, 0, 0x35, 0, 0, 0x36,
+ 320 % 256, 320 / 256, 0x37, 384 % 256, 384 / 256, 0x4a,
+ 59, 0, 0x4b, 60, 0, 0x52,
+ 49, 0, 0x53, 50, 0, 0x54,
+ 51, 0, 0x55, 52, 0, 0x58,
+ 55, 0, 0x59, 56, 0, 0x5a,
+ 57, 0, 0x5b, 58, 0, 0x64,
+ 448 % 256, 448 / 256, 0x65, 512 % 256, 512 / 256, 0x67,
+ 640 % 256, 640 / 256, 0x68, 576 % 256, 576 / 256, 16,
+ 0x98, 1472 % 256, 1472 / 256, 0x99, 1536 % 256, 1536 / 256,
+ 0x9a, 1600 % 256, 1600 / 256, 0x9b, 1728 % 256, 1728 / 256,
+ 0xcc, 704 % 256, 704 / 256, 0xcd, 768 % 256, 768 / 256,
+ 0xd2, 832 % 256, 832 / 256, 0xd3, 896 % 256, 896 / 256,
+ 0xd4, 960 % 256, 960 / 256, 0xd5, 1024 % 256, 1024 / 256,
+ 0xd6, 1088 % 256, 1088 / 256, 0xd7, 1152 % 256, 1152 / 256,
+ 0xd8, 1216 % 256, 1216 / 256, 0xd9, 1280 % 256, 1280 / 256,
+ 0xda, 1344 % 256, 1344 / 256, 0xdb, 1408 % 256, 1408 / 256,
+ 0, 3, 0x08, 1792 % 256, 1792 / 256, 0x0c,
+ 1856 % 256, 1856 / 256, 0x0d, 1920 % 256, 1920 / 256, 10,
+ 0x12, 1984 % 256, 1984 / 256, 0x13, 2048 % 256, 2048 / 256,
+ 0x14, 2112 % 256, 2112 / 256, 0x15, 2176 % 256, 2176 / 256,
+ 0x16, 2240 % 256, 2240 / 256, 0x17, 2304 % 256, 2304 / 256,
+ 0x1c, 2368 % 256, 2368 / 256, 0x1d, 2432 % 256, 2432 / 256,
+ 0x1e, 2496 % 256, 2496 / 256, 0x1f, 2560 % 256, 2560 / 256,
+ 0xff,
+};
+int _FaxGetRun(const uint8_t* ins_array,
+ const uint8_t* src_buf,
+ int& bitpos,
+ int bitsize) {
+ FX_DWORD code = 0;
+ int ins_off = 0;
+ while (1) {
+ uint8_t ins = ins_array[ins_off++];
+ if (ins == 0xff) {
+ return -1;
}
- uint8_t first_bit = (a0 < 0) ? 1 : ((ref_buf[a0 / 8] & (1 << (7 - a0 % 8))) != 0);
- b1 = _FindBit(ref_buf, columns, a0 + 1, !first_bit);
- if (b1 >= columns) {
- b1 = b2 = columns;
- return;
+ if (bitpos >= bitsize) {
+ return -1;
}
- if (first_bit == !a0color) {
- b1 = _FindBit(ref_buf, columns, b1 + 1, first_bit);
- first_bit = !first_bit;
+ code <<= 1;
+ if (src_buf[bitpos / 8] & (1 << (7 - bitpos % 8))) {
+ code++;
}
- if (b1 >= columns) {
- b1 = b2 = columns;
- return;
+ bitpos++;
+ int next_off = ins_off + ins * 3;
+ for (; ins_off < next_off; ins_off += 3) {
+ if (ins_array[ins_off] == code) {
+ return ins_array[ins_off + 1] + ins_array[ins_off + 2] * 256;
+ }
}
- b2 = _FindBit(ref_buf, columns, b1 + 1, first_bit);
+ }
}
-void _FaxFillBits(uint8_t* dest_buf, int columns, int startpos, int endpos)
-{
- if (startpos < 0) {
- startpos = 0;
- }
- if (endpos < 0) {
- endpos = 0;
- }
- if (endpos >= columns) {
- endpos = columns;
- }
- if (startpos >= endpos) {
- return;
+FX_BOOL _FaxG4GetRow(const uint8_t* src_buf,
+ int bitsize,
+ int& bitpos,
+ uint8_t* dest_buf,
+ const uint8_t* ref_buf,
+ int columns) {
+ int a0 = -1, a0color = 1;
+ while (1) {
+ if (bitpos >= bitsize) {
+ return FALSE;
}
- int first_byte = startpos / 8;
- int last_byte = (endpos - 1) / 8;
- if (first_byte == last_byte) {
- for (int i = startpos % 8; i <= (endpos - 1) % 8; i ++) {
- dest_buf[first_byte] -= 1 << (7 - i);
+ int a1, a2, b1, b2;
+ _FaxG4FindB1B2(ref_buf, columns, a0, a0color, b1, b2);
+ FX_BOOL bit = NEXTBIT;
+ int v_delta = 0;
+ if (bit) {
+ } else {
+ if (bitpos >= bitsize) {
+ return FALSE;
+ }
+ FX_BOOL bit1 = NEXTBIT;
+ if (bitpos >= bitsize) {
+ return FALSE;
+ }
+ FX_BOOL bit2 = NEXTBIT;
+ if (bit1 && bit2) {
+ v_delta = 1;
+ } else if (bit1) {
+ v_delta = -1;
+ } else if (bit2) {
+ int run_len1 = 0;
+ while (1) {
+ int run = _FaxGetRun(a0color ? FaxWhiteRunIns : FaxBlackRunIns,
+ src_buf, bitpos, bitsize);
+ run_len1 += run;
+ if (run < 64) {
+ break;
+ }
}
- return;
- }
- int i;
- for (i = startpos % 8; i < 8; i ++) {
- dest_buf[first_byte] -= 1 << (7 - i);
- }
- for (i = 0; i <= (endpos - 1) % 8; i ++) {
- dest_buf[last_byte] -= 1 << (7 - i);
- }
- if (last_byte > first_byte + 1) {
- FXSYS_memset(dest_buf + first_byte + 1, 0, last_byte - first_byte - 1);
- }
-}
-#define NEXTBIT src_buf[bitpos/8] & (1 << (7-bitpos%8)); bitpos ++;
-#define ADDBIT(code, bit) code = code << 1; if (bit) code ++;
-#define GETBIT(bitpos) src_buf[bitpos/8] & (1 << (7-bitpos%8))
-static const uint8_t FaxBlackRunIns[] = {
- 0,
- 2,
- 0x02, 3, 0,
- 0x03, 2, 0,
- 2,
- 0x02, 1, 0,
- 0x03, 4, 0,
- 2,
- 0x02, 6, 0,
- 0x03, 5, 0,
- 1,
- 0x03, 7, 0,
- 2,
- 0x04, 9, 0,
- 0x05, 8, 0,
- 3,
- 0x04, 10, 0,
- 0x05, 11, 0,
- 0x07, 12, 0,
- 2,
- 0x04, 13, 0,
- 0x07, 14, 0,
- 1,
- 0x18, 15, 0,
- 5,
- 0x08, 18, 0,
- 0x0f, 64, 0,
- 0x17, 16, 0,
- 0x18, 17, 0,
- 0x37, 0, 0,
- 10,
- 0x08, 0x00, 0x07,
- 0x0c, 0x40, 0x07,
- 0x0d, 0x80, 0x07,
- 0x17, 24, 0,
- 0x18, 25, 0,
- 0x28, 23, 0,
- 0x37, 22, 0,
- 0x67, 19, 0,
- 0x68, 20, 0,
- 0x6c, 21, 0,
- 54,
- 0x12, 1984 % 256, 1984 / 256,
- 0x13, 2048 % 256, 2048 / 256,
- 0x14, 2112 % 256, 2112 / 256,
- 0x15, 2176 % 256, 2176 / 256,
- 0x16, 2240 % 256, 2240 / 256,
- 0x17, 2304 % 256, 2304 / 256,
- 0x1c, 2368 % 256, 2368 / 256,
- 0x1d, 2432 % 256, 2432 / 256,
- 0x1e, 2496 % 256, 2496 / 256,
- 0x1f, 2560 % 256, 2560 / 256,
- 0x24, 52, 0,
- 0x27, 55, 0,
- 0x28, 56, 0,
- 0x2b, 59, 0,
- 0x2c, 60, 0,
- 0x33, 320 % 256, 320 / 256,
- 0x34, 384 % 256, 384 / 256,
- 0x35, 448 % 256, 448 / 256,
- 0x37, 53, 0,
- 0x38, 54, 0,
- 0x52, 50, 0,
- 0x53, 51, 0,
- 0x54, 44, 0,
- 0x55, 45, 0,
- 0x56, 46, 0,
- 0x57, 47, 0,
- 0x58, 57, 0,
- 0x59, 58, 0,
- 0x5a, 61, 0,
- 0x5b, 256 % 256, 256 / 256,
- 0x64, 48, 0,
- 0x65, 49, 0,
- 0x66, 62, 0,
- 0x67, 63, 0,
- 0x68, 30, 0,
- 0x69, 31, 0,
- 0x6a, 32, 0,
- 0x6b, 33, 0,
- 0x6c, 40, 0,
- 0x6d, 41, 0,
- 0xc8, 128, 0,
- 0xc9, 192, 0,
- 0xca, 26, 0,
- 0xcb, 27, 0,
- 0xcc, 28, 0,
- 0xcd, 29, 0,
- 0xd2, 34, 0,
- 0xd3, 35, 0,
- 0xd4, 36, 0,
- 0xd5, 37, 0,
- 0xd6, 38, 0,
- 0xd7, 39, 0,
- 0xda, 42, 0,
- 0xdb, 43, 0,
- 20,
- 0x4a, 640 % 256, 640 / 256,
- 0x4b, 704 % 256, 704 / 256,
- 0x4c, 768 % 256, 768 / 256,
- 0x4d, 832 % 256, 832 / 256,
- 0x52, 1280 % 256, 1280 / 256,
- 0x53, 1344 % 256, 1344 / 256,
- 0x54, 1408 % 256, 1408 / 256,
- 0x55, 1472 % 256, 1472 / 256,
- 0x5a, 1536 % 256, 1536 / 256,
- 0x5b, 1600 % 256, 1600 / 256,
- 0x64, 1664 % 256, 1664 / 256,
- 0x65, 1728 % 256, 1728 / 256,
- 0x6c, 512 % 256, 512 / 256,
- 0x6d, 576 % 256, 576 / 256,
- 0x72, 896 % 256, 896 / 256,
- 0x73, 960 % 256, 960 / 256,
- 0x74, 1024 % 256, 1024 / 256,
- 0x75, 1088 % 256, 1088 / 256,
- 0x76, 1152 % 256, 1152 / 256,
- 0x77, 1216 % 256, 1216 / 256,
- 0xff
-};
-static const uint8_t FaxWhiteRunIns[] = {
- 0,
- 0,
- 0,
- 6,
- 0x07, 2, 0,
- 0x08, 3, 0,
- 0x0B, 4, 0,
- 0x0C, 5, 0,
- 0x0E, 6, 0,
- 0x0F, 7, 0,
- 6,
- 0x07, 10, 0,
- 0x08, 11, 0,
- 0x12, 128, 0,
- 0x13, 8, 0,
- 0x14, 9, 0,
- 0x1b, 64, 0,
- 9,
- 0x03, 13, 0,
- 0x07, 1, 0,
- 0x08, 12, 0,
- 0x17, 192, 0,
- 0x18, 1664 % 256, 1664 / 256,
- 0x2a, 16, 0,
- 0x2B, 17, 0,
- 0x34, 14, 0,
- 0x35, 15, 0,
- 12,
- 0x03, 22, 0,
- 0x04, 23, 0,
- 0x08, 20, 0,
- 0x0c, 19, 0,
- 0x13, 26, 0,
- 0x17, 21, 0,
- 0x18, 28, 0,
- 0x24, 27, 0,
- 0x27, 18, 0,
- 0x28, 24, 0,
- 0x2B, 25, 0,
- 0x37, 256 % 256, 256 / 256,
- 42,
- 0x02, 29, 0,
- 0x03, 30, 0,
- 0x04, 45, 0,
- 0x05, 46, 0,
- 0x0a, 47, 0,
- 0x0b, 48, 0,
- 0x12, 33, 0,
- 0x13, 34, 0,
- 0x14, 35, 0,
- 0x15, 36, 0,
- 0x16, 37, 0,
- 0x17, 38, 0,
- 0x1a, 31, 0,
- 0x1b, 32, 0,
- 0x24, 53, 0,
- 0x25, 54, 0,
- 0x28, 39, 0,
- 0x29, 40, 0,
- 0x2a, 41, 0,
- 0x2b, 42, 0,
- 0x2c, 43, 0,
- 0x2d, 44, 0,
- 0x32, 61, 0,
- 0x33, 62, 0,
- 0x34, 63, 0,
- 0x35, 0, 0,
- 0x36, 320 % 256, 320 / 256,
- 0x37, 384 % 256, 384 / 256,
- 0x4a, 59, 0,
- 0x4b, 60, 0,
- 0x52, 49, 0,
- 0x53, 50, 0,
- 0x54, 51, 0,
- 0x55, 52, 0,
- 0x58, 55, 0,
- 0x59, 56, 0,
- 0x5a, 57, 0,
- 0x5b, 58, 0,
- 0x64, 448 % 256, 448 / 256,
- 0x65, 512 % 256, 512 / 256,
- 0x67, 640 % 256, 640 / 256,
- 0x68, 576 % 256, 576 / 256,
- 16,
- 0x98, 1472 % 256, 1472 / 256,
- 0x99, 1536 % 256, 1536 / 256,
- 0x9a, 1600 % 256, 1600 / 256,
- 0x9b, 1728 % 256, 1728 / 256,
- 0xcc, 704 % 256, 704 / 256,
- 0xcd, 768 % 256, 768 / 256,
- 0xd2, 832 % 256, 832 / 256,
- 0xd3, 896 % 256, 896 / 256,
- 0xd4, 960 % 256, 960 / 256,
- 0xd5, 1024 % 256, 1024 / 256,
- 0xd6, 1088 % 256, 1088 / 256,
- 0xd7, 1152 % 256, 1152 / 256,
- 0xd8, 1216 % 256, 1216 / 256,
- 0xd9, 1280 % 256, 1280 / 256,
- 0xda, 1344 % 256, 1344 / 256,
- 0xdb, 1408 % 256, 1408 / 256,
- 0,
- 3,
- 0x08, 1792 % 256, 1792 / 256,
- 0x0c, 1856 % 256, 1856 / 256,
- 0x0d, 1920 % 256, 1920 / 256,
- 10,
- 0x12, 1984 % 256, 1984 / 256,
- 0x13, 2048 % 256, 2048 / 256,
- 0x14, 2112 % 256, 2112 / 256,
- 0x15, 2176 % 256, 2176 / 256,
- 0x16, 2240 % 256, 2240 / 256,
- 0x17, 2304 % 256, 2304 / 256,
- 0x1c, 2368 % 256, 2368 / 256,
- 0x1d, 2432 % 256, 2432 / 256,
- 0x1e, 2496 % 256, 2496 / 256,
- 0x1f, 2560 % 256, 2560 / 256,
- 0xff,
-};
-int _FaxGetRun(const uint8_t* ins_array, const uint8_t* src_buf, int& bitpos, int bitsize)
-{
- FX_DWORD code = 0;
- int ins_off = 0;
- while (1) {
- uint8_t ins = ins_array[ins_off++];
- if (ins == 0xff) {
- return -1;
+ if (a0 < 0) {
+ run_len1++;
}
- if (bitpos >= bitsize) {
- return -1;
+ a1 = a0 + run_len1;
+ if (!a0color) {
+ _FaxFillBits(dest_buf, columns, a0, a1);
}
- code <<= 1;
- if (src_buf[bitpos / 8] & (1 << (7 - bitpos % 8))) {
- code ++;
+ int run_len2 = 0;
+ while (1) {
+ int run = _FaxGetRun(a0color ? FaxBlackRunIns : FaxWhiteRunIns,
+ src_buf, bitpos, bitsize);
+ run_len2 += run;
+ if (run < 64) {
+ break;
+ }
}
- bitpos ++;
- int next_off = ins_off + ins * 3;
- for (; ins_off < next_off; ins_off += 3) {
- if (ins_array[ins_off] == code) {
- return ins_array[ins_off + 1] + ins_array[ins_off + 2] * 256;
- }
+ a2 = a1 + run_len2;
+ if (a0color) {
+ _FaxFillBits(dest_buf, columns, a1, a2);
}
- }
-}
-FX_BOOL _FaxG4GetRow(const uint8_t* src_buf, int bitsize, int& bitpos, uint8_t* dest_buf, const uint8_t* ref_buf, int columns)
-{
- int a0 = -1, a0color = 1;
- while (1) {
+ a0 = a2;
+ if (a0 < columns) {
+ continue;
+ }
+ return TRUE;
+ } else {
if (bitpos >= bitsize) {
- return FALSE;
+ return FALSE;
}
- int a1, a2, b1, b2;
- _FaxG4FindB1B2(ref_buf, columns, a0, a0color, b1, b2);
- FX_BOOL bit = NEXTBIT;
- int v_delta = 0;
+ bit = NEXTBIT;
if (bit) {
+ if (!a0color) {
+ _FaxFillBits(dest_buf, columns, a0, b2);
+ }
+ if (b2 >= columns) {
+ return TRUE;
+ }
+ a0 = b2;
+ continue;
} else {
+ if (bitpos >= bitsize) {
+ return FALSE;
+ }
+ FX_BOOL bit1 = NEXTBIT;
+ if (bitpos >= bitsize) {
+ return FALSE;
+ }
+ FX_BOOL bit2 = NEXTBIT;
+ if (bit1 && bit2) {
+ v_delta = 2;
+ } else if (bit1) {
+ v_delta = -2;
+ } else if (bit2) {
if (bitpos >= bitsize) {
- return FALSE;
+ return FALSE;
}
- FX_BOOL bit1 = NEXTBIT;
+ bit = NEXTBIT;
+ if (bit) {
+ v_delta = 3;
+ } else {
+ v_delta = -3;
+ }
+ } else {
if (bitpos >= bitsize) {
- return FALSE;
+ return FALSE;
}
- FX_BOOL bit2 = NEXTBIT;
- if (bit1 && bit2) {
- v_delta = 1;
- } else if (bit1) {
- v_delta = -1;
- } else if (bit2) {
- int run_len1 = 0;
- while (1) {
- int run = _FaxGetRun(a0color ? FaxWhiteRunIns : FaxBlackRunIns, src_buf, bitpos, bitsize);
- run_len1 += run;
- if (run < 64) {
- break;
- }
- }
- if (a0 < 0) {
- run_len1 ++;
- }
- a1 = a0 + run_len1;
- if (!a0color) {
- _FaxFillBits(dest_buf, columns, a0, a1);
- }
- int run_len2 = 0;
- while (1) {
- int run = _FaxGetRun(a0color ? FaxBlackRunIns : FaxWhiteRunIns, src_buf, bitpos, bitsize);
- run_len2 += run;
- if (run < 64) {
- break;
- }
- }
- a2 = a1 + run_len2;
- if (a0color) {
- _FaxFillBits(dest_buf, columns, a1, a2);
- }
- a0 = a2;
- if (a0 < columns) {
- continue;
- }
- return TRUE;
+ bit = NEXTBIT;
+ if (bit) {
+ bitpos += 3;
+ continue;
} else {
- if (bitpos >= bitsize) {
- return FALSE;
- }
- bit = NEXTBIT;
- if (bit) {
- if (!a0color) {
- _FaxFillBits(dest_buf, columns, a0, b2);
- }
- if (b2 >= columns) {
- return TRUE;
- }
- a0 = b2;
- continue;
- } else {
- if (bitpos >= bitsize) {
- return FALSE;
- }
- FX_BOOL bit1 = NEXTBIT;
- if (bitpos >= bitsize) {
- return FALSE;
- }
- FX_BOOL bit2 = NEXTBIT;
- if (bit1 && bit2) {
- v_delta = 2;
- } else if (bit1) {
- v_delta = -2;
- } else if (bit2) {
- if (bitpos >= bitsize) {
- return FALSE;
- }
- bit = NEXTBIT;
- if (bit) {
- v_delta = 3;
- } else {
- v_delta = -3;
- }
- } else {
- if (bitpos >= bitsize) {
- return FALSE;
- }
- bit = NEXTBIT;
- if (bit) {
- bitpos += 3;
- continue;
- } else {
- bitpos += 5;
- return TRUE;
- }
- }
- }
+ bitpos += 5;
+ return TRUE;
}
+ }
}
- a1 = b1 + v_delta;
- if (!a0color) {
- _FaxFillBits(dest_buf, columns, a0, a1);
- }
- if (a1 >= columns) {
- return TRUE;
- }
- a0 = a1;
- a0color = !a0color;
+ }
}
-}
-FX_BOOL _FaxSkipEOL(const uint8_t* src_buf, int bitsize, int& bitpos)
-{
- int startbit = bitpos;
- while (bitpos < bitsize) {
- int bit = NEXTBIT;
- if (bit) {
- if (bitpos - startbit <= 11) {
- bitpos = startbit;
- }
- return TRUE;
- }
+ a1 = b1 + v_delta;
+ if (!a0color) {
+ _FaxFillBits(dest_buf, columns, a0, a1);
}
- return FALSE;
+ if (a1 >= columns) {
+ return TRUE;
+ }
+ a0 = a1;
+ a0color = !a0color;
+ }
+}
+FX_BOOL _FaxSkipEOL(const uint8_t* src_buf, int bitsize, int& bitpos) {
+ int startbit = bitpos;
+ while (bitpos < bitsize) {
+ int bit = NEXTBIT;
+ if (bit) {
+ if (bitpos - startbit <= 11) {
+ bitpos = startbit;
+ }
+ return TRUE;
+ }
+ }
+ return FALSE;
}
-FX_BOOL _FaxGet1DLine(const uint8_t* src_buf, int bitsize, int& bitpos, uint8_t* dest_buf, int columns)
-{
- int color = TRUE;
- int startpos = 0;
+FX_BOOL _FaxGet1DLine(const uint8_t* src_buf,
+ int bitsize,
+ int& bitpos,
+ uint8_t* dest_buf,
+ int columns) {
+ int color = TRUE;
+ int startpos = 0;
+ while (1) {
+ if (bitpos >= bitsize) {
+ return FALSE;
+ }
+ int run_len = 0;
while (1) {
- if (bitpos >= bitsize) {
- return FALSE;
- }
- int run_len = 0;
- while (1) {
- int run = _FaxGetRun(color ? FaxWhiteRunIns : FaxBlackRunIns, src_buf, bitpos, bitsize);
- if (run < 0) {
- while (bitpos < bitsize) {
- int bit = NEXTBIT;
- if (bit) {
- return TRUE;
- }
- }
- return FALSE;
- }
- run_len += run;
- if (run < 64) {
- break;
- }
- }
- if (!color) {
- _FaxFillBits(dest_buf, columns, startpos, startpos + run_len);
- }
- startpos += run_len;
- if (startpos >= columns) {
- break;
+ int run = _FaxGetRun(color ? FaxWhiteRunIns : FaxBlackRunIns, src_buf,
+ bitpos, bitsize);
+ if (run < 0) {
+ while (bitpos < bitsize) {
+ int bit = NEXTBIT;
+ if (bit) {
+ return TRUE;
+ }
}
- color = !color;
- }
- return TRUE;
+ return FALSE;
+ }
+ run_len += run;
+ if (run < 64) {
+ break;
+ }
+ }
+ if (!color) {
+ _FaxFillBits(dest_buf, columns, startpos, startpos + run_len);
+ }
+ startpos += run_len;
+ if (startpos >= columns) {
+ break;
+ }
+ color = !color;
+ }
+ return TRUE;
}
-class CCodec_FaxDecoder : public CCodec_ScanlineDecoder
-{
-public:
- CCodec_FaxDecoder();
- virtual ~CCodec_FaxDecoder();
- FX_BOOL Create(const uint8_t* src_buf, FX_DWORD src_size, int width, int height,
- int K, FX_BOOL EndOfLine, FX_BOOL EncodedByteAlign, FX_BOOL BlackIs1, int Columns, int Rows);
- virtual void v_DownScale(int dest_width, int dest_height) {}
- virtual FX_BOOL v_Rewind();
- virtual uint8_t* v_GetNextLine();
- virtual FX_DWORD GetSrcOffset();
- int m_Encoding, m_bEndOfLine, m_bByteAlign, m_bBlack;
- int bitpos;
- const uint8_t* m_pSrcBuf;
- FX_DWORD m_SrcSize;
- uint8_t* m_pScanlineBuf;
- uint8_t* m_pRefBuf;
+class CCodec_FaxDecoder : public CCodec_ScanlineDecoder {
+ public:
+ CCodec_FaxDecoder();
+ virtual ~CCodec_FaxDecoder();
+ FX_BOOL Create(const uint8_t* src_buf,
+ FX_DWORD src_size,
+ int width,
+ int height,
+ int K,
+ FX_BOOL EndOfLine,
+ FX_BOOL EncodedByteAlign,
+ FX_BOOL BlackIs1,
+ int Columns,
+ int Rows);
+ virtual void v_DownScale(int dest_width, int dest_height) {}
+ virtual FX_BOOL v_Rewind();
+ virtual uint8_t* v_GetNextLine();
+ virtual FX_DWORD GetSrcOffset();
+ int m_Encoding, m_bEndOfLine, m_bByteAlign, m_bBlack;
+ int bitpos;
+ const uint8_t* m_pSrcBuf;
+ FX_DWORD m_SrcSize;
+ uint8_t* m_pScanlineBuf;
+ uint8_t* m_pRefBuf;
};
-CCodec_FaxDecoder::CCodec_FaxDecoder()
-{
- m_pScanlineBuf = NULL;
- m_pRefBuf = NULL;
+CCodec_FaxDecoder::CCodec_FaxDecoder() {
+ m_pScanlineBuf = NULL;
+ m_pRefBuf = NULL;
}
-CCodec_FaxDecoder::~CCodec_FaxDecoder()
-{
- if (m_pScanlineBuf) {
- FX_Free(m_pScanlineBuf);
- }
- if (m_pRefBuf) {
- FX_Free(m_pRefBuf);
- }
+CCodec_FaxDecoder::~CCodec_FaxDecoder() {
+ if (m_pScanlineBuf) {
+ FX_Free(m_pScanlineBuf);
+ }
+ if (m_pRefBuf) {
+ FX_Free(m_pRefBuf);
+ }
}
-FX_BOOL CCodec_FaxDecoder::Create(const uint8_t* src_buf, FX_DWORD src_size, int width, int height,
- int K, FX_BOOL EndOfLine, FX_BOOL EncodedByteAlign, FX_BOOL BlackIs1, int Columns, int Rows)
-{
- m_Encoding = K;
- m_bEndOfLine = EndOfLine;
- m_bByteAlign = EncodedByteAlign;
- m_bBlack = BlackIs1;
- m_OrigWidth = Columns;
- m_OrigHeight = Rows;
- if (m_OrigWidth == 0) {
- m_OrigWidth = width;
- }
- if (m_OrigHeight == 0) {
- m_OrigHeight = height;
- }
- m_Pitch = (m_OrigWidth + 31) / 32 * 4;
- m_OutputWidth = m_OrigWidth;
- m_OutputHeight = m_OrigHeight;
- m_pScanlineBuf = FX_Alloc(uint8_t, m_Pitch);
- m_pRefBuf = FX_Alloc(uint8_t, m_Pitch);
- m_pSrcBuf = src_buf;
- m_SrcSize = src_size;
- m_nComps = 1;
- m_bpc = 1;
- m_bColorTransformed = FALSE;
- return TRUE;
+FX_BOOL CCodec_FaxDecoder::Create(const uint8_t* src_buf,
+ FX_DWORD src_size,
+ int width,
+ int height,
+ int K,
+ FX_BOOL EndOfLine,
+ FX_BOOL EncodedByteAlign,
+ FX_BOOL BlackIs1,
+ int Columns,
+ int Rows) {
+ m_Encoding = K;
+ m_bEndOfLine = EndOfLine;
+ m_bByteAlign = EncodedByteAlign;
+ m_bBlack = BlackIs1;
+ m_OrigWidth = Columns;
+ m_OrigHeight = Rows;
+ if (m_OrigWidth == 0) {
+ m_OrigWidth = width;
+ }
+ if (m_OrigHeight == 0) {
+ m_OrigHeight = height;
+ }
+ m_Pitch = (m_OrigWidth + 31) / 32 * 4;
+ m_OutputWidth = m_OrigWidth;
+ m_OutputHeight = m_OrigHeight;
+ m_pScanlineBuf = FX_Alloc(uint8_t, m_Pitch);
+ m_pRefBuf = FX_Alloc(uint8_t, m_Pitch);
+ m_pSrcBuf = src_buf;
+ m_SrcSize = src_size;
+ m_nComps = 1;
+ m_bpc = 1;
+ m_bColorTransformed = FALSE;
+ return TRUE;
}
-FX_BOOL CCodec_FaxDecoder::v_Rewind()
-{
- FXSYS_memset(m_pRefBuf, 0xff, m_Pitch);
- bitpos = 0;
- return TRUE;
+FX_BOOL CCodec_FaxDecoder::v_Rewind() {
+ FXSYS_memset(m_pRefBuf, 0xff, m_Pitch);
+ bitpos = 0;
+ return TRUE;
}
-uint8_t* CCodec_FaxDecoder::v_GetNextLine()
-{
- int bitsize = m_SrcSize * 8;
- _FaxSkipEOL(m_pSrcBuf, bitsize, bitpos);
- if (bitpos >= bitsize) {
- return NULL;
- }
- FXSYS_memset(m_pScanlineBuf, 0xff, m_Pitch);
- if (m_Encoding < 0) {
- _FaxG4GetRow(m_pSrcBuf, bitsize, bitpos, m_pScanlineBuf, m_pRefBuf, m_OrigWidth);
- FXSYS_memcpy(m_pRefBuf, m_pScanlineBuf, m_Pitch);
- } else if (m_Encoding == 0) {
- _FaxGet1DLine(m_pSrcBuf, bitsize, bitpos, m_pScanlineBuf, m_OrigWidth);
+uint8_t* CCodec_FaxDecoder::v_GetNextLine() {
+ int bitsize = m_SrcSize * 8;
+ _FaxSkipEOL(m_pSrcBuf, bitsize, bitpos);
+ if (bitpos >= bitsize) {
+ return NULL;
+ }
+ FXSYS_memset(m_pScanlineBuf, 0xff, m_Pitch);
+ if (m_Encoding < 0) {
+ _FaxG4GetRow(m_pSrcBuf, bitsize, bitpos, m_pScanlineBuf, m_pRefBuf,
+ m_OrigWidth);
+ FXSYS_memcpy(m_pRefBuf, m_pScanlineBuf, m_Pitch);
+ } else if (m_Encoding == 0) {
+ _FaxGet1DLine(m_pSrcBuf, bitsize, bitpos, m_pScanlineBuf, m_OrigWidth);
+ } else {
+ FX_BOOL bNext1D = m_pSrcBuf[bitpos / 8] & (1 << (7 - bitpos % 8));
+ bitpos++;
+ if (bNext1D) {
+ _FaxGet1DLine(m_pSrcBuf, bitsize, bitpos, m_pScanlineBuf, m_OrigWidth);
} else {
- FX_BOOL bNext1D = m_pSrcBuf[bitpos / 8] & (1 << (7 - bitpos % 8));
- bitpos ++;
- if (bNext1D) {
- _FaxGet1DLine(m_pSrcBuf, bitsize, bitpos, m_pScanlineBuf, m_OrigWidth);
- } else {
- _FaxG4GetRow(m_pSrcBuf, bitsize, bitpos, m_pScanlineBuf, m_pRefBuf, m_OrigWidth);
- }
- FXSYS_memcpy(m_pRefBuf, m_pScanlineBuf, m_Pitch);
- }
- if (m_bEndOfLine) {
- _FaxSkipEOL(m_pSrcBuf, bitsize, bitpos);
- }
- if (m_bByteAlign && bitpos < bitsize) {
- int bitpos0 = bitpos;
- int bitpos1 = (bitpos + 7) / 8 * 8;
- while (m_bByteAlign && bitpos0 < bitpos1) {
- int bit = m_pSrcBuf[bitpos0 / 8] & (1 << (7 - bitpos0 % 8));
- if (bit != 0) {
- m_bByteAlign = FALSE;
- } else {
- bitpos0 ++;
- }
- }
- if (m_bByteAlign) {
- bitpos = bitpos1;
- }
+ _FaxG4GetRow(m_pSrcBuf, bitsize, bitpos, m_pScanlineBuf, m_pRefBuf,
+ m_OrigWidth);
}
- if (m_bBlack) {
- for (int i = 0; i < m_Pitch; i ++) {
- m_pScanlineBuf[i] = ~m_pScanlineBuf[i];
- }
- }
- return m_pScanlineBuf;
+ FXSYS_memcpy(m_pRefBuf, m_pScanlineBuf, m_Pitch);
+ }
+ if (m_bEndOfLine) {
+ _FaxSkipEOL(m_pSrcBuf, bitsize, bitpos);
+ }
+ if (m_bByteAlign && bitpos < bitsize) {
+ int bitpos0 = bitpos;
+ int bitpos1 = (bitpos + 7) / 8 * 8;
+ while (m_bByteAlign && bitpos0 < bitpos1) {
+ int bit = m_pSrcBuf[bitpos0 / 8] & (1 << (7 - bitpos0 % 8));
+ if (bit != 0) {
+ m_bByteAlign = FALSE;
+ } else {
+ bitpos0++;
+ }
+ }
+ if (m_bByteAlign) {
+ bitpos = bitpos1;
+ }
+ }
+ if (m_bBlack) {
+ for (int i = 0; i < m_Pitch; i++) {
+ m_pScanlineBuf[i] = ~m_pScanlineBuf[i];
+ }
+ }
+ return m_pScanlineBuf;
}
-FX_DWORD CCodec_FaxDecoder::GetSrcOffset()
-{
- FX_DWORD ret = (bitpos + 7) / 8;
- if (ret > m_SrcSize) {
- ret = m_SrcSize;
- }
- return ret;
+FX_DWORD CCodec_FaxDecoder::GetSrcOffset() {
+ FX_DWORD ret = (bitpos + 7) / 8;
+ if (ret > m_SrcSize) {
+ ret = m_SrcSize;
+ }
+ return ret;
}
extern "C" {
- void _FaxG4Decode(void*, const uint8_t* src_buf, FX_DWORD src_size, int* pbitpos, uint8_t* dest_buf, int width, int height, int pitch)
- {
- if (pitch == 0) {
- pitch = (width + 7) / 8;
- }
- uint8_t* ref_buf = FX_Alloc(uint8_t, pitch);
- FXSYS_memset(ref_buf, 0xff, pitch);
- int bitpos = *pbitpos;
- for (int iRow = 0; iRow < height; iRow ++) {
- uint8_t* line_buf = dest_buf + iRow * pitch;
- FXSYS_memset(line_buf, 0xff, pitch);
- _FaxG4GetRow(src_buf, src_size << 3, bitpos, line_buf, ref_buf, width);
- FXSYS_memcpy(ref_buf, line_buf, pitch);
- }
- FX_Free(ref_buf);
- *pbitpos = bitpos;
- }
+void _FaxG4Decode(void*,
+ const uint8_t* src_buf,
+ FX_DWORD src_size,
+ int* pbitpos,
+ uint8_t* dest_buf,
+ int width,
+ int height,
+ int pitch) {
+ if (pitch == 0) {
+ pitch = (width + 7) / 8;
+ }
+ uint8_t* ref_buf = FX_Alloc(uint8_t, pitch);
+ FXSYS_memset(ref_buf, 0xff, pitch);
+ int bitpos = *pbitpos;
+ for (int iRow = 0; iRow < height; iRow++) {
+ uint8_t* line_buf = dest_buf + iRow * pitch;
+ FXSYS_memset(line_buf, 0xff, pitch);
+ _FaxG4GetRow(src_buf, src_size << 3, bitpos, line_buf, ref_buf, width);
+ FXSYS_memcpy(ref_buf, line_buf, pitch);
+ }
+ FX_Free(ref_buf);
+ *pbitpos = bitpos;
+}
};
static const uint8_t BlackRunTerminator[128] = {
- 0x37, 10, 0x02, 3, 0x03, 2, 0x02, 2, 0x03, 3, 0x03, 4, 0x02, 4, 0x03, 5,
- 0x05, 6, 0x04, 6, 0x04, 7, 0x05, 7, 0x07, 7, 0x04, 8, 0x07, 8, 0x18, 9,
- 0x17, 10, 0x18, 10, 0x08, 10, 0x67, 11, 0x68, 11, 0x6c, 11, 0x37, 11, 0x28, 11,
- 0x17, 11, 0x18, 11, 0xca, 12, 0xcb, 12, 0xcc, 12, 0xcd, 12, 0x68, 12, 0x69, 12,
- 0x6a, 12, 0x6b, 12, 0xd2, 12, 0xd3, 12, 0xd4, 12, 0xd5, 12, 0xd6, 12, 0xd7, 12,
- 0x6c, 12, 0x6d, 12, 0xda, 12, 0xdb, 12, 0x54, 12, 0x55, 12, 0x56, 12, 0x57, 12,
- 0x64, 12, 0x65, 12, 0x52, 12, 0x53, 12, 0x24, 12, 0x37, 12, 0x38, 12, 0x27, 12,
- 0x28, 12, 0x58, 12, 0x59, 12, 0x2b, 12, 0x2c, 12, 0x5a, 12, 0x66, 12, 0x67, 12,
+ 0x37, 10, 0x02, 3, 0x03, 2, 0x02, 2, 0x03, 3, 0x03, 4, 0x02, 4,
+ 0x03, 5, 0x05, 6, 0x04, 6, 0x04, 7, 0x05, 7, 0x07, 7, 0x04, 8,
+ 0x07, 8, 0x18, 9, 0x17, 10, 0x18, 10, 0x08, 10, 0x67, 11, 0x68, 11,
+ 0x6c, 11, 0x37, 11, 0x28, 11, 0x17, 11, 0x18, 11, 0xca, 12, 0xcb, 12,
+ 0xcc, 12, 0xcd, 12, 0x68, 12, 0x69, 12, 0x6a, 12, 0x6b, 12, 0xd2, 12,
+ 0xd3, 12, 0xd4, 12, 0xd5, 12, 0xd6, 12, 0xd7, 12, 0x6c, 12, 0x6d, 12,
+ 0xda, 12, 0xdb, 12, 0x54, 12, 0x55, 12, 0x56, 12, 0x57, 12, 0x64, 12,
+ 0x65, 12, 0x52, 12, 0x53, 12, 0x24, 12, 0x37, 12, 0x38, 12, 0x27, 12,
+ 0x28, 12, 0x58, 12, 0x59, 12, 0x2b, 12, 0x2c, 12, 0x5a, 12, 0x66, 12,
+ 0x67, 12,
};
static const uint8_t BlackRunMarkup[80] = {
- 0x0f, 10, 0xc8, 12, 0xc9, 12, 0x5b, 12, 0x33, 12, 0x34, 12, 0x35, 12, 0x6c, 13,
- 0x6d, 13, 0x4a, 13, 0x4b, 13, 0x4c, 13, 0x4d, 13, 0x72, 13, 0x73, 13, 0x74, 13,
- 0x75, 13, 0x76, 13, 0x77, 13, 0x52, 13, 0x53, 13, 0x54, 13, 0x55, 13, 0x5a, 13,
- 0x5b, 13, 0x64, 13, 0x65, 13, 0x08, 11, 0x0c, 11, 0x0d, 11, 0x12, 12, 0x13, 12,
- 0x14, 12, 0x15, 12, 0x16, 12, 0x17, 12, 0x1c, 12, 0x1d, 12, 0x1e, 12, 0x1f, 12,
+ 0x0f, 10, 0xc8, 12, 0xc9, 12, 0x5b, 12, 0x33, 12, 0x34, 12, 0x35, 12,
+ 0x6c, 13, 0x6d, 13, 0x4a, 13, 0x4b, 13, 0x4c, 13, 0x4d, 13, 0x72, 13,
+ 0x73, 13, 0x74, 13, 0x75, 13, 0x76, 13, 0x77, 13, 0x52, 13, 0x53, 13,
+ 0x54, 13, 0x55, 13, 0x5a, 13, 0x5b, 13, 0x64, 13, 0x65, 13, 0x08, 11,
+ 0x0c, 11, 0x0d, 11, 0x12, 12, 0x13, 12, 0x14, 12, 0x15, 12, 0x16, 12,
+ 0x17, 12, 0x1c, 12, 0x1d, 12, 0x1e, 12, 0x1f, 12,
};
static const uint8_t WhiteRunTerminator[128] = {
- 0x35, 8,
- 0x07, 6,
- 0x07, 4,
- 0x08, 4,
- 0x0B, 4,
- 0x0C, 4,
- 0x0E, 4,
- 0x0F, 4,
- 0x13, 5,
- 0x14, 5,
- 0x07, 5,
- 0x08, 5,
- 0x08, 6,
- 0x03, 6,
- 0x34, 6,
- 0x35, 6,
- 0x2a, 6,
- 0x2B, 6,
- 0x27, 7,
- 0x0c, 7,
- 0x08, 7,
- 0x17, 7,
- 0x03, 7,
- 0x04, 7,
- 0x28, 7,
- 0x2B, 7,
- 0x13, 7,
- 0x24, 7,
- 0x18, 7,
- 0x02, 8,
- 0x03, 8,
- 0x1a, 8,
- 0x1b, 8,
- 0x12, 8,
- 0x13, 8,
- 0x14, 8,
- 0x15, 8,
- 0x16, 8,
- 0x17, 8,
- 0x28, 8,
- 0x29, 8,
- 0x2a, 8,
- 0x2b, 8,
- 0x2c, 8,
- 0x2d, 8,
- 0x04, 8,
- 0x05, 8,
- 0x0a, 8,
- 0x0b, 8,
- 0x52, 8,
- 0x53, 8,
- 0x54, 8,
- 0x55, 8,
- 0x24, 8,
- 0x25, 8,
- 0x58, 8,
- 0x59, 8,
- 0x5a, 8,
- 0x5b, 8,
- 0x4a, 8,
- 0x4b, 8,
- 0x32, 8,
- 0x33, 8,
- 0x34, 8,
+ 0x35, 8, 0x07, 6, 0x07, 4, 0x08, 4, 0x0B, 4, 0x0C, 4, 0x0E, 4, 0x0F, 4,
+ 0x13, 5, 0x14, 5, 0x07, 5, 0x08, 5, 0x08, 6, 0x03, 6, 0x34, 6, 0x35, 6,
+ 0x2a, 6, 0x2B, 6, 0x27, 7, 0x0c, 7, 0x08, 7, 0x17, 7, 0x03, 7, 0x04, 7,
+ 0x28, 7, 0x2B, 7, 0x13, 7, 0x24, 7, 0x18, 7, 0x02, 8, 0x03, 8, 0x1a, 8,
+ 0x1b, 8, 0x12, 8, 0x13, 8, 0x14, 8, 0x15, 8, 0x16, 8, 0x17, 8, 0x28, 8,
+ 0x29, 8, 0x2a, 8, 0x2b, 8, 0x2c, 8, 0x2d, 8, 0x04, 8, 0x05, 8, 0x0a, 8,
+ 0x0b, 8, 0x52, 8, 0x53, 8, 0x54, 8, 0x55, 8, 0x24, 8, 0x25, 8, 0x58, 8,
+ 0x59, 8, 0x5a, 8, 0x5b, 8, 0x4a, 8, 0x4b, 8, 0x32, 8, 0x33, 8, 0x34, 8,
};
static const uint8_t WhiteRunMarkup[80] = {
- 0x1b, 5,
- 0x12, 5,
- 0x17, 6,
- 0x37, 7,
- 0x36, 8,
- 0x37, 8,
- 0x64, 8,
- 0x65, 8,
- 0x68, 8,
- 0x67, 8,
- 0xcc, 9,
- 0xcd, 9,
- 0xd2, 9,
- 0xd3, 9,
- 0xd4, 9,
- 0xd5, 9,
- 0xd6, 9,
- 0xd7, 9,
- 0xd8, 9,
- 0xd9, 9,
- 0xda, 9,
- 0xdb, 9,
- 0x98, 9,
- 0x99, 9,
- 0x9a, 9,
- 0x18, 6,
- 0x9b, 9,
- 0x08, 11,
- 0x0c, 11,
- 0x0d, 11,
- 0x12, 12,
- 0x13, 12,
- 0x14, 12,
- 0x15, 12,
- 0x16, 12,
- 0x17, 12,
- 0x1c, 12,
- 0x1d, 12,
- 0x1e, 12,
- 0x1f, 12,
+ 0x1b, 5, 0x12, 5, 0x17, 6, 0x37, 7, 0x36, 8, 0x37, 8, 0x64, 8,
+ 0x65, 8, 0x68, 8, 0x67, 8, 0xcc, 9, 0xcd, 9, 0xd2, 9, 0xd3, 9,
+ 0xd4, 9, 0xd5, 9, 0xd6, 9, 0xd7, 9, 0xd8, 9, 0xd9, 9, 0xda, 9,
+ 0xdb, 9, 0x98, 9, 0x99, 9, 0x9a, 9, 0x18, 6, 0x9b, 9, 0x08, 11,
+ 0x0c, 11, 0x0d, 11, 0x12, 12, 0x13, 12, 0x14, 12, 0x15, 12, 0x16, 12,
+ 0x17, 12, 0x1c, 12, 0x1d, 12, 0x1e, 12, 0x1f, 12,
};
-static void _AddBitStream(uint8_t* dest_buf, int& dest_bitpos, int data, int bitlen)
-{
- for (int i = bitlen - 1; i >= 0; i --) {
- if (data & (1 << i)) {
- dest_buf[dest_bitpos / 8] |= 1 << (7 - dest_bitpos % 8);
- }
- dest_bitpos ++;
- }
+static void _AddBitStream(uint8_t* dest_buf,
+ int& dest_bitpos,
+ int data,
+ int bitlen) {
+ for (int i = bitlen - 1; i >= 0; i--) {
+ if (data & (1 << i)) {
+ dest_buf[dest_bitpos / 8] |= 1 << (7 - dest_bitpos % 8);
+ }
+ dest_bitpos++;
+ }
}
-static void _FaxEncodeRun(uint8_t* dest_buf, int& dest_bitpos, int run, FX_BOOL bWhite)
-{
- while (run >= 2560) {
- _AddBitStream(dest_buf, dest_bitpos, 0x1f, 12);
- run -= 2560;
- }
- if (run >= 64) {
- int markup = run - run % 64;
- const uint8_t* p = bWhite ? WhiteRunMarkup : BlackRunMarkup;
- p += (markup / 64 - 1) * 2;
- _AddBitStream(dest_buf, dest_bitpos, *p, p[1]);
- }
- run %= 64;
- const uint8_t* p = bWhite ? WhiteRunTerminator : BlackRunTerminator;
- p += run * 2;
+static void _FaxEncodeRun(uint8_t* dest_buf,
+ int& dest_bitpos,
+ int run,
+ FX_BOOL bWhite) {
+ while (run >= 2560) {
+ _AddBitStream(dest_buf, dest_bitpos, 0x1f, 12);
+ run -= 2560;
+ }
+ if (run >= 64) {
+ int markup = run - run % 64;
+ const uint8_t* p = bWhite ? WhiteRunMarkup : BlackRunMarkup;
+ p += (markup / 64 - 1) * 2;
_AddBitStream(dest_buf, dest_bitpos, *p, p[1]);
+ }
+ run %= 64;
+ const uint8_t* p = bWhite ? WhiteRunTerminator : BlackRunTerminator;
+ p += run * 2;
+ _AddBitStream(dest_buf, dest_bitpos, *p, p[1]);
}
-static void _FaxEncode2DLine(uint8_t* dest_buf, int& dest_bitpos, const uint8_t* src_buf, const uint8_t* ref_buf, int cols)
-{
- int a0 = -1, a0color = 1;
- while (1) {
- int a1 = _FindBit(src_buf, cols, a0 + 1, 1 - a0color);
- int b1, b2;
- _FaxG4FindB1B2(ref_buf, cols, a0, a0color, b1, b2);
- if (b2 < a1) {
- dest_bitpos += 3;
- dest_buf[dest_bitpos / 8] |= 1 << (7 - dest_bitpos % 8);
- dest_bitpos ++;
- a0 = b2;
- } else if (a1 - b1 <= 3 && b1 - a1 <= 3) {
- int delta = a1 - b1;
- switch (delta) {
- case 0:
- dest_buf[dest_bitpos / 8] |= 1 << (7 - dest_bitpos % 8);
- break;
- case 1:
- case 2:
- case 3:
- dest_bitpos += delta == 1 ? 1 : delta + 2;
- dest_buf[dest_bitpos / 8] |= 1 << (7 - dest_bitpos % 8);
- dest_bitpos ++;
- dest_buf[dest_bitpos / 8] |= 1 << (7 - dest_bitpos % 8);
- break;
- case -1:
- case -2:
- case -3:
- dest_bitpos += delta == -1 ? 1 : -delta + 2;
- dest_buf[dest_bitpos / 8] |= 1 << (7 - dest_bitpos % 8);
- dest_bitpos ++;
- break;
- }
- dest_bitpos ++;
- a0 = a1;
- a0color = 1 - a0color;
- } else {
- int a2 = _FindBit(src_buf, cols, a1 + 1, a0color);
- dest_bitpos ++;
- dest_bitpos ++;
- dest_buf[dest_bitpos / 8] |= 1 << (7 - dest_bitpos % 8);
- dest_bitpos ++;
- if (a0 < 0) {
- a0 = 0;
- }
- _FaxEncodeRun(dest_buf, dest_bitpos, a1 - a0, a0color);
- _FaxEncodeRun(dest_buf, dest_bitpos, a2 - a1, 1 - a0color);
- a0 = a2;
- }
- if (a0 >= cols) {
- return;
- }
- }
+static void _FaxEncode2DLine(uint8_t* dest_buf,
+ int& dest_bitpos,
+ const uint8_t* src_buf,
+ const uint8_t* ref_buf,
+ int cols) {
+ int a0 = -1, a0color = 1;
+ while (1) {
+ int a1 = _FindBit(src_buf, cols, a0 + 1, 1 - a0color);
+ int b1, b2;
+ _FaxG4FindB1B2(ref_buf, cols, a0, a0color, b1, b2);
+ if (b2 < a1) {
+ dest_bitpos += 3;
+ dest_buf[dest_bitpos / 8] |= 1 << (7 - dest_bitpos % 8);
+ dest_bitpos++;
+ a0 = b2;
+ } else if (a1 - b1 <= 3 && b1 - a1 <= 3) {
+ int delta = a1 - b1;
+ switch (delta) {
+ case 0:
+ dest_buf[dest_bitpos / 8] |= 1 << (7 - dest_bitpos % 8);
+ break;
+ case 1:
+ case 2:
+ case 3:
+ dest_bitpos += delta == 1 ? 1 : delta + 2;
+ dest_buf[dest_bitpos / 8] |= 1 << (7 - dest_bitpos % 8);
+ dest_bitpos++;
+ dest_buf[dest_bitpos / 8] |= 1 << (7 - dest_bitpos % 8);
+ break;
+ case -1:
+ case -2:
+ case -3:
+ dest_bitpos += delta == -1 ? 1 : -delta + 2;
+ dest_buf[dest_bitpos / 8] |= 1 << (7 - dest_bitpos % 8);
+ dest_bitpos++;
+ break;
+ }
+ dest_bitpos++;
+ a0 = a1;
+ a0color = 1 - a0color;
+ } else {
+ int a2 = _FindBit(src_buf, cols, a1 + 1, a0color);
+ dest_bitpos++;
+ dest_bitpos++;
+ dest_buf[dest_bitpos / 8] |= 1 << (7 - dest_bitpos % 8);
+ dest_bitpos++;
+ if (a0 < 0) {
+ a0 = 0;
+ }
+ _FaxEncodeRun(dest_buf, dest_bitpos, a1 - a0, a0color);
+ _FaxEncodeRun(dest_buf, dest_bitpos, a2 - a1, 1 - a0color);
+ a0 = a2;
+ }
+ if (a0 >= cols) {
+ return;
+ }
+ }
}
-class CCodec_FaxEncoder
-{
-public:
- CCodec_FaxEncoder(const uint8_t* src_buf, int width, int height, int pitch);
- ~CCodec_FaxEncoder();
- void Encode(uint8_t*& dest_buf, FX_DWORD& dest_size);
- void Encode2DLine(const uint8_t* scan_line);
- CFX_BinaryBuf m_DestBuf;
- uint8_t* m_pRefLine;
- uint8_t* m_pLineBuf;
- int m_Cols, m_Rows, m_Pitch;
- const uint8_t* m_pSrcBuf;
+class CCodec_FaxEncoder {
+ public:
+ CCodec_FaxEncoder(const uint8_t* src_buf, int width, int height, int pitch);
+ ~CCodec_FaxEncoder();
+ void Encode(uint8_t*& dest_buf, FX_DWORD& dest_size);
+ void Encode2DLine(const uint8_t* scan_line);
+ CFX_BinaryBuf m_DestBuf;
+ uint8_t* m_pRefLine;
+ uint8_t* m_pLineBuf;
+ int m_Cols, m_Rows, m_Pitch;
+ const uint8_t* m_pSrcBuf;
};
-CCodec_FaxEncoder::CCodec_FaxEncoder(const uint8_t* src_buf, int width, int height, int pitch)
-{
- m_pSrcBuf = src_buf;
- m_Cols = width;
- m_Rows = height;
- m_Pitch = pitch;
- m_pRefLine = FX_Alloc(uint8_t, m_Pitch);
- FXSYS_memset(m_pRefLine, 0xff, m_Pitch);
- m_pLineBuf = FX_Alloc2D(uint8_t, m_Pitch, 8);
- m_DestBuf.EstimateSize(0, 10240);
+CCodec_FaxEncoder::CCodec_FaxEncoder(const uint8_t* src_buf,
+ int width,
+ int height,
+ int pitch) {
+ m_pSrcBuf = src_buf;
+ m_Cols = width;
+ m_Rows = height;
+ m_Pitch = pitch;
+ m_pRefLine = FX_Alloc(uint8_t, m_Pitch);
+ FXSYS_memset(m_pRefLine, 0xff, m_Pitch);
+ m_pLineBuf = FX_Alloc2D(uint8_t, m_Pitch, 8);
+ m_DestBuf.EstimateSize(0, 10240);
}
-CCodec_FaxEncoder::~CCodec_FaxEncoder()
-{
- if (m_pRefLine) {
- FX_Free(m_pRefLine);
- }
- if (m_pLineBuf) {
- FX_Free(m_pLineBuf);
- }
+CCodec_FaxEncoder::~CCodec_FaxEncoder() {
+ if (m_pRefLine) {
+ FX_Free(m_pRefLine);
+ }
+ if (m_pLineBuf) {
+ FX_Free(m_pLineBuf);
+ }
}
-void CCodec_FaxEncoder::Encode(uint8_t*& dest_buf, FX_DWORD& dest_size)
-{
- int dest_bitpos = 0;
- uint8_t last_byte = 0;
- for (int i = 0; i < m_Rows; i ++) {
- const uint8_t* scan_line = m_pSrcBuf + i * m_Pitch;
- FXSYS_memset(m_pLineBuf, 0, m_Pitch * 8);
- m_pLineBuf[0] = last_byte;
- _FaxEncode2DLine(m_pLineBuf, dest_bitpos, scan_line, m_pRefLine, m_Cols);
- m_DestBuf.AppendBlock(m_pLineBuf, dest_bitpos / 8);
- last_byte = m_pLineBuf[dest_bitpos / 8];
- dest_bitpos %= 8;
- FXSYS_memcpy(m_pRefLine, scan_line, m_Pitch);
- }
- if (dest_bitpos) {
- m_DestBuf.AppendByte(last_byte);
- }
- dest_buf = m_DestBuf.GetBuffer();
- dest_size = m_DestBuf.GetSize();
- m_DestBuf.DetachBuffer();
+void CCodec_FaxEncoder::Encode(uint8_t*& dest_buf, FX_DWORD& dest_size) {
+ int dest_bitpos = 0;
+ uint8_t last_byte = 0;
+ for (int i = 0; i < m_Rows; i++) {
+ const uint8_t* scan_line = m_pSrcBuf + i * m_Pitch;
+ FXSYS_memset(m_pLineBuf, 0, m_Pitch * 8);
+ m_pLineBuf[0] = last_byte;
+ _FaxEncode2DLine(m_pLineBuf, dest_bitpos, scan_line, m_pRefLine, m_Cols);
+ m_DestBuf.AppendBlock(m_pLineBuf, dest_bitpos / 8);
+ last_byte = m_pLineBuf[dest_bitpos / 8];
+ dest_bitpos %= 8;
+ FXSYS_memcpy(m_pRefLine, scan_line, m_Pitch);
+ }
+ if (dest_bitpos) {
+ m_DestBuf.AppendByte(last_byte);
+ }
+ dest_buf = m_DestBuf.GetBuffer();
+ dest_size = m_DestBuf.GetSize();
+ m_DestBuf.DetachBuffer();
}
-FX_BOOL CCodec_FaxModule::Encode(const uint8_t* src_buf, int width, int height, int pitch, uint8_t*& dest_buf, FX_DWORD& dest_size)
-{
- CCodec_FaxEncoder encoder(src_buf, width, height, pitch);
- encoder.Encode(dest_buf, dest_size);
- return TRUE;
+FX_BOOL CCodec_FaxModule::Encode(const uint8_t* src_buf,
+ int width,
+ int height,
+ int pitch,
+ uint8_t*& dest_buf,
+ FX_DWORD& dest_size) {
+ CCodec_FaxEncoder encoder(src_buf, width, height, pitch);
+ encoder.Encode(dest_buf, dest_size);
+ return TRUE;
}
-ICodec_ScanlineDecoder* CCodec_FaxModule::CreateDecoder(const uint8_t* src_buf, FX_DWORD src_size, int width, int height,
- int K, FX_BOOL EndOfLine, FX_BOOL EncodedByteAlign, FX_BOOL BlackIs1, int Columns, int Rows)
-{
- CCodec_FaxDecoder* pDecoder = new CCodec_FaxDecoder;
- pDecoder->Create(src_buf, src_size, width, height, K, EndOfLine, EncodedByteAlign, BlackIs1, Columns, Rows);
- return pDecoder;
+ICodec_ScanlineDecoder* CCodec_FaxModule::CreateDecoder(
+ const uint8_t* src_buf,
+ FX_DWORD src_size,
+ int width,
+ int height,
+ int K,
+ FX_BOOL EndOfLine,
+ FX_BOOL EncodedByteAlign,
+ FX_BOOL BlackIs1,
+ int Columns,
+ int Rows) {
+ CCodec_FaxDecoder* pDecoder = new CCodec_FaxDecoder;
+ pDecoder->Create(src_buf, src_size, width, height, K, EndOfLine,
+ EncodedByteAlign, BlackIs1, Columns, Rows);
+ return pDecoder;
}
diff --git a/core/src/fxcodec/codec/fx_codec_flate.cpp b/core/src/fxcodec/codec/fx_codec_flate.cpp
index d129e36392..91d28b0553 100644
--- a/core/src/fxcodec/codec/fx_codec_flate.cpp
+++ b/core/src/fxcodec/codec/fx_codec_flate.cpp
@@ -10,911 +10,968 @@
#include "../../../include/fxcodec/fx_codec_flate.h"
#include "codec_int.h"
-extern "C"
-{
- static void* my_alloc_func(void* opaque, unsigned int items, unsigned int size)
- {
- return FX_Alloc2D(uint8_t, items, size);
- }
- static void my_free_func(void* opaque, void* address)
- {
- FX_Free(address);
- }
- static int FPDFAPI_FlateGetTotalOut(void* context)
- {
- return ((z_stream*)context)->total_out;
- }
- static int FPDFAPI_FlateGetTotalIn(void* context)
- {
- return ((z_stream*)context)->total_in;
- }
- static void FPDFAPI_FlateCompress(unsigned char* dest_buf,
- unsigned long* dest_size,
- const unsigned char* src_buf,
- unsigned long src_size)
- {
- compress(dest_buf, dest_size, src_buf, src_size);
- }
- void* FPDFAPI_FlateInit(void* (*alloc_func)(void*, unsigned int, unsigned int),
- void (*free_func)(void*, void*))
- {
- z_stream* p = (z_stream*)alloc_func(0, 1, sizeof(z_stream));
- if (p == NULL) {
- return NULL;
- }
- FXSYS_memset(p, 0, sizeof(z_stream));
- p->zalloc = alloc_func;
- p->zfree = free_func;
- inflateInit(p);
- return p;
- }
- void FPDFAPI_FlateInput(void* context, const unsigned char* src_buf, unsigned int src_size)
- {
- ((z_stream*)context)->next_in = (unsigned char*)src_buf;
- ((z_stream*)context)->avail_in = src_size;
- }
- int FPDFAPI_FlateOutput(void* context, unsigned char* dest_buf, unsigned int dest_size)
- {
- ((z_stream*)context)->next_out = dest_buf;
- ((z_stream*)context)->avail_out = dest_size;
- unsigned int pre_pos = (unsigned int)FPDFAPI_FlateGetTotalOut(context);
- int ret = inflate((z_stream*)context, Z_SYNC_FLUSH);
- unsigned int post_pos = (unsigned int)FPDFAPI_FlateGetTotalOut(context);
- unsigned int written = post_pos - pre_pos;
- if (written < dest_size) {
- FXSYS_memset(dest_buf + written, '\0', dest_size - written);
- }
- return ret;
- }
- int FPDFAPI_FlateGetAvailIn(void* context)
- {
- return ((z_stream*)context)->avail_in;
- }
- int FPDFAPI_FlateGetAvailOut(void* context)
- {
- return ((z_stream*)context)->avail_out;
- }
- void FPDFAPI_FlateEnd(void* context)
- {
- inflateEnd((z_stream*)context);
- ((z_stream*)context)->zfree(0, context);
- }
+extern "C" {
+static void* my_alloc_func(void* opaque,
+ unsigned int items,
+ unsigned int size) {
+ return FX_Alloc2D(uint8_t, items, size);
+}
+static void my_free_func(void* opaque, void* address) {
+ FX_Free(address);
+}
+static int FPDFAPI_FlateGetTotalOut(void* context) {
+ return ((z_stream*)context)->total_out;
+}
+static int FPDFAPI_FlateGetTotalIn(void* context) {
+ return ((z_stream*)context)->total_in;
+}
+static void FPDFAPI_FlateCompress(unsigned char* dest_buf,
+ unsigned long* dest_size,
+ const unsigned char* src_buf,
+ unsigned long src_size) {
+ compress(dest_buf, dest_size, src_buf, src_size);
+}
+void* FPDFAPI_FlateInit(void* (*alloc_func)(void*, unsigned int, unsigned int),
+ void (*free_func)(void*, void*)) {
+ z_stream* p = (z_stream*)alloc_func(0, 1, sizeof(z_stream));
+ if (p == NULL) {
+ return NULL;
+ }
+ FXSYS_memset(p, 0, sizeof(z_stream));
+ p->zalloc = alloc_func;
+ p->zfree = free_func;
+ inflateInit(p);
+ return p;
+}
+void FPDFAPI_FlateInput(void* context,
+ const unsigned char* src_buf,
+ unsigned int src_size) {
+ ((z_stream*)context)->next_in = (unsigned char*)src_buf;
+ ((z_stream*)context)->avail_in = src_size;
+}
+int FPDFAPI_FlateOutput(void* context,
+ unsigned char* dest_buf,
+ unsigned int dest_size) {
+ ((z_stream*)context)->next_out = dest_buf;
+ ((z_stream*)context)->avail_out = dest_size;
+ unsigned int pre_pos = (unsigned int)FPDFAPI_FlateGetTotalOut(context);
+ int ret = inflate((z_stream*)context, Z_SYNC_FLUSH);
+ unsigned int post_pos = (unsigned int)FPDFAPI_FlateGetTotalOut(context);
+ unsigned int written = post_pos - pre_pos;
+ if (written < dest_size) {
+ FXSYS_memset(dest_buf + written, '\0', dest_size - written);
+ }
+ return ret;
+}
+int FPDFAPI_FlateGetAvailIn(void* context) {
+ return ((z_stream*)context)->avail_in;
+}
+int FPDFAPI_FlateGetAvailOut(void* context) {
+ return ((z_stream*)context)->avail_out;
+}
+void FPDFAPI_FlateEnd(void* context) {
+ inflateEnd((z_stream*)context);
+ ((z_stream*)context)->zfree(0, context);
+}
} // extern "C"
-class CLZWDecoder
-{
-public:
- int Decode(uint8_t* output, FX_DWORD& outlen, const uint8_t* input, FX_DWORD& size, FX_BOOL bEarlyChange);
+class CLZWDecoder {
+ public:
+ int Decode(uint8_t* output,
+ FX_DWORD& outlen,
+ const uint8_t* input,
+ FX_DWORD& size,
+ FX_BOOL bEarlyChange);
-private:
- void AddCode(FX_DWORD prefix_code, uint8_t append_char);
- void DecodeString(FX_DWORD code);
+ private:
+ void AddCode(FX_DWORD prefix_code, uint8_t append_char);
+ void DecodeString(FX_DWORD code);
- FX_DWORD m_InPos;
- FX_DWORD m_OutPos;
- uint8_t* m_pOutput;
- const uint8_t* m_pInput;
- FX_BOOL m_Early;
- FX_DWORD m_CodeArray[5021];
- FX_DWORD m_nCodes;
- uint8_t m_DecodeStack[4000];
- FX_DWORD m_StackLen;
- int m_CodeLen;
+ FX_DWORD m_InPos;
+ FX_DWORD m_OutPos;
+ uint8_t* m_pOutput;
+ const uint8_t* m_pInput;
+ FX_BOOL m_Early;
+ FX_DWORD m_CodeArray[5021];
+ FX_DWORD m_nCodes;
+ uint8_t m_DecodeStack[4000];
+ FX_DWORD m_StackLen;
+ int m_CodeLen;
};
-void CLZWDecoder::AddCode(FX_DWORD prefix_code, uint8_t append_char)
-{
- if (m_nCodes + m_Early == 4094) {
- return;
- }
- m_CodeArray[m_nCodes ++] = (prefix_code << 16) | append_char;
- if (m_nCodes + m_Early == 512 - 258) {
- m_CodeLen = 10;
- } else if (m_nCodes + m_Early == 1024 - 258) {
- m_CodeLen = 11;
- } else if (m_nCodes + m_Early == 2048 - 258) {
- m_CodeLen = 12;
- }
+void CLZWDecoder::AddCode(FX_DWORD prefix_code, uint8_t append_char) {
+ if (m_nCodes + m_Early == 4094) {
+ return;
+ }
+ m_CodeArray[m_nCodes++] = (prefix_code << 16) | append_char;
+ if (m_nCodes + m_Early == 512 - 258) {
+ m_CodeLen = 10;
+ } else if (m_nCodes + m_Early == 1024 - 258) {
+ m_CodeLen = 11;
+ } else if (m_nCodes + m_Early == 2048 - 258) {
+ m_CodeLen = 12;
+ }
}
-void CLZWDecoder::DecodeString(FX_DWORD code)
-{
- while (1) {
- int index = code - 258;
- if (index < 0 || index >= (int)m_nCodes) {
- break;
- }
- FX_DWORD data = m_CodeArray[index];
- if (m_StackLen >= sizeof(m_DecodeStack)) {
- return;
- }
- m_DecodeStack[m_StackLen++] = (uint8_t)data;
- code = data >> 16;
+void CLZWDecoder::DecodeString(FX_DWORD code) {
+ while (1) {
+ int index = code - 258;
+ if (index < 0 || index >= (int)m_nCodes) {
+ break;
}
+ FX_DWORD data = m_CodeArray[index];
if (m_StackLen >= sizeof(m_DecodeStack)) {
- return;
- }
- m_DecodeStack[m_StackLen++] = (uint8_t)code;
-}
-int CLZWDecoder::Decode(uint8_t* dest_buf, FX_DWORD& dest_size, const uint8_t* src_buf, FX_DWORD& src_size, FX_BOOL bEarlyChange)
-{
- m_CodeLen = 9;
- m_InPos = 0;
- m_OutPos = 0;
- m_pInput = src_buf;
- m_pOutput = dest_buf;
- m_Early = bEarlyChange ? 1 : 0;
- m_nCodes = 0;
- FX_DWORD old_code = (FX_DWORD) - 1;
- uint8_t last_char;
- while (1) {
- if (m_InPos + m_CodeLen > src_size * 8) {
- break;
- }
- int byte_pos = m_InPos / 8;
- int bit_pos = m_InPos % 8, bit_left = m_CodeLen;
- FX_DWORD code = 0;
- if (bit_pos) {
- bit_left -= 8 - bit_pos;
- code = (m_pInput[byte_pos++] & ((1 << (8 - bit_pos)) - 1)) << bit_left;
- }
- if (bit_left < 8) {
- code |= m_pInput[byte_pos] >> (8 - bit_left);
- } else {
- bit_left -= 8;
- code |= m_pInput[byte_pos++] << bit_left;
- if (bit_left) {
- code |= m_pInput[byte_pos] >> (8 - bit_left);
- }
- }
- m_InPos += m_CodeLen;
- if (code < 256) {
- if (m_OutPos == dest_size) {
- return -5;
- }
- if (m_pOutput) {
- m_pOutput[m_OutPos] = (uint8_t)code;
- }
- m_OutPos ++;
- last_char = (uint8_t)code;
- if (old_code != (FX_DWORD) - 1) {
- AddCode(old_code, last_char);
- }
- old_code = code;
- } else if (code == 256) {
- m_CodeLen = 9;
- m_nCodes = 0;
- old_code = (FX_DWORD) - 1;
- } else if (code == 257) {
- break;
- } else {
- if (old_code == (FX_DWORD) - 1) {
- return 2;
- }
- m_StackLen = 0;
- if (code >= m_nCodes + 258) {
- if (m_StackLen < sizeof(m_DecodeStack)) {
- m_DecodeStack[m_StackLen++] = last_char;
- }
- DecodeString(old_code);
- } else {
- DecodeString(code);
- }
- if (m_OutPos + m_StackLen > dest_size) {
- return -5;
- }
- if (m_pOutput) {
- for (FX_DWORD i = 0; i < m_StackLen; i ++) {
- m_pOutput[m_OutPos + i] = m_DecodeStack[m_StackLen - i - 1];
- }
- }
- m_OutPos += m_StackLen;
- last_char = m_DecodeStack[m_StackLen - 1];
- if (old_code < 256) {
- AddCode(old_code, last_char);
- } else if (old_code - 258 >= m_nCodes) {
- dest_size = m_OutPos;
- src_size = (m_InPos + 7) / 8;
- return 0;
- } else {
- AddCode(old_code, last_char);
- }
- old_code = code;
- }
- }
- dest_size = m_OutPos;
- src_size = (m_InPos + 7) / 8;
- return 0;
-}
-static uint8_t PaethPredictor(int a, int b, int c)
-{
- int p = a + b - c;
- int pa = FXSYS_abs(p - a);
- int pb = FXSYS_abs(p - b);
- int pc = FXSYS_abs(p - c);
- if (pa <= pb && pa <= pc) {
- return (uint8_t)a;
- }
- if (pb <= pc) {
- return (uint8_t)b;
- }
- return (uint8_t)c;
-}
-static FX_BOOL PNG_PredictorEncode(uint8_t*& data_buf, FX_DWORD& data_size,
- int predictor, int Colors,
- int BitsPerComponent, int Columns)
-{
- const int BytesPerPixel = (Colors * BitsPerComponent + 7) / 8;
- const int row_size = (Colors * BitsPerComponent * Columns + 7) / 8;
- if (row_size <= 0)
- return FALSE;
- const int row_count = (data_size + row_size - 1) / row_size;
- const int last_row_size = data_size % row_size;
- uint8_t* dest_buf = FX_Alloc2D(uint8_t, row_size + 1, row_count);
- int byte_cnt = 0;
- uint8_t* pSrcData = data_buf;
- uint8_t* pDestData = dest_buf;
- for (int row = 0; row < row_count; row++) {
- if (predictor == 10) {
- pDestData[0] = 0;
- int move_size = row_size;
- if (move_size * (row + 1) > (int)data_size) {
- move_size = data_size - (move_size * row);
- }
- FXSYS_memmove(pDestData + 1, pSrcData, move_size);
- pDestData += (move_size + 1);
- pSrcData += move_size;
- byte_cnt += move_size;
- continue;
- }
- for (int byte = 0; byte < row_size && byte_cnt < (int)data_size; byte++) {
- switch (predictor) {
- case 11: {
- pDestData[0] = 1;
- uint8_t left = 0;
- if (byte >= BytesPerPixel) {
- left = pSrcData[byte - BytesPerPixel];
- }
- pDestData[byte + 1] = pSrcData[byte] - left;
- }
- break;
- case 12: {
- pDestData[0] = 2;
- uint8_t up = 0;
- if (row) {
- up = pSrcData[byte - row_size];
- }
- pDestData[byte + 1] = pSrcData[byte] - up;
- }
- break;
- case 13: {
- pDestData[0] = 3;
- uint8_t left = 0;
- if (byte >= BytesPerPixel) {
- left = pSrcData[byte - BytesPerPixel];
- }
- uint8_t up = 0;
- if (row) {
- up = pSrcData[byte - row_size];
- }
- pDestData[byte + 1] = pSrcData[byte] - (left + up) / 2;
- }
- break;
- case 14: {
- pDestData[0] = 4;
- uint8_t left = 0;
- if (byte >= BytesPerPixel) {
- left = pSrcData[byte - BytesPerPixel];
- }
- uint8_t up = 0;
- if (row) {
- up = pSrcData[byte - row_size];
- }
- uint8_t upper_left = 0;
- if (byte >= BytesPerPixel && row) {
- upper_left = pSrcData[byte - row_size - BytesPerPixel];
- }
- pDestData[byte + 1] = pSrcData[byte] - PaethPredictor(left, up, upper_left);
- }
- break;
- default: {
- pDestData[byte + 1] = pSrcData[byte];
- }
- break;
- }
- byte_cnt++;
- }
- pDestData += (row_size + 1);
- pSrcData += row_size;
+ return;
}
- FX_Free(data_buf);
- data_buf = dest_buf;
- data_size = (row_size + 1) * row_count - (last_row_size > 0 ? (row_size - last_row_size) : 0);
- return TRUE;
-}
-static void PNG_PredictLine(uint8_t* pDestData, const uint8_t* pSrcData, const uint8_t* pLastLine,
- int bpc, int nColors, int nPixels)
-{
- int row_size = (nPixels * bpc * nColors + 7) / 8;
- int BytesPerPixel = (bpc * nColors + 7) / 8;
+ m_DecodeStack[m_StackLen++] = (uint8_t)data;
+ code = data >> 16;
+ }
+ if (m_StackLen >= sizeof(m_DecodeStack)) {
+ return;
+ }
+ m_DecodeStack[m_StackLen++] = (uint8_t)code;
+}
+int CLZWDecoder::Decode(uint8_t* dest_buf,
+ FX_DWORD& dest_size,
+ const uint8_t* src_buf,
+ FX_DWORD& src_size,
+ FX_BOOL bEarlyChange) {
+ m_CodeLen = 9;
+ m_InPos = 0;
+ m_OutPos = 0;
+ m_pInput = src_buf;
+ m_pOutput = dest_buf;
+ m_Early = bEarlyChange ? 1 : 0;
+ m_nCodes = 0;
+ FX_DWORD old_code = (FX_DWORD)-1;
+ uint8_t last_char;
+ while (1) {
+ if (m_InPos + m_CodeLen > src_size * 8) {
+ break;
+ }
+ int byte_pos = m_InPos / 8;
+ int bit_pos = m_InPos % 8, bit_left = m_CodeLen;
+ FX_DWORD code = 0;
+ if (bit_pos) {
+ bit_left -= 8 - bit_pos;
+ code = (m_pInput[byte_pos++] & ((1 << (8 - bit_pos)) - 1)) << bit_left;
+ }
+ if (bit_left < 8) {
+ code |= m_pInput[byte_pos] >> (8 - bit_left);
+ } else {
+ bit_left -= 8;
+ code |= m_pInput[byte_pos++] << bit_left;
+ if (bit_left) {
+ code |= m_pInput[byte_pos] >> (8 - bit_left);
+ }
+ }
+ m_InPos += m_CodeLen;
+ if (code < 256) {
+ if (m_OutPos == dest_size) {
+ return -5;
+ }
+ if (m_pOutput) {
+ m_pOutput[m_OutPos] = (uint8_t)code;
+ }
+ m_OutPos++;
+ last_char = (uint8_t)code;
+ if (old_code != (FX_DWORD)-1) {
+ AddCode(old_code, last_char);
+ }
+ old_code = code;
+ } else if (code == 256) {
+ m_CodeLen = 9;
+ m_nCodes = 0;
+ old_code = (FX_DWORD)-1;
+ } else if (code == 257) {
+ break;
+ } else {
+ if (old_code == (FX_DWORD)-1) {
+ return 2;
+ }
+ m_StackLen = 0;
+ if (code >= m_nCodes + 258) {
+ if (m_StackLen < sizeof(m_DecodeStack)) {
+ m_DecodeStack[m_StackLen++] = last_char;
+ }
+ DecodeString(old_code);
+ } else {
+ DecodeString(code);
+ }
+ if (m_OutPos + m_StackLen > dest_size) {
+ return -5;
+ }
+ if (m_pOutput) {
+ for (FX_DWORD i = 0; i < m_StackLen; i++) {
+ m_pOutput[m_OutPos + i] = m_DecodeStack[m_StackLen - i - 1];
+ }
+ }
+ m_OutPos += m_StackLen;
+ last_char = m_DecodeStack[m_StackLen - 1];
+ if (old_code < 256) {
+ AddCode(old_code, last_char);
+ } else if (old_code - 258 >= m_nCodes) {
+ dest_size = m_OutPos;
+ src_size = (m_InPos + 7) / 8;
+ return 0;
+ } else {
+ AddCode(old_code, last_char);
+ }
+ old_code = code;
+ }
+ }
+ dest_size = m_OutPos;
+ src_size = (m_InPos + 7) / 8;
+ return 0;
+}
+static uint8_t PaethPredictor(int a, int b, int c) {
+ int p = a + b - c;
+ int pa = FXSYS_abs(p - a);
+ int pb = FXSYS_abs(p - b);
+ int pc = FXSYS_abs(p - c);
+ if (pa <= pb && pa <= pc) {
+ return (uint8_t)a;
+ }
+ if (pb <= pc) {
+ return (uint8_t)b;
+ }
+ return (uint8_t)c;
+}
+static FX_BOOL PNG_PredictorEncode(uint8_t*& data_buf,
+ FX_DWORD& data_size,
+ int predictor,
+ int Colors,
+ int BitsPerComponent,
+ int Columns) {
+ const int BytesPerPixel = (Colors * BitsPerComponent + 7) / 8;
+ const int row_size = (Colors * BitsPerComponent * Columns + 7) / 8;
+ if (row_size <= 0)
+ return FALSE;
+ const int row_count = (data_size + row_size - 1) / row_size;
+ const int last_row_size = data_size % row_size;
+ uint8_t* dest_buf = FX_Alloc2D(uint8_t, row_size + 1, row_count);
+ int byte_cnt = 0;
+ uint8_t* pSrcData = data_buf;
+ uint8_t* pDestData = dest_buf;
+ for (int row = 0; row < row_count; row++) {
+ if (predictor == 10) {
+ pDestData[0] = 0;
+ int move_size = row_size;
+ if (move_size * (row + 1) > (int)data_size) {
+ move_size = data_size - (move_size * row);
+ }
+ FXSYS_memmove(pDestData + 1, pSrcData, move_size);
+ pDestData += (move_size + 1);
+ pSrcData += move_size;
+ byte_cnt += move_size;
+ continue;
+ }
+ for (int byte = 0; byte < row_size && byte_cnt < (int)data_size; byte++) {
+ switch (predictor) {
+ case 11: {
+ pDestData[0] = 1;
+ uint8_t left = 0;
+ if (byte >= BytesPerPixel) {
+ left = pSrcData[byte - BytesPerPixel];
+ }
+ pDestData[byte + 1] = pSrcData[byte] - left;
+ } break;
+ case 12: {
+ pDestData[0] = 2;
+ uint8_t up = 0;
+ if (row) {
+ up = pSrcData[byte - row_size];
+ }
+ pDestData[byte + 1] = pSrcData[byte] - up;
+ } break;
+ case 13: {
+ pDestData[0] = 3;
+ uint8_t left = 0;
+ if (byte >= BytesPerPixel) {
+ left = pSrcData[byte - BytesPerPixel];
+ }
+ uint8_t up = 0;
+ if (row) {
+ up = pSrcData[byte - row_size];
+ }
+ pDestData[byte + 1] = pSrcData[byte] - (left + up) / 2;
+ } break;
+ case 14: {
+ pDestData[0] = 4;
+ uint8_t left = 0;
+ if (byte >= BytesPerPixel) {
+ left = pSrcData[byte - BytesPerPixel];
+ }
+ uint8_t up = 0;
+ if (row) {
+ up = pSrcData[byte - row_size];
+ }
+ uint8_t upper_left = 0;
+ if (byte >= BytesPerPixel && row) {
+ upper_left = pSrcData[byte - row_size - BytesPerPixel];
+ }
+ pDestData[byte + 1] =
+ pSrcData[byte] - PaethPredictor(left, up, upper_left);
+ } break;
+ default: { pDestData[byte + 1] = pSrcData[byte]; } break;
+ }
+ byte_cnt++;
+ }
+ pDestData += (row_size + 1);
+ pSrcData += row_size;
+ }
+ FX_Free(data_buf);
+ data_buf = dest_buf;
+ data_size = (row_size + 1) * row_count -
+ (last_row_size > 0 ? (row_size - last_row_size) : 0);
+ return TRUE;
+}
+static void PNG_PredictLine(uint8_t* pDestData,
+ const uint8_t* pSrcData,
+ const uint8_t* pLastLine,
+ int bpc,
+ int nColors,
+ int nPixels) {
+ int row_size = (nPixels * bpc * nColors + 7) / 8;
+ int BytesPerPixel = (bpc * nColors + 7) / 8;
+ uint8_t tag = pSrcData[0];
+ if (tag == 0) {
+ FXSYS_memmove(pDestData, pSrcData + 1, row_size);
+ return;
+ }
+ for (int byte = 0; byte < row_size; byte++) {
+ uint8_t raw_byte = pSrcData[byte + 1];
+ switch (tag) {
+ case 1: {
+ uint8_t left = 0;
+ if (byte >= BytesPerPixel) {
+ left = pDestData[byte - BytesPerPixel];
+ }
+ pDestData[byte] = raw_byte + left;
+ break;
+ }
+ case 2: {
+ uint8_t up = 0;
+ if (pLastLine) {
+ up = pLastLine[byte];
+ }
+ pDestData[byte] = raw_byte + up;
+ break;
+ }
+ case 3: {
+ uint8_t left = 0;
+ if (byte >= BytesPerPixel) {
+ left = pDestData[byte - BytesPerPixel];
+ }
+ uint8_t up = 0;
+ if (pLastLine) {
+ up = pLastLine[byte];
+ }
+ pDestData[byte] = raw_byte + (up + left) / 2;
+ break;
+ }
+ case 4: {
+ uint8_t left = 0;
+ if (byte >= BytesPerPixel) {
+ left = pDestData[byte - BytesPerPixel];
+ }
+ uint8_t up = 0;
+ if (pLastLine) {
+ up = pLastLine[byte];
+ }
+ uint8_t upper_left = 0;
+ if (byte >= BytesPerPixel && pLastLine) {
+ upper_left = pLastLine[byte - BytesPerPixel];
+ }
+ pDestData[byte] = raw_byte + PaethPredictor(left, up, upper_left);
+ break;
+ }
+ default:
+ pDestData[byte] = raw_byte;
+ break;
+ }
+ }
+}
+static FX_BOOL PNG_Predictor(uint8_t*& data_buf,
+ FX_DWORD& data_size,
+ int Colors,
+ int BitsPerComponent,
+ int Columns) {
+ const int BytesPerPixel = (Colors * BitsPerComponent + 7) / 8;
+ const int row_size = (Colors * BitsPerComponent * Columns + 7) / 8;
+ if (row_size <= 0)
+ return FALSE;
+ const int row_count = (data_size + row_size) / (row_size + 1);
+ const int last_row_size = data_size % (row_size + 1);
+ uint8_t* dest_buf = FX_Alloc2D(uint8_t, row_size, row_count);
+ int byte_cnt = 0;
+ uint8_t* pSrcData = data_buf;
+ uint8_t* pDestData = dest_buf;
+ for (int row = 0; row < row_count; row++) {
uint8_t tag = pSrcData[0];
+ byte_cnt++;
if (tag == 0) {
- FXSYS_memmove(pDestData, pSrcData + 1, row_size);
- return;
- }
- for (int byte = 0; byte < row_size; byte ++) {
- uint8_t raw_byte = pSrcData[byte + 1];
- switch (tag) {
- case 1: {
- uint8_t left = 0;
- if (byte >= BytesPerPixel) {
- left = pDestData[byte - BytesPerPixel];
- }
- pDestData[byte] = raw_byte + left;
- break;
- }
- case 2: {
- uint8_t up = 0;
- if (pLastLine) {
- up = pLastLine[byte];
- }
- pDestData[byte] = raw_byte + up;
- break;
- }
- case 3: {
- uint8_t left = 0;
- if (byte >= BytesPerPixel) {
- left = pDestData[byte - BytesPerPixel];
- }
- uint8_t up = 0;
- if (pLastLine) {
- up = pLastLine[byte];
- }
- pDestData[byte] = raw_byte + (up + left) / 2;
- break;
- }
- case 4: {
- uint8_t left = 0;
- if (byte >= BytesPerPixel) {
- left = pDestData[byte - BytesPerPixel];
- }
- uint8_t up = 0;
- if (pLastLine) {
- up = pLastLine[byte];
- }
- uint8_t upper_left = 0;
- if (byte >= BytesPerPixel && pLastLine) {
- upper_left = pLastLine[byte - BytesPerPixel];
- }
- pDestData[byte] = raw_byte + PaethPredictor(left, up, upper_left);
- break;
- }
- default:
- pDestData[byte] = raw_byte;
- break;
- }
- }
+ int move_size = row_size;
+ if ((row + 1) * (move_size + 1) > (int)data_size) {
+ move_size = last_row_size - 1;
+ }
+ FXSYS_memmove(pDestData, pSrcData + 1, move_size);
+ pSrcData += move_size + 1;
+ pDestData += move_size;
+ byte_cnt += move_size;
+ continue;
+ }
+ for (int byte = 0; byte < row_size && byte_cnt < (int)data_size; byte++) {
+ uint8_t raw_byte = pSrcData[byte + 1];
+ switch (tag) {
+ case 1: {
+ uint8_t left = 0;
+ if (byte >= BytesPerPixel) {
+ left = pDestData[byte - BytesPerPixel];
+ }
+ pDestData[byte] = raw_byte + left;
+ break;
+ }
+ case 2: {
+ uint8_t up = 0;
+ if (row) {
+ up = pDestData[byte - row_size];
+ }
+ pDestData[byte] = raw_byte + up;
+ break;
+ }
+ case 3: {
+ uint8_t left = 0;
+ if (byte >= BytesPerPixel) {
+ left = pDestData[byte - BytesPerPixel];
+ }
+ uint8_t up = 0;
+ if (row) {
+ up = pDestData[byte - row_size];
+ }
+ pDestData[byte] = raw_byte + (up + left) / 2;
+ break;
+ }
+ case 4: {
+ uint8_t left = 0;
+ if (byte >= BytesPerPixel) {
+ left = pDestData[byte - BytesPerPixel];
+ }
+ uint8_t up = 0;
+ if (row) {
+ up = pDestData[byte - row_size];
+ }
+ uint8_t upper_left = 0;
+ if (byte >= BytesPerPixel && row) {
+ upper_left = pDestData[byte - row_size - BytesPerPixel];
+ }
+ pDestData[byte] = raw_byte + PaethPredictor(left, up, upper_left);
+ break;
+ }
+ default:
+ pDestData[byte] = raw_byte;
+ break;
+ }
+ byte_cnt++;
+ }
+ pSrcData += row_size + 1;
+ pDestData += row_size;
+ }
+ FX_Free(data_buf);
+ data_buf = dest_buf;
+ data_size = row_size * row_count -
+ (last_row_size > 0 ? (row_size + 1 - last_row_size) : 0);
+ return TRUE;
}
-static FX_BOOL PNG_Predictor(uint8_t*& data_buf, FX_DWORD& data_size,
- int Colors, int BitsPerComponent, int Columns)
-{
- const int BytesPerPixel = (Colors * BitsPerComponent + 7) / 8;
- const int row_size = (Colors * BitsPerComponent * Columns + 7) / 8;
- if (row_size <= 0)
- return FALSE;
- const int row_count = (data_size + row_size) / (row_size + 1);
- const int last_row_size = data_size % (row_size + 1);
- uint8_t* dest_buf = FX_Alloc2D(uint8_t, row_size, row_count);
- int byte_cnt = 0;
- uint8_t* pSrcData = data_buf;
- uint8_t* pDestData = dest_buf;
- for (int row = 0; row < row_count; row ++) {
- uint8_t tag = pSrcData[0];
- byte_cnt++;
- if (tag == 0) {
- int move_size = row_size;
- if ((row + 1) * (move_size + 1) > (int)data_size) {
- move_size = last_row_size - 1;
- }
- FXSYS_memmove(pDestData, pSrcData + 1, move_size);
- pSrcData += move_size + 1;
- pDestData += move_size;
- byte_cnt += move_size;
- continue;
- }
- for (int byte = 0; byte < row_size && byte_cnt < (int)data_size; byte ++) {
- uint8_t raw_byte = pSrcData[byte + 1];
- switch (tag) {
- case 1: {
- uint8_t left = 0;
- if (byte >= BytesPerPixel) {
- left = pDestData[byte - BytesPerPixel];
- }
- pDestData[byte] = raw_byte + left;
- break;
- }
- case 2: {
- uint8_t up = 0;
- if (row) {
- up = pDestData[byte - row_size];
- }
- pDestData[byte] = raw_byte + up;
- break;
- }
- case 3: {
- uint8_t left = 0;
- if (byte >= BytesPerPixel) {
- left = pDestData[byte - BytesPerPixel];
- }
- uint8_t up = 0;
- if (row) {
- up = pDestData[byte - row_size];
- }
- pDestData[byte] = raw_byte + (up + left) / 2;
- break;
- }
- case 4: {
- uint8_t left = 0;
- if (byte >= BytesPerPixel) {
- left = pDestData[byte - BytesPerPixel];
- }
- uint8_t up = 0;
- if (row) {
- up = pDestData[byte - row_size];
- }
- uint8_t upper_left = 0;
- if (byte >= BytesPerPixel && row) {
- upper_left = pDestData[byte - row_size - BytesPerPixel];
- }
- pDestData[byte] = raw_byte + PaethPredictor(left, up, upper_left);
- break;
- }
- default:
- pDestData[byte] = raw_byte;
- break;
- }
- byte_cnt++;
- }
- pSrcData += row_size + 1;
- pDestData += row_size;
- }
- FX_Free(data_buf);
- data_buf = dest_buf;
- data_size = row_size * row_count - (last_row_size > 0 ? (row_size + 1 - last_row_size) : 0);
- return TRUE;
-}
-static void TIFF_PredictorEncodeLine(uint8_t* dest_buf, int row_size, int BitsPerComponent, int Colors, int Columns)
-{
- int BytesPerPixel = BitsPerComponent * Colors / 8;
- if (BitsPerComponent < 8) {
- uint8_t mask = 0x01;
- if (BitsPerComponent == 2) {
- mask = 0x03;
- } else if (BitsPerComponent == 4) {
- mask = 0x0F;
- }
- int row_bits = Colors * BitsPerComponent * Columns;
- for (int i = row_bits - BitsPerComponent; i >= BitsPerComponent; i -= BitsPerComponent) {
- int col = i % 8;
- int index = i / 8;
- int col_pre = (col == 0) ? (8 - BitsPerComponent) : (col - BitsPerComponent);
- int index_pre = (col == 0) ? (index - 1) : index;
- uint8_t cur = (dest_buf[index] >> (8 - col - BitsPerComponent)) & mask;
- uint8_t left = (dest_buf[index_pre] >> (8 - col_pre - BitsPerComponent)) & mask;
- cur -= left;
- cur &= mask;
- cur <<= (8 - col - BitsPerComponent);
- dest_buf[index] &= ~(mask << ((8 - col - BitsPerComponent)));
- dest_buf[index] |= cur;
- }
- } else if (BitsPerComponent == 8) {
- for (int i = row_size - 1; i >= BytesPerPixel; i--) {
- dest_buf[i] -= dest_buf[i - BytesPerPixel];
- }
- } else {
- for (int i = row_size - BytesPerPixel; i >= BytesPerPixel; i -= BytesPerPixel) {
- FX_WORD pixel = (dest_buf[i] << 8) | dest_buf[i + 1];
- pixel -= (dest_buf[i - BytesPerPixel] << 8) | dest_buf[i - BytesPerPixel + 1];
- dest_buf[i] = pixel >> 8;
- dest_buf[i + 1] = (uint8_t)pixel;
- }
- }
+static void TIFF_PredictorEncodeLine(uint8_t* dest_buf,
+ int row_size,
+ int BitsPerComponent,
+ int Colors,
+ int Columns) {
+ int BytesPerPixel = BitsPerComponent * Colors / 8;
+ if (BitsPerComponent < 8) {
+ uint8_t mask = 0x01;
+ if (BitsPerComponent == 2) {
+ mask = 0x03;
+ } else if (BitsPerComponent == 4) {
+ mask = 0x0F;
+ }
+ int row_bits = Colors * BitsPerComponent * Columns;
+ for (int i = row_bits - BitsPerComponent; i >= BitsPerComponent;
+ i -= BitsPerComponent) {
+ int col = i % 8;
+ int index = i / 8;
+ int col_pre =
+ (col == 0) ? (8 - BitsPerComponent) : (col - BitsPerComponent);
+ int index_pre = (col == 0) ? (index - 1) : index;
+ uint8_t cur = (dest_buf[index] >> (8 - col - BitsPerComponent)) & mask;
+ uint8_t left =
+ (dest_buf[index_pre] >> (8 - col_pre - BitsPerComponent)) & mask;
+ cur -= left;
+ cur &= mask;
+ cur <<= (8 - col - BitsPerComponent);
+ dest_buf[index] &= ~(mask << ((8 - col - BitsPerComponent)));
+ dest_buf[index] |= cur;
+ }
+ } else if (BitsPerComponent == 8) {
+ for (int i = row_size - 1; i >= BytesPerPixel; i--) {
+ dest_buf[i] -= dest_buf[i - BytesPerPixel];
+ }
+ } else {
+ for (int i = row_size - BytesPerPixel; i >= BytesPerPixel;
+ i -= BytesPerPixel) {
+ FX_WORD pixel = (dest_buf[i] << 8) | dest_buf[i + 1];
+ pixel -=
+ (dest_buf[i - BytesPerPixel] << 8) | dest_buf[i - BytesPerPixel + 1];
+ dest_buf[i] = pixel >> 8;
+ dest_buf[i + 1] = (uint8_t)pixel;
+ }
+ }
}
-static FX_BOOL TIFF_PredictorEncode(uint8_t*& data_buf, FX_DWORD& data_size,
- int Colors, int BitsPerComponent, int Columns)
-{
- int row_size = (Colors * BitsPerComponent * Columns + 7) / 8;
- if (row_size == 0)
- return FALSE;
- const int row_count = (data_size + row_size - 1) / row_size;
- const int last_row_size = data_size % row_size;
- for (int row = 0; row < row_count; row++) {
- uint8_t* scan_line = data_buf + row * row_size;
- if ((row + 1) * row_size > (int)data_size) {
- row_size = last_row_size;
- }
- TIFF_PredictorEncodeLine(scan_line, row_size, BitsPerComponent, Colors, Columns);
- }
- return TRUE;
-}
-static void TIFF_PredictLine(uint8_t* dest_buf, int row_size, int BitsPerComponent, int Colors, int Columns)
-{
- if (BitsPerComponent == 1) {
- int row_bits = FX_MIN(BitsPerComponent * Colors * Columns, row_size * 8);
- int index_pre = 0;
- int col_pre = 0;
- for(int i = 1; i < row_bits; i ++) {
- int col = i % 8;
- int index = i / 8;
- if( ((dest_buf[index] >> (7 - col)) & 1) ^ ((dest_buf[index_pre] >> (7 - col_pre)) & 1) ) {
- dest_buf[index] |= 1 << (7 - col);
- } else {
- dest_buf[index] &= ~(1 << (7 - col));
- }
- index_pre = index;
- col_pre = col;
- }
- return;
- }
- int BytesPerPixel = BitsPerComponent * Colors / 8;
- if (BitsPerComponent == 16) {
- for (int i = BytesPerPixel; i < row_size; i += 2) {
- FX_WORD pixel = (dest_buf[i - BytesPerPixel] << 8) | dest_buf[i - BytesPerPixel + 1];
- pixel += (dest_buf[i] << 8) | dest_buf[i + 1];
- dest_buf[i] = pixel >> 8;
- dest_buf[i + 1] = (uint8_t)pixel;
- }
- } else {
- for (int i = BytesPerPixel; i < row_size; i ++) {
- dest_buf[i] += dest_buf[i - BytesPerPixel];
- }
- }
+static FX_BOOL TIFF_PredictorEncode(uint8_t*& data_buf,
+ FX_DWORD& data_size,
+ int Colors,
+ int BitsPerComponent,
+ int Columns) {
+ int row_size = (Colors * BitsPerComponent * Columns + 7) / 8;
+ if (row_size == 0)
+ return FALSE;
+ const int row_count = (data_size + row_size - 1) / row_size;
+ const int last_row_size = data_size % row_size;
+ for (int row = 0; row < row_count; row++) {
+ uint8_t* scan_line = data_buf + row * row_size;
+ if ((row + 1) * row_size > (int)data_size) {
+ row_size = last_row_size;
+ }
+ TIFF_PredictorEncodeLine(scan_line, row_size, BitsPerComponent, Colors,
+ Columns);
+ }
+ return TRUE;
}
-static FX_BOOL TIFF_Predictor(uint8_t*& data_buf, FX_DWORD& data_size,
- int Colors, int BitsPerComponent, int Columns)
-{
- int row_size = (Colors * BitsPerComponent * Columns + 7) / 8;
- if (row_size == 0)
- return FALSE;
- const int row_count = (data_size + row_size - 1) / row_size;
- const int last_row_size = data_size % row_size;
- for (int row = 0; row < row_count; row ++) {
- uint8_t* scan_line = data_buf + row * row_size;
- if ((row + 1) * row_size > (int)data_size) {
- row_size = last_row_size;
- }
- TIFF_PredictLine(scan_line, row_size, BitsPerComponent, Colors, Columns);
+static void TIFF_PredictLine(uint8_t* dest_buf,
+ int row_size,
+ int BitsPerComponent,
+ int Colors,
+ int Columns) {
+ if (BitsPerComponent == 1) {
+ int row_bits = FX_MIN(BitsPerComponent * Colors * Columns, row_size * 8);
+ int index_pre = 0;
+ int col_pre = 0;
+ for (int i = 1; i < row_bits; i++) {
+ int col = i % 8;
+ int index = i / 8;
+ if (((dest_buf[index] >> (7 - col)) & 1) ^
+ ((dest_buf[index_pre] >> (7 - col_pre)) & 1)) {
+ dest_buf[index] |= 1 << (7 - col);
+ } else {
+ dest_buf[index] &= ~(1 << (7 - col));
+ }
+ index_pre = index;
+ col_pre = col;
}
- return TRUE;
-}
-class CCodec_FlateScanlineDecoder : public CCodec_ScanlineDecoder
-{
-public:
- CCodec_FlateScanlineDecoder();
- ~CCodec_FlateScanlineDecoder();
- void Create(const uint8_t* src_buf, FX_DWORD src_size, int width, int height, int nComps, int bpc,
- int predictor, int Colors, int BitsPerComponent, int Columns);
- virtual void Destroy()
- {
- delete this;
- }
- virtual void v_DownScale(int dest_width, int dest_height) {}
- virtual FX_BOOL v_Rewind();
- virtual uint8_t* v_GetNextLine();
- virtual FX_DWORD GetSrcOffset();
- void* m_pFlate;
- const uint8_t* m_SrcBuf;
- FX_DWORD m_SrcSize;
- uint8_t* m_pScanline;
- uint8_t* m_pLastLine;
- uint8_t* m_pPredictBuffer;
- uint8_t* m_pPredictRaw;
- int m_Predictor;
- int m_Colors, m_BitsPerComponent, m_Columns, m_PredictPitch, m_LeftOver;
+ return;
+ }
+ int BytesPerPixel = BitsPerComponent * Colors / 8;
+ if (BitsPerComponent == 16) {
+ for (int i = BytesPerPixel; i < row_size; i += 2) {
+ FX_WORD pixel =
+ (dest_buf[i - BytesPerPixel] << 8) | dest_buf[i - BytesPerPixel + 1];
+ pixel += (dest_buf[i] << 8) | dest_buf[i + 1];
+ dest_buf[i] = pixel >> 8;
+ dest_buf[i + 1] = (uint8_t)pixel;
+ }
+ } else {
+ for (int i = BytesPerPixel; i < row_size; i++) {
+ dest_buf[i] += dest_buf[i - BytesPerPixel];
+ }
+ }
+}
+static FX_BOOL TIFF_Predictor(uint8_t*& data_buf,
+ FX_DWORD& data_size,
+ int Colors,
+ int BitsPerComponent,
+ int Columns) {
+ int row_size = (Colors * BitsPerComponent * Columns + 7) / 8;
+ if (row_size == 0)
+ return FALSE;
+ const int row_count = (data_size + row_size - 1) / row_size;
+ const int last_row_size = data_size % row_size;
+ for (int row = 0; row < row_count; row++) {
+ uint8_t* scan_line = data_buf + row * row_size;
+ if ((row + 1) * row_size > (int)data_size) {
+ row_size = last_row_size;
+ }
+ TIFF_PredictLine(scan_line, row_size, BitsPerComponent, Colors, Columns);
+ }
+ return TRUE;
+}
+class CCodec_FlateScanlineDecoder : public CCodec_ScanlineDecoder {
+ public:
+ CCodec_FlateScanlineDecoder();
+ ~CCodec_FlateScanlineDecoder();
+ void Create(const uint8_t* src_buf,
+ FX_DWORD src_size,
+ int width,
+ int height,
+ int nComps,
+ int bpc,
+ int predictor,
+ int Colors,
+ int BitsPerComponent,
+ int Columns);
+ virtual void Destroy() { delete this; }
+ virtual void v_DownScale(int dest_width, int dest_height) {}
+ virtual FX_BOOL v_Rewind();
+ virtual uint8_t* v_GetNextLine();
+ virtual FX_DWORD GetSrcOffset();
+ void* m_pFlate;
+ const uint8_t* m_SrcBuf;
+ FX_DWORD m_SrcSize;
+ uint8_t* m_pScanline;
+ uint8_t* m_pLastLine;
+ uint8_t* m_pPredictBuffer;
+ uint8_t* m_pPredictRaw;
+ int m_Predictor;
+ int m_Colors, m_BitsPerComponent, m_Columns, m_PredictPitch, m_LeftOver;
};
-CCodec_FlateScanlineDecoder::CCodec_FlateScanlineDecoder()
-{
- m_pFlate = NULL;
- m_pScanline = NULL;
- m_pLastLine = NULL;
- m_pPredictBuffer = NULL;
- m_pPredictRaw = NULL;
- m_LeftOver = 0;
-}
-CCodec_FlateScanlineDecoder::~CCodec_FlateScanlineDecoder()
-{
- if (m_pScanline) {
- FX_Free(m_pScanline);
- }
- if (m_pLastLine) {
- FX_Free(m_pLastLine);
- }
- if (m_pPredictBuffer) {
- FX_Free(m_pPredictBuffer);
- }
- if (m_pPredictRaw) {
- FX_Free(m_pPredictRaw);
- }
- if (m_pFlate) {
- FPDFAPI_FlateEnd(m_pFlate);
- }
+CCodec_FlateScanlineDecoder::CCodec_FlateScanlineDecoder() {
+ m_pFlate = NULL;
+ m_pScanline = NULL;
+ m_pLastLine = NULL;
+ m_pPredictBuffer = NULL;
+ m_pPredictRaw = NULL;
+ m_LeftOver = 0;
}
-void CCodec_FlateScanlineDecoder::Create(const uint8_t* src_buf, FX_DWORD src_size, int width, int height,
- int nComps, int bpc, int predictor, int Colors, int BitsPerComponent, int Columns)
-{
- m_SrcBuf = src_buf;
- m_SrcSize = src_size;
- m_OutputWidth = m_OrigWidth = width;
- m_OutputHeight = m_OrigHeight = height;
- m_nComps = nComps;
- m_bpc = bpc;
- m_bColorTransformed = FALSE;
- m_Pitch = (width * nComps * bpc + 7) / 8;
- m_pScanline = FX_Alloc(uint8_t, m_Pitch);
- m_Predictor = 0;
- if (predictor) {
- if (predictor >= 10) {
- m_Predictor = 2;
- } else if (predictor == 2) {
- m_Predictor = 1;
- }
- if (m_Predictor) {
- if (BitsPerComponent * Colors * Columns == 0) {
- BitsPerComponent = m_bpc;
- Colors = m_nComps;
- Columns = m_OrigWidth;
- }
- m_Colors = Colors;
- m_BitsPerComponent = BitsPerComponent;
- m_Columns = Columns;
- m_PredictPitch = (m_BitsPerComponent * m_Colors * m_Columns + 7) / 8;
- m_pLastLine = FX_Alloc(uint8_t, m_PredictPitch);
- m_pPredictRaw = FX_Alloc(uint8_t, m_PredictPitch + 1);
- m_pPredictBuffer = FX_Alloc(uint8_t, m_PredictPitch);
- }
- }
+CCodec_FlateScanlineDecoder::~CCodec_FlateScanlineDecoder() {
+ if (m_pScanline) {
+ FX_Free(m_pScanline);
+ }
+ if (m_pLastLine) {
+ FX_Free(m_pLastLine);
+ }
+ if (m_pPredictBuffer) {
+ FX_Free(m_pPredictBuffer);
+ }
+ if (m_pPredictRaw) {
+ FX_Free(m_pPredictRaw);
+ }
+ if (m_pFlate) {
+ FPDFAPI_FlateEnd(m_pFlate);
+ }
}
-FX_BOOL CCodec_FlateScanlineDecoder::v_Rewind()
-{
- if (m_pFlate) {
- FPDFAPI_FlateEnd(m_pFlate);
+void CCodec_FlateScanlineDecoder::Create(const uint8_t* src_buf,
+ FX_DWORD src_size,
+ int width,
+ int height,
+ int nComps,
+ int bpc,
+ int predictor,
+ int Colors,
+ int BitsPerComponent,
+ int Columns) {
+ m_SrcBuf = src_buf;
+ m_SrcSize = src_size;
+ m_OutputWidth = m_OrigWidth = width;
+ m_OutputHeight = m_OrigHeight = height;
+ m_nComps = nComps;
+ m_bpc = bpc;
+ m_bColorTransformed = FALSE;
+ m_Pitch = (width * nComps * bpc + 7) / 8;
+ m_pScanline = FX_Alloc(uint8_t, m_Pitch);
+ m_Predictor = 0;
+ if (predictor) {
+ if (predictor >= 10) {
+ m_Predictor = 2;
+ } else if (predictor == 2) {
+ m_Predictor = 1;
}
- m_pFlate = FPDFAPI_FlateInit(my_alloc_func, my_free_func);
- if (m_pFlate == NULL) {
- return FALSE;
- }
- FPDFAPI_FlateInput(m_pFlate, m_SrcBuf, m_SrcSize);
- m_LeftOver = 0;
- return TRUE;
-}
-uint8_t* CCodec_FlateScanlineDecoder::v_GetNextLine()
-{
if (m_Predictor) {
- if (m_Pitch == m_PredictPitch) {
- if (m_Predictor == 2) {
- FPDFAPI_FlateOutput(m_pFlate, m_pPredictRaw, m_PredictPitch + 1);
- PNG_PredictLine(m_pScanline, m_pPredictRaw, m_pLastLine, m_BitsPerComponent, m_Colors, m_Columns);
- FXSYS_memcpy(m_pLastLine, m_pScanline, m_PredictPitch);
- } else {
- FPDFAPI_FlateOutput(m_pFlate, m_pScanline, m_Pitch);
- TIFF_PredictLine(m_pScanline, m_PredictPitch, m_bpc, m_nComps, m_OutputWidth);
- }
- } else {
- int bytes_to_go = m_Pitch;
- int read_leftover = m_LeftOver > bytes_to_go ? bytes_to_go : m_LeftOver;
- if (read_leftover) {
- FXSYS_memcpy(m_pScanline, m_pPredictBuffer + m_PredictPitch - m_LeftOver, read_leftover);
- m_LeftOver -= read_leftover;
- bytes_to_go -= read_leftover;
- }
- while (bytes_to_go) {
- if (m_Predictor == 2) {
- FPDFAPI_FlateOutput(m_pFlate, m_pPredictRaw, m_PredictPitch + 1);
- PNG_PredictLine(m_pPredictBuffer, m_pPredictRaw, m_pLastLine, m_BitsPerComponent, m_Colors, m_Columns);
- FXSYS_memcpy(m_pLastLine, m_pPredictBuffer, m_PredictPitch);
- } else {
- FPDFAPI_FlateOutput(m_pFlate, m_pPredictBuffer, m_PredictPitch);
- TIFF_PredictLine(m_pPredictBuffer, m_PredictPitch, m_BitsPerComponent, m_Colors, m_Columns);
- }
- int read_bytes = m_PredictPitch > bytes_to_go ? bytes_to_go : m_PredictPitch;
- FXSYS_memcpy(m_pScanline + m_Pitch - bytes_to_go, m_pPredictBuffer, read_bytes);
- m_LeftOver += m_PredictPitch - read_bytes;
- bytes_to_go -= read_bytes;
- }
- }
- } else {
+ if (BitsPerComponent * Colors * Columns == 0) {
+ BitsPerComponent = m_bpc;
+ Colors = m_nComps;
+ Columns = m_OrigWidth;
+ }
+ m_Colors = Colors;
+ m_BitsPerComponent = BitsPerComponent;
+ m_Columns = Columns;
+ m_PredictPitch = (m_BitsPerComponent * m_Colors * m_Columns + 7) / 8;
+ m_pLastLine = FX_Alloc(uint8_t, m_PredictPitch);
+ m_pPredictRaw = FX_Alloc(uint8_t, m_PredictPitch + 1);
+ m_pPredictBuffer = FX_Alloc(uint8_t, m_PredictPitch);
+ }
+ }
+}
+FX_BOOL CCodec_FlateScanlineDecoder::v_Rewind() {
+ if (m_pFlate) {
+ FPDFAPI_FlateEnd(m_pFlate);
+ }
+ m_pFlate = FPDFAPI_FlateInit(my_alloc_func, my_free_func);
+ if (m_pFlate == NULL) {
+ return FALSE;
+ }
+ FPDFAPI_FlateInput(m_pFlate, m_SrcBuf, m_SrcSize);
+ m_LeftOver = 0;
+ return TRUE;
+}
+uint8_t* CCodec_FlateScanlineDecoder::v_GetNextLine() {
+ if (m_Predictor) {
+ if (m_Pitch == m_PredictPitch) {
+ if (m_Predictor == 2) {
+ FPDFAPI_FlateOutput(m_pFlate, m_pPredictRaw, m_PredictPitch + 1);
+ PNG_PredictLine(m_pScanline, m_pPredictRaw, m_pLastLine,
+ m_BitsPerComponent, m_Colors, m_Columns);
+ FXSYS_memcpy(m_pLastLine, m_pScanline, m_PredictPitch);
+ } else {
FPDFAPI_FlateOutput(m_pFlate, m_pScanline, m_Pitch);
- }
- return m_pScanline;
-}
-FX_DWORD CCodec_FlateScanlineDecoder::GetSrcOffset()
-{
- return FPDFAPI_FlateGetTotalIn(m_pFlate);
-}
-static void FlateUncompress(const uint8_t* src_buf, FX_DWORD src_size, FX_DWORD orig_size,
- uint8_t*& dest_buf, FX_DWORD& dest_size, FX_DWORD& offset)
-{
- const FX_BOOL useOldImpl = src_size < 10240;
- FX_DWORD guess_size = orig_size ? orig_size : src_size * 2;
- FX_DWORD alloc_step = orig_size ? 10240 : (src_size < 10240 ? 10240 : src_size);
- static const FX_DWORD kMaxInitialAllocSize = 10000000;
- if (guess_size > kMaxInitialAllocSize) {
- guess_size = kMaxInitialAllocSize;
- alloc_step = kMaxInitialAllocSize;
- }
- FX_DWORD buf_size = guess_size;
- FX_DWORD last_buf_size = buf_size;
- void* context = nullptr;
+ TIFF_PredictLine(m_pScanline, m_PredictPitch, m_bpc, m_nComps,
+ m_OutputWidth);
+ }
+ } else {
+ int bytes_to_go = m_Pitch;
+ int read_leftover = m_LeftOver > bytes_to_go ? bytes_to_go : m_LeftOver;
+ if (read_leftover) {
+ FXSYS_memcpy(m_pScanline,
+ m_pPredictBuffer + m_PredictPitch - m_LeftOver,
+ read_leftover);
+ m_LeftOver -= read_leftover;
+ bytes_to_go -= read_leftover;
+ }
+ while (bytes_to_go) {
+ if (m_Predictor == 2) {
+ FPDFAPI_FlateOutput(m_pFlate, m_pPredictRaw, m_PredictPitch + 1);
+ PNG_PredictLine(m_pPredictBuffer, m_pPredictRaw, m_pLastLine,
+ m_BitsPerComponent, m_Colors, m_Columns);
+ FXSYS_memcpy(m_pLastLine, m_pPredictBuffer, m_PredictPitch);
+ } else {
+ FPDFAPI_FlateOutput(m_pFlate, m_pPredictBuffer, m_PredictPitch);
+ TIFF_PredictLine(m_pPredictBuffer, m_PredictPitch, m_BitsPerComponent,
+ m_Colors, m_Columns);
+ }
+ int read_bytes =
+ m_PredictPitch > bytes_to_go ? bytes_to_go : m_PredictPitch;
+ FXSYS_memcpy(m_pScanline + m_Pitch - bytes_to_go, m_pPredictBuffer,
+ read_bytes);
+ m_LeftOver += m_PredictPitch - read_bytes;
+ bytes_to_go -= read_bytes;
+ }
+ }
+ } else {
+ FPDFAPI_FlateOutput(m_pFlate, m_pScanline, m_Pitch);
+ }
+ return m_pScanline;
+}
+FX_DWORD CCodec_FlateScanlineDecoder::GetSrcOffset() {
+ return FPDFAPI_FlateGetTotalIn(m_pFlate);
+}
+static void FlateUncompress(const uint8_t* src_buf,
+ FX_DWORD src_size,
+ FX_DWORD orig_size,
+ uint8_t*& dest_buf,
+ FX_DWORD& dest_size,
+ FX_DWORD& offset) {
+ const FX_BOOL useOldImpl = src_size < 10240;
+ FX_DWORD guess_size = orig_size ? orig_size : src_size * 2;
+ FX_DWORD alloc_step =
+ orig_size ? 10240 : (src_size < 10240 ? 10240 : src_size);
+ static const FX_DWORD kMaxInitialAllocSize = 10000000;
+ if (guess_size > kMaxInitialAllocSize) {
+ guess_size = kMaxInitialAllocSize;
+ alloc_step = kMaxInitialAllocSize;
+ }
+ FX_DWORD buf_size = guess_size;
+ FX_DWORD last_buf_size = buf_size;
+ void* context = nullptr;
- uint8_t* guess_buf = FX_Alloc(uint8_t, guess_size + 1);
- uint8_t* cur_buf = guess_buf;
- guess_buf[guess_size] = '\0';
- context = FPDFAPI_FlateInit(my_alloc_func, my_free_func);
- if (!context)
+ uint8_t* guess_buf = FX_Alloc(uint8_t, guess_size + 1);
+ uint8_t* cur_buf = guess_buf;
+ guess_buf[guess_size] = '\0';
+ context = FPDFAPI_FlateInit(my_alloc_func, my_free_func);
+ if (!context)
+ goto fail;
+ FPDFAPI_FlateInput(context, src_buf, src_size);
+ if (useOldImpl) {
+ while (1) {
+ int32_t ret = FPDFAPI_FlateOutput(context, cur_buf, buf_size);
+ if (ret != Z_OK)
+ break;
+ int32_t avail_buf_size = FPDFAPI_FlateGetAvailOut(context);
+ if (avail_buf_size != 0)
+ break;
+
+ // |avail_buf_size| == 0 case.
+ FX_DWORD old_size = guess_size;
+ guess_size += alloc_step;
+ if (guess_size < old_size || guess_size + 1 < guess_size)
+ goto fail;
+ guess_buf = FX_Realloc(uint8_t, guess_buf, guess_size + 1);
+ if (!guess_buf)
+ goto fail;
+ guess_buf[guess_size] = '\0';
+ cur_buf = guess_buf + old_size;
+ buf_size = guess_size - old_size;
+ }
+ dest_size = FPDFAPI_FlateGetTotalOut(context);
+ offset = FPDFAPI_FlateGetTotalIn(context);
+ if (guess_size / 2 > dest_size) {
+ guess_buf = FX_Realloc(uint8_t, guess_buf, dest_size + 1);
+ if (!guess_buf)
goto fail;
- FPDFAPI_FlateInput(context, src_buf, src_size);
- if (useOldImpl) {
- while (1) {
- int32_t ret = FPDFAPI_FlateOutput(context, cur_buf, buf_size);
- if (ret != Z_OK)
- break;
- int32_t avail_buf_size = FPDFAPI_FlateGetAvailOut(context);
- if (avail_buf_size != 0)
- break;
+ guess_size = dest_size;
+ guess_buf[guess_size] = '\0';
+ }
+ dest_buf = guess_buf;
+ } else {
+ CFX_ArrayTemplate<uint8_t*> result_tmp_bufs;
+ while (1) {
+ int32_t ret = FPDFAPI_FlateOutput(context, cur_buf, buf_size);
+ int32_t avail_buf_size = FPDFAPI_FlateGetAvailOut(context);
+ if (ret != Z_OK) {
+ last_buf_size = buf_size - avail_buf_size;
+ result_tmp_bufs.Add(cur_buf);
+ break;
+ }
+ if (avail_buf_size != 0) {
+ last_buf_size = buf_size - avail_buf_size;
+ result_tmp_bufs.Add(cur_buf);
+ break;
+ }
- // |avail_buf_size| == 0 case.
- FX_DWORD old_size = guess_size;
- guess_size += alloc_step;
- if (guess_size < old_size || guess_size + 1 < guess_size)
- goto fail;
- guess_buf = FX_Realloc(uint8_t, guess_buf, guess_size + 1);
- if (!guess_buf)
- goto fail;
- guess_buf[guess_size] = '\0';
- cur_buf = guess_buf + old_size;
- buf_size = guess_size - old_size;
- }
- dest_size = FPDFAPI_FlateGetTotalOut(context);
- offset = FPDFAPI_FlateGetTotalIn(context);
- if (guess_size / 2 > dest_size) {
- guess_buf = FX_Realloc(uint8_t, guess_buf, dest_size + 1);
- if (!guess_buf)
- goto fail;
- guess_size = dest_size;
- guess_buf[guess_size] = '\0';
- }
- dest_buf = guess_buf;
+ // |avail_buf_size| == 0 case.
+ result_tmp_bufs.Add(cur_buf);
+ cur_buf = FX_Alloc(uint8_t, buf_size + 1);
+ cur_buf[buf_size] = '\0';
+ }
+ dest_size = FPDFAPI_FlateGetTotalOut(context);
+ offset = FPDFAPI_FlateGetTotalIn(context);
+ if (result_tmp_bufs.GetSize() == 1) {
+ dest_buf = result_tmp_bufs[0];
} else {
- CFX_ArrayTemplate<uint8_t*> result_tmp_bufs;
- while (1) {
- int32_t ret = FPDFAPI_FlateOutput(context, cur_buf, buf_size);
- int32_t avail_buf_size = FPDFAPI_FlateGetAvailOut(context);
- if (ret != Z_OK) {
- last_buf_size = buf_size - avail_buf_size;
- result_tmp_bufs.Add(cur_buf);
- break;
- }
- if (avail_buf_size != 0) {
- last_buf_size = buf_size - avail_buf_size;
- result_tmp_bufs.Add(cur_buf);
- break;
- }
-
- // |avail_buf_size| == 0 case.
- result_tmp_bufs.Add(cur_buf);
- cur_buf = FX_Alloc(uint8_t, buf_size + 1);
- cur_buf[buf_size] = '\0';
- }
- dest_size = FPDFAPI_FlateGetTotalOut(context);
- offset = FPDFAPI_FlateGetTotalIn(context);
- if (result_tmp_bufs.GetSize() == 1) {
- dest_buf = result_tmp_bufs[0];
- } else {
- uint8_t* result_buf = FX_Alloc(uint8_t, dest_size);
- FX_DWORD result_pos = 0;
- for (int32_t i = 0; i < result_tmp_bufs.GetSize(); i++) {
- uint8_t* tmp_buf = result_tmp_bufs[i];
- FX_DWORD tmp_buf_size = buf_size;
- if (i == result_tmp_bufs.GetSize() - 1) {
- tmp_buf_size = last_buf_size;
- }
- FXSYS_memcpy(result_buf + result_pos, tmp_buf, tmp_buf_size);
- result_pos += tmp_buf_size;
- FX_Free(result_tmp_bufs[i]);
- }
- dest_buf = result_buf;
- }
- }
- FPDFAPI_FlateEnd(context);
- return;
+ uint8_t* result_buf = FX_Alloc(uint8_t, dest_size);
+ FX_DWORD result_pos = 0;
+ for (int32_t i = 0; i < result_tmp_bufs.GetSize(); i++) {
+ uint8_t* tmp_buf = result_tmp_bufs[i];
+ FX_DWORD tmp_buf_size = buf_size;
+ if (i == result_tmp_bufs.GetSize() - 1) {
+ tmp_buf_size = last_buf_size;
+ }
+ FXSYS_memcpy(result_buf + result_pos, tmp_buf, tmp_buf_size);
+ result_pos += tmp_buf_size;
+ FX_Free(result_tmp_bufs[i]);
+ }
+ dest_buf = result_buf;
+ }
+ }
+ FPDFAPI_FlateEnd(context);
+ return;
fail:
- FX_Free(guess_buf);
- dest_buf = nullptr;
- dest_size = 0;
- return;
+ FX_Free(guess_buf);
+ dest_buf = nullptr;
+ dest_size = 0;
+ return;
}
-ICodec_ScanlineDecoder* CCodec_FlateModule::CreateDecoder(const uint8_t* src_buf, FX_DWORD src_size, int width, int height,
- int nComps, int bpc, int predictor, int Colors, int BitsPerComponent, int Columns)
-{
- CCodec_FlateScanlineDecoder* pDecoder = new CCodec_FlateScanlineDecoder;
- pDecoder->Create(src_buf, src_size, width, height, nComps, bpc, predictor, Colors, BitsPerComponent, Columns);
- return pDecoder;
-}
-FX_DWORD CCodec_FlateModule::FlateOrLZWDecode(FX_BOOL bLZW, const uint8_t* src_buf, FX_DWORD src_size, FX_BOOL bEarlyChange,
- int predictor, int Colors, int BitsPerComponent, int Columns,
- FX_DWORD estimated_size, uint8_t*& dest_buf, FX_DWORD& dest_size)
-{
- dest_buf = NULL;
- FX_DWORD offset = 0;
- int predictor_type = 0;
- if (predictor) {
- if (predictor >= 10) {
- predictor_type = 2;
- } else if (predictor == 2) {
- predictor_type = 1;
- }
- }
- if (bLZW) {
- {
- nonstd::unique_ptr<CLZWDecoder> decoder(new CLZWDecoder);
- dest_size = (FX_DWORD) - 1;
- offset = src_size;
- int err = decoder->Decode(NULL, dest_size, src_buf, offset,
- bEarlyChange);
- if (err || dest_size == 0 || dest_size + 1 < dest_size) {
- return -1;
- }
- }
- {
- nonstd::unique_ptr<CLZWDecoder> decoder(new CLZWDecoder);
- dest_buf = FX_Alloc( uint8_t, dest_size + 1);
- dest_buf[dest_size] = '\0';
- decoder->Decode(dest_buf, dest_size, src_buf, offset, bEarlyChange);
- }
- } else {
- FlateUncompress(src_buf, src_size, estimated_size, dest_buf, dest_size, offset);
- }
- if (predictor_type == 0) {
- return offset;
- }
- FX_BOOL ret = TRUE;
- if (predictor_type == 2) {
- ret = PNG_Predictor(dest_buf, dest_size, Colors, BitsPerComponent,
- Columns);
- } else if (predictor_type == 1) {
- ret = TIFF_Predictor(dest_buf, dest_size, Colors, BitsPerComponent,
- Columns);
- }
- return ret ? offset : -1;
-}
-FX_BOOL CCodec_FlateModule::Encode(const uint8_t* src_buf, FX_DWORD src_size,
- int predictor, int Colors, int BitsPerComponent, int Columns,
- uint8_t*& dest_buf, FX_DWORD& dest_size)
-{
- if (predictor != 2 && predictor < 10) {
- return Encode(src_buf, src_size, dest_buf, dest_size);
- }
- uint8_t* pSrcBuf = NULL;
- pSrcBuf = FX_Alloc(uint8_t, src_size);
- FXSYS_memcpy(pSrcBuf, src_buf, src_size);
- FX_BOOL ret = TRUE;
- if (predictor == 2) {
- ret = TIFF_PredictorEncode(pSrcBuf, src_size, Colors, BitsPerComponent,
- Columns);
- } else if (predictor >= 10) {
- ret = PNG_PredictorEncode(pSrcBuf, src_size, predictor, Colors,
- BitsPerComponent, Columns);
+ICodec_ScanlineDecoder* CCodec_FlateModule::CreateDecoder(
+ const uint8_t* src_buf,
+ FX_DWORD src_size,
+ int width,
+ int height,
+ int nComps,
+ int bpc,
+ int predictor,
+ int Colors,
+ int BitsPerComponent,
+ int Columns) {
+ CCodec_FlateScanlineDecoder* pDecoder = new CCodec_FlateScanlineDecoder;
+ pDecoder->Create(src_buf, src_size, width, height, nComps, bpc, predictor,
+ Colors, BitsPerComponent, Columns);
+ return pDecoder;
+}
+FX_DWORD CCodec_FlateModule::FlateOrLZWDecode(FX_BOOL bLZW,
+ const uint8_t* src_buf,
+ FX_DWORD src_size,
+ FX_BOOL bEarlyChange,
+ int predictor,
+ int Colors,
+ int BitsPerComponent,
+ int Columns,
+ FX_DWORD estimated_size,
+ uint8_t*& dest_buf,
+ FX_DWORD& dest_size) {
+ dest_buf = NULL;
+ FX_DWORD offset = 0;
+ int predictor_type = 0;
+ if (predictor) {
+ if (predictor >= 10) {
+ predictor_type = 2;
+ } else if (predictor == 2) {
+ predictor_type = 1;
+ }
+ }
+ if (bLZW) {
+ {
+ nonstd::unique_ptr<CLZWDecoder> decoder(new CLZWDecoder);
+ dest_size = (FX_DWORD)-1;
+ offset = src_size;
+ int err = decoder->Decode(NULL, dest_size, src_buf, offset, bEarlyChange);
+ if (err || dest_size == 0 || dest_size + 1 < dest_size) {
+ return -1;
+ }
}
- if (ret)
- ret = Encode(pSrcBuf, src_size, dest_buf, dest_size);
- FX_Free(pSrcBuf);
- return ret;
-}
-FX_BOOL CCodec_FlateModule::Encode(const uint8_t* src_buf, FX_DWORD src_size, uint8_t*& dest_buf, FX_DWORD& dest_size)
-{
- dest_size = src_size + src_size / 1000 + 12;
- dest_buf = FX_Alloc( uint8_t, dest_size);
- unsigned long temp_size = dest_size;
- FPDFAPI_FlateCompress(dest_buf, &temp_size, src_buf, src_size);
- dest_size = (FX_DWORD)temp_size;
- return TRUE;
+ {
+ nonstd::unique_ptr<CLZWDecoder> decoder(new CLZWDecoder);
+ dest_buf = FX_Alloc(uint8_t, dest_size + 1);
+ dest_buf[dest_size] = '\0';
+ decoder->Decode(dest_buf, dest_size, src_buf, offset, bEarlyChange);
+ }
+ } else {
+ FlateUncompress(src_buf, src_size, estimated_size, dest_buf, dest_size,
+ offset);
+ }
+ if (predictor_type == 0) {
+ return offset;
+ }
+ FX_BOOL ret = TRUE;
+ if (predictor_type == 2) {
+ ret = PNG_Predictor(dest_buf, dest_size, Colors, BitsPerComponent, Columns);
+ } else if (predictor_type == 1) {
+ ret =
+ TIFF_Predictor(dest_buf, dest_size, Colors, BitsPerComponent, Columns);
+ }
+ return ret ? offset : -1;
+}
+FX_BOOL CCodec_FlateModule::Encode(const uint8_t* src_buf,
+ FX_DWORD src_size,
+ int predictor,
+ int Colors,
+ int BitsPerComponent,
+ int Columns,
+ uint8_t*& dest_buf,
+ FX_DWORD& dest_size) {
+ if (predictor != 2 && predictor < 10) {
+ return Encode(src_buf, src_size, dest_buf, dest_size);
+ }
+ uint8_t* pSrcBuf = NULL;
+ pSrcBuf = FX_Alloc(uint8_t, src_size);
+ FXSYS_memcpy(pSrcBuf, src_buf, src_size);
+ FX_BOOL ret = TRUE;
+ if (predictor == 2) {
+ ret = TIFF_PredictorEncode(pSrcBuf, src_size, Colors, BitsPerComponent,
+ Columns);
+ } else if (predictor >= 10) {
+ ret = PNG_PredictorEncode(pSrcBuf, src_size, predictor, Colors,
+ BitsPerComponent, Columns);
+ }
+ if (ret)
+ ret = Encode(pSrcBuf, src_size, dest_buf, dest_size);
+ FX_Free(pSrcBuf);
+ return ret;
+}
+FX_BOOL CCodec_FlateModule::Encode(const uint8_t* src_buf,
+ FX_DWORD src_size,
+ uint8_t*& dest_buf,
+ FX_DWORD& dest_size) {
+ dest_size = src_size + src_size / 1000 + 12;
+ dest_buf = FX_Alloc(uint8_t, dest_size);
+ unsigned long temp_size = dest_size;
+ FPDFAPI_FlateCompress(dest_buf, &temp_size, src_buf, src_size);
+ dest_size = (FX_DWORD)temp_size;
+ return TRUE;
}
diff --git a/core/src/fxcodec/codec/fx_codec_icc.cpp b/core/src/fxcodec/codec/fx_codec_icc.cpp
index 7507fe5d6d..856766e4ea 100644
--- a/core/src/fxcodec/codec/fx_codec_icc.cpp
+++ b/core/src/fxcodec/codec/fx_codec_icc.cpp
@@ -14,1354 +14,1970 @@ const FX_DWORD N_COMPONENT_RGB = 3;
const FX_DWORD N_COMPONENT_CMYK = 4;
const FX_DWORD N_COMPONENT_DEFAULT = 3;
-FX_BOOL MD5ComputeID( const void* buf, FX_DWORD dwSize, uint8_t ID[16] )
-{
- return cmsMD5computeIDExt(buf, dwSize, ID);
+FX_BOOL MD5ComputeID(const void* buf, FX_DWORD dwSize, uint8_t ID[16]) {
+ return cmsMD5computeIDExt(buf, dwSize, ID);
}
-struct CLcmsCmm {
- cmsHTRANSFORM m_hTransform;
- int m_nSrcComponents;
- int m_nDstComponents;
- FX_BOOL m_bLab;
+struct CLcmsCmm {
+ cmsHTRANSFORM m_hTransform;
+ int m_nSrcComponents;
+ int m_nDstComponents;
+ FX_BOOL m_bLab;
};
extern "C" {
- int ourHandler(int ErrorCode, const char *ErrorText)
- {
- return TRUE;
- }
+int ourHandler(int ErrorCode, const char* ErrorText) {
+ return TRUE;
+}
};
-FX_BOOL CheckComponents(cmsColorSpaceSignature cs, int nComponents, FX_BOOL bDst)
-{
- if (nComponents <= 0 || nComponents > 15) {
+FX_BOOL CheckComponents(cmsColorSpaceSignature cs,
+ int nComponents,
+ FX_BOOL bDst) {
+ if (nComponents <= 0 || nComponents > 15) {
+ return FALSE;
+ }
+ switch (cs) {
+ case cmsSigLabData:
+ if (nComponents < 3) {
return FALSE;
- }
- switch(cs) {
- case cmsSigLabData:
- if (nComponents < 3) {
- return FALSE;
- }
- break;
- case cmsSigGrayData:
- if (bDst && nComponents != 1) {
- return FALSE;
- }
- if (!bDst && nComponents > 2) {
- return FALSE;
- }
- break;
- case cmsSigRgbData:
- if (bDst && nComponents != 3) {
- return FALSE;
- }
- break;
- case cmsSigCmykData:
- if (bDst && nComponents != 4) {
- return FALSE;
- }
- break;
- default:
- if (nComponents != 3) {
- return FALSE;
- }
- break;
- }
- return TRUE;
+ }
+ break;
+ case cmsSigGrayData:
+ if (bDst && nComponents != 1) {
+ return FALSE;
+ }
+ if (!bDst && nComponents > 2) {
+ return FALSE;
+ }
+ break;
+ case cmsSigRgbData:
+ if (bDst && nComponents != 3) {
+ return FALSE;
+ }
+ break;
+ case cmsSigCmykData:
+ if (bDst && nComponents != 4) {
+ return FALSE;
+ }
+ break;
+ default:
+ if (nComponents != 3) {
+ return FALSE;
+ }
+ break;
+ }
+ return TRUE;
}
-int32_t GetCSComponents(cmsColorSpaceSignature cs)
-{
- FX_DWORD components;
- switch (cs) {
- case cmsSigLabData:
- components = N_COMPONENT_LAB;
- break;
- case cmsSigGrayData:
- components = N_COMPONENT_GRAY;
- break;
- case cmsSigRgbData:
- components = N_COMPONENT_RGB;
- break;
- case cmsSigCmykData:
- components = N_COMPONENT_CMYK;
- break;
- default:
- components = N_COMPONENT_DEFAULT;
- break;
- }
- return components;
+int32_t GetCSComponents(cmsColorSpaceSignature cs) {
+ FX_DWORD components;
+ switch (cs) {
+ case cmsSigLabData:
+ components = N_COMPONENT_LAB;
+ break;
+ case cmsSigGrayData:
+ components = N_COMPONENT_GRAY;
+ break;
+ case cmsSigRgbData:
+ components = N_COMPONENT_RGB;
+ break;
+ case cmsSigCmykData:
+ components = N_COMPONENT_CMYK;
+ break;
+ default:
+ components = N_COMPONENT_DEFAULT;
+ break;
+ }
+ return components;
}
-void* IccLib_CreateTransform(const unsigned char* pSrcProfileData, FX_DWORD dwSrcProfileSize, int32_t& nSrcComponents,
- const unsigned char* pDstProfileData, FX_DWORD dwDstProfileSize, int32_t nDstComponents,
- int intent, FX_DWORD dwSrcFormat = Icc_FORMAT_DEFAULT, FX_DWORD dwDstFormat = Icc_FORMAT_DEFAULT)
-{
- cmsHPROFILE srcProfile = NULL;
- cmsHPROFILE dstProfile = NULL;
- cmsHTRANSFORM hTransform = NULL;
- CLcmsCmm* pCmm = NULL;
- nSrcComponents = 0;
- srcProfile = cmsOpenProfileFromMem((void*)pSrcProfileData, dwSrcProfileSize);
- if (srcProfile == NULL) {
- return NULL;
- }
- if(pDstProfileData == NULL && dwDstProfileSize == 0 && nDstComponents == 3) {
- dstProfile = cmsCreate_sRGBProfile();
- } else {
- dstProfile = cmsOpenProfileFromMem((void*)pDstProfileData, dwDstProfileSize);
- }
- if (dstProfile == NULL) {
- cmsCloseProfile(srcProfile);
- return NULL;
- }
- int srcFormat;
- FX_BOOL bLab = FALSE;
- cmsColorSpaceSignature srcCS = cmsGetColorSpace(srcProfile);
- nSrcComponents = GetCSComponents(srcCS);
- if (srcCS == cmsSigLabData) {
- srcFormat = COLORSPACE_SH(PT_Lab) | CHANNELS_SH(nSrcComponents) | BYTES_SH(0);
- bLab = TRUE;
- } else {
- srcFormat = COLORSPACE_SH(PT_ANY) | CHANNELS_SH(nSrcComponents) | BYTES_SH(1);
- if (srcCS == cmsSigRgbData && T_DOSWAP(dwSrcFormat)) {
- srcFormat |= DOSWAP_SH(1);
- }
- }
- cmsColorSpaceSignature dstCS = cmsGetColorSpace(dstProfile);
- if (!CheckComponents(dstCS, nDstComponents, TRUE)) {
- cmsCloseProfile(srcProfile);
- cmsCloseProfile(dstProfile);
- return NULL;
- }
- switch(dstCS) {
- case cmsSigGrayData:
- hTransform = cmsCreateTransform(srcProfile, srcFormat, dstProfile, TYPE_GRAY_8, intent, 0);
- break;
- case cmsSigRgbData:
- hTransform = cmsCreateTransform(srcProfile, srcFormat, dstProfile, TYPE_BGR_8, intent, 0);
- break;
- case cmsSigCmykData:
- hTransform = cmsCreateTransform(srcProfile, srcFormat, dstProfile,
- T_DOSWAP(dwDstFormat) ? TYPE_KYMC_8 : TYPE_CMYK_8,
- intent, 0);
- break;
- default:
- break;
- }
- if (hTransform == NULL) {
- cmsCloseProfile(srcProfile);
- cmsCloseProfile(dstProfile);
- return NULL;
+void* IccLib_CreateTransform(const unsigned char* pSrcProfileData,
+ FX_DWORD dwSrcProfileSize,
+ int32_t& nSrcComponents,
+ const unsigned char* pDstProfileData,
+ FX_DWORD dwDstProfileSize,
+ int32_t nDstComponents,
+ int intent,
+ FX_DWORD dwSrcFormat = Icc_FORMAT_DEFAULT,
+ FX_DWORD dwDstFormat = Icc_FORMAT_DEFAULT) {
+ cmsHPROFILE srcProfile = NULL;
+ cmsHPROFILE dstProfile = NULL;
+ cmsHTRANSFORM hTransform = NULL;
+ CLcmsCmm* pCmm = NULL;
+ nSrcComponents = 0;
+ srcProfile = cmsOpenProfileFromMem((void*)pSrcProfileData, dwSrcProfileSize);
+ if (srcProfile == NULL) {
+ return NULL;
+ }
+ if (pDstProfileData == NULL && dwDstProfileSize == 0 && nDstComponents == 3) {
+ dstProfile = cmsCreate_sRGBProfile();
+ } else {
+ dstProfile =
+ cmsOpenProfileFromMem((void*)pDstProfileData, dwDstProfileSize);
+ }
+ if (dstProfile == NULL) {
+ cmsCloseProfile(srcProfile);
+ return NULL;
+ }
+ int srcFormat;
+ FX_BOOL bLab = FALSE;
+ cmsColorSpaceSignature srcCS = cmsGetColorSpace(srcProfile);
+ nSrcComponents = GetCSComponents(srcCS);
+ if (srcCS == cmsSigLabData) {
+ srcFormat =
+ COLORSPACE_SH(PT_Lab) | CHANNELS_SH(nSrcComponents) | BYTES_SH(0);
+ bLab = TRUE;
+ } else {
+ srcFormat =
+ COLORSPACE_SH(PT_ANY) | CHANNELS_SH(nSrcComponents) | BYTES_SH(1);
+ if (srcCS == cmsSigRgbData && T_DOSWAP(dwSrcFormat)) {
+ srcFormat |= DOSWAP_SH(1);
}
- pCmm = new CLcmsCmm;
- pCmm->m_nSrcComponents = nSrcComponents;
- pCmm->m_nDstComponents = nDstComponents;
- pCmm->m_hTransform = hTransform;
- pCmm->m_bLab = bLab;
+ }
+ cmsColorSpaceSignature dstCS = cmsGetColorSpace(dstProfile);
+ if (!CheckComponents(dstCS, nDstComponents, TRUE)) {
cmsCloseProfile(srcProfile);
cmsCloseProfile(dstProfile);
- return pCmm;
+ return NULL;
+ }
+ switch (dstCS) {
+ case cmsSigGrayData:
+ hTransform = cmsCreateTransform(srcProfile, srcFormat, dstProfile,
+ TYPE_GRAY_8, intent, 0);
+ break;
+ case cmsSigRgbData:
+ hTransform = cmsCreateTransform(srcProfile, srcFormat, dstProfile,
+ TYPE_BGR_8, intent, 0);
+ break;
+ case cmsSigCmykData:
+ hTransform = cmsCreateTransform(
+ srcProfile, srcFormat, dstProfile,
+ T_DOSWAP(dwDstFormat) ? TYPE_KYMC_8 : TYPE_CMYK_8, intent, 0);
+ break;
+ default:
+ break;
+ }
+ if (hTransform == NULL) {
+ cmsCloseProfile(srcProfile);
+ cmsCloseProfile(dstProfile);
+ return NULL;
+ }
+ pCmm = new CLcmsCmm;
+ pCmm->m_nSrcComponents = nSrcComponents;
+ pCmm->m_nDstComponents = nDstComponents;
+ pCmm->m_hTransform = hTransform;
+ pCmm->m_bLab = bLab;
+ cmsCloseProfile(srcProfile);
+ cmsCloseProfile(dstProfile);
+ return pCmm;
}
-void* IccLib_CreateTransform_sRGB(const unsigned char* pProfileData, FX_DWORD dwProfileSize, int32_t& nComponents, int32_t intent, FX_DWORD dwSrcFormat)
-{
- return IccLib_CreateTransform(pProfileData, dwProfileSize, nComponents, NULL, 0, 3, intent, dwSrcFormat);
+void* IccLib_CreateTransform_sRGB(const unsigned char* pProfileData,
+ FX_DWORD dwProfileSize,
+ int32_t& nComponents,
+ int32_t intent,
+ FX_DWORD dwSrcFormat) {
+ return IccLib_CreateTransform(pProfileData, dwProfileSize, nComponents, NULL,
+ 0, 3, intent, dwSrcFormat);
}
-void IccLib_DestroyTransform(void* pTransform)
-{
- if (pTransform == NULL) {
- return;
- }
- cmsDeleteTransform(((CLcmsCmm*)pTransform)->m_hTransform);
- delete (CLcmsCmm*)pTransform;
+void IccLib_DestroyTransform(void* pTransform) {
+ if (pTransform == NULL) {
+ return;
+ }
+ cmsDeleteTransform(((CLcmsCmm*)pTransform)->m_hTransform);
+ delete (CLcmsCmm*)pTransform;
}
-void IccLib_Translate(void* pTransform, FX_DWORD nSrcComponents, FX_FLOAT* pSrcValues, FX_FLOAT* pDestValues)
-{
- if (pTransform == NULL) {
- return;
- }
- CLcmsCmm* p = (CLcmsCmm*)pTransform;
- uint8_t output[4];
- if (p->m_bLab) {
- CFX_FixedBufGrow<double, 16> inputs(nSrcComponents);
- double* input = inputs;
- for (FX_DWORD i = 0; i < nSrcComponents; i ++) {
- input[i] = pSrcValues[i];
- }
- cmsDoTransform(p->m_hTransform, input, output, 1);
- } else {
- CFX_FixedBufGrow<uint8_t, 16> inputs(nSrcComponents);
- uint8_t* input = inputs;
- for (FX_DWORD i = 0; i < nSrcComponents; i ++) {
- if (pSrcValues[i] > 1.0f) {
- input[i] = 255;
- } else if (pSrcValues[i] < 0) {
- input[i] = 0;
- } else {
- input[i] = (int)(pSrcValues[i] * 255.0f);
- }
- }
- cmsDoTransform(p->m_hTransform, input, output, 1);
+void IccLib_Translate(void* pTransform,
+ FX_DWORD nSrcComponents,
+ FX_FLOAT* pSrcValues,
+ FX_FLOAT* pDestValues) {
+ if (pTransform == NULL) {
+ return;
+ }
+ CLcmsCmm* p = (CLcmsCmm*)pTransform;
+ uint8_t output[4];
+ if (p->m_bLab) {
+ CFX_FixedBufGrow<double, 16> inputs(nSrcComponents);
+ double* input = inputs;
+ for (FX_DWORD i = 0; i < nSrcComponents; i++) {
+ input[i] = pSrcValues[i];
}
- switch(p->m_nDstComponents) {
- case 1:
- pDestValues[0] = output[0] / 255.0f;
- break;
- case 3:
- pDestValues[0] = output[2] / 255.0f;
- pDestValues[1] = output[1] / 255.0f;
- pDestValues[2] = output[0] / 255.0f;
- break;
- case 4:
- pDestValues[0] = output[0] / 255.0f;
- pDestValues[1] = output[1] / 255.0f;
- pDestValues[2] = output[2] / 255.0f;
- pDestValues[3] = output[3] / 255.0f;
- break;
+ cmsDoTransform(p->m_hTransform, input, output, 1);
+ } else {
+ CFX_FixedBufGrow<uint8_t, 16> inputs(nSrcComponents);
+ uint8_t* input = inputs;
+ for (FX_DWORD i = 0; i < nSrcComponents; i++) {
+ if (pSrcValues[i] > 1.0f) {
+ input[i] = 255;
+ } else if (pSrcValues[i] < 0) {
+ input[i] = 0;
+ } else {
+ input[i] = (int)(pSrcValues[i] * 255.0f);
+ }
}
+ cmsDoTransform(p->m_hTransform, input, output, 1);
+ }
+ switch (p->m_nDstComponents) {
+ case 1:
+ pDestValues[0] = output[0] / 255.0f;
+ break;
+ case 3:
+ pDestValues[0] = output[2] / 255.0f;
+ pDestValues[1] = output[1] / 255.0f;
+ pDestValues[2] = output[0] / 255.0f;
+ break;
+ case 4:
+ pDestValues[0] = output[0] / 255.0f;
+ pDestValues[1] = output[1] / 255.0f;
+ pDestValues[2] = output[2] / 255.0f;
+ pDestValues[3] = output[3] / 255.0f;
+ break;
+ }
}
-void IccLib_TranslateImage(void* pTransform, unsigned char* pDest, const unsigned char* pSrc, int32_t pixels)
-{
- cmsDoTransform(((CLcmsCmm*)pTransform)->m_hTransform, (void*)pSrc, pDest, pixels);
+void IccLib_TranslateImage(void* pTransform,
+ unsigned char* pDest,
+ const unsigned char* pSrc,
+ int32_t pixels) {
+ cmsDoTransform(((CLcmsCmm*)pTransform)->m_hTransform, (void*)pSrc, pDest,
+ pixels);
}
-void* CreateProfile_Gray(double gamma)
-{
- cmsCIExyY* D50 = (cmsCIExyY*)cmsD50_xyY();
- if (!cmsWhitePointFromTemp(D50, 6504)) {
- return NULL;
- }
- cmsToneCurve* curve = cmsBuildGamma(NULL, gamma);
- if (curve == NULL) {
- return NULL;
- }
- void* profile = cmsCreateGrayProfile(D50, curve);
- cmsFreeToneCurve(curve);
- return profile;
+void* CreateProfile_Gray(double gamma) {
+ cmsCIExyY* D50 = (cmsCIExyY*)cmsD50_xyY();
+ if (!cmsWhitePointFromTemp(D50, 6504)) {
+ return NULL;
+ }
+ cmsToneCurve* curve = cmsBuildGamma(NULL, gamma);
+ if (curve == NULL) {
+ return NULL;
+ }
+ void* profile = cmsCreateGrayProfile(D50, curve);
+ cmsFreeToneCurve(curve);
+ return profile;
}
-ICodec_IccModule::IccCS GetProfileCSFromHandle(void* pProfile)
-{
- if (pProfile == NULL) {
- return ICodec_IccModule::IccCS_Unknown;
- }
- switch (cmsGetColorSpace(pProfile)) {
- case cmsSigXYZData:
- return ICodec_IccModule::IccCS_XYZ;
- case cmsSigLabData:
- return ICodec_IccModule::IccCS_Lab;
- case cmsSigLuvData:
- return ICodec_IccModule::IccCS_Luv;
- case cmsSigYCbCrData:
- return ICodec_IccModule::IccCS_YCbCr;
- case cmsSigYxyData:
- return ICodec_IccModule::IccCS_Yxy;
- case cmsSigRgbData:
- return ICodec_IccModule::IccCS_Rgb;
- case cmsSigGrayData:
- return ICodec_IccModule::IccCS_Gray;
- case cmsSigHsvData:
- return ICodec_IccModule::IccCS_Hsv;
- case cmsSigHlsData:
- return ICodec_IccModule::IccCS_Hls;
- case cmsSigCmykData:
- return ICodec_IccModule::IccCS_Cmyk;
- case cmsSigCmyData:
- return ICodec_IccModule::IccCS_Cmy;
- default:
- return ICodec_IccModule::IccCS_Unknown;
- }
+ICodec_IccModule::IccCS GetProfileCSFromHandle(void* pProfile) {
+ if (pProfile == NULL) {
+ return ICodec_IccModule::IccCS_Unknown;
+ }
+ switch (cmsGetColorSpace(pProfile)) {
+ case cmsSigXYZData:
+ return ICodec_IccModule::IccCS_XYZ;
+ case cmsSigLabData:
+ return ICodec_IccModule::IccCS_Lab;
+ case cmsSigLuvData:
+ return ICodec_IccModule::IccCS_Luv;
+ case cmsSigYCbCrData:
+ return ICodec_IccModule::IccCS_YCbCr;
+ case cmsSigYxyData:
+ return ICodec_IccModule::IccCS_Yxy;
+ case cmsSigRgbData:
+ return ICodec_IccModule::IccCS_Rgb;
+ case cmsSigGrayData:
+ return ICodec_IccModule::IccCS_Gray;
+ case cmsSigHsvData:
+ return ICodec_IccModule::IccCS_Hsv;
+ case cmsSigHlsData:
+ return ICodec_IccModule::IccCS_Hls;
+ case cmsSigCmykData:
+ return ICodec_IccModule::IccCS_Cmyk;
+ case cmsSigCmyData:
+ return ICodec_IccModule::IccCS_Cmy;
+ default:
+ return ICodec_IccModule::IccCS_Unknown;
+ }
}
-ICodec_IccModule::IccCS CCodec_IccModule::GetProfileCS(const uint8_t* pProfileData, FX_DWORD dwProfileSize)
-{
- ICodec_IccModule::IccCS cs;
- cmsHPROFILE hProfile = cmsOpenProfileFromMem((void*)pProfileData, dwProfileSize);
- if (hProfile == NULL) {
- return IccCS_Unknown;
- }
- cs = GetProfileCSFromHandle(hProfile);
- if (hProfile) {
- cmsCloseProfile(hProfile);
- }
- return cs;
+ICodec_IccModule::IccCS CCodec_IccModule::GetProfileCS(
+ const uint8_t* pProfileData,
+ FX_DWORD dwProfileSize) {
+ ICodec_IccModule::IccCS cs;
+ cmsHPROFILE hProfile =
+ cmsOpenProfileFromMem((void*)pProfileData, dwProfileSize);
+ if (hProfile == NULL) {
+ return IccCS_Unknown;
+ }
+ cs = GetProfileCSFromHandle(hProfile);
+ if (hProfile) {
+ cmsCloseProfile(hProfile);
+ }
+ return cs;
}
-ICodec_IccModule::IccCS CCodec_IccModule::GetProfileCS(IFX_FileRead* pFile)
-{
- if (pFile == NULL) {
- return IccCS_Unknown;
- }
- ICodec_IccModule::IccCS cs;
- FX_DWORD dwSize = (FX_DWORD)pFile->GetSize();
- uint8_t* pBuf = FX_Alloc(uint8_t, dwSize);
- pFile->ReadBlock(pBuf, 0, dwSize);
- cs = GetProfileCS(pBuf, dwSize);
- FX_Free(pBuf);
- return cs;
+ICodec_IccModule::IccCS CCodec_IccModule::GetProfileCS(IFX_FileRead* pFile) {
+ if (pFile == NULL) {
+ return IccCS_Unknown;
+ }
+ ICodec_IccModule::IccCS cs;
+ FX_DWORD dwSize = (FX_DWORD)pFile->GetSize();
+ uint8_t* pBuf = FX_Alloc(uint8_t, dwSize);
+ pFile->ReadBlock(pBuf, 0, dwSize);
+ cs = GetProfileCS(pBuf, dwSize);
+ FX_Free(pBuf);
+ return cs;
}
-FX_DWORD TransferProfileType(void* pProfile, FX_DWORD dwFormat)
-{
- cmsColorSpaceSignature cs = cmsGetColorSpace(pProfile);
- switch (cs) {
- case cmsSigXYZData:
- return TYPE_XYZ_16;
- case cmsSigLabData:
- return TYPE_Lab_DBL;
- case cmsSigLuvData:
- return TYPE_YUV_8;
- case cmsSigYCbCrData:
- return TYPE_YCbCr_8;
- case cmsSigYxyData:
- return TYPE_Yxy_16;
- case cmsSigRgbData:
- return T_DOSWAP(dwFormat) ? TYPE_RGB_8 : TYPE_BGR_8;
- case cmsSigGrayData:
- return TYPE_GRAY_8;
- case cmsSigHsvData:
- return TYPE_HSV_8;
- case cmsSigHlsData:
- return TYPE_HLS_8;
- case cmsSigCmykData:
- return T_DOSWAP(dwFormat) ? TYPE_KYMC_8 : TYPE_CMYK_8;
- case cmsSigCmyData:
- return TYPE_CMY_8;
- case cmsSigMCH5Data:
- return T_DOSWAP(dwFormat) ? TYPE_KYMC5_8 : TYPE_CMYK5_8;
- case cmsSigMCH6Data:
- return TYPE_CMYK6_8;
- case cmsSigMCH7Data:
- return T_DOSWAP(dwFormat) ? TYPE_KYMC7_8 : TYPE_CMYK7_8;
- case cmsSigMCH8Data:
- return T_DOSWAP(dwFormat) ? TYPE_KYMC8_8 : TYPE_CMYK8_8;
- case cmsSigMCH9Data:
- return T_DOSWAP(dwFormat) ? TYPE_KYMC9_8 : TYPE_CMYK9_8;
- case cmsSigMCHAData:
- return T_DOSWAP(dwFormat) ? TYPE_KYMC10_8 : TYPE_CMYK10_8;
- case cmsSigMCHBData:
- return T_DOSWAP(dwFormat) ? TYPE_KYMC11_8 : TYPE_CMYK11_8;
- case cmsSigMCHCData:
- return T_DOSWAP(dwFormat) ? TYPE_KYMC12_8 : TYPE_CMYK12_8;
- default:
- return 0;
- }
+FX_DWORD TransferProfileType(void* pProfile, FX_DWORD dwFormat) {
+ cmsColorSpaceSignature cs = cmsGetColorSpace(pProfile);
+ switch (cs) {
+ case cmsSigXYZData:
+ return TYPE_XYZ_16;
+ case cmsSigLabData:
+ return TYPE_Lab_DBL;
+ case cmsSigLuvData:
+ return TYPE_YUV_8;
+ case cmsSigYCbCrData:
+ return TYPE_YCbCr_8;
+ case cmsSigYxyData:
+ return TYPE_Yxy_16;
+ case cmsSigRgbData:
+ return T_DOSWAP(dwFormat) ? TYPE_RGB_8 : TYPE_BGR_8;
+ case cmsSigGrayData:
+ return TYPE_GRAY_8;
+ case cmsSigHsvData:
+ return TYPE_HSV_8;
+ case cmsSigHlsData:
+ return TYPE_HLS_8;
+ case cmsSigCmykData:
+ return T_DOSWAP(dwFormat) ? TYPE_KYMC_8 : TYPE_CMYK_8;
+ case cmsSigCmyData:
+ return TYPE_CMY_8;
+ case cmsSigMCH5Data:
+ return T_DOSWAP(dwFormat) ? TYPE_KYMC5_8 : TYPE_CMYK5_8;
+ case cmsSigMCH6Data:
+ return TYPE_CMYK6_8;
+ case cmsSigMCH7Data:
+ return T_DOSWAP(dwFormat) ? TYPE_KYMC7_8 : TYPE_CMYK7_8;
+ case cmsSigMCH8Data:
+ return T_DOSWAP(dwFormat) ? TYPE_KYMC8_8 : TYPE_CMYK8_8;
+ case cmsSigMCH9Data:
+ return T_DOSWAP(dwFormat) ? TYPE_KYMC9_8 : TYPE_CMYK9_8;
+ case cmsSigMCHAData:
+ return T_DOSWAP(dwFormat) ? TYPE_KYMC10_8 : TYPE_CMYK10_8;
+ case cmsSigMCHBData:
+ return T_DOSWAP(dwFormat) ? TYPE_KYMC11_8 : TYPE_CMYK11_8;
+ case cmsSigMCHCData:
+ return T_DOSWAP(dwFormat) ? TYPE_KYMC12_8 : TYPE_CMYK12_8;
+ default:
+ return 0;
+ }
}
-class CFX_IccProfileCache
-{
-public:
- CFX_IccProfileCache();
- ~CFX_IccProfileCache();
- void* m_pProfile;
- FX_DWORD m_dwRate;
-protected:
- void Purge();
+class CFX_IccProfileCache {
+ public:
+ CFX_IccProfileCache();
+ ~CFX_IccProfileCache();
+ void* m_pProfile;
+ FX_DWORD m_dwRate;
+
+ protected:
+ void Purge();
};
-CFX_IccProfileCache::CFX_IccProfileCache()
-{
- m_pProfile = NULL;
- m_dwRate = 1;
+CFX_IccProfileCache::CFX_IccProfileCache() {
+ m_pProfile = NULL;
+ m_dwRate = 1;
}
-CFX_IccProfileCache::~CFX_IccProfileCache()
-{
- if (m_pProfile) {
- cmsCloseProfile(m_pProfile);
- }
-}
-void CFX_IccProfileCache::Purge()
-{
+CFX_IccProfileCache::~CFX_IccProfileCache() {
+ if (m_pProfile) {
+ cmsCloseProfile(m_pProfile);
+ }
}
-class CFX_IccTransformCache
-{
-public:
- CFX_IccTransformCache(CLcmsCmm* pCmm = NULL);
- ~CFX_IccTransformCache();
- void* m_pIccTransform;
- FX_DWORD m_dwRate;
- CLcmsCmm* m_pCmm;
-protected:
- void Purge();
+void CFX_IccProfileCache::Purge() {}
+class CFX_IccTransformCache {
+ public:
+ CFX_IccTransformCache(CLcmsCmm* pCmm = NULL);
+ ~CFX_IccTransformCache();
+ void* m_pIccTransform;
+ FX_DWORD m_dwRate;
+ CLcmsCmm* m_pCmm;
+
+ protected:
+ void Purge();
};
-CFX_IccTransformCache::CFX_IccTransformCache(CLcmsCmm* pCmm)
-{
- m_pIccTransform = NULL;
- m_dwRate = 1;
- m_pCmm = pCmm;
-}
-CFX_IccTransformCache::~CFX_IccTransformCache()
-{
- if (m_pIccTransform) {
- cmsDeleteTransform(m_pIccTransform);
- }
- if (m_pCmm) {
- FX_Free(m_pCmm);
- }
+CFX_IccTransformCache::CFX_IccTransformCache(CLcmsCmm* pCmm) {
+ m_pIccTransform = NULL;
+ m_dwRate = 1;
+ m_pCmm = pCmm;
}
-void CFX_IccTransformCache::Purge()
-{
+CFX_IccTransformCache::~CFX_IccTransformCache() {
+ if (m_pIccTransform) {
+ cmsDeleteTransform(m_pIccTransform);
+ }
+ if (m_pCmm) {
+ FX_Free(m_pCmm);
+ }
}
-class CFX_ByteStringKey : public CFX_BinaryBuf
-{
-public:
- CFX_ByteStringKey() : CFX_BinaryBuf() {}
- CFX_ByteStringKey& operator << (FX_DWORD i);
+void CFX_IccTransformCache::Purge() {}
+class CFX_ByteStringKey : public CFX_BinaryBuf {
+ public:
+ CFX_ByteStringKey() : CFX_BinaryBuf() {}
+ CFX_ByteStringKey& operator<<(FX_DWORD i);
};
-CFX_ByteStringKey& CFX_ByteStringKey::operator << (FX_DWORD i)
-{
- AppendBlock(&i, sizeof(FX_DWORD));
- return *this;
+CFX_ByteStringKey& CFX_ByteStringKey::operator<<(FX_DWORD i) {
+ AppendBlock(&i, sizeof(FX_DWORD));
+ return *this;
}
-void* CCodec_IccModule::CreateProfile(ICodec_IccModule::IccParam* pIccParam, Icc_CLASS ic, CFX_BinaryBuf* pTransformKey)
-{
- CFX_IccProfileCache* pCache = NULL;
- CFX_ByteStringKey key;
- CFX_ByteString text;
- key << pIccParam->ColorSpace << (pIccParam->dwProfileType | ic << 8);
- uint8_t ID[16];
+void* CCodec_IccModule::CreateProfile(ICodec_IccModule::IccParam* pIccParam,
+ Icc_CLASS ic,
+ CFX_BinaryBuf* pTransformKey) {
+ CFX_IccProfileCache* pCache = NULL;
+ CFX_ByteStringKey key;
+ CFX_ByteString text;
+ key << pIccParam->ColorSpace << (pIccParam->dwProfileType | ic << 8);
+ uint8_t ID[16];
+ switch (pIccParam->dwProfileType) {
+ case Icc_PARAMTYPE_NONE:
+ return NULL;
+ case Icc_PARAMTYPE_BUFFER:
+ MD5ComputeID(pIccParam->pProfileData, pIccParam->dwProfileSize, ID);
+ break;
+ case Icc_PARAMTYPE_PARAM:
+ FXSYS_memset(ID, 0, 16);
+ switch (pIccParam->ColorSpace) {
+ case IccCS_Gray:
+ text.Format("%lf", pIccParam->Gamma);
+ break;
+ default:;
+ }
+ MD5ComputeID(text.GetBuffer(0), text.GetLength(), ID);
+ break;
+ default:;
+ }
+ key.AppendBlock(ID, 16);
+ CFX_ByteString ProfileKey(key.GetBuffer(), key.GetSize());
+ ASSERT(pTransformKey);
+ pTransformKey->AppendBlock(ProfileKey.GetBuffer(0), ProfileKey.GetLength());
+ if (!m_MapProfile.Lookup(ProfileKey, (void*&)pCache)) {
+ pCache = new CFX_IccProfileCache;
switch (pIccParam->dwProfileType) {
- case Icc_PARAMTYPE_NONE:
- return NULL;
- case Icc_PARAMTYPE_BUFFER:
- MD5ComputeID(pIccParam->pProfileData, pIccParam->dwProfileSize, ID);
+ case Icc_PARAMTYPE_BUFFER:
+ pCache->m_pProfile = cmsOpenProfileFromMem(pIccParam->pProfileData,
+ pIccParam->dwProfileSize);
+ break;
+ case Icc_PARAMTYPE_PARAM:
+ switch (pIccParam->ColorSpace) {
+ case IccCS_Rgb:
+ pCache->m_pProfile = cmsCreate_sRGBProfile();
break;
- case Icc_PARAMTYPE_PARAM:
- FXSYS_memset(ID, 0, 16);
- switch (pIccParam->ColorSpace) {
- case IccCS_Gray:
- text.Format("%lf", pIccParam->Gamma);
- break;
- default:
- ;
- }
- MD5ComputeID(text.GetBuffer(0), text.GetLength(), ID);
+ case IccCS_Gray:
+ pCache->m_pProfile = CreateProfile_Gray(pIccParam->Gamma);
+ break;
+ default:
break;
- default:
- ;
- }
- key.AppendBlock(ID, 16);
- CFX_ByteString ProfileKey(key.GetBuffer(), key.GetSize());
- ASSERT(pTransformKey);
- pTransformKey->AppendBlock(ProfileKey.GetBuffer(0), ProfileKey.GetLength());
- if (!m_MapProfile.Lookup(ProfileKey, (void*&)pCache)) {
- pCache = new CFX_IccProfileCache;
- switch (pIccParam->dwProfileType) {
- case Icc_PARAMTYPE_BUFFER:
- pCache->m_pProfile = cmsOpenProfileFromMem(pIccParam->pProfileData, pIccParam->dwProfileSize);
- break;
- case Icc_PARAMTYPE_PARAM:
- switch (pIccParam->ColorSpace) {
- case IccCS_Rgb:
- pCache->m_pProfile = cmsCreate_sRGBProfile();
- break;
- case IccCS_Gray:
- pCache->m_pProfile = CreateProfile_Gray(pIccParam->Gamma);
- break;
- default:
- break;
- }
- break;
- default:
- break;
}
- m_MapProfile.SetAt(ProfileKey, pCache);
- } else {
- pCache->m_dwRate++;
+ break;
+ default:
+ break;
}
- return pCache->m_pProfile;
+ m_MapProfile.SetAt(ProfileKey, pCache);
+ } else {
+ pCache->m_dwRate++;
+ }
+ return pCache->m_pProfile;
}
-void* CCodec_IccModule::CreateTransform(ICodec_IccModule::IccParam* pInputParam,
- ICodec_IccModule::IccParam* pOutputParam,
- ICodec_IccModule::IccParam* pProofParam,
- FX_DWORD dwIntent, FX_DWORD dwFlag, FX_DWORD dwPrfIntent, FX_DWORD dwPrfFlag)
-{
- CLcmsCmm* pCmm = NULL;
- ASSERT(pInputParam && pOutputParam);
- CFX_ByteStringKey key;
- void* pInputProfile = CreateProfile(pInputParam, Icc_CLASS_INPUT, &key);
- if (pInputProfile == NULL) {
- return NULL;
- }
- void* pOutputProfile = CreateProfile(pOutputParam, Icc_CLASS_OUTPUT, &key);
- if (pOutputProfile == NULL) {
- return NULL;
- }
- FX_DWORD dwInputProfileType = TransferProfileType(pInputProfile, pInputParam->dwFormat);
- FX_DWORD dwOutputProfileType = TransferProfileType(pOutputProfile, pOutputParam->dwFormat);
- if (dwInputProfileType == 0 || dwOutputProfileType == 0) {
- return NULL;
- }
- void* pProofProfile = NULL;
- if (pProofParam) {
- pProofProfile = CreateProfile(pProofParam, Icc_CLASS_PROOF, &key);
- }
- key << dwInputProfileType << dwOutputProfileType << dwIntent << dwFlag << (pProofProfile != NULL) << dwPrfIntent << dwPrfFlag;
- CFX_ByteStringC TransformKey(key.GetBuffer(), key.GetSize());
- CFX_IccTransformCache* pTransformCache;
- if (!m_MapTranform.Lookup(TransformKey, (void*&)pTransformCache)) {
- pCmm = FX_Alloc(CLcmsCmm, 1);
- pCmm->m_nSrcComponents = T_CHANNELS(dwInputProfileType);
- pCmm->m_nDstComponents = T_CHANNELS(dwOutputProfileType);
- pCmm->m_bLab = T_COLORSPACE(pInputParam->dwFormat) == PT_Lab;
- pTransformCache = new CFX_IccTransformCache(pCmm);
- if (pProofProfile) {
- pTransformCache->m_pIccTransform = cmsCreateProofingTransform(pInputProfile, dwInputProfileType, pOutputProfile, dwOutputProfileType,
- pProofProfile, dwIntent, dwPrfIntent, dwPrfFlag);
- } else {
- pTransformCache->m_pIccTransform = cmsCreateTransform(pInputProfile, dwInputProfileType, pOutputProfile, dwOutputProfileType,
- dwIntent, dwFlag);
- }
- pCmm->m_hTransform = pTransformCache->m_pIccTransform;
- m_MapTranform.SetAt(TransformKey, pTransformCache);
+void* CCodec_IccModule::CreateTransform(
+ ICodec_IccModule::IccParam* pInputParam,
+ ICodec_IccModule::IccParam* pOutputParam,
+ ICodec_IccModule::IccParam* pProofParam,
+ FX_DWORD dwIntent,
+ FX_DWORD dwFlag,
+ FX_DWORD dwPrfIntent,
+ FX_DWORD dwPrfFlag) {
+ CLcmsCmm* pCmm = NULL;
+ ASSERT(pInputParam && pOutputParam);
+ CFX_ByteStringKey key;
+ void* pInputProfile = CreateProfile(pInputParam, Icc_CLASS_INPUT, &key);
+ if (pInputProfile == NULL) {
+ return NULL;
+ }
+ void* pOutputProfile = CreateProfile(pOutputParam, Icc_CLASS_OUTPUT, &key);
+ if (pOutputProfile == NULL) {
+ return NULL;
+ }
+ FX_DWORD dwInputProfileType =
+ TransferProfileType(pInputProfile, pInputParam->dwFormat);
+ FX_DWORD dwOutputProfileType =
+ TransferProfileType(pOutputProfile, pOutputParam->dwFormat);
+ if (dwInputProfileType == 0 || dwOutputProfileType == 0) {
+ return NULL;
+ }
+ void* pProofProfile = NULL;
+ if (pProofParam) {
+ pProofProfile = CreateProfile(pProofParam, Icc_CLASS_PROOF, &key);
+ }
+ key << dwInputProfileType << dwOutputProfileType << dwIntent << dwFlag
+ << (pProofProfile != NULL) << dwPrfIntent << dwPrfFlag;
+ CFX_ByteStringC TransformKey(key.GetBuffer(), key.GetSize());
+ CFX_IccTransformCache* pTransformCache;
+ if (!m_MapTranform.Lookup(TransformKey, (void*&)pTransformCache)) {
+ pCmm = FX_Alloc(CLcmsCmm, 1);
+ pCmm->m_nSrcComponents = T_CHANNELS(dwInputProfileType);
+ pCmm->m_nDstComponents = T_CHANNELS(dwOutputProfileType);
+ pCmm->m_bLab = T_COLORSPACE(pInputParam->dwFormat) == PT_Lab;
+ pTransformCache = new CFX_IccTransformCache(pCmm);
+ if (pProofProfile) {
+ pTransformCache->m_pIccTransform = cmsCreateProofingTransform(
+ pInputProfile, dwInputProfileType, pOutputProfile,
+ dwOutputProfileType, pProofProfile, dwIntent, dwPrfIntent, dwPrfFlag);
} else {
- pTransformCache->m_dwRate++;
+ pTransformCache->m_pIccTransform =
+ cmsCreateTransform(pInputProfile, dwInputProfileType, pOutputProfile,
+ dwOutputProfileType, dwIntent, dwFlag);
}
- return pTransformCache->m_pCmm;
+ pCmm->m_hTransform = pTransformCache->m_pIccTransform;
+ m_MapTranform.SetAt(TransformKey, pTransformCache);
+ } else {
+ pTransformCache->m_dwRate++;
+ }
+ return pTransformCache->m_pCmm;
}
-CCodec_IccModule::~CCodec_IccModule()
-{
- FX_POSITION pos = m_MapProfile.GetStartPosition();
- CFX_ByteString key;
- CFX_IccProfileCache* pProfileCache;
- while (pos) {
- m_MapProfile.GetNextAssoc(pos, key, (void*&)pProfileCache);
- delete pProfileCache;
- }
- pos = m_MapTranform.GetStartPosition();
- CFX_IccTransformCache* pTransformCache;
- while (pos) {
- m_MapTranform.GetNextAssoc(pos, key, (void*&)pTransformCache);
- delete pTransformCache;
- }
+CCodec_IccModule::~CCodec_IccModule() {
+ FX_POSITION pos = m_MapProfile.GetStartPosition();
+ CFX_ByteString key;
+ CFX_IccProfileCache* pProfileCache;
+ while (pos) {
+ m_MapProfile.GetNextAssoc(pos, key, (void*&)pProfileCache);
+ delete pProfileCache;
+ }
+ pos = m_MapTranform.GetStartPosition();
+ CFX_IccTransformCache* pTransformCache;
+ while (pos) {
+ m_MapTranform.GetNextAssoc(pos, key, (void*&)pTransformCache);
+ delete pTransformCache;
+ }
}
-void* CCodec_IccModule::CreateTransform_sRGB(const uint8_t* pProfileData, FX_DWORD dwProfileSize, int32_t& nComponents, int32_t intent, FX_DWORD dwSrcFormat)
-{
- return IccLib_CreateTransform_sRGB(pProfileData, dwProfileSize, nComponents, intent, dwSrcFormat);
+void* CCodec_IccModule::CreateTransform_sRGB(const uint8_t* pProfileData,
+ FX_DWORD dwProfileSize,
+ int32_t& nComponents,
+ int32_t intent,
+ FX_DWORD dwSrcFormat) {
+ return IccLib_CreateTransform_sRGB(pProfileData, dwProfileSize, nComponents,
+ intent, dwSrcFormat);
}
-void* CCodec_IccModule::CreateTransform_CMYK(const uint8_t* pSrcProfileData, FX_DWORD dwSrcProfileSize, int32_t& nSrcComponents,
- const uint8_t* pDstProfileData, FX_DWORD dwDstProfileSize, int32_t intent,
- FX_DWORD dwSrcFormat , FX_DWORD dwDstFormat)
-{
- return IccLib_CreateTransform(pSrcProfileData, dwSrcProfileSize, nSrcComponents,
- pDstProfileData, dwDstProfileSize, 4, intent, dwSrcFormat, dwDstFormat);
+void* CCodec_IccModule::CreateTransform_CMYK(const uint8_t* pSrcProfileData,
+ FX_DWORD dwSrcProfileSize,
+ int32_t& nSrcComponents,
+ const uint8_t* pDstProfileData,
+ FX_DWORD dwDstProfileSize,
+ int32_t intent,
+ FX_DWORD dwSrcFormat,
+ FX_DWORD dwDstFormat) {
+ return IccLib_CreateTransform(
+ pSrcProfileData, dwSrcProfileSize, nSrcComponents, pDstProfileData,
+ dwDstProfileSize, 4, intent, dwSrcFormat, dwDstFormat);
}
-void CCodec_IccModule::DestroyTransform(void* pTransform)
-{
- IccLib_DestroyTransform(pTransform);
+void CCodec_IccModule::DestroyTransform(void* pTransform) {
+ IccLib_DestroyTransform(pTransform);
}
-void CCodec_IccModule::Translate(void* pTransform, FX_FLOAT* pSrcValues, FX_FLOAT* pDestValues)
-{
- IccLib_Translate(pTransform, m_nComponents, pSrcValues, pDestValues);
+void CCodec_IccModule::Translate(void* pTransform,
+ FX_FLOAT* pSrcValues,
+ FX_FLOAT* pDestValues) {
+ IccLib_Translate(pTransform, m_nComponents, pSrcValues, pDestValues);
}
-void CCodec_IccModule::TranslateScanline(void* pTransform, uint8_t* pDest, const uint8_t* pSrc, int32_t pixels)
-{
- IccLib_TranslateImage(pTransform, pDest, pSrc, pixels);
+void CCodec_IccModule::TranslateScanline(void* pTransform,
+ uint8_t* pDest,
+ const uint8_t* pSrc,
+ int32_t pixels) {
+ IccLib_TranslateImage(pTransform, pDest, pSrc, pixels);
}
const uint8_t g_CMYKSamples[81 * 81 * 3] = {
- 255, 255, 255, 225, 226, 228, 199, 200, 202, 173, 174, 178, 147, 149, 152, 123, 125, 128, 99, 99, 102, 69, 70, 71, 34, 30, 31,
- 255, 253, 229, 226, 224, 203, 200, 199, 182, 173, 173, 158, 149, 148, 135, 125, 124, 113, 99, 99, 90, 70, 69, 63, 33, 29, 24,
- 255, 251, 204, 228, 223, 182, 201, 198, 163, 174, 172, 142, 150, 147, 122, 125, 123, 101, 99, 98, 80, 70, 68, 54, 32, 28, 16,
- 255, 249, 179, 230, 222, 160, 203, 197, 144, 174, 170, 124, 150, 145, 105, 125, 122, 88, 99, 97, 69, 70, 68, 46, 31, 28, 6,
- 255, 247, 154, 229, 220, 138, 203, 195, 122, 176, 169, 107, 150, 145, 91, 125, 121, 74, 100, 96, 57, 70, 67, 35, 29, 26, 0,
- 255, 246, 128, 231, 217, 114, 205, 194, 101, 176, 167, 88, 150, 144, 75, 125, 120, 60, 100, 96, 44, 70, 66, 24, 28, 26, 0,
- 255, 244, 96, 231, 217, 87, 203, 192, 78, 175, 167, 66, 150, 143, 56, 125, 119, 43, 100, 95, 29, 69, 66, 7, 26, 26, 0,
- 255, 243, 51, 232, 215, 51, 204, 191, 43, 176, 165, 38, 150, 142, 28, 125, 118, 17, 99, 94, 0, 68, 65, 0, 24, 25, 0,
- 255, 241, 0, 231, 215, 0, 203, 190, 0, 176, 164, 0, 150, 141, 0, 126, 117, 0, 99, 93, 0, 68, 65, 0, 24, 25, 0,
- 252, 228, 238, 222, 201, 211, 197, 180, 190, 171, 156, 166, 147, 133, 143, 123, 111, 119, 99, 88, 94, 71, 61, 66, 34, 22, 26,
- 254, 226, 213, 224, 201, 191, 199, 179, 171, 172, 155, 148, 147, 133, 128, 123, 110, 106, 98, 87, 83, 70, 59, 57, 33, 21, 18,
- 254, 224, 191, 224, 199, 172, 200, 177, 153, 173, 154, 133, 147, 132, 115, 123, 109, 94, 98, 86, 74, 70, 59, 49, 32, 21, 9,
- 255, 222, 168, 227, 198, 150, 200, 175, 135, 173, 153, 118, 148, 130, 99, 123, 109, 82, 98, 86, 64, 69, 58, 40, 31, 19, 0,
- 255, 221, 145, 227, 196, 129, 201, 174, 115, 173, 151, 99, 148, 129, 85, 124, 108, 69, 98, 85, 52, 69, 58, 30, 30, 19, 0,
- 255, 219, 121, 227, 195, 109, 201, 174, 97, 174, 150, 83, 148, 129, 70, 124, 107, 55, 98, 84, 40, 69, 58, 19, 28, 18, 0,
- 255, 218, 92, 229, 194, 82, 202, 173, 75, 174, 150, 63, 149, 128, 51, 124, 106, 39, 98, 84, 24, 68, 57, 3, 26, 18, 0,
- 255, 217, 54, 228, 193, 52, 201, 172, 46, 174, 148, 36, 148, 127, 27, 123, 105, 14, 98, 83, 0, 68, 56, 0, 25, 18, 0,
- 255, 216, 0, 229, 192, 2, 202, 171, 4, 173, 148, 0, 148, 126, 0, 124, 105, 0, 98, 83, 0, 68, 56, 0, 24, 17, 0,
- 249, 204, 223, 219, 181, 199, 195, 160, 178, 170, 140, 156, 146, 119, 134, 123, 99, 112, 98, 77, 88, 70, 52, 61, 34, 11, 20,
- 250, 201, 200, 221, 180, 178, 197, 159, 161, 171, 139, 139, 147, 119, 120, 123, 98, 99, 98, 77, 78, 69, 51, 52, 34, 11, 10,
- 252, 201, 180, 223, 179, 162, 197, 159, 144, 170, 138, 125, 146, 117, 107, 122, 97, 89, 98, 76, 69, 69, 50, 44, 32, 11, 2,
- 252, 199, 158, 222, 177, 143, 199, 158, 127, 171, 137, 110, 147, 117, 93, 122, 96, 76, 97, 75, 58, 69, 50, 36, 32, 10, 0,
- 253, 198, 137, 223, 177, 123, 198, 156, 110, 171, 136, 95, 146, 116, 80, 122, 96, 65, 97, 75, 47, 69, 50, 25, 30, 10, 0,
- 254, 197, 115, 225, 175, 104, 198, 156, 92, 172, 135, 79, 147, 115, 66, 123, 95, 52, 98, 74, 37, 69, 49, 15, 29, 10, 0,
- 254, 196, 89, 224, 175, 80, 199, 154, 70, 172, 134, 59, 146, 114, 48, 122, 95, 36, 97, 74, 21, 68, 49, 0, 27, 9, 0,
- 255, 195, 57, 225, 173, 52, 198, 154, 44, 172, 133, 36, 147, 113, 26, 123, 94, 14, 98, 74, 0, 68, 49, 0, 26, 10, 0,
- 254, 194, 15, 225, 172, 12, 198, 153, 7, 172, 132, 3, 146, 113, 0, 123, 93, 0, 98, 73, 0, 68, 49, 0, 26, 9, 0,
- 246, 178, 209, 218, 159, 186, 194, 140, 166, 168, 122, 145, 144, 104, 125, 121, 85, 103, 97, 65, 81, 69, 41, 55, 34, 0, 12,
- 248, 176, 186, 219, 157, 166, 195, 139, 149, 168, 121, 130, 144, 103, 111, 121, 85, 91, 97, 65, 71, 69, 41, 46, 34, 0, 4,
- 249, 175, 168, 220, 156, 150, 196, 139, 135, 169, 121, 116, 144, 103, 100, 122, 84, 83, 98, 65, 63, 70, 41, 39, 33, 0, 0,
- 249, 175, 148, 220, 155, 133, 196, 138, 119, 169, 120, 103, 145, 101, 87, 121, 83, 71, 97, 65, 54, 69, 41, 31, 32, 0, 0,
- 249, 173, 128, 222, 154, 115, 195, 137, 102, 170, 119, 88, 145, 101, 74, 122, 83, 59, 97, 64, 43, 68, 40, 20, 30, 0, 0,
- 250, 172, 108, 221, 154, 98, 195, 136, 86, 170, 118, 73, 145, 100, 61, 122, 82, 48, 97, 63, 32, 69, 40, 11, 28, 0, 0,
- 250, 171, 85, 221, 153, 76, 196, 136, 67, 170, 117, 56, 145, 99, 44, 121, 82, 33, 97, 63, 17, 68, 40, 0, 28, 0, 0,
- 251, 171, 58, 222, 152, 50, 197, 135, 43, 169, 117, 34, 146, 99, 25, 121, 81, 10, 96, 63, 0, 68, 40, 0, 27, 0, 0,
- 250, 170, 26, 222, 151, 19, 196, 134, 13, 169, 116, 4, 145, 99, 0, 122, 81, 0, 97, 63, 0, 67, 40, 0, 26, 0, 0,
- 244, 153, 194, 215, 136, 173, 192, 121, 155, 167, 104, 135, 143, 89, 115, 121, 72, 96, 97, 54, 75, 70, 31, 49, 34, 0, 6,
- 245, 153, 173, 216, 136, 155, 192, 120, 138, 167, 104, 121, 144, 88, 103, 121, 71, 85, 97, 54, 66, 69, 31, 42, 34, 0, 0,
- 246, 152, 157, 217, 135, 140, 193, 120, 126, 167, 103, 109, 143, 88, 92, 121, 72, 76, 97, 54, 58, 69, 31, 35, 33, 0, 0,
- 245, 150, 139, 218, 134, 125, 193, 119, 111, 167, 103, 96, 144, 87, 80, 121, 71, 66, 96, 53, 49, 68, 31, 26, 32, 0, 0,
- 246, 151, 122, 218, 133, 108, 194, 118, 96, 168, 102, 81, 144, 86, 69, 120, 71, 55, 95, 53, 39, 68, 30, 17, 31, 0, 0,
- 248, 150, 103, 218, 133, 91, 193, 118, 81, 168, 102, 69, 143, 86, 56, 120, 70, 43, 96, 53, 28, 68, 31, 6, 29, 0, 0,
- 247, 149, 81, 218, 132, 72, 194, 117, 62, 168, 101, 52, 144, 86, 42, 121, 70, 29, 96, 52, 13, 68, 30, 0, 28, 0, 0,
- 247, 148, 55, 219, 131, 50, 194, 117, 43, 167, 101, 32, 144, 85, 22, 120, 69, 8, 96, 52, 0, 67, 30, 0, 27, 0, 0,
- 247, 147, 29, 218, 131, 24, 194, 116, 20, 168, 100, 11, 144, 85, 0, 120, 69, 0, 96, 52, 0, 67, 30, 0, 26, 0, 0,
- 242, 130, 179, 214, 114, 160, 190, 101, 143, 166, 87, 125, 143, 72, 107, 120, 58, 88, 96, 42, 68, 69, 17, 44, 35, 0, 0,
- 243, 129, 161, 215, 114, 143, 191, 101, 128, 166, 87, 113, 143, 73, 96, 120, 58, 79, 96, 41, 60, 69, 18, 37, 33, 0, 0,
- 243, 129, 146, 216, 114, 130, 192, 101, 117, 166, 87, 101, 143, 72, 86, 121, 58, 69, 96, 42, 52, 69, 18, 29, 31, 0, 0,
- 243, 128, 130, 216, 114, 115, 191, 101, 102, 165, 86, 88, 142, 72, 75, 120, 58, 60, 95, 42, 43, 68, 19, 21, 30, 0, 0,
- 244, 127, 112, 217, 113, 101, 192, 99, 89, 166, 85, 75, 142, 72, 63, 119, 57, 50, 96, 41, 35, 68, 19, 13, 30, 0, 0,
- 244, 127, 96, 216, 112, 86, 191, 99, 75, 166, 86, 64, 143, 72, 52, 120, 57, 40, 95, 41, 24, 67, 20, 1, 29, 0, 0,
- 245, 126, 77, 216, 113, 68, 191, 100, 59, 166, 85, 49, 142, 71, 38, 119, 57, 26, 95, 41, 10, 67, 20, 0, 28, 0, 0,
- 244, 126, 55, 216, 112, 48, 191, 99, 40, 166, 85, 31, 143, 71, 20, 119, 57, 6, 95, 42, 0, 67, 20, 0, 28, 0, 0,
- 245, 126, 33, 217, 112, 26, 192, 99, 22, 166, 84, 11, 142, 70, 0, 119, 57, 0, 95, 41, 0, 66, 20, 0, 27, 0, 0,
- 241, 102, 167, 213, 90, 149, 189, 79, 133, 165, 66, 115, 141, 54, 98, 119, 41, 81, 96, 25, 63, 69, 0, 38, 30, 0, 0,
- 241, 102, 149, 213, 90, 133, 189, 79, 119, 165, 66, 103, 142, 55, 88, 119, 41, 71, 96, 25, 53, 69, 0, 31, 28, 0, 0,
- 241, 102, 135, 214, 90, 121, 190, 79, 108, 165, 66, 92, 141, 55, 78, 119, 42, 63, 96, 26, 46, 69, 0, 24, 28, 0, 0,
- 241, 101, 120, 214, 90, 107, 189, 79, 95, 165, 67, 83, 141, 54, 68, 118, 41, 54, 95, 27, 39, 68, 0, 16, 27, 0, 0,
- 241, 102, 106, 213, 90, 93, 189, 78, 82, 164, 67, 70, 141, 55, 58, 118, 42, 45, 94, 27, 29, 67, 2, 6, 27, 0, 0,
- 242, 101, 90, 214, 89, 79, 190, 79, 69, 166, 67, 59, 141, 55, 47, 118, 41, 35, 95, 27, 19, 67, 3, 0, 26, 0, 0,
- 242, 102, 72, 213, 89, 63, 191, 79, 56, 164, 67, 45, 141, 55, 34, 118, 42, 22, 94, 28, 6, 67, 3, 0, 26, 0, 0,
- 242, 100, 51, 214, 89, 45, 190, 78, 38, 164, 67, 30, 141, 55, 18, 118, 42, 3, 95, 28, 0, 66, 4, 0, 26, 0, 0,
- 243, 100, 33, 214, 90, 27, 190, 78, 22, 165, 67, 13, 141, 55, 0, 118, 43, 0, 94, 29, 0, 66, 5, 0, 26, 0, 0,
- 237, 69, 153, 211, 58, 135, 187, 51, 121, 163, 41, 105, 141, 28, 90, 118, 15, 73, 96, 0, 56, 68, 0, 33, 25, 0, 0,
- 239, 67, 137, 212, 60, 123, 189, 50, 110, 163, 41, 94, 141, 29, 79, 118, 17, 65, 95, 0, 48, 69, 0, 26, 25, 0, 0,
- 240, 69, 124, 211, 60, 111, 188, 50, 98, 163, 42, 85, 141, 31, 72, 118, 18, 57, 94, 0, 41, 68, 0, 19, 25, 0, 0,
- 240, 70, 112, 212, 61, 99, 188, 52, 87, 163, 41, 74, 140, 31, 62, 118, 20, 48, 94, 2, 32, 68, 0, 11, 24, 0, 0,
- 239, 70, 98, 212, 62, 86, 188, 53, 77, 164, 42, 64, 140, 32, 52, 118, 20, 40, 94, 3, 24, 67, 0, 3, 23, 0, 0,
- 239, 71, 85, 212, 61, 74, 187, 53, 65, 163, 44, 54, 140, 34, 43, 118, 22, 30, 95, 3, 14, 67, 0, 0, 23, 0, 0,
- 239, 70, 67, 212, 62, 59, 188, 53, 51, 163, 45, 42, 141, 34, 31, 117, 22, 17, 94, 5, 2, 66, 0, 0, 23, 0, 0,
- 239, 71, 50, 213, 62, 43, 188, 54, 37, 164, 45, 28, 139, 34, 16, 117, 22, 2, 94, 7, 0, 65, 0, 0, 23, 0, 0,
- 240, 71, 34, 212, 63, 29, 189, 54, 24, 163, 46, 15, 139, 36, 2, 117, 25, 0, 94, 8, 0, 66, 0, 0, 23, 0, 0,
- 237, 0, 140, 209, 0, 124, 186, 0, 112, 162, 0, 97, 141, 0, 82, 118, 0, 67, 95, 0, 49, 68, 0, 27, 20, 0, 0,
- 237, 0, 126, 210, 0, 113, 187, 0, 99, 163, 0, 86, 139, 0, 72, 118, 0, 58, 95, 0, 42, 67, 0, 20, 20, 0, 0,
- 237, 1, 114, 209, 1, 102, 187, 0, 90, 163, 0, 78, 139, 0, 64, 118, 0, 50, 95, 0, 35, 67, 0, 13, 20, 0, 0,
- 236, 16, 102, 209, 7, 91, 186, 0, 80, 162, 0, 68, 139, 0, 56, 117, 0, 43, 94, 0, 27, 67, 0, 6, 20, 0, 0,
- 238, 15, 89, 209, 13, 79, 186, 6, 69, 162, 0, 58, 139, 0, 47, 117, 0, 34, 93, 0, 20, 66, 0, 2, 20, 0, 0,
- 237, 20, 78, 210, 12, 68, 187, 4, 59, 163, 0, 49, 139, 0, 38, 116, 0, 26, 94, 0, 11, 66, 0, 0, 20, 0, 0,
- 237, 25, 64, 210, 18, 56, 186, 11, 48, 162, 4, 39, 138, 0, 27, 117, 0, 14, 93, 0, 0, 66, 0, 0, 20, 0, 0,
- 238, 25, 48, 210, 22, 43, 186, 15, 35, 162, 8, 26, 140, 0, 14, 117, 0, 0, 93, 0, 0, 65, 0, 0, 20, 0, 0,
- 238, 28, 35, 210, 21, 30, 187, 15, 24, 162, 8, 16, 139, 1, 2, 117, 0, 0, 93, 0, 0, 65, 0, 0, 22, 0, 0,
- 219, 242, 252, 195, 214, 225, 172, 191, 201, 148, 165, 175, 127, 142, 150, 106, 119, 126, 84, 95, 101, 58, 66, 72, 24, 27, 32,
- 222, 239, 226, 196, 213, 202, 173, 189, 180, 150, 165, 158, 129, 141, 135, 107, 118, 113, 85, 94, 90, 58, 66, 63, 21, 26, 24,
- 223, 237, 203, 198, 211, 182, 175, 188, 163, 152, 164, 141, 129, 140, 121, 107, 117, 101, 85, 93, 80, 58, 64, 54, 21, 26, 18,
- 226, 236, 179, 201, 210, 160, 177, 187, 143, 153, 162, 125, 130, 139, 106, 108, 116, 89, 85, 92, 69, 58, 64, 45, 20, 25, 8,
- 227, 234, 153, 201, 208, 139, 178, 185, 124, 154, 161, 107, 131, 138, 91, 108, 115, 75, 85, 91, 58, 58, 63, 35, 17, 25, 0,
- 229, 233, 130, 203, 207, 116, 178, 184, 104, 154, 160, 90, 131, 137, 76, 109, 114, 62, 85, 90, 46, 58, 63, 25, 16, 24, 0,
- 230, 231, 100, 202, 205, 90, 179, 183, 80, 154, 159, 69, 131, 136, 57, 109, 113, 46, 86, 90, 32, 58, 63, 10, 14, 24, 0,
- 230, 230, 65, 204, 204, 58, 180, 182, 52, 155, 157, 44, 132, 135, 35, 110, 113, 24, 86, 89, 9, 57, 62, 0, 11, 24, 0,
- 232, 230, 19, 204, 204, 19, 180, 181, 17, 155, 157, 10, 131, 134, 2, 109, 112, 0, 85, 89, 0, 57, 62, 0, 10, 23, 0,
- 218, 216, 236, 194, 192, 211, 172, 171, 188, 149, 149, 164, 128, 127, 141, 106, 106, 119, 84, 84, 94, 59, 57, 66, 25, 18, 26,
- 221, 214, 211, 196, 191, 190, 174, 170, 170, 150, 148, 148, 128, 126, 127, 107, 105, 106, 85, 83, 84, 59, 56, 58, 23, 17, 18,
- 222, 213, 190, 197, 189, 170, 175, 169, 153, 151, 147, 133, 129, 126, 113, 108, 105, 94, 85, 82, 74, 59, 56, 49, 22, 17, 11,
- 224, 211, 168, 199, 188, 151, 175, 168, 135, 152, 146, 117, 129, 124, 99, 107, 103, 82, 84, 82, 64, 59, 55, 41, 21, 17, 1,
- 224, 210, 145, 199, 187, 130, 176, 166, 117, 152, 145, 101, 129, 123, 86, 107, 103, 70, 85, 81, 53, 58, 55, 31, 19, 17, 0,
- 227, 208, 123, 200, 186, 110, 177, 165, 98, 153, 143, 84, 130, 122, 70, 108, 102, 57, 85, 80, 41, 58, 54, 20, 18, 16, 0,
- 227, 208, 97, 202, 185, 86, 177, 164, 77, 153, 142, 65, 130, 122, 54, 108, 101, 42, 85, 80, 27, 58, 54, 7, 16, 16, 0,
- 228, 206, 66, 202, 184, 58, 178, 163, 50, 154, 141, 42, 131, 121, 33, 109, 101, 21, 86, 79, 5, 58, 54, 0, 13, 16, 0,
- 228, 206, 29, 202, 183, 25, 178, 163, 20, 154, 141, 15, 131, 121, 5, 108, 100, 0, 85, 79, 0, 58, 53, 0, 13, 16, 0,
- 217, 193, 221, 193, 172, 198, 172, 153, 178, 149, 133, 154, 128, 114, 132, 107, 94, 111, 85, 74, 89, 59, 49, 61, 25, 8, 22,
- 219, 191, 198, 195, 171, 178, 173, 153, 159, 149, 132, 139, 128, 113, 119, 107, 94, 100, 85, 73, 79, 59, 48, 52, 25, 7, 14,
- 221, 191, 180, 196, 170, 160, 174, 152, 144, 150, 132, 125, 129, 113, 107, 107, 93, 89, 85, 73, 69, 59, 48, 45, 23, 7, 4,
- 222, 189, 159, 197, 169, 142, 174, 151, 127, 151, 131, 110, 129, 112, 94, 108, 93, 78, 85, 72, 60, 58, 47, 37, 22, 7, 0,
- 223, 188, 138, 197, 168, 123, 175, 150, 109, 151, 130, 95, 130, 111, 81, 108, 92, 65, 85, 72, 49, 59, 47, 27, 21, 7, 0,
- 224, 187, 118, 198, 167, 105, 176, 149, 93, 152, 129, 79, 130, 110, 68, 108, 91, 54, 85, 71, 38, 59, 47, 17, 18, 7, 0,
- 224, 187, 93, 199, 166, 83, 176, 148, 73, 152, 128, 62, 129, 109, 51, 108, 90, 39, 85, 71, 25, 58, 46, 3, 16, 8, 0,
- 226, 186, 64, 200, 165, 57, 177, 147, 50, 153, 127, 40, 130, 108, 31, 108, 90, 19, 85, 70, 3, 58, 46, 0, 16, 8, 0,
- 227, 185, 35, 200, 165, 30, 176, 146, 25, 152, 127, 18, 130, 108, 7, 108, 89, 0, 85, 70, 0, 57, 46, 0, 14, 8, 0,
- 216, 169, 205, 192, 150, 184, 171, 134, 164, 149, 116, 144, 128, 99, 124, 107, 81, 103, 85, 63, 81, 60, 39, 55, 26, 0, 15,
- 217, 168, 186, 193, 150, 165, 172, 134, 149, 150, 116, 130, 128, 99, 111, 107, 81, 92, 85, 62, 72, 59, 39, 47, 25, 0, 6,
- 219, 168, 168, 194, 149, 150, 173, 133, 135, 150, 116, 117, 128, 98, 99, 107, 80, 82, 86, 62, 63, 59, 38, 39, 24, 0, 0,
- 219, 166, 148, 195, 149, 133, 173, 133, 119, 150, 115, 103, 128, 98, 88, 107, 80, 72, 85, 61, 54, 59, 38, 32, 23, 0, 0,
- 220, 166, 129, 196, 148, 116, 174, 132, 103, 151, 114, 89, 129, 97, 75, 107, 79, 60, 85, 61, 44, 59, 38, 22, 21, 0, 0,
- 222, 164, 110, 197, 147, 99, 175, 131, 87, 151, 113, 75, 129, 96, 63, 107, 79, 49, 85, 61, 33, 58, 38, 12, 19, 0, 0,
- 222, 164, 88, 197, 146, 79, 174, 130, 69, 151, 113, 58, 129, 95, 47, 107, 78, 35, 85, 60, 20, 58, 38, 0, 18, 0, 0,
- 223, 164, 63, 198, 145, 55, 175, 129, 48, 151, 112, 39, 129, 95, 29, 107, 78, 16, 85, 60, 1, 58, 38, 0, 17, 0, 0,
- 223, 163, 36, 198, 145, 32, 174, 129, 26, 151, 111, 17, 129, 95, 7, 107, 78, 0, 84, 60, 0, 57, 37, 0, 15, 0, 0,
- 215, 147, 192, 191, 130, 172, 170, 116, 153, 148, 100, 133, 127, 85, 115, 107, 69, 96, 85, 51, 75, 60, 28, 50, 25, 0, 8,
- 217, 146, 173, 192, 130, 154, 171, 115, 138, 149, 100, 121, 128, 84, 103, 107, 68, 85, 85, 51, 66, 60, 28, 42, 25, 0, 0,
- 217, 145, 157, 193, 129, 140, 173, 115, 125, 149, 100, 109, 128, 84, 92, 107, 68, 76, 85, 51, 58, 59, 28, 35, 23, 0, 0,
- 218, 145, 140, 193, 129, 125, 172, 114, 110, 149, 99, 96, 128, 83, 81, 107, 67, 65, 84, 51, 49, 59, 29, 27, 22, 0, 0,
- 219, 144, 121, 194, 128, 108, 172, 113, 96, 149, 98, 83, 128, 83, 69, 107, 68, 55, 85, 50, 40, 59, 28, 18, 20, 0, 0,
- 220, 143, 104, 195, 128, 93, 173, 114, 82, 150, 98, 69, 127, 82, 58, 107, 67, 45, 85, 50, 30, 59, 28, 7, 19, 0, 0,
- 220, 143, 84, 195, 127, 74, 173, 113, 65, 149, 97, 55, 128, 82, 44, 106, 67, 32, 84, 50, 16, 58, 28, 0, 18, 0, 0,
- 221, 142, 62, 196, 126, 53, 173, 112, 46, 150, 97, 37, 128, 82, 26, 107, 66, 14, 84, 50, 0, 58, 28, 0, 16, 0, 0,
- 222, 142, 38, 196, 126, 34, 174, 112, 27, 150, 96, 17, 128, 82, 6, 106, 66, 0, 84, 50, 0, 57, 29, 0, 16, 0, 0,
- 214, 123, 179, 191, 110, 159, 169, 98, 143, 147, 84, 124, 126, 70, 106, 107, 55, 88, 85, 39, 69, 60, 15, 45, 23, 0, 2,
- 216, 123, 161, 192, 110, 144, 170, 98, 129, 148, 84, 112, 127, 70, 95, 107, 55, 79, 85, 39, 61, 60, 15, 37, 20, 0, 0,
- 217, 122, 145, 192, 110, 130, 170, 97, 116, 149, 84, 101, 127, 70, 85, 106, 55, 70, 85, 39, 53, 59, 16, 30, 19, 0, 0,
- 217, 123, 131, 192, 109, 116, 171, 96, 103, 149, 83, 89, 127, 70, 75, 106, 55, 60, 85, 40, 45, 59, 16, 23, 17, 0, 0,
- 217, 122, 114, 193, 109, 101, 172, 96, 91, 149, 82, 77, 128, 69, 64, 106, 55, 50, 84, 39, 35, 59, 17, 14, 17, 0, 0,
- 218, 122, 98, 194, 108, 87, 171, 96, 77, 149, 82, 65, 127, 69, 52, 106, 55, 40, 84, 40, 25, 59, 18, 3, 15, 0, 0,
- 219, 122, 80, 193, 108, 70, 172, 95, 61, 149, 82, 51, 127, 69, 40, 106, 55, 28, 84, 39, 12, 58, 17, 0, 13, 0, 0,
- 219, 121, 59, 194, 108, 52, 172, 96, 44, 149, 82, 35, 127, 68, 24, 106, 55, 11, 84, 40, 0, 57, 18, 0, 13, 0, 0,
- 219, 121, 40, 193, 108, 33, 172, 95, 26, 149, 81, 19, 128, 68, 6, 106, 54, 0, 84, 39, 0, 57, 18, 0, 13, 0, 0,
- 213, 99, 165, 189, 87, 148, 169, 76, 132, 147, 64, 115, 126, 52, 98, 106, 39, 81, 85, 23, 63, 60, 0, 39, 16, 0, 0,
- 214, 98, 149, 191, 87, 133, 170, 76, 119, 148, 65, 103, 127, 53, 88, 106, 39, 72, 85, 24, 55, 60, 0, 32, 15, 0, 0,
- 215, 99, 136, 191, 87, 121, 170, 77, 108, 148, 65, 93, 126, 53, 79, 106, 40, 64, 85, 24, 47, 59, 0, 25, 14, 0, 0,
- 215, 99, 121, 192, 87, 108, 170, 77, 96, 148, 65, 82, 126, 53, 69, 106, 40, 55, 85, 25, 39, 59, 0, 18, 13, 0, 0,
- 216, 99, 106, 191, 87, 95, 170, 76, 83, 148, 65, 71, 126, 53, 58, 106, 41, 45, 85, 26, 30, 59, 0, 8, 11, 0, 0,
- 216, 98, 91, 192, 88, 82, 170, 77, 71, 148, 65, 60, 127, 53, 48, 105, 41, 36, 83, 26, 21, 58, 1, 2, 11, 0, 0,
- 217, 99, 75, 192, 87, 66, 170, 76, 57, 148, 65, 47, 126, 53, 36, 105, 41, 24, 83, 26, 8, 57, 2, 0, 9, 0, 0,
- 217, 98, 57, 192, 87, 49, 171, 77, 41, 147, 65, 32, 126, 53, 21, 105, 41, 8, 84, 27, 0, 57, 3, 0, 9, 0, 0,
- 217, 98, 40, 193, 87, 34, 171, 76, 27, 148, 65, 19, 126, 53, 6, 105, 41, 0, 83, 27, 0, 57, 4, 0, 9, 0, 0,
- 211, 67, 152, 189, 58, 136, 168, 50, 122, 147, 39, 105, 127, 28, 89, 106, 14, 74, 85, 0, 56, 59, 0, 33, 9, 0, 0,
- 213, 68, 138, 190, 59, 123, 169, 51, 109, 148, 40, 95, 126, 30, 80, 106, 16, 65, 85, 0, 48, 59, 0, 27, 9, 0, 0,
- 214, 69, 125, 190, 59, 111, 168, 51, 99, 148, 41, 86, 126, 31, 72, 106, 18, 58, 85, 0, 41, 59, 0, 20, 7, 0, 0,
- 215, 70, 112, 190, 61, 100, 169, 52, 88, 147, 42, 76, 126, 32, 63, 106, 19, 49, 84, 1, 34, 58, 0, 13, 7, 0, 0,
- 214, 70, 99, 190, 62, 88, 169, 53, 77, 147, 43, 65, 125, 32, 53, 106, 20, 40, 84, 3, 26, 58, 0, 4, 7, 0, 0,
- 214, 71, 86, 190, 61, 75, 169, 53, 65, 146, 43, 54, 126, 33, 44, 105, 21, 31, 83, 4, 17, 57, 0, 0, 7, 0, 0,
- 215, 71, 71, 191, 62, 62, 169, 53, 53, 147, 44, 44, 126, 34, 33, 105, 22, 20, 83, 5, 4, 57, 0, 0, 7, 0, 0,
- 215, 71, 54, 191, 62, 47, 169, 54, 39, 147, 44, 30, 126, 35, 20, 105, 23, 6, 83, 6, 0, 56, 0, 0, 5, 0, 0,
- 215, 71, 41, 191, 63, 34, 170, 54, 27, 147, 45, 17, 126, 35, 6, 105, 23, 0, 83, 8, 0, 56, 0, 0, 5, 0, 0,
- 210, 13, 140, 189, 1, 125, 167, 0, 110, 146, 0, 96, 126, 0, 81, 106, 0, 67, 85, 0, 51, 59, 0, 28, 4, 0, 0,
- 212, 18, 126, 190, 7, 113, 168, 0, 100, 146, 0, 86, 126, 0, 73, 106, 0, 59, 84, 0, 43, 59, 0, 22, 4, 0, 0,
- 212, 21, 115, 190, 13, 103, 168, 3, 91, 146, 0, 78, 125, 0, 65, 105, 0, 52, 84, 0, 36, 58, 0, 16, 4, 0, 0,
- 213, 24, 103, 189, 19, 91, 168, 9, 82, 146, 0, 69, 125, 0, 57, 105, 0, 44, 84, 0, 29, 58, 0, 7, 4, 0, 0,
- 213, 27, 92, 188, 21, 81, 168, 14, 71, 146, 1, 59, 125, 0, 48, 105, 0, 36, 84, 0, 21, 58, 0, 4, 4, 0, 0,
- 213, 30, 80, 189, 22, 69, 168, 17, 61, 146, 5, 50, 125, 0, 39, 104, 0, 27, 83, 0, 12, 57, 0, 0, 4, 0, 0,
- 214, 30, 67, 189, 25, 57, 168, 20, 50, 146, 9, 40, 125, 0, 29, 104, 0, 17, 83, 0, 2, 56, 0, 0, 4, 0, 0,
- 214, 32, 53, 189, 27, 44, 169, 20, 38, 146, 13, 28, 124, 2, 17, 104, 0, 4, 83, 0, 0, 56, 0, 0, 4, 0, 0,
- 214, 33, 41, 190, 27, 33, 168, 23, 27, 146, 13, 18, 125, 3, 5, 105, 0, 0, 83, 0, 0, 56, 0, 0, 4, 0, 0,
- 185, 229, 250, 164, 204, 223, 146, 182, 199, 127, 158, 174, 108, 136, 149, 89, 113, 125, 70, 90, 100, 46, 62, 71, 10, 25, 33,
- 189, 227, 225, 168, 202, 201, 148, 181, 179, 129, 157, 156, 109, 135, 134, 90, 113, 113, 70, 89, 90, 46, 62, 62, 8, 24, 25,
- 192, 226, 202, 170, 202, 182, 151, 179, 162, 130, 156, 141, 110, 133, 121, 91, 112, 101, 71, 89, 80, 46, 61, 54, 7, 24, 19,
- 194, 224, 179, 173, 200, 160, 153, 178, 144, 132, 155, 125, 112, 133, 107, 92, 111, 89, 71, 88, 69, 46, 61, 45, 6, 23, 10,
- 196, 223, 155, 174, 198, 139, 154, 176, 124, 132, 153, 107, 113, 131, 91, 92, 110, 75, 72, 87, 58, 47, 60, 37, 4, 23, 0,
- 198, 221, 131, 175, 197, 117, 155, 175, 105, 133, 152, 91, 113, 130, 76, 92, 109, 63, 72, 86, 47, 46, 60, 26, 3, 23, 0,
- 200, 220, 104, 176, 196, 94, 156, 175, 84, 134, 151, 72, 113, 129, 59, 93, 108, 47, 72, 85, 33, 46, 59, 13, 0, 23, 0,
- 201, 219, 73, 179, 195, 65, 157, 173, 57, 135, 150, 48, 114, 129, 39, 94, 108, 28, 72, 85, 15, 47, 59, 0, 0, 22, 0,
- 203, 219, 42, 178, 195, 37, 157, 173, 32, 135, 150, 26, 114, 128, 16, 94, 107, 6, 73, 85, 0, 46, 58, 0, 0, 22, 0,
- 186, 205, 233, 165, 183, 209, 148, 163, 187, 128, 142, 163, 109, 121, 140, 91, 101, 118, 71, 80, 94, 48, 54, 66, 12, 15, 27,
- 189, 204, 211, 169, 182, 189, 151, 163, 169, 131, 141, 147, 111, 121, 126, 92, 101, 105, 72, 79, 84, 48, 54, 58, 11, 15, 19,
- 192, 202, 190, 171, 181, 170, 152, 161, 152, 131, 141, 133, 112, 120, 113, 93, 100, 94, 72, 79, 74, 48, 53, 50, 10, 15, 11,
- 195, 201, 169, 172, 179, 151, 153, 160, 135, 132, 139, 117, 113, 119, 100, 93, 99, 82, 72, 78, 64, 48, 53, 41, 9, 14, 3,
- 195, 200, 146, 174, 179, 131, 154, 159, 117, 133, 138, 101, 113, 118, 86, 93, 98, 70, 73, 77, 53, 48, 52, 32, 8, 15, 0,
- 198, 199, 125, 175, 177, 111, 155, 158, 100, 133, 137, 85, 113, 117, 71, 93, 97, 57, 72, 77, 42, 47, 52, 22, 5, 14, 0,
- 199, 198, 101, 176, 177, 89, 155, 157, 79, 134, 136, 68, 113, 116, 56, 94, 97, 44, 73, 76, 30, 47, 52, 10, 2, 15, 0,
- 200, 197, 72, 178, 176, 63, 157, 156, 56, 135, 136, 46, 114, 116, 37, 94, 96, 26, 73, 76, 11, 47, 51, 0, 0, 14, 0,
- 201, 197, 45, 177, 175, 38, 156, 155, 31, 135, 135, 25, 114, 115, 17, 94, 96, 5, 73, 75, 0, 46, 51, 0, 0, 14, 0,
- 187, 183, 218, 167, 165, 197, 149, 147, 176, 129, 127, 153, 111, 109, 132, 92, 90, 111, 73, 70, 89, 49, 46, 62, 15, 4, 22,
- 190, 183, 197, 170, 164, 177, 151, 146, 159, 130, 127, 139, 112, 109, 119, 93, 90, 99, 72, 70, 78, 49, 45, 53, 14, 4, 15,
- 192, 182, 179, 171, 163, 161, 153, 145, 144, 132, 126, 125, 113, 108, 107, 93, 89, 88, 73, 70, 69, 49, 45, 45, 13, 5, 6,
- 195, 181, 159, 172, 162, 142, 152, 145, 127, 132, 125, 111, 113, 107, 94, 93, 88, 77, 73, 69, 59, 48, 45, 37, 11, 5, 0,
- 195, 180, 139, 173, 161, 124, 153, 143, 110, 133, 125, 96, 113, 106, 81, 94, 88, 66, 73, 68, 49, 49, 44, 28, 9, 6, 0,
- 196, 179, 118, 174, 160, 106, 154, 142, 94, 133, 124, 81, 113, 105, 68, 94, 87, 54, 73, 68, 39, 48, 44, 18, 5, 5, 0,
- 197, 178, 96, 176, 159, 86, 155, 141, 75, 134, 123, 64, 114, 105, 53, 94, 87, 40, 73, 68, 26, 48, 44, 5, 2, 6, 0,
- 199, 178, 70, 176, 158, 62, 156, 141, 54, 134, 122, 44, 114, 104, 35, 94, 86, 23, 73, 67, 8, 47, 44, 0, 2, 6, 0,
- 199, 177, 45, 178, 158, 40, 156, 140, 32, 135, 122, 26, 114, 104, 16, 94, 86, 4, 73, 67, 0, 47, 44, 0, 0, 7, 0,
- 188, 161, 204, 168, 144, 183, 149, 129, 164, 130, 112, 144, 112, 95, 123, 93, 78, 103, 74, 60, 81, 50, 36, 56, 16, 0, 16,
- 190, 160, 185, 170, 144, 165, 151, 128, 148, 132, 111, 130, 112, 95, 110, 93, 78, 92, 74, 59, 72, 50, 36, 48, 16, 0, 8,
- 192, 160, 167, 171, 143, 150, 153, 128, 134, 132, 111, 117, 112, 94, 100, 94, 77, 82, 74, 59, 63, 50, 36, 40, 14, 0, 0,
- 193, 159, 149, 172, 143, 134, 153, 127, 119, 133, 110, 103, 113, 94, 87, 93, 77, 72, 73, 59, 54, 50, 36, 32, 12, 0, 0,
- 195, 159, 131, 173, 142, 117, 153, 127, 104, 132, 110, 90, 113, 93, 76, 93, 76, 61, 74, 59, 45, 49, 36, 23, 9, 0, 0,
- 196, 158, 113, 174, 141, 101, 155, 126, 89, 133, 109, 76, 113, 93, 64, 94, 76, 51, 74, 58, 35, 49, 36, 14, 6, 0, 0,
- 197, 157, 92, 174, 141, 80, 154, 125, 71, 134, 108, 60, 114, 92, 50, 94, 75, 37, 73, 58, 22, 48, 36, 1, 5, 0, 0,
- 197, 157, 68, 175, 140, 59, 155, 124, 51, 134, 108, 41, 113, 91, 32, 94, 75, 21, 73, 57, 5, 48, 35, 0, 5, 0, 0,
- 198, 156, 46, 176, 140, 40, 155, 124, 32, 134, 107, 24, 114, 91, 14, 94, 75, 2, 73, 57, 0, 48, 36, 0, 3, 0, 0,
- 189, 140, 191, 168, 126, 172, 150, 112, 154, 131, 97, 134, 112, 82, 115, 94, 66, 96, 74, 49, 75, 51, 25, 50, 12, 0, 10,
- 191, 139, 173, 170, 125, 154, 152, 111, 138, 132, 96, 121, 113, 81, 103, 94, 66, 85, 74, 48, 66, 50, 26, 42, 12, 0, 1,
- 192, 139, 157, 171, 125, 140, 152, 111, 125, 132, 96, 109, 113, 81, 92, 94, 65, 76, 74, 48, 58, 50, 26, 35, 9, 0, 0,
- 193, 139, 140, 172, 124, 125, 153, 110, 112, 133, 95, 96, 113, 80, 82, 94, 65, 66, 74, 49, 50, 50, 26, 28, 7, 0, 0,
- 194, 138, 123, 172, 123, 109, 153, 110, 97, 133, 95, 84, 113, 80, 70, 94, 65, 56, 74, 48, 40, 50, 26, 20, 6, 0, 0,
- 194, 138, 105, 173, 123, 94, 153, 109, 83, 133, 94, 70, 112, 79, 59, 94, 64, 46, 74, 48, 31, 50, 26, 9, 4, 0, 0,
- 196, 138, 87, 174, 122, 77, 153, 109, 67, 133, 93, 56, 113, 79, 46, 94, 64, 34, 73, 48, 18, 49, 27, 0, 4, 0, 0,
- 196, 137, 65, 174, 122, 57, 154, 108, 49, 133, 93, 39, 113, 79, 29, 94, 64, 18, 74, 48, 3, 49, 27, 0, 2, 0, 0,
- 197, 137, 47, 175, 122, 40, 155, 108, 32, 133, 93, 23, 114, 79, 14, 94, 64, 1, 73, 48, 0, 48, 27, 0, 2, 0, 0,
- 189, 119, 177, 168, 106, 159, 150, 94, 142, 131, 81, 124, 113, 67, 107, 94, 53, 89, 74, 37, 69, 51, 11, 45, 6, 0, 3,
- 191, 119, 161, 170, 106, 144, 152, 94, 129, 132, 81, 112, 113, 67, 96, 94, 53, 79, 74, 37, 61, 51, 13, 38, 6, 0, 0,
- 192, 119, 146, 170, 106, 131, 152, 94, 117, 132, 80, 101, 112, 67, 85, 94, 53, 70, 74, 37, 53, 50, 14, 31, 4, 0, 0,
- 192, 119, 131, 171, 106, 117, 153, 94, 105, 132, 80, 89, 113, 67, 75, 94, 54, 61, 74, 38, 45, 51, 14, 23, 3, 0, 0,
- 193, 118, 114, 171, 106, 102, 153, 93, 90, 132, 80, 78, 113, 67, 65, 94, 53, 52, 74, 37, 36, 50, 15, 16, 1, 0, 0,
- 194, 118, 99, 172, 105, 89, 153, 93, 78, 132, 80, 66, 113, 67, 54, 94, 53, 42, 74, 38, 27, 50, 16, 5, 1, 0, 0,
- 194, 118, 82, 173, 105, 72, 153, 93, 63, 132, 79, 53, 113, 67, 42, 94, 53, 30, 74, 38, 15, 49, 16, 0, 0, 0, 0,
- 195, 117, 63, 173, 105, 55, 154, 93, 47, 133, 79, 37, 113, 66, 27, 94, 53, 15, 73, 38, 0, 48, 16, 0, 0, 0, 0,
- 195, 117, 46, 173, 104, 39, 154, 92, 32, 133, 79, 22, 113, 66, 13, 94, 53, 0, 73, 38, 0, 48, 17, 0, 0, 0, 0,
- 189, 96, 166, 168, 85, 147, 150, 74, 132, 131, 62, 115, 113, 51, 99, 94, 38, 82, 74, 21, 63, 51, 0, 40, 1, 0, 0,
- 190, 96, 150, 170, 85, 133, 152, 75, 119, 132, 63, 104, 113, 51, 88, 94, 38, 72, 75, 22, 55, 51, 0, 33, 1, 0, 0,
- 192, 96, 137, 170, 85, 121, 152, 74, 108, 132, 64, 94, 113, 52, 79, 94, 39, 64, 74, 23, 48, 50, 0, 26, 0, 0, 0,
- 192, 96, 122, 171, 86, 109, 152, 75, 96, 132, 63, 83, 113, 52, 69, 94, 39, 56, 74, 24, 41, 50, 0, 19, 0, 0, 0,
- 193, 96, 107, 171, 85, 96, 152, 75, 84, 132, 64, 72, 113, 52, 60, 94, 39, 47, 74, 24, 32, 50, 1, 10, 0, 0, 0,
- 193, 96, 93, 172, 85, 82, 152, 75, 72, 133, 63, 61, 113, 51, 49, 94, 39, 37, 73, 25, 23, 49, 2, 2, 0, 0, 0,
- 194, 96, 78, 172, 85, 68, 152, 75, 59, 132, 63, 49, 113, 52, 39, 94, 40, 26, 73, 25, 11, 48, 3, 0, 0, 0, 0,
- 194, 96, 60, 173, 85, 52, 153, 75, 44, 132, 64, 35, 112, 52, 25, 94, 40, 12, 73, 26, 0, 48, 4, 0, 0, 0, 0,
- 195, 96, 46, 173, 85, 38, 154, 74, 31, 133, 63, 22, 113, 52, 11, 93, 40, 0, 73, 26, 0, 47, 5, 0, 0, 0, 0,
- 188, 67, 153, 168, 58, 137, 151, 49, 122, 131, 39, 106, 113, 28, 90, 94, 13, 75, 75, 0, 57, 51, 0, 35, 0, 0, 0,
- 190, 68, 138, 170, 59, 123, 152, 50, 110, 132, 41, 96, 113, 29, 80, 94, 16, 66, 75, 0, 49, 50, 0, 27, 0, 0, 0,
- 191, 69, 126, 170, 59, 112, 151, 52, 100, 132, 42, 86, 113, 30, 73, 95, 17, 58, 75, 0, 42, 50, 0, 21, 0, 0, 0,
- 192, 70, 113, 170, 61, 100, 151, 52, 89, 132, 42, 77, 113, 31, 64, 94, 19, 50, 74, 1, 35, 50, 0, 14, 0, 0, 0,
- 192, 70, 100, 170, 62, 89, 151, 53, 77, 131, 43, 66, 112, 32, 54, 94, 20, 42, 74, 2, 27, 49, 0, 5, 0, 0, 0,
- 192, 71, 87, 171, 61, 77, 152, 53, 67, 131, 44, 57, 112, 33, 45, 94, 21, 33, 74, 4, 19, 49, 0, 1, 0, 0, 0,
- 193, 71, 74, 171, 62, 64, 152, 53, 55, 132, 44, 45, 113, 34, 34, 94, 22, 23, 73, 5, 7, 48, 0, 0, 0, 0, 0,
- 193, 70, 58, 172, 62, 50, 152, 54, 42, 132, 44, 32, 112, 35, 22, 93, 23, 10, 73, 6, 0, 47, 0, 0, 0, 0, 0,
- 193, 70, 45, 172, 62, 38, 153, 54, 31, 132, 44, 21, 112, 35, 9, 94, 23, 0, 73, 7, 0, 47, 0, 0, 0, 0, 0,
- 189, 26, 141, 169, 15, 126, 150, 2, 112, 131, 0, 97, 113, 0, 82, 94, 0, 67, 75, 0, 51, 50, 0, 29, 0, 0, 0,
- 190, 28, 128, 170, 18, 114, 151, 8, 101, 132, 0, 88, 113, 0, 74, 94, 0, 60, 75, 0, 44, 50, 0, 23, 0, 0, 0,
- 191, 30, 117, 170, 23, 104, 152, 11, 92, 132, 1, 79, 113, 0, 67, 95, 0, 53, 75, 0, 37, 50, 0, 17, 0, 0, 0,
- 191, 33, 105, 170, 26, 93, 151, 18, 83, 132, 6, 70, 112, 0, 58, 94, 0, 45, 75, 0, 30, 49, 0, 8, 0, 0, 0,
- 191, 34, 93, 170, 27, 82, 151, 20, 72, 131, 8, 61, 112, 0, 49, 94, 0, 38, 74, 0, 23, 49, 0, 4, 0, 0, 0,
- 191, 36, 82, 170, 29, 71, 151, 22, 63, 131, 11, 52, 112, 0, 41, 93, 0, 29, 74, 0, 14, 48, 0, 1, 0, 0, 0,
- 191, 38, 69, 170, 31, 60, 151, 24, 51, 131, 14, 41, 112, 1, 31, 93, 0, 19, 73, 0, 3, 48, 0, 0, 0, 0, 0,
- 192, 37, 56, 171, 31, 47, 152, 25, 40, 131, 17, 30, 112, 4, 19, 93, 0, 7, 73, 0, 0, 47, 0, 0, 0, 0, 0,
- 192, 38, 45, 171, 33, 36, 152, 26, 30, 131, 18, 21, 111, 7, 9, 93, 0, 0, 73, 0, 0, 47, 0, 0, 0, 0, 0,
- 149, 218, 248, 133, 194, 222, 119, 173, 198, 102, 151, 173, 86, 130, 148, 70, 108, 125, 53, 85, 100, 32, 59, 71, 0, 22, 33,
- 154, 216, 223, 137, 193, 200, 122, 172, 178, 106, 150, 156, 89, 128, 133, 73, 107, 112, 54, 85, 89, 31, 59, 63, 0, 22, 26,
- 159, 215, 202, 141, 192, 181, 126, 171, 161, 108, 149, 141, 90, 128, 121, 74, 107, 100, 55, 85, 80, 32, 58, 55, 0, 22, 19,
- 161, 213, 179, 144, 190, 160, 126, 170, 143, 109, 148, 125, 92, 127, 107, 74, 106, 89, 56, 84, 69, 32, 58, 46, 0, 21, 11,
- 163, 211, 156, 144, 189, 139, 129, 168, 125, 110, 147, 108, 93, 126, 92, 75, 105, 76, 57, 83, 58, 33, 58, 37, 0, 21, 1,
- 167, 211, 133, 147, 188, 120, 130, 167, 105, 110, 145, 92, 93, 125, 78, 76, 104, 64, 58, 83, 48, 33, 57, 27, 0, 21, 0,
- 169, 210, 108, 149, 187, 96, 131, 166, 86, 112, 144, 74, 94, 124, 62, 77, 103, 49, 58, 82, 35, 33, 57, 15, 0, 21, 0,
- 170, 209, 80, 151, 186, 71, 133, 165, 62, 114, 143, 52, 95, 123, 42, 77, 103, 32, 58, 81, 18, 33, 56, 0, 0, 21, 0,
- 173, 208, 55, 152, 186, 49, 134, 165, 41, 114, 143, 34, 95, 122, 25, 77, 102, 14, 58, 81, 0, 33, 56, 0, 0, 21, 0,
- 154, 195, 232, 137, 174, 207, 122, 156, 185, 105, 136, 163, 89, 116, 140, 73, 97, 117, 56, 76, 94, 35, 51, 66, 0, 13, 28,
- 158, 194, 209, 141, 174, 187, 125, 155, 167, 109, 135, 146, 91, 116, 125, 75, 96, 105, 57, 75, 83, 35, 50, 57, 0, 12, 21,
- 161, 193, 189, 144, 173, 169, 128, 154, 151, 110, 134, 132, 93, 115, 113, 77, 95, 94, 58, 75, 74, 35, 50, 50, 0, 12, 13,
- 164, 192, 168, 145, 171, 151, 129, 153, 134, 111, 133, 117, 94, 114, 100, 76, 95, 82, 58, 75, 64, 36, 50, 42, 0, 12, 5,
- 165, 191, 147, 147, 170, 131, 130, 152, 117, 113, 132, 102, 95, 113, 86, 77, 94, 71, 58, 74, 54, 35, 50, 33, 0, 13, 0,
- 167, 189, 126, 148, 169, 113, 132, 151, 100, 113, 131, 86, 96, 112, 73, 77, 93, 59, 59, 73, 43, 35, 49, 23, 0, 12, 0,
- 170, 189, 104, 150, 168, 91, 133, 150, 81, 114, 130, 69, 96, 111, 57, 78, 92, 46, 59, 73, 31, 35, 49, 11, 0, 13, 0,
- 171, 188, 78, 152, 168, 68, 134, 149, 60, 115, 130, 50, 96, 111, 41, 78, 92, 29, 60, 73, 15, 35, 49, 0, 0, 12, 0,
- 173, 187, 55, 153, 167, 47, 134, 149, 39, 115, 129, 33, 97, 110, 24, 79, 92, 13, 60, 72, 0, 35, 48, 0, 0, 12, 0,
- 157, 175, 217, 139, 157, 196, 125, 141, 175, 109, 122, 153, 92, 104, 132, 76, 86, 110, 59, 67, 88, 37, 43, 61, 1, 1, 23,
- 161, 174, 196, 144, 156, 176, 127, 140, 158, 110, 121, 137, 94, 104, 118, 77, 85, 98, 59, 67, 78, 37, 43, 53, 0, 2, 16,
- 163, 174, 178, 146, 156, 160, 130, 139, 143, 112, 121, 124, 95, 103, 106, 78, 85, 88, 60, 66, 69, 37, 42, 46, 0, 2, 7,
- 166, 173, 159, 147, 154, 142, 130, 138, 127, 113, 120, 111, 96, 103, 95, 78, 84, 77, 60, 66, 59, 37, 43, 37, 0, 2, 0,
- 166, 172, 139, 148, 154, 125, 131, 137, 112, 113, 120, 96, 96, 102, 81, 78, 84, 66, 60, 65, 50, 37, 42, 29, 0, 3, 0,
- 167, 171, 120, 149, 153, 107, 133, 137, 95, 114, 118, 81, 97, 101, 69, 79, 84, 56, 60, 65, 40, 37, 42, 19, 0, 3, 0,
- 170, 170, 99, 151, 152, 87, 134, 136, 77, 115, 118, 66, 97, 101, 55, 79, 83, 42, 61, 65, 28, 37, 42, 7, 0, 3, 0,
- 172, 170, 75, 152, 151, 65, 134, 135, 57, 115, 117, 48, 97, 100, 38, 79, 83, 27, 61, 64, 12, 36, 42, 0, 0, 3, 0,
- 172, 169, 55, 154, 151, 46, 135, 134, 40, 116, 116, 32, 97, 99, 21, 80, 82, 10, 61, 64, 0, 36, 41, 0, 0, 3, 0,
- 160, 154, 203, 143, 139, 182, 127, 124, 164, 111, 107, 143, 95, 91, 122, 78, 75, 103, 60, 57, 81, 39, 33, 56, 1, 0, 18,
- 163, 154, 184, 146, 138, 165, 130, 123, 148, 113, 107, 129, 96, 90, 110, 79, 74, 92, 61, 56, 72, 39, 34, 48, 2, 0, 9,
- 165, 154, 167, 147, 137, 149, 131, 122, 134, 114, 106, 117, 96, 90, 100, 79, 74, 82, 61, 56, 64, 39, 33, 40, 2, 0, 1,
- 166, 153, 150, 149, 137, 133, 132, 122, 119, 114, 106, 104, 97, 90, 88, 79, 74, 72, 61, 56, 55, 39, 34, 33, 0, 0, 0,
- 168, 152, 132, 149, 136, 117, 132, 121, 104, 114, 105, 90, 97, 89, 76, 79, 73, 62, 61, 56, 46, 38, 34, 25, 0, 0, 0,
- 169, 151, 114, 150, 135, 101, 133, 121, 90, 114, 104, 77, 97, 89, 65, 80, 73, 51, 61, 56, 36, 38, 34, 16, 0, 0, 0,
- 170, 150, 94, 151, 135, 83, 134, 120, 73, 115, 104, 62, 98, 88, 51, 80, 72, 39, 61, 56, 24, 38, 34, 3, 0, 0, 0,
- 172, 150, 72, 153, 134, 63, 135, 119, 55, 115, 103, 45, 98, 88, 36, 80, 72, 24, 61, 55, 9, 38, 34, 0, 0, 0, 0,
- 172, 150, 54, 153, 134, 47, 135, 119, 38, 116, 103, 30, 98, 87, 21, 80, 72, 8, 62, 55, 0, 37, 34, 0, 0, 0, 0,
- 162, 134, 190, 145, 120, 171, 129, 108, 153, 113, 93, 134, 97, 78, 115, 80, 63, 96, 62, 46, 75, 41, 23, 51, 0, 0, 11,
- 165, 134, 173, 147, 120, 154, 131, 107, 138, 114, 92, 120, 97, 78, 103, 80, 63, 85, 62, 46, 66, 40, 23, 43, 0, 0, 2,
- 166, 134, 157, 148, 120, 140, 132, 106, 125, 114, 92, 109, 97, 77, 93, 81, 63, 77, 62, 46, 58, 40, 24, 36, 0, 0, 0,
- 168, 133, 140, 149, 119, 125, 132, 106, 112, 115, 92, 97, 98, 77, 82, 81, 62, 67, 62, 46, 50, 40, 24, 29, 0, 0, 0,
- 168, 133, 123, 150, 119, 110, 133, 106, 97, 115, 91, 84, 98, 77, 70, 81, 62, 57, 62, 46, 41, 40, 24, 20, 0, 0, 0,
- 169, 132, 107, 150, 118, 94, 133, 105, 84, 115, 91, 72, 98, 76, 60, 80, 62, 47, 62, 46, 32, 39, 25, 11, 0, 0, 0,
- 171, 132, 89, 152, 118, 79, 135, 105, 69, 115, 90, 58, 98, 76, 47, 80, 62, 36, 62, 46, 21, 39, 25, 0, 0, 0, 0,
- 171, 132, 69, 153, 117, 60, 135, 104, 52, 116, 90, 42, 98, 76, 33, 81, 61, 21, 62, 46, 6, 38, 25, 0, 0, 0, 0,
- 172, 132, 54, 153, 118, 45, 135, 104, 38, 116, 90, 28, 98, 76, 18, 81, 61, 6, 62, 46, 0, 38, 25, 0, 0, 0, 0,
- 164, 115, 177, 146, 103, 159, 130, 91, 143, 114, 78, 125, 97, 65, 107, 81, 51, 89, 63, 34, 69, 41, 9, 46, 0, 0, 4,
- 166, 115, 161, 148, 103, 144, 132, 91, 129, 115, 78, 112, 98, 65, 96, 81, 51, 79, 63, 35, 61, 41, 11, 38, 0, 0, 0,
- 167, 115, 146, 150, 102, 131, 132, 91, 117, 115, 78, 101, 98, 65, 86, 81, 51, 71, 63, 35, 54, 41, 12, 32, 0, 0, 0,
- 168, 114, 132, 150, 103, 118, 133, 91, 105, 116, 78, 91, 98, 64, 76, 82, 51, 61, 63, 36, 46, 41, 13, 24, 0, 0, 0,
- 169, 114, 116, 150, 102, 103, 134, 90, 91, 116, 78, 79, 98, 65, 66, 81, 51, 53, 63, 36, 37, 40, 14, 17, 0, 0, 0,
- 169, 114, 101, 151, 101, 89, 134, 90, 79, 116, 77, 67, 98, 64, 56, 81, 51, 44, 63, 36, 29, 40, 15, 7, 0, 0, 0,
- 170, 114, 85, 152, 101, 75, 135, 90, 65, 116, 77, 54, 98, 64, 44, 81, 51, 32, 63, 36, 17, 39, 15, 0, 0, 0, 0,
- 172, 113, 66, 152, 101, 58, 135, 89, 49, 116, 77, 40, 99, 64, 30, 81, 51, 18, 62, 36, 3, 38, 16, 0, 0, 0, 0,
- 171, 113, 51, 153, 101, 44, 136, 89, 36, 116, 77, 28, 99, 64, 18, 81, 51, 5, 62, 36, 0, 38, 16, 0, 0, 0, 0,
- 165, 94, 166, 147, 82, 147, 132, 72, 132, 115, 61, 115, 98, 49, 99, 82, 36, 82, 64, 19, 64, 42, 0, 41, 0, 0, 0,
- 167, 93, 150, 150, 83, 134, 133, 73, 120, 116, 62, 104, 99, 49, 88, 82, 36, 72, 64, 20, 55, 41, 0, 33, 0, 0, 0,
- 169, 93, 137, 150, 83, 122, 134, 73, 109, 116, 61, 94, 99, 50, 80, 82, 37, 65, 64, 21, 49, 41, 0, 27, 0, 0, 0,
- 169, 94, 123, 150, 83, 110, 133, 73, 97, 116, 61, 83, 99, 50, 70, 82, 38, 57, 63, 23, 42, 41, 0, 20, 0, 0, 0,
- 169, 94, 109, 150, 84, 97, 134, 73, 85, 116, 62, 73, 99, 51, 61, 81, 38, 48, 63, 23, 33, 41, 1, 11, 0, 0, 0,
- 170, 94, 96, 150, 83, 84, 134, 73, 74, 116, 61, 62, 99, 50, 51, 82, 38, 39, 64, 23, 24, 40, 3, 4, 0, 0, 0,
- 171, 93, 79, 152, 82, 70, 135, 73, 61, 116, 62, 51, 98, 51, 40, 81, 38, 28, 63, 24, 14, 39, 4, 0, 0, 0, 0,
- 171, 94, 64, 152, 83, 55, 135, 73, 47, 116, 62, 37, 98, 50, 27, 81, 38, 15, 63, 24, 1, 39, 4, 0, 0, 0, 0,
- 172, 93, 51, 153, 82, 42, 135, 73, 35, 117, 62, 26, 99, 51, 16, 81, 39, 3, 63, 25, 0, 38, 5, 0, 0, 0, 0,
- 166, 68, 153, 148, 59, 137, 133, 49, 121, 115, 39, 106, 99, 28, 91, 82, 13, 75, 65, 0, 58, 42, 0, 36, 0, 0, 0,
- 168, 68, 139, 150, 59, 124, 134, 50, 110, 116, 40, 96, 99, 30, 81, 82, 16, 66, 64, 0, 50, 41, 0, 29, 0, 0, 0,
- 169, 69, 126, 150, 59, 113, 134, 51, 101, 117, 42, 87, 100, 30, 73, 82, 17, 59, 65, 0, 43, 41, 0, 23, 0, 0, 0,
- 169, 70, 115, 150, 61, 102, 134, 52, 89, 116, 42, 77, 99, 32, 65, 82, 19, 52, 64, 0, 36, 41, 0, 15, 0, 0, 0,
- 169, 70, 101, 150, 61, 90, 134, 52, 79, 116, 43, 68, 99, 32, 55, 82, 21, 43, 64, 2, 28, 41, 0, 6, 0, 0, 0,
- 170, 70, 89, 151, 62, 79, 134, 53, 69, 116, 44, 58, 99, 33, 46, 81, 21, 34, 64, 3, 20, 41, 0, 2, 0, 0, 0,
- 170, 71, 76, 152, 62, 66, 134, 53, 57, 116, 43, 46, 99, 33, 36, 82, 22, 24, 64, 5, 10, 40, 0, 0, 0, 0, 0,
- 171, 70, 61, 152, 62, 52, 135, 53, 44, 116, 44, 35, 99, 34, 24, 82, 22, 12, 63, 6, 0, 39, 0, 0, 0, 0, 0,
- 171, 71, 49, 153, 62, 41, 135, 54, 33, 117, 45, 25, 98, 34, 13, 81, 23, 0, 63, 7, 0, 39, 0, 0, 0, 0, 0,
- 167, 33, 142, 149, 24, 127, 134, 10, 113, 116, 0, 97, 100, 0, 83, 83, 0, 68, 65, 0, 52, 40, 0, 30, 0, 0, 0,
- 169, 33, 129, 150, 26, 115, 134, 17, 102, 116, 3, 89, 100, 0, 75, 83, 0, 60, 65, 0, 45, 40, 0, 24, 0, 0, 0,
- 169, 36, 118, 151, 27, 104, 134, 19, 93, 116, 7, 80, 100, 0, 67, 83, 0, 54, 65, 0, 38, 41, 0, 17, 0, 0, 0,
- 169, 39, 107, 150, 30, 94, 134, 22, 84, 116, 11, 71, 99, 0, 59, 83, 0, 46, 64, 0, 31, 40, 0, 9, 0, 0, 0,
- 169, 39, 95, 151, 31, 83, 134, 24, 73, 116, 15, 62, 100, 1, 51, 83, 0, 38, 64, 0, 24, 40, 0, 5, 0, 0, 0,
- 169, 41, 83, 151, 33, 73, 134, 26, 64, 117, 17, 54, 99, 4, 42, 82, 0, 30, 64, 0, 16, 40, 0, 1, 0, 0, 0,
- 170, 42, 71, 152, 34, 62, 134, 28, 53, 117, 19, 44, 99, 6, 33, 82, 0, 21, 63, 0, 4, 39, 0, 0, 0, 0, 0,
- 171, 42, 59, 152, 35, 50, 134, 29, 42, 117, 21, 32, 99, 9, 22, 82, 0, 9, 63, 0, 0, 38, 0, 0, 0, 0, 0,
- 172, 42, 48, 152, 36, 40, 135, 29, 32, 117, 21, 23, 99, 10, 12, 82, 0, 0, 63, 0, 0, 38, 0, 0, 0, 0, 0,
- 107, 207, 246, 96, 185, 220, 86, 165, 196, 73, 144, 171, 60, 123, 147, 46, 103, 125, 32, 82, 100, 9, 56, 71, 0, 20, 33,
- 115, 206, 221, 104, 184, 198, 92, 164, 178, 78, 143, 154, 64, 123, 133, 51, 102, 111, 34, 81, 89, 10, 56, 63, 0, 20, 27,
- 122, 204, 200, 108, 183, 180, 95, 163, 161, 82, 142, 140, 68, 122, 120, 54, 102, 101, 36, 81, 79, 11, 56, 55, 0, 20, 20,
- 125, 203, 179, 111, 181, 160, 97, 162, 143, 85, 141, 124, 70, 121, 107, 55, 101, 89, 38, 80, 69, 14, 55, 46, 0, 19, 10,
- 128, 202, 156, 113, 180, 140, 102, 161, 125, 87, 140, 108, 71, 120, 92, 56, 100, 76, 39, 79, 59, 14, 55, 38, 0, 20, 3,
- 132, 200, 135, 117, 179, 121, 103, 159, 106, 88, 139, 93, 73, 119, 79, 57, 100, 65, 41, 79, 49, 15, 54, 28, 0, 19, 0,
- 134, 200, 111, 119, 178, 98, 105, 158, 87, 89, 138, 76, 74, 118, 64, 58, 99, 51, 41, 78, 37, 16, 54, 17, 0, 19, 0,
- 137, 199, 85, 122, 177, 75, 108, 158, 66, 91, 137, 56, 75, 118, 46, 59, 98, 35, 42, 78, 22, 16, 54, 3, 0, 19, 0,
- 140, 198, 62, 125, 177, 55, 109, 158, 47, 92, 137, 40, 76, 117, 32, 59, 98, 21, 42, 78, 6, 16, 54, 0, 0, 18, 0,
- 118, 186, 231, 106, 167, 206, 93, 149, 184, 81, 130, 161, 67, 111, 139, 54, 92, 117, 39, 72, 93, 17, 48, 66, 0, 10, 29,
- 123, 185, 207, 110, 166, 186, 98, 148, 167, 85, 129, 145, 71, 111, 125, 56, 92, 104, 40, 72, 83, 18, 48, 57, 0, 10, 22,
- 128, 184, 188, 113, 165, 168, 102, 147, 151, 88, 128, 131, 73, 110, 113, 58, 91, 94, 42, 71, 74, 19, 48, 50, 0, 9, 15,
- 131, 183, 168, 116, 164, 151, 104, 146, 134, 89, 127, 117, 73, 109, 100, 58, 90, 83, 42, 71, 65, 20, 48, 42, 0, 9, 5,
- 134, 182, 148, 120, 163, 131, 105, 145, 118, 90, 126, 102, 75, 108, 86, 59, 90, 72, 43, 71, 55, 19, 47, 34, 0, 9, 0,
- 136, 181, 128, 122, 162, 115, 107, 144, 102, 92, 125, 87, 76, 107, 74, 61, 89, 60, 44, 70, 45, 20, 47, 24, 0, 8, 0,
- 139, 180, 106, 124, 161, 95, 109, 144, 83, 93, 124, 71, 77, 107, 60, 61, 89, 47, 44, 70, 33, 20, 47, 13, 0, 8, 0,
- 142, 179, 82, 125, 160, 72, 111, 143, 63, 94, 124, 54, 77, 106, 44, 61, 88, 32, 44, 69, 18, 20, 46, 0, 0, 8, 0,
- 143, 179, 62, 127, 160, 54, 111, 142, 47, 94, 124, 39, 78, 106, 29, 62, 88, 18, 45, 69, 3, 20, 46, 0, 0, 8, 0,
- 124, 167, 216, 112, 150, 194, 99, 134, 174, 87, 117, 153, 73, 100, 131, 58, 82, 110, 43, 64, 88, 23, 40, 61, 0, 0, 24,
- 129, 166, 195, 116, 150, 175, 103, 134, 158, 89, 116, 137, 75, 99, 118, 60, 82, 98, 44, 63, 78, 23, 40, 53, 0, 0, 17,
- 132, 166, 177, 119, 149, 160, 106, 133, 143, 90, 115, 124, 76, 99, 107, 61, 81, 88, 45, 63, 69, 24, 40, 46, 0, 0, 9,
- 136, 166, 159, 121, 148, 143, 107, 132, 126, 92, 115, 111, 77, 98, 94, 62, 81, 78, 46, 63, 60, 23, 40, 38, 0, 0, 0,
- 138, 164, 140, 122, 147, 125, 108, 131, 111, 93, 114, 97, 79, 98, 82, 63, 80, 67, 46, 62, 50, 24, 40, 29, 0, 0, 0,
- 139, 163, 122, 124, 146, 109, 110, 131, 96, 94, 114, 83, 79, 97, 70, 63, 81, 57, 46, 62, 41, 24, 40, 21, 0, 0, 0,
- 141, 163, 101, 126, 145, 90, 111, 130, 79, 95, 113, 68, 79, 96, 56, 63, 80, 44, 47, 62, 30, 23, 40, 10, 0, 0, 0,
- 144, 162, 79, 127, 145, 70, 112, 129, 60, 95, 112, 51, 79, 96, 41, 64, 79, 30, 47, 61, 15, 23, 40, 0, 0, 0, 0,
- 145, 162, 60, 129, 145, 52, 113, 129, 46, 96, 112, 37, 79, 95, 27, 64, 79, 16, 47, 61, 1, 23, 39, 0, 0, 0, 0,
- 131, 147, 202, 117, 133, 181, 105, 119, 162, 91, 103, 142, 77, 87, 122, 62, 71, 102, 47, 54, 81, 26, 31, 56, 0, 0, 18,
- 135, 147, 183, 120, 132, 164, 107, 118, 147, 93, 102, 128, 78, 87, 110, 63, 71, 92, 47, 54, 72, 26, 31, 48, 0, 0, 10,
- 138, 147, 166, 123, 131, 149, 108, 118, 133, 94, 102, 116, 79, 86, 100, 64, 71, 82, 48, 54, 64, 27, 31, 41, 0, 0, 2,
- 139, 146, 149, 124, 131, 134, 111, 117, 119, 94, 101, 103, 79, 86, 88, 64, 70, 72, 48, 53, 55, 27, 31, 33, 0, 0, 0,
- 141, 146, 132, 125, 131, 117, 111, 117, 104, 95, 101, 91, 80, 86, 77, 65, 70, 62, 48, 53, 46, 26, 31, 25, 0, 0, 0,
- 143, 145, 115, 126, 130, 101, 112, 116, 90, 96, 100, 78, 80, 85, 65, 65, 70, 52, 49, 53, 37, 27, 32, 17, 0, 0, 0,
- 144, 144, 96, 128, 129, 85, 112, 115, 75, 97, 100, 64, 81, 85, 52, 65, 69, 40, 49, 53, 26, 26, 31, 5, 0, 0, 0,
- 146, 144, 76, 129, 129, 67, 114, 115, 58, 97, 99, 48, 82, 84, 38, 66, 69, 27, 49, 53, 12, 26, 32, 0, 0, 0, 0,
- 146, 144, 59, 130, 128, 51, 114, 114, 43, 98, 99, 35, 82, 84, 25, 66, 69, 13, 49, 53, 0, 26, 32, 0, 0, 0, 0,
- 135, 129, 189, 122, 115, 170, 107, 103, 152, 94, 89, 133, 79, 74, 114, 64, 60, 95, 49, 43, 75, 29, 20, 51, 0, 0, 12,
- 138, 129, 171, 124, 115, 153, 110, 103, 138, 95, 89, 120, 81, 74, 103, 66, 60, 86, 50, 44, 67, 28, 21, 43, 0, 0, 3,
- 140, 129, 156, 125, 115, 140, 111, 103, 125, 96, 89, 109, 81, 74, 93, 67, 60, 76, 50, 44, 59, 29, 22, 36, 0, 0, 0,
- 142, 128, 140, 127, 115, 125, 112, 102, 112, 97, 88, 97, 82, 74, 83, 67, 60, 67, 50, 44, 51, 29, 22, 29, 0, 0, 0,
- 142, 128, 124, 127, 114, 111, 113, 102, 98, 98, 88, 85, 82, 74, 71, 66, 60, 58, 50, 44, 42, 29, 22, 21, 0, 0, 0,
- 144, 127, 108, 128, 114, 96, 113, 101, 85, 98, 87, 73, 82, 74, 61, 67, 60, 48, 50, 44, 33, 28, 23, 12, 0, 0, 0,
- 145, 127, 91, 129, 114, 81, 115, 101, 71, 98, 87, 60, 82, 73, 48, 67, 59, 37, 50, 44, 22, 29, 23, 1, 0, 0, 0,
- 147, 127, 73, 130, 113, 63, 115, 101, 55, 98, 87, 45, 83, 73, 35, 67, 59, 24, 50, 44, 10, 28, 24, 0, 0, 0, 0,
- 147, 127, 58, 131, 113, 49, 115, 100, 42, 99, 86, 33, 83, 73, 23, 67, 59, 10, 50, 44, 0, 27, 24, 0, 0, 0, 0,
- 138, 110, 177, 124, 99, 159, 110, 88, 142, 96, 75, 125, 82, 62, 107, 66, 48, 89, 51, 33, 70, 30, 8, 46, 0, 0, 5,
- 142, 111, 160, 127, 99, 144, 113, 88, 130, 98, 75, 112, 82, 62, 96, 68, 49, 80, 51, 33, 61, 30, 10, 39, 0, 0, 0,
- 143, 111, 146, 128, 99, 131, 114, 88, 118, 98, 75, 101, 83, 62, 86, 68, 49, 71, 52, 33, 54, 30, 11, 32, 0, 0, 0,
- 144, 111, 132, 128, 99, 118, 113, 88, 106, 99, 75, 91, 83, 62, 77, 68, 49, 62, 52, 34, 46, 30, 12, 25, 0, 0, 0,
- 144, 111, 117, 129, 98, 104, 114, 87, 92, 99, 75, 80, 83, 62, 67, 68, 49, 53, 51, 34, 38, 30, 13, 18, 0, 0, 0,
- 145, 111, 103, 130, 98, 91, 114, 87, 80, 99, 75, 68, 83, 63, 57, 68, 50, 45, 51, 34, 30, 30, 14, 8, 0, 0, 0,
- 146, 110, 87, 131, 98, 76, 115, 87, 67, 99, 75, 56, 83, 62, 45, 68, 49, 33, 52, 35, 19, 30, 15, 2, 0, 0, 0,
- 148, 110, 70, 131, 98, 60, 116, 86, 52, 99, 74, 43, 84, 62, 33, 69, 49, 21, 52, 35, 6, 29, 15, 0, 0, 0, 0,
- 148, 110, 56, 132, 97, 48, 117, 87, 40, 100, 75, 31, 84, 62, 22, 68, 49, 9, 51, 35, 0, 28, 15, 0, 0, 0, 0,
- 142, 91, 166, 126, 80, 148, 113, 71, 132, 98, 59, 115, 83, 47, 99, 69, 34, 82, 53, 17, 64, 32, 0, 41, 0, 0, 0,
- 143, 91, 150, 128, 81, 135, 114, 71, 120, 99, 60, 104, 85, 48, 89, 69, 35, 73, 53, 19, 56, 32, 0, 34, 0, 0, 0,
- 145, 91, 137, 129, 81, 122, 115, 71, 109, 100, 60, 94, 85, 48, 81, 69, 35, 65, 53, 19, 49, 32, 0, 28, 0, 0, 0,
- 146, 92, 124, 130, 81, 110, 115, 71, 98, 100, 60, 84, 85, 49, 71, 69, 36, 57, 53, 21, 42, 32, 0, 21, 0, 0, 0,
- 147, 91, 110, 130, 81, 97, 115, 71, 86, 100, 60, 74, 84, 49, 62, 69, 36, 48, 53, 22, 34, 32, 0, 13, 0, 0, 0,
- 147, 92, 97, 130, 81, 85, 116, 72, 76, 100, 60, 63, 85, 49, 52, 69, 37, 40, 53, 22, 26, 31, 1, 5, 0, 0, 0,
- 148, 92, 82, 131, 81, 71, 116, 71, 62, 100, 60, 53, 84, 49, 42, 69, 37, 30, 52, 23, 16, 31, 2, 0, 0, 0, 0,
- 148, 91, 67, 132, 81, 57, 117, 71, 49, 100, 60, 39, 84, 49, 30, 69, 37, 18, 52, 23, 2, 30, 2, 0, 0, 0, 0,
- 149, 91, 54, 132, 81, 46, 118, 71, 39, 101, 60, 29, 85, 49, 19, 69, 37, 6, 52, 23, 0, 29, 3, 0, 0, 0, 0,
- 143, 68, 153, 128, 59, 137, 115, 49, 122, 99, 39, 107, 85, 28, 91, 70, 13, 75, 54, 0, 58, 32, 0, 36, 0, 0, 0,
- 146, 68, 140, 131, 59, 125, 116, 51, 111, 100, 40, 97, 85, 29, 82, 70, 15, 67, 54, 0, 50, 32, 0, 29, 0, 0, 0,
- 147, 68, 127, 131, 59, 114, 117, 51, 102, 101, 41, 88, 86, 30, 74, 70, 17, 60, 54, 0, 44, 32, 0, 23, 0, 0, 0,
- 147, 70, 115, 131, 60, 103, 116, 52, 91, 100, 42, 78, 85, 32, 65, 70, 19, 53, 54, 1, 38, 32, 0, 17, 0, 0, 0,
- 147, 70, 103, 131, 61, 91, 117, 53, 81, 101, 43, 69, 86, 32, 57, 70, 20, 44, 54, 2, 30, 32, 0, 7, 0, 0, 0,
- 148, 70, 91, 132, 61, 80, 117, 52, 70, 101, 43, 59, 85, 33, 48, 70, 21, 36, 53, 4, 22, 32, 0, 3, 0, 0, 0,
- 148, 70, 78, 132, 62, 68, 117, 53, 58, 101, 43, 48, 85, 34, 38, 70, 22, 26, 53, 6, 12, 31, 0, 0, 0, 0, 0,
- 149, 71, 64, 132, 62, 54, 118, 54, 46, 101, 44, 37, 85, 34, 27, 69, 23, 15, 53, 7, 1, 30, 0, 0, 0, 0, 0,
- 150, 70, 53, 134, 61, 44, 118, 54, 36, 101, 44, 28, 85, 35, 17, 69, 23, 4, 52, 8, 0, 30, 0, 0, 0, 0, 0,
- 145, 38, 143, 130, 29, 128, 117, 18, 114, 101, 3, 98, 87, 0, 84, 72, 0, 69, 54, 0, 53, 30, 0, 31, 0, 0, 0,
- 147, 38, 130, 132, 30, 116, 117, 22, 103, 101, 8, 89, 87, 0, 76, 72, 0, 62, 54, 0, 46, 30, 0, 24, 0, 0, 0,
- 148, 40, 119, 132, 31, 105, 117, 23, 94, 101, 13, 81, 87, 0, 68, 71, 0, 55, 54, 0, 39, 30, 0, 18, 0, 0, 0,
- 148, 42, 108, 132, 34, 96, 117, 25, 85, 102, 15, 73, 86, 2, 60, 71, 0, 47, 54, 0, 33, 30, 0, 11, 0, 0, 0,
- 148, 43, 96, 133, 35, 85, 117, 28, 75, 102, 18, 64, 87, 5, 52, 71, 0, 40, 54, 0, 25, 30, 0, 5, 0, 0, 0,
- 149, 44, 85, 132, 36, 75, 118, 29, 66, 101, 20, 55, 86, 8, 44, 70, 0, 32, 53, 0, 18, 29, 0, 2, 0, 0, 0,
- 149, 45, 74, 133, 37, 64, 118, 31, 55, 102, 21, 45, 85, 10, 34, 70, 0, 22, 53, 0, 6, 28, 0, 0, 0, 0, 0,
- 150, 46, 61, 133, 39, 52, 118, 31, 44, 102, 23, 34, 85, 12, 24, 70, 0, 12, 52, 0, 0, 28, 0, 0, 0, 0, 0,
- 150, 46, 51, 133, 40, 42, 119, 32, 35, 102, 24, 25, 85, 13, 14, 70, 0, 1, 52, 0, 0, 27, 0, 0, 0, 0, 0,
- 53, 198, 244, 49, 177, 218, 41, 158, 195, 32, 138, 171, 22, 118, 147, 11, 98, 124, 0, 78, 100, 0, 54, 71, 0, 18, 34,
- 69, 196, 220, 64, 175, 196, 54, 157, 176, 45, 137, 154, 32, 117, 133, 19, 98, 111, 0, 78, 89, 0, 53, 63, 0, 17, 27,
- 80, 195, 198, 69, 175, 179, 60, 156, 159, 50, 136, 139, 38, 116, 120, 25, 98, 101, 4, 77, 80, 0, 53, 55, 0, 17, 21,
- 84, 193, 177, 75, 173, 159, 64, 155, 142, 55, 135, 124, 41, 116, 107, 27, 97, 89, 9, 76, 70, 0, 53, 47, 0, 17, 11,
- 89, 193, 157, 79, 172, 140, 70, 154, 125, 57, 134, 109, 44, 115, 92, 32, 96, 76, 13, 76, 59, 0, 52, 39, 0, 16, 4,
- 94, 191, 135, 85, 171, 121, 72, 152, 108, 60, 133, 94, 47, 114, 80, 32, 95, 65, 15, 76, 49, 0, 52, 29, 0, 16, 0,
- 98, 190, 113, 87, 170, 100, 76, 152, 89, 62, 132, 77, 49, 113, 65, 35, 95, 52, 18, 75, 37, 0, 52, 18, 0, 15, 0,
- 103, 190, 89, 90, 169, 80, 78, 151, 70, 64, 132, 60, 51, 113, 49, 37, 94, 38, 20, 75, 25, 0, 52, 5, 0, 15, 0,
- 106, 189, 69, 93, 169, 61, 80, 151, 53, 66, 131, 45, 52, 113, 36, 37, 94, 25, 19, 74, 11, 0, 51, 0, 0, 15, 0,
- 76, 178, 229, 68, 159, 205, 61, 142, 183, 50, 124, 160, 40, 106, 138, 28, 88, 116, 12, 69, 93, 0, 45, 66, 0, 5, 29,
- 86, 177, 207, 78, 158, 184, 67, 142, 166, 56, 123, 145, 45, 106, 125, 31, 88, 105, 16, 69, 83, 0, 45, 58, 0, 6, 22,
- 93, 176, 187, 81, 158, 168, 71, 141, 150, 61, 123, 131, 47, 105, 113, 35, 87, 94, 20, 68, 74, 0, 45, 51, 0, 5, 16,
- 98, 175, 168, 84, 157, 150, 75, 140, 134, 63, 122, 117, 50, 104, 100, 37, 87, 83, 21, 68, 65, 0, 45, 42, 0, 4, 7,
- 100, 174, 149, 89, 155, 132, 76, 139, 117, 65, 121, 102, 53, 104, 87, 39, 86, 72, 23, 67, 55, 0, 45, 34, 0, 3, 0,
- 103, 173, 130, 92, 155, 115, 80, 138, 102, 68, 120, 88, 53, 103, 75, 40, 86, 61, 24, 67, 45, 0, 45, 25, 0, 3, 0,
- 107, 172, 108, 95, 154, 96, 82, 137, 85, 70, 119, 73, 55, 102, 61, 42, 85, 49, 25, 67, 34, 0, 45, 14, 0, 3, 0,
- 110, 172, 86, 97, 153, 76, 85, 137, 67, 70, 119, 57, 56, 102, 46, 42, 84, 35, 26, 66, 21, 0, 44, 1, 0, 3, 0,
- 112, 171, 67, 98, 153, 59, 86, 137, 52, 71, 119, 44, 58, 102, 34, 44, 85, 22, 27, 66, 7, 0, 44, 0, 0, 3, 0,
- 90, 160, 215, 81, 144, 193, 70, 129, 173, 61, 112, 151, 49, 95, 131, 37, 79, 109, 22, 61, 87, 0, 38, 61, 0, 0, 25,
- 96, 160, 194, 86, 143, 174, 75, 128, 157, 65, 112, 137, 53, 95, 117, 40, 78, 98, 25, 60, 78, 0, 38, 53, 0, 0, 17,
- 100, 159, 177, 89, 143, 159, 79, 128, 143, 67, 111, 124, 55, 95, 107, 42, 78, 89, 27, 60, 70, 2, 38, 46, 0, 0, 9,
- 104, 158, 159, 92, 142, 143, 81, 127, 127, 69, 110, 110, 56, 94, 94, 43, 78, 78, 28, 60, 60, 2, 38, 38, 0, 0, 1,
- 107, 157, 140, 94, 141, 125, 82, 126, 112, 71, 110, 97, 59, 94, 82, 45, 77, 67, 29, 59, 51, 4, 37, 30, 0, 0, 0,
- 110, 156, 122, 97, 140, 109, 85, 125, 97, 72, 109, 83, 58, 93, 71, 45, 77, 57, 29, 60, 42, 5, 38, 22, 0, 0, 0,
- 111, 156, 103, 99, 139, 91, 87, 125, 81, 73, 108, 69, 60, 92, 58, 46, 77, 45, 30, 59, 31, 5, 38, 12, 0, 0, 0,
- 115, 156, 82, 101, 140, 73, 88, 124, 63, 74, 108, 53, 60, 92, 44, 46, 76, 32, 31, 59, 18, 6, 37, 0, 0, 0, 0,
- 116, 155, 65, 102, 139, 58, 89, 124, 49, 75, 108, 41, 61, 92, 32, 48, 76, 21, 31, 59, 6, 5, 37, 0, 0, 0, 0,
- 100, 141, 201, 88, 127, 181, 79, 114, 162, 69, 99, 142, 57, 83, 122, 44, 68, 102, 30, 51, 81, 7, 28, 56, 0, 0, 19,
- 105, 141, 182, 94, 127, 163, 83, 114, 146, 71, 98, 128, 59, 83, 110, 46, 68, 91, 31, 51, 72, 10, 28, 48, 0, 0, 11,
- 108, 141, 166, 96, 127, 149, 85, 113, 133, 73, 98, 116, 60, 83, 99, 46, 68, 82, 32, 51, 64, 11, 29, 41, 0, 0, 2,
- 111, 141, 149, 98, 126, 134, 88, 112, 119, 74, 97, 103, 61, 83, 88, 48, 67, 72, 33, 51, 56, 11, 29, 34, 0, 0, 0,
- 112, 140, 132, 100, 125, 118, 89, 112, 105, 75, 97, 91, 62, 82, 77, 49, 68, 62, 33, 51, 47, 12, 29, 26, 0, 0, 0,
- 115, 140, 116, 102, 125, 103, 90, 111, 91, 76, 96, 78, 62, 82, 65, 49, 67, 52, 34, 51, 38, 13, 29, 18, 0, 0, 0,
- 117, 139, 97, 103, 124, 87, 91, 111, 77, 78, 96, 65, 63, 81, 54, 49, 67, 41, 34, 51, 27, 12, 29, 7, 0, 0, 0,
- 119, 138, 78, 105, 124, 69, 92, 110, 60, 78, 95, 50, 65, 81, 40, 50, 67, 29, 34, 51, 15, 13, 30, 0, 0, 0, 0,
- 120, 138, 64, 106, 124, 54, 93, 110, 47, 78, 95, 38, 65, 81, 29, 50, 66, 17, 34, 50, 2, 13, 29, 0, 0, 0, 0,
- 107, 124, 189, 96, 111, 169, 85, 99, 152, 73, 85, 132, 61, 71, 114, 48, 57, 95, 34, 41, 75, 14, 18, 51, 0, 0, 13,
- 111, 124, 171, 100, 111, 153, 88, 99, 137, 75, 85, 120, 63, 72, 103, 50, 58, 85, 36, 41, 66, 15, 19, 43, 0, 0, 4,
- 113, 124, 156, 101, 111, 139, 90, 99, 125, 77, 85, 109, 64, 71, 93, 51, 57, 77, 36, 42, 59, 17, 20, 37, 0, 0, 0,
- 115, 124, 140, 103, 111, 125, 90, 99, 112, 78, 85, 97, 64, 71, 82, 52, 57, 67, 36, 42, 50, 16, 20, 30, 0, 0, 0,
- 117, 123, 125, 104, 110, 111, 92, 98, 99, 79, 85, 86, 65, 71, 72, 51, 58, 59, 37, 42, 43, 17, 21, 22, 0, 0, 0,
- 118, 123, 110, 105, 110, 97, 93, 98, 86, 78, 84, 74, 66, 71, 62, 52, 57, 49, 37, 42, 34, 17, 22, 14, 0, 0, 0,
- 120, 123, 93, 106, 109, 82, 94, 97, 72, 80, 84, 61, 66, 71, 50, 52, 57, 38, 37, 42, 24, 17, 22, 2, 0, 0, 0,
- 121, 122, 75, 108, 109, 66, 95, 97, 58, 80, 84, 48, 66, 71, 37, 52, 57, 26, 37, 42, 12, 16, 22, 0, 0, 0, 0,
- 122, 123, 62, 108, 109, 52, 95, 97, 45, 81, 84, 36, 67, 70, 26, 52, 57, 14, 37, 42, 0, 15, 22, 0, 0, 0, 0,
- 113, 107, 177, 102, 96, 159, 89, 85, 141, 78, 72, 124, 65, 60, 107, 52, 46, 89, 37, 30, 70, 18, 5, 46, 0, 0, 6,
- 116, 107, 160, 104, 96, 144, 92, 85, 129, 80, 72, 112, 67, 60, 96, 53, 47, 80, 38, 31, 62, 19, 7, 39, 0, 0, 0,
- 118, 107, 147, 105, 96, 131, 93, 85, 118, 80, 72, 101, 67, 60, 87, 54, 47, 71, 39, 31, 54, 19, 8, 32, 0, 0, 0,
- 119, 107, 132, 106, 96, 118, 94, 85, 106, 81, 73, 91, 67, 60, 77, 54, 47, 63, 39, 32, 47, 20, 9, 25, 0, 0, 0,
- 119, 107, 118, 106, 95, 105, 94, 85, 93, 81, 72, 80, 68, 60, 68, 54, 47, 54, 39, 32, 39, 20, 11, 18, 0, 0, 0,
- 121, 107, 104, 107, 96, 92, 95, 84, 80, 81, 72, 69, 68, 61, 58, 54, 48, 46, 39, 33, 31, 20, 12, 9, 0, 0, 0,
- 123, 107, 88, 108, 95, 77, 96, 84, 68, 82, 72, 57, 68, 60, 46, 54, 47, 35, 39, 33, 20, 19, 13, 2, 0, 0, 0,
- 123, 106, 72, 110, 95, 63, 96, 84, 54, 82, 72, 45, 69, 60, 35, 55, 48, 23, 39, 33, 9, 18, 14, 0, 0, 0, 0,
- 125, 106, 60, 110, 94, 50, 98, 84, 42, 83, 72, 34, 69, 60, 25, 55, 48, 12, 39, 33, 0, 17, 13, 0, 0, 0, 0,
- 118, 89, 165, 105, 79, 148, 93, 69, 132, 81, 57, 115, 68, 45, 99, 55, 32, 82, 41, 15, 64, 21, 0, 41, 0, 0, 0,
- 120, 89, 150, 107, 79, 135, 96, 69, 121, 82, 58, 105, 70, 46, 89, 56, 34, 73, 41, 17, 56, 21, 0, 34, 0, 0, 0,
- 121, 89, 137, 108, 79, 123, 96, 69, 109, 82, 58, 95, 70, 47, 81, 56, 34, 66, 41, 18, 49, 21, 0, 28, 0, 0, 0,
- 122, 90, 124, 109, 79, 110, 96, 69, 99, 83, 58, 85, 70, 47, 72, 56, 35, 58, 41, 19, 42, 21, 0, 22, 0, 0, 0,
- 123, 90, 111, 110, 79, 98, 97, 69, 87, 83, 59, 75, 70, 47, 63, 56, 35, 50, 41, 20, 35, 21, 0, 14, 0, 0, 0,
- 123, 90, 98, 110, 79, 87, 97, 70, 76, 84, 58, 64, 70, 48, 53, 56, 36, 41, 40, 21, 26, 21, 0, 5, 0, 0, 0,
- 125, 89, 84, 111, 79, 73, 97, 69, 64, 84, 59, 54, 70, 48, 43, 56, 36, 31, 40, 22, 17, 20, 1, 1, 0, 0, 0,
- 125, 89, 69, 112, 79, 60, 98, 70, 51, 84, 59, 42, 70, 48, 32, 56, 36, 20, 41, 22, 5, 19, 2, 0, 0, 0, 0,
- 126, 89, 57, 112, 79, 49, 99, 70, 41, 84, 59, 32, 70, 48, 22, 56, 36, 10, 40, 22, 0, 18, 2, 0, 0, 0, 0,
- 121, 67, 154, 108, 58, 138, 97, 50, 124, 84, 39, 107, 71, 28, 92, 58, 12, 76, 43, 0, 59, 20, 0, 37, 0, 0, 0,
- 124, 68, 140, 111, 59, 126, 98, 50, 112, 84, 40, 98, 71, 29, 83, 58, 15, 67, 42, 0, 51, 20, 0, 30, 0, 0, 0,
- 124, 68, 129, 111, 59, 114, 99, 51, 102, 86, 41, 88, 71, 30, 75, 58, 17, 60, 42, 0, 45, 20, 0, 24, 0, 0, 0,
- 125, 70, 116, 111, 60, 103, 99, 51, 92, 85, 41, 79, 71, 31, 66, 58, 19, 53, 42, 3, 38, 20, 0, 17, 0, 0, 0,
- 125, 70, 104, 111, 61, 93, 99, 52, 81, 85, 43, 69, 72, 32, 58, 58, 20, 45, 42, 4, 31, 20, 0, 8, 0, 0, 0,
- 126, 70, 92, 111, 61, 81, 99, 52, 71, 85, 42, 60, 71, 33, 49, 57, 21, 37, 42, 6, 23, 20, 0, 3, 0, 0, 0,
- 126, 70, 79, 112, 61, 70, 99, 53, 60, 85, 43, 50, 71, 33, 39, 57, 22, 28, 41, 7, 13, 19, 0, 0, 0, 0, 0,
- 127, 71, 66, 113, 62, 56, 100, 53, 48, 86, 44, 39, 71, 34, 29, 57, 23, 18, 41, 8, 2, 18, 0, 0, 0, 0, 0,
- 128, 70, 55, 114, 62, 46, 100, 54, 39, 86, 44, 30, 71, 34, 20, 57, 23, 7, 41, 9, 0, 18, 0, 0, 0, 0, 0,
- 124, 41, 145, 111, 32, 128, 99, 23, 114, 86, 10, 100, 73, 0, 85, 60, 0, 71, 43, 0, 54, 17, 0, 32, 0, 0, 0,
- 126, 42, 131, 113, 33, 117, 100, 25, 104, 86, 14, 90, 73, 0, 77, 60, 0, 63, 44, 0, 47, 18, 0, 25, 0, 0, 0,
- 127, 43, 120, 113, 34, 106, 101, 26, 95, 86, 17, 82, 73, 2, 69, 59, 0, 56, 43, 0, 41, 18, 0, 19, 0, 0, 0,
- 127, 45, 109, 113, 37, 97, 101, 28, 85, 86, 19, 74, 73, 5, 61, 59, 0, 48, 43, 0, 34, 19, 0, 11, 0, 0, 0,
- 127, 46, 98, 114, 38, 86, 100, 30, 76, 87, 21, 65, 73, 9, 54, 59, 0, 41, 43, 0, 26, 18, 0, 5, 0, 0, 0,
- 127, 47, 87, 113, 39, 76, 101, 31, 67, 86, 22, 56, 72, 11, 45, 59, 0, 33, 43, 0, 19, 18, 0, 2, 0, 0, 0,
- 128, 48, 75, 114, 39, 65, 101, 33, 56, 86, 23, 46, 72, 12, 36, 58, 0, 24, 42, 0, 9, 17, 0, 0, 0, 0, 0,
- 129, 48, 63, 114, 41, 54, 102, 33, 46, 87, 24, 36, 72, 14, 26, 58, 1, 14, 42, 0, 2, 16, 0, 0, 0, 0, 0,
- 128, 48, 53, 114, 41, 44, 102, 34, 37, 87, 25, 27, 72, 15, 17, 58, 1, 3, 41, 0, 0, 15, 0, 0, 0, 0, 0,
- 0, 189, 242, 0, 169, 217, 0, 151, 194, 0, 132, 170, 0, 113, 147, 0, 94, 123, 0, 74, 99, 0, 51, 71, 0, 15, 34,
- 1, 187, 219, 1, 167, 195, 0, 150, 175, 0, 131, 153, 0, 113, 132, 0, 94, 111, 0, 74, 89, 0, 50, 63, 0, 13, 28,
- 1, 186, 198, 1, 167, 178, 0, 149, 158, 0, 130, 139, 0, 111, 119, 0, 93, 100, 0, 74, 80, 0, 50, 55, 0, 13, 22,
- 1, 185, 176, 1, 165, 159, 1, 148, 142, 0, 129, 123, 0, 111, 106, 0, 93, 89, 0, 73, 70, 0, 50, 47, 0, 13, 13,
- 1, 184, 157, 1, 164, 141, 1, 147, 125, 0, 128, 110, 0, 110, 93, 0, 92, 77, 0, 73, 60, 0, 50, 39, 0, 12, 5,
- 25, 182, 137, 25, 163, 122, 17, 146, 109, 0, 128, 96, 0, 110, 81, 0, 92, 66, 0, 73, 51, 0, 50, 30, 0, 10, 0,
- 42, 181, 114, 35, 163, 102, 30, 145, 91, 14, 127, 80, 0, 109, 67, 0, 91, 53, 0, 72, 39, 0, 50, 19, 0, 10, 0,
- 52, 181, 92, 43, 162, 83, 32, 145, 73, 19, 126, 63, 0, 108, 52, 0, 90, 40, 0, 72, 27, 0, 50, 7, 0, 10, 0,
- 57, 181, 74, 48, 162, 66, 37, 144, 57, 24, 126, 49, 7, 108, 40, 0, 90, 29, 0, 72, 15, 0, 49, 0, 0, 10, 0,
- 1, 170, 227, 1, 152, 203, 0, 136, 182, 0, 119, 159, 0, 101, 137, 0, 84, 115, 0, 65, 92, 0, 43, 66, 0, 1, 29,
- 1, 169, 206, 1, 151, 184, 1, 136, 165, 0, 118, 144, 0, 102, 125, 0, 84, 105, 0, 65, 83, 0, 43, 58, 0, 0, 22,
- 29, 168, 186, 21, 151, 167, 14, 135, 150, 4, 118, 131, 0, 101, 112, 0, 83, 94, 0, 65, 75, 0, 43, 51, 0, 0, 16,
- 41, 167, 167, 33, 150, 150, 31, 134, 134, 19, 117, 117, 4, 100, 100, 0, 83, 83, 0, 65, 65, 0, 42, 43, 0, 0, 8,
- 48, 167, 149, 41, 149, 133, 33, 133, 118, 25, 116, 103, 13, 99, 88, 0, 83, 73, 0, 65, 56, 0, 42, 35, 0, 0, 0,
- 58, 165, 130, 49, 148, 115, 42, 132, 103, 31, 115, 89, 18, 99, 75, 0, 82, 61, 0, 64, 46, 0, 42, 26, 0, 0, 0,
- 62, 164, 110, 55, 147, 97, 45, 132, 87, 35, 115, 75, 22, 98, 63, 5, 82, 50, 0, 64, 36, 0, 42, 16, 0, 0, 0,
- 69, 164, 89, 60, 147, 78, 50, 131, 70, 37, 114, 59, 26, 98, 49, 10, 81, 37, 0, 64, 24, 0, 42, 4, 0, 0, 0,
- 71, 164, 71, 63, 147, 63, 53, 131, 55, 40, 114, 47, 28, 98, 38, 13, 81, 26, 0, 64, 12, 0, 42, 0, 0, 0, 0,
- 28, 153, 214, 24, 138, 193, 23, 123, 171, 16, 107, 150, 0, 91, 130, 0, 75, 109, 0, 58, 87, 0, 35, 61, 0, 0, 25,
- 48, 153, 194, 41, 138, 174, 34, 123, 156, 27, 107, 136, 16, 91, 117, 1, 75, 98, 0, 57, 78, 0, 35, 53, 0, 0, 17,
- 55, 153, 177, 47, 137, 158, 42, 122, 142, 33, 107, 124, 22, 91, 106, 6, 75, 88, 0, 57, 70, 0, 35, 46, 0, 0, 9,
- 61, 152, 158, 53, 136, 143, 45, 122, 127, 36, 106, 111, 24, 90, 94, 10, 74, 78, 0, 57, 61, 0, 35, 39, 0, 0, 2,
- 67, 151, 141, 59, 135, 126, 49, 121, 112, 39, 105, 98, 29, 90, 83, 14, 74, 68, 0, 57, 52, 0, 35, 31, 0, 0, 0,
- 71, 150, 123, 62, 135, 110, 54, 120, 98, 42, 105, 84, 31, 89, 71, 16, 74, 58, 0, 57, 43, 0, 35, 22, 0, 0, 0,
- 74, 150, 105, 64, 134, 92, 55, 120, 83, 45, 104, 71, 34, 89, 59, 20, 73, 47, 0, 57, 32, 0, 35, 13, 0, 0, 0,
- 78, 149, 84, 69, 134, 75, 59, 120, 66, 47, 103, 56, 34, 88, 46, 22, 73, 34, 1, 57, 20, 0, 35, 1, 0, 0, 0,
- 80, 149, 69, 70, 133, 61, 60, 119, 53, 49, 103, 44, 36, 88, 35, 23, 73, 24, 2, 56, 10, 0, 35, 0, 0, 0, 0,
- 58, 136, 200, 50, 122, 180, 45, 109, 162, 38, 94, 141, 27, 80, 121, 15, 65, 102, 0, 48, 81, 0, 26, 56, 0, 0, 19,
- 66, 136, 182, 59, 122, 163, 52, 109, 146, 42, 94, 128, 32, 80, 109, 20, 65, 91, 2, 48, 72, 0, 26, 49, 0, 0, 11,
- 70, 136, 165, 62, 122, 149, 55, 108, 133, 46, 94, 116, 35, 80, 99, 21, 65, 82, 4, 49, 64, 0, 26, 41, 0, 0, 3,
- 76, 135, 149, 66, 121, 133, 58, 108, 119, 48, 94, 103, 36, 79, 88, 23, 65, 73, 7, 49, 56, 0, 27, 34, 0, 0, 0,
- 78, 135, 133, 69, 120, 118, 60, 107, 106, 50, 93, 92, 39, 79, 77, 26, 65, 63, 8, 49, 47, 0, 27, 26, 0, 0, 0,
- 82, 134, 117, 71, 120, 104, 62, 107, 92, 51, 93, 79, 39, 78, 66, 27, 64, 53, 10, 48, 39, 0, 27, 18, 0, 0, 0,
- 84, 134, 99, 73, 119, 87, 64, 106, 77, 53, 92, 66, 42, 78, 55, 28, 64, 42, 11, 48, 29, 0, 28, 9, 0, 0, 0,
- 87, 133, 81, 76, 119, 72, 66, 106, 62, 55, 92, 52, 43, 78, 42, 29, 64, 31, 12, 48, 17, 0, 28, 0, 0, 0, 0,
- 88, 134, 67, 77, 119, 58, 68, 106, 51, 56, 92, 42, 44, 78, 32, 30, 64, 20, 12, 48, 6, 0, 28, 0, 0, 0, 0,
- 73, 120, 189, 64, 107, 168, 57, 96, 151, 47, 82, 133, 38, 69, 114, 26, 55, 95, 11, 39, 75, 0, 16, 51, 0, 0, 14,
- 78, 120, 171, 69, 107, 153, 62, 95, 137, 51, 82, 119, 40, 69, 102, 29, 55, 85, 15, 39, 66, 0, 17, 44, 0, 0, 4,
- 81, 120, 156, 71, 107, 140, 64, 95, 125, 53, 82, 109, 42, 69, 93, 31, 55, 77, 16, 39, 59, 0, 18, 37, 0, 0, 0,
- 85, 120, 141, 74, 107, 126, 65, 95, 112, 54, 82, 97, 43, 69, 82, 32, 55, 67, 17, 39, 51, 0, 19, 30, 0, 0, 0,
- 86, 119, 126, 76, 106, 112, 66, 95, 100, 56, 81, 85, 45, 69, 72, 33, 55, 59, 18, 40, 43, 0, 19, 22, 0, 0, 0,
- 89, 119, 110, 78, 106, 98, 69, 94, 87, 56, 81, 75, 46, 68, 62, 33, 55, 49, 18, 40, 35, 0, 20, 15, 0, 0, 0,
- 89, 119, 95, 80, 106, 83, 70, 94, 73, 58, 81, 63, 46, 68, 51, 34, 55, 39, 19, 40, 25, 0, 20, 4, 0, 0, 0,
- 92, 118, 78, 82, 106, 68, 70, 93, 59, 59, 81, 49, 47, 68, 39, 34, 55, 28, 19, 40, 14, 0, 20, 0, 0, 0, 0,
- 93, 118, 65, 82, 105, 55, 72, 93, 48, 60, 81, 39, 47, 68, 29, 34, 55, 18, 20, 40, 2, 0, 20, 0, 0, 0, 0,
- 83, 104, 177, 74, 93, 159, 65, 82, 142, 56, 70, 124, 45, 57, 106, 33, 44, 89, 20, 28, 70, 1, 4, 46, 0, 0, 8,
- 86, 104, 161, 78, 93, 145, 68, 82, 128, 58, 70, 112, 48, 58, 96, 35, 45, 80, 21, 29, 62, 1, 6, 40, 0, 0, 0,
- 89, 104, 147, 79, 93, 131, 69, 82, 118, 59, 70, 102, 47, 58, 87, 36, 45, 72, 23, 29, 55, 3, 7, 33, 0, 0, 0,
- 90, 104, 132, 80, 93, 119, 71, 82, 106, 60, 70, 91, 48, 58, 77, 37, 45, 62, 23, 30, 47, 4, 7, 26, 0, 0, 0,
- 92, 104, 118, 82, 93, 105, 72, 82, 93, 61, 69, 80, 50, 58, 68, 37, 45, 55, 23, 30, 39, 4, 8, 18, 0, 0, 0,
- 94, 104, 105, 82, 92, 93, 72, 82, 82, 61, 70, 70, 50, 58, 58, 38, 46, 46, 23, 31, 31, 6, 10, 11, 0, 0, 0,
- 95, 104, 90, 84, 92, 79, 74, 82, 70, 62, 70, 58, 50, 58, 48, 37, 46, 36, 23, 31, 22, 4, 11, 3, 0, 0, 0,
- 96, 103, 74, 85, 92, 65, 75, 81, 56, 63, 70, 47, 50, 58, 37, 38, 46, 25, 24, 31, 11, 3, 11, 0, 0, 0, 0,
- 97, 103, 62, 86, 92, 53, 76, 81, 45, 63, 69, 36, 51, 58, 27, 38, 46, 15, 23, 31, 0, 3, 11, 0, 0, 0, 0,
- 90, 87, 165, 81, 77, 148, 72, 67, 132, 62, 55, 116, 50, 44, 99, 39, 31, 82, 25, 14, 64, 1, 0, 42, 0, 0, 1,
- 93, 87, 150, 83, 77, 135, 74, 67, 121, 63, 56, 105, 52, 45, 90, 40, 32, 74, 25, 16, 57, 3, 0, 35, 0, 0, 0,
- 95, 87, 138, 85, 77, 123, 75, 67, 109, 63, 57, 95, 53, 45, 81, 41, 33, 66, 26, 17, 50, 4, 0, 28, 0, 0, 0,
- 95, 88, 124, 85, 77, 111, 75, 67, 99, 63, 57, 86, 53, 45, 72, 41, 33, 58, 26, 18, 43, 5, 1, 22, 0, 0, 0,
- 97, 88, 112, 87, 77, 100, 76, 68, 88, 64, 57, 76, 53, 46, 63, 41, 34, 50, 26, 19, 35, 5, 2, 14, 0, 0, 0,
- 99, 87, 99, 87, 78, 88, 76, 68, 77, 65, 57, 65, 53, 46, 54, 41, 35, 42, 27, 20, 27, 6, 2, 5, 0, 0, 0,
- 100, 87, 85, 88, 77, 75, 77, 68, 65, 65, 57, 54, 53, 46, 44, 41, 35, 32, 27, 21, 19, 5, 3, 2, 0, 0, 0,
- 100, 88, 71, 89, 77, 61, 78, 68, 53, 66, 57, 44, 53, 47, 33, 41, 35, 22, 27, 21, 7, 5, 3, 0, 0, 0, 0,
- 101, 87, 60, 90, 77, 52, 79, 68, 44, 66, 58, 34, 53, 47, 25, 41, 35, 13, 26, 22, 0, 5, 3, 0, 0, 0, 0,
- 97, 67, 155, 86, 58, 138, 77, 50, 125, 66, 39, 108, 55, 28, 92, 43, 12, 76, 29, 0, 59, 2, 0, 37, 0, 0, 0,
- 99, 67, 141, 88, 59, 127, 78, 50, 113, 68, 40, 98, 56, 29, 83, 44, 15, 68, 29, 0, 52, 3, 0, 30, 0, 0, 0,
- 100, 68, 129, 89, 59, 115, 80, 51, 103, 68, 41, 89, 56, 30, 75, 44, 16, 61, 30, 0, 45, 4, 0, 24, 0, 0, 0,
- 100, 69, 118, 90, 60, 104, 80, 51, 92, 67, 41, 79, 56, 31, 66, 44, 18, 53, 29, 2, 38, 4, 0, 18, 0, 0, 0,
- 101, 69, 104, 90, 61, 93, 79, 51, 82, 67, 42, 70, 56, 32, 59, 44, 20, 46, 29, 4, 31, 6, 0, 9, 0, 0, 0,
- 102, 69, 93, 90, 61, 83, 80, 52, 72, 68, 42, 61, 56, 33, 50, 43, 20, 38, 29, 5, 23, 7, 0, 4, 0, 0, 0,
- 102, 70, 80, 91, 61, 71, 80, 52, 61, 68, 43, 51, 56, 32, 40, 44, 21, 29, 30, 6, 14, 7, 0, 0, 0, 0, 0,
- 103, 70, 68, 92, 61, 58, 81, 53, 50, 69, 43, 41, 56, 34, 31, 43, 22, 19, 29, 7, 3, 7, 0, 0, 0, 0, 0,
- 104, 70, 57, 92, 61, 48, 82, 53, 40, 69, 43, 32, 56, 34, 22, 43, 23, 10, 29, 8, 0, 6, 0, 0, 0, 0, 0,
- 101, 45, 145, 91, 35, 129, 80, 26, 116, 69, 15, 101, 59, 0, 86, 46, 0, 71, 31, 0, 55, 0, 0, 33, 0, 0, 0,
- 104, 44, 132, 92, 36, 118, 82, 28, 105, 71, 17, 91, 58, 3, 77, 46, 0, 63, 31, 0, 48, 2, 0, 26, 0, 0, 0,
- 104, 46, 121, 93, 37, 107, 82, 30, 96, 70, 20, 83, 58, 6, 70, 46, 0, 57, 32, 0, 41, 4, 0, 20, 0, 0, 0,
- 104, 48, 110, 93, 40, 98, 82, 31, 87, 70, 22, 74, 59, 9, 62, 45, 0, 49, 31, 0, 35, 6, 0, 13, 0, 0, 0,
- 104, 48, 99, 92, 41, 88, 82, 32, 77, 70, 23, 65, 58, 11, 54, 46, 0, 42, 32, 0, 27, 7, 0, 5, 0, 0, 0,
- 105, 50, 88, 93, 41, 77, 82, 34, 68, 71, 24, 57, 58, 13, 46, 45, 1, 35, 31, 0, 21, 7, 0, 2, 0, 0, 0,
- 105, 50, 76, 94, 41, 66, 83, 34, 57, 71, 25, 47, 58, 15, 37, 45, 2, 25, 32, 0, 11, 7, 0, 0, 0, 0, 0,
- 106, 50, 64, 94, 42, 55, 83, 35, 47, 71, 26, 38, 58, 16, 27, 45, 4, 17, 31, 0, 4, 7, 0, 0, 0, 0, 0,
- 106, 51, 54, 95, 42, 45, 83, 35, 38, 71, 27, 30, 58, 16, 19, 45, 5, 7, 30, 0, 0, 6, 0, 0, 0, 0, 0,
- 0, 181, 240, 0, 162, 216, 0, 144, 193, 0, 126, 168, 0, 109, 146, 0, 91, 123, 0, 71, 98, 0, 48, 71, 0, 9, 34,
- 0, 179, 218, 0, 161, 195, 0, 144, 174, 0, 126, 153, 0, 108, 132, 0, 90, 110, 0, 71, 88, 0, 48, 63, 0, 8, 29,
- 0, 178, 197, 0, 159, 177, 0, 143, 159, 0, 125, 139, 0, 107, 119, 0, 90, 99, 0, 71, 79, 0, 48, 55, 0, 8, 22,
- 0, 177, 177, 0, 158, 158, 0, 142, 141, 0, 124, 123, 0, 107, 106, 0, 89, 88, 0, 71, 70, 0, 48, 47, 0, 8, 14,
- 0, 176, 157, 0, 158, 141, 0, 141, 126, 0, 123, 109, 0, 106, 93, 0, 89, 78, 0, 70, 60, 0, 47, 39, 0, 7, 5,
- 0, 175, 138, 0, 157, 123, 0, 141, 110, 0, 123, 96, 0, 105, 81, 0, 88, 67, 0, 70, 51, 0, 48, 30, 0, 6, 0,
- 0, 173, 115, 0, 155, 104, 0, 140, 92, 0, 122, 80, 0, 105, 67, 0, 88, 55, 0, 69, 40, 0, 47, 20, 0, 6, 0,
- 0, 173, 94, 0, 155, 85, 0, 139, 75, 0, 121, 64, 0, 104, 53, 0, 88, 42, 0, 70, 28, 0, 47, 9, 0, 6, 0,
- 0, 173, 76, 0, 155, 70, 0, 138, 61, 0, 122, 53, 0, 104, 44, 0, 87, 32, 0, 69, 18, 0, 47, 0, 0, 6, 0,
- 0, 164, 226, 0, 147, 203, 0, 131, 181, 0, 114, 158, 0, 97, 136, 0, 80, 115, 0, 63, 92, 0, 40, 65, 0, 0, 30,
- 0, 162, 205, 0, 145, 184, 0, 130, 164, 0, 114, 143, 0, 97, 124, 0, 81, 104, 0, 63, 83, 0, 40, 58, 0, 0, 23,
- 0, 162, 187, 0, 145, 167, 0, 130, 150, 0, 113, 131, 0, 96, 112, 0, 80, 93, 0, 62, 74, 0, 40, 50, 0, 0, 16,
- 0, 160, 167, 0, 144, 150, 0, 129, 134, 0, 112, 116, 0, 96, 100, 0, 80, 82, 0, 62, 65, 0, 40, 43, 0, 0, 7,
- 0, 160, 148, 0, 143, 133, 0, 128, 118, 0, 111, 103, 0, 96, 88, 0, 80, 73, 0, 62, 56, 0, 40, 35, 0, 0, 0,
- 0, 158, 130, 0, 142, 117, 0, 127, 104, 0, 111, 89, 0, 95, 76, 0, 79, 62, 0, 62, 46, 0, 40, 26, 0, 0, 0,
- 0, 158, 111, 0, 141, 99, 0, 127, 88, 0, 111, 76, 0, 95, 63, 0, 79, 51, 0, 62, 37, 0, 40, 18, 0, 0, 0,
- 0, 158, 91, 0, 141, 81, 0, 126, 72, 0, 110, 62, 0, 94, 50, 0, 79, 39, 0, 62, 25, 0, 40, 5, 0, 0, 0,
- 0, 157, 74, 0, 141, 66, 0, 126, 59, 0, 110, 49, 0, 94, 40, 0, 78, 29, 0, 61, 15, 0, 40, 0, 0, 0, 0,
- 0, 148, 214, 0, 133, 192, 0, 119, 171, 0, 103, 150, 0, 87, 129, 0, 72, 108, 0, 55, 86, 0, 32, 61, 0, 0, 25,
- 0, 147, 193, 0, 132, 173, 0, 118, 155, 0, 103, 136, 0, 87, 116, 0, 72, 98, 0, 55, 78, 0, 32, 53, 0, 0, 17,
- 0, 147, 176, 0, 132, 158, 0, 118, 142, 0, 102, 124, 0, 87, 106, 0, 72, 88, 0, 55, 69, 0, 33, 46, 0, 0, 9,
- 0, 146, 159, 0, 131, 142, 0, 117, 127, 0, 102, 111, 0, 87, 95, 0, 71, 79, 0, 55, 61, 0, 33, 39, 0, 0, 2,
- 0, 145, 140, 0, 130, 126, 0, 117, 112, 0, 101, 98, 0, 86, 83, 0, 71, 68, 0, 55, 52, 0, 33, 31, 0, 0, 0,
- 0, 144, 124, 0, 130, 111, 0, 116, 99, 0, 101, 84, 0, 86, 72, 0, 71, 59, 0, 55, 43, 0, 33, 23, 0, 0, 0,
- 0, 144, 106, 0, 129, 94, 0, 115, 83, 0, 101, 72, 0, 85, 60, 0, 71, 48, 0, 55, 34, 0, 33, 14, 0, 0, 0,
- 3, 143, 86, 0, 129, 77, 0, 115, 68, 0, 100, 58, 0, 85, 48, 0, 70, 36, 0, 54, 22, 0, 33, 3, 0, 0, 0,
- 18, 143, 72, 13, 128, 63, 0, 115, 57, 0, 100, 47, 0, 85, 37, 0, 70, 26, 0, 54, 13, 0, 33, 0, 0, 0, 0,
- 0, 132, 200, 0, 118, 179, 0, 105, 161, 0, 91, 140, 0, 76, 121, 0, 62, 101, 0, 46, 81, 0, 24, 56, 0, 0, 19,
- 0, 131, 182, 0, 118, 163, 0, 105, 146, 0, 91, 128, 0, 77, 110, 0, 62, 91, 0, 46, 72, 0, 25, 48, 0, 0, 11,
- 0, 131, 165, 0, 117, 149, 0, 104, 133, 0, 91, 116, 0, 77, 99, 0, 62, 82, 0, 46, 64, 0, 25, 41, 0, 0, 4,
- 0, 131, 149, 0, 116, 134, 0, 104, 119, 0, 91, 104, 0, 77, 89, 0, 62, 73, 0, 46, 56, 0, 25, 34, 0, 0, 0,
- 10, 130, 133, 2, 116, 119, 0, 104, 106, 0, 90, 91, 0, 76, 78, 0, 62, 64, 0, 46, 48, 0, 26, 27, 0, 0, 0,
- 23, 130, 118, 20, 116, 104, 13, 103, 93, 3, 89, 79, 0, 76, 67, 0, 62, 54, 0, 46, 39, 0, 26, 19, 0, 0, 0,
- 33, 129, 101, 27, 115, 89, 19, 103, 79, 9, 89, 67, 0, 75, 56, 0, 61, 43, 0, 46, 29, 0, 26, 10, 0, 0, 0,
- 41, 128, 83, 35, 115, 73, 27, 102, 64, 15, 89, 55, 0, 76, 45, 0, 62, 33, 0, 46, 18, 0, 26, 0, 0, 0, 0,
- 43, 129, 69, 38, 115, 61, 30, 102, 54, 17, 89, 45, 2, 75, 34, 0, 61, 23, 0, 46, 9, 0, 26, 0, 0, 0, 0,
- 1, 116, 188, 1, 104, 168, 0, 92, 151, 0, 79, 132, 0, 66, 113, 0, 52, 94, 0, 36, 75, 0, 14, 52, 0, 0, 14,
- 17, 116, 171, 16, 104, 153, 14, 92, 137, 8, 79, 119, 0, 67, 102, 0, 53, 85, 0, 37, 67, 0, 16, 44, 0, 0, 4,
- 31, 116, 155, 27, 104, 140, 21, 92, 125, 13, 79, 109, 3, 66, 93, 0, 53, 77, 0, 37, 59, 0, 16, 38, 0, 0, 0,
- 37, 115, 141, 30, 103, 126, 26, 92, 112, 16, 79, 98, 5, 66, 83, 0, 53, 67, 0, 38, 51, 0, 17, 31, 0, 0, 0,
- 41, 115, 126, 37, 103, 112, 31, 92, 100, 22, 79, 86, 10, 66, 72, 0, 53, 59, 0, 38, 44, 0, 17, 23, 0, 0, 0,
- 48, 115, 111, 41, 102, 99, 34, 91, 88, 24, 78, 76, 14, 66, 63, 0, 53, 50, 0, 38, 36, 0, 18, 15, 0, 0, 0,
- 51, 115, 95, 46, 102, 85, 37, 91, 74, 26, 78, 63, 16, 66, 52, 0, 53, 40, 0, 38, 26, 0, 18, 5, 0, 0, 0,
- 55, 114, 80, 47, 102, 69, 40, 90, 60, 30, 78, 51, 19, 66, 41, 3, 53, 29, 0, 38, 15, 0, 17, 0, 0, 0, 0,
- 56, 114, 66, 50, 102, 58, 40, 91, 50, 32, 78, 41, 18, 66, 32, 4, 53, 21, 0, 38, 5, 0, 17, 0, 0, 0, 0,
- 39, 102, 178, 37, 90, 159, 30, 79, 142, 21, 68, 124, 14, 55, 106, 0, 42, 89, 0, 26, 70, 0, 4, 46, 0, 0, 8,
- 48, 102, 161, 42, 90, 145, 35, 79, 128, 26, 68, 112, 19, 55, 96, 3, 43, 79, 0, 27, 62, 0, 6, 40, 0, 0, 0,
- 50, 102, 147, 44, 90, 132, 37, 79, 118, 30, 68, 102, 20, 56, 87, 7, 43, 72, 0, 28, 55, 0, 6, 34, 0, 0, 0,
- 53, 101, 133, 47, 90, 118, 41, 79, 106, 32, 68, 91, 21, 56, 78, 9, 43, 63, 0, 28, 47, 0, 6, 26, 0, 0, 0,
- 57, 101, 119, 50, 89, 106, 42, 79, 94, 34, 67, 81, 24, 56, 68, 9, 44, 55, 0, 29, 40, 0, 6, 19, 0, 0, 0,
- 60, 100, 105, 50, 90, 94, 45, 80, 83, 36, 68, 71, 24, 56, 59, 11, 44, 46, 0, 29, 32, 0, 7, 12, 0, 0, 0,
- 63, 101, 91, 55, 90, 80, 46, 79, 70, 37, 68, 59, 26, 56, 49, 12, 44, 37, 1, 29, 23, 0, 7, 3, 0, 0, 0,
- 64, 101, 75, 56, 89, 67, 48, 79, 57, 37, 68, 48, 27, 56, 37, 15, 44, 26, 0, 29, 12, 0, 7, 0, 0, 0, 0,
- 66, 101, 64, 58, 89, 55, 49, 79, 47, 39, 68, 38, 27, 56, 29, 14, 44, 18, 1, 30, 2, 0, 7, 0, 0, 0, 0,
- 57, 86, 165, 51, 75, 148, 45, 65, 133, 38, 54, 116, 28, 43, 100, 16, 29, 83, 0, 13, 64, 0, 0, 42, 0, 0, 3,
- 60, 86, 151, 55, 75, 135, 47, 66, 121, 39, 55, 105, 30, 44, 90, 18, 31, 74, 3, 16, 57, 0, 1, 35, 0, 0, 0,
- 62, 86, 139, 56, 75, 123, 49, 66, 110, 40, 55, 95, 30, 44, 81, 19, 31, 66, 4, 17, 51, 0, 1, 29, 0, 0, 0,
- 65, 86, 125, 56, 76, 112, 49, 66, 99, 39, 55, 86, 31, 44, 72, 19, 32, 59, 5, 18, 44, 0, 1, 23, 0, 0, 0,
- 67, 86, 113, 58, 75, 100, 51, 66, 88, 41, 56, 77, 31, 45, 64, 20, 32, 51, 6, 18, 35, 0, 1, 14, 0, 0, 0,
- 69, 86, 99, 61, 76, 88, 52, 66, 78, 43, 56, 66, 32, 45, 55, 20, 33, 42, 7, 19, 27, 0, 1, 6, 0, 0, 0,
- 69, 86, 86, 61, 76, 75, 53, 67, 66, 43, 56, 55, 33, 45, 45, 21, 34, 34, 8, 20, 20, 0, 2, 2, 0, 0, 0,
- 71, 86, 72, 63, 75, 62, 54, 66, 55, 45, 56, 45, 33, 45, 35, 22, 34, 23, 7, 20, 8, 0, 2, 0, 0, 0, 0,
- 71, 86, 62, 64, 75, 53, 55, 66, 46, 45, 56, 36, 33, 46, 27, 22, 34, 15, 8, 20, 0, 0, 2, 0, 0, 0, 0,
- 69, 67, 156, 61, 58, 140, 53, 50, 125, 45, 39, 108, 35, 28, 93, 25, 12, 77, 12, 0, 59, 0, 0, 37, 0, 0, 0,
- 71, 68, 142, 63, 59, 126, 56, 50, 114, 47, 40, 98, 37, 28, 84, 26, 15, 68, 12, 0, 53, 0, 0, 30, 0, 0, 0,
- 72, 68, 130, 63, 59, 116, 56, 50, 104, 47, 40, 90, 38, 30, 75, 27, 16, 61, 13, 0, 46, 0, 0, 24, 0, 0, 0,
- 73, 69, 118, 65, 59, 105, 57, 51, 92, 47, 41, 80, 37, 30, 67, 26, 18, 53, 14, 1, 39, 0, 0, 18, 0, 0, 0,
- 74, 69, 106, 65, 60, 93, 57, 51, 82, 48, 41, 70, 38, 31, 59, 26, 19, 46, 13, 2, 32, 0, 0, 10, 0, 0, 0,
- 76, 69, 95, 66, 61, 84, 58, 52, 73, 48, 42, 61, 37, 32, 50, 26, 20, 38, 14, 4, 24, 0, 0, 4, 0, 0, 0,
- 76, 69, 81, 68, 60, 72, 58, 52, 62, 48, 42, 51, 38, 32, 41, 27, 21, 30, 14, 4, 16, 0, 0, 1, 0, 0, 0,
- 76, 69, 68, 68, 61, 60, 60, 52, 51, 49, 43, 41, 38, 33, 32, 27, 21, 20, 14, 5, 5, 0, 0, 0, 0, 0, 0,
- 78, 70, 59, 69, 61, 50, 60, 52, 42, 49, 43, 34, 39, 33, 24, 27, 22, 13, 14, 7, 1, 0, 0, 0, 0, 0, 0,
- 75, 46, 146, 68, 38, 131, 60, 30, 117, 50, 19, 102, 41, 4, 87, 29, 0, 72, 13, 0, 55, 0, 0, 33, 0, 0, 0,
- 78, 47, 132, 70, 39, 119, 61, 30, 105, 53, 20, 92, 42, 5, 78, 30, 0, 64, 13, 0, 49, 0, 0, 27, 0, 0, 0,
- 79, 48, 122, 70, 40, 108, 62, 32, 96, 52, 22, 84, 42, 9, 71, 30, 0, 58, 14, 0, 42, 0, 0, 20, 0, 0, 0,
- 79, 50, 111, 70, 42, 99, 62, 33, 88, 52, 23, 74, 41, 11, 63, 29, 0, 50, 14, 0, 36, 0, 0, 14, 0, 0, 0,
- 80, 50, 99, 70, 42, 89, 61, 34, 78, 52, 25, 67, 41, 14, 55, 30, 0, 42, 15, 0, 28, 0, 0, 6, 0, 0, 0,
- 81, 51, 89, 71, 43, 78, 62, 35, 69, 52, 25, 58, 42, 15, 47, 30, 3, 36, 15, 0, 22, 0, 0, 3, 0, 0, 0,
- 81, 51, 77, 71, 44, 68, 63, 36, 59, 53, 26, 49, 41, 16, 38, 31, 4, 27, 16, 0, 12, 0, 0, 0, 0, 0, 0,
- 81, 52, 65, 72, 43, 56, 63, 36, 48, 53, 27, 39, 41, 17, 29, 30, 4, 18, 14, 0, 3, 0, 0, 0, 0, 0, 0,
- 81, 52, 55, 73, 44, 47, 64, 36, 39, 53, 28, 32, 42, 18, 21, 31, 6, 9, 14, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 174, 239, 0, 156, 214, 0, 139, 192, 0, 121, 168, 0, 105, 145, 0, 87, 123, 0, 68, 98, 0, 46, 70, 0, 3, 35,
- 0, 172, 217, 0, 155, 194, 0, 139, 173, 0, 121, 152, 0, 104, 130, 0, 87, 110, 0, 69, 88, 0, 46, 63, 0, 4, 28,
- 0, 171, 197, 0, 153, 175, 0, 138, 158, 0, 121, 139, 0, 103, 118, 0, 86, 100, 0, 68, 79, 0, 46, 55, 0, 4, 22,
- 0, 170, 177, 0, 152, 158, 0, 136, 141, 0, 119, 124, 0, 103, 106, 0, 86, 88, 0, 68, 70, 0, 45, 47, 0, 3, 14,
- 0, 169, 157, 0, 152, 141, 0, 136, 126, 0, 119, 109, 0, 102, 94, 0, 86, 78, 0, 68, 60, 0, 46, 39, 0, 3, 5,
- 0, 167, 138, 0, 150, 124, 0, 135, 111, 0, 118, 97, 0, 102, 82, 0, 85, 68, 0, 68, 52, 0, 46, 31, 0, 3, 0,
- 0, 167, 118, 0, 150, 104, 0, 135, 94, 0, 118, 81, 0, 101, 69, 0, 84, 56, 0, 67, 41, 0, 45, 21, 0, 3, 0,
- 0, 166, 97, 0, 149, 87, 0, 134, 77, 0, 117, 67, 0, 101, 56, 0, 85, 44, 0, 67, 30, 0, 45, 10, 0, 3, 0,
- 0, 165, 79, 0, 149, 73, 0, 133, 64, 0, 117, 56, 0, 101, 46, 0, 85, 34, 0, 68, 21, 0, 46, 1, 0, 3, 0,
- 0, 158, 225, 0, 141, 201, 0, 126, 180, 0, 109, 158, 0, 94, 136, 0, 78, 114, 0, 60, 91, 0, 38, 66, 0, 0, 30,
- 0, 156, 203, 0, 140, 183, 0, 125, 164, 0, 109, 143, 0, 94, 124, 0, 78, 104, 0, 61, 83, 0, 38, 57, 0, 0, 23,
- 0, 156, 186, 0, 140, 166, 0, 125, 150, 0, 109, 130, 0, 93, 111, 0, 77, 93, 0, 60, 74, 0, 38, 50, 0, 0, 17,
- 0, 155, 167, 0, 138, 149, 0, 124, 134, 0, 109, 117, 0, 93, 100, 0, 76, 83, 0, 60, 65, 0, 38, 43, 0, 0, 9,
- 0, 153, 147, 0, 138, 134, 0, 124, 120, 0, 107, 103, 0, 92, 88, 0, 77, 73, 0, 60, 56, 0, 38, 35, 0, 0, 0,
- 0, 153, 131, 0, 137, 118, 0, 122, 105, 0, 107, 90, 0, 91, 76, 0, 76, 63, 0, 60, 47, 0, 39, 28, 0, 0, 0,
- 0, 153, 111, 0, 136, 100, 0, 123, 90, 0, 107, 77, 0, 92, 65, 0, 76, 52, 0, 60, 37, 0, 38, 18, 0, 0, 0,
- 0, 152, 93, 0, 136, 82, 0, 122, 74, 0, 106, 63, 0, 91, 52, 0, 76, 40, 0, 59, 26, 0, 38, 6, 0, 0, 0,
- 0, 151, 78, 0, 136, 69, 0, 121, 61, 0, 106, 52, 0, 91, 43, 0, 76, 32, 0, 59, 17, 0, 38, 0, 0, 0, 0,
- 0, 143, 213, 0, 128, 191, 0, 115, 171, 0, 100, 149, 0, 84, 128, 0, 69, 108, 0, 52, 86, 0, 30, 61, 0, 0, 25,
- 0, 142, 193, 0, 127, 173, 0, 114, 154, 0, 99, 134, 0, 84, 116, 0, 69, 98, 0, 52, 77, 0, 31, 53, 0, 0, 18,
- 0, 141, 176, 0, 127, 158, 0, 114, 141, 0, 98, 122, 0, 84, 105, 0, 69, 88, 0, 53, 69, 0, 31, 46, 0, 0, 9,
- 0, 141, 159, 0, 126, 142, 0, 113, 127, 0, 98, 110, 0, 83, 95, 0, 69, 78, 0, 53, 60, 0, 32, 39, 0, 0, 2,
- 0, 140, 140, 0, 126, 126, 0, 112, 112, 0, 98, 98, 0, 83, 83, 0, 68, 69, 0, 52, 52, 0, 31, 31, 0, 0, 0,
- 0, 140, 124, 0, 125, 112, 0, 112, 100, 0, 97, 86, 0, 83, 72, 0, 68, 59, 0, 52, 44, 0, 31, 23, 0, 0, 0,
- 0, 139, 106, 0, 125, 96, 0, 111, 85, 0, 97, 72, 0, 83, 62, 0, 68, 49, 0, 52, 35, 0, 31, 15, 0, 0, 0,
- 0, 138, 88, 0, 124, 79, 0, 111, 70, 0, 96, 59, 0, 82, 48, 0, 68, 38, 0, 52, 24, 0, 31, 4, 0, 0, 0,
- 0, 139, 76, 0, 124, 66, 0, 111, 58, 0, 96, 50, 0, 82, 40, 0, 68, 29, 0, 52, 15, 0, 31, 0, 0, 0, 0,
- 0, 129, 200, 0, 114, 179, 0, 102, 160, 0, 87, 139, 0, 74, 120, 0, 60, 101, 0, 44, 81, 0, 22, 56, 0, 0, 19,
- 0, 127, 181, 0, 114, 163, 0, 102, 146, 0, 88, 127, 0, 74, 109, 0, 60, 91, 0, 44, 72, 0, 23, 48, 0, 0, 11,
- 0, 127, 166, 0, 113, 148, 0, 101, 133, 0, 87, 115, 0, 74, 99, 0, 60, 82, 0, 44, 64, 0, 23, 42, 0, 0, 4,
- 0, 127, 150, 0, 113, 134, 0, 101, 119, 0, 87, 104, 0, 74, 89, 0, 60, 73, 0, 44, 56, 0, 23, 35, 0, 0, 0,
- 0, 125, 134, 0, 112, 118, 0, 100, 106, 0, 87, 92, 0, 73, 78, 0, 60, 64, 0, 44, 48, 0, 23, 27, 0, 0, 0,
- 0, 125, 118, 0, 112, 105, 0, 100, 94, 0, 86, 80, 0, 73, 68, 0, 60, 54, 0, 44, 39, 0, 23, 20, 0, 0, 0,
- 0, 125, 101, 0, 111, 90, 0, 99, 80, 0, 86, 69, 0, 73, 58, 0, 59, 45, 0, 44, 30, 0, 23, 11, 0, 0, 0,
- 0, 124, 85, 0, 111, 75, 0, 99, 66, 0, 86, 56, 0, 73, 45, 0, 59, 34, 0, 44, 20, 0, 23, 1, 0, 0, 0,
- 0, 125, 72, 0, 111, 62, 0, 99, 56, 0, 86, 46, 0, 73, 36, 0, 60, 26, 0, 44, 12, 0, 23, 0, 0, 0, 0,
- 0, 114, 188, 0, 101, 167, 0, 89, 150, 0, 77, 131, 0, 64, 113, 0, 50, 95, 0, 34, 75, 0, 12, 52, 0, 0, 14,
- 0, 113, 170, 0, 101, 153, 0, 89, 137, 0, 77, 120, 0, 64, 102, 0, 50, 85, 0, 35, 67, 0, 12, 44, 0, 0, 4,
- 0, 113, 156, 0, 100, 139, 0, 89, 125, 0, 77, 109, 0, 64, 92, 0, 51, 77, 0, 35, 60, 0, 12, 38, 0, 0, 0,
- 0, 112, 141, 0, 100, 126, 0, 89, 113, 0, 77, 98, 0, 64, 83, 0, 51, 68, 0, 35, 51, 0, 12, 30, 0, 0, 0,
- 0, 112, 127, 0, 100, 112, 0, 89, 100, 0, 76, 87, 0, 64, 74, 0, 51, 59, 0, 35, 44, 0, 13, 24, 0, 0, 0,
- 0, 112, 111, 0, 100, 100, 0, 88, 88, 0, 76, 76, 0, 64, 64, 0, 51, 52, 0, 36, 37, 0, 13, 17, 0, 0, 0,
- 0, 111, 96, 0, 99, 85, 0, 88, 76, 0, 76, 64, 0, 64, 53, 0, 51, 41, 0, 36, 27, 0, 13, 6, 0, 0, 0,
- 0, 111, 81, 0, 99, 71, 0, 88, 62, 0, 76, 52, 0, 64, 43, 0, 51, 31, 0, 36, 17, 0, 13, 0, 0, 0, 0,
- 0, 111, 69, 0, 99, 60, 0, 88, 52, 0, 75, 43, 0, 63, 34, 0, 51, 21, 0, 36, 7, 0, 13, 0, 0, 0, 0,
- 0, 99, 177, 0, 88, 158, 0, 77, 141, 0, 66, 123, 0, 53, 106, 0, 40, 89, 0, 25, 71, 0, 5, 47, 0, 0, 8,
- 0, 99, 160, 0, 88, 144, 0, 77, 129, 0, 66, 112, 0, 54, 97, 0, 41, 80, 0, 26, 62, 0, 5, 40, 0, 0, 0,
- 0, 99, 147, 0, 87, 132, 0, 78, 117, 0, 66, 102, 0, 54, 87, 0, 42, 72, 0, 26, 55, 0, 5, 34, 0, 0, 0,
- 0, 99, 134, 0, 88, 119, 0, 77, 107, 0, 66, 92, 0, 54, 78, 0, 42, 64, 0, 27, 48, 0, 5, 27, 0, 0, 0,
- 0, 99, 120, 0, 87, 107, 0, 78, 94, 0, 66, 81, 0, 54, 68, 0, 42, 55, 0, 27, 40, 0, 6, 20, 0, 0, 0,
- 0, 98, 105, 0, 87, 94, 0, 77, 84, 0, 65, 71, 0, 55, 59, 0, 42, 47, 0, 28, 33, 0, 6, 12, 0, 0, 0,
- 0, 98, 93, 0, 87, 81, 0, 77, 72, 0, 66, 61, 0, 54, 49, 0, 42, 37, 0, 28, 24, 0, 6, 4, 0, 0, 0,
- 0, 98, 77, 0, 87, 68, 0, 77, 59, 0, 65, 49, 0, 54, 39, 0, 42, 27, 0, 29, 14, 0, 6, 0, 0, 0, 0,
- 1, 98, 65, 7, 87, 56, 0, 77, 49, 0, 66, 41, 0, 54, 30, 0, 42, 19, 0, 29, 3, 0, 6, 0, 0, 0, 0,
- 0, 84, 166, 0, 74, 149, 0, 64, 134, 0, 53, 117, 0, 41, 100, 0, 28, 83, 0, 11, 64, 0, 0, 42, 0, 0, 3,
- 0, 84, 151, 0, 74, 135, 0, 64, 121, 0, 53, 105, 0, 42, 90, 0, 30, 75, 0, 14, 58, 0, 0, 36, 0, 0, 0,
- 0, 84, 138, 0, 74, 124, 1, 64, 110, 0, 54, 95, 0, 43, 81, 0, 30, 67, 0, 15, 51, 0, 1, 29, 0, 0, 0,
- 14, 84, 126, 12, 74, 112, 2, 65, 99, 0, 54, 85, 0, 44, 73, 0, 31, 59, 0, 16, 44, 0, 1, 23, 0, 0, 0,
- 16, 84, 113, 13, 74, 100, 6, 65, 89, 0, 54, 77, 0, 44, 65, 0, 31, 51, 0, 17, 36, 0, 1, 16, 0, 0, 0,
- 24, 84, 100, 18, 74, 88, 13, 65, 78, 2, 55, 68, 0, 44, 55, 0, 32, 43, 0, 18, 28, 0, 1, 6, 0, 0, 0,
- 26, 84, 87, 24, 74, 76, 17, 65, 67, 7, 54, 57, 0, 44, 46, 0, 32, 35, 0, 19, 21, 0, 2, 3, 0, 0, 0,
- 30, 84, 74, 28, 74, 64, 20, 65, 55, 12, 55, 46, 0, 44, 35, 0, 32, 24, 0, 18, 9, 0, 1, 0, 0, 0, 0,
- 32, 84, 63, 28, 74, 54, 21, 65, 47, 13, 54, 38, 0, 44, 28, 0, 32, 16, 0, 18, 1, 0, 1, 0, 0, 0, 0,
- 30, 67, 155, 20, 58, 139, 20, 49, 126, 12, 39, 110, 0, 27, 94, 0, 13, 77, 0, 0, 60, 0, 0, 37, 0, 0, 0,
- 35, 67, 142, 30, 58, 126, 23, 50, 114, 16, 40, 99, 7, 29, 85, 0, 15, 69, 0, 0, 52, 0, 0, 30, 0, 0, 0,
- 35, 68, 131, 30, 59, 116, 27, 50, 104, 18, 40, 90, 9, 29, 76, 0, 17, 62, 0, 2, 46, 0, 0, 24, 0, 0, 0,
- 37, 69, 119, 33, 59, 106, 27, 51, 94, 21, 41, 80, 9, 30, 67, 0, 18, 54, 0, 3, 39, 0, 0, 18, 0, 0, 0,
- 40, 69, 107, 36, 59, 94, 28, 51, 84, 18, 41, 72, 10, 31, 60, 0, 19, 47, 0, 4, 32, 0, 0, 10, 0, 0, 0,
- 42, 69, 95, 36, 59, 84, 29, 51, 74, 19, 41, 63, 10, 31, 52, 0, 20, 39, 0, 4, 25, 0, 0, 4, 0, 0, 0,
- 43, 69, 83, 38, 60, 73, 32, 51, 62, 23, 42, 53, 11, 31, 42, 0, 20, 31, 0, 5, 17, 0, 0, 1, 0, 0, 0,
- 45, 69, 70, 39, 60, 60, 33, 51, 52, 24, 42, 43, 13, 32, 33, 0, 21, 21, 0, 5, 6, 0, 0, 0, 0, 0, 0,
- 47, 69, 59, 41, 60, 51, 34, 51, 43, 24, 42, 35, 12, 33, 26, 1, 22, 14, 0, 5, 1, 0, 0, 0, 0, 0, 0,
- 46, 48, 146, 42, 40, 131, 36, 32, 118, 27, 22, 103, 17, 6, 88, 5, 0, 73, 0, 0, 55, 0, 0, 33, 0, 0, 0,
- 48, 48, 133, 44, 40, 119, 37, 32, 107, 28, 22, 93, 20, 8, 79, 7, 0, 65, 0, 0, 49, 0, 0, 27, 0, 0, 0,
- 48, 50, 123, 44, 41, 109, 37, 33, 97, 30, 23, 83, 21, 11, 71, 8, 0, 58, 0, 0, 42, 0, 0, 21, 0, 0, 0,
- 49, 51, 111, 45, 42, 99, 38, 34, 87, 29, 25, 75, 20, 13, 63, 8, 0, 51, 0, 0, 36, 0, 0, 14, 0, 0, 0,
- 52, 52, 100, 44, 43, 89, 38, 35, 79, 29, 26, 68, 19, 15, 56, 10, 1, 43, 0, 0, 28, 0, 0, 6, 0, 0, 0,
- 52, 52, 90, 47, 44, 79, 39, 36, 70, 30, 27, 59, 20, 16, 47, 9, 2, 36, 0, 0, 22, 0, 0, 2, 0, 0, 0,
- 52, 53, 78, 46, 44, 68, 39, 37, 60, 32, 27, 49, 22, 17, 39, 10, 3, 28, 0, 0, 12, 0, 0, 0, 0, 0, 0,
- 53, 53, 66, 47, 44, 57, 40, 36, 48, 32, 27, 39, 22, 18, 30, 9, 4, 18, 0, 0, 3, 0, 0, 0, 0, 0, 0,
- 54, 53, 57, 48, 45, 49, 41, 37, 41, 33, 28, 32, 22, 19, 23, 11, 6, 10, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 255, 255, 255, 225, 226, 228, 199, 200, 202, 173, 174, 178, 147, 149, 152,
+ 123, 125, 128, 99, 99, 102, 69, 70, 71, 34, 30, 31, 255, 253, 229,
+ 226, 224, 203, 200, 199, 182, 173, 173, 158, 149, 148, 135, 125, 124, 113,
+ 99, 99, 90, 70, 69, 63, 33, 29, 24, 255, 251, 204, 228, 223, 182,
+ 201, 198, 163, 174, 172, 142, 150, 147, 122, 125, 123, 101, 99, 98, 80,
+ 70, 68, 54, 32, 28, 16, 255, 249, 179, 230, 222, 160, 203, 197, 144,
+ 174, 170, 124, 150, 145, 105, 125, 122, 88, 99, 97, 69, 70, 68, 46,
+ 31, 28, 6, 255, 247, 154, 229, 220, 138, 203, 195, 122, 176, 169, 107,
+ 150, 145, 91, 125, 121, 74, 100, 96, 57, 70, 67, 35, 29, 26, 0,
+ 255, 246, 128, 231, 217, 114, 205, 194, 101, 176, 167, 88, 150, 144, 75,
+ 125, 120, 60, 100, 96, 44, 70, 66, 24, 28, 26, 0, 255, 244, 96,
+ 231, 217, 87, 203, 192, 78, 175, 167, 66, 150, 143, 56, 125, 119, 43,
+ 100, 95, 29, 69, 66, 7, 26, 26, 0, 255, 243, 51, 232, 215, 51,
+ 204, 191, 43, 176, 165, 38, 150, 142, 28, 125, 118, 17, 99, 94, 0,
+ 68, 65, 0, 24, 25, 0, 255, 241, 0, 231, 215, 0, 203, 190, 0,
+ 176, 164, 0, 150, 141, 0, 126, 117, 0, 99, 93, 0, 68, 65, 0,
+ 24, 25, 0, 252, 228, 238, 222, 201, 211, 197, 180, 190, 171, 156, 166,
+ 147, 133, 143, 123, 111, 119, 99, 88, 94, 71, 61, 66, 34, 22, 26,
+ 254, 226, 213, 224, 201, 191, 199, 179, 171, 172, 155, 148, 147, 133, 128,
+ 123, 110, 106, 98, 87, 83, 70, 59, 57, 33, 21, 18, 254, 224, 191,
+ 224, 199, 172, 200, 177, 153, 173, 154, 133, 147, 132, 115, 123, 109, 94,
+ 98, 86, 74, 70, 59, 49, 32, 21, 9, 255, 222, 168, 227, 198, 150,
+ 200, 175, 135, 173, 153, 118, 148, 130, 99, 123, 109, 82, 98, 86, 64,
+ 69, 58, 40, 31, 19, 0, 255, 221, 145, 227, 196, 129, 201, 174, 115,
+ 173, 151, 99, 148, 129, 85, 124, 108, 69, 98, 85, 52, 69, 58, 30,
+ 30, 19, 0, 255, 219, 121, 227, 195, 109, 201, 174, 97, 174, 150, 83,
+ 148, 129, 70, 124, 107, 55, 98, 84, 40, 69, 58, 19, 28, 18, 0,
+ 255, 218, 92, 229, 194, 82, 202, 173, 75, 174, 150, 63, 149, 128, 51,
+ 124, 106, 39, 98, 84, 24, 68, 57, 3, 26, 18, 0, 255, 217, 54,
+ 228, 193, 52, 201, 172, 46, 174, 148, 36, 148, 127, 27, 123, 105, 14,
+ 98, 83, 0, 68, 56, 0, 25, 18, 0, 255, 216, 0, 229, 192, 2,
+ 202, 171, 4, 173, 148, 0, 148, 126, 0, 124, 105, 0, 98, 83, 0,
+ 68, 56, 0, 24, 17, 0, 249, 204, 223, 219, 181, 199, 195, 160, 178,
+ 170, 140, 156, 146, 119, 134, 123, 99, 112, 98, 77, 88, 70, 52, 61,
+ 34, 11, 20, 250, 201, 200, 221, 180, 178, 197, 159, 161, 171, 139, 139,
+ 147, 119, 120, 123, 98, 99, 98, 77, 78, 69, 51, 52, 34, 11, 10,
+ 252, 201, 180, 223, 179, 162, 197, 159, 144, 170, 138, 125, 146, 117, 107,
+ 122, 97, 89, 98, 76, 69, 69, 50, 44, 32, 11, 2, 252, 199, 158,
+ 222, 177, 143, 199, 158, 127, 171, 137, 110, 147, 117, 93, 122, 96, 76,
+ 97, 75, 58, 69, 50, 36, 32, 10, 0, 253, 198, 137, 223, 177, 123,
+ 198, 156, 110, 171, 136, 95, 146, 116, 80, 122, 96, 65, 97, 75, 47,
+ 69, 50, 25, 30, 10, 0, 254, 197, 115, 225, 175, 104, 198, 156, 92,
+ 172, 135, 79, 147, 115, 66, 123, 95, 52, 98, 74, 37, 69, 49, 15,
+ 29, 10, 0, 254, 196, 89, 224, 175, 80, 199, 154, 70, 172, 134, 59,
+ 146, 114, 48, 122, 95, 36, 97, 74, 21, 68, 49, 0, 27, 9, 0,
+ 255, 195, 57, 225, 173, 52, 198, 154, 44, 172, 133, 36, 147, 113, 26,
+ 123, 94, 14, 98, 74, 0, 68, 49, 0, 26, 10, 0, 254, 194, 15,
+ 225, 172, 12, 198, 153, 7, 172, 132, 3, 146, 113, 0, 123, 93, 0,
+ 98, 73, 0, 68, 49, 0, 26, 9, 0, 246, 178, 209, 218, 159, 186,
+ 194, 140, 166, 168, 122, 145, 144, 104, 125, 121, 85, 103, 97, 65, 81,
+ 69, 41, 55, 34, 0, 12, 248, 176, 186, 219, 157, 166, 195, 139, 149,
+ 168, 121, 130, 144, 103, 111, 121, 85, 91, 97, 65, 71, 69, 41, 46,
+ 34, 0, 4, 249, 175, 168, 220, 156, 150, 196, 139, 135, 169, 121, 116,
+ 144, 103, 100, 122, 84, 83, 98, 65, 63, 70, 41, 39, 33, 0, 0,
+ 249, 175, 148, 220, 155, 133, 196, 138, 119, 169, 120, 103, 145, 101, 87,
+ 121, 83, 71, 97, 65, 54, 69, 41, 31, 32, 0, 0, 249, 173, 128,
+ 222, 154, 115, 195, 137, 102, 170, 119, 88, 145, 101, 74, 122, 83, 59,
+ 97, 64, 43, 68, 40, 20, 30, 0, 0, 250, 172, 108, 221, 154, 98,
+ 195, 136, 86, 170, 118, 73, 145, 100, 61, 122, 82, 48, 97, 63, 32,
+ 69, 40, 11, 28, 0, 0, 250, 171, 85, 221, 153, 76, 196, 136, 67,
+ 170, 117, 56, 145, 99, 44, 121, 82, 33, 97, 63, 17, 68, 40, 0,
+ 28, 0, 0, 251, 171, 58, 222, 152, 50, 197, 135, 43, 169, 117, 34,
+ 146, 99, 25, 121, 81, 10, 96, 63, 0, 68, 40, 0, 27, 0, 0,
+ 250, 170, 26, 222, 151, 19, 196, 134, 13, 169, 116, 4, 145, 99, 0,
+ 122, 81, 0, 97, 63, 0, 67, 40, 0, 26, 0, 0, 244, 153, 194,
+ 215, 136, 173, 192, 121, 155, 167, 104, 135, 143, 89, 115, 121, 72, 96,
+ 97, 54, 75, 70, 31, 49, 34, 0, 6, 245, 153, 173, 216, 136, 155,
+ 192, 120, 138, 167, 104, 121, 144, 88, 103, 121, 71, 85, 97, 54, 66,
+ 69, 31, 42, 34, 0, 0, 246, 152, 157, 217, 135, 140, 193, 120, 126,
+ 167, 103, 109, 143, 88, 92, 121, 72, 76, 97, 54, 58, 69, 31, 35,
+ 33, 0, 0, 245, 150, 139, 218, 134, 125, 193, 119, 111, 167, 103, 96,
+ 144, 87, 80, 121, 71, 66, 96, 53, 49, 68, 31, 26, 32, 0, 0,
+ 246, 151, 122, 218, 133, 108, 194, 118, 96, 168, 102, 81, 144, 86, 69,
+ 120, 71, 55, 95, 53, 39, 68, 30, 17, 31, 0, 0, 248, 150, 103,
+ 218, 133, 91, 193, 118, 81, 168, 102, 69, 143, 86, 56, 120, 70, 43,
+ 96, 53, 28, 68, 31, 6, 29, 0, 0, 247, 149, 81, 218, 132, 72,
+ 194, 117, 62, 168, 101, 52, 144, 86, 42, 121, 70, 29, 96, 52, 13,
+ 68, 30, 0, 28, 0, 0, 247, 148, 55, 219, 131, 50, 194, 117, 43,
+ 167, 101, 32, 144, 85, 22, 120, 69, 8, 96, 52, 0, 67, 30, 0,
+ 27, 0, 0, 247, 147, 29, 218, 131, 24, 194, 116, 20, 168, 100, 11,
+ 144, 85, 0, 120, 69, 0, 96, 52, 0, 67, 30, 0, 26, 0, 0,
+ 242, 130, 179, 214, 114, 160, 190, 101, 143, 166, 87, 125, 143, 72, 107,
+ 120, 58, 88, 96, 42, 68, 69, 17, 44, 35, 0, 0, 243, 129, 161,
+ 215, 114, 143, 191, 101, 128, 166, 87, 113, 143, 73, 96, 120, 58, 79,
+ 96, 41, 60, 69, 18, 37, 33, 0, 0, 243, 129, 146, 216, 114, 130,
+ 192, 101, 117, 166, 87, 101, 143, 72, 86, 121, 58, 69, 96, 42, 52,
+ 69, 18, 29, 31, 0, 0, 243, 128, 130, 216, 114, 115, 191, 101, 102,
+ 165, 86, 88, 142, 72, 75, 120, 58, 60, 95, 42, 43, 68, 19, 21,
+ 30, 0, 0, 244, 127, 112, 217, 113, 101, 192, 99, 89, 166, 85, 75,
+ 142, 72, 63, 119, 57, 50, 96, 41, 35, 68, 19, 13, 30, 0, 0,
+ 244, 127, 96, 216, 112, 86, 191, 99, 75, 166, 86, 64, 143, 72, 52,
+ 120, 57, 40, 95, 41, 24, 67, 20, 1, 29, 0, 0, 245, 126, 77,
+ 216, 113, 68, 191, 100, 59, 166, 85, 49, 142, 71, 38, 119, 57, 26,
+ 95, 41, 10, 67, 20, 0, 28, 0, 0, 244, 126, 55, 216, 112, 48,
+ 191, 99, 40, 166, 85, 31, 143, 71, 20, 119, 57, 6, 95, 42, 0,
+ 67, 20, 0, 28, 0, 0, 245, 126, 33, 217, 112, 26, 192, 99, 22,
+ 166, 84, 11, 142, 70, 0, 119, 57, 0, 95, 41, 0, 66, 20, 0,
+ 27, 0, 0, 241, 102, 167, 213, 90, 149, 189, 79, 133, 165, 66, 115,
+ 141, 54, 98, 119, 41, 81, 96, 25, 63, 69, 0, 38, 30, 0, 0,
+ 241, 102, 149, 213, 90, 133, 189, 79, 119, 165, 66, 103, 142, 55, 88,
+ 119, 41, 71, 96, 25, 53, 69, 0, 31, 28, 0, 0, 241, 102, 135,
+ 214, 90, 121, 190, 79, 108, 165, 66, 92, 141, 55, 78, 119, 42, 63,
+ 96, 26, 46, 69, 0, 24, 28, 0, 0, 241, 101, 120, 214, 90, 107,
+ 189, 79, 95, 165, 67, 83, 141, 54, 68, 118, 41, 54, 95, 27, 39,
+ 68, 0, 16, 27, 0, 0, 241, 102, 106, 213, 90, 93, 189, 78, 82,
+ 164, 67, 70, 141, 55, 58, 118, 42, 45, 94, 27, 29, 67, 2, 6,
+ 27, 0, 0, 242, 101, 90, 214, 89, 79, 190, 79, 69, 166, 67, 59,
+ 141, 55, 47, 118, 41, 35, 95, 27, 19, 67, 3, 0, 26, 0, 0,
+ 242, 102, 72, 213, 89, 63, 191, 79, 56, 164, 67, 45, 141, 55, 34,
+ 118, 42, 22, 94, 28, 6, 67, 3, 0, 26, 0, 0, 242, 100, 51,
+ 214, 89, 45, 190, 78, 38, 164, 67, 30, 141, 55, 18, 118, 42, 3,
+ 95, 28, 0, 66, 4, 0, 26, 0, 0, 243, 100, 33, 214, 90, 27,
+ 190, 78, 22, 165, 67, 13, 141, 55, 0, 118, 43, 0, 94, 29, 0,
+ 66, 5, 0, 26, 0, 0, 237, 69, 153, 211, 58, 135, 187, 51, 121,
+ 163, 41, 105, 141, 28, 90, 118, 15, 73, 96, 0, 56, 68, 0, 33,
+ 25, 0, 0, 239, 67, 137, 212, 60, 123, 189, 50, 110, 163, 41, 94,
+ 141, 29, 79, 118, 17, 65, 95, 0, 48, 69, 0, 26, 25, 0, 0,
+ 240, 69, 124, 211, 60, 111, 188, 50, 98, 163, 42, 85, 141, 31, 72,
+ 118, 18, 57, 94, 0, 41, 68, 0, 19, 25, 0, 0, 240, 70, 112,
+ 212, 61, 99, 188, 52, 87, 163, 41, 74, 140, 31, 62, 118, 20, 48,
+ 94, 2, 32, 68, 0, 11, 24, 0, 0, 239, 70, 98, 212, 62, 86,
+ 188, 53, 77, 164, 42, 64, 140, 32, 52, 118, 20, 40, 94, 3, 24,
+ 67, 0, 3, 23, 0, 0, 239, 71, 85, 212, 61, 74, 187, 53, 65,
+ 163, 44, 54, 140, 34, 43, 118, 22, 30, 95, 3, 14, 67, 0, 0,
+ 23, 0, 0, 239, 70, 67, 212, 62, 59, 188, 53, 51, 163, 45, 42,
+ 141, 34, 31, 117, 22, 17, 94, 5, 2, 66, 0, 0, 23, 0, 0,
+ 239, 71, 50, 213, 62, 43, 188, 54, 37, 164, 45, 28, 139, 34, 16,
+ 117, 22, 2, 94, 7, 0, 65, 0, 0, 23, 0, 0, 240, 71, 34,
+ 212, 63, 29, 189, 54, 24, 163, 46, 15, 139, 36, 2, 117, 25, 0,
+ 94, 8, 0, 66, 0, 0, 23, 0, 0, 237, 0, 140, 209, 0, 124,
+ 186, 0, 112, 162, 0, 97, 141, 0, 82, 118, 0, 67, 95, 0, 49,
+ 68, 0, 27, 20, 0, 0, 237, 0, 126, 210, 0, 113, 187, 0, 99,
+ 163, 0, 86, 139, 0, 72, 118, 0, 58, 95, 0, 42, 67, 0, 20,
+ 20, 0, 0, 237, 1, 114, 209, 1, 102, 187, 0, 90, 163, 0, 78,
+ 139, 0, 64, 118, 0, 50, 95, 0, 35, 67, 0, 13, 20, 0, 0,
+ 236, 16, 102, 209, 7, 91, 186, 0, 80, 162, 0, 68, 139, 0, 56,
+ 117, 0, 43, 94, 0, 27, 67, 0, 6, 20, 0, 0, 238, 15, 89,
+ 209, 13, 79, 186, 6, 69, 162, 0, 58, 139, 0, 47, 117, 0, 34,
+ 93, 0, 20, 66, 0, 2, 20, 0, 0, 237, 20, 78, 210, 12, 68,
+ 187, 4, 59, 163, 0, 49, 139, 0, 38, 116, 0, 26, 94, 0, 11,
+ 66, 0, 0, 20, 0, 0, 237, 25, 64, 210, 18, 56, 186, 11, 48,
+ 162, 4, 39, 138, 0, 27, 117, 0, 14, 93, 0, 0, 66, 0, 0,
+ 20, 0, 0, 238, 25, 48, 210, 22, 43, 186, 15, 35, 162, 8, 26,
+ 140, 0, 14, 117, 0, 0, 93, 0, 0, 65, 0, 0, 20, 0, 0,
+ 238, 28, 35, 210, 21, 30, 187, 15, 24, 162, 8, 16, 139, 1, 2,
+ 117, 0, 0, 93, 0, 0, 65, 0, 0, 22, 0, 0, 219, 242, 252,
+ 195, 214, 225, 172, 191, 201, 148, 165, 175, 127, 142, 150, 106, 119, 126,
+ 84, 95, 101, 58, 66, 72, 24, 27, 32, 222, 239, 226, 196, 213, 202,
+ 173, 189, 180, 150, 165, 158, 129, 141, 135, 107, 118, 113, 85, 94, 90,
+ 58, 66, 63, 21, 26, 24, 223, 237, 203, 198, 211, 182, 175, 188, 163,
+ 152, 164, 141, 129, 140, 121, 107, 117, 101, 85, 93, 80, 58, 64, 54,
+ 21, 26, 18, 226, 236, 179, 201, 210, 160, 177, 187, 143, 153, 162, 125,
+ 130, 139, 106, 108, 116, 89, 85, 92, 69, 58, 64, 45, 20, 25, 8,
+ 227, 234, 153, 201, 208, 139, 178, 185, 124, 154, 161, 107, 131, 138, 91,
+ 108, 115, 75, 85, 91, 58, 58, 63, 35, 17, 25, 0, 229, 233, 130,
+ 203, 207, 116, 178, 184, 104, 154, 160, 90, 131, 137, 76, 109, 114, 62,
+ 85, 90, 46, 58, 63, 25, 16, 24, 0, 230, 231, 100, 202, 205, 90,
+ 179, 183, 80, 154, 159, 69, 131, 136, 57, 109, 113, 46, 86, 90, 32,
+ 58, 63, 10, 14, 24, 0, 230, 230, 65, 204, 204, 58, 180, 182, 52,
+ 155, 157, 44, 132, 135, 35, 110, 113, 24, 86, 89, 9, 57, 62, 0,
+ 11, 24, 0, 232, 230, 19, 204, 204, 19, 180, 181, 17, 155, 157, 10,
+ 131, 134, 2, 109, 112, 0, 85, 89, 0, 57, 62, 0, 10, 23, 0,
+ 218, 216, 236, 194, 192, 211, 172, 171, 188, 149, 149, 164, 128, 127, 141,
+ 106, 106, 119, 84, 84, 94, 59, 57, 66, 25, 18, 26, 221, 214, 211,
+ 196, 191, 190, 174, 170, 170, 150, 148, 148, 128, 126, 127, 107, 105, 106,
+ 85, 83, 84, 59, 56, 58, 23, 17, 18, 222, 213, 190, 197, 189, 170,
+ 175, 169, 153, 151, 147, 133, 129, 126, 113, 108, 105, 94, 85, 82, 74,
+ 59, 56, 49, 22, 17, 11, 224, 211, 168, 199, 188, 151, 175, 168, 135,
+ 152, 146, 117, 129, 124, 99, 107, 103, 82, 84, 82, 64, 59, 55, 41,
+ 21, 17, 1, 224, 210, 145, 199, 187, 130, 176, 166, 117, 152, 145, 101,
+ 129, 123, 86, 107, 103, 70, 85, 81, 53, 58, 55, 31, 19, 17, 0,
+ 227, 208, 123, 200, 186, 110, 177, 165, 98, 153, 143, 84, 130, 122, 70,
+ 108, 102, 57, 85, 80, 41, 58, 54, 20, 18, 16, 0, 227, 208, 97,
+ 202, 185, 86, 177, 164, 77, 153, 142, 65, 130, 122, 54, 108, 101, 42,
+ 85, 80, 27, 58, 54, 7, 16, 16, 0, 228, 206, 66, 202, 184, 58,
+ 178, 163, 50, 154, 141, 42, 131, 121, 33, 109, 101, 21, 86, 79, 5,
+ 58, 54, 0, 13, 16, 0, 228, 206, 29, 202, 183, 25, 178, 163, 20,
+ 154, 141, 15, 131, 121, 5, 108, 100, 0, 85, 79, 0, 58, 53, 0,
+ 13, 16, 0, 217, 193, 221, 193, 172, 198, 172, 153, 178, 149, 133, 154,
+ 128, 114, 132, 107, 94, 111, 85, 74, 89, 59, 49, 61, 25, 8, 22,
+ 219, 191, 198, 195, 171, 178, 173, 153, 159, 149, 132, 139, 128, 113, 119,
+ 107, 94, 100, 85, 73, 79, 59, 48, 52, 25, 7, 14, 221, 191, 180,
+ 196, 170, 160, 174, 152, 144, 150, 132, 125, 129, 113, 107, 107, 93, 89,
+ 85, 73, 69, 59, 48, 45, 23, 7, 4, 222, 189, 159, 197, 169, 142,
+ 174, 151, 127, 151, 131, 110, 129, 112, 94, 108, 93, 78, 85, 72, 60,
+ 58, 47, 37, 22, 7, 0, 223, 188, 138, 197, 168, 123, 175, 150, 109,
+ 151, 130, 95, 130, 111, 81, 108, 92, 65, 85, 72, 49, 59, 47, 27,
+ 21, 7, 0, 224, 187, 118, 198, 167, 105, 176, 149, 93, 152, 129, 79,
+ 130, 110, 68, 108, 91, 54, 85, 71, 38, 59, 47, 17, 18, 7, 0,
+ 224, 187, 93, 199, 166, 83, 176, 148, 73, 152, 128, 62, 129, 109, 51,
+ 108, 90, 39, 85, 71, 25, 58, 46, 3, 16, 8, 0, 226, 186, 64,
+ 200, 165, 57, 177, 147, 50, 153, 127, 40, 130, 108, 31, 108, 90, 19,
+ 85, 70, 3, 58, 46, 0, 16, 8, 0, 227, 185, 35, 200, 165, 30,
+ 176, 146, 25, 152, 127, 18, 130, 108, 7, 108, 89, 0, 85, 70, 0,
+ 57, 46, 0, 14, 8, 0, 216, 169, 205, 192, 150, 184, 171, 134, 164,
+ 149, 116, 144, 128, 99, 124, 107, 81, 103, 85, 63, 81, 60, 39, 55,
+ 26, 0, 15, 217, 168, 186, 193, 150, 165, 172, 134, 149, 150, 116, 130,
+ 128, 99, 111, 107, 81, 92, 85, 62, 72, 59, 39, 47, 25, 0, 6,
+ 219, 168, 168, 194, 149, 150, 173, 133, 135, 150, 116, 117, 128, 98, 99,
+ 107, 80, 82, 86, 62, 63, 59, 38, 39, 24, 0, 0, 219, 166, 148,
+ 195, 149, 133, 173, 133, 119, 150, 115, 103, 128, 98, 88, 107, 80, 72,
+ 85, 61, 54, 59, 38, 32, 23, 0, 0, 220, 166, 129, 196, 148, 116,
+ 174, 132, 103, 151, 114, 89, 129, 97, 75, 107, 79, 60, 85, 61, 44,
+ 59, 38, 22, 21, 0, 0, 222, 164, 110, 197, 147, 99, 175, 131, 87,
+ 151, 113, 75, 129, 96, 63, 107, 79, 49, 85, 61, 33, 58, 38, 12,
+ 19, 0, 0, 222, 164, 88, 197, 146, 79, 174, 130, 69, 151, 113, 58,
+ 129, 95, 47, 107, 78, 35, 85, 60, 20, 58, 38, 0, 18, 0, 0,
+ 223, 164, 63, 198, 145, 55, 175, 129, 48, 151, 112, 39, 129, 95, 29,
+ 107, 78, 16, 85, 60, 1, 58, 38, 0, 17, 0, 0, 223, 163, 36,
+ 198, 145, 32, 174, 129, 26, 151, 111, 17, 129, 95, 7, 107, 78, 0,
+ 84, 60, 0, 57, 37, 0, 15, 0, 0, 215, 147, 192, 191, 130, 172,
+ 170, 116, 153, 148, 100, 133, 127, 85, 115, 107, 69, 96, 85, 51, 75,
+ 60, 28, 50, 25, 0, 8, 217, 146, 173, 192, 130, 154, 171, 115, 138,
+ 149, 100, 121, 128, 84, 103, 107, 68, 85, 85, 51, 66, 60, 28, 42,
+ 25, 0, 0, 217, 145, 157, 193, 129, 140, 173, 115, 125, 149, 100, 109,
+ 128, 84, 92, 107, 68, 76, 85, 51, 58, 59, 28, 35, 23, 0, 0,
+ 218, 145, 140, 193, 129, 125, 172, 114, 110, 149, 99, 96, 128, 83, 81,
+ 107, 67, 65, 84, 51, 49, 59, 29, 27, 22, 0, 0, 219, 144, 121,
+ 194, 128, 108, 172, 113, 96, 149, 98, 83, 128, 83, 69, 107, 68, 55,
+ 85, 50, 40, 59, 28, 18, 20, 0, 0, 220, 143, 104, 195, 128, 93,
+ 173, 114, 82, 150, 98, 69, 127, 82, 58, 107, 67, 45, 85, 50, 30,
+ 59, 28, 7, 19, 0, 0, 220, 143, 84, 195, 127, 74, 173, 113, 65,
+ 149, 97, 55, 128, 82, 44, 106, 67, 32, 84, 50, 16, 58, 28, 0,
+ 18, 0, 0, 221, 142, 62, 196, 126, 53, 173, 112, 46, 150, 97, 37,
+ 128, 82, 26, 107, 66, 14, 84, 50, 0, 58, 28, 0, 16, 0, 0,
+ 222, 142, 38, 196, 126, 34, 174, 112, 27, 150, 96, 17, 128, 82, 6,
+ 106, 66, 0, 84, 50, 0, 57, 29, 0, 16, 0, 0, 214, 123, 179,
+ 191, 110, 159, 169, 98, 143, 147, 84, 124, 126, 70, 106, 107, 55, 88,
+ 85, 39, 69, 60, 15, 45, 23, 0, 2, 216, 123, 161, 192, 110, 144,
+ 170, 98, 129, 148, 84, 112, 127, 70, 95, 107, 55, 79, 85, 39, 61,
+ 60, 15, 37, 20, 0, 0, 217, 122, 145, 192, 110, 130, 170, 97, 116,
+ 149, 84, 101, 127, 70, 85, 106, 55, 70, 85, 39, 53, 59, 16, 30,
+ 19, 0, 0, 217, 123, 131, 192, 109, 116, 171, 96, 103, 149, 83, 89,
+ 127, 70, 75, 106, 55, 60, 85, 40, 45, 59, 16, 23, 17, 0, 0,
+ 217, 122, 114, 193, 109, 101, 172, 96, 91, 149, 82, 77, 128, 69, 64,
+ 106, 55, 50, 84, 39, 35, 59, 17, 14, 17, 0, 0, 218, 122, 98,
+ 194, 108, 87, 171, 96, 77, 149, 82, 65, 127, 69, 52, 106, 55, 40,
+ 84, 40, 25, 59, 18, 3, 15, 0, 0, 219, 122, 80, 193, 108, 70,
+ 172, 95, 61, 149, 82, 51, 127, 69, 40, 106, 55, 28, 84, 39, 12,
+ 58, 17, 0, 13, 0, 0, 219, 121, 59, 194, 108, 52, 172, 96, 44,
+ 149, 82, 35, 127, 68, 24, 106, 55, 11, 84, 40, 0, 57, 18, 0,
+ 13, 0, 0, 219, 121, 40, 193, 108, 33, 172, 95, 26, 149, 81, 19,
+ 128, 68, 6, 106, 54, 0, 84, 39, 0, 57, 18, 0, 13, 0, 0,
+ 213, 99, 165, 189, 87, 148, 169, 76, 132, 147, 64, 115, 126, 52, 98,
+ 106, 39, 81, 85, 23, 63, 60, 0, 39, 16, 0, 0, 214, 98, 149,
+ 191, 87, 133, 170, 76, 119, 148, 65, 103, 127, 53, 88, 106, 39, 72,
+ 85, 24, 55, 60, 0, 32, 15, 0, 0, 215, 99, 136, 191, 87, 121,
+ 170, 77, 108, 148, 65, 93, 126, 53, 79, 106, 40, 64, 85, 24, 47,
+ 59, 0, 25, 14, 0, 0, 215, 99, 121, 192, 87, 108, 170, 77, 96,
+ 148, 65, 82, 126, 53, 69, 106, 40, 55, 85, 25, 39, 59, 0, 18,
+ 13, 0, 0, 216, 99, 106, 191, 87, 95, 170, 76, 83, 148, 65, 71,
+ 126, 53, 58, 106, 41, 45, 85, 26, 30, 59, 0, 8, 11, 0, 0,
+ 216, 98, 91, 192, 88, 82, 170, 77, 71, 148, 65, 60, 127, 53, 48,
+ 105, 41, 36, 83, 26, 21, 58, 1, 2, 11, 0, 0, 217, 99, 75,
+ 192, 87, 66, 170, 76, 57, 148, 65, 47, 126, 53, 36, 105, 41, 24,
+ 83, 26, 8, 57, 2, 0, 9, 0, 0, 217, 98, 57, 192, 87, 49,
+ 171, 77, 41, 147, 65, 32, 126, 53, 21, 105, 41, 8, 84, 27, 0,
+ 57, 3, 0, 9, 0, 0, 217, 98, 40, 193, 87, 34, 171, 76, 27,
+ 148, 65, 19, 126, 53, 6, 105, 41, 0, 83, 27, 0, 57, 4, 0,
+ 9, 0, 0, 211, 67, 152, 189, 58, 136, 168, 50, 122, 147, 39, 105,
+ 127, 28, 89, 106, 14, 74, 85, 0, 56, 59, 0, 33, 9, 0, 0,
+ 213, 68, 138, 190, 59, 123, 169, 51, 109, 148, 40, 95, 126, 30, 80,
+ 106, 16, 65, 85, 0, 48, 59, 0, 27, 9, 0, 0, 214, 69, 125,
+ 190, 59, 111, 168, 51, 99, 148, 41, 86, 126, 31, 72, 106, 18, 58,
+ 85, 0, 41, 59, 0, 20, 7, 0, 0, 215, 70, 112, 190, 61, 100,
+ 169, 52, 88, 147, 42, 76, 126, 32, 63, 106, 19, 49, 84, 1, 34,
+ 58, 0, 13, 7, 0, 0, 214, 70, 99, 190, 62, 88, 169, 53, 77,
+ 147, 43, 65, 125, 32, 53, 106, 20, 40, 84, 3, 26, 58, 0, 4,
+ 7, 0, 0, 214, 71, 86, 190, 61, 75, 169, 53, 65, 146, 43, 54,
+ 126, 33, 44, 105, 21, 31, 83, 4, 17, 57, 0, 0, 7, 0, 0,
+ 215, 71, 71, 191, 62, 62, 169, 53, 53, 147, 44, 44, 126, 34, 33,
+ 105, 22, 20, 83, 5, 4, 57, 0, 0, 7, 0, 0, 215, 71, 54,
+ 191, 62, 47, 169, 54, 39, 147, 44, 30, 126, 35, 20, 105, 23, 6,
+ 83, 6, 0, 56, 0, 0, 5, 0, 0, 215, 71, 41, 191, 63, 34,
+ 170, 54, 27, 147, 45, 17, 126, 35, 6, 105, 23, 0, 83, 8, 0,
+ 56, 0, 0, 5, 0, 0, 210, 13, 140, 189, 1, 125, 167, 0, 110,
+ 146, 0, 96, 126, 0, 81, 106, 0, 67, 85, 0, 51, 59, 0, 28,
+ 4, 0, 0, 212, 18, 126, 190, 7, 113, 168, 0, 100, 146, 0, 86,
+ 126, 0, 73, 106, 0, 59, 84, 0, 43, 59, 0, 22, 4, 0, 0,
+ 212, 21, 115, 190, 13, 103, 168, 3, 91, 146, 0, 78, 125, 0, 65,
+ 105, 0, 52, 84, 0, 36, 58, 0, 16, 4, 0, 0, 213, 24, 103,
+ 189, 19, 91, 168, 9, 82, 146, 0, 69, 125, 0, 57, 105, 0, 44,
+ 84, 0, 29, 58, 0, 7, 4, 0, 0, 213, 27, 92, 188, 21, 81,
+ 168, 14, 71, 146, 1, 59, 125, 0, 48, 105, 0, 36, 84, 0, 21,
+ 58, 0, 4, 4, 0, 0, 213, 30, 80, 189, 22, 69, 168, 17, 61,
+ 146, 5, 50, 125, 0, 39, 104, 0, 27, 83, 0, 12, 57, 0, 0,
+ 4, 0, 0, 214, 30, 67, 189, 25, 57, 168, 20, 50, 146, 9, 40,
+ 125, 0, 29, 104, 0, 17, 83, 0, 2, 56, 0, 0, 4, 0, 0,
+ 214, 32, 53, 189, 27, 44, 169, 20, 38, 146, 13, 28, 124, 2, 17,
+ 104, 0, 4, 83, 0, 0, 56, 0, 0, 4, 0, 0, 214, 33, 41,
+ 190, 27, 33, 168, 23, 27, 146, 13, 18, 125, 3, 5, 105, 0, 0,
+ 83, 0, 0, 56, 0, 0, 4, 0, 0, 185, 229, 250, 164, 204, 223,
+ 146, 182, 199, 127, 158, 174, 108, 136, 149, 89, 113, 125, 70, 90, 100,
+ 46, 62, 71, 10, 25, 33, 189, 227, 225, 168, 202, 201, 148, 181, 179,
+ 129, 157, 156, 109, 135, 134, 90, 113, 113, 70, 89, 90, 46, 62, 62,
+ 8, 24, 25, 192, 226, 202, 170, 202, 182, 151, 179, 162, 130, 156, 141,
+ 110, 133, 121, 91, 112, 101, 71, 89, 80, 46, 61, 54, 7, 24, 19,
+ 194, 224, 179, 173, 200, 160, 153, 178, 144, 132, 155, 125, 112, 133, 107,
+ 92, 111, 89, 71, 88, 69, 46, 61, 45, 6, 23, 10, 196, 223, 155,
+ 174, 198, 139, 154, 176, 124, 132, 153, 107, 113, 131, 91, 92, 110, 75,
+ 72, 87, 58, 47, 60, 37, 4, 23, 0, 198, 221, 131, 175, 197, 117,
+ 155, 175, 105, 133, 152, 91, 113, 130, 76, 92, 109, 63, 72, 86, 47,
+ 46, 60, 26, 3, 23, 0, 200, 220, 104, 176, 196, 94, 156, 175, 84,
+ 134, 151, 72, 113, 129, 59, 93, 108, 47, 72, 85, 33, 46, 59, 13,
+ 0, 23, 0, 201, 219, 73, 179, 195, 65, 157, 173, 57, 135, 150, 48,
+ 114, 129, 39, 94, 108, 28, 72, 85, 15, 47, 59, 0, 0, 22, 0,
+ 203, 219, 42, 178, 195, 37, 157, 173, 32, 135, 150, 26, 114, 128, 16,
+ 94, 107, 6, 73, 85, 0, 46, 58, 0, 0, 22, 0, 186, 205, 233,
+ 165, 183, 209, 148, 163, 187, 128, 142, 163, 109, 121, 140, 91, 101, 118,
+ 71, 80, 94, 48, 54, 66, 12, 15, 27, 189, 204, 211, 169, 182, 189,
+ 151, 163, 169, 131, 141, 147, 111, 121, 126, 92, 101, 105, 72, 79, 84,
+ 48, 54, 58, 11, 15, 19, 192, 202, 190, 171, 181, 170, 152, 161, 152,
+ 131, 141, 133, 112, 120, 113, 93, 100, 94, 72, 79, 74, 48, 53, 50,
+ 10, 15, 11, 195, 201, 169, 172, 179, 151, 153, 160, 135, 132, 139, 117,
+ 113, 119, 100, 93, 99, 82, 72, 78, 64, 48, 53, 41, 9, 14, 3,
+ 195, 200, 146, 174, 179, 131, 154, 159, 117, 133, 138, 101, 113, 118, 86,
+ 93, 98, 70, 73, 77, 53, 48, 52, 32, 8, 15, 0, 198, 199, 125,
+ 175, 177, 111, 155, 158, 100, 133, 137, 85, 113, 117, 71, 93, 97, 57,
+ 72, 77, 42, 47, 52, 22, 5, 14, 0, 199, 198, 101, 176, 177, 89,
+ 155, 157, 79, 134, 136, 68, 113, 116, 56, 94, 97, 44, 73, 76, 30,
+ 47, 52, 10, 2, 15, 0, 200, 197, 72, 178, 176, 63, 157, 156, 56,
+ 135, 136, 46, 114, 116, 37, 94, 96, 26, 73, 76, 11, 47, 51, 0,
+ 0, 14, 0, 201, 197, 45, 177, 175, 38, 156, 155, 31, 135, 135, 25,
+ 114, 115, 17, 94, 96, 5, 73, 75, 0, 46, 51, 0, 0, 14, 0,
+ 187, 183, 218, 167, 165, 197, 149, 147, 176, 129, 127, 153, 111, 109, 132,
+ 92, 90, 111, 73, 70, 89, 49, 46, 62, 15, 4, 22, 190, 183, 197,
+ 170, 164, 177, 151, 146, 159, 130, 127, 139, 112, 109, 119, 93, 90, 99,
+ 72, 70, 78, 49, 45, 53, 14, 4, 15, 192, 182, 179, 171, 163, 161,
+ 153, 145, 144, 132, 126, 125, 113, 108, 107, 93, 89, 88, 73, 70, 69,
+ 49, 45, 45, 13, 5, 6, 195, 181, 159, 172, 162, 142, 152, 145, 127,
+ 132, 125, 111, 113, 107, 94, 93, 88, 77, 73, 69, 59, 48, 45, 37,
+ 11, 5, 0, 195, 180, 139, 173, 161, 124, 153, 143, 110, 133, 125, 96,
+ 113, 106, 81, 94, 88, 66, 73, 68, 49, 49, 44, 28, 9, 6, 0,
+ 196, 179, 118, 174, 160, 106, 154, 142, 94, 133, 124, 81, 113, 105, 68,
+ 94, 87, 54, 73, 68, 39, 48, 44, 18, 5, 5, 0, 197, 178, 96,
+ 176, 159, 86, 155, 141, 75, 134, 123, 64, 114, 105, 53, 94, 87, 40,
+ 73, 68, 26, 48, 44, 5, 2, 6, 0, 199, 178, 70, 176, 158, 62,
+ 156, 141, 54, 134, 122, 44, 114, 104, 35, 94, 86, 23, 73, 67, 8,
+ 47, 44, 0, 2, 6, 0, 199, 177, 45, 178, 158, 40, 156, 140, 32,
+ 135, 122, 26, 114, 104, 16, 94, 86, 4, 73, 67, 0, 47, 44, 0,
+ 0, 7, 0, 188, 161, 204, 168, 144, 183, 149, 129, 164, 130, 112, 144,
+ 112, 95, 123, 93, 78, 103, 74, 60, 81, 50, 36, 56, 16, 0, 16,
+ 190, 160, 185, 170, 144, 165, 151, 128, 148, 132, 111, 130, 112, 95, 110,
+ 93, 78, 92, 74, 59, 72, 50, 36, 48, 16, 0, 8, 192, 160, 167,
+ 171, 143, 150, 153, 128, 134, 132, 111, 117, 112, 94, 100, 94, 77, 82,
+ 74, 59, 63, 50, 36, 40, 14, 0, 0, 193, 159, 149, 172, 143, 134,
+ 153, 127, 119, 133, 110, 103, 113, 94, 87, 93, 77, 72, 73, 59, 54,
+ 50, 36, 32, 12, 0, 0, 195, 159, 131, 173, 142, 117, 153, 127, 104,
+ 132, 110, 90, 113, 93, 76, 93, 76, 61, 74, 59, 45, 49, 36, 23,
+ 9, 0, 0, 196, 158, 113, 174, 141, 101, 155, 126, 89, 133, 109, 76,
+ 113, 93, 64, 94, 76, 51, 74, 58, 35, 49, 36, 14, 6, 0, 0,
+ 197, 157, 92, 174, 141, 80, 154, 125, 71, 134, 108, 60, 114, 92, 50,
+ 94, 75, 37, 73, 58, 22, 48, 36, 1, 5, 0, 0, 197, 157, 68,
+ 175, 140, 59, 155, 124, 51, 134, 108, 41, 113, 91, 32, 94, 75, 21,
+ 73, 57, 5, 48, 35, 0, 5, 0, 0, 198, 156, 46, 176, 140, 40,
+ 155, 124, 32, 134, 107, 24, 114, 91, 14, 94, 75, 2, 73, 57, 0,
+ 48, 36, 0, 3, 0, 0, 189, 140, 191, 168, 126, 172, 150, 112, 154,
+ 131, 97, 134, 112, 82, 115, 94, 66, 96, 74, 49, 75, 51, 25, 50,
+ 12, 0, 10, 191, 139, 173, 170, 125, 154, 152, 111, 138, 132, 96, 121,
+ 113, 81, 103, 94, 66, 85, 74, 48, 66, 50, 26, 42, 12, 0, 1,
+ 192, 139, 157, 171, 125, 140, 152, 111, 125, 132, 96, 109, 113, 81, 92,
+ 94, 65, 76, 74, 48, 58, 50, 26, 35, 9, 0, 0, 193, 139, 140,
+ 172, 124, 125, 153, 110, 112, 133, 95, 96, 113, 80, 82, 94, 65, 66,
+ 74, 49, 50, 50, 26, 28, 7, 0, 0, 194, 138, 123, 172, 123, 109,
+ 153, 110, 97, 133, 95, 84, 113, 80, 70, 94, 65, 56, 74, 48, 40,
+ 50, 26, 20, 6, 0, 0, 194, 138, 105, 173, 123, 94, 153, 109, 83,
+ 133, 94, 70, 112, 79, 59, 94, 64, 46, 74, 48, 31, 50, 26, 9,
+ 4, 0, 0, 196, 138, 87, 174, 122, 77, 153, 109, 67, 133, 93, 56,
+ 113, 79, 46, 94, 64, 34, 73, 48, 18, 49, 27, 0, 4, 0, 0,
+ 196, 137, 65, 174, 122, 57, 154, 108, 49, 133, 93, 39, 113, 79, 29,
+ 94, 64, 18, 74, 48, 3, 49, 27, 0, 2, 0, 0, 197, 137, 47,
+ 175, 122, 40, 155, 108, 32, 133, 93, 23, 114, 79, 14, 94, 64, 1,
+ 73, 48, 0, 48, 27, 0, 2, 0, 0, 189, 119, 177, 168, 106, 159,
+ 150, 94, 142, 131, 81, 124, 113, 67, 107, 94, 53, 89, 74, 37, 69,
+ 51, 11, 45, 6, 0, 3, 191, 119, 161, 170, 106, 144, 152, 94, 129,
+ 132, 81, 112, 113, 67, 96, 94, 53, 79, 74, 37, 61, 51, 13, 38,
+ 6, 0, 0, 192, 119, 146, 170, 106, 131, 152, 94, 117, 132, 80, 101,
+ 112, 67, 85, 94, 53, 70, 74, 37, 53, 50, 14, 31, 4, 0, 0,
+ 192, 119, 131, 171, 106, 117, 153, 94, 105, 132, 80, 89, 113, 67, 75,
+ 94, 54, 61, 74, 38, 45, 51, 14, 23, 3, 0, 0, 193, 118, 114,
+ 171, 106, 102, 153, 93, 90, 132, 80, 78, 113, 67, 65, 94, 53, 52,
+ 74, 37, 36, 50, 15, 16, 1, 0, 0, 194, 118, 99, 172, 105, 89,
+ 153, 93, 78, 132, 80, 66, 113, 67, 54, 94, 53, 42, 74, 38, 27,
+ 50, 16, 5, 1, 0, 0, 194, 118, 82, 173, 105, 72, 153, 93, 63,
+ 132, 79, 53, 113, 67, 42, 94, 53, 30, 74, 38, 15, 49, 16, 0,
+ 0, 0, 0, 195, 117, 63, 173, 105, 55, 154, 93, 47, 133, 79, 37,
+ 113, 66, 27, 94, 53, 15, 73, 38, 0, 48, 16, 0, 0, 0, 0,
+ 195, 117, 46, 173, 104, 39, 154, 92, 32, 133, 79, 22, 113, 66, 13,
+ 94, 53, 0, 73, 38, 0, 48, 17, 0, 0, 0, 0, 189, 96, 166,
+ 168, 85, 147, 150, 74, 132, 131, 62, 115, 113, 51, 99, 94, 38, 82,
+ 74, 21, 63, 51, 0, 40, 1, 0, 0, 190, 96, 150, 170, 85, 133,
+ 152, 75, 119, 132, 63, 104, 113, 51, 88, 94, 38, 72, 75, 22, 55,
+ 51, 0, 33, 1, 0, 0, 192, 96, 137, 170, 85, 121, 152, 74, 108,
+ 132, 64, 94, 113, 52, 79, 94, 39, 64, 74, 23, 48, 50, 0, 26,
+ 0, 0, 0, 192, 96, 122, 171, 86, 109, 152, 75, 96, 132, 63, 83,
+ 113, 52, 69, 94, 39, 56, 74, 24, 41, 50, 0, 19, 0, 0, 0,
+ 193, 96, 107, 171, 85, 96, 152, 75, 84, 132, 64, 72, 113, 52, 60,
+ 94, 39, 47, 74, 24, 32, 50, 1, 10, 0, 0, 0, 193, 96, 93,
+ 172, 85, 82, 152, 75, 72, 133, 63, 61, 113, 51, 49, 94, 39, 37,
+ 73, 25, 23, 49, 2, 2, 0, 0, 0, 194, 96, 78, 172, 85, 68,
+ 152, 75, 59, 132, 63, 49, 113, 52, 39, 94, 40, 26, 73, 25, 11,
+ 48, 3, 0, 0, 0, 0, 194, 96, 60, 173, 85, 52, 153, 75, 44,
+ 132, 64, 35, 112, 52, 25, 94, 40, 12, 73, 26, 0, 48, 4, 0,
+ 0, 0, 0, 195, 96, 46, 173, 85, 38, 154, 74, 31, 133, 63, 22,
+ 113, 52, 11, 93, 40, 0, 73, 26, 0, 47, 5, 0, 0, 0, 0,
+ 188, 67, 153, 168, 58, 137, 151, 49, 122, 131, 39, 106, 113, 28, 90,
+ 94, 13, 75, 75, 0, 57, 51, 0, 35, 0, 0, 0, 190, 68, 138,
+ 170, 59, 123, 152, 50, 110, 132, 41, 96, 113, 29, 80, 94, 16, 66,
+ 75, 0, 49, 50, 0, 27, 0, 0, 0, 191, 69, 126, 170, 59, 112,
+ 151, 52, 100, 132, 42, 86, 113, 30, 73, 95, 17, 58, 75, 0, 42,
+ 50, 0, 21, 0, 0, 0, 192, 70, 113, 170, 61, 100, 151, 52, 89,
+ 132, 42, 77, 113, 31, 64, 94, 19, 50, 74, 1, 35, 50, 0, 14,
+ 0, 0, 0, 192, 70, 100, 170, 62, 89, 151, 53, 77, 131, 43, 66,
+ 112, 32, 54, 94, 20, 42, 74, 2, 27, 49, 0, 5, 0, 0, 0,
+ 192, 71, 87, 171, 61, 77, 152, 53, 67, 131, 44, 57, 112, 33, 45,
+ 94, 21, 33, 74, 4, 19, 49, 0, 1, 0, 0, 0, 193, 71, 74,
+ 171, 62, 64, 152, 53, 55, 132, 44, 45, 113, 34, 34, 94, 22, 23,
+ 73, 5, 7, 48, 0, 0, 0, 0, 0, 193, 70, 58, 172, 62, 50,
+ 152, 54, 42, 132, 44, 32, 112, 35, 22, 93, 23, 10, 73, 6, 0,
+ 47, 0, 0, 0, 0, 0, 193, 70, 45, 172, 62, 38, 153, 54, 31,
+ 132, 44, 21, 112, 35, 9, 94, 23, 0, 73, 7, 0, 47, 0, 0,
+ 0, 0, 0, 189, 26, 141, 169, 15, 126, 150, 2, 112, 131, 0, 97,
+ 113, 0, 82, 94, 0, 67, 75, 0, 51, 50, 0, 29, 0, 0, 0,
+ 190, 28, 128, 170, 18, 114, 151, 8, 101, 132, 0, 88, 113, 0, 74,
+ 94, 0, 60, 75, 0, 44, 50, 0, 23, 0, 0, 0, 191, 30, 117,
+ 170, 23, 104, 152, 11, 92, 132, 1, 79, 113, 0, 67, 95, 0, 53,
+ 75, 0, 37, 50, 0, 17, 0, 0, 0, 191, 33, 105, 170, 26, 93,
+ 151, 18, 83, 132, 6, 70, 112, 0, 58, 94, 0, 45, 75, 0, 30,
+ 49, 0, 8, 0, 0, 0, 191, 34, 93, 170, 27, 82, 151, 20, 72,
+ 131, 8, 61, 112, 0, 49, 94, 0, 38, 74, 0, 23, 49, 0, 4,
+ 0, 0, 0, 191, 36, 82, 170, 29, 71, 151, 22, 63, 131, 11, 52,
+ 112, 0, 41, 93, 0, 29, 74, 0, 14, 48, 0, 1, 0, 0, 0,
+ 191, 38, 69, 170, 31, 60, 151, 24, 51, 131, 14, 41, 112, 1, 31,
+ 93, 0, 19, 73, 0, 3, 48, 0, 0, 0, 0, 0, 192, 37, 56,
+ 171, 31, 47, 152, 25, 40, 131, 17, 30, 112, 4, 19, 93, 0, 7,
+ 73, 0, 0, 47, 0, 0, 0, 0, 0, 192, 38, 45, 171, 33, 36,
+ 152, 26, 30, 131, 18, 21, 111, 7, 9, 93, 0, 0, 73, 0, 0,
+ 47, 0, 0, 0, 0, 0, 149, 218, 248, 133, 194, 222, 119, 173, 198,
+ 102, 151, 173, 86, 130, 148, 70, 108, 125, 53, 85, 100, 32, 59, 71,
+ 0, 22, 33, 154, 216, 223, 137, 193, 200, 122, 172, 178, 106, 150, 156,
+ 89, 128, 133, 73, 107, 112, 54, 85, 89, 31, 59, 63, 0, 22, 26,
+ 159, 215, 202, 141, 192, 181, 126, 171, 161, 108, 149, 141, 90, 128, 121,
+ 74, 107, 100, 55, 85, 80, 32, 58, 55, 0, 22, 19, 161, 213, 179,
+ 144, 190, 160, 126, 170, 143, 109, 148, 125, 92, 127, 107, 74, 106, 89,
+ 56, 84, 69, 32, 58, 46, 0, 21, 11, 163, 211, 156, 144, 189, 139,
+ 129, 168, 125, 110, 147, 108, 93, 126, 92, 75, 105, 76, 57, 83, 58,
+ 33, 58, 37, 0, 21, 1, 167, 211, 133, 147, 188, 120, 130, 167, 105,
+ 110, 145, 92, 93, 125, 78, 76, 104, 64, 58, 83, 48, 33, 57, 27,
+ 0, 21, 0, 169, 210, 108, 149, 187, 96, 131, 166, 86, 112, 144, 74,
+ 94, 124, 62, 77, 103, 49, 58, 82, 35, 33, 57, 15, 0, 21, 0,
+ 170, 209, 80, 151, 186, 71, 133, 165, 62, 114, 143, 52, 95, 123, 42,
+ 77, 103, 32, 58, 81, 18, 33, 56, 0, 0, 21, 0, 173, 208, 55,
+ 152, 186, 49, 134, 165, 41, 114, 143, 34, 95, 122, 25, 77, 102, 14,
+ 58, 81, 0, 33, 56, 0, 0, 21, 0, 154, 195, 232, 137, 174, 207,
+ 122, 156, 185, 105, 136, 163, 89, 116, 140, 73, 97, 117, 56, 76, 94,
+ 35, 51, 66, 0, 13, 28, 158, 194, 209, 141, 174, 187, 125, 155, 167,
+ 109, 135, 146, 91, 116, 125, 75, 96, 105, 57, 75, 83, 35, 50, 57,
+ 0, 12, 21, 161, 193, 189, 144, 173, 169, 128, 154, 151, 110, 134, 132,
+ 93, 115, 113, 77, 95, 94, 58, 75, 74, 35, 50, 50, 0, 12, 13,
+ 164, 192, 168, 145, 171, 151, 129, 153, 134, 111, 133, 117, 94, 114, 100,
+ 76, 95, 82, 58, 75, 64, 36, 50, 42, 0, 12, 5, 165, 191, 147,
+ 147, 170, 131, 130, 152, 117, 113, 132, 102, 95, 113, 86, 77, 94, 71,
+ 58, 74, 54, 35, 50, 33, 0, 13, 0, 167, 189, 126, 148, 169, 113,
+ 132, 151, 100, 113, 131, 86, 96, 112, 73, 77, 93, 59, 59, 73, 43,
+ 35, 49, 23, 0, 12, 0, 170, 189, 104, 150, 168, 91, 133, 150, 81,
+ 114, 130, 69, 96, 111, 57, 78, 92, 46, 59, 73, 31, 35, 49, 11,
+ 0, 13, 0, 171, 188, 78, 152, 168, 68, 134, 149, 60, 115, 130, 50,
+ 96, 111, 41, 78, 92, 29, 60, 73, 15, 35, 49, 0, 0, 12, 0,
+ 173, 187, 55, 153, 167, 47, 134, 149, 39, 115, 129, 33, 97, 110, 24,
+ 79, 92, 13, 60, 72, 0, 35, 48, 0, 0, 12, 0, 157, 175, 217,
+ 139, 157, 196, 125, 141, 175, 109, 122, 153, 92, 104, 132, 76, 86, 110,
+ 59, 67, 88, 37, 43, 61, 1, 1, 23, 161, 174, 196, 144, 156, 176,
+ 127, 140, 158, 110, 121, 137, 94, 104, 118, 77, 85, 98, 59, 67, 78,
+ 37, 43, 53, 0, 2, 16, 163, 174, 178, 146, 156, 160, 130, 139, 143,
+ 112, 121, 124, 95, 103, 106, 78, 85, 88, 60, 66, 69, 37, 42, 46,
+ 0, 2, 7, 166, 173, 159, 147, 154, 142, 130, 138, 127, 113, 120, 111,
+ 96, 103, 95, 78, 84, 77, 60, 66, 59, 37, 43, 37, 0, 2, 0,
+ 166, 172, 139, 148, 154, 125, 131, 137, 112, 113, 120, 96, 96, 102, 81,
+ 78, 84, 66, 60, 65, 50, 37, 42, 29, 0, 3, 0, 167, 171, 120,
+ 149, 153, 107, 133, 137, 95, 114, 118, 81, 97, 101, 69, 79, 84, 56,
+ 60, 65, 40, 37, 42, 19, 0, 3, 0, 170, 170, 99, 151, 152, 87,
+ 134, 136, 77, 115, 118, 66, 97, 101, 55, 79, 83, 42, 61, 65, 28,
+ 37, 42, 7, 0, 3, 0, 172, 170, 75, 152, 151, 65, 134, 135, 57,
+ 115, 117, 48, 97, 100, 38, 79, 83, 27, 61, 64, 12, 36, 42, 0,
+ 0, 3, 0, 172, 169, 55, 154, 151, 46, 135, 134, 40, 116, 116, 32,
+ 97, 99, 21, 80, 82, 10, 61, 64, 0, 36, 41, 0, 0, 3, 0,
+ 160, 154, 203, 143, 139, 182, 127, 124, 164, 111, 107, 143, 95, 91, 122,
+ 78, 75, 103, 60, 57, 81, 39, 33, 56, 1, 0, 18, 163, 154, 184,
+ 146, 138, 165, 130, 123, 148, 113, 107, 129, 96, 90, 110, 79, 74, 92,
+ 61, 56, 72, 39, 34, 48, 2, 0, 9, 165, 154, 167, 147, 137, 149,
+ 131, 122, 134, 114, 106, 117, 96, 90, 100, 79, 74, 82, 61, 56, 64,
+ 39, 33, 40, 2, 0, 1, 166, 153, 150, 149, 137, 133, 132, 122, 119,
+ 114, 106, 104, 97, 90, 88, 79, 74, 72, 61, 56, 55, 39, 34, 33,
+ 0, 0, 0, 168, 152, 132, 149, 136, 117, 132, 121, 104, 114, 105, 90,
+ 97, 89, 76, 79, 73, 62, 61, 56, 46, 38, 34, 25, 0, 0, 0,
+ 169, 151, 114, 150, 135, 101, 133, 121, 90, 114, 104, 77, 97, 89, 65,
+ 80, 73, 51, 61, 56, 36, 38, 34, 16, 0, 0, 0, 170, 150, 94,
+ 151, 135, 83, 134, 120, 73, 115, 104, 62, 98, 88, 51, 80, 72, 39,
+ 61, 56, 24, 38, 34, 3, 0, 0, 0, 172, 150, 72, 153, 134, 63,
+ 135, 119, 55, 115, 103, 45, 98, 88, 36, 80, 72, 24, 61, 55, 9,
+ 38, 34, 0, 0, 0, 0, 172, 150, 54, 153, 134, 47, 135, 119, 38,
+ 116, 103, 30, 98, 87, 21, 80, 72, 8, 62, 55, 0, 37, 34, 0,
+ 0, 0, 0, 162, 134, 190, 145, 120, 171, 129, 108, 153, 113, 93, 134,
+ 97, 78, 115, 80, 63, 96, 62, 46, 75, 41, 23, 51, 0, 0, 11,
+ 165, 134, 173, 147, 120, 154, 131, 107, 138, 114, 92, 120, 97, 78, 103,
+ 80, 63, 85, 62, 46, 66, 40, 23, 43, 0, 0, 2, 166, 134, 157,
+ 148, 120, 140, 132, 106, 125, 114, 92, 109, 97, 77, 93, 81, 63, 77,
+ 62, 46, 58, 40, 24, 36, 0, 0, 0, 168, 133, 140, 149, 119, 125,
+ 132, 106, 112, 115, 92, 97, 98, 77, 82, 81, 62, 67, 62, 46, 50,
+ 40, 24, 29, 0, 0, 0, 168, 133, 123, 150, 119, 110, 133, 106, 97,
+ 115, 91, 84, 98, 77, 70, 81, 62, 57, 62, 46, 41, 40, 24, 20,
+ 0, 0, 0, 169, 132, 107, 150, 118, 94, 133, 105, 84, 115, 91, 72,
+ 98, 76, 60, 80, 62, 47, 62, 46, 32, 39, 25, 11, 0, 0, 0,
+ 171, 132, 89, 152, 118, 79, 135, 105, 69, 115, 90, 58, 98, 76, 47,
+ 80, 62, 36, 62, 46, 21, 39, 25, 0, 0, 0, 0, 171, 132, 69,
+ 153, 117, 60, 135, 104, 52, 116, 90, 42, 98, 76, 33, 81, 61, 21,
+ 62, 46, 6, 38, 25, 0, 0, 0, 0, 172, 132, 54, 153, 118, 45,
+ 135, 104, 38, 116, 90, 28, 98, 76, 18, 81, 61, 6, 62, 46, 0,
+ 38, 25, 0, 0, 0, 0, 164, 115, 177, 146, 103, 159, 130, 91, 143,
+ 114, 78, 125, 97, 65, 107, 81, 51, 89, 63, 34, 69, 41, 9, 46,
+ 0, 0, 4, 166, 115, 161, 148, 103, 144, 132, 91, 129, 115, 78, 112,
+ 98, 65, 96, 81, 51, 79, 63, 35, 61, 41, 11, 38, 0, 0, 0,
+ 167, 115, 146, 150, 102, 131, 132, 91, 117, 115, 78, 101, 98, 65, 86,
+ 81, 51, 71, 63, 35, 54, 41, 12, 32, 0, 0, 0, 168, 114, 132,
+ 150, 103, 118, 133, 91, 105, 116, 78, 91, 98, 64, 76, 82, 51, 61,
+ 63, 36, 46, 41, 13, 24, 0, 0, 0, 169, 114, 116, 150, 102, 103,
+ 134, 90, 91, 116, 78, 79, 98, 65, 66, 81, 51, 53, 63, 36, 37,
+ 40, 14, 17, 0, 0, 0, 169, 114, 101, 151, 101, 89, 134, 90, 79,
+ 116, 77, 67, 98, 64, 56, 81, 51, 44, 63, 36, 29, 40, 15, 7,
+ 0, 0, 0, 170, 114, 85, 152, 101, 75, 135, 90, 65, 116, 77, 54,
+ 98, 64, 44, 81, 51, 32, 63, 36, 17, 39, 15, 0, 0, 0, 0,
+ 172, 113, 66, 152, 101, 58, 135, 89, 49, 116, 77, 40, 99, 64, 30,
+ 81, 51, 18, 62, 36, 3, 38, 16, 0, 0, 0, 0, 171, 113, 51,
+ 153, 101, 44, 136, 89, 36, 116, 77, 28, 99, 64, 18, 81, 51, 5,
+ 62, 36, 0, 38, 16, 0, 0, 0, 0, 165, 94, 166, 147, 82, 147,
+ 132, 72, 132, 115, 61, 115, 98, 49, 99, 82, 36, 82, 64, 19, 64,
+ 42, 0, 41, 0, 0, 0, 167, 93, 150, 150, 83, 134, 133, 73, 120,
+ 116, 62, 104, 99, 49, 88, 82, 36, 72, 64, 20, 55, 41, 0, 33,
+ 0, 0, 0, 169, 93, 137, 150, 83, 122, 134, 73, 109, 116, 61, 94,
+ 99, 50, 80, 82, 37, 65, 64, 21, 49, 41, 0, 27, 0, 0, 0,
+ 169, 94, 123, 150, 83, 110, 133, 73, 97, 116, 61, 83, 99, 50, 70,
+ 82, 38, 57, 63, 23, 42, 41, 0, 20, 0, 0, 0, 169, 94, 109,
+ 150, 84, 97, 134, 73, 85, 116, 62, 73, 99, 51, 61, 81, 38, 48,
+ 63, 23, 33, 41, 1, 11, 0, 0, 0, 170, 94, 96, 150, 83, 84,
+ 134, 73, 74, 116, 61, 62, 99, 50, 51, 82, 38, 39, 64, 23, 24,
+ 40, 3, 4, 0, 0, 0, 171, 93, 79, 152, 82, 70, 135, 73, 61,
+ 116, 62, 51, 98, 51, 40, 81, 38, 28, 63, 24, 14, 39, 4, 0,
+ 0, 0, 0, 171, 94, 64, 152, 83, 55, 135, 73, 47, 116, 62, 37,
+ 98, 50, 27, 81, 38, 15, 63, 24, 1, 39, 4, 0, 0, 0, 0,
+ 172, 93, 51, 153, 82, 42, 135, 73, 35, 117, 62, 26, 99, 51, 16,
+ 81, 39, 3, 63, 25, 0, 38, 5, 0, 0, 0, 0, 166, 68, 153,
+ 148, 59, 137, 133, 49, 121, 115, 39, 106, 99, 28, 91, 82, 13, 75,
+ 65, 0, 58, 42, 0, 36, 0, 0, 0, 168, 68, 139, 150, 59, 124,
+ 134, 50, 110, 116, 40, 96, 99, 30, 81, 82, 16, 66, 64, 0, 50,
+ 41, 0, 29, 0, 0, 0, 169, 69, 126, 150, 59, 113, 134, 51, 101,
+ 117, 42, 87, 100, 30, 73, 82, 17, 59, 65, 0, 43, 41, 0, 23,
+ 0, 0, 0, 169, 70, 115, 150, 61, 102, 134, 52, 89, 116, 42, 77,
+ 99, 32, 65, 82, 19, 52, 64, 0, 36, 41, 0, 15, 0, 0, 0,
+ 169, 70, 101, 150, 61, 90, 134, 52, 79, 116, 43, 68, 99, 32, 55,
+ 82, 21, 43, 64, 2, 28, 41, 0, 6, 0, 0, 0, 170, 70, 89,
+ 151, 62, 79, 134, 53, 69, 116, 44, 58, 99, 33, 46, 81, 21, 34,
+ 64, 3, 20, 41, 0, 2, 0, 0, 0, 170, 71, 76, 152, 62, 66,
+ 134, 53, 57, 116, 43, 46, 99, 33, 36, 82, 22, 24, 64, 5, 10,
+ 40, 0, 0, 0, 0, 0, 171, 70, 61, 152, 62, 52, 135, 53, 44,
+ 116, 44, 35, 99, 34, 24, 82, 22, 12, 63, 6, 0, 39, 0, 0,
+ 0, 0, 0, 171, 71, 49, 153, 62, 41, 135, 54, 33, 117, 45, 25,
+ 98, 34, 13, 81, 23, 0, 63, 7, 0, 39, 0, 0, 0, 0, 0,
+ 167, 33, 142, 149, 24, 127, 134, 10, 113, 116, 0, 97, 100, 0, 83,
+ 83, 0, 68, 65, 0, 52, 40, 0, 30, 0, 0, 0, 169, 33, 129,
+ 150, 26, 115, 134, 17, 102, 116, 3, 89, 100, 0, 75, 83, 0, 60,
+ 65, 0, 45, 40, 0, 24, 0, 0, 0, 169, 36, 118, 151, 27, 104,
+ 134, 19, 93, 116, 7, 80, 100, 0, 67, 83, 0, 54, 65, 0, 38,
+ 41, 0, 17, 0, 0, 0, 169, 39, 107, 150, 30, 94, 134, 22, 84,
+ 116, 11, 71, 99, 0, 59, 83, 0, 46, 64, 0, 31, 40, 0, 9,
+ 0, 0, 0, 169, 39, 95, 151, 31, 83, 134, 24, 73, 116, 15, 62,
+ 100, 1, 51, 83, 0, 38, 64, 0, 24, 40, 0, 5, 0, 0, 0,
+ 169, 41, 83, 151, 33, 73, 134, 26, 64, 117, 17, 54, 99, 4, 42,
+ 82, 0, 30, 64, 0, 16, 40, 0, 1, 0, 0, 0, 170, 42, 71,
+ 152, 34, 62, 134, 28, 53, 117, 19, 44, 99, 6, 33, 82, 0, 21,
+ 63, 0, 4, 39, 0, 0, 0, 0, 0, 171, 42, 59, 152, 35, 50,
+ 134, 29, 42, 117, 21, 32, 99, 9, 22, 82, 0, 9, 63, 0, 0,
+ 38, 0, 0, 0, 0, 0, 172, 42, 48, 152, 36, 40, 135, 29, 32,
+ 117, 21, 23, 99, 10, 12, 82, 0, 0, 63, 0, 0, 38, 0, 0,
+ 0, 0, 0, 107, 207, 246, 96, 185, 220, 86, 165, 196, 73, 144, 171,
+ 60, 123, 147, 46, 103, 125, 32, 82, 100, 9, 56, 71, 0, 20, 33,
+ 115, 206, 221, 104, 184, 198, 92, 164, 178, 78, 143, 154, 64, 123, 133,
+ 51, 102, 111, 34, 81, 89, 10, 56, 63, 0, 20, 27, 122, 204, 200,
+ 108, 183, 180, 95, 163, 161, 82, 142, 140, 68, 122, 120, 54, 102, 101,
+ 36, 81, 79, 11, 56, 55, 0, 20, 20, 125, 203, 179, 111, 181, 160,
+ 97, 162, 143, 85, 141, 124, 70, 121, 107, 55, 101, 89, 38, 80, 69,
+ 14, 55, 46, 0, 19, 10, 128, 202, 156, 113, 180, 140, 102, 161, 125,
+ 87, 140, 108, 71, 120, 92, 56, 100, 76, 39, 79, 59, 14, 55, 38,
+ 0, 20, 3, 132, 200, 135, 117, 179, 121, 103, 159, 106, 88, 139, 93,
+ 73, 119, 79, 57, 100, 65, 41, 79, 49, 15, 54, 28, 0, 19, 0,
+ 134, 200, 111, 119, 178, 98, 105, 158, 87, 89, 138, 76, 74, 118, 64,
+ 58, 99, 51, 41, 78, 37, 16, 54, 17, 0, 19, 0, 137, 199, 85,
+ 122, 177, 75, 108, 158, 66, 91, 137, 56, 75, 118, 46, 59, 98, 35,
+ 42, 78, 22, 16, 54, 3, 0, 19, 0, 140, 198, 62, 125, 177, 55,
+ 109, 158, 47, 92, 137, 40, 76, 117, 32, 59, 98, 21, 42, 78, 6,
+ 16, 54, 0, 0, 18, 0, 118, 186, 231, 106, 167, 206, 93, 149, 184,
+ 81, 130, 161, 67, 111, 139, 54, 92, 117, 39, 72, 93, 17, 48, 66,
+ 0, 10, 29, 123, 185, 207, 110, 166, 186, 98, 148, 167, 85, 129, 145,
+ 71, 111, 125, 56, 92, 104, 40, 72, 83, 18, 48, 57, 0, 10, 22,
+ 128, 184, 188, 113, 165, 168, 102, 147, 151, 88, 128, 131, 73, 110, 113,
+ 58, 91, 94, 42, 71, 74, 19, 48, 50, 0, 9, 15, 131, 183, 168,
+ 116, 164, 151, 104, 146, 134, 89, 127, 117, 73, 109, 100, 58, 90, 83,
+ 42, 71, 65, 20, 48, 42, 0, 9, 5, 134, 182, 148, 120, 163, 131,
+ 105, 145, 118, 90, 126, 102, 75, 108, 86, 59, 90, 72, 43, 71, 55,
+ 19, 47, 34, 0, 9, 0, 136, 181, 128, 122, 162, 115, 107, 144, 102,
+ 92, 125, 87, 76, 107, 74, 61, 89, 60, 44, 70, 45, 20, 47, 24,
+ 0, 8, 0, 139, 180, 106, 124, 161, 95, 109, 144, 83, 93, 124, 71,
+ 77, 107, 60, 61, 89, 47, 44, 70, 33, 20, 47, 13, 0, 8, 0,
+ 142, 179, 82, 125, 160, 72, 111, 143, 63, 94, 124, 54, 77, 106, 44,
+ 61, 88, 32, 44, 69, 18, 20, 46, 0, 0, 8, 0, 143, 179, 62,
+ 127, 160, 54, 111, 142, 47, 94, 124, 39, 78, 106, 29, 62, 88, 18,
+ 45, 69, 3, 20, 46, 0, 0, 8, 0, 124, 167, 216, 112, 150, 194,
+ 99, 134, 174, 87, 117, 153, 73, 100, 131, 58, 82, 110, 43, 64, 88,
+ 23, 40, 61, 0, 0, 24, 129, 166, 195, 116, 150, 175, 103, 134, 158,
+ 89, 116, 137, 75, 99, 118, 60, 82, 98, 44, 63, 78, 23, 40, 53,
+ 0, 0, 17, 132, 166, 177, 119, 149, 160, 106, 133, 143, 90, 115, 124,
+ 76, 99, 107, 61, 81, 88, 45, 63, 69, 24, 40, 46, 0, 0, 9,
+ 136, 166, 159, 121, 148, 143, 107, 132, 126, 92, 115, 111, 77, 98, 94,
+ 62, 81, 78, 46, 63, 60, 23, 40, 38, 0, 0, 0, 138, 164, 140,
+ 122, 147, 125, 108, 131, 111, 93, 114, 97, 79, 98, 82, 63, 80, 67,
+ 46, 62, 50, 24, 40, 29, 0, 0, 0, 139, 163, 122, 124, 146, 109,
+ 110, 131, 96, 94, 114, 83, 79, 97, 70, 63, 81, 57, 46, 62, 41,
+ 24, 40, 21, 0, 0, 0, 141, 163, 101, 126, 145, 90, 111, 130, 79,
+ 95, 113, 68, 79, 96, 56, 63, 80, 44, 47, 62, 30, 23, 40, 10,
+ 0, 0, 0, 144, 162, 79, 127, 145, 70, 112, 129, 60, 95, 112, 51,
+ 79, 96, 41, 64, 79, 30, 47, 61, 15, 23, 40, 0, 0, 0, 0,
+ 145, 162, 60, 129, 145, 52, 113, 129, 46, 96, 112, 37, 79, 95, 27,
+ 64, 79, 16, 47, 61, 1, 23, 39, 0, 0, 0, 0, 131, 147, 202,
+ 117, 133, 181, 105, 119, 162, 91, 103, 142, 77, 87, 122, 62, 71, 102,
+ 47, 54, 81, 26, 31, 56, 0, 0, 18, 135, 147, 183, 120, 132, 164,
+ 107, 118, 147, 93, 102, 128, 78, 87, 110, 63, 71, 92, 47, 54, 72,
+ 26, 31, 48, 0, 0, 10, 138, 147, 166, 123, 131, 149, 108, 118, 133,
+ 94, 102, 116, 79, 86, 100, 64, 71, 82, 48, 54, 64, 27, 31, 41,
+ 0, 0, 2, 139, 146, 149, 124, 131, 134, 111, 117, 119, 94, 101, 103,
+ 79, 86, 88, 64, 70, 72, 48, 53, 55, 27, 31, 33, 0, 0, 0,
+ 141, 146, 132, 125, 131, 117, 111, 117, 104, 95, 101, 91, 80, 86, 77,
+ 65, 70, 62, 48, 53, 46, 26, 31, 25, 0, 0, 0, 143, 145, 115,
+ 126, 130, 101, 112, 116, 90, 96, 100, 78, 80, 85, 65, 65, 70, 52,
+ 49, 53, 37, 27, 32, 17, 0, 0, 0, 144, 144, 96, 128, 129, 85,
+ 112, 115, 75, 97, 100, 64, 81, 85, 52, 65, 69, 40, 49, 53, 26,
+ 26, 31, 5, 0, 0, 0, 146, 144, 76, 129, 129, 67, 114, 115, 58,
+ 97, 99, 48, 82, 84, 38, 66, 69, 27, 49, 53, 12, 26, 32, 0,
+ 0, 0, 0, 146, 144, 59, 130, 128, 51, 114, 114, 43, 98, 99, 35,
+ 82, 84, 25, 66, 69, 13, 49, 53, 0, 26, 32, 0, 0, 0, 0,
+ 135, 129, 189, 122, 115, 170, 107, 103, 152, 94, 89, 133, 79, 74, 114,
+ 64, 60, 95, 49, 43, 75, 29, 20, 51, 0, 0, 12, 138, 129, 171,
+ 124, 115, 153, 110, 103, 138, 95, 89, 120, 81, 74, 103, 66, 60, 86,
+ 50, 44, 67, 28, 21, 43, 0, 0, 3, 140, 129, 156, 125, 115, 140,
+ 111, 103, 125, 96, 89, 109, 81, 74, 93, 67, 60, 76, 50, 44, 59,
+ 29, 22, 36, 0, 0, 0, 142, 128, 140, 127, 115, 125, 112, 102, 112,
+ 97, 88, 97, 82, 74, 83, 67, 60, 67, 50, 44, 51, 29, 22, 29,
+ 0, 0, 0, 142, 128, 124, 127, 114, 111, 113, 102, 98, 98, 88, 85,
+ 82, 74, 71, 66, 60, 58, 50, 44, 42, 29, 22, 21, 0, 0, 0,
+ 144, 127, 108, 128, 114, 96, 113, 101, 85, 98, 87, 73, 82, 74, 61,
+ 67, 60, 48, 50, 44, 33, 28, 23, 12, 0, 0, 0, 145, 127, 91,
+ 129, 114, 81, 115, 101, 71, 98, 87, 60, 82, 73, 48, 67, 59, 37,
+ 50, 44, 22, 29, 23, 1, 0, 0, 0, 147, 127, 73, 130, 113, 63,
+ 115, 101, 55, 98, 87, 45, 83, 73, 35, 67, 59, 24, 50, 44, 10,
+ 28, 24, 0, 0, 0, 0, 147, 127, 58, 131, 113, 49, 115, 100, 42,
+ 99, 86, 33, 83, 73, 23, 67, 59, 10, 50, 44, 0, 27, 24, 0,
+ 0, 0, 0, 138, 110, 177, 124, 99, 159, 110, 88, 142, 96, 75, 125,
+ 82, 62, 107, 66, 48, 89, 51, 33, 70, 30, 8, 46, 0, 0, 5,
+ 142, 111, 160, 127, 99, 144, 113, 88, 130, 98, 75, 112, 82, 62, 96,
+ 68, 49, 80, 51, 33, 61, 30, 10, 39, 0, 0, 0, 143, 111, 146,
+ 128, 99, 131, 114, 88, 118, 98, 75, 101, 83, 62, 86, 68, 49, 71,
+ 52, 33, 54, 30, 11, 32, 0, 0, 0, 144, 111, 132, 128, 99, 118,
+ 113, 88, 106, 99, 75, 91, 83, 62, 77, 68, 49, 62, 52, 34, 46,
+ 30, 12, 25, 0, 0, 0, 144, 111, 117, 129, 98, 104, 114, 87, 92,
+ 99, 75, 80, 83, 62, 67, 68, 49, 53, 51, 34, 38, 30, 13, 18,
+ 0, 0, 0, 145, 111, 103, 130, 98, 91, 114, 87, 80, 99, 75, 68,
+ 83, 63, 57, 68, 50, 45, 51, 34, 30, 30, 14, 8, 0, 0, 0,
+ 146, 110, 87, 131, 98, 76, 115, 87, 67, 99, 75, 56, 83, 62, 45,
+ 68, 49, 33, 52, 35, 19, 30, 15, 2, 0, 0, 0, 148, 110, 70,
+ 131, 98, 60, 116, 86, 52, 99, 74, 43, 84, 62, 33, 69, 49, 21,
+ 52, 35, 6, 29, 15, 0, 0, 0, 0, 148, 110, 56, 132, 97, 48,
+ 117, 87, 40, 100, 75, 31, 84, 62, 22, 68, 49, 9, 51, 35, 0,
+ 28, 15, 0, 0, 0, 0, 142, 91, 166, 126, 80, 148, 113, 71, 132,
+ 98, 59, 115, 83, 47, 99, 69, 34, 82, 53, 17, 64, 32, 0, 41,
+ 0, 0, 0, 143, 91, 150, 128, 81, 135, 114, 71, 120, 99, 60, 104,
+ 85, 48, 89, 69, 35, 73, 53, 19, 56, 32, 0, 34, 0, 0, 0,
+ 145, 91, 137, 129, 81, 122, 115, 71, 109, 100, 60, 94, 85, 48, 81,
+ 69, 35, 65, 53, 19, 49, 32, 0, 28, 0, 0, 0, 146, 92, 124,
+ 130, 81, 110, 115, 71, 98, 100, 60, 84, 85, 49, 71, 69, 36, 57,
+ 53, 21, 42, 32, 0, 21, 0, 0, 0, 147, 91, 110, 130, 81, 97,
+ 115, 71, 86, 100, 60, 74, 84, 49, 62, 69, 36, 48, 53, 22, 34,
+ 32, 0, 13, 0, 0, 0, 147, 92, 97, 130, 81, 85, 116, 72, 76,
+ 100, 60, 63, 85, 49, 52, 69, 37, 40, 53, 22, 26, 31, 1, 5,
+ 0, 0, 0, 148, 92, 82, 131, 81, 71, 116, 71, 62, 100, 60, 53,
+ 84, 49, 42, 69, 37, 30, 52, 23, 16, 31, 2, 0, 0, 0, 0,
+ 148, 91, 67, 132, 81, 57, 117, 71, 49, 100, 60, 39, 84, 49, 30,
+ 69, 37, 18, 52, 23, 2, 30, 2, 0, 0, 0, 0, 149, 91, 54,
+ 132, 81, 46, 118, 71, 39, 101, 60, 29, 85, 49, 19, 69, 37, 6,
+ 52, 23, 0, 29, 3, 0, 0, 0, 0, 143, 68, 153, 128, 59, 137,
+ 115, 49, 122, 99, 39, 107, 85, 28, 91, 70, 13, 75, 54, 0, 58,
+ 32, 0, 36, 0, 0, 0, 146, 68, 140, 131, 59, 125, 116, 51, 111,
+ 100, 40, 97, 85, 29, 82, 70, 15, 67, 54, 0, 50, 32, 0, 29,
+ 0, 0, 0, 147, 68, 127, 131, 59, 114, 117, 51, 102, 101, 41, 88,
+ 86, 30, 74, 70, 17, 60, 54, 0, 44, 32, 0, 23, 0, 0, 0,
+ 147, 70, 115, 131, 60, 103, 116, 52, 91, 100, 42, 78, 85, 32, 65,
+ 70, 19, 53, 54, 1, 38, 32, 0, 17, 0, 0, 0, 147, 70, 103,
+ 131, 61, 91, 117, 53, 81, 101, 43, 69, 86, 32, 57, 70, 20, 44,
+ 54, 2, 30, 32, 0, 7, 0, 0, 0, 148, 70, 91, 132, 61, 80,
+ 117, 52, 70, 101, 43, 59, 85, 33, 48, 70, 21, 36, 53, 4, 22,
+ 32, 0, 3, 0, 0, 0, 148, 70, 78, 132, 62, 68, 117, 53, 58,
+ 101, 43, 48, 85, 34, 38, 70, 22, 26, 53, 6, 12, 31, 0, 0,
+ 0, 0, 0, 149, 71, 64, 132, 62, 54, 118, 54, 46, 101, 44, 37,
+ 85, 34, 27, 69, 23, 15, 53, 7, 1, 30, 0, 0, 0, 0, 0,
+ 150, 70, 53, 134, 61, 44, 118, 54, 36, 101, 44, 28, 85, 35, 17,
+ 69, 23, 4, 52, 8, 0, 30, 0, 0, 0, 0, 0, 145, 38, 143,
+ 130, 29, 128, 117, 18, 114, 101, 3, 98, 87, 0, 84, 72, 0, 69,
+ 54, 0, 53, 30, 0, 31, 0, 0, 0, 147, 38, 130, 132, 30, 116,
+ 117, 22, 103, 101, 8, 89, 87, 0, 76, 72, 0, 62, 54, 0, 46,
+ 30, 0, 24, 0, 0, 0, 148, 40, 119, 132, 31, 105, 117, 23, 94,
+ 101, 13, 81, 87, 0, 68, 71, 0, 55, 54, 0, 39, 30, 0, 18,
+ 0, 0, 0, 148, 42, 108, 132, 34, 96, 117, 25, 85, 102, 15, 73,
+ 86, 2, 60, 71, 0, 47, 54, 0, 33, 30, 0, 11, 0, 0, 0,
+ 148, 43, 96, 133, 35, 85, 117, 28, 75, 102, 18, 64, 87, 5, 52,
+ 71, 0, 40, 54, 0, 25, 30, 0, 5, 0, 0, 0, 149, 44, 85,
+ 132, 36, 75, 118, 29, 66, 101, 20, 55, 86, 8, 44, 70, 0, 32,
+ 53, 0, 18, 29, 0, 2, 0, 0, 0, 149, 45, 74, 133, 37, 64,
+ 118, 31, 55, 102, 21, 45, 85, 10, 34, 70, 0, 22, 53, 0, 6,
+ 28, 0, 0, 0, 0, 0, 150, 46, 61, 133, 39, 52, 118, 31, 44,
+ 102, 23, 34, 85, 12, 24, 70, 0, 12, 52, 0, 0, 28, 0, 0,
+ 0, 0, 0, 150, 46, 51, 133, 40, 42, 119, 32, 35, 102, 24, 25,
+ 85, 13, 14, 70, 0, 1, 52, 0, 0, 27, 0, 0, 0, 0, 0,
+ 53, 198, 244, 49, 177, 218, 41, 158, 195, 32, 138, 171, 22, 118, 147,
+ 11, 98, 124, 0, 78, 100, 0, 54, 71, 0, 18, 34, 69, 196, 220,
+ 64, 175, 196, 54, 157, 176, 45, 137, 154, 32, 117, 133, 19, 98, 111,
+ 0, 78, 89, 0, 53, 63, 0, 17, 27, 80, 195, 198, 69, 175, 179,
+ 60, 156, 159, 50, 136, 139, 38, 116, 120, 25, 98, 101, 4, 77, 80,
+ 0, 53, 55, 0, 17, 21, 84, 193, 177, 75, 173, 159, 64, 155, 142,
+ 55, 135, 124, 41, 116, 107, 27, 97, 89, 9, 76, 70, 0, 53, 47,
+ 0, 17, 11, 89, 193, 157, 79, 172, 140, 70, 154, 125, 57, 134, 109,
+ 44, 115, 92, 32, 96, 76, 13, 76, 59, 0, 52, 39, 0, 16, 4,
+ 94, 191, 135, 85, 171, 121, 72, 152, 108, 60, 133, 94, 47, 114, 80,
+ 32, 95, 65, 15, 76, 49, 0, 52, 29, 0, 16, 0, 98, 190, 113,
+ 87, 170, 100, 76, 152, 89, 62, 132, 77, 49, 113, 65, 35, 95, 52,
+ 18, 75, 37, 0, 52, 18, 0, 15, 0, 103, 190, 89, 90, 169, 80,
+ 78, 151, 70, 64, 132, 60, 51, 113, 49, 37, 94, 38, 20, 75, 25,
+ 0, 52, 5, 0, 15, 0, 106, 189, 69, 93, 169, 61, 80, 151, 53,
+ 66, 131, 45, 52, 113, 36, 37, 94, 25, 19, 74, 11, 0, 51, 0,
+ 0, 15, 0, 76, 178, 229, 68, 159, 205, 61, 142, 183, 50, 124, 160,
+ 40, 106, 138, 28, 88, 116, 12, 69, 93, 0, 45, 66, 0, 5, 29,
+ 86, 177, 207, 78, 158, 184, 67, 142, 166, 56, 123, 145, 45, 106, 125,
+ 31, 88, 105, 16, 69, 83, 0, 45, 58, 0, 6, 22, 93, 176, 187,
+ 81, 158, 168, 71, 141, 150, 61, 123, 131, 47, 105, 113, 35, 87, 94,
+ 20, 68, 74, 0, 45, 51, 0, 5, 16, 98, 175, 168, 84, 157, 150,
+ 75, 140, 134, 63, 122, 117, 50, 104, 100, 37, 87, 83, 21, 68, 65,
+ 0, 45, 42, 0, 4, 7, 100, 174, 149, 89, 155, 132, 76, 139, 117,
+ 65, 121, 102, 53, 104, 87, 39, 86, 72, 23, 67, 55, 0, 45, 34,
+ 0, 3, 0, 103, 173, 130, 92, 155, 115, 80, 138, 102, 68, 120, 88,
+ 53, 103, 75, 40, 86, 61, 24, 67, 45, 0, 45, 25, 0, 3, 0,
+ 107, 172, 108, 95, 154, 96, 82, 137, 85, 70, 119, 73, 55, 102, 61,
+ 42, 85, 49, 25, 67, 34, 0, 45, 14, 0, 3, 0, 110, 172, 86,
+ 97, 153, 76, 85, 137, 67, 70, 119, 57, 56, 102, 46, 42, 84, 35,
+ 26, 66, 21, 0, 44, 1, 0, 3, 0, 112, 171, 67, 98, 153, 59,
+ 86, 137, 52, 71, 119, 44, 58, 102, 34, 44, 85, 22, 27, 66, 7,
+ 0, 44, 0, 0, 3, 0, 90, 160, 215, 81, 144, 193, 70, 129, 173,
+ 61, 112, 151, 49, 95, 131, 37, 79, 109, 22, 61, 87, 0, 38, 61,
+ 0, 0, 25, 96, 160, 194, 86, 143, 174, 75, 128, 157, 65, 112, 137,
+ 53, 95, 117, 40, 78, 98, 25, 60, 78, 0, 38, 53, 0, 0, 17,
+ 100, 159, 177, 89, 143, 159, 79, 128, 143, 67, 111, 124, 55, 95, 107,
+ 42, 78, 89, 27, 60, 70, 2, 38, 46, 0, 0, 9, 104, 158, 159,
+ 92, 142, 143, 81, 127, 127, 69, 110, 110, 56, 94, 94, 43, 78, 78,
+ 28, 60, 60, 2, 38, 38, 0, 0, 1, 107, 157, 140, 94, 141, 125,
+ 82, 126, 112, 71, 110, 97, 59, 94, 82, 45, 77, 67, 29, 59, 51,
+ 4, 37, 30, 0, 0, 0, 110, 156, 122, 97, 140, 109, 85, 125, 97,
+ 72, 109, 83, 58, 93, 71, 45, 77, 57, 29, 60, 42, 5, 38, 22,
+ 0, 0, 0, 111, 156, 103, 99, 139, 91, 87, 125, 81, 73, 108, 69,
+ 60, 92, 58, 46, 77, 45, 30, 59, 31, 5, 38, 12, 0, 0, 0,
+ 115, 156, 82, 101, 140, 73, 88, 124, 63, 74, 108, 53, 60, 92, 44,
+ 46, 76, 32, 31, 59, 18, 6, 37, 0, 0, 0, 0, 116, 155, 65,
+ 102, 139, 58, 89, 124, 49, 75, 108, 41, 61, 92, 32, 48, 76, 21,
+ 31, 59, 6, 5, 37, 0, 0, 0, 0, 100, 141, 201, 88, 127, 181,
+ 79, 114, 162, 69, 99, 142, 57, 83, 122, 44, 68, 102, 30, 51, 81,
+ 7, 28, 56, 0, 0, 19, 105, 141, 182, 94, 127, 163, 83, 114, 146,
+ 71, 98, 128, 59, 83, 110, 46, 68, 91, 31, 51, 72, 10, 28, 48,
+ 0, 0, 11, 108, 141, 166, 96, 127, 149, 85, 113, 133, 73, 98, 116,
+ 60, 83, 99, 46, 68, 82, 32, 51, 64, 11, 29, 41, 0, 0, 2,
+ 111, 141, 149, 98, 126, 134, 88, 112, 119, 74, 97, 103, 61, 83, 88,
+ 48, 67, 72, 33, 51, 56, 11, 29, 34, 0, 0, 0, 112, 140, 132,
+ 100, 125, 118, 89, 112, 105, 75, 97, 91, 62, 82, 77, 49, 68, 62,
+ 33, 51, 47, 12, 29, 26, 0, 0, 0, 115, 140, 116, 102, 125, 103,
+ 90, 111, 91, 76, 96, 78, 62, 82, 65, 49, 67, 52, 34, 51, 38,
+ 13, 29, 18, 0, 0, 0, 117, 139, 97, 103, 124, 87, 91, 111, 77,
+ 78, 96, 65, 63, 81, 54, 49, 67, 41, 34, 51, 27, 12, 29, 7,
+ 0, 0, 0, 119, 138, 78, 105, 124, 69, 92, 110, 60, 78, 95, 50,
+ 65, 81, 40, 50, 67, 29, 34, 51, 15, 13, 30, 0, 0, 0, 0,
+ 120, 138, 64, 106, 124, 54, 93, 110, 47, 78, 95, 38, 65, 81, 29,
+ 50, 66, 17, 34, 50, 2, 13, 29, 0, 0, 0, 0, 107, 124, 189,
+ 96, 111, 169, 85, 99, 152, 73, 85, 132, 61, 71, 114, 48, 57, 95,
+ 34, 41, 75, 14, 18, 51, 0, 0, 13, 111, 124, 171, 100, 111, 153,
+ 88, 99, 137, 75, 85, 120, 63, 72, 103, 50, 58, 85, 36, 41, 66,
+ 15, 19, 43, 0, 0, 4, 113, 124, 156, 101, 111, 139, 90, 99, 125,
+ 77, 85, 109, 64, 71, 93, 51, 57, 77, 36, 42, 59, 17, 20, 37,
+ 0, 0, 0, 115, 124, 140, 103, 111, 125, 90, 99, 112, 78, 85, 97,
+ 64, 71, 82, 52, 57, 67, 36, 42, 50, 16, 20, 30, 0, 0, 0,
+ 117, 123, 125, 104, 110, 111, 92, 98, 99, 79, 85, 86, 65, 71, 72,
+ 51, 58, 59, 37, 42, 43, 17, 21, 22, 0, 0, 0, 118, 123, 110,
+ 105, 110, 97, 93, 98, 86, 78, 84, 74, 66, 71, 62, 52, 57, 49,
+ 37, 42, 34, 17, 22, 14, 0, 0, 0, 120, 123, 93, 106, 109, 82,
+ 94, 97, 72, 80, 84, 61, 66, 71, 50, 52, 57, 38, 37, 42, 24,
+ 17, 22, 2, 0, 0, 0, 121, 122, 75, 108, 109, 66, 95, 97, 58,
+ 80, 84, 48, 66, 71, 37, 52, 57, 26, 37, 42, 12, 16, 22, 0,
+ 0, 0, 0, 122, 123, 62, 108, 109, 52, 95, 97, 45, 81, 84, 36,
+ 67, 70, 26, 52, 57, 14, 37, 42, 0, 15, 22, 0, 0, 0, 0,
+ 113, 107, 177, 102, 96, 159, 89, 85, 141, 78, 72, 124, 65, 60, 107,
+ 52, 46, 89, 37, 30, 70, 18, 5, 46, 0, 0, 6, 116, 107, 160,
+ 104, 96, 144, 92, 85, 129, 80, 72, 112, 67, 60, 96, 53, 47, 80,
+ 38, 31, 62, 19, 7, 39, 0, 0, 0, 118, 107, 147, 105, 96, 131,
+ 93, 85, 118, 80, 72, 101, 67, 60, 87, 54, 47, 71, 39, 31, 54,
+ 19, 8, 32, 0, 0, 0, 119, 107, 132, 106, 96, 118, 94, 85, 106,
+ 81, 73, 91, 67, 60, 77, 54, 47, 63, 39, 32, 47, 20, 9, 25,
+ 0, 0, 0, 119, 107, 118, 106, 95, 105, 94, 85, 93, 81, 72, 80,
+ 68, 60, 68, 54, 47, 54, 39, 32, 39, 20, 11, 18, 0, 0, 0,
+ 121, 107, 104, 107, 96, 92, 95, 84, 80, 81, 72, 69, 68, 61, 58,
+ 54, 48, 46, 39, 33, 31, 20, 12, 9, 0, 0, 0, 123, 107, 88,
+ 108, 95, 77, 96, 84, 68, 82, 72, 57, 68, 60, 46, 54, 47, 35,
+ 39, 33, 20, 19, 13, 2, 0, 0, 0, 123, 106, 72, 110, 95, 63,
+ 96, 84, 54, 82, 72, 45, 69, 60, 35, 55, 48, 23, 39, 33, 9,
+ 18, 14, 0, 0, 0, 0, 125, 106, 60, 110, 94, 50, 98, 84, 42,
+ 83, 72, 34, 69, 60, 25, 55, 48, 12, 39, 33, 0, 17, 13, 0,
+ 0, 0, 0, 118, 89, 165, 105, 79, 148, 93, 69, 132, 81, 57, 115,
+ 68, 45, 99, 55, 32, 82, 41, 15, 64, 21, 0, 41, 0, 0, 0,
+ 120, 89, 150, 107, 79, 135, 96, 69, 121, 82, 58, 105, 70, 46, 89,
+ 56, 34, 73, 41, 17, 56, 21, 0, 34, 0, 0, 0, 121, 89, 137,
+ 108, 79, 123, 96, 69, 109, 82, 58, 95, 70, 47, 81, 56, 34, 66,
+ 41, 18, 49, 21, 0, 28, 0, 0, 0, 122, 90, 124, 109, 79, 110,
+ 96, 69, 99, 83, 58, 85, 70, 47, 72, 56, 35, 58, 41, 19, 42,
+ 21, 0, 22, 0, 0, 0, 123, 90, 111, 110, 79, 98, 97, 69, 87,
+ 83, 59, 75, 70, 47, 63, 56, 35, 50, 41, 20, 35, 21, 0, 14,
+ 0, 0, 0, 123, 90, 98, 110, 79, 87, 97, 70, 76, 84, 58, 64,
+ 70, 48, 53, 56, 36, 41, 40, 21, 26, 21, 0, 5, 0, 0, 0,
+ 125, 89, 84, 111, 79, 73, 97, 69, 64, 84, 59, 54, 70, 48, 43,
+ 56, 36, 31, 40, 22, 17, 20, 1, 1, 0, 0, 0, 125, 89, 69,
+ 112, 79, 60, 98, 70, 51, 84, 59, 42, 70, 48, 32, 56, 36, 20,
+ 41, 22, 5, 19, 2, 0, 0, 0, 0, 126, 89, 57, 112, 79, 49,
+ 99, 70, 41, 84, 59, 32, 70, 48, 22, 56, 36, 10, 40, 22, 0,
+ 18, 2, 0, 0, 0, 0, 121, 67, 154, 108, 58, 138, 97, 50, 124,
+ 84, 39, 107, 71, 28, 92, 58, 12, 76, 43, 0, 59, 20, 0, 37,
+ 0, 0, 0, 124, 68, 140, 111, 59, 126, 98, 50, 112, 84, 40, 98,
+ 71, 29, 83, 58, 15, 67, 42, 0, 51, 20, 0, 30, 0, 0, 0,
+ 124, 68, 129, 111, 59, 114, 99, 51, 102, 86, 41, 88, 71, 30, 75,
+ 58, 17, 60, 42, 0, 45, 20, 0, 24, 0, 0, 0, 125, 70, 116,
+ 111, 60, 103, 99, 51, 92, 85, 41, 79, 71, 31, 66, 58, 19, 53,
+ 42, 3, 38, 20, 0, 17, 0, 0, 0, 125, 70, 104, 111, 61, 93,
+ 99, 52, 81, 85, 43, 69, 72, 32, 58, 58, 20, 45, 42, 4, 31,
+ 20, 0, 8, 0, 0, 0, 126, 70, 92, 111, 61, 81, 99, 52, 71,
+ 85, 42, 60, 71, 33, 49, 57, 21, 37, 42, 6, 23, 20, 0, 3,
+ 0, 0, 0, 126, 70, 79, 112, 61, 70, 99, 53, 60, 85, 43, 50,
+ 71, 33, 39, 57, 22, 28, 41, 7, 13, 19, 0, 0, 0, 0, 0,
+ 127, 71, 66, 113, 62, 56, 100, 53, 48, 86, 44, 39, 71, 34, 29,
+ 57, 23, 18, 41, 8, 2, 18, 0, 0, 0, 0, 0, 128, 70, 55,
+ 114, 62, 46, 100, 54, 39, 86, 44, 30, 71, 34, 20, 57, 23, 7,
+ 41, 9, 0, 18, 0, 0, 0, 0, 0, 124, 41, 145, 111, 32, 128,
+ 99, 23, 114, 86, 10, 100, 73, 0, 85, 60, 0, 71, 43, 0, 54,
+ 17, 0, 32, 0, 0, 0, 126, 42, 131, 113, 33, 117, 100, 25, 104,
+ 86, 14, 90, 73, 0, 77, 60, 0, 63, 44, 0, 47, 18, 0, 25,
+ 0, 0, 0, 127, 43, 120, 113, 34, 106, 101, 26, 95, 86, 17, 82,
+ 73, 2, 69, 59, 0, 56, 43, 0, 41, 18, 0, 19, 0, 0, 0,
+ 127, 45, 109, 113, 37, 97, 101, 28, 85, 86, 19, 74, 73, 5, 61,
+ 59, 0, 48, 43, 0, 34, 19, 0, 11, 0, 0, 0, 127, 46, 98,
+ 114, 38, 86, 100, 30, 76, 87, 21, 65, 73, 9, 54, 59, 0, 41,
+ 43, 0, 26, 18, 0, 5, 0, 0, 0, 127, 47, 87, 113, 39, 76,
+ 101, 31, 67, 86, 22, 56, 72, 11, 45, 59, 0, 33, 43, 0, 19,
+ 18, 0, 2, 0, 0, 0, 128, 48, 75, 114, 39, 65, 101, 33, 56,
+ 86, 23, 46, 72, 12, 36, 58, 0, 24, 42, 0, 9, 17, 0, 0,
+ 0, 0, 0, 129, 48, 63, 114, 41, 54, 102, 33, 46, 87, 24, 36,
+ 72, 14, 26, 58, 1, 14, 42, 0, 2, 16, 0, 0, 0, 0, 0,
+ 128, 48, 53, 114, 41, 44, 102, 34, 37, 87, 25, 27, 72, 15, 17,
+ 58, 1, 3, 41, 0, 0, 15, 0, 0, 0, 0, 0, 0, 189, 242,
+ 0, 169, 217, 0, 151, 194, 0, 132, 170, 0, 113, 147, 0, 94, 123,
+ 0, 74, 99, 0, 51, 71, 0, 15, 34, 1, 187, 219, 1, 167, 195,
+ 0, 150, 175, 0, 131, 153, 0, 113, 132, 0, 94, 111, 0, 74, 89,
+ 0, 50, 63, 0, 13, 28, 1, 186, 198, 1, 167, 178, 0, 149, 158,
+ 0, 130, 139, 0, 111, 119, 0, 93, 100, 0, 74, 80, 0, 50, 55,
+ 0, 13, 22, 1, 185, 176, 1, 165, 159, 1, 148, 142, 0, 129, 123,
+ 0, 111, 106, 0, 93, 89, 0, 73, 70, 0, 50, 47, 0, 13, 13,
+ 1, 184, 157, 1, 164, 141, 1, 147, 125, 0, 128, 110, 0, 110, 93,
+ 0, 92, 77, 0, 73, 60, 0, 50, 39, 0, 12, 5, 25, 182, 137,
+ 25, 163, 122, 17, 146, 109, 0, 128, 96, 0, 110, 81, 0, 92, 66,
+ 0, 73, 51, 0, 50, 30, 0, 10, 0, 42, 181, 114, 35, 163, 102,
+ 30, 145, 91, 14, 127, 80, 0, 109, 67, 0, 91, 53, 0, 72, 39,
+ 0, 50, 19, 0, 10, 0, 52, 181, 92, 43, 162, 83, 32, 145, 73,
+ 19, 126, 63, 0, 108, 52, 0, 90, 40, 0, 72, 27, 0, 50, 7,
+ 0, 10, 0, 57, 181, 74, 48, 162, 66, 37, 144, 57, 24, 126, 49,
+ 7, 108, 40, 0, 90, 29, 0, 72, 15, 0, 49, 0, 0, 10, 0,
+ 1, 170, 227, 1, 152, 203, 0, 136, 182, 0, 119, 159, 0, 101, 137,
+ 0, 84, 115, 0, 65, 92, 0, 43, 66, 0, 1, 29, 1, 169, 206,
+ 1, 151, 184, 1, 136, 165, 0, 118, 144, 0, 102, 125, 0, 84, 105,
+ 0, 65, 83, 0, 43, 58, 0, 0, 22, 29, 168, 186, 21, 151, 167,
+ 14, 135, 150, 4, 118, 131, 0, 101, 112, 0, 83, 94, 0, 65, 75,
+ 0, 43, 51, 0, 0, 16, 41, 167, 167, 33, 150, 150, 31, 134, 134,
+ 19, 117, 117, 4, 100, 100, 0, 83, 83, 0, 65, 65, 0, 42, 43,
+ 0, 0, 8, 48, 167, 149, 41, 149, 133, 33, 133, 118, 25, 116, 103,
+ 13, 99, 88, 0, 83, 73, 0, 65, 56, 0, 42, 35, 0, 0, 0,
+ 58, 165, 130, 49, 148, 115, 42, 132, 103, 31, 115, 89, 18, 99, 75,
+ 0, 82, 61, 0, 64, 46, 0, 42, 26, 0, 0, 0, 62, 164, 110,
+ 55, 147, 97, 45, 132, 87, 35, 115, 75, 22, 98, 63, 5, 82, 50,
+ 0, 64, 36, 0, 42, 16, 0, 0, 0, 69, 164, 89, 60, 147, 78,
+ 50, 131, 70, 37, 114, 59, 26, 98, 49, 10, 81, 37, 0, 64, 24,
+ 0, 42, 4, 0, 0, 0, 71, 164, 71, 63, 147, 63, 53, 131, 55,
+ 40, 114, 47, 28, 98, 38, 13, 81, 26, 0, 64, 12, 0, 42, 0,
+ 0, 0, 0, 28, 153, 214, 24, 138, 193, 23, 123, 171, 16, 107, 150,
+ 0, 91, 130, 0, 75, 109, 0, 58, 87, 0, 35, 61, 0, 0, 25,
+ 48, 153, 194, 41, 138, 174, 34, 123, 156, 27, 107, 136, 16, 91, 117,
+ 1, 75, 98, 0, 57, 78, 0, 35, 53, 0, 0, 17, 55, 153, 177,
+ 47, 137, 158, 42, 122, 142, 33, 107, 124, 22, 91, 106, 6, 75, 88,
+ 0, 57, 70, 0, 35, 46, 0, 0, 9, 61, 152, 158, 53, 136, 143,
+ 45, 122, 127, 36, 106, 111, 24, 90, 94, 10, 74, 78, 0, 57, 61,
+ 0, 35, 39, 0, 0, 2, 67, 151, 141, 59, 135, 126, 49, 121, 112,
+ 39, 105, 98, 29, 90, 83, 14, 74, 68, 0, 57, 52, 0, 35, 31,
+ 0, 0, 0, 71, 150, 123, 62, 135, 110, 54, 120, 98, 42, 105, 84,
+ 31, 89, 71, 16, 74, 58, 0, 57, 43, 0, 35, 22, 0, 0, 0,
+ 74, 150, 105, 64, 134, 92, 55, 120, 83, 45, 104, 71, 34, 89, 59,
+ 20, 73, 47, 0, 57, 32, 0, 35, 13, 0, 0, 0, 78, 149, 84,
+ 69, 134, 75, 59, 120, 66, 47, 103, 56, 34, 88, 46, 22, 73, 34,
+ 1, 57, 20, 0, 35, 1, 0, 0, 0, 80, 149, 69, 70, 133, 61,
+ 60, 119, 53, 49, 103, 44, 36, 88, 35, 23, 73, 24, 2, 56, 10,
+ 0, 35, 0, 0, 0, 0, 58, 136, 200, 50, 122, 180, 45, 109, 162,
+ 38, 94, 141, 27, 80, 121, 15, 65, 102, 0, 48, 81, 0, 26, 56,
+ 0, 0, 19, 66, 136, 182, 59, 122, 163, 52, 109, 146, 42, 94, 128,
+ 32, 80, 109, 20, 65, 91, 2, 48, 72, 0, 26, 49, 0, 0, 11,
+ 70, 136, 165, 62, 122, 149, 55, 108, 133, 46, 94, 116, 35, 80, 99,
+ 21, 65, 82, 4, 49, 64, 0, 26, 41, 0, 0, 3, 76, 135, 149,
+ 66, 121, 133, 58, 108, 119, 48, 94, 103, 36, 79, 88, 23, 65, 73,
+ 7, 49, 56, 0, 27, 34, 0, 0, 0, 78, 135, 133, 69, 120, 118,
+ 60, 107, 106, 50, 93, 92, 39, 79, 77, 26, 65, 63, 8, 49, 47,
+ 0, 27, 26, 0, 0, 0, 82, 134, 117, 71, 120, 104, 62, 107, 92,
+ 51, 93, 79, 39, 78, 66, 27, 64, 53, 10, 48, 39, 0, 27, 18,
+ 0, 0, 0, 84, 134, 99, 73, 119, 87, 64, 106, 77, 53, 92, 66,
+ 42, 78, 55, 28, 64, 42, 11, 48, 29, 0, 28, 9, 0, 0, 0,
+ 87, 133, 81, 76, 119, 72, 66, 106, 62, 55, 92, 52, 43, 78, 42,
+ 29, 64, 31, 12, 48, 17, 0, 28, 0, 0, 0, 0, 88, 134, 67,
+ 77, 119, 58, 68, 106, 51, 56, 92, 42, 44, 78, 32, 30, 64, 20,
+ 12, 48, 6, 0, 28, 0, 0, 0, 0, 73, 120, 189, 64, 107, 168,
+ 57, 96, 151, 47, 82, 133, 38, 69, 114, 26, 55, 95, 11, 39, 75,
+ 0, 16, 51, 0, 0, 14, 78, 120, 171, 69, 107, 153, 62, 95, 137,
+ 51, 82, 119, 40, 69, 102, 29, 55, 85, 15, 39, 66, 0, 17, 44,
+ 0, 0, 4, 81, 120, 156, 71, 107, 140, 64, 95, 125, 53, 82, 109,
+ 42, 69, 93, 31, 55, 77, 16, 39, 59, 0, 18, 37, 0, 0, 0,
+ 85, 120, 141, 74, 107, 126, 65, 95, 112, 54, 82, 97, 43, 69, 82,
+ 32, 55, 67, 17, 39, 51, 0, 19, 30, 0, 0, 0, 86, 119, 126,
+ 76, 106, 112, 66, 95, 100, 56, 81, 85, 45, 69, 72, 33, 55, 59,
+ 18, 40, 43, 0, 19, 22, 0, 0, 0, 89, 119, 110, 78, 106, 98,
+ 69, 94, 87, 56, 81, 75, 46, 68, 62, 33, 55, 49, 18, 40, 35,
+ 0, 20, 15, 0, 0, 0, 89, 119, 95, 80, 106, 83, 70, 94, 73,
+ 58, 81, 63, 46, 68, 51, 34, 55, 39, 19, 40, 25, 0, 20, 4,
+ 0, 0, 0, 92, 118, 78, 82, 106, 68, 70, 93, 59, 59, 81, 49,
+ 47, 68, 39, 34, 55, 28, 19, 40, 14, 0, 20, 0, 0, 0, 0,
+ 93, 118, 65, 82, 105, 55, 72, 93, 48, 60, 81, 39, 47, 68, 29,
+ 34, 55, 18, 20, 40, 2, 0, 20, 0, 0, 0, 0, 83, 104, 177,
+ 74, 93, 159, 65, 82, 142, 56, 70, 124, 45, 57, 106, 33, 44, 89,
+ 20, 28, 70, 1, 4, 46, 0, 0, 8, 86, 104, 161, 78, 93, 145,
+ 68, 82, 128, 58, 70, 112, 48, 58, 96, 35, 45, 80, 21, 29, 62,
+ 1, 6, 40, 0, 0, 0, 89, 104, 147, 79, 93, 131, 69, 82, 118,
+ 59, 70, 102, 47, 58, 87, 36, 45, 72, 23, 29, 55, 3, 7, 33,
+ 0, 0, 0, 90, 104, 132, 80, 93, 119, 71, 82, 106, 60, 70, 91,
+ 48, 58, 77, 37, 45, 62, 23, 30, 47, 4, 7, 26, 0, 0, 0,
+ 92, 104, 118, 82, 93, 105, 72, 82, 93, 61, 69, 80, 50, 58, 68,
+ 37, 45, 55, 23, 30, 39, 4, 8, 18, 0, 0, 0, 94, 104, 105,
+ 82, 92, 93, 72, 82, 82, 61, 70, 70, 50, 58, 58, 38, 46, 46,
+ 23, 31, 31, 6, 10, 11, 0, 0, 0, 95, 104, 90, 84, 92, 79,
+ 74, 82, 70, 62, 70, 58, 50, 58, 48, 37, 46, 36, 23, 31, 22,
+ 4, 11, 3, 0, 0, 0, 96, 103, 74, 85, 92, 65, 75, 81, 56,
+ 63, 70, 47, 50, 58, 37, 38, 46, 25, 24, 31, 11, 3, 11, 0,
+ 0, 0, 0, 97, 103, 62, 86, 92, 53, 76, 81, 45, 63, 69, 36,
+ 51, 58, 27, 38, 46, 15, 23, 31, 0, 3, 11, 0, 0, 0, 0,
+ 90, 87, 165, 81, 77, 148, 72, 67, 132, 62, 55, 116, 50, 44, 99,
+ 39, 31, 82, 25, 14, 64, 1, 0, 42, 0, 0, 1, 93, 87, 150,
+ 83, 77, 135, 74, 67, 121, 63, 56, 105, 52, 45, 90, 40, 32, 74,
+ 25, 16, 57, 3, 0, 35, 0, 0, 0, 95, 87, 138, 85, 77, 123,
+ 75, 67, 109, 63, 57, 95, 53, 45, 81, 41, 33, 66, 26, 17, 50,
+ 4, 0, 28, 0, 0, 0, 95, 88, 124, 85, 77, 111, 75, 67, 99,
+ 63, 57, 86, 53, 45, 72, 41, 33, 58, 26, 18, 43, 5, 1, 22,
+ 0, 0, 0, 97, 88, 112, 87, 77, 100, 76, 68, 88, 64, 57, 76,
+ 53, 46, 63, 41, 34, 50, 26, 19, 35, 5, 2, 14, 0, 0, 0,
+ 99, 87, 99, 87, 78, 88, 76, 68, 77, 65, 57, 65, 53, 46, 54,
+ 41, 35, 42, 27, 20, 27, 6, 2, 5, 0, 0, 0, 100, 87, 85,
+ 88, 77, 75, 77, 68, 65, 65, 57, 54, 53, 46, 44, 41, 35, 32,
+ 27, 21, 19, 5, 3, 2, 0, 0, 0, 100, 88, 71, 89, 77, 61,
+ 78, 68, 53, 66, 57, 44, 53, 47, 33, 41, 35, 22, 27, 21, 7,
+ 5, 3, 0, 0, 0, 0, 101, 87, 60, 90, 77, 52, 79, 68, 44,
+ 66, 58, 34, 53, 47, 25, 41, 35, 13, 26, 22, 0, 5, 3, 0,
+ 0, 0, 0, 97, 67, 155, 86, 58, 138, 77, 50, 125, 66, 39, 108,
+ 55, 28, 92, 43, 12, 76, 29, 0, 59, 2, 0, 37, 0, 0, 0,
+ 99, 67, 141, 88, 59, 127, 78, 50, 113, 68, 40, 98, 56, 29, 83,
+ 44, 15, 68, 29, 0, 52, 3, 0, 30, 0, 0, 0, 100, 68, 129,
+ 89, 59, 115, 80, 51, 103, 68, 41, 89, 56, 30, 75, 44, 16, 61,
+ 30, 0, 45, 4, 0, 24, 0, 0, 0, 100, 69, 118, 90, 60, 104,
+ 80, 51, 92, 67, 41, 79, 56, 31, 66, 44, 18, 53, 29, 2, 38,
+ 4, 0, 18, 0, 0, 0, 101, 69, 104, 90, 61, 93, 79, 51, 82,
+ 67, 42, 70, 56, 32, 59, 44, 20, 46, 29, 4, 31, 6, 0, 9,
+ 0, 0, 0, 102, 69, 93, 90, 61, 83, 80, 52, 72, 68, 42, 61,
+ 56, 33, 50, 43, 20, 38, 29, 5, 23, 7, 0, 4, 0, 0, 0,
+ 102, 70, 80, 91, 61, 71, 80, 52, 61, 68, 43, 51, 56, 32, 40,
+ 44, 21, 29, 30, 6, 14, 7, 0, 0, 0, 0, 0, 103, 70, 68,
+ 92, 61, 58, 81, 53, 50, 69, 43, 41, 56, 34, 31, 43, 22, 19,
+ 29, 7, 3, 7, 0, 0, 0, 0, 0, 104, 70, 57, 92, 61, 48,
+ 82, 53, 40, 69, 43, 32, 56, 34, 22, 43, 23, 10, 29, 8, 0,
+ 6, 0, 0, 0, 0, 0, 101, 45, 145, 91, 35, 129, 80, 26, 116,
+ 69, 15, 101, 59, 0, 86, 46, 0, 71, 31, 0, 55, 0, 0, 33,
+ 0, 0, 0, 104, 44, 132, 92, 36, 118, 82, 28, 105, 71, 17, 91,
+ 58, 3, 77, 46, 0, 63, 31, 0, 48, 2, 0, 26, 0, 0, 0,
+ 104, 46, 121, 93, 37, 107, 82, 30, 96, 70, 20, 83, 58, 6, 70,
+ 46, 0, 57, 32, 0, 41, 4, 0, 20, 0, 0, 0, 104, 48, 110,
+ 93, 40, 98, 82, 31, 87, 70, 22, 74, 59, 9, 62, 45, 0, 49,
+ 31, 0, 35, 6, 0, 13, 0, 0, 0, 104, 48, 99, 92, 41, 88,
+ 82, 32, 77, 70, 23, 65, 58, 11, 54, 46, 0, 42, 32, 0, 27,
+ 7, 0, 5, 0, 0, 0, 105, 50, 88, 93, 41, 77, 82, 34, 68,
+ 71, 24, 57, 58, 13, 46, 45, 1, 35, 31, 0, 21, 7, 0, 2,
+ 0, 0, 0, 105, 50, 76, 94, 41, 66, 83, 34, 57, 71, 25, 47,
+ 58, 15, 37, 45, 2, 25, 32, 0, 11, 7, 0, 0, 0, 0, 0,
+ 106, 50, 64, 94, 42, 55, 83, 35, 47, 71, 26, 38, 58, 16, 27,
+ 45, 4, 17, 31, 0, 4, 7, 0, 0, 0, 0, 0, 106, 51, 54,
+ 95, 42, 45, 83, 35, 38, 71, 27, 30, 58, 16, 19, 45, 5, 7,
+ 30, 0, 0, 6, 0, 0, 0, 0, 0, 0, 181, 240, 0, 162, 216,
+ 0, 144, 193, 0, 126, 168, 0, 109, 146, 0, 91, 123, 0, 71, 98,
+ 0, 48, 71, 0, 9, 34, 0, 179, 218, 0, 161, 195, 0, 144, 174,
+ 0, 126, 153, 0, 108, 132, 0, 90, 110, 0, 71, 88, 0, 48, 63,
+ 0, 8, 29, 0, 178, 197, 0, 159, 177, 0, 143, 159, 0, 125, 139,
+ 0, 107, 119, 0, 90, 99, 0, 71, 79, 0, 48, 55, 0, 8, 22,
+ 0, 177, 177, 0, 158, 158, 0, 142, 141, 0, 124, 123, 0, 107, 106,
+ 0, 89, 88, 0, 71, 70, 0, 48, 47, 0, 8, 14, 0, 176, 157,
+ 0, 158, 141, 0, 141, 126, 0, 123, 109, 0, 106, 93, 0, 89, 78,
+ 0, 70, 60, 0, 47, 39, 0, 7, 5, 0, 175, 138, 0, 157, 123,
+ 0, 141, 110, 0, 123, 96, 0, 105, 81, 0, 88, 67, 0, 70, 51,
+ 0, 48, 30, 0, 6, 0, 0, 173, 115, 0, 155, 104, 0, 140, 92,
+ 0, 122, 80, 0, 105, 67, 0, 88, 55, 0, 69, 40, 0, 47, 20,
+ 0, 6, 0, 0, 173, 94, 0, 155, 85, 0, 139, 75, 0, 121, 64,
+ 0, 104, 53, 0, 88, 42, 0, 70, 28, 0, 47, 9, 0, 6, 0,
+ 0, 173, 76, 0, 155, 70, 0, 138, 61, 0, 122, 53, 0, 104, 44,
+ 0, 87, 32, 0, 69, 18, 0, 47, 0, 0, 6, 0, 0, 164, 226,
+ 0, 147, 203, 0, 131, 181, 0, 114, 158, 0, 97, 136, 0, 80, 115,
+ 0, 63, 92, 0, 40, 65, 0, 0, 30, 0, 162, 205, 0, 145, 184,
+ 0, 130, 164, 0, 114, 143, 0, 97, 124, 0, 81, 104, 0, 63, 83,
+ 0, 40, 58, 0, 0, 23, 0, 162, 187, 0, 145, 167, 0, 130, 150,
+ 0, 113, 131, 0, 96, 112, 0, 80, 93, 0, 62, 74, 0, 40, 50,
+ 0, 0, 16, 0, 160, 167, 0, 144, 150, 0, 129, 134, 0, 112, 116,
+ 0, 96, 100, 0, 80, 82, 0, 62, 65, 0, 40, 43, 0, 0, 7,
+ 0, 160, 148, 0, 143, 133, 0, 128, 118, 0, 111, 103, 0, 96, 88,
+ 0, 80, 73, 0, 62, 56, 0, 40, 35, 0, 0, 0, 0, 158, 130,
+ 0, 142, 117, 0, 127, 104, 0, 111, 89, 0, 95, 76, 0, 79, 62,
+ 0, 62, 46, 0, 40, 26, 0, 0, 0, 0, 158, 111, 0, 141, 99,
+ 0, 127, 88, 0, 111, 76, 0, 95, 63, 0, 79, 51, 0, 62, 37,
+ 0, 40, 18, 0, 0, 0, 0, 158, 91, 0, 141, 81, 0, 126, 72,
+ 0, 110, 62, 0, 94, 50, 0, 79, 39, 0, 62, 25, 0, 40, 5,
+ 0, 0, 0, 0, 157, 74, 0, 141, 66, 0, 126, 59, 0, 110, 49,
+ 0, 94, 40, 0, 78, 29, 0, 61, 15, 0, 40, 0, 0, 0, 0,
+ 0, 148, 214, 0, 133, 192, 0, 119, 171, 0, 103, 150, 0, 87, 129,
+ 0, 72, 108, 0, 55, 86, 0, 32, 61, 0, 0, 25, 0, 147, 193,
+ 0, 132, 173, 0, 118, 155, 0, 103, 136, 0, 87, 116, 0, 72, 98,
+ 0, 55, 78, 0, 32, 53, 0, 0, 17, 0, 147, 176, 0, 132, 158,
+ 0, 118, 142, 0, 102, 124, 0, 87, 106, 0, 72, 88, 0, 55, 69,
+ 0, 33, 46, 0, 0, 9, 0, 146, 159, 0, 131, 142, 0, 117, 127,
+ 0, 102, 111, 0, 87, 95, 0, 71, 79, 0, 55, 61, 0, 33, 39,
+ 0, 0, 2, 0, 145, 140, 0, 130, 126, 0, 117, 112, 0, 101, 98,
+ 0, 86, 83, 0, 71, 68, 0, 55, 52, 0, 33, 31, 0, 0, 0,
+ 0, 144, 124, 0, 130, 111, 0, 116, 99, 0, 101, 84, 0, 86, 72,
+ 0, 71, 59, 0, 55, 43, 0, 33, 23, 0, 0, 0, 0, 144, 106,
+ 0, 129, 94, 0, 115, 83, 0, 101, 72, 0, 85, 60, 0, 71, 48,
+ 0, 55, 34, 0, 33, 14, 0, 0, 0, 3, 143, 86, 0, 129, 77,
+ 0, 115, 68, 0, 100, 58, 0, 85, 48, 0, 70, 36, 0, 54, 22,
+ 0, 33, 3, 0, 0, 0, 18, 143, 72, 13, 128, 63, 0, 115, 57,
+ 0, 100, 47, 0, 85, 37, 0, 70, 26, 0, 54, 13, 0, 33, 0,
+ 0, 0, 0, 0, 132, 200, 0, 118, 179, 0, 105, 161, 0, 91, 140,
+ 0, 76, 121, 0, 62, 101, 0, 46, 81, 0, 24, 56, 0, 0, 19,
+ 0, 131, 182, 0, 118, 163, 0, 105, 146, 0, 91, 128, 0, 77, 110,
+ 0, 62, 91, 0, 46, 72, 0, 25, 48, 0, 0, 11, 0, 131, 165,
+ 0, 117, 149, 0, 104, 133, 0, 91, 116, 0, 77, 99, 0, 62, 82,
+ 0, 46, 64, 0, 25, 41, 0, 0, 4, 0, 131, 149, 0, 116, 134,
+ 0, 104, 119, 0, 91, 104, 0, 77, 89, 0, 62, 73, 0, 46, 56,
+ 0, 25, 34, 0, 0, 0, 10, 130, 133, 2, 116, 119, 0, 104, 106,
+ 0, 90, 91, 0, 76, 78, 0, 62, 64, 0, 46, 48, 0, 26, 27,
+ 0, 0, 0, 23, 130, 118, 20, 116, 104, 13, 103, 93, 3, 89, 79,
+ 0, 76, 67, 0, 62, 54, 0, 46, 39, 0, 26, 19, 0, 0, 0,
+ 33, 129, 101, 27, 115, 89, 19, 103, 79, 9, 89, 67, 0, 75, 56,
+ 0, 61, 43, 0, 46, 29, 0, 26, 10, 0, 0, 0, 41, 128, 83,
+ 35, 115, 73, 27, 102, 64, 15, 89, 55, 0, 76, 45, 0, 62, 33,
+ 0, 46, 18, 0, 26, 0, 0, 0, 0, 43, 129, 69, 38, 115, 61,
+ 30, 102, 54, 17, 89, 45, 2, 75, 34, 0, 61, 23, 0, 46, 9,
+ 0, 26, 0, 0, 0, 0, 1, 116, 188, 1, 104, 168, 0, 92, 151,
+ 0, 79, 132, 0, 66, 113, 0, 52, 94, 0, 36, 75, 0, 14, 52,
+ 0, 0, 14, 17, 116, 171, 16, 104, 153, 14, 92, 137, 8, 79, 119,
+ 0, 67, 102, 0, 53, 85, 0, 37, 67, 0, 16, 44, 0, 0, 4,
+ 31, 116, 155, 27, 104, 140, 21, 92, 125, 13, 79, 109, 3, 66, 93,
+ 0, 53, 77, 0, 37, 59, 0, 16, 38, 0, 0, 0, 37, 115, 141,
+ 30, 103, 126, 26, 92, 112, 16, 79, 98, 5, 66, 83, 0, 53, 67,
+ 0, 38, 51, 0, 17, 31, 0, 0, 0, 41, 115, 126, 37, 103, 112,
+ 31, 92, 100, 22, 79, 86, 10, 66, 72, 0, 53, 59, 0, 38, 44,
+ 0, 17, 23, 0, 0, 0, 48, 115, 111, 41, 102, 99, 34, 91, 88,
+ 24, 78, 76, 14, 66, 63, 0, 53, 50, 0, 38, 36, 0, 18, 15,
+ 0, 0, 0, 51, 115, 95, 46, 102, 85, 37, 91, 74, 26, 78, 63,
+ 16, 66, 52, 0, 53, 40, 0, 38, 26, 0, 18, 5, 0, 0, 0,
+ 55, 114, 80, 47, 102, 69, 40, 90, 60, 30, 78, 51, 19, 66, 41,
+ 3, 53, 29, 0, 38, 15, 0, 17, 0, 0, 0, 0, 56, 114, 66,
+ 50, 102, 58, 40, 91, 50, 32, 78, 41, 18, 66, 32, 4, 53, 21,
+ 0, 38, 5, 0, 17, 0, 0, 0, 0, 39, 102, 178, 37, 90, 159,
+ 30, 79, 142, 21, 68, 124, 14, 55, 106, 0, 42, 89, 0, 26, 70,
+ 0, 4, 46, 0, 0, 8, 48, 102, 161, 42, 90, 145, 35, 79, 128,
+ 26, 68, 112, 19, 55, 96, 3, 43, 79, 0, 27, 62, 0, 6, 40,
+ 0, 0, 0, 50, 102, 147, 44, 90, 132, 37, 79, 118, 30, 68, 102,
+ 20, 56, 87, 7, 43, 72, 0, 28, 55, 0, 6, 34, 0, 0, 0,
+ 53, 101, 133, 47, 90, 118, 41, 79, 106, 32, 68, 91, 21, 56, 78,
+ 9, 43, 63, 0, 28, 47, 0, 6, 26, 0, 0, 0, 57, 101, 119,
+ 50, 89, 106, 42, 79, 94, 34, 67, 81, 24, 56, 68, 9, 44, 55,
+ 0, 29, 40, 0, 6, 19, 0, 0, 0, 60, 100, 105, 50, 90, 94,
+ 45, 80, 83, 36, 68, 71, 24, 56, 59, 11, 44, 46, 0, 29, 32,
+ 0, 7, 12, 0, 0, 0, 63, 101, 91, 55, 90, 80, 46, 79, 70,
+ 37, 68, 59, 26, 56, 49, 12, 44, 37, 1, 29, 23, 0, 7, 3,
+ 0, 0, 0, 64, 101, 75, 56, 89, 67, 48, 79, 57, 37, 68, 48,
+ 27, 56, 37, 15, 44, 26, 0, 29, 12, 0, 7, 0, 0, 0, 0,
+ 66, 101, 64, 58, 89, 55, 49, 79, 47, 39, 68, 38, 27, 56, 29,
+ 14, 44, 18, 1, 30, 2, 0, 7, 0, 0, 0, 0, 57, 86, 165,
+ 51, 75, 148, 45, 65, 133, 38, 54, 116, 28, 43, 100, 16, 29, 83,
+ 0, 13, 64, 0, 0, 42, 0, 0, 3, 60, 86, 151, 55, 75, 135,
+ 47, 66, 121, 39, 55, 105, 30, 44, 90, 18, 31, 74, 3, 16, 57,
+ 0, 1, 35, 0, 0, 0, 62, 86, 139, 56, 75, 123, 49, 66, 110,
+ 40, 55, 95, 30, 44, 81, 19, 31, 66, 4, 17, 51, 0, 1, 29,
+ 0, 0, 0, 65, 86, 125, 56, 76, 112, 49, 66, 99, 39, 55, 86,
+ 31, 44, 72, 19, 32, 59, 5, 18, 44, 0, 1, 23, 0, 0, 0,
+ 67, 86, 113, 58, 75, 100, 51, 66, 88, 41, 56, 77, 31, 45, 64,
+ 20, 32, 51, 6, 18, 35, 0, 1, 14, 0, 0, 0, 69, 86, 99,
+ 61, 76, 88, 52, 66, 78, 43, 56, 66, 32, 45, 55, 20, 33, 42,
+ 7, 19, 27, 0, 1, 6, 0, 0, 0, 69, 86, 86, 61, 76, 75,
+ 53, 67, 66, 43, 56, 55, 33, 45, 45, 21, 34, 34, 8, 20, 20,
+ 0, 2, 2, 0, 0, 0, 71, 86, 72, 63, 75, 62, 54, 66, 55,
+ 45, 56, 45, 33, 45, 35, 22, 34, 23, 7, 20, 8, 0, 2, 0,
+ 0, 0, 0, 71, 86, 62, 64, 75, 53, 55, 66, 46, 45, 56, 36,
+ 33, 46, 27, 22, 34, 15, 8, 20, 0, 0, 2, 0, 0, 0, 0,
+ 69, 67, 156, 61, 58, 140, 53, 50, 125, 45, 39, 108, 35, 28, 93,
+ 25, 12, 77, 12, 0, 59, 0, 0, 37, 0, 0, 0, 71, 68, 142,
+ 63, 59, 126, 56, 50, 114, 47, 40, 98, 37, 28, 84, 26, 15, 68,
+ 12, 0, 53, 0, 0, 30, 0, 0, 0, 72, 68, 130, 63, 59, 116,
+ 56, 50, 104, 47, 40, 90, 38, 30, 75, 27, 16, 61, 13, 0, 46,
+ 0, 0, 24, 0, 0, 0, 73, 69, 118, 65, 59, 105, 57, 51, 92,
+ 47, 41, 80, 37, 30, 67, 26, 18, 53, 14, 1, 39, 0, 0, 18,
+ 0, 0, 0, 74, 69, 106, 65, 60, 93, 57, 51, 82, 48, 41, 70,
+ 38, 31, 59, 26, 19, 46, 13, 2, 32, 0, 0, 10, 0, 0, 0,
+ 76, 69, 95, 66, 61, 84, 58, 52, 73, 48, 42, 61, 37, 32, 50,
+ 26, 20, 38, 14, 4, 24, 0, 0, 4, 0, 0, 0, 76, 69, 81,
+ 68, 60, 72, 58, 52, 62, 48, 42, 51, 38, 32, 41, 27, 21, 30,
+ 14, 4, 16, 0, 0, 1, 0, 0, 0, 76, 69, 68, 68, 61, 60,
+ 60, 52, 51, 49, 43, 41, 38, 33, 32, 27, 21, 20, 14, 5, 5,
+ 0, 0, 0, 0, 0, 0, 78, 70, 59, 69, 61, 50, 60, 52, 42,
+ 49, 43, 34, 39, 33, 24, 27, 22, 13, 14, 7, 1, 0, 0, 0,
+ 0, 0, 0, 75, 46, 146, 68, 38, 131, 60, 30, 117, 50, 19, 102,
+ 41, 4, 87, 29, 0, 72, 13, 0, 55, 0, 0, 33, 0, 0, 0,
+ 78, 47, 132, 70, 39, 119, 61, 30, 105, 53, 20, 92, 42, 5, 78,
+ 30, 0, 64, 13, 0, 49, 0, 0, 27, 0, 0, 0, 79, 48, 122,
+ 70, 40, 108, 62, 32, 96, 52, 22, 84, 42, 9, 71, 30, 0, 58,
+ 14, 0, 42, 0, 0, 20, 0, 0, 0, 79, 50, 111, 70, 42, 99,
+ 62, 33, 88, 52, 23, 74, 41, 11, 63, 29, 0, 50, 14, 0, 36,
+ 0, 0, 14, 0, 0, 0, 80, 50, 99, 70, 42, 89, 61, 34, 78,
+ 52, 25, 67, 41, 14, 55, 30, 0, 42, 15, 0, 28, 0, 0, 6,
+ 0, 0, 0, 81, 51, 89, 71, 43, 78, 62, 35, 69, 52, 25, 58,
+ 42, 15, 47, 30, 3, 36, 15, 0, 22, 0, 0, 3, 0, 0, 0,
+ 81, 51, 77, 71, 44, 68, 63, 36, 59, 53, 26, 49, 41, 16, 38,
+ 31, 4, 27, 16, 0, 12, 0, 0, 0, 0, 0, 0, 81, 52, 65,
+ 72, 43, 56, 63, 36, 48, 53, 27, 39, 41, 17, 29, 30, 4, 18,
+ 14, 0, 3, 0, 0, 0, 0, 0, 0, 81, 52, 55, 73, 44, 47,
+ 64, 36, 39, 53, 28, 32, 42, 18, 21, 31, 6, 9, 14, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 174, 239, 0, 156, 214, 0, 139, 192,
+ 0, 121, 168, 0, 105, 145, 0, 87, 123, 0, 68, 98, 0, 46, 70,
+ 0, 3, 35, 0, 172, 217, 0, 155, 194, 0, 139, 173, 0, 121, 152,
+ 0, 104, 130, 0, 87, 110, 0, 69, 88, 0, 46, 63, 0, 4, 28,
+ 0, 171, 197, 0, 153, 175, 0, 138, 158, 0, 121, 139, 0, 103, 118,
+ 0, 86, 100, 0, 68, 79, 0, 46, 55, 0, 4, 22, 0, 170, 177,
+ 0, 152, 158, 0, 136, 141, 0, 119, 124, 0, 103, 106, 0, 86, 88,
+ 0, 68, 70, 0, 45, 47, 0, 3, 14, 0, 169, 157, 0, 152, 141,
+ 0, 136, 126, 0, 119, 109, 0, 102, 94, 0, 86, 78, 0, 68, 60,
+ 0, 46, 39, 0, 3, 5, 0, 167, 138, 0, 150, 124, 0, 135, 111,
+ 0, 118, 97, 0, 102, 82, 0, 85, 68, 0, 68, 52, 0, 46, 31,
+ 0, 3, 0, 0, 167, 118, 0, 150, 104, 0, 135, 94, 0, 118, 81,
+ 0, 101, 69, 0, 84, 56, 0, 67, 41, 0, 45, 21, 0, 3, 0,
+ 0, 166, 97, 0, 149, 87, 0, 134, 77, 0, 117, 67, 0, 101, 56,
+ 0, 85, 44, 0, 67, 30, 0, 45, 10, 0, 3, 0, 0, 165, 79,
+ 0, 149, 73, 0, 133, 64, 0, 117, 56, 0, 101, 46, 0, 85, 34,
+ 0, 68, 21, 0, 46, 1, 0, 3, 0, 0, 158, 225, 0, 141, 201,
+ 0, 126, 180, 0, 109, 158, 0, 94, 136, 0, 78, 114, 0, 60, 91,
+ 0, 38, 66, 0, 0, 30, 0, 156, 203, 0, 140, 183, 0, 125, 164,
+ 0, 109, 143, 0, 94, 124, 0, 78, 104, 0, 61, 83, 0, 38, 57,
+ 0, 0, 23, 0, 156, 186, 0, 140, 166, 0, 125, 150, 0, 109, 130,
+ 0, 93, 111, 0, 77, 93, 0, 60, 74, 0, 38, 50, 0, 0, 17,
+ 0, 155, 167, 0, 138, 149, 0, 124, 134, 0, 109, 117, 0, 93, 100,
+ 0, 76, 83, 0, 60, 65, 0, 38, 43, 0, 0, 9, 0, 153, 147,
+ 0, 138, 134, 0, 124, 120, 0, 107, 103, 0, 92, 88, 0, 77, 73,
+ 0, 60, 56, 0, 38, 35, 0, 0, 0, 0, 153, 131, 0, 137, 118,
+ 0, 122, 105, 0, 107, 90, 0, 91, 76, 0, 76, 63, 0, 60, 47,
+ 0, 39, 28, 0, 0, 0, 0, 153, 111, 0, 136, 100, 0, 123, 90,
+ 0, 107, 77, 0, 92, 65, 0, 76, 52, 0, 60, 37, 0, 38, 18,
+ 0, 0, 0, 0, 152, 93, 0, 136, 82, 0, 122, 74, 0, 106, 63,
+ 0, 91, 52, 0, 76, 40, 0, 59, 26, 0, 38, 6, 0, 0, 0,
+ 0, 151, 78, 0, 136, 69, 0, 121, 61, 0, 106, 52, 0, 91, 43,
+ 0, 76, 32, 0, 59, 17, 0, 38, 0, 0, 0, 0, 0, 143, 213,
+ 0, 128, 191, 0, 115, 171, 0, 100, 149, 0, 84, 128, 0, 69, 108,
+ 0, 52, 86, 0, 30, 61, 0, 0, 25, 0, 142, 193, 0, 127, 173,
+ 0, 114, 154, 0, 99, 134, 0, 84, 116, 0, 69, 98, 0, 52, 77,
+ 0, 31, 53, 0, 0, 18, 0, 141, 176, 0, 127, 158, 0, 114, 141,
+ 0, 98, 122, 0, 84, 105, 0, 69, 88, 0, 53, 69, 0, 31, 46,
+ 0, 0, 9, 0, 141, 159, 0, 126, 142, 0, 113, 127, 0, 98, 110,
+ 0, 83, 95, 0, 69, 78, 0, 53, 60, 0, 32, 39, 0, 0, 2,
+ 0, 140, 140, 0, 126, 126, 0, 112, 112, 0, 98, 98, 0, 83, 83,
+ 0, 68, 69, 0, 52, 52, 0, 31, 31, 0, 0, 0, 0, 140, 124,
+ 0, 125, 112, 0, 112, 100, 0, 97, 86, 0, 83, 72, 0, 68, 59,
+ 0, 52, 44, 0, 31, 23, 0, 0, 0, 0, 139, 106, 0, 125, 96,
+ 0, 111, 85, 0, 97, 72, 0, 83, 62, 0, 68, 49, 0, 52, 35,
+ 0, 31, 15, 0, 0, 0, 0, 138, 88, 0, 124, 79, 0, 111, 70,
+ 0, 96, 59, 0, 82, 48, 0, 68, 38, 0, 52, 24, 0, 31, 4,
+ 0, 0, 0, 0, 139, 76, 0, 124, 66, 0, 111, 58, 0, 96, 50,
+ 0, 82, 40, 0, 68, 29, 0, 52, 15, 0, 31, 0, 0, 0, 0,
+ 0, 129, 200, 0, 114, 179, 0, 102, 160, 0, 87, 139, 0, 74, 120,
+ 0, 60, 101, 0, 44, 81, 0, 22, 56, 0, 0, 19, 0, 127, 181,
+ 0, 114, 163, 0, 102, 146, 0, 88, 127, 0, 74, 109, 0, 60, 91,
+ 0, 44, 72, 0, 23, 48, 0, 0, 11, 0, 127, 166, 0, 113, 148,
+ 0, 101, 133, 0, 87, 115, 0, 74, 99, 0, 60, 82, 0, 44, 64,
+ 0, 23, 42, 0, 0, 4, 0, 127, 150, 0, 113, 134, 0, 101, 119,
+ 0, 87, 104, 0, 74, 89, 0, 60, 73, 0, 44, 56, 0, 23, 35,
+ 0, 0, 0, 0, 125, 134, 0, 112, 118, 0, 100, 106, 0, 87, 92,
+ 0, 73, 78, 0, 60, 64, 0, 44, 48, 0, 23, 27, 0, 0, 0,
+ 0, 125, 118, 0, 112, 105, 0, 100, 94, 0, 86, 80, 0, 73, 68,
+ 0, 60, 54, 0, 44, 39, 0, 23, 20, 0, 0, 0, 0, 125, 101,
+ 0, 111, 90, 0, 99, 80, 0, 86, 69, 0, 73, 58, 0, 59, 45,
+ 0, 44, 30, 0, 23, 11, 0, 0, 0, 0, 124, 85, 0, 111, 75,
+ 0, 99, 66, 0, 86, 56, 0, 73, 45, 0, 59, 34, 0, 44, 20,
+ 0, 23, 1, 0, 0, 0, 0, 125, 72, 0, 111, 62, 0, 99, 56,
+ 0, 86, 46, 0, 73, 36, 0, 60, 26, 0, 44, 12, 0, 23, 0,
+ 0, 0, 0, 0, 114, 188, 0, 101, 167, 0, 89, 150, 0, 77, 131,
+ 0, 64, 113, 0, 50, 95, 0, 34, 75, 0, 12, 52, 0, 0, 14,
+ 0, 113, 170, 0, 101, 153, 0, 89, 137, 0, 77, 120, 0, 64, 102,
+ 0, 50, 85, 0, 35, 67, 0, 12, 44, 0, 0, 4, 0, 113, 156,
+ 0, 100, 139, 0, 89, 125, 0, 77, 109, 0, 64, 92, 0, 51, 77,
+ 0, 35, 60, 0, 12, 38, 0, 0, 0, 0, 112, 141, 0, 100, 126,
+ 0, 89, 113, 0, 77, 98, 0, 64, 83, 0, 51, 68, 0, 35, 51,
+ 0, 12, 30, 0, 0, 0, 0, 112, 127, 0, 100, 112, 0, 89, 100,
+ 0, 76, 87, 0, 64, 74, 0, 51, 59, 0, 35, 44, 0, 13, 24,
+ 0, 0, 0, 0, 112, 111, 0, 100, 100, 0, 88, 88, 0, 76, 76,
+ 0, 64, 64, 0, 51, 52, 0, 36, 37, 0, 13, 17, 0, 0, 0,
+ 0, 111, 96, 0, 99, 85, 0, 88, 76, 0, 76, 64, 0, 64, 53,
+ 0, 51, 41, 0, 36, 27, 0, 13, 6, 0, 0, 0, 0, 111, 81,
+ 0, 99, 71, 0, 88, 62, 0, 76, 52, 0, 64, 43, 0, 51, 31,
+ 0, 36, 17, 0, 13, 0, 0, 0, 0, 0, 111, 69, 0, 99, 60,
+ 0, 88, 52, 0, 75, 43, 0, 63, 34, 0, 51, 21, 0, 36, 7,
+ 0, 13, 0, 0, 0, 0, 0, 99, 177, 0, 88, 158, 0, 77, 141,
+ 0, 66, 123, 0, 53, 106, 0, 40, 89, 0, 25, 71, 0, 5, 47,
+ 0, 0, 8, 0, 99, 160, 0, 88, 144, 0, 77, 129, 0, 66, 112,
+ 0, 54, 97, 0, 41, 80, 0, 26, 62, 0, 5, 40, 0, 0, 0,
+ 0, 99, 147, 0, 87, 132, 0, 78, 117, 0, 66, 102, 0, 54, 87,
+ 0, 42, 72, 0, 26, 55, 0, 5, 34, 0, 0, 0, 0, 99, 134,
+ 0, 88, 119, 0, 77, 107, 0, 66, 92, 0, 54, 78, 0, 42, 64,
+ 0, 27, 48, 0, 5, 27, 0, 0, 0, 0, 99, 120, 0, 87, 107,
+ 0, 78, 94, 0, 66, 81, 0, 54, 68, 0, 42, 55, 0, 27, 40,
+ 0, 6, 20, 0, 0, 0, 0, 98, 105, 0, 87, 94, 0, 77, 84,
+ 0, 65, 71, 0, 55, 59, 0, 42, 47, 0, 28, 33, 0, 6, 12,
+ 0, 0, 0, 0, 98, 93, 0, 87, 81, 0, 77, 72, 0, 66, 61,
+ 0, 54, 49, 0, 42, 37, 0, 28, 24, 0, 6, 4, 0, 0, 0,
+ 0, 98, 77, 0, 87, 68, 0, 77, 59, 0, 65, 49, 0, 54, 39,
+ 0, 42, 27, 0, 29, 14, 0, 6, 0, 0, 0, 0, 1, 98, 65,
+ 7, 87, 56, 0, 77, 49, 0, 66, 41, 0, 54, 30, 0, 42, 19,
+ 0, 29, 3, 0, 6, 0, 0, 0, 0, 0, 84, 166, 0, 74, 149,
+ 0, 64, 134, 0, 53, 117, 0, 41, 100, 0, 28, 83, 0, 11, 64,
+ 0, 0, 42, 0, 0, 3, 0, 84, 151, 0, 74, 135, 0, 64, 121,
+ 0, 53, 105, 0, 42, 90, 0, 30, 75, 0, 14, 58, 0, 0, 36,
+ 0, 0, 0, 0, 84, 138, 0, 74, 124, 1, 64, 110, 0, 54, 95,
+ 0, 43, 81, 0, 30, 67, 0, 15, 51, 0, 1, 29, 0, 0, 0,
+ 14, 84, 126, 12, 74, 112, 2, 65, 99, 0, 54, 85, 0, 44, 73,
+ 0, 31, 59, 0, 16, 44, 0, 1, 23, 0, 0, 0, 16, 84, 113,
+ 13, 74, 100, 6, 65, 89, 0, 54, 77, 0, 44, 65, 0, 31, 51,
+ 0, 17, 36, 0, 1, 16, 0, 0, 0, 24, 84, 100, 18, 74, 88,
+ 13, 65, 78, 2, 55, 68, 0, 44, 55, 0, 32, 43, 0, 18, 28,
+ 0, 1, 6, 0, 0, 0, 26, 84, 87, 24, 74, 76, 17, 65, 67,
+ 7, 54, 57, 0, 44, 46, 0, 32, 35, 0, 19, 21, 0, 2, 3,
+ 0, 0, 0, 30, 84, 74, 28, 74, 64, 20, 65, 55, 12, 55, 46,
+ 0, 44, 35, 0, 32, 24, 0, 18, 9, 0, 1, 0, 0, 0, 0,
+ 32, 84, 63, 28, 74, 54, 21, 65, 47, 13, 54, 38, 0, 44, 28,
+ 0, 32, 16, 0, 18, 1, 0, 1, 0, 0, 0, 0, 30, 67, 155,
+ 20, 58, 139, 20, 49, 126, 12, 39, 110, 0, 27, 94, 0, 13, 77,
+ 0, 0, 60, 0, 0, 37, 0, 0, 0, 35, 67, 142, 30, 58, 126,
+ 23, 50, 114, 16, 40, 99, 7, 29, 85, 0, 15, 69, 0, 0, 52,
+ 0, 0, 30, 0, 0, 0, 35, 68, 131, 30, 59, 116, 27, 50, 104,
+ 18, 40, 90, 9, 29, 76, 0, 17, 62, 0, 2, 46, 0, 0, 24,
+ 0, 0, 0, 37, 69, 119, 33, 59, 106, 27, 51, 94, 21, 41, 80,
+ 9, 30, 67, 0, 18, 54, 0, 3, 39, 0, 0, 18, 0, 0, 0,
+ 40, 69, 107, 36, 59, 94, 28, 51, 84, 18, 41, 72, 10, 31, 60,
+ 0, 19, 47, 0, 4, 32, 0, 0, 10, 0, 0, 0, 42, 69, 95,
+ 36, 59, 84, 29, 51, 74, 19, 41, 63, 10, 31, 52, 0, 20, 39,
+ 0, 4, 25, 0, 0, 4, 0, 0, 0, 43, 69, 83, 38, 60, 73,
+ 32, 51, 62, 23, 42, 53, 11, 31, 42, 0, 20, 31, 0, 5, 17,
+ 0, 0, 1, 0, 0, 0, 45, 69, 70, 39, 60, 60, 33, 51, 52,
+ 24, 42, 43, 13, 32, 33, 0, 21, 21, 0, 5, 6, 0, 0, 0,
+ 0, 0, 0, 47, 69, 59, 41, 60, 51, 34, 51, 43, 24, 42, 35,
+ 12, 33, 26, 1, 22, 14, 0, 5, 1, 0, 0, 0, 0, 0, 0,
+ 46, 48, 146, 42, 40, 131, 36, 32, 118, 27, 22, 103, 17, 6, 88,
+ 5, 0, 73, 0, 0, 55, 0, 0, 33, 0, 0, 0, 48, 48, 133,
+ 44, 40, 119, 37, 32, 107, 28, 22, 93, 20, 8, 79, 7, 0, 65,
+ 0, 0, 49, 0, 0, 27, 0, 0, 0, 48, 50, 123, 44, 41, 109,
+ 37, 33, 97, 30, 23, 83, 21, 11, 71, 8, 0, 58, 0, 0, 42,
+ 0, 0, 21, 0, 0, 0, 49, 51, 111, 45, 42, 99, 38, 34, 87,
+ 29, 25, 75, 20, 13, 63, 8, 0, 51, 0, 0, 36, 0, 0, 14,
+ 0, 0, 0, 52, 52, 100, 44, 43, 89, 38, 35, 79, 29, 26, 68,
+ 19, 15, 56, 10, 1, 43, 0, 0, 28, 0, 0, 6, 0, 0, 0,
+ 52, 52, 90, 47, 44, 79, 39, 36, 70, 30, 27, 59, 20, 16, 47,
+ 9, 2, 36, 0, 0, 22, 0, 0, 2, 0, 0, 0, 52, 53, 78,
+ 46, 44, 68, 39, 37, 60, 32, 27, 49, 22, 17, 39, 10, 3, 28,
+ 0, 0, 12, 0, 0, 0, 0, 0, 0, 53, 53, 66, 47, 44, 57,
+ 40, 36, 48, 32, 27, 39, 22, 18, 30, 9, 4, 18, 0, 0, 3,
+ 0, 0, 0, 0, 0, 0, 54, 53, 57, 48, 45, 49, 41, 37, 41,
+ 33, 28, 32, 22, 19, 23, 11, 6, 10, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0,
};
-void AdobeCMYK_to_sRGB1(uint8_t c, uint8_t m, uint8_t y, uint8_t k, uint8_t& R, uint8_t& G, uint8_t& B)
-{
- int fix_c = c << 8;
- int fix_m = m << 8;
- int fix_y = y << 8;
- int fix_k = k << 8;
- int c_index = (fix_c + 4096) >> 13;
- int m_index = (fix_m + 4096) >> 13;
- int y_index = (fix_y + 4096) >> 13;
- int k_index = (fix_k + 4096) >> 13;
- int pos = (c_index * 9 * 9 * 9 + m_index * 9 * 9 + y_index * 9 + k_index) * 3;
- int fix_r = g_CMYKSamples[pos] << 8;
- int fix_g = g_CMYKSamples[pos + 1] << 8;
- int fix_b = g_CMYKSamples[pos + 2] << 8;
- int c1_index = fix_c >> 13;
- if (c1_index == c_index) {
- c1_index = c1_index == 8 ? c1_index - 1 : c1_index + 1;
- }
- int m1_index = fix_m >> 13;
- if (m1_index == m_index) {
- m1_index = m1_index == 8 ? m1_index - 1 : m1_index + 1;
- }
- int y1_index = fix_y >> 13;
- if (y1_index == y_index) {
- y1_index = y1_index == 8 ? y1_index - 1 : y1_index + 1;
- }
- int k1_index = fix_k >> 13;
- if (k1_index == k_index) {
- k1_index = k1_index == 8 ? k1_index - 1 : k1_index + 1;
- }
- int c1_pos = pos + (c1_index - c_index) * 9 * 9 * 9 * 3;
- int m1_pos = pos + (m1_index - m_index) * 9 * 9 * 3;
- int y1_pos = pos + (y1_index - y_index) * 9 * 3;
- int k1_pos = pos + (k1_index - k_index) * 3;
- int c_r_delta = g_CMYKSamples[pos] - g_CMYKSamples[c1_pos];
- int c_g_delta = g_CMYKSamples[pos + 1] - g_CMYKSamples[c1_pos + 1];
- int c_b_delta = g_CMYKSamples[pos + 2] - g_CMYKSamples[c1_pos + 2];
- int m_r_delta = g_CMYKSamples[pos] - g_CMYKSamples[m1_pos];
- int m_g_delta = g_CMYKSamples[pos + 1] - g_CMYKSamples[m1_pos + 1];
- int m_b_delta = g_CMYKSamples[pos + 2] - g_CMYKSamples[m1_pos + 2];
- int y_r_delta = g_CMYKSamples[pos] - g_CMYKSamples[y1_pos];
- int y_g_delta = g_CMYKSamples[pos + 1] - g_CMYKSamples[y1_pos + 1];
- int y_b_delta = g_CMYKSamples[pos + 2] - g_CMYKSamples[y1_pos + 2];
- int k_r_delta = g_CMYKSamples[pos] - g_CMYKSamples[k1_pos];
- int k_g_delta = g_CMYKSamples[pos + 1] - g_CMYKSamples[k1_pos + 1];
- int k_b_delta = g_CMYKSamples[pos + 2] - g_CMYKSamples[k1_pos + 2];
- int c_rate = (fix_c - (c_index << 13)) * (c_index - c1_index);
- fix_r += c_r_delta * c_rate / 32;
- fix_g += c_g_delta * c_rate / 32;
- fix_b += c_b_delta * c_rate / 32;
- int m_rate = (fix_m - (m_index << 13)) * (m_index - m1_index);
- fix_r += m_r_delta * m_rate / 32;
- fix_g += m_g_delta * m_rate / 32;
- fix_b += m_b_delta * m_rate / 32;
- int y_rate = (fix_y - (y_index << 13)) * (y_index - y1_index);
- fix_r += y_r_delta * y_rate / 32;
- fix_g += y_g_delta * y_rate / 32;
- fix_b += y_b_delta * y_rate / 32;
- int k_rate = (fix_k - (k_index << 13)) * (k_index - k1_index);
- fix_r += k_r_delta * k_rate / 32;
- fix_g += k_g_delta * k_rate / 32;
- fix_b += k_b_delta * k_rate / 32;
- if (fix_r < 0) {
- fix_r = 0;
- }
- if (fix_g < 0) {
- fix_g = 0;
- }
- if (fix_b < 0) {
- fix_b = 0;
- }
- R = fix_r >> 8;
- G = fix_g >> 8;
- B = fix_b >> 8;
+void AdobeCMYK_to_sRGB1(uint8_t c,
+ uint8_t m,
+ uint8_t y,
+ uint8_t k,
+ uint8_t& R,
+ uint8_t& G,
+ uint8_t& B) {
+ int fix_c = c << 8;
+ int fix_m = m << 8;
+ int fix_y = y << 8;
+ int fix_k = k << 8;
+ int c_index = (fix_c + 4096) >> 13;
+ int m_index = (fix_m + 4096) >> 13;
+ int y_index = (fix_y + 4096) >> 13;
+ int k_index = (fix_k + 4096) >> 13;
+ int pos = (c_index * 9 * 9 * 9 + m_index * 9 * 9 + y_index * 9 + k_index) * 3;
+ int fix_r = g_CMYKSamples[pos] << 8;
+ int fix_g = g_CMYKSamples[pos + 1] << 8;
+ int fix_b = g_CMYKSamples[pos + 2] << 8;
+ int c1_index = fix_c >> 13;
+ if (c1_index == c_index) {
+ c1_index = c1_index == 8 ? c1_index - 1 : c1_index + 1;
+ }
+ int m1_index = fix_m >> 13;
+ if (m1_index == m_index) {
+ m1_index = m1_index == 8 ? m1_index - 1 : m1_index + 1;
+ }
+ int y1_index = fix_y >> 13;
+ if (y1_index == y_index) {
+ y1_index = y1_index == 8 ? y1_index - 1 : y1_index + 1;
+ }
+ int k1_index = fix_k >> 13;
+ if (k1_index == k_index) {
+ k1_index = k1_index == 8 ? k1_index - 1 : k1_index + 1;
+ }
+ int c1_pos = pos + (c1_index - c_index) * 9 * 9 * 9 * 3;
+ int m1_pos = pos + (m1_index - m_index) * 9 * 9 * 3;
+ int y1_pos = pos + (y1_index - y_index) * 9 * 3;
+ int k1_pos = pos + (k1_index - k_index) * 3;
+ int c_r_delta = g_CMYKSamples[pos] - g_CMYKSamples[c1_pos];
+ int c_g_delta = g_CMYKSamples[pos + 1] - g_CMYKSamples[c1_pos + 1];
+ int c_b_delta = g_CMYKSamples[pos + 2] - g_CMYKSamples[c1_pos + 2];
+ int m_r_delta = g_CMYKSamples[pos] - g_CMYKSamples[m1_pos];
+ int m_g_delta = g_CMYKSamples[pos + 1] - g_CMYKSamples[m1_pos + 1];
+ int m_b_delta = g_CMYKSamples[pos + 2] - g_CMYKSamples[m1_pos + 2];
+ int y_r_delta = g_CMYKSamples[pos] - g_CMYKSamples[y1_pos];
+ int y_g_delta = g_CMYKSamples[pos + 1] - g_CMYKSamples[y1_pos + 1];
+ int y_b_delta = g_CMYKSamples[pos + 2] - g_CMYKSamples[y1_pos + 2];
+ int k_r_delta = g_CMYKSamples[pos] - g_CMYKSamples[k1_pos];
+ int k_g_delta = g_CMYKSamples[pos + 1] - g_CMYKSamples[k1_pos + 1];
+ int k_b_delta = g_CMYKSamples[pos + 2] - g_CMYKSamples[k1_pos + 2];
+ int c_rate = (fix_c - (c_index << 13)) * (c_index - c1_index);
+ fix_r += c_r_delta * c_rate / 32;
+ fix_g += c_g_delta * c_rate / 32;
+ fix_b += c_b_delta * c_rate / 32;
+ int m_rate = (fix_m - (m_index << 13)) * (m_index - m1_index);
+ fix_r += m_r_delta * m_rate / 32;
+ fix_g += m_g_delta * m_rate / 32;
+ fix_b += m_b_delta * m_rate / 32;
+ int y_rate = (fix_y - (y_index << 13)) * (y_index - y1_index);
+ fix_r += y_r_delta * y_rate / 32;
+ fix_g += y_g_delta * y_rate / 32;
+ fix_b += y_b_delta * y_rate / 32;
+ int k_rate = (fix_k - (k_index << 13)) * (k_index - k1_index);
+ fix_r += k_r_delta * k_rate / 32;
+ fix_g += k_g_delta * k_rate / 32;
+ fix_b += k_b_delta * k_rate / 32;
+ if (fix_r < 0) {
+ fix_r = 0;
+ }
+ if (fix_g < 0) {
+ fix_g = 0;
+ }
+ if (fix_b < 0) {
+ fix_b = 0;
+ }
+ R = fix_r >> 8;
+ G = fix_g >> 8;
+ B = fix_b >> 8;
}
-void AdobeCMYK_to_sRGB(FX_FLOAT c, FX_FLOAT m, FX_FLOAT y, FX_FLOAT k, FX_FLOAT& R, FX_FLOAT& G, FX_FLOAT& B)
-{
- uint8_t c1 = FXSYS_round(c * 255);
- uint8_t m1 = FXSYS_round(m * 255);
- uint8_t y1 = FXSYS_round(y * 255);
- uint8_t k1 = FXSYS_round(k * 255);
- uint8_t r, g, b;
- AdobeCMYK_to_sRGB1(c1, m1, y1, k1, r, g, b);
- R = 1.0f * r / 255;
- G = 1.0f * g / 255;
- B = 1.0f * b / 255;
+void AdobeCMYK_to_sRGB(FX_FLOAT c,
+ FX_FLOAT m,
+ FX_FLOAT y,
+ FX_FLOAT k,
+ FX_FLOAT& R,
+ FX_FLOAT& G,
+ FX_FLOAT& B) {
+ uint8_t c1 = FXSYS_round(c * 255);
+ uint8_t m1 = FXSYS_round(m * 255);
+ uint8_t y1 = FXSYS_round(y * 255);
+ uint8_t k1 = FXSYS_round(k * 255);
+ uint8_t r, g, b;
+ AdobeCMYK_to_sRGB1(c1, m1, y1, k1, r, g, b);
+ R = 1.0f * r / 255;
+ G = 1.0f * g / 255;
+ B = 1.0f * b / 255;
}
diff --git a/core/src/fxcodec/codec/fx_codec_jbig.cpp b/core/src/fxcodec/codec/fx_codec_jbig.cpp
index 51184306eb..9d78bba3bb 100644
--- a/core/src/fxcodec/codec/fx_codec_jbig.cpp
+++ b/core/src/fxcodec/codec/fx_codec_jbig.cpp
@@ -7,200 +7,225 @@
#include "../../../include/fxcodec/fx_codec.h"
#include "codec_int.h"
-CCodec_Jbig2Context::CCodec_Jbig2Context()
-{
- FXSYS_memset(this, 0, sizeof(CCodec_Jbig2Context));
+CCodec_Jbig2Context::CCodec_Jbig2Context() {
+ FXSYS_memset(this, 0, sizeof(CCodec_Jbig2Context));
}
-CCodec_Jbig2Module::~CCodec_Jbig2Module()
-{
+CCodec_Jbig2Module::~CCodec_Jbig2Module() {}
+void* CCodec_Jbig2Module::CreateJbig2Context() {
+ return new CCodec_Jbig2Context();
}
-void* CCodec_Jbig2Module::CreateJbig2Context()
-{
- return new CCodec_Jbig2Context();
+void CCodec_Jbig2Module::DestroyJbig2Context(void* pJbig2Content) {
+ if (pJbig2Content) {
+ CJBig2_Context::DestroyContext(
+ ((CCodec_Jbig2Context*)pJbig2Content)->m_pContext);
+ delete (CCodec_Jbig2Context*)pJbig2Content;
+ }
+ pJbig2Content = NULL;
}
-void CCodec_Jbig2Module::DestroyJbig2Context(void* pJbig2Content)
-{
- if(pJbig2Content) {
- CJBig2_Context::DestroyContext(((CCodec_Jbig2Context*)pJbig2Content)->m_pContext);
- delete (CCodec_Jbig2Context*)pJbig2Content;
- }
- pJbig2Content = NULL;
-}
-FX_BOOL CCodec_Jbig2Module::Decode(FX_DWORD width, FX_DWORD height, const uint8_t* src_buf, FX_DWORD src_size,
- const uint8_t* global_data, FX_DWORD global_size, uint8_t* dest_buf, FX_DWORD dest_pitch)
-{
- FXSYS_memset(dest_buf, 0, height * dest_pitch);
- CJBig2_Context* pContext = CJBig2_Context::CreateContext(&m_Module,
- (uint8_t*)global_data, global_size, (uint8_t*)src_buf, src_size, JBIG2_EMBED_STREAM, &m_SymbolDictCache);
- if (pContext == NULL) {
- return FALSE;
- }
- int ret = pContext->getFirstPage(dest_buf, width, height, dest_pitch, NULL);
- CJBig2_Context::DestroyContext(pContext);
- if (ret != JBIG2_SUCCESS) {
- return FALSE;
- }
- int dword_size = height * dest_pitch / 4;
- FX_DWORD* dword_buf = (FX_DWORD*)dest_buf;
- for (int i = 0; i < dword_size; i ++) {
- dword_buf[i] = ~dword_buf[i];
- }
- return TRUE;
+FX_BOOL CCodec_Jbig2Module::Decode(FX_DWORD width,
+ FX_DWORD height,
+ const uint8_t* src_buf,
+ FX_DWORD src_size,
+ const uint8_t* global_data,
+ FX_DWORD global_size,
+ uint8_t* dest_buf,
+ FX_DWORD dest_pitch) {
+ FXSYS_memset(dest_buf, 0, height * dest_pitch);
+ CJBig2_Context* pContext = CJBig2_Context::CreateContext(
+ &m_Module, (uint8_t*)global_data, global_size, (uint8_t*)src_buf,
+ src_size, JBIG2_EMBED_STREAM, &m_SymbolDictCache);
+ if (pContext == NULL) {
+ return FALSE;
+ }
+ int ret = pContext->getFirstPage(dest_buf, width, height, dest_pitch, NULL);
+ CJBig2_Context::DestroyContext(pContext);
+ if (ret != JBIG2_SUCCESS) {
+ return FALSE;
+ }
+ int dword_size = height * dest_pitch / 4;
+ FX_DWORD* dword_buf = (FX_DWORD*)dest_buf;
+ for (int i = 0; i < dword_size; i++) {
+ dword_buf[i] = ~dword_buf[i];
+ }
+ return TRUE;
}
FX_BOOL CCodec_Jbig2Module::Decode(IFX_FileRead* file_ptr,
- FX_DWORD& width, FX_DWORD& height, FX_DWORD& pitch, uint8_t*& dest_buf)
-{
- CJBig2_Context* pContext = NULL;
- CJBig2_Image* dest_image = NULL;
- FX_DWORD src_size = (FX_DWORD)file_ptr->GetSize();
- uint8_t* src_buf = FX_Alloc(uint8_t, src_size);
- int ret = 0;
- if(!file_ptr->ReadBlock(src_buf, 0, src_size)) {
- goto failed;
- }
- pContext = CJBig2_Context::CreateContext(&m_Module, NULL, 0, src_buf, src_size, JBIG2_FILE_STREAM, &m_SymbolDictCache);
- if(pContext == NULL) {
- goto failed;
- }
- ret = pContext->getFirstPage(&dest_image, NULL);
- CJBig2_Context::DestroyContext(pContext);
- if (ret != JBIG2_SUCCESS) {
- goto failed;
- }
- width = (FX_DWORD)dest_image->m_nWidth;
- height = (FX_DWORD)dest_image->m_nHeight;
- pitch = (FX_DWORD)dest_image->m_nStride;
- dest_buf = dest_image->m_pData;
- dest_image->m_bNeedFree = FALSE;
- delete dest_image;
- FX_Free(src_buf);
- return TRUE;
+ FX_DWORD& width,
+ FX_DWORD& height,
+ FX_DWORD& pitch,
+ uint8_t*& dest_buf) {
+ CJBig2_Context* pContext = NULL;
+ CJBig2_Image* dest_image = NULL;
+ FX_DWORD src_size = (FX_DWORD)file_ptr->GetSize();
+ uint8_t* src_buf = FX_Alloc(uint8_t, src_size);
+ int ret = 0;
+ if (!file_ptr->ReadBlock(src_buf, 0, src_size)) {
+ goto failed;
+ }
+ pContext =
+ CJBig2_Context::CreateContext(&m_Module, NULL, 0, src_buf, src_size,
+ JBIG2_FILE_STREAM, &m_SymbolDictCache);
+ if (pContext == NULL) {
+ goto failed;
+ }
+ ret = pContext->getFirstPage(&dest_image, NULL);
+ CJBig2_Context::DestroyContext(pContext);
+ if (ret != JBIG2_SUCCESS) {
+ goto failed;
+ }
+ width = (FX_DWORD)dest_image->m_nWidth;
+ height = (FX_DWORD)dest_image->m_nHeight;
+ pitch = (FX_DWORD)dest_image->m_nStride;
+ dest_buf = dest_image->m_pData;
+ dest_image->m_bNeedFree = FALSE;
+ delete dest_image;
+ FX_Free(src_buf);
+ return TRUE;
failed:
- if(src_buf) {
- FX_Free(src_buf);
- }
- return FALSE;
-}
-FXCODEC_STATUS CCodec_Jbig2Module::StartDecode(void* pJbig2Context, FX_DWORD width, FX_DWORD height, const uint8_t* src_buf, FX_DWORD src_size,
- const uint8_t* global_data, FX_DWORD global_size, uint8_t* dest_buf, FX_DWORD dest_pitch, IFX_Pause* pPause)
-{
- if(!pJbig2Context) {
- return FXCODEC_STATUS_ERR_PARAMS;
- }
- CCodec_Jbig2Context* m_pJbig2Context = (CCodec_Jbig2Context*)pJbig2Context;
- m_pJbig2Context->m_width = width;
- m_pJbig2Context->m_height = height;
- m_pJbig2Context->m_src_buf = (unsigned char *)src_buf;
- m_pJbig2Context->m_src_size = src_size;
- m_pJbig2Context->m_global_data = global_data;
- m_pJbig2Context->m_global_size = global_size;
- m_pJbig2Context->m_dest_buf = dest_buf;
- m_pJbig2Context->m_dest_pitch = dest_pitch;
- m_pJbig2Context->m_pPause = pPause;
- m_pJbig2Context->m_bFileReader = FALSE;
- FXSYS_memset(dest_buf, 0, height * dest_pitch);
- m_pJbig2Context->m_pContext = CJBig2_Context::CreateContext(&m_Module,
- (uint8_t*)global_data, global_size, (uint8_t*)src_buf, src_size, JBIG2_EMBED_STREAM, &m_SymbolDictCache, pPause);
- if(!m_pJbig2Context->m_pContext) {
- return FXCODEC_STATUS_ERROR;
- }
- int ret = m_pJbig2Context->m_pContext->getFirstPage(dest_buf, width, height, dest_pitch, pPause);
- if(m_pJbig2Context->m_pContext->GetProcessiveStatus() == FXCODEC_STATUS_DECODE_FINISH) {
- CJBig2_Context::DestroyContext(m_pJbig2Context->m_pContext);
- m_pJbig2Context->m_pContext = NULL;
- if (ret != JBIG2_SUCCESS) {
- return FXCODEC_STATUS_ERROR;
- }
- int dword_size = height * dest_pitch / 4;
- FX_DWORD* dword_buf = (FX_DWORD*)dest_buf;
- for (int i = 0; i < dword_size; i ++) {
- dword_buf[i] = ~dword_buf[i];
- }
- return FXCODEC_STATUS_DECODE_FINISH;
- }
- return m_pJbig2Context->m_pContext->GetProcessiveStatus();
+ if (src_buf) {
+ FX_Free(src_buf);
+ }
+ return FALSE;
}
-FXCODEC_STATUS CCodec_Jbig2Module::StartDecode(void* pJbig2Context, IFX_FileRead* file_ptr,
- FX_DWORD& width, FX_DWORD& height, FX_DWORD& pitch, uint8_t*& dest_buf, IFX_Pause* pPause)
-{
- if(!pJbig2Context) {
- return FXCODEC_STATUS_ERR_PARAMS;
- }
- CCodec_Jbig2Context* m_pJbig2Context = (CCodec_Jbig2Context*)pJbig2Context;
- m_pJbig2Context->m_bFileReader = TRUE;
- m_pJbig2Context->m_dest_image = NULL;
- m_pJbig2Context->m_src_size = (FX_DWORD)file_ptr->GetSize();
- m_pJbig2Context->m_src_buf = FX_Alloc(uint8_t, m_pJbig2Context->m_src_size);
- int ret = 0;
- if(!file_ptr->ReadBlock((void*)m_pJbig2Context->m_src_buf, 0, m_pJbig2Context->m_src_size)) {
- goto failed;
- }
- m_pJbig2Context->m_pContext = CJBig2_Context::CreateContext(&m_Module, NULL, 0, m_pJbig2Context->m_src_buf, m_pJbig2Context->m_src_size, JBIG2_FILE_STREAM, &m_SymbolDictCache, pPause);
- if(m_pJbig2Context->m_pContext == NULL) {
- goto failed;
- }
- ret = m_pJbig2Context->m_pContext->getFirstPage(&m_pJbig2Context->m_dest_image, pPause);
- if(m_pJbig2Context->m_pContext->GetProcessiveStatus() == FXCODEC_STATUS_DECODE_TOBECONTINUE) {
- width = (FX_DWORD)m_pJbig2Context->m_dest_image->m_nWidth;
- height = (FX_DWORD)m_pJbig2Context->m_dest_image->m_nHeight;
- pitch = (FX_DWORD)m_pJbig2Context->m_dest_image->m_nStride;
- dest_buf = m_pJbig2Context->m_dest_image->m_pData;
- m_pJbig2Context->m_dest_image->m_bNeedFree = FALSE;
- return FXCODEC_STATUS_DECODE_TOBECONTINUE;
- }
+FXCODEC_STATUS CCodec_Jbig2Module::StartDecode(void* pJbig2Context,
+ FX_DWORD width,
+ FX_DWORD height,
+ const uint8_t* src_buf,
+ FX_DWORD src_size,
+ const uint8_t* global_data,
+ FX_DWORD global_size,
+ uint8_t* dest_buf,
+ FX_DWORD dest_pitch,
+ IFX_Pause* pPause) {
+ if (!pJbig2Context) {
+ return FXCODEC_STATUS_ERR_PARAMS;
+ }
+ CCodec_Jbig2Context* m_pJbig2Context = (CCodec_Jbig2Context*)pJbig2Context;
+ m_pJbig2Context->m_width = width;
+ m_pJbig2Context->m_height = height;
+ m_pJbig2Context->m_src_buf = (unsigned char*)src_buf;
+ m_pJbig2Context->m_src_size = src_size;
+ m_pJbig2Context->m_global_data = global_data;
+ m_pJbig2Context->m_global_size = global_size;
+ m_pJbig2Context->m_dest_buf = dest_buf;
+ m_pJbig2Context->m_dest_pitch = dest_pitch;
+ m_pJbig2Context->m_pPause = pPause;
+ m_pJbig2Context->m_bFileReader = FALSE;
+ FXSYS_memset(dest_buf, 0, height * dest_pitch);
+ m_pJbig2Context->m_pContext = CJBig2_Context::CreateContext(
+ &m_Module, (uint8_t*)global_data, global_size, (uint8_t*)src_buf,
+ src_size, JBIG2_EMBED_STREAM, &m_SymbolDictCache, pPause);
+ if (!m_pJbig2Context->m_pContext) {
+ return FXCODEC_STATUS_ERROR;
+ }
+ int ret = m_pJbig2Context->m_pContext->getFirstPage(dest_buf, width, height,
+ dest_pitch, pPause);
+ if (m_pJbig2Context->m_pContext->GetProcessiveStatus() ==
+ FXCODEC_STATUS_DECODE_FINISH) {
CJBig2_Context::DestroyContext(m_pJbig2Context->m_pContext);
m_pJbig2Context->m_pContext = NULL;
if (ret != JBIG2_SUCCESS) {
- goto failed;
+ return FXCODEC_STATUS_ERROR;
}
+ int dword_size = height * dest_pitch / 4;
+ FX_DWORD* dword_buf = (FX_DWORD*)dest_buf;
+ for (int i = 0; i < dword_size; i++) {
+ dword_buf[i] = ~dword_buf[i];
+ }
+ return FXCODEC_STATUS_DECODE_FINISH;
+ }
+ return m_pJbig2Context->m_pContext->GetProcessiveStatus();
+}
+FXCODEC_STATUS CCodec_Jbig2Module::StartDecode(void* pJbig2Context,
+ IFX_FileRead* file_ptr,
+ FX_DWORD& width,
+ FX_DWORD& height,
+ FX_DWORD& pitch,
+ uint8_t*& dest_buf,
+ IFX_Pause* pPause) {
+ if (!pJbig2Context) {
+ return FXCODEC_STATUS_ERR_PARAMS;
+ }
+ CCodec_Jbig2Context* m_pJbig2Context = (CCodec_Jbig2Context*)pJbig2Context;
+ m_pJbig2Context->m_bFileReader = TRUE;
+ m_pJbig2Context->m_dest_image = NULL;
+ m_pJbig2Context->m_src_size = (FX_DWORD)file_ptr->GetSize();
+ m_pJbig2Context->m_src_buf = FX_Alloc(uint8_t, m_pJbig2Context->m_src_size);
+ int ret = 0;
+ if (!file_ptr->ReadBlock((void*)m_pJbig2Context->m_src_buf, 0,
+ m_pJbig2Context->m_src_size)) {
+ goto failed;
+ }
+ m_pJbig2Context->m_pContext = CJBig2_Context::CreateContext(
+ &m_Module, NULL, 0, m_pJbig2Context->m_src_buf,
+ m_pJbig2Context->m_src_size, JBIG2_FILE_STREAM, &m_SymbolDictCache,
+ pPause);
+ if (m_pJbig2Context->m_pContext == NULL) {
+ goto failed;
+ }
+ ret = m_pJbig2Context->m_pContext->getFirstPage(
+ &m_pJbig2Context->m_dest_image, pPause);
+ if (m_pJbig2Context->m_pContext->GetProcessiveStatus() ==
+ FXCODEC_STATUS_DECODE_TOBECONTINUE) {
width = (FX_DWORD)m_pJbig2Context->m_dest_image->m_nWidth;
height = (FX_DWORD)m_pJbig2Context->m_dest_image->m_nHeight;
pitch = (FX_DWORD)m_pJbig2Context->m_dest_image->m_nStride;
dest_buf = m_pJbig2Context->m_dest_image->m_pData;
m_pJbig2Context->m_dest_image->m_bNeedFree = FALSE;
- delete m_pJbig2Context->m_dest_image;
- FX_Free(m_pJbig2Context->m_src_buf);
- return FXCODEC_STATUS_DECODE_FINISH;
+ return FXCODEC_STATUS_DECODE_TOBECONTINUE;
+ }
+ CJBig2_Context::DestroyContext(m_pJbig2Context->m_pContext);
+ m_pJbig2Context->m_pContext = NULL;
+ if (ret != JBIG2_SUCCESS) {
+ goto failed;
+ }
+ width = (FX_DWORD)m_pJbig2Context->m_dest_image->m_nWidth;
+ height = (FX_DWORD)m_pJbig2Context->m_dest_image->m_nHeight;
+ pitch = (FX_DWORD)m_pJbig2Context->m_dest_image->m_nStride;
+ dest_buf = m_pJbig2Context->m_dest_image->m_pData;
+ m_pJbig2Context->m_dest_image->m_bNeedFree = FALSE;
+ delete m_pJbig2Context->m_dest_image;
+ FX_Free(m_pJbig2Context->m_src_buf);
+ return FXCODEC_STATUS_DECODE_FINISH;
failed:
- if(m_pJbig2Context->m_src_buf) {
- FX_Free(m_pJbig2Context->m_src_buf);
- }
- m_pJbig2Context->m_src_buf = NULL;
- return FXCODEC_STATUS_ERROR;
+ if (m_pJbig2Context->m_src_buf) {
+ FX_Free(m_pJbig2Context->m_src_buf);
+ }
+ m_pJbig2Context->m_src_buf = NULL;
+ return FXCODEC_STATUS_ERROR;
}
-FXCODEC_STATUS CCodec_Jbig2Module::ContinueDecode(void* pJbig2Context, IFX_Pause* pPause)
-{
- CCodec_Jbig2Context* m_pJbig2Context = (CCodec_Jbig2Context*)pJbig2Context;
- int ret = m_pJbig2Context->m_pContext->Continue(pPause);
- if (m_pJbig2Context->m_pContext->GetProcessiveStatus() != FXCODEC_STATUS_DECODE_FINISH) {
- return m_pJbig2Context->m_pContext->GetProcessiveStatus();
- }
- if (m_pJbig2Context->m_bFileReader) {
- CJBig2_Context::DestroyContext(m_pJbig2Context->m_pContext);
- m_pJbig2Context->m_pContext = NULL;
- if (ret != JBIG2_SUCCESS) {
- if(m_pJbig2Context->m_src_buf) {
- FX_Free(m_pJbig2Context->m_src_buf);
- }
- m_pJbig2Context->m_src_buf = NULL;
- return FXCODEC_STATUS_ERROR;
- }
- delete m_pJbig2Context->m_dest_image;
- FX_Free(m_pJbig2Context->m_src_buf);
- return FXCODEC_STATUS_DECODE_FINISH;
- }
+FXCODEC_STATUS CCodec_Jbig2Module::ContinueDecode(void* pJbig2Context,
+ IFX_Pause* pPause) {
+ CCodec_Jbig2Context* m_pJbig2Context = (CCodec_Jbig2Context*)pJbig2Context;
+ int ret = m_pJbig2Context->m_pContext->Continue(pPause);
+ if (m_pJbig2Context->m_pContext->GetProcessiveStatus() !=
+ FXCODEC_STATUS_DECODE_FINISH) {
+ return m_pJbig2Context->m_pContext->GetProcessiveStatus();
+ }
+ if (m_pJbig2Context->m_bFileReader) {
CJBig2_Context::DestroyContext(m_pJbig2Context->m_pContext);
m_pJbig2Context->m_pContext = NULL;
if (ret != JBIG2_SUCCESS) {
- return FXCODEC_STATUS_ERROR;
- }
- int dword_size = m_pJbig2Context->m_height * m_pJbig2Context->m_dest_pitch / 4;
- FX_DWORD* dword_buf = (FX_DWORD*)m_pJbig2Context->m_dest_buf;
- for (int i = 0; i < dword_size; i ++) {
- dword_buf[i] = ~dword_buf[i];
+ if (m_pJbig2Context->m_src_buf) {
+ FX_Free(m_pJbig2Context->m_src_buf);
+ }
+ m_pJbig2Context->m_src_buf = NULL;
+ return FXCODEC_STATUS_ERROR;
}
+ delete m_pJbig2Context->m_dest_image;
+ FX_Free(m_pJbig2Context->m_src_buf);
return FXCODEC_STATUS_DECODE_FINISH;
+ }
+ CJBig2_Context::DestroyContext(m_pJbig2Context->m_pContext);
+ m_pJbig2Context->m_pContext = NULL;
+ if (ret != JBIG2_SUCCESS) {
+ return FXCODEC_STATUS_ERROR;
+ }
+ int dword_size =
+ m_pJbig2Context->m_height * m_pJbig2Context->m_dest_pitch / 4;
+ FX_DWORD* dword_buf = (FX_DWORD*)m_pJbig2Context->m_dest_buf;
+ for (int i = 0; i < dword_size; i++) {
+ dword_buf[i] = ~dword_buf[i];
+ }
+ return FXCODEC_STATUS_DECODE_FINISH;
}
-
-
-
diff --git a/core/src/fxcodec/codec/fx_codec_jbig_enc.cpp b/core/src/fxcodec/codec/fx_codec_jbig_enc.cpp
index ab322dd9b5..38c82fdc11 100644
--- a/core/src/fxcodec/codec/fx_codec_jbig_enc.cpp
+++ b/core/src/fxcodec/codec/fx_codec_jbig_enc.cpp
@@ -5,7 +5,6 @@
// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
#include "../../../include/fxcodec/fx_codec.h"
-ICodec_Jbig2Encoder* CCodec_ModuleMgr::CreateJbig2Encoder()
-{
- return NULL;
+ICodec_Jbig2Encoder* CCodec_ModuleMgr::CreateJbig2Encoder() {
+ return NULL;
}
diff --git a/core/src/fxcodec/codec/fx_codec_jpeg.cpp b/core/src/fxcodec/codec/fx_codec_jpeg.cpp
index 6839d31509..681678c264 100644
--- a/core/src/fxcodec/codec/fx_codec_jpeg.cpp
+++ b/core/src/fxcodec/codec/fx_codec_jpeg.cpp
@@ -17,664 +17,695 @@ extern "C" {
}
extern "C" {
- static void _JpegScanSOI(const uint8_t*& src_buf, FX_DWORD& src_size)
- {
- if (src_size == 0) {
- return;
- }
- FX_DWORD offset = 0;
- while (offset < src_size - 1) {
- if (src_buf[offset] == 0xff && src_buf[offset + 1] == 0xd8) {
- src_buf += offset;
- src_size -= offset;
- return;
- }
- offset ++;
- }
- }
+static void _JpegScanSOI(const uint8_t*& src_buf, FX_DWORD& src_size) {
+ if (src_size == 0) {
+ return;
+ }
+ FX_DWORD offset = 0;
+ while (offset < src_size - 1) {
+ if (src_buf[offset] == 0xff && src_buf[offset + 1] == 0xd8) {
+ src_buf += offset;
+ src_size -= offset;
+ return;
+ }
+ offset++;
+ }
+}
};
extern "C" {
- static void _src_do_nothing(struct jpeg_decompress_struct* cinfo) {}
+static void _src_do_nothing(struct jpeg_decompress_struct* cinfo) {}
};
extern "C" {
- static void _error_fatal(j_common_ptr cinfo)
- {
- longjmp(*(jmp_buf*)cinfo->client_data, -1);
- }
+static void _error_fatal(j_common_ptr cinfo) {
+ longjmp(*(jmp_buf*)cinfo->client_data, -1);
+}
};
extern "C" {
- static void _src_skip_data(struct jpeg_decompress_struct* cinfo, long num)
- {
- if (num > (long)cinfo->src->bytes_in_buffer) {
- _error_fatal((j_common_ptr)cinfo);
- }
- cinfo->src->next_input_byte += num;
- cinfo->src->bytes_in_buffer -= num;
- }
+static void _src_skip_data(struct jpeg_decompress_struct* cinfo, long num) {
+ if (num > (long)cinfo->src->bytes_in_buffer) {
+ _error_fatal((j_common_ptr)cinfo);
+ }
+ cinfo->src->next_input_byte += num;
+ cinfo->src->bytes_in_buffer -= num;
+}
};
extern "C" {
- static boolean _src_fill_buffer(j_decompress_ptr cinfo)
- {
- return 0;
- }
+static boolean _src_fill_buffer(j_decompress_ptr cinfo) {
+ return 0;
+}
};
extern "C" {
- static boolean _src_resync(j_decompress_ptr cinfo, int desired)
- {
- return 0;
- }
+static boolean _src_resync(j_decompress_ptr cinfo, int desired) {
+ return 0;
+}
};
extern "C" {
- static void _error_do_nothing(j_common_ptr cinfo) {}
+static void _error_do_nothing(j_common_ptr cinfo) {}
};
extern "C" {
- static void _error_do_nothing1(j_common_ptr cinfo, int) {}
+static void _error_do_nothing1(j_common_ptr cinfo, int) {}
};
extern "C" {
- static void _error_do_nothing2(j_common_ptr cinfo, char*) {}
+static void _error_do_nothing2(j_common_ptr cinfo, char*) {}
};
-#define JPEG_MARKER_EXIF (JPEG_APP0 + 1)
-#define JPEG_MARKER_ICC (JPEG_APP0 + 2)
-#define JPEG_MARKER_AUTHORTIME (JPEG_APP0 + 3)
-#define JPEG_MARKER_MAXSIZE 0xFFFF
-#define JPEG_OVERHEAD_LEN 14
-static FX_BOOL _JpegEmbedIccProfile(j_compress_ptr cinfo, const uint8_t* icc_buf_ptr, FX_DWORD icc_length)
-{
- if(icc_buf_ptr == NULL || icc_length == 0) {
- return FALSE;
- }
- FX_DWORD icc_segment_size = (JPEG_MARKER_MAXSIZE - 2 - JPEG_OVERHEAD_LEN);
- FX_DWORD icc_segment_num = (icc_length / icc_segment_size) + 1;
- if (icc_segment_num > 255) {
- return FALSE;
- }
- FX_DWORD icc_data_length = JPEG_OVERHEAD_LEN + (icc_segment_num > 1 ? icc_segment_size : icc_length);
- uint8_t* icc_data = FX_Alloc(uint8_t, icc_data_length);
- FXSYS_memcpy(icc_data, "\x49\x43\x43\x5f\x50\x52\x4f\x46\x49\x4c\x45\x00", 12);
- icc_data[13] = (uint8_t)icc_segment_num;
- for (uint8_t i = 0; i < (icc_segment_num - 1); i++) {
- icc_data[12] = i + 1;
- FXSYS_memcpy(icc_data + JPEG_OVERHEAD_LEN, icc_buf_ptr + i * icc_segment_size, icc_segment_size);
- jpeg_write_marker(cinfo, JPEG_MARKER_ICC, icc_data, icc_data_length);
- }
- icc_data[12] = (uint8_t)icc_segment_num;
- FX_DWORD icc_size = (icc_segment_num - 1) * icc_segment_size;
- FXSYS_memcpy(icc_data + JPEG_OVERHEAD_LEN, icc_buf_ptr + icc_size, icc_length - icc_size);
- jpeg_write_marker(cinfo, JPEG_MARKER_ICC, icc_data, JPEG_OVERHEAD_LEN + icc_length - icc_size);
- FX_Free(icc_data);
- return TRUE;
+#define JPEG_MARKER_EXIF (JPEG_APP0 + 1)
+#define JPEG_MARKER_ICC (JPEG_APP0 + 2)
+#define JPEG_MARKER_AUTHORTIME (JPEG_APP0 + 3)
+#define JPEG_MARKER_MAXSIZE 0xFFFF
+#define JPEG_OVERHEAD_LEN 14
+static FX_BOOL _JpegEmbedIccProfile(j_compress_ptr cinfo,
+ const uint8_t* icc_buf_ptr,
+ FX_DWORD icc_length) {
+ if (icc_buf_ptr == NULL || icc_length == 0) {
+ return FALSE;
+ }
+ FX_DWORD icc_segment_size = (JPEG_MARKER_MAXSIZE - 2 - JPEG_OVERHEAD_LEN);
+ FX_DWORD icc_segment_num = (icc_length / icc_segment_size) + 1;
+ if (icc_segment_num > 255) {
+ return FALSE;
+ }
+ FX_DWORD icc_data_length =
+ JPEG_OVERHEAD_LEN + (icc_segment_num > 1 ? icc_segment_size : icc_length);
+ uint8_t* icc_data = FX_Alloc(uint8_t, icc_data_length);
+ FXSYS_memcpy(icc_data, "\x49\x43\x43\x5f\x50\x52\x4f\x46\x49\x4c\x45\x00",
+ 12);
+ icc_data[13] = (uint8_t)icc_segment_num;
+ for (uint8_t i = 0; i < (icc_segment_num - 1); i++) {
+ icc_data[12] = i + 1;
+ FXSYS_memcpy(icc_data + JPEG_OVERHEAD_LEN,
+ icc_buf_ptr + i * icc_segment_size, icc_segment_size);
+ jpeg_write_marker(cinfo, JPEG_MARKER_ICC, icc_data, icc_data_length);
+ }
+ icc_data[12] = (uint8_t)icc_segment_num;
+ FX_DWORD icc_size = (icc_segment_num - 1) * icc_segment_size;
+ FXSYS_memcpy(icc_data + JPEG_OVERHEAD_LEN, icc_buf_ptr + icc_size,
+ icc_length - icc_size);
+ jpeg_write_marker(cinfo, JPEG_MARKER_ICC, icc_data,
+ JPEG_OVERHEAD_LEN + icc_length - icc_size);
+ FX_Free(icc_data);
+ return TRUE;
}
extern "C" {
- static void _dest_do_nothing(j_compress_ptr cinfo) {}
+static void _dest_do_nothing(j_compress_ptr cinfo) {}
};
extern "C" {
- static boolean _dest_empty(j_compress_ptr cinfo)
- {
- return FALSE;
- }
+static boolean _dest_empty(j_compress_ptr cinfo) {
+ return FALSE;
+}
};
-#define JPEG_BLOCK_SIZE 1048576
-static void _JpegEncode(const CFX_DIBSource* pSource, uint8_t*& dest_buf, FX_STRSIZE& dest_size, int quality, const uint8_t* icc_buf, FX_DWORD icc_length)
-{
- struct jpeg_error_mgr jerr;
- jerr.error_exit = _error_do_nothing;
- jerr.emit_message = _error_do_nothing1;
- jerr.output_message = _error_do_nothing;
- jerr.format_message = _error_do_nothing2;
- jerr.reset_error_mgr = _error_do_nothing;
+#define JPEG_BLOCK_SIZE 1048576
+static void _JpegEncode(const CFX_DIBSource* pSource,
+ uint8_t*& dest_buf,
+ FX_STRSIZE& dest_size,
+ int quality,
+ const uint8_t* icc_buf,
+ FX_DWORD icc_length) {
+ struct jpeg_error_mgr jerr;
+ jerr.error_exit = _error_do_nothing;
+ jerr.emit_message = _error_do_nothing1;
+ jerr.output_message = _error_do_nothing;
+ jerr.format_message = _error_do_nothing2;
+ jerr.reset_error_mgr = _error_do_nothing;
- struct jpeg_compress_struct cinfo;
- memset(&cinfo, 0, sizeof(cinfo));
- cinfo.err = &jerr;
- jpeg_create_compress(&cinfo);
- int Bpp = pSource->GetBPP() / 8;
- FX_DWORD nComponents = Bpp >= 3 ? (pSource->IsCmykImage() ? 4 : 3) : 1;
- FX_DWORD pitch = pSource->GetPitch();
- FX_DWORD width = pdfium::base::checked_cast<FX_DWORD>(pSource->GetWidth());
- FX_DWORD height = pdfium::base::checked_cast<FX_DWORD>(pSource->GetHeight());
- FX_SAFE_DWORD safe_buf_len = width;
- safe_buf_len *= height;
- safe_buf_len *= nComponents;
- safe_buf_len += 1024;
- if (icc_length) {
- safe_buf_len += 255 * 18;
- safe_buf_len += icc_length;
- }
- FX_DWORD dest_buf_length = 0;
- if (!safe_buf_len.IsValid()) {
- dest_buf = nullptr;
- } else {
- dest_buf_length = safe_buf_len.ValueOrDie();
- dest_buf = FX_TryAlloc(uint8_t, dest_buf_length);
- const int MIN_TRY_BUF_LEN = 1024;
- while (!dest_buf && dest_buf_length > MIN_TRY_BUF_LEN) {
- dest_buf_length >>= 1;
- dest_buf = FX_TryAlloc(uint8_t, dest_buf_length);
- }
- }
- if (!dest_buf) {
- FX_OutOfMemoryTerminate();
- }
- struct jpeg_destination_mgr dest;
- dest.init_destination = _dest_do_nothing;
- dest.term_destination = _dest_do_nothing;
- dest.empty_output_buffer = _dest_empty;
- dest.next_output_byte = dest_buf;
- dest.free_in_buffer = dest_buf_length;
- cinfo.dest = &dest;
- cinfo.image_width = width;
- cinfo.image_height = height;
- cinfo.input_components = nComponents;
- if (nComponents == 1) {
- cinfo.in_color_space = JCS_GRAYSCALE;
- } else if (nComponents == 3) {
- cinfo.in_color_space = JCS_RGB;
- } else {
- cinfo.in_color_space = JCS_CMYK;
- }
- uint8_t* line_buf = NULL;
+ struct jpeg_compress_struct cinfo;
+ memset(&cinfo, 0, sizeof(cinfo));
+ cinfo.err = &jerr;
+ jpeg_create_compress(&cinfo);
+ int Bpp = pSource->GetBPP() / 8;
+ FX_DWORD nComponents = Bpp >= 3 ? (pSource->IsCmykImage() ? 4 : 3) : 1;
+ FX_DWORD pitch = pSource->GetPitch();
+ FX_DWORD width = pdfium::base::checked_cast<FX_DWORD>(pSource->GetWidth());
+ FX_DWORD height = pdfium::base::checked_cast<FX_DWORD>(pSource->GetHeight());
+ FX_SAFE_DWORD safe_buf_len = width;
+ safe_buf_len *= height;
+ safe_buf_len *= nComponents;
+ safe_buf_len += 1024;
+ if (icc_length) {
+ safe_buf_len += 255 * 18;
+ safe_buf_len += icc_length;
+ }
+ FX_DWORD dest_buf_length = 0;
+ if (!safe_buf_len.IsValid()) {
+ dest_buf = nullptr;
+ } else {
+ dest_buf_length = safe_buf_len.ValueOrDie();
+ dest_buf = FX_TryAlloc(uint8_t, dest_buf_length);
+ const int MIN_TRY_BUF_LEN = 1024;
+ while (!dest_buf && dest_buf_length > MIN_TRY_BUF_LEN) {
+ dest_buf_length >>= 1;
+ dest_buf = FX_TryAlloc(uint8_t, dest_buf_length);
+ }
+ }
+ if (!dest_buf) {
+ FX_OutOfMemoryTerminate();
+ }
+ struct jpeg_destination_mgr dest;
+ dest.init_destination = _dest_do_nothing;
+ dest.term_destination = _dest_do_nothing;
+ dest.empty_output_buffer = _dest_empty;
+ dest.next_output_byte = dest_buf;
+ dest.free_in_buffer = dest_buf_length;
+ cinfo.dest = &dest;
+ cinfo.image_width = width;
+ cinfo.image_height = height;
+ cinfo.input_components = nComponents;
+ if (nComponents == 1) {
+ cinfo.in_color_space = JCS_GRAYSCALE;
+ } else if (nComponents == 3) {
+ cinfo.in_color_space = JCS_RGB;
+ } else {
+ cinfo.in_color_space = JCS_CMYK;
+ }
+ uint8_t* line_buf = NULL;
+ if (nComponents > 1) {
+ line_buf = FX_Alloc2D(uint8_t, width, nComponents);
+ }
+ jpeg_set_defaults(&cinfo);
+ if (quality != 75) {
+ jpeg_set_quality(&cinfo, quality, TRUE);
+ }
+ jpeg_start_compress(&cinfo, TRUE);
+ _JpegEmbedIccProfile(&cinfo, icc_buf, icc_length);
+ JSAMPROW row_pointer[1];
+ JDIMENSION row;
+ while (cinfo.next_scanline < cinfo.image_height) {
+ const uint8_t* src_scan = pSource->GetScanline(cinfo.next_scanline);
if (nComponents > 1) {
- line_buf = FX_Alloc2D(uint8_t, width, nComponents);
- }
- jpeg_set_defaults(&cinfo);
- if(quality != 75) {
- jpeg_set_quality(&cinfo, quality, TRUE);
- }
- jpeg_start_compress(&cinfo, TRUE);
- _JpegEmbedIccProfile(&cinfo, icc_buf, icc_length);
- JSAMPROW row_pointer[1];
- JDIMENSION row;
- while (cinfo.next_scanline < cinfo.image_height) {
- const uint8_t* src_scan = pSource->GetScanline(cinfo.next_scanline);
- if (nComponents > 1) {
- uint8_t* dest_scan = line_buf;
- if (nComponents == 3) {
- for (int i = 0; i < width; i ++) {
- dest_scan[0] = src_scan[2];
- dest_scan[1] = src_scan[1];
- dest_scan[2] = src_scan[0];
- dest_scan += 3;
- src_scan += Bpp;
- }
- } else {
- for (int i = 0; i < pitch; i ++) {
- *dest_scan++ = ~*src_scan++;
- }
- }
- row_pointer[0] = line_buf;
- } else {
- row_pointer[0] = (uint8_t*)src_scan;
+ uint8_t* dest_scan = line_buf;
+ if (nComponents == 3) {
+ for (int i = 0; i < width; i++) {
+ dest_scan[0] = src_scan[2];
+ dest_scan[1] = src_scan[1];
+ dest_scan[2] = src_scan[0];
+ dest_scan += 3;
+ src_scan += Bpp;
}
- row = cinfo.next_scanline;
- jpeg_write_scanlines(&cinfo, row_pointer, 1);
- if (cinfo.next_scanline == row) {
- dest_buf = FX_Realloc(uint8_t, dest_buf, dest_buf_length + JPEG_BLOCK_SIZE);
- dest.next_output_byte = dest_buf + dest_buf_length - dest.free_in_buffer;
- dest_buf_length += JPEG_BLOCK_SIZE;
- dest.free_in_buffer += JPEG_BLOCK_SIZE;
+ } else {
+ for (int i = 0; i < pitch; i++) {
+ *dest_scan++ = ~*src_scan++;
}
- }
- jpeg_finish_compress(&cinfo);
- jpeg_destroy_compress(&cinfo);
- if (line_buf) {
- FX_Free(line_buf);
- }
- dest_size = dest_buf_length - (FX_STRSIZE)dest.free_in_buffer;
-}
-static FX_BOOL _JpegLoadInfo(const uint8_t* src_buf, FX_DWORD src_size, int& width, int& height,
- int& num_components, int& bits_per_components, FX_BOOL& color_transform,
- uint8_t** icc_buf_ptr, FX_DWORD* icc_length)
-{
- _JpegScanSOI(src_buf, src_size);
- struct jpeg_decompress_struct cinfo;
- struct jpeg_error_mgr jerr;
- jerr.error_exit = _error_fatal;
- jerr.emit_message = _error_do_nothing1;
- jerr.output_message = _error_do_nothing;
- jerr.format_message = _error_do_nothing2;
- jerr.reset_error_mgr = _error_do_nothing;
- jerr.trace_level = 0;
- cinfo.err = &jerr;
- jmp_buf mark;
- cinfo.client_data = &mark;
- if (setjmp(mark) == -1) {
- return FALSE;
- }
- jpeg_create_decompress(&cinfo);
- struct jpeg_source_mgr src;
- src.init_source = _src_do_nothing;
- src.term_source = _src_do_nothing;
- src.skip_input_data = _src_skip_data;
- src.fill_input_buffer = _src_fill_buffer;
- src.resync_to_restart = _src_resync;
- src.bytes_in_buffer = src_size;
- src.next_input_byte = src_buf;
- cinfo.src = &src;
- if (setjmp(mark) == -1) {
- jpeg_destroy_decompress(&cinfo);
- return FALSE;
- }
- if(icc_buf_ptr && icc_length) {
- jpeg_save_markers(&cinfo, JPEG_MARKER_ICC, JPEG_MARKER_MAXSIZE);
- }
- int ret = jpeg_read_header(&cinfo, TRUE);
- if (ret != JPEG_HEADER_OK) {
- jpeg_destroy_decompress(&cinfo);
- return FALSE;
- }
- width = cinfo.image_width;
- height = cinfo.image_height;
- num_components = cinfo.num_components;
- color_transform = cinfo.jpeg_color_space == JCS_YCbCr || cinfo.jpeg_color_space == JCS_YCCK;
- bits_per_components = cinfo.data_precision;
- if(icc_buf_ptr != NULL) {
- *icc_buf_ptr = NULL;
- }
- if(icc_length != NULL) {
- *icc_length = 0;
- }
+ }
+ row_pointer[0] = line_buf;
+ } else {
+ row_pointer[0] = (uint8_t*)src_scan;
+ }
+ row = cinfo.next_scanline;
+ jpeg_write_scanlines(&cinfo, row_pointer, 1);
+ if (cinfo.next_scanline == row) {
+ dest_buf =
+ FX_Realloc(uint8_t, dest_buf, dest_buf_length + JPEG_BLOCK_SIZE);
+ dest.next_output_byte = dest_buf + dest_buf_length - dest.free_in_buffer;
+ dest_buf_length += JPEG_BLOCK_SIZE;
+ dest.free_in_buffer += JPEG_BLOCK_SIZE;
+ }
+ }
+ jpeg_finish_compress(&cinfo);
+ jpeg_destroy_compress(&cinfo);
+ if (line_buf) {
+ FX_Free(line_buf);
+ }
+ dest_size = dest_buf_length - (FX_STRSIZE)dest.free_in_buffer;
+}
+static FX_BOOL _JpegLoadInfo(const uint8_t* src_buf,
+ FX_DWORD src_size,
+ int& width,
+ int& height,
+ int& num_components,
+ int& bits_per_components,
+ FX_BOOL& color_transform,
+ uint8_t** icc_buf_ptr,
+ FX_DWORD* icc_length) {
+ _JpegScanSOI(src_buf, src_size);
+ struct jpeg_decompress_struct cinfo;
+ struct jpeg_error_mgr jerr;
+ jerr.error_exit = _error_fatal;
+ jerr.emit_message = _error_do_nothing1;
+ jerr.output_message = _error_do_nothing;
+ jerr.format_message = _error_do_nothing2;
+ jerr.reset_error_mgr = _error_do_nothing;
+ jerr.trace_level = 0;
+ cinfo.err = &jerr;
+ jmp_buf mark;
+ cinfo.client_data = &mark;
+ if (setjmp(mark) == -1) {
+ return FALSE;
+ }
+ jpeg_create_decompress(&cinfo);
+ struct jpeg_source_mgr src;
+ src.init_source = _src_do_nothing;
+ src.term_source = _src_do_nothing;
+ src.skip_input_data = _src_skip_data;
+ src.fill_input_buffer = _src_fill_buffer;
+ src.resync_to_restart = _src_resync;
+ src.bytes_in_buffer = src_size;
+ src.next_input_byte = src_buf;
+ cinfo.src = &src;
+ if (setjmp(mark) == -1) {
jpeg_destroy_decompress(&cinfo);
- return TRUE;
-}
-class CCodec_JpegDecoder : public CCodec_ScanlineDecoder
-{
-public:
- CCodec_JpegDecoder();
- ~CCodec_JpegDecoder();
- FX_BOOL Create(const uint8_t* src_buf, FX_DWORD src_size, int width, int height, int nComps,
- FX_BOOL ColorTransform, IFX_JpegProvider* pJP);
- virtual void Destroy()
- {
- delete this;
- }
- virtual void v_DownScale(int dest_width, int dest_height);
- virtual FX_BOOL v_Rewind();
- virtual uint8_t* v_GetNextLine();
- virtual FX_DWORD GetSrcOffset();
- jmp_buf m_JmpBuf;
- struct jpeg_decompress_struct cinfo;
- struct jpeg_error_mgr jerr;
- struct jpeg_source_mgr src;
- const uint8_t* m_SrcBuf;
- FX_DWORD m_SrcSize;
- uint8_t* m_pScanlineBuf;
- FX_BOOL InitDecode();
- FX_BOOL m_bInited, m_bStarted, m_bJpegTransform;
-protected:
- IFX_JpegProvider* m_pExtProvider;
- void* m_pExtContext;
- FX_DWORD m_nDefaultScaleDenom;
+ return FALSE;
+ }
+ if (icc_buf_ptr && icc_length) {
+ jpeg_save_markers(&cinfo, JPEG_MARKER_ICC, JPEG_MARKER_MAXSIZE);
+ }
+ int ret = jpeg_read_header(&cinfo, TRUE);
+ if (ret != JPEG_HEADER_OK) {
+ jpeg_destroy_decompress(&cinfo);
+ return FALSE;
+ }
+ width = cinfo.image_width;
+ height = cinfo.image_height;
+ num_components = cinfo.num_components;
+ color_transform =
+ cinfo.jpeg_color_space == JCS_YCbCr || cinfo.jpeg_color_space == JCS_YCCK;
+ bits_per_components = cinfo.data_precision;
+ if (icc_buf_ptr != NULL) {
+ *icc_buf_ptr = NULL;
+ }
+ if (icc_length != NULL) {
+ *icc_length = 0;
+ }
+ jpeg_destroy_decompress(&cinfo);
+ return TRUE;
+}
+class CCodec_JpegDecoder : public CCodec_ScanlineDecoder {
+ public:
+ CCodec_JpegDecoder();
+ ~CCodec_JpegDecoder();
+ FX_BOOL Create(const uint8_t* src_buf,
+ FX_DWORD src_size,
+ int width,
+ int height,
+ int nComps,
+ FX_BOOL ColorTransform,
+ IFX_JpegProvider* pJP);
+ virtual void Destroy() { delete this; }
+ virtual void v_DownScale(int dest_width, int dest_height);
+ virtual FX_BOOL v_Rewind();
+ virtual uint8_t* v_GetNextLine();
+ virtual FX_DWORD GetSrcOffset();
+ jmp_buf m_JmpBuf;
+ struct jpeg_decompress_struct cinfo;
+ struct jpeg_error_mgr jerr;
+ struct jpeg_source_mgr src;
+ const uint8_t* m_SrcBuf;
+ FX_DWORD m_SrcSize;
+ uint8_t* m_pScanlineBuf;
+ FX_BOOL InitDecode();
+ FX_BOOL m_bInited, m_bStarted, m_bJpegTransform;
+
+ protected:
+ IFX_JpegProvider* m_pExtProvider;
+ void* m_pExtContext;
+ FX_DWORD m_nDefaultScaleDenom;
};
-CCodec_JpegDecoder::CCodec_JpegDecoder()
-{
- m_pScanlineBuf = NULL;
- m_DownScale = 1;
- m_bStarted = FALSE;
+CCodec_JpegDecoder::CCodec_JpegDecoder() {
+ m_pScanlineBuf = NULL;
+ m_DownScale = 1;
+ m_bStarted = FALSE;
+ m_bInited = FALSE;
+ m_pExtProvider = NULL;
+ m_pExtContext = NULL;
+ FXSYS_memset(&cinfo, 0, sizeof(cinfo));
+ FXSYS_memset(&jerr, 0, sizeof(jerr));
+ FXSYS_memset(&src, 0, sizeof(src));
+ m_nDefaultScaleDenom = 1;
+}
+CCodec_JpegDecoder::~CCodec_JpegDecoder() {
+ if (m_pExtProvider) {
+ m_pExtProvider->DestroyDecoder(m_pExtContext);
+ return;
+ }
+ if (m_pScanlineBuf) {
+ FX_Free(m_pScanlineBuf);
+ }
+ if (m_bInited) {
+ jpeg_destroy_decompress(&cinfo);
+ }
+}
+FX_BOOL CCodec_JpegDecoder::InitDecode() {
+ cinfo.err = &jerr;
+ cinfo.client_data = &m_JmpBuf;
+ if (setjmp(m_JmpBuf) == -1) {
+ return FALSE;
+ }
+ jpeg_create_decompress(&cinfo);
+ m_bInited = TRUE;
+ cinfo.src = &src;
+ src.bytes_in_buffer = m_SrcSize;
+ src.next_input_byte = m_SrcBuf;
+ if (setjmp(m_JmpBuf) == -1) {
+ jpeg_destroy_decompress(&cinfo);
m_bInited = FALSE;
- m_pExtProvider = NULL;
- m_pExtContext = NULL;
- FXSYS_memset(&cinfo, 0, sizeof(cinfo));
- FXSYS_memset(&jerr, 0, sizeof(jerr));
- FXSYS_memset(&src, 0, sizeof(src));
- m_nDefaultScaleDenom = 1;
-}
-CCodec_JpegDecoder::~CCodec_JpegDecoder()
-{
- if (m_pExtProvider) {
- m_pExtProvider->DestroyDecoder(m_pExtContext);
- return;
- }
- if (m_pScanlineBuf) {
- FX_Free(m_pScanlineBuf);
- }
- if (m_bInited) {
- jpeg_destroy_decompress(&cinfo);
- }
+ return FALSE;
+ }
+ cinfo.image_width = m_OrigWidth;
+ cinfo.image_height = m_OrigHeight;
+ int ret = jpeg_read_header(&cinfo, TRUE);
+ if (ret != JPEG_HEADER_OK) {
+ return FALSE;
+ }
+ if (cinfo.saw_Adobe_marker) {
+ m_bJpegTransform = TRUE;
+ }
+ if (cinfo.num_components == 3 && !m_bJpegTransform) {
+ cinfo.out_color_space = cinfo.jpeg_color_space;
+ }
+ m_OrigWidth = cinfo.image_width;
+ m_OrigHeight = cinfo.image_height;
+ m_OutputWidth = m_OrigWidth;
+ m_OutputHeight = m_OrigHeight;
+ m_nDefaultScaleDenom = cinfo.scale_denom;
+ return TRUE;
}
-FX_BOOL CCodec_JpegDecoder::InitDecode()
-{
- cinfo.err = &jerr;
- cinfo.client_data = &m_JmpBuf;
- if (setjmp(m_JmpBuf) == -1) {
- return FALSE;
- }
- jpeg_create_decompress(&cinfo);
- m_bInited = TRUE;
- cinfo.src = &src;
- src.bytes_in_buffer = m_SrcSize;
- src.next_input_byte = m_SrcBuf;
- if (setjmp(m_JmpBuf) == -1) {
- jpeg_destroy_decompress(&cinfo);
- m_bInited = FALSE;
- return FALSE;
- }
- cinfo.image_width = m_OrigWidth;
- cinfo.image_height = m_OrigHeight;
- int ret = jpeg_read_header(&cinfo, TRUE);
- if (ret != JPEG_HEADER_OK) {
- return FALSE;
- }
- if (cinfo.saw_Adobe_marker) {
- m_bJpegTransform = TRUE;
- }
- if (cinfo.num_components == 3 && !m_bJpegTransform) {
- cinfo.out_color_space = cinfo.jpeg_color_space;
- }
- m_OrigWidth = cinfo.image_width;
- m_OrigHeight = cinfo.image_height;
- m_OutputWidth = m_OrigWidth;
- m_OutputHeight = m_OrigHeight;
- m_nDefaultScaleDenom = cinfo.scale_denom;
- return TRUE;
-}
-FX_BOOL CCodec_JpegDecoder::Create(const uint8_t* src_buf, FX_DWORD src_size, int width, int height,
- int nComps, FX_BOOL ColorTransform, IFX_JpegProvider* pJP)
-{
- if (pJP) {
- m_pExtProvider = pJP;
- m_pExtContext = m_pExtProvider->CreateDecoder(src_buf, src_size, width, height, nComps, ColorTransform);
- return m_pExtContext != NULL;
- }
- _JpegScanSOI(src_buf, src_size);
- m_SrcBuf = src_buf;
- m_SrcSize = src_size;
- jerr.error_exit = _error_fatal;
- jerr.emit_message = _error_do_nothing1;
- jerr.output_message = _error_do_nothing;
- jerr.format_message = _error_do_nothing2;
- jerr.reset_error_mgr = _error_do_nothing;
- src.init_source = _src_do_nothing;
- src.term_source = _src_do_nothing;
- src.skip_input_data = _src_skip_data;
- src.fill_input_buffer = _src_fill_buffer;
- src.resync_to_restart = _src_resync;
- m_bJpegTransform = ColorTransform;
- if(src_size > 1 && FXSYS_memcmp(src_buf + src_size - 2, "\xFF\xD9", 2) != 0) {
- ((uint8_t*)src_buf)[src_size - 2] = 0xFF;
- ((uint8_t*)src_buf)[src_size - 1] = 0xD9;
- }
- m_OutputWidth = m_OrigWidth = width;
- m_OutputHeight = m_OrigHeight = height;
- if (!InitDecode()) {
- return FALSE;
- }
- if (cinfo.num_components < nComps) {
- return FALSE;
- }
- if ((int)cinfo.image_width < width) {
- return FALSE;
- }
- m_Pitch = (cinfo.image_width * cinfo.num_components + 3) / 4 * 4;
- m_pScanlineBuf = FX_Alloc(uint8_t, m_Pitch);
- m_nComps = cinfo.num_components;
- m_bpc = 8;
- m_bColorTransformed = FALSE;
- m_bStarted = FALSE;
- return TRUE;
+FX_BOOL CCodec_JpegDecoder::Create(const uint8_t* src_buf,
+ FX_DWORD src_size,
+ int width,
+ int height,
+ int nComps,
+ FX_BOOL ColorTransform,
+ IFX_JpegProvider* pJP) {
+ if (pJP) {
+ m_pExtProvider = pJP;
+ m_pExtContext = m_pExtProvider->CreateDecoder(
+ src_buf, src_size, width, height, nComps, ColorTransform);
+ return m_pExtContext != NULL;
+ }
+ _JpegScanSOI(src_buf, src_size);
+ m_SrcBuf = src_buf;
+ m_SrcSize = src_size;
+ jerr.error_exit = _error_fatal;
+ jerr.emit_message = _error_do_nothing1;
+ jerr.output_message = _error_do_nothing;
+ jerr.format_message = _error_do_nothing2;
+ jerr.reset_error_mgr = _error_do_nothing;
+ src.init_source = _src_do_nothing;
+ src.term_source = _src_do_nothing;
+ src.skip_input_data = _src_skip_data;
+ src.fill_input_buffer = _src_fill_buffer;
+ src.resync_to_restart = _src_resync;
+ m_bJpegTransform = ColorTransform;
+ if (src_size > 1 &&
+ FXSYS_memcmp(src_buf + src_size - 2, "\xFF\xD9", 2) != 0) {
+ ((uint8_t*)src_buf)[src_size - 2] = 0xFF;
+ ((uint8_t*)src_buf)[src_size - 1] = 0xD9;
+ }
+ m_OutputWidth = m_OrigWidth = width;
+ m_OutputHeight = m_OrigHeight = height;
+ if (!InitDecode()) {
+ return FALSE;
+ }
+ if (cinfo.num_components < nComps) {
+ return FALSE;
+ }
+ if ((int)cinfo.image_width < width) {
+ return FALSE;
+ }
+ m_Pitch = (cinfo.image_width * cinfo.num_components + 3) / 4 * 4;
+ m_pScanlineBuf = FX_Alloc(uint8_t, m_Pitch);
+ m_nComps = cinfo.num_components;
+ m_bpc = 8;
+ m_bColorTransformed = FALSE;
+ m_bStarted = FALSE;
+ return TRUE;
}
extern "C" {
- int32_t FX_GetDownsampleRatio(int32_t originWidth, int32_t originHeight, int32_t downsampleWidth, int32_t downsampleHeight)
- {
- int iratio_w = originWidth / downsampleWidth;
- int iratio_h = originHeight / downsampleHeight;
- int ratio = (iratio_w > iratio_h) ? iratio_h : iratio_w;
- if (ratio >= 8) {
- return 8;
- }
- if (ratio >= 4) {
- return 4;
- }
- if (ratio >= 2) {
- return 2;
- }
- return 1;
- }
+int32_t FX_GetDownsampleRatio(int32_t originWidth,
+ int32_t originHeight,
+ int32_t downsampleWidth,
+ int32_t downsampleHeight) {
+ int iratio_w = originWidth / downsampleWidth;
+ int iratio_h = originHeight / downsampleHeight;
+ int ratio = (iratio_w > iratio_h) ? iratio_h : iratio_w;
+ if (ratio >= 8) {
+ return 8;
+ }
+ if (ratio >= 4) {
+ return 4;
+ }
+ if (ratio >= 2) {
+ return 2;
+ }
+ return 1;
}
-void CCodec_JpegDecoder::v_DownScale(int dest_width, int dest_height)
-{
- if (m_pExtProvider) {
- m_pExtProvider->DownScale(m_pExtContext, dest_width, dest_height);
- return;
- }
- int old_scale = m_DownScale;
- m_DownScale = FX_GetDownsampleRatio(m_OrigWidth, m_OrigHeight, dest_width, dest_height);
- m_OutputWidth = (m_OrigWidth + m_DownScale - 1) / m_DownScale;
- m_OutputHeight = (m_OrigHeight + m_DownScale - 1) / m_DownScale;
- m_Pitch = (m_OutputWidth * m_nComps + 3) / 4 * 4;
- if (old_scale != m_DownScale) {
- m_NextLine = -1;
- }
}
-FX_BOOL CCodec_JpegDecoder::v_Rewind()
-{
- if (m_pExtProvider) {
- return m_pExtProvider->Rewind(m_pExtContext);
- }
- if (m_bStarted) {
- jpeg_destroy_decompress(&cinfo);
- if (!InitDecode()) {
- return FALSE;
- }
- }
- if (setjmp(m_JmpBuf) == -1) {
- return FALSE;
- }
- cinfo.scale_denom = m_nDefaultScaleDenom * m_DownScale;
- m_OutputWidth = (m_OrigWidth + m_DownScale - 1) / m_DownScale;
- m_OutputHeight = (m_OrigHeight + m_DownScale - 1) / m_DownScale;
- if (!jpeg_start_decompress(&cinfo)) {
- jpeg_destroy_decompress(&cinfo);
- return FALSE;
- }
- if ((int)cinfo.output_width > m_OrigWidth) {
- FXSYS_assert(FALSE);
- return FALSE;
- }
- m_bStarted = TRUE;
- return TRUE;
+void CCodec_JpegDecoder::v_DownScale(int dest_width, int dest_height) {
+ if (m_pExtProvider) {
+ m_pExtProvider->DownScale(m_pExtContext, dest_width, dest_height);
+ return;
+ }
+ int old_scale = m_DownScale;
+ m_DownScale =
+ FX_GetDownsampleRatio(m_OrigWidth, m_OrigHeight, dest_width, dest_height);
+ m_OutputWidth = (m_OrigWidth + m_DownScale - 1) / m_DownScale;
+ m_OutputHeight = (m_OrigHeight + m_DownScale - 1) / m_DownScale;
+ m_Pitch = (m_OutputWidth * m_nComps + 3) / 4 * 4;
+ if (old_scale != m_DownScale) {
+ m_NextLine = -1;
+ }
}
-uint8_t* CCodec_JpegDecoder::v_GetNextLine()
-{
- if (m_pExtProvider) {
- return m_pExtProvider->GetNextLine(m_pExtContext);
- }
- int nlines = jpeg_read_scanlines(&cinfo, &m_pScanlineBuf, 1);
- if (nlines < 1) {
- return NULL;
- }
- return m_pScanlineBuf;
+FX_BOOL CCodec_JpegDecoder::v_Rewind() {
+ if (m_pExtProvider) {
+ return m_pExtProvider->Rewind(m_pExtContext);
+ }
+ if (m_bStarted) {
+ jpeg_destroy_decompress(&cinfo);
+ if (!InitDecode()) {
+ return FALSE;
+ }
+ }
+ if (setjmp(m_JmpBuf) == -1) {
+ return FALSE;
+ }
+ cinfo.scale_denom = m_nDefaultScaleDenom * m_DownScale;
+ m_OutputWidth = (m_OrigWidth + m_DownScale - 1) / m_DownScale;
+ m_OutputHeight = (m_OrigHeight + m_DownScale - 1) / m_DownScale;
+ if (!jpeg_start_decompress(&cinfo)) {
+ jpeg_destroy_decompress(&cinfo);
+ return FALSE;
+ }
+ if ((int)cinfo.output_width > m_OrigWidth) {
+ FXSYS_assert(FALSE);
+ return FALSE;
+ }
+ m_bStarted = TRUE;
+ return TRUE;
}
-FX_DWORD CCodec_JpegDecoder::GetSrcOffset()
-{
- if (m_pExtProvider) {
- return m_pExtProvider->GetSrcOffset(m_pExtContext);
- }
- return (FX_DWORD)(m_SrcSize - src.bytes_in_buffer);
+uint8_t* CCodec_JpegDecoder::v_GetNextLine() {
+ if (m_pExtProvider) {
+ return m_pExtProvider->GetNextLine(m_pExtContext);
+ }
+ int nlines = jpeg_read_scanlines(&cinfo, &m_pScanlineBuf, 1);
+ if (nlines < 1) {
+ return NULL;
+ }
+ return m_pScanlineBuf;
}
-ICodec_ScanlineDecoder* CCodec_JpegModule::CreateDecoder(const uint8_t* src_buf, FX_DWORD src_size,
- int width, int height, int nComps, FX_BOOL ColorTransform)
-{
- if (src_buf == NULL || src_size == 0) {
- return NULL;
- }
- CCodec_JpegDecoder* pDecoder = new CCodec_JpegDecoder;
- if (!pDecoder->Create(src_buf, src_size, width, height, nComps, ColorTransform, m_pExtProvider)) {
- delete pDecoder;
- return NULL;
- }
- return pDecoder;
-}
-FX_BOOL CCodec_JpegModule::LoadInfo(const uint8_t* src_buf, FX_DWORD src_size, int& width, int& height,
- int& num_components, int& bits_per_components, FX_BOOL& color_transform,
- uint8_t** icc_buf_ptr, FX_DWORD* icc_length)
-{
- if (m_pExtProvider) {
- return m_pExtProvider->LoadInfo(src_buf, src_size, width, height,
- num_components, bits_per_components, color_transform,
- icc_buf_ptr, icc_length);
- }
- return _JpegLoadInfo(src_buf, src_size, width, height, num_components, bits_per_components, color_transform, icc_buf_ptr, icc_length);
+FX_DWORD CCodec_JpegDecoder::GetSrcOffset() {
+ if (m_pExtProvider) {
+ return m_pExtProvider->GetSrcOffset(m_pExtContext);
+ }
+ return (FX_DWORD)(m_SrcSize - src.bytes_in_buffer);
}
-FX_BOOL CCodec_JpegModule::Encode(const CFX_DIBSource* pSource, uint8_t*& dest_buf, FX_STRSIZE& dest_size, int quality, const uint8_t* icc_buf, FX_DWORD icc_length)
-{
- if (m_pExtProvider) {
- return m_pExtProvider->Encode(pSource, dest_buf, dest_size, quality, icc_buf, icc_length);
- }
- if(pSource->GetBPP() < 8 || pSource->GetPalette() != NULL) {
- ASSERT(pSource->GetBPP() >= 8 && pSource->GetPalette() == NULL);
- return FALSE;
- }
- _JpegEncode(pSource, dest_buf, dest_size, quality, icc_buf, icc_length);
- return TRUE;
+ICodec_ScanlineDecoder* CCodec_JpegModule::CreateDecoder(
+ const uint8_t* src_buf,
+ FX_DWORD src_size,
+ int width,
+ int height,
+ int nComps,
+ FX_BOOL ColorTransform) {
+ if (src_buf == NULL || src_size == 0) {
+ return NULL;
+ }
+ CCodec_JpegDecoder* pDecoder = new CCodec_JpegDecoder;
+ if (!pDecoder->Create(src_buf, src_size, width, height, nComps,
+ ColorTransform, m_pExtProvider)) {
+ delete pDecoder;
+ return NULL;
+ }
+ return pDecoder;
+}
+FX_BOOL CCodec_JpegModule::LoadInfo(const uint8_t* src_buf,
+ FX_DWORD src_size,
+ int& width,
+ int& height,
+ int& num_components,
+ int& bits_per_components,
+ FX_BOOL& color_transform,
+ uint8_t** icc_buf_ptr,
+ FX_DWORD* icc_length) {
+ if (m_pExtProvider) {
+ return m_pExtProvider->LoadInfo(src_buf, src_size, width, height,
+ num_components, bits_per_components,
+ color_transform, icc_buf_ptr, icc_length);
+ }
+ return _JpegLoadInfo(src_buf, src_size, width, height, num_components,
+ bits_per_components, color_transform, icc_buf_ptr,
+ icc_length);
+}
+FX_BOOL CCodec_JpegModule::Encode(const CFX_DIBSource* pSource,
+ uint8_t*& dest_buf,
+ FX_STRSIZE& dest_size,
+ int quality,
+ const uint8_t* icc_buf,
+ FX_DWORD icc_length) {
+ if (m_pExtProvider) {
+ return m_pExtProvider->Encode(pSource, dest_buf, dest_size, quality,
+ icc_buf, icc_length);
+ }
+ if (pSource->GetBPP() < 8 || pSource->GetPalette() != NULL) {
+ ASSERT(pSource->GetBPP() >= 8 && pSource->GetPalette() == NULL);
+ return FALSE;
+ }
+ _JpegEncode(pSource, dest_buf, dest_size, quality, icc_buf, icc_length);
+ return TRUE;
}
struct FXJPEG_Context {
- jmp_buf m_JumpMark;
- jpeg_decompress_struct m_Info;
- jpeg_error_mgr m_ErrMgr;
- jpeg_source_mgr m_SrcMgr;
- unsigned int m_SkipSize;
- void* (*m_AllocFunc)(unsigned int);
- void (*m_FreeFunc)(void*);
+ jmp_buf m_JumpMark;
+ jpeg_decompress_struct m_Info;
+ jpeg_error_mgr m_ErrMgr;
+ jpeg_source_mgr m_SrcMgr;
+ unsigned int m_SkipSize;
+ void* (*m_AllocFunc)(unsigned int);
+ void (*m_FreeFunc)(void*);
};
extern "C" {
- static void _error_fatal1(j_common_ptr cinfo)
- {
- longjmp(((FXJPEG_Context*)cinfo->client_data)->m_JumpMark, -1);
- }
+static void _error_fatal1(j_common_ptr cinfo) {
+ longjmp(((FXJPEG_Context*)cinfo->client_data)->m_JumpMark, -1);
+}
};
extern "C" {
- static void _src_skip_data1(struct jpeg_decompress_struct* cinfo, long num)
- {
- if (cinfo->src->bytes_in_buffer < (size_t)num) {
- ((FXJPEG_Context*)cinfo->client_data)->m_SkipSize = (unsigned int)(num - cinfo->src->bytes_in_buffer);
- cinfo->src->bytes_in_buffer = 0;
- } else {
- cinfo->src->next_input_byte += num;
- cinfo->src->bytes_in_buffer -= num;
- }
- }
+static void _src_skip_data1(struct jpeg_decompress_struct* cinfo, long num) {
+ if (cinfo->src->bytes_in_buffer < (size_t)num) {
+ ((FXJPEG_Context*)cinfo->client_data)->m_SkipSize =
+ (unsigned int)(num - cinfo->src->bytes_in_buffer);
+ cinfo->src->bytes_in_buffer = 0;
+ } else {
+ cinfo->src->next_input_byte += num;
+ cinfo->src->bytes_in_buffer -= num;
+ }
+}
};
-static void* jpeg_alloc_func(unsigned int size)
-{
- return FX_Alloc(char, size);
-}
-static void jpeg_free_func(void* p)
-{
- FX_Free(p);
-}
-void* CCodec_JpegModule::Start()
-{
- if (m_pExtProvider) {
- return m_pExtProvider->Start();
- }
- FXJPEG_Context* p = (FXJPEG_Context*)FX_Alloc(uint8_t, sizeof(FXJPEG_Context));
- p->m_AllocFunc = jpeg_alloc_func;
- p->m_FreeFunc = jpeg_free_func;
- p->m_ErrMgr.error_exit = _error_fatal1;
- p->m_ErrMgr.emit_message = _error_do_nothing1;
- p->m_ErrMgr.output_message = _error_do_nothing;
- p->m_ErrMgr.format_message = _error_do_nothing2;
- p->m_ErrMgr.reset_error_mgr = _error_do_nothing;
- p->m_SrcMgr.init_source = _src_do_nothing;
- p->m_SrcMgr.term_source = _src_do_nothing;
- p->m_SrcMgr.skip_input_data = _src_skip_data1;
- p->m_SrcMgr.fill_input_buffer = _src_fill_buffer;
- p->m_SrcMgr.resync_to_restart = _src_resync;
- p->m_Info.client_data = p;
- p->m_Info.err = &p->m_ErrMgr;
- if (setjmp(p->m_JumpMark) == -1) {
- return 0;
- }
- jpeg_create_decompress(&p->m_Info);
- p->m_Info.src = &p->m_SrcMgr;
- p->m_SkipSize = 0;
- return p;
+static void* jpeg_alloc_func(unsigned int size) {
+ return FX_Alloc(char, size);
}
-void CCodec_JpegModule::Finish(void* pContext)
-{
- if (m_pExtProvider) {
- m_pExtProvider->Finish(pContext);
- return;
- }
- FXJPEG_Context* p = (FXJPEG_Context*)pContext;
- jpeg_destroy_decompress(&p->m_Info);
- p->m_FreeFunc(p);
-}
-void CCodec_JpegModule::Input(void* pContext, const unsigned char* src_buf, FX_DWORD src_size)
-{
- if (m_pExtProvider) {
- m_pExtProvider->Input(pContext, src_buf, src_size);
- return;
- }
- FXJPEG_Context* p = (FXJPEG_Context*)pContext;
- if (p->m_SkipSize) {
- if (p->m_SkipSize > src_size) {
- p->m_SrcMgr.bytes_in_buffer = 0;
- p->m_SkipSize -= src_size;
- return;
- }
- src_size -= p->m_SkipSize;
- src_buf += p->m_SkipSize;
- p->m_SkipSize = 0;
- }
- p->m_SrcMgr.next_input_byte = src_buf;
- p->m_SrcMgr.bytes_in_buffer = src_size;
+static void jpeg_free_func(void* p) {
+ FX_Free(p);
}
-int CCodec_JpegModule::ReadHeader(void* pContext, int* width, int* height, int* nComps)
-{
- if (m_pExtProvider) {
- return m_pExtProvider->ReadHeader(pContext, width, height, nComps);
- }
- FXJPEG_Context* p = (FXJPEG_Context*)pContext;
- if (setjmp(p->m_JumpMark) == -1) {
- return 1;
- }
- int ret = jpeg_read_header(&p->m_Info, true);
- if (ret == JPEG_SUSPENDED) {
- return 2;
- }
- if (ret != JPEG_HEADER_OK) {
- return 1;
- }
- *width = p->m_Info.image_width;
- *height = p->m_Info.image_height;
- *nComps = p->m_Info.num_components;
+void* CCodec_JpegModule::Start() {
+ if (m_pExtProvider) {
+ return m_pExtProvider->Start();
+ }
+ FXJPEG_Context* p =
+ (FXJPEG_Context*)FX_Alloc(uint8_t, sizeof(FXJPEG_Context));
+ p->m_AllocFunc = jpeg_alloc_func;
+ p->m_FreeFunc = jpeg_free_func;
+ p->m_ErrMgr.error_exit = _error_fatal1;
+ p->m_ErrMgr.emit_message = _error_do_nothing1;
+ p->m_ErrMgr.output_message = _error_do_nothing;
+ p->m_ErrMgr.format_message = _error_do_nothing2;
+ p->m_ErrMgr.reset_error_mgr = _error_do_nothing;
+ p->m_SrcMgr.init_source = _src_do_nothing;
+ p->m_SrcMgr.term_source = _src_do_nothing;
+ p->m_SrcMgr.skip_input_data = _src_skip_data1;
+ p->m_SrcMgr.fill_input_buffer = _src_fill_buffer;
+ p->m_SrcMgr.resync_to_restart = _src_resync;
+ p->m_Info.client_data = p;
+ p->m_Info.err = &p->m_ErrMgr;
+ if (setjmp(p->m_JumpMark) == -1) {
return 0;
+ }
+ jpeg_create_decompress(&p->m_Info);
+ p->m_Info.src = &p->m_SrcMgr;
+ p->m_SkipSize = 0;
+ return p;
}
-int CCodec_JpegModule::StartScanline(void* pContext, int down_scale)
-{
- if (m_pExtProvider) {
- return m_pExtProvider->StartScanline(pContext, down_scale);
- }
- FXJPEG_Context* p = (FXJPEG_Context*)pContext;
- if (setjmp(p->m_JumpMark) == -1) {
- return 0;
- }
- p->m_Info.scale_denom = down_scale;
- return jpeg_start_decompress(&p->m_Info);
+void CCodec_JpegModule::Finish(void* pContext) {
+ if (m_pExtProvider) {
+ m_pExtProvider->Finish(pContext);
+ return;
+ }
+ FXJPEG_Context* p = (FXJPEG_Context*)pContext;
+ jpeg_destroy_decompress(&p->m_Info);
+ p->m_FreeFunc(p);
}
-FX_BOOL CCodec_JpegModule::ReadScanline(void* pContext, unsigned char* dest_buf)
-{
- if (m_pExtProvider) {
- return m_pExtProvider->ReadScanline(pContext, dest_buf);
- }
- FXJPEG_Context* p = (FXJPEG_Context*)pContext;
- if (setjmp(p->m_JumpMark) == -1) {
- return FALSE;
- }
- int nlines = jpeg_read_scanlines(&p->m_Info, &dest_buf, 1);
- return nlines == 1;
+void CCodec_JpegModule::Input(void* pContext,
+ const unsigned char* src_buf,
+ FX_DWORD src_size) {
+ if (m_pExtProvider) {
+ m_pExtProvider->Input(pContext, src_buf, src_size);
+ return;
+ }
+ FXJPEG_Context* p = (FXJPEG_Context*)pContext;
+ if (p->m_SkipSize) {
+ if (p->m_SkipSize > src_size) {
+ p->m_SrcMgr.bytes_in_buffer = 0;
+ p->m_SkipSize -= src_size;
+ return;
+ }
+ src_size -= p->m_SkipSize;
+ src_buf += p->m_SkipSize;
+ p->m_SkipSize = 0;
+ }
+ p->m_SrcMgr.next_input_byte = src_buf;
+ p->m_SrcMgr.bytes_in_buffer = src_size;
}
-FX_DWORD CCodec_JpegModule::GetAvailInput(void* pContext, uint8_t** avail_buf_ptr)
-{
- if (m_pExtProvider) {
- return m_pExtProvider->GetAvailInput(pContext, avail_buf_ptr);
- }
- if(avail_buf_ptr != NULL) {
- *avail_buf_ptr = NULL;
- if(((FXJPEG_Context*)pContext)->m_SrcMgr.bytes_in_buffer > 0) {
- *avail_buf_ptr = (uint8_t*)((FXJPEG_Context*)pContext)->m_SrcMgr.next_input_byte;
- }
- }
- return (FX_DWORD)((FXJPEG_Context*)pContext)->m_SrcMgr.bytes_in_buffer;
+int CCodec_JpegModule::ReadHeader(void* pContext,
+ int* width,
+ int* height,
+ int* nComps) {
+ if (m_pExtProvider) {
+ return m_pExtProvider->ReadHeader(pContext, width, height, nComps);
+ }
+ FXJPEG_Context* p = (FXJPEG_Context*)pContext;
+ if (setjmp(p->m_JumpMark) == -1) {
+ return 1;
+ }
+ int ret = jpeg_read_header(&p->m_Info, true);
+ if (ret == JPEG_SUSPENDED) {
+ return 2;
+ }
+ if (ret != JPEG_HEADER_OK) {
+ return 1;
+ }
+ *width = p->m_Info.image_width;
+ *height = p->m_Info.image_height;
+ *nComps = p->m_Info.num_components;
+ return 0;
+}
+int CCodec_JpegModule::StartScanline(void* pContext, int down_scale) {
+ if (m_pExtProvider) {
+ return m_pExtProvider->StartScanline(pContext, down_scale);
+ }
+ FXJPEG_Context* p = (FXJPEG_Context*)pContext;
+ if (setjmp(p->m_JumpMark) == -1) {
+ return 0;
+ }
+ p->m_Info.scale_denom = down_scale;
+ return jpeg_start_decompress(&p->m_Info);
+}
+FX_BOOL CCodec_JpegModule::ReadScanline(void* pContext,
+ unsigned char* dest_buf) {
+ if (m_pExtProvider) {
+ return m_pExtProvider->ReadScanline(pContext, dest_buf);
+ }
+ FXJPEG_Context* p = (FXJPEG_Context*)pContext;
+ if (setjmp(p->m_JumpMark) == -1) {
+ return FALSE;
+ }
+ int nlines = jpeg_read_scanlines(&p->m_Info, &dest_buf, 1);
+ return nlines == 1;
+}
+FX_DWORD CCodec_JpegModule::GetAvailInput(void* pContext,
+ uint8_t** avail_buf_ptr) {
+ if (m_pExtProvider) {
+ return m_pExtProvider->GetAvailInput(pContext, avail_buf_ptr);
+ }
+ if (avail_buf_ptr != NULL) {
+ *avail_buf_ptr = NULL;
+ if (((FXJPEG_Context*)pContext)->m_SrcMgr.bytes_in_buffer > 0) {
+ *avail_buf_ptr =
+ (uint8_t*)((FXJPEG_Context*)pContext)->m_SrcMgr.next_input_byte;
+ }
+ }
+ return (FX_DWORD)((FXJPEG_Context*)pContext)->m_SrcMgr.bytes_in_buffer;
}
diff --git a/core/src/fxcodec/codec/fx_codec_jpx_opj.cpp b/core/src/fxcodec/codec/fx_codec_jpx_opj.cpp
index 2d395b0b4b..e1b9d255de 100644
--- a/core/src/fxcodec/codec/fx_codec_jpx_opj.cpp
+++ b/core/src/fxcodec/codec/fx_codec_jpx_opj.cpp
@@ -12,795 +12,841 @@
#include "../../../include/fxcodec/fx_codec.h"
#include "codec_int.h"
-static void fx_error_callback(const char *msg, void *client_data)
-{
- (void)client_data;
+static void fx_error_callback(const char* msg, void* client_data) {
+ (void)client_data;
}
-static void fx_warning_callback(const char *msg, void *client_data)
-{
- (void)client_data;
+static void fx_warning_callback(const char* msg, void* client_data) {
+ (void)client_data;
}
-static void fx_info_callback(const char *msg, void *client_data)
-{
- (void)client_data;
+static void fx_info_callback(const char* msg, void* client_data) {
+ (void)client_data;
}
-OPJ_SIZE_T opj_read_from_memory(void* p_buffer, OPJ_SIZE_T nb_bytes, void* p_user_data)
-{
- DecodeData* srcData = static_cast<DecodeData*>(p_user_data);
- if (!srcData || !srcData->src_data || srcData->src_size == 0) {
- return -1;
- }
- // Reads at EOF return an error code.
- if (srcData->offset >= srcData->src_size) {
- return -1;
- }
- OPJ_SIZE_T bufferLength = srcData->src_size - srcData->offset;
- OPJ_SIZE_T readlength = nb_bytes < bufferLength ? nb_bytes : bufferLength;
- memcpy(p_buffer, &srcData->src_data[srcData->offset], readlength);
- srcData->offset += readlength;
- return readlength;
+OPJ_SIZE_T opj_read_from_memory(void* p_buffer,
+ OPJ_SIZE_T nb_bytes,
+ void* p_user_data) {
+ DecodeData* srcData = static_cast<DecodeData*>(p_user_data);
+ if (!srcData || !srcData->src_data || srcData->src_size == 0) {
+ return -1;
+ }
+ // Reads at EOF return an error code.
+ if (srcData->offset >= srcData->src_size) {
+ return -1;
+ }
+ OPJ_SIZE_T bufferLength = srcData->src_size - srcData->offset;
+ OPJ_SIZE_T readlength = nb_bytes < bufferLength ? nb_bytes : bufferLength;
+ memcpy(p_buffer, &srcData->src_data[srcData->offset], readlength);
+ srcData->offset += readlength;
+ return readlength;
}
-OPJ_SIZE_T opj_write_from_memory(void* p_buffer, OPJ_SIZE_T nb_bytes, void* p_user_data)
-{
- DecodeData* srcData = static_cast<DecodeData*>(p_user_data);
- if (!srcData || !srcData->src_data || srcData->src_size == 0) {
- return -1;
- }
- // Writes at EOF return an error code.
- if (srcData->offset >= srcData->src_size) {
- return -1;
- }
- OPJ_SIZE_T bufferLength = srcData->src_size - srcData->offset;
- OPJ_SIZE_T writeLength = nb_bytes < bufferLength ? nb_bytes : bufferLength;
- memcpy(&srcData->src_data[srcData->offset], p_buffer, writeLength);
- srcData->offset += writeLength;
- return writeLength;
+OPJ_SIZE_T opj_write_from_memory(void* p_buffer,
+ OPJ_SIZE_T nb_bytes,
+ void* p_user_data) {
+ DecodeData* srcData = static_cast<DecodeData*>(p_user_data);
+ if (!srcData || !srcData->src_data || srcData->src_size == 0) {
+ return -1;
+ }
+ // Writes at EOF return an error code.
+ if (srcData->offset >= srcData->src_size) {
+ return -1;
+ }
+ OPJ_SIZE_T bufferLength = srcData->src_size - srcData->offset;
+ OPJ_SIZE_T writeLength = nb_bytes < bufferLength ? nb_bytes : bufferLength;
+ memcpy(&srcData->src_data[srcData->offset], p_buffer, writeLength);
+ srcData->offset += writeLength;
+ return writeLength;
}
-OPJ_OFF_T opj_skip_from_memory(OPJ_OFF_T nb_bytes, void* p_user_data)
-{
- DecodeData* srcData = static_cast<DecodeData*>(p_user_data);
- if (!srcData || !srcData->src_data || srcData->src_size == 0) {
- return -1;
- }
- // Offsets are signed and may indicate a negative skip. Do not support this
- // because of the strange return convention where either bytes skipped or
- // -1 is returned. Following that convention, a successful relative seek of
- // -1 bytes would be required to to give the same result as the error case.
- if (nb_bytes < 0) {
- return -1;
- }
- // FIXME: use std::make_unsigned<OPJ_OFF_T>::type once c++11 lib is OK'd.
- uint64_t unsignedNbBytes = static_cast<uint64_t>(nb_bytes);
- // Additionally, the offset may take us beyond the range of a size_t (e.g.
- // 32-bit platforms). If so, just clamp at EOF.
- if (unsignedNbBytes > std::numeric_limits<OPJ_SIZE_T>::max() - srcData->offset) {
- srcData->offset = srcData->src_size;
- } else {
- OPJ_SIZE_T checkedNbBytes = static_cast<OPJ_SIZE_T>(unsignedNbBytes);
- // Otherwise, mimic fseek() semantics to always succeed, even past EOF,
- // clamping at EOF. We can get away with this since we don't actually
- // provide negative relative skips from beyond EOF back to inside the
- // data, which would be the only reason to need to know exactly how far
- // beyond EOF we are.
- srcData->offset = std::min(srcData->offset + checkedNbBytes, srcData->src_size);
- }
- return nb_bytes;
+OPJ_OFF_T opj_skip_from_memory(OPJ_OFF_T nb_bytes, void* p_user_data) {
+ DecodeData* srcData = static_cast<DecodeData*>(p_user_data);
+ if (!srcData || !srcData->src_data || srcData->src_size == 0) {
+ return -1;
+ }
+ // Offsets are signed and may indicate a negative skip. Do not support this
+ // because of the strange return convention where either bytes skipped or
+ // -1 is returned. Following that convention, a successful relative seek of
+ // -1 bytes would be required to to give the same result as the error case.
+ if (nb_bytes < 0) {
+ return -1;
+ }
+ // FIXME: use std::make_unsigned<OPJ_OFF_T>::type once c++11 lib is OK'd.
+ uint64_t unsignedNbBytes = static_cast<uint64_t>(nb_bytes);
+ // Additionally, the offset may take us beyond the range of a size_t (e.g.
+ // 32-bit platforms). If so, just clamp at EOF.
+ if (unsignedNbBytes >
+ std::numeric_limits<OPJ_SIZE_T>::max() - srcData->offset) {
+ srcData->offset = srcData->src_size;
+ } else {
+ OPJ_SIZE_T checkedNbBytes = static_cast<OPJ_SIZE_T>(unsignedNbBytes);
+ // Otherwise, mimic fseek() semantics to always succeed, even past EOF,
+ // clamping at EOF. We can get away with this since we don't actually
+ // provide negative relative skips from beyond EOF back to inside the
+ // data, which would be the only reason to need to know exactly how far
+ // beyond EOF we are.
+ srcData->offset =
+ std::min(srcData->offset + checkedNbBytes, srcData->src_size);
+ }
+ return nb_bytes;
}
-OPJ_BOOL opj_seek_from_memory(OPJ_OFF_T nb_bytes, void* p_user_data)
-{
- DecodeData* srcData = static_cast<DecodeData*>(p_user_data);
- if (!srcData || !srcData->src_data || srcData->src_size == 0) {
- return OPJ_FALSE;
- }
- // Offsets are signed and may indicate a negative position, which would
- // be before the start of the file. Do not support this.
- if (nb_bytes < 0) {
- return OPJ_FALSE;
- }
- // FIXME: use std::make_unsigned<OPJ_OFF_T>::type once c++11 lib is OK'd.
- uint64_t unsignedNbBytes = static_cast<uint64_t>(nb_bytes);
- // Additionally, the offset may take us beyond the range of a size_t (e.g.
- // 32-bit platforms). If so, just clamp at EOF.
- if (unsignedNbBytes > std::numeric_limits<OPJ_SIZE_T>::max()) {
- srcData->offset = srcData->src_size;
- } else {
- OPJ_SIZE_T checkedNbBytes = static_cast<OPJ_SIZE_T>(nb_bytes);
- // Otherwise, mimic fseek() semantics to always succeed, even past EOF,
- // again clamping at EOF.
- srcData->offset = std::min(checkedNbBytes, srcData->src_size);
- }
- return OPJ_TRUE;
+OPJ_BOOL opj_seek_from_memory(OPJ_OFF_T nb_bytes, void* p_user_data) {
+ DecodeData* srcData = static_cast<DecodeData*>(p_user_data);
+ if (!srcData || !srcData->src_data || srcData->src_size == 0) {
+ return OPJ_FALSE;
+ }
+ // Offsets are signed and may indicate a negative position, which would
+ // be before the start of the file. Do not support this.
+ if (nb_bytes < 0) {
+ return OPJ_FALSE;
+ }
+ // FIXME: use std::make_unsigned<OPJ_OFF_T>::type once c++11 lib is OK'd.
+ uint64_t unsignedNbBytes = static_cast<uint64_t>(nb_bytes);
+ // Additionally, the offset may take us beyond the range of a size_t (e.g.
+ // 32-bit platforms). If so, just clamp at EOF.
+ if (unsignedNbBytes > std::numeric_limits<OPJ_SIZE_T>::max()) {
+ srcData->offset = srcData->src_size;
+ } else {
+ OPJ_SIZE_T checkedNbBytes = static_cast<OPJ_SIZE_T>(nb_bytes);
+ // Otherwise, mimic fseek() semantics to always succeed, even past EOF,
+ // again clamping at EOF.
+ srcData->offset = std::min(checkedNbBytes, srcData->src_size);
+ }
+ return OPJ_TRUE;
}
-opj_stream_t* fx_opj_stream_create_memory_stream (DecodeData* data, OPJ_SIZE_T p_size, OPJ_BOOL p_is_read_stream)
-{
- opj_stream_t* l_stream = 00;
- if (!data || ! data->src_data || data->src_size <= 0 ) {
- return NULL;
- }
- l_stream = opj_stream_create(p_size, p_is_read_stream);
- if (! l_stream) {
- return NULL;
- }
- opj_stream_set_user_data(l_stream, data, NULL);
- opj_stream_set_user_data_length(l_stream, data->src_size);
- opj_stream_set_read_function(l_stream, opj_read_from_memory);
- opj_stream_set_write_function(l_stream, opj_write_from_memory);
- opj_stream_set_skip_function(l_stream, opj_skip_from_memory);
- opj_stream_set_seek_function(l_stream, opj_seek_from_memory);
- return l_stream;
+opj_stream_t* fx_opj_stream_create_memory_stream(DecodeData* data,
+ OPJ_SIZE_T p_size,
+ OPJ_BOOL p_is_read_stream) {
+ opj_stream_t* l_stream = 00;
+ if (!data || !data->src_data || data->src_size <= 0) {
+ return NULL;
+ }
+ l_stream = opj_stream_create(p_size, p_is_read_stream);
+ if (!l_stream) {
+ return NULL;
+ }
+ opj_stream_set_user_data(l_stream, data, NULL);
+ opj_stream_set_user_data_length(l_stream, data->src_size);
+ opj_stream_set_read_function(l_stream, opj_read_from_memory);
+ opj_stream_set_write_function(l_stream, opj_write_from_memory);
+ opj_stream_set_skip_function(l_stream, opj_skip_from_memory);
+ opj_stream_set_seek_function(l_stream, opj_seek_from_memory);
+ return l_stream;
}
-static void sycc_to_rgb(int offset, int upb, int y, int cb, int cr,
- int *out_r, int *out_g, int *out_b)
-{
- int r, g, b;
- cb -= offset;
- cr -= offset;
- r = y + (int)(1.402 * (float)cr);
- if(r < 0) {
- r = 0;
- } else if(r > upb) {
- r = upb;
- } *out_r = r;
- g = y - (int)(0.344 * (float)cb + 0.714 * (float)cr);
- if(g < 0) {
- g = 0;
- } else if(g > upb) {
- g = upb;
- } *out_g = g;
- b = y + (int)(1.772 * (float)cb);
- if(b < 0) {
- b = 0;
- } else if(b > upb) {
- b = upb;
- } *out_b = b;
+static void sycc_to_rgb(int offset,
+ int upb,
+ int y,
+ int cb,
+ int cr,
+ int* out_r,
+ int* out_g,
+ int* out_b) {
+ int r, g, b;
+ cb -= offset;
+ cr -= offset;
+ r = y + (int)(1.402 * (float)cr);
+ if (r < 0) {
+ r = 0;
+ } else if (r > upb) {
+ r = upb;
+ }
+ *out_r = r;
+ g = y - (int)(0.344 * (float)cb + 0.714 * (float)cr);
+ if (g < 0) {
+ g = 0;
+ } else if (g > upb) {
+ g = upb;
+ }
+ *out_g = g;
+ b = y + (int)(1.772 * (float)cb);
+ if (b < 0) {
+ b = 0;
+ } else if (b > upb) {
+ b = upb;
+ }
+ *out_b = b;
}
-static void sycc444_to_rgb(opj_image_t *img)
-{
- int *d0, *d1, *d2, *r, *g, *b;
- const int *y, *cb, *cr;
- int maxw, maxh, max, i, offset, upb;
- i = (int)img->comps[0].prec;
- offset = 1 << (i - 1);
- upb = (1 << i) - 1;
- maxw = (int)img->comps[0].w;
- maxh = (int)img->comps[0].h;
- max = maxw * maxh;
- y = img->comps[0].data;
- cb = img->comps[1].data;
- cr = img->comps[2].data;
- d0 = r = FX_Alloc(int, (size_t)max);
- d1 = g = FX_Alloc(int, (size_t)max);
- d2 = b = FX_Alloc(int, (size_t)max);
- for(i = 0; i < max; ++i) {
- sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);
- ++y;
- ++cb;
- ++cr;
- ++r;
- ++g;
- ++b;
- }
- FX_Free(img->comps[0].data);
- img->comps[0].data = d0;
- FX_Free(img->comps[1].data);
- img->comps[1].data = d1;
- FX_Free(img->comps[2].data);
- img->comps[2].data = d2;
+static void sycc444_to_rgb(opj_image_t* img) {
+ int *d0, *d1, *d2, *r, *g, *b;
+ const int *y, *cb, *cr;
+ int maxw, maxh, max, i, offset, upb;
+ i = (int)img->comps[0].prec;
+ offset = 1 << (i - 1);
+ upb = (1 << i) - 1;
+ maxw = (int)img->comps[0].w;
+ maxh = (int)img->comps[0].h;
+ max = maxw * maxh;
+ y = img->comps[0].data;
+ cb = img->comps[1].data;
+ cr = img->comps[2].data;
+ d0 = r = FX_Alloc(int, (size_t)max);
+ d1 = g = FX_Alloc(int, (size_t)max);
+ d2 = b = FX_Alloc(int, (size_t)max);
+ for (i = 0; i < max; ++i) {
+ sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);
+ ++y;
+ ++cb;
+ ++cr;
+ ++r;
+ ++g;
+ ++b;
+ }
+ FX_Free(img->comps[0].data);
+ img->comps[0].data = d0;
+ FX_Free(img->comps[1].data);
+ img->comps[1].data = d1;
+ FX_Free(img->comps[2].data);
+ img->comps[2].data = d2;
}
-static void sycc422_to_rgb(opj_image_t *img)
-{
- int *d0, *d1, *d2, *r, *g, *b;
- const int *y, *cb, *cr;
- int maxw, maxh, max, offset, upb;
- int i, j;
- i = (int)img->comps[0].prec;
- offset = 1 << (i - 1);
- upb = (1 << i) - 1;
- maxw = (int)img->comps[0].w;
- maxh = (int)img->comps[0].h;
- max = maxw * maxh;
- y = img->comps[0].data;
- cb = img->comps[1].data;
- cr = img->comps[2].data;
- d0 = r = FX_Alloc(int, (size_t)max);
- d1 = g = FX_Alloc(int, (size_t)max);
- d2 = b = FX_Alloc(int, (size_t)max);
- for(i = 0; i < maxh; ++i)
- {
- for (j = 0; (OPJ_UINT32)j < (maxw & ~(OPJ_UINT32)1); j += 2)
- {
- sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);
- ++y; ++r; ++g; ++b;
- sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);
- ++y; ++r; ++g; ++b; ++cb; ++cr;
- }
- if (j < maxw)
- {
- sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);
- ++y; ++r; ++g; ++b; ++cb; ++cr;
- }
- }
- FX_Free(img->comps[0].data);
- img->comps[0].data = d0;
- FX_Free(img->comps[1].data);
- img->comps[1].data = d1;
- FX_Free(img->comps[2].data);
- img->comps[2].data = d2;
- img->comps[1].w = maxw;
- img->comps[1].h = maxh;
- img->comps[2].w = maxw;
- img->comps[2].h = maxh;
- img->comps[1].w = (OPJ_UINT32)maxw;
- img->comps[1].h = (OPJ_UINT32)maxh;
- img->comps[2].w = (OPJ_UINT32)maxw;
- img->comps[2].h = (OPJ_UINT32)maxh;
- img->comps[1].dx = img->comps[0].dx;
- img->comps[2].dx = img->comps[0].dx;
- img->comps[1].dy = img->comps[0].dy;
- img->comps[2].dy = img->comps[0].dy;
+static void sycc422_to_rgb(opj_image_t* img) {
+ int *d0, *d1, *d2, *r, *g, *b;
+ const int *y, *cb, *cr;
+ int maxw, maxh, max, offset, upb;
+ int i, j;
+ i = (int)img->comps[0].prec;
+ offset = 1 << (i - 1);
+ upb = (1 << i) - 1;
+ maxw = (int)img->comps[0].w;
+ maxh = (int)img->comps[0].h;
+ max = maxw * maxh;
+ y = img->comps[0].data;
+ cb = img->comps[1].data;
+ cr = img->comps[2].data;
+ d0 = r = FX_Alloc(int, (size_t)max);
+ d1 = g = FX_Alloc(int, (size_t)max);
+ d2 = b = FX_Alloc(int, (size_t)max);
+ for (i = 0; i < maxh; ++i) {
+ for (j = 0; (OPJ_UINT32)j < (maxw & ~(OPJ_UINT32)1); j += 2) {
+ sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);
+ ++y;
+ ++r;
+ ++g;
+ ++b;
+ sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);
+ ++y;
+ ++r;
+ ++g;
+ ++b;
+ ++cb;
+ ++cr;
+ }
+ if (j < maxw) {
+ sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);
+ ++y;
+ ++r;
+ ++g;
+ ++b;
+ ++cb;
+ ++cr;
+ }
+ }
+ FX_Free(img->comps[0].data);
+ img->comps[0].data = d0;
+ FX_Free(img->comps[1].data);
+ img->comps[1].data = d1;
+ FX_Free(img->comps[2].data);
+ img->comps[2].data = d2;
+ img->comps[1].w = maxw;
+ img->comps[1].h = maxh;
+ img->comps[2].w = maxw;
+ img->comps[2].h = maxh;
+ img->comps[1].w = (OPJ_UINT32)maxw;
+ img->comps[1].h = (OPJ_UINT32)maxh;
+ img->comps[2].w = (OPJ_UINT32)maxw;
+ img->comps[2].h = (OPJ_UINT32)maxh;
+ img->comps[1].dx = img->comps[0].dx;
+ img->comps[2].dx = img->comps[0].dx;
+ img->comps[1].dy = img->comps[0].dy;
+ img->comps[2].dy = img->comps[0].dy;
}
-static void sycc420_to_rgb(opj_image_t *img)
-{
- int *d0, *d1, *d2, *r, *g, *b, *nr, *ng, *nb;
- const int *y, *cb, *cr, *ny;
- int maxw, maxh, max, offset, upb;
- int i, j;
- i = (int)img->comps[0].prec;
- offset = 1 << (i - 1);
- upb = (1 << i) - 1;
- maxw = (int)img->comps[0].w;
- maxh = (int)img->comps[0].h;
- max = maxw * maxh;
- y = img->comps[0].data;
- cb = img->comps[1].data;
- cr = img->comps[2].data;
- d0 = r = FX_Alloc(int, (size_t)max);
- d1 = g = FX_Alloc(int, (size_t)max);
- d2 = b = FX_Alloc(int, (size_t)max);
- for (i = 0; (OPJ_UINT32)i < (maxh & ~(OPJ_UINT32)1); i += 2)
- {
- ny = y + maxw;
- nr = r + maxw;
- ng = g + maxw;
- nb = b + maxw;
- for (j = 0; (OPJ_UINT32)j < (maxw & ~(OPJ_UINT32)1); j += 2)
- {
- sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);
- ++y; ++r; ++g; ++b;
- sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);
- ++y; ++r; ++g; ++b;
- sycc_to_rgb(offset, upb, *ny, *cb, *cr, nr, ng, nb);
- ++ny; ++nr; ++ng; ++nb;
- sycc_to_rgb(offset, upb, *ny, *cb, *cr, nr, ng, nb);
- ++ny; ++nr; ++ng; ++nb; ++cb; ++cr;
- }
- if (j < maxw)
- {
- sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);
- ++y; ++r; ++g; ++b;
- sycc_to_rgb(offset, upb, *ny, *cb, *cr, nr, ng, nb);
- ++ny; ++nr; ++ng; ++nb; ++cb; ++cr;
- }
- y += maxw; r += maxw; g += maxw; b += maxw;
- }
- if (i < maxh)
- {
- for (j = 0; (OPJ_UINT32)j < (maxw & ~(OPJ_UINT32)1); j += 2)
- {
- sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);
- ++y; ++r; ++g; ++b;
- sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);
- ++y; ++r; ++g; ++b; ++cb; ++cr;
- }
- if (j < maxw)
- {
- sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);
- }
- }
+static void sycc420_to_rgb(opj_image_t* img) {
+ int *d0, *d1, *d2, *r, *g, *b, *nr, *ng, *nb;
+ const int *y, *cb, *cr, *ny;
+ int maxw, maxh, max, offset, upb;
+ int i, j;
+ i = (int)img->comps[0].prec;
+ offset = 1 << (i - 1);
+ upb = (1 << i) - 1;
+ maxw = (int)img->comps[0].w;
+ maxh = (int)img->comps[0].h;
+ max = maxw * maxh;
+ y = img->comps[0].data;
+ cb = img->comps[1].data;
+ cr = img->comps[2].data;
+ d0 = r = FX_Alloc(int, (size_t)max);
+ d1 = g = FX_Alloc(int, (size_t)max);
+ d2 = b = FX_Alloc(int, (size_t)max);
+ for (i = 0; (OPJ_UINT32)i < (maxh & ~(OPJ_UINT32)1); i += 2) {
+ ny = y + maxw;
+ nr = r + maxw;
+ ng = g + maxw;
+ nb = b + maxw;
+ for (j = 0; (OPJ_UINT32)j < (maxw & ~(OPJ_UINT32)1); j += 2) {
+ sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);
+ ++y;
+ ++r;
+ ++g;
+ ++b;
+ sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);
+ ++y;
+ ++r;
+ ++g;
+ ++b;
+ sycc_to_rgb(offset, upb, *ny, *cb, *cr, nr, ng, nb);
+ ++ny;
+ ++nr;
+ ++ng;
+ ++nb;
+ sycc_to_rgb(offset, upb, *ny, *cb, *cr, nr, ng, nb);
+ ++ny;
+ ++nr;
+ ++ng;
+ ++nb;
+ ++cb;
+ ++cr;
+ }
+ if (j < maxw) {
+ sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);
+ ++y;
+ ++r;
+ ++g;
+ ++b;
+ sycc_to_rgb(offset, upb, *ny, *cb, *cr, nr, ng, nb);
+ ++ny;
+ ++nr;
+ ++ng;
+ ++nb;
+ ++cb;
+ ++cr;
+ }
+ y += maxw;
+ r += maxw;
+ g += maxw;
+ b += maxw;
+ }
+ if (i < maxh) {
+ for (j = 0; (OPJ_UINT32)j < (maxw & ~(OPJ_UINT32)1); j += 2) {
+ sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);
+ ++y;
+ ++r;
+ ++g;
+ ++b;
+ sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);
+ ++y;
+ ++r;
+ ++g;
+ ++b;
+ ++cb;
+ ++cr;
+ }
+ if (j < maxw) {
+ sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);
+ }
+ }
- FX_Free(img->comps[0].data);
- img->comps[0].data = d0;
- FX_Free(img->comps[1].data);
- img->comps[1].data = d1;
- FX_Free(img->comps[2].data);
- img->comps[2].data = d2;
- img->comps[1].w = maxw;
- img->comps[1].h = maxh;
- img->comps[2].w = maxw;
- img->comps[2].h = maxh;
- img->comps[1].w = (OPJ_UINT32)maxw;
- img->comps[1].h = (OPJ_UINT32)maxh;
- img->comps[2].w = (OPJ_UINT32)maxw;
- img->comps[2].h = (OPJ_UINT32)maxh;
- img->comps[1].dx = img->comps[0].dx;
- img->comps[2].dx = img->comps[0].dx;
- img->comps[1].dy = img->comps[0].dy;
- img->comps[2].dy = img->comps[0].dy;
+ FX_Free(img->comps[0].data);
+ img->comps[0].data = d0;
+ FX_Free(img->comps[1].data);
+ img->comps[1].data = d1;
+ FX_Free(img->comps[2].data);
+ img->comps[2].data = d2;
+ img->comps[1].w = maxw;
+ img->comps[1].h = maxh;
+ img->comps[2].w = maxw;
+ img->comps[2].h = maxh;
+ img->comps[1].w = (OPJ_UINT32)maxw;
+ img->comps[1].h = (OPJ_UINT32)maxh;
+ img->comps[2].w = (OPJ_UINT32)maxw;
+ img->comps[2].h = (OPJ_UINT32)maxh;
+ img->comps[1].dx = img->comps[0].dx;
+ img->comps[2].dx = img->comps[0].dx;
+ img->comps[1].dy = img->comps[0].dy;
+ img->comps[2].dy = img->comps[0].dy;
}
-void color_sycc_to_rgb(opj_image_t *img)
-{
- if(img->numcomps < 3) {
- img->color_space = OPJ_CLRSPC_GRAY;
- return;
- }
- if((img->comps[0].dx == 1)
- && (img->comps[1].dx == 2)
- && (img->comps[2].dx == 2)
- && (img->comps[0].dy == 1)
- && (img->comps[1].dy == 2)
- && (img->comps[2].dy == 2)) {
- sycc420_to_rgb(img);
- } else if((img->comps[0].dx == 1)
- && (img->comps[1].dx == 2)
- && (img->comps[2].dx == 2)
- && (img->comps[0].dy == 1)
- && (img->comps[1].dy == 1)
- && (img->comps[2].dy == 1)) {
- sycc422_to_rgb(img);
- } else if((img->comps[0].dx == 1)
- && (img->comps[1].dx == 1)
- && (img->comps[2].dx == 1)
- && (img->comps[0].dy == 1)
- && (img->comps[1].dy == 1)
- && (img->comps[2].dy == 1)) {
- sycc444_to_rgb(img);
- } else {
- return;
- }
- img->color_space = OPJ_CLRSPC_SRGB;
+void color_sycc_to_rgb(opj_image_t* img) {
+ if (img->numcomps < 3) {
+ img->color_space = OPJ_CLRSPC_GRAY;
+ return;
+ }
+ if ((img->comps[0].dx == 1) && (img->comps[1].dx == 2) &&
+ (img->comps[2].dx == 2) && (img->comps[0].dy == 1) &&
+ (img->comps[1].dy == 2) && (img->comps[2].dy == 2)) {
+ sycc420_to_rgb(img);
+ } else if ((img->comps[0].dx == 1) && (img->comps[1].dx == 2) &&
+ (img->comps[2].dx == 2) && (img->comps[0].dy == 1) &&
+ (img->comps[1].dy == 1) && (img->comps[2].dy == 1)) {
+ sycc422_to_rgb(img);
+ } else if ((img->comps[0].dx == 1) && (img->comps[1].dx == 1) &&
+ (img->comps[2].dx == 1) && (img->comps[0].dy == 1) &&
+ (img->comps[1].dy == 1) && (img->comps[2].dy == 1)) {
+ sycc444_to_rgb(img);
+ } else {
+ return;
+ }
+ img->color_space = OPJ_CLRSPC_SRGB;
}
-void color_apply_icc_profile(opj_image_t *image)
-{
- cmsHPROFILE out_prof;
- cmsUInt32Number in_type;
- cmsUInt32Number out_type;
- int *r;
- int *g;
- int *b;
- int max;
- cmsHPROFILE in_prof =
- cmsOpenProfileFromMem(image->icc_profile_buf, image->icc_profile_len);
- if(in_prof == NULL) {
- return;
- }
- cmsColorSpaceSignature out_space = cmsGetColorSpace(in_prof);
- cmsUInt32Number intent = cmsGetHeaderRenderingIntent(in_prof);
- int max_w = (int)image->comps[0].w;
- int max_h = (int)image->comps[0].h;
- int prec = (int)image->comps[0].prec;
- OPJ_COLOR_SPACE oldspace = image->color_space;
- if(out_space == cmsSigRgbData) {
- if( prec <= 8 ) {
- in_type = TYPE_RGB_8;
- out_type = TYPE_RGB_8;
- } else {
- in_type = TYPE_RGB_16;
- out_type = TYPE_RGB_16;
- }
- out_prof = cmsCreate_sRGBProfile();
- image->color_space = OPJ_CLRSPC_SRGB;
- } else if(out_space == cmsSigGrayData) {
- if( prec <= 8 ) {
- in_type = TYPE_GRAY_8;
- out_type = TYPE_RGB_8;
- } else {
- in_type = TYPE_GRAY_16;
- out_type = TYPE_RGB_16;
- }
- out_prof = cmsCreate_sRGBProfile();
- image->color_space = OPJ_CLRSPC_SRGB;
- } else if(out_space == cmsSigYCbCrData) {
- in_type = TYPE_YCbCr_16;
- out_type = TYPE_RGB_16;
- out_prof = cmsCreate_sRGBProfile();
- image->color_space = OPJ_CLRSPC_SRGB;
+void color_apply_icc_profile(opj_image_t* image) {
+ cmsHPROFILE out_prof;
+ cmsUInt32Number in_type;
+ cmsUInt32Number out_type;
+ int* r;
+ int* g;
+ int* b;
+ int max;
+ cmsHPROFILE in_prof =
+ cmsOpenProfileFromMem(image->icc_profile_buf, image->icc_profile_len);
+ if (in_prof == NULL) {
+ return;
+ }
+ cmsColorSpaceSignature out_space = cmsGetColorSpace(in_prof);
+ cmsUInt32Number intent = cmsGetHeaderRenderingIntent(in_prof);
+ int max_w = (int)image->comps[0].w;
+ int max_h = (int)image->comps[0].h;
+ int prec = (int)image->comps[0].prec;
+ OPJ_COLOR_SPACE oldspace = image->color_space;
+ if (out_space == cmsSigRgbData) {
+ if (prec <= 8) {
+ in_type = TYPE_RGB_8;
+ out_type = TYPE_RGB_8;
} else {
- return;
- }
- cmsHTRANSFORM transform =
- cmsCreateTransform(in_prof, in_type, out_prof, out_type, intent, 0);
- cmsCloseProfile(in_prof);
- cmsCloseProfile(out_prof);
- if(transform == NULL) {
- image->color_space = oldspace;
- return;
- }
- if(image->numcomps > 2) {
- if( prec <= 8 ) {
- unsigned char *inbuf, *outbuf, *in, *out;
- max = max_w * max_h;
- cmsUInt32Number nr_samples = max * 3 * sizeof(unsigned char);
- in = inbuf = FX_Alloc(unsigned char, nr_samples);
- out = outbuf = FX_Alloc(unsigned char, nr_samples);
- r = image->comps[0].data;
- g = image->comps[1].data;
- b = image->comps[2].data;
- for(int i = 0; i < max; ++i) {
- *in++ = (unsigned char) * r++;
- *in++ = (unsigned char) * g++;
- *in++ = (unsigned char) * b++;
- }
- cmsDoTransform(transform, inbuf, outbuf, (cmsUInt32Number)max);
- r = image->comps[0].data;
- g = image->comps[1].data;
- b = image->comps[2].data;
- for(int i = 0; i < max; ++i) {
- *r++ = (int) * out++;
- *g++ = (int) * out++;
- *b++ = (int) * out++;
- }
- FX_Free(inbuf);
- FX_Free(outbuf);
- } else {
- unsigned short *inbuf, *outbuf, *in, *out;
- max = max_w * max_h;
- cmsUInt32Number nr_samples = max * 3 * sizeof(unsigned short);
- in = inbuf = FX_Alloc(unsigned short, nr_samples);
- out = outbuf = FX_Alloc(unsigned short, nr_samples);
- r = image->comps[0].data;
- g = image->comps[1].data;
- b = image->comps[2].data;
- for(int i = 0; i < max; ++i) {
- *in++ = (unsigned short) * r++;
- *in++ = (unsigned short) * g++;
- *in++ = (unsigned short) * b++;
- }
- cmsDoTransform(transform, inbuf, outbuf, (cmsUInt32Number)max);
- r = image->comps[0].data;
- g = image->comps[1].data;
- b = image->comps[2].data;
- for(int i = 0; i < max; ++i) {
- *r++ = (int) * out++;
- *g++ = (int) * out++;
- *b++ = (int) * out++;
- }
- FX_Free(inbuf);
- FX_Free(outbuf);
- }
+ in_type = TYPE_RGB_16;
+ out_type = TYPE_RGB_16;
+ }
+ out_prof = cmsCreate_sRGBProfile();
+ image->color_space = OPJ_CLRSPC_SRGB;
+ } else if (out_space == cmsSigGrayData) {
+ if (prec <= 8) {
+ in_type = TYPE_GRAY_8;
+ out_type = TYPE_RGB_8;
} else {
- unsigned char *in, *inbuf, *out, *outbuf;
- max = max_w * max_h;
- cmsUInt32Number nr_samples =
- (cmsUInt32Number)max * 3 * sizeof(unsigned char);
- in = inbuf = FX_Alloc(unsigned char, nr_samples);
- out = outbuf = FX_Alloc(unsigned char, nr_samples);
- image->comps = (opj_image_comp_t*)
- realloc(image->comps, (image->numcomps + 2) * sizeof(opj_image_comp_t));
- if(image->numcomps == 2) {
- image->comps[3] = image->comps[1];
- }
- image->comps[1] = image->comps[0];
- image->comps[2] = image->comps[0];
- image->comps[1].data = FX_Alloc(int, (size_t)max);
- FXSYS_memset(image->comps[1].data, 0, sizeof(int) * (size_t)max);
- image->comps[2].data = FX_Alloc(int, (size_t)max);
- FXSYS_memset(image->comps[2].data, 0, sizeof(int) * (size_t)max);
- image->numcomps += 2;
- r = image->comps[0].data;
- for(int i = 0; i < max; ++i) {
- *in++ = (unsigned char) * r++;
- }
- cmsDoTransform(transform, inbuf, outbuf, (cmsUInt32Number)max);
- r = image->comps[0].data;
- g = image->comps[1].data;
- b = image->comps[2].data;
- for(int i = 0; i < max; ++i) {
- *r++ = (int) * out++;
- *g++ = (int) * out++;
- *b++ = (int) * out++;
- }
- FX_Free(inbuf);
- FX_Free(outbuf);
- }
- cmsDeleteTransform(transform);
+ in_type = TYPE_GRAY_16;
+ out_type = TYPE_RGB_16;
+ }
+ out_prof = cmsCreate_sRGBProfile();
+ image->color_space = OPJ_CLRSPC_SRGB;
+ } else if (out_space == cmsSigYCbCrData) {
+ in_type = TYPE_YCbCr_16;
+ out_type = TYPE_RGB_16;
+ out_prof = cmsCreate_sRGBProfile();
+ image->color_space = OPJ_CLRSPC_SRGB;
+ } else {
+ return;
+ }
+ cmsHTRANSFORM transform =
+ cmsCreateTransform(in_prof, in_type, out_prof, out_type, intent, 0);
+ cmsCloseProfile(in_prof);
+ cmsCloseProfile(out_prof);
+ if (transform == NULL) {
+ image->color_space = oldspace;
+ return;
+ }
+ if (image->numcomps > 2) {
+ if (prec <= 8) {
+ unsigned char *inbuf, *outbuf, *in, *out;
+ max = max_w * max_h;
+ cmsUInt32Number nr_samples = max * 3 * sizeof(unsigned char);
+ in = inbuf = FX_Alloc(unsigned char, nr_samples);
+ out = outbuf = FX_Alloc(unsigned char, nr_samples);
+ r = image->comps[0].data;
+ g = image->comps[1].data;
+ b = image->comps[2].data;
+ for (int i = 0; i < max; ++i) {
+ *in++ = (unsigned char)*r++;
+ *in++ = (unsigned char)*g++;
+ *in++ = (unsigned char)*b++;
+ }
+ cmsDoTransform(transform, inbuf, outbuf, (cmsUInt32Number)max);
+ r = image->comps[0].data;
+ g = image->comps[1].data;
+ b = image->comps[2].data;
+ for (int i = 0; i < max; ++i) {
+ *r++ = (int)*out++;
+ *g++ = (int)*out++;
+ *b++ = (int)*out++;
+ }
+ FX_Free(inbuf);
+ FX_Free(outbuf);
+ } else {
+ unsigned short *inbuf, *outbuf, *in, *out;
+ max = max_w * max_h;
+ cmsUInt32Number nr_samples = max * 3 * sizeof(unsigned short);
+ in = inbuf = FX_Alloc(unsigned short, nr_samples);
+ out = outbuf = FX_Alloc(unsigned short, nr_samples);
+ r = image->comps[0].data;
+ g = image->comps[1].data;
+ b = image->comps[2].data;
+ for (int i = 0; i < max; ++i) {
+ *in++ = (unsigned short)*r++;
+ *in++ = (unsigned short)*g++;
+ *in++ = (unsigned short)*b++;
+ }
+ cmsDoTransform(transform, inbuf, outbuf, (cmsUInt32Number)max);
+ r = image->comps[0].data;
+ g = image->comps[1].data;
+ b = image->comps[2].data;
+ for (int i = 0; i < max; ++i) {
+ *r++ = (int)*out++;
+ *g++ = (int)*out++;
+ *b++ = (int)*out++;
+ }
+ FX_Free(inbuf);
+ FX_Free(outbuf);
+ }
+ } else {
+ unsigned char *in, *inbuf, *out, *outbuf;
+ max = max_w * max_h;
+ cmsUInt32Number nr_samples =
+ (cmsUInt32Number)max * 3 * sizeof(unsigned char);
+ in = inbuf = FX_Alloc(unsigned char, nr_samples);
+ out = outbuf = FX_Alloc(unsigned char, nr_samples);
+ image->comps = (opj_image_comp_t*)realloc(
+ image->comps, (image->numcomps + 2) * sizeof(opj_image_comp_t));
+ if (image->numcomps == 2) {
+ image->comps[3] = image->comps[1];
+ }
+ image->comps[1] = image->comps[0];
+ image->comps[2] = image->comps[0];
+ image->comps[1].data = FX_Alloc(int, (size_t)max);
+ FXSYS_memset(image->comps[1].data, 0, sizeof(int) * (size_t)max);
+ image->comps[2].data = FX_Alloc(int, (size_t)max);
+ FXSYS_memset(image->comps[2].data, 0, sizeof(int) * (size_t)max);
+ image->numcomps += 2;
+ r = image->comps[0].data;
+ for (int i = 0; i < max; ++i) {
+ *in++ = (unsigned char)*r++;
+ }
+ cmsDoTransform(transform, inbuf, outbuf, (cmsUInt32Number)max);
+ r = image->comps[0].data;
+ g = image->comps[1].data;
+ b = image->comps[2].data;
+ for (int i = 0; i < max; ++i) {
+ *r++ = (int)*out++;
+ *g++ = (int)*out++;
+ *b++ = (int)*out++;
+ }
+ FX_Free(inbuf);
+ FX_Free(outbuf);
+ }
+ cmsDeleteTransform(transform);
}
-void color_apply_conversion(opj_image_t *image)
-{
- int *row;
- int enumcs, numcomps;
- numcomps = image->numcomps;
- if(numcomps < 3) {
- return;
- }
- row = (int*)image->icc_profile_buf;
- enumcs = row[0];
- if(enumcs == 14) {
- int *L, *a, *b, *red, *green, *blue, *src0, *src1, *src2;
- double rl, ol, ra, oa, rb, ob, prec0, prec1, prec2;
- double minL, maxL, mina, maxa, minb, maxb;
- unsigned int default_type;
- unsigned int i, max;
- cmsHPROFILE in, out;
- cmsHTRANSFORM transform;
- cmsUInt16Number RGB[3];
- cmsCIELab Lab;
- in = cmsCreateLab4Profile(NULL);
- out = cmsCreate_sRGBProfile();
- transform =
- cmsCreateTransform(in, TYPE_Lab_DBL, out, TYPE_RGB_16,
- INTENT_PERCEPTUAL, 0);
- cmsCloseProfile(in);
- cmsCloseProfile(out);
- if(transform == NULL) {
- return;
- }
- prec0 = (double)image->comps[0].prec;
- prec1 = (double)image->comps[1].prec;
- prec2 = (double)image->comps[2].prec;
- default_type = row[1];
- if(default_type == 0x44454600) {
- rl = 100;
- ra = 170;
- rb = 200;
- ol = 0;
- oa = pow(2, prec1 - 1);
- ob = pow(2, prec2 - 2) + pow(2, prec2 - 3);
- } else {
- rl = row[2];
- ra = row[4];
- rb = row[6];
- ol = row[3];
- oa = row[5];
- ob = row[7];
- }
- L = src0 = image->comps[0].data;
- a = src1 = image->comps[1].data;
- b = src2 = image->comps[2].data;
- max = image->comps[0].w * image->comps[0].h;
- red = FX_Alloc(int, max);
- image->comps[0].data = red;
- green = FX_Alloc(int, max);
- image->comps[1].data = green;
- blue = FX_Alloc(int, max);
- image->comps[2].data = blue;
- minL = -(rl * ol) / (pow(2, prec0) - 1);
- maxL = minL + rl;
- mina = -(ra * oa) / (pow(2, prec1) - 1);
- maxa = mina + ra;
- minb = -(rb * ob) / (pow(2, prec2) - 1);
- maxb = minb + rb;
- for(i = 0; i < max; ++i) {
- Lab.L = minL + (double)(*L) * (maxL - minL) / (pow(2, prec0) - 1);
- ++L;
- Lab.a = mina + (double)(*a) * (maxa - mina) / (pow(2, prec1) - 1);
- ++a;
- Lab.b = minb + (double)(*b) * (maxb - minb) / (pow(2, prec2) - 1);
- ++b;
- cmsDoTransform(transform, &Lab, RGB, 1);
- *red++ = RGB[0];
- *green++ = RGB[1];
- *blue++ = RGB[2];
- }
- cmsDeleteTransform(transform);
- FX_Free(src0);
- FX_Free(src1);
- FX_Free(src2);
- image->color_space = OPJ_CLRSPC_SRGB;
- image->comps[0].prec = 16;
- image->comps[1].prec = 16;
- image->comps[2].prec = 16;
- return;
+void color_apply_conversion(opj_image_t* image) {
+ int* row;
+ int enumcs, numcomps;
+ numcomps = image->numcomps;
+ if (numcomps < 3) {
+ return;
+ }
+ row = (int*)image->icc_profile_buf;
+ enumcs = row[0];
+ if (enumcs == 14) {
+ int *L, *a, *b, *red, *green, *blue, *src0, *src1, *src2;
+ double rl, ol, ra, oa, rb, ob, prec0, prec1, prec2;
+ double minL, maxL, mina, maxa, minb, maxb;
+ unsigned int default_type;
+ unsigned int i, max;
+ cmsHPROFILE in, out;
+ cmsHTRANSFORM transform;
+ cmsUInt16Number RGB[3];
+ cmsCIELab Lab;
+ in = cmsCreateLab4Profile(NULL);
+ out = cmsCreate_sRGBProfile();
+ transform = cmsCreateTransform(in, TYPE_Lab_DBL, out, TYPE_RGB_16,
+ INTENT_PERCEPTUAL, 0);
+ cmsCloseProfile(in);
+ cmsCloseProfile(out);
+ if (transform == NULL) {
+ return;
+ }
+ prec0 = (double)image->comps[0].prec;
+ prec1 = (double)image->comps[1].prec;
+ prec2 = (double)image->comps[2].prec;
+ default_type = row[1];
+ if (default_type == 0x44454600) {
+ rl = 100;
+ ra = 170;
+ rb = 200;
+ ol = 0;
+ oa = pow(2, prec1 - 1);
+ ob = pow(2, prec2 - 2) + pow(2, prec2 - 3);
+ } else {
+ rl = row[2];
+ ra = row[4];
+ rb = row[6];
+ ol = row[3];
+ oa = row[5];
+ ob = row[7];
+ }
+ L = src0 = image->comps[0].data;
+ a = src1 = image->comps[1].data;
+ b = src2 = image->comps[2].data;
+ max = image->comps[0].w * image->comps[0].h;
+ red = FX_Alloc(int, max);
+ image->comps[0].data = red;
+ green = FX_Alloc(int, max);
+ image->comps[1].data = green;
+ blue = FX_Alloc(int, max);
+ image->comps[2].data = blue;
+ minL = -(rl * ol) / (pow(2, prec0) - 1);
+ maxL = minL + rl;
+ mina = -(ra * oa) / (pow(2, prec1) - 1);
+ maxa = mina + ra;
+ minb = -(rb * ob) / (pow(2, prec2) - 1);
+ maxb = minb + rb;
+ for (i = 0; i < max; ++i) {
+ Lab.L = minL + (double)(*L) * (maxL - minL) / (pow(2, prec0) - 1);
+ ++L;
+ Lab.a = mina + (double)(*a) * (maxa - mina) / (pow(2, prec1) - 1);
+ ++a;
+ Lab.b = minb + (double)(*b) * (maxb - minb) / (pow(2, prec2) - 1);
+ ++b;
+ cmsDoTransform(transform, &Lab, RGB, 1);
+ *red++ = RGB[0];
+ *green++ = RGB[1];
+ *blue++ = RGB[2];
}
+ cmsDeleteTransform(transform);
+ FX_Free(src0);
+ FX_Free(src1);
+ FX_Free(src2);
+ image->color_space = OPJ_CLRSPC_SRGB;
+ image->comps[0].prec = 16;
+ image->comps[1].prec = 16;
+ image->comps[2].prec = 16;
+ return;
+ }
}
-class CJPX_Decoder
-{
-public:
- CJPX_Decoder();
- ~CJPX_Decoder();
- FX_BOOL Init(const unsigned char* src_data, int src_size);
- void GetInfo(FX_DWORD& width, FX_DWORD& height, FX_DWORD& codestream_nComps, FX_DWORD& output_nComps);
- FX_BOOL Decode(uint8_t* dest_buf, int pitch, FX_BOOL bTranslateColor, uint8_t* offsets);
- const uint8_t* m_SrcData;
- int m_SrcSize;
- opj_image_t *image;
- opj_codec_t* l_codec;
- opj_stream_t *l_stream;
- FX_BOOL m_useColorSpace;
+class CJPX_Decoder {
+ public:
+ CJPX_Decoder();
+ ~CJPX_Decoder();
+ FX_BOOL Init(const unsigned char* src_data, int src_size);
+ void GetInfo(FX_DWORD& width,
+ FX_DWORD& height,
+ FX_DWORD& codestream_nComps,
+ FX_DWORD& output_nComps);
+ FX_BOOL Decode(uint8_t* dest_buf,
+ int pitch,
+ FX_BOOL bTranslateColor,
+ uint8_t* offsets);
+ const uint8_t* m_SrcData;
+ int m_SrcSize;
+ opj_image_t* image;
+ opj_codec_t* l_codec;
+ opj_stream_t* l_stream;
+ FX_BOOL m_useColorSpace;
};
-CJPX_Decoder::CJPX_Decoder(): image(NULL), l_codec(NULL), l_stream(NULL), m_useColorSpace(FALSE)
-{
-}
-CJPX_Decoder::~CJPX_Decoder()
-{
- if(l_codec) {
- opj_destroy_codec(l_codec);
- }
- if(l_stream) {
- opj_stream_destroy(l_stream);
- }
- if(image) {
- opj_image_destroy(image);
- }
+CJPX_Decoder::CJPX_Decoder()
+ : image(NULL), l_codec(NULL), l_stream(NULL), m_useColorSpace(FALSE) {}
+CJPX_Decoder::~CJPX_Decoder() {
+ if (l_codec) {
+ opj_destroy_codec(l_codec);
+ }
+ if (l_stream) {
+ opj_stream_destroy(l_stream);
+ }
+ if (image) {
+ opj_image_destroy(image);
+ }
}
-FX_BOOL CJPX_Decoder::Init(const unsigned char* src_data, int src_size)
-{
- static const unsigned char szJP2Header[] = { 0x00, 0x00, 0x00, 0x0c, 0x6a, 0x50, 0x20, 0x20, 0x0d, 0x0a, 0x87, 0x0a };
- if (!src_data || src_size < sizeof(szJP2Header)) {
- return FALSE;
- }
+FX_BOOL CJPX_Decoder::Init(const unsigned char* src_data, int src_size) {
+ static const unsigned char szJP2Header[] = {
+ 0x00, 0x00, 0x00, 0x0c, 0x6a, 0x50, 0x20, 0x20, 0x0d, 0x0a, 0x87, 0x0a};
+ if (!src_data || src_size < sizeof(szJP2Header)) {
+ return FALSE;
+ }
+ image = NULL;
+ m_SrcData = src_data;
+ m_SrcSize = src_size;
+ DecodeData srcData(const_cast<unsigned char*>(src_data), src_size);
+ l_stream = fx_opj_stream_create_memory_stream(&srcData,
+ OPJ_J2K_STREAM_CHUNK_SIZE, 1);
+ if (l_stream == NULL) {
+ return FALSE;
+ }
+ opj_dparameters_t parameters;
+ opj_set_default_decoder_parameters(&parameters);
+ parameters.decod_format = 0;
+ parameters.cod_format = 3;
+ if (FXSYS_memcmp(m_SrcData, szJP2Header, sizeof(szJP2Header)) == 0) {
+ l_codec = opj_create_decompress(OPJ_CODEC_JP2);
+ parameters.decod_format = 1;
+ } else {
+ l_codec = opj_create_decompress(OPJ_CODEC_J2K);
+ }
+ if (!l_codec) {
+ return FALSE;
+ }
+ opj_set_info_handler(l_codec, fx_info_callback, 00);
+ opj_set_warning_handler(l_codec, fx_warning_callback, 00);
+ opj_set_error_handler(l_codec, fx_error_callback, 00);
+ if (!opj_setup_decoder(l_codec, &parameters)) {
+ return FALSE;
+ }
+ if (!opj_read_header(l_stream, l_codec, &image)) {
image = NULL;
- m_SrcData = src_data;
- m_SrcSize = src_size;
- DecodeData srcData(const_cast<unsigned char*>(src_data), src_size);
- l_stream = fx_opj_stream_create_memory_stream(&srcData, OPJ_J2K_STREAM_CHUNK_SIZE, 1);
- if (l_stream == NULL) {
- return FALSE;
- }
- opj_dparameters_t parameters;
- opj_set_default_decoder_parameters(&parameters);
- parameters.decod_format = 0;
- parameters.cod_format = 3;
- if(FXSYS_memcmp(m_SrcData, szJP2Header, sizeof(szJP2Header)) == 0) {
- l_codec = opj_create_decompress(OPJ_CODEC_JP2);
- parameters.decod_format = 1;
- } else {
- l_codec = opj_create_decompress(OPJ_CODEC_J2K);
- }
- if(!l_codec) {
- return FALSE;
- }
- opj_set_info_handler(l_codec, fx_info_callback, 00);
- opj_set_warning_handler(l_codec, fx_warning_callback, 00);
- opj_set_error_handler(l_codec, fx_error_callback, 00);
- if ( !opj_setup_decoder(l_codec, &parameters) ) {
- return FALSE;
- }
- if(! opj_read_header(l_stream, l_codec, &image)) {
- image = NULL;
- return FALSE;
- }
- if (!parameters.nb_tile_to_decode) {
- if (!opj_set_decode_area(l_codec, image, parameters.DA_x0,
- parameters.DA_y0, parameters.DA_x1, parameters.DA_y1)) {
- opj_image_destroy(image);
- image = NULL;
- return FALSE;
- }
- if (!(opj_decode(l_codec, l_stream, image) && opj_end_decompress(l_codec, l_stream))) {
- opj_image_destroy(image);
- image = NULL;
- return FALSE;
- }
- } else {
- if (!opj_get_decoded_tile(l_codec, l_stream, image, parameters.tile_index)) {
- return FALSE;
- }
- }
- opj_stream_destroy(l_stream);
- l_stream = NULL;
- if( image->color_space != OPJ_CLRSPC_SYCC
- && image->numcomps == 3 && image->comps[0].dx == image->comps[0].dy
- && image->comps[1].dx != 1 ) {
- image->color_space = OPJ_CLRSPC_SYCC;
- } else if (image->numcomps <= 2) {
- image->color_space = OPJ_CLRSPC_GRAY;
- }
- if(image->color_space == OPJ_CLRSPC_SYCC) {
- color_sycc_to_rgb(image);
- }
- if(image->icc_profile_buf) {
- FX_Free(image->icc_profile_buf);
- image->icc_profile_buf = NULL;
- image->icc_profile_len = 0;
- }
- if(!image) {
- return FALSE;
- }
- return TRUE;
+ return FALSE;
+ }
+ if (!parameters.nb_tile_to_decode) {
+ if (!opj_set_decode_area(l_codec, image, parameters.DA_x0, parameters.DA_y0,
+ parameters.DA_x1, parameters.DA_y1)) {
+ opj_image_destroy(image);
+ image = NULL;
+ return FALSE;
+ }
+ if (!(opj_decode(l_codec, l_stream, image) &&
+ opj_end_decompress(l_codec, l_stream))) {
+ opj_image_destroy(image);
+ image = NULL;
+ return FALSE;
+ }
+ } else {
+ if (!opj_get_decoded_tile(l_codec, l_stream, image,
+ parameters.tile_index)) {
+ return FALSE;
+ }
+ }
+ opj_stream_destroy(l_stream);
+ l_stream = NULL;
+ if (image->color_space != OPJ_CLRSPC_SYCC && image->numcomps == 3 &&
+ image->comps[0].dx == image->comps[0].dy && image->comps[1].dx != 1) {
+ image->color_space = OPJ_CLRSPC_SYCC;
+ } else if (image->numcomps <= 2) {
+ image->color_space = OPJ_CLRSPC_GRAY;
+ }
+ if (image->color_space == OPJ_CLRSPC_SYCC) {
+ color_sycc_to_rgb(image);
+ }
+ if (image->icc_profile_buf) {
+ FX_Free(image->icc_profile_buf);
+ image->icc_profile_buf = NULL;
+ image->icc_profile_len = 0;
+ }
+ if (!image) {
+ return FALSE;
+ }
+ return TRUE;
}
-void CJPX_Decoder::GetInfo(FX_DWORD& width, FX_DWORD& height, FX_DWORD& codestream_nComps, FX_DWORD& output_nComps)
-{
- width = (FX_DWORD)image->x1;
- height = (FX_DWORD)image->y1;
- output_nComps = codestream_nComps = (FX_DWORD)image->numcomps;
+void CJPX_Decoder::GetInfo(FX_DWORD& width,
+ FX_DWORD& height,
+ FX_DWORD& codestream_nComps,
+ FX_DWORD& output_nComps) {
+ width = (FX_DWORD)image->x1;
+ height = (FX_DWORD)image->y1;
+ output_nComps = codestream_nComps = (FX_DWORD)image->numcomps;
}
-FX_BOOL CJPX_Decoder::Decode(uint8_t* dest_buf, int pitch, FX_BOOL bTranslateColor, uint8_t* offsets)
-{
- int i, wid, hei, row, col, channel, src;
- uint8_t* pChannel;
- uint8_t* pScanline;
- uint8_t* pPixel;
+FX_BOOL CJPX_Decoder::Decode(uint8_t* dest_buf,
+ int pitch,
+ FX_BOOL bTranslateColor,
+ uint8_t* offsets) {
+ int i, wid, hei, row, col, channel, src;
+ uint8_t* pChannel;
+ uint8_t* pScanline;
+ uint8_t* pPixel;
- if(image->comps[0].w != image->x1 || image->comps[0].h != image->y1) {
- return FALSE;
- }
- if(pitch < (int)(image->comps[0].w * 8 * image->numcomps + 31) >> 5 << 2) {
- return FALSE;
- }
- FXSYS_memset(dest_buf, 0xff, image->y1 * pitch);
- uint8_t** channel_bufs = FX_Alloc(uint8_t*, image->numcomps);
- FX_BOOL result = FALSE;
- int* adjust_comps = FX_Alloc(int, image->numcomps);
- for (i = 0; i < (int)image->numcomps; i ++) {
- channel_bufs[i] = dest_buf + offsets[i];
- adjust_comps[i] = image->comps[i].prec - 8;
- if(i > 0) {
- if(image->comps[i].dx != image->comps[i - 1].dx
- || image->comps[i].dy != image->comps[i - 1].dy
- || image->comps[i].prec != image->comps[i - 1].prec) {
- goto done;
- }
+ if (image->comps[0].w != image->x1 || image->comps[0].h != image->y1) {
+ return FALSE;
+ }
+ if (pitch<(int)(image->comps[0].w * 8 * image->numcomps + 31)>> 5 << 2) {
+ return FALSE;
+ }
+ FXSYS_memset(dest_buf, 0xff, image->y1 * pitch);
+ uint8_t** channel_bufs = FX_Alloc(uint8_t*, image->numcomps);
+ FX_BOOL result = FALSE;
+ int* adjust_comps = FX_Alloc(int, image->numcomps);
+ for (i = 0; i < (int)image->numcomps; i++) {
+ channel_bufs[i] = dest_buf + offsets[i];
+ adjust_comps[i] = image->comps[i].prec - 8;
+ if (i > 0) {
+ if (image->comps[i].dx != image->comps[i - 1].dx ||
+ image->comps[i].dy != image->comps[i - 1].dy ||
+ image->comps[i].prec != image->comps[i - 1].prec) {
+ goto done;
+ }
+ }
+ }
+ wid = image->comps[0].w;
+ hei = image->comps[0].h;
+ for (channel = 0; channel < (int)image->numcomps; channel++) {
+ pChannel = channel_bufs[channel];
+ if (adjust_comps[channel] < 0) {
+ for (row = 0; row < hei; row++) {
+ pScanline = pChannel + row * pitch;
+ for (col = 0; col < wid; col++) {
+ pPixel = pScanline + col * image->numcomps;
+ src = image->comps[channel].data[row * wid + col];
+ src += image->comps[channel].sgnd
+ ? 1 << (image->comps[channel].prec - 1)
+ : 0;
+ if (adjust_comps[channel] > 0) {
+ *pPixel = 0;
+ } else {
+ *pPixel = (uint8_t)(src << -adjust_comps[channel]);
+ }
}
- }
- wid = image->comps[0].w;
- hei = image->comps[0].h;
- for (channel = 0; channel < (int)image->numcomps; channel++) {
- pChannel = channel_bufs[channel];
- if(adjust_comps[channel] < 0) {
- for(row = 0; row < hei; row++) {
- pScanline = pChannel + row * pitch;
- for (col = 0; col < wid; col++) {
- pPixel = pScanline + col * image->numcomps;
- src = image->comps[channel].data[row * wid + col];
- src += image->comps[channel].sgnd ? 1 << (image->comps[channel].prec - 1) : 0;
- if (adjust_comps[channel] > 0) {
- *pPixel = 0;
- } else {
- *pPixel = (uint8_t)(src << -adjust_comps[channel]);
- }
- }
- }
- } else {
- for(row = 0; row < hei; row++) {
- pScanline = pChannel + row * pitch;
- for (col = 0; col < wid; col++) {
- pPixel = pScanline + col * image->numcomps;
- if (!image->comps[channel].data) {
- continue;
- }
- src = image->comps[channel].data[row * wid + col];
- src += image->comps[channel].sgnd ? 1 << (image->comps[channel].prec - 1) : 0;
- if (adjust_comps[channel] - 1 < 0) {
- *pPixel = (uint8_t)((src >> adjust_comps[channel]));
- } else {
- int tmpPixel = (src >> adjust_comps[channel]) + ((src >> (adjust_comps[channel] - 1)) % 2);
- if (tmpPixel > 255) {
- tmpPixel = 255;
- } else if (tmpPixel < 0) {
- tmpPixel = 0;
- }
- *pPixel = (uint8_t)tmpPixel;
- }
- }
+ }
+ } else {
+ for (row = 0; row < hei; row++) {
+ pScanline = pChannel + row * pitch;
+ for (col = 0; col < wid; col++) {
+ pPixel = pScanline + col * image->numcomps;
+ if (!image->comps[channel].data) {
+ continue;
+ }
+ src = image->comps[channel].data[row * wid + col];
+ src += image->comps[channel].sgnd
+ ? 1 << (image->comps[channel].prec - 1)
+ : 0;
+ if (adjust_comps[channel] - 1 < 0) {
+ *pPixel = (uint8_t)((src >> adjust_comps[channel]));
+ } else {
+ int tmpPixel = (src >> adjust_comps[channel]) +
+ ((src >> (adjust_comps[channel] - 1)) % 2);
+ if (tmpPixel > 255) {
+ tmpPixel = 255;
+ } else if (tmpPixel < 0) {
+ tmpPixel = 0;
}
+ *pPixel = (uint8_t)tmpPixel;
+ }
}
+ }
}
- result = TRUE;
+ }
+ result = TRUE;
done:
- FX_Free(channel_bufs);
- FX_Free(adjust_comps);
- return result;
+ FX_Free(channel_bufs);
+ FX_Free(adjust_comps);
+ return result;
}
void initialize_transition_table();
void initialize_significance_luts();
void initialize_sign_lut();
-CCodec_JpxModule::CCodec_JpxModule()
-{
-}
-void* CCodec_JpxModule::CreateDecoder(const uint8_t* src_buf, FX_DWORD src_size , FX_BOOL useColorSpace)
-{
- CJPX_Decoder* pDecoder = new CJPX_Decoder;
- pDecoder->m_useColorSpace = useColorSpace;
- if (!pDecoder->Init(src_buf, src_size)) {
- delete pDecoder;
- return NULL;
- }
- return pDecoder;
+CCodec_JpxModule::CCodec_JpxModule() {}
+void* CCodec_JpxModule::CreateDecoder(const uint8_t* src_buf,
+ FX_DWORD src_size,
+ FX_BOOL useColorSpace) {
+ CJPX_Decoder* pDecoder = new CJPX_Decoder;
+ pDecoder->m_useColorSpace = useColorSpace;
+ if (!pDecoder->Init(src_buf, src_size)) {
+ delete pDecoder;
+ return NULL;
+ }
+ return pDecoder;
}
-void CCodec_JpxModule::GetImageInfo(void* ctx, FX_DWORD& width, FX_DWORD& height,
- FX_DWORD& codestream_nComps, FX_DWORD& output_nComps)
-{
- CJPX_Decoder* pDecoder = (CJPX_Decoder*)ctx;
- pDecoder->GetInfo(width, height, codestream_nComps, output_nComps);
+void CCodec_JpxModule::GetImageInfo(void* ctx,
+ FX_DWORD& width,
+ FX_DWORD& height,
+ FX_DWORD& codestream_nComps,
+ FX_DWORD& output_nComps) {
+ CJPX_Decoder* pDecoder = (CJPX_Decoder*)ctx;
+ pDecoder->GetInfo(width, height, codestream_nComps, output_nComps);
}
-FX_BOOL CCodec_JpxModule::Decode(void* ctx, uint8_t* dest_data, int pitch, FX_BOOL bTranslateColor, uint8_t* offsets)
-{
- CJPX_Decoder* pDecoder = (CJPX_Decoder*)ctx;
- return pDecoder->Decode(dest_data, pitch, bTranslateColor, offsets);
+FX_BOOL CCodec_JpxModule::Decode(void* ctx,
+ uint8_t* dest_data,
+ int pitch,
+ FX_BOOL bTranslateColor,
+ uint8_t* offsets) {
+ CJPX_Decoder* pDecoder = (CJPX_Decoder*)ctx;
+ return pDecoder->Decode(dest_data, pitch, bTranslateColor, offsets);
}
-void CCodec_JpxModule::DestroyDecoder(void* ctx)
-{
- CJPX_Decoder* pDecoder = (CJPX_Decoder*)ctx;
- delete pDecoder;
+void CCodec_JpxModule::DestroyDecoder(void* ctx) {
+ CJPX_Decoder* pDecoder = (CJPX_Decoder*)ctx;
+ delete pDecoder;
}
diff --git a/core/src/fxcodec/codec/fx_codec_jpx_unittest.cpp b/core/src/fxcodec/codec/fx_codec_jpx_unittest.cpp
index 3e16bd0aa7..3add606509 100644
--- a/core/src/fxcodec/codec/fx_codec_jpx_unittest.cpp
+++ b/core/src/fxcodec/codec/fx_codec_jpx_unittest.cpp
@@ -20,451 +20,447 @@ static unsigned char stream_data[] = {
};
TEST(fxcodec, DecodeDataNullDecodeData) {
- unsigned char buffer[16];
- DecodeData* ptr = nullptr;
-
- // Error codes, not segvs, should callers pass us a NULL pointer.
- EXPECT_EQ(kReadError, opj_read_from_memory(buffer, sizeof(buffer), ptr));
- EXPECT_EQ(kWriteError, opj_write_from_memory(buffer, sizeof(buffer), ptr));
- EXPECT_EQ(kSkipError, opj_skip_from_memory(1, ptr));
- EXPECT_FALSE(opj_seek_from_memory(1, ptr));
+ unsigned char buffer[16];
+ DecodeData* ptr = nullptr;
+
+ // Error codes, not segvs, should callers pass us a NULL pointer.
+ EXPECT_EQ(kReadError, opj_read_from_memory(buffer, sizeof(buffer), ptr));
+ EXPECT_EQ(kWriteError, opj_write_from_memory(buffer, sizeof(buffer), ptr));
+ EXPECT_EQ(kSkipError, opj_skip_from_memory(1, ptr));
+ EXPECT_FALSE(opj_seek_from_memory(1, ptr));
}
TEST(fxcodec, DecodeDataNullStream) {
- DecodeData dd(nullptr, 0);
- unsigned char buffer[16];
+ DecodeData dd(nullptr, 0);
+ unsigned char buffer[16];
- // Reads of size 0 do nothing but return an error code.
- memset(buffer, 0xbd, sizeof(buffer));
- EXPECT_EQ(kReadError, opj_read_from_memory(buffer, 0, &dd));
- EXPECT_EQ(0xbd, buffer[0]);
+ // Reads of size 0 do nothing but return an error code.
+ memset(buffer, 0xbd, sizeof(buffer));
+ EXPECT_EQ(kReadError, opj_read_from_memory(buffer, 0, &dd));
+ EXPECT_EQ(0xbd, buffer[0]);
- // Reads of nonzero size do nothing but return an error code.
- memset(buffer, 0xbd, sizeof(buffer));
- EXPECT_EQ(kReadError, opj_read_from_memory(buffer, sizeof(buffer), &dd));
- EXPECT_EQ(0xbd, buffer[0]);
+ // Reads of nonzero size do nothing but return an error code.
+ memset(buffer, 0xbd, sizeof(buffer));
+ EXPECT_EQ(kReadError, opj_read_from_memory(buffer, sizeof(buffer), &dd));
+ EXPECT_EQ(0xbd, buffer[0]);
- // writes of size 0 do nothing but return an error code.
- EXPECT_EQ(kWriteError, opj_write_from_memory(buffer, 0, &dd));
+ // writes of size 0 do nothing but return an error code.
+ EXPECT_EQ(kWriteError, opj_write_from_memory(buffer, 0, &dd));
- // writes of nonzero size do nothing but return an error code.
- EXPECT_EQ(kWriteError, opj_write_from_memory(buffer, sizeof(buffer), &dd));
+ // writes of nonzero size do nothing but return an error code.
+ EXPECT_EQ(kWriteError, opj_write_from_memory(buffer, sizeof(buffer), &dd));
- // Skips of size 0 always return an error code.
- EXPECT_EQ(kSkipError, opj_skip_from_memory(0, &dd));
+ // Skips of size 0 always return an error code.
+ EXPECT_EQ(kSkipError, opj_skip_from_memory(0, &dd));
- // Skips of nonzero size always return an error code.
- EXPECT_EQ(kSkipError, opj_skip_from_memory(1, &dd));
+ // Skips of nonzero size always return an error code.
+ EXPECT_EQ(kSkipError, opj_skip_from_memory(1, &dd));
- // Seeks to 0 offset return in error.
- EXPECT_FALSE(opj_seek_from_memory(0, &dd));
+ // Seeks to 0 offset return in error.
+ EXPECT_FALSE(opj_seek_from_memory(0, &dd));
- // Seeks to non-zero offsets return in error.
- EXPECT_FALSE(opj_seek_from_memory(1, &dd));
+ // Seeks to non-zero offsets return in error.
+ EXPECT_FALSE(opj_seek_from_memory(1, &dd));
}
TEST(fxcodec, DecodeDataZeroSize) {
- DecodeData dd(stream_data, 0);
- unsigned char buffer[16];
+ DecodeData dd(stream_data, 0);
+ unsigned char buffer[16];
- // Reads of size 0 do nothing but return an error code.
- memset(buffer, 0xbd, sizeof(buffer));
- EXPECT_EQ(kReadError, opj_read_from_memory(buffer, 0, &dd));
- EXPECT_EQ(0xbd, buffer[0]);
+ // Reads of size 0 do nothing but return an error code.
+ memset(buffer, 0xbd, sizeof(buffer));
+ EXPECT_EQ(kReadError, opj_read_from_memory(buffer, 0, &dd));
+ EXPECT_EQ(0xbd, buffer[0]);
- // Reads of nonzero size do nothing but return an error code.
- memset(buffer, 0xbd, sizeof(buffer));
- EXPECT_EQ(kReadError, opj_read_from_memory(buffer, sizeof(buffer), &dd));
- EXPECT_EQ(0xbd, buffer[0]);
+ // Reads of nonzero size do nothing but return an error code.
+ memset(buffer, 0xbd, sizeof(buffer));
+ EXPECT_EQ(kReadError, opj_read_from_memory(buffer, sizeof(buffer), &dd));
+ EXPECT_EQ(0xbd, buffer[0]);
- // writes of size 0 do nothing but return an error code.
- EXPECT_EQ(kWriteError, opj_write_from_memory(buffer, 0, &dd));
+ // writes of size 0 do nothing but return an error code.
+ EXPECT_EQ(kWriteError, opj_write_from_memory(buffer, 0, &dd));
- // writes of nonzero size do nothing but return an error code.
- EXPECT_EQ(kWriteError, opj_write_from_memory(buffer, sizeof(buffer), &dd));
+ // writes of nonzero size do nothing but return an error code.
+ EXPECT_EQ(kWriteError, opj_write_from_memory(buffer, sizeof(buffer), &dd));
- // Skips of size 0 always return an error code.
- EXPECT_EQ(kSkipError, opj_skip_from_memory(0, &dd));
+ // Skips of size 0 always return an error code.
+ EXPECT_EQ(kSkipError, opj_skip_from_memory(0, &dd));
- // Skips of nonzero size always return an error code.
- EXPECT_EQ(kSkipError, opj_skip_from_memory(1, &dd));
+ // Skips of nonzero size always return an error code.
+ EXPECT_EQ(kSkipError, opj_skip_from_memory(1, &dd));
- // Seeks to 0 offset return in error.
- EXPECT_FALSE(opj_seek_from_memory(0, &dd));
+ // Seeks to 0 offset return in error.
+ EXPECT_FALSE(opj_seek_from_memory(0, &dd));
- // Seeks to non-zero offsets return in error.
- EXPECT_FALSE(opj_seek_from_memory(1, &dd));
+ // Seeks to non-zero offsets return in error.
+ EXPECT_FALSE(opj_seek_from_memory(1, &dd));
}
TEST(fxcodec, DecodeDataReadInBounds) {
- unsigned char buffer[16];
- {
- DecodeData dd(stream_data, sizeof(stream_data));
-
- // Exact sized read in a single call.
- memset(buffer, 0xbd, sizeof(buffer));
- EXPECT_EQ(8u, opj_read_from_memory(buffer, sizeof(buffer), &dd));
- EXPECT_EQ(0x00, buffer[0]);
- EXPECT_EQ(0x01, buffer[1]);
- EXPECT_EQ(0x02, buffer[2]);
- EXPECT_EQ(0x03, buffer[3]);
- EXPECT_EQ(0x84, buffer[4]);
- EXPECT_EQ(0x85, buffer[5]);
- EXPECT_EQ(0x86, buffer[6]);
- EXPECT_EQ(0x87, buffer[7]);
- EXPECT_EQ(0xbd, buffer[8]);
- }
- {
- DecodeData dd(stream_data, sizeof(stream_data));
-
- // Simple read.
- memset(buffer, 0xbd, sizeof(buffer));
- EXPECT_EQ(2u, opj_read_from_memory(buffer, 2, &dd));
- EXPECT_EQ(0x00, buffer[0]);
- EXPECT_EQ(0x01, buffer[1]);
- EXPECT_EQ(0xbd, buffer[2]);
-
- // Read of size 0 doesn't affect things.
- memset(buffer, 0xbd, sizeof(buffer));
- EXPECT_EQ(0u, opj_read_from_memory(buffer, 0, &dd));
- EXPECT_EQ(0xbd, buffer[0]);
-
- // Read exactly up to end of data.
- memset(buffer, 0xbd, sizeof(buffer));
- EXPECT_EQ(6u, opj_read_from_memory(buffer, 6, &dd));
- EXPECT_EQ(0x02, buffer[0]);
- EXPECT_EQ(0x03, buffer[1]);
- EXPECT_EQ(0x84, buffer[2]);
- EXPECT_EQ(0x85, buffer[3]);
- EXPECT_EQ(0x86, buffer[4]);
- EXPECT_EQ(0x87, buffer[5]);
- EXPECT_EQ(0xbd, buffer[6]);
-
- // Read of size 0 at EOF is still an error.
- memset(buffer, 0xbd, sizeof(buffer));
- EXPECT_EQ(kReadError, opj_read_from_memory(buffer, 0, &dd));
- EXPECT_EQ(0xbd, buffer[0]);
- }
+ unsigned char buffer[16];
+ {
+ DecodeData dd(stream_data, sizeof(stream_data));
+
+ // Exact sized read in a single call.
+ memset(buffer, 0xbd, sizeof(buffer));
+ EXPECT_EQ(8u, opj_read_from_memory(buffer, sizeof(buffer), &dd));
+ EXPECT_EQ(0x00, buffer[0]);
+ EXPECT_EQ(0x01, buffer[1]);
+ EXPECT_EQ(0x02, buffer[2]);
+ EXPECT_EQ(0x03, buffer[3]);
+ EXPECT_EQ(0x84, buffer[4]);
+ EXPECT_EQ(0x85, buffer[5]);
+ EXPECT_EQ(0x86, buffer[6]);
+ EXPECT_EQ(0x87, buffer[7]);
+ EXPECT_EQ(0xbd, buffer[8]);
+ }
+ {
+ DecodeData dd(stream_data, sizeof(stream_data));
+
+ // Simple read.
+ memset(buffer, 0xbd, sizeof(buffer));
+ EXPECT_EQ(2u, opj_read_from_memory(buffer, 2, &dd));
+ EXPECT_EQ(0x00, buffer[0]);
+ EXPECT_EQ(0x01, buffer[1]);
+ EXPECT_EQ(0xbd, buffer[2]);
+
+ // Read of size 0 doesn't affect things.
+ memset(buffer, 0xbd, sizeof(buffer));
+ EXPECT_EQ(0u, opj_read_from_memory(buffer, 0, &dd));
+ EXPECT_EQ(0xbd, buffer[0]);
+
+ // Read exactly up to end of data.
+ memset(buffer, 0xbd, sizeof(buffer));
+ EXPECT_EQ(6u, opj_read_from_memory(buffer, 6, &dd));
+ EXPECT_EQ(0x02, buffer[0]);
+ EXPECT_EQ(0x03, buffer[1]);
+ EXPECT_EQ(0x84, buffer[2]);
+ EXPECT_EQ(0x85, buffer[3]);
+ EXPECT_EQ(0x86, buffer[4]);
+ EXPECT_EQ(0x87, buffer[5]);
+ EXPECT_EQ(0xbd, buffer[6]);
+
+ // Read of size 0 at EOF is still an error.
+ memset(buffer, 0xbd, sizeof(buffer));
+ EXPECT_EQ(kReadError, opj_read_from_memory(buffer, 0, &dd));
+ EXPECT_EQ(0xbd, buffer[0]);
+ }
}
TEST(fxcodec, DecodeDataReadBeyondBounds) {
- unsigned char buffer[16];
- {
- DecodeData dd(stream_data, sizeof(stream_data));
-
- // Read beyond bounds in a single step.
- memset(buffer, 0xbd, sizeof(buffer));
- EXPECT_EQ(8u, opj_read_from_memory(buffer, sizeof(buffer) + 1, &dd));
- EXPECT_EQ(0x00, buffer[0]);
- EXPECT_EQ(0x01, buffer[1]);
- EXPECT_EQ(0x02, buffer[2]);
- EXPECT_EQ(0x03, buffer[3]);
- EXPECT_EQ(0x84, buffer[4]);
- EXPECT_EQ(0x85, buffer[5]);
- EXPECT_EQ(0x86, buffer[6]);
- EXPECT_EQ(0x87, buffer[7]);
- EXPECT_EQ(0xbd, buffer[8]);
- }
- {
- DecodeData dd(stream_data, sizeof(stream_data));
-
- // Read well beyond bounds in a single step.
- memset(buffer, 0xbd, sizeof(buffer));
- EXPECT_EQ(8u, opj_read_from_memory(
- buffer, std::numeric_limits<OPJ_SIZE_T>::max(), &dd));
- EXPECT_EQ(0x00, buffer[0]);
- EXPECT_EQ(0x01, buffer[1]);
- EXPECT_EQ(0x02, buffer[2]);
- EXPECT_EQ(0x03, buffer[3]);
- EXPECT_EQ(0x84, buffer[4]);
- EXPECT_EQ(0x85, buffer[5]);
- EXPECT_EQ(0x86, buffer[6]);
- EXPECT_EQ(0x87, buffer[7]);
- EXPECT_EQ(0xbd, buffer[8]);
- }
- {
- DecodeData dd(stream_data, sizeof(stream_data));
-
- // Read of size 6 gets first 6 bytes.
- // rest of buffer intact.
- memset(buffer, 0xbd, sizeof(buffer));
- EXPECT_EQ(6u, opj_read_from_memory(buffer, 6, &dd));
- EXPECT_EQ(0x00, buffer[0]);
- EXPECT_EQ(0x01, buffer[1]);
- EXPECT_EQ(0x02, buffer[2]);
- EXPECT_EQ(0x03, buffer[3]);
- EXPECT_EQ(0x84, buffer[4]);
- EXPECT_EQ(0x85, buffer[5]);
- EXPECT_EQ(0xbd, buffer[6]);
-
- // Read of size 6 gets remaining two bytes.
- memset(buffer, 0xbd, sizeof(buffer));
- EXPECT_EQ(2u, opj_read_from_memory(buffer, 6, &dd));
- EXPECT_EQ(0x86, buffer[0]);
- EXPECT_EQ(0x87, buffer[1]);
- EXPECT_EQ(0xbd, buffer[2]);
-
- // Read of 6 more gets nothing and leaves rest of buffer intact.
- memset(buffer, 0xbd, sizeof(buffer));
- EXPECT_EQ(kReadError, opj_read_from_memory(buffer, 6, &dd));
- EXPECT_EQ(0xbd, buffer[0]);
- }
+ unsigned char buffer[16];
+ {
+ DecodeData dd(stream_data, sizeof(stream_data));
+
+ // Read beyond bounds in a single step.
+ memset(buffer, 0xbd, sizeof(buffer));
+ EXPECT_EQ(8u, opj_read_from_memory(buffer, sizeof(buffer) + 1, &dd));
+ EXPECT_EQ(0x00, buffer[0]);
+ EXPECT_EQ(0x01, buffer[1]);
+ EXPECT_EQ(0x02, buffer[2]);
+ EXPECT_EQ(0x03, buffer[3]);
+ EXPECT_EQ(0x84, buffer[4]);
+ EXPECT_EQ(0x85, buffer[5]);
+ EXPECT_EQ(0x86, buffer[6]);
+ EXPECT_EQ(0x87, buffer[7]);
+ EXPECT_EQ(0xbd, buffer[8]);
+ }
+ {
+ DecodeData dd(stream_data, sizeof(stream_data));
+
+ // Read well beyond bounds in a single step.
+ memset(buffer, 0xbd, sizeof(buffer));
+ EXPECT_EQ(8u, opj_read_from_memory(
+ buffer, std::numeric_limits<OPJ_SIZE_T>::max(), &dd));
+ EXPECT_EQ(0x00, buffer[0]);
+ EXPECT_EQ(0x01, buffer[1]);
+ EXPECT_EQ(0x02, buffer[2]);
+ EXPECT_EQ(0x03, buffer[3]);
+ EXPECT_EQ(0x84, buffer[4]);
+ EXPECT_EQ(0x85, buffer[5]);
+ EXPECT_EQ(0x86, buffer[6]);
+ EXPECT_EQ(0x87, buffer[7]);
+ EXPECT_EQ(0xbd, buffer[8]);
+ }
+ {
+ DecodeData dd(stream_data, sizeof(stream_data));
+
+ // Read of size 6 gets first 6 bytes.
+ // rest of buffer intact.
+ memset(buffer, 0xbd, sizeof(buffer));
+ EXPECT_EQ(6u, opj_read_from_memory(buffer, 6, &dd));
+ EXPECT_EQ(0x00, buffer[0]);
+ EXPECT_EQ(0x01, buffer[1]);
+ EXPECT_EQ(0x02, buffer[2]);
+ EXPECT_EQ(0x03, buffer[3]);
+ EXPECT_EQ(0x84, buffer[4]);
+ EXPECT_EQ(0x85, buffer[5]);
+ EXPECT_EQ(0xbd, buffer[6]);
+
+ // Read of size 6 gets remaining two bytes.
+ memset(buffer, 0xbd, sizeof(buffer));
+ EXPECT_EQ(2u, opj_read_from_memory(buffer, 6, &dd));
+ EXPECT_EQ(0x86, buffer[0]);
+ EXPECT_EQ(0x87, buffer[1]);
+ EXPECT_EQ(0xbd, buffer[2]);
+
+ // Read of 6 more gets nothing and leaves rest of buffer intact.
+ memset(buffer, 0xbd, sizeof(buffer));
+ EXPECT_EQ(kReadError, opj_read_from_memory(buffer, 6, &dd));
+ EXPECT_EQ(0xbd, buffer[0]);
+ }
}
TEST(fxcodec, DecodeDataWriteInBounds) {
- unsigned char stream[16];
- static unsigned char buffer_data[] = {
- 0x00, 0x01, 0x02, 0x03, 0x80,
- 0x80, 0x81, 0x82, 0x83, 0x84,
- };
- {
- // Pretend the stream can only hold 4 bytes.
- DecodeData dd(stream, 4);
-
- memset(stream, 0xbd, sizeof(stream));
- EXPECT_EQ(4u, opj_write_from_memory(buffer_data, 4, &dd));
- EXPECT_EQ(0x00, stream[0]);
- EXPECT_EQ(0x01, stream[1]);
- EXPECT_EQ(0x02, stream[2]);
- EXPECT_EQ(0x03, stream[3]);
- EXPECT_EQ(0xbd, stream[4]);
- }
- {
- // Pretend the stream can only hold 4 bytes.
- DecodeData dd(stream, 4);
-
- memset(stream, 0xbd, sizeof(stream));
- EXPECT_EQ(2u, opj_write_from_memory(buffer_data, 2, &dd));
- EXPECT_EQ(2u, opj_write_from_memory(buffer_data, 2, &dd));
- EXPECT_EQ(0x00, stream[0]);
- EXPECT_EQ(0x01, stream[1]);
- EXPECT_EQ(0x00, stream[2]);
- EXPECT_EQ(0x01, stream[3]);
- EXPECT_EQ(0xbd, stream[4]);
- }
+ unsigned char stream[16];
+ static unsigned char buffer_data[] = {
+ 0x00, 0x01, 0x02, 0x03, 0x80, 0x80, 0x81, 0x82, 0x83, 0x84,
+ };
+ {
+ // Pretend the stream can only hold 4 bytes.
+ DecodeData dd(stream, 4);
+
+ memset(stream, 0xbd, sizeof(stream));
+ EXPECT_EQ(4u, opj_write_from_memory(buffer_data, 4, &dd));
+ EXPECT_EQ(0x00, stream[0]);
+ EXPECT_EQ(0x01, stream[1]);
+ EXPECT_EQ(0x02, stream[2]);
+ EXPECT_EQ(0x03, stream[3]);
+ EXPECT_EQ(0xbd, stream[4]);
+ }
+ {
+ // Pretend the stream can only hold 4 bytes.
+ DecodeData dd(stream, 4);
+
+ memset(stream, 0xbd, sizeof(stream));
+ EXPECT_EQ(2u, opj_write_from_memory(buffer_data, 2, &dd));
+ EXPECT_EQ(2u, opj_write_from_memory(buffer_data, 2, &dd));
+ EXPECT_EQ(0x00, stream[0]);
+ EXPECT_EQ(0x01, stream[1]);
+ EXPECT_EQ(0x00, stream[2]);
+ EXPECT_EQ(0x01, stream[3]);
+ EXPECT_EQ(0xbd, stream[4]);
+ }
}
TEST(fxcodec, DecodeDataWriteBeyondBounds) {
- unsigned char stream[16];
- static unsigned char buffer_data[] = {
- 0x10, 0x11, 0x12, 0x13,
- 0x94, 0x95, 0x96, 0x97,
- };
- {
- // Pretend the stream can only hold 4 bytes.
- DecodeData dd(stream, 4);
-
- // Write ending past EOF transfers up til EOF.
- memset(stream, 0xbd, sizeof(stream));
- EXPECT_EQ(4u, opj_write_from_memory(buffer_data, 5, &dd));
- EXPECT_EQ(0x10, stream[0]);
- EXPECT_EQ(0x11, stream[1]);
- EXPECT_EQ(0x12, stream[2]);
- EXPECT_EQ(0x13, stream[3]);
- EXPECT_EQ(0xbd, stream[4]);
-
- // Subsequent writes fail.
- memset(stream, 0xbd, sizeof(stream));
- EXPECT_EQ(kWriteError, opj_write_from_memory(buffer_data, 5, &dd));
- EXPECT_EQ(0xbd, stream[0]);
- }
- {
- // Pretend the stream can only hold 4 bytes.
- DecodeData dd(stream, 4);
-
- // Write ending past EOF (two steps) transfers up til EOF.
- memset(stream, 0xbd, sizeof(stream));
- EXPECT_EQ(2u, opj_write_from_memory(buffer_data, 2, &dd));
- EXPECT_EQ(2u, opj_write_from_memory(buffer_data, 4, &dd));
- EXPECT_EQ(0x10, stream[0]);
- EXPECT_EQ(0x11, stream[1]);
- EXPECT_EQ(0x10, stream[2]);
- EXPECT_EQ(0x11, stream[3]);
- EXPECT_EQ(0xbd, stream[4]);
-
- // Subsequent writes fail.
- memset(stream, 0xbd, sizeof(stream));
- EXPECT_EQ(kWriteError, opj_write_from_memory(buffer_data, 5, &dd));
- EXPECT_EQ(0xbd, stream[0]);
- }
+ unsigned char stream[16];
+ static unsigned char buffer_data[] = {
+ 0x10, 0x11, 0x12, 0x13, 0x94, 0x95, 0x96, 0x97,
+ };
+ {
+ // Pretend the stream can only hold 4 bytes.
+ DecodeData dd(stream, 4);
+
+ // Write ending past EOF transfers up til EOF.
+ memset(stream, 0xbd, sizeof(stream));
+ EXPECT_EQ(4u, opj_write_from_memory(buffer_data, 5, &dd));
+ EXPECT_EQ(0x10, stream[0]);
+ EXPECT_EQ(0x11, stream[1]);
+ EXPECT_EQ(0x12, stream[2]);
+ EXPECT_EQ(0x13, stream[3]);
+ EXPECT_EQ(0xbd, stream[4]);
+
+ // Subsequent writes fail.
+ memset(stream, 0xbd, sizeof(stream));
+ EXPECT_EQ(kWriteError, opj_write_from_memory(buffer_data, 5, &dd));
+ EXPECT_EQ(0xbd, stream[0]);
+ }
+ {
+ // Pretend the stream can only hold 4 bytes.
+ DecodeData dd(stream, 4);
+
+ // Write ending past EOF (two steps) transfers up til EOF.
+ memset(stream, 0xbd, sizeof(stream));
+ EXPECT_EQ(2u, opj_write_from_memory(buffer_data, 2, &dd));
+ EXPECT_EQ(2u, opj_write_from_memory(buffer_data, 4, &dd));
+ EXPECT_EQ(0x10, stream[0]);
+ EXPECT_EQ(0x11, stream[1]);
+ EXPECT_EQ(0x10, stream[2]);
+ EXPECT_EQ(0x11, stream[3]);
+ EXPECT_EQ(0xbd, stream[4]);
+
+ // Subsequent writes fail.
+ memset(stream, 0xbd, sizeof(stream));
+ EXPECT_EQ(kWriteError, opj_write_from_memory(buffer_data, 5, &dd));
+ EXPECT_EQ(0xbd, stream[0]);
+ }
}
// Note: Some care needs to be taken here because the skip/seek functions
// take OPJ_OFF_T's as arguments, which are typically a signed type.
TEST(fxcodec, DecodeDataSkip) {
- unsigned char buffer[16];
- {
- DecodeData dd(stream_data, sizeof(stream_data));
-
- // Skiping within buffer is allowed.
- memset(buffer, 0xbd, sizeof(buffer));
- EXPECT_EQ(1, opj_skip_from_memory(1, &dd));
- EXPECT_EQ(1u, opj_read_from_memory(buffer, 1, &dd));
- EXPECT_EQ(0x01, buffer[0]);
- EXPECT_EQ(0xbd, buffer[1]);
-
- // Skiping 0 bytes changes nothing.
- memset(buffer, 0xbd, sizeof(buffer));
- EXPECT_EQ(0, opj_skip_from_memory(0, &dd));
- EXPECT_EQ(1u, opj_read_from_memory(buffer, 1, &dd));
- EXPECT_EQ(0x02, buffer[0]);
- EXPECT_EQ(0xbd, buffer[1]);
-
- // Skiping to EOS-1 is possible.
- memset(buffer, 0xbd, sizeof(buffer));
- EXPECT_EQ(4, opj_skip_from_memory(4, &dd));
- EXPECT_EQ(1u, opj_read_from_memory(buffer, 1, &dd));
- EXPECT_EQ(0x87, buffer[0]);
- EXPECT_EQ(0xbd, buffer[1]);
-
- // Next read fails.
- memset(buffer, 0xbd, sizeof(buffer));
- EXPECT_EQ(kReadError, opj_read_from_memory(buffer, 1, &dd));
- EXPECT_EQ(0xbd, buffer[0]);
- }
- {
- DecodeData dd(stream_data, sizeof(stream_data));
-
- // Skiping directly to EOS is allowed.
- memset(buffer, 0xbd, sizeof(buffer));
- EXPECT_EQ(8, opj_skip_from_memory(8, &dd));
-
- // Next read fails.
- EXPECT_EQ(kReadError, opj_read_from_memory(buffer, 1, &dd));
- EXPECT_EQ(0xbd, buffer[0]);
- }
- {
- DecodeData dd(stream_data, sizeof(stream_data));
-
- // Skipping beyond end of stream is allowed and returns full distance.
- memset(buffer, 0xbd, sizeof(buffer));
- EXPECT_EQ(9, opj_skip_from_memory(9, &dd));
-
- // Next read fails.
- EXPECT_EQ(kReadError, opj_read_from_memory(buffer, 1, &dd));
- EXPECT_EQ(0xbd, buffer[0]);
- }
- {
- DecodeData dd(stream_data, sizeof(stream_data));
-
- // Skipping way beyond EOS is allowd, doesn't wrap, and returns
- // full distance.
- memset(buffer, 0xbd, sizeof(buffer));
- EXPECT_EQ(4, opj_skip_from_memory(4, &dd));
- EXPECT_EQ(std::numeric_limits<OPJ_OFF_T>::max(), opj_skip_from_memory(
- std::numeric_limits<OPJ_OFF_T>::max(), &dd));
-
- // Next read fails. If it succeeds, it may mean we wrapped.
- EXPECT_EQ(kReadError, opj_read_from_memory(buffer, 1, &dd));
- EXPECT_EQ(0xbd, buffer[0]);
- }
- {
- DecodeData dd(stream_data, sizeof(stream_data));
-
- // Negative skip within buffer not is allowed, position unchanged.
- memset(buffer, 0xbd, sizeof(buffer));
- EXPECT_EQ(4, opj_skip_from_memory(4, &dd));
- EXPECT_EQ(kSkipError, opj_skip_from_memory(-2, &dd));
-
- // Next read succeeds as if nothing has happenned.
- EXPECT_EQ(1u, opj_read_from_memory(buffer, 1, &dd));
- EXPECT_EQ(0x84, buffer[0]);
- EXPECT_EQ(0xbd, buffer[1]);
-
- // Negative skip before buffer is not allowed, position unchanged.
- memset(buffer, 0xbd, sizeof(buffer));
- EXPECT_EQ(kSkipError, opj_skip_from_memory(-4, &dd));
-
- // Next read succeeds as if nothing has happenned.
- EXPECT_EQ(1u, opj_read_from_memory(buffer, 1, &dd));
- EXPECT_EQ(0x85, buffer[0]);
- EXPECT_EQ(0xbd, buffer[1]);
- }
- {
- DecodeData dd(stream_data, sizeof(stream_data));
-
- // Negative skip way before buffer is not allowed, doesn't wrap
- memset(buffer, 0xbd, sizeof(buffer));
- EXPECT_EQ(4, opj_skip_from_memory(4, &dd));
- EXPECT_EQ(kSkipError, opj_skip_from_memory(
- std::numeric_limits<OPJ_OFF_T>::min(), &dd));
-
- // Next read succeeds. If it fails, it may mean we wrapped.
- EXPECT_EQ(1, opj_read_from_memory(buffer, 1, &dd));
- EXPECT_EQ(0x84, buffer[0]);
- EXPECT_EQ(0xbd, buffer[1]);
- }
- {
- DecodeData dd(stream_data, sizeof(stream_data));
-
- // Negative skip after EOS isn't alowed, still EOS.
- memset(buffer, 0xbd, sizeof(buffer));
- EXPECT_EQ(8, opj_skip_from_memory(8, &dd));
- EXPECT_EQ(kSkipError, opj_skip_from_memory(-4, &dd));
-
- // Next read fails.
- EXPECT_EQ(kReadError, opj_read_from_memory(buffer, 1, &dd));
- EXPECT_EQ(0xbd, buffer[0]);
- }
-
-}
-
-TEST(fxcodec, DecodeDataSeek) {
- unsigned char buffer[16];
+ unsigned char buffer[16];
+ {
DecodeData dd(stream_data, sizeof(stream_data));
- // Seeking within buffer is allowed and read succeeds
+ // Skiping within buffer is allowed.
memset(buffer, 0xbd, sizeof(buffer));
- EXPECT_TRUE(opj_seek_from_memory(1, &dd));
+ EXPECT_EQ(1, opj_skip_from_memory(1, &dd));
EXPECT_EQ(1u, opj_read_from_memory(buffer, 1, &dd));
EXPECT_EQ(0x01, buffer[0]);
EXPECT_EQ(0xbd, buffer[1]);
- // Seeking before start returns error leaving position unchanged.
+ // Skiping 0 bytes changes nothing.
memset(buffer, 0xbd, sizeof(buffer));
- EXPECT_FALSE(opj_seek_from_memory(-1, &dd));
- EXPECT_EQ(1, opj_read_from_memory(buffer, 1, &dd));
+ EXPECT_EQ(0, opj_skip_from_memory(0, &dd));
+ EXPECT_EQ(1u, opj_read_from_memory(buffer, 1, &dd));
EXPECT_EQ(0x02, buffer[0]);
EXPECT_EQ(0xbd, buffer[1]);
- // Seeking way before start returns error leaving position unchanged.
+ // Skiping to EOS-1 is possible.
memset(buffer, 0xbd, sizeof(buffer));
- EXPECT_FALSE(opj_seek_from_memory(
- std::numeric_limits<OPJ_OFF_T>::min(), &dd));
- EXPECT_EQ(1, opj_read_from_memory(buffer, 1, &dd));
- EXPECT_EQ(0x03, buffer[0]);
+ EXPECT_EQ(4, opj_skip_from_memory(4, &dd));
+ EXPECT_EQ(1u, opj_read_from_memory(buffer, 1, &dd));
+ EXPECT_EQ(0x87, buffer[0]);
EXPECT_EQ(0xbd, buffer[1]);
- // Seeking exactly to EOS is allowed but read fails.
+ // Next read fails.
memset(buffer, 0xbd, sizeof(buffer));
- EXPECT_TRUE(opj_seek_from_memory(8, &dd));
EXPECT_EQ(kReadError, opj_read_from_memory(buffer, 1, &dd));
EXPECT_EQ(0xbd, buffer[0]);
+ }
+ {
+ DecodeData dd(stream_data, sizeof(stream_data));
- // Seeking back to zero offset is allowed and read succeeds.
+ // Skiping directly to EOS is allowed.
memset(buffer, 0xbd, sizeof(buffer));
- EXPECT_TRUE(opj_seek_from_memory(0, &dd));
- EXPECT_EQ(1u, opj_read_from_memory(buffer, 1, &dd));
- EXPECT_EQ(0x00, buffer[0]);
- EXPECT_EQ(0xbd, buffer[1]);
+ EXPECT_EQ(8, opj_skip_from_memory(8, &dd));
+
+ // Next read fails.
+ EXPECT_EQ(kReadError, opj_read_from_memory(buffer, 1, &dd));
+ EXPECT_EQ(0xbd, buffer[0]);
+ }
+ {
+ DecodeData dd(stream_data, sizeof(stream_data));
+
+ // Skipping beyond end of stream is allowed and returns full distance.
+ memset(buffer, 0xbd, sizeof(buffer));
+ EXPECT_EQ(9, opj_skip_from_memory(9, &dd));
+
+ // Next read fails.
+ EXPECT_EQ(kReadError, opj_read_from_memory(buffer, 1, &dd));
+ EXPECT_EQ(0xbd, buffer[0]);
+ }
+ {
+ DecodeData dd(stream_data, sizeof(stream_data));
- // Seeking beyond end of stream is allowed but read fails.
+ // Skipping way beyond EOS is allowd, doesn't wrap, and returns
+ // full distance.
memset(buffer, 0xbd, sizeof(buffer));
- EXPECT_TRUE(opj_seek_from_memory(16, &dd));
+ EXPECT_EQ(4, opj_skip_from_memory(4, &dd));
+ EXPECT_EQ(std::numeric_limits<OPJ_OFF_T>::max(),
+ opj_skip_from_memory(std::numeric_limits<OPJ_OFF_T>::max(), &dd));
+
+ // Next read fails. If it succeeds, it may mean we wrapped.
EXPECT_EQ(kReadError, opj_read_from_memory(buffer, 1, &dd));
EXPECT_EQ(0xbd, buffer[0]);
+ }
+ {
+ DecodeData dd(stream_data, sizeof(stream_data));
- // Seeking within buffer after seek past EOF restores good state.
+ // Negative skip within buffer not is allowed, position unchanged.
memset(buffer, 0xbd, sizeof(buffer));
- EXPECT_TRUE(opj_seek_from_memory(4, &dd));
+ EXPECT_EQ(4, opj_skip_from_memory(4, &dd));
+ EXPECT_EQ(kSkipError, opj_skip_from_memory(-2, &dd));
+
+ // Next read succeeds as if nothing has happenned.
EXPECT_EQ(1u, opj_read_from_memory(buffer, 1, &dd));
EXPECT_EQ(0x84, buffer[0]);
EXPECT_EQ(0xbd, buffer[1]);
- // Seeking way beyond EOS is allowed, doesn't wrap, and read fails.
+ // Negative skip before buffer is not allowed, position unchanged.
memset(buffer, 0xbd, sizeof(buffer));
- EXPECT_TRUE(opj_seek_from_memory(
- std::numeric_limits<OPJ_OFF_T>::max(), &dd));
+ EXPECT_EQ(kSkipError, opj_skip_from_memory(-4, &dd));
+
+ // Next read succeeds as if nothing has happenned.
+ EXPECT_EQ(1u, opj_read_from_memory(buffer, 1, &dd));
+ EXPECT_EQ(0x85, buffer[0]);
+ EXPECT_EQ(0xbd, buffer[1]);
+ }
+ {
+ DecodeData dd(stream_data, sizeof(stream_data));
+
+ // Negative skip way before buffer is not allowed, doesn't wrap
+ memset(buffer, 0xbd, sizeof(buffer));
+ EXPECT_EQ(4, opj_skip_from_memory(4, &dd));
+ EXPECT_EQ(kSkipError,
+ opj_skip_from_memory(std::numeric_limits<OPJ_OFF_T>::min(), &dd));
+
+ // Next read succeeds. If it fails, it may mean we wrapped.
+ EXPECT_EQ(1, opj_read_from_memory(buffer, 1, &dd));
+ EXPECT_EQ(0x84, buffer[0]);
+ EXPECT_EQ(0xbd, buffer[1]);
+ }
+ {
+ DecodeData dd(stream_data, sizeof(stream_data));
+
+ // Negative skip after EOS isn't alowed, still EOS.
+ memset(buffer, 0xbd, sizeof(buffer));
+ EXPECT_EQ(8, opj_skip_from_memory(8, &dd));
+ EXPECT_EQ(kSkipError, opj_skip_from_memory(-4, &dd));
+
+ // Next read fails.
EXPECT_EQ(kReadError, opj_read_from_memory(buffer, 1, &dd));
EXPECT_EQ(0xbd, buffer[0]);
+ }
+}
+
+TEST(fxcodec, DecodeDataSeek) {
+ unsigned char buffer[16];
+ DecodeData dd(stream_data, sizeof(stream_data));
+
+ // Seeking within buffer is allowed and read succeeds
+ memset(buffer, 0xbd, sizeof(buffer));
+ EXPECT_TRUE(opj_seek_from_memory(1, &dd));
+ EXPECT_EQ(1u, opj_read_from_memory(buffer, 1, &dd));
+ EXPECT_EQ(0x01, buffer[0]);
+ EXPECT_EQ(0xbd, buffer[1]);
+
+ // Seeking before start returns error leaving position unchanged.
+ memset(buffer, 0xbd, sizeof(buffer));
+ EXPECT_FALSE(opj_seek_from_memory(-1, &dd));
+ EXPECT_EQ(1, opj_read_from_memory(buffer, 1, &dd));
+ EXPECT_EQ(0x02, buffer[0]);
+ EXPECT_EQ(0xbd, buffer[1]);
+
+ // Seeking way before start returns error leaving position unchanged.
+ memset(buffer, 0xbd, sizeof(buffer));
+ EXPECT_FALSE(
+ opj_seek_from_memory(std::numeric_limits<OPJ_OFF_T>::min(), &dd));
+ EXPECT_EQ(1, opj_read_from_memory(buffer, 1, &dd));
+ EXPECT_EQ(0x03, buffer[0]);
+ EXPECT_EQ(0xbd, buffer[1]);
+
+ // Seeking exactly to EOS is allowed but read fails.
+ memset(buffer, 0xbd, sizeof(buffer));
+ EXPECT_TRUE(opj_seek_from_memory(8, &dd));
+ EXPECT_EQ(kReadError, opj_read_from_memory(buffer, 1, &dd));
+ EXPECT_EQ(0xbd, buffer[0]);
+
+ // Seeking back to zero offset is allowed and read succeeds.
+ memset(buffer, 0xbd, sizeof(buffer));
+ EXPECT_TRUE(opj_seek_from_memory(0, &dd));
+ EXPECT_EQ(1u, opj_read_from_memory(buffer, 1, &dd));
+ EXPECT_EQ(0x00, buffer[0]);
+ EXPECT_EQ(0xbd, buffer[1]);
+
+ // Seeking beyond end of stream is allowed but read fails.
+ memset(buffer, 0xbd, sizeof(buffer));
+ EXPECT_TRUE(opj_seek_from_memory(16, &dd));
+ EXPECT_EQ(kReadError, opj_read_from_memory(buffer, 1, &dd));
+ EXPECT_EQ(0xbd, buffer[0]);
+
+ // Seeking within buffer after seek past EOF restores good state.
+ memset(buffer, 0xbd, sizeof(buffer));
+ EXPECT_TRUE(opj_seek_from_memory(4, &dd));
+ EXPECT_EQ(1u, opj_read_from_memory(buffer, 1, &dd));
+ EXPECT_EQ(0x84, buffer[0]);
+ EXPECT_EQ(0xbd, buffer[1]);
+
+ // Seeking way beyond EOS is allowed, doesn't wrap, and read fails.
+ memset(buffer, 0xbd, sizeof(buffer));
+ EXPECT_TRUE(opj_seek_from_memory(std::numeric_limits<OPJ_OFF_T>::max(), &dd));
+ EXPECT_EQ(kReadError, opj_read_from_memory(buffer, 1, &dd));
+ EXPECT_EQ(0xbd, buffer[0]);
}
diff --git a/core/src/fxcodec/jbig2/JBig2_ArithDecoder.h b/core/src/fxcodec/jbig2/JBig2_ArithDecoder.h
index 33bbe39d0d..0258014927 100644
--- a/core/src/fxcodec/jbig2/JBig2_ArithDecoder.h
+++ b/core/src/fxcodec/jbig2/JBig2_ArithDecoder.h
@@ -1,7 +1,7 @@
// Copyright 2014 PDFium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-
+
// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
#ifndef _JBIG2_ARITHMETIC_DECODER_H_
@@ -10,121 +10,114 @@
#include "JBig2_BitStream.h"
#include "JBig2_ArithQe.h"
typedef struct {
- unsigned int MPS;
- unsigned int I;
+ unsigned int MPS;
+ unsigned int I;
} JBig2ArithCtx;
-class CJBig2_ArithDecoder : public CJBig2_Object
-{
-public:
-
- CJBig2_ArithDecoder(CJBig2_BitStream *pStream);
+class CJBig2_ArithDecoder : public CJBig2_Object {
+ public:
+ CJBig2_ArithDecoder(CJBig2_BitStream* pStream);
- ~CJBig2_ArithDecoder();
+ ~CJBig2_ArithDecoder();
- int DECODE(JBig2ArithCtx *pCX);
-private:
+ int DECODE(JBig2ArithCtx* pCX);
- void INITDEC();
+ private:
+ void INITDEC();
- void BYTEIN();
- unsigned char B;
- unsigned int C;
- unsigned int A;
- unsigned int CT;
- CJBig2_BitStream *m_pStream;
+ void BYTEIN();
+ unsigned char B;
+ unsigned int C;
+ unsigned int A;
+ unsigned int CT;
+ CJBig2_BitStream* m_pStream;
};
-inline CJBig2_ArithDecoder::CJBig2_ArithDecoder(CJBig2_BitStream *pStream)
-{
- m_pStream = pStream;
- INITDEC();
-}
-inline CJBig2_ArithDecoder::~CJBig2_ArithDecoder()
-{
+inline CJBig2_ArithDecoder::CJBig2_ArithDecoder(CJBig2_BitStream* pStream) {
+ m_pStream = pStream;
+ INITDEC();
}
-inline void CJBig2_ArithDecoder::INITDEC()
-{
- B = m_pStream->getCurByte_arith();
- C = (B ^ 0xff) << 16;;
- BYTEIN();
- C = C << 7;
- CT = CT - 7;
- A = 0x8000;
+inline CJBig2_ArithDecoder::~CJBig2_ArithDecoder() {}
+inline void CJBig2_ArithDecoder::INITDEC() {
+ B = m_pStream->getCurByte_arith();
+ C = (B ^ 0xff) << 16;
+ ;
+ BYTEIN();
+ C = C << 7;
+ CT = CT - 7;
+ A = 0x8000;
}
-inline void CJBig2_ArithDecoder::BYTEIN()
-{
- unsigned char B1;
- if(B == 0xff) {
- B1 = m_pStream->getNextByte_arith();
- if(B1 > 0x8f) {
- CT = 8;
- } else {
- m_pStream->incByteIdx();
- B = B1;
- C = C + 0xfe00 - (B << 9);
- CT = 7;
- }
+inline void CJBig2_ArithDecoder::BYTEIN() {
+ unsigned char B1;
+ if (B == 0xff) {
+ B1 = m_pStream->getNextByte_arith();
+ if (B1 > 0x8f) {
+ CT = 8;
} else {
- m_pStream->incByteIdx();
- B = m_pStream->getCurByte_arith();
- C = C + 0xff00 - (B << 8);
- CT = 8;
+ m_pStream->incByteIdx();
+ B = B1;
+ C = C + 0xfe00 - (B << 9);
+ CT = 7;
}
+ } else {
+ m_pStream->incByteIdx();
+ B = m_pStream->getCurByte_arith();
+ C = C + 0xff00 - (B << 8);
+ CT = 8;
+ }
}
-inline int CJBig2_ArithDecoder::DECODE(JBig2ArithCtx *pCX)
-{
- if (!pCX || pCX->I >= JBIG2_QE_NUM) {
- return 0;
- }
+inline int CJBig2_ArithDecoder::DECODE(JBig2ArithCtx* pCX) {
+ if (!pCX || pCX->I >= JBIG2_QE_NUM) {
+ return 0;
+ }
- int D;
- const JBig2ArithQe * qe = &QeTable[pCX->I];
- A = A - qe->Qe;
- if((C >> 16) < A) {
- if(A & 0x8000) {
- D = pCX->MPS;
- } else {
- if(A < qe->Qe) {
- D = 1 - pCX->MPS;
- if(qe->nSwitch == 1) {
- pCX->MPS = 1 - pCX->MPS;
- }
- pCX->I = qe->NLPS;
- } else {
- D = pCX->MPS;
- pCX->I = qe->NMPS;
- }
- do {
- if (CT == 0) {
- BYTEIN();
- }
- A <<= 1;
- C <<= 1;
- CT--;
- } while ((A & 0x8000) == 0);
- }
+ int D;
+ const JBig2ArithQe* qe = &QeTable[pCX->I];
+ A = A - qe->Qe;
+ if ((C >> 16) < A) {
+ if (A & 0x8000) {
+ D = pCX->MPS;
} else {
- C -= A << 16;
- if(A < qe->Qe) {
- A = qe->Qe;
- D = pCX->MPS;
- pCX->I = qe->NMPS;
- } else {
- A = qe->Qe;
- D = 1 - pCX->MPS;
- if(qe->nSwitch == 1) {
- pCX->MPS = 1 - pCX->MPS;
- }
- pCX->I = qe->NLPS;
+ if (A < qe->Qe) {
+ D = 1 - pCX->MPS;
+ if (qe->nSwitch == 1) {
+ pCX->MPS = 1 - pCX->MPS;
+ }
+ pCX->I = qe->NLPS;
+ } else {
+ D = pCX->MPS;
+ pCX->I = qe->NMPS;
+ }
+ do {
+ if (CT == 0) {
+ BYTEIN();
}
- do {
- if (CT == 0) {
- BYTEIN();
- }
- A <<= 1;
- C <<= 1;
- CT--;
- } while ((A & 0x8000) == 0);
+ A <<= 1;
+ C <<= 1;
+ CT--;
+ } while ((A & 0x8000) == 0);
+ }
+ } else {
+ C -= A << 16;
+ if (A < qe->Qe) {
+ A = qe->Qe;
+ D = pCX->MPS;
+ pCX->I = qe->NMPS;
+ } else {
+ A = qe->Qe;
+ D = 1 - pCX->MPS;
+ if (qe->nSwitch == 1) {
+ pCX->MPS = 1 - pCX->MPS;
+ }
+ pCX->I = qe->NLPS;
}
- return D;
+ do {
+ if (CT == 0) {
+ BYTEIN();
+ }
+ A <<= 1;
+ C <<= 1;
+ CT--;
+ } while ((A & 0x8000) == 0);
+ }
+ return D;
}
#endif
diff --git a/core/src/fxcodec/jbig2/JBig2_ArithIntDecoder.cpp b/core/src/fxcodec/jbig2/JBig2_ArithIntDecoder.cpp
index 1e115848a3..3aab2fb3e6 100644
--- a/core/src/fxcodec/jbig2/JBig2_ArithIntDecoder.cpp
+++ b/core/src/fxcodec/jbig2/JBig2_ArithIntDecoder.cpp
@@ -1,105 +1,102 @@
// Copyright 2014 PDFium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-
+
// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
#include "JBig2_ArithIntDecoder.h"
-CJBig2_ArithIntDecoder::CJBig2_ArithIntDecoder()
-{
- IAx = (JBig2ArithCtx*)m_pModule->JBig2_Malloc2(sizeof(JBig2ArithCtx), 512);
- JBIG2_memset(IAx, 0, sizeof(JBig2ArithCtx) * 512);
+CJBig2_ArithIntDecoder::CJBig2_ArithIntDecoder() {
+ IAx = (JBig2ArithCtx*)m_pModule->JBig2_Malloc2(sizeof(JBig2ArithCtx), 512);
+ JBIG2_memset(IAx, 0, sizeof(JBig2ArithCtx) * 512);
}
-CJBig2_ArithIntDecoder::~CJBig2_ArithIntDecoder()
-{
- m_pModule->JBig2_Free(IAx);
+CJBig2_ArithIntDecoder::~CJBig2_ArithIntDecoder() {
+ m_pModule->JBig2_Free(IAx);
}
-int CJBig2_ArithIntDecoder::decode(CJBig2_ArithDecoder *pArithDecoder, int *nResult)
-{
- int PREV, V;
- int S, D;
- int nNeedBits, nTemp, i;
- PREV = 1;
- S = pArithDecoder->DECODE(IAx + PREV);
- PREV = (PREV << 1) | S;
+int CJBig2_ArithIntDecoder::decode(CJBig2_ArithDecoder* pArithDecoder,
+ int* nResult) {
+ int PREV, V;
+ int S, D;
+ int nNeedBits, nTemp, i;
+ PREV = 1;
+ S = pArithDecoder->DECODE(IAx + PREV);
+ PREV = (PREV << 1) | S;
+ D = pArithDecoder->DECODE(IAx + PREV);
+ PREV = (PREV << 1) | D;
+ if (D) {
D = pArithDecoder->DECODE(IAx + PREV);
PREV = (PREV << 1) | D;
- if(D) {
+ if (D) {
+ D = pArithDecoder->DECODE(IAx + PREV);
+ PREV = (PREV << 1) | D;
+ if (D) {
D = pArithDecoder->DECODE(IAx + PREV);
PREV = (PREV << 1) | D;
- if(D) {
- D = pArithDecoder->DECODE(IAx + PREV);
- PREV = (PREV << 1) | D;
- if(D) {
- D = pArithDecoder->DECODE(IAx + PREV);
- PREV = (PREV << 1) | D;
- if(D) {
- D = pArithDecoder->DECODE(IAx + PREV);
- PREV = (PREV << 1) | D;
- if(D) {
- nNeedBits = 32;
- V = 4436;
- } else {
- nNeedBits = 12;
- V = 340;
- }
- } else {
- nNeedBits = 8;
- V = 84;
- }
- } else {
- nNeedBits = 6;
- V = 20;
- }
+ if (D) {
+ D = pArithDecoder->DECODE(IAx + PREV);
+ PREV = (PREV << 1) | D;
+ if (D) {
+ nNeedBits = 32;
+ V = 4436;
+ } else {
+ nNeedBits = 12;
+ V = 340;
+ }
} else {
- nNeedBits = 4;
- V = 4;
+ nNeedBits = 8;
+ V = 84;
}
+ } else {
+ nNeedBits = 6;
+ V = 20;
+ }
} else {
- nNeedBits = 2;
- V = 0;
- }
- nTemp = 0;
- for(i = 0; i < nNeedBits; i++) {
- D = pArithDecoder->DECODE(IAx + PREV);
- if(PREV < 256) {
- PREV = (PREV << 1) | D;
- } else {
- PREV = (((PREV << 1) | D) & 511) | 256;
- }
- nTemp = (nTemp << 1) | D;
- }
- V += nTemp;
- if(S == 1 && V > 0) {
- V = -V;
+ nNeedBits = 4;
+ V = 4;
}
- *nResult = V;
- if(S == 1 && V == 0) {
- return JBIG2_OOB;
+ } else {
+ nNeedBits = 2;
+ V = 0;
+ }
+ nTemp = 0;
+ for (i = 0; i < nNeedBits; i++) {
+ D = pArithDecoder->DECODE(IAx + PREV);
+ if (PREV < 256) {
+ PREV = (PREV << 1) | D;
+ } else {
+ PREV = (((PREV << 1) | D) & 511) | 256;
}
- return 0;
+ nTemp = (nTemp << 1) | D;
+ }
+ V += nTemp;
+ if (S == 1 && V > 0) {
+ V = -V;
+ }
+ *nResult = V;
+ if (S == 1 && V == 0) {
+ return JBIG2_OOB;
+ }
+ return 0;
}
-CJBig2_ArithIaidDecoder::CJBig2_ArithIaidDecoder(unsigned char SBSYMCODELENA)
-{
- SBSYMCODELEN = SBSYMCODELENA;
- IAID = (JBig2ArithCtx*)m_pModule->JBig2_Malloc2(sizeof(JBig2ArithCtx), (1 << SBSYMCODELEN));
- JBIG2_memset(IAID, 0, sizeof(JBig2ArithCtx) * (int)(1 << SBSYMCODELEN));
+CJBig2_ArithIaidDecoder::CJBig2_ArithIaidDecoder(unsigned char SBSYMCODELENA) {
+ SBSYMCODELEN = SBSYMCODELENA;
+ IAID = (JBig2ArithCtx*)m_pModule->JBig2_Malloc2(sizeof(JBig2ArithCtx),
+ (1 << SBSYMCODELEN));
+ JBIG2_memset(IAID, 0, sizeof(JBig2ArithCtx) * (int)(1 << SBSYMCODELEN));
}
-CJBig2_ArithIaidDecoder::~CJBig2_ArithIaidDecoder()
-{
- m_pModule->JBig2_Free(IAID);
+CJBig2_ArithIaidDecoder::~CJBig2_ArithIaidDecoder() {
+ m_pModule->JBig2_Free(IAID);
}
-int CJBig2_ArithIaidDecoder::decode(CJBig2_ArithDecoder *pArithDecoder, int *nResult)
-{
- int PREV;
- int D;
- int i;
- PREV = 1;
- for(i = 0; i < SBSYMCODELEN; i++) {
- D = pArithDecoder->DECODE(IAID + PREV);
- PREV = (PREV << 1) | D;
- }
- PREV = PREV - (1 << SBSYMCODELEN);
- *nResult = PREV;
- return 0;
+int CJBig2_ArithIaidDecoder::decode(CJBig2_ArithDecoder* pArithDecoder,
+ int* nResult) {
+ int PREV;
+ int D;
+ int i;
+ PREV = 1;
+ for (i = 0; i < SBSYMCODELEN; i++) {
+ D = pArithDecoder->DECODE(IAID + PREV);
+ PREV = (PREV << 1) | D;
+ }
+ PREV = PREV - (1 << SBSYMCODELEN);
+ *nResult = PREV;
+ return 0;
}
diff --git a/core/src/fxcodec/jbig2/JBig2_ArithIntDecoder.h b/core/src/fxcodec/jbig2/JBig2_ArithIntDecoder.h
index 4ea104cf65..d024e7150f 100644
--- a/core/src/fxcodec/jbig2/JBig2_ArithIntDecoder.h
+++ b/core/src/fxcodec/jbig2/JBig2_ArithIntDecoder.h
@@ -1,39 +1,35 @@
// Copyright 2014 PDFium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-
+
// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
#ifndef _JBIG2_ARITH_INT_DECODER_H_
#define _JBIG2_ARITH_INT_DECODER_H_
#include "JBig2_Module.h"
#include "JBig2_ArithDecoder.h"
-class CJBig2_ArithIntDecoder : public CJBig2_Object
-{
-public:
-
- CJBig2_ArithIntDecoder();
+class CJBig2_ArithIntDecoder : public CJBig2_Object {
+ public:
+ CJBig2_ArithIntDecoder();
- ~CJBig2_ArithIntDecoder();
+ ~CJBig2_ArithIntDecoder();
- int decode(CJBig2_ArithDecoder *pArithDecoder, int *nResult);
-private:
+ int decode(CJBig2_ArithDecoder* pArithDecoder, int* nResult);
- JBig2ArithCtx *IAx;
+ private:
+ JBig2ArithCtx* IAx;
};
-class CJBig2_ArithIaidDecoder : public CJBig2_Object
-{
-public:
-
- CJBig2_ArithIaidDecoder(unsigned char SBSYMCODELENA);
+class CJBig2_ArithIaidDecoder : public CJBig2_Object {
+ public:
+ CJBig2_ArithIaidDecoder(unsigned char SBSYMCODELENA);
- ~CJBig2_ArithIaidDecoder();
+ ~CJBig2_ArithIaidDecoder();
- int decode(CJBig2_ArithDecoder *pArithDecoder, int *nResult);
-private:
+ int decode(CJBig2_ArithDecoder* pArithDecoder, int* nResult);
- JBig2ArithCtx *IAID;
+ private:
+ JBig2ArithCtx* IAID;
- unsigned char SBSYMCODELEN;
+ unsigned char SBSYMCODELEN;
};
#endif
diff --git a/core/src/fxcodec/jbig2/JBig2_ArithQe.h b/core/src/fxcodec/jbig2/JBig2_ArithQe.h
index 8a723bead0..d4eabec757 100644
--- a/core/src/fxcodec/jbig2/JBig2_ArithQe.h
+++ b/core/src/fxcodec/jbig2/JBig2_ArithQe.h
@@ -1,16 +1,16 @@
// Copyright 2014 PDFium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-
+
// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
#ifndef _JBIG2_ARITH_QE_H_
#define _JBIG2_ARITH_QE_H_
typedef struct {
- unsigned int Qe;
- unsigned int NMPS;
- unsigned int NLPS;
- unsigned int nSwitch;
+ unsigned int Qe;
+ unsigned int NMPS;
+ unsigned int NLPS;
+ unsigned int nSwitch;
} JBig2ArithQe;
extern const JBig2ArithQe QeTable[];
extern const unsigned int JBIG2_QE_NUM;
diff --git a/core/src/fxcodec/jbig2/JBig2_BitStream.h b/core/src/fxcodec/jbig2/JBig2_BitStream.h
index ff0b9fcfeb..c74964473c 100644
--- a/core/src/fxcodec/jbig2/JBig2_BitStream.h
+++ b/core/src/fxcodec/jbig2/JBig2_BitStream.h
@@ -1,316 +1,287 @@
// Copyright 2014 PDFium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-
+
// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
#ifndef _JBIG2_BIT_STREAM_H_
#define _JBIG2_BIT_STREAM_H_
#include "JBig2_Define.h"
-class CJBig2_BitStream : public CJBig2_Object
-{
-public:
-
- CJBig2_BitStream(uint8_t *pBuffer, FX_DWORD dwLength);
+class CJBig2_BitStream : public CJBig2_Object {
+ public:
+ CJBig2_BitStream(uint8_t* pBuffer, FX_DWORD dwLength);
- CJBig2_BitStream(CJBig2_BitStream &bs);
+ CJBig2_BitStream(CJBig2_BitStream& bs);
- ~CJBig2_BitStream();
+ ~CJBig2_BitStream();
- int32_t readNBits(FX_DWORD nBits, FX_DWORD *dwResult);
+ int32_t readNBits(FX_DWORD nBits, FX_DWORD* dwResult);
- int32_t readNBits(FX_DWORD nBits, int32_t *nResult);
+ int32_t readNBits(FX_DWORD nBits, int32_t* nResult);
- int32_t read1Bit(FX_DWORD *dwResult);
+ int32_t read1Bit(FX_DWORD* dwResult);
- int32_t read1Bit(FX_BOOL *bResult);
+ int32_t read1Bit(FX_BOOL* bResult);
- int32_t read1Byte(uint8_t *cResult);
+ int32_t read1Byte(uint8_t* cResult);
- int32_t readInteger(FX_DWORD *dwResult);
+ int32_t readInteger(FX_DWORD* dwResult);
- int32_t readShortInteger(FX_WORD *wResult);
+ int32_t readShortInteger(FX_WORD* wResult);
- void alignByte();
+ void alignByte();
- void align4Byte();
+ void align4Byte();
- uint8_t getAt(FX_DWORD dwOffset);
+ uint8_t getAt(FX_DWORD dwOffset);
- uint8_t getCurByte();
+ uint8_t getCurByte();
- uint8_t getNextByte();
+ uint8_t getNextByte();
- int32_t incByteIdx();
+ int32_t incByteIdx();
- uint8_t getCurByte_arith();
+ uint8_t getCurByte_arith();
- uint8_t getNextByte_arith();
+ uint8_t getNextByte_arith();
- FX_DWORD getOffset();
+ FX_DWORD getOffset();
- void setOffset(FX_DWORD dwOffset);
+ void setOffset(FX_DWORD dwOffset);
- FX_DWORD getBitPos();
+ FX_DWORD getBitPos();
- void setBitPos(FX_DWORD dwBitPos);
+ void setBitPos(FX_DWORD dwBitPos);
- uint8_t *getBuf();
+ uint8_t* getBuf();
- FX_DWORD getLength()
- {
- return m_dwLength;
- }
+ FX_DWORD getLength() { return m_dwLength; }
- uint8_t *getPointer();
+ uint8_t* getPointer();
- void offset(FX_DWORD dwOffset);
+ void offset(FX_DWORD dwOffset);
- FX_DWORD getByteLeft();
-private:
+ FX_DWORD getByteLeft();
- uint8_t *m_pBuf;
+ private:
+ uint8_t* m_pBuf;
- FX_DWORD m_dwLength;
+ FX_DWORD m_dwLength;
- FX_DWORD m_dwByteIdx;
+ FX_DWORD m_dwByteIdx;
- FX_DWORD m_dwBitIdx;
+ FX_DWORD m_dwBitIdx;
};
-inline CJBig2_BitStream::CJBig2_BitStream(uint8_t *pBuffer, FX_DWORD dwLength)
-{
- m_pBuf = pBuffer;
- m_dwLength = dwLength;
- m_dwByteIdx = 0;
- m_dwBitIdx = 0;
- if (m_dwLength > 256 * 1024 * 1024) {
- m_dwLength = 0;
- m_pBuf = NULL;
- }
+inline CJBig2_BitStream::CJBig2_BitStream(uint8_t* pBuffer, FX_DWORD dwLength) {
+ m_pBuf = pBuffer;
+ m_dwLength = dwLength;
+ m_dwByteIdx = 0;
+ m_dwBitIdx = 0;
+ if (m_dwLength > 256 * 1024 * 1024) {
+ m_dwLength = 0;
+ m_pBuf = NULL;
+ }
}
-inline CJBig2_BitStream::CJBig2_BitStream(CJBig2_BitStream &bs)
-{
- m_pBuf = bs.m_pBuf;
- m_dwLength = bs.m_dwLength;
- m_dwByteIdx = bs.m_dwByteIdx;
- m_dwBitIdx = bs.m_dwBitIdx;
+inline CJBig2_BitStream::CJBig2_BitStream(CJBig2_BitStream& bs) {
+ m_pBuf = bs.m_pBuf;
+ m_dwLength = bs.m_dwLength;
+ m_dwByteIdx = bs.m_dwByteIdx;
+ m_dwBitIdx = bs.m_dwBitIdx;
}
-inline CJBig2_BitStream::~CJBig2_BitStream()
-{
-}
-inline int32_t CJBig2_BitStream::readNBits(FX_DWORD dwBits, FX_DWORD *dwResult)
-{
- FX_DWORD dwTemp = (m_dwByteIdx << 3) + m_dwBitIdx;
- if(dwTemp <= (m_dwLength << 3)) {
- *dwResult = 0;
- if(dwTemp + dwBits <= (m_dwLength << 3)) {
- dwTemp = dwBits;
- } else {
- dwTemp = (m_dwLength << 3) - dwTemp;
- }
- while(dwTemp > 0) {
- *dwResult = (*dwResult << 1) | ((m_pBuf[m_dwByteIdx] >> (7 - m_dwBitIdx)) & 0x01);
- if(m_dwBitIdx == 7) {
- m_dwByteIdx ++;
- m_dwBitIdx = 0;
- } else {
- m_dwBitIdx ++;
- }
- dwTemp --;
- }
- return 0;
+inline CJBig2_BitStream::~CJBig2_BitStream() {}
+inline int32_t CJBig2_BitStream::readNBits(FX_DWORD dwBits,
+ FX_DWORD* dwResult) {
+ FX_DWORD dwTemp = (m_dwByteIdx << 3) + m_dwBitIdx;
+ if (dwTemp <= (m_dwLength << 3)) {
+ *dwResult = 0;
+ if (dwTemp + dwBits <= (m_dwLength << 3)) {
+ dwTemp = dwBits;
} else {
- return -1;
+ dwTemp = (m_dwLength << 3) - dwTemp;
+ }
+ while (dwTemp > 0) {
+ *dwResult =
+ (*dwResult << 1) | ((m_pBuf[m_dwByteIdx] >> (7 - m_dwBitIdx)) & 0x01);
+ if (m_dwBitIdx == 7) {
+ m_dwByteIdx++;
+ m_dwBitIdx = 0;
+ } else {
+ m_dwBitIdx++;
+ }
+ dwTemp--;
}
+ return 0;
+ } else {
+ return -1;
+ }
}
-inline int32_t CJBig2_BitStream::readNBits(FX_DWORD dwBits, int32_t *nResult)
-{
- FX_DWORD dwTemp = (m_dwByteIdx << 3) + m_dwBitIdx;
- if(dwTemp <= (m_dwLength << 3)) {
- *nResult = 0;
- if(dwTemp + dwBits <= (m_dwLength << 3)) {
- dwTemp = dwBits;
- } else {
- dwTemp = (m_dwLength << 3) - dwTemp;
- }
- while(dwTemp > 0) {
- *nResult = (*nResult << 1) | ((m_pBuf[m_dwByteIdx] >> (7 - m_dwBitIdx)) & 0x01);
- if(m_dwBitIdx == 7) {
- m_dwByteIdx ++;
- m_dwBitIdx = 0;
- } else {
- m_dwBitIdx ++;
- }
- dwTemp --;
- }
- return 0;
+inline int32_t CJBig2_BitStream::readNBits(FX_DWORD dwBits, int32_t* nResult) {
+ FX_DWORD dwTemp = (m_dwByteIdx << 3) + m_dwBitIdx;
+ if (dwTemp <= (m_dwLength << 3)) {
+ *nResult = 0;
+ if (dwTemp + dwBits <= (m_dwLength << 3)) {
+ dwTemp = dwBits;
} else {
- return -1;
+ dwTemp = (m_dwLength << 3) - dwTemp;
+ }
+ while (dwTemp > 0) {
+ *nResult =
+ (*nResult << 1) | ((m_pBuf[m_dwByteIdx] >> (7 - m_dwBitIdx)) & 0x01);
+ if (m_dwBitIdx == 7) {
+ m_dwByteIdx++;
+ m_dwBitIdx = 0;
+ } else {
+ m_dwBitIdx++;
+ }
+ dwTemp--;
}
+ return 0;
+ } else {
+ return -1;
+ }
}
-inline int32_t CJBig2_BitStream::read1Bit(FX_DWORD *dwResult)
-{
- if(m_dwByteIdx < m_dwLength) {
- *dwResult = (m_pBuf[m_dwByteIdx] >> (7 - m_dwBitIdx)) & 0x01;
- if(m_dwBitIdx == 7) {
- m_dwByteIdx ++;
- m_dwBitIdx = 0;
- } else {
- m_dwBitIdx ++;
- }
- return 0;
+inline int32_t CJBig2_BitStream::read1Bit(FX_DWORD* dwResult) {
+ if (m_dwByteIdx < m_dwLength) {
+ *dwResult = (m_pBuf[m_dwByteIdx] >> (7 - m_dwBitIdx)) & 0x01;
+ if (m_dwBitIdx == 7) {
+ m_dwByteIdx++;
+ m_dwBitIdx = 0;
} else {
- return -1;
+ m_dwBitIdx++;
}
+ return 0;
+ } else {
+ return -1;
+ }
}
-inline int32_t CJBig2_BitStream::read1Bit(FX_BOOL *bResult)
-{
- if(m_dwByteIdx < m_dwLength) {
- *bResult = (m_pBuf[m_dwByteIdx] >> (7 - m_dwBitIdx)) & 0x01;
- if(m_dwBitIdx == 7) {
- m_dwByteIdx ++;
- m_dwBitIdx = 0;
- } else {
- m_dwBitIdx ++;
- }
- return 0;
+inline int32_t CJBig2_BitStream::read1Bit(FX_BOOL* bResult) {
+ if (m_dwByteIdx < m_dwLength) {
+ *bResult = (m_pBuf[m_dwByteIdx] >> (7 - m_dwBitIdx)) & 0x01;
+ if (m_dwBitIdx == 7) {
+ m_dwByteIdx++;
+ m_dwBitIdx = 0;
} else {
- return -1;
+ m_dwBitIdx++;
}
+ return 0;
+ } else {
+ return -1;
+ }
}
-inline int32_t CJBig2_BitStream::read1Byte(uint8_t *cResult)
-{
- if(m_dwByteIdx < m_dwLength) {
- *cResult = m_pBuf[m_dwByteIdx];
- m_dwByteIdx ++;
- return 0;
- } else {
- return -1;
- }
+inline int32_t CJBig2_BitStream::read1Byte(uint8_t* cResult) {
+ if (m_dwByteIdx < m_dwLength) {
+ *cResult = m_pBuf[m_dwByteIdx];
+ m_dwByteIdx++;
+ return 0;
+ } else {
+ return -1;
+ }
}
-inline int32_t CJBig2_BitStream::readInteger(FX_DWORD *dwResult)
-{
- if(m_dwByteIdx + 3 < m_dwLength) {
- *dwResult = (m_pBuf[m_dwByteIdx] << 24) | (m_pBuf[m_dwByteIdx + 1] << 16)
- | (m_pBuf[m_dwByteIdx + 2] << 8) | m_pBuf[m_dwByteIdx + 3];
- m_dwByteIdx += 4;
- return 0;
- } else {
- return -1;
- }
+inline int32_t CJBig2_BitStream::readInteger(FX_DWORD* dwResult) {
+ if (m_dwByteIdx + 3 < m_dwLength) {
+ *dwResult = (m_pBuf[m_dwByteIdx] << 24) | (m_pBuf[m_dwByteIdx + 1] << 16) |
+ (m_pBuf[m_dwByteIdx + 2] << 8) | m_pBuf[m_dwByteIdx + 3];
+ m_dwByteIdx += 4;
+ return 0;
+ } else {
+ return -1;
+ }
}
-inline int32_t CJBig2_BitStream::readShortInteger(FX_WORD *dwResult)
-{
- if(m_dwByteIdx + 1 < m_dwLength) {
- *dwResult = (m_pBuf[m_dwByteIdx] << 8) | m_pBuf[m_dwByteIdx + 1];
- m_dwByteIdx += 2;
- return 0;
- } else {
- return -1;
- }
+inline int32_t CJBig2_BitStream::readShortInteger(FX_WORD* dwResult) {
+ if (m_dwByteIdx + 1 < m_dwLength) {
+ *dwResult = (m_pBuf[m_dwByteIdx] << 8) | m_pBuf[m_dwByteIdx + 1];
+ m_dwByteIdx += 2;
+ return 0;
+ } else {
+ return -1;
+ }
}
-inline void CJBig2_BitStream::alignByte()
-{
- if(m_dwBitIdx != 0) {
- m_dwByteIdx ++;
- m_dwBitIdx = 0;
- }
+inline void CJBig2_BitStream::alignByte() {
+ if (m_dwBitIdx != 0) {
+ m_dwByteIdx++;
+ m_dwBitIdx = 0;
+ }
}
-inline void CJBig2_BitStream::align4Byte()
-{
- if(m_dwBitIdx != 0) {
- m_dwByteIdx ++;
- m_dwBitIdx = 0;
- }
- m_dwByteIdx = (m_dwByteIdx + 3) & -4;
+inline void CJBig2_BitStream::align4Byte() {
+ if (m_dwBitIdx != 0) {
+ m_dwByteIdx++;
+ m_dwBitIdx = 0;
+ }
+ m_dwByteIdx = (m_dwByteIdx + 3) & -4;
}
-inline uint8_t CJBig2_BitStream::getAt(FX_DWORD dwOffset)
-{
- if(dwOffset < m_dwLength) {
- return m_pBuf[dwOffset];
- } else {
- return 0;
- }
+inline uint8_t CJBig2_BitStream::getAt(FX_DWORD dwOffset) {
+ if (dwOffset < m_dwLength) {
+ return m_pBuf[dwOffset];
+ } else {
+ return 0;
+ }
}
-inline uint8_t CJBig2_BitStream::getCurByte()
-{
- if(m_dwByteIdx < m_dwLength) {
- return m_pBuf[m_dwByteIdx];
- } else {
- return 0;
- }
+inline uint8_t CJBig2_BitStream::getCurByte() {
+ if (m_dwByteIdx < m_dwLength) {
+ return m_pBuf[m_dwByteIdx];
+ } else {
+ return 0;
+ }
}
-inline uint8_t CJBig2_BitStream::getNextByte()
-{
- if(m_dwByteIdx + 1 < m_dwLength) {
- return m_pBuf[m_dwByteIdx + 1];
- } else {
- return 0;
- }
+inline uint8_t CJBig2_BitStream::getNextByte() {
+ if (m_dwByteIdx + 1 < m_dwLength) {
+ return m_pBuf[m_dwByteIdx + 1];
+ } else {
+ return 0;
+ }
}
-inline int32_t CJBig2_BitStream::incByteIdx()
-{
- if(m_dwByteIdx < m_dwLength) {
- m_dwByteIdx ++;
- return 0;
- } else {
- return -1;
- }
+inline int32_t CJBig2_BitStream::incByteIdx() {
+ if (m_dwByteIdx < m_dwLength) {
+ m_dwByteIdx++;
+ return 0;
+ } else {
+ return -1;
+ }
}
-inline uint8_t CJBig2_BitStream::getCurByte_arith()
-{
- if(m_dwByteIdx < m_dwLength) {
- return m_pBuf[m_dwByteIdx];
- } else {
- return 0xff;
- }
+inline uint8_t CJBig2_BitStream::getCurByte_arith() {
+ if (m_dwByteIdx < m_dwLength) {
+ return m_pBuf[m_dwByteIdx];
+ } else {
+ return 0xff;
+ }
}
-inline uint8_t CJBig2_BitStream::getNextByte_arith()
-{
- if(m_dwByteIdx + 1 < m_dwLength) {
- return m_pBuf[m_dwByteIdx + 1];
- } else {
- return 0xff;
- }
+inline uint8_t CJBig2_BitStream::getNextByte_arith() {
+ if (m_dwByteIdx + 1 < m_dwLength) {
+ return m_pBuf[m_dwByteIdx + 1];
+ } else {
+ return 0xff;
+ }
}
-inline FX_DWORD CJBig2_BitStream::getOffset()
-{
- return m_dwByteIdx;
+inline FX_DWORD CJBig2_BitStream::getOffset() {
+ return m_dwByteIdx;
}
-inline void CJBig2_BitStream::setOffset(FX_DWORD dwOffset)
-{
- if (dwOffset > m_dwLength) {
- dwOffset = m_dwLength;
- }
- m_dwByteIdx = dwOffset;
+inline void CJBig2_BitStream::setOffset(FX_DWORD dwOffset) {
+ if (dwOffset > m_dwLength) {
+ dwOffset = m_dwLength;
+ }
+ m_dwByteIdx = dwOffset;
}
-inline FX_DWORD CJBig2_BitStream::getBitPos()
-{
- return (m_dwByteIdx << 3) + m_dwBitIdx;
+inline FX_DWORD CJBig2_BitStream::getBitPos() {
+ return (m_dwByteIdx << 3) + m_dwBitIdx;
}
-inline void CJBig2_BitStream::setBitPos(FX_DWORD dwBitPos)
-{
- m_dwByteIdx = dwBitPos >> 3;
- m_dwBitIdx = dwBitPos & 7;
+inline void CJBig2_BitStream::setBitPos(FX_DWORD dwBitPos) {
+ m_dwByteIdx = dwBitPos >> 3;
+ m_dwBitIdx = dwBitPos & 7;
}
-inline uint8_t *CJBig2_BitStream::getBuf()
-{
- return m_pBuf;
+inline uint8_t* CJBig2_BitStream::getBuf() {
+ return m_pBuf;
}
-inline uint8_t *CJBig2_BitStream::getPointer()
-{
- return m_pBuf + m_dwByteIdx;
+inline uint8_t* CJBig2_BitStream::getPointer() {
+ return m_pBuf + m_dwByteIdx;
}
-inline void CJBig2_BitStream::offset(FX_DWORD dwOffset)
-{
- m_dwByteIdx += dwOffset;
+inline void CJBig2_BitStream::offset(FX_DWORD dwOffset) {
+ m_dwByteIdx += dwOffset;
}
-inline FX_DWORD CJBig2_BitStream::getByteLeft()
-{
- return m_dwLength - m_dwByteIdx;
+inline FX_DWORD CJBig2_BitStream::getByteLeft() {
+ return m_dwLength - m_dwByteIdx;
}
#endif
diff --git a/core/src/fxcodec/jbig2/JBig2_Context.cpp b/core/src/fxcodec/jbig2/JBig2_Context.cpp
index 68c973547c..4a08c21949 100644
--- a/core/src/fxcodec/jbig2/JBig2_Context.cpp
+++ b/core/src/fxcodec/jbig2/JBig2_Context.cpp
@@ -1,7 +1,7 @@
// Copyright 2014 PDFium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-
+
// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
#include <map>
@@ -17,1753 +17,1880 @@
// difference for typical JBIG2 documents.
const int kSymbolDictCacheMaxSize = 2;
-void OutputBitmap(CJBig2_Image* pImage)
-{
- if(!pImage) {
- return;
- }
-}
-CJBig2_Context *CJBig2_Context::CreateContext(CJBig2_Module *pModule, uint8_t *pGlobalData, FX_DWORD dwGlobalLength,
- uint8_t *pData, FX_DWORD dwLength, int32_t nStreamType, std::list<CJBig2_CachePair>* pSymbolDictCache, IFX_Pause* pPause)
-{
- return new(pModule)CJBig2_Context(pGlobalData, dwGlobalLength, pData, dwLength, nStreamType, pSymbolDictCache, pPause);
+void OutputBitmap(CJBig2_Image* pImage) {
+ if (!pImage) {
+ return;
+ }
}
-void CJBig2_Context::DestroyContext(CJBig2_Context *pContext)
-{
- delete pContext;
+CJBig2_Context* CJBig2_Context::CreateContext(
+ CJBig2_Module* pModule,
+ uint8_t* pGlobalData,
+ FX_DWORD dwGlobalLength,
+ uint8_t* pData,
+ FX_DWORD dwLength,
+ int32_t nStreamType,
+ std::list<CJBig2_CachePair>* pSymbolDictCache,
+ IFX_Pause* pPause) {
+ return new (pModule)
+ CJBig2_Context(pGlobalData, dwGlobalLength, pData, dwLength, nStreamType,
+ pSymbolDictCache, pPause);
}
-CJBig2_Context::CJBig2_Context(uint8_t *pGlobalData, FX_DWORD dwGlobalLength,
- uint8_t *pData, FX_DWORD dwLength, int32_t nStreamType, std::list<CJBig2_CachePair>* pSymbolDictCache, IFX_Pause* pPause)
-{
- if(pGlobalData && (dwGlobalLength > 0)) {
- JBIG2_ALLOC(m_pGlobalContext, CJBig2_Context(NULL, 0, pGlobalData, dwGlobalLength,
- JBIG2_EMBED_STREAM, pSymbolDictCache, pPause));
- } else {
- m_pGlobalContext = NULL;
- }
- JBIG2_ALLOC(m_pStream, CJBig2_BitStream(pData, dwLength));
- m_nStreamType = nStreamType;
- m_nState = JBIG2_OUT_OF_PAGE;
- JBIG2_ALLOC(m_pSegmentList, CJBig2_List<CJBig2_Segment>);
- JBIG2_ALLOC(m_pPageInfoList, CJBig2_List<JBig2PageInfo>(1));
- m_pPage = NULL;
- m_bBufSpecified = FALSE;
- m_pPause = pPause;
- m_nSegmentDecoded = 0;
- m_PauseStep = 10;
- m_pArithDecoder = NULL;
- m_pGRD = NULL;
- m_gbContext = NULL;
- m_pSegment = NULL;
- m_dwOffset = 0;
- m_ProcessiveStatus = FXCODEC_STATUS_FRAME_READY;
- m_pSymbolDictCache = pSymbolDictCache;
+void CJBig2_Context::DestroyContext(CJBig2_Context* pContext) {
+ delete pContext;
}
-CJBig2_Context::~CJBig2_Context()
-{
- delete m_pArithDecoder;
- m_pArithDecoder = NULL;
- delete m_pGRD;
- m_pGRD = NULL;
- if(m_gbContext) {
- m_pModule->JBig2_Free(m_gbContext);
- }
- m_gbContext = NULL;
- delete m_pGlobalContext;
+CJBig2_Context::CJBig2_Context(uint8_t* pGlobalData,
+ FX_DWORD dwGlobalLength,
+ uint8_t* pData,
+ FX_DWORD dwLength,
+ int32_t nStreamType,
+ std::list<CJBig2_CachePair>* pSymbolDictCache,
+ IFX_Pause* pPause) {
+ if (pGlobalData && (dwGlobalLength > 0)) {
+ JBIG2_ALLOC(m_pGlobalContext,
+ CJBig2_Context(NULL, 0, pGlobalData, dwGlobalLength,
+ JBIG2_EMBED_STREAM, pSymbolDictCache, pPause));
+ } else {
m_pGlobalContext = NULL;
- delete m_pPageInfoList;
- m_pPageInfoList = NULL;
- if(m_bBufSpecified) {
- delete m_pPage;
- }
- m_pPage = NULL;
- delete m_pStream;
- m_pStream = NULL;
- delete m_pSegmentList;
- m_pSegmentList = NULL;
+ }
+ JBIG2_ALLOC(m_pStream, CJBig2_BitStream(pData, dwLength));
+ m_nStreamType = nStreamType;
+ m_nState = JBIG2_OUT_OF_PAGE;
+ JBIG2_ALLOC(m_pSegmentList, CJBig2_List<CJBig2_Segment>);
+ JBIG2_ALLOC(m_pPageInfoList, CJBig2_List<JBig2PageInfo>(1));
+ m_pPage = NULL;
+ m_bBufSpecified = FALSE;
+ m_pPause = pPause;
+ m_nSegmentDecoded = 0;
+ m_PauseStep = 10;
+ m_pArithDecoder = NULL;
+ m_pGRD = NULL;
+ m_gbContext = NULL;
+ m_pSegment = NULL;
+ m_dwOffset = 0;
+ m_ProcessiveStatus = FXCODEC_STATUS_FRAME_READY;
+ m_pSymbolDictCache = pSymbolDictCache;
}
-int32_t CJBig2_Context::decodeFile(IFX_Pause* pPause)
-{
- uint8_t cFlags;
- FX_DWORD dwTemp;
- const uint8_t fileID[] = {0x97, 0x4A, 0x42, 0x32, 0x0D, 0x0A, 0x1A, 0x0A};
- int32_t nRet;
- if(m_pStream->getByteLeft() < 8) {
- m_pModule->JBig2_Error("file header too short.");
- nRet = JBIG2_ERROR_TOO_SHORT;
- goto failed;
- }
- if(JBIG2_memcmp(m_pStream->getPointer(), fileID, 8) != 0) {
- m_pModule->JBig2_Error("not jbig2 file");
- nRet = JBIG2_ERROR_FILE_FORMAT;
- goto failed;
- }
- m_pStream->offset(8);
- if(m_pStream->read1Byte(&cFlags) != 0) {
- m_pModule->JBig2_Error("file header too short.");
- nRet = JBIG2_ERROR_TOO_SHORT;
- goto failed;
- }
- if(!(cFlags & 0x02)) {
- if(m_pStream->readInteger(&dwTemp) != 0) {
- m_pModule->JBig2_Error("file header too short.");
- nRet = JBIG2_ERROR_TOO_SHORT;
- goto failed;
- }
- if(dwTemp > 0) {
- delete m_pPageInfoList;
- JBIG2_ALLOC(m_pPageInfoList, CJBig2_List<JBig2PageInfo>(dwTemp));
- }
- }
- if(cFlags & 0x01) {
- m_nStreamType = JBIG2_SQUENTIAL_STREAM;
- return decode_SquentialOrgnazation(pPause);
- } else {
- m_nStreamType = JBIG2_RANDOM_STREAM;
- return decode_RandomOrgnazation_FirstPage(pPause);
- }
+CJBig2_Context::~CJBig2_Context() {
+ delete m_pArithDecoder;
+ m_pArithDecoder = NULL;
+ delete m_pGRD;
+ m_pGRD = NULL;
+ if (m_gbContext) {
+ m_pModule->JBig2_Free(m_gbContext);
+ }
+ m_gbContext = NULL;
+ delete m_pGlobalContext;
+ m_pGlobalContext = NULL;
+ delete m_pPageInfoList;
+ m_pPageInfoList = NULL;
+ if (m_bBufSpecified) {
+ delete m_pPage;
+ }
+ m_pPage = NULL;
+ delete m_pStream;
+ m_pStream = NULL;
+ delete m_pSegmentList;
+ m_pSegmentList = NULL;
+}
+int32_t CJBig2_Context::decodeFile(IFX_Pause* pPause) {
+ uint8_t cFlags;
+ FX_DWORD dwTemp;
+ const uint8_t fileID[] = {0x97, 0x4A, 0x42, 0x32, 0x0D, 0x0A, 0x1A, 0x0A};
+ int32_t nRet;
+ if (m_pStream->getByteLeft() < 8) {
+ m_pModule->JBig2_Error("file header too short.");
+ nRet = JBIG2_ERROR_TOO_SHORT;
+ goto failed;
+ }
+ if (JBIG2_memcmp(m_pStream->getPointer(), fileID, 8) != 0) {
+ m_pModule->JBig2_Error("not jbig2 file");
+ nRet = JBIG2_ERROR_FILE_FORMAT;
+ goto failed;
+ }
+ m_pStream->offset(8);
+ if (m_pStream->read1Byte(&cFlags) != 0) {
+ m_pModule->JBig2_Error("file header too short.");
+ nRet = JBIG2_ERROR_TOO_SHORT;
+ goto failed;
+ }
+ if (!(cFlags & 0x02)) {
+ if (m_pStream->readInteger(&dwTemp) != 0) {
+ m_pModule->JBig2_Error("file header too short.");
+ nRet = JBIG2_ERROR_TOO_SHORT;
+ goto failed;
+ }
+ if (dwTemp > 0) {
+ delete m_pPageInfoList;
+ JBIG2_ALLOC(m_pPageInfoList, CJBig2_List<JBig2PageInfo>(dwTemp));
+ }
+ }
+ if (cFlags & 0x01) {
+ m_nStreamType = JBIG2_SQUENTIAL_STREAM;
+ return decode_SquentialOrgnazation(pPause);
+ } else {
+ m_nStreamType = JBIG2_RANDOM_STREAM;
+ return decode_RandomOrgnazation_FirstPage(pPause);
+ }
failed:
- return nRet;
+ return nRet;
}
-int32_t CJBig2_Context::decode_SquentialOrgnazation(IFX_Pause* pPause)
-{
- int32_t nRet;
- if(m_pStream->getByteLeft() > 0) {
- while(m_pStream->getByteLeft() >= JBIG2_MIN_SEGMENT_SIZE) {
- if(m_pSegment == NULL) {
- JBIG2_ALLOC(m_pSegment, CJBig2_Segment());
- nRet = parseSegmentHeader(m_pSegment);
- if(nRet != JBIG2_SUCCESS) {
- delete m_pSegment;
- m_pSegment = NULL;
- return nRet;
- }
- m_dwOffset = m_pStream->getOffset();
- }
- nRet = parseSegmentData(m_pSegment, pPause);
- if(m_ProcessiveStatus == FXCODEC_STATUS_DECODE_TOBECONTINUE) {
- m_ProcessiveStatus = FXCODEC_STATUS_DECODE_TOBECONTINUE;
- m_PauseStep = 2;
- return JBIG2_SUCCESS;
- }
- if((nRet == JBIG2_END_OF_PAGE) || (nRet == JBIG2_END_OF_FILE)) {
- delete m_pSegment;
- m_pSegment = NULL;
- break;
- } else if(nRet != JBIG2_SUCCESS) {
- delete m_pSegment;
- m_pSegment = NULL;
- return nRet;
- }
- m_pSegmentList->addItem(m_pSegment);
- if(m_pSegment->m_dwData_length != 0xffffffff) {
- m_dwOffset = m_dwOffset + m_pSegment->m_dwData_length;
- m_pStream->setOffset(m_dwOffset);
- } else {
- m_pStream->offset(4);
- }
- OutputBitmap(m_pPage);
- m_pSegment = NULL;
- if(m_pStream->getByteLeft() > 0 && m_pPage && pPause && pPause->NeedToPauseNow()) {
- m_ProcessiveStatus = FXCODEC_STATUS_DECODE_TOBECONTINUE;
- m_PauseStep = 2;
- return JBIG2_SUCCESS;
- }
- }
- } else {
- return JBIG2_END_OF_FILE;
+int32_t CJBig2_Context::decode_SquentialOrgnazation(IFX_Pause* pPause) {
+ int32_t nRet;
+ if (m_pStream->getByteLeft() > 0) {
+ while (m_pStream->getByteLeft() >= JBIG2_MIN_SEGMENT_SIZE) {
+ if (m_pSegment == NULL) {
+ JBIG2_ALLOC(m_pSegment, CJBig2_Segment());
+ nRet = parseSegmentHeader(m_pSegment);
+ if (nRet != JBIG2_SUCCESS) {
+ delete m_pSegment;
+ m_pSegment = NULL;
+ return nRet;
+ }
+ m_dwOffset = m_pStream->getOffset();
+ }
+ nRet = parseSegmentData(m_pSegment, pPause);
+ if (m_ProcessiveStatus == FXCODEC_STATUS_DECODE_TOBECONTINUE) {
+ m_ProcessiveStatus = FXCODEC_STATUS_DECODE_TOBECONTINUE;
+ m_PauseStep = 2;
+ return JBIG2_SUCCESS;
+ }
+ if ((nRet == JBIG2_END_OF_PAGE) || (nRet == JBIG2_END_OF_FILE)) {
+ delete m_pSegment;
+ m_pSegment = NULL;
+ break;
+ } else if (nRet != JBIG2_SUCCESS) {
+ delete m_pSegment;
+ m_pSegment = NULL;
+ return nRet;
+ }
+ m_pSegmentList->addItem(m_pSegment);
+ if (m_pSegment->m_dwData_length != 0xffffffff) {
+ m_dwOffset = m_dwOffset + m_pSegment->m_dwData_length;
+ m_pStream->setOffset(m_dwOffset);
+ } else {
+ m_pStream->offset(4);
+ }
+ OutputBitmap(m_pPage);
+ m_pSegment = NULL;
+ if (m_pStream->getByteLeft() > 0 && m_pPage && pPause &&
+ pPause->NeedToPauseNow()) {
+ m_ProcessiveStatus = FXCODEC_STATUS_DECODE_TOBECONTINUE;
+ m_PauseStep = 2;
+ return JBIG2_SUCCESS;
+ }
}
- return JBIG2_SUCCESS;
+ } else {
+ return JBIG2_END_OF_FILE;
+ }
+ return JBIG2_SUCCESS;
}
-int32_t CJBig2_Context::decode_EmbedOrgnazation(IFX_Pause* pPause)
-{
- return decode_SquentialOrgnazation(pPause);
+int32_t CJBig2_Context::decode_EmbedOrgnazation(IFX_Pause* pPause) {
+ return decode_SquentialOrgnazation(pPause);
}
-int32_t CJBig2_Context::decode_RandomOrgnazation_FirstPage(IFX_Pause* pPause)
-{
- CJBig2_Segment *pSegment;
- int32_t nRet;
- while(m_pStream->getByteLeft() > JBIG2_MIN_SEGMENT_SIZE) {
- JBIG2_ALLOC(pSegment, CJBig2_Segment());
- nRet = parseSegmentHeader(pSegment);
- if(nRet != JBIG2_SUCCESS) {
- delete pSegment;
- return nRet;
- } else if(pSegment->m_cFlags.s.type == 51) {
- delete pSegment;
- break;
- }
- m_pSegmentList->addItem(pSegment);
- if(pPause && m_pPause && pPause->NeedToPauseNow()) {
- m_PauseStep = 3;
- m_ProcessiveStatus = FXCODEC_STATUS_DECODE_TOBECONTINUE;
- return JBIG2_SUCCESS;
- }
- }
- m_nSegmentDecoded = 0;
- return decode_RandomOrgnazation(pPause);
+int32_t CJBig2_Context::decode_RandomOrgnazation_FirstPage(IFX_Pause* pPause) {
+ CJBig2_Segment* pSegment;
+ int32_t nRet;
+ while (m_pStream->getByteLeft() > JBIG2_MIN_SEGMENT_SIZE) {
+ JBIG2_ALLOC(pSegment, CJBig2_Segment());
+ nRet = parseSegmentHeader(pSegment);
+ if (nRet != JBIG2_SUCCESS) {
+ delete pSegment;
+ return nRet;
+ } else if (pSegment->m_cFlags.s.type == 51) {
+ delete pSegment;
+ break;
+ }
+ m_pSegmentList->addItem(pSegment);
+ if (pPause && m_pPause && pPause->NeedToPauseNow()) {
+ m_PauseStep = 3;
+ m_ProcessiveStatus = FXCODEC_STATUS_DECODE_TOBECONTINUE;
+ return JBIG2_SUCCESS;
+ }
+ }
+ m_nSegmentDecoded = 0;
+ return decode_RandomOrgnazation(pPause);
}
-int32_t CJBig2_Context::decode_RandomOrgnazation(IFX_Pause* pPause)
-{
- int32_t nRet;
- for(; m_nSegmentDecoded < m_pSegmentList->getLength(); m_nSegmentDecoded++) {
- nRet = parseSegmentData(m_pSegmentList->getAt(m_nSegmentDecoded), pPause);
- if((nRet == JBIG2_END_OF_PAGE) || (nRet == JBIG2_END_OF_FILE)) {
- break;
- } else if(nRet != JBIG2_SUCCESS) {
- return nRet;
- }
- if(m_pPage && pPause && pPause->NeedToPauseNow()) {
- m_PauseStep = 4;
- m_ProcessiveStatus = FXCODEC_STATUS_DECODE_TOBECONTINUE;
- return JBIG2_SUCCESS;
- }
- }
- return JBIG2_SUCCESS;
+int32_t CJBig2_Context::decode_RandomOrgnazation(IFX_Pause* pPause) {
+ int32_t nRet;
+ for (; m_nSegmentDecoded < m_pSegmentList->getLength(); m_nSegmentDecoded++) {
+ nRet = parseSegmentData(m_pSegmentList->getAt(m_nSegmentDecoded), pPause);
+ if ((nRet == JBIG2_END_OF_PAGE) || (nRet == JBIG2_END_OF_FILE)) {
+ break;
+ } else if (nRet != JBIG2_SUCCESS) {
+ return nRet;
+ }
+ if (m_pPage && pPause && pPause->NeedToPauseNow()) {
+ m_PauseStep = 4;
+ m_ProcessiveStatus = FXCODEC_STATUS_DECODE_TOBECONTINUE;
+ return JBIG2_SUCCESS;
+ }
+ }
+ return JBIG2_SUCCESS;
}
-int32_t CJBig2_Context::getFirstPage(uint8_t *pBuf, int32_t width, int32_t height, int32_t stride, IFX_Pause* pPause)
-{
- int32_t nRet = 0;
- if(m_pGlobalContext) {
- nRet = m_pGlobalContext->decode_EmbedOrgnazation(pPause);
- if(nRet != JBIG2_SUCCESS) {
- m_ProcessiveStatus = FXCODEC_STATUS_ERROR;
- return nRet;
- }
- }
- m_bFirstPage = TRUE;
- m_PauseStep = 0;
- delete m_pPage;
- JBIG2_ALLOC(m_pPage, CJBig2_Image(width, height, stride, pBuf));
- m_bBufSpecified = TRUE;
- if(m_pPage && pPause && pPause->NeedToPauseNow()) {
- m_PauseStep = 1;
- m_ProcessiveStatus = FXCODEC_STATUS_DECODE_TOBECONTINUE;
- return nRet;
- }
- int ret = Continue(pPause);
- return ret;
+int32_t CJBig2_Context::getFirstPage(uint8_t* pBuf,
+ int32_t width,
+ int32_t height,
+ int32_t stride,
+ IFX_Pause* pPause) {
+ int32_t nRet = 0;
+ if (m_pGlobalContext) {
+ nRet = m_pGlobalContext->decode_EmbedOrgnazation(pPause);
+ if (nRet != JBIG2_SUCCESS) {
+ m_ProcessiveStatus = FXCODEC_STATUS_ERROR;
+ return nRet;
+ }
+ }
+ m_bFirstPage = TRUE;
+ m_PauseStep = 0;
+ delete m_pPage;
+ JBIG2_ALLOC(m_pPage, CJBig2_Image(width, height, stride, pBuf));
+ m_bBufSpecified = TRUE;
+ if (m_pPage && pPause && pPause->NeedToPauseNow()) {
+ m_PauseStep = 1;
+ m_ProcessiveStatus = FXCODEC_STATUS_DECODE_TOBECONTINUE;
+ return nRet;
+ }
+ int ret = Continue(pPause);
+ return ret;
}
-int32_t CJBig2_Context::Continue(IFX_Pause* pPause)
-{
- m_ProcessiveStatus = FXCODEC_STATUS_DECODE_READY;
- int32_t nRet;
- if(m_PauseStep <= 1) {
- switch(m_nStreamType) {
- case JBIG2_FILE_STREAM:
- nRet = decodeFile(pPause);
- break;
- case JBIG2_SQUENTIAL_STREAM:
- nRet = decode_SquentialOrgnazation(pPause);
- break;
- case JBIG2_RANDOM_STREAM:
- if(m_bFirstPage) {
- nRet = decode_RandomOrgnazation_FirstPage(pPause);
- } else {
- nRet = decode_RandomOrgnazation(pPause);
- }
- break;
- case JBIG2_EMBED_STREAM:
- nRet = decode_EmbedOrgnazation(pPause);
- break;
- default:
- m_ProcessiveStatus = FXCODEC_STATUS_ERROR;
- return JBIG2_ERROR_STREAM_TYPE;
- }
- } else if(m_PauseStep == 2) {
+int32_t CJBig2_Context::Continue(IFX_Pause* pPause) {
+ m_ProcessiveStatus = FXCODEC_STATUS_DECODE_READY;
+ int32_t nRet;
+ if (m_PauseStep <= 1) {
+ switch (m_nStreamType) {
+ case JBIG2_FILE_STREAM:
+ nRet = decodeFile(pPause);
+ break;
+ case JBIG2_SQUENTIAL_STREAM:
nRet = decode_SquentialOrgnazation(pPause);
- } else if(m_PauseStep == 3) {
- nRet = decode_RandomOrgnazation_FirstPage(pPause);
- } else if(m_PauseStep == 4) {
- nRet = decode_RandomOrgnazation(pPause);
- } else if(m_PauseStep == 5) {
- m_ProcessiveStatus = FXCODEC_STATUS_DECODE_FINISH;
- return JBIG2_SUCCESS;
- }
- if(m_ProcessiveStatus == FXCODEC_STATUS_DECODE_TOBECONTINUE) {
- return nRet;
- }
- m_PauseStep = 5;
- if(!m_bBufSpecified && nRet == JBIG2_SUCCESS) {
- m_ProcessiveStatus = FXCODEC_STATUS_DECODE_FINISH;
- return JBIG2_SUCCESS;
- }
- if(nRet == JBIG2_SUCCESS) {
- m_ProcessiveStatus = FXCODEC_STATUS_DECODE_FINISH;
- } else {
+ break;
+ case JBIG2_RANDOM_STREAM:
+ if (m_bFirstPage) {
+ nRet = decode_RandomOrgnazation_FirstPage(pPause);
+ } else {
+ nRet = decode_RandomOrgnazation(pPause);
+ }
+ break;
+ case JBIG2_EMBED_STREAM:
+ nRet = decode_EmbedOrgnazation(pPause);
+ break;
+ default:
m_ProcessiveStatus = FXCODEC_STATUS_ERROR;
- }
+ return JBIG2_ERROR_STREAM_TYPE;
+ }
+ } else if (m_PauseStep == 2) {
+ nRet = decode_SquentialOrgnazation(pPause);
+ } else if (m_PauseStep == 3) {
+ nRet = decode_RandomOrgnazation_FirstPage(pPause);
+ } else if (m_PauseStep == 4) {
+ nRet = decode_RandomOrgnazation(pPause);
+ } else if (m_PauseStep == 5) {
+ m_ProcessiveStatus = FXCODEC_STATUS_DECODE_FINISH;
+ return JBIG2_SUCCESS;
+ }
+ if (m_ProcessiveStatus == FXCODEC_STATUS_DECODE_TOBECONTINUE) {
return nRet;
+ }
+ m_PauseStep = 5;
+ if (!m_bBufSpecified && nRet == JBIG2_SUCCESS) {
+ m_ProcessiveStatus = FXCODEC_STATUS_DECODE_FINISH;
+ return JBIG2_SUCCESS;
+ }
+ if (nRet == JBIG2_SUCCESS) {
+ m_ProcessiveStatus = FXCODEC_STATUS_DECODE_FINISH;
+ } else {
+ m_ProcessiveStatus = FXCODEC_STATUS_ERROR;
+ }
+ return nRet;
}
-int32_t CJBig2_Context::getNextPage(uint8_t *pBuf, int32_t width, int32_t height, int32_t stride, IFX_Pause* pPause)
-{
- int32_t nRet = JBIG2_ERROR_STREAM_TYPE;
- m_bFirstPage = FALSE;
- m_PauseStep = 0;
- delete m_pPage;
- JBIG2_ALLOC(m_pPage, CJBig2_Image(width, height, stride, pBuf));
- m_bBufSpecified = TRUE;
- if(m_pPage && pPause && pPause->NeedToPauseNow()) {
- m_PauseStep = 1;
- m_ProcessiveStatus = FXCODEC_STATUS_DECODE_TOBECONTINUE;
- return nRet;
- }
- return Continue(pPause);
- switch(m_nStreamType) {
- case JBIG2_FILE_STREAM:
- nRet = decodeFile(pPause);
- break;
- case JBIG2_SQUENTIAL_STREAM:
- nRet = decode_SquentialOrgnazation(pPause);
- break;
- case JBIG2_RANDOM_STREAM:
- nRet = decode_RandomOrgnazation(pPause);
- break;
- case JBIG2_EMBED_STREAM:
- nRet = decode_EmbedOrgnazation(pPause);
- break;
- default:
- return JBIG2_ERROR_STREAM_TYPE;
- }
+int32_t CJBig2_Context::getNextPage(uint8_t* pBuf,
+ int32_t width,
+ int32_t height,
+ int32_t stride,
+ IFX_Pause* pPause) {
+ int32_t nRet = JBIG2_ERROR_STREAM_TYPE;
+ m_bFirstPage = FALSE;
+ m_PauseStep = 0;
+ delete m_pPage;
+ JBIG2_ALLOC(m_pPage, CJBig2_Image(width, height, stride, pBuf));
+ m_bBufSpecified = TRUE;
+ if (m_pPage && pPause && pPause->NeedToPauseNow()) {
+ m_PauseStep = 1;
+ m_ProcessiveStatus = FXCODEC_STATUS_DECODE_TOBECONTINUE;
return nRet;
+ }
+ return Continue(pPause);
+ switch (m_nStreamType) {
+ case JBIG2_FILE_STREAM:
+ nRet = decodeFile(pPause);
+ break;
+ case JBIG2_SQUENTIAL_STREAM:
+ nRet = decode_SquentialOrgnazation(pPause);
+ break;
+ case JBIG2_RANDOM_STREAM:
+ nRet = decode_RandomOrgnazation(pPause);
+ break;
+ case JBIG2_EMBED_STREAM:
+ nRet = decode_EmbedOrgnazation(pPause);
+ break;
+ default:
+ return JBIG2_ERROR_STREAM_TYPE;
+ }
+ return nRet;
}
-int32_t CJBig2_Context::getFirstPage(CJBig2_Image **image, IFX_Pause* pPause)
-{
- int32_t nRet;
- m_bFirstPage = TRUE;
- m_PauseStep = 0;
- if(m_pGlobalContext) {
- nRet = m_pGlobalContext->decode_EmbedOrgnazation(pPause);
- if(nRet != JBIG2_SUCCESS) {
- return nRet;
- }
- }
- m_bBufSpecified = FALSE;
- return Continue(pPause);
+int32_t CJBig2_Context::getFirstPage(CJBig2_Image** image, IFX_Pause* pPause) {
+ int32_t nRet;
+ m_bFirstPage = TRUE;
+ m_PauseStep = 0;
+ if (m_pGlobalContext) {
+ nRet = m_pGlobalContext->decode_EmbedOrgnazation(pPause);
+ if (nRet != JBIG2_SUCCESS) {
+ return nRet;
+ }
+ }
+ m_bBufSpecified = FALSE;
+ return Continue(pPause);
}
-int32_t CJBig2_Context::getNextPage(CJBig2_Image **image, IFX_Pause* pPause)
-{
- int32_t nRet;
- m_bBufSpecified = FALSE;
- m_bFirstPage = FALSE;
- m_PauseStep = 0;
- switch(m_nStreamType) {
- case JBIG2_FILE_STREAM:
- nRet = decodeFile(pPause);
- break;
- case JBIG2_SQUENTIAL_STREAM:
- nRet = decode_SquentialOrgnazation(pPause);
- break;
- case JBIG2_RANDOM_STREAM:
- nRet = decode_RandomOrgnazation(pPause);
- break;
- case JBIG2_EMBED_STREAM:
- nRet = decode_EmbedOrgnazation(pPause);
- break;
- default:
- return JBIG2_ERROR_STREAM_TYPE;
- }
- if(nRet == JBIG2_SUCCESS) {
- *image = m_pPage;
- m_pPage = NULL;
- return JBIG2_SUCCESS;
- }
- return nRet;
+int32_t CJBig2_Context::getNextPage(CJBig2_Image** image, IFX_Pause* pPause) {
+ int32_t nRet;
+ m_bBufSpecified = FALSE;
+ m_bFirstPage = FALSE;
+ m_PauseStep = 0;
+ switch (m_nStreamType) {
+ case JBIG2_FILE_STREAM:
+ nRet = decodeFile(pPause);
+ break;
+ case JBIG2_SQUENTIAL_STREAM:
+ nRet = decode_SquentialOrgnazation(pPause);
+ break;
+ case JBIG2_RANDOM_STREAM:
+ nRet = decode_RandomOrgnazation(pPause);
+ break;
+ case JBIG2_EMBED_STREAM:
+ nRet = decode_EmbedOrgnazation(pPause);
+ break;
+ default:
+ return JBIG2_ERROR_STREAM_TYPE;
+ }
+ if (nRet == JBIG2_SUCCESS) {
+ *image = m_pPage;
+ m_pPage = NULL;
+ return JBIG2_SUCCESS;
+ }
+ return nRet;
}
-CJBig2_Segment *CJBig2_Context::findSegmentByNumber(FX_DWORD dwNumber)
-{
- CJBig2_Segment *pSeg;
- int32_t i;
- if(m_pGlobalContext) {
- pSeg = m_pGlobalContext->findSegmentByNumber(dwNumber);
- if(pSeg) {
- return pSeg;
- }
- }
- for(i = 0; i < m_pSegmentList->getLength(); i++) {
- pSeg = m_pSegmentList->getAt(i);
- if(pSeg->m_dwNumber == dwNumber) {
- return pSeg;
- }
- }
- return NULL;
+CJBig2_Segment* CJBig2_Context::findSegmentByNumber(FX_DWORD dwNumber) {
+ CJBig2_Segment* pSeg;
+ int32_t i;
+ if (m_pGlobalContext) {
+ pSeg = m_pGlobalContext->findSegmentByNumber(dwNumber);
+ if (pSeg) {
+ return pSeg;
+ }
+ }
+ for (i = 0; i < m_pSegmentList->getLength(); i++) {
+ pSeg = m_pSegmentList->getAt(i);
+ if (pSeg->m_dwNumber == dwNumber) {
+ return pSeg;
+ }
+ }
+ return NULL;
}
-CJBig2_Segment *CJBig2_Context::findReferredSegmentByTypeAndIndex(CJBig2_Segment *pSegment,
- uint8_t cType, int32_t nIndex)
-{
- CJBig2_Segment *pSeg;
- int32_t i, count;
- count = 0;
- for(i = 0; i < pSegment->m_nReferred_to_segment_count; i++) {
- pSeg = findSegmentByNumber(pSegment->m_pReferred_to_segment_numbers[i]);
- if(pSeg && pSeg->m_cFlags.s.type == cType) {
- if(count == nIndex) {
- return pSeg;
- } else {
- count ++;
- }
- }
- }
- return NULL;
+CJBig2_Segment* CJBig2_Context::findReferredSegmentByTypeAndIndex(
+ CJBig2_Segment* pSegment,
+ uint8_t cType,
+ int32_t nIndex) {
+ CJBig2_Segment* pSeg;
+ int32_t i, count;
+ count = 0;
+ for (i = 0; i < pSegment->m_nReferred_to_segment_count; i++) {
+ pSeg = findSegmentByNumber(pSegment->m_pReferred_to_segment_numbers[i]);
+ if (pSeg && pSeg->m_cFlags.s.type == cType) {
+ if (count == nIndex) {
+ return pSeg;
+ } else {
+ count++;
+ }
+ }
+ }
+ return NULL;
}
-int32_t CJBig2_Context::parseSegmentHeader(CJBig2_Segment *pSegment)
-{
- uint8_t cSSize, cPSize;
- uint8_t cTemp;
- FX_WORD wTemp;
- FX_DWORD dwTemp;
- if((m_pStream->readInteger(&pSegment->m_dwNumber) != 0)
- || (m_pStream->read1Byte(&pSegment->m_cFlags.c) != 0)) {
- goto failed;
- }
- cTemp = m_pStream->getCurByte();
- if((cTemp >> 5) == 7) {
- if(m_pStream->readInteger((FX_DWORD*)&pSegment->m_nReferred_to_segment_count) != 0) {
- goto failed;
- }
- pSegment->m_nReferred_to_segment_count &= 0x1fffffff;
- if (pSegment->m_nReferred_to_segment_count > JBIG2_MAX_REFERRED_SEGMENT_COUNT) {
- m_pModule->JBig2_Error("Too many referred segments.");
- return JBIG2_ERROR_LIMIT;
- }
- dwTemp = 5 + 4 + (pSegment->m_nReferred_to_segment_count + 1) / 8;
- } else {
- if(m_pStream->read1Byte(&cTemp) != 0) {
+int32_t CJBig2_Context::parseSegmentHeader(CJBig2_Segment* pSegment) {
+ uint8_t cSSize, cPSize;
+ uint8_t cTemp;
+ FX_WORD wTemp;
+ FX_DWORD dwTemp;
+ if ((m_pStream->readInteger(&pSegment->m_dwNumber) != 0) ||
+ (m_pStream->read1Byte(&pSegment->m_cFlags.c) != 0)) {
+ goto failed;
+ }
+ cTemp = m_pStream->getCurByte();
+ if ((cTemp >> 5) == 7) {
+ if (m_pStream->readInteger(
+ (FX_DWORD*)&pSegment->m_nReferred_to_segment_count) != 0) {
+ goto failed;
+ }
+ pSegment->m_nReferred_to_segment_count &= 0x1fffffff;
+ if (pSegment->m_nReferred_to_segment_count >
+ JBIG2_MAX_REFERRED_SEGMENT_COUNT) {
+ m_pModule->JBig2_Error("Too many referred segments.");
+ return JBIG2_ERROR_LIMIT;
+ }
+ dwTemp = 5 + 4 + (pSegment->m_nReferred_to_segment_count + 1) / 8;
+ } else {
+ if (m_pStream->read1Byte(&cTemp) != 0) {
+ goto failed;
+ }
+ pSegment->m_nReferred_to_segment_count = cTemp >> 5;
+ dwTemp = 5 + 1;
+ }
+ cSSize =
+ pSegment->m_dwNumber > 65536 ? 4 : pSegment->m_dwNumber > 256 ? 2 : 1;
+ cPSize = pSegment->m_cFlags.s.page_association_size ? 4 : 1;
+ if (pSegment->m_nReferred_to_segment_count) {
+ pSegment->m_pReferred_to_segment_numbers =
+ (FX_DWORD*)m_pModule->JBig2_Malloc2(
+ sizeof(FX_DWORD), pSegment->m_nReferred_to_segment_count);
+ for (int32_t i = 0; i < pSegment->m_nReferred_to_segment_count; i++) {
+ switch (cSSize) {
+ case 1:
+ if (m_pStream->read1Byte(&cTemp) != 0) {
goto failed;
- }
- pSegment->m_nReferred_to_segment_count = cTemp >> 5;
- dwTemp = 5 + 1;
- }
- cSSize = pSegment->m_dwNumber > 65536 ? 4 : pSegment->m_dwNumber > 256 ? 2 : 1;
- cPSize = pSegment->m_cFlags.s.page_association_size ? 4 : 1;
- if(pSegment->m_nReferred_to_segment_count) {
- pSegment->m_pReferred_to_segment_numbers = (FX_DWORD*)m_pModule->JBig2_Malloc2(
- sizeof(FX_DWORD), pSegment->m_nReferred_to_segment_count);
- for(int32_t i = 0; i < pSegment->m_nReferred_to_segment_count; i++) {
- switch(cSSize) {
- case 1:
- if(m_pStream->read1Byte(&cTemp) != 0) {
- goto failed;
- }
- pSegment->m_pReferred_to_segment_numbers[i] = cTemp;
- break;
- case 2:
- if(m_pStream->readShortInteger(&wTemp) != 0) {
- goto failed;
- }
- pSegment->m_pReferred_to_segment_numbers[i] = wTemp;
- break;
- case 4:
- if(m_pStream->readInteger(&dwTemp) != 0) {
- goto failed;
- }
- pSegment->m_pReferred_to_segment_numbers[i] = dwTemp;
- break;
- }
- if (pSegment->m_pReferred_to_segment_numbers[i] >= pSegment->m_dwNumber) {
- m_pModule->JBig2_Error("The referred segment number is greater than this segment number.");
- goto failed;
- }
- }
- }
- if(cPSize == 1) {
- if(m_pStream->read1Byte(&cTemp) != 0) {
+ }
+ pSegment->m_pReferred_to_segment_numbers[i] = cTemp;
+ break;
+ case 2:
+ if (m_pStream->readShortInteger(&wTemp) != 0) {
goto failed;
- }
- pSegment->m_dwPage_association = cTemp;
- } else {
- if(m_pStream->readInteger(&pSegment->m_dwPage_association) != 0) {
+ }
+ pSegment->m_pReferred_to_segment_numbers[i] = wTemp;
+ break;
+ case 4:
+ if (m_pStream->readInteger(&dwTemp) != 0) {
goto failed;
- }
- }
- if(m_pStream->readInteger(&pSegment->m_dwData_length) != 0) {
+ }
+ pSegment->m_pReferred_to_segment_numbers[i] = dwTemp;
+ break;
+ }
+ if (pSegment->m_pReferred_to_segment_numbers[i] >= pSegment->m_dwNumber) {
+ m_pModule->JBig2_Error(
+ "The referred segment number is greater than this segment number.");
goto failed;
- }
- pSegment->m_pData = m_pStream->getPointer();
- pSegment->m_State = JBIG2_SEGMENT_DATA_UNPARSED;
- return JBIG2_SUCCESS;
+ }
+ }
+ }
+ if (cPSize == 1) {
+ if (m_pStream->read1Byte(&cTemp) != 0) {
+ goto failed;
+ }
+ pSegment->m_dwPage_association = cTemp;
+ } else {
+ if (m_pStream->readInteger(&pSegment->m_dwPage_association) != 0) {
+ goto failed;
+ }
+ }
+ if (m_pStream->readInteger(&pSegment->m_dwData_length) != 0) {
+ goto failed;
+ }
+ pSegment->m_pData = m_pStream->getPointer();
+ pSegment->m_State = JBIG2_SEGMENT_DATA_UNPARSED;
+ return JBIG2_SUCCESS;
failed:
- m_pModule->JBig2_Error("header too short.");
- return JBIG2_ERROR_TOO_SHORT;
+ m_pModule->JBig2_Error("header too short.");
+ return JBIG2_ERROR_TOO_SHORT;
}
-int32_t CJBig2_Context::parseSegmentData(CJBig2_Segment *pSegment, IFX_Pause* pPause)
-{
- int32_t ret = ProcessiveParseSegmentData(pSegment, pPause);
- while(m_ProcessiveStatus == FXCODEC_STATUS_DECODE_TOBECONTINUE && m_pStream->getByteLeft() > 0) {
- ret = ProcessiveParseSegmentData(pSegment, pPause);
- }
- return ret;
+int32_t CJBig2_Context::parseSegmentData(CJBig2_Segment* pSegment,
+ IFX_Pause* pPause) {
+ int32_t ret = ProcessiveParseSegmentData(pSegment, pPause);
+ while (m_ProcessiveStatus == FXCODEC_STATUS_DECODE_TOBECONTINUE &&
+ m_pStream->getByteLeft() > 0) {
+ ret = ProcessiveParseSegmentData(pSegment, pPause);
+ }
+ return ret;
}
-int32_t CJBig2_Context::ProcessiveParseSegmentData(CJBig2_Segment *pSegment, IFX_Pause* pPause)
-{
- switch(pSegment->m_cFlags.s.type) {
- case 0:
- return parseSymbolDict(pSegment, pPause);
- case 4:
- case 6:
- case 7:
- if(m_nState == JBIG2_OUT_OF_PAGE) {
- goto failed2;
- } else {
- return parseTextRegion(pSegment);
- }
- case 16:
- return parsePatternDict(pSegment, pPause);
- case 20:
- case 22:
- case 23:
- if(m_nState == JBIG2_OUT_OF_PAGE) {
- goto failed2;
- } else {
- return parseHalftoneRegion(pSegment, pPause);
- }
- case 36:
- case 38:
- case 39:
- if(m_nState == JBIG2_OUT_OF_PAGE) {
- goto failed2;
- } else {
- return parseGenericRegion(pSegment, pPause);
- }
- case 40:
- case 42:
- case 43:
- if(m_nState == JBIG2_OUT_OF_PAGE) {
- goto failed2;
- } else {
- return parseGenericRefinementRegion(pSegment);
- }
- case 48: {
- FX_WORD wTemp;
- JBig2PageInfo *pPageInfo;
- JBIG2_ALLOC(pPageInfo, JBig2PageInfo);
- if((m_pStream->readInteger(&pPageInfo->m_dwWidth) != 0)
- || (m_pStream->readInteger(&pPageInfo->m_dwHeight) != 0)
- || (m_pStream->readInteger(&pPageInfo->m_dwResolutionX) != 0)
- || (m_pStream->readInteger(&pPageInfo->m_dwResolutionY) != 0)
- || (m_pStream->read1Byte(&pPageInfo->m_cFlags) != 0)
- || (m_pStream->readShortInteger(&wTemp) != 0)) {
- delete pPageInfo;
- goto failed1;
- }
- pPageInfo->m_bIsStriped = ((wTemp >> 15) & 1) ? 1 : 0;
- pPageInfo->m_wMaxStripeSize = wTemp & 0x7fff;
- if((pPageInfo->m_dwHeight == 0xffffffff) && (pPageInfo->m_bIsStriped != 1)) {
- m_pModule->JBig2_Warn("page height = 0xffffffff buf stripe field is 0");
- pPageInfo->m_bIsStriped = 1;
- }
- if(!m_bBufSpecified) {
- delete m_pPage;
- if(pPageInfo->m_dwHeight == 0xffffffff) {
- JBIG2_ALLOC(m_pPage, CJBig2_Image(pPageInfo->m_dwWidth, pPageInfo->m_wMaxStripeSize));
- } else {
- JBIG2_ALLOC(m_pPage, CJBig2_Image(pPageInfo->m_dwWidth, pPageInfo->m_dwHeight));
- }
- }
- m_pPage->fill((pPageInfo->m_cFlags & 4) ? 1 : 0);
- m_pPageInfoList->addItem(pPageInfo);
- m_nState = JBIG2_IN_PAGE;
- }
- break;
- case 49:
- m_nState = JBIG2_OUT_OF_PAGE;
- return JBIG2_END_OF_PAGE;
- break;
- case 50:
- m_pStream->offset(pSegment->m_dwData_length);
- break;
- case 51:
- return JBIG2_END_OF_FILE;
- case 52:
- m_pStream->offset(pSegment->m_dwData_length);
- break;
- case 53:
- return parseTable(pSegment);
- case 62:
- m_pStream->offset(pSegment->m_dwData_length);
- break;
- default:
- break;
- }
- return JBIG2_SUCCESS;
+int32_t CJBig2_Context::ProcessiveParseSegmentData(CJBig2_Segment* pSegment,
+ IFX_Pause* pPause) {
+ switch (pSegment->m_cFlags.s.type) {
+ case 0:
+ return parseSymbolDict(pSegment, pPause);
+ case 4:
+ case 6:
+ case 7:
+ if (m_nState == JBIG2_OUT_OF_PAGE) {
+ goto failed2;
+ } else {
+ return parseTextRegion(pSegment);
+ }
+ case 16:
+ return parsePatternDict(pSegment, pPause);
+ case 20:
+ case 22:
+ case 23:
+ if (m_nState == JBIG2_OUT_OF_PAGE) {
+ goto failed2;
+ } else {
+ return parseHalftoneRegion(pSegment, pPause);
+ }
+ case 36:
+ case 38:
+ case 39:
+ if (m_nState == JBIG2_OUT_OF_PAGE) {
+ goto failed2;
+ } else {
+ return parseGenericRegion(pSegment, pPause);
+ }
+ case 40:
+ case 42:
+ case 43:
+ if (m_nState == JBIG2_OUT_OF_PAGE) {
+ goto failed2;
+ } else {
+ return parseGenericRefinementRegion(pSegment);
+ }
+ case 48: {
+ FX_WORD wTemp;
+ JBig2PageInfo* pPageInfo;
+ JBIG2_ALLOC(pPageInfo, JBig2PageInfo);
+ if ((m_pStream->readInteger(&pPageInfo->m_dwWidth) != 0) ||
+ (m_pStream->readInteger(&pPageInfo->m_dwHeight) != 0) ||
+ (m_pStream->readInteger(&pPageInfo->m_dwResolutionX) != 0) ||
+ (m_pStream->readInteger(&pPageInfo->m_dwResolutionY) != 0) ||
+ (m_pStream->read1Byte(&pPageInfo->m_cFlags) != 0) ||
+ (m_pStream->readShortInteger(&wTemp) != 0)) {
+ delete pPageInfo;
+ goto failed1;
+ }
+ pPageInfo->m_bIsStriped = ((wTemp >> 15) & 1) ? 1 : 0;
+ pPageInfo->m_wMaxStripeSize = wTemp & 0x7fff;
+ if ((pPageInfo->m_dwHeight == 0xffffffff) &&
+ (pPageInfo->m_bIsStriped != 1)) {
+ m_pModule->JBig2_Warn("page height = 0xffffffff buf stripe field is 0");
+ pPageInfo->m_bIsStriped = 1;
+ }
+ if (!m_bBufSpecified) {
+ delete m_pPage;
+ if (pPageInfo->m_dwHeight == 0xffffffff) {
+ JBIG2_ALLOC(m_pPage, CJBig2_Image(pPageInfo->m_dwWidth,
+ pPageInfo->m_wMaxStripeSize));
+ } else {
+ JBIG2_ALLOC(m_pPage, CJBig2_Image(pPageInfo->m_dwWidth,
+ pPageInfo->m_dwHeight));
+ }
+ }
+ m_pPage->fill((pPageInfo->m_cFlags & 4) ? 1 : 0);
+ m_pPageInfoList->addItem(pPageInfo);
+ m_nState = JBIG2_IN_PAGE;
+ } break;
+ case 49:
+ m_nState = JBIG2_OUT_OF_PAGE;
+ return JBIG2_END_OF_PAGE;
+ break;
+ case 50:
+ m_pStream->offset(pSegment->m_dwData_length);
+ break;
+ case 51:
+ return JBIG2_END_OF_FILE;
+ case 52:
+ m_pStream->offset(pSegment->m_dwData_length);
+ break;
+ case 53:
+ return parseTable(pSegment);
+ case 62:
+ m_pStream->offset(pSegment->m_dwData_length);
+ break;
+ default:
+ break;
+ }
+ return JBIG2_SUCCESS;
failed1:
- m_pModule->JBig2_Error("segment data too short.");
- return JBIG2_ERROR_TOO_SHORT;
+ m_pModule->JBig2_Error("segment data too short.");
+ return JBIG2_ERROR_TOO_SHORT;
failed2:
- m_pModule->JBig2_Error("segment syntax error.");
- return JBIG2_ERROR_FATAL;
+ m_pModule->JBig2_Error("segment syntax error.");
+ return JBIG2_ERROR_FATAL;
}
-int32_t CJBig2_Context::parseSymbolDict(CJBig2_Segment *pSegment, IFX_Pause* pPause)
-{
- FX_DWORD dwTemp;
- FX_WORD wFlags;
- uint8_t cSDHUFFDH, cSDHUFFDW, cSDHUFFBMSIZE, cSDHUFFAGGINST;
- CJBig2_HuffmanTable *Table_B1 = NULL, *Table_B2 = NULL, *Table_B3 = NULL, *Table_B4 = NULL, *Table_B5 = NULL;
- int32_t i, nIndex, nRet;
- CJBig2_Segment *pSeg = NULL, *pLRSeg = NULL;
- FX_BOOL bUsed;
- CJBig2_Image ** SDINSYMS = NULL;
- CJBig2_SDDProc *pSymbolDictDecoder;
- JBig2ArithCtx *gbContext = NULL, *grContext = NULL;
- CJBig2_ArithDecoder *pArithDecoder;
- JBIG2_ALLOC(pSymbolDictDecoder, CJBig2_SDDProc());
- uint8_t *key = pSegment->m_pData;
- FX_BOOL cache_hit = false;
- if(m_pStream->readShortInteger(&wFlags) != 0) {
- m_pModule->JBig2_Error("symbol dictionary segment : data header too short.");
+int32_t CJBig2_Context::parseSymbolDict(CJBig2_Segment* pSegment,
+ IFX_Pause* pPause) {
+ FX_DWORD dwTemp;
+ FX_WORD wFlags;
+ uint8_t cSDHUFFDH, cSDHUFFDW, cSDHUFFBMSIZE, cSDHUFFAGGINST;
+ CJBig2_HuffmanTable *Table_B1 = NULL, *Table_B2 = NULL, *Table_B3 = NULL,
+ *Table_B4 = NULL, *Table_B5 = NULL;
+ int32_t i, nIndex, nRet;
+ CJBig2_Segment *pSeg = NULL, *pLRSeg = NULL;
+ FX_BOOL bUsed;
+ CJBig2_Image** SDINSYMS = NULL;
+ CJBig2_SDDProc* pSymbolDictDecoder;
+ JBig2ArithCtx *gbContext = NULL, *grContext = NULL;
+ CJBig2_ArithDecoder* pArithDecoder;
+ JBIG2_ALLOC(pSymbolDictDecoder, CJBig2_SDDProc());
+ uint8_t* key = pSegment->m_pData;
+ FX_BOOL cache_hit = false;
+ if (m_pStream->readShortInteger(&wFlags) != 0) {
+ m_pModule->JBig2_Error(
+ "symbol dictionary segment : data header too short.");
+ nRet = JBIG2_ERROR_TOO_SHORT;
+ goto failed;
+ }
+ pSymbolDictDecoder->SDHUFF = wFlags & 0x0001;
+ pSymbolDictDecoder->SDREFAGG = (wFlags >> 1) & 0x0001;
+ pSymbolDictDecoder->SDTEMPLATE = (wFlags >> 10) & 0x0003;
+ pSymbolDictDecoder->SDRTEMPLATE = (wFlags >> 12) & 0x0003;
+ cSDHUFFDH = (wFlags >> 2) & 0x0003;
+ cSDHUFFDW = (wFlags >> 4) & 0x0003;
+ cSDHUFFBMSIZE = (wFlags >> 6) & 0x0001;
+ cSDHUFFAGGINST = (wFlags >> 7) & 0x0001;
+ if (pSymbolDictDecoder->SDHUFF == 0) {
+ if (pSymbolDictDecoder->SDTEMPLATE == 0) {
+ dwTemp = 8;
+ } else {
+ dwTemp = 2;
+ }
+ for (i = 0; i < (int32_t)dwTemp; i++) {
+ if (m_pStream->read1Byte((uint8_t*)&pSymbolDictDecoder->SDAT[i]) != 0) {
+ m_pModule->JBig2_Error(
+ "symbol dictionary segment : data header too short.");
nRet = JBIG2_ERROR_TOO_SHORT;
goto failed;
- }
- pSymbolDictDecoder->SDHUFF = wFlags & 0x0001;
- pSymbolDictDecoder->SDREFAGG = (wFlags >> 1) & 0x0001;
- pSymbolDictDecoder->SDTEMPLATE = (wFlags >> 10) & 0x0003;
- pSymbolDictDecoder->SDRTEMPLATE = (wFlags >> 12) & 0x0003;
- cSDHUFFDH = (wFlags >> 2) & 0x0003;
- cSDHUFFDW = (wFlags >> 4) & 0x0003;
- cSDHUFFBMSIZE = (wFlags >> 6) & 0x0001;
- cSDHUFFAGGINST = (wFlags >> 7) & 0x0001;
- if(pSymbolDictDecoder->SDHUFF == 0) {
- if(pSymbolDictDecoder->SDTEMPLATE == 0) {
- dwTemp = 8;
- } else {
- dwTemp = 2;
- }
- for(i = 0; i < (int32_t)dwTemp; i++) {
- if(m_pStream->read1Byte((uint8_t*)&pSymbolDictDecoder->SDAT[i]) != 0) {
- m_pModule->JBig2_Error("symbol dictionary segment : data header too short.");
- nRet = JBIG2_ERROR_TOO_SHORT;
- goto failed;
- }
- }
- }
- if((pSymbolDictDecoder->SDREFAGG == 1) && (pSymbolDictDecoder->SDRTEMPLATE == 0)) {
- for(i = 0; i < 4; i++) {
- if(m_pStream->read1Byte((uint8_t*)&pSymbolDictDecoder->SDRAT[i]) != 0) {
- m_pModule->JBig2_Error("symbol dictionary segment : data header too short.");
- nRet = JBIG2_ERROR_TOO_SHORT;
- goto failed;
- }
- }
- }
- if((m_pStream->readInteger(&pSymbolDictDecoder->SDNUMEXSYMS) != 0)
- || (m_pStream->readInteger(&pSymbolDictDecoder->SDNUMNEWSYMS) != 0)) {
- m_pModule->JBig2_Error("symbol dictionary segment : data header too short.");
+ }
+ }
+ }
+ if ((pSymbolDictDecoder->SDREFAGG == 1) &&
+ (pSymbolDictDecoder->SDRTEMPLATE == 0)) {
+ for (i = 0; i < 4; i++) {
+ if (m_pStream->read1Byte((uint8_t*)&pSymbolDictDecoder->SDRAT[i]) != 0) {
+ m_pModule->JBig2_Error(
+ "symbol dictionary segment : data header too short.");
nRet = JBIG2_ERROR_TOO_SHORT;
goto failed;
- }
- if (pSymbolDictDecoder->SDNUMEXSYMS > JBIG2_MAX_EXPORT_SYSMBOLS
- || pSymbolDictDecoder->SDNUMNEWSYMS > JBIG2_MAX_NEW_SYSMBOLS) {
- m_pModule->JBig2_Error("symbol dictionary segment : too many export/new symbols.");
- nRet = JBIG2_ERROR_LIMIT;
+ }
+ }
+ }
+ if ((m_pStream->readInteger(&pSymbolDictDecoder->SDNUMEXSYMS) != 0) ||
+ (m_pStream->readInteger(&pSymbolDictDecoder->SDNUMNEWSYMS) != 0)) {
+ m_pModule->JBig2_Error(
+ "symbol dictionary segment : data header too short.");
+ nRet = JBIG2_ERROR_TOO_SHORT;
+ goto failed;
+ }
+ if (pSymbolDictDecoder->SDNUMEXSYMS > JBIG2_MAX_EXPORT_SYSMBOLS ||
+ pSymbolDictDecoder->SDNUMNEWSYMS > JBIG2_MAX_NEW_SYSMBOLS) {
+ m_pModule->JBig2_Error(
+ "symbol dictionary segment : too many export/new symbols.");
+ nRet = JBIG2_ERROR_LIMIT;
+ goto failed;
+ }
+ for (i = 0; i < pSegment->m_nReferred_to_segment_count; i++) {
+ if (!findSegmentByNumber(pSegment->m_pReferred_to_segment_numbers[i])) {
+ m_pModule->JBig2_Error(
+ "symbol dictionary segment : can't find refered to segments");
+ nRet = JBIG2_ERROR_FATAL;
+ goto failed;
+ }
+ }
+ pSymbolDictDecoder->SDNUMINSYMS = 0;
+ for (i = 0; i < pSegment->m_nReferred_to_segment_count; i++) {
+ pSeg = findSegmentByNumber(pSegment->m_pReferred_to_segment_numbers[i]);
+ if (pSeg->m_cFlags.s.type == 0) {
+ pSymbolDictDecoder->SDNUMINSYMS += pSeg->m_Result.sd->SDNUMEXSYMS;
+ pLRSeg = pSeg;
+ }
+ }
+ if (pSymbolDictDecoder->SDNUMINSYMS == 0) {
+ SDINSYMS = NULL;
+ } else {
+ SDINSYMS = (CJBig2_Image**)m_pModule->JBig2_Malloc2(
+ sizeof(CJBig2_Image*), pSymbolDictDecoder->SDNUMINSYMS);
+ dwTemp = 0;
+ for (i = 0; i < pSegment->m_nReferred_to_segment_count; i++) {
+ pSeg = findSegmentByNumber(pSegment->m_pReferred_to_segment_numbers[i]);
+ if (pSeg->m_cFlags.s.type == 0) {
+ JBIG2_memcpy(SDINSYMS + dwTemp, pSeg->m_Result.sd->SDEXSYMS,
+ pSeg->m_Result.sd->SDNUMEXSYMS * sizeof(CJBig2_Image*));
+ dwTemp += pSeg->m_Result.sd->SDNUMEXSYMS;
+ }
+ }
+ }
+ pSymbolDictDecoder->SDINSYMS = SDINSYMS;
+ if (pSymbolDictDecoder->SDHUFF == 1) {
+ if ((cSDHUFFDH == 2) || (cSDHUFFDW == 2)) {
+ m_pModule->JBig2_Error(
+ "symbol dictionary segment : SDHUFFDH=2 or SDHUFFDW=2 is not "
+ "permitted.");
+ nRet = JBIG2_ERROR_FATAL;
+ goto failed;
+ }
+ nIndex = 0;
+ if (cSDHUFFDH == 0) {
+ JBIG2_ALLOC(Table_B4, CJBig2_HuffmanTable(HuffmanTable_B4,
+ sizeof(HuffmanTable_B4) /
+ sizeof(JBig2TableLine),
+ HuffmanTable_HTOOB_B4));
+ pSymbolDictDecoder->SDHUFFDH = Table_B4;
+ } else if (cSDHUFFDH == 1) {
+ JBIG2_ALLOC(Table_B5, CJBig2_HuffmanTable(HuffmanTable_B5,
+ sizeof(HuffmanTable_B5) /
+ sizeof(JBig2TableLine),
+ HuffmanTable_HTOOB_B5));
+ pSymbolDictDecoder->SDHUFFDH = Table_B5;
+ } else {
+ pSeg = findReferredSegmentByTypeAndIndex(pSegment, 53, nIndex++);
+ if (!pSeg) {
+ m_pModule->JBig2_Error(
+ "symbol dictionary segment : SDHUFFDH can't find user supplied "
+ "table.");
+ nRet = JBIG2_ERROR_FATAL;
goto failed;
- }
- for(i = 0; i < pSegment->m_nReferred_to_segment_count; i++) {
- if(!findSegmentByNumber(pSegment->m_pReferred_to_segment_numbers[i])) {
- m_pModule->JBig2_Error("symbol dictionary segment : can't find refered to segments");
- nRet = JBIG2_ERROR_FATAL;
- goto failed;
- }
- }
- pSymbolDictDecoder->SDNUMINSYMS = 0;
- for(i = 0; i < pSegment->m_nReferred_to_segment_count; i++) {
- pSeg = findSegmentByNumber(pSegment->m_pReferred_to_segment_numbers[i]);
- if(pSeg->m_cFlags.s.type == 0) {
- pSymbolDictDecoder->SDNUMINSYMS += pSeg->m_Result.sd->SDNUMEXSYMS;
- pLRSeg = pSeg;
- }
- }
- if(pSymbolDictDecoder->SDNUMINSYMS == 0) {
- SDINSYMS = NULL;
+ }
+ pSymbolDictDecoder->SDHUFFDH = pSeg->m_Result.ht;
+ }
+ if (cSDHUFFDW == 0) {
+ JBIG2_ALLOC(Table_B2, CJBig2_HuffmanTable(HuffmanTable_B2,
+ sizeof(HuffmanTable_B2) /
+ sizeof(JBig2TableLine),
+ HuffmanTable_HTOOB_B2));
+ pSymbolDictDecoder->SDHUFFDW = Table_B2;
+ } else if (cSDHUFFDW == 1) {
+ JBIG2_ALLOC(Table_B3, CJBig2_HuffmanTable(HuffmanTable_B3,
+ sizeof(HuffmanTable_B3) /
+ sizeof(JBig2TableLine),
+ HuffmanTable_HTOOB_B3));
+ pSymbolDictDecoder->SDHUFFDW = Table_B3;
} else {
- SDINSYMS = (CJBig2_Image**)m_pModule->JBig2_Malloc2(
- sizeof(CJBig2_Image*), pSymbolDictDecoder->SDNUMINSYMS);
- dwTemp = 0;
- for(i = 0; i < pSegment->m_nReferred_to_segment_count; i++) {
- pSeg = findSegmentByNumber(pSegment->m_pReferred_to_segment_numbers[i]);
- if(pSeg->m_cFlags.s.type == 0) {
- JBIG2_memcpy(SDINSYMS + dwTemp, pSeg->m_Result.sd->SDEXSYMS,
- pSeg->m_Result.sd->SDNUMEXSYMS * sizeof(CJBig2_Image*));
- dwTemp += pSeg->m_Result.sd->SDNUMEXSYMS;
- }
- }
- }
- pSymbolDictDecoder->SDINSYMS = SDINSYMS;
- if(pSymbolDictDecoder->SDHUFF == 1) {
- if((cSDHUFFDH == 2) || (cSDHUFFDW == 2)) {
- m_pModule->JBig2_Error("symbol dictionary segment : SDHUFFDH=2 or SDHUFFDW=2 is not permitted.");
- nRet = JBIG2_ERROR_FATAL;
- goto failed;
- }
- nIndex = 0;
- if(cSDHUFFDH == 0) {
- JBIG2_ALLOC(Table_B4, CJBig2_HuffmanTable(HuffmanTable_B4,
- sizeof(HuffmanTable_B4) / sizeof(JBig2TableLine), HuffmanTable_HTOOB_B4));
- pSymbolDictDecoder->SDHUFFDH = Table_B4;
- } else if(cSDHUFFDH == 1) {
- JBIG2_ALLOC(Table_B5, CJBig2_HuffmanTable(HuffmanTable_B5,
- sizeof(HuffmanTable_B5) / sizeof(JBig2TableLine), HuffmanTable_HTOOB_B5));
- pSymbolDictDecoder->SDHUFFDH = Table_B5;
- } else {
- pSeg = findReferredSegmentByTypeAndIndex(pSegment, 53, nIndex++);
- if(!pSeg) {
- m_pModule->JBig2_Error("symbol dictionary segment : SDHUFFDH can't find user supplied table.");
- nRet = JBIG2_ERROR_FATAL;
- goto failed;
- }
- pSymbolDictDecoder->SDHUFFDH = pSeg->m_Result.ht;
- }
- if(cSDHUFFDW == 0) {
- JBIG2_ALLOC(Table_B2, CJBig2_HuffmanTable(HuffmanTable_B2,
- sizeof(HuffmanTable_B2) / sizeof(JBig2TableLine), HuffmanTable_HTOOB_B2));
- pSymbolDictDecoder->SDHUFFDW = Table_B2;
- } else if(cSDHUFFDW == 1) {
- JBIG2_ALLOC(Table_B3, CJBig2_HuffmanTable(HuffmanTable_B3,
- sizeof(HuffmanTable_B3) / sizeof(JBig2TableLine), HuffmanTable_HTOOB_B3));
- pSymbolDictDecoder->SDHUFFDW = Table_B3;
- } else {
- pSeg = findReferredSegmentByTypeAndIndex(pSegment, 53, nIndex++);
- if(!pSeg) {
- m_pModule->JBig2_Error("symbol dictionary segment : SDHUFFDW can't find user supplied table.");
- nRet = JBIG2_ERROR_FATAL;
- goto failed;
- }
- pSymbolDictDecoder->SDHUFFDW = pSeg->m_Result.ht;
- }
- if(cSDHUFFBMSIZE == 0) {
- JBIG2_ALLOC(Table_B1, CJBig2_HuffmanTable(HuffmanTable_B1,
- sizeof(HuffmanTable_B1) / sizeof(JBig2TableLine), HuffmanTable_HTOOB_B1));
- pSymbolDictDecoder->SDHUFFBMSIZE = Table_B1;
- } else {
- pSeg = findReferredSegmentByTypeAndIndex(pSegment, 53, nIndex++);
- if(!pSeg) {
- m_pModule->JBig2_Error("symbol dictionary segment : SDHUFFBMSIZE can't find user supplied table.");
- nRet = JBIG2_ERROR_FATAL;
- goto failed;
- }
- pSymbolDictDecoder->SDHUFFBMSIZE = pSeg->m_Result.ht;
- }
- if(pSymbolDictDecoder->SDREFAGG == 1) {
- if(cSDHUFFAGGINST == 0) {
- if(!Table_B1) {
- JBIG2_ALLOC(Table_B1, CJBig2_HuffmanTable(HuffmanTable_B1,
- sizeof(HuffmanTable_B1) / sizeof(JBig2TableLine), HuffmanTable_HTOOB_B1));
- }
- pSymbolDictDecoder->SDHUFFAGGINST = Table_B1;
- } else {
- pSeg = findReferredSegmentByTypeAndIndex(pSegment, 53, nIndex++);
- if(!pSeg) {
- m_pModule->JBig2_Error("symbol dictionary segment : SDHUFFAGGINST can't find user supplied table.");
- nRet = JBIG2_ERROR_FATAL;
- goto failed;
- }
- pSymbolDictDecoder->SDHUFFAGGINST = pSeg->m_Result.ht;
- }
- }
- }
- if((wFlags & 0x0100) && pLRSeg && pLRSeg->m_Result.sd->m_bContextRetained) {
- if (pSymbolDictDecoder->SDHUFF == 0) {
- dwTemp = pSymbolDictDecoder->SDTEMPLATE == 0 ? 65536 : pSymbolDictDecoder->SDTEMPLATE == 1 ?
- 8192 : 1024;
- gbContext = (JBig2ArithCtx*)m_pModule->JBig2_Malloc2(sizeof(JBig2ArithCtx), dwTemp);
- JBIG2_memcpy(gbContext, pLRSeg->m_Result.sd->m_gbContext, sizeof(JBig2ArithCtx)*dwTemp);
- }
- if (pSymbolDictDecoder->SDREFAGG == 1) {
- dwTemp = pSymbolDictDecoder->SDRTEMPLATE ? 1 << 10 : 1 << 13;
- grContext = (JBig2ArithCtx*)m_pModule->JBig2_Malloc2(sizeof(JBig2ArithCtx), dwTemp);
- JBIG2_memcpy(grContext, pLRSeg->m_Result.sd->m_grContext, sizeof(JBig2ArithCtx)*dwTemp);
- }
+ pSeg = findReferredSegmentByTypeAndIndex(pSegment, 53, nIndex++);
+ if (!pSeg) {
+ m_pModule->JBig2_Error(
+ "symbol dictionary segment : SDHUFFDW can't find user supplied "
+ "table.");
+ nRet = JBIG2_ERROR_FATAL;
+ goto failed;
+ }
+ pSymbolDictDecoder->SDHUFFDW = pSeg->m_Result.ht;
+ }
+ if (cSDHUFFBMSIZE == 0) {
+ JBIG2_ALLOC(Table_B1, CJBig2_HuffmanTable(HuffmanTable_B1,
+ sizeof(HuffmanTable_B1) /
+ sizeof(JBig2TableLine),
+ HuffmanTable_HTOOB_B1));
+ pSymbolDictDecoder->SDHUFFBMSIZE = Table_B1;
} else {
- if (pSymbolDictDecoder->SDHUFF == 0) {
- dwTemp = pSymbolDictDecoder->SDTEMPLATE == 0 ? 65536 : pSymbolDictDecoder->SDTEMPLATE == 1 ?
- 8192 : 1024;
- gbContext = (JBig2ArithCtx*)m_pModule->JBig2_Malloc2(sizeof(JBig2ArithCtx), dwTemp);
- JBIG2_memset(gbContext, 0, sizeof(JBig2ArithCtx)*dwTemp);
- }
- if (pSymbolDictDecoder->SDREFAGG == 1) {
- dwTemp = pSymbolDictDecoder->SDRTEMPLATE ? 1 << 10 : 1 << 13;
- grContext = (JBig2ArithCtx*)m_pModule->JBig2_Malloc2(sizeof(JBig2ArithCtx), dwTemp);
- JBIG2_memset(grContext, 0, sizeof(JBig2ArithCtx)*dwTemp);
- }
- }
- pSegment->m_nResultType = JBIG2_SYMBOL_DICT_POINTER;
- for(std::list<CJBig2_CachePair>::iterator it =
- m_pSymbolDictCache->begin(); it != m_pSymbolDictCache->end(); ++it) {
- if (it->first == key) {
- pSegment->m_Result.sd = it->second->DeepCopy();
- m_pSymbolDictCache->push_front(*it);
- m_pSymbolDictCache->erase(it);
- cache_hit = true;
- break;
- }
- }
- if (!cache_hit) {
- if(pSymbolDictDecoder->SDHUFF == 0) {
- JBIG2_ALLOC(pArithDecoder, CJBig2_ArithDecoder(m_pStream));
- pSegment->m_Result.sd = pSymbolDictDecoder->decode_Arith(pArithDecoder, gbContext, grContext);
- delete pArithDecoder;
- if(pSegment->m_Result.sd == NULL) {
- nRet = JBIG2_ERROR_FATAL;
- goto failed;
- }
- m_pStream->alignByte();
- m_pStream->offset(2);
- } else {
- pSegment->m_Result.sd = pSymbolDictDecoder->decode_Huffman(m_pStream, gbContext, grContext, pPause);
- if(pSegment->m_Result.sd == NULL) {
- nRet = JBIG2_ERROR_FATAL;
- goto failed;
- }
- m_pStream->alignByte();
- }
- CJBig2_SymbolDict *value = pSegment->m_Result.sd->DeepCopy();
- if (value && kSymbolDictCacheMaxSize > 0) {
- while (m_pSymbolDictCache->size() >= kSymbolDictCacheMaxSize) {
- delete m_pSymbolDictCache->back().second;
- m_pSymbolDictCache->pop_back();
- }
- m_pSymbolDictCache->push_front(CJBig2_CachePair(key, value));
- }
- }
- if(wFlags & 0x0200) {
- pSegment->m_Result.sd->m_bContextRetained = TRUE;
- if(pSymbolDictDecoder->SDHUFF == 0) {
- pSegment->m_Result.sd->m_gbContext = gbContext;
- }
- if(pSymbolDictDecoder->SDREFAGG == 1) {
- pSegment->m_Result.sd->m_grContext = grContext;
- }
- bUsed = TRUE;
+ pSeg = findReferredSegmentByTypeAndIndex(pSegment, 53, nIndex++);
+ if (!pSeg) {
+ m_pModule->JBig2_Error(
+ "symbol dictionary segment : SDHUFFBMSIZE can't find user supplied "
+ "table.");
+ nRet = JBIG2_ERROR_FATAL;
+ goto failed;
+ }
+ pSymbolDictDecoder->SDHUFFBMSIZE = pSeg->m_Result.ht;
+ }
+ if (pSymbolDictDecoder->SDREFAGG == 1) {
+ if (cSDHUFFAGGINST == 0) {
+ if (!Table_B1) {
+ JBIG2_ALLOC(Table_B1, CJBig2_HuffmanTable(HuffmanTable_B1,
+ sizeof(HuffmanTable_B1) /
+ sizeof(JBig2TableLine),
+ HuffmanTable_HTOOB_B1));
+ }
+ pSymbolDictDecoder->SDHUFFAGGINST = Table_B1;
+ } else {
+ pSeg = findReferredSegmentByTypeAndIndex(pSegment, 53, nIndex++);
+ if (!pSeg) {
+ m_pModule->JBig2_Error(
+ "symbol dictionary segment : SDHUFFAGGINST can't find user "
+ "supplied table.");
+ nRet = JBIG2_ERROR_FATAL;
+ goto failed;
+ }
+ pSymbolDictDecoder->SDHUFFAGGINST = pSeg->m_Result.ht;
+ }
+ }
+ }
+ if ((wFlags & 0x0100) && pLRSeg && pLRSeg->m_Result.sd->m_bContextRetained) {
+ if (pSymbolDictDecoder->SDHUFF == 0) {
+ dwTemp = pSymbolDictDecoder->SDTEMPLATE == 0
+ ? 65536
+ : pSymbolDictDecoder->SDTEMPLATE == 1 ? 8192 : 1024;
+ gbContext = (JBig2ArithCtx*)m_pModule->JBig2_Malloc2(
+ sizeof(JBig2ArithCtx), dwTemp);
+ JBIG2_memcpy(gbContext, pLRSeg->m_Result.sd->m_gbContext,
+ sizeof(JBig2ArithCtx) * dwTemp);
+ }
+ if (pSymbolDictDecoder->SDREFAGG == 1) {
+ dwTemp = pSymbolDictDecoder->SDRTEMPLATE ? 1 << 10 : 1 << 13;
+ grContext = (JBig2ArithCtx*)m_pModule->JBig2_Malloc2(
+ sizeof(JBig2ArithCtx), dwTemp);
+ JBIG2_memcpy(grContext, pLRSeg->m_Result.sd->m_grContext,
+ sizeof(JBig2ArithCtx) * dwTemp);
+ }
+ } else {
+ if (pSymbolDictDecoder->SDHUFF == 0) {
+ dwTemp = pSymbolDictDecoder->SDTEMPLATE == 0
+ ? 65536
+ : pSymbolDictDecoder->SDTEMPLATE == 1 ? 8192 : 1024;
+ gbContext = (JBig2ArithCtx*)m_pModule->JBig2_Malloc2(
+ sizeof(JBig2ArithCtx), dwTemp);
+ JBIG2_memset(gbContext, 0, sizeof(JBig2ArithCtx) * dwTemp);
+ }
+ if (pSymbolDictDecoder->SDREFAGG == 1) {
+ dwTemp = pSymbolDictDecoder->SDRTEMPLATE ? 1 << 10 : 1 << 13;
+ grContext = (JBig2ArithCtx*)m_pModule->JBig2_Malloc2(
+ sizeof(JBig2ArithCtx), dwTemp);
+ JBIG2_memset(grContext, 0, sizeof(JBig2ArithCtx) * dwTemp);
+ }
+ }
+ pSegment->m_nResultType = JBIG2_SYMBOL_DICT_POINTER;
+ for (std::list<CJBig2_CachePair>::iterator it = m_pSymbolDictCache->begin();
+ it != m_pSymbolDictCache->end(); ++it) {
+ if (it->first == key) {
+ pSegment->m_Result.sd = it->second->DeepCopy();
+ m_pSymbolDictCache->push_front(*it);
+ m_pSymbolDictCache->erase(it);
+ cache_hit = true;
+ break;
+ }
+ }
+ if (!cache_hit) {
+ if (pSymbolDictDecoder->SDHUFF == 0) {
+ JBIG2_ALLOC(pArithDecoder, CJBig2_ArithDecoder(m_pStream));
+ pSegment->m_Result.sd =
+ pSymbolDictDecoder->decode_Arith(pArithDecoder, gbContext, grContext);
+ delete pArithDecoder;
+ if (pSegment->m_Result.sd == NULL) {
+ nRet = JBIG2_ERROR_FATAL;
+ goto failed;
+ }
+ m_pStream->alignByte();
+ m_pStream->offset(2);
} else {
- bUsed = FALSE;
- }
- delete pSymbolDictDecoder;
- if(SDINSYMS) {
- m_pModule->JBig2_Free(SDINSYMS);
- }
- delete Table_B1;
- delete Table_B2;
- delete Table_B3;
- delete Table_B4;
- delete Table_B5;
- if(bUsed == FALSE) {
- if(gbContext) {
- m_pModule->JBig2_Free(gbContext);
- }
- if(grContext) {
- m_pModule->JBig2_Free(grContext);
- }
- }
- return JBIG2_SUCCESS;
+ pSegment->m_Result.sd = pSymbolDictDecoder->decode_Huffman(
+ m_pStream, gbContext, grContext, pPause);
+ if (pSegment->m_Result.sd == NULL) {
+ nRet = JBIG2_ERROR_FATAL;
+ goto failed;
+ }
+ m_pStream->alignByte();
+ }
+ CJBig2_SymbolDict* value = pSegment->m_Result.sd->DeepCopy();
+ if (value && kSymbolDictCacheMaxSize > 0) {
+ while (m_pSymbolDictCache->size() >= kSymbolDictCacheMaxSize) {
+ delete m_pSymbolDictCache->back().second;
+ m_pSymbolDictCache->pop_back();
+ }
+ m_pSymbolDictCache->push_front(CJBig2_CachePair(key, value));
+ }
+ }
+ if (wFlags & 0x0200) {
+ pSegment->m_Result.sd->m_bContextRetained = TRUE;
+ if (pSymbolDictDecoder->SDHUFF == 0) {
+ pSegment->m_Result.sd->m_gbContext = gbContext;
+ }
+ if (pSymbolDictDecoder->SDREFAGG == 1) {
+ pSegment->m_Result.sd->m_grContext = grContext;
+ }
+ bUsed = TRUE;
+ } else {
+ bUsed = FALSE;
+ }
+ delete pSymbolDictDecoder;
+ if (SDINSYMS) {
+ m_pModule->JBig2_Free(SDINSYMS);
+ }
+ delete Table_B1;
+ delete Table_B2;
+ delete Table_B3;
+ delete Table_B4;
+ delete Table_B5;
+ if (bUsed == FALSE) {
+ if (gbContext) {
+ m_pModule->JBig2_Free(gbContext);
+ }
+ if (grContext) {
+ m_pModule->JBig2_Free(grContext);
+ }
+ }
+ return JBIG2_SUCCESS;
failed:
- delete pSymbolDictDecoder;
- if(SDINSYMS) {
- m_pModule->JBig2_Free(SDINSYMS);
- }
- delete Table_B1;
- delete Table_B2;
- delete Table_B3;
- delete Table_B4;
- delete Table_B5;
- if(gbContext) {
- m_pModule->JBig2_Free(gbContext);
- }
- if(grContext) {
- m_pModule->JBig2_Free(grContext);
- }
- return nRet;
+ delete pSymbolDictDecoder;
+ if (SDINSYMS) {
+ m_pModule->JBig2_Free(SDINSYMS);
+ }
+ delete Table_B1;
+ delete Table_B2;
+ delete Table_B3;
+ delete Table_B4;
+ delete Table_B5;
+ if (gbContext) {
+ m_pModule->JBig2_Free(gbContext);
+ }
+ if (grContext) {
+ m_pModule->JBig2_Free(grContext);
+ }
+ return nRet;
}
-int32_t CJBig2_Context::parseTextRegion(CJBig2_Segment *pSegment)
-{
- FX_DWORD dwTemp;
- FX_WORD wFlags;
- int32_t i, nIndex, nRet;
- JBig2RegionInfo ri;
- CJBig2_Segment *pSeg;
- CJBig2_Image **SBSYMS = NULL;
- JBig2HuffmanCode *SBSYMCODES = NULL;
- uint8_t cSBHUFFFS, cSBHUFFDS, cSBHUFFDT, cSBHUFFRDW, cSBHUFFRDH, cSBHUFFRDX, cSBHUFFRDY, cSBHUFFRSIZE;
- CJBig2_HuffmanTable *Table_B1 = NULL,
- *Table_B6 = NULL,
- *Table_B7 = NULL,
- *Table_B8 = NULL,
- *Table_B9 = NULL,
- *Table_B10 = NULL,
- *Table_B11 = NULL,
- *Table_B12 = NULL,
- *Table_B13 = NULL,
- *Table_B14 = NULL,
- *Table_B15 = NULL;
- JBig2ArithCtx *grContext = NULL;
- CJBig2_ArithDecoder *pArithDecoder;
- CJBig2_TRDProc *pTRD;
- JBIG2_ALLOC(pTRD, CJBig2_TRDProc());
- if((parseRegionInfo(&ri) != JBIG2_SUCCESS)
- || (m_pStream->readShortInteger(&wFlags) != 0)) {
+int32_t CJBig2_Context::parseTextRegion(CJBig2_Segment* pSegment) {
+ FX_DWORD dwTemp;
+ FX_WORD wFlags;
+ int32_t i, nIndex, nRet;
+ JBig2RegionInfo ri;
+ CJBig2_Segment* pSeg;
+ CJBig2_Image** SBSYMS = NULL;
+ JBig2HuffmanCode* SBSYMCODES = NULL;
+ uint8_t cSBHUFFFS, cSBHUFFDS, cSBHUFFDT, cSBHUFFRDW, cSBHUFFRDH, cSBHUFFRDX,
+ cSBHUFFRDY, cSBHUFFRSIZE;
+ CJBig2_HuffmanTable *Table_B1 = NULL, *Table_B6 = NULL, *Table_B7 = NULL,
+ *Table_B8 = NULL, *Table_B9 = NULL, *Table_B10 = NULL,
+ *Table_B11 = NULL, *Table_B12 = NULL, *Table_B13 = NULL,
+ *Table_B14 = NULL, *Table_B15 = NULL;
+ JBig2ArithCtx* grContext = NULL;
+ CJBig2_ArithDecoder* pArithDecoder;
+ CJBig2_TRDProc* pTRD;
+ JBIG2_ALLOC(pTRD, CJBig2_TRDProc());
+ if ((parseRegionInfo(&ri) != JBIG2_SUCCESS) ||
+ (m_pStream->readShortInteger(&wFlags) != 0)) {
+ m_pModule->JBig2_Error("text region segment : data header too short.");
+ nRet = JBIG2_ERROR_TOO_SHORT;
+ goto failed;
+ }
+ pTRD->SBW = ri.width;
+ pTRD->SBH = ri.height;
+ pTRD->SBHUFF = wFlags & 0x0001;
+ pTRD->SBREFINE = (wFlags >> 1) & 0x0001;
+ dwTemp = (wFlags >> 2) & 0x0003;
+ pTRD->SBSTRIPS = 1 << dwTemp;
+ pTRD->REFCORNER = (JBig2Corner)((wFlags >> 4) & 0x0003);
+ pTRD->TRANSPOSED = (wFlags >> 6) & 0x0001;
+ pTRD->SBCOMBOP = (JBig2ComposeOp)((wFlags >> 7) & 0x0003);
+ pTRD->SBDEFPIXEL = (wFlags >> 9) & 0x0001;
+ pTRD->SBDSOFFSET = (wFlags >> 10) & 0x001f;
+ if (pTRD->SBDSOFFSET >= 0x0010) {
+ pTRD->SBDSOFFSET = pTRD->SBDSOFFSET - 0x0020;
+ }
+ pTRD->SBRTEMPLATE = (wFlags >> 15) & 0x0001;
+ if (pTRD->SBHUFF == 1) {
+ if (m_pStream->readShortInteger(&wFlags) != 0) {
+ m_pModule->JBig2_Error("text region segment : data header too short.");
+ nRet = JBIG2_ERROR_TOO_SHORT;
+ goto failed;
+ }
+ cSBHUFFFS = wFlags & 0x0003;
+ cSBHUFFDS = (wFlags >> 2) & 0x0003;
+ cSBHUFFDT = (wFlags >> 4) & 0x0003;
+ cSBHUFFRDW = (wFlags >> 6) & 0x0003;
+ cSBHUFFRDH = (wFlags >> 8) & 0x0003;
+ cSBHUFFRDX = (wFlags >> 10) & 0x0003;
+ cSBHUFFRDY = (wFlags >> 12) & 0x0003;
+ cSBHUFFRSIZE = (wFlags >> 14) & 0x0001;
+ }
+ if ((pTRD->SBREFINE == 1) && (pTRD->SBRTEMPLATE == 0)) {
+ for (i = 0; i < 4; i++) {
+ if (m_pStream->read1Byte((uint8_t*)&pTRD->SBRAT[i]) != 0) {
m_pModule->JBig2_Error("text region segment : data header too short.");
nRet = JBIG2_ERROR_TOO_SHORT;
goto failed;
+ }
+ }
+ }
+ if (m_pStream->readInteger(&pTRD->SBNUMINSTANCES) != 0) {
+ m_pModule->JBig2_Error("text region segment : data header too short.");
+ nRet = JBIG2_ERROR_TOO_SHORT;
+ goto failed;
+ }
+ for (i = 0; i < pSegment->m_nReferred_to_segment_count; i++) {
+ if (!findSegmentByNumber(pSegment->m_pReferred_to_segment_numbers[i])) {
+ m_pModule->JBig2_Error(
+ "text region segment : can't find refered to segments");
+ nRet = JBIG2_ERROR_FATAL;
+ goto failed;
+ }
+ }
+ pTRD->SBNUMSYMS = 0;
+ for (i = 0; i < pSegment->m_nReferred_to_segment_count; i++) {
+ pSeg = findSegmentByNumber(pSegment->m_pReferred_to_segment_numbers[i]);
+ if (pSeg->m_cFlags.s.type == 0) {
+ pTRD->SBNUMSYMS += pSeg->m_Result.sd->SDNUMEXSYMS;
+ }
+ }
+ if (pTRD->SBNUMSYMS > 0) {
+ SBSYMS = (CJBig2_Image**)m_pModule->JBig2_Malloc2(sizeof(CJBig2_Image*),
+ pTRD->SBNUMSYMS);
+ dwTemp = 0;
+ for (i = 0; i < pSegment->m_nReferred_to_segment_count; i++) {
+ pSeg = findSegmentByNumber(pSegment->m_pReferred_to_segment_numbers[i]);
+ if (pSeg->m_cFlags.s.type == 0) {
+ JBIG2_memcpy(SBSYMS + dwTemp, pSeg->m_Result.sd->SDEXSYMS,
+ pSeg->m_Result.sd->SDNUMEXSYMS * sizeof(CJBig2_Image*));
+ dwTemp += pSeg->m_Result.sd->SDNUMEXSYMS;
+ }
+ }
+ pTRD->SBSYMS = SBSYMS;
+ } else {
+ pTRD->SBSYMS = NULL;
+ }
+ if (pTRD->SBHUFF == 1) {
+ SBSYMCODES = decodeSymbolIDHuffmanTable(m_pStream, pTRD->SBNUMSYMS);
+ if (SBSYMCODES == NULL) {
+ m_pModule->JBig2_Error(
+ "text region segment: symbol ID huffman table decode failure!");
+ nRet = JBIG2_ERROR_FATAL;
+ goto failed;
}
- pTRD->SBW = ri.width;
- pTRD->SBH = ri.height;
- pTRD->SBHUFF = wFlags & 0x0001;
- pTRD->SBREFINE = (wFlags >> 1) & 0x0001;
- dwTemp = (wFlags >> 2) & 0x0003;
- pTRD->SBSTRIPS = 1 << dwTemp;
- pTRD->REFCORNER = (JBig2Corner)((wFlags >> 4) & 0x0003);
- pTRD->TRANSPOSED = (wFlags >> 6) & 0x0001;
- pTRD->SBCOMBOP = (JBig2ComposeOp)((wFlags >> 7) & 0x0003);
- pTRD->SBDEFPIXEL = (wFlags >> 9) & 0x0001;
- pTRD->SBDSOFFSET = (wFlags >> 10) & 0x001f;
- if(pTRD->SBDSOFFSET >= 0x0010) {
- pTRD->SBDSOFFSET = pTRD->SBDSOFFSET - 0x0020;
- }
- pTRD->SBRTEMPLATE = (wFlags >> 15) & 0x0001;
- if(pTRD->SBHUFF == 1) {
- if(m_pStream->readShortInteger(&wFlags) != 0) {
- m_pModule->JBig2_Error("text region segment : data header too short.");
- nRet = JBIG2_ERROR_TOO_SHORT;
- goto failed;
- }
- cSBHUFFFS = wFlags & 0x0003;
- cSBHUFFDS = (wFlags >> 2) & 0x0003;
- cSBHUFFDT = (wFlags >> 4) & 0x0003;
- cSBHUFFRDW = (wFlags >> 6) & 0x0003;
- cSBHUFFRDH = (wFlags >> 8) & 0x0003;
- cSBHUFFRDX = (wFlags >> 10) & 0x0003;
- cSBHUFFRDY = (wFlags >> 12) & 0x0003;
- cSBHUFFRSIZE = (wFlags >> 14) & 0x0001;
- }
- if((pTRD->SBREFINE == 1) && (pTRD->SBRTEMPLATE == 0)) {
- for(i = 0; i < 4; i++) {
- if(m_pStream->read1Byte((uint8_t*)&pTRD->SBRAT[i]) != 0) {
- m_pModule->JBig2_Error("text region segment : data header too short.");
- nRet = JBIG2_ERROR_TOO_SHORT;
- goto failed;
- }
- }
- }
- if(m_pStream->readInteger(&pTRD->SBNUMINSTANCES) != 0) {
- m_pModule->JBig2_Error("text region segment : data header too short.");
- nRet = JBIG2_ERROR_TOO_SHORT;
- goto failed;
- }
- for(i = 0; i < pSegment->m_nReferred_to_segment_count; i++) {
- if(!findSegmentByNumber(pSegment->m_pReferred_to_segment_numbers[i])) {
- m_pModule->JBig2_Error("text region segment : can't find refered to segments");
- nRet = JBIG2_ERROR_FATAL;
- goto failed;
- }
- }
- pTRD->SBNUMSYMS = 0;
- for(i = 0; i < pSegment->m_nReferred_to_segment_count; i++) {
- pSeg = findSegmentByNumber(pSegment->m_pReferred_to_segment_numbers[i]);
- if(pSeg->m_cFlags.s.type == 0) {
- pTRD->SBNUMSYMS += pSeg->m_Result.sd->SDNUMEXSYMS;
- }
- }
- if (pTRD->SBNUMSYMS > 0) {
- SBSYMS = (CJBig2_Image**)m_pModule->JBig2_Malloc2(
- sizeof(CJBig2_Image*), pTRD->SBNUMSYMS);
- dwTemp = 0;
- for(i = 0; i < pSegment->m_nReferred_to_segment_count; i++) {
- pSeg = findSegmentByNumber(pSegment->m_pReferred_to_segment_numbers[i]);
- if(pSeg->m_cFlags.s.type == 0) {
- JBIG2_memcpy(SBSYMS + dwTemp, pSeg->m_Result.sd->SDEXSYMS,
- pSeg->m_Result.sd->SDNUMEXSYMS * sizeof(CJBig2_Image*));
- dwTemp += pSeg->m_Result.sd->SDNUMEXSYMS;
- }
- }
- pTRD->SBSYMS = SBSYMS;
+ m_pStream->alignByte();
+ pTRD->SBSYMCODES = SBSYMCODES;
+ } else {
+ dwTemp = 0;
+ while ((FX_DWORD)(1 << dwTemp) < pTRD->SBNUMSYMS) {
+ dwTemp++;
+ }
+ pTRD->SBSYMCODELEN = (uint8_t)dwTemp;
+ }
+ if (pTRD->SBHUFF == 1) {
+ if ((cSBHUFFFS == 2) || (cSBHUFFRDW == 2) || (cSBHUFFRDH == 2) ||
+ (cSBHUFFRDX == 2) || (cSBHUFFRDY == 2)) {
+ m_pModule->JBig2_Error(
+ "text region segment : SBHUFFFS=2 or SBHUFFRDW=2 or "
+ "SBHUFFRDH=2 or SBHUFFRDX=2 or SBHUFFRDY=2 is not permitted");
+ nRet = JBIG2_ERROR_FATAL;
+ goto failed;
+ }
+ nIndex = 0;
+ if (cSBHUFFFS == 0) {
+ JBIG2_ALLOC(Table_B6, CJBig2_HuffmanTable(HuffmanTable_B6,
+ sizeof(HuffmanTable_B6) /
+ sizeof(JBig2TableLine),
+ HuffmanTable_HTOOB_B6));
+ pTRD->SBHUFFFS = Table_B6;
+ } else if (cSBHUFFFS == 1) {
+ JBIG2_ALLOC(Table_B7, CJBig2_HuffmanTable(HuffmanTable_B7,
+ sizeof(HuffmanTable_B7) /
+ sizeof(JBig2TableLine),
+ HuffmanTable_HTOOB_B7));
+ pTRD->SBHUFFFS = Table_B7;
} else {
- pTRD->SBSYMS = NULL;
- }
- if(pTRD->SBHUFF == 1) {
- SBSYMCODES = decodeSymbolIDHuffmanTable(m_pStream, pTRD->SBNUMSYMS);
- if(SBSYMCODES == NULL) {
- m_pModule->JBig2_Error("text region segment: symbol ID huffman table decode failure!");
- nRet = JBIG2_ERROR_FATAL;
- goto failed;
- }
- m_pStream->alignByte();
- pTRD->SBSYMCODES = SBSYMCODES;
+ pSeg = findReferredSegmentByTypeAndIndex(pSegment, 53, nIndex++);
+ if (!pSeg) {
+ m_pModule->JBig2_Error(
+ "text region segment : SBHUFFFS can't find user supplied table");
+ nRet = JBIG2_ERROR_FATAL;
+ goto failed;
+ }
+ pTRD->SBHUFFFS = pSeg->m_Result.ht;
+ }
+ if (cSBHUFFDS == 0) {
+ JBIG2_ALLOC(Table_B8, CJBig2_HuffmanTable(HuffmanTable_B8,
+ sizeof(HuffmanTable_B8) /
+ sizeof(JBig2TableLine),
+ HuffmanTable_HTOOB_B8));
+ pTRD->SBHUFFDS = Table_B8;
+ } else if (cSBHUFFDS == 1) {
+ JBIG2_ALLOC(Table_B9, CJBig2_HuffmanTable(HuffmanTable_B9,
+ sizeof(HuffmanTable_B9) /
+ sizeof(JBig2TableLine),
+ HuffmanTable_HTOOB_B9));
+ pTRD->SBHUFFDS = Table_B9;
+ } else if (cSBHUFFDS == 2) {
+ JBIG2_ALLOC(Table_B10, CJBig2_HuffmanTable(HuffmanTable_B10,
+ sizeof(HuffmanTable_B10) /
+ sizeof(JBig2TableLine),
+ HuffmanTable_HTOOB_B10));
+ pTRD->SBHUFFDS = Table_B10;
} else {
- dwTemp = 0;
- while((FX_DWORD)(1 << dwTemp) < pTRD->SBNUMSYMS) {
- dwTemp ++;
- }
- pTRD->SBSYMCODELEN = (uint8_t)dwTemp;
- }
- if(pTRD->SBHUFF == 1) {
- if((cSBHUFFFS == 2) || (cSBHUFFRDW == 2) || (cSBHUFFRDH == 2)
- || (cSBHUFFRDX == 2) || (cSBHUFFRDY == 2)) {
- m_pModule->JBig2_Error("text region segment : SBHUFFFS=2 or SBHUFFRDW=2 or "
- "SBHUFFRDH=2 or SBHUFFRDX=2 or SBHUFFRDY=2 is not permitted");
- nRet = JBIG2_ERROR_FATAL;
- goto failed;
- }
- nIndex = 0;
- if(cSBHUFFFS == 0) {
- JBIG2_ALLOC(Table_B6, CJBig2_HuffmanTable(HuffmanTable_B6,
- sizeof(HuffmanTable_B6) / sizeof(JBig2TableLine), HuffmanTable_HTOOB_B6));
- pTRD->SBHUFFFS = Table_B6;
- } else if(cSBHUFFFS == 1) {
- JBIG2_ALLOC(Table_B7, CJBig2_HuffmanTable(HuffmanTable_B7,
- sizeof(HuffmanTable_B7) / sizeof(JBig2TableLine), HuffmanTable_HTOOB_B7));
- pTRD->SBHUFFFS = Table_B7;
- } else {
- pSeg = findReferredSegmentByTypeAndIndex(pSegment, 53, nIndex++);
- if(!pSeg) {
- m_pModule->JBig2_Error("text region segment : SBHUFFFS can't find user supplied table");
- nRet = JBIG2_ERROR_FATAL;
- goto failed;
- }
- pTRD->SBHUFFFS = pSeg->m_Result.ht;
- }
- if(cSBHUFFDS == 0) {
- JBIG2_ALLOC(Table_B8, CJBig2_HuffmanTable(HuffmanTable_B8,
- sizeof(HuffmanTable_B8) / sizeof(JBig2TableLine), HuffmanTable_HTOOB_B8));
- pTRD->SBHUFFDS = Table_B8;
- } else if(cSBHUFFDS == 1) {
- JBIG2_ALLOC(Table_B9, CJBig2_HuffmanTable(HuffmanTable_B9,
- sizeof(HuffmanTable_B9) / sizeof(JBig2TableLine), HuffmanTable_HTOOB_B9));
- pTRD->SBHUFFDS = Table_B9;
- } else if(cSBHUFFDS == 2) {
- JBIG2_ALLOC(Table_B10, CJBig2_HuffmanTable(HuffmanTable_B10,
- sizeof(HuffmanTable_B10) / sizeof(JBig2TableLine), HuffmanTable_HTOOB_B10));
- pTRD->SBHUFFDS = Table_B10;
- } else {
- pSeg = findReferredSegmentByTypeAndIndex(pSegment, 53, nIndex++);
- if(!pSeg) {
- m_pModule->JBig2_Error("text region segment : SBHUFFDS can't find user supplied table");
- nRet = JBIG2_ERROR_FATAL;
- goto failed;
- }
- pTRD->SBHUFFDS = pSeg->m_Result.ht;
- }
- if(cSBHUFFDT == 0) {
- JBIG2_ALLOC(Table_B11, CJBig2_HuffmanTable(HuffmanTable_B11,
- sizeof(HuffmanTable_B11) / sizeof(JBig2TableLine), HuffmanTable_HTOOB_B11));
- pTRD->SBHUFFDT = Table_B11;
- } else if(cSBHUFFDT == 1) {
- JBIG2_ALLOC(Table_B12, CJBig2_HuffmanTable(HuffmanTable_B12,
- sizeof(HuffmanTable_B12) / sizeof(JBig2TableLine), HuffmanTable_HTOOB_B12));
- pTRD->SBHUFFDT = Table_B12;
- } else if(cSBHUFFDT == 2) {
- JBIG2_ALLOC(Table_B13, CJBig2_HuffmanTable(HuffmanTable_B13,
- sizeof(HuffmanTable_B13) / sizeof(JBig2TableLine), HuffmanTable_HTOOB_B13));
- pTRD->SBHUFFDT = Table_B13;
- } else {
- pSeg = findReferredSegmentByTypeAndIndex(pSegment, 53, nIndex++);
- if(!pSeg) {
- m_pModule->JBig2_Error("text region segment : SBHUFFDT can't find user supplied table");
- nRet = JBIG2_ERROR_FATAL;
- goto failed;
- }
- pTRD->SBHUFFDT = pSeg->m_Result.ht;
- }
- if(cSBHUFFRDW == 0) {
- JBIG2_ALLOC(Table_B14, CJBig2_HuffmanTable(HuffmanTable_B14,
- sizeof(HuffmanTable_B14) / sizeof(JBig2TableLine), HuffmanTable_HTOOB_B14));
- pTRD->SBHUFFRDW = Table_B14;
- } else if(cSBHUFFRDW == 1) {
- JBIG2_ALLOC(Table_B15, CJBig2_HuffmanTable(HuffmanTable_B15,
- sizeof(HuffmanTable_B15) / sizeof(JBig2TableLine), HuffmanTable_HTOOB_B15));
- pTRD->SBHUFFRDW = Table_B15;
- } else {
- pSeg = findReferredSegmentByTypeAndIndex(pSegment, 53, nIndex++);
- if(!pSeg) {
- m_pModule->JBig2_Error("text region segment : SBHUFFRDW can't find user supplied table");
- nRet = JBIG2_ERROR_FATAL;
- goto failed;
- }
- pTRD->SBHUFFRDW = pSeg->m_Result.ht;
- }
- if(cSBHUFFRDH == 0) {
- if(!Table_B14) {
- JBIG2_ALLOC(Table_B14, CJBig2_HuffmanTable(HuffmanTable_B14,
- sizeof(HuffmanTable_B14) / sizeof(JBig2TableLine), HuffmanTable_HTOOB_B14));
- }
- pTRD->SBHUFFRDH = Table_B14;
- } else if(cSBHUFFRDH == 1) {
- if(!Table_B15) {
- JBIG2_ALLOC(Table_B15, CJBig2_HuffmanTable(HuffmanTable_B15,
- sizeof(HuffmanTable_B15) / sizeof(JBig2TableLine), HuffmanTable_HTOOB_B15));
- }
- pTRD->SBHUFFRDH = Table_B15;
- } else {
- pSeg = findReferredSegmentByTypeAndIndex(pSegment, 53, nIndex++);
- if(!pSeg) {
- m_pModule->JBig2_Error("text region segment : SBHUFFRDH can't find user supplied table");
- nRet = JBIG2_ERROR_FATAL;
- goto failed;
- }
- pTRD->SBHUFFRDH = pSeg->m_Result.ht;
- }
- if(cSBHUFFRDX == 0) {
- if(!Table_B14) {
- JBIG2_ALLOC(Table_B14, CJBig2_HuffmanTable(HuffmanTable_B14,
- sizeof(HuffmanTable_B14) / sizeof(JBig2TableLine), HuffmanTable_HTOOB_B14));
- }
- pTRD->SBHUFFRDX = Table_B14;
- } else if(cSBHUFFRDX == 1) {
- if(!Table_B15) {
- JBIG2_ALLOC(Table_B15, CJBig2_HuffmanTable(HuffmanTable_B15,
- sizeof(HuffmanTable_B15) / sizeof(JBig2TableLine), HuffmanTable_HTOOB_B15));
- }
- pTRD->SBHUFFRDX = Table_B15;
- } else {
- pSeg = findReferredSegmentByTypeAndIndex(pSegment, 53, nIndex++);
- if(!pSeg) {
- m_pModule->JBig2_Error("text region segment : SBHUFFRDX can't find user supplied table");
- nRet = JBIG2_ERROR_FATAL;
- goto failed;
- }
- pTRD->SBHUFFRDX = pSeg->m_Result.ht;
- }
- if(cSBHUFFRDY == 0) {
- if(!Table_B14) {
- JBIG2_ALLOC(Table_B14, CJBig2_HuffmanTable(HuffmanTable_B14,
- sizeof(HuffmanTable_B14) / sizeof(JBig2TableLine), HuffmanTable_HTOOB_B14));
- }
- pTRD->SBHUFFRDY = Table_B14;
- } else if(cSBHUFFRDY == 1) {
- if(!Table_B15) {
- JBIG2_ALLOC(Table_B15, CJBig2_HuffmanTable(HuffmanTable_B15,
- sizeof(HuffmanTable_B15) / sizeof(JBig2TableLine), HuffmanTable_HTOOB_B15));
- }
- pTRD->SBHUFFRDY = Table_B15;
- } else {
- pSeg = findReferredSegmentByTypeAndIndex(pSegment, 53, nIndex++);
- if(!pSeg) {
- m_pModule->JBig2_Error("text region segment : SBHUFFRDY can't find user supplied table");
- nRet = JBIG2_ERROR_FATAL;
- goto failed;
- }
- pTRD->SBHUFFRDY = pSeg->m_Result.ht;
- }
- if(cSBHUFFRSIZE == 0) {
- JBIG2_ALLOC(Table_B1, CJBig2_HuffmanTable(HuffmanTable_B1,
- sizeof(HuffmanTable_B1) / sizeof(JBig2TableLine), HuffmanTable_HTOOB_B1));
- pTRD->SBHUFFRSIZE = Table_B1;
- } else {
- pSeg = findReferredSegmentByTypeAndIndex(pSegment, 53, nIndex++);
- if(!pSeg) {
- m_pModule->JBig2_Error("text region segment : SBHUFFRSIZE can't find user supplied table");
- nRet = JBIG2_ERROR_FATAL;
- goto failed;
- }
- pTRD->SBHUFFRSIZE = pSeg->m_Result.ht;
- }
- }
- if(pTRD->SBREFINE == 1) {
- dwTemp = pTRD->SBRTEMPLATE ? 1 << 10 : 1 << 13;
- grContext = (JBig2ArithCtx*)m_pModule->JBig2_Malloc2(sizeof(JBig2ArithCtx), dwTemp);
- JBIG2_memset(grContext, 0, sizeof(JBig2ArithCtx)*dwTemp);
- }
- if(pTRD->SBHUFF == 0) {
- JBIG2_ALLOC(pArithDecoder, CJBig2_ArithDecoder(m_pStream));
- pSegment->m_nResultType = JBIG2_IMAGE_POINTER;
- pSegment->m_Result.im = pTRD->decode_Arith(pArithDecoder, grContext);
- delete pArithDecoder;
- if(pSegment->m_Result.im == NULL) {
- nRet = JBIG2_ERROR_FATAL;
- goto failed;
- }
- m_pStream->alignByte();
- m_pStream->offset(2);
+ pSeg = findReferredSegmentByTypeAndIndex(pSegment, 53, nIndex++);
+ if (!pSeg) {
+ m_pModule->JBig2_Error(
+ "text region segment : SBHUFFDS can't find user supplied table");
+ nRet = JBIG2_ERROR_FATAL;
+ goto failed;
+ }
+ pTRD->SBHUFFDS = pSeg->m_Result.ht;
+ }
+ if (cSBHUFFDT == 0) {
+ JBIG2_ALLOC(Table_B11, CJBig2_HuffmanTable(HuffmanTable_B11,
+ sizeof(HuffmanTable_B11) /
+ sizeof(JBig2TableLine),
+ HuffmanTable_HTOOB_B11));
+ pTRD->SBHUFFDT = Table_B11;
+ } else if (cSBHUFFDT == 1) {
+ JBIG2_ALLOC(Table_B12, CJBig2_HuffmanTable(HuffmanTable_B12,
+ sizeof(HuffmanTable_B12) /
+ sizeof(JBig2TableLine),
+ HuffmanTable_HTOOB_B12));
+ pTRD->SBHUFFDT = Table_B12;
+ } else if (cSBHUFFDT == 2) {
+ JBIG2_ALLOC(Table_B13, CJBig2_HuffmanTable(HuffmanTable_B13,
+ sizeof(HuffmanTable_B13) /
+ sizeof(JBig2TableLine),
+ HuffmanTable_HTOOB_B13));
+ pTRD->SBHUFFDT = Table_B13;
} else {
- pSegment->m_nResultType = JBIG2_IMAGE_POINTER;
- pSegment->m_Result.im = pTRD->decode_Huffman(m_pStream, grContext);
- if(pSegment->m_Result.im == NULL) {
- nRet = JBIG2_ERROR_FATAL;
- goto failed;
- }
- m_pStream->alignByte();
- }
- if(pSegment->m_cFlags.s.type != 4) {
- if(!m_bBufSpecified) {
- JBig2PageInfo *pPageInfo = m_pPageInfoList->getLast();
- if ((pPageInfo->m_bIsStriped == 1) && (ri.y + ri.height > m_pPage->m_nHeight)) {
- m_pPage->expand(ri.y + ri.height, (pPageInfo->m_cFlags & 4) ? 1 : 0);
- }
- }
- m_pPage->composeFrom(ri.x, ri.y, pSegment->m_Result.im, (JBig2ComposeOp)(ri.flags & 0x03));
- delete pSegment->m_Result.im;
- pSegment->m_Result.im = NULL;
- }
- delete pTRD;
- if(SBSYMS) {
- m_pModule->JBig2_Free(SBSYMS);
- }
- if(SBSYMCODES) {
- m_pModule->JBig2_Free(SBSYMCODES);
- }
- if(grContext) {
- m_pModule->JBig2_Free(grContext);
- }
- delete Table_B1;
- delete Table_B6;
- delete Table_B7;
- delete Table_B8;
- delete Table_B9;
- delete Table_B10;
- delete Table_B11;
- delete Table_B12;
- delete Table_B13;
- delete Table_B14;
- delete Table_B15;
- return JBIG2_SUCCESS;
-failed:
- delete pTRD;
- if(SBSYMS) {
- m_pModule->JBig2_Free(SBSYMS);
- }
- if(SBSYMCODES) {
- m_pModule->JBig2_Free(SBSYMCODES);
- }
- if(grContext) {
- m_pModule->JBig2_Free(grContext);
- }
- delete Table_B1;
- delete Table_B6;
- delete Table_B7;
- delete Table_B8;
- delete Table_B9;
- delete Table_B10;
- delete Table_B11;
- delete Table_B12;
- delete Table_B13;
- delete Table_B14;
- delete Table_B15;
- return nRet;
-}
-
-int32_t CJBig2_Context::parsePatternDict(CJBig2_Segment *pSegment, IFX_Pause* pPause)
-{
- FX_DWORD dwTemp;
- uint8_t cFlags;
- JBig2ArithCtx *gbContext;
- CJBig2_ArithDecoder *pArithDecoder;
- CJBig2_PDDProc *pPDD;
- int32_t nRet;
- JBIG2_ALLOC(pPDD, CJBig2_PDDProc());
- if((m_pStream->read1Byte(&cFlags) != 0)
- || (m_pStream->read1Byte(&pPDD->HDPW) != 0)
- || (m_pStream->read1Byte(&pPDD->HDPH) != 0)
- || (m_pStream->readInteger(&pPDD->GRAYMAX) != 0)) {
- m_pModule->JBig2_Error("pattern dictionary segment : data header too short.");
- nRet = JBIG2_ERROR_TOO_SHORT;
+ pSeg = findReferredSegmentByTypeAndIndex(pSegment, 53, nIndex++);
+ if (!pSeg) {
+ m_pModule->JBig2_Error(
+ "text region segment : SBHUFFDT can't find user supplied table");
+ nRet = JBIG2_ERROR_FATAL;
goto failed;
- }
- if (pPDD->GRAYMAX > JBIG2_MAX_PATTERN_INDEX) {
- m_pModule->JBig2_Error("pattern dictionary segment : too max gray max.");
- nRet = JBIG2_ERROR_LIMIT;
+ }
+ pTRD->SBHUFFDT = pSeg->m_Result.ht;
+ }
+ if (cSBHUFFRDW == 0) {
+ JBIG2_ALLOC(Table_B14, CJBig2_HuffmanTable(HuffmanTable_B14,
+ sizeof(HuffmanTable_B14) /
+ sizeof(JBig2TableLine),
+ HuffmanTable_HTOOB_B14));
+ pTRD->SBHUFFRDW = Table_B14;
+ } else if (cSBHUFFRDW == 1) {
+ JBIG2_ALLOC(Table_B15, CJBig2_HuffmanTable(HuffmanTable_B15,
+ sizeof(HuffmanTable_B15) /
+ sizeof(JBig2TableLine),
+ HuffmanTable_HTOOB_B15));
+ pTRD->SBHUFFRDW = Table_B15;
+ } else {
+ pSeg = findReferredSegmentByTypeAndIndex(pSegment, 53, nIndex++);
+ if (!pSeg) {
+ m_pModule->JBig2_Error(
+ "text region segment : SBHUFFRDW can't find user supplied table");
+ nRet = JBIG2_ERROR_FATAL;
goto failed;
- }
- pPDD->HDMMR = cFlags & 0x01;
- pPDD->HDTEMPLATE = (cFlags >> 1) & 0x03;
- pSegment->m_nResultType = JBIG2_PATTERN_DICT_POINTER;
- if(pPDD->HDMMR == 0) {
- dwTemp = pPDD->HDTEMPLATE == 0 ? 65536 : pPDD->HDTEMPLATE == 1 ? 8192 : 1024;
- gbContext = (JBig2ArithCtx*)m_pModule->JBig2_Malloc2(sizeof(JBig2ArithCtx), dwTemp);
- JBIG2_memset(gbContext, 0, sizeof(JBig2ArithCtx)*dwTemp);
- JBIG2_ALLOC(pArithDecoder, CJBig2_ArithDecoder(m_pStream));
- pSegment->m_Result.pd = pPDD->decode_Arith(pArithDecoder, gbContext, pPause);
- delete pArithDecoder;
- if(pSegment->m_Result.pd == NULL) {
- m_pModule->JBig2_Free(gbContext);
- nRet = JBIG2_ERROR_FATAL;
- goto failed;
- }
- m_pModule->JBig2_Free(gbContext);
- m_pStream->alignByte();
- m_pStream->offset(2);
+ }
+ pTRD->SBHUFFRDW = pSeg->m_Result.ht;
+ }
+ if (cSBHUFFRDH == 0) {
+ if (!Table_B14) {
+ JBIG2_ALLOC(Table_B14, CJBig2_HuffmanTable(HuffmanTable_B14,
+ sizeof(HuffmanTable_B14) /
+ sizeof(JBig2TableLine),
+ HuffmanTable_HTOOB_B14));
+ }
+ pTRD->SBHUFFRDH = Table_B14;
+ } else if (cSBHUFFRDH == 1) {
+ if (!Table_B15) {
+ JBIG2_ALLOC(Table_B15, CJBig2_HuffmanTable(HuffmanTable_B15,
+ sizeof(HuffmanTable_B15) /
+ sizeof(JBig2TableLine),
+ HuffmanTable_HTOOB_B15));
+ }
+ pTRD->SBHUFFRDH = Table_B15;
} else {
- pSegment->m_Result.pd = pPDD->decode_MMR(m_pStream, pPause);
- if(pSegment->m_Result.pd == NULL) {
- nRet = JBIG2_ERROR_FATAL;
- goto failed;
- }
- m_pStream->alignByte();
- }
- delete pPDD;
- return JBIG2_SUCCESS;
-failed:
- delete pPDD;
- return nRet;
-}
-int32_t CJBig2_Context::parseHalftoneRegion(CJBig2_Segment *pSegment, IFX_Pause* pPause)
-{
- FX_DWORD dwTemp;
- uint8_t cFlags;
- JBig2RegionInfo ri;
- CJBig2_Segment *pSeg;
- CJBig2_PatternDict *pPatternDict;
- JBig2ArithCtx *gbContext;
- CJBig2_ArithDecoder *pArithDecoder;
- CJBig2_HTRDProc *pHRD;
- int32_t nRet;
- JBIG2_ALLOC(pHRD, CJBig2_HTRDProc());
- if((parseRegionInfo(&ri) != JBIG2_SUCCESS)
- || (m_pStream->read1Byte(&cFlags) != 0)
- || (m_pStream->readInteger(&pHRD->HGW) != 0)
- || (m_pStream->readInteger(&pHRD->HGH) != 0)
- || (m_pStream->readInteger((FX_DWORD*)&pHRD->HGX) != 0)
- || (m_pStream->readInteger((FX_DWORD*)&pHRD->HGY) != 0)
- || (m_pStream->readShortInteger(&pHRD->HRX) != 0)
- || (m_pStream->readShortInteger(&pHRD->HRY) != 0)) {
- m_pModule->JBig2_Error("halftone region segment : data header too short.");
- nRet = JBIG2_ERROR_TOO_SHORT;
+ pSeg = findReferredSegmentByTypeAndIndex(pSegment, 53, nIndex++);
+ if (!pSeg) {
+ m_pModule->JBig2_Error(
+ "text region segment : SBHUFFRDH can't find user supplied table");
+ nRet = JBIG2_ERROR_FATAL;
goto failed;
- }
- pHRD->HBW = ri.width;
- pHRD->HBH = ri.height;
- pHRD->HMMR = cFlags & 0x01;
- pHRD->HTEMPLATE = (cFlags >> 1) & 0x03;
- pHRD->HENABLESKIP = (cFlags >> 3) & 0x01;
- pHRD->HCOMBOP = (JBig2ComposeOp)((cFlags >> 4) & 0x07);
- pHRD->HDEFPIXEL = (cFlags >> 7) & 0x01;
- if(pSegment->m_nReferred_to_segment_count != 1) {
- m_pModule->JBig2_Error("halftone region segment : refered to segment count not equals 1");
+ }
+ pTRD->SBHUFFRDH = pSeg->m_Result.ht;
+ }
+ if (cSBHUFFRDX == 0) {
+ if (!Table_B14) {
+ JBIG2_ALLOC(Table_B14, CJBig2_HuffmanTable(HuffmanTable_B14,
+ sizeof(HuffmanTable_B14) /
+ sizeof(JBig2TableLine),
+ HuffmanTable_HTOOB_B14));
+ }
+ pTRD->SBHUFFRDX = Table_B14;
+ } else if (cSBHUFFRDX == 1) {
+ if (!Table_B15) {
+ JBIG2_ALLOC(Table_B15, CJBig2_HuffmanTable(HuffmanTable_B15,
+ sizeof(HuffmanTable_B15) /
+ sizeof(JBig2TableLine),
+ HuffmanTable_HTOOB_B15));
+ }
+ pTRD->SBHUFFRDX = Table_B15;
+ } else {
+ pSeg = findReferredSegmentByTypeAndIndex(pSegment, 53, nIndex++);
+ if (!pSeg) {
+ m_pModule->JBig2_Error(
+ "text region segment : SBHUFFRDX can't find user supplied table");
nRet = JBIG2_ERROR_FATAL;
goto failed;
- }
- pSeg = findSegmentByNumber(pSegment->m_pReferred_to_segment_numbers[0]);
- if( (pSeg == NULL) || (pSeg->m_cFlags.s.type != 16)) {
- m_pModule->JBig2_Error("halftone region segment : refered to segment is not pattern dict");
+ }
+ pTRD->SBHUFFRDX = pSeg->m_Result.ht;
+ }
+ if (cSBHUFFRDY == 0) {
+ if (!Table_B14) {
+ JBIG2_ALLOC(Table_B14, CJBig2_HuffmanTable(HuffmanTable_B14,
+ sizeof(HuffmanTable_B14) /
+ sizeof(JBig2TableLine),
+ HuffmanTable_HTOOB_B14));
+ }
+ pTRD->SBHUFFRDY = Table_B14;
+ } else if (cSBHUFFRDY == 1) {
+ if (!Table_B15) {
+ JBIG2_ALLOC(Table_B15, CJBig2_HuffmanTable(HuffmanTable_B15,
+ sizeof(HuffmanTable_B15) /
+ sizeof(JBig2TableLine),
+ HuffmanTable_HTOOB_B15));
+ }
+ pTRD->SBHUFFRDY = Table_B15;
+ } else {
+ pSeg = findReferredSegmentByTypeAndIndex(pSegment, 53, nIndex++);
+ if (!pSeg) {
+ m_pModule->JBig2_Error(
+ "text region segment : SBHUFFRDY can't find user supplied table");
nRet = JBIG2_ERROR_FATAL;
goto failed;
- }
- pPatternDict = pSeg->m_Result.pd;
- if((pPatternDict == NULL) || (pPatternDict->NUMPATS == 0)) {
- m_pModule->JBig2_Error("halftone region segment : has no patterns input");
+ }
+ pTRD->SBHUFFRDY = pSeg->m_Result.ht;
+ }
+ if (cSBHUFFRSIZE == 0) {
+ JBIG2_ALLOC(Table_B1, CJBig2_HuffmanTable(HuffmanTable_B1,
+ sizeof(HuffmanTable_B1) /
+ sizeof(JBig2TableLine),
+ HuffmanTable_HTOOB_B1));
+ pTRD->SBHUFFRSIZE = Table_B1;
+ } else {
+ pSeg = findReferredSegmentByTypeAndIndex(pSegment, 53, nIndex++);
+ if (!pSeg) {
+ m_pModule->JBig2_Error(
+ "text region segment : SBHUFFRSIZE can't find user supplied table");
nRet = JBIG2_ERROR_FATAL;
goto failed;
+ }
+ pTRD->SBHUFFRSIZE = pSeg->m_Result.ht;
+ }
+ }
+ if (pTRD->SBREFINE == 1) {
+ dwTemp = pTRD->SBRTEMPLATE ? 1 << 10 : 1 << 13;
+ grContext =
+ (JBig2ArithCtx*)m_pModule->JBig2_Malloc2(sizeof(JBig2ArithCtx), dwTemp);
+ JBIG2_memset(grContext, 0, sizeof(JBig2ArithCtx) * dwTemp);
+ }
+ if (pTRD->SBHUFF == 0) {
+ JBIG2_ALLOC(pArithDecoder, CJBig2_ArithDecoder(m_pStream));
+ pSegment->m_nResultType = JBIG2_IMAGE_POINTER;
+ pSegment->m_Result.im = pTRD->decode_Arith(pArithDecoder, grContext);
+ delete pArithDecoder;
+ if (pSegment->m_Result.im == NULL) {
+ nRet = JBIG2_ERROR_FATAL;
+ goto failed;
}
- pHRD->HNUMPATS = pPatternDict->NUMPATS;
- pHRD->HPATS = pPatternDict->HDPATS;
- pHRD->HPW = pPatternDict->HDPATS[0]->m_nWidth;
- pHRD->HPH = pPatternDict->HDPATS[0]->m_nHeight;
+ m_pStream->alignByte();
+ m_pStream->offset(2);
+ } else {
pSegment->m_nResultType = JBIG2_IMAGE_POINTER;
- if(pHRD->HMMR == 0) {
- dwTemp = pHRD->HTEMPLATE == 0 ? 65536 : pHRD->HTEMPLATE == 1 ? 8192 : 1024;
- gbContext = (JBig2ArithCtx*)m_pModule->JBig2_Malloc2(sizeof(JBig2ArithCtx), dwTemp);
- JBIG2_memset(gbContext, 0, sizeof(JBig2ArithCtx)*dwTemp);
- JBIG2_ALLOC(pArithDecoder, CJBig2_ArithDecoder(m_pStream));
- pSegment->m_Result.im = pHRD->decode_Arith(pArithDecoder, gbContext, pPause);
- delete pArithDecoder;
- if(pSegment->m_Result.im == NULL) {
- m_pModule->JBig2_Free(gbContext);
- nRet = JBIG2_ERROR_FATAL;
- goto failed;
- }
- m_pModule->JBig2_Free(gbContext);
- m_pStream->alignByte();
- m_pStream->offset(2);
- } else {
- pSegment->m_Result.im = pHRD->decode_MMR(m_pStream, pPause);
- if(pSegment->m_Result.im == NULL) {
- nRet = JBIG2_ERROR_FATAL;
- goto failed;
- }
- m_pStream->alignByte();
- }
- if(pSegment->m_cFlags.s.type != 20) {
- if(!m_bBufSpecified) {
- JBig2PageInfo *pPageInfo = m_pPageInfoList->getLast();
- if ((pPageInfo->m_bIsStriped == 1) && (ri.y + ri.height > m_pPage->m_nHeight)) {
- m_pPage->expand(ri.y + ri.height, (pPageInfo->m_cFlags & 4) ? 1 : 0);
- }
- }
- m_pPage->composeFrom(ri.x, ri.y, pSegment->m_Result.im, (JBig2ComposeOp)(ri.flags & 0x03));
- delete pSegment->m_Result.im;
- pSegment->m_Result.im = NULL;
+ pSegment->m_Result.im = pTRD->decode_Huffman(m_pStream, grContext);
+ if (pSegment->m_Result.im == NULL) {
+ nRet = JBIG2_ERROR_FATAL;
+ goto failed;
}
- delete pHRD;
- return JBIG2_SUCCESS;
+ m_pStream->alignByte();
+ }
+ if (pSegment->m_cFlags.s.type != 4) {
+ if (!m_bBufSpecified) {
+ JBig2PageInfo* pPageInfo = m_pPageInfoList->getLast();
+ if ((pPageInfo->m_bIsStriped == 1) &&
+ (ri.y + ri.height > m_pPage->m_nHeight)) {
+ m_pPage->expand(ri.y + ri.height, (pPageInfo->m_cFlags & 4) ? 1 : 0);
+ }
+ }
+ m_pPage->composeFrom(ri.x, ri.y, pSegment->m_Result.im,
+ (JBig2ComposeOp)(ri.flags & 0x03));
+ delete pSegment->m_Result.im;
+ pSegment->m_Result.im = NULL;
+ }
+ delete pTRD;
+ if (SBSYMS) {
+ m_pModule->JBig2_Free(SBSYMS);
+ }
+ if (SBSYMCODES) {
+ m_pModule->JBig2_Free(SBSYMCODES);
+ }
+ if (grContext) {
+ m_pModule->JBig2_Free(grContext);
+ }
+ delete Table_B1;
+ delete Table_B6;
+ delete Table_B7;
+ delete Table_B8;
+ delete Table_B9;
+ delete Table_B10;
+ delete Table_B11;
+ delete Table_B12;
+ delete Table_B13;
+ delete Table_B14;
+ delete Table_B15;
+ return JBIG2_SUCCESS;
failed:
- delete pHRD;
- return nRet;
+ delete pTRD;
+ if (SBSYMS) {
+ m_pModule->JBig2_Free(SBSYMS);
+ }
+ if (SBSYMCODES) {
+ m_pModule->JBig2_Free(SBSYMCODES);
+ }
+ if (grContext) {
+ m_pModule->JBig2_Free(grContext);
+ }
+ delete Table_B1;
+ delete Table_B6;
+ delete Table_B7;
+ delete Table_B8;
+ delete Table_B9;
+ delete Table_B10;
+ delete Table_B11;
+ delete Table_B12;
+ delete Table_B13;
+ delete Table_B14;
+ delete Table_B15;
+ return nRet;
+}
+
+int32_t CJBig2_Context::parsePatternDict(CJBig2_Segment* pSegment,
+ IFX_Pause* pPause) {
+ FX_DWORD dwTemp;
+ uint8_t cFlags;
+ JBig2ArithCtx* gbContext;
+ CJBig2_ArithDecoder* pArithDecoder;
+ CJBig2_PDDProc* pPDD;
+ int32_t nRet;
+ JBIG2_ALLOC(pPDD, CJBig2_PDDProc());
+ if ((m_pStream->read1Byte(&cFlags) != 0) ||
+ (m_pStream->read1Byte(&pPDD->HDPW) != 0) ||
+ (m_pStream->read1Byte(&pPDD->HDPH) != 0) ||
+ (m_pStream->readInteger(&pPDD->GRAYMAX) != 0)) {
+ m_pModule->JBig2_Error(
+ "pattern dictionary segment : data header too short.");
+ nRet = JBIG2_ERROR_TOO_SHORT;
+ goto failed;
+ }
+ if (pPDD->GRAYMAX > JBIG2_MAX_PATTERN_INDEX) {
+ m_pModule->JBig2_Error("pattern dictionary segment : too max gray max.");
+ nRet = JBIG2_ERROR_LIMIT;
+ goto failed;
+ }
+ pPDD->HDMMR = cFlags & 0x01;
+ pPDD->HDTEMPLATE = (cFlags >> 1) & 0x03;
+ pSegment->m_nResultType = JBIG2_PATTERN_DICT_POINTER;
+ if (pPDD->HDMMR == 0) {
+ dwTemp =
+ pPDD->HDTEMPLATE == 0 ? 65536 : pPDD->HDTEMPLATE == 1 ? 8192 : 1024;
+ gbContext =
+ (JBig2ArithCtx*)m_pModule->JBig2_Malloc2(sizeof(JBig2ArithCtx), dwTemp);
+ JBIG2_memset(gbContext, 0, sizeof(JBig2ArithCtx) * dwTemp);
+ JBIG2_ALLOC(pArithDecoder, CJBig2_ArithDecoder(m_pStream));
+ pSegment->m_Result.pd =
+ pPDD->decode_Arith(pArithDecoder, gbContext, pPause);
+ delete pArithDecoder;
+ if (pSegment->m_Result.pd == NULL) {
+ m_pModule->JBig2_Free(gbContext);
+ nRet = JBIG2_ERROR_FATAL;
+ goto failed;
+ }
+ m_pModule->JBig2_Free(gbContext);
+ m_pStream->alignByte();
+ m_pStream->offset(2);
+ } else {
+ pSegment->m_Result.pd = pPDD->decode_MMR(m_pStream, pPause);
+ if (pSegment->m_Result.pd == NULL) {
+ nRet = JBIG2_ERROR_FATAL;
+ goto failed;
+ }
+ m_pStream->alignByte();
+ }
+ delete pPDD;
+ return JBIG2_SUCCESS;
+failed:
+ delete pPDD;
+ return nRet;
+}
+int32_t CJBig2_Context::parseHalftoneRegion(CJBig2_Segment* pSegment,
+ IFX_Pause* pPause) {
+ FX_DWORD dwTemp;
+ uint8_t cFlags;
+ JBig2RegionInfo ri;
+ CJBig2_Segment* pSeg;
+ CJBig2_PatternDict* pPatternDict;
+ JBig2ArithCtx* gbContext;
+ CJBig2_ArithDecoder* pArithDecoder;
+ CJBig2_HTRDProc* pHRD;
+ int32_t nRet;
+ JBIG2_ALLOC(pHRD, CJBig2_HTRDProc());
+ if ((parseRegionInfo(&ri) != JBIG2_SUCCESS) ||
+ (m_pStream->read1Byte(&cFlags) != 0) ||
+ (m_pStream->readInteger(&pHRD->HGW) != 0) ||
+ (m_pStream->readInteger(&pHRD->HGH) != 0) ||
+ (m_pStream->readInteger((FX_DWORD*)&pHRD->HGX) != 0) ||
+ (m_pStream->readInteger((FX_DWORD*)&pHRD->HGY) != 0) ||
+ (m_pStream->readShortInteger(&pHRD->HRX) != 0) ||
+ (m_pStream->readShortInteger(&pHRD->HRY) != 0)) {
+ m_pModule->JBig2_Error("halftone region segment : data header too short.");
+ nRet = JBIG2_ERROR_TOO_SHORT;
+ goto failed;
+ }
+ pHRD->HBW = ri.width;
+ pHRD->HBH = ri.height;
+ pHRD->HMMR = cFlags & 0x01;
+ pHRD->HTEMPLATE = (cFlags >> 1) & 0x03;
+ pHRD->HENABLESKIP = (cFlags >> 3) & 0x01;
+ pHRD->HCOMBOP = (JBig2ComposeOp)((cFlags >> 4) & 0x07);
+ pHRD->HDEFPIXEL = (cFlags >> 7) & 0x01;
+ if (pSegment->m_nReferred_to_segment_count != 1) {
+ m_pModule->JBig2_Error(
+ "halftone region segment : refered to segment count not equals 1");
+ nRet = JBIG2_ERROR_FATAL;
+ goto failed;
+ }
+ pSeg = findSegmentByNumber(pSegment->m_pReferred_to_segment_numbers[0]);
+ if ((pSeg == NULL) || (pSeg->m_cFlags.s.type != 16)) {
+ m_pModule->JBig2_Error(
+ "halftone region segment : refered to segment is not pattern dict");
+ nRet = JBIG2_ERROR_FATAL;
+ goto failed;
+ }
+ pPatternDict = pSeg->m_Result.pd;
+ if ((pPatternDict == NULL) || (pPatternDict->NUMPATS == 0)) {
+ m_pModule->JBig2_Error("halftone region segment : has no patterns input");
+ nRet = JBIG2_ERROR_FATAL;
+ goto failed;
+ }
+ pHRD->HNUMPATS = pPatternDict->NUMPATS;
+ pHRD->HPATS = pPatternDict->HDPATS;
+ pHRD->HPW = pPatternDict->HDPATS[0]->m_nWidth;
+ pHRD->HPH = pPatternDict->HDPATS[0]->m_nHeight;
+ pSegment->m_nResultType = JBIG2_IMAGE_POINTER;
+ if (pHRD->HMMR == 0) {
+ dwTemp = pHRD->HTEMPLATE == 0 ? 65536 : pHRD->HTEMPLATE == 1 ? 8192 : 1024;
+ gbContext =
+ (JBig2ArithCtx*)m_pModule->JBig2_Malloc2(sizeof(JBig2ArithCtx), dwTemp);
+ JBIG2_memset(gbContext, 0, sizeof(JBig2ArithCtx) * dwTemp);
+ JBIG2_ALLOC(pArithDecoder, CJBig2_ArithDecoder(m_pStream));
+ pSegment->m_Result.im =
+ pHRD->decode_Arith(pArithDecoder, gbContext, pPause);
+ delete pArithDecoder;
+ if (pSegment->m_Result.im == NULL) {
+ m_pModule->JBig2_Free(gbContext);
+ nRet = JBIG2_ERROR_FATAL;
+ goto failed;
+ }
+ m_pModule->JBig2_Free(gbContext);
+ m_pStream->alignByte();
+ m_pStream->offset(2);
+ } else {
+ pSegment->m_Result.im = pHRD->decode_MMR(m_pStream, pPause);
+ if (pSegment->m_Result.im == NULL) {
+ nRet = JBIG2_ERROR_FATAL;
+ goto failed;
+ }
+ m_pStream->alignByte();
+ }
+ if (pSegment->m_cFlags.s.type != 20) {
+ if (!m_bBufSpecified) {
+ JBig2PageInfo* pPageInfo = m_pPageInfoList->getLast();
+ if ((pPageInfo->m_bIsStriped == 1) &&
+ (ri.y + ri.height > m_pPage->m_nHeight)) {
+ m_pPage->expand(ri.y + ri.height, (pPageInfo->m_cFlags & 4) ? 1 : 0);
+ }
+ }
+ m_pPage->composeFrom(ri.x, ri.y, pSegment->m_Result.im,
+ (JBig2ComposeOp)(ri.flags & 0x03));
+ delete pSegment->m_Result.im;
+ pSegment->m_Result.im = NULL;
+ }
+ delete pHRD;
+ return JBIG2_SUCCESS;
+failed:
+ delete pHRD;
+ return nRet;
}
-int32_t CJBig2_Context::parseGenericRegion(CJBig2_Segment *pSegment, IFX_Pause* pPause)
-{
- FX_DWORD dwTemp;
- uint8_t cFlags;
- int32_t i, nRet;
- if(m_pGRD == NULL) {
- JBIG2_ALLOC(m_pGRD, CJBig2_GRDProc());
- if((parseRegionInfo(&m_ri) != JBIG2_SUCCESS)
- || (m_pStream->read1Byte(&cFlags) != 0)) {
- m_pModule->JBig2_Error("generic region segment : data header too short.");
+int32_t CJBig2_Context::parseGenericRegion(CJBig2_Segment* pSegment,
+ IFX_Pause* pPause) {
+ FX_DWORD dwTemp;
+ uint8_t cFlags;
+ int32_t i, nRet;
+ if (m_pGRD == NULL) {
+ JBIG2_ALLOC(m_pGRD, CJBig2_GRDProc());
+ if ((parseRegionInfo(&m_ri) != JBIG2_SUCCESS) ||
+ (m_pStream->read1Byte(&cFlags) != 0)) {
+ m_pModule->JBig2_Error("generic region segment : data header too short.");
+ nRet = JBIG2_ERROR_TOO_SHORT;
+ goto failed;
+ }
+ if (m_ri.height < 0 || m_ri.width < 0) {
+ m_pModule->JBig2_Error("generic region segment : wrong data.");
+ nRet = JBIG2_FAILED;
+ goto failed;
+ }
+ m_pGRD->GBW = m_ri.width;
+ m_pGRD->GBH = m_ri.height;
+ m_pGRD->MMR = cFlags & 0x01;
+ m_pGRD->GBTEMPLATE = (cFlags >> 1) & 0x03;
+ m_pGRD->TPGDON = (cFlags >> 3) & 0x01;
+ if (m_pGRD->MMR == 0) {
+ if (m_pGRD->GBTEMPLATE == 0) {
+ for (i = 0; i < 8; i++) {
+ if (m_pStream->read1Byte((uint8_t*)&m_pGRD->GBAT[i]) != 0) {
+ m_pModule->JBig2_Error(
+ "generic region segment : data header too short.");
nRet = JBIG2_ERROR_TOO_SHORT;
goto failed;
+ }
}
- if (m_ri.height < 0 || m_ri.width < 0) {
- m_pModule->JBig2_Error("generic region segment : wrong data.");
- nRet = JBIG2_FAILED;
+ } else {
+ for (i = 0; i < 2; i++) {
+ if (m_pStream->read1Byte((uint8_t*)&m_pGRD->GBAT[i]) != 0) {
+ m_pModule->JBig2_Error(
+ "generic region segment : data header too short.");
+ nRet = JBIG2_ERROR_TOO_SHORT;
goto failed;
- }
- m_pGRD->GBW = m_ri.width;
- m_pGRD->GBH = m_ri.height;
- m_pGRD->MMR = cFlags & 0x01;
- m_pGRD->GBTEMPLATE = (cFlags >> 1) & 0x03;
- m_pGRD->TPGDON = (cFlags >> 3) & 0x01;
- if(m_pGRD->MMR == 0) {
- if(m_pGRD->GBTEMPLATE == 0) {
- for(i = 0; i < 8; i++) {
- if(m_pStream->read1Byte((uint8_t*)&m_pGRD->GBAT[i]) != 0) {
- m_pModule->JBig2_Error("generic region segment : data header too short.");
- nRet = JBIG2_ERROR_TOO_SHORT;
- goto failed;
- }
- }
- } else {
- for(i = 0; i < 2; i++) {
- if(m_pStream->read1Byte((uint8_t*)&m_pGRD->GBAT[i]) != 0) {
- m_pModule->JBig2_Error("generic region segment : data header too short.");
- nRet = JBIG2_ERROR_TOO_SHORT;
- goto failed;
- }
- }
- }
- }
- m_pGRD->USESKIP = 0;
- }
- pSegment->m_nResultType = JBIG2_IMAGE_POINTER;
- if(m_pGRD->MMR == 0) {
- dwTemp = m_pGRD->GBTEMPLATE == 0 ? 65536 : m_pGRD->GBTEMPLATE == 1 ? 8192 : 1024;
- if(m_gbContext == NULL) {
- m_gbContext = (JBig2ArithCtx*)m_pModule->JBig2_Malloc(sizeof(JBig2ArithCtx) * dwTemp);
- JBIG2_memset(m_gbContext, 0, sizeof(JBig2ArithCtx)*dwTemp);
- }
- if(m_pArithDecoder == NULL) {
- JBIG2_ALLOC(m_pArithDecoder, CJBig2_ArithDecoder(m_pStream));
- m_ProcessiveStatus = m_pGRD->Start_decode_Arith(&pSegment->m_Result.im, m_pArithDecoder, m_gbContext, pPause);
- } else {
- m_ProcessiveStatus = m_pGRD->Continue_decode(pPause);
- }
- OutputBitmap(pSegment->m_Result.im);
- if(m_ProcessiveStatus == FXCODEC_STATUS_DECODE_TOBECONTINUE) {
- if(pSegment->m_cFlags.s.type != 36) {
- if(!m_bBufSpecified) {
- JBig2PageInfo *pPageInfo = m_pPageInfoList->getLast();
- if ((pPageInfo->m_bIsStriped == 1) && (m_ri.y + m_ri.height > m_pPage->m_nHeight)) {
- m_pPage->expand(m_ri.y + m_ri.height, (pPageInfo->m_cFlags & 4) ? 1 : 0);
- }
- }
- FX_RECT Rect = m_pGRD->GetReplaceRect();
- m_pPage->composeFrom(m_ri.x + Rect.left, m_ri.y + Rect.top, pSegment->m_Result.im, (JBig2ComposeOp)(m_ri.flags & 0x03), &Rect);
- }
- return JBIG2_SUCCESS;
- } else {
- delete m_pArithDecoder;
- m_pArithDecoder = NULL;
- if(pSegment->m_Result.im == NULL) {
- m_pModule->JBig2_Free(m_gbContext);
- nRet = JBIG2_ERROR_FATAL;
- m_gbContext = NULL;
- m_ProcessiveStatus = FXCODEC_STATUS_ERROR;
- goto failed;
- }
- m_pModule->JBig2_Free(m_gbContext);
- m_gbContext = NULL;
- m_pStream->alignByte();
- m_pStream->offset(2);
- }
+ }
+ }
+ }
+ }
+ m_pGRD->USESKIP = 0;
+ }
+ pSegment->m_nResultType = JBIG2_IMAGE_POINTER;
+ if (m_pGRD->MMR == 0) {
+ dwTemp =
+ m_pGRD->GBTEMPLATE == 0 ? 65536 : m_pGRD->GBTEMPLATE == 1 ? 8192 : 1024;
+ if (m_gbContext == NULL) {
+ m_gbContext = (JBig2ArithCtx*)m_pModule->JBig2_Malloc(
+ sizeof(JBig2ArithCtx) * dwTemp);
+ JBIG2_memset(m_gbContext, 0, sizeof(JBig2ArithCtx) * dwTemp);
+ }
+ if (m_pArithDecoder == NULL) {
+ JBIG2_ALLOC(m_pArithDecoder, CJBig2_ArithDecoder(m_pStream));
+ m_ProcessiveStatus = m_pGRD->Start_decode_Arith(
+ &pSegment->m_Result.im, m_pArithDecoder, m_gbContext, pPause);
} else {
- FXCODEC_STATUS status = m_pGRD->Start_decode_MMR(&pSegment->m_Result.im, m_pStream, pPause);
- while(status == FXCODEC_STATUS_DECODE_TOBECONTINUE) {
- m_pGRD->Continue_decode(pPause);
- }
- if(pSegment->m_Result.im == NULL) {
- nRet = JBIG2_ERROR_FATAL;
- goto failed;
- }
- m_pStream->alignByte();
- }
- if(pSegment->m_cFlags.s.type != 36) {
- if(!m_bBufSpecified) {
- JBig2PageInfo *pPageInfo = m_pPageInfoList->getLast();
- if ((pPageInfo->m_bIsStriped == 1) && (m_ri.y + m_ri.height > m_pPage->m_nHeight)) {
- m_pPage->expand(m_ri.y + m_ri.height, (pPageInfo->m_cFlags & 4) ? 1 : 0);
- }
+ m_ProcessiveStatus = m_pGRD->Continue_decode(pPause);
+ }
+ OutputBitmap(pSegment->m_Result.im);
+ if (m_ProcessiveStatus == FXCODEC_STATUS_DECODE_TOBECONTINUE) {
+ if (pSegment->m_cFlags.s.type != 36) {
+ if (!m_bBufSpecified) {
+ JBig2PageInfo* pPageInfo = m_pPageInfoList->getLast();
+ if ((pPageInfo->m_bIsStriped == 1) &&
+ (m_ri.y + m_ri.height > m_pPage->m_nHeight)) {
+ m_pPage->expand(m_ri.y + m_ri.height,
+ (pPageInfo->m_cFlags & 4) ? 1 : 0);
+ }
}
FX_RECT Rect = m_pGRD->GetReplaceRect();
- m_pPage->composeFrom(m_ri.x + Rect.left, m_ri.y + Rect.top, pSegment->m_Result.im, (JBig2ComposeOp)(m_ri.flags & 0x03), &Rect);
- delete pSegment->m_Result.im;
- pSegment->m_Result.im = NULL;
+ m_pPage->composeFrom(m_ri.x + Rect.left, m_ri.y + Rect.top,
+ pSegment->m_Result.im,
+ (JBig2ComposeOp)(m_ri.flags & 0x03), &Rect);
+ }
+ return JBIG2_SUCCESS;
+ } else {
+ delete m_pArithDecoder;
+ m_pArithDecoder = NULL;
+ if (pSegment->m_Result.im == NULL) {
+ m_pModule->JBig2_Free(m_gbContext);
+ nRet = JBIG2_ERROR_FATAL;
+ m_gbContext = NULL;
+ m_ProcessiveStatus = FXCODEC_STATUS_ERROR;
+ goto failed;
+ }
+ m_pModule->JBig2_Free(m_gbContext);
+ m_gbContext = NULL;
+ m_pStream->alignByte();
+ m_pStream->offset(2);
+ }
+ } else {
+ FXCODEC_STATUS status =
+ m_pGRD->Start_decode_MMR(&pSegment->m_Result.im, m_pStream, pPause);
+ while (status == FXCODEC_STATUS_DECODE_TOBECONTINUE) {
+ m_pGRD->Continue_decode(pPause);
+ }
+ if (pSegment->m_Result.im == NULL) {
+ nRet = JBIG2_ERROR_FATAL;
+ goto failed;
}
- delete m_pGRD;
- m_pGRD = NULL;
- return JBIG2_SUCCESS;
+ m_pStream->alignByte();
+ }
+ if (pSegment->m_cFlags.s.type != 36) {
+ if (!m_bBufSpecified) {
+ JBig2PageInfo* pPageInfo = m_pPageInfoList->getLast();
+ if ((pPageInfo->m_bIsStriped == 1) &&
+ (m_ri.y + m_ri.height > m_pPage->m_nHeight)) {
+ m_pPage->expand(m_ri.y + m_ri.height,
+ (pPageInfo->m_cFlags & 4) ? 1 : 0);
+ }
+ }
+ FX_RECT Rect = m_pGRD->GetReplaceRect();
+ m_pPage->composeFrom(m_ri.x + Rect.left, m_ri.y + Rect.top,
+ pSegment->m_Result.im,
+ (JBig2ComposeOp)(m_ri.flags & 0x03), &Rect);
+ delete pSegment->m_Result.im;
+ pSegment->m_Result.im = NULL;
+ }
+ delete m_pGRD;
+ m_pGRD = NULL;
+ return JBIG2_SUCCESS;
failed:
- delete m_pGRD;
- m_pGRD = NULL;
- return nRet;
+ delete m_pGRD;
+ m_pGRD = NULL;
+ return nRet;
}
-int32_t CJBig2_Context::parseGenericRefinementRegion(CJBig2_Segment *pSegment)
-{
- FX_DWORD dwTemp;
- JBig2RegionInfo ri;
- CJBig2_Segment *pSeg;
- int32_t i, nRet;
- uint8_t cFlags;
- JBig2ArithCtx *grContext;
- CJBig2_GRRDProc *pGRRD;
- CJBig2_ArithDecoder *pArithDecoder;
- JBIG2_ALLOC(pGRRD, CJBig2_GRRDProc());
- if((parseRegionInfo(&ri) != JBIG2_SUCCESS)
- || (m_pStream->read1Byte(&cFlags) != 0)) {
- m_pModule->JBig2_Error("generic refinement region segment : data header too short.");
+int32_t CJBig2_Context::parseGenericRefinementRegion(CJBig2_Segment* pSegment) {
+ FX_DWORD dwTemp;
+ JBig2RegionInfo ri;
+ CJBig2_Segment* pSeg;
+ int32_t i, nRet;
+ uint8_t cFlags;
+ JBig2ArithCtx* grContext;
+ CJBig2_GRRDProc* pGRRD;
+ CJBig2_ArithDecoder* pArithDecoder;
+ JBIG2_ALLOC(pGRRD, CJBig2_GRRDProc());
+ if ((parseRegionInfo(&ri) != JBIG2_SUCCESS) ||
+ (m_pStream->read1Byte(&cFlags) != 0)) {
+ m_pModule->JBig2_Error(
+ "generic refinement region segment : data header too short.");
+ nRet = JBIG2_ERROR_TOO_SHORT;
+ goto failed;
+ }
+ pGRRD->GRW = ri.width;
+ pGRRD->GRH = ri.height;
+ pGRRD->GRTEMPLATE = cFlags & 0x01;
+ pGRRD->TPGRON = (cFlags >> 1) & 0x01;
+ if (pGRRD->GRTEMPLATE == 0) {
+ for (i = 0; i < 4; i++) {
+ if (m_pStream->read1Byte((uint8_t*)&pGRRD->GRAT[i]) != 0) {
+ m_pModule->JBig2_Error(
+ "generic refinement region segment : data header too short.");
nRet = JBIG2_ERROR_TOO_SHORT;
goto failed;
- }
- pGRRD->GRW = ri.width;
- pGRRD->GRH = ri.height;
- pGRRD->GRTEMPLATE = cFlags & 0x01;
- pGRRD->TPGRON = (cFlags >> 1) & 0x01;
- if(pGRRD->GRTEMPLATE == 0) {
- for(i = 0; i < 4; i++) {
- if(m_pStream->read1Byte((uint8_t*)&pGRRD->GRAT[i]) != 0) {
- m_pModule->JBig2_Error("generic refinement region segment : data header too short.");
- nRet = JBIG2_ERROR_TOO_SHORT;
- goto failed;
- }
- }
- }
- pSeg = NULL;
- if(pSegment->m_nReferred_to_segment_count > 0) {
- for(i = 0; i < pSegment->m_nReferred_to_segment_count; i++) {
- pSeg = findSegmentByNumber(pSegment->m_pReferred_to_segment_numbers[0]);
- if(pSeg == NULL) {
- m_pModule->JBig2_Error("generic refinement region segment : can't find refered to segments");
- nRet = JBIG2_ERROR_FATAL;
- goto failed;
- }
- if((pSeg->m_cFlags.s.type == 4) || (pSeg->m_cFlags.s.type == 20)
- || (pSeg->m_cFlags.s.type == 36) || (pSeg->m_cFlags.s.type == 40)) {
- break;
- }
- }
- if(i >= pSegment->m_nReferred_to_segment_count) {
- m_pModule->JBig2_Error("generic refinement region segment : can't find refered to intermediate region");
- nRet = JBIG2_ERROR_FATAL;
- goto failed;
- }
- pGRRD->GRREFERENCE = pSeg->m_Result.im;
- } else {
- pGRRD->GRREFERENCE = m_pPage;
- }
- pGRRD->GRREFERENCEDX = 0;
- pGRRD->GRREFERENCEDY = 0;
- dwTemp = pGRRD->GRTEMPLATE ? 1 << 10 : 1 << 13;
- grContext = (JBig2ArithCtx*)m_pModule->JBig2_Malloc2(sizeof(JBig2ArithCtx), dwTemp);
- JBIG2_memset(grContext, 0, sizeof(JBig2ArithCtx)*dwTemp);
- JBIG2_ALLOC(pArithDecoder, CJBig2_ArithDecoder(m_pStream));
- pSegment->m_nResultType = JBIG2_IMAGE_POINTER;
- pSegment->m_Result.im = pGRRD->decode(pArithDecoder, grContext);
- delete pArithDecoder;
- if(pSegment->m_Result.im == NULL) {
- m_pModule->JBig2_Free(grContext);
+ }
+ }
+ }
+ pSeg = NULL;
+ if (pSegment->m_nReferred_to_segment_count > 0) {
+ for (i = 0; i < pSegment->m_nReferred_to_segment_count; i++) {
+ pSeg = findSegmentByNumber(pSegment->m_pReferred_to_segment_numbers[0]);
+ if (pSeg == NULL) {
+ m_pModule->JBig2_Error(
+ "generic refinement region segment : can't find refered to "
+ "segments");
nRet = JBIG2_ERROR_FATAL;
goto failed;
- }
+ }
+ if ((pSeg->m_cFlags.s.type == 4) || (pSeg->m_cFlags.s.type == 20) ||
+ (pSeg->m_cFlags.s.type == 36) || (pSeg->m_cFlags.s.type == 40)) {
+ break;
+ }
+ }
+ if (i >= pSegment->m_nReferred_to_segment_count) {
+ m_pModule->JBig2_Error(
+ "generic refinement region segment : can't find refered to "
+ "intermediate region");
+ nRet = JBIG2_ERROR_FATAL;
+ goto failed;
+ }
+ pGRRD->GRREFERENCE = pSeg->m_Result.im;
+ } else {
+ pGRRD->GRREFERENCE = m_pPage;
+ }
+ pGRRD->GRREFERENCEDX = 0;
+ pGRRD->GRREFERENCEDY = 0;
+ dwTemp = pGRRD->GRTEMPLATE ? 1 << 10 : 1 << 13;
+ grContext =
+ (JBig2ArithCtx*)m_pModule->JBig2_Malloc2(sizeof(JBig2ArithCtx), dwTemp);
+ JBIG2_memset(grContext, 0, sizeof(JBig2ArithCtx) * dwTemp);
+ JBIG2_ALLOC(pArithDecoder, CJBig2_ArithDecoder(m_pStream));
+ pSegment->m_nResultType = JBIG2_IMAGE_POINTER;
+ pSegment->m_Result.im = pGRRD->decode(pArithDecoder, grContext);
+ delete pArithDecoder;
+ if (pSegment->m_Result.im == NULL) {
m_pModule->JBig2_Free(grContext);
- m_pStream->alignByte();
- m_pStream->offset(2);
- if(pSegment->m_cFlags.s.type != 40) {
- if(!m_bBufSpecified) {
- JBig2PageInfo *pPageInfo = m_pPageInfoList->getLast();
- if ((pPageInfo->m_bIsStriped == 1) && (ri.y + ri.height > m_pPage->m_nHeight)) {
- m_pPage->expand(ri.y + ri.height, (pPageInfo->m_cFlags & 4) ? 1 : 0);
- }
- }
- m_pPage->composeFrom(ri.x, ri.y, pSegment->m_Result.im, (JBig2ComposeOp)(ri.flags & 0x03));
- delete pSegment->m_Result.im;
- pSegment->m_Result.im = NULL;
- }
- delete pGRRD;
- return JBIG2_SUCCESS;
+ nRet = JBIG2_ERROR_FATAL;
+ goto failed;
+ }
+ m_pModule->JBig2_Free(grContext);
+ m_pStream->alignByte();
+ m_pStream->offset(2);
+ if (pSegment->m_cFlags.s.type != 40) {
+ if (!m_bBufSpecified) {
+ JBig2PageInfo* pPageInfo = m_pPageInfoList->getLast();
+ if ((pPageInfo->m_bIsStriped == 1) &&
+ (ri.y + ri.height > m_pPage->m_nHeight)) {
+ m_pPage->expand(ri.y + ri.height, (pPageInfo->m_cFlags & 4) ? 1 : 0);
+ }
+ }
+ m_pPage->composeFrom(ri.x, ri.y, pSegment->m_Result.im,
+ (JBig2ComposeOp)(ri.flags & 0x03));
+ delete pSegment->m_Result.im;
+ pSegment->m_Result.im = NULL;
+ }
+ delete pGRRD;
+ return JBIG2_SUCCESS;
failed:
- delete pGRRD;
- return nRet;
+ delete pGRRD;
+ return nRet;
}
-int32_t CJBig2_Context::parseTable(CJBig2_Segment *pSegment)
-{
- pSegment->m_nResultType = JBIG2_HUFFMAN_TABLE_POINTER;
- JBIG2_ALLOC(pSegment->m_Result.ht, CJBig2_HuffmanTable(m_pStream));
- if(!pSegment->m_Result.ht->isOK()) {
- delete pSegment->m_Result.ht;
- pSegment->m_Result.ht = NULL;
- return JBIG2_ERROR_FATAL;
- }
- m_pStream->alignByte();
- return JBIG2_SUCCESS;
+int32_t CJBig2_Context::parseTable(CJBig2_Segment* pSegment) {
+ pSegment->m_nResultType = JBIG2_HUFFMAN_TABLE_POINTER;
+ JBIG2_ALLOC(pSegment->m_Result.ht, CJBig2_HuffmanTable(m_pStream));
+ if (!pSegment->m_Result.ht->isOK()) {
+ delete pSegment->m_Result.ht;
+ pSegment->m_Result.ht = NULL;
+ return JBIG2_ERROR_FATAL;
+ }
+ m_pStream->alignByte();
+ return JBIG2_SUCCESS;
}
-int32_t CJBig2_Context::parseRegionInfo(JBig2RegionInfo *pRI)
-{
- if((m_pStream->readInteger((FX_DWORD*)&pRI->width) != 0)
- || (m_pStream->readInteger((FX_DWORD*)&pRI->height) != 0)
- || (m_pStream->readInteger((FX_DWORD*)&pRI->x) != 0)
- || (m_pStream->readInteger((FX_DWORD*)&pRI->y) != 0)
- || (m_pStream->read1Byte(&pRI->flags) != 0)) {
- return JBIG2_ERROR_TOO_SHORT;
- }
- return JBIG2_SUCCESS;
+int32_t CJBig2_Context::parseRegionInfo(JBig2RegionInfo* pRI) {
+ if ((m_pStream->readInteger((FX_DWORD*)&pRI->width) != 0) ||
+ (m_pStream->readInteger((FX_DWORD*)&pRI->height) != 0) ||
+ (m_pStream->readInteger((FX_DWORD*)&pRI->x) != 0) ||
+ (m_pStream->readInteger((FX_DWORD*)&pRI->y) != 0) ||
+ (m_pStream->read1Byte(&pRI->flags) != 0)) {
+ return JBIG2_ERROR_TOO_SHORT;
+ }
+ return JBIG2_SUCCESS;
}
-JBig2HuffmanCode *CJBig2_Context::decodeSymbolIDHuffmanTable(CJBig2_BitStream *pStream,
- FX_DWORD SBNUMSYMS)
-{
- JBig2HuffmanCode *SBSYMCODES;
- int32_t runcodes[35];
- int32_t runcodes_len[35];
- int32_t runcode;
- int32_t i;
- int32_t j;
- int32_t nVal;
- int32_t nBits;
- int32_t run;
- FX_DWORD nTemp;
- SBSYMCODES = (JBig2HuffmanCode*)m_pModule->JBig2_Malloc2(sizeof(JBig2HuffmanCode), SBNUMSYMS);
- for (i = 0; i < 35; i ++) {
- if(pStream->readNBits(4, &runcodes_len[i]) != 0) {
- goto failed;
- }
+JBig2HuffmanCode* CJBig2_Context::decodeSymbolIDHuffmanTable(
+ CJBig2_BitStream* pStream,
+ FX_DWORD SBNUMSYMS) {
+ JBig2HuffmanCode* SBSYMCODES;
+ int32_t runcodes[35];
+ int32_t runcodes_len[35];
+ int32_t runcode;
+ int32_t i;
+ int32_t j;
+ int32_t nVal;
+ int32_t nBits;
+ int32_t run;
+ FX_DWORD nTemp;
+ SBSYMCODES = (JBig2HuffmanCode*)m_pModule->JBig2_Malloc2(
+ sizeof(JBig2HuffmanCode), SBNUMSYMS);
+ for (i = 0; i < 35; i++) {
+ if (pStream->readNBits(4, &runcodes_len[i]) != 0) {
+ goto failed;
+ }
+ }
+ huffman_assign_code(runcodes, runcodes_len, 35);
+ i = 0;
+ while (i < (int)SBNUMSYMS) {
+ nVal = 0;
+ nBits = 0;
+ for (;;) {
+ if (pStream->read1Bit(&nTemp) != 0) {
+ goto failed;
+ }
+ nVal = (nVal << 1) | nTemp;
+ nBits++;
+ for (j = 0; j < 35; j++) {
+ if ((nBits == runcodes_len[j]) && (nVal == runcodes[j])) {
+ break;
+ }
+ }
+ if (j < 35) {
+ break;
+ }
+ }
+ runcode = j;
+ if (runcode < 32) {
+ SBSYMCODES[i].codelen = runcode;
+ run = 0;
+ } else if (runcode == 32) {
+ if (pStream->readNBits(2, &nTemp) != 0) {
+ goto failed;
+ }
+ run = nTemp + 3;
+ } else if (runcode == 33) {
+ if (pStream->readNBits(3, &nTemp) != 0) {
+ goto failed;
+ }
+ run = nTemp + 3;
+ } else if (runcode == 34) {
+ if (pStream->readNBits(7, &nTemp) != 0) {
+ goto failed;
+ }
+ run = nTemp + 11;
}
- huffman_assign_code(runcodes, runcodes_len, 35);
- i = 0;
- while(i < (int)SBNUMSYMS) {
- nVal = 0;
- nBits = 0;
- for(;;) {
- if(pStream->read1Bit(&nTemp) != 0) {
- goto failed;
- }
- nVal = (nVal << 1) | nTemp;
- nBits ++;
- for(j = 0; j < 35; j++) {
- if((nBits == runcodes_len[j]) && (nVal == runcodes[j])) {
- break;
- }
- }
- if(j < 35) {
- break;
- }
- }
- runcode = j;
- if(runcode < 32) {
- SBSYMCODES[i].codelen = runcode;
- run = 0;
- } else if(runcode == 32) {
- if(pStream->readNBits(2, &nTemp) != 0) {
- goto failed;
- }
- run = nTemp + 3;
- } else if(runcode == 33) {
- if(pStream->readNBits(3, &nTemp) != 0) {
- goto failed;
- }
- run = nTemp + 3;
- } else if(runcode == 34) {
- if(pStream->readNBits(7, &nTemp) != 0) {
- goto failed;
- }
- run = nTemp + 11;
- }
- if(run > 0) {
- if (i + run > (int)SBNUMSYMS) {
- goto failed;
- }
- for(j = 0; j < run; j++) {
- if(runcode == 32 && i > 0) {
- SBSYMCODES[i + j].codelen = SBSYMCODES[i - 1].codelen;
- } else {
- SBSYMCODES[i + j].codelen = 0;
- }
- }
- i += run;
+ if (run > 0) {
+ if (i + run > (int)SBNUMSYMS) {
+ goto failed;
+ }
+ for (j = 0; j < run; j++) {
+ if (runcode == 32 && i > 0) {
+ SBSYMCODES[i + j].codelen = SBSYMCODES[i - 1].codelen;
} else {
- i ++;
+ SBSYMCODES[i + j].codelen = 0;
}
+ }
+ i += run;
+ } else {
+ i++;
}
- huffman_assign_code(SBSYMCODES, SBNUMSYMS);
- return SBSYMCODES;
+ }
+ huffman_assign_code(SBSYMCODES, SBNUMSYMS);
+ return SBSYMCODES;
failed:
- m_pModule->JBig2_Free(SBSYMCODES);
- return NULL;
+ m_pModule->JBig2_Free(SBSYMCODES);
+ return NULL;
}
-void CJBig2_Context::huffman_assign_code(int* CODES, int* PREFLEN, int NTEMP)
-{
- int CURLEN, LENMAX, CURCODE, CURTEMP, i;
- int *LENCOUNT;
- int *FIRSTCODE;
- LENMAX = 0;
- for(i = 0; i < NTEMP; i++) {
- if(PREFLEN[i] > LENMAX) {
- LENMAX = PREFLEN[i];
- }
- }
- LENCOUNT = (int*)m_pModule->JBig2_Malloc2(sizeof(int), (LENMAX + 1));
- JBIG2_memset(LENCOUNT, 0, sizeof(int) * (LENMAX + 1));
- FIRSTCODE = (int*)m_pModule->JBig2_Malloc2(sizeof(int), (LENMAX + 1));
- for(i = 0; i < NTEMP; i++) {
- LENCOUNT[PREFLEN[i]] ++;
- }
- CURLEN = 1;
- FIRSTCODE[0] = 0;
- LENCOUNT[0] = 0;
- while(CURLEN <= LENMAX) {
- FIRSTCODE[CURLEN] = (FIRSTCODE[CURLEN - 1] + LENCOUNT[CURLEN - 1]) << 1;
- CURCODE = FIRSTCODE[CURLEN];
- CURTEMP = 0;
- while(CURTEMP < NTEMP) {
- if(PREFLEN[CURTEMP] == CURLEN) {
- CODES[CURTEMP] = CURCODE;
- CURCODE = CURCODE + 1;
- }
- CURTEMP = CURTEMP + 1;
- }
- CURLEN = CURLEN + 1;
- }
- m_pModule->JBig2_Free(LENCOUNT);
- m_pModule->JBig2_Free(FIRSTCODE);
+void CJBig2_Context::huffman_assign_code(int* CODES, int* PREFLEN, int NTEMP) {
+ int CURLEN, LENMAX, CURCODE, CURTEMP, i;
+ int* LENCOUNT;
+ int* FIRSTCODE;
+ LENMAX = 0;
+ for (i = 0; i < NTEMP; i++) {
+ if (PREFLEN[i] > LENMAX) {
+ LENMAX = PREFLEN[i];
+ }
+ }
+ LENCOUNT = (int*)m_pModule->JBig2_Malloc2(sizeof(int), (LENMAX + 1));
+ JBIG2_memset(LENCOUNT, 0, sizeof(int) * (LENMAX + 1));
+ FIRSTCODE = (int*)m_pModule->JBig2_Malloc2(sizeof(int), (LENMAX + 1));
+ for (i = 0; i < NTEMP; i++) {
+ LENCOUNT[PREFLEN[i]]++;
+ }
+ CURLEN = 1;
+ FIRSTCODE[0] = 0;
+ LENCOUNT[0] = 0;
+ while (CURLEN <= LENMAX) {
+ FIRSTCODE[CURLEN] = (FIRSTCODE[CURLEN - 1] + LENCOUNT[CURLEN - 1]) << 1;
+ CURCODE = FIRSTCODE[CURLEN];
+ CURTEMP = 0;
+ while (CURTEMP < NTEMP) {
+ if (PREFLEN[CURTEMP] == CURLEN) {
+ CODES[CURTEMP] = CURCODE;
+ CURCODE = CURCODE + 1;
+ }
+ CURTEMP = CURTEMP + 1;
+ }
+ CURLEN = CURLEN + 1;
+ }
+ m_pModule->JBig2_Free(LENCOUNT);
+ m_pModule->JBig2_Free(FIRSTCODE);
}
-void CJBig2_Context::huffman_assign_code(JBig2HuffmanCode *SBSYMCODES, int NTEMP)
-{
- int CURLEN, LENMAX, CURCODE, CURTEMP, i;
- int *LENCOUNT;
- int *FIRSTCODE;
- LENMAX = 0;
- for(i = 0; i < NTEMP; i++) {
- if(SBSYMCODES[i].codelen > LENMAX) {
- LENMAX = SBSYMCODES[i].codelen;
- }
- }
- LENCOUNT = (int*)m_pModule->JBig2_Malloc2(sizeof(int), (LENMAX + 1));
- JBIG2_memset(LENCOUNT, 0, sizeof(int) * (LENMAX + 1));
- FIRSTCODE = (int*)m_pModule->JBig2_Malloc2(sizeof(int), (LENMAX + 1));
- for(i = 0; i < NTEMP; i++) {
- LENCOUNT[SBSYMCODES[i].codelen] ++;
- }
- CURLEN = 1;
- FIRSTCODE[0] = 0;
- LENCOUNT[0] = 0;
- while(CURLEN <= LENMAX) {
- FIRSTCODE[CURLEN] = (FIRSTCODE[CURLEN - 1] + LENCOUNT[CURLEN - 1]) << 1;
- CURCODE = FIRSTCODE[CURLEN];
- CURTEMP = 0;
- while(CURTEMP < NTEMP) {
- if(SBSYMCODES[CURTEMP].codelen == CURLEN) {
- SBSYMCODES[CURTEMP].code = CURCODE;
- CURCODE = CURCODE + 1;
- }
- CURTEMP = CURTEMP + 1;
- }
- CURLEN = CURLEN + 1;
- }
- m_pModule->JBig2_Free(LENCOUNT);
- m_pModule->JBig2_Free(FIRSTCODE);
+void CJBig2_Context::huffman_assign_code(JBig2HuffmanCode* SBSYMCODES,
+ int NTEMP) {
+ int CURLEN, LENMAX, CURCODE, CURTEMP, i;
+ int* LENCOUNT;
+ int* FIRSTCODE;
+ LENMAX = 0;
+ for (i = 0; i < NTEMP; i++) {
+ if (SBSYMCODES[i].codelen > LENMAX) {
+ LENMAX = SBSYMCODES[i].codelen;
+ }
+ }
+ LENCOUNT = (int*)m_pModule->JBig2_Malloc2(sizeof(int), (LENMAX + 1));
+ JBIG2_memset(LENCOUNT, 0, sizeof(int) * (LENMAX + 1));
+ FIRSTCODE = (int*)m_pModule->JBig2_Malloc2(sizeof(int), (LENMAX + 1));
+ for (i = 0; i < NTEMP; i++) {
+ LENCOUNT[SBSYMCODES[i].codelen]++;
+ }
+ CURLEN = 1;
+ FIRSTCODE[0] = 0;
+ LENCOUNT[0] = 0;
+ while (CURLEN <= LENMAX) {
+ FIRSTCODE[CURLEN] = (FIRSTCODE[CURLEN - 1] + LENCOUNT[CURLEN - 1]) << 1;
+ CURCODE = FIRSTCODE[CURLEN];
+ CURTEMP = 0;
+ while (CURTEMP < NTEMP) {
+ if (SBSYMCODES[CURTEMP].codelen == CURLEN) {
+ SBSYMCODES[CURTEMP].code = CURCODE;
+ CURCODE = CURCODE + 1;
+ }
+ CURTEMP = CURTEMP + 1;
+ }
+ CURLEN = CURLEN + 1;
+ }
+ m_pModule->JBig2_Free(LENCOUNT);
+ m_pModule->JBig2_Free(FIRSTCODE);
}
diff --git a/core/src/fxcodec/jbig2/JBig2_Context.h b/core/src/fxcodec/jbig2/JBig2_Context.h
index e6a0d7b3bc..07f886ee49 100644
--- a/core/src/fxcodec/jbig2/JBig2_Context.h
+++ b/core/src/fxcodec/jbig2/JBig2_Context.h
@@ -19,123 +19,139 @@
typedef std::pair<uint8_t*, CJBig2_SymbolDict*> CJBig2_CachePair;
typedef enum {
- JBIG2_OUT_OF_PAGE = 0,
- JBIG2_IN_PAGE,
+ JBIG2_OUT_OF_PAGE = 0,
+ JBIG2_IN_PAGE,
} JBig2State;
-#define JBIG2_SUCCESS 0
-#define JBIG2_FAILED -1
-#define JBIG2_ERROR_TOO_SHORT -2
-#define JBIG2_ERROR_FATAL -3
-#define JBIG2_END_OF_PAGE 2
-#define JBIG2_END_OF_FILE 3
+#define JBIG2_SUCCESS 0
+#define JBIG2_FAILED -1
+#define JBIG2_ERROR_TOO_SHORT -2
+#define JBIG2_ERROR_FATAL -3
+#define JBIG2_END_OF_PAGE 2
+#define JBIG2_END_OF_FILE 3
#define JBIG2_ERROR_FILE_FORMAT -4
#define JBIG2_ERROR_STREAM_TYPE -5
-#define JBIG2_ERROR_LIMIT -6
-#define JBIG2_FILE_STREAM 0
-#define JBIG2_SQUENTIAL_STREAM 1
-#define JBIG2_RANDOM_STREAM 2
-#define JBIG2_EMBED_STREAM 3
-#define JBIG2_MIN_SEGMENT_SIZE 11
-class CJBig2_Context : public CJBig2_Object
-{
-public:
+#define JBIG2_ERROR_LIMIT -6
+#define JBIG2_FILE_STREAM 0
+#define JBIG2_SQUENTIAL_STREAM 1
+#define JBIG2_RANDOM_STREAM 2
+#define JBIG2_EMBED_STREAM 3
+#define JBIG2_MIN_SEGMENT_SIZE 11
+class CJBig2_Context : public CJBig2_Object {
+ public:
+ static CJBig2_Context* CreateContext(
+ CJBig2_Module* pModule,
+ uint8_t* pGlobalData,
+ FX_DWORD dwGlobalLength,
+ uint8_t* pData,
+ FX_DWORD dwLength,
+ int32_t nStreamType,
+ std::list<CJBig2_CachePair>* pSymbolDictCache,
+ IFX_Pause* pPause = NULL);
- static CJBig2_Context *CreateContext(CJBig2_Module *pModule, uint8_t *pGlobalData, FX_DWORD dwGlobalLength,
- uint8_t *pData, FX_DWORD dwLength, int32_t nStreamType, std::list<CJBig2_CachePair>* pSymbolDictCache, IFX_Pause* pPause = NULL);
+ static void DestroyContext(CJBig2_Context* pContext);
- static void DestroyContext(CJBig2_Context *pContext);
+ int32_t getFirstPage(uint8_t* pBuf,
+ int32_t width,
+ int32_t height,
+ int32_t stride,
+ IFX_Pause* pPause);
- int32_t getFirstPage(uint8_t *pBuf, int32_t width, int32_t height, int32_t stride, IFX_Pause* pPause);
+ int32_t getNextPage(uint8_t* pBuf,
+ int32_t width,
+ int32_t height,
+ int32_t stride,
+ IFX_Pause* pPause);
- int32_t getNextPage(uint8_t *pBuf, int32_t width, int32_t height, int32_t stride, IFX_Pause* pPause);
+ int32_t getFirstPage(CJBig2_Image** image, IFX_Pause* pPause);
- int32_t getFirstPage(CJBig2_Image **image, IFX_Pause* pPause);
+ int32_t getNextPage(CJBig2_Image** image, IFX_Pause* pPause);
+ int32_t Continue(IFX_Pause* pPause);
+ FXCODEC_STATUS GetProcessiveStatus() { return m_ProcessiveStatus; };
- int32_t getNextPage(CJBig2_Image **image, IFX_Pause* pPause);
- int32_t Continue(IFX_Pause* pPause);
- FXCODEC_STATUS GetProcessiveStatus()
- {
- return m_ProcessiveStatus;
- };
-private:
+ private:
+ CJBig2_Context(uint8_t* pGlobalData,
+ FX_DWORD dwGlobalLength,
+ uint8_t* pData,
+ FX_DWORD dwLength,
+ int32_t nStreamType,
+ std::list<CJBig2_CachePair>* pSymbolDictCache,
+ IFX_Pause* pPause);
- CJBig2_Context(uint8_t *pGlobalData, FX_DWORD dwGlobalLength,
- uint8_t *pData, FX_DWORD dwLength, int32_t nStreamType, std::list<CJBig2_CachePair>* pSymbolDictCache, IFX_Pause* pPause);
+ ~CJBig2_Context();
- ~CJBig2_Context();
+ int32_t decodeFile(IFX_Pause* pPause);
- int32_t decodeFile(IFX_Pause* pPause);
+ int32_t decode_SquentialOrgnazation(IFX_Pause* pPause);
- int32_t decode_SquentialOrgnazation(IFX_Pause* pPause);
+ int32_t decode_EmbedOrgnazation(IFX_Pause* pPause);
- int32_t decode_EmbedOrgnazation(IFX_Pause* pPause);
+ int32_t decode_RandomOrgnazation_FirstPage(IFX_Pause* pPause);
- int32_t decode_RandomOrgnazation_FirstPage(IFX_Pause* pPause);
+ int32_t decode_RandomOrgnazation(IFX_Pause* pPause);
- int32_t decode_RandomOrgnazation(IFX_Pause* pPause);
+ CJBig2_Segment* findSegmentByNumber(FX_DWORD dwNumber);
- CJBig2_Segment *findSegmentByNumber(FX_DWORD dwNumber);
+ CJBig2_Segment* findReferredSegmentByTypeAndIndex(CJBig2_Segment* pSegment,
+ uint8_t cType,
+ int32_t nIndex);
- CJBig2_Segment *findReferredSegmentByTypeAndIndex(CJBig2_Segment *pSegment, uint8_t cType, int32_t nIndex);
+ int32_t parseSegmentHeader(CJBig2_Segment* pSegment);
- int32_t parseSegmentHeader(CJBig2_Segment *pSegment);
+ int32_t parseSegmentData(CJBig2_Segment* pSegment, IFX_Pause* pPause);
+ int32_t ProcessiveParseSegmentData(CJBig2_Segment* pSegment,
+ IFX_Pause* pPause);
- int32_t parseSegmentData(CJBig2_Segment *pSegment, IFX_Pause* pPause);
- int32_t ProcessiveParseSegmentData(CJBig2_Segment *pSegment, IFX_Pause* pPause);
+ int32_t parseSymbolDict(CJBig2_Segment* pSegment, IFX_Pause* pPause);
- int32_t parseSymbolDict(CJBig2_Segment *pSegment, IFX_Pause* pPause);
+ int32_t parseTextRegion(CJBig2_Segment* pSegment);
- int32_t parseTextRegion(CJBig2_Segment *pSegment);
+ int32_t parsePatternDict(CJBig2_Segment* pSegment, IFX_Pause* pPause);
- int32_t parsePatternDict(CJBig2_Segment *pSegment, IFX_Pause* pPause);
+ int32_t parseHalftoneRegion(CJBig2_Segment* pSegment, IFX_Pause* pPause);
- int32_t parseHalftoneRegion(CJBig2_Segment *pSegment, IFX_Pause* pPause);
+ int32_t parseGenericRegion(CJBig2_Segment* pSegment, IFX_Pause* pPause);
- int32_t parseGenericRegion(CJBig2_Segment *pSegment, IFX_Pause* pPause);
+ int32_t parseGenericRefinementRegion(CJBig2_Segment* pSegment);
- int32_t parseGenericRefinementRegion(CJBig2_Segment *pSegment);
+ int32_t parseTable(CJBig2_Segment* pSegment);
- int32_t parseTable(CJBig2_Segment *pSegment);
+ int32_t parseRegionInfo(JBig2RegionInfo* pRI);
- int32_t parseRegionInfo(JBig2RegionInfo *pRI);
+ JBig2HuffmanCode* decodeSymbolIDHuffmanTable(CJBig2_BitStream* pStream,
+ FX_DWORD SBNUMSYMS);
+ void huffman_assign_code(int* CODES, int* PREFLEN, int NTEMP);
+ void huffman_assign_code(JBig2HuffmanCode* SBSYMCODES, int NTEMP);
- JBig2HuffmanCode *decodeSymbolIDHuffmanTable(CJBig2_BitStream *pStream, FX_DWORD SBNUMSYMS);
+ private:
+ CJBig2_Context* m_pGlobalContext;
- void huffman_assign_code(int* CODES, int* PREFLEN, int NTEMP);
+ int32_t m_nStreamType;
- void huffman_assign_code(JBig2HuffmanCode *SBSYMCODES, int NTEMP);
+ CJBig2_BitStream* m_pStream;
-private:
+ int32_t m_nState;
- CJBig2_Context *m_pGlobalContext;
+ CJBig2_List<CJBig2_Segment>* m_pSegmentList;
- int32_t m_nStreamType;
+ CJBig2_List<JBig2PageInfo>* m_pPageInfoList;
- CJBig2_BitStream *m_pStream;
+ CJBig2_Image* m_pPage;
- int32_t m_nState;
+ FX_BOOL m_bBufSpecified;
- CJBig2_List<CJBig2_Segment> *m_pSegmentList;
-
- CJBig2_List<JBig2PageInfo> *m_pPageInfoList;
-
- CJBig2_Image *m_pPage;
-
- FX_BOOL m_bBufSpecified;
-
- int32_t m_nSegmentDecoded;
- IFX_Pause* m_pPause;
- int32_t m_PauseStep;
- FXCODEC_STATUS m_ProcessiveStatus;
- FX_BOOL m_bFirstPage;
- CJBig2_ArithDecoder *m_pArithDecoder;
- CJBig2_GRDProc *m_pGRD;
- JBig2ArithCtx *m_gbContext;
- CJBig2_Segment *m_pSegment;
- FX_DWORD m_dwOffset;
- JBig2RegionInfo m_ri;
- std::list<CJBig2_CachePair>* m_pSymbolDictCache;
+ int32_t m_nSegmentDecoded;
+ IFX_Pause* m_pPause;
+ int32_t m_PauseStep;
+ FXCODEC_STATUS m_ProcessiveStatus;
+ FX_BOOL m_bFirstPage;
+ CJBig2_ArithDecoder* m_pArithDecoder;
+ CJBig2_GRDProc* m_pGRD;
+ JBig2ArithCtx* m_gbContext;
+ CJBig2_Segment* m_pSegment;
+ FX_DWORD m_dwOffset;
+ JBig2RegionInfo m_ri;
+ std::list<CJBig2_CachePair>* m_pSymbolDictCache;
};
#endif
diff --git a/core/src/fxcodec/jbig2/JBig2_Define.h b/core/src/fxcodec/jbig2/JBig2_Define.h
index f3bdd5a620..3cca6acfd9 100644
--- a/core/src/fxcodec/jbig2/JBig2_Define.h
+++ b/core/src/fxcodec/jbig2/JBig2_Define.h
@@ -1,34 +1,39 @@
// Copyright 2014 PDFium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-
+
// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
#ifndef _JBIG2_DEFINE_H_
#define _JBIG2_DEFINE_H_
#include "../../../include/fxcrt/fx_system.h"
-#define JBIG2_memset FXSYS_memset
-#define JBIG2_memcmp FXSYS_memcmp
-#define JBIG2_memcpy FXSYS_memcpy
+#define JBIG2_memset FXSYS_memset
+#define JBIG2_memcmp FXSYS_memcmp
+#define JBIG2_memcpy FXSYS_memcpy
#include "JBig2_Object.h"
-#define JBIG2_OOB 1
+#define JBIG2_OOB 1
typedef struct {
- int32_t width,
- height;
- int32_t x,
- y;
- uint8_t flags;
+ int32_t width, height;
+ int32_t x, y;
+ uint8_t flags;
} JBig2RegionInfo;
typedef struct {
- int32_t codelen;
- int32_t code;
+ int32_t codelen;
+ int32_t code;
} JBig2HuffmanCode;
extern "C" {
- void _FaxG4Decode(void *pModule, const uint8_t* src_buf, FX_DWORD src_size, int* pbitpos, uint8_t* dest_buf, int width, int height, int pitch = 0);
+void _FaxG4Decode(void* pModule,
+ const uint8_t* src_buf,
+ FX_DWORD src_size,
+ int* pbitpos,
+ uint8_t* dest_buf,
+ int width,
+ int height,
+ int pitch = 0);
};
-#define JBIG2_MAX_REFERRED_SEGMENT_COUNT 64
-#define JBIG2_MAX_EXPORT_SYSMBOLS 65535
-#define JBIG2_MAX_NEW_SYSMBOLS 65535
-#define JBIG2_MAX_PATTERN_INDEX 65535
-#define JBIG2_MAX_IMAGE_SIZE 65535
+#define JBIG2_MAX_REFERRED_SEGMENT_COUNT 64
+#define JBIG2_MAX_EXPORT_SYSMBOLS 65535
+#define JBIG2_MAX_NEW_SYSMBOLS 65535
+#define JBIG2_MAX_PATTERN_INDEX 65535
+#define JBIG2_MAX_IMAGE_SIZE 65535
#endif
diff --git a/core/src/fxcodec/jbig2/JBig2_GeneralDecoder.cpp b/core/src/fxcodec/jbig2/JBig2_GeneralDecoder.cpp
index cabcd4c634..415d919f25 100644
--- a/core/src/fxcodec/jbig2/JBig2_GeneralDecoder.cpp
+++ b/core/src/fxcodec/jbig2/JBig2_GeneralDecoder.cpp
@@ -1,7 +1,7 @@
// Copyright 2014 PDFium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-
+
// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
#include "JBig2_GeneralDecoder.h"
@@ -12,2357 +12,2265 @@
#include "JBig2_PatternDict.h"
extern const JBig2ArithQe QeTable[] = {
- { 0x5601, 1, 1, 1 },
- { 0x3401, 2, 6, 0 },
- { 0x1801, 3, 9, 0 },
- { 0x0AC1, 4, 12, 0 },
- { 0x0521, 5, 29, 0 },
- { 0x0221, 38, 33, 0 },
- { 0x5601, 7, 6, 1 },
- { 0x5401, 8, 14, 0 },
- { 0x4801, 9, 14, 0 },
- { 0x3801, 10, 14, 0 },
- { 0x3001, 11, 17, 0 },
- { 0x2401, 12, 18, 0 },
- { 0x1C01, 13, 20, 0 },
- { 0x1601, 29, 21, 0 },
- { 0x5601, 15, 14, 1 },
- { 0x5401, 16, 14, 0 },
- { 0x5101, 17, 15, 0 },
- { 0x4801, 18, 16, 0 },
- { 0x3801, 19, 17, 0 },
- { 0x3401, 20, 18, 0 },
- { 0x3001, 21, 19, 0 },
- { 0x2801, 22, 19, 0 },
- { 0x2401, 23, 20, 0 },
- { 0x2201, 24, 21, 0 },
- { 0x1C01, 25, 22, 0 },
- { 0x1801, 26, 23, 0 },
- { 0x1601, 27, 24, 0 },
- { 0x1401, 28, 25, 0 },
- { 0x1201, 29, 26, 0 },
- { 0x1101, 30, 27, 0 },
- { 0x0AC1, 31, 28, 0 },
- { 0x09C1, 32, 29, 0 },
- { 0x08A1, 33, 30, 0 },
- { 0x0521, 34, 31, 0 },
- { 0x0441, 35, 32, 0 },
- { 0x02A1, 36, 33, 0 },
- { 0x0221, 37, 34, 0 },
- { 0x0141, 38, 35, 0 },
- { 0x0111, 39, 36, 0 },
- { 0x0085, 40, 37, 0 },
- { 0x0049, 41, 38, 0 },
- { 0x0025, 42, 39, 0 },
- { 0x0015, 43, 40, 0 },
- { 0x0009, 44, 41, 0 },
- { 0x0005, 45, 42, 0 },
- { 0x0001, 45, 43, 0 },
- { 0x5601, 46, 46, 0 }
-};
+ {0x5601, 1, 1, 1}, {0x3401, 2, 6, 0}, {0x1801, 3, 9, 0},
+ {0x0AC1, 4, 12, 0}, {0x0521, 5, 29, 0}, {0x0221, 38, 33, 0},
+ {0x5601, 7, 6, 1}, {0x5401, 8, 14, 0}, {0x4801, 9, 14, 0},
+ {0x3801, 10, 14, 0}, {0x3001, 11, 17, 0}, {0x2401, 12, 18, 0},
+ {0x1C01, 13, 20, 0}, {0x1601, 29, 21, 0}, {0x5601, 15, 14, 1},
+ {0x5401, 16, 14, 0}, {0x5101, 17, 15, 0}, {0x4801, 18, 16, 0},
+ {0x3801, 19, 17, 0}, {0x3401, 20, 18, 0}, {0x3001, 21, 19, 0},
+ {0x2801, 22, 19, 0}, {0x2401, 23, 20, 0}, {0x2201, 24, 21, 0},
+ {0x1C01, 25, 22, 0}, {0x1801, 26, 23, 0}, {0x1601, 27, 24, 0},
+ {0x1401, 28, 25, 0}, {0x1201, 29, 26, 0}, {0x1101, 30, 27, 0},
+ {0x0AC1, 31, 28, 0}, {0x09C1, 32, 29, 0}, {0x08A1, 33, 30, 0},
+ {0x0521, 34, 31, 0}, {0x0441, 35, 32, 0}, {0x02A1, 36, 33, 0},
+ {0x0221, 37, 34, 0}, {0x0141, 38, 35, 0}, {0x0111, 39, 36, 0},
+ {0x0085, 40, 37, 0}, {0x0049, 41, 38, 0}, {0x0025, 42, 39, 0},
+ {0x0015, 43, 40, 0}, {0x0009, 44, 41, 0}, {0x0005, 45, 42, 0},
+ {0x0001, 45, 43, 0}, {0x5601, 46, 46, 0}};
extern const unsigned int JBIG2_QE_NUM = sizeof(QeTable) / sizeof(JBig2ArithQe);
-CJBig2_Image *CJBig2_GRDProc::decode_Arith(CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext)
-{
- if (GBW == 0 || GBH == 0) {
- CJBig2_Image* pImage;
- JBIG2_ALLOC(pImage, CJBig2_Image(GBW, GBH));
- return pImage;
+CJBig2_Image* CJBig2_GRDProc::decode_Arith(CJBig2_ArithDecoder* pArithDecoder,
+ JBig2ArithCtx* gbContext) {
+ if (GBW == 0 || GBH == 0) {
+ CJBig2_Image* pImage;
+ JBIG2_ALLOC(pImage, CJBig2_Image(GBW, GBH));
+ return pImage;
+ }
+ if (GBTEMPLATE == 0) {
+ if ((GBAT[0] == 3) && (GBAT[1] == (signed char)-1) &&
+ (GBAT[2] == (signed char)-3) && (GBAT[3] == (signed char)-1) &&
+ (GBAT[4] == 2) && (GBAT[5] == (signed char)-2) &&
+ (GBAT[6] == (signed char)-2) && (GBAT[7] == (signed char)-2)) {
+ return decode_Arith_Template0_opt3(pArithDecoder, gbContext);
+ } else {
+ return decode_Arith_Template0_unopt(pArithDecoder, gbContext);
}
- if(GBTEMPLATE == 0) {
- if((GBAT[0] == 3) && (GBAT[1] == (signed char) - 1)
- && (GBAT[2] == (signed char) - 3) && (GBAT[3] == (signed char) - 1)
- && (GBAT[4] == 2) && (GBAT[5] == (signed char) - 2)
- && (GBAT[6] == (signed char) - 2) && (GBAT[7] == (signed char) - 2)) {
- return decode_Arith_Template0_opt3(pArithDecoder, gbContext);
- } else {
- return decode_Arith_Template0_unopt(pArithDecoder, gbContext);
- }
- } else if(GBTEMPLATE == 1) {
- if((GBAT[0] == 3) && (GBAT[1] == (signed char) - 1)) {
- return decode_Arith_Template1_opt3(pArithDecoder, gbContext);
- } else {
- return decode_Arith_Template1_unopt(pArithDecoder, gbContext);
- }
- } else if(GBTEMPLATE == 2) {
- if((GBAT[0] == 2) && (GBAT[1] == (signed char) - 1)) {
- return decode_Arith_Template2_opt3(pArithDecoder, gbContext);
- } else {
- return decode_Arith_Template2_unopt(pArithDecoder, gbContext);
- }
+ } else if (GBTEMPLATE == 1) {
+ if ((GBAT[0] == 3) && (GBAT[1] == (signed char)-1)) {
+ return decode_Arith_Template1_opt3(pArithDecoder, gbContext);
} else {
- if((GBAT[0] == 2) && (GBAT[1] == (signed char) - 1)) {
- return decode_Arith_Template3_opt3(pArithDecoder, gbContext);
- } else {
- return decode_Arith_Template3_unopt(pArithDecoder, gbContext);
- }
+ return decode_Arith_Template1_unopt(pArithDecoder, gbContext);
+ }
+ } else if (GBTEMPLATE == 2) {
+ if ((GBAT[0] == 2) && (GBAT[1] == (signed char)-1)) {
+ return decode_Arith_Template2_opt3(pArithDecoder, gbContext);
+ } else {
+ return decode_Arith_Template2_unopt(pArithDecoder, gbContext);
+ }
+ } else {
+ if ((GBAT[0] == 2) && (GBAT[1] == (signed char)-1)) {
+ return decode_Arith_Template3_opt3(pArithDecoder, gbContext);
+ } else {
+ return decode_Arith_Template3_unopt(pArithDecoder, gbContext);
}
+ }
}
-CJBig2_Image *CJBig2_GRDProc::decode_Arith_Template0_opt(CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext)
-{
- FX_BOOL LTP, SLTP, bVal;
- FX_DWORD CONTEXT;
- CJBig2_Image *GBREG;
- FX_DWORD line1, line2, line3;
- LTP = 0;
- JBIG2_ALLOC(GBREG, CJBig2_Image(GBW, GBH));
- GBREG->fill(0);
- for(FX_DWORD h = 0; h < GBH; h++) {
- if(TPGDON) {
- SLTP = pArithDecoder->DECODE(&gbContext[0x9b25]);
- LTP = LTP ^ SLTP;
- }
- if(LTP == 1) {
- GBREG->copyLine(h, h - 1);
+CJBig2_Image* CJBig2_GRDProc::decode_Arith_Template0_opt(
+ CJBig2_ArithDecoder* pArithDecoder,
+ JBig2ArithCtx* gbContext) {
+ FX_BOOL LTP, SLTP, bVal;
+ FX_DWORD CONTEXT;
+ CJBig2_Image* GBREG;
+ FX_DWORD line1, line2, line3;
+ LTP = 0;
+ JBIG2_ALLOC(GBREG, CJBig2_Image(GBW, GBH));
+ GBREG->fill(0);
+ for (FX_DWORD h = 0; h < GBH; h++) {
+ if (TPGDON) {
+ SLTP = pArithDecoder->DECODE(&gbContext[0x9b25]);
+ LTP = LTP ^ SLTP;
+ }
+ if (LTP == 1) {
+ GBREG->copyLine(h, h - 1);
+ } else {
+ line1 = GBREG->getPixel(2, h - 2);
+ line1 |= GBREG->getPixel(1, h - 2) << 1;
+ line1 |= GBREG->getPixel(0, h - 2) << 2;
+ line2 = GBREG->getPixel(3, h - 1);
+ line2 |= GBREG->getPixel(2, h - 1) << 1;
+ line2 |= GBREG->getPixel(1, h - 1) << 2;
+ line2 |= GBREG->getPixel(0, h - 1) << 3;
+ line3 = 0;
+ for (FX_DWORD w = 0; w < GBW; w++) {
+ if (USESKIP && SKIP->getPixel(w, h)) {
+ bVal = 0;
} else {
- line1 = GBREG->getPixel(2, h - 2);
- line1 |= GBREG->getPixel(1, h - 2) << 1;
- line1 |= GBREG->getPixel(0, h - 2) << 2;
- line2 = GBREG->getPixel(3, h - 1);
- line2 |= GBREG->getPixel(2, h - 1) << 1;
- line2 |= GBREG->getPixel(1, h - 1) << 2;
- line2 |= GBREG->getPixel(0, h - 1) << 3;
- line3 = 0;
- for(FX_DWORD w = 0; w < GBW; w++) {
- if(USESKIP && SKIP->getPixel(w, h)) {
- bVal = 0;
- } else {
- CONTEXT = line3;
- CONTEXT |= line2 << 4;
- CONTEXT |= line1 << 11;
- bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
- }
- if(bVal) {
- GBREG->setPixel(w, h, bVal);
- }
- line1 = ((line1 << 1) | GBREG->getPixel(w + 3, h - 2)) & 0x1f;
- line2 = ((line2 << 1) | GBREG->getPixel(w + 4, h - 1)) & 0x7f;
- line3 = ((line3 << 1) | bVal) & 0x0f;
- }
+ CONTEXT = line3;
+ CONTEXT |= line2 << 4;
+ CONTEXT |= line1 << 11;
+ bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
+ }
+ if (bVal) {
+ GBREG->setPixel(w, h, bVal);
}
+ line1 = ((line1 << 1) | GBREG->getPixel(w + 3, h - 2)) & 0x1f;
+ line2 = ((line2 << 1) | GBREG->getPixel(w + 4, h - 1)) & 0x7f;
+ line3 = ((line3 << 1) | bVal) & 0x0f;
+ }
}
- return GBREG;
+ }
+ return GBREG;
}
-CJBig2_Image *CJBig2_GRDProc::decode_Arith_Template0_opt2(CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext)
-{
- FX_BOOL LTP, SLTP, bVal;
- FX_DWORD CONTEXT;
- CJBig2_Image *GBREG;
- FX_DWORD line1, line2;
- uint8_t *pLine, cVal;
- intptr_t nStride, nStride2;
- int32_t nBits, k;
- LTP = 0;
- JBIG2_ALLOC(GBREG, CJBig2_Image(GBW, GBH));
- if (GBREG->m_pData == NULL) {
- delete GBREG;
- m_pModule->JBig2_Error("Generic region decoding procedure: Create Image Failed with width = %d, height = %d\n", GBW, GBH);
- return NULL;
+CJBig2_Image* CJBig2_GRDProc::decode_Arith_Template0_opt2(
+ CJBig2_ArithDecoder* pArithDecoder,
+ JBig2ArithCtx* gbContext) {
+ FX_BOOL LTP, SLTP, bVal;
+ FX_DWORD CONTEXT;
+ CJBig2_Image* GBREG;
+ FX_DWORD line1, line2;
+ uint8_t *pLine, cVal;
+ intptr_t nStride, nStride2;
+ int32_t nBits, k;
+ LTP = 0;
+ JBIG2_ALLOC(GBREG, CJBig2_Image(GBW, GBH));
+ if (GBREG->m_pData == NULL) {
+ delete GBREG;
+ m_pModule->JBig2_Error(
+ "Generic region decoding procedure: Create Image Failed with width = "
+ "%d, height = %d\n",
+ GBW, GBH);
+ return NULL;
+ }
+ pLine = GBREG->m_pData;
+ nStride = GBREG->m_nStride;
+ nStride2 = nStride << 1;
+ for (FX_DWORD h = 0; h < GBH; h++) {
+ if (TPGDON) {
+ SLTP = pArithDecoder->DECODE(&gbContext[0x9b25]);
+ LTP = LTP ^ SLTP;
}
- pLine = GBREG->m_pData;
- nStride = GBREG->m_nStride;
- nStride2 = nStride << 1;
- for(FX_DWORD h = 0; h < GBH; h++) {
- if(TPGDON) {
- SLTP = pArithDecoder->DECODE(&gbContext[0x9b25]);
- LTP = LTP ^ SLTP;
- }
- if(LTP == 1) {
- GBREG->copyLine(h, h - 1);
+ if (LTP == 1) {
+ GBREG->copyLine(h, h - 1);
+ } else {
+ line1 = (h > 1) ? pLine[-nStride2] << 6 : 0;
+ line2 = (h > 0) ? pLine[-nStride] : 0;
+ CONTEXT = (line1 & 0xf800) | (line2 & 0x07f0);
+ for (FX_DWORD w = 0; w < GBW; w += 8) {
+ if (w + 8 < GBW) {
+ nBits = 8;
+ if (h > 1) {
+ line1 = (line1 << 8) | (pLine[-nStride2 + (w >> 3) + 1] << 6);
+ }
+ if (h > 0) {
+ line2 = (line2 << 8) | (pLine[-nStride + (w >> 3) + 1]);
+ }
} else {
- line1 = (h > 1) ? pLine[-nStride2] << 6 : 0;
- line2 = (h > 0) ? pLine[-nStride] : 0;
- CONTEXT = (line1 & 0xf800) | (line2 & 0x07f0);
- for(FX_DWORD w = 0; w < GBW; w += 8) {
- if(w + 8 < GBW) {
- nBits = 8;
- if(h > 1) {
- line1 = (line1 << 8) | (pLine[-nStride2 + (w >> 3) + 1] << 6);
- }
- if(h > 0) {
- line2 = (line2 << 8) | (pLine[-nStride + (w >> 3) + 1]);
- }
- } else {
- nBits = GBW - w;
- if(h > 1) {
- line1 <<= 8;
- }
- if(h > 0) {
- line2 <<= 8;
- }
- }
- cVal = 0;
- for(k = 0; k < nBits; k++) {
- if(USESKIP && SKIP->getPixel(w, h)) {
- bVal = 0;
- } else {
- bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
- }
- cVal |= bVal << (7 - k);
- CONTEXT = ((CONTEXT & 0x7bf7) << 1) | bVal
- | ((line1 >> (7 - k)) & 0x0800)
- | ((line2 >> (7 - k)) & 0x0010);
- }
- pLine[w >> 3] = cVal;
- }
+ nBits = GBW - w;
+ if (h > 1) {
+ line1 <<= 8;
+ }
+ if (h > 0) {
+ line2 <<= 8;
+ }
}
- pLine += nStride;
+ cVal = 0;
+ for (k = 0; k < nBits; k++) {
+ if (USESKIP && SKIP->getPixel(w, h)) {
+ bVal = 0;
+ } else {
+ bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
+ }
+ cVal |= bVal << (7 - k);
+ CONTEXT = ((CONTEXT & 0x7bf7) << 1) | bVal |
+ ((line1 >> (7 - k)) & 0x0800) |
+ ((line2 >> (7 - k)) & 0x0010);
+ }
+ pLine[w >> 3] = cVal;
+ }
}
- return GBREG;
+ pLine += nStride;
+ }
+ return GBREG;
}
-CJBig2_Image *CJBig2_GRDProc::decode_Arith_Template0_opt3(CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext)
-{
- FX_BOOL LTP, SLTP, bVal;
- FX_DWORD CONTEXT;
- CJBig2_Image *GBREG;
- FX_DWORD line1, line2;
- uint8_t *pLine, *pLine1, *pLine2, cVal;
- int32_t nStride, nStride2, k;
- int32_t nLineBytes, nBitsLeft, cc;
- LTP = 0;
- JBIG2_ALLOC(GBREG, CJBig2_Image(GBW, GBH));
- if (GBREG->m_pData == NULL) {
- delete GBREG;
- m_pModule->JBig2_Error("Generic region decoding procedure: Create Image Failed with width = %d, height = %d\n", GBW, GBH);
- return NULL;
+CJBig2_Image* CJBig2_GRDProc::decode_Arith_Template0_opt3(
+ CJBig2_ArithDecoder* pArithDecoder,
+ JBig2ArithCtx* gbContext) {
+ FX_BOOL LTP, SLTP, bVal;
+ FX_DWORD CONTEXT;
+ CJBig2_Image* GBREG;
+ FX_DWORD line1, line2;
+ uint8_t *pLine, *pLine1, *pLine2, cVal;
+ int32_t nStride, nStride2, k;
+ int32_t nLineBytes, nBitsLeft, cc;
+ LTP = 0;
+ JBIG2_ALLOC(GBREG, CJBig2_Image(GBW, GBH));
+ if (GBREG->m_pData == NULL) {
+ delete GBREG;
+ m_pModule->JBig2_Error(
+ "Generic region decoding procedure: Create Image Failed with width = "
+ "%d, height = %d\n",
+ GBW, GBH);
+ return NULL;
+ }
+ pLine = GBREG->m_pData;
+ nStride = GBREG->m_nStride;
+ nStride2 = nStride << 1;
+ nLineBytes = ((GBW + 7) >> 3) - 1;
+ nBitsLeft = GBW - (nLineBytes << 3);
+ FX_DWORD height = GBH & 0x7fffffff;
+ for (FX_DWORD h = 0; h < height; h++) {
+ if (TPGDON) {
+ SLTP = pArithDecoder->DECODE(&gbContext[0x9b25]);
+ LTP = LTP ^ SLTP;
}
- pLine = GBREG->m_pData;
- nStride = GBREG->m_nStride;
- nStride2 = nStride << 1;
- nLineBytes = ((GBW + 7) >> 3) - 1;
- nBitsLeft = GBW - (nLineBytes << 3);
- FX_DWORD height = GBH & 0x7fffffff;
- for(FX_DWORD h = 0; h < height; h++) {
- if(TPGDON) {
- SLTP = pArithDecoder->DECODE(&gbContext[0x9b25]);
- LTP = LTP ^ SLTP;
+ if (LTP == 1) {
+ GBREG->copyLine(h, h - 1);
+ } else {
+ if (h > 1) {
+ pLine1 = pLine - nStride2;
+ pLine2 = pLine - nStride;
+ line1 = (*pLine1++) << 6;
+ line2 = *pLine2++;
+ CONTEXT = ((line1 & 0xf800) | (line2 & 0x07f0));
+ for (cc = 0; cc < nLineBytes; cc++) {
+ line1 = (line1 << 8) | ((*pLine1++) << 6);
+ line2 = (line2 << 8) | (*pLine2++);
+ cVal = 0;
+ for (k = 7; k >= 0; k--) {
+ bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
+ cVal |= bVal << k;
+ CONTEXT = (((CONTEXT & 0x7bf7) << 1) | bVal |
+ ((line1 >> k) & 0x0800) | ((line2 >> k) & 0x0010));
+ }
+ pLine[cc] = cVal;
}
- if(LTP == 1) {
- GBREG->copyLine(h, h - 1);
- } else {
- if(h > 1) {
- pLine1 = pLine - nStride2;
- pLine2 = pLine - nStride;
- line1 = (*pLine1++) << 6;
- line2 = *pLine2++;
- CONTEXT = ((line1 & 0xf800) | (line2 & 0x07f0));
- for(cc = 0; cc < nLineBytes; cc++) {
- line1 = (line1 << 8) | ((*pLine1++) << 6);
- line2 = (line2 << 8) | (*pLine2++);
- cVal = 0;
- for(k = 7; k >= 0; k--) {
- bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
- cVal |= bVal << k;
- CONTEXT = (((CONTEXT & 0x7bf7) << 1) | bVal
- | ((line1 >> k) & 0x0800)
- | ((line2 >> k) & 0x0010));
- }
- pLine[cc] = cVal;
- }
- line1 <<= 8;
- line2 <<= 8;
- cVal = 0;
- for(k = 0; k < nBitsLeft; k++) {
- bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
- cVal |= bVal << (7 - k);
- CONTEXT = (((CONTEXT & 0x7bf7) << 1) | bVal
- | ((line1 >> (7 - k)) & 0x0800)
- | ((line2 >> (7 - k)) & 0x0010));
- }
- pLine[nLineBytes] = cVal;
- } else {
- pLine2 = pLine - nStride;
- line2 = (h & 1) ? (*pLine2++) : 0;
- CONTEXT = (line2 & 0x07f0);
- for(cc = 0; cc < nLineBytes; cc++) {
- if(h & 1) {
- line2 = (line2 << 8) | (*pLine2++);
- }
- cVal = 0;
- for(k = 7; k >= 0; k--) {
- bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
- cVal |= bVal << k;
- CONTEXT = (((CONTEXT & 0x7bf7) << 1) | bVal
- | ((line2 >> k) & 0x0010));
- }
- pLine[cc] = cVal;
- }
- line2 <<= 8;
- cVal = 0;
- for(k = 0; k < nBitsLeft; k++) {
- bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
- cVal |= bVal << (7 - k);
- CONTEXT = (((CONTEXT & 0x7bf7) << 1) | bVal
- | (((line2 >> (7 - k))) & 0x0010));
- }
- pLine[nLineBytes] = cVal;
- }
+ line1 <<= 8;
+ line2 <<= 8;
+ cVal = 0;
+ for (k = 0; k < nBitsLeft; k++) {
+ bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
+ cVal |= bVal << (7 - k);
+ CONTEXT =
+ (((CONTEXT & 0x7bf7) << 1) | bVal |
+ ((line1 >> (7 - k)) & 0x0800) | ((line2 >> (7 - k)) & 0x0010));
}
- pLine += nStride;
- }
- return GBREG;
-}
-CJBig2_Image *CJBig2_GRDProc::decode_Arith_Template0_unopt(CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext)
-{
- FX_BOOL LTP, SLTP, bVal;
- FX_DWORD CONTEXT;
- CJBig2_Image *GBREG;
- FX_DWORD line1, line2, line3;
- LTP = 0;
- JBIG2_ALLOC(GBREG, CJBig2_Image(GBW, GBH));
- GBREG->fill(0);
- for(FX_DWORD h = 0; h < GBH; h++) {
- if(TPGDON) {
- SLTP = pArithDecoder->DECODE(&gbContext[0x9b25]);
- LTP = LTP ^ SLTP;
+ pLine[nLineBytes] = cVal;
+ } else {
+ pLine2 = pLine - nStride;
+ line2 = (h & 1) ? (*pLine2++) : 0;
+ CONTEXT = (line2 & 0x07f0);
+ for (cc = 0; cc < nLineBytes; cc++) {
+ if (h & 1) {
+ line2 = (line2 << 8) | (*pLine2++);
+ }
+ cVal = 0;
+ for (k = 7; k >= 0; k--) {
+ bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
+ cVal |= bVal << k;
+ CONTEXT =
+ (((CONTEXT & 0x7bf7) << 1) | bVal | ((line2 >> k) & 0x0010));
+ }
+ pLine[cc] = cVal;
}
- if(LTP == 1) {
- GBREG->copyLine(h, h - 1);
- } else {
- line1 = GBREG->getPixel(1, h - 2);
- line1 |= GBREG->getPixel(0, h - 2) << 1;
- line2 = GBREG->getPixel(2, h - 1);
- line2 |= GBREG->getPixel(1, h - 1) << 1;
- line2 |= GBREG->getPixel(0, h - 1) << 2;
- line3 = 0;
- for(FX_DWORD w = 0; w < GBW; w++) {
- if(USESKIP && SKIP->getPixel(w, h)) {
- bVal = 0;
- } else {
- CONTEXT = line3;
- CONTEXT |= GBREG->getPixel(w + GBAT[0], h + GBAT[1]) << 4;
- CONTEXT |= line2 << 5;
- CONTEXT |= GBREG->getPixel(w + GBAT[2], h + GBAT[3]) << 10;
- CONTEXT |= GBREG->getPixel(w + GBAT[4], h + GBAT[5]) << 11;
- CONTEXT |= line1 << 12;
- CONTEXT |= GBREG->getPixel(w + GBAT[6], h + GBAT[7]) << 15;
- bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
- }
- if(bVal) {
- GBREG->setPixel(w, h, bVal);
- }
- line1 = ((line1 << 1) | GBREG->getPixel(w + 2, h - 2)) & 0x07;
- line2 = ((line2 << 1) | GBREG->getPixel(w + 3, h - 1)) & 0x1f;
- line3 = ((line3 << 1) | bVal) & 0x0f;
- }
+ line2 <<= 8;
+ cVal = 0;
+ for (k = 0; k < nBitsLeft; k++) {
+ bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
+ cVal |= bVal << (7 - k);
+ CONTEXT = (((CONTEXT & 0x7bf7) << 1) | bVal |
+ (((line2 >> (7 - k))) & 0x0010));
}
+ pLine[nLineBytes] = cVal;
+ }
}
- return GBREG;
+ pLine += nStride;
+ }
+ return GBREG;
}
-CJBig2_Image *CJBig2_GRDProc::decode_Arith_Template1_opt(CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext)
-{
- FX_BOOL LTP, SLTP, bVal;
- FX_DWORD CONTEXT;
- CJBig2_Image *GBREG;
- FX_DWORD line1, line2, line3;
- LTP = 0;
- JBIG2_ALLOC(GBREG, CJBig2_Image(GBW, GBH));
- GBREG->fill(0);
- for(FX_DWORD h = 0; h < GBH; h++) {
- if(TPGDON) {
- SLTP = pArithDecoder->DECODE(&gbContext[0x0795]);
- LTP = LTP ^ SLTP;
- }
- if(LTP == 1) {
- GBREG->copyLine(h, h - 1);
+CJBig2_Image* CJBig2_GRDProc::decode_Arith_Template0_unopt(
+ CJBig2_ArithDecoder* pArithDecoder,
+ JBig2ArithCtx* gbContext) {
+ FX_BOOL LTP, SLTP, bVal;
+ FX_DWORD CONTEXT;
+ CJBig2_Image* GBREG;
+ FX_DWORD line1, line2, line3;
+ LTP = 0;
+ JBIG2_ALLOC(GBREG, CJBig2_Image(GBW, GBH));
+ GBREG->fill(0);
+ for (FX_DWORD h = 0; h < GBH; h++) {
+ if (TPGDON) {
+ SLTP = pArithDecoder->DECODE(&gbContext[0x9b25]);
+ LTP = LTP ^ SLTP;
+ }
+ if (LTP == 1) {
+ GBREG->copyLine(h, h - 1);
+ } else {
+ line1 = GBREG->getPixel(1, h - 2);
+ line1 |= GBREG->getPixel(0, h - 2) << 1;
+ line2 = GBREG->getPixel(2, h - 1);
+ line2 |= GBREG->getPixel(1, h - 1) << 1;
+ line2 |= GBREG->getPixel(0, h - 1) << 2;
+ line3 = 0;
+ for (FX_DWORD w = 0; w < GBW; w++) {
+ if (USESKIP && SKIP->getPixel(w, h)) {
+ bVal = 0;
} else {
- line1 = GBREG->getPixel(2, h - 2);
- line1 |= GBREG->getPixel(1, h - 2) << 1;
- line1 |= GBREG->getPixel(0, h - 2) << 2;
- line2 = GBREG->getPixel(3, h - 1);
- line2 |= GBREG->getPixel(2, h - 1) << 1;
- line2 |= GBREG->getPixel(1, h - 1) << 2;
- line2 |= GBREG->getPixel(0, h - 1) << 3;
- line3 = 0;
- for(FX_DWORD w = 0; w < GBW; w++) {
- if(USESKIP && SKIP->getPixel(w, h)) {
- bVal = 0;
- } else {
- CONTEXT = line3;
- CONTEXT |= line2 << 3;
- CONTEXT |= line1 << 9;
- bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
- }
- if(bVal) {
- GBREG->setPixel(w, h, bVal);
- }
- line1 = ((line1 << 1) | GBREG->getPixel(w + 3, h - 2)) & 0x0f;
- line2 = ((line2 << 1) | GBREG->getPixel(w + 4, h - 1)) & 0x3f;
- line3 = ((line3 << 1) | bVal) & 0x07;
- }
+ CONTEXT = line3;
+ CONTEXT |= GBREG->getPixel(w + GBAT[0], h + GBAT[1]) << 4;
+ CONTEXT |= line2 << 5;
+ CONTEXT |= GBREG->getPixel(w + GBAT[2], h + GBAT[3]) << 10;
+ CONTEXT |= GBREG->getPixel(w + GBAT[4], h + GBAT[5]) << 11;
+ CONTEXT |= line1 << 12;
+ CONTEXT |= GBREG->getPixel(w + GBAT[6], h + GBAT[7]) << 15;
+ bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
}
+ if (bVal) {
+ GBREG->setPixel(w, h, bVal);
+ }
+ line1 = ((line1 << 1) | GBREG->getPixel(w + 2, h - 2)) & 0x07;
+ line2 = ((line2 << 1) | GBREG->getPixel(w + 3, h - 1)) & 0x1f;
+ line3 = ((line3 << 1) | bVal) & 0x0f;
+ }
}
- return GBREG;
+ }
+ return GBREG;
}
-CJBig2_Image *CJBig2_GRDProc::decode_Arith_Template1_opt2(CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext)
-{
- FX_BOOL LTP, SLTP, bVal;
- FX_DWORD CONTEXT;
- CJBig2_Image *GBREG;
- FX_DWORD line1, line2;
- uint8_t *pLine, cVal;
- intptr_t nStride, nStride2;
- int32_t nBits, k;
- LTP = 0;
- JBIG2_ALLOC(GBREG, CJBig2_Image(GBW, GBH));
- if (GBREG->m_pData == NULL) {
- delete GBREG;
- m_pModule->JBig2_Error("Generic region decoding procedure: Create Image Failed with width = %d, height = %d\n", GBW, GBH);
- return NULL;
+CJBig2_Image* CJBig2_GRDProc::decode_Arith_Template1_opt(
+ CJBig2_ArithDecoder* pArithDecoder,
+ JBig2ArithCtx* gbContext) {
+ FX_BOOL LTP, SLTP, bVal;
+ FX_DWORD CONTEXT;
+ CJBig2_Image* GBREG;
+ FX_DWORD line1, line2, line3;
+ LTP = 0;
+ JBIG2_ALLOC(GBREG, CJBig2_Image(GBW, GBH));
+ GBREG->fill(0);
+ for (FX_DWORD h = 0; h < GBH; h++) {
+ if (TPGDON) {
+ SLTP = pArithDecoder->DECODE(&gbContext[0x0795]);
+ LTP = LTP ^ SLTP;
}
- pLine = GBREG->m_pData;
- nStride = GBREG->m_nStride;
- nStride2 = nStride << 1;
- for(FX_DWORD h = 0; h < GBH; h++) {
- if(TPGDON) {
- SLTP = pArithDecoder->DECODE(&gbContext[0x0795]);
- LTP = LTP ^ SLTP;
- }
- if(LTP == 1) {
- GBREG->copyLine(h, h - 1);
+ if (LTP == 1) {
+ GBREG->copyLine(h, h - 1);
+ } else {
+ line1 = GBREG->getPixel(2, h - 2);
+ line1 |= GBREG->getPixel(1, h - 2) << 1;
+ line1 |= GBREG->getPixel(0, h - 2) << 2;
+ line2 = GBREG->getPixel(3, h - 1);
+ line2 |= GBREG->getPixel(2, h - 1) << 1;
+ line2 |= GBREG->getPixel(1, h - 1) << 2;
+ line2 |= GBREG->getPixel(0, h - 1) << 3;
+ line3 = 0;
+ for (FX_DWORD w = 0; w < GBW; w++) {
+ if (USESKIP && SKIP->getPixel(w, h)) {
+ bVal = 0;
} else {
- line1 = (h > 1) ? pLine[-nStride2] << 4 : 0;
- line2 = (h > 0) ? pLine[-nStride] : 0;
- CONTEXT = (line1 & 0x1e00) | ((line2 >> 1) & 0x01f8);
- for(FX_DWORD w = 0; w < GBW; w += 8) {
- if(w + 8 < GBW) {
- nBits = 8;
- if(h > 1) {
- line1 = (line1 << 8) | (pLine[-nStride2 + (w >> 3) + 1] << 4);
- }
- if(h > 0) {
- line2 = (line2 << 8) | (pLine[-nStride + (w >> 3) + 1]);
- }
- } else {
- nBits = GBW - w;
- if(h > 1) {
- line1 <<= 8;
- }
- if(h > 0) {
- line2 <<= 8;
- }
- }
- cVal = 0;
- for(k = 0; k < nBits; k++) {
- if(USESKIP && SKIP->getPixel(w, h)) {
- bVal = 0;
- } else {
- bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
- }
- cVal |= bVal << (7 - k);
- CONTEXT = ((CONTEXT & 0x0efb) << 1) | bVal
- | ((line1 >> (7 - k)) & 0x0200)
- | ((line2 >> (8 - k)) & 0x0008);
- }
- pLine[w >> 3] = cVal;
- }
+ CONTEXT = line3;
+ CONTEXT |= line2 << 3;
+ CONTEXT |= line1 << 9;
+ bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
}
- pLine += nStride;
+ if (bVal) {
+ GBREG->setPixel(w, h, bVal);
+ }
+ line1 = ((line1 << 1) | GBREG->getPixel(w + 3, h - 2)) & 0x0f;
+ line2 = ((line2 << 1) | GBREG->getPixel(w + 4, h - 1)) & 0x3f;
+ line3 = ((line3 << 1) | bVal) & 0x07;
+ }
}
- return GBREG;
+ }
+ return GBREG;
}
-CJBig2_Image *CJBig2_GRDProc::decode_Arith_Template1_opt3(CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext)
-{
- FX_BOOL LTP, SLTP, bVal;
- FX_DWORD CONTEXT;
- CJBig2_Image *GBREG;
- FX_DWORD line1, line2;
- uint8_t *pLine, *pLine1, *pLine2, cVal;
- int32_t nStride, nStride2, k;
- int32_t nLineBytes, nBitsLeft, cc;
- LTP = 0;
- JBIG2_ALLOC(GBREG, CJBig2_Image(GBW, GBH));
- if (GBREG->m_pData == NULL) {
- delete GBREG;
- m_pModule->JBig2_Error("Generic region decoding procedure: Create Image Failed with width = %d, height = %d\n", GBW, GBH);
- return NULL;
+CJBig2_Image* CJBig2_GRDProc::decode_Arith_Template1_opt2(
+ CJBig2_ArithDecoder* pArithDecoder,
+ JBig2ArithCtx* gbContext) {
+ FX_BOOL LTP, SLTP, bVal;
+ FX_DWORD CONTEXT;
+ CJBig2_Image* GBREG;
+ FX_DWORD line1, line2;
+ uint8_t *pLine, cVal;
+ intptr_t nStride, nStride2;
+ int32_t nBits, k;
+ LTP = 0;
+ JBIG2_ALLOC(GBREG, CJBig2_Image(GBW, GBH));
+ if (GBREG->m_pData == NULL) {
+ delete GBREG;
+ m_pModule->JBig2_Error(
+ "Generic region decoding procedure: Create Image Failed with width = "
+ "%d, height = %d\n",
+ GBW, GBH);
+ return NULL;
+ }
+ pLine = GBREG->m_pData;
+ nStride = GBREG->m_nStride;
+ nStride2 = nStride << 1;
+ for (FX_DWORD h = 0; h < GBH; h++) {
+ if (TPGDON) {
+ SLTP = pArithDecoder->DECODE(&gbContext[0x0795]);
+ LTP = LTP ^ SLTP;
}
- pLine = GBREG->m_pData;
- nStride = GBREG->m_nStride;
- nStride2 = nStride << 1;
- nLineBytes = ((GBW + 7) >> 3) - 1;
- nBitsLeft = GBW - (nLineBytes << 3);
- for(FX_DWORD h = 0; h < GBH; h++) {
- if(TPGDON) {
- SLTP = pArithDecoder->DECODE(&gbContext[0x0795]);
- LTP = LTP ^ SLTP;
- }
- if(LTP == 1) {
- GBREG->copyLine(h, h - 1);
+ if (LTP == 1) {
+ GBREG->copyLine(h, h - 1);
+ } else {
+ line1 = (h > 1) ? pLine[-nStride2] << 4 : 0;
+ line2 = (h > 0) ? pLine[-nStride] : 0;
+ CONTEXT = (line1 & 0x1e00) | ((line2 >> 1) & 0x01f8);
+ for (FX_DWORD w = 0; w < GBW; w += 8) {
+ if (w + 8 < GBW) {
+ nBits = 8;
+ if (h > 1) {
+ line1 = (line1 << 8) | (pLine[-nStride2 + (w >> 3) + 1] << 4);
+ }
+ if (h > 0) {
+ line2 = (line2 << 8) | (pLine[-nStride + (w >> 3) + 1]);
+ }
} else {
- if(h > 1) {
- pLine1 = pLine - nStride2;
- pLine2 = pLine - nStride;
- line1 = (*pLine1++) << 4;
- line2 = *pLine2++;
- CONTEXT = (line1 & 0x1e00) | ((line2 >> 1) & 0x01f8);
- for(cc = 0; cc < nLineBytes; cc++) {
- line1 = (line1 << 8) | ((*pLine1++) << 4);
- line2 = (line2 << 8) | (*pLine2++);
- cVal = 0;
- for(k = 7; k >= 0; k--) {
- bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
- cVal |= bVal << k;
- CONTEXT = ((CONTEXT & 0x0efb) << 1) | bVal
- | ((line1 >> k) & 0x0200)
- | ((line2 >> (k + 1)) & 0x0008);
- }
- pLine[cc] = cVal;
- }
- line1 <<= 8;
- line2 <<= 8;
- cVal = 0;
- for(k = 0; k < nBitsLeft; k++) {
- bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
- cVal |= bVal << (7 - k);
- CONTEXT = ((CONTEXT & 0x0efb) << 1) | bVal
- | ((line1 >> (7 - k)) & 0x0200)
- | ((line2 >> (8 - k)) & 0x0008);
- }
- pLine[nLineBytes] = cVal;
- } else {
- pLine2 = pLine - nStride;
- line2 = (h & 1) ? (*pLine2++) : 0;
- CONTEXT = (line2 >> 1) & 0x01f8;
- for(cc = 0; cc < nLineBytes; cc++) {
- if(h & 1) {
- line2 = (line2 << 8) | (*pLine2++);
- }
- cVal = 0;
- for(k = 7; k >= 0; k--) {
- bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
- cVal |= bVal << k;
- CONTEXT = ((CONTEXT & 0x0efb) << 1) | bVal
- | ((line2 >> (k + 1)) & 0x0008);
- }
- pLine[cc] = cVal;
- }
- line2 <<= 8;
- cVal = 0;
- for(k = 0; k < nBitsLeft; k++) {
- bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
- cVal |= bVal << (7 - k);
- CONTEXT = ((CONTEXT & 0x0efb) << 1) | bVal
- | ((line2 >> (8 - k)) & 0x0008);
- }
- pLine[nLineBytes] = cVal;
- }
+ nBits = GBW - w;
+ if (h > 1) {
+ line1 <<= 8;
+ }
+ if (h > 0) {
+ line2 <<= 8;
+ }
}
- pLine += nStride;
+ cVal = 0;
+ for (k = 0; k < nBits; k++) {
+ if (USESKIP && SKIP->getPixel(w, h)) {
+ bVal = 0;
+ } else {
+ bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
+ }
+ cVal |= bVal << (7 - k);
+ CONTEXT = ((CONTEXT & 0x0efb) << 1) | bVal |
+ ((line1 >> (7 - k)) & 0x0200) |
+ ((line2 >> (8 - k)) & 0x0008);
+ }
+ pLine[w >> 3] = cVal;
+ }
}
- return GBREG;
+ pLine += nStride;
+ }
+ return GBREG;
}
-CJBig2_Image *CJBig2_GRDProc::decode_Arith_Template1_unopt(CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext)
-{
- FX_BOOL LTP, SLTP, bVal;
- FX_DWORD CONTEXT;
- CJBig2_Image *GBREG;
- FX_DWORD line1, line2, line3;
- LTP = 0;
- JBIG2_ALLOC(GBREG, CJBig2_Image(GBW, GBH));
- GBREG->fill(0);
- for(FX_DWORD h = 0; h < GBH; h++) {
- if(TPGDON) {
- SLTP = pArithDecoder->DECODE(&gbContext[0x0795]);
- LTP = LTP ^ SLTP;
+CJBig2_Image* CJBig2_GRDProc::decode_Arith_Template1_opt3(
+ CJBig2_ArithDecoder* pArithDecoder,
+ JBig2ArithCtx* gbContext) {
+ FX_BOOL LTP, SLTP, bVal;
+ FX_DWORD CONTEXT;
+ CJBig2_Image* GBREG;
+ FX_DWORD line1, line2;
+ uint8_t *pLine, *pLine1, *pLine2, cVal;
+ int32_t nStride, nStride2, k;
+ int32_t nLineBytes, nBitsLeft, cc;
+ LTP = 0;
+ JBIG2_ALLOC(GBREG, CJBig2_Image(GBW, GBH));
+ if (GBREG->m_pData == NULL) {
+ delete GBREG;
+ m_pModule->JBig2_Error(
+ "Generic region decoding procedure: Create Image Failed with width = "
+ "%d, height = %d\n",
+ GBW, GBH);
+ return NULL;
+ }
+ pLine = GBREG->m_pData;
+ nStride = GBREG->m_nStride;
+ nStride2 = nStride << 1;
+ nLineBytes = ((GBW + 7) >> 3) - 1;
+ nBitsLeft = GBW - (nLineBytes << 3);
+ for (FX_DWORD h = 0; h < GBH; h++) {
+ if (TPGDON) {
+ SLTP = pArithDecoder->DECODE(&gbContext[0x0795]);
+ LTP = LTP ^ SLTP;
+ }
+ if (LTP == 1) {
+ GBREG->copyLine(h, h - 1);
+ } else {
+ if (h > 1) {
+ pLine1 = pLine - nStride2;
+ pLine2 = pLine - nStride;
+ line1 = (*pLine1++) << 4;
+ line2 = *pLine2++;
+ CONTEXT = (line1 & 0x1e00) | ((line2 >> 1) & 0x01f8);
+ for (cc = 0; cc < nLineBytes; cc++) {
+ line1 = (line1 << 8) | ((*pLine1++) << 4);
+ line2 = (line2 << 8) | (*pLine2++);
+ cVal = 0;
+ for (k = 7; k >= 0; k--) {
+ bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
+ cVal |= bVal << k;
+ CONTEXT = ((CONTEXT & 0x0efb) << 1) | bVal |
+ ((line1 >> k) & 0x0200) | ((line2 >> (k + 1)) & 0x0008);
+ }
+ pLine[cc] = cVal;
}
- if(LTP == 1) {
- GBREG->copyLine(h, h - 1);
- } else {
- line1 = GBREG->getPixel(2, h - 2);
- line1 |= GBREG->getPixel(1, h - 2) << 1;
- line1 |= GBREG->getPixel(0, h - 2) << 2;
- line2 = GBREG->getPixel(2, h - 1);
- line2 |= GBREG->getPixel(1, h - 1) << 1;
- line2 |= GBREG->getPixel(0, h - 1) << 2;
- line3 = 0;
- for(FX_DWORD w = 0; w < GBW; w++) {
- if(USESKIP && SKIP->getPixel(w, h)) {
- bVal = 0;
- } else {
- CONTEXT = line3;
- CONTEXT |= GBREG->getPixel(w + GBAT[0], h + GBAT[1]) << 3;
- CONTEXT |= line2 << 4;
- CONTEXT |= line1 << 9;
- bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
- }
- if(bVal) {
- GBREG->setPixel(w, h, bVal);
- }
- line1 = ((line1 << 1) | GBREG->getPixel(w + 3, h - 2)) & 0x0f;
- line2 = ((line2 << 1) | GBREG->getPixel(w + 3, h - 1)) & 0x1f;
- line3 = ((line3 << 1) | bVal) & 0x07;
- }
+ line1 <<= 8;
+ line2 <<= 8;
+ cVal = 0;
+ for (k = 0; k < nBitsLeft; k++) {
+ bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
+ cVal |= bVal << (7 - k);
+ CONTEXT = ((CONTEXT & 0x0efb) << 1) | bVal |
+ ((line1 >> (7 - k)) & 0x0200) |
+ ((line2 >> (8 - k)) & 0x0008);
+ }
+ pLine[nLineBytes] = cVal;
+ } else {
+ pLine2 = pLine - nStride;
+ line2 = (h & 1) ? (*pLine2++) : 0;
+ CONTEXT = (line2 >> 1) & 0x01f8;
+ for (cc = 0; cc < nLineBytes; cc++) {
+ if (h & 1) {
+ line2 = (line2 << 8) | (*pLine2++);
+ }
+ cVal = 0;
+ for (k = 7; k >= 0; k--) {
+ bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
+ cVal |= bVal << k;
+ CONTEXT = ((CONTEXT & 0x0efb) << 1) | bVal |
+ ((line2 >> (k + 1)) & 0x0008);
+ }
+ pLine[cc] = cVal;
+ }
+ line2 <<= 8;
+ cVal = 0;
+ for (k = 0; k < nBitsLeft; k++) {
+ bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
+ cVal |= bVal << (7 - k);
+ CONTEXT =
+ ((CONTEXT & 0x0efb) << 1) | bVal | ((line2 >> (8 - k)) & 0x0008);
}
+ pLine[nLineBytes] = cVal;
+ }
}
- return GBREG;
+ pLine += nStride;
+ }
+ return GBREG;
}
-CJBig2_Image *CJBig2_GRDProc::decode_Arith_Template2_opt(CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext)
-{
- FX_BOOL LTP, SLTP, bVal;
- FX_DWORD CONTEXT;
- CJBig2_Image *GBREG;
- FX_DWORD line1, line2, line3;
- LTP = 0;
- JBIG2_ALLOC(GBREG, CJBig2_Image(GBW, GBH));
- GBREG->fill(0);
- for(FX_DWORD h = 0; h < GBH; h++) {
- if(TPGDON) {
- SLTP = pArithDecoder->DECODE(&gbContext[0x00e5]);
- LTP = LTP ^ SLTP;
- }
- if(LTP == 1) {
- GBREG->copyLine(h, h - 1);
+CJBig2_Image* CJBig2_GRDProc::decode_Arith_Template1_unopt(
+ CJBig2_ArithDecoder* pArithDecoder,
+ JBig2ArithCtx* gbContext) {
+ FX_BOOL LTP, SLTP, bVal;
+ FX_DWORD CONTEXT;
+ CJBig2_Image* GBREG;
+ FX_DWORD line1, line2, line3;
+ LTP = 0;
+ JBIG2_ALLOC(GBREG, CJBig2_Image(GBW, GBH));
+ GBREG->fill(0);
+ for (FX_DWORD h = 0; h < GBH; h++) {
+ if (TPGDON) {
+ SLTP = pArithDecoder->DECODE(&gbContext[0x0795]);
+ LTP = LTP ^ SLTP;
+ }
+ if (LTP == 1) {
+ GBREG->copyLine(h, h - 1);
+ } else {
+ line1 = GBREG->getPixel(2, h - 2);
+ line1 |= GBREG->getPixel(1, h - 2) << 1;
+ line1 |= GBREG->getPixel(0, h - 2) << 2;
+ line2 = GBREG->getPixel(2, h - 1);
+ line2 |= GBREG->getPixel(1, h - 1) << 1;
+ line2 |= GBREG->getPixel(0, h - 1) << 2;
+ line3 = 0;
+ for (FX_DWORD w = 0; w < GBW; w++) {
+ if (USESKIP && SKIP->getPixel(w, h)) {
+ bVal = 0;
} else {
- line1 = GBREG->getPixel(1, h - 2);
- line1 |= GBREG->getPixel(0, h - 2) << 1;
- line2 = GBREG->getPixel(2, h - 1);
- line2 |= GBREG->getPixel(1, h - 1) << 1;
- line2 |= GBREG->getPixel(0, h - 1) << 2;
- line3 = 0;
- for(FX_DWORD w = 0; w < GBW; w++) {
- if(USESKIP && SKIP->getPixel(w, h)) {
- bVal = 0;
- } else {
- CONTEXT = line3;
- CONTEXT |= line2 << 2;
- CONTEXT |= line1 << 7;
- bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
- }
- if(bVal) {
- GBREG->setPixel(w, h, bVal);
- }
- line1 = ((line1 << 1) | GBREG->getPixel(w + 2, h - 2)) & 0x07;
- line2 = ((line2 << 1) | GBREG->getPixel(w + 3, h - 1)) & 0x1f;
- line3 = ((line3 << 1) | bVal) & 0x03;
- }
+ CONTEXT = line3;
+ CONTEXT |= GBREG->getPixel(w + GBAT[0], h + GBAT[1]) << 3;
+ CONTEXT |= line2 << 4;
+ CONTEXT |= line1 << 9;
+ bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
}
+ if (bVal) {
+ GBREG->setPixel(w, h, bVal);
+ }
+ line1 = ((line1 << 1) | GBREG->getPixel(w + 3, h - 2)) & 0x0f;
+ line2 = ((line2 << 1) | GBREG->getPixel(w + 3, h - 1)) & 0x1f;
+ line3 = ((line3 << 1) | bVal) & 0x07;
+ }
}
- return GBREG;
+ }
+ return GBREG;
}
-CJBig2_Image *CJBig2_GRDProc::decode_Arith_Template2_opt2(CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext)
-{
- FX_BOOL LTP, SLTP, bVal;
- FX_DWORD CONTEXT;
- CJBig2_Image *GBREG;
- FX_DWORD line1, line2;
- uint8_t *pLine, cVal;
- intptr_t nStride, nStride2;
- int32_t nBits, k;
- LTP = 0;
- JBIG2_ALLOC(GBREG, CJBig2_Image(GBW, GBH));
- if (GBREG->m_pData == NULL) {
- delete GBREG;
- m_pModule->JBig2_Error("Generic region decoding procedure: Create Image Failed with width = %d, height = %d\n", GBW, GBH);
- return NULL;
+CJBig2_Image* CJBig2_GRDProc::decode_Arith_Template2_opt(
+ CJBig2_ArithDecoder* pArithDecoder,
+ JBig2ArithCtx* gbContext) {
+ FX_BOOL LTP, SLTP, bVal;
+ FX_DWORD CONTEXT;
+ CJBig2_Image* GBREG;
+ FX_DWORD line1, line2, line3;
+ LTP = 0;
+ JBIG2_ALLOC(GBREG, CJBig2_Image(GBW, GBH));
+ GBREG->fill(0);
+ for (FX_DWORD h = 0; h < GBH; h++) {
+ if (TPGDON) {
+ SLTP = pArithDecoder->DECODE(&gbContext[0x00e5]);
+ LTP = LTP ^ SLTP;
}
- pLine = GBREG->m_pData;
- nStride = GBREG->m_nStride;
- nStride2 = nStride << 1;
- for(FX_DWORD h = 0; h < GBH; h++) {
- if(TPGDON) {
- SLTP = pArithDecoder->DECODE(&gbContext[0x00e5]);
- LTP = LTP ^ SLTP;
- }
- if(LTP == 1) {
- GBREG->copyLine(h, h - 1);
+ if (LTP == 1) {
+ GBREG->copyLine(h, h - 1);
+ } else {
+ line1 = GBREG->getPixel(1, h - 2);
+ line1 |= GBREG->getPixel(0, h - 2) << 1;
+ line2 = GBREG->getPixel(2, h - 1);
+ line2 |= GBREG->getPixel(1, h - 1) << 1;
+ line2 |= GBREG->getPixel(0, h - 1) << 2;
+ line3 = 0;
+ for (FX_DWORD w = 0; w < GBW; w++) {
+ if (USESKIP && SKIP->getPixel(w, h)) {
+ bVal = 0;
} else {
- line1 = (h > 1) ? pLine[-nStride2] << 1 : 0;
- line2 = (h > 0) ? pLine[-nStride] : 0;
- CONTEXT = (line1 & 0x0380) | ((line2 >> 3) & 0x007c);
- for(FX_DWORD w = 0; w < GBW; w += 8) {
- if(w + 8 < GBW) {
- nBits = 8;
- if(h > 1) {
- line1 = (line1 << 8) | (pLine[-nStride2 + (w >> 3) + 1] << 1);
- }
- if(h > 0) {
- line2 = (line2 << 8) | (pLine[-nStride + (w >> 3) + 1]);
- }
- } else {
- nBits = GBW - w;
- if(h > 1) {
- line1 <<= 8;
- }
- if(h > 0) {
- line2 <<= 8;
- }
- }
- cVal = 0;
- for(k = 0; k < nBits; k++) {
- if(USESKIP && SKIP->getPixel(w, h)) {
- bVal = 0;
- } else {
- bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
- }
- cVal |= bVal << (7 - k);
- CONTEXT = ((CONTEXT & 0x01bd) << 1) | bVal
- | ((line1 >> (7 - k)) & 0x0080)
- | ((line2 >> (10 - k)) & 0x0004);
- }
- pLine[w >> 3] = cVal;
- }
+ CONTEXT = line3;
+ CONTEXT |= line2 << 2;
+ CONTEXT |= line1 << 7;
+ bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
}
- pLine += nStride;
+ if (bVal) {
+ GBREG->setPixel(w, h, bVal);
+ }
+ line1 = ((line1 << 1) | GBREG->getPixel(w + 2, h - 2)) & 0x07;
+ line2 = ((line2 << 1) | GBREG->getPixel(w + 3, h - 1)) & 0x1f;
+ line3 = ((line3 << 1) | bVal) & 0x03;
+ }
}
- return GBREG;
+ }
+ return GBREG;
}
-CJBig2_Image *CJBig2_GRDProc::decode_Arith_Template2_opt3(CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext)
-{
- FX_BOOL LTP, SLTP, bVal;
- FX_DWORD CONTEXT;
- CJBig2_Image *GBREG;
- FX_DWORD line1, line2;
- uint8_t *pLine, *pLine1, *pLine2, cVal;
- int32_t nStride, nStride2, k;
- int32_t nLineBytes, nBitsLeft, cc;
- LTP = 0;
- JBIG2_ALLOC(GBREG, CJBig2_Image(GBW, GBH));
- if (GBREG->m_pData == NULL) {
- delete GBREG;
- m_pModule->JBig2_Error("Generic region decoding procedure: Create Image Failed with width = %d, height = %d\n", GBW, GBH);
- return NULL;
+CJBig2_Image* CJBig2_GRDProc::decode_Arith_Template2_opt2(
+ CJBig2_ArithDecoder* pArithDecoder,
+ JBig2ArithCtx* gbContext) {
+ FX_BOOL LTP, SLTP, bVal;
+ FX_DWORD CONTEXT;
+ CJBig2_Image* GBREG;
+ FX_DWORD line1, line2;
+ uint8_t *pLine, cVal;
+ intptr_t nStride, nStride2;
+ int32_t nBits, k;
+ LTP = 0;
+ JBIG2_ALLOC(GBREG, CJBig2_Image(GBW, GBH));
+ if (GBREG->m_pData == NULL) {
+ delete GBREG;
+ m_pModule->JBig2_Error(
+ "Generic region decoding procedure: Create Image Failed with width = "
+ "%d, height = %d\n",
+ GBW, GBH);
+ return NULL;
+ }
+ pLine = GBREG->m_pData;
+ nStride = GBREG->m_nStride;
+ nStride2 = nStride << 1;
+ for (FX_DWORD h = 0; h < GBH; h++) {
+ if (TPGDON) {
+ SLTP = pArithDecoder->DECODE(&gbContext[0x00e5]);
+ LTP = LTP ^ SLTP;
}
- pLine = GBREG->m_pData;
- nStride = GBREG->m_nStride;
- nStride2 = nStride << 1;
- nLineBytes = ((GBW + 7) >> 3) - 1;
- nBitsLeft = GBW - (nLineBytes << 3);
- for(FX_DWORD h = 0; h < GBH; h++) {
- if(TPGDON) {
- SLTP = pArithDecoder->DECODE(&gbContext[0x00e5]);
- LTP = LTP ^ SLTP;
- }
- if(LTP == 1) {
- GBREG->copyLine(h, h - 1);
+ if (LTP == 1) {
+ GBREG->copyLine(h, h - 1);
+ } else {
+ line1 = (h > 1) ? pLine[-nStride2] << 1 : 0;
+ line2 = (h > 0) ? pLine[-nStride] : 0;
+ CONTEXT = (line1 & 0x0380) | ((line2 >> 3) & 0x007c);
+ for (FX_DWORD w = 0; w < GBW; w += 8) {
+ if (w + 8 < GBW) {
+ nBits = 8;
+ if (h > 1) {
+ line1 = (line1 << 8) | (pLine[-nStride2 + (w >> 3) + 1] << 1);
+ }
+ if (h > 0) {
+ line2 = (line2 << 8) | (pLine[-nStride + (w >> 3) + 1]);
+ }
} else {
- if(h > 1) {
- pLine1 = pLine - nStride2;
- pLine2 = pLine - nStride;
- line1 = (*pLine1++) << 1;
- line2 = *pLine2++;
- CONTEXT = (line1 & 0x0380) | ((line2 >> 3) & 0x007c);
- for(cc = 0; cc < nLineBytes; cc++) {
- line1 = (line1 << 8) | ((*pLine1++) << 1);
- line2 = (line2 << 8) | (*pLine2++);
- cVal = 0;
- for(k = 7; k >= 0; k--) {
- bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
- cVal |= bVal << k;
- CONTEXT = ((CONTEXT & 0x01bd) << 1) | bVal
- | ((line1 >> k) & 0x0080)
- | ((line2 >> (k + 3)) & 0x0004);
- }
- pLine[cc] = cVal;
- }
- line1 <<= 8;
- line2 <<= 8;
- cVal = 0;
- for(k = 0; k < nBitsLeft; k++) {
- bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
- cVal |= bVal << (7 - k);
- CONTEXT = ((CONTEXT & 0x01bd) << 1) | bVal
- | ((line1 >> (7 - k)) & 0x0080)
- | ((line2 >> (10 - k)) & 0x0004);
- }
- pLine[nLineBytes] = cVal;
- } else {
- pLine2 = pLine - nStride;
- line2 = (h & 1) ? (*pLine2++) : 0;
- CONTEXT = (line2 >> 3) & 0x007c;
- for(cc = 0; cc < nLineBytes; cc++) {
- if(h & 1) {
- line2 = (line2 << 8) | (*pLine2++);
- }
- cVal = 0;
- for(k = 7; k >= 0; k--) {
- bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
- cVal |= bVal << k;
- CONTEXT = ((CONTEXT & 0x01bd) << 1) | bVal
- | ((line2 >> (k + 3)) & 0x0004);
- }
- pLine[cc] = cVal;
- }
- line2 <<= 8;
- cVal = 0;
- for(k = 0; k < nBitsLeft; k++) {
- bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
- cVal |= bVal << (7 - k);
- CONTEXT = ((CONTEXT & 0x01bd) << 1) | bVal
- | (((line2 >> (10 - k))) & 0x0004);
- }
- pLine[nLineBytes] = cVal;
- }
+ nBits = GBW - w;
+ if (h > 1) {
+ line1 <<= 8;
+ }
+ if (h > 0) {
+ line2 <<= 8;
+ }
}
- pLine += nStride;
+ cVal = 0;
+ for (k = 0; k < nBits; k++) {
+ if (USESKIP && SKIP->getPixel(w, h)) {
+ bVal = 0;
+ } else {
+ bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
+ }
+ cVal |= bVal << (7 - k);
+ CONTEXT = ((CONTEXT & 0x01bd) << 1) | bVal |
+ ((line1 >> (7 - k)) & 0x0080) |
+ ((line2 >> (10 - k)) & 0x0004);
+ }
+ pLine[w >> 3] = cVal;
+ }
}
- return GBREG;
+ pLine += nStride;
+ }
+ return GBREG;
}
-CJBig2_Image *CJBig2_GRDProc::decode_Arith_Template2_unopt(CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext)
-{
- FX_BOOL LTP, SLTP, bVal;
- FX_DWORD CONTEXT;
- CJBig2_Image *GBREG;
- FX_DWORD line1, line2, line3;
- LTP = 0;
- JBIG2_ALLOC(GBREG, CJBig2_Image(GBW, GBH));
- GBREG->fill(0);
- for(FX_DWORD h = 0; h < GBH; h++) {
- if(TPGDON) {
- SLTP = pArithDecoder->DECODE(&gbContext[0x00e5]);
- LTP = LTP ^ SLTP;
+CJBig2_Image* CJBig2_GRDProc::decode_Arith_Template2_opt3(
+ CJBig2_ArithDecoder* pArithDecoder,
+ JBig2ArithCtx* gbContext) {
+ FX_BOOL LTP, SLTP, bVal;
+ FX_DWORD CONTEXT;
+ CJBig2_Image* GBREG;
+ FX_DWORD line1, line2;
+ uint8_t *pLine, *pLine1, *pLine2, cVal;
+ int32_t nStride, nStride2, k;
+ int32_t nLineBytes, nBitsLeft, cc;
+ LTP = 0;
+ JBIG2_ALLOC(GBREG, CJBig2_Image(GBW, GBH));
+ if (GBREG->m_pData == NULL) {
+ delete GBREG;
+ m_pModule->JBig2_Error(
+ "Generic region decoding procedure: Create Image Failed with width = "
+ "%d, height = %d\n",
+ GBW, GBH);
+ return NULL;
+ }
+ pLine = GBREG->m_pData;
+ nStride = GBREG->m_nStride;
+ nStride2 = nStride << 1;
+ nLineBytes = ((GBW + 7) >> 3) - 1;
+ nBitsLeft = GBW - (nLineBytes << 3);
+ for (FX_DWORD h = 0; h < GBH; h++) {
+ if (TPGDON) {
+ SLTP = pArithDecoder->DECODE(&gbContext[0x00e5]);
+ LTP = LTP ^ SLTP;
+ }
+ if (LTP == 1) {
+ GBREG->copyLine(h, h - 1);
+ } else {
+ if (h > 1) {
+ pLine1 = pLine - nStride2;
+ pLine2 = pLine - nStride;
+ line1 = (*pLine1++) << 1;
+ line2 = *pLine2++;
+ CONTEXT = (line1 & 0x0380) | ((line2 >> 3) & 0x007c);
+ for (cc = 0; cc < nLineBytes; cc++) {
+ line1 = (line1 << 8) | ((*pLine1++) << 1);
+ line2 = (line2 << 8) | (*pLine2++);
+ cVal = 0;
+ for (k = 7; k >= 0; k--) {
+ bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
+ cVal |= bVal << k;
+ CONTEXT = ((CONTEXT & 0x01bd) << 1) | bVal |
+ ((line1 >> k) & 0x0080) | ((line2 >> (k + 3)) & 0x0004);
+ }
+ pLine[cc] = cVal;
}
- if(LTP == 1) {
- GBREG->copyLine(h, h - 1);
- } else {
- line1 = GBREG->getPixel(1, h - 2);
- line1 |= GBREG->getPixel(0, h - 2) << 1;
- line2 = GBREG->getPixel(1, h - 1);
- line2 |= GBREG->getPixel(0, h - 1) << 1;
- line3 = 0;
- for(FX_DWORD w = 0; w < GBW; w++) {
- if(USESKIP && SKIP->getPixel(w, h)) {
- bVal = 0;
- } else {
- CONTEXT = line3;
- CONTEXT |= GBREG->getPixel(w + GBAT[0], h + GBAT[1]) << 2;
- CONTEXT |= line2 << 3;
- CONTEXT |= line1 << 7;
- bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
- }
- if(bVal) {
- GBREG->setPixel(w, h, bVal);
- }
- line1 = ((line1 << 1) | GBREG->getPixel(w + 2, h - 2)) & 0x07;
- line2 = ((line2 << 1) | GBREG->getPixel(w + 2, h - 1)) & 0x0f;
- line3 = ((line3 << 1) | bVal) & 0x03;
- }
+ line1 <<= 8;
+ line2 <<= 8;
+ cVal = 0;
+ for (k = 0; k < nBitsLeft; k++) {
+ bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
+ cVal |= bVal << (7 - k);
+ CONTEXT = ((CONTEXT & 0x01bd) << 1) | bVal |
+ ((line1 >> (7 - k)) & 0x0080) |
+ ((line2 >> (10 - k)) & 0x0004);
}
+ pLine[nLineBytes] = cVal;
+ } else {
+ pLine2 = pLine - nStride;
+ line2 = (h & 1) ? (*pLine2++) : 0;
+ CONTEXT = (line2 >> 3) & 0x007c;
+ for (cc = 0; cc < nLineBytes; cc++) {
+ if (h & 1) {
+ line2 = (line2 << 8) | (*pLine2++);
+ }
+ cVal = 0;
+ for (k = 7; k >= 0; k--) {
+ bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
+ cVal |= bVal << k;
+ CONTEXT = ((CONTEXT & 0x01bd) << 1) | bVal |
+ ((line2 >> (k + 3)) & 0x0004);
+ }
+ pLine[cc] = cVal;
+ }
+ line2 <<= 8;
+ cVal = 0;
+ for (k = 0; k < nBitsLeft; k++) {
+ bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
+ cVal |= bVal << (7 - k);
+ CONTEXT = ((CONTEXT & 0x01bd) << 1) | bVal |
+ (((line2 >> (10 - k))) & 0x0004);
+ }
+ pLine[nLineBytes] = cVal;
+ }
}
- return GBREG;
+ pLine += nStride;
+ }
+ return GBREG;
}
-CJBig2_Image *CJBig2_GRDProc::decode_Arith_Template3_opt(CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext)
-{
- FX_BOOL LTP, SLTP, bVal;
- FX_DWORD CONTEXT;
- CJBig2_Image *GBREG;
- FX_DWORD line1, line2;
- LTP = 0;
- JBIG2_ALLOC(GBREG, CJBig2_Image(GBW, GBH));
- GBREG->fill(0);
- for(FX_DWORD h = 0; h < GBH; h++) {
- if(TPGDON) {
- SLTP = pArithDecoder->DECODE(&gbContext[0x0195]);
- LTP = LTP ^ SLTP;
- }
- if(LTP == 1) {
- GBREG->copyLine(h, h - 1);
+CJBig2_Image* CJBig2_GRDProc::decode_Arith_Template2_unopt(
+ CJBig2_ArithDecoder* pArithDecoder,
+ JBig2ArithCtx* gbContext) {
+ FX_BOOL LTP, SLTP, bVal;
+ FX_DWORD CONTEXT;
+ CJBig2_Image* GBREG;
+ FX_DWORD line1, line2, line3;
+ LTP = 0;
+ JBIG2_ALLOC(GBREG, CJBig2_Image(GBW, GBH));
+ GBREG->fill(0);
+ for (FX_DWORD h = 0; h < GBH; h++) {
+ if (TPGDON) {
+ SLTP = pArithDecoder->DECODE(&gbContext[0x00e5]);
+ LTP = LTP ^ SLTP;
+ }
+ if (LTP == 1) {
+ GBREG->copyLine(h, h - 1);
+ } else {
+ line1 = GBREG->getPixel(1, h - 2);
+ line1 |= GBREG->getPixel(0, h - 2) << 1;
+ line2 = GBREG->getPixel(1, h - 1);
+ line2 |= GBREG->getPixel(0, h - 1) << 1;
+ line3 = 0;
+ for (FX_DWORD w = 0; w < GBW; w++) {
+ if (USESKIP && SKIP->getPixel(w, h)) {
+ bVal = 0;
} else {
- line1 = GBREG->getPixel(2, h - 1);
- line1 |= GBREG->getPixel(1, h - 1) << 1;
- line1 |= GBREG->getPixel(0, h - 1) << 2;
- line2 = 0;
- for(FX_DWORD w = 0; w < GBW; w++) {
- if(USESKIP && SKIP->getPixel(w, h)) {
- bVal = 0;
- } else {
- CONTEXT = line2;
- CONTEXT |= line1 << 4;
- bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
- }
- if(bVal) {
- GBREG->setPixel(w, h, bVal);
- }
- line1 = ((line1 << 1) | GBREG->getPixel(w + 3, h - 1)) & 0x3f;
- line2 = ((line2 << 1) | bVal) & 0x0f;
- }
+ CONTEXT = line3;
+ CONTEXT |= GBREG->getPixel(w + GBAT[0], h + GBAT[1]) << 2;
+ CONTEXT |= line2 << 3;
+ CONTEXT |= line1 << 7;
+ bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
}
+ if (bVal) {
+ GBREG->setPixel(w, h, bVal);
+ }
+ line1 = ((line1 << 1) | GBREG->getPixel(w + 2, h - 2)) & 0x07;
+ line2 = ((line2 << 1) | GBREG->getPixel(w + 2, h - 1)) & 0x0f;
+ line3 = ((line3 << 1) | bVal) & 0x03;
+ }
}
- return GBREG;
+ }
+ return GBREG;
}
-CJBig2_Image *CJBig2_GRDProc::decode_Arith_Template3_opt2(CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext)
-{
- FX_BOOL LTP, SLTP, bVal;
- FX_DWORD CONTEXT;
- CJBig2_Image *GBREG;
- FX_DWORD line1;
- uint8_t *pLine, cVal;
- intptr_t nStride;
- int32_t nBits, k;
- LTP = 0;
- JBIG2_ALLOC(GBREG, CJBig2_Image(GBW, GBH));
- if (GBREG->m_pData == NULL) {
- delete GBREG;
- m_pModule->JBig2_Error("Generic region decoding procedure: Create Image Failed with width = %d, height = %d\n", GBW, GBH);
- return NULL;
+CJBig2_Image* CJBig2_GRDProc::decode_Arith_Template3_opt(
+ CJBig2_ArithDecoder* pArithDecoder,
+ JBig2ArithCtx* gbContext) {
+ FX_BOOL LTP, SLTP, bVal;
+ FX_DWORD CONTEXT;
+ CJBig2_Image* GBREG;
+ FX_DWORD line1, line2;
+ LTP = 0;
+ JBIG2_ALLOC(GBREG, CJBig2_Image(GBW, GBH));
+ GBREG->fill(0);
+ for (FX_DWORD h = 0; h < GBH; h++) {
+ if (TPGDON) {
+ SLTP = pArithDecoder->DECODE(&gbContext[0x0195]);
+ LTP = LTP ^ SLTP;
}
- pLine = GBREG->m_pData;
- nStride = GBREG->m_nStride;
- for(FX_DWORD h = 0; h < GBH; h++) {
- if(TPGDON) {
- SLTP = pArithDecoder->DECODE(&gbContext[0x0195]);
- LTP = LTP ^ SLTP;
- }
- if(LTP == 1) {
- GBREG->copyLine(h, h - 1);
+ if (LTP == 1) {
+ GBREG->copyLine(h, h - 1);
+ } else {
+ line1 = GBREG->getPixel(2, h - 1);
+ line1 |= GBREG->getPixel(1, h - 1) << 1;
+ line1 |= GBREG->getPixel(0, h - 1) << 2;
+ line2 = 0;
+ for (FX_DWORD w = 0; w < GBW; w++) {
+ if (USESKIP && SKIP->getPixel(w, h)) {
+ bVal = 0;
} else {
- line1 = (h > 0) ? pLine[-nStride] : 0;
- CONTEXT = (line1 >> 1) & 0x03f0;
- for(FX_DWORD w = 0; w < GBW; w += 8) {
- if(w + 8 < GBW) {
- nBits = 8;
- if(h > 0) {
- line1 = (line1 << 8) | (pLine[-nStride + (w >> 3) + 1]);
- }
- } else {
- nBits = GBW - w;
- if(h > 0) {
- line1 <<= 8;
- }
- }
- cVal = 0;
- for(k = 0; k < nBits; k++) {
- if(USESKIP && SKIP->getPixel(w, h)) {
- bVal = 0;
- } else {
- bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
- }
- cVal |= bVal << (7 - k);
- CONTEXT = ((CONTEXT & 0x01f7) << 1) | bVal
- | ((line1 >> (8 - k)) & 0x0010);
- }
- pLine[w >> 3] = cVal;
- }
+ CONTEXT = line2;
+ CONTEXT |= line1 << 4;
+ bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
}
- pLine += nStride;
+ if (bVal) {
+ GBREG->setPixel(w, h, bVal);
+ }
+ line1 = ((line1 << 1) | GBREG->getPixel(w + 3, h - 1)) & 0x3f;
+ line2 = ((line2 << 1) | bVal) & 0x0f;
+ }
}
- return GBREG;
+ }
+ return GBREG;
}
-CJBig2_Image *CJBig2_GRDProc::decode_Arith_Template3_opt3(CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext)
-{
- FX_BOOL LTP, SLTP, bVal;
- FX_DWORD CONTEXT;
- CJBig2_Image *GBREG;
- FX_DWORD line1;
- uint8_t *pLine, *pLine1, cVal;
- int32_t nStride, k;
- int32_t nLineBytes, nBitsLeft, cc;
- LTP = 0;
- JBIG2_ALLOC(GBREG, CJBig2_Image(GBW, GBH));
- if (GBREG->m_pData == NULL) {
- delete GBREG;
- m_pModule->JBig2_Error("Generic region decoding procedure: Create Image Failed with width = %d, height = %d\n", GBW, GBH);
- return NULL;
+CJBig2_Image* CJBig2_GRDProc::decode_Arith_Template3_opt2(
+ CJBig2_ArithDecoder* pArithDecoder,
+ JBig2ArithCtx* gbContext) {
+ FX_BOOL LTP, SLTP, bVal;
+ FX_DWORD CONTEXT;
+ CJBig2_Image* GBREG;
+ FX_DWORD line1;
+ uint8_t *pLine, cVal;
+ intptr_t nStride;
+ int32_t nBits, k;
+ LTP = 0;
+ JBIG2_ALLOC(GBREG, CJBig2_Image(GBW, GBH));
+ if (GBREG->m_pData == NULL) {
+ delete GBREG;
+ m_pModule->JBig2_Error(
+ "Generic region decoding procedure: Create Image Failed with width = "
+ "%d, height = %d\n",
+ GBW, GBH);
+ return NULL;
+ }
+ pLine = GBREG->m_pData;
+ nStride = GBREG->m_nStride;
+ for (FX_DWORD h = 0; h < GBH; h++) {
+ if (TPGDON) {
+ SLTP = pArithDecoder->DECODE(&gbContext[0x0195]);
+ LTP = LTP ^ SLTP;
}
- pLine = GBREG->m_pData;
- nStride = GBREG->m_nStride;
- nLineBytes = ((GBW + 7) >> 3) - 1;
- nBitsLeft = GBW - (nLineBytes << 3);
- for(FX_DWORD h = 0; h < GBH; h++) {
- if(TPGDON) {
- SLTP = pArithDecoder->DECODE(&gbContext[0x0195]);
- LTP = LTP ^ SLTP;
- }
- if(LTP == 1) {
- GBREG->copyLine(h, h - 1);
+ if (LTP == 1) {
+ GBREG->copyLine(h, h - 1);
+ } else {
+ line1 = (h > 0) ? pLine[-nStride] : 0;
+ CONTEXT = (line1 >> 1) & 0x03f0;
+ for (FX_DWORD w = 0; w < GBW; w += 8) {
+ if (w + 8 < GBW) {
+ nBits = 8;
+ if (h > 0) {
+ line1 = (line1 << 8) | (pLine[-nStride + (w >> 3) + 1]);
+ }
} else {
- if(h > 0) {
- pLine1 = pLine - nStride;
- line1 = *pLine1++;
- CONTEXT = (line1 >> 1) & 0x03f0;
- for(cc = 0; cc < nLineBytes; cc++) {
- line1 = (line1 << 8) | (*pLine1++);
- cVal = 0;
- for(k = 7; k >= 0; k--) {
- bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
- cVal |= bVal << k;
- CONTEXT = ((CONTEXT & 0x01f7) << 1) | bVal
- | ((line1 >> (k + 1)) & 0x0010);
- }
- pLine[cc] = cVal;
- }
- line1 <<= 8;
- cVal = 0;
- for(k = 0; k < nBitsLeft; k++) {
- bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
- cVal |= bVal << (7 - k);
- CONTEXT = ((CONTEXT & 0x01f7) << 1) | bVal
- | ((line1 >> (8 - k)) & 0x0010);
- }
- pLine[nLineBytes] = cVal;
- } else {
- CONTEXT = 0;
- for(cc = 0; cc < nLineBytes; cc++) {
- cVal = 0;
- for(k = 7; k >= 0; k--) {
- bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
- cVal |= bVal << k;
- CONTEXT = ((CONTEXT & 0x01f7) << 1) | bVal;
- }
- pLine[cc] = cVal;
- }
- cVal = 0;
- for(k = 0; k < nBitsLeft; k++) {
- bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
- cVal |= bVal << (7 - k);
- CONTEXT = ((CONTEXT & 0x01f7) << 1) | bVal;
- }
- pLine[nLineBytes] = cVal;
- }
+ nBits = GBW - w;
+ if (h > 0) {
+ line1 <<= 8;
+ }
}
- pLine += nStride;
+ cVal = 0;
+ for (k = 0; k < nBits; k++) {
+ if (USESKIP && SKIP->getPixel(w, h)) {
+ bVal = 0;
+ } else {
+ bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
+ }
+ cVal |= bVal << (7 - k);
+ CONTEXT =
+ ((CONTEXT & 0x01f7) << 1) | bVal | ((line1 >> (8 - k)) & 0x0010);
+ }
+ pLine[w >> 3] = cVal;
+ }
}
- return GBREG;
+ pLine += nStride;
+ }
+ return GBREG;
}
-CJBig2_Image *CJBig2_GRDProc::decode_Arith_Template3_unopt(CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext)
-{
- FX_BOOL LTP, SLTP, bVal;
- FX_DWORD CONTEXT;
- CJBig2_Image *GBREG;
- FX_DWORD line1, line2;
- LTP = 0;
- JBIG2_ALLOC(GBREG, CJBig2_Image(GBW, GBH));
- GBREG->fill(0);
- for(FX_DWORD h = 0; h < GBH; h++) {
- if(TPGDON) {
- SLTP = pArithDecoder->DECODE(&gbContext[0x0195]);
- LTP = LTP ^ SLTP;
+CJBig2_Image* CJBig2_GRDProc::decode_Arith_Template3_opt3(
+ CJBig2_ArithDecoder* pArithDecoder,
+ JBig2ArithCtx* gbContext) {
+ FX_BOOL LTP, SLTP, bVal;
+ FX_DWORD CONTEXT;
+ CJBig2_Image* GBREG;
+ FX_DWORD line1;
+ uint8_t *pLine, *pLine1, cVal;
+ int32_t nStride, k;
+ int32_t nLineBytes, nBitsLeft, cc;
+ LTP = 0;
+ JBIG2_ALLOC(GBREG, CJBig2_Image(GBW, GBH));
+ if (GBREG->m_pData == NULL) {
+ delete GBREG;
+ m_pModule->JBig2_Error(
+ "Generic region decoding procedure: Create Image Failed with width = "
+ "%d, height = %d\n",
+ GBW, GBH);
+ return NULL;
+ }
+ pLine = GBREG->m_pData;
+ nStride = GBREG->m_nStride;
+ nLineBytes = ((GBW + 7) >> 3) - 1;
+ nBitsLeft = GBW - (nLineBytes << 3);
+ for (FX_DWORD h = 0; h < GBH; h++) {
+ if (TPGDON) {
+ SLTP = pArithDecoder->DECODE(&gbContext[0x0195]);
+ LTP = LTP ^ SLTP;
+ }
+ if (LTP == 1) {
+ GBREG->copyLine(h, h - 1);
+ } else {
+ if (h > 0) {
+ pLine1 = pLine - nStride;
+ line1 = *pLine1++;
+ CONTEXT = (line1 >> 1) & 0x03f0;
+ for (cc = 0; cc < nLineBytes; cc++) {
+ line1 = (line1 << 8) | (*pLine1++);
+ cVal = 0;
+ for (k = 7; k >= 0; k--) {
+ bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
+ cVal |= bVal << k;
+ CONTEXT = ((CONTEXT & 0x01f7) << 1) | bVal |
+ ((line1 >> (k + 1)) & 0x0010);
+ }
+ pLine[cc] = cVal;
}
- if(LTP == 1) {
- GBREG->copyLine(h, h - 1);
- } else {
- line1 = GBREG->getPixel(1, h - 1);
- line1 |= GBREG->getPixel(0, h - 1) << 1;
- line2 = 0;
- for(FX_DWORD w = 0; w < GBW; w++) {
- if(USESKIP && SKIP->getPixel(w, h)) {
- bVal = 0;
- } else {
- CONTEXT = line2;
- CONTEXT |= GBREG->getPixel(w + GBAT[0], h + GBAT[1]) << 4;
- CONTEXT |= line1 << 5;
- bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
- }
- if(bVal) {
- GBREG->setPixel(w, h, bVal);
- }
- line1 = ((line1 << 1) | GBREG->getPixel(w + 2, h - 1)) & 0x1f;
- line2 = ((line2 << 1) | bVal) & 0x0f;
- }
+ line1 <<= 8;
+ cVal = 0;
+ for (k = 0; k < nBitsLeft; k++) {
+ bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
+ cVal |= bVal << (7 - k);
+ CONTEXT =
+ ((CONTEXT & 0x01f7) << 1) | bVal | ((line1 >> (8 - k)) & 0x0010);
+ }
+ pLine[nLineBytes] = cVal;
+ } else {
+ CONTEXT = 0;
+ for (cc = 0; cc < nLineBytes; cc++) {
+ cVal = 0;
+ for (k = 7; k >= 0; k--) {
+ bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
+ cVal |= bVal << k;
+ CONTEXT = ((CONTEXT & 0x01f7) << 1) | bVal;
+ }
+ pLine[cc] = cVal;
+ }
+ cVal = 0;
+ for (k = 0; k < nBitsLeft; k++) {
+ bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
+ cVal |= bVal << (7 - k);
+ CONTEXT = ((CONTEXT & 0x01f7) << 1) | bVal;
}
+ pLine[nLineBytes] = cVal;
+ }
}
- return GBREG;
+ pLine += nStride;
+ }
+ return GBREG;
}
-CJBig2_Image *CJBig2_GRDProc::decode_Arith_V2(CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext)
-{
- FX_BOOL LTP, SLTP, bVal;
- FX_DWORD CONTEXT;
- CJBig2_Image *GBREG;
- FX_DWORD line1, line2, line3;
- LTP = 0;
- JBIG2_ALLOC(GBREG, CJBig2_Image(GBW, GBH));
- GBREG->fill(0);
- for(FX_DWORD h = 0; h < GBH; h++) {
- if(TPGDON) {
- switch(GBTEMPLATE) {
- case 0:
- CONTEXT = 0x9b25;
- break;
- case 1:
- CONTEXT = 0x0795;
- break;
- case 2:
- CONTEXT = 0x00e5;
- break;
- case 3:
- CONTEXT = 0x0195;
- break;
- }
- SLTP = pArithDecoder->DECODE(&gbContext[CONTEXT]);
- LTP = LTP ^ SLTP;
- }
- if(LTP == 1) {
- GBREG->copyLine(h, h - 1);
+CJBig2_Image* CJBig2_GRDProc::decode_Arith_Template3_unopt(
+ CJBig2_ArithDecoder* pArithDecoder,
+ JBig2ArithCtx* gbContext) {
+ FX_BOOL LTP, SLTP, bVal;
+ FX_DWORD CONTEXT;
+ CJBig2_Image* GBREG;
+ FX_DWORD line1, line2;
+ LTP = 0;
+ JBIG2_ALLOC(GBREG, CJBig2_Image(GBW, GBH));
+ GBREG->fill(0);
+ for (FX_DWORD h = 0; h < GBH; h++) {
+ if (TPGDON) {
+ SLTP = pArithDecoder->DECODE(&gbContext[0x0195]);
+ LTP = LTP ^ SLTP;
+ }
+ if (LTP == 1) {
+ GBREG->copyLine(h, h - 1);
+ } else {
+ line1 = GBREG->getPixel(1, h - 1);
+ line1 |= GBREG->getPixel(0, h - 1) << 1;
+ line2 = 0;
+ for (FX_DWORD w = 0; w < GBW; w++) {
+ if (USESKIP && SKIP->getPixel(w, h)) {
+ bVal = 0;
} else {
- switch(GBTEMPLATE) {
- case 0: {
- line1 = GBREG->getPixel(1, h - 2);
- line1 |= GBREG->getPixel(0, h - 2) << 1;
- line2 = GBREG->getPixel(2, h - 1);
- line2 |= GBREG->getPixel(1, h - 1) << 1;
- line2 |= GBREG->getPixel(0, h - 1) << 2;
- line3 = 0;
- for(FX_DWORD w = 0; w < GBW; w++) {
- if(USESKIP && SKIP->getPixel(w, h)) {
- bVal = 0;
- } else {
- CONTEXT = line3;
- CONTEXT |= GBREG->getPixel(w + GBAT[0], h + GBAT[1]) << 4;
- CONTEXT |= line2 << 5;
- CONTEXT |= GBREG->getPixel(w + GBAT[2], h + GBAT[3]) << 10;
- CONTEXT |= GBREG->getPixel(w + GBAT[4], h + GBAT[5]) << 11;
- CONTEXT |= line1 << 12;
- CONTEXT |= GBREG->getPixel(w + GBAT[6], h + GBAT[7]) << 15;
- bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
- }
- if(bVal) {
- GBREG->setPixel(w, h, bVal);
- }
- line1 = ((line1 << 1) | GBREG->getPixel(w + 2, h - 2)) & 0x07;
- line2 = ((line2 << 1) | GBREG->getPixel(w + 3, h - 1)) & 0x1f;
- line3 = ((line3 << 1) | bVal) & 0x0f;
- }
- }
- break;
- case 1: {
- line1 = GBREG->getPixel(2, h - 2);
- line1 |= GBREG->getPixel(1, h - 2) << 1;
- line1 |= GBREG->getPixel(0, h - 2) << 2;
- line2 = GBREG->getPixel(2, h - 1);
- line2 |= GBREG->getPixel(1, h - 1) << 1;
- line2 |= GBREG->getPixel(0, h - 1) << 2;
- line3 = 0;
- for(FX_DWORD w = 0; w < GBW; w++) {
- if(USESKIP && SKIP->getPixel(w, h)) {
- bVal = 0;
- } else {
- CONTEXT = line3;
- CONTEXT |= GBREG->getPixel(w + GBAT[0], h + GBAT[1]) << 3;
- CONTEXT |= line2 << 4;
- CONTEXT |= line1 << 9;
- bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
- }
- if(bVal) {
- GBREG->setPixel(w, h, bVal);
- }
- line1 = ((line1 << 1) | GBREG->getPixel(w + 3, h - 2)) & 0x0f;
- line2 = ((line2 << 1) | GBREG->getPixel(w + 3, h - 1)) & 0x1f;
- line3 = ((line3 << 1) | bVal) & 0x07;
- }
- }
- break;
- case 2: {
- line1 = GBREG->getPixel(1, h - 2);
- line1 |= GBREG->getPixel(0, h - 2) << 1;
- line2 = GBREG->getPixel(1, h - 1);
- line2 |= GBREG->getPixel(0, h - 1) << 1;
- line3 = 0;
- for(FX_DWORD w = 0; w < GBW; w++) {
- if(USESKIP && SKIP->getPixel(w, h)) {
- bVal = 0;
- } else {
- CONTEXT = line3;
- CONTEXT |= GBREG->getPixel(w + GBAT[0], h + GBAT[1]) << 2;
- CONTEXT |= line2 << 3;
- CONTEXT |= line1 << 7;
- bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
- }
- if(bVal) {
- GBREG->setPixel(w, h, bVal);
- }
- line1 = ((line1 << 1) | GBREG->getPixel(w + 2, h - 2)) & 0x07;
- line2 = ((line2 << 1) | GBREG->getPixel(w + 2, h - 1)) & 0x0f;
- line3 = ((line3 << 1) | bVal) & 0x03;
- }
- }
- break;
- case 3: {
- line1 = GBREG->getPixel(1, h - 1);
- line1 |= GBREG->getPixel(0, h - 1) << 1;
- line2 = 0;
- for(FX_DWORD w = 0; w < GBW; w++) {
- if(USESKIP && SKIP->getPixel(w, h)) {
- bVal = 0;
- } else {
- CONTEXT = line2;
- CONTEXT |= GBREG->getPixel(w + GBAT[0], h + GBAT[1]) << 4;
- CONTEXT |= line1 << 5;
- bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
- }
- if(bVal) {
- GBREG->setPixel(w, h, bVal);
- }
- line1 = ((line1 << 1) | GBREG->getPixel(w + 2, h - 1)) & 0x1f;
- line2 = ((line2 << 1) | bVal) & 0x0f;
- }
- }
- break;
- }
+ CONTEXT = line2;
+ CONTEXT |= GBREG->getPixel(w + GBAT[0], h + GBAT[1]) << 4;
+ CONTEXT |= line1 << 5;
+ bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
+ }
+ if (bVal) {
+ GBREG->setPixel(w, h, bVal);
}
+ line1 = ((line1 << 1) | GBREG->getPixel(w + 2, h - 1)) & 0x1f;
+ line2 = ((line2 << 1) | bVal) & 0x0f;
+ }
}
- return GBREG;
+ }
+ return GBREG;
}
-CJBig2_Image *CJBig2_GRDProc::decode_Arith_V1(CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext)
-{
- FX_BOOL LTP, SLTP, bVal;
- FX_DWORD CONTEXT = 0;
- CJBig2_Image *GBREG;
- LTP = 0;
- JBIG2_ALLOC(GBREG, CJBig2_Image(GBW, GBH));
- GBREG->fill(0);
- for(FX_DWORD h = 0; h < GBH; h++) {
- if(TPGDON) {
- switch(GBTEMPLATE) {
- case 0:
- CONTEXT = 0x9b25;
- break;
- case 1:
- CONTEXT = 0x0795;
- break;
- case 2:
- CONTEXT = 0x00e5;
- break;
- case 3:
- CONTEXT = 0x0195;
- break;
+CJBig2_Image* CJBig2_GRDProc::decode_Arith_V2(
+ CJBig2_ArithDecoder* pArithDecoder,
+ JBig2ArithCtx* gbContext) {
+ FX_BOOL LTP, SLTP, bVal;
+ FX_DWORD CONTEXT;
+ CJBig2_Image* GBREG;
+ FX_DWORD line1, line2, line3;
+ LTP = 0;
+ JBIG2_ALLOC(GBREG, CJBig2_Image(GBW, GBH));
+ GBREG->fill(0);
+ for (FX_DWORD h = 0; h < GBH; h++) {
+ if (TPGDON) {
+ switch (GBTEMPLATE) {
+ case 0:
+ CONTEXT = 0x9b25;
+ break;
+ case 1:
+ CONTEXT = 0x0795;
+ break;
+ case 2:
+ CONTEXT = 0x00e5;
+ break;
+ case 3:
+ CONTEXT = 0x0195;
+ break;
+ }
+ SLTP = pArithDecoder->DECODE(&gbContext[CONTEXT]);
+ LTP = LTP ^ SLTP;
+ }
+ if (LTP == 1) {
+ GBREG->copyLine(h, h - 1);
+ } else {
+ switch (GBTEMPLATE) {
+ case 0: {
+ line1 = GBREG->getPixel(1, h - 2);
+ line1 |= GBREG->getPixel(0, h - 2) << 1;
+ line2 = GBREG->getPixel(2, h - 1);
+ line2 |= GBREG->getPixel(1, h - 1) << 1;
+ line2 |= GBREG->getPixel(0, h - 1) << 2;
+ line3 = 0;
+ for (FX_DWORD w = 0; w < GBW; w++) {
+ if (USESKIP && SKIP->getPixel(w, h)) {
+ bVal = 0;
+ } else {
+ CONTEXT = line3;
+ CONTEXT |= GBREG->getPixel(w + GBAT[0], h + GBAT[1]) << 4;
+ CONTEXT |= line2 << 5;
+ CONTEXT |= GBREG->getPixel(w + GBAT[2], h + GBAT[3]) << 10;
+ CONTEXT |= GBREG->getPixel(w + GBAT[4], h + GBAT[5]) << 11;
+ CONTEXT |= line1 << 12;
+ CONTEXT |= GBREG->getPixel(w + GBAT[6], h + GBAT[7]) << 15;
+ bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
}
- SLTP = pArithDecoder->DECODE(&gbContext[CONTEXT]);
- LTP = LTP ^ SLTP;
- }
- if(LTP == 1) {
- for(FX_DWORD w = 0; w < GBW; w++) {
- GBREG->setPixel(w, h, GBREG->getPixel(w, h - 1));
+ if (bVal) {
+ GBREG->setPixel(w, h, bVal);
}
- } else {
- for(FX_DWORD w = 0; w < GBW; w++) {
- if(USESKIP && SKIP->getPixel(w, h)) {
- GBREG->setPixel(w, h, 0);
- } else {
- CONTEXT = 0;
- switch(GBTEMPLATE) {
- case 0:
- CONTEXT |= GBREG->getPixel(w - 1, h);
- CONTEXT |= GBREG->getPixel(w - 2, h) << 1;
- CONTEXT |= GBREG->getPixel(w - 3, h) << 2;
- CONTEXT |= GBREG->getPixel(w - 4, h) << 3;
- CONTEXT |= GBREG->getPixel(w + GBAT[0], h + GBAT[1]) << 4;
- CONTEXT |= GBREG->getPixel(w + 2, h - 1) << 5;
- CONTEXT |= GBREG->getPixel(w + 1, h - 1) << 6;
- CONTEXT |= GBREG->getPixel(w, h - 1) << 7;
- CONTEXT |= GBREG->getPixel(w - 1, h - 1) << 8;
- CONTEXT |= GBREG->getPixel(w - 2, h - 1) << 9;
- CONTEXT |= GBREG->getPixel(w + GBAT[2], h + GBAT[3]) << 10;
- CONTEXT |= GBREG->getPixel(w + GBAT[4], h + GBAT[5]) << 11;
- CONTEXT |= GBREG->getPixel(w + 1, h - 2) << 12;
- CONTEXT |= GBREG->getPixel(w, h - 2) << 13;
- CONTEXT |= GBREG->getPixel(w - 1, h - 2) << 14;
- CONTEXT |= GBREG->getPixel(w + GBAT[6], h + GBAT[7]) << 15;
- break;
- case 1:
- CONTEXT |= GBREG->getPixel(w - 1, h);
- CONTEXT |= GBREG->getPixel(w - 2, h) << 1;
- CONTEXT |= GBREG->getPixel(w - 3, h) << 2;
- CONTEXT |= GBREG->getPixel(w + GBAT[0], h + GBAT[1]) << 3;
- CONTEXT |= GBREG->getPixel(w + 2, h - 1) << 4;
- CONTEXT |= GBREG->getPixel(w + 1, h - 1) << 5;
- CONTEXT |= GBREG->getPixel(w, h - 1) << 6;
- CONTEXT |= GBREG->getPixel(w - 1, h - 1) << 7;
- CONTEXT |= GBREG->getPixel(w - 2, h - 1) << 8;
- CONTEXT |= GBREG->getPixel(w + 2, h - 2) << 9;
- CONTEXT |= GBREG->getPixel(w + 1, h - 2) << 10;
- CONTEXT |= GBREG->getPixel(w, h - 2) << 11;
- CONTEXT |= GBREG->getPixel(w - 1, h - 2) << 12;
- break;
- case 2:
- CONTEXT |= GBREG->getPixel(w - 1, h);
- CONTEXT |= GBREG->getPixel(w - 2, h) << 1;
- CONTEXT |= GBREG->getPixel(w + GBAT[0], h + GBAT[1]) << 2;
- CONTEXT |= GBREG->getPixel(w + 1, h - 1) << 3;
- CONTEXT |= GBREG->getPixel(w, h - 1) << 4;
- CONTEXT |= GBREG->getPixel(w - 1, h - 1) << 5;
- CONTEXT |= GBREG->getPixel(w - 2, h - 1) << 6;
- CONTEXT |= GBREG->getPixel(w + 1, h - 2) << 7;
- CONTEXT |= GBREG->getPixel(w, h - 2) << 8;
- CONTEXT |= GBREG->getPixel(w - 1, h - 2) << 9;
- break;
- case 3:
- CONTEXT |= GBREG->getPixel(w - 1, h);
- CONTEXT |= GBREG->getPixel(w - 2, h) << 1;
- CONTEXT |= GBREG->getPixel(w - 3, h) << 2;
- CONTEXT |= GBREG->getPixel(w - 4, h) << 3;
- CONTEXT |= GBREG->getPixel(w + GBAT[0], h + GBAT[1]) << 4;
- CONTEXT |= GBREG->getPixel(w + 1, h - 1) << 5;
- CONTEXT |= GBREG->getPixel(w, h - 1) << 6;
- CONTEXT |= GBREG->getPixel(w - 1, h - 1) << 7;
- CONTEXT |= GBREG->getPixel(w - 2, h - 1) << 8;
- CONTEXT |= GBREG->getPixel(w - 3, h - 1) << 9;
- break;
- }
- bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
- GBREG->setPixel(w, h, bVal);
- }
+ line1 = ((line1 << 1) | GBREG->getPixel(w + 2, h - 2)) & 0x07;
+ line2 = ((line2 << 1) | GBREG->getPixel(w + 3, h - 1)) & 0x1f;
+ line3 = ((line3 << 1) | bVal) & 0x0f;
+ }
+ } break;
+ case 1: {
+ line1 = GBREG->getPixel(2, h - 2);
+ line1 |= GBREG->getPixel(1, h - 2) << 1;
+ line1 |= GBREG->getPixel(0, h - 2) << 2;
+ line2 = GBREG->getPixel(2, h - 1);
+ line2 |= GBREG->getPixel(1, h - 1) << 1;
+ line2 |= GBREG->getPixel(0, h - 1) << 2;
+ line3 = 0;
+ for (FX_DWORD w = 0; w < GBW; w++) {
+ if (USESKIP && SKIP->getPixel(w, h)) {
+ bVal = 0;
+ } else {
+ CONTEXT = line3;
+ CONTEXT |= GBREG->getPixel(w + GBAT[0], h + GBAT[1]) << 3;
+ CONTEXT |= line2 << 4;
+ CONTEXT |= line1 << 9;
+ bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
}
- }
+ if (bVal) {
+ GBREG->setPixel(w, h, bVal);
+ }
+ line1 = ((line1 << 1) | GBREG->getPixel(w + 3, h - 2)) & 0x0f;
+ line2 = ((line2 << 1) | GBREG->getPixel(w + 3, h - 1)) & 0x1f;
+ line3 = ((line3 << 1) | bVal) & 0x07;
+ }
+ } break;
+ case 2: {
+ line1 = GBREG->getPixel(1, h - 2);
+ line1 |= GBREG->getPixel(0, h - 2) << 1;
+ line2 = GBREG->getPixel(1, h - 1);
+ line2 |= GBREG->getPixel(0, h - 1) << 1;
+ line3 = 0;
+ for (FX_DWORD w = 0; w < GBW; w++) {
+ if (USESKIP && SKIP->getPixel(w, h)) {
+ bVal = 0;
+ } else {
+ CONTEXT = line3;
+ CONTEXT |= GBREG->getPixel(w + GBAT[0], h + GBAT[1]) << 2;
+ CONTEXT |= line2 << 3;
+ CONTEXT |= line1 << 7;
+ bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
+ }
+ if (bVal) {
+ GBREG->setPixel(w, h, bVal);
+ }
+ line1 = ((line1 << 1) | GBREG->getPixel(w + 2, h - 2)) & 0x07;
+ line2 = ((line2 << 1) | GBREG->getPixel(w + 2, h - 1)) & 0x0f;
+ line3 = ((line3 << 1) | bVal) & 0x03;
+ }
+ } break;
+ case 3: {
+ line1 = GBREG->getPixel(1, h - 1);
+ line1 |= GBREG->getPixel(0, h - 1) << 1;
+ line2 = 0;
+ for (FX_DWORD w = 0; w < GBW; w++) {
+ if (USESKIP && SKIP->getPixel(w, h)) {
+ bVal = 0;
+ } else {
+ CONTEXT = line2;
+ CONTEXT |= GBREG->getPixel(w + GBAT[0], h + GBAT[1]) << 4;
+ CONTEXT |= line1 << 5;
+ bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
+ }
+ if (bVal) {
+ GBREG->setPixel(w, h, bVal);
+ }
+ line1 = ((line1 << 1) | GBREG->getPixel(w + 2, h - 1)) & 0x1f;
+ line2 = ((line2 << 1) | bVal) & 0x0f;
+ }
+ } break;
+ }
}
- return GBREG;
+ }
+ return GBREG;
}
-CJBig2_Image *CJBig2_GRDProc::decode_MMR(CJBig2_BitStream *pStream)
-{
- int bitpos, i;
- CJBig2_Image *pImage;
- JBIG2_ALLOC(pImage, CJBig2_Image(GBW, GBH));
- if (pImage->m_pData == NULL) {
- delete pImage;
- m_pModule->JBig2_Error("Generic region decoding procedure: Create Image Failed with width = %d, height = %d\n", GBW, GBH);
- return NULL;
+CJBig2_Image* CJBig2_GRDProc::decode_Arith_V1(
+ CJBig2_ArithDecoder* pArithDecoder,
+ JBig2ArithCtx* gbContext) {
+ FX_BOOL LTP, SLTP, bVal;
+ FX_DWORD CONTEXT = 0;
+ CJBig2_Image* GBREG;
+ LTP = 0;
+ JBIG2_ALLOC(GBREG, CJBig2_Image(GBW, GBH));
+ GBREG->fill(0);
+ for (FX_DWORD h = 0; h < GBH; h++) {
+ if (TPGDON) {
+ switch (GBTEMPLATE) {
+ case 0:
+ CONTEXT = 0x9b25;
+ break;
+ case 1:
+ CONTEXT = 0x0795;
+ break;
+ case 2:
+ CONTEXT = 0x00e5;
+ break;
+ case 3:
+ CONTEXT = 0x0195;
+ break;
+ }
+ SLTP = pArithDecoder->DECODE(&gbContext[CONTEXT]);
+ LTP = LTP ^ SLTP;
}
- bitpos = (int)pStream->getBitPos();
- _FaxG4Decode(m_pModule, pStream->getBuf(), pStream->getLength(), &bitpos, pImage->m_pData, GBW, GBH, pImage->m_nStride);
- pStream->setBitPos(bitpos);
- for(i = 0; (FX_DWORD)i < pImage->m_nStride * GBH; i++) {
- pImage->m_pData[i] = ~pImage->m_pData[i];
+ if (LTP == 1) {
+ for (FX_DWORD w = 0; w < GBW; w++) {
+ GBREG->setPixel(w, h, GBREG->getPixel(w, h - 1));
+ }
+ } else {
+ for (FX_DWORD w = 0; w < GBW; w++) {
+ if (USESKIP && SKIP->getPixel(w, h)) {
+ GBREG->setPixel(w, h, 0);
+ } else {
+ CONTEXT = 0;
+ switch (GBTEMPLATE) {
+ case 0:
+ CONTEXT |= GBREG->getPixel(w - 1, h);
+ CONTEXT |= GBREG->getPixel(w - 2, h) << 1;
+ CONTEXT |= GBREG->getPixel(w - 3, h) << 2;
+ CONTEXT |= GBREG->getPixel(w - 4, h) << 3;
+ CONTEXT |= GBREG->getPixel(w + GBAT[0], h + GBAT[1]) << 4;
+ CONTEXT |= GBREG->getPixel(w + 2, h - 1) << 5;
+ CONTEXT |= GBREG->getPixel(w + 1, h - 1) << 6;
+ CONTEXT |= GBREG->getPixel(w, h - 1) << 7;
+ CONTEXT |= GBREG->getPixel(w - 1, h - 1) << 8;
+ CONTEXT |= GBREG->getPixel(w - 2, h - 1) << 9;
+ CONTEXT |= GBREG->getPixel(w + GBAT[2], h + GBAT[3]) << 10;
+ CONTEXT |= GBREG->getPixel(w + GBAT[4], h + GBAT[5]) << 11;
+ CONTEXT |= GBREG->getPixel(w + 1, h - 2) << 12;
+ CONTEXT |= GBREG->getPixel(w, h - 2) << 13;
+ CONTEXT |= GBREG->getPixel(w - 1, h - 2) << 14;
+ CONTEXT |= GBREG->getPixel(w + GBAT[6], h + GBAT[7]) << 15;
+ break;
+ case 1:
+ CONTEXT |= GBREG->getPixel(w - 1, h);
+ CONTEXT |= GBREG->getPixel(w - 2, h) << 1;
+ CONTEXT |= GBREG->getPixel(w - 3, h) << 2;
+ CONTEXT |= GBREG->getPixel(w + GBAT[0], h + GBAT[1]) << 3;
+ CONTEXT |= GBREG->getPixel(w + 2, h - 1) << 4;
+ CONTEXT |= GBREG->getPixel(w + 1, h - 1) << 5;
+ CONTEXT |= GBREG->getPixel(w, h - 1) << 6;
+ CONTEXT |= GBREG->getPixel(w - 1, h - 1) << 7;
+ CONTEXT |= GBREG->getPixel(w - 2, h - 1) << 8;
+ CONTEXT |= GBREG->getPixel(w + 2, h - 2) << 9;
+ CONTEXT |= GBREG->getPixel(w + 1, h - 2) << 10;
+ CONTEXT |= GBREG->getPixel(w, h - 2) << 11;
+ CONTEXT |= GBREG->getPixel(w - 1, h - 2) << 12;
+ break;
+ case 2:
+ CONTEXT |= GBREG->getPixel(w - 1, h);
+ CONTEXT |= GBREG->getPixel(w - 2, h) << 1;
+ CONTEXT |= GBREG->getPixel(w + GBAT[0], h + GBAT[1]) << 2;
+ CONTEXT |= GBREG->getPixel(w + 1, h - 1) << 3;
+ CONTEXT |= GBREG->getPixel(w, h - 1) << 4;
+ CONTEXT |= GBREG->getPixel(w - 1, h - 1) << 5;
+ CONTEXT |= GBREG->getPixel(w - 2, h - 1) << 6;
+ CONTEXT |= GBREG->getPixel(w + 1, h - 2) << 7;
+ CONTEXT |= GBREG->getPixel(w, h - 2) << 8;
+ CONTEXT |= GBREG->getPixel(w - 1, h - 2) << 9;
+ break;
+ case 3:
+ CONTEXT |= GBREG->getPixel(w - 1, h);
+ CONTEXT |= GBREG->getPixel(w - 2, h) << 1;
+ CONTEXT |= GBREG->getPixel(w - 3, h) << 2;
+ CONTEXT |= GBREG->getPixel(w - 4, h) << 3;
+ CONTEXT |= GBREG->getPixel(w + GBAT[0], h + GBAT[1]) << 4;
+ CONTEXT |= GBREG->getPixel(w + 1, h - 1) << 5;
+ CONTEXT |= GBREG->getPixel(w, h - 1) << 6;
+ CONTEXT |= GBREG->getPixel(w - 1, h - 1) << 7;
+ CONTEXT |= GBREG->getPixel(w - 2, h - 1) << 8;
+ CONTEXT |= GBREG->getPixel(w - 3, h - 1) << 9;
+ break;
+ }
+ bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
+ GBREG->setPixel(w, h, bVal);
+ }
+ }
}
+ }
+ return GBREG;
+}
+CJBig2_Image* CJBig2_GRDProc::decode_MMR(CJBig2_BitStream* pStream) {
+ int bitpos, i;
+ CJBig2_Image* pImage;
+ JBIG2_ALLOC(pImage, CJBig2_Image(GBW, GBH));
+ if (pImage->m_pData == NULL) {
+ delete pImage;
+ m_pModule->JBig2_Error(
+ "Generic region decoding procedure: Create Image Failed with width = "
+ "%d, height = %d\n",
+ GBW, GBH);
+ return NULL;
+ }
+ bitpos = (int)pStream->getBitPos();
+ _FaxG4Decode(m_pModule, pStream->getBuf(), pStream->getLength(), &bitpos,
+ pImage->m_pData, GBW, GBH, pImage->m_nStride);
+ pStream->setBitPos(bitpos);
+ for (i = 0; (FX_DWORD)i < pImage->m_nStride * GBH; i++) {
+ pImage->m_pData[i] = ~pImage->m_pData[i];
+ }
+ return pImage;
+}
+CJBig2_Image* CJBig2_GRRDProc::decode(CJBig2_ArithDecoder* pArithDecoder,
+ JBig2ArithCtx* grContext) {
+ if (GRW == 0 || GRH == 0) {
+ CJBig2_Image* pImage;
+ JBIG2_ALLOC(pImage, CJBig2_Image(GRW, GRH));
return pImage;
+ }
+ if (GRTEMPLATE == 0) {
+ if ((GRAT[0] == (signed char)-1) && (GRAT[1] == (signed char)-1) &&
+ (GRAT[2] == (signed char)-1) && (GRAT[3] == (signed char)-1) &&
+ (GRREFERENCEDX == 0) && (GRW == (FX_DWORD)GRREFERENCE->m_nWidth)) {
+ return decode_Template0_opt(pArithDecoder, grContext);
+ } else {
+ return decode_Template0_unopt(pArithDecoder, grContext);
+ }
+ } else {
+ if ((GRREFERENCEDX == 0) && (GRW == (FX_DWORD)GRREFERENCE->m_nWidth)) {
+ return decode_Template1_opt(pArithDecoder, grContext);
+ } else {
+ return decode_Template1_unopt(pArithDecoder, grContext);
+ }
+ }
}
-CJBig2_Image *CJBig2_GRRDProc::decode(CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *grContext)
-{
- if (GRW == 0 || GRH == 0) {
- CJBig2_Image* pImage;
- JBIG2_ALLOC(pImage, CJBig2_Image(GRW, GRH));
- return pImage;
+CJBig2_Image* CJBig2_GRRDProc::decode_Template0_unopt(
+ CJBig2_ArithDecoder* pArithDecoder,
+ JBig2ArithCtx* grContext) {
+ FX_BOOL LTP, SLTP, bVal;
+ FX_DWORD CONTEXT;
+ CJBig2_Image* GRREG;
+ FX_DWORD line1, line2, line3, line4, line5;
+ LTP = 0;
+ JBIG2_ALLOC(GRREG, CJBig2_Image(GRW, GRH));
+ GRREG->fill(0);
+ for (FX_DWORD h = 0; h < GRH; h++) {
+ if (TPGRON) {
+ SLTP = pArithDecoder->DECODE(&grContext[0x0010]);
+ LTP = LTP ^ SLTP;
}
- if(GRTEMPLATE == 0) {
- if((GRAT[0] == (signed char) - 1) && (GRAT[1] == (signed char) - 1)
- && (GRAT[2] == (signed char) - 1) && (GRAT[3] == (signed char) - 1)
- && (GRREFERENCEDX == 0) && (GRW == (FX_DWORD)GRREFERENCE->m_nWidth)) {
- return decode_Template0_opt(pArithDecoder, grContext);
- } else {
- return decode_Template0_unopt(pArithDecoder, grContext);
- }
+ if (LTP == 0) {
+ line1 = GRREG->getPixel(1, h - 1);
+ line1 |= GRREG->getPixel(0, h - 1) << 1;
+ line2 = 0;
+ line3 = GRREFERENCE->getPixel(-GRREFERENCEDX + 1, h - GRREFERENCEDY - 1);
+ line3 |= GRREFERENCE->getPixel(-GRREFERENCEDX, h - GRREFERENCEDY - 1)
+ << 1;
+ line4 = GRREFERENCE->getPixel(-GRREFERENCEDX + 1, h - GRREFERENCEDY);
+ line4 |= GRREFERENCE->getPixel(-GRREFERENCEDX, h - GRREFERENCEDY) << 1;
+ line4 |= GRREFERENCE->getPixel(-GRREFERENCEDX - 1, h - GRREFERENCEDY)
+ << 2;
+ line5 = GRREFERENCE->getPixel(-GRREFERENCEDX + 1, h - GRREFERENCEDY + 1);
+ line5 |= GRREFERENCE->getPixel(-GRREFERENCEDX, h - GRREFERENCEDY + 1)
+ << 1;
+ line5 |= GRREFERENCE->getPixel(-GRREFERENCEDX - 1, h - GRREFERENCEDY + 1)
+ << 2;
+ for (FX_DWORD w = 0; w < GRW; w++) {
+ CONTEXT = line5;
+ CONTEXT |= line4 << 3;
+ CONTEXT |= line3 << 6;
+ CONTEXT |= GRREFERENCE->getPixel(w - GRREFERENCEDX + GRAT[2],
+ h - GRREFERENCEDY + GRAT[3])
+ << 8;
+ CONTEXT |= line2 << 9;
+ CONTEXT |= line1 << 10;
+ CONTEXT |= GRREG->getPixel(w + GRAT[0], h + GRAT[1]) << 12;
+ bVal = pArithDecoder->DECODE(&grContext[CONTEXT]);
+ GRREG->setPixel(w, h, bVal);
+ line1 = ((line1 << 1) | GRREG->getPixel(w + 2, h - 1)) & 0x03;
+ line2 = ((line2 << 1) | bVal) & 0x01;
+ line3 = ((line3 << 1) |
+ GRREFERENCE->getPixel(w - GRREFERENCEDX + 2,
+ h - GRREFERENCEDY - 1)) &
+ 0x03;
+ line4 =
+ ((line4 << 1) |
+ GRREFERENCE->getPixel(w - GRREFERENCEDX + 2, h - GRREFERENCEDY)) &
+ 0x07;
+ line5 = ((line5 << 1) |
+ GRREFERENCE->getPixel(w - GRREFERENCEDX + 2,
+ h - GRREFERENCEDY + 1)) &
+ 0x07;
+ }
} else {
- if((GRREFERENCEDX == 0) && (GRW == (FX_DWORD)GRREFERENCE->m_nWidth)) {
- return decode_Template1_opt(pArithDecoder, grContext);
- } else {
- return decode_Template1_unopt(pArithDecoder, grContext);
+ line1 = GRREG->getPixel(1, h - 1);
+ line1 |= GRREG->getPixel(0, h - 1) << 1;
+ line2 = 0;
+ line3 = GRREFERENCE->getPixel(-GRREFERENCEDX + 1, h - GRREFERENCEDY - 1);
+ line3 |= GRREFERENCE->getPixel(-GRREFERENCEDX, h - GRREFERENCEDY - 1)
+ << 1;
+ line4 = GRREFERENCE->getPixel(-GRREFERENCEDX + 1, h - GRREFERENCEDY);
+ line4 |= GRREFERENCE->getPixel(-GRREFERENCEDX, h - GRREFERENCEDY) << 1;
+ line4 |= GRREFERENCE->getPixel(-GRREFERENCEDX - 1, h - GRREFERENCEDY)
+ << 2;
+ line5 = GRREFERENCE->getPixel(-GRREFERENCEDX + 1, h - GRREFERENCEDY + 1);
+ line5 |= GRREFERENCE->getPixel(-GRREFERENCEDX, h - GRREFERENCEDY + 1)
+ << 1;
+ line5 |= GRREFERENCE->getPixel(-GRREFERENCEDX - 1, h - GRREFERENCEDY + 1)
+ << 2;
+ for (FX_DWORD w = 0; w < GRW; w++) {
+ bVal = GRREFERENCE->getPixel(w, h);
+ if (!(TPGRON && (bVal == GRREFERENCE->getPixel(w - 1, h - 1)) &&
+ (bVal == GRREFERENCE->getPixel(w, h - 1)) &&
+ (bVal == GRREFERENCE->getPixel(w + 1, h - 1)) &&
+ (bVal == GRREFERENCE->getPixel(w - 1, h)) &&
+ (bVal == GRREFERENCE->getPixel(w + 1, h)) &&
+ (bVal == GRREFERENCE->getPixel(w - 1, h + 1)) &&
+ (bVal == GRREFERENCE->getPixel(w, h + 1)) &&
+ (bVal == GRREFERENCE->getPixel(w + 1, h + 1)))) {
+ CONTEXT = line5;
+ CONTEXT |= line4 << 3;
+ CONTEXT |= line3 << 6;
+ CONTEXT |= GRREFERENCE->getPixel(w - GRREFERENCEDX + GRAT[2],
+ h - GRREFERENCEDY + GRAT[3])
+ << 8;
+ CONTEXT |= line2 << 9;
+ CONTEXT |= line1 << 10;
+ CONTEXT |= GRREG->getPixel(w + GRAT[0], h + GRAT[1]) << 12;
+ bVal = pArithDecoder->DECODE(&grContext[CONTEXT]);
}
+ GRREG->setPixel(w, h, bVal);
+ line1 = ((line1 << 1) | GRREG->getPixel(w + 2, h - 1)) & 0x03;
+ line2 = ((line2 << 1) | bVal) & 0x01;
+ line3 = ((line3 << 1) |
+ GRREFERENCE->getPixel(w - GRREFERENCEDX + 2,
+ h - GRREFERENCEDY - 1)) &
+ 0x03;
+ line4 =
+ ((line4 << 1) |
+ GRREFERENCE->getPixel(w - GRREFERENCEDX + 2, h - GRREFERENCEDY)) &
+ 0x07;
+ line5 = ((line5 << 1) |
+ GRREFERENCE->getPixel(w - GRREFERENCEDX + 2,
+ h - GRREFERENCEDY + 1)) &
+ 0x07;
+ }
}
+ }
+ return GRREG;
}
-CJBig2_Image *CJBig2_GRRDProc::decode_Template0_unopt(CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *grContext)
-{
- FX_BOOL LTP, SLTP, bVal;
- FX_DWORD CONTEXT;
- CJBig2_Image *GRREG;
- FX_DWORD line1, line2, line3, line4, line5;
- LTP = 0;
- JBIG2_ALLOC(GRREG, CJBig2_Image(GRW, GRH));
- GRREG->fill(0);
- for(FX_DWORD h = 0; h < GRH; h++) {
- if(TPGRON) {
- SLTP = pArithDecoder->DECODE(&grContext[0x0010]);
- LTP = LTP ^ SLTP;
- }
- if(LTP == 0) {
- line1 = GRREG->getPixel(1, h - 1);
- line1 |= GRREG->getPixel(0, h - 1) << 1;
- line2 = 0;
- line3 = GRREFERENCE->getPixel(-GRREFERENCEDX + 1, h - GRREFERENCEDY - 1);
- line3 |= GRREFERENCE->getPixel(-GRREFERENCEDX, h - GRREFERENCEDY - 1) << 1;
- line4 = GRREFERENCE->getPixel(-GRREFERENCEDX + 1, h - GRREFERENCEDY);
- line4 |= GRREFERENCE->getPixel(-GRREFERENCEDX, h - GRREFERENCEDY) << 1;
- line4 |= GRREFERENCE->getPixel(-GRREFERENCEDX - 1, h - GRREFERENCEDY) << 2;
- line5 = GRREFERENCE->getPixel(-GRREFERENCEDX + 1, h - GRREFERENCEDY + 1);
- line5 |= GRREFERENCE->getPixel(-GRREFERENCEDX, h - GRREFERENCEDY + 1) << 1;
- line5 |= GRREFERENCE->getPixel(-GRREFERENCEDX - 1, h - GRREFERENCEDY + 1) << 2;
- for(FX_DWORD w = 0; w < GRW; w++) {
- CONTEXT = line5;
- CONTEXT |= line4 << 3;
- CONTEXT |= line3 << 6;
- CONTEXT |= GRREFERENCE->getPixel(w - GRREFERENCEDX + GRAT[2], h - GRREFERENCEDY + GRAT[3]) << 8;
- CONTEXT |= line2 << 9;
- CONTEXT |= line1 << 10;
- CONTEXT |= GRREG->getPixel(w + GRAT[0], h + GRAT[1]) << 12;
- bVal = pArithDecoder->DECODE(&grContext[CONTEXT]);
- GRREG->setPixel(w, h, bVal);
- line1 = ((line1 << 1) | GRREG->getPixel(w + 2, h - 1)) & 0x03;
- line2 = ((line2 << 1) | bVal) & 0x01;
- line3 = ((line3 << 1) | GRREFERENCE->getPixel(w - GRREFERENCEDX + 2, h - GRREFERENCEDY - 1)) & 0x03;
- line4 = ((line4 << 1) | GRREFERENCE->getPixel(w - GRREFERENCEDX + 2, h - GRREFERENCEDY)) & 0x07;
- line5 = ((line5 << 1) | GRREFERENCE->getPixel(w - GRREFERENCEDX + 2, h - GRREFERENCEDY + 1)) & 0x07;
- }
+CJBig2_Image* CJBig2_GRRDProc::decode_Template0_opt(
+ CJBig2_ArithDecoder* pArithDecoder,
+ JBig2ArithCtx* grContext) {
+ FX_BOOL LTP, SLTP, bVal;
+ FX_DWORD CONTEXT;
+ CJBig2_Image* GRREG;
+ FX_DWORD line1, line1_r, line2_r, line3_r;
+ uint8_t *pLine, *pLineR, cVal;
+ intptr_t nStride, nStrideR, nOffset;
+ int32_t k, nBits;
+ int32_t GRWR, GRHR;
+ int32_t GRW, GRH;
+ GRW = (int32_t)CJBig2_GRRDProc::GRW;
+ GRH = (int32_t)CJBig2_GRRDProc::GRH;
+ LTP = 0;
+ JBIG2_ALLOC(GRREG, CJBig2_Image(GRW, GRH));
+ if (GRREG->m_pData == NULL) {
+ delete GRREG;
+ m_pModule->JBig2_Error(
+ "Generic refinement region decoding procedure: Create Image Failed "
+ "with width = %d, height = %d\n",
+ GRW, GRH);
+ return NULL;
+ }
+ pLine = GRREG->m_pData;
+ pLineR = GRREFERENCE->m_pData;
+ nStride = GRREG->m_nStride;
+ nStrideR = GRREFERENCE->m_nStride;
+ GRWR = (int32_t)GRREFERENCE->m_nWidth;
+ GRHR = (int32_t)GRREFERENCE->m_nHeight;
+ if (GRREFERENCEDY < -GRHR + 1 || GRREFERENCEDY > GRHR - 1) {
+ GRREFERENCEDY = 0;
+ }
+ nOffset = -GRREFERENCEDY * nStrideR;
+ for (int32_t h = 0; h < GRH; h++) {
+ if (TPGRON) {
+ SLTP = pArithDecoder->DECODE(&grContext[0x0010]);
+ LTP = LTP ^ SLTP;
+ }
+ line1 = (h > 0) ? pLine[-nStride] << 4 : 0;
+ int32_t reference_h = h - GRREFERENCEDY;
+ FX_BOOL line1_r_ok = (reference_h > 0 && reference_h < GRHR + 1);
+ FX_BOOL line2_r_ok = (reference_h > -1 && reference_h < GRHR);
+ FX_BOOL line3_r_ok = (reference_h > -2 && reference_h < GRHR - 1);
+ line1_r = line1_r_ok ? pLineR[nOffset - nStrideR] : 0;
+ line2_r = line2_r_ok ? pLineR[nOffset] : 0;
+ line3_r = line3_r_ok ? pLineR[nOffset + nStrideR] : 0;
+ if (LTP == 0) {
+ CONTEXT = (line1 & 0x1c00) | (line1_r & 0x01c0) |
+ ((line2_r >> 3) & 0x0038) | ((line3_r >> 6) & 0x0007);
+ for (int32_t w = 0; w < GRW; w += 8) {
+ nBits = GRW - w > 8 ? 8 : GRW - w;
+ if (h > 0)
+ line1 = (line1 << 8) |
+ (w + 8 < GRW ? pLine[-nStride + (w >> 3) + 1] << 4 : 0);
+ if (h > GRHR + GRREFERENCEDY + 1) {
+ line1_r = 0;
+ line2_r = 0;
+ line3_r = 0;
} else {
- line1 = GRREG->getPixel(1, h - 1);
- line1 |= GRREG->getPixel(0, h - 1) << 1;
- line2 = 0;
- line3 = GRREFERENCE->getPixel(-GRREFERENCEDX + 1, h - GRREFERENCEDY - 1);
- line3 |= GRREFERENCE->getPixel(-GRREFERENCEDX, h - GRREFERENCEDY - 1) << 1;
- line4 = GRREFERENCE->getPixel(-GRREFERENCEDX + 1, h - GRREFERENCEDY);
- line4 |= GRREFERENCE->getPixel(-GRREFERENCEDX, h - GRREFERENCEDY) << 1;
- line4 |= GRREFERENCE->getPixel(-GRREFERENCEDX - 1, h - GRREFERENCEDY) << 2;
- line5 = GRREFERENCE->getPixel(-GRREFERENCEDX + 1, h - GRREFERENCEDY + 1);
- line5 |= GRREFERENCE->getPixel(-GRREFERENCEDX, h - GRREFERENCEDY + 1) << 1;
- line5 |= GRREFERENCE->getPixel(-GRREFERENCEDX - 1, h - GRREFERENCEDY + 1) << 2;
- for(FX_DWORD w = 0; w < GRW; w++) {
- bVal = GRREFERENCE->getPixel(w, h);
- if(!(TPGRON && (bVal == GRREFERENCE->getPixel(w - 1, h - 1))
- && (bVal == GRREFERENCE->getPixel(w, h - 1))
- && (bVal == GRREFERENCE->getPixel(w + 1, h - 1))
- && (bVal == GRREFERENCE->getPixel(w - 1, h))
- && (bVal == GRREFERENCE->getPixel(w + 1, h))
- && (bVal == GRREFERENCE->getPixel(w - 1, h + 1))
- && (bVal == GRREFERENCE->getPixel(w, h + 1))
- && (bVal == GRREFERENCE->getPixel(w + 1, h + 1)))) {
- CONTEXT = line5;
- CONTEXT |= line4 << 3;
- CONTEXT |= line3 << 6;
- CONTEXT |= GRREFERENCE->getPixel(w - GRREFERENCEDX + GRAT[2], h - GRREFERENCEDY + GRAT[3]) << 8;
- CONTEXT |= line2 << 9;
- CONTEXT |= line1 << 10;
- CONTEXT |= GRREG->getPixel(w + GRAT[0], h + GRAT[1]) << 12;
- bVal = pArithDecoder->DECODE(&grContext[CONTEXT]);
- }
- GRREG->setPixel(w, h, bVal);
- line1 = ((line1 << 1) | GRREG->getPixel(w + 2, h - 1)) & 0x03;
- line2 = ((line2 << 1) | bVal) & 0x01;
- line3 = ((line3 << 1) | GRREFERENCE->getPixel(w - GRREFERENCEDX + 2, h - GRREFERENCEDY - 1)) & 0x03;
- line4 = ((line4 << 1) | GRREFERENCE->getPixel(w - GRREFERENCEDX + 2, h - GRREFERENCEDY)) & 0x07;
- line5 = ((line5 << 1) | GRREFERENCE->getPixel(w - GRREFERENCEDX + 2, h - GRREFERENCEDY + 1)) & 0x07;
- }
+ if (line1_r_ok)
+ line1_r =
+ (line1_r << 8) |
+ (w + 8 < GRWR ? pLineR[nOffset - nStrideR + (w >> 3) + 1] : 0);
+ if (line2_r_ok)
+ line2_r = (line2_r << 8) |
+ (w + 8 < GRWR ? pLineR[nOffset + (w >> 3) + 1] : 0);
+ if (line3_r_ok)
+ line3_r =
+ (line3_r << 8) |
+ (w + 8 < GRWR ? pLineR[nOffset + nStrideR + (w >> 3) + 1] : 0);
+ else {
+ line3_r = 0;
+ }
}
+ cVal = 0;
+ for (k = 0; k < nBits; k++) {
+ bVal = pArithDecoder->DECODE(&grContext[CONTEXT]);
+ cVal |= bVal << (7 - k);
+ CONTEXT = ((CONTEXT & 0x0cdb) << 1) | (bVal << 9) |
+ ((line1 >> (7 - k)) & 0x0400) |
+ ((line1_r >> (7 - k)) & 0x0040) |
+ ((line2_r >> (10 - k)) & 0x0008) |
+ ((line3_r >> (13 - k)) & 0x0001);
+ }
+ pLine[w >> 3] = cVal;
+ }
+ } else {
+ CONTEXT = (line1 & 0x1c00) | (line1_r & 0x01c0) |
+ ((line2_r >> 3) & 0x0038) | ((line3_r >> 6) & 0x0007);
+ for (int32_t w = 0; w < GRW; w += 8) {
+ nBits = GRW - w > 8 ? 8 : GRW - w;
+ if (h > 0)
+ line1 = (line1 << 8) |
+ (w + 8 < GRW ? pLine[-nStride + (w >> 3) + 1] << 4 : 0);
+ if (line1_r_ok)
+ line1_r =
+ (line1_r << 8) |
+ (w + 8 < GRWR ? pLineR[nOffset - nStrideR + (w >> 3) + 1] : 0);
+ if (line2_r_ok)
+ line2_r = (line2_r << 8) |
+ (w + 8 < GRWR ? pLineR[nOffset + (w >> 3) + 1] : 0);
+ if (line3_r_ok)
+ line3_r =
+ (line3_r << 8) |
+ (w + 8 < GRWR ? pLineR[nOffset + nStrideR + (w >> 3) + 1] : 0);
+ else {
+ line3_r = 0;
+ }
+ cVal = 0;
+ for (k = 0; k < nBits; k++) {
+ bVal = GRREFERENCE->getPixel(w + k, h);
+ if (!(TPGRON && (bVal == GRREFERENCE->getPixel(w + k - 1, h - 1)) &&
+ (bVal == GRREFERENCE->getPixel(w + k, h - 1)) &&
+ (bVal == GRREFERENCE->getPixel(w + k + 1, h - 1)) &&
+ (bVal == GRREFERENCE->getPixel(w + k - 1, h)) &&
+ (bVal == GRREFERENCE->getPixel(w + k + 1, h)) &&
+ (bVal == GRREFERENCE->getPixel(w + k - 1, h + 1)) &&
+ (bVal == GRREFERENCE->getPixel(w + k, h + 1)) &&
+ (bVal == GRREFERENCE->getPixel(w + k + 1, h + 1)))) {
+ bVal = pArithDecoder->DECODE(&grContext[CONTEXT]);
+ }
+ cVal |= bVal << (7 - k);
+ CONTEXT = ((CONTEXT & 0x0cdb) << 1) | (bVal << 9) |
+ ((line1 >> (7 - k)) & 0x0400) |
+ ((line1_r >> (7 - k)) & 0x0040) |
+ ((line2_r >> (10 - k)) & 0x0008) |
+ ((line3_r >> (13 - k)) & 0x0001);
+ }
+ pLine[w >> 3] = cVal;
+ }
}
- return GRREG;
+ pLine += nStride;
+ if (h < GRHR + GRREFERENCEDY) {
+ pLineR += nStrideR;
+ }
+ }
+ return GRREG;
}
-CJBig2_Image *CJBig2_GRRDProc::decode_Template0_opt(CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *grContext)
-{
- FX_BOOL LTP, SLTP, bVal;
- FX_DWORD CONTEXT;
- CJBig2_Image *GRREG;
- FX_DWORD line1, line1_r, line2_r, line3_r;
- uint8_t *pLine, *pLineR, cVal;
- intptr_t nStride, nStrideR, nOffset;
- int32_t k, nBits;
- int32_t GRWR, GRHR;
- int32_t GRW, GRH;
- GRW = (int32_t)CJBig2_GRRDProc::GRW;
- GRH = (int32_t)CJBig2_GRRDProc::GRH;
- LTP = 0;
- JBIG2_ALLOC(GRREG, CJBig2_Image(GRW, GRH));
- if (GRREG->m_pData == NULL) {
- delete GRREG;
- m_pModule->JBig2_Error("Generic refinement region decoding procedure: Create Image Failed with width = %d, height = %d\n", GRW, GRH);
- return NULL;
+CJBig2_Image* CJBig2_GRRDProc::decode_Template1_unopt(
+ CJBig2_ArithDecoder* pArithDecoder,
+ JBig2ArithCtx* grContext) {
+ FX_BOOL LTP, SLTP, bVal;
+ FX_DWORD CONTEXT;
+ CJBig2_Image* GRREG;
+ FX_DWORD line1, line2, line3, line4, line5;
+ LTP = 0;
+ JBIG2_ALLOC(GRREG, CJBig2_Image(GRW, GRH));
+ GRREG->fill(0);
+ for (FX_DWORD h = 0; h < GRH; h++) {
+ if (TPGRON) {
+ SLTP = pArithDecoder->DECODE(&grContext[0x0008]);
+ LTP = LTP ^ SLTP;
+ }
+ if (LTP == 0) {
+ line1 = GRREG->getPixel(1, h - 1);
+ line1 |= GRREG->getPixel(0, h - 1) << 1;
+ line1 |= GRREG->getPixel(-1, h - 1) << 2;
+ line2 = 0;
+ line3 = GRREFERENCE->getPixel(-GRREFERENCEDX, h - GRREFERENCEDY - 1);
+ line4 = GRREFERENCE->getPixel(-GRREFERENCEDX + 1, h - GRREFERENCEDY);
+ line4 |= GRREFERENCE->getPixel(-GRREFERENCEDX, h - GRREFERENCEDY) << 1;
+ line4 |= GRREFERENCE->getPixel(-GRREFERENCEDX - 1, h - GRREFERENCEDY)
+ << 2;
+ line5 = GRREFERENCE->getPixel(-GRREFERENCEDX + 1, h - GRREFERENCEDY + 1);
+ line5 |= GRREFERENCE->getPixel(-GRREFERENCEDX, h - GRREFERENCEDY + 1)
+ << 1;
+ for (FX_DWORD w = 0; w < GRW; w++) {
+ CONTEXT = line5;
+ CONTEXT |= line4 << 2;
+ CONTEXT |= line3 << 5;
+ CONTEXT |= line2 << 6;
+ CONTEXT |= line1 << 7;
+ bVal = pArithDecoder->DECODE(&grContext[CONTEXT]);
+ GRREG->setPixel(w, h, bVal);
+ line1 = ((line1 << 1) | GRREG->getPixel(w + 2, h - 1)) & 0x07;
+ line2 = ((line2 << 1) | bVal) & 0x01;
+ line3 = ((line3 << 1) |
+ GRREFERENCE->getPixel(w - GRREFERENCEDX + 1,
+ h - GRREFERENCEDY - 1)) &
+ 0x01;
+ line4 =
+ ((line4 << 1) |
+ GRREFERENCE->getPixel(w - GRREFERENCEDX + 2, h - GRREFERENCEDY)) &
+ 0x07;
+ line5 = ((line5 << 1) |
+ GRREFERENCE->getPixel(w - GRREFERENCEDX + 2,
+ h - GRREFERENCEDY + 1)) &
+ 0x03;
+ }
+ } else {
+ line1 = GRREG->getPixel(1, h - 1);
+ line1 |= GRREG->getPixel(0, h - 1) << 1;
+ line1 |= GRREG->getPixel(-1, h - 1) << 2;
+ line2 = 0;
+ line3 = GRREFERENCE->getPixel(-GRREFERENCEDX, h - GRREFERENCEDY - 1);
+ line4 = GRREFERENCE->getPixel(-GRREFERENCEDX + 1, h - GRREFERENCEDY);
+ line4 |= GRREFERENCE->getPixel(-GRREFERENCEDX, h - GRREFERENCEDY) << 1;
+ line4 |= GRREFERENCE->getPixel(-GRREFERENCEDX - 1, h - GRREFERENCEDY)
+ << 2;
+ line5 = GRREFERENCE->getPixel(-GRREFERENCEDX + 1, h - GRREFERENCEDY + 1);
+ line5 |= GRREFERENCE->getPixel(-GRREFERENCEDX, h - GRREFERENCEDY + 1)
+ << 1;
+ for (FX_DWORD w = 0; w < GRW; w++) {
+ bVal = GRREFERENCE->getPixel(w, h);
+ if (!(TPGRON && (bVal == GRREFERENCE->getPixel(w - 1, h - 1)) &&
+ (bVal == GRREFERENCE->getPixel(w, h - 1)) &&
+ (bVal == GRREFERENCE->getPixel(w + 1, h - 1)) &&
+ (bVal == GRREFERENCE->getPixel(w - 1, h)) &&
+ (bVal == GRREFERENCE->getPixel(w + 1, h)) &&
+ (bVal == GRREFERENCE->getPixel(w - 1, h + 1)) &&
+ (bVal == GRREFERENCE->getPixel(w, h + 1)) &&
+ (bVal == GRREFERENCE->getPixel(w + 1, h + 1)))) {
+ CONTEXT = line5;
+ CONTEXT |= line4 << 2;
+ CONTEXT |= line3 << 5;
+ CONTEXT |= line2 << 6;
+ CONTEXT |= line1 << 7;
+ bVal = pArithDecoder->DECODE(&grContext[CONTEXT]);
+ }
+ GRREG->setPixel(w, h, bVal);
+ line1 = ((line1 << 1) | GRREG->getPixel(w + 2, h - 1)) & 0x07;
+ line2 = ((line2 << 1) | bVal) & 0x01;
+ line3 = ((line3 << 1) |
+ GRREFERENCE->getPixel(w - GRREFERENCEDX + 1,
+ h - GRREFERENCEDY - 1)) &
+ 0x01;
+ line4 =
+ ((line4 << 1) |
+ GRREFERENCE->getPixel(w - GRREFERENCEDX + 2, h - GRREFERENCEDY)) &
+ 0x07;
+ line5 = ((line5 << 1) |
+ GRREFERENCE->getPixel(w - GRREFERENCEDX + 2,
+ h - GRREFERENCEDY + 1)) &
+ 0x03;
+ }
}
- pLine = GRREG->m_pData;
- pLineR = GRREFERENCE->m_pData;
- nStride = GRREG->m_nStride;
- nStrideR = GRREFERENCE->m_nStride;
- GRWR = (int32_t)GRREFERENCE->m_nWidth;
- GRHR = (int32_t)GRREFERENCE->m_nHeight;
- if (GRREFERENCEDY < -GRHR + 1 || GRREFERENCEDY > GRHR - 1) {
- GRREFERENCEDY = 0;
+ }
+ return GRREG;
+}
+CJBig2_Image* CJBig2_GRRDProc::decode_Template1_opt(
+ CJBig2_ArithDecoder* pArithDecoder,
+ JBig2ArithCtx* grContext) {
+ FX_BOOL LTP, SLTP, bVal;
+ FX_DWORD CONTEXT;
+ CJBig2_Image* GRREG;
+ FX_DWORD line1, line1_r, line2_r, line3_r;
+ uint8_t *pLine, *pLineR, cVal;
+ intptr_t nStride, nStrideR, nOffset;
+ int32_t k, nBits;
+ int32_t GRWR, GRHR;
+ int32_t GRW, GRH;
+ GRW = (int32_t)CJBig2_GRRDProc::GRW;
+ GRH = (int32_t)CJBig2_GRRDProc::GRH;
+ LTP = 0;
+ JBIG2_ALLOC(GRREG, CJBig2_Image(GRW, GRH));
+ if (GRREG->m_pData == NULL) {
+ delete GRREG;
+ m_pModule->JBig2_Error(
+ "Generic refinement region decoding procedure: Create Image Failed "
+ "with width = %d, height = %d\n",
+ GRW, GRH);
+ return NULL;
+ }
+ pLine = GRREG->m_pData;
+ pLineR = GRREFERENCE->m_pData;
+ nStride = GRREG->m_nStride;
+ nStrideR = GRREFERENCE->m_nStride;
+ GRWR = (int32_t)GRREFERENCE->m_nWidth;
+ GRHR = (int32_t)GRREFERENCE->m_nHeight;
+ if (GRREFERENCEDY < -GRHR + 1 || GRREFERENCEDY > GRHR - 1) {
+ GRREFERENCEDY = 0;
+ }
+ nOffset = -GRREFERENCEDY * nStrideR;
+ for (int32_t h = 0; h < GRH; h++) {
+ if (TPGRON) {
+ SLTP = pArithDecoder->DECODE(&grContext[0x0008]);
+ LTP = LTP ^ SLTP;
}
- nOffset = -GRREFERENCEDY * nStrideR;
- for (int32_t h = 0; h < GRH; h++) {
- if(TPGRON) {
- SLTP = pArithDecoder->DECODE(&grContext[0x0010]);
- LTP = LTP ^ SLTP;
+ line1 = (h > 0) ? pLine[-nStride] << 1 : 0;
+ int32_t reference_h = h - GRREFERENCEDY;
+ FX_BOOL line1_r_ok = (reference_h > 0 && reference_h < GRHR + 1);
+ FX_BOOL line2_r_ok = (reference_h > -1 && reference_h < GRHR);
+ FX_BOOL line3_r_ok = (reference_h > -2 && reference_h < GRHR - 1);
+ line1_r = line1_r_ok ? pLineR[nOffset - nStrideR] : 0;
+ line2_r = line2_r_ok ? pLineR[nOffset] : 0;
+ line3_r = line3_r_ok ? pLineR[nOffset + nStrideR] : 0;
+ if (LTP == 0) {
+ CONTEXT = (line1 & 0x0380) | ((line1_r >> 2) & 0x0020) |
+ ((line2_r >> 4) & 0x001c) | ((line3_r >> 6) & 0x0003);
+ for (int32_t w = 0; w < GRW; w += 8) {
+ nBits = GRW - w > 8 ? 8 : GRW - w;
+ if (h > 0)
+ line1 = (line1 << 8) |
+ (w + 8 < GRW ? pLine[-nStride + (w >> 3) + 1] << 1 : 0);
+ if (line1_r_ok)
+ line1_r =
+ (line1_r << 8) |
+ (w + 8 < GRWR ? pLineR[nOffset - nStrideR + (w >> 3) + 1] : 0);
+ if (line2_r_ok)
+ line2_r = (line2_r << 8) |
+ (w + 8 < GRWR ? pLineR[nOffset + (w >> 3) + 1] : 0);
+ if (line3_r_ok)
+ line3_r =
+ (line3_r << 8) |
+ (w + 8 < GRWR ? pLineR[nOffset + nStrideR + (w >> 3) + 1] : 0);
+ else {
+ line3_r = 0;
}
- line1 = (h > 0) ? pLine[-nStride] << 4 : 0;
- int32_t reference_h = h - GRREFERENCEDY;
- FX_BOOL line1_r_ok = (reference_h > 0 && reference_h < GRHR + 1);
- FX_BOOL line2_r_ok = (reference_h > -1 && reference_h < GRHR);
- FX_BOOL line3_r_ok = (reference_h > -2 && reference_h < GRHR - 1);
- line1_r = line1_r_ok ? pLineR[nOffset - nStrideR] : 0;
- line2_r = line2_r_ok ? pLineR[nOffset] : 0;
- line3_r = line3_r_ok ? pLineR[nOffset + nStrideR] : 0;
- if(LTP == 0) {
- CONTEXT = (line1 & 0x1c00) | (line1_r & 0x01c0)
- | ((line2_r >> 3) & 0x0038) | ((line3_r >> 6) & 0x0007);
- for (int32_t w = 0; w < GRW; w += 8) {
- nBits = GRW - w > 8 ? 8 : GRW - w;
- if (h > 0)
- line1 = (line1 << 8) |
- (w + 8 < GRW ? pLine[-nStride + (w >> 3) + 1] << 4 : 0);
- if (h > GRHR + GRREFERENCEDY + 1) {
- line1_r = 0;
- line2_r = 0;
- line3_r = 0;
- } else {
- if(line1_r_ok)
- line1_r = (line1_r << 8) |
- (w + 8 < GRWR ? pLineR[nOffset - nStrideR + (w >> 3) + 1] : 0);
- if(line2_r_ok)
- line2_r = (line2_r << 8) |
- (w + 8 < GRWR ? pLineR[nOffset + (w >> 3) + 1] : 0);
- if(line3_r_ok)
- line3_r = (line3_r << 8) |
- (w + 8 < GRWR ? pLineR[nOffset + nStrideR + (w >> 3) + 1] : 0);
- else {
- line3_r = 0;
- }
- }
- cVal = 0;
- for (k = 0; k < nBits; k++) {
- bVal = pArithDecoder->DECODE(&grContext[CONTEXT]);
- cVal |= bVal << (7 - k);
- CONTEXT = ((CONTEXT & 0x0cdb) << 1) | (bVal << 9) |
- ((line1 >> (7 - k)) & 0x0400) |
- ((line1_r >> (7 - k)) & 0x0040) |
- ((line2_r >> (10 - k)) & 0x0008) |
- ((line3_r >> (13 - k)) & 0x0001);
- }
- pLine[w >> 3] = cVal;
- }
- } else {
- CONTEXT = (line1 & 0x1c00) | (line1_r & 0x01c0)
- | ((line2_r >> 3) & 0x0038) | ((line3_r >> 6) & 0x0007);
- for (int32_t w = 0; w < GRW; w += 8) {
- nBits = GRW - w > 8 ? 8 : GRW - w;
- if (h > 0)
- line1 = (line1 << 8) |
- (w + 8 < GRW ? pLine[-nStride + (w >> 3) + 1] << 4 : 0);
- if(line1_r_ok)
- line1_r = (line1_r << 8) |
- (w + 8 < GRWR ? pLineR[nOffset - nStrideR + (w >> 3) + 1] : 0);
- if(line2_r_ok)
- line2_r = (line2_r << 8) |
- (w + 8 < GRWR ? pLineR[nOffset + (w >> 3) + 1] : 0);
- if(line3_r_ok)
- line3_r = (line3_r << 8) |
- (w + 8 < GRWR ? pLineR[nOffset + nStrideR + (w >> 3) + 1] : 0);
- else {
- line3_r = 0;
- }
- cVal = 0;
- for (k = 0; k < nBits; k++) {
- bVal = GRREFERENCE->getPixel(w + k, h);
- if(!(TPGRON && (bVal == GRREFERENCE->getPixel(w + k - 1, h - 1))
- && (bVal == GRREFERENCE->getPixel(w + k, h - 1))
- && (bVal == GRREFERENCE->getPixel(w + k + 1, h - 1))
- && (bVal == GRREFERENCE->getPixel(w + k - 1, h))
- && (bVal == GRREFERENCE->getPixel(w + k + 1, h))
- && (bVal == GRREFERENCE->getPixel(w + k - 1, h + 1))
- && (bVal == GRREFERENCE->getPixel(w + k, h + 1))
- && (bVal == GRREFERENCE->getPixel(w + k + 1, h + 1)))) {
- bVal = pArithDecoder->DECODE(&grContext[CONTEXT]);
- }
- cVal |= bVal << (7 - k);
- CONTEXT = ((CONTEXT & 0x0cdb) << 1) | (bVal << 9) |
- ((line1 >> (7 - k)) & 0x0400) |
- ((line1_r >> (7 - k)) & 0x0040) |
- ((line2_r >> (10 - k)) & 0x0008) |
- ((line3_r >> (13 - k)) & 0x0001);
- }
- pLine[w >> 3] = cVal;
- }
+ cVal = 0;
+ for (k = 0; k < nBits; k++) {
+ bVal = pArithDecoder->DECODE(&grContext[CONTEXT]);
+ cVal |= bVal << (7 - k);
+ CONTEXT = ((CONTEXT & 0x018d) << 1) | (bVal << 6) |
+ ((line1 >> (7 - k)) & 0x0080) |
+ ((line1_r >> (9 - k)) & 0x0020) |
+ ((line2_r >> (11 - k)) & 0x0004) |
+ ((line3_r >> (13 - k)) & 0x0001);
+ }
+ pLine[w >> 3] = cVal;
+ }
+ } else {
+ CONTEXT = (line1 & 0x0380) | ((line1_r >> 2) & 0x0020) |
+ ((line2_r >> 4) & 0x001c) | ((line3_r >> 6) & 0x0003);
+ for (int32_t w = 0; w < GRW; w += 8) {
+ nBits = GRW - w > 8 ? 8 : GRW - w;
+ if (h > 0)
+ line1 = (line1 << 8) |
+ (w + 8 < GRW ? pLine[-nStride + (w >> 3) + 1] << 1 : 0);
+ if (line1_r_ok)
+ line1_r =
+ (line1_r << 8) |
+ (w + 8 < GRWR ? pLineR[nOffset - nStrideR + (w >> 3) + 1] : 0);
+ if (line2_r_ok)
+ line2_r = (line2_r << 8) |
+ (w + 8 < GRWR ? pLineR[nOffset + (w >> 3) + 1] : 0);
+ if (line3_r_ok)
+ line3_r =
+ (line3_r << 8) |
+ (w + 8 < GRWR ? pLineR[nOffset + nStrideR + (w >> 3) + 1] : 0);
+ else {
+ line3_r = 0;
}
- pLine += nStride;
- if (h < GRHR + GRREFERENCEDY) {
- pLineR += nStrideR;
+ cVal = 0;
+ for (k = 0; k < nBits; k++) {
+ bVal = GRREFERENCE->getPixel(w + k, h);
+ if (!(TPGRON && (bVal == GRREFERENCE->getPixel(w + k - 1, h - 1)) &&
+ (bVal == GRREFERENCE->getPixel(w + k, h - 1)) &&
+ (bVal == GRREFERENCE->getPixel(w + k + 1, h - 1)) &&
+ (bVal == GRREFERENCE->getPixel(w + k - 1, h)) &&
+ (bVal == GRREFERENCE->getPixel(w + k + 1, h)) &&
+ (bVal == GRREFERENCE->getPixel(w + k - 1, h + 1)) &&
+ (bVal == GRREFERENCE->getPixel(w + k, h + 1)) &&
+ (bVal == GRREFERENCE->getPixel(w + k + 1, h + 1)))) {
+ bVal = pArithDecoder->DECODE(&grContext[CONTEXT]);
+ }
+ cVal |= bVal << (7 - k);
+ CONTEXT = ((CONTEXT & 0x018d) << 1) | (bVal << 6) |
+ ((line1 >> (7 - k)) & 0x0080) |
+ ((line1_r >> (9 - k)) & 0x0020) |
+ ((line2_r >> (11 - k)) & 0x0004) |
+ ((line3_r >> (13 - k)) & 0x0001);
}
+ pLine[w >> 3] = cVal;
+ }
+ }
+ pLine += nStride;
+ if (h < GRHR + GRREFERENCEDY) {
+ pLineR += nStrideR;
}
- return GRREG;
+ }
+ return GRREG;
}
-CJBig2_Image *CJBig2_GRRDProc::decode_Template1_unopt(CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *grContext)
-{
- FX_BOOL LTP, SLTP, bVal;
- FX_DWORD CONTEXT;
- CJBig2_Image *GRREG;
- FX_DWORD line1, line2, line3, line4, line5;
- LTP = 0;
- JBIG2_ALLOC(GRREG, CJBig2_Image(GRW, GRH));
- GRREG->fill(0);
- for(FX_DWORD h = 0; h < GRH; h++) {
- if(TPGRON) {
- SLTP = pArithDecoder->DECODE(&grContext[0x0008]);
- LTP = LTP ^ SLTP;
+CJBig2_Image* CJBig2_GRRDProc::decode_V1(CJBig2_ArithDecoder* pArithDecoder,
+ JBig2ArithCtx* grContext) {
+ FX_BOOL LTP, SLTP, bVal;
+ FX_BOOL TPGRPIX, TPGRVAL;
+ FX_DWORD CONTEXT;
+ CJBig2_Image* GRREG;
+ LTP = 0;
+ JBIG2_ALLOC(GRREG, CJBig2_Image(GRW, GRH));
+ GRREG->fill(0);
+ for (FX_DWORD h = 0; h < GRH; h++) {
+ if (TPGRON) {
+ switch (GRTEMPLATE) {
+ case 0:
+ CONTEXT = 0x0010;
+ break;
+ case 1:
+ CONTEXT = 0x0008;
+ break;
+ }
+ SLTP = pArithDecoder->DECODE(&grContext[CONTEXT]);
+ LTP = LTP ^ SLTP;
+ }
+ if (LTP == 0) {
+ for (FX_DWORD w = 0; w < GRW; w++) {
+ CONTEXT = 0;
+ switch (GRTEMPLATE) {
+ case 0:
+ CONTEXT |= GRREFERENCE->getPixel(w - GRREFERENCEDX + 1,
+ h - GRREFERENCEDY + 1);
+ CONTEXT |=
+ GRREFERENCE->getPixel(w - GRREFERENCEDX, h - GRREFERENCEDY + 1)
+ << 1;
+ CONTEXT |= GRREFERENCE->getPixel(w - GRREFERENCEDX - 1,
+ h - GRREFERENCEDY + 1)
+ << 2;
+ CONTEXT |=
+ GRREFERENCE->getPixel(w - GRREFERENCEDX + 1, h - GRREFERENCEDY)
+ << 3;
+ CONTEXT |=
+ GRREFERENCE->getPixel(w - GRREFERENCEDX, h - GRREFERENCEDY)
+ << 4;
+ CONTEXT |=
+ GRREFERENCE->getPixel(w - GRREFERENCEDX - 1, h - GRREFERENCEDY)
+ << 5;
+ CONTEXT |= GRREFERENCE->getPixel(w - GRREFERENCEDX + 1,
+ h - GRREFERENCEDY - 1)
+ << 6;
+ CONTEXT |=
+ GRREFERENCE->getPixel(w - GRREFERENCEDX, h - GRREFERENCEDY - 1)
+ << 7;
+ CONTEXT |= GRREFERENCE->getPixel(w - GRREFERENCEDX + GRAT[2],
+ h - GRREFERENCEDY + GRAT[3])
+ << 8;
+ CONTEXT |= GRREG->getPixel(w - 1, h) << 9;
+ CONTEXT |= GRREG->getPixel(w + 1, h - 1) << 10;
+ CONTEXT |= GRREG->getPixel(w, h - 1) << 11;
+ CONTEXT |= GRREG->getPixel(w + GRAT[0], h + GRAT[1]) << 12;
+ break;
+ case 1:
+ CONTEXT |= GRREFERENCE->getPixel(w - GRREFERENCEDX + 1,
+ h - GRREFERENCEDY + 1);
+ CONTEXT |=
+ GRREFERENCE->getPixel(w - GRREFERENCEDX, h - GRREFERENCEDY + 1)
+ << 1;
+ CONTEXT |=
+ GRREFERENCE->getPixel(w - GRREFERENCEDX + 1, h - GRREFERENCEDY)
+ << 2;
+ CONTEXT |=
+ GRREFERENCE->getPixel(w - GRREFERENCEDX, h - GRREFERENCEDY)
+ << 3;
+ CONTEXT |=
+ GRREFERENCE->getPixel(w - GRREFERENCEDX - 1, h - GRREFERENCEDY)
+ << 4;
+ CONTEXT |=
+ GRREFERENCE->getPixel(w - GRREFERENCEDX, h - GRREFERENCEDY - 1)
+ << 5;
+ CONTEXT |= GRREG->getPixel(w - 1, h) << 6;
+ CONTEXT |= GRREG->getPixel(w + 1, h - 1) << 7;
+ CONTEXT |= GRREG->getPixel(w, h - 1) << 8;
+ CONTEXT |= GRREG->getPixel(w - 1, h - 1) << 9;
+ break;
}
- if(LTP == 0) {
- line1 = GRREG->getPixel(1, h - 1);
- line1 |= GRREG->getPixel(0, h - 1) << 1;
- line1 |= GRREG->getPixel(-1, h - 1) << 2;
- line2 = 0;
- line3 = GRREFERENCE->getPixel(-GRREFERENCEDX, h - GRREFERENCEDY - 1);
- line4 = GRREFERENCE->getPixel(-GRREFERENCEDX + 1, h - GRREFERENCEDY);
- line4 |= GRREFERENCE->getPixel(-GRREFERENCEDX, h - GRREFERENCEDY) << 1;
- line4 |= GRREFERENCE->getPixel(-GRREFERENCEDX - 1, h - GRREFERENCEDY) << 2;
- line5 = GRREFERENCE->getPixel(-GRREFERENCEDX + 1, h - GRREFERENCEDY + 1);
- line5 |= GRREFERENCE->getPixel(-GRREFERENCEDX, h - GRREFERENCEDY + 1) << 1;
- for(FX_DWORD w = 0; w < GRW; w++) {
- CONTEXT = line5;
- CONTEXT |= line4 << 2;
- CONTEXT |= line3 << 5;
- CONTEXT |= line2 << 6;
- CONTEXT |= line1 << 7;
- bVal = pArithDecoder->DECODE(&grContext[CONTEXT]);
- GRREG->setPixel(w, h, bVal);
- line1 = ((line1 << 1) | GRREG->getPixel(w + 2, h - 1)) & 0x07;
- line2 = ((line2 << 1) | bVal) & 0x01;
- line3 = ((line3 << 1) | GRREFERENCE->getPixel(w - GRREFERENCEDX + 1, h - GRREFERENCEDY - 1)) & 0x01;
- line4 = ((line4 << 1) | GRREFERENCE->getPixel(w - GRREFERENCEDX + 2, h - GRREFERENCEDY)) & 0x07;
- line5 = ((line5 << 1) | GRREFERENCE->getPixel(w - GRREFERENCEDX + 2, h - GRREFERENCEDY + 1)) & 0x03;
- }
+ bVal = pArithDecoder->DECODE(&grContext[CONTEXT]);
+ GRREG->setPixel(w, h, bVal);
+ }
+ } else {
+ for (FX_DWORD w = 0; w < GRW; w++) {
+ bVal = GRREFERENCE->getPixel(w, h);
+ if (TPGRON && (bVal == GRREFERENCE->getPixel(w - 1, h - 1)) &&
+ (bVal == GRREFERENCE->getPixel(w, h - 1)) &&
+ (bVal == GRREFERENCE->getPixel(w + 1, h - 1)) &&
+ (bVal == GRREFERENCE->getPixel(w - 1, h)) &&
+ (bVal == GRREFERENCE->getPixel(w + 1, h)) &&
+ (bVal == GRREFERENCE->getPixel(w - 1, h + 1)) &&
+ (bVal == GRREFERENCE->getPixel(w, h + 1)) &&
+ (bVal == GRREFERENCE->getPixel(w + 1, h + 1))) {
+ TPGRPIX = 1;
+ TPGRVAL = bVal;
} else {
- line1 = GRREG->getPixel(1, h - 1);
- line1 |= GRREG->getPixel(0, h - 1) << 1;
- line1 |= GRREG->getPixel(-1, h - 1) << 2;
- line2 = 0;
- line3 = GRREFERENCE->getPixel(-GRREFERENCEDX, h - GRREFERENCEDY - 1);
- line4 = GRREFERENCE->getPixel(-GRREFERENCEDX + 1, h - GRREFERENCEDY);
- line4 |= GRREFERENCE->getPixel(-GRREFERENCEDX, h - GRREFERENCEDY) << 1;
- line4 |= GRREFERENCE->getPixel(-GRREFERENCEDX - 1, h - GRREFERENCEDY) << 2;
- line5 = GRREFERENCE->getPixel(-GRREFERENCEDX + 1, h - GRREFERENCEDY + 1);
- line5 |= GRREFERENCE->getPixel(-GRREFERENCEDX, h - GRREFERENCEDY + 1) << 1;
- for(FX_DWORD w = 0; w < GRW; w++) {
- bVal = GRREFERENCE->getPixel(w, h);
- if(!(TPGRON && (bVal == GRREFERENCE->getPixel(w - 1, h - 1))
- && (bVal == GRREFERENCE->getPixel(w, h - 1))
- && (bVal == GRREFERENCE->getPixel(w + 1, h - 1))
- && (bVal == GRREFERENCE->getPixel(w - 1, h))
- && (bVal == GRREFERENCE->getPixel(w + 1, h))
- && (bVal == GRREFERENCE->getPixel(w - 1, h + 1))
- && (bVal == GRREFERENCE->getPixel(w, h + 1))
- && (bVal == GRREFERENCE->getPixel(w + 1, h + 1)))) {
- CONTEXT = line5;
- CONTEXT |= line4 << 2;
- CONTEXT |= line3 << 5;
- CONTEXT |= line2 << 6;
- CONTEXT |= line1 << 7;
- bVal = pArithDecoder->DECODE(&grContext[CONTEXT]);
- }
- GRREG->setPixel(w, h, bVal);
- line1 = ((line1 << 1) | GRREG->getPixel(w + 2, h - 1)) & 0x07;
- line2 = ((line2 << 1) | bVal) & 0x01;
- line3 = ((line3 << 1) | GRREFERENCE->getPixel(w - GRREFERENCEDX + 1, h - GRREFERENCEDY - 1)) & 0x01;
- line4 = ((line4 << 1) | GRREFERENCE->getPixel(w - GRREFERENCEDX + 2, h - GRREFERENCEDY)) & 0x07;
- line5 = ((line5 << 1) | GRREFERENCE->getPixel(w - GRREFERENCEDX + 2, h - GRREFERENCEDY + 1)) & 0x03;
- }
+ TPGRPIX = 0;
+ }
+ if (TPGRPIX) {
+ GRREG->setPixel(w, h, TPGRVAL);
+ } else {
+ CONTEXT = 0;
+ switch (GRTEMPLATE) {
+ case 0:
+ CONTEXT |= GRREFERENCE->getPixel(w - GRREFERENCEDX + 1,
+ h - GRREFERENCEDY + 1);
+ CONTEXT |= GRREFERENCE->getPixel(w - GRREFERENCEDX,
+ h - GRREFERENCEDY + 1)
+ << 1;
+ CONTEXT |= GRREFERENCE->getPixel(w - GRREFERENCEDX - 1,
+ h - GRREFERENCEDY + 1)
+ << 2;
+ CONTEXT |= GRREFERENCE->getPixel(w - GRREFERENCEDX + 1,
+ h - GRREFERENCEDY)
+ << 3;
+ CONTEXT |=
+ GRREFERENCE->getPixel(w - GRREFERENCEDX, h - GRREFERENCEDY)
+ << 4;
+ CONTEXT |= GRREFERENCE->getPixel(w - GRREFERENCEDX - 1,
+ h - GRREFERENCEDY)
+ << 5;
+ CONTEXT |= GRREFERENCE->getPixel(w - GRREFERENCEDX + 1,
+ h - GRREFERENCEDY - 1)
+ << 6;
+ CONTEXT |= GRREFERENCE->getPixel(w - GRREFERENCEDX,
+ h - GRREFERENCEDY - 1)
+ << 7;
+ CONTEXT |= GRREFERENCE->getPixel(w - GRREFERENCEDX + GRAT[2],
+ h - GRREFERENCEDY + GRAT[3])
+ << 8;
+ CONTEXT |= GRREG->getPixel(w - 1, h) << 9;
+ CONTEXT |= GRREG->getPixel(w + 1, h - 1) << 10;
+ CONTEXT |= GRREG->getPixel(w, h - 1) << 11;
+ CONTEXT |= GRREG->getPixel(w + GRAT[0], h + GRAT[1]) << 12;
+ break;
+ case 1:
+ CONTEXT |= GRREFERENCE->getPixel(w - GRREFERENCEDX + 1,
+ h - GRREFERENCEDY + 1);
+ CONTEXT |= GRREFERENCE->getPixel(w - GRREFERENCEDX,
+ h - GRREFERENCEDY + 1)
+ << 1;
+ CONTEXT |= GRREFERENCE->getPixel(w - GRREFERENCEDX + 1,
+ h - GRREFERENCEDY)
+ << 2;
+ CONTEXT |=
+ GRREFERENCE->getPixel(w - GRREFERENCEDX, h - GRREFERENCEDY)
+ << 3;
+ CONTEXT |= GRREFERENCE->getPixel(w - GRREFERENCEDX - 1,
+ h - GRREFERENCEDY)
+ << 4;
+ CONTEXT |= GRREFERENCE->getPixel(w - GRREFERENCEDX,
+ h - GRREFERENCEDY - 1)
+ << 5;
+ CONTEXT |= GRREG->getPixel(w - 1, h) << 6;
+ CONTEXT |= GRREG->getPixel(w + 1, h - 1) << 7;
+ CONTEXT |= GRREG->getPixel(w, h - 1) << 8;
+ CONTEXT |= GRREG->getPixel(w - 1, h - 1) << 9;
+ break;
+ }
+ bVal = pArithDecoder->DECODE(&grContext[CONTEXT]);
+ GRREG->setPixel(w, h, bVal);
}
+ }
}
- return GRREG;
+ }
+ return GRREG;
}
-CJBig2_Image *CJBig2_GRRDProc::decode_Template1_opt(CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *grContext)
-{
- FX_BOOL LTP, SLTP, bVal;
- FX_DWORD CONTEXT;
- CJBig2_Image *GRREG;
- FX_DWORD line1, line1_r, line2_r, line3_r;
- uint8_t *pLine, *pLineR, cVal;
- intptr_t nStride, nStrideR, nOffset;
- int32_t k, nBits;
- int32_t GRWR, GRHR;
- int32_t GRW, GRH;
- GRW = (int32_t)CJBig2_GRRDProc::GRW;
- GRH = (int32_t)CJBig2_GRRDProc::GRH;
- LTP = 0;
- JBIG2_ALLOC(GRREG, CJBig2_Image(GRW, GRH));
- if (GRREG->m_pData == NULL) {
- delete GRREG;
- m_pModule->JBig2_Error("Generic refinement region decoding procedure: Create Image Failed with width = %d, height = %d\n", GRW, GRH);
- return NULL;
- }
- pLine = GRREG->m_pData;
- pLineR = GRREFERENCE->m_pData;
- nStride = GRREG->m_nStride;
- nStrideR = GRREFERENCE->m_nStride;
- GRWR = (int32_t)GRREFERENCE->m_nWidth;
- GRHR = (int32_t)GRREFERENCE->m_nHeight;
- if (GRREFERENCEDY < -GRHR + 1 || GRREFERENCEDY > GRHR - 1) {
- GRREFERENCEDY = 0;
+CJBig2_Image* CJBig2_TRDProc::decode_Huffman(CJBig2_BitStream* pStream,
+ JBig2ArithCtx* grContext) {
+ int32_t STRIPT, FIRSTS;
+ FX_DWORD NINSTANCES;
+ int32_t DT, DFS, CURS;
+ uint8_t CURT;
+ int32_t SI, TI;
+ FX_DWORD IDI;
+ CJBig2_Image* IBI;
+ FX_DWORD WI, HI;
+ int32_t IDS;
+ FX_BOOL RI;
+ int32_t RDWI, RDHI, RDXI, RDYI;
+ CJBig2_Image* IBOI;
+ FX_DWORD WOI, HOI;
+ CJBig2_Image* SBREG;
+ FX_BOOL bFirst;
+ FX_DWORD nTmp;
+ int32_t nVal, nBits;
+ CJBig2_HuffmanDecoder* pHuffmanDecoder;
+ CJBig2_GRRDProc* pGRRD;
+ CJBig2_ArithDecoder* pArithDecoder;
+ JBIG2_ALLOC(pHuffmanDecoder, CJBig2_HuffmanDecoder(pStream));
+ JBIG2_ALLOC(SBREG, CJBig2_Image(SBW, SBH));
+ SBREG->fill(SBDEFPIXEL);
+ if (pHuffmanDecoder->decodeAValue(SBHUFFDT, &STRIPT) != 0) {
+ m_pModule->JBig2_Error(
+ "text region decoding procedure (huffman): too short.");
+ goto failed;
+ }
+ STRIPT *= SBSTRIPS;
+ STRIPT = -STRIPT;
+ FIRSTS = 0;
+ NINSTANCES = 0;
+ while (NINSTANCES < SBNUMINSTANCES) {
+ if (pHuffmanDecoder->decodeAValue(SBHUFFDT, &DT) != 0) {
+ m_pModule->JBig2_Error(
+ "text region decoding procedure (huffman): too short.");
+ goto failed;
}
- nOffset = -GRREFERENCEDY * nStrideR;
- for (int32_t h = 0; h < GRH; h++) {
- if(TPGRON) {
- SLTP = pArithDecoder->DECODE(&grContext[0x0008]);
- LTP = LTP ^ SLTP;
+ DT *= SBSTRIPS;
+ STRIPT = STRIPT + DT;
+ bFirst = TRUE;
+ for (;;) {
+ if (bFirst) {
+ if (pHuffmanDecoder->decodeAValue(SBHUFFFS, &DFS) != 0) {
+ m_pModule->JBig2_Error(
+ "text region decoding procedure (huffman): too short.");
+ goto failed;
}
- line1 = (h > 0) ? pLine[-nStride] << 1 : 0;
- int32_t reference_h = h - GRREFERENCEDY;
- FX_BOOL line1_r_ok = (reference_h > 0 && reference_h < GRHR + 1);
- FX_BOOL line2_r_ok = (reference_h > -1 && reference_h < GRHR);
- FX_BOOL line3_r_ok = (reference_h > -2 && reference_h < GRHR - 1);
- line1_r = line1_r_ok ? pLineR[nOffset - nStrideR] : 0;
- line2_r = line2_r_ok ? pLineR[nOffset] : 0;
- line3_r = line3_r_ok ? pLineR[nOffset + nStrideR] : 0;
- if(LTP == 0) {
- CONTEXT = (line1 & 0x0380) | ((line1_r >> 2) & 0x0020)
- | ((line2_r >> 4) & 0x001c) | ((line3_r >> 6) & 0x0003);
- for (int32_t w = 0; w < GRW; w += 8) {
- nBits = GRW - w > 8 ? 8 : GRW - w;
- if (h > 0)
- line1 = (line1 << 8) |
- (w + 8 < GRW ? pLine[-nStride + (w >> 3) + 1] << 1 : 0);
- if(line1_r_ok)
- line1_r = (line1_r << 8) |
- (w + 8 < GRWR ? pLineR[nOffset - nStrideR + (w >> 3) + 1] : 0);
- if(line2_r_ok)
- line2_r = (line2_r << 8) |
- (w + 8 < GRWR ? pLineR[nOffset + (w >> 3) + 1] : 0);
- if(line3_r_ok)
- line3_r = (line3_r << 8) |
- (w + 8 < GRWR ? pLineR[nOffset + nStrideR + (w >> 3) + 1] : 0);
- else {
- line3_r = 0;
- }
- cVal = 0;
- for (k = 0; k < nBits; k++) {
- bVal = pArithDecoder->DECODE(&grContext[CONTEXT]);
- cVal |= bVal << (7 - k);
- CONTEXT = ((CONTEXT & 0x018d) << 1) | (bVal << 6) |
- ((line1 >> (7 - k)) & 0x0080) |
- ((line1_r >> (9 - k)) & 0x0020) |
- ((line2_r >> (11 - k)) & 0x0004) |
- ((line3_r >> (13 - k)) & 0x0001);
- }
- pLine[w >> 3] = cVal;
- }
+ FIRSTS = FIRSTS + DFS;
+ CURS = FIRSTS;
+ bFirst = FALSE;
+ } else {
+ nVal = pHuffmanDecoder->decodeAValue(SBHUFFDS, &IDS);
+ if (nVal == JBIG2_OOB) {
+ break;
+ } else if (nVal != 0) {
+ m_pModule->JBig2_Error(
+ "text region decoding procedure (huffman): too short.");
+ goto failed;
} else {
- CONTEXT = (line1 & 0x0380) | ((line1_r >> 2) & 0x0020)
- | ((line2_r >> 4) & 0x001c) | ((line3_r >> 6) & 0x0003);
- for (int32_t w = 0; w < GRW; w += 8) {
- nBits = GRW - w > 8 ? 8 : GRW - w;
- if (h > 0)
- line1 = (line1 << 8) |
- (w + 8 < GRW ? pLine[-nStride + (w >> 3) + 1] << 1 : 0);
- if(line1_r_ok)
- line1_r = (line1_r << 8) |
- (w + 8 < GRWR ? pLineR[nOffset - nStrideR + (w >> 3) + 1] : 0);
- if(line2_r_ok)
- line2_r = (line2_r << 8) |
- (w + 8 < GRWR ? pLineR[nOffset + (w >> 3) + 1] : 0);
- if(line3_r_ok)
- line3_r = (line3_r << 8) |
- (w + 8 < GRWR ? pLineR[nOffset + nStrideR + (w >> 3) + 1] : 0);
- else {
- line3_r = 0;
- }
- cVal = 0;
- for (k = 0; k < nBits; k++) {
- bVal = GRREFERENCE->getPixel(w + k, h);
- if(!(TPGRON && (bVal == GRREFERENCE->getPixel(w + k - 1, h - 1))
- && (bVal == GRREFERENCE->getPixel(w + k, h - 1))
- && (bVal == GRREFERENCE->getPixel(w + k + 1, h - 1))
- && (bVal == GRREFERENCE->getPixel(w + k - 1, h))
- && (bVal == GRREFERENCE->getPixel(w + k + 1, h))
- && (bVal == GRREFERENCE->getPixel(w + k - 1, h + 1))
- && (bVal == GRREFERENCE->getPixel(w + k, h + 1))
- && (bVal == GRREFERENCE->getPixel(w + k + 1, h + 1)))) {
- bVal = pArithDecoder->DECODE(&grContext[CONTEXT]);
- }
- cVal |= bVal << (7 - k);
- CONTEXT = ((CONTEXT & 0x018d) << 1) | (bVal << 6) |
- ((line1 >> (7 - k)) & 0x0080) |
- ((line1_r >> (9 - k)) & 0x0020) |
- ((line2_r >> (11 - k)) & 0x0004) |
- ((line3_r >> (13 - k)) & 0x0001);
- }
- pLine[w >> 3] = cVal;
- }
+ CURS = CURS + IDS + SBDSOFFSET;
}
- pLine += nStride;
- if (h < GRHR + GRREFERENCEDY) {
- pLineR += nStrideR;
+ }
+ if (SBSTRIPS == 1) {
+ CURT = 0;
+ } else {
+ nTmp = 1;
+ while ((FX_DWORD)(1 << nTmp) < SBSTRIPS) {
+ nTmp++;
}
- }
- return GRREG;
-}
-CJBig2_Image *CJBig2_GRRDProc::decode_V1(CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *grContext)
-{
- FX_BOOL LTP, SLTP, bVal;
- FX_BOOL TPGRPIX, TPGRVAL;
- FX_DWORD CONTEXT;
- CJBig2_Image *GRREG;
- LTP = 0;
- JBIG2_ALLOC(GRREG, CJBig2_Image(GRW, GRH));
- GRREG->fill(0);
- for(FX_DWORD h = 0; h < GRH; h++) {
- if(TPGRON) {
- switch(GRTEMPLATE) {
- case 0:
- CONTEXT = 0x0010;
- break;
- case 1:
- CONTEXT = 0x0008;
- break;
- }
- SLTP = pArithDecoder->DECODE(&grContext[CONTEXT]);
- LTP = LTP ^ SLTP;
+ if (pStream->readNBits(nTmp, &nVal) != 0) {
+ m_pModule->JBig2_Error(
+ "text region decoding procedure (huffman): too short.");
+ goto failed;
}
- if(LTP == 0) {
- for(FX_DWORD w = 0; w < GRW; w++) {
- CONTEXT = 0;
- switch(GRTEMPLATE) {
- case 0:
- CONTEXT |= GRREFERENCE->getPixel(w - GRREFERENCEDX + 1, h - GRREFERENCEDY + 1);
- CONTEXT |= GRREFERENCE->getPixel(w - GRREFERENCEDX, h - GRREFERENCEDY + 1) << 1;
- CONTEXT |= GRREFERENCE->getPixel(w - GRREFERENCEDX - 1, h - GRREFERENCEDY + 1) << 2;
- CONTEXT |= GRREFERENCE->getPixel(w - GRREFERENCEDX + 1, h - GRREFERENCEDY) << 3;
- CONTEXT |= GRREFERENCE->getPixel(w - GRREFERENCEDX, h - GRREFERENCEDY) << 4;
- CONTEXT |= GRREFERENCE->getPixel(w - GRREFERENCEDX - 1, h - GRREFERENCEDY) << 5;
- CONTEXT |= GRREFERENCE->getPixel(w - GRREFERENCEDX + 1, h - GRREFERENCEDY - 1) << 6;
- CONTEXT |= GRREFERENCE->getPixel(w - GRREFERENCEDX, h - GRREFERENCEDY - 1) << 7;
- CONTEXT |= GRREFERENCE->getPixel(w - GRREFERENCEDX + GRAT[2], h - GRREFERENCEDY + GRAT[3]) << 8;
- CONTEXT |= GRREG->getPixel(w - 1, h) << 9;
- CONTEXT |= GRREG->getPixel(w + 1, h - 1) << 10;
- CONTEXT |= GRREG->getPixel(w, h - 1) << 11;
- CONTEXT |= GRREG->getPixel(w + GRAT[0], h + GRAT[1]) << 12;
- break;
- case 1:
- CONTEXT |= GRREFERENCE->getPixel(w - GRREFERENCEDX + 1, h - GRREFERENCEDY + 1);
- CONTEXT |= GRREFERENCE->getPixel(w - GRREFERENCEDX, h - GRREFERENCEDY + 1) << 1;
- CONTEXT |= GRREFERENCE->getPixel(w - GRREFERENCEDX + 1, h - GRREFERENCEDY) << 2;
- CONTEXT |= GRREFERENCE->getPixel(w - GRREFERENCEDX, h - GRREFERENCEDY) << 3;
- CONTEXT |= GRREFERENCE->getPixel(w - GRREFERENCEDX - 1, h - GRREFERENCEDY) << 4;
- CONTEXT |= GRREFERENCE->getPixel(w - GRREFERENCEDX, h - GRREFERENCEDY - 1) << 5;
- CONTEXT |= GRREG->getPixel(w - 1, h) << 6;
- CONTEXT |= GRREG->getPixel(w + 1, h - 1) << 7;
- CONTEXT |= GRREG->getPixel(w, h - 1) << 8;
- CONTEXT |= GRREG->getPixel(w - 1, h - 1) << 9;
- break;
- }
- bVal = pArithDecoder->DECODE(&grContext[CONTEXT]);
- GRREG->setPixel(w, h, bVal);
- }
- } else {
- for(FX_DWORD w = 0; w < GRW; w++) {
- bVal = GRREFERENCE->getPixel(w, h);
- if(TPGRON && (bVal == GRREFERENCE->getPixel(w - 1, h - 1))
- && (bVal == GRREFERENCE->getPixel(w, h - 1))
- && (bVal == GRREFERENCE->getPixel(w + 1, h - 1))
- && (bVal == GRREFERENCE->getPixel(w - 1, h))
- && (bVal == GRREFERENCE->getPixel(w + 1, h))
- && (bVal == GRREFERENCE->getPixel(w - 1, h + 1))
- && (bVal == GRREFERENCE->getPixel(w, h + 1))
- && (bVal == GRREFERENCE->getPixel(w + 1, h + 1))) {
- TPGRPIX = 1;
- TPGRVAL = bVal;
- } else {
- TPGRPIX = 0;
- }
- if(TPGRPIX) {
- GRREG->setPixel(w, h, TPGRVAL);
- } else {
- CONTEXT = 0;
- switch(GRTEMPLATE) {
- case 0:
- CONTEXT |= GRREFERENCE->getPixel(w - GRREFERENCEDX + 1, h - GRREFERENCEDY + 1);
- CONTEXT |= GRREFERENCE->getPixel(w - GRREFERENCEDX, h - GRREFERENCEDY + 1) << 1;
- CONTEXT |= GRREFERENCE->getPixel(w - GRREFERENCEDX - 1, h - GRREFERENCEDY + 1) << 2;
- CONTEXT |= GRREFERENCE->getPixel(w - GRREFERENCEDX + 1, h - GRREFERENCEDY) << 3;
- CONTEXT |= GRREFERENCE->getPixel(w - GRREFERENCEDX, h - GRREFERENCEDY) << 4;
- CONTEXT |= GRREFERENCE->getPixel(w - GRREFERENCEDX - 1, h - GRREFERENCEDY) << 5;
- CONTEXT |= GRREFERENCE->getPixel(w - GRREFERENCEDX + 1, h - GRREFERENCEDY - 1) << 6;
- CONTEXT |= GRREFERENCE->getPixel(w - GRREFERENCEDX, h - GRREFERENCEDY - 1) << 7;
- CONTEXT |= GRREFERENCE->getPixel(w - GRREFERENCEDX + GRAT[2], h - GRREFERENCEDY + GRAT[3]) << 8;
- CONTEXT |= GRREG->getPixel(w - 1, h) << 9;
- CONTEXT |= GRREG->getPixel(w + 1, h - 1) << 10;
- CONTEXT |= GRREG->getPixel(w, h - 1) << 11;
- CONTEXT |= GRREG->getPixel(w + GRAT[0], h + GRAT[1]) << 12;
- break;
- case 1:
- CONTEXT |= GRREFERENCE->getPixel(w - GRREFERENCEDX + 1, h - GRREFERENCEDY + 1);
- CONTEXT |= GRREFERENCE->getPixel(w - GRREFERENCEDX, h - GRREFERENCEDY + 1) << 1;
- CONTEXT |= GRREFERENCE->getPixel(w - GRREFERENCEDX + 1, h - GRREFERENCEDY) << 2;
- CONTEXT |= GRREFERENCE->getPixel(w - GRREFERENCEDX, h - GRREFERENCEDY) << 3;
- CONTEXT |= GRREFERENCE->getPixel(w - GRREFERENCEDX - 1, h - GRREFERENCEDY) << 4;
- CONTEXT |= GRREFERENCE->getPixel(w - GRREFERENCEDX, h - GRREFERENCEDY - 1) << 5;
- CONTEXT |= GRREG->getPixel(w - 1, h) << 6;
- CONTEXT |= GRREG->getPixel(w + 1, h - 1) << 7;
- CONTEXT |= GRREG->getPixel(w, h - 1) << 8;
- CONTEXT |= GRREG->getPixel(w - 1, h - 1) << 9;
- break;
- }
- bVal = pArithDecoder->DECODE(&grContext[CONTEXT]);
- GRREG->setPixel(w, h, bVal);
- }
- }
+ CURT = nVal;
+ }
+ TI = STRIPT + CURT;
+ nVal = 0;
+ nBits = 0;
+ for (;;) {
+ if (pStream->read1Bit(&nTmp) != 0) {
+ m_pModule->JBig2_Error(
+ "text region decoding procedure (huffman): too short.");
+ goto failed;
}
- }
- return GRREG;
-}
-CJBig2_Image *CJBig2_TRDProc::decode_Huffman(CJBig2_BitStream *pStream, JBig2ArithCtx *grContext)
-{
- int32_t STRIPT, FIRSTS;
- FX_DWORD NINSTANCES;
- int32_t DT, DFS, CURS;
- uint8_t CURT;
- int32_t SI, TI;
- FX_DWORD IDI;
- CJBig2_Image *IBI;
- FX_DWORD WI, HI;
- int32_t IDS;
- FX_BOOL RI;
- int32_t RDWI, RDHI, RDXI, RDYI;
- CJBig2_Image *IBOI;
- FX_DWORD WOI, HOI;
- CJBig2_Image *SBREG;
- FX_BOOL bFirst;
- FX_DWORD nTmp;
- int32_t nVal, nBits;
- CJBig2_HuffmanDecoder *pHuffmanDecoder;
- CJBig2_GRRDProc *pGRRD;
- CJBig2_ArithDecoder *pArithDecoder;
- JBIG2_ALLOC(pHuffmanDecoder, CJBig2_HuffmanDecoder(pStream));
- JBIG2_ALLOC(SBREG, CJBig2_Image(SBW, SBH));
- SBREG->fill(SBDEFPIXEL);
- if(pHuffmanDecoder->decodeAValue(SBHUFFDT, &STRIPT) != 0) {
- m_pModule->JBig2_Error("text region decoding procedure (huffman): too short.");
- goto failed;
- }
- STRIPT *= SBSTRIPS;
- STRIPT = -STRIPT;
- FIRSTS = 0;
- NINSTANCES = 0;
- while(NINSTANCES < SBNUMINSTANCES) {
- if(pHuffmanDecoder->decodeAValue(SBHUFFDT, &DT) != 0) {
- m_pModule->JBig2_Error("text region decoding procedure (huffman): too short.");
- goto failed;
+ nVal = (nVal << 1) | nTmp;
+ nBits++;
+ for (IDI = 0; IDI < SBNUMSYMS; IDI++) {
+ if ((nBits == SBSYMCODES[IDI].codelen) &&
+ (nVal == SBSYMCODES[IDI].code)) {
+ break;
+ }
}
- DT *= SBSTRIPS;
- STRIPT = STRIPT + DT;
- bFirst = TRUE;
- for(;;) {
- if(bFirst) {
- if(pHuffmanDecoder->decodeAValue(SBHUFFFS, &DFS) != 0) {
- m_pModule->JBig2_Error("text region decoding procedure (huffman): too short.");
- goto failed;
- }
- FIRSTS = FIRSTS + DFS;
- CURS = FIRSTS;
- bFirst = FALSE;
- } else {
- nVal = pHuffmanDecoder->decodeAValue(SBHUFFDS, &IDS);
- if(nVal == JBIG2_OOB) {
- break;
- } else if(nVal != 0) {
- m_pModule->JBig2_Error("text region decoding procedure (huffman): too short.");
- goto failed;
- } else {
- CURS = CURS + IDS + SBDSOFFSET;
- }
- }
- if(SBSTRIPS == 1) {
- CURT = 0;
- } else {
- nTmp = 1;
- while((FX_DWORD)(1 << nTmp) < SBSTRIPS) {
- nTmp ++;
- }
- if(pStream->readNBits(nTmp, &nVal) != 0) {
- m_pModule->JBig2_Error("text region decoding procedure (huffman): too short.");
- goto failed;
- }
- CURT = nVal;
- }
- TI = STRIPT + CURT;
- nVal = 0;
- nBits = 0;
- for(;;) {
- if(pStream->read1Bit(&nTmp) != 0) {
- m_pModule->JBig2_Error("text region decoding procedure (huffman): too short.");
- goto failed;
- }
- nVal = (nVal << 1) | nTmp;
- nBits ++;
- for(IDI = 0; IDI < SBNUMSYMS; IDI++) {
- if((nBits == SBSYMCODES[IDI].codelen) && (nVal == SBSYMCODES[IDI].code)) {
- break;
- }
- }
- if(IDI < SBNUMSYMS) {
- break;
- }
- }
- if(SBREFINE == 0) {
- RI = 0;
- } else {
- if(pStream->read1Bit(&RI) != 0) {
- m_pModule->JBig2_Error("text region decoding procedure (huffman): too short.");
- goto failed;
- }
- }
- if(RI == 0) {
- IBI = SBSYMS[IDI];
- } else {
- if((pHuffmanDecoder->decodeAValue(SBHUFFRDW, &RDWI) != 0)
- || (pHuffmanDecoder->decodeAValue(SBHUFFRDH, &RDHI) != 0)
- || (pHuffmanDecoder->decodeAValue(SBHUFFRDX, &RDXI) != 0)
- || (pHuffmanDecoder->decodeAValue(SBHUFFRDY, &RDYI) != 0)
- || (pHuffmanDecoder->decodeAValue(SBHUFFRSIZE, &nVal) != 0)) {
- m_pModule->JBig2_Error("text region decoding procedure (huffman): too short.");
- goto failed;
- }
- pStream->alignByte();
- nTmp = pStream->getOffset();
- IBOI = SBSYMS[IDI];
- if (!IBOI) {
- goto failed;
- }
- WOI = IBOI->m_nWidth;
- HOI = IBOI->m_nHeight;
- if ((int)(WOI + RDWI) < 0 || (int)(HOI + RDHI) < 0) {
- m_pModule->JBig2_Error("text region decoding procedure (huffman): Invalid RDWI or RDHI value.");
- goto failed;
- }
- JBIG2_ALLOC(pGRRD, CJBig2_GRRDProc());
- pGRRD->GRW = WOI + RDWI;
- pGRRD->GRH = HOI + RDHI;
- pGRRD->GRTEMPLATE = SBRTEMPLATE;
- pGRRD->GRREFERENCE = IBOI;
- pGRRD->GRREFERENCEDX = (RDWI >> 2) + RDXI;
- pGRRD->GRREFERENCEDY = (RDHI >> 2) + RDYI;
- pGRRD->TPGRON = 0;
- pGRRD->GRAT[0] = SBRAT[0];
- pGRRD->GRAT[1] = SBRAT[1];
- pGRRD->GRAT[2] = SBRAT[2];
- pGRRD->GRAT[3] = SBRAT[3];
- JBIG2_ALLOC(pArithDecoder, CJBig2_ArithDecoder(pStream));
- IBI = pGRRD->decode(pArithDecoder, grContext);
- if(IBI == NULL) {
- delete pGRRD;
- delete pArithDecoder;
- goto failed;
- }
- delete pArithDecoder;
- pStream->alignByte();
- pStream->offset(2);
- if((FX_DWORD)nVal != (pStream->getOffset() - nTmp)) {
- delete IBI;
- delete pGRRD;
- m_pModule->JBig2_Error("text region decoding procedure (huffman):"
- "bytes processed by generic refinement region decoding procedure doesn't equal SBHUFFRSIZE.");
- goto failed;
- }
- delete pGRRD;
- }
- if (!IBI) {
- continue;
- }
- WI = IBI->m_nWidth;
- HI = IBI->m_nHeight;
- if(TRANSPOSED == 0 && ((REFCORNER == JBIG2_CORNER_TOPRIGHT)
- || (REFCORNER == JBIG2_CORNER_BOTTOMRIGHT))) {
- CURS = CURS + WI - 1;
- } else if(TRANSPOSED == 1 && ((REFCORNER == JBIG2_CORNER_BOTTOMLEFT)
- || (REFCORNER == JBIG2_CORNER_BOTTOMRIGHT))) {
- CURS = CURS + HI - 1;
- }
- SI = CURS;
- if(TRANSPOSED == 0) {
- switch(REFCORNER) {
- case JBIG2_CORNER_TOPLEFT:
- SBREG->composeFrom(SI, TI, IBI, SBCOMBOP);
- break;
- case JBIG2_CORNER_TOPRIGHT:
- SBREG->composeFrom(SI - WI + 1, TI, IBI, SBCOMBOP);
- break;
- case JBIG2_CORNER_BOTTOMLEFT:
- SBREG->composeFrom(SI, TI - HI + 1, IBI, SBCOMBOP);
- break;
- case JBIG2_CORNER_BOTTOMRIGHT:
- SBREG->composeFrom(SI - WI + 1, TI - HI + 1, IBI, SBCOMBOP);
- break;
- }
- } else {
- switch(REFCORNER) {
- case JBIG2_CORNER_TOPLEFT:
- SBREG->composeFrom(TI, SI, IBI, SBCOMBOP);
- break;
- case JBIG2_CORNER_TOPRIGHT:
- SBREG->composeFrom(TI - WI + 1, SI, IBI, SBCOMBOP);
- break;
- case JBIG2_CORNER_BOTTOMLEFT:
- SBREG->composeFrom(TI, SI - HI + 1, IBI, SBCOMBOP);
- break;
- case JBIG2_CORNER_BOTTOMRIGHT:
- SBREG->composeFrom(TI - WI + 1, SI - HI + 1, IBI, SBCOMBOP);
- break;
- }
- }
- if(RI != 0) {
- delete IBI;
- }
- if(TRANSPOSED == 0 && ((REFCORNER == JBIG2_CORNER_TOPLEFT)
- || (REFCORNER == JBIG2_CORNER_BOTTOMLEFT))) {
- CURS = CURS + WI - 1;
- } else if(TRANSPOSED == 1 && ((REFCORNER == JBIG2_CORNER_TOPLEFT)
- || (REFCORNER == JBIG2_CORNER_TOPRIGHT))) {
- CURS = CURS + HI - 1;
- }
- NINSTANCES = NINSTANCES + 1;
+ if (IDI < SBNUMSYMS) {
+ break;
}
- }
- delete pHuffmanDecoder;
- return SBREG;
-failed:
- delete pHuffmanDecoder;
- delete SBREG;
- return NULL;
-}
-CJBig2_Image *CJBig2_TRDProc::decode_Arith(CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *grContext,
- JBig2IntDecoderState *pIDS)
-{
- int32_t STRIPT, FIRSTS;
- FX_DWORD NINSTANCES;
- int32_t DT, DFS, CURS;
- int32_t CURT;
- int32_t SI, TI;
- FX_DWORD IDI;
- CJBig2_Image *IBI;
- FX_DWORD WI, HI;
- int32_t IDS;
- int RI;
- int32_t RDWI, RDHI, RDXI, RDYI;
- CJBig2_Image *IBOI;
- FX_DWORD WOI, HOI;
- CJBig2_Image *SBREG;
- FX_BOOL bFirst;
- int32_t nRet, nVal;
- int32_t bRetained;
- CJBig2_ArithIntDecoder *IADT, *IAFS, *IADS, *IAIT, *IARI, *IARDW, *IARDH, *IARDX, *IARDY;
- CJBig2_ArithIaidDecoder *IAID;
- CJBig2_GRRDProc *pGRRD;
- if(pIDS) {
- IADT = pIDS->IADT;
- IAFS = pIDS->IAFS;
- IADS = pIDS->IADS;
- IAIT = pIDS->IAIT;
- IARI = pIDS->IARI;
- IARDW = pIDS->IARDW;
- IARDH = pIDS->IARDH;
- IARDX = pIDS->IARDX;
- IARDY = pIDS->IARDY;
- IAID = pIDS->IAID;
- bRetained = TRUE;
- } else {
- JBIG2_ALLOC(IADT, CJBig2_ArithIntDecoder());
- JBIG2_ALLOC(IAFS, CJBig2_ArithIntDecoder());
- JBIG2_ALLOC(IADS, CJBig2_ArithIntDecoder());
- JBIG2_ALLOC(IAIT, CJBig2_ArithIntDecoder());
- JBIG2_ALLOC(IARI, CJBig2_ArithIntDecoder());
- JBIG2_ALLOC(IARDW, CJBig2_ArithIntDecoder());
- JBIG2_ALLOC(IARDH, CJBig2_ArithIntDecoder());
- JBIG2_ALLOC(IARDX, CJBig2_ArithIntDecoder());
- JBIG2_ALLOC(IARDY, CJBig2_ArithIntDecoder());
- JBIG2_ALLOC(IAID , CJBig2_ArithIaidDecoder(SBSYMCODELEN));
- bRetained = FALSE;
- }
- JBIG2_ALLOC(SBREG, CJBig2_Image(SBW, SBH));
- SBREG->fill(SBDEFPIXEL);
- if(IADT->decode(pArithDecoder, &STRIPT) == -1) {
- m_pModule->JBig2_Error("text region decoding procedure (arith): too short.");
- goto failed;
- }
- STRIPT *= SBSTRIPS;
- STRIPT = -STRIPT;
- FIRSTS = 0;
- NINSTANCES = 0;
- while(NINSTANCES < SBNUMINSTANCES) {
- if(IADT->decode(pArithDecoder, &DT) == -1) {
- m_pModule->JBig2_Error("text region decoding procedure (arith): too short.");
- goto failed;
+ }
+ if (SBREFINE == 0) {
+ RI = 0;
+ } else {
+ if (pStream->read1Bit(&RI) != 0) {
+ m_pModule->JBig2_Error(
+ "text region decoding procedure (huffman): too short.");
+ goto failed;
}
- DT *= SBSTRIPS;
- STRIPT = STRIPT + DT;
- bFirst = TRUE;
- for(;;) {
- if(bFirst) {
- if(IAFS->decode(pArithDecoder, &DFS) == -1) {
- m_pModule->JBig2_Error("text region decoding procedure (arith): too short.");
- goto failed;
- }
- FIRSTS = FIRSTS + DFS;
- CURS = FIRSTS;
- bFirst = FALSE;
- } else {
- nRet = IADS->decode(pArithDecoder, &IDS);
- if(nRet == JBIG2_OOB) {
- break;
- } else if(nRet != 0) {
- m_pModule->JBig2_Error("text region decoding procedure (arith): too short.");
- goto failed;
- } else {
- CURS = CURS + IDS + SBDSOFFSET;
- }
- }
- if (NINSTANCES >= SBNUMINSTANCES) {
- break;
- }
- if(SBSTRIPS == 1) {
- CURT = 0;
- } else {
- if(IAIT->decode(pArithDecoder, &nVal) == -1) {
- m_pModule->JBig2_Error("text region decoding procedure (arith): too short.");
- goto failed;
- }
- CURT = nVal;
- }
- TI = STRIPT + CURT;
- if(IAID->decode(pArithDecoder, &nVal) == -1) {
- m_pModule->JBig2_Error("text region decoding procedure (arith): too short.");
- goto failed;
- }
- IDI = nVal;
- if(IDI >= SBNUMSYMS) {
- m_pModule->JBig2_Error("text region decoding procedure (arith): symbol id out of range.(%d/%d)",
- IDI, SBNUMSYMS);
- goto failed;
- }
- if(SBREFINE == 0) {
- RI = 0;
- } else {
- if(IARI->decode(pArithDecoder, &RI) == -1) {
- m_pModule->JBig2_Error("text region decoding procedure (arith): too short.");
- goto failed;
- }
- }
- if (!SBSYMS[IDI]) {
- goto failed;
- }
- if(RI == 0) {
- IBI = SBSYMS[IDI];
- } else {
- if((IARDW->decode(pArithDecoder, &RDWI) == -1)
- || (IARDH->decode(pArithDecoder, &RDHI) == -1)
- || (IARDX->decode(pArithDecoder, &RDXI) == -1)
- || (IARDY->decode(pArithDecoder, &RDYI) == -1)) {
- m_pModule->JBig2_Error("text region decoding procedure (arith): too short.");
- goto failed;
- }
- IBOI = SBSYMS[IDI];
- WOI = IBOI->m_nWidth;
- HOI = IBOI->m_nHeight;
- if ((int)(WOI + RDWI) < 0 || (int)(HOI + RDHI) < 0) {
- m_pModule->JBig2_Error("text region decoding procedure (arith): Invalid RDWI or RDHI value.");
- goto failed;
- }
- JBIG2_ALLOC(pGRRD, CJBig2_GRRDProc());
- pGRRD->GRW = WOI + RDWI;
- pGRRD->GRH = HOI + RDHI;
- pGRRD->GRTEMPLATE = SBRTEMPLATE;
- pGRRD->GRREFERENCE = IBOI;
- pGRRD->GRREFERENCEDX = (RDWI >> 1) + RDXI;
- pGRRD->GRREFERENCEDY = (RDHI >> 1) + RDYI;
- pGRRD->TPGRON = 0;
- pGRRD->GRAT[0] = SBRAT[0];
- pGRRD->GRAT[1] = SBRAT[1];
- pGRRD->GRAT[2] = SBRAT[2];
- pGRRD->GRAT[3] = SBRAT[3];
- IBI = pGRRD->decode(pArithDecoder, grContext);
- if(IBI == NULL) {
- delete pGRRD;
- goto failed;
- }
- delete pGRRD;
- }
- WI = IBI->m_nWidth;
- HI = IBI->m_nHeight;
- if(TRANSPOSED == 0 && ((REFCORNER == JBIG2_CORNER_TOPRIGHT)
- || (REFCORNER == JBIG2_CORNER_BOTTOMRIGHT))) {
- CURS = CURS + WI - 1;
- } else if(TRANSPOSED == 1 && ((REFCORNER == JBIG2_CORNER_BOTTOMLEFT)
- || (REFCORNER == JBIG2_CORNER_BOTTOMRIGHT))) {
- CURS = CURS + HI - 1;
- }
- SI = CURS;
- if(TRANSPOSED == 0) {
- switch(REFCORNER) {
- case JBIG2_CORNER_TOPLEFT:
- SBREG->composeFrom(SI, TI, IBI, SBCOMBOP);
- break;
- case JBIG2_CORNER_TOPRIGHT:
- SBREG->composeFrom(SI - WI + 1, TI, IBI, SBCOMBOP);
- break;
- case JBIG2_CORNER_BOTTOMLEFT:
- SBREG->composeFrom(SI, TI - HI + 1, IBI, SBCOMBOP);
- break;
- case JBIG2_CORNER_BOTTOMRIGHT:
- SBREG->composeFrom(SI - WI + 1, TI - HI + 1, IBI, SBCOMBOP);
- break;
- }
- } else {
- switch(REFCORNER) {
- case JBIG2_CORNER_TOPLEFT:
- SBREG->composeFrom(TI, SI, IBI, SBCOMBOP);
- break;
- case JBIG2_CORNER_TOPRIGHT:
- SBREG->composeFrom(TI - WI + 1, SI, IBI, SBCOMBOP);
- break;
- case JBIG2_CORNER_BOTTOMLEFT:
- SBREG->composeFrom(TI, SI - HI + 1, IBI, SBCOMBOP);
- break;
- case JBIG2_CORNER_BOTTOMRIGHT:
- SBREG->composeFrom(TI - WI + 1, SI - HI + 1, IBI, SBCOMBOP);
- break;
- }
- }
- if(RI != 0) {
- delete IBI;
- }
- if(TRANSPOSED == 0 && ((REFCORNER == JBIG2_CORNER_TOPLEFT)
- || (REFCORNER == JBIG2_CORNER_BOTTOMLEFT))) {
- CURS = CURS + WI - 1;
- } else if(TRANSPOSED == 1 && ((REFCORNER == JBIG2_CORNER_TOPLEFT)
- || (REFCORNER == JBIG2_CORNER_TOPRIGHT))) {
- CURS = CURS + HI - 1;
- }
- NINSTANCES = NINSTANCES + 1;
+ }
+ if (RI == 0) {
+ IBI = SBSYMS[IDI];
+ } else {
+ if ((pHuffmanDecoder->decodeAValue(SBHUFFRDW, &RDWI) != 0) ||
+ (pHuffmanDecoder->decodeAValue(SBHUFFRDH, &RDHI) != 0) ||
+ (pHuffmanDecoder->decodeAValue(SBHUFFRDX, &RDXI) != 0) ||
+ (pHuffmanDecoder->decodeAValue(SBHUFFRDY, &RDYI) != 0) ||
+ (pHuffmanDecoder->decodeAValue(SBHUFFRSIZE, &nVal) != 0)) {
+ m_pModule->JBig2_Error(
+ "text region decoding procedure (huffman): too short.");
+ goto failed;
}
+ pStream->alignByte();
+ nTmp = pStream->getOffset();
+ IBOI = SBSYMS[IDI];
+ if (!IBOI) {
+ goto failed;
+ }
+ WOI = IBOI->m_nWidth;
+ HOI = IBOI->m_nHeight;
+ if ((int)(WOI + RDWI) < 0 || (int)(HOI + RDHI) < 0) {
+ m_pModule->JBig2_Error(
+ "text region decoding procedure (huffman): Invalid RDWI or RDHI "
+ "value.");
+ goto failed;
+ }
+ JBIG2_ALLOC(pGRRD, CJBig2_GRRDProc());
+ pGRRD->GRW = WOI + RDWI;
+ pGRRD->GRH = HOI + RDHI;
+ pGRRD->GRTEMPLATE = SBRTEMPLATE;
+ pGRRD->GRREFERENCE = IBOI;
+ pGRRD->GRREFERENCEDX = (RDWI >> 2) + RDXI;
+ pGRRD->GRREFERENCEDY = (RDHI >> 2) + RDYI;
+ pGRRD->TPGRON = 0;
+ pGRRD->GRAT[0] = SBRAT[0];
+ pGRRD->GRAT[1] = SBRAT[1];
+ pGRRD->GRAT[2] = SBRAT[2];
+ pGRRD->GRAT[3] = SBRAT[3];
+ JBIG2_ALLOC(pArithDecoder, CJBig2_ArithDecoder(pStream));
+ IBI = pGRRD->decode(pArithDecoder, grContext);
+ if (IBI == NULL) {
+ delete pGRRD;
+ delete pArithDecoder;
+ goto failed;
+ }
+ delete pArithDecoder;
+ pStream->alignByte();
+ pStream->offset(2);
+ if ((FX_DWORD)nVal != (pStream->getOffset() - nTmp)) {
+ delete IBI;
+ delete pGRRD;
+ m_pModule->JBig2_Error(
+ "text region decoding procedure (huffman):"
+ "bytes processed by generic refinement region decoding procedure "
+ "doesn't equal SBHUFFRSIZE.");
+ goto failed;
+ }
+ delete pGRRD;
+ }
+ if (!IBI) {
+ continue;
+ }
+ WI = IBI->m_nWidth;
+ HI = IBI->m_nHeight;
+ if (TRANSPOSED == 0 && ((REFCORNER == JBIG2_CORNER_TOPRIGHT) ||
+ (REFCORNER == JBIG2_CORNER_BOTTOMRIGHT))) {
+ CURS = CURS + WI - 1;
+ } else if (TRANSPOSED == 1 && ((REFCORNER == JBIG2_CORNER_BOTTOMLEFT) ||
+ (REFCORNER == JBIG2_CORNER_BOTTOMRIGHT))) {
+ CURS = CURS + HI - 1;
+ }
+ SI = CURS;
+ if (TRANSPOSED == 0) {
+ switch (REFCORNER) {
+ case JBIG2_CORNER_TOPLEFT:
+ SBREG->composeFrom(SI, TI, IBI, SBCOMBOP);
+ break;
+ case JBIG2_CORNER_TOPRIGHT:
+ SBREG->composeFrom(SI - WI + 1, TI, IBI, SBCOMBOP);
+ break;
+ case JBIG2_CORNER_BOTTOMLEFT:
+ SBREG->composeFrom(SI, TI - HI + 1, IBI, SBCOMBOP);
+ break;
+ case JBIG2_CORNER_BOTTOMRIGHT:
+ SBREG->composeFrom(SI - WI + 1, TI - HI + 1, IBI, SBCOMBOP);
+ break;
+ }
+ } else {
+ switch (REFCORNER) {
+ case JBIG2_CORNER_TOPLEFT:
+ SBREG->composeFrom(TI, SI, IBI, SBCOMBOP);
+ break;
+ case JBIG2_CORNER_TOPRIGHT:
+ SBREG->composeFrom(TI - WI + 1, SI, IBI, SBCOMBOP);
+ break;
+ case JBIG2_CORNER_BOTTOMLEFT:
+ SBREG->composeFrom(TI, SI - HI + 1, IBI, SBCOMBOP);
+ break;
+ case JBIG2_CORNER_BOTTOMRIGHT:
+ SBREG->composeFrom(TI - WI + 1, SI - HI + 1, IBI, SBCOMBOP);
+ break;
+ }
+ }
+ if (RI != 0) {
+ delete IBI;
+ }
+ if (TRANSPOSED == 0 && ((REFCORNER == JBIG2_CORNER_TOPLEFT) ||
+ (REFCORNER == JBIG2_CORNER_BOTTOMLEFT))) {
+ CURS = CURS + WI - 1;
+ } else if (TRANSPOSED == 1 && ((REFCORNER == JBIG2_CORNER_TOPLEFT) ||
+ (REFCORNER == JBIG2_CORNER_TOPRIGHT))) {
+ CURS = CURS + HI - 1;
+ }
+ NINSTANCES = NINSTANCES + 1;
}
- if(bRetained == FALSE) {
- delete IADT;
- delete IAFS;
- delete IADS;
- delete IAIT;
- delete IARI;
- delete IARDW;
- delete IARDH;
- delete IARDX;
- delete IARDY;
- delete IAID;
- }
- return SBREG;
+ }
+ delete pHuffmanDecoder;
+ return SBREG;
failed:
- if(bRetained == FALSE) {
- delete IADT;
- delete IAFS;
- delete IADS;
- delete IAIT;
- delete IARI;
- delete IARDW;
- delete IARDH;
- delete IARDX;
- delete IARDY;
- delete IAID;
- }
- delete SBREG;
- return NULL;
+ delete pHuffmanDecoder;
+ delete SBREG;
+ return NULL;
}
-CJBig2_SymbolDict *CJBig2_SDDProc::decode_Arith(CJBig2_ArithDecoder *pArithDecoder,
- JBig2ArithCtx *gbContext, JBig2ArithCtx *grContext)
-{
- CJBig2_Image **SDNEWSYMS;
- FX_DWORD HCHEIGHT, NSYMSDECODED;
- int32_t HCDH;
- FX_DWORD SYMWIDTH, TOTWIDTH;
- int32_t DW;
- CJBig2_Image *BS;
- FX_DWORD I, J, REFAGGNINST;
- FX_BOOL *EXFLAGS;
- FX_DWORD EXINDEX;
- FX_BOOL CUREXFLAG;
- FX_DWORD EXRUNLENGTH;
- int32_t nVal;
- FX_DWORD nTmp;
- FX_DWORD SBNUMSYMS;
- uint8_t SBSYMCODELEN;
- FX_DWORD IDI;
- int32_t RDXI, RDYI;
- CJBig2_Image **SBSYMS;
- CJBig2_HuffmanTable *SBHUFFFS, *SBHUFFDS, *SBHUFFDT, *SBHUFFRDW, *SBHUFFRDH, *SBHUFFRDX, *SBHUFFRDY,
- *SBHUFFRSIZE;
- CJBig2_GRRDProc *pGRRD;
- CJBig2_GRDProc *pGRD;
- CJBig2_ArithIntDecoder *IADH, *IADW, *IAAI, *IARDX, *IARDY, *IAEX,
- *IADT, *IAFS, *IADS, *IAIT, *IARI, *IARDW, *IARDH;
- CJBig2_ArithIaidDecoder *IAID;
- CJBig2_SymbolDict *pDict;
- JBIG2_ALLOC(IADH, CJBig2_ArithIntDecoder());
- JBIG2_ALLOC(IADW, CJBig2_ArithIntDecoder());
- JBIG2_ALLOC(IAAI, CJBig2_ArithIntDecoder());
- JBIG2_ALLOC(IARDX, CJBig2_ArithIntDecoder());
- JBIG2_ALLOC(IARDY, CJBig2_ArithIntDecoder());
- JBIG2_ALLOC(IAEX, CJBig2_ArithIntDecoder());
+CJBig2_Image* CJBig2_TRDProc::decode_Arith(CJBig2_ArithDecoder* pArithDecoder,
+ JBig2ArithCtx* grContext,
+ JBig2IntDecoderState* pIDS) {
+ int32_t STRIPT, FIRSTS;
+ FX_DWORD NINSTANCES;
+ int32_t DT, DFS, CURS;
+ int32_t CURT;
+ int32_t SI, TI;
+ FX_DWORD IDI;
+ CJBig2_Image* IBI;
+ FX_DWORD WI, HI;
+ int32_t IDS;
+ int RI;
+ int32_t RDWI, RDHI, RDXI, RDYI;
+ CJBig2_Image* IBOI;
+ FX_DWORD WOI, HOI;
+ CJBig2_Image* SBREG;
+ FX_BOOL bFirst;
+ int32_t nRet, nVal;
+ int32_t bRetained;
+ CJBig2_ArithIntDecoder *IADT, *IAFS, *IADS, *IAIT, *IARI, *IARDW, *IARDH,
+ *IARDX, *IARDY;
+ CJBig2_ArithIaidDecoder* IAID;
+ CJBig2_GRRDProc* pGRRD;
+ if (pIDS) {
+ IADT = pIDS->IADT;
+ IAFS = pIDS->IAFS;
+ IADS = pIDS->IADS;
+ IAIT = pIDS->IAIT;
+ IARI = pIDS->IARI;
+ IARDW = pIDS->IARDW;
+ IARDH = pIDS->IARDH;
+ IARDX = pIDS->IARDX;
+ IARDY = pIDS->IARDY;
+ IAID = pIDS->IAID;
+ bRetained = TRUE;
+ } else {
JBIG2_ALLOC(IADT, CJBig2_ArithIntDecoder());
JBIG2_ALLOC(IAFS, CJBig2_ArithIntDecoder());
JBIG2_ALLOC(IADS, CJBig2_ArithIntDecoder());
@@ -2370,269 +2278,186 @@ CJBig2_SymbolDict *CJBig2_SDDProc::decode_Arith(CJBig2_ArithDecoder *pArithDecod
JBIG2_ALLOC(IARI, CJBig2_ArithIntDecoder());
JBIG2_ALLOC(IARDW, CJBig2_ArithIntDecoder());
JBIG2_ALLOC(IARDH, CJBig2_ArithIntDecoder());
- nTmp = 0;
- while((FX_DWORD)(1 << nTmp) < (SDNUMINSYMS + SDNUMNEWSYMS)) {
- nTmp ++;
+ JBIG2_ALLOC(IARDX, CJBig2_ArithIntDecoder());
+ JBIG2_ALLOC(IARDY, CJBig2_ArithIntDecoder());
+ JBIG2_ALLOC(IAID, CJBig2_ArithIaidDecoder(SBSYMCODELEN));
+ bRetained = FALSE;
+ }
+ JBIG2_ALLOC(SBREG, CJBig2_Image(SBW, SBH));
+ SBREG->fill(SBDEFPIXEL);
+ if (IADT->decode(pArithDecoder, &STRIPT) == -1) {
+ m_pModule->JBig2_Error(
+ "text region decoding procedure (arith): too short.");
+ goto failed;
+ }
+ STRIPT *= SBSTRIPS;
+ STRIPT = -STRIPT;
+ FIRSTS = 0;
+ NINSTANCES = 0;
+ while (NINSTANCES < SBNUMINSTANCES) {
+ if (IADT->decode(pArithDecoder, &DT) == -1) {
+ m_pModule->JBig2_Error(
+ "text region decoding procedure (arith): too short.");
+ goto failed;
}
- JBIG2_ALLOC(IAID, CJBig2_ArithIaidDecoder((uint8_t)nTmp));
- SDNEWSYMS = (CJBig2_Image**)m_pModule->JBig2_Malloc2(SDNUMNEWSYMS, sizeof(CJBig2_Image*));
- FXSYS_memset(SDNEWSYMS, 0 , SDNUMNEWSYMS * sizeof(CJBig2_Image*));
- HCHEIGHT = 0;
- NSYMSDECODED = 0;
- while(NSYMSDECODED < SDNUMNEWSYMS) {
- BS = NULL;
- if(IADH->decode(pArithDecoder, &HCDH) == -1) {
- m_pModule->JBig2_Error("symbol dictionary decoding procedure (arith): too short.");
- goto failed;
+ DT *= SBSTRIPS;
+ STRIPT = STRIPT + DT;
+ bFirst = TRUE;
+ for (;;) {
+ if (bFirst) {
+ if (IAFS->decode(pArithDecoder, &DFS) == -1) {
+ m_pModule->JBig2_Error(
+ "text region decoding procedure (arith): too short.");
+ goto failed;
}
- HCHEIGHT = HCHEIGHT + HCDH;
- if ((int)HCHEIGHT < 0 || (int)HCHEIGHT > JBIG2_MAX_IMAGE_SIZE) {
- m_pModule->JBig2_Error("symbol dictionary decoding procedure (arith): invalid HCHEIGHT value.");
- goto failed;
+ FIRSTS = FIRSTS + DFS;
+ CURS = FIRSTS;
+ bFirst = FALSE;
+ } else {
+ nRet = IADS->decode(pArithDecoder, &IDS);
+ if (nRet == JBIG2_OOB) {
+ break;
+ } else if (nRet != 0) {
+ m_pModule->JBig2_Error(
+ "text region decoding procedure (arith): too short.");
+ goto failed;
+ } else {
+ CURS = CURS + IDS + SBDSOFFSET;
}
- SYMWIDTH = 0;
- TOTWIDTH = 0;
- for(;;) {
- nVal = IADW->decode(pArithDecoder, &DW);
- if(nVal == JBIG2_OOB) {
- break;
- } else if(nVal != 0) {
- m_pModule->JBig2_Error("symbol dictionary decoding procedure (arith): too short.");
- goto failed;
- } else {
- if (NSYMSDECODED >= SDNUMNEWSYMS) {
- m_pModule->JBig2_Error("symbol dictionary decoding procedure (arith): NSYMSDECODED >= SDNUMNEWSYMS.");
- goto failed;
- }
- SYMWIDTH = SYMWIDTH + DW;
- if ((int)SYMWIDTH < 0 || (int)SYMWIDTH > JBIG2_MAX_IMAGE_SIZE) {
- m_pModule->JBig2_Error("symbol dictionary decoding procedure (arith): invalid SYMWIDTH value.");
- goto failed;
- } else if (HCHEIGHT == 0 || SYMWIDTH == 0) {
- TOTWIDTH = TOTWIDTH + SYMWIDTH;
- SDNEWSYMS[NSYMSDECODED] = NULL;
- NSYMSDECODED = NSYMSDECODED + 1;
- continue;
- }
- TOTWIDTH = TOTWIDTH + SYMWIDTH;
- }
- if(SDREFAGG == 0) {
- JBIG2_ALLOC(pGRD, CJBig2_GRDProc());
- pGRD->MMR = 0;
- pGRD->GBW = SYMWIDTH;
- pGRD->GBH = HCHEIGHT;
- pGRD->GBTEMPLATE = SDTEMPLATE;
- pGRD->TPGDON = 0;
- pGRD->USESKIP = 0;
- pGRD->GBAT[0] = SDAT[0];
- pGRD->GBAT[1] = SDAT[1];
- pGRD->GBAT[2] = SDAT[2];
- pGRD->GBAT[3] = SDAT[3];
- pGRD->GBAT[4] = SDAT[4];
- pGRD->GBAT[5] = SDAT[5];
- pGRD->GBAT[6] = SDAT[6];
- pGRD->GBAT[7] = SDAT[7];
- BS = pGRD->decode_Arith(pArithDecoder, gbContext);
- if(BS == NULL) {
- delete pGRD;
- goto failed;
- }
- delete pGRD;
- } else {
- if(IAAI->decode(pArithDecoder, (int*)&REFAGGNINST) == -1) {
- m_pModule->JBig2_Error("symbol dictionary decoding procedure (arith): too short.");
- goto failed;
- }
- if(REFAGGNINST > 1) {
- CJBig2_TRDProc *pDecoder;
- JBIG2_ALLOC(pDecoder, CJBig2_TRDProc());
- pDecoder->SBHUFF = SDHUFF;
- pDecoder->SBREFINE = 1;
- pDecoder->SBW = SYMWIDTH;
- pDecoder->SBH = HCHEIGHT;
- pDecoder->SBNUMINSTANCES = REFAGGNINST;
- pDecoder->SBSTRIPS = 1;
- pDecoder->SBNUMSYMS = SDNUMINSYMS + NSYMSDECODED;
- SBNUMSYMS = pDecoder->SBNUMSYMS;
- nTmp = 0;
- while((FX_DWORD)(1 << nTmp) < SBNUMSYMS) {
- nTmp ++;
- }
- SBSYMCODELEN = (uint8_t)nTmp;
- pDecoder->SBSYMCODELEN = SBSYMCODELEN;
- SBSYMS = (CJBig2_Image**)m_pModule->JBig2_Malloc2(SBNUMSYMS, sizeof(CJBig2_Image*));
- JBIG2_memcpy(SBSYMS, SDINSYMS, SDNUMINSYMS * sizeof(CJBig2_Image*));
- JBIG2_memcpy(SBSYMS + SDNUMINSYMS, SDNEWSYMS, NSYMSDECODED * sizeof(CJBig2_Image*));
- pDecoder->SBSYMS = SBSYMS;
- pDecoder->SBDEFPIXEL = 0;
- pDecoder->SBCOMBOP = JBIG2_COMPOSE_OR;
- pDecoder->TRANSPOSED = 0;
- pDecoder->REFCORNER = JBIG2_CORNER_TOPLEFT;
- pDecoder->SBDSOFFSET = 0;
- JBIG2_ALLOC(SBHUFFFS, CJBig2_HuffmanTable(HuffmanTable_B6,
- sizeof(HuffmanTable_B6) / sizeof(JBig2TableLine), HuffmanTable_HTOOB_B6));
- JBIG2_ALLOC(SBHUFFDS, CJBig2_HuffmanTable(HuffmanTable_B8,
- sizeof(HuffmanTable_B8) / sizeof(JBig2TableLine), HuffmanTable_HTOOB_B8));
- JBIG2_ALLOC(SBHUFFDT, CJBig2_HuffmanTable(HuffmanTable_B11,
- sizeof(HuffmanTable_B11) / sizeof(JBig2TableLine), HuffmanTable_HTOOB_B11));
- JBIG2_ALLOC(SBHUFFRDW, CJBig2_HuffmanTable(HuffmanTable_B15,
- sizeof(HuffmanTable_B15) / sizeof(JBig2TableLine), HuffmanTable_HTOOB_B15));
- JBIG2_ALLOC(SBHUFFRDH, CJBig2_HuffmanTable(HuffmanTable_B15,
- sizeof(HuffmanTable_B15) / sizeof(JBig2TableLine), HuffmanTable_HTOOB_B15));
- JBIG2_ALLOC(SBHUFFRDX, CJBig2_HuffmanTable(HuffmanTable_B15,
- sizeof(HuffmanTable_B15) / sizeof(JBig2TableLine), HuffmanTable_HTOOB_B15));
- JBIG2_ALLOC(SBHUFFRDY, CJBig2_HuffmanTable(HuffmanTable_B15,
- sizeof(HuffmanTable_B15) / sizeof(JBig2TableLine), HuffmanTable_HTOOB_B15));
- JBIG2_ALLOC(SBHUFFRSIZE, CJBig2_HuffmanTable(HuffmanTable_B1,
- sizeof(HuffmanTable_B1) / sizeof(JBig2TableLine), HuffmanTable_HTOOB_B1));
- pDecoder->SBHUFFFS = SBHUFFFS;
- pDecoder->SBHUFFDS = SBHUFFDS;
- pDecoder->SBHUFFDT = SBHUFFDT;
- pDecoder->SBHUFFRDW = SBHUFFRDW;
- pDecoder->SBHUFFRDH = SBHUFFRDH;
- pDecoder->SBHUFFRDX = SBHUFFRDX;
- pDecoder->SBHUFFRDY = SBHUFFRDY;
- pDecoder->SBHUFFRSIZE = SBHUFFRSIZE;
- pDecoder->SBRTEMPLATE = SDRTEMPLATE;
- pDecoder->SBRAT[0] = SDRAT[0];
- pDecoder->SBRAT[1] = SDRAT[1];
- pDecoder->SBRAT[2] = SDRAT[2];
- pDecoder->SBRAT[3] = SDRAT[3];
- JBig2IntDecoderState ids;
- ids.IADT = IADT;
- ids.IAFS = IAFS;
- ids.IADS = IADS;
- ids.IAIT = IAIT;
- ids.IARI = IARI;
- ids.IARDW = IARDW;
- ids.IARDH = IARDH;
- ids.IARDX = IARDX;
- ids.IARDY = IARDY;
- ids.IAID = IAID;
- BS = pDecoder->decode_Arith(pArithDecoder, grContext, &ids);
- if(BS == NULL) {
- m_pModule->JBig2_Free(SBSYMS);
- delete SBHUFFFS;
- delete SBHUFFDS;
- delete SBHUFFDT;
- delete SBHUFFRDW;
- delete SBHUFFRDH;
- delete SBHUFFRDX;
- delete SBHUFFRDY;
- delete SBHUFFRSIZE;
- delete pDecoder;
- goto failed;
- }
- m_pModule->JBig2_Free(SBSYMS);
- delete SBHUFFFS;
- delete SBHUFFDS;
- delete SBHUFFDT;
- delete SBHUFFRDW;
- delete SBHUFFRDH;
- delete SBHUFFRDX;
- delete SBHUFFRDY;
- delete SBHUFFRSIZE;
- delete pDecoder;
- } else if(REFAGGNINST == 1) {
- SBNUMSYMS = SDNUMINSYMS + NSYMSDECODED;
- if(IAID->decode(pArithDecoder, (int*)&IDI) == -1) {
- m_pModule->JBig2_Error("symbol dictionary decoding procedure (arith): too short.");
- goto failed;
- }
- if((IARDX->decode(pArithDecoder, &RDXI) == -1)
- || (IARDY->decode(pArithDecoder, &RDYI) == -1)) {
- m_pModule->JBig2_Error("symbol dictionary decoding procedure (arith): too short.");
- goto failed;
- }
- if (IDI >= SBNUMSYMS) {
- m_pModule->JBig2_Error("symbol dictionary decoding procedure (arith):"
- " refinement references unknown symbol %d", IDI);
- goto failed;
- }
- SBSYMS = (CJBig2_Image**)m_pModule->JBig2_Malloc2(SBNUMSYMS, sizeof(CJBig2_Image*));
- JBIG2_memcpy(SBSYMS, SDINSYMS, SDNUMINSYMS * sizeof(CJBig2_Image*));
- JBIG2_memcpy(SBSYMS + SDNUMINSYMS, SDNEWSYMS, NSYMSDECODED * sizeof(CJBig2_Image*));
- if (!SBSYMS[IDI]) {
- m_pModule->JBig2_Free(SBSYMS);
- goto failed;
- }
- JBIG2_ALLOC(pGRRD, CJBig2_GRRDProc());
- pGRRD->GRW = SYMWIDTH;
- pGRRD->GRH = HCHEIGHT;
- pGRRD->GRTEMPLATE = SDRTEMPLATE;
- pGRRD->GRREFERENCE = SBSYMS[IDI];
- pGRRD->GRREFERENCEDX = RDXI;
- pGRRD->GRREFERENCEDY = RDYI;
- pGRRD->TPGRON = 0;
- pGRRD->GRAT[0] = SDRAT[0];
- pGRRD->GRAT[1] = SDRAT[1];
- pGRRD->GRAT[2] = SDRAT[2];
- pGRRD->GRAT[3] = SDRAT[3];
- BS = pGRRD->decode(pArithDecoder, grContext);
- if(BS == NULL) {
- m_pModule->JBig2_Free(SBSYMS);
- delete pGRRD;
- goto failed;
- }
- m_pModule->JBig2_Free(SBSYMS);
- delete pGRRD;
- }
- }
- SDNEWSYMS[NSYMSDECODED] = BS;
- BS = NULL;
- NSYMSDECODED = NSYMSDECODED + 1;
+ }
+ if (NINSTANCES >= SBNUMINSTANCES) {
+ break;
+ }
+ if (SBSTRIPS == 1) {
+ CURT = 0;
+ } else {
+ if (IAIT->decode(pArithDecoder, &nVal) == -1) {
+ m_pModule->JBig2_Error(
+ "text region decoding procedure (arith): too short.");
+ goto failed;
}
- }
- EXINDEX = 0;
- CUREXFLAG = 0;
- EXFLAGS = (FX_BOOL*)m_pModule->JBig2_Malloc2(sizeof(FX_BOOL), (SDNUMINSYMS + SDNUMNEWSYMS));
- while(EXINDEX < SDNUMINSYMS + SDNUMNEWSYMS) {
- if(IAEX->decode(pArithDecoder, (int*)&EXRUNLENGTH) == -1) {
- m_pModule->JBig2_Free(EXFLAGS);
- m_pModule->JBig2_Error("symbol dictionary decoding procedure (arith): too short.");
- goto failed;
+ CURT = nVal;
+ }
+ TI = STRIPT + CURT;
+ if (IAID->decode(pArithDecoder, &nVal) == -1) {
+ m_pModule->JBig2_Error(
+ "text region decoding procedure (arith): too short.");
+ goto failed;
+ }
+ IDI = nVal;
+ if (IDI >= SBNUMSYMS) {
+ m_pModule->JBig2_Error(
+ "text region decoding procedure (arith): symbol id out of "
+ "range.(%d/%d)",
+ IDI, SBNUMSYMS);
+ goto failed;
+ }
+ if (SBREFINE == 0) {
+ RI = 0;
+ } else {
+ if (IARI->decode(pArithDecoder, &RI) == -1) {
+ m_pModule->JBig2_Error(
+ "text region decoding procedure (arith): too short.");
+ goto failed;
}
- if (EXINDEX + EXRUNLENGTH > SDNUMINSYMS + SDNUMNEWSYMS) {
- m_pModule->JBig2_Free(EXFLAGS);
- m_pModule->JBig2_Error("symbol dictionary decoding procedure (arith): Invalid EXRUNLENGTH value.");
- goto failed;
+ }
+ if (!SBSYMS[IDI]) {
+ goto failed;
+ }
+ if (RI == 0) {
+ IBI = SBSYMS[IDI];
+ } else {
+ if ((IARDW->decode(pArithDecoder, &RDWI) == -1) ||
+ (IARDH->decode(pArithDecoder, &RDHI) == -1) ||
+ (IARDX->decode(pArithDecoder, &RDXI) == -1) ||
+ (IARDY->decode(pArithDecoder, &RDYI) == -1)) {
+ m_pModule->JBig2_Error(
+ "text region decoding procedure (arith): too short.");
+ goto failed;
}
- if(EXRUNLENGTH != 0) {
- for(I = EXINDEX; I < EXINDEX + EXRUNLENGTH; I++) {
- EXFLAGS[I] = CUREXFLAG;
- }
+ IBOI = SBSYMS[IDI];
+ WOI = IBOI->m_nWidth;
+ HOI = IBOI->m_nHeight;
+ if ((int)(WOI + RDWI) < 0 || (int)(HOI + RDHI) < 0) {
+ m_pModule->JBig2_Error(
+ "text region decoding procedure (arith): Invalid RDWI or RDHI "
+ "value.");
+ goto failed;
}
- EXINDEX = EXINDEX + EXRUNLENGTH;
- CUREXFLAG = !CUREXFLAG;
- }
- JBIG2_ALLOC(pDict, CJBig2_SymbolDict());
- pDict->SDNUMEXSYMS = SDNUMEXSYMS;
- pDict->SDEXSYMS = (CJBig2_Image**)m_pModule->JBig2_Malloc2(sizeof(CJBig2_Image*), SDNUMEXSYMS);
- I = J = 0;
- for(I = 0; I < SDNUMINSYMS + SDNUMNEWSYMS; I++) {
- if(EXFLAGS[I] && J < SDNUMEXSYMS) {
- if(I < SDNUMINSYMS) {
- JBIG2_ALLOC(pDict->SDEXSYMS[J], CJBig2_Image(*SDINSYMS[I]));
- } else {
- pDict->SDEXSYMS[J] = SDNEWSYMS[I - SDNUMINSYMS];
- }
- J = J + 1;
- } else if (!EXFLAGS[I] && I >= SDNUMINSYMS) {
- delete SDNEWSYMS[I - SDNUMINSYMS];
+ JBIG2_ALLOC(pGRRD, CJBig2_GRRDProc());
+ pGRRD->GRW = WOI + RDWI;
+ pGRRD->GRH = HOI + RDHI;
+ pGRRD->GRTEMPLATE = SBRTEMPLATE;
+ pGRRD->GRREFERENCE = IBOI;
+ pGRRD->GRREFERENCEDX = (RDWI >> 1) + RDXI;
+ pGRRD->GRREFERENCEDY = (RDHI >> 1) + RDYI;
+ pGRRD->TPGRON = 0;
+ pGRRD->GRAT[0] = SBRAT[0];
+ pGRRD->GRAT[1] = SBRAT[1];
+ pGRRD->GRAT[2] = SBRAT[2];
+ pGRRD->GRAT[3] = SBRAT[3];
+ IBI = pGRRD->decode(pArithDecoder, grContext);
+ if (IBI == NULL) {
+ delete pGRRD;
+ goto failed;
}
+ delete pGRRD;
+ }
+ WI = IBI->m_nWidth;
+ HI = IBI->m_nHeight;
+ if (TRANSPOSED == 0 && ((REFCORNER == JBIG2_CORNER_TOPRIGHT) ||
+ (REFCORNER == JBIG2_CORNER_BOTTOMRIGHT))) {
+ CURS = CURS + WI - 1;
+ } else if (TRANSPOSED == 1 && ((REFCORNER == JBIG2_CORNER_BOTTOMLEFT) ||
+ (REFCORNER == JBIG2_CORNER_BOTTOMRIGHT))) {
+ CURS = CURS + HI - 1;
+ }
+ SI = CURS;
+ if (TRANSPOSED == 0) {
+ switch (REFCORNER) {
+ case JBIG2_CORNER_TOPLEFT:
+ SBREG->composeFrom(SI, TI, IBI, SBCOMBOP);
+ break;
+ case JBIG2_CORNER_TOPRIGHT:
+ SBREG->composeFrom(SI - WI + 1, TI, IBI, SBCOMBOP);
+ break;
+ case JBIG2_CORNER_BOTTOMLEFT:
+ SBREG->composeFrom(SI, TI - HI + 1, IBI, SBCOMBOP);
+ break;
+ case JBIG2_CORNER_BOTTOMRIGHT:
+ SBREG->composeFrom(SI - WI + 1, TI - HI + 1, IBI, SBCOMBOP);
+ break;
+ }
+ } else {
+ switch (REFCORNER) {
+ case JBIG2_CORNER_TOPLEFT:
+ SBREG->composeFrom(TI, SI, IBI, SBCOMBOP);
+ break;
+ case JBIG2_CORNER_TOPRIGHT:
+ SBREG->composeFrom(TI - WI + 1, SI, IBI, SBCOMBOP);
+ break;
+ case JBIG2_CORNER_BOTTOMLEFT:
+ SBREG->composeFrom(TI, SI - HI + 1, IBI, SBCOMBOP);
+ break;
+ case JBIG2_CORNER_BOTTOMRIGHT:
+ SBREG->composeFrom(TI - WI + 1, SI - HI + 1, IBI, SBCOMBOP);
+ break;
+ }
+ }
+ if (RI != 0) {
+ delete IBI;
+ }
+ if (TRANSPOSED == 0 && ((REFCORNER == JBIG2_CORNER_TOPLEFT) ||
+ (REFCORNER == JBIG2_CORNER_BOTTOMLEFT))) {
+ CURS = CURS + WI - 1;
+ } else if (TRANSPOSED == 1 && ((REFCORNER == JBIG2_CORNER_TOPLEFT) ||
+ (REFCORNER == JBIG2_CORNER_TOPRIGHT))) {
+ CURS = CURS + HI - 1;
+ }
+ NINSTANCES = NINSTANCES + 1;
}
- if (J < SDNUMEXSYMS) {
- pDict->SDNUMEXSYMS = J;
- }
- m_pModule->JBig2_Free(EXFLAGS);
- m_pModule->JBig2_Free(SDNEWSYMS);
- delete IADH;
- delete IADW;
- delete IAAI;
- delete IARDX;
- delete IARDY;
- delete IAEX;
- delete IAID;
+ }
+ if (bRetained == FALSE) {
delete IADT;
delete IAFS;
delete IADS;
@@ -2640,22 +2465,13 @@ CJBig2_SymbolDict *CJBig2_SDDProc::decode_Arith(CJBig2_ArithDecoder *pArithDecod
delete IARI;
delete IARDW;
delete IARDH;
- return pDict;
-failed:
- for(I = 0; I < NSYMSDECODED; I++) {
- if (SDNEWSYMS[I]) {
- delete SDNEWSYMS[I];
- SDNEWSYMS[I] = NULL;
- }
- }
- m_pModule->JBig2_Free(SDNEWSYMS);
- delete IADH;
- delete IADW;
- delete IAAI;
delete IARDX;
delete IARDY;
- delete IAEX;
delete IAID;
+ }
+ return SBREG;
+failed:
+ if (bRetained == FALSE) {
delete IADT;
delete IAFS;
delete IADS;
@@ -2663,1669 +2479,2184 @@ failed:
delete IARI;
delete IARDW;
delete IARDH;
- return NULL;
+ delete IARDX;
+ delete IARDY;
+ delete IAID;
+ }
+ delete SBREG;
+ return NULL;
}
-CJBig2_SymbolDict *CJBig2_SDDProc::decode_Huffman(CJBig2_BitStream *pStream,
- JBig2ArithCtx *gbContext, JBig2ArithCtx *grContext, IFX_Pause* pPause)
-{
- CJBig2_Image **SDNEWSYMS;
- FX_DWORD *SDNEWSYMWIDTHS;
- FX_DWORD HCHEIGHT, NSYMSDECODED;
- int32_t HCDH;
- FX_DWORD SYMWIDTH, TOTWIDTH, HCFIRSTSYM;
- int32_t DW;
- CJBig2_Image *BS, *BHC;
- FX_DWORD I, J, REFAGGNINST;
- FX_BOOL *EXFLAGS;
- FX_DWORD EXINDEX;
- FX_BOOL CUREXFLAG;
- FX_DWORD EXRUNLENGTH;
- int32_t nVal, nBits;
- FX_DWORD nTmp;
- FX_DWORD SBNUMSYMS;
- uint8_t SBSYMCODELEN;
- JBig2HuffmanCode *SBSYMCODES;
- FX_DWORD IDI;
- int32_t RDXI, RDYI;
- FX_DWORD BMSIZE;
- FX_DWORD stride;
- CJBig2_Image **SBSYMS;
- CJBig2_HuffmanTable *SBHUFFFS, *SBHUFFDS, *SBHUFFDT, *SBHUFFRDW, *SBHUFFRDH, *SBHUFFRDX, *SBHUFFRDY,
- *SBHUFFRSIZE, *pTable;
- CJBig2_HuffmanDecoder *pHuffmanDecoder;
- CJBig2_GRRDProc *pGRRD;
- CJBig2_ArithDecoder *pArithDecoder;
- CJBig2_GRDProc *pGRD;
- CJBig2_SymbolDict *pDict;
- JBIG2_ALLOC(pHuffmanDecoder, CJBig2_HuffmanDecoder(pStream));
- SDNEWSYMS = (CJBig2_Image**)m_pModule->JBig2_Malloc2(SDNUMNEWSYMS, sizeof(CJBig2_Image*));
- FXSYS_memset(SDNEWSYMS, 0 , SDNUMNEWSYMS * sizeof(CJBig2_Image*));
- SDNEWSYMWIDTHS = NULL;
- BHC = NULL;
- if(SDREFAGG == 0) {
- SDNEWSYMWIDTHS = (FX_DWORD *)m_pModule->JBig2_Malloc2(SDNUMNEWSYMS, sizeof(FX_DWORD));
- FXSYS_memset(SDNEWSYMWIDTHS, 0 , SDNUMNEWSYMS * sizeof(FX_DWORD));
- }
- HCHEIGHT = 0;
- NSYMSDECODED = 0;
+CJBig2_SymbolDict* CJBig2_SDDProc::decode_Arith(
+ CJBig2_ArithDecoder* pArithDecoder,
+ JBig2ArithCtx* gbContext,
+ JBig2ArithCtx* grContext) {
+ CJBig2_Image** SDNEWSYMS;
+ FX_DWORD HCHEIGHT, NSYMSDECODED;
+ int32_t HCDH;
+ FX_DWORD SYMWIDTH, TOTWIDTH;
+ int32_t DW;
+ CJBig2_Image* BS;
+ FX_DWORD I, J, REFAGGNINST;
+ FX_BOOL* EXFLAGS;
+ FX_DWORD EXINDEX;
+ FX_BOOL CUREXFLAG;
+ FX_DWORD EXRUNLENGTH;
+ int32_t nVal;
+ FX_DWORD nTmp;
+ FX_DWORD SBNUMSYMS;
+ uint8_t SBSYMCODELEN;
+ FX_DWORD IDI;
+ int32_t RDXI, RDYI;
+ CJBig2_Image** SBSYMS;
+ CJBig2_HuffmanTable *SBHUFFFS, *SBHUFFDS, *SBHUFFDT, *SBHUFFRDW, *SBHUFFRDH,
+ *SBHUFFRDX, *SBHUFFRDY, *SBHUFFRSIZE;
+ CJBig2_GRRDProc* pGRRD;
+ CJBig2_GRDProc* pGRD;
+ CJBig2_ArithIntDecoder *IADH, *IADW, *IAAI, *IARDX, *IARDY, *IAEX, *IADT,
+ *IAFS, *IADS, *IAIT, *IARI, *IARDW, *IARDH;
+ CJBig2_ArithIaidDecoder* IAID;
+ CJBig2_SymbolDict* pDict;
+ JBIG2_ALLOC(IADH, CJBig2_ArithIntDecoder());
+ JBIG2_ALLOC(IADW, CJBig2_ArithIntDecoder());
+ JBIG2_ALLOC(IAAI, CJBig2_ArithIntDecoder());
+ JBIG2_ALLOC(IARDX, CJBig2_ArithIntDecoder());
+ JBIG2_ALLOC(IARDY, CJBig2_ArithIntDecoder());
+ JBIG2_ALLOC(IAEX, CJBig2_ArithIntDecoder());
+ JBIG2_ALLOC(IADT, CJBig2_ArithIntDecoder());
+ JBIG2_ALLOC(IAFS, CJBig2_ArithIntDecoder());
+ JBIG2_ALLOC(IADS, CJBig2_ArithIntDecoder());
+ JBIG2_ALLOC(IAIT, CJBig2_ArithIntDecoder());
+ JBIG2_ALLOC(IARI, CJBig2_ArithIntDecoder());
+ JBIG2_ALLOC(IARDW, CJBig2_ArithIntDecoder());
+ JBIG2_ALLOC(IARDH, CJBig2_ArithIntDecoder());
+ nTmp = 0;
+ while ((FX_DWORD)(1 << nTmp) < (SDNUMINSYMS + SDNUMNEWSYMS)) {
+ nTmp++;
+ }
+ JBIG2_ALLOC(IAID, CJBig2_ArithIaidDecoder((uint8_t)nTmp));
+ SDNEWSYMS = (CJBig2_Image**)m_pModule->JBig2_Malloc2(SDNUMNEWSYMS,
+ sizeof(CJBig2_Image*));
+ FXSYS_memset(SDNEWSYMS, 0, SDNUMNEWSYMS * sizeof(CJBig2_Image*));
+ HCHEIGHT = 0;
+ NSYMSDECODED = 0;
+ while (NSYMSDECODED < SDNUMNEWSYMS) {
BS = NULL;
- while(NSYMSDECODED < SDNUMNEWSYMS) {
- if(pHuffmanDecoder->decodeAValue(SDHUFFDH, &HCDH) != 0) {
- m_pModule->JBig2_Error("symbol dictionary decoding procedure (huffman): too short.");
- goto failed;
+ if (IADH->decode(pArithDecoder, &HCDH) == -1) {
+ m_pModule->JBig2_Error(
+ "symbol dictionary decoding procedure (arith): too short.");
+ goto failed;
+ }
+ HCHEIGHT = HCHEIGHT + HCDH;
+ if ((int)HCHEIGHT < 0 || (int)HCHEIGHT > JBIG2_MAX_IMAGE_SIZE) {
+ m_pModule->JBig2_Error(
+ "symbol dictionary decoding procedure (arith): invalid HCHEIGHT "
+ "value.");
+ goto failed;
+ }
+ SYMWIDTH = 0;
+ TOTWIDTH = 0;
+ for (;;) {
+ nVal = IADW->decode(pArithDecoder, &DW);
+ if (nVal == JBIG2_OOB) {
+ break;
+ } else if (nVal != 0) {
+ m_pModule->JBig2_Error(
+ "symbol dictionary decoding procedure (arith): too short.");
+ goto failed;
+ } else {
+ if (NSYMSDECODED >= SDNUMNEWSYMS) {
+ m_pModule->JBig2_Error(
+ "symbol dictionary decoding procedure (arith): NSYMSDECODED >= "
+ "SDNUMNEWSYMS.");
+ goto failed;
}
- HCHEIGHT = HCHEIGHT + HCDH;
- if ((int)HCHEIGHT < 0 || (int)HCHEIGHT > JBIG2_MAX_IMAGE_SIZE) {
- m_pModule->JBig2_Error("symbol dictionary decoding procedure (huffman): invalid HCHEIGHT value.");
- goto failed;
+ SYMWIDTH = SYMWIDTH + DW;
+ if ((int)SYMWIDTH < 0 || (int)SYMWIDTH > JBIG2_MAX_IMAGE_SIZE) {
+ m_pModule->JBig2_Error(
+ "symbol dictionary decoding procedure (arith): invalid SYMWIDTH "
+ "value.");
+ goto failed;
+ } else if (HCHEIGHT == 0 || SYMWIDTH == 0) {
+ TOTWIDTH = TOTWIDTH + SYMWIDTH;
+ SDNEWSYMS[NSYMSDECODED] = NULL;
+ NSYMSDECODED = NSYMSDECODED + 1;
+ continue;
}
- SYMWIDTH = 0;
- TOTWIDTH = 0;
- HCFIRSTSYM = NSYMSDECODED;
- for(;;) {
- nVal = pHuffmanDecoder->decodeAValue(SDHUFFDW, &DW);
- if(nVal == JBIG2_OOB) {
- break;
- } else if(nVal != 0) {
- m_pModule->JBig2_Error("symbol dictionary decoding procedure (huffman): too short.");
- goto failed;
- } else {
- if (NSYMSDECODED >= SDNUMNEWSYMS) {
- m_pModule->JBig2_Error("symbol dictionary decoding procedure (huffman): NSYMSDECODED >= SDNUMNEWSYMS.");
- goto failed;
- }
- SYMWIDTH = SYMWIDTH + DW;
- if ((int)SYMWIDTH < 0 || (int)SYMWIDTH > JBIG2_MAX_IMAGE_SIZE) {
- m_pModule->JBig2_Error("symbol dictionary decoding procedure (huffman): invalid SYMWIDTH value.");
- goto failed;
- } else if (HCHEIGHT == 0 || SYMWIDTH == 0) {
- TOTWIDTH = TOTWIDTH + SYMWIDTH;
- SDNEWSYMS[NSYMSDECODED] = NULL;
- NSYMSDECODED = NSYMSDECODED + 1;
- continue;
- }
- TOTWIDTH = TOTWIDTH + SYMWIDTH;
- }
- if(SDREFAGG == 1) {
- if(pHuffmanDecoder->decodeAValue(SDHUFFAGGINST, (int*)&REFAGGNINST) != 0) {
- m_pModule->JBig2_Error("symbol dictionary decoding procedure (huffman): too short.");
- goto failed;
- }
- BS = NULL;
- if(REFAGGNINST > 1) {
- CJBig2_TRDProc *pDecoder;
- JBIG2_ALLOC(pDecoder, CJBig2_TRDProc());
- pDecoder->SBHUFF = SDHUFF;
- pDecoder->SBREFINE = 1;
- pDecoder->SBW = SYMWIDTH;
- pDecoder->SBH = HCHEIGHT;
- pDecoder->SBNUMINSTANCES = REFAGGNINST;
- pDecoder->SBSTRIPS = 1;
- pDecoder->SBNUMSYMS = SDNUMINSYMS + NSYMSDECODED;
- SBNUMSYMS = pDecoder->SBNUMSYMS;
- SBSYMCODES = (JBig2HuffmanCode*)m_pModule->JBig2_Malloc2(SBNUMSYMS, sizeof(JBig2HuffmanCode));
- nTmp = 1;
- while((FX_DWORD)(1 << nTmp) < SBNUMSYMS) {
- nTmp ++;
- }
- for(I = 0; I < SBNUMSYMS; I++) {
- SBSYMCODES[I].codelen = nTmp;
- SBSYMCODES[I].code = I;
- }
- pDecoder->SBSYMCODES = SBSYMCODES;
- SBSYMS = (CJBig2_Image**)m_pModule->JBig2_Malloc2(SBNUMSYMS, sizeof(CJBig2_Image*));
- JBIG2_memcpy(SBSYMS, SDINSYMS, SDNUMINSYMS * sizeof(CJBig2_Image*));
- JBIG2_memcpy(SBSYMS + SDNUMINSYMS, SDNEWSYMS, NSYMSDECODED * sizeof(CJBig2_Image*));
- pDecoder->SBSYMS = SBSYMS;
- pDecoder->SBDEFPIXEL = 0;
- pDecoder->SBCOMBOP = JBIG2_COMPOSE_OR;
- pDecoder->TRANSPOSED = 0;
- pDecoder->REFCORNER = JBIG2_CORNER_TOPLEFT;
- pDecoder->SBDSOFFSET = 0;
- JBIG2_ALLOC(SBHUFFFS, CJBig2_HuffmanTable(HuffmanTable_B6,
- sizeof(HuffmanTable_B6) / sizeof(JBig2TableLine), HuffmanTable_HTOOB_B6));
- JBIG2_ALLOC(SBHUFFDS, CJBig2_HuffmanTable(HuffmanTable_B8,
- sizeof(HuffmanTable_B8) / sizeof(JBig2TableLine), HuffmanTable_HTOOB_B8));
- JBIG2_ALLOC(SBHUFFDT, CJBig2_HuffmanTable(HuffmanTable_B11,
- sizeof(HuffmanTable_B11) / sizeof(JBig2TableLine), HuffmanTable_HTOOB_B11));
- JBIG2_ALLOC(SBHUFFRDW, CJBig2_HuffmanTable(HuffmanTable_B15,
- sizeof(HuffmanTable_B15) / sizeof(JBig2TableLine), HuffmanTable_HTOOB_B15));
- JBIG2_ALLOC(SBHUFFRDH, CJBig2_HuffmanTable(HuffmanTable_B15,
- sizeof(HuffmanTable_B15) / sizeof(JBig2TableLine), HuffmanTable_HTOOB_B15));
- JBIG2_ALLOC(SBHUFFRDX, CJBig2_HuffmanTable(HuffmanTable_B15,
- sizeof(HuffmanTable_B15) / sizeof(JBig2TableLine), HuffmanTable_HTOOB_B15));
- JBIG2_ALLOC(SBHUFFRDY, CJBig2_HuffmanTable(HuffmanTable_B15,
- sizeof(HuffmanTable_B15) / sizeof(JBig2TableLine), HuffmanTable_HTOOB_B15));
- JBIG2_ALLOC(SBHUFFRSIZE, CJBig2_HuffmanTable(HuffmanTable_B1,
- sizeof(HuffmanTable_B1) / sizeof(JBig2TableLine), HuffmanTable_HTOOB_B1));
- pDecoder->SBHUFFFS = SBHUFFFS;
- pDecoder->SBHUFFDS = SBHUFFDS;
- pDecoder->SBHUFFDT = SBHUFFDT;
- pDecoder->SBHUFFRDW = SBHUFFRDW;
- pDecoder->SBHUFFRDH = SBHUFFRDH;
- pDecoder->SBHUFFRDX = SBHUFFRDX;
- pDecoder->SBHUFFRDY = SBHUFFRDY;
- pDecoder->SBHUFFRSIZE = SBHUFFRSIZE;
- pDecoder->SBRTEMPLATE = SDRTEMPLATE;
- pDecoder->SBRAT[0] = SDRAT[0];
- pDecoder->SBRAT[1] = SDRAT[1];
- pDecoder->SBRAT[2] = SDRAT[2];
- pDecoder->SBRAT[3] = SDRAT[3];
- BS = pDecoder->decode_Huffman(pStream, grContext);
- if(BS == NULL) {
- m_pModule->JBig2_Free(SBSYMCODES);
- m_pModule->JBig2_Free(SBSYMS);
- delete SBHUFFFS;
- delete SBHUFFDS;
- delete SBHUFFDT;
- delete SBHUFFRDW;
- delete SBHUFFRDH;
- delete SBHUFFRDX;
- delete SBHUFFRDY;
- delete SBHUFFRSIZE;
- delete pDecoder;
- goto failed;
- }
- m_pModule->JBig2_Free(SBSYMCODES);
- m_pModule->JBig2_Free(SBSYMS);
- delete SBHUFFFS;
- delete SBHUFFDS;
- delete SBHUFFDT;
- delete SBHUFFRDW;
- delete SBHUFFRDH;
- delete SBHUFFRDX;
- delete SBHUFFRDY;
- delete SBHUFFRSIZE;
- delete pDecoder;
- } else if(REFAGGNINST == 1) {
- SBNUMSYMS = SDNUMINSYMS + SDNUMNEWSYMS;
- nTmp = 1;
- while((FX_DWORD)(1 << nTmp) < SBNUMSYMS) {
- nTmp ++;
- }
- SBSYMCODELEN = (uint8_t)nTmp;
- SBSYMCODES = (JBig2HuffmanCode*)m_pModule->JBig2_Malloc2(SBNUMSYMS, sizeof(JBig2HuffmanCode));
- for(I = 0; I < SBNUMSYMS; I++) {
- SBSYMCODES[I].codelen = SBSYMCODELEN;
- SBSYMCODES[I].code = I;
- }
- nVal = 0;
- nBits = 0;
- for(;;) {
- if(pStream->read1Bit(&nTmp) != 0) {
- m_pModule->JBig2_Free(SBSYMCODES);
- m_pModule->JBig2_Error("symbol dictionary decoding procedure (huffman): too short.");
- goto failed;
- }
- nVal = (nVal << 1) | nTmp;
- for(IDI = 0; IDI < SBNUMSYMS; IDI++) {
- if((nVal == SBSYMCODES[IDI].code)
- && (nBits == SBSYMCODES[IDI].codelen)) {
- break;
- }
- }
- if(IDI < SBNUMSYMS) {
- break;
- }
- }
- m_pModule->JBig2_Free(SBSYMCODES);
- JBIG2_ALLOC(SBHUFFRDX, CJBig2_HuffmanTable(HuffmanTable_B15,
- sizeof(HuffmanTable_B15) / sizeof(JBig2TableLine), HuffmanTable_HTOOB_B15));
- JBIG2_ALLOC(SBHUFFRSIZE, CJBig2_HuffmanTable(HuffmanTable_B1,
- sizeof(HuffmanTable_B1) / sizeof(JBig2TableLine), HuffmanTable_HTOOB_B1));
- if((pHuffmanDecoder->decodeAValue(SBHUFFRDX, &RDXI) != 0)
- || (pHuffmanDecoder->decodeAValue(SBHUFFRDX, &RDYI) != 0)
- || (pHuffmanDecoder->decodeAValue(SBHUFFRSIZE, &nVal) != 0)) {
- delete SBHUFFRDX;
- delete SBHUFFRSIZE;
- m_pModule->JBig2_Error("symbol dictionary decoding procedure (huffman): too short.");
- goto failed;
- }
- delete SBHUFFRDX;
- delete SBHUFFRSIZE;
- pStream->alignByte();
- nTmp = pStream->getOffset();
- SBSYMS = (CJBig2_Image**)m_pModule->JBig2_Malloc2(SBNUMSYMS, sizeof(CJBig2_Image*));
- JBIG2_memcpy(SBSYMS, SDINSYMS, SDNUMINSYMS * sizeof(CJBig2_Image*));
- JBIG2_memcpy(SBSYMS + SDNUMINSYMS, SDNEWSYMS, NSYMSDECODED * sizeof(CJBig2_Image*));
- JBIG2_ALLOC(pGRRD, CJBig2_GRRDProc());
- pGRRD->GRW = SYMWIDTH;
- pGRRD->GRH = HCHEIGHT;
- pGRRD->GRTEMPLATE = SDRTEMPLATE;
- pGRRD->GRREFERENCE = SBSYMS[IDI];
- pGRRD->GRREFERENCEDX = RDXI;
- pGRRD->GRREFERENCEDY = RDYI;
- pGRRD->TPGRON = 0;
- pGRRD->GRAT[0] = SDRAT[0];
- pGRRD->GRAT[1] = SDRAT[1];
- pGRRD->GRAT[2] = SDRAT[2];
- pGRRD->GRAT[3] = SDRAT[3];
- JBIG2_ALLOC(pArithDecoder, CJBig2_ArithDecoder(pStream));
- BS = pGRRD->decode(pArithDecoder, grContext);
- if(BS == NULL) {
- m_pModule->JBig2_Free(SBSYMS);
- delete pGRRD;
- delete pArithDecoder;
- goto failed;
- }
- pStream->alignByte();
- pStream->offset(2);
- if((FX_DWORD)nVal != (pStream->getOffset() - nTmp)) {
- delete BS;
- m_pModule->JBig2_Free(SBSYMS);
- delete pGRRD;
- delete pArithDecoder;
- m_pModule->JBig2_Error("symbol dictionary decoding procedure (huffman):"
- "bytes processed by generic refinement region decoding procedure doesn't equal SBHUFFRSIZE.");
- goto failed;
- }
- m_pModule->JBig2_Free(SBSYMS);
- delete pGRRD;
- delete pArithDecoder;
- }
- SDNEWSYMS[NSYMSDECODED] = BS;
- }
- if(SDREFAGG == 0) {
- SDNEWSYMWIDTHS[NSYMSDECODED] = SYMWIDTH;
- }
- NSYMSDECODED = NSYMSDECODED + 1;
+ TOTWIDTH = TOTWIDTH + SYMWIDTH;
+ }
+ if (SDREFAGG == 0) {
+ JBIG2_ALLOC(pGRD, CJBig2_GRDProc());
+ pGRD->MMR = 0;
+ pGRD->GBW = SYMWIDTH;
+ pGRD->GBH = HCHEIGHT;
+ pGRD->GBTEMPLATE = SDTEMPLATE;
+ pGRD->TPGDON = 0;
+ pGRD->USESKIP = 0;
+ pGRD->GBAT[0] = SDAT[0];
+ pGRD->GBAT[1] = SDAT[1];
+ pGRD->GBAT[2] = SDAT[2];
+ pGRD->GBAT[3] = SDAT[3];
+ pGRD->GBAT[4] = SDAT[4];
+ pGRD->GBAT[5] = SDAT[5];
+ pGRD->GBAT[6] = SDAT[6];
+ pGRD->GBAT[7] = SDAT[7];
+ BS = pGRD->decode_Arith(pArithDecoder, gbContext);
+ if (BS == NULL) {
+ delete pGRD;
+ goto failed;
}
- if(SDREFAGG == 0) {
- if(pHuffmanDecoder->decodeAValue(SDHUFFBMSIZE, (int32_t*)&BMSIZE) != 0) {
- m_pModule->JBig2_Error("symbol dictionary decoding procedure (huffman): too short.");
- goto failed;
- }
- pStream->alignByte();
- if(BMSIZE == 0) {
- stride = (TOTWIDTH + 7) >> 3;
- if(pStream->getByteLeft() >= stride * HCHEIGHT) {
- JBIG2_ALLOC(BHC, CJBig2_Image(TOTWIDTH, HCHEIGHT));
- for(I = 0; I < HCHEIGHT; I ++) {
- JBIG2_memcpy(BHC->m_pData + I * BHC->m_nStride, pStream->getPointer(), stride);
- pStream->offset(stride);
- }
- } else {
- m_pModule->JBig2_Error("symbol dictionary decoding procedure (huffman): too short.");
- goto failed;
- }
- } else {
- JBIG2_ALLOC(pGRD, CJBig2_GRDProc());
- pGRD->MMR = 1;
- pGRD->GBW = TOTWIDTH;
- pGRD->GBH = HCHEIGHT;
- FXCODEC_STATUS status = pGRD->Start_decode_MMR(&BHC, pStream);
- while(status == FXCODEC_STATUS_DECODE_TOBECONTINUE) {
- pGRD->Continue_decode(pPause);
- }
- delete pGRD;
- pStream->alignByte();
- }
- nTmp = 0;
- if (!BHC) {
- continue;
- }
- for(I = HCFIRSTSYM; I < NSYMSDECODED; I++) {
- SDNEWSYMS[I] = BHC->subImage(nTmp, 0, SDNEWSYMWIDTHS[I], HCHEIGHT);
- nTmp += SDNEWSYMWIDTHS[I];
- }
- delete BHC;
- BHC = NULL;
+ delete pGRD;
+ } else {
+ if (IAAI->decode(pArithDecoder, (int*)&REFAGGNINST) == -1) {
+ m_pModule->JBig2_Error(
+ "symbol dictionary decoding procedure (arith): too short.");
+ goto failed;
}
- }
- EXINDEX = 0;
- CUREXFLAG = 0;
- JBIG2_ALLOC(pTable, CJBig2_HuffmanTable(HuffmanTable_B1,
- sizeof(HuffmanTable_B1) / sizeof(JBig2TableLine), HuffmanTable_HTOOB_B1));
- EXFLAGS = (FX_BOOL*)m_pModule->JBig2_Malloc2(sizeof(FX_BOOL), (SDNUMINSYMS + SDNUMNEWSYMS));
- while(EXINDEX < SDNUMINSYMS + SDNUMNEWSYMS) {
- if(pHuffmanDecoder->decodeAValue(pTable, (int*)&EXRUNLENGTH) != 0) {
- delete pTable;
- m_pModule->JBig2_Free(EXFLAGS);
- m_pModule->JBig2_Error("symbol dictionary decoding procedure (huffman): too short.");
+ if (REFAGGNINST > 1) {
+ CJBig2_TRDProc* pDecoder;
+ JBIG2_ALLOC(pDecoder, CJBig2_TRDProc());
+ pDecoder->SBHUFF = SDHUFF;
+ pDecoder->SBREFINE = 1;
+ pDecoder->SBW = SYMWIDTH;
+ pDecoder->SBH = HCHEIGHT;
+ pDecoder->SBNUMINSTANCES = REFAGGNINST;
+ pDecoder->SBSTRIPS = 1;
+ pDecoder->SBNUMSYMS = SDNUMINSYMS + NSYMSDECODED;
+ SBNUMSYMS = pDecoder->SBNUMSYMS;
+ nTmp = 0;
+ while ((FX_DWORD)(1 << nTmp) < SBNUMSYMS) {
+ nTmp++;
+ }
+ SBSYMCODELEN = (uint8_t)nTmp;
+ pDecoder->SBSYMCODELEN = SBSYMCODELEN;
+ SBSYMS = (CJBig2_Image**)m_pModule->JBig2_Malloc2(
+ SBNUMSYMS, sizeof(CJBig2_Image*));
+ JBIG2_memcpy(SBSYMS, SDINSYMS, SDNUMINSYMS * sizeof(CJBig2_Image*));
+ JBIG2_memcpy(SBSYMS + SDNUMINSYMS, SDNEWSYMS,
+ NSYMSDECODED * sizeof(CJBig2_Image*));
+ pDecoder->SBSYMS = SBSYMS;
+ pDecoder->SBDEFPIXEL = 0;
+ pDecoder->SBCOMBOP = JBIG2_COMPOSE_OR;
+ pDecoder->TRANSPOSED = 0;
+ pDecoder->REFCORNER = JBIG2_CORNER_TOPLEFT;
+ pDecoder->SBDSOFFSET = 0;
+ JBIG2_ALLOC(SBHUFFFS, CJBig2_HuffmanTable(HuffmanTable_B6,
+ sizeof(HuffmanTable_B6) /
+ sizeof(JBig2TableLine),
+ HuffmanTable_HTOOB_B6));
+ JBIG2_ALLOC(SBHUFFDS, CJBig2_HuffmanTable(HuffmanTable_B8,
+ sizeof(HuffmanTable_B8) /
+ sizeof(JBig2TableLine),
+ HuffmanTable_HTOOB_B8));
+ JBIG2_ALLOC(SBHUFFDT, CJBig2_HuffmanTable(HuffmanTable_B11,
+ sizeof(HuffmanTable_B11) /
+ sizeof(JBig2TableLine),
+ HuffmanTable_HTOOB_B11));
+ JBIG2_ALLOC(SBHUFFRDW, CJBig2_HuffmanTable(HuffmanTable_B15,
+ sizeof(HuffmanTable_B15) /
+ sizeof(JBig2TableLine),
+ HuffmanTable_HTOOB_B15));
+ JBIG2_ALLOC(SBHUFFRDH, CJBig2_HuffmanTable(HuffmanTable_B15,
+ sizeof(HuffmanTable_B15) /
+ sizeof(JBig2TableLine),
+ HuffmanTable_HTOOB_B15));
+ JBIG2_ALLOC(SBHUFFRDX, CJBig2_HuffmanTable(HuffmanTable_B15,
+ sizeof(HuffmanTable_B15) /
+ sizeof(JBig2TableLine),
+ HuffmanTable_HTOOB_B15));
+ JBIG2_ALLOC(SBHUFFRDY, CJBig2_HuffmanTable(HuffmanTable_B15,
+ sizeof(HuffmanTable_B15) /
+ sizeof(JBig2TableLine),
+ HuffmanTable_HTOOB_B15));
+ JBIG2_ALLOC(SBHUFFRSIZE,
+ CJBig2_HuffmanTable(
+ HuffmanTable_B1,
+ sizeof(HuffmanTable_B1) / sizeof(JBig2TableLine),
+ HuffmanTable_HTOOB_B1));
+ pDecoder->SBHUFFFS = SBHUFFFS;
+ pDecoder->SBHUFFDS = SBHUFFDS;
+ pDecoder->SBHUFFDT = SBHUFFDT;
+ pDecoder->SBHUFFRDW = SBHUFFRDW;
+ pDecoder->SBHUFFRDH = SBHUFFRDH;
+ pDecoder->SBHUFFRDX = SBHUFFRDX;
+ pDecoder->SBHUFFRDY = SBHUFFRDY;
+ pDecoder->SBHUFFRSIZE = SBHUFFRSIZE;
+ pDecoder->SBRTEMPLATE = SDRTEMPLATE;
+ pDecoder->SBRAT[0] = SDRAT[0];
+ pDecoder->SBRAT[1] = SDRAT[1];
+ pDecoder->SBRAT[2] = SDRAT[2];
+ pDecoder->SBRAT[3] = SDRAT[3];
+ JBig2IntDecoderState ids;
+ ids.IADT = IADT;
+ ids.IAFS = IAFS;
+ ids.IADS = IADS;
+ ids.IAIT = IAIT;
+ ids.IARI = IARI;
+ ids.IARDW = IARDW;
+ ids.IARDH = IARDH;
+ ids.IARDX = IARDX;
+ ids.IARDY = IARDY;
+ ids.IAID = IAID;
+ BS = pDecoder->decode_Arith(pArithDecoder, grContext, &ids);
+ if (BS == NULL) {
+ m_pModule->JBig2_Free(SBSYMS);
+ delete SBHUFFFS;
+ delete SBHUFFDS;
+ delete SBHUFFDT;
+ delete SBHUFFRDW;
+ delete SBHUFFRDH;
+ delete SBHUFFRDX;
+ delete SBHUFFRDY;
+ delete SBHUFFRSIZE;
+ delete pDecoder;
goto failed;
- }
- if (EXINDEX + EXRUNLENGTH > SDNUMINSYMS + SDNUMNEWSYMS) {
- delete pTable;
- m_pModule->JBig2_Free(EXFLAGS);
- m_pModule->JBig2_Error("symbol dictionary decoding procedure (arith): Invalid EXRUNLENGTH value.");
+ }
+ m_pModule->JBig2_Free(SBSYMS);
+ delete SBHUFFFS;
+ delete SBHUFFDS;
+ delete SBHUFFDT;
+ delete SBHUFFRDW;
+ delete SBHUFFRDH;
+ delete SBHUFFRDX;
+ delete SBHUFFRDY;
+ delete SBHUFFRSIZE;
+ delete pDecoder;
+ } else if (REFAGGNINST == 1) {
+ SBNUMSYMS = SDNUMINSYMS + NSYMSDECODED;
+ if (IAID->decode(pArithDecoder, (int*)&IDI) == -1) {
+ m_pModule->JBig2_Error(
+ "symbol dictionary decoding procedure (arith): too short.");
goto failed;
+ }
+ if ((IARDX->decode(pArithDecoder, &RDXI) == -1) ||
+ (IARDY->decode(pArithDecoder, &RDYI) == -1)) {
+ m_pModule->JBig2_Error(
+ "symbol dictionary decoding procedure (arith): too short.");
+ goto failed;
+ }
+ if (IDI >= SBNUMSYMS) {
+ m_pModule->JBig2_Error(
+ "symbol dictionary decoding procedure (arith):"
+ " refinement references unknown symbol %d",
+ IDI);
+ goto failed;
+ }
+ SBSYMS = (CJBig2_Image**)m_pModule->JBig2_Malloc2(
+ SBNUMSYMS, sizeof(CJBig2_Image*));
+ JBIG2_memcpy(SBSYMS, SDINSYMS, SDNUMINSYMS * sizeof(CJBig2_Image*));
+ JBIG2_memcpy(SBSYMS + SDNUMINSYMS, SDNEWSYMS,
+ NSYMSDECODED * sizeof(CJBig2_Image*));
+ if (!SBSYMS[IDI]) {
+ m_pModule->JBig2_Free(SBSYMS);
+ goto failed;
+ }
+ JBIG2_ALLOC(pGRRD, CJBig2_GRRDProc());
+ pGRRD->GRW = SYMWIDTH;
+ pGRRD->GRH = HCHEIGHT;
+ pGRRD->GRTEMPLATE = SDRTEMPLATE;
+ pGRRD->GRREFERENCE = SBSYMS[IDI];
+ pGRRD->GRREFERENCEDX = RDXI;
+ pGRRD->GRREFERENCEDY = RDYI;
+ pGRRD->TPGRON = 0;
+ pGRRD->GRAT[0] = SDRAT[0];
+ pGRRD->GRAT[1] = SDRAT[1];
+ pGRRD->GRAT[2] = SDRAT[2];
+ pGRRD->GRAT[3] = SDRAT[3];
+ BS = pGRRD->decode(pArithDecoder, grContext);
+ if (BS == NULL) {
+ m_pModule->JBig2_Free(SBSYMS);
+ delete pGRRD;
+ goto failed;
+ }
+ m_pModule->JBig2_Free(SBSYMS);
+ delete pGRRD;
}
- if(EXRUNLENGTH != 0) {
- for(I = EXINDEX; I < EXINDEX + EXRUNLENGTH; I++) {
- EXFLAGS[I] = CUREXFLAG;
- }
- }
- EXINDEX = EXINDEX + EXRUNLENGTH;
- CUREXFLAG = !CUREXFLAG;
+ }
+ SDNEWSYMS[NSYMSDECODED] = BS;
+ BS = NULL;
+ NSYMSDECODED = NSYMSDECODED + 1;
}
- delete pTable;
- JBIG2_ALLOC(pDict, CJBig2_SymbolDict());
- pDict->SDNUMEXSYMS = SDNUMEXSYMS;
- pDict->SDEXSYMS = (CJBig2_Image**)m_pModule->JBig2_Malloc2(sizeof(CJBig2_Image*), SDNUMEXSYMS);
- I = J = 0;
- for(I = 0; I < SDNUMINSYMS + SDNUMNEWSYMS; I++) {
- if(EXFLAGS[I] && J < SDNUMEXSYMS) {
- if(I < SDNUMINSYMS) {
- JBIG2_ALLOC(pDict->SDEXSYMS[J], CJBig2_Image(*SDINSYMS[I]));
- } else {
- pDict->SDEXSYMS[J] = SDNEWSYMS[I - SDNUMINSYMS];
- }
- J = J + 1;
- } else if (!EXFLAGS[I] && I >= SDNUMINSYMS) {
- delete SDNEWSYMS[I - SDNUMINSYMS];
- }
+ }
+ EXINDEX = 0;
+ CUREXFLAG = 0;
+ EXFLAGS = (FX_BOOL*)m_pModule->JBig2_Malloc2(sizeof(FX_BOOL),
+ (SDNUMINSYMS + SDNUMNEWSYMS));
+ while (EXINDEX < SDNUMINSYMS + SDNUMNEWSYMS) {
+ if (IAEX->decode(pArithDecoder, (int*)&EXRUNLENGTH) == -1) {
+ m_pModule->JBig2_Free(EXFLAGS);
+ m_pModule->JBig2_Error(
+ "symbol dictionary decoding procedure (arith): too short.");
+ goto failed;
}
- if (J < SDNUMEXSYMS) {
- pDict->SDNUMEXSYMS = J;
+ if (EXINDEX + EXRUNLENGTH > SDNUMINSYMS + SDNUMNEWSYMS) {
+ m_pModule->JBig2_Free(EXFLAGS);
+ m_pModule->JBig2_Error(
+ "symbol dictionary decoding procedure (arith): Invalid EXRUNLENGTH "
+ "value.");
+ goto failed;
}
- m_pModule->JBig2_Free(EXFLAGS);
- m_pModule->JBig2_Free(SDNEWSYMS);
- if(SDREFAGG == 0) {
- m_pModule->JBig2_Free(SDNEWSYMWIDTHS);
+ if (EXRUNLENGTH != 0) {
+ for (I = EXINDEX; I < EXINDEX + EXRUNLENGTH; I++) {
+ EXFLAGS[I] = CUREXFLAG;
+ }
}
- delete pHuffmanDecoder;
- return pDict;
-failed:
- for(I = 0; I < NSYMSDECODED; I++) {
- delete SDNEWSYMS[I];
+ EXINDEX = EXINDEX + EXRUNLENGTH;
+ CUREXFLAG = !CUREXFLAG;
+ }
+ JBIG2_ALLOC(pDict, CJBig2_SymbolDict());
+ pDict->SDNUMEXSYMS = SDNUMEXSYMS;
+ pDict->SDEXSYMS = (CJBig2_Image**)m_pModule->JBig2_Malloc2(
+ sizeof(CJBig2_Image*), SDNUMEXSYMS);
+ I = J = 0;
+ for (I = 0; I < SDNUMINSYMS + SDNUMNEWSYMS; I++) {
+ if (EXFLAGS[I] && J < SDNUMEXSYMS) {
+ if (I < SDNUMINSYMS) {
+ JBIG2_ALLOC(pDict->SDEXSYMS[J], CJBig2_Image(*SDINSYMS[I]));
+ } else {
+ pDict->SDEXSYMS[J] = SDNEWSYMS[I - SDNUMINSYMS];
+ }
+ J = J + 1;
+ } else if (!EXFLAGS[I] && I >= SDNUMINSYMS) {
+ delete SDNEWSYMS[I - SDNUMINSYMS];
}
- m_pModule->JBig2_Free(SDNEWSYMS);
- if(SDREFAGG == 0) {
- m_pModule->JBig2_Free(SDNEWSYMWIDTHS);
+ }
+ if (J < SDNUMEXSYMS) {
+ pDict->SDNUMEXSYMS = J;
+ }
+ m_pModule->JBig2_Free(EXFLAGS);
+ m_pModule->JBig2_Free(SDNEWSYMS);
+ delete IADH;
+ delete IADW;
+ delete IAAI;
+ delete IARDX;
+ delete IARDY;
+ delete IAEX;
+ delete IAID;
+ delete IADT;
+ delete IAFS;
+ delete IADS;
+ delete IAIT;
+ delete IARI;
+ delete IARDW;
+ delete IARDH;
+ return pDict;
+failed:
+ for (I = 0; I < NSYMSDECODED; I++) {
+ if (SDNEWSYMS[I]) {
+ delete SDNEWSYMS[I];
+ SDNEWSYMS[I] = NULL;
}
- delete pHuffmanDecoder;
- return NULL;
+ }
+ m_pModule->JBig2_Free(SDNEWSYMS);
+ delete IADH;
+ delete IADW;
+ delete IAAI;
+ delete IARDX;
+ delete IARDY;
+ delete IAEX;
+ delete IAID;
+ delete IADT;
+ delete IAFS;
+ delete IADS;
+ delete IAIT;
+ delete IARI;
+ delete IARDW;
+ delete IARDH;
+ return NULL;
}
-CJBig2_Image *CJBig2_HTRDProc::decode_Arith(CJBig2_ArithDecoder *pArithDecoder,
- JBig2ArithCtx *gbContext, IFX_Pause* pPause)
-{
- FX_DWORD ng, mg;
- int32_t x, y;
- CJBig2_Image *HSKIP;
- FX_DWORD HBPP;
- FX_DWORD *GI;
- CJBig2_Image *HTREG;
- CJBig2_GSIDProc *pGID;
- JBIG2_ALLOC(HTREG, CJBig2_Image(HBW, HBH));
- HTREG->fill(HDEFPIXEL);
- HSKIP = NULL;
- if(HENABLESKIP == 1) {
- JBIG2_ALLOC(HSKIP, CJBig2_Image(HGW, HGH));
- for(mg = 0; mg < HGH; mg++) {
- for(ng = 0; ng < HGW; ng++) {
- x = (HGX + mg * HRY + ng * HRX) >> 8;
- y = (HGY + mg * HRX - ng * HRY) >> 8;
- if((x + HPW <= 0) | (x >= (int32_t)HBW)
- | (y + HPH <= 0) | (y >= (int32_t)HPH)) {
- HSKIP->setPixel(ng, mg, 1);
- } else {
- HSKIP->setPixel(ng, mg, 0);
- }
- }
- }
+CJBig2_SymbolDict* CJBig2_SDDProc::decode_Huffman(CJBig2_BitStream* pStream,
+ JBig2ArithCtx* gbContext,
+ JBig2ArithCtx* grContext,
+ IFX_Pause* pPause) {
+ CJBig2_Image** SDNEWSYMS;
+ FX_DWORD* SDNEWSYMWIDTHS;
+ FX_DWORD HCHEIGHT, NSYMSDECODED;
+ int32_t HCDH;
+ FX_DWORD SYMWIDTH, TOTWIDTH, HCFIRSTSYM;
+ int32_t DW;
+ CJBig2_Image *BS, *BHC;
+ FX_DWORD I, J, REFAGGNINST;
+ FX_BOOL* EXFLAGS;
+ FX_DWORD EXINDEX;
+ FX_BOOL CUREXFLAG;
+ FX_DWORD EXRUNLENGTH;
+ int32_t nVal, nBits;
+ FX_DWORD nTmp;
+ FX_DWORD SBNUMSYMS;
+ uint8_t SBSYMCODELEN;
+ JBig2HuffmanCode* SBSYMCODES;
+ FX_DWORD IDI;
+ int32_t RDXI, RDYI;
+ FX_DWORD BMSIZE;
+ FX_DWORD stride;
+ CJBig2_Image** SBSYMS;
+ CJBig2_HuffmanTable *SBHUFFFS, *SBHUFFDS, *SBHUFFDT, *SBHUFFRDW, *SBHUFFRDH,
+ *SBHUFFRDX, *SBHUFFRDY, *SBHUFFRSIZE, *pTable;
+ CJBig2_HuffmanDecoder* pHuffmanDecoder;
+ CJBig2_GRRDProc* pGRRD;
+ CJBig2_ArithDecoder* pArithDecoder;
+ CJBig2_GRDProc* pGRD;
+ CJBig2_SymbolDict* pDict;
+ JBIG2_ALLOC(pHuffmanDecoder, CJBig2_HuffmanDecoder(pStream));
+ SDNEWSYMS = (CJBig2_Image**)m_pModule->JBig2_Malloc2(SDNUMNEWSYMS,
+ sizeof(CJBig2_Image*));
+ FXSYS_memset(SDNEWSYMS, 0, SDNUMNEWSYMS * sizeof(CJBig2_Image*));
+ SDNEWSYMWIDTHS = NULL;
+ BHC = NULL;
+ if (SDREFAGG == 0) {
+ SDNEWSYMWIDTHS =
+ (FX_DWORD*)m_pModule->JBig2_Malloc2(SDNUMNEWSYMS, sizeof(FX_DWORD));
+ FXSYS_memset(SDNEWSYMWIDTHS, 0, SDNUMNEWSYMS * sizeof(FX_DWORD));
+ }
+ HCHEIGHT = 0;
+ NSYMSDECODED = 0;
+ BS = NULL;
+ while (NSYMSDECODED < SDNUMNEWSYMS) {
+ if (pHuffmanDecoder->decodeAValue(SDHUFFDH, &HCDH) != 0) {
+ m_pModule->JBig2_Error(
+ "symbol dictionary decoding procedure (huffman): too short.");
+ goto failed;
}
- HBPP = 1;
- while((FX_DWORD)(1 << HBPP) < HNUMPATS) {
- HBPP ++;
+ HCHEIGHT = HCHEIGHT + HCDH;
+ if ((int)HCHEIGHT < 0 || (int)HCHEIGHT > JBIG2_MAX_IMAGE_SIZE) {
+ m_pModule->JBig2_Error(
+ "symbol dictionary decoding procedure (huffman): invalid HCHEIGHT "
+ "value.");
+ goto failed;
}
- JBIG2_ALLOC(pGID, CJBig2_GSIDProc());
- pGID->GSMMR = HMMR;
- pGID->GSW = HGW;
- pGID->GSH = HGH;
- pGID->GSBPP = (uint8_t)HBPP;
- pGID->GSUSESKIP = HENABLESKIP;
- pGID->GSKIP = HSKIP;
- pGID->GSTEMPLATE = HTEMPLATE;
- GI = pGID->decode_Arith(pArithDecoder, gbContext, pPause);
- if(GI == NULL) {
+ SYMWIDTH = 0;
+ TOTWIDTH = 0;
+ HCFIRSTSYM = NSYMSDECODED;
+ for (;;) {
+ nVal = pHuffmanDecoder->decodeAValue(SDHUFFDW, &DW);
+ if (nVal == JBIG2_OOB) {
+ break;
+ } else if (nVal != 0) {
+ m_pModule->JBig2_Error(
+ "symbol dictionary decoding procedure (huffman): too short.");
goto failed;
- }
- for(mg = 0; mg < HGH; mg++) {
- for(ng = 0; ng < HGW; ng++) {
- x = (HGX + mg * HRY + ng * HRX) >> 8;
- y = (HGY + mg * HRX - ng * HRY) >> 8;
- FX_DWORD pat_index = GI[mg * HGW + ng];
- if (pat_index >= HNUMPATS) {
- pat_index = HNUMPATS - 1;
+ } else {
+ if (NSYMSDECODED >= SDNUMNEWSYMS) {
+ m_pModule->JBig2_Error(
+ "symbol dictionary decoding procedure (huffman): NSYMSDECODED >= "
+ "SDNUMNEWSYMS.");
+ goto failed;
+ }
+ SYMWIDTH = SYMWIDTH + DW;
+ if ((int)SYMWIDTH < 0 || (int)SYMWIDTH > JBIG2_MAX_IMAGE_SIZE) {
+ m_pModule->JBig2_Error(
+ "symbol dictionary decoding procedure (huffman): invalid "
+ "SYMWIDTH value.");
+ goto failed;
+ } else if (HCHEIGHT == 0 || SYMWIDTH == 0) {
+ TOTWIDTH = TOTWIDTH + SYMWIDTH;
+ SDNEWSYMS[NSYMSDECODED] = NULL;
+ NSYMSDECODED = NSYMSDECODED + 1;
+ continue;
+ }
+ TOTWIDTH = TOTWIDTH + SYMWIDTH;
+ }
+ if (SDREFAGG == 1) {
+ if (pHuffmanDecoder->decodeAValue(SDHUFFAGGINST, (int*)&REFAGGNINST) !=
+ 0) {
+ m_pModule->JBig2_Error(
+ "symbol dictionary decoding procedure (huffman): too short.");
+ goto failed;
+ }
+ BS = NULL;
+ if (REFAGGNINST > 1) {
+ CJBig2_TRDProc* pDecoder;
+ JBIG2_ALLOC(pDecoder, CJBig2_TRDProc());
+ pDecoder->SBHUFF = SDHUFF;
+ pDecoder->SBREFINE = 1;
+ pDecoder->SBW = SYMWIDTH;
+ pDecoder->SBH = HCHEIGHT;
+ pDecoder->SBNUMINSTANCES = REFAGGNINST;
+ pDecoder->SBSTRIPS = 1;
+ pDecoder->SBNUMSYMS = SDNUMINSYMS + NSYMSDECODED;
+ SBNUMSYMS = pDecoder->SBNUMSYMS;
+ SBSYMCODES = (JBig2HuffmanCode*)m_pModule->JBig2_Malloc2(
+ SBNUMSYMS, sizeof(JBig2HuffmanCode));
+ nTmp = 1;
+ while ((FX_DWORD)(1 << nTmp) < SBNUMSYMS) {
+ nTmp++;
+ }
+ for (I = 0; I < SBNUMSYMS; I++) {
+ SBSYMCODES[I].codelen = nTmp;
+ SBSYMCODES[I].code = I;
+ }
+ pDecoder->SBSYMCODES = SBSYMCODES;
+ SBSYMS = (CJBig2_Image**)m_pModule->JBig2_Malloc2(
+ SBNUMSYMS, sizeof(CJBig2_Image*));
+ JBIG2_memcpy(SBSYMS, SDINSYMS, SDNUMINSYMS * sizeof(CJBig2_Image*));
+ JBIG2_memcpy(SBSYMS + SDNUMINSYMS, SDNEWSYMS,
+ NSYMSDECODED * sizeof(CJBig2_Image*));
+ pDecoder->SBSYMS = SBSYMS;
+ pDecoder->SBDEFPIXEL = 0;
+ pDecoder->SBCOMBOP = JBIG2_COMPOSE_OR;
+ pDecoder->TRANSPOSED = 0;
+ pDecoder->REFCORNER = JBIG2_CORNER_TOPLEFT;
+ pDecoder->SBDSOFFSET = 0;
+ JBIG2_ALLOC(SBHUFFFS, CJBig2_HuffmanTable(HuffmanTable_B6,
+ sizeof(HuffmanTable_B6) /
+ sizeof(JBig2TableLine),
+ HuffmanTable_HTOOB_B6));
+ JBIG2_ALLOC(SBHUFFDS, CJBig2_HuffmanTable(HuffmanTable_B8,
+ sizeof(HuffmanTable_B8) /
+ sizeof(JBig2TableLine),
+ HuffmanTable_HTOOB_B8));
+ JBIG2_ALLOC(SBHUFFDT, CJBig2_HuffmanTable(HuffmanTable_B11,
+ sizeof(HuffmanTable_B11) /
+ sizeof(JBig2TableLine),
+ HuffmanTable_HTOOB_B11));
+ JBIG2_ALLOC(SBHUFFRDW, CJBig2_HuffmanTable(HuffmanTable_B15,
+ sizeof(HuffmanTable_B15) /
+ sizeof(JBig2TableLine),
+ HuffmanTable_HTOOB_B15));
+ JBIG2_ALLOC(SBHUFFRDH, CJBig2_HuffmanTable(HuffmanTable_B15,
+ sizeof(HuffmanTable_B15) /
+ sizeof(JBig2TableLine),
+ HuffmanTable_HTOOB_B15));
+ JBIG2_ALLOC(SBHUFFRDX, CJBig2_HuffmanTable(HuffmanTable_B15,
+ sizeof(HuffmanTable_B15) /
+ sizeof(JBig2TableLine),
+ HuffmanTable_HTOOB_B15));
+ JBIG2_ALLOC(SBHUFFRDY, CJBig2_HuffmanTable(HuffmanTable_B15,
+ sizeof(HuffmanTable_B15) /
+ sizeof(JBig2TableLine),
+ HuffmanTable_HTOOB_B15));
+ JBIG2_ALLOC(SBHUFFRSIZE,
+ CJBig2_HuffmanTable(
+ HuffmanTable_B1,
+ sizeof(HuffmanTable_B1) / sizeof(JBig2TableLine),
+ HuffmanTable_HTOOB_B1));
+ pDecoder->SBHUFFFS = SBHUFFFS;
+ pDecoder->SBHUFFDS = SBHUFFDS;
+ pDecoder->SBHUFFDT = SBHUFFDT;
+ pDecoder->SBHUFFRDW = SBHUFFRDW;
+ pDecoder->SBHUFFRDH = SBHUFFRDH;
+ pDecoder->SBHUFFRDX = SBHUFFRDX;
+ pDecoder->SBHUFFRDY = SBHUFFRDY;
+ pDecoder->SBHUFFRSIZE = SBHUFFRSIZE;
+ pDecoder->SBRTEMPLATE = SDRTEMPLATE;
+ pDecoder->SBRAT[0] = SDRAT[0];
+ pDecoder->SBRAT[1] = SDRAT[1];
+ pDecoder->SBRAT[2] = SDRAT[2];
+ pDecoder->SBRAT[3] = SDRAT[3];
+ BS = pDecoder->decode_Huffman(pStream, grContext);
+ if (BS == NULL) {
+ m_pModule->JBig2_Free(SBSYMCODES);
+ m_pModule->JBig2_Free(SBSYMS);
+ delete SBHUFFFS;
+ delete SBHUFFDS;
+ delete SBHUFFDT;
+ delete SBHUFFRDW;
+ delete SBHUFFRDH;
+ delete SBHUFFRDX;
+ delete SBHUFFRDY;
+ delete SBHUFFRSIZE;
+ delete pDecoder;
+ goto failed;
+ }
+ m_pModule->JBig2_Free(SBSYMCODES);
+ m_pModule->JBig2_Free(SBSYMS);
+ delete SBHUFFFS;
+ delete SBHUFFDS;
+ delete SBHUFFDT;
+ delete SBHUFFRDW;
+ delete SBHUFFRDH;
+ delete SBHUFFRDX;
+ delete SBHUFFRDY;
+ delete SBHUFFRSIZE;
+ delete pDecoder;
+ } else if (REFAGGNINST == 1) {
+ SBNUMSYMS = SDNUMINSYMS + SDNUMNEWSYMS;
+ nTmp = 1;
+ while ((FX_DWORD)(1 << nTmp) < SBNUMSYMS) {
+ nTmp++;
+ }
+ SBSYMCODELEN = (uint8_t)nTmp;
+ SBSYMCODES = (JBig2HuffmanCode*)m_pModule->JBig2_Malloc2(
+ SBNUMSYMS, sizeof(JBig2HuffmanCode));
+ for (I = 0; I < SBNUMSYMS; I++) {
+ SBSYMCODES[I].codelen = SBSYMCODELEN;
+ SBSYMCODES[I].code = I;
+ }
+ nVal = 0;
+ nBits = 0;
+ for (;;) {
+ if (pStream->read1Bit(&nTmp) != 0) {
+ m_pModule->JBig2_Free(SBSYMCODES);
+ m_pModule->JBig2_Error(
+ "symbol dictionary decoding procedure (huffman): too short.");
+ goto failed;
+ }
+ nVal = (nVal << 1) | nTmp;
+ for (IDI = 0; IDI < SBNUMSYMS; IDI++) {
+ if ((nVal == SBSYMCODES[IDI].code) &&
+ (nBits == SBSYMCODES[IDI].codelen)) {
+ break;
+ }
+ }
+ if (IDI < SBNUMSYMS) {
+ break;
}
- HTREG->composeFrom(x, y, HPATS[pat_index], HCOMBOP);
+ }
+ m_pModule->JBig2_Free(SBSYMCODES);
+ JBIG2_ALLOC(SBHUFFRDX, CJBig2_HuffmanTable(HuffmanTable_B15,
+ sizeof(HuffmanTable_B15) /
+ sizeof(JBig2TableLine),
+ HuffmanTable_HTOOB_B15));
+ JBIG2_ALLOC(SBHUFFRSIZE,
+ CJBig2_HuffmanTable(
+ HuffmanTable_B1,
+ sizeof(HuffmanTable_B1) / sizeof(JBig2TableLine),
+ HuffmanTable_HTOOB_B1));
+ if ((pHuffmanDecoder->decodeAValue(SBHUFFRDX, &RDXI) != 0) ||
+ (pHuffmanDecoder->decodeAValue(SBHUFFRDX, &RDYI) != 0) ||
+ (pHuffmanDecoder->decodeAValue(SBHUFFRSIZE, &nVal) != 0)) {
+ delete SBHUFFRDX;
+ delete SBHUFFRSIZE;
+ m_pModule->JBig2_Error(
+ "symbol dictionary decoding procedure (huffman): too short.");
+ goto failed;
+ }
+ delete SBHUFFRDX;
+ delete SBHUFFRSIZE;
+ pStream->alignByte();
+ nTmp = pStream->getOffset();
+ SBSYMS = (CJBig2_Image**)m_pModule->JBig2_Malloc2(
+ SBNUMSYMS, sizeof(CJBig2_Image*));
+ JBIG2_memcpy(SBSYMS, SDINSYMS, SDNUMINSYMS * sizeof(CJBig2_Image*));
+ JBIG2_memcpy(SBSYMS + SDNUMINSYMS, SDNEWSYMS,
+ NSYMSDECODED * sizeof(CJBig2_Image*));
+ JBIG2_ALLOC(pGRRD, CJBig2_GRRDProc());
+ pGRRD->GRW = SYMWIDTH;
+ pGRRD->GRH = HCHEIGHT;
+ pGRRD->GRTEMPLATE = SDRTEMPLATE;
+ pGRRD->GRREFERENCE = SBSYMS[IDI];
+ pGRRD->GRREFERENCEDX = RDXI;
+ pGRRD->GRREFERENCEDY = RDYI;
+ pGRRD->TPGRON = 0;
+ pGRRD->GRAT[0] = SDRAT[0];
+ pGRRD->GRAT[1] = SDRAT[1];
+ pGRRD->GRAT[2] = SDRAT[2];
+ pGRRD->GRAT[3] = SDRAT[3];
+ JBIG2_ALLOC(pArithDecoder, CJBig2_ArithDecoder(pStream));
+ BS = pGRRD->decode(pArithDecoder, grContext);
+ if (BS == NULL) {
+ m_pModule->JBig2_Free(SBSYMS);
+ delete pGRRD;
+ delete pArithDecoder;
+ goto failed;
+ }
+ pStream->alignByte();
+ pStream->offset(2);
+ if ((FX_DWORD)nVal != (pStream->getOffset() - nTmp)) {
+ delete BS;
+ m_pModule->JBig2_Free(SBSYMS);
+ delete pGRRD;
+ delete pArithDecoder;
+ m_pModule->JBig2_Error(
+ "symbol dictionary decoding procedure (huffman):"
+ "bytes processed by generic refinement region decoding "
+ "procedure doesn't equal SBHUFFRSIZE.");
+ goto failed;
+ }
+ m_pModule->JBig2_Free(SBSYMS);
+ delete pGRRD;
+ delete pArithDecoder;
}
+ SDNEWSYMS[NSYMSDECODED] = BS;
+ }
+ if (SDREFAGG == 0) {
+ SDNEWSYMWIDTHS[NSYMSDECODED] = SYMWIDTH;
+ }
+ NSYMSDECODED = NSYMSDECODED + 1;
}
- m_pModule->JBig2_Free(GI);
- delete HSKIP;
- delete pGID;
- return HTREG;
-failed:
- delete HSKIP;
- delete pGID;
- delete HTREG;
- return NULL;
-}
-CJBig2_Image *CJBig2_HTRDProc::decode_MMR(CJBig2_BitStream *pStream, IFX_Pause* pPause)
-{
- FX_DWORD ng, mg;
- int32_t x, y;
- FX_DWORD HBPP;
- FX_DWORD *GI;
- CJBig2_Image *HTREG;
- CJBig2_GSIDProc *pGID;
- JBIG2_ALLOC(HTREG, CJBig2_Image(HBW, HBH));
- HTREG->fill(HDEFPIXEL);
- HBPP = 1;
- while((FX_DWORD)(1 << HBPP) < HNUMPATS) {
- HBPP ++;
- }
- JBIG2_ALLOC(pGID, CJBig2_GSIDProc());
- pGID->GSMMR = HMMR;
- pGID->GSW = HGW;
- pGID->GSH = HGH;
- pGID->GSBPP = (uint8_t)HBPP;
- pGID->GSUSESKIP = 0;
- GI = pGID->decode_MMR(pStream, pPause);
- if(GI == NULL) {
+ if (SDREFAGG == 0) {
+ if (pHuffmanDecoder->decodeAValue(SDHUFFBMSIZE, (int32_t*)&BMSIZE) != 0) {
+ m_pModule->JBig2_Error(
+ "symbol dictionary decoding procedure (huffman): too short.");
goto failed;
- }
- for(mg = 0; mg < HGH; mg++) {
- for(ng = 0; ng < HGW; ng++) {
- x = (HGX + mg * HRY + ng * HRX) >> 8;
- y = (HGY + mg * HRX - ng * HRY) >> 8;
- FX_DWORD pat_index = GI[mg * HGW + ng];
- if (pat_index >= HNUMPATS) {
- pat_index = HNUMPATS - 1;
- }
- HTREG->composeFrom(x, y, HPATS[pat_index], HCOMBOP);
+ }
+ pStream->alignByte();
+ if (BMSIZE == 0) {
+ stride = (TOTWIDTH + 7) >> 3;
+ if (pStream->getByteLeft() >= stride * HCHEIGHT) {
+ JBIG2_ALLOC(BHC, CJBig2_Image(TOTWIDTH, HCHEIGHT));
+ for (I = 0; I < HCHEIGHT; I++) {
+ JBIG2_memcpy(BHC->m_pData + I * BHC->m_nStride,
+ pStream->getPointer(), stride);
+ pStream->offset(stride);
+ }
+ } else {
+ m_pModule->JBig2_Error(
+ "symbol dictionary decoding procedure (huffman): too short.");
+ goto failed;
}
+ } else {
+ JBIG2_ALLOC(pGRD, CJBig2_GRDProc());
+ pGRD->MMR = 1;
+ pGRD->GBW = TOTWIDTH;
+ pGRD->GBH = HCHEIGHT;
+ FXCODEC_STATUS status = pGRD->Start_decode_MMR(&BHC, pStream);
+ while (status == FXCODEC_STATUS_DECODE_TOBECONTINUE) {
+ pGRD->Continue_decode(pPause);
+ }
+ delete pGRD;
+ pStream->alignByte();
+ }
+ nTmp = 0;
+ if (!BHC) {
+ continue;
+ }
+ for (I = HCFIRSTSYM; I < NSYMSDECODED; I++) {
+ SDNEWSYMS[I] = BHC->subImage(nTmp, 0, SDNEWSYMWIDTHS[I], HCHEIGHT);
+ nTmp += SDNEWSYMWIDTHS[I];
+ }
+ delete BHC;
+ BHC = NULL;
+ }
+ }
+ EXINDEX = 0;
+ CUREXFLAG = 0;
+ JBIG2_ALLOC(pTable, CJBig2_HuffmanTable(
+ HuffmanTable_B1,
+ sizeof(HuffmanTable_B1) / sizeof(JBig2TableLine),
+ HuffmanTable_HTOOB_B1));
+ EXFLAGS = (FX_BOOL*)m_pModule->JBig2_Malloc2(sizeof(FX_BOOL),
+ (SDNUMINSYMS + SDNUMNEWSYMS));
+ while (EXINDEX < SDNUMINSYMS + SDNUMNEWSYMS) {
+ if (pHuffmanDecoder->decodeAValue(pTable, (int*)&EXRUNLENGTH) != 0) {
+ delete pTable;
+ m_pModule->JBig2_Free(EXFLAGS);
+ m_pModule->JBig2_Error(
+ "symbol dictionary decoding procedure (huffman): too short.");
+ goto failed;
+ }
+ if (EXINDEX + EXRUNLENGTH > SDNUMINSYMS + SDNUMNEWSYMS) {
+ delete pTable;
+ m_pModule->JBig2_Free(EXFLAGS);
+ m_pModule->JBig2_Error(
+ "symbol dictionary decoding procedure (arith): Invalid EXRUNLENGTH "
+ "value.");
+ goto failed;
+ }
+ if (EXRUNLENGTH != 0) {
+ for (I = EXINDEX; I < EXINDEX + EXRUNLENGTH; I++) {
+ EXFLAGS[I] = CUREXFLAG;
+ }
}
- m_pModule->JBig2_Free(GI);
- delete pGID;
- return HTREG;
+ EXINDEX = EXINDEX + EXRUNLENGTH;
+ CUREXFLAG = !CUREXFLAG;
+ }
+ delete pTable;
+ JBIG2_ALLOC(pDict, CJBig2_SymbolDict());
+ pDict->SDNUMEXSYMS = SDNUMEXSYMS;
+ pDict->SDEXSYMS = (CJBig2_Image**)m_pModule->JBig2_Malloc2(
+ sizeof(CJBig2_Image*), SDNUMEXSYMS);
+ I = J = 0;
+ for (I = 0; I < SDNUMINSYMS + SDNUMNEWSYMS; I++) {
+ if (EXFLAGS[I] && J < SDNUMEXSYMS) {
+ if (I < SDNUMINSYMS) {
+ JBIG2_ALLOC(pDict->SDEXSYMS[J], CJBig2_Image(*SDINSYMS[I]));
+ } else {
+ pDict->SDEXSYMS[J] = SDNEWSYMS[I - SDNUMINSYMS];
+ }
+ J = J + 1;
+ } else if (!EXFLAGS[I] && I >= SDNUMINSYMS) {
+ delete SDNEWSYMS[I - SDNUMINSYMS];
+ }
+ }
+ if (J < SDNUMEXSYMS) {
+ pDict->SDNUMEXSYMS = J;
+ }
+ m_pModule->JBig2_Free(EXFLAGS);
+ m_pModule->JBig2_Free(SDNEWSYMS);
+ if (SDREFAGG == 0) {
+ m_pModule->JBig2_Free(SDNEWSYMWIDTHS);
+ }
+ delete pHuffmanDecoder;
+ return pDict;
failed:
- delete pGID;
- delete HTREG;
- return NULL;
+ for (I = 0; I < NSYMSDECODED; I++) {
+ delete SDNEWSYMS[I];
+ }
+ m_pModule->JBig2_Free(SDNEWSYMS);
+ if (SDREFAGG == 0) {
+ m_pModule->JBig2_Free(SDNEWSYMWIDTHS);
+ }
+ delete pHuffmanDecoder;
+ return NULL;
}
-CJBig2_PatternDict *CJBig2_PDDProc::decode_Arith(CJBig2_ArithDecoder *pArithDecoder,
- JBig2ArithCtx *gbContext, IFX_Pause* pPause)
-{
- FX_DWORD GRAY;
- CJBig2_Image *BHDC = NULL;
- CJBig2_PatternDict *pDict;
- CJBig2_GRDProc *pGRD;
- JBIG2_ALLOC(pDict, CJBig2_PatternDict());
- pDict->NUMPATS = GRAYMAX + 1;
- pDict->HDPATS = (CJBig2_Image**)m_pModule->JBig2_Malloc2(sizeof(CJBig2_Image*), pDict->NUMPATS);
- JBIG2_memset(pDict->HDPATS, 0, sizeof(CJBig2_Image*)*pDict->NUMPATS);
- JBIG2_ALLOC(pGRD, CJBig2_GRDProc());
- pGRD->MMR = HDMMR;
- pGRD->GBW = (GRAYMAX + 1) * HDPW;
- pGRD->GBH = HDPH;
- pGRD->GBTEMPLATE = HDTEMPLATE;
- pGRD->TPGDON = 0;
- pGRD->USESKIP = 0;
- pGRD->GBAT[0] = -(int32_t)HDPW;
- pGRD->GBAT[1] = 0;
- if(pGRD->GBTEMPLATE == 0) {
- pGRD->GBAT[2] = -3;
- pGRD->GBAT[3] = -1;
- pGRD->GBAT[4] = 2;
- pGRD->GBAT[5] = -2;
- pGRD->GBAT[6] = -2;
- pGRD->GBAT[7] = -2;
+CJBig2_Image* CJBig2_HTRDProc::decode_Arith(CJBig2_ArithDecoder* pArithDecoder,
+ JBig2ArithCtx* gbContext,
+ IFX_Pause* pPause) {
+ FX_DWORD ng, mg;
+ int32_t x, y;
+ CJBig2_Image* HSKIP;
+ FX_DWORD HBPP;
+ FX_DWORD* GI;
+ CJBig2_Image* HTREG;
+ CJBig2_GSIDProc* pGID;
+ JBIG2_ALLOC(HTREG, CJBig2_Image(HBW, HBH));
+ HTREG->fill(HDEFPIXEL);
+ HSKIP = NULL;
+ if (HENABLESKIP == 1) {
+ JBIG2_ALLOC(HSKIP, CJBig2_Image(HGW, HGH));
+ for (mg = 0; mg < HGH; mg++) {
+ for (ng = 0; ng < HGW; ng++) {
+ x = (HGX + mg * HRY + ng * HRX) >> 8;
+ y = (HGY + mg * HRX - ng * HRY) >> 8;
+ if ((x + HPW <= 0) | (x >= (int32_t)HBW) | (y + HPH <= 0) |
+ (y >= (int32_t)HPH)) {
+ HSKIP->setPixel(ng, mg, 1);
+ } else {
+ HSKIP->setPixel(ng, mg, 0);
+ }
+ }
}
- FXCODEC_STATUS status = pGRD->Start_decode_Arith(&BHDC, pArithDecoder, gbContext);
- while(status == FXCODEC_STATUS_DECODE_TOBECONTINUE) {
- pGRD->Continue_decode(pPause);
+ }
+ HBPP = 1;
+ while ((FX_DWORD)(1 << HBPP) < HNUMPATS) {
+ HBPP++;
+ }
+ JBIG2_ALLOC(pGID, CJBig2_GSIDProc());
+ pGID->GSMMR = HMMR;
+ pGID->GSW = HGW;
+ pGID->GSH = HGH;
+ pGID->GSBPP = (uint8_t)HBPP;
+ pGID->GSUSESKIP = HENABLESKIP;
+ pGID->GSKIP = HSKIP;
+ pGID->GSTEMPLATE = HTEMPLATE;
+ GI = pGID->decode_Arith(pArithDecoder, gbContext, pPause);
+ if (GI == NULL) {
+ goto failed;
+ }
+ for (mg = 0; mg < HGH; mg++) {
+ for (ng = 0; ng < HGW; ng++) {
+ x = (HGX + mg * HRY + ng * HRX) >> 8;
+ y = (HGY + mg * HRX - ng * HRY) >> 8;
+ FX_DWORD pat_index = GI[mg * HGW + ng];
+ if (pat_index >= HNUMPATS) {
+ pat_index = HNUMPATS - 1;
+ }
+ HTREG->composeFrom(x, y, HPATS[pat_index], HCOMBOP);
}
- if(BHDC == NULL) {
- delete pGRD;
- goto failed;
+ }
+ m_pModule->JBig2_Free(GI);
+ delete HSKIP;
+ delete pGID;
+ return HTREG;
+failed:
+ delete HSKIP;
+ delete pGID;
+ delete HTREG;
+ return NULL;
+}
+CJBig2_Image* CJBig2_HTRDProc::decode_MMR(CJBig2_BitStream* pStream,
+ IFX_Pause* pPause) {
+ FX_DWORD ng, mg;
+ int32_t x, y;
+ FX_DWORD HBPP;
+ FX_DWORD* GI;
+ CJBig2_Image* HTREG;
+ CJBig2_GSIDProc* pGID;
+ JBIG2_ALLOC(HTREG, CJBig2_Image(HBW, HBH));
+ HTREG->fill(HDEFPIXEL);
+ HBPP = 1;
+ while ((FX_DWORD)(1 << HBPP) < HNUMPATS) {
+ HBPP++;
+ }
+ JBIG2_ALLOC(pGID, CJBig2_GSIDProc());
+ pGID->GSMMR = HMMR;
+ pGID->GSW = HGW;
+ pGID->GSH = HGH;
+ pGID->GSBPP = (uint8_t)HBPP;
+ pGID->GSUSESKIP = 0;
+ GI = pGID->decode_MMR(pStream, pPause);
+ if (GI == NULL) {
+ goto failed;
+ }
+ for (mg = 0; mg < HGH; mg++) {
+ for (ng = 0; ng < HGW; ng++) {
+ x = (HGX + mg * HRY + ng * HRX) >> 8;
+ y = (HGY + mg * HRX - ng * HRY) >> 8;
+ FX_DWORD pat_index = GI[mg * HGW + ng];
+ if (pat_index >= HNUMPATS) {
+ pat_index = HNUMPATS - 1;
+ }
+ HTREG->composeFrom(x, y, HPATS[pat_index], HCOMBOP);
}
+ }
+ m_pModule->JBig2_Free(GI);
+ delete pGID;
+ return HTREG;
+failed:
+ delete pGID;
+ delete HTREG;
+ return NULL;
+}
+CJBig2_PatternDict* CJBig2_PDDProc::decode_Arith(
+ CJBig2_ArithDecoder* pArithDecoder,
+ JBig2ArithCtx* gbContext,
+ IFX_Pause* pPause) {
+ FX_DWORD GRAY;
+ CJBig2_Image* BHDC = NULL;
+ CJBig2_PatternDict* pDict;
+ CJBig2_GRDProc* pGRD;
+ JBIG2_ALLOC(pDict, CJBig2_PatternDict());
+ pDict->NUMPATS = GRAYMAX + 1;
+ pDict->HDPATS = (CJBig2_Image**)m_pModule->JBig2_Malloc2(
+ sizeof(CJBig2_Image*), pDict->NUMPATS);
+ JBIG2_memset(pDict->HDPATS, 0, sizeof(CJBig2_Image*) * pDict->NUMPATS);
+ JBIG2_ALLOC(pGRD, CJBig2_GRDProc());
+ pGRD->MMR = HDMMR;
+ pGRD->GBW = (GRAYMAX + 1) * HDPW;
+ pGRD->GBH = HDPH;
+ pGRD->GBTEMPLATE = HDTEMPLATE;
+ pGRD->TPGDON = 0;
+ pGRD->USESKIP = 0;
+ pGRD->GBAT[0] = -(int32_t)HDPW;
+ pGRD->GBAT[1] = 0;
+ if (pGRD->GBTEMPLATE == 0) {
+ pGRD->GBAT[2] = -3;
+ pGRD->GBAT[3] = -1;
+ pGRD->GBAT[4] = 2;
+ pGRD->GBAT[5] = -2;
+ pGRD->GBAT[6] = -2;
+ pGRD->GBAT[7] = -2;
+ }
+ FXCODEC_STATUS status =
+ pGRD->Start_decode_Arith(&BHDC, pArithDecoder, gbContext);
+ while (status == FXCODEC_STATUS_DECODE_TOBECONTINUE) {
+ pGRD->Continue_decode(pPause);
+ }
+ if (BHDC == NULL) {
delete pGRD;
- GRAY = 0;
- while(GRAY <= GRAYMAX) {
- pDict->HDPATS[GRAY] = BHDC->subImage(HDPW * GRAY, 0, HDPW, HDPH);
- GRAY = GRAY + 1;
- }
- delete BHDC;
- return pDict;
+ goto failed;
+ }
+ delete pGRD;
+ GRAY = 0;
+ while (GRAY <= GRAYMAX) {
+ pDict->HDPATS[GRAY] = BHDC->subImage(HDPW * GRAY, 0, HDPW, HDPH);
+ GRAY = GRAY + 1;
+ }
+ delete BHDC;
+ return pDict;
failed:
- delete pDict;
- return NULL;
+ delete pDict;
+ return NULL;
}
-CJBig2_PatternDict *CJBig2_PDDProc::decode_MMR(CJBig2_BitStream *pStream, IFX_Pause* pPause)
-{
- FX_DWORD GRAY;
- CJBig2_Image *BHDC = NULL;
- CJBig2_PatternDict *pDict;
- CJBig2_GRDProc *pGRD;
- JBIG2_ALLOC(pDict, CJBig2_PatternDict());
- pDict->NUMPATS = GRAYMAX + 1;
- pDict->HDPATS = (CJBig2_Image**)m_pModule->JBig2_Malloc2(sizeof(CJBig2_Image*), pDict->NUMPATS);
- JBIG2_memset(pDict->HDPATS, 0, sizeof(CJBig2_Image*)*pDict->NUMPATS);
- JBIG2_ALLOC(pGRD, CJBig2_GRDProc());
- pGRD->MMR = HDMMR;
- pGRD->GBW = (GRAYMAX + 1) * HDPW;
- pGRD->GBH = HDPH;
- FXCODEC_STATUS status = pGRD->Start_decode_MMR(&BHDC, pStream);
- while(status == FXCODEC_STATUS_DECODE_TOBECONTINUE) {
- pGRD->Continue_decode(pPause);
- }
- if(BHDC == NULL) {
- delete pGRD;
- goto failed;
- }
+CJBig2_PatternDict* CJBig2_PDDProc::decode_MMR(CJBig2_BitStream* pStream,
+ IFX_Pause* pPause) {
+ FX_DWORD GRAY;
+ CJBig2_Image* BHDC = NULL;
+ CJBig2_PatternDict* pDict;
+ CJBig2_GRDProc* pGRD;
+ JBIG2_ALLOC(pDict, CJBig2_PatternDict());
+ pDict->NUMPATS = GRAYMAX + 1;
+ pDict->HDPATS = (CJBig2_Image**)m_pModule->JBig2_Malloc2(
+ sizeof(CJBig2_Image*), pDict->NUMPATS);
+ JBIG2_memset(pDict->HDPATS, 0, sizeof(CJBig2_Image*) * pDict->NUMPATS);
+ JBIG2_ALLOC(pGRD, CJBig2_GRDProc());
+ pGRD->MMR = HDMMR;
+ pGRD->GBW = (GRAYMAX + 1) * HDPW;
+ pGRD->GBH = HDPH;
+ FXCODEC_STATUS status = pGRD->Start_decode_MMR(&BHDC, pStream);
+ while (status == FXCODEC_STATUS_DECODE_TOBECONTINUE) {
+ pGRD->Continue_decode(pPause);
+ }
+ if (BHDC == NULL) {
delete pGRD;
- GRAY = 0;
- while(GRAY <= GRAYMAX) {
- pDict->HDPATS[GRAY] = BHDC->subImage(HDPW * GRAY, 0, HDPW, HDPH);
- GRAY = GRAY + 1;
- }
- delete BHDC;
- return pDict;
+ goto failed;
+ }
+ delete pGRD;
+ GRAY = 0;
+ while (GRAY <= GRAYMAX) {
+ pDict->HDPATS[GRAY] = BHDC->subImage(HDPW * GRAY, 0, HDPW, HDPH);
+ GRAY = GRAY + 1;
+ }
+ delete BHDC;
+ return pDict;
failed:
- delete pDict;
- return NULL;
+ delete pDict;
+ return NULL;
}
-FX_DWORD *CJBig2_GSIDProc::decode_Arith(CJBig2_ArithDecoder *pArithDecoder,
- JBig2ArithCtx *gbContext, IFX_Pause* pPause)
-{
- CJBig2_Image **GSPLANES;
- int32_t J, K;
- FX_DWORD x, y;
- FX_DWORD *GSVALS;
- CJBig2_GRDProc *pGRD;
- GSPLANES = (CJBig2_Image **)m_pModule->JBig2_Malloc2(sizeof(CJBig2_Image*), GSBPP);
- if (!GSPLANES) {
- return NULL;
- }
- GSVALS = (FX_DWORD*)m_pModule->JBig2_Malloc3(sizeof(FX_DWORD), GSW, GSH);
- if (!GSVALS) {
- m_pModule->JBig2_Free(GSPLANES);
- return NULL;
- }
- JBIG2_memset(GSPLANES, 0, sizeof(CJBig2_Image*)*GSBPP);
- JBIG2_memset(GSVALS, 0, sizeof(FX_DWORD)*GSW * GSH);
- JBIG2_ALLOC(pGRD, CJBig2_GRDProc());
- pGRD->MMR = GSMMR;
- pGRD->GBW = GSW;
- pGRD->GBH = GSH;
- pGRD->GBTEMPLATE = GSTEMPLATE;
- pGRD->TPGDON = 0;
- pGRD->USESKIP = GSUSESKIP;
- pGRD->SKIP = GSKIP;
- if(GSTEMPLATE <= 1) {
- pGRD->GBAT[0] = 3;
- } else {
- pGRD->GBAT[0] = 2;
- }
- pGRD->GBAT[1] = -1;
- if(pGRD->GBTEMPLATE == 0) {
- pGRD->GBAT[2] = -3;
- pGRD->GBAT[3] = -1;
- pGRD->GBAT[4] = 2;
- pGRD->GBAT[5] = -2;
- pGRD->GBAT[6] = -2;
- pGRD->GBAT[7] = -2;
- }
- FXCODEC_STATUS status = pGRD->Start_decode_Arith(&GSPLANES[GSBPP - 1], pArithDecoder, gbContext);
- while(status == FXCODEC_STATUS_DECODE_TOBECONTINUE) {
- pGRD->Continue_decode(pPause);
+FX_DWORD* CJBig2_GSIDProc::decode_Arith(CJBig2_ArithDecoder* pArithDecoder,
+ JBig2ArithCtx* gbContext,
+ IFX_Pause* pPause) {
+ CJBig2_Image** GSPLANES;
+ int32_t J, K;
+ FX_DWORD x, y;
+ FX_DWORD* GSVALS;
+ CJBig2_GRDProc* pGRD;
+ GSPLANES =
+ (CJBig2_Image**)m_pModule->JBig2_Malloc2(sizeof(CJBig2_Image*), GSBPP);
+ if (!GSPLANES) {
+ return NULL;
+ }
+ GSVALS = (FX_DWORD*)m_pModule->JBig2_Malloc3(sizeof(FX_DWORD), GSW, GSH);
+ if (!GSVALS) {
+ m_pModule->JBig2_Free(GSPLANES);
+ return NULL;
+ }
+ JBIG2_memset(GSPLANES, 0, sizeof(CJBig2_Image*) * GSBPP);
+ JBIG2_memset(GSVALS, 0, sizeof(FX_DWORD) * GSW * GSH);
+ JBIG2_ALLOC(pGRD, CJBig2_GRDProc());
+ pGRD->MMR = GSMMR;
+ pGRD->GBW = GSW;
+ pGRD->GBH = GSH;
+ pGRD->GBTEMPLATE = GSTEMPLATE;
+ pGRD->TPGDON = 0;
+ pGRD->USESKIP = GSUSESKIP;
+ pGRD->SKIP = GSKIP;
+ if (GSTEMPLATE <= 1) {
+ pGRD->GBAT[0] = 3;
+ } else {
+ pGRD->GBAT[0] = 2;
+ }
+ pGRD->GBAT[1] = -1;
+ if (pGRD->GBTEMPLATE == 0) {
+ pGRD->GBAT[2] = -3;
+ pGRD->GBAT[3] = -1;
+ pGRD->GBAT[4] = 2;
+ pGRD->GBAT[5] = -2;
+ pGRD->GBAT[6] = -2;
+ pGRD->GBAT[7] = -2;
+ }
+ FXCODEC_STATUS status =
+ pGRD->Start_decode_Arith(&GSPLANES[GSBPP - 1], pArithDecoder, gbContext);
+ while (status == FXCODEC_STATUS_DECODE_TOBECONTINUE) {
+ pGRD->Continue_decode(pPause);
+ }
+ if (GSPLANES[GSBPP - 1] == NULL) {
+ goto failed;
+ }
+ J = GSBPP - 2;
+ while (J >= 0) {
+ FXCODEC_STATUS status =
+ pGRD->Start_decode_Arith(&GSPLANES[J], pArithDecoder, gbContext);
+ while (status == FXCODEC_STATUS_DECODE_TOBECONTINUE) {
+ pGRD->Continue_decode(pPause);
}
- if(GSPLANES[GSBPP - 1] == NULL) {
+ if (GSPLANES[J] == NULL) {
+ for (K = GSBPP - 1; K > J; K--) {
+ delete GSPLANES[K];
goto failed;
+ }
}
- J = GSBPP - 2;
- while(J >= 0) {
- FXCODEC_STATUS status = pGRD->Start_decode_Arith(&GSPLANES[J], pArithDecoder, gbContext);
- while(status == FXCODEC_STATUS_DECODE_TOBECONTINUE) {
- pGRD->Continue_decode(pPause);
- }
- if(GSPLANES[J] == NULL) {
- for(K = GSBPP - 1; K > J; K--) {
- delete GSPLANES[K];
- goto failed;
- }
- }
- GSPLANES[J]->composeFrom(0, 0, GSPLANES[J + 1], JBIG2_COMPOSE_XOR);
- J = J - 1;
- }
- for(y = 0; y < GSH; y++) {
- for(x = 0; x < GSW; x++) {
- for(J = 0; J < GSBPP; J++) {
- GSVALS[y * GSW + x] |= GSPLANES[J]->getPixel(x, y) << J;
- }
- }
- }
- for(J = 0; J < GSBPP; J++) {
- delete GSPLANES[J];
+ GSPLANES[J]->composeFrom(0, 0, GSPLANES[J + 1], JBIG2_COMPOSE_XOR);
+ J = J - 1;
+ }
+ for (y = 0; y < GSH; y++) {
+ for (x = 0; x < GSW; x++) {
+ for (J = 0; J < GSBPP; J++) {
+ GSVALS[y * GSW + x] |= GSPLANES[J]->getPixel(x, y) << J;
+ }
}
- m_pModule->JBig2_Free(GSPLANES);
- delete pGRD;
- return GSVALS;
+ }
+ for (J = 0; J < GSBPP; J++) {
+ delete GSPLANES[J];
+ }
+ m_pModule->JBig2_Free(GSPLANES);
+ delete pGRD;
+ return GSVALS;
failed:
- m_pModule->JBig2_Free(GSPLANES);
- delete pGRD;
- m_pModule->JBig2_Free(GSVALS);
- return NULL;
+ m_pModule->JBig2_Free(GSPLANES);
+ delete pGRD;
+ m_pModule->JBig2_Free(GSVALS);
+ return NULL;
}
-FX_DWORD *CJBig2_GSIDProc::decode_MMR(CJBig2_BitStream *pStream, IFX_Pause* pPause)
-{
- CJBig2_Image **GSPLANES;
- int32_t J, K;
- FX_DWORD x, y;
- FX_DWORD *GSVALS;
- CJBig2_GRDProc *pGRD;
- GSPLANES = (CJBig2_Image **)m_pModule->JBig2_Malloc2(sizeof(CJBig2_Image*), GSBPP);
- if (!GSPLANES) {
- return NULL;
- }
- GSVALS = (FX_DWORD*)m_pModule->JBig2_Malloc3(sizeof(FX_DWORD), GSW, GSH);
- if (!GSVALS) {
- if (GSPLANES) {
- m_pModule->JBig2_Free(GSPLANES);
- }
- return NULL;
+FX_DWORD* CJBig2_GSIDProc::decode_MMR(CJBig2_BitStream* pStream,
+ IFX_Pause* pPause) {
+ CJBig2_Image** GSPLANES;
+ int32_t J, K;
+ FX_DWORD x, y;
+ FX_DWORD* GSVALS;
+ CJBig2_GRDProc* pGRD;
+ GSPLANES =
+ (CJBig2_Image**)m_pModule->JBig2_Malloc2(sizeof(CJBig2_Image*), GSBPP);
+ if (!GSPLANES) {
+ return NULL;
+ }
+ GSVALS = (FX_DWORD*)m_pModule->JBig2_Malloc3(sizeof(FX_DWORD), GSW, GSH);
+ if (!GSVALS) {
+ if (GSPLANES) {
+ m_pModule->JBig2_Free(GSPLANES);
}
- JBIG2_memset(GSPLANES, 0, sizeof(CJBig2_Image*)*GSBPP);
- JBIG2_memset(GSVALS, 0, sizeof(FX_DWORD)*GSW * GSH);
- JBIG2_ALLOC(pGRD, CJBig2_GRDProc());
- pGRD->MMR = GSMMR;
- pGRD->GBW = GSW;
- pGRD->GBH = GSH;
- FXCODEC_STATUS status = pGRD->Start_decode_MMR(&GSPLANES[GSBPP - 1], pStream);
- while(status == FXCODEC_STATUS_DECODE_TOBECONTINUE) {
- pGRD->Continue_decode(pPause);
+ return NULL;
+ }
+ JBIG2_memset(GSPLANES, 0, sizeof(CJBig2_Image*) * GSBPP);
+ JBIG2_memset(GSVALS, 0, sizeof(FX_DWORD) * GSW * GSH);
+ JBIG2_ALLOC(pGRD, CJBig2_GRDProc());
+ pGRD->MMR = GSMMR;
+ pGRD->GBW = GSW;
+ pGRD->GBH = GSH;
+ FXCODEC_STATUS status = pGRD->Start_decode_MMR(&GSPLANES[GSBPP - 1], pStream);
+ while (status == FXCODEC_STATUS_DECODE_TOBECONTINUE) {
+ pGRD->Continue_decode(pPause);
+ }
+ if (GSPLANES[GSBPP - 1] == NULL) {
+ goto failed;
+ }
+ pStream->alignByte();
+ pStream->offset(3);
+ J = GSBPP - 2;
+ while (J >= 0) {
+ FXCODEC_STATUS status = pGRD->Start_decode_MMR(&GSPLANES[J], pStream);
+ while (status == FXCODEC_STATUS_DECODE_TOBECONTINUE) {
+ pGRD->Continue_decode(pPause);
}
- if(GSPLANES[GSBPP - 1] == NULL) {
+ if (GSPLANES[J] == NULL) {
+ for (K = GSBPP - 1; K > J; K--) {
+ delete GSPLANES[K];
goto failed;
+ }
}
pStream->alignByte();
pStream->offset(3);
- J = GSBPP - 2;
- while(J >= 0) {
- FXCODEC_STATUS status = pGRD->Start_decode_MMR(&GSPLANES[J], pStream);
- while(status == FXCODEC_STATUS_DECODE_TOBECONTINUE) {
- pGRD->Continue_decode(pPause);
- }
- if(GSPLANES[J] == NULL) {
- for(K = GSBPP - 1; K > J; K--) {
- delete GSPLANES[K];
- goto failed;
- }
- }
- pStream->alignByte();
- pStream->offset(3);
- GSPLANES[J]->composeFrom(0, 0, GSPLANES[J + 1], JBIG2_COMPOSE_XOR);
- J = J - 1;
- }
- for(y = 0; y < GSH; y++) {
- for(x = 0; x < GSW; x++) {
- for(J = 0; J < GSBPP; J++) {
- GSVALS[y * GSW + x] |= GSPLANES[J]->getPixel(x, y) << J;
- }
- }
- }
- for(J = 0; J < GSBPP; J++) {
- delete GSPLANES[J];
+ GSPLANES[J]->composeFrom(0, 0, GSPLANES[J + 1], JBIG2_COMPOSE_XOR);
+ J = J - 1;
+ }
+ for (y = 0; y < GSH; y++) {
+ for (x = 0; x < GSW; x++) {
+ for (J = 0; J < GSBPP; J++) {
+ GSVALS[y * GSW + x] |= GSPLANES[J]->getPixel(x, y) << J;
+ }
}
- m_pModule->JBig2_Free(GSPLANES);
- delete pGRD;
- return GSVALS;
+ }
+ for (J = 0; J < GSBPP; J++) {
+ delete GSPLANES[J];
+ }
+ m_pModule->JBig2_Free(GSPLANES);
+ delete pGRD;
+ return GSVALS;
failed:
- m_pModule->JBig2_Free(GSPLANES);
- delete pGRD;
- m_pModule->JBig2_Free(GSVALS);
- return NULL;
+ m_pModule->JBig2_Free(GSPLANES);
+ delete pGRD;
+ m_pModule->JBig2_Free(GSVALS);
+ return NULL;
}
-FXCODEC_STATUS CJBig2_GRDProc::Start_decode_Arith(CJBig2_Image** pImage, CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext, IFX_Pause* pPause)
-{
- if (GBW == 0 || GBH == 0) {
- m_ProssiveStatus = FXCODEC_STATUS_DECODE_FINISH;
- return FXCODEC_STATUS_DECODE_FINISH;
- }
- m_ProssiveStatus = FXCODEC_STATUS_DECODE_READY;
- m_pPause = pPause;
- if(*pImage == NULL) {
- JBIG2_ALLOC((*pImage), CJBig2_Image(GBW, GBH));
- }
- if ((*pImage)->m_pData == NULL) {
- delete *pImage;
- *pImage = NULL;
- m_pModule->JBig2_Error("Generic region decoding procedure: Create Image Failed with width = %d, height = %d\n", GBW, GBH);
- m_ProssiveStatus = FXCODEC_STATUS_ERROR;
- return FXCODEC_STATUS_ERROR;
- }
- m_DecodeType = 1;
- m_pImage = pImage;
- (*m_pImage)->fill(0);
- m_pArithDecoder = pArithDecoder;
- m_gbContext = gbContext;
- LTP = 0;
- m_pLine = NULL;
- m_loopIndex = 0;
- return decode_Arith(pPause);
+FXCODEC_STATUS CJBig2_GRDProc::Start_decode_Arith(
+ CJBig2_Image** pImage,
+ CJBig2_ArithDecoder* pArithDecoder,
+ JBig2ArithCtx* gbContext,
+ IFX_Pause* pPause) {
+ if (GBW == 0 || GBH == 0) {
+ m_ProssiveStatus = FXCODEC_STATUS_DECODE_FINISH;
+ return FXCODEC_STATUS_DECODE_FINISH;
+ }
+ m_ProssiveStatus = FXCODEC_STATUS_DECODE_READY;
+ m_pPause = pPause;
+ if (*pImage == NULL) {
+ JBIG2_ALLOC((*pImage), CJBig2_Image(GBW, GBH));
+ }
+ if ((*pImage)->m_pData == NULL) {
+ delete *pImage;
+ *pImage = NULL;
+ m_pModule->JBig2_Error(
+ "Generic region decoding procedure: Create Image Failed with width = "
+ "%d, height = %d\n",
+ GBW, GBH);
+ m_ProssiveStatus = FXCODEC_STATUS_ERROR;
+ return FXCODEC_STATUS_ERROR;
+ }
+ m_DecodeType = 1;
+ m_pImage = pImage;
+ (*m_pImage)->fill(0);
+ m_pArithDecoder = pArithDecoder;
+ m_gbContext = gbContext;
+ LTP = 0;
+ m_pLine = NULL;
+ m_loopIndex = 0;
+ return decode_Arith(pPause);
}
-FXCODEC_STATUS CJBig2_GRDProc::decode_Arith(IFX_Pause* pPause)
-{
- int iline = m_loopIndex;
- CJBig2_Image* pImage = *m_pImage;
- if(GBTEMPLATE == 0) {
- if((GBAT[0] == 3) && (GBAT[1] == (signed char) - 1)
- && (GBAT[2] == (signed char) - 3) && (GBAT[3] == (signed char) - 1)
- && (GBAT[4] == 2) && (GBAT[5] == (signed char) - 2)
- && (GBAT[6] == (signed char) - 2) && (GBAT[7] == (signed char) - 2)) {
- m_ProssiveStatus = decode_Arith_Template0_opt3(pImage, m_pArithDecoder, m_gbContext, pPause);
- } else {
- m_ProssiveStatus = decode_Arith_Template0_unopt(pImage, m_pArithDecoder, m_gbContext, pPause);
- }
- } else if(GBTEMPLATE == 1) {
- if((GBAT[0] == 3) && (GBAT[1] == (signed char) - 1)) {
- m_ProssiveStatus = decode_Arith_Template1_opt3(pImage, m_pArithDecoder, m_gbContext, pPause);
- } else {
- m_ProssiveStatus = decode_Arith_Template1_unopt(pImage, m_pArithDecoder, m_gbContext, pPause);
- }
- } else if(GBTEMPLATE == 2) {
- if((GBAT[0] == 2) && (GBAT[1] == (signed char) - 1)) {
- m_ProssiveStatus = decode_Arith_Template2_opt3(pImage, m_pArithDecoder, m_gbContext, pPause);
- } else {
- m_ProssiveStatus = decode_Arith_Template2_unopt(pImage, m_pArithDecoder, m_gbContext, pPause);
- }
+FXCODEC_STATUS CJBig2_GRDProc::decode_Arith(IFX_Pause* pPause) {
+ int iline = m_loopIndex;
+ CJBig2_Image* pImage = *m_pImage;
+ if (GBTEMPLATE == 0) {
+ if ((GBAT[0] == 3) && (GBAT[1] == (signed char)-1) &&
+ (GBAT[2] == (signed char)-3) && (GBAT[3] == (signed char)-1) &&
+ (GBAT[4] == 2) && (GBAT[5] == (signed char)-2) &&
+ (GBAT[6] == (signed char)-2) && (GBAT[7] == (signed char)-2)) {
+ m_ProssiveStatus = decode_Arith_Template0_opt3(pImage, m_pArithDecoder,
+ m_gbContext, pPause);
} else {
- if((GBAT[0] == 2) && (GBAT[1] == (signed char) - 1)) {
- m_ProssiveStatus = decode_Arith_Template3_opt3(pImage, m_pArithDecoder, m_gbContext, pPause);
- } else {
- m_ProssiveStatus = decode_Arith_Template3_unopt(pImage, m_pArithDecoder, m_gbContext, pPause);
- }
- }
- m_ReplaceRect.left = 0;
- m_ReplaceRect.right = pImage->m_nWidth;
- m_ReplaceRect.top = iline;
- m_ReplaceRect.bottom = m_loopIndex;
- if(m_ProssiveStatus == FXCODEC_STATUS_DECODE_FINISH) {
- m_loopIndex = 0;
+ m_ProssiveStatus = decode_Arith_Template0_unopt(pImage, m_pArithDecoder,
+ m_gbContext, pPause);
}
- return m_ProssiveStatus;
-}
-FXCODEC_STATUS CJBig2_GRDProc::Start_decode_Arith_V2(CJBig2_Image** pImage, CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext, IFX_Pause* pPause)
-{
- if(GBW == 0 || GBH == 0) {
- * pImage = NULL;
- m_ProssiveStatus = FXCODEC_STATUS_DECODE_FINISH;
- return FXCODEC_STATUS_DECODE_FINISH;
+ } else if (GBTEMPLATE == 1) {
+ if ((GBAT[0] == 3) && (GBAT[1] == (signed char)-1)) {
+ m_ProssiveStatus = decode_Arith_Template1_opt3(pImage, m_pArithDecoder,
+ m_gbContext, pPause);
+ } else {
+ m_ProssiveStatus = decode_Arith_Template1_unopt(pImage, m_pArithDecoder,
+ m_gbContext, pPause);
}
- if(*pImage == NULL) {
- JBIG2_ALLOC((*pImage), CJBig2_Image(GBW, GBH));
+ } else if (GBTEMPLATE == 2) {
+ if ((GBAT[0] == 2) && (GBAT[1] == (signed char)-1)) {
+ m_ProssiveStatus = decode_Arith_Template2_opt3(pImage, m_pArithDecoder,
+ m_gbContext, pPause);
+ } else {
+ m_ProssiveStatus = decode_Arith_Template2_unopt(pImage, m_pArithDecoder,
+ m_gbContext, pPause);
}
- if ((*pImage)->m_pData == NULL) {
- delete *pImage;
- *pImage = NULL;
- m_pModule->JBig2_Error("Generic region decoding procedure: Create Image Failed with width = %d, height = %d\n", GBW, GBH);
- m_ProssiveStatus = FXCODEC_STATUS_ERROR;
- return FXCODEC_STATUS_ERROR;
+ } else {
+ if ((GBAT[0] == 2) && (GBAT[1] == (signed char)-1)) {
+ m_ProssiveStatus = decode_Arith_Template3_opt3(pImage, m_pArithDecoder,
+ m_gbContext, pPause);
+ } else {
+ m_ProssiveStatus = decode_Arith_Template3_unopt(pImage, m_pArithDecoder,
+ m_gbContext, pPause);
}
- m_ProssiveStatus = FXCODEC_STATUS_DECODE_READY;
- m_DecodeType = 2;
- m_pPause = pPause;
- m_pImage = pImage;
- (*m_pImage)->fill(0);
- LTP = 0;
+ }
+ m_ReplaceRect.left = 0;
+ m_ReplaceRect.right = pImage->m_nWidth;
+ m_ReplaceRect.top = iline;
+ m_ReplaceRect.bottom = m_loopIndex;
+ if (m_ProssiveStatus == FXCODEC_STATUS_DECODE_FINISH) {
m_loopIndex = 0;
- m_pArithDecoder = pArithDecoder;
- m_gbContext = gbContext;
- return decode_Arith_V2(pPause);
+ }
+ return m_ProssiveStatus;
}
-FXCODEC_STATUS CJBig2_GRDProc::decode_Arith_V2(IFX_Pause* pPause)
-{
- FX_BOOL SLTP, bVal;
- FX_DWORD CONTEXT;
- CJBig2_Image *GBREG = *m_pImage;
- FX_DWORD line1, line2, line3;
- LTP = 0;
- JBIG2_ALLOC(GBREG, CJBig2_Image(GBW, GBH));
- GBREG->fill(0);
- for(; m_loopIndex < GBH; m_loopIndex++) {
- if(TPGDON) {
- switch(GBTEMPLATE) {
- case 0:
- CONTEXT = 0x9b25;
- break;
- case 1:
- CONTEXT = 0x0795;
- break;
- case 2:
- CONTEXT = 0x00e5;
- break;
- case 3:
- CONTEXT = 0x0195;
- break;
- }
- SLTP = m_pArithDecoder->DECODE(&m_gbContext[CONTEXT]);
- LTP = LTP ^ SLTP;
- }
- if(LTP == 1) {
- GBREG->copyLine(m_loopIndex, m_loopIndex - 1);
- } else {
- switch(GBTEMPLATE) {
- case 0: {
- line1 = GBREG->getPixel(1, m_loopIndex - 2);
- line1 |= GBREG->getPixel(0, m_loopIndex - 2) << 1;
- line2 = GBREG->getPixel(2, m_loopIndex - 1);
- line2 |= GBREG->getPixel(1, m_loopIndex - 1) << 1;
- line2 |= GBREG->getPixel(0, m_loopIndex - 1) << 2;
- line3 = 0;
- for(FX_DWORD w = 0; w < GBW; w++) {
- if(USESKIP && SKIP->getPixel(w, m_loopIndex)) {
- bVal = 0;
- } else {
- CONTEXT = line3;
- CONTEXT |= GBREG->getPixel(w + GBAT[0], m_loopIndex + GBAT[1]) << 4;
- CONTEXT |= line2 << 5;
- CONTEXT |= GBREG->getPixel(w + GBAT[2], m_loopIndex + GBAT[3]) << 10;
- CONTEXT |= GBREG->getPixel(w + GBAT[4], m_loopIndex + GBAT[5]) << 11;
- CONTEXT |= line1 << 12;
- CONTEXT |= GBREG->getPixel(w + GBAT[6], m_loopIndex + GBAT[7]) << 15;
- bVal = m_pArithDecoder->DECODE(&m_gbContext[CONTEXT]);
- }
- if(bVal) {
- GBREG->setPixel(w, m_loopIndex, bVal);
- }
- line1 = ((line1 << 1) | GBREG->getPixel(w + 2, m_loopIndex - 2)) & 0x07;
- line2 = ((line2 << 1) | GBREG->getPixel(w + 3, m_loopIndex - 1)) & 0x1f;
- line3 = ((line3 << 1) | bVal) & 0x0f;
- }
- }
- break;
- case 1: {
- line1 = GBREG->getPixel(2, m_loopIndex - 2);
- line1 |= GBREG->getPixel(1, m_loopIndex - 2) << 1;
- line1 |= GBREG->getPixel(0, m_loopIndex - 2) << 2;
- line2 = GBREG->getPixel(2, m_loopIndex - 1);
- line2 |= GBREG->getPixel(1, m_loopIndex - 1) << 1;
- line2 |= GBREG->getPixel(0, m_loopIndex - 1) << 2;
- line3 = 0;
- for(FX_DWORD w = 0; w < GBW; w++) {
- if(USESKIP && SKIP->getPixel(w, m_loopIndex)) {
- bVal = 0;
- } else {
- CONTEXT = line3;
- CONTEXT |= GBREG->getPixel(w + GBAT[0], m_loopIndex + GBAT[1]) << 3;
- CONTEXT |= line2 << 4;
- CONTEXT |= line1 << 9;
- bVal = m_pArithDecoder->DECODE(&m_gbContext[CONTEXT]);
- }
- if(bVal) {
- GBREG->setPixel(w, m_loopIndex, bVal);
- }
- line1 = ((line1 << 1) | GBREG->getPixel(w + 3, m_loopIndex - 2)) & 0x0f;
- line2 = ((line2 << 1) | GBREG->getPixel(w + 3, m_loopIndex - 1)) & 0x1f;
- line3 = ((line3 << 1) | bVal) & 0x07;
- }
- }
- break;
- case 2: {
- line1 = GBREG->getPixel(1, m_loopIndex - 2);
- line1 |= GBREG->getPixel(0, m_loopIndex - 2) << 1;
- line2 = GBREG->getPixel(1, m_loopIndex - 1);
- line2 |= GBREG->getPixel(0, m_loopIndex - 1) << 1;
- line3 = 0;
- for(FX_DWORD w = 0; w < GBW; w++) {
- if(USESKIP && SKIP->getPixel(w, m_loopIndex)) {
- bVal = 0;
- } else {
- CONTEXT = line3;
- CONTEXT |= GBREG->getPixel(w + GBAT[0], m_loopIndex + GBAT[1]) << 2;
- CONTEXT |= line2 << 3;
- CONTEXT |= line1 << 7;
- bVal = m_pArithDecoder->DECODE(&m_gbContext[CONTEXT]);
- }
- if(bVal) {
- GBREG->setPixel(w, m_loopIndex, bVal);
- }
- line1 = ((line1 << 1) | GBREG->getPixel(w + 2, m_loopIndex - 2)) & 0x07;
- line2 = ((line2 << 1) | GBREG->getPixel(w + 2, m_loopIndex - 1)) & 0x0f;
- line3 = ((line3 << 1) | bVal) & 0x03;
- }
- }
- break;
- case 3: {
- line1 = GBREG->getPixel(1, m_loopIndex - 1);
- line1 |= GBREG->getPixel(0, m_loopIndex - 1) << 1;
- line2 = 0;
- for(FX_DWORD w = 0; w < GBW; w++) {
- if(USESKIP && SKIP->getPixel(w, m_loopIndex)) {
- bVal = 0;
- } else {
- CONTEXT = line2;
- CONTEXT |= GBREG->getPixel(w + GBAT[0], m_loopIndex + GBAT[1]) << 4;
- CONTEXT |= line1 << 5;
- bVal = m_pArithDecoder->DECODE(&m_gbContext[CONTEXT]);
- }
- if(bVal) {
- GBREG->setPixel(w, m_loopIndex, bVal);
- }
- line1 = ((line1 << 1) | GBREG->getPixel(w + 2, m_loopIndex - 1)) & 0x1f;
- line2 = ((line2 << 1) | bVal) & 0x0f;
- }
- }
- break;
- }
- }
- if(pPause && pPause->NeedToPauseNow()) {
- m_loopIndex ++;
- m_ProssiveStatus = FXCODEC_STATUS_DECODE_TOBECONTINUE;
- return FXCODEC_STATUS_DECODE_TOBECONTINUE;
- }
- }
+FXCODEC_STATUS CJBig2_GRDProc::Start_decode_Arith_V2(
+ CJBig2_Image** pImage,
+ CJBig2_ArithDecoder* pArithDecoder,
+ JBig2ArithCtx* gbContext,
+ IFX_Pause* pPause) {
+ if (GBW == 0 || GBH == 0) {
+ *pImage = NULL;
m_ProssiveStatus = FXCODEC_STATUS_DECODE_FINISH;
return FXCODEC_STATUS_DECODE_FINISH;
+ }
+ if (*pImage == NULL) {
+ JBIG2_ALLOC((*pImage), CJBig2_Image(GBW, GBH));
+ }
+ if ((*pImage)->m_pData == NULL) {
+ delete *pImage;
+ *pImage = NULL;
+ m_pModule->JBig2_Error(
+ "Generic region decoding procedure: Create Image Failed with width = "
+ "%d, height = %d\n",
+ GBW, GBH);
+ m_ProssiveStatus = FXCODEC_STATUS_ERROR;
+ return FXCODEC_STATUS_ERROR;
+ }
+ m_ProssiveStatus = FXCODEC_STATUS_DECODE_READY;
+ m_DecodeType = 2;
+ m_pPause = pPause;
+ m_pImage = pImage;
+ (*m_pImage)->fill(0);
+ LTP = 0;
+ m_loopIndex = 0;
+ m_pArithDecoder = pArithDecoder;
+ m_gbContext = gbContext;
+ return decode_Arith_V2(pPause);
}
-FXCODEC_STATUS CJBig2_GRDProc::Start_decode_Arith_V1(CJBig2_Image** pImage, CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext, IFX_Pause* pPause)
-{
- if(GBW == 0 || GBH == 0) {
- * pImage = NULL;
- m_ProssiveStatus = FXCODEC_STATUS_DECODE_FINISH;
- return FXCODEC_STATUS_DECODE_FINISH;
- }
- if(*pImage == NULL) {
- JBIG2_ALLOC((*pImage), CJBig2_Image(GBW, GBH));
- }
- if ((*pImage)->m_pData == NULL) {
- delete *pImage;
- *pImage = NULL;
- m_pModule->JBig2_Error("Generic region decoding procedure: Create Image Failed with width = %d, height = %d\n", GBW, GBH);
- m_ProssiveStatus = FXCODEC_STATUS_ERROR;
- return FXCODEC_STATUS_ERROR;
+FXCODEC_STATUS CJBig2_GRDProc::decode_Arith_V2(IFX_Pause* pPause) {
+ FX_BOOL SLTP, bVal;
+ FX_DWORD CONTEXT;
+ CJBig2_Image* GBREG = *m_pImage;
+ FX_DWORD line1, line2, line3;
+ LTP = 0;
+ JBIG2_ALLOC(GBREG, CJBig2_Image(GBW, GBH));
+ GBREG->fill(0);
+ for (; m_loopIndex < GBH; m_loopIndex++) {
+ if (TPGDON) {
+ switch (GBTEMPLATE) {
+ case 0:
+ CONTEXT = 0x9b25;
+ break;
+ case 1:
+ CONTEXT = 0x0795;
+ break;
+ case 2:
+ CONTEXT = 0x00e5;
+ break;
+ case 3:
+ CONTEXT = 0x0195;
+ break;
+ }
+ SLTP = m_pArithDecoder->DECODE(&m_gbContext[CONTEXT]);
+ LTP = LTP ^ SLTP;
}
- m_ProssiveStatus = FXCODEC_STATUS_DECODE_READY;
- m_pPause = pPause;
- m_pImage = pImage;
- m_DecodeType = 3;
- (*m_pImage)->fill(0);
- LTP = 0;
- m_loopIndex = 0;
- m_pArithDecoder = pArithDecoder;
- m_gbContext = gbContext;
- return decode_Arith_V1(pPause);
-}
-FXCODEC_STATUS CJBig2_GRDProc::decode_Arith_V1(IFX_Pause* pPause)
-{
- FX_BOOL SLTP, bVal;
- FX_DWORD CONTEXT = 0;
- CJBig2_Image *GBREG = (*m_pImage);
- for(; m_loopIndex < GBH; m_loopIndex++) {
- if(TPGDON) {
- switch(GBTEMPLATE) {
- case 0:
- CONTEXT = 0x9b25;
- break;
- case 1:
- CONTEXT = 0x0795;
- break;
- case 2:
- CONTEXT = 0x00e5;
- break;
- case 3:
- CONTEXT = 0x0195;
- break;
+ if (LTP == 1) {
+ GBREG->copyLine(m_loopIndex, m_loopIndex - 1);
+ } else {
+ switch (GBTEMPLATE) {
+ case 0: {
+ line1 = GBREG->getPixel(1, m_loopIndex - 2);
+ line1 |= GBREG->getPixel(0, m_loopIndex - 2) << 1;
+ line2 = GBREG->getPixel(2, m_loopIndex - 1);
+ line2 |= GBREG->getPixel(1, m_loopIndex - 1) << 1;
+ line2 |= GBREG->getPixel(0, m_loopIndex - 1) << 2;
+ line3 = 0;
+ for (FX_DWORD w = 0; w < GBW; w++) {
+ if (USESKIP && SKIP->getPixel(w, m_loopIndex)) {
+ bVal = 0;
+ } else {
+ CONTEXT = line3;
+ CONTEXT |= GBREG->getPixel(w + GBAT[0], m_loopIndex + GBAT[1])
+ << 4;
+ CONTEXT |= line2 << 5;
+ CONTEXT |= GBREG->getPixel(w + GBAT[2], m_loopIndex + GBAT[3])
+ << 10;
+ CONTEXT |= GBREG->getPixel(w + GBAT[4], m_loopIndex + GBAT[5])
+ << 11;
+ CONTEXT |= line1 << 12;
+ CONTEXT |= GBREG->getPixel(w + GBAT[6], m_loopIndex + GBAT[7])
+ << 15;
+ bVal = m_pArithDecoder->DECODE(&m_gbContext[CONTEXT]);
}
- SLTP = m_pArithDecoder->DECODE(&m_gbContext[CONTEXT]);
- LTP = LTP ^ SLTP;
- }
- if(LTP == 1) {
- for(FX_DWORD w = 0; w < GBW; w++) {
- GBREG->setPixel(w, m_loopIndex, GBREG->getPixel(w, m_loopIndex - 1));
+ if (bVal) {
+ GBREG->setPixel(w, m_loopIndex, bVal);
}
- } else {
- for(FX_DWORD w = 0; w < GBW; w++) {
- if(USESKIP && SKIP->getPixel(w, m_loopIndex)) {
- GBREG->setPixel(w, m_loopIndex, 0);
- } else {
- CONTEXT = 0;
- switch(GBTEMPLATE) {
- case 0:
- CONTEXT |= GBREG->getPixel(w - 1, m_loopIndex);
- CONTEXT |= GBREG->getPixel(w - 2, m_loopIndex) << 1;
- CONTEXT |= GBREG->getPixel(w - 3, m_loopIndex) << 2;
- CONTEXT |= GBREG->getPixel(w - 4, m_loopIndex) << 3;
- CONTEXT |= GBREG->getPixel(w + GBAT[0], m_loopIndex + GBAT[1]) << 4;
- CONTEXT |= GBREG->getPixel(w + 2, m_loopIndex - 1) << 5;
- CONTEXT |= GBREG->getPixel(w + 1, m_loopIndex - 1) << 6;
- CONTEXT |= GBREG->getPixel(w, m_loopIndex - 1) << 7;
- CONTEXT |= GBREG->getPixel(w - 1, m_loopIndex - 1) << 8;
- CONTEXT |= GBREG->getPixel(w - 2, m_loopIndex - 1) << 9;
- CONTEXT |= GBREG->getPixel(w + GBAT[2], m_loopIndex + GBAT[3]) << 10;
- CONTEXT |= GBREG->getPixel(w + GBAT[4], m_loopIndex + GBAT[5]) << 11;
- CONTEXT |= GBREG->getPixel(w + 1, m_loopIndex - 2) << 12;
- CONTEXT |= GBREG->getPixel(w, m_loopIndex - 2) << 13;
- CONTEXT |= GBREG->getPixel(w - 1, m_loopIndex - 2) << 14;
- CONTEXT |= GBREG->getPixel(w + GBAT[6], m_loopIndex + GBAT[7]) << 15;
- break;
- case 1:
- CONTEXT |= GBREG->getPixel(w - 1, m_loopIndex);
- CONTEXT |= GBREG->getPixel(w - 2, m_loopIndex) << 1;
- CONTEXT |= GBREG->getPixel(w - 3, m_loopIndex) << 2;
- CONTEXT |= GBREG->getPixel(w + GBAT[0], m_loopIndex + GBAT[1]) << 3;
- CONTEXT |= GBREG->getPixel(w + 2, m_loopIndex - 1) << 4;
- CONTEXT |= GBREG->getPixel(w + 1, m_loopIndex - 1) << 5;
- CONTEXT |= GBREG->getPixel(w, m_loopIndex - 1) << 6;
- CONTEXT |= GBREG->getPixel(w - 1, m_loopIndex - 1) << 7;
- CONTEXT |= GBREG->getPixel(w - 2, m_loopIndex - 1) << 8;
- CONTEXT |= GBREG->getPixel(w + 2, m_loopIndex - 2) << 9;
- CONTEXT |= GBREG->getPixel(w + 1, m_loopIndex - 2) << 10;
- CONTEXT |= GBREG->getPixel(w, m_loopIndex - 2) << 11;
- CONTEXT |= GBREG->getPixel(w - 1, m_loopIndex - 2) << 12;
- break;
- case 2:
- CONTEXT |= GBREG->getPixel(w - 1, m_loopIndex);
- CONTEXT |= GBREG->getPixel(w - 2, m_loopIndex) << 1;
- CONTEXT |= GBREG->getPixel(w + GBAT[0], m_loopIndex + GBAT[1]) << 2;
- CONTEXT |= GBREG->getPixel(w + 1, m_loopIndex - 1) << 3;
- CONTEXT |= GBREG->getPixel(w, m_loopIndex - 1) << 4;
- CONTEXT |= GBREG->getPixel(w - 1, m_loopIndex - 1) << 5;
- CONTEXT |= GBREG->getPixel(w - 2, m_loopIndex - 1) << 6;
- CONTEXT |= GBREG->getPixel(w + 1, m_loopIndex - 2) << 7;
- CONTEXT |= GBREG->getPixel(w, m_loopIndex - 2) << 8;
- CONTEXT |= GBREG->getPixel(w - 1, m_loopIndex - 2) << 9;
- break;
- case 3:
- CONTEXT |= GBREG->getPixel(w - 1, m_loopIndex);
- CONTEXT |= GBREG->getPixel(w - 2, m_loopIndex) << 1;
- CONTEXT |= GBREG->getPixel(w - 3, m_loopIndex) << 2;
- CONTEXT |= GBREG->getPixel(w - 4, m_loopIndex) << 3;
- CONTEXT |= GBREG->getPixel(w + GBAT[0], m_loopIndex + GBAT[1]) << 4;
- CONTEXT |= GBREG->getPixel(w + 1, m_loopIndex - 1) << 5;
- CONTEXT |= GBREG->getPixel(w, m_loopIndex - 1) << 6;
- CONTEXT |= GBREG->getPixel(w - 1, m_loopIndex - 1) << 7;
- CONTEXT |= GBREG->getPixel(w - 2, m_loopIndex - 1) << 8;
- CONTEXT |= GBREG->getPixel(w - 3, m_loopIndex - 1) << 9;
- break;
- }
- bVal = m_pArithDecoder->DECODE(&m_gbContext[CONTEXT]);
- GBREG->setPixel(w, m_loopIndex, bVal);
- }
+ line1 =
+ ((line1 << 1) | GBREG->getPixel(w + 2, m_loopIndex - 2)) & 0x07;
+ line2 =
+ ((line2 << 1) | GBREG->getPixel(w + 3, m_loopIndex - 1)) & 0x1f;
+ line3 = ((line3 << 1) | bVal) & 0x0f;
+ }
+ } break;
+ case 1: {
+ line1 = GBREG->getPixel(2, m_loopIndex - 2);
+ line1 |= GBREG->getPixel(1, m_loopIndex - 2) << 1;
+ line1 |= GBREG->getPixel(0, m_loopIndex - 2) << 2;
+ line2 = GBREG->getPixel(2, m_loopIndex - 1);
+ line2 |= GBREG->getPixel(1, m_loopIndex - 1) << 1;
+ line2 |= GBREG->getPixel(0, m_loopIndex - 1) << 2;
+ line3 = 0;
+ for (FX_DWORD w = 0; w < GBW; w++) {
+ if (USESKIP && SKIP->getPixel(w, m_loopIndex)) {
+ bVal = 0;
+ } else {
+ CONTEXT = line3;
+ CONTEXT |= GBREG->getPixel(w + GBAT[0], m_loopIndex + GBAT[1])
+ << 3;
+ CONTEXT |= line2 << 4;
+ CONTEXT |= line1 << 9;
+ bVal = m_pArithDecoder->DECODE(&m_gbContext[CONTEXT]);
}
- }
- if(pPause && pPause->NeedToPauseNow()) {
- m_loopIndex ++;
- m_ProssiveStatus = FXCODEC_STATUS_DECODE_TOBECONTINUE;
- return FXCODEC_STATUS_DECODE_TOBECONTINUE;
- }
- }
- m_ProssiveStatus = FXCODEC_STATUS_DECODE_FINISH;
- return FXCODEC_STATUS_DECODE_FINISH;
-}
-FXCODEC_STATUS CJBig2_GRDProc::Start_decode_MMR(CJBig2_Image** pImage, CJBig2_BitStream *pStream, IFX_Pause* pPause)
-{
- int bitpos, i;
- JBIG2_ALLOC((* pImage), CJBig2_Image(GBW, GBH));
- if ((* pImage)->m_pData == NULL) {
- delete (* pImage);
- (* pImage) = NULL;
- m_pModule->JBig2_Error("Generic region decoding procedure: Create Image Failed with width = %d, height = %d\n", GBW, GBH);
- m_ProssiveStatus = FXCODEC_STATUS_ERROR;
- return m_ProssiveStatus;
+ if (bVal) {
+ GBREG->setPixel(w, m_loopIndex, bVal);
+ }
+ line1 =
+ ((line1 << 1) | GBREG->getPixel(w + 3, m_loopIndex - 2)) & 0x0f;
+ line2 =
+ ((line2 << 1) | GBREG->getPixel(w + 3, m_loopIndex - 1)) & 0x1f;
+ line3 = ((line3 << 1) | bVal) & 0x07;
+ }
+ } break;
+ case 2: {
+ line1 = GBREG->getPixel(1, m_loopIndex - 2);
+ line1 |= GBREG->getPixel(0, m_loopIndex - 2) << 1;
+ line2 = GBREG->getPixel(1, m_loopIndex - 1);
+ line2 |= GBREG->getPixel(0, m_loopIndex - 1) << 1;
+ line3 = 0;
+ for (FX_DWORD w = 0; w < GBW; w++) {
+ if (USESKIP && SKIP->getPixel(w, m_loopIndex)) {
+ bVal = 0;
+ } else {
+ CONTEXT = line3;
+ CONTEXT |= GBREG->getPixel(w + GBAT[0], m_loopIndex + GBAT[1])
+ << 2;
+ CONTEXT |= line2 << 3;
+ CONTEXT |= line1 << 7;
+ bVal = m_pArithDecoder->DECODE(&m_gbContext[CONTEXT]);
+ }
+ if (bVal) {
+ GBREG->setPixel(w, m_loopIndex, bVal);
+ }
+ line1 =
+ ((line1 << 1) | GBREG->getPixel(w + 2, m_loopIndex - 2)) & 0x07;
+ line2 =
+ ((line2 << 1) | GBREG->getPixel(w + 2, m_loopIndex - 1)) & 0x0f;
+ line3 = ((line3 << 1) | bVal) & 0x03;
+ }
+ } break;
+ case 3: {
+ line1 = GBREG->getPixel(1, m_loopIndex - 1);
+ line1 |= GBREG->getPixel(0, m_loopIndex - 1) << 1;
+ line2 = 0;
+ for (FX_DWORD w = 0; w < GBW; w++) {
+ if (USESKIP && SKIP->getPixel(w, m_loopIndex)) {
+ bVal = 0;
+ } else {
+ CONTEXT = line2;
+ CONTEXT |= GBREG->getPixel(w + GBAT[0], m_loopIndex + GBAT[1])
+ << 4;
+ CONTEXT |= line1 << 5;
+ bVal = m_pArithDecoder->DECODE(&m_gbContext[CONTEXT]);
+ }
+ if (bVal) {
+ GBREG->setPixel(w, m_loopIndex, bVal);
+ }
+ line1 =
+ ((line1 << 1) | GBREG->getPixel(w + 2, m_loopIndex - 1)) & 0x1f;
+ line2 = ((line2 << 1) | bVal) & 0x0f;
+ }
+ } break;
+ }
}
- bitpos = (int)pStream->getBitPos();
- _FaxG4Decode(m_pModule, pStream->getBuf(), pStream->getLength(), &bitpos, (* pImage)->m_pData, GBW, GBH, (* pImage)->m_nStride);
- pStream->setBitPos(bitpos);
- for(i = 0; (FX_DWORD)i < (* pImage)->m_nStride * GBH; i++) {
- (* pImage)->m_pData[i] = ~(* pImage)->m_pData[i];
+ if (pPause && pPause->NeedToPauseNow()) {
+ m_loopIndex++;
+ m_ProssiveStatus = FXCODEC_STATUS_DECODE_TOBECONTINUE;
+ return FXCODEC_STATUS_DECODE_TOBECONTINUE;
}
- m_ProssiveStatus = FXCODEC_STATUS_DECODE_FINISH;
- return m_ProssiveStatus;
+ }
+ m_ProssiveStatus = FXCODEC_STATUS_DECODE_FINISH;
+ return FXCODEC_STATUS_DECODE_FINISH;
}
-FXCODEC_STATUS CJBig2_GRDProc::decode_MMR()
-{
- return m_ProssiveStatus;
+FXCODEC_STATUS CJBig2_GRDProc::Start_decode_Arith_V1(
+ CJBig2_Image** pImage,
+ CJBig2_ArithDecoder* pArithDecoder,
+ JBig2ArithCtx* gbContext,
+ IFX_Pause* pPause) {
+ if (GBW == 0 || GBH == 0) {
+ *pImage = NULL;
+ m_ProssiveStatus = FXCODEC_STATUS_DECODE_FINISH;
+ return FXCODEC_STATUS_DECODE_FINISH;
+ }
+ if (*pImage == NULL) {
+ JBIG2_ALLOC((*pImage), CJBig2_Image(GBW, GBH));
+ }
+ if ((*pImage)->m_pData == NULL) {
+ delete *pImage;
+ *pImage = NULL;
+ m_pModule->JBig2_Error(
+ "Generic region decoding procedure: Create Image Failed with width = "
+ "%d, height = %d\n",
+ GBW, GBH);
+ m_ProssiveStatus = FXCODEC_STATUS_ERROR;
+ return FXCODEC_STATUS_ERROR;
+ }
+ m_ProssiveStatus = FXCODEC_STATUS_DECODE_READY;
+ m_pPause = pPause;
+ m_pImage = pImage;
+ m_DecodeType = 3;
+ (*m_pImage)->fill(0);
+ LTP = 0;
+ m_loopIndex = 0;
+ m_pArithDecoder = pArithDecoder;
+ m_gbContext = gbContext;
+ return decode_Arith_V1(pPause);
}
-FXCODEC_STATUS CJBig2_GRDProc::Continue_decode(IFX_Pause* pPause)
-{
- if(m_ProssiveStatus != FXCODEC_STATUS_DECODE_TOBECONTINUE) {
- return m_ProssiveStatus;
- }
- switch (m_DecodeType) {
+FXCODEC_STATUS CJBig2_GRDProc::decode_Arith_V1(IFX_Pause* pPause) {
+ FX_BOOL SLTP, bVal;
+ FX_DWORD CONTEXT = 0;
+ CJBig2_Image* GBREG = (*m_pImage);
+ for (; m_loopIndex < GBH; m_loopIndex++) {
+ if (TPGDON) {
+ switch (GBTEMPLATE) {
+ case 0:
+ CONTEXT = 0x9b25;
+ break;
case 1:
- return decode_Arith(pPause);
+ CONTEXT = 0x0795;
+ break;
case 2:
- return decode_Arith_V2(pPause);
+ CONTEXT = 0x00e5;
+ break;
case 3:
- return decode_Arith_V1(pPause);
- case 4:
- return decode_MMR();
+ CONTEXT = 0x0195;
+ break;
+ }
+ SLTP = m_pArithDecoder->DECODE(&m_gbContext[CONTEXT]);
+ LTP = LTP ^ SLTP;
+ }
+ if (LTP == 1) {
+ for (FX_DWORD w = 0; w < GBW; w++) {
+ GBREG->setPixel(w, m_loopIndex, GBREG->getPixel(w, m_loopIndex - 1));
+ }
+ } else {
+ for (FX_DWORD w = 0; w < GBW; w++) {
+ if (USESKIP && SKIP->getPixel(w, m_loopIndex)) {
+ GBREG->setPixel(w, m_loopIndex, 0);
+ } else {
+ CONTEXT = 0;
+ switch (GBTEMPLATE) {
+ case 0:
+ CONTEXT |= GBREG->getPixel(w - 1, m_loopIndex);
+ CONTEXT |= GBREG->getPixel(w - 2, m_loopIndex) << 1;
+ CONTEXT |= GBREG->getPixel(w - 3, m_loopIndex) << 2;
+ CONTEXT |= GBREG->getPixel(w - 4, m_loopIndex) << 3;
+ CONTEXT |= GBREG->getPixel(w + GBAT[0], m_loopIndex + GBAT[1])
+ << 4;
+ CONTEXT |= GBREG->getPixel(w + 2, m_loopIndex - 1) << 5;
+ CONTEXT |= GBREG->getPixel(w + 1, m_loopIndex - 1) << 6;
+ CONTEXT |= GBREG->getPixel(w, m_loopIndex - 1) << 7;
+ CONTEXT |= GBREG->getPixel(w - 1, m_loopIndex - 1) << 8;
+ CONTEXT |= GBREG->getPixel(w - 2, m_loopIndex - 1) << 9;
+ CONTEXT |= GBREG->getPixel(w + GBAT[2], m_loopIndex + GBAT[3])
+ << 10;
+ CONTEXT |= GBREG->getPixel(w + GBAT[4], m_loopIndex + GBAT[5])
+ << 11;
+ CONTEXT |= GBREG->getPixel(w + 1, m_loopIndex - 2) << 12;
+ CONTEXT |= GBREG->getPixel(w, m_loopIndex - 2) << 13;
+ CONTEXT |= GBREG->getPixel(w - 1, m_loopIndex - 2) << 14;
+ CONTEXT |= GBREG->getPixel(w + GBAT[6], m_loopIndex + GBAT[7])
+ << 15;
+ break;
+ case 1:
+ CONTEXT |= GBREG->getPixel(w - 1, m_loopIndex);
+ CONTEXT |= GBREG->getPixel(w - 2, m_loopIndex) << 1;
+ CONTEXT |= GBREG->getPixel(w - 3, m_loopIndex) << 2;
+ CONTEXT |= GBREG->getPixel(w + GBAT[0], m_loopIndex + GBAT[1])
+ << 3;
+ CONTEXT |= GBREG->getPixel(w + 2, m_loopIndex - 1) << 4;
+ CONTEXT |= GBREG->getPixel(w + 1, m_loopIndex - 1) << 5;
+ CONTEXT |= GBREG->getPixel(w, m_loopIndex - 1) << 6;
+ CONTEXT |= GBREG->getPixel(w - 1, m_loopIndex - 1) << 7;
+ CONTEXT |= GBREG->getPixel(w - 2, m_loopIndex - 1) << 8;
+ CONTEXT |= GBREG->getPixel(w + 2, m_loopIndex - 2) << 9;
+ CONTEXT |= GBREG->getPixel(w + 1, m_loopIndex - 2) << 10;
+ CONTEXT |= GBREG->getPixel(w, m_loopIndex - 2) << 11;
+ CONTEXT |= GBREG->getPixel(w - 1, m_loopIndex - 2) << 12;
+ break;
+ case 2:
+ CONTEXT |= GBREG->getPixel(w - 1, m_loopIndex);
+ CONTEXT |= GBREG->getPixel(w - 2, m_loopIndex) << 1;
+ CONTEXT |= GBREG->getPixel(w + GBAT[0], m_loopIndex + GBAT[1])
+ << 2;
+ CONTEXT |= GBREG->getPixel(w + 1, m_loopIndex - 1) << 3;
+ CONTEXT |= GBREG->getPixel(w, m_loopIndex - 1) << 4;
+ CONTEXT |= GBREG->getPixel(w - 1, m_loopIndex - 1) << 5;
+ CONTEXT |= GBREG->getPixel(w - 2, m_loopIndex - 1) << 6;
+ CONTEXT |= GBREG->getPixel(w + 1, m_loopIndex - 2) << 7;
+ CONTEXT |= GBREG->getPixel(w, m_loopIndex - 2) << 8;
+ CONTEXT |= GBREG->getPixel(w - 1, m_loopIndex - 2) << 9;
+ break;
+ case 3:
+ CONTEXT |= GBREG->getPixel(w - 1, m_loopIndex);
+ CONTEXT |= GBREG->getPixel(w - 2, m_loopIndex) << 1;
+ CONTEXT |= GBREG->getPixel(w - 3, m_loopIndex) << 2;
+ CONTEXT |= GBREG->getPixel(w - 4, m_loopIndex) << 3;
+ CONTEXT |= GBREG->getPixel(w + GBAT[0], m_loopIndex + GBAT[1])
+ << 4;
+ CONTEXT |= GBREG->getPixel(w + 1, m_loopIndex - 1) << 5;
+ CONTEXT |= GBREG->getPixel(w, m_loopIndex - 1) << 6;
+ CONTEXT |= GBREG->getPixel(w - 1, m_loopIndex - 1) << 7;
+ CONTEXT |= GBREG->getPixel(w - 2, m_loopIndex - 1) << 8;
+ CONTEXT |= GBREG->getPixel(w - 3, m_loopIndex - 1) << 9;
+ break;
+ }
+ bVal = m_pArithDecoder->DECODE(&m_gbContext[CONTEXT]);
+ GBREG->setPixel(w, m_loopIndex, bVal);
+ }
+ }
+ }
+ if (pPause && pPause->NeedToPauseNow()) {
+ m_loopIndex++;
+ m_ProssiveStatus = FXCODEC_STATUS_DECODE_TOBECONTINUE;
+ return FXCODEC_STATUS_DECODE_TOBECONTINUE;
}
+ }
+ m_ProssiveStatus = FXCODEC_STATUS_DECODE_FINISH;
+ return FXCODEC_STATUS_DECODE_FINISH;
+}
+FXCODEC_STATUS CJBig2_GRDProc::Start_decode_MMR(CJBig2_Image** pImage,
+ CJBig2_BitStream* pStream,
+ IFX_Pause* pPause) {
+ int bitpos, i;
+ JBIG2_ALLOC((*pImage), CJBig2_Image(GBW, GBH));
+ if ((*pImage)->m_pData == NULL) {
+ delete (*pImage);
+ (*pImage) = NULL;
+ m_pModule->JBig2_Error(
+ "Generic region decoding procedure: Create Image Failed with width = "
+ "%d, height = %d\n",
+ GBW, GBH);
m_ProssiveStatus = FXCODEC_STATUS_ERROR;
return m_ProssiveStatus;
+ }
+ bitpos = (int)pStream->getBitPos();
+ _FaxG4Decode(m_pModule, pStream->getBuf(), pStream->getLength(), &bitpos,
+ (*pImage)->m_pData, GBW, GBH, (*pImage)->m_nStride);
+ pStream->setBitPos(bitpos);
+ for (i = 0; (FX_DWORD)i < (*pImage)->m_nStride * GBH; i++) {
+ (*pImage)->m_pData[i] = ~(*pImage)->m_pData[i];
+ }
+ m_ProssiveStatus = FXCODEC_STATUS_DECODE_FINISH;
+ return m_ProssiveStatus;
+}
+FXCODEC_STATUS CJBig2_GRDProc::decode_MMR() {
+ return m_ProssiveStatus;
+}
+FXCODEC_STATUS CJBig2_GRDProc::Continue_decode(IFX_Pause* pPause) {
+ if (m_ProssiveStatus != FXCODEC_STATUS_DECODE_TOBECONTINUE) {
+ return m_ProssiveStatus;
+ }
+ switch (m_DecodeType) {
+ case 1:
+ return decode_Arith(pPause);
+ case 2:
+ return decode_Arith_V2(pPause);
+ case 3:
+ return decode_Arith_V1(pPause);
+ case 4:
+ return decode_MMR();
+ }
+ m_ProssiveStatus = FXCODEC_STATUS_ERROR;
+ return m_ProssiveStatus;
}
-FXCODEC_STATUS CJBig2_GRDProc::decode_Arith_Template0_opt3(CJBig2_Image *pImage, CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext, IFX_Pause* pPause)
-{
- FX_BOOL SLTP, bVal;
- FX_DWORD CONTEXT;
- FX_DWORD line1, line2;
- uint8_t *pLine1, *pLine2, cVal;
- int32_t nStride, nStride2, k;
- int32_t nLineBytes, nBitsLeft, cc;
- if(m_pLine == NULL) {
- m_pLine = pImage->m_pData;
+FXCODEC_STATUS CJBig2_GRDProc::decode_Arith_Template0_opt3(
+ CJBig2_Image* pImage,
+ CJBig2_ArithDecoder* pArithDecoder,
+ JBig2ArithCtx* gbContext,
+ IFX_Pause* pPause) {
+ FX_BOOL SLTP, bVal;
+ FX_DWORD CONTEXT;
+ FX_DWORD line1, line2;
+ uint8_t *pLine1, *pLine2, cVal;
+ int32_t nStride, nStride2, k;
+ int32_t nLineBytes, nBitsLeft, cc;
+ if (m_pLine == NULL) {
+ m_pLine = pImage->m_pData;
+ }
+ nStride = pImage->m_nStride;
+ nStride2 = nStride << 1;
+ nLineBytes = ((GBW + 7) >> 3) - 1;
+ nBitsLeft = GBW - (nLineBytes << 3);
+ FX_DWORD height = GBH & 0x7fffffff;
+ for (; m_loopIndex < height; m_loopIndex++) {
+ if (TPGDON) {
+ SLTP = pArithDecoder->DECODE(&gbContext[0x9b25]);
+ LTP = LTP ^ SLTP;
}
- nStride = pImage->m_nStride;
- nStride2 = nStride << 1;
- nLineBytes = ((GBW + 7) >> 3) - 1;
- nBitsLeft = GBW - (nLineBytes << 3);
- FX_DWORD height = GBH & 0x7fffffff;
- for(; m_loopIndex < height; m_loopIndex++) {
- if(TPGDON) {
- SLTP = pArithDecoder->DECODE(&gbContext[0x9b25]);
- LTP = LTP ^ SLTP;
+ if (LTP == 1) {
+ pImage->copyLine(m_loopIndex, m_loopIndex - 1);
+ } else {
+ if (m_loopIndex > 1) {
+ pLine1 = m_pLine - nStride2;
+ pLine2 = m_pLine - nStride;
+ line1 = (*pLine1++) << 6;
+ line2 = *pLine2++;
+ CONTEXT = ((line1 & 0xf800) | (line2 & 0x07f0));
+ for (cc = 0; cc < nLineBytes; cc++) {
+ line1 = (line1 << 8) | ((*pLine1++) << 6);
+ line2 = (line2 << 8) | (*pLine2++);
+ cVal = 0;
+ for (k = 7; k >= 0; k--) {
+ bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
+ cVal |= bVal << k;
+ CONTEXT = (((CONTEXT & 0x7bf7) << 1) | bVal |
+ ((line1 >> k) & 0x0800) | ((line2 >> k) & 0x0010));
+ }
+ m_pLine[cc] = cVal;
}
- if(LTP == 1) {
- pImage->copyLine(m_loopIndex, m_loopIndex - 1);
- } else {
- if(m_loopIndex > 1) {
- pLine1 = m_pLine - nStride2;
- pLine2 = m_pLine - nStride;
- line1 = (*pLine1++) << 6;
- line2 = *pLine2++;
- CONTEXT = ((line1 & 0xf800) | (line2 & 0x07f0));
- for(cc = 0; cc < nLineBytes; cc++) {
- line1 = (line1 << 8) | ((*pLine1++) << 6);
- line2 = (line2 << 8) | (*pLine2++);
- cVal = 0;
- for(k = 7; k >= 0; k--) {
- bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
- cVal |= bVal << k;
- CONTEXT = (((CONTEXT & 0x7bf7) << 1) | bVal
- | ((line1 >> k) & 0x0800)
- | ((line2 >> k) & 0x0010));
- }
- m_pLine[cc] = cVal;
- }
- line1 <<= 8;
- line2 <<= 8;
- cVal = 0;
- for(k = 0; k < nBitsLeft; k++) {
- bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
- cVal |= bVal << (7 - k);
- CONTEXT = (((CONTEXT & 0x7bf7) << 1) | bVal
- | ((line1 >> (7 - k)) & 0x0800)
- | ((line2 >> (7 - k)) & 0x0010));
- }
- m_pLine[nLineBytes] = cVal;
- } else {
- pLine2 = m_pLine - nStride;
- line2 = (m_loopIndex & 1) ? (*pLine2++) : 0;
- CONTEXT = (line2 & 0x07f0);
- for(cc = 0; cc < nLineBytes; cc++) {
- if(m_loopIndex & 1) {
- line2 = (line2 << 8) | (*pLine2++);
- }
- cVal = 0;
- for(k = 7; k >= 0; k--) {
- bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
- cVal |= bVal << k;
- CONTEXT = (((CONTEXT & 0x7bf7) << 1) | bVal
- | ((line2 >> k) & 0x0010));
- }
- m_pLine[cc] = cVal;
- }
- line2 <<= 8;
- cVal = 0;
- for(k = 0; k < nBitsLeft; k++) {
- bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
- cVal |= bVal << (7 - k);
- CONTEXT = (((CONTEXT & 0x7bf7) << 1) | bVal
- | ((line2 >> (7 - k)) & 0x0010));
- }
- m_pLine[nLineBytes] = cVal;
- }
+ line1 <<= 8;
+ line2 <<= 8;
+ cVal = 0;
+ for (k = 0; k < nBitsLeft; k++) {
+ bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
+ cVal |= bVal << (7 - k);
+ CONTEXT =
+ (((CONTEXT & 0x7bf7) << 1) | bVal |
+ ((line1 >> (7 - k)) & 0x0800) | ((line2 >> (7 - k)) & 0x0010));
}
- m_pLine += nStride;
- if(pPause && pPause->NeedToPauseNow()) {
- m_loopIndex++;
- m_ProssiveStatus = FXCODEC_STATUS_DECODE_TOBECONTINUE;
- return FXCODEC_STATUS_DECODE_TOBECONTINUE;
+ m_pLine[nLineBytes] = cVal;
+ } else {
+ pLine2 = m_pLine - nStride;
+ line2 = (m_loopIndex & 1) ? (*pLine2++) : 0;
+ CONTEXT = (line2 & 0x07f0);
+ for (cc = 0; cc < nLineBytes; cc++) {
+ if (m_loopIndex & 1) {
+ line2 = (line2 << 8) | (*pLine2++);
+ }
+ cVal = 0;
+ for (k = 7; k >= 0; k--) {
+ bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
+ cVal |= bVal << k;
+ CONTEXT =
+ (((CONTEXT & 0x7bf7) << 1) | bVal | ((line2 >> k) & 0x0010));
+ }
+ m_pLine[cc] = cVal;
}
+ line2 <<= 8;
+ cVal = 0;
+ for (k = 0; k < nBitsLeft; k++) {
+ bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
+ cVal |= bVal << (7 - k);
+ CONTEXT = (((CONTEXT & 0x7bf7) << 1) | bVal |
+ ((line2 >> (7 - k)) & 0x0010));
+ }
+ m_pLine[nLineBytes] = cVal;
+ }
}
- m_ProssiveStatus = FXCODEC_STATUS_DECODE_FINISH;
- return FXCODEC_STATUS_DECODE_FINISH;
+ m_pLine += nStride;
+ if (pPause && pPause->NeedToPauseNow()) {
+ m_loopIndex++;
+ m_ProssiveStatus = FXCODEC_STATUS_DECODE_TOBECONTINUE;
+ return FXCODEC_STATUS_DECODE_TOBECONTINUE;
+ }
+ }
+ m_ProssiveStatus = FXCODEC_STATUS_DECODE_FINISH;
+ return FXCODEC_STATUS_DECODE_FINISH;
}
-FXCODEC_STATUS CJBig2_GRDProc::decode_Arith_Template0_unopt(CJBig2_Image * pImage, CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext, IFX_Pause* pPause)
-{
- FX_BOOL SLTP, bVal;
- FX_DWORD CONTEXT;
- FX_DWORD line1, line2, line3;
- for(; m_loopIndex < GBH; m_loopIndex++) {
- if(TPGDON) {
- SLTP = pArithDecoder->DECODE(&gbContext[0x9b25]);
- LTP = LTP ^ SLTP;
- }
- if(LTP == 1) {
- pImage->copyLine(m_loopIndex, m_loopIndex - 1);
+FXCODEC_STATUS CJBig2_GRDProc::decode_Arith_Template0_unopt(
+ CJBig2_Image* pImage,
+ CJBig2_ArithDecoder* pArithDecoder,
+ JBig2ArithCtx* gbContext,
+ IFX_Pause* pPause) {
+ FX_BOOL SLTP, bVal;
+ FX_DWORD CONTEXT;
+ FX_DWORD line1, line2, line3;
+ for (; m_loopIndex < GBH; m_loopIndex++) {
+ if (TPGDON) {
+ SLTP = pArithDecoder->DECODE(&gbContext[0x9b25]);
+ LTP = LTP ^ SLTP;
+ }
+ if (LTP == 1) {
+ pImage->copyLine(m_loopIndex, m_loopIndex - 1);
+ } else {
+ line1 = pImage->getPixel(1, m_loopIndex - 2);
+ line1 |= pImage->getPixel(0, m_loopIndex - 2) << 1;
+ line2 = pImage->getPixel(2, m_loopIndex - 1);
+ line2 |= pImage->getPixel(1, m_loopIndex - 1) << 1;
+ line2 |= pImage->getPixel(0, m_loopIndex - 1) << 2;
+ line3 = 0;
+ for (FX_DWORD w = 0; w < GBW; w++) {
+ if (USESKIP && SKIP->getPixel(w, m_loopIndex)) {
+ bVal = 0;
} else {
- line1 = pImage->getPixel(1, m_loopIndex - 2);
- line1 |= pImage->getPixel(0, m_loopIndex - 2) << 1;
- line2 = pImage->getPixel(2, m_loopIndex - 1);
- line2 |= pImage->getPixel(1, m_loopIndex - 1) << 1;
- line2 |= pImage->getPixel(0, m_loopIndex - 1) << 2;
- line3 = 0;
- for(FX_DWORD w = 0; w < GBW; w++) {
- if(USESKIP && SKIP->getPixel(w, m_loopIndex)) {
- bVal = 0;
- } else {
- CONTEXT = line3;
- CONTEXT |= pImage->getPixel(w + GBAT[0], m_loopIndex + GBAT[1]) << 4;
- CONTEXT |= line2 << 5;
- CONTEXT |= pImage->getPixel(w + GBAT[2], m_loopIndex + GBAT[3]) << 10;
- CONTEXT |= pImage->getPixel(w + GBAT[4], m_loopIndex + GBAT[5]) << 11;
- CONTEXT |= line1 << 12;
- CONTEXT |= pImage->getPixel(w + GBAT[6], m_loopIndex + GBAT[7]) << 15;
- bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
- }
- if(bVal) {
- pImage->setPixel(w, m_loopIndex, bVal);
- }
- line1 = ((line1 << 1) | pImage->getPixel(w + 2, m_loopIndex - 2)) & 0x07;
- line2 = ((line2 << 1) | pImage->getPixel(w + 3, m_loopIndex - 1)) & 0x1f;
- line3 = ((line3 << 1) | bVal) & 0x0f;
- }
+ CONTEXT = line3;
+ CONTEXT |= pImage->getPixel(w + GBAT[0], m_loopIndex + GBAT[1]) << 4;
+ CONTEXT |= line2 << 5;
+ CONTEXT |= pImage->getPixel(w + GBAT[2], m_loopIndex + GBAT[3]) << 10;
+ CONTEXT |= pImage->getPixel(w + GBAT[4], m_loopIndex + GBAT[5]) << 11;
+ CONTEXT |= line1 << 12;
+ CONTEXT |= pImage->getPixel(w + GBAT[6], m_loopIndex + GBAT[7]) << 15;
+ bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
}
- if(pPause && pPause->NeedToPauseNow()) {
- m_loopIndex++;
- m_ProssiveStatus = FXCODEC_STATUS_DECODE_TOBECONTINUE;
- return FXCODEC_STATUS_DECODE_TOBECONTINUE;
+ if (bVal) {
+ pImage->setPixel(w, m_loopIndex, bVal);
}
+ line1 =
+ ((line1 << 1) | pImage->getPixel(w + 2, m_loopIndex - 2)) & 0x07;
+ line2 =
+ ((line2 << 1) | pImage->getPixel(w + 3, m_loopIndex - 1)) & 0x1f;
+ line3 = ((line3 << 1) | bVal) & 0x0f;
+ }
}
- m_ProssiveStatus = FXCODEC_STATUS_DECODE_FINISH;
- return FXCODEC_STATUS_DECODE_FINISH;
+ if (pPause && pPause->NeedToPauseNow()) {
+ m_loopIndex++;
+ m_ProssiveStatus = FXCODEC_STATUS_DECODE_TOBECONTINUE;
+ return FXCODEC_STATUS_DECODE_TOBECONTINUE;
+ }
+ }
+ m_ProssiveStatus = FXCODEC_STATUS_DECODE_FINISH;
+ return FXCODEC_STATUS_DECODE_FINISH;
}
-FXCODEC_STATUS CJBig2_GRDProc::decode_Arith_Template1_opt3(CJBig2_Image *pImage, CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext, IFX_Pause* pPause)
-{
- FX_BOOL SLTP, bVal;
- FX_DWORD CONTEXT;
- FX_DWORD line1, line2;
- uint8_t *pLine1, *pLine2, cVal;
- int32_t nStride, nStride2, k;
- int32_t nLineBytes, nBitsLeft, cc;
- if (!m_pLine) {
- m_pLine = pImage->m_pData;
+FXCODEC_STATUS CJBig2_GRDProc::decode_Arith_Template1_opt3(
+ CJBig2_Image* pImage,
+ CJBig2_ArithDecoder* pArithDecoder,
+ JBig2ArithCtx* gbContext,
+ IFX_Pause* pPause) {
+ FX_BOOL SLTP, bVal;
+ FX_DWORD CONTEXT;
+ FX_DWORD line1, line2;
+ uint8_t *pLine1, *pLine2, cVal;
+ int32_t nStride, nStride2, k;
+ int32_t nLineBytes, nBitsLeft, cc;
+ if (!m_pLine) {
+ m_pLine = pImage->m_pData;
+ }
+ nStride = pImage->m_nStride;
+ nStride2 = nStride << 1;
+ nLineBytes = ((GBW + 7) >> 3) - 1;
+ nBitsLeft = GBW - (nLineBytes << 3);
+ for (; m_loopIndex < GBH; m_loopIndex++) {
+ if (TPGDON) {
+ SLTP = pArithDecoder->DECODE(&gbContext[0x0795]);
+ LTP = LTP ^ SLTP;
}
- nStride = pImage->m_nStride;
- nStride2 = nStride << 1;
- nLineBytes = ((GBW + 7) >> 3) - 1;
- nBitsLeft = GBW - (nLineBytes << 3);
- for(; m_loopIndex < GBH; m_loopIndex++) {
- if(TPGDON) {
- SLTP = pArithDecoder->DECODE(&gbContext[0x0795]);
- LTP = LTP ^ SLTP;
+ if (LTP == 1) {
+ pImage->copyLine(m_loopIndex, m_loopIndex - 1);
+ } else {
+ if (m_loopIndex > 1) {
+ pLine1 = m_pLine - nStride2;
+ pLine2 = m_pLine - nStride;
+ line1 = (*pLine1++) << 4;
+ line2 = *pLine2++;
+ CONTEXT = (line1 & 0x1e00) | ((line2 >> 1) & 0x01f8);
+ for (cc = 0; cc < nLineBytes; cc++) {
+ line1 = (line1 << 8) | ((*pLine1++) << 4);
+ line2 = (line2 << 8) | (*pLine2++);
+ cVal = 0;
+ for (k = 7; k >= 0; k--) {
+ bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
+ cVal |= bVal << k;
+ CONTEXT = ((CONTEXT & 0x0efb) << 1) | bVal |
+ ((line1 >> k) & 0x0200) | ((line2 >> (k + 1)) & 0x0008);
+ }
+ m_pLine[cc] = cVal;
}
- if(LTP == 1) {
- pImage->copyLine(m_loopIndex, m_loopIndex - 1);
- } else {
- if(m_loopIndex > 1) {
- pLine1 = m_pLine - nStride2;
- pLine2 = m_pLine - nStride;
- line1 = (*pLine1++) << 4;
- line2 = *pLine2++;
- CONTEXT = (line1 & 0x1e00) | ((line2 >> 1) & 0x01f8);
- for(cc = 0; cc < nLineBytes; cc++) {
- line1 = (line1 << 8) | ((*pLine1++) << 4);
- line2 = (line2 << 8) | (*pLine2++);
- cVal = 0;
- for(k = 7; k >= 0; k--) {
- bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
- cVal |= bVal << k;
- CONTEXT = ((CONTEXT & 0x0efb) << 1) | bVal
- | ((line1 >> k) & 0x0200)
- | ((line2 >> (k + 1)) & 0x0008);
- }
- m_pLine[cc] = cVal;
- }
- line1 <<= 8;
- line2 <<= 8;
- cVal = 0;
- for(k = 0; k < nBitsLeft; k++) {
- bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
- cVal |= bVal << (7 - k);
- CONTEXT = ((CONTEXT & 0x0efb) << 1) | bVal
- | ((line1 >> (7 - k)) & 0x0200)
- | ((line2 >> (8 - k)) & 0x0008);
- }
- m_pLine[nLineBytes] = cVal;
- } else {
- pLine2 = m_pLine - nStride;
- line2 = (m_loopIndex & 1) ? (*pLine2++) : 0;
- CONTEXT = (line2 >> 1) & 0x01f8;
- for(cc = 0; cc < nLineBytes; cc++) {
- if(m_loopIndex & 1) {
- line2 = (line2 << 8) | (*pLine2++);
- }
- cVal = 0;
- for(k = 7; k >= 0; k--) {
- bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
- cVal |= bVal << k;
- CONTEXT = ((CONTEXT & 0x0efb) << 1) | bVal
- | ((line2 >> (k + 1)) & 0x0008);
- }
- m_pLine[cc] = cVal;
- }
- line2 <<= 8;
- cVal = 0;
- for(k = 0; k < nBitsLeft; k++) {
- bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
- cVal |= bVal << (7 - k);
- CONTEXT = ((CONTEXT & 0x0efb) << 1) | bVal
- | ((line2 >> (8 - k)) & 0x0008);
- }
- m_pLine[nLineBytes] = cVal;
- }
+ line1 <<= 8;
+ line2 <<= 8;
+ cVal = 0;
+ for (k = 0; k < nBitsLeft; k++) {
+ bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
+ cVal |= bVal << (7 - k);
+ CONTEXT = ((CONTEXT & 0x0efb) << 1) | bVal |
+ ((line1 >> (7 - k)) & 0x0200) |
+ ((line2 >> (8 - k)) & 0x0008);
+ }
+ m_pLine[nLineBytes] = cVal;
+ } else {
+ pLine2 = m_pLine - nStride;
+ line2 = (m_loopIndex & 1) ? (*pLine2++) : 0;
+ CONTEXT = (line2 >> 1) & 0x01f8;
+ for (cc = 0; cc < nLineBytes; cc++) {
+ if (m_loopIndex & 1) {
+ line2 = (line2 << 8) | (*pLine2++);
+ }
+ cVal = 0;
+ for (k = 7; k >= 0; k--) {
+ bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
+ cVal |= bVal << k;
+ CONTEXT = ((CONTEXT & 0x0efb) << 1) | bVal |
+ ((line2 >> (k + 1)) & 0x0008);
+ }
+ m_pLine[cc] = cVal;
}
- m_pLine += nStride;
- if(pPause && pPause->NeedToPauseNow()) {
- m_loopIndex++;
- m_ProssiveStatus = FXCODEC_STATUS_DECODE_TOBECONTINUE;
- return FXCODEC_STATUS_DECODE_TOBECONTINUE;
+ line2 <<= 8;
+ cVal = 0;
+ for (k = 0; k < nBitsLeft; k++) {
+ bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
+ cVal |= bVal << (7 - k);
+ CONTEXT =
+ ((CONTEXT & 0x0efb) << 1) | bVal | ((line2 >> (8 - k)) & 0x0008);
}
+ m_pLine[nLineBytes] = cVal;
+ }
}
- m_ProssiveStatus = FXCODEC_STATUS_DECODE_FINISH;
- return FXCODEC_STATUS_DECODE_FINISH;
+ m_pLine += nStride;
+ if (pPause && pPause->NeedToPauseNow()) {
+ m_loopIndex++;
+ m_ProssiveStatus = FXCODEC_STATUS_DECODE_TOBECONTINUE;
+ return FXCODEC_STATUS_DECODE_TOBECONTINUE;
+ }
+ }
+ m_ProssiveStatus = FXCODEC_STATUS_DECODE_FINISH;
+ return FXCODEC_STATUS_DECODE_FINISH;
}
-FXCODEC_STATUS CJBig2_GRDProc::decode_Arith_Template1_unopt(CJBig2_Image * pImage, CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext, IFX_Pause* pPause)
-{
- FX_BOOL SLTP, bVal;
- FX_DWORD CONTEXT;
- FX_DWORD line1, line2, line3;
- for(FX_DWORD h = 0; h < GBH; h++) {
- if(TPGDON) {
- SLTP = pArithDecoder->DECODE(&gbContext[0x0795]);
- LTP = LTP ^ SLTP;
- }
- if(LTP == 1) {
- pImage->copyLine(h, h - 1);
+FXCODEC_STATUS CJBig2_GRDProc::decode_Arith_Template1_unopt(
+ CJBig2_Image* pImage,
+ CJBig2_ArithDecoder* pArithDecoder,
+ JBig2ArithCtx* gbContext,
+ IFX_Pause* pPause) {
+ FX_BOOL SLTP, bVal;
+ FX_DWORD CONTEXT;
+ FX_DWORD line1, line2, line3;
+ for (FX_DWORD h = 0; h < GBH; h++) {
+ if (TPGDON) {
+ SLTP = pArithDecoder->DECODE(&gbContext[0x0795]);
+ LTP = LTP ^ SLTP;
+ }
+ if (LTP == 1) {
+ pImage->copyLine(h, h - 1);
+ } else {
+ line1 = pImage->getPixel(2, h - 2);
+ line1 |= pImage->getPixel(1, h - 2) << 1;
+ line1 |= pImage->getPixel(0, h - 2) << 2;
+ line2 = pImage->getPixel(2, h - 1);
+ line2 |= pImage->getPixel(1, h - 1) << 1;
+ line2 |= pImage->getPixel(0, h - 1) << 2;
+ line3 = 0;
+ for (FX_DWORD w = 0; w < GBW; w++) {
+ if (USESKIP && SKIP->getPixel(w, h)) {
+ bVal = 0;
} else {
- line1 = pImage->getPixel(2, h - 2);
- line1 |= pImage->getPixel(1, h - 2) << 1;
- line1 |= pImage->getPixel(0, h - 2) << 2;
- line2 = pImage->getPixel(2, h - 1);
- line2 |= pImage->getPixel(1, h - 1) << 1;
- line2 |= pImage->getPixel(0, h - 1) << 2;
- line3 = 0;
- for(FX_DWORD w = 0; w < GBW; w++) {
- if(USESKIP && SKIP->getPixel(w, h)) {
- bVal = 0;
- } else {
- CONTEXT = line3;
- CONTEXT |= pImage->getPixel(w + GBAT[0], h + GBAT[1]) << 3;
- CONTEXT |= line2 << 4;
- CONTEXT |= line1 << 9;
- bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
- }
- if(bVal) {
- pImage->setPixel(w, h, bVal);
- }
- line1 = ((line1 << 1) | pImage->getPixel(w + 3, h - 2)) & 0x0f;
- line2 = ((line2 << 1) | pImage->getPixel(w + 3, h - 1)) & 0x1f;
- line3 = ((line3 << 1) | bVal) & 0x07;
- }
+ CONTEXT = line3;
+ CONTEXT |= pImage->getPixel(w + GBAT[0], h + GBAT[1]) << 3;
+ CONTEXT |= line2 << 4;
+ CONTEXT |= line1 << 9;
+ bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
}
- if(pPause && pPause->NeedToPauseNow()) {
- m_loopIndex++;
- m_ProssiveStatus = FXCODEC_STATUS_DECODE_TOBECONTINUE;
- return FXCODEC_STATUS_DECODE_TOBECONTINUE;
+ if (bVal) {
+ pImage->setPixel(w, h, bVal);
}
+ line1 = ((line1 << 1) | pImage->getPixel(w + 3, h - 2)) & 0x0f;
+ line2 = ((line2 << 1) | pImage->getPixel(w + 3, h - 1)) & 0x1f;
+ line3 = ((line3 << 1) | bVal) & 0x07;
+ }
}
- m_ProssiveStatus = FXCODEC_STATUS_DECODE_FINISH;
- return FXCODEC_STATUS_DECODE_FINISH;
+ if (pPause && pPause->NeedToPauseNow()) {
+ m_loopIndex++;
+ m_ProssiveStatus = FXCODEC_STATUS_DECODE_TOBECONTINUE;
+ return FXCODEC_STATUS_DECODE_TOBECONTINUE;
+ }
+ }
+ m_ProssiveStatus = FXCODEC_STATUS_DECODE_FINISH;
+ return FXCODEC_STATUS_DECODE_FINISH;
}
-FXCODEC_STATUS CJBig2_GRDProc::decode_Arith_Template2_opt3(CJBig2_Image *pImage, CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext, IFX_Pause* pPause)
-{
- FX_BOOL SLTP, bVal;
- FX_DWORD CONTEXT;
- FX_DWORD line1, line2;
- uint8_t *pLine1, *pLine2, cVal;
- int32_t nStride, nStride2, k;
- int32_t nLineBytes, nBitsLeft, cc;
- if(!m_pLine) {
- m_pLine = pImage->m_pData;
+FXCODEC_STATUS CJBig2_GRDProc::decode_Arith_Template2_opt3(
+ CJBig2_Image* pImage,
+ CJBig2_ArithDecoder* pArithDecoder,
+ JBig2ArithCtx* gbContext,
+ IFX_Pause* pPause) {
+ FX_BOOL SLTP, bVal;
+ FX_DWORD CONTEXT;
+ FX_DWORD line1, line2;
+ uint8_t *pLine1, *pLine2, cVal;
+ int32_t nStride, nStride2, k;
+ int32_t nLineBytes, nBitsLeft, cc;
+ if (!m_pLine) {
+ m_pLine = pImage->m_pData;
+ }
+ nStride = pImage->m_nStride;
+ nStride2 = nStride << 1;
+ nLineBytes = ((GBW + 7) >> 3) - 1;
+ nBitsLeft = GBW - (nLineBytes << 3);
+ for (; m_loopIndex < GBH; m_loopIndex++) {
+ if (TPGDON) {
+ SLTP = pArithDecoder->DECODE(&gbContext[0x00e5]);
+ LTP = LTP ^ SLTP;
}
- nStride = pImage->m_nStride;
- nStride2 = nStride << 1;
- nLineBytes = ((GBW + 7) >> 3) - 1;
- nBitsLeft = GBW - (nLineBytes << 3);
- for(; m_loopIndex < GBH; m_loopIndex++) {
- if(TPGDON) {
- SLTP = pArithDecoder->DECODE(&gbContext[0x00e5]);
- LTP = LTP ^ SLTP;
+ if (LTP == 1) {
+ pImage->copyLine(m_loopIndex, m_loopIndex - 1);
+ } else {
+ if (m_loopIndex > 1) {
+ pLine1 = m_pLine - nStride2;
+ pLine2 = m_pLine - nStride;
+ line1 = (*pLine1++) << 1;
+ line2 = *pLine2++;
+ CONTEXT = (line1 & 0x0380) | ((line2 >> 3) & 0x007c);
+ for (cc = 0; cc < nLineBytes; cc++) {
+ line1 = (line1 << 8) | ((*pLine1++) << 1);
+ line2 = (line2 << 8) | (*pLine2++);
+ cVal = 0;
+ for (k = 7; k >= 0; k--) {
+ bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
+ cVal |= bVal << k;
+ CONTEXT = ((CONTEXT & 0x01bd) << 1) | bVal |
+ ((line1 >> k) & 0x0080) | ((line2 >> (k + 3)) & 0x0004);
+ }
+ m_pLine[cc] = cVal;
}
- if(LTP == 1) {
- pImage->copyLine(m_loopIndex, m_loopIndex - 1);
- } else {
- if(m_loopIndex > 1) {
- pLine1 = m_pLine - nStride2;
- pLine2 = m_pLine - nStride;
- line1 = (*pLine1++) << 1;
- line2 = *pLine2++;
- CONTEXT = (line1 & 0x0380) | ((line2 >> 3) & 0x007c);
- for(cc = 0; cc < nLineBytes; cc++) {
- line1 = (line1 << 8) | ((*pLine1++) << 1);
- line2 = (line2 << 8) | (*pLine2++);
- cVal = 0;
- for(k = 7; k >= 0; k--) {
- bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
- cVal |= bVal << k;
- CONTEXT = ((CONTEXT & 0x01bd) << 1) | bVal
- | ((line1 >> k) & 0x0080)
- | ((line2 >> (k + 3)) & 0x0004);
- }
- m_pLine[cc] = cVal;
- }
- line1 <<= 8;
- line2 <<= 8;
- cVal = 0;
- for(k = 0; k < nBitsLeft; k++) {
- bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
- cVal |= bVal << (7 - k);
- CONTEXT = ((CONTEXT & 0x01bd) << 1) | bVal
- | ((line1 >> (7 - k)) & 0x0080)
- | ((line2 >> (10 - k)) & 0x0004);
- }
- m_pLine[nLineBytes] = cVal;
- } else {
- pLine2 = m_pLine - nStride;
- line2 = (m_loopIndex & 1) ? (*pLine2++) : 0;
- CONTEXT = (line2 >> 3) & 0x007c;
- for(cc = 0; cc < nLineBytes; cc++) {
- if(m_loopIndex & 1) {
- line2 = (line2 << 8) | (*pLine2++);
- }
- cVal = 0;
- for(k = 7; k >= 0; k--) {
- bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
- cVal |= bVal << k;
- CONTEXT = ((CONTEXT & 0x01bd) << 1) | bVal
- | ((line2 >> (k + 3)) & 0x0004);
- }
- m_pLine[cc] = cVal;
- }
- line2 <<= 8;
- cVal = 0;
- for(k = 0; k < nBitsLeft; k++) {
- bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
- cVal |= bVal << (7 - k);
- CONTEXT = ((CONTEXT & 0x01bd) << 1) | bVal
- | (((line2 >> (10 - k))) & 0x0004);
- }
- m_pLine[nLineBytes] = cVal;
- }
+ line1 <<= 8;
+ line2 <<= 8;
+ cVal = 0;
+ for (k = 0; k < nBitsLeft; k++) {
+ bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
+ cVal |= bVal << (7 - k);
+ CONTEXT = ((CONTEXT & 0x01bd) << 1) | bVal |
+ ((line1 >> (7 - k)) & 0x0080) |
+ ((line2 >> (10 - k)) & 0x0004);
}
- m_pLine += nStride;
- if(pPause && m_loopIndex % 50 == 0 && pPause->NeedToPauseNow()) {
- m_loopIndex++;
- m_ProssiveStatus = FXCODEC_STATUS_DECODE_TOBECONTINUE;
- return FXCODEC_STATUS_DECODE_TOBECONTINUE;
+ m_pLine[nLineBytes] = cVal;
+ } else {
+ pLine2 = m_pLine - nStride;
+ line2 = (m_loopIndex & 1) ? (*pLine2++) : 0;
+ CONTEXT = (line2 >> 3) & 0x007c;
+ for (cc = 0; cc < nLineBytes; cc++) {
+ if (m_loopIndex & 1) {
+ line2 = (line2 << 8) | (*pLine2++);
+ }
+ cVal = 0;
+ for (k = 7; k >= 0; k--) {
+ bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
+ cVal |= bVal << k;
+ CONTEXT = ((CONTEXT & 0x01bd) << 1) | bVal |
+ ((line2 >> (k + 3)) & 0x0004);
+ }
+ m_pLine[cc] = cVal;
}
+ line2 <<= 8;
+ cVal = 0;
+ for (k = 0; k < nBitsLeft; k++) {
+ bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
+ cVal |= bVal << (7 - k);
+ CONTEXT = ((CONTEXT & 0x01bd) << 1) | bVal |
+ (((line2 >> (10 - k))) & 0x0004);
+ }
+ m_pLine[nLineBytes] = cVal;
+ }
}
- m_ProssiveStatus = FXCODEC_STATUS_DECODE_FINISH;
- return FXCODEC_STATUS_DECODE_FINISH;
+ m_pLine += nStride;
+ if (pPause && m_loopIndex % 50 == 0 && pPause->NeedToPauseNow()) {
+ m_loopIndex++;
+ m_ProssiveStatus = FXCODEC_STATUS_DECODE_TOBECONTINUE;
+ return FXCODEC_STATUS_DECODE_TOBECONTINUE;
+ }
+ }
+ m_ProssiveStatus = FXCODEC_STATUS_DECODE_FINISH;
+ return FXCODEC_STATUS_DECODE_FINISH;
}
-FXCODEC_STATUS CJBig2_GRDProc::decode_Arith_Template2_unopt(CJBig2_Image * pImage, CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext, IFX_Pause* pPause)
-{
- FX_BOOL SLTP, bVal;
- FX_DWORD CONTEXT;
- FX_DWORD line1, line2, line3;
- for(; m_loopIndex < GBH; m_loopIndex++) {
- if(TPGDON) {
- SLTP = pArithDecoder->DECODE(&gbContext[0x00e5]);
- LTP = LTP ^ SLTP;
- }
- if(LTP == 1) {
- pImage->copyLine(m_loopIndex, m_loopIndex - 1);
+FXCODEC_STATUS CJBig2_GRDProc::decode_Arith_Template2_unopt(
+ CJBig2_Image* pImage,
+ CJBig2_ArithDecoder* pArithDecoder,
+ JBig2ArithCtx* gbContext,
+ IFX_Pause* pPause) {
+ FX_BOOL SLTP, bVal;
+ FX_DWORD CONTEXT;
+ FX_DWORD line1, line2, line3;
+ for (; m_loopIndex < GBH; m_loopIndex++) {
+ if (TPGDON) {
+ SLTP = pArithDecoder->DECODE(&gbContext[0x00e5]);
+ LTP = LTP ^ SLTP;
+ }
+ if (LTP == 1) {
+ pImage->copyLine(m_loopIndex, m_loopIndex - 1);
+ } else {
+ line1 = pImage->getPixel(1, m_loopIndex - 2);
+ line1 |= pImage->getPixel(0, m_loopIndex - 2) << 1;
+ line2 = pImage->getPixel(1, m_loopIndex - 1);
+ line2 |= pImage->getPixel(0, m_loopIndex - 1) << 1;
+ line3 = 0;
+ for (FX_DWORD w = 0; w < GBW; w++) {
+ if (USESKIP && SKIP->getPixel(w, m_loopIndex)) {
+ bVal = 0;
} else {
- line1 = pImage->getPixel(1, m_loopIndex - 2);
- line1 |= pImage->getPixel(0, m_loopIndex - 2) << 1;
- line2 = pImage->getPixel(1, m_loopIndex - 1);
- line2 |= pImage->getPixel(0, m_loopIndex - 1) << 1;
- line3 = 0;
- for(FX_DWORD w = 0; w < GBW; w++) {
- if(USESKIP && SKIP->getPixel(w, m_loopIndex)) {
- bVal = 0;
- } else {
- CONTEXT = line3;
- CONTEXT |= pImage->getPixel(w + GBAT[0], m_loopIndex + GBAT[1]) << 2;
- CONTEXT |= line2 << 3;
- CONTEXT |= line1 << 7;
- bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
- }
- if(bVal) {
- pImage->setPixel(w, m_loopIndex, bVal);
- }
- line1 = ((line1 << 1) | pImage->getPixel(w + 2, m_loopIndex - 2)) & 0x07;
- line2 = ((line2 << 1) | pImage->getPixel(w + 2, m_loopIndex - 1)) & 0x0f;
- line3 = ((line3 << 1) | bVal) & 0x03;
- }
+ CONTEXT = line3;
+ CONTEXT |= pImage->getPixel(w + GBAT[0], m_loopIndex + GBAT[1]) << 2;
+ CONTEXT |= line2 << 3;
+ CONTEXT |= line1 << 7;
+ bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
}
- if(pPause && pPause->NeedToPauseNow()) {
- m_loopIndex++;
- m_ProssiveStatus = FXCODEC_STATUS_DECODE_TOBECONTINUE;
- return FXCODEC_STATUS_DECODE_TOBECONTINUE;
+ if (bVal) {
+ pImage->setPixel(w, m_loopIndex, bVal);
}
+ line1 =
+ ((line1 << 1) | pImage->getPixel(w + 2, m_loopIndex - 2)) & 0x07;
+ line2 =
+ ((line2 << 1) | pImage->getPixel(w + 2, m_loopIndex - 1)) & 0x0f;
+ line3 = ((line3 << 1) | bVal) & 0x03;
+ }
}
- m_ProssiveStatus = FXCODEC_STATUS_DECODE_FINISH;
- return FXCODEC_STATUS_DECODE_FINISH;
+ if (pPause && pPause->NeedToPauseNow()) {
+ m_loopIndex++;
+ m_ProssiveStatus = FXCODEC_STATUS_DECODE_TOBECONTINUE;
+ return FXCODEC_STATUS_DECODE_TOBECONTINUE;
+ }
+ }
+ m_ProssiveStatus = FXCODEC_STATUS_DECODE_FINISH;
+ return FXCODEC_STATUS_DECODE_FINISH;
}
-FXCODEC_STATUS CJBig2_GRDProc::decode_Arith_Template3_opt3(CJBig2_Image *pImage, CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext, IFX_Pause* pPause)
-{
- FX_BOOL SLTP, bVal;
- FX_DWORD CONTEXT;
- FX_DWORD line1;
- uint8_t *pLine1, cVal;
- int32_t nStride, k;
- int32_t nLineBytes, nBitsLeft, cc;
- if (!m_pLine) {
- m_pLine = pImage->m_pData;
+FXCODEC_STATUS CJBig2_GRDProc::decode_Arith_Template3_opt3(
+ CJBig2_Image* pImage,
+ CJBig2_ArithDecoder* pArithDecoder,
+ JBig2ArithCtx* gbContext,
+ IFX_Pause* pPause) {
+ FX_BOOL SLTP, bVal;
+ FX_DWORD CONTEXT;
+ FX_DWORD line1;
+ uint8_t *pLine1, cVal;
+ int32_t nStride, k;
+ int32_t nLineBytes, nBitsLeft, cc;
+ if (!m_pLine) {
+ m_pLine = pImage->m_pData;
+ }
+ nStride = pImage->m_nStride;
+ nLineBytes = ((GBW + 7) >> 3) - 1;
+ nBitsLeft = GBW - (nLineBytes << 3);
+ for (; m_loopIndex < GBH; m_loopIndex++) {
+ if (TPGDON) {
+ SLTP = pArithDecoder->DECODE(&gbContext[0x0195]);
+ LTP = LTP ^ SLTP;
}
- nStride = pImage->m_nStride;
- nLineBytes = ((GBW + 7) >> 3) - 1;
- nBitsLeft = GBW - (nLineBytes << 3);
- for(; m_loopIndex < GBH; m_loopIndex++) {
- if(TPGDON) {
- SLTP = pArithDecoder->DECODE(&gbContext[0x0195]);
- LTP = LTP ^ SLTP;
+ if (LTP == 1) {
+ pImage->copyLine(m_loopIndex, m_loopIndex - 1);
+ } else {
+ if (m_loopIndex > 0) {
+ pLine1 = m_pLine - nStride;
+ line1 = *pLine1++;
+ CONTEXT = (line1 >> 1) & 0x03f0;
+ for (cc = 0; cc < nLineBytes; cc++) {
+ line1 = (line1 << 8) | (*pLine1++);
+ cVal = 0;
+ for (k = 7; k >= 0; k--) {
+ bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
+ cVal |= bVal << k;
+ CONTEXT = ((CONTEXT & 0x01f7) << 1) | bVal |
+ ((line1 >> (k + 1)) & 0x0010);
+ }
+ m_pLine[cc] = cVal;
}
- if(LTP == 1) {
- pImage->copyLine(m_loopIndex, m_loopIndex - 1);
- } else {
- if(m_loopIndex > 0) {
- pLine1 = m_pLine - nStride;
- line1 = *pLine1++;
- CONTEXT = (line1 >> 1) & 0x03f0;
- for(cc = 0; cc < nLineBytes; cc++) {
- line1 = (line1 << 8) | (*pLine1++);
- cVal = 0;
- for(k = 7; k >= 0; k--) {
- bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
- cVal |= bVal << k;
- CONTEXT = ((CONTEXT & 0x01f7) << 1) | bVal
- | ((line1 >> (k + 1)) & 0x0010);
- }
- m_pLine[cc] = cVal;
- }
- line1 <<= 8;
- cVal = 0;
- for(k = 0; k < nBitsLeft; k++) {
- bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
- cVal |= bVal << (7 - k);
- CONTEXT = ((CONTEXT & 0x01f7) << 1) | bVal
- | ((line1 >> (8 - k)) & 0x0010);
- }
- m_pLine[nLineBytes] = cVal;
- } else {
- CONTEXT = 0;
- for(cc = 0; cc < nLineBytes; cc++) {
- cVal = 0;
- for(k = 7; k >= 0; k--) {
- bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
- cVal |= bVal << k;
- CONTEXT = ((CONTEXT & 0x01f7) << 1) | bVal;
- }
- m_pLine[cc] = cVal;
- }
- cVal = 0;
- for(k = 0; k < nBitsLeft; k++) {
- bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
- cVal |= bVal << (7 - k);
- CONTEXT = ((CONTEXT & 0x01f7) << 1) | bVal;
- }
- m_pLine[nLineBytes] = cVal;
- }
+ line1 <<= 8;
+ cVal = 0;
+ for (k = 0; k < nBitsLeft; k++) {
+ bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
+ cVal |= bVal << (7 - k);
+ CONTEXT =
+ ((CONTEXT & 0x01f7) << 1) | bVal | ((line1 >> (8 - k)) & 0x0010);
+ }
+ m_pLine[nLineBytes] = cVal;
+ } else {
+ CONTEXT = 0;
+ for (cc = 0; cc < nLineBytes; cc++) {
+ cVal = 0;
+ for (k = 7; k >= 0; k--) {
+ bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
+ cVal |= bVal << k;
+ CONTEXT = ((CONTEXT & 0x01f7) << 1) | bVal;
+ }
+ m_pLine[cc] = cVal;
}
- m_pLine += nStride;
- if(pPause && pPause->NeedToPauseNow()) {
- m_loopIndex++;
- m_ProssiveStatus = FXCODEC_STATUS_DECODE_TOBECONTINUE;
- return FXCODEC_STATUS_DECODE_TOBECONTINUE;
+ cVal = 0;
+ for (k = 0; k < nBitsLeft; k++) {
+ bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
+ cVal |= bVal << (7 - k);
+ CONTEXT = ((CONTEXT & 0x01f7) << 1) | bVal;
}
+ m_pLine[nLineBytes] = cVal;
+ }
}
- m_ProssiveStatus = FXCODEC_STATUS_DECODE_FINISH;
- return FXCODEC_STATUS_DECODE_FINISH;
+ m_pLine += nStride;
+ if (pPause && pPause->NeedToPauseNow()) {
+ m_loopIndex++;
+ m_ProssiveStatus = FXCODEC_STATUS_DECODE_TOBECONTINUE;
+ return FXCODEC_STATUS_DECODE_TOBECONTINUE;
+ }
+ }
+ m_ProssiveStatus = FXCODEC_STATUS_DECODE_FINISH;
+ return FXCODEC_STATUS_DECODE_FINISH;
}
-FXCODEC_STATUS CJBig2_GRDProc::decode_Arith_Template3_unopt(CJBig2_Image * pImage, CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext, IFX_Pause* pPause)
-{
- FX_BOOL SLTP, bVal;
- FX_DWORD CONTEXT;
- FX_DWORD line1, line2;
- for(; m_loopIndex < GBH; m_loopIndex++) {
- if(TPGDON) {
- SLTP = pArithDecoder->DECODE(&gbContext[0x0195]);
- LTP = LTP ^ SLTP;
- }
- if(LTP == 1) {
- pImage->copyLine(m_loopIndex, m_loopIndex - 1);
+FXCODEC_STATUS CJBig2_GRDProc::decode_Arith_Template3_unopt(
+ CJBig2_Image* pImage,
+ CJBig2_ArithDecoder* pArithDecoder,
+ JBig2ArithCtx* gbContext,
+ IFX_Pause* pPause) {
+ FX_BOOL SLTP, bVal;
+ FX_DWORD CONTEXT;
+ FX_DWORD line1, line2;
+ for (; m_loopIndex < GBH; m_loopIndex++) {
+ if (TPGDON) {
+ SLTP = pArithDecoder->DECODE(&gbContext[0x0195]);
+ LTP = LTP ^ SLTP;
+ }
+ if (LTP == 1) {
+ pImage->copyLine(m_loopIndex, m_loopIndex - 1);
+ } else {
+ line1 = pImage->getPixel(1, m_loopIndex - 1);
+ line1 |= pImage->getPixel(0, m_loopIndex - 1) << 1;
+ line2 = 0;
+ for (FX_DWORD w = 0; w < GBW; w++) {
+ if (USESKIP && SKIP->getPixel(w, m_loopIndex)) {
+ bVal = 0;
} else {
- line1 = pImage->getPixel(1, m_loopIndex - 1);
- line1 |= pImage->getPixel(0, m_loopIndex - 1) << 1;
- line2 = 0;
- for(FX_DWORD w = 0; w < GBW; w++) {
- if(USESKIP && SKIP->getPixel(w, m_loopIndex)) {
- bVal = 0;
- } else {
- CONTEXT = line2;
- CONTEXT |= pImage->getPixel(w + GBAT[0], m_loopIndex + GBAT[1]) << 4;
- CONTEXT |= line1 << 5;
- bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
- }
- if(bVal) {
- pImage->setPixel(w, m_loopIndex, bVal);
- }
- line1 = ((line1 << 1) | pImage->getPixel(w + 2, m_loopIndex - 1)) & 0x1f;
- line2 = ((line2 << 1) | bVal) & 0x0f;
- }
+ CONTEXT = line2;
+ CONTEXT |= pImage->getPixel(w + GBAT[0], m_loopIndex + GBAT[1]) << 4;
+ CONTEXT |= line1 << 5;
+ bVal = pArithDecoder->DECODE(&gbContext[CONTEXT]);
}
- if(pPause && pPause->NeedToPauseNow()) {
- m_loopIndex++;
- m_ProssiveStatus = FXCODEC_STATUS_DECODE_TOBECONTINUE;
- return FXCODEC_STATUS_DECODE_TOBECONTINUE;
+ if (bVal) {
+ pImage->setPixel(w, m_loopIndex, bVal);
}
+ line1 =
+ ((line1 << 1) | pImage->getPixel(w + 2, m_loopIndex - 1)) & 0x1f;
+ line2 = ((line2 << 1) | bVal) & 0x0f;
+ }
}
- m_ProssiveStatus = FXCODEC_STATUS_DECODE_FINISH;
- return FXCODEC_STATUS_DECODE_FINISH;
+ if (pPause && pPause->NeedToPauseNow()) {
+ m_loopIndex++;
+ m_ProssiveStatus = FXCODEC_STATUS_DECODE_TOBECONTINUE;
+ return FXCODEC_STATUS_DECODE_TOBECONTINUE;
+ }
+ }
+ m_ProssiveStatus = FXCODEC_STATUS_DECODE_FINISH;
+ return FXCODEC_STATUS_DECODE_FINISH;
}
diff --git a/core/src/fxcodec/jbig2/JBig2_GeneralDecoder.h b/core/src/fxcodec/jbig2/JBig2_GeneralDecoder.h
index 2bd2ceac95..3c9a39a19f 100644
--- a/core/src/fxcodec/jbig2/JBig2_GeneralDecoder.h
+++ b/core/src/fxcodec/jbig2/JBig2_GeneralDecoder.h
@@ -18,262 +18,307 @@ class CJBig2_HuffmanTable;
class CJBig2_Image;
class CJBig2_PatternDict;
typedef enum {
- JBIG2_CORNER_BOTTOMLEFT = 0,
- JBIG2_CORNER_TOPLEFT = 1,
- JBIG2_CORNER_BOTTOMRIGHT = 2,
- JBIG2_CORNER_TOPRIGHT = 3
+ JBIG2_CORNER_BOTTOMLEFT = 0,
+ JBIG2_CORNER_TOPLEFT = 1,
+ JBIG2_CORNER_BOTTOMRIGHT = 2,
+ JBIG2_CORNER_TOPRIGHT = 3
} JBig2Corner;
-class CJBig2_GRDProc : public CJBig2_Object
-{
-public:
- CJBig2_GRDProc()
- {
- m_loopIndex = 0;
- m_pLine = NULL;
- m_pPause = NULL;
- m_DecodeType = 0;
- LTP = 0;
- m_ReplaceRect.left = 0;
- m_ReplaceRect.bottom = 0;
- m_ReplaceRect.top = 0;
- m_ReplaceRect.right = 0;
- }
-
- CJBig2_Image *decode_Arith(CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext);
-
- CJBig2_Image *decode_Arith_V2(CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext);
-
- CJBig2_Image *decode_Arith_V1(CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext);
-
- CJBig2_Image *decode_MMR(CJBig2_BitStream *pStream);
- FXCODEC_STATUS Start_decode_Arith(CJBig2_Image** pImage, CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext, IFX_Pause* pPause = NULL);
- FXCODEC_STATUS Start_decode_Arith_V2(CJBig2_Image** pImage, CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext, IFX_Pause* pPause = NULL);
- FXCODEC_STATUS Start_decode_Arith_V1(CJBig2_Image** pImage, CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext, IFX_Pause* pPause = NULL);
- FXCODEC_STATUS Start_decode_MMR(CJBig2_Image** pImage, CJBig2_BitStream *pStream, IFX_Pause* pPause = NULL);
- FXCODEC_STATUS Continue_decode(IFX_Pause* pPause);
- FX_RECT GetReplaceRect()
- {
- return m_ReplaceRect;
- };
-private:
- FXCODEC_STATUS decode_Arith(IFX_Pause* pPause);
- FXCODEC_STATUS decode_Arith_V2(IFX_Pause* pPause);
- FXCODEC_STATUS decode_Arith_V1(IFX_Pause* pPause);
- FXCODEC_STATUS decode_MMR();
- FXCODEC_STATUS decode_Arith_Template0_opt3(CJBig2_Image*pImage, CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext, IFX_Pause* pPause);
- FXCODEC_STATUS decode_Arith_Template0_unopt(CJBig2_Image *pImage, CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext, IFX_Pause* pPause);
- FXCODEC_STATUS decode_Arith_Template1_opt3(CJBig2_Image *pImage, CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext, IFX_Pause* pPause);
- FXCODEC_STATUS decode_Arith_Template1_unopt(CJBig2_Image * pImage, CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext, IFX_Pause* pPause);
- FXCODEC_STATUS decode_Arith_Template2_opt3(CJBig2_Image *pImage, CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext, IFX_Pause* pPause);
- FXCODEC_STATUS decode_Arith_Template2_unopt(CJBig2_Image * pImage, CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext, IFX_Pause* pPause);
- FXCODEC_STATUS decode_Arith_Template3_opt3(CJBig2_Image *pImage, CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext, IFX_Pause* pPause);
- FXCODEC_STATUS decode_Arith_Template3_unopt(CJBig2_Image * pImage, CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext, IFX_Pause* pPause);
- FX_DWORD m_loopIndex;
- uint8_t * m_pLine;
- IFX_Pause* m_pPause;
- FXCODEC_STATUS m_ProssiveStatus;
- CJBig2_Image** m_pImage;
- CJBig2_ArithDecoder *m_pArithDecoder;
- JBig2ArithCtx *m_gbContext;
- FX_WORD m_DecodeType;
- FX_BOOL LTP;
- FX_RECT m_ReplaceRect;
-private:
-
- CJBig2_Image *decode_Arith_Template0_opt(CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext);
-
- CJBig2_Image *decode_Arith_Template0_opt2(CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext);
-
- CJBig2_Image *decode_Arith_Template0_opt3(CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext);
-
- CJBig2_Image *decode_Arith_Template0_unopt(CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext);
-
- CJBig2_Image *decode_Arith_Template1_opt(CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext);
-
- CJBig2_Image *decode_Arith_Template1_opt2(CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext);
-
- CJBig2_Image *decode_Arith_Template1_opt3(CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext);
-
- CJBig2_Image *decode_Arith_Template1_unopt(CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext);
-
- CJBig2_Image *decode_Arith_Template2_opt(CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext);
-
- CJBig2_Image *decode_Arith_Template2_opt2(CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext);
-
- CJBig2_Image *decode_Arith_Template2_opt3(CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext);
-
- CJBig2_Image *decode_Arith_Template2_unopt(CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext);
-
- CJBig2_Image *decode_Arith_Template3_opt(CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext);
-
- CJBig2_Image *decode_Arith_Template3_opt2(CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext);
-
- CJBig2_Image *decode_Arith_Template3_opt3(CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext);
-
- CJBig2_Image *decode_Arith_Template3_unopt(CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext);
-public:
- FX_BOOL MMR;
- FX_DWORD GBW;
- FX_DWORD GBH;
- uint8_t GBTEMPLATE;
- FX_BOOL TPGDON;
- FX_BOOL USESKIP;
- CJBig2_Image * SKIP;
- signed char GBAT[8];
+class CJBig2_GRDProc : public CJBig2_Object {
+ public:
+ CJBig2_GRDProc() {
+ m_loopIndex = 0;
+ m_pLine = NULL;
+ m_pPause = NULL;
+ m_DecodeType = 0;
+ LTP = 0;
+ m_ReplaceRect.left = 0;
+ m_ReplaceRect.bottom = 0;
+ m_ReplaceRect.top = 0;
+ m_ReplaceRect.right = 0;
+ }
+
+ CJBig2_Image* decode_Arith(CJBig2_ArithDecoder* pArithDecoder,
+ JBig2ArithCtx* gbContext);
+
+ CJBig2_Image* decode_Arith_V2(CJBig2_ArithDecoder* pArithDecoder,
+ JBig2ArithCtx* gbContext);
+
+ CJBig2_Image* decode_Arith_V1(CJBig2_ArithDecoder* pArithDecoder,
+ JBig2ArithCtx* gbContext);
+
+ CJBig2_Image* decode_MMR(CJBig2_BitStream* pStream);
+ FXCODEC_STATUS Start_decode_Arith(CJBig2_Image** pImage,
+ CJBig2_ArithDecoder* pArithDecoder,
+ JBig2ArithCtx* gbContext,
+ IFX_Pause* pPause = NULL);
+ FXCODEC_STATUS Start_decode_Arith_V2(CJBig2_Image** pImage,
+ CJBig2_ArithDecoder* pArithDecoder,
+ JBig2ArithCtx* gbContext,
+ IFX_Pause* pPause = NULL);
+ FXCODEC_STATUS Start_decode_Arith_V1(CJBig2_Image** pImage,
+ CJBig2_ArithDecoder* pArithDecoder,
+ JBig2ArithCtx* gbContext,
+ IFX_Pause* pPause = NULL);
+ FXCODEC_STATUS Start_decode_MMR(CJBig2_Image** pImage,
+ CJBig2_BitStream* pStream,
+ IFX_Pause* pPause = NULL);
+ FXCODEC_STATUS Continue_decode(IFX_Pause* pPause);
+ FX_RECT GetReplaceRect() { return m_ReplaceRect; };
+
+ private:
+ FXCODEC_STATUS decode_Arith(IFX_Pause* pPause);
+ FXCODEC_STATUS decode_Arith_V2(IFX_Pause* pPause);
+ FXCODEC_STATUS decode_Arith_V1(IFX_Pause* pPause);
+ FXCODEC_STATUS decode_MMR();
+ FXCODEC_STATUS decode_Arith_Template0_opt3(CJBig2_Image* pImage,
+ CJBig2_ArithDecoder* pArithDecoder,
+ JBig2ArithCtx* gbContext,
+ IFX_Pause* pPause);
+ FXCODEC_STATUS decode_Arith_Template0_unopt(
+ CJBig2_Image* pImage,
+ CJBig2_ArithDecoder* pArithDecoder,
+ JBig2ArithCtx* gbContext,
+ IFX_Pause* pPause);
+ FXCODEC_STATUS decode_Arith_Template1_opt3(CJBig2_Image* pImage,
+ CJBig2_ArithDecoder* pArithDecoder,
+ JBig2ArithCtx* gbContext,
+ IFX_Pause* pPause);
+ FXCODEC_STATUS decode_Arith_Template1_unopt(
+ CJBig2_Image* pImage,
+ CJBig2_ArithDecoder* pArithDecoder,
+ JBig2ArithCtx* gbContext,
+ IFX_Pause* pPause);
+ FXCODEC_STATUS decode_Arith_Template2_opt3(CJBig2_Image* pImage,
+ CJBig2_ArithDecoder* pArithDecoder,
+ JBig2ArithCtx* gbContext,
+ IFX_Pause* pPause);
+ FXCODEC_STATUS decode_Arith_Template2_unopt(
+ CJBig2_Image* pImage,
+ CJBig2_ArithDecoder* pArithDecoder,
+ JBig2ArithCtx* gbContext,
+ IFX_Pause* pPause);
+ FXCODEC_STATUS decode_Arith_Template3_opt3(CJBig2_Image* pImage,
+ CJBig2_ArithDecoder* pArithDecoder,
+ JBig2ArithCtx* gbContext,
+ IFX_Pause* pPause);
+ FXCODEC_STATUS decode_Arith_Template3_unopt(
+ CJBig2_Image* pImage,
+ CJBig2_ArithDecoder* pArithDecoder,
+ JBig2ArithCtx* gbContext,
+ IFX_Pause* pPause);
+ FX_DWORD m_loopIndex;
+ uint8_t* m_pLine;
+ IFX_Pause* m_pPause;
+ FXCODEC_STATUS m_ProssiveStatus;
+ CJBig2_Image** m_pImage;
+ CJBig2_ArithDecoder* m_pArithDecoder;
+ JBig2ArithCtx* m_gbContext;
+ FX_WORD m_DecodeType;
+ FX_BOOL LTP;
+ FX_RECT m_ReplaceRect;
+
+ private:
+ CJBig2_Image* decode_Arith_Template0_opt(CJBig2_ArithDecoder* pArithDecoder,
+ JBig2ArithCtx* gbContext);
+
+ CJBig2_Image* decode_Arith_Template0_opt2(CJBig2_ArithDecoder* pArithDecoder,
+ JBig2ArithCtx* gbContext);
+
+ CJBig2_Image* decode_Arith_Template0_opt3(CJBig2_ArithDecoder* pArithDecoder,
+ JBig2ArithCtx* gbContext);
+
+ CJBig2_Image* decode_Arith_Template0_unopt(CJBig2_ArithDecoder* pArithDecoder,
+ JBig2ArithCtx* gbContext);
+
+ CJBig2_Image* decode_Arith_Template1_opt(CJBig2_ArithDecoder* pArithDecoder,
+ JBig2ArithCtx* gbContext);
+
+ CJBig2_Image* decode_Arith_Template1_opt2(CJBig2_ArithDecoder* pArithDecoder,
+ JBig2ArithCtx* gbContext);
+
+ CJBig2_Image* decode_Arith_Template1_opt3(CJBig2_ArithDecoder* pArithDecoder,
+ JBig2ArithCtx* gbContext);
+
+ CJBig2_Image* decode_Arith_Template1_unopt(CJBig2_ArithDecoder* pArithDecoder,
+ JBig2ArithCtx* gbContext);
+
+ CJBig2_Image* decode_Arith_Template2_opt(CJBig2_ArithDecoder* pArithDecoder,
+ JBig2ArithCtx* gbContext);
+
+ CJBig2_Image* decode_Arith_Template2_opt2(CJBig2_ArithDecoder* pArithDecoder,
+ JBig2ArithCtx* gbContext);
+
+ CJBig2_Image* decode_Arith_Template2_opt3(CJBig2_ArithDecoder* pArithDecoder,
+ JBig2ArithCtx* gbContext);
+
+ CJBig2_Image* decode_Arith_Template2_unopt(CJBig2_ArithDecoder* pArithDecoder,
+ JBig2ArithCtx* gbContext);
+
+ CJBig2_Image* decode_Arith_Template3_opt(CJBig2_ArithDecoder* pArithDecoder,
+ JBig2ArithCtx* gbContext);
+
+ CJBig2_Image* decode_Arith_Template3_opt2(CJBig2_ArithDecoder* pArithDecoder,
+ JBig2ArithCtx* gbContext);
+
+ CJBig2_Image* decode_Arith_Template3_opt3(CJBig2_ArithDecoder* pArithDecoder,
+ JBig2ArithCtx* gbContext);
+
+ CJBig2_Image* decode_Arith_Template3_unopt(CJBig2_ArithDecoder* pArithDecoder,
+ JBig2ArithCtx* gbContext);
+
+ public:
+ FX_BOOL MMR;
+ FX_DWORD GBW;
+ FX_DWORD GBH;
+ uint8_t GBTEMPLATE;
+ FX_BOOL TPGDON;
+ FX_BOOL USESKIP;
+ CJBig2_Image* SKIP;
+ signed char GBAT[8];
};
-class CJBig2_GRRDProc : public CJBig2_Object
-{
-public:
-
- CJBig2_Image *decode(CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *grContext);
-
- CJBig2_Image *decode_Template0_unopt(CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *grContext);
-
- CJBig2_Image *decode_Template0_opt(CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *grContext);
-
- CJBig2_Image *decode_Template1_unopt(CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *grContext);
-
- CJBig2_Image *decode_Template1_opt(CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *grContext);
-
- CJBig2_Image *decode_V1(CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *grContext);
-public:
- FX_DWORD GRW;
- FX_DWORD GRH;
- FX_BOOL GRTEMPLATE;
- CJBig2_Image *GRREFERENCE;
- int32_t GRREFERENCEDX;
- int32_t GRREFERENCEDY;
- FX_BOOL TPGRON;
- signed char GRAT[4];
+class CJBig2_GRRDProc : public CJBig2_Object {
+ public:
+ CJBig2_Image* decode(CJBig2_ArithDecoder* pArithDecoder,
+ JBig2ArithCtx* grContext);
+
+ CJBig2_Image* decode_Template0_unopt(CJBig2_ArithDecoder* pArithDecoder,
+ JBig2ArithCtx* grContext);
+
+ CJBig2_Image* decode_Template0_opt(CJBig2_ArithDecoder* pArithDecoder,
+ JBig2ArithCtx* grContext);
+
+ CJBig2_Image* decode_Template1_unopt(CJBig2_ArithDecoder* pArithDecoder,
+ JBig2ArithCtx* grContext);
+
+ CJBig2_Image* decode_Template1_opt(CJBig2_ArithDecoder* pArithDecoder,
+ JBig2ArithCtx* grContext);
+
+ CJBig2_Image* decode_V1(CJBig2_ArithDecoder* pArithDecoder,
+ JBig2ArithCtx* grContext);
+
+ public:
+ FX_DWORD GRW;
+ FX_DWORD GRH;
+ FX_BOOL GRTEMPLATE;
+ CJBig2_Image* GRREFERENCE;
+ int32_t GRREFERENCEDX;
+ int32_t GRREFERENCEDY;
+ FX_BOOL TPGRON;
+ signed char GRAT[4];
};
typedef struct {
- CJBig2_ArithIntDecoder *IADT,
- *IAFS,
- *IADS,
- *IAIT,
- *IARI,
- *IARDW,
- *IARDH,
- *IARDX,
- *IARDY;
- CJBig2_ArithIaidDecoder *IAID;
+ CJBig2_ArithIntDecoder *IADT, *IAFS, *IADS, *IAIT, *IARI, *IARDW, *IARDH,
+ *IARDX, *IARDY;
+ CJBig2_ArithIaidDecoder* IAID;
} JBig2IntDecoderState;
-class CJBig2_TRDProc : public CJBig2_Object
-{
-public:
-
- CJBig2_Image *decode_Huffman(CJBig2_BitStream *pStream, JBig2ArithCtx *grContext);
-
- CJBig2_Image *decode_Arith(CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *grContext,
- JBig2IntDecoderState *pIDS = NULL);
-public:
- FX_BOOL SBHUFF;
- FX_BOOL SBREFINE;
- FX_DWORD SBW;
- FX_DWORD SBH;
- FX_DWORD SBNUMINSTANCES;
- FX_DWORD SBSTRIPS;
- FX_DWORD SBNUMSYMS;
-
- JBig2HuffmanCode *SBSYMCODES;
- uint8_t SBSYMCODELEN;
-
- CJBig2_Image **SBSYMS;
- FX_BOOL SBDEFPIXEL;
-
- JBig2ComposeOp SBCOMBOP;
- FX_BOOL TRANSPOSED;
-
- JBig2Corner REFCORNER;
- signed char SBDSOFFSET;
- CJBig2_HuffmanTable *SBHUFFFS,
- *SBHUFFDS,
- *SBHUFFDT,
- *SBHUFFRDW,
- *SBHUFFRDH,
- *SBHUFFRDX,
- *SBHUFFRDY,
- *SBHUFFRSIZE;
- FX_BOOL SBRTEMPLATE;
- signed char SBRAT[4];
+class CJBig2_TRDProc : public CJBig2_Object {
+ public:
+ CJBig2_Image* decode_Huffman(CJBig2_BitStream* pStream,
+ JBig2ArithCtx* grContext);
+
+ CJBig2_Image* decode_Arith(CJBig2_ArithDecoder* pArithDecoder,
+ JBig2ArithCtx* grContext,
+ JBig2IntDecoderState* pIDS = NULL);
+
+ public:
+ FX_BOOL SBHUFF;
+ FX_BOOL SBREFINE;
+ FX_DWORD SBW;
+ FX_DWORD SBH;
+ FX_DWORD SBNUMINSTANCES;
+ FX_DWORD SBSTRIPS;
+ FX_DWORD SBNUMSYMS;
+
+ JBig2HuffmanCode* SBSYMCODES;
+ uint8_t SBSYMCODELEN;
+
+ CJBig2_Image** SBSYMS;
+ FX_BOOL SBDEFPIXEL;
+
+ JBig2ComposeOp SBCOMBOP;
+ FX_BOOL TRANSPOSED;
+
+ JBig2Corner REFCORNER;
+ signed char SBDSOFFSET;
+ CJBig2_HuffmanTable *SBHUFFFS, *SBHUFFDS, *SBHUFFDT, *SBHUFFRDW, *SBHUFFRDH,
+ *SBHUFFRDX, *SBHUFFRDY, *SBHUFFRSIZE;
+ FX_BOOL SBRTEMPLATE;
+ signed char SBRAT[4];
};
-class CJBig2_SDDProc : public CJBig2_Object
-{
-public:
-
- CJBig2_SymbolDict *decode_Arith(CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext, JBig2ArithCtx *grContext);
-
- CJBig2_SymbolDict *decode_Huffman(CJBig2_BitStream *pStream, JBig2ArithCtx *gbContext, JBig2ArithCtx *grContext, IFX_Pause* pPause);
-public:
- FX_BOOL SDHUFF;
- FX_BOOL SDREFAGG;
- FX_DWORD SDNUMINSYMS;
- CJBig2_Image ** SDINSYMS;
- FX_DWORD SDNUMNEWSYMS;
- FX_DWORD SDNUMEXSYMS;
- CJBig2_HuffmanTable *SDHUFFDH,
- *SDHUFFDW,
- *SDHUFFBMSIZE,
- *SDHUFFAGGINST;
- uint8_t SDTEMPLATE;
- signed char SDAT[8];
- FX_BOOL SDRTEMPLATE;
- signed char SDRAT[4];
+class CJBig2_SDDProc : public CJBig2_Object {
+ public:
+ CJBig2_SymbolDict* decode_Arith(CJBig2_ArithDecoder* pArithDecoder,
+ JBig2ArithCtx* gbContext,
+ JBig2ArithCtx* grContext);
+
+ CJBig2_SymbolDict* decode_Huffman(CJBig2_BitStream* pStream,
+ JBig2ArithCtx* gbContext,
+ JBig2ArithCtx* grContext,
+ IFX_Pause* pPause);
+
+ public:
+ FX_BOOL SDHUFF;
+ FX_BOOL SDREFAGG;
+ FX_DWORD SDNUMINSYMS;
+ CJBig2_Image** SDINSYMS;
+ FX_DWORD SDNUMNEWSYMS;
+ FX_DWORD SDNUMEXSYMS;
+ CJBig2_HuffmanTable *SDHUFFDH, *SDHUFFDW, *SDHUFFBMSIZE, *SDHUFFAGGINST;
+ uint8_t SDTEMPLATE;
+ signed char SDAT[8];
+ FX_BOOL SDRTEMPLATE;
+ signed char SDRAT[4];
};
-class CJBig2_HTRDProc : public CJBig2_Object
-{
-public:
-
- CJBig2_Image *decode_Arith(CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext, IFX_Pause* pPause);
-
- CJBig2_Image *decode_MMR(CJBig2_BitStream *pStream, IFX_Pause* pPause);
-public:
- FX_DWORD HBW,
- HBH;
- FX_BOOL HMMR;
- uint8_t HTEMPLATE;
- FX_DWORD HNUMPATS;
- CJBig2_Image **HPATS;
- FX_BOOL HDEFPIXEL;
- JBig2ComposeOp HCOMBOP;
- FX_BOOL HENABLESKIP;
- FX_DWORD HGW,
- HGH;
- int32_t HGX,
- HGY;
- FX_WORD HRX,
- HRY;
- uint8_t HPW,
- HPH;
+class CJBig2_HTRDProc : public CJBig2_Object {
+ public:
+ CJBig2_Image* decode_Arith(CJBig2_ArithDecoder* pArithDecoder,
+ JBig2ArithCtx* gbContext,
+ IFX_Pause* pPause);
+
+ CJBig2_Image* decode_MMR(CJBig2_BitStream* pStream, IFX_Pause* pPause);
+
+ public:
+ FX_DWORD HBW, HBH;
+ FX_BOOL HMMR;
+ uint8_t HTEMPLATE;
+ FX_DWORD HNUMPATS;
+ CJBig2_Image** HPATS;
+ FX_BOOL HDEFPIXEL;
+ JBig2ComposeOp HCOMBOP;
+ FX_BOOL HENABLESKIP;
+ FX_DWORD HGW, HGH;
+ int32_t HGX, HGY;
+ FX_WORD HRX, HRY;
+ uint8_t HPW, HPH;
};
-class CJBig2_PDDProc : public CJBig2_Object
-{
-public:
-
- CJBig2_PatternDict *decode_Arith(CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext, IFX_Pause* pPause);
-
- CJBig2_PatternDict *decode_MMR(CJBig2_BitStream *pStream, IFX_Pause* pPause);
-public:
- FX_BOOL HDMMR;
- uint8_t HDPW,
- HDPH;
- FX_DWORD GRAYMAX;
- uint8_t HDTEMPLATE;
+class CJBig2_PDDProc : public CJBig2_Object {
+ public:
+ CJBig2_PatternDict* decode_Arith(CJBig2_ArithDecoder* pArithDecoder,
+ JBig2ArithCtx* gbContext,
+ IFX_Pause* pPause);
+
+ CJBig2_PatternDict* decode_MMR(CJBig2_BitStream* pStream, IFX_Pause* pPause);
+
+ public:
+ FX_BOOL HDMMR;
+ uint8_t HDPW, HDPH;
+ FX_DWORD GRAYMAX;
+ uint8_t HDTEMPLATE;
};
-class CJBig2_GSIDProc : public CJBig2_Object
-{
-public:
-
- FX_DWORD *decode_Arith(CJBig2_ArithDecoder *pArithDecoder, JBig2ArithCtx *gbContext, IFX_Pause* pPause);
-
- FX_DWORD *decode_MMR(CJBig2_BitStream *pStream, IFX_Pause* pPause);
-public:
- FX_BOOL GSMMR;
- FX_BOOL GSUSESKIP;
- uint8_t GSBPP;
- FX_DWORD GSW,
- GSH;
- uint8_t GSTEMPLATE;
- CJBig2_Image *GSKIP;
+class CJBig2_GSIDProc : public CJBig2_Object {
+ public:
+ FX_DWORD* decode_Arith(CJBig2_ArithDecoder* pArithDecoder,
+ JBig2ArithCtx* gbContext,
+ IFX_Pause* pPause);
+
+ FX_DWORD* decode_MMR(CJBig2_BitStream* pStream, IFX_Pause* pPause);
+
+ public:
+ FX_BOOL GSMMR;
+ FX_BOOL GSUSESKIP;
+ uint8_t GSBPP;
+ FX_DWORD GSW, GSH;
+ uint8_t GSTEMPLATE;
+ CJBig2_Image* GSKIP;
};
#endif
diff --git a/core/src/fxcodec/jbig2/JBig2_HuffmanDecoder.cpp b/core/src/fxcodec/jbig2/JBig2_HuffmanDecoder.cpp
index ef84547992..d5acc362fd 100644
--- a/core/src/fxcodec/jbig2/JBig2_HuffmanDecoder.cpp
+++ b/core/src/fxcodec/jbig2/JBig2_HuffmanDecoder.cpp
@@ -1,56 +1,53 @@
// Copyright 2014 PDFium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-
+
// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
#include "JBig2_HuffmanDecoder.h"
-CJBig2_HuffmanDecoder::CJBig2_HuffmanDecoder(CJBig2_BitStream *pStream)
-{
- m_pStream = pStream;
-}
-CJBig2_HuffmanDecoder::~CJBig2_HuffmanDecoder()
-{
+CJBig2_HuffmanDecoder::CJBig2_HuffmanDecoder(CJBig2_BitStream* pStream) {
+ m_pStream = pStream;
}
-int CJBig2_HuffmanDecoder::decodeAValue(CJBig2_HuffmanTable *pTable, int *nResult)
-{
- int i;
- int nVal = 0;
- int nBits = 0;
- FX_DWORD nTmp;
- while(1) {
- if(m_pStream->read1Bit(&nTmp) == -1) {
- return -1;
+CJBig2_HuffmanDecoder::~CJBig2_HuffmanDecoder() {}
+int CJBig2_HuffmanDecoder::decodeAValue(CJBig2_HuffmanTable* pTable,
+ int* nResult) {
+ int i;
+ int nVal = 0;
+ int nBits = 0;
+ FX_DWORD nTmp;
+ while (1) {
+ if (m_pStream->read1Bit(&nTmp) == -1) {
+ return -1;
+ }
+ nVal = (nVal << 1) | nTmp;
+ nBits++;
+ for (i = 0; i < pTable->NTEMP; i++) {
+ if ((pTable->PREFLEN[i] == nBits) && (pTable->CODES[i] == nVal)) {
+ if ((pTable->HTOOB == 1) && (i == pTable->NTEMP - 1)) {
+ return JBIG2_OOB;
+ }
+ if (m_pStream->readNBits(pTable->RANGELEN[i], &nTmp) == -1) {
+ return -1;
}
- nVal = (nVal << 1) | nTmp;
- nBits ++;
- for(i = 0; i < pTable->NTEMP; i++) {
- if((pTable->PREFLEN[i] == nBits) && (pTable->CODES[i] == nVal)) {
- if((pTable->HTOOB == 1) && (i == pTable->NTEMP - 1)) {
- return JBIG2_OOB;
- }
- if(m_pStream->readNBits(pTable->RANGELEN[i], &nTmp) == -1) {
- return -1;
- }
- if(pTable->HTOOB) {
- if(i == pTable->NTEMP - 3) {
- *nResult = pTable->RANGELOW[i] - nTmp;
- return 0;
- } else {
- *nResult = pTable->RANGELOW[i] + nTmp;
- return 0;
- }
- } else {
- if(i == pTable->NTEMP - 2) {
- *nResult = pTable->RANGELOW[i] - nTmp;
- return 0;
- } else {
- *nResult = pTable->RANGELOW[i] + nTmp;
- return 0;
- }
- }
- }
+ if (pTable->HTOOB) {
+ if (i == pTable->NTEMP - 3) {
+ *nResult = pTable->RANGELOW[i] - nTmp;
+ return 0;
+ } else {
+ *nResult = pTable->RANGELOW[i] + nTmp;
+ return 0;
+ }
+ } else {
+ if (i == pTable->NTEMP - 2) {
+ *nResult = pTable->RANGELOW[i] - nTmp;
+ return 0;
+ } else {
+ *nResult = pTable->RANGELOW[i] + nTmp;
+ return 0;
+ }
}
+ }
}
- return -2;
+ }
+ return -2;
}
diff --git a/core/src/fxcodec/jbig2/JBig2_HuffmanDecoder.h b/core/src/fxcodec/jbig2/JBig2_HuffmanDecoder.h
index 60ec2900d3..6bf1cb45e0 100644
--- a/core/src/fxcodec/jbig2/JBig2_HuffmanDecoder.h
+++ b/core/src/fxcodec/jbig2/JBig2_HuffmanDecoder.h
@@ -1,24 +1,22 @@
// Copyright 2014 PDFium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-
+
// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
#ifndef _JBIG2_HUFFMAN_DECODER_H_
#define _JBIG2_HUFFMAN_DECODER_H_
#include "JBig2_BitStream.h"
#include "JBig2_HuffmanTable.h"
-class CJBig2_HuffmanDecoder : public CJBig2_Object
-{
-public:
-
- CJBig2_HuffmanDecoder(CJBig2_BitStream *pStream);
+class CJBig2_HuffmanDecoder : public CJBig2_Object {
+ public:
+ CJBig2_HuffmanDecoder(CJBig2_BitStream* pStream);
- ~CJBig2_HuffmanDecoder();
+ ~CJBig2_HuffmanDecoder();
- int decodeAValue(CJBig2_HuffmanTable *pTable, int *nResult);
-private:
+ int decodeAValue(CJBig2_HuffmanTable* pTable, int* nResult);
- CJBig2_BitStream *m_pStream;
+ private:
+ CJBig2_BitStream* m_pStream;
};
#endif
diff --git a/core/src/fxcodec/jbig2/JBig2_HuffmanTable.cpp b/core/src/fxcodec/jbig2/JBig2_HuffmanTable.cpp
index 0616123c1e..87722d2628 100644
--- a/core/src/fxcodec/jbig2/JBig2_HuffmanTable.cpp
+++ b/core/src/fxcodec/jbig2/JBig2_HuffmanTable.cpp
@@ -1,194 +1,189 @@
// Copyright 2014 PDFium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-
+
// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
#include "JBig2_HuffmanTable.h"
#include "JBig2_BitStream.h"
#include <string.h>
-CJBig2_HuffmanTable::CJBig2_HuffmanTable(const JBig2TableLine *pTable, int nLines,
- FX_BOOL bHTOOB)
-{
- init();
- m_bOK = parseFromStandardTable(pTable, nLines, bHTOOB);
+CJBig2_HuffmanTable::CJBig2_HuffmanTable(const JBig2TableLine* pTable,
+ int nLines,
+ FX_BOOL bHTOOB) {
+ init();
+ m_bOK = parseFromStandardTable(pTable, nLines, bHTOOB);
}
-CJBig2_HuffmanTable::CJBig2_HuffmanTable(CJBig2_BitStream *pStream)
-{
- init();
- m_bOK = parseFromCodedBuffer(pStream);
+CJBig2_HuffmanTable::CJBig2_HuffmanTable(CJBig2_BitStream* pStream) {
+ init();
+ m_bOK = parseFromCodedBuffer(pStream);
}
-CJBig2_HuffmanTable::~CJBig2_HuffmanTable()
-{
- if(CODES) {
- m_pModule->JBig2_Free(CODES);
- }
- if(PREFLEN) {
- m_pModule->JBig2_Free(PREFLEN);
- }
- if(RANGELEN) {
- m_pModule->JBig2_Free(RANGELEN);
- }
- if(RANGELOW) {
- m_pModule->JBig2_Free(RANGELOW);
- }
+CJBig2_HuffmanTable::~CJBig2_HuffmanTable() {
+ if (CODES) {
+ m_pModule->JBig2_Free(CODES);
+ }
+ if (PREFLEN) {
+ m_pModule->JBig2_Free(PREFLEN);
+ }
+ if (RANGELEN) {
+ m_pModule->JBig2_Free(RANGELEN);
+ }
+ if (RANGELOW) {
+ m_pModule->JBig2_Free(RANGELOW);
+ }
}
-void CJBig2_HuffmanTable::init()
-{
- HTOOB = FALSE;
- NTEMP = 0;
- CODES = NULL;
- PREFLEN = NULL;
- RANGELEN = NULL;
- RANGELOW = NULL;
+void CJBig2_HuffmanTable::init() {
+ HTOOB = FALSE;
+ NTEMP = 0;
+ CODES = NULL;
+ PREFLEN = NULL;
+ RANGELEN = NULL;
+ RANGELOW = NULL;
}
-int CJBig2_HuffmanTable::parseFromStandardTable(const JBig2TableLine *pTable, int nLines, FX_BOOL bHTOOB)
-{
- int CURLEN, LENMAX, CURCODE, CURTEMP, i;
- int *LENCOUNT;
- int *FIRSTCODE;
- HTOOB = bHTOOB;
- NTEMP = nLines;
- CODES = (int*)m_pModule->JBig2_Malloc2(sizeof(int), NTEMP);
- PREFLEN = (int*)m_pModule->JBig2_Malloc2(sizeof(int), NTEMP);
- RANGELEN = (int*)m_pModule->JBig2_Malloc2(sizeof(int), NTEMP);
- RANGELOW = (int*)m_pModule->JBig2_Malloc2(sizeof(int), NTEMP);
- LENMAX = 0;
- for(i = 0; i < NTEMP; i++) {
- PREFLEN[i] = pTable[i].PREFLEN;
- RANGELEN[i] = pTable[i].RANDELEN;
- RANGELOW[i] = pTable[i].RANGELOW;
- if(PREFLEN[i] > LENMAX) {
- LENMAX = PREFLEN[i];
- }
- }
- LENCOUNT = (int*)m_pModule->JBig2_Malloc2(sizeof(int), (LENMAX + 1));
- JBIG2_memset(LENCOUNT, 0, sizeof(int) * (LENMAX + 1));
- FIRSTCODE = (int*)m_pModule->JBig2_Malloc2(sizeof(int), (LENMAX + 1));
- for(i = 0; i < NTEMP; i++) {
- LENCOUNT[PREFLEN[i]] ++;
- }
- CURLEN = 1;
- FIRSTCODE[0] = 0;
- LENCOUNT[0] = 0;
- while(CURLEN <= LENMAX) {
- FIRSTCODE[CURLEN] = (FIRSTCODE[CURLEN - 1] + LENCOUNT[CURLEN - 1]) << 1;
- CURCODE = FIRSTCODE[CURLEN];
- CURTEMP = 0;
- while(CURTEMP < NTEMP) {
- if(PREFLEN[CURTEMP] == CURLEN) {
- CODES[CURTEMP] = CURCODE;
- CURCODE = CURCODE + 1;
- }
- CURTEMP = CURTEMP + 1;
- }
- CURLEN = CURLEN + 1;
- }
- m_pModule->JBig2_Free(LENCOUNT);
- m_pModule->JBig2_Free(FIRSTCODE);
- return 1;
+int CJBig2_HuffmanTable::parseFromStandardTable(const JBig2TableLine* pTable,
+ int nLines,
+ FX_BOOL bHTOOB) {
+ int CURLEN, LENMAX, CURCODE, CURTEMP, i;
+ int* LENCOUNT;
+ int* FIRSTCODE;
+ HTOOB = bHTOOB;
+ NTEMP = nLines;
+ CODES = (int*)m_pModule->JBig2_Malloc2(sizeof(int), NTEMP);
+ PREFLEN = (int*)m_pModule->JBig2_Malloc2(sizeof(int), NTEMP);
+ RANGELEN = (int*)m_pModule->JBig2_Malloc2(sizeof(int), NTEMP);
+ RANGELOW = (int*)m_pModule->JBig2_Malloc2(sizeof(int), NTEMP);
+ LENMAX = 0;
+ for (i = 0; i < NTEMP; i++) {
+ PREFLEN[i] = pTable[i].PREFLEN;
+ RANGELEN[i] = pTable[i].RANDELEN;
+ RANGELOW[i] = pTable[i].RANGELOW;
+ if (PREFLEN[i] > LENMAX) {
+ LENMAX = PREFLEN[i];
+ }
+ }
+ LENCOUNT = (int*)m_pModule->JBig2_Malloc2(sizeof(int), (LENMAX + 1));
+ JBIG2_memset(LENCOUNT, 0, sizeof(int) * (LENMAX + 1));
+ FIRSTCODE = (int*)m_pModule->JBig2_Malloc2(sizeof(int), (LENMAX + 1));
+ for (i = 0; i < NTEMP; i++) {
+ LENCOUNT[PREFLEN[i]]++;
+ }
+ CURLEN = 1;
+ FIRSTCODE[0] = 0;
+ LENCOUNT[0] = 0;
+ while (CURLEN <= LENMAX) {
+ FIRSTCODE[CURLEN] = (FIRSTCODE[CURLEN - 1] + LENCOUNT[CURLEN - 1]) << 1;
+ CURCODE = FIRSTCODE[CURLEN];
+ CURTEMP = 0;
+ while (CURTEMP < NTEMP) {
+ if (PREFLEN[CURTEMP] == CURLEN) {
+ CODES[CURTEMP] = CURCODE;
+ CURCODE = CURCODE + 1;
+ }
+ CURTEMP = CURTEMP + 1;
+ }
+ CURLEN = CURLEN + 1;
+ }
+ m_pModule->JBig2_Free(LENCOUNT);
+ m_pModule->JBig2_Free(FIRSTCODE);
+ return 1;
}
-#define HT_CHECK_MEMORY_ADJUST \
- if(NTEMP >= nSize) \
- { \
- nSize += 16; \
- PREFLEN = (int*)m_pModule->JBig2_Realloc(PREFLEN,sizeof(int)*nSize); \
- RANGELEN = (int*)m_pModule->JBig2_Realloc(RANGELEN,sizeof(int)*nSize); \
- RANGELOW = (int*)m_pModule->JBig2_Realloc(RANGELOW,sizeof(int)*nSize); \
- }
-int CJBig2_HuffmanTable::parseFromCodedBuffer(CJBig2_BitStream *pStream)
-{
- unsigned char HTPS, HTRS;
- FX_DWORD HTLOW, HTHIGH;
- FX_DWORD CURRANGELOW;
- FX_DWORD nSize = 16;
- int CURLEN, LENMAX, CURCODE, CURTEMP;
- int *LENCOUNT;
- int *FIRSTCODE;
- unsigned char cTemp;
- if(pStream->read1Byte(&cTemp) == -1) {
- goto failed;
- }
- HTOOB = cTemp & 0x01;
- HTPS = ((cTemp >> 1) & 0x07) + 1;
- HTRS = ((cTemp >> 4) & 0x07) + 1;
- if(pStream->readInteger(&HTLOW) == -1 ||
- pStream->readInteger(&HTHIGH) == -1 ||
- HTLOW > HTHIGH) {
- goto failed;
- }
- PREFLEN = (int*)m_pModule->JBig2_Malloc2(sizeof(int), nSize);
- RANGELEN = (int*)m_pModule->JBig2_Malloc2(sizeof(int), nSize);
- RANGELOW = (int*)m_pModule->JBig2_Malloc2(sizeof(int), nSize);
- CURRANGELOW = HTLOW;
- NTEMP = 0;
- do {
- HT_CHECK_MEMORY_ADJUST
- if((pStream->readNBits(HTPS, &PREFLEN[NTEMP]) == -1) ||
- (pStream->readNBits(HTRS, &RANGELEN[NTEMP]) == -1)) {
- goto failed;
- }
- RANGELOW[NTEMP] = CURRANGELOW;
- CURRANGELOW = CURRANGELOW + (1 << RANGELEN[NTEMP]);
- NTEMP = NTEMP + 1;
- } while(CURRANGELOW < HTHIGH);
+#define HT_CHECK_MEMORY_ADJUST \
+ if (NTEMP >= nSize) { \
+ nSize += 16; \
+ PREFLEN = (int*)m_pModule->JBig2_Realloc(PREFLEN, sizeof(int) * nSize); \
+ RANGELEN = (int*)m_pModule->JBig2_Realloc(RANGELEN, sizeof(int) * nSize); \
+ RANGELOW = (int*)m_pModule->JBig2_Realloc(RANGELOW, sizeof(int) * nSize); \
+ }
+int CJBig2_HuffmanTable::parseFromCodedBuffer(CJBig2_BitStream* pStream) {
+ unsigned char HTPS, HTRS;
+ FX_DWORD HTLOW, HTHIGH;
+ FX_DWORD CURRANGELOW;
+ FX_DWORD nSize = 16;
+ int CURLEN, LENMAX, CURCODE, CURTEMP;
+ int* LENCOUNT;
+ int* FIRSTCODE;
+ unsigned char cTemp;
+ if (pStream->read1Byte(&cTemp) == -1) {
+ goto failed;
+ }
+ HTOOB = cTemp & 0x01;
+ HTPS = ((cTemp >> 1) & 0x07) + 1;
+ HTRS = ((cTemp >> 4) & 0x07) + 1;
+ if (pStream->readInteger(&HTLOW) == -1 ||
+ pStream->readInteger(&HTHIGH) == -1 || HTLOW > HTHIGH) {
+ goto failed;
+ }
+ PREFLEN = (int*)m_pModule->JBig2_Malloc2(sizeof(int), nSize);
+ RANGELEN = (int*)m_pModule->JBig2_Malloc2(sizeof(int), nSize);
+ RANGELOW = (int*)m_pModule->JBig2_Malloc2(sizeof(int), nSize);
+ CURRANGELOW = HTLOW;
+ NTEMP = 0;
+ do {
HT_CHECK_MEMORY_ADJUST
- if(pStream->readNBits(HTPS, &PREFLEN[NTEMP]) == -1) {
- goto failed;
+ if ((pStream->readNBits(HTPS, &PREFLEN[NTEMP]) == -1) ||
+ (pStream->readNBits(HTRS, &RANGELEN[NTEMP]) == -1)) {
+ goto failed;
}
- RANGELEN[NTEMP] = 32;
- RANGELOW[NTEMP] = HTLOW - 1;
+ RANGELOW[NTEMP] = CURRANGELOW;
+ CURRANGELOW = CURRANGELOW + (1 << RANGELEN[NTEMP]);
NTEMP = NTEMP + 1;
+ } while (CURRANGELOW < HTHIGH);
+ HT_CHECK_MEMORY_ADJUST
+ if (pStream->readNBits(HTPS, &PREFLEN[NTEMP]) == -1) {
+ goto failed;
+ }
+ RANGELEN[NTEMP] = 32;
+ RANGELOW[NTEMP] = HTLOW - 1;
+ NTEMP = NTEMP + 1;
+ HT_CHECK_MEMORY_ADJUST
+ if (pStream->readNBits(HTPS, &PREFLEN[NTEMP]) == -1) {
+ goto failed;
+ }
+ RANGELEN[NTEMP] = 32;
+ RANGELOW[NTEMP] = HTHIGH;
+ NTEMP = NTEMP + 1;
+ if (HTOOB) {
HT_CHECK_MEMORY_ADJUST
- if(pStream->readNBits(HTPS, &PREFLEN[NTEMP]) == -1) {
- goto failed;
+ if (pStream->readNBits(HTPS, &PREFLEN[NTEMP]) == -1) {
+ goto failed;
}
- RANGELEN[NTEMP] = 32;
- RANGELOW[NTEMP] = HTHIGH;
NTEMP = NTEMP + 1;
- if(HTOOB) {
- HT_CHECK_MEMORY_ADJUST
- if(pStream->readNBits(HTPS, &PREFLEN[NTEMP]) == -1) {
- goto failed;
- }
- NTEMP = NTEMP + 1;
- }
- CODES = (int*)m_pModule->JBig2_Malloc2(sizeof(int), NTEMP);
- LENMAX = 0;
- for(int i = 0; i < NTEMP; i++) {
- if(PREFLEN[i] > LENMAX) {
- LENMAX = PREFLEN[i];
- }
- }
- LENCOUNT = (int*)m_pModule->JBig2_Malloc2(sizeof(int), (LENMAX + 1));
- JBIG2_memset(LENCOUNT, 0, sizeof(int) * (LENMAX + 1));
- FIRSTCODE = (int*)m_pModule->JBig2_Malloc2(sizeof(int), (LENMAX + 1));
- for(int i = 0; i < NTEMP; i++) {
- LENCOUNT[PREFLEN[i]] ++;
- }
- CURLEN = 1;
- FIRSTCODE[0] = 0;
- LENCOUNT[0] = 0;
- while(CURLEN <= LENMAX) {
- FIRSTCODE[CURLEN] = (FIRSTCODE[CURLEN - 1] + LENCOUNT[CURLEN - 1]) << 1;
- CURCODE = FIRSTCODE[CURLEN];
- CURTEMP = 0;
- while(CURTEMP < NTEMP) {
- if(PREFLEN[CURTEMP] == CURLEN) {
- CODES[CURTEMP] = CURCODE;
- CURCODE = CURCODE + 1;
- }
- CURTEMP = CURTEMP + 1;
- }
- CURLEN = CURLEN + 1;
- }
- m_pModule->JBig2_Free(LENCOUNT);
- m_pModule->JBig2_Free(FIRSTCODE);
- return TRUE;
+ }
+ CODES = (int*)m_pModule->JBig2_Malloc2(sizeof(int), NTEMP);
+ LENMAX = 0;
+ for (int i = 0; i < NTEMP; i++) {
+ if (PREFLEN[i] > LENMAX) {
+ LENMAX = PREFLEN[i];
+ }
+ }
+ LENCOUNT = (int*)m_pModule->JBig2_Malloc2(sizeof(int), (LENMAX + 1));
+ JBIG2_memset(LENCOUNT, 0, sizeof(int) * (LENMAX + 1));
+ FIRSTCODE = (int*)m_pModule->JBig2_Malloc2(sizeof(int), (LENMAX + 1));
+ for (int i = 0; i < NTEMP; i++) {
+ LENCOUNT[PREFLEN[i]]++;
+ }
+ CURLEN = 1;
+ FIRSTCODE[0] = 0;
+ LENCOUNT[0] = 0;
+ while (CURLEN <= LENMAX) {
+ FIRSTCODE[CURLEN] = (FIRSTCODE[CURLEN - 1] + LENCOUNT[CURLEN - 1]) << 1;
+ CURCODE = FIRSTCODE[CURLEN];
+ CURTEMP = 0;
+ while (CURTEMP < NTEMP) {
+ if (PREFLEN[CURTEMP] == CURLEN) {
+ CODES[CURTEMP] = CURCODE;
+ CURCODE = CURCODE + 1;
+ }
+ CURTEMP = CURTEMP + 1;
+ }
+ CURLEN = CURLEN + 1;
+ }
+ m_pModule->JBig2_Free(LENCOUNT);
+ m_pModule->JBig2_Free(FIRSTCODE);
+ return TRUE;
failed:
- return FALSE;
+ return FALSE;
}
diff --git a/core/src/fxcodec/jbig2/JBig2_HuffmanTable.h b/core/src/fxcodec/jbig2/JBig2_HuffmanTable.h
index d68ced2fca..e6f1592fc4 100644
--- a/core/src/fxcodec/jbig2/JBig2_HuffmanTable.h
+++ b/core/src/fxcodec/jbig2/JBig2_HuffmanTable.h
@@ -1,7 +1,7 @@
// Copyright 2014 PDFium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-
+
// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
#ifndef _JBIG2_HUFFMAN_TABLE_H_
@@ -9,34 +9,32 @@
#include "JBig2_Module.h"
#include "JBig2_HuffmanTable_Standard.h"
#include "JBig2_BitStream.h"
-class CJBig2_HuffmanTable : public CJBig2_Object
-{
-public:
+class CJBig2_HuffmanTable : public CJBig2_Object {
+ public:
+ CJBig2_HuffmanTable(const JBig2TableLine* pTable, int nLines, FX_BOOL bHTOOB);
- CJBig2_HuffmanTable(const JBig2TableLine *pTable, int nLines, FX_BOOL bHTOOB);
+ CJBig2_HuffmanTable(CJBig2_BitStream* pStream);
- CJBig2_HuffmanTable(CJBig2_BitStream *pStream);
+ ~CJBig2_HuffmanTable();
- ~CJBig2_HuffmanTable();
+ void init();
- void init();
+ int parseFromStandardTable(const JBig2TableLine* pTable,
+ int nLines,
+ FX_BOOL bHTOOB);
- int parseFromStandardTable(const JBig2TableLine *pTable, int nLines, FX_BOOL bHTOOB);
+ int parseFromCodedBuffer(CJBig2_BitStream* pStream);
- int parseFromCodedBuffer(CJBig2_BitStream *pStream);
+ FX_BOOL isOK() { return m_bOK; }
- FX_BOOL isOK()
- {
- return m_bOK;
- }
-private:
- FX_BOOL HTOOB;
- int NTEMP;
- int *CODES;
- int *PREFLEN;
- int *RANGELEN;
- int *RANGELOW;
- FX_BOOL m_bOK;
- friend class CJBig2_HuffmanDecoder;
+ private:
+ FX_BOOL HTOOB;
+ int NTEMP;
+ int* CODES;
+ int* PREFLEN;
+ int* RANGELEN;
+ int* RANGELOW;
+ FX_BOOL m_bOK;
+ friend class CJBig2_HuffmanDecoder;
};
#endif
diff --git a/core/src/fxcodec/jbig2/JBig2_HuffmanTable_Standard.h b/core/src/fxcodec/jbig2/JBig2_HuffmanTable_Standard.h
index 428b2c3671..aa29258f07 100644
--- a/core/src/fxcodec/jbig2/JBig2_HuffmanTable_Standard.h
+++ b/core/src/fxcodec/jbig2/JBig2_HuffmanTable_Standard.h
@@ -1,251 +1,93 @@
// Copyright 2014 PDFium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-
+
// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
#ifndef _JBIG2_HUFFMAN_TABLE_STANDARD_H_
#define _JBIG2_HUFFMAN_TABLE_STANDARD_H_
typedef struct {
- int PREFLEN;
- int RANDELEN;
- int RANGELOW;
+ int PREFLEN;
+ int RANDELEN;
+ int RANGELOW;
} JBig2TableLine;
const FX_BOOL HuffmanTable_HTOOB_B1 = FALSE;
-const JBig2TableLine HuffmanTable_B1[] = {
- { 1, 4, 0 },
- { 2, 8, 16 },
- { 3, 16, 272 },
- { 0, 32, -1 },
- { 3, 32, 65808 }
-};
+const JBig2TableLine HuffmanTable_B1[] = {{1, 4, 0},
+ {2, 8, 16},
+ {3, 16, 272},
+ {0, 32, -1},
+ {3, 32, 65808}};
const FX_BOOL HuffmanTable_HTOOB_B2 = TRUE;
-const JBig2TableLine HuffmanTable_B2[] = {
- { 1, 0, 0 },
- { 2, 0, 1 },
- { 3, 0, 2 },
- { 4, 3, 3 },
- { 5, 6, 11 },
- { 0, 32, -1 },
- { 6, 32, 75 },
- { 6, 0, 0 }
-};
+const JBig2TableLine HuffmanTable_B2[] = {{1, 0, 0}, {2, 0, 1}, {3, 0, 2},
+ {4, 3, 3}, {5, 6, 11}, {0, 32, -1},
+ {6, 32, 75}, {6, 0, 0}};
const FX_BOOL HuffmanTable_HTOOB_B3 = TRUE;
const JBig2TableLine HuffmanTable_B3[] = {
- { 8, 8, -256 },
- { 1, 0, 0 },
- { 2, 0, 1 },
- { 3, 0, 2 },
- { 4, 3, 3 },
- { 5, 6, 11 },
- { 8, 32, -257 },
- { 7, 32, 75 },
- { 6, 0, 0 }
-};
+ {8, 8, -256}, {1, 0, 0}, {2, 0, 1}, {3, 0, 2}, {4, 3, 3},
+ {5, 6, 11}, {8, 32, -257}, {7, 32, 75}, {6, 0, 0}};
const FX_BOOL HuffmanTable_HTOOB_B4 = FALSE;
const JBig2TableLine HuffmanTable_B4[] = {
- { 1, 0, 1 },
- { 2, 0, 2 },
- { 3, 0, 3 },
- { 4, 3, 4 },
- { 5, 6, 12 },
- { 0, 32, -1 },
- { 5, 32, 76 },
+ {1, 0, 1}, {2, 0, 2}, {3, 0, 3}, {4, 3, 4},
+ {5, 6, 12}, {0, 32, -1}, {5, 32, 76},
};
const FX_BOOL HuffmanTable_HTOOB_B5 = FALSE;
-const JBig2TableLine HuffmanTable_B5[] = {
- { 7, 8, -255 },
- { 1, 0, 1 },
- { 2, 0, 2 },
- { 3, 0, 3 },
- { 4, 3, 4 },
- { 5, 6, 12 },
- { 7, 32, -256 },
- { 6, 32, 76 }
-};
+const JBig2TableLine HuffmanTable_B5[] = {{7, 8, -255}, {1, 0, 1}, {2, 0, 2},
+ {3, 0, 3}, {4, 3, 4}, {5, 6, 12},
+ {7, 32, -256}, {6, 32, 76}};
const FX_BOOL HuffmanTable_HTOOB_B6 = FALSE;
const JBig2TableLine HuffmanTable_B6[] = {
- { 5, 10, -2048 },
- { 4, 9, -1024 },
- { 4, 8, -512 },
- { 4, 7, -256 },
- { 5, 6, -128 },
- { 5, 5, -64 },
- { 4, 5, -32 },
- { 2, 7, 0 },
- { 3, 7, 128 },
- { 3, 8, 256 },
- { 4, 9, 512 },
- { 4, 10, 1024 },
- { 6, 32, -2049 },
- { 6, 32, 2048 }
-};
+ {5, 10, -2048}, {4, 9, -1024}, {4, 8, -512}, {4, 7, -256}, {5, 6, -128},
+ {5, 5, -64}, {4, 5, -32}, {2, 7, 0}, {3, 7, 128}, {3, 8, 256},
+ {4, 9, 512}, {4, 10, 1024}, {6, 32, -2049}, {6, 32, 2048}};
const FX_BOOL HuffmanTable_HTOOB_B7 = FALSE;
const JBig2TableLine HuffmanTable_B7[] = {
- { 4, 9, -1024 },
- { 3, 8, -512 },
- { 4, 7, -256 },
- { 5, 6, -128 },
- { 5, 5, -64 },
- { 4, 5, -32 },
- { 4, 5, 0 },
- { 5, 5, 32 },
- { 5, 6, 64 },
- { 4, 7, 128 },
- { 3, 8, 256 },
- { 3, 9, 512 },
- { 3, 10, 1024 },
- { 5, 32, -1025 },
- { 5, 32, 2048 },
+ {4, 9, -1024}, {3, 8, -512}, {4, 7, -256}, {5, 6, -128}, {5, 5, -64},
+ {4, 5, -32}, {4, 5, 0}, {5, 5, 32}, {5, 6, 64}, {4, 7, 128},
+ {3, 8, 256}, {3, 9, 512}, {3, 10, 1024}, {5, 32, -1025}, {5, 32, 2048},
};
const FX_BOOL HuffmanTable_HTOOB_B8 = TRUE;
const JBig2TableLine HuffmanTable_B8[] = {
- { 8, 3, -15 },
- { 9, 1, -7 },
- { 8, 1, -5 },
- { 9, 0, -3 },
- { 7, 0, -2 },
- { 4, 0, -1 },
- { 2, 1, 0 },
- { 5, 0, 2 },
- { 6, 0, 3 },
- { 3, 4, 4 },
- { 6, 1, 20 },
- { 4, 4, 22 },
- { 4, 5, 38 },
- { 5, 6, 70 },
- { 5, 7, 134 },
- { 6, 7, 262 },
- { 7, 8, 390 },
- { 6, 10, 646 },
- { 9, 32, -16 },
- { 9, 32, 1670 },
- { 2, 0, 0 }
-};
+ {8, 3, -15}, {9, 1, -7}, {8, 1, -5}, {9, 0, -3}, {7, 0, -2},
+ {4, 0, -1}, {2, 1, 0}, {5, 0, 2}, {6, 0, 3}, {3, 4, 4},
+ {6, 1, 20}, {4, 4, 22}, {4, 5, 38}, {5, 6, 70}, {5, 7, 134},
+ {6, 7, 262}, {7, 8, 390}, {6, 10, 646}, {9, 32, -16}, {9, 32, 1670},
+ {2, 0, 0}};
const FX_BOOL HuffmanTable_HTOOB_B9 = TRUE;
const JBig2TableLine HuffmanTable_B9[] = {
- { 8, 4, -31 },
- { 9, 2, -15 },
- { 8, 2, -11 },
- { 9, 1, -7 },
- { 7, 1, -5 },
- { 4, 1, -3 },
- { 3, 1, -1 },
- { 3, 1, 1 },
- { 5, 1, 3 },
- { 6, 1, 5 },
- { 3, 5, 7 },
- { 6, 2, 39 },
- { 4, 5, 43 },
- { 4, 6, 75 },
- { 5, 7, 139 },
- { 5, 8, 267 },
- { 6, 8, 523 },
- { 7, 9, 779 },
- { 6, 11, 1291 },
- { 9, 32, -32 },
- { 9, 32, 3339 },
- { 2, 0, 0 }
-};
+ {8, 4, -31}, {9, 2, -15}, {8, 2, -11}, {9, 1, -7}, {7, 1, -5},
+ {4, 1, -3}, {3, 1, -1}, {3, 1, 1}, {5, 1, 3}, {6, 1, 5},
+ {3, 5, 7}, {6, 2, 39}, {4, 5, 43}, {4, 6, 75}, {5, 7, 139},
+ {5, 8, 267}, {6, 8, 523}, {7, 9, 779}, {6, 11, 1291}, {9, 32, -32},
+ {9, 32, 3339}, {2, 0, 0}};
const FX_BOOL HuffmanTable_HTOOB_B10 = TRUE;
const JBig2TableLine HuffmanTable_B10[] = {
- { 7, 4, -21 },
- { 8, 0, -5 },
- { 7, 0, -4 },
- { 5, 0, -3 },
- { 2, 2, -2 },
- { 5, 0, 2 },
- { 6, 0, 3 },
- { 7, 0, 4 },
- { 8, 0, 5 },
- { 2, 6, 6 },
- { 5, 5, 70 },
- { 6, 5, 102 },
- { 6, 6, 134 },
- { 6, 7, 198 },
- { 6, 8, 326 },
- { 6, 9, 582 },
- { 6, 10, 1094 },
- { 7, 11, 2118 },
- { 8, 32, -22 },
- { 8, 32, 4166 },
- { 2, 0, 0 }
-};
+ {7, 4, -21}, {8, 0, -5}, {7, 0, -4}, {5, 0, -3}, {2, 2, -2},
+ {5, 0, 2}, {6, 0, 3}, {7, 0, 4}, {8, 0, 5}, {2, 6, 6},
+ {5, 5, 70}, {6, 5, 102}, {6, 6, 134}, {6, 7, 198}, {6, 8, 326},
+ {6, 9, 582}, {6, 10, 1094}, {7, 11, 2118}, {8, 32, -22}, {8, 32, 4166},
+ {2, 0, 0}};
const FX_BOOL HuffmanTable_HTOOB_B11 = FALSE;
const JBig2TableLine HuffmanTable_B11[] = {
- { 1, 0, 1 },
- { 2, 1, 2 },
- { 4, 0, 4 },
- { 4, 1, 5 },
- { 5, 1, 7 },
- { 5, 2, 9 },
- { 6, 2, 13 },
- { 7, 2, 17 },
- { 7, 3, 21 },
- { 7, 4, 29 },
- { 7, 5, 45 },
- { 7, 6, 77 },
- { 0, 32, 0 },
- { 7, 32, 141 }
-};
+ {1, 0, 1}, {2, 1, 2}, {4, 0, 4}, {4, 1, 5}, {5, 1, 7},
+ {5, 2, 9}, {6, 2, 13}, {7, 2, 17}, {7, 3, 21}, {7, 4, 29},
+ {7, 5, 45}, {7, 6, 77}, {0, 32, 0}, {7, 32, 141}};
const FX_BOOL HuffmanTable_HTOOB_B12 = FALSE;
const JBig2TableLine HuffmanTable_B12[] = {
- { 1, 0, 1 },
- { 2, 0, 2 },
- { 3, 1, 3 },
- { 5, 0, 5 },
- { 5, 1, 6 },
- { 6, 1, 8 },
- { 7, 0, 10 },
- { 7, 1, 11 },
- { 7, 2, 13 },
- { 7, 3, 17 },
- { 7, 4, 25 },
- { 8, 5, 41 },
- { 0, 32, 0 },
- { 8, 32, 73 }
-};
+ {1, 0, 1}, {2, 0, 2}, {3, 1, 3}, {5, 0, 5}, {5, 1, 6},
+ {6, 1, 8}, {7, 0, 10}, {7, 1, 11}, {7, 2, 13}, {7, 3, 17},
+ {7, 4, 25}, {8, 5, 41}, {0, 32, 0}, {8, 32, 73}};
const FX_BOOL HuffmanTable_HTOOB_B13 = FALSE;
const JBig2TableLine HuffmanTable_B13[] = {
- { 1, 0, 1 },
- { 3, 0, 2 },
- { 4, 0, 3 },
- { 5, 0, 4 },
- { 4, 1, 5 },
- { 3, 3, 7 },
- { 6, 1, 15 },
- { 6, 2, 17 },
- { 6, 3, 21 },
- { 6, 4, 29 },
- { 6, 5, 45 },
- { 7, 6, 77 },
- { 0, 32, 0 },
- { 7, 32, 141 }
-};
+ {1, 0, 1}, {3, 0, 2}, {4, 0, 3}, {5, 0, 4}, {4, 1, 5},
+ {3, 3, 7}, {6, 1, 15}, {6, 2, 17}, {6, 3, 21}, {6, 4, 29},
+ {6, 5, 45}, {7, 6, 77}, {0, 32, 0}, {7, 32, 141}};
const FX_BOOL HuffmanTable_HTOOB_B14 = FALSE;
-const JBig2TableLine HuffmanTable_B14[] = {
- { 3, 0, -2 },
- { 3, 0, -1 },
- { 1, 0, 0 },
- { 3, 0, 1 },
- { 3, 0, 2 },
- { 0, 32, -3 },
- { 0, 32, 3 }
-};
+const JBig2TableLine HuffmanTable_B14[] = {{3, 0, -2}, {3, 0, -1}, {1, 0, 0},
+ {3, 0, 1}, {3, 0, 2}, {0, 32, -3},
+ {0, 32, 3}};
const FX_BOOL HuffmanTable_HTOOB_B15 = FALSE;
const JBig2TableLine HuffmanTable_B15[] = {
- { 7, 4, -24 },
- { 6, 2, -8 },
- { 5, 1, -4 },
- { 4, 0, -2 },
- { 3, 0, -1 },
- { 1, 0, 0 },
- { 3, 0, 1 },
- { 4, 0, 2 },
- { 5, 1, 3 },
- { 6, 2, 5 },
- { 7, 4, 9 },
- { 7, 32, -25 },
- { 7, 32, 25 }
-};
+ {7, 4, -24}, {6, 2, -8}, {5, 1, -4}, {4, 0, -2}, {3, 0, -1},
+ {1, 0, 0}, {3, 0, 1}, {4, 0, 2}, {5, 1, 3}, {6, 2, 5},
+ {7, 4, 9}, {7, 32, -25}, {7, 32, 25}};
#endif
diff --git a/core/src/fxcodec/jbig2/JBig2_Image.cpp b/core/src/fxcodec/jbig2/JBig2_Image.cpp
index 9ef4464ef0..772e4e5f62 100644
--- a/core/src/fxcodec/jbig2/JBig2_Image.cpp
+++ b/core/src/fxcodec/jbig2/JBig2_Image.cpp
@@ -1,7 +1,7 @@
// Copyright 2014 PDFium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-
+
// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
#include <limits.h>
@@ -10,1621 +10,1646 @@
#include "../../../include/fxcrt/fx_safe_types.h"
#include "JBig2_Image.h"
-CJBig2_Image::CJBig2_Image(int32_t w, int32_t h)
-{
- m_nWidth = w;
- m_nHeight = h;
- if (m_nWidth <= 0 || m_nHeight <= 0 || m_nWidth > INT_MAX - 31) {
- m_pData = NULL;
- m_bNeedFree = FALSE;
- return;
- }
- m_nStride = ((w + 31) >> 5) << 2;
- if (m_nStride * m_nHeight > 0 && 104857600 / (int)m_nStride > m_nHeight) {
- m_pData = (uint8_t *)m_pModule->JBig2_Malloc2(m_nStride, m_nHeight);
- } else {
- m_pData = NULL;
- }
- m_bNeedFree = TRUE;
-}
-CJBig2_Image::CJBig2_Image(int32_t w, int32_t h, int32_t stride, uint8_t*pBuf)
-{
- m_nWidth = w;
- m_nHeight = h;
- m_nStride = stride;
- m_pData = pBuf;
+CJBig2_Image::CJBig2_Image(int32_t w, int32_t h) {
+ m_nWidth = w;
+ m_nHeight = h;
+ if (m_nWidth <= 0 || m_nHeight <= 0 || m_nWidth > INT_MAX - 31) {
+ m_pData = NULL;
m_bNeedFree = FALSE;
+ return;
+ }
+ m_nStride = ((w + 31) >> 5) << 2;
+ if (m_nStride * m_nHeight > 0 && 104857600 / (int)m_nStride > m_nHeight) {
+ m_pData = (uint8_t*)m_pModule->JBig2_Malloc2(m_nStride, m_nHeight);
+ } else {
+ m_pData = NULL;
+ }
+ m_bNeedFree = TRUE;
}
-CJBig2_Image::CJBig2_Image(CJBig2_Image &im)
-{
- m_pModule = im.m_pModule;
- m_nWidth = im.m_nWidth;
- m_nHeight = im.m_nHeight;
- m_nStride = im.m_nStride;
- if (im.m_pData) {
- m_pData = (uint8_t*)m_pModule->JBig2_Malloc2(m_nStride, m_nHeight);
- JBIG2_memcpy(m_pData, im.m_pData, m_nStride * m_nHeight);
- } else {
- m_pData = NULL;
- }
- m_bNeedFree = TRUE;
+CJBig2_Image::CJBig2_Image(int32_t w,
+ int32_t h,
+ int32_t stride,
+ uint8_t* pBuf) {
+ m_nWidth = w;
+ m_nHeight = h;
+ m_nStride = stride;
+ m_pData = pBuf;
+ m_bNeedFree = FALSE;
}
-CJBig2_Image::~CJBig2_Image()
-{
- if(m_bNeedFree && m_pData) {
- m_pModule->JBig2_Free(m_pData);
- }
+CJBig2_Image::CJBig2_Image(CJBig2_Image& im) {
+ m_pModule = im.m_pModule;
+ m_nWidth = im.m_nWidth;
+ m_nHeight = im.m_nHeight;
+ m_nStride = im.m_nStride;
+ if (im.m_pData) {
+ m_pData = (uint8_t*)m_pModule->JBig2_Malloc2(m_nStride, m_nHeight);
+ JBIG2_memcpy(m_pData, im.m_pData, m_nStride * m_nHeight);
+ } else {
+ m_pData = NULL;
+ }
+ m_bNeedFree = TRUE;
}
-FX_BOOL CJBig2_Image::getPixel(int32_t x, int32_t y)
-{
- if (!m_pData) {
- return 0;
- }
- int32_t m, n;
- if(x < 0 || x >= m_nWidth) {
- return 0;
- }
- if(y < 0 || y >= m_nHeight) {
- return 0;
- }
- m = y * m_nStride + (x >> 3);
- n = x & 7;
- return ((m_pData[m] >> (7 - n)) & 1);
+CJBig2_Image::~CJBig2_Image() {
+ if (m_bNeedFree && m_pData) {
+ m_pModule->JBig2_Free(m_pData);
+ }
+}
+FX_BOOL CJBig2_Image::getPixel(int32_t x, int32_t y) {
+ if (!m_pData) {
+ return 0;
+ }
+ int32_t m, n;
+ if (x < 0 || x >= m_nWidth) {
+ return 0;
+ }
+ if (y < 0 || y >= m_nHeight) {
+ return 0;
+ }
+ m = y * m_nStride + (x >> 3);
+ n = x & 7;
+ return ((m_pData[m] >> (7 - n)) & 1);
}
-int32_t CJBig2_Image::setPixel(int32_t x, int32_t y, FX_BOOL v)
-{
- if (!m_pData) {
- return 0;
- }
- int32_t m, n;
- if(x < 0 || x >= m_nWidth) {
- return 0;
- }
- if(y < 0 || y >= m_nHeight) {
- return 0;
- }
- m = y * m_nStride + (x >> 3);
- n = x & 7;
- if(v) {
- m_pData[m] |= 1 << (7 - n);
- } else {
- m_pData[m] &= ~(1 << (7 - n));
- }
- return 1;
+int32_t CJBig2_Image::setPixel(int32_t x, int32_t y, FX_BOOL v) {
+ if (!m_pData) {
+ return 0;
+ }
+ int32_t m, n;
+ if (x < 0 || x >= m_nWidth) {
+ return 0;
+ }
+ if (y < 0 || y >= m_nHeight) {
+ return 0;
+ }
+ m = y * m_nStride + (x >> 3);
+ n = x & 7;
+ if (v) {
+ m_pData[m] |= 1 << (7 - n);
+ } else {
+ m_pData[m] &= ~(1 << (7 - n));
+ }
+ return 1;
}
-void CJBig2_Image::copyLine(int32_t hTo, int32_t hFrom)
-{
- if (!m_pData) {
- return;
- }
- if(hFrom < 0 || hFrom >= m_nHeight) {
- JBIG2_memset(m_pData + hTo * m_nStride, 0, m_nStride);
- } else {
- JBIG2_memcpy(m_pData + hTo * m_nStride, m_pData + hFrom * m_nStride, m_nStride);
- }
+void CJBig2_Image::copyLine(int32_t hTo, int32_t hFrom) {
+ if (!m_pData) {
+ return;
+ }
+ if (hFrom < 0 || hFrom >= m_nHeight) {
+ JBIG2_memset(m_pData + hTo * m_nStride, 0, m_nStride);
+ } else {
+ JBIG2_memcpy(m_pData + hTo * m_nStride, m_pData + hFrom * m_nStride,
+ m_nStride);
+ }
}
-void CJBig2_Image::fill(FX_BOOL v)
-{
- if (!m_pData) {
- return;
- }
- JBIG2_memset(m_pData, v ? 0xff : 0, m_nStride * m_nHeight);
+void CJBig2_Image::fill(FX_BOOL v) {
+ if (!m_pData) {
+ return;
+ }
+ JBIG2_memset(m_pData, v ? 0xff : 0, m_nStride * m_nHeight);
}
-FX_BOOL CJBig2_Image::composeTo(CJBig2_Image *pDst, int32_t x, int32_t y, JBig2ComposeOp op)
-{
- if (!m_pData) {
- return FALSE;
- }
+FX_BOOL CJBig2_Image::composeTo(CJBig2_Image* pDst,
+ int32_t x,
+ int32_t y,
+ JBig2ComposeOp op) {
+ if (!m_pData) {
+ return FALSE;
+ }
+ return composeTo_opt2(pDst, x, y, op);
+}
+FX_BOOL CJBig2_Image::composeTo(CJBig2_Image* pDst,
+ int32_t x,
+ int32_t y,
+ JBig2ComposeOp op,
+ const FX_RECT* pSrcRect) {
+ if (!m_pData) {
+ return FALSE;
+ }
+ if (NULL == pSrcRect || *pSrcRect == FX_RECT(0, 0, m_nWidth, m_nHeight)) {
return composeTo_opt2(pDst, x, y, op);
+ }
+ return composeTo_opt2(pDst, x, y, op, pSrcRect);
}
-FX_BOOL CJBig2_Image::composeTo(CJBig2_Image *pDst, int32_t x, int32_t y, JBig2ComposeOp op, const FX_RECT* pSrcRect)
-{
- if (!m_pData) {
- return FALSE;
- }
- if (NULL == pSrcRect || *pSrcRect == FX_RECT(0, 0, m_nWidth, m_nHeight)) {
- return composeTo_opt2(pDst, x, y, op);
- }
- return composeTo_opt2(pDst, x, y, op, pSrcRect);
+FX_BOOL CJBig2_Image::composeTo_unopt(CJBig2_Image* pDst,
+ int32_t x,
+ int32_t y,
+ JBig2ComposeOp op) {
+ int32_t w, h, dx, dy;
+ int32_t i, j;
+ w = m_nWidth;
+ h = m_nHeight;
+ dx = dy = 0;
+ if (x < 0) {
+ dx += -x;
+ w -= -x;
+ x = 0;
+ }
+ if (y < 0) {
+ dy += -y;
+ h -= -y;
+ y = 0;
+ }
+ if (x + w > pDst->m_nWidth) {
+ w = pDst->m_nWidth - x;
+ }
+ if (y + h > pDst->m_nHeight) {
+ h = pDst->m_nHeight - y;
+ }
+ switch (op) {
+ case JBIG2_COMPOSE_OR:
+ for (j = 0; j < h; j++) {
+ for (i = 0; i < w; i++) {
+ pDst->setPixel(
+ x + i, y + j,
+ (getPixel(i + dx, j + dy) | pDst->getPixel(x + i, y + j)) & 1);
+ }
+ }
+ break;
+ case JBIG2_COMPOSE_AND:
+ for (j = 0; j < h; j++) {
+ for (i = 0; i < w; i++) {
+ pDst->setPixel(
+ x + i, y + j,
+ (getPixel(i + dx, j + dy) & pDst->getPixel(x + i, y + j)) & 1);
+ }
+ }
+ break;
+ case JBIG2_COMPOSE_XOR:
+ for (j = 0; j < h; j++) {
+ for (i = 0; i < w; i++) {
+ pDst->setPixel(
+ x + i, y + j,
+ (getPixel(i + dx, j + dy) ^ pDst->getPixel(x + i, y + j)) & 1);
+ }
+ }
+ break;
+ case JBIG2_COMPOSE_XNOR:
+ for (j = 0; j < h; j++) {
+ for (i = 0; i < w; i++) {
+ pDst->setPixel(
+ x + i, y + j,
+ (~(getPixel(i + dx, j + dy) ^ pDst->getPixel(x + i, y + j))) & 1);
+ }
+ }
+ break;
+ case JBIG2_COMPOSE_REPLACE:
+ for (j = 0; j < h; j++) {
+ for (i = 0; i < w; i++) {
+ pDst->setPixel(x + i, y + j, getPixel(i + dx, j + dy));
+ }
+ }
+ break;
+ }
+ return TRUE;
}
-FX_BOOL CJBig2_Image::composeTo_unopt(CJBig2_Image *pDst, int32_t x, int32_t y, JBig2ComposeOp op)
-{
- int32_t w, h, dx, dy;
- int32_t i, j;
- w = m_nWidth;
- h = m_nHeight;
- dx = dy = 0;
- if(x < 0) {
- dx += -x;
- w -= -x;
- x = 0;
- }
- if(y < 0) {
- dy += -y;
- h -= -y;
- y = 0;
- }
- if(x + w > pDst->m_nWidth) {
- w = pDst->m_nWidth - x;
- }
- if(y + h > pDst->m_nHeight) {
- h = pDst->m_nHeight - y;
+
+FX_BOOL CJBig2_Image::composeTo_opt(CJBig2_Image* pDst,
+ int32_t x,
+ int32_t y,
+ JBig2ComposeOp op) {
+ int32_t x0, x1, y0, y1, xx, yy;
+ uint8_t *pLineSrc, *pLineDst, *srcPtr, *destPtr;
+ FX_DWORD src0, src1, src, dest, s1, s2, m1, m2, m3;
+ FX_BOOL oneByte;
+ if (!m_pData) {
+ return FALSE;
+ }
+ if (y < 0) {
+ y0 = -y;
+ } else {
+ y0 = 0;
+ }
+ if (y + m_nHeight > pDst->m_nHeight) {
+ y1 = pDst->m_nHeight - y;
+ } else {
+ y1 = m_nHeight;
+ }
+ if (y0 >= y1) {
+ return FALSE;
+ }
+ if (x >= 0) {
+ x0 = x & ~7;
+ } else {
+ x0 = 0;
+ }
+ x1 = x + m_nWidth;
+ if (x1 > pDst->m_nWidth) {
+ x1 = pDst->m_nWidth;
+ }
+ if (x0 >= x1) {
+ return FALSE;
+ }
+ s1 = x & 7;
+ s2 = 8 - s1;
+ m1 = 0xff >> (x1 & 7);
+ m2 = 0xff << (((x1 & 7) == 0) ? 0 : 8 - (x1 & 7));
+ m3 = (0xff >> s1) & m2;
+ oneByte = x0 == ((x1 - 1) & ~7);
+ pLineDst = pDst->m_pData + y * pDst->m_nStride;
+ pLineSrc = m_pData + y0 * m_nStride;
+ if (oneByte) {
+ if (x >= 0) {
+ switch (op) {
+ case JBIG2_COMPOSE_OR: {
+ for (yy = y0; yy < y1; ++yy) {
+ destPtr = pLineDst + (x >> 3);
+ srcPtr = pLineSrc;
+ dest = *destPtr;
+ dest |= (*srcPtr >> s1) & m2;
+ *destPtr = (uint8_t)dest;
+ pLineDst += pDst->m_nStride;
+ pLineSrc += m_nStride;
+ }
+ } break;
+ case JBIG2_COMPOSE_AND: {
+ for (yy = y0; yy < y1; ++yy) {
+ destPtr = pLineDst + (x >> 3);
+ srcPtr = pLineSrc;
+ dest = *destPtr;
+ dest &= ((0xff00 | *srcPtr) >> s1) | m1;
+ *destPtr = (uint8_t)dest;
+ pLineDst += pDst->m_nStride;
+ pLineSrc += m_nStride;
+ }
+ } break;
+ case JBIG2_COMPOSE_XOR: {
+ for (yy = y0; yy < y1; ++yy) {
+ destPtr = pLineDst + (x >> 3);
+ srcPtr = pLineSrc;
+ dest = *destPtr;
+ dest ^= (*srcPtr >> s1) & m2;
+ *destPtr = (uint8_t)dest;
+ pLineDst += pDst->m_nStride;
+ pLineSrc += m_nStride;
+ }
+ } break;
+ case JBIG2_COMPOSE_XNOR: {
+ for (yy = y0; yy < y1; ++yy) {
+ destPtr = pLineDst + (x >> 3);
+ srcPtr = pLineSrc;
+ dest = *destPtr;
+ dest ^= ((*srcPtr ^ 0xff) >> s1) & m2;
+ *destPtr = (uint8_t)dest;
+ pLineDst += pDst->m_nStride;
+ pLineSrc += m_nStride;
+ }
+ } break;
+ case JBIG2_COMPOSE_REPLACE: {
+ for (yy = y0; yy < y1; ++yy) {
+ destPtr = pLineDst + (x >> 3);
+ srcPtr = pLineSrc;
+ dest = *destPtr;
+ dest = (dest & ~m3) | ((*srcPtr >> s1) & m3);
+ *destPtr = (uint8_t)dest;
+ pLineDst += pDst->m_nStride;
+ pLineSrc += m_nStride;
+ }
+ } break;
+ }
+ } else {
+ switch (op) {
+ case JBIG2_COMPOSE_OR: {
+ for (yy = y0; yy < y1; ++yy) {
+ destPtr = pLineDst;
+ srcPtr = pLineSrc + (-x >> 3);
+ dest = *destPtr;
+ dest |= *srcPtr & m2;
+ *destPtr = (uint8_t)dest;
+ pLineDst += pDst->m_nStride;
+ pLineSrc += m_nStride;
+ }
+ } break;
+ case JBIG2_COMPOSE_AND: {
+ for (yy = y0; yy < y1; ++yy) {
+ destPtr = pLineDst;
+ srcPtr = pLineSrc + (-x >> 3);
+ dest = *destPtr;
+ dest &= *srcPtr | m1;
+ *destPtr = (uint8_t)dest;
+ pLineDst += pDst->m_nStride;
+ pLineSrc += m_nStride;
+ }
+ } break;
+ case JBIG2_COMPOSE_XOR: {
+ for (yy = y0; yy < y1; ++yy) {
+ destPtr = pLineDst;
+ srcPtr = pLineSrc + (-x >> 3);
+ dest = *destPtr;
+ dest ^= *srcPtr & m2;
+ *destPtr = (uint8_t)dest;
+ pLineDst += pDst->m_nStride;
+ pLineSrc += m_nStride;
+ }
+ } break;
+ case JBIG2_COMPOSE_XNOR: {
+ for (yy = y0; yy < y1; ++yy) {
+ destPtr = pLineDst;
+ srcPtr = pLineSrc + (-x >> 3);
+ dest = *destPtr;
+ dest ^= (*srcPtr ^ 0xff) & m2;
+ *destPtr = (uint8_t)dest;
+ pLineDst += pDst->m_nStride;
+ pLineSrc += m_nStride;
+ }
+ } break;
+ case JBIG2_COMPOSE_REPLACE: {
+ for (yy = y0; yy < y1; ++yy) {
+ destPtr = pLineDst;
+ srcPtr = pLineSrc + (-x >> 3);
+ dest = *destPtr;
+ dest = (*srcPtr & m2) | (dest & m1);
+ *destPtr = (uint8_t)dest;
+ pLineDst += pDst->m_nStride;
+ pLineSrc += m_nStride;
+ }
+ } break;
+ }
}
- switch(op) {
- case JBIG2_COMPOSE_OR:
- for(j = 0; j < h; j++) {
- for(i = 0; i < w; i++) {
- pDst->setPixel(x + i, y + j,
- (getPixel(i + dx, j + dy) | pDst->getPixel(x + i, y + j)) & 1);
- }
+ } else {
+ if (x >= 0) {
+ switch (op) {
+ case JBIG2_COMPOSE_OR: {
+ for (yy = y0; yy < y1; ++yy) {
+ destPtr = pLineDst + (x >> 3);
+ srcPtr = pLineSrc;
+ src1 = *srcPtr++;
+ dest = *destPtr;
+ dest |= src1 >> s1;
+ *destPtr++ = (uint8_t)dest;
+ xx = x0 + 8;
+ for (; xx < x1 - 8; xx += 8) {
+ dest = *destPtr;
+ src0 = src1;
+ src1 = *srcPtr++;
+ src = (((src0 << 8) | src1) >> s1) & 0xff;
+ dest |= src;
+ *destPtr++ = (uint8_t)dest;
}
- break;
- case JBIG2_COMPOSE_AND:
- for(j = 0; j < h; j++) {
- for(i = 0; i < w; i++) {
- pDst->setPixel(x + i, y + j,
- (getPixel(i + dx, j + dy) & pDst->getPixel(x + i, y + j)) & 1);
- }
+ dest = *destPtr;
+ src0 = src1;
+ if (srcPtr - pLineSrc < m_nStride) {
+ src1 = *srcPtr++;
+ } else {
+ src1 = 0;
}
- break;
- case JBIG2_COMPOSE_XOR:
- for(j = 0; j < h; j++) {
- for(i = 0; i < w; i++) {
- pDst->setPixel(x + i, y + j,
- (getPixel(i + dx, j + dy) ^ pDst->getPixel(x + i, y + j)) & 1);
- }
+ src = (((src0 << 8) | src1) >> s1) & 0xff;
+ dest |= src & m2;
+ *destPtr = (uint8_t)dest;
+ pLineDst += pDst->m_nStride;
+ pLineSrc += m_nStride;
+ }
+ } break;
+ case JBIG2_COMPOSE_AND: {
+ for (yy = y0; yy < y1; ++yy) {
+ destPtr = pLineDst + (x >> 3);
+ srcPtr = pLineSrc;
+ src1 = *srcPtr++;
+ dest = *destPtr;
+ dest &= (0xff00 | src1) >> s1;
+ *destPtr++ = (uint8_t)dest;
+ xx = x0 + 8;
+ for (; xx < x1 - 8; xx += 8) {
+ dest = *destPtr;
+ src0 = src1;
+ src1 = *srcPtr++;
+ src = (((src0 << 8) | src1) >> s1) & 0xff;
+ dest &= src;
+ *destPtr++ = (uint8_t)dest;
}
- break;
- case JBIG2_COMPOSE_XNOR:
- for(j = 0; j < h; j++) {
- for(i = 0; i < w; i++) {
- pDst->setPixel(x + i, y + j,
- (~(getPixel(i + dx, j + dy) ^ pDst->getPixel(x + i, y + j))) & 1);
- }
+ dest = *destPtr;
+ src0 = src1;
+ if (srcPtr - pLineSrc < m_nStride) {
+ src1 = *srcPtr++;
+ } else {
+ src1 = 0;
}
- break;
- case JBIG2_COMPOSE_REPLACE:
- for(j = 0; j < h; j++) {
- for(i = 0; i < w; i++) {
- pDst->setPixel(x + i, y + j, getPixel(i + dx, j + dy));
- }
+ src = (((src0 << 8) | src1) >> s1) & 0xff;
+ dest &= src | m1;
+ *destPtr = (uint8_t)dest;
+ pLineDst += pDst->m_nStride;
+ pLineSrc += m_nStride;
+ }
+ } break;
+ case JBIG2_COMPOSE_XOR: {
+ for (yy = y0; yy < y1; ++yy) {
+ destPtr = pLineDst + (x >> 3);
+ srcPtr = pLineSrc;
+ src1 = *srcPtr++;
+ dest = *destPtr;
+ dest ^= src1 >> s1;
+ *destPtr++ = (uint8_t)dest;
+ xx = x0 + 8;
+ for (; xx < x1 - 8; xx += 8) {
+ dest = *destPtr;
+ src0 = src1;
+ src1 = *srcPtr++;
+ src = (((src0 << 8) | src1) >> s1) & 0xff;
+ dest ^= src;
+ *destPtr++ = (uint8_t)dest;
}
- break;
- }
- return TRUE;
-}
-
-FX_BOOL CJBig2_Image::composeTo_opt(CJBig2_Image *pDst, int32_t x, int32_t y, JBig2ComposeOp op)
-{
- int32_t x0, x1, y0, y1, xx, yy;
- uint8_t *pLineSrc, *pLineDst, *srcPtr, *destPtr;
- FX_DWORD src0, src1, src, dest, s1, s2, m1, m2, m3;
- FX_BOOL oneByte;
- if (!m_pData) {
- return FALSE;
- }
- if (y < 0) {
- y0 = -y;
- } else {
- y0 = 0;
- }
- if (y + m_nHeight > pDst->m_nHeight) {
- y1 = pDst->m_nHeight - y;
- } else {
- y1 = m_nHeight;
- }
- if (y0 >= y1) {
- return FALSE;
- }
- if (x >= 0) {
- x0 = x & ~7;
- } else {
- x0 = 0;
- }
- x1 = x + m_nWidth;
- if (x1 > pDst->m_nWidth) {
- x1 = pDst->m_nWidth;
- }
- if (x0 >= x1) {
- return FALSE;
- }
- s1 = x & 7;
- s2 = 8 - s1;
- m1 = 0xff >> (x1 & 7);
- m2 = 0xff << (((x1 & 7) == 0) ? 0 : 8 - (x1 & 7));
- m3 = (0xff >> s1) & m2;
- oneByte = x0 == ((x1 - 1) & ~7);
- pLineDst = pDst->m_pData + y * pDst->m_nStride;
- pLineSrc = m_pData + y0 * m_nStride;
- if(oneByte) {
- if(x >= 0) {
- switch(op) {
- case JBIG2_COMPOSE_OR: {
- for (yy = y0; yy < y1; ++yy) {
- destPtr = pLineDst + (x >> 3);
- srcPtr = pLineSrc;
- dest = *destPtr;
- dest |= (*srcPtr >> s1) & m2;
- *destPtr = (uint8_t)dest;
- pLineDst += pDst->m_nStride;
- pLineSrc += m_nStride;
- }
- }
- break;
- case JBIG2_COMPOSE_AND: {
- for (yy = y0; yy < y1; ++yy) {
- destPtr = pLineDst + (x >> 3);
- srcPtr = pLineSrc;
- dest = *destPtr;
- dest &= ((0xff00 | *srcPtr) >> s1) | m1;
- *destPtr = (uint8_t)dest;
- pLineDst += pDst->m_nStride;
- pLineSrc += m_nStride;
- }
- }
- break;
- case JBIG2_COMPOSE_XOR: {
- for (yy = y0; yy < y1; ++yy) {
- destPtr = pLineDst + (x >> 3);
- srcPtr = pLineSrc;
- dest = *destPtr;
- dest ^= (*srcPtr >> s1) & m2;
- *destPtr = (uint8_t)dest;
- pLineDst += pDst->m_nStride;
- pLineSrc += m_nStride;
- }
- }
- break;
- case JBIG2_COMPOSE_XNOR: {
- for (yy = y0; yy < y1; ++yy) {
- destPtr = pLineDst + (x >> 3);
- srcPtr = pLineSrc;
- dest = *destPtr;
- dest ^= ((*srcPtr ^ 0xff) >> s1) & m2;
- *destPtr = (uint8_t)dest;
- pLineDst += pDst->m_nStride;
- pLineSrc += m_nStride;
- }
- }
- break;
- case JBIG2_COMPOSE_REPLACE: {
- for (yy = y0; yy < y1; ++yy) {
- destPtr = pLineDst + (x >> 3);
- srcPtr = pLineSrc;
- dest = *destPtr;
- dest = (dest & ~m3) | ((*srcPtr >> s1) & m3);
- *destPtr = (uint8_t)dest;
- pLineDst += pDst->m_nStride;
- pLineSrc += m_nStride;
- }
- }
- break;
+ dest = *destPtr;
+ src0 = src1;
+ if (srcPtr - pLineSrc < m_nStride) {
+ src1 = *srcPtr++;
+ } else {
+ src1 = 0;
}
- } else {
- switch(op) {
- case JBIG2_COMPOSE_OR: {
- for(yy = y0; yy < y1; ++yy) {
- destPtr = pLineDst;
- srcPtr = pLineSrc + (-x >> 3);
- dest = *destPtr;
- dest |= *srcPtr & m2;
- *destPtr = (uint8_t)dest;
- pLineDst += pDst->m_nStride;
- pLineSrc += m_nStride;
- }
- }
- break;
- case JBIG2_COMPOSE_AND: {
- for(yy = y0; yy < y1; ++yy) {
- destPtr = pLineDst;
- srcPtr = pLineSrc + (-x >> 3);
- dest = *destPtr;
- dest &= *srcPtr | m1;
- *destPtr = (uint8_t)dest;
- pLineDst += pDst->m_nStride;
- pLineSrc += m_nStride;
- }
- }
- break;
- case JBIG2_COMPOSE_XOR: {
- for(yy = y0; yy < y1; ++yy) {
- destPtr = pLineDst;
- srcPtr = pLineSrc + (-x >> 3);
- dest = *destPtr;
- dest ^= *srcPtr & m2;
- *destPtr = (uint8_t)dest;
- pLineDst += pDst->m_nStride;
- pLineSrc += m_nStride;
- }
- }
- break;
- case JBIG2_COMPOSE_XNOR: {
- for(yy = y0; yy < y1; ++yy) {
- destPtr = pLineDst;
- srcPtr = pLineSrc + (-x >> 3);
- dest = *destPtr;
- dest ^= (*srcPtr ^ 0xff) & m2;
- *destPtr = (uint8_t)dest;
- pLineDst += pDst->m_nStride;
- pLineSrc += m_nStride;
- }
- }
- break;
- case JBIG2_COMPOSE_REPLACE: {
- for(yy = y0; yy < y1; ++yy) {
- destPtr = pLineDst;
- srcPtr = pLineSrc + (-x >> 3);
- dest = *destPtr;
- dest = (*srcPtr & m2) | (dest & m1);
- *destPtr = (uint8_t)dest;
- pLineDst += pDst->m_nStride;
- pLineSrc += m_nStride;
- }
- }
- break;
+ src = (((src0 << 8) | src1) >> s1) & 0xff;
+ dest ^= src & m2;
+ *destPtr = (uint8_t)dest;
+ pLineDst += pDst->m_nStride;
+ pLineSrc += m_nStride;
+ }
+ } break;
+ case JBIG2_COMPOSE_XNOR: {
+ for (yy = y0; yy < y1; ++yy) {
+ destPtr = pLineDst + (x >> 3);
+ srcPtr = pLineSrc;
+ src1 = *srcPtr++;
+ dest = *destPtr;
+ dest ^= (src1 ^ 0xff) >> s1;
+ *destPtr++ = (uint8_t)dest;
+ xx = x0 + 8;
+ for (; xx < x1 - 8; xx += 8) {
+ dest = *destPtr;
+ src0 = src1;
+ src1 = *srcPtr++;
+ src = (((src0 << 8) | src1) >> s1) & 0xff;
+ dest ^= src ^ 0xff;
+ *destPtr++ = (uint8_t)dest;
}
- }
+ dest = *destPtr;
+ src0 = src1;
+ if (srcPtr - pLineSrc < m_nStride) {
+ src1 = *srcPtr++;
+ } else {
+ src1 = 0;
+ }
+ src = (((src0 << 8) | src1) >> s1) & 0xff;
+ dest ^= (src ^ 0xff) & m2;
+ *destPtr = (uint8_t)dest;
+ pLineDst += pDst->m_nStride;
+ pLineSrc += m_nStride;
+ }
+ } break;
+ case JBIG2_COMPOSE_REPLACE: {
+ for (yy = y0; yy < y1; ++yy) {
+ destPtr = pLineDst + (x >> 3);
+ srcPtr = pLineSrc;
+ src1 = *srcPtr++;
+ dest = *destPtr;
+ dest = (dest & (0xff << s2)) | (src1 >> s1);
+ *destPtr++ = (uint8_t)dest;
+ xx = x0 + 8;
+ for (; xx < x1 - 8; xx += 8) {
+ dest = *destPtr;
+ src0 = src1;
+ src1 = *srcPtr++;
+ src = (((src0 << 8) | src1) >> s1) & 0xff;
+ dest = src;
+ *destPtr++ = (uint8_t)dest;
+ }
+ dest = *destPtr;
+ src0 = src1;
+ if (srcPtr - pLineSrc < m_nStride) {
+ src1 = *srcPtr++;
+ } else {
+ src1 = 0;
+ }
+ src = (((src0 << 8) | src1) >> s1) & 0xff;
+ dest = (src & m2) | (dest & m1);
+ *destPtr = (uint8_t)dest;
+ pLineDst += pDst->m_nStride;
+ pLineSrc += m_nStride;
+ }
+ } break;
+ }
} else {
- if(x >= 0) {
- switch(op) {
- case JBIG2_COMPOSE_OR: {
- for(yy = y0; yy < y1; ++yy) {
- destPtr = pLineDst + (x >> 3);
- srcPtr = pLineSrc;
- src1 = *srcPtr++;
- dest = *destPtr;
- dest |= src1 >> s1;
- *destPtr++ = (uint8_t)dest;
- xx = x0 + 8;
- for (; xx < x1 - 8; xx += 8) {
- dest = *destPtr;
- src0 = src1;
- src1 = *srcPtr++;
- src = (((src0 << 8) | src1) >> s1) & 0xff;
- dest |= src;
- *destPtr++ = (uint8_t)dest;
- }
- dest = *destPtr;
- src0 = src1;
- if(srcPtr - pLineSrc < m_nStride) {
- src1 = *srcPtr++;
- } else {
- src1 = 0;
- }
- src = (((src0 << 8) | src1) >> s1) & 0xff;
- dest |= src & m2;
- *destPtr = (uint8_t)dest;
- pLineDst += pDst->m_nStride;
- pLineSrc += m_nStride;
- }
- }
- break;
- case JBIG2_COMPOSE_AND: {
- for(yy = y0; yy < y1; ++yy) {
- destPtr = pLineDst + (x >> 3);
- srcPtr = pLineSrc;
- src1 = *srcPtr++;
- dest = *destPtr;
- dest &= (0xff00 | src1) >> s1;
- *destPtr++ = (uint8_t)dest;
- xx = x0 + 8;
- for (; xx < x1 - 8; xx += 8) {
- dest = *destPtr;
- src0 = src1;
- src1 = *srcPtr++;
- src = (((src0 << 8) | src1) >> s1) & 0xff;
- dest &= src;
- *destPtr++ = (uint8_t)dest;
- }
- dest = *destPtr;
- src0 = src1;
- if(srcPtr - pLineSrc < m_nStride) {
- src1 = *srcPtr++;
- } else {
- src1 = 0;
- }
- src = (((src0 << 8) | src1) >> s1) & 0xff;
- dest &= src | m1;
- *destPtr = (uint8_t)dest;
- pLineDst += pDst->m_nStride;
- pLineSrc += m_nStride;
- }
- }
- break;
- case JBIG2_COMPOSE_XOR: {
- for(yy = y0; yy < y1; ++yy) {
- destPtr = pLineDst + (x >> 3);
- srcPtr = pLineSrc;
- src1 = *srcPtr++;
- dest = *destPtr;
- dest ^= src1 >> s1;
- *destPtr++ = (uint8_t)dest;
- xx = x0 + 8;
- for (; xx < x1 - 8; xx += 8) {
- dest = *destPtr;
- src0 = src1;
- src1 = *srcPtr++;
- src = (((src0 << 8) | src1) >> s1) & 0xff;
- dest ^= src;
- *destPtr++ = (uint8_t)dest;
- }
- dest = *destPtr;
- src0 = src1;
- if(srcPtr - pLineSrc < m_nStride) {
- src1 = *srcPtr++;
- } else {
- src1 = 0;
- }
- src = (((src0 << 8) | src1) >> s1) & 0xff;
- dest ^= src & m2;
- *destPtr = (uint8_t)dest;
- pLineDst += pDst->m_nStride;
- pLineSrc += m_nStride;
- }
- }
- break;
- case JBIG2_COMPOSE_XNOR: {
- for(yy = y0; yy < y1; ++yy) {
- destPtr = pLineDst + (x >> 3);
- srcPtr = pLineSrc;
- src1 = *srcPtr++;
- dest = *destPtr;
- dest ^= (src1 ^ 0xff) >> s1;
- *destPtr++ = (uint8_t)dest;
- xx = x0 + 8;
- for (; xx < x1 - 8; xx += 8) {
- dest = *destPtr;
- src0 = src1;
- src1 = *srcPtr++;
- src = (((src0 << 8) | src1) >> s1) & 0xff;
- dest ^= src ^ 0xff;
- *destPtr++ = (uint8_t)dest;
- }
- dest = *destPtr;
- src0 = src1;
- if(srcPtr - pLineSrc < m_nStride) {
- src1 = *srcPtr++;
- } else {
- src1 = 0;
- }
- src = (((src0 << 8) | src1) >> s1) & 0xff;
- dest ^= (src ^ 0xff) & m2;
- *destPtr = (uint8_t)dest;
- pLineDst += pDst->m_nStride;
- pLineSrc += m_nStride;
- }
- }
- break;
- case JBIG2_COMPOSE_REPLACE: {
- for(yy = y0; yy < y1; ++yy) {
- destPtr = pLineDst + (x >> 3);
- srcPtr = pLineSrc;
- src1 = *srcPtr++;
- dest = *destPtr;
- dest = (dest & (0xff << s2)) | (src1 >> s1);
- *destPtr++ = (uint8_t)dest;
- xx = x0 + 8;
- for (; xx < x1 - 8; xx += 8) {
- dest = *destPtr;
- src0 = src1;
- src1 = *srcPtr++;
- src = (((src0 << 8) | src1) >> s1) & 0xff;
- dest = src;
- *destPtr++ = (uint8_t)dest;
- }
- dest = *destPtr;
- src0 = src1;
- if(srcPtr - pLineSrc < m_nStride) {
- src1 = *srcPtr++;
- } else {
- src1 = 0;
- }
- src = (((src0 << 8) | src1) >> s1) & 0xff;
- dest = (src & m2) | (dest & m1);
- *destPtr = (uint8_t)dest;
- pLineDst += pDst->m_nStride;
- pLineSrc += m_nStride;
- }
- }
- break;
+ switch (op) {
+ case JBIG2_COMPOSE_OR: {
+ for (yy = y0; yy < y1; ++yy) {
+ destPtr = pLineDst;
+ srcPtr = pLineSrc + (-x >> 3);
+ src1 = *srcPtr++;
+ xx = x0;
+ for (; xx < x1 - 8; xx += 8) {
+ dest = *destPtr;
+ src0 = src1;
+ src1 = *srcPtr++;
+ src = (((src0 << 8) | src1) >> s1) & 0xff;
+ dest |= src;
+ *destPtr++ = (uint8_t)dest;
}
- } else {
- switch(op) {
- case JBIG2_COMPOSE_OR: {
- for(yy = y0; yy < y1; ++yy) {
- destPtr = pLineDst;
- srcPtr = pLineSrc + (-x >> 3);
- src1 = *srcPtr++;
- xx = x0;
- for (; xx < x1 - 8; xx += 8) {
- dest = *destPtr;
- src0 = src1;
- src1 = *srcPtr++;
- src = (((src0 << 8) | src1) >> s1) & 0xff;
- dest |= src;
- *destPtr++ = (uint8_t)dest;
- }
- dest = *destPtr;
- src0 = src1;
- if(srcPtr - pLineSrc < m_nStride) {
- src1 = *srcPtr++;
- } else {
- src1 = 0;
- }
- src = (((src0 << 8) | src1) >> s1) & 0xff;
- dest |= src & m2;
- *destPtr = (uint8_t)dest;
- pLineDst += pDst->m_nStride;
- pLineSrc += m_nStride;
- }
- }
- break;
- case JBIG2_COMPOSE_AND: {
- for(yy = y0; yy < y1; ++yy) {
- destPtr = pLineDst;
- srcPtr = pLineSrc + (-x >> 3);
- src1 = *srcPtr++;
- xx = x0;
- for (; xx < x1 - 8; xx += 8) {
- dest = *destPtr;
- src0 = src1;
- src1 = *srcPtr++;
- src = (((src0 << 8) | src1) >> s1) & 0xff;
- dest &= src;
- *destPtr++ = (uint8_t)dest;
- }
- dest = *destPtr;
- src0 = src1;
- if(srcPtr - pLineSrc < m_nStride) {
- src1 = *srcPtr++;
- } else {
- src1 = 0;
- }
- src = (((src0 << 8) | src1) >> s1) & 0xff;
- dest &= src | m1;
- *destPtr = (uint8_t)dest;
- pLineDst += pDst->m_nStride;
- pLineSrc += m_nStride;
- }
- }
- break;
- case JBIG2_COMPOSE_XOR: {
- for(yy = y0; yy < y1; ++yy) {
- destPtr = pLineDst;
- srcPtr = pLineSrc + (-x >> 3);
- src1 = *srcPtr++;
- xx = x0;
- for (; xx < x1 - 8; xx += 8) {
- dest = *destPtr;
- src0 = src1;
- src1 = *srcPtr++;
- src = (((src0 << 8) | src1) >> s1) & 0xff;
- dest ^= src;
- *destPtr++ = (uint8_t)dest;
- }
- dest = *destPtr;
- src0 = src1;
- if(srcPtr - pLineSrc < m_nStride) {
- src1 = *srcPtr++;
- } else {
- src1 = 0;
- }
- src = (((src0 << 8) | src1) >> s1) & 0xff;
- dest ^= src & m2;
- *destPtr = (uint8_t)dest;
- pLineDst += pDst->m_nStride;
- pLineSrc += m_nStride;
- }
- }
- break;
- case JBIG2_COMPOSE_XNOR: {
- for(yy = y0; yy < y1; ++yy) {
- destPtr = pLineDst;
- srcPtr = pLineSrc + (-x >> 3);
- src1 = *srcPtr++;
- xx = x0;
- for (; xx < x1 - 8; xx += 8) {
- dest = *destPtr;
- src0 = src1;
- src1 = *srcPtr++;
- src = (((src0 << 8) | src1) >> s1) & 0xff;
- dest ^= src ^ 0xff;
- *destPtr++ = (uint8_t)dest;
- }
- dest = *destPtr;
- src0 = src1;
- if(srcPtr - pLineSrc < m_nStride) {
- src1 = *srcPtr++;
- } else {
- src1 = 0;
- }
- src = (((src0 << 8) | src1) >> s1) & 0xff;
- dest ^= (src ^ 0xff) & m2;
- *destPtr = (uint8_t)dest;
- pLineDst += pDst->m_nStride;
- pLineSrc += m_nStride;
- }
- }
- break;
- case JBIG2_COMPOSE_REPLACE: {
- for(yy = y0; yy < y1; ++yy) {
- destPtr = pLineDst;
- srcPtr = pLineSrc + (-x >> 3);
- src1 = *srcPtr++;
- xx = x0;
- for (; xx < x1 - 8; xx += 8) {
- dest = *destPtr;
- src0 = src1;
- src1 = *srcPtr++;
- src = (((src0 << 8) | src1) >> s1) & 0xff;
- dest = src;
- *destPtr++ = (uint8_t)dest;
- }
- dest = *destPtr;
- src0 = src1;
- if(srcPtr - pLineSrc < m_nStride) {
- src1 = *srcPtr++;
- } else {
- src1 = 0;
- }
- src = (((src0 << 8) | src1) >> s1) & 0xff;
- dest = (src & m2) | (dest & m1);
- *destPtr = (uint8_t)dest;
- pLineDst += pDst->m_nStride;
- pLineSrc += m_nStride;
- }
- }
- break;
+ dest = *destPtr;
+ src0 = src1;
+ if (srcPtr - pLineSrc < m_nStride) {
+ src1 = *srcPtr++;
+ } else {
+ src1 = 0;
}
- }
+ src = (((src0 << 8) | src1) >> s1) & 0xff;
+ dest |= src & m2;
+ *destPtr = (uint8_t)dest;
+ pLineDst += pDst->m_nStride;
+ pLineSrc += m_nStride;
+ }
+ } break;
+ case JBIG2_COMPOSE_AND: {
+ for (yy = y0; yy < y1; ++yy) {
+ destPtr = pLineDst;
+ srcPtr = pLineSrc + (-x >> 3);
+ src1 = *srcPtr++;
+ xx = x0;
+ for (; xx < x1 - 8; xx += 8) {
+ dest = *destPtr;
+ src0 = src1;
+ src1 = *srcPtr++;
+ src = (((src0 << 8) | src1) >> s1) & 0xff;
+ dest &= src;
+ *destPtr++ = (uint8_t)dest;
+ }
+ dest = *destPtr;
+ src0 = src1;
+ if (srcPtr - pLineSrc < m_nStride) {
+ src1 = *srcPtr++;
+ } else {
+ src1 = 0;
+ }
+ src = (((src0 << 8) | src1) >> s1) & 0xff;
+ dest &= src | m1;
+ *destPtr = (uint8_t)dest;
+ pLineDst += pDst->m_nStride;
+ pLineSrc += m_nStride;
+ }
+ } break;
+ case JBIG2_COMPOSE_XOR: {
+ for (yy = y0; yy < y1; ++yy) {
+ destPtr = pLineDst;
+ srcPtr = pLineSrc + (-x >> 3);
+ src1 = *srcPtr++;
+ xx = x0;
+ for (; xx < x1 - 8; xx += 8) {
+ dest = *destPtr;
+ src0 = src1;
+ src1 = *srcPtr++;
+ src = (((src0 << 8) | src1) >> s1) & 0xff;
+ dest ^= src;
+ *destPtr++ = (uint8_t)dest;
+ }
+ dest = *destPtr;
+ src0 = src1;
+ if (srcPtr - pLineSrc < m_nStride) {
+ src1 = *srcPtr++;
+ } else {
+ src1 = 0;
+ }
+ src = (((src0 << 8) | src1) >> s1) & 0xff;
+ dest ^= src & m2;
+ *destPtr = (uint8_t)dest;
+ pLineDst += pDst->m_nStride;
+ pLineSrc += m_nStride;
+ }
+ } break;
+ case JBIG2_COMPOSE_XNOR: {
+ for (yy = y0; yy < y1; ++yy) {
+ destPtr = pLineDst;
+ srcPtr = pLineSrc + (-x >> 3);
+ src1 = *srcPtr++;
+ xx = x0;
+ for (; xx < x1 - 8; xx += 8) {
+ dest = *destPtr;
+ src0 = src1;
+ src1 = *srcPtr++;
+ src = (((src0 << 8) | src1) >> s1) & 0xff;
+ dest ^= src ^ 0xff;
+ *destPtr++ = (uint8_t)dest;
+ }
+ dest = *destPtr;
+ src0 = src1;
+ if (srcPtr - pLineSrc < m_nStride) {
+ src1 = *srcPtr++;
+ } else {
+ src1 = 0;
+ }
+ src = (((src0 << 8) | src1) >> s1) & 0xff;
+ dest ^= (src ^ 0xff) & m2;
+ *destPtr = (uint8_t)dest;
+ pLineDst += pDst->m_nStride;
+ pLineSrc += m_nStride;
+ }
+ } break;
+ case JBIG2_COMPOSE_REPLACE: {
+ for (yy = y0; yy < y1; ++yy) {
+ destPtr = pLineDst;
+ srcPtr = pLineSrc + (-x >> 3);
+ src1 = *srcPtr++;
+ xx = x0;
+ for (; xx < x1 - 8; xx += 8) {
+ dest = *destPtr;
+ src0 = src1;
+ src1 = *srcPtr++;
+ src = (((src0 << 8) | src1) >> s1) & 0xff;
+ dest = src;
+ *destPtr++ = (uint8_t)dest;
+ }
+ dest = *destPtr;
+ src0 = src1;
+ if (srcPtr - pLineSrc < m_nStride) {
+ src1 = *srcPtr++;
+ } else {
+ src1 = 0;
+ }
+ src = (((src0 << 8) | src1) >> s1) & 0xff;
+ dest = (src & m2) | (dest & m1);
+ *destPtr = (uint8_t)dest;
+ pLineDst += pDst->m_nStride;
+ pLineSrc += m_nStride;
+ }
+ } break;
+ }
}
- return TRUE;
+ }
+ return TRUE;
}
-FX_BOOL CJBig2_Image::composeFrom(int32_t x, int32_t y, CJBig2_Image *pSrc, JBig2ComposeOp op)
-{
- if (!m_pData) {
- return FALSE;
- }
- return pSrc->composeTo(this, x, y, op);
+FX_BOOL CJBig2_Image::composeFrom(int32_t x,
+ int32_t y,
+ CJBig2_Image* pSrc,
+ JBig2ComposeOp op) {
+ if (!m_pData) {
+ return FALSE;
+ }
+ return pSrc->composeTo(this, x, y, op);
}
-FX_BOOL CJBig2_Image::composeFrom(int32_t x, int32_t y, CJBig2_Image *pSrc, JBig2ComposeOp op, const FX_RECT* pSrcRect)
-{
- if (!m_pData) {
- return FALSE;
- }
- return pSrc->composeTo(this, x, y, op, pSrcRect);
+FX_BOOL CJBig2_Image::composeFrom(int32_t x,
+ int32_t y,
+ CJBig2_Image* pSrc,
+ JBig2ComposeOp op,
+ const FX_RECT* pSrcRect) {
+ if (!m_pData) {
+ return FALSE;
+ }
+ return pSrc->composeTo(this, x, y, op, pSrcRect);
}
-CJBig2_Image *CJBig2_Image::subImage_unopt(int32_t x, int32_t y, int32_t w, int32_t h)
-{
- CJBig2_Image *pImage;
- int32_t i, j;
- JBIG2_ALLOC(pImage, CJBig2_Image(w, h));
- for(j = 0; j < h; j++) {
- for(i = 0; i < w; i++) {
- pImage->setPixel(i, j, getPixel(x + i, y + j));
- }
+CJBig2_Image* CJBig2_Image::subImage_unopt(int32_t x,
+ int32_t y,
+ int32_t w,
+ int32_t h) {
+ CJBig2_Image* pImage;
+ int32_t i, j;
+ JBIG2_ALLOC(pImage, CJBig2_Image(w, h));
+ for (j = 0; j < h; j++) {
+ for (i = 0; i < w; i++) {
+ pImage->setPixel(i, j, getPixel(x + i, y + j));
}
- return pImage;
+ }
+ return pImage;
}
-#define JBIG2_GETDWORD(buf) ((FX_DWORD)(((buf)[0] << 24) | ((buf)[1] << 16) | ((buf)[2] << 8) | (buf)[3]))
-CJBig2_Image *CJBig2_Image::subImage(int32_t x, int32_t y, int32_t w, int32_t h)
-{
- CJBig2_Image *pImage;
- int32_t m, n, j;
- uint8_t *pLineSrc, *pLineDst;
- FX_DWORD wTmp;
- uint8_t *pSrc, *pSrcEnd, *pDst, *pDstEnd;
- if (w == 0 || h == 0) {
- return NULL;
- }
- JBIG2_ALLOC(pImage, CJBig2_Image(w, h));
- if (!m_pData) {
- pImage->fill(0);
- return pImage;
- }
- if (!pImage->m_pData) {
- return pImage;
+#define JBIG2_GETDWORD(buf) \
+ ((FX_DWORD)(((buf)[0] << 24) | ((buf)[1] << 16) | ((buf)[2] << 8) | (buf)[3]))
+CJBig2_Image* CJBig2_Image::subImage(int32_t x,
+ int32_t y,
+ int32_t w,
+ int32_t h) {
+ CJBig2_Image* pImage;
+ int32_t m, n, j;
+ uint8_t *pLineSrc, *pLineDst;
+ FX_DWORD wTmp;
+ uint8_t *pSrc, *pSrcEnd, *pDst, *pDstEnd;
+ if (w == 0 || h == 0) {
+ return NULL;
+ }
+ JBIG2_ALLOC(pImage, CJBig2_Image(w, h));
+ if (!m_pData) {
+ pImage->fill(0);
+ return pImage;
+ }
+ if (!pImage->m_pData) {
+ return pImage;
+ }
+ pLineSrc = m_pData + m_nStride * y;
+ pLineDst = pImage->m_pData;
+ m = (x >> 5) << 2;
+ n = x & 31;
+ if (n == 0) {
+ for (j = 0; j < h; j++) {
+ pSrc = pLineSrc + m;
+ pSrcEnd = pLineSrc + m_nStride;
+ pDst = pLineDst;
+ pDstEnd = pLineDst + pImage->m_nStride;
+ for (; pDst < pDstEnd; pSrc += 4, pDst += 4) {
+ *((FX_DWORD*)pDst) = *((FX_DWORD*)pSrc);
+ }
+ pLineSrc += m_nStride;
+ pLineDst += pImage->m_nStride;
}
- pLineSrc = m_pData + m_nStride * y;
- pLineDst = pImage->m_pData;
- m = (x >> 5) << 2;
- n = x & 31;
- if(n == 0) {
- for(j = 0; j < h; j++) {
- pSrc = pLineSrc + m;
- pSrcEnd = pLineSrc + m_nStride;
- pDst = pLineDst;
- pDstEnd = pLineDst + pImage->m_nStride;
- for(; pDst < pDstEnd; pSrc += 4, pDst += 4) {
- *((FX_DWORD *)pDst) = *((FX_DWORD *)pSrc);
- }
- pLineSrc += m_nStride;
- pLineDst += pImage->m_nStride;
- }
- } else {
- for(j = 0; j < h; j++) {
- pSrc = pLineSrc + m;
- pSrcEnd = pLineSrc + m_nStride;
- pDst = pLineDst;
- pDstEnd = pLineDst + pImage->m_nStride;
- for(; pDst < pDstEnd; pSrc += 4, pDst += 4) {
- if(pSrc + 4 < pSrcEnd) {
- wTmp = (JBIG2_GETDWORD(pSrc) << n) | (JBIG2_GETDWORD(pSrc + 4) >> (32 - n));
- } else {
- wTmp = JBIG2_GETDWORD(pSrc) << n;
- }
- pDst[0] = (uint8_t)(wTmp >> 24);
- pDst[1] = (uint8_t)(wTmp >> 16);
- pDst[2] = (uint8_t)(wTmp >> 8);
- pDst[3] = (uint8_t)wTmp;
- }
- pLineSrc += m_nStride;
- pLineDst += pImage->m_nStride;
+ } else {
+ for (j = 0; j < h; j++) {
+ pSrc = pLineSrc + m;
+ pSrcEnd = pLineSrc + m_nStride;
+ pDst = pLineDst;
+ pDstEnd = pLineDst + pImage->m_nStride;
+ for (; pDst < pDstEnd; pSrc += 4, pDst += 4) {
+ if (pSrc + 4 < pSrcEnd) {
+ wTmp = (JBIG2_GETDWORD(pSrc) << n) |
+ (JBIG2_GETDWORD(pSrc + 4) >> (32 - n));
+ } else {
+ wTmp = JBIG2_GETDWORD(pSrc) << n;
}
+ pDst[0] = (uint8_t)(wTmp >> 24);
+ pDst[1] = (uint8_t)(wTmp >> 16);
+ pDst[2] = (uint8_t)(wTmp >> 8);
+ pDst[3] = (uint8_t)wTmp;
+ }
+ pLineSrc += m_nStride;
+ pLineDst += pImage->m_nStride;
}
- return pImage;
+ }
+ return pImage;
}
-void CJBig2_Image::expand(int32_t h, FX_BOOL v)
-{
- if (!m_pData || h <= m_nHeight) {
- return;
- }
- FX_DWORD dwH = pdfium::base::checked_cast<FX_DWORD>(h);
- FX_DWORD dwStride = pdfium::base::checked_cast<FX_DWORD>(m_nStride);
- FX_DWORD dwHeight = pdfium::base::checked_cast<FX_DWORD>(m_nHeight);
- FX_SAFE_DWORD safeMemSize = dwH;
- safeMemSize *= dwStride;
- if (!safeMemSize.IsValid()) {
- return;
- }
- //The guaranteed reallocated memory is to be < 4GB (unsigned int).
- m_pData = (uint8_t*)m_pModule->JBig2_Realloc(m_pData, safeMemSize.ValueOrDie());
- //The result of dwHeight * dwStride doesn't overflow after the
- //checking of safeMemSize.
- //The same as the result of (dwH - dwHeight) * dwStride) because
- //dwH - dwHeight is always less than dwH(h) which is checked in
- //the calculation of dwH * dwStride.
- JBIG2_memset(m_pData + dwHeight * dwStride, v ? 0xff : 0, (dwH - dwHeight) * dwStride);
- m_nHeight = h;
+void CJBig2_Image::expand(int32_t h, FX_BOOL v) {
+ if (!m_pData || h <= m_nHeight) {
+ return;
+ }
+ FX_DWORD dwH = pdfium::base::checked_cast<FX_DWORD>(h);
+ FX_DWORD dwStride = pdfium::base::checked_cast<FX_DWORD>(m_nStride);
+ FX_DWORD dwHeight = pdfium::base::checked_cast<FX_DWORD>(m_nHeight);
+ FX_SAFE_DWORD safeMemSize = dwH;
+ safeMemSize *= dwStride;
+ if (!safeMemSize.IsValid()) {
+ return;
+ }
+ // The guaranteed reallocated memory is to be < 4GB (unsigned int).
+ m_pData =
+ (uint8_t*)m_pModule->JBig2_Realloc(m_pData, safeMemSize.ValueOrDie());
+ // The result of dwHeight * dwStride doesn't overflow after the
+ // checking of safeMemSize.
+ // The same as the result of (dwH - dwHeight) * dwStride) because
+ // dwH - dwHeight is always less than dwH(h) which is checked in
+ // the calculation of dwH * dwStride.
+ JBIG2_memset(m_pData + dwHeight * dwStride, v ? 0xff : 0,
+ (dwH - dwHeight) * dwStride);
+ m_nHeight = h;
}
-FX_BOOL CJBig2_Image::composeTo_opt2(CJBig2_Image *pDst, int32_t x, int32_t y, JBig2ComposeOp op)
-{
- int32_t xs0 = 0, ys0 = 0, xs1 = 0, ys1 = 0, xd0 = 0, yd0 = 0, xd1 = 0,
- yd1 = 0, xx = 0, yy = 0, w = 0, h = 0, middleDwords = 0, lineLeft = 0;
+FX_BOOL CJBig2_Image::composeTo_opt2(CJBig2_Image* pDst,
+ int32_t x,
+ int32_t y,
+ JBig2ComposeOp op) {
+ int32_t xs0 = 0, ys0 = 0, xs1 = 0, ys1 = 0, xd0 = 0, yd0 = 0, xd1 = 0,
+ yd1 = 0, xx = 0, yy = 0, w = 0, h = 0, middleDwords = 0, lineLeft = 0;
- FX_DWORD s1 = 0, d1 = 0, d2 = 0, shift = 0, shift1 = 0, shift2 = 0,
- tmp = 0, tmp1 = 0, tmp2 = 0, maskL = 0, maskR = 0, maskM = 0;
+ FX_DWORD s1 = 0, d1 = 0, d2 = 0, shift = 0, shift1 = 0, shift2 = 0, tmp = 0,
+ tmp1 = 0, tmp2 = 0, maskL = 0, maskR = 0, maskM = 0;
- uint8_t *lineSrc = NULL, *lineDst = NULL, *sp = NULL, *dp = NULL;
+ uint8_t *lineSrc = NULL, *lineDst = NULL, *sp = NULL, *dp = NULL;
- if (!m_pData) {
- return FALSE;
- }
- if (x < -1048576 || x > 1048576 || y < -1048576 || y > 1048576) {
- return FALSE;
- }
- if(y < 0) {
- ys0 = -y;
- }
- if(y + m_nHeight > pDst->m_nHeight) {
- ys1 = pDst->m_nHeight - y;
- } else {
- ys1 = m_nHeight;
- }
- if(x < 0) {
- xs0 = -x;
- }
- if(x + m_nWidth > pDst->m_nWidth) {
- xs1 = pDst->m_nWidth - x;
+ if (!m_pData) {
+ return FALSE;
+ }
+ if (x < -1048576 || x > 1048576 || y < -1048576 || y > 1048576) {
+ return FALSE;
+ }
+ if (y < 0) {
+ ys0 = -y;
+ }
+ if (y + m_nHeight > pDst->m_nHeight) {
+ ys1 = pDst->m_nHeight - y;
+ } else {
+ ys1 = m_nHeight;
+ }
+ if (x < 0) {
+ xs0 = -x;
+ }
+ if (x + m_nWidth > pDst->m_nWidth) {
+ xs1 = pDst->m_nWidth - x;
+ } else {
+ xs1 = m_nWidth;
+ }
+ if ((ys0 >= ys1) || (xs0 >= xs1)) {
+ return 0;
+ }
+ w = xs1 - xs0;
+ h = ys1 - ys0;
+ if (y >= 0) {
+ yd0 = y;
+ }
+ if (x >= 0) {
+ xd0 = x;
+ }
+ xd1 = xd0 + w;
+ yd1 = yd0 + h;
+ d1 = xd0 & 31;
+ d2 = xd1 & 31;
+ s1 = xs0 & 31;
+ maskL = 0xffffffff >> d1;
+ maskR = 0xffffffff << ((32 - (xd1 & 31)) % 32);
+ maskM = maskL & maskR;
+ lineSrc = m_pData + ys0 * m_nStride + ((xs0 >> 5) << 2);
+ lineLeft = m_nStride - ((xs0 >> 5) << 2);
+ lineDst = pDst->m_pData + yd0 * pDst->m_nStride + ((xd0 >> 5) << 2);
+ if ((xd0 & ~31) == ((xd1 - 1) & ~31)) {
+ if ((xs0 & ~31) == ((xs1 - 1) & ~31)) {
+ if (s1 > d1) {
+ shift = s1 - d1;
+ for (yy = yd0; yy < yd1; yy++) {
+ tmp1 = JBIG2_GETDWORD(lineSrc) << shift;
+ tmp2 = JBIG2_GETDWORD(lineDst);
+ switch (op) {
+ case JBIG2_COMPOSE_OR:
+ tmp = (tmp2 & ~maskM) | ((tmp1 | tmp2) & maskM);
+ break;
+ case JBIG2_COMPOSE_AND:
+ tmp = (tmp2 & ~maskM) | ((tmp1 & tmp2) & maskM);
+ break;
+ case JBIG2_COMPOSE_XOR:
+ tmp = (tmp2 & ~maskM) | ((tmp1 ^ tmp2) & maskM);
+ break;
+ case JBIG2_COMPOSE_XNOR:
+ tmp = (tmp2 & ~maskM) | ((~(tmp1 ^ tmp2)) & maskM);
+ break;
+ case JBIG2_COMPOSE_REPLACE:
+ tmp = (tmp2 & ~maskM) | (tmp1 & maskM);
+ break;
+ }
+ lineDst[0] = (uint8_t)(tmp >> 24);
+ lineDst[1] = (uint8_t)(tmp >> 16);
+ lineDst[2] = (uint8_t)(tmp >> 8);
+ lineDst[3] = (uint8_t)tmp;
+ lineSrc += m_nStride;
+ lineDst += pDst->m_nStride;
+ }
+ } else {
+ shift = d1 - s1;
+ for (yy = yd0; yy < yd1; yy++) {
+ tmp1 = JBIG2_GETDWORD(lineSrc) >> shift;
+ tmp2 = JBIG2_GETDWORD(lineDst);
+ switch (op) {
+ case JBIG2_COMPOSE_OR:
+ tmp = (tmp2 & ~maskM) | ((tmp1 | tmp2) & maskM);
+ break;
+ case JBIG2_COMPOSE_AND:
+ tmp = (tmp2 & ~maskM) | ((tmp1 & tmp2) & maskM);
+ break;
+ case JBIG2_COMPOSE_XOR:
+ tmp = (tmp2 & ~maskM) | ((tmp1 ^ tmp2) & maskM);
+ break;
+ case JBIG2_COMPOSE_XNOR:
+ tmp = (tmp2 & ~maskM) | ((~(tmp1 ^ tmp2)) & maskM);
+ break;
+ case JBIG2_COMPOSE_REPLACE:
+ tmp = (tmp2 & ~maskM) | (tmp1 & maskM);
+ break;
+ }
+ lineDst[0] = (uint8_t)(tmp >> 24);
+ lineDst[1] = (uint8_t)(tmp >> 16);
+ lineDst[2] = (uint8_t)(tmp >> 8);
+ lineDst[3] = (uint8_t)tmp;
+ lineSrc += m_nStride;
+ lineDst += pDst->m_nStride;
+ }
+ }
} else {
- xs1 = m_nWidth;
- }
- if((ys0 >= ys1) || (xs0 >= xs1)) {
- return 0;
- }
- w = xs1 - xs0;
- h = ys1 - ys0;
- if(y >= 0) {
- yd0 = y;
- }
- if(x >= 0) {
- xd0 = x;
+ shift1 = s1 - d1;
+ shift2 = 32 - shift1;
+ for (yy = yd0; yy < yd1; yy++) {
+ tmp1 = (JBIG2_GETDWORD(lineSrc) << shift1) |
+ (JBIG2_GETDWORD(lineSrc + 4) >> shift2);
+ tmp2 = JBIG2_GETDWORD(lineDst);
+ switch (op) {
+ case JBIG2_COMPOSE_OR:
+ tmp = (tmp2 & ~maskM) | ((tmp1 | tmp2) & maskM);
+ break;
+ case JBIG2_COMPOSE_AND:
+ tmp = (tmp2 & ~maskM) | ((tmp1 & tmp2) & maskM);
+ break;
+ case JBIG2_COMPOSE_XOR:
+ tmp = (tmp2 & ~maskM) | ((tmp1 ^ tmp2) & maskM);
+ break;
+ case JBIG2_COMPOSE_XNOR:
+ tmp = (tmp2 & ~maskM) | ((~(tmp1 ^ tmp2)) & maskM);
+ break;
+ case JBIG2_COMPOSE_REPLACE:
+ tmp = (tmp2 & ~maskM) | (tmp1 & maskM);
+ break;
+ }
+ lineDst[0] = (uint8_t)(tmp >> 24);
+ lineDst[1] = (uint8_t)(tmp >> 16);
+ lineDst[2] = (uint8_t)(tmp >> 8);
+ lineDst[3] = (uint8_t)tmp;
+ lineSrc += m_nStride;
+ lineDst += pDst->m_nStride;
+ }
}
- xd1 = xd0 + w;
- yd1 = yd0 + h;
- d1 = xd0 & 31;
- d2 = xd1 & 31;
- s1 = xs0 & 31;
- maskL = 0xffffffff >> d1;
- maskR = 0xffffffff << ((32 - (xd1 & 31)) % 32);
- maskM = maskL & maskR;
- lineSrc = m_pData + ys0 * m_nStride + ((xs0 >> 5) << 2);
- lineLeft = m_nStride - ((xs0 >> 5) << 2);
- lineDst = pDst->m_pData + yd0 * pDst->m_nStride + ((xd0 >> 5) << 2);
- if((xd0 & ~31) == ((xd1 - 1) & ~31)) {
- if((xs0 & ~31) == ((xs1 - 1) & ~31)) {
- if(s1 > d1) {
- shift = s1 - d1;
- for(yy = yd0; yy < yd1; yy++) {
- tmp1 = JBIG2_GETDWORD(lineSrc) << shift;
- tmp2 = JBIG2_GETDWORD(lineDst);
- switch(op) {
- case JBIG2_COMPOSE_OR:
- tmp = (tmp2 & ~maskM) | ((tmp1 | tmp2) & maskM);
- break;
- case JBIG2_COMPOSE_AND:
- tmp = (tmp2 & ~maskM) | ((tmp1 & tmp2) & maskM);
- break;
- case JBIG2_COMPOSE_XOR:
- tmp = (tmp2 & ~maskM) | ((tmp1 ^ tmp2) & maskM);
- break;
- case JBIG2_COMPOSE_XNOR:
- tmp = (tmp2 & ~maskM) | ((~(tmp1 ^ tmp2)) & maskM);
- break;
- case JBIG2_COMPOSE_REPLACE:
- tmp = (tmp2 & ~maskM) | (tmp1 & maskM);
- break;
- }
- lineDst[0] = (uint8_t)(tmp >> 24);
- lineDst[1] = (uint8_t)(tmp >> 16);
- lineDst[2] = (uint8_t)(tmp >> 8);
- lineDst[3] = (uint8_t)tmp;
- lineSrc += m_nStride;
- lineDst += pDst->m_nStride;
- }
- } else {
- shift = d1 - s1;
- for(yy = yd0; yy < yd1; yy++) {
- tmp1 = JBIG2_GETDWORD(lineSrc) >> shift;
- tmp2 = JBIG2_GETDWORD(lineDst);
- switch(op) {
- case JBIG2_COMPOSE_OR:
- tmp = (tmp2 & ~maskM) | ((tmp1 | tmp2) & maskM);
- break;
- case JBIG2_COMPOSE_AND:
- tmp = (tmp2 & ~maskM) | ((tmp1 & tmp2) & maskM);
- break;
- case JBIG2_COMPOSE_XOR:
- tmp = (tmp2 & ~maskM) | ((tmp1 ^ tmp2) & maskM);
- break;
- case JBIG2_COMPOSE_XNOR:
- tmp = (tmp2 & ~maskM) | ((~(tmp1 ^ tmp2)) & maskM);
- break;
- case JBIG2_COMPOSE_REPLACE:
- tmp = (tmp2 & ~maskM) | (tmp1 & maskM);
- break;
- }
- lineDst[0] = (uint8_t)(tmp >> 24);
- lineDst[1] = (uint8_t)(tmp >> 16);
- lineDst[2] = (uint8_t)(tmp >> 8);
- lineDst[3] = (uint8_t)tmp;
- lineSrc += m_nStride;
- lineDst += pDst->m_nStride;
- }
- }
- } else {
- shift1 = s1 - d1;
- shift2 = 32 - shift1;
- for(yy = yd0; yy < yd1; yy++) {
- tmp1 = (JBIG2_GETDWORD(lineSrc) << shift1) | (JBIG2_GETDWORD(lineSrc + 4) >> shift2);
- tmp2 = JBIG2_GETDWORD(lineDst);
- switch(op) {
- case JBIG2_COMPOSE_OR:
- tmp = (tmp2 & ~maskM) | ((tmp1 | tmp2) & maskM);
- break;
- case JBIG2_COMPOSE_AND:
- tmp = (tmp2 & ~maskM) | ((tmp1 & tmp2) & maskM);
- break;
- case JBIG2_COMPOSE_XOR:
- tmp = (tmp2 & ~maskM) | ((tmp1 ^ tmp2) & maskM);
- break;
- case JBIG2_COMPOSE_XNOR:
- tmp = (tmp2 & ~maskM) | ((~(tmp1 ^ tmp2)) & maskM);
- break;
- case JBIG2_COMPOSE_REPLACE:
- tmp = (tmp2 & ~maskM) | (tmp1 & maskM);
- break;
- }
- lineDst[0] = (uint8_t)(tmp >> 24);
- lineDst[1] = (uint8_t)(tmp >> 16);
- lineDst[2] = (uint8_t)(tmp >> 8);
- lineDst[3] = (uint8_t)tmp;
- lineSrc += m_nStride;
- lineDst += pDst->m_nStride;
- }
+ } else {
+ if (s1 > d1) {
+ shift1 = s1 - d1;
+ shift2 = 32 - shift1;
+ middleDwords = (xd1 >> 5) - ((xd0 + 31) >> 5);
+ for (yy = yd0; yy < yd1; yy++) {
+ sp = lineSrc;
+ dp = lineDst;
+ if (d1 != 0) {
+ tmp1 = (JBIG2_GETDWORD(sp) << shift1) |
+ (JBIG2_GETDWORD(sp + 4) >> shift2);
+ tmp2 = JBIG2_GETDWORD(dp);
+ switch (op) {
+ case JBIG2_COMPOSE_OR:
+ tmp = (tmp2 & ~maskL) | ((tmp1 | tmp2) & maskL);
+ break;
+ case JBIG2_COMPOSE_AND:
+ tmp = (tmp2 & ~maskL) | ((tmp1 & tmp2) & maskL);
+ break;
+ case JBIG2_COMPOSE_XOR:
+ tmp = (tmp2 & ~maskL) | ((tmp1 ^ tmp2) & maskL);
+ break;
+ case JBIG2_COMPOSE_XNOR:
+ tmp = (tmp2 & ~maskL) | ((~(tmp1 ^ tmp2)) & maskL);
+ break;
+ case JBIG2_COMPOSE_REPLACE:
+ tmp = (tmp2 & ~maskL) | (tmp1 & maskL);
+ break;
+ }
+ dp[0] = (uint8_t)(tmp >> 24);
+ dp[1] = (uint8_t)(tmp >> 16);
+ dp[2] = (uint8_t)(tmp >> 8);
+ dp[3] = (uint8_t)tmp;
+ sp += 4;
+ dp += 4;
+ }
+ for (xx = 0; xx < middleDwords; xx++) {
+ tmp1 = (JBIG2_GETDWORD(sp) << shift1) |
+ (JBIG2_GETDWORD(sp + 4) >> shift2);
+ tmp2 = JBIG2_GETDWORD(dp);
+ switch (op) {
+ case JBIG2_COMPOSE_OR:
+ tmp = tmp1 | tmp2;
+ break;
+ case JBIG2_COMPOSE_AND:
+ tmp = tmp1 & tmp2;
+ break;
+ case JBIG2_COMPOSE_XOR:
+ tmp = tmp1 ^ tmp2;
+ break;
+ case JBIG2_COMPOSE_XNOR:
+ tmp = ~(tmp1 ^ tmp2);
+ break;
+ case JBIG2_COMPOSE_REPLACE:
+ tmp = tmp1;
+ break;
+ }
+ dp[0] = (uint8_t)(tmp >> 24);
+ dp[1] = (uint8_t)(tmp >> 16);
+ dp[2] = (uint8_t)(tmp >> 8);
+ dp[3] = (uint8_t)tmp;
+ sp += 4;
+ dp += 4;
}
+ if (d2 != 0) {
+ tmp1 =
+ (JBIG2_GETDWORD(sp) << shift1) |
+ (((sp + 4) < lineSrc + lineLeft ? JBIG2_GETDWORD(sp + 4) : 0) >>
+ shift2);
+ tmp2 = JBIG2_GETDWORD(dp);
+ switch (op) {
+ case JBIG2_COMPOSE_OR:
+ tmp = (tmp2 & ~maskR) | ((tmp1 | tmp2) & maskR);
+ break;
+ case JBIG2_COMPOSE_AND:
+ tmp = (tmp2 & ~maskR) | ((tmp1 & tmp2) & maskR);
+ break;
+ case JBIG2_COMPOSE_XOR:
+ tmp = (tmp2 & ~maskR) | ((tmp1 ^ tmp2) & maskR);
+ break;
+ case JBIG2_COMPOSE_XNOR:
+ tmp = (tmp2 & ~maskR) | ((~(tmp1 ^ tmp2)) & maskR);
+ break;
+ case JBIG2_COMPOSE_REPLACE:
+ tmp = (tmp2 & ~maskR) | (tmp1 & maskR);
+ break;
+ }
+ dp[0] = (uint8_t)(tmp >> 24);
+ dp[1] = (uint8_t)(tmp >> 16);
+ dp[2] = (uint8_t)(tmp >> 8);
+ dp[3] = (uint8_t)tmp;
+ }
+ lineSrc += m_nStride;
+ lineDst += pDst->m_nStride;
+ }
+ } else if (s1 == d1) {
+ middleDwords = (xd1 >> 5) - ((xd0 + 31) >> 5);
+ for (yy = yd0; yy < yd1; yy++) {
+ sp = lineSrc;
+ dp = lineDst;
+ if (d1 != 0) {
+ tmp1 = JBIG2_GETDWORD(sp);
+ tmp2 = JBIG2_GETDWORD(dp);
+ switch (op) {
+ case JBIG2_COMPOSE_OR:
+ tmp = (tmp2 & ~maskL) | ((tmp1 | tmp2) & maskL);
+ break;
+ case JBIG2_COMPOSE_AND:
+ tmp = (tmp2 & ~maskL) | ((tmp1 & tmp2) & maskL);
+ break;
+ case JBIG2_COMPOSE_XOR:
+ tmp = (tmp2 & ~maskL) | ((tmp1 ^ tmp2) & maskL);
+ break;
+ case JBIG2_COMPOSE_XNOR:
+ tmp = (tmp2 & ~maskL) | ((~(tmp1 ^ tmp2)) & maskL);
+ break;
+ case JBIG2_COMPOSE_REPLACE:
+ tmp = (tmp2 & ~maskL) | (tmp1 & maskL);
+ break;
+ }
+ dp[0] = (uint8_t)(tmp >> 24);
+ dp[1] = (uint8_t)(tmp >> 16);
+ dp[2] = (uint8_t)(tmp >> 8);
+ dp[3] = (uint8_t)tmp;
+ sp += 4;
+ dp += 4;
+ }
+ for (xx = 0; xx < middleDwords; xx++) {
+ tmp1 = JBIG2_GETDWORD(sp);
+ tmp2 = JBIG2_GETDWORD(dp);
+ switch (op) {
+ case JBIG2_COMPOSE_OR:
+ tmp = tmp1 | tmp2;
+ break;
+ case JBIG2_COMPOSE_AND:
+ tmp = tmp1 & tmp2;
+ break;
+ case JBIG2_COMPOSE_XOR:
+ tmp = tmp1 ^ tmp2;
+ break;
+ case JBIG2_COMPOSE_XNOR:
+ tmp = ~(tmp1 ^ tmp2);
+ break;
+ case JBIG2_COMPOSE_REPLACE:
+ tmp = tmp1;
+ break;
+ }
+ dp[0] = (uint8_t)(tmp >> 24);
+ dp[1] = (uint8_t)(tmp >> 16);
+ dp[2] = (uint8_t)(tmp >> 8);
+ dp[3] = (uint8_t)tmp;
+ sp += 4;
+ dp += 4;
+ }
+ if (d2 != 0) {
+ tmp1 = JBIG2_GETDWORD(sp);
+ tmp2 = JBIG2_GETDWORD(dp);
+ switch (op) {
+ case JBIG2_COMPOSE_OR:
+ tmp = (tmp2 & ~maskR) | ((tmp1 | tmp2) & maskR);
+ break;
+ case JBIG2_COMPOSE_AND:
+ tmp = (tmp2 & ~maskR) | ((tmp1 & tmp2) & maskR);
+ break;
+ case JBIG2_COMPOSE_XOR:
+ tmp = (tmp2 & ~maskR) | ((tmp1 ^ tmp2) & maskR);
+ break;
+ case JBIG2_COMPOSE_XNOR:
+ tmp = (tmp2 & ~maskR) | ((~(tmp1 ^ tmp2)) & maskR);
+ break;
+ case JBIG2_COMPOSE_REPLACE:
+ tmp = (tmp2 & ~maskR) | (tmp1 & maskR);
+ break;
+ }
+ dp[0] = (uint8_t)(tmp >> 24);
+ dp[1] = (uint8_t)(tmp >> 16);
+ dp[2] = (uint8_t)(tmp >> 8);
+ dp[3] = (uint8_t)tmp;
+ }
+ lineSrc += m_nStride;
+ lineDst += pDst->m_nStride;
+ }
} else {
- if(s1 > d1) {
- shift1 = s1 - d1;
- shift2 = 32 - shift1;
- middleDwords = (xd1 >> 5) - ((xd0 + 31) >> 5);
- for(yy = yd0; yy < yd1; yy++) {
- sp = lineSrc;
- dp = lineDst;
- if(d1 != 0) {
- tmp1 = (JBIG2_GETDWORD(sp) << shift1) | (JBIG2_GETDWORD(sp + 4) >> shift2);
- tmp2 = JBIG2_GETDWORD(dp);
- switch(op) {
- case JBIG2_COMPOSE_OR:
- tmp = (tmp2 & ~maskL) | ((tmp1 | tmp2) & maskL);
- break;
- case JBIG2_COMPOSE_AND:
- tmp = (tmp2 & ~maskL) | ((tmp1 & tmp2) & maskL);
- break;
- case JBIG2_COMPOSE_XOR:
- tmp = (tmp2 & ~maskL) | ((tmp1 ^ tmp2) & maskL);
- break;
- case JBIG2_COMPOSE_XNOR:
- tmp = (tmp2 & ~maskL) | ((~(tmp1 ^ tmp2)) & maskL);
- break;
- case JBIG2_COMPOSE_REPLACE:
- tmp = (tmp2 & ~maskL) | (tmp1 & maskL);
- break;
- }
- dp[0] = (uint8_t)(tmp >> 24);
- dp[1] = (uint8_t)(tmp >> 16);
- dp[2] = (uint8_t)(tmp >> 8);
- dp[3] = (uint8_t)tmp;
- sp += 4;
- dp += 4;
- }
- for(xx = 0; xx < middleDwords; xx++) {
- tmp1 = (JBIG2_GETDWORD(sp) << shift1) | (JBIG2_GETDWORD(sp + 4) >> shift2);
- tmp2 = JBIG2_GETDWORD(dp);
- switch(op) {
- case JBIG2_COMPOSE_OR:
- tmp = tmp1 | tmp2;
- break;
- case JBIG2_COMPOSE_AND:
- tmp = tmp1 & tmp2;
- break;
- case JBIG2_COMPOSE_XOR:
- tmp = tmp1 ^ tmp2;
- break;
- case JBIG2_COMPOSE_XNOR:
- tmp = ~(tmp1 ^ tmp2);
- break;
- case JBIG2_COMPOSE_REPLACE:
- tmp = tmp1;
- break;
- }
- dp[0] = (uint8_t)(tmp >> 24);
- dp[1] = (uint8_t)(tmp >> 16);
- dp[2] = (uint8_t)(tmp >> 8);
- dp[3] = (uint8_t)tmp;
- sp += 4;
- dp += 4;
- }
- if(d2 != 0) {
- tmp1 = (JBIG2_GETDWORD(sp) << shift1) | (
- ((sp + 4) < lineSrc + lineLeft ? JBIG2_GETDWORD(sp + 4) : 0) >> shift2);
- tmp2 = JBIG2_GETDWORD(dp);
- switch(op) {
- case JBIG2_COMPOSE_OR:
- tmp = (tmp2 & ~maskR) | ((tmp1 | tmp2) & maskR);
- break;
- case JBIG2_COMPOSE_AND:
- tmp = (tmp2 & ~maskR) | ((tmp1 & tmp2) & maskR);
- break;
- case JBIG2_COMPOSE_XOR:
- tmp = (tmp2 & ~maskR) | ((tmp1 ^ tmp2) & maskR);
- break;
- case JBIG2_COMPOSE_XNOR:
- tmp = (tmp2 & ~maskR) | ((~(tmp1 ^ tmp2)) & maskR);
- break;
- case JBIG2_COMPOSE_REPLACE:
- tmp = (tmp2 & ~maskR) | (tmp1 & maskR);
- break;
- }
- dp[0] = (uint8_t)(tmp >> 24);
- dp[1] = (uint8_t)(tmp >> 16);
- dp[2] = (uint8_t)(tmp >> 8);
- dp[3] = (uint8_t)tmp;
- }
- lineSrc += m_nStride;
- lineDst += pDst->m_nStride;
- }
- } else if(s1 == d1) {
- middleDwords = (xd1 >> 5) - ((xd0 + 31) >> 5);
- for(yy = yd0; yy < yd1; yy++) {
- sp = lineSrc;
- dp = lineDst;
- if(d1 != 0) {
- tmp1 = JBIG2_GETDWORD(sp);
- tmp2 = JBIG2_GETDWORD(dp);
- switch(op) {
- case JBIG2_COMPOSE_OR:
- tmp = (tmp2 & ~maskL) | ((tmp1 | tmp2) & maskL);
- break;
- case JBIG2_COMPOSE_AND:
- tmp = (tmp2 & ~maskL) | ((tmp1 & tmp2) & maskL);
- break;
- case JBIG2_COMPOSE_XOR:
- tmp = (tmp2 & ~maskL) | ((tmp1 ^ tmp2) & maskL);
- break;
- case JBIG2_COMPOSE_XNOR:
- tmp = (tmp2 & ~maskL) | ((~(tmp1 ^ tmp2)) & maskL);
- break;
- case JBIG2_COMPOSE_REPLACE:
- tmp = (tmp2 & ~maskL) | (tmp1 & maskL);
- break;
- }
- dp[0] = (uint8_t)(tmp >> 24);
- dp[1] = (uint8_t)(tmp >> 16);
- dp[2] = (uint8_t)(tmp >> 8);
- dp[3] = (uint8_t)tmp;
- sp += 4;
- dp += 4;
- }
- for(xx = 0; xx < middleDwords; xx++) {
- tmp1 = JBIG2_GETDWORD(sp);
- tmp2 = JBIG2_GETDWORD(dp);
- switch(op) {
- case JBIG2_COMPOSE_OR:
- tmp = tmp1 | tmp2;
- break;
- case JBIG2_COMPOSE_AND:
- tmp = tmp1 & tmp2;
- break;
- case JBIG2_COMPOSE_XOR:
- tmp = tmp1 ^ tmp2;
- break;
- case JBIG2_COMPOSE_XNOR:
- tmp = ~(tmp1 ^ tmp2);
- break;
- case JBIG2_COMPOSE_REPLACE:
- tmp = tmp1;
- break;
- }
- dp[0] = (uint8_t)(tmp >> 24);
- dp[1] = (uint8_t)(tmp >> 16);
- dp[2] = (uint8_t)(tmp >> 8);
- dp[3] = (uint8_t)tmp;
- sp += 4;
- dp += 4;
- }
- if(d2 != 0) {
- tmp1 = JBIG2_GETDWORD(sp);
- tmp2 = JBIG2_GETDWORD(dp);
- switch(op) {
- case JBIG2_COMPOSE_OR:
- tmp = (tmp2 & ~maskR) | ((tmp1 | tmp2) & maskR);
- break;
- case JBIG2_COMPOSE_AND:
- tmp = (tmp2 & ~maskR) | ((tmp1 & tmp2) & maskR);
- break;
- case JBIG2_COMPOSE_XOR:
- tmp = (tmp2 & ~maskR) | ((tmp1 ^ tmp2) & maskR);
- break;
- case JBIG2_COMPOSE_XNOR:
- tmp = (tmp2 & ~maskR) | ((~(tmp1 ^ tmp2)) & maskR);
- break;
- case JBIG2_COMPOSE_REPLACE:
- tmp = (tmp2 & ~maskR) | (tmp1 & maskR);
- break;
- }
- dp[0] = (uint8_t)(tmp >> 24);
- dp[1] = (uint8_t)(tmp >> 16);
- dp[2] = (uint8_t)(tmp >> 8);
- dp[3] = (uint8_t)tmp;
- }
- lineSrc += m_nStride;
- lineDst += pDst->m_nStride;
- }
- } else {
- shift1 = d1 - s1;
- shift2 = 32 - shift1;
- middleDwords = (xd1 >> 5) - ((xd0 + 31) >> 5);
- for(yy = yd0; yy < yd1; yy++) {
- sp = lineSrc;
- dp = lineDst;
- if(d1 != 0) {
- tmp1 = JBIG2_GETDWORD(sp) >> shift1;
- tmp2 = JBIG2_GETDWORD(dp);
- switch(op) {
- case JBIG2_COMPOSE_OR:
- tmp = (tmp2 & ~maskL) | ((tmp1 | tmp2) & maskL);
- break;
- case JBIG2_COMPOSE_AND:
- tmp = (tmp2 & ~maskL) | ((tmp1 & tmp2) & maskL);
- break;
- case JBIG2_COMPOSE_XOR:
- tmp = (tmp2 & ~maskL) | ((tmp1 ^ tmp2) & maskL);
- break;
- case JBIG2_COMPOSE_XNOR:
- tmp = (tmp2 & ~maskL) | ((~(tmp1 ^ tmp2)) & maskL);
- break;
- case JBIG2_COMPOSE_REPLACE:
- tmp = (tmp2 & ~maskL) | (tmp1 & maskL);
- break;
- }
- dp[0] = (uint8_t)(tmp >> 24);
- dp[1] = (uint8_t)(tmp >> 16);
- dp[2] = (uint8_t)(tmp >> 8);
- dp[3] = (uint8_t)tmp;
- dp += 4;
- }
- for(xx = 0; xx < middleDwords; xx++) {
- tmp1 = (JBIG2_GETDWORD(sp) << shift2) | ((JBIG2_GETDWORD(sp + 4)) >> shift1);
- tmp2 = JBIG2_GETDWORD(dp);
- switch(op) {
- case JBIG2_COMPOSE_OR:
- tmp = tmp1 | tmp2;
- break;
- case JBIG2_COMPOSE_AND:
- tmp = tmp1 & tmp2;
- break;
- case JBIG2_COMPOSE_XOR:
- tmp = tmp1 ^ tmp2;
- break;
- case JBIG2_COMPOSE_XNOR:
- tmp = ~(tmp1 ^ tmp2);
- break;
- case JBIG2_COMPOSE_REPLACE:
- tmp = tmp1;
- break;
- }
- dp[0] = (uint8_t)(tmp >> 24);
- dp[1] = (uint8_t)(tmp >> 16);
- dp[2] = (uint8_t)(tmp >> 8);
- dp[3] = (uint8_t)tmp;
- sp += 4;
- dp += 4;
- }
- if(d2 != 0) {
- tmp1 = (JBIG2_GETDWORD(sp) << shift2) | (
- ((sp + 4) < lineSrc + lineLeft ? JBIG2_GETDWORD(sp + 4) : 0) >> shift1);
- tmp2 = JBIG2_GETDWORD(dp);
- switch(op) {
- case JBIG2_COMPOSE_OR:
- tmp = (tmp2 & ~maskR) | ((tmp1 | tmp2) & maskR);
- break;
- case JBIG2_COMPOSE_AND:
- tmp = (tmp2 & ~maskR) | ((tmp1 & tmp2) & maskR);
- break;
- case JBIG2_COMPOSE_XOR:
- tmp = (tmp2 & ~maskR) | ((tmp1 ^ tmp2) & maskR);
- break;
- case JBIG2_COMPOSE_XNOR:
- tmp = (tmp2 & ~maskR) | ((~(tmp1 ^ tmp2)) & maskR);
- break;
- case JBIG2_COMPOSE_REPLACE:
- tmp = (tmp2 & ~maskR) | (tmp1 & maskR);
- break;
- }
- dp[0] = (uint8_t)(tmp >> 24);
- dp[1] = (uint8_t)(tmp >> 16);
- dp[2] = (uint8_t)(tmp >> 8);
- dp[3] = (uint8_t)tmp;
- }
- lineSrc += m_nStride;
- lineDst += pDst->m_nStride;
- }
+ shift1 = d1 - s1;
+ shift2 = 32 - shift1;
+ middleDwords = (xd1 >> 5) - ((xd0 + 31) >> 5);
+ for (yy = yd0; yy < yd1; yy++) {
+ sp = lineSrc;
+ dp = lineDst;
+ if (d1 != 0) {
+ tmp1 = JBIG2_GETDWORD(sp) >> shift1;
+ tmp2 = JBIG2_GETDWORD(dp);
+ switch (op) {
+ case JBIG2_COMPOSE_OR:
+ tmp = (tmp2 & ~maskL) | ((tmp1 | tmp2) & maskL);
+ break;
+ case JBIG2_COMPOSE_AND:
+ tmp = (tmp2 & ~maskL) | ((tmp1 & tmp2) & maskL);
+ break;
+ case JBIG2_COMPOSE_XOR:
+ tmp = (tmp2 & ~maskL) | ((tmp1 ^ tmp2) & maskL);
+ break;
+ case JBIG2_COMPOSE_XNOR:
+ tmp = (tmp2 & ~maskL) | ((~(tmp1 ^ tmp2)) & maskL);
+ break;
+ case JBIG2_COMPOSE_REPLACE:
+ tmp = (tmp2 & ~maskL) | (tmp1 & maskL);
+ break;
+ }
+ dp[0] = (uint8_t)(tmp >> 24);
+ dp[1] = (uint8_t)(tmp >> 16);
+ dp[2] = (uint8_t)(tmp >> 8);
+ dp[3] = (uint8_t)tmp;
+ dp += 4;
+ }
+ for (xx = 0; xx < middleDwords; xx++) {
+ tmp1 = (JBIG2_GETDWORD(sp) << shift2) |
+ ((JBIG2_GETDWORD(sp + 4)) >> shift1);
+ tmp2 = JBIG2_GETDWORD(dp);
+ switch (op) {
+ case JBIG2_COMPOSE_OR:
+ tmp = tmp1 | tmp2;
+ break;
+ case JBIG2_COMPOSE_AND:
+ tmp = tmp1 & tmp2;
+ break;
+ case JBIG2_COMPOSE_XOR:
+ tmp = tmp1 ^ tmp2;
+ break;
+ case JBIG2_COMPOSE_XNOR:
+ tmp = ~(tmp1 ^ tmp2);
+ break;
+ case JBIG2_COMPOSE_REPLACE:
+ tmp = tmp1;
+ break;
+ }
+ dp[0] = (uint8_t)(tmp >> 24);
+ dp[1] = (uint8_t)(tmp >> 16);
+ dp[2] = (uint8_t)(tmp >> 8);
+ dp[3] = (uint8_t)tmp;
+ sp += 4;
+ dp += 4;
}
+ if (d2 != 0) {
+ tmp1 =
+ (JBIG2_GETDWORD(sp) << shift2) |
+ (((sp + 4) < lineSrc + lineLeft ? JBIG2_GETDWORD(sp + 4) : 0) >>
+ shift1);
+ tmp2 = JBIG2_GETDWORD(dp);
+ switch (op) {
+ case JBIG2_COMPOSE_OR:
+ tmp = (tmp2 & ~maskR) | ((tmp1 | tmp2) & maskR);
+ break;
+ case JBIG2_COMPOSE_AND:
+ tmp = (tmp2 & ~maskR) | ((tmp1 & tmp2) & maskR);
+ break;
+ case JBIG2_COMPOSE_XOR:
+ tmp = (tmp2 & ~maskR) | ((tmp1 ^ tmp2) & maskR);
+ break;
+ case JBIG2_COMPOSE_XNOR:
+ tmp = (tmp2 & ~maskR) | ((~(tmp1 ^ tmp2)) & maskR);
+ break;
+ case JBIG2_COMPOSE_REPLACE:
+ tmp = (tmp2 & ~maskR) | (tmp1 & maskR);
+ break;
+ }
+ dp[0] = (uint8_t)(tmp >> 24);
+ dp[1] = (uint8_t)(tmp >> 16);
+ dp[2] = (uint8_t)(tmp >> 8);
+ dp[3] = (uint8_t)tmp;
+ }
+ lineSrc += m_nStride;
+ lineDst += pDst->m_nStride;
+ }
}
- return 1;
+ }
+ return 1;
}
-FX_BOOL CJBig2_Image::composeTo_opt2(CJBig2_Image *pDst, int32_t x, int32_t y, JBig2ComposeOp op, const FX_RECT* pSrcRect)
-{
- int32_t xs0, ys0, xs1, ys1, xd0, yd0, xd1, yd1, xx, yy, w, h, middleDwords, lineLeft;
- FX_DWORD s1, d1, d2, shift, shift1, shift2, tmp, tmp1, tmp2, maskL, maskR, maskM;
- uint8_t *lineSrc, *lineDst, *sp, *dp;
- int32_t sw, sh;
- if (!m_pData) {
- return FALSE;
- }
- if (x < -1048576 || x > 1048576 || y < -1048576 || y > 1048576) {
- return FALSE;
- }
- sw = pSrcRect->Width();
- sh = pSrcRect->Height();
- if(y < 0) {
- ys0 = -y;
- } else {
- ys0 = 0;
- }
- if(y + sh > pDst->m_nHeight) {
- ys1 = pDst->m_nHeight - y;
- } else {
- ys1 = sh;
- }
- if(x < 0) {
- xs0 = -x;
- } else {
- xs0 = 0;
- }
- if(x + sw > pDst->m_nWidth) {
- xs1 = pDst->m_nWidth - x;
- } else {
- xs1 = sw;
- }
- if((ys0 >= ys1) || (xs0 >= xs1)) {
- return 0;
- }
- w = xs1 - xs0;
- h = ys1 - ys0;
- if(y < 0) {
- yd0 = 0;
- } else {
- yd0 = y;
- }
- if(x < 0) {
- xd0 = 0;
+FX_BOOL CJBig2_Image::composeTo_opt2(CJBig2_Image* pDst,
+ int32_t x,
+ int32_t y,
+ JBig2ComposeOp op,
+ const FX_RECT* pSrcRect) {
+ int32_t xs0, ys0, xs1, ys1, xd0, yd0, xd1, yd1, xx, yy, w, h, middleDwords,
+ lineLeft;
+ FX_DWORD s1, d1, d2, shift, shift1, shift2, tmp, tmp1, tmp2, maskL, maskR,
+ maskM;
+ uint8_t *lineSrc, *lineDst, *sp, *dp;
+ int32_t sw, sh;
+ if (!m_pData) {
+ return FALSE;
+ }
+ if (x < -1048576 || x > 1048576 || y < -1048576 || y > 1048576) {
+ return FALSE;
+ }
+ sw = pSrcRect->Width();
+ sh = pSrcRect->Height();
+ if (y < 0) {
+ ys0 = -y;
+ } else {
+ ys0 = 0;
+ }
+ if (y + sh > pDst->m_nHeight) {
+ ys1 = pDst->m_nHeight - y;
+ } else {
+ ys1 = sh;
+ }
+ if (x < 0) {
+ xs0 = -x;
+ } else {
+ xs0 = 0;
+ }
+ if (x + sw > pDst->m_nWidth) {
+ xs1 = pDst->m_nWidth - x;
+ } else {
+ xs1 = sw;
+ }
+ if ((ys0 >= ys1) || (xs0 >= xs1)) {
+ return 0;
+ }
+ w = xs1 - xs0;
+ h = ys1 - ys0;
+ if (y < 0) {
+ yd0 = 0;
+ } else {
+ yd0 = y;
+ }
+ if (x < 0) {
+ xd0 = 0;
+ } else {
+ xd0 = x;
+ }
+ xd1 = xd0 + w;
+ yd1 = yd0 + h;
+ d1 = xd0 & 31;
+ d2 = xd1 & 31;
+ s1 = xs0 & 31;
+ maskL = 0xffffffff >> d1;
+ maskR = 0xffffffff << ((32 - (xd1 & 31)) % 32);
+ maskM = maskL & maskR;
+ lineSrc = m_pData + (pSrcRect->top + ys0) * m_nStride +
+ (((xs0 + pSrcRect->left) >> 5) << 2);
+ lineLeft = m_nStride - ((xs0 >> 5) << 2);
+ lineDst = pDst->m_pData + yd0 * pDst->m_nStride + ((xd0 >> 5) << 2);
+ if ((xd0 & ~31) == ((xd1 - 1) & ~31)) {
+ if ((xs0 & ~31) == ((xs1 - 1) & ~31)) {
+ if (s1 > d1) {
+ shift = s1 - d1;
+ for (yy = yd0; yy < yd1; yy++) {
+ tmp1 = JBIG2_GETDWORD(lineSrc) << shift;
+ tmp2 = JBIG2_GETDWORD(lineDst);
+ switch (op) {
+ case JBIG2_COMPOSE_OR:
+ tmp = (tmp2 & ~maskM) | ((tmp1 | tmp2) & maskM);
+ break;
+ case JBIG2_COMPOSE_AND:
+ tmp = (tmp2 & ~maskM) | ((tmp1 & tmp2) & maskM);
+ break;
+ case JBIG2_COMPOSE_XOR:
+ tmp = (tmp2 & ~maskM) | ((tmp1 ^ tmp2) & maskM);
+ break;
+ case JBIG2_COMPOSE_XNOR:
+ tmp = (tmp2 & ~maskM) | ((~(tmp1 ^ tmp2)) & maskM);
+ break;
+ case JBIG2_COMPOSE_REPLACE:
+ tmp = (tmp2 & ~maskM) | (tmp1 & maskM);
+ break;
+ }
+ lineDst[0] = (uint8_t)(tmp >> 24);
+ lineDst[1] = (uint8_t)(tmp >> 16);
+ lineDst[2] = (uint8_t)(tmp >> 8);
+ lineDst[3] = (uint8_t)tmp;
+ lineSrc += m_nStride;
+ lineDst += pDst->m_nStride;
+ }
+ } else {
+ shift = d1 - s1;
+ for (yy = yd0; yy < yd1; yy++) {
+ tmp1 = JBIG2_GETDWORD(lineSrc) >> shift;
+ tmp2 = JBIG2_GETDWORD(lineDst);
+ switch (op) {
+ case JBIG2_COMPOSE_OR:
+ tmp = (tmp2 & ~maskM) | ((tmp1 | tmp2) & maskM);
+ break;
+ case JBIG2_COMPOSE_AND:
+ tmp = (tmp2 & ~maskM) | ((tmp1 & tmp2) & maskM);
+ break;
+ case JBIG2_COMPOSE_XOR:
+ tmp = (tmp2 & ~maskM) | ((tmp1 ^ tmp2) & maskM);
+ break;
+ case JBIG2_COMPOSE_XNOR:
+ tmp = (tmp2 & ~maskM) | ((~(tmp1 ^ tmp2)) & maskM);
+ break;
+ case JBIG2_COMPOSE_REPLACE:
+ tmp = (tmp2 & ~maskM) | (tmp1 & maskM);
+ break;
+ }
+ lineDst[0] = (uint8_t)(tmp >> 24);
+ lineDst[1] = (uint8_t)(tmp >> 16);
+ lineDst[2] = (uint8_t)(tmp >> 8);
+ lineDst[3] = (uint8_t)tmp;
+ lineSrc += m_nStride;
+ lineDst += pDst->m_nStride;
+ }
+ }
} else {
- xd0 = x;
+ shift1 = s1 - d1;
+ shift2 = 32 - shift1;
+ for (yy = yd0; yy < yd1; yy++) {
+ tmp1 = (JBIG2_GETDWORD(lineSrc) << shift1) |
+ (JBIG2_GETDWORD(lineSrc + 4) >> shift2);
+ tmp2 = JBIG2_GETDWORD(lineDst);
+ switch (op) {
+ case JBIG2_COMPOSE_OR:
+ tmp = (tmp2 & ~maskM) | ((tmp1 | tmp2) & maskM);
+ break;
+ case JBIG2_COMPOSE_AND:
+ tmp = (tmp2 & ~maskM) | ((tmp1 & tmp2) & maskM);
+ break;
+ case JBIG2_COMPOSE_XOR:
+ tmp = (tmp2 & ~maskM) | ((tmp1 ^ tmp2) & maskM);
+ break;
+ case JBIG2_COMPOSE_XNOR:
+ tmp = (tmp2 & ~maskM) | ((~(tmp1 ^ tmp2)) & maskM);
+ break;
+ case JBIG2_COMPOSE_REPLACE:
+ tmp = (tmp2 & ~maskM) | (tmp1 & maskM);
+ break;
+ }
+ lineDst[0] = (uint8_t)(tmp >> 24);
+ lineDst[1] = (uint8_t)(tmp >> 16);
+ lineDst[2] = (uint8_t)(tmp >> 8);
+ lineDst[3] = (uint8_t)tmp;
+ lineSrc += m_nStride;
+ lineDst += pDst->m_nStride;
+ }
}
- xd1 = xd0 + w;
- yd1 = yd0 + h;
- d1 = xd0 & 31;
- d2 = xd1 & 31;
- s1 = xs0 & 31;
- maskL = 0xffffffff >> d1;
- maskR = 0xffffffff << ((32 - (xd1 & 31)) % 32);
- maskM = maskL & maskR;
- lineSrc = m_pData + (pSrcRect->top + ys0) * m_nStride + (((xs0 + pSrcRect->left) >> 5) << 2);
- lineLeft = m_nStride - ((xs0 >> 5) << 2);
- lineDst = pDst->m_pData + yd0 * pDst->m_nStride + ((xd0 >> 5) << 2);
- if((xd0 & ~31) == ((xd1 - 1) & ~31)) {
- if((xs0 & ~31) == ((xs1 - 1) & ~31)) {
- if(s1 > d1) {
- shift = s1 - d1;
- for(yy = yd0; yy < yd1; yy++) {
- tmp1 = JBIG2_GETDWORD(lineSrc) << shift;
- tmp2 = JBIG2_GETDWORD(lineDst);
- switch(op) {
- case JBIG2_COMPOSE_OR:
- tmp = (tmp2 & ~maskM) | ((tmp1 | tmp2) & maskM);
- break;
- case JBIG2_COMPOSE_AND:
- tmp = (tmp2 & ~maskM) | ((tmp1 & tmp2) & maskM);
- break;
- case JBIG2_COMPOSE_XOR:
- tmp = (tmp2 & ~maskM) | ((tmp1 ^ tmp2) & maskM);
- break;
- case JBIG2_COMPOSE_XNOR:
- tmp = (tmp2 & ~maskM) | ((~(tmp1 ^ tmp2)) & maskM);
- break;
- case JBIG2_COMPOSE_REPLACE:
- tmp = (tmp2 & ~maskM) | (tmp1 & maskM);
- break;
- }
- lineDst[0] = (uint8_t)(tmp >> 24);
- lineDst[1] = (uint8_t)(tmp >> 16);
- lineDst[2] = (uint8_t)(tmp >> 8);
- lineDst[3] = (uint8_t)tmp;
- lineSrc += m_nStride;
- lineDst += pDst->m_nStride;
- }
- } else {
- shift = d1 - s1;
- for(yy = yd0; yy < yd1; yy++) {
- tmp1 = JBIG2_GETDWORD(lineSrc) >> shift;
- tmp2 = JBIG2_GETDWORD(lineDst);
- switch(op) {
- case JBIG2_COMPOSE_OR:
- tmp = (tmp2 & ~maskM) | ((tmp1 | tmp2) & maskM);
- break;
- case JBIG2_COMPOSE_AND:
- tmp = (tmp2 & ~maskM) | ((tmp1 & tmp2) & maskM);
- break;
- case JBIG2_COMPOSE_XOR:
- tmp = (tmp2 & ~maskM) | ((tmp1 ^ tmp2) & maskM);
- break;
- case JBIG2_COMPOSE_XNOR:
- tmp = (tmp2 & ~maskM) | ((~(tmp1 ^ tmp2)) & maskM);
- break;
- case JBIG2_COMPOSE_REPLACE:
- tmp = (tmp2 & ~maskM) | (tmp1 & maskM);
- break;
- }
- lineDst[0] = (uint8_t)(tmp >> 24);
- lineDst[1] = (uint8_t)(tmp >> 16);
- lineDst[2] = (uint8_t)(tmp >> 8);
- lineDst[3] = (uint8_t)tmp;
- lineSrc += m_nStride;
- lineDst += pDst->m_nStride;
- }
- }
- } else {
- shift1 = s1 - d1;
- shift2 = 32 - shift1;
- for(yy = yd0; yy < yd1; yy++) {
- tmp1 = (JBIG2_GETDWORD(lineSrc) << shift1) | (JBIG2_GETDWORD(lineSrc + 4) >> shift2);
- tmp2 = JBIG2_GETDWORD(lineDst);
- switch(op) {
- case JBIG2_COMPOSE_OR:
- tmp = (tmp2 & ~maskM) | ((tmp1 | tmp2) & maskM);
- break;
- case JBIG2_COMPOSE_AND:
- tmp = (tmp2 & ~maskM) | ((tmp1 & tmp2) & maskM);
- break;
- case JBIG2_COMPOSE_XOR:
- tmp = (tmp2 & ~maskM) | ((tmp1 ^ tmp2) & maskM);
- break;
- case JBIG2_COMPOSE_XNOR:
- tmp = (tmp2 & ~maskM) | ((~(tmp1 ^ tmp2)) & maskM);
- break;
- case JBIG2_COMPOSE_REPLACE:
- tmp = (tmp2 & ~maskM) | (tmp1 & maskM);
- break;
- }
- lineDst[0] = (uint8_t)(tmp >> 24);
- lineDst[1] = (uint8_t)(tmp >> 16);
- lineDst[2] = (uint8_t)(tmp >> 8);
- lineDst[3] = (uint8_t)tmp;
- lineSrc += m_nStride;
- lineDst += pDst->m_nStride;
- }
+ } else {
+ if (s1 > d1) {
+ shift1 = s1 - d1;
+ shift2 = 32 - shift1;
+ middleDwords = (xd1 >> 5) - ((xd0 + 31) >> 5);
+ for (yy = yd0; yy < yd1; yy++) {
+ sp = lineSrc;
+ dp = lineDst;
+ if (d1 != 0) {
+ tmp1 = (JBIG2_GETDWORD(sp) << shift1) |
+ (JBIG2_GETDWORD(sp + 4) >> shift2);
+ tmp2 = JBIG2_GETDWORD(dp);
+ switch (op) {
+ case JBIG2_COMPOSE_OR:
+ tmp = (tmp2 & ~maskL) | ((tmp1 | tmp2) & maskL);
+ break;
+ case JBIG2_COMPOSE_AND:
+ tmp = (tmp2 & ~maskL) | ((tmp1 & tmp2) & maskL);
+ break;
+ case JBIG2_COMPOSE_XOR:
+ tmp = (tmp2 & ~maskL) | ((tmp1 ^ tmp2) & maskL);
+ break;
+ case JBIG2_COMPOSE_XNOR:
+ tmp = (tmp2 & ~maskL) | ((~(tmp1 ^ tmp2)) & maskL);
+ break;
+ case JBIG2_COMPOSE_REPLACE:
+ tmp = (tmp2 & ~maskL) | (tmp1 & maskL);
+ break;
+ }
+ dp[0] = (uint8_t)(tmp >> 24);
+ dp[1] = (uint8_t)(tmp >> 16);
+ dp[2] = (uint8_t)(tmp >> 8);
+ dp[3] = (uint8_t)tmp;
+ sp += 4;
+ dp += 4;
}
+ for (xx = 0; xx < middleDwords; xx++) {
+ tmp1 = (JBIG2_GETDWORD(sp) << shift1) |
+ (JBIG2_GETDWORD(sp + 4) >> shift2);
+ tmp2 = JBIG2_GETDWORD(dp);
+ switch (op) {
+ case JBIG2_COMPOSE_OR:
+ tmp = tmp1 | tmp2;
+ break;
+ case JBIG2_COMPOSE_AND:
+ tmp = tmp1 & tmp2;
+ break;
+ case JBIG2_COMPOSE_XOR:
+ tmp = tmp1 ^ tmp2;
+ break;
+ case JBIG2_COMPOSE_XNOR:
+ tmp = ~(tmp1 ^ tmp2);
+ break;
+ case JBIG2_COMPOSE_REPLACE:
+ tmp = tmp1;
+ break;
+ }
+ dp[0] = (uint8_t)(tmp >> 24);
+ dp[1] = (uint8_t)(tmp >> 16);
+ dp[2] = (uint8_t)(tmp >> 8);
+ dp[3] = (uint8_t)tmp;
+ sp += 4;
+ dp += 4;
+ }
+ if (d2 != 0) {
+ tmp1 =
+ (JBIG2_GETDWORD(sp) << shift1) |
+ (((sp + 4) < lineSrc + lineLeft ? JBIG2_GETDWORD(sp + 4) : 0) >>
+ shift2);
+ tmp2 = JBIG2_GETDWORD(dp);
+ switch (op) {
+ case JBIG2_COMPOSE_OR:
+ tmp = (tmp2 & ~maskR) | ((tmp1 | tmp2) & maskR);
+ break;
+ case JBIG2_COMPOSE_AND:
+ tmp = (tmp2 & ~maskR) | ((tmp1 & tmp2) & maskR);
+ break;
+ case JBIG2_COMPOSE_XOR:
+ tmp = (tmp2 & ~maskR) | ((tmp1 ^ tmp2) & maskR);
+ break;
+ case JBIG2_COMPOSE_XNOR:
+ tmp = (tmp2 & ~maskR) | ((~(tmp1 ^ tmp2)) & maskR);
+ break;
+ case JBIG2_COMPOSE_REPLACE:
+ tmp = (tmp2 & ~maskR) | (tmp1 & maskR);
+ break;
+ }
+ dp[0] = (uint8_t)(tmp >> 24);
+ dp[1] = (uint8_t)(tmp >> 16);
+ dp[2] = (uint8_t)(tmp >> 8);
+ dp[3] = (uint8_t)tmp;
+ }
+ lineSrc += m_nStride;
+ lineDst += pDst->m_nStride;
+ }
+ } else if (s1 == d1) {
+ middleDwords = (xd1 >> 5) - ((xd0 + 31) >> 5);
+ for (yy = yd0; yy < yd1; yy++) {
+ sp = lineSrc;
+ dp = lineDst;
+ if (d1 != 0) {
+ tmp1 = JBIG2_GETDWORD(sp);
+ tmp2 = JBIG2_GETDWORD(dp);
+ switch (op) {
+ case JBIG2_COMPOSE_OR:
+ tmp = (tmp2 & ~maskL) | ((tmp1 | tmp2) & maskL);
+ break;
+ case JBIG2_COMPOSE_AND:
+ tmp = (tmp2 & ~maskL) | ((tmp1 & tmp2) & maskL);
+ break;
+ case JBIG2_COMPOSE_XOR:
+ tmp = (tmp2 & ~maskL) | ((tmp1 ^ tmp2) & maskL);
+ break;
+ case JBIG2_COMPOSE_XNOR:
+ tmp = (tmp2 & ~maskL) | ((~(tmp1 ^ tmp2)) & maskL);
+ break;
+ case JBIG2_COMPOSE_REPLACE:
+ tmp = (tmp2 & ~maskL) | (tmp1 & maskL);
+ break;
+ }
+ dp[0] = (uint8_t)(tmp >> 24);
+ dp[1] = (uint8_t)(tmp >> 16);
+ dp[2] = (uint8_t)(tmp >> 8);
+ dp[3] = (uint8_t)tmp;
+ sp += 4;
+ dp += 4;
+ }
+ for (xx = 0; xx < middleDwords; xx++) {
+ tmp1 = JBIG2_GETDWORD(sp);
+ tmp2 = JBIG2_GETDWORD(dp);
+ switch (op) {
+ case JBIG2_COMPOSE_OR:
+ tmp = tmp1 | tmp2;
+ break;
+ case JBIG2_COMPOSE_AND:
+ tmp = tmp1 & tmp2;
+ break;
+ case JBIG2_COMPOSE_XOR:
+ tmp = tmp1 ^ tmp2;
+ break;
+ case JBIG2_COMPOSE_XNOR:
+ tmp = ~(tmp1 ^ tmp2);
+ break;
+ case JBIG2_COMPOSE_REPLACE:
+ tmp = tmp1;
+ break;
+ }
+ dp[0] = (uint8_t)(tmp >> 24);
+ dp[1] = (uint8_t)(tmp >> 16);
+ dp[2] = (uint8_t)(tmp >> 8);
+ dp[3] = (uint8_t)tmp;
+ sp += 4;
+ dp += 4;
+ }
+ if (d2 != 0) {
+ tmp1 = JBIG2_GETDWORD(sp);
+ tmp2 = JBIG2_GETDWORD(dp);
+ switch (op) {
+ case JBIG2_COMPOSE_OR:
+ tmp = (tmp2 & ~maskR) | ((tmp1 | tmp2) & maskR);
+ break;
+ case JBIG2_COMPOSE_AND:
+ tmp = (tmp2 & ~maskR) | ((tmp1 & tmp2) & maskR);
+ break;
+ case JBIG2_COMPOSE_XOR:
+ tmp = (tmp2 & ~maskR) | ((tmp1 ^ tmp2) & maskR);
+ break;
+ case JBIG2_COMPOSE_XNOR:
+ tmp = (tmp2 & ~maskR) | ((~(tmp1 ^ tmp2)) & maskR);
+ break;
+ case JBIG2_COMPOSE_REPLACE:
+ tmp = (tmp2 & ~maskR) | (tmp1 & maskR);
+ break;
+ }
+ dp[0] = (uint8_t)(tmp >> 24);
+ dp[1] = (uint8_t)(tmp >> 16);
+ dp[2] = (uint8_t)(tmp >> 8);
+ dp[3] = (uint8_t)tmp;
+ }
+ lineSrc += m_nStride;
+ lineDst += pDst->m_nStride;
+ }
} else {
- if(s1 > d1) {
- shift1 = s1 - d1;
- shift2 = 32 - shift1;
- middleDwords = (xd1 >> 5) - ((xd0 + 31) >> 5);
- for(yy = yd0; yy < yd1; yy++) {
- sp = lineSrc;
- dp = lineDst;
- if(d1 != 0) {
- tmp1 = (JBIG2_GETDWORD(sp) << shift1) | (JBIG2_GETDWORD(sp + 4) >> shift2);
- tmp2 = JBIG2_GETDWORD(dp);
- switch(op) {
- case JBIG2_COMPOSE_OR:
- tmp = (tmp2 & ~maskL) | ((tmp1 | tmp2) & maskL);
- break;
- case JBIG2_COMPOSE_AND:
- tmp = (tmp2 & ~maskL) | ((tmp1 & tmp2) & maskL);
- break;
- case JBIG2_COMPOSE_XOR:
- tmp = (tmp2 & ~maskL) | ((tmp1 ^ tmp2) & maskL);
- break;
- case JBIG2_COMPOSE_XNOR:
- tmp = (tmp2 & ~maskL) | ((~(tmp1 ^ tmp2)) & maskL);
- break;
- case JBIG2_COMPOSE_REPLACE:
- tmp = (tmp2 & ~maskL) | (tmp1 & maskL);
- break;
- }
- dp[0] = (uint8_t)(tmp >> 24);
- dp[1] = (uint8_t)(tmp >> 16);
- dp[2] = (uint8_t)(tmp >> 8);
- dp[3] = (uint8_t)tmp;
- sp += 4;
- dp += 4;
- }
- for(xx = 0; xx < middleDwords; xx++) {
- tmp1 = (JBIG2_GETDWORD(sp) << shift1) | (JBIG2_GETDWORD(sp + 4) >> shift2);
- tmp2 = JBIG2_GETDWORD(dp);
- switch(op) {
- case JBIG2_COMPOSE_OR:
- tmp = tmp1 | tmp2;
- break;
- case JBIG2_COMPOSE_AND:
- tmp = tmp1 & tmp2;
- break;
- case JBIG2_COMPOSE_XOR:
- tmp = tmp1 ^ tmp2;
- break;
- case JBIG2_COMPOSE_XNOR:
- tmp = ~(tmp1 ^ tmp2);
- break;
- case JBIG2_COMPOSE_REPLACE:
- tmp = tmp1;
- break;
- }
- dp[0] = (uint8_t)(tmp >> 24);
- dp[1] = (uint8_t)(tmp >> 16);
- dp[2] = (uint8_t)(tmp >> 8);
- dp[3] = (uint8_t)tmp;
- sp += 4;
- dp += 4;
- }
- if(d2 != 0) {
- tmp1 = (JBIG2_GETDWORD(sp) << shift1) | (
- ((sp + 4) < lineSrc + lineLeft ? JBIG2_GETDWORD(sp + 4) : 0) >> shift2);
- tmp2 = JBIG2_GETDWORD(dp);
- switch(op) {
- case JBIG2_COMPOSE_OR:
- tmp = (tmp2 & ~maskR) | ((tmp1 | tmp2) & maskR);
- break;
- case JBIG2_COMPOSE_AND:
- tmp = (tmp2 & ~maskR) | ((tmp1 & tmp2) & maskR);
- break;
- case JBIG2_COMPOSE_XOR:
- tmp = (tmp2 & ~maskR) | ((tmp1 ^ tmp2) & maskR);
- break;
- case JBIG2_COMPOSE_XNOR:
- tmp = (tmp2 & ~maskR) | ((~(tmp1 ^ tmp2)) & maskR);
- break;
- case JBIG2_COMPOSE_REPLACE:
- tmp = (tmp2 & ~maskR) | (tmp1 & maskR);
- break;
- }
- dp[0] = (uint8_t)(tmp >> 24);
- dp[1] = (uint8_t)(tmp >> 16);
- dp[2] = (uint8_t)(tmp >> 8);
- dp[3] = (uint8_t)tmp;
- }
- lineSrc += m_nStride;
- lineDst += pDst->m_nStride;
- }
- } else if(s1 == d1) {
- middleDwords = (xd1 >> 5) - ((xd0 + 31) >> 5);
- for(yy = yd0; yy < yd1; yy++) {
- sp = lineSrc;
- dp = lineDst;
- if(d1 != 0) {
- tmp1 = JBIG2_GETDWORD(sp);
- tmp2 = JBIG2_GETDWORD(dp);
- switch(op) {
- case JBIG2_COMPOSE_OR:
- tmp = (tmp2 & ~maskL) | ((tmp1 | tmp2) & maskL);
- break;
- case JBIG2_COMPOSE_AND:
- tmp = (tmp2 & ~maskL) | ((tmp1 & tmp2) & maskL);
- break;
- case JBIG2_COMPOSE_XOR:
- tmp = (tmp2 & ~maskL) | ((tmp1 ^ tmp2) & maskL);
- break;
- case JBIG2_COMPOSE_XNOR:
- tmp = (tmp2 & ~maskL) | ((~(tmp1 ^ tmp2)) & maskL);
- break;
- case JBIG2_COMPOSE_REPLACE:
- tmp = (tmp2 & ~maskL) | (tmp1 & maskL);
- break;
- }
- dp[0] = (uint8_t)(tmp >> 24);
- dp[1] = (uint8_t)(tmp >> 16);
- dp[2] = (uint8_t)(tmp >> 8);
- dp[3] = (uint8_t)tmp;
- sp += 4;
- dp += 4;
- }
- for(xx = 0; xx < middleDwords; xx++) {
- tmp1 = JBIG2_GETDWORD(sp);
- tmp2 = JBIG2_GETDWORD(dp);
- switch(op) {
- case JBIG2_COMPOSE_OR:
- tmp = tmp1 | tmp2;
- break;
- case JBIG2_COMPOSE_AND:
- tmp = tmp1 & tmp2;
- break;
- case JBIG2_COMPOSE_XOR:
- tmp = tmp1 ^ tmp2;
- break;
- case JBIG2_COMPOSE_XNOR:
- tmp = ~(tmp1 ^ tmp2);
- break;
- case JBIG2_COMPOSE_REPLACE:
- tmp = tmp1;
- break;
- }
- dp[0] = (uint8_t)(tmp >> 24);
- dp[1] = (uint8_t)(tmp >> 16);
- dp[2] = (uint8_t)(tmp >> 8);
- dp[3] = (uint8_t)tmp;
- sp += 4;
- dp += 4;
- }
- if(d2 != 0) {
- tmp1 = JBIG2_GETDWORD(sp);
- tmp2 = JBIG2_GETDWORD(dp);
- switch(op) {
- case JBIG2_COMPOSE_OR:
- tmp = (tmp2 & ~maskR) | ((tmp1 | tmp2) & maskR);
- break;
- case JBIG2_COMPOSE_AND:
- tmp = (tmp2 & ~maskR) | ((tmp1 & tmp2) & maskR);
- break;
- case JBIG2_COMPOSE_XOR:
- tmp = (tmp2 & ~maskR) | ((tmp1 ^ tmp2) & maskR);
- break;
- case JBIG2_COMPOSE_XNOR:
- tmp = (tmp2 & ~maskR) | ((~(tmp1 ^ tmp2)) & maskR);
- break;
- case JBIG2_COMPOSE_REPLACE:
- tmp = (tmp2 & ~maskR) | (tmp1 & maskR);
- break;
- }
- dp[0] = (uint8_t)(tmp >> 24);
- dp[1] = (uint8_t)(tmp >> 16);
- dp[2] = (uint8_t)(tmp >> 8);
- dp[3] = (uint8_t)tmp;
- }
- lineSrc += m_nStride;
- lineDst += pDst->m_nStride;
- }
- } else {
- shift1 = d1 - s1;
- shift2 = 32 - shift1;
- middleDwords = (xd1 >> 5) - ((xd0 + 31) >> 5);
- for(yy = yd0; yy < yd1; yy++) {
- sp = lineSrc;
- dp = lineDst;
- if(d1 != 0) {
- tmp1 = JBIG2_GETDWORD(sp) >> shift1;
- tmp2 = JBIG2_GETDWORD(dp);
- switch(op) {
- case JBIG2_COMPOSE_OR:
- tmp = (tmp2 & ~maskL) | ((tmp1 | tmp2) & maskL);
- break;
- case JBIG2_COMPOSE_AND:
- tmp = (tmp2 & ~maskL) | ((tmp1 & tmp2) & maskL);
- break;
- case JBIG2_COMPOSE_XOR:
- tmp = (tmp2 & ~maskL) | ((tmp1 ^ tmp2) & maskL);
- break;
- case JBIG2_COMPOSE_XNOR:
- tmp = (tmp2 & ~maskL) | ((~(tmp1 ^ tmp2)) & maskL);
- break;
- case JBIG2_COMPOSE_REPLACE:
- tmp = (tmp2 & ~maskL) | (tmp1 & maskL);
- break;
- }
- dp[0] = (uint8_t)(tmp >> 24);
- dp[1] = (uint8_t)(tmp >> 16);
- dp[2] = (uint8_t)(tmp >> 8);
- dp[3] = (uint8_t)tmp;
- dp += 4;
- }
- for(xx = 0; xx < middleDwords; xx++) {
- tmp1 = (JBIG2_GETDWORD(sp) << shift2) | ((JBIG2_GETDWORD(sp + 4)) >> shift1);
- tmp2 = JBIG2_GETDWORD(dp);
- switch(op) {
- case JBIG2_COMPOSE_OR:
- tmp = tmp1 | tmp2;
- break;
- case JBIG2_COMPOSE_AND:
- tmp = tmp1 & tmp2;
- break;
- case JBIG2_COMPOSE_XOR:
- tmp = tmp1 ^ tmp2;
- break;
- case JBIG2_COMPOSE_XNOR:
- tmp = ~(tmp1 ^ tmp2);
- break;
- case JBIG2_COMPOSE_REPLACE:
- tmp = tmp1;
- break;
- }
- dp[0] = (uint8_t)(tmp >> 24);
- dp[1] = (uint8_t)(tmp >> 16);
- dp[2] = (uint8_t)(tmp >> 8);
- dp[3] = (uint8_t)tmp;
- sp += 4;
- dp += 4;
- }
- if(d2 != 0) {
- tmp1 = (JBIG2_GETDWORD(sp) << shift2) | (
- ((sp + 4) < lineSrc + lineLeft ? JBIG2_GETDWORD(sp + 4) : 0) >> shift1);
- tmp2 = JBIG2_GETDWORD(dp);
- switch(op) {
- case JBIG2_COMPOSE_OR:
- tmp = (tmp2 & ~maskR) | ((tmp1 | tmp2) & maskR);
- break;
- case JBIG2_COMPOSE_AND:
- tmp = (tmp2 & ~maskR) | ((tmp1 & tmp2) & maskR);
- break;
- case JBIG2_COMPOSE_XOR:
- tmp = (tmp2 & ~maskR) | ((tmp1 ^ tmp2) & maskR);
- break;
- case JBIG2_COMPOSE_XNOR:
- tmp = (tmp2 & ~maskR) | ((~(tmp1 ^ tmp2)) & maskR);
- break;
- case JBIG2_COMPOSE_REPLACE:
- tmp = (tmp2 & ~maskR) | (tmp1 & maskR);
- break;
- }
- dp[0] = (uint8_t)(tmp >> 24);
- dp[1] = (uint8_t)(tmp >> 16);
- dp[2] = (uint8_t)(tmp >> 8);
- dp[3] = (uint8_t)tmp;
- }
- lineSrc += m_nStride;
- lineDst += pDst->m_nStride;
- }
+ shift1 = d1 - s1;
+ shift2 = 32 - shift1;
+ middleDwords = (xd1 >> 5) - ((xd0 + 31) >> 5);
+ for (yy = yd0; yy < yd1; yy++) {
+ sp = lineSrc;
+ dp = lineDst;
+ if (d1 != 0) {
+ tmp1 = JBIG2_GETDWORD(sp) >> shift1;
+ tmp2 = JBIG2_GETDWORD(dp);
+ switch (op) {
+ case JBIG2_COMPOSE_OR:
+ tmp = (tmp2 & ~maskL) | ((tmp1 | tmp2) & maskL);
+ break;
+ case JBIG2_COMPOSE_AND:
+ tmp = (tmp2 & ~maskL) | ((tmp1 & tmp2) & maskL);
+ break;
+ case JBIG2_COMPOSE_XOR:
+ tmp = (tmp2 & ~maskL) | ((tmp1 ^ tmp2) & maskL);
+ break;
+ case JBIG2_COMPOSE_XNOR:
+ tmp = (tmp2 & ~maskL) | ((~(tmp1 ^ tmp2)) & maskL);
+ break;
+ case JBIG2_COMPOSE_REPLACE:
+ tmp = (tmp2 & ~maskL) | (tmp1 & maskL);
+ break;
+ }
+ dp[0] = (uint8_t)(tmp >> 24);
+ dp[1] = (uint8_t)(tmp >> 16);
+ dp[2] = (uint8_t)(tmp >> 8);
+ dp[3] = (uint8_t)tmp;
+ dp += 4;
+ }
+ for (xx = 0; xx < middleDwords; xx++) {
+ tmp1 = (JBIG2_GETDWORD(sp) << shift2) |
+ ((JBIG2_GETDWORD(sp + 4)) >> shift1);
+ tmp2 = JBIG2_GETDWORD(dp);
+ switch (op) {
+ case JBIG2_COMPOSE_OR:
+ tmp = tmp1 | tmp2;
+ break;
+ case JBIG2_COMPOSE_AND:
+ tmp = tmp1 & tmp2;
+ break;
+ case JBIG2_COMPOSE_XOR:
+ tmp = tmp1 ^ tmp2;
+ break;
+ case JBIG2_COMPOSE_XNOR:
+ tmp = ~(tmp1 ^ tmp2);
+ break;
+ case JBIG2_COMPOSE_REPLACE:
+ tmp = tmp1;
+ break;
+ }
+ dp[0] = (uint8_t)(tmp >> 24);
+ dp[1] = (uint8_t)(tmp >> 16);
+ dp[2] = (uint8_t)(tmp >> 8);
+ dp[3] = (uint8_t)tmp;
+ sp += 4;
+ dp += 4;
+ }
+ if (d2 != 0) {
+ tmp1 =
+ (JBIG2_GETDWORD(sp) << shift2) |
+ (((sp + 4) < lineSrc + lineLeft ? JBIG2_GETDWORD(sp + 4) : 0) >>
+ shift1);
+ tmp2 = JBIG2_GETDWORD(dp);
+ switch (op) {
+ case JBIG2_COMPOSE_OR:
+ tmp = (tmp2 & ~maskR) | ((tmp1 | tmp2) & maskR);
+ break;
+ case JBIG2_COMPOSE_AND:
+ tmp = (tmp2 & ~maskR) | ((tmp1 & tmp2) & maskR);
+ break;
+ case JBIG2_COMPOSE_XOR:
+ tmp = (tmp2 & ~maskR) | ((tmp1 ^ tmp2) & maskR);
+ break;
+ case JBIG2_COMPOSE_XNOR:
+ tmp = (tmp2 & ~maskR) | ((~(tmp1 ^ tmp2)) & maskR);
+ break;
+ case JBIG2_COMPOSE_REPLACE:
+ tmp = (tmp2 & ~maskR) | (tmp1 & maskR);
+ break;
+ }
+ dp[0] = (uint8_t)(tmp >> 24);
+ dp[1] = (uint8_t)(tmp >> 16);
+ dp[2] = (uint8_t)(tmp >> 8);
+ dp[3] = (uint8_t)tmp;
}
+ lineSrc += m_nStride;
+ lineDst += pDst->m_nStride;
+ }
}
- return 1;
+ }
+ return 1;
}
diff --git a/core/src/fxcodec/jbig2/JBig2_Image.h b/core/src/fxcodec/jbig2/JBig2_Image.h
index 423bebcede..47215eaa3d 100644
--- a/core/src/fxcodec/jbig2/JBig2_Image.h
+++ b/core/src/fxcodec/jbig2/JBig2_Image.h
@@ -1,7 +1,7 @@
// Copyright 2014 PDFium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-
+
// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
#ifndef _JBIG2_IMAGE_H_
@@ -9,60 +9,85 @@
#include "JBig2_Define.h"
#include "JBig2_Module.h"
typedef enum {
- JBIG2_COMPOSE_OR = 0,
- JBIG2_COMPOSE_AND = 1,
- JBIG2_COMPOSE_XOR = 2,
- JBIG2_COMPOSE_XNOR = 3,
- JBIG2_COMPOSE_REPLACE = 4
+ JBIG2_COMPOSE_OR = 0,
+ JBIG2_COMPOSE_AND = 1,
+ JBIG2_COMPOSE_XOR = 2,
+ JBIG2_COMPOSE_XNOR = 3,
+ JBIG2_COMPOSE_REPLACE = 4
} JBig2ComposeOp;
struct FX_RECT;
-class CJBig2_Image : public CJBig2_Object
-{
-public:
-
- CJBig2_Image(int32_t w, int32_t h);
+class CJBig2_Image : public CJBig2_Object {
+ public:
+ CJBig2_Image(int32_t w, int32_t h);
- CJBig2_Image(int32_t w, int32_t h, int32_t stride, uint8_t*pBuf);
+ CJBig2_Image(int32_t w, int32_t h, int32_t stride, uint8_t* pBuf);
- CJBig2_Image(CJBig2_Image &im);
+ CJBig2_Image(CJBig2_Image& im);
- ~CJBig2_Image();
+ ~CJBig2_Image();
- FX_BOOL getPixel(int32_t x, int32_t y);
+ FX_BOOL getPixel(int32_t x, int32_t y);
- int32_t setPixel(int32_t x, int32_t y, FX_BOOL v);
+ int32_t setPixel(int32_t x, int32_t y, FX_BOOL v);
- void copyLine(int32_t hTo, int32_t hFrom);
+ void copyLine(int32_t hTo, int32_t hFrom);
- void fill(FX_BOOL v);
+ void fill(FX_BOOL v);
- FX_BOOL composeTo(CJBig2_Image *pDst, int32_t x, int32_t y, JBig2ComposeOp op);
- FX_BOOL composeTo(CJBig2_Image *pDst, int32_t x, int32_t y, JBig2ComposeOp op, const FX_RECT* pSrcRect);
+ FX_BOOL composeTo(CJBig2_Image* pDst,
+ int32_t x,
+ int32_t y,
+ JBig2ComposeOp op);
+ FX_BOOL composeTo(CJBig2_Image* pDst,
+ int32_t x,
+ int32_t y,
+ JBig2ComposeOp op,
+ const FX_RECT* pSrcRect);
- FX_BOOL composeTo_unopt(CJBig2_Image *pDst, int32_t x, int32_t y, JBig2ComposeOp op);
+ FX_BOOL composeTo_unopt(CJBig2_Image* pDst,
+ int32_t x,
+ int32_t y,
+ JBig2ComposeOp op);
- FX_BOOL composeTo_opt(CJBig2_Image *pDst, int32_t x, int32_t y, JBig2ComposeOp op);
+ FX_BOOL composeTo_opt(CJBig2_Image* pDst,
+ int32_t x,
+ int32_t y,
+ JBig2ComposeOp op);
- FX_BOOL composeTo_opt2(CJBig2_Image *pDst, int32_t x, int32_t y, JBig2ComposeOp op);
- FX_BOOL composeTo_opt2(CJBig2_Image *pDst, int32_t x, int32_t y, JBig2ComposeOp op, const FX_RECT* pSrcRect);
+ FX_BOOL composeTo_opt2(CJBig2_Image* pDst,
+ int32_t x,
+ int32_t y,
+ JBig2ComposeOp op);
+ FX_BOOL composeTo_opt2(CJBig2_Image* pDst,
+ int32_t x,
+ int32_t y,
+ JBig2ComposeOp op,
+ const FX_RECT* pSrcRect);
- FX_BOOL composeFrom(int32_t x, int32_t y, CJBig2_Image *pSrc, JBig2ComposeOp op);
- FX_BOOL composeFrom(int32_t x, int32_t y, CJBig2_Image *pSrc, JBig2ComposeOp op, const FX_RECT* pSrcRect);
- CJBig2_Image *subImage_unopt(int32_t x, int32_t y, int32_t w, int32_t h);
+ FX_BOOL composeFrom(int32_t x,
+ int32_t y,
+ CJBig2_Image* pSrc,
+ JBig2ComposeOp op);
+ FX_BOOL composeFrom(int32_t x,
+ int32_t y,
+ CJBig2_Image* pSrc,
+ JBig2ComposeOp op,
+ const FX_RECT* pSrcRect);
+ CJBig2_Image* subImage_unopt(int32_t x, int32_t y, int32_t w, int32_t h);
- CJBig2_Image *subImage(int32_t x, int32_t y, int32_t w, int32_t h);
+ CJBig2_Image* subImage(int32_t x, int32_t y, int32_t w, int32_t h);
- void expand(int32_t h, FX_BOOL v);
-public:
+ void expand(int32_t h, FX_BOOL v);
- int32_t m_nWidth;
+ public:
+ int32_t m_nWidth;
- int32_t m_nHeight;
+ int32_t m_nHeight;
- int32_t m_nStride;
+ int32_t m_nStride;
- uint8_t *m_pData;
+ uint8_t* m_pData;
- FX_BOOL m_bNeedFree;
+ FX_BOOL m_bNeedFree;
};
#endif
diff --git a/core/src/fxcodec/jbig2/JBig2_List.h b/core/src/fxcodec/jbig2/JBig2_List.h
index 19f99dec3d..be2d7cb7e4 100644
--- a/core/src/fxcodec/jbig2/JBig2_List.h
+++ b/core/src/fxcodec/jbig2/JBig2_List.h
@@ -1,7 +1,7 @@
// Copyright 2014 PDFium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-
+
// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
#ifndef _JBIG2_LIST_H_
@@ -9,59 +9,45 @@
#include "JBig2_Define.h"
#include "JBig2_Object.h"
template <class TYPE>
-class CJBig2_List : public CJBig2_Object
-{
-public:
-
- CJBig2_List(int32_t nSize = 8)
- {
- m_nSize = nSize;
- m_pArray = (TYPE**)m_pModule->JBig2_Malloc2(sizeof(TYPE*), nSize);
- m_nLength = 0;
- }
-
- ~CJBig2_List()
- {
- clear();
- m_pModule->JBig2_Free(m_pArray);
- }
-
- void clear()
- {
- int32_t i;
- for(i = 0; i < m_nLength; i++) {
- delete m_pArray[i];
- }
- m_nLength = 0;
+class CJBig2_List : public CJBig2_Object {
+ public:
+ CJBig2_List(int32_t nSize = 8) {
+ m_nSize = nSize;
+ m_pArray = (TYPE**)m_pModule->JBig2_Malloc2(sizeof(TYPE*), nSize);
+ m_nLength = 0;
+ }
+
+ ~CJBig2_List() {
+ clear();
+ m_pModule->JBig2_Free(m_pArray);
+ }
+
+ void clear() {
+ int32_t i;
+ for (i = 0; i < m_nLength; i++) {
+ delete m_pArray[i];
}
-
- void addItem(TYPE *pItem)
- {
- if(m_nLength >= m_nSize) {
- m_nSize += 8;
- m_pArray = (TYPE**)m_pModule->JBig2_Realloc(m_pArray, sizeof(TYPE*)*m_nSize);
- }
- m_pArray[m_nLength++] = pItem;
+ m_nLength = 0;
+ }
+
+ void addItem(TYPE* pItem) {
+ if (m_nLength >= m_nSize) {
+ m_nSize += 8;
+ m_pArray =
+ (TYPE**)m_pModule->JBig2_Realloc(m_pArray, sizeof(TYPE*) * m_nSize);
}
+ m_pArray[m_nLength++] = pItem;
+ }
+ int32_t getLength() { return m_nLength; }
- int32_t getLength()
- {
- return m_nLength;
- }
+ TYPE* getAt(int32_t nIndex) { return m_pArray[nIndex]; }
- TYPE *getAt(int32_t nIndex)
- {
- return m_pArray[nIndex];
- }
+ TYPE* getLast() { return m_pArray[m_nLength - 1]; }
- TYPE *getLast()
- {
- return m_pArray[m_nLength - 1];
- }
-private:
- int32_t m_nSize;
- TYPE **m_pArray;
- int32_t m_nLength;
+ private:
+ int32_t m_nSize;
+ TYPE** m_pArray;
+ int32_t m_nLength;
};
#endif
diff --git a/core/src/fxcodec/jbig2/JBig2_Module.h b/core/src/fxcodec/jbig2/JBig2_Module.h
index 5a96f4395e..c669afe696 100644
--- a/core/src/fxcodec/jbig2/JBig2_Module.h
+++ b/core/src/fxcodec/jbig2/JBig2_Module.h
@@ -1,33 +1,34 @@
// Copyright 2014 PDFium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-
+
// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
#ifndef _JBIG2_MODULE_H_
#define _JBIG2_MODULE_H_
#include "JBig2_Define.h"
-class CJBig2_Module
-{
-public:
- virtual ~CJBig2_Module() { }
+class CJBig2_Module {
+ public:
+ virtual ~CJBig2_Module() {}
- virtual void *JBig2_Malloc(FX_DWORD dwSize) = 0;
+ virtual void* JBig2_Malloc(FX_DWORD dwSize) = 0;
- virtual void *JBig2_Malloc2(FX_DWORD num, FX_DWORD dwSize) = 0;
+ virtual void* JBig2_Malloc2(FX_DWORD num, FX_DWORD dwSize) = 0;
- virtual void *JBig2_Malloc3(FX_DWORD num, FX_DWORD dwSize, FX_DWORD dwSize2) = 0;
+ virtual void* JBig2_Malloc3(FX_DWORD num,
+ FX_DWORD dwSize,
+ FX_DWORD dwSize2) = 0;
- virtual void *JBig2_Realloc(void* pMem, FX_DWORD dwSize) = 0;
+ virtual void* JBig2_Realloc(void* pMem, FX_DWORD dwSize) = 0;
- virtual void JBig2_Free(void* pMem) = 0;
+ virtual void JBig2_Free(void* pMem) = 0;
- virtual void JBig2_Assert(int32_t nExpression) {};
+ virtual void JBig2_Assert(int32_t nExpression){};
- virtual void JBig2_Error(const FX_CHAR* format, ...) {};
+ virtual void JBig2_Error(const FX_CHAR* format, ...){};
- virtual void JBig2_Warn(const FX_CHAR* format, ...) {};
+ virtual void JBig2_Warn(const FX_CHAR* format, ...){};
- virtual void JBig2_Log(const FX_CHAR* format, ...) {};
+ virtual void JBig2_Log(const FX_CHAR* format, ...){};
};
#endif
diff --git a/core/src/fxcodec/jbig2/JBig2_Object.cpp b/core/src/fxcodec/jbig2/JBig2_Object.cpp
index ae544d72d5..1b8d41b438 100644
--- a/core/src/fxcodec/jbig2/JBig2_Object.cpp
+++ b/core/src/fxcodec/jbig2/JBig2_Object.cpp
@@ -6,71 +6,77 @@
#include "JBig2_Object.h"
#include "JBig2_Module.h"
-void *CJBig2_Object::operator new(size_t size, CJBig2_Module *pModule, const FX_CHAR* filename, int line)
-{
- CJBig2_Object *p;
- p = (CJBig2_Object *)pModule->JBig2_Malloc((FX_DWORD)size);
- p->m_pModule = pModule;
- return p;
+void* CJBig2_Object::operator new(size_t size,
+ CJBig2_Module* pModule,
+ const FX_CHAR* filename,
+ int line) {
+ CJBig2_Object* p;
+ p = (CJBig2_Object*)pModule->JBig2_Malloc((FX_DWORD)size);
+ p->m_pModule = pModule;
+ return p;
}
-void CJBig2_Object::operator delete(void *p, CJBig2_Module *pModule, const FX_CHAR* filename, int line)
-{
- pModule->JBig2_Free(p);
+void CJBig2_Object::operator delete(void* p,
+ CJBig2_Module* pModule,
+ const FX_CHAR* filename,
+ int line) {
+ pModule->JBig2_Free(p);
}
-void *CJBig2_Object::operator new(size_t size, CJBig2_Module *pModule)
-{
- CJBig2_Object *p;
- p = (CJBig2_Object *)pModule->JBig2_Malloc((FX_DWORD)size);
- p->m_pModule = pModule;
- return p;
+void* CJBig2_Object::operator new(size_t size, CJBig2_Module* pModule) {
+ CJBig2_Object* p;
+ p = (CJBig2_Object*)pModule->JBig2_Malloc((FX_DWORD)size);
+ p->m_pModule = pModule;
+ return p;
}
-void CJBig2_Object::operator delete(void *p)
-{
- if (p) {
- ((CJBig2_Object *)p)->m_pModule->JBig2_Free(p);
- }
+void CJBig2_Object::operator delete(void* p) {
+ if (p) {
+ ((CJBig2_Object*)p)->m_pModule->JBig2_Free(p);
+ }
}
-void CJBig2_Object::operator delete(void *p, CJBig2_Module *pModule)
-{
- pModule->JBig2_Free(p);
+void CJBig2_Object::operator delete(void* p, CJBig2_Module* pModule) {
+ pModule->JBig2_Free(p);
}
-void *CJBig2_Object::operator new[](size_t size, CJBig2_Module *pModule, size_t unit_size,
- const FX_CHAR* filename, int line)
-{
- void *p;
- uint8_t *pCur, *pEnd;
- p = (uint8_t *)pModule->JBig2_Malloc((FX_DWORD)size);
- pCur = (uint8_t *)p;
- pEnd = pCur + size;
- for(; pCur < pEnd; pCur += unit_size) {
- ((CJBig2_Object *)pCur)->m_pModule = pModule;
- }
- return p;
+void* CJBig2_Object::operator new[](size_t size,
+ CJBig2_Module* pModule,
+ size_t unit_size,
+ const FX_CHAR* filename,
+ int line) {
+ void* p;
+ uint8_t *pCur, *pEnd;
+ p = (uint8_t*)pModule->JBig2_Malloc((FX_DWORD)size);
+ pCur = (uint8_t*)p;
+ pEnd = pCur + size;
+ for (; pCur < pEnd; pCur += unit_size) {
+ ((CJBig2_Object*)pCur)->m_pModule = pModule;
+ }
+ return p;
}
-void CJBig2_Object::operator delete[](void *p, CJBig2_Module *pModule, size_t unit_size,
- const FX_CHAR* filename, int line)
-{
- pModule->JBig2_Free(p);
+void CJBig2_Object::operator delete[](void* p,
+ CJBig2_Module* pModule,
+ size_t unit_size,
+ const FX_CHAR* filename,
+ int line) {
+ pModule->JBig2_Free(p);
}
-void *CJBig2_Object::operator new[](size_t size, CJBig2_Module *pModule, size_t unit_size)
-{
- void *p;
- uint8_t *pCur, *pEnd;
- p = (uint8_t *)pModule->JBig2_Malloc((FX_DWORD)size);
- pCur = (uint8_t *)p;
- pEnd = pCur + size;
- for(; pCur < pEnd; pCur += unit_size) {
- ((CJBig2_Object *)pCur)->m_pModule = pModule;
- }
- return p;
+void* CJBig2_Object::operator new[](size_t size,
+ CJBig2_Module* pModule,
+ size_t unit_size) {
+ void* p;
+ uint8_t *pCur, *pEnd;
+ p = (uint8_t*)pModule->JBig2_Malloc((FX_DWORD)size);
+ pCur = (uint8_t*)p;
+ pEnd = pCur + size;
+ for (; pCur < pEnd; pCur += unit_size) {
+ ((CJBig2_Object*)pCur)->m_pModule = pModule;
+ }
+ return p;
}
-void CJBig2_Object::operator delete[](void* p)
-{
- if (p) {
- ((CJBig2_Object *)p)->m_pModule->JBig2_Free(p);
- }
+void CJBig2_Object::operator delete[](void* p) {
+ if (p) {
+ ((CJBig2_Object*)p)->m_pModule->JBig2_Free(p);
+ }
}
-void CJBig2_Object::operator delete[](void *p, CJBig2_Module *pModule, size_t unit_size)
-{
- pModule->JBig2_Free(p);
+void CJBig2_Object::operator delete[](void* p,
+ CJBig2_Module* pModule,
+ size_t unit_size) {
+ pModule->JBig2_Free(p);
}
diff --git a/core/src/fxcodec/jbig2/JBig2_Object.h b/core/src/fxcodec/jbig2/JBig2_Object.h
index 150a8e7e99..bab1a16231 100644
--- a/core/src/fxcodec/jbig2/JBig2_Object.h
+++ b/core/src/fxcodec/jbig2/JBig2_Object.h
@@ -1,7 +1,7 @@
// Copyright 2014 PDFium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-
+
// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
#ifndef _JBIG2_OBJECT_H_
@@ -9,35 +9,47 @@
#include "JBig2_Define.h"
class CJBig2_Module;
#define _JBIG2_NO_EXPECTION_
-class CJBig2_Object
-{
-public:
-
- void *operator new(size_t size, CJBig2_Module *pModule, const FX_CHAR* filename, int line);
+class CJBig2_Object {
+ public:
+ void* operator new(size_t size,
+ CJBig2_Module* pModule,
+ const FX_CHAR* filename,
+ int line);
- void operator delete(void *p, CJBig2_Module *pModule, const FX_CHAR* filename, int line);
+ void operator delete(void* p,
+ CJBig2_Module* pModule,
+ const FX_CHAR* filename,
+ int line);
- void *operator new(size_t size, CJBig2_Module *pModule);
+ void* operator new(size_t size, CJBig2_Module* pModule);
- void operator delete(void *p);
+ void operator delete(void* p);
- void operator delete(void *p, CJBig2_Module *pModule);
+ void operator delete(void* p, CJBig2_Module* pModule);
- void *operator new[](size_t size, CJBig2_Module *pModule, size_t unit_size,
- const FX_CHAR* filename, int line);
+ void* operator new[](size_t size,
+ CJBig2_Module* pModule,
+ size_t unit_size,
+ const FX_CHAR* filename,
+ int line);
- void operator delete[](void *p, CJBig2_Module *pModule, size_t unit_size,
- const FX_CHAR* filename, int line);
+ void operator delete[](void* p,
+ CJBig2_Module* pModule,
+ size_t unit_size,
+ const FX_CHAR* filename,
+ int line);
- void *operator new[](size_t size, CJBig2_Module *pModule, size_t unit_size);
+ void* operator new[](size_t size, CJBig2_Module* pModule, size_t unit_size);
- void operator delete[](void* p);
+ void operator delete[](void* p);
- void operator delete[](void *p, CJBig2_Module *pModule, size_t unit_size);
-public:
+ void operator delete[](void* p, CJBig2_Module* pModule, size_t unit_size);
- CJBig2_Module *m_pModule;
+ public:
+ CJBig2_Module* m_pModule;
};
-#define JBIG2_NEW new(m_pModule)
-#define JBIG2_ALLOC(p, a) p = JBIG2_NEW a; p->m_pModule = m_pModule;
+#define JBIG2_NEW new (m_pModule)
+#define JBIG2_ALLOC(p, a) \
+ p = JBIG2_NEW a; \
+ p->m_pModule = m_pModule;
#endif
diff --git a/core/src/fxcodec/jbig2/JBig2_Page.h b/core/src/fxcodec/jbig2/JBig2_Page.h
index b07eba8a3a..5b2fa69678 100644
--- a/core/src/fxcodec/jbig2/JBig2_Page.h
+++ b/core/src/fxcodec/jbig2/JBig2_Page.h
@@ -1,19 +1,17 @@
// Copyright 2014 PDFium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-
+
// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
#ifndef _JBIG2_PAGE_H_
#define _JBIG2_PAGE_H_
#include "JBig2_Image.h"
struct JBig2PageInfo : public CJBig2_Object {
- FX_DWORD m_dwWidth,
- m_dwHeight;
- FX_DWORD m_dwResolutionX,
- m_dwResolutionY;
- uint8_t m_cFlags;
- FX_BOOL m_bIsStriped;
- FX_WORD m_wMaxStripeSize;
+ FX_DWORD m_dwWidth, m_dwHeight;
+ FX_DWORD m_dwResolutionX, m_dwResolutionY;
+ uint8_t m_cFlags;
+ FX_BOOL m_bIsStriped;
+ FX_WORD m_wMaxStripeSize;
};
#endif
diff --git a/core/src/fxcodec/jbig2/JBig2_PatternDict.cpp b/core/src/fxcodec/jbig2/JBig2_PatternDict.cpp
index df45288812..3469c36847 100644
--- a/core/src/fxcodec/jbig2/JBig2_PatternDict.cpp
+++ b/core/src/fxcodec/jbig2/JBig2_PatternDict.cpp
@@ -1,22 +1,20 @@
// Copyright 2014 PDFium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-
+
// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
#include "JBig2_PatternDict.h"
-CJBig2_PatternDict::CJBig2_PatternDict()
-{
- NUMPATS = 0;
- HDPATS = NULL;
+CJBig2_PatternDict::CJBig2_PatternDict() {
+ NUMPATS = 0;
+ HDPATS = NULL;
}
-CJBig2_PatternDict::~CJBig2_PatternDict()
-{
- if(HDPATS) {
- for(FX_DWORD i = 0; i < NUMPATS; i++) {
- delete HDPATS[i];
- }
- m_pModule->JBig2_Free(HDPATS);
+CJBig2_PatternDict::~CJBig2_PatternDict() {
+ if (HDPATS) {
+ for (FX_DWORD i = 0; i < NUMPATS; i++) {
+ delete HDPATS[i];
}
+ m_pModule->JBig2_Free(HDPATS);
+ }
}
diff --git a/core/src/fxcodec/jbig2/JBig2_PatternDict.h b/core/src/fxcodec/jbig2/JBig2_PatternDict.h
index b75cbde999..fd39bfd20b 100644
--- a/core/src/fxcodec/jbig2/JBig2_PatternDict.h
+++ b/core/src/fxcodec/jbig2/JBig2_PatternDict.h
@@ -1,22 +1,21 @@
// Copyright 2014 PDFium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-
+
// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
#ifndef _JBIG2_PATTERN_DICT_H_
#define _JBIG2_PATTERN_DICT_H_
#include "JBig2_Define.h"
#include "JBig2_Image.h"
-class CJBig2_PatternDict : public CJBig2_Object
-{
-public:
+class CJBig2_PatternDict : public CJBig2_Object {
+ public:
+ CJBig2_PatternDict();
- CJBig2_PatternDict();
+ ~CJBig2_PatternDict();
- ~CJBig2_PatternDict();
-public:
- FX_DWORD NUMPATS;
- CJBig2_Image **HDPATS;
+ public:
+ FX_DWORD NUMPATS;
+ CJBig2_Image** HDPATS;
};
#endif
diff --git a/core/src/fxcodec/jbig2/JBig2_Segment.cpp b/core/src/fxcodec/jbig2/JBig2_Segment.cpp
index b7eed35987..afbf71a3df 100644
--- a/core/src/fxcodec/jbig2/JBig2_Segment.cpp
+++ b/core/src/fxcodec/jbig2/JBig2_Segment.cpp
@@ -1,53 +1,49 @@
// Copyright 2014 PDFium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-
+
// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
#include "JBig2_Segment.h"
-CJBig2_Segment::CJBig2_Segment()
-{
- init();
+CJBig2_Segment::CJBig2_Segment() {
+ init();
}
-CJBig2_Segment::~CJBig2_Segment()
-{
- clean();
+CJBig2_Segment::~CJBig2_Segment() {
+ clean();
}
-void CJBig2_Segment::init()
-{
- m_dwNumber = 0;
- m_cFlags.c = 0;
- m_nReferred_to_segment_count = 0;
- m_pReferred_to_segment_numbers = NULL;
- m_dwPage_association = 0;
- m_dwData_length = 0;
- m_dwHeader_Length = 0;
- m_pData = NULL;
- m_State = JBIG2_SEGMENT_HEADER_UNPARSED;
- m_nResultType = JBIG2_VOID_POINTER;
- m_Result.vd = NULL;
+void CJBig2_Segment::init() {
+ m_dwNumber = 0;
+ m_cFlags.c = 0;
+ m_nReferred_to_segment_count = 0;
+ m_pReferred_to_segment_numbers = NULL;
+ m_dwPage_association = 0;
+ m_dwData_length = 0;
+ m_dwHeader_Length = 0;
+ m_pData = NULL;
+ m_State = JBIG2_SEGMENT_HEADER_UNPARSED;
+ m_nResultType = JBIG2_VOID_POINTER;
+ m_Result.vd = NULL;
}
-void CJBig2_Segment::clean()
-{
- if(m_pReferred_to_segment_numbers) {
- m_pModule->JBig2_Free(m_pReferred_to_segment_numbers);
- }
- if(m_Result.vd) {
- switch(m_nResultType) {
- case JBIG2_IMAGE_POINTER:
- delete m_Result.im;
- break;
- case JBIG2_SYMBOL_DICT_POINTER:
- delete m_Result.sd;
- break;
- case JBIG2_PATTERN_DICT_POINTER:
- delete m_Result.pd;
- break;
- case JBIG2_HUFFMAN_TABLE_POINTER:
- delete m_Result.ht;
- break;
- default:
- m_pModule->JBig2_Free(m_Result.vd);
- }
+void CJBig2_Segment::clean() {
+ if (m_pReferred_to_segment_numbers) {
+ m_pModule->JBig2_Free(m_pReferred_to_segment_numbers);
+ }
+ if (m_Result.vd) {
+ switch (m_nResultType) {
+ case JBIG2_IMAGE_POINTER:
+ delete m_Result.im;
+ break;
+ case JBIG2_SYMBOL_DICT_POINTER:
+ delete m_Result.sd;
+ break;
+ case JBIG2_PATTERN_DICT_POINTER:
+ delete m_Result.pd;
+ break;
+ case JBIG2_HUFFMAN_TABLE_POINTER:
+ delete m_Result.ht;
+ break;
+ default:
+ m_pModule->JBig2_Free(m_Result.vd);
}
+ }
}
diff --git a/core/src/fxcodec/jbig2/JBig2_Segment.h b/core/src/fxcodec/jbig2/JBig2_Segment.h
index b61e8e5075..c9c6d59cd7 100644
--- a/core/src/fxcodec/jbig2/JBig2_Segment.h
+++ b/core/src/fxcodec/jbig2/JBig2_Segment.h
@@ -1,7 +1,7 @@
// Copyright 2014 PDFium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-
+
// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
#ifndef _JBIG2_SEGMENT_H_
@@ -11,58 +11,58 @@
#include "JBig2_PatternDict.h"
#include "JBig2_Module.h"
#include "JBig2_HuffmanTable.h"
-#define JBIG2_GET_INT32(buf) (((buf)[0]<<24) | ((buf)[1]<<16) | ((buf)[2]<<8) | (buf)[3])
-#define JBIG2_GET_INT16(buf) (((buf)[0]<<8) | (buf)[1])
+#define JBIG2_GET_INT32(buf) \
+ (((buf)[0] << 24) | ((buf)[1] << 16) | ((buf)[2] << 8) | (buf)[3])
+#define JBIG2_GET_INT16(buf) (((buf)[0] << 8) | (buf)[1])
typedef enum {
- JBIG2_SEGMENT_HEADER_UNPARSED,
- JBIG2_SEGMENT_DATA_UNPARSED,
- JBIG2_SEGMENT_PARSE_COMPLETE,
- JBIG2_SEGMENT_PAUSED,
- JBIG2_SEGMENT_ERROR
+ JBIG2_SEGMENT_HEADER_UNPARSED,
+ JBIG2_SEGMENT_DATA_UNPARSED,
+ JBIG2_SEGMENT_PARSE_COMPLETE,
+ JBIG2_SEGMENT_PAUSED,
+ JBIG2_SEGMENT_ERROR
} JBig2_SegmentState;
typedef enum {
- JBIG2_VOID_POINTER = 0,
- JBIG2_IMAGE_POINTER,
- JBIG2_SYMBOL_DICT_POINTER,
- JBIG2_PATTERN_DICT_POINTER,
- JBIG2_HUFFMAN_TABLE_POINTER
+ JBIG2_VOID_POINTER = 0,
+ JBIG2_IMAGE_POINTER,
+ JBIG2_SYMBOL_DICT_POINTER,
+ JBIG2_PATTERN_DICT_POINTER,
+ JBIG2_HUFFMAN_TABLE_POINTER
} JBig2_ResultType;
-class CJBig2_Segment : public CJBig2_Object
-{
-public:
+class CJBig2_Segment : public CJBig2_Object {
+ public:
+ CJBig2_Segment();
- CJBig2_Segment();
+ ~CJBig2_Segment();
- ~CJBig2_Segment();
+ void init();
- void init();
+ void clean();
- void clean();
-public:
- FX_DWORD m_dwNumber;
- union {
- struct {
- uint8_t type : 6;
- uint8_t page_association_size : 1;
- uint8_t deferred_non_retain : 1;
- } s;
- uint8_t c;
- } m_cFlags;
- int32_t m_nReferred_to_segment_count;
- FX_DWORD * m_pReferred_to_segment_numbers;
- FX_DWORD m_dwPage_association;
- FX_DWORD m_dwData_length;
+ public:
+ FX_DWORD m_dwNumber;
+ union {
+ struct {
+ uint8_t type : 6;
+ uint8_t page_association_size : 1;
+ uint8_t deferred_non_retain : 1;
+ } s;
+ uint8_t c;
+ } m_cFlags;
+ int32_t m_nReferred_to_segment_count;
+ FX_DWORD* m_pReferred_to_segment_numbers;
+ FX_DWORD m_dwPage_association;
+ FX_DWORD m_dwData_length;
- FX_DWORD m_dwHeader_Length;
- uint8_t *m_pData;
- JBig2_SegmentState m_State;
- JBig2_ResultType m_nResultType;
- union {
- CJBig2_SymbolDict *sd;
- CJBig2_PatternDict *pd;
- CJBig2_Image *im;
- CJBig2_HuffmanTable *ht;
- void* vd;
- } m_Result;
+ FX_DWORD m_dwHeader_Length;
+ uint8_t* m_pData;
+ JBig2_SegmentState m_State;
+ JBig2_ResultType m_nResultType;
+ union {
+ CJBig2_SymbolDict* sd;
+ CJBig2_PatternDict* pd;
+ CJBig2_Image* im;
+ CJBig2_HuffmanTable* ht;
+ void* vd;
+ } m_Result;
};
#endif
diff --git a/core/src/fxcodec/jbig2/JBig2_SymbolDict.cpp b/core/src/fxcodec/jbig2/JBig2_SymbolDict.cpp
index 0e5b92ff5a..2287b91840 100644
--- a/core/src/fxcodec/jbig2/JBig2_SymbolDict.cpp
+++ b/core/src/fxcodec/jbig2/JBig2_SymbolDict.cpp
@@ -1,56 +1,50 @@
// Copyright 2014 PDFium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-
+
// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
#include "JBig2_SymbolDict.h"
-CJBig2_SymbolDict::CJBig2_SymbolDict()
-{
- SDNUMEXSYMS = 0;
- SDEXSYMS = NULL;
- m_bContextRetained = FALSE;
- m_gbContext = m_grContext = NULL;
+CJBig2_SymbolDict::CJBig2_SymbolDict() {
+ SDNUMEXSYMS = 0;
+ SDEXSYMS = NULL;
+ m_bContextRetained = FALSE;
+ m_gbContext = m_grContext = NULL;
}
-CJBig2_SymbolDict *CJBig2_SymbolDict::DeepCopy()
-{
- CJBig2_SymbolDict *dst = NULL;
- CJBig2_SymbolDict *src = this;
- if (src->m_bContextRetained ||
- src->m_gbContext ||
- src->m_grContext) {
- return NULL;
- }
- JBIG2_ALLOC(dst, CJBig2_SymbolDict());
- dst->SDNUMEXSYMS = src->SDNUMEXSYMS;
- dst->SDEXSYMS = (CJBig2_Image**)m_pModule->JBig2_Malloc2(
- sizeof(CJBig2_Image*), src->SDNUMEXSYMS);
- for(FX_DWORD i = 0; i < src->SDNUMEXSYMS; i++) {
- if (src->SDEXSYMS[i]) {
- JBIG2_ALLOC(dst->SDEXSYMS[i],
- CJBig2_Image(*(src->SDEXSYMS[i])));
- } else {
- dst->SDEXSYMS[i] = NULL;
- }
+CJBig2_SymbolDict* CJBig2_SymbolDict::DeepCopy() {
+ CJBig2_SymbolDict* dst = NULL;
+ CJBig2_SymbolDict* src = this;
+ if (src->m_bContextRetained || src->m_gbContext || src->m_grContext) {
+ return NULL;
+ }
+ JBIG2_ALLOC(dst, CJBig2_SymbolDict());
+ dst->SDNUMEXSYMS = src->SDNUMEXSYMS;
+ dst->SDEXSYMS = (CJBig2_Image**)m_pModule->JBig2_Malloc2(
+ sizeof(CJBig2_Image*), src->SDNUMEXSYMS);
+ for (FX_DWORD i = 0; i < src->SDNUMEXSYMS; i++) {
+ if (src->SDEXSYMS[i]) {
+ JBIG2_ALLOC(dst->SDEXSYMS[i], CJBig2_Image(*(src->SDEXSYMS[i])));
+ } else {
+ dst->SDEXSYMS[i] = NULL;
}
- return dst;
+ }
+ return dst;
}
-CJBig2_SymbolDict::~CJBig2_SymbolDict()
-{
- if(SDEXSYMS) {
- for(FX_DWORD i = 0; i < SDNUMEXSYMS; i++) {
- delete SDEXSYMS[i];
- }
- m_pModule->JBig2_Free(SDEXSYMS);
+CJBig2_SymbolDict::~CJBig2_SymbolDict() {
+ if (SDEXSYMS) {
+ for (FX_DWORD i = 0; i < SDNUMEXSYMS; i++) {
+ delete SDEXSYMS[i];
+ }
+ m_pModule->JBig2_Free(SDEXSYMS);
+ }
+ if (m_bContextRetained) {
+ if (m_gbContext) {
+ m_pModule->JBig2_Free(m_gbContext);
}
- if(m_bContextRetained) {
- if(m_gbContext) {
- m_pModule->JBig2_Free(m_gbContext);
- }
- if(m_grContext) {
- m_pModule->JBig2_Free(m_grContext);
- }
+ if (m_grContext) {
+ m_pModule->JBig2_Free(m_grContext);
}
+ }
}
diff --git a/core/src/fxcodec/jbig2/JBig2_SymbolDict.h b/core/src/fxcodec/jbig2/JBig2_SymbolDict.h
index 9156e30ea8..1a074415bf 100644
--- a/core/src/fxcodec/jbig2/JBig2_SymbolDict.h
+++ b/core/src/fxcodec/jbig2/JBig2_SymbolDict.h
@@ -1,7 +1,7 @@
// Copyright 2014 PDFium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-
+
// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
#ifndef _JBIG2_SYMBOL_DICT_H_
@@ -9,18 +9,16 @@
#include "JBig2_Define.h"
#include "JBig2_ArithDecoder.h"
#include "JBig2_Image.h"
-class CJBig2_SymbolDict : public CJBig2_Object
-{
-public:
+class CJBig2_SymbolDict : public CJBig2_Object {
+ public:
+ CJBig2_SymbolDict();
+ CJBig2_SymbolDict* DeepCopy();
+ ~CJBig2_SymbolDict();
- CJBig2_SymbolDict();
- CJBig2_SymbolDict *DeepCopy();
- ~CJBig2_SymbolDict();
-public:
- FX_DWORD SDNUMEXSYMS;
- CJBig2_Image **SDEXSYMS;
- FX_BOOL m_bContextRetained;
- JBig2ArithCtx *m_gbContext,
- *m_grContext;
+ public:
+ FX_DWORD SDNUMEXSYMS;
+ CJBig2_Image** SDEXSYMS;
+ FX_BOOL m_bContextRetained;
+ JBig2ArithCtx *m_gbContext, *m_grContext;
};
#endif
diff --git a/core/src/fxcrt/extension.h b/core/src/fxcrt/extension.h
index ba42916599..6005edb2af 100644
--- a/core/src/fxcrt/extension.h
+++ b/core/src/fxcrt/extension.h
@@ -10,427 +10,404 @@
#include "../../include/fxcrt/fx_basic.h"
#include "../../include/fxcrt/fx_safe_types.h"
-class IFXCRT_FileAccess
-{
-public:
- virtual ~IFXCRT_FileAccess() {}
- virtual FX_BOOL Open(const CFX_ByteStringC& fileName, FX_DWORD dwMode) = 0;
- virtual FX_BOOL Open(const CFX_WideStringC& fileName, FX_DWORD dwMode) = 0;
- virtual void Close() = 0;
- virtual void Release() = 0;
- virtual FX_FILESIZE GetSize() const = 0;
- virtual FX_FILESIZE GetPosition() const = 0;
- virtual FX_FILESIZE SetPosition(FX_FILESIZE pos) = 0;
- virtual size_t Read(void* pBuffer, size_t szBuffer) = 0;
- virtual size_t Write(const void* pBuffer, size_t szBuffer) = 0;
- virtual size_t ReadPos(void* pBuffer, size_t szBuffer, FX_FILESIZE pos) = 0;
- virtual size_t WritePos(const void* pBuffer, size_t szBuffer, FX_FILESIZE pos) = 0;
- virtual FX_BOOL Flush() = 0;
- virtual FX_BOOL Truncate(FX_FILESIZE szFile) = 0;
+class IFXCRT_FileAccess {
+ public:
+ virtual ~IFXCRT_FileAccess() {}
+ virtual FX_BOOL Open(const CFX_ByteStringC& fileName, FX_DWORD dwMode) = 0;
+ virtual FX_BOOL Open(const CFX_WideStringC& fileName, FX_DWORD dwMode) = 0;
+ virtual void Close() = 0;
+ virtual void Release() = 0;
+ virtual FX_FILESIZE GetSize() const = 0;
+ virtual FX_FILESIZE GetPosition() const = 0;
+ virtual FX_FILESIZE SetPosition(FX_FILESIZE pos) = 0;
+ virtual size_t Read(void* pBuffer, size_t szBuffer) = 0;
+ virtual size_t Write(const void* pBuffer, size_t szBuffer) = 0;
+ virtual size_t ReadPos(void* pBuffer, size_t szBuffer, FX_FILESIZE pos) = 0;
+ virtual size_t WritePos(const void* pBuffer,
+ size_t szBuffer,
+ FX_FILESIZE pos) = 0;
+ virtual FX_BOOL Flush() = 0;
+ virtual FX_BOOL Truncate(FX_FILESIZE szFile) = 0;
};
-IFXCRT_FileAccess* FXCRT_FileAccess_Create();
-class CFX_CRTFileStream final : public IFX_FileStream
-{
-public:
- CFX_CRTFileStream(IFXCRT_FileAccess* pFA) : m_pFile(pFA), m_dwCount(1), m_bUseRange(FALSE), m_nOffset(0), m_nSize(0) {}
- ~CFX_CRTFileStream()
- {
- if (m_pFile) {
- m_pFile->Release();
- }
- }
- virtual IFX_FileStream* Retain() override
- {
- m_dwCount ++;
- return this;
- }
- virtual void Release() override
- {
- FX_DWORD nCount = -- m_dwCount;
- if (!nCount) {
- delete this;
- }
- }
- virtual FX_FILESIZE GetSize() override
- {
- return m_bUseRange ? m_nSize : m_pFile->GetSize();
- }
- virtual FX_BOOL IsEOF() override
- {
- return GetPosition() >= GetSize();
- }
- virtual FX_FILESIZE GetPosition() override
- {
- FX_FILESIZE pos = m_pFile->GetPosition();
- if (m_bUseRange) {
- pos -= m_nOffset;
- }
- return pos;
+IFXCRT_FileAccess* FXCRT_FileAccess_Create();
+class CFX_CRTFileStream final : public IFX_FileStream {
+ public:
+ CFX_CRTFileStream(IFXCRT_FileAccess* pFA)
+ : m_pFile(pFA),
+ m_dwCount(1),
+ m_bUseRange(FALSE),
+ m_nOffset(0),
+ m_nSize(0) {}
+ ~CFX_CRTFileStream() {
+ if (m_pFile) {
+ m_pFile->Release();
+ }
+ }
+ virtual IFX_FileStream* Retain() override {
+ m_dwCount++;
+ return this;
+ }
+ virtual void Release() override {
+ FX_DWORD nCount = --m_dwCount;
+ if (!nCount) {
+ delete this;
+ }
+ }
+ virtual FX_FILESIZE GetSize() override {
+ return m_bUseRange ? m_nSize : m_pFile->GetSize();
+ }
+ virtual FX_BOOL IsEOF() override { return GetPosition() >= GetSize(); }
+ virtual FX_FILESIZE GetPosition() override {
+ FX_FILESIZE pos = m_pFile->GetPosition();
+ if (m_bUseRange) {
+ pos -= m_nOffset;
+ }
+ return pos;
+ }
+ virtual FX_BOOL SetRange(FX_FILESIZE offset, FX_FILESIZE size) override {
+ if (offset < 0 || size < 0) {
+ return FALSE;
}
- virtual FX_BOOL SetRange(FX_FILESIZE offset, FX_FILESIZE size) override
- {
- if (offset < 0 || size < 0) {
- return FALSE;
- }
- FX_SAFE_FILESIZE pos = size;
- pos += offset;
+ FX_SAFE_FILESIZE pos = size;
+ pos += offset;
- if (!pos.IsValid() || pos.ValueOrDie() > m_pFile->GetSize()) {
- return FALSE;
- }
+ if (!pos.IsValid() || pos.ValueOrDie() > m_pFile->GetSize()) {
+ return FALSE;
+ }
- m_nOffset = offset, m_nSize = size;
- m_bUseRange = TRUE;
- m_pFile->SetPosition(m_nOffset);
- return TRUE;
- }
- virtual void ClearRange() override
- {
- m_bUseRange = FALSE;
- }
- virtual FX_BOOL ReadBlock(void* buffer, FX_FILESIZE offset, size_t size) override
- {
- if (m_bUseRange && offset < 0) {
- return FALSE;
- }
- FX_SAFE_FILESIZE pos = offset;
+ m_nOffset = offset, m_nSize = size;
+ m_bUseRange = TRUE;
+ m_pFile->SetPosition(m_nOffset);
+ return TRUE;
+ }
+ virtual void ClearRange() override { m_bUseRange = FALSE; }
+ virtual FX_BOOL ReadBlock(void* buffer,
+ FX_FILESIZE offset,
+ size_t size) override {
+ if (m_bUseRange && offset < 0) {
+ return FALSE;
+ }
+ FX_SAFE_FILESIZE pos = offset;
- if (m_bUseRange) {
- pos += m_nOffset;
- if (!pos.IsValid() || pos.ValueOrDie() > (size_t)GetSize()) {
- return FALSE;
- }
- }
- return (FX_BOOL)m_pFile->ReadPos(buffer, size, pos.ValueOrDie());
- }
- virtual size_t ReadBlock(void* buffer, size_t size) override
- {
- if (m_bUseRange) {
- FX_FILESIZE availSize = m_nOffset + m_nSize - m_pFile->GetPosition();
- if ((size_t)availSize < size) {
- size -= size - (size_t)availSize;
- }
- }
- return m_pFile->Read(buffer, size);
- }
- virtual FX_BOOL WriteBlock(const void* buffer, FX_FILESIZE offset, size_t size) override
- {
- if (m_bUseRange) {
- offset += m_nOffset;
- }
- return (FX_BOOL)m_pFile->WritePos(buffer, size, offset);
- }
- virtual FX_BOOL Flush() override
- {
- return m_pFile->Flush();
- }
- IFXCRT_FileAccess* m_pFile;
- FX_DWORD m_dwCount;
- FX_BOOL m_bUseRange;
- FX_FILESIZE m_nOffset;
- FX_FILESIZE m_nSize;
+ if (m_bUseRange) {
+ pos += m_nOffset;
+ if (!pos.IsValid() || pos.ValueOrDie() > (size_t)GetSize()) {
+ return FALSE;
+ }
+ }
+ return (FX_BOOL)m_pFile->ReadPos(buffer, size, pos.ValueOrDie());
+ }
+ virtual size_t ReadBlock(void* buffer, size_t size) override {
+ if (m_bUseRange) {
+ FX_FILESIZE availSize = m_nOffset + m_nSize - m_pFile->GetPosition();
+ if ((size_t)availSize < size) {
+ size -= size - (size_t)availSize;
+ }
+ }
+ return m_pFile->Read(buffer, size);
+ }
+ virtual FX_BOOL WriteBlock(const void* buffer,
+ FX_FILESIZE offset,
+ size_t size) override {
+ if (m_bUseRange) {
+ offset += m_nOffset;
+ }
+ return (FX_BOOL)m_pFile->WritePos(buffer, size, offset);
+ }
+ virtual FX_BOOL Flush() override { return m_pFile->Flush(); }
+ IFXCRT_FileAccess* m_pFile;
+ FX_DWORD m_dwCount;
+ FX_BOOL m_bUseRange;
+ FX_FILESIZE m_nOffset;
+ FX_FILESIZE m_nSize;
};
-#define FX_MEMSTREAM_BlockSize (64 * 1024)
-#define FX_MEMSTREAM_Consecutive 0x01
-#define FX_MEMSTREAM_TakeOver 0x02
-class CFX_MemoryStream final : public IFX_MemoryStream
-{
-public:
- CFX_MemoryStream(FX_BOOL bConsecutive)
- : m_dwCount(1)
- , m_nTotalSize(0)
- , m_nCurSize(0)
- , m_nCurPos(0)
- , m_nGrowSize(FX_MEMSTREAM_BlockSize)
- , m_bUseRange(FALSE)
- {
- m_dwFlags = FX_MEMSTREAM_TakeOver | (bConsecutive ? FX_MEMSTREAM_Consecutive : 0);
- }
- CFX_MemoryStream(uint8_t* pBuffer, size_t nSize, FX_BOOL bTakeOver)
- : m_dwCount(1)
- , m_nTotalSize(nSize)
- , m_nCurSize(nSize)
- , m_nCurPos(0)
- , m_nGrowSize(FX_MEMSTREAM_BlockSize)
- , m_bUseRange(FALSE)
- {
- m_Blocks.Add(pBuffer);
- m_dwFlags = FX_MEMSTREAM_Consecutive | (bTakeOver ? FX_MEMSTREAM_TakeOver : 0);
- }
- ~CFX_MemoryStream()
- {
- if (m_dwFlags & FX_MEMSTREAM_TakeOver) {
- for (int32_t i = 0; i < m_Blocks.GetSize(); i++) {
- FX_Free((uint8_t*)m_Blocks[i]);
- }
- }
- m_Blocks.RemoveAll();
- }
- virtual IFX_FileStream* Retain() override
- {
- m_dwCount ++;
- return this;
- }
- virtual void Release() override
- {
- FX_DWORD nCount = -- m_dwCount;
- if (nCount) {
- return;
- }
- delete this;
- }
- virtual FX_FILESIZE GetSize() override
- {
- return m_bUseRange ? (FX_FILESIZE) m_nSize : (FX_FILESIZE)m_nCurSize;
+#define FX_MEMSTREAM_BlockSize (64 * 1024)
+#define FX_MEMSTREAM_Consecutive 0x01
+#define FX_MEMSTREAM_TakeOver 0x02
+class CFX_MemoryStream final : public IFX_MemoryStream {
+ public:
+ CFX_MemoryStream(FX_BOOL bConsecutive)
+ : m_dwCount(1),
+ m_nTotalSize(0),
+ m_nCurSize(0),
+ m_nCurPos(0),
+ m_nGrowSize(FX_MEMSTREAM_BlockSize),
+ m_bUseRange(FALSE) {
+ m_dwFlags =
+ FX_MEMSTREAM_TakeOver | (bConsecutive ? FX_MEMSTREAM_Consecutive : 0);
+ }
+ CFX_MemoryStream(uint8_t* pBuffer, size_t nSize, FX_BOOL bTakeOver)
+ : m_dwCount(1),
+ m_nTotalSize(nSize),
+ m_nCurSize(nSize),
+ m_nCurPos(0),
+ m_nGrowSize(FX_MEMSTREAM_BlockSize),
+ m_bUseRange(FALSE) {
+ m_Blocks.Add(pBuffer);
+ m_dwFlags =
+ FX_MEMSTREAM_Consecutive | (bTakeOver ? FX_MEMSTREAM_TakeOver : 0);
+ }
+ ~CFX_MemoryStream() {
+ if (m_dwFlags & FX_MEMSTREAM_TakeOver) {
+ for (int32_t i = 0; i < m_Blocks.GetSize(); i++) {
+ FX_Free((uint8_t*)m_Blocks[i]);
+ }
+ }
+ m_Blocks.RemoveAll();
+ }
+ virtual IFX_FileStream* Retain() override {
+ m_dwCount++;
+ return this;
+ }
+ virtual void Release() override {
+ FX_DWORD nCount = --m_dwCount;
+ if (nCount) {
+ return;
+ }
+ delete this;
+ }
+ virtual FX_FILESIZE GetSize() override {
+ return m_bUseRange ? (FX_FILESIZE)m_nSize : (FX_FILESIZE)m_nCurSize;
+ }
+ virtual FX_BOOL IsEOF() override { return m_nCurPos >= (size_t)GetSize(); }
+ virtual FX_FILESIZE GetPosition() override {
+ FX_FILESIZE pos = (FX_FILESIZE)m_nCurPos;
+ if (m_bUseRange) {
+ pos -= (FX_FILESIZE)m_nOffset;
+ }
+ return pos;
+ }
+ virtual FX_BOOL SetRange(FX_FILESIZE offset, FX_FILESIZE size) override {
+ if (offset < 0 || size < 0) {
+ return FALSE;
+ }
+ FX_SAFE_FILESIZE range = size;
+ range += offset;
+ if (!range.IsValid() || range.ValueOrDie() > m_nCurSize) {
+ return FALSE;
}
- virtual FX_BOOL IsEOF() override
- {
- return m_nCurPos >= (size_t)GetSize();
- }
- virtual FX_FILESIZE GetPosition() override
- {
- FX_FILESIZE pos = (FX_FILESIZE)m_nCurPos;
- if (m_bUseRange) {
- pos -= (FX_FILESIZE)m_nOffset;
- }
- return pos;
+
+ m_nOffset = (size_t)offset, m_nSize = (size_t)size;
+ m_bUseRange = TRUE;
+ m_nCurPos = m_nOffset;
+ return TRUE;
+ }
+ virtual void ClearRange() override { m_bUseRange = FALSE; }
+ virtual FX_BOOL ReadBlock(void* buffer,
+ FX_FILESIZE offset,
+ size_t size) override {
+ if (!buffer || !size) {
+ return FALSE;
}
- virtual FX_BOOL SetRange(FX_FILESIZE offset, FX_FILESIZE size) override
- {
- if (offset < 0 || size < 0) {
- return FALSE;
- }
- FX_SAFE_FILESIZE range = size;
- range += offset;
- if (!range.IsValid() || range.ValueOrDie() > m_nCurSize) {
- return FALSE;
- }
- m_nOffset = (size_t)offset, m_nSize = (size_t)size;
- m_bUseRange = TRUE;
- m_nCurPos = m_nOffset;
- return TRUE;
- }
- virtual void ClearRange() override
- {
- m_bUseRange = FALSE;
- }
- virtual FX_BOOL ReadBlock(void* buffer, FX_FILESIZE offset, size_t size) override
- {
- if (!buffer || !size) {
- return FALSE;
- }
+ FX_SAFE_FILESIZE safeOffset = offset;
+ if (m_bUseRange) {
+ safeOffset += m_nOffset;
+ }
- FX_SAFE_FILESIZE safeOffset = offset;
- if (m_bUseRange) {
- safeOffset += m_nOffset;
- }
+ if (!safeOffset.IsValid()) {
+ return FALSE;
+ }
- if (!safeOffset.IsValid()) {
- return FALSE;
- }
+ offset = safeOffset.ValueOrDie();
- offset = safeOffset.ValueOrDie();
+ FX_SAFE_SIZE_T newPos = size;
+ newPos += offset;
+ if (!newPos.IsValid() || newPos.ValueOrDefault(0) == 0 ||
+ newPos.ValueOrDie() > m_nCurSize) {
+ return FALSE;
+ }
- FX_SAFE_SIZE_T newPos = size;
- newPos += offset;
- if (!newPos.IsValid() || newPos.ValueOrDefault(0) == 0 || newPos.ValueOrDie() > m_nCurSize) {
- return FALSE;
- }
+ m_nCurPos = newPos.ValueOrDie();
+ if (m_dwFlags & FX_MEMSTREAM_Consecutive) {
+ FXSYS_memcpy(buffer, (uint8_t*)m_Blocks[0] + (size_t)offset, size);
+ return TRUE;
+ }
+ size_t nStartBlock = (size_t)offset / m_nGrowSize;
+ offset -= (FX_FILESIZE)(nStartBlock * m_nGrowSize);
+ while (size) {
+ size_t nRead = m_nGrowSize - (size_t)offset;
+ if (nRead > size) {
+ nRead = size;
+ }
+ FXSYS_memcpy(
+ buffer, (uint8_t*)m_Blocks[(int)nStartBlock] + (size_t)offset, nRead);
+ buffer = ((uint8_t*)buffer) + nRead;
+ size -= nRead;
+ nStartBlock++;
+ offset = 0;
+ }
+ return TRUE;
+ }
+ virtual size_t ReadBlock(void* buffer, size_t size) override {
+ if (m_nCurPos >= m_nCurSize) {
+ return 0;
+ }
+ if (m_bUseRange) {
+ size_t availSize = m_nOffset + m_nSize - m_nCurPos;
+ if (availSize < size) {
+ size -= size - (size_t)availSize;
+ }
+ }
+ size_t nRead = FX_MIN(size, m_nCurSize - m_nCurPos);
+ if (!ReadBlock(buffer, (int32_t)m_nCurPos, nRead)) {
+ return 0;
+ }
+ return nRead;
+ }
+ virtual FX_BOOL WriteBlock(const void* buffer,
+ FX_FILESIZE offset,
+ size_t size) override {
+ if (!buffer || !size) {
+ return FALSE;
+ }
+ if (m_bUseRange) {
+ offset += (FX_FILESIZE)m_nOffset;
+ }
+ if (m_dwFlags & FX_MEMSTREAM_Consecutive) {
+ FX_SAFE_SIZE_T newPos = size;
+ newPos += offset;
+ if (!newPos.IsValid())
+ return FALSE;
- m_nCurPos = newPos.ValueOrDie();
- if (m_dwFlags & FX_MEMSTREAM_Consecutive) {
- FXSYS_memcpy(buffer, (uint8_t*)m_Blocks[0] + (size_t)offset, size);
- return TRUE;
- }
- size_t nStartBlock = (size_t)offset / m_nGrowSize;
- offset -= (FX_FILESIZE)(nStartBlock * m_nGrowSize);
- while (size) {
- size_t nRead = m_nGrowSize - (size_t)offset;
- if (nRead > size) {
- nRead = size;
- }
- FXSYS_memcpy(buffer, (uint8_t*)m_Blocks[(int)nStartBlock] + (size_t)offset, nRead);
- buffer = ((uint8_t*)buffer) + nRead;
- size -= nRead;
- nStartBlock ++;
- offset = 0;
- }
- return TRUE;
+ m_nCurPos = newPos.ValueOrDie();
+ if (m_nCurPos > m_nTotalSize) {
+ m_nTotalSize =
+ (m_nCurPos + m_nGrowSize - 1) / m_nGrowSize * m_nGrowSize;
+ if (m_Blocks.GetSize() < 1) {
+ void* block = FX_Alloc(uint8_t, m_nTotalSize);
+ m_Blocks.Add(block);
+ } else {
+ m_Blocks[0] = FX_Realloc(uint8_t, m_Blocks[0], m_nTotalSize);
+ }
+ if (!m_Blocks[0]) {
+ m_Blocks.RemoveAll();
+ return FALSE;
+ }
+ }
+ FXSYS_memcpy((uint8_t*)m_Blocks[0] + (size_t)offset, buffer, size);
+ if (m_nCurSize < m_nCurPos) {
+ m_nCurSize = m_nCurPos;
+ }
+ return TRUE;
}
- virtual size_t ReadBlock(void* buffer, size_t size) override
- {
- if (m_nCurPos >= m_nCurSize) {
- return 0;
- }
- if (m_bUseRange) {
- size_t availSize = m_nOffset + m_nSize - m_nCurPos;
- if (availSize < size) {
- size -= size - (size_t)availSize;
- }
- }
- size_t nRead = FX_MIN(size, m_nCurSize - m_nCurPos);
- if (!ReadBlock(buffer, (int32_t)m_nCurPos, nRead)) {
- return 0;
- }
- return nRead;
- }
- virtual FX_BOOL WriteBlock(const void* buffer, FX_FILESIZE offset, size_t size) override
- {
- if (!buffer || !size) {
- return FALSE;
- }
- if (m_bUseRange) {
- offset += (FX_FILESIZE)m_nOffset;
- }
- if (m_dwFlags & FX_MEMSTREAM_Consecutive) {
- FX_SAFE_SIZE_T newPos = size;
- newPos += offset;
- if (!newPos.IsValid())
- return FALSE;
- m_nCurPos = newPos.ValueOrDie();
- if (m_nCurPos > m_nTotalSize) {
- m_nTotalSize = (m_nCurPos + m_nGrowSize - 1) / m_nGrowSize * m_nGrowSize;
- if (m_Blocks.GetSize() < 1) {
- void* block = FX_Alloc(uint8_t, m_nTotalSize);
- m_Blocks.Add(block);
- } else {
- m_Blocks[0] = FX_Realloc(uint8_t, m_Blocks[0], m_nTotalSize);
- }
- if (!m_Blocks[0]) {
- m_Blocks.RemoveAll();
- return FALSE;
- }
- }
- FXSYS_memcpy((uint8_t*)m_Blocks[0] + (size_t)offset, buffer, size);
- if (m_nCurSize < m_nCurPos) {
- m_nCurSize = m_nCurPos;
- }
- return TRUE;
- }
+ FX_SAFE_SIZE_T newPos = size;
+ newPos += offset;
+ if (!newPos.IsValid()) {
+ return FALSE;
+ }
- FX_SAFE_SIZE_T newPos = size;
- newPos += offset;
- if (!newPos.IsValid()) {
- return FALSE;
- }
+ if (!ExpandBlocks(newPos.ValueOrDie())) {
+ return FALSE;
+ }
+ m_nCurPos = newPos.ValueOrDie();
+ size_t nStartBlock = (size_t)offset / m_nGrowSize;
+ offset -= (FX_FILESIZE)(nStartBlock * m_nGrowSize);
+ while (size) {
+ size_t nWrite = m_nGrowSize - (size_t)offset;
+ if (nWrite > size) {
+ nWrite = size;
+ }
+ FXSYS_memcpy((uint8_t*)m_Blocks[(int)nStartBlock] + (size_t)offset,
+ buffer, nWrite);
+ buffer = ((uint8_t*)buffer) + nWrite;
+ size -= nWrite;
+ nStartBlock++;
+ offset = 0;
+ }
+ return TRUE;
+ }
+ virtual FX_BOOL Flush() override { return TRUE; }
+ virtual FX_BOOL IsConsecutive() const override {
+ return m_dwFlags & FX_MEMSTREAM_Consecutive;
+ }
+ virtual void EstimateSize(size_t nInitSize, size_t nGrowSize) override {
+ if (m_dwFlags & FX_MEMSTREAM_Consecutive) {
+ if (m_Blocks.GetSize() < 1) {
+ uint8_t* pBlock = FX_Alloc(uint8_t, FX_MAX(nInitSize, 4096));
+ m_Blocks.Add(pBlock);
+ }
+ m_nGrowSize = FX_MAX(nGrowSize, 4096);
+ } else if (m_Blocks.GetSize() < 1) {
+ m_nGrowSize = FX_MAX(nGrowSize, 4096);
+ }
+ }
+ virtual uint8_t* GetBuffer() const override {
+ return m_Blocks.GetSize() ? (uint8_t*)m_Blocks[0] : NULL;
+ }
+ virtual void AttachBuffer(uint8_t* pBuffer,
+ size_t nSize,
+ FX_BOOL bTakeOver = FALSE) override {
+ if (!(m_dwFlags & FX_MEMSTREAM_Consecutive)) {
+ return;
+ }
+ m_Blocks.RemoveAll();
+ m_Blocks.Add(pBuffer);
+ m_nTotalSize = m_nCurSize = nSize;
+ m_nCurPos = 0;
+ m_dwFlags =
+ FX_MEMSTREAM_Consecutive | (bTakeOver ? FX_MEMSTREAM_TakeOver : 0);
+ ClearRange();
+ }
+ virtual void DetachBuffer() override {
+ if (!(m_dwFlags & FX_MEMSTREAM_Consecutive)) {
+ return;
+ }
+ m_Blocks.RemoveAll();
+ m_nTotalSize = m_nCurSize = m_nCurPos = 0;
+ m_dwFlags = FX_MEMSTREAM_TakeOver;
+ ClearRange();
+ }
- if (!ExpandBlocks(newPos.ValueOrDie())) {
- return FALSE;
- }
- m_nCurPos = newPos.ValueOrDie();
- size_t nStartBlock = (size_t)offset / m_nGrowSize;
- offset -= (FX_FILESIZE)(nStartBlock * m_nGrowSize);
- while (size) {
- size_t nWrite = m_nGrowSize - (size_t)offset;
- if (nWrite > size) {
- nWrite = size;
- }
- FXSYS_memcpy((uint8_t*)m_Blocks[(int)nStartBlock] + (size_t)offset, buffer, nWrite);
- buffer = ((uint8_t*)buffer) + nWrite;
- size -= nWrite;
- nStartBlock ++;
- offset = 0;
- }
- return TRUE;
- }
- virtual FX_BOOL Flush() override
- {
- return TRUE;
- }
- virtual FX_BOOL IsConsecutive() const override
- {
- return m_dwFlags & FX_MEMSTREAM_Consecutive;
- }
- virtual void EstimateSize(size_t nInitSize, size_t nGrowSize) override
- {
- if (m_dwFlags & FX_MEMSTREAM_Consecutive) {
- if (m_Blocks.GetSize() < 1) {
- uint8_t* pBlock = FX_Alloc(uint8_t, FX_MAX(nInitSize, 4096));
- m_Blocks.Add(pBlock);
- }
- m_nGrowSize = FX_MAX(nGrowSize, 4096);
- } else if (m_Blocks.GetSize() < 1) {
- m_nGrowSize = FX_MAX(nGrowSize, 4096);
- }
- }
- virtual uint8_t* GetBuffer() const override
- {
- return m_Blocks.GetSize() ? (uint8_t*)m_Blocks[0] : NULL;
- }
- virtual void AttachBuffer(uint8_t* pBuffer, size_t nSize, FX_BOOL bTakeOver = FALSE) override
- {
- if (!(m_dwFlags & FX_MEMSTREAM_Consecutive)) {
- return;
- }
- m_Blocks.RemoveAll();
- m_Blocks.Add(pBuffer);
- m_nTotalSize = m_nCurSize = nSize;
- m_nCurPos = 0;
- m_dwFlags = FX_MEMSTREAM_Consecutive | (bTakeOver ? FX_MEMSTREAM_TakeOver : 0);
- ClearRange();
- }
- virtual void DetachBuffer() override
- {
- if (!(m_dwFlags & FX_MEMSTREAM_Consecutive)) {
- return;
- }
- m_Blocks.RemoveAll();
- m_nTotalSize = m_nCurSize = m_nCurPos = 0;
- m_dwFlags = FX_MEMSTREAM_TakeOver;
- ClearRange();
- }
-protected:
- CFX_PtrArray m_Blocks;
- FX_DWORD m_dwCount;
- size_t m_nTotalSize;
- size_t m_nCurSize;
- size_t m_nCurPos;
- size_t m_nGrowSize;
- FX_DWORD m_dwFlags;
- FX_BOOL m_bUseRange;
- size_t m_nOffset;
- size_t m_nSize;
- FX_BOOL ExpandBlocks(size_t size)
- {
- if (m_nCurSize < size) {
- m_nCurSize = size;
- }
- if (size <= m_nTotalSize) {
- return TRUE;
- }
- int32_t iCount = m_Blocks.GetSize();
- size = (size - m_nTotalSize + m_nGrowSize - 1) / m_nGrowSize;
- m_Blocks.SetSize(m_Blocks.GetSize() + (int32_t)size);
- while (size --) {
- uint8_t* pBlock = FX_Alloc(uint8_t, m_nGrowSize);
- m_Blocks.SetAt(iCount ++, pBlock);
- m_nTotalSize += m_nGrowSize;
- }
- return TRUE;
- }
+ protected:
+ CFX_PtrArray m_Blocks;
+ FX_DWORD m_dwCount;
+ size_t m_nTotalSize;
+ size_t m_nCurSize;
+ size_t m_nCurPos;
+ size_t m_nGrowSize;
+ FX_DWORD m_dwFlags;
+ FX_BOOL m_bUseRange;
+ size_t m_nOffset;
+ size_t m_nSize;
+ FX_BOOL ExpandBlocks(size_t size) {
+ if (m_nCurSize < size) {
+ m_nCurSize = size;
+ }
+ if (size <= m_nTotalSize) {
+ return TRUE;
+ }
+ int32_t iCount = m_Blocks.GetSize();
+ size = (size - m_nTotalSize + m_nGrowSize - 1) / m_nGrowSize;
+ m_Blocks.SetSize(m_Blocks.GetSize() + (int32_t)size);
+ while (size--) {
+ uint8_t* pBlock = FX_Alloc(uint8_t, m_nGrowSize);
+ m_Blocks.SetAt(iCount++, pBlock);
+ m_nTotalSize += m_nGrowSize;
+ }
+ return TRUE;
+ }
};
#ifdef __cplusplus
extern "C" {
#endif
-#define MT_N 848
-#define MT_M 456
-#define MT_Matrix_A 0x9908b0df
-#define MT_Upper_Mask 0x80000000
-#define MT_Lower_Mask 0x7fffffff
+#define MT_N 848
+#define MT_M 456
+#define MT_Matrix_A 0x9908b0df
+#define MT_Upper_Mask 0x80000000
+#define MT_Lower_Mask 0x7fffffff
typedef struct _FX_MTRANDOMCONTEXT {
- _FX_MTRANDOMCONTEXT()
- {
- mti = MT_N + 1;
- bHaveSeed = FALSE;
- }
- FX_DWORD mti;
- FX_BOOL bHaveSeed;
- FX_DWORD mt[MT_N];
-} FX_MTRANDOMCONTEXT, * FX_LPMTRANDOMCONTEXT;
-typedef FX_MTRANDOMCONTEXT const * FX_LPCMTRANDOMCONTEXT;
+ _FX_MTRANDOMCONTEXT() {
+ mti = MT_N + 1;
+ bHaveSeed = FALSE;
+ }
+ FX_DWORD mti;
+ FX_BOOL bHaveSeed;
+ FX_DWORD mt[MT_N];
+} FX_MTRANDOMCONTEXT, *FX_LPMTRANDOMCONTEXT;
+typedef FX_MTRANDOMCONTEXT const* FX_LPCMTRANDOMCONTEXT;
#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
FX_BOOL FX_GenerateCryptoRandom(FX_DWORD* pBuffer, int32_t iCount);
#endif
diff --git a/core/src/fxcrt/fx_arabic.cpp b/core/src/fxcrt/fx_arabic.cpp
index 3cb2fd067a..3b7d0c1c71 100644
--- a/core/src/fxcrt/fx_arabic.cpp
+++ b/core/src/fxcrt/fx_arabic.cpp
@@ -8,85 +8,77 @@
#include "fx_arabic.h"
extern const FX_DWORD gs_FX_TextLayout_CodeProperties[65536];
-IFX_BidiChar* IFX_BidiChar::Create()
-{
- return new CFX_BidiChar;
+IFX_BidiChar* IFX_BidiChar::Create() {
+ return new CFX_BidiChar;
}
CFX_BidiChar::CFX_BidiChar()
- : m_bSeparateNeutral(TRUE)
- , m_iCurStart(0)
- , m_iCurCount(0)
- , m_iCurBidi(0)
- , m_iLastBidi(0)
- , m_iLastStart(0)
- , m_iLastCount(0)
-{
-}
-void CFX_BidiChar::SetPolicy(FX_BOOL bSeparateNeutral)
-{
- m_bSeparateNeutral = bSeparateNeutral;
+ : m_bSeparateNeutral(TRUE),
+ m_iCurStart(0),
+ m_iCurCount(0),
+ m_iCurBidi(0),
+ m_iLastBidi(0),
+ m_iLastStart(0),
+ m_iLastCount(0) {}
+void CFX_BidiChar::SetPolicy(FX_BOOL bSeparateNeutral) {
+ m_bSeparateNeutral = bSeparateNeutral;
}
-FX_BOOL CFX_BidiChar::AppendChar(FX_WCHAR wch)
-{
- FX_DWORD dwProps = gs_FX_TextLayout_CodeProperties[(FX_WORD)wch];
- int32_t iBidiCls = (dwProps & FX_BIDICLASSBITSMASK) >> FX_BIDICLASSBITS;
- int32_t iContext = 0;
- switch (iBidiCls) {
- case FX_BIDICLASS_L:
- case FX_BIDICLASS_AN:
- case FX_BIDICLASS_EN:
- iContext = 1;
- break;
- case FX_BIDICLASS_R:
- case FX_BIDICLASS_AL:
- iContext = 2;
- break;
+FX_BOOL CFX_BidiChar::AppendChar(FX_WCHAR wch) {
+ FX_DWORD dwProps = gs_FX_TextLayout_CodeProperties[(FX_WORD)wch];
+ int32_t iBidiCls = (dwProps & FX_BIDICLASSBITSMASK) >> FX_BIDICLASSBITS;
+ int32_t iContext = 0;
+ switch (iBidiCls) {
+ case FX_BIDICLASS_L:
+ case FX_BIDICLASS_AN:
+ case FX_BIDICLASS_EN:
+ iContext = 1;
+ break;
+ case FX_BIDICLASS_R:
+ case FX_BIDICLASS_AL:
+ iContext = 2;
+ break;
+ }
+ FX_BOOL bRet = FALSE;
+ if (iContext != m_iCurBidi) {
+ if (m_bSeparateNeutral) {
+ bRet = TRUE;
+ } else {
+ if (m_iCurBidi == 0) {
+ bRet = (m_iCurCount > 0);
+ } else {
+ bRet = (iContext != 0);
+ }
+ }
+ if (bRet) {
+ m_iLastBidi = m_iCurBidi;
+ m_iLastStart = m_iCurStart;
+ m_iCurStart = m_iCurCount;
+ m_iLastCount = m_iCurCount - m_iLastStart;
}
- FX_BOOL bRet = FALSE;
- if (iContext != m_iCurBidi) {
- if (m_bSeparateNeutral) {
- bRet = TRUE;
- } else {
- if (m_iCurBidi == 0) {
- bRet = (m_iCurCount > 0);
- } else {
- bRet = (iContext != 0);
- }
- }
- if (bRet) {
- m_iLastBidi = m_iCurBidi;
- m_iLastStart = m_iCurStart;
- m_iCurStart = m_iCurCount;
- m_iLastCount = m_iCurCount - m_iLastStart;
- }
- if (m_bSeparateNeutral || iContext != 0) {
- m_iCurBidi = iContext;
- }
+ if (m_bSeparateNeutral || iContext != 0) {
+ m_iCurBidi = iContext;
}
- m_iCurCount ++;
- return bRet;
+ }
+ m_iCurCount++;
+ return bRet;
}
-FX_BOOL CFX_BidiChar::EndChar()
-{
- m_iLastBidi = m_iCurBidi;
- m_iLastStart = m_iCurStart;
- m_iCurStart = m_iCurCount;
- m_iLastCount = m_iCurCount - m_iLastStart;
- return m_iLastCount > 0;
+FX_BOOL CFX_BidiChar::EndChar() {
+ m_iLastBidi = m_iCurBidi;
+ m_iLastStart = m_iCurStart;
+ m_iCurStart = m_iCurCount;
+ m_iLastCount = m_iCurCount - m_iLastStart;
+ return m_iLastCount > 0;
}
-int32_t CFX_BidiChar::GetBidiInfo(int32_t &iStart, int32_t &iCount)
-{
- iStart = m_iLastStart;
- iCount = m_iLastCount;
- return m_iLastBidi;
+int32_t CFX_BidiChar::GetBidiInfo(int32_t& iStart, int32_t& iCount) {
+ iStart = m_iLastStart;
+ iCount = m_iLastCount;
+ return m_iLastBidi;
}
-void CFX_BidiChar::Reset()
-{
- m_iCurStart = 0;
- m_iCurCount = 0;
- m_iCurBidi = 0;
- m_iLastBidi = 0;
- m_iLastStart = 0;
- m_iLastCount = 0;
+void CFX_BidiChar::Reset() {
+ m_iCurStart = 0;
+ m_iCurCount = 0;
+ m_iCurBidi = 0;
+ m_iLastBidi = 0;
+ m_iLastStart = 0;
+ m_iLastCount = 0;
}
diff --git a/core/src/fxcrt/fx_arabic.h b/core/src/fxcrt/fx_arabic.h
index e4c1ddacf2..0230d40579 100644
--- a/core/src/fxcrt/fx_arabic.h
+++ b/core/src/fxcrt/fx_arabic.h
@@ -9,26 +9,25 @@
#include "../../include/fxcrt/fx_arb.h"
-class CFX_BidiChar final : public IFX_BidiChar
-{
-public:
- CFX_BidiChar();
- ~CFX_BidiChar() override {}
+class CFX_BidiChar final : public IFX_BidiChar {
+ public:
+ CFX_BidiChar();
+ ~CFX_BidiChar() override {}
- void SetPolicy(FX_BOOL bSeparateNeutral = TRUE) override;
- FX_BOOL AppendChar(FX_WCHAR wch) override;
- FX_BOOL EndChar() override;
- int32_t GetBidiInfo(int32_t &iStart, int32_t &iCount) override;
- void Reset() override;
+ void SetPolicy(FX_BOOL bSeparateNeutral = TRUE) override;
+ FX_BOOL AppendChar(FX_WCHAR wch) override;
+ FX_BOOL EndChar() override;
+ int32_t GetBidiInfo(int32_t& iStart, int32_t& iCount) override;
+ void Reset() override;
-private:
- FX_BOOL m_bSeparateNeutral;
- int32_t m_iCurStart;
- int32_t m_iCurCount;
- int32_t m_iCurBidi;
- int32_t m_iLastBidi;
- int32_t m_iLastStart;
- int32_t m_iLastCount;
+ private:
+ FX_BOOL m_bSeparateNeutral;
+ int32_t m_iCurStart;
+ int32_t m_iCurCount;
+ int32_t m_iCurBidi;
+ int32_t m_iLastBidi;
+ int32_t m_iLastStart;
+ int32_t m_iLastCount;
};
#endif // CORE_SRC_FXCRT_FX_ARABIC_H_
diff --git a/core/src/fxcrt/fx_basic_array.cpp b/core/src/fxcrt/fx_basic_array.cpp
index 4ab34bb022..5555ed2586 100644
--- a/core/src/fxcrt/fx_basic_array.cpp
+++ b/core/src/fxcrt/fx_basic_array.cpp
@@ -8,333 +8,335 @@
#include "../../../third_party/base/numerics/safe_math.h"
CFX_BasicArray::CFX_BasicArray(int unit_size)
- : m_pData(NULL)
- , m_nSize(0)
- , m_nMaxSize(0)
-{
- if (unit_size < 0 || unit_size > (1 << 28)) {
- m_nUnitSize = 4;
- } else {
- m_nUnitSize = unit_size;
- }
+ : m_pData(NULL), m_nSize(0), m_nMaxSize(0) {
+ if (unit_size < 0 || unit_size > (1 << 28)) {
+ m_nUnitSize = 4;
+ } else {
+ m_nUnitSize = unit_size;
+ }
}
-CFX_BasicArray::~CFX_BasicArray()
-{
- FX_Free(m_pData);
+CFX_BasicArray::~CFX_BasicArray() {
+ FX_Free(m_pData);
}
-FX_BOOL CFX_BasicArray::SetSize(int nNewSize)
-{
- if (nNewSize <= 0) {
- FX_Free(m_pData);
- m_pData = NULL;
- m_nSize = m_nMaxSize = 0;
- return 0 == nNewSize;
- }
+FX_BOOL CFX_BasicArray::SetSize(int nNewSize) {
+ if (nNewSize <= 0) {
+ FX_Free(m_pData);
+ m_pData = NULL;
+ m_nSize = m_nMaxSize = 0;
+ return 0 == nNewSize;
+ }
- if (m_pData == NULL) {
- pdfium::base::CheckedNumeric<int> totalSize = nNewSize;
- totalSize *= m_nUnitSize;
- if (!totalSize.IsValid()) {
- m_nSize = m_nMaxSize = 0;
- return FALSE;
- }
- m_pData = FX_Alloc(uint8_t, totalSize.ValueOrDie());
- m_nSize = m_nMaxSize = nNewSize;
- } else if (nNewSize <= m_nMaxSize) {
- if (nNewSize > m_nSize) {
- FXSYS_memset(m_pData + m_nSize * m_nUnitSize, 0, (nNewSize - m_nSize) * m_nUnitSize);
- }
- m_nSize = nNewSize;
- } else {
- int nNewMax = nNewSize < m_nMaxSize ? m_nMaxSize : nNewSize;
- pdfium::base::CheckedNumeric<int> totalSize = nNewMax;
- totalSize *= m_nUnitSize;
- if (!totalSize.IsValid() || nNewMax < m_nSize) {
- return FALSE;
- }
- uint8_t* pNewData = FX_Realloc(uint8_t, m_pData, totalSize.ValueOrDie());
- if (pNewData == NULL) {
- return FALSE;
- }
- FXSYS_memset(pNewData + m_nSize * m_nUnitSize, 0, (nNewMax - m_nSize) * m_nUnitSize);
- m_pData = pNewData;
- m_nSize = nNewSize;
- m_nMaxSize = nNewMax;
- }
- return TRUE;
+ if (m_pData == NULL) {
+ pdfium::base::CheckedNumeric<int> totalSize = nNewSize;
+ totalSize *= m_nUnitSize;
+ if (!totalSize.IsValid()) {
+ m_nSize = m_nMaxSize = 0;
+ return FALSE;
+ }
+ m_pData = FX_Alloc(uint8_t, totalSize.ValueOrDie());
+ m_nSize = m_nMaxSize = nNewSize;
+ } else if (nNewSize <= m_nMaxSize) {
+ if (nNewSize > m_nSize) {
+ FXSYS_memset(m_pData + m_nSize * m_nUnitSize, 0,
+ (nNewSize - m_nSize) * m_nUnitSize);
+ }
+ m_nSize = nNewSize;
+ } else {
+ int nNewMax = nNewSize < m_nMaxSize ? m_nMaxSize : nNewSize;
+ pdfium::base::CheckedNumeric<int> totalSize = nNewMax;
+ totalSize *= m_nUnitSize;
+ if (!totalSize.IsValid() || nNewMax < m_nSize) {
+ return FALSE;
+ }
+ uint8_t* pNewData = FX_Realloc(uint8_t, m_pData, totalSize.ValueOrDie());
+ if (pNewData == NULL) {
+ return FALSE;
+ }
+ FXSYS_memset(pNewData + m_nSize * m_nUnitSize, 0,
+ (nNewMax - m_nSize) * m_nUnitSize);
+ m_pData = pNewData;
+ m_nSize = nNewSize;
+ m_nMaxSize = nNewMax;
+ }
+ return TRUE;
}
-FX_BOOL CFX_BasicArray::Append(const CFX_BasicArray& src)
-{
- int nOldSize = m_nSize;
- pdfium::base::CheckedNumeric<int> newSize = m_nSize;
- newSize += src.m_nSize;
- if (m_nUnitSize != src.m_nUnitSize || !newSize.IsValid() || !SetSize(newSize.ValueOrDie())) {
- return FALSE;
- }
+FX_BOOL CFX_BasicArray::Append(const CFX_BasicArray& src) {
+ int nOldSize = m_nSize;
+ pdfium::base::CheckedNumeric<int> newSize = m_nSize;
+ newSize += src.m_nSize;
+ if (m_nUnitSize != src.m_nUnitSize || !newSize.IsValid() ||
+ !SetSize(newSize.ValueOrDie())) {
+ return FALSE;
+ }
- FXSYS_memcpy(m_pData + nOldSize * m_nUnitSize, src.m_pData, src.m_nSize * m_nUnitSize);
- return TRUE;
+ FXSYS_memcpy(m_pData + nOldSize * m_nUnitSize, src.m_pData,
+ src.m_nSize * m_nUnitSize);
+ return TRUE;
}
-FX_BOOL CFX_BasicArray::Copy(const CFX_BasicArray& src)
-{
- if (!SetSize(src.m_nSize)) {
- return FALSE;
- }
- FXSYS_memcpy(m_pData, src.m_pData, src.m_nSize * m_nUnitSize);
- return TRUE;
+FX_BOOL CFX_BasicArray::Copy(const CFX_BasicArray& src) {
+ if (!SetSize(src.m_nSize)) {
+ return FALSE;
+ }
+ FXSYS_memcpy(m_pData, src.m_pData, src.m_nSize * m_nUnitSize);
+ return TRUE;
}
-uint8_t* CFX_BasicArray::InsertSpaceAt(int nIndex, int nCount)
-{
- if (nIndex < 0 || nCount <= 0) {
- return NULL;
- }
- if (nIndex >= m_nSize) {
- if (!SetSize(nIndex + nCount)) {
- return NULL;
- }
- } else {
- int nOldSize = m_nSize;
- if (!SetSize(m_nSize + nCount)) {
- return NULL;
- }
- FXSYS_memmove(m_pData + (nIndex + nCount)*m_nUnitSize, m_pData + nIndex * m_nUnitSize,
- (nOldSize - nIndex) * m_nUnitSize);
- FXSYS_memset(m_pData + nIndex * m_nUnitSize, 0, nCount * m_nUnitSize);
+uint8_t* CFX_BasicArray::InsertSpaceAt(int nIndex, int nCount) {
+ if (nIndex < 0 || nCount <= 0) {
+ return NULL;
+ }
+ if (nIndex >= m_nSize) {
+ if (!SetSize(nIndex + nCount)) {
+ return NULL;
}
- return m_pData + nIndex * m_nUnitSize;
+ } else {
+ int nOldSize = m_nSize;
+ if (!SetSize(m_nSize + nCount)) {
+ return NULL;
+ }
+ FXSYS_memmove(m_pData + (nIndex + nCount) * m_nUnitSize,
+ m_pData + nIndex * m_nUnitSize,
+ (nOldSize - nIndex) * m_nUnitSize);
+ FXSYS_memset(m_pData + nIndex * m_nUnitSize, 0, nCount * m_nUnitSize);
+ }
+ return m_pData + nIndex * m_nUnitSize;
}
-FX_BOOL CFX_BasicArray::RemoveAt(int nIndex, int nCount)
-{
- if (nIndex < 0 || nCount <= 0 || m_nSize < nIndex + nCount) {
- return FALSE;
- }
- int nMoveCount = m_nSize - (nIndex + nCount);
- if (nMoveCount) {
- FXSYS_memmove(m_pData + nIndex * m_nUnitSize, m_pData + (nIndex + nCount) * m_nUnitSize, nMoveCount * m_nUnitSize);
- }
- m_nSize -= nCount;
- return TRUE;
+FX_BOOL CFX_BasicArray::RemoveAt(int nIndex, int nCount) {
+ if (nIndex < 0 || nCount <= 0 || m_nSize < nIndex + nCount) {
+ return FALSE;
+ }
+ int nMoveCount = m_nSize - (nIndex + nCount);
+ if (nMoveCount) {
+ FXSYS_memmove(m_pData + nIndex * m_nUnitSize,
+ m_pData + (nIndex + nCount) * m_nUnitSize,
+ nMoveCount * m_nUnitSize);
+ }
+ m_nSize -= nCount;
+ return TRUE;
}
-FX_BOOL CFX_BasicArray::InsertAt(int nStartIndex, const CFX_BasicArray* pNewArray)
-{
- if (pNewArray == NULL) {
- return FALSE;
- }
- if (pNewArray->m_nSize == 0) {
- return TRUE;
- }
- if (!InsertSpaceAt(nStartIndex, pNewArray->m_nSize)) {
- return FALSE;
- }
- FXSYS_memcpy(m_pData + nStartIndex * m_nUnitSize, pNewArray->m_pData, pNewArray->m_nSize * m_nUnitSize);
+FX_BOOL CFX_BasicArray::InsertAt(int nStartIndex,
+ const CFX_BasicArray* pNewArray) {
+ if (pNewArray == NULL) {
+ return FALSE;
+ }
+ if (pNewArray->m_nSize == 0) {
return TRUE;
+ }
+ if (!InsertSpaceAt(nStartIndex, pNewArray->m_nSize)) {
+ return FALSE;
+ }
+ FXSYS_memcpy(m_pData + nStartIndex * m_nUnitSize, pNewArray->m_pData,
+ pNewArray->m_nSize * m_nUnitSize);
+ return TRUE;
}
-const void* CFX_BasicArray::GetDataPtr(int index) const
-{
- if (index < 0 || index >= m_nSize || m_pData == NULL) {
- return NULL;
- }
- return m_pData + index * m_nUnitSize;
-}
-CFX_BaseSegmentedArray::CFX_BaseSegmentedArray(int unit_size, int segment_units, int index_size)
- : m_UnitSize(unit_size)
- , m_SegmentSize(segment_units)
- , m_IndexSize(index_size)
- , m_IndexDepth(0)
- , m_DataSize(0)
- , m_pIndex(NULL)
-{
+const void* CFX_BasicArray::GetDataPtr(int index) const {
+ if (index < 0 || index >= m_nSize || m_pData == NULL) {
+ return NULL;
+ }
+ return m_pData + index * m_nUnitSize;
}
-void CFX_BaseSegmentedArray::SetUnitSize(int unit_size, int segment_units, int index_size)
-{
- ASSERT(m_DataSize == 0);
- m_UnitSize = unit_size;
- m_SegmentSize = segment_units;
- m_IndexSize = index_size;
+CFX_BaseSegmentedArray::CFX_BaseSegmentedArray(int unit_size,
+ int segment_units,
+ int index_size)
+ : m_UnitSize(unit_size),
+ m_SegmentSize(segment_units),
+ m_IndexSize(index_size),
+ m_IndexDepth(0),
+ m_DataSize(0),
+ m_pIndex(NULL) {}
+void CFX_BaseSegmentedArray::SetUnitSize(int unit_size,
+ int segment_units,
+ int index_size) {
+ ASSERT(m_DataSize == 0);
+ m_UnitSize = unit_size;
+ m_SegmentSize = segment_units;
+ m_IndexSize = index_size;
}
-CFX_BaseSegmentedArray::~CFX_BaseSegmentedArray()
-{
- RemoveAll();
+CFX_BaseSegmentedArray::~CFX_BaseSegmentedArray() {
+ RemoveAll();
}
-static void _ClearIndex(int level, int size, void** pIndex)
-{
- if (level == 0) {
- FX_Free(pIndex);
- return;
- }
- for (int i = 0; i < size; i++) {
- if (pIndex[i] == NULL) {
- continue;
- }
- _ClearIndex(level - 1, size, (void**)pIndex[i]);
- }
+static void _ClearIndex(int level, int size, void** pIndex) {
+ if (level == 0) {
FX_Free(pIndex);
+ return;
+ }
+ for (int i = 0; i < size; i++) {
+ if (pIndex[i] == NULL) {
+ continue;
+ }
+ _ClearIndex(level - 1, size, (void**)pIndex[i]);
+ }
+ FX_Free(pIndex);
}
-void CFX_BaseSegmentedArray::RemoveAll()
-{
- if (m_pIndex == NULL) {
- return;
- }
- _ClearIndex(m_IndexDepth, m_IndexSize, (void**)m_pIndex);
- m_pIndex = NULL;
- m_IndexDepth = 0;
- m_DataSize = 0;
+void CFX_BaseSegmentedArray::RemoveAll() {
+ if (m_pIndex == NULL) {
+ return;
+ }
+ _ClearIndex(m_IndexDepth, m_IndexSize, (void**)m_pIndex);
+ m_pIndex = NULL;
+ m_IndexDepth = 0;
+ m_DataSize = 0;
}
-void* CFX_BaseSegmentedArray::Add()
-{
- if (m_DataSize % m_SegmentSize) {
- return GetAt(m_DataSize ++);
- }
- void* pSegment = FX_Alloc2D(uint8_t, m_UnitSize, m_SegmentSize);
- if (m_pIndex == NULL) {
- m_pIndex = pSegment;
- m_DataSize ++;
- return pSegment;
- }
- if (m_IndexDepth == 0) {
- void** pIndex = (void**)FX_Alloc(void*, m_IndexSize);
- pIndex[0] = m_pIndex;
- pIndex[1] = pSegment;
- m_pIndex = pIndex;
- m_DataSize ++;
- m_IndexDepth ++;
- return pSegment;
- }
- int seg_index = m_DataSize / m_SegmentSize;
- if (seg_index % m_IndexSize) {
- void** pIndex = GetIndex(seg_index);
- pIndex[seg_index % m_IndexSize] = pSegment;
- m_DataSize ++;
- return pSegment;
- }
- int tree_size = 1;
- int i;
- for (i = 0; i < m_IndexDepth; i ++) {
- tree_size *= m_IndexSize;
- }
- if (m_DataSize == tree_size * m_SegmentSize) {
- void** pIndex = (void**)FX_Alloc(void*, m_IndexSize);
- pIndex[0] = m_pIndex;
- m_pIndex = pIndex;
- m_IndexDepth ++;
- } else {
- tree_size /= m_IndexSize;
- }
- void** pSpot = (void**)m_pIndex;
- for (i = 1; i < m_IndexDepth; i ++) {
- if (pSpot[seg_index / tree_size] == NULL) {
- pSpot[seg_index / tree_size] = (void*)FX_Alloc(void*, m_IndexSize);
- }
- pSpot = (void**)pSpot[seg_index / tree_size];
- seg_index = seg_index % tree_size;
- tree_size /= m_IndexSize;
- }
- if (i < m_IndexDepth) {
- FX_Free(pSegment);
- RemoveAll();
- return NULL;
- }
- pSpot[seg_index % m_IndexSize] = pSegment;
- m_DataSize ++;
+void* CFX_BaseSegmentedArray::Add() {
+ if (m_DataSize % m_SegmentSize) {
+ return GetAt(m_DataSize++);
+ }
+ void* pSegment = FX_Alloc2D(uint8_t, m_UnitSize, m_SegmentSize);
+ if (m_pIndex == NULL) {
+ m_pIndex = pSegment;
+ m_DataSize++;
+ return pSegment;
+ }
+ if (m_IndexDepth == 0) {
+ void** pIndex = (void**)FX_Alloc(void*, m_IndexSize);
+ pIndex[0] = m_pIndex;
+ pIndex[1] = pSegment;
+ m_pIndex = pIndex;
+ m_DataSize++;
+ m_IndexDepth++;
return pSegment;
+ }
+ int seg_index = m_DataSize / m_SegmentSize;
+ if (seg_index % m_IndexSize) {
+ void** pIndex = GetIndex(seg_index);
+ pIndex[seg_index % m_IndexSize] = pSegment;
+ m_DataSize++;
+ return pSegment;
+ }
+ int tree_size = 1;
+ int i;
+ for (i = 0; i < m_IndexDepth; i++) {
+ tree_size *= m_IndexSize;
+ }
+ if (m_DataSize == tree_size * m_SegmentSize) {
+ void** pIndex = (void**)FX_Alloc(void*, m_IndexSize);
+ pIndex[0] = m_pIndex;
+ m_pIndex = pIndex;
+ m_IndexDepth++;
+ } else {
+ tree_size /= m_IndexSize;
+ }
+ void** pSpot = (void**)m_pIndex;
+ for (i = 1; i < m_IndexDepth; i++) {
+ if (pSpot[seg_index / tree_size] == NULL) {
+ pSpot[seg_index / tree_size] = (void*)FX_Alloc(void*, m_IndexSize);
+ }
+ pSpot = (void**)pSpot[seg_index / tree_size];
+ seg_index = seg_index % tree_size;
+ tree_size /= m_IndexSize;
+ }
+ if (i < m_IndexDepth) {
+ FX_Free(pSegment);
+ RemoveAll();
+ return NULL;
+ }
+ pSpot[seg_index % m_IndexSize] = pSegment;
+ m_DataSize++;
+ return pSegment;
}
-void** CFX_BaseSegmentedArray::GetIndex(int seg_index) const
-{
- ASSERT(m_IndexDepth != 0);
- if (m_IndexDepth == 1) {
- return (void**)m_pIndex;
- }
- if (m_IndexDepth == 2) {
- return (void**)((void**)m_pIndex)[seg_index / m_IndexSize];
- }
- int tree_size = 1;
- int i;
- for (i = 1; i < m_IndexDepth; i ++) {
- tree_size *= m_IndexSize;
- }
- void** pSpot = (void**)m_pIndex;
- for (i = 1; i < m_IndexDepth; i ++) {
- pSpot = (void**)pSpot[seg_index / tree_size];
- seg_index = seg_index % tree_size;
- tree_size /= m_IndexSize;
- }
- return pSpot;
+void** CFX_BaseSegmentedArray::GetIndex(int seg_index) const {
+ ASSERT(m_IndexDepth != 0);
+ if (m_IndexDepth == 1) {
+ return (void**)m_pIndex;
+ }
+ if (m_IndexDepth == 2) {
+ return (void**)((void**)m_pIndex)[seg_index / m_IndexSize];
+ }
+ int tree_size = 1;
+ int i;
+ for (i = 1; i < m_IndexDepth; i++) {
+ tree_size *= m_IndexSize;
+ }
+ void** pSpot = (void**)m_pIndex;
+ for (i = 1; i < m_IndexDepth; i++) {
+ pSpot = (void**)pSpot[seg_index / tree_size];
+ seg_index = seg_index % tree_size;
+ tree_size /= m_IndexSize;
+ }
+ return pSpot;
}
-void* CFX_BaseSegmentedArray::IterateSegment(const uint8_t* pSegment, int count, FX_BOOL (*callback)(void* param, void* pData), void* param) const
-{
- for (int i = 0; i < count; i ++) {
- if (!callback(param, (void*)(pSegment + i * m_UnitSize))) {
- return (void*)(pSegment + i * m_UnitSize);
- }
- }
- return NULL;
+void* CFX_BaseSegmentedArray::IterateSegment(const uint8_t* pSegment,
+ int count,
+ FX_BOOL (*callback)(void* param,
+ void* pData),
+ void* param) const {
+ for (int i = 0; i < count; i++) {
+ if (!callback(param, (void*)(pSegment + i * m_UnitSize))) {
+ return (void*)(pSegment + i * m_UnitSize);
+ }
+ }
+ return NULL;
}
-void* CFX_BaseSegmentedArray::IterateIndex(int level, int& start, void** pIndex, FX_BOOL (*callback)(void* param, void* pData), void* param) const
-{
- if (level == 0) {
- int count = m_DataSize - start;
- if (count > m_SegmentSize) {
- count = m_SegmentSize;
- }
- start += count;
- return IterateSegment((const uint8_t*)pIndex, count, callback, param);
- }
- for (int i = 0; i < m_IndexSize; i ++) {
- if (pIndex[i] == NULL) {
- continue;
- }
- void* p = IterateIndex(level - 1, start, (void**)pIndex[i], callback, param);
- if (p) {
- return p;
- }
- }
- return NULL;
+void* CFX_BaseSegmentedArray::IterateIndex(int level,
+ int& start,
+ void** pIndex,
+ FX_BOOL (*callback)(void* param,
+ void* pData),
+ void* param) const {
+ if (level == 0) {
+ int count = m_DataSize - start;
+ if (count > m_SegmentSize) {
+ count = m_SegmentSize;
+ }
+ start += count;
+ return IterateSegment((const uint8_t*)pIndex, count, callback, param);
+ }
+ for (int i = 0; i < m_IndexSize; i++) {
+ if (pIndex[i] == NULL) {
+ continue;
+ }
+ void* p =
+ IterateIndex(level - 1, start, (void**)pIndex[i], callback, param);
+ if (p) {
+ return p;
+ }
+ }
+ return NULL;
}
-void* CFX_BaseSegmentedArray::Iterate(FX_BOOL (*callback)(void* param, void* pData), void* param) const
-{
- if (m_pIndex == NULL) {
- return NULL;
- }
- int start = 0;
- return IterateIndex(m_IndexDepth, start, (void**)m_pIndex, callback, param);
+void* CFX_BaseSegmentedArray::Iterate(FX_BOOL (*callback)(void* param,
+ void* pData),
+ void* param) const {
+ if (m_pIndex == NULL) {
+ return NULL;
+ }
+ int start = 0;
+ return IterateIndex(m_IndexDepth, start, (void**)m_pIndex, callback, param);
}
-void* CFX_BaseSegmentedArray::GetAt(int index) const
-{
- if (index < 0 || index >= m_DataSize) {
- return NULL;
- }
- if (m_IndexDepth == 0) {
- return (uint8_t*)m_pIndex + m_UnitSize * index;
- }
- int seg_index = index / m_SegmentSize;
- return (uint8_t*)GetIndex(seg_index)[seg_index % m_IndexSize] + (index % m_SegmentSize) * m_UnitSize;
+void* CFX_BaseSegmentedArray::GetAt(int index) const {
+ if (index < 0 || index >= m_DataSize) {
+ return NULL;
+ }
+ if (m_IndexDepth == 0) {
+ return (uint8_t*)m_pIndex + m_UnitSize * index;
+ }
+ int seg_index = index / m_SegmentSize;
+ return (uint8_t*)GetIndex(seg_index)[seg_index % m_IndexSize] +
+ (index % m_SegmentSize) * m_UnitSize;
}
-void CFX_BaseSegmentedArray::Delete(int index, int count)
-{
- if(index < 0 || count < 1 || index + count > m_DataSize) {
- return;
- }
- int i;
- for (i = index; i < m_DataSize - count; i ++) {
- uint8_t* pSrc = (uint8_t*)GetAt(i + count);
- uint8_t* pDest = (uint8_t*)GetAt(i);
- for (int j = 0; j < m_UnitSize; j ++) {
- pDest[j] = pSrc[j];
- }
- }
- int new_segs = (m_DataSize - count + m_SegmentSize - 1) / m_SegmentSize;
- int old_segs = (m_DataSize + m_SegmentSize - 1) / m_SegmentSize;
- if (new_segs < old_segs) {
- if(m_IndexDepth) {
- for (i = new_segs; i < old_segs; i ++) {
- void** pIndex = GetIndex(i);
- FX_Free(pIndex[i % m_IndexSize]);
- pIndex[i % m_IndexSize] = NULL;
- }
- } else {
- FX_Free(m_pIndex);
- m_pIndex = NULL;
- }
+void CFX_BaseSegmentedArray::Delete(int index, int count) {
+ if (index < 0 || count < 1 || index + count > m_DataSize) {
+ return;
+ }
+ int i;
+ for (i = index; i < m_DataSize - count; i++) {
+ uint8_t* pSrc = (uint8_t*)GetAt(i + count);
+ uint8_t* pDest = (uint8_t*)GetAt(i);
+ for (int j = 0; j < m_UnitSize; j++) {
+ pDest[j] = pSrc[j];
+ }
+ }
+ int new_segs = (m_DataSize - count + m_SegmentSize - 1) / m_SegmentSize;
+ int old_segs = (m_DataSize + m_SegmentSize - 1) / m_SegmentSize;
+ if (new_segs < old_segs) {
+ if (m_IndexDepth) {
+ for (i = new_segs; i < old_segs; i++) {
+ void** pIndex = GetIndex(i);
+ FX_Free(pIndex[i % m_IndexSize]);
+ pIndex[i % m_IndexSize] = NULL;
+ }
+ } else {
+ FX_Free(m_pIndex);
+ m_pIndex = NULL;
}
- m_DataSize -= count;
+ }
+ m_DataSize -= count;
}
diff --git a/core/src/fxcrt/fx_basic_bstring.cpp b/core/src/fxcrt/fx_basic_bstring.cpp
index 5eeb33b049..c706912d9d 100644
--- a/core/src/fxcrt/fx_basic_bstring.cpp
+++ b/core/src/fxcrt/fx_basic_bstring.cpp
@@ -9,1126 +9,1087 @@
#include "../../include/fxcrt/fx_basic.h"
#include "../../../third_party/base/numerics/safe_math.h"
-static int _Buffer_itoa(char* buf, int i, FX_DWORD flags)
-{
- if (i == 0) {
- buf[0] = '0';
- return 1;
- }
- char buf1[32];
- int buf_pos = 31;
- FX_DWORD u = i;
- if ((flags & FXFORMAT_SIGNED) && i < 0) {
- u = -i;
- }
- int base = 10;
- const FX_CHAR* string = "0123456789abcdef";
- if (flags & FXFORMAT_HEX) {
- base = 16;
- if (flags & FXFORMAT_CAPITAL) {
- string = "0123456789ABCDEF";
- }
- }
- while (u != 0) {
- buf1[buf_pos--] = string[u % base];
- u = u / base;
- }
- if ((flags & FXFORMAT_SIGNED) && i < 0) {
- buf1[buf_pos--] = '-';
- }
- int len = 31 - buf_pos;
- for (int ii = 0; ii < len; ii ++) {
- buf[ii] = buf1[ii + buf_pos + 1];
- }
- return len;
-}
-CFX_ByteString CFX_ByteString::FormatInteger(int i, FX_DWORD flags)
-{
- char buf[32];
- return CFX_ByteStringC(buf, _Buffer_itoa(buf, i, flags));
+static int _Buffer_itoa(char* buf, int i, FX_DWORD flags) {
+ if (i == 0) {
+ buf[0] = '0';
+ return 1;
+ }
+ char buf1[32];
+ int buf_pos = 31;
+ FX_DWORD u = i;
+ if ((flags & FXFORMAT_SIGNED) && i < 0) {
+ u = -i;
+ }
+ int base = 10;
+ const FX_CHAR* string = "0123456789abcdef";
+ if (flags & FXFORMAT_HEX) {
+ base = 16;
+ if (flags & FXFORMAT_CAPITAL) {
+ string = "0123456789ABCDEF";
+ }
+ }
+ while (u != 0) {
+ buf1[buf_pos--] = string[u % base];
+ u = u / base;
+ }
+ if ((flags & FXFORMAT_SIGNED) && i < 0) {
+ buf1[buf_pos--] = '-';
+ }
+ int len = 31 - buf_pos;
+ for (int ii = 0; ii < len; ii++) {
+ buf[ii] = buf1[ii + buf_pos + 1];
+ }
+ return len;
+}
+CFX_ByteString CFX_ByteString::FormatInteger(int i, FX_DWORD flags) {
+ char buf[32];
+ return CFX_ByteStringC(buf, _Buffer_itoa(buf, i, flags));
}
// static
-CFX_ByteString::StringData* CFX_ByteString::StringData::Create(int nLen)
-{
- // |nLen| is currently declared as in |int|. TODO(palmer): It should be
- // a |size_t|, or at least unsigned.
- if (nLen == 0 || nLen < 0) {
- return NULL;
- }
+CFX_ByteString::StringData* CFX_ByteString::StringData::Create(int nLen) {
+ // |nLen| is currently declared as in |int|. TODO(palmer): It should be
+ // a |size_t|, or at least unsigned.
+ if (nLen == 0 || nLen < 0) {
+ return NULL;
+ }
- // Fixed portion of header plus a NUL char not included in m_nAllocLength.
- // sizeof(FX_CHAR) is always 1, used for consistency with CFX_Widestring.
- int overhead = offsetof(StringData, m_String) + sizeof(FX_CHAR);
- pdfium::base::CheckedNumeric<int> nSize = nLen;
- nSize += overhead;
+ // Fixed portion of header plus a NUL char not included in m_nAllocLength.
+ // sizeof(FX_CHAR) is always 1, used for consistency with CFX_Widestring.
+ int overhead = offsetof(StringData, m_String) + sizeof(FX_CHAR);
+ pdfium::base::CheckedNumeric<int> nSize = nLen;
+ nSize += overhead;
- // Now round to an 8-byte boundary. We'd expect that this is the minimum
- // granularity of any of the underlying allocators, so there may be cases
- // where we can save a re-alloc when adding a few characters to a string
- // by using this otherwise wasted space.
- nSize += 7;
- int totalSize = nSize.ValueOrDie() & ~7;
- int usableSize = totalSize - overhead;
- FXSYS_assert(usableSize >= nLen);
+ // Now round to an 8-byte boundary. We'd expect that this is the minimum
+ // granularity of any of the underlying allocators, so there may be cases
+ // where we can save a re-alloc when adding a few characters to a string
+ // by using this otherwise wasted space.
+ nSize += 7;
+ int totalSize = nSize.ValueOrDie() & ~7;
+ int usableSize = totalSize - overhead;
+ FXSYS_assert(usableSize >= nLen);
- void* pData = FX_Alloc(uint8_t, totalSize);
- return new (pData) StringData(nLen, usableSize);
-}
-CFX_ByteString::~CFX_ByteString()
-{
- if (m_pData) {
- m_pData->Release();
- }
+ void* pData = FX_Alloc(uint8_t, totalSize);
+ return new (pData) StringData(nLen, usableSize);
}
-CFX_ByteString::CFX_ByteString(const FX_CHAR* lpsz, FX_STRSIZE nLen)
-{
- if (nLen < 0) {
- nLen = lpsz ? FXSYS_strlen(lpsz) : 0;
- }
- if (nLen) {
- m_pData = StringData::Create(nLen);
- if (m_pData) {
- FXSYS_memcpy(m_pData->m_String, lpsz, nLen);
- }
- } else {
- m_pData = NULL;
- }
+CFX_ByteString::~CFX_ByteString() {
+ if (m_pData) {
+ m_pData->Release();
+ }
}
-CFX_ByteString::CFX_ByteString(const uint8_t* lpsz, FX_STRSIZE nLen)
-{
- if (nLen > 0) {
- m_pData = StringData::Create(nLen);
- if (m_pData) {
- FXSYS_memcpy(m_pData->m_String, lpsz, nLen);
- }
- } else {
- m_pData = NULL;
+CFX_ByteString::CFX_ByteString(const FX_CHAR* lpsz, FX_STRSIZE nLen) {
+ if (nLen < 0) {
+ nLen = lpsz ? FXSYS_strlen(lpsz) : 0;
+ }
+ if (nLen) {
+ m_pData = StringData::Create(nLen);
+ if (m_pData) {
+ FXSYS_memcpy(m_pData->m_String, lpsz, nLen);
}
+ } else {
+ m_pData = NULL;
+ }
}
-CFX_ByteString::CFX_ByteString(char ch)
-{
- m_pData = StringData::Create(1);
+CFX_ByteString::CFX_ByteString(const uint8_t* lpsz, FX_STRSIZE nLen) {
+ if (nLen > 0) {
+ m_pData = StringData::Create(nLen);
if (m_pData) {
- m_pData->m_String[0] = ch;
+ FXSYS_memcpy(m_pData->m_String, lpsz, nLen);
}
+ } else {
+ m_pData = NULL;
+ }
}
-CFX_ByteString::CFX_ByteString(const CFX_ByteString& stringSrc)
-{
- if (stringSrc.m_pData == NULL) {
- m_pData = NULL;
- return;
- }
- if (stringSrc.m_pData->m_nRefs >= 0) {
- m_pData = stringSrc.m_pData;
- m_pData->Retain();
- } else {
- m_pData = NULL;
- *this = stringSrc;
- }
+CFX_ByteString::CFX_ByteString(char ch) {
+ m_pData = StringData::Create(1);
+ if (m_pData) {
+ m_pData->m_String[0] = ch;
+ }
}
-CFX_ByteString::CFX_ByteString(const CFX_ByteStringC& stringSrc)
-{
- if (stringSrc.IsEmpty()) {
- m_pData = NULL;
- return;
- }
+CFX_ByteString::CFX_ByteString(const CFX_ByteString& stringSrc) {
+ if (stringSrc.m_pData == NULL) {
+ m_pData = NULL;
+ return;
+ }
+ if (stringSrc.m_pData->m_nRefs >= 0) {
+ m_pData = stringSrc.m_pData;
+ m_pData->Retain();
+ } else {
m_pData = NULL;
*this = stringSrc;
+ }
}
-CFX_ByteString::CFX_ByteString(const CFX_ByteStringC& str1, const CFX_ByteStringC& str2)
-{
+CFX_ByteString::CFX_ByteString(const CFX_ByteStringC& stringSrc) {
+ if (stringSrc.IsEmpty()) {
m_pData = NULL;
- int nNewLen = str1.GetLength() + str2.GetLength();
- if (nNewLen == 0) {
- return;
- }
- m_pData = StringData::Create(nNewLen);
- if (m_pData) {
- FXSYS_memcpy(m_pData->m_String, str1.GetCStr(), str1.GetLength());
- FXSYS_memcpy(m_pData->m_String + str1.GetLength(), str2.GetCStr(), str2.GetLength());
- }
-}
-const CFX_ByteString& CFX_ByteString::operator=(const FX_CHAR* lpsz)
-{
- if (lpsz == NULL || lpsz[0] == 0) {
- Empty();
- } else {
- AssignCopy(FXSYS_strlen(lpsz), lpsz);
- }
- return *this;
+ return;
+ }
+ m_pData = NULL;
+ *this = stringSrc;
+}
+CFX_ByteString::CFX_ByteString(const CFX_ByteStringC& str1,
+ const CFX_ByteStringC& str2) {
+ m_pData = NULL;
+ int nNewLen = str1.GetLength() + str2.GetLength();
+ if (nNewLen == 0) {
+ return;
+ }
+ m_pData = StringData::Create(nNewLen);
+ if (m_pData) {
+ FXSYS_memcpy(m_pData->m_String, str1.GetCStr(), str1.GetLength());
+ FXSYS_memcpy(m_pData->m_String + str1.GetLength(), str2.GetCStr(),
+ str2.GetLength());
+ }
+}
+const CFX_ByteString& CFX_ByteString::operator=(const FX_CHAR* lpsz) {
+ if (lpsz == NULL || lpsz[0] == 0) {
+ Empty();
+ } else {
+ AssignCopy(FXSYS_strlen(lpsz), lpsz);
+ }
+ return *this;
}
-const CFX_ByteString& CFX_ByteString::operator=(const CFX_ByteStringC& str)
-{
- if (str.IsEmpty()) {
- Empty();
- } else {
- AssignCopy(str.GetLength(), str.GetCStr());
- }
+const CFX_ByteString& CFX_ByteString::operator=(const CFX_ByteStringC& str) {
+ if (str.IsEmpty()) {
+ Empty();
+ } else {
+ AssignCopy(str.GetLength(), str.GetCStr());
+ }
+ return *this;
+}
+const CFX_ByteString& CFX_ByteString::operator=(
+ const CFX_ByteString& stringSrc) {
+ if (m_pData == stringSrc.m_pData) {
return *this;
-}
-const CFX_ByteString& CFX_ByteString::operator=(const CFX_ByteString& stringSrc)
-{
- if (m_pData == stringSrc.m_pData) {
- return *this;
- }
- if (stringSrc.IsEmpty()) {
- Empty();
- } else if ((m_pData && m_pData->m_nRefs < 0) ||
- (stringSrc.m_pData && stringSrc.m_pData->m_nRefs < 0)) {
- AssignCopy(stringSrc.m_pData->m_nDataLength, stringSrc.m_pData->m_String);
- } else {
- Empty();
- m_pData = stringSrc.m_pData;
- if (m_pData) {
- m_pData->Retain();
- }
+ }
+ if (stringSrc.IsEmpty()) {
+ Empty();
+ } else if ((m_pData && m_pData->m_nRefs < 0) ||
+ (stringSrc.m_pData && stringSrc.m_pData->m_nRefs < 0)) {
+ AssignCopy(stringSrc.m_pData->m_nDataLength, stringSrc.m_pData->m_String);
+ } else {
+ Empty();
+ m_pData = stringSrc.m_pData;
+ if (m_pData) {
+ m_pData->Retain();
}
- return *this;
+ }
+ return *this;
}
-const CFX_ByteString& CFX_ByteString::operator=(const CFX_BinaryBuf& buf)
-{
- Load(buf.GetBuffer(), buf.GetSize());
- return *this;
+const CFX_ByteString& CFX_ByteString::operator=(const CFX_BinaryBuf& buf) {
+ Load(buf.GetBuffer(), buf.GetSize());
+ return *this;
}
-void CFX_ByteString::Load(const uint8_t* buf, FX_STRSIZE len)
-{
- Empty();
- if (len) {
- m_pData = StringData::Create(len);
- if (m_pData) {
- FXSYS_memcpy(m_pData->m_String, buf, len);
- }
- } else {
- m_pData = NULL;
+void CFX_ByteString::Load(const uint8_t* buf, FX_STRSIZE len) {
+ Empty();
+ if (len) {
+ m_pData = StringData::Create(len);
+ if (m_pData) {
+ FXSYS_memcpy(m_pData->m_String, buf, len);
}
+ } else {
+ m_pData = NULL;
+ }
}
-const CFX_ByteString& CFX_ByteString::operator+=(const FX_CHAR* lpsz)
-{
- if (lpsz) {
- ConcatInPlace(FXSYS_strlen(lpsz), lpsz);
- }
- return *this;
+const CFX_ByteString& CFX_ByteString::operator+=(const FX_CHAR* lpsz) {
+ if (lpsz) {
+ ConcatInPlace(FXSYS_strlen(lpsz), lpsz);
+ }
+ return *this;
}
-const CFX_ByteString& CFX_ByteString::operator+=(char ch)
-{
- ConcatInPlace(1, &ch);
- return *this;
+const CFX_ByteString& CFX_ByteString::operator+=(char ch) {
+ ConcatInPlace(1, &ch);
+ return *this;
}
-const CFX_ByteString& CFX_ByteString::operator+=(const CFX_ByteString& string)
-{
- if (string.m_pData == NULL) {
- return *this;
- }
- ConcatInPlace(string.m_pData->m_nDataLength, string.m_pData->m_String);
+const CFX_ByteString& CFX_ByteString::operator+=(const CFX_ByteString& string) {
+ if (string.m_pData == NULL) {
return *this;
+ }
+ ConcatInPlace(string.m_pData->m_nDataLength, string.m_pData->m_String);
+ return *this;
}
-const CFX_ByteString& CFX_ByteString::operator+=(const CFX_ByteStringC& string)
-{
- if (string.IsEmpty()) {
- return *this;
- }
- ConcatInPlace(string.GetLength(), string.GetCStr());
+const CFX_ByteString& CFX_ByteString::operator+=(
+ const CFX_ByteStringC& string) {
+ if (string.IsEmpty()) {
return *this;
-}
-bool CFX_ByteString::Equal(const char* ptr) const
-{
- if (!m_pData) {
- return !ptr || ptr[0] == '\0';
- }
- if (!ptr) {
- return m_pData->m_nDataLength == 0;
- }
- return FXSYS_strlen(ptr) == m_pData->m_nDataLength &&
- FXSYS_memcmp(ptr, m_pData->m_String, m_pData->m_nDataLength) == 0;
-}
-bool CFX_ByteString::Equal(const CFX_ByteStringC& str) const
-{
- if (m_pData == NULL) {
- return str.IsEmpty();
- }
- return m_pData->m_nDataLength == str.GetLength() &&
- FXSYS_memcmp(m_pData->m_String, str.GetCStr(), str.GetLength()) == 0;
-}
-bool CFX_ByteString::Equal(const CFX_ByteString& other) const
-{
- if (IsEmpty()) {
- return other.IsEmpty();
- }
- if (other.IsEmpty()) {
- return false;
- }
- return other.m_pData->m_nDataLength == m_pData->m_nDataLength &&
- FXSYS_memcmp(other.m_pData->m_String,
- m_pData->m_String,
- m_pData->m_nDataLength) == 0;
-}
-void CFX_ByteString::Empty()
-{
- if (m_pData) {
- m_pData->Release();
- m_pData = NULL;
- }
-}
-bool CFX_ByteString::EqualNoCase(const CFX_ByteStringC& str) const
-{
- if (m_pData == NULL) {
- return str.IsEmpty();
- }
- FX_STRSIZE len = str.GetLength();
- if (m_pData->m_nDataLength != len) {
- return false;
- }
- const uint8_t* pThis = (const uint8_t*)m_pData->m_String;
- const uint8_t* pThat = str.GetPtr();
- for (FX_STRSIZE i = 0; i < len; i ++) {
- if ((*pThis) != (*pThat)) {
- uint8_t bThis = *pThis;
- if (bThis >= 'A' && bThis <= 'Z') {
- bThis += 'a' - 'A';
- }
- uint8_t bThat = *pThat;
- if (bThat >= 'A' && bThat <= 'Z') {
- bThat += 'a' - 'A';
- }
- if (bThis != bThat) {
- return false;
- }
- }
- pThis ++;
- pThat ++;
- }
- return true;
-}
-void CFX_ByteString::AssignCopy(FX_STRSIZE nSrcLen, const FX_CHAR* lpszSrcData)
-{
- AllocBeforeWrite(nSrcLen);
- FXSYS_memcpy(m_pData->m_String, lpszSrcData, nSrcLen);
- m_pData->m_nDataLength = nSrcLen;
- m_pData->m_String[nSrcLen] = 0;
-}
-void CFX_ByteString::CopyBeforeWrite()
-{
- if (m_pData == NULL || m_pData->m_nRefs <= 1) {
- return;
- }
- StringData* pData = m_pData;
+ }
+ ConcatInPlace(string.GetLength(), string.GetCStr());
+ return *this;
+}
+bool CFX_ByteString::Equal(const char* ptr) const {
+ if (!m_pData) {
+ return !ptr || ptr[0] == '\0';
+ }
+ if (!ptr) {
+ return m_pData->m_nDataLength == 0;
+ }
+ return FXSYS_strlen(ptr) == m_pData->m_nDataLength &&
+ FXSYS_memcmp(ptr, m_pData->m_String, m_pData->m_nDataLength) == 0;
+}
+bool CFX_ByteString::Equal(const CFX_ByteStringC& str) const {
+ if (m_pData == NULL) {
+ return str.IsEmpty();
+ }
+ return m_pData->m_nDataLength == str.GetLength() &&
+ FXSYS_memcmp(m_pData->m_String, str.GetCStr(), str.GetLength()) == 0;
+}
+bool CFX_ByteString::Equal(const CFX_ByteString& other) const {
+ if (IsEmpty()) {
+ return other.IsEmpty();
+ }
+ if (other.IsEmpty()) {
+ return false;
+ }
+ return other.m_pData->m_nDataLength == m_pData->m_nDataLength &&
+ FXSYS_memcmp(other.m_pData->m_String, m_pData->m_String,
+ m_pData->m_nDataLength) == 0;
+}
+void CFX_ByteString::Empty() {
+ if (m_pData) {
m_pData->Release();
- FX_STRSIZE nDataLength = pData->m_nDataLength;
- m_pData = StringData::Create(nDataLength);
- if (m_pData != NULL) {
- FXSYS_memcpy(m_pData->m_String, pData->m_String, nDataLength + 1);
- }
-}
-void CFX_ByteString::AllocBeforeWrite(FX_STRSIZE nLen)
-{
- if (m_pData && m_pData->m_nRefs <= 1 && m_pData->m_nAllocLength >= nLen) {
- return;
- }
+ m_pData = NULL;
+ }
+}
+bool CFX_ByteString::EqualNoCase(const CFX_ByteStringC& str) const {
+ if (m_pData == NULL) {
+ return str.IsEmpty();
+ }
+ FX_STRSIZE len = str.GetLength();
+ if (m_pData->m_nDataLength != len) {
+ return false;
+ }
+ const uint8_t* pThis = (const uint8_t*)m_pData->m_String;
+ const uint8_t* pThat = str.GetPtr();
+ for (FX_STRSIZE i = 0; i < len; i++) {
+ if ((*pThis) != (*pThat)) {
+ uint8_t bThis = *pThis;
+ if (bThis >= 'A' && bThis <= 'Z') {
+ bThis += 'a' - 'A';
+ }
+ uint8_t bThat = *pThat;
+ if (bThat >= 'A' && bThat <= 'Z') {
+ bThat += 'a' - 'A';
+ }
+ if (bThis != bThat) {
+ return false;
+ }
+ }
+ pThis++;
+ pThat++;
+ }
+ return true;
+}
+void CFX_ByteString::AssignCopy(FX_STRSIZE nSrcLen,
+ const FX_CHAR* lpszSrcData) {
+ AllocBeforeWrite(nSrcLen);
+ FXSYS_memcpy(m_pData->m_String, lpszSrcData, nSrcLen);
+ m_pData->m_nDataLength = nSrcLen;
+ m_pData->m_String[nSrcLen] = 0;
+}
+void CFX_ByteString::CopyBeforeWrite() {
+ if (m_pData == NULL || m_pData->m_nRefs <= 1) {
+ return;
+ }
+ StringData* pData = m_pData;
+ m_pData->Release();
+ FX_STRSIZE nDataLength = pData->m_nDataLength;
+ m_pData = StringData::Create(nDataLength);
+ if (m_pData != NULL) {
+ FXSYS_memcpy(m_pData->m_String, pData->m_String, nDataLength + 1);
+ }
+}
+void CFX_ByteString::AllocBeforeWrite(FX_STRSIZE nLen) {
+ if (m_pData && m_pData->m_nRefs <= 1 && m_pData->m_nAllocLength >= nLen) {
+ return;
+ }
+ Empty();
+ m_pData = StringData::Create(nLen);
+}
+void CFX_ByteString::ReleaseBuffer(FX_STRSIZE nNewLength) {
+ if (m_pData == NULL) {
+ return;
+ }
+ CopyBeforeWrite();
+ if (nNewLength == -1) {
+ nNewLength = FXSYS_strlen((const FX_CHAR*)m_pData->m_String);
+ }
+ if (nNewLength == 0) {
Empty();
- m_pData = StringData::Create(nLen);
-}
-void CFX_ByteString::ReleaseBuffer(FX_STRSIZE nNewLength)
-{
- if (m_pData == NULL) {
- return;
- }
- CopyBeforeWrite();
- if (nNewLength == -1) {
- nNewLength = FXSYS_strlen((const FX_CHAR*)m_pData->m_String);
- }
- if (nNewLength == 0) {
- Empty();
- return;
- }
- FXSYS_assert(nNewLength <= m_pData->m_nAllocLength);
- m_pData->m_nDataLength = nNewLength;
- m_pData->m_String[nNewLength] = 0;
-}
-void CFX_ByteString::Reserve(FX_STRSIZE len)
-{
- GetBuffer(len);
- ReleaseBuffer(GetLength());
-}
-FX_CHAR* CFX_ByteString::GetBuffer(FX_STRSIZE nMinBufLength)
-{
- if (m_pData == NULL && nMinBufLength == 0) {
- return NULL;
- }
- if (m_pData && m_pData->m_nRefs <= 1 && m_pData->m_nAllocLength >= nMinBufLength) {
- return m_pData->m_String;
- }
- if (m_pData == NULL) {
- m_pData = StringData::Create(nMinBufLength);
- if (!m_pData) {
- return NULL;
- }
- m_pData->m_nDataLength = 0;
- m_pData->m_String[0] = 0;
- return m_pData->m_String;
- }
- StringData* pOldData = m_pData;
- FX_STRSIZE nOldLen = pOldData->m_nDataLength;
- if (nMinBufLength < nOldLen) {
- nMinBufLength = nOldLen;
- }
+ return;
+ }
+ FXSYS_assert(nNewLength <= m_pData->m_nAllocLength);
+ m_pData->m_nDataLength = nNewLength;
+ m_pData->m_String[nNewLength] = 0;
+}
+void CFX_ByteString::Reserve(FX_STRSIZE len) {
+ GetBuffer(len);
+ ReleaseBuffer(GetLength());
+}
+FX_CHAR* CFX_ByteString::GetBuffer(FX_STRSIZE nMinBufLength) {
+ if (m_pData == NULL && nMinBufLength == 0) {
+ return NULL;
+ }
+ if (m_pData && m_pData->m_nRefs <= 1 &&
+ m_pData->m_nAllocLength >= nMinBufLength) {
+ return m_pData->m_String;
+ }
+ if (m_pData == NULL) {
m_pData = StringData::Create(nMinBufLength);
if (!m_pData) {
- return NULL;
+ return NULL;
}
- FXSYS_memcpy(m_pData->m_String, pOldData->m_String, (nOldLen + 1));
- m_pData->m_nDataLength = nOldLen;
- pOldData->Release();
+ m_pData->m_nDataLength = 0;
+ m_pData->m_String[0] = 0;
return m_pData->m_String;
-}
-FX_STRSIZE CFX_ByteString::Delete(FX_STRSIZE nIndex, FX_STRSIZE nCount)
-{
- if (m_pData == NULL) {
- return 0;
- }
- if (nIndex < 0) {
- nIndex = 0;
- }
- FX_STRSIZE nOldLength = m_pData->m_nDataLength;
- if (nCount > 0 && nIndex < nOldLength) {
- FX_STRSIZE mLength = nIndex + nCount;
- if (mLength >= nOldLength) {
- m_pData->m_nDataLength = nIndex;
- return m_pData->m_nDataLength;
- }
- CopyBeforeWrite();
- int nBytesToCopy = nOldLength - mLength + 1;
- FXSYS_memmove(m_pData->m_String + nIndex,
- m_pData->m_String + mLength, nBytesToCopy);
- m_pData->m_nDataLength = nOldLength - nCount;
- }
- return m_pData->m_nDataLength;
-}
-void CFX_ByteString::ConcatInPlace(FX_STRSIZE nSrcLen, const FX_CHAR* lpszSrcData)
-{
- if (nSrcLen == 0 || lpszSrcData == NULL) {
- return;
- }
- if (m_pData == NULL) {
- m_pData = StringData::Create(nSrcLen);
- if (!m_pData) {
- return;
- }
- FXSYS_memcpy(m_pData->m_String, lpszSrcData, nSrcLen);
- return;
- }
- if (m_pData->m_nRefs > 1 || m_pData->m_nDataLength + nSrcLen > m_pData->m_nAllocLength) {
- ConcatCopy(m_pData->m_nDataLength, m_pData->m_String, nSrcLen, lpszSrcData);
- } else {
- FXSYS_memcpy(m_pData->m_String + m_pData->m_nDataLength, lpszSrcData, nSrcLen);
- m_pData->m_nDataLength += nSrcLen;
- m_pData->m_String[m_pData->m_nDataLength] = 0;
- }
-}
-void CFX_ByteString::ConcatCopy(FX_STRSIZE nSrc1Len, const FX_CHAR* lpszSrc1Data,
- FX_STRSIZE nSrc2Len, const FX_CHAR* lpszSrc2Data)
-{
- int nNewLen = nSrc1Len + nSrc2Len;
- if (nNewLen <= 0) {
- return;
- }
- // Don't release until done copying, might be one of the arguments.
- StringData* pOldData = m_pData;
- m_pData = StringData::Create(nNewLen);
- if (m_pData) {
- memcpy(m_pData->m_String, lpszSrc1Data, nSrc1Len);
- memcpy(m_pData->m_String + nSrc1Len, lpszSrc2Data, nSrc2Len);
- }
- pOldData->Release();
-}
-CFX_ByteString CFX_ByteString::Mid(FX_STRSIZE nFirst) const
-{
- if (m_pData == NULL) {
- return CFX_ByteString();
- }
- return Mid(nFirst, m_pData->m_nDataLength - nFirst);
-}
-CFX_ByteString CFX_ByteString::Mid(FX_STRSIZE nFirst, FX_STRSIZE nCount) const
-{
- if (nFirst < 0) {
- nFirst = 0;
- }
- if (nCount < 0) {
- nCount = 0;
- }
- if (nFirst + nCount > m_pData->m_nDataLength) {
- nCount = m_pData->m_nDataLength - nFirst;
- }
- if (nFirst > m_pData->m_nDataLength) {
- nCount = 0;
- }
- if (nFirst == 0 && nFirst + nCount == m_pData->m_nDataLength) {
- return *this;
- }
- CFX_ByteString dest;
- AllocCopy(dest, nCount, nFirst);
- return dest;
-}
-void CFX_ByteString::AllocCopy(CFX_ByteString& dest, FX_STRSIZE nCopyLen, FX_STRSIZE nCopyIndex) const
-{
- // |FX_STRSIZE| is currently typedef'd as in |int|. TODO(palmer): It
- // should be a |size_t|, or at least unsigned.
- if (nCopyLen == 0 || nCopyLen < 0) {
- return;
+ }
+ StringData* pOldData = m_pData;
+ FX_STRSIZE nOldLen = pOldData->m_nDataLength;
+ if (nMinBufLength < nOldLen) {
+ nMinBufLength = nOldLen;
+ }
+ m_pData = StringData::Create(nMinBufLength);
+ if (!m_pData) {
+ return NULL;
+ }
+ FXSYS_memcpy(m_pData->m_String, pOldData->m_String, (nOldLen + 1));
+ m_pData->m_nDataLength = nOldLen;
+ pOldData->Release();
+ return m_pData->m_String;
+}
+FX_STRSIZE CFX_ByteString::Delete(FX_STRSIZE nIndex, FX_STRSIZE nCount) {
+ if (m_pData == NULL) {
+ return 0;
+ }
+ if (nIndex < 0) {
+ nIndex = 0;
+ }
+ FX_STRSIZE nOldLength = m_pData->m_nDataLength;
+ if (nCount > 0 && nIndex < nOldLength) {
+ FX_STRSIZE mLength = nIndex + nCount;
+ if (mLength >= nOldLength) {
+ m_pData->m_nDataLength = nIndex;
+ return m_pData->m_nDataLength;
}
- ASSERT(dest.m_pData == NULL);
- dest.m_pData = StringData::Create(nCopyLen);
- if (dest.m_pData) {
- FXSYS_memcpy(dest.m_pData->m_String, m_pData->m_String + nCopyIndex, nCopyLen);
+ CopyBeforeWrite();
+ int nBytesToCopy = nOldLength - mLength + 1;
+ FXSYS_memmove(m_pData->m_String + nIndex, m_pData->m_String + mLength,
+ nBytesToCopy);
+ m_pData->m_nDataLength = nOldLength - nCount;
+ }
+ return m_pData->m_nDataLength;
+}
+void CFX_ByteString::ConcatInPlace(FX_STRSIZE nSrcLen,
+ const FX_CHAR* lpszSrcData) {
+ if (nSrcLen == 0 || lpszSrcData == NULL) {
+ return;
+ }
+ if (m_pData == NULL) {
+ m_pData = StringData::Create(nSrcLen);
+ if (!m_pData) {
+ return;
}
-}
-#define FORCE_ANSI 0x10000
-#define FORCE_UNICODE 0x20000
-#define FORCE_INT64 0x40000
-void CFX_ByteString::FormatV(const FX_CHAR* lpszFormat, va_list argList)
-{
- va_list argListSave;
-#if defined(__ARMCC_VERSION) || (!defined(_MSC_VER) && (_FX_CPU_ == _FX_X64_ || _FX_CPU_ == _FX_IA64_ || _FX_CPU_ == _FX_ARM64_)) || defined(__native_client__)
- va_copy(argListSave, argList);
+ FXSYS_memcpy(m_pData->m_String, lpszSrcData, nSrcLen);
+ return;
+ }
+ if (m_pData->m_nRefs > 1 ||
+ m_pData->m_nDataLength + nSrcLen > m_pData->m_nAllocLength) {
+ ConcatCopy(m_pData->m_nDataLength, m_pData->m_String, nSrcLen, lpszSrcData);
+ } else {
+ FXSYS_memcpy(m_pData->m_String + m_pData->m_nDataLength, lpszSrcData,
+ nSrcLen);
+ m_pData->m_nDataLength += nSrcLen;
+ m_pData->m_String[m_pData->m_nDataLength] = 0;
+ }
+}
+void CFX_ByteString::ConcatCopy(FX_STRSIZE nSrc1Len,
+ const FX_CHAR* lpszSrc1Data,
+ FX_STRSIZE nSrc2Len,
+ const FX_CHAR* lpszSrc2Data) {
+ int nNewLen = nSrc1Len + nSrc2Len;
+ if (nNewLen <= 0) {
+ return;
+ }
+ // Don't release until done copying, might be one of the arguments.
+ StringData* pOldData = m_pData;
+ m_pData = StringData::Create(nNewLen);
+ if (m_pData) {
+ memcpy(m_pData->m_String, lpszSrc1Data, nSrc1Len);
+ memcpy(m_pData->m_String + nSrc1Len, lpszSrc2Data, nSrc2Len);
+ }
+ pOldData->Release();
+}
+CFX_ByteString CFX_ByteString::Mid(FX_STRSIZE nFirst) const {
+ if (m_pData == NULL) {
+ return CFX_ByteString();
+ }
+ return Mid(nFirst, m_pData->m_nDataLength - nFirst);
+}
+CFX_ByteString CFX_ByteString::Mid(FX_STRSIZE nFirst, FX_STRSIZE nCount) const {
+ if (nFirst < 0) {
+ nFirst = 0;
+ }
+ if (nCount < 0) {
+ nCount = 0;
+ }
+ if (nFirst + nCount > m_pData->m_nDataLength) {
+ nCount = m_pData->m_nDataLength - nFirst;
+ }
+ if (nFirst > m_pData->m_nDataLength) {
+ nCount = 0;
+ }
+ if (nFirst == 0 && nFirst + nCount == m_pData->m_nDataLength) {
+ return *this;
+ }
+ CFX_ByteString dest;
+ AllocCopy(dest, nCount, nFirst);
+ return dest;
+}
+void CFX_ByteString::AllocCopy(CFX_ByteString& dest,
+ FX_STRSIZE nCopyLen,
+ FX_STRSIZE nCopyIndex) const {
+ // |FX_STRSIZE| is currently typedef'd as in |int|. TODO(palmer): It
+ // should be a |size_t|, or at least unsigned.
+ if (nCopyLen == 0 || nCopyLen < 0) {
+ return;
+ }
+ ASSERT(dest.m_pData == NULL);
+ dest.m_pData = StringData::Create(nCopyLen);
+ if (dest.m_pData) {
+ FXSYS_memcpy(dest.m_pData->m_String, m_pData->m_String + nCopyIndex,
+ nCopyLen);
+ }
+}
+#define FORCE_ANSI 0x10000
+#define FORCE_UNICODE 0x20000
+#define FORCE_INT64 0x40000
+void CFX_ByteString::FormatV(const FX_CHAR* lpszFormat, va_list argList) {
+ va_list argListSave;
+#if defined(__ARMCC_VERSION) || \
+ (!defined(_MSC_VER) && (_FX_CPU_ == _FX_X64_ || _FX_CPU_ == _FX_IA64_ || \
+ _FX_CPU_ == _FX_ARM64_)) || \
+ defined(__native_client__)
+ va_copy(argListSave, argList);
#else
- argListSave = argList;
+ argListSave = argList;
#endif
- int nMaxLen = 0;
- for (const FX_CHAR* lpsz = lpszFormat; *lpsz != 0; lpsz ++) {
- if (*lpsz != '%' || *(lpsz = lpsz + 1) == '%') {
- nMaxLen += FXSYS_strlen(lpsz);
- continue;
- }
- int nItemLen = 0;
- int nWidth = 0;
- for (; *lpsz != 0; lpsz ++) {
- if (*lpsz == '#') {
- nMaxLen += 2;
- } else if (*lpsz == '*') {
- nWidth = va_arg(argList, int);
- } else if (*lpsz == '-' || *lpsz == '+' || *lpsz == '0' ||
- *lpsz == ' ')
- ;
- else {
- break;
- }
- }
- if (nWidth == 0) {
- nWidth = FXSYS_atoi(lpsz);
- for (; (*lpsz) >= '0' && (*lpsz) <= '9'; lpsz ++)
- ;
- }
- if (nWidth < 0 || nWidth > 128 * 1024) {
- lpszFormat = "Bad width";
- nMaxLen = 10;
- break;
- }
- int nPrecision = 0;
- if (*lpsz == '.') {
- lpsz ++;
- if (*lpsz == '*') {
- nPrecision = va_arg(argList, int);
- lpsz ++;
- } else {
- nPrecision = FXSYS_atoi(lpsz);
- for (; (*lpsz) >= '0' && (*lpsz) <= '9'; lpsz ++)
- ;
- }
- }
- if (nPrecision < 0 || nPrecision > 128 * 1024) {
- lpszFormat = "Bad precision";
- nMaxLen = 14;
- break;
- }
- int nModifier = 0;
- if (FXSYS_strncmp(lpsz, "I64", 3) == 0) {
- lpsz += 3;
- nModifier = FORCE_INT64;
+ int nMaxLen = 0;
+ for (const FX_CHAR* lpsz = lpszFormat; *lpsz != 0; lpsz++) {
+ if (*lpsz != '%' || *(lpsz = lpsz + 1) == '%') {
+ nMaxLen += FXSYS_strlen(lpsz);
+ continue;
+ }
+ int nItemLen = 0;
+ int nWidth = 0;
+ for (; *lpsz != 0; lpsz++) {
+ if (*lpsz == '#') {
+ nMaxLen += 2;
+ } else if (*lpsz == '*') {
+ nWidth = va_arg(argList, int);
+ } else if (*lpsz == '-' || *lpsz == '+' || *lpsz == '0' || *lpsz == ' ')
+ ;
+ else {
+ break;
+ }
+ }
+ if (nWidth == 0) {
+ nWidth = FXSYS_atoi(lpsz);
+ for (; (*lpsz) >= '0' && (*lpsz) <= '9'; lpsz++)
+ ;
+ }
+ if (nWidth < 0 || nWidth > 128 * 1024) {
+ lpszFormat = "Bad width";
+ nMaxLen = 10;
+ break;
+ }
+ int nPrecision = 0;
+ if (*lpsz == '.') {
+ lpsz++;
+ if (*lpsz == '*') {
+ nPrecision = va_arg(argList, int);
+ lpsz++;
+ } else {
+ nPrecision = FXSYS_atoi(lpsz);
+ for (; (*lpsz) >= '0' && (*lpsz) <= '9'; lpsz++)
+ ;
+ }
+ }
+ if (nPrecision < 0 || nPrecision > 128 * 1024) {
+ lpszFormat = "Bad precision";
+ nMaxLen = 14;
+ break;
+ }
+ int nModifier = 0;
+ if (FXSYS_strncmp(lpsz, "I64", 3) == 0) {
+ lpsz += 3;
+ nModifier = FORCE_INT64;
+ } else {
+ switch (*lpsz) {
+ case 'h':
+ nModifier = FORCE_ANSI;
+ lpsz++;
+ break;
+ case 'l':
+ nModifier = FORCE_UNICODE;
+ lpsz++;
+ break;
+ case 'F':
+ case 'N':
+ case 'L':
+ lpsz++;
+ break;
+ }
+ }
+ switch (*lpsz | nModifier) {
+ case 'c':
+ case 'C':
+ nItemLen = 2;
+ va_arg(argList, int);
+ break;
+ case 'c' | FORCE_ANSI:
+ case 'C' | FORCE_ANSI:
+ nItemLen = 2;
+ va_arg(argList, int);
+ break;
+ case 'c' | FORCE_UNICODE:
+ case 'C' | FORCE_UNICODE:
+ nItemLen = 2;
+ va_arg(argList, int);
+ break;
+ case 's': {
+ const FX_CHAR* pstrNextArg = va_arg(argList, const FX_CHAR*);
+ if (pstrNextArg == NULL) {
+ nItemLen = 6;
} else {
- switch (*lpsz) {
- case 'h':
- nModifier = FORCE_ANSI;
- lpsz ++;
- break;
- case 'l':
- nModifier = FORCE_UNICODE;
- lpsz ++;
- break;
- case 'F':
- case 'N':
- case 'L':
- lpsz ++;
- break;
- }
+ nItemLen = FXSYS_strlen(pstrNextArg);
+ if (nItemLen < 1) {
+ nItemLen = 1;
+ }
}
- switch (*lpsz | nModifier) {
- case 'c':
- case 'C':
- nItemLen = 2;
- va_arg(argList, int);
- break;
- case 'c'|FORCE_ANSI:
- case 'C'|FORCE_ANSI:
- nItemLen = 2;
- va_arg(argList, int);
- break;
- case 'c'|FORCE_UNICODE:
- case 'C'|FORCE_UNICODE:
- nItemLen = 2;
- va_arg(argList, int);
- break;
- case 's': {
- const FX_CHAR* pstrNextArg = va_arg(argList, const FX_CHAR*);
- if (pstrNextArg == NULL) {
- nItemLen = 6;
- } else {
- nItemLen = FXSYS_strlen(pstrNextArg);
- if (nItemLen < 1) {
- nItemLen = 1;
- }
- }
- }
- break;
- case 'S': {
- FX_WCHAR* pstrNextArg = va_arg(argList, FX_WCHAR*);
- if (pstrNextArg == NULL) {
- nItemLen = 6;
- } else {
- nItemLen = FXSYS_wcslen(pstrNextArg);
- if (nItemLen < 1) {
- nItemLen = 1;
- }
- }
- }
- break;
- case 's'|FORCE_ANSI:
- case 'S'|FORCE_ANSI: {
- const FX_CHAR* pstrNextArg = va_arg(argList, const FX_CHAR*);
- if (pstrNextArg == NULL) {
- nItemLen = 6;
- } else {
- nItemLen = FXSYS_strlen(pstrNextArg);
- if (nItemLen < 1) {
- nItemLen = 1;
- }
- }
- }
- break;
- case 's'|FORCE_UNICODE:
- case 'S'|FORCE_UNICODE: {
- FX_WCHAR* pstrNextArg = va_arg(argList, FX_WCHAR*);
- if (pstrNextArg == NULL) {
- nItemLen = 6;
- } else {
- nItemLen = FXSYS_wcslen(pstrNextArg);
- if (nItemLen < 1) {
- nItemLen = 1;
- }
- }
- }
- break;
- }
- if (nItemLen != 0) {
- if (nPrecision != 0 && nItemLen > nPrecision) {
- nItemLen = nPrecision;
- }
- if (nItemLen < nWidth) {
- nItemLen = nWidth;
- }
+ } break;
+ case 'S': {
+ FX_WCHAR* pstrNextArg = va_arg(argList, FX_WCHAR*);
+ if (pstrNextArg == NULL) {
+ nItemLen = 6;
} else {
- switch (*lpsz) {
- case 'd':
- case 'i':
- case 'u':
- case 'x':
- case 'X':
- case 'o':
- if (nModifier & FORCE_INT64) {
- va_arg(argList, int64_t);
- } else {
- va_arg(argList, int);
- }
- nItemLen = 32;
- if (nItemLen < nWidth + nPrecision) {
- nItemLen = nWidth + nPrecision;
- }
- break;
- case 'a':
- case 'A':
- case 'e':
- case 'E':
- case 'g':
- case 'G':
- va_arg(argList, double);
- nItemLen = 128;
- if (nItemLen < nWidth + nPrecision) {
- nItemLen = nWidth + nPrecision;
- }
- break;
- case 'f':
- if (nWidth + nPrecision > 100) {
- nItemLen = nPrecision + nWidth + 128;
- } else {
- char pszTemp[256];
- double f = va_arg(argList, double);
- memset(pszTemp, 0, sizeof(pszTemp));
- FXSYS_snprintf(pszTemp, sizeof(pszTemp) - 1, "%*.*f", nWidth, nPrecision + 6, f);
- nItemLen = FXSYS_strlen(pszTemp);
- }
- break;
- case 'p':
- va_arg(argList, void*);
- nItemLen = 32;
- if (nItemLen < nWidth + nPrecision) {
- nItemLen = nWidth + nPrecision;
- }
- break;
- case 'n':
- va_arg(argList, int*);
- break;
- }
+ nItemLen = FXSYS_wcslen(pstrNextArg);
+ if (nItemLen < 1) {
+ nItemLen = 1;
+ }
}
- nMaxLen += nItemLen;
- }
- nMaxLen += 32; // Fudge factor.
- GetBuffer(nMaxLen);
- if (m_pData) {
- memset(m_pData->m_String, 0, nMaxLen);
- FXSYS_vsnprintf(m_pData->m_String, nMaxLen - 1, lpszFormat, argListSave);
- ReleaseBuffer();
- }
- va_end(argListSave);
-}
-void CFX_ByteString::Format(const FX_CHAR* lpszFormat, ...)
-{
- va_list argList;
- va_start(argList, lpszFormat);
- FormatV(lpszFormat, argList);
- va_end(argList);
-}
-FX_STRSIZE CFX_ByteString::Insert(FX_STRSIZE nIndex, FX_CHAR ch)
-{
- CopyBeforeWrite();
- if (nIndex < 0) {
- nIndex = 0;
- }
- FX_STRSIZE nNewLength = m_pData ? m_pData->m_nDataLength : 0;
- if (nIndex > nNewLength) {
- nIndex = nNewLength;
- }
- nNewLength++;
- if (m_pData == NULL || m_pData->m_nAllocLength < nNewLength) {
- StringData* pOldData = m_pData;
- const FX_CHAR* pstr = m_pData->m_String;
- m_pData = StringData::Create(nNewLength);
- if (!m_pData) {
- return 0;
+ } break;
+ case 's' | FORCE_ANSI:
+ case 'S' | FORCE_ANSI: {
+ const FX_CHAR* pstrNextArg = va_arg(argList, const FX_CHAR*);
+ if (pstrNextArg == NULL) {
+ nItemLen = 6;
+ } else {
+ nItemLen = FXSYS_strlen(pstrNextArg);
+ if (nItemLen < 1) {
+ nItemLen = 1;
+ }
}
- if(pOldData != NULL) {
- FXSYS_memmove(m_pData->m_String, pstr, (pOldData->m_nDataLength + 1));
- pOldData->Release();
+ } break;
+ case 's' | FORCE_UNICODE:
+ case 'S' | FORCE_UNICODE: {
+ FX_WCHAR* pstrNextArg = va_arg(argList, FX_WCHAR*);
+ if (pstrNextArg == NULL) {
+ nItemLen = 6;
} else {
- m_pData->m_String[0] = 0;
+ nItemLen = FXSYS_wcslen(pstrNextArg);
+ if (nItemLen < 1) {
+ nItemLen = 1;
+ }
}
+ } break;
+ }
+ if (nItemLen != 0) {
+ if (nPrecision != 0 && nItemLen > nPrecision) {
+ nItemLen = nPrecision;
+ }
+ if (nItemLen < nWidth) {
+ nItemLen = nWidth;
+ }
+ } else {
+ switch (*lpsz) {
+ case 'd':
+ case 'i':
+ case 'u':
+ case 'x':
+ case 'X':
+ case 'o':
+ if (nModifier & FORCE_INT64) {
+ va_arg(argList, int64_t);
+ } else {
+ va_arg(argList, int);
+ }
+ nItemLen = 32;
+ if (nItemLen < nWidth + nPrecision) {
+ nItemLen = nWidth + nPrecision;
+ }
+ break;
+ case 'a':
+ case 'A':
+ case 'e':
+ case 'E':
+ case 'g':
+ case 'G':
+ va_arg(argList, double);
+ nItemLen = 128;
+ if (nItemLen < nWidth + nPrecision) {
+ nItemLen = nWidth + nPrecision;
+ }
+ break;
+ case 'f':
+ if (nWidth + nPrecision > 100) {
+ nItemLen = nPrecision + nWidth + 128;
+ } else {
+ char pszTemp[256];
+ double f = va_arg(argList, double);
+ memset(pszTemp, 0, sizeof(pszTemp));
+ FXSYS_snprintf(pszTemp, sizeof(pszTemp) - 1, "%*.*f", nWidth,
+ nPrecision + 6, f);
+ nItemLen = FXSYS_strlen(pszTemp);
+ }
+ break;
+ case 'p':
+ va_arg(argList, void*);
+ nItemLen = 32;
+ if (nItemLen < nWidth + nPrecision) {
+ nItemLen = nWidth + nPrecision;
+ }
+ break;
+ case 'n':
+ va_arg(argList, int*);
+ break;
+ }
+ }
+ nMaxLen += nItemLen;
+ }
+ nMaxLen += 32; // Fudge factor.
+ GetBuffer(nMaxLen);
+ if (m_pData) {
+ memset(m_pData->m_String, 0, nMaxLen);
+ FXSYS_vsnprintf(m_pData->m_String, nMaxLen - 1, lpszFormat, argListSave);
+ ReleaseBuffer();
+ }
+ va_end(argListSave);
+}
+void CFX_ByteString::Format(const FX_CHAR* lpszFormat, ...) {
+ va_list argList;
+ va_start(argList, lpszFormat);
+ FormatV(lpszFormat, argList);
+ va_end(argList);
+}
+FX_STRSIZE CFX_ByteString::Insert(FX_STRSIZE nIndex, FX_CHAR ch) {
+ CopyBeforeWrite();
+ if (nIndex < 0) {
+ nIndex = 0;
+ }
+ FX_STRSIZE nNewLength = m_pData ? m_pData->m_nDataLength : 0;
+ if (nIndex > nNewLength) {
+ nIndex = nNewLength;
+ }
+ nNewLength++;
+ if (m_pData == NULL || m_pData->m_nAllocLength < nNewLength) {
+ StringData* pOldData = m_pData;
+ const FX_CHAR* pstr = m_pData->m_String;
+ m_pData = StringData::Create(nNewLength);
+ if (!m_pData) {
+ return 0;
}
- FXSYS_memmove(m_pData->m_String + nIndex + 1,
- m_pData->m_String + nIndex, (nNewLength - nIndex));
- m_pData->m_String[nIndex] = ch;
- m_pData->m_nDataLength = nNewLength;
- return nNewLength;
-}
-CFX_ByteString CFX_ByteString::Right(FX_STRSIZE nCount) const
-{
- if (m_pData == NULL) {
- return CFX_ByteString();
- }
- if (nCount < 0) {
- nCount = 0;
- }
- if (nCount >= m_pData->m_nDataLength) {
- return *this;
- }
- CFX_ByteString dest;
- AllocCopy(dest, nCount, m_pData->m_nDataLength - nCount);
- return dest;
-}
-CFX_ByteString CFX_ByteString::Left(FX_STRSIZE nCount) const
-{
- if (m_pData == NULL) {
- return CFX_ByteString();
- }
- if (nCount < 0) {
- nCount = 0;
- }
- if (nCount >= m_pData->m_nDataLength) {
- return *this;
- }
- CFX_ByteString dest;
- AllocCopy(dest, nCount, 0);
- return dest;
-}
-FX_STRSIZE CFX_ByteString::Find(FX_CHAR ch, FX_STRSIZE nStart) const
-{
- if (m_pData == NULL) {
- return -1;
- }
- FX_STRSIZE nLength = m_pData->m_nDataLength;
- if (nStart >= nLength) {
- return -1;
- }
- const FX_CHAR* lpsz = FXSYS_strchr(m_pData->m_String + nStart, ch);
- return (lpsz == NULL) ? -1 : (int)(lpsz - m_pData->m_String);
+ if (pOldData != NULL) {
+ FXSYS_memmove(m_pData->m_String, pstr, (pOldData->m_nDataLength + 1));
+ pOldData->Release();
+ } else {
+ m_pData->m_String[0] = 0;
+ }
+ }
+ FXSYS_memmove(m_pData->m_String + nIndex + 1, m_pData->m_String + nIndex,
+ (nNewLength - nIndex));
+ m_pData->m_String[nIndex] = ch;
+ m_pData->m_nDataLength = nNewLength;
+ return nNewLength;
+}
+CFX_ByteString CFX_ByteString::Right(FX_STRSIZE nCount) const {
+ if (m_pData == NULL) {
+ return CFX_ByteString();
+ }
+ if (nCount < 0) {
+ nCount = 0;
+ }
+ if (nCount >= m_pData->m_nDataLength) {
+ return *this;
+ }
+ CFX_ByteString dest;
+ AllocCopy(dest, nCount, m_pData->m_nDataLength - nCount);
+ return dest;
+}
+CFX_ByteString CFX_ByteString::Left(FX_STRSIZE nCount) const {
+ if (m_pData == NULL) {
+ return CFX_ByteString();
+ }
+ if (nCount < 0) {
+ nCount = 0;
+ }
+ if (nCount >= m_pData->m_nDataLength) {
+ return *this;
+ }
+ CFX_ByteString dest;
+ AllocCopy(dest, nCount, 0);
+ return dest;
}
-FX_STRSIZE CFX_ByteString::ReverseFind(FX_CHAR ch) const
-{
- if (m_pData == NULL) {
- return -1;
- }
- FX_STRSIZE nLength = m_pData->m_nDataLength;
- while (nLength) {
- if (m_pData->m_String[nLength - 1] == ch) {
- return nLength - 1;
- }
- nLength --;
- }
+FX_STRSIZE CFX_ByteString::Find(FX_CHAR ch, FX_STRSIZE nStart) const {
+ if (m_pData == NULL) {
return -1;
+ }
+ FX_STRSIZE nLength = m_pData->m_nDataLength;
+ if (nStart >= nLength) {
+ return -1;
+ }
+ const FX_CHAR* lpsz = FXSYS_strchr(m_pData->m_String + nStart, ch);
+ return (lpsz == NULL) ? -1 : (int)(lpsz - m_pData->m_String);
}
-const FX_CHAR* FX_strstr(const FX_CHAR* str1, int len1, const FX_CHAR* str2, int len2)
-{
- if (len2 > len1 || len2 == 0) {
- return NULL;
- }
- const FX_CHAR* end_ptr = str1 + len1 - len2;
- while (str1 <= end_ptr) {
- int i = 0;
- while (1) {
- if (str1[i] != str2[i]) {
- break;
- }
- i ++;
- if (i == len2) {
- return str1;
- }
- }
- str1 ++;
- }
+FX_STRSIZE CFX_ByteString::ReverseFind(FX_CHAR ch) const {
+ if (m_pData == NULL) {
+ return -1;
+ }
+ FX_STRSIZE nLength = m_pData->m_nDataLength;
+ while (nLength) {
+ if (m_pData->m_String[nLength - 1] == ch) {
+ return nLength - 1;
+ }
+ nLength--;
+ }
+ return -1;
+}
+const FX_CHAR* FX_strstr(const FX_CHAR* str1,
+ int len1,
+ const FX_CHAR* str2,
+ int len2) {
+ if (len2 > len1 || len2 == 0) {
return NULL;
-}
-FX_STRSIZE CFX_ByteString::Find(const CFX_ByteStringC& lpszSub, FX_STRSIZE nStart) const
-{
- if (m_pData == NULL) {
- return -1;
- }
- FX_STRSIZE nLength = m_pData->m_nDataLength;
- if (nStart > nLength) {
- return -1;
- }
- const FX_CHAR* lpsz = FX_strstr(m_pData->m_String + nStart, m_pData->m_nDataLength - nStart,
- lpszSub.GetCStr(), lpszSub.GetLength());
- return (lpsz == NULL) ? -1 : (int)(lpsz - m_pData->m_String);
-}
-void CFX_ByteString::MakeLower()
-{
- if (m_pData == NULL) {
- return;
- }
- CopyBeforeWrite();
- if (GetLength() < 1) {
- return;
- }
- FXSYS_strlwr(m_pData->m_String);
-}
-void CFX_ByteString::MakeUpper()
-{
- if (m_pData == NULL) {
- return;
- }
- CopyBeforeWrite();
- if (GetLength() < 1) {
- return;
- }
- FXSYS_strupr(m_pData->m_String);
-}
-FX_STRSIZE CFX_ByteString::Remove(FX_CHAR chRemove)
-{
- if (m_pData == NULL) {
- return 0;
- }
- CopyBeforeWrite();
- if (GetLength() < 1) {
- return 0;
- }
- FX_CHAR* pstrSource = m_pData->m_String;
- FX_CHAR* pstrDest = m_pData->m_String;
- FX_CHAR* pstrEnd = m_pData->m_String + m_pData->m_nDataLength;
- while (pstrSource < pstrEnd) {
- if (*pstrSource != chRemove) {
- *pstrDest = *pstrSource;
- pstrDest ++;
- }
- pstrSource ++;
- }
- *pstrDest = 0;
- FX_STRSIZE nCount = (FX_STRSIZE)(pstrSource - pstrDest);
- m_pData->m_nDataLength -= nCount;
- return nCount;
-}
-FX_STRSIZE CFX_ByteString::Replace(const CFX_ByteStringC& lpszOld, const CFX_ByteStringC& lpszNew)
-{
- if (m_pData == NULL) {
- return 0;
- }
- if (lpszOld.IsEmpty()) {
- return 0;
- }
- FX_STRSIZE nSourceLen = lpszOld.GetLength();
- FX_STRSIZE nReplacementLen = lpszNew.GetLength();
- FX_STRSIZE nCount = 0;
- const FX_CHAR* pStart = m_pData->m_String;
- FX_CHAR* pEnd = m_pData->m_String + m_pData->m_nDataLength;
+ }
+ const FX_CHAR* end_ptr = str1 + len1 - len2;
+ while (str1 <= end_ptr) {
+ int i = 0;
while (1) {
- const FX_CHAR* pTarget = FX_strstr(pStart, (FX_STRSIZE)(pEnd - pStart), lpszOld.GetCStr(), nSourceLen);
- if (pTarget == NULL) {
- break;
- }
- nCount++;
- pStart = pTarget + nSourceLen;
- }
- if (nCount == 0) {
- return 0;
- }
- FX_STRSIZE nNewLength = m_pData->m_nDataLength + (nReplacementLen - nSourceLen) * nCount;
- if (nNewLength == 0) {
- Empty();
- return nCount;
- }
- StringData* pNewData = StringData::Create(nNewLength);
- if (!pNewData) {
- return 0;
- }
- pStart = m_pData->m_String;
- FX_CHAR* pDest = pNewData->m_String;
- for (FX_STRSIZE i = 0; i < nCount; i ++) {
- const FX_CHAR* pTarget = FX_strstr(pStart, (FX_STRSIZE)(pEnd - pStart), lpszOld.GetCStr(), nSourceLen);
- FXSYS_memcpy(pDest, pStart, pTarget - pStart);
- pDest += pTarget - pStart;
- FXSYS_memcpy(pDest, lpszNew.GetCStr(), lpszNew.GetLength());
- pDest += lpszNew.GetLength();
- pStart = pTarget + nSourceLen;
- }
- FXSYS_memcpy(pDest, pStart, pEnd - pStart);
- m_pData->Release();
- m_pData = pNewData;
+ if (str1[i] != str2[i]) {
+ break;
+ }
+ i++;
+ if (i == len2) {
+ return str1;
+ }
+ }
+ str1++;
+ }
+ return NULL;
+}
+FX_STRSIZE CFX_ByteString::Find(const CFX_ByteStringC& lpszSub,
+ FX_STRSIZE nStart) const {
+ if (m_pData == NULL) {
+ return -1;
+ }
+ FX_STRSIZE nLength = m_pData->m_nDataLength;
+ if (nStart > nLength) {
+ return -1;
+ }
+ const FX_CHAR* lpsz =
+ FX_strstr(m_pData->m_String + nStart, m_pData->m_nDataLength - nStart,
+ lpszSub.GetCStr(), lpszSub.GetLength());
+ return (lpsz == NULL) ? -1 : (int)(lpsz - m_pData->m_String);
+}
+void CFX_ByteString::MakeLower() {
+ if (m_pData == NULL) {
+ return;
+ }
+ CopyBeforeWrite();
+ if (GetLength() < 1) {
+ return;
+ }
+ FXSYS_strlwr(m_pData->m_String);
+}
+void CFX_ByteString::MakeUpper() {
+ if (m_pData == NULL) {
+ return;
+ }
+ CopyBeforeWrite();
+ if (GetLength() < 1) {
+ return;
+ }
+ FXSYS_strupr(m_pData->m_String);
+}
+FX_STRSIZE CFX_ByteString::Remove(FX_CHAR chRemove) {
+ if (m_pData == NULL) {
+ return 0;
+ }
+ CopyBeforeWrite();
+ if (GetLength() < 1) {
+ return 0;
+ }
+ FX_CHAR* pstrSource = m_pData->m_String;
+ FX_CHAR* pstrDest = m_pData->m_String;
+ FX_CHAR* pstrEnd = m_pData->m_String + m_pData->m_nDataLength;
+ while (pstrSource < pstrEnd) {
+ if (*pstrSource != chRemove) {
+ *pstrDest = *pstrSource;
+ pstrDest++;
+ }
+ pstrSource++;
+ }
+ *pstrDest = 0;
+ FX_STRSIZE nCount = (FX_STRSIZE)(pstrSource - pstrDest);
+ m_pData->m_nDataLength -= nCount;
+ return nCount;
+}
+FX_STRSIZE CFX_ByteString::Replace(const CFX_ByteStringC& lpszOld,
+ const CFX_ByteStringC& lpszNew) {
+ if (m_pData == NULL) {
+ return 0;
+ }
+ if (lpszOld.IsEmpty()) {
+ return 0;
+ }
+ FX_STRSIZE nSourceLen = lpszOld.GetLength();
+ FX_STRSIZE nReplacementLen = lpszNew.GetLength();
+ FX_STRSIZE nCount = 0;
+ const FX_CHAR* pStart = m_pData->m_String;
+ FX_CHAR* pEnd = m_pData->m_String + m_pData->m_nDataLength;
+ while (1) {
+ const FX_CHAR* pTarget = FX_strstr(pStart, (FX_STRSIZE)(pEnd - pStart),
+ lpszOld.GetCStr(), nSourceLen);
+ if (pTarget == NULL) {
+ break;
+ }
+ nCount++;
+ pStart = pTarget + nSourceLen;
+ }
+ if (nCount == 0) {
+ return 0;
+ }
+ FX_STRSIZE nNewLength =
+ m_pData->m_nDataLength + (nReplacementLen - nSourceLen) * nCount;
+ if (nNewLength == 0) {
+ Empty();
return nCount;
-}
-void CFX_ByteString::SetAt(FX_STRSIZE nIndex, FX_CHAR ch)
-{
- if (m_pData == NULL) {
- return;
- }
- FXSYS_assert(nIndex >= 0);
- FXSYS_assert(nIndex < m_pData->m_nDataLength);
- CopyBeforeWrite();
- m_pData->m_String[nIndex] = ch;
-}
-CFX_WideString CFX_ByteString::UTF8Decode() const
-{
- CFX_UTF8Decoder decoder;
- for (FX_STRSIZE i = 0; i < GetLength(); i ++) {
- decoder.Input((uint8_t)m_pData->m_String[i]);
- }
- return decoder.GetResult();
-}
-CFX_ByteString CFX_ByteString::FromUnicode(const FX_WCHAR* str, FX_STRSIZE len)
-{
- if (len < 0) {
- len = FXSYS_wcslen(str);
- }
- CFX_ByteString bstr;
- bstr.ConvertFrom(CFX_WideString(str, len));
- return bstr;
-}
-CFX_ByteString CFX_ByteString::FromUnicode(const CFX_WideString& str)
-{
- return FromUnicode(str.c_str(), str.GetLength());
-}
-void CFX_ByteString::ConvertFrom(const CFX_WideString& str, CFX_CharMap* pCharMap)
-{
- if (pCharMap == NULL) {
- pCharMap = CFX_CharMap::GetDefaultMapper();
- }
- *this = (*pCharMap->m_GetByteString)(pCharMap, str);
-}
-int CFX_ByteString::Compare(const CFX_ByteStringC& str) const
-{
- if (m_pData == NULL) {
- return str.IsEmpty() ? 0 : -1;
- }
- int this_len = m_pData->m_nDataLength;
- int that_len = str.GetLength();
- int min_len = this_len < that_len ? this_len : that_len;
- for (int i = 0; i < min_len; i ++) {
- if ((uint8_t)m_pData->m_String[i] < str.GetAt(i)) {
- return -1;
- }
- if ((uint8_t)m_pData->m_String[i] > str.GetAt(i)) {
- return 1;
- }
- }
- if (this_len < that_len) {
- return -1;
- }
- if (this_len > that_len) {
- return 1;
- }
+ }
+ StringData* pNewData = StringData::Create(nNewLength);
+ if (!pNewData) {
return 0;
-}
-void CFX_ByteString::TrimRight(const CFX_ByteStringC& lpszTargets)
-{
- if (m_pData == NULL || lpszTargets.IsEmpty()) {
- return;
- }
- CopyBeforeWrite();
- FX_STRSIZE pos = GetLength();
- if (pos < 1) {
- return;
- }
- while (pos) {
- FX_STRSIZE i = 0;
- while (i < lpszTargets.GetLength() && lpszTargets[i] != m_pData->m_String[pos - 1]) {
- i ++;
- }
- if (i == lpszTargets.GetLength()) {
- break;
- }
- pos --;
- }
- if (pos < m_pData->m_nDataLength) {
- m_pData->m_String[pos] = 0;
- m_pData->m_nDataLength = pos;
- }
-}
-void CFX_ByteString::TrimRight(FX_CHAR chTarget)
-{
- TrimRight(CFX_ByteStringC(chTarget));
-}
-void CFX_ByteString::TrimRight()
-{
- TrimRight(FX_BSTRC("\x09\x0a\x0b\x0c\x0d\x20"));
-}
-void CFX_ByteString::TrimLeft(const CFX_ByteStringC& lpszTargets)
-{
- if (m_pData == NULL) {
- return;
- }
- if (lpszTargets.IsEmpty()) {
- return;
- }
- CopyBeforeWrite();
- FX_STRSIZE len = GetLength();
- if (len < 1) {
- return;
- }
- FX_STRSIZE pos = 0;
- while (pos < len) {
- FX_STRSIZE i = 0;
- while (i < lpszTargets.GetLength() && lpszTargets[i] != m_pData->m_String[pos]) {
- i ++;
- }
- if (i == lpszTargets.GetLength()) {
- break;
- }
- pos ++;
- }
- if (pos) {
- FX_STRSIZE nDataLength = len - pos;
- FXSYS_memmove(m_pData->m_String, m_pData->m_String + pos, (nDataLength + 1)*sizeof(FX_CHAR));
- m_pData->m_nDataLength = nDataLength;
- }
-}
-void CFX_ByteString::TrimLeft(FX_CHAR chTarget)
-{
- TrimLeft(CFX_ByteStringC(chTarget));
-}
-void CFX_ByteString::TrimLeft()
-{
- TrimLeft(FX_BSTRC("\x09\x0a\x0b\x0c\x0d\x20"));
-}
-FX_DWORD CFX_ByteString::GetID(FX_STRSIZE start_pos) const
-{
- return CFX_ByteStringC(*this).GetID(start_pos);
-}
-FX_DWORD CFX_ByteStringC::GetID(FX_STRSIZE start_pos) const
-{
- if (m_Length == 0) {
- return 0;
- }
- if (start_pos < 0 || start_pos >= m_Length) {
- return 0;
- }
- FX_DWORD strid = 0;
- if (start_pos + 4 > m_Length) {
- for (FX_STRSIZE i = 0; i < m_Length - start_pos; i ++) {
- strid = strid * 256 + m_Ptr[start_pos + i];
- }
- strid = strid << ((4 - m_Length + start_pos) * 8);
- } else {
- for (int i = 0; i < 4; i ++) {
- strid = strid * 256 + m_Ptr[start_pos + i];
- }
- }
- return strid;
-}
-FX_STRSIZE FX_ftoa(FX_FLOAT d, FX_CHAR* buf)
-{
- buf[0] = '0';
- buf[1] = '\0';
- if (d == 0.0f) {
- return 1;
- }
- FX_BOOL bNegative = FALSE;
- if (d < 0) {
- bNegative = TRUE;
- d = -d;
- }
- int scale = 1;
- int scaled = FXSYS_round(d);
- while (scaled < 100000) {
- if (scale == 1000000) {
- break;
- }
- scale *= 10;
- scaled = FXSYS_round(d * scale);
- }
- if (scaled == 0) {
- return 1;
- }
- char buf2[32];
- int buf_size = 0;
- if (bNegative) {
- buf[buf_size++] = '-';
- }
- int i = scaled / scale;
- FXSYS_itoa(i, buf2, 10);
- FX_STRSIZE len = FXSYS_strlen(buf2);
- FXSYS_memcpy(buf + buf_size, buf2, len);
- buf_size += len;
- int fraction = scaled % scale;
- if (fraction == 0) {
- return buf_size;
- }
- buf[buf_size++] = '.';
- scale /= 10;
- while (fraction) {
- buf[buf_size++] = '0' + fraction / scale;
- fraction %= scale;
- scale /= 10;
- }
+ }
+ pStart = m_pData->m_String;
+ FX_CHAR* pDest = pNewData->m_String;
+ for (FX_STRSIZE i = 0; i < nCount; i++) {
+ const FX_CHAR* pTarget = FX_strstr(pStart, (FX_STRSIZE)(pEnd - pStart),
+ lpszOld.GetCStr(), nSourceLen);
+ FXSYS_memcpy(pDest, pStart, pTarget - pStart);
+ pDest += pTarget - pStart;
+ FXSYS_memcpy(pDest, lpszNew.GetCStr(), lpszNew.GetLength());
+ pDest += lpszNew.GetLength();
+ pStart = pTarget + nSourceLen;
+ }
+ FXSYS_memcpy(pDest, pStart, pEnd - pStart);
+ m_pData->Release();
+ m_pData = pNewData;
+ return nCount;
+}
+void CFX_ByteString::SetAt(FX_STRSIZE nIndex, FX_CHAR ch) {
+ if (m_pData == NULL) {
+ return;
+ }
+ FXSYS_assert(nIndex >= 0);
+ FXSYS_assert(nIndex < m_pData->m_nDataLength);
+ CopyBeforeWrite();
+ m_pData->m_String[nIndex] = ch;
+}
+CFX_WideString CFX_ByteString::UTF8Decode() const {
+ CFX_UTF8Decoder decoder;
+ for (FX_STRSIZE i = 0; i < GetLength(); i++) {
+ decoder.Input((uint8_t)m_pData->m_String[i]);
+ }
+ return decoder.GetResult();
+}
+CFX_ByteString CFX_ByteString::FromUnicode(const FX_WCHAR* str,
+ FX_STRSIZE len) {
+ if (len < 0) {
+ len = FXSYS_wcslen(str);
+ }
+ CFX_ByteString bstr;
+ bstr.ConvertFrom(CFX_WideString(str, len));
+ return bstr;
+}
+CFX_ByteString CFX_ByteString::FromUnicode(const CFX_WideString& str) {
+ return FromUnicode(str.c_str(), str.GetLength());
+}
+void CFX_ByteString::ConvertFrom(const CFX_WideString& str,
+ CFX_CharMap* pCharMap) {
+ if (pCharMap == NULL) {
+ pCharMap = CFX_CharMap::GetDefaultMapper();
+ }
+ *this = (*pCharMap->m_GetByteString)(pCharMap, str);
+}
+int CFX_ByteString::Compare(const CFX_ByteStringC& str) const {
+ if (m_pData == NULL) {
+ return str.IsEmpty() ? 0 : -1;
+ }
+ int this_len = m_pData->m_nDataLength;
+ int that_len = str.GetLength();
+ int min_len = this_len < that_len ? this_len : that_len;
+ for (int i = 0; i < min_len; i++) {
+ if ((uint8_t)m_pData->m_String[i] < str.GetAt(i)) {
+ return -1;
+ }
+ if ((uint8_t)m_pData->m_String[i] > str.GetAt(i)) {
+ return 1;
+ }
+ }
+ if (this_len < that_len) {
+ return -1;
+ }
+ if (this_len > that_len) {
+ return 1;
+ }
+ return 0;
+}
+void CFX_ByteString::TrimRight(const CFX_ByteStringC& lpszTargets) {
+ if (m_pData == NULL || lpszTargets.IsEmpty()) {
+ return;
+ }
+ CopyBeforeWrite();
+ FX_STRSIZE pos = GetLength();
+ if (pos < 1) {
+ return;
+ }
+ while (pos) {
+ FX_STRSIZE i = 0;
+ while (i < lpszTargets.GetLength() &&
+ lpszTargets[i] != m_pData->m_String[pos - 1]) {
+ i++;
+ }
+ if (i == lpszTargets.GetLength()) {
+ break;
+ }
+ pos--;
+ }
+ if (pos < m_pData->m_nDataLength) {
+ m_pData->m_String[pos] = 0;
+ m_pData->m_nDataLength = pos;
+ }
+}
+void CFX_ByteString::TrimRight(FX_CHAR chTarget) {
+ TrimRight(CFX_ByteStringC(chTarget));
+}
+void CFX_ByteString::TrimRight() {
+ TrimRight(FX_BSTRC("\x09\x0a\x0b\x0c\x0d\x20"));
+}
+void CFX_ByteString::TrimLeft(const CFX_ByteStringC& lpszTargets) {
+ if (m_pData == NULL) {
+ return;
+ }
+ if (lpszTargets.IsEmpty()) {
+ return;
+ }
+ CopyBeforeWrite();
+ FX_STRSIZE len = GetLength();
+ if (len < 1) {
+ return;
+ }
+ FX_STRSIZE pos = 0;
+ while (pos < len) {
+ FX_STRSIZE i = 0;
+ while (i < lpszTargets.GetLength() &&
+ lpszTargets[i] != m_pData->m_String[pos]) {
+ i++;
+ }
+ if (i == lpszTargets.GetLength()) {
+ break;
+ }
+ pos++;
+ }
+ if (pos) {
+ FX_STRSIZE nDataLength = len - pos;
+ FXSYS_memmove(m_pData->m_String, m_pData->m_String + pos,
+ (nDataLength + 1) * sizeof(FX_CHAR));
+ m_pData->m_nDataLength = nDataLength;
+ }
+}
+void CFX_ByteString::TrimLeft(FX_CHAR chTarget) {
+ TrimLeft(CFX_ByteStringC(chTarget));
+}
+void CFX_ByteString::TrimLeft() {
+ TrimLeft(FX_BSTRC("\x09\x0a\x0b\x0c\x0d\x20"));
+}
+FX_DWORD CFX_ByteString::GetID(FX_STRSIZE start_pos) const {
+ return CFX_ByteStringC(*this).GetID(start_pos);
+}
+FX_DWORD CFX_ByteStringC::GetID(FX_STRSIZE start_pos) const {
+ if (m_Length == 0) {
+ return 0;
+ }
+ if (start_pos < 0 || start_pos >= m_Length) {
+ return 0;
+ }
+ FX_DWORD strid = 0;
+ if (start_pos + 4 > m_Length) {
+ for (FX_STRSIZE i = 0; i < m_Length - start_pos; i++) {
+ strid = strid * 256 + m_Ptr[start_pos + i];
+ }
+ strid = strid << ((4 - m_Length + start_pos) * 8);
+ } else {
+ for (int i = 0; i < 4; i++) {
+ strid = strid * 256 + m_Ptr[start_pos + i];
+ }
+ }
+ return strid;
+}
+FX_STRSIZE FX_ftoa(FX_FLOAT d, FX_CHAR* buf) {
+ buf[0] = '0';
+ buf[1] = '\0';
+ if (d == 0.0f) {
+ return 1;
+ }
+ FX_BOOL bNegative = FALSE;
+ if (d < 0) {
+ bNegative = TRUE;
+ d = -d;
+ }
+ int scale = 1;
+ int scaled = FXSYS_round(d);
+ while (scaled < 100000) {
+ if (scale == 1000000) {
+ break;
+ }
+ scale *= 10;
+ scaled = FXSYS_round(d * scale);
+ }
+ if (scaled == 0) {
+ return 1;
+ }
+ char buf2[32];
+ int buf_size = 0;
+ if (bNegative) {
+ buf[buf_size++] = '-';
+ }
+ int i = scaled / scale;
+ FXSYS_itoa(i, buf2, 10);
+ FX_STRSIZE len = FXSYS_strlen(buf2);
+ FXSYS_memcpy(buf + buf_size, buf2, len);
+ buf_size += len;
+ int fraction = scaled % scale;
+ if (fraction == 0) {
return buf_size;
+ }
+ buf[buf_size++] = '.';
+ scale /= 10;
+ while (fraction) {
+ buf[buf_size++] = '0' + fraction / scale;
+ fraction %= scale;
+ scale /= 10;
+ }
+ return buf_size;
}
-CFX_ByteString CFX_ByteString::FormatFloat(FX_FLOAT d, int precision)
-{
- FX_CHAR buf[32];
- FX_STRSIZE len = FX_ftoa(d, buf);
- return CFX_ByteString(buf, len);
+CFX_ByteString CFX_ByteString::FormatFloat(FX_FLOAT d, int precision) {
+ FX_CHAR buf[32];
+ FX_STRSIZE len = FX_ftoa(d, buf);
+ return CFX_ByteString(buf, len);
}
diff --git a/core/src/fxcrt/fx_basic_bstring_unittest.cpp b/core/src/fxcrt/fx_basic_bstring_unittest.cpp
index f865602b08..3779397891 100644
--- a/core/src/fxcrt/fx_basic_bstring_unittest.cpp
+++ b/core/src/fxcrt/fx_basic_bstring_unittest.cpp
@@ -7,246 +7,246 @@
#include "testing/gtest/include/gtest/gtest.h"
TEST(fxcrt, ByteStringOperatorSubscript) {
- // CFX_ByteString includes the NUL terminator for non-empty strings.
- CFX_ByteString abc("abc");
- EXPECT_EQ('a', abc[0]);
- EXPECT_EQ('b', abc[1]);
- EXPECT_EQ('c', abc[2]);
- EXPECT_EQ(0, abc[3]);
+ // CFX_ByteString includes the NUL terminator for non-empty strings.
+ CFX_ByteString abc("abc");
+ EXPECT_EQ('a', abc[0]);
+ EXPECT_EQ('b', abc[1]);
+ EXPECT_EQ('c', abc[2]);
+ EXPECT_EQ(0, abc[3]);
}
TEST(fxcrt, ByteStringOperatorLT) {
- CFX_ByteString empty;
- CFX_ByteString a("a");
- CFX_ByteString abc("abc");
- CFX_ByteString def("def");
+ CFX_ByteString empty;
+ CFX_ByteString a("a");
+ CFX_ByteString abc("abc");
+ CFX_ByteString def("def");
- EXPECT_FALSE(empty < empty);
- EXPECT_FALSE(a < a);
- EXPECT_FALSE(abc < abc);
- EXPECT_FALSE(def < def);
+ EXPECT_FALSE(empty < empty);
+ EXPECT_FALSE(a < a);
+ EXPECT_FALSE(abc < abc);
+ EXPECT_FALSE(def < def);
- EXPECT_TRUE(empty < a);
- EXPECT_FALSE(a < empty);
+ EXPECT_TRUE(empty < a);
+ EXPECT_FALSE(a < empty);
- EXPECT_TRUE(empty < abc);
- EXPECT_FALSE(abc < empty);
+ EXPECT_TRUE(empty < abc);
+ EXPECT_FALSE(abc < empty);
- EXPECT_TRUE(empty < def);
- EXPECT_FALSE(def < empty);
+ EXPECT_TRUE(empty < def);
+ EXPECT_FALSE(def < empty);
- EXPECT_TRUE(a < abc);
- EXPECT_FALSE(abc < a);
+ EXPECT_TRUE(a < abc);
+ EXPECT_FALSE(abc < a);
- EXPECT_TRUE(a < def);
- EXPECT_FALSE(def < a);
+ EXPECT_TRUE(a < def);
+ EXPECT_FALSE(def < a);
- EXPECT_TRUE(abc < def);
- EXPECT_FALSE(def < abc);
+ EXPECT_TRUE(abc < def);
+ EXPECT_FALSE(def < abc);
}
TEST(fxcrt, ByteStringOperatorEQ) {
- CFX_ByteString null_string;
- EXPECT_TRUE(null_string == null_string);
-
- CFX_ByteString empty_string("");
- EXPECT_TRUE(empty_string == empty_string);
- EXPECT_TRUE(empty_string == null_string);
- EXPECT_TRUE(null_string == empty_string);
-
- CFX_ByteString deleted_string("hello");
- deleted_string.Delete(0, 5);
- EXPECT_TRUE(deleted_string == deleted_string);
- EXPECT_TRUE(deleted_string == null_string);
- EXPECT_TRUE(deleted_string == empty_string);
- EXPECT_TRUE(null_string == deleted_string);
- EXPECT_TRUE(empty_string == deleted_string);
-
- CFX_ByteString byte_string("hello");
- EXPECT_TRUE(byte_string == byte_string);
- EXPECT_FALSE(byte_string == null_string);
- EXPECT_FALSE(byte_string == empty_string);
- EXPECT_FALSE(byte_string == deleted_string);
- EXPECT_FALSE(null_string == byte_string);
- EXPECT_FALSE(empty_string == byte_string);
- EXPECT_FALSE(deleted_string == byte_string);
-
- CFX_ByteString byte_string_same1("hello");
- EXPECT_TRUE(byte_string == byte_string_same1);
- EXPECT_TRUE(byte_string_same1 == byte_string);
-
- CFX_ByteString byte_string_same2(byte_string);
- EXPECT_TRUE(byte_string == byte_string_same2);
- EXPECT_TRUE(byte_string_same2 == byte_string);
-
- CFX_ByteString byte_string1("he");
- CFX_ByteString byte_string2("hellp");
- CFX_ByteString byte_string3("hellod");
- EXPECT_FALSE(byte_string == byte_string1);
- EXPECT_FALSE(byte_string == byte_string2);
- EXPECT_FALSE(byte_string == byte_string3);
- EXPECT_FALSE(byte_string1 == byte_string);
- EXPECT_FALSE(byte_string2 == byte_string);
- EXPECT_FALSE(byte_string3 == byte_string);
-
- CFX_ByteStringC null_string_c;
- CFX_ByteStringC empty_string_c("");
- EXPECT_TRUE(null_string == null_string_c);
- EXPECT_TRUE(null_string == empty_string_c);
- EXPECT_TRUE(empty_string == null_string_c);
- EXPECT_TRUE(empty_string == empty_string_c);
- EXPECT_TRUE(deleted_string == null_string_c);
- EXPECT_TRUE(deleted_string == empty_string_c);
- EXPECT_TRUE(null_string_c == null_string);
- EXPECT_TRUE(empty_string_c == null_string);
- EXPECT_TRUE(null_string_c == empty_string);
- EXPECT_TRUE(empty_string_c == empty_string);
- EXPECT_TRUE(null_string_c == deleted_string);
- EXPECT_TRUE(empty_string_c == deleted_string);
-
- CFX_ByteStringC byte_string_c_same1("hello");
- EXPECT_TRUE(byte_string == byte_string_c_same1);
- EXPECT_TRUE(byte_string_c_same1 == byte_string);
-
- CFX_ByteStringC byte_string_c1("he");
- CFX_ByteStringC byte_string_c2("hellp");
- CFX_ByteStringC byte_string_c3("hellod");
- EXPECT_FALSE(byte_string == byte_string_c1);
- EXPECT_FALSE(byte_string == byte_string_c2);
- EXPECT_FALSE(byte_string == byte_string_c3);
- EXPECT_FALSE(byte_string_c1 == byte_string);
- EXPECT_FALSE(byte_string_c2 == byte_string);
- EXPECT_FALSE(byte_string_c3 == byte_string);
-
- const char* c_null_string = nullptr;
- const char* c_empty_string = "";
- EXPECT_TRUE(null_string == c_null_string);
- EXPECT_TRUE(null_string == c_empty_string);
- EXPECT_TRUE(empty_string == c_null_string);
- EXPECT_TRUE(empty_string == c_empty_string);
- EXPECT_TRUE(deleted_string == c_null_string);
- EXPECT_TRUE(deleted_string == c_empty_string);
- EXPECT_TRUE(c_null_string == null_string);
- EXPECT_TRUE(c_empty_string == null_string);
- EXPECT_TRUE(c_null_string == empty_string);
- EXPECT_TRUE(c_empty_string == empty_string);
- EXPECT_TRUE(c_null_string == deleted_string);
- EXPECT_TRUE(c_empty_string == deleted_string);
-
- const char* c_string_same1 = "hello";
- EXPECT_TRUE(byte_string == c_string_same1);
- EXPECT_TRUE(c_string_same1 == byte_string);
-
- const char* c_string1 = "he";
- const char* c_string2 = "hellp";
- const char* c_string3 = "hellod";
- EXPECT_FALSE(byte_string == c_string1);
- EXPECT_FALSE(byte_string == c_string2);
- EXPECT_FALSE(byte_string == c_string3);
- EXPECT_FALSE(c_string1 == byte_string);
- EXPECT_FALSE(c_string2 == byte_string);
- EXPECT_FALSE(c_string3 == byte_string);
+ CFX_ByteString null_string;
+ EXPECT_TRUE(null_string == null_string);
+
+ CFX_ByteString empty_string("");
+ EXPECT_TRUE(empty_string == empty_string);
+ EXPECT_TRUE(empty_string == null_string);
+ EXPECT_TRUE(null_string == empty_string);
+
+ CFX_ByteString deleted_string("hello");
+ deleted_string.Delete(0, 5);
+ EXPECT_TRUE(deleted_string == deleted_string);
+ EXPECT_TRUE(deleted_string == null_string);
+ EXPECT_TRUE(deleted_string == empty_string);
+ EXPECT_TRUE(null_string == deleted_string);
+ EXPECT_TRUE(empty_string == deleted_string);
+
+ CFX_ByteString byte_string("hello");
+ EXPECT_TRUE(byte_string == byte_string);
+ EXPECT_FALSE(byte_string == null_string);
+ EXPECT_FALSE(byte_string == empty_string);
+ EXPECT_FALSE(byte_string == deleted_string);
+ EXPECT_FALSE(null_string == byte_string);
+ EXPECT_FALSE(empty_string == byte_string);
+ EXPECT_FALSE(deleted_string == byte_string);
+
+ CFX_ByteString byte_string_same1("hello");
+ EXPECT_TRUE(byte_string == byte_string_same1);
+ EXPECT_TRUE(byte_string_same1 == byte_string);
+
+ CFX_ByteString byte_string_same2(byte_string);
+ EXPECT_TRUE(byte_string == byte_string_same2);
+ EXPECT_TRUE(byte_string_same2 == byte_string);
+
+ CFX_ByteString byte_string1("he");
+ CFX_ByteString byte_string2("hellp");
+ CFX_ByteString byte_string3("hellod");
+ EXPECT_FALSE(byte_string == byte_string1);
+ EXPECT_FALSE(byte_string == byte_string2);
+ EXPECT_FALSE(byte_string == byte_string3);
+ EXPECT_FALSE(byte_string1 == byte_string);
+ EXPECT_FALSE(byte_string2 == byte_string);
+ EXPECT_FALSE(byte_string3 == byte_string);
+
+ CFX_ByteStringC null_string_c;
+ CFX_ByteStringC empty_string_c("");
+ EXPECT_TRUE(null_string == null_string_c);
+ EXPECT_TRUE(null_string == empty_string_c);
+ EXPECT_TRUE(empty_string == null_string_c);
+ EXPECT_TRUE(empty_string == empty_string_c);
+ EXPECT_TRUE(deleted_string == null_string_c);
+ EXPECT_TRUE(deleted_string == empty_string_c);
+ EXPECT_TRUE(null_string_c == null_string);
+ EXPECT_TRUE(empty_string_c == null_string);
+ EXPECT_TRUE(null_string_c == empty_string);
+ EXPECT_TRUE(empty_string_c == empty_string);
+ EXPECT_TRUE(null_string_c == deleted_string);
+ EXPECT_TRUE(empty_string_c == deleted_string);
+
+ CFX_ByteStringC byte_string_c_same1("hello");
+ EXPECT_TRUE(byte_string == byte_string_c_same1);
+ EXPECT_TRUE(byte_string_c_same1 == byte_string);
+
+ CFX_ByteStringC byte_string_c1("he");
+ CFX_ByteStringC byte_string_c2("hellp");
+ CFX_ByteStringC byte_string_c3("hellod");
+ EXPECT_FALSE(byte_string == byte_string_c1);
+ EXPECT_FALSE(byte_string == byte_string_c2);
+ EXPECT_FALSE(byte_string == byte_string_c3);
+ EXPECT_FALSE(byte_string_c1 == byte_string);
+ EXPECT_FALSE(byte_string_c2 == byte_string);
+ EXPECT_FALSE(byte_string_c3 == byte_string);
+
+ const char* c_null_string = nullptr;
+ const char* c_empty_string = "";
+ EXPECT_TRUE(null_string == c_null_string);
+ EXPECT_TRUE(null_string == c_empty_string);
+ EXPECT_TRUE(empty_string == c_null_string);
+ EXPECT_TRUE(empty_string == c_empty_string);
+ EXPECT_TRUE(deleted_string == c_null_string);
+ EXPECT_TRUE(deleted_string == c_empty_string);
+ EXPECT_TRUE(c_null_string == null_string);
+ EXPECT_TRUE(c_empty_string == null_string);
+ EXPECT_TRUE(c_null_string == empty_string);
+ EXPECT_TRUE(c_empty_string == empty_string);
+ EXPECT_TRUE(c_null_string == deleted_string);
+ EXPECT_TRUE(c_empty_string == deleted_string);
+
+ const char* c_string_same1 = "hello";
+ EXPECT_TRUE(byte_string == c_string_same1);
+ EXPECT_TRUE(c_string_same1 == byte_string);
+
+ const char* c_string1 = "he";
+ const char* c_string2 = "hellp";
+ const char* c_string3 = "hellod";
+ EXPECT_FALSE(byte_string == c_string1);
+ EXPECT_FALSE(byte_string == c_string2);
+ EXPECT_FALSE(byte_string == c_string3);
+ EXPECT_FALSE(c_string1 == byte_string);
+ EXPECT_FALSE(c_string2 == byte_string);
+ EXPECT_FALSE(c_string3 == byte_string);
}
TEST(fxcrt, ByteStringOperatorNE) {
- CFX_ByteString null_string;
- EXPECT_FALSE(null_string != null_string);
-
- CFX_ByteString empty_string("");
- EXPECT_FALSE(empty_string != empty_string);
- EXPECT_FALSE(empty_string != null_string);
- EXPECT_FALSE(null_string != empty_string);
-
- CFX_ByteString deleted_string("hello");
- deleted_string.Delete(0, 5);
- EXPECT_FALSE(deleted_string != deleted_string);
- EXPECT_FALSE(deleted_string != null_string);
- EXPECT_FALSE(deleted_string != empty_string);
- EXPECT_FALSE(deleted_string != deleted_string);
- EXPECT_FALSE(null_string != deleted_string);
- EXPECT_FALSE(empty_string != deleted_string);
- EXPECT_FALSE(deleted_string != deleted_string);
-
- CFX_ByteString byte_string("hello");
- EXPECT_FALSE(byte_string != byte_string);
- EXPECT_TRUE(byte_string != null_string);
- EXPECT_TRUE(byte_string != empty_string);
- EXPECT_TRUE(byte_string != deleted_string);
- EXPECT_TRUE(null_string != byte_string);
- EXPECT_TRUE(empty_string != byte_string);
- EXPECT_TRUE(deleted_string != byte_string);
-
- CFX_ByteString byte_string_same1("hello");
- EXPECT_FALSE(byte_string != byte_string_same1);
- EXPECT_FALSE(byte_string_same1 != byte_string);
-
- CFX_ByteString byte_string_same2(byte_string);
- EXPECT_FALSE(byte_string != byte_string_same2);
- EXPECT_FALSE(byte_string_same2 != byte_string);
-
- CFX_ByteString byte_string1("he");
- CFX_ByteString byte_string2("hellp");
- CFX_ByteString byte_string3("hellod");
- EXPECT_TRUE(byte_string != byte_string1);
- EXPECT_TRUE(byte_string != byte_string2);
- EXPECT_TRUE(byte_string != byte_string3);
- EXPECT_TRUE(byte_string1 != byte_string);
- EXPECT_TRUE(byte_string2 != byte_string);
- EXPECT_TRUE(byte_string3 != byte_string);
-
- CFX_ByteStringC null_string_c;
- CFX_ByteStringC empty_string_c("");
- EXPECT_FALSE(null_string != null_string_c);
- EXPECT_FALSE(null_string != empty_string_c);
- EXPECT_FALSE(empty_string != null_string_c);
- EXPECT_FALSE(empty_string != empty_string_c);
- EXPECT_FALSE(null_string_c != null_string);
- EXPECT_FALSE(empty_string_c != null_string);
- EXPECT_FALSE(null_string_c != empty_string);
- EXPECT_FALSE(empty_string_c != empty_string);
-
- CFX_ByteStringC byte_string_c_same1("hello");
- EXPECT_FALSE(byte_string != byte_string_c_same1);
- EXPECT_FALSE(byte_string_c_same1 != byte_string);
-
- CFX_ByteStringC byte_string_c1("he");
- CFX_ByteStringC byte_string_c2("hellp");
- CFX_ByteStringC byte_string_c3("hellod");
- EXPECT_TRUE(byte_string != byte_string_c1);
- EXPECT_TRUE(byte_string != byte_string_c2);
- EXPECT_TRUE(byte_string != byte_string_c3);
- EXPECT_TRUE(byte_string_c1 != byte_string);
- EXPECT_TRUE(byte_string_c2 != byte_string);
- EXPECT_TRUE(byte_string_c3 != byte_string);
-
- const char* c_null_string = nullptr;
- const char* c_empty_string = "";
- EXPECT_FALSE(null_string != c_null_string);
- EXPECT_FALSE(null_string != c_empty_string);
- EXPECT_FALSE(empty_string != c_null_string);
- EXPECT_FALSE(empty_string != c_empty_string);
- EXPECT_FALSE(deleted_string != c_null_string);
- EXPECT_FALSE(deleted_string != c_empty_string);
- EXPECT_FALSE(c_null_string != null_string);
- EXPECT_FALSE(c_empty_string != null_string);
- EXPECT_FALSE(c_null_string != empty_string);
- EXPECT_FALSE(c_empty_string != empty_string);
- EXPECT_FALSE(c_null_string != deleted_string);
- EXPECT_FALSE(c_empty_string != deleted_string);
-
- const char* c_string_same1 = "hello";
- EXPECT_FALSE(byte_string != c_string_same1);
- EXPECT_FALSE(c_string_same1 != byte_string);
-
- const char* c_string1 = "he";
- const char* c_string2 = "hellp";
- const char* c_string3 = "hellod";
- EXPECT_TRUE(byte_string != c_string1);
- EXPECT_TRUE(byte_string != c_string2);
- EXPECT_TRUE(byte_string != c_string3);
- EXPECT_TRUE(c_string1 != byte_string);
- EXPECT_TRUE(c_string2 != byte_string);
- EXPECT_TRUE(c_string3 != byte_string);
+ CFX_ByteString null_string;
+ EXPECT_FALSE(null_string != null_string);
+
+ CFX_ByteString empty_string("");
+ EXPECT_FALSE(empty_string != empty_string);
+ EXPECT_FALSE(empty_string != null_string);
+ EXPECT_FALSE(null_string != empty_string);
+
+ CFX_ByteString deleted_string("hello");
+ deleted_string.Delete(0, 5);
+ EXPECT_FALSE(deleted_string != deleted_string);
+ EXPECT_FALSE(deleted_string != null_string);
+ EXPECT_FALSE(deleted_string != empty_string);
+ EXPECT_FALSE(deleted_string != deleted_string);
+ EXPECT_FALSE(null_string != deleted_string);
+ EXPECT_FALSE(empty_string != deleted_string);
+ EXPECT_FALSE(deleted_string != deleted_string);
+
+ CFX_ByteString byte_string("hello");
+ EXPECT_FALSE(byte_string != byte_string);
+ EXPECT_TRUE(byte_string != null_string);
+ EXPECT_TRUE(byte_string != empty_string);
+ EXPECT_TRUE(byte_string != deleted_string);
+ EXPECT_TRUE(null_string != byte_string);
+ EXPECT_TRUE(empty_string != byte_string);
+ EXPECT_TRUE(deleted_string != byte_string);
+
+ CFX_ByteString byte_string_same1("hello");
+ EXPECT_FALSE(byte_string != byte_string_same1);
+ EXPECT_FALSE(byte_string_same1 != byte_string);
+
+ CFX_ByteString byte_string_same2(byte_string);
+ EXPECT_FALSE(byte_string != byte_string_same2);
+ EXPECT_FALSE(byte_string_same2 != byte_string);
+
+ CFX_ByteString byte_string1("he");
+ CFX_ByteString byte_string2("hellp");
+ CFX_ByteString byte_string3("hellod");
+ EXPECT_TRUE(byte_string != byte_string1);
+ EXPECT_TRUE(byte_string != byte_string2);
+ EXPECT_TRUE(byte_string != byte_string3);
+ EXPECT_TRUE(byte_string1 != byte_string);
+ EXPECT_TRUE(byte_string2 != byte_string);
+ EXPECT_TRUE(byte_string3 != byte_string);
+
+ CFX_ByteStringC null_string_c;
+ CFX_ByteStringC empty_string_c("");
+ EXPECT_FALSE(null_string != null_string_c);
+ EXPECT_FALSE(null_string != empty_string_c);
+ EXPECT_FALSE(empty_string != null_string_c);
+ EXPECT_FALSE(empty_string != empty_string_c);
+ EXPECT_FALSE(null_string_c != null_string);
+ EXPECT_FALSE(empty_string_c != null_string);
+ EXPECT_FALSE(null_string_c != empty_string);
+ EXPECT_FALSE(empty_string_c != empty_string);
+
+ CFX_ByteStringC byte_string_c_same1("hello");
+ EXPECT_FALSE(byte_string != byte_string_c_same1);
+ EXPECT_FALSE(byte_string_c_same1 != byte_string);
+
+ CFX_ByteStringC byte_string_c1("he");
+ CFX_ByteStringC byte_string_c2("hellp");
+ CFX_ByteStringC byte_string_c3("hellod");
+ EXPECT_TRUE(byte_string != byte_string_c1);
+ EXPECT_TRUE(byte_string != byte_string_c2);
+ EXPECT_TRUE(byte_string != byte_string_c3);
+ EXPECT_TRUE(byte_string_c1 != byte_string);
+ EXPECT_TRUE(byte_string_c2 != byte_string);
+ EXPECT_TRUE(byte_string_c3 != byte_string);
+
+ const char* c_null_string = nullptr;
+ const char* c_empty_string = "";
+ EXPECT_FALSE(null_string != c_null_string);
+ EXPECT_FALSE(null_string != c_empty_string);
+ EXPECT_FALSE(empty_string != c_null_string);
+ EXPECT_FALSE(empty_string != c_empty_string);
+ EXPECT_FALSE(deleted_string != c_null_string);
+ EXPECT_FALSE(deleted_string != c_empty_string);
+ EXPECT_FALSE(c_null_string != null_string);
+ EXPECT_FALSE(c_empty_string != null_string);
+ EXPECT_FALSE(c_null_string != empty_string);
+ EXPECT_FALSE(c_empty_string != empty_string);
+ EXPECT_FALSE(c_null_string != deleted_string);
+ EXPECT_FALSE(c_empty_string != deleted_string);
+
+ const char* c_string_same1 = "hello";
+ EXPECT_FALSE(byte_string != c_string_same1);
+ EXPECT_FALSE(c_string_same1 != byte_string);
+
+ const char* c_string1 = "he";
+ const char* c_string2 = "hellp";
+ const char* c_string3 = "hellod";
+ EXPECT_TRUE(byte_string != c_string1);
+ EXPECT_TRUE(byte_string != c_string2);
+ EXPECT_TRUE(byte_string != c_string3);
+ EXPECT_TRUE(c_string1 != byte_string);
+ EXPECT_TRUE(c_string2 != byte_string);
+ EXPECT_TRUE(c_string3 != byte_string);
}
TEST(fxcrt, ByteStringCNull) {
@@ -289,30 +289,30 @@ TEST(fxcrt, ByteStringCNull) {
}
TEST(fxcrt, ByteStringConcatInPlace) {
- CFX_ByteString fred;
- fred.ConcatInPlace(4, "FRED");
- EXPECT_EQ("FRED", fred);
-
- fred.ConcatInPlace(2, "DY");
- EXPECT_EQ("FREDDY", fred);
-
- fred.Delete(3, 3);
- EXPECT_EQ("FRE", fred);
-
- fred.ConcatInPlace(1, "D");
- EXPECT_EQ("FRED", fred);
-
- CFX_ByteString copy = fred;
- fred.ConcatInPlace(2, "DY");
- EXPECT_EQ("FREDDY", fred);
- EXPECT_EQ("FRED", copy);
-
- // Test invalid arguments.
- copy = fred;
- fred.ConcatInPlace(-6, "freddy");
- CFX_ByteString not_aliased("xxxxxx");
- EXPECT_EQ("FREDDY", fred);
- EXPECT_EQ("xxxxxx", not_aliased);
+ CFX_ByteString fred;
+ fred.ConcatInPlace(4, "FRED");
+ EXPECT_EQ("FRED", fred);
+
+ fred.ConcatInPlace(2, "DY");
+ EXPECT_EQ("FREDDY", fred);
+
+ fred.Delete(3, 3);
+ EXPECT_EQ("FRE", fred);
+
+ fred.ConcatInPlace(1, "D");
+ EXPECT_EQ("FRED", fred);
+
+ CFX_ByteString copy = fred;
+ fred.ConcatInPlace(2, "DY");
+ EXPECT_EQ("FREDDY", fred);
+ EXPECT_EQ("FRED", copy);
+
+ // Test invalid arguments.
+ copy = fred;
+ fred.ConcatInPlace(-6, "freddy");
+ CFX_ByteString not_aliased("xxxxxx");
+ EXPECT_EQ("FREDDY", fred);
+ EXPECT_EQ("xxxxxx", not_aliased);
}
TEST(fxcrt, ByteStringCNotNull) {
@@ -409,8 +409,8 @@ TEST(fxcrt, ByteStringCGetID) {
EXPECT_EQ(FXBSTR_ID('b', 'c', 'd', 'e'), longer_string.GetID(1));
EXPECT_EQ(FXBSTR_ID('c', 'd', 'e', 'f'), longer_string.GetID(2));
EXPECT_EQ(FXBSTR_ID('d', 'e', 'f', 0), longer_string.GetID(3));
- EXPECT_EQ(FXBSTR_ID('e', 'f', 0 , 0), longer_string.GetID(4));
- EXPECT_EQ(FXBSTR_ID('f', 0 , 0, 0), longer_string.GetID(5));
+ EXPECT_EQ(FXBSTR_ID('e', 'f', 0, 0), longer_string.GetID(4));
+ EXPECT_EQ(FXBSTR_ID('f', 0, 0, 0), longer_string.GetID(5));
EXPECT_EQ(0u, longer_string.GetID(6));
EXPECT_EQ(0u, longer_string.GetID(-1));
EXPECT_EQ(0u, longer_string.GetID(-1000000));
@@ -462,144 +462,144 @@ TEST(fxcrt, ByteStringCGetAt) {
}
TEST(fxcrt, ByteStringCOperatorSubscript) {
- // CFX_ByteStringC includes the NUL terminator for non-empty strings.
- CFX_ByteStringC abc("abc");
- EXPECT_EQ('a', abc[0]);
- EXPECT_EQ('b', abc[1]);
- EXPECT_EQ('c', abc[2]);
- EXPECT_EQ(0, abc[3]);
+ // CFX_ByteStringC includes the NUL terminator for non-empty strings.
+ CFX_ByteStringC abc("abc");
+ EXPECT_EQ('a', abc[0]);
+ EXPECT_EQ('b', abc[1]);
+ EXPECT_EQ('c', abc[2]);
+ EXPECT_EQ(0, abc[3]);
}
TEST(fxcrt, ByteStringCOperatorLT) {
- CFX_ByteStringC empty;
- CFX_ByteStringC a("a");
- CFX_ByteStringC abc("abc");
- CFX_ByteStringC def("def");
+ CFX_ByteStringC empty;
+ CFX_ByteStringC a("a");
+ CFX_ByteStringC abc("abc");
+ CFX_ByteStringC def("def");
- EXPECT_FALSE(empty < empty);
- EXPECT_FALSE(a < a);
- EXPECT_FALSE(abc < abc);
- EXPECT_FALSE(def < def);
+ EXPECT_FALSE(empty < empty);
+ EXPECT_FALSE(a < a);
+ EXPECT_FALSE(abc < abc);
+ EXPECT_FALSE(def < def);
- EXPECT_TRUE(empty < a);
- EXPECT_FALSE(a < empty);
+ EXPECT_TRUE(empty < a);
+ EXPECT_FALSE(a < empty);
- EXPECT_TRUE(empty < abc);
- EXPECT_FALSE(abc < empty);
+ EXPECT_TRUE(empty < abc);
+ EXPECT_FALSE(abc < empty);
- EXPECT_TRUE(empty < def);
- EXPECT_FALSE(def < empty);
+ EXPECT_TRUE(empty < def);
+ EXPECT_FALSE(def < empty);
- EXPECT_TRUE(a < abc);
- EXPECT_FALSE(abc < a);
+ EXPECT_TRUE(a < abc);
+ EXPECT_FALSE(abc < a);
- EXPECT_TRUE(a < def);
- EXPECT_FALSE(def < a);
+ EXPECT_TRUE(a < def);
+ EXPECT_FALSE(def < a);
- EXPECT_TRUE(abc < def);
- EXPECT_FALSE(def < abc);
+ EXPECT_TRUE(abc < def);
+ EXPECT_FALSE(def < abc);
}
TEST(fxcrt, ByteStringCOperatorEQ) {
- CFX_ByteStringC byte_string_c("hello");
- EXPECT_TRUE(byte_string_c == byte_string_c);
-
- CFX_ByteStringC byte_string_c_same1("hello");
- EXPECT_TRUE(byte_string_c == byte_string_c_same1);
- EXPECT_TRUE(byte_string_c_same1 == byte_string_c);
-
- CFX_ByteStringC byte_string_c_same2(byte_string_c);
- EXPECT_TRUE(byte_string_c == byte_string_c_same2);
- EXPECT_TRUE(byte_string_c_same2 == byte_string_c);
-
- CFX_ByteStringC byte_string_c1("he");
- CFX_ByteStringC byte_string_c2("hellp");
- CFX_ByteStringC byte_string_c3("hellod");
- EXPECT_FALSE(byte_string_c == byte_string_c1);
- EXPECT_FALSE(byte_string_c == byte_string_c2);
- EXPECT_FALSE(byte_string_c == byte_string_c3);
- EXPECT_FALSE(byte_string_c1 == byte_string_c);
- EXPECT_FALSE(byte_string_c2 == byte_string_c);
- EXPECT_FALSE(byte_string_c3 == byte_string_c);
-
- CFX_ByteString byte_string_same1("hello");
- EXPECT_TRUE(byte_string_c == byte_string_same1);
- EXPECT_TRUE(byte_string_same1 == byte_string_c);
-
- CFX_ByteString byte_string1("he");
- CFX_ByteString byte_string2("hellp");
- CFX_ByteString byte_string3("hellod");
- EXPECT_FALSE(byte_string_c == byte_string1);
- EXPECT_FALSE(byte_string_c == byte_string2);
- EXPECT_FALSE(byte_string_c == byte_string3);
- EXPECT_FALSE(byte_string1 == byte_string_c);
- EXPECT_FALSE(byte_string2 == byte_string_c);
- EXPECT_FALSE(byte_string3 == byte_string_c);
-
- const char* c_string_same1 = "hello";
- EXPECT_TRUE(byte_string_c == c_string_same1);
- EXPECT_TRUE(c_string_same1 == byte_string_c);
-
- const char* c_string1 = "he";
- const char* c_string2 = "hellp";
- const char* c_string3 = "hellod";
- EXPECT_FALSE(byte_string_c == c_string1);
- EXPECT_FALSE(byte_string_c == c_string2);
- EXPECT_FALSE(byte_string_c == c_string3);
-
- EXPECT_FALSE(c_string1 == byte_string_c);
- EXPECT_FALSE(c_string2 == byte_string_c);
- EXPECT_FALSE(c_string3 == byte_string_c);
+ CFX_ByteStringC byte_string_c("hello");
+ EXPECT_TRUE(byte_string_c == byte_string_c);
+
+ CFX_ByteStringC byte_string_c_same1("hello");
+ EXPECT_TRUE(byte_string_c == byte_string_c_same1);
+ EXPECT_TRUE(byte_string_c_same1 == byte_string_c);
+
+ CFX_ByteStringC byte_string_c_same2(byte_string_c);
+ EXPECT_TRUE(byte_string_c == byte_string_c_same2);
+ EXPECT_TRUE(byte_string_c_same2 == byte_string_c);
+
+ CFX_ByteStringC byte_string_c1("he");
+ CFX_ByteStringC byte_string_c2("hellp");
+ CFX_ByteStringC byte_string_c3("hellod");
+ EXPECT_FALSE(byte_string_c == byte_string_c1);
+ EXPECT_FALSE(byte_string_c == byte_string_c2);
+ EXPECT_FALSE(byte_string_c == byte_string_c3);
+ EXPECT_FALSE(byte_string_c1 == byte_string_c);
+ EXPECT_FALSE(byte_string_c2 == byte_string_c);
+ EXPECT_FALSE(byte_string_c3 == byte_string_c);
+
+ CFX_ByteString byte_string_same1("hello");
+ EXPECT_TRUE(byte_string_c == byte_string_same1);
+ EXPECT_TRUE(byte_string_same1 == byte_string_c);
+
+ CFX_ByteString byte_string1("he");
+ CFX_ByteString byte_string2("hellp");
+ CFX_ByteString byte_string3("hellod");
+ EXPECT_FALSE(byte_string_c == byte_string1);
+ EXPECT_FALSE(byte_string_c == byte_string2);
+ EXPECT_FALSE(byte_string_c == byte_string3);
+ EXPECT_FALSE(byte_string1 == byte_string_c);
+ EXPECT_FALSE(byte_string2 == byte_string_c);
+ EXPECT_FALSE(byte_string3 == byte_string_c);
+
+ const char* c_string_same1 = "hello";
+ EXPECT_TRUE(byte_string_c == c_string_same1);
+ EXPECT_TRUE(c_string_same1 == byte_string_c);
+
+ const char* c_string1 = "he";
+ const char* c_string2 = "hellp";
+ const char* c_string3 = "hellod";
+ EXPECT_FALSE(byte_string_c == c_string1);
+ EXPECT_FALSE(byte_string_c == c_string2);
+ EXPECT_FALSE(byte_string_c == c_string3);
+
+ EXPECT_FALSE(c_string1 == byte_string_c);
+ EXPECT_FALSE(c_string2 == byte_string_c);
+ EXPECT_FALSE(c_string3 == byte_string_c);
}
TEST(fxcrt, ByteStringCOperatorNE) {
- CFX_ByteStringC byte_string_c("hello");
- EXPECT_FALSE(byte_string_c != byte_string_c);
-
- CFX_ByteStringC byte_string_c_same1("hello");
- EXPECT_FALSE(byte_string_c != byte_string_c_same1);
- EXPECT_FALSE(byte_string_c_same1 != byte_string_c);
-
- CFX_ByteStringC byte_string_c_same2(byte_string_c);
- EXPECT_FALSE(byte_string_c != byte_string_c_same2);
- EXPECT_FALSE(byte_string_c_same2 != byte_string_c);
-
- CFX_ByteStringC byte_string_c1("he");
- CFX_ByteStringC byte_string_c2("hellp");
- CFX_ByteStringC byte_string_c3("hellod");
- EXPECT_TRUE(byte_string_c != byte_string_c1);
- EXPECT_TRUE(byte_string_c != byte_string_c2);
- EXPECT_TRUE(byte_string_c != byte_string_c3);
- EXPECT_TRUE(byte_string_c1 != byte_string_c);
- EXPECT_TRUE(byte_string_c2 != byte_string_c);
- EXPECT_TRUE(byte_string_c3 != byte_string_c);
-
- CFX_ByteString byte_string_same1("hello");
- EXPECT_FALSE(byte_string_c != byte_string_same1);
- EXPECT_FALSE(byte_string_same1 != byte_string_c);
-
- CFX_ByteString byte_string1("he");
- CFX_ByteString byte_string2("hellp");
- CFX_ByteString byte_string3("hellod");
- EXPECT_TRUE(byte_string_c != byte_string1);
- EXPECT_TRUE(byte_string_c != byte_string2);
- EXPECT_TRUE(byte_string_c != byte_string3);
- EXPECT_TRUE(byte_string1 != byte_string_c);
- EXPECT_TRUE(byte_string2 != byte_string_c);
- EXPECT_TRUE(byte_string3 != byte_string_c);
-
- const char* c_string_same1 = "hello";
- EXPECT_FALSE(byte_string_c != c_string_same1);
- EXPECT_FALSE(c_string_same1 != byte_string_c);
-
- const char* c_string1 = "he";
- const char* c_string2 = "hellp";
- const char* c_string3 = "hellod";
- EXPECT_TRUE(byte_string_c != c_string1);
- EXPECT_TRUE(byte_string_c != c_string2);
- EXPECT_TRUE(byte_string_c != c_string3);
-
- EXPECT_TRUE(c_string1 != byte_string_c);
- EXPECT_TRUE(c_string2 != byte_string_c);
- EXPECT_TRUE(c_string3 != byte_string_c);
+ CFX_ByteStringC byte_string_c("hello");
+ EXPECT_FALSE(byte_string_c != byte_string_c);
+
+ CFX_ByteStringC byte_string_c_same1("hello");
+ EXPECT_FALSE(byte_string_c != byte_string_c_same1);
+ EXPECT_FALSE(byte_string_c_same1 != byte_string_c);
+
+ CFX_ByteStringC byte_string_c_same2(byte_string_c);
+ EXPECT_FALSE(byte_string_c != byte_string_c_same2);
+ EXPECT_FALSE(byte_string_c_same2 != byte_string_c);
+
+ CFX_ByteStringC byte_string_c1("he");
+ CFX_ByteStringC byte_string_c2("hellp");
+ CFX_ByteStringC byte_string_c3("hellod");
+ EXPECT_TRUE(byte_string_c != byte_string_c1);
+ EXPECT_TRUE(byte_string_c != byte_string_c2);
+ EXPECT_TRUE(byte_string_c != byte_string_c3);
+ EXPECT_TRUE(byte_string_c1 != byte_string_c);
+ EXPECT_TRUE(byte_string_c2 != byte_string_c);
+ EXPECT_TRUE(byte_string_c3 != byte_string_c);
+
+ CFX_ByteString byte_string_same1("hello");
+ EXPECT_FALSE(byte_string_c != byte_string_same1);
+ EXPECT_FALSE(byte_string_same1 != byte_string_c);
+
+ CFX_ByteString byte_string1("he");
+ CFX_ByteString byte_string2("hellp");
+ CFX_ByteString byte_string3("hellod");
+ EXPECT_TRUE(byte_string_c != byte_string1);
+ EXPECT_TRUE(byte_string_c != byte_string2);
+ EXPECT_TRUE(byte_string_c != byte_string3);
+ EXPECT_TRUE(byte_string1 != byte_string_c);
+ EXPECT_TRUE(byte_string2 != byte_string_c);
+ EXPECT_TRUE(byte_string3 != byte_string_c);
+
+ const char* c_string_same1 = "hello";
+ EXPECT_FALSE(byte_string_c != c_string_same1);
+ EXPECT_FALSE(c_string_same1 != byte_string_c);
+
+ const char* c_string1 = "he";
+ const char* c_string2 = "hellp";
+ const char* c_string3 = "hellod";
+ EXPECT_TRUE(byte_string_c != c_string1);
+ EXPECT_TRUE(byte_string_c != c_string2);
+ EXPECT_TRUE(byte_string_c != c_string3);
+
+ EXPECT_TRUE(c_string1 != byte_string_c);
+ EXPECT_TRUE(c_string2 != byte_string_c);
+ EXPECT_TRUE(c_string3 != byte_string_c);
}
diff --git a/core/src/fxcrt/fx_basic_buffer.cpp b/core/src/fxcrt/fx_basic_buffer.cpp
index d6225b46f2..77884c63c0 100644
--- a/core/src/fxcrt/fx_basic_buffer.cpp
+++ b/core/src/fxcrt/fx_basic_buffer.cpp
@@ -7,413 +7,360 @@
#include "../../include/fxcrt/fx_basic.h"
FX_STRSIZE FX_ftoa(FX_FLOAT f, FX_CHAR* buf);
CFX_BinaryBuf::CFX_BinaryBuf()
- : m_AllocStep(0)
- , m_pBuffer(NULL)
- , m_DataSize(0)
- , m_AllocSize(0)
-{
-}
+ : m_AllocStep(0), m_pBuffer(NULL), m_DataSize(0), m_AllocSize(0) {}
CFX_BinaryBuf::CFX_BinaryBuf(FX_STRSIZE size)
- : m_AllocStep(0)
- , m_DataSize(size)
- , m_AllocSize(size)
-{
- m_pBuffer = FX_Alloc(uint8_t, size);
-}
-CFX_BinaryBuf::~CFX_BinaryBuf()
-{
- if (m_pBuffer) {
- FX_Free(m_pBuffer);
- }
-}
-void CFX_BinaryBuf::Delete(int start_index, int count)
-{
- if (!m_pBuffer || start_index < 0 || start_index + count > m_DataSize) {
- return;
- }
- FXSYS_memmove(m_pBuffer + start_index, m_pBuffer + start_index + count, m_DataSize - start_index - count);
- m_DataSize -= count;
-}
-void CFX_BinaryBuf::Clear()
-{
- m_DataSize = 0;
-}
-void CFX_BinaryBuf::DetachBuffer()
-{
+ : m_AllocStep(0), m_DataSize(size), m_AllocSize(size) {
+ m_pBuffer = FX_Alloc(uint8_t, size);
+}
+CFX_BinaryBuf::~CFX_BinaryBuf() {
+ if (m_pBuffer) {
+ FX_Free(m_pBuffer);
+ }
+}
+void CFX_BinaryBuf::Delete(int start_index, int count) {
+ if (!m_pBuffer || start_index < 0 || start_index + count > m_DataSize) {
+ return;
+ }
+ FXSYS_memmove(m_pBuffer + start_index, m_pBuffer + start_index + count,
+ m_DataSize - start_index - count);
+ m_DataSize -= count;
+}
+void CFX_BinaryBuf::Clear() {
+ m_DataSize = 0;
+}
+void CFX_BinaryBuf::DetachBuffer() {
+ m_DataSize = 0;
+ m_pBuffer = NULL;
+ m_AllocSize = 0;
+}
+void CFX_BinaryBuf::AttachData(void* buffer, FX_STRSIZE size) {
+ if (m_pBuffer) {
+ FX_Free(m_pBuffer);
+ }
+ m_DataSize = size;
+ m_pBuffer = (uint8_t*)buffer;
+ m_AllocSize = size;
+}
+void CFX_BinaryBuf::TakeOver(CFX_BinaryBuf& other) {
+ AttachData(other.GetBuffer(), other.GetSize());
+ other.DetachBuffer();
+}
+void CFX_BinaryBuf::EstimateSize(FX_STRSIZE size, FX_STRSIZE step) {
+ m_AllocStep = step;
+ if (m_AllocSize >= size) {
+ return;
+ }
+ ExpandBuf(size - m_DataSize);
+}
+void CFX_BinaryBuf::ExpandBuf(FX_STRSIZE add_size) {
+ FX_STRSIZE new_size = add_size + m_DataSize;
+ if (m_AllocSize >= new_size) {
+ return;
+ }
+ int alloc_step;
+ if (m_AllocStep == 0) {
+ alloc_step = m_AllocSize / 4;
+ if (alloc_step < 128) {
+ alloc_step = 128;
+ }
+ } else {
+ alloc_step = m_AllocStep;
+ }
+ new_size = (new_size + alloc_step - 1) / alloc_step * alloc_step;
+ uint8_t* pNewBuffer = m_pBuffer;
+ if (pNewBuffer) {
+ pNewBuffer = FX_Realloc(uint8_t, m_pBuffer, new_size);
+ } else {
+ pNewBuffer = FX_Alloc(uint8_t, new_size);
+ }
+ m_pBuffer = pNewBuffer;
+ m_AllocSize = new_size;
+}
+void CFX_BinaryBuf::CopyData(const void* pStr, FX_STRSIZE size) {
+ if (size == 0) {
m_DataSize = 0;
- m_pBuffer = NULL;
- m_AllocSize = 0;
-}
-void CFX_BinaryBuf::AttachData(void* buffer, FX_STRSIZE size)
-{
- if (m_pBuffer) {
- FX_Free(m_pBuffer);
- }
- m_DataSize = size;
- m_pBuffer = (uint8_t*)buffer;
- m_AllocSize = size;
-}
-void CFX_BinaryBuf::TakeOver(CFX_BinaryBuf& other)
-{
- AttachData(other.GetBuffer(), other.GetSize());
- other.DetachBuffer();
-}
-void CFX_BinaryBuf::EstimateSize(FX_STRSIZE size, FX_STRSIZE step)
-{
- m_AllocStep = step;
- if (m_AllocSize >= size) {
- return;
- }
+ return;
+ }
+ if (m_AllocSize < size) {
ExpandBuf(size - m_DataSize);
-}
-void CFX_BinaryBuf::ExpandBuf(FX_STRSIZE add_size)
-{
- FX_STRSIZE new_size = add_size + m_DataSize;
- if (m_AllocSize >= new_size) {
- return;
- }
- int alloc_step;
- if (m_AllocStep == 0) {
- alloc_step = m_AllocSize / 4;
- if (alloc_step < 128 ) {
- alloc_step = 128;
- }
- } else {
- alloc_step = m_AllocStep;
- }
- new_size = (new_size + alloc_step - 1) / alloc_step * alloc_step;
- uint8_t* pNewBuffer = m_pBuffer;
- if (pNewBuffer) {
- pNewBuffer = FX_Realloc(uint8_t, m_pBuffer, new_size);
- } else {
- pNewBuffer = FX_Alloc(uint8_t, new_size);
- }
- m_pBuffer = pNewBuffer;
- m_AllocSize = new_size;
-}
-void CFX_BinaryBuf::CopyData(const void* pStr, FX_STRSIZE size)
-{
- if (size == 0) {
- m_DataSize = 0;
- return;
- }
- if (m_AllocSize < size) {
- ExpandBuf(size - m_DataSize);
- }
- if (!m_pBuffer) {
- return;
- }
- FXSYS_memcpy(m_pBuffer, pStr, size);
- m_DataSize = size;
-}
-void CFX_BinaryBuf::AppendBlock(const void* pBuf, FX_STRSIZE size)
-{
- ExpandBuf(size);
- if (pBuf && m_pBuffer) {
- FXSYS_memcpy(m_pBuffer + m_DataSize, pBuf, size);
- }
- m_DataSize += size;
-}
-void CFX_BinaryBuf::InsertBlock(FX_STRSIZE pos, const void* pBuf, FX_STRSIZE size)
-{
- ExpandBuf(size);
- if (!m_pBuffer) {
- return;
- }
- FXSYS_memmove(m_pBuffer + pos + size, m_pBuffer + pos, m_DataSize - pos);
- if (pBuf) {
- FXSYS_memcpy(m_pBuffer + pos, pBuf, size);
- }
- m_DataSize += size;
-}
-void CFX_BinaryBuf::AppendFill(uint8_t byte, FX_STRSIZE count)
-{
- ExpandBuf(count);
- if (!m_pBuffer) {
- return;
- }
- FXSYS_memset(m_pBuffer + m_DataSize, byte, count);
- m_DataSize += count;
-}
-CFX_ByteStringC CFX_BinaryBuf::GetByteString() const
-{
- return CFX_ByteStringC(m_pBuffer, m_DataSize);
-}
-CFX_ByteTextBuf& CFX_ByteTextBuf::operator << (const CFX_ByteStringC& lpsz)
-{
- AppendBlock(lpsz.GetPtr(), lpsz.GetLength());
- return *this;
-}
-CFX_ByteTextBuf& CFX_ByteTextBuf::operator << (int i)
-{
- char buf[32];
- FXSYS_itoa(i, buf, 10);
- AppendBlock(buf, FXSYS_strlen(buf));
- return *this;
-}
-CFX_ByteTextBuf& CFX_ByteTextBuf::operator << (FX_DWORD i)
-{
- char buf[32];
- FXSYS_itoa(i, buf, 10);
- AppendBlock(buf, FXSYS_strlen(buf));
- return *this;
-}
-CFX_ByteTextBuf& CFX_ByteTextBuf::operator << (double f)
-{
- char buf[32];
- FX_STRSIZE len = FX_ftoa((FX_FLOAT)f, buf);
- AppendBlock(buf, len);
- return *this;
-}
-CFX_ByteTextBuf& CFX_ByteTextBuf::operator << (const CFX_ByteTextBuf& buf)
-{
- AppendBlock(buf.m_pBuffer, buf.m_DataSize);
- return *this;
-}
-void CFX_ByteTextBuf::operator =(const CFX_ByteStringC& str)
-{
- CopyData(str.GetPtr(), str.GetLength());
-}
-void CFX_WideTextBuf::AppendChar(FX_WCHAR ch)
-{
- if (m_AllocSize < m_DataSize + (FX_STRSIZE)sizeof(FX_WCHAR)) {
- ExpandBuf(sizeof(FX_WCHAR));
- }
- ASSERT(m_pBuffer != NULL);
- *(FX_WCHAR*)(m_pBuffer + m_DataSize) = ch;
- m_DataSize += sizeof(FX_WCHAR);
-}
-CFX_WideTextBuf& CFX_WideTextBuf::operator << (const CFX_WideStringC& str)
-{
- AppendBlock(str.GetPtr(), str.GetLength() * sizeof(FX_WCHAR));
- return *this;
-}
-CFX_WideTextBuf& CFX_WideTextBuf::operator << (const CFX_WideString &str)
-{
- AppendBlock(str.c_str(), str.GetLength() * sizeof(FX_WCHAR));
- return *this;
-}
-CFX_WideTextBuf& CFX_WideTextBuf::operator << (int i)
-{
- char buf[32];
- FXSYS_itoa(i, buf, 10);
- FX_STRSIZE len = FXSYS_strlen(buf);
- if (m_AllocSize < m_DataSize + (FX_STRSIZE)(len * sizeof(FX_WCHAR))) {
- ExpandBuf(len * sizeof(FX_WCHAR));
- }
- ASSERT(m_pBuffer != NULL);
- FX_WCHAR* str = (FX_WCHAR*)(m_pBuffer + m_DataSize);
- for (FX_STRSIZE j = 0; j < len; j ++) {
- *str ++ = buf[j];
- }
- m_DataSize += len * sizeof(FX_WCHAR);
- return *this;
-}
-CFX_WideTextBuf& CFX_WideTextBuf::operator << (double f)
-{
- char buf[32];
- FX_STRSIZE len = FX_ftoa((FX_FLOAT)f, buf);
- if (m_AllocSize < m_DataSize + (FX_STRSIZE)(len * sizeof(FX_WCHAR))) {
- ExpandBuf(len * sizeof(FX_WCHAR));
- }
- ASSERT(m_pBuffer != NULL);
- FX_WCHAR* str = (FX_WCHAR*)(m_pBuffer + m_DataSize);
- for (FX_STRSIZE i = 0; i < len; i ++) {
- *str ++ = buf[i];
- }
- m_DataSize += len * sizeof(FX_WCHAR);
- return *this;
-}
-CFX_WideTextBuf& CFX_WideTextBuf::operator << (const FX_WCHAR* lpsz)
-{
- AppendBlock(lpsz, FXSYS_wcslen(lpsz)*sizeof(FX_WCHAR));
- return *this;
-}
-CFX_WideTextBuf& CFX_WideTextBuf::operator << (const CFX_WideTextBuf& buf)
-{
- AppendBlock(buf.m_pBuffer, buf.m_DataSize);
- return *this;
-}
-void CFX_WideTextBuf::operator =(const CFX_WideStringC& str)
-{
- CopyData(str.GetPtr(), str.GetLength() * sizeof(FX_WCHAR));
-}
-CFX_WideStringC CFX_WideTextBuf::GetWideString() const
-{
- return CFX_WideStringC((const FX_WCHAR*)m_pBuffer, m_DataSize / sizeof(FX_WCHAR));
-}
-void CFX_BitStream::Init(const uint8_t* pData, FX_DWORD dwSize)
-{
- m_pData = pData;
- m_BitSize = dwSize * 8;
- m_BitPos = 0;
-}
-void CFX_BitStream::ByteAlign()
-{
- int mod = m_BitPos % 8;
- if (mod == 0) {
- return;
- }
- m_BitPos += 8 - mod;
-}
-FX_DWORD CFX_BitStream::GetBits(FX_DWORD nBits)
-{
- if (nBits > m_BitSize || m_BitPos + nBits > m_BitSize) {
- return 0;
- }
- if (nBits == 1) {
- int bit = (m_pData[m_BitPos / 8] & (1 << (7 - m_BitPos % 8))) ? 1 : 0;
- m_BitPos ++;
- return bit;
- }
- FX_DWORD byte_pos = m_BitPos / 8;
- FX_DWORD bit_pos = m_BitPos % 8, bit_left = nBits;
- FX_DWORD result = 0;
- if (bit_pos) {
- if (8 - bit_pos >= bit_left) {
- result = (m_pData[byte_pos] & (0xff >> bit_pos)) >> (8 - bit_pos - bit_left);
- m_BitPos += bit_left;
- return result;
- }
- bit_left -= 8 - bit_pos;
- result = (m_pData[byte_pos++] & ((1 << (8 - bit_pos)) - 1)) << bit_left;
- }
- while (bit_left >= 8) {
- bit_left -= 8;
- result |= m_pData[byte_pos++] << bit_left;
- }
- if (bit_left) {
- result |= m_pData[byte_pos] >> (8 - bit_left);
- }
- m_BitPos += nBits;
- return result;
+ }
+ if (!m_pBuffer) {
+ return;
+ }
+ FXSYS_memcpy(m_pBuffer, pStr, size);
+ m_DataSize = size;
+}
+void CFX_BinaryBuf::AppendBlock(const void* pBuf, FX_STRSIZE size) {
+ ExpandBuf(size);
+ if (pBuf && m_pBuffer) {
+ FXSYS_memcpy(m_pBuffer + m_DataSize, pBuf, size);
+ }
+ m_DataSize += size;
+}
+void CFX_BinaryBuf::InsertBlock(FX_STRSIZE pos,
+ const void* pBuf,
+ FX_STRSIZE size) {
+ ExpandBuf(size);
+ if (!m_pBuffer) {
+ return;
+ }
+ FXSYS_memmove(m_pBuffer + pos + size, m_pBuffer + pos, m_DataSize - pos);
+ if (pBuf) {
+ FXSYS_memcpy(m_pBuffer + pos, pBuf, size);
+ }
+ m_DataSize += size;
+}
+void CFX_BinaryBuf::AppendFill(uint8_t byte, FX_STRSIZE count) {
+ ExpandBuf(count);
+ if (!m_pBuffer) {
+ return;
+ }
+ FXSYS_memset(m_pBuffer + m_DataSize, byte, count);
+ m_DataSize += count;
+}
+CFX_ByteStringC CFX_BinaryBuf::GetByteString() const {
+ return CFX_ByteStringC(m_pBuffer, m_DataSize);
+}
+CFX_ByteTextBuf& CFX_ByteTextBuf::operator<<(const CFX_ByteStringC& lpsz) {
+ AppendBlock(lpsz.GetPtr(), lpsz.GetLength());
+ return *this;
+}
+CFX_ByteTextBuf& CFX_ByteTextBuf::operator<<(int i) {
+ char buf[32];
+ FXSYS_itoa(i, buf, 10);
+ AppendBlock(buf, FXSYS_strlen(buf));
+ return *this;
+}
+CFX_ByteTextBuf& CFX_ByteTextBuf::operator<<(FX_DWORD i) {
+ char buf[32];
+ FXSYS_itoa(i, buf, 10);
+ AppendBlock(buf, FXSYS_strlen(buf));
+ return *this;
+}
+CFX_ByteTextBuf& CFX_ByteTextBuf::operator<<(double f) {
+ char buf[32];
+ FX_STRSIZE len = FX_ftoa((FX_FLOAT)f, buf);
+ AppendBlock(buf, len);
+ return *this;
+}
+CFX_ByteTextBuf& CFX_ByteTextBuf::operator<<(const CFX_ByteTextBuf& buf) {
+ AppendBlock(buf.m_pBuffer, buf.m_DataSize);
+ return *this;
+}
+void CFX_ByteTextBuf::operator=(const CFX_ByteStringC& str) {
+ CopyData(str.GetPtr(), str.GetLength());
+}
+void CFX_WideTextBuf::AppendChar(FX_WCHAR ch) {
+ if (m_AllocSize < m_DataSize + (FX_STRSIZE)sizeof(FX_WCHAR)) {
+ ExpandBuf(sizeof(FX_WCHAR));
+ }
+ ASSERT(m_pBuffer != NULL);
+ *(FX_WCHAR*)(m_pBuffer + m_DataSize) = ch;
+ m_DataSize += sizeof(FX_WCHAR);
+}
+CFX_WideTextBuf& CFX_WideTextBuf::operator<<(const CFX_WideStringC& str) {
+ AppendBlock(str.GetPtr(), str.GetLength() * sizeof(FX_WCHAR));
+ return *this;
+}
+CFX_WideTextBuf& CFX_WideTextBuf::operator<<(const CFX_WideString& str) {
+ AppendBlock(str.c_str(), str.GetLength() * sizeof(FX_WCHAR));
+ return *this;
+}
+CFX_WideTextBuf& CFX_WideTextBuf::operator<<(int i) {
+ char buf[32];
+ FXSYS_itoa(i, buf, 10);
+ FX_STRSIZE len = FXSYS_strlen(buf);
+ if (m_AllocSize < m_DataSize + (FX_STRSIZE)(len * sizeof(FX_WCHAR))) {
+ ExpandBuf(len * sizeof(FX_WCHAR));
+ }
+ ASSERT(m_pBuffer != NULL);
+ FX_WCHAR* str = (FX_WCHAR*)(m_pBuffer + m_DataSize);
+ for (FX_STRSIZE j = 0; j < len; j++) {
+ *str++ = buf[j];
+ }
+ m_DataSize += len * sizeof(FX_WCHAR);
+ return *this;
+}
+CFX_WideTextBuf& CFX_WideTextBuf::operator<<(double f) {
+ char buf[32];
+ FX_STRSIZE len = FX_ftoa((FX_FLOAT)f, buf);
+ if (m_AllocSize < m_DataSize + (FX_STRSIZE)(len * sizeof(FX_WCHAR))) {
+ ExpandBuf(len * sizeof(FX_WCHAR));
+ }
+ ASSERT(m_pBuffer != NULL);
+ FX_WCHAR* str = (FX_WCHAR*)(m_pBuffer + m_DataSize);
+ for (FX_STRSIZE i = 0; i < len; i++) {
+ *str++ = buf[i];
+ }
+ m_DataSize += len * sizeof(FX_WCHAR);
+ return *this;
+}
+CFX_WideTextBuf& CFX_WideTextBuf::operator<<(const FX_WCHAR* lpsz) {
+ AppendBlock(lpsz, FXSYS_wcslen(lpsz) * sizeof(FX_WCHAR));
+ return *this;
+}
+CFX_WideTextBuf& CFX_WideTextBuf::operator<<(const CFX_WideTextBuf& buf) {
+ AppendBlock(buf.m_pBuffer, buf.m_DataSize);
+ return *this;
+}
+void CFX_WideTextBuf::operator=(const CFX_WideStringC& str) {
+ CopyData(str.GetPtr(), str.GetLength() * sizeof(FX_WCHAR));
+}
+CFX_WideStringC CFX_WideTextBuf::GetWideString() const {
+ return CFX_WideStringC((const FX_WCHAR*)m_pBuffer,
+ m_DataSize / sizeof(FX_WCHAR));
+}
+void CFX_BitStream::Init(const uint8_t* pData, FX_DWORD dwSize) {
+ m_pData = pData;
+ m_BitSize = dwSize * 8;
+ m_BitPos = 0;
+}
+void CFX_BitStream::ByteAlign() {
+ int mod = m_BitPos % 8;
+ if (mod == 0) {
+ return;
+ }
+ m_BitPos += 8 - mod;
+}
+FX_DWORD CFX_BitStream::GetBits(FX_DWORD nBits) {
+ if (nBits > m_BitSize || m_BitPos + nBits > m_BitSize) {
+ return 0;
+ }
+ if (nBits == 1) {
+ int bit = (m_pData[m_BitPos / 8] & (1 << (7 - m_BitPos % 8))) ? 1 : 0;
+ m_BitPos++;
+ return bit;
+ }
+ FX_DWORD byte_pos = m_BitPos / 8;
+ FX_DWORD bit_pos = m_BitPos % 8, bit_left = nBits;
+ FX_DWORD result = 0;
+ if (bit_pos) {
+ if (8 - bit_pos >= bit_left) {
+ result =
+ (m_pData[byte_pos] & (0xff >> bit_pos)) >> (8 - bit_pos - bit_left);
+ m_BitPos += bit_left;
+ return result;
+ }
+ bit_left -= 8 - bit_pos;
+ result = (m_pData[byte_pos++] & ((1 << (8 - bit_pos)) - 1)) << bit_left;
+ }
+ while (bit_left >= 8) {
+ bit_left -= 8;
+ result |= m_pData[byte_pos++] << bit_left;
+ }
+ if (bit_left) {
+ result |= m_pData[byte_pos] >> (8 - bit_left);
+ }
+ m_BitPos += nBits;
+ return result;
}
IFX_BufferArchive::IFX_BufferArchive(FX_STRSIZE size)
- : m_BufSize(size)
- , m_pBuffer(NULL)
- , m_Length(0)
-{
-}
-void IFX_BufferArchive::Clear()
-{
- m_Length = 0;
- if (m_pBuffer) {
- FX_Free(m_pBuffer);
- m_pBuffer = NULL;
- }
-}
-FX_BOOL IFX_BufferArchive::Flush()
-{
- FX_BOOL bRet = DoWork(m_pBuffer, m_Length);
- m_Length = 0;
- return bRet;
-}
-int32_t IFX_BufferArchive::AppendBlock(const void* pBuf, size_t size)
-{
- if (!pBuf || size < 1) {
- return 0;
- }
- if (!m_pBuffer) {
- m_pBuffer = FX_Alloc(uint8_t, m_BufSize);
- }
- uint8_t* buffer = (uint8_t*)pBuf;
- FX_STRSIZE temp_size = (FX_STRSIZE)size;
- while (temp_size > 0) {
- FX_STRSIZE buf_size = FX_MIN(m_BufSize - m_Length, (FX_STRSIZE)temp_size);
- FXSYS_memcpy(m_pBuffer + m_Length, buffer, buf_size);
- m_Length += buf_size;
- if (m_Length == m_BufSize) {
- if (!Flush()) {
- return -1;
- }
- }
- temp_size -= buf_size;
- buffer += buf_size;
- }
- return (int32_t)size;
-}
-int32_t IFX_BufferArchive::AppendByte(uint8_t byte)
-{
- return AppendBlock(&byte, 1);
-}
-int32_t IFX_BufferArchive::AppendDWord(FX_DWORD i)
-{
- char buf[32];
- FXSYS_itoa(i, buf, 10);
- return AppendBlock(buf, (size_t)FXSYS_strlen(buf));
-}
-int32_t IFX_BufferArchive::AppendString(const CFX_ByteStringC& lpsz)
-{
- return AppendBlock(lpsz.GetPtr(), lpsz.GetLength());
+ : m_BufSize(size), m_pBuffer(NULL), m_Length(0) {}
+void IFX_BufferArchive::Clear() {
+ m_Length = 0;
+ if (m_pBuffer) {
+ FX_Free(m_pBuffer);
+ m_pBuffer = NULL;
+ }
+}
+FX_BOOL IFX_BufferArchive::Flush() {
+ FX_BOOL bRet = DoWork(m_pBuffer, m_Length);
+ m_Length = 0;
+ return bRet;
+}
+int32_t IFX_BufferArchive::AppendBlock(const void* pBuf, size_t size) {
+ if (!pBuf || size < 1) {
+ return 0;
+ }
+ if (!m_pBuffer) {
+ m_pBuffer = FX_Alloc(uint8_t, m_BufSize);
+ }
+ uint8_t* buffer = (uint8_t*)pBuf;
+ FX_STRSIZE temp_size = (FX_STRSIZE)size;
+ while (temp_size > 0) {
+ FX_STRSIZE buf_size = FX_MIN(m_BufSize - m_Length, (FX_STRSIZE)temp_size);
+ FXSYS_memcpy(m_pBuffer + m_Length, buffer, buf_size);
+ m_Length += buf_size;
+ if (m_Length == m_BufSize) {
+ if (!Flush()) {
+ return -1;
+ }
+ }
+ temp_size -= buf_size;
+ buffer += buf_size;
+ }
+ return (int32_t)size;
+}
+int32_t IFX_BufferArchive::AppendByte(uint8_t byte) {
+ return AppendBlock(&byte, 1);
+}
+int32_t IFX_BufferArchive::AppendDWord(FX_DWORD i) {
+ char buf[32];
+ FXSYS_itoa(i, buf, 10);
+ return AppendBlock(buf, (size_t)FXSYS_strlen(buf));
+}
+int32_t IFX_BufferArchive::AppendString(const CFX_ByteStringC& lpsz) {
+ return AppendBlock(lpsz.GetPtr(), lpsz.GetLength());
}
CFX_FileBufferArchive::CFX_FileBufferArchive(FX_STRSIZE size)
- : IFX_BufferArchive(size)
- , m_pFile(NULL)
- , m_bTakeover(FALSE)
-{
-}
-CFX_FileBufferArchive::~CFX_FileBufferArchive()
-{
- Clear();
-}
-void CFX_FileBufferArchive::Clear()
-{
- if (m_pFile && m_bTakeover) {
- m_pFile->Release();
- }
- m_pFile = NULL;
- m_bTakeover = FALSE;
- IFX_BufferArchive::Clear();
-}
-FX_BOOL CFX_FileBufferArchive::AttachFile(IFX_StreamWrite *pFile, FX_BOOL bTakeover )
-{
- if (!pFile) {
- return FALSE;
- }
- if (m_pFile && m_bTakeover) {
- m_pFile->Release();
- }
- m_pFile = pFile;
- m_bTakeover = bTakeover;
- return TRUE;
-}
-FX_BOOL CFX_FileBufferArchive::AttachFile(const FX_WCHAR* filename)
-{
- if (!filename) {
- return FALSE;
- }
- if (m_pFile && m_bTakeover) {
- m_pFile->Release();
- }
- m_pFile = FX_CreateFileWrite(filename);
- if (!m_pFile) {
- return FALSE;
- }
- m_bTakeover = TRUE;
+ : IFX_BufferArchive(size), m_pFile(NULL), m_bTakeover(FALSE) {}
+CFX_FileBufferArchive::~CFX_FileBufferArchive() {
+ Clear();
+}
+void CFX_FileBufferArchive::Clear() {
+ if (m_pFile && m_bTakeover) {
+ m_pFile->Release();
+ }
+ m_pFile = NULL;
+ m_bTakeover = FALSE;
+ IFX_BufferArchive::Clear();
+}
+FX_BOOL CFX_FileBufferArchive::AttachFile(IFX_StreamWrite* pFile,
+ FX_BOOL bTakeover) {
+ if (!pFile) {
+ return FALSE;
+ }
+ if (m_pFile && m_bTakeover) {
+ m_pFile->Release();
+ }
+ m_pFile = pFile;
+ m_bTakeover = bTakeover;
+ return TRUE;
+}
+FX_BOOL CFX_FileBufferArchive::AttachFile(const FX_WCHAR* filename) {
+ if (!filename) {
+ return FALSE;
+ }
+ if (m_pFile && m_bTakeover) {
+ m_pFile->Release();
+ }
+ m_pFile = FX_CreateFileWrite(filename);
+ if (!m_pFile) {
+ return FALSE;
+ }
+ m_bTakeover = TRUE;
+ return TRUE;
+}
+FX_BOOL CFX_FileBufferArchive::AttachFile(const FX_CHAR* filename) {
+ if (!filename) {
+ return FALSE;
+ }
+ if (m_pFile && m_bTakeover) {
+ m_pFile->Release();
+ }
+ m_pFile = FX_CreateFileWrite(filename);
+ if (!m_pFile) {
+ return FALSE;
+ }
+ m_bTakeover = TRUE;
+ return TRUE;
+}
+FX_BOOL CFX_FileBufferArchive::DoWork(const void* pBuf, size_t size) {
+ if (!m_pFile) {
+ return FALSE;
+ }
+ if (!pBuf || size < 1) {
return TRUE;
-}
-FX_BOOL CFX_FileBufferArchive::AttachFile(const FX_CHAR* filename)
-{
- if (!filename) {
- return FALSE;
- }
- if (m_pFile && m_bTakeover) {
- m_pFile->Release();
- }
- m_pFile = FX_CreateFileWrite(filename);
- if (!m_pFile) {
- return FALSE;
- }
- m_bTakeover = TRUE;
- return TRUE;
-}
-FX_BOOL CFX_FileBufferArchive::DoWork(const void* pBuf, size_t size)
-{
- if (!m_pFile) {
- return FALSE;
- }
- if (!pBuf || size < 1) {
- return TRUE;
- }
- return m_pFile->WriteBlock(pBuf, size);
+ }
+ return m_pFile->WriteBlock(pBuf, size);
}
diff --git a/core/src/fxcrt/fx_basic_coords.cpp b/core/src/fxcrt/fx_basic_coords.cpp
index 2e830809b8..4b570c6436 100644
--- a/core/src/fxcrt/fx_basic_coords.cpp
+++ b/core/src/fxcrt/fx_basic_coords.cpp
@@ -9,561 +9,531 @@
#include "../../include/fxcrt/fx_coordinates.h"
#include "../../include/fxcrt/fx_ext.h"
-void FX_RECT::Normalize()
-{
- if (left > right) {
- int temp = left;
- left = right;
- right = temp;
- }
- if (top > bottom) {
- int temp = top;
- top = bottom;
- bottom = temp;
- }
-}
-void FX_RECT::Intersect(const FX_RECT& src)
-{
- FX_RECT src_n = src;
- src_n.Normalize();
- Normalize();
- left = left > src_n.left ? left : src_n.left;
- top = top > src_n.top ? top : src_n.top;
- right = right < src_n.right ? right : src_n.right;
- bottom = bottom < src_n.bottom ? bottom : src_n.bottom;
- if (left > right || top > bottom) {
- left = top = right = bottom = 0;
- }
-}
-void FX_RECT::Union(const FX_RECT& other_rect)
-{
- Normalize();
- FX_RECT other = other_rect;
- other.Normalize();
- left = left < other.left ? left : other.left;
- right = right > other.right ? right : other.right;
- bottom = bottom > other.bottom ? bottom : other.bottom;
- top = top < other.top ? top : other.top;
-}
-FX_BOOL GetIntersection(FX_FLOAT low1, FX_FLOAT high1, FX_FLOAT low2, FX_FLOAT high2,
- FX_FLOAT& interlow, FX_FLOAT& interhigh)
-{
- if (low1 >= high2 || low2 >= high1) {
- return FALSE;
- }
- interlow = low1 > low2 ? low1 : low2;
- interhigh = high1 > high2 ? high2 : high1;
- return TRUE;
-}
-extern "C" int FXSYS_round(FX_FLOAT d)
-{
- if (d < (FX_FLOAT)INT_MIN) {
- return INT_MIN;
- }
- if (d > (FX_FLOAT)INT_MAX) {
- return INT_MAX;
- }
-
- return (int)round(d);
-}
-CFX_FloatRect::CFX_FloatRect(const FX_RECT& rect)
-{
- left = (FX_FLOAT)(rect.left);
- right = (FX_FLOAT)(rect.right);
- bottom = (FX_FLOAT)(rect.top);
- top = (FX_FLOAT)(rect.bottom);
-}
-void CFX_FloatRect::Normalize()
-{
- FX_FLOAT temp;
- if (left > right) {
- temp = left;
- left = right;
- right = temp;
- }
- if (bottom > top) {
- temp = top;
- top = bottom;
- bottom = temp;
- }
-}
-void CFX_FloatRect::Intersect(const CFX_FloatRect& other_rect)
-{
- Normalize();
- CFX_FloatRect other = other_rect;
- other.Normalize();
- left = left > other.left ? left : other.left;
- right = right < other.right ? right : other.right;
- bottom = bottom > other.bottom ? bottom : other.bottom;
- top = top < other.top ? top : other.top;
- if (left > right || bottom > top) {
- left = right = bottom = top = 0;
- }
-}
-void CFX_FloatRect::Union(const CFX_FloatRect& other_rect)
-{
- Normalize();
- CFX_FloatRect other = other_rect;
- other.Normalize();
- left = left < other.left ? left : other.left;
- right = right > other.right ? right : other.right;
- bottom = bottom < other.bottom ? bottom : other.bottom;
- top = top > other.top ? top : other.top;
-}
-void CFX_FloatRect::Transform(const CFX_Matrix* pMatrix)
-{
- pMatrix->TransformRect(left, right, top, bottom);
-}
-int CFX_FloatRect::Substract4(CFX_FloatRect& s, CFX_FloatRect* pRects)
-{
- Normalize();
- s.Normalize();
- int nRects = 0;
- CFX_FloatRect rects[4];
- if (left < s.left) {
- rects[nRects].left = left;
- rects[nRects].right = s.left;
- rects[nRects].bottom = bottom;
- rects[nRects].top = top;
- nRects ++;
- }
- if (s.left < right && s.top < top) {
- rects[nRects].left = s.left;
- rects[nRects].right = right;
- rects[nRects].bottom = s.top;
- rects[nRects].top = top;
- nRects ++;
- }
- if (s.top > bottom && s.right < right) {
- rects[nRects].left = s.right;
- rects[nRects].right = right;
- rects[nRects].bottom = bottom;
- rects[nRects].top = s.top;
- nRects ++;
- }
- if (s.bottom > bottom) {
- rects[nRects].left = s.left;
- rects[nRects].right = s.right;
- rects[nRects].bottom = bottom;
- rects[nRects].top = s.bottom;
- nRects ++;
- }
- if (nRects == 0) {
- return 0;
- }
- for (int i = 0; i < nRects; i ++) {
- pRects[i] = rects[i];
- pRects[i].Intersect(*this);
- }
- return nRects;
-}
-FX_RECT CFX_FloatRect::GetOutterRect() const
-{
- CFX_FloatRect rect1 = *this;
- FX_RECT rect;
- rect.left = (int)FXSYS_floor(rect1.left);
- rect.right = (int)FXSYS_ceil(rect1.right);
- rect.top = (int)FXSYS_floor(rect1.bottom);
- rect.bottom = (int)FXSYS_ceil(rect1.top);
- rect.Normalize();
- return rect;
-}
-FX_RECT CFX_FloatRect::GetInnerRect() const
-{
- CFX_FloatRect rect1 = *this;
- FX_RECT rect;
- rect.left = (int)FXSYS_ceil(rect1.left);
- rect.right = (int)FXSYS_floor(rect1.right);
- rect.top = (int)FXSYS_ceil(rect1.bottom);
- rect.bottom = (int)FXSYS_floor(rect1.top);
- rect.Normalize();
- return rect;
-}
-static void _MatchFloatRange(FX_FLOAT f1, FX_FLOAT f2, int& i1, int& i2)
-{
- int length = (int)FXSYS_ceil(f2 - f1);
- int i1_1 = (int)FXSYS_floor(f1);
- int i1_2 = (int)FXSYS_ceil(f1);
- FX_FLOAT error1 = f1 - i1_1 + (FX_FLOAT)FXSYS_fabs(f2 - i1_1 - length);
- FX_FLOAT error2 = i1_2 - f1 + (FX_FLOAT)FXSYS_fabs(f2 - i1_2 - length);
- i1 = (error1 > error2) ? i1_2 : i1_1;
- i2 = i1 + length;
-}
-FX_RECT CFX_FloatRect::GetClosestRect() const
-{
- CFX_FloatRect rect1 = *this;
- FX_RECT rect;
- _MatchFloatRange(rect1.left, rect1.right, rect.left, rect.right);
- _MatchFloatRange(rect1.bottom, rect1.top, rect.top, rect.bottom);
- rect.Normalize();
- return rect;
-}
-FX_BOOL CFX_FloatRect::Contains(const CFX_FloatRect& other_rect) const
-{
- CFX_FloatRect n1 = *this;
- n1.Normalize();
- CFX_FloatRect n2 = other_rect;
- n2.Normalize();
- if (n2.left >= n1.left && n2.right <= n1.right && n2.bottom >= n1.bottom && n2.top <= n1.top) {
- return TRUE;
- }
+void FX_RECT::Normalize() {
+ if (left > right) {
+ int temp = left;
+ left = right;
+ right = temp;
+ }
+ if (top > bottom) {
+ int temp = top;
+ top = bottom;
+ bottom = temp;
+ }
+}
+void FX_RECT::Intersect(const FX_RECT& src) {
+ FX_RECT src_n = src;
+ src_n.Normalize();
+ Normalize();
+ left = left > src_n.left ? left : src_n.left;
+ top = top > src_n.top ? top : src_n.top;
+ right = right < src_n.right ? right : src_n.right;
+ bottom = bottom < src_n.bottom ? bottom : src_n.bottom;
+ if (left > right || top > bottom) {
+ left = top = right = bottom = 0;
+ }
+}
+void FX_RECT::Union(const FX_RECT& other_rect) {
+ Normalize();
+ FX_RECT other = other_rect;
+ other.Normalize();
+ left = left < other.left ? left : other.left;
+ right = right > other.right ? right : other.right;
+ bottom = bottom > other.bottom ? bottom : other.bottom;
+ top = top < other.top ? top : other.top;
+}
+FX_BOOL GetIntersection(FX_FLOAT low1,
+ FX_FLOAT high1,
+ FX_FLOAT low2,
+ FX_FLOAT high2,
+ FX_FLOAT& interlow,
+ FX_FLOAT& interhigh) {
+ if (low1 >= high2 || low2 >= high1) {
return FALSE;
-}
-FX_BOOL CFX_FloatRect::Contains(FX_FLOAT x, FX_FLOAT y) const
-{
- CFX_FloatRect n1 = *this;
- n1.Normalize();
- return x <= n1.right && x >= n1.left && y <= n1.top && y >= n1.bottom;
-}
-void CFX_FloatRect::UpdateRect(FX_FLOAT x, FX_FLOAT y)
-{
- if (left > x) {
- left = x;
- }
- if (right < x) {
- right = x;
- }
- if (bottom > y) {
- bottom = y;
- }
- if (top < y) {
- top = y;
- }
-}
-CFX_FloatRect CFX_FloatRect::GetBBox(const CFX_FloatPoint* pPoints, int nPoints)
-{
- if (nPoints == 0) {
- return CFX_FloatRect();
- }
- FX_FLOAT min_x = pPoints->x, max_x = pPoints->x, min_y = pPoints->y, max_y = pPoints->y;
- for (int i = 1; i < nPoints; i ++) {
- if (min_x > pPoints[i].x) {
- min_x = pPoints[i].x;
- }
- if (max_x < pPoints[i].x) {
- max_x = pPoints[i].x;
- }
- if (min_y > pPoints[i].y) {
- min_y = pPoints[i].y;
- }
- if (max_y < pPoints[i].y) {
- max_y = pPoints[i].y;
- }
- }
- return CFX_FloatRect(min_x, min_y, max_x, max_y);
+ }
+ interlow = low1 > low2 ? low1 : low2;
+ interhigh = high1 > high2 ? high2 : high1;
+ return TRUE;
+}
+extern "C" int FXSYS_round(FX_FLOAT d) {
+ if (d < (FX_FLOAT)INT_MIN) {
+ return INT_MIN;
+ }
+ if (d > (FX_FLOAT)INT_MAX) {
+ return INT_MAX;
+ }
+
+ return (int)round(d);
+}
+CFX_FloatRect::CFX_FloatRect(const FX_RECT& rect) {
+ left = (FX_FLOAT)(rect.left);
+ right = (FX_FLOAT)(rect.right);
+ bottom = (FX_FLOAT)(rect.top);
+ top = (FX_FLOAT)(rect.bottom);
+}
+void CFX_FloatRect::Normalize() {
+ FX_FLOAT temp;
+ if (left > right) {
+ temp = left;
+ left = right;
+ right = temp;
+ }
+ if (bottom > top) {
+ temp = top;
+ top = bottom;
+ bottom = temp;
+ }
+}
+void CFX_FloatRect::Intersect(const CFX_FloatRect& other_rect) {
+ Normalize();
+ CFX_FloatRect other = other_rect;
+ other.Normalize();
+ left = left > other.left ? left : other.left;
+ right = right < other.right ? right : other.right;
+ bottom = bottom > other.bottom ? bottom : other.bottom;
+ top = top < other.top ? top : other.top;
+ if (left > right || bottom > top) {
+ left = right = bottom = top = 0;
+ }
+}
+void CFX_FloatRect::Union(const CFX_FloatRect& other_rect) {
+ Normalize();
+ CFX_FloatRect other = other_rect;
+ other.Normalize();
+ left = left < other.left ? left : other.left;
+ right = right > other.right ? right : other.right;
+ bottom = bottom < other.bottom ? bottom : other.bottom;
+ top = top > other.top ? top : other.top;
+}
+void CFX_FloatRect::Transform(const CFX_Matrix* pMatrix) {
+ pMatrix->TransformRect(left, right, top, bottom);
+}
+int CFX_FloatRect::Substract4(CFX_FloatRect& s, CFX_FloatRect* pRects) {
+ Normalize();
+ s.Normalize();
+ int nRects = 0;
+ CFX_FloatRect rects[4];
+ if (left < s.left) {
+ rects[nRects].left = left;
+ rects[nRects].right = s.left;
+ rects[nRects].bottom = bottom;
+ rects[nRects].top = top;
+ nRects++;
+ }
+ if (s.left < right && s.top < top) {
+ rects[nRects].left = s.left;
+ rects[nRects].right = right;
+ rects[nRects].bottom = s.top;
+ rects[nRects].top = top;
+ nRects++;
+ }
+ if (s.top > bottom && s.right < right) {
+ rects[nRects].left = s.right;
+ rects[nRects].right = right;
+ rects[nRects].bottom = bottom;
+ rects[nRects].top = s.top;
+ nRects++;
+ }
+ if (s.bottom > bottom) {
+ rects[nRects].left = s.left;
+ rects[nRects].right = s.right;
+ rects[nRects].bottom = bottom;
+ rects[nRects].top = s.bottom;
+ nRects++;
+ }
+ if (nRects == 0) {
+ return 0;
+ }
+ for (int i = 0; i < nRects; i++) {
+ pRects[i] = rects[i];
+ pRects[i].Intersect(*this);
+ }
+ return nRects;
+}
+FX_RECT CFX_FloatRect::GetOutterRect() const {
+ CFX_FloatRect rect1 = *this;
+ FX_RECT rect;
+ rect.left = (int)FXSYS_floor(rect1.left);
+ rect.right = (int)FXSYS_ceil(rect1.right);
+ rect.top = (int)FXSYS_floor(rect1.bottom);
+ rect.bottom = (int)FXSYS_ceil(rect1.top);
+ rect.Normalize();
+ return rect;
+}
+FX_RECT CFX_FloatRect::GetInnerRect() const {
+ CFX_FloatRect rect1 = *this;
+ FX_RECT rect;
+ rect.left = (int)FXSYS_ceil(rect1.left);
+ rect.right = (int)FXSYS_floor(rect1.right);
+ rect.top = (int)FXSYS_ceil(rect1.bottom);
+ rect.bottom = (int)FXSYS_floor(rect1.top);
+ rect.Normalize();
+ return rect;
+}
+static void _MatchFloatRange(FX_FLOAT f1, FX_FLOAT f2, int& i1, int& i2) {
+ int length = (int)FXSYS_ceil(f2 - f1);
+ int i1_1 = (int)FXSYS_floor(f1);
+ int i1_2 = (int)FXSYS_ceil(f1);
+ FX_FLOAT error1 = f1 - i1_1 + (FX_FLOAT)FXSYS_fabs(f2 - i1_1 - length);
+ FX_FLOAT error2 = i1_2 - f1 + (FX_FLOAT)FXSYS_fabs(f2 - i1_2 - length);
+ i1 = (error1 > error2) ? i1_2 : i1_1;
+ i2 = i1 + length;
+}
+FX_RECT CFX_FloatRect::GetClosestRect() const {
+ CFX_FloatRect rect1 = *this;
+ FX_RECT rect;
+ _MatchFloatRange(rect1.left, rect1.right, rect.left, rect.right);
+ _MatchFloatRange(rect1.bottom, rect1.top, rect.top, rect.bottom);
+ rect.Normalize();
+ return rect;
+}
+FX_BOOL CFX_FloatRect::Contains(const CFX_FloatRect& other_rect) const {
+ CFX_FloatRect n1 = *this;
+ n1.Normalize();
+ CFX_FloatRect n2 = other_rect;
+ n2.Normalize();
+ if (n2.left >= n1.left && n2.right <= n1.right && n2.bottom >= n1.bottom &&
+ n2.top <= n1.top) {
+ return TRUE;
+ }
+ return FALSE;
+}
+FX_BOOL CFX_FloatRect::Contains(FX_FLOAT x, FX_FLOAT y) const {
+ CFX_FloatRect n1 = *this;
+ n1.Normalize();
+ return x <= n1.right && x >= n1.left && y <= n1.top && y >= n1.bottom;
+}
+void CFX_FloatRect::UpdateRect(FX_FLOAT x, FX_FLOAT y) {
+ if (left > x) {
+ left = x;
+ }
+ if (right < x) {
+ right = x;
+ }
+ if (bottom > y) {
+ bottom = y;
+ }
+ if (top < y) {
+ top = y;
+ }
+}
+CFX_FloatRect CFX_FloatRect::GetBBox(const CFX_FloatPoint* pPoints,
+ int nPoints) {
+ if (nPoints == 0) {
+ return CFX_FloatRect();
+ }
+ FX_FLOAT min_x = pPoints->x, max_x = pPoints->x, min_y = pPoints->y,
+ max_y = pPoints->y;
+ for (int i = 1; i < nPoints; i++) {
+ if (min_x > pPoints[i].x) {
+ min_x = pPoints[i].x;
+ }
+ if (max_x < pPoints[i].x) {
+ max_x = pPoints[i].x;
+ }
+ if (min_y > pPoints[i].y) {
+ min_y = pPoints[i].y;
+ }
+ if (max_y < pPoints[i].y) {
+ max_y = pPoints[i].y;
+ }
+ }
+ return CFX_FloatRect(min_x, min_y, max_x, max_y);
}
void CFX_Matrix::Set(FX_FLOAT other_a,
FX_FLOAT other_b,
FX_FLOAT other_c,
FX_FLOAT other_d,
FX_FLOAT other_e,
- FX_FLOAT other_f)
-{
- a = other_a;
- b = other_b;
- c = other_c;
- d = other_d;
- e = other_e;
- f = other_f;
-}
-void CFX_Matrix::Set(const FX_FLOAT n[6])
-{
- a = n[0];
- b = n[1];
- c = n[2];
- d = n[3];
- e = n[4];
- f = n[5];
-}
-void CFX_Matrix::SetReverse(const CFX_Matrix &m)
-{
- FX_FLOAT i = m.a * m.d - m.b * m.c;
- if (FXSYS_fabs(i) == 0) {
- return;
- }
- FX_FLOAT j = -i;
- a = m.d / i;
- b = m.b / j;
- c = m.c / j;
- d = m.a / i;
- e = (m.c * m.f - m.d * m.e) / i;
- f = (m.a * m.f - m.b * m.e) / j;
-}
-static void FXCRT_Matrix_Concat(CFX_Matrix &m, const CFX_Matrix &m1, const CFX_Matrix &m2)
-{
- FX_FLOAT aa = m1.a * m2.a + m1.b * m2.c;
- FX_FLOAT bb = m1.a * m2.b + m1.b * m2.d;
- FX_FLOAT cc = m1.c * m2.a + m1.d * m2.c;
- FX_FLOAT dd = m1.c * m2.b + m1.d * m2.d;
- FX_FLOAT ee = m1.e * m2.a + m1.f * m2.c + m2.e;
- FX_FLOAT ff = m1.e * m2.b + m1.f * m2.d + m2.f;
- m.a = aa, m.b = bb, m.c = cc, m.d = dd, m.e = ee, m.f = ff;
-}
-void CFX_Matrix::Concat(FX_FLOAT a, FX_FLOAT b, FX_FLOAT c, FX_FLOAT d, FX_FLOAT e, FX_FLOAT f, FX_BOOL bPrepended)
-{
- CFX_Matrix m;
- m.Set(a, b, c, d, e, f);
- Concat(m, bPrepended);
-}
-void CFX_Matrix::Concat(const CFX_Matrix &m, FX_BOOL bPrepended)
-{
- if (bPrepended) {
- FXCRT_Matrix_Concat(*this, m, *this);
- } else {
- FXCRT_Matrix_Concat(*this, *this, m);
- }
-}
-void CFX_Matrix::ConcatInverse(const CFX_Matrix& src, FX_BOOL bPrepended)
-{
- CFX_Matrix m;
- m.SetReverse(src);
- Concat(m, bPrepended);
-}
-FX_BOOL CFX_Matrix::IsInvertible() const
-{
- return FXSYS_fabs(a * d - b * c) >= 0.0001f;
-}
-FX_BOOL CFX_Matrix::Is90Rotated() const
-{
- return FXSYS_fabs(a * 1000) < FXSYS_fabs(b) && FXSYS_fabs(d * 1000) < FXSYS_fabs(c);
-}
-FX_BOOL CFX_Matrix::IsScaled() const
-{
- return FXSYS_fabs(b * 1000) < FXSYS_fabs(a) && FXSYS_fabs(c * 1000) < FXSYS_fabs(d);
-}
-void CFX_Matrix::Translate(FX_FLOAT x, FX_FLOAT y, FX_BOOL bPrepended)
-{
- if (bPrepended) {
- e += x * a + y * c;
- f += y * d + x * b;
- } else {
- e += x, f += y;
- }
-}
-void CFX_Matrix::Scale(FX_FLOAT sx, FX_FLOAT sy, FX_BOOL bPrepended)
-{
- a *= sx, d *= sy;
- if (bPrepended) {
- b *= sx;
- c *= sy;
- } else {
- b *= sy;
- c *= sx;
- e *= sx;
- f *= sy;
- }
-}
-void CFX_Matrix::Rotate(FX_FLOAT fRadian, FX_BOOL bPrepended)
-{
- FX_FLOAT cosValue = FXSYS_cos(fRadian);
- FX_FLOAT sinValue = FXSYS_sin(fRadian);
- CFX_Matrix m;
- m.Set(cosValue, sinValue, -sinValue, cosValue, 0, 0);
- if (bPrepended) {
- FXCRT_Matrix_Concat(*this, m, *this);
- } else {
- FXCRT_Matrix_Concat(*this, *this, m);
- }
-}
-void CFX_Matrix::RotateAt(FX_FLOAT fRadian, FX_FLOAT dx, FX_FLOAT dy, FX_BOOL bPrepended)
-{
- Translate(dx, dy, bPrepended);
- Rotate(fRadian, bPrepended);
- Translate(-dx, -dy, bPrepended);
-}
-void CFX_Matrix::Shear(FX_FLOAT fAlphaRadian, FX_FLOAT fBetaRadian, FX_BOOL bPrepended)
-{
- CFX_Matrix m;
- m.Set(1, FXSYS_tan(fAlphaRadian), FXSYS_tan(fBetaRadian), 1, 0, 0);
- if (bPrepended) {
- FXCRT_Matrix_Concat(*this, m, *this);
- } else {
- FXCRT_Matrix_Concat(*this, *this, m);
- }
-}
-void CFX_Matrix::MatchRect(const CFX_FloatRect& dest, const CFX_FloatRect& src)
-{
- FX_FLOAT fDiff = src.left - src.right;
- a = FXSYS_fabs(fDiff) < 0.001f ? 1 : (dest.left - dest.right) / fDiff;
- fDiff = src.bottom - src.top;
- d = FXSYS_fabs(fDiff) < 0.001f ? 1 : (dest.bottom - dest.top) / fDiff;
- e = dest.left - src.left * a;
- f = dest.bottom - src.bottom * d;
- b = 0;
- c = 0;
-}
-FX_FLOAT CFX_Matrix::GetXUnit() const
-{
- if (b == 0) {
- return (a > 0 ? a : -a);
- }
- if (a == 0) {
- return (b > 0 ? b : -b);
- }
- return FXSYS_sqrt(a * a + b * b);
-}
-FX_FLOAT CFX_Matrix::GetYUnit() const
-{
- if (c == 0) {
- return (d > 0 ? d : -d);
- }
- if (d == 0) {
- return (c > 0 ? c : -c);
- }
- return FXSYS_sqrt(c * c + d * d);
-}
-void CFX_Matrix::GetUnitRect(CFX_RectF &rect) const
-{
- rect.left = rect.top = 0;
- rect.width = rect.height = 1;
- TransformRect(rect);
-}
-CFX_FloatRect CFX_Matrix::GetUnitRect() const
-{
- CFX_FloatRect rect(0, 0, 1, 1);
- rect.Transform((const CFX_Matrix*)this);
- return rect;
-}
-FX_FLOAT CFX_Matrix::GetUnitArea() const
-{
- FX_FLOAT A = FXSYS_sqrt(a * a + b * b);
- FX_FLOAT B = FXSYS_sqrt(c * c + d * d);
- FX_FLOAT ac = a + c, bd = b + d;
- FX_FLOAT C = FXSYS_sqrt(ac * ac + bd * bd);
- FX_FLOAT P = (A + B + C ) / 2;
- return FXSYS_sqrt(P * (P - A) * (P - B) * (P - C)) * 2;
-}
-FX_FLOAT CFX_Matrix::TransformXDistance(FX_FLOAT dx) const
-{
- FX_FLOAT fx = a * dx, fy = b * dx;
- return FXSYS_sqrt(fx * fx + fy * fy);
-}
-int32_t CFX_Matrix::TransformXDistance(int32_t dx) const
-{
- FX_FLOAT fx = a * dx, fy = b * dx;
- return FXSYS_round(FXSYS_sqrt(fx * fx + fy * fy));
-}
-FX_FLOAT CFX_Matrix::TransformYDistance(FX_FLOAT dy) const
-{
- FX_FLOAT fx = c * dy, fy = d * dy;
- return FXSYS_sqrt(fx * fx + fy * fy);
-}
-int32_t CFX_Matrix::TransformYDistance(int32_t dy) const
-{
- FX_FLOAT fx = c * dy, fy = d * dy;
- return FXSYS_round(FXSYS_sqrt(fx * fx + fy * fy));
-}
-FX_FLOAT CFX_Matrix::TransformDistance(FX_FLOAT dx, FX_FLOAT dy) const
-{
- FX_FLOAT fx = a * dx + c * dy, fy = b * dx + d * dy;
- return FXSYS_sqrt(fx * fx + fy * fy);
-}
-int32_t CFX_Matrix::TransformDistance(int32_t dx, int32_t dy) const
-{
- FX_FLOAT fx = a * dx + c * dy, fy = b * dx + d * dy;
- return FXSYS_round(FXSYS_sqrt(fx * fx + fy * fy));
-}
-FX_FLOAT CFX_Matrix::TransformDistance(FX_FLOAT distance) const
-{
- return distance * (GetXUnit() + GetYUnit()) / 2;
-}
-void CFX_Matrix::TransformVector(CFX_VectorF &v) const
-{
- FX_FLOAT fx = a * v.x + c * v.y;
- FX_FLOAT fy = b * v.x + d * v.y;
- v.x = fx, v.y = fy;
-}
-void CFX_Matrix::TransformVector(CFX_Vector &v) const
-{
- FX_FLOAT fx = a * v.x + c * v.y;
- FX_FLOAT fy = b * v.x + d * v.y;
- v.x = FXSYS_round(fx);
- v.y = FXSYS_round(fy);
-}
-void CFX_Matrix::TransformPoints(CFX_Point *points, int32_t iCount) const
-{
- FXSYS_assert(iCount > 0);
- FX_FLOAT fx, fy;
- for (int32_t i = 0; i < iCount; i ++) {
- fx = a * points->x + c * points->y + e;
- fy = b * points->x + d * points->y + f;
- points->x = FXSYS_round(fx);
- points->y = FXSYS_round(fy);
- points ++;
- }
-}
-void CFX_Matrix::TransformPoints(CFX_PointF *points, int32_t iCount) const
-{
- FXSYS_assert(iCount > 0);
- FX_FLOAT fx, fy;
- for (int32_t i = 0; i < iCount; i ++) {
- fx = a * points->x + c * points->y + e;
- fy = b * points->x + d * points->y + f;
- points->x = fx, points->y = fy;
- points ++;
- }
-}
-void CFX_Matrix::TransformPoint(FX_FLOAT &x, FX_FLOAT &y) const
-{
- FX_FLOAT fx = a * x + c * y + e;
- FX_FLOAT fy = b * x + d * y + f;
- x = fx, y = fy;
-}
-void CFX_Matrix::TransformPoint(int32_t &x, int32_t &y) const
-{
- FX_FLOAT fx = a * x + c * y + e;
- FX_FLOAT fy = b * x + d * y + f;
- x = FXSYS_round(fx);
- y = FXSYS_round(fy);
-}
-void CFX_Matrix::TransformRect(CFX_RectF &rect) const
-{
- FX_FLOAT right = rect.right(), bottom = rect.bottom();
- TransformRect(rect.left, right, bottom, rect.top);
- rect.width = right - rect.left;
- rect.height = bottom - rect.top;
-}
-void CFX_Matrix::TransformRect(CFX_Rect &rect) const
-{
- FX_FLOAT left = (FX_FLOAT)rect.left;
- FX_FLOAT top = (FX_FLOAT)rect.bottom();
- FX_FLOAT right = (FX_FLOAT)rect.right();
- FX_FLOAT bottom = (FX_FLOAT)rect.top;
- TransformRect(left, right, top, bottom);
- rect.left = FXSYS_round(left);
- rect.top = FXSYS_round(bottom);
- rect.width = FXSYS_round(right - left);
- rect.height = FXSYS_round(top - bottom);
-}
-void CFX_Matrix::TransformRect(FX_FLOAT& left, FX_FLOAT& right, FX_FLOAT& top, FX_FLOAT& bottom) const
-{
- FX_FLOAT x[4], y[4];
- x[0] = left;
- y[0] = top;
- x[1] = left;
- y[1] = bottom;
- x[2] = right;
- y[2] = top;
- x[3] = right;
- y[3] = bottom;
- int i;
- for (i = 0; i < 4; i ++) {
- Transform(x[i], y[i], x[i], y[i]);
- }
- right = left = x[0];
- top = bottom = y[0];
- for (i = 1; i < 4; i ++) {
- if (right < x[i]) {
- right = x[i];
- }
- if (left > x[i]) {
- left = x[i];
- }
- if (top < y[i]) {
- top = y[i];
- }
- if (bottom > y[i]) {
- bottom = y[i];
- }
- }
+ FX_FLOAT other_f) {
+ a = other_a;
+ b = other_b;
+ c = other_c;
+ d = other_d;
+ e = other_e;
+ f = other_f;
+}
+void CFX_Matrix::Set(const FX_FLOAT n[6]) {
+ a = n[0];
+ b = n[1];
+ c = n[2];
+ d = n[3];
+ e = n[4];
+ f = n[5];
+}
+void CFX_Matrix::SetReverse(const CFX_Matrix& m) {
+ FX_FLOAT i = m.a * m.d - m.b * m.c;
+ if (FXSYS_fabs(i) == 0) {
+ return;
+ }
+ FX_FLOAT j = -i;
+ a = m.d / i;
+ b = m.b / j;
+ c = m.c / j;
+ d = m.a / i;
+ e = (m.c * m.f - m.d * m.e) / i;
+ f = (m.a * m.f - m.b * m.e) / j;
+}
+static void FXCRT_Matrix_Concat(CFX_Matrix& m,
+ const CFX_Matrix& m1,
+ const CFX_Matrix& m2) {
+ FX_FLOAT aa = m1.a * m2.a + m1.b * m2.c;
+ FX_FLOAT bb = m1.a * m2.b + m1.b * m2.d;
+ FX_FLOAT cc = m1.c * m2.a + m1.d * m2.c;
+ FX_FLOAT dd = m1.c * m2.b + m1.d * m2.d;
+ FX_FLOAT ee = m1.e * m2.a + m1.f * m2.c + m2.e;
+ FX_FLOAT ff = m1.e * m2.b + m1.f * m2.d + m2.f;
+ m.a = aa, m.b = bb, m.c = cc, m.d = dd, m.e = ee, m.f = ff;
+}
+void CFX_Matrix::Concat(FX_FLOAT a,
+ FX_FLOAT b,
+ FX_FLOAT c,
+ FX_FLOAT d,
+ FX_FLOAT e,
+ FX_FLOAT f,
+ FX_BOOL bPrepended) {
+ CFX_Matrix m;
+ m.Set(a, b, c, d, e, f);
+ Concat(m, bPrepended);
+}
+void CFX_Matrix::Concat(const CFX_Matrix& m, FX_BOOL bPrepended) {
+ if (bPrepended) {
+ FXCRT_Matrix_Concat(*this, m, *this);
+ } else {
+ FXCRT_Matrix_Concat(*this, *this, m);
+ }
+}
+void CFX_Matrix::ConcatInverse(const CFX_Matrix& src, FX_BOOL bPrepended) {
+ CFX_Matrix m;
+ m.SetReverse(src);
+ Concat(m, bPrepended);
+}
+FX_BOOL CFX_Matrix::IsInvertible() const {
+ return FXSYS_fabs(a * d - b * c) >= 0.0001f;
+}
+FX_BOOL CFX_Matrix::Is90Rotated() const {
+ return FXSYS_fabs(a * 1000) < FXSYS_fabs(b) &&
+ FXSYS_fabs(d * 1000) < FXSYS_fabs(c);
+}
+FX_BOOL CFX_Matrix::IsScaled() const {
+ return FXSYS_fabs(b * 1000) < FXSYS_fabs(a) &&
+ FXSYS_fabs(c * 1000) < FXSYS_fabs(d);
+}
+void CFX_Matrix::Translate(FX_FLOAT x, FX_FLOAT y, FX_BOOL bPrepended) {
+ if (bPrepended) {
+ e += x * a + y * c;
+ f += y * d + x * b;
+ } else {
+ e += x, f += y;
+ }
+}
+void CFX_Matrix::Scale(FX_FLOAT sx, FX_FLOAT sy, FX_BOOL bPrepended) {
+ a *= sx, d *= sy;
+ if (bPrepended) {
+ b *= sx;
+ c *= sy;
+ } else {
+ b *= sy;
+ c *= sx;
+ e *= sx;
+ f *= sy;
+ }
+}
+void CFX_Matrix::Rotate(FX_FLOAT fRadian, FX_BOOL bPrepended) {
+ FX_FLOAT cosValue = FXSYS_cos(fRadian);
+ FX_FLOAT sinValue = FXSYS_sin(fRadian);
+ CFX_Matrix m;
+ m.Set(cosValue, sinValue, -sinValue, cosValue, 0, 0);
+ if (bPrepended) {
+ FXCRT_Matrix_Concat(*this, m, *this);
+ } else {
+ FXCRT_Matrix_Concat(*this, *this, m);
+ }
+}
+void CFX_Matrix::RotateAt(FX_FLOAT fRadian,
+ FX_FLOAT dx,
+ FX_FLOAT dy,
+ FX_BOOL bPrepended) {
+ Translate(dx, dy, bPrepended);
+ Rotate(fRadian, bPrepended);
+ Translate(-dx, -dy, bPrepended);
+}
+void CFX_Matrix::Shear(FX_FLOAT fAlphaRadian,
+ FX_FLOAT fBetaRadian,
+ FX_BOOL bPrepended) {
+ CFX_Matrix m;
+ m.Set(1, FXSYS_tan(fAlphaRadian), FXSYS_tan(fBetaRadian), 1, 0, 0);
+ if (bPrepended) {
+ FXCRT_Matrix_Concat(*this, m, *this);
+ } else {
+ FXCRT_Matrix_Concat(*this, *this, m);
+ }
+}
+void CFX_Matrix::MatchRect(const CFX_FloatRect& dest,
+ const CFX_FloatRect& src) {
+ FX_FLOAT fDiff = src.left - src.right;
+ a = FXSYS_fabs(fDiff) < 0.001f ? 1 : (dest.left - dest.right) / fDiff;
+ fDiff = src.bottom - src.top;
+ d = FXSYS_fabs(fDiff) < 0.001f ? 1 : (dest.bottom - dest.top) / fDiff;
+ e = dest.left - src.left * a;
+ f = dest.bottom - src.bottom * d;
+ b = 0;
+ c = 0;
+}
+FX_FLOAT CFX_Matrix::GetXUnit() const {
+ if (b == 0) {
+ return (a > 0 ? a : -a);
+ }
+ if (a == 0) {
+ return (b > 0 ? b : -b);
+ }
+ return FXSYS_sqrt(a * a + b * b);
+}
+FX_FLOAT CFX_Matrix::GetYUnit() const {
+ if (c == 0) {
+ return (d > 0 ? d : -d);
+ }
+ if (d == 0) {
+ return (c > 0 ? c : -c);
+ }
+ return FXSYS_sqrt(c * c + d * d);
+}
+void CFX_Matrix::GetUnitRect(CFX_RectF& rect) const {
+ rect.left = rect.top = 0;
+ rect.width = rect.height = 1;
+ TransformRect(rect);
+}
+CFX_FloatRect CFX_Matrix::GetUnitRect() const {
+ CFX_FloatRect rect(0, 0, 1, 1);
+ rect.Transform((const CFX_Matrix*)this);
+ return rect;
+}
+FX_FLOAT CFX_Matrix::GetUnitArea() const {
+ FX_FLOAT A = FXSYS_sqrt(a * a + b * b);
+ FX_FLOAT B = FXSYS_sqrt(c * c + d * d);
+ FX_FLOAT ac = a + c, bd = b + d;
+ FX_FLOAT C = FXSYS_sqrt(ac * ac + bd * bd);
+ FX_FLOAT P = (A + B + C) / 2;
+ return FXSYS_sqrt(P * (P - A) * (P - B) * (P - C)) * 2;
+}
+FX_FLOAT CFX_Matrix::TransformXDistance(FX_FLOAT dx) const {
+ FX_FLOAT fx = a * dx, fy = b * dx;
+ return FXSYS_sqrt(fx * fx + fy * fy);
+}
+int32_t CFX_Matrix::TransformXDistance(int32_t dx) const {
+ FX_FLOAT fx = a * dx, fy = b * dx;
+ return FXSYS_round(FXSYS_sqrt(fx * fx + fy * fy));
+}
+FX_FLOAT CFX_Matrix::TransformYDistance(FX_FLOAT dy) const {
+ FX_FLOAT fx = c * dy, fy = d * dy;
+ return FXSYS_sqrt(fx * fx + fy * fy);
+}
+int32_t CFX_Matrix::TransformYDistance(int32_t dy) const {
+ FX_FLOAT fx = c * dy, fy = d * dy;
+ return FXSYS_round(FXSYS_sqrt(fx * fx + fy * fy));
+}
+FX_FLOAT CFX_Matrix::TransformDistance(FX_FLOAT dx, FX_FLOAT dy) const {
+ FX_FLOAT fx = a * dx + c * dy, fy = b * dx + d * dy;
+ return FXSYS_sqrt(fx * fx + fy * fy);
+}
+int32_t CFX_Matrix::TransformDistance(int32_t dx, int32_t dy) const {
+ FX_FLOAT fx = a * dx + c * dy, fy = b * dx + d * dy;
+ return FXSYS_round(FXSYS_sqrt(fx * fx + fy * fy));
+}
+FX_FLOAT CFX_Matrix::TransformDistance(FX_FLOAT distance) const {
+ return distance * (GetXUnit() + GetYUnit()) / 2;
+}
+void CFX_Matrix::TransformVector(CFX_VectorF& v) const {
+ FX_FLOAT fx = a * v.x + c * v.y;
+ FX_FLOAT fy = b * v.x + d * v.y;
+ v.x = fx, v.y = fy;
+}
+void CFX_Matrix::TransformVector(CFX_Vector& v) const {
+ FX_FLOAT fx = a * v.x + c * v.y;
+ FX_FLOAT fy = b * v.x + d * v.y;
+ v.x = FXSYS_round(fx);
+ v.y = FXSYS_round(fy);
+}
+void CFX_Matrix::TransformPoints(CFX_Point* points, int32_t iCount) const {
+ FXSYS_assert(iCount > 0);
+ FX_FLOAT fx, fy;
+ for (int32_t i = 0; i < iCount; i++) {
+ fx = a * points->x + c * points->y + e;
+ fy = b * points->x + d * points->y + f;
+ points->x = FXSYS_round(fx);
+ points->y = FXSYS_round(fy);
+ points++;
+ }
+}
+void CFX_Matrix::TransformPoints(CFX_PointF* points, int32_t iCount) const {
+ FXSYS_assert(iCount > 0);
+ FX_FLOAT fx, fy;
+ for (int32_t i = 0; i < iCount; i++) {
+ fx = a * points->x + c * points->y + e;
+ fy = b * points->x + d * points->y + f;
+ points->x = fx, points->y = fy;
+ points++;
+ }
+}
+void CFX_Matrix::TransformPoint(FX_FLOAT& x, FX_FLOAT& y) const {
+ FX_FLOAT fx = a * x + c * y + e;
+ FX_FLOAT fy = b * x + d * y + f;
+ x = fx, y = fy;
+}
+void CFX_Matrix::TransformPoint(int32_t& x, int32_t& y) const {
+ FX_FLOAT fx = a * x + c * y + e;
+ FX_FLOAT fy = b * x + d * y + f;
+ x = FXSYS_round(fx);
+ y = FXSYS_round(fy);
+}
+void CFX_Matrix::TransformRect(CFX_RectF& rect) const {
+ FX_FLOAT right = rect.right(), bottom = rect.bottom();
+ TransformRect(rect.left, right, bottom, rect.top);
+ rect.width = right - rect.left;
+ rect.height = bottom - rect.top;
+}
+void CFX_Matrix::TransformRect(CFX_Rect& rect) const {
+ FX_FLOAT left = (FX_FLOAT)rect.left;
+ FX_FLOAT top = (FX_FLOAT)rect.bottom();
+ FX_FLOAT right = (FX_FLOAT)rect.right();
+ FX_FLOAT bottom = (FX_FLOAT)rect.top;
+ TransformRect(left, right, top, bottom);
+ rect.left = FXSYS_round(left);
+ rect.top = FXSYS_round(bottom);
+ rect.width = FXSYS_round(right - left);
+ rect.height = FXSYS_round(top - bottom);
+}
+void CFX_Matrix::TransformRect(FX_FLOAT& left,
+ FX_FLOAT& right,
+ FX_FLOAT& top,
+ FX_FLOAT& bottom) const {
+ FX_FLOAT x[4], y[4];
+ x[0] = left;
+ y[0] = top;
+ x[1] = left;
+ y[1] = bottom;
+ x[2] = right;
+ y[2] = top;
+ x[3] = right;
+ y[3] = bottom;
+ int i;
+ for (i = 0; i < 4; i++) {
+ Transform(x[i], y[i], x[i], y[i]);
+ }
+ right = left = x[0];
+ top = bottom = y[0];
+ for (i = 1; i < 4; i++) {
+ if (right < x[i]) {
+ right = x[i];
+ }
+ if (left > x[i]) {
+ left = x[i];
+ }
+ if (top < y[i]) {
+ top = y[i];
+ }
+ if (bottom > y[i]) {
+ bottom = y[i];
+ }
+ }
}
diff --git a/core/src/fxcrt/fx_basic_gcc.cpp b/core/src/fxcrt/fx_basic_gcc.cpp
index 2497c74a8e..bf3d61524e 100644
--- a/core/src/fxcrt/fx_basic_gcc.cpp
+++ b/core/src/fxcrt/fx_basic_gcc.cpp
@@ -10,80 +10,72 @@
#include "../../include/fxcrt/fx_string.h"
template <class T, class STR_T>
-T FXSYS_StrToInt(STR_T str)
-{
- FX_BOOL neg = FALSE;
- if (str == NULL) {
- return 0;
- }
- if (*str == '-') {
- neg = TRUE;
- str ++;
- }
- T num = 0;
- while (*str) {
- if ((*str) < '0' || (*str) > '9') {
- break;
- }
- if (num > (std::numeric_limits<T>::max() - 9) / 10) {
- break;
- }
- num = num * 10 + (*str) - '0';
- str ++;
- }
- return neg ? -num : num;
+T FXSYS_StrToInt(STR_T str) {
+ FX_BOOL neg = FALSE;
+ if (str == NULL) {
+ return 0;
+ }
+ if (*str == '-') {
+ neg = TRUE;
+ str++;
+ }
+ T num = 0;
+ while (*str) {
+ if ((*str) < '0' || (*str) > '9') {
+ break;
+ }
+ if (num > (std::numeric_limits<T>::max() - 9) / 10) {
+ break;
+ }
+ num = num * 10 + (*str) - '0';
+ str++;
+ }
+ return neg ? -num : num;
}
template <typename T, typename STR_T>
-STR_T FXSYS_IntToStr(T value, STR_T string, int radix)
-{
- int i = 0;
- if (value < 0) {
- string[i++] = '-';
- value = -value;
- } else if (value == 0) {
- string[0] = '0';
- string[1] = 0;
- return string;
- }
- int digits = 1;
- T order = value / 10;
- while(order > 0) {
- digits++;
- order = order / 10;
- }
- for (int d = digits - 1; d > -1; d--) {
- string[d + i] = "0123456789abcdef"[value % 10];
- value /= 10;
- }
- string[digits + i] = 0;
+STR_T FXSYS_IntToStr(T value, STR_T string, int radix) {
+ int i = 0;
+ if (value < 0) {
+ string[i++] = '-';
+ value = -value;
+ } else if (value == 0) {
+ string[0] = '0';
+ string[1] = 0;
return string;
+ }
+ int digits = 1;
+ T order = value / 10;
+ while (order > 0) {
+ digits++;
+ order = order / 10;
+ }
+ for (int d = digits - 1; d > -1; d--) {
+ string[d + i] = "0123456789abcdef"[value % 10];
+ value /= 10;
+ }
+ string[digits + i] = 0;
+ return string;
}
#ifdef __cplusplus
extern "C" {
#endif
-int32_t FXSYS_atoi(const FX_CHAR* str)
-{
- return FXSYS_StrToInt<int32_t, const FX_CHAR*>(str);
+int32_t FXSYS_atoi(const FX_CHAR* str) {
+ return FXSYS_StrToInt<int32_t, const FX_CHAR*>(str);
}
-int32_t FXSYS_wtoi(const FX_WCHAR* str)
-{
- return FXSYS_StrToInt<int32_t, const FX_WCHAR*>(str);
+int32_t FXSYS_wtoi(const FX_WCHAR* str) {
+ return FXSYS_StrToInt<int32_t, const FX_WCHAR*>(str);
}
-int64_t FXSYS_atoi64(const FX_CHAR* str)
-{
- return FXSYS_StrToInt<int64_t, const FX_CHAR*>(str);
+int64_t FXSYS_atoi64(const FX_CHAR* str) {
+ return FXSYS_StrToInt<int64_t, const FX_CHAR*>(str);
}
-int64_t FXSYS_wtoi64(const FX_WCHAR* str)
-{
- return FXSYS_StrToInt<int64_t, const FX_WCHAR*>(str);
+int64_t FXSYS_wtoi64(const FX_WCHAR* str) {
+ return FXSYS_StrToInt<int64_t, const FX_WCHAR*>(str);
}
-const FX_CHAR* FXSYS_i64toa(int64_t value, FX_CHAR* str, int radix)
-{
- return FXSYS_IntToStr<int64_t, FX_CHAR*>(value, str, radix);
+const FX_CHAR* FXSYS_i64toa(int64_t value, FX_CHAR* str, int radix) {
+ return FXSYS_IntToStr<int64_t, FX_CHAR*>(value, str, radix);
}
-const FX_WCHAR* FXSYS_i64tow(int64_t value, FX_WCHAR* str, int radix)
-{
- return FXSYS_IntToStr<int64_t, FX_WCHAR*>(value, str, radix);
+const FX_WCHAR* FXSYS_i64tow(int64_t value, FX_WCHAR* str, int radix) {
+ return FXSYS_IntToStr<int64_t, FX_WCHAR*>(value, str, radix);
}
#ifdef __cplusplus
}
@@ -92,22 +84,22 @@ const FX_WCHAR* FXSYS_i64tow(int64_t value, FX_WCHAR* str, int radix)
#ifdef __cplusplus
extern "C" {
#endif
-int FXSYS_GetACP()
-{
- return 0;
-}
-FX_DWORD FXSYS_GetFullPathName(const FX_CHAR* filename, FX_DWORD buflen, FX_CHAR* buf, FX_CHAR** filepart)
-{
- int srclen = FXSYS_strlen(filename);
- if (buf == NULL || (int)buflen < srclen + 1) {
- return srclen + 1;
- }
- FXSYS_strcpy(buf, filename);
- return srclen;
-}
-FX_DWORD FXSYS_GetModuleFileName(void* hModule, char* buf, FX_DWORD bufsize)
-{
- return (FX_DWORD) - 1;
+int FXSYS_GetACP() {
+ return 0;
+}
+FX_DWORD FXSYS_GetFullPathName(const FX_CHAR* filename,
+ FX_DWORD buflen,
+ FX_CHAR* buf,
+ FX_CHAR** filepart) {
+ int srclen = FXSYS_strlen(filename);
+ if (buf == NULL || (int)buflen < srclen + 1) {
+ return srclen + 1;
+ }
+ FXSYS_strcpy(buf, filename);
+ return srclen;
+}
+FX_DWORD FXSYS_GetModuleFileName(void* hModule, char* buf, FX_DWORD bufsize) {
+ return (FX_DWORD)-1;
}
#ifdef __cplusplus
}
@@ -117,87 +109,80 @@ FX_DWORD FXSYS_GetModuleFileName(void* hModule, char* buf, FX_DWORD bufsize)
#ifdef __cplusplus
extern "C" {
#endif
-FXSYS_FILE* FXSYS_wfopen(const FX_WCHAR* filename, const FX_WCHAR* mode)
-{
- return FXSYS_fopen(CFX_ByteString::FromUnicode(filename), CFX_ByteString::FromUnicode(mode));
-}
-char* FXSYS_strlwr(char* str)
-{
- if (str == NULL) {
- return NULL;
- }
- char* s = str;
- while (*str) {
- *str = FXSYS_tolower(*str);
- str ++;
- }
- return s;
-}
-char* FXSYS_strupr(char* str)
-{
- if (str == NULL) {
- return NULL;
- }
- char* s = str;
- while (*str) {
- *str = FXSYS_toupper(*str);
- str ++;
- }
- return s;
-}
-FX_WCHAR* FXSYS_wcslwr(FX_WCHAR* str)
-{
- if (str == NULL) {
- return NULL;
- }
- FX_WCHAR* s = str;
- while (*str) {
- *str = FXSYS_tolower(*str);
- str ++;
- }
- return s;
-}
-FX_WCHAR* FXSYS_wcsupr(FX_WCHAR* str)
-{
- if (str == NULL) {
- return NULL;
- }
- FX_WCHAR* s = str;
- while (*str) {
- *str = FXSYS_toupper(*str);
- str ++;
- }
- return s;
-}
-int FXSYS_stricmp(const char*dst, const char*src)
-{
- int f, l;
- do {
- if ( ((f = (unsigned char)(*(dst++))) >= 'A') && (f <= 'Z') ) {
- f -= ('A' - 'a');
- }
- if ( ((l = (unsigned char)(*(src++))) >= 'A') && (l <= 'Z') ) {
- l -= ('A' - 'a');
- }
- } while ( f && (f == l) );
- return(f - l);
-}
-int FXSYS_wcsicmp(const FX_WCHAR *dst, const FX_WCHAR *src)
-{
- FX_WCHAR f, l;
- do {
- if ( ((f = (FX_WCHAR)(*(dst++))) >= 'A') && (f <= 'Z') ) {
- f -= ('A' - 'a');
- }
- if ( ((l = (FX_WCHAR)(*(src++))) >= 'A') && (l <= 'Z') ) {
- l -= ('A' - 'a');
- }
- } while ( f && (f == l) );
- return(f - l);
-}
-char* FXSYS_itoa(int value, char* string, int radix)
-{
- return FXSYS_IntToStr<int32_t, FX_CHAR*>(value, string, radix);
+FXSYS_FILE* FXSYS_wfopen(const FX_WCHAR* filename, const FX_WCHAR* mode) {
+ return FXSYS_fopen(CFX_ByteString::FromUnicode(filename),
+ CFX_ByteString::FromUnicode(mode));
+}
+char* FXSYS_strlwr(char* str) {
+ if (str == NULL) {
+ return NULL;
+ }
+ char* s = str;
+ while (*str) {
+ *str = FXSYS_tolower(*str);
+ str++;
+ }
+ return s;
+}
+char* FXSYS_strupr(char* str) {
+ if (str == NULL) {
+ return NULL;
+ }
+ char* s = str;
+ while (*str) {
+ *str = FXSYS_toupper(*str);
+ str++;
+ }
+ return s;
+}
+FX_WCHAR* FXSYS_wcslwr(FX_WCHAR* str) {
+ if (str == NULL) {
+ return NULL;
+ }
+ FX_WCHAR* s = str;
+ while (*str) {
+ *str = FXSYS_tolower(*str);
+ str++;
+ }
+ return s;
+}
+FX_WCHAR* FXSYS_wcsupr(FX_WCHAR* str) {
+ if (str == NULL) {
+ return NULL;
+ }
+ FX_WCHAR* s = str;
+ while (*str) {
+ *str = FXSYS_toupper(*str);
+ str++;
+ }
+ return s;
+}
+int FXSYS_stricmp(const char* dst, const char* src) {
+ int f, l;
+ do {
+ if (((f = (unsigned char)(*(dst++))) >= 'A') && (f <= 'Z')) {
+ f -= ('A' - 'a');
+ }
+ if (((l = (unsigned char)(*(src++))) >= 'A') && (l <= 'Z')) {
+ l -= ('A' - 'a');
+ }
+ } while (f && (f == l));
+ return (f - l);
+}
+int FXSYS_wcsicmp(const FX_WCHAR* dst, const FX_WCHAR* src) {
+ FX_WCHAR f, l;
+ do {
+ if (((f = (FX_WCHAR)(*(dst++))) >= 'A') && (f <= 'Z')) {
+ f -= ('A' - 'a');
+ }
+ if (((l = (FX_WCHAR)(*(src++))) >= 'A') && (l <= 'Z')) {
+ l -= ('A' - 'a');
+ }
+ } while (f && (f == l));
+ return (f - l);
+}
+char* FXSYS_itoa(int value, char* string, int radix) {
+ return FXSYS_IntToStr<int32_t, FX_CHAR*>(value, string, radix);
}
#ifdef __cplusplus
}
@@ -207,31 +192,39 @@ char* FXSYS_itoa(int value, char* string, int radix)
#ifdef __cplusplus
extern "C" {
#endif
-int FXSYS_WideCharToMultiByte(FX_DWORD codepage, FX_DWORD dwFlags, const FX_WCHAR* wstr, int wlen,
- FX_CHAR* buf, int buflen, const FX_CHAR* default_str, int* pUseDefault)
-{
- int len = 0;
- for (int i = 0; i < wlen; i ++) {
- if (wstr[i] < 0x100) {
- if (buf && len < buflen) {
- buf[len] = (FX_CHAR)wstr[i];
- }
- len ++;
- }
- }
- return len;
-}
-int FXSYS_MultiByteToWideChar(FX_DWORD codepage, FX_DWORD dwFlags, const FX_CHAR* bstr, int blen,
- FX_WCHAR* buf, int buflen)
-{
- int wlen = 0;
- for (int i = 0; i < blen; i ++) {
- if (buf && wlen < buflen) {
- buf[wlen] = bstr[i];
- }
- wlen ++;
- }
- return wlen;
+int FXSYS_WideCharToMultiByte(FX_DWORD codepage,
+ FX_DWORD dwFlags,
+ const FX_WCHAR* wstr,
+ int wlen,
+ FX_CHAR* buf,
+ int buflen,
+ const FX_CHAR* default_str,
+ int* pUseDefault) {
+ int len = 0;
+ for (int i = 0; i < wlen; i++) {
+ if (wstr[i] < 0x100) {
+ if (buf && len < buflen) {
+ buf[len] = (FX_CHAR)wstr[i];
+ }
+ len++;
+ }
+ }
+ return len;
+}
+int FXSYS_MultiByteToWideChar(FX_DWORD codepage,
+ FX_DWORD dwFlags,
+ const FX_CHAR* bstr,
+ int blen,
+ FX_WCHAR* buf,
+ int buflen) {
+ int wlen = 0;
+ for (int i = 0; i < blen; i++) {
+ if (buf && wlen < buflen) {
+ buf[wlen] = bstr[i];
+ }
+ wlen++;
+ }
+ return wlen;
}
#ifdef __cplusplus
}
diff --git a/core/src/fxcrt/fx_basic_list.cpp b/core/src/fxcrt/fx_basic_list.cpp
index c9619f99b7..068aef2688 100644
--- a/core/src/fxcrt/fx_basic_list.cpp
+++ b/core/src/fxcrt/fx_basic_list.cpp
@@ -7,134 +7,123 @@
#include "../../include/fxcrt/fx_basic.h"
#include "plex.h"
CFX_PtrList::CFX_PtrList(int nBlockSize)
- : m_pNodeHead(NULL)
- , m_pNodeTail(NULL)
- , m_nCount(0)
- , m_pNodeFree(NULL)
- , m_pBlocks(NULL)
- , m_nBlockSize(nBlockSize)
-{
+ : m_pNodeHead(NULL),
+ m_pNodeTail(NULL),
+ m_nCount(0),
+ m_pNodeFree(NULL),
+ m_pBlocks(NULL),
+ m_nBlockSize(nBlockSize) {}
+FX_POSITION CFX_PtrList::AddTail(void* newElement) {
+ CNode* pNewNode = NewNode(m_pNodeTail, NULL);
+ pNewNode->data = newElement;
+ if (m_pNodeTail != NULL) {
+ m_pNodeTail->pNext = pNewNode;
+ } else {
+ m_pNodeHead = pNewNode;
+ }
+ m_pNodeTail = pNewNode;
+ return (FX_POSITION)pNewNode;
}
-FX_POSITION CFX_PtrList::AddTail(void* newElement)
-{
- CNode* pNewNode = NewNode(m_pNodeTail, NULL);
- pNewNode->data = newElement;
- if (m_pNodeTail != NULL) {
- m_pNodeTail->pNext = pNewNode;
- } else {
- m_pNodeHead = pNewNode;
- }
+FX_POSITION CFX_PtrList::AddHead(void* newElement) {
+ CNode* pNewNode = NewNode(NULL, m_pNodeHead);
+ pNewNode->data = newElement;
+ if (m_pNodeHead != NULL) {
+ m_pNodeHead->pPrev = pNewNode;
+ } else {
m_pNodeTail = pNewNode;
- return (FX_POSITION) pNewNode;
+ }
+ m_pNodeHead = pNewNode;
+ return (FX_POSITION)pNewNode;
}
-FX_POSITION CFX_PtrList::AddHead(void* newElement)
-{
- CNode* pNewNode = NewNode(NULL, m_pNodeHead);
- pNewNode->data = newElement;
- if (m_pNodeHead != NULL) {
- m_pNodeHead->pPrev = pNewNode;
- } else {
- m_pNodeTail = pNewNode;
- }
- m_pNodeHead = pNewNode;
- return (FX_POSITION) pNewNode;
+FX_POSITION CFX_PtrList::InsertAfter(FX_POSITION position, void* newElement) {
+ if (position == NULL) {
+ return AddTail(newElement);
+ }
+ CNode* pOldNode = (CNode*)position;
+ CNode* pNewNode = NewNode(pOldNode, pOldNode->pNext);
+ pNewNode->data = newElement;
+ if (pOldNode->pNext != NULL) {
+ pOldNode->pNext->pPrev = pNewNode;
+ } else {
+ m_pNodeTail = pNewNode;
+ }
+ pOldNode->pNext = pNewNode;
+ return (FX_POSITION)pNewNode;
}
-FX_POSITION CFX_PtrList::InsertAfter(FX_POSITION position, void* newElement)
-{
- if (position == NULL) {
- return AddTail(newElement);
- }
- CNode* pOldNode = (CNode*) position;
- CNode* pNewNode = NewNode(pOldNode, pOldNode->pNext);
- pNewNode->data = newElement;
- if (pOldNode->pNext != NULL) {
- pOldNode->pNext->pPrev = pNewNode;
- } else {
- m_pNodeTail = pNewNode;
- }
- pOldNode->pNext = pNewNode;
- return (FX_POSITION) pNewNode;
+void CFX_PtrList::RemoveAt(FX_POSITION position) {
+ CNode* pOldNode = (CNode*)position;
+ if (pOldNode == m_pNodeHead) {
+ m_pNodeHead = pOldNode->pNext;
+ } else {
+ pOldNode->pPrev->pNext = pOldNode->pNext;
+ }
+ if (pOldNode == m_pNodeTail) {
+ m_pNodeTail = pOldNode->pPrev;
+ } else {
+ pOldNode->pNext->pPrev = pOldNode->pPrev;
+ }
+ FreeNode(pOldNode);
}
-void CFX_PtrList::RemoveAt(FX_POSITION position)
-{
- CNode* pOldNode = (CNode*) position;
- if (pOldNode == m_pNodeHead) {
- m_pNodeHead = pOldNode->pNext;
- } else {
- pOldNode->pPrev->pNext = pOldNode->pNext;
- }
- if (pOldNode == m_pNodeTail) {
- m_pNodeTail = pOldNode->pPrev;
- } else {
- pOldNode->pNext->pPrev = pOldNode->pPrev;
- }
- FreeNode(pOldNode);
-}
-void CFX_PtrList::FreeNode(CFX_PtrList::CNode* pNode)
-{
- pNode->pNext = m_pNodeFree;
- m_pNodeFree = pNode;
- m_nCount--;
- if (m_nCount == 0) {
- RemoveAll();
- }
+void CFX_PtrList::FreeNode(CFX_PtrList::CNode* pNode) {
+ pNode->pNext = m_pNodeFree;
+ m_pNodeFree = pNode;
+ m_nCount--;
+ if (m_nCount == 0) {
+ RemoveAll();
+ }
}
-void CFX_PtrList::RemoveAll()
-{
- m_nCount = 0;
- m_pNodeHead = m_pNodeTail = m_pNodeFree = NULL;
- m_pBlocks->FreeDataChain();
- m_pBlocks = NULL;
+void CFX_PtrList::RemoveAll() {
+ m_nCount = 0;
+ m_pNodeHead = m_pNodeTail = m_pNodeFree = NULL;
+ m_pBlocks->FreeDataChain();
+ m_pBlocks = NULL;
}
-CFX_PtrList::CNode*
-CFX_PtrList::NewNode(CFX_PtrList::CNode* pPrev, CFX_PtrList::CNode* pNext)
-{
- if (m_pNodeFree == NULL) {
- CFX_Plex* pNewBlock = CFX_Plex::Create(m_pBlocks, m_nBlockSize, sizeof(CNode));
- CNode* pNode = (CNode*)pNewBlock->data();
- pNode += m_nBlockSize - 1;
- for (int i = m_nBlockSize - 1; i >= 0; i--, pNode--) {
- pNode->pNext = m_pNodeFree;
- m_pNodeFree = pNode;
- }
+CFX_PtrList::CNode* CFX_PtrList::NewNode(CFX_PtrList::CNode* pPrev,
+ CFX_PtrList::CNode* pNext) {
+ if (m_pNodeFree == NULL) {
+ CFX_Plex* pNewBlock =
+ CFX_Plex::Create(m_pBlocks, m_nBlockSize, sizeof(CNode));
+ CNode* pNode = (CNode*)pNewBlock->data();
+ pNode += m_nBlockSize - 1;
+ for (int i = m_nBlockSize - 1; i >= 0; i--, pNode--) {
+ pNode->pNext = m_pNodeFree;
+ m_pNodeFree = pNode;
}
- ASSERT(m_pNodeFree != NULL);
- CFX_PtrList::CNode* pNode = m_pNodeFree;
- m_pNodeFree = m_pNodeFree->pNext;
- pNode->pPrev = pPrev;
- pNode->pNext = pNext;
- m_nCount++;
- ASSERT(m_nCount > 0);
- pNode->data = 0;
- return pNode;
+ }
+ ASSERT(m_pNodeFree != NULL);
+ CFX_PtrList::CNode* pNode = m_pNodeFree;
+ m_pNodeFree = m_pNodeFree->pNext;
+ pNode->pPrev = pPrev;
+ pNode->pNext = pNext;
+ m_nCount++;
+ ASSERT(m_nCount > 0);
+ pNode->data = 0;
+ return pNode;
}
-CFX_PtrList::~CFX_PtrList()
-{
- RemoveAll();
- ASSERT(m_nCount == 0);
+CFX_PtrList::~CFX_PtrList() {
+ RemoveAll();
+ ASSERT(m_nCount == 0);
}
-FX_POSITION CFX_PtrList::FindIndex(int nIndex) const
-{
- if (nIndex >= m_nCount || nIndex < 0) {
- return NULL;
- }
- CNode* pNode = m_pNodeHead;
- while (nIndex--) {
- pNode = pNode->pNext;
- }
- return (FX_POSITION) pNode;
+FX_POSITION CFX_PtrList::FindIndex(int nIndex) const {
+ if (nIndex >= m_nCount || nIndex < 0) {
+ return NULL;
+ }
+ CNode* pNode = m_pNodeHead;
+ while (nIndex--) {
+ pNode = pNode->pNext;
+ }
+ return (FX_POSITION)pNode;
}
-FX_POSITION CFX_PtrList::Find(void* searchValue, FX_POSITION startAfter) const
-{
- CNode* pNode = (CNode*) startAfter;
- if (pNode == NULL) {
- pNode = m_pNodeHead;
- } else {
- pNode = pNode->pNext;
+FX_POSITION CFX_PtrList::Find(void* searchValue, FX_POSITION startAfter) const {
+ CNode* pNode = (CNode*)startAfter;
+ if (pNode == NULL) {
+ pNode = m_pNodeHead;
+ } else {
+ pNode = pNode->pNext;
+ }
+ for (; pNode != NULL; pNode = pNode->pNext)
+ if (pNode->data == searchValue) {
+ return (FX_POSITION)pNode;
}
- for (; pNode != NULL; pNode = pNode->pNext)
- if (pNode->data == searchValue) {
- return (FX_POSITION) pNode;
- }
- return NULL;
+ return NULL;
}
diff --git a/core/src/fxcrt/fx_basic_maps.cpp b/core/src/fxcrt/fx_basic_maps.cpp
index e34acb088d..14a681b832 100644
--- a/core/src/fxcrt/fx_basic_maps.cpp
+++ b/core/src/fxcrt/fx_basic_maps.cpp
@@ -7,636 +7,610 @@
#include "../../include/fxcrt/fx_basic.h"
#include "plex.h"
-static void ConstructElement(CFX_ByteString* pNewData)
-{
- new (pNewData) CFX_ByteString();
+static void ConstructElement(CFX_ByteString* pNewData) {
+ new (pNewData) CFX_ByteString();
}
-static void DestructElement(CFX_ByteString* pOldData)
-{
- pOldData->~CFX_ByteString();
+static void DestructElement(CFX_ByteString* pOldData) {
+ pOldData->~CFX_ByteString();
}
CFX_MapPtrToPtr::CFX_MapPtrToPtr(int nBlockSize)
- : m_pHashTable(NULL)
- , m_nHashTableSize(17)
- , m_nCount(0)
- , m_pFreeList(NULL)
- , m_pBlocks(NULL)
- , m_nBlockSize(nBlockSize)
-{
- ASSERT(m_nBlockSize > 0);
-}
-void CFX_MapPtrToPtr::RemoveAll()
-{
- if (m_pHashTable) {
- FX_Free(m_pHashTable);
- m_pHashTable = NULL;
- }
- m_nCount = 0;
- m_pFreeList = NULL;
- m_pBlocks->FreeDataChain();
- m_pBlocks = NULL;
-}
-CFX_MapPtrToPtr::~CFX_MapPtrToPtr()
-{
- RemoveAll();
- ASSERT(m_nCount == 0);
-}
-FX_DWORD CFX_MapPtrToPtr::HashKey(void* key) const
-{
- return ((FX_DWORD)(uintptr_t)key) >> 4;
-}
-void CFX_MapPtrToPtr::GetNextAssoc(FX_POSITION& rNextPosition, void*& rKey, void*& rValue) const
-{
- ASSERT(m_pHashTable != NULL);
- CAssoc* pAssocRet = (CAssoc*)rNextPosition;
+ : m_pHashTable(NULL),
+ m_nHashTableSize(17),
+ m_nCount(0),
+ m_pFreeList(NULL),
+ m_pBlocks(NULL),
+ m_nBlockSize(nBlockSize) {
+ ASSERT(m_nBlockSize > 0);
+}
+void CFX_MapPtrToPtr::RemoveAll() {
+ if (m_pHashTable) {
+ FX_Free(m_pHashTable);
+ m_pHashTable = NULL;
+ }
+ m_nCount = 0;
+ m_pFreeList = NULL;
+ m_pBlocks->FreeDataChain();
+ m_pBlocks = NULL;
+}
+CFX_MapPtrToPtr::~CFX_MapPtrToPtr() {
+ RemoveAll();
+ ASSERT(m_nCount == 0);
+}
+FX_DWORD CFX_MapPtrToPtr::HashKey(void* key) const {
+ return ((FX_DWORD)(uintptr_t)key) >> 4;
+}
+void CFX_MapPtrToPtr::GetNextAssoc(FX_POSITION& rNextPosition,
+ void*& rKey,
+ void*& rValue) const {
+ ASSERT(m_pHashTable != NULL);
+ CAssoc* pAssocRet = (CAssoc*)rNextPosition;
+ ASSERT(pAssocRet != NULL);
+ if (pAssocRet == (CAssoc*)-1) {
+ for (FX_DWORD nBucket = 0; nBucket < m_nHashTableSize; nBucket++)
+ if ((pAssocRet = m_pHashTable[nBucket]) != NULL) {
+ break;
+ }
ASSERT(pAssocRet != NULL);
- if (pAssocRet == (CAssoc*) - 1) {
- for (FX_DWORD nBucket = 0; nBucket < m_nHashTableSize; nBucket++)
- if ((pAssocRet = m_pHashTable[nBucket]) != NULL) {
- break;
- }
- ASSERT(pAssocRet != NULL);
- }
- CAssoc* pAssocNext;
- if ((pAssocNext = pAssocRet->pNext) == NULL) {
- for (FX_DWORD nBucket = (HashKey(pAssocRet->key) % m_nHashTableSize) + 1; nBucket < m_nHashTableSize; nBucket ++) {
- if ((pAssocNext = m_pHashTable[nBucket]) != NULL) {
- break;
- }
- }
- }
- rNextPosition = (FX_POSITION) pAssocNext;
- rKey = pAssocRet->key;
- rValue = pAssocRet->value;
-}
-FX_BOOL CFX_MapPtrToPtr::Lookup(void* key, void*& rValue) const
-{
- FX_DWORD nHash;
- CAssoc* pAssoc = GetAssocAt(key, nHash);
- if (pAssoc == NULL) {
- return FALSE;
- }
- rValue = pAssoc->value;
- return TRUE;
-}
-void* CFX_MapPtrToPtr::GetValueAt(void* key) const
-{
- FX_DWORD nHash;
- CAssoc* pAssoc = GetAssocAt(key, nHash);
- if (pAssoc == NULL) {
- return NULL;
- }
- return pAssoc->value;
-}
-void*& CFX_MapPtrToPtr::operator[](void* key)
-{
- FX_DWORD nHash;
- CAssoc* pAssoc;
- if ((pAssoc = GetAssocAt(key, nHash)) == NULL) {
- if (m_pHashTable == NULL) {
- InitHashTable(m_nHashTableSize);
- }
- pAssoc = NewAssoc();
- pAssoc->key = key;
- pAssoc->pNext = m_pHashTable[nHash];
- m_pHashTable[nHash] = pAssoc;
- }
- return pAssoc->value;
-}
-CFX_MapPtrToPtr::CAssoc*
-CFX_MapPtrToPtr::GetAssocAt(void* key, FX_DWORD& nHash) const
-{
- nHash = HashKey(key) % m_nHashTableSize;
- if (m_pHashTable == NULL) {
- return NULL;
- }
- CAssoc* pAssoc;
- for (pAssoc = m_pHashTable[nHash]; pAssoc != NULL; pAssoc = pAssoc->pNext) {
- if (pAssoc->key == key) {
- return pAssoc;
- }
- }
+ }
+ CAssoc* pAssocNext;
+ if ((pAssocNext = pAssocRet->pNext) == NULL) {
+ for (FX_DWORD nBucket = (HashKey(pAssocRet->key) % m_nHashTableSize) + 1;
+ nBucket < m_nHashTableSize; nBucket++) {
+ if ((pAssocNext = m_pHashTable[nBucket]) != NULL) {
+ break;
+ }
+ }
+ }
+ rNextPosition = (FX_POSITION)pAssocNext;
+ rKey = pAssocRet->key;
+ rValue = pAssocRet->value;
+}
+FX_BOOL CFX_MapPtrToPtr::Lookup(void* key, void*& rValue) const {
+ FX_DWORD nHash;
+ CAssoc* pAssoc = GetAssocAt(key, nHash);
+ if (pAssoc == NULL) {
+ return FALSE;
+ }
+ rValue = pAssoc->value;
+ return TRUE;
+}
+void* CFX_MapPtrToPtr::GetValueAt(void* key) const {
+ FX_DWORD nHash;
+ CAssoc* pAssoc = GetAssocAt(key, nHash);
+ if (pAssoc == NULL) {
return NULL;
+ }
+ return pAssoc->value;
}
-CFX_MapPtrToPtr::CAssoc*
-CFX_MapPtrToPtr::NewAssoc()
-{
- if (m_pFreeList == NULL) {
- CFX_Plex* newBlock = CFX_Plex::Create(m_pBlocks, m_nBlockSize, sizeof(CFX_MapPtrToPtr::CAssoc));
- CFX_MapPtrToPtr::CAssoc* pAssoc = (CFX_MapPtrToPtr::CAssoc*)newBlock->data();
- pAssoc += m_nBlockSize - 1;
- for (int i = m_nBlockSize - 1; i >= 0; i--, pAssoc--) {
- pAssoc->pNext = m_pFreeList;
- m_pFreeList = pAssoc;
- }
- }
- ASSERT(m_pFreeList != NULL);
- CFX_MapPtrToPtr::CAssoc* pAssoc = m_pFreeList;
- m_pFreeList = m_pFreeList->pNext;
- m_nCount++;
- ASSERT(m_nCount > 0);
- pAssoc->key = 0;
- pAssoc->value = 0;
- return pAssoc;
-}
-void CFX_MapPtrToPtr::InitHashTable(
- FX_DWORD nHashSize, FX_BOOL bAllocNow)
-{
- ASSERT(m_nCount == 0);
- ASSERT(nHashSize > 0);
- if (m_pHashTable != NULL) {
- FX_Free(m_pHashTable);
- m_pHashTable = NULL;
- }
- if (bAllocNow) {
- m_pHashTable = FX_Alloc(CAssoc*, nHashSize);
- }
- m_nHashTableSize = nHashSize;
-}
-FX_BOOL CFX_MapPtrToPtr::RemoveKey(void* key)
-{
+void*& CFX_MapPtrToPtr::operator[](void* key) {
+ FX_DWORD nHash;
+ CAssoc* pAssoc;
+ if ((pAssoc = GetAssocAt(key, nHash)) == NULL) {
if (m_pHashTable == NULL) {
- return FALSE;
- }
- CAssoc** ppAssocPrev;
- ppAssocPrev = &m_pHashTable[HashKey(key) % m_nHashTableSize];
- CAssoc* pAssoc;
- for (pAssoc = *ppAssocPrev; pAssoc != NULL; pAssoc = pAssoc->pNext) {
- if (pAssoc->key == key) {
- *ppAssocPrev = pAssoc->pNext;
- FreeAssoc(pAssoc);
- return TRUE;
- }
- ppAssocPrev = &pAssoc->pNext;
- }
+ InitHashTable(m_nHashTableSize);
+ }
+ pAssoc = NewAssoc();
+ pAssoc->key = key;
+ pAssoc->pNext = m_pHashTable[nHash];
+ m_pHashTable[nHash] = pAssoc;
+ }
+ return pAssoc->value;
+}
+CFX_MapPtrToPtr::CAssoc* CFX_MapPtrToPtr::GetAssocAt(void* key,
+ FX_DWORD& nHash) const {
+ nHash = HashKey(key) % m_nHashTableSize;
+ if (m_pHashTable == NULL) {
+ return NULL;
+ }
+ CAssoc* pAssoc;
+ for (pAssoc = m_pHashTable[nHash]; pAssoc != NULL; pAssoc = pAssoc->pNext) {
+ if (pAssoc->key == key) {
+ return pAssoc;
+ }
+ }
+ return NULL;
+}
+CFX_MapPtrToPtr::CAssoc* CFX_MapPtrToPtr::NewAssoc() {
+ if (m_pFreeList == NULL) {
+ CFX_Plex* newBlock = CFX_Plex::Create(m_pBlocks, m_nBlockSize,
+ sizeof(CFX_MapPtrToPtr::CAssoc));
+ CFX_MapPtrToPtr::CAssoc* pAssoc =
+ (CFX_MapPtrToPtr::CAssoc*)newBlock->data();
+ pAssoc += m_nBlockSize - 1;
+ for (int i = m_nBlockSize - 1; i >= 0; i--, pAssoc--) {
+ pAssoc->pNext = m_pFreeList;
+ m_pFreeList = pAssoc;
+ }
+ }
+ ASSERT(m_pFreeList != NULL);
+ CFX_MapPtrToPtr::CAssoc* pAssoc = m_pFreeList;
+ m_pFreeList = m_pFreeList->pNext;
+ m_nCount++;
+ ASSERT(m_nCount > 0);
+ pAssoc->key = 0;
+ pAssoc->value = 0;
+ return pAssoc;
+}
+void CFX_MapPtrToPtr::InitHashTable(FX_DWORD nHashSize, FX_BOOL bAllocNow) {
+ ASSERT(m_nCount == 0);
+ ASSERT(nHashSize > 0);
+ if (m_pHashTable != NULL) {
+ FX_Free(m_pHashTable);
+ m_pHashTable = NULL;
+ }
+ if (bAllocNow) {
+ m_pHashTable = FX_Alloc(CAssoc*, nHashSize);
+ }
+ m_nHashTableSize = nHashSize;
+}
+FX_BOOL CFX_MapPtrToPtr::RemoveKey(void* key) {
+ if (m_pHashTable == NULL) {
return FALSE;
-}
-void CFX_MapPtrToPtr::FreeAssoc(CFX_MapPtrToPtr::CAssoc* pAssoc)
-{
- pAssoc->pNext = m_pFreeList;
- m_pFreeList = pAssoc;
- m_nCount--;
- ASSERT(m_nCount >= 0);
- if (m_nCount == 0) {
- RemoveAll();
- }
+ }
+ CAssoc** ppAssocPrev;
+ ppAssocPrev = &m_pHashTable[HashKey(key) % m_nHashTableSize];
+ CAssoc* pAssoc;
+ for (pAssoc = *ppAssocPrev; pAssoc != NULL; pAssoc = pAssoc->pNext) {
+ if (pAssoc->key == key) {
+ *ppAssocPrev = pAssoc->pNext;
+ FreeAssoc(pAssoc);
+ return TRUE;
+ }
+ ppAssocPrev = &pAssoc->pNext;
+ }
+ return FALSE;
+}
+void CFX_MapPtrToPtr::FreeAssoc(CFX_MapPtrToPtr::CAssoc* pAssoc) {
+ pAssoc->pNext = m_pFreeList;
+ m_pFreeList = pAssoc;
+ m_nCount--;
+ ASSERT(m_nCount >= 0);
+ if (m_nCount == 0) {
+ RemoveAll();
+ }
}
CFX_MapByteStringToPtr::CFX_MapByteStringToPtr(int nBlockSize)
- : m_pHashTable(NULL)
- , m_nHashTableSize(17)
- , m_nCount(0)
- , m_pFreeList(NULL)
- , m_pBlocks(NULL)
- , m_nBlockSize(nBlockSize)
-{
- ASSERT(m_nBlockSize > 0);
-}
-void CFX_MapByteStringToPtr::RemoveAll()
-{
- if (m_pHashTable != NULL) {
- for (FX_DWORD nHash = 0; nHash < m_nHashTableSize; nHash++) {
- CAssoc* pAssoc;
- for (pAssoc = m_pHashTable[nHash]; pAssoc != NULL;
- pAssoc = pAssoc->pNext) {
- DestructElement(&pAssoc->key);
- }
- }
- FX_Free(m_pHashTable);
- m_pHashTable = NULL;
- }
- m_nCount = 0;
- m_pFreeList = NULL;
- m_pBlocks->FreeDataChain();
- m_pBlocks = NULL;
-}
-CFX_MapByteStringToPtr::~CFX_MapByteStringToPtr()
-{
- RemoveAll();
- ASSERT(m_nCount == 0);
+ : m_pHashTable(NULL),
+ m_nHashTableSize(17),
+ m_nCount(0),
+ m_pFreeList(NULL),
+ m_pBlocks(NULL),
+ m_nBlockSize(nBlockSize) {
+ ASSERT(m_nBlockSize > 0);
+}
+void CFX_MapByteStringToPtr::RemoveAll() {
+ if (m_pHashTable != NULL) {
+ for (FX_DWORD nHash = 0; nHash < m_nHashTableSize; nHash++) {
+ CAssoc* pAssoc;
+ for (pAssoc = m_pHashTable[nHash]; pAssoc != NULL;
+ pAssoc = pAssoc->pNext) {
+ DestructElement(&pAssoc->key);
+ }
+ }
+ FX_Free(m_pHashTable);
+ m_pHashTable = NULL;
+ }
+ m_nCount = 0;
+ m_pFreeList = NULL;
+ m_pBlocks->FreeDataChain();
+ m_pBlocks = NULL;
+}
+CFX_MapByteStringToPtr::~CFX_MapByteStringToPtr() {
+ RemoveAll();
+ ASSERT(m_nCount == 0);
}
void CFX_MapByteStringToPtr::GetNextAssoc(FX_POSITION& rNextPosition,
- CFX_ByteString& rKey, void*& rValue) const
-{
- ASSERT(m_pHashTable != NULL);
- CAssoc* pAssocRet = (CAssoc*)rNextPosition;
+ CFX_ByteString& rKey,
+ void*& rValue) const {
+ ASSERT(m_pHashTable != NULL);
+ CAssoc* pAssocRet = (CAssoc*)rNextPosition;
+ ASSERT(pAssocRet != NULL);
+ if (pAssocRet == (CAssoc*)-1) {
+ for (FX_DWORD nBucket = 0; nBucket < m_nHashTableSize; nBucket++)
+ if ((pAssocRet = m_pHashTable[nBucket]) != NULL) {
+ break;
+ }
ASSERT(pAssocRet != NULL);
- if (pAssocRet == (CAssoc*) - 1) {
- for (FX_DWORD nBucket = 0; nBucket < m_nHashTableSize; nBucket++)
- if ((pAssocRet = m_pHashTable[nBucket]) != NULL) {
- break;
- }
- ASSERT(pAssocRet != NULL);
- }
- CAssoc* pAssocNext;
- if ((pAssocNext = pAssocRet->pNext) == NULL) {
- for (FX_DWORD nBucket = pAssocRet->nHashValue + 1;
- nBucket < m_nHashTableSize; nBucket++)
- if ((pAssocNext = m_pHashTable[nBucket]) != NULL) {
- break;
- }
- }
- rNextPosition = (FX_POSITION) pAssocNext;
- rKey = pAssocRet->key;
- rValue = pAssocRet->value;
-}
-void* CFX_MapByteStringToPtr::GetNextValue(FX_POSITION& rNextPosition) const
-{
- ASSERT(m_pHashTable != NULL);
- CAssoc* pAssocRet = (CAssoc*)rNextPosition;
+ }
+ CAssoc* pAssocNext;
+ if ((pAssocNext = pAssocRet->pNext) == NULL) {
+ for (FX_DWORD nBucket = pAssocRet->nHashValue + 1;
+ nBucket < m_nHashTableSize; nBucket++)
+ if ((pAssocNext = m_pHashTable[nBucket]) != NULL) {
+ break;
+ }
+ }
+ rNextPosition = (FX_POSITION)pAssocNext;
+ rKey = pAssocRet->key;
+ rValue = pAssocRet->value;
+}
+void* CFX_MapByteStringToPtr::GetNextValue(FX_POSITION& rNextPosition) const {
+ ASSERT(m_pHashTable != NULL);
+ CAssoc* pAssocRet = (CAssoc*)rNextPosition;
+ ASSERT(pAssocRet != NULL);
+ if (pAssocRet == (CAssoc*)-1) {
+ for (FX_DWORD nBucket = 0; nBucket < m_nHashTableSize; nBucket++)
+ if ((pAssocRet = m_pHashTable[nBucket]) != NULL) {
+ break;
+ }
ASSERT(pAssocRet != NULL);
- if (pAssocRet == (CAssoc*) - 1) {
- for (FX_DWORD nBucket = 0; nBucket < m_nHashTableSize; nBucket++)
- if ((pAssocRet = m_pHashTable[nBucket]) != NULL) {
- break;
- }
- ASSERT(pAssocRet != NULL);
- }
- CAssoc* pAssocNext;
- if ((pAssocNext = pAssocRet->pNext) == NULL) {
- for (FX_DWORD nBucket = pAssocRet->nHashValue + 1;
- nBucket < m_nHashTableSize; nBucket++)
- if ((pAssocNext = m_pHashTable[nBucket]) != NULL) {
- break;
- }
- }
- rNextPosition = (FX_POSITION) pAssocNext;
- return pAssocRet->value;
-}
-void*& CFX_MapByteStringToPtr::operator[](const CFX_ByteStringC& key)
-{
- FX_DWORD nHash;
- CAssoc* pAssoc;
- if ((pAssoc = GetAssocAt(key, nHash)) == NULL) {
- if (m_pHashTable == NULL) {
- InitHashTable(m_nHashTableSize);
- }
- pAssoc = NewAssoc();
- pAssoc->nHashValue = nHash;
- pAssoc->key = key;
- pAssoc->pNext = m_pHashTable[nHash];
- m_pHashTable[nHash] = pAssoc;
- }
- return pAssoc->value;
-}
-CFX_MapByteStringToPtr::CAssoc*
-CFX_MapByteStringToPtr::NewAssoc()
-{
- if (m_pFreeList == NULL) {
- CFX_Plex* newBlock = CFX_Plex::Create(m_pBlocks, m_nBlockSize, sizeof(CFX_MapByteStringToPtr::CAssoc));
- CFX_MapByteStringToPtr::CAssoc* pAssoc = (CFX_MapByteStringToPtr::CAssoc*)newBlock->data();
- pAssoc += m_nBlockSize - 1;
- for (int i = m_nBlockSize - 1; i >= 0; i--, pAssoc--) {
- pAssoc->pNext = m_pFreeList;
- m_pFreeList = pAssoc;
- }
- }
- ASSERT(m_pFreeList != NULL);
- CFX_MapByteStringToPtr::CAssoc* pAssoc = m_pFreeList;
- m_pFreeList = m_pFreeList->pNext;
- m_nCount++;
- ASSERT(m_nCount > 0);
- ConstructElement(&pAssoc->key);
- pAssoc->value = 0;
- return pAssoc;
-}
-void CFX_MapByteStringToPtr::FreeAssoc(CFX_MapByteStringToPtr::CAssoc* pAssoc)
-{
- DestructElement(&pAssoc->key);
- pAssoc->pNext = m_pFreeList;
- m_pFreeList = pAssoc;
- m_nCount--;
- ASSERT(m_nCount >= 0);
- if (m_nCount == 0) {
- RemoveAll();
- }
-}
-CFX_MapByteStringToPtr::CAssoc*
-CFX_MapByteStringToPtr::GetAssocAt(const CFX_ByteStringC& key, FX_DWORD& nHash) const
-{
- nHash = HashKey(key) % m_nHashTableSize;
+ }
+ CAssoc* pAssocNext;
+ if ((pAssocNext = pAssocRet->pNext) == NULL) {
+ for (FX_DWORD nBucket = pAssocRet->nHashValue + 1;
+ nBucket < m_nHashTableSize; nBucket++)
+ if ((pAssocNext = m_pHashTable[nBucket]) != NULL) {
+ break;
+ }
+ }
+ rNextPosition = (FX_POSITION)pAssocNext;
+ return pAssocRet->value;
+}
+void*& CFX_MapByteStringToPtr::operator[](const CFX_ByteStringC& key) {
+ FX_DWORD nHash;
+ CAssoc* pAssoc;
+ if ((pAssoc = GetAssocAt(key, nHash)) == NULL) {
if (m_pHashTable == NULL) {
- return NULL;
- }
- CAssoc* pAssoc;
- for (pAssoc = m_pHashTable[nHash]; pAssoc != NULL; pAssoc = pAssoc->pNext) {
- if (pAssoc->key == key) {
- return pAssoc;
- }
- }
- return NULL;
-}
-FX_BOOL CFX_MapByteStringToPtr::Lookup(const CFX_ByteStringC& key, void*& rValue) const
-{
- FX_DWORD nHash;
- CAssoc* pAssoc = GetAssocAt(key, nHash);
- if (pAssoc == NULL) {
- return FALSE;
- }
- rValue = pAssoc->value;
- return TRUE;
-}
-void CFX_MapByteStringToPtr::InitHashTable(
- FX_DWORD nHashSize, FX_BOOL bAllocNow)
-{
- ASSERT(m_nCount == 0);
- ASSERT(nHashSize > 0);
- if (m_pHashTable != NULL) {
- FX_Free(m_pHashTable);
- m_pHashTable = NULL;
- }
- if (bAllocNow) {
- m_pHashTable = FX_Alloc(CAssoc*, nHashSize);
- }
- m_nHashTableSize = nHashSize;
-}
-inline FX_DWORD CFX_MapByteStringToPtr::HashKey(const CFX_ByteStringC& key) const
-{
- FX_DWORD nHash = 0;
- int len = key.GetLength();
- const uint8_t* buf = key.GetPtr();
- for (int i = 0; i < len; i ++) {
- nHash = (nHash << 5) + nHash + buf[i];
- }
- return nHash;
+ InitHashTable(m_nHashTableSize);
+ }
+ pAssoc = NewAssoc();
+ pAssoc->nHashValue = nHash;
+ pAssoc->key = key;
+ pAssoc->pNext = m_pHashTable[nHash];
+ m_pHashTable[nHash] = pAssoc;
+ }
+ return pAssoc->value;
+}
+CFX_MapByteStringToPtr::CAssoc* CFX_MapByteStringToPtr::NewAssoc() {
+ if (m_pFreeList == NULL) {
+ CFX_Plex* newBlock = CFX_Plex::Create(
+ m_pBlocks, m_nBlockSize, sizeof(CFX_MapByteStringToPtr::CAssoc));
+ CFX_MapByteStringToPtr::CAssoc* pAssoc =
+ (CFX_MapByteStringToPtr::CAssoc*)newBlock->data();
+ pAssoc += m_nBlockSize - 1;
+ for (int i = m_nBlockSize - 1; i >= 0; i--, pAssoc--) {
+ pAssoc->pNext = m_pFreeList;
+ m_pFreeList = pAssoc;
+ }
+ }
+ ASSERT(m_pFreeList != NULL);
+ CFX_MapByteStringToPtr::CAssoc* pAssoc = m_pFreeList;
+ m_pFreeList = m_pFreeList->pNext;
+ m_nCount++;
+ ASSERT(m_nCount > 0);
+ ConstructElement(&pAssoc->key);
+ pAssoc->value = 0;
+ return pAssoc;
+}
+void CFX_MapByteStringToPtr::FreeAssoc(CFX_MapByteStringToPtr::CAssoc* pAssoc) {
+ DestructElement(&pAssoc->key);
+ pAssoc->pNext = m_pFreeList;
+ m_pFreeList = pAssoc;
+ m_nCount--;
+ ASSERT(m_nCount >= 0);
+ if (m_nCount == 0) {
+ RemoveAll();
+ }
}
-FX_BOOL CFX_MapByteStringToPtr::RemoveKey(const CFX_ByteStringC& key)
-{
- if (m_pHashTable == NULL) {
- return FALSE;
- }
- CAssoc** ppAssocPrev;
- ppAssocPrev = &m_pHashTable[HashKey(key) % m_nHashTableSize];
- CAssoc* pAssoc;
- for (pAssoc = *ppAssocPrev; pAssoc != NULL; pAssoc = pAssoc->pNext) {
- if (pAssoc->key == key) {
- *ppAssocPrev = pAssoc->pNext;
- FreeAssoc(pAssoc);
- return TRUE;
- }
- ppAssocPrev = &pAssoc->pNext;
- }
+CFX_MapByteStringToPtr::CAssoc* CFX_MapByteStringToPtr::GetAssocAt(
+ const CFX_ByteStringC& key,
+ FX_DWORD& nHash) const {
+ nHash = HashKey(key) % m_nHashTableSize;
+ if (m_pHashTable == NULL) {
+ return NULL;
+ }
+ CAssoc* pAssoc;
+ for (pAssoc = m_pHashTable[nHash]; pAssoc != NULL; pAssoc = pAssoc->pNext) {
+ if (pAssoc->key == key) {
+ return pAssoc;
+ }
+ }
+ return NULL;
+}
+FX_BOOL CFX_MapByteStringToPtr::Lookup(const CFX_ByteStringC& key,
+ void*& rValue) const {
+ FX_DWORD nHash;
+ CAssoc* pAssoc = GetAssocAt(key, nHash);
+ if (pAssoc == NULL) {
+ return FALSE;
+ }
+ rValue = pAssoc->value;
+ return TRUE;
+}
+void CFX_MapByteStringToPtr::InitHashTable(FX_DWORD nHashSize,
+ FX_BOOL bAllocNow) {
+ ASSERT(m_nCount == 0);
+ ASSERT(nHashSize > 0);
+ if (m_pHashTable != NULL) {
+ FX_Free(m_pHashTable);
+ m_pHashTable = NULL;
+ }
+ if (bAllocNow) {
+ m_pHashTable = FX_Alloc(CAssoc*, nHashSize);
+ }
+ m_nHashTableSize = nHashSize;
+}
+inline FX_DWORD CFX_MapByteStringToPtr::HashKey(
+ const CFX_ByteStringC& key) const {
+ FX_DWORD nHash = 0;
+ int len = key.GetLength();
+ const uint8_t* buf = key.GetPtr();
+ for (int i = 0; i < len; i++) {
+ nHash = (nHash << 5) + nHash + buf[i];
+ }
+ return nHash;
+}
+FX_BOOL CFX_MapByteStringToPtr::RemoveKey(const CFX_ByteStringC& key) {
+ if (m_pHashTable == NULL) {
return FALSE;
+ }
+ CAssoc** ppAssocPrev;
+ ppAssocPrev = &m_pHashTable[HashKey(key) % m_nHashTableSize];
+ CAssoc* pAssoc;
+ for (pAssoc = *ppAssocPrev; pAssoc != NULL; pAssoc = pAssoc->pNext) {
+ if (pAssoc->key == key) {
+ *ppAssocPrev = pAssoc->pNext;
+ FreeAssoc(pAssoc);
+ return TRUE;
+ }
+ ppAssocPrev = &pAssoc->pNext;
+ }
+ return FALSE;
}
struct _CompactString {
- uint8_t m_CompactLen;
- uint8_t m_LenHigh;
- uint8_t m_LenLow;
- uint8_t m_Unused;
- uint8_t* m_pBuffer;
+ uint8_t m_CompactLen;
+ uint8_t m_LenHigh;
+ uint8_t m_LenLow;
+ uint8_t m_Unused;
+ uint8_t* m_pBuffer;
};
-static void _CompactStringRelease(_CompactString* pCompact)
-{
- if (pCompact->m_CompactLen == 0xff) {
- FX_Free(pCompact->m_pBuffer);
- }
-}
-static FX_BOOL _CompactStringSame(_CompactString* pCompact, const uint8_t* pStr, int len)
-{
- if (len < sizeof(_CompactString)) {
- if (pCompact->m_CompactLen != len) {
- return FALSE;
- }
- return FXSYS_memcmp(&pCompact->m_LenHigh, pStr, len) == 0;
- }
- if (pCompact->m_CompactLen != 0xff || pCompact->m_LenHigh * 256 + pCompact->m_LenLow != len) {
- return FALSE;
- }
- return FXSYS_memcmp(pCompact->m_pBuffer, pStr, len) == 0;
-}
-static void _CompactStringStore(_CompactString* pCompact, const uint8_t* pStr, int len)
-{
- if (len < (int)sizeof(_CompactString)) {
- pCompact->m_CompactLen = (uint8_t)len;
- FXSYS_memcpy(&pCompact->m_LenHigh, pStr, len);
- return;
- }
- pCompact->m_CompactLen = 0xff;
- pCompact->m_LenHigh = len / 256;
- pCompact->m_LenLow = len % 256;
- pCompact->m_pBuffer = FX_Alloc(uint8_t, len);
- FXSYS_memcpy(pCompact->m_pBuffer, pStr, len);
-}
-static CFX_ByteStringC _CompactStringGet(_CompactString* pCompact)
-{
- if (pCompact->m_CompactLen == 0xff) {
- return CFX_ByteStringC(pCompact->m_pBuffer, pCompact->m_LenHigh * 256 + pCompact->m_LenLow);
- }
- if (pCompact->m_CompactLen == 0xfe) {
- return CFX_ByteStringC();
- }
- return CFX_ByteStringC(&pCompact->m_LenHigh, pCompact->m_CompactLen);
-}
-#define CMAP_ALLOC_STEP 8
-#define CMAP_INDEX_SIZE 8
+static void _CompactStringRelease(_CompactString* pCompact) {
+ if (pCompact->m_CompactLen == 0xff) {
+ FX_Free(pCompact->m_pBuffer);
+ }
+}
+static FX_BOOL _CompactStringSame(_CompactString* pCompact,
+ const uint8_t* pStr,
+ int len) {
+ if (len < sizeof(_CompactString)) {
+ if (pCompact->m_CompactLen != len) {
+ return FALSE;
+ }
+ return FXSYS_memcmp(&pCompact->m_LenHigh, pStr, len) == 0;
+ }
+ if (pCompact->m_CompactLen != 0xff ||
+ pCompact->m_LenHigh * 256 + pCompact->m_LenLow != len) {
+ return FALSE;
+ }
+ return FXSYS_memcmp(pCompact->m_pBuffer, pStr, len) == 0;
+}
+static void _CompactStringStore(_CompactString* pCompact,
+ const uint8_t* pStr,
+ int len) {
+ if (len < (int)sizeof(_CompactString)) {
+ pCompact->m_CompactLen = (uint8_t)len;
+ FXSYS_memcpy(&pCompact->m_LenHigh, pStr, len);
+ return;
+ }
+ pCompact->m_CompactLen = 0xff;
+ pCompact->m_LenHigh = len / 256;
+ pCompact->m_LenLow = len % 256;
+ pCompact->m_pBuffer = FX_Alloc(uint8_t, len);
+ FXSYS_memcpy(pCompact->m_pBuffer, pStr, len);
+}
+static CFX_ByteStringC _CompactStringGet(_CompactString* pCompact) {
+ if (pCompact->m_CompactLen == 0xff) {
+ return CFX_ByteStringC(pCompact->m_pBuffer,
+ pCompact->m_LenHigh * 256 + pCompact->m_LenLow);
+ }
+ if (pCompact->m_CompactLen == 0xfe) {
+ return CFX_ByteStringC();
+ }
+ return CFX_ByteStringC(&pCompact->m_LenHigh, pCompact->m_CompactLen);
+}
+#define CMAP_ALLOC_STEP 8
+#define CMAP_INDEX_SIZE 8
CFX_CMapByteStringToPtr::CFX_CMapByteStringToPtr()
- : m_Buffer(sizeof(_CompactString) + sizeof(void*), CMAP_ALLOC_STEP, CMAP_INDEX_SIZE)
-{
-}
-CFX_CMapByteStringToPtr::~CFX_CMapByteStringToPtr()
-{
- RemoveAll();
-}
-void CFX_CMapByteStringToPtr::RemoveAll()
-{
- int size = m_Buffer.GetSize();
- for (int i = 0; i < size; i++) {
- _CompactStringRelease((_CompactString*)m_Buffer.GetAt(i));
- }
- m_Buffer.RemoveAll();
-}
-FX_POSITION CFX_CMapByteStringToPtr::GetStartPosition() const
-{
- int size = m_Buffer.GetSize();
- for (int i = 0; i < size; i ++) {
- _CompactString* pKey = (_CompactString*)m_Buffer.GetAt(i);
- if (pKey->m_CompactLen != 0xfe) {
- return (FX_POSITION)(uintptr_t)(i + 1);
- }
- }
+ : m_Buffer(sizeof(_CompactString) + sizeof(void*),
+ CMAP_ALLOC_STEP,
+ CMAP_INDEX_SIZE) {}
+CFX_CMapByteStringToPtr::~CFX_CMapByteStringToPtr() {
+ RemoveAll();
+}
+void CFX_CMapByteStringToPtr::RemoveAll() {
+ int size = m_Buffer.GetSize();
+ for (int i = 0; i < size; i++) {
+ _CompactStringRelease((_CompactString*)m_Buffer.GetAt(i));
+ }
+ m_Buffer.RemoveAll();
+}
+FX_POSITION CFX_CMapByteStringToPtr::GetStartPosition() const {
+ int size = m_Buffer.GetSize();
+ for (int i = 0; i < size; i++) {
+ _CompactString* pKey = (_CompactString*)m_Buffer.GetAt(i);
+ if (pKey->m_CompactLen != 0xfe) {
+ return (FX_POSITION)(uintptr_t)(i + 1);
+ }
+ }
+ return NULL;
+}
+void CFX_CMapByteStringToPtr::GetNextAssoc(FX_POSITION& rNextPosition,
+ CFX_ByteString& rKey,
+ void*& rValue) const {
+ if (rNextPosition == NULL) {
+ return;
+ }
+ int index = (int)(uintptr_t)rNextPosition - 1;
+ _CompactString* pKey = (_CompactString*)m_Buffer.GetAt(index);
+ rKey = _CompactStringGet(pKey);
+ rValue = *(void**)(pKey + 1);
+ index++;
+ int size = m_Buffer.GetSize();
+ while (index < size) {
+ pKey = (_CompactString*)m_Buffer.GetAt(index);
+ if (pKey->m_CompactLen != 0xfe) {
+ rNextPosition = (FX_POSITION)(uintptr_t)(index + 1);
+ return;
+ }
+ index++;
+ }
+ rNextPosition = NULL;
+}
+void* CFX_CMapByteStringToPtr::GetNextValue(FX_POSITION& rNextPosition) const {
+ if (rNextPosition == NULL) {
return NULL;
-}
-void CFX_CMapByteStringToPtr::GetNextAssoc(FX_POSITION& rNextPosition, CFX_ByteString& rKey, void*& rValue) const
-{
- if (rNextPosition == NULL) {
- return;
- }
- int index = (int)(uintptr_t)rNextPosition - 1;
+ }
+ int index = (int)(uintptr_t)rNextPosition - 1;
+ _CompactString* pKey = (_CompactString*)m_Buffer.GetAt(index);
+ void* rValue = *(void**)(pKey + 1);
+ index++;
+ int size = m_Buffer.GetSize();
+ while (index < size) {
+ pKey = (_CompactString*)m_Buffer.GetAt(index);
+ if (pKey->m_CompactLen != 0xfe) {
+ rNextPosition = (FX_POSITION)(uintptr_t)(index + 1);
+ return rValue;
+ }
+ index++;
+ }
+ rNextPosition = NULL;
+ return rValue;
+}
+FX_BOOL _CMapLookupCallback(void* param, void* pData) {
+ return !_CompactStringSame((_CompactString*)pData,
+ ((CFX_ByteStringC*)param)->GetPtr(),
+ ((CFX_ByteStringC*)param)->GetLength());
+}
+FX_BOOL CFX_CMapByteStringToPtr::Lookup(const CFX_ByteStringC& key,
+ void*& rValue) const {
+ void* p = m_Buffer.Iterate(_CMapLookupCallback, (void*)&key);
+ if (!p) {
+ return FALSE;
+ }
+ rValue = *(void**)((_CompactString*)p + 1);
+ return TRUE;
+}
+void CFX_CMapByteStringToPtr::SetAt(const CFX_ByteStringC& key, void* value) {
+ ASSERT(value != NULL);
+ int index, key_len = key.GetLength();
+ int size = m_Buffer.GetSize();
+ for (index = 0; index < size; index++) {
_CompactString* pKey = (_CompactString*)m_Buffer.GetAt(index);
- rKey = _CompactStringGet(pKey);
- rValue = *(void**)(pKey + 1);
- index ++;
- int size = m_Buffer.GetSize();
- while (index < size) {
- pKey = (_CompactString*)m_Buffer.GetAt(index);
- if (pKey->m_CompactLen != 0xfe) {
- rNextPosition = (FX_POSITION)(uintptr_t)(index + 1);
- return;
- }
- index ++;
- }
- rNextPosition = NULL;
-}
-void* CFX_CMapByteStringToPtr::GetNextValue(FX_POSITION& rNextPosition) const
-{
- if (rNextPosition == NULL) {
- return NULL;
+ if (!_CompactStringSame(pKey, key.GetPtr(), key_len)) {
+ continue;
}
- int index = (int)(uintptr_t)rNextPosition - 1;
+ *(void**)(pKey + 1) = value;
+ return;
+ }
+ for (index = 0; index < size; index++) {
_CompactString* pKey = (_CompactString*)m_Buffer.GetAt(index);
- void* rValue = *(void**)(pKey + 1);
- index ++;
- int size = m_Buffer.GetSize();
- while (index < size) {
- pKey = (_CompactString*)m_Buffer.GetAt(index);
- if (pKey->m_CompactLen != 0xfe) {
- rNextPosition = (FX_POSITION)(uintptr_t)(index + 1);
- return rValue;
- }
- index ++;
- }
- rNextPosition = NULL;
- return rValue;
-}
-FX_BOOL _CMapLookupCallback(void* param, void* pData)
-{
- return !_CompactStringSame((_CompactString*)pData, ((CFX_ByteStringC*)param)->GetPtr(), ((CFX_ByteStringC*)param)->GetLength());
-}
-FX_BOOL CFX_CMapByteStringToPtr::Lookup(const CFX_ByteStringC& key, void*& rValue) const
-{
- void* p = m_Buffer.Iterate(_CMapLookupCallback, (void*)&key);
- if (!p) {
- return FALSE;
- }
- rValue = *(void**)((_CompactString*)p + 1);
- return TRUE;
-}
-void CFX_CMapByteStringToPtr::SetAt(const CFX_ByteStringC& key, void* value)
-{
- ASSERT(value != NULL);
- int index, key_len = key.GetLength();
- int size = m_Buffer.GetSize();
- for (index = 0; index < size; index ++) {
- _CompactString* pKey = (_CompactString*)m_Buffer.GetAt(index);
- if (!_CompactStringSame(pKey, key.GetPtr(), key_len)) {
- continue;
- }
- *(void**)(pKey + 1) = value;
- return;
+ if (pKey->m_CompactLen) {
+ continue;
}
- for (index = 0; index < size; index ++) {
- _CompactString* pKey = (_CompactString*)m_Buffer.GetAt(index);
- if (pKey->m_CompactLen) {
- continue;
- }
- _CompactStringStore(pKey, key.GetPtr(), key_len);
- *(void**)(pKey + 1) = value;
- return;
- }
- _CompactString* pKey = (_CompactString*)m_Buffer.Add();
_CompactStringStore(pKey, key.GetPtr(), key_len);
*(void**)(pKey + 1) = value;
-}
-void CFX_CMapByteStringToPtr::AddValue(const CFX_ByteStringC& key, void* value)
-{
- ASSERT(value != NULL);
- _CompactString* pKey = (_CompactString*)m_Buffer.Add();
- _CompactStringStore(pKey, key.GetPtr(), key.GetLength());
- *(void**)(pKey + 1) = value;
-}
-void CFX_CMapByteStringToPtr::RemoveKey(const CFX_ByteStringC& key)
-{
- int key_len = key.GetLength();
- int size = m_Buffer.GetSize();
- for (int index = 0; index < size; index++) {
- _CompactString* pKey = (_CompactString*)m_Buffer.GetAt(index);
- if (!_CompactStringSame(pKey, key.GetPtr(), key_len)) {
- continue;
- }
- _CompactStringRelease(pKey);
- pKey->m_CompactLen = 0xfe;
- return;
+ return;
+ }
+ _CompactString* pKey = (_CompactString*)m_Buffer.Add();
+ _CompactStringStore(pKey, key.GetPtr(), key_len);
+ *(void**)(pKey + 1) = value;
+}
+void CFX_CMapByteStringToPtr::AddValue(const CFX_ByteStringC& key,
+ void* value) {
+ ASSERT(value != NULL);
+ _CompactString* pKey = (_CompactString*)m_Buffer.Add();
+ _CompactStringStore(pKey, key.GetPtr(), key.GetLength());
+ *(void**)(pKey + 1) = value;
+}
+void CFX_CMapByteStringToPtr::RemoveKey(const CFX_ByteStringC& key) {
+ int key_len = key.GetLength();
+ int size = m_Buffer.GetSize();
+ for (int index = 0; index < size; index++) {
+ _CompactString* pKey = (_CompactString*)m_Buffer.GetAt(index);
+ if (!_CompactStringSame(pKey, key.GetPtr(), key_len)) {
+ continue;
}
+ _CompactStringRelease(pKey);
+ pKey->m_CompactLen = 0xfe;
+ return;
+ }
}
-int CFX_CMapByteStringToPtr::GetCount() const
-{
- int count = 0;
- int size = m_Buffer.GetSize();
- for (int i = 0; i < size; i ++) {
- _CompactString* pKey = (_CompactString*)m_Buffer.GetAt(i);
- if (pKey->m_CompactLen != 0xfe) {
- count ++;
- }
+int CFX_CMapByteStringToPtr::GetCount() const {
+ int count = 0;
+ int size = m_Buffer.GetSize();
+ for (int i = 0; i < size; i++) {
+ _CompactString* pKey = (_CompactString*)m_Buffer.GetAt(i);
+ if (pKey->m_CompactLen != 0xfe) {
+ count++;
}
- return count;
+ }
+ return count;
}
extern "C" {
- static int _CompareDWord(const void* p1, const void* p2)
- {
- return (*(FX_DWORD*)p1) - (*(FX_DWORD*)p2);
- }
+static int _CompareDWord(const void* p1, const void* p2) {
+ return (*(FX_DWORD*)p1) - (*(FX_DWORD*)p2);
+}
};
struct _DWordPair {
- FX_DWORD key;
- FX_DWORD value;
+ FX_DWORD key;
+ FX_DWORD value;
};
-FX_BOOL CFX_CMapDWordToDWord::Lookup(FX_DWORD key, FX_DWORD& value) const
-{
- void* pResult = FXSYS_bsearch(&key, m_Buffer.GetBuffer(), m_Buffer.GetSize() / sizeof(_DWordPair),
- sizeof(_DWordPair), _CompareDWord);
- if (pResult == NULL) {
- return FALSE;
- }
- value = ((FX_DWORD*)pResult)[1];
- return TRUE;
-}
-FX_POSITION CFX_CMapDWordToDWord::GetStartPosition() const
-{
- FX_DWORD count = m_Buffer.GetSize() / sizeof(_DWordPair);
- if (count == 0) {
- return NULL;
- }
- return (FX_POSITION)1;
+FX_BOOL CFX_CMapDWordToDWord::Lookup(FX_DWORD key, FX_DWORD& value) const {
+ void* pResult = FXSYS_bsearch(&key, m_Buffer.GetBuffer(),
+ m_Buffer.GetSize() / sizeof(_DWordPair),
+ sizeof(_DWordPair), _CompareDWord);
+ if (pResult == NULL) {
+ return FALSE;
+ }
+ value = ((FX_DWORD*)pResult)[1];
+ return TRUE;
}
-void CFX_CMapDWordToDWord::GetNextAssoc(FX_POSITION& pos, FX_DWORD& key, FX_DWORD& value) const
-{
- if (pos == 0) {
- return;
- }
- FX_DWORD index = ((FX_DWORD)(uintptr_t)pos) - 1;
- FX_DWORD count = m_Buffer.GetSize() / sizeof(_DWordPair);
- _DWordPair* buf = (_DWordPair*)m_Buffer.GetBuffer();
- key = buf[index].key;
- value = buf[index].value;
- if (index == count - 1) {
- pos = 0;
+FX_POSITION CFX_CMapDWordToDWord::GetStartPosition() const {
+ FX_DWORD count = m_Buffer.GetSize() / sizeof(_DWordPair);
+ if (count == 0) {
+ return NULL;
+ }
+ return (FX_POSITION)1;
+}
+void CFX_CMapDWordToDWord::GetNextAssoc(FX_POSITION& pos,
+ FX_DWORD& key,
+ FX_DWORD& value) const {
+ if (pos == 0) {
+ return;
+ }
+ FX_DWORD index = ((FX_DWORD)(uintptr_t)pos) - 1;
+ FX_DWORD count = m_Buffer.GetSize() / sizeof(_DWordPair);
+ _DWordPair* buf = (_DWordPair*)m_Buffer.GetBuffer();
+ key = buf[index].key;
+ value = buf[index].value;
+ if (index == count - 1) {
+ pos = 0;
+ } else {
+ pos = (FX_POSITION)((uintptr_t)pos + 1);
+ }
+}
+void CFX_CMapDWordToDWord::SetAt(FX_DWORD key, FX_DWORD value) {
+ FX_DWORD count = m_Buffer.GetSize() / sizeof(_DWordPair);
+ _DWordPair* buf = (_DWordPair*)m_Buffer.GetBuffer();
+ _DWordPair pair = {key, value};
+ if (count == 0 || key > buf[count - 1].key) {
+ m_Buffer.AppendBlock(&pair, sizeof(_DWordPair));
+ return;
+ }
+ int low = 0, high = count - 1;
+ while (low <= high) {
+ int mid = (low + high) / 2;
+ if (buf[mid].key < key) {
+ low = mid + 1;
+ } else if (buf[mid].key > key) {
+ high = mid - 1;
} else {
- pos = (FX_POSITION)((uintptr_t)pos + 1);
- }
-}
-void CFX_CMapDWordToDWord::SetAt(FX_DWORD key, FX_DWORD value)
-{
- FX_DWORD count = m_Buffer.GetSize() / sizeof(_DWordPair);
- _DWordPair* buf = (_DWordPair*)m_Buffer.GetBuffer();
- _DWordPair pair = {key, value};
- if (count == 0 || key > buf[count - 1].key) {
- m_Buffer.AppendBlock(&pair, sizeof(_DWordPair));
- return;
- }
- int low = 0, high = count - 1;
- while (low <= high) {
- int mid = (low + high) / 2;
- if (buf[mid].key < key) {
- low = mid + 1;
- } else if (buf[mid].key > key) {
- high = mid - 1;
- } else {
- buf[mid].value = value;
- return;
- }
+ buf[mid].value = value;
+ return;
}
- m_Buffer.InsertBlock(low * sizeof(_DWordPair), &pair, sizeof(_DWordPair));
+ }
+ m_Buffer.InsertBlock(low * sizeof(_DWordPair), &pair, sizeof(_DWordPair));
}
-void CFX_CMapDWordToDWord::EstimateSize(FX_DWORD size, FX_DWORD grow_by)
-{
- m_Buffer.EstimateSize(size, grow_by);
+void CFX_CMapDWordToDWord::EstimateSize(FX_DWORD size, FX_DWORD grow_by) {
+ m_Buffer.EstimateSize(size, grow_by);
}
diff --git a/core/src/fxcrt/fx_basic_memmgr.cpp b/core/src/fxcrt/fx_basic_memmgr.cpp
index 2ae9075f04..ebc25851f6 100644
--- a/core/src/fxcrt/fx_basic_memmgr.cpp
+++ b/core/src/fxcrt/fx_basic_memmgr.cpp
@@ -7,66 +7,60 @@
#include <stdlib.h> // For abort().
#include "../../include/fxcrt/fx_memory.h"
-void* FXMEM_DefaultAlloc(size_t byte_size, int flags)
-{
- return (void*)malloc(byte_size);
+void* FXMEM_DefaultAlloc(size_t byte_size, int flags) {
+ return (void*)malloc(byte_size);
}
-void* FXMEM_DefaultRealloc(void* pointer, size_t new_size, int flags)
-{
- return realloc(pointer, new_size);
+void* FXMEM_DefaultRealloc(void* pointer, size_t new_size, int flags) {
+ return realloc(pointer, new_size);
}
-void FXMEM_DefaultFree(void* pointer, int flags)
-{
- free(pointer);
+void FXMEM_DefaultFree(void* pointer, int flags) {
+ free(pointer);
}
NEVER_INLINE void FX_OutOfMemoryTerminate() {
- // Termimate cleanly if we can, else crash at a specific address (0xbd).
- abort();
- reinterpret_cast<void(*)()>(0xbd)();
+ // Termimate cleanly if we can, else crash at a specific address (0xbd).
+ abort();
+ reinterpret_cast<void (*)()>(0xbd)();
}
-CFX_GrowOnlyPool::CFX_GrowOnlyPool(size_t trunk_size)
-{
- m_TrunkSize = trunk_size;
- m_pFirstTrunk = NULL;
+CFX_GrowOnlyPool::CFX_GrowOnlyPool(size_t trunk_size) {
+ m_TrunkSize = trunk_size;
+ m_pFirstTrunk = NULL;
}
-CFX_GrowOnlyPool::~CFX_GrowOnlyPool()
-{
- FreeAll();
+CFX_GrowOnlyPool::~CFX_GrowOnlyPool() {
+ FreeAll();
}
struct _FX_GrowOnlyTrunk {
- size_t m_Size;
- size_t m_Allocated;
- _FX_GrowOnlyTrunk* m_pNext;
+ size_t m_Size;
+ size_t m_Allocated;
+ _FX_GrowOnlyTrunk* m_pNext;
};
-void CFX_GrowOnlyPool::FreeAll()
-{
- _FX_GrowOnlyTrunk* pTrunk = (_FX_GrowOnlyTrunk*)m_pFirstTrunk;
- while (pTrunk) {
- _FX_GrowOnlyTrunk* pNext = pTrunk->m_pNext;
- FX_Free(pTrunk);
- pTrunk = pNext;
- }
- m_pFirstTrunk = NULL;
+void CFX_GrowOnlyPool::FreeAll() {
+ _FX_GrowOnlyTrunk* pTrunk = (_FX_GrowOnlyTrunk*)m_pFirstTrunk;
+ while (pTrunk) {
+ _FX_GrowOnlyTrunk* pNext = pTrunk->m_pNext;
+ FX_Free(pTrunk);
+ pTrunk = pNext;
+ }
+ m_pFirstTrunk = NULL;
}
-void* CFX_GrowOnlyPool::Alloc(size_t size)
-{
- size = (size + 3) / 4 * 4;
- _FX_GrowOnlyTrunk* pTrunk = (_FX_GrowOnlyTrunk*)m_pFirstTrunk;
- while (pTrunk) {
- if (pTrunk->m_Size - pTrunk->m_Allocated >= size) {
- void* p = (uint8_t*)(pTrunk + 1) + pTrunk->m_Allocated;
- pTrunk->m_Allocated += size;
- return p;
- }
- pTrunk = pTrunk->m_pNext;
+void* CFX_GrowOnlyPool::Alloc(size_t size) {
+ size = (size + 3) / 4 * 4;
+ _FX_GrowOnlyTrunk* pTrunk = (_FX_GrowOnlyTrunk*)m_pFirstTrunk;
+ while (pTrunk) {
+ if (pTrunk->m_Size - pTrunk->m_Allocated >= size) {
+ void* p = (uint8_t*)(pTrunk + 1) + pTrunk->m_Allocated;
+ pTrunk->m_Allocated += size;
+ return p;
}
- size_t alloc_size = size > m_TrunkSize ? size : m_TrunkSize;
- pTrunk = (_FX_GrowOnlyTrunk*)FX_Alloc(uint8_t, sizeof(_FX_GrowOnlyTrunk) + alloc_size);
- pTrunk->m_Size = alloc_size;
- pTrunk->m_Allocated = size;
- pTrunk->m_pNext = (_FX_GrowOnlyTrunk*)m_pFirstTrunk;
- m_pFirstTrunk = pTrunk;
- return pTrunk + 1;
+ pTrunk = pTrunk->m_pNext;
+ }
+ size_t alloc_size = size > m_TrunkSize ? size : m_TrunkSize;
+ pTrunk = (_FX_GrowOnlyTrunk*)FX_Alloc(uint8_t,
+ sizeof(_FX_GrowOnlyTrunk) + alloc_size);
+ pTrunk->m_Size = alloc_size;
+ pTrunk->m_Allocated = size;
+ pTrunk->m_pNext = (_FX_GrowOnlyTrunk*)m_pFirstTrunk;
+ m_pFirstTrunk = pTrunk;
+ return pTrunk + 1;
}
diff --git a/core/src/fxcrt/fx_basic_memmgr_unittest.cpp b/core/src/fxcrt/fx_basic_memmgr_unittest.cpp
index 94e26c88b2..819cbb4d08 100644
--- a/core/src/fxcrt/fx_basic_memmgr_unittest.cpp
+++ b/core/src/fxcrt/fx_basic_memmgr_unittest.cpp
@@ -20,52 +20,51 @@ const size_t kOverflowIntAlloc2D = kMaxIntAlloc / kWidth + 10;
// TODO(tsepez): re-enable OOM tests if we can find a way to
// prevent it from hosing the bots.
TEST(fxcrt, DISABLED_FX_AllocOOM) {
- EXPECT_DEATH_IF_SUPPORTED((void) FX_Alloc(int, kMaxIntAlloc), "");
+ EXPECT_DEATH_IF_SUPPORTED((void)FX_Alloc(int, kMaxIntAlloc), "");
- int* ptr = FX_Alloc(int, 1);
- EXPECT_TRUE(ptr);
- EXPECT_DEATH_IF_SUPPORTED((void) FX_Realloc(int, ptr, kMaxIntAlloc), "");
- FX_Free(ptr);
+ int* ptr = FX_Alloc(int, 1);
+ EXPECT_TRUE(ptr);
+ EXPECT_DEATH_IF_SUPPORTED((void)FX_Realloc(int, ptr, kMaxIntAlloc), "");
+ FX_Free(ptr);
}
TEST(fxcrt, FX_AllocOverflow) {
- EXPECT_DEATH_IF_SUPPORTED((void) FX_Alloc(int, kOverflowIntAlloc), "");
+ EXPECT_DEATH_IF_SUPPORTED((void)FX_Alloc(int, kOverflowIntAlloc), "");
- int* ptr = FX_Alloc(int, 1);
- EXPECT_TRUE(ptr);
- EXPECT_DEATH_IF_SUPPORTED(
- (void) FX_Realloc(int, ptr, kOverflowIntAlloc), "");
- FX_Free(ptr);
+ int* ptr = FX_Alloc(int, 1);
+ EXPECT_TRUE(ptr);
+ EXPECT_DEATH_IF_SUPPORTED((void)FX_Realloc(int, ptr, kOverflowIntAlloc), "");
+ FX_Free(ptr);
}
TEST(fxcrt, FX_AllocOverflow2D) {
- EXPECT_DEATH_IF_SUPPORTED(
- (void) FX_Alloc2D(int, kWidth, kOverflowIntAlloc2D), "");
+ EXPECT_DEATH_IF_SUPPORTED((void)FX_Alloc2D(int, kWidth, kOverflowIntAlloc2D),
+ "");
}
TEST(fxcrt, DISABLED_FX_TryAllocOOM) {
- EXPECT_FALSE(FX_TryAlloc(int, kMaxIntAlloc));
+ EXPECT_FALSE(FX_TryAlloc(int, kMaxIntAlloc));
- int* ptr = FX_Alloc(int, 1);
- EXPECT_TRUE(ptr);
- EXPECT_FALSE(FX_TryRealloc(int, ptr, kMaxIntAlloc));
- FX_Free(ptr);
+ int* ptr = FX_Alloc(int, 1);
+ EXPECT_TRUE(ptr);
+ EXPECT_FALSE(FX_TryRealloc(int, ptr, kMaxIntAlloc));
+ FX_Free(ptr);
}
TEST(fxcrt, FX_TryAllocOverflow) {
- EXPECT_FALSE(FX_TryAlloc(int, kOverflowIntAlloc));
+ EXPECT_FALSE(FX_TryAlloc(int, kOverflowIntAlloc));
- int* ptr = FX_Alloc(int, 1);
- EXPECT_TRUE(ptr);
- EXPECT_FALSE(FX_TryRealloc(int, ptr, kOverflowIntAlloc));
- FX_Free(ptr);
+ int* ptr = FX_Alloc(int, 1);
+ EXPECT_TRUE(ptr);
+ EXPECT_FALSE(FX_TryRealloc(int, ptr, kOverflowIntAlloc));
+ FX_Free(ptr);
}
TEST(fxcrt, DISABLED_FXMEM_DefaultOOM) {
- EXPECT_FALSE(FXMEM_DefaultAlloc(kMaxByteAlloc, 0));
+ EXPECT_FALSE(FXMEM_DefaultAlloc(kMaxByteAlloc, 0));
- void* ptr = FXMEM_DefaultAlloc(1, 0);
- EXPECT_TRUE(ptr);
- EXPECT_FALSE(FXMEM_DefaultRealloc(ptr, kMaxByteAlloc, 0));
- FXMEM_DefaultFree(ptr, 0);
+ void* ptr = FXMEM_DefaultAlloc(1, 0);
+ EXPECT_TRUE(ptr);
+ EXPECT_FALSE(FXMEM_DefaultRealloc(ptr, kMaxByteAlloc, 0));
+ FXMEM_DefaultFree(ptr, 0);
}
diff --git a/core/src/fxcrt/fx_basic_plex.cpp b/core/src/fxcrt/fx_basic_plex.cpp
index c9088bc93d..b01ad8a274 100644
--- a/core/src/fxcrt/fx_basic_plex.cpp
+++ b/core/src/fxcrt/fx_basic_plex.cpp
@@ -7,20 +7,21 @@
#include "../../include/fxcrt/fx_memory.h"
#include "plex.h"
-CFX_Plex* CFX_Plex::Create(CFX_Plex*& pHead, FX_DWORD nMax, FX_DWORD cbElement)
-{
- CFX_Plex* p = (CFX_Plex*)FX_Alloc(uint8_t, sizeof(CFX_Plex) + nMax * cbElement);
- p->pNext = pHead;
- pHead = p;
- return p;
+CFX_Plex* CFX_Plex::Create(CFX_Plex*& pHead,
+ FX_DWORD nMax,
+ FX_DWORD cbElement) {
+ CFX_Plex* p =
+ (CFX_Plex*)FX_Alloc(uint8_t, sizeof(CFX_Plex) + nMax * cbElement);
+ p->pNext = pHead;
+ pHead = p;
+ return p;
}
-void CFX_Plex::FreeDataChain()
-{
- CFX_Plex* p = this;
- while (p != NULL) {
- uint8_t* bytes = (uint8_t*)p;
- CFX_Plex* pNext = p->pNext;
- FX_Free(bytes);
- p = pNext;
- }
+void CFX_Plex::FreeDataChain() {
+ CFX_Plex* p = this;
+ while (p != NULL) {
+ uint8_t* bytes = (uint8_t*)p;
+ CFX_Plex* pNext = p->pNext;
+ FX_Free(bytes);
+ p = pNext;
+ }
}
diff --git a/core/src/fxcrt/fx_basic_utf.cpp b/core/src/fxcrt/fx_basic_utf.cpp
index 5413ead0d5..a9ad82f4b7 100644
--- a/core/src/fxcrt/fx_basic_utf.cpp
+++ b/core/src/fxcrt/fx_basic_utf.cpp
@@ -5,86 +5,81 @@
// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
#include "../../include/fxcrt/fx_basic.h"
-void CFX_UTF8Decoder::Clear()
-{
- m_Buffer.Clear();
- m_PendingBytes = 0;
+void CFX_UTF8Decoder::Clear() {
+ m_Buffer.Clear();
+ m_PendingBytes = 0;
}
-void CFX_UTF8Decoder::AppendChar(FX_DWORD ch)
-{
- m_Buffer.AppendChar((FX_WCHAR)ch);
+void CFX_UTF8Decoder::AppendChar(FX_DWORD ch) {
+ m_Buffer.AppendChar((FX_WCHAR)ch);
}
-void CFX_UTF8Decoder::Input(uint8_t byte)
-{
- if (byte < 0x80) {
- m_PendingBytes = 0;
- m_Buffer.AppendChar(byte);
- } else if (byte < 0xc0) {
- if (m_PendingBytes == 0) {
- return;
- }
- m_PendingBytes --;
- m_PendingChar |= (byte & 0x3f) << (m_PendingBytes * 6);
- if (m_PendingBytes == 0) {
- AppendChar(m_PendingChar);
- }
- } else if (byte < 0xe0) {
- m_PendingBytes = 1;
- m_PendingChar = (byte & 0x1f) << 6;
- } else if (byte < 0xf0) {
- m_PendingBytes = 2;
- m_PendingChar = (byte & 0x0f) << 12;
- } else if (byte < 0xf8) {
- m_PendingBytes = 3;
- m_PendingChar = (byte & 0x07) << 18;
- } else if (byte < 0xfc) {
- m_PendingBytes = 4;
- m_PendingChar = (byte & 0x03) << 24;
- } else if (byte < 0xfe) {
- m_PendingBytes = 5;
- m_PendingChar = (byte & 0x01) << 30;
+void CFX_UTF8Decoder::Input(uint8_t byte) {
+ if (byte < 0x80) {
+ m_PendingBytes = 0;
+ m_Buffer.AppendChar(byte);
+ } else if (byte < 0xc0) {
+ if (m_PendingBytes == 0) {
+ return;
}
-}
-void CFX_UTF8Encoder::Input(FX_WCHAR unicode)
-{
- if ((FX_DWORD)unicode < 0x80) {
- m_Buffer.AppendChar(unicode);
- } else {
- if ((FX_DWORD)unicode >= 0x80000000) {
- return;
- }
- int nbytes = 0;
- if ((FX_DWORD)unicode < 0x800) {
- nbytes = 2;
- } else if ((FX_DWORD)unicode < 0x10000) {
- nbytes = 3;
- } else if ((FX_DWORD)unicode < 0x200000) {
- nbytes = 4;
- } else if ((FX_DWORD)unicode < 0x4000000) {
- nbytes = 5;
- } else {
- nbytes = 6;
- }
- static uint8_t prefix[] = {0xc0, 0xe0, 0xf0, 0xf8, 0xfc};
- int order = 1 << ((nbytes - 1) * 6);
- int code = unicode;
- m_Buffer.AppendChar(prefix[nbytes - 2] | (code / order));
- for (int i = 0; i < nbytes - 1; i ++) {
- code = code % order;
- order >>= 6;
- m_Buffer.AppendChar(0x80 | (code / order));
- }
+ m_PendingBytes--;
+ m_PendingChar |= (byte & 0x3f) << (m_PendingBytes * 6);
+ if (m_PendingBytes == 0) {
+ AppendChar(m_PendingChar);
}
+ } else if (byte < 0xe0) {
+ m_PendingBytes = 1;
+ m_PendingChar = (byte & 0x1f) << 6;
+ } else if (byte < 0xf0) {
+ m_PendingBytes = 2;
+ m_PendingChar = (byte & 0x0f) << 12;
+ } else if (byte < 0xf8) {
+ m_PendingBytes = 3;
+ m_PendingChar = (byte & 0x07) << 18;
+ } else if (byte < 0xfc) {
+ m_PendingBytes = 4;
+ m_PendingChar = (byte & 0x03) << 24;
+ } else if (byte < 0xfe) {
+ m_PendingBytes = 5;
+ m_PendingChar = (byte & 0x01) << 30;
+ }
}
-CFX_ByteString FX_UTF8Encode(const FX_WCHAR* pwsStr, FX_STRSIZE len)
-{
- FXSYS_assert(pwsStr != NULL);
- if (len < 0) {
- len = FXSYS_wcslen(pwsStr);
+void CFX_UTF8Encoder::Input(FX_WCHAR unicode) {
+ if ((FX_DWORD)unicode < 0x80) {
+ m_Buffer.AppendChar(unicode);
+ } else {
+ if ((FX_DWORD)unicode >= 0x80000000) {
+ return;
}
- CFX_UTF8Encoder encoder;
- while (len -- > 0) {
- encoder.Input(*pwsStr ++);
+ int nbytes = 0;
+ if ((FX_DWORD)unicode < 0x800) {
+ nbytes = 2;
+ } else if ((FX_DWORD)unicode < 0x10000) {
+ nbytes = 3;
+ } else if ((FX_DWORD)unicode < 0x200000) {
+ nbytes = 4;
+ } else if ((FX_DWORD)unicode < 0x4000000) {
+ nbytes = 5;
+ } else {
+ nbytes = 6;
+ }
+ static uint8_t prefix[] = {0xc0, 0xe0, 0xf0, 0xf8, 0xfc};
+ int order = 1 << ((nbytes - 1) * 6);
+ int code = unicode;
+ m_Buffer.AppendChar(prefix[nbytes - 2] | (code / order));
+ for (int i = 0; i < nbytes - 1; i++) {
+ code = code % order;
+ order >>= 6;
+ m_Buffer.AppendChar(0x80 | (code / order));
}
- return encoder.GetResult();
+ }
+}
+CFX_ByteString FX_UTF8Encode(const FX_WCHAR* pwsStr, FX_STRSIZE len) {
+ FXSYS_assert(pwsStr != NULL);
+ if (len < 0) {
+ len = FXSYS_wcslen(pwsStr);
+ }
+ CFX_UTF8Encoder encoder;
+ while (len-- > 0) {
+ encoder.Input(*pwsStr++);
+ }
+ return encoder.GetResult();
}
diff --git a/core/src/fxcrt/fx_basic_util.cpp b/core/src/fxcrt/fx_basic_util.cpp
index 26eeacce1b..7d27e7e2b1 100644
--- a/core/src/fxcrt/fx_basic_util.cpp
+++ b/core/src/fxcrt/fx_basic_util.cpp
@@ -11,486 +11,456 @@
#else
#include <direct.h>
#endif
-CFX_PrivateData::~CFX_PrivateData()
-{
- ClearAll();
+CFX_PrivateData::~CFX_PrivateData() {
+ ClearAll();
}
-void FX_PRIVATEDATA::FreeData()
-{
- if (m_pData == NULL) {
- return;
- }
- if (m_bSelfDestruct) {
- delete (CFX_DestructObject*)m_pData;
- } else if (m_pCallback) {
- m_pCallback(m_pData);
- }
+void FX_PRIVATEDATA::FreeData() {
+ if (m_pData == NULL) {
+ return;
+ }
+ if (m_bSelfDestruct) {
+ delete (CFX_DestructObject*)m_pData;
+ } else if (m_pCallback) {
+ m_pCallback(m_pData);
+ }
}
-void CFX_PrivateData::AddData(void* pModuleId, void* pData, PD_CALLBACK_FREEDATA callback, FX_BOOL bSelfDestruct)
-{
- if (pModuleId == NULL) {
- return;
- }
- FX_PRIVATEDATA* pList = m_DataList.GetData();
- int count = m_DataList.GetSize();
- for (int i = 0; i < count; i ++) {
- if (pList[i].m_pModuleId == pModuleId) {
- pList[i].FreeData();
- pList[i].m_pData = pData;
- pList[i].m_pCallback = callback;
- return;
- }
- }
- FX_PRIVATEDATA data = {pModuleId, pData, callback, bSelfDestruct};
- m_DataList.Add(data);
+void CFX_PrivateData::AddData(void* pModuleId,
+ void* pData,
+ PD_CALLBACK_FREEDATA callback,
+ FX_BOOL bSelfDestruct) {
+ if (pModuleId == NULL) {
+ return;
+ }
+ FX_PRIVATEDATA* pList = m_DataList.GetData();
+ int count = m_DataList.GetSize();
+ for (int i = 0; i < count; i++) {
+ if (pList[i].m_pModuleId == pModuleId) {
+ pList[i].FreeData();
+ pList[i].m_pData = pData;
+ pList[i].m_pCallback = callback;
+ return;
+ }
+ }
+ FX_PRIVATEDATA data = {pModuleId, pData, callback, bSelfDestruct};
+ m_DataList.Add(data);
}
-void CFX_PrivateData::SetPrivateData(void* pModuleId, void* pData, PD_CALLBACK_FREEDATA callback)
-{
- AddData(pModuleId, pData, callback, FALSE);
+void CFX_PrivateData::SetPrivateData(void* pModuleId,
+ void* pData,
+ PD_CALLBACK_FREEDATA callback) {
+ AddData(pModuleId, pData, callback, FALSE);
}
-void CFX_PrivateData::SetPrivateObj(void* pModuleId, CFX_DestructObject* pObj)
-{
- AddData(pModuleId, pObj, NULL, TRUE);
+void CFX_PrivateData::SetPrivateObj(void* pModuleId, CFX_DestructObject* pObj) {
+ AddData(pModuleId, pObj, NULL, TRUE);
}
-FX_BOOL CFX_PrivateData::RemovePrivateData(void* pModuleId)
-{
- if (pModuleId == NULL) {
- return FALSE;
- }
- FX_PRIVATEDATA* pList = m_DataList.GetData();
- int count = m_DataList.GetSize();
- for (int i = 0; i < count; i ++) {
- if (pList[i].m_pModuleId == pModuleId) {
- m_DataList.RemoveAt(i);
- return TRUE;
- }
- }
+FX_BOOL CFX_PrivateData::RemovePrivateData(void* pModuleId) {
+ if (pModuleId == NULL) {
return FALSE;
+ }
+ FX_PRIVATEDATA* pList = m_DataList.GetData();
+ int count = m_DataList.GetSize();
+ for (int i = 0; i < count; i++) {
+ if (pList[i].m_pModuleId == pModuleId) {
+ m_DataList.RemoveAt(i);
+ return TRUE;
+ }
+ }
+ return FALSE;
}
-void* CFX_PrivateData::GetPrivateData(void* pModuleId)
-{
- if (pModuleId == NULL) {
- return NULL;
- }
- FX_PRIVATEDATA* pList = m_DataList.GetData();
- int count = m_DataList.GetSize();
- for (int i = 0; i < count; i ++) {
- if (pList[i].m_pModuleId == pModuleId) {
- return pList[i].m_pData;
- }
- }
+void* CFX_PrivateData::GetPrivateData(void* pModuleId) {
+ if (pModuleId == NULL) {
return NULL;
+ }
+ FX_PRIVATEDATA* pList = m_DataList.GetData();
+ int count = m_DataList.GetSize();
+ for (int i = 0; i < count; i++) {
+ if (pList[i].m_pModuleId == pModuleId) {
+ return pList[i].m_pData;
+ }
+ }
+ return NULL;
}
-void CFX_PrivateData::ClearAll()
-{
- FX_PRIVATEDATA* pList = m_DataList.GetData();
- int count = m_DataList.GetSize();
- for (int i = 0; i < count; i ++) {
- pList[i].FreeData();
- }
- m_DataList.RemoveAll();
-}
-void FX_atonum(const CFX_ByteStringC& strc, FX_BOOL& bInteger, void* pData)
-{
- if (FXSYS_memchr(strc.GetPtr(), '.', strc.GetLength()) == NULL) {
- bInteger = TRUE;
- int cc = 0, integer = 0;
- const FX_CHAR* str = strc.GetCStr();
- int len = strc.GetLength();
- FX_BOOL bNegative = FALSE;
- if (str[0] == '+') {
- cc++;
- } else if (str[0] == '-') {
- bNegative = TRUE;
- cc++;
- }
- while (cc < len) {
- if (str[cc] < '0' || str[cc] > '9') {
- break;
- }
- integer = integer * 10 + str[cc] - '0';
- if (integer < 0) {
- break;
- }
- cc ++;
- }
- if (bNegative) {
- integer = -integer;
- }
- *(int*)pData = integer;
- } else {
- bInteger = FALSE;
- *(FX_FLOAT*)pData = FX_atof(strc);
- }
+void CFX_PrivateData::ClearAll() {
+ FX_PRIVATEDATA* pList = m_DataList.GetData();
+ int count = m_DataList.GetSize();
+ for (int i = 0; i < count; i++) {
+ pList[i].FreeData();
+ }
+ m_DataList.RemoveAll();
}
-FX_FLOAT FX_atof(const CFX_ByteStringC& strc)
-{
- if (strc.GetLength() == 0) {
- return 0.0;
- }
- int cc = 0;
- FX_BOOL bNegative = FALSE;
+void FX_atonum(const CFX_ByteStringC& strc, FX_BOOL& bInteger, void* pData) {
+ if (FXSYS_memchr(strc.GetPtr(), '.', strc.GetLength()) == NULL) {
+ bInteger = TRUE;
+ int cc = 0, integer = 0;
const FX_CHAR* str = strc.GetCStr();
int len = strc.GetLength();
+ FX_BOOL bNegative = FALSE;
if (str[0] == '+') {
- cc++;
+ cc++;
} else if (str[0] == '-') {
- bNegative = TRUE;
- cc++;
+ bNegative = TRUE;
+ cc++;
}
while (cc < len) {
- if (str[cc] != '+' && str[cc] != '-') {
- break;
- }
- cc ++;
- }
- FX_FLOAT value = 0;
+ if (str[cc] < '0' || str[cc] > '9') {
+ break;
+ }
+ integer = integer * 10 + str[cc] - '0';
+ if (integer < 0) {
+ break;
+ }
+ cc++;
+ }
+ if (bNegative) {
+ integer = -integer;
+ }
+ *(int*)pData = integer;
+ } else {
+ bInteger = FALSE;
+ *(FX_FLOAT*)pData = FX_atof(strc);
+ }
+}
+FX_FLOAT FX_atof(const CFX_ByteStringC& strc) {
+ if (strc.GetLength() == 0) {
+ return 0.0;
+ }
+ int cc = 0;
+ FX_BOOL bNegative = FALSE;
+ const FX_CHAR* str = strc.GetCStr();
+ int len = strc.GetLength();
+ if (str[0] == '+') {
+ cc++;
+ } else if (str[0] == '-') {
+ bNegative = TRUE;
+ cc++;
+ }
+ while (cc < len) {
+ if (str[cc] != '+' && str[cc] != '-') {
+ break;
+ }
+ cc++;
+ }
+ FX_FLOAT value = 0;
+ while (cc < len) {
+ if (str[cc] == '.') {
+ break;
+ }
+ value = value * 10 + str[cc] - '0';
+ cc++;
+ }
+ static const FX_FLOAT fraction_scales[] = {
+ 0.1f, 0.01f, 0.001f, 0.0001f,
+ 0.00001f, 0.000001f, 0.0000001f, 0.00000001f,
+ 0.000000001f, 0.0000000001f, 0.00000000001f};
+ int scale = 0;
+ if (cc < len && str[cc] == '.') {
+ cc++;
while (cc < len) {
- if (str[cc] == '.') {
- break;
- }
- value = value * 10 + str[cc] - '0';
- cc ++;
- }
- static const FX_FLOAT fraction_scales[] = {0.1f, 0.01f, 0.001f, 0.0001f, 0.00001f, 0.000001f,
- 0.0000001f, 0.00000001f, 0.000000001f, 0.0000000001f, 0.00000000001f
- };
- int scale = 0;
- if (cc < len && str[cc] == '.') {
- cc ++;
- while (cc < len) {
- value += fraction_scales[scale] * (str[cc] - '0');
- scale ++;
- if (scale == sizeof fraction_scales / sizeof(FX_FLOAT)) {
- break;
- }
- cc ++;
- }
- }
- return bNegative ? -value : value;
+ value += fraction_scales[scale] * (str[cc] - '0');
+ scale++;
+ if (scale == sizeof fraction_scales / sizeof(FX_FLOAT)) {
+ break;
+ }
+ cc++;
+ }
+ }
+ return bNegative ? -value : value;
}
#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ && _MSC_VER < 1900
-void FXSYS_snprintf(char *str, size_t size, _Printf_format_string_ const char* fmt, ...)
-{
- va_list ap;
- va_start(ap, fmt);
- FXSYS_vsnprintf(str, size, fmt, ap);
- va_end(ap);
+void FXSYS_snprintf(char* str,
+ size_t size,
+ _Printf_format_string_ const char* fmt,
+ ...) {
+ va_list ap;
+ va_start(ap, fmt);
+ FXSYS_vsnprintf(str, size, fmt, ap);
+ va_end(ap);
}
-void FXSYS_vsnprintf(char *str, size_t size, const char* fmt, va_list ap)
-{
- (void) _vsnprintf(str, size, fmt, ap);
- if (size) {
- str[size - 1] = 0;
- }
+void FXSYS_vsnprintf(char* str, size_t size, const char* fmt, va_list ap) {
+ (void)_vsnprintf(str, size, fmt, ap);
+ if (size) {
+ str[size - 1] = 0;
+ }
}
#endif // _FXM_PLATFORM_WINDOWS_ && _MSC_VER < 1900
-static FX_BOOL FX_IsDigit(uint8_t ch)
-{
- return (ch >= '0' && ch <= '9') ? TRUE : FALSE;
+static FX_BOOL FX_IsDigit(uint8_t ch) {
+ return (ch >= '0' && ch <= '9') ? TRUE : FALSE;
}
-static FX_BOOL FX_IsXDigit(uint8_t ch)
-{
- return (FX_IsDigit(ch) || (ch >= 'A' && ch <= 'F') || (ch >= 'a' && ch <= 'f')) ? TRUE : FALSE;
+static FX_BOOL FX_IsXDigit(uint8_t ch) {
+ return (FX_IsDigit(ch) || (ch >= 'A' && ch <= 'F') ||
+ (ch >= 'a' && ch <= 'f'))
+ ? TRUE
+ : FALSE;
}
-static uint8_t FX_MakeUpper(uint8_t ch)
-{
- if (ch < 'a' || ch > 'z') {
- return ch;
- }
- return ch - 32;
+static uint8_t FX_MakeUpper(uint8_t ch) {
+ if (ch < 'a' || ch > 'z') {
+ return ch;
+ }
+ return ch - 32;
}
-static int FX_HexToI(uint8_t ch)
-{
- ch = FX_MakeUpper(ch);
- return FX_IsDigit(ch) ? (ch - '0') : (ch - 55);
+static int FX_HexToI(uint8_t ch) {
+ ch = FX_MakeUpper(ch);
+ return FX_IsDigit(ch) ? (ch - '0') : (ch - 55);
}
static const unsigned char url_encodeTable[128] = {
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 0, 1, 1, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 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, 1, 1, 1, 1, 0,
- 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, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 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, 1, 1, 1, 1, 0, 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, 1, 1, 1, 1, 1,
};
-CFX_ByteString FX_UrlEncode(const CFX_WideString& wsUrl)
-{
- const char arDigits[] = "0123456789ABCDEF";
- CFX_ByteString rUrl;
- int nLength = wsUrl.GetLength();
- for (int i = 0; i < nLength; i++) {
- FX_DWORD word = wsUrl.GetAt(i);
- if (word > 0x7F || url_encodeTable[word] == 1) {
- CFX_ByteString bsUri = CFX_ByteString::FromUnicode((FX_WORD)word);
- int nByte = bsUri.GetLength();
- for (int j = 0; j < nByte; j++) {
- rUrl += '%';
- uint8_t code = bsUri.GetAt(j);
- rUrl += arDigits[code >> 4];
- rUrl += arDigits[code & 0x0F];
- }
- } else {
- rUrl += CFX_ByteString::FromUnicode((FX_WORD)word);
- }
+CFX_ByteString FX_UrlEncode(const CFX_WideString& wsUrl) {
+ const char arDigits[] = "0123456789ABCDEF";
+ CFX_ByteString rUrl;
+ int nLength = wsUrl.GetLength();
+ for (int i = 0; i < nLength; i++) {
+ FX_DWORD word = wsUrl.GetAt(i);
+ if (word > 0x7F || url_encodeTable[word] == 1) {
+ CFX_ByteString bsUri = CFX_ByteString::FromUnicode((FX_WORD)word);
+ int nByte = bsUri.GetLength();
+ for (int j = 0; j < nByte; j++) {
+ rUrl += '%';
+ uint8_t code = bsUri.GetAt(j);
+ rUrl += arDigits[code >> 4];
+ rUrl += arDigits[code & 0x0F];
+ }
+ } else {
+ rUrl += CFX_ByteString::FromUnicode((FX_WORD)word);
}
- return rUrl;
+ }
+ return rUrl;
}
-CFX_WideString FX_UrlDecode(const CFX_ByteString& bsUrl)
-{
- CFX_ByteString rUrl;
- int nLength = bsUrl.GetLength();
- for (int i = 0; i < nLength; i++) {
- if (i < nLength - 2 && bsUrl[i] == '%' && FX_IsXDigit(bsUrl[i + 1]) && FX_IsXDigit(bsUrl[i + 2])) {
- rUrl += (FX_HexToI(bsUrl[i + 1]) << 4 | FX_HexToI(bsUrl[i + 2]));
- i += 2;
- } else {
- rUrl += bsUrl[i];
- }
+CFX_WideString FX_UrlDecode(const CFX_ByteString& bsUrl) {
+ CFX_ByteString rUrl;
+ int nLength = bsUrl.GetLength();
+ for (int i = 0; i < nLength; i++) {
+ if (i < nLength - 2 && bsUrl[i] == '%' && FX_IsXDigit(bsUrl[i + 1]) &&
+ FX_IsXDigit(bsUrl[i + 2])) {
+ rUrl += (FX_HexToI(bsUrl[i + 1]) << 4 | FX_HexToI(bsUrl[i + 2]));
+ i += 2;
+ } else {
+ rUrl += bsUrl[i];
}
- return CFX_WideString::FromLocal(rUrl);
+ }
+ return CFX_WideString::FromLocal(rUrl);
}
-CFX_ByteString FX_EncodeURI(const CFX_WideString& wsURI)
-{
- const char arDigits[] = "0123456789ABCDEF";
- CFX_ByteString rURI;
- CFX_ByteString bsUri = wsURI.UTF8Encode();
- int nLength = bsUri.GetLength();
- for (int i = 0; i < nLength; i++) {
- uint8_t code = bsUri.GetAt(i);
- if (code > 0x7F || url_encodeTable[code] == 1) {
- rURI += '%';
- rURI += arDigits[code >> 4];
- rURI += arDigits[code & 0x0F];
- } else {
- rURI += code;
- }
+CFX_ByteString FX_EncodeURI(const CFX_WideString& wsURI) {
+ const char arDigits[] = "0123456789ABCDEF";
+ CFX_ByteString rURI;
+ CFX_ByteString bsUri = wsURI.UTF8Encode();
+ int nLength = bsUri.GetLength();
+ for (int i = 0; i < nLength; i++) {
+ uint8_t code = bsUri.GetAt(i);
+ if (code > 0x7F || url_encodeTable[code] == 1) {
+ rURI += '%';
+ rURI += arDigits[code >> 4];
+ rURI += arDigits[code & 0x0F];
+ } else {
+ rURI += code;
}
- return rURI;
+ }
+ return rURI;
}
-CFX_WideString FX_DecodeURI(const CFX_ByteString& bsURI)
-{
- CFX_ByteString rURI;
- int nLength = bsURI.GetLength();
- for (int i = 0; i < nLength; i++) {
- if (i < nLength - 2 && bsURI[i] == '%' && FX_IsXDigit(bsURI[i + 1]) && FX_IsXDigit(bsURI[i + 2])) {
- rURI += (FX_HexToI(bsURI[i + 1]) << 4 | FX_HexToI(bsURI[i + 2]));
- i += 2;
- } else {
- rURI += bsURI[i];
- }
+CFX_WideString FX_DecodeURI(const CFX_ByteString& bsURI) {
+ CFX_ByteString rURI;
+ int nLength = bsURI.GetLength();
+ for (int i = 0; i < nLength; i++) {
+ if (i < nLength - 2 && bsURI[i] == '%' && FX_IsXDigit(bsURI[i + 1]) &&
+ FX_IsXDigit(bsURI[i + 2])) {
+ rURI += (FX_HexToI(bsURI[i + 1]) << 4 | FX_HexToI(bsURI[i + 2]));
+ i += 2;
+ } else {
+ rURI += bsURI[i];
}
- return CFX_WideString::FromUTF8(rURI, rURI.GetLength());
+ }
+ return CFX_WideString::FromUTF8(rURI, rURI.GetLength());
}
#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
-class CFindFileData
-{
-public:
- virtual ~CFindFileData() {}
- HANDLE m_Handle;
- FX_BOOL m_bEnd;
+class CFindFileData {
+ public:
+ virtual ~CFindFileData() {}
+ HANDLE m_Handle;
+ FX_BOOL m_bEnd;
};
-class CFindFileDataA : public CFindFileData
-{
-public:
- virtual ~CFindFileDataA() {}
- WIN32_FIND_DATAA m_FindData;
+class CFindFileDataA : public CFindFileData {
+ public:
+ virtual ~CFindFileDataA() {}
+ WIN32_FIND_DATAA m_FindData;
};
-class CFindFileDataW : public CFindFileData
-{
-public:
- virtual ~CFindFileDataW() {}
- WIN32_FIND_DATAW m_FindData;
+class CFindFileDataW : public CFindFileData {
+ public:
+ virtual ~CFindFileDataW() {}
+ WIN32_FIND_DATAW m_FindData;
};
#endif
-void* FX_OpenFolder(const FX_CHAR* path)
-{
+void* FX_OpenFolder(const FX_CHAR* path) {
#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
#ifndef _WIN32_WCE
- CFindFileDataA* pData = new CFindFileDataA;
+ CFindFileDataA* pData = new CFindFileDataA;
#ifdef _FX_WINAPI_PARTITION_DESKTOP_
- pData->m_Handle = FindFirstFileA(CFX_ByteString(path) + "/*.*", &pData->m_FindData);
+ pData->m_Handle =
+ FindFirstFileA(CFX_ByteString(path) + "/*.*", &pData->m_FindData);
#else
- pData->m_Handle = FindFirstFileExA(CFX_ByteString(path) + "/*.*", FindExInfoStandard, &pData->m_FindData, FindExSearchNameMatch, NULL, 0);
+ pData->m_Handle =
+ FindFirstFileExA(CFX_ByteString(path) + "/*.*", FindExInfoStandard,
+ &pData->m_FindData, FindExSearchNameMatch, NULL, 0);
#endif
#else
- CFindFileDataW* pData = new CFindFileDataW;
- pData->m_Handle = FindFirstFileW(CFX_WideString::FromLocal(path) + L"/*.*", &pData->m_FindData);
+ CFindFileDataW* pData = new CFindFileDataW;
+ pData->m_Handle = FindFirstFileW(CFX_WideString::FromLocal(path) + L"/*.*",
+ &pData->m_FindData);
#endif
- if (pData->m_Handle == INVALID_HANDLE_VALUE) {
- delete pData;
- return NULL;
- }
- pData->m_bEnd = FALSE;
- return pData;
+ if (pData->m_Handle == INVALID_HANDLE_VALUE) {
+ delete pData;
+ return NULL;
+ }
+ pData->m_bEnd = FALSE;
+ return pData;
#else
- DIR* dir = opendir(path);
- return dir;
+ DIR* dir = opendir(path);
+ return dir;
#endif
}
-void* FX_OpenFolder(const FX_WCHAR* path)
-{
+void* FX_OpenFolder(const FX_WCHAR* path) {
#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
- CFindFileDataW* pData = new CFindFileDataW;
+ CFindFileDataW* pData = new CFindFileDataW;
#ifdef _FX_WINAPI_PARTITION_DESKTOP_
- pData->m_Handle = FindFirstFileW((CFX_WideString(path) + L"/*.*").c_str(), &pData->m_FindData);
+ pData->m_Handle = FindFirstFileW((CFX_WideString(path) + L"/*.*").c_str(),
+ &pData->m_FindData);
#else
- pData->m_Handle = FindFirstFileExW((CFX_WideString(path) + L"/*.*").c_str(), FindExInfoStandard, &pData->m_FindData, FindExSearchNameMatch, NULL, 0);
+ pData->m_Handle = FindFirstFileExW((CFX_WideString(path) + L"/*.*").c_str(),
+ FindExInfoStandard, &pData->m_FindData,
+ FindExSearchNameMatch, NULL, 0);
#endif
- if (pData->m_Handle == INVALID_HANDLE_VALUE) {
- delete pData;
- return NULL;
- }
- pData->m_bEnd = FALSE;
- return pData;
+ if (pData->m_Handle == INVALID_HANDLE_VALUE) {
+ delete pData;
+ return NULL;
+ }
+ pData->m_bEnd = FALSE;
+ return pData;
#else
- DIR* dir = opendir(CFX_ByteString::FromUnicode(path));
- return dir;
+ DIR* dir = opendir(CFX_ByteString::FromUnicode(path));
+ return dir;
#endif
}
-FX_BOOL FX_GetNextFile(void* handle, CFX_ByteString& filename, FX_BOOL& bFolder)
-{
- if (handle == NULL) {
- return FALSE;
- }
+FX_BOOL FX_GetNextFile(void* handle,
+ CFX_ByteString& filename,
+ FX_BOOL& bFolder) {
+ if (handle == NULL) {
+ return FALSE;
+ }
#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
#ifndef _WIN32_WCE
- CFindFileDataA* pData = (CFindFileDataA*)handle;
- if (pData->m_bEnd) {
- return FALSE;
- }
- filename = pData->m_FindData.cFileName;
- bFolder = pData->m_FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY;
- if (!FindNextFileA(pData->m_Handle, &pData->m_FindData)) {
- pData->m_bEnd = TRUE;
- }
- return TRUE;
+ CFindFileDataA* pData = (CFindFileDataA*)handle;
+ if (pData->m_bEnd) {
+ return FALSE;
+ }
+ filename = pData->m_FindData.cFileName;
+ bFolder = pData->m_FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY;
+ if (!FindNextFileA(pData->m_Handle, &pData->m_FindData)) {
+ pData->m_bEnd = TRUE;
+ }
+ return TRUE;
#else
- CFindFileDataW* pData = (CFindFileDataW*)handle;
- if (pData->m_bEnd) {
- return FALSE;
- }
- filename = CFX_ByteString::FromUnicode(pData->m_FindData.cFileName);
- bFolder = pData->m_FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY;
- if (!FindNextFileW(pData->m_Handle, &pData->m_FindData)) {
- pData->m_bEnd = TRUE;
- }
- return TRUE;
+ CFindFileDataW* pData = (CFindFileDataW*)handle;
+ if (pData->m_bEnd) {
+ return FALSE;
+ }
+ filename = CFX_ByteString::FromUnicode(pData->m_FindData.cFileName);
+ bFolder = pData->m_FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY;
+ if (!FindNextFileW(pData->m_Handle, &pData->m_FindData)) {
+ pData->m_bEnd = TRUE;
+ }
+ return TRUE;
#endif
#elif defined(__native_client__)
- abort();
- return FALSE;
+ abort();
+ return FALSE;
#else
- struct dirent *de = readdir((DIR*)handle);
- if (de == NULL) {
- return FALSE;
- }
- filename = de->d_name;
- bFolder = de->d_type == DT_DIR;
- return TRUE;
+ struct dirent* de = readdir((DIR*)handle);
+ if (de == NULL) {
+ return FALSE;
+ }
+ filename = de->d_name;
+ bFolder = de->d_type == DT_DIR;
+ return TRUE;
#endif
}
-FX_BOOL FX_GetNextFile(void* handle, CFX_WideString& filename, FX_BOOL& bFolder)
-{
- if (handle == NULL) {
- return FALSE;
- }
+FX_BOOL FX_GetNextFile(void* handle,
+ CFX_WideString& filename,
+ FX_BOOL& bFolder) {
+ if (handle == NULL) {
+ return FALSE;
+ }
#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
- CFindFileDataW* pData = (CFindFileDataW*)handle;
- if (pData->m_bEnd) {
- return FALSE;
- }
- filename = pData->m_FindData.cFileName;
- bFolder = pData->m_FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY;
- if (!FindNextFileW(pData->m_Handle, &pData->m_FindData)) {
- pData->m_bEnd = TRUE;
- }
- return TRUE;
-#elif defined(__native_client__)
- abort();
+ CFindFileDataW* pData = (CFindFileDataW*)handle;
+ if (pData->m_bEnd) {
return FALSE;
+ }
+ filename = pData->m_FindData.cFileName;
+ bFolder = pData->m_FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY;
+ if (!FindNextFileW(pData->m_Handle, &pData->m_FindData)) {
+ pData->m_bEnd = TRUE;
+ }
+ return TRUE;
+#elif defined(__native_client__)
+ abort();
+ return FALSE;
#else
- struct dirent *de = readdir((DIR*)handle);
- if (de == NULL) {
- return FALSE;
- }
- filename = CFX_WideString::FromLocal(de->d_name);
- bFolder = de->d_type == DT_DIR;
- return TRUE;
+ struct dirent* de = readdir((DIR*)handle);
+ if (de == NULL) {
+ return FALSE;
+ }
+ filename = CFX_WideString::FromLocal(de->d_name);
+ bFolder = de->d_type == DT_DIR;
+ return TRUE;
#endif
}
-void FX_CloseFolder(void* handle)
-{
- if (handle == NULL) {
- return;
- }
+void FX_CloseFolder(void* handle) {
+ if (handle == NULL) {
+ return;
+ }
#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
- CFindFileData* pData = (CFindFileData*)handle;
- FindClose(pData->m_Handle);
- delete pData;
+ CFindFileData* pData = (CFindFileData*)handle;
+ FindClose(pData->m_Handle);
+ delete pData;
#else
- closedir((DIR*)handle);
+ closedir((DIR*)handle);
#endif
}
-FX_WCHAR FX_GetFolderSeparator()
-{
+FX_WCHAR FX_GetFolderSeparator() {
#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
- return '\\';
+ return '\\';
#else
- return '/';
+ return '/';
#endif
}
-CFX_Matrix_3by3 CFX_Matrix_3by3::Inverse()
-{
- FX_FLOAT det = a*(e*i - f*h) - b*(i*d - f*g) + c*(d*h - e*g);
- if (FXSYS_fabs(det) < 0.0000001)
- return CFX_Matrix_3by3();
+CFX_Matrix_3by3 CFX_Matrix_3by3::Inverse() {
+ FX_FLOAT det =
+ a * (e * i - f * h) - b * (i * d - f * g) + c * (d * h - e * g);
+ if (FXSYS_fabs(det) < 0.0000001)
+ return CFX_Matrix_3by3();
- return CFX_Matrix_3by3(
- (e*i - f*h) / det,
- -(b*i - c*h) / det,
- (b*f - c*e) / det,
- -(d*i - f*g) / det,
- (a*i - c*g) / det,
- -(a*f - c*d) / det,
- (d*h - e*g) / det,
- -(a*h - b*g) / det,
- (a*e - b*d) / det
- );
+ return CFX_Matrix_3by3(
+ (e * i - f * h) / det, -(b * i - c * h) / det, (b * f - c * e) / det,
+ -(d * i - f * g) / det, (a * i - c * g) / det, -(a * f - c * d) / det,
+ (d * h - e * g) / det, -(a * h - b * g) / det, (a * e - b * d) / det);
}
-CFX_Matrix_3by3 CFX_Matrix_3by3::Multiply(const CFX_Matrix_3by3 &m)
-{
- return CFX_Matrix_3by3(
- a*m.a + b*m.d + c*m.g,
- a*m.b + b*m.e + c*m.h,
- a*m.c + b*m.f + c*m.i,
- d*m.a + e*m.d + f*m.g,
- d*m.b + e*m.e + f*m.h,
- d*m.c + e*m.f + f*m.i,
- g*m.a + h*m.d + i*m.g,
- g*m.b + h*m.e + i*m.h,
- g*m.c + h*m.f + i*m.i
- );
+CFX_Matrix_3by3 CFX_Matrix_3by3::Multiply(const CFX_Matrix_3by3& m) {
+ return CFX_Matrix_3by3(
+ a * m.a + b * m.d + c * m.g, a * m.b + b * m.e + c * m.h,
+ a * m.c + b * m.f + c * m.i, d * m.a + e * m.d + f * m.g,
+ d * m.b + e * m.e + f * m.h, d * m.c + e * m.f + f * m.i,
+ g * m.a + h * m.d + i * m.g, g * m.b + h * m.e + i * m.h,
+ g * m.c + h * m.f + i * m.i);
}
-CFX_Vector_3by1 CFX_Matrix_3by3::TransformVector(const CFX_Vector_3by1 &v)
-{
- return CFX_Vector_3by1(
- a * v.a + b * v.b + c * v.c,
- d * v.a + e * v.b + f * v.c,
- g * v.a + h * v.b + i * v.c
- );
+CFX_Vector_3by1 CFX_Matrix_3by3::TransformVector(const CFX_Vector_3by1& v) {
+ return CFX_Vector_3by1(a * v.a + b * v.b + c * v.c,
+ d * v.a + e * v.b + f * v.c,
+ g * v.a + h * v.b + i * v.c);
}
diff --git a/core/src/fxcrt/fx_basic_wstring.cpp b/core/src/fxcrt/fx_basic_wstring.cpp
index b6b595588d..e7f8c01d41 100644
--- a/core/src/fxcrt/fx_basic_wstring.cpp
+++ b/core/src/fxcrt/fx_basic_wstring.cpp
@@ -10,1080 +10,1057 @@
#include "../../../third_party/base/numerics/safe_math.h"
// static
-CFX_WideString::StringData* CFX_WideString::StringData::Create(int nLen)
-{
- // TODO(palmer): |nLen| should really be declared as |size_t|, or
- // at least unsigned.
- if (nLen == 0 || nLen < 0) {
- return NULL;
- }
+CFX_WideString::StringData* CFX_WideString::StringData::Create(int nLen) {
+ // TODO(palmer): |nLen| should really be declared as |size_t|, or
+ // at least unsigned.
+ if (nLen == 0 || nLen < 0) {
+ return NULL;
+ }
- // Fixed portion of header plus a NUL wide char not in m_nAllocLength.
- int overhead = offsetof(StringData, m_String) + sizeof(FX_WCHAR);
- pdfium::base::CheckedNumeric<int> iSize = nLen;
- iSize *= sizeof(FX_WCHAR);
- iSize += overhead;
+ // Fixed portion of header plus a NUL wide char not in m_nAllocLength.
+ int overhead = offsetof(StringData, m_String) + sizeof(FX_WCHAR);
+ pdfium::base::CheckedNumeric<int> iSize = nLen;
+ iSize *= sizeof(FX_WCHAR);
+ iSize += overhead;
- // Now round to an 8-byte boundary. We'd expect that this is the minimum
- // granularity of any of the underlying allocators, so there may be cases
- // where we can save a re-alloc when adding a few characters to a string
- // by using this otherwise wasted space.
- iSize += 7;
- int totalSize = iSize.ValueOrDie() & ~7;
- int usableLen = (totalSize - overhead) / sizeof(FX_WCHAR);
- FXSYS_assert(usableLen >= nLen);
+ // Now round to an 8-byte boundary. We'd expect that this is the minimum
+ // granularity of any of the underlying allocators, so there may be cases
+ // where we can save a re-alloc when adding a few characters to a string
+ // by using this otherwise wasted space.
+ iSize += 7;
+ int totalSize = iSize.ValueOrDie() & ~7;
+ int usableLen = (totalSize - overhead) / sizeof(FX_WCHAR);
+ FXSYS_assert(usableLen >= nLen);
- void* pData = FX_Alloc(uint8_t, iSize.ValueOrDie());
- return new (pData) StringData(nLen, usableLen);
+ void* pData = FX_Alloc(uint8_t, iSize.ValueOrDie());
+ return new (pData) StringData(nLen, usableLen);
}
-CFX_WideString::~CFX_WideString()
-{
- if (m_pData) {
- m_pData->Release();
- }
+CFX_WideString::~CFX_WideString() {
+ if (m_pData) {
+ m_pData->Release();
+ }
}
-CFX_WideString::CFX_WideString(const CFX_WideString& stringSrc)
-{
- if (stringSrc.m_pData == NULL) {
- m_pData = NULL;
- return;
- }
- if (stringSrc.m_pData->m_nRefs >= 0) {
- m_pData = stringSrc.m_pData;
- m_pData->Retain();
- } else {
- m_pData = NULL;
- *this = stringSrc;
- }
+CFX_WideString::CFX_WideString(const CFX_WideString& stringSrc) {
+ if (stringSrc.m_pData == NULL) {
+ m_pData = NULL;
+ return;
+ }
+ if (stringSrc.m_pData->m_nRefs >= 0) {
+ m_pData = stringSrc.m_pData;
+ m_pData->Retain();
+ } else {
+ m_pData = NULL;
+ *this = stringSrc;
+ }
}
CFX_WideString::CFX_WideString(const FX_WCHAR* lpsz, FX_STRSIZE nLen) {
- if (nLen < 0) {
- nLen = lpsz ? FXSYS_wcslen(lpsz) : 0;
- }
- if (nLen) {
- m_pData = StringData::Create(nLen);
- if (m_pData) {
- FXSYS_memcpy(m_pData->m_String, lpsz, nLen * sizeof(FX_WCHAR));
- }
- } else {
- m_pData = NULL;
- }
-}
-CFX_WideString::CFX_WideString(FX_WCHAR ch)
-{
- m_pData = StringData::Create(1);
- if (m_pData) {
- m_pData->m_String[0] = ch;
- }
-}
-CFX_WideString::CFX_WideString(const CFX_WideStringC& str)
-{
- if (str.IsEmpty()) {
- m_pData = NULL;
- return;
- }
- m_pData = StringData::Create(str.GetLength());
+ if (nLen < 0) {
+ nLen = lpsz ? FXSYS_wcslen(lpsz) : 0;
+ }
+ if (nLen) {
+ m_pData = StringData::Create(nLen);
if (m_pData) {
- FXSYS_memcpy(m_pData->m_String, str.GetPtr(), str.GetLength()*sizeof(FX_WCHAR));
+ FXSYS_memcpy(m_pData->m_String, lpsz, nLen * sizeof(FX_WCHAR));
}
-}
-CFX_WideString::CFX_WideString(const CFX_WideStringC& str1, const CFX_WideStringC& str2)
-{
+ } else {
m_pData = NULL;
- int nNewLen = str1.GetLength() + str2.GetLength();
- if (nNewLen == 0) {
- return;
- }
- m_pData = StringData::Create(nNewLen);
- if (m_pData) {
- FXSYS_memcpy(m_pData->m_String, str1.GetPtr(), str1.GetLength()*sizeof(FX_WCHAR));
- FXSYS_memcpy(m_pData->m_String + str1.GetLength(), str2.GetPtr(), str2.GetLength()*sizeof(FX_WCHAR));
- }
-}
-void CFX_WideString::ReleaseBuffer(FX_STRSIZE nNewLength)
-{
- if (m_pData == NULL) {
- return;
- }
- CopyBeforeWrite();
- if (nNewLength == -1) {
- nNewLength = m_pData ? FXSYS_wcslen(m_pData->m_String) : 0;
- }
- if (nNewLength == 0) {
- Empty();
- return;
- }
- FXSYS_assert(nNewLength <= m_pData->m_nAllocLength);
- m_pData->m_nDataLength = nNewLength;
- m_pData->m_String[nNewLength] = 0;
+ }
}
-const CFX_WideString& CFX_WideString::operator=(const FX_WCHAR* lpsz)
-{
- if (lpsz == NULL || lpsz[0] == 0) {
- Empty();
- } else {
- AssignCopy(FXSYS_wcslen(lpsz), lpsz);
- }
- return *this;
+CFX_WideString::CFX_WideString(FX_WCHAR ch) {
+ m_pData = StringData::Create(1);
+ if (m_pData) {
+ m_pData->m_String[0] = ch;
+ }
}
-const CFX_WideString& CFX_WideString::operator=(const CFX_WideStringC& stringSrc)
-{
- if (stringSrc.IsEmpty()) {
- Empty();
- } else {
- AssignCopy(stringSrc.GetLength(), stringSrc.GetPtr());
- }
+CFX_WideString::CFX_WideString(const CFX_WideStringC& str) {
+ if (str.IsEmpty()) {
+ m_pData = NULL;
+ return;
+ }
+ m_pData = StringData::Create(str.GetLength());
+ if (m_pData) {
+ FXSYS_memcpy(m_pData->m_String, str.GetPtr(),
+ str.GetLength() * sizeof(FX_WCHAR));
+ }
+}
+CFX_WideString::CFX_WideString(const CFX_WideStringC& str1,
+ const CFX_WideStringC& str2) {
+ m_pData = NULL;
+ int nNewLen = str1.GetLength() + str2.GetLength();
+ if (nNewLen == 0) {
+ return;
+ }
+ m_pData = StringData::Create(nNewLen);
+ if (m_pData) {
+ FXSYS_memcpy(m_pData->m_String, str1.GetPtr(),
+ str1.GetLength() * sizeof(FX_WCHAR));
+ FXSYS_memcpy(m_pData->m_String + str1.GetLength(), str2.GetPtr(),
+ str2.GetLength() * sizeof(FX_WCHAR));
+ }
+}
+void CFX_WideString::ReleaseBuffer(FX_STRSIZE nNewLength) {
+ if (m_pData == NULL) {
+ return;
+ }
+ CopyBeforeWrite();
+ if (nNewLength == -1) {
+ nNewLength = m_pData ? FXSYS_wcslen(m_pData->m_String) : 0;
+ }
+ if (nNewLength == 0) {
+ Empty();
+ return;
+ }
+ FXSYS_assert(nNewLength <= m_pData->m_nAllocLength);
+ m_pData->m_nDataLength = nNewLength;
+ m_pData->m_String[nNewLength] = 0;
+}
+const CFX_WideString& CFX_WideString::operator=(const FX_WCHAR* lpsz) {
+ if (lpsz == NULL || lpsz[0] == 0) {
+ Empty();
+ } else {
+ AssignCopy(FXSYS_wcslen(lpsz), lpsz);
+ }
+ return *this;
+}
+const CFX_WideString& CFX_WideString::operator=(
+ const CFX_WideStringC& stringSrc) {
+ if (stringSrc.IsEmpty()) {
+ Empty();
+ } else {
+ AssignCopy(stringSrc.GetLength(), stringSrc.GetPtr());
+ }
+ return *this;
+}
+const CFX_WideString& CFX_WideString::operator=(
+ const CFX_WideString& stringSrc) {
+ if (m_pData == stringSrc.m_pData) {
return *this;
-}
-const CFX_WideString& CFX_WideString::operator=(const CFX_WideString& stringSrc)
-{
- if (m_pData == stringSrc.m_pData) {
- return *this;
- }
- if (stringSrc.IsEmpty()) {
- Empty();
- } else if ((m_pData && m_pData->m_nRefs < 0) ||
- (stringSrc.m_pData && stringSrc.m_pData->m_nRefs < 0)) {
- AssignCopy(stringSrc.m_pData->m_nDataLength, stringSrc.m_pData->m_String);
- } else {
- Empty();
- m_pData = stringSrc.m_pData;
- if (m_pData) {
- m_pData->Retain();
- }
+ }
+ if (stringSrc.IsEmpty()) {
+ Empty();
+ } else if ((m_pData && m_pData->m_nRefs < 0) ||
+ (stringSrc.m_pData && stringSrc.m_pData->m_nRefs < 0)) {
+ AssignCopy(stringSrc.m_pData->m_nDataLength, stringSrc.m_pData->m_String);
+ } else {
+ Empty();
+ m_pData = stringSrc.m_pData;
+ if (m_pData) {
+ m_pData->Retain();
}
- return *this;
+ }
+ return *this;
}
-const CFX_WideString& CFX_WideString::operator+=(FX_WCHAR ch)
-{
- ConcatInPlace(1, &ch);
- return *this;
+const CFX_WideString& CFX_WideString::operator+=(FX_WCHAR ch) {
+ ConcatInPlace(1, &ch);
+ return *this;
}
-const CFX_WideString& CFX_WideString::operator+=(const FX_WCHAR* lpsz)
-{
- if (lpsz) {
- ConcatInPlace(FXSYS_wcslen(lpsz), lpsz);
- }
- return *this;
+const CFX_WideString& CFX_WideString::operator+=(const FX_WCHAR* lpsz) {
+ if (lpsz) {
+ ConcatInPlace(FXSYS_wcslen(lpsz), lpsz);
+ }
+ return *this;
}
-const CFX_WideString& CFX_WideString::operator+=(const CFX_WideString& string)
-{
- if (string.m_pData == NULL) {
- return *this;
- }
- ConcatInPlace(string.m_pData->m_nDataLength, string.m_pData->m_String);
+const CFX_WideString& CFX_WideString::operator+=(const CFX_WideString& string) {
+ if (string.m_pData == NULL) {
return *this;
+ }
+ ConcatInPlace(string.m_pData->m_nDataLength, string.m_pData->m_String);
+ return *this;
}
-const CFX_WideString& CFX_WideString::operator+=(const CFX_WideStringC& string)
-{
- if (string.IsEmpty()) {
- return *this;
- }
- ConcatInPlace(string.GetLength(), string.GetPtr());
+const CFX_WideString& CFX_WideString::operator+=(
+ const CFX_WideStringC& string) {
+ if (string.IsEmpty()) {
return *this;
-}
-bool CFX_WideString::Equal(const wchar_t* ptr) const
-{
- if (!m_pData) {
- return !ptr || ptr[0] == L'\0';
- }
- if (!ptr) {
- return m_pData->m_nDataLength == 0;
- }
- return wcslen(ptr) == m_pData->m_nDataLength &&
- wmemcmp(ptr, m_pData->m_String, m_pData->m_nDataLength) == 0;
-}
-bool CFX_WideString::Equal(const CFX_WideStringC& str) const
-{
- if (m_pData == NULL) {
- return str.IsEmpty();
- }
- return str.GetLength() == m_pData->m_nDataLength &&
- wmemcmp(str.GetPtr(), m_pData->m_String, m_pData->m_nDataLength) == 0;
-}
-bool CFX_WideString::Equal(const CFX_WideString& other) const
-{
- if (IsEmpty()) {
- return other.IsEmpty();
- }
- if (other.IsEmpty()) {
- return false;
- }
- return other.m_pData->m_nDataLength == m_pData->m_nDataLength &&
- wmemcmp(other.m_pData->m_String,
- m_pData->m_String,
- m_pData->m_nDataLength) == 0;
-}
-void CFX_WideString::Empty()
-{
- if (m_pData) {
- m_pData->Release();
- m_pData = NULL;
- }
-}
-void CFX_WideString::ConcatInPlace(FX_STRSIZE nSrcLen, const FX_WCHAR* lpszSrcData)
-{
- if (nSrcLen == 0 || lpszSrcData == NULL) {
- return;
- }
- if (m_pData == NULL) {
- m_pData = StringData::Create(nSrcLen);
- if (m_pData) {
- FXSYS_memcpy(m_pData->m_String, lpszSrcData, nSrcLen * sizeof(FX_WCHAR));
- }
- return;
- }
- if (m_pData->m_nRefs > 1 || m_pData->m_nDataLength + nSrcLen > m_pData->m_nAllocLength) {
- ConcatCopy(m_pData->m_nDataLength, m_pData->m_String, nSrcLen, lpszSrcData);
- } else {
- FXSYS_memcpy(m_pData->m_String + m_pData->m_nDataLength, lpszSrcData, nSrcLen * sizeof(FX_WCHAR));
- m_pData->m_nDataLength += nSrcLen;
- m_pData->m_String[m_pData->m_nDataLength] = 0;
- }
-}
-void CFX_WideString::ConcatCopy(FX_STRSIZE nSrc1Len, const FX_WCHAR* lpszSrc1Data,
- FX_STRSIZE nSrc2Len, const FX_WCHAR* lpszSrc2Data)
-{
- FX_STRSIZE nNewLen = nSrc1Len + nSrc2Len;
- if (nNewLen <= 0) {
- return;
- }
- // Don't release until done copying, might be one of the arguments.
- StringData* pOldData = m_pData;
- m_pData = StringData::Create(nNewLen);
- if (m_pData) {
- wmemcpy(m_pData->m_String, lpszSrc1Data, nSrc1Len);
- wmemcpy(m_pData->m_String + nSrc1Len, lpszSrc2Data, nSrc2Len);
- }
- pOldData->Release();
-}
-void CFX_WideString::CopyBeforeWrite()
-{
- if (m_pData == NULL || m_pData->m_nRefs <= 1) {
- return;
- }
- StringData* pData = m_pData;
+ }
+ ConcatInPlace(string.GetLength(), string.GetPtr());
+ return *this;
+}
+bool CFX_WideString::Equal(const wchar_t* ptr) const {
+ if (!m_pData) {
+ return !ptr || ptr[0] == L'\0';
+ }
+ if (!ptr) {
+ return m_pData->m_nDataLength == 0;
+ }
+ return wcslen(ptr) == m_pData->m_nDataLength &&
+ wmemcmp(ptr, m_pData->m_String, m_pData->m_nDataLength) == 0;
+}
+bool CFX_WideString::Equal(const CFX_WideStringC& str) const {
+ if (m_pData == NULL) {
+ return str.IsEmpty();
+ }
+ return str.GetLength() == m_pData->m_nDataLength &&
+ wmemcmp(str.GetPtr(), m_pData->m_String, m_pData->m_nDataLength) == 0;
+}
+bool CFX_WideString::Equal(const CFX_WideString& other) const {
+ if (IsEmpty()) {
+ return other.IsEmpty();
+ }
+ if (other.IsEmpty()) {
+ return false;
+ }
+ return other.m_pData->m_nDataLength == m_pData->m_nDataLength &&
+ wmemcmp(other.m_pData->m_String, m_pData->m_String,
+ m_pData->m_nDataLength) == 0;
+}
+void CFX_WideString::Empty() {
+ if (m_pData) {
m_pData->Release();
- FX_STRSIZE nDataLength = pData->m_nDataLength;
- m_pData = StringData::Create(nDataLength);
- if (m_pData != NULL) {
- FXSYS_memcpy(m_pData->m_String, pData->m_String, (nDataLength + 1) * sizeof(FX_WCHAR));
- }
-}
-void CFX_WideString::AllocBeforeWrite(FX_STRSIZE nLen)
-{
- if (m_pData && m_pData->m_nRefs <= 1 && m_pData->m_nAllocLength >= nLen) {
- return;
- }
- Empty();
- m_pData = StringData::Create(nLen);
-}
-void CFX_WideString::AssignCopy(FX_STRSIZE nSrcLen, const FX_WCHAR* lpszSrcData)
-{
- AllocBeforeWrite(nSrcLen);
- FXSYS_memcpy(m_pData->m_String, lpszSrcData, nSrcLen * sizeof(FX_WCHAR));
- m_pData->m_nDataLength = nSrcLen;
- m_pData->m_String[nSrcLen] = 0;
-}
-int CFX_WideString::Compare(const FX_WCHAR* lpsz) const
-{
- if (m_pData == NULL) {
- return (lpsz == NULL || lpsz[0] == 0) ? 0 : -1;
- }
- return FXSYS_wcscmp(m_pData->m_String, lpsz);
-}
-CFX_ByteString CFX_WideString::UTF8Encode() const
-{
- return FX_UTF8Encode(*this);
-}
-CFX_ByteString CFX_WideString::UTF16LE_Encode() const
-{
- if (m_pData == NULL) {
- return CFX_ByteString(FX_BSTRC("\0\0"));
- }
- int len = m_pData->m_nDataLength;
- CFX_ByteString result;
- FX_CHAR* buffer = result.GetBuffer(len * 2 + 2);
- for (int i = 0; i < len; i ++) {
- buffer[i * 2] = m_pData->m_String[i] & 0xff;
- buffer[i * 2 + 1] = m_pData->m_String[i] >> 8;
- }
- buffer[len * 2] = 0;
- buffer[len * 2 + 1] = 0;
- result.ReleaseBuffer(len * 2 + 2);
- return result;
-}
-void CFX_WideString::ConvertFrom(const CFX_ByteString& str, CFX_CharMap* pCharMap)
-{
- if (pCharMap == NULL) {
- pCharMap = CFX_CharMap::GetDefaultMapper();
- }
- *this = pCharMap->m_GetWideString(pCharMap, str);
-}
-void CFX_WideString::Reserve(FX_STRSIZE len)
-{
- GetBuffer(len);
- ReleaseBuffer(GetLength());
-}
-FX_WCHAR* CFX_WideString::GetBuffer(FX_STRSIZE nMinBufLength)
-{
- if (m_pData == NULL && nMinBufLength == 0) {
- return NULL;
- }
- if (m_pData && m_pData->m_nRefs <= 1 && m_pData->m_nAllocLength >= nMinBufLength) {
- return m_pData->m_String;
- }
- if (m_pData == NULL) {
- m_pData = StringData::Create(nMinBufLength);
- if (!m_pData) {
- return NULL;
- }
- m_pData->m_nDataLength = 0;
- m_pData->m_String[0] = 0;
- return m_pData->m_String;
- }
- StringData* pOldData = m_pData;
- FX_STRSIZE nOldLen = pOldData->m_nDataLength;
- if (nMinBufLength < nOldLen) {
- nMinBufLength = nOldLen;
- }
+ m_pData = NULL;
+ }
+}
+void CFX_WideString::ConcatInPlace(FX_STRSIZE nSrcLen,
+ const FX_WCHAR* lpszSrcData) {
+ if (nSrcLen == 0 || lpszSrcData == NULL) {
+ return;
+ }
+ if (m_pData == NULL) {
+ m_pData = StringData::Create(nSrcLen);
+ if (m_pData) {
+ FXSYS_memcpy(m_pData->m_String, lpszSrcData, nSrcLen * sizeof(FX_WCHAR));
+ }
+ return;
+ }
+ if (m_pData->m_nRefs > 1 ||
+ m_pData->m_nDataLength + nSrcLen > m_pData->m_nAllocLength) {
+ ConcatCopy(m_pData->m_nDataLength, m_pData->m_String, nSrcLen, lpszSrcData);
+ } else {
+ FXSYS_memcpy(m_pData->m_String + m_pData->m_nDataLength, lpszSrcData,
+ nSrcLen * sizeof(FX_WCHAR));
+ m_pData->m_nDataLength += nSrcLen;
+ m_pData->m_String[m_pData->m_nDataLength] = 0;
+ }
+}
+void CFX_WideString::ConcatCopy(FX_STRSIZE nSrc1Len,
+ const FX_WCHAR* lpszSrc1Data,
+ FX_STRSIZE nSrc2Len,
+ const FX_WCHAR* lpszSrc2Data) {
+ FX_STRSIZE nNewLen = nSrc1Len + nSrc2Len;
+ if (nNewLen <= 0) {
+ return;
+ }
+ // Don't release until done copying, might be one of the arguments.
+ StringData* pOldData = m_pData;
+ m_pData = StringData::Create(nNewLen);
+ if (m_pData) {
+ wmemcpy(m_pData->m_String, lpszSrc1Data, nSrc1Len);
+ wmemcpy(m_pData->m_String + nSrc1Len, lpszSrc2Data, nSrc2Len);
+ }
+ pOldData->Release();
+}
+void CFX_WideString::CopyBeforeWrite() {
+ if (m_pData == NULL || m_pData->m_nRefs <= 1) {
+ return;
+ }
+ StringData* pData = m_pData;
+ m_pData->Release();
+ FX_STRSIZE nDataLength = pData->m_nDataLength;
+ m_pData = StringData::Create(nDataLength);
+ if (m_pData != NULL) {
+ FXSYS_memcpy(m_pData->m_String, pData->m_String,
+ (nDataLength + 1) * sizeof(FX_WCHAR));
+ }
+}
+void CFX_WideString::AllocBeforeWrite(FX_STRSIZE nLen) {
+ if (m_pData && m_pData->m_nRefs <= 1 && m_pData->m_nAllocLength >= nLen) {
+ return;
+ }
+ Empty();
+ m_pData = StringData::Create(nLen);
+}
+void CFX_WideString::AssignCopy(FX_STRSIZE nSrcLen,
+ const FX_WCHAR* lpszSrcData) {
+ AllocBeforeWrite(nSrcLen);
+ FXSYS_memcpy(m_pData->m_String, lpszSrcData, nSrcLen * sizeof(FX_WCHAR));
+ m_pData->m_nDataLength = nSrcLen;
+ m_pData->m_String[nSrcLen] = 0;
+}
+int CFX_WideString::Compare(const FX_WCHAR* lpsz) const {
+ if (m_pData == NULL) {
+ return (lpsz == NULL || lpsz[0] == 0) ? 0 : -1;
+ }
+ return FXSYS_wcscmp(m_pData->m_String, lpsz);
+}
+CFX_ByteString CFX_WideString::UTF8Encode() const {
+ return FX_UTF8Encode(*this);
+}
+CFX_ByteString CFX_WideString::UTF16LE_Encode() const {
+ if (m_pData == NULL) {
+ return CFX_ByteString(FX_BSTRC("\0\0"));
+ }
+ int len = m_pData->m_nDataLength;
+ CFX_ByteString result;
+ FX_CHAR* buffer = result.GetBuffer(len * 2 + 2);
+ for (int i = 0; i < len; i++) {
+ buffer[i * 2] = m_pData->m_String[i] & 0xff;
+ buffer[i * 2 + 1] = m_pData->m_String[i] >> 8;
+ }
+ buffer[len * 2] = 0;
+ buffer[len * 2 + 1] = 0;
+ result.ReleaseBuffer(len * 2 + 2);
+ return result;
+}
+void CFX_WideString::ConvertFrom(const CFX_ByteString& str,
+ CFX_CharMap* pCharMap) {
+ if (pCharMap == NULL) {
+ pCharMap = CFX_CharMap::GetDefaultMapper();
+ }
+ *this = pCharMap->m_GetWideString(pCharMap, str);
+}
+void CFX_WideString::Reserve(FX_STRSIZE len) {
+ GetBuffer(len);
+ ReleaseBuffer(GetLength());
+}
+FX_WCHAR* CFX_WideString::GetBuffer(FX_STRSIZE nMinBufLength) {
+ if (m_pData == NULL && nMinBufLength == 0) {
+ return NULL;
+ }
+ if (m_pData && m_pData->m_nRefs <= 1 &&
+ m_pData->m_nAllocLength >= nMinBufLength) {
+ return m_pData->m_String;
+ }
+ if (m_pData == NULL) {
m_pData = StringData::Create(nMinBufLength);
if (!m_pData) {
- return NULL;
+ return NULL;
}
- FXSYS_memcpy(m_pData->m_String, pOldData->m_String, (nOldLen + 1)*sizeof(FX_WCHAR));
- m_pData->m_nDataLength = nOldLen;
- pOldData->Release();
+ m_pData->m_nDataLength = 0;
+ m_pData->m_String[0] = 0;
return m_pData->m_String;
-}
-CFX_WideString CFX_WideString::FromLocal(const char* str, FX_STRSIZE len)
-{
- CFX_WideString result;
- result.ConvertFrom(CFX_ByteString(str, len));
- return result;
-}
-CFX_WideString CFX_WideString::FromUTF8(const char* str, FX_STRSIZE len)
-{
- if (!str || 0 == len) {
- return CFX_WideString();
- }
+ }
+ StringData* pOldData = m_pData;
+ FX_STRSIZE nOldLen = pOldData->m_nDataLength;
+ if (nMinBufLength < nOldLen) {
+ nMinBufLength = nOldLen;
+ }
+ m_pData = StringData::Create(nMinBufLength);
+ if (!m_pData) {
+ return NULL;
+ }
+ FXSYS_memcpy(m_pData->m_String, pOldData->m_String,
+ (nOldLen + 1) * sizeof(FX_WCHAR));
+ m_pData->m_nDataLength = nOldLen;
+ pOldData->Release();
+ return m_pData->m_String;
+}
+CFX_WideString CFX_WideString::FromLocal(const char* str, FX_STRSIZE len) {
+ CFX_WideString result;
+ result.ConvertFrom(CFX_ByteString(str, len));
+ return result;
+}
+CFX_WideString CFX_WideString::FromUTF8(const char* str, FX_STRSIZE len) {
+ if (!str || 0 == len) {
+ return CFX_WideString();
+ }
- CFX_UTF8Decoder decoder;
- for (FX_STRSIZE i = 0; i < len; i ++) {
- decoder.Input(str[i]);
- }
- return decoder.GetResult();
-}
-CFX_WideString CFX_WideString::FromUTF16LE(const unsigned short* wstr, FX_STRSIZE wlen)
-{
- if (!wstr || 0 == wlen) {
- return CFX_WideString();
- }
+ CFX_UTF8Decoder decoder;
+ for (FX_STRSIZE i = 0; i < len; i++) {
+ decoder.Input(str[i]);
+ }
+ return decoder.GetResult();
+}
+CFX_WideString CFX_WideString::FromUTF16LE(const unsigned short* wstr,
+ FX_STRSIZE wlen) {
+ if (!wstr || 0 == wlen) {
+ return CFX_WideString();
+ }
- CFX_WideString result;
- FX_WCHAR* buf = result.GetBuffer(wlen);
- for (int i = 0; i < wlen; i ++) {
- buf[i] = wstr[i];
- }
- result.ReleaseBuffer(wlen);
- return result;
+ CFX_WideString result;
+ FX_WCHAR* buf = result.GetBuffer(wlen);
+ for (int i = 0; i < wlen; i++) {
+ buf[i] = wstr[i];
+ }
+ result.ReleaseBuffer(wlen);
+ return result;
+}
+FX_STRSIZE CFX_WideString::WStringLength(const unsigned short* str) {
+ FX_STRSIZE len = 0;
+ if (str)
+ while (str[len])
+ len++;
+ return len;
}
-FX_STRSIZE CFX_WideString::WStringLength(const unsigned short* str)
-{
- FX_STRSIZE len = 0;
- if (str)
- while (str[len]) len++;
- return len;
-}
-
-
-void CFX_WideString::AllocCopy(CFX_WideString& dest, FX_STRSIZE nCopyLen, FX_STRSIZE nCopyIndex) const
-{
- // |FX_STRSIZE| is currently typedef'd as in |int|. TODO(palmer): It
- // should be a |size_t|, or at least unsigned.
- if (nCopyLen == 0 || nCopyLen < 0) {
- return;
- }
- pdfium::base::CheckedNumeric<FX_STRSIZE> iSize = static_cast<FX_STRSIZE>(sizeof(FX_WCHAR));
- iSize *= nCopyLen;
- ASSERT(dest.m_pData == NULL);
- dest.m_pData = StringData::Create(nCopyLen);
- if (dest.m_pData) {
- FXSYS_memcpy(dest.m_pData->m_String, m_pData->m_String + nCopyIndex, iSize.ValueOrDie());
- }
-}
-CFX_WideString CFX_WideString::Left(FX_STRSIZE nCount) const
-{
- if (m_pData == NULL) {
- return CFX_WideString();
- }
- if (nCount < 0) {
- nCount = 0;
- }
- if (nCount >= m_pData->m_nDataLength) {
- return *this;
- }
- CFX_WideString dest;
- AllocCopy(dest, nCount, 0);
- return dest;
-}
-CFX_WideString CFX_WideString::Mid(FX_STRSIZE nFirst) const
-{
- return Mid(nFirst, m_pData->m_nDataLength - nFirst);
-}
-CFX_WideString CFX_WideString::Mid(FX_STRSIZE nFirst, FX_STRSIZE nCount) const
-{
- if (m_pData == NULL) {
- return CFX_WideString();
- }
- if (nFirst < 0) {
- nFirst = 0;
- }
- if (nCount < 0) {
- nCount = 0;
- }
- if (nFirst + nCount > m_pData->m_nDataLength) {
- nCount = m_pData->m_nDataLength - nFirst;
- }
- if (nFirst > m_pData->m_nDataLength) {
- nCount = 0;
- }
- if (nFirst == 0 && nFirst + nCount == m_pData->m_nDataLength) {
- return *this;
- }
- CFX_WideString dest;
- AllocCopy(dest, nCount, nFirst);
- return dest;
-}
-CFX_WideString CFX_WideString::Right(FX_STRSIZE nCount) const
-{
- if (m_pData == NULL) {
- return CFX_WideString();
- }
- if (nCount < 0) {
- nCount = 0;
- }
- if (nCount >= m_pData->m_nDataLength) {
- return *this;
- }
- CFX_WideString dest;
- AllocCopy(dest, nCount, m_pData->m_nDataLength - nCount);
- return dest;
-}
-int CFX_WideString::CompareNoCase(const FX_WCHAR* lpsz) const
-{
- if (m_pData == NULL) {
- return (lpsz == NULL || lpsz[0] == 0) ? 0 : -1;
- }
- return FXSYS_wcsicmp(m_pData->m_String, lpsz);
-}
-int CFX_WideString::Compare(const CFX_WideString& str) const
-{
- if (m_pData == NULL) {
- if (str.m_pData == NULL) {
- return 0;
- }
- return -1;
- }
+void CFX_WideString::AllocCopy(CFX_WideString& dest,
+ FX_STRSIZE nCopyLen,
+ FX_STRSIZE nCopyIndex) const {
+ // |FX_STRSIZE| is currently typedef'd as in |int|. TODO(palmer): It
+ // should be a |size_t|, or at least unsigned.
+ if (nCopyLen == 0 || nCopyLen < 0) {
+ return;
+ }
+ pdfium::base::CheckedNumeric<FX_STRSIZE> iSize =
+ static_cast<FX_STRSIZE>(sizeof(FX_WCHAR));
+ iSize *= nCopyLen;
+ ASSERT(dest.m_pData == NULL);
+ dest.m_pData = StringData::Create(nCopyLen);
+ if (dest.m_pData) {
+ FXSYS_memcpy(dest.m_pData->m_String, m_pData->m_String + nCopyIndex,
+ iSize.ValueOrDie());
+ }
+}
+CFX_WideString CFX_WideString::Left(FX_STRSIZE nCount) const {
+ if (m_pData == NULL) {
+ return CFX_WideString();
+ }
+ if (nCount < 0) {
+ nCount = 0;
+ }
+ if (nCount >= m_pData->m_nDataLength) {
+ return *this;
+ }
+ CFX_WideString dest;
+ AllocCopy(dest, nCount, 0);
+ return dest;
+}
+CFX_WideString CFX_WideString::Mid(FX_STRSIZE nFirst) const {
+ return Mid(nFirst, m_pData->m_nDataLength - nFirst);
+}
+CFX_WideString CFX_WideString::Mid(FX_STRSIZE nFirst, FX_STRSIZE nCount) const {
+ if (m_pData == NULL) {
+ return CFX_WideString();
+ }
+ if (nFirst < 0) {
+ nFirst = 0;
+ }
+ if (nCount < 0) {
+ nCount = 0;
+ }
+ if (nFirst + nCount > m_pData->m_nDataLength) {
+ nCount = m_pData->m_nDataLength - nFirst;
+ }
+ if (nFirst > m_pData->m_nDataLength) {
+ nCount = 0;
+ }
+ if (nFirst == 0 && nFirst + nCount == m_pData->m_nDataLength) {
+ return *this;
+ }
+ CFX_WideString dest;
+ AllocCopy(dest, nCount, nFirst);
+ return dest;
+}
+CFX_WideString CFX_WideString::Right(FX_STRSIZE nCount) const {
+ if (m_pData == NULL) {
+ return CFX_WideString();
+ }
+ if (nCount < 0) {
+ nCount = 0;
+ }
+ if (nCount >= m_pData->m_nDataLength) {
+ return *this;
+ }
+ CFX_WideString dest;
+ AllocCopy(dest, nCount, m_pData->m_nDataLength - nCount);
+ return dest;
+}
+int CFX_WideString::CompareNoCase(const FX_WCHAR* lpsz) const {
+ if (m_pData == NULL) {
+ return (lpsz == NULL || lpsz[0] == 0) ? 0 : -1;
+ }
+ return FXSYS_wcsicmp(m_pData->m_String, lpsz);
+}
+int CFX_WideString::Compare(const CFX_WideString& str) const {
+ if (m_pData == NULL) {
if (str.m_pData == NULL) {
- return 1;
- }
- int this_len = m_pData->m_nDataLength;
- int that_len = str.m_pData->m_nDataLength;
- int min_len = this_len < that_len ? this_len : that_len;
- for (int i = 0; i < min_len; i ++) {
- if (m_pData->m_String[i] < str.m_pData->m_String[i]) {
- return -1;
- }
- if (m_pData->m_String[i] > str.m_pData->m_String[i]) {
- return 1;
- }
- }
- if (this_len < that_len) {
- return -1;
- }
- if (this_len > that_len) {
- return 1;
- }
+ return 0;
+ }
+ return -1;
+ }
+ if (str.m_pData == NULL) {
+ return 1;
+ }
+ int this_len = m_pData->m_nDataLength;
+ int that_len = str.m_pData->m_nDataLength;
+ int min_len = this_len < that_len ? this_len : that_len;
+ for (int i = 0; i < min_len; i++) {
+ if (m_pData->m_String[i] < str.m_pData->m_String[i]) {
+ return -1;
+ }
+ if (m_pData->m_String[i] > str.m_pData->m_String[i]) {
+ return 1;
+ }
+ }
+ if (this_len < that_len) {
+ return -1;
+ }
+ if (this_len > that_len) {
+ return 1;
+ }
+ return 0;
+}
+void CFX_WideString::SetAt(FX_STRSIZE nIndex, FX_WCHAR ch) {
+ if (m_pData == NULL) {
+ return;
+ }
+ ASSERT(nIndex >= 0);
+ ASSERT(nIndex < m_pData->m_nDataLength);
+ CopyBeforeWrite();
+ m_pData->m_String[nIndex] = ch;
+}
+void CFX_WideString::MakeLower() {
+ if (m_pData == NULL) {
+ return;
+ }
+ CopyBeforeWrite();
+ if (GetLength() < 1) {
+ return;
+ }
+ FXSYS_wcslwr(m_pData->m_String);
+}
+void CFX_WideString::MakeUpper() {
+ if (m_pData == NULL) {
+ return;
+ }
+ CopyBeforeWrite();
+ if (GetLength() < 1) {
+ return;
+ }
+ FXSYS_wcsupr(m_pData->m_String);
+}
+FX_STRSIZE CFX_WideString::Find(const FX_WCHAR* lpszSub,
+ FX_STRSIZE nStart) const {
+ FX_STRSIZE nLength = GetLength();
+ if (nLength < 1 || nStart > nLength) {
+ return -1;
+ }
+ const FX_WCHAR* lpsz = FXSYS_wcsstr(m_pData->m_String + nStart, lpszSub);
+ return (lpsz == NULL) ? -1 : (int)(lpsz - m_pData->m_String);
+}
+FX_STRSIZE CFX_WideString::Find(FX_WCHAR ch, FX_STRSIZE nStart) const {
+ if (m_pData == NULL) {
+ return -1;
+ }
+ FX_STRSIZE nLength = m_pData->m_nDataLength;
+ if (nStart >= nLength) {
+ return -1;
+ }
+ const FX_WCHAR* lpsz = FXSYS_wcschr(m_pData->m_String + nStart, ch);
+ return (lpsz == NULL) ? -1 : (int)(lpsz - m_pData->m_String);
+}
+void CFX_WideString::TrimRight(const FX_WCHAR* lpszTargetList) {
+ FXSYS_assert(lpszTargetList != NULL);
+ if (m_pData == NULL || *lpszTargetList == 0) {
+ return;
+ }
+ CopyBeforeWrite();
+ FX_STRSIZE len = GetLength();
+ if (len < 1) {
+ return;
+ }
+ FX_STRSIZE pos = len;
+ while (pos) {
+ if (FXSYS_wcschr(lpszTargetList, m_pData->m_String[pos - 1]) == NULL) {
+ break;
+ }
+ pos--;
+ }
+ if (pos < len) {
+ m_pData->m_String[pos] = 0;
+ m_pData->m_nDataLength = pos;
+ }
+}
+void CFX_WideString::TrimRight(FX_WCHAR chTarget) {
+ FX_WCHAR str[2] = {chTarget, 0};
+ TrimRight(str);
+}
+void CFX_WideString::TrimRight() {
+ TrimRight(L"\x09\x0a\x0b\x0c\x0d\x20");
+}
+void CFX_WideString::TrimLeft(const FX_WCHAR* lpszTargets) {
+ FXSYS_assert(lpszTargets != NULL);
+ if (m_pData == NULL || *lpszTargets == 0) {
+ return;
+ }
+ CopyBeforeWrite();
+ if (GetLength() < 1) {
+ return;
+ }
+ const FX_WCHAR* lpsz = m_pData->m_String;
+ while (*lpsz != 0) {
+ if (FXSYS_wcschr(lpszTargets, *lpsz) == NULL) {
+ break;
+ }
+ lpsz++;
+ }
+ if (lpsz != m_pData->m_String) {
+ int nDataLength =
+ m_pData->m_nDataLength - (FX_STRSIZE)(lpsz - m_pData->m_String);
+ FXSYS_memmove(m_pData->m_String, lpsz,
+ (nDataLength + 1) * sizeof(FX_WCHAR));
+ m_pData->m_nDataLength = nDataLength;
+ }
+}
+void CFX_WideString::TrimLeft(FX_WCHAR chTarget) {
+ FX_WCHAR str[2] = {chTarget, 0};
+ TrimLeft(str);
+}
+void CFX_WideString::TrimLeft() {
+ TrimLeft(L"\x09\x0a\x0b\x0c\x0d\x20");
+}
+FX_STRSIZE CFX_WideString::Replace(const FX_WCHAR* lpszOld,
+ const FX_WCHAR* lpszNew) {
+ if (GetLength() < 1) {
return 0;
-}
-void CFX_WideString::SetAt(FX_STRSIZE nIndex, FX_WCHAR ch)
-{
- if (m_pData == NULL) {
- return;
- }
- ASSERT(nIndex >= 0);
- ASSERT(nIndex < m_pData->m_nDataLength);
- CopyBeforeWrite();
- m_pData->m_String[nIndex] = ch;
-}
-void CFX_WideString::MakeLower()
-{
- if (m_pData == NULL) {
- return;
- }
- CopyBeforeWrite();
- if (GetLength() < 1) {
- return;
- }
- FXSYS_wcslwr(m_pData->m_String);
-}
-void CFX_WideString::MakeUpper()
-{
- if (m_pData == NULL) {
- return;
- }
- CopyBeforeWrite();
- if (GetLength() < 1) {
- return;
- }
- FXSYS_wcsupr(m_pData->m_String);
-}
-FX_STRSIZE CFX_WideString::Find(const FX_WCHAR* lpszSub, FX_STRSIZE nStart) const
-{
- FX_STRSIZE nLength = GetLength();
- if (nLength < 1 || nStart > nLength) {
- return -1;
- }
- const FX_WCHAR* lpsz = FXSYS_wcsstr(m_pData->m_String + nStart, lpszSub);
- return (lpsz == NULL) ? -1 : (int)(lpsz - m_pData->m_String);
-}
-FX_STRSIZE CFX_WideString::Find(FX_WCHAR ch, FX_STRSIZE nStart) const
-{
- if (m_pData == NULL) {
- return -1;
- }
- FX_STRSIZE nLength = m_pData->m_nDataLength;
- if (nStart >= nLength) {
- return -1;
- }
- const FX_WCHAR* lpsz = FXSYS_wcschr(m_pData->m_String + nStart, ch);
- return (lpsz == NULL) ? -1 : (int)(lpsz - m_pData->m_String);
-}
-void CFX_WideString::TrimRight(const FX_WCHAR* lpszTargetList)
-{
- FXSYS_assert(lpszTargetList != NULL);
- if (m_pData == NULL || *lpszTargetList == 0) {
- return;
- }
- CopyBeforeWrite();
- FX_STRSIZE len = GetLength();
- if (len < 1) {
- return;
- }
- FX_STRSIZE pos = len;
- while (pos) {
- if (FXSYS_wcschr(lpszTargetList, m_pData->m_String[pos - 1]) == NULL) {
- break;
- }
- pos --;
- }
- if (pos < len) {
- m_pData->m_String[pos] = 0;
- m_pData->m_nDataLength = pos;
- }
-}
-void CFX_WideString::TrimRight(FX_WCHAR chTarget)
-{
- FX_WCHAR str[2] = {chTarget, 0};
- TrimRight(str);
-}
-void CFX_WideString::TrimRight()
-{
- TrimRight(L"\x09\x0a\x0b\x0c\x0d\x20");
-}
-void CFX_WideString::TrimLeft(const FX_WCHAR* lpszTargets)
-{
- FXSYS_assert(lpszTargets != NULL);
- if (m_pData == NULL || *lpszTargets == 0) {
- return;
- }
+ }
+ if (lpszOld == NULL) {
+ return 0;
+ }
+ FX_STRSIZE nSourceLen = FXSYS_wcslen(lpszOld);
+ if (nSourceLen == 0) {
+ return 0;
+ }
+ FX_STRSIZE nReplacementLen = lpszNew ? FXSYS_wcslen(lpszNew) : 0;
+ FX_STRSIZE nCount = 0;
+ FX_WCHAR* lpszStart = m_pData->m_String;
+ FX_WCHAR* lpszEnd = m_pData->m_String + m_pData->m_nDataLength;
+ FX_WCHAR* lpszTarget;
+ {
+ while ((lpszTarget = (FX_WCHAR*)FXSYS_wcsstr(lpszStart, lpszOld)) != NULL &&
+ lpszStart < lpszEnd) {
+ nCount++;
+ lpszStart = lpszTarget + nSourceLen;
+ }
+ }
+ if (nCount > 0) {
CopyBeforeWrite();
- if (GetLength() < 1) {
- return;
- }
- const FX_WCHAR* lpsz = m_pData->m_String;
- while (*lpsz != 0) {
- if (FXSYS_wcschr(lpszTargets, *lpsz) == NULL) {
- break;
- }
- lpsz ++;
- }
- if (lpsz != m_pData->m_String) {
- int nDataLength = m_pData->m_nDataLength - (FX_STRSIZE)(lpsz - m_pData->m_String);
- FXSYS_memmove(m_pData->m_String, lpsz, (nDataLength + 1)*sizeof(FX_WCHAR));
- m_pData->m_nDataLength = nDataLength;
- }
-}
-void CFX_WideString::TrimLeft(FX_WCHAR chTarget)
-{
- FX_WCHAR str[2] = {chTarget, 0};
- TrimLeft(str);
-}
-void CFX_WideString::TrimLeft()
-{
- TrimLeft(L"\x09\x0a\x0b\x0c\x0d\x20");
-}
-FX_STRSIZE CFX_WideString::Replace(const FX_WCHAR* lpszOld, const FX_WCHAR* lpszNew)
-{
- if (GetLength() < 1) {
- return 0;
- }
- if (lpszOld == NULL) {
- return 0;
- }
- FX_STRSIZE nSourceLen = FXSYS_wcslen(lpszOld);
- if (nSourceLen == 0) {
+ FX_STRSIZE nOldLength = m_pData->m_nDataLength;
+ FX_STRSIZE nNewLength =
+ nOldLength + (nReplacementLen - nSourceLen) * nCount;
+ if (m_pData->m_nAllocLength < nNewLength || m_pData->m_nRefs > 1) {
+ StringData* pOldData = m_pData;
+ const FX_WCHAR* pstr = m_pData->m_String;
+ m_pData = StringData::Create(nNewLength);
+ if (!m_pData) {
return 0;
+ }
+ FXSYS_memcpy(m_pData->m_String, pstr,
+ pOldData->m_nDataLength * sizeof(FX_WCHAR));
+ pOldData->Release();
}
- FX_STRSIZE nReplacementLen = lpszNew ? FXSYS_wcslen(lpszNew) : 0;
- FX_STRSIZE nCount = 0;
- FX_WCHAR* lpszStart = m_pData->m_String;
- FX_WCHAR* lpszEnd = m_pData->m_String + m_pData->m_nDataLength;
- FX_WCHAR* lpszTarget;
+ lpszStart = m_pData->m_String;
+ lpszEnd = m_pData->m_String + FX_MAX(m_pData->m_nDataLength, nNewLength);
{
- while ((lpszTarget = (FX_WCHAR*)FXSYS_wcsstr(lpszStart, lpszOld)) != NULL && lpszStart < lpszEnd) {
- nCount++;
- lpszStart = lpszTarget + nSourceLen;
- }
- }
- if (nCount > 0) {
- CopyBeforeWrite();
- FX_STRSIZE nOldLength = m_pData->m_nDataLength;
- FX_STRSIZE nNewLength = nOldLength + (nReplacementLen - nSourceLen) * nCount;
- if (m_pData->m_nAllocLength < nNewLength || m_pData->m_nRefs > 1) {
- StringData* pOldData = m_pData;
- const FX_WCHAR* pstr = m_pData->m_String;
- m_pData = StringData::Create(nNewLength);
- if (!m_pData) {
- return 0;
- }
- FXSYS_memcpy(m_pData->m_String, pstr, pOldData->m_nDataLength * sizeof(FX_WCHAR));
- pOldData->Release();
- }
- lpszStart = m_pData->m_String;
- lpszEnd = m_pData->m_String + FX_MAX(m_pData->m_nDataLength, nNewLength);
- {
- while ((lpszTarget = (FX_WCHAR*)FXSYS_wcsstr(lpszStart, lpszOld)) != NULL && lpszStart < lpszEnd) {
- FX_STRSIZE nBalance = nOldLength - (FX_STRSIZE)(lpszTarget - m_pData->m_String + nSourceLen);
- FXSYS_memmove(lpszTarget + nReplacementLen, lpszTarget + nSourceLen, nBalance * sizeof(FX_WCHAR));
- FXSYS_memcpy(lpszTarget, lpszNew, nReplacementLen * sizeof(FX_WCHAR));
- lpszStart = lpszTarget + nReplacementLen;
- lpszStart[nBalance] = 0;
- nOldLength += (nReplacementLen - nSourceLen);
- }
- }
- ASSERT(m_pData->m_String[nNewLength] == 0);
- m_pData->m_nDataLength = nNewLength;
- }
- return nCount;
-}
-FX_STRSIZE CFX_WideString::Insert(FX_STRSIZE nIndex, FX_WCHAR ch)
-{
- CopyBeforeWrite();
- if (nIndex < 0) {
- nIndex = 0;
- }
- FX_STRSIZE nNewLength = GetLength();
- if (nIndex > nNewLength) {
- nIndex = nNewLength;
- }
- nNewLength++;
- if (m_pData == NULL || m_pData->m_nAllocLength < nNewLength) {
- StringData* pOldData = m_pData;
- const FX_WCHAR* pstr = m_pData->m_String;
- m_pData = StringData::Create(nNewLength);
- if (!m_pData) {
- return 0;
- }
- if(pOldData != NULL) {
- FXSYS_memmove(m_pData->m_String, pstr, (pOldData->m_nDataLength + 1)*sizeof(FX_WCHAR));
- pOldData->Release();
- } else {
- m_pData->m_String[0] = 0;
- }
- }
- FXSYS_memmove(m_pData->m_String + nIndex + 1,
- m_pData->m_String + nIndex, (nNewLength - nIndex)*sizeof(FX_WCHAR));
- m_pData->m_String[nIndex] = ch;
+ while ((lpszTarget = (FX_WCHAR*)FXSYS_wcsstr(lpszStart, lpszOld)) !=
+ NULL &&
+ lpszStart < lpszEnd) {
+ FX_STRSIZE nBalance =
+ nOldLength -
+ (FX_STRSIZE)(lpszTarget - m_pData->m_String + nSourceLen);
+ FXSYS_memmove(lpszTarget + nReplacementLen, lpszTarget + nSourceLen,
+ nBalance * sizeof(FX_WCHAR));
+ FXSYS_memcpy(lpszTarget, lpszNew, nReplacementLen * sizeof(FX_WCHAR));
+ lpszStart = lpszTarget + nReplacementLen;
+ lpszStart[nBalance] = 0;
+ nOldLength += (nReplacementLen - nSourceLen);
+ }
+ }
+ ASSERT(m_pData->m_String[nNewLength] == 0);
m_pData->m_nDataLength = nNewLength;
- return nNewLength;
-}
-FX_STRSIZE CFX_WideString::Delete(FX_STRSIZE nIndex, FX_STRSIZE nCount)
-{
- if (GetLength() < 1) {
- return 0;
- }
- if (nIndex < 0) {
- nIndex = 0;
+ }
+ return nCount;
+}
+FX_STRSIZE CFX_WideString::Insert(FX_STRSIZE nIndex, FX_WCHAR ch) {
+ CopyBeforeWrite();
+ if (nIndex < 0) {
+ nIndex = 0;
+ }
+ FX_STRSIZE nNewLength = GetLength();
+ if (nIndex > nNewLength) {
+ nIndex = nNewLength;
+ }
+ nNewLength++;
+ if (m_pData == NULL || m_pData->m_nAllocLength < nNewLength) {
+ StringData* pOldData = m_pData;
+ const FX_WCHAR* pstr = m_pData->m_String;
+ m_pData = StringData::Create(nNewLength);
+ if (!m_pData) {
+ return 0;
}
- FX_STRSIZE nOldLength = m_pData->m_nDataLength;
- if (nCount > 0 && nIndex < nOldLength) {
- CopyBeforeWrite();
- int nBytesToCopy = nOldLength - (nIndex + nCount) + 1;
- FXSYS_memmove(m_pData->m_String + nIndex,
- m_pData->m_String + nIndex + nCount, nBytesToCopy * sizeof(FX_WCHAR));
- m_pData->m_nDataLength = nOldLength - nCount;
+ if (pOldData != NULL) {
+ FXSYS_memmove(m_pData->m_String, pstr,
+ (pOldData->m_nDataLength + 1) * sizeof(FX_WCHAR));
+ pOldData->Release();
+ } else {
+ m_pData->m_String[0] = 0;
}
- return m_pData->m_nDataLength;
+ }
+ FXSYS_memmove(m_pData->m_String + nIndex + 1, m_pData->m_String + nIndex,
+ (nNewLength - nIndex) * sizeof(FX_WCHAR));
+ m_pData->m_String[nIndex] = ch;
+ m_pData->m_nDataLength = nNewLength;
+ return nNewLength;
}
-FX_STRSIZE CFX_WideString::Remove(FX_WCHAR chRemove)
-{
- if (m_pData == NULL) {
- return 0;
- }
+FX_STRSIZE CFX_WideString::Delete(FX_STRSIZE nIndex, FX_STRSIZE nCount) {
+ if (GetLength() < 1) {
+ return 0;
+ }
+ if (nIndex < 0) {
+ nIndex = 0;
+ }
+ FX_STRSIZE nOldLength = m_pData->m_nDataLength;
+ if (nCount > 0 && nIndex < nOldLength) {
CopyBeforeWrite();
- if (GetLength() < 1) {
- return 0;
- }
- FX_WCHAR* pstrSource = m_pData->m_String;
- FX_WCHAR* pstrDest = m_pData->m_String;
- FX_WCHAR* pstrEnd = m_pData->m_String + m_pData->m_nDataLength;
- while (pstrSource < pstrEnd) {
- if (*pstrSource != chRemove) {
- *pstrDest = *pstrSource;
- pstrDest ++;
- }
- pstrSource ++;
- }
- *pstrDest = 0;
- FX_STRSIZE nCount = (FX_STRSIZE)(pstrSource - pstrDest);
- m_pData->m_nDataLength -= nCount;
- return nCount;
-}
-#define FORCE_ANSI 0x10000
-#define FORCE_UNICODE 0x20000
-#define FORCE_INT64 0x40000
-void CFX_WideString::FormatV(const FX_WCHAR* lpszFormat, va_list argList)
-{
- va_list argListSave;
-#if defined(__ARMCC_VERSION) || (!defined(_MSC_VER) && (_FX_CPU_ == _FX_X64_ || _FX_CPU_ == _FX_IA64_ || _FX_CPU_ == _FX_ARM64_)) || defined(__native_client__)
- va_copy(argListSave, argList);
+ int nBytesToCopy = nOldLength - (nIndex + nCount) + 1;
+ FXSYS_memmove(m_pData->m_String + nIndex,
+ m_pData->m_String + nIndex + nCount,
+ nBytesToCopy * sizeof(FX_WCHAR));
+ m_pData->m_nDataLength = nOldLength - nCount;
+ }
+ return m_pData->m_nDataLength;
+}
+FX_STRSIZE CFX_WideString::Remove(FX_WCHAR chRemove) {
+ if (m_pData == NULL) {
+ return 0;
+ }
+ CopyBeforeWrite();
+ if (GetLength() < 1) {
+ return 0;
+ }
+ FX_WCHAR* pstrSource = m_pData->m_String;
+ FX_WCHAR* pstrDest = m_pData->m_String;
+ FX_WCHAR* pstrEnd = m_pData->m_String + m_pData->m_nDataLength;
+ while (pstrSource < pstrEnd) {
+ if (*pstrSource != chRemove) {
+ *pstrDest = *pstrSource;
+ pstrDest++;
+ }
+ pstrSource++;
+ }
+ *pstrDest = 0;
+ FX_STRSIZE nCount = (FX_STRSIZE)(pstrSource - pstrDest);
+ m_pData->m_nDataLength -= nCount;
+ return nCount;
+}
+#define FORCE_ANSI 0x10000
+#define FORCE_UNICODE 0x20000
+#define FORCE_INT64 0x40000
+void CFX_WideString::FormatV(const FX_WCHAR* lpszFormat, va_list argList) {
+ va_list argListSave;
+#if defined(__ARMCC_VERSION) || \
+ (!defined(_MSC_VER) && (_FX_CPU_ == _FX_X64_ || _FX_CPU_ == _FX_IA64_ || \
+ _FX_CPU_ == _FX_ARM64_)) || \
+ defined(__native_client__)
+ va_copy(argListSave, argList);
#else
- argListSave = argList;
+ argListSave = argList;
#endif
- int nMaxLen = 0;
- for (const FX_WCHAR* lpsz = lpszFormat; *lpsz != 0; lpsz ++) {
- if (*lpsz != '%' || *(lpsz = lpsz + 1) == '%') {
- nMaxLen += FXSYS_wcslen(lpsz);
- continue;
- }
- int nItemLen = 0;
- int nWidth = 0;
- for (; *lpsz != 0; lpsz ++) {
- if (*lpsz == '#') {
- nMaxLen += 2;
- } else if (*lpsz == '*') {
- nWidth = va_arg(argList, int);
- } else if (*lpsz == '-' || *lpsz == '+' || *lpsz == '0' ||
- *lpsz == ' ')
- ;
- else {
- break;
- }
- }
- if (nWidth == 0) {
- nWidth = FXSYS_wtoi(lpsz);
- for (; *lpsz != 0 && (*lpsz) <= '9' && (*lpsz) >= '0'; lpsz ++)
- ;
- }
- if (nWidth < 0 || nWidth > 128 * 1024) {
- lpszFormat = L"Bad width";
- nMaxLen = 10;
- break;
- }
- int nPrecision = 0;
- if (*lpsz == '.') {
- lpsz ++;
- if (*lpsz == '*') {
- nPrecision = va_arg(argList, int);
- lpsz ++;
- } else {
- nPrecision = FXSYS_wtoi(lpsz);
- for (; *lpsz != 0 && (*lpsz) >= '0' && (*lpsz) <= '9'; lpsz ++)
- ;
- }
- }
- if (nPrecision < 0 || nPrecision > 128 * 1024) {
- lpszFormat = L"Bad precision";
- nMaxLen = 14;
- break;
- }
- int nModifier = 0;
- if (*lpsz == L'I' && *(lpsz + 1) == L'6' && *(lpsz + 2) == L'4') {
- lpsz += 3;
- nModifier = FORCE_INT64;
+ int nMaxLen = 0;
+ for (const FX_WCHAR* lpsz = lpszFormat; *lpsz != 0; lpsz++) {
+ if (*lpsz != '%' || *(lpsz = lpsz + 1) == '%') {
+ nMaxLen += FXSYS_wcslen(lpsz);
+ continue;
+ }
+ int nItemLen = 0;
+ int nWidth = 0;
+ for (; *lpsz != 0; lpsz++) {
+ if (*lpsz == '#') {
+ nMaxLen += 2;
+ } else if (*lpsz == '*') {
+ nWidth = va_arg(argList, int);
+ } else if (*lpsz == '-' || *lpsz == '+' || *lpsz == '0' || *lpsz == ' ')
+ ;
+ else {
+ break;
+ }
+ }
+ if (nWidth == 0) {
+ nWidth = FXSYS_wtoi(lpsz);
+ for (; *lpsz != 0 && (*lpsz) <= '9' && (*lpsz) >= '0'; lpsz++)
+ ;
+ }
+ if (nWidth < 0 || nWidth > 128 * 1024) {
+ lpszFormat = L"Bad width";
+ nMaxLen = 10;
+ break;
+ }
+ int nPrecision = 0;
+ if (*lpsz == '.') {
+ lpsz++;
+ if (*lpsz == '*') {
+ nPrecision = va_arg(argList, int);
+ lpsz++;
+ } else {
+ nPrecision = FXSYS_wtoi(lpsz);
+ for (; *lpsz != 0 && (*lpsz) >= '0' && (*lpsz) <= '9'; lpsz++)
+ ;
+ }
+ }
+ if (nPrecision < 0 || nPrecision > 128 * 1024) {
+ lpszFormat = L"Bad precision";
+ nMaxLen = 14;
+ break;
+ }
+ int nModifier = 0;
+ if (*lpsz == L'I' && *(lpsz + 1) == L'6' && *(lpsz + 2) == L'4') {
+ lpsz += 3;
+ nModifier = FORCE_INT64;
+ } else {
+ switch (*lpsz) {
+ case 'h':
+ nModifier = FORCE_ANSI;
+ lpsz++;
+ break;
+ case 'l':
+ nModifier = FORCE_UNICODE;
+ lpsz++;
+ break;
+ case 'F':
+ case 'N':
+ case 'L':
+ lpsz++;
+ break;
+ }
+ }
+ switch (*lpsz | nModifier) {
+ case 'c':
+ case 'C':
+ nItemLen = 2;
+ va_arg(argList, int);
+ break;
+ case 'c' | FORCE_ANSI:
+ case 'C' | FORCE_ANSI:
+ nItemLen = 2;
+ va_arg(argList, int);
+ break;
+ case 'c' | FORCE_UNICODE:
+ case 'C' | FORCE_UNICODE:
+ nItemLen = 2;
+ va_arg(argList, int);
+ break;
+ case 's': {
+ const FX_WCHAR* pstrNextArg = va_arg(argList, const FX_WCHAR*);
+ if (pstrNextArg == NULL) {
+ nItemLen = 6;
} else {
- switch (*lpsz) {
- case 'h':
- nModifier = FORCE_ANSI;
- lpsz ++;
- break;
- case 'l':
- nModifier = FORCE_UNICODE;
- lpsz ++;
- break;
- case 'F':
- case 'N':
- case 'L':
- lpsz ++;
- break;
- }
+ nItemLen = FXSYS_wcslen(pstrNextArg);
+ if (nItemLen < 1) {
+ nItemLen = 1;
+ }
}
- switch (*lpsz | nModifier) {
- case 'c':
- case 'C':
- nItemLen = 2;
- va_arg(argList, int);
- break;
- case 'c'|FORCE_ANSI:
- case 'C'|FORCE_ANSI:
- nItemLen = 2;
- va_arg(argList, int);
- break;
- case 'c'|FORCE_UNICODE:
- case 'C'|FORCE_UNICODE:
- nItemLen = 2;
- va_arg(argList, int);
- break;
- case 's': {
- const FX_WCHAR* pstrNextArg = va_arg(argList, const FX_WCHAR*);
- if (pstrNextArg == NULL) {
- nItemLen = 6;
- } else {
- nItemLen = FXSYS_wcslen(pstrNextArg);
- if (nItemLen < 1) {
- nItemLen = 1;
- }
- }
- }
- break;
- case 'S': {
- const FX_CHAR* pstrNextArg = va_arg(argList, const FX_CHAR*);
- if (pstrNextArg == NULL) {
- nItemLen = 6;
- } else {
- nItemLen = FXSYS_strlen(pstrNextArg);
- if (nItemLen < 1) {
- nItemLen = 1;
- }
- }
- }
- break;
- case 's'|FORCE_ANSI:
- case 'S'|FORCE_ANSI: {
- const FX_CHAR* pstrNextArg = va_arg(argList, const FX_CHAR*);
- if (pstrNextArg == NULL) {
- nItemLen = 6;
- } else {
- nItemLen = FXSYS_strlen(pstrNextArg);
- if (nItemLen < 1) {
- nItemLen = 1;
- }
- }
- }
- break;
- case 's'|FORCE_UNICODE:
- case 'S'|FORCE_UNICODE: {
- FX_WCHAR* pstrNextArg = va_arg(argList, FX_WCHAR*);
- if (pstrNextArg == NULL) {
- nItemLen = 6;
- } else {
- nItemLen = FXSYS_wcslen(pstrNextArg);
- if (nItemLen < 1) {
- nItemLen = 1;
- }
- }
- }
- break;
+ } break;
+ case 'S': {
+ const FX_CHAR* pstrNextArg = va_arg(argList, const FX_CHAR*);
+ if (pstrNextArg == NULL) {
+ nItemLen = 6;
+ } else {
+ nItemLen = FXSYS_strlen(pstrNextArg);
+ if (nItemLen < 1) {
+ nItemLen = 1;
+ }
}
- if (nItemLen != 0) {
- if (nPrecision != 0 && nItemLen > nPrecision) {
- nItemLen = nPrecision;
- }
- if (nItemLen < nWidth) {
- nItemLen = nWidth;
- }
+ } break;
+ case 's' | FORCE_ANSI:
+ case 'S' | FORCE_ANSI: {
+ const FX_CHAR* pstrNextArg = va_arg(argList, const FX_CHAR*);
+ if (pstrNextArg == NULL) {
+ nItemLen = 6;
} else {
- switch (*lpsz) {
- case 'd':
- case 'i':
- case 'u':
- case 'x':
- case 'X':
- case 'o':
- if (nModifier & FORCE_INT64) {
- va_arg(argList, int64_t);
- } else {
- va_arg(argList, int);
- }
- nItemLen = 32;
- if (nItemLen < nWidth + nPrecision) {
- nItemLen = nWidth + nPrecision;
- }
- break;
- case 'a':
- case 'A':
- case 'e':
- case 'E':
- case 'g':
- case 'G':
- va_arg(argList, double);
- nItemLen = 128;
- if (nItemLen < nWidth + nPrecision) {
- nItemLen = nWidth + nPrecision;
- }
- break;
- case 'f':
- if (nWidth + nPrecision > 100) {
- nItemLen = nPrecision + nWidth + 128;
- } else {
- double f;
- char pszTemp[256];
- f = va_arg(argList, double);
- FXSYS_snprintf(pszTemp, sizeof(pszTemp), "%*.*f", nWidth, nPrecision + 6, f );
- nItemLen = FXSYS_strlen(pszTemp);
- }
- break;
- case 'p':
- va_arg(argList, void*);
- nItemLen = 32;
- if (nItemLen < nWidth + nPrecision) {
- nItemLen = nWidth + nPrecision;
- }
- break;
- case 'n':
- va_arg(argList, int*);
- break;
- }
+ nItemLen = FXSYS_strlen(pstrNextArg);
+ if (nItemLen < 1) {
+ nItemLen = 1;
+ }
}
- nMaxLen += nItemLen;
- }
- GetBuffer(nMaxLen);
- if (m_pData) {
- FXSYS_vswprintf((wchar_t*)m_pData->m_String, nMaxLen + 1, (const wchar_t*)lpszFormat, argListSave);
- ReleaseBuffer();
- }
- va_end(argListSave);
-}
-void CFX_WideString::Format(const FX_WCHAR* lpszFormat, ...)
-{
- va_list argList;
- va_start(argList, lpszFormat);
- FormatV(lpszFormat, argList);
- va_end(argList);
-}
-FX_FLOAT FX_wtof(const FX_WCHAR* str, int len)
-{
- if (len == 0) {
- return 0.0;
- }
- int cc = 0;
- FX_BOOL bNegative = FALSE;
- if (str[0] == '+') {
- cc++;
- } else if (str[0] == '-') {
- bNegative = TRUE;
- cc++;
- }
- int integer = 0;
- while (cc < len) {
- if (str[cc] == '.') {
- break;
+ } break;
+ case 's' | FORCE_UNICODE:
+ case 'S' | FORCE_UNICODE: {
+ FX_WCHAR* pstrNextArg = va_arg(argList, FX_WCHAR*);
+ if (pstrNextArg == NULL) {
+ nItemLen = 6;
+ } else {
+ nItemLen = FXSYS_wcslen(pstrNextArg);
+ if (nItemLen < 1) {
+ nItemLen = 1;
+ }
}
- integer = integer * 10 + str[cc] - '0';
- cc ++;
- }
- FX_FLOAT fraction = 0;
+ } break;
+ }
+ if (nItemLen != 0) {
+ if (nPrecision != 0 && nItemLen > nPrecision) {
+ nItemLen = nPrecision;
+ }
+ if (nItemLen < nWidth) {
+ nItemLen = nWidth;
+ }
+ } else {
+ switch (*lpsz) {
+ case 'd':
+ case 'i':
+ case 'u':
+ case 'x':
+ case 'X':
+ case 'o':
+ if (nModifier & FORCE_INT64) {
+ va_arg(argList, int64_t);
+ } else {
+ va_arg(argList, int);
+ }
+ nItemLen = 32;
+ if (nItemLen < nWidth + nPrecision) {
+ nItemLen = nWidth + nPrecision;
+ }
+ break;
+ case 'a':
+ case 'A':
+ case 'e':
+ case 'E':
+ case 'g':
+ case 'G':
+ va_arg(argList, double);
+ nItemLen = 128;
+ if (nItemLen < nWidth + nPrecision) {
+ nItemLen = nWidth + nPrecision;
+ }
+ break;
+ case 'f':
+ if (nWidth + nPrecision > 100) {
+ nItemLen = nPrecision + nWidth + 128;
+ } else {
+ double f;
+ char pszTemp[256];
+ f = va_arg(argList, double);
+ FXSYS_snprintf(pszTemp, sizeof(pszTemp), "%*.*f", nWidth,
+ nPrecision + 6, f);
+ nItemLen = FXSYS_strlen(pszTemp);
+ }
+ break;
+ case 'p':
+ va_arg(argList, void*);
+ nItemLen = 32;
+ if (nItemLen < nWidth + nPrecision) {
+ nItemLen = nWidth + nPrecision;
+ }
+ break;
+ case 'n':
+ va_arg(argList, int*);
+ break;
+ }
+ }
+ nMaxLen += nItemLen;
+ }
+ GetBuffer(nMaxLen);
+ if (m_pData) {
+ FXSYS_vswprintf((wchar_t*)m_pData->m_String, nMaxLen + 1,
+ (const wchar_t*)lpszFormat, argListSave);
+ ReleaseBuffer();
+ }
+ va_end(argListSave);
+}
+void CFX_WideString::Format(const FX_WCHAR* lpszFormat, ...) {
+ va_list argList;
+ va_start(argList, lpszFormat);
+ FormatV(lpszFormat, argList);
+ va_end(argList);
+}
+FX_FLOAT FX_wtof(const FX_WCHAR* str, int len) {
+ if (len == 0) {
+ return 0.0;
+ }
+ int cc = 0;
+ FX_BOOL bNegative = FALSE;
+ if (str[0] == '+') {
+ cc++;
+ } else if (str[0] == '-') {
+ bNegative = TRUE;
+ cc++;
+ }
+ int integer = 0;
+ while (cc < len) {
if (str[cc] == '.') {
- cc ++;
- FX_FLOAT scale = 0.1f;
- while (cc < len) {
- fraction += scale * (str[cc] - '0');
- scale *= 0.1f;
- cc ++;
- }
- }
- fraction += (FX_FLOAT)integer;
- return bNegative ? -fraction : fraction;
-}
-int CFX_WideString::GetInteger() const
-{
- if (m_pData == NULL) {
- return 0;
+ break;
+ }
+ integer = integer * 10 + str[cc] - '0';
+ cc++;
+ }
+ FX_FLOAT fraction = 0;
+ if (str[cc] == '.') {
+ cc++;
+ FX_FLOAT scale = 0.1f;
+ while (cc < len) {
+ fraction += scale * (str[cc] - '0');
+ scale *= 0.1f;
+ cc++;
}
- return FXSYS_wtoi(m_pData->m_String);
+ }
+ fraction += (FX_FLOAT)integer;
+ return bNegative ? -fraction : fraction;
}
-FX_FLOAT CFX_WideString::GetFloat() const
-{
- if (m_pData == NULL) {
- return 0.0;
- }
- return FX_wtof(m_pData->m_String, m_pData->m_nDataLength);
-}
-static CFX_ByteString _DefMap_GetByteString(CFX_CharMap* pCharMap, const CFX_WideString& widestr)
-{
- int src_len = widestr.GetLength();
- int codepage = pCharMap->m_GetCodePage ? pCharMap->m_GetCodePage() : 0;
- int dest_len = FXSYS_WideCharToMultiByte(codepage, 0, widestr.c_str(), src_len, NULL, 0, NULL, NULL);
- if (dest_len == 0) {
- return CFX_ByteString();
- }
- CFX_ByteString bytestr;
- FX_CHAR* dest_buf = bytestr.GetBuffer(dest_len);
- FXSYS_WideCharToMultiByte(codepage, 0, widestr.c_str(), src_len, dest_buf, dest_len, NULL, NULL);
- bytestr.ReleaseBuffer(dest_len);
- return bytestr;
-}
-static CFX_WideString _DefMap_GetWideString(CFX_CharMap* pCharMap, const CFX_ByteString& bytestr)
-{
- int src_len = bytestr.GetLength();
- int codepage = pCharMap->m_GetCodePage ? pCharMap->m_GetCodePage() : 0;
- int dest_len = FXSYS_MultiByteToWideChar(codepage, 0, bytestr, src_len, NULL, 0);
- if (dest_len == 0) {
- return CFX_WideString();
- }
- CFX_WideString widestr;
- FX_WCHAR* dest_buf = widestr.GetBuffer(dest_len);
- FXSYS_MultiByteToWideChar(codepage, 0, bytestr, src_len, dest_buf, dest_len);
- widestr.ReleaseBuffer(dest_len);
- return widestr;
-}
-static int _DefMap_GetGBKCodePage()
-{
- return 936;
-}
-static int _DefMap_GetUHCCodePage()
-{
- return 949;
-}
-static int _DefMap_GetJISCodePage()
-{
- return 932;
-}
-static int _DefMap_GetBig5CodePage()
-{
- return 950;
-}
-static const CFX_CharMap g_DefaultMapper = {&_DefMap_GetWideString, &_DefMap_GetByteString, NULL};
-static const CFX_CharMap g_DefaultGBKMapper = {&_DefMap_GetWideString, &_DefMap_GetByteString, &_DefMap_GetGBKCodePage};
-static const CFX_CharMap g_DefaultJISMapper = {&_DefMap_GetWideString, &_DefMap_GetByteString, &_DefMap_GetJISCodePage};
-static const CFX_CharMap g_DefaultUHCMapper = {&_DefMap_GetWideString, &_DefMap_GetByteString, &_DefMap_GetUHCCodePage};
-static const CFX_CharMap g_DefaultBig5Mapper = {&_DefMap_GetWideString, &_DefMap_GetByteString, &_DefMap_GetBig5CodePage};
-CFX_CharMap* CFX_CharMap::GetDefaultMapper(int32_t codepage)
-{
- switch (codepage) {
- case 0:
- return (CFX_CharMap*)&g_DefaultMapper;
- case 932:
- return (CFX_CharMap*)&g_DefaultJISMapper;
- case 936:
- return (CFX_CharMap*)&g_DefaultGBKMapper;
- case 949:
- return (CFX_CharMap*)&g_DefaultUHCMapper;
- case 950:
- return (CFX_CharMap*)&g_DefaultBig5Mapper;
- }
- return NULL;
+int CFX_WideString::GetInteger() const {
+ if (m_pData == NULL) {
+ return 0;
+ }
+ return FXSYS_wtoi(m_pData->m_String);
+}
+FX_FLOAT CFX_WideString::GetFloat() const {
+ if (m_pData == NULL) {
+ return 0.0;
+ }
+ return FX_wtof(m_pData->m_String, m_pData->m_nDataLength);
+}
+static CFX_ByteString _DefMap_GetByteString(CFX_CharMap* pCharMap,
+ const CFX_WideString& widestr) {
+ int src_len = widestr.GetLength();
+ int codepage = pCharMap->m_GetCodePage ? pCharMap->m_GetCodePage() : 0;
+ int dest_len = FXSYS_WideCharToMultiByte(codepage, 0, widestr.c_str(),
+ src_len, NULL, 0, NULL, NULL);
+ if (dest_len == 0) {
+ return CFX_ByteString();
+ }
+ CFX_ByteString bytestr;
+ FX_CHAR* dest_buf = bytestr.GetBuffer(dest_len);
+ FXSYS_WideCharToMultiByte(codepage, 0, widestr.c_str(), src_len, dest_buf,
+ dest_len, NULL, NULL);
+ bytestr.ReleaseBuffer(dest_len);
+ return bytestr;
+}
+static CFX_WideString _DefMap_GetWideString(CFX_CharMap* pCharMap,
+ const CFX_ByteString& bytestr) {
+ int src_len = bytestr.GetLength();
+ int codepage = pCharMap->m_GetCodePage ? pCharMap->m_GetCodePage() : 0;
+ int dest_len =
+ FXSYS_MultiByteToWideChar(codepage, 0, bytestr, src_len, NULL, 0);
+ if (dest_len == 0) {
+ return CFX_WideString();
+ }
+ CFX_WideString widestr;
+ FX_WCHAR* dest_buf = widestr.GetBuffer(dest_len);
+ FXSYS_MultiByteToWideChar(codepage, 0, bytestr, src_len, dest_buf, dest_len);
+ widestr.ReleaseBuffer(dest_len);
+ return widestr;
+}
+static int _DefMap_GetGBKCodePage() {
+ return 936;
+}
+static int _DefMap_GetUHCCodePage() {
+ return 949;
+}
+static int _DefMap_GetJISCodePage() {
+ return 932;
+}
+static int _DefMap_GetBig5CodePage() {
+ return 950;
+}
+static const CFX_CharMap g_DefaultMapper = {&_DefMap_GetWideString,
+ &_DefMap_GetByteString, NULL};
+static const CFX_CharMap g_DefaultGBKMapper = {
+ &_DefMap_GetWideString, &_DefMap_GetByteString, &_DefMap_GetGBKCodePage};
+static const CFX_CharMap g_DefaultJISMapper = {
+ &_DefMap_GetWideString, &_DefMap_GetByteString, &_DefMap_GetJISCodePage};
+static const CFX_CharMap g_DefaultUHCMapper = {
+ &_DefMap_GetWideString, &_DefMap_GetByteString, &_DefMap_GetUHCCodePage};
+static const CFX_CharMap g_DefaultBig5Mapper = {
+ &_DefMap_GetWideString, &_DefMap_GetByteString, &_DefMap_GetBig5CodePage};
+CFX_CharMap* CFX_CharMap::GetDefaultMapper(int32_t codepage) {
+ switch (codepage) {
+ case 0:
+ return (CFX_CharMap*)&g_DefaultMapper;
+ case 932:
+ return (CFX_CharMap*)&g_DefaultJISMapper;
+ case 936:
+ return (CFX_CharMap*)&g_DefaultGBKMapper;
+ case 949:
+ return (CFX_CharMap*)&g_DefaultUHCMapper;
+ case 950:
+ return (CFX_CharMap*)&g_DefaultBig5Mapper;
+ }
+ return NULL;
}
diff --git a/core/src/fxcrt/fx_basic_wstring_unittest.cpp b/core/src/fxcrt/fx_basic_wstring_unittest.cpp
index 847e5e8076..b75a6fbd39 100644
--- a/core/src/fxcrt/fx_basic_wstring_unittest.cpp
+++ b/core/src/fxcrt/fx_basic_wstring_unittest.cpp
@@ -7,273 +7,273 @@
#include "../../include/fxcrt/fx_basic.h"
TEST(fxcrt, WideStringOperatorSubscript) {
- // CFX_WideString includes the NUL terminator for non-empty strings.
- CFX_WideString abc(L"abc");
- EXPECT_EQ(L'a', abc[0]);
- EXPECT_EQ(L'b', abc[1]);
- EXPECT_EQ(L'c', abc[2]);
- EXPECT_EQ(L'\0', abc[3]);
+ // CFX_WideString includes the NUL terminator for non-empty strings.
+ CFX_WideString abc(L"abc");
+ EXPECT_EQ(L'a', abc[0]);
+ EXPECT_EQ(L'b', abc[1]);
+ EXPECT_EQ(L'c', abc[2]);
+ EXPECT_EQ(L'\0', abc[3]);
}
TEST(fxcrt, WideStringOperatorLT) {
- CFX_WideString empty;
- CFX_WideString a(L"a");
- CFX_WideString abc(L"\x0110qq"); // Comes before despite endianness.
- CFX_WideString def(L"\x1001qq"); // Comes after despite endianness.
+ CFX_WideString empty;
+ CFX_WideString a(L"a");
+ CFX_WideString abc(L"\x0110qq"); // Comes before despite endianness.
+ CFX_WideString def(L"\x1001qq"); // Comes after despite endianness.
- EXPECT_FALSE(empty < empty);
- EXPECT_FALSE(a < a);
- EXPECT_FALSE(abc < abc);
- EXPECT_FALSE(def < def);
+ EXPECT_FALSE(empty < empty);
+ EXPECT_FALSE(a < a);
+ EXPECT_FALSE(abc < abc);
+ EXPECT_FALSE(def < def);
- EXPECT_TRUE(empty < a);
- EXPECT_FALSE(a < empty);
+ EXPECT_TRUE(empty < a);
+ EXPECT_FALSE(a < empty);
- EXPECT_TRUE(empty < abc);
- EXPECT_FALSE(abc < empty);
+ EXPECT_TRUE(empty < abc);
+ EXPECT_FALSE(abc < empty);
- EXPECT_TRUE(empty < def);
- EXPECT_FALSE(def < empty);
+ EXPECT_TRUE(empty < def);
+ EXPECT_FALSE(def < empty);
- EXPECT_TRUE(a < abc);
- EXPECT_FALSE(abc < a);
+ EXPECT_TRUE(a < abc);
+ EXPECT_FALSE(abc < a);
- EXPECT_TRUE(a < def);
- EXPECT_FALSE(def < a);
+ EXPECT_TRUE(a < def);
+ EXPECT_FALSE(def < a);
- EXPECT_TRUE(abc < def);
- EXPECT_FALSE(def < abc);
+ EXPECT_TRUE(abc < def);
+ EXPECT_FALSE(def < abc);
}
TEST(fxcrt, WideStringOperatorEQ) {
- CFX_WideString null_string;
- EXPECT_TRUE(null_string == null_string);
-
- CFX_WideString empty_string(L"");
- EXPECT_TRUE(empty_string == empty_string);
- EXPECT_TRUE(empty_string == null_string);
- EXPECT_TRUE(null_string == empty_string);
-
- CFX_WideString deleted_string(L"hello");
- deleted_string.Delete(0, 5);
- EXPECT_TRUE(deleted_string == deleted_string);
- EXPECT_TRUE(deleted_string == null_string);
- EXPECT_TRUE(deleted_string == empty_string);
- EXPECT_TRUE(null_string == deleted_string);
- EXPECT_TRUE(null_string == empty_string);
-
- CFX_WideString wide_string(L"hello");
- EXPECT_TRUE(wide_string == wide_string);
- EXPECT_FALSE(wide_string == null_string);
- EXPECT_FALSE(wide_string == empty_string);
- EXPECT_FALSE(wide_string == deleted_string);
- EXPECT_FALSE(null_string == wide_string);
- EXPECT_FALSE(empty_string == wide_string);
- EXPECT_FALSE(deleted_string == wide_string);
-
- CFX_WideString wide_string_same1(L"hello");
- EXPECT_TRUE(wide_string == wide_string_same1);
- EXPECT_TRUE(wide_string_same1 == wide_string);
-
- CFX_WideString wide_string_same2(wide_string);
- EXPECT_TRUE(wide_string == wide_string_same2);
- EXPECT_TRUE(wide_string_same2 == wide_string);
-
- CFX_WideString wide_string1(L"he");
- CFX_WideString wide_string2(L"hellp");
- CFX_WideString wide_string3(L"hellod");
- EXPECT_FALSE(wide_string == wide_string1);
- EXPECT_FALSE(wide_string == wide_string2);
- EXPECT_FALSE(wide_string == wide_string3);
- EXPECT_FALSE(wide_string1 == wide_string);
- EXPECT_FALSE(wide_string2 == wide_string);
- EXPECT_FALSE(wide_string3 == wide_string);
-
- CFX_WideStringC null_string_c;
- CFX_WideStringC empty_string_c(L"");
- EXPECT_TRUE(null_string == null_string_c);
- EXPECT_TRUE(null_string == empty_string_c);
- EXPECT_TRUE(empty_string == null_string_c);
- EXPECT_TRUE(empty_string == empty_string_c);
- EXPECT_TRUE(deleted_string == null_string_c);
- EXPECT_TRUE(deleted_string == empty_string_c);
- EXPECT_TRUE(null_string_c == null_string);
- EXPECT_TRUE(empty_string_c == null_string);
- EXPECT_TRUE(null_string_c == empty_string);
- EXPECT_TRUE(empty_string_c == empty_string);
- EXPECT_TRUE(null_string_c == deleted_string);
- EXPECT_TRUE(empty_string_c == deleted_string);
-
- CFX_WideStringC wide_string_c_same1(L"hello");
- EXPECT_TRUE(wide_string == wide_string_c_same1);
- EXPECT_TRUE(wide_string_c_same1 == wide_string);
-
- CFX_WideStringC wide_string_c1(L"he");
- CFX_WideStringC wide_string_c2(L"hellp");
- CFX_WideStringC wide_string_c3(L"hellod");
- EXPECT_FALSE(wide_string == wide_string_c1);
- EXPECT_FALSE(wide_string == wide_string_c2);
- EXPECT_FALSE(wide_string == wide_string_c3);
- EXPECT_FALSE(wide_string_c1 == wide_string);
- EXPECT_FALSE(wide_string_c2 == wide_string);
- EXPECT_FALSE(wide_string_c3 == wide_string);
-
- const wchar_t* c_null_string = nullptr;
- const wchar_t* c_empty_string = L"";
- EXPECT_TRUE(null_string == c_null_string);
- EXPECT_TRUE(null_string == c_empty_string);
- EXPECT_TRUE(empty_string == c_null_string);
- EXPECT_TRUE(empty_string == c_empty_string);
- EXPECT_TRUE(deleted_string == c_null_string);
- EXPECT_TRUE(deleted_string == c_empty_string);
- EXPECT_TRUE(c_null_string == null_string);
- EXPECT_TRUE(c_empty_string == null_string);
- EXPECT_TRUE(c_null_string == empty_string);
- EXPECT_TRUE(c_empty_string == empty_string);
- EXPECT_TRUE(c_null_string == deleted_string);
- EXPECT_TRUE(c_empty_string == deleted_string);
-
- const wchar_t* c_string_same1 = L"hello";
- EXPECT_TRUE(wide_string == c_string_same1);
- EXPECT_TRUE(c_string_same1 == wide_string);
-
- const wchar_t* c_string1 = L"he";
- const wchar_t* c_string2 = L"hellp";
- const wchar_t* c_string3 = L"hellod";
- EXPECT_FALSE(wide_string == c_string1);
- EXPECT_FALSE(wide_string == c_string2);
- EXPECT_FALSE(wide_string == c_string3);
- EXPECT_FALSE(c_string1 == wide_string);
- EXPECT_FALSE(c_string2 == wide_string);
- EXPECT_FALSE(c_string3 == wide_string);
+ CFX_WideString null_string;
+ EXPECT_TRUE(null_string == null_string);
+
+ CFX_WideString empty_string(L"");
+ EXPECT_TRUE(empty_string == empty_string);
+ EXPECT_TRUE(empty_string == null_string);
+ EXPECT_TRUE(null_string == empty_string);
+
+ CFX_WideString deleted_string(L"hello");
+ deleted_string.Delete(0, 5);
+ EXPECT_TRUE(deleted_string == deleted_string);
+ EXPECT_TRUE(deleted_string == null_string);
+ EXPECT_TRUE(deleted_string == empty_string);
+ EXPECT_TRUE(null_string == deleted_string);
+ EXPECT_TRUE(null_string == empty_string);
+
+ CFX_WideString wide_string(L"hello");
+ EXPECT_TRUE(wide_string == wide_string);
+ EXPECT_FALSE(wide_string == null_string);
+ EXPECT_FALSE(wide_string == empty_string);
+ EXPECT_FALSE(wide_string == deleted_string);
+ EXPECT_FALSE(null_string == wide_string);
+ EXPECT_FALSE(empty_string == wide_string);
+ EXPECT_FALSE(deleted_string == wide_string);
+
+ CFX_WideString wide_string_same1(L"hello");
+ EXPECT_TRUE(wide_string == wide_string_same1);
+ EXPECT_TRUE(wide_string_same1 == wide_string);
+
+ CFX_WideString wide_string_same2(wide_string);
+ EXPECT_TRUE(wide_string == wide_string_same2);
+ EXPECT_TRUE(wide_string_same2 == wide_string);
+
+ CFX_WideString wide_string1(L"he");
+ CFX_WideString wide_string2(L"hellp");
+ CFX_WideString wide_string3(L"hellod");
+ EXPECT_FALSE(wide_string == wide_string1);
+ EXPECT_FALSE(wide_string == wide_string2);
+ EXPECT_FALSE(wide_string == wide_string3);
+ EXPECT_FALSE(wide_string1 == wide_string);
+ EXPECT_FALSE(wide_string2 == wide_string);
+ EXPECT_FALSE(wide_string3 == wide_string);
+
+ CFX_WideStringC null_string_c;
+ CFX_WideStringC empty_string_c(L"");
+ EXPECT_TRUE(null_string == null_string_c);
+ EXPECT_TRUE(null_string == empty_string_c);
+ EXPECT_TRUE(empty_string == null_string_c);
+ EXPECT_TRUE(empty_string == empty_string_c);
+ EXPECT_TRUE(deleted_string == null_string_c);
+ EXPECT_TRUE(deleted_string == empty_string_c);
+ EXPECT_TRUE(null_string_c == null_string);
+ EXPECT_TRUE(empty_string_c == null_string);
+ EXPECT_TRUE(null_string_c == empty_string);
+ EXPECT_TRUE(empty_string_c == empty_string);
+ EXPECT_TRUE(null_string_c == deleted_string);
+ EXPECT_TRUE(empty_string_c == deleted_string);
+
+ CFX_WideStringC wide_string_c_same1(L"hello");
+ EXPECT_TRUE(wide_string == wide_string_c_same1);
+ EXPECT_TRUE(wide_string_c_same1 == wide_string);
+
+ CFX_WideStringC wide_string_c1(L"he");
+ CFX_WideStringC wide_string_c2(L"hellp");
+ CFX_WideStringC wide_string_c3(L"hellod");
+ EXPECT_FALSE(wide_string == wide_string_c1);
+ EXPECT_FALSE(wide_string == wide_string_c2);
+ EXPECT_FALSE(wide_string == wide_string_c3);
+ EXPECT_FALSE(wide_string_c1 == wide_string);
+ EXPECT_FALSE(wide_string_c2 == wide_string);
+ EXPECT_FALSE(wide_string_c3 == wide_string);
+
+ const wchar_t* c_null_string = nullptr;
+ const wchar_t* c_empty_string = L"";
+ EXPECT_TRUE(null_string == c_null_string);
+ EXPECT_TRUE(null_string == c_empty_string);
+ EXPECT_TRUE(empty_string == c_null_string);
+ EXPECT_TRUE(empty_string == c_empty_string);
+ EXPECT_TRUE(deleted_string == c_null_string);
+ EXPECT_TRUE(deleted_string == c_empty_string);
+ EXPECT_TRUE(c_null_string == null_string);
+ EXPECT_TRUE(c_empty_string == null_string);
+ EXPECT_TRUE(c_null_string == empty_string);
+ EXPECT_TRUE(c_empty_string == empty_string);
+ EXPECT_TRUE(c_null_string == deleted_string);
+ EXPECT_TRUE(c_empty_string == deleted_string);
+
+ const wchar_t* c_string_same1 = L"hello";
+ EXPECT_TRUE(wide_string == c_string_same1);
+ EXPECT_TRUE(c_string_same1 == wide_string);
+
+ const wchar_t* c_string1 = L"he";
+ const wchar_t* c_string2 = L"hellp";
+ const wchar_t* c_string3 = L"hellod";
+ EXPECT_FALSE(wide_string == c_string1);
+ EXPECT_FALSE(wide_string == c_string2);
+ EXPECT_FALSE(wide_string == c_string3);
+ EXPECT_FALSE(c_string1 == wide_string);
+ EXPECT_FALSE(c_string2 == wide_string);
+ EXPECT_FALSE(c_string3 == wide_string);
}
TEST(fxcrt, WideStringOperatorNE) {
- CFX_WideString null_string;
- EXPECT_FALSE(null_string != null_string);
-
- CFX_WideString empty_string(L"");
- EXPECT_FALSE(empty_string != empty_string);
- EXPECT_FALSE(empty_string != null_string);
- EXPECT_FALSE(null_string != empty_string);
-
- CFX_WideString deleted_string(L"hello");
- deleted_string.Delete(0, 5);
- EXPECT_FALSE(deleted_string != deleted_string);
- EXPECT_FALSE(deleted_string != null_string);
- EXPECT_FALSE(deleted_string != empty_string);
- EXPECT_FALSE(null_string != deleted_string);
- EXPECT_FALSE(null_string != empty_string);
-
- CFX_WideString wide_string(L"hello");
- EXPECT_FALSE(wide_string != wide_string);
- EXPECT_TRUE(wide_string != null_string);
- EXPECT_TRUE(wide_string != empty_string);
- EXPECT_TRUE(wide_string != deleted_string);
- EXPECT_TRUE(null_string != wide_string);
- EXPECT_TRUE(empty_string != wide_string);
- EXPECT_TRUE(deleted_string != wide_string);
-
- CFX_WideString wide_string_same1(L"hello");
- EXPECT_FALSE(wide_string != wide_string_same1);
- EXPECT_FALSE(wide_string_same1 != wide_string);
-
- CFX_WideString wide_string_same2(wide_string);
- EXPECT_FALSE(wide_string != wide_string_same2);
- EXPECT_FALSE(wide_string_same2 != wide_string);
-
- CFX_WideString wide_string1(L"he");
- CFX_WideString wide_string2(L"hellp");
- CFX_WideString wide_string3(L"hellod");
- EXPECT_TRUE(wide_string != wide_string1);
- EXPECT_TRUE(wide_string != wide_string2);
- EXPECT_TRUE(wide_string != wide_string3);
- EXPECT_TRUE(wide_string1 != wide_string);
- EXPECT_TRUE(wide_string2 != wide_string);
- EXPECT_TRUE(wide_string3 != wide_string);
-
- CFX_WideStringC null_string_c;
- CFX_WideStringC empty_string_c(L"");
- EXPECT_FALSE(null_string != null_string_c);
- EXPECT_FALSE(null_string != empty_string_c);
- EXPECT_FALSE(empty_string != null_string_c);
- EXPECT_FALSE(empty_string != empty_string_c);
- EXPECT_FALSE(deleted_string != null_string_c);
- EXPECT_FALSE(deleted_string != empty_string_c);
- EXPECT_FALSE(null_string_c != null_string);
- EXPECT_FALSE(empty_string_c != null_string);
- EXPECT_FALSE(null_string_c != empty_string);
- EXPECT_FALSE(empty_string_c != empty_string);
-
- CFX_WideStringC wide_string_c_same1(L"hello");
- EXPECT_FALSE(wide_string != wide_string_c_same1);
- EXPECT_FALSE(wide_string_c_same1 != wide_string);
-
- CFX_WideStringC wide_string_c1(L"he");
- CFX_WideStringC wide_string_c2(L"hellp");
- CFX_WideStringC wide_string_c3(L"hellod");
- EXPECT_TRUE(wide_string != wide_string_c1);
- EXPECT_TRUE(wide_string != wide_string_c2);
- EXPECT_TRUE(wide_string != wide_string_c3);
- EXPECT_TRUE(wide_string_c1 != wide_string);
- EXPECT_TRUE(wide_string_c2 != wide_string);
- EXPECT_TRUE(wide_string_c3 != wide_string);
-
- const wchar_t* c_null_string = nullptr;
- const wchar_t* c_empty_string = L"";
- EXPECT_FALSE(null_string != c_null_string);
- EXPECT_FALSE(null_string != c_empty_string);
- EXPECT_FALSE(empty_string != c_null_string);
- EXPECT_FALSE(empty_string != c_empty_string);
- EXPECT_FALSE(deleted_string != c_null_string);
- EXPECT_FALSE(deleted_string != c_empty_string);
- EXPECT_FALSE(c_null_string != null_string);
- EXPECT_FALSE(c_empty_string != null_string);
- EXPECT_FALSE(c_null_string != empty_string);
- EXPECT_FALSE(c_empty_string != empty_string);
- EXPECT_FALSE(c_null_string != deleted_string);
- EXPECT_FALSE(c_empty_string != deleted_string);
-
- const wchar_t* c_string_same1 = L"hello";
- EXPECT_FALSE(wide_string != c_string_same1);
- EXPECT_FALSE(c_string_same1 != wide_string);
-
- const wchar_t* c_string1 = L"he";
- const wchar_t* c_string2 = L"hellp";
- const wchar_t* c_string3 = L"hellod";
- EXPECT_TRUE(wide_string != c_string1);
- EXPECT_TRUE(wide_string != c_string2);
- EXPECT_TRUE(wide_string != c_string3);
- EXPECT_TRUE(c_string1 != wide_string);
- EXPECT_TRUE(c_string2 != wide_string);
- EXPECT_TRUE(c_string3 != wide_string);
+ CFX_WideString null_string;
+ EXPECT_FALSE(null_string != null_string);
+
+ CFX_WideString empty_string(L"");
+ EXPECT_FALSE(empty_string != empty_string);
+ EXPECT_FALSE(empty_string != null_string);
+ EXPECT_FALSE(null_string != empty_string);
+
+ CFX_WideString deleted_string(L"hello");
+ deleted_string.Delete(0, 5);
+ EXPECT_FALSE(deleted_string != deleted_string);
+ EXPECT_FALSE(deleted_string != null_string);
+ EXPECT_FALSE(deleted_string != empty_string);
+ EXPECT_FALSE(null_string != deleted_string);
+ EXPECT_FALSE(null_string != empty_string);
+
+ CFX_WideString wide_string(L"hello");
+ EXPECT_FALSE(wide_string != wide_string);
+ EXPECT_TRUE(wide_string != null_string);
+ EXPECT_TRUE(wide_string != empty_string);
+ EXPECT_TRUE(wide_string != deleted_string);
+ EXPECT_TRUE(null_string != wide_string);
+ EXPECT_TRUE(empty_string != wide_string);
+ EXPECT_TRUE(deleted_string != wide_string);
+
+ CFX_WideString wide_string_same1(L"hello");
+ EXPECT_FALSE(wide_string != wide_string_same1);
+ EXPECT_FALSE(wide_string_same1 != wide_string);
+
+ CFX_WideString wide_string_same2(wide_string);
+ EXPECT_FALSE(wide_string != wide_string_same2);
+ EXPECT_FALSE(wide_string_same2 != wide_string);
+
+ CFX_WideString wide_string1(L"he");
+ CFX_WideString wide_string2(L"hellp");
+ CFX_WideString wide_string3(L"hellod");
+ EXPECT_TRUE(wide_string != wide_string1);
+ EXPECT_TRUE(wide_string != wide_string2);
+ EXPECT_TRUE(wide_string != wide_string3);
+ EXPECT_TRUE(wide_string1 != wide_string);
+ EXPECT_TRUE(wide_string2 != wide_string);
+ EXPECT_TRUE(wide_string3 != wide_string);
+
+ CFX_WideStringC null_string_c;
+ CFX_WideStringC empty_string_c(L"");
+ EXPECT_FALSE(null_string != null_string_c);
+ EXPECT_FALSE(null_string != empty_string_c);
+ EXPECT_FALSE(empty_string != null_string_c);
+ EXPECT_FALSE(empty_string != empty_string_c);
+ EXPECT_FALSE(deleted_string != null_string_c);
+ EXPECT_FALSE(deleted_string != empty_string_c);
+ EXPECT_FALSE(null_string_c != null_string);
+ EXPECT_FALSE(empty_string_c != null_string);
+ EXPECT_FALSE(null_string_c != empty_string);
+ EXPECT_FALSE(empty_string_c != empty_string);
+
+ CFX_WideStringC wide_string_c_same1(L"hello");
+ EXPECT_FALSE(wide_string != wide_string_c_same1);
+ EXPECT_FALSE(wide_string_c_same1 != wide_string);
+
+ CFX_WideStringC wide_string_c1(L"he");
+ CFX_WideStringC wide_string_c2(L"hellp");
+ CFX_WideStringC wide_string_c3(L"hellod");
+ EXPECT_TRUE(wide_string != wide_string_c1);
+ EXPECT_TRUE(wide_string != wide_string_c2);
+ EXPECT_TRUE(wide_string != wide_string_c3);
+ EXPECT_TRUE(wide_string_c1 != wide_string);
+ EXPECT_TRUE(wide_string_c2 != wide_string);
+ EXPECT_TRUE(wide_string_c3 != wide_string);
+
+ const wchar_t* c_null_string = nullptr;
+ const wchar_t* c_empty_string = L"";
+ EXPECT_FALSE(null_string != c_null_string);
+ EXPECT_FALSE(null_string != c_empty_string);
+ EXPECT_FALSE(empty_string != c_null_string);
+ EXPECT_FALSE(empty_string != c_empty_string);
+ EXPECT_FALSE(deleted_string != c_null_string);
+ EXPECT_FALSE(deleted_string != c_empty_string);
+ EXPECT_FALSE(c_null_string != null_string);
+ EXPECT_FALSE(c_empty_string != null_string);
+ EXPECT_FALSE(c_null_string != empty_string);
+ EXPECT_FALSE(c_empty_string != empty_string);
+ EXPECT_FALSE(c_null_string != deleted_string);
+ EXPECT_FALSE(c_empty_string != deleted_string);
+
+ const wchar_t* c_string_same1 = L"hello";
+ EXPECT_FALSE(wide_string != c_string_same1);
+ EXPECT_FALSE(c_string_same1 != wide_string);
+
+ const wchar_t* c_string1 = L"he";
+ const wchar_t* c_string2 = L"hellp";
+ const wchar_t* c_string3 = L"hellod";
+ EXPECT_TRUE(wide_string != c_string1);
+ EXPECT_TRUE(wide_string != c_string2);
+ EXPECT_TRUE(wide_string != c_string3);
+ EXPECT_TRUE(c_string1 != wide_string);
+ EXPECT_TRUE(c_string2 != wide_string);
+ EXPECT_TRUE(c_string3 != wide_string);
}
TEST(fxcrt, WideStringConcatInPlace) {
- CFX_WideString fred;
- fred.ConcatInPlace(4, L"FRED");
- EXPECT_EQ(L"FRED", fred);
-
- fred.ConcatInPlace(2, L"DY");
- EXPECT_EQ(L"FREDDY", fred);
-
- fred.Delete(3, 3);
- EXPECT_EQ(L"FRE", fred);
-
- fred.ConcatInPlace(1, L"D");
- EXPECT_EQ(L"FRED", fred);
-
- CFX_WideString copy = fred;
- fred.ConcatInPlace(2, L"DY");
- EXPECT_EQ(L"FREDDY", fred);
- EXPECT_EQ(L"FRED", copy);
-
- // Test invalid arguments.
- copy = fred;
- fred.ConcatInPlace(-6, L"freddy");
- CFX_WideString not_aliased(L"xxxxxx");
- EXPECT_EQ(L"FREDDY", fred);
- EXPECT_EQ(L"xxxxxx", not_aliased);
+ CFX_WideString fred;
+ fred.ConcatInPlace(4, L"FRED");
+ EXPECT_EQ(L"FRED", fred);
+
+ fred.ConcatInPlace(2, L"DY");
+ EXPECT_EQ(L"FREDDY", fred);
+
+ fred.Delete(3, 3);
+ EXPECT_EQ(L"FRE", fred);
+
+ fred.ConcatInPlace(1, L"D");
+ EXPECT_EQ(L"FRED", fred);
+
+ CFX_WideString copy = fred;
+ fred.ConcatInPlace(2, L"DY");
+ EXPECT_EQ(L"FREDDY", fred);
+ EXPECT_EQ(L"FRED", copy);
+
+ // Test invalid arguments.
+ copy = fred;
+ fred.ConcatInPlace(-6, L"freddy");
+ CFX_WideString not_aliased(L"xxxxxx");
+ EXPECT_EQ(L"FREDDY", fred);
+ EXPECT_EQ(L"xxxxxx", not_aliased);
}
#define ByteStringLiteral(str) CFX_ByteString(FX_BSTRC(str))
@@ -283,160 +283,160 @@ TEST(fxcrt, WideStringUTF16LE_Encode) {
CFX_WideString ws;
CFX_ByteString bs;
} utf16le_encode_cases[] = {
- { L"", ByteStringLiteral("\0\0") },
- { L"abc", ByteStringLiteral("a\0b\0c\0\0\0") },
- { L"abcdef", ByteStringLiteral("a\0b\0c\0d\0e\0f\0\0\0") },
- { L"abc\0def", ByteStringLiteral("a\0b\0c\0\0\0") },
- { L"\xaabb\xccdd", ByteStringLiteral("\xbb\xaa\xdd\xcc\0\0") },
- { L"\x3132\x6162", ByteStringLiteral("\x32\x31\x62\x61\0\0") },
+ {L"", ByteStringLiteral("\0\0")},
+ {L"abc", ByteStringLiteral("a\0b\0c\0\0\0")},
+ {L"abcdef", ByteStringLiteral("a\0b\0c\0d\0e\0f\0\0\0")},
+ {L"abc\0def", ByteStringLiteral("a\0b\0c\0\0\0")},
+ {L"\xaabb\xccdd", ByteStringLiteral("\xbb\xaa\xdd\xcc\0\0")},
+ {L"\x3132\x6162", ByteStringLiteral("\x32\x31\x62\x61\0\0")},
};
for (size_t i = 0; i < FX_ArraySize(utf16le_encode_cases); ++i) {
EXPECT_EQ(utf16le_encode_cases[i].bs,
- utf16le_encode_cases[i].ws.UTF16LE_Encode())
+ utf16le_encode_cases[i].ws.UTF16LE_Encode())
<< " for case number " << i;
}
}
TEST(fxcrt, WideStringCOperatorSubscript) {
- // CFX_WideStringC includes the NUL terminator for non-empty strings.
- CFX_WideStringC abc(L"abc");
- EXPECT_EQ(L'a', abc[0]);
- EXPECT_EQ(L'b', abc[1]);
- EXPECT_EQ(L'c', abc[2]);
- EXPECT_EQ(L'\0', abc[3]);
+ // CFX_WideStringC includes the NUL terminator for non-empty strings.
+ CFX_WideStringC abc(L"abc");
+ EXPECT_EQ(L'a', abc[0]);
+ EXPECT_EQ(L'b', abc[1]);
+ EXPECT_EQ(L'c', abc[2]);
+ EXPECT_EQ(L'\0', abc[3]);
}
TEST(fxcrt, WideStringCOperatorLT) {
- CFX_WideStringC empty;
- CFX_WideStringC a(L"a");
- CFX_WideStringC abc(L"\x0110qq"); // Comes before despite endianness.
- CFX_WideStringC def(L"\x1001qq"); // Comes after despite endianness.
+ CFX_WideStringC empty;
+ CFX_WideStringC a(L"a");
+ CFX_WideStringC abc(L"\x0110qq"); // Comes before despite endianness.
+ CFX_WideStringC def(L"\x1001qq"); // Comes after despite endianness.
- EXPECT_FALSE(empty < empty);
- EXPECT_FALSE(a < a);
- EXPECT_FALSE(abc < abc);
- EXPECT_FALSE(def < def);
+ EXPECT_FALSE(empty < empty);
+ EXPECT_FALSE(a < a);
+ EXPECT_FALSE(abc < abc);
+ EXPECT_FALSE(def < def);
- EXPECT_TRUE(empty < a);
- EXPECT_FALSE(a < empty);
+ EXPECT_TRUE(empty < a);
+ EXPECT_FALSE(a < empty);
- EXPECT_TRUE(empty < abc);
- EXPECT_FALSE(abc < empty);
+ EXPECT_TRUE(empty < abc);
+ EXPECT_FALSE(abc < empty);
- EXPECT_TRUE(empty < def);
- EXPECT_FALSE(def < empty);
+ EXPECT_TRUE(empty < def);
+ EXPECT_FALSE(def < empty);
- EXPECT_TRUE(a < abc);
- EXPECT_FALSE(abc < a);
+ EXPECT_TRUE(a < abc);
+ EXPECT_FALSE(abc < a);
- EXPECT_TRUE(a < def);
- EXPECT_FALSE(def < a);
+ EXPECT_TRUE(a < def);
+ EXPECT_FALSE(def < a);
- EXPECT_TRUE(abc < def);
- EXPECT_FALSE(def < abc);
+ EXPECT_TRUE(abc < def);
+ EXPECT_FALSE(def < abc);
}
TEST(fxcrt, WideStringCOperatorEQ) {
- CFX_WideStringC wide_string_c(L"hello");
- EXPECT_TRUE(wide_string_c == wide_string_c);
-
- CFX_WideStringC wide_string_c_same1(L"hello");
- EXPECT_TRUE(wide_string_c == wide_string_c_same1);
- EXPECT_TRUE(wide_string_c_same1 == wide_string_c);
-
- CFX_WideStringC wide_string_c_same2(wide_string_c);
- EXPECT_TRUE(wide_string_c == wide_string_c_same2);
- EXPECT_TRUE(wide_string_c_same2 == wide_string_c);
-
- CFX_WideStringC wide_string_c1(L"he");
- CFX_WideStringC wide_string_c2(L"hellp");
- CFX_WideStringC wide_string_c3(L"hellod");
- EXPECT_FALSE(wide_string_c == wide_string_c1);
- EXPECT_FALSE(wide_string_c == wide_string_c2);
- EXPECT_FALSE(wide_string_c == wide_string_c3);
- EXPECT_FALSE(wide_string_c1 == wide_string_c);
- EXPECT_FALSE(wide_string_c2 == wide_string_c);
- EXPECT_FALSE(wide_string_c3 == wide_string_c);
-
- CFX_WideString wide_string_same1(L"hello");
- EXPECT_TRUE(wide_string_c == wide_string_same1);
- EXPECT_TRUE(wide_string_same1 == wide_string_c);
-
- CFX_WideString wide_string1(L"he");
- CFX_WideString wide_string2(L"hellp");
- CFX_WideString wide_string3(L"hellod");
- EXPECT_FALSE(wide_string_c == wide_string1);
- EXPECT_FALSE(wide_string_c == wide_string2);
- EXPECT_FALSE(wide_string_c == wide_string3);
- EXPECT_FALSE(wide_string1 == wide_string_c);
- EXPECT_FALSE(wide_string2 == wide_string_c);
- EXPECT_FALSE(wide_string3 == wide_string_c);
-
- const wchar_t* c_string_same1 = L"hello";
- EXPECT_TRUE(wide_string_c == c_string_same1);
- EXPECT_TRUE(c_string_same1 == wide_string_c);
-
- const wchar_t* c_string1 = L"he";
- const wchar_t* c_string2 = L"hellp";
- const wchar_t* c_string3 = L"hellod";
- EXPECT_FALSE(wide_string_c == c_string1);
- EXPECT_FALSE(wide_string_c == c_string2);
- EXPECT_FALSE(wide_string_c == c_string3);
-
- EXPECT_FALSE(c_string1 == wide_string_c);
- EXPECT_FALSE(c_string2 == wide_string_c);
- EXPECT_FALSE(c_string3 == wide_string_c);
+ CFX_WideStringC wide_string_c(L"hello");
+ EXPECT_TRUE(wide_string_c == wide_string_c);
+
+ CFX_WideStringC wide_string_c_same1(L"hello");
+ EXPECT_TRUE(wide_string_c == wide_string_c_same1);
+ EXPECT_TRUE(wide_string_c_same1 == wide_string_c);
+
+ CFX_WideStringC wide_string_c_same2(wide_string_c);
+ EXPECT_TRUE(wide_string_c == wide_string_c_same2);
+ EXPECT_TRUE(wide_string_c_same2 == wide_string_c);
+
+ CFX_WideStringC wide_string_c1(L"he");
+ CFX_WideStringC wide_string_c2(L"hellp");
+ CFX_WideStringC wide_string_c3(L"hellod");
+ EXPECT_FALSE(wide_string_c == wide_string_c1);
+ EXPECT_FALSE(wide_string_c == wide_string_c2);
+ EXPECT_FALSE(wide_string_c == wide_string_c3);
+ EXPECT_FALSE(wide_string_c1 == wide_string_c);
+ EXPECT_FALSE(wide_string_c2 == wide_string_c);
+ EXPECT_FALSE(wide_string_c3 == wide_string_c);
+
+ CFX_WideString wide_string_same1(L"hello");
+ EXPECT_TRUE(wide_string_c == wide_string_same1);
+ EXPECT_TRUE(wide_string_same1 == wide_string_c);
+
+ CFX_WideString wide_string1(L"he");
+ CFX_WideString wide_string2(L"hellp");
+ CFX_WideString wide_string3(L"hellod");
+ EXPECT_FALSE(wide_string_c == wide_string1);
+ EXPECT_FALSE(wide_string_c == wide_string2);
+ EXPECT_FALSE(wide_string_c == wide_string3);
+ EXPECT_FALSE(wide_string1 == wide_string_c);
+ EXPECT_FALSE(wide_string2 == wide_string_c);
+ EXPECT_FALSE(wide_string3 == wide_string_c);
+
+ const wchar_t* c_string_same1 = L"hello";
+ EXPECT_TRUE(wide_string_c == c_string_same1);
+ EXPECT_TRUE(c_string_same1 == wide_string_c);
+
+ const wchar_t* c_string1 = L"he";
+ const wchar_t* c_string2 = L"hellp";
+ const wchar_t* c_string3 = L"hellod";
+ EXPECT_FALSE(wide_string_c == c_string1);
+ EXPECT_FALSE(wide_string_c == c_string2);
+ EXPECT_FALSE(wide_string_c == c_string3);
+
+ EXPECT_FALSE(c_string1 == wide_string_c);
+ EXPECT_FALSE(c_string2 == wide_string_c);
+ EXPECT_FALSE(c_string3 == wide_string_c);
}
TEST(fxcrt, WideStringCOperatorNE) {
- CFX_WideStringC wide_string_c(L"hello");
- EXPECT_FALSE(wide_string_c != wide_string_c);
-
- CFX_WideStringC wide_string_c_same1(L"hello");
- EXPECT_FALSE(wide_string_c != wide_string_c_same1);
- EXPECT_FALSE(wide_string_c_same1 != wide_string_c);
-
- CFX_WideStringC wide_string_c_same2(wide_string_c);
- EXPECT_FALSE(wide_string_c != wide_string_c_same2);
- EXPECT_FALSE(wide_string_c_same2 != wide_string_c);
-
- CFX_WideStringC wide_string_c1(L"he");
- CFX_WideStringC wide_string_c2(L"hellp");
- CFX_WideStringC wide_string_c3(L"hellod");
- EXPECT_TRUE(wide_string_c != wide_string_c1);
- EXPECT_TRUE(wide_string_c != wide_string_c2);
- EXPECT_TRUE(wide_string_c != wide_string_c3);
- EXPECT_TRUE(wide_string_c1 != wide_string_c);
- EXPECT_TRUE(wide_string_c2 != wide_string_c);
- EXPECT_TRUE(wide_string_c3 != wide_string_c);
-
- CFX_WideString wide_string_same1(L"hello");
- EXPECT_FALSE(wide_string_c != wide_string_same1);
- EXPECT_FALSE(wide_string_same1 != wide_string_c);
-
- CFX_WideString wide_string1(L"he");
- CFX_WideString wide_string2(L"hellp");
- CFX_WideString wide_string3(L"hellod");
- EXPECT_TRUE(wide_string_c != wide_string1);
- EXPECT_TRUE(wide_string_c != wide_string2);
- EXPECT_TRUE(wide_string_c != wide_string3);
- EXPECT_TRUE(wide_string1 != wide_string_c);
- EXPECT_TRUE(wide_string2 != wide_string_c);
- EXPECT_TRUE(wide_string3 != wide_string_c);
-
- const wchar_t* c_string_same1 = L"hello";
- EXPECT_FALSE(wide_string_c != c_string_same1);
- EXPECT_FALSE(c_string_same1 != wide_string_c);
-
- const wchar_t* c_string1 = L"he";
- const wchar_t* c_string2 = L"hellp";
- const wchar_t* c_string3 = L"hellod";
- EXPECT_TRUE(wide_string_c != c_string1);
- EXPECT_TRUE(wide_string_c != c_string2);
- EXPECT_TRUE(wide_string_c != c_string3);
-
- EXPECT_TRUE(c_string1 != wide_string_c);
- EXPECT_TRUE(c_string2 != wide_string_c);
- EXPECT_TRUE(c_string3 != wide_string_c);
+ CFX_WideStringC wide_string_c(L"hello");
+ EXPECT_FALSE(wide_string_c != wide_string_c);
+
+ CFX_WideStringC wide_string_c_same1(L"hello");
+ EXPECT_FALSE(wide_string_c != wide_string_c_same1);
+ EXPECT_FALSE(wide_string_c_same1 != wide_string_c);
+
+ CFX_WideStringC wide_string_c_same2(wide_string_c);
+ EXPECT_FALSE(wide_string_c != wide_string_c_same2);
+ EXPECT_FALSE(wide_string_c_same2 != wide_string_c);
+
+ CFX_WideStringC wide_string_c1(L"he");
+ CFX_WideStringC wide_string_c2(L"hellp");
+ CFX_WideStringC wide_string_c3(L"hellod");
+ EXPECT_TRUE(wide_string_c != wide_string_c1);
+ EXPECT_TRUE(wide_string_c != wide_string_c2);
+ EXPECT_TRUE(wide_string_c != wide_string_c3);
+ EXPECT_TRUE(wide_string_c1 != wide_string_c);
+ EXPECT_TRUE(wide_string_c2 != wide_string_c);
+ EXPECT_TRUE(wide_string_c3 != wide_string_c);
+
+ CFX_WideString wide_string_same1(L"hello");
+ EXPECT_FALSE(wide_string_c != wide_string_same1);
+ EXPECT_FALSE(wide_string_same1 != wide_string_c);
+
+ CFX_WideString wide_string1(L"he");
+ CFX_WideString wide_string2(L"hellp");
+ CFX_WideString wide_string3(L"hellod");
+ EXPECT_TRUE(wide_string_c != wide_string1);
+ EXPECT_TRUE(wide_string_c != wide_string2);
+ EXPECT_TRUE(wide_string_c != wide_string3);
+ EXPECT_TRUE(wide_string1 != wide_string_c);
+ EXPECT_TRUE(wide_string2 != wide_string_c);
+ EXPECT_TRUE(wide_string3 != wide_string_c);
+
+ const wchar_t* c_string_same1 = L"hello";
+ EXPECT_FALSE(wide_string_c != c_string_same1);
+ EXPECT_FALSE(c_string_same1 != wide_string_c);
+
+ const wchar_t* c_string1 = L"he";
+ const wchar_t* c_string2 = L"hellp";
+ const wchar_t* c_string3 = L"hellod";
+ EXPECT_TRUE(wide_string_c != c_string1);
+ EXPECT_TRUE(wide_string_c != c_string2);
+ EXPECT_TRUE(wide_string_c != c_string3);
+
+ EXPECT_TRUE(c_string1 != wide_string_c);
+ EXPECT_TRUE(c_string2 != wide_string_c);
+ EXPECT_TRUE(c_string3 != wide_string_c);
}
diff --git a/core/src/fxcrt/fx_extension.cpp b/core/src/fxcrt/fx_extension.cpp
index 724dcf4903..0f610d2717 100644
--- a/core/src/fxcrt/fx_extension.cpp
+++ b/core/src/fxcrt/fx_extension.cpp
@@ -13,191 +13,187 @@
#include <ctime>
#endif
-IFX_FileStream* FX_CreateFileStream(const FX_CHAR* filename, FX_DWORD dwModes)
-{
- IFXCRT_FileAccess* pFA = FXCRT_FileAccess_Create();
- if (!pFA) {
- return NULL;
- }
- if (!pFA->Open(filename, dwModes)) {
- pFA->Release();
- return NULL;
- }
- return new CFX_CRTFileStream(pFA);
+IFX_FileStream* FX_CreateFileStream(const FX_CHAR* filename, FX_DWORD dwModes) {
+ IFXCRT_FileAccess* pFA = FXCRT_FileAccess_Create();
+ if (!pFA) {
+ return NULL;
+ }
+ if (!pFA->Open(filename, dwModes)) {
+ pFA->Release();
+ return NULL;
+ }
+ return new CFX_CRTFileStream(pFA);
}
-IFX_FileStream* FX_CreateFileStream(const FX_WCHAR* filename, FX_DWORD dwModes)
-{
- IFXCRT_FileAccess* pFA = FXCRT_FileAccess_Create();
- if (!pFA) {
- return NULL;
- }
- if (!pFA->Open(filename, dwModes)) {
- pFA->Release();
- return NULL;
- }
- return new CFX_CRTFileStream(pFA);
+IFX_FileStream* FX_CreateFileStream(const FX_WCHAR* filename,
+ FX_DWORD dwModes) {
+ IFXCRT_FileAccess* pFA = FXCRT_FileAccess_Create();
+ if (!pFA) {
+ return NULL;
+ }
+ if (!pFA->Open(filename, dwModes)) {
+ pFA->Release();
+ return NULL;
+ }
+ return new CFX_CRTFileStream(pFA);
}
-IFX_FileWrite* FX_CreateFileWrite(const FX_CHAR* filename)
-{
- return FX_CreateFileStream(filename, FX_FILEMODE_Truncate);
+IFX_FileWrite* FX_CreateFileWrite(const FX_CHAR* filename) {
+ return FX_CreateFileStream(filename, FX_FILEMODE_Truncate);
}
-IFX_FileWrite* FX_CreateFileWrite(const FX_WCHAR* filename)
-{
- return FX_CreateFileStream(filename, FX_FILEMODE_Truncate);
+IFX_FileWrite* FX_CreateFileWrite(const FX_WCHAR* filename) {
+ return FX_CreateFileStream(filename, FX_FILEMODE_Truncate);
}
-IFX_FileRead* FX_CreateFileRead(const FX_CHAR* filename)
-{
- return FX_CreateFileStream(filename, FX_FILEMODE_ReadOnly);
+IFX_FileRead* FX_CreateFileRead(const FX_CHAR* filename) {
+ return FX_CreateFileStream(filename, FX_FILEMODE_ReadOnly);
}
-IFX_FileRead* FX_CreateFileRead(const FX_WCHAR* filename)
-{
- return FX_CreateFileStream(filename, FX_FILEMODE_ReadOnly);
+IFX_FileRead* FX_CreateFileRead(const FX_WCHAR* filename) {
+ return FX_CreateFileStream(filename, FX_FILEMODE_ReadOnly);
}
-IFX_MemoryStream* FX_CreateMemoryStream(uint8_t* pBuffer, size_t dwSize, FX_BOOL bTakeOver)
-{
- return new CFX_MemoryStream(pBuffer, dwSize, bTakeOver);
+IFX_MemoryStream* FX_CreateMemoryStream(uint8_t* pBuffer,
+ size_t dwSize,
+ FX_BOOL bTakeOver) {
+ return new CFX_MemoryStream(pBuffer, dwSize, bTakeOver);
}
-IFX_MemoryStream* FX_CreateMemoryStream(FX_BOOL bConsecutive)
-{
- return new CFX_MemoryStream(bConsecutive);
+IFX_MemoryStream* FX_CreateMemoryStream(FX_BOOL bConsecutive) {
+ return new CFX_MemoryStream(bConsecutive);
}
#ifdef __cplusplus
extern "C" {
#endif
-FX_FLOAT FXSYS_tan(FX_FLOAT a)
-{
- return (FX_FLOAT)tan(a);
+FX_FLOAT FXSYS_tan(FX_FLOAT a) {
+ return (FX_FLOAT)tan(a);
}
-FX_FLOAT FXSYS_logb(FX_FLOAT b, FX_FLOAT x)
-{
- return FXSYS_log(x) / FXSYS_log(b);
+FX_FLOAT FXSYS_logb(FX_FLOAT b, FX_FLOAT x) {
+ return FXSYS_log(x) / FXSYS_log(b);
}
-FX_FLOAT FXSYS_strtof(const FX_CHAR* pcsStr, int32_t iLength, int32_t *pUsedLen)
-{
- FXSYS_assert(pcsStr != NULL);
- if (iLength < 0) {
- iLength = (int32_t)FXSYS_strlen(pcsStr);
- }
- CFX_WideString ws = CFX_WideString::FromLocal(pcsStr, iLength);
- return FXSYS_wcstof(ws.c_str(), iLength, pUsedLen);
+FX_FLOAT FXSYS_strtof(const FX_CHAR* pcsStr,
+ int32_t iLength,
+ int32_t* pUsedLen) {
+ FXSYS_assert(pcsStr != NULL);
+ if (iLength < 0) {
+ iLength = (int32_t)FXSYS_strlen(pcsStr);
+ }
+ CFX_WideString ws = CFX_WideString::FromLocal(pcsStr, iLength);
+ return FXSYS_wcstof(ws.c_str(), iLength, pUsedLen);
}
-FX_FLOAT FXSYS_wcstof(const FX_WCHAR* pwsStr, int32_t iLength, int32_t *pUsedLen)
-{
- FXSYS_assert(pwsStr != NULL);
- if (iLength < 0) {
- iLength = (int32_t)FXSYS_wcslen(pwsStr);
- }
- if (iLength == 0) {
- return 0.0f;
- }
- int32_t iUsedLen = 0;
- FX_BOOL bNegtive = FALSE;
- switch (pwsStr[iUsedLen]) {
- case '-':
- bNegtive = TRUE;
- case '+':
- iUsedLen++;
- break;
- }
- FX_FLOAT fValue = 0.0f;
- while (iUsedLen < iLength) {
- FX_WCHAR wch = pwsStr[iUsedLen];
- if (wch >= L'0' && wch <= L'9') {
- fValue = fValue * 10.0f + (wch - L'0');
- } else {
- break;
- }
- iUsedLen++;
- }
- if (iUsedLen < iLength && pwsStr[iUsedLen] == L'.') {
- FX_FLOAT fPrecise = 0.1f;
- while (++iUsedLen < iLength) {
- FX_WCHAR wch = pwsStr[iUsedLen];
- if (wch >= L'0' && wch <= L'9') {
- fValue += (wch - L'0') * fPrecise;
- fPrecise *= 0.1f;
- } else {
- break;
- }
- }
+FX_FLOAT FXSYS_wcstof(const FX_WCHAR* pwsStr,
+ int32_t iLength,
+ int32_t* pUsedLen) {
+ FXSYS_assert(pwsStr != NULL);
+ if (iLength < 0) {
+ iLength = (int32_t)FXSYS_wcslen(pwsStr);
+ }
+ if (iLength == 0) {
+ return 0.0f;
+ }
+ int32_t iUsedLen = 0;
+ FX_BOOL bNegtive = FALSE;
+ switch (pwsStr[iUsedLen]) {
+ case '-':
+ bNegtive = TRUE;
+ case '+':
+ iUsedLen++;
+ break;
+ }
+ FX_FLOAT fValue = 0.0f;
+ while (iUsedLen < iLength) {
+ FX_WCHAR wch = pwsStr[iUsedLen];
+ if (wch >= L'0' && wch <= L'9') {
+ fValue = fValue * 10.0f + (wch - L'0');
+ } else {
+ break;
}
- if (pUsedLen) {
- *pUsedLen = iUsedLen;
+ iUsedLen++;
+ }
+ if (iUsedLen < iLength && pwsStr[iUsedLen] == L'.') {
+ FX_FLOAT fPrecise = 0.1f;
+ while (++iUsedLen < iLength) {
+ FX_WCHAR wch = pwsStr[iUsedLen];
+ if (wch >= L'0' && wch <= L'9') {
+ fValue += (wch - L'0') * fPrecise;
+ fPrecise *= 0.1f;
+ } else {
+ break;
+ }
}
- return bNegtive ? -fValue : fValue;
+ }
+ if (pUsedLen) {
+ *pUsedLen = iUsedLen;
+ }
+ return bNegtive ? -fValue : fValue;
}
-FX_WCHAR* FXSYS_wcsncpy(FX_WCHAR* dstStr, const FX_WCHAR* srcStr, size_t count)
-{
- FXSYS_assert(dstStr != NULL && srcStr != NULL && count > 0);
- for (size_t i = 0; i < count; ++i)
- if ((dstStr[i] = srcStr[i]) == L'\0') {
- break;
- }
- return dstStr;
+FX_WCHAR* FXSYS_wcsncpy(FX_WCHAR* dstStr,
+ const FX_WCHAR* srcStr,
+ size_t count) {
+ FXSYS_assert(dstStr != NULL && srcStr != NULL && count > 0);
+ for (size_t i = 0; i < count; ++i)
+ if ((dstStr[i] = srcStr[i]) == L'\0') {
+ break;
+ }
+ return dstStr;
}
-int32_t FXSYS_wcsnicmp(const FX_WCHAR* s1, const FX_WCHAR* s2, size_t count)
-{
- FXSYS_assert(s1 != NULL && s2 != NULL && count > 0);
- FX_WCHAR wch1 = 0, wch2 = 0;
- while (count-- > 0) {
- wch1 = (FX_WCHAR)FXSYS_tolower(*s1++);
- wch2 = (FX_WCHAR)FXSYS_tolower(*s2++);
- if (wch1 != wch2) {
- break;
- }
+int32_t FXSYS_wcsnicmp(const FX_WCHAR* s1, const FX_WCHAR* s2, size_t count) {
+ FXSYS_assert(s1 != NULL && s2 != NULL && count > 0);
+ FX_WCHAR wch1 = 0, wch2 = 0;
+ while (count-- > 0) {
+ wch1 = (FX_WCHAR)FXSYS_tolower(*s1++);
+ wch2 = (FX_WCHAR)FXSYS_tolower(*s2++);
+ if (wch1 != wch2) {
+ break;
}
- return wch1 - wch2;
+ }
+ return wch1 - wch2;
}
-int32_t FXSYS_strnicmp(const FX_CHAR* s1, const FX_CHAR* s2, size_t count)
-{
- FXSYS_assert(s1 != NULL && s2 != NULL && count > 0);
- FX_CHAR ch1 = 0, ch2 = 0;
- while (count-- > 0) {
- ch1 = (FX_CHAR)FXSYS_tolower(*s1++);
- ch2 = (FX_CHAR)FXSYS_tolower(*s2++);
- if (ch1 != ch2) {
- break;
- }
+int32_t FXSYS_strnicmp(const FX_CHAR* s1, const FX_CHAR* s2, size_t count) {
+ FXSYS_assert(s1 != NULL && s2 != NULL && count > 0);
+ FX_CHAR ch1 = 0, ch2 = 0;
+ while (count-- > 0) {
+ ch1 = (FX_CHAR)FXSYS_tolower(*s1++);
+ ch2 = (FX_CHAR)FXSYS_tolower(*s2++);
+ if (ch1 != ch2) {
+ break;
}
- return ch1 - ch2;
+ }
+ return ch1 - ch2;
}
-FX_DWORD FX_HashCode_String_GetA(const FX_CHAR* pStr, int32_t iLength, FX_BOOL bIgnoreCase)
-{
- FXSYS_assert(pStr != NULL);
- if (iLength < 0) {
- iLength = (int32_t)FXSYS_strlen(pStr);
+FX_DWORD FX_HashCode_String_GetA(const FX_CHAR* pStr,
+ int32_t iLength,
+ FX_BOOL bIgnoreCase) {
+ FXSYS_assert(pStr != NULL);
+ if (iLength < 0) {
+ iLength = (int32_t)FXSYS_strlen(pStr);
+ }
+ const FX_CHAR* pStrEnd = pStr + iLength;
+ FX_DWORD dwHashCode = 0;
+ if (bIgnoreCase) {
+ while (pStr < pStrEnd) {
+ dwHashCode = 31 * dwHashCode + FXSYS_tolower(*pStr++);
}
- const FX_CHAR* pStrEnd = pStr + iLength;
- FX_DWORD dwHashCode = 0;
- if (bIgnoreCase) {
- while (pStr < pStrEnd) {
- dwHashCode = 31 * dwHashCode + FXSYS_tolower(*pStr++);
- }
- } else {
- while (pStr < pStrEnd) {
- dwHashCode = 31 * dwHashCode + *pStr ++;
- }
+ } else {
+ while (pStr < pStrEnd) {
+ dwHashCode = 31 * dwHashCode + *pStr++;
}
- return dwHashCode;
+ }
+ return dwHashCode;
}
-FX_DWORD FX_HashCode_String_GetW(const FX_WCHAR* pStr, int32_t iLength, FX_BOOL bIgnoreCase)
-{
- FXSYS_assert(pStr != NULL);
- if (iLength < 0) {
- iLength = (int32_t)FXSYS_wcslen(pStr);
+FX_DWORD FX_HashCode_String_GetW(const FX_WCHAR* pStr,
+ int32_t iLength,
+ FX_BOOL bIgnoreCase) {
+ FXSYS_assert(pStr != NULL);
+ if (iLength < 0) {
+ iLength = (int32_t)FXSYS_wcslen(pStr);
+ }
+ const FX_WCHAR* pStrEnd = pStr + iLength;
+ FX_DWORD dwHashCode = 0;
+ if (bIgnoreCase) {
+ while (pStr < pStrEnd) {
+ dwHashCode = 1313 * dwHashCode + FXSYS_tolower(*pStr++);
}
- const FX_WCHAR* pStrEnd = pStr + iLength;
- FX_DWORD dwHashCode = 0;
- if (bIgnoreCase) {
- while (pStr < pStrEnd) {
- dwHashCode = 1313 * dwHashCode + FXSYS_tolower(*pStr++);
- }
- } else {
- while (pStr < pStrEnd) {
- dwHashCode = 1313 * dwHashCode + *pStr ++;
- }
+ } else {
+ while (pStr < pStrEnd) {
+ dwHashCode = 1313 * dwHashCode + *pStr++;
}
- return dwHashCode;
+ }
+ return dwHashCode;
}
#ifdef __cplusplus
}
@@ -205,109 +201,106 @@ FX_DWORD FX_HashCode_String_GetW(const FX_WCHAR* pStr, int32_t iLength, FX_BOOL
#ifdef __cplusplus
extern "C" {
#endif
-void* FX_Random_MT_Start(FX_DWORD dwSeed)
-{
- FX_LPMTRANDOMCONTEXT pContext = FX_Alloc(FX_MTRANDOMCONTEXT, 1);
- pContext->mt[0] = dwSeed;
- FX_DWORD &i = pContext->mti;
- FX_DWORD* pBuf = pContext->mt;
- for (i = 1; i < MT_N; i ++) {
- pBuf[i] = (1812433253UL * (pBuf[i - 1] ^ (pBuf[i - 1] >> 30)) + i);
- }
- pContext->bHaveSeed = TRUE;
- return pContext;
+void* FX_Random_MT_Start(FX_DWORD dwSeed) {
+ FX_LPMTRANDOMCONTEXT pContext = FX_Alloc(FX_MTRANDOMCONTEXT, 1);
+ pContext->mt[0] = dwSeed;
+ FX_DWORD& i = pContext->mti;
+ FX_DWORD* pBuf = pContext->mt;
+ for (i = 1; i < MT_N; i++) {
+ pBuf[i] = (1812433253UL * (pBuf[i - 1] ^ (pBuf[i - 1] >> 30)) + i);
+ }
+ pContext->bHaveSeed = TRUE;
+ return pContext;
}
-FX_DWORD FX_Random_MT_Generate(void* pContext)
-{
- FXSYS_assert(pContext != NULL);
- FX_LPMTRANDOMCONTEXT pMTC = (FX_LPMTRANDOMCONTEXT)pContext;
- FX_DWORD v;
- static FX_DWORD mag[2] = {0, MT_Matrix_A};
- FX_DWORD &mti = pMTC->mti;
- FX_DWORD* pBuf = pMTC->mt;
- if ((int)mti < 0 || mti >= MT_N) {
- if (mti > MT_N && !pMTC->bHaveSeed) {
- return 0;
- }
- FX_DWORD kk;
- for (kk = 0; kk < MT_N - MT_M; kk ++) {
- v = (pBuf[kk] & MT_Upper_Mask) | (pBuf[kk + 1] & MT_Lower_Mask);
- pBuf[kk] = pBuf[kk + MT_M] ^ (v >> 1) ^ mag[v & 1];
- }
- for (; kk < MT_N - 1; kk ++) {
- v = (pBuf[kk] & MT_Upper_Mask) | (pBuf[kk + 1] & MT_Lower_Mask);
- pBuf[kk] = pBuf[kk + (MT_M - MT_N)] ^ (v >> 1) ^ mag[v & 1];
- }
- v = (pBuf[MT_N - 1] & MT_Upper_Mask) | (pBuf[0] & MT_Lower_Mask);
- pBuf[MT_N - 1] = pBuf[MT_M - 1] ^ (v >> 1) ^ mag[v & 1];
- mti = 0;
+FX_DWORD FX_Random_MT_Generate(void* pContext) {
+ FXSYS_assert(pContext != NULL);
+ FX_LPMTRANDOMCONTEXT pMTC = (FX_LPMTRANDOMCONTEXT)pContext;
+ FX_DWORD v;
+ static FX_DWORD mag[2] = {0, MT_Matrix_A};
+ FX_DWORD& mti = pMTC->mti;
+ FX_DWORD* pBuf = pMTC->mt;
+ if ((int)mti < 0 || mti >= MT_N) {
+ if (mti > MT_N && !pMTC->bHaveSeed) {
+ return 0;
}
- v = pBuf[mti ++];
- v ^= (v >> 11);
- v ^= (v << 7) & 0x9d2c5680UL;
- v ^= (v << 15) & 0xefc60000UL;
- v ^= (v >> 18);
- return v;
+ FX_DWORD kk;
+ for (kk = 0; kk < MT_N - MT_M; kk++) {
+ v = (pBuf[kk] & MT_Upper_Mask) | (pBuf[kk + 1] & MT_Lower_Mask);
+ pBuf[kk] = pBuf[kk + MT_M] ^ (v >> 1) ^ mag[v & 1];
+ }
+ for (; kk < MT_N - 1; kk++) {
+ v = (pBuf[kk] & MT_Upper_Mask) | (pBuf[kk + 1] & MT_Lower_Mask);
+ pBuf[kk] = pBuf[kk + (MT_M - MT_N)] ^ (v >> 1) ^ mag[v & 1];
+ }
+ v = (pBuf[MT_N - 1] & MT_Upper_Mask) | (pBuf[0] & MT_Lower_Mask);
+ pBuf[MT_N - 1] = pBuf[MT_M - 1] ^ (v >> 1) ^ mag[v & 1];
+ mti = 0;
+ }
+ v = pBuf[mti++];
+ v ^= (v >> 11);
+ v ^= (v << 7) & 0x9d2c5680UL;
+ v ^= (v << 15) & 0xefc60000UL;
+ v ^= (v >> 18);
+ return v;
}
-void FX_Random_MT_Close(void* pContext)
-{
- FXSYS_assert(pContext != NULL);
- FX_Free(pContext);
+void FX_Random_MT_Close(void* pContext) {
+ FXSYS_assert(pContext != NULL);
+ FX_Free(pContext);
}
-void FX_Random_GenerateMT(FX_DWORD* pBuffer, int32_t iCount)
-{
- FX_DWORD dwSeed;
+void FX_Random_GenerateMT(FX_DWORD* pBuffer, int32_t iCount) {
+ FX_DWORD dwSeed;
#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
- if (!FX_GenerateCryptoRandom(&dwSeed, 1)) {
- FX_Random_GenerateBase(&dwSeed, 1);
- }
-#else
+ if (!FX_GenerateCryptoRandom(&dwSeed, 1)) {
FX_Random_GenerateBase(&dwSeed, 1);
+ }
+#else
+ FX_Random_GenerateBase(&dwSeed, 1);
#endif
- void* pContext = FX_Random_MT_Start(dwSeed);
- while (iCount -- > 0) {
- *pBuffer ++ = FX_Random_MT_Generate(pContext);
- }
- FX_Random_MT_Close(pContext);
+ void* pContext = FX_Random_MT_Start(dwSeed);
+ while (iCount-- > 0) {
+ *pBuffer++ = FX_Random_MT_Generate(pContext);
+ }
+ FX_Random_MT_Close(pContext);
}
-void FX_Random_GenerateBase(FX_DWORD* pBuffer, int32_t iCount)
-{
+void FX_Random_GenerateBase(FX_DWORD* pBuffer, int32_t iCount) {
#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
- SYSTEMTIME st1, st2;
- ::GetSystemTime(&st1);
- do {
- ::GetSystemTime(&st2);
- } while (FXSYS_memcmp(&st1, &st2, sizeof(SYSTEMTIME)) == 0);
- FX_DWORD dwHash1 = FX_HashCode_String_GetA((const FX_CHAR*)&st1, sizeof(st1), TRUE);
- FX_DWORD dwHash2 = FX_HashCode_String_GetA((const FX_CHAR*)&st2, sizeof(st2), TRUE);
- ::srand((dwHash1 << 16) | (FX_DWORD)dwHash2);
+ SYSTEMTIME st1, st2;
+ ::GetSystemTime(&st1);
+ do {
+ ::GetSystemTime(&st2);
+ } while (FXSYS_memcmp(&st1, &st2, sizeof(SYSTEMTIME)) == 0);
+ FX_DWORD dwHash1 =
+ FX_HashCode_String_GetA((const FX_CHAR*)&st1, sizeof(st1), TRUE);
+ FX_DWORD dwHash2 =
+ FX_HashCode_String_GetA((const FX_CHAR*)&st2, sizeof(st2), TRUE);
+ ::srand((dwHash1 << 16) | (FX_DWORD)dwHash2);
#else
- time_t tmLast = time(NULL), tmCur;
- while ((tmCur = time(NULL)) == tmLast);
- ::srand((tmCur << 16) | (tmLast & 0xFFFF));
+ time_t tmLast = time(NULL), tmCur;
+ while ((tmCur = time(NULL)) == tmLast)
+ ;
+ ::srand((tmCur << 16) | (tmLast & 0xFFFF));
#endif
- while (iCount -- > 0) {
- *pBuffer ++ = (FX_DWORD)((::rand() << 16) | (::rand() & 0xFFFF));
- }
+ while (iCount-- > 0) {
+ *pBuffer++ = (FX_DWORD)((::rand() << 16) | (::rand() & 0xFFFF));
+ }
}
#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
-FX_BOOL FX_GenerateCryptoRandom(FX_DWORD* pBuffer, int32_t iCount)
-{
- HCRYPTPROV hCP = NULL;
- if (!::CryptAcquireContext(&hCP, NULL, NULL, PROV_RSA_FULL, 0) || hCP == NULL) {
- return FALSE;
- }
- ::CryptGenRandom(hCP, iCount * sizeof(FX_DWORD), (uint8_t*)pBuffer);
- ::CryptReleaseContext(hCP, 0);
- return TRUE;
+FX_BOOL FX_GenerateCryptoRandom(FX_DWORD* pBuffer, int32_t iCount) {
+ HCRYPTPROV hCP = NULL;
+ if (!::CryptAcquireContext(&hCP, NULL, NULL, PROV_RSA_FULL, 0) ||
+ hCP == NULL) {
+ return FALSE;
+ }
+ ::CryptGenRandom(hCP, iCount * sizeof(FX_DWORD), (uint8_t*)pBuffer);
+ ::CryptReleaseContext(hCP, 0);
+ return TRUE;
}
#endif
-void FX_Random_GenerateCrypto(FX_DWORD* pBuffer, int32_t iCount)
-{
+void FX_Random_GenerateCrypto(FX_DWORD* pBuffer, int32_t iCount) {
#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
- FX_GenerateCryptoRandom(pBuffer, iCount);
+ FX_GenerateCryptoRandom(pBuffer, iCount);
#else
- FX_Random_GenerateBase(pBuffer, iCount);
+ FX_Random_GenerateBase(pBuffer, iCount);
#endif
}
#ifdef __cplusplus
diff --git a/core/src/fxcrt/fx_ucddata.cpp b/core/src/fxcrt/fx_ucddata.cpp
index e632769988..8b35f31e2b 100644
--- a/core/src/fxcrt/fx_ucddata.cpp
+++ b/core/src/fxcrt/fx_ucddata.cpp
@@ -7,4140 +7,10996 @@
#include "../../include/fxcrt/fx_system.h"
extern const FX_DWORD gs_FX_TextLayout_CodeProperties[65536] = {
- 0xfffe9a93, 0xfffe9a93, 0xfffe9a93, 0xfffe9a93, 0xfffe9a93, 0xfffe9a93, 0xfffe9a93, 0xfffe9a93, 0xfffe9a93, 0xfffe8ae5, 0xfffe9b5c, 0xfffe9ada, 0xfffe9b1a, 0xfffe9b5b, 0xfffe9a93, 0xfffe9a93,
- 0xfffe9a93, 0xfffe9a93, 0xfffe9a93, 0xfffe9a93, 0xfffe9a93, 0xfffe9a93, 0xfffe9a93, 0xfffe9a93, 0xfffe9a93, 0xfffe9a93, 0xfffe9a93, 0xfffe9a93, 0xfffe9b53, 0xfffe9b53, 0xfffe9b53, 0xfffe9ad3,
- 0xfffe9323, 0xfffeb005, 0xfffeb002, 0xfffeb24b, 0xfffeb248, 0xfffeb249, 0xfffeb00b, 0xfffeb002, 0x007eb000, 0x00feb001, 0xfffeb00b, 0xfffeb208, 0xfffeb1c7, 0xfffeb20e, 0xfffeb1c7, 0xfffeb1c6,
- 0xfffea90a, 0xfffea90a, 0xfffea90a, 0xfffea90a, 0xfffea90a, 0xfffea90a, 0xfffea90a, 0xfffea90a, 0xfffea90a, 0xfffea90a, 0xfffeb1c7, 0xfffeb007, 0x017eb000, 0xfffeb00b, 0x01feb001, 0xfffeb005,
- 0xfffeb00b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0x027eb000, 0xfffeb008, 0x02feb001, 0xfffeb00b, 0xff80b00b,
- 0xfffeb00b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0x037eb000, 0xfffeb00f, 0x03feb001, 0xfffeb00b, 0xfffeb293,
- 0xfffeb293, 0xfffeb293, 0xfffeb293, 0xfffeb293, 0xfffeb293, 0xfffeb35d, 0xfffeb293, 0xfffeb293, 0xfffeb293, 0xfffeb293, 0xfffeb293, 0xfffeb293, 0xfffeb293, 0xfffeb293, 0xfffeb293, 0xfffeb293,
- 0xfffeb293, 0xfffeb293, 0xfffeb293, 0xfffeb293, 0xfffeb293, 0xfffeb293, 0xfffeb293, 0xfffeb293, 0xfffeb293, 0xfffeb293, 0xfffeb293, 0xfffeb293, 0xfffeb293, 0xfffeb293, 0xfffeb293, 0xfffeb293,
- 0xfffe91c3, 0xfffeb000, 0xfffeb249, 0xfffeb248, 0xfffeb248, 0xfffeb248, 0xfffeb00b, 0xfffeb022, 0xfffeb022, 0xfffeb00b, 0xfffeb062, 0x047eb000, 0xfffeb00b, 0xfffeb28f, 0xfffeb00b, 0xfffeb00b,
- 0xfffeb249, 0xfffeb248, 0xfffeb122, 0xfffeb122, 0xfffeb010, 0xfffeb04b, 0xfffeb022, 0xfffeb022, 0xfffeb022, 0xfffeb122, 0xfffeb062, 0x04feb001, 0xfffeb022, 0xfffeb022, 0xfffeb022, 0xfffeb000,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb022, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb022, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb00b, 0xfffeb00b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb022, 0xfffeb010, 0xfffeb022, 0xfffeb022, 0xfffeb022, 0xfffeb010, 0xfffeb022, 0xfffeb00b, 0xfffeb00b,
- 0xfffeb062, 0xfffeb04b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb022, 0xfffeb022, 0xfffeb022, 0xfffeb022, 0xfffeb00b, 0xfffeb022, 0xfffeb00b, 0xfffeb010,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb04b, 0xfffeb00b,
- 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
- 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
- 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
- 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
- 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
- 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea183,
- 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea183, 0xfffea183, 0xfffea183, 0xfffea183,
- 0xfffea183, 0xfffea183, 0xfffea183, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb00b, 0xfffeb00b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb007, 0xfffe8024,
- 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffeb00b, 0xfffeb00b, 0xfffeb04b, 0xfffeb00b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb00b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffeb193, 0xfffeb193, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffeb047, 0xfffeb00f, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffe80a4, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
- 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
- 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffeb08f, 0xfffea193,
- 0xfffeb08b, 0xfffea193, 0xfffea193, 0xfffeb08b, 0xfffea193, 0xfffea193, 0xfffeb085, 0xfffea193, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4,
- 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b,
- 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4,
- 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4,
- 0xfffed0cb, 0xfffed0cb, 0xfffed0cb, 0xfffed0cb, 0xfffed164, 0xfffed164, 0xfffed00b, 0xfffed00b, 0xfffed14b, 0xfffed249, 0xfffed249, 0xfffed149, 0xfffed1c7, 0xfffed147, 0xfffed00b, 0xfffed00b,
- 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffed145, 0xfffed164, 0xfffed164, 0xfffed145, 0xfffed145,
- 0xfffed164, 0xfffed14b, 0xfffeb94b, 0xfffeb94b, 0xfffec14b, 0xfffeb94b, 0xfffec94b, 0xfffeb94b, 0xfffec94b, 0xfffec14b, 0xfffec94b, 0xfffec94b, 0xfffec94b, 0xfffec94b, 0xfffec94b, 0xfffec14b,
- 0xfffec14b, 0xfffec14b, 0xfffec14b, 0xfffec94b, 0xfffec94b, 0xfffec94b, 0xfffec94b, 0xfffec94b, 0xfffec94b, 0xfffec94b, 0xfffec94b, 0xfffed14b, 0xfffed14b, 0xfffed14b, 0xfffed14b, 0xfffed14b,
- 0xfffec94b, 0xfffec94b, 0xfffec94b, 0xfffec94b, 0xfffec94b, 0xfffec94b, 0xfffec94b, 0xfffec94b, 0xfffec14b, 0xfffec94b, 0xfffec94b, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
- 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffed164,
- 0xfffed0ca, 0xfffed0ca, 0xfffed0ca, 0xfffed0ca, 0xfffed0ca, 0xfffed0ca, 0xfffed0ca, 0xfffed0ca, 0xfffed0ca, 0xfffed0ca, 0xfffed249, 0xfffed0ca, 0xfffed0ca, 0xfffed14b, 0xfffed14b, 0xfffed14b,
- 0xfffea193, 0xfffec14b, 0xfffec14b, 0xfffec14b, 0xfffea14b, 0xfffec14b, 0xfffec14b, 0xfffec14b, 0xfffec94b, 0xfffec94b, 0xfffec94b, 0xfffec94b, 0xfffec94b, 0xfffec94b, 0xfffec94b, 0xfffec94b,
- 0xfffec94b, 0xfffec94b, 0xfffec94b, 0xfffec94b, 0xfffec94b, 0xfffec94b, 0xfffec94b, 0xfffec94b, 0xfffec14b, 0xfffec14b, 0xfffec14b, 0xfffec14b, 0xfffec14b, 0xfffec14b, 0xfffec14b, 0xfffec14b,
- 0xfffec14b, 0xfffec14b, 0xfffec14b, 0xfffec14b, 0xfffec14b, 0xfffec14b, 0xfffec14b, 0xfffec14b, 0xfffec14b, 0xfffec14b, 0xfffec94b, 0xfffec94b, 0xfffec94b, 0xfffec94b, 0xfffec94b, 0xfffec94b,
- 0xfffec94b, 0xfffec94b, 0xfffec94b, 0xfffec94b, 0xfffec94b, 0xfffec94b, 0xfffec94b, 0xfffec94b, 0xfffec94b, 0xfffec94b, 0xfffec94b, 0xfffec94b, 0xfffec94b, 0xfffec94b, 0xfffec94b, 0xfffec94b,
- 0xfffec94b, 0xfffec94b, 0xfffec94b, 0xfffec94b, 0xfffec94b, 0xfffec94b, 0xfffec94b, 0xfffec94b, 0xfffed14b, 0xfffed14b, 0xfffec94b, 0xfffec94b, 0xfffec94b, 0xfffec94b, 0xfffec94b, 0xfffec94b,
- 0xfffec14b, 0xfffec94b, 0xfffec94b, 0xfffec14b, 0xfffec14b, 0xfffec14b, 0xfffec14b, 0xfffec14b, 0xfffec14b, 0xfffec14b, 0xfffec14b, 0xfffec14b, 0xfffec94b, 0xfffec14b, 0xfffec94b, 0xfffec14b,
- 0xfffec94b, 0xfffec94b, 0xfffec14b, 0xfffec14b, 0xfffec945, 0xfffec14b, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffed0cb, 0xfffed193, 0xfffea193,
- 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffed14b, 0xfffed14b, 0xfffea193, 0xfffea193, 0xfffed00b, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffec14b, 0xfffec14b,
- 0xfffed10a, 0xfffed10a, 0xfffed10a, 0xfffed10a, 0xfffed10a, 0xfffed10a, 0xfffed10a, 0xfffed10a, 0xfffed10a, 0xfffed10a, 0xfffed14b, 0xfffed14b, 0xfffed14b, 0xfffed14b, 0xfffed14b, 0xfffed14b,
- 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffe8164, 0xfffeb28b,
- 0xfffeb14b, 0xfffea193, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b,
- 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b,
- 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
- 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffe8164, 0xfffe8164, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b,
- 0xfffed14b, 0xfffed14b, 0xfffed14b, 0xfffed14b, 0xfffed14b, 0xfffed14b, 0xfffed14b, 0xfffed14b, 0xfffed14b, 0xfffec14b, 0xfffec14b, 0xfffec14b, 0xfffed14b, 0xfffed14b, 0xfffed14b, 0xfffed14b,
- 0xfffed14b, 0xfffed14b, 0xfffed14b, 0xfffed14b, 0xfffed14b, 0xfffed14b, 0xfffed14b, 0xfffed14b, 0xfffed14b, 0xfffed14b, 0xfffed14b, 0xfffec14b, 0xfffec14b, 0xfffed14b, 0xfffed14b, 0xfffed14b,
- 0xfffed14b, 0xfffec14b, 0xfffed14b, 0xfffec14b, 0xfffec14b, 0xfffed14b, 0xfffed14b, 0xfffed14b, 0xfffec14b, 0xfffec14b, 0xfffed14b, 0xfffed14b, 0xfffed14b, 0xfffed14b, 0xfffed14b, 0xfffed14b,
- 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b,
- 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b,
- 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
- 0xfffea193, 0xfffeb14b, 0xfffe8164, 0xfffe8164, 0xfffe8164, 0xfffe8164, 0xfffe8164, 0xfffe8164, 0xfffe8164, 0xfffe8164, 0xfffe8164, 0xfffe8164, 0xfffe8164, 0xfffe8164, 0xfffe8164, 0xfffe8164,
- 0xfffeb08a, 0xfffeb08a, 0xfffeb08a, 0xfffeb08a, 0xfffeb08a, 0xfffeb08a, 0xfffeb08a, 0xfffeb08a, 0xfffeb08a, 0xfffeb08a, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b,
- 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b,
- 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
- 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffeb08b, 0xfffeb08b, 0xfffeb00b, 0xfffeb00b, 0xfffeb007, 0xfffeb005, 0xfffeb08b, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4,
- 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b,
- 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffeb08b, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
- 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffeb08b, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffeb08b, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffe80a4, 0xfffe80a4,
- 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffe80a4,
- 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4,
- 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4,
- 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4,
- 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4,
- 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4,
- 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4,
- 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4,
- 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4,
- 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4,
- 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4,
- 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4,
- 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4,
- 0xfffea193, 0xfffea193, 0xfffea193, 0xfffeb053, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffea193, 0xfffeb04b, 0xfffeb053, 0xfffeb053,
- 0xfffeb053, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffeb053, 0xfffeb053, 0xfffeb053, 0xfffeb053, 0xfffea193, 0xfffeb053, 0xfffe8024,
- 0xfffeb04b, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffe8024, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffea193, 0xfffea193, 0xfffeb04f, 0xfffeb04f, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffe8024, 0xfffea193, 0xfffeb053, 0xfffeb053, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffeb04b,
- 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffea193, 0xfffeb04b, 0xfffeb053, 0xfffeb053,
- 0xfffeb053, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffe8024, 0xfffe8024, 0xfffeb053, 0xfffeb053, 0xfffe8024, 0xfffe8024, 0xfffeb053, 0xfffeb053, 0xfffea193, 0xfffeb04b, 0xfffe8024,
- 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffeb053, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffea193, 0xfffea193, 0xfffe8024, 0xfffe8024, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb249, 0xfffeb249, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb049, 0xfffeb04b, 0xfffeb248, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffe8024, 0xfffea193, 0xfffea193, 0xfffeb053, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffeb04b,
- 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffea193, 0xfffe8024, 0xfffeb053, 0xfffeb053,
- 0xfffeb053, 0xfffea193, 0xfffea193, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffea193, 0xfffea193, 0xfffe8024, 0xfffe8024, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffe8024, 0xfffe8024,
- 0xfffe8024, 0xfffea193, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffe8024,
- 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a,
- 0xfffea193, 0xfffea193, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffea193, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffe8024, 0xfffea193, 0xfffea193, 0xfffeb053, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffea193, 0xfffeb04b, 0xfffeb053, 0xfffeb053,
- 0xfffeb053, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffe8024, 0xfffea193, 0xfffea193, 0xfffeb053, 0xfffe8024, 0xfffeb053, 0xfffeb053, 0xfffea193, 0xfffe8024, 0xfffe8024,
- 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffeb04b, 0xfffeb04b, 0xfffea193, 0xfffea193, 0xfffe8024, 0xfffe8024, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a,
- 0xfffe8024, 0xfffeb248, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffe8024, 0xfffea193, 0xfffeb053, 0xfffeb053, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffeb04b,
- 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffea193, 0xfffeb04b, 0xfffeb053, 0xfffea193,
- 0xfffeb053, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffe8024, 0xfffe8024, 0xfffeb053, 0xfffeb053, 0xfffe8024, 0xfffe8024, 0xfffeb053, 0xfffeb053, 0xfffea193, 0xfffe8024, 0xfffe8024,
- 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffea193, 0xfffeb053, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffea193, 0xfffea193, 0xfffe8024, 0xfffe8024, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a,
- 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffe8024, 0xfffe8024, 0xfffea193, 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffeb04b,
- 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffeb053, 0xfffeb053,
- 0xfffea193, 0xfffeb053, 0xfffeb053, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffeb053, 0xfffeb053, 0xfffeb053, 0xfffe8024, 0xfffeb053, 0xfffeb053, 0xfffeb053, 0xfffea193, 0xfffe8024, 0xfffe8024,
- 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffeb053, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb248, 0xfffeb00b, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffe8024, 0xfffeb053, 0xfffeb053, 0xfffeb053, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffeb04b, 0xfffea193, 0xfffea193,
- 0xfffea193, 0xfffeb053, 0xfffeb053, 0xfffeb053, 0xfffeb053, 0xfffe8024, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffe8024, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffe8024, 0xfffe8024,
- 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffea193, 0xfffea193, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffeb04b, 0xfffeb04b, 0xfffea193, 0xfffea193, 0xfffe8024, 0xfffe8024, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a,
- 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb04b,
- 0xfffe8024, 0xfffe8024, 0xfffeb053, 0xfffeb053, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffea193, 0xfffeb04b, 0xfffeb053, 0xfffea053,
- 0xfffeb053, 0xfffeb053, 0xfffeb053, 0xfffeb053, 0xfffeb053, 0xfffe8024, 0xfffea053, 0xfffeb053, 0xfffeb053, 0xfffe8024, 0xfffeb053, 0xfffeb053, 0xfffea193, 0xfffea193, 0xfffe8024, 0xfffe8024,
- 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffeb053, 0xfffeb053, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffeb04b, 0xfffe8024,
- 0xfffeb04b, 0xfffeb04b, 0xfffea193, 0xfffea193, 0xfffe8024, 0xfffe8024, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a,
- 0xfffe8024, 0xfffeb00b, 0xfffeb00b, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffe8024, 0xfffe8024, 0xfffeb053, 0xfffeb053, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffeb04b, 0xfffeb053, 0xfffeb053,
- 0xfffeb053, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffe8024, 0xfffeb053, 0xfffeb053, 0xfffeb053, 0xfffe8024, 0xfffeb053, 0xfffeb053, 0xfffeb053, 0xfffea193, 0xfffe8024, 0xfffe8024,
- 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffeb053, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffeb04b, 0xfffeb04b, 0xfffea193, 0xfffea193, 0xfffe8024, 0xfffe8024, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffeb049, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffe8024, 0xfffe8024, 0xfffeb053, 0xfffeb053, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffe8024, 0xfffe8024,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffea193, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffeb053,
- 0xfffeb053, 0xfffeb053, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffe8024, 0xfffea193, 0xfffe8024, 0xfffeb053, 0xfffeb053, 0xfffeb053, 0xfffeb053, 0xfffeb053, 0xfffeb053, 0xfffeb053, 0xfffeb053,
- 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffe8024, 0xfffe8024, 0xfffeb053, 0xfffeb053, 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffe8024, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
- 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
- 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
- 0xfffeb05e, 0xfffea19e, 0xfffeb05e, 0xfffeb05e, 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffeb248,
- 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffeb04b,
- 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04f, 0xfffeb04f, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffe8024, 0xfffeb05e, 0xfffeb05e, 0xfffe8024, 0xfffeb05e, 0xfffe8024, 0xfffe8024, 0xfffeb05e, 0xfffeb05e, 0xfffe8024, 0xfffeb05e, 0xfffe8024, 0xfffe8024, 0xfffeb05e, 0xfffe8024, 0xfffe8024,
- 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffe8024, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
- 0xfffe8024, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffe8024, 0xfffeb05e, 0xfffe8024, 0xfffeb05e, 0xfffe8024, 0xfffe8024, 0xfffeb05e, 0xfffeb05e, 0xfffe8024, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
- 0xfffeb05e, 0xfffea19e, 0xfffeb05e, 0xfffeb05e, 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffe8024, 0xfffea19e, 0xfffea19e, 0xfffeb05e, 0xfffe8024, 0xfffe8024,
- 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffe8024, 0xfffeb05e, 0xfffe8024, 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffe8024, 0xfffe8024,
- 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffe8024, 0xfffe8024, 0xfffeb05e, 0xfffeb05e, 0xfffe8024, 0xfffe8024,
- 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffeb04b, 0xfffeb050, 0xfffeb050, 0xfffeb050, 0xfffeb050, 0xfffeb04b, 0xfffeb050, 0xfffeb050, 0xfffeb043, 0xfffeb050, 0xfffeb050, 0xfffeb04f, 0xfffeb043, 0xfffeb045, 0xfffeb045, 0xfffeb045,
- 0xfffeb045, 0xfffeb045, 0xfffeb043, 0xfffeb04b, 0xfffeb045, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffea193, 0xfffea193, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04f, 0xfffea193, 0xfffeb04b, 0xfffea193, 0xfffeb04b, 0xfffea193, 0x057eb000, 0x05feb001, 0x067eb000, 0x06feb001, 0xfffeb053, 0xfffeb053,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffe8024, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffeb04f,
- 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffeb04f, 0xfffea193, 0xfffea193, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffe8024, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
- 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
- 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffe8024, 0xfffeb04f, 0xfffeb04f,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffea193, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb050, 0xfffeb050, 0xfffeb04f, 0xfffeb050, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
- 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
- 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffea19e, 0xfffea19e, 0xfffea19e,
- 0xfffea19e, 0xfffeb05e, 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffeb05e, 0xfffea19e, 0xfffea19e, 0xfffeb05e, 0xfffeb05e, 0xfffea19e, 0xfffea19e, 0xfffeb05e,
- 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04f, 0xfffeb04f, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffea19e, 0xfffea19e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffea19e, 0xfffea19e,
- 0xfffea19e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
- 0xfffeb05e, 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
- 0xfffeb05e, 0xfffeb05e, 0xfffea19e, 0xfffeb05e, 0xfffeb05e, 0xfffea19e, 0xfffea19e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffea19e, 0xfffeb05e, 0xfffeb05e,
- 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffea19e, 0xfffeb05e, 0xfffeb05e,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057,
- 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057,
- 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057,
- 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057,
- 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057,
- 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057,
- 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058,
- 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058,
- 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058,
- 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058,
- 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059,
- 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059,
- 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059,
- 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059,
- 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059,
- 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024,
- 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffea193,
- 0xfffeb04b, 0xfffeb04f, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffeb00f, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb30f, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0x077eb000, 0x07feb001, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04f, 0xfffeb04f, 0xfffeb04f, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffeb04f, 0xfffeb04f, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffea193, 0xfffea193, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffe8024, 0xfffea193, 0xfffea193, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
- 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
- 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
- 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffeb05e, 0xfffeb05e,
- 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffea19e, 0xfffeb05e, 0xfffeb05e, 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffea19e,
- 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffeb04f, 0xfffeb04f, 0xfffeb044, 0xfffeb05e, 0xfffeb04f, 0xfffeb04b, 0xfffeb04f, 0xfffeb248, 0xfffeb05e, 0xfffea19e, 0xfffe8024, 0xfffe8024,
- 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffeb00b, 0xfffeb00b, 0xfffeb005, 0xfffeb005, 0xfffeb00f, 0xfffeb00f, 0xfffeb010, 0xfffeb00b, 0xfffeb005, 0xfffeb005, 0xfffeb00b, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffeb303, 0xfffe8024,
- 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffea193, 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffea193, 0xfffea193, 0xfffea193, 0xfffeb053, 0xfffeb053, 0xfffeb053, 0xfffeb053, 0xfffea193, 0xfffea193, 0xfffeb053, 0xfffeb053, 0xfffeb053, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffeb053, 0xfffeb053, 0xfffea193, 0xfffeb053, 0xfffeb053, 0xfffeb053, 0xfffeb053, 0xfffeb053, 0xfffeb053, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffeb00b, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffeb005, 0xfffeb005, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a,
- 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
- 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffe8024, 0xfffe8024,
- 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
- 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
- 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
- 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffeb01e, 0xfffeb01e,
- 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
- 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffea193, 0xfffea193, 0xfffeb053, 0xfffeb053, 0xfffeb053, 0xfffe8024, 0xfffe8024, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
- 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
- 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
- 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffea19e, 0xfffeb05e, 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffe8024,
- 0xfffea19e, 0xfffeb05e, 0xfffea19e, 0xfffeb05e, 0xfffeb05e, 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
- 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffe8024, 0xfffe8024, 0xfffea193,
- 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffe8024, 0xfffe8024,
- 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffeb053, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffea193, 0xfffeb053, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffeb053, 0xfffea193, 0xfffeb053, 0xfffeb053, 0xfffeb053,
- 0xfffeb053, 0xfffeb053, 0xfffea193, 0xfffeb053, 0xfffeb053, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04f, 0xfffeb04f, 0xfffeb04b, 0xfffeb04f, 0xfffeb04f, 0xfffeb04f,
- 0xfffeb04f, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
- 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffea193, 0xfffea193, 0xfffeb053, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb053, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffeb053, 0xfffeb053, 0xfffea193, 0xfffea193, 0xfffeb053, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb053, 0xfffeb053, 0xfffeb053, 0xfffeb053, 0xfffeb053, 0xfffeb053, 0xfffeb053, 0xfffeb053, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
- 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffeb053, 0xfffeb053, 0xfffea193, 0xfffea193, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffeb04f, 0xfffeb04f, 0xfffeb04f, 0xfffeb04f, 0xfffeb04f,
- 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04f, 0xfffeb04f,
- 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffea193, 0xfffea193, 0xfffea193, 0xfffeb04b, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
- 0xfffea193, 0xfffeb053, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffea193, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb053, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
- 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
- 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffea193, 0xfffea193, 0xfffea193,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffe8024, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb00b, 0xfffeb04b, 0xfffeb00b,
- 0xfffeb00b, 0xfffeb00b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
- 0xfffe8024, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb010, 0xfffeb00b, 0xfffe8024,
- 0xfffeb30f, 0xfffeb30f, 0xfffeb30f, 0xfffeb30f, 0xfffeb30f, 0xfffeb30f, 0xfffeb30f, 0xfffeb303, 0xfffeb30f, 0xfffeb30f, 0xfffeb30f, 0xfffeb292, 0xfffe9a93, 0xfffe9a93, 0xfffe9853, 0xfffe9893,
- 0xfffeb00f, 0xfffeb003, 0xfffeb00f, 0xff82b00f, 0xff84b011, 0xfffeb022, 0xfffeb022, 0xfffeb00b, 0x0806b000, 0x0888b002, 0xfffeb000, 0xfffeb002, 0x090ab000, 0x098cb001, 0xfffeb000, 0xfffeb002,
- 0xfffeb022, 0xfffeb022, 0xfffeb00b, 0xfffeb00b, 0xfffeb00d, 0xfffeb00d, 0xfffeb00d, 0xfffeb00f, 0xfffe9b1a, 0xfffe9b5a, 0xfffe9c53, 0xfffe9bd3, 0xfffe9c93, 0xfffe9c13, 0xfffe9b93, 0xfffeb1c3,
- 0xfffeb249, 0xfffeb249, 0xfffeb249, 0xfffeb249, 0xfffeb249, 0xfffeb009, 0xfffeb009, 0xfffeb009, 0xfffeb00b, 0x0a7eb000, 0x0afeb001, 0xfffeb022, 0xfffeb004, 0xfffeb004, 0xfffeb00b, 0xfffeb00b,
- 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb1c7, 0x0b7eb000, 0x0bfeb001, 0xfffeb004, 0xfffeb004, 0xfffeb004, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
- 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00f, 0xfffeb00b, 0xfffeb00f, 0xfffeb00f, 0xfffeb00f, 0xfffeb00f, 0xfffeb00b, 0xfffeb00f, 0xfffeb00f, 0xfffeb30f,
- 0xfffeb294, 0xfffeb28b, 0xfffeb28b, 0xfffeb28b, 0xfffeb28b, 0xfffe82a4, 0xfffe82a4, 0xfffe82a4, 0xfffe82a4, 0xfffe82a4, 0xfffe9a93, 0xfffe9a93, 0xfffe9a93, 0xfffe9a93, 0xfffe9a93, 0xfffe9a93,
- 0xfffeb10b, 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffeb122, 0xfffeb10b, 0xfffeb10b, 0xfffeb10b, 0xfffeb10b, 0xfffeb10b, 0xfffeb20b, 0xfffeb20b, 0xfffeb00b, 0x0c7eb000, 0x0cfeb001, 0xfffeb062,
- 0xfffeb10b, 0xfffeb122, 0xfffeb122, 0xfffeb122, 0xfffeb122, 0xfffeb10b, 0xfffeb10b, 0xfffeb10b, 0xfffeb10b, 0xfffeb10b, 0xfffeb20b, 0xfffeb20b, 0xfffeb00b, 0x0d7eb000, 0x0dfeb001, 0xfffe8024,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffeb248, 0xfffeb248, 0xfffeb248, 0xfffeb248, 0xfffeb248, 0xfffeb248, 0xfffeb248, 0xfffeb249, 0xfffeb248, 0xfffeb248, 0xfffeb248, 0xfffeb248, 0xfffeb248, 0xfffeb248, 0xfffeb248, 0xfffeb248,
- 0xfffeb248, 0xfffeb248, 0xfffeb248, 0xfffeb248, 0xfffeb248, 0xfffeb248, 0xfffeb249, 0xfffeb248, 0xfffeb248, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffeb193, 0xfffeb193, 0xfffeb193,
- 0xfffeb193, 0xfffea193, 0xfffeb193, 0xfffeb193, 0xfffeb193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
- 0xfffea193, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffeb00b, 0xfffeb00b, 0xfffeb04b, 0xfffeb009, 0xfffeb00b, 0xfffeb022, 0xfffeb00b, 0xfffeb04b, 0xfffeb00b, 0xfffeb009, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb062, 0xfffeb00b, 0xfffeb04b, 0xfffeb008, 0xfffeb00b, 0xfffeb00b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb00b, 0xfffeb00b,
- 0xfffeb00b, 0xfffeb022, 0xfffeb022, 0xfffeb00b, 0xfffeb04b, 0xfffeb00b, 0xfffeb04b, 0xfffeb00b, 0xfffeb04b, 0xfffeb00b, 0xfffeb04b, 0xfffeb062, 0xfffeb04b, 0xfffeb04b, 0xfffeb24b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb00b, 0xfffeb00b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb022, 0xfffeb022, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb022, 0xfffeb00b, 0xfffeb00b, 0xfffeb022, 0xfffeb00b,
- 0xfffeb062, 0xfffeb062, 0xfffeb062, 0xfffeb062, 0xfffeb062, 0xfffeb062, 0xfffeb062, 0xfffeb062, 0xfffeb062, 0xfffeb062, 0xfffeb062, 0xfffeb062, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb062, 0xfffeb062, 0xfffeb062, 0xfffeb062, 0xfffeb062, 0xfffeb062, 0xfffeb062, 0xfffeb062, 0xfffeb062, 0xfffeb062, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb022, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffeb022, 0xfffeb022, 0xfffeb022, 0xfffeb022, 0xfffeb022, 0xfffeb022, 0xfffeb022, 0xfffeb022, 0xfffeb022, 0xfffeb022, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
- 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
- 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
- 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
- 0xfffeb00b, 0xfffeb00b, 0xfffeb022, 0xfffeb00b, 0xfffeb022, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
- 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
- 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
- 0xfffeb022, 0xfffeb00b, 0xfffeb022, 0xfffeb022, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb022, 0x0e7eb022, 0x0efeb00b, 0x0f7eb00b, 0x0ffeb022, 0x107eb00b, 0x10feb00b, 0xfffeb00b, 0xfffeb022,
- 0xfffeb00b, 0xfffeb022, 0xfffeb208, 0xfffeb248, 0xfffeb00b, 0x117eb022, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb022, 0xfffeb00b, 0xfffeb00b, 0xfffeb022, 0xfffeb022, 0xfffeb022,
- 0xfffeb022, 0xfffeb00b, 0xfffeb00b, 0xfffeb022, 0xfffeb00b, 0xfffeb022, 0xfffeb00b, 0xfffeb022, 0xfffeb022, 0xfffeb022, 0xfffeb022, 0xfffeb022, 0xfffeb022, 0xfffeb00b, 0xfffeb022, 0xfffeb00b,
- 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb022, 0xfffeb022, 0xfffeb022, 0xfffeb022, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0x11feb022, 0x127eb022, 0xfffeb00b, 0xfffeb00b,
- 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0x12feb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb022, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb022, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
- 0xfffeb00b, 0xfffeb00b, 0x137eb022, 0x13feb00b, 0x147eb00b, 0x14feb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
- 0xfffeb022, 0xfffeb022, 0xfffeb00b, 0xfffeb00b, 0x157eb022, 0x15feb022, 0x167eb022, 0x16feb022, 0x177eb00b, 0x17feb00b, 0x187eb022, 0x18feb022, 0xfffeb00b, 0xfffeb00b, 0x197eb022, 0x19feb022,
- 0x1a7eb00b, 0x1afeb00b, 0x1b7eb00b, 0x1bfeb00b, 0x1c7eb00b, 0x1cfeb00b, 0x1d7eb00b, 0x1dfeb00b, 0x1e7eb00b, 0x1efeb00b, 0x1f7eb00b, 0x1ffeb00b, 0x207eb00b, 0x20feb00b, 0x217eb00b, 0x21feb00b,
- 0x227eb00b, 0x22feb00b, 0x237eb022, 0x23feb022, 0x247eb00b, 0x24feb00b, 0x257eb022, 0x25feb022, 0x267eb00b, 0x26feb00b, 0x277eb00b, 0x27feb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0x287eb00b,
- 0x28feb00b, 0x297eb00b, 0x29feb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb022, 0xfffeb00b, 0xfffeb00b, 0x2a7eb00b, 0xfffeb022, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
- 0xfffeb00b, 0xfffeb00b, 0x2afeb00b, 0x2b7eb00b, 0xfffeb00b, 0xfffeb022, 0x2bfeb00b, 0xfffeb00b, 0x2c7eb00b, 0x2cfeb00b, 0xfffeb00b, 0x2d7eb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
- 0x2dfeb00b, 0x2e7eb00b, 0x2efeb00b, 0x2f7eb00b, 0x2ffeb00b, 0x307eb00b, 0x30feb00b, 0x317eb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb022,
- 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0x31feb00b, 0x327eb00b, 0x32feb00b, 0x337eb00b, 0x33feb00b, 0xfffeb00b, 0xfffeb00b,
- 0x347eb00b, 0x34feb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0x357eb00b, 0x35feb00b, 0x367eb00b, 0x36feb00b, 0x377eb00b, 0x37feb00b, 0x387eb00b, 0x38feb00b, 0x397eb00b, 0x39feb00b,
- 0x3a7eb00b, 0x3afeb00b, 0x3b7eb00b, 0x3bfeb00b, 0x3c7eb00b, 0x3cfeb00b, 0x3d7eb00b, 0x3dfeb00b, 0x3e7eb00b, 0x3efeb00b, 0x3f7eb00b, 0x3ffeb00b, 0x407eb00b, 0x40feb00b, 0xfffeb00b, 0xfffeb00b,
- 0x417eb00b, 0x41feb00b, 0x427eb00b, 0x42feb00b, 0x437eb00b, 0xfffeb00b, 0x43feb00b, 0x447eb00b, 0xfffeb00b, 0xfffeb00b, 0x44feb00b, 0x457eb00b, 0x45feb00b, 0x467eb00b, 0x46feb00b, 0xfffeb00b,
- 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0x477eb00b, 0x47feb00b, 0x487eb00b, 0x48feb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
- 0xfffeb00b, 0xfffeb00b, 0xfffeb022, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
- 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0x497eb000, 0x49feb001, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
- 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
- 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
- 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb04b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
- 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
- 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
- 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
- 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
- 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
- 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
- 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022,
- 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022,
- 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3122, 0xfffe3122, 0xfffe3122, 0xfffe3122, 0xfffe3122, 0xfffe3122, 0xfffe3122, 0xfffe3122,
- 0xfffe3122, 0xfffe3122, 0xfffe3122, 0xfffe3122, 0xfffe3122, 0xfffe3122, 0xfffe3122, 0xfffe3122, 0xfffe3122, 0xfffe3122, 0xfffe3122, 0xfffe3122, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062,
- 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062,
- 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062,
- 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062,
- 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062,
- 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022,
- 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe300b,
- 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022,
- 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022,
- 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022,
- 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022,
- 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
- 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022,
- 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022,
- 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
- 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022,
- 0xfffe300b, 0xfffe300b, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
- 0xfffe3022, 0xfffe3022, 0xfffe300b, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
- 0xfffe300b, 0xfffe300b, 0xfffe3022, 0xfffe3022, 0xfffe300b, 0xfffe300b, 0xfffe3022, 0xfffe3022, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe3022, 0xfffe3022, 0xfffe300b, 0xfffe300b,
- 0xfffe3022, 0xfffe3022, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe300b, 0xfffe300b, 0xfffe3022, 0xfffe300b, 0xfffe300b, 0xfffe3022, 0xfffe3022,
- 0xfffe3022, 0xfffe3022, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
- 0xfffe300b, 0xfffe300b, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe3022,
- 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
- 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe3022, 0xfffe3022, 0xfffe300b, 0xfffe300b, 0xfffe3022, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe3022, 0xfffe3022,
- 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe3022, 0xfffe300b, 0xfffe3022, 0xfffe300b,
- 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
- 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
- 0xfffe3022, 0xfffe300b, 0xfffe3022, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
- 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
- 0xfffe3022, 0xfffe3022, 0xfffe300b, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe300b, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe300b, 0xfffe3022, 0xfffe3022, 0xfffe300b, 0xfffe3022,
- 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
- 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
- 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe3022, 0xfffe3022,
- 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe304b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
- 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe3022, 0xfffe3022,
- 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe0024, 0xfffe3022,
- 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022,
- 0xfffe3022, 0xfffe3022, 0xfffe0024, 0xfffe3022, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022,
- 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022,
- 0xfffe0024, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe0024, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe0024, 0xfffe0024, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
- 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
- 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe0024, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
- 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
- 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe0024, 0xfffe300b, 0xfffe0024, 0xfffe300b,
- 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe300b, 0xfffe3022, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe3002, 0xfffe3002, 0xfffe3002, 0xfffe3002, 0xfffe0024,
- 0xfffe0024, 0xfffe300b, 0xfffe3005, 0xfffe3005, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0x4a7e3000, 0x4afe3001, 0x4b7e3000, 0x4bfe3001, 0x4c7e3000, 0x4cfe3001, 0x4d7e3000, 0x4dfe3001,
- 0x4e7e3000, 0x4efe3001, 0x4f7e3000, 0x4ffe3001, 0x507e3000, 0x50fe3001, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022,
- 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022,
- 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe300b, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
- 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
- 0xfffe0024, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe0024,
- 0xfffe300b, 0xfffe300b, 0xfffe300b, 0x517e300b, 0x51fe300b, 0x527e3000, 0x52fe3001, 0xfffe300b, 0x537e300b, 0x53fe300b, 0xfffe300b, 0xfffe0024, 0xfffe300b, 0xfffe0024, 0xfffe0024, 0xfffe0024,
- 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0x547e300b, 0x54fe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0x557e300b, 0x55fe300b, 0xfffe300b,
- 0xfffe300b, 0xfffe300b, 0x567e300b, 0x56fe300b, 0x577e300b, 0x57fe300b, 0x587e3000, 0x58fe3001, 0x597e3000, 0x59fe3001, 0x5a7e3000, 0x5afe3001, 0x5b7e3000, 0x5bfe3001, 0x5c7e3000, 0x5cfe3001,
- 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
- 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
- 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
- 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
- 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
- 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
- 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
- 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
- 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
- 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
- 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
- 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
- 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
- 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
- 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
- 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
- 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
- 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
- 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
- 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
- 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
- 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
- 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
- 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
- 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
- 0xfffe300b, 0xfffe300b, 0xfffe300b, 0x5d7e3000, 0x5dfe3001, 0x5e7e3000, 0x5efe3001, 0x5f7e3000, 0x5ffe3001, 0x607e3000, 0x60fe3001, 0x617e3000, 0x61fe3001, 0x627e3000, 0x62fe3001, 0x637e3000,
- 0x63fe3001, 0x647e3000, 0x64fe3001, 0x657e3000, 0x65fe3001, 0x667e3000, 0x66fe3001, 0x677e3000, 0x67fe3001, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
- 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
- 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0x687e300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
- 0x68fe300b, 0x697e300b, 0xfffe300b, 0xfffe300b, 0x69fe300b, 0x6a7e300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0x6afe300b,
- 0x6b7e300b, 0x6bfe300b, 0x6c7e300b, 0xfffe300b, 0x6cfe300b, 0x6d7e300b, 0xfffe300b, 0xfffe300b, 0x6dfe3000, 0x6e7e3001, 0x6efe3000, 0x6f7e3001, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
- 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
- 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0x6ffe300b, 0xfffe300b, 0xfffe300b, 0x707e300b, 0x70fe300b, 0xfffe300b, 0xfffe300b, 0x717e3000, 0x71fe3001, 0xfffe300b, 0xfffe300b,
- 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
- 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
- 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0x727e300b, 0x72fe300b, 0x737e300b, 0x73fe300b, 0xfffe300b,
- 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0x747e300b, 0x74fe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0x757e300b, 0x75fe300b, 0xfffe300b, 0xfffe300b,
- 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
- 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
- 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0x767e300b, 0x76fe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
- 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0x777e300b, 0x77fe300b, 0xfffe300b, 0xfffe300b, 0x787e300b, 0x78fe300b, 0x797e300b,
- 0x79fe300b, 0x7a7e300b, 0x7afe300b, 0x7b7e300b, 0x7bfe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0x7c7e300b, 0x7cfe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
- 0xfffe300b, 0x7d7e300b, 0x7dfe300b, 0x7e7e300b, 0x7efe300b, 0x7f7e300b, 0x7ffe300b, 0x807e300b, 0x80fe300b, 0x817e300b, 0x81fe300b, 0x827e300b, 0x82fe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
- 0xfffe300b, 0x837e300b, 0x83fe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0x847e300b, 0x84fe300b, 0x857e300b, 0x85fe300b, 0x867e300b, 0x86fe300b, 0x877e300b, 0x87fe300b, 0xfffe300b, 0x887e300b,
- 0x88fe300b, 0xfffe300b, 0xfffe300b, 0x897e300b, 0x89fe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0x8a7e300b, 0x8afe300b, 0x8b7e300b, 0x8bfe300b, 0x8c7e300b,
- 0x8cfe300b, 0x8d7e300b, 0x8dfe300b, 0x8e7e300b, 0x8efe300b, 0x8f7e300b, 0x8ffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0x907e300b, 0x90fe300b, 0x917e300b,
- 0x91fe300b, 0x927e300b, 0x92fe300b, 0x937e300b, 0x93fe300b, 0x947e300b, 0x94fe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0x957e300b, 0xfffe300b,
- 0xfffe300b, 0xfffe300b, 0xfffe300b, 0x95fe300b, 0x967e300b, 0x96fe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0x977e300b, 0x97fe300b, 0xfffe300b, 0xfffe300b,
- 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0x987e300b, 0x98fe300b, 0x997e300b, 0x99fe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
- 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
- 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
- 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
- 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
- 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe0024, 0xfffe0024, 0xfffe0024,
- 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024,
- 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024,
- 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024,
- 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024,
- 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024,
- 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024,
- 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024,
- 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024,
- 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024,
- 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024,
- 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffea193,
- 0xfffea193, 0xfffea193, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffeb005, 0xfffeb00f, 0xfffeb00f, 0xfffeb00f, 0xfffeb00b, 0xfffeb005, 0xfffeb00f,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffeb04b,
- 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024,
- 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
- 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
- 0xfffeb001, 0xfffeb001, 0x9a7eb000, 0x9afeb001, 0x9b7eb000, 0x9bfeb001, 0xfffeb002, 0xfffeb002, 0xfffeb002, 0x9c7eb000, 0x9cfeb001, 0xfffeb002, 0x9d7eb000, 0x9dfeb001, 0xfffeb00f, 0xfffeb00f,
- 0xfffeb00f, 0xfffeb00f, 0xfffeb00f, 0xfffeb00f, 0xfffeb00f, 0xfffeb00f, 0xfffeb00b, 0xfffeb00f, 0xfffeb000, 0xfffeb00f, 0xfffeb00b, 0xfffeb00b, 0x9e7eb000, 0x9efeb001, 0xfffeb00b, 0xfffeb00b,
- 0x9f7eb000, 0x9ffeb001, 0xa07eb000, 0xa0feb001, 0xa17eb000, 0xa1feb001, 0xa27eb000, 0xa2feb001, 0xa37eb000, 0xa3feb001, 0xfffeb00f, 0xfffeb00f, 0xfffeb00f, 0xfffeb00f, 0xfffeb005, 0xfffeb00b,
- 0xfffeb00f, 0xfffeb00f, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
- 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe0024, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
- 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
- 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
- 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
- 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
- 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
- 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024,
- 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
- 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
- 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
- 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
- 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
- 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
- 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
- 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
- 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
- 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
- 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
- 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
- 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
- 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024,
- 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024,
- 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024,
- 0xfffe330c, 0xffff3001, 0xffff3001, 0xfffe300c, 0xfffe300c, 0xfffe3044, 0xfffe304c, 0xfffe304c, 0xa40eb000, 0xa490b001, 0xa512b000, 0xa594b001, 0xa616b000, 0xa698b001, 0xa71ab000, 0xa79cb001,
- 0xa81eb000, 0xa8a0b001, 0xfffe300c, 0xfffe300c, 0xa922b000, 0xa9a4b001, 0xaa7eb000, 0xaafeb001, 0xab7eb000, 0xabfeb001, 0xac7eb000, 0xacfeb001, 0xfffe3004, 0xfffe3000, 0xfffe3001, 0xfffe3001,
- 0xfffe300c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe2193, 0xfffe2193, 0xfffe2193, 0xfffe2193, 0xfffe2193, 0xfffe2193,
- 0xfffe300c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe300c, 0xfffe300c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe3044, 0xfffe3044, 0xfffe300c, 0xfffe300c, 0xfffe300c,
- 0xfffe0024, 0xfffe3044, 0xfffe304c, 0xfffe3044, 0xfffe304c, 0xfffe3044, 0xfffe304c, 0xfffe3044, 0xfffe304c, 0xfffe3044, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xffff3044, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xffff3044, 0xfffe304c, 0xffff3044, 0xfffe304c, 0xffff3044, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe3044, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe3044, 0xfffe3044, 0xfffe0024, 0xfffe0024, 0xfffe2193, 0xfffe2193, 0xfffe3004, 0xfffe3004, 0xfffe3044, 0xfffe3044, 0xfffe304c,
- 0xfffe3004, 0xfffe3044, 0xfffe304c, 0xfffe3044, 0xfffe304c, 0xfffe3044, 0xfffe304c, 0xfffe3044, 0xfffe304c, 0xfffe3044, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe3044, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe3044, 0xfffe304c, 0xfffe3044, 0xfffe304c, 0xfffe3044, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe3044, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe3044, 0xfffe3044, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe3004, 0xfffeb044, 0xfffe3044, 0xfffe3044, 0xfffe304c,
- 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffeb04c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe0024, 0xfffe0024,
- 0xfffe0024, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe0024,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024,
- 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
- 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
- 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024,
- 0xfffe3044, 0xfffe3044, 0xfffe3044, 0xfffe3044, 0xfffe3044, 0xfffe3044, 0xfffe3044, 0xfffe3044, 0xfffe3044, 0xfffe3044, 0xfffe3044, 0xfffe3044, 0xfffe3044, 0xfffe3044, 0xfffe3044, 0xfffe3044,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe300c, 0xfffe300c, 0xfffe0024,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062,
- 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe0024,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe300c, 0xfffe300c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe300c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe0064, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe0024,
- 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
- 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
- 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
- 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe0064, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
- 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
- 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
- 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe0024,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe3044, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe0024, 0xfffe0024, 0xfffe0024,
- 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
- 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
- 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
- 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024,
- 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
- 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
- 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304f, 0xfffe304f,
- 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
- 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
- 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
- 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
- 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
- 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
- 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
- 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
- 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
- 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
- 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
- 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
- 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
- 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
- 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
- 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
- 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe300f, 0xfffe3005, 0xfffe300f,
- 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
- 0xfffe304a, 0xfffe304a, 0xfffe304a, 0xfffe304a, 0xfffe304a, 0xfffe304a, 0xfffe304a, 0xfffe304a, 0xfffe304a, 0xfffe304a, 0xfffe304b, 0xfffe304b, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024,
- 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffe8024, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffea193,
- 0xfffeb193, 0xfffeb193, 0xfffeb193, 0xfffeb00b, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffea193, 0xfffea193, 0xfffeb00b, 0xfffeb00b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffea193, 0xfffea193, 0xfffeb04b, 0xfffeb04f, 0xfffeb04f, 0xfffeb04f, 0xfffeb04f, 0xfffeb04f, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
- 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
- 0xfffeb00b, 0xfffeb00b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb00b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffea193, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffea193, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffea193, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb053, 0xfffeb053, 0xfffea193, 0xfffea193, 0xfffeb053, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb249, 0xfffeb24b, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb010, 0xfffeb010, 0xfffeb005, 0xfffeb005, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffeb053, 0xfffeb053, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb053, 0xfffeb053, 0xfffeb053, 0xfffeb053, 0xfffeb053, 0xfffeb053, 0xfffeb053, 0xfffeb053, 0xfffeb053, 0xfffeb053, 0xfffeb053, 0xfffeb053,
- 0xfffeb053, 0xfffeb053, 0xfffeb053, 0xfffeb053, 0xfffea193, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffeb04f, 0xfffeb04f,
- 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
- 0xfffea193, 0xfffea193, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffeb04f, 0xfffeb04f,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
- 0xfffea193, 0xfffea193, 0xfffeb053, 0xfffeb053, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffeb04b,
- 0xfffeb057, 0xfffeb057, 0xfffeb057, 0xfffeb057, 0xfffeb057, 0xfffeb057, 0xfffeb057, 0xfffeb057, 0xfffeb057, 0xfffeb057, 0xfffeb057, 0xfffeb057, 0xfffeb057, 0xfffeb057, 0xfffeb057, 0xfffeb057,
- 0xfffeb057, 0xfffeb057, 0xfffeb057, 0xfffeb057, 0xfffeb057, 0xfffeb057, 0xfffeb057, 0xfffeb057, 0xfffeb057, 0xfffeb057, 0xfffeb057, 0xfffeb057, 0xfffeb057, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffea193, 0xfffea193, 0xfffea193, 0xfffeb053, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffea193, 0xfffeb053, 0xfffeb053, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffeb053, 0xfffeb053, 0xfffea193, 0xfffeb053, 0xfffeb053, 0xfffeb053,
- 0xfffeb053, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04f, 0xfffeb04f, 0xfffeb04f, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffeb04b,
- 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffeb04b, 0xfffeb04b,
- 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffeb053,
- 0xfffeb053, 0xfffea193, 0xfffea193, 0xfffeb053, 0xfffeb053, 0xfffea193, 0xfffea193, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffea193, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffea193, 0xfffeb053, 0xfffe8024, 0xfffe8024,
- 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffe8024, 0xfffe8024, 0xfffeb04b, 0xfffeb04f, 0xfffeb04f, 0xfffeb04f,
- 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
- 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
- 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
- 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
- 0xfffea19e, 0xfffeb05e, 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffeb05e, 0xfffeb05e, 0xfffea19e, 0xfffea19e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffea19e, 0xfffea19e,
- 0xfffeb05e, 0xfffea19e, 0xfffeb05e, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
- 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb053, 0xfffeb053, 0xfffea193, 0xfffeb053, 0xfffeb053, 0xfffea193, 0xfffeb053, 0xfffeb053, 0xfffeb04f, 0xfffeb053, 0xfffea193, 0xfffe8024, 0xfffe8024,
- 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
- 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
- 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024,
- 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058,
- 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059,
- 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059,
- 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059,
- 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe0024,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe0024,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
- 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe0024,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
- 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe0064,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe300c, 0xfffe0024,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe300c, 0xfffe0024,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
- 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
- 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe0024,
- 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffeb08b, 0xfffea193, 0xfffeb08b,
- 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb20b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b,
- 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffe80a4, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffe80a4, 0xfffeb08b, 0xfffe80a4,
- 0xfffeb08b, 0xfffeb08b, 0xfffe80a4, 0xfffeb08b, 0xfffeb08b, 0xfffe80a4, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b,
- 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
- 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
- 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
- 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
- 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
- 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
- 0xfffed94b, 0xfffed94b, 0xfffed964, 0xfffed964, 0xfffed964, 0xfffed964, 0xfffed964, 0xfffed964, 0xfffed964, 0xfffed964, 0xfffed964, 0xfffed964, 0xfffed964, 0xfffed964, 0xfffed964, 0xfffed964,
- 0xfffed964, 0xfffed964, 0xfffed964, 0xfffed964, 0xfffed964, 0xfffed964, 0xfffed964, 0xfffed964, 0xfffed964, 0xfffed964, 0xfffed964, 0xfffed964, 0xfffed964, 0xfffed964, 0xfffed964, 0xfffed964,
- 0xfffed964, 0xfffed964, 0xfffed964, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
- 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
- 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
- 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
- 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
- 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
- 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
- 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
- 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
- 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
- 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
- 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
- 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
- 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
- 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
- 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
- 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
- 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
- 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
- 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
- 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
- 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
- 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed800, 0xfffed801,
- 0xfffed964, 0xfffed964, 0xfffed964, 0xfffed964, 0xfffed964, 0xfffed964, 0xfffed964, 0xfffed964, 0xfffed964, 0xfffed964, 0xfffed964, 0xfffed964, 0xfffed964, 0xfffed964, 0xfffed964, 0xfffed964,
- 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
- 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
- 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
- 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
- 0xfffed964, 0xfffed964, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
- 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
- 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
- 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed964, 0xfffed964, 0xfffed964, 0xfffed964, 0xfffed964, 0xfffed964, 0xfffed964, 0xfffed964,
- 0xfffedaa4, 0xfffedaa4, 0xfffedaa4, 0xfffedaa4, 0xfffedaa4, 0xfffedaa4, 0xfffedaa4, 0xfffedaa4, 0xfffedaa4, 0xfffedaa4, 0xfffedaa4, 0xfffedaa4, 0xfffedaa4, 0xfffedaa4, 0xfffedaa4, 0xfffedaa4,
- 0xfffedaa4, 0xfffedaa4, 0xfffedaa4, 0xfffedaa4, 0xfffedaa4, 0xfffedaa4, 0xfffedaa4, 0xfffedaa4, 0xfffedaa4, 0xfffedaa4, 0xfffedaa4, 0xfffedaa4, 0xfffedaa4, 0xfffedaa4, 0xfffedaa4, 0xfffedaa4,
- 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed949, 0xfffed80b, 0xfffed964, 0xfffed964,
- 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
- 0xfffe3007, 0xfffe3001, 0xfffe3001, 0xfffe3007, 0xfffe3007, 0xfffe3005, 0xfffe3005, 0xfffe3000, 0xfffe3001, 0xfffe300d, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024,
- 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
- 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe3000, 0xfffe3001, 0xfffe3000, 0xfffe3001, 0xfffe3000, 0xfffe3001, 0xfffe3000, 0xfffe3001, 0xfffe3000, 0xfffe3001, 0xfffe3000,
- 0xfffe3001, 0xfffe3000, 0xfffe3001, 0xfffe3000, 0xfffe3001, 0xfffe300c, 0xfffe300c, 0xfffe3000, 0xfffe3001, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xffa6300c,
- 0xfffe31c1, 0xfffe300c, 0xfffe31c1, 0xfffe0024, 0xfffe3004, 0xfffe31c4, 0xfffe3005, 0xfffe3005, 0xfffe300c, 0xad7e3000, 0xadfe3001, 0xae7e3000, 0xaefe3001, 0xaf7e3000, 0xaffe3001, 0xfffe324c,
- 0xfffe300c, 0xfffe300c, 0xfffe320c, 0xfffe320c, 0xb07e300c, 0xb0fe300c, 0xfffe300c, 0xfffe0024, 0xfffe300c, 0xfffe3248, 0xfffe3249, 0xfffe300c, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024,
- 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed964, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
- 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
- 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
- 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
- 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
- 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
- 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
- 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
- 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed964, 0xfffed964, 0xfffe9a94,
- 0xfffe0024, 0xffff3005, 0xfffe300c, 0xfffe324c, 0xfffe3248, 0xfffe3249, 0xfffe300c, 0xfffe300c, 0xb1283000, 0xb1aa3001, 0xfffe300c, 0xfffe320c, 0xffff31c1, 0xfffeb20c, 0xffff31c1, 0xfffe31cc,
- 0xfffe310c, 0xfffe310c, 0xfffe310c, 0xfffe310c, 0xfffe310c, 0xfffe310c, 0xfffe310c, 0xfffe310c, 0xfffe310c, 0xfffe310c, 0xffff31c4, 0xffff3004, 0xb27e300c, 0xfffe300c, 0xb2fe300c, 0xffff3005,
- 0xfffe300c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xb37eb000, 0xfffe300c, 0xb3feb001, 0xfffe300c, 0xfffeb00c,
- 0xfffe300c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
- 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xb42c3000, 0xfffe300c, 0xb4ae3001, 0xfffeb00c, 0xb57e3000,
- 0xb5fe3001, 0xfffeb001, 0xb67eb000, 0xb6feb001, 0xfffeb001, 0xfffe3004, 0xfffe304b, 0xfffe3044, 0xfffe3044, 0xfffe3044, 0xfffe3044, 0xfffe3044, 0xfffe3044, 0xfffe3044, 0xfffe3044, 0xfffe3044,
- 0xfffe3044, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
- 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
- 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe3044, 0xfffe3044,
- 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
- 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe0024,
- 0xfffe0024, 0xfffe0024, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe0024, 0xfffe0024, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
- 0xfffe0024, 0xfffe0024, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe0024, 0xfffe0024, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe0024, 0xfffe0024, 0xfffe0024,
- 0xfffe3249, 0xfffe3248, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe3248, 0xfffe3248, 0xfffe0024, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe0024,
- 0xfffe02a4, 0xfffe02a4, 0xfffe02a4, 0xfffe02a4, 0xfffe02a4, 0xfffe02a4, 0xfffe02a4, 0xfffe02a4, 0xfffe02a4, 0xfffe3013, 0xfffe3013, 0xfffe3013, 0xfffe3011, 0xfffe3022, 0xfffe1aa4, 0xfffe1aa4,
+ 0xfffe9a93, 0xfffe9a93, 0xfffe9a93, 0xfffe9a93, 0xfffe9a93, 0xfffe9a93,
+ 0xfffe9a93, 0xfffe9a93, 0xfffe9a93, 0xfffe8ae5, 0xfffe9b5c, 0xfffe9ada,
+ 0xfffe9b1a, 0xfffe9b5b, 0xfffe9a93, 0xfffe9a93, 0xfffe9a93, 0xfffe9a93,
+ 0xfffe9a93, 0xfffe9a93, 0xfffe9a93, 0xfffe9a93, 0xfffe9a93, 0xfffe9a93,
+ 0xfffe9a93, 0xfffe9a93, 0xfffe9a93, 0xfffe9a93, 0xfffe9b53, 0xfffe9b53,
+ 0xfffe9b53, 0xfffe9ad3, 0xfffe9323, 0xfffeb005, 0xfffeb002, 0xfffeb24b,
+ 0xfffeb248, 0xfffeb249, 0xfffeb00b, 0xfffeb002, 0x007eb000, 0x00feb001,
+ 0xfffeb00b, 0xfffeb208, 0xfffeb1c7, 0xfffeb20e, 0xfffeb1c7, 0xfffeb1c6,
+ 0xfffea90a, 0xfffea90a, 0xfffea90a, 0xfffea90a, 0xfffea90a, 0xfffea90a,
+ 0xfffea90a, 0xfffea90a, 0xfffea90a, 0xfffea90a, 0xfffeb1c7, 0xfffeb007,
+ 0x017eb000, 0xfffeb00b, 0x01feb001, 0xfffeb005, 0xfffeb00b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0x027eb000, 0xfffeb008, 0x02feb001, 0xfffeb00b, 0xff80b00b,
+ 0xfffeb00b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0x037eb000, 0xfffeb00f, 0x03feb001,
+ 0xfffeb00b, 0xfffeb293, 0xfffeb293, 0xfffeb293, 0xfffeb293, 0xfffeb293,
+ 0xfffeb293, 0xfffeb35d, 0xfffeb293, 0xfffeb293, 0xfffeb293, 0xfffeb293,
+ 0xfffeb293, 0xfffeb293, 0xfffeb293, 0xfffeb293, 0xfffeb293, 0xfffeb293,
+ 0xfffeb293, 0xfffeb293, 0xfffeb293, 0xfffeb293, 0xfffeb293, 0xfffeb293,
+ 0xfffeb293, 0xfffeb293, 0xfffeb293, 0xfffeb293, 0xfffeb293, 0xfffeb293,
+ 0xfffeb293, 0xfffeb293, 0xfffeb293, 0xfffeb293, 0xfffe91c3, 0xfffeb000,
+ 0xfffeb249, 0xfffeb248, 0xfffeb248, 0xfffeb248, 0xfffeb00b, 0xfffeb022,
+ 0xfffeb022, 0xfffeb00b, 0xfffeb062, 0x047eb000, 0xfffeb00b, 0xfffeb28f,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb249, 0xfffeb248, 0xfffeb122, 0xfffeb122,
+ 0xfffeb010, 0xfffeb04b, 0xfffeb022, 0xfffeb022, 0xfffeb022, 0xfffeb122,
+ 0xfffeb062, 0x04feb001, 0xfffeb022, 0xfffeb022, 0xfffeb022, 0xfffeb000,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb022,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb022, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb00b, 0xfffeb00b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb022, 0xfffeb010, 0xfffeb022,
+ 0xfffeb022, 0xfffeb022, 0xfffeb010, 0xfffeb022, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb062, 0xfffeb04b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb022, 0xfffeb022, 0xfffeb022, 0xfffeb022,
+ 0xfffeb00b, 0xfffeb022, 0xfffeb00b, 0xfffeb010, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb04b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
+ 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
+ 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
+ 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
+ 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
+ 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
+ 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
+ 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
+ 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
+ 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
+ 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
+ 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
+ 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
+ 0xfffea193, 0xfffea183, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
+ 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
+ 0xfffea193, 0xfffea193, 0xfffea183, 0xfffea183, 0xfffea183, 0xfffea183,
+ 0xfffea183, 0xfffea183, 0xfffea183, 0xfffea193, 0xfffea193, 0xfffea193,
+ 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
+ 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb00b, 0xfffeb00b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffe8024, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb007, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb04b, 0xfffeb00b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb00b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffea193, 0xfffea193, 0xfffea193,
+ 0xfffea193, 0xfffea193, 0xfffeb193, 0xfffeb193, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024,
+ 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffe8024, 0xfffeb047, 0xfffeb00f, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe80a4, 0xfffea193, 0xfffea193, 0xfffea193,
+ 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
+ 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
+ 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
+ 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
+ 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
+ 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
+ 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
+ 0xfffeb08f, 0xfffea193, 0xfffeb08b, 0xfffea193, 0xfffea193, 0xfffeb08b,
+ 0xfffea193, 0xfffea193, 0xfffeb085, 0xfffea193, 0xfffe80a4, 0xfffe80a4,
+ 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4,
+ 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b,
+ 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b,
+ 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b,
+ 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b,
+ 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4,
+ 0xfffe80a4, 0xfffe80a4, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b,
+ 0xfffeb08b, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4,
+ 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4,
+ 0xfffed0cb, 0xfffed0cb, 0xfffed0cb, 0xfffed0cb, 0xfffed164, 0xfffed164,
+ 0xfffed00b, 0xfffed00b, 0xfffed14b, 0xfffed249, 0xfffed249, 0xfffed149,
+ 0xfffed1c7, 0xfffed147, 0xfffed00b, 0xfffed00b, 0xfffea193, 0xfffea193,
+ 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
+ 0xfffea193, 0xfffea193, 0xfffea193, 0xfffed145, 0xfffed164, 0xfffed164,
+ 0xfffed145, 0xfffed145, 0xfffed164, 0xfffed14b, 0xfffeb94b, 0xfffeb94b,
+ 0xfffec14b, 0xfffeb94b, 0xfffec94b, 0xfffeb94b, 0xfffec94b, 0xfffec14b,
+ 0xfffec94b, 0xfffec94b, 0xfffec94b, 0xfffec94b, 0xfffec94b, 0xfffec14b,
+ 0xfffec14b, 0xfffec14b, 0xfffec14b, 0xfffec94b, 0xfffec94b, 0xfffec94b,
+ 0xfffec94b, 0xfffec94b, 0xfffec94b, 0xfffec94b, 0xfffec94b, 0xfffed14b,
+ 0xfffed14b, 0xfffed14b, 0xfffed14b, 0xfffed14b, 0xfffec94b, 0xfffec94b,
+ 0xfffec94b, 0xfffec94b, 0xfffec94b, 0xfffec94b, 0xfffec94b, 0xfffec94b,
+ 0xfffec14b, 0xfffec94b, 0xfffec94b, 0xfffea193, 0xfffea193, 0xfffea193,
+ 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
+ 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
+ 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffed164,
+ 0xfffed0ca, 0xfffed0ca, 0xfffed0ca, 0xfffed0ca, 0xfffed0ca, 0xfffed0ca,
+ 0xfffed0ca, 0xfffed0ca, 0xfffed0ca, 0xfffed0ca, 0xfffed249, 0xfffed0ca,
+ 0xfffed0ca, 0xfffed14b, 0xfffed14b, 0xfffed14b, 0xfffea193, 0xfffec14b,
+ 0xfffec14b, 0xfffec14b, 0xfffea14b, 0xfffec14b, 0xfffec14b, 0xfffec14b,
+ 0xfffec94b, 0xfffec94b, 0xfffec94b, 0xfffec94b, 0xfffec94b, 0xfffec94b,
+ 0xfffec94b, 0xfffec94b, 0xfffec94b, 0xfffec94b, 0xfffec94b, 0xfffec94b,
+ 0xfffec94b, 0xfffec94b, 0xfffec94b, 0xfffec94b, 0xfffec14b, 0xfffec14b,
+ 0xfffec14b, 0xfffec14b, 0xfffec14b, 0xfffec14b, 0xfffec14b, 0xfffec14b,
+ 0xfffec14b, 0xfffec14b, 0xfffec14b, 0xfffec14b, 0xfffec14b, 0xfffec14b,
+ 0xfffec14b, 0xfffec14b, 0xfffec14b, 0xfffec14b, 0xfffec94b, 0xfffec94b,
+ 0xfffec94b, 0xfffec94b, 0xfffec94b, 0xfffec94b, 0xfffec94b, 0xfffec94b,
+ 0xfffec94b, 0xfffec94b, 0xfffec94b, 0xfffec94b, 0xfffec94b, 0xfffec94b,
+ 0xfffec94b, 0xfffec94b, 0xfffec94b, 0xfffec94b, 0xfffec94b, 0xfffec94b,
+ 0xfffec94b, 0xfffec94b, 0xfffec94b, 0xfffec94b, 0xfffec94b, 0xfffec94b,
+ 0xfffec94b, 0xfffec94b, 0xfffec94b, 0xfffec94b, 0xfffed14b, 0xfffed14b,
+ 0xfffec94b, 0xfffec94b, 0xfffec94b, 0xfffec94b, 0xfffec94b, 0xfffec94b,
+ 0xfffec14b, 0xfffec94b, 0xfffec94b, 0xfffec14b, 0xfffec14b, 0xfffec14b,
+ 0xfffec14b, 0xfffec14b, 0xfffec14b, 0xfffec14b, 0xfffec14b, 0xfffec14b,
+ 0xfffec94b, 0xfffec14b, 0xfffec94b, 0xfffec14b, 0xfffec94b, 0xfffec94b,
+ 0xfffec14b, 0xfffec14b, 0xfffec945, 0xfffec14b, 0xfffea193, 0xfffea193,
+ 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffed0cb,
+ 0xfffed193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
+ 0xfffea193, 0xfffed14b, 0xfffed14b, 0xfffea193, 0xfffea193, 0xfffed00b,
+ 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffec14b, 0xfffec14b,
+ 0xfffed10a, 0xfffed10a, 0xfffed10a, 0xfffed10a, 0xfffed10a, 0xfffed10a,
+ 0xfffed10a, 0xfffed10a, 0xfffed10a, 0xfffed10a, 0xfffed14b, 0xfffed14b,
+ 0xfffed14b, 0xfffed14b, 0xfffed14b, 0xfffed14b, 0xfffeb14b, 0xfffeb14b,
+ 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b,
+ 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b,
+ 0xfffe8164, 0xfffeb28b, 0xfffeb14b, 0xfffea193, 0xfffeb14b, 0xfffeb14b,
+ 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b,
+ 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b,
+ 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b,
+ 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b,
+ 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffea193, 0xfffea193,
+ 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
+ 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
+ 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
+ 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
+ 0xfffea193, 0xfffe8164, 0xfffe8164, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b,
+ 0xfffed14b, 0xfffed14b, 0xfffed14b, 0xfffed14b, 0xfffed14b, 0xfffed14b,
+ 0xfffed14b, 0xfffed14b, 0xfffed14b, 0xfffec14b, 0xfffec14b, 0xfffec14b,
+ 0xfffed14b, 0xfffed14b, 0xfffed14b, 0xfffed14b, 0xfffed14b, 0xfffed14b,
+ 0xfffed14b, 0xfffed14b, 0xfffed14b, 0xfffed14b, 0xfffed14b, 0xfffed14b,
+ 0xfffed14b, 0xfffed14b, 0xfffed14b, 0xfffec14b, 0xfffec14b, 0xfffed14b,
+ 0xfffed14b, 0xfffed14b, 0xfffed14b, 0xfffec14b, 0xfffed14b, 0xfffec14b,
+ 0xfffec14b, 0xfffed14b, 0xfffed14b, 0xfffed14b, 0xfffec14b, 0xfffec14b,
+ 0xfffed14b, 0xfffed14b, 0xfffed14b, 0xfffed14b, 0xfffed14b, 0xfffed14b,
+ 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b,
+ 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b,
+ 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b,
+ 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b,
+ 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b,
+ 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b, 0xfffeb14b,
+ 0xfffeb14b, 0xfffeb14b, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
+ 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
+ 0xfffea193, 0xfffeb14b, 0xfffe8164, 0xfffe8164, 0xfffe8164, 0xfffe8164,
+ 0xfffe8164, 0xfffe8164, 0xfffe8164, 0xfffe8164, 0xfffe8164, 0xfffe8164,
+ 0xfffe8164, 0xfffe8164, 0xfffe8164, 0xfffe8164, 0xfffeb08a, 0xfffeb08a,
+ 0xfffeb08a, 0xfffeb08a, 0xfffeb08a, 0xfffeb08a, 0xfffeb08a, 0xfffeb08a,
+ 0xfffeb08a, 0xfffeb08a, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b,
+ 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b,
+ 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b,
+ 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b,
+ 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b,
+ 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffea193,
+ 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
+ 0xfffea193, 0xfffea193, 0xfffeb08b, 0xfffeb08b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb007, 0xfffeb005, 0xfffeb08b, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4,
+ 0xfffe80a4, 0xfffe80a4, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b,
+ 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b,
+ 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b,
+ 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b,
+ 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffeb08b, 0xfffea193,
+ 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
+ 0xfffea193, 0xfffea193, 0xfffeb08b, 0xfffea193, 0xfffea193, 0xfffea193,
+ 0xfffeb08b, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
+ 0xfffe80a4, 0xfffe80a4, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b,
+ 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b,
+ 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffe80a4,
+ 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4,
+ 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4,
+ 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4,
+ 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4,
+ 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4,
+ 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4,
+ 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4,
+ 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4,
+ 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4,
+ 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4,
+ 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4,
+ 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4,
+ 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4,
+ 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4,
+ 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4,
+ 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4,
+ 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4,
+ 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4,
+ 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4,
+ 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4,
+ 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4,
+ 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4,
+ 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4,
+ 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4,
+ 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4,
+ 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4,
+ 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4,
+ 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4,
+ 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4,
+ 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4,
+ 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4,
+ 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4, 0xfffe80a4,
+ 0xfffea193, 0xfffea193, 0xfffea193, 0xfffeb053, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024,
+ 0xfffea193, 0xfffeb04b, 0xfffeb053, 0xfffeb053, 0xfffeb053, 0xfffea193,
+ 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
+ 0xfffea193, 0xfffeb053, 0xfffeb053, 0xfffeb053, 0xfffeb053, 0xfffea193,
+ 0xfffeb053, 0xfffe8024, 0xfffeb04b, 0xfffea193, 0xfffea193, 0xfffea193,
+ 0xfffea193, 0xfffea193, 0xfffe8024, 0xfffe8024, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffea193, 0xfffea193, 0xfffeb04f, 0xfffeb04f,
+ 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a,
+ 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffea193, 0xfffeb053, 0xfffeb053,
+ 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffeb04b,
+ 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffe8024, 0xfffe8024, 0xfffea193, 0xfffeb04b, 0xfffeb053, 0xfffeb053,
+ 0xfffeb053, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffe8024,
+ 0xfffe8024, 0xfffeb053, 0xfffeb053, 0xfffe8024, 0xfffe8024, 0xfffeb053,
+ 0xfffeb053, 0xfffea193, 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffeb053,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffeb04b, 0xfffeb04b,
+ 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffea193, 0xfffea193,
+ 0xfffe8024, 0xfffe8024, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a,
+ 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb249, 0xfffeb249, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb049, 0xfffeb04b, 0xfffeb248,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffea193,
+ 0xfffea193, 0xfffeb053, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024,
+ 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffe8024,
+ 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffea193, 0xfffe8024,
+ 0xfffeb053, 0xfffeb053, 0xfffeb053, 0xfffea193, 0xfffea193, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffea193, 0xfffea193, 0xfffe8024,
+ 0xfffe8024, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffea193, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffeb04a, 0xfffeb04a,
+ 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a,
+ 0xfffeb04a, 0xfffeb04a, 0xfffea193, 0xfffea193, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffea193, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffea193, 0xfffea193, 0xfffeb053, 0xfffe8024, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024,
+ 0xfffea193, 0xfffeb04b, 0xfffeb053, 0xfffeb053, 0xfffeb053, 0xfffea193,
+ 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffe8024, 0xfffea193,
+ 0xfffea193, 0xfffeb053, 0xfffe8024, 0xfffeb053, 0xfffeb053, 0xfffea193,
+ 0xfffe8024, 0xfffe8024, 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffeb04b, 0xfffeb04b, 0xfffea193, 0xfffea193, 0xfffe8024, 0xfffe8024,
+ 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a,
+ 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffe8024, 0xfffeb248,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffea193, 0xfffeb053, 0xfffeb053,
+ 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffeb04b,
+ 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffeb04b,
+ 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffe8024, 0xfffe8024, 0xfffea193, 0xfffeb04b, 0xfffeb053, 0xfffea193,
+ 0xfffeb053, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffe8024,
+ 0xfffe8024, 0xfffeb053, 0xfffeb053, 0xfffe8024, 0xfffe8024, 0xfffeb053,
+ 0xfffeb053, 0xfffea193, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffea193, 0xfffeb053,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffeb04b, 0xfffeb04b,
+ 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffea193, 0xfffea193,
+ 0xfffe8024, 0xfffe8024, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a,
+ 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a,
+ 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffea193, 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffeb04b,
+ 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffeb04b,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffeb053, 0xfffeb053, 0xfffea193, 0xfffeb053, 0xfffeb053, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffeb053, 0xfffeb053, 0xfffeb053, 0xfffe8024,
+ 0xfffeb053, 0xfffeb053, 0xfffeb053, 0xfffea193, 0xfffe8024, 0xfffe8024,
+ 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffeb053, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffeb04a, 0xfffeb04a,
+ 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a,
+ 0xfffeb04a, 0xfffeb04a, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb00b,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb248,
+ 0xfffeb00b, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffeb053, 0xfffeb053, 0xfffeb053, 0xfffe8024, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffeb04b, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffeb053,
+ 0xfffeb053, 0xfffeb053, 0xfffeb053, 0xfffe8024, 0xfffea193, 0xfffea193,
+ 0xfffea193, 0xfffe8024, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffea193, 0xfffea193, 0xfffe8024, 0xfffeb04b, 0xfffeb04b,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffeb04b, 0xfffeb04b, 0xfffea193, 0xfffea193, 0xfffe8024, 0xfffe8024,
+ 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a,
+ 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb00b, 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffeb053, 0xfffeb053,
+ 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffe8024, 0xfffe8024, 0xfffea193, 0xfffeb04b, 0xfffeb053, 0xfffea053,
+ 0xfffeb053, 0xfffeb053, 0xfffeb053, 0xfffeb053, 0xfffeb053, 0xfffe8024,
+ 0xfffea053, 0xfffeb053, 0xfffeb053, 0xfffe8024, 0xfffeb053, 0xfffeb053,
+ 0xfffea193, 0xfffea193, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffeb053, 0xfffeb053, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffea193, 0xfffea193,
+ 0xfffe8024, 0xfffe8024, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a,
+ 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a,
+ 0xfffe8024, 0xfffeb00b, 0xfffeb00b, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffeb053, 0xfffeb053, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffeb04b,
+ 0xfffeb053, 0xfffeb053, 0xfffeb053, 0xfffea193, 0xfffea193, 0xfffea193,
+ 0xfffea193, 0xfffe8024, 0xfffeb053, 0xfffeb053, 0xfffeb053, 0xfffe8024,
+ 0xfffeb053, 0xfffeb053, 0xfffeb053, 0xfffea193, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffeb053, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffeb04b, 0xfffeb04b,
+ 0xfffea193, 0xfffea193, 0xfffe8024, 0xfffe8024, 0xfffeb04a, 0xfffeb04a,
+ 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a,
+ 0xfffeb04a, 0xfffeb04a, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffeb049,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffe8024, 0xfffe8024, 0xfffeb053, 0xfffeb053, 0xfffe8024, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffe8024, 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffea193, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffeb053, 0xfffeb053, 0xfffeb053, 0xfffea193, 0xfffea193,
+ 0xfffea193, 0xfffe8024, 0xfffea193, 0xfffe8024, 0xfffeb053, 0xfffeb053,
+ 0xfffeb053, 0xfffeb053, 0xfffeb053, 0xfffeb053, 0xfffeb053, 0xfffeb053,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffeb053, 0xfffeb053, 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
+ 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
+ 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
+ 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
+ 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
+ 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
+ 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
+ 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
+ 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffea19e, 0xfffeb05e, 0xfffeb05e,
+ 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffea19e,
+ 0xfffea19e, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffeb248,
+ 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
+ 0xfffeb05e, 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffea19e,
+ 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffeb04b, 0xfffeb04a, 0xfffeb04a,
+ 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a,
+ 0xfffeb04a, 0xfffeb04a, 0xfffeb04f, 0xfffeb04f, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffeb05e,
+ 0xfffeb05e, 0xfffe8024, 0xfffeb05e, 0xfffe8024, 0xfffe8024, 0xfffeb05e,
+ 0xfffeb05e, 0xfffe8024, 0xfffeb05e, 0xfffe8024, 0xfffe8024, 0xfffeb05e,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffe8024, 0xfffeb05e,
+ 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
+ 0xfffe8024, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffe8024, 0xfffeb05e,
+ 0xfffe8024, 0xfffeb05e, 0xfffe8024, 0xfffe8024, 0xfffeb05e, 0xfffeb05e,
+ 0xfffe8024, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffea19e,
+ 0xfffeb05e, 0xfffeb05e, 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffea19e,
+ 0xfffea19e, 0xfffea19e, 0xfffe8024, 0xfffea19e, 0xfffea19e, 0xfffeb05e,
+ 0xfffe8024, 0xfffe8024, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
+ 0xfffeb05e, 0xfffe8024, 0xfffeb05e, 0xfffe8024, 0xfffea19e, 0xfffea19e,
+ 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffe8024, 0xfffe8024,
+ 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a,
+ 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffe8024, 0xfffe8024,
+ 0xfffeb05e, 0xfffeb05e, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffeb04b, 0xfffeb050, 0xfffeb050, 0xfffeb050, 0xfffeb050, 0xfffeb04b,
+ 0xfffeb050, 0xfffeb050, 0xfffeb043, 0xfffeb050, 0xfffeb050, 0xfffeb04f,
+ 0xfffeb043, 0xfffeb045, 0xfffeb045, 0xfffeb045, 0xfffeb045, 0xfffeb045,
+ 0xfffeb043, 0xfffeb04b, 0xfffeb045, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffea193, 0xfffea193, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a,
+ 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04f, 0xfffea193,
+ 0xfffeb04b, 0xfffea193, 0xfffeb04b, 0xfffea193, 0x057eb000, 0x05feb001,
+ 0x067eb000, 0x06feb001, 0xfffeb053, 0xfffeb053, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffea193,
+ 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
+ 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
+ 0xfffea193, 0xfffeb04f, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
+ 0xfffea193, 0xfffeb04f, 0xfffea193, 0xfffea193, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
+ 0xfffea193, 0xfffea193, 0xfffe8024, 0xfffea193, 0xfffea193, 0xfffea193,
+ 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
+ 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
+ 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
+ 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
+ 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
+ 0xfffea193, 0xfffea193, 0xfffea193, 0xfffe8024, 0xfffeb04f, 0xfffeb04f,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffea193, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb050, 0xfffeb050,
+ 0xfffeb04f, 0xfffeb050, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffeb05e, 0xfffeb05e,
+ 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
+ 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
+ 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
+ 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
+ 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
+ 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
+ 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
+ 0xfffeb05e, 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffeb05e,
+ 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffea19e,
+ 0xfffeb05e, 0xfffea19e, 0xfffea19e, 0xfffeb05e, 0xfffeb05e, 0xfffea19e,
+ 0xfffea19e, 0xfffeb05e, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a,
+ 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a,
+ 0xfffeb04f, 0xfffeb04f, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
+ 0xfffeb05e, 0xfffeb05e, 0xfffea19e, 0xfffea19e, 0xfffeb05e, 0xfffeb05e,
+ 0xfffeb05e, 0xfffeb05e, 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffeb05e,
+ 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
+ 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
+ 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffea19e, 0xfffea19e, 0xfffea19e,
+ 0xfffea19e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
+ 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
+ 0xfffeb05e, 0xfffeb05e, 0xfffea19e, 0xfffeb05e, 0xfffeb05e, 0xfffea19e,
+ 0xfffea19e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
+ 0xfffeb05e, 0xfffea19e, 0xfffeb05e, 0xfffeb05e, 0xfffeb04a, 0xfffeb04a,
+ 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a,
+ 0xfffeb04a, 0xfffeb04a, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffea19e,
+ 0xfffeb05e, 0xfffeb05e, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057,
+ 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057,
+ 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057,
+ 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057,
+ 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057,
+ 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057,
+ 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057,
+ 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057,
+ 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057,
+ 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057,
+ 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057,
+ 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057,
+ 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057,
+ 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057,
+ 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057,
+ 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057, 0xfffe3057,
+ 0xfffe3057, 0xfffe3057, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058,
+ 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058,
+ 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058,
+ 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058,
+ 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058,
+ 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058,
+ 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058,
+ 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058,
+ 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058,
+ 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058,
+ 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058,
+ 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058,
+ 0xfffe3058, 0xfffe3058, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059,
+ 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059,
+ 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059,
+ 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059,
+ 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059,
+ 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059,
+ 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059,
+ 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059,
+ 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059,
+ 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059,
+ 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059,
+ 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059,
+ 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059,
+ 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059,
+ 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffe8024, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffe8024,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024,
+ 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffe8024, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffea193, 0xfffeb04b, 0xfffeb04f,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb00b, 0xfffeb00b, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffeb00f, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb30f, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0x077eb000, 0x07feb001, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04f,
+ 0xfffeb04f, 0xfffeb04f, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffea193, 0xfffea193,
+ 0xfffea193, 0xfffeb04f, 0xfffeb04f, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffea193, 0xfffea193, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffe8024, 0xfffea193, 0xfffea193, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffeb05e, 0xfffeb05e,
+ 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
+ 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
+ 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
+ 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
+ 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
+ 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
+ 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
+ 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
+ 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffea19e,
+ 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffea19e,
+ 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
+ 0xfffeb05e, 0xfffeb05e, 0xfffea19e, 0xfffeb05e, 0xfffeb05e, 0xfffea19e,
+ 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffea19e,
+ 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffeb04f, 0xfffeb04f,
+ 0xfffeb044, 0xfffeb05e, 0xfffeb04f, 0xfffeb04b, 0xfffeb04f, 0xfffeb248,
+ 0xfffeb05e, 0xfffea19e, 0xfffe8024, 0xfffe8024, 0xfffeb04a, 0xfffeb04a,
+ 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a,
+ 0xfffeb04a, 0xfffeb04a, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb005, 0xfffeb005, 0xfffeb00f, 0xfffeb00f,
+ 0xfffeb010, 0xfffeb00b, 0xfffeb005, 0xfffeb005, 0xfffeb00b, 0xfffea193,
+ 0xfffea193, 0xfffea193, 0xfffeb303, 0xfffe8024, 0xfffeb04a, 0xfffeb04a,
+ 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a,
+ 0xfffeb04a, 0xfffeb04a, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffea193, 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffea193, 0xfffea193, 0xfffea193, 0xfffeb053, 0xfffeb053, 0xfffeb053,
+ 0xfffeb053, 0xfffea193, 0xfffea193, 0xfffeb053, 0xfffeb053, 0xfffeb053,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffeb053, 0xfffeb053,
+ 0xfffea193, 0xfffeb053, 0xfffeb053, 0xfffeb053, 0xfffeb053, 0xfffeb053,
+ 0xfffeb053, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffeb00b, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffeb005, 0xfffeb005, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a,
+ 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a,
+ 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
+ 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
+ 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
+ 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
+ 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
+ 0xfffe8024, 0xfffe8024, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
+ 0xfffeb05e, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
+ 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
+ 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
+ 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
+ 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
+ 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
+ 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
+ 0xfffeb05e, 0xfffeb05e, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
+ 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
+ 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
+ 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
+ 0xfffeb05e, 0xfffeb05e, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a,
+ 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a,
+ 0xfffeb04a, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffeb01e, 0xfffeb01e,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffea193, 0xfffea193, 0xfffeb053, 0xfffeb053, 0xfffeb053,
+ 0xfffe8024, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb05e, 0xfffeb05e,
+ 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
+ 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
+ 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
+ 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
+ 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
+ 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
+ 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
+ 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
+ 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffea19e, 0xfffeb05e,
+ 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffea19e,
+ 0xfffea19e, 0xfffe8024, 0xfffea19e, 0xfffeb05e, 0xfffea19e, 0xfffeb05e,
+ 0xfffeb05e, 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffea19e,
+ 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
+ 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffea19e, 0xfffea19e, 0xfffea19e,
+ 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffea19e,
+ 0xfffea19e, 0xfffe8024, 0xfffe8024, 0xfffea193, 0xfffeb04a, 0xfffeb04a,
+ 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a,
+ 0xfffeb04a, 0xfffeb04a, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a,
+ 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
+ 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
+ 0xfffeb05e, 0xfffeb05e, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffeb053, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffea193, 0xfffeb053,
+ 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffeb053,
+ 0xfffea193, 0xfffeb053, 0xfffeb053, 0xfffeb053, 0xfffeb053, 0xfffeb053,
+ 0xfffea193, 0xfffeb053, 0xfffeb053, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a,
+ 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a,
+ 0xfffeb04f, 0xfffeb04f, 0xfffeb04b, 0xfffeb04f, 0xfffeb04f, 0xfffeb04f,
+ 0xfffeb04f, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffea193,
+ 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
+ 0xfffea193, 0xfffea193, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffea193, 0xfffea193, 0xfffeb053, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb053,
+ 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffeb053, 0xfffeb053,
+ 0xfffea193, 0xfffea193, 0xfffeb053, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a,
+ 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb053, 0xfffeb053,
+ 0xfffeb053, 0xfffeb053, 0xfffeb053, 0xfffeb053, 0xfffeb053, 0xfffeb053,
+ 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
+ 0xfffea193, 0xfffea193, 0xfffeb053, 0xfffeb053, 0xfffea193, 0xfffea193,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffeb04f, 0xfffeb04f, 0xfffeb04f,
+ 0xfffeb04f, 0xfffeb04f, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a,
+ 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a,
+ 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04f, 0xfffeb04f,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffeb04b,
+ 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
+ 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
+ 0xfffea193, 0xfffeb053, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
+ 0xfffea193, 0xfffea193, 0xfffea193, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffea193, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb053, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
+ 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
+ 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
+ 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
+ 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
+ 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
+ 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffea193, 0xfffea193, 0xfffea193,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffe8024, 0xfffeb04b,
+ 0xfffe8024, 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb00b, 0xfffeb04b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb00b,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffe8024, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffe8024, 0xfffe8024,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb010,
+ 0xfffeb00b, 0xfffe8024, 0xfffeb30f, 0xfffeb30f, 0xfffeb30f, 0xfffeb30f,
+ 0xfffeb30f, 0xfffeb30f, 0xfffeb30f, 0xfffeb303, 0xfffeb30f, 0xfffeb30f,
+ 0xfffeb30f, 0xfffeb292, 0xfffe9a93, 0xfffe9a93, 0xfffe9853, 0xfffe9893,
+ 0xfffeb00f, 0xfffeb003, 0xfffeb00f, 0xff82b00f, 0xff84b011, 0xfffeb022,
+ 0xfffeb022, 0xfffeb00b, 0x0806b000, 0x0888b002, 0xfffeb000, 0xfffeb002,
+ 0x090ab000, 0x098cb001, 0xfffeb000, 0xfffeb002, 0xfffeb022, 0xfffeb022,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb00d, 0xfffeb00d, 0xfffeb00d, 0xfffeb00f,
+ 0xfffe9b1a, 0xfffe9b5a, 0xfffe9c53, 0xfffe9bd3, 0xfffe9c93, 0xfffe9c13,
+ 0xfffe9b93, 0xfffeb1c3, 0xfffeb249, 0xfffeb249, 0xfffeb249, 0xfffeb249,
+ 0xfffeb249, 0xfffeb009, 0xfffeb009, 0xfffeb009, 0xfffeb00b, 0x0a7eb000,
+ 0x0afeb001, 0xfffeb022, 0xfffeb004, 0xfffeb004, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb1c7, 0x0b7eb000,
+ 0x0bfeb001, 0xfffeb004, 0xfffeb004, 0xfffeb004, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00f, 0xfffeb00b,
+ 0xfffeb00f, 0xfffeb00f, 0xfffeb00f, 0xfffeb00f, 0xfffeb00b, 0xfffeb00f,
+ 0xfffeb00f, 0xfffeb30f, 0xfffeb294, 0xfffeb28b, 0xfffeb28b, 0xfffeb28b,
+ 0xfffeb28b, 0xfffe82a4, 0xfffe82a4, 0xfffe82a4, 0xfffe82a4, 0xfffe82a4,
+ 0xfffe9a93, 0xfffe9a93, 0xfffe9a93, 0xfffe9a93, 0xfffe9a93, 0xfffe9a93,
+ 0xfffeb10b, 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffeb122, 0xfffeb10b,
+ 0xfffeb10b, 0xfffeb10b, 0xfffeb10b, 0xfffeb10b, 0xfffeb20b, 0xfffeb20b,
+ 0xfffeb00b, 0x0c7eb000, 0x0cfeb001, 0xfffeb062, 0xfffeb10b, 0xfffeb122,
+ 0xfffeb122, 0xfffeb122, 0xfffeb122, 0xfffeb10b, 0xfffeb10b, 0xfffeb10b,
+ 0xfffeb10b, 0xfffeb10b, 0xfffeb20b, 0xfffeb20b, 0xfffeb00b, 0x0d7eb000,
+ 0x0dfeb001, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffeb248, 0xfffeb248, 0xfffeb248, 0xfffeb248, 0xfffeb248, 0xfffeb248,
+ 0xfffeb248, 0xfffeb249, 0xfffeb248, 0xfffeb248, 0xfffeb248, 0xfffeb248,
+ 0xfffeb248, 0xfffeb248, 0xfffeb248, 0xfffeb248, 0xfffeb248, 0xfffeb248,
+ 0xfffeb248, 0xfffeb248, 0xfffeb248, 0xfffeb248, 0xfffeb249, 0xfffeb248,
+ 0xfffeb248, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
+ 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
+ 0xfffea193, 0xfffeb193, 0xfffeb193, 0xfffeb193, 0xfffeb193, 0xfffea193,
+ 0xfffeb193, 0xfffeb193, 0xfffeb193, 0xfffea193, 0xfffea193, 0xfffea193,
+ 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
+ 0xfffea193, 0xfffea193, 0xfffea193, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb04b, 0xfffeb009, 0xfffeb00b, 0xfffeb022,
+ 0xfffeb00b, 0xfffeb04b, 0xfffeb00b, 0xfffeb009, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb062, 0xfffeb00b, 0xfffeb04b, 0xfffeb008, 0xfffeb00b,
+ 0xfffeb00b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb022, 0xfffeb022, 0xfffeb00b,
+ 0xfffeb04b, 0xfffeb00b, 0xfffeb04b, 0xfffeb00b, 0xfffeb04b, 0xfffeb00b,
+ 0xfffeb04b, 0xfffeb062, 0xfffeb04b, 0xfffeb04b, 0xfffeb24b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb022, 0xfffeb022, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb00b, 0xfffeb022, 0xfffeb00b, 0xfffeb00b, 0xfffeb022, 0xfffeb00b,
+ 0xfffeb062, 0xfffeb062, 0xfffeb062, 0xfffeb062, 0xfffeb062, 0xfffeb062,
+ 0xfffeb062, 0xfffeb062, 0xfffeb062, 0xfffeb062, 0xfffeb062, 0xfffeb062,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb062, 0xfffeb062,
+ 0xfffeb062, 0xfffeb062, 0xfffeb062, 0xfffeb062, 0xfffeb062, 0xfffeb062,
+ 0xfffeb062, 0xfffeb062, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb022,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffeb022, 0xfffeb022, 0xfffeb022, 0xfffeb022, 0xfffeb022, 0xfffeb022,
+ 0xfffeb022, 0xfffeb022, 0xfffeb022, 0xfffeb022, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb022, 0xfffeb00b, 0xfffeb022, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb022, 0xfffeb00b,
+ 0xfffeb022, 0xfffeb022, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb022,
+ 0x0e7eb022, 0x0efeb00b, 0x0f7eb00b, 0x0ffeb022, 0x107eb00b, 0x10feb00b,
+ 0xfffeb00b, 0xfffeb022, 0xfffeb00b, 0xfffeb022, 0xfffeb208, 0xfffeb248,
+ 0xfffeb00b, 0x117eb022, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb022, 0xfffeb00b, 0xfffeb00b, 0xfffeb022, 0xfffeb022, 0xfffeb022,
+ 0xfffeb022, 0xfffeb00b, 0xfffeb00b, 0xfffeb022, 0xfffeb00b, 0xfffeb022,
+ 0xfffeb00b, 0xfffeb022, 0xfffeb022, 0xfffeb022, 0xfffeb022, 0xfffeb022,
+ 0xfffeb022, 0xfffeb00b, 0xfffeb022, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb022, 0xfffeb022, 0xfffeb022, 0xfffeb022,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0x11feb022, 0x127eb022,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0x12feb00b,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb022, 0xfffeb00b,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb022, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb00b, 0xfffeb00b, 0x137eb022, 0x13feb00b, 0x147eb00b, 0x14feb00b,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb022, 0xfffeb022,
+ 0xfffeb00b, 0xfffeb00b, 0x157eb022, 0x15feb022, 0x167eb022, 0x16feb022,
+ 0x177eb00b, 0x17feb00b, 0x187eb022, 0x18feb022, 0xfffeb00b, 0xfffeb00b,
+ 0x197eb022, 0x19feb022, 0x1a7eb00b, 0x1afeb00b, 0x1b7eb00b, 0x1bfeb00b,
+ 0x1c7eb00b, 0x1cfeb00b, 0x1d7eb00b, 0x1dfeb00b, 0x1e7eb00b, 0x1efeb00b,
+ 0x1f7eb00b, 0x1ffeb00b, 0x207eb00b, 0x20feb00b, 0x217eb00b, 0x21feb00b,
+ 0x227eb00b, 0x22feb00b, 0x237eb022, 0x23feb022, 0x247eb00b, 0x24feb00b,
+ 0x257eb022, 0x25feb022, 0x267eb00b, 0x26feb00b, 0x277eb00b, 0x27feb00b,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0x287eb00b, 0x28feb00b, 0x297eb00b,
+ 0x29feb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb022, 0xfffeb00b, 0xfffeb00b,
+ 0x2a7eb00b, 0xfffeb022, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0x2afeb00b, 0x2b7eb00b,
+ 0xfffeb00b, 0xfffeb022, 0x2bfeb00b, 0xfffeb00b, 0x2c7eb00b, 0x2cfeb00b,
+ 0xfffeb00b, 0x2d7eb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
+ 0x2dfeb00b, 0x2e7eb00b, 0x2efeb00b, 0x2f7eb00b, 0x2ffeb00b, 0x307eb00b,
+ 0x30feb00b, 0x317eb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb022, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb00b, 0x31feb00b, 0x327eb00b, 0x32feb00b, 0x337eb00b, 0x33feb00b,
+ 0xfffeb00b, 0xfffeb00b, 0x347eb00b, 0x34feb00b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb00b, 0xfffeb00b, 0x357eb00b, 0x35feb00b, 0x367eb00b, 0x36feb00b,
+ 0x377eb00b, 0x37feb00b, 0x387eb00b, 0x38feb00b, 0x397eb00b, 0x39feb00b,
+ 0x3a7eb00b, 0x3afeb00b, 0x3b7eb00b, 0x3bfeb00b, 0x3c7eb00b, 0x3cfeb00b,
+ 0x3d7eb00b, 0x3dfeb00b, 0x3e7eb00b, 0x3efeb00b, 0x3f7eb00b, 0x3ffeb00b,
+ 0x407eb00b, 0x40feb00b, 0xfffeb00b, 0xfffeb00b, 0x417eb00b, 0x41feb00b,
+ 0x427eb00b, 0x42feb00b, 0x437eb00b, 0xfffeb00b, 0x43feb00b, 0x447eb00b,
+ 0xfffeb00b, 0xfffeb00b, 0x44feb00b, 0x457eb00b, 0x45feb00b, 0x467eb00b,
+ 0x46feb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0x477eb00b, 0x47feb00b,
+ 0x487eb00b, 0x48feb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb022, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb00b, 0x497eb000, 0x49feb001, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb00b,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb00b, 0xfffeb04b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb00b, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022,
+ 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022,
+ 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022,
+ 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022,
+ 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022,
+ 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022,
+ 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3122, 0xfffe3122,
+ 0xfffe3122, 0xfffe3122, 0xfffe3122, 0xfffe3122, 0xfffe3122, 0xfffe3122,
+ 0xfffe3122, 0xfffe3122, 0xfffe3122, 0xfffe3122, 0xfffe3122, 0xfffe3122,
+ 0xfffe3122, 0xfffe3122, 0xfffe3122, 0xfffe3122, 0xfffe3122, 0xfffe3122,
+ 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062,
+ 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062,
+ 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062,
+ 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062,
+ 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062,
+ 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062,
+ 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062,
+ 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062,
+ 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062,
+ 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062,
+ 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062,
+ 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062,
+ 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062,
+ 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022,
+ 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022,
+ 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022,
+ 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe300b, 0xfffe3022, 0xfffe3022,
+ 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022,
+ 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022,
+ 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022,
+ 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022,
+ 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022,
+ 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022,
+ 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022,
+ 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022,
+ 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022,
+ 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022,
+ 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022,
+ 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022,
+ 0xfffe3022, 0xfffe3022, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022,
+ 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022,
+ 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022,
+ 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022,
+ 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022,
+ 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022,
+ 0xfffe3022, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022,
+ 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022,
+ 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe300b, 0xfffe300b,
+ 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe3022, 0xfffe3022, 0xfffe300b, 0xfffe3022,
+ 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe3022, 0xfffe3022, 0xfffe300b, 0xfffe300b,
+ 0xfffe3022, 0xfffe3022, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe3022, 0xfffe3022, 0xfffe300b, 0xfffe300b, 0xfffe3022, 0xfffe3022,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe3022, 0xfffe3022,
+ 0xfffe3022, 0xfffe300b, 0xfffe300b, 0xfffe3022, 0xfffe300b, 0xfffe300b,
+ 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe3022, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe3022, 0xfffe3022, 0xfffe300b, 0xfffe300b, 0xfffe3022,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe3022, 0xfffe3022,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe3022, 0xfffe3022,
+ 0xfffe3022, 0xfffe3022, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe3022, 0xfffe300b, 0xfffe3022, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe3022, 0xfffe300b, 0xfffe3022, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe3022, 0xfffe3022, 0xfffe300b, 0xfffe3022,
+ 0xfffe3022, 0xfffe3022, 0xfffe300b, 0xfffe3022, 0xfffe3022, 0xfffe3022,
+ 0xfffe3022, 0xfffe300b, 0xfffe3022, 0xfffe3022, 0xfffe300b, 0xfffe3022,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe3022, 0xfffe3022,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe304b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe3022, 0xfffe3022, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022,
+ 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe0024, 0xfffe3022,
+ 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022,
+ 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022,
+ 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022,
+ 0xfffe0024, 0xfffe3022, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024,
+ 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022,
+ 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022,
+ 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022,
+ 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022,
+ 0xfffe0024, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe0024,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe0024, 0xfffe0024,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe0024, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe0024, 0xfffe300b,
+ 0xfffe0024, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe0024,
+ 0xfffe0024, 0xfffe0024, 0xfffe300b, 0xfffe3022, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe3002, 0xfffe3002, 0xfffe3002, 0xfffe3002, 0xfffe0024,
+ 0xfffe0024, 0xfffe300b, 0xfffe3005, 0xfffe3005, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0x4a7e3000, 0x4afe3001, 0x4b7e3000, 0x4bfe3001,
+ 0x4c7e3000, 0x4cfe3001, 0x4d7e3000, 0x4dfe3001, 0x4e7e3000, 0x4efe3001,
+ 0x4f7e3000, 0x4ffe3001, 0x507e3000, 0x50fe3001, 0xfffe3022, 0xfffe3022,
+ 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022,
+ 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022,
+ 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022,
+ 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022,
+ 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe300b, 0xfffe0024,
+ 0xfffe0024, 0xfffe0024, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe0024, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe0024,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0x517e300b, 0x51fe300b, 0x527e3000,
+ 0x52fe3001, 0xfffe300b, 0x537e300b, 0x53fe300b, 0xfffe300b, 0xfffe0024,
+ 0xfffe300b, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0x547e300b, 0x54fe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0x557e300b,
+ 0x55fe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0x567e300b, 0x56fe300b,
+ 0x577e300b, 0x57fe300b, 0x587e3000, 0x58fe3001, 0x597e3000, 0x59fe3001,
+ 0x5a7e3000, 0x5afe3001, 0x5b7e3000, 0x5bfe3001, 0x5c7e3000, 0x5cfe3001,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0x5d7e3000, 0x5dfe3001, 0x5e7e3000, 0x5efe3001, 0x5f7e3000,
+ 0x5ffe3001, 0x607e3000, 0x60fe3001, 0x617e3000, 0x61fe3001, 0x627e3000,
+ 0x62fe3001, 0x637e3000, 0x63fe3001, 0x647e3000, 0x64fe3001, 0x657e3000,
+ 0x65fe3001, 0x667e3000, 0x66fe3001, 0x677e3000, 0x67fe3001, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0x687e300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0x68fe300b, 0x697e300b, 0xfffe300b, 0xfffe300b,
+ 0x69fe300b, 0x6a7e300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0x6afe300b,
+ 0x6b7e300b, 0x6bfe300b, 0x6c7e300b, 0xfffe300b, 0x6cfe300b, 0x6d7e300b,
+ 0xfffe300b, 0xfffe300b, 0x6dfe3000, 0x6e7e3001, 0x6efe3000, 0x6f7e3001,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0x6ffe300b, 0xfffe300b, 0xfffe300b, 0x707e300b, 0x70fe300b,
+ 0xfffe300b, 0xfffe300b, 0x717e3000, 0x71fe3001, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0x727e300b, 0x72fe300b, 0x737e300b, 0x73fe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0x747e300b, 0x74fe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0x757e300b, 0x75fe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0x767e300b, 0x76fe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0x777e300b, 0x77fe300b, 0xfffe300b, 0xfffe300b, 0x787e300b,
+ 0x78fe300b, 0x797e300b, 0x79fe300b, 0x7a7e300b, 0x7afe300b, 0x7b7e300b,
+ 0x7bfe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0x7c7e300b, 0x7cfe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0x7d7e300b, 0x7dfe300b, 0x7e7e300b, 0x7efe300b, 0x7f7e300b,
+ 0x7ffe300b, 0x807e300b, 0x80fe300b, 0x817e300b, 0x81fe300b, 0x827e300b,
+ 0x82fe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0x837e300b,
+ 0x83fe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0x847e300b, 0x84fe300b,
+ 0x857e300b, 0x85fe300b, 0x867e300b, 0x86fe300b, 0x877e300b, 0x87fe300b,
+ 0xfffe300b, 0x887e300b, 0x88fe300b, 0xfffe300b, 0xfffe300b, 0x897e300b,
+ 0x89fe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0x8a7e300b, 0x8afe300b, 0x8b7e300b, 0x8bfe300b, 0x8c7e300b,
+ 0x8cfe300b, 0x8d7e300b, 0x8dfe300b, 0x8e7e300b, 0x8efe300b, 0x8f7e300b,
+ 0x8ffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0x907e300b, 0x90fe300b, 0x917e300b, 0x91fe300b, 0x927e300b,
+ 0x92fe300b, 0x937e300b, 0x93fe300b, 0x947e300b, 0x94fe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0x957e300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0x95fe300b,
+ 0x967e300b, 0x96fe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0x977e300b, 0x97fe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0x987e300b, 0x98fe300b, 0x997e300b, 0x99fe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe0024, 0xfffe0024, 0xfffe0024,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe3022,
+ 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe3022, 0xfffe0024, 0xfffe0024,
+ 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024,
+ 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024,
+ 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024,
+ 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024,
+ 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024,
+ 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024,
+ 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024,
+ 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024,
+ 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024,
+ 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024,
+ 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024,
+ 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024,
+ 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024,
+ 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024,
+ 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024,
+ 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024,
+ 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024,
+ 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024,
+ 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024,
+ 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024,
+ 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024,
+ 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024,
+ 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024,
+ 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024,
+ 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024,
+ 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024,
+ 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024,
+ 0xfffe0024, 0xfffe0024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffeb005,
+ 0xfffeb00f, 0xfffeb00f, 0xfffeb00f, 0xfffeb00b, 0xfffeb005, 0xfffeb00f,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffeb04b, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffe8024, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
+ 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
+ 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
+ 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
+ 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
+ 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffeb001, 0xfffeb001,
+ 0x9a7eb000, 0x9afeb001, 0x9b7eb000, 0x9bfeb001, 0xfffeb002, 0xfffeb002,
+ 0xfffeb002, 0x9c7eb000, 0x9cfeb001, 0xfffeb002, 0x9d7eb000, 0x9dfeb001,
+ 0xfffeb00f, 0xfffeb00f, 0xfffeb00f, 0xfffeb00f, 0xfffeb00f, 0xfffeb00f,
+ 0xfffeb00f, 0xfffeb00f, 0xfffeb00b, 0xfffeb00f, 0xfffeb000, 0xfffeb00f,
+ 0xfffeb00b, 0xfffeb00b, 0x9e7eb000, 0x9efeb001, 0xfffeb00b, 0xfffeb00b,
+ 0x9f7eb000, 0x9ffeb001, 0xa07eb000, 0xa0feb001, 0xa17eb000, 0xa1feb001,
+ 0xa27eb000, 0xa2feb001, 0xa37eb000, 0xa3feb001, 0xfffeb00f, 0xfffeb00f,
+ 0xfffeb00f, 0xfffeb00f, 0xfffeb005, 0xfffeb00b, 0xfffeb00f, 0xfffeb00f,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe0024, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024,
+ 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024,
+ 0xfffe0024, 0xfffe0024, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024,
+ 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024,
+ 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024,
+ 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024,
+ 0xfffe0024, 0xfffe0024, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024,
+ 0xfffe330c, 0xffff3001, 0xffff3001, 0xfffe300c, 0xfffe300c, 0xfffe3044,
+ 0xfffe304c, 0xfffe304c, 0xa40eb000, 0xa490b001, 0xa512b000, 0xa594b001,
+ 0xa616b000, 0xa698b001, 0xa71ab000, 0xa79cb001, 0xa81eb000, 0xa8a0b001,
+ 0xfffe300c, 0xfffe300c, 0xa922b000, 0xa9a4b001, 0xaa7eb000, 0xaafeb001,
+ 0xab7eb000, 0xabfeb001, 0xac7eb000, 0xacfeb001, 0xfffe3004, 0xfffe3000,
+ 0xfffe3001, 0xfffe3001, 0xfffe300c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe2193, 0xfffe2193, 0xfffe2193, 0xfffe2193, 0xfffe2193, 0xfffe2193,
+ 0xfffe300c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe300c, 0xfffe300c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe3044,
+ 0xfffe3044, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe0024, 0xfffe3044,
+ 0xfffe304c, 0xfffe3044, 0xfffe304c, 0xfffe3044, 0xfffe304c, 0xfffe3044,
+ 0xfffe304c, 0xfffe3044, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xffff3044, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xffff3044,
+ 0xfffe304c, 0xffff3044, 0xfffe304c, 0xffff3044, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe3044, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe3044,
+ 0xfffe3044, 0xfffe0024, 0xfffe0024, 0xfffe2193, 0xfffe2193, 0xfffe3004,
+ 0xfffe3004, 0xfffe3044, 0xfffe3044, 0xfffe304c, 0xfffe3004, 0xfffe3044,
+ 0xfffe304c, 0xfffe3044, 0xfffe304c, 0xfffe3044, 0xfffe304c, 0xfffe3044,
+ 0xfffe304c, 0xfffe3044, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe3044, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe3044,
+ 0xfffe304c, 0xfffe3044, 0xfffe304c, 0xfffe3044, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe3044, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe3044,
+ 0xfffe3044, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe3004,
+ 0xfffeb044, 0xfffe3044, 0xfffe3044, 0xfffe304c, 0xfffe0024, 0xfffe0024,
+ 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffeb04c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe0024, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024,
+ 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe0024, 0xfffe0024,
+ 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024,
+ 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe3044, 0xfffe3044,
+ 0xfffe3044, 0xfffe3044, 0xfffe3044, 0xfffe3044, 0xfffe3044, 0xfffe3044,
+ 0xfffe3044, 0xfffe3044, 0xfffe3044, 0xfffe3044, 0xfffe3044, 0xfffe3044,
+ 0xfffe3044, 0xfffe3044, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe300c, 0xfffe300c, 0xfffe0024, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062,
+ 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe3062, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe0024,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe300c, 0xfffe300c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe300c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe0064, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe0024, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe0064,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe0024, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe3044, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe0024,
+ 0xfffe0024, 0xfffe0024, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe0024, 0xfffe0024, 0xfffe0024,
+ 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304f, 0xfffe304f,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe300f,
+ 0xfffe3005, 0xfffe300f, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304a, 0xfffe304a, 0xfffe304a, 0xfffe304a, 0xfffe304a, 0xfffe304a,
+ 0xfffe304a, 0xfffe304a, 0xfffe304a, 0xfffe304a, 0xfffe304b, 0xfffe304b,
+ 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024,
+ 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024,
+ 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024,
+ 0xfffe0024, 0xfffe0024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffea193, 0xfffeb193, 0xfffeb193, 0xfffeb193, 0xfffeb00b,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffea193, 0xfffea193, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffea193, 0xfffea193,
+ 0xfffeb04b, 0xfffeb04f, 0xfffeb04f, 0xfffeb04f, 0xfffeb04f, 0xfffeb04f,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb00b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffea193, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffea193, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffea193,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb053,
+ 0xfffeb053, 0xfffea193, 0xfffea193, 0xfffeb053, 0xfffeb00b, 0xfffeb00b,
+ 0xfffeb00b, 0xfffeb00b, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb249, 0xfffeb24b, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb010, 0xfffeb010, 0xfffeb005, 0xfffeb005,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffeb053, 0xfffeb053, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb053, 0xfffeb053, 0xfffeb053, 0xfffeb053, 0xfffeb053, 0xfffeb053,
+ 0xfffeb053, 0xfffeb053, 0xfffeb053, 0xfffeb053, 0xfffeb053, 0xfffeb053,
+ 0xfffeb053, 0xfffeb053, 0xfffeb053, 0xfffeb053, 0xfffea193, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffeb04f, 0xfffeb04f, 0xfffeb04a, 0xfffeb04a,
+ 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a,
+ 0xfffeb04a, 0xfffeb04a, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
+ 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
+ 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
+ 0xfffea193, 0xfffea193, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffeb04a, 0xfffeb04a,
+ 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a,
+ 0xfffeb04a, 0xfffeb04a, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
+ 0xfffea193, 0xfffea193, 0xfffeb04f, 0xfffeb04f, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffea193, 0xfffea193, 0xfffea193,
+ 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
+ 0xfffea193, 0xfffea193, 0xfffeb053, 0xfffeb053, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffeb04b, 0xfffeb057, 0xfffeb057,
+ 0xfffeb057, 0xfffeb057, 0xfffeb057, 0xfffeb057, 0xfffeb057, 0xfffeb057,
+ 0xfffeb057, 0xfffeb057, 0xfffeb057, 0xfffeb057, 0xfffeb057, 0xfffeb057,
+ 0xfffeb057, 0xfffeb057, 0xfffeb057, 0xfffeb057, 0xfffeb057, 0xfffeb057,
+ 0xfffeb057, 0xfffeb057, 0xfffeb057, 0xfffeb057, 0xfffeb057, 0xfffeb057,
+ 0xfffeb057, 0xfffeb057, 0xfffeb057, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffea193, 0xfffea193, 0xfffea193, 0xfffeb053, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffea193, 0xfffeb053, 0xfffeb053,
+ 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffeb053, 0xfffeb053,
+ 0xfffea193, 0xfffeb053, 0xfffeb053, 0xfffeb053, 0xfffeb053, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04f,
+ 0xfffeb04f, 0xfffeb04f, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffe8024, 0xfffeb04b, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a,
+ 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffeb04b, 0xfffeb04b,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
+ 0xfffea193, 0xfffeb053, 0xfffeb053, 0xfffea193, 0xfffea193, 0xfffeb053,
+ 0xfffeb053, 0xfffea193, 0xfffea193, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffea193, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffea193, 0xfffeb053, 0xfffe8024, 0xfffe8024, 0xfffeb04a, 0xfffeb04a,
+ 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a,
+ 0xfffeb04a, 0xfffeb04a, 0xfffe8024, 0xfffe8024, 0xfffeb04b, 0xfffeb04f,
+ 0xfffeb04f, 0xfffeb04f, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
+ 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
+ 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
+ 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
+ 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffeb05e, 0xfffeb05e,
+ 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
+ 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
+ 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
+ 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
+ 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
+ 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
+ 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
+ 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffea19e, 0xfffeb05e,
+ 0xfffea19e, 0xfffea19e, 0xfffea19e, 0xfffeb05e, 0xfffeb05e, 0xfffea19e,
+ 0xfffea19e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e,
+ 0xfffea19e, 0xfffea19e, 0xfffeb05e, 0xfffea19e, 0xfffeb05e, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffeb05e,
+ 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffeb05e, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb053,
+ 0xfffeb053, 0xfffea193, 0xfffeb053, 0xfffeb053, 0xfffea193, 0xfffeb053,
+ 0xfffeb053, 0xfffeb04f, 0xfffeb053, 0xfffea193, 0xfffe8024, 0xfffe8024,
+ 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a,
+ 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffeb04a, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe0064, 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064,
+ 0xfffe3055, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe3056,
+ 0xfffe3056, 0xfffe3056, 0xfffe3056, 0xfffe0064, 0xfffe0024, 0xfffe0024,
+ 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024,
+ 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe3058, 0xfffe3058,
+ 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058,
+ 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058,
+ 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe3058,
+ 0xfffe3058, 0xfffe3058, 0xfffe3058, 0xfffe0024, 0xfffe0024, 0xfffe0024,
+ 0xfffe0024, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059,
+ 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059,
+ 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059,
+ 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059,
+ 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059,
+ 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059,
+ 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059,
+ 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059, 0xfffe3059,
+ 0xfffe3059, 0xfffe3059, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe0024, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe0024, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f, 0xfffe301f,
+ 0xfffe301f, 0xfffe0024, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061,
+ 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe3061, 0xfffe0064,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe300c, 0xfffe0024, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe300c, 0xfffe0024, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe0024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffeb04b, 0xfffeb04b, 0xfffeb04b,
+ 0xfffeb04b, 0xfffeb04b, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffeb08b, 0xfffea193, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b,
+ 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b,
+ 0xfffeb08b, 0xfffeb20b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b,
+ 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b,
+ 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffe80a4, 0xfffeb08b, 0xfffeb08b,
+ 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffe80a4, 0xfffeb08b, 0xfffe80a4,
+ 0xfffeb08b, 0xfffeb08b, 0xfffe80a4, 0xfffeb08b, 0xfffeb08b, 0xfffe80a4,
+ 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b,
+ 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffeb08b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed964, 0xfffed964, 0xfffed964, 0xfffed964, 0xfffed964, 0xfffed964,
+ 0xfffed964, 0xfffed964, 0xfffed964, 0xfffed964, 0xfffed964, 0xfffed964,
+ 0xfffed964, 0xfffed964, 0xfffed964, 0xfffed964, 0xfffed964, 0xfffed964,
+ 0xfffed964, 0xfffed964, 0xfffed964, 0xfffed964, 0xfffed964, 0xfffed964,
+ 0xfffed964, 0xfffed964, 0xfffed964, 0xfffed964, 0xfffed964, 0xfffed964,
+ 0xfffed964, 0xfffed964, 0xfffed964, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed800, 0xfffed801, 0xfffed964, 0xfffed964, 0xfffed964, 0xfffed964,
+ 0xfffed964, 0xfffed964, 0xfffed964, 0xfffed964, 0xfffed964, 0xfffed964,
+ 0xfffed964, 0xfffed964, 0xfffed964, 0xfffed964, 0xfffed964, 0xfffed964,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed964, 0xfffed964,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed964, 0xfffed964, 0xfffed964, 0xfffed964, 0xfffed964, 0xfffed964,
+ 0xfffed964, 0xfffed964, 0xfffedaa4, 0xfffedaa4, 0xfffedaa4, 0xfffedaa4,
+ 0xfffedaa4, 0xfffedaa4, 0xfffedaa4, 0xfffedaa4, 0xfffedaa4, 0xfffedaa4,
+ 0xfffedaa4, 0xfffedaa4, 0xfffedaa4, 0xfffedaa4, 0xfffedaa4, 0xfffedaa4,
+ 0xfffedaa4, 0xfffedaa4, 0xfffedaa4, 0xfffedaa4, 0xfffedaa4, 0xfffedaa4,
+ 0xfffedaa4, 0xfffedaa4, 0xfffedaa4, 0xfffedaa4, 0xfffedaa4, 0xfffedaa4,
+ 0xfffedaa4, 0xfffedaa4, 0xfffedaa4, 0xfffedaa4, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed949, 0xfffed80b,
+ 0xfffed964, 0xfffed964, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
+ 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
+ 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193,
+ 0xfffe3007, 0xfffe3001, 0xfffe3001, 0xfffe3007, 0xfffe3007, 0xfffe3005,
+ 0xfffe3005, 0xfffe3000, 0xfffe3001, 0xfffe300d, 0xfffe0024, 0xfffe0024,
+ 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffea193, 0xfffea193,
+ 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffea193, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024, 0xfffe8024,
+ 0xfffe8024, 0xfffe8024, 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe3000, 0xfffe3001, 0xfffe3000, 0xfffe3001, 0xfffe3000,
+ 0xfffe3001, 0xfffe3000, 0xfffe3001, 0xfffe3000, 0xfffe3001, 0xfffe3000,
+ 0xfffe3001, 0xfffe3000, 0xfffe3001, 0xfffe3000, 0xfffe3001, 0xfffe300c,
+ 0xfffe300c, 0xfffe3000, 0xfffe3001, 0xfffe300c, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe300c, 0xfffe300c, 0xffa6300c, 0xfffe31c1, 0xfffe300c,
+ 0xfffe31c1, 0xfffe0024, 0xfffe3004, 0xfffe31c4, 0xfffe3005, 0xfffe3005,
+ 0xfffe300c, 0xad7e3000, 0xadfe3001, 0xae7e3000, 0xaefe3001, 0xaf7e3000,
+ 0xaffe3001, 0xfffe324c, 0xfffe300c, 0xfffe300c, 0xfffe320c, 0xfffe320c,
+ 0xb07e300c, 0xb0fe300c, 0xfffe300c, 0xfffe0024, 0xfffe300c, 0xfffe3248,
+ 0xfffe3249, 0xfffe300c, 0xfffe0024, 0xfffe0024, 0xfffe0024, 0xfffe0024,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed964,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed94b,
+ 0xfffed94b, 0xfffed94b, 0xfffed94b, 0xfffed964, 0xfffed964, 0xfffe9a94,
+ 0xfffe0024, 0xffff3005, 0xfffe300c, 0xfffe324c, 0xfffe3248, 0xfffe3249,
+ 0xfffe300c, 0xfffe300c, 0xb1283000, 0xb1aa3001, 0xfffe300c, 0xfffe320c,
+ 0xffff31c1, 0xfffeb20c, 0xffff31c1, 0xfffe31cc, 0xfffe310c, 0xfffe310c,
+ 0xfffe310c, 0xfffe310c, 0xfffe310c, 0xfffe310c, 0xfffe310c, 0xfffe310c,
+ 0xfffe310c, 0xfffe310c, 0xffff31c4, 0xffff3004, 0xb27e300c, 0xfffe300c,
+ 0xb2fe300c, 0xffff3005, 0xfffe300c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xb37eb000,
+ 0xfffe300c, 0xb3feb001, 0xfffe300c, 0xfffeb00c, 0xfffe300c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c, 0xfffe304c,
+ 0xfffe304c, 0xb42c3000, 0xfffe300c, 0xb4ae3001, 0xfffeb00c, 0xb57e3000,
+ 0xb5fe3001, 0xfffeb001, 0xb67eb000, 0xb6feb001, 0xfffeb001, 0xfffe3004,
+ 0xfffe304b, 0xfffe3044, 0xfffe3044, 0xfffe3044, 0xfffe3044, 0xfffe3044,
+ 0xfffe3044, 0xfffe3044, 0xfffe3044, 0xfffe3044, 0xfffe3044, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe3044, 0xfffe3044, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe0024,
+ 0xfffe0024, 0xfffe0024, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe0024, 0xfffe0024, 0xfffe304b, 0xfffe304b,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe0024, 0xfffe0024,
+ 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe304b,
+ 0xfffe0024, 0xfffe0024, 0xfffe304b, 0xfffe304b, 0xfffe304b, 0xfffe0024,
+ 0xfffe0024, 0xfffe0024, 0xfffe3249, 0xfffe3248, 0xfffe300c, 0xfffe300c,
+ 0xfffe300c, 0xfffe3248, 0xfffe3248, 0xfffe0024, 0xfffe300b, 0xfffe300b,
+ 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe300b, 0xfffe0024,
+ 0xfffe02a4, 0xfffe02a4, 0xfffe02a4, 0xfffe02a4, 0xfffe02a4, 0xfffe02a4,
+ 0xfffe02a4, 0xfffe02a4, 0xfffe02a4, 0xfffe3013, 0xfffe3013, 0xfffe3013,
+ 0xfffe3011, 0xfffe3022, 0xfffe1aa4, 0xfffe1aa4,
};
extern const FX_WCHAR gs_FX_TextLayout_VerticalMirror[64] = {
- 0xFE33, 0xFE32, 0xFE31, 0xFE41, 0xFE42, 0xFE43, 0xFE44, 0xFE3F, 0xFE40, 0xFE3D, 0xFE3E, 0xFE41, 0xFE42, 0xFE43, 0xFE44, 0xFE3B,
- 0xFE3C, 0xFE39, 0xFE3A, 0xFE34, 0xFE35, 0xFE36, 0xFE37, 0xFE38, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF,
- 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF,
- 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF,
+ 0xFE33, 0xFE32, 0xFE31, 0xFE41, 0xFE42, 0xFE43, 0xFE44, 0xFE3F,
+ 0xFE40, 0xFE3D, 0xFE3E, 0xFE41, 0xFE42, 0xFE43, 0xFE44, 0xFE3B,
+ 0xFE3C, 0xFE39, 0xFE3A, 0xFE34, 0xFE35, 0xFE36, 0xFE37, 0xFE38,
+ 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF,
+ 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF,
+ 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF,
+ 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF,
+ 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF,
};
extern const FX_WCHAR gs_FX_TextLayout_BidiMirror[512] = {
- 0x0029, 0x0028, 0x003E, 0x003C, 0x005D, 0x005B, 0x007D, 0x007B, 0x00BB, 0x00AB, 0x0F3B, 0x0F3A, 0x0F3D, 0x0F3C, 0x169C, 0x169B,
- 0x2019, 0x2018, 0x201D, 0x201C, 0x203A, 0x2039, 0x2046, 0x2045, 0x207E, 0x207D, 0x208E, 0x208D, 0x220B, 0x220C, 0x220D, 0x2208,
- 0x2209, 0x220A, 0x29F5, 0x223D, 0x223C, 0x22CD, 0x2253, 0x2252, 0x2255, 0x2254, 0x2265, 0x2264, 0x2267, 0x2266, 0x2269, 0x2268,
- 0x226B, 0x226A, 0x226F, 0x226E, 0x2271, 0x2270, 0x2273, 0x2272, 0x2275, 0x2274, 0x2277, 0x2276, 0x2279, 0x2278, 0x227B, 0x227A,
- 0x227D, 0x227C, 0x227F, 0x227E, 0x2281, 0x2280, 0x2283, 0x2282, 0x2285, 0x2284, 0x2287, 0x2286, 0x2289, 0x2288, 0x228B, 0x228A,
- 0x2290, 0x228F, 0x2292, 0x2291, 0x29B8, 0x22A3, 0x22A2, 0x2ADE, 0x2AE4, 0x2AE3, 0x2AE5, 0x22B1, 0x22B0, 0x22B3, 0x22B2, 0x22B5,
- 0x22B4, 0x22B7, 0x22B6, 0x22CA, 0x22C9, 0x22CC, 0x22CB, 0x2243, 0x22D1, 0x22D0, 0x22D7, 0x22D6, 0x22D9, 0x22D8, 0x22DB, 0x22DA,
- 0x22DD, 0x22DC, 0x22DF, 0x22DE, 0x22E1, 0x22E0, 0x22E3, 0x22E2, 0x22E5, 0x22E4, 0x22E7, 0x22E6, 0x22E9, 0x22E8, 0x22EB, 0x22EA,
- 0x22ED, 0x22EC, 0x22F1, 0x22F0, 0x22FA, 0x22FB, 0x22FC, 0x22FD, 0x22FE, 0x22F2, 0x22F3, 0x22F4, 0x22F6, 0x22F7, 0x2309, 0x2308,
- 0x230B, 0x230A, 0x232A, 0x2329, 0x2769, 0x2768, 0x276B, 0x276A, 0x276D, 0x276C, 0x276F, 0x276E, 0x2771, 0x2770, 0x2773, 0x2772,
- 0x2775, 0x2774, 0x27C4, 0x27C3, 0x27C6, 0x27C5, 0x27C9, 0x27C8, 0x27D6, 0x27D5, 0x27DE, 0x27DD, 0x27E3, 0x27E2, 0x27E5, 0x27E4,
- 0x27E7, 0x27E6, 0x27E9, 0x27E8, 0x27EB, 0x27EA, 0x27ED, 0x27EC, 0x27EF, 0x27EE, 0x2984, 0x2983, 0x2986, 0x2985, 0x2988, 0x2987,
- 0x298A, 0x2989, 0x298C, 0x298B, 0x2990, 0x298F, 0x298E, 0x298D, 0x2992, 0x2991, 0x2994, 0x2993, 0x2996, 0x2995, 0x2998, 0x2997,
- 0x2298, 0x29C1, 0x29C0, 0x29C5, 0x29C4, 0x29D0, 0x29CF, 0x29D2, 0x29D1, 0x29D5, 0x29D4, 0x29D9, 0x29D8, 0x29DB, 0x29DA, 0x2215,
- 0x29F9, 0x29F8, 0x29FD, 0x29FC, 0x2A2C, 0x2A2B, 0x2A2E, 0x2A2D, 0x2A35, 0x2A34, 0x2A3D, 0x2A3C, 0x2A65, 0x2A64, 0x2A7A, 0x2A79,
- 0x2A7E, 0x2A7D, 0x2A80, 0x2A7F, 0x2A82, 0x2A81, 0x2A84, 0x2A83, 0x2A8C, 0x2A8B, 0x2A92, 0x2A91, 0x2A94, 0x2A93, 0x2A96, 0x2A95,
- 0x2A98, 0x2A97, 0x2A9A, 0x2A99, 0x2A9C, 0x2A9B, 0x2AA2, 0x2AA1, 0x2AA7, 0x2AA6, 0x2AA9, 0x2AA8, 0x2AAB, 0x2AAA, 0x2AAD, 0x2AAC,
- 0x2AB0, 0x2AAF, 0x2AB4, 0x2AB3, 0x2ABC, 0x2ABB, 0x2ABE, 0x2ABD, 0x2AC0, 0x2ABF, 0x2AC2, 0x2AC1, 0x2AC4, 0x2AC3, 0x2AC6, 0x2AC5,
- 0x2ACE, 0x2ACD, 0x2AD0, 0x2ACF, 0x2AD2, 0x2AD1, 0x2AD4, 0x2AD3, 0x2AD6, 0x2AD5, 0x22A6, 0x22A9, 0x22A8, 0x22AB, 0x2AED, 0x2AEC,
- 0x2AF8, 0x2AF7, 0x2AFA, 0x2AF9, 0x2E03, 0x2E02, 0x2E05, 0x2E04, 0x2E0A, 0x2E09, 0x2E0D, 0x2E0C, 0x2E1D, 0x2E1C, 0x2E21, 0x2E20,
- 0x2E23, 0x2E22, 0x2E25, 0x2E24, 0x2E27, 0x2E26, 0x2E29, 0x2E28, 0x3009, 0x3008, 0x300B, 0x300A, 0x300D, 0x300C, 0x300F, 0x300E,
- 0x3011, 0x3010, 0x3015, 0x3014, 0x3017, 0x3016, 0x3019, 0x3018, 0x301B, 0x301A, 0xFE5A, 0xFE59, 0xFE5C, 0xFE5B, 0xFE5E, 0xFE5D,
- 0xFE65, 0xFE64, 0xFF09, 0xFF08, 0xFF1E, 0xFF1C, 0xFF3D, 0xFF3B, 0xFF5D, 0xFF5B, 0xFF60, 0xFF5F, 0xFF63, 0xFF62, 0xFFFF, 0xFEFF,
- 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF,
- 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF,
- 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF,
- 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF,
- 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF,
- 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF,
- 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF,
- 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF,
- 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF,
+ 0x0029, 0x0028, 0x003E, 0x003C, 0x005D, 0x005B, 0x007D, 0x007B, 0x00BB,
+ 0x00AB, 0x0F3B, 0x0F3A, 0x0F3D, 0x0F3C, 0x169C, 0x169B, 0x2019, 0x2018,
+ 0x201D, 0x201C, 0x203A, 0x2039, 0x2046, 0x2045, 0x207E, 0x207D, 0x208E,
+ 0x208D, 0x220B, 0x220C, 0x220D, 0x2208, 0x2209, 0x220A, 0x29F5, 0x223D,
+ 0x223C, 0x22CD, 0x2253, 0x2252, 0x2255, 0x2254, 0x2265, 0x2264, 0x2267,
+ 0x2266, 0x2269, 0x2268, 0x226B, 0x226A, 0x226F, 0x226E, 0x2271, 0x2270,
+ 0x2273, 0x2272, 0x2275, 0x2274, 0x2277, 0x2276, 0x2279, 0x2278, 0x227B,
+ 0x227A, 0x227D, 0x227C, 0x227F, 0x227E, 0x2281, 0x2280, 0x2283, 0x2282,
+ 0x2285, 0x2284, 0x2287, 0x2286, 0x2289, 0x2288, 0x228B, 0x228A, 0x2290,
+ 0x228F, 0x2292, 0x2291, 0x29B8, 0x22A3, 0x22A2, 0x2ADE, 0x2AE4, 0x2AE3,
+ 0x2AE5, 0x22B1, 0x22B0, 0x22B3, 0x22B2, 0x22B5, 0x22B4, 0x22B7, 0x22B6,
+ 0x22CA, 0x22C9, 0x22CC, 0x22CB, 0x2243, 0x22D1, 0x22D0, 0x22D7, 0x22D6,
+ 0x22D9, 0x22D8, 0x22DB, 0x22DA, 0x22DD, 0x22DC, 0x22DF, 0x22DE, 0x22E1,
+ 0x22E0, 0x22E3, 0x22E2, 0x22E5, 0x22E4, 0x22E7, 0x22E6, 0x22E9, 0x22E8,
+ 0x22EB, 0x22EA, 0x22ED, 0x22EC, 0x22F1, 0x22F0, 0x22FA, 0x22FB, 0x22FC,
+ 0x22FD, 0x22FE, 0x22F2, 0x22F3, 0x22F4, 0x22F6, 0x22F7, 0x2309, 0x2308,
+ 0x230B, 0x230A, 0x232A, 0x2329, 0x2769, 0x2768, 0x276B, 0x276A, 0x276D,
+ 0x276C, 0x276F, 0x276E, 0x2771, 0x2770, 0x2773, 0x2772, 0x2775, 0x2774,
+ 0x27C4, 0x27C3, 0x27C6, 0x27C5, 0x27C9, 0x27C8, 0x27D6, 0x27D5, 0x27DE,
+ 0x27DD, 0x27E3, 0x27E2, 0x27E5, 0x27E4, 0x27E7, 0x27E6, 0x27E9, 0x27E8,
+ 0x27EB, 0x27EA, 0x27ED, 0x27EC, 0x27EF, 0x27EE, 0x2984, 0x2983, 0x2986,
+ 0x2985, 0x2988, 0x2987, 0x298A, 0x2989, 0x298C, 0x298B, 0x2990, 0x298F,
+ 0x298E, 0x298D, 0x2992, 0x2991, 0x2994, 0x2993, 0x2996, 0x2995, 0x2998,
+ 0x2997, 0x2298, 0x29C1, 0x29C0, 0x29C5, 0x29C4, 0x29D0, 0x29CF, 0x29D2,
+ 0x29D1, 0x29D5, 0x29D4, 0x29D9, 0x29D8, 0x29DB, 0x29DA, 0x2215, 0x29F9,
+ 0x29F8, 0x29FD, 0x29FC, 0x2A2C, 0x2A2B, 0x2A2E, 0x2A2D, 0x2A35, 0x2A34,
+ 0x2A3D, 0x2A3C, 0x2A65, 0x2A64, 0x2A7A, 0x2A79, 0x2A7E, 0x2A7D, 0x2A80,
+ 0x2A7F, 0x2A82, 0x2A81, 0x2A84, 0x2A83, 0x2A8C, 0x2A8B, 0x2A92, 0x2A91,
+ 0x2A94, 0x2A93, 0x2A96, 0x2A95, 0x2A98, 0x2A97, 0x2A9A, 0x2A99, 0x2A9C,
+ 0x2A9B, 0x2AA2, 0x2AA1, 0x2AA7, 0x2AA6, 0x2AA9, 0x2AA8, 0x2AAB, 0x2AAA,
+ 0x2AAD, 0x2AAC, 0x2AB0, 0x2AAF, 0x2AB4, 0x2AB3, 0x2ABC, 0x2ABB, 0x2ABE,
+ 0x2ABD, 0x2AC0, 0x2ABF, 0x2AC2, 0x2AC1, 0x2AC4, 0x2AC3, 0x2AC6, 0x2AC5,
+ 0x2ACE, 0x2ACD, 0x2AD0, 0x2ACF, 0x2AD2, 0x2AD1, 0x2AD4, 0x2AD3, 0x2AD6,
+ 0x2AD5, 0x22A6, 0x22A9, 0x22A8, 0x22AB, 0x2AED, 0x2AEC, 0x2AF8, 0x2AF7,
+ 0x2AFA, 0x2AF9, 0x2E03, 0x2E02, 0x2E05, 0x2E04, 0x2E0A, 0x2E09, 0x2E0D,
+ 0x2E0C, 0x2E1D, 0x2E1C, 0x2E21, 0x2E20, 0x2E23, 0x2E22, 0x2E25, 0x2E24,
+ 0x2E27, 0x2E26, 0x2E29, 0x2E28, 0x3009, 0x3008, 0x300B, 0x300A, 0x300D,
+ 0x300C, 0x300F, 0x300E, 0x3011, 0x3010, 0x3015, 0x3014, 0x3017, 0x3016,
+ 0x3019, 0x3018, 0x301B, 0x301A, 0xFE5A, 0xFE59, 0xFE5C, 0xFE5B, 0xFE5E,
+ 0xFE5D, 0xFE65, 0xFE64, 0xFF09, 0xFF08, 0xFF1E, 0xFF1C, 0xFF3D, 0xFF3B,
+ 0xFF5D, 0xFF5B, 0xFF60, 0xFF5F, 0xFF63, 0xFF62, 0xFFFF, 0xFEFF, 0xFEFF,
+ 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF,
+ 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF,
+ 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF,
+ 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF,
+ 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF,
+ 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF,
+ 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF,
+ 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF,
+ 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF,
+ 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF,
+ 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF,
+ 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF,
+ 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF,
+ 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF,
+ 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF,
+ 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF, 0xFEFF,
};
diff --git a/core/src/fxcrt/fx_unicode.cpp b/core/src/fxcrt/fx_unicode.cpp
index d66a58a9b3..f05aeb5efb 100644
--- a/core/src/fxcrt/fx_unicode.cpp
+++ b/core/src/fxcrt/fx_unicode.cpp
@@ -9,58 +9,56 @@
extern const FX_DWORD gs_FX_TextLayout_CodeProperties[65536];
extern const FX_WCHAR gs_FX_TextLayout_VerticalMirror[64];
extern const FX_WCHAR gs_FX_TextLayout_BidiMirror[512];
-FX_DWORD FX_GetUnicodeProperties(FX_WCHAR wch)
-{
- return gs_FX_TextLayout_CodeProperties[(FX_WORD)wch];
+FX_DWORD FX_GetUnicodeProperties(FX_WCHAR wch) {
+ return gs_FX_TextLayout_CodeProperties[(FX_WORD)wch];
}
-FX_BOOL FX_IsCtrlCode(FX_WCHAR ch)
-{
- FX_DWORD dwRet = (gs_FX_TextLayout_CodeProperties[(FX_WORD)ch] & FX_CHARTYPEBITSMASK);
- return dwRet == FX_CHARTYPE_Tab || dwRet == FX_CHARTYPE_Control;
+FX_BOOL FX_IsCtrlCode(FX_WCHAR ch) {
+ FX_DWORD dwRet =
+ (gs_FX_TextLayout_CodeProperties[(FX_WORD)ch] & FX_CHARTYPEBITSMASK);
+ return dwRet == FX_CHARTYPE_Tab || dwRet == FX_CHARTYPE_Control;
}
-FX_BOOL FX_IsRotationCode(FX_WCHAR ch)
-{
- return (gs_FX_TextLayout_CodeProperties[(FX_WORD)ch] & 0x8000) != 0;
+FX_BOOL FX_IsRotationCode(FX_WCHAR ch) {
+ return (gs_FX_TextLayout_CodeProperties[(FX_WORD)ch] & 0x8000) != 0;
}
-FX_BOOL FX_IsCombinationChar(FX_WCHAR wch)
-{
- FX_DWORD dwProps = (gs_FX_TextLayout_CodeProperties[(FX_WORD)wch] & FX_CHARTYPEBITSMASK);
- return dwProps == FX_CHARTYPE_Combination;
+FX_BOOL FX_IsCombinationChar(FX_WCHAR wch) {
+ FX_DWORD dwProps =
+ (gs_FX_TextLayout_CodeProperties[(FX_WORD)wch] & FX_CHARTYPEBITSMASK);
+ return dwProps == FX_CHARTYPE_Combination;
}
-FX_BOOL FX_IsBidiChar(FX_WCHAR wch)
-{
- FX_DWORD dwProps = gs_FX_TextLayout_CodeProperties[(FX_WORD)wch];
- int32_t iBidiCls = (dwProps & FX_BIDICLASSBITSMASK) >> FX_BIDICLASSBITS;
- return (FX_BIDICLASS_R == iBidiCls || FX_BIDICLASS_AL == iBidiCls);
+FX_BOOL FX_IsBidiChar(FX_WCHAR wch) {
+ FX_DWORD dwProps = gs_FX_TextLayout_CodeProperties[(FX_WORD)wch];
+ int32_t iBidiCls = (dwProps & FX_BIDICLASSBITSMASK) >> FX_BIDICLASSBITS;
+ return (FX_BIDICLASS_R == iBidiCls || FX_BIDICLASS_AL == iBidiCls);
}
-FX_WCHAR FX_GetMirrorChar(FX_WCHAR wch, FX_BOOL bRTL, FX_BOOL bVertical)
-{
- FX_DWORD dwProps = gs_FX_TextLayout_CodeProperties[(FX_WORD)wch];
- FX_DWORD dwTemp = (dwProps & 0xFF800000);
- if (bRTL && dwTemp < 0xFF800000) {
- wch = gs_FX_TextLayout_BidiMirror[dwTemp >> 23];
- dwProps = gs_FX_TextLayout_CodeProperties[(FX_WORD)wch];
+FX_WCHAR FX_GetMirrorChar(FX_WCHAR wch, FX_BOOL bRTL, FX_BOOL bVertical) {
+ FX_DWORD dwProps = gs_FX_TextLayout_CodeProperties[(FX_WORD)wch];
+ FX_DWORD dwTemp = (dwProps & 0xFF800000);
+ if (bRTL && dwTemp < 0xFF800000) {
+ wch = gs_FX_TextLayout_BidiMirror[dwTemp >> 23];
+ dwProps = gs_FX_TextLayout_CodeProperties[(FX_WORD)wch];
+ }
+ if (bVertical) {
+ dwTemp = (dwProps & 0x007E0000);
+ if (dwTemp < 0x007E0000) {
+ wch = gs_FX_TextLayout_VerticalMirror[dwTemp >> 17];
}
- if (bVertical) {
- dwTemp = (dwProps & 0x007E0000);
- if (dwTemp < 0x007E0000) {
- wch = gs_FX_TextLayout_VerticalMirror[dwTemp >> 17];
- }
- }
- return wch;
+ }
+ return wch;
}
-FX_WCHAR FX_GetMirrorChar(FX_WCHAR wch, FX_DWORD dwProps, FX_BOOL bRTL, FX_BOOL bVertical)
-{
- FX_DWORD dwTemp = (dwProps & 0xFF800000);
- if (bRTL && dwTemp < 0xFF800000) {
- wch = gs_FX_TextLayout_BidiMirror[dwTemp >> 23];
- dwProps = gs_FX_TextLayout_CodeProperties[(FX_WORD)wch];
- }
- if (bVertical) {
- dwTemp = (dwProps & 0x007E0000);
- if (dwTemp < 0x007E0000) {
- wch = gs_FX_TextLayout_VerticalMirror[dwTemp >> 17];
- }
+FX_WCHAR FX_GetMirrorChar(FX_WCHAR wch,
+ FX_DWORD dwProps,
+ FX_BOOL bRTL,
+ FX_BOOL bVertical) {
+ FX_DWORD dwTemp = (dwProps & 0xFF800000);
+ if (bRTL && dwTemp < 0xFF800000) {
+ wch = gs_FX_TextLayout_BidiMirror[dwTemp >> 23];
+ dwProps = gs_FX_TextLayout_CodeProperties[(FX_WORD)wch];
+ }
+ if (bVertical) {
+ dwTemp = (dwProps & 0x007E0000);
+ if (dwTemp < 0x007E0000) {
+ wch = gs_FX_TextLayout_VerticalMirror[dwTemp >> 17];
}
- return wch;
+ }
+ return wch;
}
diff --git a/core/src/fxcrt/fx_xml_composer.cpp b/core/src/fxcrt/fx_xml_composer.cpp
index 97971aa841..ed233ff784 100644
--- a/core/src/fxcrt/fx_xml_composer.cpp
+++ b/core/src/fxcrt/fx_xml_composer.cpp
@@ -6,35 +6,36 @@
#include "../../include/fxcrt/fx_xml.h"
#include "xml_int.h"
-void FX_XML_SplitQualifiedName(const CFX_ByteStringC& bsFullName, CFX_ByteStringC &bsSpace, CFX_ByteStringC &bsName)
-{
- if (bsFullName.IsEmpty()) {
- return;
- }
- int32_t iStart = 0;
- for (; iStart < bsFullName.GetLength(); iStart ++) {
- if (bsFullName.GetAt(iStart) == ':') {
- break;
- }
- }
- if (iStart >= bsFullName.GetLength()) {
- bsName = bsFullName;
- } else {
- bsSpace = CFX_ByteStringC(bsFullName.GetCStr(), iStart);
- iStart ++;
- bsName = CFX_ByteStringC(bsFullName.GetCStr() + iStart, bsFullName.GetLength() - iStart);
+void FX_XML_SplitQualifiedName(const CFX_ByteStringC& bsFullName,
+ CFX_ByteStringC& bsSpace,
+ CFX_ByteStringC& bsName) {
+ if (bsFullName.IsEmpty()) {
+ return;
+ }
+ int32_t iStart = 0;
+ for (; iStart < bsFullName.GetLength(); iStart++) {
+ if (bsFullName.GetAt(iStart) == ':') {
+ break;
}
+ }
+ if (iStart >= bsFullName.GetLength()) {
+ bsName = bsFullName;
+ } else {
+ bsSpace = CFX_ByteStringC(bsFullName.GetCStr(), iStart);
+ iStart++;
+ bsName = CFX_ByteStringC(bsFullName.GetCStr() + iStart,
+ bsFullName.GetLength() - iStart);
+ }
}
-void CXML_Element::SetTag(const CFX_ByteStringC& qSpace, const CFX_ByteStringC& tagname)
-{
- m_QSpaceName = qSpace;
- m_TagName = tagname;
+void CXML_Element::SetTag(const CFX_ByteStringC& qSpace,
+ const CFX_ByteStringC& tagname) {
+ m_QSpaceName = qSpace;
+ m_TagName = tagname;
}
-void CXML_Element::SetTag(const CFX_ByteStringC& qTagName)
-{
- ASSERT(!qTagName.IsEmpty());
- CFX_ByteStringC bsSpace, bsName;
- FX_XML_SplitQualifiedName(qTagName, bsSpace, bsName);
- m_QSpaceName = bsSpace;
- m_TagName = bsName;
+void CXML_Element::SetTag(const CFX_ByteStringC& qTagName) {
+ ASSERT(!qTagName.IsEmpty());
+ CFX_ByteStringC bsSpace, bsName;
+ FX_XML_SplitQualifiedName(qTagName, bsSpace, bsName);
+ m_QSpaceName = bsSpace;
+ m_TagName = bsName;
}
diff --git a/core/src/fxcrt/fx_xml_parser.cpp b/core/src/fxcrt/fx_xml_parser.cpp
index dcf91d1a97..dc59ded2b7 100644
--- a/core/src/fxcrt/fx_xml_parser.cpp
+++ b/core/src/fxcrt/fx_xml_parser.cpp
@@ -6,840 +6,825 @@
#include "../../include/fxcrt/fx_xml.h"
#include "xml_int.h"
-CXML_Parser::~CXML_Parser()
-{
- if (m_bOwnedStream) {
- m_pDataAcc->Release();
- }
+CXML_Parser::~CXML_Parser() {
+ if (m_bOwnedStream) {
+ m_pDataAcc->Release();
+ }
}
-FX_BOOL CXML_Parser::Init(uint8_t* pBuffer, size_t size)
-{
- m_pDataAcc = new CXML_DataBufAcc(pBuffer, size);
- return Init(TRUE);
+FX_BOOL CXML_Parser::Init(uint8_t* pBuffer, size_t size) {
+ m_pDataAcc = new CXML_DataBufAcc(pBuffer, size);
+ return Init(TRUE);
}
-FX_BOOL CXML_Parser::Init(IFX_FileRead *pFileRead)
-{
- m_pDataAcc = new CXML_DataStmAcc(pFileRead);
- return Init(TRUE);
+FX_BOOL CXML_Parser::Init(IFX_FileRead* pFileRead) {
+ m_pDataAcc = new CXML_DataStmAcc(pFileRead);
+ return Init(TRUE);
}
-FX_BOOL CXML_Parser::Init(IFX_BufferRead *pBuffer)
-{
- if (!pBuffer) {
- return FALSE;
- }
- m_pDataAcc = pBuffer;
- return Init(FALSE);
-}
-FX_BOOL CXML_Parser::Init(FX_BOOL bOwndedStream)
-{
- m_bOwnedStream = bOwndedStream;
- m_nOffset = 0;
- return ReadNextBlock();
-}
-FX_BOOL CXML_Parser::ReadNextBlock()
-{
- if (!m_pDataAcc->ReadNextBlock()) {
- return FALSE;
- }
- m_pBuffer = m_pDataAcc->GetBlockBuffer();
- m_dwBufferSize = m_pDataAcc->GetBlockSize();
- m_nBufferOffset = m_pDataAcc->GetBlockOffset();
- m_dwIndex = 0;
- return m_dwBufferSize > 0;
-}
-FX_BOOL CXML_Parser::IsEOF()
-{
- if (!m_pDataAcc->IsEOF()) {
- return FALSE;
- }
- return m_dwIndex >= m_dwBufferSize;
-}
-#define FXCRTM_XML_CHARTYPE_Normal 0x00
-#define FXCRTM_XML_CHARTYPE_SpaceChar 0x01
-#define FXCRTM_XML_CHARTYPE_Letter 0x02
-#define FXCRTM_XML_CHARTYPE_Digital 0x04
-#define FXCRTM_XML_CHARTYPE_NameIntro 0x08
-#define FXCRTM_XML_CHARTYPE_NameChar 0x10
-#define FXCRTM_XML_CHARTYPE_HexDigital 0x20
-#define FXCRTM_XML_CHARTYPE_HexLowerLetter 0x40
-#define FXCRTM_XML_CHARTYPE_HexUpperLetter 0x60
-#define FXCRTM_XML_CHARTYPE_HexChar 0x60
+FX_BOOL CXML_Parser::Init(IFX_BufferRead* pBuffer) {
+ if (!pBuffer) {
+ return FALSE;
+ }
+ m_pDataAcc = pBuffer;
+ return Init(FALSE);
+}
+FX_BOOL CXML_Parser::Init(FX_BOOL bOwndedStream) {
+ m_bOwnedStream = bOwndedStream;
+ m_nOffset = 0;
+ return ReadNextBlock();
+}
+FX_BOOL CXML_Parser::ReadNextBlock() {
+ if (!m_pDataAcc->ReadNextBlock()) {
+ return FALSE;
+ }
+ m_pBuffer = m_pDataAcc->GetBlockBuffer();
+ m_dwBufferSize = m_pDataAcc->GetBlockSize();
+ m_nBufferOffset = m_pDataAcc->GetBlockOffset();
+ m_dwIndex = 0;
+ return m_dwBufferSize > 0;
+}
+FX_BOOL CXML_Parser::IsEOF() {
+ if (!m_pDataAcc->IsEOF()) {
+ return FALSE;
+ }
+ return m_dwIndex >= m_dwBufferSize;
+}
+#define FXCRTM_XML_CHARTYPE_Normal 0x00
+#define FXCRTM_XML_CHARTYPE_SpaceChar 0x01
+#define FXCRTM_XML_CHARTYPE_Letter 0x02
+#define FXCRTM_XML_CHARTYPE_Digital 0x04
+#define FXCRTM_XML_CHARTYPE_NameIntro 0x08
+#define FXCRTM_XML_CHARTYPE_NameChar 0x10
+#define FXCRTM_XML_CHARTYPE_HexDigital 0x20
+#define FXCRTM_XML_CHARTYPE_HexLowerLetter 0x40
+#define FXCRTM_XML_CHARTYPE_HexUpperLetter 0x60
+#define FXCRTM_XML_CHARTYPE_HexChar 0x60
uint8_t g_FXCRT_XML_ByteTypes[256] = {
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x00,
- 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x7A, 0x7A, 0x7A, 0x7A, 0x7A, 0x7A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A,
- 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x18,
- 0x00, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A,
- 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A,
- 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A,
- 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A,
- 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A,
- 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A,
- 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A,
- 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A,
- 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x00,
+ 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x08, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7A, 0x7A, 0x7A, 0x7A, 0x7A, 0x7A, 0x1A,
+ 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A,
+ 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x18,
+ 0x00, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A,
+ 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A,
+ 0x1A, 0x1A, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x1A, 0x1A, 0x1A,
+ 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A,
+ 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A,
+ 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A,
+ 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A,
+ 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A,
+ 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A,
+ 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A,
+ 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A,
+ 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A,
+ 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A,
+ 0x1A, 0x1A, 0x01, 0x01,
};
-FX_BOOL g_FXCRT_XML_IsWhiteSpace(uint8_t ch)
-{
- return (g_FXCRT_XML_ByteTypes[ch] & FXCRTM_XML_CHARTYPE_SpaceChar) != 0;
+FX_BOOL g_FXCRT_XML_IsWhiteSpace(uint8_t ch) {
+ return (g_FXCRT_XML_ByteTypes[ch] & FXCRTM_XML_CHARTYPE_SpaceChar) != 0;
}
-FX_BOOL g_FXCRT_XML_IsLetter(uint8_t ch)
-{
- return (g_FXCRT_XML_ByteTypes[ch] & FXCRTM_XML_CHARTYPE_Letter) != 0;
+FX_BOOL g_FXCRT_XML_IsLetter(uint8_t ch) {
+ return (g_FXCRT_XML_ByteTypes[ch] & FXCRTM_XML_CHARTYPE_Letter) != 0;
}
-FX_BOOL g_FXCRT_XML_IsDigital(uint8_t ch)
-{
- return (g_FXCRT_XML_ByteTypes[ch] & FXCRTM_XML_CHARTYPE_Digital) != 0;
+FX_BOOL g_FXCRT_XML_IsDigital(uint8_t ch) {
+ return (g_FXCRT_XML_ByteTypes[ch] & FXCRTM_XML_CHARTYPE_Digital) != 0;
}
-FX_BOOL g_FXCRT_XML_IsNameIntro(uint8_t ch)
-{
- return (g_FXCRT_XML_ByteTypes[ch] & FXCRTM_XML_CHARTYPE_NameIntro) != 0;
+FX_BOOL g_FXCRT_XML_IsNameIntro(uint8_t ch) {
+ return (g_FXCRT_XML_ByteTypes[ch] & FXCRTM_XML_CHARTYPE_NameIntro) != 0;
}
-FX_BOOL g_FXCRT_XML_IsNameChar(uint8_t ch)
-{
- return (g_FXCRT_XML_ByteTypes[ch] & FXCRTM_XML_CHARTYPE_NameChar) != 0;
+FX_BOOL g_FXCRT_XML_IsNameChar(uint8_t ch) {
+ return (g_FXCRT_XML_ByteTypes[ch] & FXCRTM_XML_CHARTYPE_NameChar) != 0;
}
-FX_BOOL g_FXCRT_XML_IsHexChar(uint8_t ch)
-{
- return (g_FXCRT_XML_ByteTypes[ch] & FXCRTM_XML_CHARTYPE_HexChar) != 0;
+FX_BOOL g_FXCRT_XML_IsHexChar(uint8_t ch) {
+ return (g_FXCRT_XML_ByteTypes[ch] & FXCRTM_XML_CHARTYPE_HexChar) != 0;
}
-void CXML_Parser::SkipWhiteSpaces()
-{
- m_nOffset = m_nBufferOffset + (FX_FILESIZE)m_dwIndex;
- if (IsEOF()) {
- return;
+void CXML_Parser::SkipWhiteSpaces() {
+ m_nOffset = m_nBufferOffset + (FX_FILESIZE)m_dwIndex;
+ if (IsEOF()) {
+ return;
+ }
+ do {
+ while (m_dwIndex < m_dwBufferSize &&
+ g_FXCRT_XML_IsWhiteSpace(m_pBuffer[m_dwIndex])) {
+ m_dwIndex++;
}
- do {
- while (m_dwIndex < m_dwBufferSize && g_FXCRT_XML_IsWhiteSpace(m_pBuffer[m_dwIndex])) {
- m_dwIndex ++;
- }
- m_nOffset = m_nBufferOffset + (FX_FILESIZE)m_dwIndex;
- if (m_dwIndex < m_dwBufferSize || IsEOF()) {
- break;
- }
- } while (ReadNextBlock());
-}
-void CXML_Parser::GetName(CFX_ByteString &space, CFX_ByteString &name)
-{
m_nOffset = m_nBufferOffset + (FX_FILESIZE)m_dwIndex;
- if (IsEOF()) {
- return;
+ if (m_dwIndex < m_dwBufferSize || IsEOF()) {
+ break;
+ }
+ } while (ReadNextBlock());
+}
+void CXML_Parser::GetName(CFX_ByteString& space, CFX_ByteString& name) {
+ m_nOffset = m_nBufferOffset + (FX_FILESIZE)m_dwIndex;
+ if (IsEOF()) {
+ return;
+ }
+ CFX_ByteTextBuf buf;
+ uint8_t ch;
+ do {
+ while (m_dwIndex < m_dwBufferSize) {
+ ch = m_pBuffer[m_dwIndex];
+ if (ch == ':') {
+ space = buf.GetByteString();
+ buf.Clear();
+ } else if (g_FXCRT_XML_IsNameChar(ch)) {
+ buf.AppendChar(ch);
+ } else {
+ break;
+ }
+ m_dwIndex++;
}
- CFX_ByteTextBuf buf;
- uint8_t ch;
- do {
- while (m_dwIndex < m_dwBufferSize) {
- ch = m_pBuffer[m_dwIndex];
- if (ch == ':') {
- space = buf.GetByteString();
- buf.Clear();
- } else if (g_FXCRT_XML_IsNameChar(ch)) {
- buf.AppendChar(ch);
- } else {
- break;
- }
- m_dwIndex ++;
- }
- m_nOffset = m_nBufferOffset + (FX_FILESIZE)m_dwIndex;
- if (m_dwIndex < m_dwBufferSize || IsEOF()) {
- break;
- }
- } while (ReadNextBlock());
- name = buf.GetByteString();
-}
-void CXML_Parser::SkipLiterals(const CFX_ByteStringC& str)
-{
m_nOffset = m_nBufferOffset + (FX_FILESIZE)m_dwIndex;
- if (IsEOF()) {
- return;
- }
- int32_t i = 0, iLen = str.GetLength();
- do {
- while (m_dwIndex < m_dwBufferSize) {
- if (str.GetAt(i) != m_pBuffer[m_dwIndex ++]) {
- i = 0;
- } else {
- i ++;
- if (i == iLen) {
- break;
- }
- }
- }
- m_nOffset = m_nBufferOffset + (FX_FILESIZE)m_dwIndex;
+ if (m_dwIndex < m_dwBufferSize || IsEOF()) {
+ break;
+ }
+ } while (ReadNextBlock());
+ name = buf.GetByteString();
+}
+void CXML_Parser::SkipLiterals(const CFX_ByteStringC& str) {
+ m_nOffset = m_nBufferOffset + (FX_FILESIZE)m_dwIndex;
+ if (IsEOF()) {
+ return;
+ }
+ int32_t i = 0, iLen = str.GetLength();
+ do {
+ while (m_dwIndex < m_dwBufferSize) {
+ if (str.GetAt(i) != m_pBuffer[m_dwIndex++]) {
+ i = 0;
+ } else {
+ i++;
if (i == iLen) {
- return;
+ break;
}
- if (m_dwIndex < m_dwBufferSize || IsEOF()) {
- break;
- }
- } while (ReadNextBlock());
- while (!m_pDataAcc->IsEOF()) {
- ReadNextBlock();
- m_nOffset = m_nBufferOffset + (FX_FILESIZE)m_dwBufferSize;
+ }
}
- m_dwIndex = m_dwBufferSize;
-}
-FX_DWORD CXML_Parser::GetCharRef()
-{
m_nOffset = m_nBufferOffset + (FX_FILESIZE)m_dwIndex;
- if (IsEOF()) {
- return 0;
- }
- uint8_t ch;
- int32_t iState = 0;
- CFX_ByteTextBuf buf;
- FX_DWORD code = 0;
- do {
- while (m_dwIndex < m_dwBufferSize) {
- ch = m_pBuffer[m_dwIndex];
- switch (iState) {
- case 0:
- if (ch == '#') {
- m_dwIndex ++;
- iState = 2;
- break;
- }
- iState = 1;
- case 1:
- m_dwIndex ++;
- if (ch == ';') {
- CFX_ByteStringC ref = buf.GetByteString();
- if (ref == FX_BSTRC("gt")) {
- code = '>';
- } else if (ref == FX_BSTRC("lt")) {
- code = '<';
- } else if (ref == FX_BSTRC("amp")) {
- code = '&';
- } else if (ref == FX_BSTRC("apos")) {
- code = '\'';
- } else if (ref == FX_BSTRC("quot")) {
- code = '"';
- }
- iState = 10;
- break;
- }
- buf.AppendByte(ch);
- break;
- case 2:
- if (ch == 'x') {
- m_dwIndex ++;
- iState = 4;
- break;
- }
- iState = 3;
- case 3:
- m_dwIndex ++;
- if (ch == ';') {
- iState = 10;
- break;
- }
- if (g_FXCRT_XML_IsDigital(ch)) {
- code = code * 10 + ch - '0';
- }
- break;
- case 4:
- m_dwIndex ++;
- if (ch == ';') {
- iState = 10;
- break;
- }
- uint8_t nHex = g_FXCRT_XML_ByteTypes[ch] & FXCRTM_XML_CHARTYPE_HexChar;
- if (nHex) {
- if (nHex == FXCRTM_XML_CHARTYPE_HexDigital) {
- code = (code << 4) + ch - '0';
- } else if (nHex == FXCRTM_XML_CHARTYPE_HexLowerLetter) {
- code = (code << 4) + ch - 87;
- } else {
- code = (code << 4) + ch - 55;
- }
- }
- break;
- }
- if (iState == 10) {
- break;
- }
- }
- m_nOffset = m_nBufferOffset + (FX_FILESIZE)m_dwIndex;
- if (iState == 10 || m_dwIndex < m_dwBufferSize || IsEOF()) {
+ if (i == iLen) {
+ return;
+ }
+ if (m_dwIndex < m_dwBufferSize || IsEOF()) {
+ break;
+ }
+ } while (ReadNextBlock());
+ while (!m_pDataAcc->IsEOF()) {
+ ReadNextBlock();
+ m_nOffset = m_nBufferOffset + (FX_FILESIZE)m_dwBufferSize;
+ }
+ m_dwIndex = m_dwBufferSize;
+}
+FX_DWORD CXML_Parser::GetCharRef() {
+ m_nOffset = m_nBufferOffset + (FX_FILESIZE)m_dwIndex;
+ if (IsEOF()) {
+ return 0;
+ }
+ uint8_t ch;
+ int32_t iState = 0;
+ CFX_ByteTextBuf buf;
+ FX_DWORD code = 0;
+ do {
+ while (m_dwIndex < m_dwBufferSize) {
+ ch = m_pBuffer[m_dwIndex];
+ switch (iState) {
+ case 0:
+ if (ch == '#') {
+ m_dwIndex++;
+ iState = 2;
break;
- }
- } while (ReadNextBlock());
- return code;
-}
-void CXML_Parser::GetAttrValue(CFX_WideString &value)
-{
- m_nOffset = m_nBufferOffset + (FX_FILESIZE)m_dwIndex;
- if (IsEOF()) {
- return;
- }
- CFX_UTF8Decoder decoder;
- uint8_t mark = 0, ch = 0;
- do {
- while (m_dwIndex < m_dwBufferSize) {
- ch = m_pBuffer[m_dwIndex];
- if (mark == 0) {
- if (ch != '\'' && ch != '"') {
- return;
- }
- mark = ch;
- m_dwIndex ++;
- ch = 0;
- continue;
- }
- m_dwIndex ++;
- if (ch == mark) {
- break;
+ }
+ iState = 1;
+ case 1:
+ m_dwIndex++;
+ if (ch == ';') {
+ CFX_ByteStringC ref = buf.GetByteString();
+ if (ref == FX_BSTRC("gt")) {
+ code = '>';
+ } else if (ref == FX_BSTRC("lt")) {
+ code = '<';
+ } else if (ref == FX_BSTRC("amp")) {
+ code = '&';
+ } else if (ref == FX_BSTRC("apos")) {
+ code = '\'';
+ } else if (ref == FX_BSTRC("quot")) {
+ code = '"';
}
- if (ch == '&') {
- decoder.AppendChar(GetCharRef());
- if (IsEOF()) {
- value = decoder.GetResult();
- return;
- }
+ iState = 10;
+ break;
+ }
+ buf.AppendByte(ch);
+ break;
+ case 2:
+ if (ch == 'x') {
+ m_dwIndex++;
+ iState = 4;
+ break;
+ }
+ iState = 3;
+ case 3:
+ m_dwIndex++;
+ if (ch == ';') {
+ iState = 10;
+ break;
+ }
+ if (g_FXCRT_XML_IsDigital(ch)) {
+ code = code * 10 + ch - '0';
+ }
+ break;
+ case 4:
+ m_dwIndex++;
+ if (ch == ';') {
+ iState = 10;
+ break;
+ }
+ uint8_t nHex =
+ g_FXCRT_XML_ByteTypes[ch] & FXCRTM_XML_CHARTYPE_HexChar;
+ if (nHex) {
+ if (nHex == FXCRTM_XML_CHARTYPE_HexDigital) {
+ code = (code << 4) + ch - '0';
+ } else if (nHex == FXCRTM_XML_CHARTYPE_HexLowerLetter) {
+ code = (code << 4) + ch - 87;
} else {
- decoder.Input(ch);
+ code = (code << 4) + ch - 55;
}
+ }
+ break;
+ }
+ if (iState == 10) {
+ break;
+ }
+ }
+ m_nOffset = m_nBufferOffset + (FX_FILESIZE)m_dwIndex;
+ if (iState == 10 || m_dwIndex < m_dwBufferSize || IsEOF()) {
+ break;
+ }
+ } while (ReadNextBlock());
+ return code;
+}
+void CXML_Parser::GetAttrValue(CFX_WideString& value) {
+ m_nOffset = m_nBufferOffset + (FX_FILESIZE)m_dwIndex;
+ if (IsEOF()) {
+ return;
+ }
+ CFX_UTF8Decoder decoder;
+ uint8_t mark = 0, ch = 0;
+ do {
+ while (m_dwIndex < m_dwBufferSize) {
+ ch = m_pBuffer[m_dwIndex];
+ if (mark == 0) {
+ if (ch != '\'' && ch != '"') {
+ return;
}
- m_nOffset = m_nBufferOffset + (FX_FILESIZE)m_dwIndex;
- if (ch == mark || m_dwIndex < m_dwBufferSize || IsEOF()) {
- break;
+ mark = ch;
+ m_dwIndex++;
+ ch = 0;
+ continue;
+ }
+ m_dwIndex++;
+ if (ch == mark) {
+ break;
+ }
+ if (ch == '&') {
+ decoder.AppendChar(GetCharRef());
+ if (IsEOF()) {
+ value = decoder.GetResult();
+ return;
}
- } while (ReadNextBlock());
- value = decoder.GetResult();
-}
-void CXML_Parser::GetTagName(CFX_ByteString &space, CFX_ByteString &name, FX_BOOL &bEndTag, FX_BOOL bStartTag)
-{
- m_nOffset = m_nBufferOffset + (FX_FILESIZE)m_dwIndex;
- if (IsEOF()) {
- return;
+ } else {
+ decoder.Input(ch);
+ }
}
- bEndTag = FALSE;
- uint8_t ch;
- int32_t iState = bStartTag ? 1 : 0;
- do {
- while (m_dwIndex < m_dwBufferSize) {
- ch = m_pBuffer[m_dwIndex];
- switch (iState) {
- case 0:
- m_dwIndex ++;
- if (ch != '<') {
- break;
- }
- iState = 1;
- break;
- case 1:
- if (ch == '?') {
- m_dwIndex ++;
- SkipLiterals(FX_BSTRC("?>"));
- iState = 0;
- break;
- } else if (ch == '!') {
- m_dwIndex ++;
- SkipLiterals(FX_BSTRC("-->"));
- iState = 0;
- break;
- }
- if (ch == '/') {
- m_dwIndex ++;
- GetName(space, name);
- bEndTag = TRUE;
- } else {
- GetName(space, name);
- bEndTag = FALSE;
- }
- return;
- }
- }
- m_nOffset = m_nBufferOffset + (FX_FILESIZE)m_dwIndex;
- if (m_dwIndex < m_dwBufferSize || IsEOF()) {
+ m_nOffset = m_nBufferOffset + (FX_FILESIZE)m_dwIndex;
+ if (ch == mark || m_dwIndex < m_dwBufferSize || IsEOF()) {
+ break;
+ }
+ } while (ReadNextBlock());
+ value = decoder.GetResult();
+}
+void CXML_Parser::GetTagName(CFX_ByteString& space,
+ CFX_ByteString& name,
+ FX_BOOL& bEndTag,
+ FX_BOOL bStartTag) {
+ m_nOffset = m_nBufferOffset + (FX_FILESIZE)m_dwIndex;
+ if (IsEOF()) {
+ return;
+ }
+ bEndTag = FALSE;
+ uint8_t ch;
+ int32_t iState = bStartTag ? 1 : 0;
+ do {
+ while (m_dwIndex < m_dwBufferSize) {
+ ch = m_pBuffer[m_dwIndex];
+ switch (iState) {
+ case 0:
+ m_dwIndex++;
+ if (ch != '<') {
break;
- }
- } while (ReadNextBlock());
-}
-CXML_Element* CXML_Parser::ParseElement(CXML_Element* pParent, FX_BOOL bStartTag)
-{
+ }
+ iState = 1;
+ break;
+ case 1:
+ if (ch == '?') {
+ m_dwIndex++;
+ SkipLiterals(FX_BSTRC("?>"));
+ iState = 0;
+ break;
+ } else if (ch == '!') {
+ m_dwIndex++;
+ SkipLiterals(FX_BSTRC("-->"));
+ iState = 0;
+ break;
+ }
+ if (ch == '/') {
+ m_dwIndex++;
+ GetName(space, name);
+ bEndTag = TRUE;
+ } else {
+ GetName(space, name);
+ bEndTag = FALSE;
+ }
+ return;
+ }
+ }
m_nOffset = m_nBufferOffset + (FX_FILESIZE)m_dwIndex;
- if (IsEOF()) {
- return NULL;
+ if (m_dwIndex < m_dwBufferSize || IsEOF()) {
+ break;
}
- CFX_ByteString tag_name, tag_space;
- FX_BOOL bEndTag;
- GetTagName(tag_space, tag_name, bEndTag, bStartTag);
- if (tag_name.IsEmpty() || bEndTag) {
- return NULL;
+ } while (ReadNextBlock());
+}
+CXML_Element* CXML_Parser::ParseElement(CXML_Element* pParent,
+ FX_BOOL bStartTag) {
+ m_nOffset = m_nBufferOffset + (FX_FILESIZE)m_dwIndex;
+ if (IsEOF()) {
+ return NULL;
+ }
+ CFX_ByteString tag_name, tag_space;
+ FX_BOOL bEndTag;
+ GetTagName(tag_space, tag_name, bEndTag, bStartTag);
+ if (tag_name.IsEmpty() || bEndTag) {
+ return NULL;
+ }
+ CXML_Element* pElement = new CXML_Element;
+ pElement->m_pParent = pParent;
+ pElement->SetTag(tag_space, tag_name);
+ do {
+ CFX_ByteString attr_space, attr_name;
+ while (m_dwIndex < m_dwBufferSize) {
+ SkipWhiteSpaces();
+ if (IsEOF()) {
+ break;
+ }
+ if (!g_FXCRT_XML_IsNameIntro(m_pBuffer[m_dwIndex])) {
+ break;
+ }
+ GetName(attr_space, attr_name);
+ SkipWhiteSpaces();
+ if (IsEOF()) {
+ break;
+ }
+ if (m_pBuffer[m_dwIndex] != '=') {
+ break;
+ }
+ m_dwIndex++;
+ SkipWhiteSpaces();
+ if (IsEOF()) {
+ break;
+ }
+ CFX_WideString attr_value;
+ GetAttrValue(attr_value);
+ pElement->m_AttrMap.SetAt(attr_space, attr_name, attr_value);
}
- CXML_Element* pElement = new CXML_Element;
- pElement->m_pParent = pParent;
- pElement->SetTag(tag_space, tag_name);
- do {
- CFX_ByteString attr_space, attr_name;
- while (m_dwIndex < m_dwBufferSize) {
+ m_nOffset = m_nBufferOffset + (FX_FILESIZE)m_dwIndex;
+ if (m_dwIndex < m_dwBufferSize || IsEOF()) {
+ break;
+ }
+ } while (ReadNextBlock());
+ SkipWhiteSpaces();
+ if (IsEOF()) {
+ return pElement;
+ }
+ uint8_t ch = m_pBuffer[m_dwIndex++];
+ if (ch == '/') {
+ m_dwIndex++;
+ m_nOffset = m_nBufferOffset + (FX_FILESIZE)m_dwIndex;
+ return pElement;
+ }
+ if (ch != '>') {
+ m_nOffset = m_nBufferOffset + (FX_FILESIZE)m_dwIndex;
+ delete pElement;
+ return NULL;
+ }
+ SkipWhiteSpaces();
+ if (IsEOF()) {
+ return pElement;
+ }
+ CFX_UTF8Decoder decoder;
+ CFX_WideTextBuf content;
+ FX_BOOL bCDATA = FALSE;
+ int32_t iState = 0;
+ do {
+ while (m_dwIndex < m_dwBufferSize) {
+ ch = m_pBuffer[m_dwIndex++];
+ switch (iState) {
+ case 0:
+ if (ch == '<') {
+ iState = 1;
+ } else if (ch == '&') {
+ decoder.ClearStatus();
+ decoder.AppendChar(GetCharRef());
+ } else {
+ decoder.Input(ch);
+ }
+ break;
+ case 1:
+ if (ch == '!') {
+ iState = 2;
+ } else if (ch == '?') {
+ SkipLiterals(FX_BSTRC("?>"));
SkipWhiteSpaces();
- if (IsEOF()) {
- break;
- }
- if (!g_FXCRT_XML_IsNameIntro(m_pBuffer[m_dwIndex])) {
- break;
- }
- GetName(attr_space, attr_name);
+ iState = 0;
+ } else if (ch == '/') {
+ CFX_ByteString space, name;
+ GetName(space, name);
SkipWhiteSpaces();
- if (IsEOF()) {
- break;
+ m_dwIndex++;
+ iState = 10;
+ } else {
+ content << decoder.GetResult();
+ CFX_WideString dataStr = content.GetWideString();
+ if (!bCDATA && !m_bSaveSpaceChars) {
+ dataStr.TrimRight(L" \t\r\n");
}
- if (m_pBuffer[m_dwIndex] != '=') {
- break;
+ InsertContentSegment(bCDATA, dataStr, pElement);
+ content.Clear();
+ decoder.Clear();
+ bCDATA = FALSE;
+ iState = 0;
+ m_dwIndex--;
+ CXML_Element* pSubElement = ParseElement(pElement, TRUE);
+ if (pSubElement == NULL) {
+ break;
}
- m_dwIndex ++;
+ pSubElement->m_pParent = pElement;
+ pElement->m_Children.Add((void*)CXML_Element::Element);
+ pElement->m_Children.Add(pSubElement);
SkipWhiteSpaces();
- if (IsEOF()) {
- break;
- }
- CFX_WideString attr_value;
- GetAttrValue(attr_value);
- pElement->m_AttrMap.SetAt(attr_space, attr_name, attr_value);
- }
- m_nOffset = m_nBufferOffset + (FX_FILESIZE)m_dwIndex;
- if (m_dwIndex < m_dwBufferSize || IsEOF()) {
- break;
- }
- } while (ReadNextBlock());
- SkipWhiteSpaces();
- if (IsEOF()) {
- return pElement;
- }
- uint8_t ch = m_pBuffer[m_dwIndex ++];
- if (ch == '/') {
- m_dwIndex ++;
- m_nOffset = m_nBufferOffset + (FX_FILESIZE)m_dwIndex;
- return pElement;
+ }
+ break;
+ case 2:
+ if (ch == '[') {
+ SkipLiterals(FX_BSTRC("]]>"));
+ } else if (ch == '-') {
+ m_dwIndex++;
+ SkipLiterals(FX_BSTRC("-->"));
+ } else {
+ SkipLiterals(FX_BSTRC(">"));
+ }
+ decoder.Clear();
+ SkipWhiteSpaces();
+ iState = 0;
+ break;
+ }
+ if (iState == 10) {
+ break;
+ }
}
- if (ch != '>') {
- m_nOffset = m_nBufferOffset + (FX_FILESIZE)m_dwIndex;
- delete pElement;
- return NULL;
- }
- SkipWhiteSpaces();
- if (IsEOF()) {
- return pElement;
- }
- CFX_UTF8Decoder decoder;
- CFX_WideTextBuf content;
- FX_BOOL bCDATA = FALSE;
- int32_t iState = 0;
- do {
- while (m_dwIndex < m_dwBufferSize) {
- ch = m_pBuffer[m_dwIndex ++];
- switch (iState) {
- case 0:
- if (ch == '<') {
- iState = 1;
- } else if (ch == '&') {
- decoder.ClearStatus();
- decoder.AppendChar(GetCharRef());
- } else {
- decoder.Input(ch);
- }
- break;
- case 1:
- if (ch == '!') {
- iState = 2;
- } else if (ch == '?') {
- SkipLiterals(FX_BSTRC("?>"));
- SkipWhiteSpaces();
- iState = 0;
- } else if (ch == '/') {
- CFX_ByteString space, name;
- GetName(space, name);
- SkipWhiteSpaces();
- m_dwIndex ++;
- iState = 10;
- } else {
- content << decoder.GetResult();
- CFX_WideString dataStr = content.GetWideString();
- if (!bCDATA && !m_bSaveSpaceChars) {
- dataStr.TrimRight(L" \t\r\n");
- }
- InsertContentSegment(bCDATA, dataStr, pElement);
- content.Clear();
- decoder.Clear();
- bCDATA = FALSE;
- iState = 0;
- m_dwIndex --;
- CXML_Element* pSubElement = ParseElement(pElement, TRUE);
- if (pSubElement == NULL) {
- break;
- }
- pSubElement->m_pParent = pElement;
- pElement->m_Children.Add((void*)CXML_Element::Element);
- pElement->m_Children.Add(pSubElement);
- SkipWhiteSpaces();
- }
- break;
- case 2:
- if (ch == '[') {
- SkipLiterals(FX_BSTRC("]]>"));
- } else if (ch == '-') {
- m_dwIndex ++;
- SkipLiterals(FX_BSTRC("-->"));
- } else {
- SkipLiterals(FX_BSTRC(">"));
- }
- decoder.Clear();
- SkipWhiteSpaces();
- iState = 0;
- break;
- }
- if (iState == 10) {
- break;
- }
- }
- m_nOffset = m_nBufferOffset + (FX_FILESIZE)m_dwIndex;
- if (iState == 10 || m_dwIndex < m_dwBufferSize || IsEOF()) {
- break;
- }
- } while (ReadNextBlock());
- content << decoder.GetResult();
- CFX_WideString dataStr = content.GetWideString();
- if (!m_bSaveSpaceChars) {
- dataStr.TrimRight(L" \t\r\n");
- }
- InsertContentSegment(bCDATA, dataStr, pElement);
- content.Clear();
- decoder.Clear();
- bCDATA = FALSE;
- return pElement;
-}
-void CXML_Parser::InsertContentSegment(FX_BOOL bCDATA, const CFX_WideStringC& content, CXML_Element* pElement)
-{
- if (content.IsEmpty()) {
- return;
- }
- CXML_Content* pContent = new CXML_Content;
- pContent->Set(bCDATA, content);
- pElement->m_Children.Add((void*)CXML_Element::Content);
- pElement->m_Children.Add(pContent);
-}
-static CXML_Element* XML_ContinueParse(CXML_Parser &parser, FX_BOOL bSaveSpaceChars, FX_FILESIZE* pParsedSize)
-{
- parser.m_bSaveSpaceChars = bSaveSpaceChars;
- CXML_Element* pElement = parser.ParseElement(NULL, FALSE);
- if (pParsedSize) {
- *pParsedSize = parser.m_nOffset;
- }
- return pElement;
-}
-CXML_Element* CXML_Element::Parse(const void* pBuffer, size_t size, FX_BOOL bSaveSpaceChars, FX_FILESIZE* pParsedSize)
-{
- CXML_Parser parser;
- if (!parser.Init((uint8_t*)pBuffer, size)) {
- return NULL;
- }
- return XML_ContinueParse(parser, bSaveSpaceChars, pParsedSize);
-}
-CXML_Element* CXML_Element::Parse(IFX_FileRead *pFile, FX_BOOL bSaveSpaceChars, FX_FILESIZE* pParsedSize)
-{
- CXML_Parser parser;
- if (!parser.Init(pFile)) {
- return NULL;
- }
- return XML_ContinueParse(parser, bSaveSpaceChars, pParsedSize);
+ m_nOffset = m_nBufferOffset + (FX_FILESIZE)m_dwIndex;
+ if (iState == 10 || m_dwIndex < m_dwBufferSize || IsEOF()) {
+ break;
+ }
+ } while (ReadNextBlock());
+ content << decoder.GetResult();
+ CFX_WideString dataStr = content.GetWideString();
+ if (!m_bSaveSpaceChars) {
+ dataStr.TrimRight(L" \t\r\n");
+ }
+ InsertContentSegment(bCDATA, dataStr, pElement);
+ content.Clear();
+ decoder.Clear();
+ bCDATA = FALSE;
+ return pElement;
+}
+void CXML_Parser::InsertContentSegment(FX_BOOL bCDATA,
+ const CFX_WideStringC& content,
+ CXML_Element* pElement) {
+ if (content.IsEmpty()) {
+ return;
+ }
+ CXML_Content* pContent = new CXML_Content;
+ pContent->Set(bCDATA, content);
+ pElement->m_Children.Add((void*)CXML_Element::Content);
+ pElement->m_Children.Add(pContent);
+}
+static CXML_Element* XML_ContinueParse(CXML_Parser& parser,
+ FX_BOOL bSaveSpaceChars,
+ FX_FILESIZE* pParsedSize) {
+ parser.m_bSaveSpaceChars = bSaveSpaceChars;
+ CXML_Element* pElement = parser.ParseElement(NULL, FALSE);
+ if (pParsedSize) {
+ *pParsedSize = parser.m_nOffset;
+ }
+ return pElement;
+}
+CXML_Element* CXML_Element::Parse(const void* pBuffer,
+ size_t size,
+ FX_BOOL bSaveSpaceChars,
+ FX_FILESIZE* pParsedSize) {
+ CXML_Parser parser;
+ if (!parser.Init((uint8_t*)pBuffer, size)) {
+ return NULL;
+ }
+ return XML_ContinueParse(parser, bSaveSpaceChars, pParsedSize);
+}
+CXML_Element* CXML_Element::Parse(IFX_FileRead* pFile,
+ FX_BOOL bSaveSpaceChars,
+ FX_FILESIZE* pParsedSize) {
+ CXML_Parser parser;
+ if (!parser.Init(pFile)) {
+ return NULL;
+ }
+ return XML_ContinueParse(parser, bSaveSpaceChars, pParsedSize);
+}
+CXML_Element* CXML_Element::Parse(IFX_BufferRead* pBuffer,
+ FX_BOOL bSaveSpaceChars,
+ FX_FILESIZE* pParsedSize) {
+ CXML_Parser parser;
+ if (!parser.Init(pBuffer)) {
+ return NULL;
+ }
+ return XML_ContinueParse(parser, bSaveSpaceChars, pParsedSize);
}
-CXML_Element* CXML_Element::Parse(IFX_BufferRead *pBuffer, FX_BOOL bSaveSpaceChars, FX_FILESIZE* pParsedSize)
-{
- CXML_Parser parser;
- if (!parser.Init(pBuffer)) {
- return NULL;
- }
- return XML_ContinueParse(parser, bSaveSpaceChars, pParsedSize);
-}
-CXML_Element::CXML_Element()
- : m_QSpaceName()
- , m_TagName()
- , m_AttrMap()
-{
-}
-CXML_Element::CXML_Element(const CFX_ByteStringC& qSpace, const CFX_ByteStringC& tagName)
- : m_QSpaceName()
- , m_TagName()
- , m_AttrMap()
-{
- m_QSpaceName = qSpace;
- m_TagName = tagName;
+CXML_Element::CXML_Element() : m_QSpaceName(), m_TagName(), m_AttrMap() {}
+CXML_Element::CXML_Element(const CFX_ByteStringC& qSpace,
+ const CFX_ByteStringC& tagName)
+ : m_QSpaceName(), m_TagName(), m_AttrMap() {
+ m_QSpaceName = qSpace;
+ m_TagName = tagName;
}
CXML_Element::CXML_Element(const CFX_ByteStringC& qTagName)
- : m_pParent(NULL)
- , m_QSpaceName()
- , m_TagName()
- , m_AttrMap()
-{
- SetTag(qTagName);
-}
-CXML_Element::~CXML_Element()
-{
- Empty();
-}
-void CXML_Element::Empty()
-{
- RemoveChildren();
-}
-void CXML_Element::RemoveChildren()
-{
- for (int i = 0; i < m_Children.GetSize(); i += 2) {
- ChildType type = (ChildType)(uintptr_t)m_Children.GetAt(i);
- if (type == Content) {
- CXML_Content* content = (CXML_Content*)m_Children.GetAt(i + 1);
- delete content;
- } else if (type == Element) {
- CXML_Element* child = (CXML_Element*)m_Children.GetAt(i + 1);
- child->RemoveChildren();
- delete child;
- }
- }
- m_Children.RemoveAll();
-}
-CFX_ByteString CXML_Element::GetTagName(FX_BOOL bQualified) const
-{
- if (!bQualified || m_QSpaceName.IsEmpty()) {
- return m_TagName;
- }
- CFX_ByteString bsTag = m_QSpaceName;
- bsTag += ":";
- bsTag += m_TagName;
- return bsTag;
-}
-CFX_ByteString CXML_Element::GetNamespace(FX_BOOL bQualified) const
-{
- if (bQualified) {
- return m_QSpaceName;
- }
- return GetNamespaceURI(m_QSpaceName);
-}
-CFX_ByteString CXML_Element::GetNamespaceURI(const CFX_ByteStringC& qName) const
-{
- const CFX_WideString* pwsSpace;
- const CXML_Element *pElement = this;
- do {
- if (qName.IsEmpty()) {
- pwsSpace = pElement->m_AttrMap.Lookup(FX_BSTRC(""), FX_BSTRC("xmlns"));
- } else {
- pwsSpace = pElement->m_AttrMap.Lookup(FX_BSTRC("xmlns"), qName);
- }
- if (pwsSpace) {
- break;
- }
- pElement = pElement->GetParent();
- } while(pElement);
- return pwsSpace ? FX_UTF8Encode(*pwsSpace) : CFX_ByteString();
-}
-void CXML_Element::GetAttrByIndex(int index, CFX_ByteString& space, CFX_ByteString& name, CFX_WideString& value) const
-{
- if (index < 0 || index >= m_AttrMap.GetSize()) {
- return;
- }
- CXML_AttrItem& item = m_AttrMap.GetAt(index);
- space = item.m_QSpaceName;
- name = item.m_AttrName;
- value = item.m_Value;
-}
-FX_BOOL CXML_Element::HasAttr(const CFX_ByteStringC& name) const
-{
- CFX_ByteStringC bsSpace, bsName;
- FX_XML_SplitQualifiedName(name, bsSpace, bsName);
- return m_AttrMap.Lookup(bsSpace, bsName) != NULL;
-}
-FX_BOOL CXML_Element::GetAttrValue(const CFX_ByteStringC& name, CFX_WideString& attribute) const
-{
- CFX_ByteStringC bsSpace, bsName;
- FX_XML_SplitQualifiedName(name, bsSpace, bsName);
- return GetAttrValue(bsSpace, bsName, attribute);
-}
-FX_BOOL CXML_Element::GetAttrValue(const CFX_ByteStringC& space, const CFX_ByteStringC& name, CFX_WideString& attribute) const
-{
- const CFX_WideString* pValue = m_AttrMap.Lookup(space, name);
- if (pValue) {
- attribute = *pValue;
- return TRUE;
- }
- return FALSE;
-}
-FX_BOOL CXML_Element::GetAttrInteger(const CFX_ByteStringC& name, int& attribute) const
-{
- CFX_ByteStringC bsSpace, bsName;
- FX_XML_SplitQualifiedName(name, bsSpace, bsName);
- const CFX_WideString* pwsValue = m_AttrMap.Lookup(bsSpace, bsName);
- if (pwsValue) {
- attribute = pwsValue->GetInteger();
- return TRUE;
- }
- return FALSE;
-}
-FX_BOOL CXML_Element::GetAttrInteger(const CFX_ByteStringC& space, const CFX_ByteStringC& name, int& attribute) const
-{
- const CFX_WideString* pwsValue = m_AttrMap.Lookup(space, name);
- if (pwsValue) {
- attribute = pwsValue->GetInteger();
- return TRUE;
- }
- return FALSE;
-}
-FX_BOOL CXML_Element::GetAttrFloat(const CFX_ByteStringC& name, FX_FLOAT& attribute) const
-{
- CFX_ByteStringC bsSpace, bsName;
- FX_XML_SplitQualifiedName(name, bsSpace, bsName);
- return GetAttrFloat(bsSpace, bsName, attribute);
-}
-FX_BOOL CXML_Element::GetAttrFloat(const CFX_ByteStringC& space, const CFX_ByteStringC& name, FX_FLOAT& attribute) const
-{
- const CFX_WideString* pValue = m_AttrMap.Lookup(space, name);
- if (pValue) {
- attribute = pValue->GetFloat();
- return TRUE;
- }
- return FALSE;
-}
-FX_DWORD CXML_Element::CountChildren() const
-{
- return m_Children.GetSize() / 2;
-}
-CXML_Element::ChildType CXML_Element::GetChildType(FX_DWORD index) const
-{
- index <<= 1;
- if (index >= (FX_DWORD)m_Children.GetSize()) {
- return Invalid;
- }
- return (ChildType)(uintptr_t)m_Children.GetAt(index);
-}
-CFX_WideString CXML_Element::GetContent(FX_DWORD index) const
-{
- index <<= 1;
- if (index >= (FX_DWORD)m_Children.GetSize() ||
- (ChildType)(uintptr_t)m_Children.GetAt(index) != Content) {
- return CFX_WideString();
- }
- CXML_Content* pContent = (CXML_Content*)m_Children.GetAt(index + 1);
- if (pContent) {
- return pContent->m_Content;
- }
+ : m_pParent(NULL), m_QSpaceName(), m_TagName(), m_AttrMap() {
+ SetTag(qTagName);
+}
+CXML_Element::~CXML_Element() {
+ Empty();
+}
+void CXML_Element::Empty() {
+ RemoveChildren();
+}
+void CXML_Element::RemoveChildren() {
+ for (int i = 0; i < m_Children.GetSize(); i += 2) {
+ ChildType type = (ChildType)(uintptr_t)m_Children.GetAt(i);
+ if (type == Content) {
+ CXML_Content* content = (CXML_Content*)m_Children.GetAt(i + 1);
+ delete content;
+ } else if (type == Element) {
+ CXML_Element* child = (CXML_Element*)m_Children.GetAt(i + 1);
+ child->RemoveChildren();
+ delete child;
+ }
+ }
+ m_Children.RemoveAll();
+}
+CFX_ByteString CXML_Element::GetTagName(FX_BOOL bQualified) const {
+ if (!bQualified || m_QSpaceName.IsEmpty()) {
+ return m_TagName;
+ }
+ CFX_ByteString bsTag = m_QSpaceName;
+ bsTag += ":";
+ bsTag += m_TagName;
+ return bsTag;
+}
+CFX_ByteString CXML_Element::GetNamespace(FX_BOOL bQualified) const {
+ if (bQualified) {
+ return m_QSpaceName;
+ }
+ return GetNamespaceURI(m_QSpaceName);
+}
+CFX_ByteString CXML_Element::GetNamespaceURI(
+ const CFX_ByteStringC& qName) const {
+ const CFX_WideString* pwsSpace;
+ const CXML_Element* pElement = this;
+ do {
+ if (qName.IsEmpty()) {
+ pwsSpace = pElement->m_AttrMap.Lookup(FX_BSTRC(""), FX_BSTRC("xmlns"));
+ } else {
+ pwsSpace = pElement->m_AttrMap.Lookup(FX_BSTRC("xmlns"), qName);
+ }
+ if (pwsSpace) {
+ break;
+ }
+ pElement = pElement->GetParent();
+ } while (pElement);
+ return pwsSpace ? FX_UTF8Encode(*pwsSpace) : CFX_ByteString();
+}
+void CXML_Element::GetAttrByIndex(int index,
+ CFX_ByteString& space,
+ CFX_ByteString& name,
+ CFX_WideString& value) const {
+ if (index < 0 || index >= m_AttrMap.GetSize()) {
+ return;
+ }
+ CXML_AttrItem& item = m_AttrMap.GetAt(index);
+ space = item.m_QSpaceName;
+ name = item.m_AttrName;
+ value = item.m_Value;
+}
+FX_BOOL CXML_Element::HasAttr(const CFX_ByteStringC& name) const {
+ CFX_ByteStringC bsSpace, bsName;
+ FX_XML_SplitQualifiedName(name, bsSpace, bsName);
+ return m_AttrMap.Lookup(bsSpace, bsName) != NULL;
+}
+FX_BOOL CXML_Element::GetAttrValue(const CFX_ByteStringC& name,
+ CFX_WideString& attribute) const {
+ CFX_ByteStringC bsSpace, bsName;
+ FX_XML_SplitQualifiedName(name, bsSpace, bsName);
+ return GetAttrValue(bsSpace, bsName, attribute);
+}
+FX_BOOL CXML_Element::GetAttrValue(const CFX_ByteStringC& space,
+ const CFX_ByteStringC& name,
+ CFX_WideString& attribute) const {
+ const CFX_WideString* pValue = m_AttrMap.Lookup(space, name);
+ if (pValue) {
+ attribute = *pValue;
+ return TRUE;
+ }
+ return FALSE;
+}
+FX_BOOL CXML_Element::GetAttrInteger(const CFX_ByteStringC& name,
+ int& attribute) const {
+ CFX_ByteStringC bsSpace, bsName;
+ FX_XML_SplitQualifiedName(name, bsSpace, bsName);
+ const CFX_WideString* pwsValue = m_AttrMap.Lookup(bsSpace, bsName);
+ if (pwsValue) {
+ attribute = pwsValue->GetInteger();
+ return TRUE;
+ }
+ return FALSE;
+}
+FX_BOOL CXML_Element::GetAttrInteger(const CFX_ByteStringC& space,
+ const CFX_ByteStringC& name,
+ int& attribute) const {
+ const CFX_WideString* pwsValue = m_AttrMap.Lookup(space, name);
+ if (pwsValue) {
+ attribute = pwsValue->GetInteger();
+ return TRUE;
+ }
+ return FALSE;
+}
+FX_BOOL CXML_Element::GetAttrFloat(const CFX_ByteStringC& name,
+ FX_FLOAT& attribute) const {
+ CFX_ByteStringC bsSpace, bsName;
+ FX_XML_SplitQualifiedName(name, bsSpace, bsName);
+ return GetAttrFloat(bsSpace, bsName, attribute);
+}
+FX_BOOL CXML_Element::GetAttrFloat(const CFX_ByteStringC& space,
+ const CFX_ByteStringC& name,
+ FX_FLOAT& attribute) const {
+ const CFX_WideString* pValue = m_AttrMap.Lookup(space, name);
+ if (pValue) {
+ attribute = pValue->GetFloat();
+ return TRUE;
+ }
+ return FALSE;
+}
+FX_DWORD CXML_Element::CountChildren() const {
+ return m_Children.GetSize() / 2;
+}
+CXML_Element::ChildType CXML_Element::GetChildType(FX_DWORD index) const {
+ index <<= 1;
+ if (index >= (FX_DWORD)m_Children.GetSize()) {
+ return Invalid;
+ }
+ return (ChildType)(uintptr_t)m_Children.GetAt(index);
+}
+CFX_WideString CXML_Element::GetContent(FX_DWORD index) const {
+ index <<= 1;
+ if (index >= (FX_DWORD)m_Children.GetSize() ||
+ (ChildType)(uintptr_t)m_Children.GetAt(index) != Content) {
return CFX_WideString();
-}
-CXML_Element* CXML_Element::GetElement(FX_DWORD index) const
-{
- index <<= 1;
- if (index >= (FX_DWORD)m_Children.GetSize() ||
- (ChildType)(uintptr_t)m_Children.GetAt(index) != Element) {
- return NULL;
- }
- return (CXML_Element*)m_Children.GetAt(index + 1);
-}
-FX_DWORD CXML_Element::CountElements(const CFX_ByteStringC& space, const CFX_ByteStringC& tag) const
-{
- int count = 0;
- for (int i = 0; i < m_Children.GetSize(); i += 2) {
- ChildType type = (ChildType)(uintptr_t)m_Children.GetAt(i);
- if (type != Element) {
- continue;
- }
- CXML_Element* pKid = (CXML_Element*)m_Children.GetAt(i + 1);
- if ((space.IsEmpty() || pKid->m_QSpaceName == space) && pKid->m_TagName == tag) {
- count ++;
- }
- }
- return count;
-}
-CXML_Element* CXML_Element::GetElement(const CFX_ByteStringC& space, const CFX_ByteStringC& tag, int index) const
-{
- if (index < 0) {
- return NULL;
- }
- for (int i = 0; i < m_Children.GetSize(); i += 2) {
- ChildType type = (ChildType)(uintptr_t)m_Children.GetAt(i);
- if (type != Element) {
- continue;
- }
- CXML_Element* pKid = (CXML_Element*)m_Children.GetAt(i + 1);
- if ((!space.IsEmpty() && pKid->m_QSpaceName != space) || pKid->m_TagName != tag) {
- continue;
- }
- if (index -- == 0) {
- return pKid;
- }
- }
+ }
+ CXML_Content* pContent = (CXML_Content*)m_Children.GetAt(index + 1);
+ if (pContent) {
+ return pContent->m_Content;
+ }
+ return CFX_WideString();
+}
+CXML_Element* CXML_Element::GetElement(FX_DWORD index) const {
+ index <<= 1;
+ if (index >= (FX_DWORD)m_Children.GetSize() ||
+ (ChildType)(uintptr_t)m_Children.GetAt(index) != Element) {
return NULL;
-}
-FX_DWORD CXML_Element::FindElement(CXML_Element *pChild) const
-{
- for (int i = 0; i < m_Children.GetSize(); i += 2) {
- if ((ChildType)(uintptr_t)m_Children.GetAt(i) == Element &&
- (CXML_Element*)m_Children.GetAt(i + 1) == pChild) {
- return (FX_DWORD)(i >> 1);
- }
- }
- return (FX_DWORD) - 1;
-}
-const CFX_WideString* CXML_AttrMap::Lookup(const CFX_ByteStringC& space, const CFX_ByteStringC& name) const
-{
- if (m_pMap == NULL) {
- return NULL;
- }
- for (int i = 0; i < m_pMap->GetSize(); i ++) {
- CXML_AttrItem& item = GetAt(i);
- if ((space.IsEmpty() || item.m_QSpaceName == space) && item.m_AttrName == name) {
- return &item.m_Value;
- }
- }
+ }
+ return (CXML_Element*)m_Children.GetAt(index + 1);
+}
+FX_DWORD CXML_Element::CountElements(const CFX_ByteStringC& space,
+ const CFX_ByteStringC& tag) const {
+ int count = 0;
+ for (int i = 0; i < m_Children.GetSize(); i += 2) {
+ ChildType type = (ChildType)(uintptr_t)m_Children.GetAt(i);
+ if (type != Element) {
+ continue;
+ }
+ CXML_Element* pKid = (CXML_Element*)m_Children.GetAt(i + 1);
+ if ((space.IsEmpty() || pKid->m_QSpaceName == space) &&
+ pKid->m_TagName == tag) {
+ count++;
+ }
+ }
+ return count;
+}
+CXML_Element* CXML_Element::GetElement(const CFX_ByteStringC& space,
+ const CFX_ByteStringC& tag,
+ int index) const {
+ if (index < 0) {
return NULL;
-}
-void CXML_AttrMap::SetAt(const CFX_ByteStringC& space, const CFX_ByteStringC& name, const CFX_WideStringC& value)
-{
- for (int i = 0; i < GetSize(); i++) {
- CXML_AttrItem& item = GetAt(i);
- if ((space.IsEmpty() || item.m_QSpaceName == space) && item.m_AttrName == name) {
- item.m_Value = value;
- return;
- }
- }
- if (!m_pMap) {
- m_pMap = new CFX_ObjectArray<CXML_AttrItem>;
- }
- CXML_AttrItem* pItem = (CXML_AttrItem*)m_pMap->AddSpace();
- if (!pItem) {
- return;
- }
- pItem->m_QSpaceName = space;
- pItem->m_AttrName = name;
- pItem->m_Value = value;
-}
-void CXML_AttrMap::RemoveAt(const CFX_ByteStringC& space, const CFX_ByteStringC& name)
-{
- if (m_pMap == NULL) {
- return;
- }
- for (int i = 0; i < m_pMap->GetSize(); i ++) {
- CXML_AttrItem& item = GetAt(i);
- if ((space.IsEmpty() || item.m_QSpaceName == space) && item.m_AttrName == name) {
- m_pMap->RemoveAt(i);
- return;
- }
- }
-}
-int CXML_AttrMap::GetSize() const
-{
- return m_pMap == NULL ? 0 : m_pMap->GetSize();
-}
-CXML_AttrItem& CXML_AttrMap::GetAt(int index) const
-{
- ASSERT(m_pMap != NULL);
- return (*m_pMap)[index];
-}
-void CXML_AttrMap::RemoveAll()
-{
- if (!m_pMap) {
- return;
- }
- m_pMap->RemoveAll();
- delete m_pMap;
- m_pMap = NULL;
+ }
+ for (int i = 0; i < m_Children.GetSize(); i += 2) {
+ ChildType type = (ChildType)(uintptr_t)m_Children.GetAt(i);
+ if (type != Element) {
+ continue;
+ }
+ CXML_Element* pKid = (CXML_Element*)m_Children.GetAt(i + 1);
+ if ((!space.IsEmpty() && pKid->m_QSpaceName != space) ||
+ pKid->m_TagName != tag) {
+ continue;
+ }
+ if (index-- == 0) {
+ return pKid;
+ }
+ }
+ return NULL;
+}
+FX_DWORD CXML_Element::FindElement(CXML_Element* pChild) const {
+ for (int i = 0; i < m_Children.GetSize(); i += 2) {
+ if ((ChildType)(uintptr_t)m_Children.GetAt(i) == Element &&
+ (CXML_Element*)m_Children.GetAt(i + 1) == pChild) {
+ return (FX_DWORD)(i >> 1);
+ }
+ }
+ return (FX_DWORD)-1;
+}
+const CFX_WideString* CXML_AttrMap::Lookup(const CFX_ByteStringC& space,
+ const CFX_ByteStringC& name) const {
+ if (m_pMap == NULL) {
+ return NULL;
+ }
+ for (int i = 0; i < m_pMap->GetSize(); i++) {
+ CXML_AttrItem& item = GetAt(i);
+ if ((space.IsEmpty() || item.m_QSpaceName == space) &&
+ item.m_AttrName == name) {
+ return &item.m_Value;
+ }
+ }
+ return NULL;
+}
+void CXML_AttrMap::SetAt(const CFX_ByteStringC& space,
+ const CFX_ByteStringC& name,
+ const CFX_WideStringC& value) {
+ for (int i = 0; i < GetSize(); i++) {
+ CXML_AttrItem& item = GetAt(i);
+ if ((space.IsEmpty() || item.m_QSpaceName == space) &&
+ item.m_AttrName == name) {
+ item.m_Value = value;
+ return;
+ }
+ }
+ if (!m_pMap) {
+ m_pMap = new CFX_ObjectArray<CXML_AttrItem>;
+ }
+ CXML_AttrItem* pItem = (CXML_AttrItem*)m_pMap->AddSpace();
+ if (!pItem) {
+ return;
+ }
+ pItem->m_QSpaceName = space;
+ pItem->m_AttrName = name;
+ pItem->m_Value = value;
+}
+void CXML_AttrMap::RemoveAt(const CFX_ByteStringC& space,
+ const CFX_ByteStringC& name) {
+ if (m_pMap == NULL) {
+ return;
+ }
+ for (int i = 0; i < m_pMap->GetSize(); i++) {
+ CXML_AttrItem& item = GetAt(i);
+ if ((space.IsEmpty() || item.m_QSpaceName == space) &&
+ item.m_AttrName == name) {
+ m_pMap->RemoveAt(i);
+ return;
+ }
+ }
+}
+int CXML_AttrMap::GetSize() const {
+ return m_pMap == NULL ? 0 : m_pMap->GetSize();
+}
+CXML_AttrItem& CXML_AttrMap::GetAt(int index) const {
+ ASSERT(m_pMap != NULL);
+ return (*m_pMap)[index];
+}
+void CXML_AttrMap::RemoveAll() {
+ if (!m_pMap) {
+ return;
+ }
+ m_pMap->RemoveAll();
+ delete m_pMap;
+ m_pMap = NULL;
}
diff --git a/core/src/fxcrt/fxcrt_platforms.cpp b/core/src/fxcrt/fxcrt_platforms.cpp
index e7182943be..a9f22d00c6 100644
--- a/core/src/fxcrt/fxcrt_platforms.cpp
+++ b/core/src/fxcrt/fxcrt_platforms.cpp
@@ -7,187 +7,172 @@
#include "../../include/fxcrt/fx_basic.h"
#include "fxcrt_platforms.h"
-#if (_FXM_PLATFORM_ != _FXM_PLATFORM_WINDOWS_ && _FXM_PLATFORM_ != _FXM_PLATFORM_LINUX_ && _FXM_PLATFORM_ != _FXM_PLATFORM_APPLE_ && _FXM_PLATFORM_ != _FXM_PLATFORM_ANDROID_)
-IFXCRT_FileAccess* FXCRT_FileAccess_Create()
-{
- return new CFXCRT_FileAccess_CRT;
-}
-void FXCRT_GetFileModeString(FX_DWORD dwModes, CFX_ByteString &bsMode)
-{
- if (dwModes & FX_FILEMODE_ReadOnly) {
- bsMode = FX_BSTRC("rb");
- } else if (dwModes & FX_FILEMODE_Truncate) {
- bsMode = FX_BSTRC("w+b");
- } else {
- bsMode = FX_BSTRC("a+b");
- }
-}
-void FXCRT_GetFileModeString(FX_DWORD dwModes, CFX_WideString &wsMode)
-{
- if (dwModes & FX_FILEMODE_ReadOnly) {
- wsMode = FX_WSTRC(L"rb");
- } else if (dwModes & FX_FILEMODE_Truncate) {
- wsMode = FX_WSTRC(L"w+b");
- } else {
- wsMode = FX_WSTRC(L"a+b");
- }
-}
-CFXCRT_FileAccess_CRT::CFXCRT_FileAccess_CRT()
- : m_hFile(NULL)
-{
-}
-CFXCRT_FileAccess_CRT::~CFXCRT_FileAccess_CRT()
-{
- Close();
-}
-FX_BOOL CFXCRT_FileAccess_CRT::Open(const CFX_ByteStringC& fileName, FX_DWORD dwMode)
-{
- if (m_hFile) {
- return FALSE;
- }
- CFX_ByteString strMode;
- FXCRT_GetFileModeString(dwMode, strMode);
- m_hFile = FXSYS_fopen(fileName.GetCStr(), strMode.c_str());
- return m_hFile != NULL;
-}
-FX_BOOL CFXCRT_FileAccess_CRT::Open(const CFX_WideStringC& fileName, FX_DWORD dwMode)
-{
- if (m_hFile) {
- return FALSE;
- }
- CFX_WideString strMode;
- FXCRT_GetFileModeString(dwMode, strMode);
- m_hFile = FXSYS_wfopen(fileName.GetPtr(), strMode.c_str());
- return m_hFile != NULL;
-}
-void CFXCRT_FileAccess_CRT::Close()
-{
- if (!m_hFile) {
- return;
- }
- FXSYS_fclose(m_hFile);
- m_hFile = NULL;
-}
-void CFXCRT_FileAccess_CRT::Release()
-{
- delete this;
-}
-FX_FILESIZE CFXCRT_FileAccess_CRT::GetSize() const
-{
- if (!m_hFile) {
- return 0;
- }
- FX_FILESIZE pos = (FX_FILESIZE)FXSYS_ftell(m_hFile);
- FXSYS_fseek(m_hFile, 0, FXSYS_SEEK_END);
- FX_FILESIZE size = (FX_FILESIZE)FXSYS_ftell(m_hFile);
- FXSYS_fseek(m_hFile, pos, FXSYS_SEEK_SET);
- return size;
-}
-FX_FILESIZE CFXCRT_FileAccess_CRT::GetPosition() const
-{
- if (!m_hFile) {
- return (FX_FILESIZE) - 1;
- }
- return (FX_FILESIZE)FXSYS_ftell(m_hFile);
-}
-FX_FILESIZE CFXCRT_FileAccess_CRT::SetPosition(FX_FILESIZE pos)
-{
- if (!m_hFile) {
- return (FX_FILESIZE) - 1;
- }
- FXSYS_fseek(m_hFile, pos, FXSYS_SEEK_SET);
- return (FX_FILESIZE)FXSYS_ftell(m_hFile);
-}
-size_t CFXCRT_FileAccess_CRT::Read(void* pBuffer, size_t szBuffer)
-{
- if (!m_hFile) {
- return 0;
- }
- return FXSYS_fread(pBuffer, 1, szBuffer, m_hFile);
-}
-size_t CFXCRT_FileAccess_CRT::Write(const void* pBuffer, size_t szBuffer)
-{
- if (!m_hFile) {
- return 0;
- }
- return FXSYS_fwrite(pBuffer, 1, szBuffer, m_hFile);
-}
-size_t CFXCRT_FileAccess_CRT::ReadPos(void* pBuffer, size_t szBuffer, FX_FILESIZE pos)
-{
- if (!m_hFile) {
- return (FX_FILESIZE) - 1;
- }
- FXSYS_fseek(m_hFile, pos, FXSYS_SEEK_SET);
- return FXSYS_fread(pBuffer, 1, szBuffer, m_hFile);
-}
-size_t CFXCRT_FileAccess_CRT::WritePos(const void* pBuffer, size_t szBuffer, FX_FILESIZE pos)
-{
- if (!m_hFile) {
- return (FX_FILESIZE) - 1;
- }
- FXSYS_fseek(m_hFile, pos, FXSYS_SEEK_SET);
- return FXSYS_fwrite(pBuffer, 1, szBuffer, m_hFile);
-}
-FX_BOOL CFXCRT_FileAccess_CRT::Flush()
-{
- if (!m_hFile) {
- return FALSE;
- }
- return !FXSYS_fflush(m_hFile);
-}
-FX_BOOL CFXCRT_FileAccess_CRT::Truncate(FX_FILESIZE szFile)
-{
+#if (_FXM_PLATFORM_ != _FXM_PLATFORM_WINDOWS_ && \
+ _FXM_PLATFORM_ != _FXM_PLATFORM_LINUX_ && \
+ _FXM_PLATFORM_ != _FXM_PLATFORM_APPLE_ && \
+ _FXM_PLATFORM_ != _FXM_PLATFORM_ANDROID_)
+IFXCRT_FileAccess* FXCRT_FileAccess_Create() {
+ return new CFXCRT_FileAccess_CRT;
+}
+void FXCRT_GetFileModeString(FX_DWORD dwModes, CFX_ByteString& bsMode) {
+ if (dwModes & FX_FILEMODE_ReadOnly) {
+ bsMode = FX_BSTRC("rb");
+ } else if (dwModes & FX_FILEMODE_Truncate) {
+ bsMode = FX_BSTRC("w+b");
+ } else {
+ bsMode = FX_BSTRC("a+b");
+ }
+}
+void FXCRT_GetFileModeString(FX_DWORD dwModes, CFX_WideString& wsMode) {
+ if (dwModes & FX_FILEMODE_ReadOnly) {
+ wsMode = FX_WSTRC(L"rb");
+ } else if (dwModes & FX_FILEMODE_Truncate) {
+ wsMode = FX_WSTRC(L"w+b");
+ } else {
+ wsMode = FX_WSTRC(L"a+b");
+ }
+}
+CFXCRT_FileAccess_CRT::CFXCRT_FileAccess_CRT() : m_hFile(NULL) {}
+CFXCRT_FileAccess_CRT::~CFXCRT_FileAccess_CRT() {
+ Close();
+}
+FX_BOOL CFXCRT_FileAccess_CRT::Open(const CFX_ByteStringC& fileName,
+ FX_DWORD dwMode) {
+ if (m_hFile) {
return FALSE;
+ }
+ CFX_ByteString strMode;
+ FXCRT_GetFileModeString(dwMode, strMode);
+ m_hFile = FXSYS_fopen(fileName.GetCStr(), strMode.c_str());
+ return m_hFile != NULL;
+}
+FX_BOOL CFXCRT_FileAccess_CRT::Open(const CFX_WideStringC& fileName,
+ FX_DWORD dwMode) {
+ if (m_hFile) {
+ return FALSE;
+ }
+ CFX_WideString strMode;
+ FXCRT_GetFileModeString(dwMode, strMode);
+ m_hFile = FXSYS_wfopen(fileName.GetPtr(), strMode.c_str());
+ return m_hFile != NULL;
+}
+void CFXCRT_FileAccess_CRT::Close() {
+ if (!m_hFile) {
+ return;
+ }
+ FXSYS_fclose(m_hFile);
+ m_hFile = NULL;
+}
+void CFXCRT_FileAccess_CRT::Release() {
+ delete this;
+}
+FX_FILESIZE CFXCRT_FileAccess_CRT::GetSize() const {
+ if (!m_hFile) {
+ return 0;
+ }
+ FX_FILESIZE pos = (FX_FILESIZE)FXSYS_ftell(m_hFile);
+ FXSYS_fseek(m_hFile, 0, FXSYS_SEEK_END);
+ FX_FILESIZE size = (FX_FILESIZE)FXSYS_ftell(m_hFile);
+ FXSYS_fseek(m_hFile, pos, FXSYS_SEEK_SET);
+ return size;
+}
+FX_FILESIZE CFXCRT_FileAccess_CRT::GetPosition() const {
+ if (!m_hFile) {
+ return (FX_FILESIZE)-1;
+ }
+ return (FX_FILESIZE)FXSYS_ftell(m_hFile);
+}
+FX_FILESIZE CFXCRT_FileAccess_CRT::SetPosition(FX_FILESIZE pos) {
+ if (!m_hFile) {
+ return (FX_FILESIZE)-1;
+ }
+ FXSYS_fseek(m_hFile, pos, FXSYS_SEEK_SET);
+ return (FX_FILESIZE)FXSYS_ftell(m_hFile);
+}
+size_t CFXCRT_FileAccess_CRT::Read(void* pBuffer, size_t szBuffer) {
+ if (!m_hFile) {
+ return 0;
+ }
+ return FXSYS_fread(pBuffer, 1, szBuffer, m_hFile);
+}
+size_t CFXCRT_FileAccess_CRT::Write(const void* pBuffer, size_t szBuffer) {
+ if (!m_hFile) {
+ return 0;
+ }
+ return FXSYS_fwrite(pBuffer, 1, szBuffer, m_hFile);
+}
+size_t CFXCRT_FileAccess_CRT::ReadPos(void* pBuffer,
+ size_t szBuffer,
+ FX_FILESIZE pos) {
+ if (!m_hFile) {
+ return (FX_FILESIZE)-1;
+ }
+ FXSYS_fseek(m_hFile, pos, FXSYS_SEEK_SET);
+ return FXSYS_fread(pBuffer, 1, szBuffer, m_hFile);
+}
+size_t CFXCRT_FileAccess_CRT::WritePos(const void* pBuffer,
+ size_t szBuffer,
+ FX_FILESIZE pos) {
+ if (!m_hFile) {
+ return (FX_FILESIZE)-1;
+ }
+ FXSYS_fseek(m_hFile, pos, FXSYS_SEEK_SET);
+ return FXSYS_fwrite(pBuffer, 1, szBuffer, m_hFile);
+}
+FX_BOOL CFXCRT_FileAccess_CRT::Flush() {
+ if (!m_hFile) {
+ return FALSE;
+ }
+ return !FXSYS_fflush(m_hFile);
}
-FX_BOOL FX_File_Exist(const CFX_ByteStringC& fileName)
-{
- return access(fileName.GetCStr(), F_OK) > -1;
-}
-FX_BOOL FX_File_Exist(const CFX_WideStringC& fileName)
-{
- return FX_File_Exist(FX_UTF8Encode(fileName));
-}
-FX_BOOL FX_File_Delete(const CFX_ByteStringC& fileName)
-{
- return remove(fileName.GetCStr()) > -1;
+FX_BOOL CFXCRT_FileAccess_CRT::Truncate(FX_FILESIZE szFile) {
+ return FALSE;
}
-FX_BOOL FX_File_Delete(const CFX_WideStringC& fileName)
-{
- return FX_File_Delete(FX_UTF8Encode(fileName));
+FX_BOOL FX_File_Exist(const CFX_ByteStringC& fileName) {
+ return access(fileName.GetCStr(), F_OK) > -1;
}
-FX_BOOL FX_File_Copy(const CFX_ByteStringC& fileNameSrc, const CFX_ByteStringC& fileNameDst)
-{
- CFXCRT_FileAccess_CRT src, dst;
- if (!src.Open(fileNameSrc, FX_FILEMODE_ReadOnly)) {
- return FALSE;
- }
- FX_FILESIZE size = src.GetSize();
- if (!size) {
- return FALSE;
- }
- if (!dst.Open(fileNameDst, FX_FILEMODE_Truncate)) {
- return FALSE;
- }
- FX_FILESIZE num = 0;
- uint8_t* pBuffer = FX_Alloc(uint8_t, 32768);
- while (num = src.Read(pBuffer, 32768)) {
- if (dst.Write(pBuffer, num) != num) {
- break;
- }
- }
- FX_Free(pBuffer);
- return TRUE;
+FX_BOOL FX_File_Exist(const CFX_WideStringC& fileName) {
+ return FX_File_Exist(FX_UTF8Encode(fileName));
}
-FX_BOOL FX_File_Copy(const CFX_WideStringC& fileNameSrc, const CFX_WideStringC& fileNameDst)
-{
- return FX_File_Copy(FX_UTF8Encode(fileNameSrc), FX_UTF8Encode(fileNameDst));
+FX_BOOL FX_File_Delete(const CFX_ByteStringC& fileName) {
+ return remove(fileName.GetCStr()) > -1;
}
-FX_BOOL FX_File_Move(const CFX_ByteStringC& fileNameSrc, const CFX_ByteStringC& fileNameDst)
-{
- return rename(fileNameSrc.GetCStr(), fileNameDst.GetCStr());
+FX_BOOL FX_File_Delete(const CFX_WideStringC& fileName) {
+ return FX_File_Delete(FX_UTF8Encode(fileName));
}
-FX_BOOL FX_File_Move(const CFX_WideStringC& fileNameSrc, const CFX_WideStringC& fileNameDst)
-{
- return FX_File_Move(FX_UTF8Encode(fileNameSrc), FX_UTF8Encode(fileNameDst));
+FX_BOOL FX_File_Copy(const CFX_ByteStringC& fileNameSrc,
+ const CFX_ByteStringC& fileNameDst) {
+ CFXCRT_FileAccess_CRT src, dst;
+ if (!src.Open(fileNameSrc, FX_FILEMODE_ReadOnly)) {
+ return FALSE;
+ }
+ FX_FILESIZE size = src.GetSize();
+ if (!size) {
+ return FALSE;
+ }
+ if (!dst.Open(fileNameDst, FX_FILEMODE_Truncate)) {
+ return FALSE;
+ }
+ FX_FILESIZE num = 0;
+ uint8_t* pBuffer = FX_Alloc(uint8_t, 32768);
+ while (num = src.Read(pBuffer, 32768)) {
+ if (dst.Write(pBuffer, num) != num) {
+ break;
+ }
+ }
+ FX_Free(pBuffer);
+ return TRUE;
+}
+FX_BOOL FX_File_Copy(const CFX_WideStringC& fileNameSrc,
+ const CFX_WideStringC& fileNameDst) {
+ return FX_File_Copy(FX_UTF8Encode(fileNameSrc), FX_UTF8Encode(fileNameDst));
+}
+FX_BOOL FX_File_Move(const CFX_ByteStringC& fileNameSrc,
+ const CFX_ByteStringC& fileNameDst) {
+ return rename(fileNameSrc.GetCStr(), fileNameDst.GetCStr());
+}
+FX_BOOL FX_File_Move(const CFX_WideStringC& fileNameSrc,
+ const CFX_WideStringC& fileNameDst) {
+ return FX_File_Move(FX_UTF8Encode(fileNameSrc), FX_UTF8Encode(fileNameDst));
}
#endif
diff --git a/core/src/fxcrt/fxcrt_platforms.h b/core/src/fxcrt/fxcrt_platforms.h
index 4fd0588c94..5870c76469 100644
--- a/core/src/fxcrt/fxcrt_platforms.h
+++ b/core/src/fxcrt/fxcrt_platforms.h
@@ -10,28 +10,30 @@
#include "extension.h"
#if _FX_OS_ == _FX_ANDROID_
-void FXCRT_GetFileModeString(FX_DWORD dwModes, CFX_ByteString &bsMode);
-void FXCRT_GetFileModeString(FX_DWORD dwModes, CFX_WideString &wsMode);
-class CFXCRT_FileAccess_CRT : public IFXCRT_FileAccess
-{
-public:
- CFXCRT_FileAccess_CRT();
- virtual ~CFXCRT_FileAccess_CRT();
- virtual FX_BOOL Open(const CFX_ByteStringC& fileName, FX_DWORD dwMode);
- virtual FX_BOOL Open(const CFX_WideStringC& fileName, FX_DWORD dwMode);
- virtual void Close();
- virtual void Release();
- virtual FX_FILESIZE GetSize() const;
- virtual FX_FILESIZE GetPosition() const;
- virtual FX_FILESIZE SetPosition(FX_FILESIZE pos);
- virtual size_t Read(void* pBuffer, size_t szBuffer);
- virtual size_t Write(const void* pBuffer, size_t szBuffer);
- virtual size_t ReadPos(void* pBuffer, size_t szBuffer, FX_FILESIZE pos);
- virtual size_t WritePos(const void* pBuffer, size_t szBuffer, FX_FILESIZE pos);
- virtual FX_BOOL Flush();
- virtual FX_BOOL Truncate(FX_FILESIZE szFile);
-protected:
- FXSYS_FILE* m_hFile;
+void FXCRT_GetFileModeString(FX_DWORD dwModes, CFX_ByteString& bsMode);
+void FXCRT_GetFileModeString(FX_DWORD dwModes, CFX_WideString& wsMode);
+class CFXCRT_FileAccess_CRT : public IFXCRT_FileAccess {
+ public:
+ CFXCRT_FileAccess_CRT();
+ virtual ~CFXCRT_FileAccess_CRT();
+ virtual FX_BOOL Open(const CFX_ByteStringC& fileName, FX_DWORD dwMode);
+ virtual FX_BOOL Open(const CFX_WideStringC& fileName, FX_DWORD dwMode);
+ virtual void Close();
+ virtual void Release();
+ virtual FX_FILESIZE GetSize() const;
+ virtual FX_FILESIZE GetPosition() const;
+ virtual FX_FILESIZE SetPosition(FX_FILESIZE pos);
+ virtual size_t Read(void* pBuffer, size_t szBuffer);
+ virtual size_t Write(const void* pBuffer, size_t szBuffer);
+ virtual size_t ReadPos(void* pBuffer, size_t szBuffer, FX_FILESIZE pos);
+ virtual size_t WritePos(const void* pBuffer,
+ size_t szBuffer,
+ FX_FILESIZE pos);
+ virtual FX_BOOL Flush();
+ virtual FX_BOOL Truncate(FX_FILESIZE szFile);
+
+ protected:
+ FXSYS_FILE* m_hFile;
};
#endif
diff --git a/core/src/fxcrt/fxcrt_posix.cpp b/core/src/fxcrt/fxcrt_posix.cpp
index 84646efd5c..88e3d8af1d 100644
--- a/core/src/fxcrt/fxcrt_posix.cpp
+++ b/core/src/fxcrt/fxcrt_posix.cpp
@@ -7,185 +7,172 @@
#include "../../include/fxcrt/fx_basic.h"
#include "fxcrt_posix.h"
-#if _FXM_PLATFORM_ == _FXM_PLATFORM_LINUX_ || _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ || _FXM_PLATFORM_ == _FXM_PLATFORM_ANDROID_
-IFXCRT_FileAccess* FXCRT_FileAccess_Create()
-{
- return new CFXCRT_FileAccess_Posix;
-}
-void FXCRT_Posix_GetFileMode(FX_DWORD dwModes, int32_t &nFlags, int32_t &nMasks)
-{
- nFlags = O_BINARY | O_LARGEFILE;
- if (dwModes & FX_FILEMODE_ReadOnly) {
- nFlags |= O_RDONLY;
- nMasks = 0;
- } else {
- nFlags |= O_RDWR | O_CREAT;
- if (dwModes & FX_FILEMODE_Truncate) {
- nFlags |= O_TRUNC;
- }
- nMasks = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH;
+#if _FXM_PLATFORM_ == _FXM_PLATFORM_LINUX_ || \
+ _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ || \
+ _FXM_PLATFORM_ == _FXM_PLATFORM_ANDROID_
+IFXCRT_FileAccess* FXCRT_FileAccess_Create() {
+ return new CFXCRT_FileAccess_Posix;
+}
+void FXCRT_Posix_GetFileMode(FX_DWORD dwModes,
+ int32_t& nFlags,
+ int32_t& nMasks) {
+ nFlags = O_BINARY | O_LARGEFILE;
+ if (dwModes & FX_FILEMODE_ReadOnly) {
+ nFlags |= O_RDONLY;
+ nMasks = 0;
+ } else {
+ nFlags |= O_RDWR | O_CREAT;
+ if (dwModes & FX_FILEMODE_Truncate) {
+ nFlags |= O_TRUNC;
+ }
+ nMasks = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH;
+ }
+}
+CFXCRT_FileAccess_Posix::CFXCRT_FileAccess_Posix() : m_nFD(-1) {}
+CFXCRT_FileAccess_Posix::~CFXCRT_FileAccess_Posix() {
+ Close();
+}
+FX_BOOL CFXCRT_FileAccess_Posix::Open(const CFX_ByteStringC& fileName,
+ FX_DWORD dwMode) {
+ if (m_nFD > -1) {
+ return FALSE;
+ }
+ int32_t nFlags, nMasks;
+ FXCRT_Posix_GetFileMode(dwMode, nFlags, nMasks);
+ m_nFD = open(fileName.GetCStr(), nFlags, nMasks);
+ return m_nFD > -1;
+}
+FX_BOOL CFXCRT_FileAccess_Posix::Open(const CFX_WideStringC& fileName,
+ FX_DWORD dwMode) {
+ return Open(FX_UTF8Encode(fileName), dwMode);
+}
+void CFXCRT_FileAccess_Posix::Close() {
+ if (m_nFD < 0) {
+ return;
+ }
+ close(m_nFD);
+ m_nFD = -1;
+}
+void CFXCRT_FileAccess_Posix::Release() {
+ delete this;
+}
+FX_FILESIZE CFXCRT_FileAccess_Posix::GetSize() const {
+ if (m_nFD < 0) {
+ return 0;
+ }
+ struct stat s;
+ FXSYS_memset(&s, 0, sizeof(s));
+ fstat(m_nFD, &s);
+ return s.st_size;
+}
+FX_FILESIZE CFXCRT_FileAccess_Posix::GetPosition() const {
+ if (m_nFD < 0) {
+ return (FX_FILESIZE)-1;
+ }
+ return lseek(m_nFD, 0, SEEK_CUR);
+}
+FX_FILESIZE CFXCRT_FileAccess_Posix::SetPosition(FX_FILESIZE pos) {
+ if (m_nFD < 0) {
+ return (FX_FILESIZE)-1;
+ }
+ return lseek(m_nFD, pos, SEEK_SET);
+}
+size_t CFXCRT_FileAccess_Posix::Read(void* pBuffer, size_t szBuffer) {
+ if (m_nFD < 0) {
+ return 0;
+ }
+ return read(m_nFD, pBuffer, szBuffer);
+}
+size_t CFXCRT_FileAccess_Posix::Write(const void* pBuffer, size_t szBuffer) {
+ if (m_nFD < 0) {
+ return 0;
+ }
+ return write(m_nFD, pBuffer, szBuffer);
+}
+size_t CFXCRT_FileAccess_Posix::ReadPos(void* pBuffer,
+ size_t szBuffer,
+ FX_FILESIZE pos) {
+ if (m_nFD < 0) {
+ return 0;
+ }
+ if (pos >= GetSize()) {
+ return 0;
+ }
+ if (SetPosition(pos) == (FX_FILESIZE)-1) {
+ return 0;
+ }
+ return Read(pBuffer, szBuffer);
+}
+size_t CFXCRT_FileAccess_Posix::WritePos(const void* pBuffer,
+ size_t szBuffer,
+ FX_FILESIZE pos) {
+ if (m_nFD < 0) {
+ return 0;
+ }
+ if (SetPosition(pos) == (FX_FILESIZE)-1) {
+ return 0;
+ }
+ return Write(pBuffer, szBuffer);
+}
+FX_BOOL CFXCRT_FileAccess_Posix::Flush() {
+ if (m_nFD < 0) {
+ return FALSE;
+ }
+ return fsync(m_nFD) > -1;
+}
+FX_BOOL CFXCRT_FileAccess_Posix::Truncate(FX_FILESIZE szFile) {
+ if (m_nFD < 0) {
+ return FALSE;
+ }
+ return !ftruncate(m_nFD, szFile);
+}
+FX_BOOL FX_File_Exist(const CFX_ByteStringC& fileName) {
+ return access(fileName.GetCStr(), F_OK) > -1;
+}
+FX_BOOL FX_File_Exist(const CFX_WideStringC& fileName) {
+ return FX_File_Exist(FX_UTF8Encode(fileName));
+}
+FX_BOOL FX_File_Delete(const CFX_ByteStringC& fileName) {
+ return remove(fileName.GetCStr()) > -1;
+}
+FX_BOOL FX_File_Delete(const CFX_WideStringC& fileName) {
+ return FX_File_Delete(FX_UTF8Encode(fileName));
+}
+FX_BOOL FX_File_Copy(const CFX_ByteStringC& fileNameSrc,
+ const CFX_ByteStringC& fileNameDst) {
+ CFXCRT_FileAccess_Posix src, dst;
+ if (!src.Open(fileNameSrc, FX_FILEMODE_ReadOnly)) {
+ return FALSE;
+ }
+ FX_FILESIZE size = src.GetSize();
+ if (!size) {
+ return FALSE;
+ }
+ if (!dst.Open(fileNameDst, FX_FILEMODE_Truncate)) {
+ return FALSE;
+ }
+ size_t num = 0;
+ uint8_t* pBuffer = FX_Alloc(uint8_t, 32768);
+ num = src.Read(pBuffer, 32768);
+ while (num) {
+ if (dst.Write(pBuffer, num) != num) {
+ break;
}
-}
-CFXCRT_FileAccess_Posix::CFXCRT_FileAccess_Posix()
- : m_nFD(-1)
-{
-}
-CFXCRT_FileAccess_Posix::~CFXCRT_FileAccess_Posix()
-{
- Close();
-}
-FX_BOOL CFXCRT_FileAccess_Posix::Open(const CFX_ByteStringC& fileName, FX_DWORD dwMode)
-{
- if (m_nFD > -1) {
- return FALSE;
- }
- int32_t nFlags, nMasks;
- FXCRT_Posix_GetFileMode(dwMode, nFlags, nMasks);
- m_nFD = open(fileName.GetCStr(), nFlags, nMasks);
- return m_nFD > -1;
-}
-FX_BOOL CFXCRT_FileAccess_Posix::Open(const CFX_WideStringC& fileName, FX_DWORD dwMode)
-{
- return Open(FX_UTF8Encode(fileName), dwMode);
-}
-void CFXCRT_FileAccess_Posix::Close()
-{
- if (m_nFD < 0) {
- return;
- }
- close(m_nFD);
- m_nFD = -1;
-}
-void CFXCRT_FileAccess_Posix::Release()
-{
- delete this;
-}
-FX_FILESIZE CFXCRT_FileAccess_Posix::GetSize() const
-{
- if (m_nFD < 0) {
- return 0;
- }
- struct stat s;
- FXSYS_memset(&s, 0, sizeof(s));
- fstat(m_nFD, &s);
- return s.st_size;
-}
-FX_FILESIZE CFXCRT_FileAccess_Posix::GetPosition() const
-{
- if (m_nFD < 0) {
- return (FX_FILESIZE) - 1;
- }
- return lseek(m_nFD, 0, SEEK_CUR);
-}
-FX_FILESIZE CFXCRT_FileAccess_Posix::SetPosition(FX_FILESIZE pos)
-{
- if (m_nFD < 0) {
- return (FX_FILESIZE) - 1;
- }
- return lseek(m_nFD, pos, SEEK_SET);
-}
-size_t CFXCRT_FileAccess_Posix::Read(void* pBuffer, size_t szBuffer)
-{
- if (m_nFD < 0) {
- return 0;
- }
- return read(m_nFD, pBuffer, szBuffer);
-}
-size_t CFXCRT_FileAccess_Posix::Write(const void* pBuffer, size_t szBuffer)
-{
- if (m_nFD < 0) {
- return 0;
- }
- return write(m_nFD, pBuffer, szBuffer);
-}
-size_t CFXCRT_FileAccess_Posix::ReadPos(void* pBuffer, size_t szBuffer, FX_FILESIZE pos)
-{
- if (m_nFD < 0) {
- return 0;
- }
- if (pos >= GetSize()) {
- return 0;
- }
- if (SetPosition(pos) == (FX_FILESIZE) - 1) {
- return 0;
- }
- return Read(pBuffer, szBuffer);
-}
-size_t CFXCRT_FileAccess_Posix::WritePos(const void* pBuffer, size_t szBuffer, FX_FILESIZE pos)
-{
- if (m_nFD < 0) {
- return 0;
- }
- if (SetPosition(pos) == (FX_FILESIZE) - 1) {
- return 0;
- }
- return Write(pBuffer, szBuffer);
-}
-FX_BOOL CFXCRT_FileAccess_Posix::Flush()
-{
- if (m_nFD < 0) {
- return FALSE;
- }
- return fsync(m_nFD) > -1;
-}
-FX_BOOL CFXCRT_FileAccess_Posix::Truncate(FX_FILESIZE szFile)
-{
- if (m_nFD < 0) {
- return FALSE;
- }
- return !ftruncate(m_nFD, szFile);
-}
-FX_BOOL FX_File_Exist(const CFX_ByteStringC& fileName)
-{
- return access(fileName.GetCStr(), F_OK) > -1;
-}
-FX_BOOL FX_File_Exist(const CFX_WideStringC& fileName)
-{
- return FX_File_Exist(FX_UTF8Encode(fileName));
-}
-FX_BOOL FX_File_Delete(const CFX_ByteStringC& fileName)
-{
- return remove(fileName.GetCStr()) > -1;
-}
-FX_BOOL FX_File_Delete(const CFX_WideStringC& fileName)
-{
- return FX_File_Delete(FX_UTF8Encode(fileName));
-}
-FX_BOOL FX_File_Copy(const CFX_ByteStringC& fileNameSrc, const CFX_ByteStringC& fileNameDst)
-{
- CFXCRT_FileAccess_Posix src, dst;
- if (!src.Open(fileNameSrc, FX_FILEMODE_ReadOnly)) {
- return FALSE;
- }
- FX_FILESIZE size = src.GetSize();
- if (!size) {
- return FALSE;
- }
- if (!dst.Open(fileNameDst, FX_FILEMODE_Truncate)) {
- return FALSE;
- }
- size_t num = 0;
- uint8_t* pBuffer = FX_Alloc(uint8_t, 32768);
num = src.Read(pBuffer, 32768);
- while (num) {
- if (dst.Write(pBuffer, num) != num) {
- break;
- }
- num = src.Read(pBuffer, 32768);
- }
- FX_Free(pBuffer);
- return TRUE;
+ }
+ FX_Free(pBuffer);
+ return TRUE;
}
-FX_BOOL FX_File_Copy(const CFX_WideStringC& fileNameSrc, const CFX_WideStringC& fileNameDst)
-{
- return FX_File_Copy(FX_UTF8Encode(fileNameSrc), FX_UTF8Encode(fileNameDst));
+FX_BOOL FX_File_Copy(const CFX_WideStringC& fileNameSrc,
+ const CFX_WideStringC& fileNameDst) {
+ return FX_File_Copy(FX_UTF8Encode(fileNameSrc), FX_UTF8Encode(fileNameDst));
}
-FX_BOOL FX_File_Move(const CFX_ByteStringC& fileNameSrc, const CFX_ByteStringC& fileNameDst)
-{
- return rename(fileNameSrc.GetCStr(), fileNameDst.GetCStr());
+FX_BOOL FX_File_Move(const CFX_ByteStringC& fileNameSrc,
+ const CFX_ByteStringC& fileNameDst) {
+ return rename(fileNameSrc.GetCStr(), fileNameDst.GetCStr());
}
-FX_BOOL FX_File_Move(const CFX_WideStringC& fileNameSrc, const CFX_WideStringC& fileNameDst)
-{
- return FX_File_Move(FX_UTF8Encode(fileNameSrc), FX_UTF8Encode(fileNameDst));
+FX_BOOL FX_File_Move(const CFX_WideStringC& fileNameSrc,
+ const CFX_WideStringC& fileNameDst) {
+ return FX_File_Move(FX_UTF8Encode(fileNameSrc), FX_UTF8Encode(fileNameDst));
}
#endif
diff --git a/core/src/fxcrt/fxcrt_posix.h b/core/src/fxcrt/fxcrt_posix.h
index 39df1c8507..19e11da4a8 100644
--- a/core/src/fxcrt/fxcrt_posix.h
+++ b/core/src/fxcrt/fxcrt_posix.h
@@ -9,27 +9,31 @@
#include "extension.h"
-#if _FXM_PLATFORM_ == _FXM_PLATFORM_LINUX_ || _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ || _FXM_PLATFORM_ == _FXM_PLATFORM_ANDROID_
-class CFXCRT_FileAccess_Posix : public IFXCRT_FileAccess
-{
-public:
- CFXCRT_FileAccess_Posix();
- virtual ~CFXCRT_FileAccess_Posix();
- virtual FX_BOOL Open(const CFX_ByteStringC& fileName, FX_DWORD dwMode);
- virtual FX_BOOL Open(const CFX_WideStringC& fileName, FX_DWORD dwMode);
- virtual void Close();
- virtual void Release();
- virtual FX_FILESIZE GetSize() const;
- virtual FX_FILESIZE GetPosition() const;
- virtual FX_FILESIZE SetPosition(FX_FILESIZE pos);
- virtual size_t Read(void* pBuffer, size_t szBuffer);
- virtual size_t Write(const void* pBuffer, size_t szBuffer);
- virtual size_t ReadPos(void* pBuffer, size_t szBuffer, FX_FILESIZE pos);
- virtual size_t WritePos(const void* pBuffer, size_t szBuffer, FX_FILESIZE pos);
- virtual FX_BOOL Flush();
- virtual FX_BOOL Truncate(FX_FILESIZE szFile);
-protected:
- int32_t m_nFD;
+#if _FXM_PLATFORM_ == _FXM_PLATFORM_LINUX_ || \
+ _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ || \
+ _FXM_PLATFORM_ == _FXM_PLATFORM_ANDROID_
+class CFXCRT_FileAccess_Posix : public IFXCRT_FileAccess {
+ public:
+ CFXCRT_FileAccess_Posix();
+ virtual ~CFXCRT_FileAccess_Posix();
+ virtual FX_BOOL Open(const CFX_ByteStringC& fileName, FX_DWORD dwMode);
+ virtual FX_BOOL Open(const CFX_WideStringC& fileName, FX_DWORD dwMode);
+ virtual void Close();
+ virtual void Release();
+ virtual FX_FILESIZE GetSize() const;
+ virtual FX_FILESIZE GetPosition() const;
+ virtual FX_FILESIZE SetPosition(FX_FILESIZE pos);
+ virtual size_t Read(void* pBuffer, size_t szBuffer);
+ virtual size_t Write(const void* pBuffer, size_t szBuffer);
+ virtual size_t ReadPos(void* pBuffer, size_t szBuffer, FX_FILESIZE pos);
+ virtual size_t WritePos(const void* pBuffer,
+ size_t szBuffer,
+ FX_FILESIZE pos);
+ virtual FX_BOOL Flush();
+ virtual FX_BOOL Truncate(FX_FILESIZE szFile);
+
+ protected:
+ int32_t m_nFD;
};
#endif
diff --git a/core/src/fxcrt/fxcrt_windows.cpp b/core/src/fxcrt/fxcrt_windows.cpp
index d4e3830cf2..86077019af 100644
--- a/core/src/fxcrt/fxcrt_windows.cpp
+++ b/core/src/fxcrt/fxcrt_windows.cpp
@@ -8,208 +8,202 @@
#include "fxcrt_windows.h"
#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
-FX_BOOL FX_File_Exist(const CFX_ByteStringC& fileName)
-{
- FX_DWORD dwAttri = ::GetFileAttributesA(fileName.GetCStr());
- if (dwAttri == -1) {
- return FALSE;
- }
- return (dwAttri & FILE_ATTRIBUTE_DIRECTORY) == 0;
-}
-FX_BOOL FX_File_Exist(const CFX_WideStringC& fileName)
-{
- FX_DWORD dwAttri = ::GetFileAttributesW((LPCWSTR)fileName.GetPtr());
- if (dwAttri == -1) {
- return FALSE;
- }
- return (dwAttri & FILE_ATTRIBUTE_DIRECTORY) == 0;
-}
-IFXCRT_FileAccess* FXCRT_FileAccess_Create()
-{
- return new CFXCRT_FileAccess_Win64;
-}
-void FXCRT_Windows_GetFileMode(FX_DWORD dwMode, FX_DWORD &dwAccess, FX_DWORD &dwShare, FX_DWORD &dwCreation)
-{
- dwAccess = GENERIC_READ;
- dwShare = FILE_SHARE_READ | FILE_SHARE_WRITE;
- if (!(dwMode & FX_FILEMODE_ReadOnly)) {
- dwAccess |= GENERIC_WRITE;
- dwCreation = (dwMode & FX_FILEMODE_Truncate) ? CREATE_ALWAYS : OPEN_ALWAYS;
- } else {
- dwCreation = OPEN_EXISTING;
- }
+FX_BOOL FX_File_Exist(const CFX_ByteStringC& fileName) {
+ FX_DWORD dwAttri = ::GetFileAttributesA(fileName.GetCStr());
+ if (dwAttri == -1) {
+ return FALSE;
+ }
+ return (dwAttri & FILE_ATTRIBUTE_DIRECTORY) == 0;
+}
+FX_BOOL FX_File_Exist(const CFX_WideStringC& fileName) {
+ FX_DWORD dwAttri = ::GetFileAttributesW((LPCWSTR)fileName.GetPtr());
+ if (dwAttri == -1) {
+ return FALSE;
+ }
+ return (dwAttri & FILE_ATTRIBUTE_DIRECTORY) == 0;
+}
+IFXCRT_FileAccess* FXCRT_FileAccess_Create() {
+ return new CFXCRT_FileAccess_Win64;
+}
+void FXCRT_Windows_GetFileMode(FX_DWORD dwMode,
+ FX_DWORD& dwAccess,
+ FX_DWORD& dwShare,
+ FX_DWORD& dwCreation) {
+ dwAccess = GENERIC_READ;
+ dwShare = FILE_SHARE_READ | FILE_SHARE_WRITE;
+ if (!(dwMode & FX_FILEMODE_ReadOnly)) {
+ dwAccess |= GENERIC_WRITE;
+ dwCreation = (dwMode & FX_FILEMODE_Truncate) ? CREATE_ALWAYS : OPEN_ALWAYS;
+ } else {
+ dwCreation = OPEN_EXISTING;
+ }
}
#ifdef __cplusplus
extern "C" {
#endif
WINBASEAPI BOOL WINAPI GetFileSizeEx(HANDLE hFile, PLARGE_INTEGER lpFileSize);
-WINBASEAPI BOOL WINAPI SetFilePointerEx(HANDLE hFile, LARGE_INTEGER liDistanceToMove, PLARGE_INTEGER lpNewFilePointer, DWORD dwMoveMethod);
+WINBASEAPI BOOL WINAPI SetFilePointerEx(HANDLE hFile,
+ LARGE_INTEGER liDistanceToMove,
+ PLARGE_INTEGER lpNewFilePointer,
+ DWORD dwMoveMethod);
#ifdef __cplusplus
}
#endif
-CFXCRT_FileAccess_Win64::CFXCRT_FileAccess_Win64()
- : m_hFile(NULL)
-{
-}
-CFXCRT_FileAccess_Win64::~CFXCRT_FileAccess_Win64()
-{
- Close();
-}
-FX_BOOL CFXCRT_FileAccess_Win64::Open(const CFX_ByteStringC& fileName, FX_DWORD dwMode)
-{
- if (m_hFile) {
- return FALSE;
- }
- FX_DWORD dwAccess, dwShare, dwCreation;
- FXCRT_Windows_GetFileMode(dwMode, dwAccess, dwShare, dwCreation);
- m_hFile = ::CreateFileA(fileName.GetCStr(), dwAccess, dwShare, NULL, dwCreation, FILE_ATTRIBUTE_NORMAL, NULL);
- if (m_hFile == INVALID_HANDLE_VALUE) {
- m_hFile = NULL;
- }
- return m_hFile != NULL;
-}
-FX_BOOL CFXCRT_FileAccess_Win64::Open(const CFX_WideStringC& fileName, FX_DWORD dwMode)
-{
- if (m_hFile) {
- return FALSE;
- }
- FX_DWORD dwAccess, dwShare, dwCreation;
- FXCRT_Windows_GetFileMode(dwMode, dwAccess, dwShare, dwCreation);
- m_hFile = ::CreateFileW((LPCWSTR)fileName.GetPtr(), dwAccess, dwShare, NULL, dwCreation, FILE_ATTRIBUTE_NORMAL, NULL);
- if (m_hFile == INVALID_HANDLE_VALUE) {
- m_hFile = NULL;
- }
- return m_hFile != NULL;
-}
-void CFXCRT_FileAccess_Win64::Close()
-{
- if (!m_hFile) {
- return;
- }
- ::CloseHandle(m_hFile);
+CFXCRT_FileAccess_Win64::CFXCRT_FileAccess_Win64() : m_hFile(NULL) {}
+CFXCRT_FileAccess_Win64::~CFXCRT_FileAccess_Win64() {
+ Close();
+}
+FX_BOOL CFXCRT_FileAccess_Win64::Open(const CFX_ByteStringC& fileName,
+ FX_DWORD dwMode) {
+ if (m_hFile) {
+ return FALSE;
+ }
+ FX_DWORD dwAccess, dwShare, dwCreation;
+ FXCRT_Windows_GetFileMode(dwMode, dwAccess, dwShare, dwCreation);
+ m_hFile = ::CreateFileA(fileName.GetCStr(), dwAccess, dwShare, NULL,
+ dwCreation, FILE_ATTRIBUTE_NORMAL, NULL);
+ if (m_hFile == INVALID_HANDLE_VALUE) {
m_hFile = NULL;
-}
-void CFXCRT_FileAccess_Win64::Release()
-{
- delete this;
-}
-FX_FILESIZE CFXCRT_FileAccess_Win64::GetSize() const
-{
- if (!m_hFile) {
- return 0;
- }
- LARGE_INTEGER size = {};
- if (!::GetFileSizeEx(m_hFile, &size)) {
- return 0;
- }
- return (FX_FILESIZE)size.QuadPart;
-}
-FX_FILESIZE CFXCRT_FileAccess_Win64::GetPosition() const
-{
- if (!m_hFile) {
- return (FX_FILESIZE) - 1;
- }
- LARGE_INTEGER dist = {};
- LARGE_INTEGER newPos = {};
- if (!::SetFilePointerEx(m_hFile, dist, &newPos, FILE_CURRENT)) {
- return (FX_FILESIZE) - 1;
- }
- return (FX_FILESIZE)newPos.QuadPart;
-}
-FX_FILESIZE CFXCRT_FileAccess_Win64::SetPosition(FX_FILESIZE pos)
-{
- if (!m_hFile) {
- return (FX_FILESIZE) - 1;
- }
- LARGE_INTEGER dist;
- dist.QuadPart = pos;
- LARGE_INTEGER newPos = {};
- if (!::SetFilePointerEx(m_hFile, dist, &newPos, FILE_BEGIN)) {
- return (FX_FILESIZE) - 1;
- }
- return (FX_FILESIZE)newPos.QuadPart;
-}
-size_t CFXCRT_FileAccess_Win64::Read(void* pBuffer, size_t szBuffer)
-{
- if (!m_hFile) {
- return 0;
- }
- size_t szRead = 0;
- if (!::ReadFile(m_hFile, pBuffer, (DWORD)szBuffer, (LPDWORD)&szRead, NULL)) {
- return 0;
- }
- return szRead;
-}
-size_t CFXCRT_FileAccess_Win64::Write(const void* pBuffer, size_t szBuffer)
-{
- if (!m_hFile) {
- return 0;
- }
- size_t szWrite = 0;
- if (!::WriteFile(m_hFile, pBuffer, (DWORD)szBuffer, (LPDWORD)&szWrite, NULL)) {
- return 0;
- }
- return szWrite;
-}
-size_t CFXCRT_FileAccess_Win64::ReadPos(void* pBuffer, size_t szBuffer, FX_FILESIZE pos)
-{
- if (!m_hFile) {
- return 0;
- }
- if (pos >= GetSize()) {
- return 0;
- }
- if (SetPosition(pos) == (FX_FILESIZE) - 1) {
- return 0;
- }
- return Read(pBuffer, szBuffer);
-}
-size_t CFXCRT_FileAccess_Win64::WritePos(const void* pBuffer, size_t szBuffer, FX_FILESIZE pos)
-{
- if (!m_hFile) {
- return 0;
- }
- if (SetPosition(pos) == (FX_FILESIZE) - 1) {
- return 0;
- }
- return Write(pBuffer, szBuffer);
-}
-FX_BOOL CFXCRT_FileAccess_Win64::Flush()
-{
- if (!m_hFile) {
- return FALSE;
- }
- return ::FlushFileBuffers(m_hFile);
-}
-FX_BOOL CFXCRT_FileAccess_Win64::Truncate(FX_FILESIZE szFile)
-{
- if (SetPosition(szFile) == (FX_FILESIZE) - 1) {
- return FALSE;
- }
- return ::SetEndOfFile(m_hFile);
-}
-FX_BOOL FX_File_Delete(const CFX_ByteStringC& fileName)
-{
- return ::DeleteFileA(fileName.GetCStr());
-}
-FX_BOOL FX_File_Delete(const CFX_WideStringC& fileName)
-{
- return ::DeleteFileW((LPCWSTR)fileName.GetPtr());
-}
-FX_BOOL FX_File_Copy(const CFX_ByteStringC& fileNameSrc, const CFX_ByteStringC& fileNameDst)
-{
- return ::CopyFileA(fileNameSrc.GetCStr(), fileNameDst.GetCStr(), FALSE);
-}
-FX_BOOL FX_File_Copy(const CFX_WideStringC& fileNameSrc, const CFX_WideStringC& fileNameDst)
-{
- return ::CopyFileW((LPCWSTR)fileNameSrc.GetPtr(), (LPCWSTR)fileNameDst.GetPtr(), FALSE);
-}
-FX_BOOL FX_File_Move(const CFX_ByteStringC& fileNameSrc, const CFX_ByteStringC& fileNameDst)
-{
- return ::MoveFileA(fileNameSrc.GetCStr(), fileNameDst.GetCStr());
-}
-FX_BOOL FX_File_Move(const CFX_WideStringC& fileNameSrc, const CFX_WideStringC& fileNameDst)
-{
- return ::MoveFileW((LPCWSTR)fileNameSrc.GetPtr(), (LPCWSTR)fileNameDst.GetPtr());
+ }
+ return m_hFile != NULL;
+}
+FX_BOOL CFXCRT_FileAccess_Win64::Open(const CFX_WideStringC& fileName,
+ FX_DWORD dwMode) {
+ if (m_hFile) {
+ return FALSE;
+ }
+ FX_DWORD dwAccess, dwShare, dwCreation;
+ FXCRT_Windows_GetFileMode(dwMode, dwAccess, dwShare, dwCreation);
+ m_hFile = ::CreateFileW((LPCWSTR)fileName.GetPtr(), dwAccess, dwShare, NULL,
+ dwCreation, FILE_ATTRIBUTE_NORMAL, NULL);
+ if (m_hFile == INVALID_HANDLE_VALUE) {
+ m_hFile = NULL;
+ }
+ return m_hFile != NULL;
+}
+void CFXCRT_FileAccess_Win64::Close() {
+ if (!m_hFile) {
+ return;
+ }
+ ::CloseHandle(m_hFile);
+ m_hFile = NULL;
+}
+void CFXCRT_FileAccess_Win64::Release() {
+ delete this;
+}
+FX_FILESIZE CFXCRT_FileAccess_Win64::GetSize() const {
+ if (!m_hFile) {
+ return 0;
+ }
+ LARGE_INTEGER size = {};
+ if (!::GetFileSizeEx(m_hFile, &size)) {
+ return 0;
+ }
+ return (FX_FILESIZE)size.QuadPart;
+}
+FX_FILESIZE CFXCRT_FileAccess_Win64::GetPosition() const {
+ if (!m_hFile) {
+ return (FX_FILESIZE)-1;
+ }
+ LARGE_INTEGER dist = {};
+ LARGE_INTEGER newPos = {};
+ if (!::SetFilePointerEx(m_hFile, dist, &newPos, FILE_CURRENT)) {
+ return (FX_FILESIZE)-1;
+ }
+ return (FX_FILESIZE)newPos.QuadPart;
+}
+FX_FILESIZE CFXCRT_FileAccess_Win64::SetPosition(FX_FILESIZE pos) {
+ if (!m_hFile) {
+ return (FX_FILESIZE)-1;
+ }
+ LARGE_INTEGER dist;
+ dist.QuadPart = pos;
+ LARGE_INTEGER newPos = {};
+ if (!::SetFilePointerEx(m_hFile, dist, &newPos, FILE_BEGIN)) {
+ return (FX_FILESIZE)-1;
+ }
+ return (FX_FILESIZE)newPos.QuadPart;
+}
+size_t CFXCRT_FileAccess_Win64::Read(void* pBuffer, size_t szBuffer) {
+ if (!m_hFile) {
+ return 0;
+ }
+ size_t szRead = 0;
+ if (!::ReadFile(m_hFile, pBuffer, (DWORD)szBuffer, (LPDWORD)&szRead, NULL)) {
+ return 0;
+ }
+ return szRead;
+}
+size_t CFXCRT_FileAccess_Win64::Write(const void* pBuffer, size_t szBuffer) {
+ if (!m_hFile) {
+ return 0;
+ }
+ size_t szWrite = 0;
+ if (!::WriteFile(m_hFile, pBuffer, (DWORD)szBuffer, (LPDWORD)&szWrite,
+ NULL)) {
+ return 0;
+ }
+ return szWrite;
+}
+size_t CFXCRT_FileAccess_Win64::ReadPos(void* pBuffer,
+ size_t szBuffer,
+ FX_FILESIZE pos) {
+ if (!m_hFile) {
+ return 0;
+ }
+ if (pos >= GetSize()) {
+ return 0;
+ }
+ if (SetPosition(pos) == (FX_FILESIZE)-1) {
+ return 0;
+ }
+ return Read(pBuffer, szBuffer);
+}
+size_t CFXCRT_FileAccess_Win64::WritePos(const void* pBuffer,
+ size_t szBuffer,
+ FX_FILESIZE pos) {
+ if (!m_hFile) {
+ return 0;
+ }
+ if (SetPosition(pos) == (FX_FILESIZE)-1) {
+ return 0;
+ }
+ return Write(pBuffer, szBuffer);
+}
+FX_BOOL CFXCRT_FileAccess_Win64::Flush() {
+ if (!m_hFile) {
+ return FALSE;
+ }
+ return ::FlushFileBuffers(m_hFile);
+}
+FX_BOOL CFXCRT_FileAccess_Win64::Truncate(FX_FILESIZE szFile) {
+ if (SetPosition(szFile) == (FX_FILESIZE)-1) {
+ return FALSE;
+ }
+ return ::SetEndOfFile(m_hFile);
+}
+FX_BOOL FX_File_Delete(const CFX_ByteStringC& fileName) {
+ return ::DeleteFileA(fileName.GetCStr());
+}
+FX_BOOL FX_File_Delete(const CFX_WideStringC& fileName) {
+ return ::DeleteFileW((LPCWSTR)fileName.GetPtr());
+}
+FX_BOOL FX_File_Copy(const CFX_ByteStringC& fileNameSrc,
+ const CFX_ByteStringC& fileNameDst) {
+ return ::CopyFileA(fileNameSrc.GetCStr(), fileNameDst.GetCStr(), FALSE);
+}
+FX_BOOL FX_File_Copy(const CFX_WideStringC& fileNameSrc,
+ const CFX_WideStringC& fileNameDst) {
+ return ::CopyFileW((LPCWSTR)fileNameSrc.GetPtr(),
+ (LPCWSTR)fileNameDst.GetPtr(), FALSE);
+}
+FX_BOOL FX_File_Move(const CFX_ByteStringC& fileNameSrc,
+ const CFX_ByteStringC& fileNameDst) {
+ return ::MoveFileA(fileNameSrc.GetCStr(), fileNameDst.GetCStr());
+}
+FX_BOOL FX_File_Move(const CFX_WideStringC& fileNameSrc,
+ const CFX_WideStringC& fileNameDst) {
+ return ::MoveFileW((LPCWSTR)fileNameSrc.GetPtr(),
+ (LPCWSTR)fileNameDst.GetPtr());
}
#endif
diff --git a/core/src/fxcrt/fxcrt_windows.h b/core/src/fxcrt/fxcrt_windows.h
index 8dd2cddc82..bb00410e19 100644
--- a/core/src/fxcrt/fxcrt_windows.h
+++ b/core/src/fxcrt/fxcrt_windows.h
@@ -10,26 +10,28 @@
#include "extension.h"
#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
-class CFXCRT_FileAccess_Win64 : public IFXCRT_FileAccess
-{
-public:
- CFXCRT_FileAccess_Win64();
- virtual ~CFXCRT_FileAccess_Win64();
- virtual FX_BOOL Open(const CFX_ByteStringC& fileName, FX_DWORD dwMode);
- virtual FX_BOOL Open(const CFX_WideStringC& fileName, FX_DWORD dwMode);
- virtual void Close();
- virtual void Release();
- virtual FX_FILESIZE GetSize() const;
- virtual FX_FILESIZE GetPosition() const;
- virtual FX_FILESIZE SetPosition(FX_FILESIZE pos);
- virtual size_t Read(void* pBuffer, size_t szBuffer);
- virtual size_t Write(const void* pBuffer, size_t szBuffer);
- virtual size_t ReadPos(void* pBuffer, size_t szBuffer, FX_FILESIZE pos);
- virtual size_t WritePos(const void* pBuffer, size_t szBuffer, FX_FILESIZE pos);
- virtual FX_BOOL Flush();
- virtual FX_BOOL Truncate(FX_FILESIZE szFile);
-protected:
- void* m_hFile;
+class CFXCRT_FileAccess_Win64 : public IFXCRT_FileAccess {
+ public:
+ CFXCRT_FileAccess_Win64();
+ virtual ~CFXCRT_FileAccess_Win64();
+ virtual FX_BOOL Open(const CFX_ByteStringC& fileName, FX_DWORD dwMode);
+ virtual FX_BOOL Open(const CFX_WideStringC& fileName, FX_DWORD dwMode);
+ virtual void Close();
+ virtual void Release();
+ virtual FX_FILESIZE GetSize() const;
+ virtual FX_FILESIZE GetPosition() const;
+ virtual FX_FILESIZE SetPosition(FX_FILESIZE pos);
+ virtual size_t Read(void* pBuffer, size_t szBuffer);
+ virtual size_t Write(const void* pBuffer, size_t szBuffer);
+ virtual size_t ReadPos(void* pBuffer, size_t szBuffer, FX_FILESIZE pos);
+ virtual size_t WritePos(const void* pBuffer,
+ size_t szBuffer,
+ FX_FILESIZE pos);
+ virtual FX_BOOL Flush();
+ virtual FX_BOOL Truncate(FX_FILESIZE szFile);
+
+ protected:
+ void* m_hFile;
};
#endif
diff --git a/core/src/fxcrt/plex.h b/core/src/fxcrt/plex.h
index baf27f5368..d560406539 100644
--- a/core/src/fxcrt/plex.h
+++ b/core/src/fxcrt/plex.h
@@ -9,13 +9,10 @@
#include "../../include/fxcrt/fx_system.h"
struct CFX_Plex {
- CFX_Plex* pNext;
- void* data()
- {
- return this + 1;
- }
- static CFX_Plex* Create(CFX_Plex*& head, FX_DWORD nMax, FX_DWORD cbElement);
- void FreeDataChain();
+ CFX_Plex* pNext;
+ void* data() { return this + 1; }
+ static CFX_Plex* Create(CFX_Plex*& head, FX_DWORD nMax, FX_DWORD cbElement);
+ void FreeDataChain();
};
#endif // CORE_SRC_FXCRT_PLEX_H_
diff --git a/core/src/fxcrt/xml_int.h b/core/src/fxcrt/xml_int.h
index 109c7a43d2..1008436c84 100644
--- a/core/src/fxcrt/xml_int.h
+++ b/core/src/fxcrt/xml_int.h
@@ -9,157 +9,112 @@
#include "../../include/fxcrt/fx_stream.h"
-class CXML_DataBufAcc : public IFX_BufferRead
-{
-public:
- CXML_DataBufAcc(const uint8_t* pBuffer, size_t size)
- : m_pBuffer(pBuffer)
- , m_dwSize(size)
- , m_dwCurPos(0)
- {
- }
- virtual ~CXML_DataBufAcc() {}
- virtual void Release()
- {
- delete this;
- }
- virtual FX_BOOL IsEOF()
- {
- return m_dwCurPos >= m_dwSize;
- }
- virtual FX_FILESIZE GetPosition()
- {
- return (FX_FILESIZE)m_dwCurPos;
- }
- virtual size_t ReadBlock(void* buffer, size_t size)
- {
- return 0;
- }
- virtual FX_BOOL ReadNextBlock(FX_BOOL bRestart = FALSE)
- {
- if (bRestart) {
- m_dwCurPos = 0;
- }
- if (m_dwCurPos < m_dwSize) {
- m_dwCurPos = m_dwSize;
- return TRUE;
- }
- return FALSE;
- }
- virtual const uint8_t* GetBlockBuffer()
- {
- return m_pBuffer;
- }
- virtual size_t GetBlockSize()
- {
- return m_dwSize;
- }
- virtual FX_FILESIZE GetBlockOffset()
- {
- return 0;
- }
-protected:
- const uint8_t* m_pBuffer;
- size_t m_dwSize;
- size_t m_dwCurPos;
+class CXML_DataBufAcc : public IFX_BufferRead {
+ public:
+ CXML_DataBufAcc(const uint8_t* pBuffer, size_t size)
+ : m_pBuffer(pBuffer), m_dwSize(size), m_dwCurPos(0) {}
+ virtual ~CXML_DataBufAcc() {}
+ virtual void Release() { delete this; }
+ virtual FX_BOOL IsEOF() { return m_dwCurPos >= m_dwSize; }
+ virtual FX_FILESIZE GetPosition() { return (FX_FILESIZE)m_dwCurPos; }
+ virtual size_t ReadBlock(void* buffer, size_t size) { return 0; }
+ virtual FX_BOOL ReadNextBlock(FX_BOOL bRestart = FALSE) {
+ if (bRestart) {
+ m_dwCurPos = 0;
+ }
+ if (m_dwCurPos < m_dwSize) {
+ m_dwCurPos = m_dwSize;
+ return TRUE;
+ }
+ return FALSE;
+ }
+ virtual const uint8_t* GetBlockBuffer() { return m_pBuffer; }
+ virtual size_t GetBlockSize() { return m_dwSize; }
+ virtual FX_FILESIZE GetBlockOffset() { return 0; }
+
+ protected:
+ const uint8_t* m_pBuffer;
+ size_t m_dwSize;
+ size_t m_dwCurPos;
};
-#define FX_XMLDATASTREAM_BufferSize (32 * 1024)
-class CXML_DataStmAcc : public IFX_BufferRead
-{
-public:
- CXML_DataStmAcc(IFX_FileRead *pFileRead)
- : m_pFileRead(pFileRead)
- , m_pBuffer(NULL)
- , m_nStart(0)
- , m_dwSize(0)
- {
- FXSYS_assert(m_pFileRead != NULL);
- }
- virtual ~CXML_DataStmAcc()
- {
- if (m_pBuffer) {
- FX_Free(m_pBuffer);
- }
- }
- virtual void Release()
- {
- delete this;
- }
- virtual FX_BOOL IsEOF()
- {
- return m_nStart + (FX_FILESIZE)m_dwSize >= m_pFileRead->GetSize();
- }
- virtual FX_FILESIZE GetPosition()
- {
- return m_nStart + (FX_FILESIZE)m_dwSize;
- }
- virtual size_t ReadBlock(void* buffer, size_t size)
- {
- return 0;
- }
- virtual FX_BOOL ReadNextBlock(FX_BOOL bRestart = FALSE)
- {
- if (bRestart) {
- m_nStart = 0;
- }
- FX_FILESIZE nLength = m_pFileRead->GetSize();
- m_nStart += (FX_FILESIZE)m_dwSize;
- if (m_nStart >= nLength) {
- return FALSE;
- }
- m_dwSize = (size_t)FX_MIN(FX_XMLDATASTREAM_BufferSize, nLength - m_nStart);
- if (!m_pBuffer) {
- m_pBuffer = FX_Alloc(uint8_t, m_dwSize);
- }
- return m_pFileRead->ReadBlock(m_pBuffer, m_nStart, m_dwSize);
- }
- virtual const uint8_t* GetBlockBuffer()
- {
- return (const uint8_t*)m_pBuffer;
- }
- virtual size_t GetBlockSize()
- {
- return m_dwSize;
- }
- virtual FX_FILESIZE GetBlockOffset()
- {
- return m_nStart;
- }
-protected:
- IFX_FileRead *m_pFileRead;
- uint8_t* m_pBuffer;
- FX_FILESIZE m_nStart;
- size_t m_dwSize;
+#define FX_XMLDATASTREAM_BufferSize (32 * 1024)
+class CXML_DataStmAcc : public IFX_BufferRead {
+ public:
+ CXML_DataStmAcc(IFX_FileRead* pFileRead)
+ : m_pFileRead(pFileRead), m_pBuffer(NULL), m_nStart(0), m_dwSize(0) {
+ FXSYS_assert(m_pFileRead != NULL);
+ }
+ virtual ~CXML_DataStmAcc() {
+ if (m_pBuffer) {
+ FX_Free(m_pBuffer);
+ }
+ }
+ virtual void Release() { delete this; }
+ virtual FX_BOOL IsEOF() {
+ return m_nStart + (FX_FILESIZE)m_dwSize >= m_pFileRead->GetSize();
+ }
+ virtual FX_FILESIZE GetPosition() { return m_nStart + (FX_FILESIZE)m_dwSize; }
+ virtual size_t ReadBlock(void* buffer, size_t size) { return 0; }
+ virtual FX_BOOL ReadNextBlock(FX_BOOL bRestart = FALSE) {
+ if (bRestart) {
+ m_nStart = 0;
+ }
+ FX_FILESIZE nLength = m_pFileRead->GetSize();
+ m_nStart += (FX_FILESIZE)m_dwSize;
+ if (m_nStart >= nLength) {
+ return FALSE;
+ }
+ m_dwSize = (size_t)FX_MIN(FX_XMLDATASTREAM_BufferSize, nLength - m_nStart);
+ if (!m_pBuffer) {
+ m_pBuffer = FX_Alloc(uint8_t, m_dwSize);
+ }
+ return m_pFileRead->ReadBlock(m_pBuffer, m_nStart, m_dwSize);
+ }
+ virtual const uint8_t* GetBlockBuffer() { return (const uint8_t*)m_pBuffer; }
+ virtual size_t GetBlockSize() { return m_dwSize; }
+ virtual FX_FILESIZE GetBlockOffset() { return m_nStart; }
+
+ protected:
+ IFX_FileRead* m_pFileRead;
+ uint8_t* m_pBuffer;
+ FX_FILESIZE m_nStart;
+ size_t m_dwSize;
};
-class CXML_Parser
-{
-public:
- ~CXML_Parser();
- IFX_BufferRead* m_pDataAcc;
- FX_BOOL m_bOwnedStream;
- FX_FILESIZE m_nOffset;
- FX_BOOL m_bSaveSpaceChars;
- const uint8_t* m_pBuffer;
- size_t m_dwBufferSize;
- FX_FILESIZE m_nBufferOffset;
- size_t m_dwIndex;
- FX_BOOL Init(uint8_t* pBuffer, size_t size);
- FX_BOOL Init(IFX_FileRead *pFileRead);
- FX_BOOL Init(IFX_BufferRead *pBuffer);
- FX_BOOL Init(FX_BOOL bOwndedStream);
- FX_BOOL ReadNextBlock();
- FX_BOOL IsEOF();
- FX_BOOL HaveAvailData();
- void SkipWhiteSpaces();
- void GetName(CFX_ByteString& space, CFX_ByteString& name);
- void GetAttrValue(CFX_WideString &value);
- FX_DWORD GetCharRef();
- void GetTagName(CFX_ByteString &space, CFX_ByteString &name, FX_BOOL &bEndTag, FX_BOOL bStartTag = FALSE);
- void SkipLiterals(const CFX_ByteStringC& str);
- CXML_Element* ParseElement(CXML_Element* pParent, FX_BOOL bStartTag = FALSE);
- void InsertContentSegment(FX_BOOL bCDATA, const CFX_WideStringC& content, CXML_Element* pElement);
- void InsertCDATASegment(CFX_UTF8Decoder& decoder, CXML_Element* pElement);
+class CXML_Parser {
+ public:
+ ~CXML_Parser();
+ IFX_BufferRead* m_pDataAcc;
+ FX_BOOL m_bOwnedStream;
+ FX_FILESIZE m_nOffset;
+ FX_BOOL m_bSaveSpaceChars;
+ const uint8_t* m_pBuffer;
+ size_t m_dwBufferSize;
+ FX_FILESIZE m_nBufferOffset;
+ size_t m_dwIndex;
+ FX_BOOL Init(uint8_t* pBuffer, size_t size);
+ FX_BOOL Init(IFX_FileRead* pFileRead);
+ FX_BOOL Init(IFX_BufferRead* pBuffer);
+ FX_BOOL Init(FX_BOOL bOwndedStream);
+ FX_BOOL ReadNextBlock();
+ FX_BOOL IsEOF();
+ FX_BOOL HaveAvailData();
+ void SkipWhiteSpaces();
+ void GetName(CFX_ByteString& space, CFX_ByteString& name);
+ void GetAttrValue(CFX_WideString& value);
+ FX_DWORD GetCharRef();
+ void GetTagName(CFX_ByteString& space,
+ CFX_ByteString& name,
+ FX_BOOL& bEndTag,
+ FX_BOOL bStartTag = FALSE);
+ void SkipLiterals(const CFX_ByteStringC& str);
+ CXML_Element* ParseElement(CXML_Element* pParent, FX_BOOL bStartTag = FALSE);
+ void InsertContentSegment(FX_BOOL bCDATA,
+ const CFX_WideStringC& content,
+ CXML_Element* pElement);
+ void InsertCDATASegment(CFX_UTF8Decoder& decoder, CXML_Element* pElement);
};
-void FX_XML_SplitQualifiedName(const CFX_ByteStringC& bsFullName, CFX_ByteStringC &bsSpace, CFX_ByteStringC &bsName);
+void FX_XML_SplitQualifiedName(const CFX_ByteStringC& bsFullName,
+ CFX_ByteStringC& bsSpace,
+ CFX_ByteStringC& bsName);
#endif // CORE_SRC_FXCRT_XML_INT_H_
diff --git a/core/src/fxge/agg/include/fx_agg_driver.h b/core/src/fxge/agg/include/fx_agg_driver.h
index 29b56c77e4..2954526cd5 100644
--- a/core/src/fxge/agg/include/fx_agg_driver.h
+++ b/core/src/fxge/agg/include/fx_agg_driver.h
@@ -1,7 +1,7 @@
// Copyright 2014 PDFium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-
+
// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
#ifndef FX_AGG_DRIVER_H_
@@ -11,115 +11,146 @@
#include "../../../../../third_party/agg23/agg_path_storage.h"
#include "../../../../../third_party/agg23/agg_rasterizer_scanline_aa.h"
-class CAgg_PathData
-{
-public:
- CAgg_PathData() {}
- ~CAgg_PathData() {}
- FX_NAMESPACE_DECLARE(agg, path_storage) m_PathData;
- void BuildPath(const CFX_PathData* pPathData, const CFX_AffineMatrix* pObject2Device);
+class CAgg_PathData {
+ public:
+ CAgg_PathData() {}
+ ~CAgg_PathData() {}
+ FX_NAMESPACE_DECLARE(agg, path_storage) m_PathData;
+ void BuildPath(const CFX_PathData* pPathData,
+ const CFX_AffineMatrix* pObject2Device);
};
-class CFX_AggDeviceDriver : public IFX_RenderDeviceDriver
-{
-public:
- CFX_AggDeviceDriver(CFX_DIBitmap* pBitmap, int dither_bits, FX_BOOL bRgbByteOrder, CFX_DIBitmap* pOriDevice, FX_BOOL bGroupKnockout);
- virtual ~CFX_AggDeviceDriver();
- void InitPlatform();
- void DestroyPlatform();
-
-
- virtual int GetDeviceCaps(int caps_id);
-
-
- virtual void SaveState();
- virtual void RestoreState(FX_BOOL bKeepSaved);
-
-
- virtual FX_BOOL SetClip_PathFill(const CFX_PathData* pPathData,
- const CFX_AffineMatrix* pObject2Device,
- int fill_mode
- );
-
-
- virtual FX_BOOL SetClip_PathStroke(const CFX_PathData* pPathData,
- const CFX_AffineMatrix* pObject2Device,
- const CFX_GraphStateData* pGraphState
- );
-
-
- virtual FX_BOOL DrawPath(const CFX_PathData* pPathData,
+class CFX_AggDeviceDriver : public IFX_RenderDeviceDriver {
+ public:
+ CFX_AggDeviceDriver(CFX_DIBitmap* pBitmap,
+ int dither_bits,
+ FX_BOOL bRgbByteOrder,
+ CFX_DIBitmap* pOriDevice,
+ FX_BOOL bGroupKnockout);
+ virtual ~CFX_AggDeviceDriver();
+ void InitPlatform();
+ void DestroyPlatform();
+
+ virtual int GetDeviceCaps(int caps_id);
+
+ virtual void SaveState();
+ virtual void RestoreState(FX_BOOL bKeepSaved);
+
+ virtual FX_BOOL SetClip_PathFill(const CFX_PathData* pPathData,
+ const CFX_AffineMatrix* pObject2Device,
+ int fill_mode);
+
+ virtual FX_BOOL SetClip_PathStroke(const CFX_PathData* pPathData,
+ const CFX_AffineMatrix* pObject2Device,
+ const CFX_GraphStateData* pGraphState);
+
+ virtual FX_BOOL DrawPath(const CFX_PathData* pPathData,
+ const CFX_AffineMatrix* pObject2Device,
+ const CFX_GraphStateData* pGraphState,
+ FX_DWORD fill_color,
+ FX_DWORD stroke_color,
+ int fill_mode,
+ int alpha_flag,
+ void* pIccTransform,
+ int blend_type);
+
+ virtual FX_BOOL SetPixel(int x,
+ int y,
+ FX_DWORD color,
+ int alpha_flag,
+ void* pIccTransform);
+
+ virtual FX_BOOL FillRect(const FX_RECT* pRect,
+ FX_DWORD fill_color,
+ int alpha_flag,
+ void* pIccTransform,
+ int blend_type);
+
+ virtual FX_BOOL DrawCosmeticLine(FX_FLOAT x1,
+ FX_FLOAT y1,
+ FX_FLOAT x2,
+ FX_FLOAT y2,
+ FX_DWORD color,
+ int alpha_flag,
+ void* pIccTransform,
+ int blend_type) {
+ return FALSE;
+ }
+
+ virtual FX_BOOL GetClipBox(FX_RECT* pRect);
+
+ virtual FX_BOOL GetDIBits(CFX_DIBitmap* pBitmap,
+ int left,
+ int top,
+ void* pIccTransform = NULL,
+ FX_BOOL bDEdge = FALSE);
+ virtual CFX_DIBitmap* GetBackDrop() { return m_pOriDevice; }
+
+ virtual FX_BOOL SetDIBits(const CFX_DIBSource* pBitmap,
+ FX_DWORD color,
+ const FX_RECT* pSrcRect,
+ int left,
+ int top,
+ int blend_type,
+ int alpha_flag,
+ void* pIccTransform);
+ virtual FX_BOOL StretchDIBits(const CFX_DIBSource* pBitmap,
+ FX_DWORD color,
+ int dest_left,
+ int dest_top,
+ int dest_width,
+ int dest_height,
+ const FX_RECT* pClipRect,
+ FX_DWORD flags,
+ int alpha_flag,
+ void* pIccTransform,
+ int blend_type);
+
+ virtual FX_BOOL StartDIBits(const CFX_DIBSource* pBitmap,
+ int bitmap_alpha,
+ FX_DWORD color,
+ const CFX_AffineMatrix* pMatrix,
+ FX_DWORD flags,
+ void*& handle,
+ int alpha_flag,
+ void* pIccTransform,
+ int blend_type);
+ virtual FX_BOOL ContinueDIBits(void* handle, IFX_Pause* pPause);
+ virtual void CancelDIBits(void* handle);
+
+ virtual FX_BOOL DrawDeviceText(int nChars,
+ const FXTEXT_CHARPOS* pCharPos,
+ CFX_Font* pFont,
+ CFX_FontCache* pCache,
const CFX_AffineMatrix* pObject2Device,
- const CFX_GraphStateData* pGraphState,
- FX_DWORD fill_color,
- FX_DWORD stroke_color,
- int fill_mode,
+ FX_FLOAT font_size,
+ FX_DWORD color,
int alpha_flag,
- void* pIccTransform,
- int blend_type
- );
-
- virtual FX_BOOL SetPixel(int x, int y, FX_DWORD color,
- int alpha_flag, void* pIccTransform);
-
- virtual FX_BOOL FillRect(const FX_RECT* pRect,
- FX_DWORD fill_color, int alpha_flag, void* pIccTransform, int blend_type);
-
-
- virtual FX_BOOL DrawCosmeticLine(FX_FLOAT x1, FX_FLOAT y1, FX_FLOAT x2, FX_FLOAT y2, FX_DWORD color,
- int alpha_flag, void* pIccTransform, int blend_type)
- {
- return FALSE;
- }
-
- virtual FX_BOOL GetClipBox(FX_RECT* pRect);
-
-
- virtual FX_BOOL GetDIBits(CFX_DIBitmap* pBitmap, int left, int top, void* pIccTransform = NULL, FX_BOOL bDEdge = FALSE);
- virtual CFX_DIBitmap* GetBackDrop()
- {
- return m_pOriDevice;
- }
-
- virtual FX_BOOL SetDIBits(const CFX_DIBSource* pBitmap, FX_DWORD color, const FX_RECT* pSrcRect, int left, int top, int blend_type,
- int alpha_flag, void* pIccTransform);
- virtual FX_BOOL StretchDIBits(const CFX_DIBSource* pBitmap, FX_DWORD color, int dest_left, int dest_top,
- int dest_width, int dest_height, const FX_RECT* pClipRect, FX_DWORD flags,
- int alpha_flag, void* pIccTransform, int blend_type);
-
- virtual FX_BOOL StartDIBits(const CFX_DIBSource* pBitmap, int bitmap_alpha, FX_DWORD color,
- const CFX_AffineMatrix* pMatrix, FX_DWORD flags, void*& handle,
- int alpha_flag, void* pIccTransform, int blend_type);
- virtual FX_BOOL ContinueDIBits(void* handle, IFX_Pause* pPause);
- virtual void CancelDIBits(void* handle);
-
- virtual FX_BOOL DrawDeviceText(int nChars, const FXTEXT_CHARPOS* pCharPos, CFX_Font* pFont,
- CFX_FontCache* pCache, const CFX_AffineMatrix* pObject2Device, FX_FLOAT font_size, FX_DWORD color,
- int alpha_flag, void* pIccTransform);
- virtual FX_BOOL RenderRasterizer(FX_NAMESPACE_DECLARE(agg, rasterizer_scanline_aa)& rasterizer, FX_DWORD color, FX_BOOL bFullCover, FX_BOOL bGroupKnockout,
- int alpha_flag, void* pIccTransform);
-
- void SetClipMask(FX_NAMESPACE_DECLARE(agg, rasterizer_scanline_aa)& rasterizer);
-
- virtual uint8_t* GetBuffer() const
- {
- return m_pBitmap->GetBuffer();
- }
- virtual int GetDriverType()
- {
- return 1;
- }
-
- CFX_DIBitmap* m_pBitmap;
- CFX_ClipRgn* m_pClipRgn;
- CFX_PtrArray m_StateStack;
- void* m_pPlatformGraphics;
- void* m_pPlatformBitmap;
- void* m_pDwRenderTartget;
- int m_FillFlags;
- int m_DitherBits;
- FX_BOOL m_bRgbByteOrder;
- CFX_DIBitmap* m_pOriDevice;
- FX_BOOL m_bGroupKnockout;
+ void* pIccTransform);
+ virtual FX_BOOL RenderRasterizer(
+ FX_NAMESPACE_DECLARE(agg, rasterizer_scanline_aa) & rasterizer,
+ FX_DWORD color,
+ FX_BOOL bFullCover,
+ FX_BOOL bGroupKnockout,
+ int alpha_flag,
+ void* pIccTransform);
+
+ void SetClipMask(FX_NAMESPACE_DECLARE(agg, rasterizer_scanline_aa) &
+ rasterizer);
+
+ virtual uint8_t* GetBuffer() const { return m_pBitmap->GetBuffer(); }
+ virtual int GetDriverType() { return 1; }
+
+ CFX_DIBitmap* m_pBitmap;
+ CFX_ClipRgn* m_pClipRgn;
+ CFX_PtrArray m_StateStack;
+ void* m_pPlatformGraphics;
+ void* m_pPlatformBitmap;
+ void* m_pDwRenderTartget;
+ int m_FillFlags;
+ int m_DitherBits;
+ FX_BOOL m_bRgbByteOrder;
+ CFX_DIBitmap* m_pOriDevice;
+ FX_BOOL m_bGroupKnockout;
};
#endif // FX_AGG_DRIVER_H_
diff --git a/core/src/fxge/agg/src/fx_agg_driver.cpp b/core/src/fxge/agg/src/fx_agg_driver.cpp
index 118db7bf1f..fd3ea25096 100644
--- a/core/src/fxge/agg/src/fx_agg_driver.cpp
+++ b/core/src/fxge/agg/src/fx_agg_driver.cpp
@@ -1,7 +1,7 @@
// Copyright 2014 PDFium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-
+
// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
#include "../../../../include/fxge/fx_ge.h"
@@ -17,1105 +17,1191 @@
#include "../../../../../third_party/agg23/agg_conv_stroke.h"
#include "../../../../../third_party/agg23/agg_conv_dash.h"
#include "../include/fx_agg_driver.h"
-void _HardClip(FX_FLOAT& x, FX_FLOAT& y)
-{
- if (x > 50000) {
- x = 50000;
- }
- if (x < -50000) {
- x = -50000;
- }
- if (y > 50000) {
- y = 50000;
- }
- if (y < -50000) {
- y = -50000;
- }
+void _HardClip(FX_FLOAT& x, FX_FLOAT& y) {
+ if (x > 50000) {
+ x = 50000;
+ }
+ if (x < -50000) {
+ x = -50000;
+ }
+ if (y > 50000) {
+ y = 50000;
+ }
+ if (y < -50000) {
+ y = -50000;
+ }
}
-void CAgg_PathData::BuildPath(const CFX_PathData* pPathData, const CFX_AffineMatrix* pObject2Device)
-{
- int nPoints = pPathData->GetPointCount();
- FX_PATHPOINT* pPoints = pPathData->GetPoints();
- for (int i = 0; i < nPoints; i ++) {
- FX_FLOAT x = pPoints[i].m_PointX, y = pPoints[i].m_PointY;
- if (pObject2Device) {
- pObject2Device->Transform(x, y);
- }
- _HardClip(x, y);
- int point_type = pPoints[i].m_Flag & FXPT_TYPE;
- if (point_type == FXPT_MOVETO) {
- m_PathData.move_to(x, y);
- } else if (point_type == FXPT_LINETO) {
- if (pPoints[i - 1].m_Flag == FXPT_MOVETO && (i == nPoints - 1 || pPoints[i + 1].m_Flag == FXPT_MOVETO) &&
- pPoints[i].m_PointX == pPoints[i - 1].m_PointX && pPoints[i].m_PointY == pPoints[i - 1].m_PointY) {
- x += 1;
- }
- m_PathData.line_to(x, y);
- } else if (point_type == FXPT_BEZIERTO) {
- FX_FLOAT x0 = pPoints[i - 1].m_PointX, y0 = pPoints[i - 1].m_PointY;
- FX_FLOAT x2 = pPoints[i + 1].m_PointX, y2 = pPoints[i + 1].m_PointY;
- FX_FLOAT x3 = pPoints[i + 2].m_PointX, y3 = pPoints[i + 2].m_PointY;
- if (pObject2Device) {
- pObject2Device->Transform(x0, y0);
- pObject2Device->Transform(x2, y2);
- pObject2Device->Transform(x3, y3);
- }
- agg::curve4 curve(x0, y0, x, y, x2, y2, x3, y3);
- i += 2;
- m_PathData.add_path_curve(curve);
- }
- if (pPoints[i].m_Flag & FXPT_CLOSEFIGURE) {
- m_PathData.end_poly();
- }
- }
+void CAgg_PathData::BuildPath(const CFX_PathData* pPathData,
+ const CFX_AffineMatrix* pObject2Device) {
+ int nPoints = pPathData->GetPointCount();
+ FX_PATHPOINT* pPoints = pPathData->GetPoints();
+ for (int i = 0; i < nPoints; i++) {
+ FX_FLOAT x = pPoints[i].m_PointX, y = pPoints[i].m_PointY;
+ if (pObject2Device) {
+ pObject2Device->Transform(x, y);
+ }
+ _HardClip(x, y);
+ int point_type = pPoints[i].m_Flag & FXPT_TYPE;
+ if (point_type == FXPT_MOVETO) {
+ m_PathData.move_to(x, y);
+ } else if (point_type == FXPT_LINETO) {
+ if (pPoints[i - 1].m_Flag == FXPT_MOVETO &&
+ (i == nPoints - 1 || pPoints[i + 1].m_Flag == FXPT_MOVETO) &&
+ pPoints[i].m_PointX == pPoints[i - 1].m_PointX &&
+ pPoints[i].m_PointY == pPoints[i - 1].m_PointY) {
+ x += 1;
+ }
+ m_PathData.line_to(x, y);
+ } else if (point_type == FXPT_BEZIERTO) {
+ FX_FLOAT x0 = pPoints[i - 1].m_PointX, y0 = pPoints[i - 1].m_PointY;
+ FX_FLOAT x2 = pPoints[i + 1].m_PointX, y2 = pPoints[i + 1].m_PointY;
+ FX_FLOAT x3 = pPoints[i + 2].m_PointX, y3 = pPoints[i + 2].m_PointY;
+ if (pObject2Device) {
+ pObject2Device->Transform(x0, y0);
+ pObject2Device->Transform(x2, y2);
+ pObject2Device->Transform(x3, y3);
+ }
+ agg::curve4 curve(x0, y0, x, y, x2, y2, x3, y3);
+ i += 2;
+ m_PathData.add_path_curve(curve);
+ }
+ if (pPoints[i].m_Flag & FXPT_CLOSEFIGURE) {
+ m_PathData.end_poly();
+ }
+ }
}
-namespace agg
-{
-template<class BaseRenderer> class renderer_scanline_aa_offset
-{
-public:
- typedef BaseRenderer base_ren_type;
- typedef typename base_ren_type::color_type color_type;
- renderer_scanline_aa_offset(base_ren_type& ren, unsigned left, unsigned top) :
- m_ren(&ren), m_left(left), m_top(top)
- {}
- void color(const color_type& c)
- {
- m_color = c;
- }
- const color_type& color() const
- {
- return m_color;
- }
- void prepare(unsigned) {}
- template<class Scanline> void render(const Scanline& sl)
- {
- int y = sl.y();
- unsigned num_spans = sl.num_spans();
- typename Scanline::const_iterator span = sl.begin();
- for(;;) {
- int x = span->x;
- if(span->len > 0) {
- m_ren->blend_solid_hspan(x - m_left, y - m_top, (unsigned)span->len,
- m_color,
- span->covers);
- } else {
- m_ren->blend_hline(x - m_left, y - m_top, (unsigned)(x - span->len - 1),
- m_color,
- *(span->covers));
- }
- if(--num_spans == 0) {
- break;
- }
- ++span;
- }
- }
-private:
- base_ren_type* m_ren;
- color_type m_color;
- unsigned m_left, m_top;
+namespace agg {
+template <class BaseRenderer>
+class renderer_scanline_aa_offset {
+ public:
+ typedef BaseRenderer base_ren_type;
+ typedef typename base_ren_type::color_type color_type;
+ renderer_scanline_aa_offset(base_ren_type& ren, unsigned left, unsigned top)
+ : m_ren(&ren), m_left(left), m_top(top) {}
+ void color(const color_type& c) { m_color = c; }
+ const color_type& color() const { return m_color; }
+ void prepare(unsigned) {}
+ template <class Scanline>
+ void render(const Scanline& sl) {
+ int y = sl.y();
+ unsigned num_spans = sl.num_spans();
+ typename Scanline::const_iterator span = sl.begin();
+ for (;;) {
+ int x = span->x;
+ if (span->len > 0) {
+ m_ren->blend_solid_hspan(x - m_left, y - m_top, (unsigned)span->len,
+ m_color, span->covers);
+ } else {
+ m_ren->blend_hline(x - m_left, y - m_top, (unsigned)(x - span->len - 1),
+ m_color, *(span->covers));
+ }
+ if (--num_spans == 0) {
+ break;
+ }
+ ++span;
+ }
+ }
+
+ private:
+ base_ren_type* m_ren;
+ color_type m_color;
+ unsigned m_left, m_top;
};
}
-static void RasterizeStroke(agg::rasterizer_scanline_aa& rasterizer, agg::path_storage& path_data,
+static void RasterizeStroke(agg::rasterizer_scanline_aa& rasterizer,
+ agg::path_storage& path_data,
const CFX_AffineMatrix* pObject2Device,
- const CFX_GraphStateData* pGraphState, FX_FLOAT scale = 1.0f,
- FX_BOOL bStrokeAdjust = FALSE, FX_BOOL bTextMode = FALSE)
-{
- agg::line_cap_e cap;
- switch (pGraphState->m_LineCap) {
- case CFX_GraphStateData::LineCapRound:
- cap = agg::round_cap;
- break;
- case CFX_GraphStateData::LineCapSquare:
- cap = agg::square_cap;
- break;
- default:
- cap = agg::butt_cap;
- break;
- }
- agg::line_join_e join;
- switch (pGraphState->m_LineJoin) {
- case CFX_GraphStateData::LineJoinRound:
- join = agg::round_join;
- break;
- case CFX_GraphStateData::LineJoinBevel:
- join = agg::bevel_join;
- break;
- default:
- join = agg::miter_join_revert;
- break;
- }
- FX_FLOAT width = pGraphState->m_LineWidth * scale;
- FX_FLOAT unit = 1.f;
- if (pObject2Device) {
- unit = FXSYS_Div(1.0f, (pObject2Device->GetXUnit() + pObject2Device->GetYUnit()) / 2);
- }
- if (width < unit) {
- width = unit;
- }
- if (pGraphState->m_DashArray == NULL) {
- agg::conv_stroke<agg::path_storage> stroke(path_data);
- stroke.line_join(join);
- stroke.line_cap(cap);
- stroke.miter_limit(pGraphState->m_MiterLimit);
- stroke.width(width);
- rasterizer.add_path_transformed(stroke, pObject2Device);
- } else {
- typedef agg::conv_dash<agg::path_storage> dash_converter;
- dash_converter dash(path_data);
- for (int i = 0; i < (pGraphState->m_DashCount + 1) / 2; i ++) {
- FX_FLOAT on = pGraphState->m_DashArray[i * 2];
- if (on <= 0.000001f) {
- on = 1.0f / 10;
- }
- FX_FLOAT off = i * 2 + 1 == pGraphState->m_DashCount ? on :
- pGraphState->m_DashArray[i * 2 + 1];
- if (off < 0) {
- off = 0;
- }
- dash.add_dash(on * scale, off * scale);
- }
- dash.dash_start(pGraphState->m_DashPhase * scale);
- typedef agg::conv_stroke<dash_converter> dash_stroke;
- dash_stroke stroke(dash);
- stroke.line_join(join);
- stroke.line_cap(cap);
- stroke.miter_limit(pGraphState->m_MiterLimit);
- stroke.width(width);
- rasterizer.add_path_transformed(stroke, pObject2Device);
- }
-}
-IFX_RenderDeviceDriver* IFX_RenderDeviceDriver::CreateFxgeDriver(CFX_DIBitmap* pBitmap, FX_BOOL bRgbByteOrder, CFX_DIBitmap* pOriDevice, FX_BOOL bGroupKnockout)
-{
- return new CFX_AggDeviceDriver(pBitmap, 0, bRgbByteOrder, pOriDevice, bGroupKnockout);
-}
-CFX_AggDeviceDriver::CFX_AggDeviceDriver(CFX_DIBitmap* pBitmap, int dither_bits, FX_BOOL bRgbByteOrder, CFX_DIBitmap* pOriDevice, FX_BOOL bGroupKnockout)
-{
- m_pBitmap = pBitmap;
- m_DitherBits = dither_bits;
- m_pClipRgn = NULL;
- m_pPlatformBitmap = NULL;
- m_pPlatformGraphics = NULL;
- m_pDwRenderTartget = NULL;
- m_bRgbByteOrder = bRgbByteOrder;
- m_pOriDevice = pOriDevice;
- m_bGroupKnockout = bGroupKnockout;
- m_FillFlags = 0;
- InitPlatform();
+ const CFX_GraphStateData* pGraphState,
+ FX_FLOAT scale = 1.0f,
+ FX_BOOL bStrokeAdjust = FALSE,
+ FX_BOOL bTextMode = FALSE) {
+ agg::line_cap_e cap;
+ switch (pGraphState->m_LineCap) {
+ case CFX_GraphStateData::LineCapRound:
+ cap = agg::round_cap;
+ break;
+ case CFX_GraphStateData::LineCapSquare:
+ cap = agg::square_cap;
+ break;
+ default:
+ cap = agg::butt_cap;
+ break;
+ }
+ agg::line_join_e join;
+ switch (pGraphState->m_LineJoin) {
+ case CFX_GraphStateData::LineJoinRound:
+ join = agg::round_join;
+ break;
+ case CFX_GraphStateData::LineJoinBevel:
+ join = agg::bevel_join;
+ break;
+ default:
+ join = agg::miter_join_revert;
+ break;
+ }
+ FX_FLOAT width = pGraphState->m_LineWidth * scale;
+ FX_FLOAT unit = 1.f;
+ if (pObject2Device) {
+ unit = FXSYS_Div(
+ 1.0f, (pObject2Device->GetXUnit() + pObject2Device->GetYUnit()) / 2);
+ }
+ if (width < unit) {
+ width = unit;
+ }
+ if (pGraphState->m_DashArray == NULL) {
+ agg::conv_stroke<agg::path_storage> stroke(path_data);
+ stroke.line_join(join);
+ stroke.line_cap(cap);
+ stroke.miter_limit(pGraphState->m_MiterLimit);
+ stroke.width(width);
+ rasterizer.add_path_transformed(stroke, pObject2Device);
+ } else {
+ typedef agg::conv_dash<agg::path_storage> dash_converter;
+ dash_converter dash(path_data);
+ for (int i = 0; i < (pGraphState->m_DashCount + 1) / 2; i++) {
+ FX_FLOAT on = pGraphState->m_DashArray[i * 2];
+ if (on <= 0.000001f) {
+ on = 1.0f / 10;
+ }
+ FX_FLOAT off = i * 2 + 1 == pGraphState->m_DashCount
+ ? on
+ : pGraphState->m_DashArray[i * 2 + 1];
+ if (off < 0) {
+ off = 0;
+ }
+ dash.add_dash(on * scale, off * scale);
+ }
+ dash.dash_start(pGraphState->m_DashPhase * scale);
+ typedef agg::conv_stroke<dash_converter> dash_stroke;
+ dash_stroke stroke(dash);
+ stroke.line_join(join);
+ stroke.line_cap(cap);
+ stroke.miter_limit(pGraphState->m_MiterLimit);
+ stroke.width(width);
+ rasterizer.add_path_transformed(stroke, pObject2Device);
+ }
}
-CFX_AggDeviceDriver::~CFX_AggDeviceDriver()
-{
- delete m_pClipRgn;
- for (int i = 0; i < m_StateStack.GetSize(); i ++)
- delete (CFX_ClipRgn*)m_StateStack[i];
- DestroyPlatform();
+IFX_RenderDeviceDriver* IFX_RenderDeviceDriver::CreateFxgeDriver(
+ CFX_DIBitmap* pBitmap,
+ FX_BOOL bRgbByteOrder,
+ CFX_DIBitmap* pOriDevice,
+ FX_BOOL bGroupKnockout) {
+ return new CFX_AggDeviceDriver(pBitmap, 0, bRgbByteOrder, pOriDevice,
+ bGroupKnockout);
}
-#if _FXM_PLATFORM_ != _FXM_PLATFORM_APPLE_
-void CFX_AggDeviceDriver::InitPlatform()
-{
+CFX_AggDeviceDriver::CFX_AggDeviceDriver(CFX_DIBitmap* pBitmap,
+ int dither_bits,
+ FX_BOOL bRgbByteOrder,
+ CFX_DIBitmap* pOriDevice,
+ FX_BOOL bGroupKnockout) {
+ m_pBitmap = pBitmap;
+ m_DitherBits = dither_bits;
+ m_pClipRgn = NULL;
+ m_pPlatformBitmap = NULL;
+ m_pPlatformGraphics = NULL;
+ m_pDwRenderTartget = NULL;
+ m_bRgbByteOrder = bRgbByteOrder;
+ m_pOriDevice = pOriDevice;
+ m_bGroupKnockout = bGroupKnockout;
+ m_FillFlags = 0;
+ InitPlatform();
}
-void CFX_AggDeviceDriver::DestroyPlatform()
-{
+CFX_AggDeviceDriver::~CFX_AggDeviceDriver() {
+ delete m_pClipRgn;
+ for (int i = 0; i < m_StateStack.GetSize(); i++)
+ delete (CFX_ClipRgn*)m_StateStack[i];
+ DestroyPlatform();
}
-FX_BOOL CFX_AggDeviceDriver::DrawDeviceText(int nChars, const FXTEXT_CHARPOS* pCharPos, CFX_Font* pFont,
- CFX_FontCache* pCache, const CFX_AffineMatrix* pObject2Device, FX_FLOAT font_size, FX_DWORD color,
- int alpha_flag, void* pIccTransform)
-{
- return FALSE;
+#if _FXM_PLATFORM_ != _FXM_PLATFORM_APPLE_
+void CFX_AggDeviceDriver::InitPlatform() {}
+void CFX_AggDeviceDriver::DestroyPlatform() {}
+FX_BOOL CFX_AggDeviceDriver::DrawDeviceText(
+ int nChars,
+ const FXTEXT_CHARPOS* pCharPos,
+ CFX_Font* pFont,
+ CFX_FontCache* pCache,
+ const CFX_AffineMatrix* pObject2Device,
+ FX_FLOAT font_size,
+ FX_DWORD color,
+ int alpha_flag,
+ void* pIccTransform) {
+ return FALSE;
}
#endif
-int CFX_AggDeviceDriver::GetDeviceCaps(int caps_id)
-{
- switch (caps_id) {
- case FXDC_DEVICE_CLASS:
- return FXDC_DISPLAY;
- case FXDC_PIXEL_WIDTH:
- return m_pBitmap->GetWidth();
- case FXDC_PIXEL_HEIGHT:
- return m_pBitmap->GetHeight();
- case FXDC_BITS_PIXEL:
- return m_pBitmap->GetBPP();
- case FXDC_HORZ_SIZE:
- case FXDC_VERT_SIZE:
- return 0;
- case FXDC_RENDER_CAPS: {
- int flags = FXRC_GET_BITS | FXRC_ALPHA_PATH | FXRC_ALPHA_IMAGE | FXRC_BLEND_MODE | FXRC_SOFT_CLIP;
- if (m_pBitmap->HasAlpha()) {
- flags |= FXRC_ALPHA_OUTPUT;
- } else if (m_pBitmap->IsAlphaMask()) {
- if (m_pBitmap->GetBPP() == 1) {
- flags |= FXRC_BITMASK_OUTPUT;
- } else {
- flags |= FXRC_BYTEMASK_OUTPUT;
- }
- }
- if (m_pBitmap->IsCmykImage()) {
- flags |= FXRC_CMYK_OUTPUT;
- }
- return flags;
- }
- case FXDC_DITHER_BITS:
- return m_DitherBits;
- }
- return 0;
+int CFX_AggDeviceDriver::GetDeviceCaps(int caps_id) {
+ switch (caps_id) {
+ case FXDC_DEVICE_CLASS:
+ return FXDC_DISPLAY;
+ case FXDC_PIXEL_WIDTH:
+ return m_pBitmap->GetWidth();
+ case FXDC_PIXEL_HEIGHT:
+ return m_pBitmap->GetHeight();
+ case FXDC_BITS_PIXEL:
+ return m_pBitmap->GetBPP();
+ case FXDC_HORZ_SIZE:
+ case FXDC_VERT_SIZE:
+ return 0;
+ case FXDC_RENDER_CAPS: {
+ int flags = FXRC_GET_BITS | FXRC_ALPHA_PATH | FXRC_ALPHA_IMAGE |
+ FXRC_BLEND_MODE | FXRC_SOFT_CLIP;
+ if (m_pBitmap->HasAlpha()) {
+ flags |= FXRC_ALPHA_OUTPUT;
+ } else if (m_pBitmap->IsAlphaMask()) {
+ if (m_pBitmap->GetBPP() == 1) {
+ flags |= FXRC_BITMASK_OUTPUT;
+ } else {
+ flags |= FXRC_BYTEMASK_OUTPUT;
+ }
+ }
+ if (m_pBitmap->IsCmykImage()) {
+ flags |= FXRC_CMYK_OUTPUT;
+ }
+ return flags;
+ }
+ case FXDC_DITHER_BITS:
+ return m_DitherBits;
+ }
+ return 0;
}
-void CFX_AggDeviceDriver::SaveState()
-{
- void* pClip = NULL;
- if (m_pClipRgn) {
- pClip = new CFX_ClipRgn(*m_pClipRgn);
- }
- m_StateStack.Add(pClip);
+void CFX_AggDeviceDriver::SaveState() {
+ void* pClip = NULL;
+ if (m_pClipRgn) {
+ pClip = new CFX_ClipRgn(*m_pClipRgn);
+ }
+ m_StateStack.Add(pClip);
}
-void CFX_AggDeviceDriver::RestoreState(FX_BOOL bKeepSaved)
-{
- if (m_StateStack.GetSize() == 0) {
- delete m_pClipRgn;
- m_pClipRgn = NULL;
- return;
- }
- CFX_ClipRgn* pSavedClip = (CFX_ClipRgn*)m_StateStack[m_StateStack.GetSize() - 1];
+void CFX_AggDeviceDriver::RestoreState(FX_BOOL bKeepSaved) {
+ if (m_StateStack.GetSize() == 0) {
delete m_pClipRgn;
m_pClipRgn = NULL;
- if (bKeepSaved) {
- if (pSavedClip) {
- m_pClipRgn = new CFX_ClipRgn(*pSavedClip);
- }
- } else {
- m_StateStack.RemoveAt(m_StateStack.GetSize() - 1);
- m_pClipRgn = pSavedClip;
- }
+ return;
+ }
+ CFX_ClipRgn* pSavedClip =
+ (CFX_ClipRgn*)m_StateStack[m_StateStack.GetSize() - 1];
+ delete m_pClipRgn;
+ m_pClipRgn = NULL;
+ if (bKeepSaved) {
+ if (pSavedClip) {
+ m_pClipRgn = new CFX_ClipRgn(*pSavedClip);
+ }
+ } else {
+ m_StateStack.RemoveAt(m_StateStack.GetSize() - 1);
+ m_pClipRgn = pSavedClip;
+ }
}
-void CFX_AggDeviceDriver::SetClipMask(agg::rasterizer_scanline_aa& rasterizer)
-{
- FX_RECT path_rect(rasterizer.min_x(), rasterizer.min_y(),
- rasterizer.max_x() + 1, rasterizer.max_y() + 1);
- path_rect.Intersect(m_pClipRgn->GetBox());
- CFX_DIBitmapRef mask;
- CFX_DIBitmap* pThisLayer = mask.New();
- if (!pThisLayer) {
- return;
- }
- pThisLayer->Create(path_rect.Width(), path_rect.Height(), FXDIB_8bppMask);
- pThisLayer->Clear(0);
- agg::rendering_buffer raw_buf(pThisLayer->GetBuffer(), pThisLayer->GetWidth(), pThisLayer->GetHeight(), pThisLayer->GetPitch());
- agg::pixfmt_gray8 pixel_buf(raw_buf);
- agg::renderer_base<agg::pixfmt_gray8> base_buf(pixel_buf);
- agg::renderer_scanline_aa_offset<agg::renderer_base<agg::pixfmt_gray8> > final_render(base_buf, path_rect.left, path_rect.top);
- final_render.color(agg::gray8(255));
- agg::scanline_u8 scanline;
- agg::render_scanlines(rasterizer, scanline, final_render, (m_FillFlags & FXFILL_NOPATHSMOOTH) != 0);
- m_pClipRgn->IntersectMaskF(path_rect.left, path_rect.top, mask);
+void CFX_AggDeviceDriver::SetClipMask(agg::rasterizer_scanline_aa& rasterizer) {
+ FX_RECT path_rect(rasterizer.min_x(), rasterizer.min_y(),
+ rasterizer.max_x() + 1, rasterizer.max_y() + 1);
+ path_rect.Intersect(m_pClipRgn->GetBox());
+ CFX_DIBitmapRef mask;
+ CFX_DIBitmap* pThisLayer = mask.New();
+ if (!pThisLayer) {
+ return;
+ }
+ pThisLayer->Create(path_rect.Width(), path_rect.Height(), FXDIB_8bppMask);
+ pThisLayer->Clear(0);
+ agg::rendering_buffer raw_buf(pThisLayer->GetBuffer(), pThisLayer->GetWidth(),
+ pThisLayer->GetHeight(),
+ pThisLayer->GetPitch());
+ agg::pixfmt_gray8 pixel_buf(raw_buf);
+ agg::renderer_base<agg::pixfmt_gray8> base_buf(pixel_buf);
+ agg::renderer_scanline_aa_offset<agg::renderer_base<agg::pixfmt_gray8> >
+ final_render(base_buf, path_rect.left, path_rect.top);
+ final_render.color(agg::gray8(255));
+ agg::scanline_u8 scanline;
+ agg::render_scanlines(rasterizer, scanline, final_render,
+ (m_FillFlags & FXFILL_NOPATHSMOOTH) != 0);
+ m_pClipRgn->IntersectMaskF(path_rect.left, path_rect.top, mask);
}
-FX_BOOL CFX_AggDeviceDriver::SetClip_PathFill(const CFX_PathData* pPathData,
- const CFX_AffineMatrix* pObject2Device,
- int fill_mode
- )
-{
- m_FillFlags = fill_mode;
- if (m_pClipRgn == NULL) {
- m_pClipRgn = new CFX_ClipRgn(GetDeviceCaps(FXDC_PIXEL_WIDTH), GetDeviceCaps(FXDC_PIXEL_HEIGHT));
- }
- if (pPathData->GetPointCount() == 5 || pPathData->GetPointCount() == 4) {
- CFX_FloatRect rectf;
- if (pPathData->IsRect(pObject2Device, &rectf)) {
- rectf.Intersect(CFX_FloatRect(0, 0, (FX_FLOAT)GetDeviceCaps(FXDC_PIXEL_WIDTH), (FX_FLOAT)GetDeviceCaps(FXDC_PIXEL_HEIGHT)));
- FX_RECT rect = rectf.GetOutterRect();
- m_pClipRgn->IntersectRect(rect);
- return TRUE;
- }
- }
- CAgg_PathData path_data;
- path_data.BuildPath(pPathData, pObject2Device);
- path_data.m_PathData.end_poly();
- agg::rasterizer_scanline_aa rasterizer;
- rasterizer.clip_box(0.0f, 0.0f, (FX_FLOAT)(GetDeviceCaps(FXDC_PIXEL_WIDTH)), (FX_FLOAT)(GetDeviceCaps(FXDC_PIXEL_HEIGHT)));
- rasterizer.add_path(path_data.m_PathData);
- rasterizer.filling_rule((fill_mode & 3) == FXFILL_WINDING ? agg::fill_non_zero : agg::fill_even_odd);
- SetClipMask(rasterizer);
- return TRUE;
+FX_BOOL CFX_AggDeviceDriver::SetClip_PathFill(
+ const CFX_PathData* pPathData,
+ const CFX_AffineMatrix* pObject2Device,
+ int fill_mode) {
+ m_FillFlags = fill_mode;
+ if (m_pClipRgn == NULL) {
+ m_pClipRgn = new CFX_ClipRgn(GetDeviceCaps(FXDC_PIXEL_WIDTH),
+ GetDeviceCaps(FXDC_PIXEL_HEIGHT));
+ }
+ if (pPathData->GetPointCount() == 5 || pPathData->GetPointCount() == 4) {
+ CFX_FloatRect rectf;
+ if (pPathData->IsRect(pObject2Device, &rectf)) {
+ rectf.Intersect(
+ CFX_FloatRect(0, 0, (FX_FLOAT)GetDeviceCaps(FXDC_PIXEL_WIDTH),
+ (FX_FLOAT)GetDeviceCaps(FXDC_PIXEL_HEIGHT)));
+ FX_RECT rect = rectf.GetOutterRect();
+ m_pClipRgn->IntersectRect(rect);
+ return TRUE;
+ }
+ }
+ CAgg_PathData path_data;
+ path_data.BuildPath(pPathData, pObject2Device);
+ path_data.m_PathData.end_poly();
+ agg::rasterizer_scanline_aa rasterizer;
+ rasterizer.clip_box(0.0f, 0.0f, (FX_FLOAT)(GetDeviceCaps(FXDC_PIXEL_WIDTH)),
+ (FX_FLOAT)(GetDeviceCaps(FXDC_PIXEL_HEIGHT)));
+ rasterizer.add_path(path_data.m_PathData);
+ rasterizer.filling_rule((fill_mode & 3) == FXFILL_WINDING
+ ? agg::fill_non_zero
+ : agg::fill_even_odd);
+ SetClipMask(rasterizer);
+ return TRUE;
}
-FX_BOOL CFX_AggDeviceDriver::SetClip_PathStroke(const CFX_PathData* pPathData,
- const CFX_AffineMatrix* pObject2Device,
- const CFX_GraphStateData* pGraphState
- )
-{
- if (m_pClipRgn == NULL) {
- m_pClipRgn = new CFX_ClipRgn(GetDeviceCaps(FXDC_PIXEL_WIDTH), GetDeviceCaps(FXDC_PIXEL_HEIGHT));
- }
- CAgg_PathData path_data;
- path_data.BuildPath(pPathData, NULL);
- agg::rasterizer_scanline_aa rasterizer;
- rasterizer.clip_box(0.0f, 0.0f, (FX_FLOAT)(GetDeviceCaps(FXDC_PIXEL_WIDTH)), (FX_FLOAT)(GetDeviceCaps(FXDC_PIXEL_HEIGHT)));
- RasterizeStroke(rasterizer, path_data.m_PathData, pObject2Device, pGraphState);
- rasterizer.filling_rule(agg::fill_non_zero);
- SetClipMask(rasterizer);
- return TRUE;
+FX_BOOL CFX_AggDeviceDriver::SetClip_PathStroke(
+ const CFX_PathData* pPathData,
+ const CFX_AffineMatrix* pObject2Device,
+ const CFX_GraphStateData* pGraphState) {
+ if (m_pClipRgn == NULL) {
+ m_pClipRgn = new CFX_ClipRgn(GetDeviceCaps(FXDC_PIXEL_WIDTH),
+ GetDeviceCaps(FXDC_PIXEL_HEIGHT));
+ }
+ CAgg_PathData path_data;
+ path_data.BuildPath(pPathData, NULL);
+ agg::rasterizer_scanline_aa rasterizer;
+ rasterizer.clip_box(0.0f, 0.0f, (FX_FLOAT)(GetDeviceCaps(FXDC_PIXEL_WIDTH)),
+ (FX_FLOAT)(GetDeviceCaps(FXDC_PIXEL_HEIGHT)));
+ RasterizeStroke(rasterizer, path_data.m_PathData, pObject2Device,
+ pGraphState);
+ rasterizer.filling_rule(agg::fill_non_zero);
+ SetClipMask(rasterizer);
+ return TRUE;
}
-class CFX_Renderer
-{
-private:
- int m_Alpha,
- m_Red,
- m_Green,
- m_Blue,
- m_Gray;
- FX_DWORD m_Color;
- FX_BOOL m_bFullCover;
- FX_BOOL m_bRgbByteOrder;
- CFX_DIBitmap* m_pOriDevice;
- FX_RECT m_ClipBox;
- const CFX_DIBitmap* m_pClipMask;
- CFX_DIBitmap* m_pDevice;
- const CFX_ClipRgn* m_pClipRgn;
- void (CFX_Renderer::*composite_span)(uint8_t*, int, int, int, uint8_t*, int, int, uint8_t*, uint8_t*);
-public:
- void prepare(unsigned) {}
- void CompositeSpan(uint8_t* dest_scan, uint8_t* ori_scan, int Bpp, FX_BOOL bDestAlpha,
- int span_left, int span_len, uint8_t* cover_scan,
- int clip_left, int clip_right, uint8_t* clip_scan)
- {
- ASSERT(!m_pDevice->IsCmykImage());
- int col_start = span_left < clip_left ? clip_left - span_left : 0;
- int col_end = (span_left + span_len) < clip_right ? span_len : (clip_right - span_left);
- if (Bpp) {
- dest_scan += col_start * Bpp;
- ori_scan += col_start * Bpp;
- } else {
- dest_scan += col_start / 8;
- ori_scan += col_start / 8;
+class CFX_Renderer {
+ private:
+ int m_Alpha, m_Red, m_Green, m_Blue, m_Gray;
+ FX_DWORD m_Color;
+ FX_BOOL m_bFullCover;
+ FX_BOOL m_bRgbByteOrder;
+ CFX_DIBitmap* m_pOriDevice;
+ FX_RECT m_ClipBox;
+ const CFX_DIBitmap* m_pClipMask;
+ CFX_DIBitmap* m_pDevice;
+ const CFX_ClipRgn* m_pClipRgn;
+ void (CFX_Renderer::*composite_span)(uint8_t*,
+ int,
+ int,
+ int,
+ uint8_t*,
+ int,
+ int,
+ uint8_t*,
+ uint8_t*);
+
+ public:
+ void prepare(unsigned) {}
+ void CompositeSpan(uint8_t* dest_scan,
+ uint8_t* ori_scan,
+ int Bpp,
+ FX_BOOL bDestAlpha,
+ int span_left,
+ int span_len,
+ uint8_t* cover_scan,
+ int clip_left,
+ int clip_right,
+ uint8_t* clip_scan) {
+ ASSERT(!m_pDevice->IsCmykImage());
+ int col_start = span_left < clip_left ? clip_left - span_left : 0;
+ int col_end = (span_left + span_len) < clip_right
+ ? span_len
+ : (clip_right - span_left);
+ if (Bpp) {
+ dest_scan += col_start * Bpp;
+ ori_scan += col_start * Bpp;
+ } else {
+ dest_scan += col_start / 8;
+ ori_scan += col_start / 8;
+ }
+ if (m_bRgbByteOrder) {
+ if (Bpp == 4 && bDestAlpha) {
+ for (int col = col_start; col < col_end; col++) {
+ int src_alpha;
+ if (clip_scan) {
+ src_alpha = m_Alpha * clip_scan[col] / 255;
+ } else {
+ src_alpha = m_Alpha;
+ }
+ uint8_t dest_alpha =
+ ori_scan[3] + src_alpha - ori_scan[3] * src_alpha / 255;
+ dest_scan[3] = dest_alpha;
+ int alpha_ratio = src_alpha * 255 / dest_alpha;
+ if (m_bFullCover) {
+ *dest_scan++ = FXDIB_ALPHA_MERGE(*ori_scan++, m_Red, alpha_ratio);
+ *dest_scan++ = FXDIB_ALPHA_MERGE(*ori_scan++, m_Green, alpha_ratio);
+ *dest_scan++ = FXDIB_ALPHA_MERGE(*ori_scan++, m_Blue, alpha_ratio);
+ dest_scan++;
+ ori_scan++;
+ } else {
+ int r = FXDIB_ALPHA_MERGE(*ori_scan++, m_Red, alpha_ratio);
+ int g = FXDIB_ALPHA_MERGE(*ori_scan++, m_Green, alpha_ratio);
+ int b = FXDIB_ALPHA_MERGE(*ori_scan++, m_Blue, alpha_ratio);
+ ori_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, r, cover_scan[col]);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, g, cover_scan[col]);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, b, cover_scan[col]);
+ dest_scan += 2;
+ }
}
- if (m_bRgbByteOrder) {
- if (Bpp == 4 && bDestAlpha) {
- for (int col = col_start; col < col_end; col ++) {
- int src_alpha;
- if (clip_scan) {
- src_alpha = m_Alpha * clip_scan[col] / 255;
- } else {
- src_alpha = m_Alpha;
- }
- uint8_t dest_alpha = ori_scan[3] + src_alpha - ori_scan[3] * src_alpha / 255;
- dest_scan[3] = dest_alpha;
- int alpha_ratio = src_alpha * 255 / dest_alpha;
- if (m_bFullCover) {
- *dest_scan++ = FXDIB_ALPHA_MERGE(*ori_scan++, m_Red, alpha_ratio);
- *dest_scan++ = FXDIB_ALPHA_MERGE(*ori_scan++, m_Green, alpha_ratio);
- *dest_scan++ = FXDIB_ALPHA_MERGE(*ori_scan++, m_Blue, alpha_ratio);
- dest_scan++;
- ori_scan++;
- } else {
- int r = FXDIB_ALPHA_MERGE(*ori_scan++, m_Red, alpha_ratio);
- int g = FXDIB_ALPHA_MERGE(*ori_scan++, m_Green, alpha_ratio);
- int b = FXDIB_ALPHA_MERGE(*ori_scan++, m_Blue, alpha_ratio);
- ori_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE( *dest_scan, r, cover_scan[col]);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, g, cover_scan[col]);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, b, cover_scan[col]);
- dest_scan += 2;
- }
- }
- return;
- }
- if (Bpp == 3 || Bpp == 4) {
- for (int col = col_start; col < col_end; col ++) {
- int src_alpha;
- if (clip_scan) {
- src_alpha = m_Alpha * clip_scan[col] / 255 ;
- } else {
- src_alpha = m_Alpha;
- }
- int r = FXDIB_ALPHA_MERGE(*ori_scan++, m_Red, src_alpha);
- int g = FXDIB_ALPHA_MERGE(*ori_scan++, m_Green, src_alpha);
- int b = FXDIB_ALPHA_MERGE(*ori_scan, m_Blue, src_alpha);
- ori_scan += Bpp - 2;
- *dest_scan = FXDIB_ALPHA_MERGE( *dest_scan, r, cover_scan[col]);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, g, cover_scan[col]);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, b, cover_scan[col]);
- dest_scan += Bpp - 2;
- }
- }
- return;
+ return;
+ }
+ if (Bpp == 3 || Bpp == 4) {
+ for (int col = col_start; col < col_end; col++) {
+ int src_alpha;
+ if (clip_scan) {
+ src_alpha = m_Alpha * clip_scan[col] / 255;
+ } else {
+ src_alpha = m_Alpha;
+ }
+ int r = FXDIB_ALPHA_MERGE(*ori_scan++, m_Red, src_alpha);
+ int g = FXDIB_ALPHA_MERGE(*ori_scan++, m_Green, src_alpha);
+ int b = FXDIB_ALPHA_MERGE(*ori_scan, m_Blue, src_alpha);
+ ori_scan += Bpp - 2;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, r, cover_scan[col]);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, g, cover_scan[col]);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, b, cover_scan[col]);
+ dest_scan += Bpp - 2;
}
- if (Bpp == 4 && bDestAlpha) {
- for (int col = col_start; col < col_end; col ++) {
- int src_alpha;
- if (clip_scan) {
- src_alpha = m_Alpha * clip_scan[col] / 255;
- } else {
- src_alpha = m_Alpha;
- }
- int src_alpha_covered = src_alpha * cover_scan[col] / 255;
- if (src_alpha_covered == 0) {
- dest_scan += 4;
- continue;
- }
- if (cover_scan[col] == 255) {
- dest_scan[3] = src_alpha_covered;
- *dest_scan ++ = m_Blue;
- *dest_scan ++ = m_Green;
- *dest_scan = m_Red;
- dest_scan += 2;
- continue;
- } else {
- if (dest_scan[3] == 0) {
- dest_scan[3] = src_alpha_covered;
- *dest_scan ++ = m_Blue;
- *dest_scan ++ = m_Green;
- *dest_scan = m_Red;
- dest_scan += 2;
- continue;
- }
- uint8_t cover = cover_scan[col];
- dest_scan[3] = FXDIB_ALPHA_MERGE(dest_scan[3], src_alpha, cover);
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Blue, cover);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Green, cover);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Red, cover);
- dest_scan += 2;
- }
- }
- return;
+ }
+ return;
+ }
+ if (Bpp == 4 && bDestAlpha) {
+ for (int col = col_start; col < col_end; col++) {
+ int src_alpha;
+ if (clip_scan) {
+ src_alpha = m_Alpha * clip_scan[col] / 255;
+ } else {
+ src_alpha = m_Alpha;
}
- if (Bpp == 3 || Bpp == 4) {
- for (int col = col_start; col < col_end; col ++) {
- int src_alpha;
- if (clip_scan) {
- src_alpha = m_Alpha * clip_scan[col] / 255;
- } else {
- src_alpha = m_Alpha;
- }
- if (m_bFullCover) {
- *dest_scan++ = FXDIB_ALPHA_MERGE(*ori_scan++, m_Blue, src_alpha);
- *dest_scan++ = FXDIB_ALPHA_MERGE(*ori_scan++, m_Green, src_alpha);
- *dest_scan = FXDIB_ALPHA_MERGE(*ori_scan, m_Red, src_alpha);
- dest_scan += Bpp - 2;
- ori_scan += Bpp - 2;
- continue;
- }
- int b = FXDIB_ALPHA_MERGE(*ori_scan++, m_Blue, src_alpha);
- int g = FXDIB_ALPHA_MERGE(*ori_scan++, m_Green, src_alpha);
- int r = FXDIB_ALPHA_MERGE(*ori_scan, m_Red, src_alpha);
- ori_scan += Bpp - 2;
- *dest_scan = FXDIB_ALPHA_MERGE( *dest_scan, b, cover_scan[col]);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, g, cover_scan[col]);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, r, cover_scan[col]);
- dest_scan += Bpp - 2;
- continue;
- }
- return;
+ int src_alpha_covered = src_alpha * cover_scan[col] / 255;
+ if (src_alpha_covered == 0) {
+ dest_scan += 4;
+ continue;
}
- if (Bpp == 1) {
- for (int col = col_start; col < col_end; col ++) {
- int src_alpha;
- if (clip_scan) {
- src_alpha = m_Alpha * clip_scan[col] / 255;
- } else {
- src_alpha = m_Alpha;
- }
- if (m_bFullCover) {
- *dest_scan = FXDIB_ALPHA_MERGE(*ori_scan++, m_Gray, src_alpha);
- } else {
- int gray = FXDIB_ALPHA_MERGE(*ori_scan++, m_Gray, src_alpha);
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, cover_scan[col]);
- dest_scan++;
- }
- }
+ if (cover_scan[col] == 255) {
+ dest_scan[3] = src_alpha_covered;
+ *dest_scan++ = m_Blue;
+ *dest_scan++ = m_Green;
+ *dest_scan = m_Red;
+ dest_scan += 2;
+ continue;
} else {
- int index = 0;
- if (m_pDevice->GetPalette() == NULL) {
- index = ((uint8_t)m_Color == 0xff) ? 1 : 0;
- } else {
- for (int i = 0; i < 2; i ++)
- if (FXARGB_TODIB(m_pDevice->GetPalette()[i]) == m_Color) {
- index = i;
- }
- }
- uint8_t* dest_scan1 = dest_scan;
- for (int col = col_start; col < col_end; col ++) {
- int src_alpha;
- if (clip_scan) {
- src_alpha = m_Alpha * cover_scan[col] * clip_scan[col] / 255 / 255;
- } else {
- src_alpha = m_Alpha * cover_scan[col] / 255;
- }
- if (src_alpha) {
- if (!index) {
- *dest_scan1 &= ~(1 << (7 - (col + span_left) % 8));
- } else {
- *dest_scan1 |= 1 << (7 - (col + span_left) % 8);
- }
- }
- dest_scan1 = dest_scan + (span_left % 8 + col - col_start + 1) / 8;
- }
+ if (dest_scan[3] == 0) {
+ dest_scan[3] = src_alpha_covered;
+ *dest_scan++ = m_Blue;
+ *dest_scan++ = m_Green;
+ *dest_scan = m_Red;
+ dest_scan += 2;
+ continue;
+ }
+ uint8_t cover = cover_scan[col];
+ dest_scan[3] = FXDIB_ALPHA_MERGE(dest_scan[3], src_alpha, cover);
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Blue, cover);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Green, cover);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Red, cover);
+ dest_scan += 2;
}
- }
- void CompositeSpan1bpp(uint8_t* dest_scan, int Bpp,
- int span_left, int span_len, uint8_t* cover_scan,
- int clip_left, int clip_right, uint8_t* clip_scan,
- uint8_t* dest_extra_alpha_scan)
- {
- ASSERT(!m_bRgbByteOrder);
- ASSERT(!m_pDevice->IsCmykImage());
- int col_start = span_left < clip_left ? clip_left - span_left : 0;
- int col_end = (span_left + span_len) < clip_right ? span_len : (clip_right - span_left);
- dest_scan += col_start / 8;
- int index = 0;
- if (m_pDevice->GetPalette() == NULL) {
- index = ((uint8_t)m_Color == 0xff) ? 1 : 0;
+ }
+ return;
+ }
+ if (Bpp == 3 || Bpp == 4) {
+ for (int col = col_start; col < col_end; col++) {
+ int src_alpha;
+ if (clip_scan) {
+ src_alpha = m_Alpha * clip_scan[col] / 255;
} else {
- for (int i = 0; i < 2; i ++)
- if (FXARGB_TODIB(m_pDevice->GetPalette()[i]) == m_Color) {
- index = i;
- }
+ src_alpha = m_Alpha;
}
- uint8_t* dest_scan1 = dest_scan;
- for (int col = col_start; col < col_end; col ++) {
- int src_alpha;
- if (clip_scan) {
- src_alpha = m_Alpha * cover_scan[col] * clip_scan[col] / 255 / 255;
- } else {
- src_alpha = m_Alpha * cover_scan[col] / 255;
- }
- if (src_alpha) {
- if (!index) {
- *dest_scan1 &= ~(1 << (7 - (col + span_left) % 8));
- } else {
- *dest_scan1 |= 1 << (7 - (col + span_left) % 8);
- }
- }
- dest_scan1 = dest_scan + (span_left % 8 + col - col_start + 1) / 8;
+ if (m_bFullCover) {
+ *dest_scan++ = FXDIB_ALPHA_MERGE(*ori_scan++, m_Blue, src_alpha);
+ *dest_scan++ = FXDIB_ALPHA_MERGE(*ori_scan++, m_Green, src_alpha);
+ *dest_scan = FXDIB_ALPHA_MERGE(*ori_scan, m_Red, src_alpha);
+ dest_scan += Bpp - 2;
+ ori_scan += Bpp - 2;
+ continue;
}
- }
- void CompositeSpanGray(uint8_t* dest_scan, int Bpp,
- int span_left, int span_len, uint8_t* cover_scan,
- int clip_left, int clip_right, uint8_t* clip_scan,
- uint8_t* dest_extra_alpha_scan)
- {
- ASSERT(!m_bRgbByteOrder);
- int col_start = span_left < clip_left ? clip_left - span_left : 0;
- int col_end = (span_left + span_len) < clip_right ? span_len : (clip_right - span_left);
- dest_scan += col_start;
- if (dest_extra_alpha_scan) {
- for (int col = col_start; col < col_end; col ++) {
- int src_alpha;
- if (m_bFullCover) {
- if (clip_scan) {
- src_alpha = m_Alpha * clip_scan[col] / 255;
- } else {
- src_alpha = m_Alpha;
- }
- } else {
- if (clip_scan) {
- src_alpha = m_Alpha * cover_scan[col] * clip_scan[col] / 255 / 255;
- } else {
- src_alpha = m_Alpha * cover_scan[col] / 255;
- }
- }
- if (src_alpha) {
- if (src_alpha == 255) {
- *dest_scan = m_Gray;
- *dest_extra_alpha_scan = m_Alpha;
- } else {
- uint8_t dest_alpha = (*dest_extra_alpha_scan) + src_alpha -
- (*dest_extra_alpha_scan) * src_alpha / 255;
- *dest_extra_alpha_scan++ = dest_alpha;
- int alpha_ratio = src_alpha * 255 / dest_alpha;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Gray, alpha_ratio);
- dest_scan ++;
- continue;
- }
- }
- dest_extra_alpha_scan ++;
- dest_scan ++;
- }
+ int b = FXDIB_ALPHA_MERGE(*ori_scan++, m_Blue, src_alpha);
+ int g = FXDIB_ALPHA_MERGE(*ori_scan++, m_Green, src_alpha);
+ int r = FXDIB_ALPHA_MERGE(*ori_scan, m_Red, src_alpha);
+ ori_scan += Bpp - 2;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, b, cover_scan[col]);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, g, cover_scan[col]);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, r, cover_scan[col]);
+ dest_scan += Bpp - 2;
+ continue;
+ }
+ return;
+ }
+ if (Bpp == 1) {
+ for (int col = col_start; col < col_end; col++) {
+ int src_alpha;
+ if (clip_scan) {
+ src_alpha = m_Alpha * clip_scan[col] / 255;
} else {
- for (int col = col_start; col < col_end; col ++) {
- int src_alpha;
- if (clip_scan) {
- src_alpha = m_Alpha * cover_scan[col] * clip_scan[col] / 255 / 255;
- } else {
- src_alpha = m_Alpha * cover_scan[col] / 255;
- }
- if (src_alpha) {
- if (src_alpha == 255) {
- *dest_scan = m_Gray;
- } else {
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Gray, src_alpha);
- }
- }
- dest_scan ++;
- }
+ src_alpha = m_Alpha;
}
- }
- void CompositeSpanARGB(uint8_t* dest_scan, int Bpp,
- int span_left, int span_len, uint8_t* cover_scan,
- int clip_left, int clip_right, uint8_t* clip_scan,
- uint8_t* dest_extra_alpha_scan)
- {
- int col_start = span_left < clip_left ? clip_left - span_left : 0;
- int col_end = (span_left + span_len) < clip_right ? span_len : (clip_right - span_left);
- dest_scan += col_start * Bpp;
- if (m_bRgbByteOrder) {
- for (int col = col_start; col < col_end; col ++) {
- int src_alpha;
- if (m_bFullCover) {
- if (clip_scan) {
- src_alpha = m_Alpha * clip_scan[col] / 255;
- } else {
- src_alpha = m_Alpha;
- }
- } else {
- if (clip_scan) {
- src_alpha = m_Alpha * cover_scan[col] * clip_scan[col] / 255 / 255;
- } else {
- src_alpha = m_Alpha * cover_scan[col] / 255;
- }
- }
- if (src_alpha) {
- if (src_alpha == 255) {
- *(FX_DWORD*)dest_scan = m_Color;
- } else {
- uint8_t dest_alpha = dest_scan[3] + src_alpha - dest_scan[3] * src_alpha / 255;
- dest_scan[3] = dest_alpha;
- int alpha_ratio = src_alpha * 255 / dest_alpha;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Red, alpha_ratio);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Green, alpha_ratio);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Blue, alpha_ratio);
- dest_scan += 2;
- continue;
- }
- }
- dest_scan += 4;
- }
- return;
+ if (m_bFullCover) {
+ *dest_scan = FXDIB_ALPHA_MERGE(*ori_scan++, m_Gray, src_alpha);
+ } else {
+ int gray = FXDIB_ALPHA_MERGE(*ori_scan++, m_Gray, src_alpha);
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, cover_scan[col]);
+ dest_scan++;
}
- for (int col = col_start; col < col_end; col ++) {
- int src_alpha;
- if (m_bFullCover) {
- if (clip_scan) {
- src_alpha = m_Alpha * clip_scan[col] / 255;
- } else {
- src_alpha = m_Alpha;
- }
- } else {
- if (clip_scan) {
- src_alpha = m_Alpha * cover_scan[col] * clip_scan[col] / 255 / 255;
- } else {
- src_alpha = m_Alpha * cover_scan[col] / 255;
- }
- }
- if (src_alpha) {
- if (src_alpha == 255) {
- *(FX_DWORD*)dest_scan = m_Color;
- } else {
- if (dest_scan[3] == 0) {
- dest_scan[3] = src_alpha;
- *dest_scan++ = m_Blue;
- *dest_scan++ = m_Green;
- *dest_scan = m_Red;
- dest_scan += 2;
- continue;
- }
- uint8_t dest_alpha = dest_scan[3] + src_alpha - dest_scan[3] * src_alpha / 255;
- dest_scan[3] = dest_alpha;
- int alpha_ratio = src_alpha * 255 / dest_alpha;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Blue, alpha_ratio);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Green, alpha_ratio);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Red, alpha_ratio);
- dest_scan += 2;
- continue;
- }
- }
- dest_scan += Bpp;
+ }
+ } else {
+ int index = 0;
+ if (m_pDevice->GetPalette() == NULL) {
+ index = ((uint8_t)m_Color == 0xff) ? 1 : 0;
+ } else {
+ for (int i = 0; i < 2; i++)
+ if (FXARGB_TODIB(m_pDevice->GetPalette()[i]) == m_Color) {
+ index = i;
+ }
+ }
+ uint8_t* dest_scan1 = dest_scan;
+ for (int col = col_start; col < col_end; col++) {
+ int src_alpha;
+ if (clip_scan) {
+ src_alpha = m_Alpha * cover_scan[col] * clip_scan[col] / 255 / 255;
+ } else {
+ src_alpha = m_Alpha * cover_scan[col] / 255;
+ }
+ if (src_alpha) {
+ if (!index) {
+ *dest_scan1 &= ~(1 << (7 - (col + span_left) % 8));
+ } else {
+ *dest_scan1 |= 1 << (7 - (col + span_left) % 8);
+ }
+ }
+ dest_scan1 = dest_scan + (span_left % 8 + col - col_start + 1) / 8;
+ }
+ }
+ }
+ void CompositeSpan1bpp(uint8_t* dest_scan,
+ int Bpp,
+ int span_left,
+ int span_len,
+ uint8_t* cover_scan,
+ int clip_left,
+ int clip_right,
+ uint8_t* clip_scan,
+ uint8_t* dest_extra_alpha_scan) {
+ ASSERT(!m_bRgbByteOrder);
+ ASSERT(!m_pDevice->IsCmykImage());
+ int col_start = span_left < clip_left ? clip_left - span_left : 0;
+ int col_end = (span_left + span_len) < clip_right
+ ? span_len
+ : (clip_right - span_left);
+ dest_scan += col_start / 8;
+ int index = 0;
+ if (m_pDevice->GetPalette() == NULL) {
+ index = ((uint8_t)m_Color == 0xff) ? 1 : 0;
+ } else {
+ for (int i = 0; i < 2; i++)
+ if (FXARGB_TODIB(m_pDevice->GetPalette()[i]) == m_Color) {
+ index = i;
}
}
- void CompositeSpanRGB(uint8_t* dest_scan, int Bpp,
- int span_left, int span_len, uint8_t* cover_scan,
- int clip_left, int clip_right, uint8_t* clip_scan,
- uint8_t* dest_extra_alpha_scan)
- {
- int col_start = span_left < clip_left ? clip_left - span_left : 0;
- int col_end = (span_left + span_len) < clip_right ? span_len : (clip_right - span_left);
- dest_scan += col_start * Bpp;
- if (m_bRgbByteOrder) {
- for (int col = col_start; col < col_end; col ++) {
- int src_alpha;
- if (clip_scan) {
- src_alpha = m_Alpha * cover_scan[col] * clip_scan[col] / 255 / 255;
- } else {
- src_alpha = m_Alpha * cover_scan[col] / 255;
- }
- if (src_alpha) {
- if (src_alpha == 255) {
- if (Bpp == 4) {
- *(FX_DWORD*)dest_scan = m_Color;
- } else if (Bpp == 3) {
- *dest_scan++ = m_Red;
- *dest_scan++ = m_Green;
- *dest_scan++ = m_Blue;
- continue;
- }
- } else {
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Red, src_alpha);
- dest_scan++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Green, src_alpha);
- dest_scan++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Blue, src_alpha);
- dest_scan += Bpp - 2;
- continue;
- }
- }
- dest_scan += Bpp;
- }
- return;
+ uint8_t* dest_scan1 = dest_scan;
+ for (int col = col_start; col < col_end; col++) {
+ int src_alpha;
+ if (clip_scan) {
+ src_alpha = m_Alpha * cover_scan[col] * clip_scan[col] / 255 / 255;
+ } else {
+ src_alpha = m_Alpha * cover_scan[col] / 255;
+ }
+ if (src_alpha) {
+ if (!index) {
+ *dest_scan1 &= ~(1 << (7 - (col + span_left) % 8));
+ } else {
+ *dest_scan1 |= 1 << (7 - (col + span_left) % 8);
}
- if (Bpp == 3 && dest_extra_alpha_scan) {
- for (int col = col_start; col < col_end; col ++) {
- int src_alpha;
- if (m_bFullCover) {
- if (clip_scan) {
- src_alpha = m_Alpha * clip_scan[col] / 255;
- } else {
- src_alpha = m_Alpha;
- }
- } else {
- if (clip_scan) {
- src_alpha = m_Alpha * cover_scan[col] * clip_scan[col] / 255 / 255;
- } else {
- src_alpha = m_Alpha * cover_scan[col] / 255;
- }
- }
- if (src_alpha) {
- if (src_alpha == 255) {
- *dest_scan++ = (uint8_t)m_Blue;
- *dest_scan++ = (uint8_t)m_Green;
- *dest_scan++ = (uint8_t)m_Red;
- *dest_extra_alpha_scan++ = (uint8_t)m_Alpha;
- continue;
- } else {
- uint8_t dest_alpha = (*dest_extra_alpha_scan) + src_alpha -
- (*dest_extra_alpha_scan) * src_alpha / 255;
- *dest_extra_alpha_scan++ = dest_alpha;
- int alpha_ratio = src_alpha * 255 / dest_alpha;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Blue, alpha_ratio);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Green, alpha_ratio);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Red, alpha_ratio);
- dest_scan ++;
- continue;
- }
- }
- dest_extra_alpha_scan++;
- dest_scan += Bpp;
- }
+ }
+ dest_scan1 = dest_scan + (span_left % 8 + col - col_start + 1) / 8;
+ }
+ }
+ void CompositeSpanGray(uint8_t* dest_scan,
+ int Bpp,
+ int span_left,
+ int span_len,
+ uint8_t* cover_scan,
+ int clip_left,
+ int clip_right,
+ uint8_t* clip_scan,
+ uint8_t* dest_extra_alpha_scan) {
+ ASSERT(!m_bRgbByteOrder);
+ int col_start = span_left < clip_left ? clip_left - span_left : 0;
+ int col_end = (span_left + span_len) < clip_right
+ ? span_len
+ : (clip_right - span_left);
+ dest_scan += col_start;
+ if (dest_extra_alpha_scan) {
+ for (int col = col_start; col < col_end; col++) {
+ int src_alpha;
+ if (m_bFullCover) {
+ if (clip_scan) {
+ src_alpha = m_Alpha * clip_scan[col] / 255;
+ } else {
+ src_alpha = m_Alpha;
+ }
} else {
- for (int col = col_start; col < col_end; col ++) {
- int src_alpha;
- if (m_bFullCover) {
- if (clip_scan) {
- src_alpha = m_Alpha * clip_scan[col] / 255;
- } else {
- src_alpha = m_Alpha;
- }
- } else {
- if (clip_scan) {
- src_alpha = m_Alpha * cover_scan[col] * clip_scan[col] / 255 / 255;
- } else {
- src_alpha = m_Alpha * cover_scan[col] / 255;
- }
- }
- if (src_alpha) {
- if (src_alpha == 255) {
- if (Bpp == 4) {
- *(FX_DWORD*)dest_scan = m_Color;
- } else if (Bpp == 3) {
- *dest_scan++ = m_Blue;
- *dest_scan++ = m_Green;
- *dest_scan++ = m_Red;
- continue;
- }
- } else {
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Blue, src_alpha);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Green, src_alpha);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Red, src_alpha);
- dest_scan += Bpp - 2;
- continue;
- }
- }
- dest_scan += Bpp;
- }
+ if (clip_scan) {
+ src_alpha = m_Alpha * cover_scan[col] * clip_scan[col] / 255 / 255;
+ } else {
+ src_alpha = m_Alpha * cover_scan[col] / 255;
+ }
}
- }
- void CompositeSpanCMYK(uint8_t* dest_scan, int Bpp,
- int span_left, int span_len, uint8_t* cover_scan,
- int clip_left, int clip_right, uint8_t* clip_scan,
- uint8_t* dest_extra_alpha_scan)
- {
- ASSERT(!m_bRgbByteOrder);
- int col_start = span_left < clip_left ? clip_left - span_left : 0;
- int col_end = (span_left + span_len) < clip_right ? span_len : (clip_right - span_left);
- dest_scan += col_start * 4;
- if (dest_extra_alpha_scan) {
- for (int col = col_start; col < col_end; col ++) {
- int src_alpha;
- if (m_bFullCover) {
- if (clip_scan) {
- src_alpha = m_Alpha * clip_scan[col] / 255;
- } else {
- src_alpha = m_Alpha;
- }
- } else {
- if (clip_scan) {
- src_alpha = m_Alpha * cover_scan[col] * clip_scan[col] / 255 / 255;
- } else {
- src_alpha = m_Alpha * cover_scan[col] / 255;
- }
- }
- if (src_alpha) {
- if (src_alpha == 255) {
- *(FX_CMYK*)dest_scan = m_Color;
- *dest_extra_alpha_scan = (uint8_t)m_Alpha;
- } else {
- uint8_t dest_alpha = (*dest_extra_alpha_scan) + src_alpha -
- (*dest_extra_alpha_scan) * src_alpha / 255;
- *dest_extra_alpha_scan++ = dest_alpha;
- int alpha_ratio = src_alpha * 255 / dest_alpha;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Red, alpha_ratio);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Green, alpha_ratio);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Blue, alpha_ratio);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Gray, alpha_ratio);
- dest_scan ++;
- continue;
- }
- }
- dest_extra_alpha_scan++;
- dest_scan += 4;
- }
+ if (src_alpha) {
+ if (src_alpha == 255) {
+ *dest_scan = m_Gray;
+ *dest_extra_alpha_scan = m_Alpha;
+ } else {
+ uint8_t dest_alpha = (*dest_extra_alpha_scan) + src_alpha -
+ (*dest_extra_alpha_scan) * src_alpha / 255;
+ *dest_extra_alpha_scan++ = dest_alpha;
+ int alpha_ratio = src_alpha * 255 / dest_alpha;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Gray, alpha_ratio);
+ dest_scan++;
+ continue;
+ }
+ }
+ dest_extra_alpha_scan++;
+ dest_scan++;
+ }
+ } else {
+ for (int col = col_start; col < col_end; col++) {
+ int src_alpha;
+ if (clip_scan) {
+ src_alpha = m_Alpha * cover_scan[col] * clip_scan[col] / 255 / 255;
} else {
- for (int col = col_start; col < col_end; col ++) {
- int src_alpha;
- if (clip_scan) {
- src_alpha = m_Alpha * cover_scan[col] * clip_scan[col] / 255 / 255;
- } else {
- src_alpha = m_Alpha * cover_scan[col] / 255;
- }
- if (src_alpha) {
- if (src_alpha == 255) {
- *(FX_CMYK*)dest_scan = m_Color;
- } else {
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Red, src_alpha);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Green, src_alpha);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Blue, src_alpha);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Gray, src_alpha);
- dest_scan ++;
- continue;
- }
- }
- dest_scan += 4;
- }
+ src_alpha = m_Alpha * cover_scan[col] / 255;
}
- }
- template<class Scanline> void render(const Scanline& sl)
- {
- if (m_pOriDevice == NULL && composite_span == NULL) {
- return;
+ if (src_alpha) {
+ if (src_alpha == 255) {
+ *dest_scan = m_Gray;
+ } else {
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Gray, src_alpha);
+ }
+ }
+ dest_scan++;
+ }
+ }
+ }
+ void CompositeSpanARGB(uint8_t* dest_scan,
+ int Bpp,
+ int span_left,
+ int span_len,
+ uint8_t* cover_scan,
+ int clip_left,
+ int clip_right,
+ uint8_t* clip_scan,
+ uint8_t* dest_extra_alpha_scan) {
+ int col_start = span_left < clip_left ? clip_left - span_left : 0;
+ int col_end = (span_left + span_len) < clip_right
+ ? span_len
+ : (clip_right - span_left);
+ dest_scan += col_start * Bpp;
+ if (m_bRgbByteOrder) {
+ for (int col = col_start; col < col_end; col++) {
+ int src_alpha;
+ if (m_bFullCover) {
+ if (clip_scan) {
+ src_alpha = m_Alpha * clip_scan[col] / 255;
+ } else {
+ src_alpha = m_Alpha;
+ }
+ } else {
+ if (clip_scan) {
+ src_alpha = m_Alpha * cover_scan[col] * clip_scan[col] / 255 / 255;
+ } else {
+ src_alpha = m_Alpha * cover_scan[col] / 255;
+ }
}
- int y = sl.y();
- if (y < m_ClipBox.top || y >= m_ClipBox.bottom) {
- return;
+ if (src_alpha) {
+ if (src_alpha == 255) {
+ *(FX_DWORD*)dest_scan = m_Color;
+ } else {
+ uint8_t dest_alpha =
+ dest_scan[3] + src_alpha - dest_scan[3] * src_alpha / 255;
+ dest_scan[3] = dest_alpha;
+ int alpha_ratio = src_alpha * 255 / dest_alpha;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Red, alpha_ratio);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Green, alpha_ratio);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Blue, alpha_ratio);
+ dest_scan += 2;
+ continue;
+ }
}
- uint8_t* dest_scan = m_pDevice->GetBuffer() + m_pDevice->GetPitch() * y;
- uint8_t* dest_scan_extra_alpha = NULL;
- CFX_DIBitmap* pAlphaMask = m_pDevice->m_pAlphaMask;
- if (pAlphaMask) {
- dest_scan_extra_alpha = pAlphaMask->GetBuffer() + pAlphaMask->GetPitch() * y;
+ dest_scan += 4;
+ }
+ return;
+ }
+ for (int col = col_start; col < col_end; col++) {
+ int src_alpha;
+ if (m_bFullCover) {
+ if (clip_scan) {
+ src_alpha = m_Alpha * clip_scan[col] / 255;
+ } else {
+ src_alpha = m_Alpha;
}
- uint8_t* ori_scan = NULL;
- if (m_pOriDevice) {
- ori_scan = m_pOriDevice->GetBuffer() + m_pOriDevice->GetPitch() * y;
+ } else {
+ if (clip_scan) {
+ src_alpha = m_Alpha * cover_scan[col] * clip_scan[col] / 255 / 255;
+ } else {
+ src_alpha = m_Alpha * cover_scan[col] / 255;
}
- int Bpp = m_pDevice->GetBPP() / 8;
- FX_BOOL bDestAlpha = m_pDevice->HasAlpha() || m_pDevice->IsAlphaMask();
- unsigned num_spans = sl.num_spans();
- typename Scanline::const_iterator span = sl.begin();
- while (1) {
- int x = span->x;
- ASSERT(span->len > 0);
- uint8_t* dest_pos = NULL;
- uint8_t* dest_extra_alpha_pos = NULL;
- uint8_t* ori_pos = NULL;
- if (Bpp) {
- ori_pos = ori_scan ? ori_scan + x * Bpp : NULL;
- dest_pos = dest_scan + x * Bpp;
- dest_extra_alpha_pos = dest_scan_extra_alpha ? dest_scan_extra_alpha + x : NULL;
- } else {
- dest_pos = dest_scan + x / 8;
- ori_pos = ori_scan ? ori_scan + x / 8 : NULL;
- }
- uint8_t* clip_pos = NULL;
- if (m_pClipMask) {
- clip_pos = m_pClipMask->GetBuffer() + (y - m_ClipBox.top) * m_pClipMask->GetPitch() + x - m_ClipBox.left;
- }
- if (ori_pos) {
- CompositeSpan(dest_pos, ori_pos, Bpp, bDestAlpha, x, span->len, span->covers, m_ClipBox.left, m_ClipBox.right, clip_pos);
- } else {
- (this->*composite_span)(dest_pos, Bpp, x, span->len, span->covers, m_ClipBox.left, m_ClipBox.right, clip_pos, dest_extra_alpha_pos);
- }
- if(--num_spans == 0) {
- break;
+ }
+ if (src_alpha) {
+ if (src_alpha == 255) {
+ *(FX_DWORD*)dest_scan = m_Color;
+ } else {
+ if (dest_scan[3] == 0) {
+ dest_scan[3] = src_alpha;
+ *dest_scan++ = m_Blue;
+ *dest_scan++ = m_Green;
+ *dest_scan = m_Red;
+ dest_scan += 2;
+ continue;
+ }
+ uint8_t dest_alpha =
+ dest_scan[3] + src_alpha - dest_scan[3] * src_alpha / 255;
+ dest_scan[3] = dest_alpha;
+ int alpha_ratio = src_alpha * 255 / dest_alpha;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Blue, alpha_ratio);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Green, alpha_ratio);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Red, alpha_ratio);
+ dest_scan += 2;
+ continue;
+ }
+ }
+ dest_scan += Bpp;
+ }
+ }
+ void CompositeSpanRGB(uint8_t* dest_scan,
+ int Bpp,
+ int span_left,
+ int span_len,
+ uint8_t* cover_scan,
+ int clip_left,
+ int clip_right,
+ uint8_t* clip_scan,
+ uint8_t* dest_extra_alpha_scan) {
+ int col_start = span_left < clip_left ? clip_left - span_left : 0;
+ int col_end = (span_left + span_len) < clip_right
+ ? span_len
+ : (clip_right - span_left);
+ dest_scan += col_start * Bpp;
+ if (m_bRgbByteOrder) {
+ for (int col = col_start; col < col_end; col++) {
+ int src_alpha;
+ if (clip_scan) {
+ src_alpha = m_Alpha * cover_scan[col] * clip_scan[col] / 255 / 255;
+ } else {
+ src_alpha = m_Alpha * cover_scan[col] / 255;
+ }
+ if (src_alpha) {
+ if (src_alpha == 255) {
+ if (Bpp == 4) {
+ *(FX_DWORD*)dest_scan = m_Color;
+ } else if (Bpp == 3) {
+ *dest_scan++ = m_Red;
+ *dest_scan++ = m_Green;
+ *dest_scan++ = m_Blue;
+ continue;
}
- ++span;
+ } else {
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Red, src_alpha);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Green, src_alpha);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Blue, src_alpha);
+ dest_scan += Bpp - 2;
+ continue;
+ }
}
- }
-
- FX_BOOL Init(CFX_DIBitmap* pDevice, CFX_DIBitmap* pOriDevice, const CFX_ClipRgn* pClipRgn, FX_DWORD color, FX_BOOL bFullCover, FX_BOOL bRgbByteOrder,
- int alpha_flag = 0, void* pIccTransform = NULL)
- {
- m_pDevice = pDevice;
- m_pClipRgn = pClipRgn;
- composite_span = NULL;
- m_bRgbByteOrder = bRgbByteOrder;
- m_pOriDevice = pOriDevice;
- if (m_pClipRgn) {
- m_ClipBox = m_pClipRgn->GetBox();
+ dest_scan += Bpp;
+ }
+ return;
+ }
+ if (Bpp == 3 && dest_extra_alpha_scan) {
+ for (int col = col_start; col < col_end; col++) {
+ int src_alpha;
+ if (m_bFullCover) {
+ if (clip_scan) {
+ src_alpha = m_Alpha * clip_scan[col] / 255;
+ } else {
+ src_alpha = m_Alpha;
+ }
} else {
- m_ClipBox.left = m_ClipBox.top = 0;
- m_ClipBox.right = m_pDevice->GetWidth();
- m_ClipBox.bottom = m_pDevice->GetHeight();
+ if (clip_scan) {
+ src_alpha = m_Alpha * cover_scan[col] * clip_scan[col] / 255 / 255;
+ } else {
+ src_alpha = m_Alpha * cover_scan[col] / 255;
+ }
}
- m_pClipMask = NULL;
- if (m_pClipRgn && m_pClipRgn->GetType() == CFX_ClipRgn::MaskF) {
- m_pClipMask = m_pClipRgn->GetMask();
+ if (src_alpha) {
+ if (src_alpha == 255) {
+ *dest_scan++ = (uint8_t)m_Blue;
+ *dest_scan++ = (uint8_t)m_Green;
+ *dest_scan++ = (uint8_t)m_Red;
+ *dest_extra_alpha_scan++ = (uint8_t)m_Alpha;
+ continue;
+ } else {
+ uint8_t dest_alpha = (*dest_extra_alpha_scan) + src_alpha -
+ (*dest_extra_alpha_scan) * src_alpha / 255;
+ *dest_extra_alpha_scan++ = dest_alpha;
+ int alpha_ratio = src_alpha * 255 / dest_alpha;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Blue, alpha_ratio);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Green, alpha_ratio);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Red, alpha_ratio);
+ dest_scan++;
+ continue;
+ }
}
- m_bFullCover = bFullCover;
- FX_BOOL bObjectCMYK = FXGETFLAG_COLORTYPE(alpha_flag);
- FX_BOOL bDeviceCMYK = pDevice->IsCmykImage();
- m_Alpha = bObjectCMYK ? FXGETFLAG_ALPHA_FILL(alpha_flag) : FXARGB_A(color);
- ICodec_IccModule* pIccModule = NULL;
- if (!CFX_GEModule::Get()->GetCodecModule() || !CFX_GEModule::Get()->GetCodecModule()->GetIccModule()) {
- pIccTransform = NULL;
+ dest_extra_alpha_scan++;
+ dest_scan += Bpp;
+ }
+ } else {
+ for (int col = col_start; col < col_end; col++) {
+ int src_alpha;
+ if (m_bFullCover) {
+ if (clip_scan) {
+ src_alpha = m_Alpha * clip_scan[col] / 255;
+ } else {
+ src_alpha = m_Alpha;
+ }
} else {
- pIccModule = CFX_GEModule::Get()->GetCodecModule()->GetIccModule();
+ if (clip_scan) {
+ src_alpha = m_Alpha * cover_scan[col] * clip_scan[col] / 255 / 255;
+ } else {
+ src_alpha = m_Alpha * cover_scan[col] / 255;
+ }
}
- if (m_pDevice->GetBPP() == 8) {
- ASSERT(!m_bRgbByteOrder);
- composite_span = &CFX_Renderer::CompositeSpanGray;
- if (m_pDevice->IsAlphaMask()) {
- m_Gray = 255;
- } else {
- if (pIccTransform) {
- uint8_t gray;
- color = bObjectCMYK ? FXCMYK_TODIB(color) : FXARGB_TODIB(color);
- pIccModule->TranslateScanline(pIccTransform, &gray, (const uint8_t*)&color, 1);
- m_Gray = gray;
- } else {
- if (bObjectCMYK) {
- uint8_t r, g, b;
- AdobeCMYK_to_sRGB1(FXSYS_GetCValue(color), FXSYS_GetMValue(color), FXSYS_GetYValue(color), FXSYS_GetKValue(color),
- r, g, b);
- m_Gray = FXRGB2GRAY(r, g, b);
- } else {
- m_Gray = FXRGB2GRAY(FXARGB_R(color), FXARGB_G(color), FXARGB_B(color));
- }
- }
+ if (src_alpha) {
+ if (src_alpha == 255) {
+ if (Bpp == 4) {
+ *(FX_DWORD*)dest_scan = m_Color;
+ } else if (Bpp == 3) {
+ *dest_scan++ = m_Blue;
+ *dest_scan++ = m_Green;
+ *dest_scan++ = m_Red;
+ continue;
}
- return TRUE;
+ } else {
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Blue, src_alpha);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Green, src_alpha);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Red, src_alpha);
+ dest_scan += Bpp - 2;
+ continue;
+ }
}
- if (bDeviceCMYK) {
- ASSERT(!m_bRgbByteOrder);
- composite_span = &CFX_Renderer::CompositeSpanCMYK;
- if (bObjectCMYK) {
- m_Color = FXCMYK_TODIB(color);
- if (pIccTransform) {
- pIccModule->TranslateScanline(pIccTransform, (uint8_t*)&m_Color, (const uint8_t*)&m_Color, 1);
- }
- } else {
- if (!pIccTransform) {
- return FALSE;
- }
- color = FXARGB_TODIB(color);
- pIccModule->TranslateScanline(pIccTransform, (uint8_t*)&m_Color, (const uint8_t*)&color, 1);
- }
- m_Red = ((uint8_t*)&m_Color)[0];
- m_Green = ((uint8_t*)&m_Color)[1];
- m_Blue = ((uint8_t*)&m_Color)[2];
- m_Gray = ((uint8_t*)&m_Color)[3];
+ dest_scan += Bpp;
+ }
+ }
+ }
+ void CompositeSpanCMYK(uint8_t* dest_scan,
+ int Bpp,
+ int span_left,
+ int span_len,
+ uint8_t* cover_scan,
+ int clip_left,
+ int clip_right,
+ uint8_t* clip_scan,
+ uint8_t* dest_extra_alpha_scan) {
+ ASSERT(!m_bRgbByteOrder);
+ int col_start = span_left < clip_left ? clip_left - span_left : 0;
+ int col_end = (span_left + span_len) < clip_right
+ ? span_len
+ : (clip_right - span_left);
+ dest_scan += col_start * 4;
+ if (dest_extra_alpha_scan) {
+ for (int col = col_start; col < col_end; col++) {
+ int src_alpha;
+ if (m_bFullCover) {
+ if (clip_scan) {
+ src_alpha = m_Alpha * clip_scan[col] / 255;
+ } else {
+ src_alpha = m_Alpha;
+ }
} else {
- composite_span = (pDevice->GetFormat() == FXDIB_Argb) ? &CFX_Renderer::CompositeSpanARGB : &CFX_Renderer::CompositeSpanRGB;
- if (pIccTransform) {
- color = bObjectCMYK ? FXCMYK_TODIB(color) : FXARGB_TODIB(color);
- pIccModule->TranslateScanline(pIccTransform, (uint8_t*)&m_Color, (const uint8_t*)&color, 1);
- ((uint8_t*)&m_Color)[3] = m_Alpha;
- m_Red = ((uint8_t*)&m_Color)[2];
- m_Green = ((uint8_t*)&m_Color)[1];
- m_Blue = ((uint8_t*)&m_Color)[0];
- if (m_bRgbByteOrder) {
- m_Color = FXARGB_TODIB(m_Color);
- m_Color = FXARGB_TOBGRORDERDIB(m_Color);
- }
- } else {
- if (bObjectCMYK) {
- uint8_t r, g, b;
- AdobeCMYK_to_sRGB1(FXSYS_GetCValue(color), FXSYS_GetMValue(color), FXSYS_GetYValue(color), FXSYS_GetKValue(color),
- r, g, b);
- m_Color = FXARGB_MAKE(m_Alpha, r, g, b);
- if (m_bRgbByteOrder) {
- m_Color = FXARGB_TOBGRORDERDIB(m_Color);
- } else {
- m_Color = FXARGB_TODIB(m_Color);
- }
- m_Red = r;
- m_Green = g;
- m_Blue = b;
- } else {
- if (m_bRgbByteOrder) {
- m_Color = FXARGB_TOBGRORDERDIB(color);
- } else {
- m_Color = FXARGB_TODIB(color);
- }
- ArgbDecode(color, m_Alpha, m_Red, m_Green, m_Blue);
- }
- }
+ if (clip_scan) {
+ src_alpha = m_Alpha * cover_scan[col] * clip_scan[col] / 255 / 255;
+ } else {
+ src_alpha = m_Alpha * cover_scan[col] / 255;
+ }
}
- if (m_pDevice->GetBPP() == 1) {
- composite_span = &CFX_Renderer::CompositeSpan1bpp;
+ if (src_alpha) {
+ if (src_alpha == 255) {
+ *(FX_CMYK*)dest_scan = m_Color;
+ *dest_extra_alpha_scan = (uint8_t)m_Alpha;
+ } else {
+ uint8_t dest_alpha = (*dest_extra_alpha_scan) + src_alpha -
+ (*dest_extra_alpha_scan) * src_alpha / 255;
+ *dest_extra_alpha_scan++ = dest_alpha;
+ int alpha_ratio = src_alpha * 255 / dest_alpha;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Red, alpha_ratio);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Green, alpha_ratio);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Blue, alpha_ratio);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Gray, alpha_ratio);
+ dest_scan++;
+ continue;
+ }
}
- return TRUE;
+ dest_extra_alpha_scan++;
+ dest_scan += 4;
+ }
+ } else {
+ for (int col = col_start; col < col_end; col++) {
+ int src_alpha;
+ if (clip_scan) {
+ src_alpha = m_Alpha * cover_scan[col] * clip_scan[col] / 255 / 255;
+ } else {
+ src_alpha = m_Alpha * cover_scan[col] / 255;
+ }
+ if (src_alpha) {
+ if (src_alpha == 255) {
+ *(FX_CMYK*)dest_scan = m_Color;
+ } else {
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Red, src_alpha);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Green, src_alpha);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Blue, src_alpha);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Gray, src_alpha);
+ dest_scan++;
+ continue;
+ }
+ }
+ dest_scan += 4;
+ }
+ }
+ }
+ template <class Scanline>
+ void render(const Scanline& sl) {
+ if (m_pOriDevice == NULL && composite_span == NULL) {
+ return;
+ }
+ int y = sl.y();
+ if (y < m_ClipBox.top || y >= m_ClipBox.bottom) {
+ return;
+ }
+ uint8_t* dest_scan = m_pDevice->GetBuffer() + m_pDevice->GetPitch() * y;
+ uint8_t* dest_scan_extra_alpha = NULL;
+ CFX_DIBitmap* pAlphaMask = m_pDevice->m_pAlphaMask;
+ if (pAlphaMask) {
+ dest_scan_extra_alpha =
+ pAlphaMask->GetBuffer() + pAlphaMask->GetPitch() * y;
+ }
+ uint8_t* ori_scan = NULL;
+ if (m_pOriDevice) {
+ ori_scan = m_pOriDevice->GetBuffer() + m_pOriDevice->GetPitch() * y;
+ }
+ int Bpp = m_pDevice->GetBPP() / 8;
+ FX_BOOL bDestAlpha = m_pDevice->HasAlpha() || m_pDevice->IsAlphaMask();
+ unsigned num_spans = sl.num_spans();
+ typename Scanline::const_iterator span = sl.begin();
+ while (1) {
+ int x = span->x;
+ ASSERT(span->len > 0);
+ uint8_t* dest_pos = NULL;
+ uint8_t* dest_extra_alpha_pos = NULL;
+ uint8_t* ori_pos = NULL;
+ if (Bpp) {
+ ori_pos = ori_scan ? ori_scan + x * Bpp : NULL;
+ dest_pos = dest_scan + x * Bpp;
+ dest_extra_alpha_pos =
+ dest_scan_extra_alpha ? dest_scan_extra_alpha + x : NULL;
+ } else {
+ dest_pos = dest_scan + x / 8;
+ ori_pos = ori_scan ? ori_scan + x / 8 : NULL;
+ }
+ uint8_t* clip_pos = NULL;
+ if (m_pClipMask) {
+ clip_pos = m_pClipMask->GetBuffer() +
+ (y - m_ClipBox.top) * m_pClipMask->GetPitch() + x -
+ m_ClipBox.left;
+ }
+ if (ori_pos) {
+ CompositeSpan(dest_pos, ori_pos, Bpp, bDestAlpha, x, span->len,
+ span->covers, m_ClipBox.left, m_ClipBox.right, clip_pos);
+ } else {
+ (this->*composite_span)(dest_pos, Bpp, x, span->len, span->covers,
+ m_ClipBox.left, m_ClipBox.right, clip_pos,
+ dest_extra_alpha_pos);
+ }
+ if (--num_spans == 0) {
+ break;
+ }
+ ++span;
+ }
+ }
+
+ FX_BOOL Init(CFX_DIBitmap* pDevice,
+ CFX_DIBitmap* pOriDevice,
+ const CFX_ClipRgn* pClipRgn,
+ FX_DWORD color,
+ FX_BOOL bFullCover,
+ FX_BOOL bRgbByteOrder,
+ int alpha_flag = 0,
+ void* pIccTransform = NULL) {
+ m_pDevice = pDevice;
+ m_pClipRgn = pClipRgn;
+ composite_span = NULL;
+ m_bRgbByteOrder = bRgbByteOrder;
+ m_pOriDevice = pOriDevice;
+ if (m_pClipRgn) {
+ m_ClipBox = m_pClipRgn->GetBox();
+ } else {
+ m_ClipBox.left = m_ClipBox.top = 0;
+ m_ClipBox.right = m_pDevice->GetWidth();
+ m_ClipBox.bottom = m_pDevice->GetHeight();
+ }
+ m_pClipMask = NULL;
+ if (m_pClipRgn && m_pClipRgn->GetType() == CFX_ClipRgn::MaskF) {
+ m_pClipMask = m_pClipRgn->GetMask();
+ }
+ m_bFullCover = bFullCover;
+ FX_BOOL bObjectCMYK = FXGETFLAG_COLORTYPE(alpha_flag);
+ FX_BOOL bDeviceCMYK = pDevice->IsCmykImage();
+ m_Alpha = bObjectCMYK ? FXGETFLAG_ALPHA_FILL(alpha_flag) : FXARGB_A(color);
+ ICodec_IccModule* pIccModule = NULL;
+ if (!CFX_GEModule::Get()->GetCodecModule() ||
+ !CFX_GEModule::Get()->GetCodecModule()->GetIccModule()) {
+ pIccTransform = NULL;
+ } else {
+ pIccModule = CFX_GEModule::Get()->GetCodecModule()->GetIccModule();
+ }
+ if (m_pDevice->GetBPP() == 8) {
+ ASSERT(!m_bRgbByteOrder);
+ composite_span = &CFX_Renderer::CompositeSpanGray;
+ if (m_pDevice->IsAlphaMask()) {
+ m_Gray = 255;
+ } else {
+ if (pIccTransform) {
+ uint8_t gray;
+ color = bObjectCMYK ? FXCMYK_TODIB(color) : FXARGB_TODIB(color);
+ pIccModule->TranslateScanline(pIccTransform, &gray,
+ (const uint8_t*)&color, 1);
+ m_Gray = gray;
+ } else {
+ if (bObjectCMYK) {
+ uint8_t r, g, b;
+ AdobeCMYK_to_sRGB1(FXSYS_GetCValue(color), FXSYS_GetMValue(color),
+ FXSYS_GetYValue(color), FXSYS_GetKValue(color),
+ r, g, b);
+ m_Gray = FXRGB2GRAY(r, g, b);
+ } else {
+ m_Gray =
+ FXRGB2GRAY(FXARGB_R(color), FXARGB_G(color), FXARGB_B(color));
+ }
+ }
+ }
+ return TRUE;
+ }
+ if (bDeviceCMYK) {
+ ASSERT(!m_bRgbByteOrder);
+ composite_span = &CFX_Renderer::CompositeSpanCMYK;
+ if (bObjectCMYK) {
+ m_Color = FXCMYK_TODIB(color);
+ if (pIccTransform) {
+ pIccModule->TranslateScanline(pIccTransform, (uint8_t*)&m_Color,
+ (const uint8_t*)&m_Color, 1);
+ }
+ } else {
+ if (!pIccTransform) {
+ return FALSE;
+ }
+ color = FXARGB_TODIB(color);
+ pIccModule->TranslateScanline(pIccTransform, (uint8_t*)&m_Color,
+ (const uint8_t*)&color, 1);
+ }
+ m_Red = ((uint8_t*)&m_Color)[0];
+ m_Green = ((uint8_t*)&m_Color)[1];
+ m_Blue = ((uint8_t*)&m_Color)[2];
+ m_Gray = ((uint8_t*)&m_Color)[3];
+ } else {
+ composite_span = (pDevice->GetFormat() == FXDIB_Argb)
+ ? &CFX_Renderer::CompositeSpanARGB
+ : &CFX_Renderer::CompositeSpanRGB;
+ if (pIccTransform) {
+ color = bObjectCMYK ? FXCMYK_TODIB(color) : FXARGB_TODIB(color);
+ pIccModule->TranslateScanline(pIccTransform, (uint8_t*)&m_Color,
+ (const uint8_t*)&color, 1);
+ ((uint8_t*)&m_Color)[3] = m_Alpha;
+ m_Red = ((uint8_t*)&m_Color)[2];
+ m_Green = ((uint8_t*)&m_Color)[1];
+ m_Blue = ((uint8_t*)&m_Color)[0];
+ if (m_bRgbByteOrder) {
+ m_Color = FXARGB_TODIB(m_Color);
+ m_Color = FXARGB_TOBGRORDERDIB(m_Color);
+ }
+ } else {
+ if (bObjectCMYK) {
+ uint8_t r, g, b;
+ AdobeCMYK_to_sRGB1(FXSYS_GetCValue(color), FXSYS_GetMValue(color),
+ FXSYS_GetYValue(color), FXSYS_GetKValue(color), r,
+ g, b);
+ m_Color = FXARGB_MAKE(m_Alpha, r, g, b);
+ if (m_bRgbByteOrder) {
+ m_Color = FXARGB_TOBGRORDERDIB(m_Color);
+ } else {
+ m_Color = FXARGB_TODIB(m_Color);
+ }
+ m_Red = r;
+ m_Green = g;
+ m_Blue = b;
+ } else {
+ if (m_bRgbByteOrder) {
+ m_Color = FXARGB_TOBGRORDERDIB(color);
+ } else {
+ m_Color = FXARGB_TODIB(color);
+ }
+ ArgbDecode(color, m_Alpha, m_Red, m_Green, m_Blue);
+ }
+ }
}
-};
-FX_BOOL CFX_AggDeviceDriver::RenderRasterizer(agg::rasterizer_scanline_aa& rasterizer, FX_DWORD color, FX_BOOL bFullCover, FX_BOOL bGroupKnockout,
- int alpha_flag, void* pIccTransform)
-{
- CFX_DIBitmap* pt = bGroupKnockout ? m_pOriDevice : NULL;
- CFX_Renderer render;
- if (!render.Init(m_pBitmap, pt, m_pClipRgn, color, bFullCover, m_bRgbByteOrder, alpha_flag, pIccTransform)) {
- return FALSE;
+ if (m_pDevice->GetBPP() == 1) {
+ composite_span = &CFX_Renderer::CompositeSpan1bpp;
}
- agg::scanline_u8 scanline;
- agg::render_scanlines(rasterizer, scanline, render, (m_FillFlags & FXFILL_NOPATHSMOOTH) != 0);
return TRUE;
+ }
+};
+FX_BOOL CFX_AggDeviceDriver::RenderRasterizer(
+ agg::rasterizer_scanline_aa& rasterizer,
+ FX_DWORD color,
+ FX_BOOL bFullCover,
+ FX_BOOL bGroupKnockout,
+ int alpha_flag,
+ void* pIccTransform) {
+ CFX_DIBitmap* pt = bGroupKnockout ? m_pOriDevice : NULL;
+ CFX_Renderer render;
+ if (!render.Init(m_pBitmap, pt, m_pClipRgn, color, bFullCover,
+ m_bRgbByteOrder, alpha_flag, pIccTransform)) {
+ return FALSE;
+ }
+ agg::scanline_u8 scanline;
+ agg::render_scanlines(rasterizer, scanline, render,
+ (m_FillFlags & FXFILL_NOPATHSMOOTH) != 0);
+ return TRUE;
}
-FX_BOOL CFX_AggDeviceDriver::DrawPath(const CFX_PathData* pPathData,
+FX_BOOL CFX_AggDeviceDriver::DrawPath(const CFX_PathData* pPathData,
const CFX_AffineMatrix* pObject2Device,
const CFX_GraphStateData* pGraphState,
FX_DWORD fill_color,
@@ -1123,483 +1209,586 @@ FX_BOOL CFX_AggDeviceDriver::DrawPath(const CFX_PathData* pPathData,
int fill_mode,
int alpha_flag,
void* pIccTransform,
- int blend_type
- )
-{
- if (blend_type != FXDIB_BLEND_NORMAL) {
+ int blend_type) {
+ if (blend_type != FXDIB_BLEND_NORMAL) {
+ return FALSE;
+ }
+ if (GetBuffer() == NULL) {
+ return TRUE;
+ }
+ m_FillFlags = fill_mode;
+ if ((fill_mode & 3) && fill_color) {
+ CAgg_PathData path_data;
+ path_data.BuildPath(pPathData, pObject2Device);
+ agg::rasterizer_scanline_aa rasterizer;
+ rasterizer.clip_box(0.0f, 0.0f, (FX_FLOAT)(GetDeviceCaps(FXDC_PIXEL_WIDTH)),
+ (FX_FLOAT)(GetDeviceCaps(FXDC_PIXEL_HEIGHT)));
+ rasterizer.add_path(path_data.m_PathData);
+ rasterizer.filling_rule((fill_mode & 3) == FXFILL_WINDING
+ ? agg::fill_non_zero
+ : agg::fill_even_odd);
+ if (!RenderRasterizer(rasterizer, fill_color, fill_mode & FXFILL_FULLCOVER,
+ FALSE, alpha_flag, pIccTransform)) {
+ return FALSE;
+ }
+ }
+ int stroke_alpha = FXGETFLAG_COLORTYPE(alpha_flag)
+ ? FXGETFLAG_ALPHA_STROKE(alpha_flag)
+ : FXARGB_A(stroke_color);
+ if (pGraphState && stroke_alpha) {
+ if (fill_mode & FX_ZEROAREA_FILL) {
+ CAgg_PathData path_data;
+ path_data.BuildPath(pPathData, pObject2Device);
+ agg::rasterizer_scanline_aa rasterizer;
+ rasterizer.clip_box(0.0f, 0.0f,
+ (FX_FLOAT)(GetDeviceCaps(FXDC_PIXEL_WIDTH)),
+ (FX_FLOAT)(GetDeviceCaps(FXDC_PIXEL_HEIGHT)));
+ RasterizeStroke(rasterizer, path_data.m_PathData, NULL, pGraphState, 1,
+ FALSE, fill_mode & FX_STROKE_TEXT_MODE);
+ int fill_flag = FXGETFLAG_COLORTYPE(alpha_flag) << 8 |
+ FXGETFLAG_ALPHA_STROKE(alpha_flag);
+ if (!RenderRasterizer(rasterizer, stroke_color,
+ fill_mode & FXFILL_FULLCOVER, m_bGroupKnockout,
+ fill_flag, pIccTransform)) {
return FALSE;
+ }
+ return TRUE;
}
- if (GetBuffer() == NULL) {
- return TRUE;
- }
- m_FillFlags = fill_mode;
- if ((fill_mode & 3) && fill_color) {
- CAgg_PathData path_data;
- path_data.BuildPath(pPathData, pObject2Device);
- agg::rasterizer_scanline_aa rasterizer;
- rasterizer.clip_box(0.0f, 0.0f, (FX_FLOAT)(GetDeviceCaps(FXDC_PIXEL_WIDTH)), (FX_FLOAT)(GetDeviceCaps(FXDC_PIXEL_HEIGHT)));
- rasterizer.add_path(path_data.m_PathData);
- rasterizer.filling_rule((fill_mode & 3) == FXFILL_WINDING ? agg::fill_non_zero : agg::fill_even_odd);
- if (!RenderRasterizer(rasterizer, fill_color, fill_mode & FXFILL_FULLCOVER, FALSE, alpha_flag, pIccTransform)) {
- return FALSE;
- }
+ CFX_AffineMatrix matrix1, matrix2;
+ if (pObject2Device) {
+ matrix1.a =
+ FX_MAX(FXSYS_fabs(pObject2Device->a), FXSYS_fabs(pObject2Device->b));
+ matrix1.d = matrix1.a;
+ matrix2.Set(pObject2Device->a / matrix1.a, pObject2Device->b / matrix1.a,
+ pObject2Device->c / matrix1.d, pObject2Device->d / matrix1.d,
+ 0, 0);
+ CFX_AffineMatrix mtRervese;
+ mtRervese.SetReverse(matrix2);
+ matrix1 = *pObject2Device;
+ matrix1.Concat(mtRervese);
}
- int stroke_alpha = FXGETFLAG_COLORTYPE(alpha_flag) ? FXGETFLAG_ALPHA_STROKE(alpha_flag) : FXARGB_A(stroke_color);
- if (pGraphState && stroke_alpha) {
- if (fill_mode & FX_ZEROAREA_FILL) {
- CAgg_PathData path_data;
- path_data.BuildPath(pPathData, pObject2Device);
- agg::rasterizer_scanline_aa rasterizer;
- rasterizer.clip_box(0.0f, 0.0f, (FX_FLOAT)(GetDeviceCaps(FXDC_PIXEL_WIDTH)), (FX_FLOAT)(GetDeviceCaps(FXDC_PIXEL_HEIGHT)));
- RasterizeStroke(rasterizer, path_data.m_PathData, NULL, pGraphState, 1, FALSE, fill_mode & FX_STROKE_TEXT_MODE);
- int fill_flag = FXGETFLAG_COLORTYPE(alpha_flag) << 8 | FXGETFLAG_ALPHA_STROKE(alpha_flag);
- if (!RenderRasterizer(rasterizer, stroke_color, fill_mode & FXFILL_FULLCOVER, m_bGroupKnockout, fill_flag, pIccTransform)) {
- return FALSE;
- }
- return TRUE;
+ CAgg_PathData path_data;
+ path_data.BuildPath(pPathData, &matrix1);
+ agg::rasterizer_scanline_aa rasterizer;
+ rasterizer.clip_box(0.0f, 0.0f, (FX_FLOAT)(GetDeviceCaps(FXDC_PIXEL_WIDTH)),
+ (FX_FLOAT)(GetDeviceCaps(FXDC_PIXEL_HEIGHT)));
+ RasterizeStroke(rasterizer, path_data.m_PathData, &matrix2, pGraphState,
+ matrix1.a, FALSE, fill_mode & FX_STROKE_TEXT_MODE);
+ int fill_flag = FXGETFLAG_COLORTYPE(alpha_flag) << 8 |
+ FXGETFLAG_ALPHA_STROKE(alpha_flag);
+ if (!RenderRasterizer(rasterizer, stroke_color,
+ fill_mode & FXFILL_FULLCOVER, m_bGroupKnockout,
+ fill_flag, pIccTransform)) {
+ return FALSE;
+ }
+ }
+ return TRUE;
+}
+void RgbByteOrderSetPixel(CFX_DIBitmap* pBitmap, int x, int y, FX_DWORD argb) {
+ if (x < 0 || x >= pBitmap->GetWidth() || y < 0 || y >= pBitmap->GetHeight()) {
+ return;
+ }
+ uint8_t* pos = (uint8_t*)pBitmap->GetBuffer() + y * pBitmap->GetPitch() +
+ x * pBitmap->GetBPP() / 8;
+ if (pBitmap->GetFormat() == FXDIB_Argb) {
+ FXARGB_SETRGBORDERDIB(pos, ArgbGamma(argb));
+ } else {
+ int alpha = FXARGB_A(argb);
+ pos[0] = (FXARGB_R(argb) * alpha + pos[0] * (255 - alpha)) / 255;
+ pos[1] = (FXARGB_G(argb) * alpha + pos[1] * (255 - alpha)) / 255;
+ pos[2] = (FXARGB_B(argb) * alpha + pos[2] * (255 - alpha)) / 255;
+ }
+}
+void RgbByteOrderCompositeRect(CFX_DIBitmap* pBitmap,
+ int left,
+ int top,
+ int width,
+ int height,
+ FX_ARGB argb) {
+ int src_alpha = FXARGB_A(argb);
+ if (src_alpha == 0) {
+ return;
+ }
+ FX_RECT rect(left, top, left + width, top + height);
+ rect.Intersect(0, 0, pBitmap->GetWidth(), pBitmap->GetHeight());
+ width = rect.Width();
+ int src_r = FXARGB_R(argb), src_g = FXARGB_G(argb), src_b = FXARGB_B(argb);
+ int Bpp = pBitmap->GetBPP() / 8;
+ FX_BOOL bAlpha = pBitmap->HasAlpha();
+ int dib_argb = FXARGB_TOBGRORDERDIB(argb);
+ uint8_t* pBuffer = pBitmap->GetBuffer();
+ if (src_alpha == 255) {
+ for (int row = rect.top; row < rect.bottom; row++) {
+ uint8_t* dest_scan =
+ pBuffer + row * pBitmap->GetPitch() + rect.left * Bpp;
+ if (Bpp == 4) {
+ FX_DWORD* scan = (FX_DWORD*)dest_scan;
+ for (int col = 0; col < width; col++) {
+ *scan++ = dib_argb;
}
- CFX_AffineMatrix matrix1, matrix2;
- if (pObject2Device) {
- matrix1.a = FX_MAX(FXSYS_fabs(pObject2Device->a), FXSYS_fabs(pObject2Device->b));
- matrix1.d = matrix1.a;
- matrix2.Set(pObject2Device->a / matrix1.a, pObject2Device->b / matrix1.a,
- pObject2Device->c / matrix1.d, pObject2Device->d / matrix1.d,
- 0, 0);
- CFX_AffineMatrix mtRervese;
- mtRervese.SetReverse(matrix2);
- matrix1 = *pObject2Device;
- matrix1.Concat(mtRervese);
+ } else {
+ for (int col = 0; col < width; col++) {
+ *dest_scan++ = src_r;
+ *dest_scan++ = src_g;
+ *dest_scan++ = src_b;
}
- CAgg_PathData path_data;
- path_data.BuildPath(pPathData, &matrix1);
- agg::rasterizer_scanline_aa rasterizer;
- rasterizer.clip_box(0.0f, 0.0f, (FX_FLOAT)(GetDeviceCaps(FXDC_PIXEL_WIDTH)), (FX_FLOAT)(GetDeviceCaps(FXDC_PIXEL_HEIGHT)));
- RasterizeStroke(rasterizer, path_data.m_PathData, &matrix2, pGraphState, matrix1.a, FALSE, fill_mode & FX_STROKE_TEXT_MODE);
- int fill_flag = FXGETFLAG_COLORTYPE(alpha_flag) << 8 | FXGETFLAG_ALPHA_STROKE(alpha_flag);
- if (!RenderRasterizer(rasterizer, stroke_color, fill_mode & FXFILL_FULLCOVER, m_bGroupKnockout, fill_flag, pIccTransform)) {
- return FALSE;
+ }
+ }
+ return;
+ }
+ src_r = FX_GAMMA(src_r);
+ src_g = FX_GAMMA(src_g);
+ src_b = FX_GAMMA(src_b);
+ for (int row = rect.top; row < rect.bottom; row++) {
+ uint8_t* dest_scan = pBuffer + row * pBitmap->GetPitch() + rect.left * Bpp;
+ if (bAlpha) {
+ for (int col = 0; col < width; col++) {
+ uint8_t back_alpha = dest_scan[3];
+ if (back_alpha == 0) {
+ FXARGB_SETRGBORDERDIB(dest_scan,
+ FXARGB_MAKE(src_alpha, src_r, src_g, src_b));
+ dest_scan += 4;
+ continue;
}
- }
- return TRUE;
-}
-void RgbByteOrderSetPixel(CFX_DIBitmap* pBitmap, int x, int y, FX_DWORD argb)
-{
- if (x < 0 || x >= pBitmap->GetWidth() || y < 0 || y >= pBitmap->GetHeight()) {
- return;
- }
- uint8_t* pos = (uint8_t*)pBitmap->GetBuffer() + y * pBitmap->GetPitch() + x * pBitmap->GetBPP() / 8;
- if (pBitmap->GetFormat() == FXDIB_Argb) {
- FXARGB_SETRGBORDERDIB(pos, ArgbGamma(argb));
+ uint8_t dest_alpha =
+ back_alpha + src_alpha - back_alpha * src_alpha / 255;
+ dest_scan[3] = dest_alpha;
+ int alpha_ratio = src_alpha * 255 / dest_alpha;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_r, alpha_ratio);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_g, alpha_ratio);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_b, alpha_ratio);
+ dest_scan += 2;
+ }
} else {
- int alpha = FXARGB_A(argb);
- pos[0] = (FXARGB_R(argb) * alpha + pos[0] * (255 - alpha)) / 255;
- pos[1] = (FXARGB_G(argb) * alpha + pos[1] * (255 - alpha)) / 255;
- pos[2] = (FXARGB_B(argb) * alpha + pos[2] * (255 - alpha)) / 255;
+ for (int col = 0; col < width; col++) {
+ *dest_scan = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(*dest_scan), src_r, src_alpha));
+ dest_scan++;
+ *dest_scan = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(*dest_scan), src_g, src_alpha));
+ dest_scan++;
+ *dest_scan = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(*dest_scan), src_b, src_alpha));
+ dest_scan++;
+ if (Bpp == 4) {
+ dest_scan++;
+ }
+ }
}
+ }
}
-void RgbByteOrderCompositeRect(CFX_DIBitmap* pBitmap, int left, int top, int width, int height, FX_ARGB argb)
-{
- int src_alpha = FXARGB_A(argb);
- if (src_alpha == 0) {
- return;
- }
- FX_RECT rect(left, top, left + width, top + height);
- rect.Intersect(0, 0, pBitmap->GetWidth(), pBitmap->GetHeight());
- width = rect.Width();
- int src_r = FXARGB_R(argb), src_g = FXARGB_G(argb), src_b = FXARGB_B(argb);
- int Bpp = pBitmap->GetBPP() / 8;
- FX_BOOL bAlpha = pBitmap->HasAlpha();
- int dib_argb = FXARGB_TOBGRORDERDIB(argb);
- uint8_t* pBuffer = pBitmap->GetBuffer();
- if (src_alpha == 255) {
- for (int row = rect.top; row < rect.bottom; row ++) {
- uint8_t* dest_scan = pBuffer + row * pBitmap->GetPitch() + rect.left * Bpp;
- if (Bpp == 4) {
- FX_DWORD* scan = (FX_DWORD*)dest_scan;
- for (int col = 0; col < width; col ++) {
- *scan ++ = dib_argb;
- }
- } else {
- for (int col = 0; col < width; col ++) {
- *dest_scan ++ = src_r;
- *dest_scan ++ = src_g;
- *dest_scan ++ = src_b;
- }
- }
+void RgbByteOrderTransferBitmap(CFX_DIBitmap* pBitmap,
+ int dest_left,
+ int dest_top,
+ int width,
+ int height,
+ const CFX_DIBSource* pSrcBitmap,
+ int src_left,
+ int src_top) {
+ if (pBitmap == NULL) {
+ return;
+ }
+ pBitmap->GetOverlapRect(dest_left, dest_top, width, height,
+ pSrcBitmap->GetWidth(), pSrcBitmap->GetHeight(),
+ src_left, src_top, NULL);
+ if (width == 0 || height == 0) {
+ return;
+ }
+ int Bpp = pBitmap->GetBPP() / 8;
+ FXDIB_Format dest_format = pBitmap->GetFormat();
+ FXDIB_Format src_format = pSrcBitmap->GetFormat();
+ int pitch = pBitmap->GetPitch();
+ uint8_t* buffer = pBitmap->GetBuffer();
+ if (dest_format == src_format) {
+ for (int row = 0; row < height; row++) {
+ uint8_t* dest_scan = buffer + (dest_top + row) * pitch + dest_left * Bpp;
+ uint8_t* src_scan =
+ (uint8_t*)pSrcBitmap->GetScanline(src_top + row) + src_left * Bpp;
+ if (Bpp == 4) {
+ for (int col = 0; col < width; col++) {
+ FXARGB_SETDIB(dest_scan, FXARGB_MAKE(src_scan[3], src_scan[0],
+ src_scan[1], src_scan[2]));
+ dest_scan += 4;
+ src_scan += 4;
}
- return;
- }
- src_r = FX_GAMMA(src_r);
- src_g = FX_GAMMA(src_g);
- src_b = FX_GAMMA(src_b);
- for (int row = rect.top; row < rect.bottom; row ++) {
- uint8_t* dest_scan = pBuffer + row * pBitmap->GetPitch() + rect.left * Bpp;
- if (bAlpha) {
- for (int col = 0; col < width; col ++) {
- uint8_t back_alpha = dest_scan[3];
- if (back_alpha == 0) {
- FXARGB_SETRGBORDERDIB(dest_scan, FXARGB_MAKE(src_alpha, src_r, src_g, src_b));
- dest_scan += 4;
- continue;
- }
- uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 255;
- dest_scan[3] = dest_alpha;
- int alpha_ratio = src_alpha * 255 / dest_alpha;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_r, alpha_ratio);
- dest_scan++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_g, alpha_ratio);
- dest_scan++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_b, alpha_ratio);
- dest_scan += 2;
- }
- } else {
- for (int col = 0; col < width; col ++) {
- *dest_scan = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(*dest_scan), src_r, src_alpha));
- dest_scan++;
- *dest_scan = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(*dest_scan), src_g, src_alpha));
- dest_scan++;
- *dest_scan = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(*dest_scan), src_b, src_alpha));
- dest_scan++;
- if (Bpp == 4) {
- dest_scan++;
- }
- }
+ } else {
+ for (int col = 0; col < width; col++) {
+ *dest_scan++ = src_scan[2];
+ *dest_scan++ = src_scan[1];
+ *dest_scan++ = src_scan[0];
+ src_scan += 3;
}
- }
-}
-void RgbByteOrderTransferBitmap(CFX_DIBitmap* pBitmap, int dest_left, int dest_top, int width, int height,
- const CFX_DIBSource* pSrcBitmap, int src_left, int src_top)
-{
- if (pBitmap == NULL) {
- return;
- }
- pBitmap->GetOverlapRect(dest_left, dest_top, width, height, pSrcBitmap->GetWidth(), pSrcBitmap->GetHeight(), src_left, src_top, NULL);
- if (width == 0 || height == 0) {
- return;
- }
- int Bpp = pBitmap->GetBPP() / 8;
- FXDIB_Format dest_format = pBitmap->GetFormat();
- FXDIB_Format src_format = pSrcBitmap->GetFormat();
- int pitch = pBitmap->GetPitch();
- uint8_t* buffer = pBitmap->GetBuffer();
- if (dest_format == src_format) {
- for (int row = 0; row < height; row ++) {
- uint8_t* dest_scan = buffer + (dest_top + row) * pitch + dest_left * Bpp;
- uint8_t* src_scan = (uint8_t*)pSrcBitmap->GetScanline(src_top + row) + src_left * Bpp;
- if (Bpp == 4) {
- for (int col = 0; col < width; col ++) {
- FXARGB_SETDIB(dest_scan, FXARGB_MAKE(src_scan[3], src_scan[0], src_scan[1], src_scan[2]));
- dest_scan += 4;
- src_scan += 4;
- }
- } else {
- for (int col = 0; col < width; col ++) {
- *dest_scan++ = src_scan[2];
- *dest_scan++ = src_scan[1];
- *dest_scan++ = src_scan[0];
- src_scan += 3;
- }
- }
+ }
+ }
+ return;
+ }
+ uint8_t* dest_buf = buffer + dest_top * pitch + dest_left * Bpp;
+ if (dest_format == FXDIB_Rgb) {
+ if (src_format == FXDIB_Rgb32) {
+ for (int row = 0; row < height; row++) {
+ uint8_t* dest_scan = dest_buf + row * pitch;
+ uint8_t* src_scan =
+ (uint8_t*)pSrcBitmap->GetScanline(src_top + row) + src_left * 4;
+ for (int col = 0; col < width; col++) {
+ *dest_scan++ = src_scan[2];
+ *dest_scan++ = src_scan[1];
+ *dest_scan++ = src_scan[0];
+ src_scan += 4;
}
- return;
- }
- uint8_t* dest_buf = buffer + dest_top * pitch + dest_left * Bpp;
- if (dest_format == FXDIB_Rgb) {
- if (src_format == FXDIB_Rgb32) {
- for (int row = 0; row < height; row ++) {
- uint8_t* dest_scan = dest_buf + row * pitch;
- uint8_t* src_scan = (uint8_t*)pSrcBitmap->GetScanline(src_top + row) + src_left * 4;
- for (int col = 0; col < width; col ++) {
- *dest_scan++ = src_scan[2];
- *dest_scan++ = src_scan[1];
- *dest_scan++ = src_scan[0];
- src_scan += 4;
- }
- }
+ }
+ } else {
+ ASSERT(FALSE);
+ }
+ } else if (dest_format == FXDIB_Argb || dest_format == FXDIB_Rgb32) {
+ if (src_format == FXDIB_Rgb) {
+ for (int row = 0; row < height; row++) {
+ uint8_t* dest_scan = (uint8_t*)(dest_buf + row * pitch);
+ uint8_t* src_scan =
+ (uint8_t*)pSrcBitmap->GetScanline(src_top + row) + src_left * 3;
+ if (src_format == FXDIB_Argb) {
+ for (int col = 0; col < width; col++) {
+ FXARGB_SETDIB(dest_scan, FXARGB_MAKE(0xff, FX_GAMMA(src_scan[0]),
+ FX_GAMMA(src_scan[1]),
+ FX_GAMMA(src_scan[2])));
+ dest_scan += 4;
+ src_scan += 3;
+ }
} else {
- ASSERT(FALSE);
+ for (int col = 0; col < width; col++) {
+ FXARGB_SETDIB(dest_scan, FXARGB_MAKE(0xff, src_scan[0], src_scan[1],
+ src_scan[2]));
+ dest_scan += 4;
+ src_scan += 3;
+ }
}
- } else if (dest_format == FXDIB_Argb || dest_format == FXDIB_Rgb32) {
- if (src_format == FXDIB_Rgb) {
- for (int row = 0; row < height; row ++) {
- uint8_t* dest_scan = (uint8_t*)(dest_buf + row * pitch);
- uint8_t* src_scan = (uint8_t*)pSrcBitmap->GetScanline(src_top + row) + src_left * 3;
- if (src_format == FXDIB_Argb) {
- for (int col = 0; col < width; col ++) {
- FXARGB_SETDIB(dest_scan, FXARGB_MAKE(0xff, FX_GAMMA(src_scan[0]), FX_GAMMA(src_scan[1]), FX_GAMMA(src_scan[2])));
- dest_scan += 4;
- src_scan += 3;
- }
- } else {
- for (int col = 0; col < width; col ++) {
- FXARGB_SETDIB(dest_scan, FXARGB_MAKE(0xff, src_scan[0], src_scan[1], src_scan[2]));
- dest_scan += 4;
- src_scan += 3;
- }
- }
- }
- } else if (src_format == FXDIB_Rgb32) {
- ASSERT(dest_format == FXDIB_Argb);
- for (int row = 0; row < height; row ++) {
- uint8_t* dest_scan = dest_buf + row * pitch;
- uint8_t* src_scan = (uint8_t*)(pSrcBitmap->GetScanline(src_top + row) + src_left * 4);
- for (int col = 0; col < width; col++) {
- FXARGB_SETDIB(dest_scan, FXARGB_MAKE(0xff, src_scan[0], src_scan[1], src_scan[2]));
- src_scan += 4;
- dest_scan += 4;
- }
- }
+ }
+ } else if (src_format == FXDIB_Rgb32) {
+ ASSERT(dest_format == FXDIB_Argb);
+ for (int row = 0; row < height; row++) {
+ uint8_t* dest_scan = dest_buf + row * pitch;
+ uint8_t* src_scan =
+ (uint8_t*)(pSrcBitmap->GetScanline(src_top + row) + src_left * 4);
+ for (int col = 0; col < width; col++) {
+ FXARGB_SETDIB(dest_scan, FXARGB_MAKE(0xff, src_scan[0], src_scan[1],
+ src_scan[2]));
+ src_scan += 4;
+ dest_scan += 4;
}
- } else {
- ASSERT(FALSE);
+ }
}
+ } else {
+ ASSERT(FALSE);
+ }
}
-FX_ARGB _DefaultCMYK2ARGB(FX_CMYK cmyk, uint8_t alpha)
-{
- uint8_t r, g, b;
- AdobeCMYK_to_sRGB1(FXSYS_GetCValue(cmyk), FXSYS_GetMValue(cmyk), FXSYS_GetYValue(cmyk), FXSYS_GetKValue(cmyk),
- r, g, b);
- return ArgbEncode(alpha, r, g, b);
+FX_ARGB _DefaultCMYK2ARGB(FX_CMYK cmyk, uint8_t alpha) {
+ uint8_t r, g, b;
+ AdobeCMYK_to_sRGB1(FXSYS_GetCValue(cmyk), FXSYS_GetMValue(cmyk),
+ FXSYS_GetYValue(cmyk), FXSYS_GetKValue(cmyk), r, g, b);
+ return ArgbEncode(alpha, r, g, b);
}
-FX_BOOL _DibSetPixel(CFX_DIBitmap* pDevice, int x, int y, FX_DWORD color, int alpha_flag, void* pIccTransform)
-{
- FX_BOOL bObjCMYK = FXGETFLAG_COLORTYPE(alpha_flag);
- int alpha = bObjCMYK ? FXGETFLAG_ALPHA_FILL(alpha_flag) : FXARGB_A(color);
- if (pIccTransform) {
- ICodec_IccModule* pIccModule = CFX_GEModule::Get()->GetCodecModule()->GetIccModule();
- color = bObjCMYK ? FXCMYK_TODIB(color) : FXARGB_TODIB(color);
- pIccModule->TranslateScanline(pIccTransform, (uint8_t*)&color, (uint8_t*)&color, 1);
- color = bObjCMYK ? FXCMYK_TODIB(color) : FXARGB_TODIB(color);
- if (!pDevice->IsCmykImage()) {
- color = (color & 0xffffff) | (alpha << 24);
- }
+FX_BOOL _DibSetPixel(CFX_DIBitmap* pDevice,
+ int x,
+ int y,
+ FX_DWORD color,
+ int alpha_flag,
+ void* pIccTransform) {
+ FX_BOOL bObjCMYK = FXGETFLAG_COLORTYPE(alpha_flag);
+ int alpha = bObjCMYK ? FXGETFLAG_ALPHA_FILL(alpha_flag) : FXARGB_A(color);
+ if (pIccTransform) {
+ ICodec_IccModule* pIccModule =
+ CFX_GEModule::Get()->GetCodecModule()->GetIccModule();
+ color = bObjCMYK ? FXCMYK_TODIB(color) : FXARGB_TODIB(color);
+ pIccModule->TranslateScanline(pIccTransform, (uint8_t*)&color,
+ (uint8_t*)&color, 1);
+ color = bObjCMYK ? FXCMYK_TODIB(color) : FXARGB_TODIB(color);
+ if (!pDevice->IsCmykImage()) {
+ color = (color & 0xffffff) | (alpha << 24);
+ }
+ } else {
+ if (pDevice->IsCmykImage()) {
+ if (!bObjCMYK) {
+ return FALSE;
+ }
} else {
- if (pDevice->IsCmykImage()) {
- if (!bObjCMYK) {
- return FALSE;
- }
- } else {
- if (bObjCMYK) {
- color = _DefaultCMYK2ARGB(color, alpha);
- }
- }
- }
- pDevice->SetPixel(x, y, color);
- if (pDevice->m_pAlphaMask) {
- pDevice->m_pAlphaMask->SetPixel(x, y, alpha << 24);
- }
- return TRUE;
+ if (bObjCMYK) {
+ color = _DefaultCMYK2ARGB(color, alpha);
+ }
+ }
+ }
+ pDevice->SetPixel(x, y, color);
+ if (pDevice->m_pAlphaMask) {
+ pDevice->m_pAlphaMask->SetPixel(x, y, alpha << 24);
+ }
+ return TRUE;
}
-FX_BOOL CFX_AggDeviceDriver::SetPixel(int x, int y, FX_DWORD color, int alpha_flag, void* pIccTransform)
-{
- if (m_pBitmap->GetBuffer() == NULL) {
- return TRUE;
- }
- if (!CFX_GEModule::Get()->GetCodecModule() || !CFX_GEModule::Get()->GetCodecModule()->GetIccModule()) {
- pIccTransform = NULL;
- }
- if (m_pClipRgn == NULL) {
- if (m_bRgbByteOrder) {
- RgbByteOrderSetPixel(m_pBitmap, x, y, color);
- } else {
- return _DibSetPixel(m_pBitmap, x, y, color, alpha_flag, pIccTransform);
- }
- } else if (m_pClipRgn->GetBox().Contains(x, y)) {
- if (m_pClipRgn->GetType() == CFX_ClipRgn::RectI) {
- if (m_bRgbByteOrder) {
- RgbByteOrderSetPixel(m_pBitmap, x, y, color);
- } else {
- return _DibSetPixel(m_pBitmap, x, y, color, alpha_flag, pIccTransform);
- }
- } else if (m_pClipRgn->GetType() == CFX_ClipRgn::MaskF) {
- const CFX_DIBitmap* pMask = m_pClipRgn->GetMask();
- FX_BOOL bCMYK = FXGETFLAG_COLORTYPE(alpha_flag);
- int new_alpha = bCMYK ? FXGETFLAG_ALPHA_FILL(alpha_flag) : FXARGB_A(color);
- new_alpha = new_alpha * pMask->GetScanline(y)[x] / 255;
- if (m_bRgbByteOrder) {
- RgbByteOrderSetPixel(m_pBitmap, x, y, (color & 0xffffff) | (new_alpha << 24));
- return TRUE;
- }
- if (bCMYK) {
- FXSETFLAG_ALPHA_FILL(alpha_flag, new_alpha);
- } else {
- color = (color & 0xffffff) | (new_alpha << 24);
- }
- return _DibSetPixel(m_pBitmap, x, y, color, alpha_flag, pIccTransform);
- }
- }
+FX_BOOL CFX_AggDeviceDriver::SetPixel(int x,
+ int y,
+ FX_DWORD color,
+ int alpha_flag,
+ void* pIccTransform) {
+ if (m_pBitmap->GetBuffer() == NULL) {
return TRUE;
-}
-FX_BOOL CFX_AggDeviceDriver::FillRect(const FX_RECT* pRect, FX_DWORD fill_color, int alpha_flag, void* pIccTransform, int blend_type)
-{
- if (blend_type != FXDIB_BLEND_NORMAL) {
- return FALSE;
- }
- if (m_pBitmap->GetBuffer() == NULL) {
- return TRUE;
- }
- FX_RECT clip_rect;
- GetClipBox(&clip_rect);
- FX_RECT draw_rect = clip_rect;
- if (pRect) {
- draw_rect.Intersect(*pRect);
- }
- if (draw_rect.IsEmpty()) {
- return TRUE;
- }
- if (m_pClipRgn == NULL || m_pClipRgn->GetType() == CFX_ClipRgn::RectI) {
- if (m_bRgbByteOrder) {
- RgbByteOrderCompositeRect(m_pBitmap, draw_rect.left, draw_rect.top, draw_rect.Width(), draw_rect.Height(), fill_color);
- } else {
- m_pBitmap->CompositeRect(draw_rect.left, draw_rect.top, draw_rect.Width(), draw_rect.Height(), fill_color, alpha_flag, pIccTransform);
- }
+ }
+ if (!CFX_GEModule::Get()->GetCodecModule() ||
+ !CFX_GEModule::Get()->GetCodecModule()->GetIccModule()) {
+ pIccTransform = NULL;
+ }
+ if (m_pClipRgn == NULL) {
+ if (m_bRgbByteOrder) {
+ RgbByteOrderSetPixel(m_pBitmap, x, y, color);
+ } else {
+ return _DibSetPixel(m_pBitmap, x, y, color, alpha_flag, pIccTransform);
+ }
+ } else if (m_pClipRgn->GetBox().Contains(x, y)) {
+ if (m_pClipRgn->GetType() == CFX_ClipRgn::RectI) {
+ if (m_bRgbByteOrder) {
+ RgbByteOrderSetPixel(m_pBitmap, x, y, color);
+ } else {
+ return _DibSetPixel(m_pBitmap, x, y, color, alpha_flag, pIccTransform);
+ }
+ } else if (m_pClipRgn->GetType() == CFX_ClipRgn::MaskF) {
+ const CFX_DIBitmap* pMask = m_pClipRgn->GetMask();
+ FX_BOOL bCMYK = FXGETFLAG_COLORTYPE(alpha_flag);
+ int new_alpha =
+ bCMYK ? FXGETFLAG_ALPHA_FILL(alpha_flag) : FXARGB_A(color);
+ new_alpha = new_alpha * pMask->GetScanline(y)[x] / 255;
+ if (m_bRgbByteOrder) {
+ RgbByteOrderSetPixel(m_pBitmap, x, y,
+ (color & 0xffffff) | (new_alpha << 24));
return TRUE;
+ }
+ if (bCMYK) {
+ FXSETFLAG_ALPHA_FILL(alpha_flag, new_alpha);
+ } else {
+ color = (color & 0xffffff) | (new_alpha << 24);
+ }
+ return _DibSetPixel(m_pBitmap, x, y, color, alpha_flag, pIccTransform);
+ }
+ }
+ return TRUE;
+}
+FX_BOOL CFX_AggDeviceDriver::FillRect(const FX_RECT* pRect,
+ FX_DWORD fill_color,
+ int alpha_flag,
+ void* pIccTransform,
+ int blend_type) {
+ if (blend_type != FXDIB_BLEND_NORMAL) {
+ return FALSE;
+ }
+ if (m_pBitmap->GetBuffer() == NULL) {
+ return TRUE;
+ }
+ FX_RECT clip_rect;
+ GetClipBox(&clip_rect);
+ FX_RECT draw_rect = clip_rect;
+ if (pRect) {
+ draw_rect.Intersect(*pRect);
+ }
+ if (draw_rect.IsEmpty()) {
+ return TRUE;
+ }
+ if (m_pClipRgn == NULL || m_pClipRgn->GetType() == CFX_ClipRgn::RectI) {
+ if (m_bRgbByteOrder) {
+ RgbByteOrderCompositeRect(m_pBitmap, draw_rect.left, draw_rect.top,
+ draw_rect.Width(), draw_rect.Height(),
+ fill_color);
+ } else {
+ m_pBitmap->CompositeRect(draw_rect.left, draw_rect.top, draw_rect.Width(),
+ draw_rect.Height(), fill_color, alpha_flag,
+ pIccTransform);
}
- m_pBitmap->CompositeMask(draw_rect.left, draw_rect.top, draw_rect.Width(), draw_rect.Height(), (const CFX_DIBitmap*)m_pClipRgn->GetMask(),
- fill_color, draw_rect.left - clip_rect.left, draw_rect.top - clip_rect.top, FXDIB_BLEND_NORMAL, NULL, m_bRgbByteOrder, alpha_flag, pIccTransform);
return TRUE;
+ }
+ m_pBitmap->CompositeMask(
+ draw_rect.left, draw_rect.top, draw_rect.Width(), draw_rect.Height(),
+ (const CFX_DIBitmap*)m_pClipRgn->GetMask(), fill_color,
+ draw_rect.left - clip_rect.left, draw_rect.top - clip_rect.top,
+ FXDIB_BLEND_NORMAL, NULL, m_bRgbByteOrder, alpha_flag, pIccTransform);
+ return TRUE;
}
-FX_BOOL CFX_AggDeviceDriver::GetClipBox(FX_RECT* pRect)
-{
- if (m_pClipRgn == NULL) {
- pRect->left = pRect->top = 0;
- pRect->right = GetDeviceCaps(FXDC_PIXEL_WIDTH);
- pRect->bottom = GetDeviceCaps(FXDC_PIXEL_HEIGHT);
- return TRUE;
- }
- *pRect = m_pClipRgn->GetBox();
+FX_BOOL CFX_AggDeviceDriver::GetClipBox(FX_RECT* pRect) {
+ if (m_pClipRgn == NULL) {
+ pRect->left = pRect->top = 0;
+ pRect->right = GetDeviceCaps(FXDC_PIXEL_WIDTH);
+ pRect->bottom = GetDeviceCaps(FXDC_PIXEL_HEIGHT);
return TRUE;
+ }
+ *pRect = m_pClipRgn->GetBox();
+ return TRUE;
}
-FX_BOOL CFX_AggDeviceDriver::GetDIBits(CFX_DIBitmap* pBitmap, int left, int top, void* pIccTransform, FX_BOOL bDEdge)
-{
- if (m_pBitmap->GetBuffer() == NULL) {
- return TRUE;
- }
- if (bDEdge) {
- if (m_bRgbByteOrder) {
- RgbByteOrderTransferBitmap(pBitmap, 0, 0, pBitmap->GetWidth(), pBitmap->GetHeight(), m_pBitmap, left, top);
- } else {
- return pBitmap->TransferBitmap(0, 0, pBitmap->GetWidth(), pBitmap->GetHeight(), m_pBitmap, left, top, pIccTransform);
- }
- return TRUE;
- }
- FX_RECT rect(left, top, left + pBitmap->GetWidth(), top + pBitmap->GetHeight());
- CFX_DIBitmap *pBack = NULL;
- if (m_pOriDevice) {
- pBack = m_pOriDevice->Clone(&rect);
- if (!pBack) {
- return TRUE;
- }
- pBack->CompositeBitmap(0, 0, pBack->GetWidth(), pBack->GetHeight(), m_pBitmap, 0, 0);
- } else {
- pBack = m_pBitmap->Clone(&rect);
- }
- if (!pBack) {
- return TRUE;
- }
- FX_BOOL bRet = TRUE;
- left = left >= 0 ? 0 : left;
- top = top >= 0 ? 0 : top;
+FX_BOOL CFX_AggDeviceDriver::GetDIBits(CFX_DIBitmap* pBitmap,
+ int left,
+ int top,
+ void* pIccTransform,
+ FX_BOOL bDEdge) {
+ if (m_pBitmap->GetBuffer() == NULL) {
+ return TRUE;
+ }
+ if (bDEdge) {
if (m_bRgbByteOrder) {
- RgbByteOrderTransferBitmap(pBitmap, 0, 0, rect.Width(), rect.Height(), pBack, left, top);
+ RgbByteOrderTransferBitmap(pBitmap, 0, 0, pBitmap->GetWidth(),
+ pBitmap->GetHeight(), m_pBitmap, left, top);
} else {
- bRet = pBitmap->TransferBitmap(0, 0, rect.Width(), rect.Height(), pBack, left, top, pIccTransform);
+ return pBitmap->TransferBitmap(0, 0, pBitmap->GetWidth(),
+ pBitmap->GetHeight(), m_pBitmap, left, top,
+ pIccTransform);
}
- delete pBack;
- return bRet;
+ return TRUE;
+ }
+ FX_RECT rect(left, top, left + pBitmap->GetWidth(),
+ top + pBitmap->GetHeight());
+ CFX_DIBitmap* pBack = NULL;
+ if (m_pOriDevice) {
+ pBack = m_pOriDevice->Clone(&rect);
+ if (!pBack) {
+ return TRUE;
+ }
+ pBack->CompositeBitmap(0, 0, pBack->GetWidth(), pBack->GetHeight(),
+ m_pBitmap, 0, 0);
+ } else {
+ pBack = m_pBitmap->Clone(&rect);
+ }
+ if (!pBack) {
+ return TRUE;
+ }
+ FX_BOOL bRet = TRUE;
+ left = left >= 0 ? 0 : left;
+ top = top >= 0 ? 0 : top;
+ if (m_bRgbByteOrder) {
+ RgbByteOrderTransferBitmap(pBitmap, 0, 0, rect.Width(), rect.Height(),
+ pBack, left, top);
+ } else {
+ bRet = pBitmap->TransferBitmap(0, 0, rect.Width(), rect.Height(), pBack,
+ left, top, pIccTransform);
+ }
+ delete pBack;
+ return bRet;
}
-FX_BOOL CFX_AggDeviceDriver::SetDIBits(const CFX_DIBSource* pBitmap, FX_DWORD argb, const FX_RECT* pSrcRect, int left, int top, int blend_type,
- int alpha_flag, void* pIccTransform)
-{
- if (m_pBitmap->GetBuffer() == NULL) {
- return TRUE;
- }
- if (pBitmap->IsAlphaMask())
- return m_pBitmap->CompositeMask(left, top, pSrcRect->Width(), pSrcRect->Height(), pBitmap, argb,
- pSrcRect->left, pSrcRect->top, blend_type, m_pClipRgn, m_bRgbByteOrder, alpha_flag, pIccTransform);
- return m_pBitmap->CompositeBitmap(left, top, pSrcRect->Width(), pSrcRect->Height(), pBitmap,
- pSrcRect->left, pSrcRect->top, blend_type, m_pClipRgn, m_bRgbByteOrder, pIccTransform);
+FX_BOOL CFX_AggDeviceDriver::SetDIBits(const CFX_DIBSource* pBitmap,
+ FX_DWORD argb,
+ const FX_RECT* pSrcRect,
+ int left,
+ int top,
+ int blend_type,
+ int alpha_flag,
+ void* pIccTransform) {
+ if (m_pBitmap->GetBuffer() == NULL) {
+ return TRUE;
+ }
+ if (pBitmap->IsAlphaMask())
+ return m_pBitmap->CompositeMask(
+ left, top, pSrcRect->Width(), pSrcRect->Height(), pBitmap, argb,
+ pSrcRect->left, pSrcRect->top, blend_type, m_pClipRgn, m_bRgbByteOrder,
+ alpha_flag, pIccTransform);
+ return m_pBitmap->CompositeBitmap(
+ left, top, pSrcRect->Width(), pSrcRect->Height(), pBitmap, pSrcRect->left,
+ pSrcRect->top, blend_type, m_pClipRgn, m_bRgbByteOrder, pIccTransform);
}
-FX_BOOL CFX_AggDeviceDriver::StretchDIBits(const CFX_DIBSource* pSource, FX_DWORD argb, int dest_left, int dest_top,
- int dest_width, int dest_height, const FX_RECT* pClipRect, FX_DWORD flags,
- int alpha_flag, void* pIccTransform, int blend_type)
-{
- if (m_pBitmap->GetBuffer() == NULL) {
- return TRUE;
- }
- if (dest_width == pSource->GetWidth() && dest_height == pSource->GetHeight()) {
- FX_RECT rect(0, 0, dest_width, dest_height);
- return SetDIBits(pSource, argb, &rect, dest_left, dest_top, blend_type, alpha_flag, pIccTransform);
- }
- FX_RECT dest_rect(dest_left, dest_top, dest_left + dest_width, dest_top + dest_height);
- dest_rect.Normalize();
- FX_RECT dest_clip = dest_rect;
- dest_clip.Intersect(*pClipRect);
- CFX_BitmapComposer composer;
- composer.Compose(m_pBitmap, m_pClipRgn, 255, argb, dest_clip, FALSE, FALSE, FALSE, m_bRgbByteOrder, alpha_flag, pIccTransform, blend_type);
- dest_clip.Offset(-dest_rect.left, -dest_rect.top);
- CFX_ImageStretcher stretcher;
- if (stretcher.Start(&composer, pSource, dest_width, dest_height, dest_clip, flags)) {
- stretcher.Continue(NULL);
- }
+FX_BOOL CFX_AggDeviceDriver::StretchDIBits(const CFX_DIBSource* pSource,
+ FX_DWORD argb,
+ int dest_left,
+ int dest_top,
+ int dest_width,
+ int dest_height,
+ const FX_RECT* pClipRect,
+ FX_DWORD flags,
+ int alpha_flag,
+ void* pIccTransform,
+ int blend_type) {
+ if (m_pBitmap->GetBuffer() == NULL) {
return TRUE;
+ }
+ if (dest_width == pSource->GetWidth() &&
+ dest_height == pSource->GetHeight()) {
+ FX_RECT rect(0, 0, dest_width, dest_height);
+ return SetDIBits(pSource, argb, &rect, dest_left, dest_top, blend_type,
+ alpha_flag, pIccTransform);
+ }
+ FX_RECT dest_rect(dest_left, dest_top, dest_left + dest_width,
+ dest_top + dest_height);
+ dest_rect.Normalize();
+ FX_RECT dest_clip = dest_rect;
+ dest_clip.Intersect(*pClipRect);
+ CFX_BitmapComposer composer;
+ composer.Compose(m_pBitmap, m_pClipRgn, 255, argb, dest_clip, FALSE, FALSE,
+ FALSE, m_bRgbByteOrder, alpha_flag, pIccTransform,
+ blend_type);
+ dest_clip.Offset(-dest_rect.left, -dest_rect.top);
+ CFX_ImageStretcher stretcher;
+ if (stretcher.Start(&composer, pSource, dest_width, dest_height, dest_clip,
+ flags)) {
+ stretcher.Continue(NULL);
+ }
+ return TRUE;
}
-FX_BOOL CFX_AggDeviceDriver::StartDIBits(const CFX_DIBSource* pSource, int bitmap_alpha, FX_DWORD argb,
- const CFX_AffineMatrix* pMatrix, FX_DWORD render_flags, void*& handle,
- int alpha_flag, void* pIccTransform, int blend_type)
-{
- if (m_pBitmap->GetBuffer() == NULL) {
- return TRUE;
- }
- CFX_ImageRenderer* pRenderer = new CFX_ImageRenderer;
- pRenderer->Start(m_pBitmap, m_pClipRgn, pSource, bitmap_alpha, argb, pMatrix, render_flags, m_bRgbByteOrder, alpha_flag, pIccTransform);
- handle = pRenderer;
+FX_BOOL CFX_AggDeviceDriver::StartDIBits(const CFX_DIBSource* pSource,
+ int bitmap_alpha,
+ FX_DWORD argb,
+ const CFX_AffineMatrix* pMatrix,
+ FX_DWORD render_flags,
+ void*& handle,
+ int alpha_flag,
+ void* pIccTransform,
+ int blend_type) {
+ if (m_pBitmap->GetBuffer() == NULL) {
return TRUE;
+ }
+ CFX_ImageRenderer* pRenderer = new CFX_ImageRenderer;
+ pRenderer->Start(m_pBitmap, m_pClipRgn, pSource, bitmap_alpha, argb, pMatrix,
+ render_flags, m_bRgbByteOrder, alpha_flag, pIccTransform);
+ handle = pRenderer;
+ return TRUE;
}
-FX_BOOL CFX_AggDeviceDriver::ContinueDIBits(void* pHandle, IFX_Pause* pPause)
-{
- if (m_pBitmap->GetBuffer() == NULL) {
- return TRUE;
- }
- return ((CFX_ImageRenderer*)pHandle)->Continue(pPause);
+FX_BOOL CFX_AggDeviceDriver::ContinueDIBits(void* pHandle, IFX_Pause* pPause) {
+ if (m_pBitmap->GetBuffer() == NULL) {
+ return TRUE;
+ }
+ return ((CFX_ImageRenderer*)pHandle)->Continue(pPause);
}
-void CFX_AggDeviceDriver::CancelDIBits(void* pHandle)
-{
- if (m_pBitmap->GetBuffer() == NULL) {
- return;
- }
- delete (CFX_ImageRenderer*)pHandle;
+void CFX_AggDeviceDriver::CancelDIBits(void* pHandle) {
+ if (m_pBitmap->GetBuffer() == NULL) {
+ return;
+ }
+ delete (CFX_ImageRenderer*)pHandle;
}
-CFX_FxgeDevice::CFX_FxgeDevice()
-{
- m_bOwnedBitmap = FALSE;
+CFX_FxgeDevice::CFX_FxgeDevice() {
+ m_bOwnedBitmap = FALSE;
}
-FX_BOOL CFX_FxgeDevice::Attach(CFX_DIBitmap* pBitmap, int dither_bits, FX_BOOL bRgbByteOrder, CFX_DIBitmap* pOriDevice, FX_BOOL bGroupKnockout)
-{
- if (pBitmap == NULL) {
- return FALSE;
- }
- SetBitmap(pBitmap);
- IFX_RenderDeviceDriver* pDriver = new CFX_AggDeviceDriver(pBitmap, dither_bits, bRgbByteOrder, pOriDevice, bGroupKnockout);
- SetDeviceDriver(pDriver);
- return TRUE;
+FX_BOOL CFX_FxgeDevice::Attach(CFX_DIBitmap* pBitmap,
+ int dither_bits,
+ FX_BOOL bRgbByteOrder,
+ CFX_DIBitmap* pOriDevice,
+ FX_BOOL bGroupKnockout) {
+ if (pBitmap == NULL) {
+ return FALSE;
+ }
+ SetBitmap(pBitmap);
+ IFX_RenderDeviceDriver* pDriver = new CFX_AggDeviceDriver(
+ pBitmap, dither_bits, bRgbByteOrder, pOriDevice, bGroupKnockout);
+ SetDeviceDriver(pDriver);
+ return TRUE;
}
-FX_BOOL CFX_FxgeDevice::Create(int width, int height, FXDIB_Format format, int dither_bits, CFX_DIBitmap* pOriDevice)
-{
- m_bOwnedBitmap = TRUE;
- CFX_DIBitmap* pBitmap = new CFX_DIBitmap;
- if (!pBitmap->Create(width, height, format)) {
- delete pBitmap;
- return FALSE;
- }
- SetBitmap(pBitmap);
- IFX_RenderDeviceDriver* pDriver = new CFX_AggDeviceDriver(pBitmap, dither_bits, FALSE, pOriDevice, FALSE);
- SetDeviceDriver(pDriver);
- return TRUE;
+FX_BOOL CFX_FxgeDevice::Create(int width,
+ int height,
+ FXDIB_Format format,
+ int dither_bits,
+ CFX_DIBitmap* pOriDevice) {
+ m_bOwnedBitmap = TRUE;
+ CFX_DIBitmap* pBitmap = new CFX_DIBitmap;
+ if (!pBitmap->Create(width, height, format)) {
+ delete pBitmap;
+ return FALSE;
+ }
+ SetBitmap(pBitmap);
+ IFX_RenderDeviceDriver* pDriver =
+ new CFX_AggDeviceDriver(pBitmap, dither_bits, FALSE, pOriDevice, FALSE);
+ SetDeviceDriver(pDriver);
+ return TRUE;
}
-CFX_FxgeDevice::~CFX_FxgeDevice()
-{
- if (m_bOwnedBitmap) {
- delete GetBitmap();
- }
+CFX_FxgeDevice::~CFX_FxgeDevice() {
+ if (m_bOwnedBitmap) {
+ delete GetBitmap();
+ }
}
diff --git a/core/src/fxge/android/fpf_skiafont.cpp b/core/src/fxge/android/fpf_skiafont.cpp
index 2dad01057a..ba202acc92 100644
--- a/core/src/fxge/android/fpf_skiafont.cpp
+++ b/core/src/fxge/android/fpf_skiafont.cpp
@@ -8,197 +8,203 @@
#if _FX_OS_ == _FX_ANDROID_
#include "fpf_skiafont.h"
#include "fpf_skiafontmgr.h"
-#define FPF_EM_ADJUST(em, a) (em == 0 ? (a) : (a) * 1000 / em)
+#define FPF_EM_ADJUST(em, a) (em == 0 ? (a) : (a)*1000 / em)
CFPF_SkiaFont::CFPF_SkiaFont()
- : m_pFontMgr(NULL)
- , m_pFontDes(NULL)
- , m_Face(NULL)
- , m_dwStyle(0)
- , m_uCharset(0)
- , m_dwRefCount(0)
-{
-}
-CFPF_SkiaFont::~CFPF_SkiaFont()
-{
- if (m_Face) {
- FXFT_Done_Face(m_Face);
- }
-}
-void CFPF_SkiaFont::Release()
-{
- if (--m_dwRefCount == 0) {
- delete this;
- }
-}
-IFPF_Font* CFPF_SkiaFont::Retain()
-{
- m_dwRefCount++;
- return (IFPF_Font*)this;
-}
-FPF_HFONT CFPF_SkiaFont::GetHandle()
-{
- return NULL;
-}
-CFX_ByteString CFPF_SkiaFont::GetFamilyName()
-{
- if (!m_Face) {
- return CFX_ByteString();
- }
- return CFX_ByteString(FXFT_Get_Face_Family_Name(m_Face));
-}
-CFX_WideString CFPF_SkiaFont::GetPsName()
-{
- if (!m_Face) {
- return CFX_WideString();
- }
- return CFX_WideString::FromLocal(FXFT_Get_Postscript_Name(m_Face));
-}
-int32_t CFPF_SkiaFont::GetGlyphIndex(FX_WCHAR wUnicode)
-{
- if (!m_Face) {
- return wUnicode;
- }
- if (FXFT_Select_Charmap(m_Face, FXFT_ENCODING_UNICODE)) {
- return 0;
- }
- return FXFT_Get_Char_Index(m_Face, wUnicode);
-}
-int32_t CFPF_SkiaFont::GetGlyphWidth(int32_t iGlyphIndex)
-{
- if (!m_Face) {
- return 0;
- }
- if (FXFT_Load_Glyph(m_Face, iGlyphIndex, FXFT_LOAD_NO_SCALE | FXFT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH)) {
- return 0;
- }
- return FPF_EM_ADJUST(FXFT_Get_Face_UnitsPerEM(m_Face), FXFT_Get_Glyph_HoriAdvance(m_Face));
-}
-int32_t CFPF_SkiaFont::GetAscent() const
-{
- if (!m_Face) {
- return 0;
- }
- return FPF_EM_ADJUST(FXFT_Get_Face_UnitsPerEM(m_Face), FXFT_Get_Face_Ascender(m_Face));
-}
-int32_t CFPF_SkiaFont::GetDescent() const
-{
- if (!m_Face) {
- return 0;
- }
- return FPF_EM_ADJUST(FXFT_Get_Face_UnitsPerEM(m_Face), FXFT_Get_Face_Descender(m_Face));
+ : m_pFontMgr(NULL),
+ m_pFontDes(NULL),
+ m_Face(NULL),
+ m_dwStyle(0),
+ m_uCharset(0),
+ m_dwRefCount(0) {}
+CFPF_SkiaFont::~CFPF_SkiaFont() {
+ if (m_Face) {
+ FXFT_Done_Face(m_Face);
+ }
+}
+void CFPF_SkiaFont::Release() {
+ if (--m_dwRefCount == 0) {
+ delete this;
+ }
+}
+IFPF_Font* CFPF_SkiaFont::Retain() {
+ m_dwRefCount++;
+ return (IFPF_Font*)this;
+}
+FPF_HFONT CFPF_SkiaFont::GetHandle() {
+ return NULL;
+}
+CFX_ByteString CFPF_SkiaFont::GetFamilyName() {
+ if (!m_Face) {
+ return CFX_ByteString();
+ }
+ return CFX_ByteString(FXFT_Get_Face_Family_Name(m_Face));
+}
+CFX_WideString CFPF_SkiaFont::GetPsName() {
+ if (!m_Face) {
+ return CFX_WideString();
+ }
+ return CFX_WideString::FromLocal(FXFT_Get_Postscript_Name(m_Face));
+}
+int32_t CFPF_SkiaFont::GetGlyphIndex(FX_WCHAR wUnicode) {
+ if (!m_Face) {
+ return wUnicode;
+ }
+ if (FXFT_Select_Charmap(m_Face, FXFT_ENCODING_UNICODE)) {
+ return 0;
+ }
+ return FXFT_Get_Char_Index(m_Face, wUnicode);
}
-FX_BOOL CFPF_SkiaFont::GetGlyphBBox(int32_t iGlyphIndex, FX_RECT &rtBBox)
-{
- if (!m_Face) {
- return FALSE;
- }
- if (FXFT_Is_Face_Tricky(m_Face)) {
- if (FXFT_Set_Char_Size(m_Face, 0, 1000 * 64, 72, 72)) {
- return FALSE;
- }
- if (FXFT_Load_Glyph(m_Face, iGlyphIndex, FXFT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH)) {
- FXFT_Set_Pixel_Sizes(m_Face, 0, 64);
- return FALSE;
- }
- FXFT_Glyph glyph;
- if (FXFT_Get_Glyph(m_Face->glyph, &glyph)) {
- FXFT_Set_Pixel_Sizes(m_Face, 0, 64);
- return FALSE;
- }
- FXFT_BBox cbox;
- FXFT_Glyph_Get_CBox(glyph, FXFT_GLYPH_BBOX_PIXELS, &cbox);
- int32_t x_ppem = m_Face->size->metrics.x_ppem;
- int32_t y_ppem = m_Face->size->metrics.y_ppem;
- rtBBox.left = FPF_EM_ADJUST(x_ppem, cbox.xMin);
- rtBBox.right = FPF_EM_ADJUST(x_ppem, cbox.xMax);
- rtBBox.top = FPF_EM_ADJUST(y_ppem, cbox.yMax);
- rtBBox.bottom = FPF_EM_ADJUST(y_ppem, cbox.yMin);
- rtBBox.top = FX_MIN(rtBBox.top, GetAscent());
- rtBBox.bottom = FX_MAX(rtBBox.bottom, GetDescent());
- FXFT_Done_Glyph(glyph);
- return FXFT_Set_Pixel_Sizes(m_Face, 0, 64) == 0;
- }
- if (FXFT_Load_Glyph(m_Face, iGlyphIndex, FXFT_LOAD_NO_SCALE | FXFT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH)) {
- return FALSE;
- }
- rtBBox.left = FPF_EM_ADJUST(FXFT_Get_Face_UnitsPerEM(m_Face), FXFT_Get_Glyph_HoriBearingX(m_Face));
- rtBBox.bottom = FPF_EM_ADJUST(FXFT_Get_Face_UnitsPerEM(m_Face), FXFT_Get_Glyph_HoriBearingY(m_Face));
- rtBBox.right = FPF_EM_ADJUST(FXFT_Get_Face_UnitsPerEM(m_Face), FXFT_Get_Glyph_HoriBearingX(m_Face) + FXFT_Get_Glyph_Width(m_Face));
- rtBBox.top = FPF_EM_ADJUST(FXFT_Get_Face_UnitsPerEM(m_Face), FXFT_Get_Glyph_HoriBearingY(m_Face) - FXFT_Get_Glyph_Height(m_Face));
- return TRUE;
-}
-FX_BOOL CFPF_SkiaFont::GetBBox(FX_RECT &rtBBox)
-{
- if (!m_Face) {
- return FALSE;
- }
- rtBBox.left = FPF_EM_ADJUST(FXFT_Get_Face_UnitsPerEM(m_Face), FXFT_Get_Face_xMin(m_Face));
- rtBBox.top = FPF_EM_ADJUST(FXFT_Get_Face_UnitsPerEM(m_Face), FXFT_Get_Face_yMin(m_Face));
- rtBBox.right = FPF_EM_ADJUST(FXFT_Get_Face_UnitsPerEM(m_Face), FXFT_Get_Face_xMax(m_Face));
- rtBBox.bottom = FPF_EM_ADJUST(FXFT_Get_Face_UnitsPerEM(m_Face), FXFT_Get_Face_yMax(m_Face));
- return TRUE;
-}
-int32_t CFPF_SkiaFont::GetHeight() const
-{
- if (!m_Face) {
- return 0;
- }
- return FPF_EM_ADJUST(FXFT_Get_Face_UnitsPerEM(m_Face), FXFT_Get_Face_Height(m_Face));
+int32_t CFPF_SkiaFont::GetGlyphWidth(int32_t iGlyphIndex) {
+ if (!m_Face) {
+ return 0;
+ }
+ if (FXFT_Load_Glyph(
+ m_Face, iGlyphIndex,
+ FXFT_LOAD_NO_SCALE | FXFT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH)) {
+ return 0;
+ }
+ return FPF_EM_ADJUST(FXFT_Get_Face_UnitsPerEM(m_Face),
+ FXFT_Get_Glyph_HoriAdvance(m_Face));
}
-int32_t CFPF_SkiaFont::GetItalicAngle() const
-{
- if (!m_Face) {
- return 0;
- }
- TT_Postscript *ttInfo = (TT_Postscript*)FT_Get_Sfnt_Table(m_Face, ft_sfnt_post);
- if (ttInfo) {
- return ttInfo->italicAngle;
- }
+int32_t CFPF_SkiaFont::GetAscent() const {
+ if (!m_Face) {
return 0;
+ }
+ return FPF_EM_ADJUST(FXFT_Get_Face_UnitsPerEM(m_Face),
+ FXFT_Get_Face_Ascender(m_Face));
}
-FX_DWORD CFPF_SkiaFont::GetFontData(FX_DWORD dwTable, uint8_t* pBuffer, FX_DWORD dwSize)
-{
- if (!m_Face) {
- return 0;
- }
- FT_ULong ulSize = pdfium::base::checked_cast<FT_ULong>(dwSize);
- if (FXFT_Load_Sfnt_Table(m_Face, dwTable, 0, pBuffer, &ulSize)) {
- return 0;
- }
- return pdfium::base::checked_cast<FX_DWORD>(ulSize);
+int32_t CFPF_SkiaFont::GetDescent() const {
+ if (!m_Face) {
+ return 0;
+ }
+ return FPF_EM_ADJUST(FXFT_Get_Face_UnitsPerEM(m_Face),
+ FXFT_Get_Face_Descender(m_Face));
+}
+FX_BOOL CFPF_SkiaFont::GetGlyphBBox(int32_t iGlyphIndex, FX_RECT& rtBBox) {
+ if (!m_Face) {
+ return FALSE;
+ }
+ if (FXFT_Is_Face_Tricky(m_Face)) {
+ if (FXFT_Set_Char_Size(m_Face, 0, 1000 * 64, 72, 72)) {
+ return FALSE;
+ }
+ if (FXFT_Load_Glyph(m_Face, iGlyphIndex,
+ FXFT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH)) {
+ FXFT_Set_Pixel_Sizes(m_Face, 0, 64);
+ return FALSE;
+ }
+ FXFT_Glyph glyph;
+ if (FXFT_Get_Glyph(m_Face->glyph, &glyph)) {
+ FXFT_Set_Pixel_Sizes(m_Face, 0, 64);
+ return FALSE;
+ }
+ FXFT_BBox cbox;
+ FXFT_Glyph_Get_CBox(glyph, FXFT_GLYPH_BBOX_PIXELS, &cbox);
+ int32_t x_ppem = m_Face->size->metrics.x_ppem;
+ int32_t y_ppem = m_Face->size->metrics.y_ppem;
+ rtBBox.left = FPF_EM_ADJUST(x_ppem, cbox.xMin);
+ rtBBox.right = FPF_EM_ADJUST(x_ppem, cbox.xMax);
+ rtBBox.top = FPF_EM_ADJUST(y_ppem, cbox.yMax);
+ rtBBox.bottom = FPF_EM_ADJUST(y_ppem, cbox.yMin);
+ rtBBox.top = FX_MIN(rtBBox.top, GetAscent());
+ rtBBox.bottom = FX_MAX(rtBBox.bottom, GetDescent());
+ FXFT_Done_Glyph(glyph);
+ return FXFT_Set_Pixel_Sizes(m_Face, 0, 64) == 0;
+ }
+ if (FXFT_Load_Glyph(
+ m_Face, iGlyphIndex,
+ FXFT_LOAD_NO_SCALE | FXFT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH)) {
+ return FALSE;
+ }
+ rtBBox.left = FPF_EM_ADJUST(FXFT_Get_Face_UnitsPerEM(m_Face),
+ FXFT_Get_Glyph_HoriBearingX(m_Face));
+ rtBBox.bottom = FPF_EM_ADJUST(FXFT_Get_Face_UnitsPerEM(m_Face),
+ FXFT_Get_Glyph_HoriBearingY(m_Face));
+ rtBBox.right = FPF_EM_ADJUST(
+ FXFT_Get_Face_UnitsPerEM(m_Face),
+ FXFT_Get_Glyph_HoriBearingX(m_Face) + FXFT_Get_Glyph_Width(m_Face));
+ rtBBox.top = FPF_EM_ADJUST(
+ FXFT_Get_Face_UnitsPerEM(m_Face),
+ FXFT_Get_Glyph_HoriBearingY(m_Face) - FXFT_Get_Glyph_Height(m_Face));
+ return TRUE;
+}
+FX_BOOL CFPF_SkiaFont::GetBBox(FX_RECT& rtBBox) {
+ if (!m_Face) {
+ return FALSE;
+ }
+ rtBBox.left = FPF_EM_ADJUST(FXFT_Get_Face_UnitsPerEM(m_Face),
+ FXFT_Get_Face_xMin(m_Face));
+ rtBBox.top = FPF_EM_ADJUST(FXFT_Get_Face_UnitsPerEM(m_Face),
+ FXFT_Get_Face_yMin(m_Face));
+ rtBBox.right = FPF_EM_ADJUST(FXFT_Get_Face_UnitsPerEM(m_Face),
+ FXFT_Get_Face_xMax(m_Face));
+ rtBBox.bottom = FPF_EM_ADJUST(FXFT_Get_Face_UnitsPerEM(m_Face),
+ FXFT_Get_Face_yMax(m_Face));
+ return TRUE;
+}
+int32_t CFPF_SkiaFont::GetHeight() const {
+ if (!m_Face) {
+ return 0;
+ }
+ return FPF_EM_ADJUST(FXFT_Get_Face_UnitsPerEM(m_Face),
+ FXFT_Get_Face_Height(m_Face));
}
-FX_BOOL CFPF_SkiaFont::InitFont(CFPF_SkiaFontMgr *pFontMgr, CFPF_SkiaFontDescriptor *pFontDes, const CFX_ByteStringC& bsFamily, FX_DWORD dwStyle, uint8_t uCharset)
-{
- if (!pFontMgr || !pFontDes) {
- return FALSE;
- }
- switch (pFontDes->GetType()) {
- case FPF_SKIAFONTTYPE_Path: {
- CFPF_SkiaPathFont *pFont = (CFPF_SkiaPathFont*)pFontDes;
- m_Face = pFontMgr->GetFontFace(pFont->m_pPath, pFont->m_iFaceIndex);
- }
- break;
- case FPF_SKIAFONTTYPE_File: {
- CFPF_SkiaFileFont *pFont = (CFPF_SkiaFileFont*)pFontDes;
- m_Face = pFontMgr->GetFontFace(pFont->m_pFile, pFont->m_iFaceIndex);
- }
- break;
- case FPF_SKIAFONTTYPE_Buffer: {
- CFPF_SkiaBufferFont *pFont = (CFPF_SkiaBufferFont*)pFontDes;
- m_Face = pFontMgr->GetFontFace((const uint8_t*)pFont->m_pBuffer, pFont->m_szBuffer, pFont->m_iFaceIndex);
- }
- break;
- default:
- return FALSE;
- }
- if (!m_Face) {
- return FALSE;
- }
- m_dwStyle = dwStyle;
- m_uCharset = uCharset;
- m_pFontMgr = pFontMgr;
- m_pFontDes = pFontDes;
- m_dwRefCount = 1;
- return TRUE;
+int32_t CFPF_SkiaFont::GetItalicAngle() const {
+ if (!m_Face) {
+ return 0;
+ }
+ TT_Postscript* ttInfo =
+ (TT_Postscript*)FT_Get_Sfnt_Table(m_Face, ft_sfnt_post);
+ if (ttInfo) {
+ return ttInfo->italicAngle;
+ }
+ return 0;
+}
+FX_DWORD CFPF_SkiaFont::GetFontData(FX_DWORD dwTable,
+ uint8_t* pBuffer,
+ FX_DWORD dwSize) {
+ if (!m_Face) {
+ return 0;
+ }
+ FT_ULong ulSize = pdfium::base::checked_cast<FT_ULong>(dwSize);
+ if (FXFT_Load_Sfnt_Table(m_Face, dwTable, 0, pBuffer, &ulSize)) {
+ return 0;
+ }
+ return pdfium::base::checked_cast<FX_DWORD>(ulSize);
+}
+FX_BOOL CFPF_SkiaFont::InitFont(CFPF_SkiaFontMgr* pFontMgr,
+ CFPF_SkiaFontDescriptor* pFontDes,
+ const CFX_ByteStringC& bsFamily,
+ FX_DWORD dwStyle,
+ uint8_t uCharset) {
+ if (!pFontMgr || !pFontDes) {
+ return FALSE;
+ }
+ switch (pFontDes->GetType()) {
+ case FPF_SKIAFONTTYPE_Path: {
+ CFPF_SkiaPathFont* pFont = (CFPF_SkiaPathFont*)pFontDes;
+ m_Face = pFontMgr->GetFontFace(pFont->m_pPath, pFont->m_iFaceIndex);
+ } break;
+ case FPF_SKIAFONTTYPE_File: {
+ CFPF_SkiaFileFont* pFont = (CFPF_SkiaFileFont*)pFontDes;
+ m_Face = pFontMgr->GetFontFace(pFont->m_pFile, pFont->m_iFaceIndex);
+ } break;
+ case FPF_SKIAFONTTYPE_Buffer: {
+ CFPF_SkiaBufferFont* pFont = (CFPF_SkiaBufferFont*)pFontDes;
+ m_Face = pFontMgr->GetFontFace((const uint8_t*)pFont->m_pBuffer,
+ pFont->m_szBuffer, pFont->m_iFaceIndex);
+ } break;
+ default:
+ return FALSE;
+ }
+ if (!m_Face) {
+ return FALSE;
+ }
+ m_dwStyle = dwStyle;
+ m_uCharset = uCharset;
+ m_pFontMgr = pFontMgr;
+ m_pFontDes = pFontDes;
+ m_dwRefCount = 1;
+ return TRUE;
}
#endif
diff --git a/core/src/fxge/android/fpf_skiafont.h b/core/src/fxge/android/fpf_skiafont.h
index 49819d4c11..4a841940df 100644
--- a/core/src/fxge/android/fpf_skiafont.h
+++ b/core/src/fxge/android/fpf_skiafont.h
@@ -11,48 +11,48 @@
class CFPF_SkiaFontDescriptor;
class CFPF_SkiaFontMgr;
class SkTypeface;
-class CFPF_SkiaFont : public IFPF_Font
-{
-public:
- CFPF_SkiaFont();
- virtual ~CFPF_SkiaFont();
- virtual void Release();
- virtual IFPF_Font* Retain();
-
- virtual FPF_HFONT GetHandle();
-
- virtual CFX_ByteString GetFamilyName();
- virtual CFX_WideString GetPsName();
-
- virtual FX_DWORD GetFontStyle() const
- {
- return m_dwStyle;
- }
- virtual uint8_t GetCharset() const
- {
- return m_uCharset;
- }
-
- virtual int32_t GetGlyphIndex(FX_WCHAR wUnicode);
- virtual int32_t GetGlyphWidth(int32_t iGlyphIndex);
-
- virtual int32_t GetAscent() const;
- virtual int32_t GetDescent() const;
-
- virtual FX_BOOL GetGlyphBBox(int32_t iGlyphIndex, FX_RECT &rtBBox);
- virtual FX_BOOL GetBBox(FX_RECT &rtBBox);
-
- virtual int32_t GetHeight() const;
- virtual int32_t GetItalicAngle() const;
- virtual FX_DWORD GetFontData(FX_DWORD dwTable, uint8_t* pBuffer, FX_DWORD dwSize);
- FX_BOOL InitFont(CFPF_SkiaFontMgr *pFontMgr, CFPF_SkiaFontDescriptor *pFontDes, const CFX_ByteStringC& bsFamily, FX_DWORD dwStyle, uint8_t uCharset);
-protected:
- CFPF_SkiaFontMgr *m_pFontMgr;
- CFPF_SkiaFontDescriptor *m_pFontDes;
- FXFT_Face m_Face;
- FX_DWORD m_dwStyle;
- uint8_t m_uCharset;
- FX_DWORD m_dwRefCount;
+class CFPF_SkiaFont : public IFPF_Font {
+ public:
+ CFPF_SkiaFont();
+ virtual ~CFPF_SkiaFont();
+ virtual void Release();
+ virtual IFPF_Font* Retain();
+
+ virtual FPF_HFONT GetHandle();
+
+ virtual CFX_ByteString GetFamilyName();
+ virtual CFX_WideString GetPsName();
+
+ virtual FX_DWORD GetFontStyle() const { return m_dwStyle; }
+ virtual uint8_t GetCharset() const { return m_uCharset; }
+
+ virtual int32_t GetGlyphIndex(FX_WCHAR wUnicode);
+ virtual int32_t GetGlyphWidth(int32_t iGlyphIndex);
+
+ virtual int32_t GetAscent() const;
+ virtual int32_t GetDescent() const;
+
+ virtual FX_BOOL GetGlyphBBox(int32_t iGlyphIndex, FX_RECT& rtBBox);
+ virtual FX_BOOL GetBBox(FX_RECT& rtBBox);
+
+ virtual int32_t GetHeight() const;
+ virtual int32_t GetItalicAngle() const;
+ virtual FX_DWORD GetFontData(FX_DWORD dwTable,
+ uint8_t* pBuffer,
+ FX_DWORD dwSize);
+ FX_BOOL InitFont(CFPF_SkiaFontMgr* pFontMgr,
+ CFPF_SkiaFontDescriptor* pFontDes,
+ const CFX_ByteStringC& bsFamily,
+ FX_DWORD dwStyle,
+ uint8_t uCharset);
+
+ protected:
+ CFPF_SkiaFontMgr* m_pFontMgr;
+ CFPF_SkiaFontDescriptor* m_pFontDes;
+ FXFT_Face m_Face;
+ FX_DWORD m_dwStyle;
+ uint8_t m_uCharset;
+ FX_DWORD m_dwRefCount;
};
#endif
diff --git a/core/src/fxge/android/fpf_skiafontmgr.cpp b/core/src/fxge/android/fpf_skiafontmgr.cpp
index 86bb052435..b18e9c83be 100644
--- a/core/src/fxge/android/fpf_skiafontmgr.cpp
+++ b/core/src/fxge/android/fpf_skiafontmgr.cpp
@@ -6,466 +6,446 @@
#include "fx_fpf.h"
#if _FX_OS_ == _FX_ANDROID_
-#define FPF_SKIAMATCHWEIGHT_NAME1 62
-#define FPF_SKIAMATCHWEIGHT_NAME2 60
-#define FPF_SKIAMATCHWEIGHT_1 16
-#define FPF_SKIAMATCHWEIGHT_2 8
+#define FPF_SKIAMATCHWEIGHT_NAME1 62
+#define FPF_SKIAMATCHWEIGHT_NAME2 60
+#define FPF_SKIAMATCHWEIGHT_1 16
+#define FPF_SKIAMATCHWEIGHT_2 8
#include "fpf_skiafontmgr.h"
#include "fpf_skiafont.h"
#ifdef __cplusplus
extern "C" {
#endif
-static unsigned long FPF_SkiaStream_Read(FXFT_Stream stream, unsigned long offset, unsigned char* buffer, unsigned long count)
-{
- IFX_FileRead *pFileRead = (IFX_FileRead*)stream->descriptor.pointer;
- if (!pFileRead) {
- return 0;
- }
- if (count > 0) {
- if (pFileRead->ReadBlock(buffer, (FX_FILESIZE)offset, (size_t)count) != count) {
- return 0;
- }
- }
- return count;
-}
-static void FPF_SkiaStream_Close(FXFT_Stream stream)
-{
+static unsigned long FPF_SkiaStream_Read(FXFT_Stream stream,
+ unsigned long offset,
+ unsigned char* buffer,
+ unsigned long count) {
+ IFX_FileRead* pFileRead = (IFX_FileRead*)stream->descriptor.pointer;
+ if (!pFileRead) {
+ return 0;
+ }
+ if (count > 0) {
+ if (pFileRead->ReadBlock(buffer, (FX_FILESIZE)offset, (size_t)count) !=
+ count) {
+ return 0;
+ }
+ }
+ return count;
}
+static void FPF_SkiaStream_Close(FXFT_Stream stream) {}
#ifdef __cplusplus
};
#endif
typedef struct _FPF_SKIAFONTMAP {
- FX_DWORD dwFamily;
- FX_DWORD dwSubSt;
+ FX_DWORD dwFamily;
+ FX_DWORD dwSubSt;
} FPF_SKIAFONTMAP, *FPF_LPSKIAFONTMAP;
-typedef FPF_SKIAFONTMAP const * FPF_LPCSKIAFONTMAP;
+typedef FPF_SKIAFONTMAP const* FPF_LPCSKIAFONTMAP;
static const FPF_SKIAFONTMAP g_SkiaFontmap[] = {
- {0x58c5083, 0xc8d2e345},
- {0x5dfade2, 0xe1633081},
- {0x684317d, 0xe1633081},
- {0x14ee2d13, 0xc8d2e345},
- {0x3918fe2d, 0xbbeeec72},
- {0x3b98b31c, 0xe1633081},
- {0x3d49f40e, 0xe1633081},
- {0x432c41c5, 0xe1633081},
- {0x491b6ad0, 0xe1633081},
- {0x5612cab1, 0x59b9f8f1},
- {0x779ce19d, 0xc8d2e345},
- {0x7cc9510b, 0x59b9f8f1},
- {0x83746053, 0xbbeeec72},
- {0xaaa60c03, 0xbbeeec72},
- {0xbf85ff26, 0xe1633081},
- {0xc04fe601, 0xbbeeec72},
- {0xca3812d5, 0x59b9f8f1},
- {0xca383e15, 0x59b9f8f1},
- {0xcad5eaf6, 0x59b9f8f1},
- {0xcb7a04c8, 0xc8d2e345},
- {0xfb4ce0de, 0xe1633081},
+ {0x58c5083, 0xc8d2e345}, {0x5dfade2, 0xe1633081},
+ {0x684317d, 0xe1633081}, {0x14ee2d13, 0xc8d2e345},
+ {0x3918fe2d, 0xbbeeec72}, {0x3b98b31c, 0xe1633081},
+ {0x3d49f40e, 0xe1633081}, {0x432c41c5, 0xe1633081},
+ {0x491b6ad0, 0xe1633081}, {0x5612cab1, 0x59b9f8f1},
+ {0x779ce19d, 0xc8d2e345}, {0x7cc9510b, 0x59b9f8f1},
+ {0x83746053, 0xbbeeec72}, {0xaaa60c03, 0xbbeeec72},
+ {0xbf85ff26, 0xe1633081}, {0xc04fe601, 0xbbeeec72},
+ {0xca3812d5, 0x59b9f8f1}, {0xca383e15, 0x59b9f8f1},
+ {0xcad5eaf6, 0x59b9f8f1}, {0xcb7a04c8, 0xc8d2e345},
+ {0xfb4ce0de, 0xe1633081},
};
-FX_DWORD FPF_SkiaGetSubstFont(FX_DWORD dwHash)
-{
- int32_t iStart = 0;
- int32_t iEnd = sizeof(g_SkiaFontmap) / sizeof(FPF_SKIAFONTMAP);
- while (iStart <= iEnd) {
- int32_t iMid = (iStart + iEnd) / 2;
- FPF_LPCSKIAFONTMAP pItem = &g_SkiaFontmap[iMid];
- if (dwHash < pItem->dwFamily) {
- iEnd = iMid - 1;
- } else if (dwHash > pItem->dwFamily) {
- iStart = iMid + 1;
- } else {
- return pItem->dwSubSt;
- }
+FX_DWORD FPF_SkiaGetSubstFont(FX_DWORD dwHash) {
+ int32_t iStart = 0;
+ int32_t iEnd = sizeof(g_SkiaFontmap) / sizeof(FPF_SKIAFONTMAP);
+ while (iStart <= iEnd) {
+ int32_t iMid = (iStart + iEnd) / 2;
+ FPF_LPCSKIAFONTMAP pItem = &g_SkiaFontmap[iMid];
+ if (dwHash < pItem->dwFamily) {
+ iEnd = iMid - 1;
+ } else if (dwHash > pItem->dwFamily) {
+ iStart = iMid + 1;
+ } else {
+ return pItem->dwSubSt;
}
- return 0;
+ }
+ return 0;
}
static const FPF_SKIAFONTMAP g_SkiaSansFontMap[] = {
- {0x58c5083, 0xd5b8d10f},
- {0x14ee2d13, 0xd5b8d10f},
- {0x779ce19d, 0xd5b8d10f},
- {0xcb7a04c8, 0xd5b8d10f},
- {0xfb4ce0de, 0xd5b8d10f},
+ {0x58c5083, 0xd5b8d10f}, {0x14ee2d13, 0xd5b8d10f},
+ {0x779ce19d, 0xd5b8d10f}, {0xcb7a04c8, 0xd5b8d10f},
+ {0xfb4ce0de, 0xd5b8d10f},
};
-FX_DWORD FPF_SkiaGetSansFont(FX_DWORD dwHash)
-{
- int32_t iStart = 0;
- int32_t iEnd = sizeof(g_SkiaSansFontMap) / sizeof(FPF_SKIAFONTMAP);
- while (iStart <= iEnd) {
- int32_t iMid = (iStart + iEnd) / 2;
- FPF_LPCSKIAFONTMAP pItem = &g_SkiaSansFontMap[iMid];
- if (dwHash < pItem->dwFamily) {
- iEnd = iMid - 1;
- } else if (dwHash > pItem->dwFamily) {
- iStart = iMid + 1;
- } else {
- return pItem->dwSubSt;
- }
- }
- return 0;
-}
-static uint32_t FPF_GetHashCode_StringA(const FX_CHAR* pStr, int32_t iLength, FX_BOOL bIgnoreCase = FALSE)
-{
- if (!pStr) {
- return 0;
- }
- if (iLength < 0) {
- iLength = FXSYS_strlen(pStr);
- }
- const FX_CHAR* pStrEnd = pStr + iLength;
- uint32_t uHashCode = 0;
- if (bIgnoreCase) {
- while (pStr < pStrEnd) {
- uHashCode = 31 * uHashCode + FXSYS_tolower(*pStr++);
- }
+FX_DWORD FPF_SkiaGetSansFont(FX_DWORD dwHash) {
+ int32_t iStart = 0;
+ int32_t iEnd = sizeof(g_SkiaSansFontMap) / sizeof(FPF_SKIAFONTMAP);
+ while (iStart <= iEnd) {
+ int32_t iMid = (iStart + iEnd) / 2;
+ FPF_LPCSKIAFONTMAP pItem = &g_SkiaSansFontMap[iMid];
+ if (dwHash < pItem->dwFamily) {
+ iEnd = iMid - 1;
+ } else if (dwHash > pItem->dwFamily) {
+ iStart = iMid + 1;
} else {
- while (pStr < pStrEnd) {
- uHashCode = 31 * uHashCode + *pStr ++;
- }
+ return pItem->dwSubSt;
}
- return uHashCode;
+ }
+ return 0;
+}
+static uint32_t FPF_GetHashCode_StringA(const FX_CHAR* pStr,
+ int32_t iLength,
+ FX_BOOL bIgnoreCase = FALSE) {
+ if (!pStr) {
+ return 0;
+ }
+ if (iLength < 0) {
+ iLength = FXSYS_strlen(pStr);
+ }
+ const FX_CHAR* pStrEnd = pStr + iLength;
+ uint32_t uHashCode = 0;
+ if (bIgnoreCase) {
+ while (pStr < pStrEnd) {
+ uHashCode = 31 * uHashCode + FXSYS_tolower(*pStr++);
+ }
+ } else {
+ while (pStr < pStrEnd) {
+ uHashCode = 31 * uHashCode + *pStr++;
+ }
+ }
+ return uHashCode;
}
enum FPF_SKIACHARSET {
- FPF_SKIACHARSET_Ansi = 1 << 0,
- FPF_SKIACHARSET_Default = 1 << 1,
- FPF_SKIACHARSET_Symbol = 1 << 2,
- FPF_SKIACHARSET_ShiftJIS = 1 << 3,
- FPF_SKIACHARSET_Korean = 1 << 4,
- FPF_SKIACHARSET_Johab = 1 << 5,
- FPF_SKIACHARSET_GB2312 = 1 << 6,
- FPF_SKIACHARSET_BIG5 = 1 << 7,
- FPF_SKIACHARSET_Greek = 1 << 8,
- FPF_SKIACHARSET_Turkish = 1 << 9,
- FPF_SKIACHARSET_Vietnamese = 1 << 10,
- FPF_SKIACHARSET_Hebrew = 1 << 11,
- FPF_SKIACHARSET_Arabic = 1 << 12,
- FPF_SKIACHARSET_Baltic = 1 << 13,
- FPF_SKIACHARSET_Cyrillic = 1 << 14,
- FPF_SKIACHARSET_Thai = 1 << 15,
- FPF_SKIACHARSET_EeasternEuropean = 1 << 16,
- FPF_SKIACHARSET_PC = 1 << 17,
- FPF_SKIACHARSET_OEM = 1 << 18,
+ FPF_SKIACHARSET_Ansi = 1 << 0,
+ FPF_SKIACHARSET_Default = 1 << 1,
+ FPF_SKIACHARSET_Symbol = 1 << 2,
+ FPF_SKIACHARSET_ShiftJIS = 1 << 3,
+ FPF_SKIACHARSET_Korean = 1 << 4,
+ FPF_SKIACHARSET_Johab = 1 << 5,
+ FPF_SKIACHARSET_GB2312 = 1 << 6,
+ FPF_SKIACHARSET_BIG5 = 1 << 7,
+ FPF_SKIACHARSET_Greek = 1 << 8,
+ FPF_SKIACHARSET_Turkish = 1 << 9,
+ FPF_SKIACHARSET_Vietnamese = 1 << 10,
+ FPF_SKIACHARSET_Hebrew = 1 << 11,
+ FPF_SKIACHARSET_Arabic = 1 << 12,
+ FPF_SKIACHARSET_Baltic = 1 << 13,
+ FPF_SKIACHARSET_Cyrillic = 1 << 14,
+ FPF_SKIACHARSET_Thai = 1 << 15,
+ FPF_SKIACHARSET_EeasternEuropean = 1 << 16,
+ FPF_SKIACHARSET_PC = 1 << 17,
+ FPF_SKIACHARSET_OEM = 1 << 18,
};
-static FX_DWORD FPF_SkiaGetCharset(uint8_t uCharset)
-{
- switch (uCharset) {
- case FXFONT_ANSI_CHARSET:
- return FPF_SKIACHARSET_Ansi;
- case FXFONT_DEFAULT_CHARSET:
- return FPF_SKIACHARSET_Default;
- case FXFONT_SYMBOL_CHARSET:
- return FPF_SKIACHARSET_Symbol;
- case FXFONT_SHIFTJIS_CHARSET:
- return FPF_SKIACHARSET_ShiftJIS;
- case FXFONT_HANGEUL_CHARSET:
- return FPF_SKIACHARSET_Korean;
- case FXFONT_GB2312_CHARSET:
- return FPF_SKIACHARSET_GB2312;
- case FXFONT_CHINESEBIG5_CHARSET:
- return FPF_SKIACHARSET_BIG5;
- case FXFONT_GREEK_CHARSET:
- return FPF_SKIACHARSET_Greek;
- case FXFONT_TURKISH_CHARSET:
- return FPF_SKIACHARSET_Turkish;
- case FXFONT_HEBREW_CHARSET:
- return FPF_SKIACHARSET_Hebrew;
- case FXFONT_ARABIC_CHARSET:
- return FPF_SKIACHARSET_Arabic;
- case FXFONT_BALTIC_CHARSET:
- return FPF_SKIACHARSET_Baltic;
- case FXFONT_RUSSIAN_CHARSET:
- return FPF_SKIACHARSET_Cyrillic;
- case FXFONT_THAI_CHARSET:
- return FPF_SKIACHARSET_Thai;
- case FXFONT_EASTEUROPE_CHARSET:
- return FPF_SKIACHARSET_EeasternEuropean;
- }
- return FPF_SKIACHARSET_Default;
-}
-static FX_DWORD FPF_SKIANormalizeFontName(const CFX_ByteStringC& bsfamily)
-{
- FX_DWORD dwHash = 0;
- int32_t iLength = bsfamily.GetLength();
- const FX_CHAR* pBuffer = bsfamily.GetCStr();
- for (int32_t i = 0; i < iLength; i++) {
- FX_CHAR ch = pBuffer[i];
- if (ch == ' ' || ch == '-' || ch == ',') {
- continue;
- }
- dwHash = 31 * dwHash + FXSYS_tolower(ch);
- }
- return dwHash;
+static FX_DWORD FPF_SkiaGetCharset(uint8_t uCharset) {
+ switch (uCharset) {
+ case FXFONT_ANSI_CHARSET:
+ return FPF_SKIACHARSET_Ansi;
+ case FXFONT_DEFAULT_CHARSET:
+ return FPF_SKIACHARSET_Default;
+ case FXFONT_SYMBOL_CHARSET:
+ return FPF_SKIACHARSET_Symbol;
+ case FXFONT_SHIFTJIS_CHARSET:
+ return FPF_SKIACHARSET_ShiftJIS;
+ case FXFONT_HANGEUL_CHARSET:
+ return FPF_SKIACHARSET_Korean;
+ case FXFONT_GB2312_CHARSET:
+ return FPF_SKIACHARSET_GB2312;
+ case FXFONT_CHINESEBIG5_CHARSET:
+ return FPF_SKIACHARSET_BIG5;
+ case FXFONT_GREEK_CHARSET:
+ return FPF_SKIACHARSET_Greek;
+ case FXFONT_TURKISH_CHARSET:
+ return FPF_SKIACHARSET_Turkish;
+ case FXFONT_HEBREW_CHARSET:
+ return FPF_SKIACHARSET_Hebrew;
+ case FXFONT_ARABIC_CHARSET:
+ return FPF_SKIACHARSET_Arabic;
+ case FXFONT_BALTIC_CHARSET:
+ return FPF_SKIACHARSET_Baltic;
+ case FXFONT_RUSSIAN_CHARSET:
+ return FPF_SKIACHARSET_Cyrillic;
+ case FXFONT_THAI_CHARSET:
+ return FPF_SKIACHARSET_Thai;
+ case FXFONT_EASTEUROPE_CHARSET:
+ return FPF_SKIACHARSET_EeasternEuropean;
+ }
+ return FPF_SKIACHARSET_Default;
}
-static FX_DWORD FPF_SKIAGetFamilyHash(const CFX_ByteStringC& bsFamily, FX_DWORD dwStyle, uint8_t uCharset)
-{
- CFX_ByteString bsFont(bsFamily);
- if (dwStyle & FXFONT_BOLD) {
- bsFont += "Bold";
- }
- if (dwStyle & FXFONT_ITALIC) {
- bsFont += "Italic";
- }
- if (dwStyle & FXFONT_SERIF) {
- bsFont += "Serif";
- }
- bsFont += uCharset;
- return FPF_GetHashCode_StringA(bsFont.c_str(), bsFont.GetLength(), TRUE);
+static FX_DWORD FPF_SKIANormalizeFontName(const CFX_ByteStringC& bsfamily) {
+ FX_DWORD dwHash = 0;
+ int32_t iLength = bsfamily.GetLength();
+ const FX_CHAR* pBuffer = bsfamily.GetCStr();
+ for (int32_t i = 0; i < iLength; i++) {
+ FX_CHAR ch = pBuffer[i];
+ if (ch == ' ' || ch == '-' || ch == ',') {
+ continue;
+ }
+ dwHash = 31 * dwHash + FXSYS_tolower(ch);
+ }
+ return dwHash;
}
-static FX_BOOL FPF_SkiaIsCJK(uint8_t uCharset)
-{
- return (uCharset == FXFONT_GB2312_CHARSET) || (uCharset == FXFONT_CHINESEBIG5_CHARSET)
- || (uCharset == FXFONT_HANGEUL_CHARSET) || (uCharset == FXFONT_SHIFTJIS_CHARSET);
+static FX_DWORD FPF_SKIAGetFamilyHash(const CFX_ByteStringC& bsFamily,
+ FX_DWORD dwStyle,
+ uint8_t uCharset) {
+ CFX_ByteString bsFont(bsFamily);
+ if (dwStyle & FXFONT_BOLD) {
+ bsFont += "Bold";
+ }
+ if (dwStyle & FXFONT_ITALIC) {
+ bsFont += "Italic";
+ }
+ if (dwStyle & FXFONT_SERIF) {
+ bsFont += "Serif";
+ }
+ bsFont += uCharset;
+ return FPF_GetHashCode_StringA(bsFont.c_str(), bsFont.GetLength(), TRUE);
}
-static FX_BOOL FPF_SkiaMaybeSymbol(const CFX_ByteStringC& bsFacename)
-{
- CFX_ByteString bsName = bsFacename;
- bsName.MakeLower();
- return bsName.Find("symbol") > -1;
+static FX_BOOL FPF_SkiaIsCJK(uint8_t uCharset) {
+ return (uCharset == FXFONT_GB2312_CHARSET) ||
+ (uCharset == FXFONT_CHINESEBIG5_CHARSET) ||
+ (uCharset == FXFONT_HANGEUL_CHARSET) ||
+ (uCharset == FXFONT_SHIFTJIS_CHARSET);
}
-static FX_BOOL FPF_SkiaMaybeArabic(const CFX_ByteStringC& bsFacename)
-{
- CFX_ByteString bsName = bsFacename;
- bsName.MakeLower();
- return bsName.Find("arabic") > -1;
+static FX_BOOL FPF_SkiaMaybeSymbol(const CFX_ByteStringC& bsFacename) {
+ CFX_ByteString bsName = bsFacename;
+ bsName.MakeLower();
+ return bsName.Find("symbol") > -1;
}
-CFPF_SkiaFontMgr::CFPF_SkiaFontMgr()
- : m_bLoaded(FALSE), m_FTLibrary(NULL)
-{
+static FX_BOOL FPF_SkiaMaybeArabic(const CFX_ByteStringC& bsFacename) {
+ CFX_ByteString bsName = bsFacename;
+ bsName.MakeLower();
+ return bsName.Find("arabic") > -1;
}
-CFPF_SkiaFontMgr::~CFPF_SkiaFontMgr()
-{
- void *pkey = NULL;
- CFPF_SkiaFont *pValue = NULL;
- FX_POSITION pos = m_FamilyFonts.GetStartPosition();
- while (pos) {
- m_FamilyFonts.GetNextAssoc(pos, pkey, (void*&)pValue);
- if (pValue) {
- pValue->Release();
- }
- }
- m_FamilyFonts.RemoveAll();
- for (int32_t i = m_FontFaces.GetUpperBound(); i >= 0; i--) {
- CFPF_SkiaFontDescriptor *pFont = (CFPF_SkiaFontDescriptor*)m_FontFaces.ElementAt(i);
- delete pFont;
- }
- m_FontFaces.RemoveAll();
- if (m_FTLibrary) {
- FXFT_Done_FreeType(m_FTLibrary);
- }
+CFPF_SkiaFontMgr::CFPF_SkiaFontMgr() : m_bLoaded(FALSE), m_FTLibrary(NULL) {}
+CFPF_SkiaFontMgr::~CFPF_SkiaFontMgr() {
+ void* pkey = NULL;
+ CFPF_SkiaFont* pValue = NULL;
+ FX_POSITION pos = m_FamilyFonts.GetStartPosition();
+ while (pos) {
+ m_FamilyFonts.GetNextAssoc(pos, pkey, (void*&)pValue);
+ if (pValue) {
+ pValue->Release();
+ }
+ }
+ m_FamilyFonts.RemoveAll();
+ for (int32_t i = m_FontFaces.GetUpperBound(); i >= 0; i--) {
+ CFPF_SkiaFontDescriptor* pFont =
+ (CFPF_SkiaFontDescriptor*)m_FontFaces.ElementAt(i);
+ delete pFont;
+ }
+ m_FontFaces.RemoveAll();
+ if (m_FTLibrary) {
+ FXFT_Done_FreeType(m_FTLibrary);
+ }
}
-FX_BOOL CFPF_SkiaFontMgr::InitFTLibrary()
-{
- if (m_FTLibrary == NULL) {
- FXFT_Init_FreeType(&m_FTLibrary);
- }
- return m_FTLibrary != NULL;
+FX_BOOL CFPF_SkiaFontMgr::InitFTLibrary() {
+ if (m_FTLibrary == NULL) {
+ FXFT_Init_FreeType(&m_FTLibrary);
+ }
+ return m_FTLibrary != NULL;
}
-void CFPF_SkiaFontMgr::LoadSystemFonts()
-{
- if (m_bLoaded) {
- return;
- }
- ScanPath(FX_BSTRC("/system/fonts"));
- OutputSystemFonts();
- m_bLoaded = TRUE;
-}
-void CFPF_SkiaFontMgr::LoadPrivateFont(IFX_FileRead* pFontFile)
-{
+void CFPF_SkiaFontMgr::LoadSystemFonts() {
+ if (m_bLoaded) {
+ return;
+ }
+ ScanPath(FX_BSTRC("/system/fonts"));
+ OutputSystemFonts();
+ m_bLoaded = TRUE;
}
-void CFPF_SkiaFontMgr::LoadPrivateFont(const CFX_ByteStringC& bsFileName)
-{
+void CFPF_SkiaFontMgr::LoadPrivateFont(IFX_FileRead* pFontFile) {}
+void CFPF_SkiaFontMgr::LoadPrivateFont(const CFX_ByteStringC& bsFileName) {}
+void CFPF_SkiaFontMgr::LoadPrivateFont(void* pBuffer, size_t szBuffer) {}
+IFPF_Font* CFPF_SkiaFontMgr::CreateFont(const CFX_ByteStringC& bsFamilyname,
+ uint8_t uCharset,
+ FX_DWORD dwStyle,
+ FX_DWORD dwMatch) {
+ FX_DWORD dwHash = FPF_SKIAGetFamilyHash(bsFamilyname, dwStyle, uCharset);
+ IFPF_Font* pFont = NULL;
+ if (m_FamilyFonts.Lookup((void*)(uintptr_t)dwHash, (void*&)pFont)) {
+ if (pFont) {
+ return pFont->Retain();
+ }
+ }
+ FX_DWORD dwFaceName = FPF_SKIANormalizeFontName(bsFamilyname);
+ FX_DWORD dwSubst = FPF_SkiaGetSubstFont(dwFaceName);
+ FX_DWORD dwSubstSans = FPF_SkiaGetSansFont(dwFaceName);
+ FX_BOOL bMaybeSymbol = FPF_SkiaMaybeSymbol(bsFamilyname);
+ if (uCharset != FXFONT_ARABIC_CHARSET && FPF_SkiaMaybeArabic(bsFamilyname)) {
+ uCharset = FXFONT_ARABIC_CHARSET;
+ } else if (uCharset == FXFONT_ANSI_CHARSET &&
+ (dwMatch & FPF_MATCHFONT_REPLACEANSI)) {
+ uCharset = FXFONT_DEFAULT_CHARSET;
+ }
+ int32_t nExpectVal = FPF_SKIAMATCHWEIGHT_NAME1 + FPF_SKIAMATCHWEIGHT_1 * 3 +
+ FPF_SKIAMATCHWEIGHT_2 * 2;
+ int32_t nItem = -1;
+ int32_t nMax = -1;
+ int32_t nGlyphNum = 0;
+ for (int32_t i = m_FontFaces.GetUpperBound(); i >= 0; i--) {
+ CFPF_SkiaPathFont* pFontDes = (CFPF_SkiaPathFont*)m_FontFaces.ElementAt(i);
+ if (!(pFontDes->m_dwCharsets & FPF_SkiaGetCharset(uCharset))) {
+ continue;
+ }
+ int32_t nFind = 0;
+ FX_DWORD dwSysFontName = FPF_SKIANormalizeFontName(pFontDes->m_pFamily);
+ if (dwFaceName == dwSysFontName) {
+ nFind += FPF_SKIAMATCHWEIGHT_NAME1;
+ }
+ FX_BOOL bMatchedName = (nFind == FPF_SKIAMATCHWEIGHT_NAME1);
+ if ((dwStyle & FXFONT_BOLD) == (pFontDes->m_dwStyle & FXFONT_BOLD)) {
+ nFind += FPF_SKIAMATCHWEIGHT_1;
+ }
+ if ((dwStyle & FXFONT_ITALIC) == (pFontDes->m_dwStyle & FXFONT_ITALIC)) {
+ nFind += FPF_SKIAMATCHWEIGHT_1;
+ }
+ if ((dwStyle & FXFONT_FIXED_PITCH) ==
+ (pFontDes->m_dwStyle & FXFONT_FIXED_PITCH)) {
+ nFind += FPF_SKIAMATCHWEIGHT_2;
+ }
+ if ((dwStyle & FXFONT_SERIF) == (pFontDes->m_dwStyle & FXFONT_SERIF)) {
+ nFind += FPF_SKIAMATCHWEIGHT_1;
+ }
+ if ((dwStyle & FXFONT_SCRIPT) == (pFontDes->m_dwStyle & FXFONT_SCRIPT)) {
+ nFind += FPF_SKIAMATCHWEIGHT_2;
+ }
+ if (dwSubst == dwSysFontName || dwSubstSans == dwSysFontName) {
+ nFind += FPF_SKIAMATCHWEIGHT_NAME2;
+ bMatchedName = TRUE;
+ }
+ if (uCharset == FXFONT_DEFAULT_CHARSET || bMaybeSymbol) {
+ if (nFind > nMax && bMatchedName) {
+ nMax = nFind;
+ nItem = i;
+ }
+ } else if (FPF_SkiaIsCJK(uCharset)) {
+ if (bMatchedName || pFontDes->m_iGlyphNum > nGlyphNum) {
+ nItem = i;
+ nGlyphNum = pFontDes->m_iGlyphNum;
+ }
+ } else if (nFind > nMax) {
+ nMax = nFind;
+ nItem = i;
+ }
+ if (nExpectVal <= nFind) {
+ nItem = i;
+ break;
+ }
+ }
+ if (nItem > -1) {
+ CFPF_SkiaFontDescriptor* pFontDes =
+ (CFPF_SkiaFontDescriptor*)m_FontFaces.ElementAt(nItem);
+ CFPF_SkiaFont* pFont = new CFPF_SkiaFont;
+ if (pFont->InitFont(this, pFontDes, bsFamilyname, dwStyle, uCharset)) {
+ m_FamilyFonts.SetAt((void*)(uintptr_t)dwHash, (void*)pFont);
+ return pFont->Retain();
+ }
+ pFont->Release();
+ }
+ return NULL;
}
-void CFPF_SkiaFontMgr::LoadPrivateFont(void* pBuffer, size_t szBuffer)
-{
-}
-IFPF_Font* CFPF_SkiaFontMgr::CreateFont(const CFX_ByteStringC& bsFamilyname, uint8_t uCharset, FX_DWORD dwStyle, FX_DWORD dwMatch)
-{
- FX_DWORD dwHash = FPF_SKIAGetFamilyHash(bsFamilyname, dwStyle, uCharset);
- IFPF_Font *pFont = NULL;
- if (m_FamilyFonts.Lookup((void*)(uintptr_t)dwHash, (void*&)pFont)) {
- if (pFont) {
- return pFont->Retain();
- }
- }
- FX_DWORD dwFaceName = FPF_SKIANormalizeFontName(bsFamilyname);
- FX_DWORD dwSubst = FPF_SkiaGetSubstFont(dwFaceName);
- FX_DWORD dwSubstSans = FPF_SkiaGetSansFont(dwFaceName);
- FX_BOOL bMaybeSymbol = FPF_SkiaMaybeSymbol(bsFamilyname);
- if (uCharset != FXFONT_ARABIC_CHARSET && FPF_SkiaMaybeArabic(bsFamilyname)) {
- uCharset = FXFONT_ARABIC_CHARSET;
- } else if (uCharset == FXFONT_ANSI_CHARSET && (dwMatch & FPF_MATCHFONT_REPLACEANSI)) {
- uCharset = FXFONT_DEFAULT_CHARSET;
- }
- int32_t nExpectVal = FPF_SKIAMATCHWEIGHT_NAME1 + FPF_SKIAMATCHWEIGHT_1 * 3 + FPF_SKIAMATCHWEIGHT_2 * 2;
- int32_t nItem = -1;
- int32_t nMax = -1;
- int32_t nGlyphNum = 0;
- for (int32_t i = m_FontFaces.GetUpperBound(); i >= 0; i--) {
- CFPF_SkiaPathFont *pFontDes = (CFPF_SkiaPathFont*)m_FontFaces.ElementAt(i);
- if(!(pFontDes->m_dwCharsets & FPF_SkiaGetCharset(uCharset))) {
- continue;
- }
- int32_t nFind = 0;
- FX_DWORD dwSysFontName = FPF_SKIANormalizeFontName(pFontDes->m_pFamily);
- if (dwFaceName == dwSysFontName) {
- nFind += FPF_SKIAMATCHWEIGHT_NAME1;
- }
- FX_BOOL bMatchedName = (nFind == FPF_SKIAMATCHWEIGHT_NAME1);
- if ((dwStyle & FXFONT_BOLD) == (pFontDes->m_dwStyle & FXFONT_BOLD)) {
- nFind += FPF_SKIAMATCHWEIGHT_1;
- }
- if ((dwStyle & FXFONT_ITALIC) == (pFontDes->m_dwStyle & FXFONT_ITALIC)) {
- nFind += FPF_SKIAMATCHWEIGHT_1;
- }
- if ((dwStyle & FXFONT_FIXED_PITCH) == (pFontDes->m_dwStyle & FXFONT_FIXED_PITCH)) {
- nFind += FPF_SKIAMATCHWEIGHT_2;
- }
- if ((dwStyle & FXFONT_SERIF) == (pFontDes->m_dwStyle & FXFONT_SERIF)) {
- nFind += FPF_SKIAMATCHWEIGHT_1;
- }
- if ((dwStyle & FXFONT_SCRIPT) == (pFontDes->m_dwStyle & FXFONT_SCRIPT)) {
- nFind += FPF_SKIAMATCHWEIGHT_2;
- }
- if (dwSubst == dwSysFontName || dwSubstSans == dwSysFontName) {
- nFind += FPF_SKIAMATCHWEIGHT_NAME2;
- bMatchedName = TRUE;
- }
- if (uCharset == FXFONT_DEFAULT_CHARSET || bMaybeSymbol) {
- if (nFind > nMax && bMatchedName) {
- nMax = nFind;
- nItem = i;
- }
- } else if (FPF_SkiaIsCJK(uCharset)) {
- if (bMatchedName || pFontDes->m_iGlyphNum > nGlyphNum) {
- nItem = i;
- nGlyphNum = pFontDes->m_iGlyphNum;
- }
- } else if (nFind > nMax) {
- nMax = nFind;
- nItem = i;
- }
- if (nExpectVal <= nFind) {
- nItem = i;
- break;
- }
- }
- if (nItem > -1) {
- CFPF_SkiaFontDescriptor *pFontDes = (CFPF_SkiaFontDescriptor*)m_FontFaces.ElementAt(nItem);
- CFPF_SkiaFont *pFont = new CFPF_SkiaFont;
- if (pFont->InitFont(this, pFontDes, bsFamilyname, dwStyle, uCharset)) {
- m_FamilyFonts.SetAt((void*)(uintptr_t)dwHash, (void*)pFont);
- return pFont->Retain();
- }
- pFont->Release();
- }
+FXFT_Face CFPF_SkiaFontMgr::GetFontFace(IFX_FileRead* pFileRead,
+ int32_t iFaceIndex) {
+ if (!pFileRead) {
return NULL;
+ }
+ if (pFileRead->GetSize() == 0) {
+ return NULL;
+ }
+ if (iFaceIndex < 0) {
+ return NULL;
+ }
+ FXFT_StreamRec streamRec;
+ FXSYS_memset(&streamRec, 0, sizeof(FXFT_StreamRec));
+ streamRec.size = pFileRead->GetSize();
+ streamRec.descriptor.pointer = pFileRead;
+ streamRec.read = FPF_SkiaStream_Read;
+ streamRec.close = FPF_SkiaStream_Close;
+ FXFT_Open_Args args;
+ args.flags = FT_OPEN_STREAM;
+ args.stream = &streamRec;
+ FXFT_Face face;
+ if (FXFT_Open_Face(m_FTLibrary, &args, iFaceIndex, &face)) {
+ return NULL;
+ }
+ FXFT_Set_Pixel_Sizes(face, 0, 64);
+ return face;
}
-FXFT_Face CFPF_SkiaFontMgr::GetFontFace(IFX_FileRead *pFileRead, int32_t iFaceIndex)
-{
- if (!pFileRead) {
- return NULL;
- }
- if (pFileRead->GetSize() == 0) {
- return NULL;
- }
- if (iFaceIndex < 0) {
- return NULL;
- }
- FXFT_StreamRec streamRec;
- FXSYS_memset(&streamRec, 0, sizeof(FXFT_StreamRec));
- streamRec.size = pFileRead->GetSize();
- streamRec.descriptor.pointer = pFileRead;
- streamRec.read = FPF_SkiaStream_Read;
- streamRec.close = FPF_SkiaStream_Close;
- FXFT_Open_Args args;
- args.flags = FT_OPEN_STREAM;
- args.stream = &streamRec;
- FXFT_Face face;
- if (FXFT_Open_Face(m_FTLibrary, &args, iFaceIndex, &face)) {
- return NULL;
- }
- FXFT_Set_Pixel_Sizes(face, 0, 64);
- return face;
-}
-FXFT_Face CFPF_SkiaFontMgr::GetFontFace(const CFX_ByteStringC& bsFile, int32_t iFaceIndex )
-{
- if (bsFile.IsEmpty()) {
- return NULL;
- }
- if (iFaceIndex < 0) {
- return NULL;
- }
- FXFT_Open_Args args;
- args.flags = FT_OPEN_PATHNAME;
- args.pathname = (FT_String*)bsFile.GetCStr();
- FXFT_Face face;
- if (FXFT_Open_Face(m_FTLibrary, &args, iFaceIndex, &face)) {
- return FALSE;
- }
- FXFT_Set_Pixel_Sizes(face, 0, 64);
- return face;
+FXFT_Face CFPF_SkiaFontMgr::GetFontFace(const CFX_ByteStringC& bsFile,
+ int32_t iFaceIndex) {
+ if (bsFile.IsEmpty()) {
+ return NULL;
+ }
+ if (iFaceIndex < 0) {
+ return NULL;
+ }
+ FXFT_Open_Args args;
+ args.flags = FT_OPEN_PATHNAME;
+ args.pathname = (FT_String*)bsFile.GetCStr();
+ FXFT_Face face;
+ if (FXFT_Open_Face(m_FTLibrary, &args, iFaceIndex, &face)) {
+ return FALSE;
+ }
+ FXFT_Set_Pixel_Sizes(face, 0, 64);
+ return face;
}
-FXFT_Face CFPF_SkiaFontMgr::GetFontFace(const uint8_t* pBuffer, size_t szBuffer, int32_t iFaceIndex )
-{
- if (!pBuffer || szBuffer < 1) {
- return NULL;
- }
- if (iFaceIndex < 0) {
- return NULL;
- }
- FXFT_Open_Args args;
- args.flags = FT_OPEN_MEMORY;
- args.memory_base = pBuffer;
- args.memory_size = szBuffer;
- FXFT_Face face;
- if (FXFT_Open_Face(m_FTLibrary, &args, iFaceIndex, &face)) {
- return FALSE;
- }
- FXFT_Set_Pixel_Sizes(face, 0, 64);
- return face;
+FXFT_Face CFPF_SkiaFontMgr::GetFontFace(const uint8_t* pBuffer,
+ size_t szBuffer,
+ int32_t iFaceIndex) {
+ if (!pBuffer || szBuffer < 1) {
+ return NULL;
+ }
+ if (iFaceIndex < 0) {
+ return NULL;
+ }
+ FXFT_Open_Args args;
+ args.flags = FT_OPEN_MEMORY;
+ args.memory_base = pBuffer;
+ args.memory_size = szBuffer;
+ FXFT_Face face;
+ if (FXFT_Open_Face(m_FTLibrary, &args, iFaceIndex, &face)) {
+ return FALSE;
+ }
+ FXFT_Set_Pixel_Sizes(face, 0, 64);
+ return face;
}
-void CFPF_SkiaFontMgr::ScanPath(const CFX_ByteStringC& path)
-{
- void *handle = FX_OpenFolder(path.GetCStr());
- if (!handle) {
- return;
- }
- CFX_ByteString filename;
- FX_BOOL bFolder = FALSE;
- while (FX_GetNextFile(handle, filename, bFolder)) {
- if (bFolder) {
- if (filename == FX_BSTRC(".") || filename == FX_BSTRC("..")) {
- continue;
- }
- } else {
- CFX_ByteString ext = filename.Right(4);
- ext.MakeLower();
- if (ext != FX_BSTRC(".ttf") && ext != FX_BSTRC(".ttc")) {
- continue;
- }
- }
- CFX_ByteString fullpath = path;
- fullpath += "/";
- fullpath += filename;
- if (bFolder) {
- ScanPath(fullpath);
- } else {
- ScanFile(fullpath);
- }
+void CFPF_SkiaFontMgr::ScanPath(const CFX_ByteStringC& path) {
+ void* handle = FX_OpenFolder(path.GetCStr());
+ if (!handle) {
+ return;
+ }
+ CFX_ByteString filename;
+ FX_BOOL bFolder = FALSE;
+ while (FX_GetNextFile(handle, filename, bFolder)) {
+ if (bFolder) {
+ if (filename == FX_BSTRC(".") || filename == FX_BSTRC("..")) {
+ continue;
+ }
+ } else {
+ CFX_ByteString ext = filename.Right(4);
+ ext.MakeLower();
+ if (ext != FX_BSTRC(".ttf") && ext != FX_BSTRC(".ttc")) {
+ continue;
+ }
+ }
+ CFX_ByteString fullpath = path;
+ fullpath += "/";
+ fullpath += filename;
+ if (bFolder) {
+ ScanPath(fullpath);
+ } else {
+ ScanFile(fullpath);
}
- FX_CloseFolder(handle);
+ }
+ FX_CloseFolder(handle);
}
-void CFPF_SkiaFontMgr::ScanFile(const CFX_ByteStringC& file)
-{
- FXFT_Face face = GetFontFace(file);
- if (face) {
- CFPF_SkiaPathFont *pFontDesc = new CFPF_SkiaPathFont;
- pFontDesc->SetPath(file.GetCStr());
- ReportFace(face, pFontDesc);
- m_FontFaces.Add(pFontDesc);
- FXFT_Done_Face(face);
- }
+void CFPF_SkiaFontMgr::ScanFile(const CFX_ByteStringC& file) {
+ FXFT_Face face = GetFontFace(file);
+ if (face) {
+ CFPF_SkiaPathFont* pFontDesc = new CFPF_SkiaPathFont;
+ pFontDesc->SetPath(file.GetCStr());
+ ReportFace(face, pFontDesc);
+ m_FontFaces.Add(pFontDesc);
+ FXFT_Done_Face(face);
+ }
}
-static const FX_DWORD g_FPFSkiaFontCharsets [] = {
+static const FX_DWORD g_FPFSkiaFontCharsets[] = {
FPF_SKIACHARSET_Ansi,
FPF_SKIACHARSET_EeasternEuropean,
FPF_SKIACHARSET_Cyrillic,
@@ -499,54 +479,51 @@ static const FX_DWORD g_FPFSkiaFontCharsets [] = {
FPF_SKIACHARSET_OEM,
FPF_SKIACHARSET_Symbol,
};
-static FX_DWORD FPF_SkiaGetFaceCharset(TT_OS2 *pOS2)
-{
- FX_DWORD dwCharset = 0;
- if (pOS2) {
- for (int32_t i = 0; i < 32; i++) {
- if (pOS2->ulCodePageRange1 & (1 << i)) {
- dwCharset |= g_FPFSkiaFontCharsets[i];
- }
- }
- }
- dwCharset |= FPF_SKIACHARSET_Default;
- return dwCharset;
-}
-void CFPF_SkiaFontMgr::ReportFace(FXFT_Face face, CFPF_SkiaFontDescriptor *pFontDesc)
-{
- if (!face || !pFontDesc) {
- return;
- }
- pFontDesc->SetFamily(FXFT_Get_Face_Family_Name(face));
- if (FXFT_Is_Face_Bold(face)) {
- pFontDesc->m_dwStyle |= FXFONT_BOLD;
- }
- if (FXFT_Is_Face_Italic(face)) {
- pFontDesc->m_dwStyle |= FXFONT_ITALIC;
- }
- if (FT_IS_FIXED_WIDTH(face)) {
- pFontDesc->m_dwStyle |= FXFONT_FIXED_PITCH;
- }
- TT_OS2 *pOS2 = (TT_OS2*)FT_Get_Sfnt_Table(face, ft_sfnt_os2);
- if (pOS2) {
- if (pOS2->ulCodePageRange1 & (1 << 31)) {
- pFontDesc->m_dwStyle |= FXFONT_SYMBOLIC;
- }
- if (pOS2->panose[0] == 2) {
- uint8_t uSerif = pOS2->panose[1];
- if ((uSerif > 1 && uSerif < 10) || uSerif > 13) {
- pFontDesc->m_dwStyle |= FXFONT_SERIF;
- }
- }
- }
- if (pOS2 && (pOS2->ulCodePageRange1 & (1 << 31))) {
- pFontDesc->m_dwStyle |= FXFONT_SYMBOLIC;
- }
- pFontDesc->m_dwCharsets = FPF_SkiaGetFaceCharset(pOS2);
- pFontDesc->m_iFaceIndex = face->face_index;
- pFontDesc->m_iGlyphNum = face->num_glyphs;
+static FX_DWORD FPF_SkiaGetFaceCharset(TT_OS2* pOS2) {
+ FX_DWORD dwCharset = 0;
+ if (pOS2) {
+ for (int32_t i = 0; i < 32; i++) {
+ if (pOS2->ulCodePageRange1 & (1 << i)) {
+ dwCharset |= g_FPFSkiaFontCharsets[i];
+ }
+ }
+ }
+ dwCharset |= FPF_SKIACHARSET_Default;
+ return dwCharset;
}
-void CFPF_SkiaFontMgr::OutputSystemFonts()
-{
+void CFPF_SkiaFontMgr::ReportFace(FXFT_Face face,
+ CFPF_SkiaFontDescriptor* pFontDesc) {
+ if (!face || !pFontDesc) {
+ return;
+ }
+ pFontDesc->SetFamily(FXFT_Get_Face_Family_Name(face));
+ if (FXFT_Is_Face_Bold(face)) {
+ pFontDesc->m_dwStyle |= FXFONT_BOLD;
+ }
+ if (FXFT_Is_Face_Italic(face)) {
+ pFontDesc->m_dwStyle |= FXFONT_ITALIC;
+ }
+ if (FT_IS_FIXED_WIDTH(face)) {
+ pFontDesc->m_dwStyle |= FXFONT_FIXED_PITCH;
+ }
+ TT_OS2* pOS2 = (TT_OS2*)FT_Get_Sfnt_Table(face, ft_sfnt_os2);
+ if (pOS2) {
+ if (pOS2->ulCodePageRange1 & (1 << 31)) {
+ pFontDesc->m_dwStyle |= FXFONT_SYMBOLIC;
+ }
+ if (pOS2->panose[0] == 2) {
+ uint8_t uSerif = pOS2->panose[1];
+ if ((uSerif > 1 && uSerif < 10) || uSerif > 13) {
+ pFontDesc->m_dwStyle |= FXFONT_SERIF;
+ }
+ }
+ }
+ if (pOS2 && (pOS2->ulCodePageRange1 & (1 << 31))) {
+ pFontDesc->m_dwStyle |= FXFONT_SYMBOLIC;
+ }
+ pFontDesc->m_dwCharsets = FPF_SkiaGetFaceCharset(pOS2);
+ pFontDesc->m_iFaceIndex = face->face_index;
+ pFontDesc->m_iGlyphNum = face->num_glyphs;
}
+void CFPF_SkiaFontMgr::OutputSystemFonts() {}
#endif
diff --git a/core/src/fxge/android/fpf_skiafontmgr.h b/core/src/fxge/android/fpf_skiafontmgr.h
index 8c721ff68a..c5dd8fd1b2 100644
--- a/core/src/fxge/android/fpf_skiafontmgr.h
+++ b/core/src/fxge/android/fpf_skiafontmgr.h
@@ -8,111 +8,101 @@
#define CORE_SRC_FXGE_ANDROID_FPF_SKIAFONTMGR_H_
#if _FX_OS_ == _FX_ANDROID_
-#define FPF_SKIAFONTTYPE_Unknown 0
-#define FPF_SKIAFONTTYPE_Path 1
-#define FPF_SKIAFONTTYPE_File 2
-#define FPF_SKIAFONTTYPE_Buffer 3
-class CFPF_SkiaFontDescriptor
-{
-public:
- CFPF_SkiaFontDescriptor() : m_pFamily(NULL), m_dwStyle(0), m_iFaceIndex(0), m_dwCharsets(0), m_iGlyphNum(0) {}
- virtual ~CFPF_SkiaFontDescriptor()
- {
- if (m_pFamily) {
- FX_Free(m_pFamily);
- }
+#define FPF_SKIAFONTTYPE_Unknown 0
+#define FPF_SKIAFONTTYPE_Path 1
+#define FPF_SKIAFONTTYPE_File 2
+#define FPF_SKIAFONTTYPE_Buffer 3
+class CFPF_SkiaFontDescriptor {
+ public:
+ CFPF_SkiaFontDescriptor()
+ : m_pFamily(NULL),
+ m_dwStyle(0),
+ m_iFaceIndex(0),
+ m_dwCharsets(0),
+ m_iGlyphNum(0) {}
+ virtual ~CFPF_SkiaFontDescriptor() {
+ if (m_pFamily) {
+ FX_Free(m_pFamily);
}
- virtual int32_t GetType() const
- {
- return FPF_SKIAFONTTYPE_Unknown;
+ }
+ virtual int32_t GetType() const { return FPF_SKIAFONTTYPE_Unknown; }
+ void SetFamily(const FX_CHAR* pFamily) {
+ if (m_pFamily) {
+ FX_Free(m_pFamily);
}
- void SetFamily(const FX_CHAR* pFamily)
- {
- if (m_pFamily) {
- FX_Free(m_pFamily);
- }
- int32_t iSize = FXSYS_strlen(pFamily);
- m_pFamily = FX_Alloc(FX_CHAR, iSize + 1);
- FXSYS_memcpy(m_pFamily, pFamily, iSize * sizeof(FX_CHAR));
- m_pFamily[iSize] = 0;
- }
- FX_CHAR* m_pFamily;
- FX_DWORD m_dwStyle;
- int32_t m_iFaceIndex;
- FX_DWORD m_dwCharsets;
- int32_t m_iGlyphNum;
+ int32_t iSize = FXSYS_strlen(pFamily);
+ m_pFamily = FX_Alloc(FX_CHAR, iSize + 1);
+ FXSYS_memcpy(m_pFamily, pFamily, iSize * sizeof(FX_CHAR));
+ m_pFamily[iSize] = 0;
+ }
+ FX_CHAR* m_pFamily;
+ FX_DWORD m_dwStyle;
+ int32_t m_iFaceIndex;
+ FX_DWORD m_dwCharsets;
+ int32_t m_iGlyphNum;
};
-class CFPF_SkiaPathFont : public CFPF_SkiaFontDescriptor
-{
-public:
- CFPF_SkiaPathFont() : m_pPath(NULL) {}
- virtual ~CFPF_SkiaPathFont()
- {
- if (m_pPath) {
- FX_Free(m_pPath);
- }
- }
- virtual int32_t GetType() const
- {
- return FPF_SKIAFONTTYPE_Path;
+class CFPF_SkiaPathFont : public CFPF_SkiaFontDescriptor {
+ public:
+ CFPF_SkiaPathFont() : m_pPath(NULL) {}
+ virtual ~CFPF_SkiaPathFont() {
+ if (m_pPath) {
+ FX_Free(m_pPath);
}
- void SetPath(const FX_CHAR* pPath)
- {
- if (m_pPath) {
- FX_Free(m_pPath);
- }
- int32_t iSize = FXSYS_strlen(pPath);
- m_pPath = FX_Alloc(FX_CHAR, iSize + 1);
- FXSYS_memcpy(m_pPath, pPath, iSize * sizeof(FX_CHAR));
- m_pPath[iSize] = 0;
+ }
+ virtual int32_t GetType() const { return FPF_SKIAFONTTYPE_Path; }
+ void SetPath(const FX_CHAR* pPath) {
+ if (m_pPath) {
+ FX_Free(m_pPath);
}
- FX_CHAR* m_pPath;
+ int32_t iSize = FXSYS_strlen(pPath);
+ m_pPath = FX_Alloc(FX_CHAR, iSize + 1);
+ FXSYS_memcpy(m_pPath, pPath, iSize * sizeof(FX_CHAR));
+ m_pPath[iSize] = 0;
+ }
+ FX_CHAR* m_pPath;
};
-class CFPF_SkiaFileFont : public CFPF_SkiaFontDescriptor
-{
-public:
- CFPF_SkiaFileFont() : m_pFile(NULL) {}
- virtual int32_t GetType() const
- {
- return FPF_SKIAFONTTYPE_File;
- }
- IFX_FileRead *m_pFile;
+class CFPF_SkiaFileFont : public CFPF_SkiaFontDescriptor {
+ public:
+ CFPF_SkiaFileFont() : m_pFile(NULL) {}
+ virtual int32_t GetType() const { return FPF_SKIAFONTTYPE_File; }
+ IFX_FileRead* m_pFile;
};
-class CFPF_SkiaBufferFont : public CFPF_SkiaFontDescriptor
-{
-public:
- CFPF_SkiaBufferFont() : m_pBuffer(NULL), m_szBuffer(0) {}
- virtual int32_t GetType() const
- {
- return FPF_SKIAFONTTYPE_Buffer;
- }
- void* m_pBuffer;
- size_t m_szBuffer;
+class CFPF_SkiaBufferFont : public CFPF_SkiaFontDescriptor {
+ public:
+ CFPF_SkiaBufferFont() : m_pBuffer(NULL), m_szBuffer(0) {}
+ virtual int32_t GetType() const { return FPF_SKIAFONTTYPE_Buffer; }
+ void* m_pBuffer;
+ size_t m_szBuffer;
};
-class CFPF_SkiaFontMgr : public IFPF_FontMgr
-{
-public:
- CFPF_SkiaFontMgr();
- virtual ~CFPF_SkiaFontMgr();
- FX_BOOL InitFTLibrary();
- virtual void LoadSystemFonts();
- virtual void LoadPrivateFont(IFX_FileRead* pFontFile);
- virtual void LoadPrivateFont(const CFX_ByteStringC& bsFileName);
- virtual void LoadPrivateFont(void* pBuffer, size_t szBuffer);
+class CFPF_SkiaFontMgr : public IFPF_FontMgr {
+ public:
+ CFPF_SkiaFontMgr();
+ virtual ~CFPF_SkiaFontMgr();
+ FX_BOOL InitFTLibrary();
+ virtual void LoadSystemFonts();
+ virtual void LoadPrivateFont(IFX_FileRead* pFontFile);
+ virtual void LoadPrivateFont(const CFX_ByteStringC& bsFileName);
+ virtual void LoadPrivateFont(void* pBuffer, size_t szBuffer);
+
+ virtual IFPF_Font* CreateFont(const CFX_ByteStringC& bsFamilyname,
+ uint8_t uCharset,
+ FX_DWORD dwStyle,
+ FX_DWORD dwMatch = 0);
+ FXFT_Face GetFontFace(IFX_FileRead* pFileRead, int32_t iFaceIndex = 0);
+ FXFT_Face GetFontFace(const CFX_ByteStringC& bsFile, int32_t iFaceIndex = 0);
+ FXFT_Face GetFontFace(const uint8_t* pBuffer,
+ size_t szBuffer,
+ int32_t iFaceIndex = 0);
- virtual IFPF_Font* CreateFont(const CFX_ByteStringC& bsFamilyname, uint8_t uCharset, FX_DWORD dwStyle, FX_DWORD dwMatch = 0);
- FXFT_Face GetFontFace(IFX_FileRead *pFileRead, int32_t iFaceIndex = 0);
- FXFT_Face GetFontFace(const CFX_ByteStringC& bsFile, int32_t iFaceIndex = 0);
- FXFT_Face GetFontFace(const uint8_t* pBuffer, size_t szBuffer, int32_t iFaceIndex = 0);
-protected:
- void ScanPath(const CFX_ByteStringC& path);
- void ScanFile(const CFX_ByteStringC& file);
- void ReportFace(FXFT_Face face, CFPF_SkiaFontDescriptor *pFontDesc);
- void OutputSystemFonts();
- FX_BOOL m_bLoaded;
- CFX_PtrArray m_FontFaces;
- FXFT_Library m_FTLibrary;
- CFX_MapPtrToPtr m_FamilyFonts;
+ protected:
+ void ScanPath(const CFX_ByteStringC& path);
+ void ScanFile(const CFX_ByteStringC& file);
+ void ReportFace(FXFT_Face face, CFPF_SkiaFontDescriptor* pFontDesc);
+ void OutputSystemFonts();
+ FX_BOOL m_bLoaded;
+ CFX_PtrArray m_FontFaces;
+ FXFT_Library m_FTLibrary;
+ CFX_MapPtrToPtr m_FamilyFonts;
};
#endif
diff --git a/core/src/fxge/android/fpf_skiamodule.cpp b/core/src/fxge/android/fpf_skiamodule.cpp
index 296073c4e2..fdc3398d30 100644
--- a/core/src/fxge/android/fpf_skiamodule.cpp
+++ b/core/src/fxge/android/fpf_skiamodule.cpp
@@ -8,32 +8,28 @@
#if _FX_OS_ == _FX_ANDROID_
#include "fpf_skiamodule.h"
#include "fpf_skiafontmgr.h"
-static IFPF_DeviceModule *gs_pPFModule = NULL;
-IFPF_DeviceModule* FPF_GetDeviceModule()
-{
- if (!gs_pPFModule) {
- gs_pPFModule = new CFPF_SkiaDeviceModule;
- }
- return gs_pPFModule;
+static IFPF_DeviceModule* gs_pPFModule = NULL;
+IFPF_DeviceModule* FPF_GetDeviceModule() {
+ if (!gs_pPFModule) {
+ gs_pPFModule = new CFPF_SkiaDeviceModule;
+ }
+ return gs_pPFModule;
}
-CFPF_SkiaDeviceModule::~CFPF_SkiaDeviceModule()
-{
- delete m_pFontMgr;
+CFPF_SkiaDeviceModule::~CFPF_SkiaDeviceModule() {
+ delete m_pFontMgr;
}
-void CFPF_SkiaDeviceModule::Destroy()
-{
- delete (CFPF_SkiaDeviceModule*)gs_pPFModule;
- gs_pPFModule = NULL;
+void CFPF_SkiaDeviceModule::Destroy() {
+ delete (CFPF_SkiaDeviceModule*)gs_pPFModule;
+ gs_pPFModule = NULL;
}
-IFPF_FontMgr* CFPF_SkiaDeviceModule::GetFontMgr()
-{
- if (!m_pFontMgr) {
- m_pFontMgr = new CFPF_SkiaFontMgr;
- if (!m_pFontMgr->InitFTLibrary()) {
- delete m_pFontMgr;
- return NULL;
- }
+IFPF_FontMgr* CFPF_SkiaDeviceModule::GetFontMgr() {
+ if (!m_pFontMgr) {
+ m_pFontMgr = new CFPF_SkiaFontMgr;
+ if (!m_pFontMgr->InitFTLibrary()) {
+ delete m_pFontMgr;
+ return NULL;
}
- return (IFPF_FontMgr*)m_pFontMgr;
+ }
+ return (IFPF_FontMgr*)m_pFontMgr;
}
#endif
diff --git a/core/src/fxge/android/fpf_skiamodule.h b/core/src/fxge/android/fpf_skiamodule.h
index 4f0b16ca66..4f1c1193d8 100644
--- a/core/src/fxge/android/fpf_skiamodule.h
+++ b/core/src/fxge/android/fpf_skiamodule.h
@@ -9,15 +9,15 @@
#if _FX_OS_ == _FX_ANDROID_
class CFPF_SkiaFontMgr;
-class CFPF_SkiaDeviceModule : public IFPF_DeviceModule
-{
-public:
- CFPF_SkiaDeviceModule() : m_pFontMgr(NULL) {}
- virtual ~CFPF_SkiaDeviceModule();
- virtual void Destroy();
- virtual IFPF_FontMgr* GetFontMgr();
-protected:
- CFPF_SkiaFontMgr *m_pFontMgr;
+class CFPF_SkiaDeviceModule : public IFPF_DeviceModule {
+ public:
+ CFPF_SkiaDeviceModule() : m_pFontMgr(NULL) {}
+ virtual ~CFPF_SkiaDeviceModule();
+ virtual void Destroy();
+ virtual IFPF_FontMgr* GetFontMgr();
+
+ protected:
+ CFPF_SkiaFontMgr* m_pFontMgr;
};
#endif
diff --git a/core/src/fxge/android/fx_android_font.cpp b/core/src/fxge/android/fx_android_font.cpp
index fd72e47478..f4dfc290a3 100644
--- a/core/src/fxge/android/fx_android_font.cpp
+++ b/core/src/fxge/android/fx_android_font.cpp
@@ -6,82 +6,79 @@
#include "fx_fpf.h"
#if _FX_OS_ == _FX_ANDROID_
-CFX_AndroidFontInfo::CFX_AndroidFontInfo()
- : m_pFontMgr(NULL)
-{
-}
-FX_BOOL CFX_AndroidFontInfo::Init(IFPF_FontMgr *pFontMgr)
-{
- if (!pFontMgr) {
- return FALSE;
- }
- pFontMgr->LoadSystemFonts();
- m_pFontMgr = pFontMgr;
- return TRUE;
-}
-FX_BOOL CFX_AndroidFontInfo::EnumFontList(CFX_FontMapper* pMapper)
-{
+CFX_AndroidFontInfo::CFX_AndroidFontInfo() : m_pFontMgr(NULL) {}
+FX_BOOL CFX_AndroidFontInfo::Init(IFPF_FontMgr* pFontMgr) {
+ if (!pFontMgr) {
return FALSE;
+ }
+ pFontMgr->LoadSystemFonts();
+ m_pFontMgr = pFontMgr;
+ return TRUE;
}
-void* CFX_AndroidFontInfo::MapFont(int weight, FX_BOOL bItalic, int charset, int pitch_family, const FX_CHAR* face, int& iExact)
-{
- if (!m_pFontMgr) {
- return NULL;
- }
- FX_DWORD dwStyle = 0;
- if (weight >= 700) {
- dwStyle |= FXFONT_BOLD;
- }
- if (bItalic) {
- dwStyle |= FXFONT_ITALIC;
- }
- if (pitch_family & FXFONT_FF_FIXEDPITCH) {
- dwStyle |= FXFONT_FIXED_PITCH;
- }
- if (pitch_family & FXFONT_FF_SCRIPT) {
- dwStyle |= FXFONT_SCRIPT;
- }
- if (pitch_family & FXFONT_FF_ROMAN) {
- dwStyle |= FXFONT_SERIF;
- }
- return m_pFontMgr->CreateFont(face, charset, dwStyle, FPF_MATCHFONT_REPLACEANSI);
+FX_BOOL CFX_AndroidFontInfo::EnumFontList(CFX_FontMapper* pMapper) {
+ return FALSE;
}
-void* CFX_AndroidFontInfo::GetFont(const FX_CHAR* face)
-{
+void* CFX_AndroidFontInfo::MapFont(int weight,
+ FX_BOOL bItalic,
+ int charset,
+ int pitch_family,
+ const FX_CHAR* face,
+ int& iExact) {
+ if (!m_pFontMgr) {
return NULL;
+ }
+ FX_DWORD dwStyle = 0;
+ if (weight >= 700) {
+ dwStyle |= FXFONT_BOLD;
+ }
+ if (bItalic) {
+ dwStyle |= FXFONT_ITALIC;
+ }
+ if (pitch_family & FXFONT_FF_FIXEDPITCH) {
+ dwStyle |= FXFONT_FIXED_PITCH;
+ }
+ if (pitch_family & FXFONT_FF_SCRIPT) {
+ dwStyle |= FXFONT_SCRIPT;
+ }
+ if (pitch_family & FXFONT_FF_ROMAN) {
+ dwStyle |= FXFONT_SERIF;
+ }
+ return m_pFontMgr->CreateFont(face, charset, dwStyle,
+ FPF_MATCHFONT_REPLACEANSI);
}
-FX_DWORD CFX_AndroidFontInfo::GetFontData(void* hFont, FX_DWORD table, uint8_t* buffer, FX_DWORD size)
-{
- if (!hFont) {
- return 0;
- }
- return ((IFPF_Font*)hFont)->GetFontData(table, buffer, size);
+void* CFX_AndroidFontInfo::GetFont(const FX_CHAR* face) {
+ return NULL;
}
-FX_BOOL CFX_AndroidFontInfo::GetFaceName(void* hFont, CFX_ByteString& name)
-{
- if (!hFont) {
- return FALSE;
- }
- name = ((IFPF_Font*)hFont)->GetFamilyName();
- return TRUE;
+FX_DWORD CFX_AndroidFontInfo::GetFontData(void* hFont,
+ FX_DWORD table,
+ uint8_t* buffer,
+ FX_DWORD size) {
+ if (!hFont) {
+ return 0;
+ }
+ return ((IFPF_Font*)hFont)->GetFontData(table, buffer, size);
}
-FX_BOOL CFX_AndroidFontInfo::GetFontCharset(void* hFont, int& charset)
-{
- if (!hFont) {
- return FALSE;
- }
- charset = ((IFPF_Font*)hFont)->GetCharset();
+FX_BOOL CFX_AndroidFontInfo::GetFaceName(void* hFont, CFX_ByteString& name) {
+ if (!hFont) {
return FALSE;
+ }
+ name = ((IFPF_Font*)hFont)->GetFamilyName();
+ return TRUE;
}
-void CFX_AndroidFontInfo::DeleteFont(void* hFont)
-{
- if (!hFont) {
- return;
- }
- ((IFPF_Font*)hFont)->Release();
+FX_BOOL CFX_AndroidFontInfo::GetFontCharset(void* hFont, int& charset) {
+ if (!hFont) {
+ return FALSE;
+ }
+ charset = ((IFPF_Font*)hFont)->GetCharset();
+ return FALSE;
}
-void* CFX_AndroidFontInfo::RetainFont(void* hFont)
-{
- return NULL;
+void CFX_AndroidFontInfo::DeleteFont(void* hFont) {
+ if (!hFont) {
+ return;
+ }
+ ((IFPF_Font*)hFont)->Release();
+}
+void* CFX_AndroidFontInfo::RetainFont(void* hFont) {
+ return NULL;
}
#endif
diff --git a/core/src/fxge/android/fx_android_font.h b/core/src/fxge/android/fx_android_font.h
index e0101b380b..5675e1cdc2 100644
--- a/core/src/fxge/android/fx_android_font.h
+++ b/core/src/fxge/android/fx_android_font.h
@@ -9,29 +9,34 @@
#if _FX_OS_ == _FX_ANDROID_
class IFPF_FontMgr;
-class CFX_AndroidFontInfo : public IFX_SystemFontInfo
-{
-public:
- CFX_AndroidFontInfo();
- virtual void Release()
- {
- delete this;
- }
-
- virtual FX_BOOL EnumFontList(CFX_FontMapper* pMapper);
-
- virtual void* MapFont(int weight, FX_BOOL bItalic, int charset, int pitch_family, const FX_CHAR* face, int& bExact);
-
- virtual void* GetFont(const FX_CHAR* face);
- virtual FX_DWORD GetFontData(void* hFont, FX_DWORD table, uint8_t* buffer, FX_DWORD size);
- virtual FX_BOOL GetFaceName(void* hFont, CFX_ByteString& name);
- virtual FX_BOOL GetFontCharset(void* hFont, int& charset);
-
- virtual void DeleteFont(void* hFont);
- virtual void* RetainFont(void* hFont);
- FX_BOOL Init(IFPF_FontMgr *pFontMgr);
-protected:
- IFPF_FontMgr *m_pFontMgr;
+class CFX_AndroidFontInfo : public IFX_SystemFontInfo {
+ public:
+ CFX_AndroidFontInfo();
+ virtual void Release() { delete this; }
+
+ virtual FX_BOOL EnumFontList(CFX_FontMapper* pMapper);
+
+ virtual void* MapFont(int weight,
+ FX_BOOL bItalic,
+ int charset,
+ int pitch_family,
+ const FX_CHAR* face,
+ int& bExact);
+
+ virtual void* GetFont(const FX_CHAR* face);
+ virtual FX_DWORD GetFontData(void* hFont,
+ FX_DWORD table,
+ uint8_t* buffer,
+ FX_DWORD size);
+ virtual FX_BOOL GetFaceName(void* hFont, CFX_ByteString& name);
+ virtual FX_BOOL GetFontCharset(void* hFont, int& charset);
+
+ virtual void DeleteFont(void* hFont);
+ virtual void* RetainFont(void* hFont);
+ FX_BOOL Init(IFPF_FontMgr* pFontMgr);
+
+ protected:
+ IFPF_FontMgr* m_pFontMgr;
};
#endif
diff --git a/core/src/fxge/android/fx_android_imp.cpp b/core/src/fxge/android/fx_android_imp.cpp
index 7e698cb068..073a665560 100644
--- a/core/src/fxge/android/fx_android_imp.cpp
+++ b/core/src/fxge/android/fx_android_imp.cpp
@@ -6,24 +6,22 @@
#include "fx_fpf.h"
#if _FX_OS_ == _FX_ANDROID_
-void CFX_GEModule::InitPlatform()
-{
- IFPF_DeviceModule *pDeviceModule = FPF_GetDeviceModule();
- if (!pDeviceModule) {
- return;
- }
- IFPF_FontMgr *pFontMgr = pDeviceModule->GetFontMgr();
- if (pFontMgr) {
- CFX_AndroidFontInfo *pFontInfo = new CFX_AndroidFontInfo;
- pFontInfo->Init(pFontMgr);
- m_pFontMgr->SetSystemFontInfo(pFontInfo);
- }
- m_pPlatformData = pDeviceModule;
+void CFX_GEModule::InitPlatform() {
+ IFPF_DeviceModule* pDeviceModule = FPF_GetDeviceModule();
+ if (!pDeviceModule) {
+ return;
+ }
+ IFPF_FontMgr* pFontMgr = pDeviceModule->GetFontMgr();
+ if (pFontMgr) {
+ CFX_AndroidFontInfo* pFontInfo = new CFX_AndroidFontInfo;
+ pFontInfo->Init(pFontMgr);
+ m_pFontMgr->SetSystemFontInfo(pFontInfo);
+ }
+ m_pPlatformData = pDeviceModule;
}
-void CFX_GEModule::DestroyPlatform()
-{
- if (m_pPlatformData) {
- ((IFPF_DeviceModule*)m_pPlatformData)->Destroy();
- }
+void CFX_GEModule::DestroyPlatform() {
+ if (m_pPlatformData) {
+ ((IFPF_DeviceModule*)m_pPlatformData)->Destroy();
+ }
}
#endif
diff --git a/core/src/fxge/apple/apple_int.h b/core/src/fxge/apple/apple_int.h
index 090ac0924a..ba3d0a83e8 100644
--- a/core/src/fxge/apple/apple_int.h
+++ b/core/src/fxge/apple/apple_int.h
@@ -7,234 +7,257 @@
#ifndef CORE_SRC_FXGE_APPLE_APPLE_INT_H_
#define CORE_SRC_FXGE_APPLE_APPLE_INT_H_
-#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
+#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
#if _FX_OS_ == _FX_MACOSX_
#include <Carbon/Carbon.h>
#endif
typedef enum eFXIOSFONTCHARSET {
- eFXFontCharsetDEFAULT = 0,
- eFXFontCharsetANSI = 1,
- eFXFontCharsetSYMBOL = 1 << 1,
- eFXFontCharsetSHIFTJIS = 1 << 2,
- eFXFontCharsetHANGEUL = 1 << 3,
- eFXFontCharsetGB2312 = 1 << 4,
- eFXFontCharsetCHINESEBIG5 = 1 << 5,
- eFXFontCharsetTHAI = 1 << 6,
- eFXFontCharsetEASTEUROPE = 1 << 7,
- eFXFontCharsetRUSSIAN = 1 << 8,
- eFXFontCharsetGREEK = 1 << 9,
- eFXFontCharsetTURKISH = 1 << 10,
- eFXFontCharsetHEBREW = 1 << 11,
- eFXFontCharsetARABIC = 1 << 12,
- eFXFontCharsetBALTIC = 1 << 13,
+ eFXFontCharsetDEFAULT = 0,
+ eFXFontCharsetANSI = 1,
+ eFXFontCharsetSYMBOL = 1 << 1,
+ eFXFontCharsetSHIFTJIS = 1 << 2,
+ eFXFontCharsetHANGEUL = 1 << 3,
+ eFXFontCharsetGB2312 = 1 << 4,
+ eFXFontCharsetCHINESEBIG5 = 1 << 5,
+ eFXFontCharsetTHAI = 1 << 6,
+ eFXFontCharsetEASTEUROPE = 1 << 7,
+ eFXFontCharsetRUSSIAN = 1 << 8,
+ eFXFontCharsetGREEK = 1 << 9,
+ eFXFontCharsetTURKISH = 1 << 10,
+ eFXFontCharsetHEBREW = 1 << 11,
+ eFXFontCharsetARABIC = 1 << 12,
+ eFXFontCharsetBALTIC = 1 << 13,
} FX_IOSCHARSET;
FX_IOSCHARSET FX_GetiOSCharset(int charset);
typedef enum eFXIOSFONTFLAG {
- eFXFontFlagBold = 1,
- eFXFontFlagItalic = 1 << 1,
- eFXFontFlagFixedPitch = 1 << 2,
- eFXFontFlagSerif = 1 << 3,
- eFXFontFlagScript = 1 << 4,
+ eFXFontFlagBold = 1,
+ eFXFontFlagItalic = 1 << 1,
+ eFXFontFlagFixedPitch = 1 << 2,
+ eFXFontFlagSerif = 1 << 3,
+ eFXFontFlagScript = 1 << 4,
} FX_IOSFONTFLAG;
typedef struct _IOS_FONTDATA {
- FX_DWORD nHashCode;
- const char* psName;
- FX_DWORD charsets;
- FX_DWORD styles;
+ FX_DWORD nHashCode;
+ const char* psName;
+ FX_DWORD charsets;
+ FX_DWORD styles;
} IOS_FONTDATA;
-class CQuartz2D
-{
-public:
- void* createGraphics(CFX_DIBitmap* bitmap);
- void destroyGraphics(void* graphics);
+class CQuartz2D {
+ public:
+ void* createGraphics(CFX_DIBitmap* bitmap);
+ void destroyGraphics(void* graphics);
- void* CreateFont(const uint8_t* pFontData, FX_DWORD dwFontSize);
- void DestroyFont(void* pFont);
- void setGraphicsTextMatrix(void* graphics, CFX_AffineMatrix* matrix);
- FX_BOOL drawGraphicsString(void* graphics,
- void* font,
- FX_FLOAT fontSize,
- FX_WORD* glyphIndices,
- CGPoint* glyphPositions,
- int32_t chars,
- FX_ARGB argb,
- CFX_AffineMatrix* matrix = NULL);
- void saveGraphicsState(void* graphics);
- void restoreGraphicsState(void* graphics);
+ void* CreateFont(const uint8_t* pFontData, FX_DWORD dwFontSize);
+ void DestroyFont(void* pFont);
+ void setGraphicsTextMatrix(void* graphics, CFX_AffineMatrix* matrix);
+ FX_BOOL drawGraphicsString(void* graphics,
+ void* font,
+ FX_FLOAT fontSize,
+ FX_WORD* glyphIndices,
+ CGPoint* glyphPositions,
+ int32_t chars,
+ FX_ARGB argb,
+ CFX_AffineMatrix* matrix = NULL);
+ void saveGraphicsState(void* graphics);
+ void restoreGraphicsState(void* graphics);
};
-class CApplePlatform
-{
-public:
- CApplePlatform() {}
- ~CApplePlatform() {}
+class CApplePlatform {
+ public:
+ CApplePlatform() {}
+ ~CApplePlatform() {}
- CQuartz2D _quartz2d;
+ CQuartz2D _quartz2d;
};
-class CFX_QuartzDeviceDriver : public IFX_RenderDeviceDriver
-{
-public:
- CFX_QuartzDeviceDriver(CGContextRef context, int32_t deviceClass);
- virtual ~CFX_QuartzDeviceDriver();
+class CFX_QuartzDeviceDriver : public IFX_RenderDeviceDriver {
+ public:
+ CFX_QuartzDeviceDriver(CGContextRef context, int32_t deviceClass);
+ virtual ~CFX_QuartzDeviceDriver();
- virtual int GetDeviceCaps(int caps_id);
- virtual CFX_Matrix GetCTM() const;
- virtual CFX_DIBitmap* GetBackDrop()
- {
- return NULL;
- }
- virtual void* GetPlatformSurface()
- {
- return NULL;
- }
- virtual FX_BOOL IsPSPrintDriver()
- {
- return FALSE;
- }
- virtual FX_BOOL StartRendering()
- {
- return TRUE;
- }
- virtual void EndRendering() {}
- virtual void SaveState();
- virtual void RestoreState(FX_BOOL bKeepSaved);
- virtual FX_BOOL SetClip_PathFill(const CFX_PathData* pPathData,
+ virtual int GetDeviceCaps(int caps_id);
+ virtual CFX_Matrix GetCTM() const;
+ virtual CFX_DIBitmap* GetBackDrop() { return NULL; }
+ virtual void* GetPlatformSurface() { return NULL; }
+ virtual FX_BOOL IsPSPrintDriver() { return FALSE; }
+ virtual FX_BOOL StartRendering() { return TRUE; }
+ virtual void EndRendering() {}
+ virtual void SaveState();
+ virtual void RestoreState(FX_BOOL bKeepSaved);
+ virtual FX_BOOL SetClip_PathFill(const CFX_PathData* pPathData,
+ const CFX_AffineMatrix* pObject2Device,
+ int fill_mode);
+ virtual FX_BOOL SetClip_PathStroke(const CFX_PathData* pPathData,
const CFX_AffineMatrix* pObject2Device,
- int fill_mode
- );
- virtual FX_BOOL SetClip_PathStroke(const CFX_PathData* pPathData,
- const CFX_AffineMatrix* pObject2Device,
- const CFX_GraphStateData* pGraphState
- );
- virtual FX_BOOL DrawPath(const CFX_PathData* pPathData,
- const CFX_AffineMatrix* pObject2Device,
- const CFX_GraphStateData* pGraphState,
- FX_DWORD fill_color,
- FX_DWORD stroke_color,
- int fill_mode,
- int alpha_flag = 0,
- void* pIccTransform = NULL,
- int blend_type = FXDIB_BLEND_NORMAL
- );
- virtual FX_BOOL SetPixel(int x, int y, FX_DWORD color,
- int alpha_flag = 0, void* pIccTransform = NULL)
- {
- return FALSE;
- }
- virtual FX_BOOL FillRect(const FX_RECT* pRect, FX_DWORD fill_color,
- int alpha_flag = 0, void* pIccTransform = NULL, int blend_type = FXDIB_BLEND_NORMAL);
- virtual FX_BOOL DrawCosmeticLine(FX_FLOAT x1, FX_FLOAT y1, FX_FLOAT x2, FX_FLOAT y2, FX_DWORD color,
- int alpha_flag = 0, void* pIccTransform = NULL, int blend_type = FXDIB_BLEND_NORMAL);
- virtual FX_BOOL GetClipBox(FX_RECT* pRect);
- virtual FX_BOOL GetDIBits(CFX_DIBitmap* pBitmap, int left, int top, void* pIccTransform = NULL, FX_BOOL bDEdge = FALSE);
- virtual FX_BOOL SetDIBits(const CFX_DIBSource* pBitmap, FX_DWORD color, const FX_RECT* pSrcRect,
- int dest_left, int dest_top, int blend_type,
- int alpha_flag = 0, void* pIccTransform = NULL);
- virtual FX_BOOL StretchDIBits(const CFX_DIBSource* pBitmap, FX_DWORD color, int dest_left, int dest_top,
- int dest_width, int dest_height, const FX_RECT* pClipRect, FX_DWORD flags,
- int alpha_flag = 0, void* pIccTransform = NULL, int blend_type = FXDIB_BLEND_NORMAL);
- virtual FX_BOOL StartDIBits(const CFX_DIBSource* pBitmap, int bitmap_alpha, FX_DWORD color,
- const CFX_AffineMatrix* pMatrix, FX_DWORD flags, void*& handle,
- int alpha_flag = 0, void* pIccTransform = NULL,
- int blend_type = FXDIB_BLEND_NORMAL)
- {
- return FALSE;
- }
- virtual FX_BOOL ContinueDIBits(void* handle, IFX_Pause* pPause)
- {
- return FALSE;
- }
- virtual void CancelDIBits(void* handle) {}
- virtual FX_BOOL DrawDeviceText(int nChars, const FXTEXT_CHARPOS* pCharPos, CFX_Font* pFont,
- CFX_FontCache* pCache, const CFX_AffineMatrix* pObject2Device, FX_FLOAT font_size, FX_DWORD color,
- int alpha_flag = 0, void* pIccTransform = NULL);
- virtual void ClearDriver();
-protected:
- void setStrokeInfo(const CFX_GraphStateData * graphState, FX_ARGB argb, FX_FLOAT lineWidth);
- void setFillInfo(FX_ARGB argb);
- void setPathToContext(const CFX_PathData * pathData);
- FX_FLOAT getLineWidth(const CFX_GraphStateData * graphState, CGAffineTransform ctm);
- FX_BOOL CG_DrawGlypRun(int nChars,
- const FXTEXT_CHARPOS* pCharPos,
- CFX_Font* pFont,
- CFX_FontCache* pCache,
- const CFX_AffineMatrix* pGlyphMatrix,
- const CFX_AffineMatrix* pObject2Device,
- FX_FLOAT font_size,
- FX_DWORD argb,
- int alpha_flag,
- void* pIccTransform);
- void CG_SetImageTransform(int dest_left, int dest_top, int dest_width, int dest_height, CGRect* rect = NULL);
-protected:
- CGContextRef _context;
- CGAffineTransform _foxitDevice2User;
- CGAffineTransform _user2FoxitDevice;
- int32_t m_saveCount;
+ const CFX_GraphStateData* pGraphState);
+ virtual FX_BOOL DrawPath(const CFX_PathData* pPathData,
+ const CFX_AffineMatrix* pObject2Device,
+ const CFX_GraphStateData* pGraphState,
+ FX_DWORD fill_color,
+ FX_DWORD stroke_color,
+ int fill_mode,
+ int alpha_flag = 0,
+ void* pIccTransform = NULL,
+ int blend_type = FXDIB_BLEND_NORMAL);
+ virtual FX_BOOL SetPixel(int x,
+ int y,
+ FX_DWORD color,
+ int alpha_flag = 0,
+ void* pIccTransform = NULL) {
+ return FALSE;
+ }
+ virtual FX_BOOL FillRect(const FX_RECT* pRect,
+ FX_DWORD fill_color,
+ int alpha_flag = 0,
+ void* pIccTransform = NULL,
+ int blend_type = FXDIB_BLEND_NORMAL);
+ virtual FX_BOOL DrawCosmeticLine(FX_FLOAT x1,
+ FX_FLOAT y1,
+ FX_FLOAT x2,
+ FX_FLOAT y2,
+ FX_DWORD color,
+ int alpha_flag = 0,
+ void* pIccTransform = NULL,
+ int blend_type = FXDIB_BLEND_NORMAL);
+ virtual FX_BOOL GetClipBox(FX_RECT* pRect);
+ virtual FX_BOOL GetDIBits(CFX_DIBitmap* pBitmap,
+ int left,
+ int top,
+ void* pIccTransform = NULL,
+ FX_BOOL bDEdge = FALSE);
+ virtual FX_BOOL SetDIBits(const CFX_DIBSource* pBitmap,
+ FX_DWORD color,
+ const FX_RECT* pSrcRect,
+ int dest_left,
+ int dest_top,
+ int blend_type,
+ int alpha_flag = 0,
+ void* pIccTransform = NULL);
+ virtual FX_BOOL StretchDIBits(const CFX_DIBSource* pBitmap,
+ FX_DWORD color,
+ int dest_left,
+ int dest_top,
+ int dest_width,
+ int dest_height,
+ const FX_RECT* pClipRect,
+ FX_DWORD flags,
+ int alpha_flag = 0,
+ void* pIccTransform = NULL,
+ int blend_type = FXDIB_BLEND_NORMAL);
+ virtual FX_BOOL StartDIBits(const CFX_DIBSource* pBitmap,
+ int bitmap_alpha,
+ FX_DWORD color,
+ const CFX_AffineMatrix* pMatrix,
+ FX_DWORD flags,
+ void*& handle,
+ int alpha_flag = 0,
+ void* pIccTransform = NULL,
+ int blend_type = FXDIB_BLEND_NORMAL) {
+ return FALSE;
+ }
+ virtual FX_BOOL ContinueDIBits(void* handle, IFX_Pause* pPause) {
+ return FALSE;
+ }
+ virtual void CancelDIBits(void* handle) {}
+ virtual FX_BOOL DrawDeviceText(int nChars,
+ const FXTEXT_CHARPOS* pCharPos,
+ CFX_Font* pFont,
+ CFX_FontCache* pCache,
+ const CFX_AffineMatrix* pObject2Device,
+ FX_FLOAT font_size,
+ FX_DWORD color,
+ int alpha_flag = 0,
+ void* pIccTransform = NULL);
+ virtual void ClearDriver();
- int32_t _width;
- int32_t _height;
- int32_t _bitsPerPixel;
- int32_t _deviceClass;
- int32_t _renderCaps;
- int32_t _horzSize;
- int32_t _vertSize;
+ protected:
+ void setStrokeInfo(const CFX_GraphStateData* graphState,
+ FX_ARGB argb,
+ FX_FLOAT lineWidth);
+ void setFillInfo(FX_ARGB argb);
+ void setPathToContext(const CFX_PathData* pathData);
+ FX_FLOAT getLineWidth(const CFX_GraphStateData* graphState,
+ CGAffineTransform ctm);
+ FX_BOOL CG_DrawGlypRun(int nChars,
+ const FXTEXT_CHARPOS* pCharPos,
+ CFX_Font* pFont,
+ CFX_FontCache* pCache,
+ const CFX_AffineMatrix* pGlyphMatrix,
+ const CFX_AffineMatrix* pObject2Device,
+ FX_FLOAT font_size,
+ FX_DWORD argb,
+ int alpha_flag,
+ void* pIccTransform);
+ void CG_SetImageTransform(int dest_left,
+ int dest_top,
+ int dest_width,
+ int dest_height,
+ CGRect* rect = NULL);
+
+ protected:
+ CGContextRef _context;
+ CGAffineTransform _foxitDevice2User;
+ CGAffineTransform _user2FoxitDevice;
+ int32_t m_saveCount;
+
+ int32_t _width;
+ int32_t _height;
+ int32_t _bitsPerPixel;
+ int32_t _deviceClass;
+ int32_t _renderCaps;
+ int32_t _horzSize;
+ int32_t _vertSize;
};
-class CFX_FontProvider final : public IFX_FileRead
-{
-public:
- virtual void Release() override
- {
- delete this;
- }
- virtual FX_FILESIZE GetSize() override
- {
- return (FX_FILESIZE)_totalSize;
- }
- virtual FX_BOOL ReadBlock(void* buffer, FX_FILESIZE offset, size_t size) override;
+class CFX_FontProvider final : public IFX_FileRead {
+ public:
+ virtual void Release() override { delete this; }
+ virtual FX_FILESIZE GetSize() override { return (FX_FILESIZE)_totalSize; }
+ virtual FX_BOOL ReadBlock(void* buffer,
+ FX_FILESIZE offset,
+ size_t size) override;
+
+ virtual FX_BOOL IsEOF() override { return _offSet == _totalSize; }
+ virtual FX_FILESIZE GetPosition() override { return (FX_FILESIZE)_offSet; }
+ virtual size_t ReadBlock(void* buffer, size_t size) override;
+
+ public:
+ CFX_FontProvider(CGFontRef cgFont);
+ ~CFX_FontProvider();
+ void InitTableOffset();
+ unsigned long Read(unsigned long offset,
+ unsigned char* buffer,
+ unsigned long count);
+
+ protected:
+ uint32_t CalcTableCheckSum(const uint32_t* table,
+ uint32_t numberOfBytesInTable);
+ uint32_t CalcTableDataRefCheckSum(CFDataRef dataRef);
- virtual FX_BOOL IsEOF() override
- {
- return _offSet == _totalSize;
- }
- virtual FX_FILESIZE GetPosition() override
- {
- return (FX_FILESIZE)_offSet;
- }
- virtual size_t ReadBlock(void* buffer, size_t size) override;
-public:
- CFX_FontProvider(CGFontRef cgFont);
- ~CFX_FontProvider();
- void InitTableOffset();
- unsigned long Read(unsigned long offset, unsigned char *buffer, unsigned long count);
-protected:
- uint32_t CalcTableCheckSum(const uint32_t *table, uint32_t numberOfBytesInTable);
- uint32_t CalcTableDataRefCheckSum(CFDataRef dataRef);
-private:
- CGFontRef m_cgFont;
- UInt32 m_iTableSize;
- size_t _offSet;
- typedef struct FontHeader {
- int32_t fVersion;
- uint16_t fNumTables;
- uint16_t fSearchRange;
- uint16_t fEntrySelector;
- uint16_t fRangeShift;
- } FontHeader;
- typedef struct TableEntry {
- uint32_t fTag;
- uint32_t fCheckSum;
- uint32_t fOffset;
- uint32_t fLength;
- } TableEntry;
- FontHeader _fontHeader;
- unsigned char * _tableEntries;
- size_t * _tableOffsets;
- int _tableCount;
- int _totalSize;
+ private:
+ CGFontRef m_cgFont;
+ UInt32 m_iTableSize;
+ size_t _offSet;
+ typedef struct FontHeader {
+ int32_t fVersion;
+ uint16_t fNumTables;
+ uint16_t fSearchRange;
+ uint16_t fEntrySelector;
+ uint16_t fRangeShift;
+ } FontHeader;
+ typedef struct TableEntry {
+ uint32_t fTag;
+ uint32_t fCheckSum;
+ uint32_t fOffset;
+ uint32_t fLength;
+ } TableEntry;
+ FontHeader _fontHeader;
+ unsigned char* _tableEntries;
+ size_t* _tableOffsets;
+ int _tableCount;
+ int _totalSize;
};
-uint32_t FX_GetHashCode( const FX_CHAR* pStr);
-FX_DWORD FX_IOSGetMatchFamilyNameHashcode(const FX_CHAR* pFontName);
+uint32_t FX_GetHashCode(const FX_CHAR* pStr);
+FX_DWORD FX_IOSGetMatchFamilyNameHashcode(const FX_CHAR* pFontName);
uint32_t FX_IOSGetFamilyNamesCount();
-const FX_CHAR* FX_IOSGetFamilyName( uint32_t uIndex);
+const FX_CHAR* FX_IOSGetFamilyName(uint32_t uIndex);
#endif
#endif // CORE_SRC_FXGE_APPLE_APPLE_INT_H_
diff --git a/core/src/fxge/apple/fx_apple_platform.cpp b/core/src/fxge/apple/fx_apple_platform.cpp
index 9db807c3af..95cd1a1dd8 100644
--- a/core/src/fxge/apple/fx_apple_platform.cpp
+++ b/core/src/fxge/apple/fx_apple_platform.cpp
@@ -7,7 +7,7 @@
#include "../../../include/fxcrt/fx_system.h"
#include "../../../include/fxge/fx_ge.h"
-#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
+#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
#include "../../../include/fxge/fx_freetype.h"
#include "../../../include/fxge/fx_ge_apple.h"
@@ -16,159 +16,159 @@
#include "../ge/text_int.h"
#include "apple_int.h"
-void CFX_AggDeviceDriver::InitPlatform()
-{
- CQuartz2D & quartz2d = ((CApplePlatform *) CFX_GEModule::Get()->GetPlatformData())->_quartz2d;
- m_pPlatformGraphics = quartz2d.createGraphics(m_pBitmap);
+void CFX_AggDeviceDriver::InitPlatform() {
+ CQuartz2D& quartz2d =
+ ((CApplePlatform*)CFX_GEModule::Get()->GetPlatformData())->_quartz2d;
+ m_pPlatformGraphics = quartz2d.createGraphics(m_pBitmap);
}
-void CFX_AggDeviceDriver::DestroyPlatform()
-{
- CQuartz2D & quartz2d = ((CApplePlatform *) CFX_GEModule::Get()->GetPlatformData())->_quartz2d;
- if (m_pPlatformGraphics) {
- quartz2d.destroyGraphics(m_pPlatformGraphics);
- m_pPlatformGraphics = NULL;
- }
+void CFX_AggDeviceDriver::DestroyPlatform() {
+ CQuartz2D& quartz2d =
+ ((CApplePlatform*)CFX_GEModule::Get()->GetPlatformData())->_quartz2d;
+ if (m_pPlatformGraphics) {
+ quartz2d.destroyGraphics(m_pPlatformGraphics);
+ m_pPlatformGraphics = NULL;
+ }
}
void CFX_FaceCache::InitPlatform() {}
void CFX_FaceCache::DestroyPlatform() {}
-CFX_GlyphBitmap* CFX_FaceCache::RenderGlyph_Nativetext(CFX_Font * pFont,
- FX_DWORD glyph_index,
- const CFX_AffineMatrix * pMatrix,
- int dest_width,
- int anti_alias)
-{
- return NULL;
+CFX_GlyphBitmap* CFX_FaceCache::RenderGlyph_Nativetext(
+ CFX_Font* pFont,
+ FX_DWORD glyph_index,
+ const CFX_AffineMatrix* pMatrix,
+ int dest_width,
+ int anti_alias) {
+ return NULL;
}
-static FX_BOOL _CGDrawGlyphRun(CGContextRef pContext,
- int nChars,
- const FXTEXT_CHARPOS* pCharPos,
- CFX_Font* pFont,
- CFX_FontCache* pCache,
- const CFX_AffineMatrix* pObject2Device,
- FX_FLOAT font_size,
- FX_DWORD argb,
- int alpha_flag,
- void* pIccTransform)
-{
- if (nChars == 0) {
- return TRUE;
- }
- CFX_AffineMatrix new_matrix;
- FX_BOOL bNegSize = font_size < 0;
- if (bNegSize) {
- font_size = -font_size;
- }
- FX_FLOAT ori_x = pCharPos[0].m_OriginX, ori_y = pCharPos[0].m_OriginY;
- new_matrix.Transform(ori_x, ori_y);
- if (pObject2Device) {
- new_matrix.Concat(*pObject2Device);
+static FX_BOOL _CGDrawGlyphRun(CGContextRef pContext,
+ int nChars,
+ const FXTEXT_CHARPOS* pCharPos,
+ CFX_Font* pFont,
+ CFX_FontCache* pCache,
+ const CFX_AffineMatrix* pObject2Device,
+ FX_FLOAT font_size,
+ FX_DWORD argb,
+ int alpha_flag,
+ void* pIccTransform) {
+ if (nChars == 0) {
+ return TRUE;
+ }
+ CFX_AffineMatrix new_matrix;
+ FX_BOOL bNegSize = font_size < 0;
+ if (bNegSize) {
+ font_size = -font_size;
+ }
+ FX_FLOAT ori_x = pCharPos[0].m_OriginX, ori_y = pCharPos[0].m_OriginY;
+ new_matrix.Transform(ori_x, ori_y);
+ if (pObject2Device) {
+ new_matrix.Concat(*pObject2Device);
+ }
+ CQuartz2D& quartz2d =
+ ((CApplePlatform*)CFX_GEModule::Get()->GetPlatformData())->_quartz2d;
+ if (!pFont->m_pPlatformFont) {
+ if (pFont->GetPsName() == CFX_WideString::FromLocal("DFHeiStd-W5")) {
+ return FALSE;
}
- CQuartz2D& quartz2d = ((CApplePlatform *) CFX_GEModule::Get()->GetPlatformData())->_quartz2d;
- if (!pFont->m_pPlatformFont) {
- if (pFont->GetPsName() == CFX_WideString::FromLocal("DFHeiStd-W5")) {
- return FALSE;
- }
- pFont->m_pPlatformFont = quartz2d.CreateFont(pFont->m_pFontData, pFont->m_dwSize);
- if (NULL == pFont->m_pPlatformFont) {
- return FALSE;
- }
- }
- CFX_FixedBufGrow<FX_WORD, 32> glyph_indices(nChars);
- CFX_FixedBufGrow<CGPoint, 32> glyph_positions(nChars);
- for (int i = 0; i < nChars; i++ ) {
- glyph_indices[i] = pCharPos[i].m_ExtGID;
- if (bNegSize) {
- glyph_positions[i].x = -pCharPos[i].m_OriginX;
- } else {
- glyph_positions[i].x = pCharPos[i].m_OriginX;
- }
- glyph_positions[i].y = pCharPos[i].m_OriginY;
+ pFont->m_pPlatformFont =
+ quartz2d.CreateFont(pFont->m_pFontData, pFont->m_dwSize);
+ if (NULL == pFont->m_pPlatformFont) {
+ return FALSE;
}
+ }
+ CFX_FixedBufGrow<FX_WORD, 32> glyph_indices(nChars);
+ CFX_FixedBufGrow<CGPoint, 32> glyph_positions(nChars);
+ for (int i = 0; i < nChars; i++) {
+ glyph_indices[i] = pCharPos[i].m_ExtGID;
if (bNegSize) {
- new_matrix.a = -new_matrix.a;
+ glyph_positions[i].x = -pCharPos[i].m_OriginX;
} else {
- new_matrix.b = -new_matrix.b;
- new_matrix.d = -new_matrix.d;
+ glyph_positions[i].x = pCharPos[i].m_OriginX;
}
- quartz2d.setGraphicsTextMatrix(pContext, &new_matrix);
- return quartz2d.drawGraphicsString(pContext,
- pFont->m_pPlatformFont,
- font_size,
- glyph_indices,
- glyph_positions,
- nChars,
- argb,
- NULL);
+ glyph_positions[i].y = pCharPos[i].m_OriginY;
+ }
+ if (bNegSize) {
+ new_matrix.a = -new_matrix.a;
+ } else {
+ new_matrix.b = -new_matrix.b;
+ new_matrix.d = -new_matrix.d;
+ }
+ quartz2d.setGraphicsTextMatrix(pContext, &new_matrix);
+ return quartz2d.drawGraphicsString(pContext, pFont->m_pPlatformFont,
+ font_size, glyph_indices, glyph_positions,
+ nChars, argb, NULL);
}
-static void _DoNothing(void *info, const void *data, size_t size) {}
-FX_BOOL CFX_AggDeviceDriver::DrawDeviceText(int nChars,
- const FXTEXT_CHARPOS * pCharPos,
- CFX_Font * pFont,
- CFX_FontCache * pCache,
- const CFX_AffineMatrix * pObject2Device,
- FX_FLOAT font_size,
- FX_DWORD argb,
- int alpha_flag, void* pIccTransform)
-{
- if (!pFont) {
- return FALSE;
- }
- FX_BOOL bBold = pFont->IsBold();
- if (!bBold && pFont->GetSubstFont() &&
- pFont->GetSubstFont()->m_Weight >= 500 &&
- pFont->GetSubstFont()->m_Weight <= 600) {
- return FALSE;
- }
- for (int i = 0; i < nChars; i ++) {
- if (pCharPos[i].m_bGlyphAdjust) {
- return FALSE;
- }
+static void _DoNothing(void* info, const void* data, size_t size) {}
+FX_BOOL CFX_AggDeviceDriver::DrawDeviceText(
+ int nChars,
+ const FXTEXT_CHARPOS* pCharPos,
+ CFX_Font* pFont,
+ CFX_FontCache* pCache,
+ const CFX_AffineMatrix* pObject2Device,
+ FX_FLOAT font_size,
+ FX_DWORD argb,
+ int alpha_flag,
+ void* pIccTransform) {
+ if (!pFont) {
+ return FALSE;
+ }
+ FX_BOOL bBold = pFont->IsBold();
+ if (!bBold && pFont->GetSubstFont() &&
+ pFont->GetSubstFont()->m_Weight >= 500 &&
+ pFont->GetSubstFont()->m_Weight <= 600) {
+ return FALSE;
+ }
+ for (int i = 0; i < nChars; i++) {
+ if (pCharPos[i].m_bGlyphAdjust) {
+ return FALSE;
}
- CGContextRef ctx = CGContextRef(m_pPlatformGraphics);
- if (NULL == ctx) {
- return FALSE;
+ }
+ CGContextRef ctx = CGContextRef(m_pPlatformGraphics);
+ if (NULL == ctx) {
+ return FALSE;
+ }
+ CGContextSaveGState(ctx);
+ CGContextSetTextDrawingMode(ctx, kCGTextFillClip);
+ CGRect rect_cg;
+ CGImageRef pImageCG = NULL;
+ if (m_pClipRgn) {
+ rect_cg =
+ CGRectMake(m_pClipRgn->GetBox().left, m_pClipRgn->GetBox().top,
+ m_pClipRgn->GetBox().Width(), m_pClipRgn->GetBox().Height());
+ const CFX_DIBitmap* pClipMask = m_pClipRgn->GetMask();
+ if (pClipMask) {
+ CGDataProviderRef pClipMaskDataProvider = CGDataProviderCreateWithData(
+ NULL, pClipMask->GetBuffer(),
+ pClipMask->GetPitch() * pClipMask->GetHeight(), _DoNothing);
+ CGFloat decode_f[2] = {255.f, 0.f};
+ pImageCG = CGImageMaskCreate(
+ pClipMask->GetWidth(), pClipMask->GetHeight(), 8, 8,
+ pClipMask->GetPitch(), pClipMaskDataProvider, decode_f, FALSE);
+ CGDataProviderRelease(pClipMaskDataProvider);
}
- CGContextSaveGState(ctx);
- CGContextSetTextDrawingMode(ctx, kCGTextFillClip);
- CGRect rect_cg;
- CGImageRef pImageCG = NULL;
- if (m_pClipRgn) {
- rect_cg = CGRectMake(m_pClipRgn->GetBox().left, m_pClipRgn->GetBox().top, m_pClipRgn->GetBox().Width(), m_pClipRgn->GetBox().Height());
- const CFX_DIBitmap* pClipMask = m_pClipRgn->GetMask();
- if (pClipMask) {
- CGDataProviderRef pClipMaskDataProvider = CGDataProviderCreateWithData(NULL,
- pClipMask->GetBuffer(),
- pClipMask->GetPitch() * pClipMask->GetHeight(),
- _DoNothing);
- CGFloat decode_f[2] = {255.f, 0.f};
- pImageCG = CGImageMaskCreate(pClipMask->GetWidth(), pClipMask->GetHeight(),
- 8, 8, pClipMask->GetPitch(), pClipMaskDataProvider,
- decode_f, FALSE);
- CGDataProviderRelease(pClipMaskDataProvider);
- }
- } else {
- rect_cg = CGRectMake(0, 0, m_pBitmap->GetWidth(), m_pBitmap->GetHeight());
- }
- rect_cg = CGContextConvertRectToDeviceSpace(ctx, rect_cg);
- if (pImageCG) {
- CGContextClipToMask(ctx, rect_cg, pImageCG);
- } else {
- CGContextClipToRect(ctx, rect_cg);
- }
- FX_BOOL ret = _CGDrawGlyphRun(ctx, nChars, pCharPos, pFont, pCache, pObject2Device, font_size, argb, alpha_flag, pIccTransform);
- if (pImageCG) {
- CGImageRelease(pImageCG);
- }
- CGContextRestoreGState(ctx);
- return ret;
+ } else {
+ rect_cg = CGRectMake(0, 0, m_pBitmap->GetWidth(), m_pBitmap->GetHeight());
+ }
+ rect_cg = CGContextConvertRectToDeviceSpace(ctx, rect_cg);
+ if (pImageCG) {
+ CGContextClipToMask(ctx, rect_cg, pImageCG);
+ } else {
+ CGContextClipToRect(ctx, rect_cg);
+ }
+ FX_BOOL ret =
+ _CGDrawGlyphRun(ctx, nChars, pCharPos, pFont, pCache, pObject2Device,
+ font_size, argb, alpha_flag, pIccTransform);
+ if (pImageCG) {
+ CGImageRelease(pImageCG);
+ }
+ CGContextRestoreGState(ctx);
+ return ret;
}
-void CFX_Font::ReleasePlatformResource()
-{
- if (m_pPlatformFont) {
- CQuartz2D & quartz2d = ((CApplePlatform *) CFX_GEModule::Get()->GetPlatformData())->_quartz2d;
- quartz2d.DestroyFont(m_pPlatformFont);
- m_pPlatformFont = NULL;
- }
+void CFX_Font::ReleasePlatformResource() {
+ if (m_pPlatformFont) {
+ CQuartz2D& quartz2d =
+ ((CApplePlatform*)CFX_GEModule::Get()->GetPlatformData())->_quartz2d;
+ quartz2d.DestroyFont(m_pPlatformFont);
+ m_pPlatformFont = NULL;
+ }
}
#endif // _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
diff --git a/core/src/fxge/apple/fx_mac_imp.cpp b/core/src/fxge/apple/fx_mac_imp.cpp
index 1bcbc9d194..9918ba97e8 100644
--- a/core/src/fxge/apple/fx_mac_imp.cpp
+++ b/core/src/fxge/apple/fx_mac_imp.cpp
@@ -8,10 +8,9 @@
#include "apple_int.h"
#if _FX_OS_ == _FX_MACOSX_
static const struct {
- const FX_CHAR* m_pName;
- const FX_CHAR* m_pSubstName;
-}
-Base14Substs[] = {
+ const FX_CHAR* m_pName;
+ const FX_CHAR* m_pSubstName;
+} Base14Substs[] = {
{"Courier", "Courier New"},
{"Courier-Bold", "Courier New Bold"},
{"Courier-BoldOblique", "Courier New Bold Italic"},
@@ -25,82 +24,88 @@ Base14Substs[] = {
{"Times-BoldItalic", "Times New Roman Bold Italic"},
{"Times-Italic", "Times New Roman Italic"},
};
-class CFX_MacFontInfo : public CFX_FolderFontInfo
-{
-public:
- virtual void* MapFont(int weight, FX_BOOL bItalic, int charset, int pitch_family, const FX_CHAR* family, int& iExact);
+class CFX_MacFontInfo : public CFX_FolderFontInfo {
+ public:
+ virtual void* MapFont(int weight,
+ FX_BOOL bItalic,
+ int charset,
+ int pitch_family,
+ const FX_CHAR* family,
+ int& iExact);
};
#define JAPAN_GOTHIC "Hiragino Kaku Gothic Pro W6"
#define JAPAN_MINCHO "Hiragino Mincho Pro W6"
-static void GetJapanesePreference(CFX_ByteString& face, int weight, int picth_family)
-{
- if (face.Find("Gothic") >= 0) {
- face = JAPAN_GOTHIC;
- return;
- }
- if (!(picth_family & FXFONT_FF_ROMAN) && weight > 400) {
- face = JAPAN_GOTHIC;
- } else {
- face = JAPAN_MINCHO;
- }
+static void GetJapanesePreference(CFX_ByteString& face,
+ int weight,
+ int picth_family) {
+ if (face.Find("Gothic") >= 0) {
+ face = JAPAN_GOTHIC;
+ return;
+ }
+ if (!(picth_family & FXFONT_FF_ROMAN) && weight > 400) {
+ face = JAPAN_GOTHIC;
+ } else {
+ face = JAPAN_MINCHO;
+ }
}
-void* CFX_MacFontInfo::MapFont(int weight, FX_BOOL bItalic, int charset, int pitch_family, const FX_CHAR* cstr_face, int& iExact)
-{
- CFX_ByteString face = cstr_face;
- int iBaseFont;
- for (iBaseFont = 0; iBaseFont < 12; iBaseFont ++)
- if (face == CFX_ByteStringC(Base14Substs[iBaseFont].m_pName)) {
- face = Base14Substs[iBaseFont].m_pSubstName;
- iExact = TRUE;
- break;
- }
- if (iBaseFont < 12) {
- return GetFont(face);
- }
- void* p;
- if (m_FontList.Lookup(face, p)) {
- return p;
- }
- if (charset == FXFONT_ANSI_CHARSET && (pitch_family & FXFONT_FF_FIXEDPITCH)) {
- return GetFont("Courier New");
- }
- if (charset == FXFONT_ANSI_CHARSET || charset == FXFONT_SYMBOL_CHARSET) {
- return NULL;
- }
- switch (charset) {
- case FXFONT_SHIFTJIS_CHARSET:
- GetJapanesePreference(face, weight, pitch_family);
- break;
- case FXFONT_GB2312_CHARSET:
- face = "STSong";
- break;
- case FXFONT_HANGEUL_CHARSET:
- face = "AppleMyungjo";
- break;
- case FXFONT_CHINESEBIG5_CHARSET:
- face = "LiSong Pro Light";
- }
- if (m_FontList.Lookup(face, p)) {
- return p;
+void* CFX_MacFontInfo::MapFont(int weight,
+ FX_BOOL bItalic,
+ int charset,
+ int pitch_family,
+ const FX_CHAR* cstr_face,
+ int& iExact) {
+ CFX_ByteString face = cstr_face;
+ int iBaseFont;
+ for (iBaseFont = 0; iBaseFont < 12; iBaseFont++)
+ if (face == CFX_ByteStringC(Base14Substs[iBaseFont].m_pName)) {
+ face = Base14Substs[iBaseFont].m_pSubstName;
+ iExact = TRUE;
+ break;
}
+ if (iBaseFont < 12) {
+ return GetFont(face);
+ }
+ void* p;
+ if (m_FontList.Lookup(face, p)) {
+ return p;
+ }
+ if (charset == FXFONT_ANSI_CHARSET && (pitch_family & FXFONT_FF_FIXEDPITCH)) {
+ return GetFont("Courier New");
+ }
+ if (charset == FXFONT_ANSI_CHARSET || charset == FXFONT_SYMBOL_CHARSET) {
return NULL;
+ }
+ switch (charset) {
+ case FXFONT_SHIFTJIS_CHARSET:
+ GetJapanesePreference(face, weight, pitch_family);
+ break;
+ case FXFONT_GB2312_CHARSET:
+ face = "STSong";
+ break;
+ case FXFONT_HANGEUL_CHARSET:
+ face = "AppleMyungjo";
+ break;
+ case FXFONT_CHINESEBIG5_CHARSET:
+ face = "LiSong Pro Light";
+ }
+ if (m_FontList.Lookup(face, p)) {
+ return p;
+ }
+ return NULL;
}
-IFX_SystemFontInfo* IFX_SystemFontInfo::CreateDefault()
-{
- CFX_MacFontInfo* pInfo = new CFX_MacFontInfo;
- pInfo->AddPath("~/Library/Fonts");
- pInfo->AddPath("/Library/Fonts");
- pInfo->AddPath("/System/Library/Fonts");
- return pInfo;
+IFX_SystemFontInfo* IFX_SystemFontInfo::CreateDefault() {
+ CFX_MacFontInfo* pInfo = new CFX_MacFontInfo;
+ pInfo->AddPath("~/Library/Fonts");
+ pInfo->AddPath("/Library/Fonts");
+ pInfo->AddPath("/System/Library/Fonts");
+ return pInfo;
}
-void CFX_GEModule::InitPlatform()
-{
- m_pPlatformData = new CApplePlatform;
- m_pFontMgr->SetSystemFontInfo(IFX_SystemFontInfo::CreateDefault());
+void CFX_GEModule::InitPlatform() {
+ m_pPlatformData = new CApplePlatform;
+ m_pFontMgr->SetSystemFontInfo(IFX_SystemFontInfo::CreateDefault());
}
-void CFX_GEModule::DestroyPlatform()
-{
- delete (CApplePlatform *)m_pPlatformData;
- m_pPlatformData = NULL;
+void CFX_GEModule::DestroyPlatform() {
+ delete (CApplePlatform*)m_pPlatformData;
+ m_pPlatformData = NULL;
}
#endif
diff --git a/core/src/fxge/apple/fx_quartz_device.cpp b/core/src/fxge/apple/fx_quartz_device.cpp
index d1e4f544ba..34851e0c80 100644
--- a/core/src/fxge/apple/fx_quartz_device.cpp
+++ b/core/src/fxge/apple/fx_quartz_device.cpp
@@ -11,1118 +11,1046 @@
#include "../dib/dib_int.h"
#include "../ge/text_int.h"
-#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
+#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
#include "apple_int.h"
#include "../../../include/fxge/fx_ge_apple.h"
#ifndef CGFLOAT_IS_DOUBLE
#error Expected CGFLOAT_IS_DOUBLE to be defined by CoreGraphics headers
#endif
-void* CQuartz2D::createGraphics(CFX_DIBitmap* pBitmap)
-{
- if (!pBitmap) {
- return NULL;
- }
- CGBitmapInfo bmpInfo = kCGBitmapByteOrder32Little;
- switch (pBitmap->GetFormat()) {
- case FXDIB_Rgb32:
- bmpInfo |= kCGImageAlphaNoneSkipFirst;
- break;
- case FXDIB_Argb:
- default:
- return NULL;
- }
- CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
- CGContextRef context = CGBitmapContextCreate(pBitmap->GetBuffer(),
- pBitmap->GetWidth(),
- pBitmap->GetHeight(),
- 8,
- pBitmap->GetPitch(),
- colorSpace,
- bmpInfo);
- CGColorSpaceRelease(colorSpace);
- return context;
+void* CQuartz2D::createGraphics(CFX_DIBitmap* pBitmap) {
+ if (!pBitmap) {
+ return NULL;
+ }
+ CGBitmapInfo bmpInfo = kCGBitmapByteOrder32Little;
+ switch (pBitmap->GetFormat()) {
+ case FXDIB_Rgb32:
+ bmpInfo |= kCGImageAlphaNoneSkipFirst;
+ break;
+ case FXDIB_Argb:
+ default:
+ return NULL;
+ }
+ CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
+ CGContextRef context = CGBitmapContextCreate(
+ pBitmap->GetBuffer(), pBitmap->GetWidth(), pBitmap->GetHeight(), 8,
+ pBitmap->GetPitch(), colorSpace, bmpInfo);
+ CGColorSpaceRelease(colorSpace);
+ return context;
}
-void CQuartz2D::destroyGraphics(void* graphics)
-{
- if (graphics) {
- CGContextRelease((CGContextRef) graphics);
- }
+void CQuartz2D::destroyGraphics(void* graphics) {
+ if (graphics) {
+ CGContextRelease((CGContextRef)graphics);
+ }
}
-void* CQuartz2D::CreateFont(const uint8_t* pFontData, FX_DWORD dwFontSize)
-{
- CGDataProviderRef pDataProvider = CGDataProviderCreateWithData(NULL, pFontData, (size_t)dwFontSize, NULL);
- if (NULL == pDataProvider) {
- return NULL;
- }
- CGFontRef pCGFont = CGFontCreateWithDataProvider(pDataProvider);
- CGDataProviderRelease(pDataProvider);
- return pCGFont;
+void* CQuartz2D::CreateFont(const uint8_t* pFontData, FX_DWORD dwFontSize) {
+ CGDataProviderRef pDataProvider =
+ CGDataProviderCreateWithData(NULL, pFontData, (size_t)dwFontSize, NULL);
+ if (NULL == pDataProvider) {
+ return NULL;
+ }
+ CGFontRef pCGFont = CGFontCreateWithDataProvider(pDataProvider);
+ CGDataProviderRelease(pDataProvider);
+ return pCGFont;
}
-void CQuartz2D::DestroyFont(void* pFont)
-{
- CGFontRelease((CGFontRef)pFont);
+void CQuartz2D::DestroyFont(void* pFont) {
+ CGFontRelease((CGFontRef)pFont);
}
-void CQuartz2D::setGraphicsTextMatrix(void* graphics, CFX_AffineMatrix* matrix)
-{
- if (!graphics || !matrix) {
- return;
- }
- CGContextRef context = (CGContextRef) graphics;
- CGFloat ty = CGBitmapContextGetHeight(context) - matrix->f;
- CGContextSetTextMatrix(context, CGAffineTransformMake(matrix->a,
- matrix->b,
- matrix->c,
- matrix->d,
- matrix->e,
- ty));
+void CQuartz2D::setGraphicsTextMatrix(void* graphics,
+ CFX_AffineMatrix* matrix) {
+ if (!graphics || !matrix) {
+ return;
+ }
+ CGContextRef context = (CGContextRef)graphics;
+ CGFloat ty = CGBitmapContextGetHeight(context) - matrix->f;
+ CGContextSetTextMatrix(
+ context, CGAffineTransformMake(matrix->a, matrix->b, matrix->c, matrix->d,
+ matrix->e, ty));
}
-FX_BOOL CQuartz2D::drawGraphicsString(void* graphics,
- void* font,
- FX_FLOAT fontSize,
- FX_WORD* glyphIndices,
- CGPoint* glyphPositions,
- int32_t charsCount,
- FX_ARGB argb,
- CFX_AffineMatrix* matrix )
-{
- if (!graphics) {
- return FALSE;
- }
- CGContextRef context = (CGContextRef) graphics;
- CGContextSetFont(context, (CGFontRef)font);
- CGContextSetFontSize(context, fontSize);
- if (matrix) {
- CGAffineTransform m = CGContextGetTextMatrix(context);
- m = CGAffineTransformConcat(m,
- CGAffineTransformMake(matrix->a,
- matrix->b,
- matrix->c,
- matrix->d,
- matrix->e,
- matrix->f));
- CGContextSetTextMatrix(context, m);
- }
- int32_t a, r, g, b;
- ArgbDecode(argb, a, r, g, b);
- CGContextSetRGBFillColor(context,
- r / 255.f,
- g / 255.f,
- b / 255.f,
- a / 255.f);
- CGContextSaveGState(context);
+FX_BOOL CQuartz2D::drawGraphicsString(void* graphics,
+ void* font,
+ FX_FLOAT fontSize,
+ FX_WORD* glyphIndices,
+ CGPoint* glyphPositions,
+ int32_t charsCount,
+ FX_ARGB argb,
+ CFX_AffineMatrix* matrix) {
+ if (!graphics) {
+ return FALSE;
+ }
+ CGContextRef context = (CGContextRef)graphics;
+ CGContextSetFont(context, (CGFontRef)font);
+ CGContextSetFontSize(context, fontSize);
+ if (matrix) {
+ CGAffineTransform m = CGContextGetTextMatrix(context);
+ m = CGAffineTransformConcat(
+ m, CGAffineTransformMake(matrix->a, matrix->b, matrix->c, matrix->d,
+ matrix->e, matrix->f));
+ CGContextSetTextMatrix(context, m);
+ }
+ int32_t a, r, g, b;
+ ArgbDecode(argb, a, r, g, b);
+ CGContextSetRGBFillColor(context, r / 255.f, g / 255.f, b / 255.f, a / 255.f);
+ CGContextSaveGState(context);
#if CGFLOAT_IS_DOUBLE
- CGPoint* glyphPositionsCG = new CGPoint[charsCount];
- if (!glyphPositionsCG) {
- return FALSE;
- }
- for (int index = 0; index < charsCount; ++index) {
- glyphPositionsCG[index].x = glyphPositions[index].x;
- glyphPositionsCG[index].y = glyphPositions[index].y;
- }
+ CGPoint* glyphPositionsCG = new CGPoint[charsCount];
+ if (!glyphPositionsCG) {
+ return FALSE;
+ }
+ for (int index = 0; index < charsCount; ++index) {
+ glyphPositionsCG[index].x = glyphPositions[index].x;
+ glyphPositionsCG[index].y = glyphPositions[index].y;
+ }
#else
- CGPoint* glyphPositionsCG = (CGPoint*)glyphPositions;
+ CGPoint* glyphPositionsCG = (CGPoint*)glyphPositions;
#endif
- CGContextShowGlyphsAtPositions(context,
- (CGGlyph *) glyphIndices,
- glyphPositionsCG,
- charsCount);
+ CGContextShowGlyphsAtPositions(context, (CGGlyph*)glyphIndices,
+ glyphPositionsCG, charsCount);
#if CGFLOAT_IS_DOUBLE
- delete[] glyphPositionsCG;
+ delete[] glyphPositionsCG;
#endif
- CGContextRestoreGState(context);
- return TRUE;
+ CGContextRestoreGState(context);
+ return TRUE;
}
-void CQuartz2D::saveGraphicsState(void * graphics)
-{
- if (graphics) {
- CGContextSaveGState((CGContextRef) graphics);
- }
+void CQuartz2D::saveGraphicsState(void* graphics) {
+ if (graphics) {
+ CGContextSaveGState((CGContextRef)graphics);
+ }
}
-void CQuartz2D::restoreGraphicsState(void * graphics)
-{
- if (graphics) {
- CGContextRestoreGState((CGContextRef) graphics);
- }
+void CQuartz2D::restoreGraphicsState(void* graphics) {
+ if (graphics) {
+ CGContextRestoreGState((CGContextRef)graphics);
+ }
}
-static CGContextRef createContextWithBitmap(CFX_DIBitmap* pBitmap)
-{
- if (!pBitmap || pBitmap->IsCmykImage() || pBitmap->GetBPP() < 32) {
- return NULL;
- }
- CGBitmapInfo bitmapInfo = kCGBitmapByteOrder32Little;
- if (pBitmap->HasAlpha()) {
- bitmapInfo |= kCGImageAlphaPremultipliedFirst;
- } else {
- bitmapInfo |= kCGImageAlphaNoneSkipFirst;
- }
- CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
- CGContextRef context = CGBitmapContextCreate(pBitmap->GetBuffer(),
- pBitmap->GetWidth(),
- pBitmap->GetHeight(),
- 8,
- pBitmap->GetPitch(),
- colorSpace,
- bitmapInfo);
- CGColorSpaceRelease(colorSpace);
- return context;
+static CGContextRef createContextWithBitmap(CFX_DIBitmap* pBitmap) {
+ if (!pBitmap || pBitmap->IsCmykImage() || pBitmap->GetBPP() < 32) {
+ return NULL;
+ }
+ CGBitmapInfo bitmapInfo = kCGBitmapByteOrder32Little;
+ if (pBitmap->HasAlpha()) {
+ bitmapInfo |= kCGImageAlphaPremultipliedFirst;
+ } else {
+ bitmapInfo |= kCGImageAlphaNoneSkipFirst;
+ }
+ CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
+ CGContextRef context = CGBitmapContextCreate(
+ pBitmap->GetBuffer(), pBitmap->GetWidth(), pBitmap->GetHeight(), 8,
+ pBitmap->GetPitch(), colorSpace, bitmapInfo);
+ CGColorSpaceRelease(colorSpace);
+ return context;
}
-CFX_QuartzDeviceDriver::CFX_QuartzDeviceDriver(CGContextRef context, int32_t deviceClass)
-{
- m_saveCount = 0;
- _context = context;
- _deviceClass = deviceClass;
- CGContextRetain(_context);
- CGRect r = CGContextGetClipBoundingBox(context);
- _width = FXSYS_round(r.size.width);
- _height = FXSYS_round(r.size.height);
- _renderCaps = FXRC_SOFT_CLIP | FXRC_BLEND_MODE |
- FXRC_ALPHA_PATH | FXRC_ALPHA_IMAGE |
- FXRC_BIT_MASK | FXRC_ALPHA_MASK;
- if (_deviceClass != FXDC_DISPLAY) {
- } else {
- CGImageRef image = CGBitmapContextCreateImage(_context);
- if (image) {
- _renderCaps |= FXRC_GET_BITS;
- _width = CGImageGetWidth(image);
- _height = CGImageGetHeight(image);
- CGImageAlphaInfo alphaInfo = CGImageGetAlphaInfo(image);
- if (kCGImageAlphaPremultipliedFirst == alphaInfo ||
- kCGImageAlphaPremultipliedLast == alphaInfo ||
- kCGImageAlphaOnly == alphaInfo) {
- _renderCaps |= FXRC_ALPHA_OUTPUT;
- }
- }
- CGImageRelease(image);
- }
- CGAffineTransform ctm = CGContextGetCTM(_context);
- CGContextSaveGState(_context);
- m_saveCount++;
- if (ctm.d >= 0) {
- CGFloat offset_x, offset_y;
- offset_x = ctm.tx;
- offset_y = ctm.ty;
- CGContextTranslateCTM(_context, -offset_x, -offset_y);
- CGContextConcatCTM(_context, CGAffineTransformMake(1, 0, 0, -1, offset_x, _height + offset_y));
+CFX_QuartzDeviceDriver::CFX_QuartzDeviceDriver(CGContextRef context,
+ int32_t deviceClass) {
+ m_saveCount = 0;
+ _context = context;
+ _deviceClass = deviceClass;
+ CGContextRetain(_context);
+ CGRect r = CGContextGetClipBoundingBox(context);
+ _width = FXSYS_round(r.size.width);
+ _height = FXSYS_round(r.size.height);
+ _renderCaps = FXRC_SOFT_CLIP | FXRC_BLEND_MODE | FXRC_ALPHA_PATH |
+ FXRC_ALPHA_IMAGE | FXRC_BIT_MASK | FXRC_ALPHA_MASK;
+ if (_deviceClass != FXDC_DISPLAY) {
+ } else {
+ CGImageRef image = CGBitmapContextCreateImage(_context);
+ if (image) {
+ _renderCaps |= FXRC_GET_BITS;
+ _width = CGImageGetWidth(image);
+ _height = CGImageGetHeight(image);
+ CGImageAlphaInfo alphaInfo = CGImageGetAlphaInfo(image);
+ if (kCGImageAlphaPremultipliedFirst == alphaInfo ||
+ kCGImageAlphaPremultipliedLast == alphaInfo ||
+ kCGImageAlphaOnly == alphaInfo) {
+ _renderCaps |= FXRC_ALPHA_OUTPUT;
+ }
}
- _foxitDevice2User = CGAffineTransformIdentity;
- _user2FoxitDevice = CGAffineTransformInvert(_foxitDevice2User);
+ CGImageRelease(image);
+ }
+ CGAffineTransform ctm = CGContextGetCTM(_context);
+ CGContextSaveGState(_context);
+ m_saveCount++;
+ if (ctm.d >= 0) {
+ CGFloat offset_x, offset_y;
+ offset_x = ctm.tx;
+ offset_y = ctm.ty;
+ CGContextTranslateCTM(_context, -offset_x, -offset_y);
+ CGContextConcatCTM(_context, CGAffineTransformMake(1, 0, 0, -1, offset_x,
+ _height + offset_y));
+ }
+ _foxitDevice2User = CGAffineTransformIdentity;
+ _user2FoxitDevice = CGAffineTransformInvert(_foxitDevice2User);
}
-CFX_QuartzDeviceDriver::~CFX_QuartzDeviceDriver()
-{
+CFX_QuartzDeviceDriver::~CFX_QuartzDeviceDriver() {
+ CGContextRestoreGState(_context);
+ m_saveCount--;
+ for (int i = 0; i < m_saveCount; ++i) {
CGContextRestoreGState(_context);
- m_saveCount--;
- for (int i = 0; i < m_saveCount; ++i) {
- CGContextRestoreGState(_context);
+ }
+ if (_context) {
+ CGContextRelease(_context);
+ }
+}
+int CFX_QuartzDeviceDriver::GetDeviceCaps(int capsID) {
+ switch (capsID) {
+ case FXDC_DEVICE_CLASS: {
+ return _deviceClass;
}
- if (_context) {
- CGContextRelease(_context);
+ case FXDC_PIXEL_WIDTH: {
+ return _width;
}
-}
-int CFX_QuartzDeviceDriver::GetDeviceCaps(int capsID)
-{
- switch (capsID) {
- case FXDC_DEVICE_CLASS: {
- return _deviceClass;
- }
- case FXDC_PIXEL_WIDTH: {
- return _width;
- }
- case FXDC_PIXEL_HEIGHT: {
- return _height;
- }
- case FXDC_BITS_PIXEL: {
- return 32;
- }
- case FXDC_RENDER_CAPS: {
- return _renderCaps;
- }
- default: {
- return 0;
- }
+ case FXDC_PIXEL_HEIGHT: {
+ return _height;
+ }
+ case FXDC_BITS_PIXEL: {
+ return 32;
}
+ case FXDC_RENDER_CAPS: {
+ return _renderCaps;
+ }
+ default: { return 0; }
+ }
+}
+CFX_Matrix CFX_QuartzDeviceDriver::GetCTM() const {
+ CGAffineTransform ctm = CGContextGetCTM(_context);
+ return CFX_Matrix(ctm.a, ctm.b, ctm.c, ctm.d, ctm.tx, ctm.ty);
}
-CFX_Matrix CFX_QuartzDeviceDriver::GetCTM() const
-{
- CGAffineTransform ctm = CGContextGetCTM(_context);
- return CFX_Matrix(ctm.a, ctm.b, ctm.c, ctm.d, ctm.tx, ctm.ty);
+void CFX_QuartzDeviceDriver::SaveState() {
+ CGContextSaveGState(_context);
+ m_saveCount++;
}
-void CFX_QuartzDeviceDriver::SaveState()
-{
+void CFX_QuartzDeviceDriver::RestoreState(FX_BOOL isKeepSaved) {
+ CGContextRestoreGState(_context);
+ if (isKeepSaved) {
CGContextSaveGState(_context);
- m_saveCount++;
+ } else {
+ m_saveCount--;
+ }
}
-void CFX_QuartzDeviceDriver::RestoreState(FX_BOOL isKeepSaved )
-{
- CGContextRestoreGState(_context);
- if (isKeepSaved) {
- CGContextSaveGState(_context);
- } else {
- m_saveCount--;
- }
+FX_BOOL CFX_QuartzDeviceDriver::SetClip_PathFill(const CFX_PathData* pathData,
+ const CFX_AffineMatrix* matrix,
+ int fillMode) {
+ SaveState();
+ CGAffineTransform m = CGAffineTransformIdentity;
+ if (matrix) {
+ m = CGAffineTransformMake(matrix->GetA(), matrix->GetB(), matrix->GetC(),
+ matrix->GetD(), matrix->GetE(), matrix->GetF());
+ }
+ m = CGAffineTransformConcat(m, _foxitDevice2User);
+ CGContextConcatCTM(_context, m);
+ setPathToContext(pathData);
+ RestoreState(FALSE);
+ if ((fillMode & 3) == FXFILL_WINDING) {
+ CGContextClip(_context);
+ } else {
+ CGContextEOClip(_context);
+ }
+ return TRUE;
}
-FX_BOOL CFX_QuartzDeviceDriver::SetClip_PathFill(const CFX_PathData* pathData,
- const CFX_AffineMatrix* matrix,
- int fillMode )
-{
- SaveState();
- CGAffineTransform m = CGAffineTransformIdentity;
- if (matrix) {
- m = CGAffineTransformMake(matrix->GetA(), matrix->GetB(), matrix->GetC(), matrix->GetD(), matrix->GetE(), matrix->GetF());
- }
- m = CGAffineTransformConcat(m, _foxitDevice2User);
- CGContextConcatCTM(_context, m);
- setPathToContext(pathData);
- RestoreState(FALSE);
- if ((fillMode & 3) == FXFILL_WINDING) {
- CGContextClip(_context);
- } else {
- CGContextEOClip(_context);
- }
- return TRUE;
+FX_FLOAT CFX_QuartzDeviceDriver::getLineWidth(
+ const CFX_GraphStateData* graphState,
+ CGAffineTransform ctm) {
+ FX_FLOAT lineWidth = graphState->m_LineWidth;
+ if (graphState->m_LineWidth <= 0.f) {
+ CGSize size;
+ size.width = 1;
+ size.height = 1;
+ CGSize temp = CGSizeApplyAffineTransform(size, ctm);
+ CGFloat x = 1 / temp.width;
+ CGFloat y = 1 / temp.height;
+ lineWidth = x > y ? x : y;
+ }
+ return lineWidth;
}
-FX_FLOAT CFX_QuartzDeviceDriver::getLineWidth(const CFX_GraphStateData * graphState, CGAffineTransform ctm)
-{
- FX_FLOAT lineWidth = graphState->m_LineWidth;
- if (graphState->m_LineWidth <= 0.f) {
- CGSize size;
- size.width = 1;
- size.height = 1;
- CGSize temp = CGSizeApplyAffineTransform(size, ctm);
- CGFloat x = 1 / temp.width;
- CGFloat y = 1 / temp.height;
- lineWidth = x > y ? x : y;
- }
- return lineWidth;
+FX_BOOL CFX_QuartzDeviceDriver::SetClip_PathStroke(
+ const CFX_PathData* pathData,
+ const CFX_AffineMatrix* matrix,
+ const CFX_GraphStateData* graphState) {
+ SaveState();
+ CGAffineTransform m = CGAffineTransformIdentity;
+ if (matrix) {
+ m = CGAffineTransformMake(matrix->GetA(), matrix->GetB(), matrix->GetC(),
+ matrix->GetD(), matrix->GetE(), matrix->GetF());
+ }
+ m = CGAffineTransformConcat(m, _foxitDevice2User);
+ CGContextConcatCTM(_context, m);
+ FX_FLOAT lineWidth = getLineWidth(graphState, m);
+ setStrokeInfo(graphState, 0xFF000000, lineWidth);
+ setPathToContext(pathData);
+ CGContextReplacePathWithStrokedPath(_context);
+ RestoreState(FALSE);
+ CGContextClip(_context);
+ return TRUE;
}
-FX_BOOL CFX_QuartzDeviceDriver::SetClip_PathStroke(const CFX_PathData* pathData,
- const CFX_AffineMatrix* matrix,
- const CFX_GraphStateData* graphState )
-{
- SaveState();
- CGAffineTransform m = CGAffineTransformIdentity;
- if (matrix) {
- m = CGAffineTransformMake(matrix->GetA(), matrix->GetB(), matrix->GetC(), matrix->GetD(), matrix->GetE(), matrix->GetF());
- }
- m = CGAffineTransformConcat(m, _foxitDevice2User);
- CGContextConcatCTM(_context, m);
- FX_FLOAT lineWidth = getLineWidth(graphState, m);
- setStrokeInfo(graphState, 0xFF000000, lineWidth);
- setPathToContext(pathData);
- CGContextReplacePathWithStrokedPath(_context);
- RestoreState(FALSE);
- CGContextClip(_context);
- return TRUE;
+static CGBlendMode GetCGBlendMode(int blend_type) {
+ CGBlendMode mode = kCGBlendModeNormal;
+ switch (blend_type) {
+ case FXDIB_BLEND_NORMAL:
+ mode = kCGBlendModeNormal;
+ break;
+ case FXDIB_BLEND_MULTIPLY:
+ mode = kCGBlendModeMultiply;
+ break;
+ case FXDIB_BLEND_SCREEN:
+ mode = kCGBlendModeScreen;
+ break;
+ case FXDIB_BLEND_OVERLAY:
+ mode = kCGBlendModeOverlay;
+ break;
+ case FXDIB_BLEND_DARKEN:
+ mode = kCGBlendModeDarken;
+ break;
+ case FXDIB_BLEND_LIGHTEN:
+ mode = kCGBlendModeLighten;
+ break;
+ case FXDIB_BLEND_COLORDODGE:
+ mode = kCGBlendModeColorDodge;
+ break;
+ case FXDIB_BLEND_COLORBURN:
+ mode = kCGBlendModeColorBurn;
+ break;
+ case FXDIB_BLEND_HARDLIGHT:
+ mode = kCGBlendModeHardLight;
+ break;
+ case FXDIB_BLEND_SOFTLIGHT:
+ mode = kCGBlendModeSoftLight;
+ break;
+ case FXDIB_BLEND_DIFFERENCE:
+ mode = kCGBlendModeDifference;
+ break;
+ case FXDIB_BLEND_EXCLUSION:
+ mode = kCGBlendModeExclusion;
+ break;
+ case FXDIB_BLEND_HUE:
+ mode = kCGBlendModeHue;
+ break;
+ case FXDIB_BLEND_SATURATION:
+ mode = kCGBlendModeSaturation;
+ break;
+ case FXDIB_BLEND_COLOR:
+ mode = kCGBlendModeColor;
+ break;
+ case FXDIB_BLEND_LUMINOSITY:
+ mode = kCGBlendModeLuminosity;
+ break;
+ default:
+ mode = kCGBlendModeNormal;
+ break;
+ }
+ return mode;
}
-static CGBlendMode GetCGBlendMode(int blend_type)
-{
- CGBlendMode mode = kCGBlendModeNormal;
- switch (blend_type) {
- case FXDIB_BLEND_NORMAL:
- mode = kCGBlendModeNormal;
- break;
- case FXDIB_BLEND_MULTIPLY:
- mode = kCGBlendModeMultiply;
- break;
- case FXDIB_BLEND_SCREEN:
- mode = kCGBlendModeScreen;
- break;
- case FXDIB_BLEND_OVERLAY:
- mode = kCGBlendModeOverlay;
- break;
- case FXDIB_BLEND_DARKEN:
- mode = kCGBlendModeDarken;
- break;
- case FXDIB_BLEND_LIGHTEN:
- mode = kCGBlendModeLighten;
- break;
- case FXDIB_BLEND_COLORDODGE:
- mode = kCGBlendModeColorDodge;
- break;
- case FXDIB_BLEND_COLORBURN:
- mode = kCGBlendModeColorBurn;
- break;
- case FXDIB_BLEND_HARDLIGHT:
- mode = kCGBlendModeHardLight;
- break;
- case FXDIB_BLEND_SOFTLIGHT:
- mode = kCGBlendModeSoftLight;
- break;
- case FXDIB_BLEND_DIFFERENCE:
- mode = kCGBlendModeDifference;
- break;
- case FXDIB_BLEND_EXCLUSION:
- mode = kCGBlendModeExclusion;
- break;
- case FXDIB_BLEND_HUE:
- mode = kCGBlendModeHue;
- break;
- case FXDIB_BLEND_SATURATION:
- mode = kCGBlendModeSaturation;
- break;
- case FXDIB_BLEND_COLOR:
- mode = kCGBlendModeColor;
- break;
- case FXDIB_BLEND_LUMINOSITY:
- mode = kCGBlendModeLuminosity;
- break;
- default:
- mode = kCGBlendModeNormal;
- break;
- }
- return mode;
+FX_BOOL CFX_QuartzDeviceDriver::DrawPath(const CFX_PathData* pathData,
+ const CFX_AffineMatrix* matrix,
+ const CFX_GraphStateData* graphState,
+ FX_DWORD fillArgb,
+ FX_DWORD strokeArgb,
+ int fillMode,
+ int alpha_flag,
+ void* pIccTransform,
+ int blend_type) {
+ SaveState();
+ CGBlendMode mode = GetCGBlendMode(blend_type);
+ if (mode != kCGBlendModeNormal) {
+ CGContextSetBlendMode(_context, mode);
+ }
+ CGAffineTransform m = CGAffineTransformIdentity;
+ if (matrix) {
+ m = CGAffineTransformMake(matrix->GetA(), matrix->GetB(), matrix->GetC(),
+ matrix->GetD(), matrix->GetE(), matrix->GetF());
+ }
+ m = CGAffineTransformConcat(m, _foxitDevice2User);
+ CGContextConcatCTM(_context, m);
+ int pathMode = 0;
+ if (graphState && strokeArgb) {
+ CGContextSetMiterLimit(_context, graphState->m_MiterLimit);
+ FX_FLOAT lineWidth = getLineWidth(graphState, m);
+ setStrokeInfo(graphState, strokeArgb, lineWidth);
+ pathMode |= 4;
+ }
+ if (fillMode && fillArgb) {
+ setFillInfo(fillArgb);
+ if ((fillMode & 3) == FXFILL_WINDING) {
+ pathMode |= 1;
+ } else if ((fillMode & 3) == FXFILL_ALTERNATE) {
+ pathMode |= 2;
+ }
+ }
+ setPathToContext(pathData);
+ if (fillMode & FXFILL_FULLCOVER) {
+ CGContextSetShouldAntialias(_context, false);
+ }
+ if (pathMode == 4) {
+ CGContextStrokePath(_context);
+ } else if (pathMode == 1) {
+ CGContextFillPath(_context);
+ } else if (pathMode == 2) {
+ CGContextEOFillPath(_context);
+ } else if (pathMode == 5) {
+ CGContextDrawPath(_context, kCGPathFillStroke);
+ } else if (pathMode == 6) {
+ CGContextDrawPath(_context, kCGPathEOFillStroke);
+ }
+ RestoreState(FALSE);
+ return TRUE;
}
-FX_BOOL CFX_QuartzDeviceDriver::DrawPath(const CFX_PathData* pathData,
- const CFX_AffineMatrix* matrix,
- const CFX_GraphStateData* graphState,
- FX_DWORD fillArgb,
- FX_DWORD strokeArgb,
- int fillMode,
- int alpha_flag,
- void* pIccTransform,
- int blend_type
- )
-{
- SaveState();
- CGBlendMode mode = GetCGBlendMode(blend_type);
- if (mode != kCGBlendModeNormal) {
- CGContextSetBlendMode(_context, mode);
- }
- CGAffineTransform m = CGAffineTransformIdentity;
- if (matrix) {
- m = CGAffineTransformMake(matrix->GetA(), matrix->GetB(), matrix->GetC(), matrix->GetD(), matrix->GetE(), matrix->GetF());
- }
- m = CGAffineTransformConcat(m, _foxitDevice2User);
- CGContextConcatCTM(_context, m);
- int pathMode = 0;
- if (graphState && strokeArgb) {
- CGContextSetMiterLimit(_context, graphState->m_MiterLimit);
- FX_FLOAT lineWidth = getLineWidth(graphState, m);
- setStrokeInfo(graphState, strokeArgb, lineWidth);
- pathMode |= 4;
- }
- if (fillMode && fillArgb) {
- setFillInfo(fillArgb);
- if ((fillMode & 3) == FXFILL_WINDING) {
- pathMode |= 1;
- } else if ((fillMode & 3) == FXFILL_ALTERNATE) {
- pathMode |= 2;
- }
- }
- setPathToContext(pathData);
- if (fillMode & FXFILL_FULLCOVER) {
- CGContextSetShouldAntialias(_context, false);
- }
- if (pathMode == 4) {
- CGContextStrokePath(_context);
- } else if (pathMode == 1) {
- CGContextFillPath(_context);
- } else if (pathMode == 2) {
- CGContextEOFillPath(_context);
- } else if (pathMode == 5) {
- CGContextDrawPath(_context, kCGPathFillStroke);
- } else if (pathMode == 6) {
- CGContextDrawPath(_context, kCGPathEOFillStroke);
- }
- RestoreState(FALSE);
- return TRUE;
+FX_BOOL CFX_QuartzDeviceDriver::FillRect(const FX_RECT* rect,
+ FX_ARGB fillArgb,
+ int alphaFlag,
+ void* iccTransform,
+ int blend_type) {
+ CGBlendMode mode = GetCGBlendMode(blend_type);
+ if (mode != kCGBlendModeNormal) {
+ CGContextSetBlendMode(_context, mode);
+ }
+ CGRect rect_fx =
+ CGRectMake(rect->left, rect->top, rect->Width(), rect->Height());
+ CGRect rect_usr = CGRectApplyAffineTransform(rect_fx, _foxitDevice2User);
+ int32_t a, r, g, b;
+ ArgbDecode(fillArgb, a, r, g, b);
+ CGContextSetRGBFillColor(_context, r / 255.f, g / 255.f, b / 255.f,
+ a / 255.f);
+ CGContextFillRect(_context, rect_usr);
+ if (mode != kCGBlendModeNormal) {
+ CGContextSetBlendMode(_context, kCGBlendModeNormal);
+ }
+ return TRUE;
}
-FX_BOOL CFX_QuartzDeviceDriver::FillRect(const FX_RECT* rect,
- FX_ARGB fillArgb,
- int alphaFlag ,
- void* iccTransform ,
- int blend_type )
-{
- CGBlendMode mode = GetCGBlendMode(blend_type);
- if (mode != kCGBlendModeNormal) {
- CGContextSetBlendMode(_context, mode);
- }
- CGRect rect_fx = CGRectMake(rect->left, rect->top, rect->Width(), rect->Height());
- CGRect rect_usr = CGRectApplyAffineTransform(rect_fx, _foxitDevice2User);
- int32_t a, r, g, b;
- ArgbDecode(fillArgb, a, r, g, b);
- CGContextSetRGBFillColor(_context,
- r / 255.f,
- g / 255.f,
- b / 255.f,
+FX_BOOL CFX_QuartzDeviceDriver::DrawCosmeticLine(FX_FLOAT x1,
+ FX_FLOAT y1,
+ FX_FLOAT x2,
+ FX_FLOAT y2,
+ FX_DWORD argb,
+ int alphaFlag,
+ void* iccTransform,
+ int blend_type) {
+ CGBlendMode mode = GetCGBlendMode(blend_type);
+ if (mode != kCGBlendModeNormal) {
+ CGContextSetBlendMode(_context, mode);
+ }
+ CGPoint pt =
+ CGPointApplyAffineTransform(CGPointMake(x1, y1), _foxitDevice2User);
+ x1 = pt.x;
+ y1 = pt.y;
+ pt = CGPointApplyAffineTransform(CGPointMake(x2, y2), _foxitDevice2User);
+ x2 = pt.x;
+ y2 = pt.y;
+ int32_t a, r, g, b;
+ ArgbDecode(argb, a, r, g, b);
+ CGContextSetRGBStrokeColor(_context, r / 255.f, g / 255.f, b / 255.f,
a / 255.f);
- CGContextFillRect(_context, rect_usr);
- if (mode != kCGBlendModeNormal) {
- CGContextSetBlendMode(_context, kCGBlendModeNormal);
- }
- return TRUE;
+ CGContextMoveToPoint(_context, x1, y1);
+ CGContextAddLineToPoint(_context, x2, y2);
+ CGContextStrokePath(_context);
+ if (mode != kCGBlendModeNormal) {
+ CGContextSetBlendMode(_context, kCGBlendModeNormal);
+ }
+ return TRUE;
}
-FX_BOOL CFX_QuartzDeviceDriver::DrawCosmeticLine(FX_FLOAT x1,
- FX_FLOAT y1,
- FX_FLOAT x2,
- FX_FLOAT y2,
- FX_DWORD argb,
- int alphaFlag ,
- void* iccTransform ,
- int blend_type )
-{
- CGBlendMode mode = GetCGBlendMode(blend_type);
- if (mode != kCGBlendModeNormal) {
- CGContextSetBlendMode(_context, mode);
- }
- CGPoint pt = CGPointApplyAffineTransform(CGPointMake(x1, y1), _foxitDevice2User);
- x1 = pt.x;
- y1 = pt.y;
- pt = CGPointApplyAffineTransform(CGPointMake(x2, y2), _foxitDevice2User);
- x2 = pt.x;
- y2 = pt.y;
- int32_t a, r, g, b;
- ArgbDecode(argb, a, r, g, b);
- CGContextSetRGBStrokeColor(_context,
- r / 255.f,
- g / 255.f,
- b / 255.f,
- a / 255.f);
- CGContextMoveToPoint(_context, x1, y1);
- CGContextAddLineToPoint(_context, x2, y2);
- CGContextStrokePath(_context);
- if (mode != kCGBlendModeNormal) {
- CGContextSetBlendMode(_context, kCGBlendModeNormal);
- }
- return TRUE;
-}
-FX_BOOL CFX_QuartzDeviceDriver::GetClipBox(FX_RECT* rect)
-{
- CGRect r = CGContextGetClipBoundingBox(_context);
- r = CGRectApplyAffineTransform(r, _user2FoxitDevice);
- rect->left = FXSYS_floor(r.origin.x);
- rect->top = FXSYS_floor(r.origin.y);
- rect->right = FXSYS_ceil(r.origin.x + r.size.width);
- rect->bottom = FXSYS_ceil(r.origin.y + r.size.height);
- return TRUE;
+FX_BOOL CFX_QuartzDeviceDriver::GetClipBox(FX_RECT* rect) {
+ CGRect r = CGContextGetClipBoundingBox(_context);
+ r = CGRectApplyAffineTransform(r, _user2FoxitDevice);
+ rect->left = FXSYS_floor(r.origin.x);
+ rect->top = FXSYS_floor(r.origin.y);
+ rect->right = FXSYS_ceil(r.origin.x + r.size.width);
+ rect->bottom = FXSYS_ceil(r.origin.y + r.size.height);
+ return TRUE;
}
-FX_BOOL CFX_QuartzDeviceDriver::GetDIBits(CFX_DIBitmap* bitmap,
- int32_t left,
- int32_t top,
- void* pIccTransform,
- FX_BOOL bDEdge)
-{
- if (FXDC_PRINTER == _deviceClass) {
- return FALSE;
- }
- if (bitmap->GetBPP() < 32) {
- return FALSE;
- }
- if (!(_renderCaps | FXRC_GET_BITS)) {
- return FALSE;
- }
- CGPoint pt = CGPointMake(left, top);
- pt = CGPointApplyAffineTransform(pt, _foxitDevice2User);
- CGAffineTransform ctm = CGContextGetCTM(_context);
- pt.x *= FXSYS_fabs(ctm.a);
- pt.y *= FXSYS_fabs(ctm.d);
- CGImageRef image = CGBitmapContextCreateImage(_context);
- if (NULL == image) {
- return FALSE;
- }
- CGFloat width = (CGFloat) bitmap->GetWidth();
- CGFloat height = (CGFloat) bitmap->GetHeight();
- if (width + pt.x > _width) {
- width -= (width + pt.x - _width);
- }
- if (height + pt.y > _height) {
- height -= (height + pt.y - _height);
- }
- CGImageRef subImage = CGImageCreateWithImageInRect(image,
- CGRectMake(pt.x,
- pt.y,
- width,
- height));
- CGContextRef context = createContextWithBitmap(bitmap);
- CGRect rect = CGContextGetClipBoundingBox(context);
- CGContextClearRect(context, rect);
- CGContextDrawImage(context, rect, subImage);
- CGContextRelease(context);
- CGImageRelease(subImage);
- CGImageRelease(image);
- if (bitmap->HasAlpha()) {
- for (int row = 0; row < bitmap->GetHeight(); row ++) {
- uint8_t* pScanline = (uint8_t*)bitmap->GetScanline(row);
- for (int col = 0; col < bitmap->GetWidth(); col ++) {
- if (pScanline[3] > 0) {
- pScanline[0] = (pScanline[0] * 255.f / pScanline[3] + .5f);
- pScanline[1] = (pScanline[1] * 255.f / pScanline[3] + .5f);
- pScanline[2] = (pScanline[2] * 255.f / pScanline[3] + .5f);
- }
- pScanline += 4;
- }
+FX_BOOL CFX_QuartzDeviceDriver::GetDIBits(CFX_DIBitmap* bitmap,
+ int32_t left,
+ int32_t top,
+ void* pIccTransform,
+ FX_BOOL bDEdge) {
+ if (FXDC_PRINTER == _deviceClass) {
+ return FALSE;
+ }
+ if (bitmap->GetBPP() < 32) {
+ return FALSE;
+ }
+ if (!(_renderCaps | FXRC_GET_BITS)) {
+ return FALSE;
+ }
+ CGPoint pt = CGPointMake(left, top);
+ pt = CGPointApplyAffineTransform(pt, _foxitDevice2User);
+ CGAffineTransform ctm = CGContextGetCTM(_context);
+ pt.x *= FXSYS_fabs(ctm.a);
+ pt.y *= FXSYS_fabs(ctm.d);
+ CGImageRef image = CGBitmapContextCreateImage(_context);
+ if (NULL == image) {
+ return FALSE;
+ }
+ CGFloat width = (CGFloat)bitmap->GetWidth();
+ CGFloat height = (CGFloat)bitmap->GetHeight();
+ if (width + pt.x > _width) {
+ width -= (width + pt.x - _width);
+ }
+ if (height + pt.y > _height) {
+ height -= (height + pt.y - _height);
+ }
+ CGImageRef subImage = CGImageCreateWithImageInRect(
+ image, CGRectMake(pt.x, pt.y, width, height));
+ CGContextRef context = createContextWithBitmap(bitmap);
+ CGRect rect = CGContextGetClipBoundingBox(context);
+ CGContextClearRect(context, rect);
+ CGContextDrawImage(context, rect, subImage);
+ CGContextRelease(context);
+ CGImageRelease(subImage);
+ CGImageRelease(image);
+ if (bitmap->HasAlpha()) {
+ for (int row = 0; row < bitmap->GetHeight(); row++) {
+ uint8_t* pScanline = (uint8_t*)bitmap->GetScanline(row);
+ for (int col = 0; col < bitmap->GetWidth(); col++) {
+ if (pScanline[3] > 0) {
+ pScanline[0] = (pScanline[0] * 255.f / pScanline[3] + .5f);
+ pScanline[1] = (pScanline[1] * 255.f / pScanline[3] + .5f);
+ pScanline[2] = (pScanline[2] * 255.f / pScanline[3] + .5f);
}
+ pScanline += 4;
+ }
}
- return TRUE;
+ }
+ return TRUE;
}
-FX_BOOL CFX_QuartzDeviceDriver::SetDIBits(const CFX_DIBSource* pBitmap,
- FX_ARGB argb,
- const FX_RECT* srcRect,
- int dest_left,
- int dest_top,
- int blendType,
- int alphaFlag ,
- void* iccTransform )
-{
- SaveState();
- CGFloat src_left, src_top, src_width, src_height;
- if (srcRect) {
- src_left = srcRect->left;
- src_top = srcRect->top;
- src_width = srcRect->Width();
- src_height = srcRect->Height();
+FX_BOOL CFX_QuartzDeviceDriver::SetDIBits(const CFX_DIBSource* pBitmap,
+ FX_ARGB argb,
+ const FX_RECT* srcRect,
+ int dest_left,
+ int dest_top,
+ int blendType,
+ int alphaFlag,
+ void* iccTransform) {
+ SaveState();
+ CGFloat src_left, src_top, src_width, src_height;
+ if (srcRect) {
+ src_left = srcRect->left;
+ src_top = srcRect->top;
+ src_width = srcRect->Width();
+ src_height = srcRect->Height();
+ } else {
+ src_left = src_top = 0;
+ src_width = pBitmap->GetWidth();
+ src_height = pBitmap->GetHeight();
+ }
+ CGAffineTransform ctm = CGContextGetCTM(_context);
+ CGFloat scale_x = FXSYS_fabs(ctm.a);
+ CGFloat scale_y = FXSYS_fabs(ctm.d);
+ src_left /= scale_x;
+ src_top /= scale_y;
+ src_width /= scale_x;
+ src_height /= scale_y;
+ CGRect rect_fx = CGRectMake(dest_left, dest_top, src_width, src_height);
+ CGRect rect_usr = CGRectApplyAffineTransform(rect_fx, _foxitDevice2User);
+ CGContextBeginPath(_context);
+ CGContextAddRect(_context, rect_usr);
+ CGContextClip(_context);
+ rect_usr.size =
+ CGSizeMake(pBitmap->GetWidth() / scale_x, pBitmap->GetHeight() / scale_y);
+ rect_usr = CGRectOffset(rect_usr, -src_left, -src_top);
+ CG_SetImageTransform(dest_left, dest_top, src_width, src_height, &rect_usr);
+ CFX_DIBitmap* pBitmap1 = NULL;
+ if (pBitmap->IsAlphaMask()) {
+ if (pBitmap->GetBuffer()) {
+ pBitmap1 = (CFX_DIBitmap*)pBitmap;
} else {
- src_left = src_top = 0;
- src_width = pBitmap->GetWidth();
- src_height = pBitmap->GetHeight();
- }
- CGAffineTransform ctm = CGContextGetCTM(_context);
- CGFloat scale_x = FXSYS_fabs(ctm.a);
- CGFloat scale_y = FXSYS_fabs(ctm.d);
- src_left /= scale_x;
- src_top /= scale_y;
- src_width /= scale_x;
- src_height /= scale_y;
- CGRect rect_fx = CGRectMake(dest_left, dest_top, src_width, src_height);
- CGRect rect_usr = CGRectApplyAffineTransform(rect_fx, _foxitDevice2User);
- CGContextBeginPath(_context);
- CGContextAddRect(_context, rect_usr);
- CGContextClip(_context);
- rect_usr.size = CGSizeMake(pBitmap->GetWidth() / scale_x, pBitmap->GetHeight() / scale_y);
- rect_usr = CGRectOffset(rect_usr, -src_left, -src_top);
- CG_SetImageTransform(dest_left, dest_top, src_width, src_height, &rect_usr);
- CFX_DIBitmap* pBitmap1 = NULL;
- if (pBitmap->IsAlphaMask()) {
- if (pBitmap->GetBuffer()) {
- pBitmap1 = (CFX_DIBitmap*)pBitmap;
- } else {
- pBitmap1 = pBitmap->Clone();
- }
- if (NULL == pBitmap1) {
- RestoreState(FALSE);
- return FALSE;
- }
- CGDataProviderRef pBitmapProvider = CGDataProviderCreateWithData(NULL,
- pBitmap1->GetBuffer(),
- pBitmap1->GetPitch() * pBitmap1->GetHeight(),
- NULL);
- CGColorSpaceRef pColorSpace = CGColorSpaceCreateDeviceGray();
- CGBitmapInfo bitmapInfo = kCGImageAlphaNone | kCGBitmapByteOrderDefault;
- CGImageRef pImage = CGImageCreate(pBitmap1->GetWidth(),
- pBitmap1->GetHeight(),
- pBitmap1->GetBPP(),
- pBitmap1->GetBPP(),
- pBitmap1->GetPitch(),
- pColorSpace,
- bitmapInfo,
- pBitmapProvider, NULL, true,
- kCGRenderingIntentDefault);
- CGContextClipToMask(_context, rect_usr, pImage);
- CGContextSetRGBFillColor(_context,
- FXARGB_R(argb) / 255.f,
- FXARGB_G(argb) / 255.f,
- FXARGB_B(argb) / 255.f,
- FXARGB_A(argb) / 255.f);
- CGContextFillRect(_context, rect_usr);
- CGImageRelease(pImage);
- CGColorSpaceRelease(pColorSpace);
- CGDataProviderRelease(pBitmapProvider);
- if (pBitmap1 != pBitmap) {
- delete pBitmap1;
- }
- RestoreState(FALSE);
- return TRUE;
- }
- if (pBitmap->GetBPP() < 32) {
- pBitmap1 = pBitmap->CloneConvert(FXDIB_Rgb32);
- } else {
- if (pBitmap->GetBuffer()) {
- pBitmap1 = (CFX_DIBitmap*)pBitmap;
- } else {
- pBitmap1 = pBitmap->Clone();
- }
+ pBitmap1 = pBitmap->Clone();
}
if (NULL == pBitmap1) {
- RestoreState(FALSE);
- return FALSE;
- }
- if (pBitmap1->HasAlpha()) {
- if (pBitmap1 == pBitmap) {
- pBitmap1 = pBitmap->Clone();
- if (!pBitmap1) {
- RestoreState(FALSE);
- return FALSE;
- }
- }
- for (int row = 0; row < pBitmap1->GetHeight(); row ++) {
- uint8_t* pScanline = (uint8_t*)pBitmap1->GetScanline(row);
- for (int col = 0; col < pBitmap1->GetWidth(); col ++) {
- pScanline[0] = (uint8_t)(pScanline[0] * pScanline[3] / 255.f + .5f);
- pScanline[1] = (uint8_t)(pScanline[1] * pScanline[3] / 255.f + .5f);
- pScanline[2] = (uint8_t)(pScanline[2] * pScanline[3] / 255.f + .5f);
- pScanline += 4;
- }
- }
- }
- CGContextRef ctx = createContextWithBitmap(pBitmap1);
- CGImageRef image = CGBitmapContextCreateImage(ctx);
- int blend_mode = blendType;
- if (FXDIB_BLEND_HARDLIGHT == blendType) {
- blend_mode = kCGBlendModeSoftLight;
- } else if (FXDIB_BLEND_SOFTLIGHT == blendType) {
- blend_mode = kCGBlendModeHardLight;
- } else if (blendType >= FXDIB_BLEND_NONSEPARABLE && blendType <= FXDIB_BLEND_LUMINOSITY) {
- blend_mode = blendType - 9;
- } else if (blendType > FXDIB_BLEND_LUMINOSITY || blendType < 0) {
- blend_mode = kCGBlendModeNormal;
- }
- CGContextSetBlendMode(_context, (CGBlendMode)blend_mode);
- CGContextDrawImage(_context, rect_usr, image);
- CGImageRelease(image);
- CGContextRelease(ctx);
+ RestoreState(FALSE);
+ return FALSE;
+ }
+ CGDataProviderRef pBitmapProvider = CGDataProviderCreateWithData(
+ NULL, pBitmap1->GetBuffer(),
+ pBitmap1->GetPitch() * pBitmap1->GetHeight(), NULL);
+ CGColorSpaceRef pColorSpace = CGColorSpaceCreateDeviceGray();
+ CGBitmapInfo bitmapInfo = kCGImageAlphaNone | kCGBitmapByteOrderDefault;
+ CGImageRef pImage = CGImageCreate(
+ pBitmap1->GetWidth(), pBitmap1->GetHeight(), pBitmap1->GetBPP(),
+ pBitmap1->GetBPP(), pBitmap1->GetPitch(), pColorSpace, bitmapInfo,
+ pBitmapProvider, NULL, true, kCGRenderingIntentDefault);
+ CGContextClipToMask(_context, rect_usr, pImage);
+ CGContextSetRGBFillColor(_context, FXARGB_R(argb) / 255.f,
+ FXARGB_G(argb) / 255.f, FXARGB_B(argb) / 255.f,
+ FXARGB_A(argb) / 255.f);
+ CGContextFillRect(_context, rect_usr);
+ CGImageRelease(pImage);
+ CGColorSpaceRelease(pColorSpace);
+ CGDataProviderRelease(pBitmapProvider);
if (pBitmap1 != pBitmap) {
- delete pBitmap1;
+ delete pBitmap1;
}
RestoreState(FALSE);
return TRUE;
-}
-FX_BOOL CFX_QuartzDeviceDriver::StretchDIBits(const CFX_DIBSource* pBitmap,
- FX_ARGB argb,
- int dest_left,
- int dest_top,
- int dest_width,
- int dest_height,
- const FX_RECT* clipRect,
- FX_DWORD flags,
- int alphaFlag ,
- void* iccTransform ,
- int blend_type)
-{
- SaveState();
- if (clipRect) {
- CGContextBeginPath(_context);
- CGRect rect_clip = CGRectMake(clipRect->left, clipRect->top, clipRect->Width(), clipRect->Height());
- rect_clip = CGRectApplyAffineTransform(rect_clip, _foxitDevice2User);
- CGContextAddRect(_context, rect_clip);
- CGContextClip(_context);
- }
- CGRect rect = CGRectMake(dest_left, dest_top, dest_width, dest_height);
- rect = CGRectApplyAffineTransform(rect, _foxitDevice2User);
- if (FXDIB_BICUBIC_INTERPOL == flags) {
- CGContextSetInterpolationQuality(_context, kCGInterpolationHigh);
- } else if (FXDIB_DOWNSAMPLE == flags) {
- CGContextSetInterpolationQuality(_context, kCGInterpolationNone);
+ }
+ if (pBitmap->GetBPP() < 32) {
+ pBitmap1 = pBitmap->CloneConvert(FXDIB_Rgb32);
+ } else {
+ if (pBitmap->GetBuffer()) {
+ pBitmap1 = (CFX_DIBitmap*)pBitmap;
} else {
- CGContextSetInterpolationQuality(_context, kCGInterpolationMedium);
+ pBitmap1 = pBitmap->Clone();
}
- CG_SetImageTransform(dest_left, dest_top, dest_width, dest_height);
- CFX_DIBitmap* pBitmap1 = NULL;
- if (pBitmap->IsAlphaMask()) {
- if (pBitmap->GetBuffer()) {
- pBitmap1 = (CFX_DIBitmap*)pBitmap;
- } else {
- pBitmap1 = pBitmap->Clone();
- }
- if (NULL == pBitmap1) {
- RestoreState(FALSE);
- return FALSE;
- }
- CGDataProviderRef pBitmapProvider = CGDataProviderCreateWithData(NULL,
- pBitmap1->GetBuffer(),
- pBitmap1->GetPitch() * pBitmap1->GetHeight(),
- NULL);
- CGColorSpaceRef pColorSpace = CGColorSpaceCreateDeviceGray();
- CGBitmapInfo bitmapInfo = kCGImageAlphaNone | kCGBitmapByteOrderDefault;
- CGImageRef pImage = CGImageCreate(pBitmap1->GetWidth(),
- pBitmap1->GetHeight(),
- pBitmap1->GetBPP(),
- pBitmap1->GetBPP(),
- pBitmap1->GetPitch(),
- pColorSpace,
- bitmapInfo,
- pBitmapProvider, NULL, true,
- kCGRenderingIntentDefault);
- CGContextClipToMask(_context, rect, pImage);
- CGContextSetRGBFillColor(_context,
- FXARGB_R(argb) / 255.f,
- FXARGB_G(argb) / 255.f,
- FXARGB_B(argb) / 255.f,
- FXARGB_A(argb) / 255.f);
- CGContextFillRect(_context, rect);
- CGImageRelease(pImage);
- CGColorSpaceRelease(pColorSpace);
- CGDataProviderRelease(pBitmapProvider);
- if (pBitmap1 != pBitmap) {
- delete pBitmap1;
- }
+ }
+ if (NULL == pBitmap1) {
+ RestoreState(FALSE);
+ return FALSE;
+ }
+ if (pBitmap1->HasAlpha()) {
+ if (pBitmap1 == pBitmap) {
+ pBitmap1 = pBitmap->Clone();
+ if (!pBitmap1) {
RestoreState(FALSE);
- return TRUE;
- }
- if (pBitmap->GetBPP() < 32) {
- pBitmap1 = pBitmap->CloneConvert(FXDIB_Rgb32);
+ return FALSE;
+ }
+ }
+ for (int row = 0; row < pBitmap1->GetHeight(); row++) {
+ uint8_t* pScanline = (uint8_t*)pBitmap1->GetScanline(row);
+ for (int col = 0; col < pBitmap1->GetWidth(); col++) {
+ pScanline[0] = (uint8_t)(pScanline[0] * pScanline[3] / 255.f + .5f);
+ pScanline[1] = (uint8_t)(pScanline[1] * pScanline[3] / 255.f + .5f);
+ pScanline[2] = (uint8_t)(pScanline[2] * pScanline[3] / 255.f + .5f);
+ pScanline += 4;
+ }
+ }
+ }
+ CGContextRef ctx = createContextWithBitmap(pBitmap1);
+ CGImageRef image = CGBitmapContextCreateImage(ctx);
+ int blend_mode = blendType;
+ if (FXDIB_BLEND_HARDLIGHT == blendType) {
+ blend_mode = kCGBlendModeSoftLight;
+ } else if (FXDIB_BLEND_SOFTLIGHT == blendType) {
+ blend_mode = kCGBlendModeHardLight;
+ } else if (blendType >= FXDIB_BLEND_NONSEPARABLE &&
+ blendType <= FXDIB_BLEND_LUMINOSITY) {
+ blend_mode = blendType - 9;
+ } else if (blendType > FXDIB_BLEND_LUMINOSITY || blendType < 0) {
+ blend_mode = kCGBlendModeNormal;
+ }
+ CGContextSetBlendMode(_context, (CGBlendMode)blend_mode);
+ CGContextDrawImage(_context, rect_usr, image);
+ CGImageRelease(image);
+ CGContextRelease(ctx);
+ if (pBitmap1 != pBitmap) {
+ delete pBitmap1;
+ }
+ RestoreState(FALSE);
+ return TRUE;
+}
+FX_BOOL CFX_QuartzDeviceDriver::StretchDIBits(const CFX_DIBSource* pBitmap,
+ FX_ARGB argb,
+ int dest_left,
+ int dest_top,
+ int dest_width,
+ int dest_height,
+ const FX_RECT* clipRect,
+ FX_DWORD flags,
+ int alphaFlag,
+ void* iccTransform,
+ int blend_type) {
+ SaveState();
+ if (clipRect) {
+ CGContextBeginPath(_context);
+ CGRect rect_clip = CGRectMake(clipRect->left, clipRect->top,
+ clipRect->Width(), clipRect->Height());
+ rect_clip = CGRectApplyAffineTransform(rect_clip, _foxitDevice2User);
+ CGContextAddRect(_context, rect_clip);
+ CGContextClip(_context);
+ }
+ CGRect rect = CGRectMake(dest_left, dest_top, dest_width, dest_height);
+ rect = CGRectApplyAffineTransform(rect, _foxitDevice2User);
+ if (FXDIB_BICUBIC_INTERPOL == flags) {
+ CGContextSetInterpolationQuality(_context, kCGInterpolationHigh);
+ } else if (FXDIB_DOWNSAMPLE == flags) {
+ CGContextSetInterpolationQuality(_context, kCGInterpolationNone);
+ } else {
+ CGContextSetInterpolationQuality(_context, kCGInterpolationMedium);
+ }
+ CG_SetImageTransform(dest_left, dest_top, dest_width, dest_height);
+ CFX_DIBitmap* pBitmap1 = NULL;
+ if (pBitmap->IsAlphaMask()) {
+ if (pBitmap->GetBuffer()) {
+ pBitmap1 = (CFX_DIBitmap*)pBitmap;
} else {
- if (pBitmap->GetBuffer()) {
- pBitmap1 = (CFX_DIBitmap*)pBitmap;
- } else {
- pBitmap1 = pBitmap->Clone();
- }
+ pBitmap1 = pBitmap->Clone();
}
if (NULL == pBitmap1) {
- RestoreState(FALSE);
- return FALSE;
- }
- if (pBitmap1->HasAlpha()) {
- if (pBitmap1 == pBitmap) {
- pBitmap1 = pBitmap->Clone();
- if (!pBitmap1) {
- RestoreState(FALSE);
- return FALSE;
- }
- }
- for (int row = 0; row < pBitmap1->GetHeight(); row ++) {
- uint8_t* pScanline = (uint8_t*)pBitmap1->GetScanline(row);
- for (int col = 0; col < pBitmap1->GetWidth(); col ++) {
- pScanline[0] = (uint8_t)(pScanline[0] * pScanline[3] / 255.f + .5f);
- pScanline[1] = (uint8_t)(pScanline[1] * pScanline[3] / 255.f + .5f);
- pScanline[2] = (uint8_t)(pScanline[2] * pScanline[3] / 255.f + .5f);
- pScanline += 4;
- }
- }
- }
- CGContextRef ctx = createContextWithBitmap(pBitmap1);
- CGImageRef image = CGBitmapContextCreateImage(ctx);
- CGContextDrawImage(_context, rect, image);
- CGImageRelease(image);
- CGContextRelease(ctx);
+ RestoreState(FALSE);
+ return FALSE;
+ }
+ CGDataProviderRef pBitmapProvider = CGDataProviderCreateWithData(
+ NULL, pBitmap1->GetBuffer(),
+ pBitmap1->GetPitch() * pBitmap1->GetHeight(), NULL);
+ CGColorSpaceRef pColorSpace = CGColorSpaceCreateDeviceGray();
+ CGBitmapInfo bitmapInfo = kCGImageAlphaNone | kCGBitmapByteOrderDefault;
+ CGImageRef pImage = CGImageCreate(
+ pBitmap1->GetWidth(), pBitmap1->GetHeight(), pBitmap1->GetBPP(),
+ pBitmap1->GetBPP(), pBitmap1->GetPitch(), pColorSpace, bitmapInfo,
+ pBitmapProvider, NULL, true, kCGRenderingIntentDefault);
+ CGContextClipToMask(_context, rect, pImage);
+ CGContextSetRGBFillColor(_context, FXARGB_R(argb) / 255.f,
+ FXARGB_G(argb) / 255.f, FXARGB_B(argb) / 255.f,
+ FXARGB_A(argb) / 255.f);
+ CGContextFillRect(_context, rect);
+ CGImageRelease(pImage);
+ CGColorSpaceRelease(pColorSpace);
+ CGDataProviderRelease(pBitmapProvider);
if (pBitmap1 != pBitmap) {
- delete pBitmap1;
+ delete pBitmap1;
}
RestoreState(FALSE);
return TRUE;
-}
-FX_BOOL CFX_QuartzDeviceDriver::CG_DrawGlypRun(int nChars,
- const FXTEXT_CHARPOS* pCharPos,
- CFX_Font* pFont,
- CFX_FontCache* pCache,
- const CFX_AffineMatrix* pGlyphMatrix,
- const CFX_AffineMatrix* pObject2Device,
- FX_FLOAT font_size,
- FX_DWORD argb,
- int alpha_flag,
- void* pIccTransform)
-{
- if (nChars == 0) {
- return TRUE;
- }
- CQuartz2D& quartz2d = ((CApplePlatform *) CFX_GEModule::Get()->GetPlatformData())->_quartz2d;
- if (!pFont->m_pPlatformFont) {
- if (pFont->GetPsName() == CFX_WideString::FromLocal("DFHeiStd-W5")) {
- return FALSE;
- }
- pFont->m_pPlatformFont = quartz2d.CreateFont(pFont->m_pFontData, pFont->m_dwSize);
- if (NULL == pFont->m_pPlatformFont) {
- return FALSE;
- }
- }
- CFX_FixedBufGrow<FX_WORD, 32> glyph_indices(nChars);
- CFX_FixedBufGrow<CGPoint, 32> glyph_positions(nChars);
- for (int i = 0; i < nChars; i++ ) {
- glyph_indices[i] = pCharPos[i].m_ExtGID;
- glyph_positions[i].x = pCharPos[i].m_OriginX;
- glyph_positions[i].y = pCharPos[i].m_OriginY;
- }
- CFX_AffineMatrix text_matrix;
- if (pObject2Device) {
- text_matrix.Concat(*pObject2Device);
- }
- CGAffineTransform matrix_cg = CGAffineTransformMake(text_matrix.a,
- text_matrix.b,
- text_matrix.c,
- text_matrix.d,
- text_matrix.e,
- text_matrix.f);
- matrix_cg = CGAffineTransformConcat(matrix_cg, _foxitDevice2User);
- CGContextSetTextMatrix(_context, matrix_cg);
- CGContextSetFont(_context, (CGFontRef)pFont->m_pPlatformFont);
- CGContextSetFontSize(_context, FXSYS_fabs(font_size));
- int32_t a, r, g, b;
- ArgbDecode(argb, a, r, g, b);
- CGContextSetRGBFillColor(_context,
- r / 255.f,
- g / 255.f,
- b / 255.f,
- a / 255.f);
- SaveState();
- if (pGlyphMatrix) {
- CGPoint origin = CGPointMake( glyph_positions[0].x, glyph_positions[0].y);
- origin = CGPointApplyAffineTransform(origin, matrix_cg);
- CGContextTranslateCTM(_context, origin.x, origin.y);
- CGAffineTransform glyph_matrix = CGAffineTransformMake(pGlyphMatrix->a,
- pGlyphMatrix->b,
- pGlyphMatrix->c,
- pGlyphMatrix->d,
- pGlyphMatrix->e,
- pGlyphMatrix->f);
- if (_foxitDevice2User.d < 0) {
- glyph_matrix = CGAffineTransformInvert(glyph_matrix);
- }
- CGContextConcatCTM(_context, glyph_matrix);
- CGContextTranslateCTM(_context, -origin.x, -origin.y);
+ }
+ if (pBitmap->GetBPP() < 32) {
+ pBitmap1 = pBitmap->CloneConvert(FXDIB_Rgb32);
+ } else {
+ if (pBitmap->GetBuffer()) {
+ pBitmap1 = (CFX_DIBitmap*)pBitmap;
+ } else {
+ pBitmap1 = pBitmap->Clone();
}
- CGContextShowGlyphsAtPositions(_context,
- (CGGlyph*)glyph_indices,
- glyph_positions,
- nChars);
+ }
+ if (NULL == pBitmap1) {
RestoreState(FALSE);
+ return FALSE;
+ }
+ if (pBitmap1->HasAlpha()) {
+ if (pBitmap1 == pBitmap) {
+ pBitmap1 = pBitmap->Clone();
+ if (!pBitmap1) {
+ RestoreState(FALSE);
+ return FALSE;
+ }
+ }
+ for (int row = 0; row < pBitmap1->GetHeight(); row++) {
+ uint8_t* pScanline = (uint8_t*)pBitmap1->GetScanline(row);
+ for (int col = 0; col < pBitmap1->GetWidth(); col++) {
+ pScanline[0] = (uint8_t)(pScanline[0] * pScanline[3] / 255.f + .5f);
+ pScanline[1] = (uint8_t)(pScanline[1] * pScanline[3] / 255.f + .5f);
+ pScanline[2] = (uint8_t)(pScanline[2] * pScanline[3] / 255.f + .5f);
+ pScanline += 4;
+ }
+ }
+ }
+ CGContextRef ctx = createContextWithBitmap(pBitmap1);
+ CGImageRef image = CGBitmapContextCreateImage(ctx);
+ CGContextDrawImage(_context, rect, image);
+ CGImageRelease(image);
+ CGContextRelease(ctx);
+ if (pBitmap1 != pBitmap) {
+ delete pBitmap1;
+ }
+ RestoreState(FALSE);
+ return TRUE;
+}
+FX_BOOL CFX_QuartzDeviceDriver::CG_DrawGlypRun(
+ int nChars,
+ const FXTEXT_CHARPOS* pCharPos,
+ CFX_Font* pFont,
+ CFX_FontCache* pCache,
+ const CFX_AffineMatrix* pGlyphMatrix,
+ const CFX_AffineMatrix* pObject2Device,
+ FX_FLOAT font_size,
+ FX_DWORD argb,
+ int alpha_flag,
+ void* pIccTransform) {
+ if (nChars == 0) {
return TRUE;
+ }
+ CQuartz2D& quartz2d =
+ ((CApplePlatform*)CFX_GEModule::Get()->GetPlatformData())->_quartz2d;
+ if (!pFont->m_pPlatformFont) {
+ if (pFont->GetPsName() == CFX_WideString::FromLocal("DFHeiStd-W5")) {
+ return FALSE;
+ }
+ pFont->m_pPlatformFont =
+ quartz2d.CreateFont(pFont->m_pFontData, pFont->m_dwSize);
+ if (NULL == pFont->m_pPlatformFont) {
+ return FALSE;
+ }
+ }
+ CFX_FixedBufGrow<FX_WORD, 32> glyph_indices(nChars);
+ CFX_FixedBufGrow<CGPoint, 32> glyph_positions(nChars);
+ for (int i = 0; i < nChars; i++) {
+ glyph_indices[i] = pCharPos[i].m_ExtGID;
+ glyph_positions[i].x = pCharPos[i].m_OriginX;
+ glyph_positions[i].y = pCharPos[i].m_OriginY;
+ }
+ CFX_AffineMatrix text_matrix;
+ if (pObject2Device) {
+ text_matrix.Concat(*pObject2Device);
+ }
+ CGAffineTransform matrix_cg =
+ CGAffineTransformMake(text_matrix.a, text_matrix.b, text_matrix.c,
+ text_matrix.d, text_matrix.e, text_matrix.f);
+ matrix_cg = CGAffineTransformConcat(matrix_cg, _foxitDevice2User);
+ CGContextSetTextMatrix(_context, matrix_cg);
+ CGContextSetFont(_context, (CGFontRef)pFont->m_pPlatformFont);
+ CGContextSetFontSize(_context, FXSYS_fabs(font_size));
+ int32_t a, r, g, b;
+ ArgbDecode(argb, a, r, g, b);
+ CGContextSetRGBFillColor(_context, r / 255.f, g / 255.f, b / 255.f,
+ a / 255.f);
+ SaveState();
+ if (pGlyphMatrix) {
+ CGPoint origin = CGPointMake(glyph_positions[0].x, glyph_positions[0].y);
+ origin = CGPointApplyAffineTransform(origin, matrix_cg);
+ CGContextTranslateCTM(_context, origin.x, origin.y);
+ CGAffineTransform glyph_matrix = CGAffineTransformMake(
+ pGlyphMatrix->a, pGlyphMatrix->b, pGlyphMatrix->c, pGlyphMatrix->d,
+ pGlyphMatrix->e, pGlyphMatrix->f);
+ if (_foxitDevice2User.d < 0) {
+ glyph_matrix = CGAffineTransformInvert(glyph_matrix);
+ }
+ CGContextConcatCTM(_context, glyph_matrix);
+ CGContextTranslateCTM(_context, -origin.x, -origin.y);
+ }
+ CGContextShowGlyphsAtPositions(_context, (CGGlyph*)glyph_indices,
+ glyph_positions, nChars);
+ RestoreState(FALSE);
+ return TRUE;
}
-FX_BOOL CFX_QuartzDeviceDriver::DrawDeviceText(int nChars,
- const FXTEXT_CHARPOS* pCharPos,
- CFX_Font* pFont,
- CFX_FontCache* pCache,
- const CFX_AffineMatrix* pObject2Device,
- FX_FLOAT font_size,
- FX_DWORD color,
- int alpha_flag ,
- void* pIccTransform)
-{
- if (NULL == pFont || NULL == _context) {
- return FALSE;
- }
- FX_BOOL bBold = pFont->IsBold();
- if (!bBold && pFont->GetSubstFont() &&
- pFont->GetSubstFont()->m_Weight >= 500 &&
- pFont->GetSubstFont()->m_Weight <= 600) {
- return FALSE;
- }
- SaveState();
- CGContextSetTextDrawingMode(_context, kCGTextFillClip);
- FX_BOOL ret = FALSE;
- int32_t i = 0;
- while (i < nChars) {
- if (pCharPos[i].m_bGlyphAdjust || font_size < 0) {
- if (i > 0) {
- ret = CG_DrawGlypRun(i, pCharPos, pFont, pCache, NULL, pObject2Device, font_size, color, alpha_flag, pIccTransform);
- if (!ret) {
- RestoreState(FALSE);
- return ret;
- }
- }
- const FXTEXT_CHARPOS* char_pos = pCharPos + i;
- CFX_AffineMatrix glphy_matrix;
- if (font_size < 0) {
- glphy_matrix.Concat(-1, 0, 0, -1, 0, 0);
- }
- if (char_pos->m_bGlyphAdjust) {
- glphy_matrix.Concat(char_pos->m_AdjustMatrix[0],
- char_pos->m_AdjustMatrix[1],
- char_pos->m_AdjustMatrix[2],
- char_pos->m_AdjustMatrix[3], 0, 0);
- }
- ret = CG_DrawGlypRun(1, char_pos, pFont, pCache, &glphy_matrix, pObject2Device, font_size, color, alpha_flag, pIccTransform);
- if (!ret) {
- RestoreState(FALSE);
- return ret;
- }
- i ++;
- pCharPos += i;
- nChars -= i;
- i = 0;
- } else {
- i ++;
+FX_BOOL CFX_QuartzDeviceDriver::DrawDeviceText(
+ int nChars,
+ const FXTEXT_CHARPOS* pCharPos,
+ CFX_Font* pFont,
+ CFX_FontCache* pCache,
+ const CFX_AffineMatrix* pObject2Device,
+ FX_FLOAT font_size,
+ FX_DWORD color,
+ int alpha_flag,
+ void* pIccTransform) {
+ if (NULL == pFont || NULL == _context) {
+ return FALSE;
+ }
+ FX_BOOL bBold = pFont->IsBold();
+ if (!bBold && pFont->GetSubstFont() &&
+ pFont->GetSubstFont()->m_Weight >= 500 &&
+ pFont->GetSubstFont()->m_Weight <= 600) {
+ return FALSE;
+ }
+ SaveState();
+ CGContextSetTextDrawingMode(_context, kCGTextFillClip);
+ FX_BOOL ret = FALSE;
+ int32_t i = 0;
+ while (i < nChars) {
+ if (pCharPos[i].m_bGlyphAdjust || font_size < 0) {
+ if (i > 0) {
+ ret = CG_DrawGlypRun(i, pCharPos, pFont, pCache, NULL, pObject2Device,
+ font_size, color, alpha_flag, pIccTransform);
+ if (!ret) {
+ RestoreState(FALSE);
+ return ret;
}
- }
- if (i > 0) {
- ret = CG_DrawGlypRun(i, pCharPos, pFont, pCache, NULL, pObject2Device, font_size, color, alpha_flag, pIccTransform);
- }
- RestoreState(FALSE);
- return ret;
+ }
+ const FXTEXT_CHARPOS* char_pos = pCharPos + i;
+ CFX_AffineMatrix glphy_matrix;
+ if (font_size < 0) {
+ glphy_matrix.Concat(-1, 0, 0, -1, 0, 0);
+ }
+ if (char_pos->m_bGlyphAdjust) {
+ glphy_matrix.Concat(
+ char_pos->m_AdjustMatrix[0], char_pos->m_AdjustMatrix[1],
+ char_pos->m_AdjustMatrix[2], char_pos->m_AdjustMatrix[3], 0, 0);
+ }
+ ret = CG_DrawGlypRun(1, char_pos, pFont, pCache, &glphy_matrix,
+ pObject2Device, font_size, color, alpha_flag,
+ pIccTransform);
+ if (!ret) {
+ RestoreState(FALSE);
+ return ret;
+ }
+ i++;
+ pCharPos += i;
+ nChars -= i;
+ i = 0;
+ } else {
+ i++;
+ }
+ }
+ if (i > 0) {
+ ret = CG_DrawGlypRun(i, pCharPos, pFont, pCache, NULL, pObject2Device,
+ font_size, color, alpha_flag, pIccTransform);
+ }
+ RestoreState(FALSE);
+ return ret;
}
-void CFX_QuartzDeviceDriver::setStrokeInfo(const CFX_GraphStateData* graphState, FX_ARGB argb, FX_FLOAT lineWidth)
-{
- if (NULL == graphState) {
- return;
- }
- CGContextSetLineWidth(_context, lineWidth);
- CGLineCap cap;
- switch (graphState->m_LineCap) {
- case CFX_GraphStateData::LineCapRound: {
- cap = kCGLineCapRound;
- break;
- }
- case CFX_GraphStateData::LineCapSquare: {
- cap = kCGLineCapSquare;
- break;
- }
- case CFX_GraphStateData::LineCapButt:
- default: {
- cap = kCGLineCapButt;
- }
+void CFX_QuartzDeviceDriver::setStrokeInfo(const CFX_GraphStateData* graphState,
+ FX_ARGB argb,
+ FX_FLOAT lineWidth) {
+ if (NULL == graphState) {
+ return;
+ }
+ CGContextSetLineWidth(_context, lineWidth);
+ CGLineCap cap;
+ switch (graphState->m_LineCap) {
+ case CFX_GraphStateData::LineCapRound: {
+ cap = kCGLineCapRound;
+ break;
+ }
+ case CFX_GraphStateData::LineCapSquare: {
+ cap = kCGLineCapSquare;
+ break;
+ }
+ case CFX_GraphStateData::LineCapButt:
+ default: { cap = kCGLineCapButt; }
+ }
+ CGContextSetLineCap(_context, cap);
+ CGLineJoin join;
+ switch (graphState->m_LineJoin) {
+ case CFX_GraphStateData::LineJoinRound: {
+ join = kCGLineJoinRound;
+ break;
+ }
+ case CFX_GraphStateData::LineJoinBevel: {
+ join = kCGLineJoinBevel;
+ break;
+ }
+ case CFX_GraphStateData::LineJoinMiter:
+ default: { join = kCGLineJoinMiter; }
+ }
+ CGContextSetLineJoin(_context, join);
+ if (graphState->m_DashCount) {
+#if CGFLOAT_IS_DOUBLE
+ CGFloat* dashArray = new CGFloat[graphState->m_DashCount];
+ if (!dashArray) {
+ return;
}
- CGContextSetLineCap(_context, cap);
- CGLineJoin join;
- switch (graphState->m_LineJoin) {
- case CFX_GraphStateData::LineJoinRound: {
- join = kCGLineJoinRound;
- break;
- }
- case CFX_GraphStateData::LineJoinBevel: {
- join = kCGLineJoinBevel;
- break;
- }
- case CFX_GraphStateData::LineJoinMiter:
- default: {
- join = kCGLineJoinMiter;
- }
+ for (int index = 0; index < graphState->m_DashCount; ++index) {
+ dashArray[index] = graphState->m_DashArray[index];
}
- CGContextSetLineJoin(_context, join);
- if (graphState->m_DashCount) {
-#if CGFLOAT_IS_DOUBLE
- CGFloat* dashArray = new CGFloat[graphState->m_DashCount];
- if (!dashArray) {
- return;
- }
- for (int index = 0; index < graphState->m_DashCount; ++index) {
- dashArray[index] = graphState->m_DashArray[index];
- }
#else
- CGFloat* dashArray = (CGFloat*)graphState->m_DashArray;
+ CGFloat* dashArray = (CGFloat*)graphState->m_DashArray;
#endif
- CGContextSetLineDash(_context, graphState->m_DashPhase, dashArray, graphState->m_DashCount);
+ CGContextSetLineDash(_context, graphState->m_DashPhase, dashArray,
+ graphState->m_DashCount);
#if CGFLOAT_IS_DOUBLE
- delete[] dashArray;
+ delete[] dashArray;
#endif
- }
- int32_t a, r, g, b;
- ArgbDecode(argb, a, r, g, b);
- CGContextSetRGBStrokeColor(_context,
- r / 255.f,
- g / 255.f,
- b / 255.f,
- a / 255.f);
-}
-void CFX_QuartzDeviceDriver::setFillInfo(FX_ARGB argb)
-{
- int32_t a, r, g, b;
- ArgbDecode(argb, a, r, g, b);
- CGContextSetRGBFillColor(_context,
- r / 255.f,
- g / 255.f,
- b / 255.f,
+ }
+ int32_t a, r, g, b;
+ ArgbDecode(argb, a, r, g, b);
+ CGContextSetRGBStrokeColor(_context, r / 255.f, g / 255.f, b / 255.f,
a / 255.f);
}
-void CFX_QuartzDeviceDriver::setPathToContext(const CFX_PathData* pathData)
-{
- int32_t count = pathData->GetPointCount();
- FX_PATHPOINT* points = pathData->GetPoints();
- CGContextBeginPath(_context);
- for (int32_t i = 0; i < count; i ++) {
- switch (points[i].m_Flag & FXPT_TYPE) {
- case FXPT_MOVETO:
- CGContextMoveToPoint(_context, points[i].m_PointX, points[i].m_PointY);
- break;
- case FXPT_LINETO:
- CGContextAddLineToPoint(_context, points[i].m_PointX, points[i].m_PointY);
- break;
- case FXPT_BEZIERTO: {
- CGContextAddCurveToPoint(_context,
- points[i].m_PointX, points[i].m_PointY,
- points[i + 1].m_PointX, points[i + 1].m_PointY,
- points[i + 2].m_PointX, points[i + 2].m_PointY);
- i += 2;
- }
- }
- if (points[i].m_Flag & FXPT_CLOSEFIGURE) {
- CGContextClosePath(_context);
- }
- }
+void CFX_QuartzDeviceDriver::setFillInfo(FX_ARGB argb) {
+ int32_t a, r, g, b;
+ ArgbDecode(argb, a, r, g, b);
+ CGContextSetRGBFillColor(_context, r / 255.f, g / 255.f, b / 255.f,
+ a / 255.f);
}
-void CFX_QuartzDeviceDriver::CG_SetImageTransform(int dest_left, int dest_top, int dest_width, int dest_height,
- CGRect* rect )
-{
- int flip_y = _foxitDevice2User.d * dest_height < 0 ? 1 : -1;
- int flip_x = _foxitDevice2User.a * dest_width > 0 ? 1 : -1;
- if (flip_y < 0 || flip_x < 0) {
- if (dest_height < 0) {
- dest_height = -dest_height;
- dest_top -= dest_height;
- }
- CGRect rt = CGRectApplyAffineTransform(CGRectMake(dest_left, dest_top, dest_width, dest_height), _foxitDevice2User);
- CGFloat offset_x = (rt.origin.x) + rt.size.width / 2.f,
- offset_y = (rt.origin.y) + rt.size.height / 2.f;
- CGAffineTransform transform = CGAffineTransformIdentity;
- transform = CGAffineTransformConcat(transform, CGAffineTransformMake(1, 0, 0, 1, -offset_x, -offset_y));
- transform = CGAffineTransformConcat(transform, CGAffineTransformMake(flip_x, 0, 0, flip_y, 0, 0));
- transform = CGAffineTransformConcat(transform, CGAffineTransformMake(1, 0, 0, 1, offset_x, offset_y));
- CGContextConcatCTM(_context, transform);
- if (rect) {
- *rect = CGRectApplyAffineTransform(*rect, transform);
- }
- }
+void CFX_QuartzDeviceDriver::setPathToContext(const CFX_PathData* pathData) {
+ int32_t count = pathData->GetPointCount();
+ FX_PATHPOINT* points = pathData->GetPoints();
+ CGContextBeginPath(_context);
+ for (int32_t i = 0; i < count; i++) {
+ switch (points[i].m_Flag & FXPT_TYPE) {
+ case FXPT_MOVETO:
+ CGContextMoveToPoint(_context, points[i].m_PointX, points[i].m_PointY);
+ break;
+ case FXPT_LINETO:
+ CGContextAddLineToPoint(_context, points[i].m_PointX,
+ points[i].m_PointY);
+ break;
+ case FXPT_BEZIERTO: {
+ CGContextAddCurveToPoint(_context, points[i].m_PointX,
+ points[i].m_PointY, points[i + 1].m_PointX,
+ points[i + 1].m_PointY, points[i + 2].m_PointX,
+ points[i + 2].m_PointY);
+ i += 2;
+ }
+ }
+ if (points[i].m_Flag & FXPT_CLOSEFIGURE) {
+ CGContextClosePath(_context);
+ }
+ }
}
-void CFX_QuartzDeviceDriver::ClearDriver()
-{
- if (NULL == _context) {
- return;
- }
- for (int i = 0; i < m_saveCount; ++i) {
- CGContextRestoreGState(_context);
- }
- m_saveCount = 0;
- if (_context) {
- CGContextRelease(_context);
- }
+void CFX_QuartzDeviceDriver::CG_SetImageTransform(int dest_left,
+ int dest_top,
+ int dest_width,
+ int dest_height,
+ CGRect* rect) {
+ int flip_y = _foxitDevice2User.d * dest_height < 0 ? 1 : -1;
+ int flip_x = _foxitDevice2User.a * dest_width > 0 ? 1 : -1;
+ if (flip_y < 0 || flip_x < 0) {
+ if (dest_height < 0) {
+ dest_height = -dest_height;
+ dest_top -= dest_height;
+ }
+ CGRect rt = CGRectApplyAffineTransform(
+ CGRectMake(dest_left, dest_top, dest_width, dest_height),
+ _foxitDevice2User);
+ CGFloat offset_x = (rt.origin.x) + rt.size.width / 2.f,
+ offset_y = (rt.origin.y) + rt.size.height / 2.f;
+ CGAffineTransform transform = CGAffineTransformIdentity;
+ transform = CGAffineTransformConcat(
+ transform, CGAffineTransformMake(1, 0, 0, 1, -offset_x, -offset_y));
+ transform = CGAffineTransformConcat(
+ transform, CGAffineTransformMake(flip_x, 0, 0, flip_y, 0, 0));
+ transform = CGAffineTransformConcat(
+ transform, CGAffineTransformMake(1, 0, 0, 1, offset_x, offset_y));
+ CGContextConcatCTM(_context, transform);
+ if (rect) {
+ *rect = CGRectApplyAffineTransform(*rect, transform);
+ }
+ }
}
-CFX_QuartzDevice::CFX_QuartzDevice()
-{
- m_bOwnedBitmap = FALSE;
- m_pContext = NULL;
+void CFX_QuartzDeviceDriver::ClearDriver() {
+ if (NULL == _context) {
+ return;
+ }
+ for (int i = 0; i < m_saveCount; ++i) {
+ CGContextRestoreGState(_context);
+ }
+ m_saveCount = 0;
+ if (_context) {
+ CGContextRelease(_context);
+ }
}
-CFX_QuartzDevice::~CFX_QuartzDevice()
-{
- if (m_pContext) {
- CGContextRelease(m_pContext);
- }
- if (m_bOwnedBitmap) {
- delete GetBitmap();
- }
+CFX_QuartzDevice::CFX_QuartzDevice() {
+ m_bOwnedBitmap = FALSE;
+ m_pContext = NULL;
}
-CGContextRef CFX_QuartzDevice::GetContext()
-{
- return m_pContext;
+CFX_QuartzDevice::~CFX_QuartzDevice() {
+ if (m_pContext) {
+ CGContextRelease(m_pContext);
+ }
+ if (m_bOwnedBitmap) {
+ delete GetBitmap();
+ }
}
-FX_BOOL CFX_QuartzDevice::Attach(CGContextRef context, int32_t nDeviceClass)
-{
- if (m_pContext) {
- CGContextRelease(m_pContext);
- }
- m_pContext = context;
- CGContextRetain(m_pContext);
- IFX_RenderDeviceDriver* pDriver = new CFX_QuartzDeviceDriver(m_pContext, nDeviceClass);
- SetDeviceDriver(pDriver);
- return TRUE;
+CGContextRef CFX_QuartzDevice::GetContext() {
+ return m_pContext;
}
-FX_BOOL CFX_QuartzDevice::Attach(CFX_DIBitmap* pBitmap)
-{
- SetBitmap(pBitmap);
- m_pContext = createContextWithBitmap(pBitmap);
- if (NULL == m_pContext) {
- return FALSE;
- }
- IFX_RenderDeviceDriver* pDriver = new CFX_QuartzDeviceDriver(m_pContext, FXDC_DISPLAY);
- SetDeviceDriver(pDriver);
- return TRUE;
+FX_BOOL CFX_QuartzDevice::Attach(CGContextRef context, int32_t nDeviceClass) {
+ if (m_pContext) {
+ CGContextRelease(m_pContext);
+ }
+ m_pContext = context;
+ CGContextRetain(m_pContext);
+ IFX_RenderDeviceDriver* pDriver =
+ new CFX_QuartzDeviceDriver(m_pContext, nDeviceClass);
+ SetDeviceDriver(pDriver);
+ return TRUE;
}
-FX_BOOL CFX_QuartzDevice::Create(int32_t width, int32_t height, FXDIB_Format format)
-{
- if ((uint8_t)format < 32) {
- return FALSE;
- }
- CFX_DIBitmap* pBitmap = new CFX_DIBitmap;
- if (!pBitmap->Create(width, height, format)) {
- delete pBitmap;
- return FALSE;
- }
- m_bOwnedBitmap = TRUE;
- return Attach(pBitmap);
+FX_BOOL CFX_QuartzDevice::Attach(CFX_DIBitmap* pBitmap) {
+ SetBitmap(pBitmap);
+ m_pContext = createContextWithBitmap(pBitmap);
+ if (NULL == m_pContext) {
+ return FALSE;
+ }
+ IFX_RenderDeviceDriver* pDriver =
+ new CFX_QuartzDeviceDriver(m_pContext, FXDC_DISPLAY);
+ SetDeviceDriver(pDriver);
+ return TRUE;
+}
+FX_BOOL CFX_QuartzDevice::Create(int32_t width,
+ int32_t height,
+ FXDIB_Format format) {
+ if ((uint8_t)format < 32) {
+ return FALSE;
+ }
+ CFX_DIBitmap* pBitmap = new CFX_DIBitmap;
+ if (!pBitmap->Create(width, height, format)) {
+ delete pBitmap;
+ return FALSE;
+ }
+ m_bOwnedBitmap = TRUE;
+ return Attach(pBitmap);
}
#endif // _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
diff --git a/core/src/fxge/dib/dib_int.h b/core/src/fxge/dib/dib_int.h
index 825cabe1d1..74e77d46da 100644
--- a/core/src/fxge/dib/dib_int.h
+++ b/core/src/fxge/dib/dib_int.h
@@ -7,87 +7,88 @@
#ifndef CORE_SRC_FXGE_DIB_DIB_INT_H_
#define CORE_SRC_FXGE_DIB_DIB_INT_H_
-class CPDF_FixedMatrix
-{
-public:
- CPDF_FixedMatrix(const CFX_AffineMatrix& src, int bits)
- {
- base = 1 << bits;
- a = FXSYS_round(src.a * base);
- b = FXSYS_round(src.b * base);
- c = FXSYS_round(src.c * base);
- d = FXSYS_round(src.d * base);
- e = FXSYS_round(src.e * base);
- f = FXSYS_round(src.f * base);
- }
- inline void Transform(int x, int y, int& x1, int& y1)
- {
- x1 = (a * x + c * y + e + base / 2) / base;
- y1 = (b * x + d * y + f + base / 2) / base;
- }
- int a, b, c, d, e, f;
- int base;
+class CPDF_FixedMatrix {
+ public:
+ CPDF_FixedMatrix(const CFX_AffineMatrix& src, int bits) {
+ base = 1 << bits;
+ a = FXSYS_round(src.a * base);
+ b = FXSYS_round(src.b * base);
+ c = FXSYS_round(src.c * base);
+ d = FXSYS_round(src.d * base);
+ e = FXSYS_round(src.e * base);
+ f = FXSYS_round(src.f * base);
+ }
+ inline void Transform(int x, int y, int& x1, int& y1) {
+ x1 = (a * x + c * y + e + base / 2) / base;
+ y1 = (b * x + d * y + f + base / 2) / base;
+ }
+ int a, b, c, d, e, f;
+ int base;
};
-#define FPDF_HUGE_IMAGE_SIZE 60000000
+#define FPDF_HUGE_IMAGE_SIZE 60000000
struct PixelWeight {
- int m_SrcStart;
- int m_SrcEnd;
- int m_Weights[1];
+ int m_SrcStart;
+ int m_SrcEnd;
+ int m_Weights[1];
};
-class CWeightTable
-{
-public:
- CWeightTable()
- {
- m_pWeightTables = NULL;
- }
- ~CWeightTable()
- {
- if(m_pWeightTables) {
- FX_Free(m_pWeightTables);
- }
- m_pWeightTables = NULL;
+class CWeightTable {
+ public:
+ CWeightTable() { m_pWeightTables = NULL; }
+ ~CWeightTable() {
+ if (m_pWeightTables) {
+ FX_Free(m_pWeightTables);
}
- void Calc(int dest_len, int dest_min, int dest_max, int src_len, int src_min, int src_max, int flags);
- PixelWeight* GetPixelWeight(int pixel)
- {
- return (PixelWeight*)(m_pWeightTables + (pixel - m_DestMin) * m_ItemSize);
- }
- int m_DestMin, m_ItemSize;
- uint8_t* m_pWeightTables;
+ m_pWeightTables = NULL;
+ }
+ void Calc(int dest_len,
+ int dest_min,
+ int dest_max,
+ int src_len,
+ int src_min,
+ int src_max,
+ int flags);
+ PixelWeight* GetPixelWeight(int pixel) {
+ return (PixelWeight*)(m_pWeightTables + (pixel - m_DestMin) * m_ItemSize);
+ }
+ int m_DestMin, m_ItemSize;
+ uint8_t* m_pWeightTables;
};
-class CStretchEngine
-{
-public:
- CStretchEngine(IFX_ScanlineComposer* pDestBitmap, FXDIB_Format dest_format,
- int dest_width, int dest_height, const FX_RECT& clip_rect,
- const CFX_DIBSource* pSrcBitmap, int flags);
- ~CStretchEngine();
- FX_BOOL Continue(IFX_Pause* pPause);
-public:
- FXDIB_Format m_DestFormat;
- int m_DestBpp, m_SrcBpp, m_bHasAlpha;
- IFX_ScanlineComposer* m_pDestBitmap;
- int m_DestWidth, m_DestHeight;
- FX_RECT m_DestClip;
- uint8_t* m_pDestScanline;
- uint8_t* m_pDestMaskScanline;
- FX_RECT m_SrcClip;
- const CFX_DIBSource* m_pSource;
- FX_DWORD* m_pSrcPalette;
- int m_SrcWidth, m_SrcHeight;
- int m_SrcPitch, m_InterPitch;
- int m_ExtraMaskPitch;
- unsigned char* m_pInterBuf;
- unsigned char* m_pExtraAlphaBuf;
- int m_TransMethod;
- int m_Flags;
- CWeightTable m_WeightTable;
- int m_CurRow;
- FX_BOOL StartStretchHorz();
- FX_BOOL ContinueStretchHorz(IFX_Pause* pPause);
- void StretchVert();
- int m_State;
+class CStretchEngine {
+ public:
+ CStretchEngine(IFX_ScanlineComposer* pDestBitmap,
+ FXDIB_Format dest_format,
+ int dest_width,
+ int dest_height,
+ const FX_RECT& clip_rect,
+ const CFX_DIBSource* pSrcBitmap,
+ int flags);
+ ~CStretchEngine();
+ FX_BOOL Continue(IFX_Pause* pPause);
+
+ public:
+ FXDIB_Format m_DestFormat;
+ int m_DestBpp, m_SrcBpp, m_bHasAlpha;
+ IFX_ScanlineComposer* m_pDestBitmap;
+ int m_DestWidth, m_DestHeight;
+ FX_RECT m_DestClip;
+ uint8_t* m_pDestScanline;
+ uint8_t* m_pDestMaskScanline;
+ FX_RECT m_SrcClip;
+ const CFX_DIBSource* m_pSource;
+ FX_DWORD* m_pSrcPalette;
+ int m_SrcWidth, m_SrcHeight;
+ int m_SrcPitch, m_InterPitch;
+ int m_ExtraMaskPitch;
+ unsigned char* m_pInterBuf;
+ unsigned char* m_pExtraAlphaBuf;
+ int m_TransMethod;
+ int m_Flags;
+ CWeightTable m_WeightTable;
+ int m_CurRow;
+ FX_BOOL StartStretchHorz();
+ FX_BOOL ContinueStretchHorz(IFX_Pause* pPause);
+ void StretchVert();
+ int m_State;
};
#endif // CORE_SRC_FXGE_DIB_DIB_INT_H_
diff --git a/core/src/fxge/dib/fx_dib_composite.cpp b/core/src/fxge/dib/fx_dib_composite.cpp
index cb99a37ff4..84062d80b1 100644
--- a/core/src/fxge/dib/fx_dib_composite.cpp
+++ b/core/src/fxge/dib/fx_dib_composite.cpp
@@ -8,4517 +8,5203 @@
#include "../../../include/fxcodec/fx_codec.h"
#include "dib_int.h"
const uint8_t _color_sqrt[256] = {
- 0x00, 0x03, 0x07, 0x0B, 0x0F, 0x12, 0x16, 0x19, 0x1D, 0x20, 0x23, 0x26, 0x29, 0x2C, 0x2F, 0x32,
- 0x35, 0x37, 0x3A, 0x3C, 0x3F, 0x41, 0x43, 0x46, 0x48, 0x4A, 0x4C, 0x4E, 0x50, 0x52, 0x54, 0x56,
- 0x57, 0x59, 0x5B, 0x5C, 0x5E, 0x60, 0x61, 0x63, 0x64, 0x65, 0x67, 0x68, 0x69, 0x6B, 0x6C, 0x6D,
- 0x6E, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E,
- 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E,
- 0x8F, 0x90, 0x91, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C,
- 0x9C, 0x9D, 0x9E, 0x9F, 0xA0, 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA4, 0xA5, 0xA6, 0xA7, 0xA7, 0xA8,
- 0xA9, 0xAA, 0xAA, 0xAB, 0xAC, 0xAD, 0xAD, 0xAE, 0xAF, 0xB0, 0xB0, 0xB1, 0xB2, 0xB3, 0xB3, 0xB4,
- 0xB5, 0xB5, 0xB6, 0xB7, 0xB7, 0xB8, 0xB9, 0xBA, 0xBA, 0xBB, 0xBC, 0xBC, 0xBD, 0xBE, 0xBE, 0xBF,
- 0xC0, 0xC0, 0xC1, 0xC2, 0xC2, 0xC3, 0xC4, 0xC4, 0xC5, 0xC6, 0xC6, 0xC7, 0xC7, 0xC8, 0xC9, 0xC9,
- 0xCA, 0xCB, 0xCB, 0xCC, 0xCC, 0xCD, 0xCE, 0xCE, 0xCF, 0xD0, 0xD0, 0xD1, 0xD1, 0xD2, 0xD3, 0xD3,
- 0xD4, 0xD4, 0xD5, 0xD6, 0xD6, 0xD7, 0xD7, 0xD8, 0xD9, 0xD9, 0xDA, 0xDA, 0xDB, 0xDC, 0xDC, 0xDD,
- 0xDD, 0xDE, 0xDE, 0xDF, 0xE0, 0xE0, 0xE1, 0xE1, 0xE2, 0xE2, 0xE3, 0xE4, 0xE4, 0xE5, 0xE5, 0xE6,
- 0xE6, 0xE7, 0xE7, 0xE8, 0xE9, 0xE9, 0xEA, 0xEA, 0xEB, 0xEB, 0xEC, 0xEC, 0xED, 0xED, 0xEE, 0xEE,
- 0xEF, 0xF0, 0xF0, 0xF1, 0xF1, 0xF2, 0xF2, 0xF3, 0xF3, 0xF4, 0xF4, 0xF5, 0xF5, 0xF6, 0xF6, 0xF7,
- 0xF7, 0xF8, 0xF8, 0xF9, 0xF9, 0xFA, 0xFA, 0xFB, 0xFB, 0xFC, 0xFC, 0xFD, 0xFD, 0xFE, 0xFE, 0xFF
-};
-int _BLEND(int blend_mode, int back_color, int src_color)
-{
- switch (blend_mode) {
- case FXDIB_BLEND_NORMAL:
- return src_color;
- case FXDIB_BLEND_MULTIPLY:
- return src_color * back_color / 255;
- case FXDIB_BLEND_SCREEN:
- return src_color + back_color - src_color * back_color / 255;
- case FXDIB_BLEND_OVERLAY:
- return _BLEND(FXDIB_BLEND_HARDLIGHT, src_color, back_color);
- case FXDIB_BLEND_DARKEN:
- return src_color < back_color ? src_color : back_color;
- case FXDIB_BLEND_LIGHTEN:
- return src_color > back_color ? src_color : back_color;
- case FXDIB_BLEND_COLORDODGE: {
- if (src_color == 255) {
- return src_color;
- }
- int result = back_color * 255 / (255 - src_color);
- if (result > 255) {
- return 255;
- }
- return result;
- }
- case FXDIB_BLEND_COLORBURN: {
- if (src_color == 0) {
- return src_color;
- }
- int result = (255 - back_color) * 255 / src_color;
- if (result > 255) {
- result = 255;
- }
- return 255 - result;
- }
- case FXDIB_BLEND_HARDLIGHT:
- if (src_color < 128) {
- return (src_color * back_color * 2) / 255;
- }
- return _BLEND(FXDIB_BLEND_SCREEN, back_color, 2 * src_color - 255);
- case FXDIB_BLEND_SOFTLIGHT: {
- if (src_color < 128) {
- return back_color - (255 - 2 * src_color) * back_color * (255 - back_color) / 255 / 255;
- }
- return back_color + (2 * src_color - 255) * (_color_sqrt[back_color] - back_color) / 255;
- }
- case FXDIB_BLEND_DIFFERENCE:
- return back_color < src_color ? src_color - back_color : back_color - src_color;
- case FXDIB_BLEND_EXCLUSION:
- return back_color + src_color - 2 * back_color * src_color / 255;
- }
- return src_color;
+ 0x00, 0x03, 0x07, 0x0B, 0x0F, 0x12, 0x16, 0x19, 0x1D, 0x20, 0x23, 0x26,
+ 0x29, 0x2C, 0x2F, 0x32, 0x35, 0x37, 0x3A, 0x3C, 0x3F, 0x41, 0x43, 0x46,
+ 0x48, 0x4A, 0x4C, 0x4E, 0x50, 0x52, 0x54, 0x56, 0x57, 0x59, 0x5B, 0x5C,
+ 0x5E, 0x60, 0x61, 0x63, 0x64, 0x65, 0x67, 0x68, 0x69, 0x6B, 0x6C, 0x6D,
+ 0x6E, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A,
+ 0x7B, 0x7C, 0x7D, 0x7E, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+ 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x91,
+ 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C,
+ 0x9C, 0x9D, 0x9E, 0x9F, 0xA0, 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA4, 0xA5,
+ 0xA6, 0xA7, 0xA7, 0xA8, 0xA9, 0xAA, 0xAA, 0xAB, 0xAC, 0xAD, 0xAD, 0xAE,
+ 0xAF, 0xB0, 0xB0, 0xB1, 0xB2, 0xB3, 0xB3, 0xB4, 0xB5, 0xB5, 0xB6, 0xB7,
+ 0xB7, 0xB8, 0xB9, 0xBA, 0xBA, 0xBB, 0xBC, 0xBC, 0xBD, 0xBE, 0xBE, 0xBF,
+ 0xC0, 0xC0, 0xC1, 0xC2, 0xC2, 0xC3, 0xC4, 0xC4, 0xC5, 0xC6, 0xC6, 0xC7,
+ 0xC7, 0xC8, 0xC9, 0xC9, 0xCA, 0xCB, 0xCB, 0xCC, 0xCC, 0xCD, 0xCE, 0xCE,
+ 0xCF, 0xD0, 0xD0, 0xD1, 0xD1, 0xD2, 0xD3, 0xD3, 0xD4, 0xD4, 0xD5, 0xD6,
+ 0xD6, 0xD7, 0xD7, 0xD8, 0xD9, 0xD9, 0xDA, 0xDA, 0xDB, 0xDC, 0xDC, 0xDD,
+ 0xDD, 0xDE, 0xDE, 0xDF, 0xE0, 0xE0, 0xE1, 0xE1, 0xE2, 0xE2, 0xE3, 0xE4,
+ 0xE4, 0xE5, 0xE5, 0xE6, 0xE6, 0xE7, 0xE7, 0xE8, 0xE9, 0xE9, 0xEA, 0xEA,
+ 0xEB, 0xEB, 0xEC, 0xEC, 0xED, 0xED, 0xEE, 0xEE, 0xEF, 0xF0, 0xF0, 0xF1,
+ 0xF1, 0xF2, 0xF2, 0xF3, 0xF3, 0xF4, 0xF4, 0xF5, 0xF5, 0xF6, 0xF6, 0xF7,
+ 0xF7, 0xF8, 0xF8, 0xF9, 0xF9, 0xFA, 0xFA, 0xFB, 0xFB, 0xFC, 0xFC, 0xFD,
+ 0xFD, 0xFE, 0xFE, 0xFF};
+int _BLEND(int blend_mode, int back_color, int src_color) {
+ switch (blend_mode) {
+ case FXDIB_BLEND_NORMAL:
+ return src_color;
+ case FXDIB_BLEND_MULTIPLY:
+ return src_color * back_color / 255;
+ case FXDIB_BLEND_SCREEN:
+ return src_color + back_color - src_color * back_color / 255;
+ case FXDIB_BLEND_OVERLAY:
+ return _BLEND(FXDIB_BLEND_HARDLIGHT, src_color, back_color);
+ case FXDIB_BLEND_DARKEN:
+ return src_color < back_color ? src_color : back_color;
+ case FXDIB_BLEND_LIGHTEN:
+ return src_color > back_color ? src_color : back_color;
+ case FXDIB_BLEND_COLORDODGE: {
+ if (src_color == 255) {
+ return src_color;
+ }
+ int result = back_color * 255 / (255 - src_color);
+ if (result > 255) {
+ return 255;
+ }
+ return result;
+ }
+ case FXDIB_BLEND_COLORBURN: {
+ if (src_color == 0) {
+ return src_color;
+ }
+ int result = (255 - back_color) * 255 / src_color;
+ if (result > 255) {
+ result = 255;
+ }
+ return 255 - result;
+ }
+ case FXDIB_BLEND_HARDLIGHT:
+ if (src_color < 128) {
+ return (src_color * back_color * 2) / 255;
+ }
+ return _BLEND(FXDIB_BLEND_SCREEN, back_color, 2 * src_color - 255);
+ case FXDIB_BLEND_SOFTLIGHT: {
+ if (src_color < 128) {
+ return back_color -
+ (255 - 2 * src_color) * back_color * (255 - back_color) / 255 /
+ 255;
+ }
+ return back_color +
+ (2 * src_color - 255) * (_color_sqrt[back_color] - back_color) /
+ 255;
+ }
+ case FXDIB_BLEND_DIFFERENCE:
+ return back_color < src_color ? src_color - back_color
+ : back_color - src_color;
+ case FXDIB_BLEND_EXCLUSION:
+ return back_color + src_color - 2 * back_color * src_color / 255;
+ }
+ return src_color;
}
struct _RGB {
- int red;
- int green;
- int blue;
+ int red;
+ int green;
+ int blue;
};
-static inline int _Lum(_RGB color)
-{
- return (color.red * 30 + color.green * 59 + color.blue * 11) / 100;
+static inline int _Lum(_RGB color) {
+ return (color.red * 30 + color.green * 59 + color.blue * 11) / 100;
}
-static _RGB _ClipColor(_RGB color)
-{
- int l = _Lum(color);
- int n = color.red;
- if (color.green < n) {
- n = color.green;
- }
- if (color.blue < n) {
- n = color.blue;
- }
- int x = color.red;
- if (color.green > x) {
- x = color.green;
- }
- if (color.blue > x) {
- x = color.blue;
- }
- if (n < 0) {
- color.red = l + ((color.red - l) * l / (l - n));
- color.green = l + ((color.green - l) * l / (l - n));
- color.blue = l + ((color.blue - l) * l / (l - n));
- }
- if (x > 255) {
- color.red = l + ((color.red - l) * (255 - l) / (x - l));
- color.green = l + ((color.green - l) * (255 - l) / (x - l));
- color.blue = l + ((color.blue - l) * (255 - l) / (x - l));
- }
- return color;
+static _RGB _ClipColor(_RGB color) {
+ int l = _Lum(color);
+ int n = color.red;
+ if (color.green < n) {
+ n = color.green;
+ }
+ if (color.blue < n) {
+ n = color.blue;
+ }
+ int x = color.red;
+ if (color.green > x) {
+ x = color.green;
+ }
+ if (color.blue > x) {
+ x = color.blue;
+ }
+ if (n < 0) {
+ color.red = l + ((color.red - l) * l / (l - n));
+ color.green = l + ((color.green - l) * l / (l - n));
+ color.blue = l + ((color.blue - l) * l / (l - n));
+ }
+ if (x > 255) {
+ color.red = l + ((color.red - l) * (255 - l) / (x - l));
+ color.green = l + ((color.green - l) * (255 - l) / (x - l));
+ color.blue = l + ((color.blue - l) * (255 - l) / (x - l));
+ }
+ return color;
}
-static _RGB _SetLum(_RGB color, int l)
-{
- int d = l - _Lum(color);
- color.red += d;
- color.green += d;
- color.blue += d;
- return _ClipColor(color);
+static _RGB _SetLum(_RGB color, int l) {
+ int d = l - _Lum(color);
+ color.red += d;
+ color.green += d;
+ color.blue += d;
+ return _ClipColor(color);
}
-static int _Sat(_RGB color)
-{
- int n = color.red;
- if (color.green < n) {
- n = color.green;
- }
- if (color.blue < n) {
- n = color.blue;
- }
- int x = color.red;
- if (color.green > x) {
- x = color.green;
- }
- if (color.blue > x) {
- x = color.blue;
- }
- return x - n;
+static int _Sat(_RGB color) {
+ int n = color.red;
+ if (color.green < n) {
+ n = color.green;
+ }
+ if (color.blue < n) {
+ n = color.blue;
+ }
+ int x = color.red;
+ if (color.green > x) {
+ x = color.green;
+ }
+ if (color.blue > x) {
+ x = color.blue;
+ }
+ return x - n;
}
-static _RGB _SetSat(_RGB color, int s)
-{
- int* max = &color.red;
- int* mid = &color.red;
- int* min = &color.red;
- if (color.green > *max) {
- max = &color.green;
- }
- if (color.blue > *max) {
- max = &color.blue;
- }
- if (color.green < *min) {
- min = &color.green;
- }
- if (color.blue < *min) {
- min = &color.blue;
- }
- if (*max == *min) {
- color.red = 0;
- color.green = 0;
- color.blue = 0;
- return color;
- }
- if (max == &color.red) {
- if (min == &color.green) {
- mid = &color.blue;
- } else {
- mid = &color.green;
- }
- } else if (max == &color.green) {
- if (min == &color.red) {
- mid = &color.blue;
- } else {
- mid = &color.red;
- }
+static _RGB _SetSat(_RGB color, int s) {
+ int* max = &color.red;
+ int* mid = &color.red;
+ int* min = &color.red;
+ if (color.green > *max) {
+ max = &color.green;
+ }
+ if (color.blue > *max) {
+ max = &color.blue;
+ }
+ if (color.green < *min) {
+ min = &color.green;
+ }
+ if (color.blue < *min) {
+ min = &color.blue;
+ }
+ if (*max == *min) {
+ color.red = 0;
+ color.green = 0;
+ color.blue = 0;
+ return color;
+ }
+ if (max == &color.red) {
+ if (min == &color.green) {
+ mid = &color.blue;
} else {
- if (min == &color.green) {
- mid = &color.red;
- } else {
- mid = &color.green;
- }
+ mid = &color.green;
}
- if (*max > *min) {
- *mid = (*mid - *min) * s / (*max - *min);
- *max = s;
- *min = 0;
+ } else if (max == &color.green) {
+ if (min == &color.red) {
+ mid = &color.blue;
+ } else {
+ mid = &color.red;
}
- return color;
+ } else {
+ if (min == &color.green) {
+ mid = &color.red;
+ } else {
+ mid = &color.green;
+ }
+ }
+ if (*max > *min) {
+ *mid = (*mid - *min) * s / (*max - *min);
+ *max = s;
+ *min = 0;
+ }
+ return color;
}
-void _RGB_Blend(int blend_mode, const uint8_t* src_scan, uint8_t* dest_scan, int results[3])
-{
- _RGB src, back, result;
- src.red = src_scan[2];
- src.green = src_scan[1];
- src.blue = src_scan[0];
- back.red = dest_scan[2];
- back.green = dest_scan[1];
- back.blue = dest_scan[0];
- switch (blend_mode) {
- case FXDIB_BLEND_HUE:
- result = _SetLum(_SetSat(src, _Sat(back)), _Lum(back));
- break;
- case FXDIB_BLEND_SATURATION:
- result = _SetLum(_SetSat(back, _Sat(src)), _Lum(back));
- break;
- case FXDIB_BLEND_COLOR:
- result = _SetLum(src, _Lum(back));
- break;
- case FXDIB_BLEND_LUMINOSITY:
- result = _SetLum(back, _Lum(src));
- break;
- }
- results[0] = result.blue;
- results[1] = result.green;
- results[2] = result.red;
+void _RGB_Blend(int blend_mode,
+ const uint8_t* src_scan,
+ uint8_t* dest_scan,
+ int results[3]) {
+ _RGB src, back, result;
+ src.red = src_scan[2];
+ src.green = src_scan[1];
+ src.blue = src_scan[0];
+ back.red = dest_scan[2];
+ back.green = dest_scan[1];
+ back.blue = dest_scan[0];
+ switch (blend_mode) {
+ case FXDIB_BLEND_HUE:
+ result = _SetLum(_SetSat(src, _Sat(back)), _Lum(back));
+ break;
+ case FXDIB_BLEND_SATURATION:
+ result = _SetLum(_SetSat(back, _Sat(src)), _Lum(back));
+ break;
+ case FXDIB_BLEND_COLOR:
+ result = _SetLum(src, _Lum(back));
+ break;
+ case FXDIB_BLEND_LUMINOSITY:
+ result = _SetLum(back, _Lum(src));
+ break;
+ }
+ results[0] = result.blue;
+ results[1] = result.green;
+ results[2] = result.red;
}
-inline void _CompositeRow_Argb2Mask(uint8_t* dest_scan, const uint8_t* src_scan, int pixel_count, const uint8_t* clip_scan)
-{
- src_scan += 3;
- for (int col = 0; col < pixel_count; col ++) {
- int src_alpha = *src_scan;
- if (clip_scan) {
- src_alpha = clip_scan[col] * src_alpha / 255;
- }
- uint8_t back_alpha = *dest_scan;
- if (!back_alpha) {
- *dest_scan = src_alpha;
- } else if (src_alpha) {
- *dest_scan = back_alpha + src_alpha - back_alpha * src_alpha / 255;
- }
- dest_scan ++;
- src_scan += 4;
+inline void _CompositeRow_Argb2Mask(uint8_t* dest_scan,
+ const uint8_t* src_scan,
+ int pixel_count,
+ const uint8_t* clip_scan) {
+ src_scan += 3;
+ for (int col = 0; col < pixel_count; col++) {
+ int src_alpha = *src_scan;
+ if (clip_scan) {
+ src_alpha = clip_scan[col] * src_alpha / 255;
}
-}
-void _CompositeRow_Rgba2Mask(uint8_t* dest_scan, const uint8_t* src_alpha_scan, int pixel_count, const uint8_t* clip_scan)
-{
- for (int col = 0; col < pixel_count; col ++) {
- int src_alpha = *src_alpha_scan++;
- if (clip_scan) {
- src_alpha = clip_scan[col] * src_alpha / 255;
- }
- uint8_t back_alpha = *dest_scan;
- if (!back_alpha) {
- *dest_scan = src_alpha;
- } else if (src_alpha) {
- *dest_scan = back_alpha + src_alpha - back_alpha * src_alpha / 255;
- }
- dest_scan ++;
+ uint8_t back_alpha = *dest_scan;
+ if (!back_alpha) {
+ *dest_scan = src_alpha;
+ } else if (src_alpha) {
+ *dest_scan = back_alpha + src_alpha - back_alpha * src_alpha / 255;
}
+ dest_scan++;
+ src_scan += 4;
+ }
}
-void _CompositeRow_Rgb2Mask(uint8_t* dest_scan, const uint8_t* src_scan, int width, const uint8_t* clip_scan)
-{
+void _CompositeRow_Rgba2Mask(uint8_t* dest_scan,
+ const uint8_t* src_alpha_scan,
+ int pixel_count,
+ const uint8_t* clip_scan) {
+ for (int col = 0; col < pixel_count; col++) {
+ int src_alpha = *src_alpha_scan++;
if (clip_scan) {
- for (int i = 0; i < width; i ++) {
- *dest_scan = FXDIB_ALPHA_UNION(*dest_scan, *clip_scan);
- dest_scan ++;
- clip_scan ++;
- }
- } else {
- FXSYS_memset(dest_scan, 0xff, width);
+ src_alpha = clip_scan[col] * src_alpha / 255;
}
-}
-void _CompositeRow_Argb2Graya(uint8_t* dest_scan, const uint8_t* src_scan, int pixel_count, int blend_type, const uint8_t* clip_scan,
- const uint8_t* src_alpha_scan, uint8_t* dst_alpha_scan, void* pIccTransform)
-{
- ICodec_IccModule* pIccModule = NULL;
- if (pIccTransform) {
- pIccModule = CFX_GEModule::Get()->GetCodecModule()->GetIccModule();
- }
- if (blend_type) {
- FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE;
- int blended_color;
- if (src_alpha_scan) {
- for (int col = 0; col < pixel_count; col ++) {
- uint8_t back_alpha = *dst_alpha_scan;
- if (back_alpha == 0) {
- int src_alpha = *src_alpha_scan++;
- if (clip_scan) {
- src_alpha = clip_scan[col] * src_alpha / 255;
- }
- if (src_alpha) {
- if (pIccTransform) {
- pIccModule->TranslateScanline(pIccTransform, dest_scan, src_scan, 1);
- } else {
- *dest_scan = FXRGB2GRAY(src_scan[2], src_scan[1], *src_scan);
- }
- *dst_alpha_scan = src_alpha;
- }
- dest_scan ++;
- dst_alpha_scan ++;
- src_scan += 3;
- continue;
- }
- uint8_t src_alpha = *src_alpha_scan++;
- if (clip_scan) {
- src_alpha = clip_scan[col] * src_alpha / 255;
- }
- if (src_alpha == 0) {
- dest_scan ++;
- dst_alpha_scan ++;
- src_scan += 3;
- continue;
- }
- *dst_alpha_scan = FXDIB_ALPHA_UNION(back_alpha, src_alpha);
- int alpha_ratio = src_alpha * 255 / (*dst_alpha_scan);
- uint8_t gray;
- if (pIccTransform) {
- pIccModule->TranslateScanline(pIccTransform, &gray, src_scan, 1);
- } else {
- gray = FXRGB2GRAY(src_scan[2], src_scan[1], *src_scan);
- }
- if (bNonseparableBlend) {
- blended_color = blend_type == FXDIB_BLEND_LUMINOSITY ? gray : *dest_scan;
- }
- gray = bNonseparableBlend ? blended_color : _BLEND(blend_type, *dest_scan, gray);
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, alpha_ratio);
- dest_scan ++;
- dst_alpha_scan++;
- src_scan += 3;
- }
- } else
- for (int col = 0; col < pixel_count; col ++) {
- uint8_t back_alpha = *dst_alpha_scan;
- if (back_alpha == 0) {
- int src_alpha = src_scan[3];
- if (clip_scan) {
- src_alpha = clip_scan[col] * src_alpha / 255;
- }
- if (src_alpha) {
- if (pIccTransform) {
- pIccModule->TranslateScanline(pIccTransform, dest_scan, src_scan, 1);
- } else {
- *dest_scan = FXRGB2GRAY(src_scan[2], src_scan[1], *src_scan);
- }
- *dst_alpha_scan = src_alpha;
- }
- dest_scan ++;
- dst_alpha_scan ++;
- src_scan += 4;
- continue;
- }
- uint8_t src_alpha = src_scan[3];
- if (clip_scan) {
- src_alpha = clip_scan[col] * src_alpha / 255;
- }
- if (src_alpha == 0) {
- dest_scan ++;
- dst_alpha_scan ++;
- src_scan += 4;
- continue;
- }
- *dst_alpha_scan = FXDIB_ALPHA_UNION(back_alpha, src_alpha);
- int alpha_ratio = src_alpha * 255 / (*dst_alpha_scan);
- uint8_t gray;
- if (pIccTransform) {
- pIccModule->TranslateScanline(pIccTransform, &gray, src_scan, 1);
- } else {
- gray = FXRGB2GRAY(src_scan[2], src_scan[1], *src_scan);
- }
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, alpha_ratio);
- dest_scan ++;
- dst_alpha_scan++;
- src_scan += 4;
- }
- return;
+ uint8_t back_alpha = *dest_scan;
+ if (!back_alpha) {
+ *dest_scan = src_alpha;
+ } else if (src_alpha) {
+ *dest_scan = back_alpha + src_alpha - back_alpha * src_alpha / 255;
}
+ dest_scan++;
+ }
+}
+void _CompositeRow_Rgb2Mask(uint8_t* dest_scan,
+ const uint8_t* src_scan,
+ int width,
+ const uint8_t* clip_scan) {
+ if (clip_scan) {
+ for (int i = 0; i < width; i++) {
+ *dest_scan = FXDIB_ALPHA_UNION(*dest_scan, *clip_scan);
+ dest_scan++;
+ clip_scan++;
+ }
+ } else {
+ FXSYS_memset(dest_scan, 0xff, width);
+ }
+}
+void _CompositeRow_Argb2Graya(uint8_t* dest_scan,
+ const uint8_t* src_scan,
+ int pixel_count,
+ int blend_type,
+ const uint8_t* clip_scan,
+ const uint8_t* src_alpha_scan,
+ uint8_t* dst_alpha_scan,
+ void* pIccTransform) {
+ ICodec_IccModule* pIccModule = NULL;
+ if (pIccTransform) {
+ pIccModule = CFX_GEModule::Get()->GetCodecModule()->GetIccModule();
+ }
+ if (blend_type) {
+ FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE;
+ int blended_color;
if (src_alpha_scan) {
- for (int col = 0; col < pixel_count; col ++) {
- uint8_t back_alpha = *dst_alpha_scan;
- if (back_alpha == 0) {
- int src_alpha = *src_alpha_scan++;
- if (clip_scan) {
- src_alpha = clip_scan[col] * src_alpha / 255;
- }
- if (src_alpha) {
- if (pIccTransform) {
- pIccModule->TranslateScanline(pIccTransform, dest_scan, src_scan, 1);
- } else {
- *dest_scan = FXRGB2GRAY(src_scan[2], src_scan[1], *src_scan);
- }
- *dst_alpha_scan = src_alpha;
- }
- dest_scan ++;
- dst_alpha_scan ++;
- src_scan += 3;
- continue;
- }
- uint8_t src_alpha = *src_alpha_scan++;
- if (clip_scan) {
- src_alpha = clip_scan[col] * src_alpha / 255;
- }
- if (src_alpha == 0) {
- dest_scan ++;
- dst_alpha_scan ++;
- src_scan += 3;
- continue;
- }
- *dst_alpha_scan = FXDIB_ALPHA_UNION(back_alpha, src_alpha);
- int alpha_ratio = src_alpha * 255 / (*dst_alpha_scan);
- uint8_t gray;
- if (pIccTransform) {
- pIccModule->TranslateScanline(pIccTransform, &gray, src_scan, 1);
- } else {
- gray = FXRGB2GRAY(src_scan[2], src_scan[1], *src_scan);
- }
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, alpha_ratio);
- dest_scan ++;
- dst_alpha_scan++;
- src_scan += 3;
- }
- } else
- for (int col = 0; col < pixel_count; col ++) {
- uint8_t back_alpha = *dst_alpha_scan;
- if (back_alpha == 0) {
- int src_alpha = src_scan[3];
- if (clip_scan) {
- src_alpha = clip_scan[col] * src_alpha / 255;
- }
- if (src_alpha) {
- if (pIccTransform) {
- pIccModule->TranslateScanline(pIccTransform, dest_scan, src_scan, 1);
- } else {
- *dest_scan = FXRGB2GRAY(src_scan[2], src_scan[1], *src_scan);
- }
- *dst_alpha_scan = src_alpha;
- }
- dest_scan ++;
- dst_alpha_scan ++;
- src_scan += 4;
- continue;
- }
- uint8_t src_alpha = src_scan[3];
- if (clip_scan) {
- src_alpha = clip_scan[col] * src_alpha / 255;
- }
- if (src_alpha == 0) {
- dest_scan ++;
- dst_alpha_scan ++;
- src_scan += 4;
- continue;
- }
- *dst_alpha_scan = FXDIB_ALPHA_UNION(back_alpha, src_alpha);
- int alpha_ratio = src_alpha * 255 / (*dst_alpha_scan);
- uint8_t gray;
+ for (int col = 0; col < pixel_count; col++) {
+ uint8_t back_alpha = *dst_alpha_scan;
+ if (back_alpha == 0) {
+ int src_alpha = *src_alpha_scan++;
+ if (clip_scan) {
+ src_alpha = clip_scan[col] * src_alpha / 255;
+ }
+ if (src_alpha) {
if (pIccTransform) {
- pIccModule->TranslateScanline(pIccTransform, &gray, src_scan, 1);
+ pIccModule->TranslateScanline(pIccTransform, dest_scan, src_scan,
+ 1);
} else {
- gray = FXRGB2GRAY(src_scan[2], src_scan[1], *src_scan);
- }
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, alpha_ratio);
- dest_scan ++;
- dst_alpha_scan++;
- src_scan += 4;
- }
-}
-inline void _CompositeRow_Argb2Gray(uint8_t* dest_scan, const uint8_t* src_scan, int pixel_count,
- int blend_type, const uint8_t* clip_scan,
- const uint8_t* src_alpha_scan, void* pIccTransform)
-{
- ICodec_IccModule* pIccModule = NULL;
- uint8_t gray;
- if (pIccTransform) {
- pIccModule = CFX_GEModule::Get()->GetCodecModule()->GetIccModule();
- }
- if (blend_type) {
- FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE;
- int blended_color;
- if (src_alpha_scan) {
- for (int col = 0; col < pixel_count; col ++) {
- int src_alpha = *src_alpha_scan++;
- if (clip_scan) {
- src_alpha = clip_scan[col] * src_alpha / 255;
- }
- if (src_alpha) {
- if (pIccTransform) {
- pIccModule->TranslateScanline(pIccTransform, &gray, src_scan, 1);
- } else {
- gray = FXRGB2GRAY(src_scan[2], src_scan[1], *src_scan);
- }
- if (bNonseparableBlend) {
- blended_color = blend_type == FXDIB_BLEND_LUMINOSITY ? gray : *dest_scan;
- }
- gray = bNonseparableBlend ? blended_color : _BLEND(blend_type, *dest_scan, gray);
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, src_alpha);
- }
- dest_scan ++;
- src_scan += 3;
- }
- } else
- for (int col = 0; col < pixel_count; col ++) {
- int src_alpha = src_scan[3];
- if (clip_scan) {
- src_alpha = clip_scan[col] * src_alpha / 255;
- }
- if (src_alpha) {
- if (pIccTransform) {
- pIccModule->TranslateScanline(pIccTransform, &gray, src_scan, 1);
- } else {
- gray = FXRGB2GRAY(src_scan[2], src_scan[1], *src_scan);
- }
- if (bNonseparableBlend) {
- blended_color = blend_type == FXDIB_BLEND_LUMINOSITY ? gray : *dest_scan;
- }
- gray = bNonseparableBlend ? blended_color : _BLEND(blend_type, *dest_scan, gray);
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, src_alpha);
- }
- dest_scan ++;
- src_scan += 4;
- }
- return;
- }
- if (src_alpha_scan) {
- for (int col = 0; col < pixel_count; col ++) {
- int src_alpha = *src_alpha_scan++;
- if (clip_scan) {
- src_alpha = clip_scan[col] * src_alpha / 255;
+ *dest_scan = FXRGB2GRAY(src_scan[2], src_scan[1], *src_scan);
}
- if (src_alpha) {
- if (pIccTransform) {
- pIccModule->TranslateScanline(pIccTransform, &gray, src_scan, 1);
- } else {
- gray = FXRGB2GRAY(src_scan[2], src_scan[1], *src_scan);
- }
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, src_alpha);
- }
- dest_scan ++;
- src_scan += 3;
+ *dst_alpha_scan = src_alpha;
+ }
+ dest_scan++;
+ dst_alpha_scan++;
+ src_scan += 3;
+ continue;
}
- } else
- for (int col = 0; col < pixel_count; col ++) {
- int src_alpha = src_scan[3];
- if (clip_scan) {
- src_alpha = clip_scan[col] * src_alpha / 255;
- }
- if (src_alpha) {
- if (pIccTransform) {
- pIccModule->TranslateScanline(pIccTransform, &gray, src_scan, 1);
- } else {
- gray = FXRGB2GRAY(src_scan[2], src_scan[1], *src_scan);
- }
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, src_alpha);
- }
- dest_scan ++;
- src_scan += 4;
+ uint8_t src_alpha = *src_alpha_scan++;
+ if (clip_scan) {
+ src_alpha = clip_scan[col] * src_alpha / 255;
}
-}
-inline void _CompositeRow_Rgb2Gray(uint8_t* dest_scan, const uint8_t* src_scan, int src_Bpp, int pixel_count,
- int blend_type, const uint8_t* clip_scan,
- void* pIccTransform)
-{
- ICodec_IccModule* pIccModule = NULL;
- uint8_t gray;
- if (pIccTransform) {
- pIccModule = CFX_GEModule::Get()->GetCodecModule()->GetIccModule();
- }
- if (blend_type) {
- FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE;
- int blended_color;
- for (int col = 0; col < pixel_count; col ++) {
- if (pIccTransform) {
- pIccModule->TranslateScanline(pIccTransform, &gray, src_scan, 1);
- } else {
- gray = FXRGB2GRAY(src_scan[2], src_scan[1], *src_scan);
- }
- if (bNonseparableBlend) {
- blended_color = blend_type == FXDIB_BLEND_LUMINOSITY ? gray : *dest_scan;
- }
- gray = bNonseparableBlend ? blended_color : _BLEND(blend_type, *dest_scan, gray);
- if (clip_scan && clip_scan[col] < 255) {
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, clip_scan[col]);
- } else {
- *dest_scan = gray;
- }
- dest_scan ++;
- src_scan += src_Bpp;
+ if (src_alpha == 0) {
+ dest_scan++;
+ dst_alpha_scan++;
+ src_scan += 3;
+ continue;
}
- return;
- }
- for (int col = 0; col < pixel_count; col ++) {
+ *dst_alpha_scan = FXDIB_ALPHA_UNION(back_alpha, src_alpha);
+ int alpha_ratio = src_alpha * 255 / (*dst_alpha_scan);
+ uint8_t gray;
if (pIccTransform) {
- pIccModule->TranslateScanline(pIccTransform, &gray, src_scan, 1);
+ pIccModule->TranslateScanline(pIccTransform, &gray, src_scan, 1);
} else {
- gray = FXRGB2GRAY(src_scan[2], src_scan[1], *src_scan);
+ gray = FXRGB2GRAY(src_scan[2], src_scan[1], *src_scan);
}
- if (clip_scan && clip_scan[col] < 255) {
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, clip_scan[col]);
- } else {
- *dest_scan = gray;
+ if (bNonseparableBlend) {
+ blended_color =
+ blend_type == FXDIB_BLEND_LUMINOSITY ? gray : *dest_scan;
}
- dest_scan ++;
- src_scan += src_Bpp;
- }
-}
-void _CompositeRow_Rgb2Graya(uint8_t* dest_scan, const uint8_t* src_scan, int src_Bpp, int pixel_count,
- int blend_type, const uint8_t* clip_scan,
- uint8_t* dest_alpha_scan, void* pIccTransform)
-{
- ICodec_IccModule* pIccModule = NULL;
- if (pIccTransform) {
- pIccModule = CFX_GEModule::Get()->GetCodecModule()->GetIccModule();
- }
- if (blend_type) {
- int blended_color;
- FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE;
- for (int col = 0; col < pixel_count; col ++) {
- int back_alpha = *dest_alpha_scan;
- if (back_alpha == 0) {
- if (pIccTransform) {
- pIccModule->TranslateScanline(pIccTransform, dest_scan, src_scan, 1);
- } else {
- *dest_scan = FXRGB2GRAY(src_scan[2], src_scan[1], *src_scan);
- }
- dest_scan ++;
- dest_alpha_scan++;
- src_scan += src_Bpp;
- continue;
- }
- int src_alpha = 255;
- if (clip_scan) {
- src_alpha = clip_scan[col];
- }
- if (src_alpha == 0) {
- dest_scan ++;
- dest_alpha_scan ++;
- src_scan += src_Bpp;
- continue;
- }
- uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 255;
- *dest_alpha_scan++ = dest_alpha;
- int alpha_ratio = src_alpha * 255 / dest_alpha;
- uint8_t gray;
+ gray = bNonseparableBlend ? blended_color
+ : _BLEND(blend_type, *dest_scan, gray);
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, alpha_ratio);
+ dest_scan++;
+ dst_alpha_scan++;
+ src_scan += 3;
+ }
+ } else
+ for (int col = 0; col < pixel_count; col++) {
+ uint8_t back_alpha = *dst_alpha_scan;
+ if (back_alpha == 0) {
+ int src_alpha = src_scan[3];
+ if (clip_scan) {
+ src_alpha = clip_scan[col] * src_alpha / 255;
+ }
+ if (src_alpha) {
if (pIccTransform) {
- pIccModule->TranslateScanline(pIccTransform, &gray, src_scan, 1);
+ pIccModule->TranslateScanline(pIccTransform, dest_scan, src_scan,
+ 1);
} else {
- gray = FXRGB2GRAY(src_scan[2], src_scan[1], *src_scan);
- }
- if (bNonseparableBlend) {
- blended_color = blend_type == FXDIB_BLEND_LUMINOSITY ? gray : *dest_scan;
+ *dest_scan = FXRGB2GRAY(src_scan[2], src_scan[1], *src_scan);
}
- gray = bNonseparableBlend ? blended_color : _BLEND(blend_type, *dest_scan, gray);
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, alpha_ratio);
- dest_scan ++;
- src_scan += src_Bpp;
+ *dst_alpha_scan = src_alpha;
+ }
+ dest_scan++;
+ dst_alpha_scan++;
+ src_scan += 4;
+ continue;
}
- return;
- }
- for (int col = 0; col < pixel_count; col ++) {
- int src_alpha = 255;
+ uint8_t src_alpha = src_scan[3];
if (clip_scan) {
- src_alpha = clip_scan[col];
- }
- if (src_alpha == 255) {
- if (pIccTransform) {
- pIccModule->TranslateScanline(pIccTransform, dest_scan, src_scan, 1);
- } else {
- *dest_scan = FXRGB2GRAY(src_scan[2], src_scan[1], *src_scan);
- }
- dest_scan ++;
- *dest_alpha_scan++ = 255;
- src_scan += src_Bpp;
- continue;
+ src_alpha = clip_scan[col] * src_alpha / 255;
}
if (src_alpha == 0) {
- dest_scan ++;
- dest_alpha_scan ++;
- src_scan += src_Bpp;
- continue;
+ dest_scan++;
+ dst_alpha_scan++;
+ src_scan += 4;
+ continue;
}
- int back_alpha = *dest_alpha_scan;
- uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 255;
- *dest_alpha_scan++ = dest_alpha;
- int alpha_ratio = src_alpha * 255 / dest_alpha;
+ *dst_alpha_scan = FXDIB_ALPHA_UNION(back_alpha, src_alpha);
+ int alpha_ratio = src_alpha * 255 / (*dst_alpha_scan);
uint8_t gray;
if (pIccTransform) {
- pIccModule->TranslateScanline(pIccTransform, &gray, src_scan, 1);
+ pIccModule->TranslateScanline(pIccTransform, &gray, src_scan, 1);
} else {
- gray = FXRGB2GRAY(src_scan[2], src_scan[1], *src_scan);
+ gray = FXRGB2GRAY(src_scan[2], src_scan[1], *src_scan);
}
*dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, alpha_ratio);
- dest_scan ++;
- src_scan += src_Bpp;
+ dest_scan++;
+ dst_alpha_scan++;
+ src_scan += 4;
+ }
+ return;
+ }
+ if (src_alpha_scan) {
+ for (int col = 0; col < pixel_count; col++) {
+ uint8_t back_alpha = *dst_alpha_scan;
+ if (back_alpha == 0) {
+ int src_alpha = *src_alpha_scan++;
+ if (clip_scan) {
+ src_alpha = clip_scan[col] * src_alpha / 255;
+ }
+ if (src_alpha) {
+ if (pIccTransform) {
+ pIccModule->TranslateScanline(pIccTransform, dest_scan, src_scan,
+ 1);
+ } else {
+ *dest_scan = FXRGB2GRAY(src_scan[2], src_scan[1], *src_scan);
+ }
+ *dst_alpha_scan = src_alpha;
+ }
+ dest_scan++;
+ dst_alpha_scan++;
+ src_scan += 3;
+ continue;
+ }
+ uint8_t src_alpha = *src_alpha_scan++;
+ if (clip_scan) {
+ src_alpha = clip_scan[col] * src_alpha / 255;
+ }
+ if (src_alpha == 0) {
+ dest_scan++;
+ dst_alpha_scan++;
+ src_scan += 3;
+ continue;
+ }
+ *dst_alpha_scan = FXDIB_ALPHA_UNION(back_alpha, src_alpha);
+ int alpha_ratio = src_alpha * 255 / (*dst_alpha_scan);
+ uint8_t gray;
+ if (pIccTransform) {
+ pIccModule->TranslateScanline(pIccTransform, &gray, src_scan, 1);
+ } else {
+ gray = FXRGB2GRAY(src_scan[2], src_scan[1], *src_scan);
+ }
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, alpha_ratio);
+ dest_scan++;
+ dst_alpha_scan++;
+ src_scan += 3;
+ }
+ } else
+ for (int col = 0; col < pixel_count; col++) {
+ uint8_t back_alpha = *dst_alpha_scan;
+ if (back_alpha == 0) {
+ int src_alpha = src_scan[3];
+ if (clip_scan) {
+ src_alpha = clip_scan[col] * src_alpha / 255;
+ }
+ if (src_alpha) {
+ if (pIccTransform) {
+ pIccModule->TranslateScanline(pIccTransform, dest_scan, src_scan,
+ 1);
+ } else {
+ *dest_scan = FXRGB2GRAY(src_scan[2], src_scan[1], *src_scan);
+ }
+ *dst_alpha_scan = src_alpha;
+ }
+ dest_scan++;
+ dst_alpha_scan++;
+ src_scan += 4;
+ continue;
+ }
+ uint8_t src_alpha = src_scan[3];
+ if (clip_scan) {
+ src_alpha = clip_scan[col] * src_alpha / 255;
+ }
+ if (src_alpha == 0) {
+ dest_scan++;
+ dst_alpha_scan++;
+ src_scan += 4;
+ continue;
+ }
+ *dst_alpha_scan = FXDIB_ALPHA_UNION(back_alpha, src_alpha);
+ int alpha_ratio = src_alpha * 255 / (*dst_alpha_scan);
+ uint8_t gray;
+ if (pIccTransform) {
+ pIccModule->TranslateScanline(pIccTransform, &gray, src_scan, 1);
+ } else {
+ gray = FXRGB2GRAY(src_scan[2], src_scan[1], *src_scan);
+ }
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, alpha_ratio);
+ dest_scan++;
+ dst_alpha_scan++;
+ src_scan += 4;
}
}
-void _CompositeRow_Argb2Argb(uint8_t* dest_scan, const uint8_t* src_scan, int pixel_count, int blend_type, const uint8_t* clip_scan,
- uint8_t* dest_alpha_scan, const uint8_t* src_alpha_scan)
-{
- int blended_colors[3];
+inline void _CompositeRow_Argb2Gray(uint8_t* dest_scan,
+ const uint8_t* src_scan,
+ int pixel_count,
+ int blend_type,
+ const uint8_t* clip_scan,
+ const uint8_t* src_alpha_scan,
+ void* pIccTransform) {
+ ICodec_IccModule* pIccModule = NULL;
+ uint8_t gray;
+ if (pIccTransform) {
+ pIccModule = CFX_GEModule::Get()->GetCodecModule()->GetIccModule();
+ }
+ if (blend_type) {
FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE;
- if (dest_alpha_scan == NULL) {
- if (src_alpha_scan == NULL) {
- uint8_t back_alpha = 0;
- for (int col = 0; col < pixel_count; col ++) {
- back_alpha = dest_scan[3];
- if (back_alpha == 0) {
- if (clip_scan) {
- int src_alpha = clip_scan[col] * src_scan[3] / 255;
- FXARGB_SETDIB(dest_scan, (FXARGB_GETDIB(src_scan) & 0xffffff) | (src_alpha << 24));
- } else {
- FXARGB_COPY(dest_scan, src_scan);
- }
- dest_scan += 4;
- src_scan += 4;
- continue;
- }
- uint8_t src_alpha;
- if (clip_scan == NULL) {
- src_alpha = src_scan[3];
- } else {
- src_alpha = clip_scan[col] * src_scan[3] / 255;
- }
- if (src_alpha == 0) {
- dest_scan += 4;
- src_scan += 4;
- continue;
- }
- uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 255;
- dest_scan[3] = dest_alpha;
- int alpha_ratio = src_alpha * 255 / dest_alpha;
- if (bNonseparableBlend) {
- _RGB_Blend(blend_type, src_scan, dest_scan, blended_colors);
- }
- for (int color = 0; color < 3; color ++) {
- if (blend_type) {
- int blended = bNonseparableBlend ? blended_colors[color] :
- _BLEND(blend_type, *dest_scan, *src_scan);
- blended = FXDIB_ALPHA_MERGE(*src_scan, blended, back_alpha);
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended, alpha_ratio);
- } else {
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, *src_scan, alpha_ratio);
- }
- dest_scan ++;
- src_scan ++;
- }
- dest_scan ++;
- src_scan ++;
- }
- } else {
- for (int col = 0; col < pixel_count; col ++) {
- uint8_t back_alpha = dest_scan[3];
- if (back_alpha == 0) {
- if (clip_scan) {
- int src_alpha = clip_scan[col] * (*src_alpha_scan) / 255;
- FXARGB_SETDIB(dest_scan, FXARGB_MAKE((src_alpha << 24), src_scan[2], src_scan[1], *src_scan));
- } else {
- FXARGB_SETDIB(dest_scan, FXARGB_MAKE((*src_alpha_scan << 24), src_scan[2], src_scan[1], *src_scan));
- }
- dest_scan += 4;
- src_scan += 3;
- src_alpha_scan ++;
- continue;
- }
- uint8_t src_alpha;
- if (clip_scan == NULL) {
- src_alpha = *src_alpha_scan ++;
- } else {
- src_alpha = clip_scan[col] * (*src_alpha_scan ++) / 255;
- }
- if (src_alpha == 0) {
- dest_scan += 4;
- src_scan += 3;
- continue;
- }
- uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 255;
- dest_scan[3] = dest_alpha;
- int alpha_ratio = src_alpha * 255 / dest_alpha;
- if (bNonseparableBlend) {
- _RGB_Blend(blend_type, src_scan, dest_scan, blended_colors);
- }
- for (int color = 0; color < 3; color ++) {
- if (blend_type) {
- int blended = bNonseparableBlend ? blended_colors[color] :
- _BLEND(blend_type, *dest_scan, *src_scan);
- blended = FXDIB_ALPHA_MERGE(*src_scan, blended, back_alpha);
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended, alpha_ratio);
- } else {
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, *src_scan, alpha_ratio);
- }
- dest_scan ++;
- src_scan ++;
- }
- dest_scan ++;
- }
+ int blended_color;
+ if (src_alpha_scan) {
+ for (int col = 0; col < pixel_count; col++) {
+ int src_alpha = *src_alpha_scan++;
+ if (clip_scan) {
+ src_alpha = clip_scan[col] * src_alpha / 255;
}
- } else {
- if (src_alpha_scan) {
- for (int col = 0; col < pixel_count; col ++) {
- uint8_t back_alpha = *dest_alpha_scan;
- if (back_alpha == 0) {
- if (clip_scan) {
- int src_alpha = clip_scan[col] * (*src_alpha_scan) / 255;
- *dest_alpha_scan = src_alpha;
- *dest_scan++ = *src_scan++;
- *dest_scan++ = *src_scan++;
- *dest_scan++ = *src_scan++;
- } else {
- *dest_alpha_scan = *src_alpha_scan;
- *dest_scan++ = *src_scan++;
- *dest_scan++ = *src_scan++;
- *dest_scan++ = *src_scan++;
- }
- dest_alpha_scan ++;
- src_alpha_scan ++;
- continue;
- }
- uint8_t src_alpha;
- if (clip_scan == NULL) {
- src_alpha = *src_alpha_scan ++;
- } else {
- src_alpha = clip_scan[col] * (*src_alpha_scan ++) / 255;
- }
- if (src_alpha == 0) {
- dest_scan += 3;
- src_scan += 3;
- dest_alpha_scan ++;
- continue;
- }
- uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 255;
- *dest_alpha_scan ++ = dest_alpha;
- int alpha_ratio = src_alpha * 255 / dest_alpha;
- if (bNonseparableBlend) {
- _RGB_Blend(blend_type, src_scan, dest_scan, blended_colors);
- }
- for (int color = 0; color < 3; color ++) {
- if (blend_type) {
- int blended = bNonseparableBlend ? blended_colors[color] :
- _BLEND(blend_type, *dest_scan, *src_scan);
- blended = FXDIB_ALPHA_MERGE(*src_scan, blended, back_alpha);
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended, alpha_ratio);
- } else {
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, *src_scan, alpha_ratio);
- }
- dest_scan ++;
- src_scan ++;
- }
- }
+ if (src_alpha) {
+ if (pIccTransform) {
+ pIccModule->TranslateScanline(pIccTransform, &gray, src_scan, 1);
+ } else {
+ gray = FXRGB2GRAY(src_scan[2], src_scan[1], *src_scan);
+ }
+ if (bNonseparableBlend) {
+ blended_color =
+ blend_type == FXDIB_BLEND_LUMINOSITY ? gray : *dest_scan;
+ }
+ gray = bNonseparableBlend ? blended_color
+ : _BLEND(blend_type, *dest_scan, gray);
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, src_alpha);
+ }
+ dest_scan++;
+ src_scan += 3;
+ }
+ } else
+ for (int col = 0; col < pixel_count; col++) {
+ int src_alpha = src_scan[3];
+ if (clip_scan) {
+ src_alpha = clip_scan[col] * src_alpha / 255;
+ }
+ if (src_alpha) {
+ if (pIccTransform) {
+ pIccModule->TranslateScanline(pIccTransform, &gray, src_scan, 1);
+ } else {
+ gray = FXRGB2GRAY(src_scan[2], src_scan[1], *src_scan);
+ }
+ if (bNonseparableBlend) {
+ blended_color =
+ blend_type == FXDIB_BLEND_LUMINOSITY ? gray : *dest_scan;
+ }
+ gray = bNonseparableBlend ? blended_color
+ : _BLEND(blend_type, *dest_scan, gray);
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, src_alpha);
+ }
+ dest_scan++;
+ src_scan += 4;
+ }
+ return;
+ }
+ if (src_alpha_scan) {
+ for (int col = 0; col < pixel_count; col++) {
+ int src_alpha = *src_alpha_scan++;
+ if (clip_scan) {
+ src_alpha = clip_scan[col] * src_alpha / 255;
+ }
+ if (src_alpha) {
+ if (pIccTransform) {
+ pIccModule->TranslateScanline(pIccTransform, &gray, src_scan, 1);
} else {
- for (int col = 0; col < pixel_count; col ++) {
- uint8_t back_alpha = *dest_alpha_scan;
- if (back_alpha == 0) {
- if (clip_scan) {
- int src_alpha = clip_scan[col] * src_scan[3] / 255;
- *dest_alpha_scan = src_alpha;
- *dest_scan++ = *src_scan++;
- *dest_scan++ = *src_scan++;
- *dest_scan++ = *src_scan++;
- } else {
- *dest_alpha_scan = src_scan[3];
- *dest_scan++ = *src_scan++;
- *dest_scan++ = *src_scan++;
- *dest_scan++ = *src_scan++;
- }
- dest_alpha_scan ++;
- src_scan ++;
- continue;
- }
- uint8_t src_alpha;
- if (clip_scan == NULL) {
- src_alpha = src_scan[3];
- } else {
- src_alpha = clip_scan[col] * src_scan[3] / 255;
- }
- if (src_alpha == 0) {
- dest_scan += 3;
- src_scan += 4;
- dest_alpha_scan ++;
- continue;
- }
- uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 255;
- *dest_alpha_scan++ = dest_alpha;
- int alpha_ratio = src_alpha * 255 / dest_alpha;
- if (bNonseparableBlend) {
- _RGB_Blend(blend_type, src_scan, dest_scan, blended_colors);
- }
- for (int color = 0; color < 3; color ++) {
- if (blend_type) {
- int blended = bNonseparableBlend ? blended_colors[color] :
- _BLEND(blend_type, *dest_scan, *src_scan);
- blended = FXDIB_ALPHA_MERGE(*src_scan, blended, back_alpha);
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended, alpha_ratio);
- } else {
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, *src_scan, alpha_ratio);
- }
- dest_scan ++;
- src_scan ++;
- }
- src_scan ++;
- }
+ gray = FXRGB2GRAY(src_scan[2], src_scan[1], *src_scan);
+ }
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, src_alpha);
+ }
+ dest_scan++;
+ src_scan += 3;
+ }
+ } else
+ for (int col = 0; col < pixel_count; col++) {
+ int src_alpha = src_scan[3];
+ if (clip_scan) {
+ src_alpha = clip_scan[col] * src_alpha / 255;
+ }
+ if (src_alpha) {
+ if (pIccTransform) {
+ pIccModule->TranslateScanline(pIccTransform, &gray, src_scan, 1);
+ } else {
+ gray = FXRGB2GRAY(src_scan[2], src_scan[1], *src_scan);
}
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, src_alpha);
+ }
+ dest_scan++;
+ src_scan += 4;
}
}
-void _CompositeRow_Rgb2Argb_Blend_NoClip(uint8_t* dest_scan, const uint8_t* src_scan, int width, int blend_type, int src_Bpp,
- uint8_t* dest_alpha_scan)
-{
- int blended_colors[3];
+inline void _CompositeRow_Rgb2Gray(uint8_t* dest_scan,
+ const uint8_t* src_scan,
+ int src_Bpp,
+ int pixel_count,
+ int blend_type,
+ const uint8_t* clip_scan,
+ void* pIccTransform) {
+ ICodec_IccModule* pIccModule = NULL;
+ uint8_t gray;
+ if (pIccTransform) {
+ pIccModule = CFX_GEModule::Get()->GetCodecModule()->GetIccModule();
+ }
+ if (blend_type) {
FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE;
- int src_gap = src_Bpp - 3;
- if (dest_alpha_scan == NULL) {
- for (int col = 0; col < width; col ++) {
- uint8_t back_alpha = dest_scan[3];
- if (back_alpha == 0) {
- if (src_Bpp == 4) {
- FXARGB_SETDIB(dest_scan, 0xff000000 | FXARGB_GETDIB(src_scan));
- } else {
- FXARGB_SETDIB(dest_scan, FXARGB_MAKE(0xff, src_scan[2], src_scan[1], src_scan[0]));
- }
- dest_scan += 4;
- src_scan += src_Bpp;
- continue;
- }
- dest_scan[3] = 0xff;
- if (bNonseparableBlend) {
- _RGB_Blend(blend_type, src_scan, dest_scan, blended_colors);
- }
- for (int color = 0; color < 3; color ++) {
- int src_color = *src_scan;
- int blended = bNonseparableBlend ? blended_colors[color] :
- _BLEND(blend_type, *dest_scan, src_color);
- *dest_scan = FXDIB_ALPHA_MERGE(src_color, blended, back_alpha);
- dest_scan ++;
- src_scan ++;
- }
- dest_scan ++;
- src_scan += src_gap;
- }
+ int blended_color;
+ for (int col = 0; col < pixel_count; col++) {
+ if (pIccTransform) {
+ pIccModule->TranslateScanline(pIccTransform, &gray, src_scan, 1);
+ } else {
+ gray = FXRGB2GRAY(src_scan[2], src_scan[1], *src_scan);
+ }
+ if (bNonseparableBlend) {
+ blended_color =
+ blend_type == FXDIB_BLEND_LUMINOSITY ? gray : *dest_scan;
+ }
+ gray = bNonseparableBlend ? blended_color
+ : _BLEND(blend_type, *dest_scan, gray);
+ if (clip_scan && clip_scan[col] < 255) {
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, clip_scan[col]);
+ } else {
+ *dest_scan = gray;
+ }
+ dest_scan++;
+ src_scan += src_Bpp;
+ }
+ return;
+ }
+ for (int col = 0; col < pixel_count; col++) {
+ if (pIccTransform) {
+ pIccModule->TranslateScanline(pIccTransform, &gray, src_scan, 1);
} else {
- for (int col = 0; col < width; col ++) {
- uint8_t back_alpha = *dest_alpha_scan;
- if (back_alpha == 0) {
- *dest_scan++ = *src_scan++;
- *dest_scan++ = *src_scan++;
- *dest_scan++ = *src_scan++;
- *dest_alpha_scan++ = 0xff;
- src_scan += src_gap;
- continue;
- }
- *dest_alpha_scan++ = 0xff;
- if (bNonseparableBlend) {
- _RGB_Blend(blend_type, src_scan, dest_scan, blended_colors);
- }
- for (int color = 0; color < 3; color ++) {
- int src_color = *src_scan;
- int blended = bNonseparableBlend ? blended_colors[color] :
- _BLEND(blend_type, *dest_scan, src_color);
- *dest_scan = FXDIB_ALPHA_MERGE(src_color, blended, back_alpha);
- dest_scan ++;
- src_scan ++;
- }
- src_scan += src_gap;
- }
+ gray = FXRGB2GRAY(src_scan[2], src_scan[1], *src_scan);
+ }
+ if (clip_scan && clip_scan[col] < 255) {
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, clip_scan[col]);
+ } else {
+ *dest_scan = gray;
}
+ dest_scan++;
+ src_scan += src_Bpp;
+ }
}
-inline void _CompositeRow_Rgb2Argb_Blend_Clip(uint8_t* dest_scan, const uint8_t* src_scan, int width, int blend_type, int src_Bpp, const uint8_t* clip_scan,
- uint8_t* dest_alpha_scan)
-{
- int blended_colors[3];
+void _CompositeRow_Rgb2Graya(uint8_t* dest_scan,
+ const uint8_t* src_scan,
+ int src_Bpp,
+ int pixel_count,
+ int blend_type,
+ const uint8_t* clip_scan,
+ uint8_t* dest_alpha_scan,
+ void* pIccTransform) {
+ ICodec_IccModule* pIccModule = NULL;
+ if (pIccTransform) {
+ pIccModule = CFX_GEModule::Get()->GetCodecModule()->GetIccModule();
+ }
+ if (blend_type) {
+ int blended_color;
FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE;
- int src_gap = src_Bpp - 3;
- if (dest_alpha_scan == NULL) {
- for (int col = 0; col < width; col ++) {
- int src_alpha = *clip_scan ++;
- uint8_t back_alpha = dest_scan[3];
- if (back_alpha == 0) {
- *dest_scan++ = *src_scan++;
- *dest_scan++ = *src_scan++;
- *dest_scan++ = *src_scan++;
- src_scan += src_gap;
- dest_scan ++;
- continue;
- }
- if (src_alpha == 0) {
- dest_scan += 4;
- src_scan += src_Bpp;
- continue;
- }
- uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 255;
- dest_scan[3] = dest_alpha;
- int alpha_ratio = src_alpha * 255 / dest_alpha;
- if (bNonseparableBlend) {
- _RGB_Blend(blend_type, src_scan, dest_scan, blended_colors);
- }
- for (int color = 0; color < 3; color ++) {
- int src_color = *src_scan;
- int blended = bNonseparableBlend ? blended_colors[color] :
- _BLEND(blend_type, *dest_scan, src_color);
- blended = FXDIB_ALPHA_MERGE(src_color, blended, back_alpha);
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended, alpha_ratio);
- dest_scan ++;
- src_scan ++;
- }
- dest_scan ++;
- src_scan += src_gap;
+ for (int col = 0; col < pixel_count; col++) {
+ int back_alpha = *dest_alpha_scan;
+ if (back_alpha == 0) {
+ if (pIccTransform) {
+ pIccModule->TranslateScanline(pIccTransform, dest_scan, src_scan, 1);
+ } else {
+ *dest_scan = FXRGB2GRAY(src_scan[2], src_scan[1], *src_scan);
}
+ dest_scan++;
+ dest_alpha_scan++;
+ src_scan += src_Bpp;
+ continue;
+ }
+ int src_alpha = 255;
+ if (clip_scan) {
+ src_alpha = clip_scan[col];
+ }
+ if (src_alpha == 0) {
+ dest_scan++;
+ dest_alpha_scan++;
+ src_scan += src_Bpp;
+ continue;
+ }
+ uint8_t dest_alpha =
+ back_alpha + src_alpha - back_alpha * src_alpha / 255;
+ *dest_alpha_scan++ = dest_alpha;
+ int alpha_ratio = src_alpha * 255 / dest_alpha;
+ uint8_t gray;
+ if (pIccTransform) {
+ pIccModule->TranslateScanline(pIccTransform, &gray, src_scan, 1);
+ } else {
+ gray = FXRGB2GRAY(src_scan[2], src_scan[1], *src_scan);
+ }
+ if (bNonseparableBlend) {
+ blended_color =
+ blend_type == FXDIB_BLEND_LUMINOSITY ? gray : *dest_scan;
+ }
+ gray = bNonseparableBlend ? blended_color
+ : _BLEND(blend_type, *dest_scan, gray);
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, alpha_ratio);
+ dest_scan++;
+ src_scan += src_Bpp;
+ }
+ return;
+ }
+ for (int col = 0; col < pixel_count; col++) {
+ int src_alpha = 255;
+ if (clip_scan) {
+ src_alpha = clip_scan[col];
+ }
+ if (src_alpha == 255) {
+ if (pIccTransform) {
+ pIccModule->TranslateScanline(pIccTransform, dest_scan, src_scan, 1);
+ } else {
+ *dest_scan = FXRGB2GRAY(src_scan[2], src_scan[1], *src_scan);
+ }
+ dest_scan++;
+ *dest_alpha_scan++ = 255;
+ src_scan += src_Bpp;
+ continue;
+ }
+ if (src_alpha == 0) {
+ dest_scan++;
+ dest_alpha_scan++;
+ src_scan += src_Bpp;
+ continue;
+ }
+ int back_alpha = *dest_alpha_scan;
+ uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 255;
+ *dest_alpha_scan++ = dest_alpha;
+ int alpha_ratio = src_alpha * 255 / dest_alpha;
+ uint8_t gray;
+ if (pIccTransform) {
+ pIccModule->TranslateScanline(pIccTransform, &gray, src_scan, 1);
} else {
- for (int col = 0; col < width; col ++) {
- int src_alpha = *clip_scan ++;
- uint8_t back_alpha = *dest_alpha_scan;
- if (back_alpha == 0) {
- *dest_scan++ = *src_scan++;
- *dest_scan++ = *src_scan++;
- *dest_scan++ = *src_scan++;
- src_scan += src_gap;
- dest_alpha_scan++;
- continue;
- }
- if (src_alpha == 0) {
- dest_scan += 3;
- dest_alpha_scan++;
- src_scan += src_Bpp;
- continue;
- }
- uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 255;
- *dest_alpha_scan++ = dest_alpha;
- int alpha_ratio = src_alpha * 255 / dest_alpha;
- if (bNonseparableBlend) {
- _RGB_Blend(blend_type, src_scan, dest_scan, blended_colors);
- }
- for (int color = 0; color < 3; color ++) {
- int src_color = *src_scan;
- int blended = bNonseparableBlend ? blended_colors[color] :
- _BLEND(blend_type, *dest_scan, src_color);
- blended = FXDIB_ALPHA_MERGE(src_color, blended, back_alpha);
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended, alpha_ratio);
- dest_scan ++;
- src_scan ++;
- }
- src_scan += src_gap;
- }
+ gray = FXRGB2GRAY(src_scan[2], src_scan[1], *src_scan);
}
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, alpha_ratio);
+ dest_scan++;
+ src_scan += src_Bpp;
+ }
}
-inline void _CompositeRow_Rgb2Argb_NoBlend_Clip(uint8_t* dest_scan, const uint8_t* src_scan, int width, int src_Bpp, const uint8_t* clip_scan,
- uint8_t* dest_alpha_scan)
-{
- int src_gap = src_Bpp - 3;
- if (dest_alpha_scan == NULL) {
- for (int col = 0; col < width; col ++) {
- int src_alpha = clip_scan[col];
- if (src_alpha == 255) {
- *dest_scan++ = *src_scan++;
- *dest_scan++ = *src_scan++;
- *dest_scan++ = *src_scan++;
- *dest_scan++ = 255;
- src_scan += src_gap;
- continue;
- }
- if (src_alpha == 0) {
- dest_scan += 4;
- src_scan += src_Bpp;
- continue;
- }
- int back_alpha = dest_scan[3];
- uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 255;
- dest_scan[3] = dest_alpha;
- int alpha_ratio = src_alpha * 255 / dest_alpha;
- for (int color = 0; color < 3; color ++) {
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, *src_scan, alpha_ratio);
- dest_scan ++;
- src_scan ++;
- }
- dest_scan ++;
- src_scan += src_gap;
+void _CompositeRow_Argb2Argb(uint8_t* dest_scan,
+ const uint8_t* src_scan,
+ int pixel_count,
+ int blend_type,
+ const uint8_t* clip_scan,
+ uint8_t* dest_alpha_scan,
+ const uint8_t* src_alpha_scan) {
+ int blended_colors[3];
+ FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE;
+ if (dest_alpha_scan == NULL) {
+ if (src_alpha_scan == NULL) {
+ uint8_t back_alpha = 0;
+ for (int col = 0; col < pixel_count; col++) {
+ back_alpha = dest_scan[3];
+ if (back_alpha == 0) {
+ if (clip_scan) {
+ int src_alpha = clip_scan[col] * src_scan[3] / 255;
+ FXARGB_SETDIB(dest_scan, (FXARGB_GETDIB(src_scan) & 0xffffff) |
+ (src_alpha << 24));
+ } else {
+ FXARGB_COPY(dest_scan, src_scan);
+ }
+ dest_scan += 4;
+ src_scan += 4;
+ continue;
}
- } else {
- for (int col = 0; col < width; col ++) {
- int src_alpha = clip_scan[col];
- if (src_alpha == 255) {
- *dest_scan++ = *src_scan++;
- *dest_scan++ = *src_scan++;
- *dest_scan++ = *src_scan++;
- *dest_alpha_scan++ = 255;
- src_scan += src_gap;
- continue;
- }
- if (src_alpha == 0) {
- dest_scan += 3;
- dest_alpha_scan ++;
- src_scan += src_Bpp;
- continue;
- }
- int back_alpha = *dest_alpha_scan;
- uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 255;
- *dest_alpha_scan ++ = dest_alpha;
- int alpha_ratio = src_alpha * 255 / dest_alpha;
- for (int color = 0; color < 3; color ++) {
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, *src_scan, alpha_ratio);
- dest_scan ++;
- src_scan ++;
- }
- src_scan += src_gap;
+ uint8_t src_alpha;
+ if (clip_scan == NULL) {
+ src_alpha = src_scan[3];
+ } else {
+ src_alpha = clip_scan[col] * src_scan[3] / 255;
}
- }
-}
-inline void _CompositeRow_Rgb2Argb_NoBlend_NoClip(uint8_t* dest_scan, const uint8_t* src_scan, int width, int src_Bpp,
- uint8_t* dest_alpha_scan)
-{
- if (dest_alpha_scan == NULL) {
- for (int col = 0; col < width; col ++) {
- if (src_Bpp == 4) {
- FXARGB_SETDIB(dest_scan, 0xff000000 | FXARGB_GETDIB(src_scan));
- } else {
- FXARGB_SETDIB(dest_scan, FXARGB_MAKE(0xff, src_scan[2], src_scan[1], src_scan[0]));
- }
- dest_scan += 4;
- src_scan += src_Bpp;
+ if (src_alpha == 0) {
+ dest_scan += 4;
+ src_scan += 4;
+ continue;
+ }
+ uint8_t dest_alpha =
+ back_alpha + src_alpha - back_alpha * src_alpha / 255;
+ dest_scan[3] = dest_alpha;
+ int alpha_ratio = src_alpha * 255 / dest_alpha;
+ if (bNonseparableBlend) {
+ _RGB_Blend(blend_type, src_scan, dest_scan, blended_colors);
+ }
+ for (int color = 0; color < 3; color++) {
+ if (blend_type) {
+ int blended = bNonseparableBlend
+ ? blended_colors[color]
+ : _BLEND(blend_type, *dest_scan, *src_scan);
+ blended = FXDIB_ALPHA_MERGE(*src_scan, blended, back_alpha);
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended, alpha_ratio);
+ } else {
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, *src_scan, alpha_ratio);
+ }
+ dest_scan++;
+ src_scan++;
}
+ dest_scan++;
+ src_scan++;
+ }
} else {
- int src_gap = src_Bpp - 3;
- for (int col = 0; col < width; col ++) {
+ for (int col = 0; col < pixel_count; col++) {
+ uint8_t back_alpha = dest_scan[3];
+ if (back_alpha == 0) {
+ if (clip_scan) {
+ int src_alpha = clip_scan[col] * (*src_alpha_scan) / 255;
+ FXARGB_SETDIB(dest_scan, FXARGB_MAKE((src_alpha << 24), src_scan[2],
+ src_scan[1], *src_scan));
+ } else {
+ FXARGB_SETDIB(dest_scan,
+ FXARGB_MAKE((*src_alpha_scan << 24), src_scan[2],
+ src_scan[1], *src_scan));
+ }
+ dest_scan += 4;
+ src_scan += 3;
+ src_alpha_scan++;
+ continue;
+ }
+ uint8_t src_alpha;
+ if (clip_scan == NULL) {
+ src_alpha = *src_alpha_scan++;
+ } else {
+ src_alpha = clip_scan[col] * (*src_alpha_scan++) / 255;
+ }
+ if (src_alpha == 0) {
+ dest_scan += 4;
+ src_scan += 3;
+ continue;
+ }
+ uint8_t dest_alpha =
+ back_alpha + src_alpha - back_alpha * src_alpha / 255;
+ dest_scan[3] = dest_alpha;
+ int alpha_ratio = src_alpha * 255 / dest_alpha;
+ if (bNonseparableBlend) {
+ _RGB_Blend(blend_type, src_scan, dest_scan, blended_colors);
+ }
+ for (int color = 0; color < 3; color++) {
+ if (blend_type) {
+ int blended = bNonseparableBlend
+ ? blended_colors[color]
+ : _BLEND(blend_type, *dest_scan, *src_scan);
+ blended = FXDIB_ALPHA_MERGE(*src_scan, blended, back_alpha);
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended, alpha_ratio);
+ } else {
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, *src_scan, alpha_ratio);
+ }
+ dest_scan++;
+ src_scan++;
+ }
+ dest_scan++;
+ }
+ }
+ } else {
+ if (src_alpha_scan) {
+ for (int col = 0; col < pixel_count; col++) {
+ uint8_t back_alpha = *dest_alpha_scan;
+ if (back_alpha == 0) {
+ if (clip_scan) {
+ int src_alpha = clip_scan[col] * (*src_alpha_scan) / 255;
+ *dest_alpha_scan = src_alpha;
+ *dest_scan++ = *src_scan++;
*dest_scan++ = *src_scan++;
*dest_scan++ = *src_scan++;
+ } else {
+ *dest_alpha_scan = *src_alpha_scan;
*dest_scan++ = *src_scan++;
- *dest_alpha_scan++ = 0xff;
- src_scan += src_gap;
+ *dest_scan++ = *src_scan++;
+ *dest_scan++ = *src_scan++;
+ }
+ dest_alpha_scan++;
+ src_alpha_scan++;
+ continue;
}
- }
-}
-inline void _CompositeRow_Argb2Rgb_Blend(uint8_t* dest_scan, const uint8_t* src_scan, int width, int blend_type, int dest_Bpp, const uint8_t* clip_scan,
- const uint8_t* src_alpha_scan)
-{
- int blended_colors[3];
- FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE;
- int dest_gap = dest_Bpp - 3;
- if (src_alpha_scan == NULL) {
- for (int col = 0; col < width; col ++) {
- uint8_t src_alpha;
- if (clip_scan) {
- src_alpha = src_scan[3] * (*clip_scan++) / 255;
- } else {
- src_alpha = src_scan[3];
- }
- if (src_alpha == 0) {
- dest_scan += dest_Bpp;
- src_scan += 4;
- continue;
- }
- if (bNonseparableBlend) {
- _RGB_Blend(blend_type, src_scan, dest_scan, blended_colors);
- }
- for (int color = 0; color < 3; color ++) {
- int back_color = *dest_scan;
- int blended = bNonseparableBlend ? blended_colors[color] :
- _BLEND(blend_type, back_color, *src_scan);
- *dest_scan = FXDIB_ALPHA_MERGE(back_color, blended, src_alpha);
- dest_scan ++;
- src_scan ++;
- }
- dest_scan += dest_gap;
- src_scan ++;
+ uint8_t src_alpha;
+ if (clip_scan == NULL) {
+ src_alpha = *src_alpha_scan++;
+ } else {
+ src_alpha = clip_scan[col] * (*src_alpha_scan++) / 255;
}
- } else {
- for (int col = 0; col < width; col ++) {
- uint8_t src_alpha;
- if (clip_scan) {
- src_alpha = (*src_alpha_scan++) * (*clip_scan++) / 255;
- } else {
- src_alpha = *src_alpha_scan++;
- }
- if (src_alpha == 0) {
- dest_scan += dest_Bpp;
- src_scan += 3;
- continue;
- }
- if (bNonseparableBlend) {
- _RGB_Blend(blend_type, src_scan, dest_scan, blended_colors);
- }
- for (int color = 0; color < 3; color ++) {
- int back_color = *dest_scan;
- int blended = bNonseparableBlend ? blended_colors[color] :
- _BLEND(blend_type, back_color, *src_scan);
- *dest_scan = FXDIB_ALPHA_MERGE(back_color, blended, src_alpha);
- dest_scan ++;
- src_scan ++;
- }
- dest_scan += dest_gap;
+ if (src_alpha == 0) {
+ dest_scan += 3;
+ src_scan += 3;
+ dest_alpha_scan++;
+ continue;
}
- }
-}
-inline void _CompositeRow_Argb2Rgb_NoBlend(uint8_t* dest_scan, const uint8_t* src_scan, int width, int dest_Bpp, const uint8_t* clip_scan,
- const uint8_t* src_alpha_scan)
-{
- int dest_gap = dest_Bpp - 3;
- if (src_alpha_scan == NULL) {
- for (int col = 0; col < width; col ++) {
- uint8_t src_alpha;
- if (clip_scan) {
- src_alpha = src_scan[3] * (*clip_scan++) / 255;
- } else {
- src_alpha = src_scan[3];
- }
- if (src_alpha == 255) {
- *dest_scan++ = *src_scan++;
- *dest_scan++ = *src_scan++;
- *dest_scan++ = *src_scan++;
- dest_scan += dest_gap;
- src_scan ++;
- continue;
- }
- if (src_alpha == 0) {
- dest_scan += dest_Bpp;
- src_scan += 4;
- continue;
- }
- for (int color = 0; color < 3; color ++) {
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, *src_scan, src_alpha);
- dest_scan ++;
- src_scan ++;
- }
- dest_scan += dest_gap;
- src_scan ++;
+ uint8_t dest_alpha =
+ back_alpha + src_alpha - back_alpha * src_alpha / 255;
+ *dest_alpha_scan++ = dest_alpha;
+ int alpha_ratio = src_alpha * 255 / dest_alpha;
+ if (bNonseparableBlend) {
+ _RGB_Blend(blend_type, src_scan, dest_scan, blended_colors);
+ }
+ for (int color = 0; color < 3; color++) {
+ if (blend_type) {
+ int blended = bNonseparableBlend
+ ? blended_colors[color]
+ : _BLEND(blend_type, *dest_scan, *src_scan);
+ blended = FXDIB_ALPHA_MERGE(*src_scan, blended, back_alpha);
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended, alpha_ratio);
+ } else {
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, *src_scan, alpha_ratio);
+ }
+ dest_scan++;
+ src_scan++;
}
+ }
} else {
- for (int col = 0; col < width; col ++) {
- uint8_t src_alpha;
- if (clip_scan) {
- src_alpha = (*src_alpha_scan++) * (*clip_scan++) / 255;
- } else {
- src_alpha = *src_alpha_scan++;
- }
- if (src_alpha == 255) {
- *dest_scan++ = *src_scan++;
- *dest_scan++ = *src_scan++;
- *dest_scan++ = *src_scan++;
- dest_scan += dest_gap;
- continue;
- }
- if (src_alpha == 0) {
- dest_scan += dest_Bpp;
- src_scan += 3;
- continue;
- }
- for (int color = 0; color < 3; color ++) {
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, *src_scan, src_alpha);
- dest_scan ++;
- src_scan ++;
- }
- dest_scan += dest_gap;
- }
- }
-}
-inline void _CompositeRow_Rgb2Rgb_Blend_NoClip(uint8_t* dest_scan, const uint8_t* src_scan, int width, int blend_type, int dest_Bpp, int src_Bpp)
-{
- int blended_colors[3];
- FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE;
- int dest_gap = dest_Bpp - 3;
- int src_gap = src_Bpp - 3;
- for (int col = 0; col < width; col ++) {
- if (bNonseparableBlend) {
- _RGB_Blend(blend_type, src_scan, dest_scan, blended_colors);
+ for (int col = 0; col < pixel_count; col++) {
+ uint8_t back_alpha = *dest_alpha_scan;
+ if (back_alpha == 0) {
+ if (clip_scan) {
+ int src_alpha = clip_scan[col] * src_scan[3] / 255;
+ *dest_alpha_scan = src_alpha;
+ *dest_scan++ = *src_scan++;
+ *dest_scan++ = *src_scan++;
+ *dest_scan++ = *src_scan++;
+ } else {
+ *dest_alpha_scan = src_scan[3];
+ *dest_scan++ = *src_scan++;
+ *dest_scan++ = *src_scan++;
+ *dest_scan++ = *src_scan++;
+ }
+ dest_alpha_scan++;
+ src_scan++;
+ continue;
}
- for (int color = 0; color < 3; color ++) {
- int back_color = *dest_scan;
- int src_color = *src_scan;
- int blended = bNonseparableBlend ? blended_colors[color] :
- _BLEND(blend_type, back_color, src_color);
- *dest_scan = blended;
- dest_scan ++;
- src_scan ++;
+ uint8_t src_alpha;
+ if (clip_scan == NULL) {
+ src_alpha = src_scan[3];
+ } else {
+ src_alpha = clip_scan[col] * src_scan[3] / 255;
}
- dest_scan += dest_gap;
- src_scan += src_gap;
- }
-}
-inline void _CompositeRow_Rgb2Rgb_Blend_Clip(uint8_t* dest_scan, const uint8_t* src_scan, int width, int blend_type, int dest_Bpp, int src_Bpp, const uint8_t* clip_scan)
-{
- int blended_colors[3];
- FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE;
- int dest_gap = dest_Bpp - 3;
- int src_gap = src_Bpp - 3;
- for (int col = 0; col < width; col ++) {
- uint8_t src_alpha = *clip_scan ++;
if (src_alpha == 0) {
- dest_scan += dest_Bpp;
- src_scan += src_Bpp;
- continue;
+ dest_scan += 3;
+ src_scan += 4;
+ dest_alpha_scan++;
+ continue;
}
+ uint8_t dest_alpha =
+ back_alpha + src_alpha - back_alpha * src_alpha / 255;
+ *dest_alpha_scan++ = dest_alpha;
+ int alpha_ratio = src_alpha * 255 / dest_alpha;
if (bNonseparableBlend) {
- _RGB_Blend(blend_type, src_scan, dest_scan, blended_colors);
+ _RGB_Blend(blend_type, src_scan, dest_scan, blended_colors);
+ }
+ for (int color = 0; color < 3; color++) {
+ if (blend_type) {
+ int blended = bNonseparableBlend
+ ? blended_colors[color]
+ : _BLEND(blend_type, *dest_scan, *src_scan);
+ blended = FXDIB_ALPHA_MERGE(*src_scan, blended, back_alpha);
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended, alpha_ratio);
+ } else {
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, *src_scan, alpha_ratio);
+ }
+ dest_scan++;
+ src_scan++;
}
- for (int color = 0; color < 3; color ++) {
- int src_color = *src_scan;
- int back_color = *dest_scan;
- int blended = bNonseparableBlend ? blended_colors[color] :
- _BLEND(blend_type, back_color, src_color);
- *dest_scan = FXDIB_ALPHA_MERGE(back_color, blended, src_alpha);
- dest_scan ++;
- src_scan ++;
+ src_scan++;
+ }
+ }
+ }
+}
+void _CompositeRow_Rgb2Argb_Blend_NoClip(uint8_t* dest_scan,
+ const uint8_t* src_scan,
+ int width,
+ int blend_type,
+ int src_Bpp,
+ uint8_t* dest_alpha_scan) {
+ int blended_colors[3];
+ FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE;
+ int src_gap = src_Bpp - 3;
+ if (dest_alpha_scan == NULL) {
+ for (int col = 0; col < width; col++) {
+ uint8_t back_alpha = dest_scan[3];
+ if (back_alpha == 0) {
+ if (src_Bpp == 4) {
+ FXARGB_SETDIB(dest_scan, 0xff000000 | FXARGB_GETDIB(src_scan));
+ } else {
+ FXARGB_SETDIB(dest_scan, FXARGB_MAKE(0xff, src_scan[2], src_scan[1],
+ src_scan[0]));
}
- dest_scan += dest_gap;
+ dest_scan += 4;
+ src_scan += src_Bpp;
+ continue;
+ }
+ dest_scan[3] = 0xff;
+ if (bNonseparableBlend) {
+ _RGB_Blend(blend_type, src_scan, dest_scan, blended_colors);
+ }
+ for (int color = 0; color < 3; color++) {
+ int src_color = *src_scan;
+ int blended = bNonseparableBlend
+ ? blended_colors[color]
+ : _BLEND(blend_type, *dest_scan, src_color);
+ *dest_scan = FXDIB_ALPHA_MERGE(src_color, blended, back_alpha);
+ dest_scan++;
+ src_scan++;
+ }
+ dest_scan++;
+ src_scan += src_gap;
+ }
+ } else {
+ for (int col = 0; col < width; col++) {
+ uint8_t back_alpha = *dest_alpha_scan;
+ if (back_alpha == 0) {
+ *dest_scan++ = *src_scan++;
+ *dest_scan++ = *src_scan++;
+ *dest_scan++ = *src_scan++;
+ *dest_alpha_scan++ = 0xff;
src_scan += src_gap;
+ continue;
+ }
+ *dest_alpha_scan++ = 0xff;
+ if (bNonseparableBlend) {
+ _RGB_Blend(blend_type, src_scan, dest_scan, blended_colors);
+ }
+ for (int color = 0; color < 3; color++) {
+ int src_color = *src_scan;
+ int blended = bNonseparableBlend
+ ? blended_colors[color]
+ : _BLEND(blend_type, *dest_scan, src_color);
+ *dest_scan = FXDIB_ALPHA_MERGE(src_color, blended, back_alpha);
+ dest_scan++;
+ src_scan++;
+ }
+ src_scan += src_gap;
}
+ }
}
-inline void _CompositeRow_Rgb2Rgb_NoBlend_NoClip(uint8_t* dest_scan, const uint8_t* src_scan, int width, int dest_Bpp, int src_Bpp)
-{
- if (dest_Bpp == src_Bpp) {
- FXSYS_memcpy(dest_scan, src_scan, width * dest_Bpp);
- return;
- }
- for (int col = 0; col < width; col ++) {
- dest_scan[0] = src_scan[0];
- dest_scan[1] = src_scan[1];
- dest_scan[2] = src_scan[2];
- dest_scan += dest_Bpp;
+inline void _CompositeRow_Rgb2Argb_Blend_Clip(uint8_t* dest_scan,
+ const uint8_t* src_scan,
+ int width,
+ int blend_type,
+ int src_Bpp,
+ const uint8_t* clip_scan,
+ uint8_t* dest_alpha_scan) {
+ int blended_colors[3];
+ FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE;
+ int src_gap = src_Bpp - 3;
+ if (dest_alpha_scan == NULL) {
+ for (int col = 0; col < width; col++) {
+ int src_alpha = *clip_scan++;
+ uint8_t back_alpha = dest_scan[3];
+ if (back_alpha == 0) {
+ *dest_scan++ = *src_scan++;
+ *dest_scan++ = *src_scan++;
+ *dest_scan++ = *src_scan++;
+ src_scan += src_gap;
+ dest_scan++;
+ continue;
+ }
+ if (src_alpha == 0) {
+ dest_scan += 4;
+ src_scan += src_Bpp;
+ continue;
+ }
+ uint8_t dest_alpha =
+ back_alpha + src_alpha - back_alpha * src_alpha / 255;
+ dest_scan[3] = dest_alpha;
+ int alpha_ratio = src_alpha * 255 / dest_alpha;
+ if (bNonseparableBlend) {
+ _RGB_Blend(blend_type, src_scan, dest_scan, blended_colors);
+ }
+ for (int color = 0; color < 3; color++) {
+ int src_color = *src_scan;
+ int blended = bNonseparableBlend
+ ? blended_colors[color]
+ : _BLEND(blend_type, *dest_scan, src_color);
+ blended = FXDIB_ALPHA_MERGE(src_color, blended, back_alpha);
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended, alpha_ratio);
+ dest_scan++;
+ src_scan++;
+ }
+ dest_scan++;
+ src_scan += src_gap;
+ }
+ } else {
+ for (int col = 0; col < width; col++) {
+ int src_alpha = *clip_scan++;
+ uint8_t back_alpha = *dest_alpha_scan;
+ if (back_alpha == 0) {
+ *dest_scan++ = *src_scan++;
+ *dest_scan++ = *src_scan++;
+ *dest_scan++ = *src_scan++;
+ src_scan += src_gap;
+ dest_alpha_scan++;
+ continue;
+ }
+ if (src_alpha == 0) {
+ dest_scan += 3;
+ dest_alpha_scan++;
src_scan += src_Bpp;
+ continue;
+ }
+ uint8_t dest_alpha =
+ back_alpha + src_alpha - back_alpha * src_alpha / 255;
+ *dest_alpha_scan++ = dest_alpha;
+ int alpha_ratio = src_alpha * 255 / dest_alpha;
+ if (bNonseparableBlend) {
+ _RGB_Blend(blend_type, src_scan, dest_scan, blended_colors);
+ }
+ for (int color = 0; color < 3; color++) {
+ int src_color = *src_scan;
+ int blended = bNonseparableBlend
+ ? blended_colors[color]
+ : _BLEND(blend_type, *dest_scan, src_color);
+ blended = FXDIB_ALPHA_MERGE(src_color, blended, back_alpha);
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended, alpha_ratio);
+ dest_scan++;
+ src_scan++;
+ }
+ src_scan += src_gap;
}
+ }
}
-inline void _CompositeRow_Rgb2Rgb_NoBlend_Clip(uint8_t* dest_scan, const uint8_t* src_scan, int width, int dest_Bpp, int src_Bpp, const uint8_t* clip_scan)
-{
- for (int col = 0; col < width; col ++) {
- int src_alpha = clip_scan[col];
- if (src_alpha == 255) {
- dest_scan[0] = src_scan[0];
- dest_scan[1] = src_scan[1];
- dest_scan[2] = src_scan[2];
- } else if (src_alpha) {
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, *src_scan, src_alpha);
- dest_scan ++;
- src_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, *src_scan, src_alpha);
- dest_scan ++;
- src_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, *src_scan, src_alpha);
- dest_scan += dest_Bpp - 2;
- src_scan += src_Bpp - 2;
- continue;
- }
- dest_scan += dest_Bpp;
+inline void _CompositeRow_Rgb2Argb_NoBlend_Clip(uint8_t* dest_scan,
+ const uint8_t* src_scan,
+ int width,
+ int src_Bpp,
+ const uint8_t* clip_scan,
+ uint8_t* dest_alpha_scan) {
+ int src_gap = src_Bpp - 3;
+ if (dest_alpha_scan == NULL) {
+ for (int col = 0; col < width; col++) {
+ int src_alpha = clip_scan[col];
+ if (src_alpha == 255) {
+ *dest_scan++ = *src_scan++;
+ *dest_scan++ = *src_scan++;
+ *dest_scan++ = *src_scan++;
+ *dest_scan++ = 255;
+ src_scan += src_gap;
+ continue;
+ }
+ if (src_alpha == 0) {
+ dest_scan += 4;
+ src_scan += src_Bpp;
+ continue;
+ }
+ int back_alpha = dest_scan[3];
+ uint8_t dest_alpha =
+ back_alpha + src_alpha - back_alpha * src_alpha / 255;
+ dest_scan[3] = dest_alpha;
+ int alpha_ratio = src_alpha * 255 / dest_alpha;
+ for (int color = 0; color < 3; color++) {
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, *src_scan, alpha_ratio);
+ dest_scan++;
+ src_scan++;
+ }
+ dest_scan++;
+ src_scan += src_gap;
+ }
+ } else {
+ for (int col = 0; col < width; col++) {
+ int src_alpha = clip_scan[col];
+ if (src_alpha == 255) {
+ *dest_scan++ = *src_scan++;
+ *dest_scan++ = *src_scan++;
+ *dest_scan++ = *src_scan++;
+ *dest_alpha_scan++ = 255;
+ src_scan += src_gap;
+ continue;
+ }
+ if (src_alpha == 0) {
+ dest_scan += 3;
+ dest_alpha_scan++;
src_scan += src_Bpp;
+ continue;
+ }
+ int back_alpha = *dest_alpha_scan;
+ uint8_t dest_alpha =
+ back_alpha + src_alpha - back_alpha * src_alpha / 255;
+ *dest_alpha_scan++ = dest_alpha;
+ int alpha_ratio = src_alpha * 255 / dest_alpha;
+ for (int color = 0; color < 3; color++) {
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, *src_scan, alpha_ratio);
+ dest_scan++;
+ src_scan++;
+ }
+ src_scan += src_gap;
}
+ }
}
-void _CompositeRow_Argb2Argb_Transform(uint8_t* dest_scan, const uint8_t* src_scan, int pixel_count, int blend_type, const uint8_t* clip_scan,
- uint8_t* dest_alpha_scan, const uint8_t* src_alpha_scan, uint8_t* src_cache_scan, void* pIccTransform)
-{
- uint8_t* dp = src_cache_scan;
- ICodec_IccModule* pIccModule = CFX_GEModule::Get()->GetCodecModule()->GetIccModule();
- if (src_alpha_scan) {
- if (dest_alpha_scan == NULL) {
- for (int col = 0; col < pixel_count; col ++) {
- pIccModule->TranslateScanline(pIccTransform, dp, src_scan, 1);
- dp[3] = *src_alpha_scan++;
- src_scan += 3;
- dp += 4;
- }
- src_alpha_scan = NULL;
- } else {
- pIccModule->TranslateScanline(pIccTransform, dp, src_scan, pixel_count);
- }
- } else {
- if (dest_alpha_scan == NULL) {
- for (int col = 0; col < pixel_count; col ++) {
- pIccModule->TranslateScanline(pIccTransform, dp, src_scan, 1);
- dp[3] = src_scan[3];
- src_scan += 4;
- dp += 4;
- }
- } else {
- int blended_colors[3];
- FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE;
- for (int col = 0; col < pixel_count; col ++) {
- pIccModule->TranslateScanline(pIccTransform, src_cache_scan, src_scan, 1);
- uint8_t back_alpha = *dest_alpha_scan;
- if (back_alpha == 0) {
- if (clip_scan) {
- int src_alpha = clip_scan[col] * src_scan[3] / 255;
- *dest_alpha_scan = src_alpha;
- *dest_scan++ = *src_cache_scan++;
- *dest_scan++ = *src_cache_scan++;
- *dest_scan++ = *src_cache_scan++;
- } else {
- *dest_alpha_scan = src_scan[3];
- *dest_scan++ = *src_cache_scan++;
- *dest_scan++ = *src_cache_scan++;
- *dest_scan++ = *src_cache_scan++;
- }
- dest_alpha_scan ++;
- src_scan += 4;
- continue;
- }
- uint8_t src_alpha;
- if (clip_scan == NULL) {
- src_alpha = src_scan[3];
- } else {
- src_alpha = clip_scan[col] * src_scan[3] / 255;
- }
- src_scan += 4;
- if (src_alpha == 0) {
- dest_scan += 3;
- src_cache_scan += 3;
- dest_alpha_scan ++;
- continue;
- }
- uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 255;
- *dest_alpha_scan ++ = dest_alpha;
- int alpha_ratio = src_alpha * 255 / dest_alpha;
- if (bNonseparableBlend) {
- _RGB_Blend(blend_type, src_cache_scan, dest_scan, blended_colors);
- }
- for (int color = 0; color < 3; color ++) {
- if (blend_type) {
- int blended = bNonseparableBlend ? blended_colors[color] :
- _BLEND(blend_type, *dest_scan, *src_cache_scan);
- blended = FXDIB_ALPHA_MERGE(*src_cache_scan, blended, back_alpha);
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended, alpha_ratio);
- } else {
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, *src_cache_scan, alpha_ratio);
- }
- dest_scan ++;
- src_cache_scan ++;
- }
- }
- return;
- }
- }
- _CompositeRow_Argb2Argb(dest_scan, src_cache_scan, pixel_count, blend_type, clip_scan, dest_alpha_scan, src_alpha_scan);
+inline void _CompositeRow_Rgb2Argb_NoBlend_NoClip(uint8_t* dest_scan,
+ const uint8_t* src_scan,
+ int width,
+ int src_Bpp,
+ uint8_t* dest_alpha_scan) {
+ if (dest_alpha_scan == NULL) {
+ for (int col = 0; col < width; col++) {
+ if (src_Bpp == 4) {
+ FXARGB_SETDIB(dest_scan, 0xff000000 | FXARGB_GETDIB(src_scan));
+ } else {
+ FXARGB_SETDIB(dest_scan,
+ FXARGB_MAKE(0xff, src_scan[2], src_scan[1], src_scan[0]));
+ }
+ dest_scan += 4;
+ src_scan += src_Bpp;
+ }
+ } else {
+ int src_gap = src_Bpp - 3;
+ for (int col = 0; col < width; col++) {
+ *dest_scan++ = *src_scan++;
+ *dest_scan++ = *src_scan++;
+ *dest_scan++ = *src_scan++;
+ *dest_alpha_scan++ = 0xff;
+ src_scan += src_gap;
+ }
+ }
}
-void _CompositeRow_Rgb2Argb_Blend_NoClip_Transform(uint8_t* dest_scan, const uint8_t* src_scan, int width, int blend_type, int src_Bpp,
- uint8_t* dest_alpha_scan, uint8_t* src_cache_scan, void* pIccTransform)
-{
- ICodec_IccModule* pIccModule = CFX_GEModule::Get()->GetCodecModule()->GetIccModule();
- if (src_Bpp == 3) {
- pIccModule->TranslateScanline(pIccTransform, src_cache_scan, src_scan, width);
- } else {
- uint8_t* dp = src_cache_scan;
- for (int col = 0; col < width; col ++) {
- pIccModule->TranslateScanline(pIccTransform, dp, src_scan, 1);
- src_scan += 4;
- dp += 3;
- }
+inline void _CompositeRow_Argb2Rgb_Blend(uint8_t* dest_scan,
+ const uint8_t* src_scan,
+ int width,
+ int blend_type,
+ int dest_Bpp,
+ const uint8_t* clip_scan,
+ const uint8_t* src_alpha_scan) {
+ int blended_colors[3];
+ FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE;
+ int dest_gap = dest_Bpp - 3;
+ if (src_alpha_scan == NULL) {
+ for (int col = 0; col < width; col++) {
+ uint8_t src_alpha;
+ if (clip_scan) {
+ src_alpha = src_scan[3] * (*clip_scan++) / 255;
+ } else {
+ src_alpha = src_scan[3];
+ }
+ if (src_alpha == 0) {
+ dest_scan += dest_Bpp;
+ src_scan += 4;
+ continue;
+ }
+ if (bNonseparableBlend) {
+ _RGB_Blend(blend_type, src_scan, dest_scan, blended_colors);
+ }
+ for (int color = 0; color < 3; color++) {
+ int back_color = *dest_scan;
+ int blended = bNonseparableBlend
+ ? blended_colors[color]
+ : _BLEND(blend_type, back_color, *src_scan);
+ *dest_scan = FXDIB_ALPHA_MERGE(back_color, blended, src_alpha);
+ dest_scan++;
+ src_scan++;
+ }
+ dest_scan += dest_gap;
+ src_scan++;
+ }
+ } else {
+ for (int col = 0; col < width; col++) {
+ uint8_t src_alpha;
+ if (clip_scan) {
+ src_alpha = (*src_alpha_scan++) * (*clip_scan++) / 255;
+ } else {
+ src_alpha = *src_alpha_scan++;
+ }
+ if (src_alpha == 0) {
+ dest_scan += dest_Bpp;
+ src_scan += 3;
+ continue;
+ }
+ if (bNonseparableBlend) {
+ _RGB_Blend(blend_type, src_scan, dest_scan, blended_colors);
+ }
+ for (int color = 0; color < 3; color++) {
+ int back_color = *dest_scan;
+ int blended = bNonseparableBlend
+ ? blended_colors[color]
+ : _BLEND(blend_type, back_color, *src_scan);
+ *dest_scan = FXDIB_ALPHA_MERGE(back_color, blended, src_alpha);
+ dest_scan++;
+ src_scan++;
+ }
+ dest_scan += dest_gap;
}
- _CompositeRow_Rgb2Argb_Blend_NoClip(dest_scan, src_cache_scan, width, blend_type, 3, dest_alpha_scan);
+ }
}
-inline void _CompositeRow_Rgb2Argb_Blend_Clip_Transform(uint8_t* dest_scan, const uint8_t* src_scan, int width, int blend_type, int src_Bpp, const uint8_t* clip_scan,
- uint8_t* dest_alpha_scan, uint8_t* src_cache_scan, void* pIccTransform)
-{
- ICodec_IccModule* pIccModule = CFX_GEModule::Get()->GetCodecModule()->GetIccModule();
- if (src_Bpp == 3) {
- pIccModule->TranslateScanline(pIccTransform, src_cache_scan, src_scan, width);
- } else {
- uint8_t* dp = src_cache_scan;
- for (int col = 0; col < width; col ++) {
- pIccModule->TranslateScanline(pIccTransform, dp, src_scan, 1);
- src_scan += 4;
- dp += 3;
- }
+inline void _CompositeRow_Argb2Rgb_NoBlend(uint8_t* dest_scan,
+ const uint8_t* src_scan,
+ int width,
+ int dest_Bpp,
+ const uint8_t* clip_scan,
+ const uint8_t* src_alpha_scan) {
+ int dest_gap = dest_Bpp - 3;
+ if (src_alpha_scan == NULL) {
+ for (int col = 0; col < width; col++) {
+ uint8_t src_alpha;
+ if (clip_scan) {
+ src_alpha = src_scan[3] * (*clip_scan++) / 255;
+ } else {
+ src_alpha = src_scan[3];
+ }
+ if (src_alpha == 255) {
+ *dest_scan++ = *src_scan++;
+ *dest_scan++ = *src_scan++;
+ *dest_scan++ = *src_scan++;
+ dest_scan += dest_gap;
+ src_scan++;
+ continue;
+ }
+ if (src_alpha == 0) {
+ dest_scan += dest_Bpp;
+ src_scan += 4;
+ continue;
+ }
+ for (int color = 0; color < 3; color++) {
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, *src_scan, src_alpha);
+ dest_scan++;
+ src_scan++;
+ }
+ dest_scan += dest_gap;
+ src_scan++;
+ }
+ } else {
+ for (int col = 0; col < width; col++) {
+ uint8_t src_alpha;
+ if (clip_scan) {
+ src_alpha = (*src_alpha_scan++) * (*clip_scan++) / 255;
+ } else {
+ src_alpha = *src_alpha_scan++;
+ }
+ if (src_alpha == 255) {
+ *dest_scan++ = *src_scan++;
+ *dest_scan++ = *src_scan++;
+ *dest_scan++ = *src_scan++;
+ dest_scan += dest_gap;
+ continue;
+ }
+ if (src_alpha == 0) {
+ dest_scan += dest_Bpp;
+ src_scan += 3;
+ continue;
+ }
+ for (int color = 0; color < 3; color++) {
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, *src_scan, src_alpha);
+ dest_scan++;
+ src_scan++;
+ }
+ dest_scan += dest_gap;
}
- _CompositeRow_Rgb2Argb_Blend_Clip(dest_scan, src_cache_scan, width, blend_type, 3, clip_scan, dest_alpha_scan);
+ }
}
-inline void _CompositeRow_Rgb2Argb_NoBlend_Clip_Transform(uint8_t* dest_scan, const uint8_t* src_scan, int width, int src_Bpp, const uint8_t* clip_scan,
- uint8_t* dest_alpha_scan, uint8_t* src_cache_scan, void* pIccTransform)
-{
- ICodec_IccModule* pIccModule = CFX_GEModule::Get()->GetCodecModule()->GetIccModule();
- if (src_Bpp == 3) {
- pIccModule->TranslateScanline(pIccTransform, src_cache_scan, src_scan, width);
- } else {
- uint8_t* dp = src_cache_scan;
- for (int col = 0; col < width; col ++) {
- pIccModule->TranslateScanline(pIccTransform, dp, src_scan, 1);
- src_scan += 4;
- dp += 3;
- }
- }
- _CompositeRow_Rgb2Argb_NoBlend_Clip(dest_scan, src_cache_scan, width, 3, clip_scan, dest_alpha_scan);
+inline void _CompositeRow_Rgb2Rgb_Blend_NoClip(uint8_t* dest_scan,
+ const uint8_t* src_scan,
+ int width,
+ int blend_type,
+ int dest_Bpp,
+ int src_Bpp) {
+ int blended_colors[3];
+ FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE;
+ int dest_gap = dest_Bpp - 3;
+ int src_gap = src_Bpp - 3;
+ for (int col = 0; col < width; col++) {
+ if (bNonseparableBlend) {
+ _RGB_Blend(blend_type, src_scan, dest_scan, blended_colors);
+ }
+ for (int color = 0; color < 3; color++) {
+ int back_color = *dest_scan;
+ int src_color = *src_scan;
+ int blended = bNonseparableBlend
+ ? blended_colors[color]
+ : _BLEND(blend_type, back_color, src_color);
+ *dest_scan = blended;
+ dest_scan++;
+ src_scan++;
+ }
+ dest_scan += dest_gap;
+ src_scan += src_gap;
+ }
}
-inline void _CompositeRow_Rgb2Argb_NoBlend_NoClip_Transform(uint8_t* dest_scan, const uint8_t* src_scan, int width, int src_Bpp,
- uint8_t* dest_alpha_scan, uint8_t* src_cache_scan, void* pIccTransform)
-{
- ICodec_IccModule* pIccModule = CFX_GEModule::Get()->GetCodecModule()->GetIccModule();
- if (src_Bpp == 3) {
- pIccModule->TranslateScanline(pIccTransform, src_cache_scan, src_scan, width);
- } else {
- uint8_t* dp = src_cache_scan;
- for (int col = 0; col < width; col ++) {
- pIccModule->TranslateScanline(pIccTransform, dp, src_scan, 1);
- src_scan += 4;
- dp += 3;
- }
- }
- _CompositeRow_Rgb2Argb_NoBlend_NoClip(dest_scan, src_cache_scan, width, 3, dest_alpha_scan);
+inline void _CompositeRow_Rgb2Rgb_Blend_Clip(uint8_t* dest_scan,
+ const uint8_t* src_scan,
+ int width,
+ int blend_type,
+ int dest_Bpp,
+ int src_Bpp,
+ const uint8_t* clip_scan) {
+ int blended_colors[3];
+ FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE;
+ int dest_gap = dest_Bpp - 3;
+ int src_gap = src_Bpp - 3;
+ for (int col = 0; col < width; col++) {
+ uint8_t src_alpha = *clip_scan++;
+ if (src_alpha == 0) {
+ dest_scan += dest_Bpp;
+ src_scan += src_Bpp;
+ continue;
+ }
+ if (bNonseparableBlend) {
+ _RGB_Blend(blend_type, src_scan, dest_scan, blended_colors);
+ }
+ for (int color = 0; color < 3; color++) {
+ int src_color = *src_scan;
+ int back_color = *dest_scan;
+ int blended = bNonseparableBlend
+ ? blended_colors[color]
+ : _BLEND(blend_type, back_color, src_color);
+ *dest_scan = FXDIB_ALPHA_MERGE(back_color, blended, src_alpha);
+ dest_scan++;
+ src_scan++;
+ }
+ dest_scan += dest_gap;
+ src_scan += src_gap;
+ }
}
-inline void _CompositeRow_Argb2Rgb_Blend_Transform(uint8_t* dest_scan, const uint8_t* src_scan, int width, int blend_type, int dest_Bpp, const uint8_t* clip_scan,
- const uint8_t* src_alpha_scan, uint8_t* src_cache_scan, void* pIccTransform)
-{
- ICodec_IccModule* pIccModule = CFX_GEModule::Get()->GetCodecModule()->GetIccModule();
- if (src_alpha_scan) {
- pIccModule->TranslateScanline(pIccTransform, src_cache_scan, src_scan, width);
- } else {
- int blended_colors[3];
- FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE;
- int dest_gap = dest_Bpp - 3;
- for (int col = 0; col < width; col ++) {
- pIccModule->TranslateScanline(pIccTransform, src_cache_scan, src_scan, 1);
- uint8_t src_alpha;
- if (clip_scan) {
- src_alpha = src_scan[3] * (*clip_scan++) / 255;
- } else {
- src_alpha = src_scan[3];
- }
- src_scan += 4;
- if (src_alpha == 0) {
- dest_scan += dest_Bpp;
- src_cache_scan += 3;
- continue;
- }
- if (bNonseparableBlend) {
- _RGB_Blend(blend_type, src_cache_scan, dest_scan, blended_colors);
- }
- for (int color = 0; color < 3; color ++) {
- int back_color = *dest_scan;
- int blended = bNonseparableBlend ? blended_colors[color] :
- _BLEND(blend_type, back_color, *src_cache_scan);
- *dest_scan = FXDIB_ALPHA_MERGE(back_color, blended, src_alpha);
- dest_scan ++;
- src_cache_scan ++;
- }
- dest_scan += dest_gap;
- }
- return;
- }
- _CompositeRow_Argb2Rgb_Blend(dest_scan, src_cache_scan, width, blend_type, dest_Bpp, clip_scan, src_alpha_scan);
+inline void _CompositeRow_Rgb2Rgb_NoBlend_NoClip(uint8_t* dest_scan,
+ const uint8_t* src_scan,
+ int width,
+ int dest_Bpp,
+ int src_Bpp) {
+ if (dest_Bpp == src_Bpp) {
+ FXSYS_memcpy(dest_scan, src_scan, width * dest_Bpp);
+ return;
+ }
+ for (int col = 0; col < width; col++) {
+ dest_scan[0] = src_scan[0];
+ dest_scan[1] = src_scan[1];
+ dest_scan[2] = src_scan[2];
+ dest_scan += dest_Bpp;
+ src_scan += src_Bpp;
+ }
}
-inline void _CompositeRow_Argb2Rgb_NoBlend_Transform(uint8_t* dest_scan, const uint8_t* src_scan, int width, int dest_Bpp, const uint8_t* clip_scan,
- const uint8_t* src_alpha_scan, uint8_t* src_cache_scan, void* pIccTransform)
-{
- ICodec_IccModule* pIccModule = CFX_GEModule::Get()->GetCodecModule()->GetIccModule();
- if (src_alpha_scan) {
- pIccModule->TranslateScanline(pIccTransform, src_cache_scan, src_scan, width);
- } else {
- int dest_gap = dest_Bpp - 3;
- for (int col = 0; col < width; col ++) {
- pIccModule->TranslateScanline(pIccTransform, src_cache_scan, src_scan, 1);
- uint8_t src_alpha;
- if (clip_scan) {
- src_alpha = src_scan[3] * (*clip_scan++) / 255;
- } else {
- src_alpha = src_scan[3];
- }
- src_scan += 4;
- if (src_alpha == 255) {
- *dest_scan++ = *src_cache_scan++;
- *dest_scan++ = *src_cache_scan++;
- *dest_scan++ = *src_cache_scan++;
- dest_scan += dest_gap;
- continue;
- }
- if (src_alpha == 0) {
- dest_scan += dest_Bpp;
- src_cache_scan += 3;
- continue;
- }
- for (int color = 0; color < 3; color ++) {
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, *src_cache_scan, src_alpha);
- dest_scan ++;
- src_cache_scan ++;
- }
- dest_scan += dest_gap;
- }
- return;
- }
- _CompositeRow_Argb2Rgb_NoBlend(dest_scan, src_cache_scan, width, dest_Bpp, clip_scan, src_alpha_scan);
+inline void _CompositeRow_Rgb2Rgb_NoBlend_Clip(uint8_t* dest_scan,
+ const uint8_t* src_scan,
+ int width,
+ int dest_Bpp,
+ int src_Bpp,
+ const uint8_t* clip_scan) {
+ for (int col = 0; col < width; col++) {
+ int src_alpha = clip_scan[col];
+ if (src_alpha == 255) {
+ dest_scan[0] = src_scan[0];
+ dest_scan[1] = src_scan[1];
+ dest_scan[2] = src_scan[2];
+ } else if (src_alpha) {
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, *src_scan, src_alpha);
+ dest_scan++;
+ src_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, *src_scan, src_alpha);
+ dest_scan++;
+ src_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, *src_scan, src_alpha);
+ dest_scan += dest_Bpp - 2;
+ src_scan += src_Bpp - 2;
+ continue;
+ }
+ dest_scan += dest_Bpp;
+ src_scan += src_Bpp;
+ }
}
-inline void _CompositeRow_Rgb2Rgb_Blend_NoClip_Transform(uint8_t* dest_scan, const uint8_t* src_scan, int width, int blend_type, int dest_Bpp, int src_Bpp,
- uint8_t* src_cache_scan, void* pIccTransform)
-{
- ICodec_IccModule* pIccModule = CFX_GEModule::Get()->GetCodecModule()->GetIccModule();
- if (src_Bpp == 3) {
- pIccModule->TranslateScanline(pIccTransform, src_cache_scan, src_scan, width);
+void _CompositeRow_Argb2Argb_Transform(uint8_t* dest_scan,
+ const uint8_t* src_scan,
+ int pixel_count,
+ int blend_type,
+ const uint8_t* clip_scan,
+ uint8_t* dest_alpha_scan,
+ const uint8_t* src_alpha_scan,
+ uint8_t* src_cache_scan,
+ void* pIccTransform) {
+ uint8_t* dp = src_cache_scan;
+ ICodec_IccModule* pIccModule =
+ CFX_GEModule::Get()->GetCodecModule()->GetIccModule();
+ if (src_alpha_scan) {
+ if (dest_alpha_scan == NULL) {
+ for (int col = 0; col < pixel_count; col++) {
+ pIccModule->TranslateScanline(pIccTransform, dp, src_scan, 1);
+ dp[3] = *src_alpha_scan++;
+ src_scan += 3;
+ dp += 4;
+ }
+ src_alpha_scan = NULL;
} else {
- uint8_t* dp = src_cache_scan;
- for (int col = 0; col < width; col ++) {
- pIccModule->TranslateScanline(pIccTransform, dp, src_scan, 1);
- src_scan += 4;
- dp += 3;
- }
+ pIccModule->TranslateScanline(pIccTransform, dp, src_scan, pixel_count);
}
- _CompositeRow_Rgb2Rgb_Blend_NoClip(dest_scan, src_cache_scan, width, blend_type, dest_Bpp, 3);
-}
-inline void _CompositeRow_Rgb2Rgb_Blend_Clip_Transform(uint8_t* dest_scan, const uint8_t* src_scan, int width, int blend_type, int dest_Bpp, int src_Bpp, const uint8_t* clip_scan,
- uint8_t* src_cache_scan, void* pIccTransform)
-{
- ICodec_IccModule* pIccModule = CFX_GEModule::Get()->GetCodecModule()->GetIccModule();
- if (src_Bpp == 3) {
- pIccModule->TranslateScanline(pIccTransform, src_cache_scan, src_scan, width);
+ } else {
+ if (dest_alpha_scan == NULL) {
+ for (int col = 0; col < pixel_count; col++) {
+ pIccModule->TranslateScanline(pIccTransform, dp, src_scan, 1);
+ dp[3] = src_scan[3];
+ src_scan += 4;
+ dp += 4;
+ }
} else {
- uint8_t* dp = src_cache_scan;
- for (int col = 0; col < width; col ++) {
- pIccModule->TranslateScanline(pIccTransform, dp, src_scan, 1);
- src_scan += 4;
- dp += 3;
+ int blended_colors[3];
+ FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE;
+ for (int col = 0; col < pixel_count; col++) {
+ pIccModule->TranslateScanline(pIccTransform, src_cache_scan, src_scan,
+ 1);
+ uint8_t back_alpha = *dest_alpha_scan;
+ if (back_alpha == 0) {
+ if (clip_scan) {
+ int src_alpha = clip_scan[col] * src_scan[3] / 255;
+ *dest_alpha_scan = src_alpha;
+ *dest_scan++ = *src_cache_scan++;
+ *dest_scan++ = *src_cache_scan++;
+ *dest_scan++ = *src_cache_scan++;
+ } else {
+ *dest_alpha_scan = src_scan[3];
+ *dest_scan++ = *src_cache_scan++;
+ *dest_scan++ = *src_cache_scan++;
+ *dest_scan++ = *src_cache_scan++;
+ }
+ dest_alpha_scan++;
+ src_scan += 4;
+ continue;
}
- }
- _CompositeRow_Rgb2Rgb_Blend_Clip(dest_scan, src_cache_scan, width, blend_type, dest_Bpp, 3, clip_scan);
-}
-inline void _CompositeRow_Rgb2Rgb_NoBlend_NoClip_Transform(uint8_t* dest_scan, const uint8_t* src_scan, int width, int dest_Bpp, int src_Bpp,
- uint8_t* src_cache_scan, void* pIccTransform)
-{
- ICodec_IccModule* pIccModule = CFX_GEModule::Get()->GetCodecModule()->GetIccModule();
- if (src_Bpp == 3) {
- pIccModule->TranslateScanline(pIccTransform, src_cache_scan, src_scan, width);
- } else {
- uint8_t* dp = src_cache_scan;
- for (int col = 0; col < width; col ++) {
- pIccModule->TranslateScanline(pIccTransform, dp, src_scan, 1);
- src_scan += 4;
- dp += 3;
+ uint8_t src_alpha;
+ if (clip_scan == NULL) {
+ src_alpha = src_scan[3];
+ } else {
+ src_alpha = clip_scan[col] * src_scan[3] / 255;
}
- }
- _CompositeRow_Rgb2Rgb_NoBlend_NoClip(dest_scan, src_cache_scan, width, dest_Bpp, 3);
-}
-inline void _CompositeRow_Rgb2Rgb_NoBlend_Clip_Transform(uint8_t* dest_scan, const uint8_t* src_scan, int width, int dest_Bpp, int src_Bpp, const uint8_t* clip_scan,
- uint8_t* src_cache_scan, void* pIccTransform)
-{
- ICodec_IccModule* pIccModule = CFX_GEModule::Get()->GetCodecModule()->GetIccModule();
- if (src_Bpp == 3) {
- pIccModule->TranslateScanline(pIccTransform, src_cache_scan, src_scan, width);
- } else {
- uint8_t* dp = src_cache_scan;
- for (int col = 0; col < width; col ++) {
- pIccModule->TranslateScanline(pIccTransform, dp, src_scan, 1);
- src_scan += 4;
- dp += 3;
+ src_scan += 4;
+ if (src_alpha == 0) {
+ dest_scan += 3;
+ src_cache_scan += 3;
+ dest_alpha_scan++;
+ continue;
}
- }
- _CompositeRow_Rgb2Rgb_NoBlend_Clip(dest_scan, src_cache_scan, width, dest_Bpp, 3, clip_scan);
+ uint8_t dest_alpha =
+ back_alpha + src_alpha - back_alpha * src_alpha / 255;
+ *dest_alpha_scan++ = dest_alpha;
+ int alpha_ratio = src_alpha * 255 / dest_alpha;
+ if (bNonseparableBlend) {
+ _RGB_Blend(blend_type, src_cache_scan, dest_scan, blended_colors);
+ }
+ for (int color = 0; color < 3; color++) {
+ if (blend_type) {
+ int blended = bNonseparableBlend
+ ? blended_colors[color]
+ : _BLEND(blend_type, *dest_scan, *src_cache_scan);
+ blended = FXDIB_ALPHA_MERGE(*src_cache_scan, blended, back_alpha);
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended, alpha_ratio);
+ } else {
+ *dest_scan =
+ FXDIB_ALPHA_MERGE(*dest_scan, *src_cache_scan, alpha_ratio);
+ }
+ dest_scan++;
+ src_cache_scan++;
+ }
+ }
+ return;
+ }
+ }
+ _CompositeRow_Argb2Argb(dest_scan, src_cache_scan, pixel_count, blend_type,
+ clip_scan, dest_alpha_scan, src_alpha_scan);
}
-inline void _CompositeRow_8bppPal2Gray(uint8_t* dest_scan, const uint8_t* src_scan, const uint8_t* pPalette, int pixel_count,
- int blend_type, const uint8_t* clip_scan,
- const uint8_t* src_alpha_scan)
-{
- if (src_alpha_scan) {
- if (blend_type) {
- FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE;
- int blended_color;
- for (int col = 0; col < pixel_count; col ++) {
- uint8_t gray = pPalette[*src_scan];
- int src_alpha = *src_alpha_scan++;
- if (clip_scan) {
- src_alpha = clip_scan[col] * src_alpha / 255;
- }
- if (bNonseparableBlend) {
- blended_color = blend_type == FXDIB_BLEND_LUMINOSITY ? gray : *dest_scan;
- }
- gray = bNonseparableBlend ? blended_color : _BLEND(blend_type, *dest_scan, gray);
- if (src_alpha) {
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, src_alpha);
- } else {
- *dest_scan = gray;
- }
- dest_scan ++;
- src_scan ++;
- }
- return;
- }
- for (int col = 0; col < pixel_count; col ++) {
- uint8_t gray = pPalette[*src_scan];
- int src_alpha = *src_alpha_scan++;
- if (clip_scan) {
- src_alpha = clip_scan[col] * src_alpha / 255;
- }
- if (src_alpha) {
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, src_alpha);
- } else {
- *dest_scan = gray;
- }
- dest_scan ++;
- src_scan ++;
- }
- } else {
- if (blend_type) {
- FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE;
- int blended_color;
- for (int col = 0; col < pixel_count; col ++) {
- uint8_t gray = pPalette[*src_scan];
- if (bNonseparableBlend) {
- blended_color = blend_type == FXDIB_BLEND_LUMINOSITY ? gray : *dest_scan;
- }
- gray = bNonseparableBlend ? blended_color : _BLEND(blend_type, *dest_scan, gray);
- if (clip_scan && clip_scan[col] < 255) {
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, clip_scan[col]);
- } else {
- *dest_scan = gray;
- }
- dest_scan ++;
- src_scan ++;
- }
- return;
- }
- for (int col = 0; col < pixel_count; col ++) {
- uint8_t gray = pPalette[*src_scan];
- if (clip_scan && clip_scan[col] < 255) {
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, clip_scan[col]);
- } else {
- *dest_scan = gray;
- }
- dest_scan ++;
- src_scan ++;
- }
- }
+void _CompositeRow_Rgb2Argb_Blend_NoClip_Transform(uint8_t* dest_scan,
+ const uint8_t* src_scan,
+ int width,
+ int blend_type,
+ int src_Bpp,
+ uint8_t* dest_alpha_scan,
+ uint8_t* src_cache_scan,
+ void* pIccTransform) {
+ ICodec_IccModule* pIccModule =
+ CFX_GEModule::Get()->GetCodecModule()->GetIccModule();
+ if (src_Bpp == 3) {
+ pIccModule->TranslateScanline(pIccTransform, src_cache_scan, src_scan,
+ width);
+ } else {
+ uint8_t* dp = src_cache_scan;
+ for (int col = 0; col < width; col++) {
+ pIccModule->TranslateScanline(pIccTransform, dp, src_scan, 1);
+ src_scan += 4;
+ dp += 3;
+ }
+ }
+ _CompositeRow_Rgb2Argb_Blend_NoClip(dest_scan, src_cache_scan, width,
+ blend_type, 3, dest_alpha_scan);
}
-inline void _CompositeRow_8bppPal2Graya(uint8_t* dest_scan, const uint8_t* src_scan, const uint8_t* pPalette, int pixel_count,
- int blend_type, const uint8_t* clip_scan,
- uint8_t* dest_alpha_scan, const uint8_t* src_alpha_scan)
-{
- if (src_alpha_scan) {
- if (blend_type) {
- FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE;
- int blended_color;
- for (int col = 0; col < pixel_count; col ++) {
- uint8_t gray = pPalette[*src_scan];
- src_scan ++;
- uint8_t back_alpha = *dest_alpha_scan;
- if (back_alpha == 0) {
- int src_alpha = *src_alpha_scan ++;
- if (clip_scan) {
- src_alpha = clip_scan[col] * src_alpha / 255;
- }
- if (src_alpha) {
- *dest_scan = gray;
- *dest_alpha_scan = src_alpha;
- }
- dest_scan ++;
- dest_alpha_scan ++;
- continue;
- }
- uint8_t src_alpha = *src_alpha_scan++;
- if (clip_scan) {
- src_alpha = clip_scan[col] * src_alpha / 255;
- }
- if (src_alpha == 0) {
- dest_scan ++;
- dest_alpha_scan ++;
- continue;
- }
- *dest_alpha_scan = back_alpha + src_alpha - back_alpha * src_alpha / 255;
- int alpha_ratio = src_alpha * 255 / (*dest_alpha_scan);
- if (bNonseparableBlend) {
- blended_color = blend_type == FXDIB_BLEND_LUMINOSITY ? gray : *dest_scan;
- }
- gray = bNonseparableBlend ? blended_color : _BLEND(blend_type, *dest_scan, gray);
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, alpha_ratio);
- dest_alpha_scan ++;
- dest_scan ++;
- }
- return;
- }
- for (int col = 0; col < pixel_count; col ++) {
- uint8_t gray = pPalette[*src_scan];
- src_scan ++;
- uint8_t back_alpha = *dest_alpha_scan;
- if (back_alpha == 0) {
- int src_alpha = *src_alpha_scan ++;
- if (clip_scan) {
- src_alpha = clip_scan[col] * src_alpha / 255;
- }
- if (src_alpha) {
- *dest_scan = gray;
- *dest_alpha_scan = src_alpha;
- }
- dest_scan ++;
- dest_alpha_scan ++;
- continue;
- }
- uint8_t src_alpha = *src_alpha_scan++;
- if (clip_scan) {
- src_alpha = clip_scan[col] * src_alpha / 255;
- }
- if (src_alpha == 0) {
- dest_scan ++;
- dest_alpha_scan ++;
- continue;
- }
- *dest_alpha_scan = back_alpha + src_alpha - back_alpha * src_alpha / 255;
- int alpha_ratio = src_alpha * 255 / (*dest_alpha_scan);
- dest_alpha_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, alpha_ratio);
- dest_scan ++;
+inline void _CompositeRow_Rgb2Argb_Blend_Clip_Transform(
+ uint8_t* dest_scan,
+ const uint8_t* src_scan,
+ int width,
+ int blend_type,
+ int src_Bpp,
+ const uint8_t* clip_scan,
+ uint8_t* dest_alpha_scan,
+ uint8_t* src_cache_scan,
+ void* pIccTransform) {
+ ICodec_IccModule* pIccModule =
+ CFX_GEModule::Get()->GetCodecModule()->GetIccModule();
+ if (src_Bpp == 3) {
+ pIccModule->TranslateScanline(pIccTransform, src_cache_scan, src_scan,
+ width);
+ } else {
+ uint8_t* dp = src_cache_scan;
+ for (int col = 0; col < width; col++) {
+ pIccModule->TranslateScanline(pIccTransform, dp, src_scan, 1);
+ src_scan += 4;
+ dp += 3;
+ }
+ }
+ _CompositeRow_Rgb2Argb_Blend_Clip(dest_scan, src_cache_scan, width,
+ blend_type, 3, clip_scan, dest_alpha_scan);
+}
+inline void _CompositeRow_Rgb2Argb_NoBlend_Clip_Transform(
+ uint8_t* dest_scan,
+ const uint8_t* src_scan,
+ int width,
+ int src_Bpp,
+ const uint8_t* clip_scan,
+ uint8_t* dest_alpha_scan,
+ uint8_t* src_cache_scan,
+ void* pIccTransform) {
+ ICodec_IccModule* pIccModule =
+ CFX_GEModule::Get()->GetCodecModule()->GetIccModule();
+ if (src_Bpp == 3) {
+ pIccModule->TranslateScanline(pIccTransform, src_cache_scan, src_scan,
+ width);
+ } else {
+ uint8_t* dp = src_cache_scan;
+ for (int col = 0; col < width; col++) {
+ pIccModule->TranslateScanline(pIccTransform, dp, src_scan, 1);
+ src_scan += 4;
+ dp += 3;
+ }
+ }
+ _CompositeRow_Rgb2Argb_NoBlend_Clip(dest_scan, src_cache_scan, width, 3,
+ clip_scan, dest_alpha_scan);
+}
+inline void _CompositeRow_Rgb2Argb_NoBlend_NoClip_Transform(
+ uint8_t* dest_scan,
+ const uint8_t* src_scan,
+ int width,
+ int src_Bpp,
+ uint8_t* dest_alpha_scan,
+ uint8_t* src_cache_scan,
+ void* pIccTransform) {
+ ICodec_IccModule* pIccModule =
+ CFX_GEModule::Get()->GetCodecModule()->GetIccModule();
+ if (src_Bpp == 3) {
+ pIccModule->TranslateScanline(pIccTransform, src_cache_scan, src_scan,
+ width);
+ } else {
+ uint8_t* dp = src_cache_scan;
+ for (int col = 0; col < width; col++) {
+ pIccModule->TranslateScanline(pIccTransform, dp, src_scan, 1);
+ src_scan += 4;
+ dp += 3;
+ }
+ }
+ _CompositeRow_Rgb2Argb_NoBlend_NoClip(dest_scan, src_cache_scan, width, 3,
+ dest_alpha_scan);
+}
+inline void _CompositeRow_Argb2Rgb_Blend_Transform(
+ uint8_t* dest_scan,
+ const uint8_t* src_scan,
+ int width,
+ int blend_type,
+ int dest_Bpp,
+ const uint8_t* clip_scan,
+ const uint8_t* src_alpha_scan,
+ uint8_t* src_cache_scan,
+ void* pIccTransform) {
+ ICodec_IccModule* pIccModule =
+ CFX_GEModule::Get()->GetCodecModule()->GetIccModule();
+ if (src_alpha_scan) {
+ pIccModule->TranslateScanline(pIccTransform, src_cache_scan, src_scan,
+ width);
+ } else {
+ int blended_colors[3];
+ FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE;
+ int dest_gap = dest_Bpp - 3;
+ for (int col = 0; col < width; col++) {
+ pIccModule->TranslateScanline(pIccTransform, src_cache_scan, src_scan, 1);
+ uint8_t src_alpha;
+ if (clip_scan) {
+ src_alpha = src_scan[3] * (*clip_scan++) / 255;
+ } else {
+ src_alpha = src_scan[3];
+ }
+ src_scan += 4;
+ if (src_alpha == 0) {
+ dest_scan += dest_Bpp;
+ src_cache_scan += 3;
+ continue;
+ }
+ if (bNonseparableBlend) {
+ _RGB_Blend(blend_type, src_cache_scan, dest_scan, blended_colors);
+ }
+ for (int color = 0; color < 3; color++) {
+ int back_color = *dest_scan;
+ int blended = bNonseparableBlend
+ ? blended_colors[color]
+ : _BLEND(blend_type, back_color, *src_cache_scan);
+ *dest_scan = FXDIB_ALPHA_MERGE(back_color, blended, src_alpha);
+ dest_scan++;
+ src_cache_scan++;
+ }
+ dest_scan += dest_gap;
+ }
+ return;
+ }
+ _CompositeRow_Argb2Rgb_Blend(dest_scan, src_cache_scan, width, blend_type,
+ dest_Bpp, clip_scan, src_alpha_scan);
+}
+inline void _CompositeRow_Argb2Rgb_NoBlend_Transform(
+ uint8_t* dest_scan,
+ const uint8_t* src_scan,
+ int width,
+ int dest_Bpp,
+ const uint8_t* clip_scan,
+ const uint8_t* src_alpha_scan,
+ uint8_t* src_cache_scan,
+ void* pIccTransform) {
+ ICodec_IccModule* pIccModule =
+ CFX_GEModule::Get()->GetCodecModule()->GetIccModule();
+ if (src_alpha_scan) {
+ pIccModule->TranslateScanline(pIccTransform, src_cache_scan, src_scan,
+ width);
+ } else {
+ int dest_gap = dest_Bpp - 3;
+ for (int col = 0; col < width; col++) {
+ pIccModule->TranslateScanline(pIccTransform, src_cache_scan, src_scan, 1);
+ uint8_t src_alpha;
+ if (clip_scan) {
+ src_alpha = src_scan[3] * (*clip_scan++) / 255;
+ } else {
+ src_alpha = src_scan[3];
+ }
+ src_scan += 4;
+ if (src_alpha == 255) {
+ *dest_scan++ = *src_cache_scan++;
+ *dest_scan++ = *src_cache_scan++;
+ *dest_scan++ = *src_cache_scan++;
+ dest_scan += dest_gap;
+ continue;
+ }
+ if (src_alpha == 0) {
+ dest_scan += dest_Bpp;
+ src_cache_scan += 3;
+ continue;
+ }
+ for (int color = 0; color < 3; color++) {
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, *src_cache_scan, src_alpha);
+ dest_scan++;
+ src_cache_scan++;
+ }
+ dest_scan += dest_gap;
+ }
+ return;
+ }
+ _CompositeRow_Argb2Rgb_NoBlend(dest_scan, src_cache_scan, width, dest_Bpp,
+ clip_scan, src_alpha_scan);
+}
+inline void _CompositeRow_Rgb2Rgb_Blend_NoClip_Transform(
+ uint8_t* dest_scan,
+ const uint8_t* src_scan,
+ int width,
+ int blend_type,
+ int dest_Bpp,
+ int src_Bpp,
+ uint8_t* src_cache_scan,
+ void* pIccTransform) {
+ ICodec_IccModule* pIccModule =
+ CFX_GEModule::Get()->GetCodecModule()->GetIccModule();
+ if (src_Bpp == 3) {
+ pIccModule->TranslateScanline(pIccTransform, src_cache_scan, src_scan,
+ width);
+ } else {
+ uint8_t* dp = src_cache_scan;
+ for (int col = 0; col < width; col++) {
+ pIccModule->TranslateScanline(pIccTransform, dp, src_scan, 1);
+ src_scan += 4;
+ dp += 3;
+ }
+ }
+ _CompositeRow_Rgb2Rgb_Blend_NoClip(dest_scan, src_cache_scan, width,
+ blend_type, dest_Bpp, 3);
+}
+inline void _CompositeRow_Rgb2Rgb_Blend_Clip_Transform(uint8_t* dest_scan,
+ const uint8_t* src_scan,
+ int width,
+ int blend_type,
+ int dest_Bpp,
+ int src_Bpp,
+ const uint8_t* clip_scan,
+ uint8_t* src_cache_scan,
+ void* pIccTransform) {
+ ICodec_IccModule* pIccModule =
+ CFX_GEModule::Get()->GetCodecModule()->GetIccModule();
+ if (src_Bpp == 3) {
+ pIccModule->TranslateScanline(pIccTransform, src_cache_scan, src_scan,
+ width);
+ } else {
+ uint8_t* dp = src_cache_scan;
+ for (int col = 0; col < width; col++) {
+ pIccModule->TranslateScanline(pIccTransform, dp, src_scan, 1);
+ src_scan += 4;
+ dp += 3;
+ }
+ }
+ _CompositeRow_Rgb2Rgb_Blend_Clip(dest_scan, src_cache_scan, width, blend_type,
+ dest_Bpp, 3, clip_scan);
+}
+inline void _CompositeRow_Rgb2Rgb_NoBlend_NoClip_Transform(
+ uint8_t* dest_scan,
+ const uint8_t* src_scan,
+ int width,
+ int dest_Bpp,
+ int src_Bpp,
+ uint8_t* src_cache_scan,
+ void* pIccTransform) {
+ ICodec_IccModule* pIccModule =
+ CFX_GEModule::Get()->GetCodecModule()->GetIccModule();
+ if (src_Bpp == 3) {
+ pIccModule->TranslateScanline(pIccTransform, src_cache_scan, src_scan,
+ width);
+ } else {
+ uint8_t* dp = src_cache_scan;
+ for (int col = 0; col < width; col++) {
+ pIccModule->TranslateScanline(pIccTransform, dp, src_scan, 1);
+ src_scan += 4;
+ dp += 3;
+ }
+ }
+ _CompositeRow_Rgb2Rgb_NoBlend_NoClip(dest_scan, src_cache_scan, width,
+ dest_Bpp, 3);
+}
+inline void _CompositeRow_Rgb2Rgb_NoBlend_Clip_Transform(
+ uint8_t* dest_scan,
+ const uint8_t* src_scan,
+ int width,
+ int dest_Bpp,
+ int src_Bpp,
+ const uint8_t* clip_scan,
+ uint8_t* src_cache_scan,
+ void* pIccTransform) {
+ ICodec_IccModule* pIccModule =
+ CFX_GEModule::Get()->GetCodecModule()->GetIccModule();
+ if (src_Bpp == 3) {
+ pIccModule->TranslateScanline(pIccTransform, src_cache_scan, src_scan,
+ width);
+ } else {
+ uint8_t* dp = src_cache_scan;
+ for (int col = 0; col < width; col++) {
+ pIccModule->TranslateScanline(pIccTransform, dp, src_scan, 1);
+ src_scan += 4;
+ dp += 3;
+ }
+ }
+ _CompositeRow_Rgb2Rgb_NoBlend_Clip(dest_scan, src_cache_scan, width, dest_Bpp,
+ 3, clip_scan);
+}
+inline void _CompositeRow_8bppPal2Gray(uint8_t* dest_scan,
+ const uint8_t* src_scan,
+ const uint8_t* pPalette,
+ int pixel_count,
+ int blend_type,
+ const uint8_t* clip_scan,
+ const uint8_t* src_alpha_scan) {
+ if (src_alpha_scan) {
+ if (blend_type) {
+ FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE;
+ int blended_color;
+ for (int col = 0; col < pixel_count; col++) {
+ uint8_t gray = pPalette[*src_scan];
+ int src_alpha = *src_alpha_scan++;
+ if (clip_scan) {
+ src_alpha = clip_scan[col] * src_alpha / 255;
}
- } else {
- if (blend_type) {
- FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE;
- int blended_color;
- for (int col = 0; col < pixel_count; col ++) {
- uint8_t gray = pPalette[*src_scan];
- src_scan ++;
- if (clip_scan == NULL || clip_scan[col] == 255) {
- *dest_scan++ = gray;
- *dest_alpha_scan++ = 255;
- continue;
- }
- int src_alpha = clip_scan[col];
- if (src_alpha == 0) {
- dest_scan ++;
- dest_alpha_scan ++;
- continue;
- }
- int back_alpha = *dest_alpha_scan;
- uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 255;
- *dest_alpha_scan ++ = dest_alpha;
- int alpha_ratio = src_alpha * 255 / dest_alpha;
- if (bNonseparableBlend) {
- blended_color = blend_type == FXDIB_BLEND_LUMINOSITY ? gray : *dest_scan;
- }
- gray = bNonseparableBlend ? blended_color : _BLEND(blend_type, *dest_scan, gray);
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, alpha_ratio);
- dest_scan ++;
- }
- return;
+ if (bNonseparableBlend) {
+ blended_color =
+ blend_type == FXDIB_BLEND_LUMINOSITY ? gray : *dest_scan;
}
- for (int col = 0; col < pixel_count; col ++) {
- uint8_t gray = pPalette[*src_scan];
- src_scan ++;
- if (clip_scan == NULL || clip_scan[col] == 255) {
- *dest_scan++ = gray;
- *dest_alpha_scan++ = 255;
- continue;
- }
- int src_alpha = clip_scan[col];
- if (src_alpha == 0) {
- dest_scan ++;
- dest_alpha_scan ++;
- continue;
- }
- int back_alpha = *dest_alpha_scan;
- uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 255;
- *dest_alpha_scan ++ = dest_alpha;
- int alpha_ratio = src_alpha * 255 / dest_alpha;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, alpha_ratio);
- dest_scan ++;
+ gray = bNonseparableBlend ? blended_color
+ : _BLEND(blend_type, *dest_scan, gray);
+ if (src_alpha) {
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, src_alpha);
+ } else {
+ *dest_scan = gray;
}
- }
-}
-inline void _CompositeRow_1bppPal2Gray(uint8_t* dest_scan, const uint8_t* src_scan, int src_left,
- const uint8_t* pPalette, int pixel_count, int blend_type, const uint8_t* clip_scan)
-{
- int reset_gray = pPalette[0];
- int set_gray = pPalette[1];
+ dest_scan++;
+ src_scan++;
+ }
+ return;
+ }
+ for (int col = 0; col < pixel_count; col++) {
+ uint8_t gray = pPalette[*src_scan];
+ int src_alpha = *src_alpha_scan++;
+ if (clip_scan) {
+ src_alpha = clip_scan[col] * src_alpha / 255;
+ }
+ if (src_alpha) {
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, src_alpha);
+ } else {
+ *dest_scan = gray;
+ }
+ dest_scan++;
+ src_scan++;
+ }
+ } else {
if (blend_type) {
- FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE;
- int blended_color;
- for (int col = 0; col < pixel_count; col ++) {
- uint8_t gray = (src_scan[(col + src_left) / 8] & (1 << (7 - (col + src_left) % 8))) ? set_gray : reset_gray;
- if (bNonseparableBlend) {
- blended_color = blend_type == FXDIB_BLEND_LUMINOSITY ? gray : *dest_scan;
- }
- gray = bNonseparableBlend ? blended_color : _BLEND(blend_type, *dest_scan, gray);
- if (clip_scan && clip_scan[col] < 255) {
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, clip_scan[col]);
- } else {
- *dest_scan = gray;
- }
- dest_scan ++;
+ FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE;
+ int blended_color;
+ for (int col = 0; col < pixel_count; col++) {
+ uint8_t gray = pPalette[*src_scan];
+ if (bNonseparableBlend) {
+ blended_color =
+ blend_type == FXDIB_BLEND_LUMINOSITY ? gray : *dest_scan;
}
- return;
- }
- for (int col = 0; col < pixel_count; col ++) {
- uint8_t gray = (src_scan[(col + src_left) / 8] & (1 << (7 - (col + src_left) % 8))) ? set_gray : reset_gray;
+ gray = bNonseparableBlend ? blended_color
+ : _BLEND(blend_type, *dest_scan, gray);
if (clip_scan && clip_scan[col] < 255) {
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, clip_scan[col]);
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, clip_scan[col]);
} else {
- *dest_scan = gray;
+ *dest_scan = gray;
}
- dest_scan ++;
- }
+ dest_scan++;
+ src_scan++;
+ }
+ return;
+ }
+ for (int col = 0; col < pixel_count; col++) {
+ uint8_t gray = pPalette[*src_scan];
+ if (clip_scan && clip_scan[col] < 255) {
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, clip_scan[col]);
+ } else {
+ *dest_scan = gray;
+ }
+ dest_scan++;
+ src_scan++;
+ }
+ }
}
-inline void _CompositeRow_1bppPal2Graya(uint8_t* dest_scan, const uint8_t* src_scan, int src_left,
- const uint8_t* pPalette, int pixel_count, int blend_type, const uint8_t* clip_scan,
- uint8_t* dest_alpha_scan)
-{
- int reset_gray = pPalette[0];
- int set_gray = pPalette[1];
+inline void _CompositeRow_8bppPal2Graya(uint8_t* dest_scan,
+ const uint8_t* src_scan,
+ const uint8_t* pPalette,
+ int pixel_count,
+ int blend_type,
+ const uint8_t* clip_scan,
+ uint8_t* dest_alpha_scan,
+ const uint8_t* src_alpha_scan) {
+ if (src_alpha_scan) {
if (blend_type) {
- FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE;
- int blended_color;
- for (int col = 0; col < pixel_count; col ++) {
- uint8_t gray = (src_scan[(col + src_left) / 8] & (1 << (7 - (col + src_left) % 8))) ? set_gray : reset_gray;
- if (clip_scan == NULL || clip_scan[col] == 255) {
- *dest_scan++ = gray;
- *dest_alpha_scan ++ = 255;
- continue;
- }
- int src_alpha = clip_scan[col];
- if (src_alpha == 0) {
- dest_scan ++;
- dest_alpha_scan ++;
- continue;
- }
- int back_alpha = *dest_alpha_scan;
- uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 255;
- *dest_alpha_scan ++ = dest_alpha;
- int alpha_ratio = src_alpha * 255 / dest_alpha;
- if (bNonseparableBlend) {
- blended_color = blend_type == FXDIB_BLEND_LUMINOSITY ? gray : *dest_scan;
- }
- gray = bNonseparableBlend ? blended_color : _BLEND(blend_type, *dest_scan, gray);
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, alpha_ratio);
- dest_scan ++;
+ FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE;
+ int blended_color;
+ for (int col = 0; col < pixel_count; col++) {
+ uint8_t gray = pPalette[*src_scan];
+ src_scan++;
+ uint8_t back_alpha = *dest_alpha_scan;
+ if (back_alpha == 0) {
+ int src_alpha = *src_alpha_scan++;
+ if (clip_scan) {
+ src_alpha = clip_scan[col] * src_alpha / 255;
+ }
+ if (src_alpha) {
+ *dest_scan = gray;
+ *dest_alpha_scan = src_alpha;
+ }
+ dest_scan++;
+ dest_alpha_scan++;
+ continue;
}
- return;
- }
- for (int col = 0; col < pixel_count; col ++) {
- uint8_t gray = (src_scan[(col + src_left) / 8] & (1 << (7 - (col + src_left) % 8))) ? set_gray : reset_gray;
+ uint8_t src_alpha = *src_alpha_scan++;
+ if (clip_scan) {
+ src_alpha = clip_scan[col] * src_alpha / 255;
+ }
+ if (src_alpha == 0) {
+ dest_scan++;
+ dest_alpha_scan++;
+ continue;
+ }
+ *dest_alpha_scan =
+ back_alpha + src_alpha - back_alpha * src_alpha / 255;
+ int alpha_ratio = src_alpha * 255 / (*dest_alpha_scan);
+ if (bNonseparableBlend) {
+ blended_color =
+ blend_type == FXDIB_BLEND_LUMINOSITY ? gray : *dest_scan;
+ }
+ gray = bNonseparableBlend ? blended_color
+ : _BLEND(blend_type, *dest_scan, gray);
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, alpha_ratio);
+ dest_alpha_scan++;
+ dest_scan++;
+ }
+ return;
+ }
+ for (int col = 0; col < pixel_count; col++) {
+ uint8_t gray = pPalette[*src_scan];
+ src_scan++;
+ uint8_t back_alpha = *dest_alpha_scan;
+ if (back_alpha == 0) {
+ int src_alpha = *src_alpha_scan++;
+ if (clip_scan) {
+ src_alpha = clip_scan[col] * src_alpha / 255;
+ }
+ if (src_alpha) {
+ *dest_scan = gray;
+ *dest_alpha_scan = src_alpha;
+ }
+ dest_scan++;
+ dest_alpha_scan++;
+ continue;
+ }
+ uint8_t src_alpha = *src_alpha_scan++;
+ if (clip_scan) {
+ src_alpha = clip_scan[col] * src_alpha / 255;
+ }
+ if (src_alpha == 0) {
+ dest_scan++;
+ dest_alpha_scan++;
+ continue;
+ }
+ *dest_alpha_scan = back_alpha + src_alpha - back_alpha * src_alpha / 255;
+ int alpha_ratio = src_alpha * 255 / (*dest_alpha_scan);
+ dest_alpha_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, alpha_ratio);
+ dest_scan++;
+ }
+ } else {
+ if (blend_type) {
+ FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE;
+ int blended_color;
+ for (int col = 0; col < pixel_count; col++) {
+ uint8_t gray = pPalette[*src_scan];
+ src_scan++;
if (clip_scan == NULL || clip_scan[col] == 255) {
- *dest_scan++ = gray;
- *dest_alpha_scan ++ = 255;
- continue;
+ *dest_scan++ = gray;
+ *dest_alpha_scan++ = 255;
+ continue;
}
int src_alpha = clip_scan[col];
if (src_alpha == 0) {
- dest_scan ++;
- dest_alpha_scan ++;
- continue;
+ dest_scan++;
+ dest_alpha_scan++;
+ continue;
}
int back_alpha = *dest_alpha_scan;
- uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 255;
- *dest_alpha_scan ++ = dest_alpha;
+ uint8_t dest_alpha =
+ back_alpha + src_alpha - back_alpha * src_alpha / 255;
+ *dest_alpha_scan++ = dest_alpha;
int alpha_ratio = src_alpha * 255 / dest_alpha;
+ if (bNonseparableBlend) {
+ blended_color =
+ blend_type == FXDIB_BLEND_LUMINOSITY ? gray : *dest_scan;
+ }
+ gray = bNonseparableBlend ? blended_color
+ : _BLEND(blend_type, *dest_scan, gray);
*dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, alpha_ratio);
- dest_scan ++;
- }
+ dest_scan++;
+ }
+ return;
+ }
+ for (int col = 0; col < pixel_count; col++) {
+ uint8_t gray = pPalette[*src_scan];
+ src_scan++;
+ if (clip_scan == NULL || clip_scan[col] == 255) {
+ *dest_scan++ = gray;
+ *dest_alpha_scan++ = 255;
+ continue;
+ }
+ int src_alpha = clip_scan[col];
+ if (src_alpha == 0) {
+ dest_scan++;
+ dest_alpha_scan++;
+ continue;
+ }
+ int back_alpha = *dest_alpha_scan;
+ uint8_t dest_alpha =
+ back_alpha + src_alpha - back_alpha * src_alpha / 255;
+ *dest_alpha_scan++ = dest_alpha;
+ int alpha_ratio = src_alpha * 255 / dest_alpha;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, alpha_ratio);
+ dest_scan++;
+ }
+ }
}
-inline void _CompositeRow_8bppRgb2Rgb_NoBlend(uint8_t* dest_scan, const uint8_t* src_scan, FX_DWORD* pPalette, int pixel_count,
- int DestBpp, const uint8_t* clip_scan,
- const uint8_t* src_alpha_scan)
-{
- if (src_alpha_scan) {
- int dest_gap = DestBpp - 3;
- FX_ARGB argb = 0;
- for (int col = 0; col < pixel_count; col ++) {
- argb = pPalette[*src_scan];
- int src_r = FXARGB_R(argb);
- int src_g = FXARGB_G(argb);
- int src_b = FXARGB_B(argb);
- src_scan ++;
- uint8_t src_alpha = 0;
- if (clip_scan) {
- src_alpha = (*src_alpha_scan++) * (*clip_scan++) / 255;
- } else {
- src_alpha = *src_alpha_scan++;
- }
- if (src_alpha == 255) {
- *dest_scan++ = src_b;
- *dest_scan++ = src_g;
- *dest_scan++ = src_r;
- dest_scan += dest_gap;
- continue;
- }
- if (src_alpha == 0) {
- dest_scan += DestBpp;
- continue;
- }
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_b, src_alpha);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_g, src_alpha);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_r, src_alpha);
- dest_scan ++;
- dest_scan += dest_gap;
- }
+inline void _CompositeRow_1bppPal2Gray(uint8_t* dest_scan,
+ const uint8_t* src_scan,
+ int src_left,
+ const uint8_t* pPalette,
+ int pixel_count,
+ int blend_type,
+ const uint8_t* clip_scan) {
+ int reset_gray = pPalette[0];
+ int set_gray = pPalette[1];
+ if (blend_type) {
+ FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE;
+ int blended_color;
+ for (int col = 0; col < pixel_count; col++) {
+ uint8_t gray =
+ (src_scan[(col + src_left) / 8] & (1 << (7 - (col + src_left) % 8)))
+ ? set_gray
+ : reset_gray;
+ if (bNonseparableBlend) {
+ blended_color =
+ blend_type == FXDIB_BLEND_LUMINOSITY ? gray : *dest_scan;
+ }
+ gray = bNonseparableBlend ? blended_color
+ : _BLEND(blend_type, *dest_scan, gray);
+ if (clip_scan && clip_scan[col] < 255) {
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, clip_scan[col]);
+ } else {
+ *dest_scan = gray;
+ }
+ dest_scan++;
+ }
+ return;
+ }
+ for (int col = 0; col < pixel_count; col++) {
+ uint8_t gray =
+ (src_scan[(col + src_left) / 8] & (1 << (7 - (col + src_left) % 8)))
+ ? set_gray
+ : reset_gray;
+ if (clip_scan && clip_scan[col] < 255) {
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, clip_scan[col]);
} else {
- FX_ARGB argb = 0;
- for (int col = 0; col < pixel_count; col ++) {
- argb = pPalette[*src_scan];
- int src_r = FXARGB_R(argb);
- int src_g = FXARGB_G(argb);
- int src_b = FXARGB_B(argb);
- if (clip_scan && clip_scan[col] < 255) {
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_b, clip_scan[col]);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_g, clip_scan[col]);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_r, clip_scan[col]);
- dest_scan ++;
- } else {
- *dest_scan++ = src_b;
- *dest_scan++ = src_g;
- *dest_scan++ = src_r;
- }
- if (DestBpp == 4) {
- dest_scan++;
- }
- src_scan ++;
- }
+ *dest_scan = gray;
}
+ dest_scan++;
+ }
}
-inline void _CompositeRow_1bppRgb2Rgb_NoBlend(uint8_t* dest_scan, const uint8_t* src_scan, int src_left,
- FX_DWORD* pPalette, int pixel_count, int DestBpp, const uint8_t* clip_scan)
-{
- int reset_r, reset_g, reset_b;
- int set_r, set_g, set_b;
- reset_r = FXARGB_R(pPalette[0]);
- reset_g = FXARGB_G(pPalette[0]);
- reset_b = FXARGB_B(pPalette[0]);
- set_r = FXARGB_R(pPalette[1]);
- set_g = FXARGB_G(pPalette[1]);
- set_b = FXARGB_B(pPalette[1]);
- for (int col = 0; col < pixel_count; col ++) {
- int src_r, src_g, src_b;
- if (src_scan[(col + src_left) / 8] & (1 << (7 - (col + src_left) % 8))) {
- src_r = set_r;
- src_g = set_g;
- src_b = set_b;
- } else {
- src_r = reset_r;
- src_g = reset_g;
- src_b = reset_b;
- }
- if (clip_scan && clip_scan[col] < 255) {
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_b, clip_scan[col]);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_g, clip_scan[col]);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_r, clip_scan[col]);
- dest_scan ++;
- } else {
- *dest_scan++ = src_b;
- *dest_scan++ = src_g;
- *dest_scan++ = src_r;
- }
- if (DestBpp == 4) {
- dest_scan++;
- }
- }
-}
-inline void _CompositeRow_8bppRgb2Argb_NoBlend(uint8_t* dest_scan, const uint8_t* src_scan, int width,
- FX_DWORD* pPalette, const uint8_t* clip_scan,
- const uint8_t* src_alpha_scan)
-{
- if (src_alpha_scan) {
- for (int col = 0; col < width; col ++) {
- FX_ARGB argb = pPalette[*src_scan];
- src_scan ++;
- int src_r = FXARGB_R(argb);
- int src_g = FXARGB_G(argb);
- int src_b = FXARGB_B(argb);
- uint8_t back_alpha = dest_scan[3];
- if (back_alpha == 0) {
- if (clip_scan) {
- int src_alpha = clip_scan[col] * (*src_alpha_scan) / 255;
- FXARGB_SETDIB(dest_scan, FXARGB_MAKE(src_alpha, src_r, src_g, src_b));
- } else {
- FXARGB_SETDIB(dest_scan, FXARGB_MAKE(*src_alpha_scan, src_r, src_g, src_b));
- }
- dest_scan += 4;
- src_alpha_scan ++;
- continue;
- }
- uint8_t src_alpha;
- if (clip_scan == NULL) {
- src_alpha = *src_alpha_scan ++;
- } else {
- src_alpha = clip_scan[col] * (*src_alpha_scan++) / 255;
- }
- if (src_alpha == 0) {
- dest_scan += 4;
- continue;
- }
- uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 255;
- dest_scan[3] = dest_alpha;
- int alpha_ratio = src_alpha * 255 / dest_alpha;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_b, alpha_ratio);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_g, alpha_ratio);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_r, alpha_ratio);
- dest_scan ++;
- dest_scan ++;
- }
- } else
- for (int col = 0; col < width; col ++) {
- FX_ARGB argb = pPalette[*src_scan];
- int src_r = FXARGB_R(argb);
- int src_g = FXARGB_G(argb);
- int src_b = FXARGB_B(argb);
- if (clip_scan == NULL || clip_scan[col] == 255) {
- *dest_scan++ = src_b;
- *dest_scan++ = src_g;
- *dest_scan++ = src_r;
- *dest_scan++ = 255;
- src_scan ++;
- continue;
- }
- int src_alpha = clip_scan[col];
- if (src_alpha == 0) {
- dest_scan += 4;
- src_scan ++;
- continue;
- }
- int back_alpha = dest_scan[3];
- uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 255;
- dest_scan[3] = dest_alpha;
- int alpha_ratio = src_alpha * 255 / dest_alpha;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_b, alpha_ratio);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_g, alpha_ratio);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_r, alpha_ratio);
- dest_scan ++;
- dest_scan ++;
- src_scan ++;
- }
+inline void _CompositeRow_1bppPal2Graya(uint8_t* dest_scan,
+ const uint8_t* src_scan,
+ int src_left,
+ const uint8_t* pPalette,
+ int pixel_count,
+ int blend_type,
+ const uint8_t* clip_scan,
+ uint8_t* dest_alpha_scan) {
+ int reset_gray = pPalette[0];
+ int set_gray = pPalette[1];
+ if (blend_type) {
+ FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE;
+ int blended_color;
+ for (int col = 0; col < pixel_count; col++) {
+ uint8_t gray =
+ (src_scan[(col + src_left) / 8] & (1 << (7 - (col + src_left) % 8)))
+ ? set_gray
+ : reset_gray;
+ if (clip_scan == NULL || clip_scan[col] == 255) {
+ *dest_scan++ = gray;
+ *dest_alpha_scan++ = 255;
+ continue;
+ }
+ int src_alpha = clip_scan[col];
+ if (src_alpha == 0) {
+ dest_scan++;
+ dest_alpha_scan++;
+ continue;
+ }
+ int back_alpha = *dest_alpha_scan;
+ uint8_t dest_alpha =
+ back_alpha + src_alpha - back_alpha * src_alpha / 255;
+ *dest_alpha_scan++ = dest_alpha;
+ int alpha_ratio = src_alpha * 255 / dest_alpha;
+ if (bNonseparableBlend) {
+ blended_color =
+ blend_type == FXDIB_BLEND_LUMINOSITY ? gray : *dest_scan;
+ }
+ gray = bNonseparableBlend ? blended_color
+ : _BLEND(blend_type, *dest_scan, gray);
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, alpha_ratio);
+ dest_scan++;
+ }
+ return;
+ }
+ for (int col = 0; col < pixel_count; col++) {
+ uint8_t gray =
+ (src_scan[(col + src_left) / 8] & (1 << (7 - (col + src_left) % 8)))
+ ? set_gray
+ : reset_gray;
+ if (clip_scan == NULL || clip_scan[col] == 255) {
+ *dest_scan++ = gray;
+ *dest_alpha_scan++ = 255;
+ continue;
+ }
+ int src_alpha = clip_scan[col];
+ if (src_alpha == 0) {
+ dest_scan++;
+ dest_alpha_scan++;
+ continue;
+ }
+ int back_alpha = *dest_alpha_scan;
+ uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 255;
+ *dest_alpha_scan++ = dest_alpha;
+ int alpha_ratio = src_alpha * 255 / dest_alpha;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, alpha_ratio);
+ dest_scan++;
+ }
}
-void _CompositeRow_8bppRgb2Rgba_NoBlend(uint8_t* dest_scan, const uint8_t* src_scan, int width,
- FX_DWORD* pPalette, const uint8_t* clip_scan,
- uint8_t* dest_alpha_scan, const uint8_t* src_alpha_scan)
-{
- if (src_alpha_scan) {
- for (int col = 0; col < width; col ++) {
- FX_ARGB argb = pPalette[*src_scan];
- src_scan ++;
- int src_r = FXARGB_R(argb);
- int src_g = FXARGB_G(argb);
- int src_b = FXARGB_B(argb);
- uint8_t back_alpha = *dest_alpha_scan;
- if (back_alpha == 0) {
- if (clip_scan) {
- int src_alpha = clip_scan[col] * (*src_alpha_scan) / 255;
- *dest_alpha_scan ++ = src_alpha;
- } else {
- *dest_alpha_scan ++ = *src_alpha_scan;
- }
- *dest_scan ++ = src_b;
- *dest_scan ++ = src_g;
- *dest_scan ++ = src_r;
- src_alpha_scan ++;
- continue;
- }
- uint8_t src_alpha;
- if (clip_scan == NULL) {
- src_alpha = *src_alpha_scan++;
- } else {
- src_alpha = clip_scan[col] * (*src_alpha_scan++) / 255;
- }
- if (src_alpha == 0) {
- dest_scan += 3;
- dest_alpha_scan ++;
- continue;
- }
- uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 255;
- *dest_alpha_scan ++ = dest_alpha;
- int alpha_ratio = src_alpha * 255 / dest_alpha;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_b, alpha_ratio);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_g, alpha_ratio);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_r, alpha_ratio);
- dest_scan ++;
- }
- } else
- for (int col = 0; col < width; col ++) {
- FX_ARGB argb = pPalette[*src_scan];
- int src_r = FXARGB_R(argb);
- int src_g = FXARGB_G(argb);
- int src_b = FXARGB_B(argb);
- if (clip_scan == NULL || clip_scan[col] == 255) {
- *dest_scan++ = src_b;
- *dest_scan++ = src_g;
- *dest_scan++ = src_r;
- *dest_alpha_scan++ = 255;
- src_scan ++;
- continue;
- }
- int src_alpha = clip_scan[col];
- if (src_alpha == 0) {
- dest_scan += 3;
- dest_alpha_scan ++;
- src_scan ++;
- continue;
- }
- int back_alpha = *dest_alpha_scan;
- uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 255;
- *dest_alpha_scan ++ = dest_alpha;
- int alpha_ratio = src_alpha * 255 / dest_alpha;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_b, alpha_ratio);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_g, alpha_ratio);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_r, alpha_ratio);
- dest_scan ++;
- src_scan ++;
- }
+inline void _CompositeRow_8bppRgb2Rgb_NoBlend(uint8_t* dest_scan,
+ const uint8_t* src_scan,
+ FX_DWORD* pPalette,
+ int pixel_count,
+ int DestBpp,
+ const uint8_t* clip_scan,
+ const uint8_t* src_alpha_scan) {
+ if (src_alpha_scan) {
+ int dest_gap = DestBpp - 3;
+ FX_ARGB argb = 0;
+ for (int col = 0; col < pixel_count; col++) {
+ argb = pPalette[*src_scan];
+ int src_r = FXARGB_R(argb);
+ int src_g = FXARGB_G(argb);
+ int src_b = FXARGB_B(argb);
+ src_scan++;
+ uint8_t src_alpha = 0;
+ if (clip_scan) {
+ src_alpha = (*src_alpha_scan++) * (*clip_scan++) / 255;
+ } else {
+ src_alpha = *src_alpha_scan++;
+ }
+ if (src_alpha == 255) {
+ *dest_scan++ = src_b;
+ *dest_scan++ = src_g;
+ *dest_scan++ = src_r;
+ dest_scan += dest_gap;
+ continue;
+ }
+ if (src_alpha == 0) {
+ dest_scan += DestBpp;
+ continue;
+ }
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_b, src_alpha);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_g, src_alpha);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_r, src_alpha);
+ dest_scan++;
+ dest_scan += dest_gap;
+ }
+ } else {
+ FX_ARGB argb = 0;
+ for (int col = 0; col < pixel_count; col++) {
+ argb = pPalette[*src_scan];
+ int src_r = FXARGB_R(argb);
+ int src_g = FXARGB_G(argb);
+ int src_b = FXARGB_B(argb);
+ if (clip_scan && clip_scan[col] < 255) {
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_b, clip_scan[col]);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_g, clip_scan[col]);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_r, clip_scan[col]);
+ dest_scan++;
+ } else {
+ *dest_scan++ = src_b;
+ *dest_scan++ = src_g;
+ *dest_scan++ = src_r;
+ }
+ if (DestBpp == 4) {
+ dest_scan++;
+ }
+ src_scan++;
+ }
+ }
}
-inline void _CompositeRow_1bppRgb2Argb_NoBlend(uint8_t* dest_scan, const uint8_t* src_scan, int src_left, int width,
- FX_DWORD* pPalette, const uint8_t* clip_scan)
-{
- int reset_r, reset_g, reset_b;
- int set_r, set_g, set_b;
- reset_r = FXARGB_R(pPalette[0]);
- reset_g = FXARGB_G(pPalette[0]);
- reset_b = FXARGB_B(pPalette[0]);
- set_r = FXARGB_R(pPalette[1]);
- set_g = FXARGB_G(pPalette[1]);
- set_b = FXARGB_B(pPalette[1]);
- for (int col = 0; col < width; col ++) {
- int src_r, src_g, src_b;
- if (src_scan[(col + src_left) / 8] & (1 << (7 - (col + src_left) % 8))) {
- src_r = set_r;
- src_g = set_g;
- src_b = set_b;
- } else {
- src_r = reset_r;
- src_g = reset_g;
- src_b = reset_b;
- }
- if (clip_scan == NULL || clip_scan[col] == 255) {
- *dest_scan++ = src_b;
- *dest_scan++ = src_g;
- *dest_scan++ = src_r;
- *dest_scan++ = 255;
- continue;
- }
- int src_alpha = clip_scan[col];
- if (src_alpha == 0) {
- dest_scan += 4;
- continue;
- }
- int back_alpha = dest_scan[3];
- uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 255;
- dest_scan[3] = dest_alpha;
- int alpha_ratio = src_alpha * 255 / dest_alpha;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_b, alpha_ratio);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_g, alpha_ratio);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_r, alpha_ratio);
- dest_scan ++;
- dest_scan ++;
+inline void _CompositeRow_1bppRgb2Rgb_NoBlend(uint8_t* dest_scan,
+ const uint8_t* src_scan,
+ int src_left,
+ FX_DWORD* pPalette,
+ int pixel_count,
+ int DestBpp,
+ const uint8_t* clip_scan) {
+ int reset_r, reset_g, reset_b;
+ int set_r, set_g, set_b;
+ reset_r = FXARGB_R(pPalette[0]);
+ reset_g = FXARGB_G(pPalette[0]);
+ reset_b = FXARGB_B(pPalette[0]);
+ set_r = FXARGB_R(pPalette[1]);
+ set_g = FXARGB_G(pPalette[1]);
+ set_b = FXARGB_B(pPalette[1]);
+ for (int col = 0; col < pixel_count; col++) {
+ int src_r, src_g, src_b;
+ if (src_scan[(col + src_left) / 8] & (1 << (7 - (col + src_left) % 8))) {
+ src_r = set_r;
+ src_g = set_g;
+ src_b = set_b;
+ } else {
+ src_r = reset_r;
+ src_g = reset_g;
+ src_b = reset_b;
+ }
+ if (clip_scan && clip_scan[col] < 255) {
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_b, clip_scan[col]);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_g, clip_scan[col]);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_r, clip_scan[col]);
+ dest_scan++;
+ } else {
+ *dest_scan++ = src_b;
+ *dest_scan++ = src_g;
+ *dest_scan++ = src_r;
}
-}
-void _CompositeRow_1bppRgb2Rgba_NoBlend(uint8_t* dest_scan, const uint8_t* src_scan, int src_left, int width,
- FX_DWORD* pPalette, const uint8_t* clip_scan,
- uint8_t* dest_alpha_scan)
-{
- int reset_r, reset_g, reset_b;
- int set_r, set_g, set_b;
- reset_r = FXARGB_R(pPalette[0]);
- reset_g = FXARGB_G(pPalette[0]);
- reset_b = FXARGB_B(pPalette[0]);
- set_r = FXARGB_R(pPalette[1]);
- set_g = FXARGB_G(pPalette[1]);
- set_b = FXARGB_B(pPalette[1]);
- for (int col = 0; col < width; col ++) {
- int src_r, src_g, src_b;
- if (src_scan[(col + src_left) / 8] & (1 << (7 - (col + src_left) % 8))) {
- src_r = set_r;
- src_g = set_g;
- src_b = set_b;
- } else {
- src_r = reset_r;
- src_g = reset_g;
- src_b = reset_b;
- }
- if (clip_scan == NULL || clip_scan[col] == 255) {
- *dest_scan++ = src_b;
- *dest_scan++ = src_g;
- *dest_scan++ = src_r;
- *dest_alpha_scan++ = 255;
- continue;
- }
- int src_alpha = clip_scan[col];
- if (src_alpha == 0) {
- dest_scan += 3;
- dest_alpha_scan ++;
- continue;
- }
- int back_alpha = *dest_alpha_scan;
- uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 255;
- *dest_alpha_scan ++ = dest_alpha;
- int alpha_ratio = src_alpha * 255 / dest_alpha;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_b, alpha_ratio);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_g, alpha_ratio);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_r, alpha_ratio);
- dest_scan ++;
+ if (DestBpp == 4) {
+ dest_scan++;
}
+ }
}
-void _CompositeRow_ByteMask2Argb(uint8_t* dest_scan, const uint8_t* src_scan, int mask_alpha, int src_r, int src_g, int src_b, int pixel_count,
- int blend_type, const uint8_t* clip_scan)
-{
- for (int col = 0; col < pixel_count; col ++) {
- int src_alpha;
+inline void _CompositeRow_8bppRgb2Argb_NoBlend(uint8_t* dest_scan,
+ const uint8_t* src_scan,
+ int width,
+ FX_DWORD* pPalette,
+ const uint8_t* clip_scan,
+ const uint8_t* src_alpha_scan) {
+ if (src_alpha_scan) {
+ for (int col = 0; col < width; col++) {
+ FX_ARGB argb = pPalette[*src_scan];
+ src_scan++;
+ int src_r = FXARGB_R(argb);
+ int src_g = FXARGB_G(argb);
+ int src_b = FXARGB_B(argb);
+ uint8_t back_alpha = dest_scan[3];
+ if (back_alpha == 0) {
if (clip_scan) {
- src_alpha = mask_alpha * clip_scan[col] * src_scan[col] / 255 / 255;
+ int src_alpha = clip_scan[col] * (*src_alpha_scan) / 255;
+ FXARGB_SETDIB(dest_scan, FXARGB_MAKE(src_alpha, src_r, src_g, src_b));
} else {
- src_alpha = mask_alpha * src_scan[col] / 255;
+ FXARGB_SETDIB(dest_scan,
+ FXARGB_MAKE(*src_alpha_scan, src_r, src_g, src_b));
}
- uint8_t back_alpha = dest_scan[3];
- if (back_alpha == 0) {
- FXARGB_SETDIB(dest_scan, FXARGB_MAKE(src_alpha, src_r, src_g, src_b));
- dest_scan += 4;
- continue;
- }
- if (src_alpha == 0) {
- dest_scan += 4;
- continue;
- }
- uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 255;
- dest_scan[3] = dest_alpha;
- int alpha_ratio = src_alpha * 255 / dest_alpha;
- if (blend_type >= FXDIB_BLEND_NONSEPARABLE) {
- int blended_colors[3];
- uint8_t src_scan[3];
- src_scan[0] = src_b;
- src_scan[1] = src_g;
- src_scan[2] = src_r;
- _RGB_Blend(blend_type, src_scan, dest_scan, blended_colors);
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[0], alpha_ratio);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[1], alpha_ratio);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[2], alpha_ratio);
- } else if (blend_type) {
- int blended = _BLEND(blend_type, *dest_scan, src_b);
- blended = FXDIB_ALPHA_MERGE(src_b, blended, back_alpha);
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended, alpha_ratio);
- dest_scan ++;
- blended = _BLEND(blend_type, *dest_scan, src_g);
- blended = FXDIB_ALPHA_MERGE(src_g, blended, back_alpha);
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended, alpha_ratio);
- dest_scan ++;
- blended = _BLEND(blend_type, *dest_scan, src_r);
- blended = FXDIB_ALPHA_MERGE(src_r, blended, back_alpha);
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended, alpha_ratio);
- } else {
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_b, alpha_ratio);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_g, alpha_ratio);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_r, alpha_ratio);
- }
- dest_scan += 2;
+ dest_scan += 4;
+ src_alpha_scan++;
+ continue;
+ }
+ uint8_t src_alpha;
+ if (clip_scan == NULL) {
+ src_alpha = *src_alpha_scan++;
+ } else {
+ src_alpha = clip_scan[col] * (*src_alpha_scan++) / 255;
+ }
+ if (src_alpha == 0) {
+ dest_scan += 4;
+ continue;
+ }
+ uint8_t dest_alpha =
+ back_alpha + src_alpha - back_alpha * src_alpha / 255;
+ dest_scan[3] = dest_alpha;
+ int alpha_ratio = src_alpha * 255 / dest_alpha;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_b, alpha_ratio);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_g, alpha_ratio);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_r, alpha_ratio);
+ dest_scan++;
+ dest_scan++;
+ }
+ } else
+ for (int col = 0; col < width; col++) {
+ FX_ARGB argb = pPalette[*src_scan];
+ int src_r = FXARGB_R(argb);
+ int src_g = FXARGB_G(argb);
+ int src_b = FXARGB_B(argb);
+ if (clip_scan == NULL || clip_scan[col] == 255) {
+ *dest_scan++ = src_b;
+ *dest_scan++ = src_g;
+ *dest_scan++ = src_r;
+ *dest_scan++ = 255;
+ src_scan++;
+ continue;
+ }
+ int src_alpha = clip_scan[col];
+ if (src_alpha == 0) {
+ dest_scan += 4;
+ src_scan++;
+ continue;
+ }
+ int back_alpha = dest_scan[3];
+ uint8_t dest_alpha =
+ back_alpha + src_alpha - back_alpha * src_alpha / 255;
+ dest_scan[3] = dest_alpha;
+ int alpha_ratio = src_alpha * 255 / dest_alpha;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_b, alpha_ratio);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_g, alpha_ratio);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_r, alpha_ratio);
+ dest_scan++;
+ dest_scan++;
+ src_scan++;
}
}
-void _CompositeRow_ByteMask2Rgba(uint8_t* dest_scan, const uint8_t* src_scan, int mask_alpha, int src_r, int src_g, int src_b, int pixel_count,
- int blend_type, const uint8_t* clip_scan,
- uint8_t* dest_alpha_scan)
-{
- for (int col = 0; col < pixel_count; col ++) {
- int src_alpha;
+void _CompositeRow_8bppRgb2Rgba_NoBlend(uint8_t* dest_scan,
+ const uint8_t* src_scan,
+ int width,
+ FX_DWORD* pPalette,
+ const uint8_t* clip_scan,
+ uint8_t* dest_alpha_scan,
+ const uint8_t* src_alpha_scan) {
+ if (src_alpha_scan) {
+ for (int col = 0; col < width; col++) {
+ FX_ARGB argb = pPalette[*src_scan];
+ src_scan++;
+ int src_r = FXARGB_R(argb);
+ int src_g = FXARGB_G(argb);
+ int src_b = FXARGB_B(argb);
+ uint8_t back_alpha = *dest_alpha_scan;
+ if (back_alpha == 0) {
if (clip_scan) {
- src_alpha = mask_alpha * clip_scan[col] * src_scan[col] / 255 / 255;
+ int src_alpha = clip_scan[col] * (*src_alpha_scan) / 255;
+ *dest_alpha_scan++ = src_alpha;
} else {
- src_alpha = mask_alpha * src_scan[col] / 255;
- }
- uint8_t back_alpha = *dest_alpha_scan;
- if (back_alpha == 0) {
- *dest_scan ++ = src_b;
- *dest_scan ++ = src_g;
- *dest_scan ++ = src_r;
- *dest_alpha_scan ++ = src_alpha;
- continue;
- }
- if (src_alpha == 0) {
- dest_scan += 3;
- dest_alpha_scan ++;
- continue;
- }
- uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 255;
- *dest_alpha_scan ++ = dest_alpha;
- int alpha_ratio = src_alpha * 255 / dest_alpha;
- if (blend_type >= FXDIB_BLEND_NONSEPARABLE) {
- int blended_colors[3];
- uint8_t src_scan[3];
- src_scan[0] = src_b;
- src_scan[1] = src_g;
- src_scan[2] = src_r;
- _RGB_Blend(blend_type, src_scan, dest_scan, blended_colors);
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[0], alpha_ratio);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[1], alpha_ratio);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[2], alpha_ratio);
- dest_scan ++;
- } else if (blend_type) {
- int blended = _BLEND(blend_type, *dest_scan, src_b);
- blended = FXDIB_ALPHA_MERGE(src_b, blended, back_alpha);
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended, alpha_ratio);
- dest_scan ++;
- blended = _BLEND(blend_type, *dest_scan, src_g);
- blended = FXDIB_ALPHA_MERGE(src_g, blended, back_alpha);
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended, alpha_ratio);
- dest_scan ++;
- blended = _BLEND(blend_type, *dest_scan, src_r);
- blended = FXDIB_ALPHA_MERGE(src_r, blended, back_alpha);
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended, alpha_ratio);
- dest_scan ++;
- } else {
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_b, alpha_ratio);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_g, alpha_ratio);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_r, alpha_ratio);
- dest_scan ++;
- }
+ *dest_alpha_scan++ = *src_alpha_scan;
+ }
+ *dest_scan++ = src_b;
+ *dest_scan++ = src_g;
+ *dest_scan++ = src_r;
+ src_alpha_scan++;
+ continue;
+ }
+ uint8_t src_alpha;
+ if (clip_scan == NULL) {
+ src_alpha = *src_alpha_scan++;
+ } else {
+ src_alpha = clip_scan[col] * (*src_alpha_scan++) / 255;
+ }
+ if (src_alpha == 0) {
+ dest_scan += 3;
+ dest_alpha_scan++;
+ continue;
+ }
+ uint8_t dest_alpha =
+ back_alpha + src_alpha - back_alpha * src_alpha / 255;
+ *dest_alpha_scan++ = dest_alpha;
+ int alpha_ratio = src_alpha * 255 / dest_alpha;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_b, alpha_ratio);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_g, alpha_ratio);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_r, alpha_ratio);
+ dest_scan++;
+ }
+ } else
+ for (int col = 0; col < width; col++) {
+ FX_ARGB argb = pPalette[*src_scan];
+ int src_r = FXARGB_R(argb);
+ int src_g = FXARGB_G(argb);
+ int src_b = FXARGB_B(argb);
+ if (clip_scan == NULL || clip_scan[col] == 255) {
+ *dest_scan++ = src_b;
+ *dest_scan++ = src_g;
+ *dest_scan++ = src_r;
+ *dest_alpha_scan++ = 255;
+ src_scan++;
+ continue;
+ }
+ int src_alpha = clip_scan[col];
+ if (src_alpha == 0) {
+ dest_scan += 3;
+ dest_alpha_scan++;
+ src_scan++;
+ continue;
+ }
+ int back_alpha = *dest_alpha_scan;
+ uint8_t dest_alpha =
+ back_alpha + src_alpha - back_alpha * src_alpha / 255;
+ *dest_alpha_scan++ = dest_alpha;
+ int alpha_ratio = src_alpha * 255 / dest_alpha;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_b, alpha_ratio);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_g, alpha_ratio);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_r, alpha_ratio);
+ dest_scan++;
+ src_scan++;
}
}
-void _CompositeRow_ByteMask2Rgb(uint8_t* dest_scan, const uint8_t* src_scan, int mask_alpha, int src_r, int src_g, int src_b, int pixel_count,
- int blend_type, int Bpp, const uint8_t* clip_scan)
-{
- for (int col = 0; col < pixel_count; col ++) {
- int src_alpha;
- if (clip_scan) {
- src_alpha = mask_alpha * clip_scan[col] * src_scan[col] / 255 / 255;
- } else {
- src_alpha = mask_alpha * src_scan[col] / 255;
- }
- if (src_alpha == 0) {
- dest_scan += Bpp;
- continue;
- }
- if (blend_type >= FXDIB_BLEND_NONSEPARABLE) {
- int blended_colors[3];
- uint8_t src_scan[3];
- src_scan[0] = src_b;
- src_scan[1] = src_g;
- src_scan[2] = src_r;
- _RGB_Blend(blend_type, src_scan, dest_scan, blended_colors);
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[0], src_alpha);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[1], src_alpha);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[2], src_alpha);
- } else if (blend_type) {
- int blended = _BLEND(blend_type, *dest_scan, src_b);
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended, src_alpha);
- dest_scan ++;
- blended = _BLEND(blend_type, *dest_scan, src_g);
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended, src_alpha);
- dest_scan ++;
- blended = _BLEND(blend_type, *dest_scan, src_r);
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended, src_alpha);
- } else {
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_b, src_alpha);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_g, src_alpha);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_r, src_alpha);
- }
- dest_scan += Bpp - 2;
- }
+inline void _CompositeRow_1bppRgb2Argb_NoBlend(uint8_t* dest_scan,
+ const uint8_t* src_scan,
+ int src_left,
+ int width,
+ FX_DWORD* pPalette,
+ const uint8_t* clip_scan) {
+ int reset_r, reset_g, reset_b;
+ int set_r, set_g, set_b;
+ reset_r = FXARGB_R(pPalette[0]);
+ reset_g = FXARGB_G(pPalette[0]);
+ reset_b = FXARGB_B(pPalette[0]);
+ set_r = FXARGB_R(pPalette[1]);
+ set_g = FXARGB_G(pPalette[1]);
+ set_b = FXARGB_B(pPalette[1]);
+ for (int col = 0; col < width; col++) {
+ int src_r, src_g, src_b;
+ if (src_scan[(col + src_left) / 8] & (1 << (7 - (col + src_left) % 8))) {
+ src_r = set_r;
+ src_g = set_g;
+ src_b = set_b;
+ } else {
+ src_r = reset_r;
+ src_g = reset_g;
+ src_b = reset_b;
+ }
+ if (clip_scan == NULL || clip_scan[col] == 255) {
+ *dest_scan++ = src_b;
+ *dest_scan++ = src_g;
+ *dest_scan++ = src_r;
+ *dest_scan++ = 255;
+ continue;
+ }
+ int src_alpha = clip_scan[col];
+ if (src_alpha == 0) {
+ dest_scan += 4;
+ continue;
+ }
+ int back_alpha = dest_scan[3];
+ uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 255;
+ dest_scan[3] = dest_alpha;
+ int alpha_ratio = src_alpha * 255 / dest_alpha;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_b, alpha_ratio);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_g, alpha_ratio);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_r, alpha_ratio);
+ dest_scan++;
+ dest_scan++;
+ }
}
-void _CompositeRow_ByteMask2Mask(uint8_t* dest_scan, const uint8_t* src_scan, int mask_alpha, int pixel_count,
- const uint8_t* clip_scan)
-{
- for (int col = 0; col < pixel_count; col ++) {
- int src_alpha;
- if (clip_scan) {
- src_alpha = mask_alpha * clip_scan[col] * src_scan[col] / 255 / 255;
- } else {
- src_alpha = mask_alpha * src_scan[col] / 255;
- }
- uint8_t back_alpha = *dest_scan;
- if (!back_alpha) {
- *dest_scan = src_alpha;
- } else if (src_alpha) {
- *dest_scan = back_alpha + src_alpha - back_alpha * src_alpha / 255;
- }
- dest_scan ++;
+void _CompositeRow_1bppRgb2Rgba_NoBlend(uint8_t* dest_scan,
+ const uint8_t* src_scan,
+ int src_left,
+ int width,
+ FX_DWORD* pPalette,
+ const uint8_t* clip_scan,
+ uint8_t* dest_alpha_scan) {
+ int reset_r, reset_g, reset_b;
+ int set_r, set_g, set_b;
+ reset_r = FXARGB_R(pPalette[0]);
+ reset_g = FXARGB_G(pPalette[0]);
+ reset_b = FXARGB_B(pPalette[0]);
+ set_r = FXARGB_R(pPalette[1]);
+ set_g = FXARGB_G(pPalette[1]);
+ set_b = FXARGB_B(pPalette[1]);
+ for (int col = 0; col < width; col++) {
+ int src_r, src_g, src_b;
+ if (src_scan[(col + src_left) / 8] & (1 << (7 - (col + src_left) % 8))) {
+ src_r = set_r;
+ src_g = set_g;
+ src_b = set_b;
+ } else {
+ src_r = reset_r;
+ src_g = reset_g;
+ src_b = reset_b;
+ }
+ if (clip_scan == NULL || clip_scan[col] == 255) {
+ *dest_scan++ = src_b;
+ *dest_scan++ = src_g;
+ *dest_scan++ = src_r;
+ *dest_alpha_scan++ = 255;
+ continue;
+ }
+ int src_alpha = clip_scan[col];
+ if (src_alpha == 0) {
+ dest_scan += 3;
+ dest_alpha_scan++;
+ continue;
+ }
+ int back_alpha = *dest_alpha_scan;
+ uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 255;
+ *dest_alpha_scan++ = dest_alpha;
+ int alpha_ratio = src_alpha * 255 / dest_alpha;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_b, alpha_ratio);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_g, alpha_ratio);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_r, alpha_ratio);
+ dest_scan++;
+ }
+}
+void _CompositeRow_ByteMask2Argb(uint8_t* dest_scan,
+ const uint8_t* src_scan,
+ int mask_alpha,
+ int src_r,
+ int src_g,
+ int src_b,
+ int pixel_count,
+ int blend_type,
+ const uint8_t* clip_scan) {
+ for (int col = 0; col < pixel_count; col++) {
+ int src_alpha;
+ if (clip_scan) {
+ src_alpha = mask_alpha * clip_scan[col] * src_scan[col] / 255 / 255;
+ } else {
+ src_alpha = mask_alpha * src_scan[col] / 255;
+ }
+ uint8_t back_alpha = dest_scan[3];
+ if (back_alpha == 0) {
+ FXARGB_SETDIB(dest_scan, FXARGB_MAKE(src_alpha, src_r, src_g, src_b));
+ dest_scan += 4;
+ continue;
}
+ if (src_alpha == 0) {
+ dest_scan += 4;
+ continue;
+ }
+ uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 255;
+ dest_scan[3] = dest_alpha;
+ int alpha_ratio = src_alpha * 255 / dest_alpha;
+ if (blend_type >= FXDIB_BLEND_NONSEPARABLE) {
+ int blended_colors[3];
+ uint8_t src_scan[3];
+ src_scan[0] = src_b;
+ src_scan[1] = src_g;
+ src_scan[2] = src_r;
+ _RGB_Blend(blend_type, src_scan, dest_scan, blended_colors);
+ *dest_scan =
+ FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[0], alpha_ratio);
+ dest_scan++;
+ *dest_scan =
+ FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[1], alpha_ratio);
+ dest_scan++;
+ *dest_scan =
+ FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[2], alpha_ratio);
+ } else if (blend_type) {
+ int blended = _BLEND(blend_type, *dest_scan, src_b);
+ blended = FXDIB_ALPHA_MERGE(src_b, blended, back_alpha);
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended, alpha_ratio);
+ dest_scan++;
+ blended = _BLEND(blend_type, *dest_scan, src_g);
+ blended = FXDIB_ALPHA_MERGE(src_g, blended, back_alpha);
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended, alpha_ratio);
+ dest_scan++;
+ blended = _BLEND(blend_type, *dest_scan, src_r);
+ blended = FXDIB_ALPHA_MERGE(src_r, blended, back_alpha);
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended, alpha_ratio);
+ } else {
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_b, alpha_ratio);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_g, alpha_ratio);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_r, alpha_ratio);
+ }
+ dest_scan += 2;
+ }
}
-void _CompositeRow_ByteMask2Gray(uint8_t* dest_scan, const uint8_t* src_scan, int mask_alpha, int src_gray,
- int pixel_count, const uint8_t* clip_scan)
-{
- for (int col = 0; col < pixel_count; col ++) {
- int src_alpha;
- if (clip_scan) {
- src_alpha = mask_alpha * clip_scan[col] * src_scan[col] / 255 / 255;
- } else {
- src_alpha = mask_alpha * src_scan[col] / 255;
- }
- if (src_alpha) {
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_gray, src_alpha);
- }
- dest_scan ++;
+void _CompositeRow_ByteMask2Rgba(uint8_t* dest_scan,
+ const uint8_t* src_scan,
+ int mask_alpha,
+ int src_r,
+ int src_g,
+ int src_b,
+ int pixel_count,
+ int blend_type,
+ const uint8_t* clip_scan,
+ uint8_t* dest_alpha_scan) {
+ for (int col = 0; col < pixel_count; col++) {
+ int src_alpha;
+ if (clip_scan) {
+ src_alpha = mask_alpha * clip_scan[col] * src_scan[col] / 255 / 255;
+ } else {
+ src_alpha = mask_alpha * src_scan[col] / 255;
+ }
+ uint8_t back_alpha = *dest_alpha_scan;
+ if (back_alpha == 0) {
+ *dest_scan++ = src_b;
+ *dest_scan++ = src_g;
+ *dest_scan++ = src_r;
+ *dest_alpha_scan++ = src_alpha;
+ continue;
}
+ if (src_alpha == 0) {
+ dest_scan += 3;
+ dest_alpha_scan++;
+ continue;
+ }
+ uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 255;
+ *dest_alpha_scan++ = dest_alpha;
+ int alpha_ratio = src_alpha * 255 / dest_alpha;
+ if (blend_type >= FXDIB_BLEND_NONSEPARABLE) {
+ int blended_colors[3];
+ uint8_t src_scan[3];
+ src_scan[0] = src_b;
+ src_scan[1] = src_g;
+ src_scan[2] = src_r;
+ _RGB_Blend(blend_type, src_scan, dest_scan, blended_colors);
+ *dest_scan =
+ FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[0], alpha_ratio);
+ dest_scan++;
+ *dest_scan =
+ FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[1], alpha_ratio);
+ dest_scan++;
+ *dest_scan =
+ FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[2], alpha_ratio);
+ dest_scan++;
+ } else if (blend_type) {
+ int blended = _BLEND(blend_type, *dest_scan, src_b);
+ blended = FXDIB_ALPHA_MERGE(src_b, blended, back_alpha);
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended, alpha_ratio);
+ dest_scan++;
+ blended = _BLEND(blend_type, *dest_scan, src_g);
+ blended = FXDIB_ALPHA_MERGE(src_g, blended, back_alpha);
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended, alpha_ratio);
+ dest_scan++;
+ blended = _BLEND(blend_type, *dest_scan, src_r);
+ blended = FXDIB_ALPHA_MERGE(src_r, blended, back_alpha);
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended, alpha_ratio);
+ dest_scan++;
+ } else {
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_b, alpha_ratio);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_g, alpha_ratio);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_r, alpha_ratio);
+ dest_scan++;
+ }
+ }
}
-void _CompositeRow_ByteMask2Graya(uint8_t* dest_scan, const uint8_t* src_scan, int mask_alpha, int src_gray,
- int pixel_count, const uint8_t* clip_scan,
- uint8_t* dest_alpha_scan)
-{
- for (int col = 0; col < pixel_count; col ++) {
- int src_alpha;
- if (clip_scan) {
- src_alpha = mask_alpha * clip_scan[col] * src_scan[col] / 255 / 255;
- } else {
- src_alpha = mask_alpha * src_scan[col] / 255;
- }
- uint8_t back_alpha = *dest_alpha_scan;
- if (back_alpha == 0) {
- *dest_scan ++ = src_gray;
- *dest_alpha_scan ++ = src_alpha;
- continue;
- }
- if (src_alpha == 0) {
- dest_scan ++;
- dest_alpha_scan ++;
- continue;
- }
- uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 255;
- *dest_alpha_scan++ = dest_alpha;
- int alpha_ratio = src_alpha * 255 / dest_alpha;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_gray, alpha_ratio);
- dest_scan ++;
+void _CompositeRow_ByteMask2Rgb(uint8_t* dest_scan,
+ const uint8_t* src_scan,
+ int mask_alpha,
+ int src_r,
+ int src_g,
+ int src_b,
+ int pixel_count,
+ int blend_type,
+ int Bpp,
+ const uint8_t* clip_scan) {
+ for (int col = 0; col < pixel_count; col++) {
+ int src_alpha;
+ if (clip_scan) {
+ src_alpha = mask_alpha * clip_scan[col] * src_scan[col] / 255 / 255;
+ } else {
+ src_alpha = mask_alpha * src_scan[col] / 255;
}
+ if (src_alpha == 0) {
+ dest_scan += Bpp;
+ continue;
+ }
+ if (blend_type >= FXDIB_BLEND_NONSEPARABLE) {
+ int blended_colors[3];
+ uint8_t src_scan[3];
+ src_scan[0] = src_b;
+ src_scan[1] = src_g;
+ src_scan[2] = src_r;
+ _RGB_Blend(blend_type, src_scan, dest_scan, blended_colors);
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[0], src_alpha);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[1], src_alpha);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[2], src_alpha);
+ } else if (blend_type) {
+ int blended = _BLEND(blend_type, *dest_scan, src_b);
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended, src_alpha);
+ dest_scan++;
+ blended = _BLEND(blend_type, *dest_scan, src_g);
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended, src_alpha);
+ dest_scan++;
+ blended = _BLEND(blend_type, *dest_scan, src_r);
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended, src_alpha);
+ } else {
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_b, src_alpha);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_g, src_alpha);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_r, src_alpha);
+ }
+ dest_scan += Bpp - 2;
+ }
}
-void _CompositeRow_BitMask2Argb(uint8_t* dest_scan, const uint8_t* src_scan, int mask_alpha, int src_r, int src_g, int src_b,
- int src_left, int pixel_count, int blend_type, const uint8_t* clip_scan)
-{
- if (blend_type == FXDIB_BLEND_NORMAL && clip_scan == NULL && mask_alpha == 255) {
- FX_ARGB argb = FXARGB_MAKE(0xff, src_r, src_g, src_b);
- for (int col = 0; col < pixel_count; col ++) {
- if (src_scan[(src_left + col) / 8] & (1 << (7 - (src_left + col) % 8))) {
- FXARGB_SETDIB(dest_scan, argb);
- }
- dest_scan += 4;
- }
- return;
+void _CompositeRow_ByteMask2Mask(uint8_t* dest_scan,
+ const uint8_t* src_scan,
+ int mask_alpha,
+ int pixel_count,
+ const uint8_t* clip_scan) {
+ for (int col = 0; col < pixel_count; col++) {
+ int src_alpha;
+ if (clip_scan) {
+ src_alpha = mask_alpha * clip_scan[col] * src_scan[col] / 255 / 255;
+ } else {
+ src_alpha = mask_alpha * src_scan[col] / 255;
}
- for (int col = 0; col < pixel_count; col ++) {
- if (!(src_scan[(src_left + col) / 8] & (1 << (7 - (src_left + col) % 8)))) {
- dest_scan += 4;
- continue;
- }
- int src_alpha;
- if (clip_scan) {
- src_alpha = mask_alpha * clip_scan[col] / 255;
- } else {
- src_alpha = mask_alpha;
- }
- uint8_t back_alpha = dest_scan[3];
- if (back_alpha == 0) {
- FXARGB_SETDIB(dest_scan, FXARGB_MAKE(src_alpha, src_r, src_g, src_b));
- dest_scan += 4;
- continue;
- }
- uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 255;
- dest_scan[3] = dest_alpha;
- int alpha_ratio = src_alpha * 255 / dest_alpha;
- if (blend_type >= FXDIB_BLEND_NONSEPARABLE) {
- int blended_colors[3];
- uint8_t src_scan[3];
- src_scan[0] = src_b;
- src_scan[1] = src_g;
- src_scan[2] = src_r;
- _RGB_Blend(blend_type, src_scan, dest_scan, blended_colors);
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[0], alpha_ratio);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[1], alpha_ratio);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[2], alpha_ratio);
- } else if (blend_type) {
- int blended = _BLEND(blend_type, *dest_scan, src_b);
- blended = FXDIB_ALPHA_MERGE(src_b, blended, back_alpha);
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended, alpha_ratio);
- dest_scan ++;
- blended = _BLEND(blend_type, *dest_scan, src_g);
- blended = FXDIB_ALPHA_MERGE(src_g, blended, back_alpha);
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended, alpha_ratio);
- dest_scan ++;
- blended = _BLEND(blend_type, *dest_scan, src_r);
- blended = FXDIB_ALPHA_MERGE(src_r, blended, back_alpha);
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended, alpha_ratio);
- } else {
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_b, alpha_ratio);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_g, alpha_ratio);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_r, alpha_ratio);
- }
- dest_scan += 2;
+ uint8_t back_alpha = *dest_scan;
+ if (!back_alpha) {
+ *dest_scan = src_alpha;
+ } else if (src_alpha) {
+ *dest_scan = back_alpha + src_alpha - back_alpha * src_alpha / 255;
}
+ dest_scan++;
+ }
}
-void _CompositeRow_BitMask2Rgba(uint8_t* dest_scan, const uint8_t* src_scan, int mask_alpha, int src_r, int src_g, int src_b,
- int src_left, int pixel_count, int blend_type, const uint8_t* clip_scan,
- uint8_t* dest_alpha_scan)
-{
- if (blend_type == FXDIB_BLEND_NORMAL && clip_scan == NULL && mask_alpha == 255) {
- for (int col = 0; col < pixel_count; col ++) {
- if (src_scan[(src_left + col) / 8] & (1 << (7 - (src_left + col) % 8))) {
- dest_scan[0] = src_b;
- dest_scan[1] = src_g;
- dest_scan[2] = src_r;
- *dest_alpha_scan = mask_alpha;
- }
- dest_scan += 3;
- dest_alpha_scan ++;
- }
- return;
+void _CompositeRow_ByteMask2Gray(uint8_t* dest_scan,
+ const uint8_t* src_scan,
+ int mask_alpha,
+ int src_gray,
+ int pixel_count,
+ const uint8_t* clip_scan) {
+ for (int col = 0; col < pixel_count; col++) {
+ int src_alpha;
+ if (clip_scan) {
+ src_alpha = mask_alpha * clip_scan[col] * src_scan[col] / 255 / 255;
+ } else {
+ src_alpha = mask_alpha * src_scan[col] / 255;
}
- for (int col = 0; col < pixel_count; col ++) {
- if (!(src_scan[(src_left + col) / 8] & (1 << (7 - (src_left + col) % 8)))) {
- dest_scan += 3;
- dest_alpha_scan ++;
- continue;
- }
- int src_alpha;
- if (clip_scan) {
- src_alpha = mask_alpha * clip_scan[col] / 255;
- } else {
- src_alpha = mask_alpha;
- }
- uint8_t back_alpha = dest_scan[3];
- if (back_alpha == 0) {
- *dest_scan ++ = src_b;
- *dest_scan ++ = src_g;
- *dest_scan ++ = src_r;
- *dest_alpha_scan ++ = mask_alpha;
- continue;
- }
- uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 255;
- *dest_alpha_scan ++ = dest_alpha;
- int alpha_ratio = src_alpha * 255 / dest_alpha;
- if (blend_type >= FXDIB_BLEND_NONSEPARABLE) {
- int blended_colors[3];
- uint8_t src_scan[3];
- src_scan[0] = src_b;
- src_scan[1] = src_g;
- src_scan[2] = src_r;
- _RGB_Blend(blend_type, src_scan, dest_scan, blended_colors);
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[0], alpha_ratio);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[1], alpha_ratio);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[2], alpha_ratio);
- dest_scan ++;
- } else if (blend_type) {
- int blended = _BLEND(blend_type, *dest_scan, src_b);
- blended = FXDIB_ALPHA_MERGE(src_b, blended, back_alpha);
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended, alpha_ratio);
- dest_scan ++;
- blended = _BLEND(blend_type, *dest_scan, src_g);
- blended = FXDIB_ALPHA_MERGE(src_g, blended, back_alpha);
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended, alpha_ratio);
- dest_scan ++;
- blended = _BLEND(blend_type, *dest_scan, src_r);
- blended = FXDIB_ALPHA_MERGE(src_r, blended, back_alpha);
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended, alpha_ratio);
- dest_scan ++;
- } else {
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_b, alpha_ratio);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_g, alpha_ratio);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_r, alpha_ratio);
- dest_scan ++;
- }
+ if (src_alpha) {
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_gray, src_alpha);
}
+ dest_scan++;
+ }
}
-void _CompositeRow_BitMask2Rgb(uint8_t* dest_scan, const uint8_t* src_scan, int mask_alpha, int src_r, int src_g, int src_b,
- int src_left, int pixel_count, int blend_type, int Bpp, const uint8_t* clip_scan)
-{
- if (blend_type == FXDIB_BLEND_NORMAL && clip_scan == NULL && mask_alpha == 255) {
- for (int col = 0; col < pixel_count; col ++) {
- if (src_scan[(src_left + col) / 8] & (1 << (7 - (src_left + col) % 8))) {
- dest_scan[2] = src_r;
- dest_scan[1] = src_g;
- dest_scan[0] = src_b;
- }
- dest_scan += Bpp;
- }
- return;
+void _CompositeRow_ByteMask2Graya(uint8_t* dest_scan,
+ const uint8_t* src_scan,
+ int mask_alpha,
+ int src_gray,
+ int pixel_count,
+ const uint8_t* clip_scan,
+ uint8_t* dest_alpha_scan) {
+ for (int col = 0; col < pixel_count; col++) {
+ int src_alpha;
+ if (clip_scan) {
+ src_alpha = mask_alpha * clip_scan[col] * src_scan[col] / 255 / 255;
+ } else {
+ src_alpha = mask_alpha * src_scan[col] / 255;
}
- for (int col = 0; col < pixel_count; col ++) {
- if (!(src_scan[(src_left + col) / 8] & (1 << (7 - (src_left + col) % 8)))) {
- dest_scan += Bpp;
- continue;
- }
- int src_alpha;
- if (clip_scan) {
- src_alpha = mask_alpha * clip_scan[col] / 255;
- } else {
- src_alpha = mask_alpha;
- }
- if (src_alpha == 0) {
- dest_scan += Bpp;
- continue;
- }
- if (blend_type >= FXDIB_BLEND_NONSEPARABLE) {
- int blended_colors[3];
- uint8_t src_scan[3];
- src_scan[0] = src_b;
- src_scan[1] = src_g;
- src_scan[2] = src_r;
- _RGB_Blend(blend_type, src_scan, dest_scan, blended_colors);
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[0], src_alpha);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[1], src_alpha);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[2], src_alpha);
- } else if (blend_type) {
- int blended = _BLEND(blend_type, *dest_scan, src_b);
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended, src_alpha);
- dest_scan++;
- blended = _BLEND(blend_type, *dest_scan, src_g);
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended, src_alpha);
- dest_scan++;
- blended = _BLEND(blend_type, *dest_scan, src_r);
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended, src_alpha);
- } else {
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_b, src_alpha);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_g, src_alpha);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_r, src_alpha);
- }
- dest_scan += Bpp - 2;
+ uint8_t back_alpha = *dest_alpha_scan;
+ if (back_alpha == 0) {
+ *dest_scan++ = src_gray;
+ *dest_alpha_scan++ = src_alpha;
+ continue;
}
+ if (src_alpha == 0) {
+ dest_scan++;
+ dest_alpha_scan++;
+ continue;
+ }
+ uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 255;
+ *dest_alpha_scan++ = dest_alpha;
+ int alpha_ratio = src_alpha * 255 / dest_alpha;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_gray, alpha_ratio);
+ dest_scan++;
+ }
}
-void _CompositeRow_BitMask2Mask(uint8_t* dest_scan, const uint8_t* src_scan, int mask_alpha, int src_left,
- int pixel_count, const uint8_t* clip_scan)
-{
- for (int col = 0; col < pixel_count; col ++) {
- if (!(src_scan[(src_left + col) / 8] & (1 << (7 - (src_left + col) % 8)))) {
- dest_scan ++;
- continue;
- }
- int src_alpha;
- if (clip_scan) {
- src_alpha = mask_alpha * clip_scan[col] / 255;
- } else {
- src_alpha = mask_alpha;
- }
- uint8_t back_alpha = *dest_scan;
- if (!back_alpha) {
- *dest_scan = src_alpha;
- } else if (src_alpha) {
- *dest_scan = back_alpha + src_alpha - back_alpha * src_alpha / 255;
- }
- dest_scan ++;
- }
+void _CompositeRow_BitMask2Argb(uint8_t* dest_scan,
+ const uint8_t* src_scan,
+ int mask_alpha,
+ int src_r,
+ int src_g,
+ int src_b,
+ int src_left,
+ int pixel_count,
+ int blend_type,
+ const uint8_t* clip_scan) {
+ if (blend_type == FXDIB_BLEND_NORMAL && clip_scan == NULL &&
+ mask_alpha == 255) {
+ FX_ARGB argb = FXARGB_MAKE(0xff, src_r, src_g, src_b);
+ for (int col = 0; col < pixel_count; col++) {
+ if (src_scan[(src_left + col) / 8] & (1 << (7 - (src_left + col) % 8))) {
+ FXARGB_SETDIB(dest_scan, argb);
+ }
+ dest_scan += 4;
+ }
+ return;
+ }
+ for (int col = 0; col < pixel_count; col++) {
+ if (!(src_scan[(src_left + col) / 8] & (1 << (7 - (src_left + col) % 8)))) {
+ dest_scan += 4;
+ continue;
+ }
+ int src_alpha;
+ if (clip_scan) {
+ src_alpha = mask_alpha * clip_scan[col] / 255;
+ } else {
+ src_alpha = mask_alpha;
+ }
+ uint8_t back_alpha = dest_scan[3];
+ if (back_alpha == 0) {
+ FXARGB_SETDIB(dest_scan, FXARGB_MAKE(src_alpha, src_r, src_g, src_b));
+ dest_scan += 4;
+ continue;
+ }
+ uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 255;
+ dest_scan[3] = dest_alpha;
+ int alpha_ratio = src_alpha * 255 / dest_alpha;
+ if (blend_type >= FXDIB_BLEND_NONSEPARABLE) {
+ int blended_colors[3];
+ uint8_t src_scan[3];
+ src_scan[0] = src_b;
+ src_scan[1] = src_g;
+ src_scan[2] = src_r;
+ _RGB_Blend(blend_type, src_scan, dest_scan, blended_colors);
+ *dest_scan =
+ FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[0], alpha_ratio);
+ dest_scan++;
+ *dest_scan =
+ FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[1], alpha_ratio);
+ dest_scan++;
+ *dest_scan =
+ FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[2], alpha_ratio);
+ } else if (blend_type) {
+ int blended = _BLEND(blend_type, *dest_scan, src_b);
+ blended = FXDIB_ALPHA_MERGE(src_b, blended, back_alpha);
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended, alpha_ratio);
+ dest_scan++;
+ blended = _BLEND(blend_type, *dest_scan, src_g);
+ blended = FXDIB_ALPHA_MERGE(src_g, blended, back_alpha);
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended, alpha_ratio);
+ dest_scan++;
+ blended = _BLEND(blend_type, *dest_scan, src_r);
+ blended = FXDIB_ALPHA_MERGE(src_r, blended, back_alpha);
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended, alpha_ratio);
+ } else {
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_b, alpha_ratio);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_g, alpha_ratio);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_r, alpha_ratio);
+ }
+ dest_scan += 2;
+ }
}
-void _CompositeRow_BitMask2Gray(uint8_t* dest_scan, const uint8_t* src_scan, int mask_alpha, int src_gray,
- int src_left, int pixel_count, const uint8_t* clip_scan)
-{
- for (int col = 0; col < pixel_count; col ++) {
- if (!(src_scan[(src_left + col) / 8] & (1 << (7 - (src_left + col) % 8)))) {
- dest_scan ++;
- continue;
- }
- int src_alpha;
- if (clip_scan) {
- src_alpha = mask_alpha * clip_scan[col] / 255;
- } else {
- src_alpha = mask_alpha;
- }
- if (src_alpha) {
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_gray, src_alpha);
- }
- dest_scan ++;
- }
+void _CompositeRow_BitMask2Rgba(uint8_t* dest_scan,
+ const uint8_t* src_scan,
+ int mask_alpha,
+ int src_r,
+ int src_g,
+ int src_b,
+ int src_left,
+ int pixel_count,
+ int blend_type,
+ const uint8_t* clip_scan,
+ uint8_t* dest_alpha_scan) {
+ if (blend_type == FXDIB_BLEND_NORMAL && clip_scan == NULL &&
+ mask_alpha == 255) {
+ for (int col = 0; col < pixel_count; col++) {
+ if (src_scan[(src_left + col) / 8] & (1 << (7 - (src_left + col) % 8))) {
+ dest_scan[0] = src_b;
+ dest_scan[1] = src_g;
+ dest_scan[2] = src_r;
+ *dest_alpha_scan = mask_alpha;
+ }
+ dest_scan += 3;
+ dest_alpha_scan++;
+ }
+ return;
+ }
+ for (int col = 0; col < pixel_count; col++) {
+ if (!(src_scan[(src_left + col) / 8] & (1 << (7 - (src_left + col) % 8)))) {
+ dest_scan += 3;
+ dest_alpha_scan++;
+ continue;
+ }
+ int src_alpha;
+ if (clip_scan) {
+ src_alpha = mask_alpha * clip_scan[col] / 255;
+ } else {
+ src_alpha = mask_alpha;
+ }
+ uint8_t back_alpha = dest_scan[3];
+ if (back_alpha == 0) {
+ *dest_scan++ = src_b;
+ *dest_scan++ = src_g;
+ *dest_scan++ = src_r;
+ *dest_alpha_scan++ = mask_alpha;
+ continue;
+ }
+ uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 255;
+ *dest_alpha_scan++ = dest_alpha;
+ int alpha_ratio = src_alpha * 255 / dest_alpha;
+ if (blend_type >= FXDIB_BLEND_NONSEPARABLE) {
+ int blended_colors[3];
+ uint8_t src_scan[3];
+ src_scan[0] = src_b;
+ src_scan[1] = src_g;
+ src_scan[2] = src_r;
+ _RGB_Blend(blend_type, src_scan, dest_scan, blended_colors);
+ *dest_scan =
+ FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[0], alpha_ratio);
+ dest_scan++;
+ *dest_scan =
+ FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[1], alpha_ratio);
+ dest_scan++;
+ *dest_scan =
+ FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[2], alpha_ratio);
+ dest_scan++;
+ } else if (blend_type) {
+ int blended = _BLEND(blend_type, *dest_scan, src_b);
+ blended = FXDIB_ALPHA_MERGE(src_b, blended, back_alpha);
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended, alpha_ratio);
+ dest_scan++;
+ blended = _BLEND(blend_type, *dest_scan, src_g);
+ blended = FXDIB_ALPHA_MERGE(src_g, blended, back_alpha);
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended, alpha_ratio);
+ dest_scan++;
+ blended = _BLEND(blend_type, *dest_scan, src_r);
+ blended = FXDIB_ALPHA_MERGE(src_r, blended, back_alpha);
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended, alpha_ratio);
+ dest_scan++;
+ } else {
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_b, alpha_ratio);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_g, alpha_ratio);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_r, alpha_ratio);
+ dest_scan++;
+ }
+ }
}
-void _CompositeRow_BitMask2Graya(uint8_t* dest_scan, const uint8_t* src_scan, int mask_alpha, int src_gray,
- int src_left, int pixel_count, const uint8_t* clip_scan,
- uint8_t* dest_alpha_scan)
-{
- for (int col = 0; col < pixel_count; col ++) {
- if (!(src_scan[(src_left + col) / 8] & (1 << (7 - (src_left + col) % 8)))) {
- dest_scan ++;
- dest_alpha_scan ++;
- continue;
- }
- int src_alpha;
- if (clip_scan) {
- src_alpha = mask_alpha * clip_scan[col] / 255;
- } else {
- src_alpha = mask_alpha;
- }
- uint8_t back_alpha = *dest_alpha_scan;
- if (back_alpha == 0) {
- *dest_scan ++ = src_gray;
- *dest_alpha_scan ++ = src_alpha;
- continue;
- }
- if (src_alpha == 0) {
- dest_scan ++;
- dest_alpha_scan ++;
- continue;
- }
- uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 255;
- *dest_alpha_scan++ = dest_alpha;
- int alpha_ratio = src_alpha * 255 / dest_alpha;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_gray, alpha_ratio);
- dest_scan ++;
+void _CompositeRow_BitMask2Rgb(uint8_t* dest_scan,
+ const uint8_t* src_scan,
+ int mask_alpha,
+ int src_r,
+ int src_g,
+ int src_b,
+ int src_left,
+ int pixel_count,
+ int blend_type,
+ int Bpp,
+ const uint8_t* clip_scan) {
+ if (blend_type == FXDIB_BLEND_NORMAL && clip_scan == NULL &&
+ mask_alpha == 255) {
+ for (int col = 0; col < pixel_count; col++) {
+ if (src_scan[(src_left + col) / 8] & (1 << (7 - (src_left + col) % 8))) {
+ dest_scan[2] = src_r;
+ dest_scan[1] = src_g;
+ dest_scan[0] = src_b;
+ }
+ dest_scan += Bpp;
+ }
+ return;
+ }
+ for (int col = 0; col < pixel_count; col++) {
+ if (!(src_scan[(src_left + col) / 8] & (1 << (7 - (src_left + col) % 8)))) {
+ dest_scan += Bpp;
+ continue;
+ }
+ int src_alpha;
+ if (clip_scan) {
+ src_alpha = mask_alpha * clip_scan[col] / 255;
+ } else {
+ src_alpha = mask_alpha;
}
+ if (src_alpha == 0) {
+ dest_scan += Bpp;
+ continue;
+ }
+ if (blend_type >= FXDIB_BLEND_NONSEPARABLE) {
+ int blended_colors[3];
+ uint8_t src_scan[3];
+ src_scan[0] = src_b;
+ src_scan[1] = src_g;
+ src_scan[2] = src_r;
+ _RGB_Blend(blend_type, src_scan, dest_scan, blended_colors);
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[0], src_alpha);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[1], src_alpha);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[2], src_alpha);
+ } else if (blend_type) {
+ int blended = _BLEND(blend_type, *dest_scan, src_b);
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended, src_alpha);
+ dest_scan++;
+ blended = _BLEND(blend_type, *dest_scan, src_g);
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended, src_alpha);
+ dest_scan++;
+ blended = _BLEND(blend_type, *dest_scan, src_r);
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended, src_alpha);
+ } else {
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_b, src_alpha);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_g, src_alpha);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_r, src_alpha);
+ }
+ dest_scan += Bpp - 2;
+ }
}
-void _CompositeRow_Argb2Argb_RgbByteOrder(uint8_t* dest_scan, const uint8_t* src_scan, int pixel_count, int blend_type, const uint8_t* clip_scan)
-{
- int blended_colors[3];
- FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE;
- for (int col = 0; col < pixel_count; col ++) {
- uint8_t back_alpha = dest_scan[3];
- if (back_alpha == 0) {
- if (clip_scan) {
- int src_alpha = clip_scan[col] * src_scan[3] / 255;
- dest_scan[3] = src_alpha;
- dest_scan[0] = src_scan[2];
- dest_scan[1] = src_scan[1];
- dest_scan[2] = src_scan[0];
- } else {
- FXARGB_RGBORDERCOPY(dest_scan, src_scan);
- }
- dest_scan += 4;
- src_scan += 4;
- continue;
- }
- uint8_t src_alpha;
- if (clip_scan == NULL) {
- src_alpha = src_scan[3];
- } else {
- src_alpha = clip_scan[col] * src_scan[3] / 255;
- }
- if (src_alpha == 0) {
- dest_scan += 4;
- src_scan += 4;
- continue;
- }
- uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 255;
- dest_scan[3] = dest_alpha;
- int alpha_ratio = src_alpha * 255 / dest_alpha;
- if (bNonseparableBlend) {
- uint8_t dest_scan_o[3];
- dest_scan_o[0] = dest_scan[2];
- dest_scan_o[1] = dest_scan[1];
- dest_scan_o[2] = dest_scan[0];
- _RGB_Blend(blend_type, src_scan, dest_scan_o, blended_colors);
- }
- for (int color = 0; color < 3; color ++) {
- int index = 2 - color;
- if (blend_type) {
- int blended = bNonseparableBlend ? blended_colors[color] :
- _BLEND(blend_type, dest_scan[index], *src_scan);
- blended = FXDIB_ALPHA_MERGE(*src_scan, blended, back_alpha);
- dest_scan[index] = FXDIB_ALPHA_MERGE(dest_scan[index], blended, alpha_ratio);
- } else {
- dest_scan[index] = FXDIB_ALPHA_MERGE(dest_scan[index], *src_scan, alpha_ratio);
- }
- src_scan ++;
- }
- dest_scan += 4;
- src_scan++;
+void _CompositeRow_BitMask2Mask(uint8_t* dest_scan,
+ const uint8_t* src_scan,
+ int mask_alpha,
+ int src_left,
+ int pixel_count,
+ const uint8_t* clip_scan) {
+ for (int col = 0; col < pixel_count; col++) {
+ if (!(src_scan[(src_left + col) / 8] & (1 << (7 - (src_left + col) % 8)))) {
+ dest_scan++;
+ continue;
+ }
+ int src_alpha;
+ if (clip_scan) {
+ src_alpha = mask_alpha * clip_scan[col] / 255;
+ } else {
+ src_alpha = mask_alpha;
}
-}
-void _CompositeRow_Rgb2Argb_Blend_NoClip_RgbByteOrder(uint8_t* dest_scan, const uint8_t* src_scan, int width, int blend_type, int src_Bpp)
-{
- int blended_colors[3];
- FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE;
- int src_gap = src_Bpp - 3;
- for (int col = 0; col < width; col ++) {
- uint8_t back_alpha = dest_scan[3];
- if (back_alpha == 0) {
- if (src_Bpp == 4) {
- FXARGB_SETRGBORDERDIB(dest_scan, 0xff000000 | FXARGB_GETDIB(src_scan));
- } else {
- FXARGB_SETRGBORDERDIB(dest_scan, FXARGB_MAKE(0xff, src_scan[2], src_scan[1], src_scan[0]));
- }
- dest_scan += 4;
- src_scan += src_Bpp;
- continue;
- }
- dest_scan[3] = 0xff;
- if (bNonseparableBlend) {
- uint8_t dest_scan_o[3];
- dest_scan_o[0] = dest_scan[2];
- dest_scan_o[1] = dest_scan[1];
- dest_scan_o[2] = dest_scan[0];
- _RGB_Blend(blend_type, src_scan, dest_scan_o, blended_colors);
- }
- for (int color = 0; color < 3; color ++) {
- int index = 2 - color;
- int src_color = FX_GAMMA(*src_scan);
- int blended = bNonseparableBlend ? blended_colors[color] :
- _BLEND(blend_type, dest_scan[index], src_color);
- dest_scan[index] = FXDIB_ALPHA_MERGE(src_color, blended, back_alpha);
- src_scan ++;
- }
- dest_scan += 4;
- src_scan += src_gap;
+ uint8_t back_alpha = *dest_scan;
+ if (!back_alpha) {
+ *dest_scan = src_alpha;
+ } else if (src_alpha) {
+ *dest_scan = back_alpha + src_alpha - back_alpha * src_alpha / 255;
}
+ dest_scan++;
+ }
}
-inline void _CompositeRow_Argb2Rgb_Blend_RgbByteOrder(uint8_t* dest_scan, const uint8_t* src_scan, int width, int blend_type, int dest_Bpp, const uint8_t* clip_scan)
-{
- int blended_colors[3];
- FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE;
- for (int col = 0; col < width; col ++) {
- uint8_t src_alpha;
- if (clip_scan) {
- src_alpha = src_scan[3] * (*clip_scan++) / 255;
- } else {
- src_alpha = src_scan[3];
- }
- if (src_alpha == 0) {
- dest_scan += dest_Bpp;
- src_scan += 4;
- continue;
- }
- if (bNonseparableBlend) {
- uint8_t dest_scan_o[3];
- dest_scan_o[0] = dest_scan[2];
- dest_scan_o[1] = dest_scan[1];
- dest_scan_o[2] = dest_scan[0];
- _RGB_Blend(blend_type, src_scan, dest_scan_o, blended_colors);
- }
- for (int color = 0; color < 3; color ++) {
- int index = 2 - color;
- int back_color = FX_GAMMA(dest_scan[index]);
- int blended = bNonseparableBlend ? blended_colors[color] :
- _BLEND(blend_type, back_color, *src_scan);
- dest_scan[index] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(back_color, blended, src_alpha));
- src_scan ++;
- }
- dest_scan += dest_Bpp;
- src_scan ++;
+void _CompositeRow_BitMask2Gray(uint8_t* dest_scan,
+ const uint8_t* src_scan,
+ int mask_alpha,
+ int src_gray,
+ int src_left,
+ int pixel_count,
+ const uint8_t* clip_scan) {
+ for (int col = 0; col < pixel_count; col++) {
+ if (!(src_scan[(src_left + col) / 8] & (1 << (7 - (src_left + col) % 8)))) {
+ dest_scan++;
+ continue;
+ }
+ int src_alpha;
+ if (clip_scan) {
+ src_alpha = mask_alpha * clip_scan[col] / 255;
+ } else {
+ src_alpha = mask_alpha;
}
-}
-inline void _CompositeRow_Rgb2Argb_NoBlend_NoClip_RgbByteOrder(uint8_t* dest_scan, const uint8_t* src_scan, int width, int src_Bpp)
-{
- for (int col = 0; col < width; col ++) {
- if (src_Bpp == 4) {
- FXARGB_SETRGBORDERDIB(dest_scan, 0xff000000 | FXARGB_GETDIB(src_scan));
- } else {
- FXARGB_SETRGBORDERDIB(dest_scan, FXARGB_MAKE(0xff, src_scan[2], src_scan[1], src_scan[0]));
- }
- dest_scan += 4;
- src_scan += src_Bpp;
+ if (src_alpha) {
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_gray, src_alpha);
}
+ dest_scan++;
+ }
}
-inline void _CompositeRow_Rgb2Rgb_Blend_NoClip_RgbByteOrder(uint8_t* dest_scan, const uint8_t* src_scan, int width, int blend_type, int dest_Bpp, int src_Bpp)
-{
- int blended_colors[3];
- FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE;
- int src_gap = src_Bpp - 3;
- for (int col = 0; col < width; col ++) {
- if (bNonseparableBlend) {
- uint8_t dest_scan_o[3];
- dest_scan_o[0] = dest_scan[2];
- dest_scan_o[1] = dest_scan[1];
- dest_scan_o[2] = dest_scan[0];
- _RGB_Blend(blend_type, src_scan, dest_scan_o, blended_colors);
- }
- for (int color = 0; color < 3; color ++) {
- int index = 2 - color;
- int back_color = FX_GAMMA(dest_scan[index]);
- int src_color = FX_GAMMA(*src_scan);
- int blended = bNonseparableBlend ? blended_colors[color] :
- _BLEND(blend_type, back_color, src_color);
- dest_scan[index] = FX_GAMMA_INVERSE(blended);
- src_scan ++;
- }
- dest_scan += dest_Bpp;
- src_scan += src_gap;
+void _CompositeRow_BitMask2Graya(uint8_t* dest_scan,
+ const uint8_t* src_scan,
+ int mask_alpha,
+ int src_gray,
+ int src_left,
+ int pixel_count,
+ const uint8_t* clip_scan,
+ uint8_t* dest_alpha_scan) {
+ for (int col = 0; col < pixel_count; col++) {
+ if (!(src_scan[(src_left + col) / 8] & (1 << (7 - (src_left + col) % 8)))) {
+ dest_scan++;
+ dest_alpha_scan++;
+ continue;
+ }
+ int src_alpha;
+ if (clip_scan) {
+ src_alpha = mask_alpha * clip_scan[col] / 255;
+ } else {
+ src_alpha = mask_alpha;
}
-}
-inline void _CompositeRow_Argb2Rgb_NoBlend_RgbByteOrder(uint8_t* dest_scan, const uint8_t* src_scan, int width, int dest_Bpp, const uint8_t* clip_scan)
-{
- for (int col = 0; col < width; col ++) {
- uint8_t src_alpha;
- if (clip_scan) {
- src_alpha = src_scan[3] * (*clip_scan++) / 255;
- } else {
- src_alpha = src_scan[3];
- }
- if (src_alpha == 255) {
- dest_scan[2] = FX_GAMMA_INVERSE(*src_scan++);
- dest_scan[1] = FX_GAMMA_INVERSE(*src_scan++);
- dest_scan[0] = FX_GAMMA_INVERSE(*src_scan++);
- dest_scan += dest_Bpp;
- src_scan ++;
- continue;
- }
- if (src_alpha == 0) {
- dest_scan += dest_Bpp;
- src_scan += 4;
- continue;
- }
- for (int color = 0; color < 3; color ++) {
- int index = 2 - color;
- dest_scan[index] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[index]), *src_scan, src_alpha));
- src_scan ++;
- }
- dest_scan += dest_Bpp;
- src_scan ++;
+ uint8_t back_alpha = *dest_alpha_scan;
+ if (back_alpha == 0) {
+ *dest_scan++ = src_gray;
+ *dest_alpha_scan++ = src_alpha;
+ continue;
}
+ if (src_alpha == 0) {
+ dest_scan++;
+ dest_alpha_scan++;
+ continue;
+ }
+ uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 255;
+ *dest_alpha_scan++ = dest_alpha;
+ int alpha_ratio = src_alpha * 255 / dest_alpha;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_gray, alpha_ratio);
+ dest_scan++;
+ }
}
-inline void _CompositeRow_Rgb2Rgb_NoBlend_NoClip_RgbByteOrder(uint8_t* dest_scan, const uint8_t* src_scan, int width, int dest_Bpp, int src_Bpp)
-{
- for (int col = 0; col < width; col ++) {
- dest_scan[2] = src_scan[0];
- dest_scan[1] = src_scan[1];
+void _CompositeRow_Argb2Argb_RgbByteOrder(uint8_t* dest_scan,
+ const uint8_t* src_scan,
+ int pixel_count,
+ int blend_type,
+ const uint8_t* clip_scan) {
+ int blended_colors[3];
+ FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE;
+ for (int col = 0; col < pixel_count; col++) {
+ uint8_t back_alpha = dest_scan[3];
+ if (back_alpha == 0) {
+ if (clip_scan) {
+ int src_alpha = clip_scan[col] * src_scan[3] / 255;
+ dest_scan[3] = src_alpha;
dest_scan[0] = src_scan[2];
- dest_scan += dest_Bpp;
- src_scan += src_Bpp;
+ dest_scan[1] = src_scan[1];
+ dest_scan[2] = src_scan[0];
+ } else {
+ FXARGB_RGBORDERCOPY(dest_scan, src_scan);
+ }
+ dest_scan += 4;
+ src_scan += 4;
+ continue;
+ }
+ uint8_t src_alpha;
+ if (clip_scan == NULL) {
+ src_alpha = src_scan[3];
+ } else {
+ src_alpha = clip_scan[col] * src_scan[3] / 255;
}
+ if (src_alpha == 0) {
+ dest_scan += 4;
+ src_scan += 4;
+ continue;
+ }
+ uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 255;
+ dest_scan[3] = dest_alpha;
+ int alpha_ratio = src_alpha * 255 / dest_alpha;
+ if (bNonseparableBlend) {
+ uint8_t dest_scan_o[3];
+ dest_scan_o[0] = dest_scan[2];
+ dest_scan_o[1] = dest_scan[1];
+ dest_scan_o[2] = dest_scan[0];
+ _RGB_Blend(blend_type, src_scan, dest_scan_o, blended_colors);
+ }
+ for (int color = 0; color < 3; color++) {
+ int index = 2 - color;
+ if (blend_type) {
+ int blended = bNonseparableBlend
+ ? blended_colors[color]
+ : _BLEND(blend_type, dest_scan[index], *src_scan);
+ blended = FXDIB_ALPHA_MERGE(*src_scan, blended, back_alpha);
+ dest_scan[index] =
+ FXDIB_ALPHA_MERGE(dest_scan[index], blended, alpha_ratio);
+ } else {
+ dest_scan[index] =
+ FXDIB_ALPHA_MERGE(dest_scan[index], *src_scan, alpha_ratio);
+ }
+ src_scan++;
+ }
+ dest_scan += 4;
+ src_scan++;
+ }
}
-inline void _CompositeRow_Rgb2Argb_Blend_Clip_RgbByteOrder(uint8_t* dest_scan, const uint8_t* src_scan, int width, int blend_type, int src_Bpp, const uint8_t* clip_scan)
-{
- int blended_colors[3];
- FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE;
- int src_gap = src_Bpp - 3;
- for (int col = 0; col < width; col ++) {
- int src_alpha = *clip_scan ++;
- uint8_t back_alpha = dest_scan[3];
- if (back_alpha == 0) {
- dest_scan[2] = FX_GAMMA(*src_scan++);
- dest_scan[1] = FX_GAMMA(*src_scan++);
- dest_scan[0] = FX_GAMMA(*src_scan++);
- src_scan += src_gap;
- dest_scan += 4;
- continue;
- }
- if (src_alpha == 0) {
- dest_scan += 4;
- src_scan += src_Bpp;
- continue;
- }
- uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 255;
- dest_scan[3] = dest_alpha;
- int alpha_ratio = src_alpha * 255 / dest_alpha;
- if (bNonseparableBlend) {
- uint8_t dest_scan_o[3];
- dest_scan_o[0] = dest_scan[2];
- dest_scan_o[1] = dest_scan[1];
- dest_scan_o[2] = dest_scan[0];
- _RGB_Blend(blend_type, src_scan, dest_scan_o, blended_colors);
- }
- for (int color = 0; color < 3; color ++) {
- int index = 2 - color;
- int src_color = FX_GAMMA(*src_scan);
- int blended = bNonseparableBlend ? blended_colors[color] :
- _BLEND(blend_type, dest_scan[index], src_color);
- blended = FXDIB_ALPHA_MERGE(src_color, blended, back_alpha);
- dest_scan[index] = FXDIB_ALPHA_MERGE(dest_scan[index], blended, alpha_ratio);
- src_scan ++;
- }
- dest_scan += 4;
- src_scan += src_gap;
+void _CompositeRow_Rgb2Argb_Blend_NoClip_RgbByteOrder(uint8_t* dest_scan,
+ const uint8_t* src_scan,
+ int width,
+ int blend_type,
+ int src_Bpp) {
+ int blended_colors[3];
+ FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE;
+ int src_gap = src_Bpp - 3;
+ for (int col = 0; col < width; col++) {
+ uint8_t back_alpha = dest_scan[3];
+ if (back_alpha == 0) {
+ if (src_Bpp == 4) {
+ FXARGB_SETRGBORDERDIB(dest_scan, 0xff000000 | FXARGB_GETDIB(src_scan));
+ } else {
+ FXARGB_SETRGBORDERDIB(dest_scan, FXARGB_MAKE(0xff, src_scan[2],
+ src_scan[1], src_scan[0]));
+ }
+ dest_scan += 4;
+ src_scan += src_Bpp;
+ continue;
+ }
+ dest_scan[3] = 0xff;
+ if (bNonseparableBlend) {
+ uint8_t dest_scan_o[3];
+ dest_scan_o[0] = dest_scan[2];
+ dest_scan_o[1] = dest_scan[1];
+ dest_scan_o[2] = dest_scan[0];
+ _RGB_Blend(blend_type, src_scan, dest_scan_o, blended_colors);
+ }
+ for (int color = 0; color < 3; color++) {
+ int index = 2 - color;
+ int src_color = FX_GAMMA(*src_scan);
+ int blended = bNonseparableBlend
+ ? blended_colors[color]
+ : _BLEND(blend_type, dest_scan[index], src_color);
+ dest_scan[index] = FXDIB_ALPHA_MERGE(src_color, blended, back_alpha);
+ src_scan++;
+ }
+ dest_scan += 4;
+ src_scan += src_gap;
+ }
+}
+inline void _CompositeRow_Argb2Rgb_Blend_RgbByteOrder(
+ uint8_t* dest_scan,
+ const uint8_t* src_scan,
+ int width,
+ int blend_type,
+ int dest_Bpp,
+ const uint8_t* clip_scan) {
+ int blended_colors[3];
+ FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE;
+ for (int col = 0; col < width; col++) {
+ uint8_t src_alpha;
+ if (clip_scan) {
+ src_alpha = src_scan[3] * (*clip_scan++) / 255;
+ } else {
+ src_alpha = src_scan[3];
}
+ if (src_alpha == 0) {
+ dest_scan += dest_Bpp;
+ src_scan += 4;
+ continue;
+ }
+ if (bNonseparableBlend) {
+ uint8_t dest_scan_o[3];
+ dest_scan_o[0] = dest_scan[2];
+ dest_scan_o[1] = dest_scan[1];
+ dest_scan_o[2] = dest_scan[0];
+ _RGB_Blend(blend_type, src_scan, dest_scan_o, blended_colors);
+ }
+ for (int color = 0; color < 3; color++) {
+ int index = 2 - color;
+ int back_color = FX_GAMMA(dest_scan[index]);
+ int blended = bNonseparableBlend
+ ? blended_colors[color]
+ : _BLEND(blend_type, back_color, *src_scan);
+ dest_scan[index] =
+ FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(back_color, blended, src_alpha));
+ src_scan++;
+ }
+ dest_scan += dest_Bpp;
+ src_scan++;
+ }
}
-inline void _CompositeRow_Rgb2Rgb_Blend_Clip_RgbByteOrder(uint8_t* dest_scan, const uint8_t* src_scan, int width, int blend_type, int dest_Bpp, int src_Bpp, const uint8_t* clip_scan)
-{
- int blended_colors[3];
- FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE;
- int src_gap = src_Bpp - 3;
- for (int col = 0; col < width; col ++) {
- uint8_t src_alpha = *clip_scan ++;
- if (src_alpha == 0) {
- dest_scan += dest_Bpp;
- src_scan += src_Bpp;
- continue;
- }
- if (bNonseparableBlend) {
- uint8_t dest_scan_o[3];
- dest_scan_o[0] = dest_scan[2];
- dest_scan_o[1] = dest_scan[1];
- dest_scan_o[2] = dest_scan[0];
- _RGB_Blend(blend_type, src_scan, dest_scan_o, blended_colors);
- }
- for (int color = 0; color < 3; color ++) {
- int index = 2 - color;
- int src_color = FX_GAMMA(*src_scan);
- int back_color = FX_GAMMA(dest_scan[index]);
- int blended = bNonseparableBlend ? blended_colors[color] :
- _BLEND(blend_type, back_color, src_color);
- dest_scan[index] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(back_color, blended, src_alpha));
- src_scan ++;
- }
- dest_scan += dest_Bpp;
- src_scan += src_gap;
+inline void _CompositeRow_Rgb2Argb_NoBlend_NoClip_RgbByteOrder(
+ uint8_t* dest_scan,
+ const uint8_t* src_scan,
+ int width,
+ int src_Bpp) {
+ for (int col = 0; col < width; col++) {
+ if (src_Bpp == 4) {
+ FXARGB_SETRGBORDERDIB(dest_scan, 0xff000000 | FXARGB_GETDIB(src_scan));
+ } else {
+ FXARGB_SETRGBORDERDIB(
+ dest_scan, FXARGB_MAKE(0xff, src_scan[2], src_scan[1], src_scan[0]));
}
+ dest_scan += 4;
+ src_scan += src_Bpp;
+ }
}
-inline void _CompositeRow_Rgb2Argb_NoBlend_Clip_RgbByteOrder(uint8_t* dest_scan, const uint8_t* src_scan, int width, int src_Bpp, const uint8_t* clip_scan)
-{
- int src_gap = src_Bpp - 3;
- for (int col = 0; col < width; col ++) {
- int src_alpha = clip_scan[col];
- if (src_alpha == 255) {
- dest_scan[2] = FX_GAMMA(*src_scan++);
- dest_scan[1] = FX_GAMMA(*src_scan++);
- dest_scan[0] = FX_GAMMA(*src_scan++);
- dest_scan[3] = 255;
- dest_scan += 4;
- src_scan += src_gap;
- continue;
- }
- if (src_alpha == 0) {
- dest_scan += 4;
- src_scan += src_Bpp;
- continue;
- }
- int back_alpha = dest_scan[3];
- uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 255;
- dest_scan[3] = dest_alpha;
- int alpha_ratio = src_alpha * 255 / dest_alpha;
- for (int color = 0; color < 3; color ++) {
- int index = 2 - color;
- dest_scan[index] = FXDIB_ALPHA_MERGE(dest_scan[index], FX_GAMMA(*src_scan), alpha_ratio);
- src_scan ++;
- }
- dest_scan += 4;
- src_scan += src_gap;
+inline void _CompositeRow_Rgb2Rgb_Blend_NoClip_RgbByteOrder(
+ uint8_t* dest_scan,
+ const uint8_t* src_scan,
+ int width,
+ int blend_type,
+ int dest_Bpp,
+ int src_Bpp) {
+ int blended_colors[3];
+ FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE;
+ int src_gap = src_Bpp - 3;
+ for (int col = 0; col < width; col++) {
+ if (bNonseparableBlend) {
+ uint8_t dest_scan_o[3];
+ dest_scan_o[0] = dest_scan[2];
+ dest_scan_o[1] = dest_scan[1];
+ dest_scan_o[2] = dest_scan[0];
+ _RGB_Blend(blend_type, src_scan, dest_scan_o, blended_colors);
+ }
+ for (int color = 0; color < 3; color++) {
+ int index = 2 - color;
+ int back_color = FX_GAMMA(dest_scan[index]);
+ int src_color = FX_GAMMA(*src_scan);
+ int blended = bNonseparableBlend
+ ? blended_colors[color]
+ : _BLEND(blend_type, back_color, src_color);
+ dest_scan[index] = FX_GAMMA_INVERSE(blended);
+ src_scan++;
+ }
+ dest_scan += dest_Bpp;
+ src_scan += src_gap;
+ }
+}
+inline void _CompositeRow_Argb2Rgb_NoBlend_RgbByteOrder(
+ uint8_t* dest_scan,
+ const uint8_t* src_scan,
+ int width,
+ int dest_Bpp,
+ const uint8_t* clip_scan) {
+ for (int col = 0; col < width; col++) {
+ uint8_t src_alpha;
+ if (clip_scan) {
+ src_alpha = src_scan[3] * (*clip_scan++) / 255;
+ } else {
+ src_alpha = src_scan[3];
+ }
+ if (src_alpha == 255) {
+ dest_scan[2] = FX_GAMMA_INVERSE(*src_scan++);
+ dest_scan[1] = FX_GAMMA_INVERSE(*src_scan++);
+ dest_scan[0] = FX_GAMMA_INVERSE(*src_scan++);
+ dest_scan += dest_Bpp;
+ src_scan++;
+ continue;
}
+ if (src_alpha == 0) {
+ dest_scan += dest_Bpp;
+ src_scan += 4;
+ continue;
+ }
+ for (int color = 0; color < 3; color++) {
+ int index = 2 - color;
+ dest_scan[index] = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[index]), *src_scan, src_alpha));
+ src_scan++;
+ }
+ dest_scan += dest_Bpp;
+ src_scan++;
+ }
}
-inline void _CompositeRow_Rgb2Rgb_NoBlend_Clip_RgbByteOrder(uint8_t* dest_scan, const uint8_t* src_scan, int width, int dest_Bpp, int src_Bpp, const uint8_t* clip_scan)
-{
- for (int col = 0; col < width; col ++) {
- int src_alpha = clip_scan[col];
- if (src_alpha == 255) {
- dest_scan[2] = src_scan[0];
- dest_scan[1] = src_scan[1];
- dest_scan[0] = src_scan[2];
- } else if (src_alpha) {
- dest_scan[2] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[2]), FX_GAMMA(*src_scan), src_alpha));
- src_scan ++;
- dest_scan[1] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[1]), FX_GAMMA(*src_scan), src_alpha));
- src_scan ++;
- dest_scan[0] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[0]), FX_GAMMA(*src_scan), src_alpha));
- dest_scan += dest_Bpp;
- src_scan += src_Bpp - 2;
- continue;
- }
- dest_scan += dest_Bpp;
- src_scan += src_Bpp;
+inline void _CompositeRow_Rgb2Rgb_NoBlend_NoClip_RgbByteOrder(
+ uint8_t* dest_scan,
+ const uint8_t* src_scan,
+ int width,
+ int dest_Bpp,
+ int src_Bpp) {
+ for (int col = 0; col < width; col++) {
+ dest_scan[2] = src_scan[0];
+ dest_scan[1] = src_scan[1];
+ dest_scan[0] = src_scan[2];
+ dest_scan += dest_Bpp;
+ src_scan += src_Bpp;
+ }
+}
+inline void _CompositeRow_Rgb2Argb_Blend_Clip_RgbByteOrder(
+ uint8_t* dest_scan,
+ const uint8_t* src_scan,
+ int width,
+ int blend_type,
+ int src_Bpp,
+ const uint8_t* clip_scan) {
+ int blended_colors[3];
+ FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE;
+ int src_gap = src_Bpp - 3;
+ for (int col = 0; col < width; col++) {
+ int src_alpha = *clip_scan++;
+ uint8_t back_alpha = dest_scan[3];
+ if (back_alpha == 0) {
+ dest_scan[2] = FX_GAMMA(*src_scan++);
+ dest_scan[1] = FX_GAMMA(*src_scan++);
+ dest_scan[0] = FX_GAMMA(*src_scan++);
+ src_scan += src_gap;
+ dest_scan += 4;
+ continue;
}
+ if (src_alpha == 0) {
+ dest_scan += 4;
+ src_scan += src_Bpp;
+ continue;
+ }
+ uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 255;
+ dest_scan[3] = dest_alpha;
+ int alpha_ratio = src_alpha * 255 / dest_alpha;
+ if (bNonseparableBlend) {
+ uint8_t dest_scan_o[3];
+ dest_scan_o[0] = dest_scan[2];
+ dest_scan_o[1] = dest_scan[1];
+ dest_scan_o[2] = dest_scan[0];
+ _RGB_Blend(blend_type, src_scan, dest_scan_o, blended_colors);
+ }
+ for (int color = 0; color < 3; color++) {
+ int index = 2 - color;
+ int src_color = FX_GAMMA(*src_scan);
+ int blended = bNonseparableBlend
+ ? blended_colors[color]
+ : _BLEND(blend_type, dest_scan[index], src_color);
+ blended = FXDIB_ALPHA_MERGE(src_color, blended, back_alpha);
+ dest_scan[index] =
+ FXDIB_ALPHA_MERGE(dest_scan[index], blended, alpha_ratio);
+ src_scan++;
+ }
+ dest_scan += 4;
+ src_scan += src_gap;
+ }
}
-inline void _CompositeRow_8bppRgb2Rgb_NoBlend_RgbByteOrder(uint8_t* dest_scan, const uint8_t* src_scan, FX_ARGB* pPalette, int pixel_count,
- int DestBpp, const uint8_t* clip_scan)
-{
- for (int col = 0; col < pixel_count; col ++) {
- FX_ARGB argb = pPalette ? pPalette[*src_scan] : (*src_scan) * 0x010101;
- int src_r = FXARGB_R(argb);
- int src_g = FXARGB_G(argb);
- int src_b = FXARGB_B(argb);
- if (clip_scan && clip_scan[col] < 255) {
- dest_scan[2] = FXDIB_ALPHA_MERGE(dest_scan[2], src_b, clip_scan[col]);
- dest_scan[1] = FXDIB_ALPHA_MERGE(dest_scan[1], src_g, clip_scan[col]);
- dest_scan[0] = FXDIB_ALPHA_MERGE(dest_scan[0], src_r, clip_scan[col]);
- } else {
- dest_scan[2] = src_b;
- dest_scan[1] = src_g;
- dest_scan[0] = src_r;
- }
- dest_scan += DestBpp;
- src_scan ++;
+inline void _CompositeRow_Rgb2Rgb_Blend_Clip_RgbByteOrder(
+ uint8_t* dest_scan,
+ const uint8_t* src_scan,
+ int width,
+ int blend_type,
+ int dest_Bpp,
+ int src_Bpp,
+ const uint8_t* clip_scan) {
+ int blended_colors[3];
+ FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE;
+ int src_gap = src_Bpp - 3;
+ for (int col = 0; col < width; col++) {
+ uint8_t src_alpha = *clip_scan++;
+ if (src_alpha == 0) {
+ dest_scan += dest_Bpp;
+ src_scan += src_Bpp;
+ continue;
+ }
+ if (bNonseparableBlend) {
+ uint8_t dest_scan_o[3];
+ dest_scan_o[0] = dest_scan[2];
+ dest_scan_o[1] = dest_scan[1];
+ dest_scan_o[2] = dest_scan[0];
+ _RGB_Blend(blend_type, src_scan, dest_scan_o, blended_colors);
+ }
+ for (int color = 0; color < 3; color++) {
+ int index = 2 - color;
+ int src_color = FX_GAMMA(*src_scan);
+ int back_color = FX_GAMMA(dest_scan[index]);
+ int blended = bNonseparableBlend
+ ? blended_colors[color]
+ : _BLEND(blend_type, back_color, src_color);
+ dest_scan[index] =
+ FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(back_color, blended, src_alpha));
+ src_scan++;
+ }
+ dest_scan += dest_Bpp;
+ src_scan += src_gap;
+ }
+}
+inline void _CompositeRow_Rgb2Argb_NoBlend_Clip_RgbByteOrder(
+ uint8_t* dest_scan,
+ const uint8_t* src_scan,
+ int width,
+ int src_Bpp,
+ const uint8_t* clip_scan) {
+ int src_gap = src_Bpp - 3;
+ for (int col = 0; col < width; col++) {
+ int src_alpha = clip_scan[col];
+ if (src_alpha == 255) {
+ dest_scan[2] = FX_GAMMA(*src_scan++);
+ dest_scan[1] = FX_GAMMA(*src_scan++);
+ dest_scan[0] = FX_GAMMA(*src_scan++);
+ dest_scan[3] = 255;
+ dest_scan += 4;
+ src_scan += src_gap;
+ continue;
}
+ if (src_alpha == 0) {
+ dest_scan += 4;
+ src_scan += src_Bpp;
+ continue;
+ }
+ int back_alpha = dest_scan[3];
+ uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 255;
+ dest_scan[3] = dest_alpha;
+ int alpha_ratio = src_alpha * 255 / dest_alpha;
+ for (int color = 0; color < 3; color++) {
+ int index = 2 - color;
+ dest_scan[index] =
+ FXDIB_ALPHA_MERGE(dest_scan[index], FX_GAMMA(*src_scan), alpha_ratio);
+ src_scan++;
+ }
+ dest_scan += 4;
+ src_scan += src_gap;
+ }
}
-inline void _CompositeRow_1bppRgb2Rgb_NoBlend_RgbByteOrder(uint8_t* dest_scan, const uint8_t* src_scan, int src_left,
- FX_ARGB* pPalette, int pixel_count, int DestBpp, const uint8_t* clip_scan)
-{
- int reset_r, reset_g, reset_b;
- int set_r, set_g, set_b;
- if (pPalette) {
- reset_r = FXARGB_R(pPalette[0]);
- reset_g = FXARGB_G(pPalette[0]);
- reset_b = FXARGB_B(pPalette[0]);
- set_r = FXARGB_R(pPalette[1]);
- set_g = FXARGB_G(pPalette[1]);
- set_b = FXARGB_B(pPalette[1]);
+inline void _CompositeRow_Rgb2Rgb_NoBlend_Clip_RgbByteOrder(
+ uint8_t* dest_scan,
+ const uint8_t* src_scan,
+ int width,
+ int dest_Bpp,
+ int src_Bpp,
+ const uint8_t* clip_scan) {
+ for (int col = 0; col < width; col++) {
+ int src_alpha = clip_scan[col];
+ if (src_alpha == 255) {
+ dest_scan[2] = src_scan[0];
+ dest_scan[1] = src_scan[1];
+ dest_scan[0] = src_scan[2];
+ } else if (src_alpha) {
+ dest_scan[2] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(
+ FX_GAMMA(dest_scan[2]), FX_GAMMA(*src_scan), src_alpha));
+ src_scan++;
+ dest_scan[1] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(
+ FX_GAMMA(dest_scan[1]), FX_GAMMA(*src_scan), src_alpha));
+ src_scan++;
+ dest_scan[0] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(
+ FX_GAMMA(dest_scan[0]), FX_GAMMA(*src_scan), src_alpha));
+ dest_scan += dest_Bpp;
+ src_scan += src_Bpp - 2;
+ continue;
+ }
+ dest_scan += dest_Bpp;
+ src_scan += src_Bpp;
+ }
+}
+inline void _CompositeRow_8bppRgb2Rgb_NoBlend_RgbByteOrder(
+ uint8_t* dest_scan,
+ const uint8_t* src_scan,
+ FX_ARGB* pPalette,
+ int pixel_count,
+ int DestBpp,
+ const uint8_t* clip_scan) {
+ for (int col = 0; col < pixel_count; col++) {
+ FX_ARGB argb = pPalette ? pPalette[*src_scan] : (*src_scan) * 0x010101;
+ int src_r = FXARGB_R(argb);
+ int src_g = FXARGB_G(argb);
+ int src_b = FXARGB_B(argb);
+ if (clip_scan && clip_scan[col] < 255) {
+ dest_scan[2] = FXDIB_ALPHA_MERGE(dest_scan[2], src_b, clip_scan[col]);
+ dest_scan[1] = FXDIB_ALPHA_MERGE(dest_scan[1], src_g, clip_scan[col]);
+ dest_scan[0] = FXDIB_ALPHA_MERGE(dest_scan[0], src_r, clip_scan[col]);
} else {
- reset_r = reset_g = reset_b = 0;
- set_r = set_g = set_b = 255;
- }
- for (int col = 0; col < pixel_count; col ++) {
- int src_r, src_g, src_b;
- if (src_scan[(col + src_left) / 8] & (1 << (7 - (col + src_left) % 8))) {
- src_r = set_r;
- src_g = set_g;
- src_b = set_b;
- } else {
- src_r = reset_r;
- src_g = reset_g;
- src_b = reset_b;
- }
- if (clip_scan && clip_scan[col] < 255) {
- dest_scan[2] = FXDIB_ALPHA_MERGE(dest_scan[2], src_b, clip_scan[col]);
- dest_scan[1] = FXDIB_ALPHA_MERGE(dest_scan[1], src_g, clip_scan[col]);
- dest_scan[0] = FXDIB_ALPHA_MERGE(dest_scan[0], src_r, clip_scan[col]);
- } else {
- dest_scan[2] = src_b;
- dest_scan[1] = src_g;
- dest_scan[0] = src_r;
- }
- dest_scan += DestBpp;
+ dest_scan[2] = src_b;
+ dest_scan[1] = src_g;
+ dest_scan[0] = src_r;
}
+ dest_scan += DestBpp;
+ src_scan++;
+ }
}
-inline void _CompositeRow_8bppRgb2Argb_NoBlend_RgbByteOrder(uint8_t* dest_scan, const uint8_t* src_scan, int width,
- FX_ARGB* pPalette, const uint8_t* clip_scan)
-{
- for (int col = 0; col < width; col ++) {
- int src_r, src_g, src_b;
- if (pPalette) {
- FX_ARGB argb = pPalette[*src_scan];
- src_r = FXARGB_R(argb);
- src_g = FXARGB_G(argb);
- src_b = FXARGB_B(argb);
- } else {
- src_r = src_g = src_b = *src_scan;
- }
- if (clip_scan == NULL || clip_scan[col] == 255) {
- dest_scan[2] = FX_GAMMA(src_b);
- dest_scan[1] = FX_GAMMA(src_g);
- dest_scan[0] = FX_GAMMA(src_r);
- dest_scan[3] = 255;
- src_scan ++;
- dest_scan += 4;
- continue;
- }
- int src_alpha = clip_scan[col];
- if (src_alpha == 0) {
- dest_scan += 4;
- src_scan ++;
- continue;
- }
- int back_alpha = dest_scan[3];
- uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 255;
- dest_scan[3] = dest_alpha;
- int alpha_ratio = src_alpha * 255 / dest_alpha;
- dest_scan[2] = FXDIB_ALPHA_MERGE(dest_scan[2], FX_GAMMA(src_b), alpha_ratio);
- dest_scan[1] = FXDIB_ALPHA_MERGE(dest_scan[1], FX_GAMMA(src_g), alpha_ratio);
- dest_scan[0] = FXDIB_ALPHA_MERGE(dest_scan[0], FX_GAMMA(src_r), alpha_ratio);
- dest_scan += 4;
- src_scan ++;
+inline void _CompositeRow_1bppRgb2Rgb_NoBlend_RgbByteOrder(
+ uint8_t* dest_scan,
+ const uint8_t* src_scan,
+ int src_left,
+ FX_ARGB* pPalette,
+ int pixel_count,
+ int DestBpp,
+ const uint8_t* clip_scan) {
+ int reset_r, reset_g, reset_b;
+ int set_r, set_g, set_b;
+ if (pPalette) {
+ reset_r = FXARGB_R(pPalette[0]);
+ reset_g = FXARGB_G(pPalette[0]);
+ reset_b = FXARGB_B(pPalette[0]);
+ set_r = FXARGB_R(pPalette[1]);
+ set_g = FXARGB_G(pPalette[1]);
+ set_b = FXARGB_B(pPalette[1]);
+ } else {
+ reset_r = reset_g = reset_b = 0;
+ set_r = set_g = set_b = 255;
+ }
+ for (int col = 0; col < pixel_count; col++) {
+ int src_r, src_g, src_b;
+ if (src_scan[(col + src_left) / 8] & (1 << (7 - (col + src_left) % 8))) {
+ src_r = set_r;
+ src_g = set_g;
+ src_b = set_b;
+ } else {
+ src_r = reset_r;
+ src_g = reset_g;
+ src_b = reset_b;
+ }
+ if (clip_scan && clip_scan[col] < 255) {
+ dest_scan[2] = FXDIB_ALPHA_MERGE(dest_scan[2], src_b, clip_scan[col]);
+ dest_scan[1] = FXDIB_ALPHA_MERGE(dest_scan[1], src_g, clip_scan[col]);
+ dest_scan[0] = FXDIB_ALPHA_MERGE(dest_scan[0], src_r, clip_scan[col]);
+ } else {
+ dest_scan[2] = src_b;
+ dest_scan[1] = src_g;
+ dest_scan[0] = src_r;
}
+ dest_scan += DestBpp;
+ }
}
-inline void _CompositeRow_1bppRgb2Argb_NoBlend_RgbByteOrder(uint8_t* dest_scan, const uint8_t* src_scan, int src_left, int width,
- FX_ARGB* pPalette, const uint8_t* clip_scan)
-{
- int reset_r, reset_g, reset_b;
- int set_r, set_g, set_b;
+inline void _CompositeRow_8bppRgb2Argb_NoBlend_RgbByteOrder(
+ uint8_t* dest_scan,
+ const uint8_t* src_scan,
+ int width,
+ FX_ARGB* pPalette,
+ const uint8_t* clip_scan) {
+ for (int col = 0; col < width; col++) {
+ int src_r, src_g, src_b;
if (pPalette) {
- reset_r = FXARGB_R(pPalette[0]);
- reset_g = FXARGB_G(pPalette[0]);
- reset_b = FXARGB_B(pPalette[0]);
- set_r = FXARGB_R(pPalette[1]);
- set_g = FXARGB_G(pPalette[1]);
- set_b = FXARGB_B(pPalette[1]);
+ FX_ARGB argb = pPalette[*src_scan];
+ src_r = FXARGB_R(argb);
+ src_g = FXARGB_G(argb);
+ src_b = FXARGB_B(argb);
} else {
- reset_r = reset_g = reset_b = 0;
- set_r = set_g = set_b = 255;
- }
- for (int col = 0; col < width; col ++) {
- int src_r, src_g, src_b;
- if (src_scan[(col + src_left) / 8] & (1 << (7 - (col + src_left) % 8))) {
- src_r = set_r;
- src_g = set_g;
- src_b = set_b;
- } else {
- src_r = reset_r;
- src_g = reset_g;
- src_b = reset_b;
- }
- if (clip_scan == NULL || clip_scan[col] == 255) {
- dest_scan[2] = FX_GAMMA(src_b);
- dest_scan[1] = FX_GAMMA(src_g);
- dest_scan[0] = FX_GAMMA(src_r);
- dest_scan[3] = 255;
- dest_scan += 4;
- continue;
- }
- int src_alpha = clip_scan[col];
- if (src_alpha == 0) {
- dest_scan += 4;
- continue;
- }
- int back_alpha = dest_scan[3];
- uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 255;
- dest_scan[3] = dest_alpha;
- int alpha_ratio = src_alpha * 255 / dest_alpha;
- dest_scan[2] = FXDIB_ALPHA_MERGE(dest_scan[2], FX_GAMMA(src_b), alpha_ratio);
- dest_scan[1] = FXDIB_ALPHA_MERGE(dest_scan[1], FX_GAMMA(src_g), alpha_ratio);
- dest_scan[0] = FXDIB_ALPHA_MERGE(dest_scan[0], FX_GAMMA(src_r), alpha_ratio);
- dest_scan += 4;
- }
+ src_r = src_g = src_b = *src_scan;
+ }
+ if (clip_scan == NULL || clip_scan[col] == 255) {
+ dest_scan[2] = FX_GAMMA(src_b);
+ dest_scan[1] = FX_GAMMA(src_g);
+ dest_scan[0] = FX_GAMMA(src_r);
+ dest_scan[3] = 255;
+ src_scan++;
+ dest_scan += 4;
+ continue;
+ }
+ int src_alpha = clip_scan[col];
+ if (src_alpha == 0) {
+ dest_scan += 4;
+ src_scan++;
+ continue;
+ }
+ int back_alpha = dest_scan[3];
+ uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 255;
+ dest_scan[3] = dest_alpha;
+ int alpha_ratio = src_alpha * 255 / dest_alpha;
+ dest_scan[2] =
+ FXDIB_ALPHA_MERGE(dest_scan[2], FX_GAMMA(src_b), alpha_ratio);
+ dest_scan[1] =
+ FXDIB_ALPHA_MERGE(dest_scan[1], FX_GAMMA(src_g), alpha_ratio);
+ dest_scan[0] =
+ FXDIB_ALPHA_MERGE(dest_scan[0], FX_GAMMA(src_r), alpha_ratio);
+ dest_scan += 4;
+ src_scan++;
+ }
}
-void _CompositeRow_ByteMask2Argb_RgbByteOrder(uint8_t* dest_scan, const uint8_t* src_scan, int mask_alpha, int src_r, int src_g, int src_b, int pixel_count,
- int blend_type, const uint8_t* clip_scan)
-{
- for (int col = 0; col < pixel_count; col ++) {
- int src_alpha;
- if (clip_scan) {
- src_alpha = mask_alpha * clip_scan[col] * src_scan[col] / 255 / 255;
- } else {
- src_alpha = mask_alpha * src_scan[col] / 255;
- }
- uint8_t back_alpha = dest_scan[3];
- if (back_alpha == 0) {
- FXARGB_SETRGBORDERDIB(dest_scan, FXARGB_MAKE(src_alpha, src_r, src_g, src_b));
- dest_scan += 4;
- continue;
- }
- if (src_alpha == 0) {
- dest_scan += 4;
- continue;
- }
- uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 255;
- dest_scan[3] = dest_alpha;
- int alpha_ratio = src_alpha * 255 / dest_alpha;
- if (blend_type >= FXDIB_BLEND_NONSEPARABLE) {
- int blended_colors[3];
- uint8_t src_scan[3];
- uint8_t dest_scan_o[3];
- src_scan[0] = src_b;
- src_scan[1] = src_g;
- src_scan[2] = src_r;
- dest_scan_o[0] = dest_scan[2];
- dest_scan_o[1] = dest_scan[1];
- dest_scan_o[2] = dest_scan[0];
- _RGB_Blend(blend_type, src_scan, dest_scan_o, blended_colors);
- dest_scan[2] = FXDIB_ALPHA_MERGE(dest_scan[2], blended_colors[0], alpha_ratio);
- dest_scan[1] = FXDIB_ALPHA_MERGE(dest_scan[1], blended_colors[1], alpha_ratio);
- dest_scan[0] = FXDIB_ALPHA_MERGE(dest_scan[0], blended_colors[2], alpha_ratio);
- } else if (blend_type) {
- int blended = _BLEND(blend_type, dest_scan[2], src_b);
- blended = FXDIB_ALPHA_MERGE(src_b, blended, back_alpha);
- dest_scan[2] = FXDIB_ALPHA_MERGE(dest_scan[2], blended, alpha_ratio);
- blended = _BLEND(blend_type, dest_scan[1], src_g);
- blended = FXDIB_ALPHA_MERGE(src_g, blended, back_alpha);
- dest_scan[1] = FXDIB_ALPHA_MERGE(dest_scan[1], blended, alpha_ratio);
- blended = _BLEND(blend_type, dest_scan[0], src_r);
- blended = FXDIB_ALPHA_MERGE(src_r, blended, back_alpha);
- dest_scan[0] = FXDIB_ALPHA_MERGE(dest_scan[0], blended, alpha_ratio);
- } else {
- dest_scan[2] = FXDIB_ALPHA_MERGE(dest_scan[2], src_b, alpha_ratio);
- dest_scan[1] = FXDIB_ALPHA_MERGE(dest_scan[1], src_g, alpha_ratio);
- dest_scan[0] = FXDIB_ALPHA_MERGE(dest_scan[0], src_r, alpha_ratio);
- }
- dest_scan += 4;
- }
+inline void _CompositeRow_1bppRgb2Argb_NoBlend_RgbByteOrder(
+ uint8_t* dest_scan,
+ const uint8_t* src_scan,
+ int src_left,
+ int width,
+ FX_ARGB* pPalette,
+ const uint8_t* clip_scan) {
+ int reset_r, reset_g, reset_b;
+ int set_r, set_g, set_b;
+ if (pPalette) {
+ reset_r = FXARGB_R(pPalette[0]);
+ reset_g = FXARGB_G(pPalette[0]);
+ reset_b = FXARGB_B(pPalette[0]);
+ set_r = FXARGB_R(pPalette[1]);
+ set_g = FXARGB_G(pPalette[1]);
+ set_b = FXARGB_B(pPalette[1]);
+ } else {
+ reset_r = reset_g = reset_b = 0;
+ set_r = set_g = set_b = 255;
+ }
+ for (int col = 0; col < width; col++) {
+ int src_r, src_g, src_b;
+ if (src_scan[(col + src_left) / 8] & (1 << (7 - (col + src_left) % 8))) {
+ src_r = set_r;
+ src_g = set_g;
+ src_b = set_b;
+ } else {
+ src_r = reset_r;
+ src_g = reset_g;
+ src_b = reset_b;
+ }
+ if (clip_scan == NULL || clip_scan[col] == 255) {
+ dest_scan[2] = FX_GAMMA(src_b);
+ dest_scan[1] = FX_GAMMA(src_g);
+ dest_scan[0] = FX_GAMMA(src_r);
+ dest_scan[3] = 255;
+ dest_scan += 4;
+ continue;
+ }
+ int src_alpha = clip_scan[col];
+ if (src_alpha == 0) {
+ dest_scan += 4;
+ continue;
+ }
+ int back_alpha = dest_scan[3];
+ uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 255;
+ dest_scan[3] = dest_alpha;
+ int alpha_ratio = src_alpha * 255 / dest_alpha;
+ dest_scan[2] =
+ FXDIB_ALPHA_MERGE(dest_scan[2], FX_GAMMA(src_b), alpha_ratio);
+ dest_scan[1] =
+ FXDIB_ALPHA_MERGE(dest_scan[1], FX_GAMMA(src_g), alpha_ratio);
+ dest_scan[0] =
+ FXDIB_ALPHA_MERGE(dest_scan[0], FX_GAMMA(src_r), alpha_ratio);
+ dest_scan += 4;
+ }
}
-void _CompositeRow_ByteMask2Rgb_RgbByteOrder(uint8_t* dest_scan, const uint8_t* src_scan, int mask_alpha, int src_r, int src_g, int src_b, int pixel_count,
- int blend_type, int Bpp, const uint8_t* clip_scan)
-{
- for (int col = 0; col < pixel_count; col ++) {
- int src_alpha;
- if (clip_scan) {
- src_alpha = mask_alpha * clip_scan[col] * src_scan[col] / 255 / 255;
- } else {
- src_alpha = mask_alpha * src_scan[col] / 255;
- }
- if (src_alpha == 0) {
- dest_scan += Bpp;
- continue;
- }
- if (blend_type >= FXDIB_BLEND_NONSEPARABLE) {
- int blended_colors[3];
- uint8_t src_scan[3];
- uint8_t dest_scan_o[3];
- src_scan[0] = src_b;
- src_scan[1] = src_g;
- src_scan[2] = src_r;
- dest_scan_o[0] = dest_scan[2];
- dest_scan_o[1] = dest_scan[1];
- dest_scan_o[2] = dest_scan[0];
- _RGB_Blend(blend_type, src_scan, dest_scan_o, blended_colors);
- dest_scan[2] = FXDIB_ALPHA_MERGE(dest_scan[2], blended_colors[0], src_alpha);
- dest_scan[1] = FXDIB_ALPHA_MERGE(dest_scan[1], blended_colors[1], src_alpha);
- dest_scan[0] = FXDIB_ALPHA_MERGE(dest_scan[0], blended_colors[2], src_alpha);
- } else if (blend_type) {
- int blended = _BLEND(blend_type, dest_scan[2], src_b);
- dest_scan[2] = FXDIB_ALPHA_MERGE(dest_scan[2], blended, src_alpha);
- blended = _BLEND(blend_type, dest_scan[1], src_g);
- dest_scan[1] = FXDIB_ALPHA_MERGE(dest_scan[1], blended, src_alpha);
- blended = _BLEND(blend_type, dest_scan[0], src_r);
- dest_scan[0] = FXDIB_ALPHA_MERGE(dest_scan[0], blended, src_alpha);
- } else {
- dest_scan[2] = FXDIB_ALPHA_MERGE(dest_scan[2], src_b, src_alpha);
- dest_scan[1] = FXDIB_ALPHA_MERGE(dest_scan[1], src_g, src_alpha);
- dest_scan[0] = FXDIB_ALPHA_MERGE(dest_scan[0], src_r, src_alpha);
- }
- dest_scan += Bpp;
+void _CompositeRow_ByteMask2Argb_RgbByteOrder(uint8_t* dest_scan,
+ const uint8_t* src_scan,
+ int mask_alpha,
+ int src_r,
+ int src_g,
+ int src_b,
+ int pixel_count,
+ int blend_type,
+ const uint8_t* clip_scan) {
+ for (int col = 0; col < pixel_count; col++) {
+ int src_alpha;
+ if (clip_scan) {
+ src_alpha = mask_alpha * clip_scan[col] * src_scan[col] / 255 / 255;
+ } else {
+ src_alpha = mask_alpha * src_scan[col] / 255;
}
-}
-void _CompositeRow_BitMask2Argb_RgbByteOrder(uint8_t* dest_scan, const uint8_t* src_scan, int mask_alpha, int src_r, int src_g, int src_b,
- int src_left, int pixel_count, int blend_type, const uint8_t* clip_scan)
-{
- if (blend_type == FXDIB_BLEND_NORMAL && clip_scan == NULL && mask_alpha == 255) {
- FX_ARGB argb = FXARGB_MAKE(0xff, src_r, src_g, src_b);
- for (int col = 0; col < pixel_count; col ++) {
- if (src_scan[(src_left + col) / 8] & (1 << (7 - (src_left + col) % 8))) {
- FXARGB_SETRGBORDERDIB(dest_scan, argb);
- }
- dest_scan += 4;
- }
- return;
+ uint8_t back_alpha = dest_scan[3];
+ if (back_alpha == 0) {
+ FXARGB_SETRGBORDERDIB(dest_scan,
+ FXARGB_MAKE(src_alpha, src_r, src_g, src_b));
+ dest_scan += 4;
+ continue;
}
- for (int col = 0; col < pixel_count; col ++) {
- if (!(src_scan[(src_left + col) / 8] & (1 << (7 - (src_left + col) % 8)))) {
- dest_scan += 4;
- continue;
- }
- int src_alpha;
- if (clip_scan) {
- src_alpha = mask_alpha * clip_scan[col] / 255;
- } else {
- src_alpha = mask_alpha;
- }
- uint8_t back_alpha = dest_scan[3];
- if (back_alpha == 0) {
- FXARGB_SETRGBORDERDIB(dest_scan, FXARGB_MAKE(src_alpha, src_r, src_g, src_b));
- dest_scan += 4;
- continue;
- }
- uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 255;
- dest_scan[3] = dest_alpha;
- int alpha_ratio = src_alpha * 255 / dest_alpha;
- if (blend_type >= FXDIB_BLEND_NONSEPARABLE) {
- int blended_colors[3];
- uint8_t src_scan[3];
- uint8_t dest_scan_o[3];
- src_scan[0] = src_b;
- src_scan[1] = src_g;
- src_scan[2] = src_r;
- dest_scan_o[0] = dest_scan[2];
- dest_scan_o[1] = dest_scan[1];
- dest_scan_o[2] = dest_scan[0];
- _RGB_Blend(blend_type, src_scan, dest_scan_o, blended_colors);
- dest_scan[2] = FXDIB_ALPHA_MERGE(dest_scan[2], blended_colors[0], alpha_ratio);
- dest_scan[1] = FXDIB_ALPHA_MERGE(dest_scan[1], blended_colors[1], alpha_ratio);
- dest_scan[0] = FXDIB_ALPHA_MERGE(dest_scan[0], blended_colors[2], alpha_ratio);
- } else if (blend_type) {
- int blended = _BLEND(blend_type, dest_scan[2], src_b);
- blended = FXDIB_ALPHA_MERGE(src_b, blended, back_alpha);
- dest_scan[2] = FXDIB_ALPHA_MERGE(dest_scan[2], blended, alpha_ratio);
- blended = _BLEND(blend_type, dest_scan[1], src_g);
- blended = FXDIB_ALPHA_MERGE(src_g, blended, back_alpha);
- dest_scan[1] = FXDIB_ALPHA_MERGE(dest_scan[1], blended, alpha_ratio);
- blended = _BLEND(blend_type, dest_scan[0], src_r);
- blended = FXDIB_ALPHA_MERGE(src_r, blended, back_alpha);
- dest_scan[0] = FXDIB_ALPHA_MERGE(dest_scan[0], blended, alpha_ratio);
- } else {
- dest_scan[2] = FXDIB_ALPHA_MERGE(dest_scan[2], src_b, alpha_ratio);
- dest_scan[1] = FXDIB_ALPHA_MERGE(dest_scan[1], src_g, alpha_ratio);
- dest_scan[0] = FXDIB_ALPHA_MERGE(dest_scan[0], src_r, alpha_ratio);
- }
- dest_scan += 4;
+ if (src_alpha == 0) {
+ dest_scan += 4;
+ continue;
+ }
+ uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 255;
+ dest_scan[3] = dest_alpha;
+ int alpha_ratio = src_alpha * 255 / dest_alpha;
+ if (blend_type >= FXDIB_BLEND_NONSEPARABLE) {
+ int blended_colors[3];
+ uint8_t src_scan[3];
+ uint8_t dest_scan_o[3];
+ src_scan[0] = src_b;
+ src_scan[1] = src_g;
+ src_scan[2] = src_r;
+ dest_scan_o[0] = dest_scan[2];
+ dest_scan_o[1] = dest_scan[1];
+ dest_scan_o[2] = dest_scan[0];
+ _RGB_Blend(blend_type, src_scan, dest_scan_o, blended_colors);
+ dest_scan[2] =
+ FXDIB_ALPHA_MERGE(dest_scan[2], blended_colors[0], alpha_ratio);
+ dest_scan[1] =
+ FXDIB_ALPHA_MERGE(dest_scan[1], blended_colors[1], alpha_ratio);
+ dest_scan[0] =
+ FXDIB_ALPHA_MERGE(dest_scan[0], blended_colors[2], alpha_ratio);
+ } else if (blend_type) {
+ int blended = _BLEND(blend_type, dest_scan[2], src_b);
+ blended = FXDIB_ALPHA_MERGE(src_b, blended, back_alpha);
+ dest_scan[2] = FXDIB_ALPHA_MERGE(dest_scan[2], blended, alpha_ratio);
+ blended = _BLEND(blend_type, dest_scan[1], src_g);
+ blended = FXDIB_ALPHA_MERGE(src_g, blended, back_alpha);
+ dest_scan[1] = FXDIB_ALPHA_MERGE(dest_scan[1], blended, alpha_ratio);
+ blended = _BLEND(blend_type, dest_scan[0], src_r);
+ blended = FXDIB_ALPHA_MERGE(src_r, blended, back_alpha);
+ dest_scan[0] = FXDIB_ALPHA_MERGE(dest_scan[0], blended, alpha_ratio);
+ } else {
+ dest_scan[2] = FXDIB_ALPHA_MERGE(dest_scan[2], src_b, alpha_ratio);
+ dest_scan[1] = FXDIB_ALPHA_MERGE(dest_scan[1], src_g, alpha_ratio);
+ dest_scan[0] = FXDIB_ALPHA_MERGE(dest_scan[0], src_r, alpha_ratio);
}
+ dest_scan += 4;
+ }
}
-void _CompositeRow_BitMask2Rgb_RgbByteOrder(uint8_t* dest_scan, const uint8_t* src_scan, int mask_alpha, int src_r, int src_g, int src_b,
- int src_left, int pixel_count, int blend_type, int Bpp, const uint8_t* clip_scan)
-{
- if (blend_type == FXDIB_BLEND_NORMAL && clip_scan == NULL && mask_alpha == 255) {
- for (int col = 0; col < pixel_count; col ++) {
- if (src_scan[(src_left + col) / 8] & (1 << (7 - (src_left + col) % 8))) {
- dest_scan[2] = src_b;
- dest_scan[1] = src_g;
- dest_scan[0] = src_r;
- }
- dest_scan += Bpp;
- }
- return;
+void _CompositeRow_ByteMask2Rgb_RgbByteOrder(uint8_t* dest_scan,
+ const uint8_t* src_scan,
+ int mask_alpha,
+ int src_r,
+ int src_g,
+ int src_b,
+ int pixel_count,
+ int blend_type,
+ int Bpp,
+ const uint8_t* clip_scan) {
+ for (int col = 0; col < pixel_count; col++) {
+ int src_alpha;
+ if (clip_scan) {
+ src_alpha = mask_alpha * clip_scan[col] * src_scan[col] / 255 / 255;
+ } else {
+ src_alpha = mask_alpha * src_scan[col] / 255;
}
- for (int col = 0; col < pixel_count; col ++) {
- if (!(src_scan[(src_left + col) / 8] & (1 << (7 - (src_left + col) % 8)))) {
- dest_scan += Bpp;
- continue;
- }
- int src_alpha;
- if (clip_scan) {
- src_alpha = mask_alpha * clip_scan[col] / 255;
- } else {
- src_alpha = mask_alpha;
- }
- if (src_alpha == 0) {
- dest_scan += Bpp;
- continue;
- }
- if (blend_type >= FXDIB_BLEND_NONSEPARABLE) {
- int blended_colors[3];
- uint8_t src_scan[3];
- uint8_t dest_scan_o[3];
- src_scan[0] = src_b;
- src_scan[1] = src_g;
- src_scan[2] = src_r;
- dest_scan_o[0] = dest_scan[2];
- dest_scan_o[1] = dest_scan[1];
- dest_scan_o[2] = dest_scan[0];
- _RGB_Blend(blend_type, src_scan, dest_scan_o, blended_colors);
- dest_scan[2] = FXDIB_ALPHA_MERGE(dest_scan[2], blended_colors[0], src_alpha);
- dest_scan[1] = FXDIB_ALPHA_MERGE(dest_scan[1], blended_colors[1], src_alpha);
- dest_scan[0] = FXDIB_ALPHA_MERGE(dest_scan[0], blended_colors[2], src_alpha);
- } else if (blend_type) {
- int back_color = FX_GAMMA(dest_scan[2]);
- int blended = _BLEND(blend_type, back_color, src_b);
- dest_scan[2] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(back_color, blended, src_alpha));
- back_color = FX_GAMMA(dest_scan[1]);
- blended = _BLEND(blend_type, back_color, src_g);
- dest_scan[1] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(back_color, blended, src_alpha));
- back_color = FX_GAMMA(dest_scan[0]);
- blended = _BLEND(blend_type, back_color, src_r);
- dest_scan[0] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(back_color, blended, src_alpha));
- } else {
- dest_scan[2] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[2]), src_b, src_alpha));
- dest_scan[1] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[1]), src_g, src_alpha));
- dest_scan[0] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[0]), src_r, src_alpha));
- }
- dest_scan += Bpp;
+ if (src_alpha == 0) {
+ dest_scan += Bpp;
+ continue;
+ }
+ if (blend_type >= FXDIB_BLEND_NONSEPARABLE) {
+ int blended_colors[3];
+ uint8_t src_scan[3];
+ uint8_t dest_scan_o[3];
+ src_scan[0] = src_b;
+ src_scan[1] = src_g;
+ src_scan[2] = src_r;
+ dest_scan_o[0] = dest_scan[2];
+ dest_scan_o[1] = dest_scan[1];
+ dest_scan_o[2] = dest_scan[0];
+ _RGB_Blend(blend_type, src_scan, dest_scan_o, blended_colors);
+ dest_scan[2] =
+ FXDIB_ALPHA_MERGE(dest_scan[2], blended_colors[0], src_alpha);
+ dest_scan[1] =
+ FXDIB_ALPHA_MERGE(dest_scan[1], blended_colors[1], src_alpha);
+ dest_scan[0] =
+ FXDIB_ALPHA_MERGE(dest_scan[0], blended_colors[2], src_alpha);
+ } else if (blend_type) {
+ int blended = _BLEND(blend_type, dest_scan[2], src_b);
+ dest_scan[2] = FXDIB_ALPHA_MERGE(dest_scan[2], blended, src_alpha);
+ blended = _BLEND(blend_type, dest_scan[1], src_g);
+ dest_scan[1] = FXDIB_ALPHA_MERGE(dest_scan[1], blended, src_alpha);
+ blended = _BLEND(blend_type, dest_scan[0], src_r);
+ dest_scan[0] = FXDIB_ALPHA_MERGE(dest_scan[0], blended, src_alpha);
+ } else {
+ dest_scan[2] = FXDIB_ALPHA_MERGE(dest_scan[2], src_b, src_alpha);
+ dest_scan[1] = FXDIB_ALPHA_MERGE(dest_scan[1], src_g, src_alpha);
+ dest_scan[0] = FXDIB_ALPHA_MERGE(dest_scan[0], src_r, src_alpha);
}
+ dest_scan += Bpp;
+ }
}
-inline FX_BOOL _ScanlineCompositor_InitSourceMask(FXDIB_Format dest_format, int alpha_flag, FX_DWORD mask_color, int& mask_alpha,
- int& mask_red, int& mask_green, int& mask_blue, int& mask_black,
- void* icc_module, void* pIccTransform)
-{
- ICodec_IccModule* pIccModule = (ICodec_IccModule*)icc_module;
- if (alpha_flag >> 8) {
- mask_alpha = alpha_flag & 0xff;
- mask_red = FXSYS_GetCValue(mask_color);
- mask_green = FXSYS_GetMValue(mask_color);
- mask_blue = FXSYS_GetYValue(mask_color);
- mask_black = FXSYS_GetKValue(mask_color);
+void _CompositeRow_BitMask2Argb_RgbByteOrder(uint8_t* dest_scan,
+ const uint8_t* src_scan,
+ int mask_alpha,
+ int src_r,
+ int src_g,
+ int src_b,
+ int src_left,
+ int pixel_count,
+ int blend_type,
+ const uint8_t* clip_scan) {
+ if (blend_type == FXDIB_BLEND_NORMAL && clip_scan == NULL &&
+ mask_alpha == 255) {
+ FX_ARGB argb = FXARGB_MAKE(0xff, src_r, src_g, src_b);
+ for (int col = 0; col < pixel_count; col++) {
+ if (src_scan[(src_left + col) / 8] & (1 << (7 - (src_left + col) % 8))) {
+ FXARGB_SETRGBORDERDIB(dest_scan, argb);
+ }
+ dest_scan += 4;
+ }
+ return;
+ }
+ for (int col = 0; col < pixel_count; col++) {
+ if (!(src_scan[(src_left + col) / 8] & (1 << (7 - (src_left + col) % 8)))) {
+ dest_scan += 4;
+ continue;
+ }
+ int src_alpha;
+ if (clip_scan) {
+ src_alpha = mask_alpha * clip_scan[col] / 255;
} else {
- mask_alpha = FXARGB_A(mask_color);
- mask_red = FXARGB_R(mask_color);
- mask_green = FXARGB_G(mask_color);
- mask_blue = FXARGB_B(mask_color);
- }
- if (dest_format == FXDIB_8bppMask) {
- return TRUE;
+ src_alpha = mask_alpha;
+ }
+ uint8_t back_alpha = dest_scan[3];
+ if (back_alpha == 0) {
+ FXARGB_SETRGBORDERDIB(dest_scan,
+ FXARGB_MAKE(src_alpha, src_r, src_g, src_b));
+ dest_scan += 4;
+ continue;
+ }
+ uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 255;
+ dest_scan[3] = dest_alpha;
+ int alpha_ratio = src_alpha * 255 / dest_alpha;
+ if (blend_type >= FXDIB_BLEND_NONSEPARABLE) {
+ int blended_colors[3];
+ uint8_t src_scan[3];
+ uint8_t dest_scan_o[3];
+ src_scan[0] = src_b;
+ src_scan[1] = src_g;
+ src_scan[2] = src_r;
+ dest_scan_o[0] = dest_scan[2];
+ dest_scan_o[1] = dest_scan[1];
+ dest_scan_o[2] = dest_scan[0];
+ _RGB_Blend(blend_type, src_scan, dest_scan_o, blended_colors);
+ dest_scan[2] =
+ FXDIB_ALPHA_MERGE(dest_scan[2], blended_colors[0], alpha_ratio);
+ dest_scan[1] =
+ FXDIB_ALPHA_MERGE(dest_scan[1], blended_colors[1], alpha_ratio);
+ dest_scan[0] =
+ FXDIB_ALPHA_MERGE(dest_scan[0], blended_colors[2], alpha_ratio);
+ } else if (blend_type) {
+ int blended = _BLEND(blend_type, dest_scan[2], src_b);
+ blended = FXDIB_ALPHA_MERGE(src_b, blended, back_alpha);
+ dest_scan[2] = FXDIB_ALPHA_MERGE(dest_scan[2], blended, alpha_ratio);
+ blended = _BLEND(blend_type, dest_scan[1], src_g);
+ blended = FXDIB_ALPHA_MERGE(src_g, blended, back_alpha);
+ dest_scan[1] = FXDIB_ALPHA_MERGE(dest_scan[1], blended, alpha_ratio);
+ blended = _BLEND(blend_type, dest_scan[0], src_r);
+ blended = FXDIB_ALPHA_MERGE(src_r, blended, back_alpha);
+ dest_scan[0] = FXDIB_ALPHA_MERGE(dest_scan[0], blended, alpha_ratio);
+ } else {
+ dest_scan[2] = FXDIB_ALPHA_MERGE(dest_scan[2], src_b, alpha_ratio);
+ dest_scan[1] = FXDIB_ALPHA_MERGE(dest_scan[1], src_g, alpha_ratio);
+ dest_scan[0] = FXDIB_ALPHA_MERGE(dest_scan[0], src_r, alpha_ratio);
}
- if ((dest_format & 0xff) == 8) {
- if (pIccTransform) {
- mask_color = (alpha_flag >> 8) ? FXCMYK_TODIB(mask_color) : FXARGB_TODIB(mask_color);
- uint8_t* gray_p = (uint8_t*)&mask_color;
- pIccModule->TranslateScanline(pIccTransform, gray_p, gray_p, 1);
- mask_red = dest_format & 0x0400 ? FX_CCOLOR(gray_p[0]) : gray_p[0];
- } else {
- if (alpha_flag >> 8) {
- uint8_t r, g, b;
- AdobeCMYK_to_sRGB1(mask_red, mask_green, mask_blue, mask_black,
- r, g, b);
- mask_red = FXRGB2GRAY(r, g, b);
- } else {
- mask_red = FXRGB2GRAY(mask_red, mask_green, mask_blue);
- }
- if (dest_format & 0x0400) {
- mask_red = FX_CCOLOR(mask_red);
- }
- }
+ dest_scan += 4;
+ }
+}
+void _CompositeRow_BitMask2Rgb_RgbByteOrder(uint8_t* dest_scan,
+ const uint8_t* src_scan,
+ int mask_alpha,
+ int src_r,
+ int src_g,
+ int src_b,
+ int src_left,
+ int pixel_count,
+ int blend_type,
+ int Bpp,
+ const uint8_t* clip_scan) {
+ if (blend_type == FXDIB_BLEND_NORMAL && clip_scan == NULL &&
+ mask_alpha == 255) {
+ for (int col = 0; col < pixel_count; col++) {
+ if (src_scan[(src_left + col) / 8] & (1 << (7 - (src_left + col) % 8))) {
+ dest_scan[2] = src_b;
+ dest_scan[1] = src_g;
+ dest_scan[0] = src_r;
+ }
+ dest_scan += Bpp;
+ }
+ return;
+ }
+ for (int col = 0; col < pixel_count; col++) {
+ if (!(src_scan[(src_left + col) / 8] & (1 << (7 - (src_left + col) % 8)))) {
+ dest_scan += Bpp;
+ continue;
+ }
+ int src_alpha;
+ if (clip_scan) {
+ src_alpha = mask_alpha * clip_scan[col] / 255;
} else {
- uint8_t* mask_color_p = (uint8_t*)&mask_color;
- mask_color = (alpha_flag >> 8) ? FXCMYK_TODIB(mask_color) : FXARGB_TODIB(mask_color);
- if (pIccTransform) {
- pIccModule->TranslateScanline(pIccTransform, mask_color_p, mask_color_p, 1);
- mask_red = mask_color_p[2];
- mask_green = mask_color_p[1];
- mask_blue = mask_color_p[0];
- } else if (alpha_flag >> 8) {
- AdobeCMYK_to_sRGB1(mask_color_p[0], mask_color_p[1], mask_color_p[2], mask_color_p[3],
- mask_color_p[2], mask_color_p[1], mask_color_p[0]);
- mask_red = mask_color_p[2];
- mask_green = mask_color_p[1];
- mask_blue = mask_color_p[0];
- }
+ src_alpha = mask_alpha;
}
- return TRUE;
+ if (src_alpha == 0) {
+ dest_scan += Bpp;
+ continue;
+ }
+ if (blend_type >= FXDIB_BLEND_NONSEPARABLE) {
+ int blended_colors[3];
+ uint8_t src_scan[3];
+ uint8_t dest_scan_o[3];
+ src_scan[0] = src_b;
+ src_scan[1] = src_g;
+ src_scan[2] = src_r;
+ dest_scan_o[0] = dest_scan[2];
+ dest_scan_o[1] = dest_scan[1];
+ dest_scan_o[2] = dest_scan[0];
+ _RGB_Blend(blend_type, src_scan, dest_scan_o, blended_colors);
+ dest_scan[2] =
+ FXDIB_ALPHA_MERGE(dest_scan[2], blended_colors[0], src_alpha);
+ dest_scan[1] =
+ FXDIB_ALPHA_MERGE(dest_scan[1], blended_colors[1], src_alpha);
+ dest_scan[0] =
+ FXDIB_ALPHA_MERGE(dest_scan[0], blended_colors[2], src_alpha);
+ } else if (blend_type) {
+ int back_color = FX_GAMMA(dest_scan[2]);
+ int blended = _BLEND(blend_type, back_color, src_b);
+ dest_scan[2] =
+ FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(back_color, blended, src_alpha));
+ back_color = FX_GAMMA(dest_scan[1]);
+ blended = _BLEND(blend_type, back_color, src_g);
+ dest_scan[1] =
+ FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(back_color, blended, src_alpha));
+ back_color = FX_GAMMA(dest_scan[0]);
+ blended = _BLEND(blend_type, back_color, src_r);
+ dest_scan[0] =
+ FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(back_color, blended, src_alpha));
+ } else {
+ dest_scan[2] = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[2]), src_b, src_alpha));
+ dest_scan[1] = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[1]), src_g, src_alpha));
+ dest_scan[0] = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[0]), src_r, src_alpha));
+ }
+ dest_scan += Bpp;
+ }
}
-inline void _ScanlineCompositor_InitSourcePalette(FXDIB_Format src_format, FXDIB_Format dest_format,
- FX_DWORD*& pDestPalette, FX_DWORD* pSrcPalette,
- void* icc_module, void* pIccTransform)
-{
- ICodec_IccModule* pIccModule = (ICodec_IccModule*)icc_module;
- FX_BOOL isSrcCmyk = src_format & 0x0400 ? TRUE : FALSE;
- FX_BOOL isDstCmyk = dest_format & 0x0400 ? TRUE : FALSE;
- pDestPalette = NULL;
+inline FX_BOOL _ScanlineCompositor_InitSourceMask(FXDIB_Format dest_format,
+ int alpha_flag,
+ FX_DWORD mask_color,
+ int& mask_alpha,
+ int& mask_red,
+ int& mask_green,
+ int& mask_blue,
+ int& mask_black,
+ void* icc_module,
+ void* pIccTransform) {
+ ICodec_IccModule* pIccModule = (ICodec_IccModule*)icc_module;
+ if (alpha_flag >> 8) {
+ mask_alpha = alpha_flag & 0xff;
+ mask_red = FXSYS_GetCValue(mask_color);
+ mask_green = FXSYS_GetMValue(mask_color);
+ mask_blue = FXSYS_GetYValue(mask_color);
+ mask_black = FXSYS_GetKValue(mask_color);
+ } else {
+ mask_alpha = FXARGB_A(mask_color);
+ mask_red = FXARGB_R(mask_color);
+ mask_green = FXARGB_G(mask_color);
+ mask_blue = FXARGB_B(mask_color);
+ }
+ if (dest_format == FXDIB_8bppMask) {
+ return TRUE;
+ }
+ if ((dest_format & 0xff) == 8) {
if (pIccTransform) {
- if (pSrcPalette) {
- if ((dest_format & 0xff) == 8) {
- int pal_count = 1 << (src_format & 0xff);
- uint8_t* gray_pal = FX_Alloc(uint8_t, pal_count);
- pDestPalette = (FX_DWORD*)gray_pal;
- for (int i = 0; i < pal_count; i ++) {
- FX_DWORD color = isSrcCmyk ? FXCMYK_TODIB(pSrcPalette[i]) : FXARGB_TODIB(pSrcPalette[i]);
- pIccModule->TranslateScanline(pIccTransform, gray_pal, (const uint8_t*)&color, 1);
- gray_pal ++;
- }
- } else {
- int palsize = 1 << (src_format & 0xff);
- pDestPalette = FX_Alloc(FX_DWORD, palsize);
- for (int i = 0; i < palsize; i ++) {
- FX_DWORD color = isSrcCmyk ? FXCMYK_TODIB(pSrcPalette[i]) : FXARGB_TODIB(pSrcPalette[i]);
- pIccModule->TranslateScanline(pIccTransform, (uint8_t*)&color, (const uint8_t*)&color, 1);
- pDestPalette[i] = isDstCmyk ? FXCMYK_TODIB(color) : FXARGB_TODIB(color);
- }
- }
+ mask_color = (alpha_flag >> 8) ? FXCMYK_TODIB(mask_color)
+ : FXARGB_TODIB(mask_color);
+ uint8_t* gray_p = (uint8_t*)&mask_color;
+ pIccModule->TranslateScanline(pIccTransform, gray_p, gray_p, 1);
+ mask_red = dest_format & 0x0400 ? FX_CCOLOR(gray_p[0]) : gray_p[0];
+ } else {
+ if (alpha_flag >> 8) {
+ uint8_t r, g, b;
+ AdobeCMYK_to_sRGB1(mask_red, mask_green, mask_blue, mask_black, r, g,
+ b);
+ mask_red = FXRGB2GRAY(r, g, b);
+ } else {
+ mask_red = FXRGB2GRAY(mask_red, mask_green, mask_blue);
+ }
+ if (dest_format & 0x0400) {
+ mask_red = FX_CCOLOR(mask_red);
+ }
+ }
+ } else {
+ uint8_t* mask_color_p = (uint8_t*)&mask_color;
+ mask_color =
+ (alpha_flag >> 8) ? FXCMYK_TODIB(mask_color) : FXARGB_TODIB(mask_color);
+ if (pIccTransform) {
+ pIccModule->TranslateScanline(pIccTransform, mask_color_p, mask_color_p,
+ 1);
+ mask_red = mask_color_p[2];
+ mask_green = mask_color_p[1];
+ mask_blue = mask_color_p[0];
+ } else if (alpha_flag >> 8) {
+ AdobeCMYK_to_sRGB1(mask_color_p[0], mask_color_p[1], mask_color_p[2],
+ mask_color_p[3], mask_color_p[2], mask_color_p[1],
+ mask_color_p[0]);
+ mask_red = mask_color_p[2];
+ mask_green = mask_color_p[1];
+ mask_blue = mask_color_p[0];
+ }
+ }
+ return TRUE;
+}
+inline void _ScanlineCompositor_InitSourcePalette(FXDIB_Format src_format,
+ FXDIB_Format dest_format,
+ FX_DWORD*& pDestPalette,
+ FX_DWORD* pSrcPalette,
+ void* icc_module,
+ void* pIccTransform) {
+ ICodec_IccModule* pIccModule = (ICodec_IccModule*)icc_module;
+ FX_BOOL isSrcCmyk = src_format & 0x0400 ? TRUE : FALSE;
+ FX_BOOL isDstCmyk = dest_format & 0x0400 ? TRUE : FALSE;
+ pDestPalette = NULL;
+ if (pIccTransform) {
+ if (pSrcPalette) {
+ if ((dest_format & 0xff) == 8) {
+ int pal_count = 1 << (src_format & 0xff);
+ uint8_t* gray_pal = FX_Alloc(uint8_t, pal_count);
+ pDestPalette = (FX_DWORD*)gray_pal;
+ for (int i = 0; i < pal_count; i++) {
+ FX_DWORD color = isSrcCmyk ? FXCMYK_TODIB(pSrcPalette[i])
+ : FXARGB_TODIB(pSrcPalette[i]);
+ pIccModule->TranslateScanline(pIccTransform, gray_pal,
+ (const uint8_t*)&color, 1);
+ gray_pal++;
+ }
+ } else {
+ int palsize = 1 << (src_format & 0xff);
+ pDestPalette = FX_Alloc(FX_DWORD, palsize);
+ for (int i = 0; i < palsize; i++) {
+ FX_DWORD color = isSrcCmyk ? FXCMYK_TODIB(pSrcPalette[i])
+ : FXARGB_TODIB(pSrcPalette[i]);
+ pIccModule->TranslateScanline(pIccTransform, (uint8_t*)&color,
+ (const uint8_t*)&color, 1);
+ pDestPalette[i] =
+ isDstCmyk ? FXCMYK_TODIB(color) : FXARGB_TODIB(color);
+ }
+ }
+ } else {
+ int pal_count = 1 << (src_format & 0xff);
+ uint8_t* gray_pal = FX_Alloc(uint8_t, pal_count);
+ if (pal_count == 2) {
+ gray_pal[0] = 0;
+ gray_pal[1] = 255;
+ } else {
+ for (int i = 0; i < pal_count; i++) {
+ gray_pal[i] = i;
+ }
+ }
+ if ((dest_format & 0xff) == 8) {
+ pIccModule->TranslateScanline(pIccTransform, gray_pal, gray_pal,
+ pal_count);
+ pDestPalette = (FX_DWORD*)gray_pal;
+ } else {
+ pDestPalette = FX_Alloc(FX_DWORD, pal_count);
+ for (int i = 0; i < pal_count; i++) {
+ pIccModule->TranslateScanline(
+ pIccTransform, (uint8_t*)&pDestPalette[i], &gray_pal[i], 1);
+ pDestPalette[i] = isDstCmyk ? FXCMYK_TODIB(pDestPalette[i])
+ : FXARGB_TODIB(pDestPalette[i]);
+ }
+ FX_Free(gray_pal);
+ }
+ }
+ } else {
+ if (pSrcPalette) {
+ if ((dest_format & 0xff) == 8) {
+ int pal_count = 1 << (src_format & 0xff);
+ uint8_t* gray_pal = FX_Alloc(uint8_t, pal_count);
+ pDestPalette = (FX_DWORD*)gray_pal;
+ if (isSrcCmyk) {
+ for (int i = 0; i < pal_count; i++) {
+ FX_CMYK cmyk = pSrcPalette[i];
+ uint8_t r, g, b;
+ AdobeCMYK_to_sRGB1(FXSYS_GetCValue(cmyk), FXSYS_GetMValue(cmyk),
+ FXSYS_GetYValue(cmyk), FXSYS_GetKValue(cmyk), r,
+ g, b);
+ *gray_pal++ = FXRGB2GRAY(r, g, b);
+ }
+ } else
+ for (int i = 0; i < pal_count; i++) {
+ FX_ARGB argb = pSrcPalette[i];
+ *gray_pal++ =
+ FXRGB2GRAY(FXARGB_R(argb), FXARGB_G(argb), FXARGB_B(argb));
+ }
+ } else {
+ int palsize = 1 << (src_format & 0xff);
+ pDestPalette = FX_Alloc(FX_DWORD, palsize);
+ if (isDstCmyk == isSrcCmyk) {
+ FXSYS_memcpy(pDestPalette, pSrcPalette, palsize * sizeof(FX_DWORD));
} else {
- int pal_count = 1 << (src_format & 0xff);
- uint8_t* gray_pal = FX_Alloc(uint8_t, pal_count);
- if (pal_count == 2) {
- gray_pal[0] = 0;
- gray_pal[1] = 255;
- } else {
- for (int i = 0; i < pal_count; i++) {
- gray_pal[i] = i;
- }
- }
- if ((dest_format & 0xff) == 8) {
- pIccModule->TranslateScanline(pIccTransform, gray_pal, gray_pal, pal_count);
- pDestPalette = (FX_DWORD*)gray_pal;
- } else {
- pDestPalette = FX_Alloc(FX_DWORD, pal_count);
- for (int i = 0; i < pal_count; i ++) {
- pIccModule->TranslateScanline(pIccTransform, (uint8_t*)&pDestPalette[i], &gray_pal[i], 1);
- pDestPalette[i] = isDstCmyk ? FXCMYK_TODIB(pDestPalette[i]) : FXARGB_TODIB(pDestPalette[i]);
- }
- FX_Free(gray_pal);
- }
- }
+ for (int i = 0; i < palsize; i++) {
+ FX_CMYK cmyk = pSrcPalette[i];
+ uint8_t r, g, b;
+ AdobeCMYK_to_sRGB1(FXSYS_GetCValue(cmyk), FXSYS_GetMValue(cmyk),
+ FXSYS_GetYValue(cmyk), FXSYS_GetKValue(cmyk), r,
+ g, b);
+ pDestPalette[i] = FXARGB_MAKE(0xff, r, g, b);
+ }
+ }
+ }
} else {
- if (pSrcPalette) {
- if ((dest_format & 0xff) == 8) {
- int pal_count = 1 << (src_format & 0xff);
- uint8_t* gray_pal = FX_Alloc(uint8_t, pal_count);
- pDestPalette = (FX_DWORD*)gray_pal;
- if (isSrcCmyk) {
- for (int i = 0; i < pal_count; i ++) {
- FX_CMYK cmyk = pSrcPalette[i];
- uint8_t r, g, b;
- AdobeCMYK_to_sRGB1(FXSYS_GetCValue(cmyk), FXSYS_GetMValue(cmyk), FXSYS_GetYValue(cmyk), FXSYS_GetKValue(cmyk),
- r, g, b);
- *gray_pal ++ = FXRGB2GRAY(r, g, b);
- }
- } else
- for (int i = 0; i < pal_count; i ++) {
- FX_ARGB argb = pSrcPalette[i];
- *gray_pal ++ = FXRGB2GRAY(FXARGB_R(argb), FXARGB_G(argb), FXARGB_B(argb));
- }
- } else {
- int palsize = 1 << (src_format & 0xff);
- pDestPalette = FX_Alloc(FX_DWORD, palsize);
- if (isDstCmyk == isSrcCmyk) {
- FXSYS_memcpy(pDestPalette, pSrcPalette, palsize * sizeof(FX_DWORD));
- } else {
- for (int i = 0; i < palsize; i ++) {
- FX_CMYK cmyk = pSrcPalette[i];
- uint8_t r, g, b;
- AdobeCMYK_to_sRGB1(FXSYS_GetCValue(cmyk), FXSYS_GetMValue(cmyk), FXSYS_GetYValue(cmyk), FXSYS_GetKValue(cmyk),
- r, g, b);
- pDestPalette[i] = FXARGB_MAKE(0xff, r, g, b);
- }
- }
- }
+ if ((dest_format & 0xff) == 8) {
+ int pal_count = 1 << (src_format & 0xff);
+ uint8_t* gray_pal = FX_Alloc(uint8_t, pal_count);
+ if (pal_count == 2) {
+ gray_pal[0] = 0;
+ gray_pal[1] = 255;
} else {
- if ((dest_format & 0xff) == 8) {
- int pal_count = 1 << (src_format & 0xff);
- uint8_t* gray_pal = FX_Alloc(uint8_t, pal_count);
- if (pal_count == 2) {
- gray_pal[0] = 0;
- gray_pal[1] = 255;
- } else {
- for (int i = 0; i < pal_count; i++) {
- gray_pal[i] = i;
- }
- }
- pDestPalette = (FX_DWORD*)gray_pal;
- } else {
- int palsize = 1 << (src_format & 0xff);
- pDestPalette = FX_Alloc(FX_DWORD, palsize);
- if (palsize == 2) {
- pDestPalette[0] = isSrcCmyk ? 255 : 0xff000000;
- pDestPalette[1] = isSrcCmyk ? 0 : 0xffffffff;
- } else {
- for (int i = 0; i < palsize; i++) {
- pDestPalette[i] = isSrcCmyk ? FX_CCOLOR(i) : (i * 0x10101);
- }
- }
- if (isSrcCmyk != isDstCmyk) {
- for (int i = 0; i < palsize; i ++) {
- FX_CMYK cmyk = pDestPalette[i];
- uint8_t r, g, b;
- AdobeCMYK_to_sRGB1(FXSYS_GetCValue(cmyk), FXSYS_GetMValue(cmyk), FXSYS_GetYValue(cmyk), FXSYS_GetKValue(cmyk),
- r, g, b);
- pDestPalette[i] = FXARGB_MAKE(0xff, r, g, b);
- }
- }
- }
- }
- }
+ for (int i = 0; i < pal_count; i++) {
+ gray_pal[i] = i;
+ }
+ }
+ pDestPalette = (FX_DWORD*)gray_pal;
+ } else {
+ int palsize = 1 << (src_format & 0xff);
+ pDestPalette = FX_Alloc(FX_DWORD, palsize);
+ if (palsize == 2) {
+ pDestPalette[0] = isSrcCmyk ? 255 : 0xff000000;
+ pDestPalette[1] = isSrcCmyk ? 0 : 0xffffffff;
+ } else {
+ for (int i = 0; i < palsize; i++) {
+ pDestPalette[i] = isSrcCmyk ? FX_CCOLOR(i) : (i * 0x10101);
+ }
+ }
+ if (isSrcCmyk != isDstCmyk) {
+ for (int i = 0; i < palsize; i++) {
+ FX_CMYK cmyk = pDestPalette[i];
+ uint8_t r, g, b;
+ AdobeCMYK_to_sRGB1(FXSYS_GetCValue(cmyk), FXSYS_GetMValue(cmyk),
+ FXSYS_GetYValue(cmyk), FXSYS_GetKValue(cmyk), r,
+ g, b);
+ pDestPalette[i] = FXARGB_MAKE(0xff, r, g, b);
+ }
+ }
+ }
+ }
+ }
}
-CFX_ScanlineCompositor::CFX_ScanlineCompositor()
-{
- m_pSrcPalette = NULL;
- m_pCacheScanline = NULL;
- m_CacheSize = 0;
- m_bRgbByteOrder = FALSE;
- m_BlendType = FXDIB_BLEND_NORMAL;
+CFX_ScanlineCompositor::CFX_ScanlineCompositor() {
+ m_pSrcPalette = NULL;
+ m_pCacheScanline = NULL;
+ m_CacheSize = 0;
+ m_bRgbByteOrder = FALSE;
+ m_BlendType = FXDIB_BLEND_NORMAL;
}
-CFX_ScanlineCompositor::~CFX_ScanlineCompositor()
-{
- if (m_pSrcPalette) {
- FX_Free(m_pSrcPalette);
- }
- if (m_pCacheScanline) {
- FX_Free(m_pCacheScanline);
- }
+CFX_ScanlineCompositor::~CFX_ScanlineCompositor() {
+ if (m_pSrcPalette) {
+ FX_Free(m_pSrcPalette);
+ }
+ if (m_pCacheScanline) {
+ FX_Free(m_pCacheScanline);
+ }
}
-FX_BOOL CFX_ScanlineCompositor::Init(FXDIB_Format dest_format, FXDIB_Format src_format, int32_t width, FX_DWORD* pSrcPalette,
- FX_DWORD mask_color, int blend_type, FX_BOOL bClip, FX_BOOL bRgbByteOrder, int alpha_flag, void* pIccTransform)
-{
- m_SrcFormat = src_format;
- m_DestFormat = dest_format;
- m_BlendType = blend_type;
- m_bRgbByteOrder = bRgbByteOrder;
- ICodec_IccModule* pIccModule = NULL;
- if (CFX_GEModule::Get()->GetCodecModule()) {
- pIccModule = CFX_GEModule::Get()->GetCodecModule()->GetIccModule();
- }
- if (pIccModule == NULL) {
- pIccTransform = NULL;
- }
- m_pIccTransform = pIccTransform;
- if ((dest_format & 0xff) == 1) {
- return FALSE;
- }
- if (m_SrcFormat == FXDIB_1bppMask || m_SrcFormat == FXDIB_8bppMask) {
- return _ScanlineCompositor_InitSourceMask(dest_format, alpha_flag, mask_color,
- m_MaskAlpha, m_MaskRed, m_MaskGreen, m_MaskBlue, m_MaskBlack,
- pIccModule, pIccTransform);
- }
- if (pIccTransform == NULL && (~src_format & 0x0400) && (dest_format & 0x0400)) {
- return FALSE;
- }
- if ((m_SrcFormat & 0xff) <= 8) {
- if (dest_format == FXDIB_8bppMask) {
- return TRUE;
- }
- _ScanlineCompositor_InitSourcePalette(src_format, dest_format, m_pSrcPalette, pSrcPalette,
- pIccModule, pIccTransform);
- m_Transparency = (dest_format == FXDIB_Argb ? 1 : 0)
- + (dest_format & 0x0200 ? 2 : 0)
- + (dest_format & 0x0400 ? 4 : 0)
- + ((src_format & 0xff) == 1 ? 8 : 0);
- return TRUE;
- }
- m_Transparency = (src_format & 0x0200 ? 0 : 1)
- + (dest_format & 0x0200 ? 0 : 2)
- + (blend_type == FXDIB_BLEND_NORMAL ? 4 : 0)
- + (bClip ? 8 : 0)
- + (src_format & 0x0400 ? 16 : 0)
- + (dest_format & 0x0400 ? 32 : 0)
- + (pIccTransform ? 64 : 0);
+FX_BOOL CFX_ScanlineCompositor::Init(FXDIB_Format dest_format,
+ FXDIB_Format src_format,
+ int32_t width,
+ FX_DWORD* pSrcPalette,
+ FX_DWORD mask_color,
+ int blend_type,
+ FX_BOOL bClip,
+ FX_BOOL bRgbByteOrder,
+ int alpha_flag,
+ void* pIccTransform) {
+ m_SrcFormat = src_format;
+ m_DestFormat = dest_format;
+ m_BlendType = blend_type;
+ m_bRgbByteOrder = bRgbByteOrder;
+ ICodec_IccModule* pIccModule = NULL;
+ if (CFX_GEModule::Get()->GetCodecModule()) {
+ pIccModule = CFX_GEModule::Get()->GetCodecModule()->GetIccModule();
+ }
+ if (pIccModule == NULL) {
+ pIccTransform = NULL;
+ }
+ m_pIccTransform = pIccTransform;
+ if ((dest_format & 0xff) == 1) {
+ return FALSE;
+ }
+ if (m_SrcFormat == FXDIB_1bppMask || m_SrcFormat == FXDIB_8bppMask) {
+ return _ScanlineCompositor_InitSourceMask(
+ dest_format, alpha_flag, mask_color, m_MaskAlpha, m_MaskRed,
+ m_MaskGreen, m_MaskBlue, m_MaskBlack, pIccModule, pIccTransform);
+ }
+ if (pIccTransform == NULL && (~src_format & 0x0400) &&
+ (dest_format & 0x0400)) {
+ return FALSE;
+ }
+ if ((m_SrcFormat & 0xff) <= 8) {
+ if (dest_format == FXDIB_8bppMask) {
+ return TRUE;
+ }
+ _ScanlineCompositor_InitSourcePalette(src_format, dest_format,
+ m_pSrcPalette, pSrcPalette,
+ pIccModule, pIccTransform);
+ m_Transparency =
+ (dest_format == FXDIB_Argb ? 1 : 0) + (dest_format & 0x0200 ? 2 : 0) +
+ (dest_format & 0x0400 ? 4 : 0) + ((src_format & 0xff) == 1 ? 8 : 0);
return TRUE;
+ }
+ m_Transparency = (src_format & 0x0200 ? 0 : 1) +
+ (dest_format & 0x0200 ? 0 : 2) +
+ (blend_type == FXDIB_BLEND_NORMAL ? 4 : 0) +
+ (bClip ? 8 : 0) + (src_format & 0x0400 ? 16 : 0) +
+ (dest_format & 0x0400 ? 32 : 0) + (pIccTransform ? 64 : 0);
+ return TRUE;
}
-void CFX_ScanlineCompositor::CompositeRgbBitmapLine(uint8_t* dest_scan, const uint8_t* src_scan, int width, const uint8_t* clip_scan,
- const uint8_t* src_extra_alpha, uint8_t* dst_extra_alpha)
-{
- int src_Bpp = (m_SrcFormat & 0xff) >> 3;
- int dest_Bpp = (m_DestFormat & 0xff) >> 3;
- if (m_bRgbByteOrder) {
- switch (m_Transparency) {
- case 0:
- case 4:
- case 8:
- case 12:
- _CompositeRow_Argb2Argb_RgbByteOrder(dest_scan, src_scan, width, m_BlendType, clip_scan);
- break;
- case 1:
- _CompositeRow_Rgb2Argb_Blend_NoClip_RgbByteOrder(dest_scan, src_scan, width, m_BlendType, src_Bpp);
- break;
- case 2:
- case 10:
- _CompositeRow_Argb2Rgb_Blend_RgbByteOrder(dest_scan, src_scan, width, m_BlendType, dest_Bpp, clip_scan);
- break;
- case 3:
- _CompositeRow_Rgb2Rgb_Blend_NoClip_RgbByteOrder(dest_scan, src_scan, width, m_BlendType, dest_Bpp, src_Bpp);
- break;
- case 5:
- _CompositeRow_Rgb2Argb_NoBlend_NoClip_RgbByteOrder(dest_scan, src_scan, width, src_Bpp);
- break;
- case 6:
- case 14:
- _CompositeRow_Argb2Rgb_NoBlend_RgbByteOrder(dest_scan, src_scan, width, dest_Bpp, clip_scan);
- break;
- case 7:
- _CompositeRow_Rgb2Rgb_NoBlend_NoClip_RgbByteOrder(dest_scan, src_scan, width, dest_Bpp, src_Bpp);
- break;
- case 9:
- _CompositeRow_Rgb2Argb_Blend_Clip_RgbByteOrder(dest_scan, src_scan, width, m_BlendType, src_Bpp, clip_scan);
- break;
- case 11:
- _CompositeRow_Rgb2Rgb_Blend_Clip_RgbByteOrder(dest_scan, src_scan, width, m_BlendType, dest_Bpp, src_Bpp, clip_scan);
- break;
- case 13:
- _CompositeRow_Rgb2Argb_NoBlend_Clip_RgbByteOrder(dest_scan, src_scan, width, src_Bpp, clip_scan);
- break;
- case 15:
- _CompositeRow_Rgb2Rgb_NoBlend_Clip_RgbByteOrder(dest_scan, src_scan, width, dest_Bpp, src_Bpp, clip_scan);
- break;
- }
- return;
- }
- if (m_DestFormat == FXDIB_8bppMask) {
- if (m_SrcFormat & 0x0200) {
- if (m_SrcFormat == FXDIB_Argb) {
- _CompositeRow_Argb2Mask(dest_scan, src_scan, width, clip_scan);
- } else {
- _CompositeRow_Rgba2Mask(dest_scan, src_extra_alpha, width, clip_scan);
- }
- } else {
- _CompositeRow_Rgb2Mask(dest_scan, src_scan, width, clip_scan);
- }
- } else if ((m_DestFormat & 0xff) == 8) {
- if (m_DestFormat & 0x0400) {
- for (int i = 0; i < width; i ++) {
- *dest_scan = ~*dest_scan;
- dest_scan++;
- }
- }
- if (m_SrcFormat & 0x0200) {
- if (m_DestFormat & 0x0200) {
- _CompositeRow_Argb2Graya(dest_scan, src_scan, width, m_BlendType, clip_scan, src_extra_alpha, dst_extra_alpha, m_pIccTransform);
- } else {
- _CompositeRow_Argb2Gray(dest_scan, src_scan, width, m_BlendType, clip_scan, src_extra_alpha, m_pIccTransform);
- }
- } else {
- if (m_DestFormat & 0x0200) {
- _CompositeRow_Rgb2Graya(dest_scan, src_scan, src_Bpp, width, m_BlendType, clip_scan, dst_extra_alpha, m_pIccTransform);
- } else {
- _CompositeRow_Rgb2Gray(dest_scan, src_scan, src_Bpp, width, m_BlendType, clip_scan, m_pIccTransform);
- }
- }
- if (m_DestFormat & 0x0400) {
- for (int i = 0; i < width; i ++) {
- *dest_scan = ~*dest_scan;
- dest_scan++;
- }
- }
+void CFX_ScanlineCompositor::CompositeRgbBitmapLine(
+ uint8_t* dest_scan,
+ const uint8_t* src_scan,
+ int width,
+ const uint8_t* clip_scan,
+ const uint8_t* src_extra_alpha,
+ uint8_t* dst_extra_alpha) {
+ int src_Bpp = (m_SrcFormat & 0xff) >> 3;
+ int dest_Bpp = (m_DestFormat & 0xff) >> 3;
+ if (m_bRgbByteOrder) {
+ switch (m_Transparency) {
+ case 0:
+ case 4:
+ case 8:
+ case 12:
+ _CompositeRow_Argb2Argb_RgbByteOrder(dest_scan, src_scan, width,
+ m_BlendType, clip_scan);
+ break;
+ case 1:
+ _CompositeRow_Rgb2Argb_Blend_NoClip_RgbByteOrder(
+ dest_scan, src_scan, width, m_BlendType, src_Bpp);
+ break;
+ case 2:
+ case 10:
+ _CompositeRow_Argb2Rgb_Blend_RgbByteOrder(
+ dest_scan, src_scan, width, m_BlendType, dest_Bpp, clip_scan);
+ break;
+ case 3:
+ _CompositeRow_Rgb2Rgb_Blend_NoClip_RgbByteOrder(
+ dest_scan, src_scan, width, m_BlendType, dest_Bpp, src_Bpp);
+ break;
+ case 5:
+ _CompositeRow_Rgb2Argb_NoBlend_NoClip_RgbByteOrder(dest_scan, src_scan,
+ width, src_Bpp);
+ break;
+ case 6:
+ case 14:
+ _CompositeRow_Argb2Rgb_NoBlend_RgbByteOrder(dest_scan, src_scan, width,
+ dest_Bpp, clip_scan);
+ break;
+ case 7:
+ _CompositeRow_Rgb2Rgb_NoBlend_NoClip_RgbByteOrder(
+ dest_scan, src_scan, width, dest_Bpp, src_Bpp);
+ break;
+ case 9:
+ _CompositeRow_Rgb2Argb_Blend_Clip_RgbByteOrder(
+ dest_scan, src_scan, width, m_BlendType, src_Bpp, clip_scan);
+ break;
+ case 11:
+ _CompositeRow_Rgb2Rgb_Blend_Clip_RgbByteOrder(
+ dest_scan, src_scan, width, m_BlendType, dest_Bpp, src_Bpp,
+ clip_scan);
+ break;
+ case 13:
+ _CompositeRow_Rgb2Argb_NoBlend_Clip_RgbByteOrder(
+ dest_scan, src_scan, width, src_Bpp, clip_scan);
+ break;
+ case 15:
+ _CompositeRow_Rgb2Rgb_NoBlend_Clip_RgbByteOrder(
+ dest_scan, src_scan, width, dest_Bpp, src_Bpp, clip_scan);
+ break;
+ }
+ return;
+ }
+ if (m_DestFormat == FXDIB_8bppMask) {
+ if (m_SrcFormat & 0x0200) {
+ if (m_SrcFormat == FXDIB_Argb) {
+ _CompositeRow_Argb2Mask(dest_scan, src_scan, width, clip_scan);
+ } else {
+ _CompositeRow_Rgba2Mask(dest_scan, src_extra_alpha, width, clip_scan);
+ }
} else {
- int dest_Size = width * dest_Bpp + 4;
- if (dest_Size > m_CacheSize) {
- m_pCacheScanline = FX_Realloc(uint8_t, m_pCacheScanline, dest_Size);
- if (!m_pCacheScanline) {
- return;
- }
- m_CacheSize = dest_Size;
- }
- switch (m_Transparency) {
- case 0:
- case 4:
- case 8:
- case 4+8: {
- _CompositeRow_Argb2Argb(dest_scan, src_scan, width, m_BlendType, clip_scan,
- dst_extra_alpha, src_extra_alpha);
- }
- break;
- case 64:
- case 4+64:
- case 8+64:
- case 4+8+64: {
- _CompositeRow_Argb2Argb_Transform(dest_scan, src_scan, width, m_BlendType, clip_scan,
- dst_extra_alpha, src_extra_alpha, m_pCacheScanline, m_pIccTransform);
- }
- break;
- case 1:
- _CompositeRow_Rgb2Argb_Blend_NoClip(dest_scan, src_scan, width, m_BlendType, src_Bpp,
- dst_extra_alpha);
- break;
- case 1+64:
- _CompositeRow_Rgb2Argb_Blend_NoClip_Transform(dest_scan, src_scan, width, m_BlendType, src_Bpp,
- dst_extra_alpha, m_pCacheScanline, m_pIccTransform);
- break;
- case 1+8:
- _CompositeRow_Rgb2Argb_Blend_Clip(dest_scan, src_scan, width, m_BlendType, src_Bpp, clip_scan,
- dst_extra_alpha);
- break;
- case 1+8+64:
- _CompositeRow_Rgb2Argb_Blend_Clip_Transform(dest_scan, src_scan, width, m_BlendType, src_Bpp, clip_scan,
- dst_extra_alpha, m_pCacheScanline, m_pIccTransform);
- break;
- case 1+4:
- _CompositeRow_Rgb2Argb_NoBlend_NoClip(dest_scan, src_scan, width, src_Bpp,
- dst_extra_alpha);
- break;
- case 1+4+64:
- _CompositeRow_Rgb2Argb_NoBlend_NoClip_Transform(dest_scan, src_scan, width, src_Bpp,
- dst_extra_alpha, m_pCacheScanline, m_pIccTransform);
- break;
- case 1+4+8:
- _CompositeRow_Rgb2Argb_NoBlend_Clip(dest_scan, src_scan, width, src_Bpp, clip_scan,
- dst_extra_alpha);
- break;
- case 1+4+8+64:
- _CompositeRow_Rgb2Argb_NoBlend_Clip_Transform(dest_scan, src_scan, width, src_Bpp, clip_scan,
- dst_extra_alpha, m_pCacheScanline, m_pIccTransform);
- break;
- case 2:
- case 2+8:
- _CompositeRow_Argb2Rgb_Blend(dest_scan, src_scan, width, m_BlendType, dest_Bpp, clip_scan,
- src_extra_alpha);
- break;
- case 2+64:
- case 2+8+64:
- _CompositeRow_Argb2Rgb_Blend_Transform(dest_scan, src_scan, width, m_BlendType, dest_Bpp, clip_scan,
- src_extra_alpha, m_pCacheScanline, m_pIccTransform);
- break;
- case 2+4:
- case 2+4+8:
- _CompositeRow_Argb2Rgb_NoBlend(dest_scan, src_scan, width, dest_Bpp, clip_scan,
- src_extra_alpha);
- break;
- case 2+4+64:
- case 2+4+8+64:
- _CompositeRow_Argb2Rgb_NoBlend_Transform(dest_scan, src_scan, width, dest_Bpp, clip_scan,
- src_extra_alpha, m_pCacheScanline, m_pIccTransform);
- break;
- case 1+2:
- _CompositeRow_Rgb2Rgb_Blend_NoClip(dest_scan, src_scan, width, m_BlendType, dest_Bpp, src_Bpp);
- break;
- case 1+2+64:
- _CompositeRow_Rgb2Rgb_Blend_NoClip_Transform(dest_scan, src_scan, width, m_BlendType, dest_Bpp, src_Bpp,
- m_pCacheScanline, m_pIccTransform);
- break;
- case 1+2+8:
- _CompositeRow_Rgb2Rgb_Blend_Clip(dest_scan, src_scan, width, m_BlendType, dest_Bpp, src_Bpp, clip_scan);
- break;
- case 1+2+8+64:
- _CompositeRow_Rgb2Rgb_Blend_Clip_Transform(dest_scan, src_scan, width, m_BlendType, dest_Bpp, src_Bpp, clip_scan,
- m_pCacheScanline, m_pIccTransform);
- break;
- case 1+2+4:
- _CompositeRow_Rgb2Rgb_NoBlend_NoClip(dest_scan, src_scan, width, dest_Bpp, src_Bpp);
- break;
- case 1+2+4+64:
- _CompositeRow_Rgb2Rgb_NoBlend_NoClip_Transform(dest_scan, src_scan, width, dest_Bpp, src_Bpp,
- m_pCacheScanline, m_pIccTransform);
- break;
- case 1+2+4+8:
- _CompositeRow_Rgb2Rgb_NoBlend_Clip(dest_scan, src_scan, width, dest_Bpp, src_Bpp, clip_scan);
- break;
- case 1+2+4+8+64:
- _CompositeRow_Rgb2Rgb_NoBlend_Clip_Transform(dest_scan, src_scan, width, dest_Bpp, src_Bpp, clip_scan,
- m_pCacheScanline, m_pIccTransform);
- break;
- }
- }
+ _CompositeRow_Rgb2Mask(dest_scan, src_scan, width, clip_scan);
+ }
+ } else if ((m_DestFormat & 0xff) == 8) {
+ if (m_DestFormat & 0x0400) {
+ for (int i = 0; i < width; i++) {
+ *dest_scan = ~*dest_scan;
+ dest_scan++;
+ }
+ }
+ if (m_SrcFormat & 0x0200) {
+ if (m_DestFormat & 0x0200) {
+ _CompositeRow_Argb2Graya(dest_scan, src_scan, width, m_BlendType,
+ clip_scan, src_extra_alpha, dst_extra_alpha,
+ m_pIccTransform);
+ } else {
+ _CompositeRow_Argb2Gray(dest_scan, src_scan, width, m_BlendType,
+ clip_scan, src_extra_alpha, m_pIccTransform);
+ }
+ } else {
+ if (m_DestFormat & 0x0200) {
+ _CompositeRow_Rgb2Graya(dest_scan, src_scan, src_Bpp, width,
+ m_BlendType, clip_scan, dst_extra_alpha,
+ m_pIccTransform);
+ } else {
+ _CompositeRow_Rgb2Gray(dest_scan, src_scan, src_Bpp, width, m_BlendType,
+ clip_scan, m_pIccTransform);
+ }
+ }
+ if (m_DestFormat & 0x0400) {
+ for (int i = 0; i < width; i++) {
+ *dest_scan = ~*dest_scan;
+ dest_scan++;
+ }
+ }
+ } else {
+ int dest_Size = width * dest_Bpp + 4;
+ if (dest_Size > m_CacheSize) {
+ m_pCacheScanline = FX_Realloc(uint8_t, m_pCacheScanline, dest_Size);
+ if (!m_pCacheScanline) {
+ return;
+ }
+ m_CacheSize = dest_Size;
+ }
+ switch (m_Transparency) {
+ case 0:
+ case 4:
+ case 8:
+ case 4 + 8: {
+ _CompositeRow_Argb2Argb(dest_scan, src_scan, width, m_BlendType,
+ clip_scan, dst_extra_alpha, src_extra_alpha);
+ } break;
+ case 64:
+ case 4 + 64:
+ case 8 + 64:
+ case 4 + 8 + 64: {
+ _CompositeRow_Argb2Argb_Transform(
+ dest_scan, src_scan, width, m_BlendType, clip_scan, dst_extra_alpha,
+ src_extra_alpha, m_pCacheScanline, m_pIccTransform);
+ } break;
+ case 1:
+ _CompositeRow_Rgb2Argb_Blend_NoClip(
+ dest_scan, src_scan, width, m_BlendType, src_Bpp, dst_extra_alpha);
+ break;
+ case 1 + 64:
+ _CompositeRow_Rgb2Argb_Blend_NoClip_Transform(
+ dest_scan, src_scan, width, m_BlendType, src_Bpp, dst_extra_alpha,
+ m_pCacheScanline, m_pIccTransform);
+ break;
+ case 1 + 8:
+ _CompositeRow_Rgb2Argb_Blend_Clip(dest_scan, src_scan, width,
+ m_BlendType, src_Bpp, clip_scan,
+ dst_extra_alpha);
+ break;
+ case 1 + 8 + 64:
+ _CompositeRow_Rgb2Argb_Blend_Clip_Transform(
+ dest_scan, src_scan, width, m_BlendType, src_Bpp, clip_scan,
+ dst_extra_alpha, m_pCacheScanline, m_pIccTransform);
+ break;
+ case 1 + 4:
+ _CompositeRow_Rgb2Argb_NoBlend_NoClip(dest_scan, src_scan, width,
+ src_Bpp, dst_extra_alpha);
+ break;
+ case 1 + 4 + 64:
+ _CompositeRow_Rgb2Argb_NoBlend_NoClip_Transform(
+ dest_scan, src_scan, width, src_Bpp, dst_extra_alpha,
+ m_pCacheScanline, m_pIccTransform);
+ break;
+ case 1 + 4 + 8:
+ _CompositeRow_Rgb2Argb_NoBlend_Clip(dest_scan, src_scan, width, src_Bpp,
+ clip_scan, dst_extra_alpha);
+ break;
+ case 1 + 4 + 8 + 64:
+ _CompositeRow_Rgb2Argb_NoBlend_Clip_Transform(
+ dest_scan, src_scan, width, src_Bpp, clip_scan, dst_extra_alpha,
+ m_pCacheScanline, m_pIccTransform);
+ break;
+ case 2:
+ case 2 + 8:
+ _CompositeRow_Argb2Rgb_Blend(dest_scan, src_scan, width, m_BlendType,
+ dest_Bpp, clip_scan, src_extra_alpha);
+ break;
+ case 2 + 64:
+ case 2 + 8 + 64:
+ _CompositeRow_Argb2Rgb_Blend_Transform(
+ dest_scan, src_scan, width, m_BlendType, dest_Bpp, clip_scan,
+ src_extra_alpha, m_pCacheScanline, m_pIccTransform);
+ break;
+ case 2 + 4:
+ case 2 + 4 + 8:
+ _CompositeRow_Argb2Rgb_NoBlend(dest_scan, src_scan, width, dest_Bpp,
+ clip_scan, src_extra_alpha);
+ break;
+ case 2 + 4 + 64:
+ case 2 + 4 + 8 + 64:
+ _CompositeRow_Argb2Rgb_NoBlend_Transform(
+ dest_scan, src_scan, width, dest_Bpp, clip_scan, src_extra_alpha,
+ m_pCacheScanline, m_pIccTransform);
+ break;
+ case 1 + 2:
+ _CompositeRow_Rgb2Rgb_Blend_NoClip(dest_scan, src_scan, width,
+ m_BlendType, dest_Bpp, src_Bpp);
+ break;
+ case 1 + 2 + 64:
+ _CompositeRow_Rgb2Rgb_Blend_NoClip_Transform(
+ dest_scan, src_scan, width, m_BlendType, dest_Bpp, src_Bpp,
+ m_pCacheScanline, m_pIccTransform);
+ break;
+ case 1 + 2 + 8:
+ _CompositeRow_Rgb2Rgb_Blend_Clip(dest_scan, src_scan, width,
+ m_BlendType, dest_Bpp, src_Bpp,
+ clip_scan);
+ break;
+ case 1 + 2 + 8 + 64:
+ _CompositeRow_Rgb2Rgb_Blend_Clip_Transform(
+ dest_scan, src_scan, width, m_BlendType, dest_Bpp, src_Bpp,
+ clip_scan, m_pCacheScanline, m_pIccTransform);
+ break;
+ case 1 + 2 + 4:
+ _CompositeRow_Rgb2Rgb_NoBlend_NoClip(dest_scan, src_scan, width,
+ dest_Bpp, src_Bpp);
+ break;
+ case 1 + 2 + 4 + 64:
+ _CompositeRow_Rgb2Rgb_NoBlend_NoClip_Transform(
+ dest_scan, src_scan, width, dest_Bpp, src_Bpp, m_pCacheScanline,
+ m_pIccTransform);
+ break;
+ case 1 + 2 + 4 + 8:
+ _CompositeRow_Rgb2Rgb_NoBlend_Clip(dest_scan, src_scan, width, dest_Bpp,
+ src_Bpp, clip_scan);
+ break;
+ case 1 + 2 + 4 + 8 + 64:
+ _CompositeRow_Rgb2Rgb_NoBlend_Clip_Transform(
+ dest_scan, src_scan, width, dest_Bpp, src_Bpp, clip_scan,
+ m_pCacheScanline, m_pIccTransform);
+ break;
+ }
+ }
}
-void CFX_ScanlineCompositor::CompositePalBitmapLine(uint8_t* dest_scan, const uint8_t* src_scan, int src_left, int width, const uint8_t* clip_scan,
- const uint8_t* src_extra_alpha, uint8_t* dst_extra_alpha)
-{
- if (m_bRgbByteOrder) {
- if (m_SrcFormat == FXDIB_1bppRgb) {
- if (m_DestFormat == FXDIB_8bppRgb) {
- return;
- }
- if(m_DestFormat == FXDIB_Argb) {
- _CompositeRow_1bppRgb2Argb_NoBlend_RgbByteOrder(dest_scan, src_scan, src_left, width, m_pSrcPalette, clip_scan);
- } else {
- _CompositeRow_1bppRgb2Rgb_NoBlend_RgbByteOrder(dest_scan, src_scan, src_left, m_pSrcPalette, width, (m_DestFormat & 0xff) >> 3, clip_scan);
- }
- } else {
- if (m_DestFormat == FXDIB_8bppRgb) {
- return;
- }
- if (m_DestFormat == FXDIB_Argb) {
- _CompositeRow_8bppRgb2Argb_NoBlend_RgbByteOrder(dest_scan, src_scan, width, m_pSrcPalette, clip_scan);
- } else {
- _CompositeRow_8bppRgb2Rgb_NoBlend_RgbByteOrder(dest_scan, src_scan, m_pSrcPalette, width, (m_DestFormat & 0xff) >> 3, clip_scan);
- }
- }
+void CFX_ScanlineCompositor::CompositePalBitmapLine(
+ uint8_t* dest_scan,
+ const uint8_t* src_scan,
+ int src_left,
+ int width,
+ const uint8_t* clip_scan,
+ const uint8_t* src_extra_alpha,
+ uint8_t* dst_extra_alpha) {
+ if (m_bRgbByteOrder) {
+ if (m_SrcFormat == FXDIB_1bppRgb) {
+ if (m_DestFormat == FXDIB_8bppRgb) {
return;
- }
- if (m_DestFormat == FXDIB_8bppMask) {
- _CompositeRow_Rgb2Mask(dest_scan, src_scan, width, clip_scan);
+ }
+ if (m_DestFormat == FXDIB_Argb) {
+ _CompositeRow_1bppRgb2Argb_NoBlend_RgbByteOrder(
+ dest_scan, src_scan, src_left, width, m_pSrcPalette, clip_scan);
+ } else {
+ _CompositeRow_1bppRgb2Rgb_NoBlend_RgbByteOrder(
+ dest_scan, src_scan, src_left, m_pSrcPalette, width,
+ (m_DestFormat & 0xff) >> 3, clip_scan);
+ }
+ } else {
+ if (m_DestFormat == FXDIB_8bppRgb) {
return;
- }
- if ((m_DestFormat & 0xff) == 8) {
- if (m_Transparency & 8) {
- if (m_DestFormat & 0x0200) {
- _CompositeRow_1bppPal2Graya(dest_scan, src_scan, src_left, (const uint8_t*)m_pSrcPalette, width, m_BlendType, clip_scan, dst_extra_alpha);
- } else {
- _CompositeRow_1bppPal2Gray(dest_scan, src_scan, src_left, (const uint8_t*)m_pSrcPalette, width, m_BlendType, clip_scan);
- }
- } else {
- if (m_DestFormat & 0x0200)
- _CompositeRow_8bppPal2Graya(dest_scan, src_scan, (const uint8_t*)m_pSrcPalette, width, m_BlendType, clip_scan,
- dst_extra_alpha, src_extra_alpha);
- else
- _CompositeRow_8bppPal2Gray(dest_scan, src_scan, (const uint8_t*)m_pSrcPalette, width, m_BlendType, clip_scan,
- src_extra_alpha);
- }
+ }
+ if (m_DestFormat == FXDIB_Argb) {
+ _CompositeRow_8bppRgb2Argb_NoBlend_RgbByteOrder(
+ dest_scan, src_scan, width, m_pSrcPalette, clip_scan);
+ } else {
+ _CompositeRow_8bppRgb2Rgb_NoBlend_RgbByteOrder(
+ dest_scan, src_scan, m_pSrcPalette, width,
+ (m_DestFormat & 0xff) >> 3, clip_scan);
+ }
+ }
+ return;
+ }
+ if (m_DestFormat == FXDIB_8bppMask) {
+ _CompositeRow_Rgb2Mask(dest_scan, src_scan, width, clip_scan);
+ return;
+ }
+ if ((m_DestFormat & 0xff) == 8) {
+ if (m_Transparency & 8) {
+ if (m_DestFormat & 0x0200) {
+ _CompositeRow_1bppPal2Graya(dest_scan, src_scan, src_left,
+ (const uint8_t*)m_pSrcPalette, width,
+ m_BlendType, clip_scan, dst_extra_alpha);
+ } else {
+ _CompositeRow_1bppPal2Gray(dest_scan, src_scan, src_left,
+ (const uint8_t*)m_pSrcPalette, width,
+ m_BlendType, clip_scan);
+ }
} else {
- switch (m_Transparency) {
- case 1+2:
- _CompositeRow_8bppRgb2Argb_NoBlend(dest_scan, src_scan, width, m_pSrcPalette, clip_scan,
- src_extra_alpha);
- break;
- case 1+2+8:
- _CompositeRow_1bppRgb2Argb_NoBlend(dest_scan, src_scan, src_left, width, m_pSrcPalette, clip_scan);
- break;
- case 0:
- _CompositeRow_8bppRgb2Rgb_NoBlend(dest_scan, src_scan, m_pSrcPalette, width, (m_DestFormat & 0xff) >> 3, clip_scan,
- src_extra_alpha);
- break;
- case 0+8:
- _CompositeRow_1bppRgb2Rgb_NoBlend(dest_scan, src_scan, src_left, m_pSrcPalette, width, (m_DestFormat & 0xff) >> 3, clip_scan);
- break;
- case 0+2:
- _CompositeRow_8bppRgb2Rgb_NoBlend(dest_scan, src_scan, m_pSrcPalette, width, (m_DestFormat & 0xff) >> 3, clip_scan,
- src_extra_alpha);
- break;
- case 0+2+8:
- _CompositeRow_1bppRgb2Rgba_NoBlend(dest_scan, src_scan, src_left, width, m_pSrcPalette, clip_scan,
- dst_extra_alpha);
- break;
- break;
- }
- }
+ if (m_DestFormat & 0x0200)
+ _CompositeRow_8bppPal2Graya(
+ dest_scan, src_scan, (const uint8_t*)m_pSrcPalette, width,
+ m_BlendType, clip_scan, dst_extra_alpha, src_extra_alpha);
+ else
+ _CompositeRow_8bppPal2Gray(dest_scan, src_scan,
+ (const uint8_t*)m_pSrcPalette, width,
+ m_BlendType, clip_scan, src_extra_alpha);
+ }
+ } else {
+ switch (m_Transparency) {
+ case 1 + 2:
+ _CompositeRow_8bppRgb2Argb_NoBlend(dest_scan, src_scan, width,
+ m_pSrcPalette, clip_scan,
+ src_extra_alpha);
+ break;
+ case 1 + 2 + 8:
+ _CompositeRow_1bppRgb2Argb_NoBlend(dest_scan, src_scan, src_left, width,
+ m_pSrcPalette, clip_scan);
+ break;
+ case 0:
+ _CompositeRow_8bppRgb2Rgb_NoBlend(dest_scan, src_scan, m_pSrcPalette,
+ width, (m_DestFormat & 0xff) >> 3,
+ clip_scan, src_extra_alpha);
+ break;
+ case 0 + 8:
+ _CompositeRow_1bppRgb2Rgb_NoBlend(
+ dest_scan, src_scan, src_left, m_pSrcPalette, width,
+ (m_DestFormat & 0xff) >> 3, clip_scan);
+ break;
+ case 0 + 2:
+ _CompositeRow_8bppRgb2Rgb_NoBlend(dest_scan, src_scan, m_pSrcPalette,
+ width, (m_DestFormat & 0xff) >> 3,
+ clip_scan, src_extra_alpha);
+ break;
+ case 0 + 2 + 8:
+ _CompositeRow_1bppRgb2Rgba_NoBlend(dest_scan, src_scan, src_left, width,
+ m_pSrcPalette, clip_scan,
+ dst_extra_alpha);
+ break;
+ break;
+ }
+ }
}
-void CFX_ScanlineCompositor::CompositeByteMaskLine(uint8_t* dest_scan, const uint8_t* src_scan, int width, const uint8_t* clip_scan,
- uint8_t* dst_extra_alpha)
-{
- if (m_DestFormat == FXDIB_8bppMask) {
- _CompositeRow_ByteMask2Mask(dest_scan, src_scan, m_MaskAlpha, width, clip_scan);
- } else if ((m_DestFormat & 0xff) == 8) {
- if (m_DestFormat & 0x0200) {
- _CompositeRow_ByteMask2Graya(dest_scan, src_scan, m_MaskAlpha, m_MaskRed, width, clip_scan, dst_extra_alpha);
- } else {
- _CompositeRow_ByteMask2Gray(dest_scan, src_scan, m_MaskAlpha, m_MaskRed, width, clip_scan);
- }
- } else if (m_bRgbByteOrder) {
- if (m_DestFormat == FXDIB_Argb)
- _CompositeRow_ByteMask2Argb_RgbByteOrder(dest_scan, src_scan, m_MaskAlpha, m_MaskRed, m_MaskGreen, m_MaskBlue,
- width, m_BlendType, clip_scan);
- else
- _CompositeRow_ByteMask2Rgb_RgbByteOrder(dest_scan, src_scan, m_MaskAlpha, m_MaskRed, m_MaskGreen, m_MaskBlue,
- width, m_BlendType, (m_DestFormat & 0xff) >> 3, clip_scan);
- return;
- } else if (m_DestFormat == FXDIB_Argb)
- _CompositeRow_ByteMask2Argb(dest_scan, src_scan, m_MaskAlpha, m_MaskRed, m_MaskGreen, m_MaskBlue,
- width, m_BlendType, clip_scan);
- else if (m_DestFormat == FXDIB_Rgb || m_DestFormat == FXDIB_Rgb32)
- _CompositeRow_ByteMask2Rgb(dest_scan, src_scan, m_MaskAlpha, m_MaskRed, m_MaskGreen, m_MaskBlue,
- width, m_BlendType, (m_DestFormat & 0xff) >> 3, clip_scan);
- else if (m_DestFormat == FXDIB_Rgba)
- _CompositeRow_ByteMask2Rgba(dest_scan, src_scan, m_MaskAlpha, m_MaskRed, m_MaskGreen, m_MaskBlue,
- width, m_BlendType, clip_scan, dst_extra_alpha);
+void CFX_ScanlineCompositor::CompositeByteMaskLine(uint8_t* dest_scan,
+ const uint8_t* src_scan,
+ int width,
+ const uint8_t* clip_scan,
+ uint8_t* dst_extra_alpha) {
+ if (m_DestFormat == FXDIB_8bppMask) {
+ _CompositeRow_ByteMask2Mask(dest_scan, src_scan, m_MaskAlpha, width,
+ clip_scan);
+ } else if ((m_DestFormat & 0xff) == 8) {
+ if (m_DestFormat & 0x0200) {
+ _CompositeRow_ByteMask2Graya(dest_scan, src_scan, m_MaskAlpha, m_MaskRed,
+ width, clip_scan, dst_extra_alpha);
+ } else {
+ _CompositeRow_ByteMask2Gray(dest_scan, src_scan, m_MaskAlpha, m_MaskRed,
+ width, clip_scan);
+ }
+ } else if (m_bRgbByteOrder) {
+ if (m_DestFormat == FXDIB_Argb)
+ _CompositeRow_ByteMask2Argb_RgbByteOrder(
+ dest_scan, src_scan, m_MaskAlpha, m_MaskRed, m_MaskGreen, m_MaskBlue,
+ width, m_BlendType, clip_scan);
+ else
+ _CompositeRow_ByteMask2Rgb_RgbByteOrder(
+ dest_scan, src_scan, m_MaskAlpha, m_MaskRed, m_MaskGreen, m_MaskBlue,
+ width, m_BlendType, (m_DestFormat & 0xff) >> 3, clip_scan);
+ return;
+ } else if (m_DestFormat == FXDIB_Argb)
+ _CompositeRow_ByteMask2Argb(dest_scan, src_scan, m_MaskAlpha, m_MaskRed,
+ m_MaskGreen, m_MaskBlue, width, m_BlendType,
+ clip_scan);
+ else if (m_DestFormat == FXDIB_Rgb || m_DestFormat == FXDIB_Rgb32)
+ _CompositeRow_ByteMask2Rgb(dest_scan, src_scan, m_MaskAlpha, m_MaskRed,
+ m_MaskGreen, m_MaskBlue, width, m_BlendType,
+ (m_DestFormat & 0xff) >> 3, clip_scan);
+ else if (m_DestFormat == FXDIB_Rgba)
+ _CompositeRow_ByteMask2Rgba(dest_scan, src_scan, m_MaskAlpha, m_MaskRed,
+ m_MaskGreen, m_MaskBlue, width, m_BlendType,
+ clip_scan, dst_extra_alpha);
}
-void CFX_ScanlineCompositor::CompositeBitMaskLine(uint8_t* dest_scan, const uint8_t* src_scan, int src_left, int width, const uint8_t* clip_scan,
- uint8_t* dst_extra_alpha)
-{
- if (m_DestFormat == FXDIB_8bppMask) {
- _CompositeRow_BitMask2Mask(dest_scan, src_scan, m_MaskAlpha, src_left, width, clip_scan);
- } else if ((m_DestFormat & 0xff) == 8) {
- if (m_DestFormat & 0x0200)
- _CompositeRow_BitMask2Graya(dest_scan, src_scan, m_MaskAlpha, m_MaskRed, src_left, width, clip_scan,
- dst_extra_alpha);
- else {
- _CompositeRow_BitMask2Gray(dest_scan, src_scan, m_MaskAlpha, m_MaskRed, src_left, width, clip_scan);
- }
- } else if (m_bRgbByteOrder) {
- if (m_DestFormat == FXDIB_Argb)
- _CompositeRow_BitMask2Argb_RgbByteOrder(dest_scan, src_scan, m_MaskAlpha, m_MaskRed, m_MaskGreen, m_MaskBlue,
- src_left, width, m_BlendType, clip_scan);
- else
- _CompositeRow_BitMask2Rgb_RgbByteOrder(dest_scan, src_scan, m_MaskAlpha, m_MaskRed, m_MaskGreen, m_MaskBlue,
- src_left, width, m_BlendType, (m_DestFormat & 0xff) >> 3, clip_scan);
- return;
- } else if (m_DestFormat == FXDIB_Argb)
- _CompositeRow_BitMask2Argb(dest_scan, src_scan, m_MaskAlpha, m_MaskRed, m_MaskGreen, m_MaskBlue,
- src_left, width, m_BlendType, clip_scan);
- else if (m_DestFormat == FXDIB_Rgb || m_DestFormat == FXDIB_Rgb32)
- _CompositeRow_BitMask2Rgb(dest_scan, src_scan, m_MaskAlpha, m_MaskRed, m_MaskGreen, m_MaskBlue,
- src_left, width, m_BlendType, (m_DestFormat & 0xff) >> 3, clip_scan);
+void CFX_ScanlineCompositor::CompositeBitMaskLine(uint8_t* dest_scan,
+ const uint8_t* src_scan,
+ int src_left,
+ int width,
+ const uint8_t* clip_scan,
+ uint8_t* dst_extra_alpha) {
+ if (m_DestFormat == FXDIB_8bppMask) {
+ _CompositeRow_BitMask2Mask(dest_scan, src_scan, m_MaskAlpha, src_left,
+ width, clip_scan);
+ } else if ((m_DestFormat & 0xff) == 8) {
+ if (m_DestFormat & 0x0200)
+ _CompositeRow_BitMask2Graya(dest_scan, src_scan, m_MaskAlpha, m_MaskRed,
+ src_left, width, clip_scan, dst_extra_alpha);
+ else {
+ _CompositeRow_BitMask2Gray(dest_scan, src_scan, m_MaskAlpha, m_MaskRed,
+ src_left, width, clip_scan);
+ }
+ } else if (m_bRgbByteOrder) {
+ if (m_DestFormat == FXDIB_Argb)
+ _CompositeRow_BitMask2Argb_RgbByteOrder(
+ dest_scan, src_scan, m_MaskAlpha, m_MaskRed, m_MaskGreen, m_MaskBlue,
+ src_left, width, m_BlendType, clip_scan);
+ else
+ _CompositeRow_BitMask2Rgb_RgbByteOrder(
+ dest_scan, src_scan, m_MaskAlpha, m_MaskRed, m_MaskGreen, m_MaskBlue,
+ src_left, width, m_BlendType, (m_DestFormat & 0xff) >> 3, clip_scan);
+ return;
+ } else if (m_DestFormat == FXDIB_Argb)
+ _CompositeRow_BitMask2Argb(dest_scan, src_scan, m_MaskAlpha, m_MaskRed,
+ m_MaskGreen, m_MaskBlue, src_left, width,
+ m_BlendType, clip_scan);
+ else if (m_DestFormat == FXDIB_Rgb || m_DestFormat == FXDIB_Rgb32)
+ _CompositeRow_BitMask2Rgb(
+ dest_scan, src_scan, m_MaskAlpha, m_MaskRed, m_MaskGreen, m_MaskBlue,
+ src_left, width, m_BlendType, (m_DestFormat & 0xff) >> 3, clip_scan);
}
-FX_BOOL CFX_DIBitmap::CompositeBitmap(int dest_left, int dest_top, int width, int height,
- const CFX_DIBSource* pSrcBitmap, int src_left, int src_top,
- int blend_type, const CFX_ClipRgn* pClipRgn, FX_BOOL bRgbByteOrder, void* pIccTransform)
-{
- if (m_pBuffer == NULL) {
- return FALSE;
- }
- ASSERT(!pSrcBitmap->IsAlphaMask());
- ASSERT(m_bpp >= 8);
- if (pSrcBitmap->IsAlphaMask() || m_bpp < 8) {
- return FALSE;
- }
- GetOverlapRect(dest_left, dest_top, width, height, pSrcBitmap->GetWidth(), pSrcBitmap->GetHeight(),
- src_left, src_top, pClipRgn);
- if (width == 0 || height == 0) {
- return TRUE;
- }
- const CFX_DIBitmap* pClipMask = NULL;
- FX_RECT clip_box;
- if (pClipRgn && pClipRgn->GetType() != CFX_ClipRgn::RectI) {
- ASSERT(pClipRgn->GetType() == CFX_ClipRgn::MaskF);
- pClipMask = pClipRgn->GetMask();
- clip_box = pClipRgn->GetBox();
- }
- CFX_ScanlineCompositor compositor;
- if (!compositor.Init(GetFormat(), pSrcBitmap->GetFormat(), width, pSrcBitmap->GetPalette(), 0, blend_type,
- pClipMask != NULL, bRgbByteOrder, 0, pIccTransform)) {
- return FALSE;
- }
- int dest_Bpp = m_bpp / 8;
- int src_Bpp = pSrcBitmap->GetBPP() / 8;
- FX_BOOL bRgb = src_Bpp > 1 && !pSrcBitmap->IsCmykImage();
- CFX_DIBitmap* pSrcAlphaMask = pSrcBitmap->m_pAlphaMask;
- for (int row = 0; row < height; row ++) {
- uint8_t* dest_scan = m_pBuffer + (dest_top + row) * m_Pitch + dest_left * dest_Bpp;
- const uint8_t* src_scan = pSrcBitmap->GetScanline(src_top + row) + src_left * src_Bpp;
- const uint8_t* src_scan_extra_alpha = pSrcAlphaMask ? pSrcAlphaMask->GetScanline(src_top + row) + src_left : NULL;
- uint8_t* dst_scan_extra_alpha = m_pAlphaMask ? (uint8_t*)m_pAlphaMask->GetScanline(dest_top + row) + dest_left : NULL;
- const uint8_t* clip_scan = NULL;
- if (pClipMask) {
- clip_scan = pClipMask->m_pBuffer + (dest_top + row - clip_box.top) * pClipMask->m_Pitch + (dest_left - clip_box.left);
- }
- if (bRgb) {
- compositor.CompositeRgbBitmapLine(dest_scan, src_scan, width, clip_scan, src_scan_extra_alpha, dst_scan_extra_alpha);
- } else {
- compositor.CompositePalBitmapLine(dest_scan, src_scan, src_left, width, clip_scan, src_scan_extra_alpha, dst_scan_extra_alpha);
- }
+FX_BOOL CFX_DIBitmap::CompositeBitmap(int dest_left,
+ int dest_top,
+ int width,
+ int height,
+ const CFX_DIBSource* pSrcBitmap,
+ int src_left,
+ int src_top,
+ int blend_type,
+ const CFX_ClipRgn* pClipRgn,
+ FX_BOOL bRgbByteOrder,
+ void* pIccTransform) {
+ if (m_pBuffer == NULL) {
+ return FALSE;
+ }
+ ASSERT(!pSrcBitmap->IsAlphaMask());
+ ASSERT(m_bpp >= 8);
+ if (pSrcBitmap->IsAlphaMask() || m_bpp < 8) {
+ return FALSE;
+ }
+ GetOverlapRect(dest_left, dest_top, width, height, pSrcBitmap->GetWidth(),
+ pSrcBitmap->GetHeight(), src_left, src_top, pClipRgn);
+ if (width == 0 || height == 0) {
+ return TRUE;
+ }
+ const CFX_DIBitmap* pClipMask = NULL;
+ FX_RECT clip_box;
+ if (pClipRgn && pClipRgn->GetType() != CFX_ClipRgn::RectI) {
+ ASSERT(pClipRgn->GetType() == CFX_ClipRgn::MaskF);
+ pClipMask = pClipRgn->GetMask();
+ clip_box = pClipRgn->GetBox();
+ }
+ CFX_ScanlineCompositor compositor;
+ if (!compositor.Init(GetFormat(), pSrcBitmap->GetFormat(), width,
+ pSrcBitmap->GetPalette(), 0, blend_type,
+ pClipMask != NULL, bRgbByteOrder, 0, pIccTransform)) {
+ return FALSE;
+ }
+ int dest_Bpp = m_bpp / 8;
+ int src_Bpp = pSrcBitmap->GetBPP() / 8;
+ FX_BOOL bRgb = src_Bpp > 1 && !pSrcBitmap->IsCmykImage();
+ CFX_DIBitmap* pSrcAlphaMask = pSrcBitmap->m_pAlphaMask;
+ for (int row = 0; row < height; row++) {
+ uint8_t* dest_scan =
+ m_pBuffer + (dest_top + row) * m_Pitch + dest_left * dest_Bpp;
+ const uint8_t* src_scan =
+ pSrcBitmap->GetScanline(src_top + row) + src_left * src_Bpp;
+ const uint8_t* src_scan_extra_alpha =
+ pSrcAlphaMask ? pSrcAlphaMask->GetScanline(src_top + row) + src_left
+ : NULL;
+ uint8_t* dst_scan_extra_alpha =
+ m_pAlphaMask
+ ? (uint8_t*)m_pAlphaMask->GetScanline(dest_top + row) + dest_left
+ : NULL;
+ const uint8_t* clip_scan = NULL;
+ if (pClipMask) {
+ clip_scan = pClipMask->m_pBuffer +
+ (dest_top + row - clip_box.top) * pClipMask->m_Pitch +
+ (dest_left - clip_box.left);
+ }
+ if (bRgb) {
+ compositor.CompositeRgbBitmapLine(dest_scan, src_scan, width, clip_scan,
+ src_scan_extra_alpha,
+ dst_scan_extra_alpha);
+ } else {
+ compositor.CompositePalBitmapLine(dest_scan, src_scan, src_left, width,
+ clip_scan, src_scan_extra_alpha,
+ dst_scan_extra_alpha);
}
+ }
+ return TRUE;
+}
+FX_BOOL CFX_DIBitmap::CompositeMask(int dest_left,
+ int dest_top,
+ int width,
+ int height,
+ const CFX_DIBSource* pMask,
+ FX_DWORD color,
+ int src_left,
+ int src_top,
+ int blend_type,
+ const CFX_ClipRgn* pClipRgn,
+ FX_BOOL bRgbByteOrder,
+ int alpha_flag,
+ void* pIccTransform) {
+ if (m_pBuffer == NULL) {
+ return FALSE;
+ }
+ ASSERT(pMask->IsAlphaMask());
+ ASSERT(m_bpp >= 8);
+ if (!pMask->IsAlphaMask() || m_bpp < 8) {
+ return FALSE;
+ }
+ GetOverlapRect(dest_left, dest_top, width, height, pMask->GetWidth(),
+ pMask->GetHeight(), src_left, src_top, pClipRgn);
+ if (width == 0 || height == 0) {
+ return TRUE;
+ }
+ int src_alpha =
+ (uint8_t)(alpha_flag >> 8) ? (alpha_flag & 0xff) : FXARGB_A(color);
+ if (src_alpha == 0) {
return TRUE;
+ }
+ const CFX_DIBitmap* pClipMask = NULL;
+ FX_RECT clip_box;
+ if (pClipRgn && pClipRgn->GetType() != CFX_ClipRgn::RectI) {
+ ASSERT(pClipRgn->GetType() == CFX_ClipRgn::MaskF);
+ pClipMask = pClipRgn->GetMask();
+ clip_box = pClipRgn->GetBox();
+ }
+ int src_bpp = pMask->GetBPP();
+ int Bpp = GetBPP() / 8;
+ CFX_ScanlineCompositor compositor;
+ if (!compositor.Init(GetFormat(), pMask->GetFormat(), width, NULL, color,
+ blend_type, pClipMask != NULL, bRgbByteOrder, alpha_flag,
+ pIccTransform)) {
+ return FALSE;
+ }
+ for (int row = 0; row < height; row++) {
+ uint8_t* dest_scan =
+ m_pBuffer + (dest_top + row) * m_Pitch + dest_left * Bpp;
+ const uint8_t* src_scan = pMask->GetScanline(src_top + row);
+ uint8_t* dst_scan_extra_alpha =
+ m_pAlphaMask
+ ? (uint8_t*)m_pAlphaMask->GetScanline(dest_top + row) + dest_left
+ : NULL;
+ const uint8_t* clip_scan = NULL;
+ if (pClipMask) {
+ clip_scan = pClipMask->m_pBuffer +
+ (dest_top + row - clip_box.top) * pClipMask->m_Pitch +
+ (dest_left - clip_box.left);
+ }
+ if (src_bpp == 1) {
+ compositor.CompositeBitMaskLine(dest_scan, src_scan, src_left, width,
+ clip_scan, dst_scan_extra_alpha);
+ } else {
+ compositor.CompositeByteMaskLine(dest_scan, src_scan + src_left, width,
+ clip_scan, dst_scan_extra_alpha);
+ }
+ }
+ return TRUE;
}
-FX_BOOL CFX_DIBitmap::CompositeMask(int dest_left, int dest_top, int width, int height,
- const CFX_DIBSource* pMask, FX_DWORD color, int src_left, int src_top,
- int blend_type, const CFX_ClipRgn* pClipRgn, FX_BOOL bRgbByteOrder, int alpha_flag, void* pIccTransform)
-{
- if (m_pBuffer == NULL) {
- return FALSE;
- }
- ASSERT(pMask->IsAlphaMask());
- ASSERT(m_bpp >= 8);
- if (!pMask->IsAlphaMask() || m_bpp < 8) {
- return FALSE;
- }
- GetOverlapRect(dest_left, dest_top, width, height, pMask->GetWidth(), pMask->GetHeight(), src_left, src_top, pClipRgn);
- if (width == 0 || height == 0) {
- return TRUE;
- }
- int src_alpha = (uint8_t)(alpha_flag >> 8) ? (alpha_flag & 0xff) : FXARGB_A(color);
- if (src_alpha == 0) {
- return TRUE;
- }
- const CFX_DIBitmap* pClipMask = NULL;
- FX_RECT clip_box;
- if (pClipRgn && pClipRgn->GetType() != CFX_ClipRgn::RectI) {
- ASSERT(pClipRgn->GetType() == CFX_ClipRgn::MaskF);
- pClipMask = pClipRgn->GetMask();
- clip_box = pClipRgn->GetBox();
- }
- int src_bpp = pMask->GetBPP();
- int Bpp = GetBPP() / 8;
- CFX_ScanlineCompositor compositor;
- if (!compositor.Init(GetFormat(), pMask->GetFormat(), width, NULL, color, blend_type, pClipMask != NULL, bRgbByteOrder, alpha_flag, pIccTransform)) {
- return FALSE;
- }
- for (int row = 0; row < height; row ++) {
- uint8_t* dest_scan = m_pBuffer + (dest_top + row) * m_Pitch + dest_left * Bpp;
- const uint8_t* src_scan = pMask->GetScanline(src_top + row);
- uint8_t* dst_scan_extra_alpha = m_pAlphaMask ? (uint8_t*)m_pAlphaMask->GetScanline(dest_top + row) + dest_left : NULL;
- const uint8_t* clip_scan = NULL;
- if (pClipMask) {
- clip_scan = pClipMask->m_pBuffer + (dest_top + row - clip_box.top) * pClipMask->m_Pitch + (dest_left - clip_box.left);
- }
- if (src_bpp == 1) {
- compositor.CompositeBitMaskLine(dest_scan, src_scan, src_left, width, clip_scan, dst_scan_extra_alpha);
+FX_BOOL CFX_DIBitmap::CompositeRect(int left,
+ int top,
+ int width,
+ int height,
+ FX_DWORD color,
+ int alpha_flag,
+ void* pIccTransform) {
+ if (m_pBuffer == NULL) {
+ return FALSE;
+ }
+ int src_alpha = (alpha_flag >> 8) ? (alpha_flag & 0xff) : FXARGB_A(color);
+ if (src_alpha == 0) {
+ return TRUE;
+ }
+ FX_RECT rect(left, top, left + width, top + height);
+ rect.Intersect(0, 0, m_Width, m_Height);
+ if (rect.IsEmpty()) {
+ return TRUE;
+ }
+ width = rect.Width();
+ FX_DWORD dst_color;
+ if (alpha_flag >> 8) {
+ dst_color = FXCMYK_TODIB(color);
+ } else {
+ dst_color = FXARGB_TODIB(color);
+ }
+ uint8_t* color_p = (uint8_t*)&dst_color;
+ if (m_bpp == 8) {
+ uint8_t gray = 255;
+ if (!IsAlphaMask()) {
+ if (pIccTransform && CFX_GEModule::Get()->GetCodecModule() &&
+ CFX_GEModule::Get()->GetCodecModule()->GetIccModule()) {
+ ICodec_IccModule* pIccModule =
+ CFX_GEModule::Get()->GetCodecModule()->GetIccModule();
+ pIccModule->TranslateScanline(pIccTransform, &gray, color_p, 1);
+ } else {
+ if (alpha_flag >> 8) {
+ uint8_t r, g, b;
+ AdobeCMYK_to_sRGB1(color_p[0], color_p[1], color_p[2], color_p[3], r,
+ g, b);
+ gray = FXRGB2GRAY(r, g, b);
} else {
- compositor.CompositeByteMaskLine(dest_scan, src_scan + src_left, width, clip_scan, dst_scan_extra_alpha);
+ gray = (uint8_t)FXRGB2GRAY((int)color_p[2], color_p[1], color_p[0]);
}
+ }
+ if (IsCmykImage()) {
+ gray = ~gray;
+ }
}
- return TRUE;
-}
-FX_BOOL CFX_DIBitmap::CompositeRect(int left, int top, int width, int height, FX_DWORD color, int alpha_flag, void* pIccTransform)
-{
- if (m_pBuffer == NULL) {
- return FALSE;
- }
- int src_alpha = (alpha_flag >> 8) ? (alpha_flag & 0xff) : FXARGB_A(color);
- if (src_alpha == 0) {
- return TRUE;
- }
- FX_RECT rect(left, top, left + width, top + height);
- rect.Intersect(0, 0, m_Width, m_Height);
- if (rect.IsEmpty()) {
- return TRUE;
+ for (int row = rect.top; row < rect.bottom; row++) {
+ uint8_t* dest_scan = m_pBuffer + row * m_Pitch + rect.left;
+ if (src_alpha == 255) {
+ FXSYS_memset(dest_scan, gray, width);
+ } else
+ for (int col = 0; col < width; col++) {
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, src_alpha);
+ dest_scan++;
+ }
}
- width = rect.Width();
- FX_DWORD dst_color;
- if (alpha_flag >> 8) {
- dst_color = FXCMYK_TODIB(color);
+ return TRUE;
+ }
+ if (m_bpp == 1) {
+ ASSERT(!IsCmykImage() && (uint8_t)(alpha_flag >> 8) == 0);
+ int left_shift = rect.left % 8;
+ int right_shift = rect.right % 8;
+ int width = rect.right / 8 - rect.left / 8;
+ int index = 0;
+ if (m_pPalette == NULL) {
+ index = ((uint8_t)color == 0xff) ? 1 : 0;
} else {
- dst_color = FXARGB_TODIB(color);
- }
- uint8_t* color_p = (uint8_t*)&dst_color;
- if (m_bpp == 8) {
- uint8_t gray = 255;
- if (!IsAlphaMask()) {
- if (pIccTransform && CFX_GEModule::Get()->GetCodecModule() && CFX_GEModule::Get()->GetCodecModule()->GetIccModule()) {
- ICodec_IccModule* pIccModule = CFX_GEModule::Get()->GetCodecModule()->GetIccModule();
- pIccModule->TranslateScanline(pIccTransform, &gray, color_p, 1);
- } else {
- if (alpha_flag >> 8) {
- uint8_t r, g, b;
- AdobeCMYK_to_sRGB1(color_p[0], color_p[1], color_p[2], color_p[3],
- r, g, b);
- gray = FXRGB2GRAY(r, g, b);
- } else {
- gray = (uint8_t)FXRGB2GRAY((int)color_p[2], color_p[1], color_p[0]);
- }
- }
- if (IsCmykImage()) {
- gray = ~gray;
- }
- }
- for (int row = rect.top; row < rect.bottom; row ++) {
- uint8_t* dest_scan = m_pBuffer + row * m_Pitch + rect.left;
- if (src_alpha == 255) {
- FXSYS_memset(dest_scan, gray, width);
- } else
- for (int col = 0; col < width; col ++) {
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, src_alpha);
- dest_scan ++;
- }
- }
- return TRUE;
- }
- if (m_bpp == 1) {
- ASSERT(!IsCmykImage() && (uint8_t)(alpha_flag >> 8) == 0);
- int left_shift = rect.left % 8;
- int right_shift = rect.right % 8;
- int width = rect.right / 8 - rect.left / 8;
- int index = 0;
- if (m_pPalette == NULL) {
- index = ((uint8_t)color == 0xff) ? 1 : 0;
+ for (int i = 0; i < 2; i++)
+ if (m_pPalette[i] == color) {
+ index = i;
+ }
+ }
+ for (int row = rect.top; row < rect.bottom; row++) {
+ uint8_t* dest_scan_top = (uint8_t*)GetScanline(row) + rect.left / 8;
+ uint8_t* dest_scan_top_r = (uint8_t*)GetScanline(row) + rect.right / 8;
+ uint8_t left_flag = *dest_scan_top & (255 << (8 - left_shift));
+ uint8_t right_flag = *dest_scan_top_r & (255 >> right_shift);
+ if (width) {
+ FXSYS_memset(dest_scan_top + 1, index ? 255 : 0, width - 1);
+ if (!index) {
+ *dest_scan_top &= left_flag;
+ *dest_scan_top_r &= right_flag;
} else {
- for (int i = 0; i < 2; i ++)
- if (m_pPalette[i] == color) {
- index = i;
- }
- }
- for (int row = rect.top; row < rect.bottom; row ++) {
- uint8_t* dest_scan_top = (uint8_t*)GetScanline(row) + rect.left / 8;
- uint8_t* dest_scan_top_r = (uint8_t*)GetScanline(row) + rect.right / 8;
- uint8_t left_flag = *dest_scan_top & (255 << (8 - left_shift));
- uint8_t right_flag = *dest_scan_top_r & (255 >> right_shift);
- if (width) {
- FXSYS_memset(dest_scan_top + 1, index ? 255 : 0, width - 1);
- if (!index) {
- *dest_scan_top &= left_flag;
- *dest_scan_top_r &= right_flag;
- } else {
- *dest_scan_top |= ~left_flag;
- *dest_scan_top_r |= ~right_flag;
- }
- } else {
- if (!index) {
- *dest_scan_top &= left_flag | right_flag;
- } else {
- *dest_scan_top |= ~(left_flag | right_flag);
- }
- }
+ *dest_scan_top |= ~left_flag;
+ *dest_scan_top_r |= ~right_flag;
}
- return TRUE;
- }
- ASSERT(m_bpp >= 24);
- if (m_bpp < 24) {
- return FALSE;
- }
- if (pIccTransform && CFX_GEModule::Get()->GetCodecModule()) {
- ICodec_IccModule* pIccModule = CFX_GEModule::Get()->GetCodecModule()->GetIccModule();
- pIccModule->TranslateScanline(pIccTransform, color_p, color_p, 1);
- } else {
- if (alpha_flag >> 8 && !IsCmykImage())
- AdobeCMYK_to_sRGB1(FXSYS_GetCValue(color), FXSYS_GetMValue(color), FXSYS_GetYValue(color), FXSYS_GetKValue(color),
- color_p[2], color_p[1], color_p[0]);
- else if (!(alpha_flag >> 8) && IsCmykImage()) {
- return FALSE;
+ } else {
+ if (!index) {
+ *dest_scan_top &= left_flag | right_flag;
+ } else {
+ *dest_scan_top |= ~(left_flag | right_flag);
}
+ }
}
- if(!IsCmykImage()) {
- color_p[3] = (uint8_t)src_alpha;
+ return TRUE;
+ }
+ ASSERT(m_bpp >= 24);
+ if (m_bpp < 24) {
+ return FALSE;
+ }
+ if (pIccTransform && CFX_GEModule::Get()->GetCodecModule()) {
+ ICodec_IccModule* pIccModule =
+ CFX_GEModule::Get()->GetCodecModule()->GetIccModule();
+ pIccModule->TranslateScanline(pIccTransform, color_p, color_p, 1);
+ } else {
+ if (alpha_flag >> 8 && !IsCmykImage())
+ AdobeCMYK_to_sRGB1(FXSYS_GetCValue(color), FXSYS_GetMValue(color),
+ FXSYS_GetYValue(color), FXSYS_GetKValue(color),
+ color_p[2], color_p[1], color_p[0]);
+ else if (!(alpha_flag >> 8) && IsCmykImage()) {
+ return FALSE;
+ }
+ }
+ if (!IsCmykImage()) {
+ color_p[3] = (uint8_t)src_alpha;
+ }
+ int Bpp = m_bpp / 8;
+ FX_BOOL bAlpha = HasAlpha();
+ FX_BOOL bArgb = GetFormat() == FXDIB_Argb ? TRUE : FALSE;
+ if (src_alpha == 255) {
+ for (int row = rect.top; row < rect.bottom; row++) {
+ uint8_t* dest_scan = m_pBuffer + row * m_Pitch + rect.left * Bpp;
+ uint8_t* dest_scan_alpha =
+ m_pAlphaMask ? (uint8_t*)m_pAlphaMask->GetScanline(row) + rect.left
+ : NULL;
+ if (dest_scan_alpha) {
+ FXSYS_memset(dest_scan_alpha, 0xff, width);
+ }
+ if (Bpp == 4) {
+ FX_DWORD* scan = (FX_DWORD*)dest_scan;
+ for (int col = 0; col < width; col++) {
+ *scan++ = dst_color;
+ }
+ } else {
+ for (int col = 0; col < width; col++) {
+ *dest_scan++ = color_p[0];
+ *dest_scan++ = color_p[1];
+ *dest_scan++ = color_p[2];
+ }
+ }
}
- int Bpp = m_bpp / 8;
- FX_BOOL bAlpha = HasAlpha();
- FX_BOOL bArgb = GetFormat() == FXDIB_Argb ? TRUE : FALSE;
- if (src_alpha == 255) {
- for (int row = rect.top; row < rect.bottom; row ++) {
- uint8_t* dest_scan = m_pBuffer + row * m_Pitch + rect.left * Bpp;
- uint8_t* dest_scan_alpha = m_pAlphaMask ? (uint8_t*)m_pAlphaMask->GetScanline(row) + rect.left : NULL;
- if (dest_scan_alpha) {
- FXSYS_memset(dest_scan_alpha, 0xff, width);
- }
- if (Bpp == 4) {
- FX_DWORD* scan = (FX_DWORD*)dest_scan;
- for (int col = 0; col < width; col ++) {
- *scan ++ = dst_color;
- }
- } else {
- for (int col = 0; col < width; col ++) {
- *dest_scan ++ = color_p[0];
- *dest_scan ++ = color_p[1];
- *dest_scan ++ = color_p[2];
- }
- }
+ return TRUE;
+ }
+ for (int row = rect.top; row < rect.bottom; row++) {
+ uint8_t* dest_scan = m_pBuffer + row * m_Pitch + rect.left * Bpp;
+ if (bAlpha) {
+ if (bArgb) {
+ for (int col = 0; col < width; col++) {
+ uint8_t back_alpha = dest_scan[3];
+ if (back_alpha == 0) {
+ FXARGB_SETDIB(dest_scan, FXARGB_MAKE(src_alpha, color_p[2],
+ color_p[1], color_p[0]));
+ dest_scan += 4;
+ continue;
+ }
+ uint8_t dest_alpha =
+ back_alpha + src_alpha - back_alpha * src_alpha / 255;
+ int alpha_ratio = src_alpha * 255 / dest_alpha;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, color_p[0], alpha_ratio);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, color_p[1], alpha_ratio);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, color_p[2], alpha_ratio);
+ dest_scan++;
+ *dest_scan++ = dest_alpha;
+ }
+ } else {
+ uint8_t* dest_scan_alpha =
+ (uint8_t*)m_pAlphaMask->GetScanline(row) + rect.left;
+ for (int col = 0; col < width; col++) {
+ uint8_t back_alpha = *dest_scan_alpha;
+ if (back_alpha == 0) {
+ *dest_scan_alpha++ = src_alpha;
+ FXSYS_memcpy(dest_scan, color_p, Bpp);
+ dest_scan += Bpp;
+ continue;
+ }
+ uint8_t dest_alpha =
+ back_alpha + src_alpha - back_alpha * src_alpha / 255;
+ *dest_scan_alpha++ = dest_alpha;
+ int alpha_ratio = src_alpha * 255 / dest_alpha;
+ for (int comps = 0; comps < Bpp; comps++) {
+ *dest_scan =
+ FXDIB_ALPHA_MERGE(*dest_scan, color_p[comps], alpha_ratio);
+ dest_scan++;
+ }
}
- return TRUE;
- }
- for (int row = rect.top; row < rect.bottom; row ++) {
- uint8_t* dest_scan = m_pBuffer + row * m_Pitch + rect.left * Bpp;
- if (bAlpha) {
- if (bArgb) {
- for (int col = 0; col < width; col ++) {
- uint8_t back_alpha = dest_scan[3];
- if (back_alpha == 0) {
- FXARGB_SETDIB(dest_scan, FXARGB_MAKE(src_alpha, color_p[2], color_p[1], color_p[0]));
- dest_scan += 4;
- continue;
- }
- uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 255;
- int alpha_ratio = src_alpha * 255 / dest_alpha;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, color_p[0], alpha_ratio);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, color_p[1], alpha_ratio);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, color_p[2], alpha_ratio);
- dest_scan ++;
- *dest_scan++ = dest_alpha;
- }
- } else {
- uint8_t* dest_scan_alpha = (uint8_t*)m_pAlphaMask->GetScanline(row) + rect.left;
- for (int col = 0; col < width; col ++) {
- uint8_t back_alpha = *dest_scan_alpha;
- if (back_alpha == 0) {
- *dest_scan_alpha++ = src_alpha;
- FXSYS_memcpy(dest_scan, color_p, Bpp);
- dest_scan += Bpp;
- continue;
- }
- uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 255;
- *dest_scan_alpha ++ = dest_alpha;
- int alpha_ratio = src_alpha * 255 / dest_alpha;
- for(int comps = 0; comps < Bpp; comps ++) {
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, color_p[comps], alpha_ratio);
- dest_scan ++;
- }
- }
- }
- } else {
- for (int col = 0; col < width; col ++) {
- for(int comps = 0; comps < Bpp; comps ++) {
- if (comps == 3) {
- *dest_scan ++ = 255;
- continue;
- }
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, color_p[comps], src_alpha);
- dest_scan ++;
- }
- }
+ }
+ } else {
+ for (int col = 0; col < width; col++) {
+ for (int comps = 0; comps < Bpp; comps++) {
+ if (comps == 3) {
+ *dest_scan++ = 255;
+ continue;
+ }
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, color_p[comps], src_alpha);
+ dest_scan++;
}
+ }
}
- return TRUE;
+ }
+ return TRUE;
}
-CFX_BitmapComposer::CFX_BitmapComposer()
-{
- m_pScanlineV = NULL;
- m_pScanlineAlphaV = NULL;
- m_pClipScanV = NULL;
- m_pAddClipScan = NULL;
- m_bRgbByteOrder = FALSE;
- m_BlendType = FXDIB_BLEND_NORMAL;
+CFX_BitmapComposer::CFX_BitmapComposer() {
+ m_pScanlineV = NULL;
+ m_pScanlineAlphaV = NULL;
+ m_pClipScanV = NULL;
+ m_pAddClipScan = NULL;
+ m_bRgbByteOrder = FALSE;
+ m_BlendType = FXDIB_BLEND_NORMAL;
}
-CFX_BitmapComposer::~CFX_BitmapComposer()
-{
- if (m_pScanlineV) {
- FX_Free(m_pScanlineV);
- }
- if (m_pScanlineAlphaV) {
- FX_Free(m_pScanlineAlphaV);
- }
- if (m_pClipScanV) {
- FX_Free(m_pClipScanV);
- }
- if (m_pAddClipScan) {
- FX_Free(m_pAddClipScan);
- }
+CFX_BitmapComposer::~CFX_BitmapComposer() {
+ if (m_pScanlineV) {
+ FX_Free(m_pScanlineV);
+ }
+ if (m_pScanlineAlphaV) {
+ FX_Free(m_pScanlineAlphaV);
+ }
+ if (m_pClipScanV) {
+ FX_Free(m_pClipScanV);
+ }
+ if (m_pAddClipScan) {
+ FX_Free(m_pAddClipScan);
+ }
}
-void CFX_BitmapComposer::Compose(CFX_DIBitmap* pDest, const CFX_ClipRgn* pClipRgn, int bitmap_alpha,
- FX_DWORD mask_color, FX_RECT& dest_rect, FX_BOOL bVertical,
- FX_BOOL bFlipX, FX_BOOL bFlipY, FX_BOOL bRgbByteOrder,
- int alpha_flag, void* pIccTransform, int blend_type)
-{
- m_pBitmap = pDest;
- m_pClipRgn = pClipRgn;
- m_DestLeft = dest_rect.left;
- m_DestTop = dest_rect.top;
- m_DestWidth = dest_rect.Width();
- m_DestHeight = dest_rect.Height();
- m_BitmapAlpha = bitmap_alpha;
- m_MaskColor = mask_color;
- m_pClipMask = NULL;
- if (pClipRgn && pClipRgn->GetType() != CFX_ClipRgn::RectI) {
- m_pClipMask = pClipRgn->GetMask();
- }
- m_bVertical = bVertical;
- m_bFlipX = bFlipX;
- m_bFlipY = bFlipY;
- m_AlphaFlag = alpha_flag;
- m_pIccTransform = pIccTransform;
- m_bRgbByteOrder = bRgbByteOrder;
- m_BlendType = blend_type;
+void CFX_BitmapComposer::Compose(CFX_DIBitmap* pDest,
+ const CFX_ClipRgn* pClipRgn,
+ int bitmap_alpha,
+ FX_DWORD mask_color,
+ FX_RECT& dest_rect,
+ FX_BOOL bVertical,
+ FX_BOOL bFlipX,
+ FX_BOOL bFlipY,
+ FX_BOOL bRgbByteOrder,
+ int alpha_flag,
+ void* pIccTransform,
+ int blend_type) {
+ m_pBitmap = pDest;
+ m_pClipRgn = pClipRgn;
+ m_DestLeft = dest_rect.left;
+ m_DestTop = dest_rect.top;
+ m_DestWidth = dest_rect.Width();
+ m_DestHeight = dest_rect.Height();
+ m_BitmapAlpha = bitmap_alpha;
+ m_MaskColor = mask_color;
+ m_pClipMask = NULL;
+ if (pClipRgn && pClipRgn->GetType() != CFX_ClipRgn::RectI) {
+ m_pClipMask = pClipRgn->GetMask();
+ }
+ m_bVertical = bVertical;
+ m_bFlipX = bFlipX;
+ m_bFlipY = bFlipY;
+ m_AlphaFlag = alpha_flag;
+ m_pIccTransform = pIccTransform;
+ m_bRgbByteOrder = bRgbByteOrder;
+ m_BlendType = blend_type;
}
-FX_BOOL CFX_BitmapComposer::SetInfo(int width, int height, FXDIB_Format src_format, FX_DWORD* pSrcPalette)
-{
- m_SrcFormat = src_format;
- if (!m_Compositor.Init(m_pBitmap->GetFormat(), src_format, width, pSrcPalette, m_MaskColor, FXDIB_BLEND_NORMAL,
- m_pClipMask != NULL || (m_BitmapAlpha < 255), m_bRgbByteOrder, m_AlphaFlag, m_pIccTransform)) {
- return FALSE;
- }
- if (m_bVertical) {
- m_pScanlineV = FX_Alloc(uint8_t, m_pBitmap->GetBPP() / 8 * width + 4);
- m_pClipScanV = FX_Alloc(uint8_t, m_pBitmap->GetHeight());
- if (m_pBitmap->m_pAlphaMask) {
- m_pScanlineAlphaV = FX_Alloc(uint8_t, width + 4);
- }
- }
- if (m_BitmapAlpha < 255) {
- m_pAddClipScan = FX_Alloc(uint8_t, m_bVertical ? m_pBitmap->GetHeight() : m_pBitmap->GetWidth());
- }
- return TRUE;
+FX_BOOL CFX_BitmapComposer::SetInfo(int width,
+ int height,
+ FXDIB_Format src_format,
+ FX_DWORD* pSrcPalette) {
+ m_SrcFormat = src_format;
+ if (!m_Compositor.Init(m_pBitmap->GetFormat(), src_format, width, pSrcPalette,
+ m_MaskColor, FXDIB_BLEND_NORMAL,
+ m_pClipMask != NULL || (m_BitmapAlpha < 255),
+ m_bRgbByteOrder, m_AlphaFlag, m_pIccTransform)) {
+ return FALSE;
+ }
+ if (m_bVertical) {
+ m_pScanlineV = FX_Alloc(uint8_t, m_pBitmap->GetBPP() / 8 * width + 4);
+ m_pClipScanV = FX_Alloc(uint8_t, m_pBitmap->GetHeight());
+ if (m_pBitmap->m_pAlphaMask) {
+ m_pScanlineAlphaV = FX_Alloc(uint8_t, width + 4);
+ }
+ }
+ if (m_BitmapAlpha < 255) {
+ m_pAddClipScan = FX_Alloc(
+ uint8_t, m_bVertical ? m_pBitmap->GetHeight() : m_pBitmap->GetWidth());
+ }
+ return TRUE;
}
-void CFX_BitmapComposer::DoCompose(uint8_t* dest_scan, const uint8_t* src_scan, int dest_width, const uint8_t* clip_scan,
- const uint8_t* src_extra_alpha, uint8_t* dst_extra_alpha)
-{
- if (m_BitmapAlpha < 255) {
- if (clip_scan) {
- for (int i = 0; i < dest_width; i ++) {
- m_pAddClipScan[i] = clip_scan[i] * m_BitmapAlpha / 255;
- }
- } else {
- FXSYS_memset(m_pAddClipScan, m_BitmapAlpha, dest_width);
- }
- clip_scan = m_pAddClipScan;
- }
- if (m_SrcFormat == FXDIB_8bppMask) {
- m_Compositor.CompositeByteMaskLine(dest_scan, src_scan, dest_width, clip_scan, dst_extra_alpha);
- } else if ((m_SrcFormat & 0xff) == 8) {
- m_Compositor.CompositePalBitmapLine(dest_scan, src_scan, 0, dest_width, clip_scan, src_extra_alpha, dst_extra_alpha);
+void CFX_BitmapComposer::DoCompose(uint8_t* dest_scan,
+ const uint8_t* src_scan,
+ int dest_width,
+ const uint8_t* clip_scan,
+ const uint8_t* src_extra_alpha,
+ uint8_t* dst_extra_alpha) {
+ if (m_BitmapAlpha < 255) {
+ if (clip_scan) {
+ for (int i = 0; i < dest_width; i++) {
+ m_pAddClipScan[i] = clip_scan[i] * m_BitmapAlpha / 255;
+ }
} else {
- m_Compositor.CompositeRgbBitmapLine(dest_scan, src_scan, dest_width, clip_scan, src_extra_alpha, dst_extra_alpha);
- }
+ FXSYS_memset(m_pAddClipScan, m_BitmapAlpha, dest_width);
+ }
+ clip_scan = m_pAddClipScan;
+ }
+ if (m_SrcFormat == FXDIB_8bppMask) {
+ m_Compositor.CompositeByteMaskLine(dest_scan, src_scan, dest_width,
+ clip_scan, dst_extra_alpha);
+ } else if ((m_SrcFormat & 0xff) == 8) {
+ m_Compositor.CompositePalBitmapLine(dest_scan, src_scan, 0, dest_width,
+ clip_scan, src_extra_alpha,
+ dst_extra_alpha);
+ } else {
+ m_Compositor.CompositeRgbBitmapLine(dest_scan, src_scan, dest_width,
+ clip_scan, src_extra_alpha,
+ dst_extra_alpha);
+ }
}
-void CFX_BitmapComposer::ComposeScanline(int line, const uint8_t* scanline, const uint8_t* scan_extra_alpha)
-{
- if (m_bVertical) {
- ComposeScanlineV(line, scanline, scan_extra_alpha);
- return;
- }
- const uint8_t* clip_scan = NULL;
- if (m_pClipMask)
- clip_scan = m_pClipMask->GetBuffer() + (m_DestTop + line - m_pClipRgn->GetBox().top) *
- m_pClipMask->GetPitch() + (m_DestLeft - m_pClipRgn->GetBox().left);
- uint8_t* dest_scan = (uint8_t*)m_pBitmap->GetScanline(line + m_DestTop) +
- m_DestLeft * m_pBitmap->GetBPP() / 8;
- uint8_t* dest_alpha_scan = m_pBitmap->m_pAlphaMask ?
- (uint8_t*)m_pBitmap->m_pAlphaMask->GetScanline(line + m_DestTop) + m_DestLeft : NULL;
- DoCompose(dest_scan, scanline, m_DestWidth, clip_scan, scan_extra_alpha, dest_alpha_scan);
+void CFX_BitmapComposer::ComposeScanline(int line,
+ const uint8_t* scanline,
+ const uint8_t* scan_extra_alpha) {
+ if (m_bVertical) {
+ ComposeScanlineV(line, scanline, scan_extra_alpha);
+ return;
+ }
+ const uint8_t* clip_scan = NULL;
+ if (m_pClipMask)
+ clip_scan = m_pClipMask->GetBuffer() +
+ (m_DestTop + line - m_pClipRgn->GetBox().top) *
+ m_pClipMask->GetPitch() +
+ (m_DestLeft - m_pClipRgn->GetBox().left);
+ uint8_t* dest_scan = (uint8_t*)m_pBitmap->GetScanline(line + m_DestTop) +
+ m_DestLeft * m_pBitmap->GetBPP() / 8;
+ uint8_t* dest_alpha_scan =
+ m_pBitmap->m_pAlphaMask
+ ? (uint8_t*)m_pBitmap->m_pAlphaMask->GetScanline(line + m_DestTop) +
+ m_DestLeft
+ : NULL;
+ DoCompose(dest_scan, scanline, m_DestWidth, clip_scan, scan_extra_alpha,
+ dest_alpha_scan);
}
-void CFX_BitmapComposer::ComposeScanlineV(int line, const uint8_t* scanline, const uint8_t* scan_extra_alpha)
-{
- int i;
- int Bpp = m_pBitmap->GetBPP() / 8;
- int dest_pitch = m_pBitmap->GetPitch();
- int dest_alpha_pitch = m_pBitmap->m_pAlphaMask ? m_pBitmap->m_pAlphaMask->GetPitch() : 0;
- int dest_x = m_DestLeft + (m_bFlipX ? (m_DestWidth - line - 1) : line);
- uint8_t* dest_buf = m_pBitmap->GetBuffer() + dest_x * Bpp + m_DestTop * dest_pitch;
- uint8_t* dest_alpha_buf = m_pBitmap->m_pAlphaMask ?
- m_pBitmap->m_pAlphaMask->GetBuffer() + dest_x + m_DestTop * dest_alpha_pitch : NULL;
- if (m_bFlipY) {
- dest_buf += dest_pitch * (m_DestHeight - 1);
- dest_alpha_buf += dest_alpha_pitch * (m_DestHeight - 1);
- }
- int y_step = dest_pitch;
- int y_alpha_step = dest_alpha_pitch;
+void CFX_BitmapComposer::ComposeScanlineV(int line,
+ const uint8_t* scanline,
+ const uint8_t* scan_extra_alpha) {
+ int i;
+ int Bpp = m_pBitmap->GetBPP() / 8;
+ int dest_pitch = m_pBitmap->GetPitch();
+ int dest_alpha_pitch =
+ m_pBitmap->m_pAlphaMask ? m_pBitmap->m_pAlphaMask->GetPitch() : 0;
+ int dest_x = m_DestLeft + (m_bFlipX ? (m_DestWidth - line - 1) : line);
+ uint8_t* dest_buf =
+ m_pBitmap->GetBuffer() + dest_x * Bpp + m_DestTop * dest_pitch;
+ uint8_t* dest_alpha_buf = m_pBitmap->m_pAlphaMask
+ ? m_pBitmap->m_pAlphaMask->GetBuffer() +
+ dest_x + m_DestTop * dest_alpha_pitch
+ : NULL;
+ if (m_bFlipY) {
+ dest_buf += dest_pitch * (m_DestHeight - 1);
+ dest_alpha_buf += dest_alpha_pitch * (m_DestHeight - 1);
+ }
+ int y_step = dest_pitch;
+ int y_alpha_step = dest_alpha_pitch;
+ if (m_bFlipY) {
+ y_step = -y_step;
+ y_alpha_step = -y_alpha_step;
+ }
+ uint8_t* src_scan = m_pScanlineV;
+ uint8_t* dest_scan = dest_buf;
+ for (i = 0; i < m_DestHeight; i++) {
+ for (int j = 0; j < Bpp; j++) {
+ *src_scan++ = dest_scan[j];
+ }
+ dest_scan += y_step;
+ }
+ uint8_t* src_alpha_scan = m_pScanlineAlphaV;
+ uint8_t* dest_alpha_scan = dest_alpha_buf;
+ if (dest_alpha_scan) {
+ for (i = 0; i < m_DestHeight; i++) {
+ *src_alpha_scan++ = *dest_alpha_scan;
+ dest_alpha_scan += y_alpha_step;
+ }
+ }
+ uint8_t* clip_scan = NULL;
+ if (m_pClipMask) {
+ clip_scan = m_pClipScanV;
+ int clip_pitch = m_pClipMask->GetPitch();
+ const uint8_t* src_clip =
+ m_pClipMask->GetBuffer() +
+ (m_DestTop - m_pClipRgn->GetBox().top) * clip_pitch +
+ (dest_x - m_pClipRgn->GetBox().left);
if (m_bFlipY) {
- y_step = -y_step;
- y_alpha_step = -y_alpha_step;
- }
- uint8_t* src_scan = m_pScanlineV;
- uint8_t* dest_scan = dest_buf;
- for (i = 0; i < m_DestHeight; i ++) {
- for (int j = 0; j < Bpp; j ++) {
- *src_scan++ = dest_scan[j];
- }
- dest_scan += y_step;
- }
- uint8_t* src_alpha_scan = m_pScanlineAlphaV;
- uint8_t* dest_alpha_scan = dest_alpha_buf;
- if (dest_alpha_scan) {
- for (i = 0; i < m_DestHeight; i ++) {
- *src_alpha_scan++ = *dest_alpha_scan;
- dest_alpha_scan += y_alpha_step;
- }
- }
- uint8_t* clip_scan = NULL;
- if (m_pClipMask) {
- clip_scan = m_pClipScanV;
- int clip_pitch = m_pClipMask->GetPitch();
- const uint8_t* src_clip = m_pClipMask->GetBuffer() + (m_DestTop - m_pClipRgn->GetBox().top) *
- clip_pitch + (dest_x - m_pClipRgn->GetBox().left);
- if (m_bFlipY) {
- src_clip += clip_pitch * (m_DestHeight - 1);
- clip_pitch = -clip_pitch;
- }
- for (i = 0; i < m_DestHeight; i ++) {
- clip_scan[i] = *src_clip;
- src_clip += clip_pitch;
- }
- }
- DoCompose(m_pScanlineV, scanline, m_DestHeight, clip_scan, scan_extra_alpha, m_pScanlineAlphaV);
- src_scan = m_pScanlineV;
- dest_scan = dest_buf;
- for (i = 0; i < m_DestHeight; i ++) {
- for (int j = 0; j < Bpp; j ++) {
- dest_scan[j] = *src_scan++;
- }
- dest_scan += y_step;
- }
- src_alpha_scan = m_pScanlineAlphaV;
- dest_alpha_scan = dest_alpha_buf;
- if (dest_alpha_scan) {
- for (i = 0; i < m_DestHeight; i ++) {
- *dest_alpha_scan = *src_alpha_scan++;
- dest_alpha_scan += y_alpha_step;
- }
- }
+ src_clip += clip_pitch * (m_DestHeight - 1);
+ clip_pitch = -clip_pitch;
+ }
+ for (i = 0; i < m_DestHeight; i++) {
+ clip_scan[i] = *src_clip;
+ src_clip += clip_pitch;
+ }
+ }
+ DoCompose(m_pScanlineV, scanline, m_DestHeight, clip_scan, scan_extra_alpha,
+ m_pScanlineAlphaV);
+ src_scan = m_pScanlineV;
+ dest_scan = dest_buf;
+ for (i = 0; i < m_DestHeight; i++) {
+ for (int j = 0; j < Bpp; j++) {
+ dest_scan[j] = *src_scan++;
+ }
+ dest_scan += y_step;
+ }
+ src_alpha_scan = m_pScanlineAlphaV;
+ dest_alpha_scan = dest_alpha_buf;
+ if (dest_alpha_scan) {
+ for (i = 0; i < m_DestHeight; i++) {
+ *dest_alpha_scan = *src_alpha_scan++;
+ dest_alpha_scan += y_alpha_step;
+ }
+ }
}
diff --git a/core/src/fxge/dib/fx_dib_convert.cpp b/core/src/fxge/dib/fx_dib_convert.cpp
index d7860aee19..74818f4a1b 100644
--- a/core/src/fxge/dib/fx_dib_convert.cpp
+++ b/core/src/fxge/dib/fx_dib_convert.cpp
@@ -50,8 +50,7 @@ const FX_DWORD g_dwWinPalette[256] = {
0xff00FF55, 0xff00FFAA, 0xff2A0000, 0xff2A0055, 0xff2A00AA, 0xff2A00FF,
0xff2A1F00, 0xff2A1F55, 0xff2A1FAA, 0xff2A1FFF, 0xff2A3F00, 0xff2A3F55,
0xffFFFBF0, 0xffA0A0A4, 0xff808080, 0xffFF0000, 0xff00FF00, 0xffFF0000,
- 0xff0000FF, 0xffFF00FF, 0xff00FFFF, 0xffFFFFFF
-};
+ 0xff0000FF, 0xffFF00FF, 0xff00FFFF, 0xffFFFFFF};
const FX_DWORD g_dwMacPalette[256] = {
0xffFFFFFF, 0xffFFFFCC, 0xffFFFF99, 0xffFFFF66, 0xffFFFF33, 0xffFFFF00,
0xffFFCCFF, 0xffFFCCCC, 0xffFFCC99, 0xffFFCC66, 0xffFFCC33, 0xffFFCC00,
@@ -88,989 +87,1160 @@ const FX_DWORD g_dwMacPalette[256] = {
0xff0099FF, 0xff0099CC, 0xff009999, 0xff009966, 0xff009933, 0xff009900,
0xff0066FF, 0xff0066CC, 0xff006699, 0xff006666, 0xff006633, 0xff006600,
0xff0033FF, 0xff0033CC, 0xff003399, 0xff003366, 0xff003333, 0xff003300,
- 0xff0000FF, 0xff0000CC, 0xff000099, 0xff000066, 0xff000033,
- 0xffEE0000, 0xffDD0000, 0xffBB0000, 0xffAA0000, 0xff880000, 0xff770000,
- 0xff550000, 0xff440000, 0xff220000, 0xff110000, 0xff00EE00, 0xff00DD00,
- 0xff00BB00, 0xff00AA00, 0xff008800, 0xff007700, 0xff005500, 0xff004400,
- 0xff002200, 0xff001100, 0xff0000EE, 0xff0000DD, 0xff0000BB, 0xff0000AA,
- 0xff000088, 0xff000077, 0xff000055, 0xff000044, 0xff000022, 0xff000011,
- 0xffEEEEEE, 0xffDDDDDD, 0xffBBBBBB, 0xffAAAAAA, 0xff888888, 0xff777777,
- 0xff555555, 0xff444444, 0xff222222, 0xff111111, 0xff000000
+ 0xff0000FF, 0xff0000CC, 0xff000099, 0xff000066, 0xff000033, 0xffEE0000,
+ 0xffDD0000, 0xffBB0000, 0xffAA0000, 0xff880000, 0xff770000, 0xff550000,
+ 0xff440000, 0xff220000, 0xff110000, 0xff00EE00, 0xff00DD00, 0xff00BB00,
+ 0xff00AA00, 0xff008800, 0xff007700, 0xff005500, 0xff004400, 0xff002200,
+ 0xff001100, 0xff0000EE, 0xff0000DD, 0xff0000BB, 0xff0000AA, 0xff000088,
+ 0xff000077, 0xff000055, 0xff000044, 0xff000022, 0xff000011, 0xffEEEEEE,
+ 0xffDDDDDD, 0xffBBBBBB, 0xffAAAAAA, 0xff888888, 0xff777777, 0xff555555,
+ 0xff444444, 0xff222222, 0xff111111, 0xff000000};
+class CFX_Palette {
+ public:
+ CFX_Palette();
+ ~CFX_Palette();
+
+ public:
+ FX_BOOL BuildPalette(const CFX_DIBSource* pBitmap, int dwPaletteType);
+ FX_DWORD* GetPalette() const { return m_pPalette; }
+
+ FX_DWORD* GetColorLut() const { return m_cLut; }
+ FX_DWORD* GetAmountLut() const { return m_aLut; }
+ int32_t Getlut() const { return m_lut; }
+
+ protected:
+ FX_DWORD* m_pPalette;
+ FX_DWORD* m_cLut;
+ FX_DWORD* m_aLut;
+ int m_lut;
};
-class CFX_Palette
-{
-public:
- CFX_Palette();
- ~CFX_Palette();
-public:
- FX_BOOL BuildPalette(const CFX_DIBSource* pBitmap, int dwPaletteType);
- FX_DWORD* GetPalette() const
- {
- return m_pPalette;
+int _Partition(FX_DWORD* alut, FX_DWORD* clut, int l, int r) {
+ FX_DWORD p_a = alut[l];
+ FX_DWORD p_c = clut[l];
+ while (l < r) {
+ while (l < r && alut[r] >= p_a) {
+ r--;
}
-
- FX_DWORD* GetColorLut()const
- {
- return m_cLut;
+ if (l < r) {
+ alut[l] = alut[r];
+ clut[l++] = clut[r];
}
- FX_DWORD* GetAmountLut()const
- {
- return m_aLut;
+ while (l < r && alut[l] <= p_a) {
+ l++;
}
- int32_t Getlut()const
- {
- return m_lut;
+ if (l < r) {
+ alut[r] = alut[l];
+ clut[r--] = clut[l];
}
-protected:
- FX_DWORD* m_pPalette;
- FX_DWORD* m_cLut;
- FX_DWORD* m_aLut;
- int m_lut;
-};
-int _Partition(FX_DWORD* alut, FX_DWORD* clut, int l, int r)
-{
- FX_DWORD p_a = alut[l];
- FX_DWORD p_c = clut[l];
- while(l < r) {
- while(l < r && alut[r] >= p_a) {
- r--;
- }
- if (l < r) {
- alut[l] = alut[r];
- clut[l++] = clut[r];
- }
- while(l < r && alut[l] <= p_a) {
- l++;
- }
- if (l < r) {
- alut[r] = alut[l];
- clut[r--] = clut[l];
- }
- }
- alut[l] = p_a;
- clut[l] = p_c;
- return l;
+ }
+ alut[l] = p_a;
+ clut[l] = p_c;
+ return l;
}
-void _Qsort(FX_DWORD* alut, FX_DWORD* clut, int l, int r)
-{
- if(l < r) {
- int pI = _Partition(alut, clut, l, r);
- _Qsort(alut, clut, l, pI - 1);
- _Qsort(alut, clut, pI + 1, r);
- }
+void _Qsort(FX_DWORD* alut, FX_DWORD* clut, int l, int r) {
+ if (l < r) {
+ int pI = _Partition(alut, clut, l, r);
+ _Qsort(alut, clut, l, pI - 1);
+ _Qsort(alut, clut, pI + 1, r);
+ }
}
-void _ColorDecode(FX_DWORD pal_v, uint8_t& r, uint8_t& g, uint8_t& b)
-{
- r = (uint8_t)((pal_v & 0xf00) >> 4);
- g = (uint8_t)(pal_v & 0x0f0);
- b = (uint8_t)((pal_v & 0x00f) << 4);
+void _ColorDecode(FX_DWORD pal_v, uint8_t& r, uint8_t& g, uint8_t& b) {
+ r = (uint8_t)((pal_v & 0xf00) >> 4);
+ g = (uint8_t)(pal_v & 0x0f0);
+ b = (uint8_t)((pal_v & 0x00f) << 4);
}
-void _Obtain_Pal(FX_DWORD* aLut, FX_DWORD*cLut, FX_DWORD* dest_pal, int pal_type, FX_DWORD* win_mac_pal, FX_DWORD lut)
-{
- int row, col;
- FX_DWORD lut_1 = lut - 1;
- if (pal_type == FXDIB_PALETTE_LOC) {
- for (row = 0; row < 256; row++) {
- int lut_offset = lut_1 - row;
- if (lut_offset < 0) {
- lut_offset += 256;
- }
- FX_DWORD color = cLut[lut_offset];
- uint8_t r, g, b;
- _ColorDecode(color, r, g, b);
- dest_pal[row] = ((FX_DWORD)r << 16) | ((FX_DWORD)g << 8) | b | 0xff000000;
- aLut[lut_offset] = row;
- }
- } else {
- for (row = 0; row < 256; row++) {
- int lut_offset = lut_1 - row;
- if (lut_offset < 0) {
- lut_offset += 256;
- }
- uint8_t r, g, b;
- _ColorDecode(cLut[lut_offset], r, g, b);
- int error, min_error = 1000000;
- int c_index = 0;
- for (col = 0; col < 256; col++) {
- FX_DWORD p_color = win_mac_pal[col];
- int d_r = r - (uint8_t)(p_color >> 16);
- int d_g = g - (uint8_t)(p_color >> 8);
- int d_b = b - (uint8_t)p_color;
- error = d_r * d_r + d_g * d_g + d_b * d_b;
- if (error < min_error) {
- min_error = error;
- c_index = col;
- }
- }
- dest_pal[row] = win_mac_pal[c_index];
- aLut[lut_offset] = row;
+void _Obtain_Pal(FX_DWORD* aLut,
+ FX_DWORD* cLut,
+ FX_DWORD* dest_pal,
+ int pal_type,
+ FX_DWORD* win_mac_pal,
+ FX_DWORD lut) {
+ int row, col;
+ FX_DWORD lut_1 = lut - 1;
+ if (pal_type == FXDIB_PALETTE_LOC) {
+ for (row = 0; row < 256; row++) {
+ int lut_offset = lut_1 - row;
+ if (lut_offset < 0) {
+ lut_offset += 256;
+ }
+ FX_DWORD color = cLut[lut_offset];
+ uint8_t r, g, b;
+ _ColorDecode(color, r, g, b);
+ dest_pal[row] = ((FX_DWORD)r << 16) | ((FX_DWORD)g << 8) | b | 0xff000000;
+ aLut[lut_offset] = row;
+ }
+ } else {
+ for (row = 0; row < 256; row++) {
+ int lut_offset = lut_1 - row;
+ if (lut_offset < 0) {
+ lut_offset += 256;
+ }
+ uint8_t r, g, b;
+ _ColorDecode(cLut[lut_offset], r, g, b);
+ int error, min_error = 1000000;
+ int c_index = 0;
+ for (col = 0; col < 256; col++) {
+ FX_DWORD p_color = win_mac_pal[col];
+ int d_r = r - (uint8_t)(p_color >> 16);
+ int d_g = g - (uint8_t)(p_color >> 8);
+ int d_b = b - (uint8_t)p_color;
+ error = d_r * d_r + d_g * d_g + d_b * d_b;
+ if (error < min_error) {
+ min_error = error;
+ c_index = col;
}
+ }
+ dest_pal[row] = win_mac_pal[c_index];
+ aLut[lut_offset] = row;
}
+ }
}
-CFX_Palette::CFX_Palette()
-{
- m_pPalette = NULL;
+CFX_Palette::CFX_Palette() {
+ m_pPalette = NULL;
+ m_cLut = NULL;
+ m_aLut = NULL;
+ m_lut = 0;
+}
+CFX_Palette::~CFX_Palette() {
+ if (m_pPalette) {
+ FX_Free(m_pPalette);
+ }
+ if (m_cLut) {
+ FX_Free(m_cLut);
+ }
+ if (m_aLut) {
+ FX_Free(m_aLut);
+ }
+ m_lut = 0;
+}
+FX_BOOL CFX_Palette::BuildPalette(const CFX_DIBSource* pBitmap, int pal_type) {
+ if (pBitmap == NULL) {
+ return FALSE;
+ }
+ if (m_pPalette != NULL) {
+ FX_Free(m_pPalette);
+ }
+ m_pPalette = FX_Alloc(FX_DWORD, 256);
+ int bpp = pBitmap->GetBPP() / 8;
+ int width = pBitmap->GetWidth();
+ int height = pBitmap->GetHeight();
+ if (m_cLut) {
+ FX_Free(m_cLut);
m_cLut = NULL;
+ }
+ if (m_aLut) {
+ FX_Free(m_aLut);
m_aLut = NULL;
- m_lut = 0;
-}
-CFX_Palette::~CFX_Palette()
-{
- if (m_pPalette) {
- FX_Free(m_pPalette);
+ }
+ m_cLut = FX_Alloc(FX_DWORD, 4096);
+ m_aLut = FX_Alloc(FX_DWORD, 4096);
+ int row, col;
+ m_lut = 0;
+ for (row = 0; row < height; row++) {
+ uint8_t* scan_line = (uint8_t*)pBitmap->GetScanline(row);
+ for (col = 0; col < width; col++) {
+ uint8_t* src_port = scan_line + col * bpp;
+ FX_DWORD b = src_port[0] & 0xf0;
+ FX_DWORD g = src_port[1] & 0xf0;
+ FX_DWORD r = src_port[2] & 0xf0;
+ FX_DWORD index = (r << 4) + g + (b >> 4);
+ m_aLut[index]++;
}
- if (m_cLut) {
- FX_Free(m_cLut);
+ }
+ for (row = 0; row < 4096; row++) {
+ if (m_aLut[row] != 0) {
+ m_aLut[m_lut] = m_aLut[row];
+ m_cLut[m_lut] = row;
+ m_lut++;
}
- if (m_aLut) {
- FX_Free(m_aLut);
- }
- m_lut = 0;
+ }
+ _Qsort(m_aLut, m_cLut, 0, m_lut - 1);
+ FX_DWORD* win_mac_pal = NULL;
+ if (pal_type == FXDIB_PALETTE_WIN) {
+ win_mac_pal = (FX_DWORD*)g_dwWinPalette;
+ } else if (pal_type == FXDIB_PALETTE_MAC) {
+ win_mac_pal = (FX_DWORD*)g_dwMacPalette;
+ }
+ _Obtain_Pal(m_aLut, m_cLut, m_pPalette, pal_type, win_mac_pal, m_lut);
+ return TRUE;
}
-FX_BOOL CFX_Palette::BuildPalette(const CFX_DIBSource* pBitmap, int pal_type)
-{
- if (pBitmap == NULL) {
- return FALSE;
- }
- if (m_pPalette != NULL) {
- FX_Free(m_pPalette);
+FX_BOOL _ConvertBuffer_1bppMask2Gray(uint8_t* dest_buf,
+ int dest_pitch,
+ int width,
+ int height,
+ const CFX_DIBSource* pSrcBitmap,
+ int src_left,
+ int src_top) {
+ uint8_t set_gray, reset_gray;
+ set_gray = 0xff;
+ reset_gray = 0x00;
+ for (int row = 0; row < height; row++) {
+ uint8_t* dest_scan = dest_buf + row * dest_pitch;
+ FXSYS_memset(dest_scan, reset_gray, width);
+ const uint8_t* src_scan = pSrcBitmap->GetScanline(src_top + row);
+ for (int col = src_left; col < src_left + width; col++) {
+ if (src_scan[col / 8] & (1 << (7 - col % 8))) {
+ *dest_scan = set_gray;
+ }
+ dest_scan++;
}
- m_pPalette = FX_Alloc(FX_DWORD, 256);
- int bpp = pBitmap->GetBPP() / 8;
- int width = pBitmap->GetWidth();
- int height = pBitmap->GetHeight();
- if (m_cLut) {
- FX_Free(m_cLut);
- m_cLut = NULL;
+ }
+ return TRUE;
+}
+FX_BOOL _ConvertBuffer_8bppMask2Gray(uint8_t* dest_buf,
+ int dest_pitch,
+ int width,
+ int height,
+ const CFX_DIBSource* pSrcBitmap,
+ int src_left,
+ int src_top) {
+ for (int row = 0; row < height; row++) {
+ uint8_t* dest_scan = dest_buf + row * dest_pitch;
+ const uint8_t* src_scan = pSrcBitmap->GetScanline(src_top + row) + src_left;
+ FXSYS_memcpy(dest_scan, src_scan, width);
+ }
+ return TRUE;
+}
+FX_BOOL _ConvertBuffer_1bppPlt2Gray(uint8_t* dest_buf,
+ int dest_pitch,
+ int width,
+ int height,
+ const CFX_DIBSource* pSrcBitmap,
+ int src_left,
+ int src_top,
+ void* pIccTransform) {
+ FX_DWORD* src_plt = pSrcBitmap->GetPalette();
+ uint8_t gray[2];
+ if (pIccTransform) {
+ FX_DWORD plt[2];
+ if (pSrcBitmap->IsCmykImage()) {
+ plt[0] = FXCMYK_TODIB(src_plt[0]);
+ plt[1] = FXCMYK_TODIB(src_plt[1]);
+ } else {
+ uint8_t* bgr_ptr = (uint8_t*)plt;
+ bgr_ptr[0] = FXARGB_B(src_plt[0]);
+ bgr_ptr[1] = FXARGB_G(src_plt[0]);
+ bgr_ptr[2] = FXARGB_R(src_plt[0]);
+ bgr_ptr[3] = FXARGB_B(src_plt[1]);
+ bgr_ptr[4] = FXARGB_G(src_plt[1]);
+ bgr_ptr[5] = FXARGB_R(src_plt[1]);
}
- if (m_aLut) {
- FX_Free(m_aLut);
- m_aLut = NULL;
+ ICodec_IccModule* pIccModule =
+ CFX_GEModule::Get()->GetCodecModule()->GetIccModule();
+ pIccModule->TranslateScanline(pIccTransform, gray, (const uint8_t*)plt, 2);
+ } else {
+ uint8_t reset_r, reset_g, reset_b, set_r, set_g, set_b;
+ if (pSrcBitmap->IsCmykImage()) {
+ AdobeCMYK_to_sRGB1(
+ FXSYS_GetCValue(src_plt[0]), FXSYS_GetMValue(src_plt[0]),
+ FXSYS_GetYValue(src_plt[0]), FXSYS_GetKValue(src_plt[0]), reset_r,
+ reset_g, reset_b);
+ AdobeCMYK_to_sRGB1(FXSYS_GetCValue(src_plt[1]),
+ FXSYS_GetMValue(src_plt[1]),
+ FXSYS_GetYValue(src_plt[1]),
+ FXSYS_GetKValue(src_plt[1]), set_r, set_g, set_b);
+ } else {
+ reset_r = FXARGB_R(src_plt[0]);
+ reset_g = FXARGB_G(src_plt[0]);
+ reset_b = FXARGB_B(src_plt[0]);
+ set_r = FXARGB_R(src_plt[1]);
+ set_g = FXARGB_G(src_plt[1]);
+ set_b = FXARGB_B(src_plt[1]);
}
- m_cLut = FX_Alloc(FX_DWORD, 4096);
- m_aLut = FX_Alloc(FX_DWORD, 4096);
- int row, col;
- m_lut = 0;
- for (row = 0; row < height; row++) {
- uint8_t* scan_line = (uint8_t*)pBitmap->GetScanline(row);
- for (col = 0; col < width; col++) {
- uint8_t* src_port = scan_line + col * bpp;
- FX_DWORD b = src_port[0] & 0xf0;
- FX_DWORD g = src_port[1] & 0xf0;
- FX_DWORD r = src_port[2] & 0xf0;
- FX_DWORD index = (r << 4) + g + (b >> 4);
- m_aLut[index]++;
- }
+ gray[0] = FXRGB2GRAY(reset_r, reset_g, reset_b);
+ gray[1] = FXRGB2GRAY(set_r, set_g, set_b);
+ }
+ for (int row = 0; row < height; row++) {
+ uint8_t* dest_scan = dest_buf + row * dest_pitch;
+ FXSYS_memset(dest_scan, gray[0], width);
+ const uint8_t* src_scan = pSrcBitmap->GetScanline(src_top + row);
+ for (int col = src_left; col < src_left + width; col++) {
+ if (src_scan[col / 8] & (1 << (7 - col % 8))) {
+ *dest_scan = gray[1];
+ }
+ dest_scan++;
}
- for (row = 0; row < 4096; row++) {
- if (m_aLut[row] != 0) {
- m_aLut[m_lut] = m_aLut[row];
- m_cLut[m_lut] = row;
- m_lut++;
- }
+ }
+ return TRUE;
+}
+FX_BOOL _ConvertBuffer_8bppPlt2Gray(uint8_t* dest_buf,
+ int dest_pitch,
+ int width,
+ int height,
+ const CFX_DIBSource* pSrcBitmap,
+ int src_left,
+ int src_top,
+ void* pIccTransform) {
+ FX_DWORD* src_plt = pSrcBitmap->GetPalette();
+ uint8_t gray[256];
+ if (pIccTransform) {
+ FX_DWORD plt[256];
+ if (pSrcBitmap->IsCmykImage()) {
+ for (int i = 0; i < 256; i++) {
+ plt[i] = FXCMYK_TODIB(src_plt[i]);
+ }
+ } else {
+ uint8_t* bgr_ptr = (uint8_t*)plt;
+ for (int i = 0; i < 256; i++) {
+ *bgr_ptr++ = FXARGB_B(src_plt[i]);
+ *bgr_ptr++ = FXARGB_G(src_plt[i]);
+ *bgr_ptr++ = FXARGB_R(src_plt[i]);
+ }
}
- _Qsort(m_aLut, m_cLut, 0, m_lut - 1);
- FX_DWORD* win_mac_pal = NULL;
- if (pal_type == FXDIB_PALETTE_WIN) {
- win_mac_pal = (FX_DWORD*)g_dwWinPalette;
- } else if (pal_type == FXDIB_PALETTE_MAC) {
- win_mac_pal = (FX_DWORD*)g_dwMacPalette;
+ ICodec_IccModule* pIccModule =
+ CFX_GEModule::Get()->GetCodecModule()->GetIccModule();
+ pIccModule->TranslateScanline(pIccTransform, gray, (const uint8_t*)plt,
+ 256);
+ } else {
+ if (pSrcBitmap->IsCmykImage()) {
+ uint8_t r, g, b;
+ for (int i = 0; i < 256; i++) {
+ AdobeCMYK_to_sRGB1(
+ FXSYS_GetCValue(src_plt[i]), FXSYS_GetMValue(src_plt[i]),
+ FXSYS_GetYValue(src_plt[i]), FXSYS_GetKValue(src_plt[i]), r, g, b);
+ gray[i] = FXRGB2GRAY(r, g, b);
+ }
+ } else
+ for (int i = 0; i < 256; i++) {
+ gray[i] = FXRGB2GRAY(FXARGB_R(src_plt[i]), FXARGB_G(src_plt[i]),
+ FXARGB_B(src_plt[i]));
+ }
+ }
+ for (int row = 0; row < height; row++) {
+ uint8_t* dest_scan = dest_buf + row * dest_pitch;
+ const uint8_t* src_scan = pSrcBitmap->GetScanline(src_top + row) + src_left;
+ for (int col = 0; col < width; col++) {
+ *dest_scan++ = gray[*src_scan++];
}
- _Obtain_Pal(m_aLut, m_cLut, m_pPalette, pal_type, win_mac_pal, m_lut);
- return TRUE;
+ }
+ return TRUE;
}
-FX_BOOL _ConvertBuffer_1bppMask2Gray(uint8_t* dest_buf, int dest_pitch, int width, int height,
- const CFX_DIBSource* pSrcBitmap, int src_left, int src_top)
-{
- uint8_t set_gray, reset_gray;
- set_gray = 0xff;
- reset_gray = 0x00;
- for (int row = 0; row < height; row ++) {
+FX_BOOL _ConvertBuffer_RgbOrCmyk2Gray(uint8_t* dest_buf,
+ int dest_pitch,
+ int width,
+ int height,
+ const CFX_DIBSource* pSrcBitmap,
+ int src_left,
+ int src_top,
+ void* pIccTransform) {
+ int Bpp = pSrcBitmap->GetBPP() / 8;
+ if (pIccTransform) {
+ ICodec_IccModule* pIccModule =
+ CFX_GEModule::Get()->GetCodecModule()->GetIccModule();
+ if (Bpp == 3 || pSrcBitmap->IsCmykImage()) {
+ for (int row = 0; row < height; row++) {
uint8_t* dest_scan = dest_buf + row * dest_pitch;
- FXSYS_memset(dest_scan, reset_gray, width);
- const uint8_t* src_scan = pSrcBitmap->GetScanline(src_top + row);
- for (int col = src_left; col < src_left + width; col ++) {
- if (src_scan[col / 8] & (1 << (7 - col % 8))) {
- *dest_scan = set_gray;
- }
- dest_scan ++;
+ const uint8_t* src_scan =
+ pSrcBitmap->GetScanline(src_top + row) + src_left * Bpp;
+ pIccModule->TranslateScanline(pIccTransform, dest_scan, src_scan,
+ width);
+ }
+ } else {
+ for (int row = 0; row < height; row++) {
+ uint8_t* dest_scan = dest_buf + row * dest_pitch;
+ const uint8_t* src_scan =
+ pSrcBitmap->GetScanline(src_top + row) + src_left * 4;
+ for (int col = 0; col < width; col++) {
+ pIccModule->TranslateScanline(pIccTransform, dest_scan, src_scan, 1);
+ dest_scan++;
+ src_scan += 4;
}
+ }
}
- return TRUE;
-}
-FX_BOOL _ConvertBuffer_8bppMask2Gray(uint8_t* dest_buf, int dest_pitch, int width, int height,
- const CFX_DIBSource* pSrcBitmap, int src_left, int src_top)
-{
- for (int row = 0; row < height; row ++) {
+ } else {
+ if (pSrcBitmap->IsCmykImage()) {
+ for (int row = 0; row < height; row++) {
uint8_t* dest_scan = dest_buf + row * dest_pitch;
- const uint8_t* src_scan = pSrcBitmap->GetScanline(src_top + row) + src_left;
- FXSYS_memcpy(dest_scan, src_scan, width);
- }
- return TRUE;
-}
-FX_BOOL _ConvertBuffer_1bppPlt2Gray(uint8_t* dest_buf, int dest_pitch, int width, int height,
- const CFX_DIBSource* pSrcBitmap, int src_left, int src_top, void* pIccTransform)
-{
- FX_DWORD* src_plt = pSrcBitmap->GetPalette();
- uint8_t gray[2];
- if (pIccTransform) {
- FX_DWORD plt[2];
- if (pSrcBitmap->IsCmykImage()) {
- plt[0] = FXCMYK_TODIB(src_plt[0]);
- plt[1] = FXCMYK_TODIB(src_plt[1]);
- } else {
- uint8_t* bgr_ptr = (uint8_t*)plt;
- bgr_ptr[0] = FXARGB_B(src_plt[0]);
- bgr_ptr[1] = FXARGB_G(src_plt[0]);
- bgr_ptr[2] = FXARGB_R(src_plt[0]);
- bgr_ptr[3] = FXARGB_B(src_plt[1]);
- bgr_ptr[4] = FXARGB_G(src_plt[1]);
- bgr_ptr[5] = FXARGB_R(src_plt[1]);
+ const uint8_t* src_scan =
+ pSrcBitmap->GetScanline(src_top + row) + src_left * 4;
+ for (int col = 0; col < width; col++) {
+ uint8_t r, g, b;
+ AdobeCMYK_to_sRGB1(FXSYS_GetCValue((FX_DWORD)src_scan[0]),
+ FXSYS_GetMValue((FX_DWORD)src_scan[1]),
+ FXSYS_GetYValue((FX_DWORD)src_scan[2]),
+ FXSYS_GetKValue((FX_DWORD)src_scan[3]), r, g, b);
+ *dest_scan++ = FXRGB2GRAY(r, g, b);
+ src_scan += 4;
}
- ICodec_IccModule* pIccModule = CFX_GEModule::Get()->GetCodecModule()->GetIccModule();
- pIccModule->TranslateScanline(pIccTransform, gray, (const uint8_t*)plt, 2);
+ }
} else {
- uint8_t reset_r, reset_g, reset_b,
- set_r, set_g, set_b;
- if (pSrcBitmap->IsCmykImage()) {
- AdobeCMYK_to_sRGB1(FXSYS_GetCValue(src_plt[0]), FXSYS_GetMValue(src_plt[0]), FXSYS_GetYValue(src_plt[0]), FXSYS_GetKValue(src_plt[0]),
- reset_r, reset_g, reset_b);
- AdobeCMYK_to_sRGB1(FXSYS_GetCValue(src_plt[1]), FXSYS_GetMValue(src_plt[1]), FXSYS_GetYValue(src_plt[1]), FXSYS_GetKValue(src_plt[1]),
- set_r, set_g, set_b);
- } else {
- reset_r = FXARGB_R(src_plt[0]);
- reset_g = FXARGB_G(src_plt[0]);
- reset_b = FXARGB_B(src_plt[0]);
- set_r = FXARGB_R(src_plt[1]);
- set_g = FXARGB_G(src_plt[1]);
- set_b = FXARGB_B(src_plt[1]);
- }
- gray[0] = FXRGB2GRAY(reset_r, reset_g, reset_b);
- gray[1] = FXRGB2GRAY(set_r, set_g, set_b);
- }
- for (int row = 0; row < height; row ++) {
+ for (int row = 0; row < height; row++) {
uint8_t* dest_scan = dest_buf + row * dest_pitch;
- FXSYS_memset(dest_scan, gray[0], width);
- const uint8_t* src_scan = pSrcBitmap->GetScanline(src_top + row);
- for (int col = src_left; col < src_left + width; col ++) {
- if (src_scan[col / 8] & (1 << (7 - col % 8))) {
- *dest_scan = gray[1];
- }
- dest_scan ++;
+ const uint8_t* src_scan =
+ pSrcBitmap->GetScanline(src_top + row) + src_left * Bpp;
+ for (int col = 0; col < width; col++) {
+ *dest_scan++ = FXRGB2GRAY(src_scan[2], src_scan[1], src_scan[0]);
+ src_scan += Bpp;
}
+ }
}
- return TRUE;
+ }
+ return TRUE;
}
-FX_BOOL _ConvertBuffer_8bppPlt2Gray(uint8_t* dest_buf, int dest_pitch, int width, int height,
- const CFX_DIBSource* pSrcBitmap, int src_left, int src_top, void* pIccTransform)
-{
- FX_DWORD* src_plt = pSrcBitmap->GetPalette();
- uint8_t gray[256];
- if (pIccTransform) {
- FX_DWORD plt[256];
- if (pSrcBitmap->IsCmykImage()) {
- for (int i = 0; i < 256; i ++) {
- plt[i] = FXCMYK_TODIB(src_plt[i]);
- }
- } else {
- uint8_t* bgr_ptr = (uint8_t*)plt;
- for (int i = 0; i < 256; i ++) {
- *bgr_ptr++ = FXARGB_B(src_plt[i]);
- *bgr_ptr++ = FXARGB_G(src_plt[i]);
- *bgr_ptr++ = FXARGB_R(src_plt[i]);
- }
+inline void _ConvertBuffer_IndexCopy(uint8_t* dest_buf,
+ int dest_pitch,
+ int width,
+ int height,
+ const CFX_DIBSource* pSrcBitmap,
+ int src_left,
+ int src_top) {
+ if (pSrcBitmap->GetBPP() == 1) {
+ for (int row = 0; row < height; row++) {
+ uint8_t* dest_scan = dest_buf + row * dest_pitch;
+ FXSYS_memset(dest_scan, 0, width);
+ const uint8_t* src_scan = pSrcBitmap->GetScanline(src_top + row);
+ for (int col = src_left; col < src_left + width; col++) {
+ if (src_scan[col / 8] & (1 << (7 - col % 8))) {
+ *dest_scan = 1;
}
- ICodec_IccModule* pIccModule = CFX_GEModule::Get()->GetCodecModule()->GetIccModule();
- pIccModule->TranslateScanline(pIccTransform, gray, (const uint8_t*)plt, 256);
- } else {
- if (pSrcBitmap->IsCmykImage()) {
- uint8_t r, g, b;
- for (int i = 0; i < 256; i ++) {
- AdobeCMYK_to_sRGB1(FXSYS_GetCValue(src_plt[i]), FXSYS_GetMValue(src_plt[i]), FXSYS_GetYValue(src_plt[i]), FXSYS_GetKValue(src_plt[i]),
- r, g, b);
- gray[i] = FXRGB2GRAY(r, g, b);
- }
- } else
- for (int i = 0; i < 256; i ++) {
- gray[i] = FXRGB2GRAY(FXARGB_R(src_plt[i]), FXARGB_G(src_plt[i]), FXARGB_B(src_plt[i]));
- }
+ dest_scan++;
+ }
}
- for (int row = 0; row < height; row ++) {
- uint8_t* dest_scan = dest_buf + row * dest_pitch;
- const uint8_t* src_scan = pSrcBitmap->GetScanline(src_top + row) + src_left;
- for (int col = 0; col < width; col ++) {
- *dest_scan++ = gray[*src_scan++];
- }
+ } else {
+ for (int row = 0; row < height; row++) {
+ uint8_t* dest_scan = dest_buf + row * dest_pitch;
+ const uint8_t* src_scan =
+ pSrcBitmap->GetScanline(src_top + row) + src_left;
+ FXSYS_memcpy(dest_scan, src_scan, width);
}
- return TRUE;
+ }
}
-FX_BOOL _ConvertBuffer_RgbOrCmyk2Gray(uint8_t* dest_buf, int dest_pitch, int width, int height,
- const CFX_DIBSource* pSrcBitmap, int src_left, int src_top, void* pIccTransform)
-{
- int Bpp = pSrcBitmap->GetBPP() / 8;
- if (pIccTransform) {
- ICodec_IccModule* pIccModule = CFX_GEModule::Get()->GetCodecModule()->GetIccModule();
- if (Bpp == 3 || pSrcBitmap->IsCmykImage()) {
- for (int row = 0; row < height; row ++) {
- uint8_t* dest_scan = dest_buf + row * dest_pitch;
- const uint8_t* src_scan = pSrcBitmap->GetScanline(src_top + row) + src_left * Bpp;
- pIccModule->TranslateScanline(pIccTransform, dest_scan, src_scan, width);
- }
- } else {
- for (int row = 0; row < height; row ++) {
- uint8_t* dest_scan = dest_buf + row * dest_pitch;
- const uint8_t* src_scan = pSrcBitmap->GetScanline(src_top + row) + src_left * 4;
- for (int col = 0; col < width; col ++) {
- pIccModule->TranslateScanline(pIccTransform, dest_scan, src_scan, 1);
- dest_scan++;
- src_scan += 4;
- }
- }
- }
+FX_BOOL _ConvertBuffer_Plt2PltRgb8(uint8_t* dest_buf,
+ int dest_pitch,
+ int width,
+ int height,
+ const CFX_DIBSource* pSrcBitmap,
+ int src_left,
+ int src_top,
+ FX_DWORD* dst_plt,
+ void* pIccTransform) {
+ _ConvertBuffer_IndexCopy(dest_buf, dest_pitch, width, height, pSrcBitmap,
+ src_left, src_top);
+ FX_DWORD* src_plt = pSrcBitmap->GetPalette();
+ int plt_size = pSrcBitmap->GetPaletteSize();
+ if (pIccTransform) {
+ FX_DWORD plt[256];
+ uint8_t* bgr_ptr = (uint8_t*)plt;
+ if (pSrcBitmap->IsCmykImage()) {
+ for (int i = 0; i < plt_size; i++) {
+ plt[i] = FXCMYK_TODIB(src_plt[i]);
+ }
} else {
- if (pSrcBitmap->IsCmykImage()) {
- for (int row = 0; row < height; row ++) {
- uint8_t* dest_scan = dest_buf + row * dest_pitch;
- const uint8_t* src_scan = pSrcBitmap->GetScanline(src_top + row) + src_left * 4;
- for (int col = 0; col < width; col ++) {
- uint8_t r, g, b;
- AdobeCMYK_to_sRGB1(FXSYS_GetCValue((FX_DWORD)src_scan[0]), FXSYS_GetMValue((FX_DWORD)src_scan[1]), FXSYS_GetYValue((FX_DWORD)src_scan[2]), FXSYS_GetKValue((FX_DWORD)src_scan[3]),
- r, g, b);
- *dest_scan++ = FXRGB2GRAY(r, g, b);
- src_scan += 4;
- }
- }
- } else {
- for (int row = 0; row < height; row ++) {
- uint8_t* dest_scan = dest_buf + row * dest_pitch;
- const uint8_t* src_scan = pSrcBitmap->GetScanline(src_top + row) + src_left * Bpp;
- for (int col = 0; col < width; col ++) {
- *dest_scan++ = FXRGB2GRAY(src_scan[2], src_scan[1], src_scan[0]);
- src_scan += Bpp;
- }
- }
- }
+ for (int i = 0; i < plt_size; i++) {
+ *bgr_ptr++ = FXARGB_B(src_plt[i]);
+ *bgr_ptr++ = FXARGB_G(src_plt[i]);
+ *bgr_ptr++ = FXARGB_R(src_plt[i]);
+ }
+ bgr_ptr = (uint8_t*)plt;
}
- return TRUE;
-}
-inline void _ConvertBuffer_IndexCopy(uint8_t* dest_buf, int dest_pitch, int width, int height,
- const CFX_DIBSource* pSrcBitmap, int src_left, int src_top)
-{
- if (pSrcBitmap->GetBPP() == 1) {
- for (int row = 0; row < height; row ++) {
- uint8_t* dest_scan = dest_buf + row * dest_pitch;
- FXSYS_memset(dest_scan, 0, width);
- const uint8_t* src_scan = pSrcBitmap->GetScanline(src_top + row);
- for (int col = src_left; col < src_left + width; col ++) {
- if (src_scan[col / 8] & (1 << (7 - col % 8))) {
- *dest_scan = 1;
- }
- dest_scan ++;
- }
- }
- } else {
- for (int row = 0; row < height; row ++) {
- uint8_t* dest_scan = dest_buf + row * dest_pitch;
- const uint8_t* src_scan = pSrcBitmap->GetScanline(src_top + row) + src_left;
- FXSYS_memcpy(dest_scan, src_scan, width);
- }
+ ICodec_IccModule* pIccModule =
+ CFX_GEModule::Get()->GetCodecModule()->GetIccModule();
+ pIccModule->TranslateScanline(pIccTransform, (uint8_t*)plt,
+ (const uint8_t*)plt, plt_size);
+ for (int i = 0; i < plt_size; i++) {
+ dst_plt[i] = FXARGB_MAKE(0xff, bgr_ptr[2], bgr_ptr[1], bgr_ptr[0]);
+ bgr_ptr += 3;
}
-}
-FX_BOOL _ConvertBuffer_Plt2PltRgb8(uint8_t* dest_buf, int dest_pitch, int width, int height,
- const CFX_DIBSource* pSrcBitmap, int src_left, int src_top, FX_DWORD* dst_plt, void* pIccTransform)
-{
- _ConvertBuffer_IndexCopy(dest_buf, dest_pitch, width, height, pSrcBitmap, src_left, src_top);
- FX_DWORD* src_plt = pSrcBitmap->GetPalette();
- int plt_size = pSrcBitmap->GetPaletteSize();
- if (pIccTransform) {
- FX_DWORD plt[256];
- uint8_t* bgr_ptr = (uint8_t*)plt;
- if (pSrcBitmap->IsCmykImage()) {
- for (int i = 0; i < plt_size; i ++) {
- plt[i] = FXCMYK_TODIB(src_plt[i]);
- }
- } else {
- for (int i = 0; i < plt_size; i ++) {
- *bgr_ptr++ = FXARGB_B(src_plt[i]);
- *bgr_ptr++ = FXARGB_G(src_plt[i]);
- *bgr_ptr++ = FXARGB_R(src_plt[i]);
- }
- bgr_ptr = (uint8_t*)plt;
- }
- ICodec_IccModule* pIccModule = CFX_GEModule::Get()->GetCodecModule()->GetIccModule();
- pIccModule->TranslateScanline(pIccTransform, (uint8_t*)plt, (const uint8_t*)plt, plt_size);
- for (int i = 0; i < plt_size; i ++) {
- dst_plt[i] = FXARGB_MAKE(0xff, bgr_ptr[2], bgr_ptr[1], bgr_ptr[0]);
- bgr_ptr += 3;
- }
+ } else {
+ if (pSrcBitmap->IsCmykImage()) {
+ for (int i = 0; i < plt_size; i++) {
+ uint8_t r, g, b;
+ AdobeCMYK_to_sRGB1(
+ FXSYS_GetCValue(src_plt[i]), FXSYS_GetMValue(src_plt[i]),
+ FXSYS_GetYValue(src_plt[i]), FXSYS_GetKValue(src_plt[i]), r, g, b);
+ dst_plt[i] = FXARGB_MAKE(0xff, r, g, b);
+ }
} else {
- if (pSrcBitmap->IsCmykImage()) {
- for (int i = 0; i < plt_size; i ++) {
- uint8_t r, g, b;
- AdobeCMYK_to_sRGB1(FXSYS_GetCValue(src_plt[i]), FXSYS_GetMValue(src_plt[i]), FXSYS_GetYValue(src_plt[i]), FXSYS_GetKValue(src_plt[i]),
- r, g, b);
- dst_plt[i] = FXARGB_MAKE(0xff, r, g, b);
- }
- } else {
- FXSYS_memcpy(dst_plt, src_plt, plt_size * 4);
- }
+ FXSYS_memcpy(dst_plt, src_plt, plt_size * 4);
}
- return TRUE;
+ }
+ return TRUE;
}
-inline FX_BOOL _ConvertBuffer_Rgb2PltRgb8_NoTransform(uint8_t* dest_buf, int dest_pitch, int width, int height,
- const CFX_DIBSource* pSrcBitmap, int src_left, int src_top, FX_DWORD* dst_plt)
-{
- int bpp = pSrcBitmap->GetBPP() / 8;
- int row, col;
- CFX_Palette palette;
- palette.BuildPalette(pSrcBitmap, FXDIB_PALETTE_LOC);
- FX_DWORD* cLut = palette.GetColorLut();
- FX_DWORD* aLut = palette.GetAmountLut();
- if (cLut == NULL || aLut == NULL) {
- return FALSE;
- }
- int lut = palette.Getlut();
- FX_DWORD* pPalette = palette.GetPalette();
- if (lut > 256) {
- int err, min_err;
- int lut_256 = lut - 256;
- for (row = 0; row < lut_256; row++) {
- min_err = 1000000;
- uint8_t r, g, b;
- _ColorDecode(cLut[row], r, g, b);
- int clrindex = 0;
- for (int col = 0; col < 256; col++) {
- FX_DWORD p_color = *(pPalette + col);
- int d_r = r - (uint8_t)(p_color >> 16);
- int d_g = g - (uint8_t)(p_color >> 8);
- int d_b = b - (uint8_t)(p_color);
- err = d_r * d_r + d_g * d_g + d_b * d_b;
- if (err < min_err) {
- min_err = err;
- clrindex = col;
- }
- }
- aLut[row] = clrindex;
+inline FX_BOOL _ConvertBuffer_Rgb2PltRgb8_NoTransform(
+ uint8_t* dest_buf,
+ int dest_pitch,
+ int width,
+ int height,
+ const CFX_DIBSource* pSrcBitmap,
+ int src_left,
+ int src_top,
+ FX_DWORD* dst_plt) {
+ int bpp = pSrcBitmap->GetBPP() / 8;
+ int row, col;
+ CFX_Palette palette;
+ palette.BuildPalette(pSrcBitmap, FXDIB_PALETTE_LOC);
+ FX_DWORD* cLut = palette.GetColorLut();
+ FX_DWORD* aLut = palette.GetAmountLut();
+ if (cLut == NULL || aLut == NULL) {
+ return FALSE;
+ }
+ int lut = palette.Getlut();
+ FX_DWORD* pPalette = palette.GetPalette();
+ if (lut > 256) {
+ int err, min_err;
+ int lut_256 = lut - 256;
+ for (row = 0; row < lut_256; row++) {
+ min_err = 1000000;
+ uint8_t r, g, b;
+ _ColorDecode(cLut[row], r, g, b);
+ int clrindex = 0;
+ for (int col = 0; col < 256; col++) {
+ FX_DWORD p_color = *(pPalette + col);
+ int d_r = r - (uint8_t)(p_color >> 16);
+ int d_g = g - (uint8_t)(p_color >> 8);
+ int d_b = b - (uint8_t)(p_color);
+ err = d_r * d_r + d_g * d_g + d_b * d_b;
+ if (err < min_err) {
+ min_err = err;
+ clrindex = col;
}
+ }
+ aLut[row] = clrindex;
}
- int32_t lut_1 = lut - 1;
- for (row = 0; row < height; row ++) {
- uint8_t* src_scan = (uint8_t*)pSrcBitmap->GetScanline(src_top + row) + src_left;
- uint8_t* dest_scan = dest_buf + row * dest_pitch;
- for (col = 0; col < width; col++) {
- uint8_t* src_port = src_scan + col * bpp;
- int r = src_port[2] & 0xf0;
- int g = src_port[1] & 0xf0;
- int b = src_port[0] & 0xf0;
- FX_DWORD clrindex = (r << 4) + g + (b >> 4);
- for (int i = lut_1; i >= 0; i--)
- if (clrindex == cLut[i]) {
- *(dest_scan + col) = (uint8_t)(aLut[i]);
- break;
- }
+ }
+ int32_t lut_1 = lut - 1;
+ for (row = 0; row < height; row++) {
+ uint8_t* src_scan =
+ (uint8_t*)pSrcBitmap->GetScanline(src_top + row) + src_left;
+ uint8_t* dest_scan = dest_buf + row * dest_pitch;
+ for (col = 0; col < width; col++) {
+ uint8_t* src_port = src_scan + col * bpp;
+ int r = src_port[2] & 0xf0;
+ int g = src_port[1] & 0xf0;
+ int b = src_port[0] & 0xf0;
+ FX_DWORD clrindex = (r << 4) + g + (b >> 4);
+ for (int i = lut_1; i >= 0; i--)
+ if (clrindex == cLut[i]) {
+ *(dest_scan + col) = (uint8_t)(aLut[i]);
+ break;
}
}
- FXSYS_memcpy(dst_plt, pPalette, sizeof(FX_DWORD) * 256);
- return TRUE;
+ }
+ FXSYS_memcpy(dst_plt, pPalette, sizeof(FX_DWORD) * 256);
+ return TRUE;
}
-FX_BOOL _ConvertBuffer_Rgb2PltRgb8(uint8_t* dest_buf, int dest_pitch, int width, int height,
- const CFX_DIBSource* pSrcBitmap, int src_left, int src_top, FX_DWORD* dst_plt, void* pIccTransform)
-{
- FX_BOOL ret = _ConvertBuffer_Rgb2PltRgb8_NoTransform(dest_buf, dest_pitch, width, height, pSrcBitmap, src_left, src_top, dst_plt);
- if (ret && pIccTransform) {
- ICodec_IccModule* pIccModule = CFX_GEModule::Get()->GetCodecModule()->GetIccModule();
- for (int i = 0; i < 256; i++) {
- FX_ARGB* plt = dst_plt + i;
- FX_ARGB plt_entry = FXARGB_TODIB(*plt);
- pIccModule->TranslateScanline(pIccTransform, (uint8_t*)&plt_entry, (const uint8_t*)&plt_entry, 1);
- *plt = FXARGB_TODIB(plt_entry);
- }
+FX_BOOL _ConvertBuffer_Rgb2PltRgb8(uint8_t* dest_buf,
+ int dest_pitch,
+ int width,
+ int height,
+ const CFX_DIBSource* pSrcBitmap,
+ int src_left,
+ int src_top,
+ FX_DWORD* dst_plt,
+ void* pIccTransform) {
+ FX_BOOL ret = _ConvertBuffer_Rgb2PltRgb8_NoTransform(
+ dest_buf, dest_pitch, width, height, pSrcBitmap, src_left, src_top,
+ dst_plt);
+ if (ret && pIccTransform) {
+ ICodec_IccModule* pIccModule =
+ CFX_GEModule::Get()->GetCodecModule()->GetIccModule();
+ for (int i = 0; i < 256; i++) {
+ FX_ARGB* plt = dst_plt + i;
+ FX_ARGB plt_entry = FXARGB_TODIB(*plt);
+ pIccModule->TranslateScanline(pIccTransform, (uint8_t*)&plt_entry,
+ (const uint8_t*)&plt_entry, 1);
+ *plt = FXARGB_TODIB(plt_entry);
}
- return ret;
+ }
+ return ret;
}
-FX_BOOL _ConvertBuffer_1bppMask2Rgb(FXDIB_Format dst_format, uint8_t* dest_buf, int dest_pitch, int width, int height,
- const CFX_DIBSource* pSrcBitmap, int src_left, int src_top)
-{
- int comps = (dst_format & 0xff) / 8;
- uint8_t set_gray, reset_gray;
- set_gray = 0xff;
- reset_gray = 0x00;
- for (int row = 0; row < height; row ++) {
- uint8_t* dest_scan = dest_buf + row * dest_pitch;
- const uint8_t* src_scan = pSrcBitmap->GetScanline(src_top + row);
- for (int col = src_left; col < src_left + width; col ++) {
- if (src_scan[col / 8] & (1 << (7 - col % 8))) {
- dest_scan[0] = set_gray;
- dest_scan[1] = set_gray;
- dest_scan[2] = set_gray;
- } else {
- dest_scan[0] = reset_gray;
- dest_scan[1] = reset_gray;
- dest_scan[2] = reset_gray;
- }
- dest_scan += comps;
- }
+FX_BOOL _ConvertBuffer_1bppMask2Rgb(FXDIB_Format dst_format,
+ uint8_t* dest_buf,
+ int dest_pitch,
+ int width,
+ int height,
+ const CFX_DIBSource* pSrcBitmap,
+ int src_left,
+ int src_top) {
+ int comps = (dst_format & 0xff) / 8;
+ uint8_t set_gray, reset_gray;
+ set_gray = 0xff;
+ reset_gray = 0x00;
+ for (int row = 0; row < height; row++) {
+ uint8_t* dest_scan = dest_buf + row * dest_pitch;
+ const uint8_t* src_scan = pSrcBitmap->GetScanline(src_top + row);
+ for (int col = src_left; col < src_left + width; col++) {
+ if (src_scan[col / 8] & (1 << (7 - col % 8))) {
+ dest_scan[0] = set_gray;
+ dest_scan[1] = set_gray;
+ dest_scan[2] = set_gray;
+ } else {
+ dest_scan[0] = reset_gray;
+ dest_scan[1] = reset_gray;
+ dest_scan[2] = reset_gray;
+ }
+ dest_scan += comps;
}
- return TRUE;
+ }
+ return TRUE;
}
-FX_BOOL _ConvertBuffer_8bppMask2Rgb(FXDIB_Format dst_format, uint8_t* dest_buf, int dest_pitch, int width, int height,
- const CFX_DIBSource* pSrcBitmap, int src_left, int src_top)
-{
- int comps = (dst_format & 0xff) / 8;
- for (int row = 0; row < height; row ++) {
- uint8_t* dest_scan = dest_buf + row * dest_pitch;
- const uint8_t* src_scan = pSrcBitmap->GetScanline(src_top + row) + src_left;
- uint8_t src_pixel;
- for (int col = 0; col < width; col ++) {
- src_pixel = *src_scan++;
- *dest_scan++ = src_pixel;
- *dest_scan++ = src_pixel;
- *dest_scan = src_pixel;
- dest_scan += comps - 2;
- }
+FX_BOOL _ConvertBuffer_8bppMask2Rgb(FXDIB_Format dst_format,
+ uint8_t* dest_buf,
+ int dest_pitch,
+ int width,
+ int height,
+ const CFX_DIBSource* pSrcBitmap,
+ int src_left,
+ int src_top) {
+ int comps = (dst_format & 0xff) / 8;
+ for (int row = 0; row < height; row++) {
+ uint8_t* dest_scan = dest_buf + row * dest_pitch;
+ const uint8_t* src_scan = pSrcBitmap->GetScanline(src_top + row) + src_left;
+ uint8_t src_pixel;
+ for (int col = 0; col < width; col++) {
+ src_pixel = *src_scan++;
+ *dest_scan++ = src_pixel;
+ *dest_scan++ = src_pixel;
+ *dest_scan = src_pixel;
+ dest_scan += comps - 2;
}
- return TRUE;
+ }
+ return TRUE;
}
-FX_BOOL _ConvertBuffer_1bppPlt2Rgb(FXDIB_Format dst_format, uint8_t* dest_buf, int dest_pitch, int width, int height,
- const CFX_DIBSource* pSrcBitmap, int src_left, int src_top, void* pIccTransform)
-{
- int comps = (dst_format & 0xff) / 8;
- FX_DWORD* src_plt = pSrcBitmap->GetPalette();
- FX_DWORD plt[2];
- uint8_t* bgr_ptr = (uint8_t*)plt;
+FX_BOOL _ConvertBuffer_1bppPlt2Rgb(FXDIB_Format dst_format,
+ uint8_t* dest_buf,
+ int dest_pitch,
+ int width,
+ int height,
+ const CFX_DIBSource* pSrcBitmap,
+ int src_left,
+ int src_top,
+ void* pIccTransform) {
+ int comps = (dst_format & 0xff) / 8;
+ FX_DWORD* src_plt = pSrcBitmap->GetPalette();
+ FX_DWORD plt[2];
+ uint8_t* bgr_ptr = (uint8_t*)plt;
+ if (pSrcBitmap->IsCmykImage()) {
+ plt[0] = FXCMYK_TODIB(src_plt[0]);
+ plt[1] = FXCMYK_TODIB(src_plt[1]);
+ } else {
+ bgr_ptr[0] = FXARGB_B(src_plt[0]);
+ bgr_ptr[1] = FXARGB_G(src_plt[0]);
+ bgr_ptr[2] = FXARGB_R(src_plt[0]);
+ bgr_ptr[3] = FXARGB_B(src_plt[1]);
+ bgr_ptr[4] = FXARGB_G(src_plt[1]);
+ bgr_ptr[5] = FXARGB_R(src_plt[1]);
+ }
+ if (pIccTransform) {
+ ICodec_IccModule* pIccModule =
+ CFX_GEModule::Get()->GetCodecModule()->GetIccModule();
+ pIccModule->TranslateScanline(pIccTransform, (uint8_t*)plt,
+ (const uint8_t*)plt, 2);
+ } else {
if (pSrcBitmap->IsCmykImage()) {
- plt[0] = FXCMYK_TODIB(src_plt[0]);
- plt[1] = FXCMYK_TODIB(src_plt[1]);
- } else {
- bgr_ptr[0] = FXARGB_B(src_plt[0]);
- bgr_ptr[1] = FXARGB_G(src_plt[0]);
- bgr_ptr[2] = FXARGB_R(src_plt[0]);
- bgr_ptr[3] = FXARGB_B(src_plt[1]);
- bgr_ptr[4] = FXARGB_G(src_plt[1]);
- bgr_ptr[5] = FXARGB_R(src_plt[1]);
+ AdobeCMYK_to_sRGB1(
+ FXSYS_GetCValue(src_plt[0]), FXSYS_GetMValue(src_plt[0]),
+ FXSYS_GetYValue(src_plt[0]), FXSYS_GetKValue(src_plt[0]), bgr_ptr[2],
+ bgr_ptr[1], bgr_ptr[0]);
+ AdobeCMYK_to_sRGB1(
+ FXSYS_GetCValue(src_plt[1]), FXSYS_GetMValue(src_plt[1]),
+ FXSYS_GetYValue(src_plt[1]), FXSYS_GetKValue(src_plt[1]), bgr_ptr[5],
+ bgr_ptr[4], bgr_ptr[3]);
}
- if (pIccTransform) {
- ICodec_IccModule* pIccModule = CFX_GEModule::Get()->GetCodecModule()->GetIccModule();
- pIccModule->TranslateScanline(pIccTransform, (uint8_t*)plt, (const uint8_t*)plt, 2);
- } else {
- if (pSrcBitmap->IsCmykImage()) {
- AdobeCMYK_to_sRGB1(FXSYS_GetCValue(src_plt[0]), FXSYS_GetMValue(src_plt[0]), FXSYS_GetYValue(src_plt[0]), FXSYS_GetKValue(src_plt[0]),
- bgr_ptr[2], bgr_ptr[1], bgr_ptr[0]);
- AdobeCMYK_to_sRGB1(FXSYS_GetCValue(src_plt[1]), FXSYS_GetMValue(src_plt[1]), FXSYS_GetYValue(src_plt[1]), FXSYS_GetKValue(src_plt[1]),
- bgr_ptr[5], bgr_ptr[4], bgr_ptr[3]);
- }
+ }
+ for (int row = 0; row < height; row++) {
+ uint8_t* dest_scan = dest_buf + row * dest_pitch;
+ const uint8_t* src_scan = pSrcBitmap->GetScanline(src_top + row);
+ for (int col = src_left; col < src_left + width; col++) {
+ if (src_scan[col / 8] & (1 << (7 - col % 8))) {
+ *dest_scan++ = bgr_ptr[3];
+ *dest_scan++ = bgr_ptr[4];
+ *dest_scan = bgr_ptr[5];
+ } else {
+ *dest_scan++ = bgr_ptr[0];
+ *dest_scan++ = bgr_ptr[1];
+ *dest_scan = bgr_ptr[2];
+ }
+ dest_scan += comps - 2;
}
- for (int row = 0; row < height; row ++) {
- uint8_t* dest_scan = dest_buf + row * dest_pitch;
- const uint8_t* src_scan = pSrcBitmap->GetScanline(src_top + row);
- for (int col = src_left; col < src_left + width; col ++) {
- if (src_scan[col / 8] & (1 << (7 - col % 8))) {
- *dest_scan++ = bgr_ptr[3];
- *dest_scan++ = bgr_ptr[4];
- *dest_scan = bgr_ptr[5];
- } else {
- *dest_scan++ = bgr_ptr[0];
- *dest_scan++ = bgr_ptr[1];
- *dest_scan = bgr_ptr[2];
- }
- dest_scan += comps - 2;
- }
- }
- return TRUE;
+ }
+ return TRUE;
}
-FX_BOOL _ConvertBuffer_8bppPlt2Rgb(FXDIB_Format dst_format, uint8_t* dest_buf, int dest_pitch, int width, int height,
- const CFX_DIBSource* pSrcBitmap, int src_left, int src_top, void* pIccTransform)
-{
- int comps = (dst_format & 0xff) / 8;
- FX_DWORD* src_plt = pSrcBitmap->GetPalette();
- FX_DWORD plt[256];
- uint8_t* bgr_ptr = (uint8_t*)plt;
- if (!pSrcBitmap->IsCmykImage()) {
- for (int i = 0; i < 256; i++) {
- *bgr_ptr++ = FXARGB_B(src_plt[i]);
- *bgr_ptr++ = FXARGB_G(src_plt[i]);
- *bgr_ptr++ = FXARGB_R(src_plt[i]);
- }
- bgr_ptr = (uint8_t*)plt;
+FX_BOOL _ConvertBuffer_8bppPlt2Rgb(FXDIB_Format dst_format,
+ uint8_t* dest_buf,
+ int dest_pitch,
+ int width,
+ int height,
+ const CFX_DIBSource* pSrcBitmap,
+ int src_left,
+ int src_top,
+ void* pIccTransform) {
+ int comps = (dst_format & 0xff) / 8;
+ FX_DWORD* src_plt = pSrcBitmap->GetPalette();
+ FX_DWORD plt[256];
+ uint8_t* bgr_ptr = (uint8_t*)plt;
+ if (!pSrcBitmap->IsCmykImage()) {
+ for (int i = 0; i < 256; i++) {
+ *bgr_ptr++ = FXARGB_B(src_plt[i]);
+ *bgr_ptr++ = FXARGB_G(src_plt[i]);
+ *bgr_ptr++ = FXARGB_R(src_plt[i]);
}
- if (pIccTransform) {
- if (pSrcBitmap->IsCmykImage()) {
- for (int i = 0; i < 256; i++) {
- plt[i] = FXCMYK_TODIB(src_plt[i]);
- }
- }
- ICodec_IccModule* pIccModule = CFX_GEModule::Get()->GetCodecModule()->GetIccModule();
- pIccModule->TranslateScanline(pIccTransform, (uint8_t*)plt, (const uint8_t*)plt, 256);
- } else {
- if (pSrcBitmap->IsCmykImage()) {
- for (int i = 0; i < 256; i++) {
- AdobeCMYK_to_sRGB1(FXSYS_GetCValue(src_plt[i]), FXSYS_GetMValue(src_plt[i]), FXSYS_GetYValue(src_plt[i]), FXSYS_GetKValue(src_plt[i]),
- bgr_ptr[2], bgr_ptr[1], bgr_ptr[0]);
- bgr_ptr += 3;
- }
- bgr_ptr = (uint8_t*)plt;
- }
+ bgr_ptr = (uint8_t*)plt;
+ }
+ if (pIccTransform) {
+ if (pSrcBitmap->IsCmykImage()) {
+ for (int i = 0; i < 256; i++) {
+ plt[i] = FXCMYK_TODIB(src_plt[i]);
+ }
}
- for (int row = 0; row < height; row ++) {
- uint8_t* dest_scan = dest_buf + row * dest_pitch;
- const uint8_t* src_scan = pSrcBitmap->GetScanline(src_top + row) + src_left;
- for (int col = 0; col < width; col ++) {
- uint8_t* src_pixel = bgr_ptr + 3 * (*src_scan++);
- *dest_scan++ = *src_pixel++;
- *dest_scan++ = *src_pixel++;
- *dest_scan = *src_pixel++;
- dest_scan += comps - 2;
- }
+ ICodec_IccModule* pIccModule =
+ CFX_GEModule::Get()->GetCodecModule()->GetIccModule();
+ pIccModule->TranslateScanline(pIccTransform, (uint8_t*)plt,
+ (const uint8_t*)plt, 256);
+ } else {
+ if (pSrcBitmap->IsCmykImage()) {
+ for (int i = 0; i < 256; i++) {
+ AdobeCMYK_to_sRGB1(
+ FXSYS_GetCValue(src_plt[i]), FXSYS_GetMValue(src_plt[i]),
+ FXSYS_GetYValue(src_plt[i]), FXSYS_GetKValue(src_plt[i]),
+ bgr_ptr[2], bgr_ptr[1], bgr_ptr[0]);
+ bgr_ptr += 3;
+ }
+ bgr_ptr = (uint8_t*)plt;
}
- return TRUE;
-}
-FX_BOOL _ConvertBuffer_24bppRgb2Rgb24(uint8_t* dest_buf, int dest_pitch, int width, int height,
- const CFX_DIBSource* pSrcBitmap, int src_left, int src_top, void* pIccTransform)
-{
- if (pIccTransform) {
- ICodec_IccModule* pIccModule = CFX_GEModule::Get()->GetCodecModule()->GetIccModule();
- for (int row = 0; row < height; row ++) {
- uint8_t* dest_scan = dest_buf + row * dest_pitch;
- const uint8_t* src_scan = pSrcBitmap->GetScanline(src_top + row) + src_left * 3;
- pIccModule->TranslateScanline(pIccTransform, dest_scan, src_scan, width);
- }
- } else {
- for (int row = 0; row < height; row ++) {
- uint8_t* dest_scan = dest_buf + row * dest_pitch;
- const uint8_t* src_scan = pSrcBitmap->GetScanline(src_top + row) + src_left * 3;
- FXSYS_memcpy(dest_scan, src_scan, width * 3);
- }
+ }
+ for (int row = 0; row < height; row++) {
+ uint8_t* dest_scan = dest_buf + row * dest_pitch;
+ const uint8_t* src_scan = pSrcBitmap->GetScanline(src_top + row) + src_left;
+ for (int col = 0; col < width; col++) {
+ uint8_t* src_pixel = bgr_ptr + 3 * (*src_scan++);
+ *dest_scan++ = *src_pixel++;
+ *dest_scan++ = *src_pixel++;
+ *dest_scan = *src_pixel++;
+ dest_scan += comps - 2;
}
- return TRUE;
+ }
+ return TRUE;
}
-FX_BOOL _ConvertBuffer_32bppRgb2Rgb24(uint8_t* dest_buf, int dest_pitch, int width, int height,
- const CFX_DIBSource* pSrcBitmap, int src_left, int src_top, void* pIccTransform)
-{
- for (int row = 0; row < height; row ++) {
- uint8_t* dest_scan = dest_buf + row * dest_pitch;
- const uint8_t* src_scan = pSrcBitmap->GetScanline(src_top + row) + src_left * 4;
- for (int col = 0; col < width; col ++) {
- *dest_scan++ = *src_scan++;
- *dest_scan++ = *src_scan++;
- *dest_scan++ = *src_scan++;
- src_scan++;
- }
+FX_BOOL _ConvertBuffer_24bppRgb2Rgb24(uint8_t* dest_buf,
+ int dest_pitch,
+ int width,
+ int height,
+ const CFX_DIBSource* pSrcBitmap,
+ int src_left,
+ int src_top,
+ void* pIccTransform) {
+ if (pIccTransform) {
+ ICodec_IccModule* pIccModule =
+ CFX_GEModule::Get()->GetCodecModule()->GetIccModule();
+ for (int row = 0; row < height; row++) {
+ uint8_t* dest_scan = dest_buf + row * dest_pitch;
+ const uint8_t* src_scan =
+ pSrcBitmap->GetScanline(src_top + row) + src_left * 3;
+ pIccModule->TranslateScanline(pIccTransform, dest_scan, src_scan, width);
}
- if (pIccTransform) {
- ICodec_IccModule* pIccModule = CFX_GEModule::Get()->GetCodecModule()->GetIccModule();
- for (int row = 0; row < height; row ++) {
- uint8_t* dest_scan = dest_buf + row * dest_pitch;
- pIccModule->TranslateScanline(pIccTransform, dest_scan, dest_scan, width);
- }
+ } else {
+ for (int row = 0; row < height; row++) {
+ uint8_t* dest_scan = dest_buf + row * dest_pitch;
+ const uint8_t* src_scan =
+ pSrcBitmap->GetScanline(src_top + row) + src_left * 3;
+ FXSYS_memcpy(dest_scan, src_scan, width * 3);
}
- return TRUE;
+ }
+ return TRUE;
}
-FX_BOOL _ConvertBuffer_Rgb2Rgb32(uint8_t* dest_buf, int dest_pitch, int width, int height,
- const CFX_DIBSource* pSrcBitmap, int src_left, int src_top, void* pIccTransform)
-{
- int comps = pSrcBitmap->GetBPP() / 8;
- if (pIccTransform) {
- ICodec_IccModule* pIccModule = CFX_GEModule::Get()->GetCodecModule()->GetIccModule();
- for (int row = 0; row < height; row ++) {
- uint8_t* dest_scan = dest_buf + row * dest_pitch;
- const uint8_t* src_scan = pSrcBitmap->GetScanline(src_top + row) + src_left * comps;
- for (int col = 0; col < width; col ++) {
- pIccModule->TranslateScanline(pIccTransform, dest_scan, src_scan, 1);
- dest_scan += 4;
- src_scan += comps;
- }
- }
- } else {
- for (int row = 0; row < height; row ++) {
- uint8_t* dest_scan = dest_buf + row * dest_pitch;
- const uint8_t* src_scan = pSrcBitmap->GetScanline(src_top + row) + src_left * comps;
- for (int col = 0; col < width; col ++) {
- *dest_scan++ = *src_scan++;
- *dest_scan++ = *src_scan++;
- *dest_scan++ = *src_scan++;
- dest_scan++;
- src_scan += comps - 3;
- }
- }
+FX_BOOL _ConvertBuffer_32bppRgb2Rgb24(uint8_t* dest_buf,
+ int dest_pitch,
+ int width,
+ int height,
+ const CFX_DIBSource* pSrcBitmap,
+ int src_left,
+ int src_top,
+ void* pIccTransform) {
+ for (int row = 0; row < height; row++) {
+ uint8_t* dest_scan = dest_buf + row * dest_pitch;
+ const uint8_t* src_scan =
+ pSrcBitmap->GetScanline(src_top + row) + src_left * 4;
+ for (int col = 0; col < width; col++) {
+ *dest_scan++ = *src_scan++;
+ *dest_scan++ = *src_scan++;
+ *dest_scan++ = *src_scan++;
+ src_scan++;
}
- return TRUE;
-}
-FX_BOOL _ConvertBuffer_32bppCmyk2Rgb32(uint8_t* dest_buf, int dest_pitch, int width, int height,
- const CFX_DIBSource* pSrcBitmap, int src_left, int src_top, void* pIccTransform)
-{
- if (pIccTransform) {
- ICodec_IccModule* pIccModule = CFX_GEModule::Get()->GetCodecModule()->GetIccModule();
- for (int row = 0; row < height; row ++) {
- uint8_t* dest_scan = dest_buf + row * dest_pitch;
- const uint8_t* src_scan = pSrcBitmap->GetScanline(src_top + row) + src_left * 4;
- for (int col = 0; col < width; col ++) {
- pIccModule->TranslateScanline(pIccTransform, dest_scan, src_scan, 1);
- dest_scan += 4;
- src_scan += 4;
- }
- }
- } else {
- for (int row = 0; row < height; row ++) {
- uint8_t* dest_scan = dest_buf + row * dest_pitch;
- const uint8_t* src_scan = pSrcBitmap->GetScanline(src_top + row) + src_left * 4;
- for (int col = 0; col < width; col ++) {
- AdobeCMYK_to_sRGB1(src_scan[0], src_scan[1], src_scan[2], src_scan[3],
- dest_scan[2], dest_scan[1], dest_scan[0]);
- dest_scan += 4;
- src_scan += 4;
- }
- }
+ }
+ if (pIccTransform) {
+ ICodec_IccModule* pIccModule =
+ CFX_GEModule::Get()->GetCodecModule()->GetIccModule();
+ for (int row = 0; row < height; row++) {
+ uint8_t* dest_scan = dest_buf + row * dest_pitch;
+ pIccModule->TranslateScanline(pIccTransform, dest_scan, dest_scan, width);
}
- return TRUE;
+ }
+ return TRUE;
}
-FX_BOOL ConvertBuffer(FXDIB_Format dest_format, uint8_t* dest_buf, int dest_pitch, int width, int height,
- const CFX_DIBSource* pSrcBitmap, int src_left, int src_top, FX_DWORD*& d_pal, void* pIccTransform)
-{
- FXDIB_Format src_format = pSrcBitmap->GetFormat();
- if (!CFX_GEModule::Get()->GetCodecModule() || !CFX_GEModule::Get()->GetCodecModule()->GetIccModule()) {
- pIccTransform = NULL;
+FX_BOOL _ConvertBuffer_Rgb2Rgb32(uint8_t* dest_buf,
+ int dest_pitch,
+ int width,
+ int height,
+ const CFX_DIBSource* pSrcBitmap,
+ int src_left,
+ int src_top,
+ void* pIccTransform) {
+ int comps = pSrcBitmap->GetBPP() / 8;
+ if (pIccTransform) {
+ ICodec_IccModule* pIccModule =
+ CFX_GEModule::Get()->GetCodecModule()->GetIccModule();
+ for (int row = 0; row < height; row++) {
+ uint8_t* dest_scan = dest_buf + row * dest_pitch;
+ const uint8_t* src_scan =
+ pSrcBitmap->GetScanline(src_top + row) + src_left * comps;
+ for (int col = 0; col < width; col++) {
+ pIccModule->TranslateScanline(pIccTransform, dest_scan, src_scan, 1);
+ dest_scan += 4;
+ src_scan += comps;
+ }
}
- switch (dest_format) {
- case FXDIB_Invalid:
- case FXDIB_1bppCmyk:
- case FXDIB_1bppMask:
- case FXDIB_1bppRgb:
- ASSERT(FALSE);
- return FALSE;
- case FXDIB_8bppMask: {
- if ((src_format & 0xff) == 1) {
- if (pSrcBitmap->GetPalette()) {
- return _ConvertBuffer_1bppPlt2Gray(dest_buf, dest_pitch, width, height, pSrcBitmap, src_left, src_top, pIccTransform);
- }
- return _ConvertBuffer_1bppMask2Gray(dest_buf, dest_pitch, width, height, pSrcBitmap, src_left, src_top);
- }
- if ((src_format & 0xff) == 8) {
- if (pSrcBitmap->GetPalette()) {
- return _ConvertBuffer_8bppPlt2Gray(dest_buf, dest_pitch, width, height, pSrcBitmap, src_left, src_top, pIccTransform);
- }
- return _ConvertBuffer_8bppMask2Gray(dest_buf, dest_pitch, width, height, pSrcBitmap, src_left, src_top);
- }
- if ((src_format & 0xff) >= 24) {
- return _ConvertBuffer_RgbOrCmyk2Gray(dest_buf, dest_pitch, width, height, pSrcBitmap, src_left, src_top, pIccTransform);
- }
- return FALSE;
- }
- case FXDIB_8bppRgb:
- case FXDIB_8bppRgba: {
- if ((src_format & 0xff) == 8 && pSrcBitmap->GetPalette() == NULL) {
- return ConvertBuffer(FXDIB_8bppMask, dest_buf, dest_pitch, width, height, pSrcBitmap, src_left, src_top, d_pal, pIccTransform);
- }
- d_pal = FX_Alloc(FX_DWORD, 256);
- if (((src_format & 0xff) == 1 || (src_format & 0xff) == 8) && pSrcBitmap->GetPalette()) {
- return _ConvertBuffer_Plt2PltRgb8(dest_buf, dest_pitch, width, height, pSrcBitmap, src_left, src_top, d_pal, pIccTransform);
- }
- if ((src_format & 0xff) >= 24) {
- return _ConvertBuffer_Rgb2PltRgb8(dest_buf, dest_pitch, width, height, pSrcBitmap, src_left, src_top, d_pal, pIccTransform);
- }
- return FALSE;
- }
- case FXDIB_Rgb:
- case FXDIB_Rgba: {
- if ((src_format & 0xff) == 1) {
- if (pSrcBitmap->GetPalette()) {
- return _ConvertBuffer_1bppPlt2Rgb(dest_format, dest_buf, dest_pitch, width, height, pSrcBitmap, src_left, src_top, pIccTransform);
- }
- return _ConvertBuffer_1bppMask2Rgb(dest_format, dest_buf, dest_pitch, width, height, pSrcBitmap, src_left, src_top);
- }
- if ((src_format & 0xff) == 8) {
- if (pSrcBitmap->GetPalette()) {
- return _ConvertBuffer_8bppPlt2Rgb(dest_format, dest_buf, dest_pitch, width, height, pSrcBitmap, src_left, src_top, pIccTransform);
- }
- return _ConvertBuffer_8bppMask2Rgb(dest_format, dest_buf, dest_pitch, width, height, pSrcBitmap, src_left, src_top);
- }
- if ((src_format & 0xff) == 24) {
- return _ConvertBuffer_24bppRgb2Rgb24(dest_buf, dest_pitch, width, height, pSrcBitmap, src_left, src_top, pIccTransform);
- }
- if ((src_format & 0xff) == 32) {
- return _ConvertBuffer_32bppRgb2Rgb24(dest_buf, dest_pitch, width, height, pSrcBitmap, src_left, src_top, pIccTransform);
- }
- return FALSE;
- }
- case FXDIB_Argb:
- case FXDIB_Rgb32: {
- if ((src_format & 0xff) == 1) {
- if (pSrcBitmap->GetPalette()) {
- return _ConvertBuffer_1bppPlt2Rgb(dest_format, dest_buf, dest_pitch, width, height, pSrcBitmap, src_left, src_top, pIccTransform);
- }
- return _ConvertBuffer_1bppMask2Rgb(dest_format, dest_buf, dest_pitch, width, height, pSrcBitmap, src_left, src_top);
- }
- if ((src_format & 0xff) == 8) {
- if (pSrcBitmap->GetPalette()) {
- return _ConvertBuffer_8bppPlt2Rgb(dest_format, dest_buf, dest_pitch, width, height, pSrcBitmap, src_left, src_top, pIccTransform);
- }
- return _ConvertBuffer_8bppMask2Rgb(dest_format, dest_buf, dest_pitch, width, height, pSrcBitmap, src_left, src_top);
- }
- if ((src_format & 0xff) >= 24) {
- if (src_format & 0x0400) {
- return _ConvertBuffer_32bppCmyk2Rgb32(dest_buf, dest_pitch, width, height, pSrcBitmap, src_left, src_top, pIccTransform);
- }
- return _ConvertBuffer_Rgb2Rgb32(dest_buf, dest_pitch, width, height, pSrcBitmap, src_left, src_top, pIccTransform);
- }
- return FALSE;
- }
- default:
- return FALSE;
+ } else {
+ for (int row = 0; row < height; row++) {
+ uint8_t* dest_scan = dest_buf + row * dest_pitch;
+ const uint8_t* src_scan =
+ pSrcBitmap->GetScanline(src_top + row) + src_left * comps;
+ for (int col = 0; col < width; col++) {
+ *dest_scan++ = *src_scan++;
+ *dest_scan++ = *src_scan++;
+ *dest_scan++ = *src_scan++;
+ dest_scan++;
+ src_scan += comps - 3;
+ }
}
- return FALSE;
+ }
+ return TRUE;
}
-CFX_DIBitmap* CFX_DIBSource::CloneConvert(FXDIB_Format dest_format, const FX_RECT* pClip, void* pIccTransform) const
-{
- if(dest_format == GetFormat() && pIccTransform == NULL) {
- return Clone(pClip);
+FX_BOOL _ConvertBuffer_32bppCmyk2Rgb32(uint8_t* dest_buf,
+ int dest_pitch,
+ int width,
+ int height,
+ const CFX_DIBSource* pSrcBitmap,
+ int src_left,
+ int src_top,
+ void* pIccTransform) {
+ if (pIccTransform) {
+ ICodec_IccModule* pIccModule =
+ CFX_GEModule::Get()->GetCodecModule()->GetIccModule();
+ for (int row = 0; row < height; row++) {
+ uint8_t* dest_scan = dest_buf + row * dest_pitch;
+ const uint8_t* src_scan =
+ pSrcBitmap->GetScanline(src_top + row) + src_left * 4;
+ for (int col = 0; col < width; col++) {
+ pIccModule->TranslateScanline(pIccTransform, dest_scan, src_scan, 1);
+ dest_scan += 4;
+ src_scan += 4;
+ }
+ }
+ } else {
+ for (int row = 0; row < height; row++) {
+ uint8_t* dest_scan = dest_buf + row * dest_pitch;
+ const uint8_t* src_scan =
+ pSrcBitmap->GetScanline(src_top + row) + src_left * 4;
+ for (int col = 0; col < width; col++) {
+ AdobeCMYK_to_sRGB1(src_scan[0], src_scan[1], src_scan[2], src_scan[3],
+ dest_scan[2], dest_scan[1], dest_scan[0]);
+ dest_scan += 4;
+ src_scan += 4;
+ }
}
- if (pClip) {
- CFX_DIBitmap* pClone = Clone(pClip);
- if (pClone == NULL) {
- return NULL;
+ }
+ return TRUE;
+}
+FX_BOOL ConvertBuffer(FXDIB_Format dest_format,
+ uint8_t* dest_buf,
+ int dest_pitch,
+ int width,
+ int height,
+ const CFX_DIBSource* pSrcBitmap,
+ int src_left,
+ int src_top,
+ FX_DWORD*& d_pal,
+ void* pIccTransform) {
+ FXDIB_Format src_format = pSrcBitmap->GetFormat();
+ if (!CFX_GEModule::Get()->GetCodecModule() ||
+ !CFX_GEModule::Get()->GetCodecModule()->GetIccModule()) {
+ pIccTransform = NULL;
+ }
+ switch (dest_format) {
+ case FXDIB_Invalid:
+ case FXDIB_1bppCmyk:
+ case FXDIB_1bppMask:
+ case FXDIB_1bppRgb:
+ ASSERT(FALSE);
+ return FALSE;
+ case FXDIB_8bppMask: {
+ if ((src_format & 0xff) == 1) {
+ if (pSrcBitmap->GetPalette()) {
+ return _ConvertBuffer_1bppPlt2Gray(dest_buf, dest_pitch, width,
+ height, pSrcBitmap, src_left,
+ src_top, pIccTransform);
}
- if(!pClone->ConvertFormat(dest_format, pIccTransform)) {
- delete pClone;
- return NULL;
+ return _ConvertBuffer_1bppMask2Gray(dest_buf, dest_pitch, width, height,
+ pSrcBitmap, src_left, src_top);
+ }
+ if ((src_format & 0xff) == 8) {
+ if (pSrcBitmap->GetPalette()) {
+ return _ConvertBuffer_8bppPlt2Gray(dest_buf, dest_pitch, width,
+ height, pSrcBitmap, src_left,
+ src_top, pIccTransform);
}
- return pClone;
+ return _ConvertBuffer_8bppMask2Gray(dest_buf, dest_pitch, width, height,
+ pSrcBitmap, src_left, src_top);
+ }
+ if ((src_format & 0xff) >= 24) {
+ return _ConvertBuffer_RgbOrCmyk2Gray(dest_buf, dest_pitch, width,
+ height, pSrcBitmap, src_left,
+ src_top, pIccTransform);
+ }
+ return FALSE;
}
- CFX_DIBitmap* pClone = new CFX_DIBitmap;
- if(!pClone->Create(m_Width, m_Height, dest_format)) {
- delete pClone;
- return NULL;
+ case FXDIB_8bppRgb:
+ case FXDIB_8bppRgba: {
+ if ((src_format & 0xff) == 8 && pSrcBitmap->GetPalette() == NULL) {
+ return ConvertBuffer(FXDIB_8bppMask, dest_buf, dest_pitch, width,
+ height, pSrcBitmap, src_left, src_top, d_pal,
+ pIccTransform);
+ }
+ d_pal = FX_Alloc(FX_DWORD, 256);
+ if (((src_format & 0xff) == 1 || (src_format & 0xff) == 8) &&
+ pSrcBitmap->GetPalette()) {
+ return _ConvertBuffer_Plt2PltRgb8(dest_buf, dest_pitch, width, height,
+ pSrcBitmap, src_left, src_top, d_pal,
+ pIccTransform);
+ }
+ if ((src_format & 0xff) >= 24) {
+ return _ConvertBuffer_Rgb2PltRgb8(dest_buf, dest_pitch, width, height,
+ pSrcBitmap, src_left, src_top, d_pal,
+ pIccTransform);
+ }
+ return FALSE;
}
- FX_BOOL ret = TRUE;
- CFX_DIBitmap* pSrcAlpha = NULL;
- if (m_AlphaFlag & 2) {
- pSrcAlpha = (GetFormat() == FXDIB_Argb) ? GetAlphaMask() : m_pAlphaMask;
- if (pSrcAlpha == NULL) {
- delete pClone;
- return NULL;
+ case FXDIB_Rgb:
+ case FXDIB_Rgba: {
+ if ((src_format & 0xff) == 1) {
+ if (pSrcBitmap->GetPalette()) {
+ return _ConvertBuffer_1bppPlt2Rgb(dest_format, dest_buf, dest_pitch,
+ width, height, pSrcBitmap, src_left,
+ src_top, pIccTransform);
}
+ return _ConvertBuffer_1bppMask2Rgb(dest_format, dest_buf, dest_pitch,
+ width, height, pSrcBitmap, src_left,
+ src_top);
+ }
+ if ((src_format & 0xff) == 8) {
+ if (pSrcBitmap->GetPalette()) {
+ return _ConvertBuffer_8bppPlt2Rgb(dest_format, dest_buf, dest_pitch,
+ width, height, pSrcBitmap, src_left,
+ src_top, pIccTransform);
+ }
+ return _ConvertBuffer_8bppMask2Rgb(dest_format, dest_buf, dest_pitch,
+ width, height, pSrcBitmap, src_left,
+ src_top);
+ }
+ if ((src_format & 0xff) == 24) {
+ return _ConvertBuffer_24bppRgb2Rgb24(dest_buf, dest_pitch, width,
+ height, pSrcBitmap, src_left,
+ src_top, pIccTransform);
+ }
+ if ((src_format & 0xff) == 32) {
+ return _ConvertBuffer_32bppRgb2Rgb24(dest_buf, dest_pitch, width,
+ height, pSrcBitmap, src_left,
+ src_top, pIccTransform);
+ }
+ return FALSE;
}
- if (dest_format & 0x0200) {
- if (dest_format == FXDIB_Argb)
- ret = pSrcAlpha ?
- pClone->LoadChannel(FXDIB_Alpha, pSrcAlpha, FXDIB_Alpha) :
- pClone->LoadChannel(FXDIB_Alpha, 0xff);
- else {
- ret = pClone->CopyAlphaMask(pSrcAlpha);
+ case FXDIB_Argb:
+ case FXDIB_Rgb32: {
+ if ((src_format & 0xff) == 1) {
+ if (pSrcBitmap->GetPalette()) {
+ return _ConvertBuffer_1bppPlt2Rgb(dest_format, dest_buf, dest_pitch,
+ width, height, pSrcBitmap, src_left,
+ src_top, pIccTransform);
+ }
+ return _ConvertBuffer_1bppMask2Rgb(dest_format, dest_buf, dest_pitch,
+ width, height, pSrcBitmap, src_left,
+ src_top);
+ }
+ if ((src_format & 0xff) == 8) {
+ if (pSrcBitmap->GetPalette()) {
+ return _ConvertBuffer_8bppPlt2Rgb(dest_format, dest_buf, dest_pitch,
+ width, height, pSrcBitmap, src_left,
+ src_top, pIccTransform);
}
+ return _ConvertBuffer_8bppMask2Rgb(dest_format, dest_buf, dest_pitch,
+ width, height, pSrcBitmap, src_left,
+ src_top);
+ }
+ if ((src_format & 0xff) >= 24) {
+ if (src_format & 0x0400) {
+ return _ConvertBuffer_32bppCmyk2Rgb32(dest_buf, dest_pitch, width,
+ height, pSrcBitmap, src_left,
+ src_top, pIccTransform);
+ }
+ return _ConvertBuffer_Rgb2Rgb32(dest_buf, dest_pitch, width, height,
+ pSrcBitmap, src_left, src_top,
+ pIccTransform);
+ }
+ return FALSE;
}
- if (pSrcAlpha && pSrcAlpha != m_pAlphaMask) {
- delete pSrcAlpha;
- pSrcAlpha = NULL;
+ default:
+ return FALSE;
+ }
+ return FALSE;
+}
+CFX_DIBitmap* CFX_DIBSource::CloneConvert(FXDIB_Format dest_format,
+ const FX_RECT* pClip,
+ void* pIccTransform) const {
+ if (dest_format == GetFormat() && pIccTransform == NULL) {
+ return Clone(pClip);
+ }
+ if (pClip) {
+ CFX_DIBitmap* pClone = Clone(pClip);
+ if (pClone == NULL) {
+ return NULL;
}
- if (!ret) {
- delete pClone;
- return NULL;
+ if (!pClone->ConvertFormat(dest_format, pIccTransform)) {
+ delete pClone;
+ return NULL;
}
- FX_DWORD* pal_8bpp = NULL;
- ret = ConvertBuffer(dest_format, pClone->GetBuffer(), pClone->GetPitch(), m_Width, m_Height, this, 0, 0, pal_8bpp, pIccTransform);
- if (!ret) {
- if (pal_8bpp) {
- FX_Free(pal_8bpp);
- }
- delete pClone;
- return NULL;
+ return pClone;
+ }
+ CFX_DIBitmap* pClone = new CFX_DIBitmap;
+ if (!pClone->Create(m_Width, m_Height, dest_format)) {
+ delete pClone;
+ return NULL;
+ }
+ FX_BOOL ret = TRUE;
+ CFX_DIBitmap* pSrcAlpha = NULL;
+ if (m_AlphaFlag & 2) {
+ pSrcAlpha = (GetFormat() == FXDIB_Argb) ? GetAlphaMask() : m_pAlphaMask;
+ if (pSrcAlpha == NULL) {
+ delete pClone;
+ return NULL;
}
+ }
+ if (dest_format & 0x0200) {
+ if (dest_format == FXDIB_Argb)
+ ret = pSrcAlpha ? pClone->LoadChannel(FXDIB_Alpha, pSrcAlpha, FXDIB_Alpha)
+ : pClone->LoadChannel(FXDIB_Alpha, 0xff);
+ else {
+ ret = pClone->CopyAlphaMask(pSrcAlpha);
+ }
+ }
+ if (pSrcAlpha && pSrcAlpha != m_pAlphaMask) {
+ delete pSrcAlpha;
+ pSrcAlpha = NULL;
+ }
+ if (!ret) {
+ delete pClone;
+ return NULL;
+ }
+ FX_DWORD* pal_8bpp = NULL;
+ ret = ConvertBuffer(dest_format, pClone->GetBuffer(), pClone->GetPitch(),
+ m_Width, m_Height, this, 0, 0, pal_8bpp, pIccTransform);
+ if (!ret) {
if (pal_8bpp) {
- pClone->CopyPalette(pal_8bpp);
- FX_Free(pal_8bpp);
- pal_8bpp = NULL;
+ FX_Free(pal_8bpp);
}
- return pClone;
+ delete pClone;
+ return NULL;
+ }
+ if (pal_8bpp) {
+ pClone->CopyPalette(pal_8bpp);
+ FX_Free(pal_8bpp);
+ pal_8bpp = NULL;
+ }
+ return pClone;
}
-FX_BOOL CFX_DIBitmap::ConvertFormat(FXDIB_Format dest_format, void* pIccTransform)
-{
- FXDIB_Format src_format = GetFormat();
- if (dest_format == src_format && pIccTransform == NULL) {
- return TRUE;
- }
- if (dest_format == FXDIB_8bppMask && src_format == FXDIB_8bppRgb && m_pPalette == NULL) {
- m_AlphaFlag = 1;
- return TRUE;
+FX_BOOL CFX_DIBitmap::ConvertFormat(FXDIB_Format dest_format,
+ void* pIccTransform) {
+ FXDIB_Format src_format = GetFormat();
+ if (dest_format == src_format && pIccTransform == NULL) {
+ return TRUE;
+ }
+ if (dest_format == FXDIB_8bppMask && src_format == FXDIB_8bppRgb &&
+ m_pPalette == NULL) {
+ m_AlphaFlag = 1;
+ return TRUE;
+ }
+ if (dest_format == FXDIB_Argb && src_format == FXDIB_Rgb32 &&
+ pIccTransform == NULL) {
+ m_AlphaFlag = 2;
+ for (int row = 0; row < m_Height; row++) {
+ uint8_t* scanline = m_pBuffer + row * m_Pitch + 3;
+ for (int col = 0; col < m_Width; col++) {
+ *scanline = 0xff;
+ scanline += 4;
+ }
}
- if (dest_format == FXDIB_Argb && src_format == FXDIB_Rgb32 && pIccTransform == NULL) {
- m_AlphaFlag = 2;
- for (int row = 0; row < m_Height; row ++) {
- uint8_t* scanline = m_pBuffer + row * m_Pitch + 3;
- for (int col = 0; col < m_Width; col ++) {
- *scanline = 0xff;
- scanline += 4;
- }
+ return TRUE;
+ }
+ int dest_bpp = dest_format & 0xff;
+ int dest_pitch = (dest_bpp * m_Width + 31) / 32 * 4;
+ uint8_t* dest_buf = FX_TryAlloc(uint8_t, dest_pitch * m_Height + 4);
+ if (dest_buf == NULL) {
+ return FALSE;
+ }
+ CFX_DIBitmap* pAlphaMask = NULL;
+ if (dest_format == FXDIB_Argb) {
+ FXSYS_memset(dest_buf, 0xff, dest_pitch * m_Height + 4);
+ if (m_pAlphaMask) {
+ for (int row = 0; row < m_Height; row++) {
+ uint8_t* pDstScanline = dest_buf + row * dest_pitch + 3;
+ const uint8_t* pSrcScanline = m_pAlphaMask->GetScanline(row);
+ for (int col = 0; col < m_Width; col++) {
+ *pDstScanline = *pSrcScanline++;
+ pDstScanline += 4;
}
- return TRUE;
+ }
}
- int dest_bpp = dest_format & 0xff;
- int dest_pitch = (dest_bpp * m_Width + 31) / 32 * 4;
- uint8_t* dest_buf = FX_TryAlloc(uint8_t, dest_pitch * m_Height + 4);
- if (dest_buf == NULL) {
+ } else if (dest_format & 0x0200) {
+ if (src_format == FXDIB_Argb) {
+ pAlphaMask = GetAlphaMask();
+ if (pAlphaMask == NULL) {
+ FX_Free(dest_buf);
return FALSE;
- }
- CFX_DIBitmap* pAlphaMask = NULL;
- if (dest_format == FXDIB_Argb) {
- FXSYS_memset(dest_buf, 0xff, dest_pitch * m_Height + 4);
- if (m_pAlphaMask) {
- for (int row = 0; row < m_Height; row ++) {
- uint8_t* pDstScanline = dest_buf + row * dest_pitch + 3;
- const uint8_t* pSrcScanline = m_pAlphaMask->GetScanline(row);
- for (int col = 0; col < m_Width; col ++) {
- *pDstScanline = *pSrcScanline++;
- pDstScanline += 4;
- }
- }
- }
- } else if (dest_format & 0x0200) {
- if (src_format == FXDIB_Argb) {
- pAlphaMask = GetAlphaMask();
- if (pAlphaMask == NULL) {
- FX_Free(dest_buf);
- return FALSE;
- }
- } else {
- if (m_pAlphaMask == NULL) {
- if (!BuildAlphaMask()) {
- FX_Free(dest_buf);
- return FALSE;
- }
- pAlphaMask = m_pAlphaMask;
- m_pAlphaMask = NULL;
- } else {
- pAlphaMask = m_pAlphaMask;
- }
+ }
+ } else {
+ if (m_pAlphaMask == NULL) {
+ if (!BuildAlphaMask()) {
+ FX_Free(dest_buf);
+ return FALSE;
}
+ pAlphaMask = m_pAlphaMask;
+ m_pAlphaMask = NULL;
+ } else {
+ pAlphaMask = m_pAlphaMask;
+ }
}
- FX_BOOL ret = FALSE;
- FX_DWORD* pal_8bpp = NULL;
- ret = ConvertBuffer(dest_format, dest_buf, dest_pitch, m_Width, m_Height, this, 0, 0, pal_8bpp, pIccTransform);
- if (!ret) {
- if (pal_8bpp) {
- FX_Free(pal_8bpp);
- }
- if (pAlphaMask != m_pAlphaMask) {
- delete pAlphaMask;
- }
- if (dest_buf) {
- FX_Free(dest_buf);
- }
- return FALSE;
- }
- if (m_pAlphaMask && pAlphaMask != m_pAlphaMask) {
- delete m_pAlphaMask;
+ }
+ FX_BOOL ret = FALSE;
+ FX_DWORD* pal_8bpp = NULL;
+ ret = ConvertBuffer(dest_format, dest_buf, dest_pitch, m_Width, m_Height,
+ this, 0, 0, pal_8bpp, pIccTransform);
+ if (!ret) {
+ if (pal_8bpp) {
+ FX_Free(pal_8bpp);
}
- m_pAlphaMask = pAlphaMask;
- if (m_pPalette) {
- FX_Free(m_pPalette);
+ if (pAlphaMask != m_pAlphaMask) {
+ delete pAlphaMask;
}
- m_pPalette = pal_8bpp;
- if (!m_bExtBuf) {
- FX_Free(m_pBuffer);
+ if (dest_buf) {
+ FX_Free(dest_buf);
}
- m_bExtBuf = FALSE;
- m_pBuffer = dest_buf;
- m_bpp = (uint8_t)dest_format;
- m_AlphaFlag = (uint8_t)(dest_format >> 8);
- m_Pitch = dest_pitch;
- return TRUE;
+ return FALSE;
+ }
+ if (m_pAlphaMask && pAlphaMask != m_pAlphaMask) {
+ delete m_pAlphaMask;
+ }
+ m_pAlphaMask = pAlphaMask;
+ if (m_pPalette) {
+ FX_Free(m_pPalette);
+ }
+ m_pPalette = pal_8bpp;
+ if (!m_bExtBuf) {
+ FX_Free(m_pBuffer);
+ }
+ m_bExtBuf = FALSE;
+ m_pBuffer = dest_buf;
+ m_bpp = (uint8_t)dest_format;
+ m_AlphaFlag = (uint8_t)(dest_format >> 8);
+ m_Pitch = dest_pitch;
+ return TRUE;
}
diff --git a/core/src/fxge/dib/fx_dib_engine.cpp b/core/src/fxge/dib/fx_dib_engine.cpp
index 7390c431d9..a91d99d935 100644
--- a/core/src/fxge/dib/fx_dib_engine.cpp
+++ b/core/src/fxge/dib/fx_dib_engine.cpp
@@ -9,827 +9,925 @@
#include "dib_int.h"
#include <limits.h>
extern int SDP_Table[513];
-void CWeightTable::Calc(int dest_len, int dest_min, int dest_max, int src_len, int src_min, int src_max, int flags)
-{
- if (m_pWeightTables) {
- FX_Free(m_pWeightTables);
- m_pWeightTables = NULL;
- }
- double scale, base;
- scale = FXSYS_Div((FX_FLOAT)(src_len), (FX_FLOAT)(dest_len));
- if (dest_len < 0) {
- base = (FX_FLOAT)(src_len);
- } else {
- base = 0;
- }
- int ext_size = flags & FXDIB_BICUBIC_INTERPOL ? 3 : 1;
- m_ItemSize = sizeof(int) * 2 + (int)(sizeof(int) * (FXSYS_ceil(FXSYS_fabs((FX_FLOAT)scale)) + ext_size));
- m_DestMin = dest_min;
- if ((dest_max - dest_min) > (int)((1U << 30) - 4) / m_ItemSize) {
- return;
- }
- m_pWeightTables = FX_TryAlloc(uint8_t, (dest_max - dest_min) * m_ItemSize + 4);
- if (m_pWeightTables == NULL) {
- return;
- }
- if ((flags & FXDIB_NOSMOOTH) != 0 || FXSYS_fabs((FX_FLOAT)scale) < 1.0f) {
- for (int dest_pixel = dest_min; dest_pixel < dest_max; dest_pixel ++) {
- PixelWeight& pixel_weights = *GetPixelWeight(dest_pixel);
- double src_pos = dest_pixel * scale + scale / 2 + base;
- if (flags & FXDIB_INTERPOL) {
- pixel_weights.m_SrcStart = (int)FXSYS_floor((FX_FLOAT)src_pos - 1.0f / 2);
- pixel_weights.m_SrcEnd = (int)FXSYS_floor((FX_FLOAT)src_pos + 1.0f / 2);
- if (pixel_weights.m_SrcStart < src_min) {
- pixel_weights.m_SrcStart = src_min;
- }
- if (pixel_weights.m_SrcEnd >= src_max) {
- pixel_weights.m_SrcEnd = src_max - 1;
- }
- if (pixel_weights.m_SrcStart == pixel_weights.m_SrcEnd) {
- pixel_weights.m_Weights[0] = 65536;
- } else {
- pixel_weights.m_Weights[1] = FXSYS_round((FX_FLOAT)(src_pos - pixel_weights.m_SrcStart - 1.0f / 2) * 65536);
- pixel_weights.m_Weights[0] = 65536 - pixel_weights.m_Weights[1];
- }
- } else if (flags & FXDIB_BICUBIC_INTERPOL) {
- pixel_weights.m_SrcStart = (int)FXSYS_floor((FX_FLOAT)src_pos - 1.0f / 2);
- pixel_weights.m_SrcEnd = (int)FXSYS_floor((FX_FLOAT)src_pos + 1.0f / 2);
- int start = pixel_weights.m_SrcStart - 1;
- int end = pixel_weights.m_SrcEnd + 1;
- if (start < src_min) {
- start = src_min;
- }
- if (end >= src_max) {
- end = src_max - 1;
- }
- if (pixel_weights.m_SrcStart < src_min) {
- src_pos += src_min - pixel_weights.m_SrcStart;
- pixel_weights.m_SrcStart = src_min;
- }
- if (pixel_weights.m_SrcEnd >= src_max) {
- pixel_weights.m_SrcEnd = src_max - 1;
- }
- int weight;
- weight = FXSYS_round((FX_FLOAT)(src_pos - pixel_weights.m_SrcStart - 1.0f / 2) * 256);
- if (start == end) {
- pixel_weights.m_Weights[0] = (SDP_Table[256 + weight] + SDP_Table[weight] + SDP_Table[256 - weight] + SDP_Table[512 - weight]) << 8;
- } else if ((start == pixel_weights.m_SrcStart && (pixel_weights.m_SrcStart == pixel_weights.m_SrcEnd ||
- end == pixel_weights.m_SrcEnd) && start < end) || (start < pixel_weights.m_SrcStart && pixel_weights.m_SrcStart == pixel_weights.m_SrcEnd && end == pixel_weights.m_SrcEnd)) {
- if (start < pixel_weights.m_SrcStart) {
- pixel_weights.m_Weights[0] = SDP_Table[256 + weight] << 8;
- pixel_weights.m_Weights[1] = (SDP_Table[weight] + SDP_Table[256 - weight] + SDP_Table[512 - weight]) << 8;
- } else {
- if (pixel_weights.m_SrcStart == pixel_weights.m_SrcEnd) {
- pixel_weights.m_Weights[0] = (SDP_Table[256 + weight] + SDP_Table[weight] + SDP_Table[256 - weight]) << 8;
- pixel_weights.m_Weights[1] = SDP_Table[512 - weight] << 8;
- } else {
- pixel_weights.m_Weights[0] = (SDP_Table[256 + weight] + SDP_Table[weight]) << 8;
- pixel_weights.m_Weights[1] = (SDP_Table[256 - weight] + SDP_Table[512 - weight]) << 8;
- }
- }
- if (pixel_weights.m_SrcStart == pixel_weights.m_SrcEnd) {
- pixel_weights.m_SrcEnd = end;
- }
- if (start < pixel_weights.m_SrcStart) {
- pixel_weights.m_SrcStart = start;
- }
- } else if (start == pixel_weights.m_SrcStart &&
- start < pixel_weights.m_SrcEnd &&
- pixel_weights.m_SrcEnd < end) {
- pixel_weights.m_Weights[0] = (SDP_Table[256 + weight] + SDP_Table[weight]) << 8;
- pixel_weights.m_Weights[1] = SDP_Table[256 - weight] << 8;
- pixel_weights.m_Weights[2] = SDP_Table[512 - weight] << 8;
- pixel_weights.m_SrcEnd = end;
- } else if (start < pixel_weights.m_SrcStart &&
- pixel_weights.m_SrcStart < pixel_weights.m_SrcEnd &&
- pixel_weights.m_SrcEnd == end) {
- pixel_weights.m_Weights[0] = SDP_Table[256 + weight] << 8;
- pixel_weights.m_Weights[1] = SDP_Table[weight] << 8;
- pixel_weights.m_Weights[2] = (SDP_Table[256 - weight] + SDP_Table[512 - weight]) << 8;
- pixel_weights.m_SrcStart = start;
- } else {
- pixel_weights.m_Weights[0] = SDP_Table[256 + weight] << 8;
- pixel_weights.m_Weights[1] = SDP_Table[weight] << 8;
- pixel_weights.m_Weights[2] = SDP_Table[256 - weight] << 8;
- pixel_weights.m_Weights[3] = SDP_Table[512 - weight] << 8;
- pixel_weights.m_SrcStart = start;
- pixel_weights.m_SrcEnd = end;
- }
- } else {
- pixel_weights.m_SrcStart = pixel_weights.m_SrcEnd = (int)FXSYS_floor((FX_FLOAT)src_pos);
- if (pixel_weights.m_SrcStart < src_min) {
- pixel_weights.m_SrcStart = src_min;
- }
- if (pixel_weights.m_SrcEnd >= src_max) {
- pixel_weights.m_SrcEnd = src_max - 1;
- }
- pixel_weights.m_Weights[0] = 65536;
- }
+void CWeightTable::Calc(int dest_len,
+ int dest_min,
+ int dest_max,
+ int src_len,
+ int src_min,
+ int src_max,
+ int flags) {
+ if (m_pWeightTables) {
+ FX_Free(m_pWeightTables);
+ m_pWeightTables = NULL;
+ }
+ double scale, base;
+ scale = FXSYS_Div((FX_FLOAT)(src_len), (FX_FLOAT)(dest_len));
+ if (dest_len < 0) {
+ base = (FX_FLOAT)(src_len);
+ } else {
+ base = 0;
+ }
+ int ext_size = flags & FXDIB_BICUBIC_INTERPOL ? 3 : 1;
+ m_ItemSize =
+ sizeof(int) * 2 +
+ (int)(sizeof(int) * (FXSYS_ceil(FXSYS_fabs((FX_FLOAT)scale)) + ext_size));
+ m_DestMin = dest_min;
+ if ((dest_max - dest_min) > (int)((1U << 30) - 4) / m_ItemSize) {
+ return;
+ }
+ m_pWeightTables =
+ FX_TryAlloc(uint8_t, (dest_max - dest_min) * m_ItemSize + 4);
+ if (m_pWeightTables == NULL) {
+ return;
+ }
+ if ((flags & FXDIB_NOSMOOTH) != 0 || FXSYS_fabs((FX_FLOAT)scale) < 1.0f) {
+ for (int dest_pixel = dest_min; dest_pixel < dest_max; dest_pixel++) {
+ PixelWeight& pixel_weights = *GetPixelWeight(dest_pixel);
+ double src_pos = dest_pixel * scale + scale / 2 + base;
+ if (flags & FXDIB_INTERPOL) {
+ pixel_weights.m_SrcStart =
+ (int)FXSYS_floor((FX_FLOAT)src_pos - 1.0f / 2);
+ pixel_weights.m_SrcEnd = (int)FXSYS_floor((FX_FLOAT)src_pos + 1.0f / 2);
+ if (pixel_weights.m_SrcStart < src_min) {
+ pixel_weights.m_SrcStart = src_min;
}
- return;
- }
- for (int dest_pixel = dest_min; dest_pixel < dest_max; dest_pixel ++) {
- PixelWeight& pixel_weights = *GetPixelWeight(dest_pixel);
- double src_start = dest_pixel * scale + base;
- double src_end = src_start + scale;
- int start_i, end_i;
- if (src_start < src_end) {
- start_i = (int)FXSYS_floor((FX_FLOAT)src_start);
- end_i = (int)FXSYS_ceil((FX_FLOAT)src_end);
+ if (pixel_weights.m_SrcEnd >= src_max) {
+ pixel_weights.m_SrcEnd = src_max - 1;
+ }
+ if (pixel_weights.m_SrcStart == pixel_weights.m_SrcEnd) {
+ pixel_weights.m_Weights[0] = 65536;
} else {
- start_i = (int)FXSYS_floor((FX_FLOAT)src_end);
- end_i = (int)FXSYS_ceil((FX_FLOAT)src_start);
+ pixel_weights.m_Weights[1] = FXSYS_round(
+ (FX_FLOAT)(src_pos - pixel_weights.m_SrcStart - 1.0f / 2) *
+ 65536);
+ pixel_weights.m_Weights[0] = 65536 - pixel_weights.m_Weights[1];
}
- if (start_i < src_min) {
- start_i = src_min;
+ } else if (flags & FXDIB_BICUBIC_INTERPOL) {
+ pixel_weights.m_SrcStart =
+ (int)FXSYS_floor((FX_FLOAT)src_pos - 1.0f / 2);
+ pixel_weights.m_SrcEnd = (int)FXSYS_floor((FX_FLOAT)src_pos + 1.0f / 2);
+ int start = pixel_weights.m_SrcStart - 1;
+ int end = pixel_weights.m_SrcEnd + 1;
+ if (start < src_min) {
+ start = src_min;
}
- if (end_i >= src_max) {
- end_i = src_max - 1;
+ if (end >= src_max) {
+ end = src_max - 1;
}
- if (start_i > end_i) {
- if (start_i >= src_max) {
- start_i = src_max - 1;
- }
- pixel_weights.m_SrcStart = start_i;
- pixel_weights.m_SrcEnd = start_i;
- continue;
+ if (pixel_weights.m_SrcStart < src_min) {
+ src_pos += src_min - pixel_weights.m_SrcStart;
+ pixel_weights.m_SrcStart = src_min;
}
- pixel_weights.m_SrcStart = start_i;
- pixel_weights.m_SrcEnd = end_i;
- for (int j = start_i; j <= end_i; j ++) {
- double dest_start = FXSYS_Div((FX_FLOAT)(j) - base, scale);
- double dest_end = FXSYS_Div((FX_FLOAT)(j + 1) - base, scale);
- if (dest_start > dest_end) {
- double temp = dest_start;
- dest_start = dest_end;
- dest_end = temp;
- }
- double area_start = dest_start > (FX_FLOAT)(dest_pixel) ? dest_start : (FX_FLOAT)(dest_pixel);
- double area_end = dest_end > (FX_FLOAT)(dest_pixel + 1) ? (FX_FLOAT)(dest_pixel + 1) : dest_end;
- double weight = area_start >= area_end ? 0.0f : area_end - area_start;
- if (weight == 0 && j == end_i) {
- pixel_weights.m_SrcEnd --;
- break;
+ if (pixel_weights.m_SrcEnd >= src_max) {
+ pixel_weights.m_SrcEnd = src_max - 1;
+ }
+ int weight;
+ weight = FXSYS_round(
+ (FX_FLOAT)(src_pos - pixel_weights.m_SrcStart - 1.0f / 2) * 256);
+ if (start == end) {
+ pixel_weights.m_Weights[0] =
+ (SDP_Table[256 + weight] + SDP_Table[weight] +
+ SDP_Table[256 - weight] + SDP_Table[512 - weight])
+ << 8;
+ } else if ((start == pixel_weights.m_SrcStart &&
+ (pixel_weights.m_SrcStart == pixel_weights.m_SrcEnd ||
+ end == pixel_weights.m_SrcEnd) &&
+ start < end) ||
+ (start < pixel_weights.m_SrcStart &&
+ pixel_weights.m_SrcStart == pixel_weights.m_SrcEnd &&
+ end == pixel_weights.m_SrcEnd)) {
+ if (start < pixel_weights.m_SrcStart) {
+ pixel_weights.m_Weights[0] = SDP_Table[256 + weight] << 8;
+ pixel_weights.m_Weights[1] =
+ (SDP_Table[weight] + SDP_Table[256 - weight] +
+ SDP_Table[512 - weight])
+ << 8;
+ } else {
+ if (pixel_weights.m_SrcStart == pixel_weights.m_SrcEnd) {
+ pixel_weights.m_Weights[0] =
+ (SDP_Table[256 + weight] + SDP_Table[weight] +
+ SDP_Table[256 - weight])
+ << 8;
+ pixel_weights.m_Weights[1] = SDP_Table[512 - weight] << 8;
+ } else {
+ pixel_weights.m_Weights[0] =
+ (SDP_Table[256 + weight] + SDP_Table[weight]) << 8;
+ pixel_weights.m_Weights[1] =
+ (SDP_Table[256 - weight] + SDP_Table[512 - weight]) << 8;
}
- pixel_weights.m_Weights[j - start_i] = FXSYS_round((FX_FLOAT)(weight * 65536));
+ }
+ if (pixel_weights.m_SrcStart == pixel_weights.m_SrcEnd) {
+ pixel_weights.m_SrcEnd = end;
+ }
+ if (start < pixel_weights.m_SrcStart) {
+ pixel_weights.m_SrcStart = start;
+ }
+ } else if (start == pixel_weights.m_SrcStart &&
+ start < pixel_weights.m_SrcEnd &&
+ pixel_weights.m_SrcEnd < end) {
+ pixel_weights.m_Weights[0] =
+ (SDP_Table[256 + weight] + SDP_Table[weight]) << 8;
+ pixel_weights.m_Weights[1] = SDP_Table[256 - weight] << 8;
+ pixel_weights.m_Weights[2] = SDP_Table[512 - weight] << 8;
+ pixel_weights.m_SrcEnd = end;
+ } else if (start < pixel_weights.m_SrcStart &&
+ pixel_weights.m_SrcStart < pixel_weights.m_SrcEnd &&
+ pixel_weights.m_SrcEnd == end) {
+ pixel_weights.m_Weights[0] = SDP_Table[256 + weight] << 8;
+ pixel_weights.m_Weights[1] = SDP_Table[weight] << 8;
+ pixel_weights.m_Weights[2] =
+ (SDP_Table[256 - weight] + SDP_Table[512 - weight]) << 8;
+ pixel_weights.m_SrcStart = start;
+ } else {
+ pixel_weights.m_Weights[0] = SDP_Table[256 + weight] << 8;
+ pixel_weights.m_Weights[1] = SDP_Table[weight] << 8;
+ pixel_weights.m_Weights[2] = SDP_Table[256 - weight] << 8;
+ pixel_weights.m_Weights[3] = SDP_Table[512 - weight] << 8;
+ pixel_weights.m_SrcStart = start;
+ pixel_weights.m_SrcEnd = end;
}
- }
+ } else {
+ pixel_weights.m_SrcStart = pixel_weights.m_SrcEnd =
+ (int)FXSYS_floor((FX_FLOAT)src_pos);
+ if (pixel_weights.m_SrcStart < src_min) {
+ pixel_weights.m_SrcStart = src_min;
+ }
+ if (pixel_weights.m_SrcEnd >= src_max) {
+ pixel_weights.m_SrcEnd = src_max - 1;
+ }
+ pixel_weights.m_Weights[0] = 65536;
+ }
+ }
+ return;
+ }
+ for (int dest_pixel = dest_min; dest_pixel < dest_max; dest_pixel++) {
+ PixelWeight& pixel_weights = *GetPixelWeight(dest_pixel);
+ double src_start = dest_pixel * scale + base;
+ double src_end = src_start + scale;
+ int start_i, end_i;
+ if (src_start < src_end) {
+ start_i = (int)FXSYS_floor((FX_FLOAT)src_start);
+ end_i = (int)FXSYS_ceil((FX_FLOAT)src_end);
+ } else {
+ start_i = (int)FXSYS_floor((FX_FLOAT)src_end);
+ end_i = (int)FXSYS_ceil((FX_FLOAT)src_start);
+ }
+ if (start_i < src_min) {
+ start_i = src_min;
+ }
+ if (end_i >= src_max) {
+ end_i = src_max - 1;
+ }
+ if (start_i > end_i) {
+ if (start_i >= src_max) {
+ start_i = src_max - 1;
+ }
+ pixel_weights.m_SrcStart = start_i;
+ pixel_weights.m_SrcEnd = start_i;
+ continue;
+ }
+ pixel_weights.m_SrcStart = start_i;
+ pixel_weights.m_SrcEnd = end_i;
+ for (int j = start_i; j <= end_i; j++) {
+ double dest_start = FXSYS_Div((FX_FLOAT)(j)-base, scale);
+ double dest_end = FXSYS_Div((FX_FLOAT)(j + 1) - base, scale);
+ if (dest_start > dest_end) {
+ double temp = dest_start;
+ dest_start = dest_end;
+ dest_end = temp;
+ }
+ double area_start = dest_start > (FX_FLOAT)(dest_pixel)
+ ? dest_start
+ : (FX_FLOAT)(dest_pixel);
+ double area_end = dest_end > (FX_FLOAT)(dest_pixel + 1)
+ ? (FX_FLOAT)(dest_pixel + 1)
+ : dest_end;
+ double weight = area_start >= area_end ? 0.0f : area_end - area_start;
+ if (weight == 0 && j == end_i) {
+ pixel_weights.m_SrcEnd--;
+ break;
+ }
+ pixel_weights.m_Weights[j - start_i] =
+ FXSYS_round((FX_FLOAT)(weight * 65536));
+ }
+ }
}
-CStretchEngine::CStretchEngine(IFX_ScanlineComposer* pDestBitmap, FXDIB_Format dest_format,
- int dest_width, int dest_height, const FX_RECT& clip_rect,
- const CFX_DIBSource* pSrcBitmap, int flags)
-{
- m_State = 0;
- m_DestFormat = dest_format;
- m_DestBpp = dest_format & 0xff;
- m_SrcBpp = pSrcBitmap->GetFormat() & 0xff;
- m_bHasAlpha = pSrcBitmap->GetFormat() & 0x200;
- m_pSrcPalette = pSrcBitmap->GetPalette();
- m_pDestBitmap = pDestBitmap;
- m_DestWidth = dest_width;
- m_DestHeight = dest_height;
- m_pInterBuf = NULL;
- m_pExtraAlphaBuf = NULL;
- m_pDestMaskScanline = NULL;
- m_DestClip = clip_rect;
- FX_DWORD size = clip_rect.Width();
- if (size && m_DestBpp > (int)(INT_MAX / size)) {
- return;
+CStretchEngine::CStretchEngine(IFX_ScanlineComposer* pDestBitmap,
+ FXDIB_Format dest_format,
+ int dest_width,
+ int dest_height,
+ const FX_RECT& clip_rect,
+ const CFX_DIBSource* pSrcBitmap,
+ int flags) {
+ m_State = 0;
+ m_DestFormat = dest_format;
+ m_DestBpp = dest_format & 0xff;
+ m_SrcBpp = pSrcBitmap->GetFormat() & 0xff;
+ m_bHasAlpha = pSrcBitmap->GetFormat() & 0x200;
+ m_pSrcPalette = pSrcBitmap->GetPalette();
+ m_pDestBitmap = pDestBitmap;
+ m_DestWidth = dest_width;
+ m_DestHeight = dest_height;
+ m_pInterBuf = NULL;
+ m_pExtraAlphaBuf = NULL;
+ m_pDestMaskScanline = NULL;
+ m_DestClip = clip_rect;
+ FX_DWORD size = clip_rect.Width();
+ if (size && m_DestBpp > (int)(INT_MAX / size)) {
+ return;
+ }
+ size *= m_DestBpp;
+ if (size > INT_MAX - 31) {
+ return;
+ }
+ size += 31;
+ size = size / 32 * 4;
+ m_pDestScanline = FX_TryAlloc(uint8_t, size);
+ if (m_pDestScanline == NULL) {
+ return;
+ }
+ if (dest_format == FXDIB_Rgb32) {
+ FXSYS_memset(m_pDestScanline, 255, size);
+ }
+ m_InterPitch = (m_DestClip.Width() * m_DestBpp + 31) / 32 * 4;
+ m_ExtraMaskPitch = (m_DestClip.Width() * 8 + 31) / 32 * 4;
+ m_pInterBuf = NULL;
+ m_pSource = pSrcBitmap;
+ m_SrcWidth = pSrcBitmap->GetWidth();
+ m_SrcHeight = pSrcBitmap->GetHeight();
+ m_SrcPitch = (m_SrcWidth * m_SrcBpp + 31) / 32 * 4;
+ if ((flags & FXDIB_NOSMOOTH) == 0) {
+ FX_BOOL bInterpol =
+ flags & FXDIB_INTERPOL || flags & FXDIB_BICUBIC_INTERPOL;
+ if (!bInterpol && FXSYS_abs(dest_width) != 0 &&
+ FXSYS_abs(dest_height) <
+ m_SrcWidth * m_SrcHeight * 8 / FXSYS_abs(dest_width)) {
+ flags = FXDIB_INTERPOL;
}
- size *= m_DestBpp;
- if (size > INT_MAX - 31) {
- return;
- }
- size += 31;
- size = size / 32 * 4;
- m_pDestScanline = FX_TryAlloc(uint8_t, size);
- if (m_pDestScanline == NULL) {
- return;
- }
- if (dest_format == FXDIB_Rgb32) {
- FXSYS_memset(m_pDestScanline, 255, size);
+ m_Flags = flags;
+ } else {
+ m_Flags = FXDIB_NOSMOOTH;
+ if (flags & FXDIB_DOWNSAMPLE) {
+ m_Flags |= FXDIB_DOWNSAMPLE;
+ }
+ }
+ double scale_x = FXSYS_Div((FX_FLOAT)(m_SrcWidth), (FX_FLOAT)(m_DestWidth));
+ double scale_y = FXSYS_Div((FX_FLOAT)(m_SrcHeight), (FX_FLOAT)(m_DestHeight));
+ double base_x = m_DestWidth > 0 ? 0.0f : (FX_FLOAT)(m_DestWidth);
+ double base_y = m_DestHeight > 0 ? 0.0f : (FX_FLOAT)(m_DestHeight);
+ double src_left = FXSYS_Mul(scale_x, (FX_FLOAT)(clip_rect.left) + base_x);
+ double src_right = FXSYS_Mul(scale_x, (FX_FLOAT)(clip_rect.right) + base_x);
+ double src_top = FXSYS_Mul(scale_y, (FX_FLOAT)(clip_rect.top) + base_y);
+ double src_bottom = FXSYS_Mul(scale_y, (FX_FLOAT)(clip_rect.bottom) + base_y);
+ if (src_left > src_right) {
+ double temp = src_left;
+ src_left = src_right;
+ src_right = temp;
+ }
+ if (src_top > src_bottom) {
+ double temp = src_top;
+ src_top = src_bottom;
+ src_bottom = temp;
+ }
+ m_SrcClip.left = (int)FXSYS_floor((FX_FLOAT)src_left);
+ m_SrcClip.right = (int)FXSYS_ceil((FX_FLOAT)src_right);
+ m_SrcClip.top = (int)FXSYS_floor((FX_FLOAT)src_top);
+ m_SrcClip.bottom = (int)FXSYS_ceil((FX_FLOAT)src_bottom);
+ FX_RECT src_rect(0, 0, m_SrcWidth, m_SrcHeight);
+ m_SrcClip.Intersect(src_rect);
+ if (m_SrcBpp == 1) {
+ if (m_DestBpp == 8) {
+ m_TransMethod = 1;
+ } else {
+ m_TransMethod = 2;
+ }
+ } else if (m_SrcBpp == 8) {
+ if (m_DestBpp == 8) {
+ if (!m_bHasAlpha) {
+ m_TransMethod = 3;
+ } else {
+ m_TransMethod = 4;
+ }
+ } else {
+ if (!m_bHasAlpha) {
+ m_TransMethod = 5;
+ } else {
+ m_TransMethod = 6;
+ }
+ }
+ } else {
+ if (!m_bHasAlpha) {
+ m_TransMethod = 7;
+ } else {
+ m_TransMethod = 8;
}
- m_InterPitch = (m_DestClip.Width() * m_DestBpp + 31) / 32 * 4;
- m_ExtraMaskPitch = (m_DestClip.Width() * 8 + 31) / 32 * 4;
- m_pInterBuf = NULL;
- m_pSource = pSrcBitmap;
- m_SrcWidth = pSrcBitmap->GetWidth();
- m_SrcHeight = pSrcBitmap->GetHeight();
- m_SrcPitch = (m_SrcWidth * m_SrcBpp + 31) / 32 * 4;
- if ((flags & FXDIB_NOSMOOTH) == 0) {
- FX_BOOL bInterpol = flags & FXDIB_INTERPOL || flags & FXDIB_BICUBIC_INTERPOL;
- if (!bInterpol && FXSYS_abs(dest_width) != 0 && FXSYS_abs(dest_height) < m_SrcWidth * m_SrcHeight * 8 / FXSYS_abs(dest_width)) {
- flags = FXDIB_INTERPOL;
+ }
+}
+FX_BOOL CStretchEngine::Continue(IFX_Pause* pPause) {
+ while (m_State == 1) {
+ if (ContinueStretchHorz(pPause)) {
+ return TRUE;
+ }
+ m_State = 2;
+ StretchVert();
+ }
+ return FALSE;
+}
+CStretchEngine::~CStretchEngine() {
+ if (m_pDestScanline) {
+ FX_Free(m_pDestScanline);
+ }
+ if (m_pInterBuf) {
+ FX_Free(m_pInterBuf);
+ }
+ if (m_pExtraAlphaBuf) {
+ FX_Free(m_pExtraAlphaBuf);
+ }
+ if (m_pDestMaskScanline) {
+ FX_Free(m_pDestMaskScanline);
+ }
+}
+FX_BOOL CStretchEngine::StartStretchHorz() {
+ if (m_DestWidth == 0 || m_pDestScanline == NULL ||
+ m_SrcClip.Height() > (int)((1U << 29) / m_InterPitch) ||
+ m_SrcClip.Height() == 0) {
+ return FALSE;
+ }
+ m_pInterBuf = FX_TryAlloc(unsigned char, m_SrcClip.Height() * m_InterPitch);
+ if (m_pInterBuf == NULL) {
+ return FALSE;
+ }
+ if (m_pSource && m_bHasAlpha && m_pSource->m_pAlphaMask) {
+ m_pExtraAlphaBuf =
+ FX_Alloc2D(unsigned char, m_SrcClip.Height(), m_ExtraMaskPitch);
+ FX_DWORD size = (m_DestClip.Width() * 8 + 31) / 32 * 4;
+ m_pDestMaskScanline = FX_TryAlloc(unsigned char, size);
+ if (!m_pDestMaskScanline) {
+ return FALSE;
+ }
+ }
+ m_WeightTable.Calc(m_DestWidth, m_DestClip.left, m_DestClip.right, m_SrcWidth,
+ m_SrcClip.left, m_SrcClip.right, m_Flags);
+ if (m_WeightTable.m_pWeightTables == NULL) {
+ return FALSE;
+ }
+ m_CurRow = m_SrcClip.top;
+ m_State = 1;
+ return TRUE;
+}
+#define FX_STRECH_PAUSE_ROWS 10
+FX_BOOL CStretchEngine::ContinueStretchHorz(IFX_Pause* pPause) {
+ if (!m_DestWidth) {
+ return 0;
+ }
+ if (m_pSource->SkipToScanline(m_CurRow, pPause)) {
+ return TRUE;
+ }
+ int Bpp = m_DestBpp / 8;
+ int rows_to_go = FX_STRECH_PAUSE_ROWS;
+ for (; m_CurRow < m_SrcClip.bottom; m_CurRow++) {
+ if (rows_to_go == 0) {
+ if (pPause && pPause->NeedToPauseNow()) {
+ return TRUE;
+ }
+ rows_to_go = FX_STRECH_PAUSE_ROWS;
+ }
+ const uint8_t* src_scan = m_pSource->GetScanline(m_CurRow);
+ uint8_t* dest_scan =
+ m_pInterBuf + (m_CurRow - m_SrcClip.top) * m_InterPitch;
+ const uint8_t* src_scan_mask = NULL;
+ uint8_t* dest_scan_mask = NULL;
+ if (m_pExtraAlphaBuf) {
+ src_scan_mask = m_pSource->m_pAlphaMask->GetScanline(m_CurRow);
+ dest_scan_mask =
+ m_pExtraAlphaBuf + (m_CurRow - m_SrcClip.top) * m_ExtraMaskPitch;
+ }
+ switch (m_TransMethod) {
+ case 1:
+ case 2: {
+ for (int col = m_DestClip.left; col < m_DestClip.right; col++) {
+ PixelWeight* pPixelWeights = m_WeightTable.GetPixelWeight(col);
+ int dest_a = 0;
+ for (int j = pPixelWeights->m_SrcStart; j <= pPixelWeights->m_SrcEnd;
+ j++) {
+ int pixel_weight =
+ pPixelWeights->m_Weights[j - pPixelWeights->m_SrcStart];
+ if (src_scan[j / 8] & (1 << (7 - j % 8))) {
+ dest_a += pixel_weight * 255;
+ }
+ }
+ if (m_Flags & FXDIB_BICUBIC_INTERPOL) {
+ dest_a = dest_a < 0 ? 0 : dest_a > 16711680 ? 16711680 : dest_a;
+ }
+ *dest_scan++ = (uint8_t)(dest_a >> 16);
}
- m_Flags = flags;
- } else {
- m_Flags = FXDIB_NOSMOOTH;
- if (flags & FXDIB_DOWNSAMPLE) {
- m_Flags |= FXDIB_DOWNSAMPLE;
+ break;
+ }
+ case 3: {
+ for (int col = m_DestClip.left; col < m_DestClip.right; col++) {
+ PixelWeight* pPixelWeights = m_WeightTable.GetPixelWeight(col);
+ int dest_a = 0;
+ for (int j = pPixelWeights->m_SrcStart; j <= pPixelWeights->m_SrcEnd;
+ j++) {
+ int pixel_weight =
+ pPixelWeights->m_Weights[j - pPixelWeights->m_SrcStart];
+ dest_a += pixel_weight * src_scan[j];
+ }
+ if (m_Flags & FXDIB_BICUBIC_INTERPOL) {
+ dest_a = dest_a < 0 ? 0 : dest_a > 16711680 ? 16711680 : dest_a;
+ }
+ *dest_scan++ = (uint8_t)(dest_a >> 16);
}
- }
- double scale_x = FXSYS_Div((FX_FLOAT)(m_SrcWidth), (FX_FLOAT)(m_DestWidth));
- double scale_y = FXSYS_Div((FX_FLOAT)(m_SrcHeight), (FX_FLOAT)(m_DestHeight));
- double base_x = m_DestWidth > 0 ? 0.0f : (FX_FLOAT)(m_DestWidth);
- double base_y = m_DestHeight > 0 ? 0.0f : (FX_FLOAT)(m_DestHeight);
- double src_left = FXSYS_Mul(scale_x, (FX_FLOAT)(clip_rect.left) + base_x);
- double src_right = FXSYS_Mul(scale_x, (FX_FLOAT)(clip_rect.right) + base_x);
- double src_top = FXSYS_Mul(scale_y, (FX_FLOAT)(clip_rect.top) + base_y);
- double src_bottom = FXSYS_Mul(scale_y, (FX_FLOAT)(clip_rect.bottom) + base_y);
- if (src_left > src_right) {
- double temp = src_left;
- src_left = src_right;
- src_right = temp;
- }
- if (src_top > src_bottom) {
- double temp = src_top;
- src_top = src_bottom;
- src_bottom = temp;
- }
- m_SrcClip.left = (int)FXSYS_floor((FX_FLOAT)src_left);
- m_SrcClip.right = (int)FXSYS_ceil((FX_FLOAT)src_right);
- m_SrcClip.top = (int)FXSYS_floor((FX_FLOAT)src_top);
- m_SrcClip.bottom = (int)FXSYS_ceil((FX_FLOAT)src_bottom);
- FX_RECT src_rect(0, 0, m_SrcWidth, m_SrcHeight);
- m_SrcClip.Intersect(src_rect);
- if (m_SrcBpp == 1) {
- if (m_DestBpp == 8) {
- m_TransMethod = 1;
- } else {
- m_TransMethod = 2;
+ break;
+ }
+ case 4: {
+ for (int col = m_DestClip.left; col < m_DestClip.right; col++) {
+ PixelWeight* pPixelWeights = m_WeightTable.GetPixelWeight(col);
+ int dest_a = 0, dest_r = 0;
+ for (int j = pPixelWeights->m_SrcStart; j <= pPixelWeights->m_SrcEnd;
+ j++) {
+ int pixel_weight =
+ pPixelWeights->m_Weights[j - pPixelWeights->m_SrcStart];
+ pixel_weight = pixel_weight * src_scan_mask[j] / 255;
+ dest_r += pixel_weight * src_scan[j];
+ dest_a += pixel_weight;
+ }
+ if (m_Flags & FXDIB_BICUBIC_INTERPOL) {
+ dest_r = dest_r < 0 ? 0 : dest_r > 16711680 ? 16711680 : dest_r;
+ dest_a = dest_a < 0 ? 0 : dest_a > 65536 ? 65536 : dest_a;
+ }
+ *dest_scan++ = (uint8_t)(dest_r >> 16);
+ *dest_scan_mask++ = (uint8_t)((dest_a * 255) >> 16);
}
- } else if (m_SrcBpp == 8) {
- if (m_DestBpp == 8) {
- if (!m_bHasAlpha) {
- m_TransMethod = 3;
+ break;
+ }
+ case 5: {
+ for (int col = m_DestClip.left; col < m_DestClip.right; col++) {
+ PixelWeight* pPixelWeights = m_WeightTable.GetPixelWeight(col);
+ int dest_r_y = 0, dest_g_m = 0, dest_b_c = 0;
+ for (int j = pPixelWeights->m_SrcStart; j <= pPixelWeights->m_SrcEnd;
+ j++) {
+ int pixel_weight =
+ pPixelWeights->m_Weights[j - pPixelWeights->m_SrcStart];
+ unsigned long argb_cmyk = m_pSrcPalette[src_scan[j]];
+ if (m_DestFormat == FXDIB_Rgb) {
+ dest_r_y += pixel_weight * (uint8_t)(argb_cmyk >> 16);
+ dest_g_m += pixel_weight * (uint8_t)(argb_cmyk >> 8);
+ dest_b_c += pixel_weight * (uint8_t)argb_cmyk;
} else {
- m_TransMethod = 4;
+ dest_b_c += pixel_weight * (uint8_t)(argb_cmyk >> 24);
+ dest_g_m += pixel_weight * (uint8_t)(argb_cmyk >> 16);
+ dest_r_y += pixel_weight * (uint8_t)(argb_cmyk >> 8);
}
- } else {
- if (!m_bHasAlpha) {
- m_TransMethod = 5;
+ }
+ if (m_Flags & FXDIB_BICUBIC_INTERPOL) {
+ dest_r_y =
+ dest_r_y < 0 ? 0 : dest_r_y > 16711680 ? 16711680 : dest_r_y;
+ dest_g_m =
+ dest_g_m < 0 ? 0 : dest_g_m > 16711680 ? 16711680 : dest_g_m;
+ dest_b_c =
+ dest_b_c < 0 ? 0 : dest_b_c > 16711680 ? 16711680 : dest_b_c;
+ }
+ *dest_scan++ = (uint8_t)(dest_b_c >> 16);
+ *dest_scan++ = (uint8_t)(dest_g_m >> 16);
+ *dest_scan++ = (uint8_t)(dest_r_y >> 16);
+ }
+ break;
+ }
+ case 6: {
+ for (int col = m_DestClip.left; col < m_DestClip.right; col++) {
+ PixelWeight* pPixelWeights = m_WeightTable.GetPixelWeight(col);
+ int dest_a = 0, dest_r_y = 0, dest_g_m = 0, dest_b_c = 0;
+ for (int j = pPixelWeights->m_SrcStart; j <= pPixelWeights->m_SrcEnd;
+ j++) {
+ int pixel_weight =
+ pPixelWeights->m_Weights[j - pPixelWeights->m_SrcStart];
+ pixel_weight = pixel_weight * src_scan_mask[j] / 255;
+ unsigned long argb_cmyk = m_pSrcPalette[src_scan[j]];
+ if (m_DestFormat == FXDIB_Rgba) {
+ dest_r_y += pixel_weight * (uint8_t)(argb_cmyk >> 16);
+ dest_g_m += pixel_weight * (uint8_t)(argb_cmyk >> 8);
+ dest_b_c += pixel_weight * (uint8_t)argb_cmyk;
} else {
- m_TransMethod = 6;
+ dest_b_c += pixel_weight * (uint8_t)(argb_cmyk >> 24);
+ dest_g_m += pixel_weight * (uint8_t)(argb_cmyk >> 16);
+ dest_r_y += pixel_weight * (uint8_t)(argb_cmyk >> 8);
}
+ dest_a += pixel_weight;
+ }
+ if (m_Flags & FXDIB_BICUBIC_INTERPOL) {
+ dest_b_c =
+ dest_b_c < 0 ? 0 : dest_b_c > 16711680 ? 16711680 : dest_b_c;
+ dest_g_m =
+ dest_g_m < 0 ? 0 : dest_g_m > 16711680 ? 16711680 : dest_g_m;
+ dest_r_y =
+ dest_r_y < 0 ? 0 : dest_r_y > 16711680 ? 16711680 : dest_r_y;
+ dest_a = dest_a < 0 ? 0 : dest_a > 65536 ? 65536 : dest_a;
+ }
+ *dest_scan++ = (uint8_t)(dest_b_c >> 16);
+ *dest_scan++ = (uint8_t)(dest_g_m >> 16);
+ *dest_scan++ = (uint8_t)(dest_r_y >> 16);
+ *dest_scan_mask++ = (uint8_t)((dest_a * 255) >> 16);
}
- } else {
- if (!m_bHasAlpha) {
- m_TransMethod = 7;
- } else {
- m_TransMethod = 8;
+ break;
+ }
+ case 7: {
+ for (int col = m_DestClip.left; col < m_DestClip.right; col++) {
+ PixelWeight* pPixelWeights = m_WeightTable.GetPixelWeight(col);
+ int dest_r_y = 0, dest_g_m = 0, dest_b_c = 0;
+ for (int j = pPixelWeights->m_SrcStart; j <= pPixelWeights->m_SrcEnd;
+ j++) {
+ int pixel_weight =
+ pPixelWeights->m_Weights[j - pPixelWeights->m_SrcStart];
+ const uint8_t* src_pixel = src_scan + j * Bpp;
+ dest_b_c += pixel_weight * (*src_pixel++);
+ dest_g_m += pixel_weight * (*src_pixel++);
+ dest_r_y += pixel_weight * (*src_pixel);
+ }
+ if (m_Flags & FXDIB_BICUBIC_INTERPOL) {
+ dest_b_c =
+ dest_b_c < 0 ? 0 : dest_b_c > 16711680 ? 16711680 : dest_b_c;
+ dest_g_m =
+ dest_g_m < 0 ? 0 : dest_g_m > 16711680 ? 16711680 : dest_g_m;
+ dest_r_y =
+ dest_r_y < 0 ? 0 : dest_r_y > 16711680 ? 16711680 : dest_r_y;
+ }
+ *dest_scan++ = (uint8_t)((dest_b_c) >> 16);
+ *dest_scan++ = (uint8_t)((dest_g_m) >> 16);
+ *dest_scan++ = (uint8_t)((dest_r_y) >> 16);
+ dest_scan += Bpp - 3;
}
- }
-}
-FX_BOOL CStretchEngine::Continue(IFX_Pause* pPause)
-{
- while (m_State == 1) {
- if (ContinueStretchHorz(pPause)) {
- return TRUE;
- }
- m_State = 2;
- StretchVert();
- }
- return FALSE;
-}
-CStretchEngine::~CStretchEngine()
-{
- if (m_pDestScanline) {
- FX_Free(m_pDestScanline);
- }
- if (m_pInterBuf) {
- FX_Free(m_pInterBuf);
- }
- if (m_pExtraAlphaBuf) {
- FX_Free(m_pExtraAlphaBuf);
- }
- if (m_pDestMaskScanline) {
- FX_Free(m_pDestMaskScanline);
- }
-}
-FX_BOOL CStretchEngine::StartStretchHorz()
-{
- if (m_DestWidth == 0 || m_pDestScanline == NULL || m_SrcClip.Height() > (int)((1U << 29) / m_InterPitch) || m_SrcClip.Height() == 0) {
- return FALSE;
- }
- m_pInterBuf = FX_TryAlloc(unsigned char, m_SrcClip.Height() * m_InterPitch);
- if (m_pInterBuf == NULL) {
- return FALSE;
- }
- if (m_pSource && m_bHasAlpha && m_pSource->m_pAlphaMask) {
- m_pExtraAlphaBuf = FX_Alloc2D(unsigned char, m_SrcClip.Height(), m_ExtraMaskPitch);
- FX_DWORD size = (m_DestClip.Width() * 8 + 31) / 32 * 4;
- m_pDestMaskScanline = FX_TryAlloc(unsigned char, size);
- if (!m_pDestMaskScanline) {
- return FALSE;
+ break;
+ }
+ case 8: {
+ for (int col = m_DestClip.left; col < m_DestClip.right; col++) {
+ PixelWeight* pPixelWeights = m_WeightTable.GetPixelWeight(col);
+ int dest_a = 0, dest_r_y = 0, dest_g_m = 0, dest_b_c = 0;
+ for (int j = pPixelWeights->m_SrcStart; j <= pPixelWeights->m_SrcEnd;
+ j++) {
+ int pixel_weight =
+ pPixelWeights->m_Weights[j - pPixelWeights->m_SrcStart];
+ const uint8_t* src_pixel = src_scan + j * Bpp;
+ if (m_DestFormat == FXDIB_Argb) {
+ pixel_weight = pixel_weight * src_pixel[3] / 255;
+ } else {
+ pixel_weight = pixel_weight * src_scan_mask[j] / 255;
+ }
+ dest_b_c += pixel_weight * (*src_pixel++);
+ dest_g_m += pixel_weight * (*src_pixel++);
+ dest_r_y += pixel_weight * (*src_pixel);
+ dest_a += pixel_weight;
+ }
+ if (m_Flags & FXDIB_BICUBIC_INTERPOL) {
+ dest_r_y =
+ dest_r_y < 0 ? 0 : dest_r_y > 16711680 ? 16711680 : dest_r_y;
+ dest_g_m =
+ dest_g_m < 0 ? 0 : dest_g_m > 16711680 ? 16711680 : dest_g_m;
+ dest_b_c =
+ dest_b_c < 0 ? 0 : dest_b_c > 16711680 ? 16711680 : dest_b_c;
+ dest_a = dest_a < 0 ? 0 : dest_a > 65536 ? 65536 : dest_a;
+ }
+ *dest_scan++ = (uint8_t)((dest_b_c) >> 16);
+ *dest_scan++ = (uint8_t)((dest_g_m) >> 16);
+ *dest_scan++ = (uint8_t)((dest_r_y) >> 16);
+ if (m_DestFormat == FXDIB_Argb) {
+ *dest_scan = (uint8_t)((dest_a * 255) >> 16);
+ }
+ if (dest_scan_mask) {
+ *dest_scan_mask++ = (uint8_t)((dest_a * 255) >> 16);
+ }
+ dest_scan += Bpp - 3;
}
+ break;
+ }
}
- m_WeightTable.Calc(m_DestWidth, m_DestClip.left, m_DestClip.right, m_SrcWidth, m_SrcClip.left, m_SrcClip.right, m_Flags);
- if (m_WeightTable.m_pWeightTables == NULL) {
- return FALSE;
- }
- m_CurRow = m_SrcClip.top;
- m_State = 1;
- return TRUE;
+ rows_to_go--;
+ }
+ return FALSE;
}
-#define FX_STRECH_PAUSE_ROWS 10
-FX_BOOL CStretchEngine::ContinueStretchHorz(IFX_Pause* pPause)
-{
- if (!m_DestWidth) {
- return 0;
- }
- if (m_pSource->SkipToScanline(m_CurRow, pPause)) {
- return TRUE;
- }
- int Bpp = m_DestBpp / 8;
- int rows_to_go = FX_STRECH_PAUSE_ROWS;
- for (; m_CurRow < m_SrcClip.bottom; m_CurRow ++) {
- if (rows_to_go == 0) {
- if (pPause && pPause->NeedToPauseNow()) {
- return TRUE;
- }
- rows_to_go = FX_STRECH_PAUSE_ROWS;
+void CStretchEngine::StretchVert() {
+ if (m_DestHeight == 0) {
+ return;
+ }
+ CWeightTable table;
+ table.Calc(m_DestHeight, m_DestClip.top, m_DestClip.bottom, m_SrcHeight,
+ m_SrcClip.top, m_SrcClip.bottom, m_Flags);
+ if (table.m_pWeightTables == NULL) {
+ return;
+ }
+ int DestBpp = m_DestBpp / 8;
+ for (int row = m_DestClip.top; row < m_DestClip.bottom; row++) {
+ unsigned char* dest_scan = m_pDestScanline;
+ unsigned char* dest_sacn_mask = m_pDestMaskScanline;
+ PixelWeight* pPixelWeights = table.GetPixelWeight(row);
+ switch (m_TransMethod) {
+ case 1:
+ case 2:
+ case 3: {
+ for (int col = m_DestClip.left; col < m_DestClip.right; col++) {
+ unsigned char* src_scan =
+ m_pInterBuf + (col - m_DestClip.left) * DestBpp;
+ int dest_a = 0;
+ for (int j = pPixelWeights->m_SrcStart; j <= pPixelWeights->m_SrcEnd;
+ j++) {
+ int pixel_weight =
+ pPixelWeights->m_Weights[j - pPixelWeights->m_SrcStart];
+ dest_a +=
+ pixel_weight * src_scan[(j - m_SrcClip.top) * m_InterPitch];
+ }
+ if (m_Flags & FXDIB_BICUBIC_INTERPOL) {
+ dest_a = dest_a < 0 ? 0 : dest_a > 16711680 ? 16711680 : dest_a;
+ }
+ *dest_scan = (uint8_t)(dest_a >> 16);
+ dest_scan += DestBpp;
}
- const uint8_t* src_scan = m_pSource->GetScanline(m_CurRow);
- uint8_t* dest_scan = m_pInterBuf + (m_CurRow - m_SrcClip.top) * m_InterPitch;
- const uint8_t* src_scan_mask = NULL;
- uint8_t* dest_scan_mask = NULL;
- if (m_pExtraAlphaBuf) {
- src_scan_mask = m_pSource->m_pAlphaMask->GetScanline(m_CurRow);
- dest_scan_mask = m_pExtraAlphaBuf + (m_CurRow - m_SrcClip.top) * m_ExtraMaskPitch;
+ break;
+ }
+ case 4: {
+ for (int col = m_DestClip.left; col < m_DestClip.right; col++) {
+ unsigned char* src_scan =
+ m_pInterBuf + (col - m_DestClip.left) * DestBpp;
+ unsigned char* src_scan_mask =
+ m_pExtraAlphaBuf + (col - m_DestClip.left);
+ int dest_a = 0, dest_k = 0;
+ for (int j = pPixelWeights->m_SrcStart; j <= pPixelWeights->m_SrcEnd;
+ j++) {
+ int pixel_weight =
+ pPixelWeights->m_Weights[j - pPixelWeights->m_SrcStart];
+ dest_k +=
+ pixel_weight * src_scan[(j - m_SrcClip.top) * m_InterPitch];
+ dest_a += pixel_weight *
+ src_scan_mask[(j - m_SrcClip.top) * m_ExtraMaskPitch];
+ }
+ if (m_Flags & FXDIB_BICUBIC_INTERPOL) {
+ dest_k = dest_k < 0 ? 0 : dest_k > 16711680 ? 16711680 : dest_k;
+ dest_a = dest_a < 0 ? 0 : dest_a > 16711680 ? 16711680 : dest_a;
+ }
+ *dest_scan = (uint8_t)(dest_k >> 16);
+ dest_scan += DestBpp;
+ *dest_sacn_mask++ = (uint8_t)(dest_a >> 16);
}
- switch (m_TransMethod) {
- case 1:
- case 2: {
- for (int col = m_DestClip.left; col < m_DestClip.right; col ++) {
- PixelWeight* pPixelWeights = m_WeightTable.GetPixelWeight(col);
- int dest_a = 0;
- for (int j = pPixelWeights->m_SrcStart; j <= pPixelWeights->m_SrcEnd; j ++) {
- int pixel_weight = pPixelWeights->m_Weights[j - pPixelWeights->m_SrcStart];
- if (src_scan[j / 8] & (1 << (7 - j % 8))) {
- dest_a += pixel_weight * 255;
- }
- }
- if (m_Flags & FXDIB_BICUBIC_INTERPOL) {
- dest_a = dest_a < 0 ? 0 : dest_a > 16711680 ? 16711680 : dest_a;
- }
- *dest_scan++ = (uint8_t)(dest_a >> 16);
- }
- break;
- }
- case 3: {
- for (int col = m_DestClip.left; col < m_DestClip.right; col ++) {
- PixelWeight* pPixelWeights = m_WeightTable.GetPixelWeight(col);
- int dest_a = 0;
- for (int j = pPixelWeights->m_SrcStart; j <= pPixelWeights->m_SrcEnd; j ++) {
- int pixel_weight = pPixelWeights->m_Weights[j - pPixelWeights->m_SrcStart];
- dest_a += pixel_weight * src_scan[j];
- }
- if (m_Flags & FXDIB_BICUBIC_INTERPOL) {
- dest_a = dest_a < 0 ? 0 : dest_a > 16711680 ? 16711680 : dest_a;
- }
- *dest_scan++ = (uint8_t)(dest_a >> 16);
- }
- break;
- }
- case 4: {
- for (int col = m_DestClip.left; col < m_DestClip.right; col ++) {
- PixelWeight* pPixelWeights = m_WeightTable.GetPixelWeight(col);
- int dest_a = 0, dest_r = 0;
- for (int j = pPixelWeights->m_SrcStart; j <= pPixelWeights->m_SrcEnd; j ++) {
- int pixel_weight = pPixelWeights->m_Weights[j - pPixelWeights->m_SrcStart];
- pixel_weight = pixel_weight * src_scan_mask[j] / 255;
- dest_r += pixel_weight * src_scan[j];
- dest_a += pixel_weight;
- }
- if (m_Flags & FXDIB_BICUBIC_INTERPOL) {
- dest_r = dest_r < 0 ? 0 : dest_r > 16711680 ? 16711680 : dest_r;
- dest_a = dest_a < 0 ? 0 : dest_a > 65536 ? 65536 : dest_a;
- }
- *dest_scan++ = (uint8_t)(dest_r >> 16);
- *dest_scan_mask++ = (uint8_t)((dest_a * 255) >> 16);
- }
- break;
- }
- case 5: {
- for (int col = m_DestClip.left; col < m_DestClip.right; col ++) {
- PixelWeight* pPixelWeights = m_WeightTable.GetPixelWeight(col);
- int dest_r_y = 0, dest_g_m = 0, dest_b_c = 0;
- for (int j = pPixelWeights->m_SrcStart; j <= pPixelWeights->m_SrcEnd; j ++) {
- int pixel_weight = pPixelWeights->m_Weights[j - pPixelWeights->m_SrcStart];
- unsigned long argb_cmyk = m_pSrcPalette[src_scan[j]];
- if (m_DestFormat == FXDIB_Rgb) {
- dest_r_y += pixel_weight * (uint8_t)(argb_cmyk >> 16);
- dest_g_m += pixel_weight * (uint8_t)(argb_cmyk >> 8);
- dest_b_c += pixel_weight * (uint8_t)argb_cmyk;
- } else {
- dest_b_c += pixel_weight * (uint8_t)(argb_cmyk >> 24);
- dest_g_m += pixel_weight * (uint8_t)(argb_cmyk >> 16);
- dest_r_y += pixel_weight * (uint8_t)(argb_cmyk >> 8);
- }
- }
- if (m_Flags & FXDIB_BICUBIC_INTERPOL) {
- dest_r_y = dest_r_y < 0 ? 0 : dest_r_y > 16711680 ? 16711680 : dest_r_y;
- dest_g_m = dest_g_m < 0 ? 0 : dest_g_m > 16711680 ? 16711680 : dest_g_m;
- dest_b_c = dest_b_c < 0 ? 0 : dest_b_c > 16711680 ? 16711680 : dest_b_c;
- }
- *dest_scan++ = (uint8_t)(dest_b_c >> 16);
- *dest_scan++ = (uint8_t)(dest_g_m >> 16);
- *dest_scan++ = (uint8_t)(dest_r_y >> 16);
- }
- break;
- }
- case 6: {
- for (int col = m_DestClip.left; col < m_DestClip.right; col ++) {
- PixelWeight* pPixelWeights = m_WeightTable.GetPixelWeight(col);
- int dest_a = 0, dest_r_y = 0, dest_g_m = 0, dest_b_c = 0;
- for (int j = pPixelWeights->m_SrcStart; j <= pPixelWeights->m_SrcEnd; j ++) {
- int pixel_weight = pPixelWeights->m_Weights[j - pPixelWeights->m_SrcStart];
- pixel_weight = pixel_weight * src_scan_mask[j] / 255;
- unsigned long argb_cmyk = m_pSrcPalette[src_scan[j]];
- if (m_DestFormat == FXDIB_Rgba) {
- dest_r_y += pixel_weight * (uint8_t)(argb_cmyk >> 16);
- dest_g_m += pixel_weight * (uint8_t)(argb_cmyk >> 8);
- dest_b_c += pixel_weight * (uint8_t)argb_cmyk;
- } else {
- dest_b_c += pixel_weight * (uint8_t)(argb_cmyk >> 24);
- dest_g_m += pixel_weight * (uint8_t)(argb_cmyk >> 16);
- dest_r_y += pixel_weight * (uint8_t)(argb_cmyk >> 8);
- }
- dest_a += pixel_weight;
- }
- if (m_Flags & FXDIB_BICUBIC_INTERPOL) {
- dest_b_c = dest_b_c < 0 ? 0 : dest_b_c > 16711680 ? 16711680 : dest_b_c;
- dest_g_m = dest_g_m < 0 ? 0 : dest_g_m > 16711680 ? 16711680 : dest_g_m;
- dest_r_y = dest_r_y < 0 ? 0 : dest_r_y > 16711680 ? 16711680 : dest_r_y;
- dest_a = dest_a < 0 ? 0 : dest_a > 65536 ? 65536 : dest_a;
- }
- *dest_scan++ = (uint8_t)(dest_b_c >> 16);
- *dest_scan++ = (uint8_t)(dest_g_m >> 16);
- *dest_scan++ = (uint8_t)(dest_r_y >> 16);
- *dest_scan_mask++ = (uint8_t)((dest_a * 255) >> 16);
- }
- break;
- }
- case 7: {
- for (int col = m_DestClip.left; col < m_DestClip.right; col ++) {
- PixelWeight* pPixelWeights = m_WeightTable.GetPixelWeight(col);
- int dest_r_y = 0, dest_g_m = 0, dest_b_c = 0;
- for (int j = pPixelWeights->m_SrcStart; j <= pPixelWeights->m_SrcEnd; j ++) {
- int pixel_weight = pPixelWeights->m_Weights[j - pPixelWeights->m_SrcStart];
- const uint8_t* src_pixel = src_scan + j * Bpp;
- dest_b_c += pixel_weight * (*src_pixel++);
- dest_g_m += pixel_weight * (*src_pixel++);
- dest_r_y += pixel_weight * (*src_pixel);
- }
- if (m_Flags & FXDIB_BICUBIC_INTERPOL) {
- dest_b_c = dest_b_c < 0 ? 0 : dest_b_c > 16711680 ? 16711680 : dest_b_c;
- dest_g_m = dest_g_m < 0 ? 0 : dest_g_m > 16711680 ? 16711680 : dest_g_m;
- dest_r_y = dest_r_y < 0 ? 0 : dest_r_y > 16711680 ? 16711680 : dest_r_y;
- }
- *dest_scan++ = (uint8_t)((dest_b_c) >> 16);
- *dest_scan++ = (uint8_t)((dest_g_m) >> 16);
- *dest_scan++ = (uint8_t)((dest_r_y) >> 16);
- dest_scan += Bpp - 3;
- }
- break;
- }
- case 8: {
- for (int col = m_DestClip.left; col < m_DestClip.right; col ++) {
- PixelWeight* pPixelWeights = m_WeightTable.GetPixelWeight(col);
- int dest_a = 0, dest_r_y = 0, dest_g_m = 0, dest_b_c = 0;
- for (int j = pPixelWeights->m_SrcStart; j <= pPixelWeights->m_SrcEnd; j ++) {
- int pixel_weight = pPixelWeights->m_Weights[j - pPixelWeights->m_SrcStart];
- const uint8_t* src_pixel = src_scan + j * Bpp;
- if (m_DestFormat == FXDIB_Argb) {
- pixel_weight = pixel_weight * src_pixel[3] / 255;
- } else {
- pixel_weight = pixel_weight * src_scan_mask[j] / 255;
- }
- dest_b_c += pixel_weight * (*src_pixel++);
- dest_g_m += pixel_weight * (*src_pixel++);
- dest_r_y += pixel_weight * (*src_pixel);
- dest_a += pixel_weight;
- }
- if (m_Flags & FXDIB_BICUBIC_INTERPOL) {
- dest_r_y = dest_r_y < 0 ? 0 : dest_r_y > 16711680 ? 16711680 : dest_r_y;
- dest_g_m = dest_g_m < 0 ? 0 : dest_g_m > 16711680 ? 16711680 : dest_g_m;
- dest_b_c = dest_b_c < 0 ? 0 : dest_b_c > 16711680 ? 16711680 : dest_b_c;
- dest_a = dest_a < 0 ? 0 : dest_a > 65536 ? 65536 : dest_a;
- }
- *dest_scan++ = (uint8_t)((dest_b_c) >> 16);
- *dest_scan++ = (uint8_t)((dest_g_m) >> 16);
- *dest_scan++ = (uint8_t)((dest_r_y) >> 16);
- if (m_DestFormat == FXDIB_Argb) {
- *dest_scan = (uint8_t)((dest_a * 255) >> 16);
- }
- if (dest_scan_mask) {
- *dest_scan_mask++ = (uint8_t)((dest_a * 255) >> 16);
- }
- dest_scan += Bpp - 3;
- }
- break;
- }
+ break;
+ }
+ case 5:
+ case 7: {
+ for (int col = m_DestClip.left; col < m_DestClip.right; col++) {
+ unsigned char* src_scan =
+ m_pInterBuf + (col - m_DestClip.left) * DestBpp;
+ int dest_r_y = 0, dest_g_m = 0, dest_b_c = 0;
+ for (int j = pPixelWeights->m_SrcStart; j <= pPixelWeights->m_SrcEnd;
+ j++) {
+ int pixel_weight =
+ pPixelWeights->m_Weights[j - pPixelWeights->m_SrcStart];
+ const uint8_t* src_pixel =
+ src_scan + (j - m_SrcClip.top) * m_InterPitch;
+ dest_b_c += pixel_weight * (*src_pixel++);
+ dest_g_m += pixel_weight * (*src_pixel++);
+ dest_r_y += pixel_weight * (*src_pixel);
+ }
+ if (m_Flags & FXDIB_BICUBIC_INTERPOL) {
+ dest_r_y =
+ dest_r_y < 0 ? 0 : dest_r_y > 16711680 ? 16711680 : dest_r_y;
+ dest_g_m =
+ dest_g_m < 0 ? 0 : dest_g_m > 16711680 ? 16711680 : dest_g_m;
+ dest_b_c =
+ dest_b_c < 0 ? 0 : dest_b_c > 16711680 ? 16711680 : dest_b_c;
+ }
+ dest_scan[0] = (uint8_t)((dest_b_c) >> 16);
+ dest_scan[1] = (uint8_t)((dest_g_m) >> 16);
+ dest_scan[2] = (uint8_t)((dest_r_y) >> 16);
+ dest_scan += DestBpp;
}
- rows_to_go --;
- }
- return FALSE;
-}
-void CStretchEngine::StretchVert()
-{
- if (m_DestHeight == 0) {
- return;
- }
- CWeightTable table;
- table.Calc(m_DestHeight, m_DestClip.top, m_DestClip.bottom, m_SrcHeight, m_SrcClip.top, m_SrcClip.bottom, m_Flags);
- if (table.m_pWeightTables == NULL) {
- return;
- }
- int DestBpp = m_DestBpp / 8;
- for (int row = m_DestClip.top; row < m_DestClip.bottom; row ++) {
- unsigned char* dest_scan = m_pDestScanline;
- unsigned char* dest_sacn_mask = m_pDestMaskScanline;
- PixelWeight* pPixelWeights = table.GetPixelWeight(row);
- switch(m_TransMethod) {
- case 1:
- case 2:
- case 3: {
- for (int col = m_DestClip.left; col < m_DestClip.right; col ++) {
- unsigned char* src_scan = m_pInterBuf + (col - m_DestClip.left) * DestBpp;
- int dest_a = 0;
- for (int j = pPixelWeights->m_SrcStart; j <= pPixelWeights->m_SrcEnd; j ++) {
- int pixel_weight = pPixelWeights->m_Weights[j - pPixelWeights->m_SrcStart];
- dest_a += pixel_weight * src_scan[(j - m_SrcClip.top) * m_InterPitch];
- }
- if (m_Flags & FXDIB_BICUBIC_INTERPOL) {
- dest_a = dest_a < 0 ? 0 : dest_a > 16711680 ? 16711680 : dest_a;
- }
- *dest_scan = (uint8_t)(dest_a >> 16);
- dest_scan += DestBpp;
- }
- break;
- }
- case 4: {
- for (int col = m_DestClip.left; col < m_DestClip.right; col ++) {
- unsigned char* src_scan = m_pInterBuf + (col - m_DestClip.left) * DestBpp;
- unsigned char* src_scan_mask = m_pExtraAlphaBuf + (col - m_DestClip.left);
- int dest_a = 0, dest_k = 0;
- for (int j = pPixelWeights->m_SrcStart; j <= pPixelWeights->m_SrcEnd; j ++) {
- int pixel_weight = pPixelWeights->m_Weights[j - pPixelWeights->m_SrcStart];
- dest_k += pixel_weight * src_scan[(j - m_SrcClip.top) * m_InterPitch];
- dest_a += pixel_weight * src_scan_mask[(j - m_SrcClip.top) * m_ExtraMaskPitch];
- }
- if (m_Flags & FXDIB_BICUBIC_INTERPOL) {
- dest_k = dest_k < 0 ? 0 : dest_k > 16711680 ? 16711680 : dest_k;
- dest_a = dest_a < 0 ? 0 : dest_a > 16711680 ? 16711680 : dest_a;
- }
- *dest_scan = (uint8_t)(dest_k >> 16);
- dest_scan += DestBpp;
- *dest_sacn_mask++ = (uint8_t)(dest_a >> 16);
- }
- break;
- }
- case 5:
- case 7: {
- for (int col = m_DestClip.left; col < m_DestClip.right; col ++) {
- unsigned char* src_scan = m_pInterBuf + (col - m_DestClip.left) * DestBpp;
- int dest_r_y = 0, dest_g_m = 0, dest_b_c = 0;
- for (int j = pPixelWeights->m_SrcStart; j <= pPixelWeights->m_SrcEnd; j ++) {
- int pixel_weight = pPixelWeights->m_Weights[j - pPixelWeights->m_SrcStart];
- const uint8_t* src_pixel = src_scan + (j - m_SrcClip.top) * m_InterPitch;
- dest_b_c += pixel_weight * (*src_pixel++);
- dest_g_m += pixel_weight * (*src_pixel++);
- dest_r_y += pixel_weight * (*src_pixel);
- }
- if (m_Flags & FXDIB_BICUBIC_INTERPOL) {
- dest_r_y = dest_r_y < 0 ? 0 : dest_r_y > 16711680 ? 16711680 : dest_r_y;
- dest_g_m = dest_g_m < 0 ? 0 : dest_g_m > 16711680 ? 16711680 : dest_g_m;
- dest_b_c = dest_b_c < 0 ? 0 : dest_b_c > 16711680 ? 16711680 : dest_b_c;
- }
- dest_scan[0] = (uint8_t)((dest_b_c) >> 16);
- dest_scan[1] = (uint8_t)((dest_g_m) >> 16);
- dest_scan[2] = (uint8_t)((dest_r_y) >> 16);
- dest_scan += DestBpp;
- }
- break;
- }
- case 6:
- case 8: {
- for (int col = m_DestClip.left; col < m_DestClip.right; col ++) {
- unsigned char* src_scan = m_pInterBuf + (col - m_DestClip.left) * DestBpp;
- unsigned char* src_scan_mask = NULL;
- if (m_DestFormat != FXDIB_Argb) {
- src_scan_mask = m_pExtraAlphaBuf + (col - m_DestClip.left);
- }
- int dest_a = 0, dest_r_y = 0, dest_g_m = 0, dest_b_c = 0;
- for (int j = pPixelWeights->m_SrcStart; j <= pPixelWeights->m_SrcEnd; j ++) {
- int pixel_weight = pPixelWeights->m_Weights[j - pPixelWeights->m_SrcStart];
- const uint8_t* src_pixel = src_scan + (j - m_SrcClip.top) * m_InterPitch;
- int mask_v = 255;
- if (src_scan_mask) {
- mask_v = src_scan_mask[(j - m_SrcClip.top) * m_ExtraMaskPitch];
- }
- dest_b_c += pixel_weight * (*src_pixel++);
- dest_g_m += pixel_weight * (*src_pixel++);
- dest_r_y += pixel_weight * (*src_pixel);
- if (m_DestFormat == FXDIB_Argb) {
- dest_a += pixel_weight * (*(src_pixel + 1));
- } else {
- dest_a += pixel_weight * mask_v;
- }
- }
- if (m_Flags & FXDIB_BICUBIC_INTERPOL) {
- dest_r_y = dest_r_y < 0 ? 0 : dest_r_y > 16711680 ? 16711680 : dest_r_y;
- dest_g_m = dest_g_m < 0 ? 0 : dest_g_m > 16711680 ? 16711680 : dest_g_m;
- dest_b_c = dest_b_c < 0 ? 0 : dest_b_c > 16711680 ? 16711680 : dest_b_c;
- dest_a = dest_a < 0 ? 0 : dest_a > 16711680 ? 16711680 : dest_a;
- }
- if (dest_a) {
- int r = ((FX_DWORD)dest_r_y) * 255 / dest_a;
- int g = ((FX_DWORD)dest_g_m) * 255 / dest_a;
- int b = ((FX_DWORD)dest_b_c) * 255 / dest_a;
- dest_scan[0] = b > 255 ? 255 : b < 0 ? 0 : b;
- dest_scan[1] = g > 255 ? 255 : g < 0 ? 0 : g;
- dest_scan[2] = r > 255 ? 255 : r < 0 ? 0 : r;
- }
- if (m_DestFormat == FXDIB_Argb) {
- dest_scan[3] = (uint8_t)((dest_a) >> 16);
- } else {
- *dest_sacn_mask = (uint8_t)((dest_a) >> 16);
- }
- dest_scan += DestBpp;
- if (dest_sacn_mask) {
- dest_sacn_mask++;
- }
- }
- break;
- }
+ break;
+ }
+ case 6:
+ case 8: {
+ for (int col = m_DestClip.left; col < m_DestClip.right; col++) {
+ unsigned char* src_scan =
+ m_pInterBuf + (col - m_DestClip.left) * DestBpp;
+ unsigned char* src_scan_mask = NULL;
+ if (m_DestFormat != FXDIB_Argb) {
+ src_scan_mask = m_pExtraAlphaBuf + (col - m_DestClip.left);
+ }
+ int dest_a = 0, dest_r_y = 0, dest_g_m = 0, dest_b_c = 0;
+ for (int j = pPixelWeights->m_SrcStart; j <= pPixelWeights->m_SrcEnd;
+ j++) {
+ int pixel_weight =
+ pPixelWeights->m_Weights[j - pPixelWeights->m_SrcStart];
+ const uint8_t* src_pixel =
+ src_scan + (j - m_SrcClip.top) * m_InterPitch;
+ int mask_v = 255;
+ if (src_scan_mask) {
+ mask_v = src_scan_mask[(j - m_SrcClip.top) * m_ExtraMaskPitch];
+ }
+ dest_b_c += pixel_weight * (*src_pixel++);
+ dest_g_m += pixel_weight * (*src_pixel++);
+ dest_r_y += pixel_weight * (*src_pixel);
+ if (m_DestFormat == FXDIB_Argb) {
+ dest_a += pixel_weight * (*(src_pixel + 1));
+ } else {
+ dest_a += pixel_weight * mask_v;
+ }
+ }
+ if (m_Flags & FXDIB_BICUBIC_INTERPOL) {
+ dest_r_y =
+ dest_r_y < 0 ? 0 : dest_r_y > 16711680 ? 16711680 : dest_r_y;
+ dest_g_m =
+ dest_g_m < 0 ? 0 : dest_g_m > 16711680 ? 16711680 : dest_g_m;
+ dest_b_c =
+ dest_b_c < 0 ? 0 : dest_b_c > 16711680 ? 16711680 : dest_b_c;
+ dest_a = dest_a < 0 ? 0 : dest_a > 16711680 ? 16711680 : dest_a;
+ }
+ if (dest_a) {
+ int r = ((FX_DWORD)dest_r_y) * 255 / dest_a;
+ int g = ((FX_DWORD)dest_g_m) * 255 / dest_a;
+ int b = ((FX_DWORD)dest_b_c) * 255 / dest_a;
+ dest_scan[0] = b > 255 ? 255 : b < 0 ? 0 : b;
+ dest_scan[1] = g > 255 ? 255 : g < 0 ? 0 : g;
+ dest_scan[2] = r > 255 ? 255 : r < 0 ? 0 : r;
+ }
+ if (m_DestFormat == FXDIB_Argb) {
+ dest_scan[3] = (uint8_t)((dest_a) >> 16);
+ } else {
+ *dest_sacn_mask = (uint8_t)((dest_a) >> 16);
+ }
+ dest_scan += DestBpp;
+ if (dest_sacn_mask) {
+ dest_sacn_mask++;
+ }
}
- m_pDestBitmap->ComposeScanline(row - m_DestClip.top, m_pDestScanline, m_pDestMaskScanline);
+ break;
+ }
}
+ m_pDestBitmap->ComposeScanline(row - m_DestClip.top, m_pDestScanline,
+ m_pDestMaskScanline);
+ }
}
-CFX_ImageStretcher::CFX_ImageStretcher()
-{
- m_pScanline = NULL;
- m_pStretchEngine = NULL;
- m_pMaskScanline = NULL;
+CFX_ImageStretcher::CFX_ImageStretcher() {
+ m_pScanline = NULL;
+ m_pStretchEngine = NULL;
+ m_pMaskScanline = NULL;
}
-CFX_ImageStretcher::~CFX_ImageStretcher()
-{
- if (m_pScanline) {
- FX_Free(m_pScanline);
- }
- delete m_pStretchEngine;
- if (m_pMaskScanline) {
- FX_Free(m_pMaskScanline);
- }
+CFX_ImageStretcher::~CFX_ImageStretcher() {
+ if (m_pScanline) {
+ FX_Free(m_pScanline);
+ }
+ delete m_pStretchEngine;
+ if (m_pMaskScanline) {
+ FX_Free(m_pMaskScanline);
+ }
}
-FXDIB_Format _GetStretchedFormat(const CFX_DIBSource* pSrc)
-{
- FXDIB_Format format = pSrc->GetFormat();
- if (format == FXDIB_1bppMask) {
- format = FXDIB_8bppMask;
- } else if (format == FXDIB_1bppRgb) {
- format = FXDIB_8bppRgb;
- } else if (format == FXDIB_8bppRgb) {
- if (pSrc->GetPalette()) {
- format = FXDIB_Rgb;
- }
- }
- return format;
+FXDIB_Format _GetStretchedFormat(const CFX_DIBSource* pSrc) {
+ FXDIB_Format format = pSrc->GetFormat();
+ if (format == FXDIB_1bppMask) {
+ format = FXDIB_8bppMask;
+ } else if (format == FXDIB_1bppRgb) {
+ format = FXDIB_8bppRgb;
+ } else if (format == FXDIB_8bppRgb) {
+ if (pSrc->GetPalette()) {
+ format = FXDIB_Rgb;
+ }
+ }
+ return format;
}
FX_BOOL CFX_ImageStretcher::Start(IFX_ScanlineComposer* pDest,
- const CFX_DIBSource* pSource, int dest_width, int dest_height,
- const FX_RECT& rect, FX_DWORD flags)
-{
- m_DestFormat = _GetStretchedFormat(pSource);
- m_DestBPP = m_DestFormat & 0xff;
- m_pDest = pDest;
- m_pSource = pSource;
- m_DestWidth = dest_width;
- m_DestHeight = dest_height;
- m_ClipRect = rect;
- m_Flags = flags;
- if (pSource->GetFormat() == FXDIB_1bppRgb && pSource->GetPalette()) {
- FX_ARGB pal[256];
- int a0, r0, g0, b0, a1, r1, g1, b1;
- ArgbDecode(pSource->GetPaletteEntry(0), a0, r0, g0, b0);
- ArgbDecode(pSource->GetPaletteEntry(1), a1, r1, g1, b1);
- for (int i = 0; i < 256; i ++) {
- int a = a0 + (a1 - a0) * i / 255;
- int r = r0 + (r1 - r0) * i / 255;
- int g = g0 + (g1 - g0) * i / 255;
- int b = b0 + (b1 - b0) * i / 255;
- pal[i] = ArgbEncode(a, r, g, b);
- }
- if (!pDest->SetInfo(rect.Width(), rect.Height(), m_DestFormat, pal)) {
- return FALSE;
- }
- } else if (pSource->GetFormat() == FXDIB_1bppCmyk && pSource->GetPalette()) {
- FX_CMYK pal[256];
- int c0, m0, y0, k0, c1, m1, y1, k1;
- CmykDecode(pSource->GetPaletteEntry(0), c0, m0, y0, k0);
- CmykDecode(pSource->GetPaletteEntry(1), c1, m1, y1, k1);
- for (int i = 0; i < 256; i ++) {
- int c = c0 + (c1 - c0) * i / 255;
- int m = m0 + (m1 - m0) * i / 255;
- int y = y0 + (y1 - y0) * i / 255;
- int k = k0 + (k1 - k0) * i / 255;
- pal[i] = CmykEncode(c, m, y, k);
- }
- if (!pDest->SetInfo(rect.Width(), rect.Height(), m_DestFormat, pal)) {
- return FALSE;
- }
- } else if (!pDest->SetInfo(rect.Width(), rect.Height(), m_DestFormat, NULL)) {
- return FALSE;
- }
- if (flags & FXDIB_DOWNSAMPLE) {
- return StartQuickStretch();
- }
- return StartStretch();
+ const CFX_DIBSource* pSource,
+ int dest_width,
+ int dest_height,
+ const FX_RECT& rect,
+ FX_DWORD flags) {
+ m_DestFormat = _GetStretchedFormat(pSource);
+ m_DestBPP = m_DestFormat & 0xff;
+ m_pDest = pDest;
+ m_pSource = pSource;
+ m_DestWidth = dest_width;
+ m_DestHeight = dest_height;
+ m_ClipRect = rect;
+ m_Flags = flags;
+ if (pSource->GetFormat() == FXDIB_1bppRgb && pSource->GetPalette()) {
+ FX_ARGB pal[256];
+ int a0, r0, g0, b0, a1, r1, g1, b1;
+ ArgbDecode(pSource->GetPaletteEntry(0), a0, r0, g0, b0);
+ ArgbDecode(pSource->GetPaletteEntry(1), a1, r1, g1, b1);
+ for (int i = 0; i < 256; i++) {
+ int a = a0 + (a1 - a0) * i / 255;
+ int r = r0 + (r1 - r0) * i / 255;
+ int g = g0 + (g1 - g0) * i / 255;
+ int b = b0 + (b1 - b0) * i / 255;
+ pal[i] = ArgbEncode(a, r, g, b);
+ }
+ if (!pDest->SetInfo(rect.Width(), rect.Height(), m_DestFormat, pal)) {
+ return FALSE;
+ }
+ } else if (pSource->GetFormat() == FXDIB_1bppCmyk && pSource->GetPalette()) {
+ FX_CMYK pal[256];
+ int c0, m0, y0, k0, c1, m1, y1, k1;
+ CmykDecode(pSource->GetPaletteEntry(0), c0, m0, y0, k0);
+ CmykDecode(pSource->GetPaletteEntry(1), c1, m1, y1, k1);
+ for (int i = 0; i < 256; i++) {
+ int c = c0 + (c1 - c0) * i / 255;
+ int m = m0 + (m1 - m0) * i / 255;
+ int y = y0 + (y1 - y0) * i / 255;
+ int k = k0 + (k1 - k0) * i / 255;
+ pal[i] = CmykEncode(c, m, y, k);
+ }
+ if (!pDest->SetInfo(rect.Width(), rect.Height(), m_DestFormat, pal)) {
+ return FALSE;
+ }
+ } else if (!pDest->SetInfo(rect.Width(), rect.Height(), m_DestFormat, NULL)) {
+ return FALSE;
+ }
+ if (flags & FXDIB_DOWNSAMPLE) {
+ return StartQuickStretch();
+ }
+ return StartStretch();
}
-FX_BOOL CFX_ImageStretcher::Continue(IFX_Pause* pPause)
-{
- if (m_Flags & FXDIB_DOWNSAMPLE) {
- return ContinueQuickStretch(pPause);
- }
- return ContinueStretch(pPause);
+FX_BOOL CFX_ImageStretcher::Continue(IFX_Pause* pPause) {
+ if (m_Flags & FXDIB_DOWNSAMPLE) {
+ return ContinueQuickStretch(pPause);
+ }
+ return ContinueStretch(pPause);
}
-#define MAX_PROGRESSIVE_STRETCH_PIXELS 1000000
-FX_BOOL CFX_ImageStretcher::StartStretch()
-{
- m_pStretchEngine = new CStretchEngine(m_pDest, m_DestFormat, m_DestWidth, m_DestHeight, m_ClipRect, m_pSource, m_Flags);
- m_pStretchEngine->StartStretchHorz();
- if (m_pSource->GetWidth() * m_pSource->GetHeight() < MAX_PROGRESSIVE_STRETCH_PIXELS) {
- m_pStretchEngine->Continue(NULL);
- return FALSE;
- }
- return TRUE;
+#define MAX_PROGRESSIVE_STRETCH_PIXELS 1000000
+FX_BOOL CFX_ImageStretcher::StartStretch() {
+ m_pStretchEngine =
+ new CStretchEngine(m_pDest, m_DestFormat, m_DestWidth, m_DestHeight,
+ m_ClipRect, m_pSource, m_Flags);
+ m_pStretchEngine->StartStretchHorz();
+ if (m_pSource->GetWidth() * m_pSource->GetHeight() <
+ MAX_PROGRESSIVE_STRETCH_PIXELS) {
+ m_pStretchEngine->Continue(NULL);
+ return FALSE;
+ }
+ return TRUE;
}
-FX_BOOL CFX_ImageStretcher::ContinueStretch(IFX_Pause* pPause)
-{
- if (m_pStretchEngine == NULL) {
- return FALSE;
- }
- return m_pStretchEngine->Continue(pPause);
+FX_BOOL CFX_ImageStretcher::ContinueStretch(IFX_Pause* pPause) {
+ if (m_pStretchEngine == NULL) {
+ return FALSE;
+ }
+ return m_pStretchEngine->Continue(pPause);
}
-FX_BOOL CFX_ImageStretcher::StartQuickStretch()
-{
- m_bFlipX = FALSE;
- m_bFlipY = FALSE;
- if (m_DestWidth < 0) {
- m_bFlipX = TRUE;
- m_DestWidth = -m_DestWidth;
- }
- if (m_DestHeight < 0) {
- m_bFlipY = TRUE;
- m_DestHeight = -m_DestHeight;
- }
- m_LineIndex = 0;
- FX_DWORD size = m_ClipRect.Width();
- if (size && m_DestBPP > (int)(INT_MAX / size)) {
- return FALSE;
+FX_BOOL CFX_ImageStretcher::StartQuickStretch() {
+ m_bFlipX = FALSE;
+ m_bFlipY = FALSE;
+ if (m_DestWidth < 0) {
+ m_bFlipX = TRUE;
+ m_DestWidth = -m_DestWidth;
+ }
+ if (m_DestHeight < 0) {
+ m_bFlipY = TRUE;
+ m_DestHeight = -m_DestHeight;
+ }
+ m_LineIndex = 0;
+ FX_DWORD size = m_ClipRect.Width();
+ if (size && m_DestBPP > (int)(INT_MAX / size)) {
+ return FALSE;
+ }
+ size *= m_DestBPP;
+ m_pScanline = FX_Alloc(uint8_t, (size / 8 + 3) / 4 * 4);
+ if (m_pSource->m_pAlphaMask) {
+ m_pMaskScanline = FX_Alloc(uint8_t, (m_ClipRect.Width() + 3) / 4 * 4);
+ }
+ if (m_pSource->GetWidth() * m_pSource->GetHeight() <
+ MAX_PROGRESSIVE_STRETCH_PIXELS) {
+ ContinueQuickStretch(NULL);
+ return FALSE;
+ }
+ return TRUE;
+}
+FX_BOOL CFX_ImageStretcher::ContinueQuickStretch(IFX_Pause* pPause) {
+ if (m_pScanline == NULL) {
+ return FALSE;
+ }
+ int result_width = m_ClipRect.Width(), result_height = m_ClipRect.Height();
+ int src_height = m_pSource->GetHeight();
+ for (; m_LineIndex < result_height; m_LineIndex++) {
+ int dest_y, src_y;
+ if (m_bFlipY) {
+ dest_y = result_height - m_LineIndex - 1;
+ src_y = (m_DestHeight - (dest_y + m_ClipRect.top) - 1) * src_height /
+ m_DestHeight;
+ } else {
+ dest_y = m_LineIndex;
+ src_y = (dest_y + m_ClipRect.top) * src_height / m_DestHeight;
}
- size *= m_DestBPP;
- m_pScanline = FX_Alloc(uint8_t, (size / 8 + 3) / 4 * 4);
- if (m_pSource->m_pAlphaMask) {
- m_pMaskScanline = FX_Alloc(uint8_t, (m_ClipRect.Width() + 3) / 4 * 4);
+ if (src_y >= src_height) {
+ src_y = src_height - 1;
}
- if (m_pSource->GetWidth() * m_pSource->GetHeight() < MAX_PROGRESSIVE_STRETCH_PIXELS) {
- ContinueQuickStretch(NULL);
- return FALSE;
+ if (src_y < 0) {
+ src_y = 0;
}
- return TRUE;
-}
-FX_BOOL CFX_ImageStretcher::ContinueQuickStretch(IFX_Pause* pPause)
-{
- if (m_pScanline == NULL) {
- return FALSE;
+ if (m_pSource->SkipToScanline(src_y, pPause)) {
+ return TRUE;
}
- int result_width = m_ClipRect.Width(), result_height = m_ClipRect.Height();
- int src_height = m_pSource->GetHeight();
- for (; m_LineIndex < result_height; m_LineIndex ++) {
- int dest_y, src_y;
- if (m_bFlipY) {
- dest_y = result_height - m_LineIndex - 1;
- src_y = (m_DestHeight - (dest_y + m_ClipRect.top) - 1) * src_height / m_DestHeight;
- } else {
- dest_y = m_LineIndex;
- src_y = (dest_y + m_ClipRect.top) * src_height / m_DestHeight;
- }
- if (src_y >= src_height) {
- src_y = src_height - 1;
- }
- if (src_y < 0) {
- src_y = 0;
- }
- if (m_pSource->SkipToScanline(src_y, pPause)) {
- return TRUE;
- }
- m_pSource->DownSampleScanline(src_y, m_pScanline, m_DestBPP, m_DestWidth, m_bFlipX, m_ClipRect.left, result_width);
- if (m_pMaskScanline) {
- m_pSource->m_pAlphaMask->DownSampleScanline(src_y, m_pMaskScanline, 1, m_DestWidth, m_bFlipX, m_ClipRect.left, result_width);
- }
- m_pDest->ComposeScanline(dest_y, m_pScanline, m_pMaskScanline);
+ m_pSource->DownSampleScanline(src_y, m_pScanline, m_DestBPP, m_DestWidth,
+ m_bFlipX, m_ClipRect.left, result_width);
+ if (m_pMaskScanline) {
+ m_pSource->m_pAlphaMask->DownSampleScanline(
+ src_y, m_pMaskScanline, 1, m_DestWidth, m_bFlipX, m_ClipRect.left,
+ result_width);
}
- return FALSE;
+ m_pDest->ComposeScanline(dest_y, m_pScanline, m_pMaskScanline);
+ }
+ return FALSE;
}
diff --git a/core/src/fxge/dib/fx_dib_main.cpp b/core/src/fxge/dib/fx_dib_main.cpp
index 8a864f10a1..3c886e5cfe 100644
--- a/core/src/fxge/dib/fx_dib_main.cpp
+++ b/core/src/fxge/dib/fx_dib_main.cpp
@@ -9,1660 +9,1727 @@
#include "../../../include/fxcodec/fx_codec.h"
#include "dib_int.h"
#include <limits.h>
-FX_BOOL ConvertBuffer(FXDIB_Format dest_format, uint8_t* dest_buf, int dest_pitch, int width, int height,
- const CFX_DIBSource* pSrcBitmap, int src_left, int src_top, FX_DWORD*& pal, void* pIccTransform);
-void CmykDecode(FX_DWORD cmyk, int& c, int& m, int& y, int& k)
-{
- c = FXSYS_GetCValue(cmyk);
- m = FXSYS_GetMValue(cmyk);
- y = FXSYS_GetYValue(cmyk);
- k = FXSYS_GetKValue(cmyk);
+FX_BOOL ConvertBuffer(FXDIB_Format dest_format,
+ uint8_t* dest_buf,
+ int dest_pitch,
+ int width,
+ int height,
+ const CFX_DIBSource* pSrcBitmap,
+ int src_left,
+ int src_top,
+ FX_DWORD*& pal,
+ void* pIccTransform);
+void CmykDecode(FX_DWORD cmyk, int& c, int& m, int& y, int& k) {
+ c = FXSYS_GetCValue(cmyk);
+ m = FXSYS_GetMValue(cmyk);
+ y = FXSYS_GetYValue(cmyk);
+ k = FXSYS_GetKValue(cmyk);
}
-void ArgbDecode(FX_DWORD argb, int& a, int& r, int& g, int& b)
-{
- a = FXARGB_A(argb);
- r = FXARGB_R(argb);
- g = FXARGB_G(argb);
- b = FXARGB_B(argb);
+void ArgbDecode(FX_DWORD argb, int& a, int& r, int& g, int& b) {
+ a = FXARGB_A(argb);
+ r = FXARGB_R(argb);
+ g = FXARGB_G(argb);
+ b = FXARGB_B(argb);
}
-void ArgbDecode(FX_DWORD argb, int& a, FX_COLORREF& rgb)
-{
- a = FXARGB_A(argb);
- rgb = FXSYS_RGB(FXARGB_R(argb), FXARGB_G(argb), FXARGB_B(argb));
+void ArgbDecode(FX_DWORD argb, int& a, FX_COLORREF& rgb) {
+ a = FXARGB_A(argb);
+ rgb = FXSYS_RGB(FXARGB_R(argb), FXARGB_G(argb), FXARGB_B(argb));
}
-FX_DWORD ArgbEncode(int a, FX_COLORREF rgb)
-{
- return FXARGB_MAKE(a, FXSYS_GetRValue(rgb), FXSYS_GetGValue(rgb), FXSYS_GetBValue(rgb));
+FX_DWORD ArgbEncode(int a, FX_COLORREF rgb) {
+ return FXARGB_MAKE(a, FXSYS_GetRValue(rgb), FXSYS_GetGValue(rgb),
+ FXSYS_GetBValue(rgb));
}
-CFX_DIBSource::CFX_DIBSource()
-{
- m_bpp = 0;
- m_AlphaFlag = 0;
- m_Width = m_Height = 0;
- m_Pitch = 0;
- m_pPalette = NULL;
- m_pAlphaMask = NULL;
+CFX_DIBSource::CFX_DIBSource() {
+ m_bpp = 0;
+ m_AlphaFlag = 0;
+ m_Width = m_Height = 0;
+ m_Pitch = 0;
+ m_pPalette = NULL;
+ m_pAlphaMask = NULL;
}
-CFX_DIBSource::~CFX_DIBSource()
-{
- if (m_pPalette) {
- FX_Free(m_pPalette);
- }
- delete m_pAlphaMask;
+CFX_DIBSource::~CFX_DIBSource() {
+ if (m_pPalette) {
+ FX_Free(m_pPalette);
+ }
+ delete m_pAlphaMask;
}
-CFX_DIBitmap::CFX_DIBitmap()
-{
- m_bExtBuf = FALSE;
- m_pBuffer = NULL;
- m_pPalette = NULL;
+CFX_DIBitmap::CFX_DIBitmap() {
+ m_bExtBuf = FALSE;
+ m_pBuffer = NULL;
+ m_pPalette = NULL;
}
-#define _MAX_OOM_LIMIT_ 12000000
-FX_BOOL CFX_DIBitmap::Create(int width, int height, FXDIB_Format format, uint8_t* pBuffer, int pitch)
-{
- m_pBuffer = NULL;
- m_bpp = (uint8_t)format;
- m_AlphaFlag = (uint8_t)(format >> 8);
- m_Width = m_Height = m_Pitch = 0;
- if (width <= 0 || height <= 0 || pitch < 0) {
- return FALSE;
- }
- if ((INT_MAX - 31) / width < (format & 0xff)) {
- return FALSE;
- }
- if (!pitch) {
- pitch = (width * (format & 0xff) + 31) / 32 * 4;
- }
- if ((1 << 30) / pitch < height) {
+#define _MAX_OOM_LIMIT_ 12000000
+FX_BOOL CFX_DIBitmap::Create(int width,
+ int height,
+ FXDIB_Format format,
+ uint8_t* pBuffer,
+ int pitch) {
+ m_pBuffer = NULL;
+ m_bpp = (uint8_t)format;
+ m_AlphaFlag = (uint8_t)(format >> 8);
+ m_Width = m_Height = m_Pitch = 0;
+ if (width <= 0 || height <= 0 || pitch < 0) {
+ return FALSE;
+ }
+ if ((INT_MAX - 31) / width < (format & 0xff)) {
+ return FALSE;
+ }
+ if (!pitch) {
+ pitch = (width * (format & 0xff) + 31) / 32 * 4;
+ }
+ if ((1 << 30) / pitch < height) {
+ return FALSE;
+ }
+ if (pBuffer) {
+ m_pBuffer = pBuffer;
+ m_bExtBuf = TRUE;
+ } else {
+ int size = pitch * height + 4;
+ int oomlimit = _MAX_OOM_LIMIT_;
+ if (oomlimit >= 0 && size >= oomlimit) {
+ m_pBuffer = FX_TryAlloc(uint8_t, size);
+ if (m_pBuffer == NULL) {
return FALSE;
- }
- if (pBuffer) {
- m_pBuffer = pBuffer;
- m_bExtBuf = TRUE;
+ }
} else {
- int size = pitch * height + 4;
- int oomlimit = _MAX_OOM_LIMIT_;
- if (oomlimit >= 0 && size >= oomlimit) {
- m_pBuffer = FX_TryAlloc(uint8_t, size);
- if (m_pBuffer == NULL) {
- return FALSE;
- }
- } else {
- m_pBuffer = FX_Alloc(uint8_t, size);
- }
+ m_pBuffer = FX_Alloc(uint8_t, size);
}
- m_Width = width;
- m_Height = height;
- m_Pitch = pitch;
- if (HasAlpha() && format != FXDIB_Argb) {
- FX_BOOL ret = TRUE;
- ret = BuildAlphaMask();
- if (!ret) {
- if (!m_bExtBuf && m_pBuffer) {
- FX_Free(m_pBuffer);
- m_pBuffer = NULL;
- m_Width = m_Height = m_Pitch = 0;
- return FALSE;
- }
- }
- }
- return TRUE;
-}
-FX_BOOL CFX_DIBitmap::Copy(const CFX_DIBSource* pSrc)
-{
- if (m_pBuffer) {
- return FALSE;
- }
- if (!Create(pSrc->GetWidth(), pSrc->GetHeight(), pSrc->GetFormat())) {
+ }
+ m_Width = width;
+ m_Height = height;
+ m_Pitch = pitch;
+ if (HasAlpha() && format != FXDIB_Argb) {
+ FX_BOOL ret = TRUE;
+ ret = BuildAlphaMask();
+ if (!ret) {
+ if (!m_bExtBuf && m_pBuffer) {
+ FX_Free(m_pBuffer);
+ m_pBuffer = NULL;
+ m_Width = m_Height = m_Pitch = 0;
return FALSE;
+ }
}
- CopyPalette(pSrc->GetPalette());
- CopyAlphaMask(pSrc->m_pAlphaMask);
- for (int row = 0; row < pSrc->GetHeight(); row ++) {
- FXSYS_memcpy(m_pBuffer + row * m_Pitch, pSrc->GetScanline(row), m_Pitch);
- }
- return TRUE;
+ }
+ return TRUE;
}
-CFX_DIBitmap::~CFX_DIBitmap()
-{
- if (m_pBuffer && !m_bExtBuf) {
- FX_Free(m_pBuffer);
- }
- m_pBuffer = NULL;
+FX_BOOL CFX_DIBitmap::Copy(const CFX_DIBSource* pSrc) {
+ if (m_pBuffer) {
+ return FALSE;
+ }
+ if (!Create(pSrc->GetWidth(), pSrc->GetHeight(), pSrc->GetFormat())) {
+ return FALSE;
+ }
+ CopyPalette(pSrc->GetPalette());
+ CopyAlphaMask(pSrc->m_pAlphaMask);
+ for (int row = 0; row < pSrc->GetHeight(); row++) {
+ FXSYS_memcpy(m_pBuffer + row * m_Pitch, pSrc->GetScanline(row), m_Pitch);
+ }
+ return TRUE;
}
-void CFX_DIBitmap::TakeOver(CFX_DIBitmap* pSrcBitmap)
-{
- if (m_pBuffer && !m_bExtBuf) {
- FX_Free(m_pBuffer);
- }
- if (m_pPalette) {
- FX_Free(m_pPalette);
- }
- delete m_pAlphaMask;
- m_pBuffer = pSrcBitmap->m_pBuffer;
- m_pPalette = pSrcBitmap->m_pPalette;
- m_pAlphaMask = pSrcBitmap->m_pAlphaMask;
- pSrcBitmap->m_pBuffer = NULL;
- pSrcBitmap->m_pPalette = NULL;
- pSrcBitmap->m_pAlphaMask = NULL;
- m_bpp = pSrcBitmap->m_bpp;
- m_bExtBuf = pSrcBitmap->m_bExtBuf;
- m_AlphaFlag = pSrcBitmap->m_AlphaFlag;
- m_Width = pSrcBitmap->m_Width;
- m_Height = pSrcBitmap->m_Height;
- m_Pitch = pSrcBitmap->m_Pitch;
+CFX_DIBitmap::~CFX_DIBitmap() {
+ if (m_pBuffer && !m_bExtBuf) {
+ FX_Free(m_pBuffer);
+ }
+ m_pBuffer = NULL;
}
-CFX_DIBitmap* CFX_DIBSource::Clone(const FX_RECT* pClip) const
-{
- FX_RECT rect(0, 0, m_Width, m_Height);
- if (pClip) {
- rect.Intersect(*pClip);
- if (rect.IsEmpty()) {
- return NULL;
- }
+void CFX_DIBitmap::TakeOver(CFX_DIBitmap* pSrcBitmap) {
+ if (m_pBuffer && !m_bExtBuf) {
+ FX_Free(m_pBuffer);
+ }
+ if (m_pPalette) {
+ FX_Free(m_pPalette);
+ }
+ delete m_pAlphaMask;
+ m_pBuffer = pSrcBitmap->m_pBuffer;
+ m_pPalette = pSrcBitmap->m_pPalette;
+ m_pAlphaMask = pSrcBitmap->m_pAlphaMask;
+ pSrcBitmap->m_pBuffer = NULL;
+ pSrcBitmap->m_pPalette = NULL;
+ pSrcBitmap->m_pAlphaMask = NULL;
+ m_bpp = pSrcBitmap->m_bpp;
+ m_bExtBuf = pSrcBitmap->m_bExtBuf;
+ m_AlphaFlag = pSrcBitmap->m_AlphaFlag;
+ m_Width = pSrcBitmap->m_Width;
+ m_Height = pSrcBitmap->m_Height;
+ m_Pitch = pSrcBitmap->m_Pitch;
+}
+CFX_DIBitmap* CFX_DIBSource::Clone(const FX_RECT* pClip) const {
+ FX_RECT rect(0, 0, m_Width, m_Height);
+ if (pClip) {
+ rect.Intersect(*pClip);
+ if (rect.IsEmpty()) {
+ return NULL;
+ }
+ }
+ CFX_DIBitmap* pNewBitmap = new CFX_DIBitmap;
+ if (!pNewBitmap->Create(rect.Width(), rect.Height(), GetFormat())) {
+ delete pNewBitmap;
+ return NULL;
+ }
+ pNewBitmap->CopyPalette(m_pPalette);
+ pNewBitmap->CopyAlphaMask(m_pAlphaMask, pClip);
+ if (GetBPP() == 1 && rect.left % 8 != 0) {
+ int left_shift = rect.left % 32;
+ int right_shift = 32 - left_shift;
+ int dword_count = pNewBitmap->m_Pitch / 4;
+ for (int row = rect.top; row < rect.bottom; row++) {
+ FX_DWORD* src_scan = (FX_DWORD*)GetScanline(row) + rect.left / 32;
+ FX_DWORD* dest_scan = (FX_DWORD*)pNewBitmap->GetScanline(row - rect.top);
+ for (int i = 0; i < dword_count; i++) {
+ dest_scan[i] =
+ (src_scan[i] << left_shift) | (src_scan[i + 1] >> right_shift);
+ }
+ }
+ } else {
+ int copy_len = (pNewBitmap->GetWidth() * pNewBitmap->GetBPP() + 7) / 8;
+ if (m_Pitch < (FX_DWORD)copy_len) {
+ copy_len = m_Pitch;
+ }
+ for (int row = rect.top; row < rect.bottom; row++) {
+ const uint8_t* src_scan = GetScanline(row) + rect.left * m_bpp / 8;
+ uint8_t* dest_scan = (uint8_t*)pNewBitmap->GetScanline(row - rect.top);
+ FXSYS_memcpy(dest_scan, src_scan, copy_len);
+ }
+ }
+ return pNewBitmap;
+}
+void CFX_DIBSource::BuildPalette() {
+ if (m_pPalette) {
+ return;
+ }
+ if (GetBPP() == 1) {
+ m_pPalette = FX_Alloc(FX_DWORD, 2);
+ if (IsCmykImage()) {
+ m_pPalette[0] = 0xff;
+ m_pPalette[1] = 0;
+ } else {
+ m_pPalette[0] = 0xff000000;
+ m_pPalette[1] = 0xffffffff;
}
- CFX_DIBitmap* pNewBitmap = new CFX_DIBitmap;
- if (!pNewBitmap->Create(rect.Width(), rect.Height(), GetFormat())) {
- delete pNewBitmap;
- return NULL;
- }
- pNewBitmap->CopyPalette(m_pPalette);
- pNewBitmap->CopyAlphaMask(m_pAlphaMask, pClip);
- if (GetBPP() == 1 && rect.left % 8 != 0) {
- int left_shift = rect.left % 32;
- int right_shift = 32 - left_shift;
- int dword_count = pNewBitmap->m_Pitch / 4;
- for (int row = rect.top; row < rect.bottom; row ++) {
- FX_DWORD* src_scan = (FX_DWORD*)GetScanline(row) + rect.left / 32;
- FX_DWORD* dest_scan = (FX_DWORD*)pNewBitmap->GetScanline(row - rect.top);
- for (int i = 0; i < dword_count; i ++) {
- dest_scan[i] = (src_scan[i] << left_shift) | (src_scan[i + 1] >> right_shift);
- }
- }
+ } else if (GetBPP() == 8) {
+ m_pPalette = FX_Alloc(FX_DWORD, 256);
+ if (IsCmykImage()) {
+ for (int i = 0; i < 256; i++) {
+ m_pPalette[i] = 0xff - i;
+ }
} else {
- int copy_len = (pNewBitmap->GetWidth() * pNewBitmap->GetBPP() + 7) / 8;
- if (m_Pitch < (FX_DWORD)copy_len) {
- copy_len = m_Pitch;
- }
- for (int row = rect.top; row < rect.bottom; row ++) {
- const uint8_t* src_scan = GetScanline(row) + rect.left * m_bpp / 8;
- uint8_t* dest_scan = (uint8_t*)pNewBitmap->GetScanline(row - rect.top);
- FXSYS_memcpy(dest_scan, src_scan, copy_len);
- }
+ for (int i = 0; i < 256; i++) {
+ m_pPalette[i] = 0xff000000 | (i * 0x10101);
+ }
}
- return pNewBitmap;
+ }
}
-void CFX_DIBSource::BuildPalette()
-{
- if (m_pPalette) {
- return;
- }
+FX_BOOL CFX_DIBSource::BuildAlphaMask() {
+ if (m_pAlphaMask) {
+ return TRUE;
+ }
+ m_pAlphaMask = new CFX_DIBitmap;
+ if (!m_pAlphaMask->Create(m_Width, m_Height, FXDIB_8bppMask)) {
+ delete m_pAlphaMask;
+ m_pAlphaMask = NULL;
+ return FALSE;
+ }
+ FXSYS_memset(m_pAlphaMask->GetBuffer(), 0xff,
+ m_pAlphaMask->GetHeight() * m_pAlphaMask->GetPitch());
+ return TRUE;
+}
+FX_DWORD CFX_DIBSource::GetPaletteEntry(int index) const {
+ ASSERT((GetBPP() == 1 || GetBPP() == 8) && !IsAlphaMask());
+ if (m_pPalette) {
+ return m_pPalette[index];
+ }
+ if (IsCmykImage()) {
if (GetBPP() == 1) {
- m_pPalette = FX_Alloc(FX_DWORD, 2);
- if(IsCmykImage()) {
- m_pPalette[0] = 0xff;
- m_pPalette[1] = 0;
- } else {
- m_pPalette[0] = 0xff000000;
- m_pPalette[1] = 0xffffffff;
- }
- } else if (GetBPP() == 8) {
- m_pPalette = FX_Alloc(FX_DWORD, 256);
- if(IsCmykImage()) {
- for (int i = 0; i < 256; i ++) {
- m_pPalette[i] = 0xff - i;
- }
- } else {
- for (int i = 0; i < 256; i ++) {
- m_pPalette[i] = 0xff000000 | (i * 0x10101);
- }
- }
- }
+ return index ? 0 : 0xff;
+ }
+ return 0xff - index;
+ }
+ if (GetBPP() == 1) {
+ return index ? 0xffffffff : 0xff000000;
+ }
+ return index * 0x10101 | 0xff000000;
}
-FX_BOOL CFX_DIBSource::BuildAlphaMask()
-{
- if (m_pAlphaMask) {
- return TRUE;
- }
- m_pAlphaMask = new CFX_DIBitmap;
- if (!m_pAlphaMask->Create(m_Width, m_Height, FXDIB_8bppMask)) {
- delete m_pAlphaMask;
- m_pAlphaMask = NULL;
- return FALSE;
- }
- FXSYS_memset(m_pAlphaMask->GetBuffer(), 0xff, m_pAlphaMask->GetHeight()*m_pAlphaMask->GetPitch());
- return TRUE;
+void CFX_DIBSource::SetPaletteEntry(int index, FX_DWORD color) {
+ ASSERT((GetBPP() == 1 || GetBPP() == 8) && !IsAlphaMask());
+ if (m_pPalette == NULL) {
+ BuildPalette();
+ }
+ m_pPalette[index] = color;
}
-FX_DWORD CFX_DIBSource::GetPaletteEntry(int index) const
-{
- ASSERT((GetBPP() == 1 || GetBPP() == 8) && !IsAlphaMask());
- if (m_pPalette) {
- return m_pPalette[index];
- }
+int CFX_DIBSource::FindPalette(FX_DWORD color) const {
+ ASSERT((GetBPP() == 1 || GetBPP() == 8) && !IsAlphaMask());
+ if (m_pPalette == NULL) {
if (IsCmykImage()) {
- if (GetBPP() == 1) {
- return index ? 0 : 0xff;
- }
- return 0xff - index;
+ if (GetBPP() == 1) {
+ return ((uint8_t)color == 0xff) ? 0 : 1;
+ }
+ return 0xff - (uint8_t)color;
}
if (GetBPP() == 1) {
- return index ? 0xffffffff : 0xff000000;
+ return ((uint8_t)color == 0xff) ? 1 : 0;
}
- return index * 0x10101 | 0xff000000;
-}
-void CFX_DIBSource::SetPaletteEntry(int index, FX_DWORD color)
-{
- ASSERT((GetBPP() == 1 || GetBPP() == 8) && !IsAlphaMask());
- if (m_pPalette == NULL) {
- BuildPalette();
+ return (uint8_t)color;
+ }
+ int palsize = (1 << GetBPP());
+ for (int i = 0; i < palsize; i++)
+ if (m_pPalette[i] == color) {
+ return i;
}
- m_pPalette[index] = color;
+ return -1;
}
-int CFX_DIBSource::FindPalette(FX_DWORD color) const
-{
- ASSERT((GetBPP() == 1 || GetBPP() == 8) && !IsAlphaMask());
- if (m_pPalette == NULL) {
- if (IsCmykImage()) {
- if (GetBPP() == 1) {
- return ((uint8_t)color == 0xff) ? 0 : 1;
- }
- return 0xff - (uint8_t)color;
- }
- if (GetBPP() == 1) {
- return ((uint8_t)color == 0xff) ? 1 : 0;
- }
- return (uint8_t)color;
- }
- int palsize = (1 << GetBPP());
- for (int i = 0; i < palsize; i ++)
- if (m_pPalette[i] == color) {
- return i;
- }
- return -1;
+void CFX_DIBitmap::Clear(FX_DWORD color) {
+ if (m_pBuffer == NULL) {
+ return;
+ }
+ switch (GetFormat()) {
+ case FXDIB_1bppMask:
+ FXSYS_memset(m_pBuffer, (color & 0xff000000) ? 0xff : 0,
+ m_Pitch * m_Height);
+ break;
+ case FXDIB_1bppRgb: {
+ int index = FindPalette(color);
+ FXSYS_memset(m_pBuffer, index ? 0xff : 0, m_Pitch * m_Height);
+ break;
+ }
+ case FXDIB_8bppMask:
+ FXSYS_memset(m_pBuffer, color >> 24, m_Pitch * m_Height);
+ break;
+ case FXDIB_8bppRgb: {
+ int index = FindPalette(color);
+ FXSYS_memset(m_pBuffer, index, m_Pitch * m_Height);
+ break;
+ }
+ case FXDIB_Rgb:
+ case FXDIB_Rgba: {
+ int a, r, g, b;
+ ArgbDecode(color, a, r, g, b);
+ if (r == g && g == b) {
+ FXSYS_memset(m_pBuffer, r, m_Pitch * m_Height);
+ } else {
+ int byte_pos = 0;
+ for (int col = 0; col < m_Width; col++) {
+ m_pBuffer[byte_pos++] = b;
+ m_pBuffer[byte_pos++] = g;
+ m_pBuffer[byte_pos++] = r;
+ }
+ for (int row = 1; row < m_Height; row++) {
+ FXSYS_memcpy(m_pBuffer + row * m_Pitch, m_pBuffer, m_Pitch);
+ }
+ }
+ break;
+ }
+ case FXDIB_Rgb32:
+ case FXDIB_Argb: {
+ color = IsCmykImage() ? FXCMYK_TODIB(color) : FXARGB_TODIB(color);
+ for (int i = 0; i < m_Width; i++) {
+ ((FX_DWORD*)m_pBuffer)[i] = color;
+ }
+ for (int row = 1; row < m_Height; row++) {
+ FXSYS_memcpy(m_pBuffer + row * m_Pitch, m_pBuffer, m_Pitch);
+ }
+ break;
+ }
+ default:
+ break;
+ }
}
-void CFX_DIBitmap::Clear(FX_DWORD color)
-{
- if (m_pBuffer == NULL) {
- return;
- }
- switch (GetFormat()) {
- case FXDIB_1bppMask:
- FXSYS_memset(m_pBuffer, (color & 0xff000000) ? 0xff : 0, m_Pitch * m_Height);
- break;
- case FXDIB_1bppRgb: {
- int index = FindPalette(color);
- FXSYS_memset(m_pBuffer, index ? 0xff : 0, m_Pitch * m_Height);
- break;
- }
- case FXDIB_8bppMask:
- FXSYS_memset(m_pBuffer, color >> 24, m_Pitch * m_Height);
- break;
- case FXDIB_8bppRgb: {
- int index = FindPalette(color);
- FXSYS_memset(m_pBuffer, index, m_Pitch * m_Height);
- break;
- }
- case FXDIB_Rgb:
- case FXDIB_Rgba: {
- int a, r, g, b;
- ArgbDecode(color, a, r, g, b);
- if (r == g && g == b) {
- FXSYS_memset(m_pBuffer, r, m_Pitch * m_Height);
- } else {
- int byte_pos = 0;
- for (int col = 0; col < m_Width; col ++) {
- m_pBuffer[byte_pos++] = b;
- m_pBuffer[byte_pos++] = g;
- m_pBuffer[byte_pos++] = r;
- }
- for (int row = 1; row < m_Height; row ++) {
- FXSYS_memcpy(m_pBuffer + row * m_Pitch, m_pBuffer, m_Pitch);
- }
- }
- break;
- }
- case FXDIB_Rgb32:
- case FXDIB_Argb: {
- color = IsCmykImage() ? FXCMYK_TODIB(color) : FXARGB_TODIB(color);
- for (int i = 0; i < m_Width; i ++) {
- ((FX_DWORD*)m_pBuffer)[i] = color;
- }
- for (int row = 1; row < m_Height; row ++) {
- FXSYS_memcpy(m_pBuffer + row * m_Pitch, m_pBuffer, m_Pitch);
- }
- break;
- }
- default:
- break;
- }
+void CFX_DIBSource::GetOverlapRect(int& dest_left,
+ int& dest_top,
+ int& width,
+ int& height,
+ int src_width,
+ int src_height,
+ int& src_left,
+ int& src_top,
+ const CFX_ClipRgn* pClipRgn) {
+ if (width == 0 || height == 0) {
+ return;
+ }
+ ASSERT(width > 0 && height > 0);
+ if (dest_left > m_Width || dest_top > m_Height) {
+ width = 0;
+ height = 0;
+ return;
+ }
+ int x_offset = dest_left - src_left;
+ int y_offset = dest_top - src_top;
+ FX_RECT src_rect(src_left, src_top, src_left + width, src_top + height);
+ FX_RECT src_bound(0, 0, src_width, src_height);
+ src_rect.Intersect(src_bound);
+ FX_RECT dest_rect(src_rect.left + x_offset, src_rect.top + y_offset,
+ src_rect.right + x_offset, src_rect.bottom + y_offset);
+ FX_RECT dest_bound(0, 0, m_Width, m_Height);
+ dest_rect.Intersect(dest_bound);
+ if (pClipRgn) {
+ dest_rect.Intersect(pClipRgn->GetBox());
+ }
+ dest_left = dest_rect.left;
+ dest_top = dest_rect.top;
+ src_left = dest_left - x_offset;
+ src_top = dest_top - y_offset;
+ width = dest_rect.right - dest_rect.left;
+ height = dest_rect.bottom - dest_rect.top;
}
-void CFX_DIBSource::GetOverlapRect(int& dest_left, int& dest_top, int& width, int& height,
- int src_width, int src_height, int& src_left, int& src_top,
- const CFX_ClipRgn* pClipRgn)
-{
- if (width == 0 || height == 0) {
- return;
- }
- ASSERT(width > 0 && height > 0);
- if (dest_left > m_Width || dest_top > m_Height) {
- width = 0;
- height = 0;
- return;
- }
- int x_offset = dest_left - src_left;
- int y_offset = dest_top - src_top;
- FX_RECT src_rect(src_left, src_top, src_left + width, src_top + height);
- FX_RECT src_bound(0, 0, src_width, src_height);
- src_rect.Intersect(src_bound);
- FX_RECT dest_rect(src_rect.left + x_offset, src_rect.top + y_offset,
- src_rect.right + x_offset, src_rect.bottom + y_offset);
- FX_RECT dest_bound(0, 0, m_Width, m_Height);
- dest_rect.Intersect(dest_bound);
- if (pClipRgn) {
- dest_rect.Intersect(pClipRgn->GetBox());
- }
- dest_left = dest_rect.left;
- dest_top = dest_rect.top;
- src_left = dest_left - x_offset;
- src_top = dest_top - y_offset;
- width = dest_rect.right - dest_rect.left;
- height = dest_rect.bottom - dest_rect.top;
-}
-FX_BOOL CFX_DIBitmap::TransferBitmap(int dest_left, int dest_top, int width, int height,
- const CFX_DIBSource* pSrcBitmap, int src_left, int src_top, void* pIccTransform)
-{
- if (m_pBuffer == NULL) {
- return FALSE;
- }
- GetOverlapRect(dest_left, dest_top, width, height, pSrcBitmap->GetWidth(), pSrcBitmap->GetHeight(), src_left, src_top, NULL);
- if (width == 0 || height == 0) {
- return TRUE;
- }
- FXDIB_Format dest_format = GetFormat();
- FXDIB_Format src_format = pSrcBitmap->GetFormat();
- if (dest_format == src_format && pIccTransform == NULL) {
- if (GetBPP() == 1) {
- for (int row = 0; row < height; row ++) {
- uint8_t* dest_scan = m_pBuffer + (dest_top + row) * m_Pitch;
- const uint8_t* src_scan = pSrcBitmap->GetScanline(src_top + row);
- for (int col = 0; col < width; col ++) {
- if (src_scan[(src_left + col) / 8] & (1 << (7 - (src_left + col) % 8))) {
- dest_scan[(dest_left + col) / 8] |= 1 << (7 - (dest_left + col) % 8);
- } else {
- dest_scan[(dest_left + col) / 8] &= ~(1 << (7 - (dest_left + col) % 8));
- }
- }
- }
- } else {
- int Bpp = GetBPP() / 8;
- for (int row = 0; row < height; row ++) {
- uint8_t* dest_scan = m_pBuffer + (dest_top + row) * m_Pitch + dest_left * Bpp;
- const uint8_t* src_scan = pSrcBitmap->GetScanline(src_top + row) + src_left * Bpp;
- FXSYS_memcpy(dest_scan, src_scan, width * Bpp);
- }
- }
- } else {
- if (m_pPalette) {
- return FALSE;
- }
- if (m_bpp == 8) {
- dest_format = FXDIB_8bppMask;
- }
- uint8_t* dest_buf = m_pBuffer + dest_top * m_Pitch + dest_left * GetBPP() / 8;
- FX_DWORD* d_plt = NULL;
- if(!ConvertBuffer(dest_format, dest_buf, m_Pitch, width, height, pSrcBitmap, src_left, src_top, d_plt, pIccTransform)) {
- return FALSE;
- }
- }
+FX_BOOL CFX_DIBitmap::TransferBitmap(int dest_left,
+ int dest_top,
+ int width,
+ int height,
+ const CFX_DIBSource* pSrcBitmap,
+ int src_left,
+ int src_top,
+ void* pIccTransform) {
+ if (m_pBuffer == NULL) {
+ return FALSE;
+ }
+ GetOverlapRect(dest_left, dest_top, width, height, pSrcBitmap->GetWidth(),
+ pSrcBitmap->GetHeight(), src_left, src_top, NULL);
+ if (width == 0 || height == 0) {
return TRUE;
-}
-FX_BOOL CFX_DIBitmap::TransferMask(int dest_left, int dest_top, int width, int height,
- const CFX_DIBSource* pMask, FX_DWORD color, int src_left, int src_top, int alpha_flag, void* pIccTransform)
-{
- if (m_pBuffer == NULL) {
- return FALSE;
- }
- ASSERT(HasAlpha() && (m_bpp >= 24));
- ASSERT(pMask->IsAlphaMask());
- if (!HasAlpha() || !pMask->IsAlphaMask() || m_bpp < 24) {
- return FALSE;
- }
- GetOverlapRect(dest_left, dest_top, width, height, pMask->GetWidth(), pMask->GetHeight(), src_left, src_top, NULL);
- if (width == 0 || height == 0) {
- return TRUE;
- }
- int src_bpp = pMask->GetBPP();
- int alpha;
- FX_DWORD dst_color;
- if (alpha_flag >> 8) {
- alpha = alpha_flag & 0xff;
- dst_color = FXCMYK_TODIB(color);
- } else {
- alpha = FXARGB_A(color);
- dst_color = FXARGB_TODIB(color);
- }
- uint8_t* color_p = (uint8_t*)&dst_color;
- if (pIccTransform && CFX_GEModule::Get()->GetCodecModule() && CFX_GEModule::Get()->GetCodecModule()->GetIccModule()) {
- ICodec_IccModule* pIccModule = CFX_GEModule::Get()->GetCodecModule()->GetIccModule();
- pIccModule->TranslateScanline(pIccTransform, color_p, color_p, 1);
+ }
+ FXDIB_Format dest_format = GetFormat();
+ FXDIB_Format src_format = pSrcBitmap->GetFormat();
+ if (dest_format == src_format && pIccTransform == NULL) {
+ if (GetBPP() == 1) {
+ for (int row = 0; row < height; row++) {
+ uint8_t* dest_scan = m_pBuffer + (dest_top + row) * m_Pitch;
+ const uint8_t* src_scan = pSrcBitmap->GetScanline(src_top + row);
+ for (int col = 0; col < width; col++) {
+ if (src_scan[(src_left + col) / 8] &
+ (1 << (7 - (src_left + col) % 8))) {
+ dest_scan[(dest_left + col) / 8] |= 1
+ << (7 - (dest_left + col) % 8);
+ } else {
+ dest_scan[(dest_left + col) / 8] &=
+ ~(1 << (7 - (dest_left + col) % 8));
+ }
+ }
+ }
} else {
- if (alpha_flag >> 8 && !IsCmykImage())
- AdobeCMYK_to_sRGB1(FXSYS_GetCValue(color), FXSYS_GetMValue(color), FXSYS_GetYValue(color), FXSYS_GetKValue(color),
- color_p[2], color_p[1], color_p[0]);
- else if (!(alpha_flag >> 8) && IsCmykImage()) {
- return FALSE;
- }
+ int Bpp = GetBPP() / 8;
+ for (int row = 0; row < height; row++) {
+ uint8_t* dest_scan =
+ m_pBuffer + (dest_top + row) * m_Pitch + dest_left * Bpp;
+ const uint8_t* src_scan =
+ pSrcBitmap->GetScanline(src_top + row) + src_left * Bpp;
+ FXSYS_memcpy(dest_scan, src_scan, width * Bpp);
+ }
+ }
+ } else {
+ if (m_pPalette) {
+ return FALSE;
}
- if(!IsCmykImage()) {
- color_p[3] = (uint8_t)alpha;
+ if (m_bpp == 8) {
+ dest_format = FXDIB_8bppMask;
}
- if (GetFormat() == FXDIB_Argb) {
- for (int row = 0; row < height; row ++) {
- FX_DWORD* dest_pos = (FX_DWORD*)(m_pBuffer + (dest_top + row) * m_Pitch + dest_left * 4);
- const uint8_t* src_scan = pMask->GetScanline(src_top + row);
- if (src_bpp == 1) {
- for (int col = 0; col < width; col ++) {
- int src_bitpos = src_left + col;
- if (src_scan[src_bitpos / 8] & (1 << (7 - src_bitpos % 8))) {
- *dest_pos = dst_color;
- } else {
- *dest_pos = 0;
- }
- dest_pos ++;
- }
- } else {
- src_scan += src_left;
- dst_color = FXARGB_TODIB(dst_color);
- dst_color &= 0xffffff;
- for (int col = 0; col < width; col ++) {
- FXARGB_SETDIB(dest_pos++, dst_color | ((alpha * (*src_scan++) / 255) << 24));
- }
- }
- }
- } else {
- int comps = m_bpp / 8;
- for (int row = 0; row < height; row ++) {
- uint8_t* dest_color_pos = m_pBuffer + (dest_top + row) * m_Pitch + dest_left * comps;
- uint8_t* dest_alpha_pos = (uint8_t*)m_pAlphaMask->GetScanline(dest_top + row) + dest_left;
- const uint8_t* src_scan = pMask->GetScanline(src_top + row);
- if (src_bpp == 1) {
- for (int col = 0; col < width; col ++) {
- int src_bitpos = src_left + col;
- if (src_scan[src_bitpos / 8] & (1 << (7 - src_bitpos % 8))) {
- FXSYS_memcpy(dest_color_pos, color_p, comps);
- *dest_alpha_pos = 0xff;
- } else {
- FXSYS_memset(dest_color_pos, 0, comps);
- *dest_alpha_pos = 0;
- }
- dest_color_pos += comps;
- dest_alpha_pos ++;
- }
- } else {
- src_scan += src_left;
- for (int col = 0; col < width; col ++) {
- FXSYS_memcpy(dest_color_pos, color_p, comps);
- dest_color_pos += comps;
- *dest_alpha_pos++ = (alpha * (*src_scan++) / 255);
- }
- }
- }
+ uint8_t* dest_buf =
+ m_pBuffer + dest_top * m_Pitch + dest_left * GetBPP() / 8;
+ FX_DWORD* d_plt = NULL;
+ if (!ConvertBuffer(dest_format, dest_buf, m_Pitch, width, height,
+ pSrcBitmap, src_left, src_top, d_plt, pIccTransform)) {
+ return FALSE;
}
- return TRUE;
+ }
+ return TRUE;
}
-void CFX_DIBSource::CopyPalette(const FX_DWORD* pSrc, FX_DWORD size)
-{
- if (pSrc == NULL || GetBPP() > 8) {
- if (m_pPalette) {
- FX_Free(m_pPalette);
- }
- m_pPalette = NULL;
- } else {
- FX_DWORD pal_size = 1 << GetBPP();
- if (m_pPalette == NULL) {
- m_pPalette = FX_Alloc(FX_DWORD, pal_size);
- }
- if (pal_size > size) {
- pal_size = size;
- }
- FXSYS_memcpy(m_pPalette, pSrc, pal_size * sizeof(FX_DWORD));
- }
+FX_BOOL CFX_DIBitmap::TransferMask(int dest_left,
+ int dest_top,
+ int width,
+ int height,
+ const CFX_DIBSource* pMask,
+ FX_DWORD color,
+ int src_left,
+ int src_top,
+ int alpha_flag,
+ void* pIccTransform) {
+ if (m_pBuffer == NULL) {
+ return FALSE;
+ }
+ ASSERT(HasAlpha() && (m_bpp >= 24));
+ ASSERT(pMask->IsAlphaMask());
+ if (!HasAlpha() || !pMask->IsAlphaMask() || m_bpp < 24) {
+ return FALSE;
+ }
+ GetOverlapRect(dest_left, dest_top, width, height, pMask->GetWidth(),
+ pMask->GetHeight(), src_left, src_top, NULL);
+ if (width == 0 || height == 0) {
+ return TRUE;
+ }
+ int src_bpp = pMask->GetBPP();
+ int alpha;
+ FX_DWORD dst_color;
+ if (alpha_flag >> 8) {
+ alpha = alpha_flag & 0xff;
+ dst_color = FXCMYK_TODIB(color);
+ } else {
+ alpha = FXARGB_A(color);
+ dst_color = FXARGB_TODIB(color);
+ }
+ uint8_t* color_p = (uint8_t*)&dst_color;
+ if (pIccTransform && CFX_GEModule::Get()->GetCodecModule() &&
+ CFX_GEModule::Get()->GetCodecModule()->GetIccModule()) {
+ ICodec_IccModule* pIccModule =
+ CFX_GEModule::Get()->GetCodecModule()->GetIccModule();
+ pIccModule->TranslateScanline(pIccTransform, color_p, color_p, 1);
+ } else {
+ if (alpha_flag >> 8 && !IsCmykImage())
+ AdobeCMYK_to_sRGB1(FXSYS_GetCValue(color), FXSYS_GetMValue(color),
+ FXSYS_GetYValue(color), FXSYS_GetKValue(color),
+ color_p[2], color_p[1], color_p[0]);
+ else if (!(alpha_flag >> 8) && IsCmykImage()) {
+ return FALSE;
+ }
+ }
+ if (!IsCmykImage()) {
+ color_p[3] = (uint8_t)alpha;
+ }
+ if (GetFormat() == FXDIB_Argb) {
+ for (int row = 0; row < height; row++) {
+ FX_DWORD* dest_pos =
+ (FX_DWORD*)(m_pBuffer + (dest_top + row) * m_Pitch + dest_left * 4);
+ const uint8_t* src_scan = pMask->GetScanline(src_top + row);
+ if (src_bpp == 1) {
+ for (int col = 0; col < width; col++) {
+ int src_bitpos = src_left + col;
+ if (src_scan[src_bitpos / 8] & (1 << (7 - src_bitpos % 8))) {
+ *dest_pos = dst_color;
+ } else {
+ *dest_pos = 0;
+ }
+ dest_pos++;
+ }
+ } else {
+ src_scan += src_left;
+ dst_color = FXARGB_TODIB(dst_color);
+ dst_color &= 0xffffff;
+ for (int col = 0; col < width; col++) {
+ FXARGB_SETDIB(dest_pos++,
+ dst_color | ((alpha * (*src_scan++) / 255) << 24));
+ }
+ }
+ }
+ } else {
+ int comps = m_bpp / 8;
+ for (int row = 0; row < height; row++) {
+ uint8_t* dest_color_pos =
+ m_pBuffer + (dest_top + row) * m_Pitch + dest_left * comps;
+ uint8_t* dest_alpha_pos =
+ (uint8_t*)m_pAlphaMask->GetScanline(dest_top + row) + dest_left;
+ const uint8_t* src_scan = pMask->GetScanline(src_top + row);
+ if (src_bpp == 1) {
+ for (int col = 0; col < width; col++) {
+ int src_bitpos = src_left + col;
+ if (src_scan[src_bitpos / 8] & (1 << (7 - src_bitpos % 8))) {
+ FXSYS_memcpy(dest_color_pos, color_p, comps);
+ *dest_alpha_pos = 0xff;
+ } else {
+ FXSYS_memset(dest_color_pos, 0, comps);
+ *dest_alpha_pos = 0;
+ }
+ dest_color_pos += comps;
+ dest_alpha_pos++;
+ }
+ } else {
+ src_scan += src_left;
+ for (int col = 0; col < width; col++) {
+ FXSYS_memcpy(dest_color_pos, color_p, comps);
+ dest_color_pos += comps;
+ *dest_alpha_pos++ = (alpha * (*src_scan++) / 255);
+ }
+ }
+ }
+ }
+ return TRUE;
}
-void CFX_DIBSource::GetPalette(FX_DWORD* pal, int alpha) const
-{
- ASSERT(GetBPP() <= 8 && !IsCmykImage());
- if (GetBPP() == 1) {
- pal[0] = ((m_pPalette ? m_pPalette[0] : 0xff000000) & 0xffffff) | (alpha << 24);
- pal[1] = ((m_pPalette ? m_pPalette[1] : 0xffffffff) & 0xffffff) | (alpha << 24);
- return;
- }
+void CFX_DIBSource::CopyPalette(const FX_DWORD* pSrc, FX_DWORD size) {
+ if (pSrc == NULL || GetBPP() > 8) {
if (m_pPalette) {
- for (int i = 0; i < 256; i ++) {
- pal[i] = (m_pPalette[i] & 0x00ffffff) | (alpha << 24);
- }
- } else {
- for (int i = 0; i < 256; i ++) {
- pal[i] = (i * 0x10101) | (alpha << 24);
- }
+ FX_Free(m_pPalette);
}
-}
-CFX_DIBitmap* CFX_DIBSource::GetAlphaMask(const FX_RECT* pClip) const
-{
- ASSERT(GetFormat() == FXDIB_Argb);
- FX_RECT rect(0, 0, m_Width, m_Height);
- if (pClip) {
- rect.Intersect(*pClip);
- if (rect.IsEmpty()) {
- return NULL;
- }
+ m_pPalette = NULL;
+ } else {
+ FX_DWORD pal_size = 1 << GetBPP();
+ if (m_pPalette == NULL) {
+ m_pPalette = FX_Alloc(FX_DWORD, pal_size);
}
- CFX_DIBitmap* pMask = new CFX_DIBitmap;
- if (!pMask->Create(rect.Width(), rect.Height(), FXDIB_8bppMask)) {
- delete pMask;
- return NULL;
- }
- for (int row = rect.top; row < rect.bottom; row ++) {
- const uint8_t* src_scan = GetScanline(row) + rect.left * 4 + 3;
- uint8_t* dest_scan = (uint8_t*)pMask->GetScanline(row - rect.top);
- for (int col = rect.left; col < rect.right; col ++) {
- *dest_scan ++ = *src_scan;
- src_scan += 4;
- }
+ if (pal_size > size) {
+ pal_size = size;
}
- return pMask;
+ FXSYS_memcpy(m_pPalette, pSrc, pal_size * sizeof(FX_DWORD));
+ }
+}
+void CFX_DIBSource::GetPalette(FX_DWORD* pal, int alpha) const {
+ ASSERT(GetBPP() <= 8 && !IsCmykImage());
+ if (GetBPP() == 1) {
+ pal[0] =
+ ((m_pPalette ? m_pPalette[0] : 0xff000000) & 0xffffff) | (alpha << 24);
+ pal[1] =
+ ((m_pPalette ? m_pPalette[1] : 0xffffffff) & 0xffffff) | (alpha << 24);
+ return;
+ }
+ if (m_pPalette) {
+ for (int i = 0; i < 256; i++) {
+ pal[i] = (m_pPalette[i] & 0x00ffffff) | (alpha << 24);
+ }
+ } else {
+ for (int i = 0; i < 256; i++) {
+ pal[i] = (i * 0x10101) | (alpha << 24);
+ }
+ }
}
-FX_BOOL CFX_DIBSource::CopyAlphaMask(const CFX_DIBSource* pAlphaMask, const FX_RECT* pClip)
-{
- if (!HasAlpha() || GetFormat() == FXDIB_Argb) {
+CFX_DIBitmap* CFX_DIBSource::GetAlphaMask(const FX_RECT* pClip) const {
+ ASSERT(GetFormat() == FXDIB_Argb);
+ FX_RECT rect(0, 0, m_Width, m_Height);
+ if (pClip) {
+ rect.Intersect(*pClip);
+ if (rect.IsEmpty()) {
+ return NULL;
+ }
+ }
+ CFX_DIBitmap* pMask = new CFX_DIBitmap;
+ if (!pMask->Create(rect.Width(), rect.Height(), FXDIB_8bppMask)) {
+ delete pMask;
+ return NULL;
+ }
+ for (int row = rect.top; row < rect.bottom; row++) {
+ const uint8_t* src_scan = GetScanline(row) + rect.left * 4 + 3;
+ uint8_t* dest_scan = (uint8_t*)pMask->GetScanline(row - rect.top);
+ for (int col = rect.left; col < rect.right; col++) {
+ *dest_scan++ = *src_scan;
+ src_scan += 4;
+ }
+ }
+ return pMask;
+}
+FX_BOOL CFX_DIBSource::CopyAlphaMask(const CFX_DIBSource* pAlphaMask,
+ const FX_RECT* pClip) {
+ if (!HasAlpha() || GetFormat() == FXDIB_Argb) {
+ return FALSE;
+ }
+ if (pAlphaMask) {
+ FX_RECT rect(0, 0, pAlphaMask->m_Width, pAlphaMask->m_Height);
+ if (pClip) {
+ rect.Intersect(*pClip);
+ if (rect.IsEmpty() || rect.Width() != m_Width ||
+ rect.Height() != m_Height) {
return FALSE;
- }
- if (pAlphaMask) {
- FX_RECT rect(0, 0, pAlphaMask->m_Width, pAlphaMask->m_Height);
- if (pClip) {
- rect.Intersect(*pClip);
- if (rect.IsEmpty() || rect.Width() != m_Width || rect.Height() != m_Height) {
- return FALSE;
- }
- } else {
- if (pAlphaMask->m_Width != m_Width || pAlphaMask->m_Height != m_Height) {
- return FALSE;
- }
- }
- for (int row = 0; row < m_Height; row ++)
- FXSYS_memcpy((void*)m_pAlphaMask->GetScanline(row),
- pAlphaMask->GetScanline(row + rect.top) + rect.left, m_pAlphaMask->m_Pitch);
+ }
} else {
- m_pAlphaMask->Clear(0xff000000);
- }
- return TRUE;
+ if (pAlphaMask->m_Width != m_Width || pAlphaMask->m_Height != m_Height) {
+ return FALSE;
+ }
+ }
+ for (int row = 0; row < m_Height; row++)
+ FXSYS_memcpy((void*)m_pAlphaMask->GetScanline(row),
+ pAlphaMask->GetScanline(row + rect.top) + rect.left,
+ m_pAlphaMask->m_Pitch);
+ } else {
+ m_pAlphaMask->Clear(0xff000000);
+ }
+ return TRUE;
}
const int g_ChannelOffset[] = {0, 2, 1, 0, 0, 1, 2, 3, 3};
-FX_BOOL CFX_DIBitmap::LoadChannel(FXDIB_Channel destChannel, const CFX_DIBSource* pSrcBitmap, FXDIB_Channel srcChannel)
-{
- if (m_pBuffer == NULL) {
+FX_BOOL CFX_DIBitmap::LoadChannel(FXDIB_Channel destChannel,
+ const CFX_DIBSource* pSrcBitmap,
+ FXDIB_Channel srcChannel) {
+ if (m_pBuffer == NULL) {
+ return FALSE;
+ }
+ CFX_DIBSource* pSrcClone = (CFX_DIBSource*)pSrcBitmap;
+ CFX_DIBitmap* pDst = this;
+ int destOffset, srcOffset;
+ if (srcChannel == FXDIB_Alpha) {
+ if (!pSrcBitmap->HasAlpha() && !pSrcBitmap->IsAlphaMask()) {
+ return FALSE;
+ }
+ if (pSrcBitmap->GetBPP() == 1) {
+ pSrcClone = pSrcBitmap->CloneConvert(FXDIB_8bppMask);
+ if (pSrcClone == NULL) {
return FALSE;
+ }
}
- CFX_DIBSource* pSrcClone = (CFX_DIBSource*)pSrcBitmap;
- CFX_DIBitmap* pDst = this;
- int destOffset, srcOffset;
- if (srcChannel == FXDIB_Alpha) {
- if (!pSrcBitmap->HasAlpha() && !pSrcBitmap->IsAlphaMask()) {
- return FALSE;
- }
- if (pSrcBitmap->GetBPP() == 1) {
- pSrcClone = pSrcBitmap->CloneConvert(FXDIB_8bppMask);
- if (pSrcClone == NULL) {
- return FALSE;
- }
- }
- if(pSrcBitmap->GetFormat() == FXDIB_Argb) {
- srcOffset = 3;
- } else {
- srcOffset = 0;
- }
- } else {
- if (pSrcBitmap->IsAlphaMask()) {
- return FALSE;
- }
- if (pSrcBitmap->GetBPP() < 24) {
- if (pSrcBitmap->IsCmykImage()) {
- pSrcClone = pSrcBitmap->CloneConvert((FXDIB_Format)((pSrcBitmap->GetFormat() & 0xff00) | 0x20));
- } else {
- pSrcClone = pSrcBitmap->CloneConvert((FXDIB_Format)((pSrcBitmap->GetFormat() & 0xff00) | 0x18));
- }
- if (pSrcClone == NULL) {
- return FALSE;
- }
- }
- srcOffset = g_ChannelOffset[srcChannel];
- }
- if (destChannel == FXDIB_Alpha) {
- if (IsAlphaMask()) {
- if(!ConvertFormat(FXDIB_8bppMask)) {
- if (pSrcClone != pSrcBitmap) {
- delete pSrcClone;
- }
- return FALSE;
- }
- destOffset = 0;
- } else {
- destOffset = 0;
- if(!ConvertFormat(IsCmykImage() ? FXDIB_Cmyka : FXDIB_Argb)) {
- if (pSrcClone != pSrcBitmap) {
- delete pSrcClone;
- }
- return FALSE;
- }
- if (GetFormat() == FXDIB_Argb) {
- destOffset = 3;
- }
- }
+ if (pSrcBitmap->GetFormat() == FXDIB_Argb) {
+ srcOffset = 3;
} else {
- if (IsAlphaMask()) {
- if (pSrcClone != pSrcBitmap) {
- delete pSrcClone;
- }
- return FALSE;
- }
- if (GetBPP() < 24) {
- if (HasAlpha()) {
- if (!ConvertFormat(IsCmykImage() ? FXDIB_Cmyka : FXDIB_Argb)) {
- if (pSrcClone != pSrcBitmap) {
- delete pSrcClone;
- }
- return FALSE;
- }
- } else
-#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
- if (!ConvertFormat(IsCmykImage() ? FXDIB_Cmyk : FXDIB_Rgb32)) {
-#else
- if (!ConvertFormat(IsCmykImage() ? FXDIB_Cmyk : FXDIB_Rgb)) {
-#endif
- if (pSrcClone != pSrcBitmap) {
- delete pSrcClone;
- }
- return FALSE;
- }
- }
- destOffset = g_ChannelOffset[destChannel];
- }
- if (srcChannel == FXDIB_Alpha && pSrcClone->m_pAlphaMask) {
- CFX_DIBitmap* pAlphaMask = pSrcClone->m_pAlphaMask;
- if (pSrcClone->GetWidth() != m_Width || pSrcClone->GetHeight() != m_Height) {
- if (pAlphaMask) {
- pAlphaMask = pAlphaMask->StretchTo(m_Width, m_Height);
- if (pAlphaMask == NULL) {
- if (pSrcClone != pSrcBitmap) {
- delete pSrcClone;
- }
- return FALSE;
- }
- }
- }
+ srcOffset = 0;
+ }
+ } else {
+ if (pSrcBitmap->IsAlphaMask()) {
+ return FALSE;
+ }
+ if (pSrcBitmap->GetBPP() < 24) {
+ if (pSrcBitmap->IsCmykImage()) {
+ pSrcClone = pSrcBitmap->CloneConvert(
+ (FXDIB_Format)((pSrcBitmap->GetFormat() & 0xff00) | 0x20));
+ } else {
+ pSrcClone = pSrcBitmap->CloneConvert(
+ (FXDIB_Format)((pSrcBitmap->GetFormat() & 0xff00) | 0x18));
+ }
+ if (pSrcClone == NULL) {
+ return FALSE;
+ }
+ }
+ srcOffset = g_ChannelOffset[srcChannel];
+ }
+ if (destChannel == FXDIB_Alpha) {
+ if (IsAlphaMask()) {
+ if (!ConvertFormat(FXDIB_8bppMask)) {
if (pSrcClone != pSrcBitmap) {
- pSrcClone->m_pAlphaMask = NULL;
- delete pSrcClone;
+ delete pSrcClone;
}
- pSrcClone = pAlphaMask;
- srcOffset = 0;
- } else if (pSrcClone->GetWidth() != m_Width || pSrcClone->GetHeight() != m_Height) {
- CFX_DIBitmap* pSrcMatched = pSrcClone->StretchTo(m_Width, m_Height);
+ return FALSE;
+ }
+ destOffset = 0;
+ } else {
+ destOffset = 0;
+ if (!ConvertFormat(IsCmykImage() ? FXDIB_Cmyka : FXDIB_Argb)) {
if (pSrcClone != pSrcBitmap) {
- delete pSrcClone;
- }
- if (pSrcMatched == NULL) {
- return FALSE;
- }
- pSrcClone = pSrcMatched;
- }
- if (destChannel == FXDIB_Alpha && m_pAlphaMask) {
- pDst = m_pAlphaMask;
- destOffset = 0;
- }
- int srcBytes = pSrcClone->GetBPP() / 8;
- int destBytes = pDst->GetBPP() / 8;
- for (int row = 0; row < m_Height; row ++) {
- uint8_t* dest_pos = (uint8_t*)pDst->GetScanline(row) + destOffset;
- const uint8_t* src_pos = pSrcClone->GetScanline(row) + srcOffset;
- for (int col = 0; col < m_Width; col ++) {
- *dest_pos = *src_pos;
- dest_pos += destBytes;
- src_pos += srcBytes;
+ delete pSrcClone;
}
+ return FALSE;
+ }
+ if (GetFormat() == FXDIB_Argb) {
+ destOffset = 3;
+ }
}
- if (pSrcClone != pSrcBitmap && pSrcClone != pSrcBitmap->m_pAlphaMask) {
+ } else {
+ if (IsAlphaMask()) {
+ if (pSrcClone != pSrcBitmap) {
delete pSrcClone;
+ }
+ return FALSE;
}
- return TRUE;
-}
-FX_BOOL CFX_DIBitmap::LoadChannel(FXDIB_Channel destChannel, int value)
-{
- if (m_pBuffer == NULL) {
- return FALSE;
- }
- int destOffset;
- if (destChannel == FXDIB_Alpha) {
- if (IsAlphaMask()) {
- if(!ConvertFormat(FXDIB_8bppMask)) {
- return FALSE;
- }
- destOffset = 0;
- } else {
- destOffset = 0;
- if(!ConvertFormat(IsCmykImage() ? FXDIB_Cmyka : FXDIB_Argb)) {
- return FALSE;
- }
- if (GetFormat() == FXDIB_Argb) {
- destOffset = 3;
- }
- }
- } else {
- if (IsAlphaMask()) {
- return FALSE;
+ if (GetBPP() < 24) {
+ if (HasAlpha()) {
+ if (!ConvertFormat(IsCmykImage() ? FXDIB_Cmyka : FXDIB_Argb)) {
+ if (pSrcClone != pSrcBitmap) {
+ delete pSrcClone;
+ }
+ return FALSE;
}
- if (GetBPP() < 24) {
- if (HasAlpha()) {
- if (!ConvertFormat(IsCmykImage() ? FXDIB_Cmyka : FXDIB_Argb)) {
- return FALSE;
- }
- } else
-#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
- if (!ConvertFormat(IsCmykImage() ? FXDIB_Cmyk : FXDIB_Rgb)) {
- return FALSE;
- }
+ } else
+#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
+ if (!ConvertFormat(IsCmykImage() ? FXDIB_Cmyk : FXDIB_Rgb32)) {
#else
- if (!ConvertFormat(IsCmykImage() ? FXDIB_Cmyk : FXDIB_Rgb32)) {
- return FALSE;
- }
+ if (!ConvertFormat(IsCmykImage() ? FXDIB_Cmyk : FXDIB_Rgb)) {
#endif
+ if (pSrcClone != pSrcBitmap) {
+ delete pSrcClone;
}
- destOffset = g_ChannelOffset[destChannel];
- }
- int Bpp = GetBPP() / 8;
- if (Bpp == 1) {
- FXSYS_memset(m_pBuffer, value, m_Height * m_Pitch);
- return TRUE;
- }
- if (destChannel == FXDIB_Alpha && m_pAlphaMask) {
- FXSYS_memset(m_pAlphaMask->GetBuffer(), value, m_pAlphaMask->GetHeight()*m_pAlphaMask->GetPitch());
- return TRUE;
- }
- for (int row = 0; row < m_Height; row ++) {
- uint8_t* scan_line = m_pBuffer + row * m_Pitch + destOffset;
- for (int col = 0; col < m_Width; col ++) {
- *scan_line = value;
- scan_line += Bpp;
+ return FALSE;
+ }
+ }
+ destOffset = g_ChannelOffset[destChannel];
+ }
+ if (srcChannel == FXDIB_Alpha && pSrcClone->m_pAlphaMask) {
+ CFX_DIBitmap* pAlphaMask = pSrcClone->m_pAlphaMask;
+ if (pSrcClone->GetWidth() != m_Width ||
+ pSrcClone->GetHeight() != m_Height) {
+ if (pAlphaMask) {
+ pAlphaMask = pAlphaMask->StretchTo(m_Width, m_Height);
+ if (pAlphaMask == NULL) {
+ if (pSrcClone != pSrcBitmap) {
+ delete pSrcClone;
+ }
+ return FALSE;
}
+ }
}
- return TRUE;
+ if (pSrcClone != pSrcBitmap) {
+ pSrcClone->m_pAlphaMask = NULL;
+ delete pSrcClone;
+ }
+ pSrcClone = pAlphaMask;
+ srcOffset = 0;
+ } else if (pSrcClone->GetWidth() != m_Width ||
+ pSrcClone->GetHeight() != m_Height) {
+ CFX_DIBitmap* pSrcMatched = pSrcClone->StretchTo(m_Width, m_Height);
+ if (pSrcClone != pSrcBitmap) {
+ delete pSrcClone;
+ }
+ if (pSrcMatched == NULL) {
+ return FALSE;
+ }
+ pSrcClone = pSrcMatched;
+ }
+ if (destChannel == FXDIB_Alpha && m_pAlphaMask) {
+ pDst = m_pAlphaMask;
+ destOffset = 0;
+ }
+ int srcBytes = pSrcClone->GetBPP() / 8;
+ int destBytes = pDst->GetBPP() / 8;
+ for (int row = 0; row < m_Height; row++) {
+ uint8_t* dest_pos = (uint8_t*)pDst->GetScanline(row) + destOffset;
+ const uint8_t* src_pos = pSrcClone->GetScanline(row) + srcOffset;
+ for (int col = 0; col < m_Width; col++) {
+ *dest_pos = *src_pos;
+ dest_pos += destBytes;
+ src_pos += srcBytes;
+ }
+ }
+ if (pSrcClone != pSrcBitmap && pSrcClone != pSrcBitmap->m_pAlphaMask) {
+ delete pSrcClone;
+ }
+ return TRUE;
}
-FX_BOOL CFX_DIBitmap::MultiplyAlpha(const CFX_DIBSource* pSrcBitmap)
-{
- if (m_pBuffer == NULL) {
+FX_BOOL CFX_DIBitmap::LoadChannel(FXDIB_Channel destChannel, int value) {
+ if (m_pBuffer == NULL) {
+ return FALSE;
+ }
+ int destOffset;
+ if (destChannel == FXDIB_Alpha) {
+ if (IsAlphaMask()) {
+ if (!ConvertFormat(FXDIB_8bppMask)) {
return FALSE;
- }
- ASSERT(pSrcBitmap->IsAlphaMask());
- if (!pSrcBitmap->IsAlphaMask()) {
+ }
+ destOffset = 0;
+ } else {
+ destOffset = 0;
+ if (!ConvertFormat(IsCmykImage() ? FXDIB_Cmyka : FXDIB_Argb)) {
return FALSE;
+ }
+ if (GetFormat() == FXDIB_Argb) {
+ destOffset = 3;
+ }
}
- if (!IsAlphaMask() && !HasAlpha()) {
- return LoadChannel(FXDIB_Alpha, pSrcBitmap, FXDIB_Alpha);
+ } else {
+ if (IsAlphaMask()) {
+ return FALSE;
}
- CFX_DIBitmap* pSrcClone = (CFX_DIBitmap*)pSrcBitmap;
- if (pSrcBitmap->GetWidth() != m_Width || pSrcBitmap->GetHeight() != m_Height) {
- pSrcClone = pSrcBitmap->StretchTo(m_Width, m_Height);
- ASSERT(pSrcClone != NULL);
- if (pSrcClone == NULL) {
- return FALSE;
+ if (GetBPP() < 24) {
+ if (HasAlpha()) {
+ if (!ConvertFormat(IsCmykImage() ? FXDIB_Cmyka : FXDIB_Argb)) {
+ return FALSE;
}
+ } else
+#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
+ if (!ConvertFormat(IsCmykImage() ? FXDIB_Cmyk : FXDIB_Rgb)) {
+ return FALSE;
+ }
+#else
+ if (!ConvertFormat(IsCmykImage() ? FXDIB_Cmyk : FXDIB_Rgb32)) {
+ return FALSE;
+ }
+#endif
}
- if (IsAlphaMask()) {
- if(!ConvertFormat(FXDIB_8bppMask)) {
- if (pSrcClone != pSrcBitmap) {
- delete pSrcClone;
- }
- return FALSE;
- }
- for (int row = 0; row < m_Height; row ++) {
- uint8_t* dest_scan = m_pBuffer + m_Pitch * row;
- uint8_t* src_scan = pSrcClone->m_pBuffer + pSrcClone->m_Pitch * row;
- if (pSrcClone->GetBPP() == 1) {
- for (int col = 0; col < m_Width; col ++) {
- if (!((1 << (7 - col % 8)) & src_scan[col / 8])) {
- dest_scan[col] = 0;
- }
- }
- } else {
- for (int col = 0; col < m_Width; col ++) {
- *dest_scan = (*dest_scan) * src_scan[col] / 255;
- dest_scan ++;
- }
- }
+ destOffset = g_ChannelOffset[destChannel];
+ }
+ int Bpp = GetBPP() / 8;
+ if (Bpp == 1) {
+ FXSYS_memset(m_pBuffer, value, m_Height * m_Pitch);
+ return TRUE;
+ }
+ if (destChannel == FXDIB_Alpha && m_pAlphaMask) {
+ FXSYS_memset(m_pAlphaMask->GetBuffer(), value,
+ m_pAlphaMask->GetHeight() * m_pAlphaMask->GetPitch());
+ return TRUE;
+ }
+ for (int row = 0; row < m_Height; row++) {
+ uint8_t* scan_line = m_pBuffer + row * m_Pitch + destOffset;
+ for (int col = 0; col < m_Width; col++) {
+ *scan_line = value;
+ scan_line += Bpp;
+ }
+ }
+ return TRUE;
+}
+FX_BOOL CFX_DIBitmap::MultiplyAlpha(const CFX_DIBSource* pSrcBitmap) {
+ if (m_pBuffer == NULL) {
+ return FALSE;
+ }
+ ASSERT(pSrcBitmap->IsAlphaMask());
+ if (!pSrcBitmap->IsAlphaMask()) {
+ return FALSE;
+ }
+ if (!IsAlphaMask() && !HasAlpha()) {
+ return LoadChannel(FXDIB_Alpha, pSrcBitmap, FXDIB_Alpha);
+ }
+ CFX_DIBitmap* pSrcClone = (CFX_DIBitmap*)pSrcBitmap;
+ if (pSrcBitmap->GetWidth() != m_Width ||
+ pSrcBitmap->GetHeight() != m_Height) {
+ pSrcClone = pSrcBitmap->StretchTo(m_Width, m_Height);
+ ASSERT(pSrcClone != NULL);
+ if (pSrcClone == NULL) {
+ return FALSE;
+ }
+ }
+ if (IsAlphaMask()) {
+ if (!ConvertFormat(FXDIB_8bppMask)) {
+ if (pSrcClone != pSrcBitmap) {
+ delete pSrcClone;
+ }
+ return FALSE;
+ }
+ for (int row = 0; row < m_Height; row++) {
+ uint8_t* dest_scan = m_pBuffer + m_Pitch * row;
+ uint8_t* src_scan = pSrcClone->m_pBuffer + pSrcClone->m_Pitch * row;
+ if (pSrcClone->GetBPP() == 1) {
+ for (int col = 0; col < m_Width; col++) {
+ if (!((1 << (7 - col % 8)) & src_scan[col / 8])) {
+ dest_scan[col] = 0;
+ }
+ }
+ } else {
+ for (int col = 0; col < m_Width; col++) {
+ *dest_scan = (*dest_scan) * src_scan[col] / 255;
+ dest_scan++;
+ }
+ }
+ }
+ } else {
+ if (GetFormat() == FXDIB_Argb) {
+ if (pSrcClone->GetBPP() == 1) {
+ if (pSrcClone != pSrcBitmap) {
+ delete pSrcClone;
}
+ return FALSE;
+ }
+ for (int row = 0; row < m_Height; row++) {
+ uint8_t* dest_scan = m_pBuffer + m_Pitch * row + 3;
+ uint8_t* src_scan = pSrcClone->m_pBuffer + pSrcClone->m_Pitch * row;
+ for (int col = 0; col < m_Width; col++) {
+ *dest_scan = (*dest_scan) * src_scan[col] / 255;
+ dest_scan += 4;
+ }
+ }
} else {
- if(GetFormat() == FXDIB_Argb) {
- if (pSrcClone->GetBPP() == 1) {
- if (pSrcClone != pSrcBitmap) {
- delete pSrcClone;
- }
- return FALSE;
- }
- for (int row = 0; row < m_Height; row ++) {
- uint8_t* dest_scan = m_pBuffer + m_Pitch * row + 3;
- uint8_t* src_scan = pSrcClone->m_pBuffer + pSrcClone->m_Pitch * row;
- for (int col = 0; col < m_Width; col ++) {
- *dest_scan = (*dest_scan) * src_scan[col] / 255;
- dest_scan += 4;
- }
- }
- } else {
- m_pAlphaMask->MultiplyAlpha(pSrcClone);
- }
- }
- if (pSrcClone != pSrcBitmap) {
- delete pSrcClone;
+ m_pAlphaMask->MultiplyAlpha(pSrcClone);
}
- return TRUE;
+ }
+ if (pSrcClone != pSrcBitmap) {
+ delete pSrcClone;
+ }
+ return TRUE;
}
-FX_BOOL CFX_DIBitmap::GetGrayData(void* pIccTransform)
-{
- if (m_pBuffer == NULL) {
+FX_BOOL CFX_DIBitmap::GetGrayData(void* pIccTransform) {
+ if (m_pBuffer == NULL) {
+ return FALSE;
+ }
+ switch (GetFormat()) {
+ case FXDIB_1bppRgb: {
+ if (m_pPalette == NULL) {
return FALSE;
- }
- switch (GetFormat()) {
- case FXDIB_1bppRgb: {
- if (m_pPalette == NULL) {
- return FALSE;
- }
- uint8_t gray[2];
- for (int i = 0; i < 2; i ++) {
- int r = (uint8_t)(m_pPalette[i] >> 16);
- int g = (uint8_t)(m_pPalette[i] >> 8);
- int b = (uint8_t)m_pPalette[i];
- gray[i] = (uint8_t)FXRGB2GRAY(r, g, b);
- }
- CFX_DIBitmap* pMask = new CFX_DIBitmap;
- if (!pMask->Create(m_Width, m_Height, FXDIB_8bppMask)) {
- delete pMask;
- return FALSE;
- }
- FXSYS_memset(pMask->GetBuffer(), gray[0], pMask->GetPitch() * m_Height);
- for (int row = 0; row < m_Height; row ++) {
- uint8_t* src_pos = m_pBuffer + row * m_Pitch;
- uint8_t* dest_pos = (uint8_t*)pMask->GetScanline(row);
- for (int col = 0; col < m_Width; col ++) {
- if (src_pos[col / 8] & (1 << (7 - col % 8))) {
- *dest_pos = gray[1];
- }
- dest_pos ++;
- }
- }
- TakeOver(pMask);
- delete pMask;
- break;
- }
- case FXDIB_8bppRgb: {
- if (m_pPalette == NULL) {
- return FALSE;
- }
- uint8_t gray[256];
- for (int i = 0; i < 256; i ++) {
- int r = (uint8_t)(m_pPalette[i] >> 16);
- int g = (uint8_t)(m_pPalette[i] >> 8);
- int b = (uint8_t)m_pPalette[i];
- gray[i] = (uint8_t)FXRGB2GRAY(r, g, b);
- }
- CFX_DIBitmap* pMask = new CFX_DIBitmap;
- if (!pMask->Create(m_Width, m_Height, FXDIB_8bppMask)) {
- delete pMask;
- return FALSE;
- }
- for (int row = 0; row < m_Height; row ++) {
- uint8_t* dest_pos = pMask->GetBuffer() + row * pMask->GetPitch();
- uint8_t* src_pos = m_pBuffer + row * m_Pitch;
- for (int col = 0; col < m_Width; col ++) {
- *dest_pos ++ = gray[*src_pos ++];
- }
- }
- TakeOver(pMask);
- delete pMask;
- break;
- }
- case FXDIB_Rgb: {
- CFX_DIBitmap* pMask = new CFX_DIBitmap;
- if (!pMask->Create(m_Width, m_Height, FXDIB_8bppMask)) {
- delete pMask;
- return FALSE;
- }
- for (int row = 0; row < m_Height; row ++) {
- uint8_t* src_pos = m_pBuffer + row * m_Pitch;
- uint8_t* dest_pos = pMask->GetBuffer() + row * pMask->GetPitch();
- for (int col = 0; col < m_Width; col ++) {
- *dest_pos ++ = FXRGB2GRAY(src_pos[2], src_pos[1], *src_pos);
- src_pos += 3;
- }
- }
- TakeOver(pMask);
- delete pMask;
- break;
- }
- case FXDIB_Rgb32: {
- CFX_DIBitmap* pMask = new CFX_DIBitmap;
- if (!pMask->Create(m_Width, m_Height, FXDIB_8bppMask)) {
- delete pMask;
- return FALSE;
- }
- for (int row = 0; row < m_Height; row ++) {
- uint8_t* src_pos = m_pBuffer + row * m_Pitch;
- uint8_t* dest_pos = pMask->GetBuffer() + row * pMask->GetPitch();
- for (int col = 0; col < m_Width; col ++) {
- *dest_pos ++ = FXRGB2GRAY(src_pos[2], src_pos[1], *src_pos);
- src_pos += 4;
- }
- }
- TakeOver(pMask);
- delete pMask;
- break;
- }
- default:
- return FALSE;
- }
- return TRUE;
+ }
+ uint8_t gray[2];
+ for (int i = 0; i < 2; i++) {
+ int r = (uint8_t)(m_pPalette[i] >> 16);
+ int g = (uint8_t)(m_pPalette[i] >> 8);
+ int b = (uint8_t)m_pPalette[i];
+ gray[i] = (uint8_t)FXRGB2GRAY(r, g, b);
+ }
+ CFX_DIBitmap* pMask = new CFX_DIBitmap;
+ if (!pMask->Create(m_Width, m_Height, FXDIB_8bppMask)) {
+ delete pMask;
+ return FALSE;
+ }
+ FXSYS_memset(pMask->GetBuffer(), gray[0], pMask->GetPitch() * m_Height);
+ for (int row = 0; row < m_Height; row++) {
+ uint8_t* src_pos = m_pBuffer + row * m_Pitch;
+ uint8_t* dest_pos = (uint8_t*)pMask->GetScanline(row);
+ for (int col = 0; col < m_Width; col++) {
+ if (src_pos[col / 8] & (1 << (7 - col % 8))) {
+ *dest_pos = gray[1];
+ }
+ dest_pos++;
+ }
+ }
+ TakeOver(pMask);
+ delete pMask;
+ break;
+ }
+ case FXDIB_8bppRgb: {
+ if (m_pPalette == NULL) {
+ return FALSE;
+ }
+ uint8_t gray[256];
+ for (int i = 0; i < 256; i++) {
+ int r = (uint8_t)(m_pPalette[i] >> 16);
+ int g = (uint8_t)(m_pPalette[i] >> 8);
+ int b = (uint8_t)m_pPalette[i];
+ gray[i] = (uint8_t)FXRGB2GRAY(r, g, b);
+ }
+ CFX_DIBitmap* pMask = new CFX_DIBitmap;
+ if (!pMask->Create(m_Width, m_Height, FXDIB_8bppMask)) {
+ delete pMask;
+ return FALSE;
+ }
+ for (int row = 0; row < m_Height; row++) {
+ uint8_t* dest_pos = pMask->GetBuffer() + row * pMask->GetPitch();
+ uint8_t* src_pos = m_pBuffer + row * m_Pitch;
+ for (int col = 0; col < m_Width; col++) {
+ *dest_pos++ = gray[*src_pos++];
+ }
+ }
+ TakeOver(pMask);
+ delete pMask;
+ break;
+ }
+ case FXDIB_Rgb: {
+ CFX_DIBitmap* pMask = new CFX_DIBitmap;
+ if (!pMask->Create(m_Width, m_Height, FXDIB_8bppMask)) {
+ delete pMask;
+ return FALSE;
+ }
+ for (int row = 0; row < m_Height; row++) {
+ uint8_t* src_pos = m_pBuffer + row * m_Pitch;
+ uint8_t* dest_pos = pMask->GetBuffer() + row * pMask->GetPitch();
+ for (int col = 0; col < m_Width; col++) {
+ *dest_pos++ = FXRGB2GRAY(src_pos[2], src_pos[1], *src_pos);
+ src_pos += 3;
+ }
+ }
+ TakeOver(pMask);
+ delete pMask;
+ break;
+ }
+ case FXDIB_Rgb32: {
+ CFX_DIBitmap* pMask = new CFX_DIBitmap;
+ if (!pMask->Create(m_Width, m_Height, FXDIB_8bppMask)) {
+ delete pMask;
+ return FALSE;
+ }
+ for (int row = 0; row < m_Height; row++) {
+ uint8_t* src_pos = m_pBuffer + row * m_Pitch;
+ uint8_t* dest_pos = pMask->GetBuffer() + row * pMask->GetPitch();
+ for (int col = 0; col < m_Width; col++) {
+ *dest_pos++ = FXRGB2GRAY(src_pos[2], src_pos[1], *src_pos);
+ src_pos += 4;
+ }
+ }
+ TakeOver(pMask);
+ delete pMask;
+ break;
+ }
+ default:
+ return FALSE;
+ }
+ return TRUE;
}
-FX_BOOL CFX_DIBitmap::MultiplyAlpha(int alpha)
-{
- if (m_pBuffer == NULL) {
+FX_BOOL CFX_DIBitmap::MultiplyAlpha(int alpha) {
+ if (m_pBuffer == NULL) {
+ return FALSE;
+ }
+ switch (GetFormat()) {
+ case FXDIB_1bppMask:
+ if (!ConvertFormat(FXDIB_8bppMask)) {
return FALSE;
- }
- switch (GetFormat()) {
- case FXDIB_1bppMask:
- if (!ConvertFormat(FXDIB_8bppMask)) {
- return FALSE;
- }
- MultiplyAlpha(alpha);
- break;
- case FXDIB_8bppMask: {
- for (int row = 0; row < m_Height; row ++) {
- uint8_t* scan_line = m_pBuffer + row * m_Pitch;
- for (int col = 0; col < m_Width; col ++) {
- scan_line[col] = scan_line[col] * alpha / 255;
- }
- }
- break;
- }
- case FXDIB_Argb: {
- for (int row = 0; row < m_Height; row ++) {
- uint8_t* scan_line = m_pBuffer + row * m_Pitch + 3;
- for (int col = 0; col < m_Width; col ++) {
- *scan_line = (*scan_line) * alpha / 255;
- scan_line += 4;
- }
- }
- break;
- }
- default:
- if (HasAlpha()) {
- m_pAlphaMask->MultiplyAlpha(alpha);
- } else if (IsCmykImage()) {
- if (!ConvertFormat((FXDIB_Format)(GetFormat() | 0x0200))) {
- return FALSE;
- }
- m_pAlphaMask->MultiplyAlpha(alpha);
- } else {
- if (!ConvertFormat(FXDIB_Argb)) {
- return FALSE;
- }
- MultiplyAlpha(alpha);
- }
- break;
- }
- return TRUE;
+ }
+ MultiplyAlpha(alpha);
+ break;
+ case FXDIB_8bppMask: {
+ for (int row = 0; row < m_Height; row++) {
+ uint8_t* scan_line = m_pBuffer + row * m_Pitch;
+ for (int col = 0; col < m_Width; col++) {
+ scan_line[col] = scan_line[col] * alpha / 255;
+ }
+ }
+ break;
+ }
+ case FXDIB_Argb: {
+ for (int row = 0; row < m_Height; row++) {
+ uint8_t* scan_line = m_pBuffer + row * m_Pitch + 3;
+ for (int col = 0; col < m_Width; col++) {
+ *scan_line = (*scan_line) * alpha / 255;
+ scan_line += 4;
+ }
+ }
+ break;
+ }
+ default:
+ if (HasAlpha()) {
+ m_pAlphaMask->MultiplyAlpha(alpha);
+ } else if (IsCmykImage()) {
+ if (!ConvertFormat((FXDIB_Format)(GetFormat() | 0x0200))) {
+ return FALSE;
+ }
+ m_pAlphaMask->MultiplyAlpha(alpha);
+ } else {
+ if (!ConvertFormat(FXDIB_Argb)) {
+ return FALSE;
+ }
+ MultiplyAlpha(alpha);
+ }
+ break;
+ }
+ return TRUE;
}
-FX_DWORD CFX_DIBitmap::GetPixel(int x, int y) const
-{
- if (m_pBuffer == NULL) {
- return 0;
- }
- uint8_t* pos = m_pBuffer + y * m_Pitch + x * GetBPP() / 8;
- switch (GetFormat()) {
- case FXDIB_1bppMask: {
- if ((*pos) & (1 << (7 - x % 8))) {
- return 0xff000000;
- }
- return 0;
- }
- case FXDIB_1bppRgb: {
- if ((*pos) & (1 << (7 - x % 8))) {
- return m_pPalette ? m_pPalette[1] : 0xffffffff;
- }
- return m_pPalette ? m_pPalette[0] : 0xff000000;
- }
- case FXDIB_8bppMask:
- return (*pos) << 24;
- case FXDIB_8bppRgb:
- return m_pPalette ? m_pPalette[*pos] : (0xff000000 | ((*pos) * 0x10101));
- case FXDIB_Rgb:
- case FXDIB_Rgba:
- case FXDIB_Rgb32:
- return FXARGB_GETDIB(pos) | 0xff000000;
- case FXDIB_Argb:
- return FXARGB_GETDIB(pos);
- default:
- break;
- }
+FX_DWORD CFX_DIBitmap::GetPixel(int x, int y) const {
+ if (m_pBuffer == NULL) {
return 0;
+ }
+ uint8_t* pos = m_pBuffer + y * m_Pitch + x * GetBPP() / 8;
+ switch (GetFormat()) {
+ case FXDIB_1bppMask: {
+ if ((*pos) & (1 << (7 - x % 8))) {
+ return 0xff000000;
+ }
+ return 0;
+ }
+ case FXDIB_1bppRgb: {
+ if ((*pos) & (1 << (7 - x % 8))) {
+ return m_pPalette ? m_pPalette[1] : 0xffffffff;
+ }
+ return m_pPalette ? m_pPalette[0] : 0xff000000;
+ }
+ case FXDIB_8bppMask:
+ return (*pos) << 24;
+ case FXDIB_8bppRgb:
+ return m_pPalette ? m_pPalette[*pos] : (0xff000000 | ((*pos) * 0x10101));
+ case FXDIB_Rgb:
+ case FXDIB_Rgba:
+ case FXDIB_Rgb32:
+ return FXARGB_GETDIB(pos) | 0xff000000;
+ case FXDIB_Argb:
+ return FXARGB_GETDIB(pos);
+ default:
+ break;
+ }
+ return 0;
}
-void CFX_DIBitmap::SetPixel(int x, int y, FX_DWORD color)
-{
- if (m_pBuffer == NULL) {
- return;
- }
- if (x < 0 || x >= m_Width || y < 0 || y >= m_Height) {
- return;
- }
- uint8_t* pos = m_pBuffer + y * m_Pitch + x * GetBPP() / 8;
- switch (GetFormat()) {
- case FXDIB_1bppMask:
- if (color >> 24) {
- *pos |= 1 << (7 - x % 8);
- } else {
- *pos &= ~(1 << (7 - x % 8));
- }
- break;
- case FXDIB_1bppRgb:
- if (m_pPalette) {
- if (color == m_pPalette[1]) {
- *pos |= 1 << (7 - x % 8);
- } else {
- *pos &= ~(1 << (7 - x % 8));
- }
- } else {
- if (color == 0xffffffff) {
- *pos |= 1 << (7 - x % 8);
- } else {
- *pos &= ~(1 << (7 - x % 8));
- }
- }
- break;
- case FXDIB_8bppMask:
- *pos = (uint8_t)(color >> 24);
- break;
- case FXDIB_8bppRgb: {
- if (m_pPalette) {
- for (int i = 0; i < 256; i ++) {
- if (m_pPalette[i] == color) {
- *pos = (uint8_t)i;
- return;
- }
- }
- *pos = 0;
- } else {
- *pos = FXRGB2GRAY(FXARGB_R(color), FXARGB_G(color), FXARGB_B(color));
- }
- break;
- }
- case FXDIB_Rgb:
- case FXDIB_Rgb32: {
- int alpha = FXARGB_A(color);
- pos[0] = (FXARGB_B(color) * alpha + pos[0] * (255 - alpha)) / 255;
- pos[1] = (FXARGB_G(color) * alpha + pos[1] * (255 - alpha)) / 255;
- pos[2] = (FXARGB_R(color) * alpha + pos[2] * (255 - alpha)) / 255;
- break;
- }
- case FXDIB_Rgba: {
- pos[0] = FXARGB_B(color);
- pos[1] = FXARGB_G(color);
- pos[2] = FXARGB_R(color);
- break;
- }
- case FXDIB_Argb:
- FXARGB_SETDIB(pos, color);
- break;
- default:
- break;
- }
-}
-void CFX_DIBitmap::DownSampleScanline(int line, uint8_t* dest_scan, int dest_bpp,
- int dest_width, FX_BOOL bFlipX, int clip_left, int clip_width) const
-{
- if (m_pBuffer == NULL) {
- return;
- }
- int src_Bpp = m_bpp / 8;
- uint8_t* scanline = m_pBuffer + line * m_Pitch;
- if (src_Bpp == 0) {
- for (int i = 0; i < clip_width; i ++) {
- FX_DWORD dest_x = clip_left + i;
- FX_DWORD src_x = dest_x * m_Width / dest_width;
- if (bFlipX) {
- src_x = m_Width - src_x - 1;
- }
- src_x %= m_Width;
- dest_scan[i] = (scanline[src_x / 8] & (1 << (7 - src_x % 8))) ? 255 : 0;
- }
- } else if (src_Bpp == 1) {
- for (int i = 0; i < clip_width; i ++) {
- FX_DWORD dest_x = clip_left + i;
- FX_DWORD src_x = dest_x * m_Width / dest_width;
- if (bFlipX) {
- src_x = m_Width - src_x - 1;
- }
- src_x %= m_Width;
- int dest_pos = i;
- if (m_pPalette) {
- if (!IsCmykImage()) {
- dest_pos *= 3;
- FX_ARGB argb = m_pPalette[scanline[src_x]];
- dest_scan[dest_pos] = FXARGB_B(argb);
- dest_scan[dest_pos + 1] = FXARGB_G(argb);
- dest_scan[dest_pos + 2] = FXARGB_R(argb);
- } else {
- dest_pos *= 4;
- FX_CMYK cmyk = m_pPalette[scanline[src_x]];
- dest_scan[dest_pos] = FXSYS_GetCValue(cmyk);
- dest_scan[dest_pos + 1] = FXSYS_GetMValue(cmyk);
- dest_scan[dest_pos + 2] = FXSYS_GetYValue(cmyk);
- dest_scan[dest_pos + 3] = FXSYS_GetKValue(cmyk);
- }
- } else {
- dest_scan[dest_pos] = scanline[src_x];
- }
- }
- } else {
- for (int i = 0; i < clip_width; i ++) {
- FX_DWORD dest_x = clip_left + i;
- FX_DWORD src_x = bFlipX ? (m_Width - dest_x * m_Width / dest_width - 1) * src_Bpp : (dest_x * m_Width / dest_width) * src_Bpp;
- src_x %= m_Width * src_Bpp;
- int dest_pos = i * src_Bpp;
- for (int b = 0; b < src_Bpp; b ++) {
- dest_scan[dest_pos + b] = scanline[src_x + b];
- }
+void CFX_DIBitmap::SetPixel(int x, int y, FX_DWORD color) {
+ if (m_pBuffer == NULL) {
+ return;
+ }
+ if (x < 0 || x >= m_Width || y < 0 || y >= m_Height) {
+ return;
+ }
+ uint8_t* pos = m_pBuffer + y * m_Pitch + x * GetBPP() / 8;
+ switch (GetFormat()) {
+ case FXDIB_1bppMask:
+ if (color >> 24) {
+ *pos |= 1 << (7 - x % 8);
+ } else {
+ *pos &= ~(1 << (7 - x % 8));
+ }
+ break;
+ case FXDIB_1bppRgb:
+ if (m_pPalette) {
+ if (color == m_pPalette[1]) {
+ *pos |= 1 << (7 - x % 8);
+ } else {
+ *pos &= ~(1 << (7 - x % 8));
}
- }
+ } else {
+ if (color == 0xffffffff) {
+ *pos |= 1 << (7 - x % 8);
+ } else {
+ *pos &= ~(1 << (7 - x % 8));
+ }
+ }
+ break;
+ case FXDIB_8bppMask:
+ *pos = (uint8_t)(color >> 24);
+ break;
+ case FXDIB_8bppRgb: {
+ if (m_pPalette) {
+ for (int i = 0; i < 256; i++) {
+ if (m_pPalette[i] == color) {
+ *pos = (uint8_t)i;
+ return;
+ }
+ }
+ *pos = 0;
+ } else {
+ *pos = FXRGB2GRAY(FXARGB_R(color), FXARGB_G(color), FXARGB_B(color));
+ }
+ break;
+ }
+ case FXDIB_Rgb:
+ case FXDIB_Rgb32: {
+ int alpha = FXARGB_A(color);
+ pos[0] = (FXARGB_B(color) * alpha + pos[0] * (255 - alpha)) / 255;
+ pos[1] = (FXARGB_G(color) * alpha + pos[1] * (255 - alpha)) / 255;
+ pos[2] = (FXARGB_R(color) * alpha + pos[2] * (255 - alpha)) / 255;
+ break;
+ }
+ case FXDIB_Rgba: {
+ pos[0] = FXARGB_B(color);
+ pos[1] = FXARGB_G(color);
+ pos[2] = FXARGB_R(color);
+ break;
+ }
+ case FXDIB_Argb:
+ FXARGB_SETDIB(pos, color);
+ break;
+ default:
+ break;
+ }
}
-FX_BOOL CFX_DIBitmap::ConvertColorScale(FX_DWORD forecolor, FX_DWORD backcolor)
-{
- ASSERT(!IsAlphaMask());
- if (m_pBuffer == NULL || IsAlphaMask()) {
- return FALSE;
- }
- int fc, fm, fy, fk, bc, bm, by, bk;
- int fr, fg, fb, br, bg, bb;
- FX_BOOL isCmykImage = IsCmykImage();
+void CFX_DIBitmap::DownSampleScanline(int line,
+ uint8_t* dest_scan,
+ int dest_bpp,
+ int dest_width,
+ FX_BOOL bFlipX,
+ int clip_left,
+ int clip_width) const {
+ if (m_pBuffer == NULL) {
+ return;
+ }
+ int src_Bpp = m_bpp / 8;
+ uint8_t* scanline = m_pBuffer + line * m_Pitch;
+ if (src_Bpp == 0) {
+ for (int i = 0; i < clip_width; i++) {
+ FX_DWORD dest_x = clip_left + i;
+ FX_DWORD src_x = dest_x * m_Width / dest_width;
+ if (bFlipX) {
+ src_x = m_Width - src_x - 1;
+ }
+ src_x %= m_Width;
+ dest_scan[i] = (scanline[src_x / 8] & (1 << (7 - src_x % 8))) ? 255 : 0;
+ }
+ } else if (src_Bpp == 1) {
+ for (int i = 0; i < clip_width; i++) {
+ FX_DWORD dest_x = clip_left + i;
+ FX_DWORD src_x = dest_x * m_Width / dest_width;
+ if (bFlipX) {
+ src_x = m_Width - src_x - 1;
+ }
+ src_x %= m_Width;
+ int dest_pos = i;
+ if (m_pPalette) {
+ if (!IsCmykImage()) {
+ dest_pos *= 3;
+ FX_ARGB argb = m_pPalette[scanline[src_x]];
+ dest_scan[dest_pos] = FXARGB_B(argb);
+ dest_scan[dest_pos + 1] = FXARGB_G(argb);
+ dest_scan[dest_pos + 2] = FXARGB_R(argb);
+ } else {
+ dest_pos *= 4;
+ FX_CMYK cmyk = m_pPalette[scanline[src_x]];
+ dest_scan[dest_pos] = FXSYS_GetCValue(cmyk);
+ dest_scan[dest_pos + 1] = FXSYS_GetMValue(cmyk);
+ dest_scan[dest_pos + 2] = FXSYS_GetYValue(cmyk);
+ dest_scan[dest_pos + 3] = FXSYS_GetKValue(cmyk);
+ }
+ } else {
+ dest_scan[dest_pos] = scanline[src_x];
+ }
+ }
+ } else {
+ for (int i = 0; i < clip_width; i++) {
+ FX_DWORD dest_x = clip_left + i;
+ FX_DWORD src_x =
+ bFlipX ? (m_Width - dest_x * m_Width / dest_width - 1) * src_Bpp
+ : (dest_x * m_Width / dest_width) * src_Bpp;
+ src_x %= m_Width * src_Bpp;
+ int dest_pos = i * src_Bpp;
+ for (int b = 0; b < src_Bpp; b++) {
+ dest_scan[dest_pos + b] = scanline[src_x + b];
+ }
+ }
+ }
+}
+FX_BOOL CFX_DIBitmap::ConvertColorScale(FX_DWORD forecolor,
+ FX_DWORD backcolor) {
+ ASSERT(!IsAlphaMask());
+ if (m_pBuffer == NULL || IsAlphaMask()) {
+ return FALSE;
+ }
+ int fc, fm, fy, fk, bc, bm, by, bk;
+ int fr, fg, fb, br, bg, bb;
+ FX_BOOL isCmykImage = IsCmykImage();
+ if (isCmykImage) {
+ fc = FXSYS_GetCValue(forecolor);
+ fm = FXSYS_GetMValue(forecolor);
+ fy = FXSYS_GetYValue(forecolor);
+ fk = FXSYS_GetKValue(forecolor);
+ bc = FXSYS_GetCValue(backcolor);
+ bm = FXSYS_GetMValue(backcolor);
+ by = FXSYS_GetYValue(backcolor);
+ bk = FXSYS_GetKValue(backcolor);
+ } else {
+ fr = FXSYS_GetRValue(forecolor);
+ fg = FXSYS_GetGValue(forecolor);
+ fb = FXSYS_GetBValue(forecolor);
+ br = FXSYS_GetRValue(backcolor);
+ bg = FXSYS_GetGValue(backcolor);
+ bb = FXSYS_GetBValue(backcolor);
+ }
+ if (m_bpp <= 8) {
if (isCmykImage) {
- fc = FXSYS_GetCValue(forecolor);
- fm = FXSYS_GetMValue(forecolor);
- fy = FXSYS_GetYValue(forecolor);
- fk = FXSYS_GetKValue(forecolor);
- bc = FXSYS_GetCValue(backcolor);
- bm = FXSYS_GetMValue(backcolor);
- by = FXSYS_GetYValue(backcolor);
- bk = FXSYS_GetKValue(backcolor);
- } else {
- fr = FXSYS_GetRValue(forecolor);
- fg = FXSYS_GetGValue(forecolor);
- fb = FXSYS_GetBValue(forecolor);
- br = FXSYS_GetRValue(backcolor);
- bg = FXSYS_GetGValue(backcolor);
- bb = FXSYS_GetBValue(backcolor);
- }
- if (m_bpp <= 8) {
- if (isCmykImage) {
- if (forecolor == 0xff && backcolor == 0 && m_pPalette == NULL) {
- return TRUE;
- }
- } else if (forecolor == 0 && backcolor == 0xffffff && m_pPalette == NULL) {
- return TRUE;
- }
- if (m_pPalette == NULL) {
- BuildPalette();
- }
- int size = 1 << m_bpp;
- if (isCmykImage) {
- for (int i = 0; i < size; i ++) {
- uint8_t b, g, r;
- AdobeCMYK_to_sRGB1(FXSYS_GetCValue(m_pPalette[i]), FXSYS_GetMValue(m_pPalette[i]), FXSYS_GetYValue(m_pPalette[i]), FXSYS_GetKValue(m_pPalette[i]),
- r, g, b);
- int gray = 255 - FXRGB2GRAY(r, g, b);
- m_pPalette[i] = CmykEncode(bc + (fc - bc) * gray / 255, bm + (fm - bm) * gray / 255,
- by + (fy - by) * gray / 255, bk + (fk - bk) * gray / 255);
- }
- } else
- for (int i = 0; i < size; i ++) {
- int gray = FXRGB2GRAY(FXARGB_R(m_pPalette[i]), FXARGB_G(m_pPalette[i]), FXARGB_B(m_pPalette[i]));
- m_pPalette[i] = FXARGB_MAKE(0xff, br + (fr - br) * gray / 255, bg + (fg - bg) * gray / 255,
- bb + (fb - bb) * gray / 255);
- }
+ if (forecolor == 0xff && backcolor == 0 && m_pPalette == NULL) {
return TRUE;
+ }
+ } else if (forecolor == 0 && backcolor == 0xffffff && m_pPalette == NULL) {
+ return TRUE;
}
- if (isCmykImage) {
- if (forecolor == 0xff && backcolor == 0x00) {
- for (int row = 0; row < m_Height; row ++) {
- uint8_t* scanline = m_pBuffer + row * m_Pitch;
- for (int col = 0; col < m_Width; col ++) {
- uint8_t b, g, r;
- AdobeCMYK_to_sRGB1(scanline[0], scanline[1], scanline[2], scanline[3],
- r, g, b);
- *scanline ++ = 0;
- *scanline ++ = 0;
- *scanline ++ = 0;
- *scanline ++ = 255 - FXRGB2GRAY(r, g, b);
- }
- }
- return TRUE;
- }
- } else if (forecolor == 0 && backcolor == 0xffffff) {
- for (int row = 0; row < m_Height; row ++) {
- uint8_t* scanline = m_pBuffer + row * m_Pitch;
- int gap = m_bpp / 8 - 2;
- for (int col = 0; col < m_Width; col ++) {
- int gray = FXRGB2GRAY(scanline[2], scanline[1], scanline[0]);
- *scanline ++ = gray;
- *scanline ++ = gray;
- *scanline = gray;
- scanline += gap;
- }
- }
- return TRUE;
+ if (m_pPalette == NULL) {
+ BuildPalette();
}
+ int size = 1 << m_bpp;
if (isCmykImage) {
- for (int row = 0; row < m_Height; row ++) {
- uint8_t* scanline = m_pBuffer + row * m_Pitch;
- for (int col = 0; col < m_Width; col ++) {
- uint8_t b, g, r;
- AdobeCMYK_to_sRGB1(scanline[0], scanline[1], scanline[2], scanline[3],
- r, g, b);
- int gray = 255 - FXRGB2GRAY(r, g, b);
- *scanline ++ = bc + (fc - bc) * gray / 255;
- *scanline ++ = bm + (fm - bm) * gray / 255;
- *scanline ++ = by + (fy - by) * gray / 255;
- *scanline ++ = bk + (fk - bk) * gray / 255;
- }
- }
- } else {
- for (int row = 0; row < m_Height; row ++) {
- uint8_t* scanline = m_pBuffer + row * m_Pitch;
- int gap = m_bpp / 8 - 2;
- for (int col = 0; col < m_Width; col ++) {
- int gray = FXRGB2GRAY(scanline[2], scanline[1], scanline[0]);
- *scanline ++ = bb + (fb - bb) * gray / 255;
- *scanline ++ = bg + (fg - bg) * gray / 255;
- *scanline = br + (fr - br) * gray / 255;
- scanline += gap;
- }
- }
- }
+ for (int i = 0; i < size; i++) {
+ uint8_t b, g, r;
+ AdobeCMYK_to_sRGB1(FXSYS_GetCValue(m_pPalette[i]),
+ FXSYS_GetMValue(m_pPalette[i]),
+ FXSYS_GetYValue(m_pPalette[i]),
+ FXSYS_GetKValue(m_pPalette[i]), r, g, b);
+ int gray = 255 - FXRGB2GRAY(r, g, b);
+ m_pPalette[i] = CmykEncode(
+ bc + (fc - bc) * gray / 255, bm + (fm - bm) * gray / 255,
+ by + (fy - by) * gray / 255, bk + (fk - bk) * gray / 255);
+ }
+ } else
+ for (int i = 0; i < size; i++) {
+ int gray = FXRGB2GRAY(FXARGB_R(m_pPalette[i]), FXARGB_G(m_pPalette[i]),
+ FXARGB_B(m_pPalette[i]));
+ m_pPalette[i] = FXARGB_MAKE(0xff, br + (fr - br) * gray / 255,
+ bg + (fg - bg) * gray / 255,
+ bb + (fb - bb) * gray / 255);
+ }
return TRUE;
-}
-FX_BOOL CFX_DIBitmap::DitherFS(const FX_DWORD* pPalette, int pal_size, const FX_RECT* pRect)
-{
- if (m_pBuffer == NULL) {
- return FALSE;
- }
- if (m_bpp != 8 && m_pPalette != NULL && m_AlphaFlag != 0) {
- return FALSE;
- }
- if (m_Width < 4 && m_Height < 4) {
- return FALSE;
- }
- FX_RECT rect(0, 0, m_Width, m_Height);
- if (pRect) {
- rect.Intersect(*pRect);
- }
- uint8_t translate[256];
- for (int i = 0; i < 256; i ++) {
- int err2 = 65536;
- for (int j = 0; j < pal_size; j ++) {
- uint8_t entry = (uint8_t)pPalette[j];
- int err = (int)entry - i;
- if (err * err < err2) {
- err2 = err * err;
- translate[i] = entry;
- }
- }
- }
- for (int row = rect.top; row < rect.bottom; row ++) {
- uint8_t* scan = m_pBuffer + row * m_Pitch;
- uint8_t* next_scan = m_pBuffer + (row + 1) * m_Pitch;
- for (int col = rect.left; col < rect.right; col ++) {
- int src_pixel = scan[col];
- int dest_pixel = translate[src_pixel];
- scan[col] = (uint8_t)dest_pixel;
- int error = -dest_pixel + src_pixel;
- if (col < rect.right - 1) {
- int src = scan[col + 1];
- src += error * 7 / 16;
- if (src > 255) {
- scan[col + 1] = 255;
- } else if (src < 0) {
- scan[col + 1] = 0;
- } else {
- scan[col + 1] = src;
- }
- }
- if (col < rect.right - 1 && row < rect.bottom - 1) {
- int src = next_scan[col + 1];
- src += error * 1 / 16;
- if (src > 255) {
- next_scan[col + 1] = 255;
- } else if (src < 0) {
- next_scan[col + 1] = 0;
- } else {
- next_scan[col + 1] = src;
- }
- }
- if (row < rect.bottom - 1) {
- int src = next_scan[col];
- src += error * 5 / 16;
- if (src > 255) {
- next_scan[col] = 255;
- } else if (src < 0) {
- next_scan[col] = 0;
- } else {
- next_scan[col] = src;
- }
- }
- if (col > rect.left && row < rect.bottom - 1) {
- int src = next_scan[col - 1];
- src += error * 3 / 16;
- if (src > 255) {
- next_scan[col - 1] = 255;
- } else if (src < 0) {
- next_scan[col - 1] = 0;
- } else {
- next_scan[col - 1] = src;
- }
- }
- }
+ }
+ if (isCmykImage) {
+ if (forecolor == 0xff && backcolor == 0x00) {
+ for (int row = 0; row < m_Height; row++) {
+ uint8_t* scanline = m_pBuffer + row * m_Pitch;
+ for (int col = 0; col < m_Width; col++) {
+ uint8_t b, g, r;
+ AdobeCMYK_to_sRGB1(scanline[0], scanline[1], scanline[2], scanline[3],
+ r, g, b);
+ *scanline++ = 0;
+ *scanline++ = 0;
+ *scanline++ = 0;
+ *scanline++ = 255 - FXRGB2GRAY(r, g, b);
+ }
+ }
+ return TRUE;
+ }
+ } else if (forecolor == 0 && backcolor == 0xffffff) {
+ for (int row = 0; row < m_Height; row++) {
+ uint8_t* scanline = m_pBuffer + row * m_Pitch;
+ int gap = m_bpp / 8 - 2;
+ for (int col = 0; col < m_Width; col++) {
+ int gray = FXRGB2GRAY(scanline[2], scanline[1], scanline[0]);
+ *scanline++ = gray;
+ *scanline++ = gray;
+ *scanline = gray;
+ scanline += gap;
+ }
}
return TRUE;
+ }
+ if (isCmykImage) {
+ for (int row = 0; row < m_Height; row++) {
+ uint8_t* scanline = m_pBuffer + row * m_Pitch;
+ for (int col = 0; col < m_Width; col++) {
+ uint8_t b, g, r;
+ AdobeCMYK_to_sRGB1(scanline[0], scanline[1], scanline[2], scanline[3],
+ r, g, b);
+ int gray = 255 - FXRGB2GRAY(r, g, b);
+ *scanline++ = bc + (fc - bc) * gray / 255;
+ *scanline++ = bm + (fm - bm) * gray / 255;
+ *scanline++ = by + (fy - by) * gray / 255;
+ *scanline++ = bk + (fk - bk) * gray / 255;
+ }
+ }
+ } else {
+ for (int row = 0; row < m_Height; row++) {
+ uint8_t* scanline = m_pBuffer + row * m_Pitch;
+ int gap = m_bpp / 8 - 2;
+ for (int col = 0; col < m_Width; col++) {
+ int gray = FXRGB2GRAY(scanline[2], scanline[1], scanline[0]);
+ *scanline++ = bb + (fb - bb) * gray / 255;
+ *scanline++ = bg + (fg - bg) * gray / 255;
+ *scanline = br + (fr - br) * gray / 255;
+ scanline += gap;
+ }
+ }
+ }
+ return TRUE;
}
-CFX_DIBitmap* CFX_DIBSource::FlipImage(FX_BOOL bXFlip, FX_BOOL bYFlip) const
-{
- CFX_DIBitmap* pFlipped = new CFX_DIBitmap;
- if (!pFlipped->Create(m_Width, m_Height, GetFormat())) {
- delete pFlipped;
- return NULL;
- }
- pFlipped->CopyPalette(m_pPalette);
- uint8_t* pDestBuffer = pFlipped->GetBuffer();
- int Bpp = m_bpp / 8;
- for (int row = 0; row < m_Height; row ++) {
- const uint8_t* src_scan = GetScanline(row);
- uint8_t* dest_scan = pDestBuffer + m_Pitch * (bYFlip ? (m_Height - row - 1) : row);
- if (!bXFlip) {
- FXSYS_memcpy(dest_scan, src_scan, m_Pitch);
- continue;
- }
- if (m_bpp == 1) {
- FXSYS_memset(dest_scan, 0, m_Pitch);
- for (int col = 0; col < m_Width; col ++)
- if (src_scan[col / 8] & (1 << (7 - col % 8))) {
- int dest_col = m_Width - col - 1;
- dest_scan[dest_col / 8] |= (1 << (7 - dest_col % 8));
- }
+FX_BOOL CFX_DIBitmap::DitherFS(const FX_DWORD* pPalette,
+ int pal_size,
+ const FX_RECT* pRect) {
+ if (m_pBuffer == NULL) {
+ return FALSE;
+ }
+ if (m_bpp != 8 && m_pPalette != NULL && m_AlphaFlag != 0) {
+ return FALSE;
+ }
+ if (m_Width < 4 && m_Height < 4) {
+ return FALSE;
+ }
+ FX_RECT rect(0, 0, m_Width, m_Height);
+ if (pRect) {
+ rect.Intersect(*pRect);
+ }
+ uint8_t translate[256];
+ for (int i = 0; i < 256; i++) {
+ int err2 = 65536;
+ for (int j = 0; j < pal_size; j++) {
+ uint8_t entry = (uint8_t)pPalette[j];
+ int err = (int)entry - i;
+ if (err * err < err2) {
+ err2 = err * err;
+ translate[i] = entry;
+ }
+ }
+ }
+ for (int row = rect.top; row < rect.bottom; row++) {
+ uint8_t* scan = m_pBuffer + row * m_Pitch;
+ uint8_t* next_scan = m_pBuffer + (row + 1) * m_Pitch;
+ for (int col = rect.left; col < rect.right; col++) {
+ int src_pixel = scan[col];
+ int dest_pixel = translate[src_pixel];
+ scan[col] = (uint8_t)dest_pixel;
+ int error = -dest_pixel + src_pixel;
+ if (col < rect.right - 1) {
+ int src = scan[col + 1];
+ src += error * 7 / 16;
+ if (src > 255) {
+ scan[col + 1] = 255;
+ } else if (src < 0) {
+ scan[col + 1] = 0;
} else {
- dest_scan += (m_Width - 1) * Bpp;
- if (Bpp == 1) {
- for (int col = 0; col < m_Width; col ++) {
- *dest_scan = *src_scan;
- dest_scan --;
- src_scan ++;
- }
- } else if (Bpp == 3) {
- for (int col = 0; col < m_Width; col ++) {
- dest_scan[0] = src_scan[0];
- dest_scan[1] = src_scan[1];
- dest_scan[2] = src_scan[2];
- dest_scan -= 3;
- src_scan += 3;
- }
- } else {
- ASSERT(Bpp == 4);
- for (int col = 0; col < m_Width; col ++) {
- *(FX_DWORD*)dest_scan = *(FX_DWORD*)src_scan;
- dest_scan -= 4;
- src_scan += 4;
- }
- }
- }
- }
- if (m_pAlphaMask) {
- pDestBuffer = pFlipped->m_pAlphaMask->GetBuffer();
- FX_DWORD dest_pitch = pFlipped->m_pAlphaMask->GetPitch();
- for (int row = 0; row < m_Height; row ++) {
- const uint8_t* src_scan = m_pAlphaMask->GetScanline(row);
- uint8_t* dest_scan = pDestBuffer + dest_pitch * (bYFlip ? (m_Height - row - 1) : row);
- if (!bXFlip) {
- FXSYS_memcpy(dest_scan, src_scan, dest_pitch);
- continue;
- }
- dest_scan += (m_Width - 1);
- for (int col = 0; col < m_Width; col ++) {
- *dest_scan = *src_scan;
- dest_scan --;
- src_scan ++;
- }
+ scan[col + 1] = src;
+ }
+ }
+ if (col < rect.right - 1 && row < rect.bottom - 1) {
+ int src = next_scan[col + 1];
+ src += error * 1 / 16;
+ if (src > 255) {
+ next_scan[col + 1] = 255;
+ } else if (src < 0) {
+ next_scan[col + 1] = 0;
+ } else {
+ next_scan[col + 1] = src;
+ }
+ }
+ if (row < rect.bottom - 1) {
+ int src = next_scan[col];
+ src += error * 5 / 16;
+ if (src > 255) {
+ next_scan[col] = 255;
+ } else if (src < 0) {
+ next_scan[col] = 0;
+ } else {
+ next_scan[col] = src;
+ }
+ }
+ if (col > rect.left && row < rect.bottom - 1) {
+ int src = next_scan[col - 1];
+ src += error * 3 / 16;
+ if (src > 255) {
+ next_scan[col - 1] = 255;
+ } else if (src < 0) {
+ next_scan[col - 1] = 0;
+ } else {
+ next_scan[col - 1] = src;
}
+ }
}
- return pFlipped;
+ }
+ return TRUE;
}
-CFX_DIBExtractor::CFX_DIBExtractor(const CFX_DIBSource* pSrc)
-{
- m_pBitmap = NULL;
- if (pSrc->GetBuffer() == NULL) {
- m_pBitmap = pSrc->Clone();
- } else {
- m_pBitmap = new CFX_DIBitmap;
- if (!m_pBitmap->Create(pSrc->GetWidth(), pSrc->GetHeight(), pSrc->GetFormat(), pSrc->GetBuffer())) {
- delete m_pBitmap;
- m_pBitmap = NULL;
- return;
+CFX_DIBitmap* CFX_DIBSource::FlipImage(FX_BOOL bXFlip, FX_BOOL bYFlip) const {
+ CFX_DIBitmap* pFlipped = new CFX_DIBitmap;
+ if (!pFlipped->Create(m_Width, m_Height, GetFormat())) {
+ delete pFlipped;
+ return NULL;
+ }
+ pFlipped->CopyPalette(m_pPalette);
+ uint8_t* pDestBuffer = pFlipped->GetBuffer();
+ int Bpp = m_bpp / 8;
+ for (int row = 0; row < m_Height; row++) {
+ const uint8_t* src_scan = GetScanline(row);
+ uint8_t* dest_scan =
+ pDestBuffer + m_Pitch * (bYFlip ? (m_Height - row - 1) : row);
+ if (!bXFlip) {
+ FXSYS_memcpy(dest_scan, src_scan, m_Pitch);
+ continue;
+ }
+ if (m_bpp == 1) {
+ FXSYS_memset(dest_scan, 0, m_Pitch);
+ for (int col = 0; col < m_Width; col++)
+ if (src_scan[col / 8] & (1 << (7 - col % 8))) {
+ int dest_col = m_Width - col - 1;
+ dest_scan[dest_col / 8] |= (1 << (7 - dest_col % 8));
}
- m_pBitmap->CopyPalette(pSrc->GetPalette());
- m_pBitmap->CopyAlphaMask(pSrc->m_pAlphaMask);
- }
+ } else {
+ dest_scan += (m_Width - 1) * Bpp;
+ if (Bpp == 1) {
+ for (int col = 0; col < m_Width; col++) {
+ *dest_scan = *src_scan;
+ dest_scan--;
+ src_scan++;
+ }
+ } else if (Bpp == 3) {
+ for (int col = 0; col < m_Width; col++) {
+ dest_scan[0] = src_scan[0];
+ dest_scan[1] = src_scan[1];
+ dest_scan[2] = src_scan[2];
+ dest_scan -= 3;
+ src_scan += 3;
+ }
+ } else {
+ ASSERT(Bpp == 4);
+ for (int col = 0; col < m_Width; col++) {
+ *(FX_DWORD*)dest_scan = *(FX_DWORD*)src_scan;
+ dest_scan -= 4;
+ src_scan += 4;
+ }
+ }
+ }
+ }
+ if (m_pAlphaMask) {
+ pDestBuffer = pFlipped->m_pAlphaMask->GetBuffer();
+ FX_DWORD dest_pitch = pFlipped->m_pAlphaMask->GetPitch();
+ for (int row = 0; row < m_Height; row++) {
+ const uint8_t* src_scan = m_pAlphaMask->GetScanline(row);
+ uint8_t* dest_scan =
+ pDestBuffer + dest_pitch * (bYFlip ? (m_Height - row - 1) : row);
+ if (!bXFlip) {
+ FXSYS_memcpy(dest_scan, src_scan, dest_pitch);
+ continue;
+ }
+ dest_scan += (m_Width - 1);
+ for (int col = 0; col < m_Width; col++) {
+ *dest_scan = *src_scan;
+ dest_scan--;
+ src_scan++;
+ }
+ }
+ }
+ return pFlipped;
}
-CFX_DIBExtractor::~CFX_DIBExtractor()
-{
- delete m_pBitmap;
+CFX_DIBExtractor::CFX_DIBExtractor(const CFX_DIBSource* pSrc) {
+ m_pBitmap = NULL;
+ if (pSrc->GetBuffer() == NULL) {
+ m_pBitmap = pSrc->Clone();
+ } else {
+ m_pBitmap = new CFX_DIBitmap;
+ if (!m_pBitmap->Create(pSrc->GetWidth(), pSrc->GetHeight(),
+ pSrc->GetFormat(), pSrc->GetBuffer())) {
+ delete m_pBitmap;
+ m_pBitmap = NULL;
+ return;
+ }
+ m_pBitmap->CopyPalette(pSrc->GetPalette());
+ m_pBitmap->CopyAlphaMask(pSrc->m_pAlphaMask);
+ }
}
-CFX_FilteredDIB::CFX_FilteredDIB()
-{
- m_pScanline = NULL;
- m_pSrc = NULL;
+CFX_DIBExtractor::~CFX_DIBExtractor() {
+ delete m_pBitmap;
}
-CFX_FilteredDIB::~CFX_FilteredDIB()
-{
- if (m_bAutoDropSrc) {
- delete m_pSrc;
- }
- if (m_pScanline) {
- FX_Free(m_pScanline);
- }
+CFX_FilteredDIB::CFX_FilteredDIB() {
+ m_pScanline = NULL;
+ m_pSrc = NULL;
}
-void CFX_FilteredDIB::LoadSrc(const CFX_DIBSource* pSrc, FX_BOOL bAutoDropSrc)
-{
- m_pSrc = pSrc;
- m_bAutoDropSrc = bAutoDropSrc;
- m_Width = pSrc->GetWidth();
- m_Height = pSrc->GetHeight();
- FXDIB_Format format = GetDestFormat();
- m_bpp = (uint8_t)format;
- m_AlphaFlag = (uint8_t)(format >> 8);
- m_Pitch = (m_Width * (format & 0xff) + 31) / 32 * 4;
- m_pPalette = GetDestPalette();
- m_pScanline = FX_Alloc(uint8_t, m_Pitch);
+CFX_FilteredDIB::~CFX_FilteredDIB() {
+ if (m_bAutoDropSrc) {
+ delete m_pSrc;
+ }
+ if (m_pScanline) {
+ FX_Free(m_pScanline);
+ }
}
-const uint8_t* CFX_FilteredDIB::GetScanline(int line) const
-{
- TranslateScanline(m_pScanline, m_pSrc->GetScanline(line));
- return m_pScanline;
+void CFX_FilteredDIB::LoadSrc(const CFX_DIBSource* pSrc, FX_BOOL bAutoDropSrc) {
+ m_pSrc = pSrc;
+ m_bAutoDropSrc = bAutoDropSrc;
+ m_Width = pSrc->GetWidth();
+ m_Height = pSrc->GetHeight();
+ FXDIB_Format format = GetDestFormat();
+ m_bpp = (uint8_t)format;
+ m_AlphaFlag = (uint8_t)(format >> 8);
+ m_Pitch = (m_Width * (format & 0xff) + 31) / 32 * 4;
+ m_pPalette = GetDestPalette();
+ m_pScanline = FX_Alloc(uint8_t, m_Pitch);
}
-void CFX_FilteredDIB::DownSampleScanline(int line, uint8_t* dest_scan, int dest_bpp,
- int dest_width, FX_BOOL bFlipX, int clip_left, int clip_width) const
-{
- m_pSrc->DownSampleScanline(line, dest_scan, dest_bpp, dest_width, bFlipX, clip_left, clip_width);
- TranslateDownSamples(dest_scan, dest_scan, clip_width, dest_bpp);
+const uint8_t* CFX_FilteredDIB::GetScanline(int line) const {
+ TranslateScanline(m_pScanline, m_pSrc->GetScanline(line));
+ return m_pScanline;
}
-CFX_ImageRenderer::CFX_ImageRenderer()
-{
- m_Status = 0;
- m_pTransformer = NULL;
- m_bRgbByteOrder = FALSE;
- m_BlendType = FXDIB_BLEND_NORMAL;
+void CFX_FilteredDIB::DownSampleScanline(int line,
+ uint8_t* dest_scan,
+ int dest_bpp,
+ int dest_width,
+ FX_BOOL bFlipX,
+ int clip_left,
+ int clip_width) const {
+ m_pSrc->DownSampleScanline(line, dest_scan, dest_bpp, dest_width, bFlipX,
+ clip_left, clip_width);
+ TranslateDownSamples(dest_scan, dest_scan, clip_width, dest_bpp);
}
-CFX_ImageRenderer::~CFX_ImageRenderer()
-{
- delete m_pTransformer;
+CFX_ImageRenderer::CFX_ImageRenderer() {
+ m_Status = 0;
+ m_pTransformer = NULL;
+ m_bRgbByteOrder = FALSE;
+ m_BlendType = FXDIB_BLEND_NORMAL;
}
-extern FX_RECT _FXDIB_SwapClipBox(FX_RECT& clip, int width, int height, FX_BOOL bFlipX, FX_BOOL bFlipY);
-FX_BOOL CFX_ImageRenderer::Start(CFX_DIBitmap* pDevice, const CFX_ClipRgn* pClipRgn,
- const CFX_DIBSource* pSource, int bitmap_alpha,
- FX_DWORD mask_color, const CFX_AffineMatrix* pMatrix,
- FX_DWORD dib_flags, FX_BOOL bRgbByteOrder,
- int alpha_flag, void* pIccTransform, int blend_type)
-{
- m_Matrix = *pMatrix;
- CFX_FloatRect image_rect_f = m_Matrix.GetUnitRect();
- FX_RECT image_rect = image_rect_f.GetOutterRect();
- m_ClipBox = pClipRgn ? pClipRgn->GetBox() : FX_RECT(0, 0, pDevice->GetWidth(), pDevice->GetHeight());
- m_ClipBox.Intersect(image_rect);
- if (m_ClipBox.IsEmpty()) {
- return FALSE;
- }
- m_pDevice = pDevice;
- m_pClipRgn = pClipRgn;
- m_MaskColor = mask_color;
- m_BitmapAlpha = bitmap_alpha;
- m_Matrix = *pMatrix;
- m_Flags = dib_flags;
- m_AlphaFlag = alpha_flag;
- m_pIccTransform = pIccTransform;
- m_bRgbByteOrder = bRgbByteOrder;
- m_BlendType = blend_type;
- FX_BOOL ret = TRUE;
- if ((FXSYS_fabs(m_Matrix.b) >= 0.5f || m_Matrix.a == 0) ||
- (FXSYS_fabs(m_Matrix.c) >= 0.5f || m_Matrix.d == 0) ) {
- if (FXSYS_fabs(m_Matrix.a) < FXSYS_fabs(m_Matrix.b) / 20 && FXSYS_fabs(m_Matrix.d) < FXSYS_fabs(m_Matrix.c) / 20 &&
- FXSYS_fabs(m_Matrix.a) < 0.5f && FXSYS_fabs(m_Matrix.d) < 0.5f) {
- int dest_width = image_rect.Width();
- int dest_height = image_rect.Height();
- FX_RECT bitmap_clip = m_ClipBox;
- bitmap_clip.Offset(-image_rect.left, -image_rect.top);
- bitmap_clip = _FXDIB_SwapClipBox(bitmap_clip, dest_width, dest_height, m_Matrix.c > 0, m_Matrix.b < 0);
- m_Composer.Compose(pDevice, pClipRgn, bitmap_alpha, mask_color, m_ClipBox, TRUE,
- m_Matrix.c > 0, m_Matrix.b < 0, m_bRgbByteOrder, alpha_flag, pIccTransform, m_BlendType);
- if (!m_Stretcher.Start(&m_Composer, pSource, dest_height, dest_width, bitmap_clip, dib_flags)) {
- return FALSE;
- }
- m_Status = 1;
- return TRUE;
- }
- m_Status = 2;
- m_pTransformer = new CFX_ImageTransformer;
- m_pTransformer->Start(pSource, &m_Matrix, dib_flags, &m_ClipBox);
- return TRUE;
- }
- int dest_width = image_rect.Width();
- if (m_Matrix.a < 0) {
- dest_width = -dest_width;
- }
- int dest_height = image_rect.Height();
- if (m_Matrix.d > 0) {
- dest_height = -dest_height;
- }
- if (dest_width == 0 || dest_height == 0) {
+CFX_ImageRenderer::~CFX_ImageRenderer() {
+ delete m_pTransformer;
+}
+extern FX_RECT _FXDIB_SwapClipBox(FX_RECT& clip,
+ int width,
+ int height,
+ FX_BOOL bFlipX,
+ FX_BOOL bFlipY);
+FX_BOOL CFX_ImageRenderer::Start(CFX_DIBitmap* pDevice,
+ const CFX_ClipRgn* pClipRgn,
+ const CFX_DIBSource* pSource,
+ int bitmap_alpha,
+ FX_DWORD mask_color,
+ const CFX_AffineMatrix* pMatrix,
+ FX_DWORD dib_flags,
+ FX_BOOL bRgbByteOrder,
+ int alpha_flag,
+ void* pIccTransform,
+ int blend_type) {
+ m_Matrix = *pMatrix;
+ CFX_FloatRect image_rect_f = m_Matrix.GetUnitRect();
+ FX_RECT image_rect = image_rect_f.GetOutterRect();
+ m_ClipBox = pClipRgn ? pClipRgn->GetBox() : FX_RECT(0, 0, pDevice->GetWidth(),
+ pDevice->GetHeight());
+ m_ClipBox.Intersect(image_rect);
+ if (m_ClipBox.IsEmpty()) {
+ return FALSE;
+ }
+ m_pDevice = pDevice;
+ m_pClipRgn = pClipRgn;
+ m_MaskColor = mask_color;
+ m_BitmapAlpha = bitmap_alpha;
+ m_Matrix = *pMatrix;
+ m_Flags = dib_flags;
+ m_AlphaFlag = alpha_flag;
+ m_pIccTransform = pIccTransform;
+ m_bRgbByteOrder = bRgbByteOrder;
+ m_BlendType = blend_type;
+ FX_BOOL ret = TRUE;
+ if ((FXSYS_fabs(m_Matrix.b) >= 0.5f || m_Matrix.a == 0) ||
+ (FXSYS_fabs(m_Matrix.c) >= 0.5f || m_Matrix.d == 0)) {
+ if (FXSYS_fabs(m_Matrix.a) < FXSYS_fabs(m_Matrix.b) / 20 &&
+ FXSYS_fabs(m_Matrix.d) < FXSYS_fabs(m_Matrix.c) / 20 &&
+ FXSYS_fabs(m_Matrix.a) < 0.5f && FXSYS_fabs(m_Matrix.d) < 0.5f) {
+ int dest_width = image_rect.Width();
+ int dest_height = image_rect.Height();
+ FX_RECT bitmap_clip = m_ClipBox;
+ bitmap_clip.Offset(-image_rect.left, -image_rect.top);
+ bitmap_clip = _FXDIB_SwapClipBox(bitmap_clip, dest_width, dest_height,
+ m_Matrix.c > 0, m_Matrix.b < 0);
+ m_Composer.Compose(pDevice, pClipRgn, bitmap_alpha, mask_color, m_ClipBox,
+ TRUE, m_Matrix.c > 0, m_Matrix.b < 0, m_bRgbByteOrder,
+ alpha_flag, pIccTransform, m_BlendType);
+ if (!m_Stretcher.Start(&m_Composer, pSource, dest_height, dest_width,
+ bitmap_clip, dib_flags)) {
return FALSE;
+ }
+ m_Status = 1;
+ return TRUE;
}
- FX_RECT bitmap_clip = m_ClipBox;
- bitmap_clip.Offset(-image_rect.left, -image_rect.top);
- m_Composer.Compose(pDevice, pClipRgn, bitmap_alpha, mask_color,
- m_ClipBox, FALSE, FALSE, FALSE, m_bRgbByteOrder, alpha_flag, pIccTransform, m_BlendType);
- m_Status = 1;
- ret = m_Stretcher.Start(&m_Composer, pSource, dest_width, dest_height, bitmap_clip, dib_flags);
- return ret;
+ m_Status = 2;
+ m_pTransformer = new CFX_ImageTransformer;
+ m_pTransformer->Start(pSource, &m_Matrix, dib_flags, &m_ClipBox);
+ return TRUE;
+ }
+ int dest_width = image_rect.Width();
+ if (m_Matrix.a < 0) {
+ dest_width = -dest_width;
+ }
+ int dest_height = image_rect.Height();
+ if (m_Matrix.d > 0) {
+ dest_height = -dest_height;
+ }
+ if (dest_width == 0 || dest_height == 0) {
+ return FALSE;
+ }
+ FX_RECT bitmap_clip = m_ClipBox;
+ bitmap_clip.Offset(-image_rect.left, -image_rect.top);
+ m_Composer.Compose(pDevice, pClipRgn, bitmap_alpha, mask_color, m_ClipBox,
+ FALSE, FALSE, FALSE, m_bRgbByteOrder, alpha_flag,
+ pIccTransform, m_BlendType);
+ m_Status = 1;
+ ret = m_Stretcher.Start(&m_Composer, pSource, dest_width, dest_height,
+ bitmap_clip, dib_flags);
+ return ret;
}
-FX_BOOL CFX_ImageRenderer::Continue(IFX_Pause* pPause)
-{
- if (m_Status == 1) {
- return m_Stretcher.Continue(pPause);
- }
- if (m_Status == 2) {
- if (m_pTransformer->Continue(pPause)) {
- return TRUE;
- }
- CFX_DIBitmap* pBitmap = m_pTransformer->m_Storer.Detach();
- if (pBitmap == NULL) {
- return FALSE;
- }
- if (pBitmap->GetBuffer() == NULL) {
- delete pBitmap;
- return FALSE;
- }
- if (pBitmap->IsAlphaMask()) {
- if (m_BitmapAlpha != 255) {
- if (m_AlphaFlag >> 8) {
- m_AlphaFlag = (((uint8_t)((m_AlphaFlag & 0xff) * m_BitmapAlpha / 255)) | ((m_AlphaFlag >> 8) << 8));
- } else {
- m_MaskColor = FXARGB_MUL_ALPHA(m_MaskColor, m_BitmapAlpha);
- }
- }
- m_pDevice->CompositeMask(m_pTransformer->m_ResultLeft, m_pTransformer->m_ResultTop,
- pBitmap->GetWidth(), pBitmap->GetHeight(), pBitmap, m_MaskColor,
- 0, 0, m_BlendType, m_pClipRgn, m_bRgbByteOrder, m_AlphaFlag, m_pIccTransform);
+FX_BOOL CFX_ImageRenderer::Continue(IFX_Pause* pPause) {
+ if (m_Status == 1) {
+ return m_Stretcher.Continue(pPause);
+ }
+ if (m_Status == 2) {
+ if (m_pTransformer->Continue(pPause)) {
+ return TRUE;
+ }
+ CFX_DIBitmap* pBitmap = m_pTransformer->m_Storer.Detach();
+ if (pBitmap == NULL) {
+ return FALSE;
+ }
+ if (pBitmap->GetBuffer() == NULL) {
+ delete pBitmap;
+ return FALSE;
+ }
+ if (pBitmap->IsAlphaMask()) {
+ if (m_BitmapAlpha != 255) {
+ if (m_AlphaFlag >> 8) {
+ m_AlphaFlag =
+ (((uint8_t)((m_AlphaFlag & 0xff) * m_BitmapAlpha / 255)) |
+ ((m_AlphaFlag >> 8) << 8));
} else {
- if (m_BitmapAlpha != 255) {
- pBitmap->MultiplyAlpha(m_BitmapAlpha);
- }
- m_pDevice->CompositeBitmap(m_pTransformer->m_ResultLeft, m_pTransformer->m_ResultTop,
- pBitmap->GetWidth(), pBitmap->GetHeight(), pBitmap, 0, 0, m_BlendType, m_pClipRgn, m_bRgbByteOrder, m_pIccTransform);
- }
- delete pBitmap;
- return FALSE;
- }
+ m_MaskColor = FXARGB_MUL_ALPHA(m_MaskColor, m_BitmapAlpha);
+ }
+ }
+ m_pDevice->CompositeMask(m_pTransformer->m_ResultLeft,
+ m_pTransformer->m_ResultTop, pBitmap->GetWidth(),
+ pBitmap->GetHeight(), pBitmap, m_MaskColor, 0, 0,
+ m_BlendType, m_pClipRgn, m_bRgbByteOrder,
+ m_AlphaFlag, m_pIccTransform);
+ } else {
+ if (m_BitmapAlpha != 255) {
+ pBitmap->MultiplyAlpha(m_BitmapAlpha);
+ }
+ m_pDevice->CompositeBitmap(
+ m_pTransformer->m_ResultLeft, m_pTransformer->m_ResultTop,
+ pBitmap->GetWidth(), pBitmap->GetHeight(), pBitmap, 0, 0, m_BlendType,
+ m_pClipRgn, m_bRgbByteOrder, m_pIccTransform);
+ }
+ delete pBitmap;
return FALSE;
+ }
+ return FALSE;
}
-CFX_BitmapStorer::CFX_BitmapStorer()
-{
- m_pBitmap = NULL;
+CFX_BitmapStorer::CFX_BitmapStorer() {
+ m_pBitmap = NULL;
}
-CFX_BitmapStorer::~CFX_BitmapStorer()
-{
- delete m_pBitmap;
+CFX_BitmapStorer::~CFX_BitmapStorer() {
+ delete m_pBitmap;
}
-CFX_DIBitmap* CFX_BitmapStorer::Detach()
-{
- CFX_DIBitmap* pBitmap = m_pBitmap;
- m_pBitmap = NULL;
- return pBitmap;
+CFX_DIBitmap* CFX_BitmapStorer::Detach() {
+ CFX_DIBitmap* pBitmap = m_pBitmap;
+ m_pBitmap = NULL;
+ return pBitmap;
}
-void CFX_BitmapStorer::Replace(CFX_DIBitmap* pBitmap)
-{
- delete m_pBitmap;
- m_pBitmap = pBitmap;
+void CFX_BitmapStorer::Replace(CFX_DIBitmap* pBitmap) {
+ delete m_pBitmap;
+ m_pBitmap = pBitmap;
}
-void CFX_BitmapStorer::ComposeScanline(int line, const uint8_t* scanline, const uint8_t* scan_extra_alpha)
-{
- uint8_t* dest_buf = (uint8_t*)m_pBitmap->GetScanline(line);
- uint8_t* dest_alpha_buf = m_pBitmap->m_pAlphaMask ?
- (uint8_t*)m_pBitmap->m_pAlphaMask->GetScanline(line) : NULL;
- if (dest_buf) {
- FXSYS_memcpy(dest_buf, scanline, m_pBitmap->GetPitch());
- }
- if (dest_alpha_buf) {
- FXSYS_memcpy(dest_alpha_buf, scan_extra_alpha, m_pBitmap->m_pAlphaMask->GetPitch());
- }
+void CFX_BitmapStorer::ComposeScanline(int line,
+ const uint8_t* scanline,
+ const uint8_t* scan_extra_alpha) {
+ uint8_t* dest_buf = (uint8_t*)m_pBitmap->GetScanline(line);
+ uint8_t* dest_alpha_buf =
+ m_pBitmap->m_pAlphaMask
+ ? (uint8_t*)m_pBitmap->m_pAlphaMask->GetScanline(line)
+ : NULL;
+ if (dest_buf) {
+ FXSYS_memcpy(dest_buf, scanline, m_pBitmap->GetPitch());
+ }
+ if (dest_alpha_buf) {
+ FXSYS_memcpy(dest_alpha_buf, scan_extra_alpha,
+ m_pBitmap->m_pAlphaMask->GetPitch());
+ }
}
-FX_BOOL CFX_BitmapStorer::SetInfo(int width, int height, FXDIB_Format src_format, FX_DWORD* pSrcPalette)
-{
- m_pBitmap = new CFX_DIBitmap;
- if (!m_pBitmap->Create(width, height, src_format)) {
- delete m_pBitmap;
- m_pBitmap = NULL;
- return FALSE;
- }
- if (pSrcPalette) {
- m_pBitmap->CopyPalette(pSrcPalette);
- }
- return TRUE;
+FX_BOOL CFX_BitmapStorer::SetInfo(int width,
+ int height,
+ FXDIB_Format src_format,
+ FX_DWORD* pSrcPalette) {
+ m_pBitmap = new CFX_DIBitmap;
+ if (!m_pBitmap->Create(width, height, src_format)) {
+ delete m_pBitmap;
+ m_pBitmap = NULL;
+ return FALSE;
+ }
+ if (pSrcPalette) {
+ m_pBitmap->CopyPalette(pSrcPalette);
+ }
+ return TRUE;
}
diff --git a/core/src/fxge/dib/fx_dib_transform.cpp b/core/src/fxge/dib/fx_dib_transform.cpp
index e34e715bf2..887964ba00 100644
--- a/core/src/fxge/dib/fx_dib_transform.cpp
+++ b/core/src/fxge/dib/fx_dib_transform.cpp
@@ -7,784 +7,932 @@
#include "../../../include/fxge/fx_dib.h"
#include "dib_int.h"
int SDP_Table[513] = {
- 256, 256, 256, 256, 256, 256, 256, 256, 256, 255, 255, 255, 255, 255, 255, 254, 254, 254, 254,
- 253, 253, 253, 252, 252, 252, 251, 251, 251, 250, 250, 249, 249, 249, 248, 248, 247, 247, 246,
- 246, 245, 244, 244, 243, 243, 242, 242, 241, 240, 240, 239, 238, 238, 237, 236, 236, 235, 234,
- 233, 233, 232, 231, 230, 230, 229, 228, 227, 226, 226, 225, 224, 223, 222, 221, 220, 219, 218,
- 218, 217, 216, 215, 214, 213, 212, 211, 210, 209, 208, 207, 206, 205, 204, 203, 202, 201, 200,
- 199, 198, 196, 195, 194, 193, 192, 191, 190, 189, 188, 186, 185, 184, 183, 182, 181, 179, 178,
- 177, 176, 175, 173, 172, 171, 170, 169, 167, 166, 165, 164, 162, 161, 160, 159, 157, 156, 155,
- 154, 152, 151, 150, 149, 147, 146, 145, 143, 142, 141, 140, 138, 137, 136, 134, 133, 132, 130,
- 129, 128, 126, 125, 124, 122, 121, 120, 119, 117, 116, 115, 113, 112, 111, 109, 108, 107, 105,
- 104, 103, 101, 100, 99, 97, 96, 95, 93, 92, 91, 89, 88, 87, 85, 84, 83, 81, 80, 79, 77, 76, 75,
- 73, 72, 71, 69, 68, 67, 66, 64, 63, 62, 60, 59, 58, 57, 55, 54, 53, 52, 50, 49, 48, 47, 45, 44,
- 43, 42, 40, 39, 38, 37, 36, 34, 33, 32, 31, 30, 28, 27, 26, 25, 24, 23, 21, 20, 19, 18, 17, 16,
- 15, 14, 13, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 0, -1, -2, -3, -4, -5, -6, -7, -7, -8, -9, -10,
- -11, -12, -12, -13, -14, -15, -15, -16, -17, -17, -18, -19, -19, -20, -21, -21, -22, -22, -23, -24,
- -24, -25, -25, -26, -26, -27, -27, -27, -28, -28, -29, -29, -30, -30, -30, -31, -31, -31, -32, -32,
- -32, -33, -33, -33, -33, -34, -34, -34, -34, -35, -35, -35, -35, -35, -36, -36, -36, -36, -36, -36,
- -36, -36, -36, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37,
- -37, -37, -37, -37, -36, -36, -36, -36, -36, -36, -36, -36, -36, -35, -35, -35, -35, -35, -35, -34,
- -34, -34, -34, -34, -33, -33, -33, -33, -33, -32, -32, -32, -32, -31, -31, -31, -31, -30, -30, -30,
- -30, -29, -29, -29, -29, -28, -28, -28, -27, -27, -27, -27, -26, -26, -26, -25, -25, -25, -24, -24,
- -24, -23, -23, -23, -22, -22, -22, -22, -21, -21, -21, -20, -20, -20, -19, -19, -19, -18, -18, -18,
- -17, -17, -17, -16, -16, -16, -15, -15, -15, -14, -14, -14, -13, -13, -13, -12, -12, -12, -11, -11,
- -11, -10, -10, -10, -9, -9, -9, -9, -8, -8, -8, -7, -7, -7, -7, -6, -6, -6, -6, -5, -5, -5, -5, -4,
- -4, -4, -4, -3, -3, -3, -3, -3, -2, -2, -2, -2, -2, -1, -1, -1, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 256, 256, 256, 256, 256, 256, 256, 256, 256, 255, 255, 255, 255, 255, 255,
+ 254, 254, 254, 254, 253, 253, 253, 252, 252, 252, 251, 251, 251, 250, 250,
+ 249, 249, 249, 248, 248, 247, 247, 246, 246, 245, 244, 244, 243, 243, 242,
+ 242, 241, 240, 240, 239, 238, 238, 237, 236, 236, 235, 234, 233, 233, 232,
+ 231, 230, 230, 229, 228, 227, 226, 226, 225, 224, 223, 222, 221, 220, 219,
+ 218, 218, 217, 216, 215, 214, 213, 212, 211, 210, 209, 208, 207, 206, 205,
+ 204, 203, 202, 201, 200, 199, 198, 196, 195, 194, 193, 192, 191, 190, 189,
+ 188, 186, 185, 184, 183, 182, 181, 179, 178, 177, 176, 175, 173, 172, 171,
+ 170, 169, 167, 166, 165, 164, 162, 161, 160, 159, 157, 156, 155, 154, 152,
+ 151, 150, 149, 147, 146, 145, 143, 142, 141, 140, 138, 137, 136, 134, 133,
+ 132, 130, 129, 128, 126, 125, 124, 122, 121, 120, 119, 117, 116, 115, 113,
+ 112, 111, 109, 108, 107, 105, 104, 103, 101, 100, 99, 97, 96, 95, 93,
+ 92, 91, 89, 88, 87, 85, 84, 83, 81, 80, 79, 77, 76, 75, 73,
+ 72, 71, 69, 68, 67, 66, 64, 63, 62, 60, 59, 58, 57, 55, 54,
+ 53, 52, 50, 49, 48, 47, 45, 44, 43, 42, 40, 39, 38, 37, 36,
+ 34, 33, 32, 31, 30, 28, 27, 26, 25, 24, 23, 21, 20, 19, 18,
+ 17, 16, 15, 14, 13, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2,
+ 1, 0, 0, -1, -2, -3, -4, -5, -6, -7, -7, -8, -9, -10, -11,
+ -12, -12, -13, -14, -15, -15, -16, -17, -17, -18, -19, -19, -20, -21, -21,
+ -22, -22, -23, -24, -24, -25, -25, -26, -26, -27, -27, -27, -28, -28, -29,
+ -29, -30, -30, -30, -31, -31, -31, -32, -32, -32, -33, -33, -33, -33, -34,
+ -34, -34, -34, -35, -35, -35, -35, -35, -36, -36, -36, -36, -36, -36, -36,
+ -36, -36, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37,
+ -37, -37, -37, -37, -37, -37, -37, -37, -36, -36, -36, -36, -36, -36, -36,
+ -36, -36, -35, -35, -35, -35, -35, -35, -34, -34, -34, -34, -34, -33, -33,
+ -33, -33, -33, -32, -32, -32, -32, -31, -31, -31, -31, -30, -30, -30, -30,
+ -29, -29, -29, -29, -28, -28, -28, -27, -27, -27, -27, -26, -26, -26, -25,
+ -25, -25, -24, -24, -24, -23, -23, -23, -22, -22, -22, -22, -21, -21, -21,
+ -20, -20, -20, -19, -19, -19, -18, -18, -18, -17, -17, -17, -16, -16, -16,
+ -15, -15, -15, -14, -14, -14, -13, -13, -13, -12, -12, -12, -11, -11, -11,
+ -10, -10, -10, -9, -9, -9, -9, -8, -8, -8, -7, -7, -7, -7, -6,
+ -6, -6, -6, -5, -5, -5, -5, -4, -4, -4, -4, -3, -3, -3, -3,
+ -3, -2, -2, -2, -2, -2, -1, -1, -1, -1, -1, -1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,
};
-class CFX_BilinearMatrix : public CPDF_FixedMatrix
-{
-public:
- CFX_BilinearMatrix(const CFX_AffineMatrix& src, int bits): CPDF_FixedMatrix(src, bits)
- {}
- inline void Transform(int x, int y, int& x1, int& y1, int&res_x, int&res_y)
- {
- x1 = a * x + c * y + e + base / 2;
- y1 = b * x + d * y + f + base / 2;
- res_x = x1 % base;
- res_y = y1 % base;
- if (res_x < 0 && res_x > -base) {
- res_x = base + res_x;
- }
- if (res_y < 0 && res_x > -base) {
- res_y = base + res_y;
- }
- x1 /= base;
- y1 /= base;
+class CFX_BilinearMatrix : public CPDF_FixedMatrix {
+ public:
+ CFX_BilinearMatrix(const CFX_AffineMatrix& src, int bits)
+ : CPDF_FixedMatrix(src, bits) {}
+ inline void Transform(int x,
+ int y,
+ int& x1,
+ int& y1,
+ int& res_x,
+ int& res_y) {
+ x1 = a * x + c * y + e + base / 2;
+ y1 = b * x + d * y + f + base / 2;
+ res_x = x1 % base;
+ res_y = y1 % base;
+ if (res_x < 0 && res_x > -base) {
+ res_x = base + res_x;
}
-};
-CFX_DIBitmap* CFX_DIBSource::SwapXY(FX_BOOL bXFlip, FX_BOOL bYFlip, const FX_RECT* pDestClip) const
-{
- FX_RECT dest_clip(0, 0, m_Height, m_Width);
- if (pDestClip) {
- dest_clip.Intersect(*pDestClip);
+ if (res_y < 0 && res_x > -base) {
+ res_y = base + res_y;
}
- if (dest_clip.IsEmpty()) {
- return NULL;
+ x1 /= base;
+ y1 /= base;
+ }
+};
+CFX_DIBitmap* CFX_DIBSource::SwapXY(FX_BOOL bXFlip,
+ FX_BOOL bYFlip,
+ const FX_RECT* pDestClip) const {
+ FX_RECT dest_clip(0, 0, m_Height, m_Width);
+ if (pDestClip) {
+ dest_clip.Intersect(*pDestClip);
+ }
+ if (dest_clip.IsEmpty()) {
+ return NULL;
+ }
+ CFX_DIBitmap* pTransBitmap = new CFX_DIBitmap;
+ int result_height = dest_clip.Height(), result_width = dest_clip.Width();
+ if (!pTransBitmap->Create(result_width, result_height, GetFormat())) {
+ delete pTransBitmap;
+ return NULL;
+ }
+ pTransBitmap->CopyPalette(m_pPalette);
+ int dest_pitch = pTransBitmap->GetPitch();
+ uint8_t* dest_buf = pTransBitmap->GetBuffer();
+ int row_start = bXFlip ? m_Height - dest_clip.right : dest_clip.left;
+ int row_end = bXFlip ? m_Height - dest_clip.left : dest_clip.right;
+ int col_start = bYFlip ? m_Width - dest_clip.bottom : dest_clip.top;
+ int col_end = bYFlip ? m_Width - dest_clip.top : dest_clip.bottom;
+ if (GetBPP() == 1) {
+ FXSYS_memset(dest_buf, 0xff, dest_pitch * result_height);
+ for (int row = row_start; row < row_end; row++) {
+ const uint8_t* src_scan = GetScanline(row);
+ int dest_col = (bXFlip ? dest_clip.right - (row - row_start) - 1 : row) -
+ dest_clip.left;
+ uint8_t* dest_scan = dest_buf;
+ if (bYFlip) {
+ dest_scan += (result_height - 1) * dest_pitch;
+ }
+ int dest_step = bYFlip ? -dest_pitch : dest_pitch;
+ for (int col = col_start; col < col_end; col++) {
+ if (!(src_scan[col / 8] & (1 << (7 - col % 8)))) {
+ dest_scan[dest_col / 8] &= ~(1 << (7 - dest_col % 8));
+ }
+ dest_scan += dest_step;
+ }
}
- CFX_DIBitmap* pTransBitmap = new CFX_DIBitmap;
- int result_height = dest_clip.Height(), result_width = dest_clip.Width();
- if (!pTransBitmap->Create(result_width, result_height, GetFormat())) {
- delete pTransBitmap;
- return NULL;
+ } else {
+ int nBytes = GetBPP() / 8;
+ int dest_step = bYFlip ? -dest_pitch : dest_pitch;
+ if (nBytes == 3) {
+ dest_step -= 2;
}
- pTransBitmap->CopyPalette(m_pPalette);
- int dest_pitch = pTransBitmap->GetPitch();
- uint8_t* dest_buf = pTransBitmap->GetBuffer();
- int row_start = bXFlip ? m_Height - dest_clip.right : dest_clip.left;
- int row_end = bXFlip ? m_Height - dest_clip.left : dest_clip.right;
- int col_start = bYFlip ? m_Width - dest_clip.bottom : dest_clip.top;
- int col_end = bYFlip ? m_Width - dest_clip.top : dest_clip.bottom;
- if (GetBPP() == 1) {
- FXSYS_memset(dest_buf, 0xff, dest_pitch * result_height);
- for (int row = row_start; row < row_end; row ++) {
- const uint8_t* src_scan = GetScanline(row);
- int dest_col = (bXFlip ? dest_clip.right - (row - row_start) - 1 : row) - dest_clip.left;
- uint8_t* dest_scan = dest_buf;
- if (bYFlip) {
- dest_scan += (result_height - 1) * dest_pitch;
- }
- int dest_step = bYFlip ? -dest_pitch : dest_pitch;
- for (int col = col_start; col < col_end; col ++) {
- if (!(src_scan[col / 8] & (1 << (7 - col % 8)))) {
- dest_scan[dest_col / 8] &= ~(1 << (7 - dest_col % 8));
- }
- dest_scan += dest_step;
- }
- }
- } else {
- int nBytes = GetBPP() / 8;
- int dest_step = bYFlip ? -dest_pitch : dest_pitch;
- if (nBytes == 3) {
- dest_step -= 2;
- }
- for (int row = row_start; row < row_end; row ++) {
- int dest_col = (bXFlip ? dest_clip.right - (row - row_start) - 1 : row) - dest_clip.left;
- uint8_t* dest_scan = dest_buf + dest_col * nBytes;
- if (bYFlip) {
- dest_scan += (result_height - 1) * dest_pitch;
- }
- if (nBytes == 4) {
- FX_DWORD* src_scan = (FX_DWORD*)GetScanline(row) + col_start;
- for (int col = col_start; col < col_end; col ++) {
- *(FX_DWORD*)dest_scan = *src_scan++;
- dest_scan += dest_step;
- }
- } else {
- const uint8_t* src_scan = GetScanline(row) + col_start * nBytes;
- if (nBytes == 1)
- for (int col = col_start; col < col_end; col ++) {
- *dest_scan = *src_scan++;
- dest_scan += dest_step;
- }
- else
- for (int col = col_start; col < col_end; col ++) {
- *dest_scan++ = *src_scan++;
- *dest_scan++ = *src_scan++;
- *dest_scan = *src_scan++;
- dest_scan += dest_step;
- }
- }
+ for (int row = row_start; row < row_end; row++) {
+ int dest_col = (bXFlip ? dest_clip.right - (row - row_start) - 1 : row) -
+ dest_clip.left;
+ uint8_t* dest_scan = dest_buf + dest_col * nBytes;
+ if (bYFlip) {
+ dest_scan += (result_height - 1) * dest_pitch;
+ }
+ if (nBytes == 4) {
+ FX_DWORD* src_scan = (FX_DWORD*)GetScanline(row) + col_start;
+ for (int col = col_start; col < col_end; col++) {
+ *(FX_DWORD*)dest_scan = *src_scan++;
+ dest_scan += dest_step;
}
+ } else {
+ const uint8_t* src_scan = GetScanline(row) + col_start * nBytes;
+ if (nBytes == 1)
+ for (int col = col_start; col < col_end; col++) {
+ *dest_scan = *src_scan++;
+ dest_scan += dest_step;
+ }
+ else
+ for (int col = col_start; col < col_end; col++) {
+ *dest_scan++ = *src_scan++;
+ *dest_scan++ = *src_scan++;
+ *dest_scan = *src_scan++;
+ dest_scan += dest_step;
+ }
+ }
}
- if (m_pAlphaMask) {
- dest_pitch = pTransBitmap->m_pAlphaMask->GetPitch();
- dest_buf = pTransBitmap->m_pAlphaMask->GetBuffer();
- int dest_step = bYFlip ? -dest_pitch : dest_pitch;
- for (int row = row_start; row < row_end; row ++) {
- int dest_col = (bXFlip ? dest_clip.right - (row - row_start) - 1 : row) - dest_clip.left;
- uint8_t* dest_scan = dest_buf + dest_col;
- if (bYFlip) {
- dest_scan += (result_height - 1) * dest_pitch;
- }
- const uint8_t* src_scan = m_pAlphaMask->GetScanline(row) + col_start;
- for (int col = col_start; col < col_end; col ++) {
- *dest_scan = *src_scan++;
- dest_scan += dest_step;
- }
- }
+ }
+ if (m_pAlphaMask) {
+ dest_pitch = pTransBitmap->m_pAlphaMask->GetPitch();
+ dest_buf = pTransBitmap->m_pAlphaMask->GetBuffer();
+ int dest_step = bYFlip ? -dest_pitch : dest_pitch;
+ for (int row = row_start; row < row_end; row++) {
+ int dest_col = (bXFlip ? dest_clip.right - (row - row_start) - 1 : row) -
+ dest_clip.left;
+ uint8_t* dest_scan = dest_buf + dest_col;
+ if (bYFlip) {
+ dest_scan += (result_height - 1) * dest_pitch;
+ }
+ const uint8_t* src_scan = m_pAlphaMask->GetScanline(row) + col_start;
+ for (int col = col_start; col < col_end; col++) {
+ *dest_scan = *src_scan++;
+ dest_scan += dest_step;
+ }
}
- return pTransBitmap;
+ }
+ return pTransBitmap;
}
#define FIX16_005 0.05f
-FX_RECT _FXDIB_SwapClipBox(FX_RECT& clip, int width, int height, FX_BOOL bFlipX, FX_BOOL bFlipY)
-{
- FX_RECT rect;
- if (bFlipY) {
- rect.left = height - clip.top;
- rect.right = height - clip.bottom;
- } else {
- rect.left = clip.top;
- rect.right = clip.bottom;
- }
- if (bFlipX) {
- rect.top = width - clip.left;
- rect.bottom = width - clip.right;
- } else {
- rect.top = clip.left;
- rect.bottom = clip.right;
- }
- rect.Normalize();
- return rect;
-}
-CFX_DIBitmap* CFX_DIBSource::TransformTo(const CFX_AffineMatrix* pDestMatrix, int& result_left, int& result_top,
- FX_DWORD flags, const FX_RECT* pDestClip) const
-{
- CFX_ImageTransformer transformer;
- transformer.Start(this, pDestMatrix, flags, pDestClip);
- transformer.Continue(NULL);
- result_left = transformer.m_ResultLeft;
- result_top = transformer.m_ResultTop;
- CFX_DIBitmap* pTransformed = transformer.m_Storer.Detach();
- return pTransformed;
+FX_RECT _FXDIB_SwapClipBox(FX_RECT& clip,
+ int width,
+ int height,
+ FX_BOOL bFlipX,
+ FX_BOOL bFlipY) {
+ FX_RECT rect;
+ if (bFlipY) {
+ rect.left = height - clip.top;
+ rect.right = height - clip.bottom;
+ } else {
+ rect.left = clip.top;
+ rect.right = clip.bottom;
+ }
+ if (bFlipX) {
+ rect.top = width - clip.left;
+ rect.bottom = width - clip.right;
+ } else {
+ rect.top = clip.left;
+ rect.bottom = clip.right;
+ }
+ rect.Normalize();
+ return rect;
}
-CFX_DIBitmap* CFX_DIBSource::StretchTo(int dest_width, int dest_height, FX_DWORD flags, const FX_RECT* pClip) const
-{
- FX_RECT clip_rect(0, 0, FXSYS_abs(dest_width), FXSYS_abs(dest_height));
- if (pClip) {
- clip_rect.Intersect(*pClip);
- }
- if (clip_rect.IsEmpty()) {
- return NULL;
- }
- if (dest_width == m_Width && dest_height == m_Height) {
- return Clone(&clip_rect);
- }
- CFX_ImageStretcher stretcher;
- CFX_BitmapStorer storer;
- if (stretcher.Start(&storer, this, dest_width, dest_height, clip_rect, flags)) {
- stretcher.Continue(NULL);
- }
- return storer.Detach();
+CFX_DIBitmap* CFX_DIBSource::TransformTo(const CFX_AffineMatrix* pDestMatrix,
+ int& result_left,
+ int& result_top,
+ FX_DWORD flags,
+ const FX_RECT* pDestClip) const {
+ CFX_ImageTransformer transformer;
+ transformer.Start(this, pDestMatrix, flags, pDestClip);
+ transformer.Continue(NULL);
+ result_left = transformer.m_ResultLeft;
+ result_top = transformer.m_ResultTop;
+ CFX_DIBitmap* pTransformed = transformer.m_Storer.Detach();
+ return pTransformed;
}
-CFX_ImageTransformer::CFX_ImageTransformer()
-{
- m_Status = 0;
- m_pMatrix = NULL;
+CFX_DIBitmap* CFX_DIBSource::StretchTo(int dest_width,
+ int dest_height,
+ FX_DWORD flags,
+ const FX_RECT* pClip) const {
+ FX_RECT clip_rect(0, 0, FXSYS_abs(dest_width), FXSYS_abs(dest_height));
+ if (pClip) {
+ clip_rect.Intersect(*pClip);
+ }
+ if (clip_rect.IsEmpty()) {
+ return NULL;
+ }
+ if (dest_width == m_Width && dest_height == m_Height) {
+ return Clone(&clip_rect);
+ }
+ CFX_ImageStretcher stretcher;
+ CFX_BitmapStorer storer;
+ if (stretcher.Start(&storer, this, dest_width, dest_height, clip_rect,
+ flags)) {
+ stretcher.Continue(NULL);
+ }
+ return storer.Detach();
}
-CFX_ImageTransformer::~CFX_ImageTransformer()
-{
+CFX_ImageTransformer::CFX_ImageTransformer() {
+ m_Status = 0;
+ m_pMatrix = NULL;
}
-FX_BOOL CFX_ImageTransformer::Start(const CFX_DIBSource* pSrc, const CFX_AffineMatrix* pDestMatrix, int flags, const FX_RECT* pDestClip)
-{
- m_pMatrix = (CFX_AffineMatrix*)pDestMatrix;
- CFX_FloatRect unit_rect = pDestMatrix->GetUnitRect();
- FX_RECT result_rect = unit_rect.GetClosestRect();
- FX_RECT result_clip = result_rect;
- if (pDestClip) {
- result_clip.Intersect(*pDestClip);
- }
- if (result_clip.IsEmpty()) {
- return FALSE;
- }
- m_ResultLeft = result_clip.left;
- m_ResultTop = result_clip.top;
- m_ResultWidth = result_clip.Width();
- m_ResultHeight = result_clip.Height();
- m_Flags = flags;
- if (FXSYS_fabs(pDestMatrix->a) < FXSYS_fabs(pDestMatrix->b) / 20 &&
- FXSYS_fabs(pDestMatrix->d) < FXSYS_fabs(pDestMatrix->c) / 20 &&
- FXSYS_fabs(pDestMatrix->a) < 0.5f && FXSYS_fabs(pDestMatrix->d) < 0.5f) {
- int dest_width = result_rect.Width();
- int dest_height = result_rect.Height();
- result_clip.Offset(-result_rect.left, -result_rect.top);
- result_clip = _FXDIB_SwapClipBox(result_clip, dest_width, dest_height, pDestMatrix->c > 0, pDestMatrix->b < 0);
- m_Stretcher.Start(&m_Storer, pSrc, dest_height, dest_width, result_clip, flags);
- m_Status = 1;
- return TRUE;
- }
- if (FXSYS_fabs(pDestMatrix->b) < FIX16_005 && FXSYS_fabs(pDestMatrix->c) < FIX16_005) {
- int dest_width = pDestMatrix->a > 0 ? (int)FXSYS_ceil(pDestMatrix->a) : (int)FXSYS_floor(pDestMatrix->a);
- int dest_height = pDestMatrix->d > 0 ? (int) - FXSYS_ceil(pDestMatrix->d) : (int) - FXSYS_floor(pDestMatrix->d);
- result_clip.Offset(-result_rect.left, -result_rect.top);
- m_Stretcher.Start(&m_Storer, pSrc, dest_width, dest_height, result_clip, flags);
- m_Status = 2;
- return TRUE;
- }
- int stretch_width = (int)FXSYS_ceil(FXSYS_sqrt2(pDestMatrix->a, pDestMatrix->b));
- int stretch_height = (int)FXSYS_ceil(FXSYS_sqrt2(pDestMatrix->c, pDestMatrix->d));
- CFX_AffineMatrix stretch2dest(1.0f, 0.0f, 0.0f, -1.0f, 0.0f, (FX_FLOAT)(stretch_height));
- stretch2dest.Concat(pDestMatrix->a / stretch_width, pDestMatrix->b / stretch_width,
- pDestMatrix->c / stretch_height, pDestMatrix->d / stretch_height, pDestMatrix->e, pDestMatrix->f);
- m_dest2stretch.SetReverse(stretch2dest);
- CFX_FloatRect clip_rect_f(result_clip);
- clip_rect_f.Transform(&m_dest2stretch);
- m_StretchClip = clip_rect_f.GetOutterRect();
- m_StretchClip.Intersect(0, 0, stretch_width, stretch_height);
- m_Stretcher.Start(&m_Storer, pSrc, stretch_width, stretch_height, m_StretchClip, flags);
- m_Status = 3;
+CFX_ImageTransformer::~CFX_ImageTransformer() {}
+FX_BOOL CFX_ImageTransformer::Start(const CFX_DIBSource* pSrc,
+ const CFX_AffineMatrix* pDestMatrix,
+ int flags,
+ const FX_RECT* pDestClip) {
+ m_pMatrix = (CFX_AffineMatrix*)pDestMatrix;
+ CFX_FloatRect unit_rect = pDestMatrix->GetUnitRect();
+ FX_RECT result_rect = unit_rect.GetClosestRect();
+ FX_RECT result_clip = result_rect;
+ if (pDestClip) {
+ result_clip.Intersect(*pDestClip);
+ }
+ if (result_clip.IsEmpty()) {
+ return FALSE;
+ }
+ m_ResultLeft = result_clip.left;
+ m_ResultTop = result_clip.top;
+ m_ResultWidth = result_clip.Width();
+ m_ResultHeight = result_clip.Height();
+ m_Flags = flags;
+ if (FXSYS_fabs(pDestMatrix->a) < FXSYS_fabs(pDestMatrix->b) / 20 &&
+ FXSYS_fabs(pDestMatrix->d) < FXSYS_fabs(pDestMatrix->c) / 20 &&
+ FXSYS_fabs(pDestMatrix->a) < 0.5f && FXSYS_fabs(pDestMatrix->d) < 0.5f) {
+ int dest_width = result_rect.Width();
+ int dest_height = result_rect.Height();
+ result_clip.Offset(-result_rect.left, -result_rect.top);
+ result_clip = _FXDIB_SwapClipBox(result_clip, dest_width, dest_height,
+ pDestMatrix->c > 0, pDestMatrix->b < 0);
+ m_Stretcher.Start(&m_Storer, pSrc, dest_height, dest_width, result_clip,
+ flags);
+ m_Status = 1;
return TRUE;
+ }
+ if (FXSYS_fabs(pDestMatrix->b) < FIX16_005 &&
+ FXSYS_fabs(pDestMatrix->c) < FIX16_005) {
+ int dest_width = pDestMatrix->a > 0 ? (int)FXSYS_ceil(pDestMatrix->a)
+ : (int)FXSYS_floor(pDestMatrix->a);
+ int dest_height = pDestMatrix->d > 0 ? (int)-FXSYS_ceil(pDestMatrix->d)
+ : (int)-FXSYS_floor(pDestMatrix->d);
+ result_clip.Offset(-result_rect.left, -result_rect.top);
+ m_Stretcher.Start(&m_Storer, pSrc, dest_width, dest_height, result_clip,
+ flags);
+ m_Status = 2;
+ return TRUE;
+ }
+ int stretch_width =
+ (int)FXSYS_ceil(FXSYS_sqrt2(pDestMatrix->a, pDestMatrix->b));
+ int stretch_height =
+ (int)FXSYS_ceil(FXSYS_sqrt2(pDestMatrix->c, pDestMatrix->d));
+ CFX_AffineMatrix stretch2dest(1.0f, 0.0f, 0.0f, -1.0f, 0.0f,
+ (FX_FLOAT)(stretch_height));
+ stretch2dest.Concat(
+ pDestMatrix->a / stretch_width, pDestMatrix->b / stretch_width,
+ pDestMatrix->c / stretch_height, pDestMatrix->d / stretch_height,
+ pDestMatrix->e, pDestMatrix->f);
+ m_dest2stretch.SetReverse(stretch2dest);
+ CFX_FloatRect clip_rect_f(result_clip);
+ clip_rect_f.Transform(&m_dest2stretch);
+ m_StretchClip = clip_rect_f.GetOutterRect();
+ m_StretchClip.Intersect(0, 0, stretch_width, stretch_height);
+ m_Stretcher.Start(&m_Storer, pSrc, stretch_width, stretch_height,
+ m_StretchClip, flags);
+ m_Status = 3;
+ return TRUE;
}
-uint8_t _bilinear_interpol(const uint8_t* buf, int row_offset_l, int row_offset_r,
- int src_col_l, int src_col_r, int res_x, int res_y,
- int bpp, int c_offset)
-{
- int i_resx = 255 - res_x;
- int col_bpp_l = src_col_l * bpp;
- int col_bpp_r = src_col_r * bpp;
- const uint8_t* buf_u = buf + row_offset_l + c_offset;
- const uint8_t* buf_d = buf + row_offset_r + c_offset;
- const uint8_t* src_pos0 = buf_u + col_bpp_l;
- const uint8_t* src_pos1 = buf_u + col_bpp_r;
- const uint8_t* src_pos2 = buf_d + col_bpp_l;
- const uint8_t* src_pos3 = buf_d + col_bpp_r;
- uint8_t r_pos_0 = (*src_pos0 * i_resx + *src_pos1 * res_x) >> 8;
- uint8_t r_pos_1 = (*src_pos2 * i_resx + *src_pos3 * res_x) >> 8;
- return (r_pos_0 * (255 - res_y) + r_pos_1 * res_y) >> 8;
-}
-uint8_t _bicubic_interpol(const uint8_t* buf, int pitch, int pos_pixel[], int u_w[], int v_w[], int res_x, int res_y,
- int bpp, int c_offset)
-{
- int s_result = 0;
- for (int i = 0; i < 4; i ++) {
- int a_result = 0;
- for (int j = 0; j < 4; j ++) {
- a_result += u_w[j] * (*(uint8_t*)(buf + pos_pixel[i + 4] * pitch + pos_pixel[j] * bpp + c_offset));
- }
- s_result += a_result * v_w[i];
- }
- s_result >>= 16;
- return (uint8_t)(s_result < 0 ? 0 : s_result > 255 ? 255 : s_result);
+uint8_t _bilinear_interpol(const uint8_t* buf,
+ int row_offset_l,
+ int row_offset_r,
+ int src_col_l,
+ int src_col_r,
+ int res_x,
+ int res_y,
+ int bpp,
+ int c_offset) {
+ int i_resx = 255 - res_x;
+ int col_bpp_l = src_col_l * bpp;
+ int col_bpp_r = src_col_r * bpp;
+ const uint8_t* buf_u = buf + row_offset_l + c_offset;
+ const uint8_t* buf_d = buf + row_offset_r + c_offset;
+ const uint8_t* src_pos0 = buf_u + col_bpp_l;
+ const uint8_t* src_pos1 = buf_u + col_bpp_r;
+ const uint8_t* src_pos2 = buf_d + col_bpp_l;
+ const uint8_t* src_pos3 = buf_d + col_bpp_r;
+ uint8_t r_pos_0 = (*src_pos0 * i_resx + *src_pos1 * res_x) >> 8;
+ uint8_t r_pos_1 = (*src_pos2 * i_resx + *src_pos3 * res_x) >> 8;
+ return (r_pos_0 * (255 - res_y) + r_pos_1 * res_y) >> 8;
}
-void _bicubic_get_pos_weight(int pos_pixel[], int u_w[], int v_w[], int src_col_l, int src_row_l,
- int res_x, int res_y, int stretch_width, int stretch_height)
-{
- pos_pixel[0] = src_col_l - 1;
- pos_pixel[1] = src_col_l;
- pos_pixel[2] = src_col_l + 1;
- pos_pixel[3] = src_col_l + 2;
- pos_pixel[4] = src_row_l - 1;
- pos_pixel[5] = src_row_l;
- pos_pixel[6] = src_row_l + 1;
- pos_pixel[7] = src_row_l + 2;
- for (int i = 0 ; i < 4; i ++) {
- if (pos_pixel[i] < 0) {
- pos_pixel[i] = 0;
- }
- if (pos_pixel[i] >= stretch_width) {
- pos_pixel[i] = stretch_width - 1;
- }
- if (pos_pixel[i + 4] < 0) {
- pos_pixel[i + 4] = 0;
- }
- if (pos_pixel[i + 4] >= stretch_height) {
- pos_pixel[i + 4] = stretch_height - 1;
- }
+uint8_t _bicubic_interpol(const uint8_t* buf,
+ int pitch,
+ int pos_pixel[],
+ int u_w[],
+ int v_w[],
+ int res_x,
+ int res_y,
+ int bpp,
+ int c_offset) {
+ int s_result = 0;
+ for (int i = 0; i < 4; i++) {
+ int a_result = 0;
+ for (int j = 0; j < 4; j++) {
+ a_result += u_w[j] * (*(uint8_t*)(buf + pos_pixel[i + 4] * pitch +
+ pos_pixel[j] * bpp + c_offset));
}
- u_w[0] = SDP_Table[256 + res_x];
- u_w[1] = SDP_Table[res_x];
- u_w[2] = SDP_Table[256 - res_x];
- u_w[3] = SDP_Table[512 - res_x];
- v_w[0] = SDP_Table[256 + res_y];
- v_w[1] = SDP_Table[res_y];
- v_w[2] = SDP_Table[256 - res_y];
- v_w[3] = SDP_Table[512 - res_y];
+ s_result += a_result * v_w[i];
+ }
+ s_result >>= 16;
+ return (uint8_t)(s_result < 0 ? 0 : s_result > 255 ? 255 : s_result);
}
-FXDIB_Format _GetTransformedFormat(const CFX_DIBSource* pDrc)
-{
- FXDIB_Format format = pDrc->GetFormat();
- if (pDrc->IsAlphaMask()) {
- format = FXDIB_8bppMask;
- } else if (format >= 1025) {
- format = FXDIB_Cmyka;
- } else if (format <= 32 || format == FXDIB_Argb) {
- format = FXDIB_Argb;
- } else {
- format = FXDIB_Rgba;
+void _bicubic_get_pos_weight(int pos_pixel[],
+ int u_w[],
+ int v_w[],
+ int src_col_l,
+ int src_row_l,
+ int res_x,
+ int res_y,
+ int stretch_width,
+ int stretch_height) {
+ pos_pixel[0] = src_col_l - 1;
+ pos_pixel[1] = src_col_l;
+ pos_pixel[2] = src_col_l + 1;
+ pos_pixel[3] = src_col_l + 2;
+ pos_pixel[4] = src_row_l - 1;
+ pos_pixel[5] = src_row_l;
+ pos_pixel[6] = src_row_l + 1;
+ pos_pixel[7] = src_row_l + 2;
+ for (int i = 0; i < 4; i++) {
+ if (pos_pixel[i] < 0) {
+ pos_pixel[i] = 0;
}
- return format;
-}
-FX_BOOL CFX_ImageTransformer::Continue(IFX_Pause* pPause)
-{
- if (m_Status == 1) {
- if (m_Stretcher.Continue(pPause)) {
- return TRUE;
- }
- if (m_Storer.GetBitmap()) {
- m_Storer.Replace(m_Storer.GetBitmap()->SwapXY(m_pMatrix->c > 0, m_pMatrix->b < 0));
- }
- return FALSE;
+ if (pos_pixel[i] >= stretch_width) {
+ pos_pixel[i] = stretch_width - 1;
}
- if (m_Status == 2) {
- return m_Stretcher.Continue(pPause);
+ if (pos_pixel[i + 4] < 0) {
+ pos_pixel[i + 4] = 0;
}
- if (m_Status != 3) {
- return FALSE;
+ if (pos_pixel[i + 4] >= stretch_height) {
+ pos_pixel[i + 4] = stretch_height - 1;
}
+ }
+ u_w[0] = SDP_Table[256 + res_x];
+ u_w[1] = SDP_Table[res_x];
+ u_w[2] = SDP_Table[256 - res_x];
+ u_w[3] = SDP_Table[512 - res_x];
+ v_w[0] = SDP_Table[256 + res_y];
+ v_w[1] = SDP_Table[res_y];
+ v_w[2] = SDP_Table[256 - res_y];
+ v_w[3] = SDP_Table[512 - res_y];
+}
+FXDIB_Format _GetTransformedFormat(const CFX_DIBSource* pDrc) {
+ FXDIB_Format format = pDrc->GetFormat();
+ if (pDrc->IsAlphaMask()) {
+ format = FXDIB_8bppMask;
+ } else if (format >= 1025) {
+ format = FXDIB_Cmyka;
+ } else if (format <= 32 || format == FXDIB_Argb) {
+ format = FXDIB_Argb;
+ } else {
+ format = FXDIB_Rgba;
+ }
+ return format;
+}
+FX_BOOL CFX_ImageTransformer::Continue(IFX_Pause* pPause) {
+ if (m_Status == 1) {
if (m_Stretcher.Continue(pPause)) {
- return TRUE;
- }
- int stretch_width = m_StretchClip.Width();
- int stretch_height = m_StretchClip.Height();
- if (m_Storer.GetBitmap() == NULL) {
- return FALSE;
- }
- const uint8_t* stretch_buf = m_Storer.GetBitmap()->GetBuffer();
- const uint8_t* stretch_buf_mask = NULL;
- if (m_Storer.GetBitmap()->m_pAlphaMask) {
- stretch_buf_mask = m_Storer.GetBitmap()->m_pAlphaMask->GetBuffer();
+ return TRUE;
}
- int stretch_pitch = m_Storer.GetBitmap()->GetPitch();
- CFX_DIBitmap* pTransformed = new CFX_DIBitmap;
- FXDIB_Format transformF = _GetTransformedFormat(m_Stretcher.m_pSource);
- if (!pTransformed->Create(m_ResultWidth, m_ResultHeight, transformF)) {
- delete pTransformed;
- return FALSE;
+ if (m_Storer.GetBitmap()) {
+ m_Storer.Replace(
+ m_Storer.GetBitmap()->SwapXY(m_pMatrix->c > 0, m_pMatrix->b < 0));
}
- pTransformed->Clear(0);
- if (pTransformed->m_pAlphaMask) {
- pTransformed->m_pAlphaMask->Clear(0);
+ return FALSE;
+ }
+ if (m_Status == 2) {
+ return m_Stretcher.Continue(pPause);
+ }
+ if (m_Status != 3) {
+ return FALSE;
+ }
+ if (m_Stretcher.Continue(pPause)) {
+ return TRUE;
+ }
+ int stretch_width = m_StretchClip.Width();
+ int stretch_height = m_StretchClip.Height();
+ if (m_Storer.GetBitmap() == NULL) {
+ return FALSE;
+ }
+ const uint8_t* stretch_buf = m_Storer.GetBitmap()->GetBuffer();
+ const uint8_t* stretch_buf_mask = NULL;
+ if (m_Storer.GetBitmap()->m_pAlphaMask) {
+ stretch_buf_mask = m_Storer.GetBitmap()->m_pAlphaMask->GetBuffer();
+ }
+ int stretch_pitch = m_Storer.GetBitmap()->GetPitch();
+ CFX_DIBitmap* pTransformed = new CFX_DIBitmap;
+ FXDIB_Format transformF = _GetTransformedFormat(m_Stretcher.m_pSource);
+ if (!pTransformed->Create(m_ResultWidth, m_ResultHeight, transformF)) {
+ delete pTransformed;
+ return FALSE;
+ }
+ pTransformed->Clear(0);
+ if (pTransformed->m_pAlphaMask) {
+ pTransformed->m_pAlphaMask->Clear(0);
+ }
+ CFX_AffineMatrix result2stretch(1.0f, 0.0f, 0.0f, 1.0f,
+ (FX_FLOAT)(m_ResultLeft),
+ (FX_FLOAT)(m_ResultTop));
+ result2stretch.Concat(m_dest2stretch);
+ result2stretch.TranslateI(-m_StretchClip.left, -m_StretchClip.top);
+ if (stretch_buf_mask == NULL && pTransformed->m_pAlphaMask) {
+ pTransformed->m_pAlphaMask->Clear(0xff000000);
+ } else if (pTransformed->m_pAlphaMask) {
+ int stretch_pitch_mask = m_Storer.GetBitmap()->m_pAlphaMask->GetPitch();
+ if (!(m_Flags & FXDIB_DOWNSAMPLE) && !(m_Flags & FXDIB_BICUBIC_INTERPOL)) {
+ CFX_BilinearMatrix result2stretch_fix(result2stretch, 8);
+ for (int row = 0; row < m_ResultHeight; row++) {
+ uint8_t* dest_pos_mask =
+ (uint8_t*)pTransformed->m_pAlphaMask->GetScanline(row);
+ for (int col = 0; col < m_ResultWidth; col++) {
+ int src_col_l, src_row_l, res_x, res_y;
+ result2stretch_fix.Transform(col, row, src_col_l, src_row_l, res_x,
+ res_y);
+ if (src_col_l >= 0 && src_col_l <= stretch_width && src_row_l >= 0 &&
+ src_row_l <= stretch_height) {
+ if (src_col_l == stretch_width) {
+ src_col_l--;
+ }
+ if (src_row_l == stretch_height) {
+ src_row_l--;
+ }
+ int src_col_r = src_col_l + 1;
+ int src_row_r = src_row_l + 1;
+ if (src_col_r == stretch_width) {
+ src_col_r--;
+ }
+ if (src_row_r == stretch_height) {
+ src_row_r--;
+ }
+ int row_offset_l = src_row_l * stretch_pitch_mask;
+ int row_offset_r = src_row_r * stretch_pitch_mask;
+ *dest_pos_mask =
+ _bilinear_interpol(stretch_buf_mask, row_offset_l, row_offset_r,
+ src_col_l, src_col_r, res_x, res_y, 1, 0);
+ }
+ dest_pos_mask++;
+ }
+ }
+ } else if (m_Flags & FXDIB_BICUBIC_INTERPOL) {
+ CFX_BilinearMatrix result2stretch_fix(result2stretch, 8);
+ for (int row = 0; row < m_ResultHeight; row++) {
+ uint8_t* dest_pos_mask =
+ (uint8_t*)pTransformed->m_pAlphaMask->GetScanline(row);
+ for (int col = 0; col < m_ResultWidth; col++) {
+ int src_col_l, src_row_l, res_x, res_y;
+ result2stretch_fix.Transform(col, row, src_col_l, src_row_l, res_x,
+ res_y);
+ if (src_col_l >= 0 && src_col_l <= stretch_width && src_row_l >= 0 &&
+ src_row_l <= stretch_height) {
+ int pos_pixel[8];
+ int u_w[4], v_w[4];
+ if (src_col_l == stretch_width) {
+ src_col_l--;
+ }
+ if (src_row_l == stretch_height) {
+ src_row_l--;
+ }
+ _bicubic_get_pos_weight(pos_pixel, u_w, v_w, src_col_l, src_row_l,
+ res_x, res_y, stretch_width,
+ stretch_height);
+ *dest_pos_mask =
+ _bicubic_interpol(stretch_buf_mask, stretch_pitch_mask,
+ pos_pixel, u_w, v_w, res_x, res_y, 1, 0);
+ }
+ dest_pos_mask++;
+ }
+ }
+ } else {
+ CPDF_FixedMatrix result2stretch_fix(result2stretch, 8);
+ for (int row = 0; row < m_ResultHeight; row++) {
+ uint8_t* dest_pos_mask =
+ (uint8_t*)pTransformed->m_pAlphaMask->GetScanline(row);
+ for (int col = 0; col < m_ResultWidth; col++) {
+ int src_col, src_row;
+ result2stretch_fix.Transform(col, row, src_col, src_row);
+ if (src_col >= 0 && src_col <= stretch_width && src_row >= 0 &&
+ src_row <= stretch_height) {
+ if (src_col == stretch_width) {
+ src_col--;
+ }
+ if (src_row == stretch_height) {
+ src_row--;
+ }
+ *dest_pos_mask =
+ stretch_buf_mask[src_row * stretch_pitch_mask + src_col];
+ }
+ dest_pos_mask++;
+ }
+ }
}
- CFX_AffineMatrix result2stretch(1.0f, 0.0f, 0.0f, 1.0f, (FX_FLOAT)(m_ResultLeft), (FX_FLOAT)(m_ResultTop));
- result2stretch.Concat(m_dest2stretch);
- result2stretch.TranslateI(-m_StretchClip.left, -m_StretchClip.top);
- if (stretch_buf_mask == NULL && pTransformed->m_pAlphaMask) {
- pTransformed->m_pAlphaMask->Clear(0xff000000);
- } else if (pTransformed->m_pAlphaMask) {
- int stretch_pitch_mask = m_Storer.GetBitmap()->m_pAlphaMask->GetPitch();
- if (!(m_Flags & FXDIB_DOWNSAMPLE) && !(m_Flags & FXDIB_BICUBIC_INTERPOL)) {
- CFX_BilinearMatrix result2stretch_fix(result2stretch, 8);
- for (int row = 0; row < m_ResultHeight; row ++) {
- uint8_t* dest_pos_mask = (uint8_t*)pTransformed->m_pAlphaMask->GetScanline(row);
- for (int col = 0; col < m_ResultWidth; col ++) {
- int src_col_l, src_row_l, res_x, res_y;
- result2stretch_fix.Transform(col, row, src_col_l, src_row_l, res_x, res_y);
- if (src_col_l >= 0 && src_col_l <= stretch_width && src_row_l >= 0 && src_row_l <= stretch_height) {
- if (src_col_l == stretch_width) {
- src_col_l--;
- }
- if (src_row_l == stretch_height) {
- src_row_l--;
- }
- int src_col_r = src_col_l + 1;
- int src_row_r = src_row_l + 1;
- if (src_col_r == stretch_width) {
- src_col_r--;
- }
- if (src_row_r == stretch_height) {
- src_row_r--;
- }
- int row_offset_l = src_row_l * stretch_pitch_mask;
- int row_offset_r = src_row_r * stretch_pitch_mask;
- *dest_pos_mask = _bilinear_interpol(stretch_buf_mask, row_offset_l, row_offset_r, src_col_l, src_col_r, res_x, res_y, 1, 0);
- }
- dest_pos_mask++;
- }
+ }
+ if (m_Storer.GetBitmap()->IsAlphaMask()) {
+ if (!(m_Flags & FXDIB_DOWNSAMPLE) && !(m_Flags & FXDIB_BICUBIC_INTERPOL)) {
+ CFX_BilinearMatrix result2stretch_fix(result2stretch, 8);
+ for (int row = 0; row < m_ResultHeight; row++) {
+ uint8_t* dest_scan = (uint8_t*)pTransformed->GetScanline(row);
+ for (int col = 0; col < m_ResultWidth; col++) {
+ int src_col_l, src_row_l, res_x, res_y;
+ result2stretch_fix.Transform(col, row, src_col_l, src_row_l, res_x,
+ res_y);
+ if (src_col_l >= 0 && src_col_l <= stretch_width && src_row_l >= 0 &&
+ src_row_l <= stretch_height) {
+ if (src_col_l == stretch_width) {
+ src_col_l--;
}
- } else if (m_Flags & FXDIB_BICUBIC_INTERPOL) {
- CFX_BilinearMatrix result2stretch_fix(result2stretch, 8);
- for (int row = 0; row < m_ResultHeight; row ++) {
- uint8_t* dest_pos_mask = (uint8_t*)pTransformed->m_pAlphaMask->GetScanline(row);
- for (int col = 0; col < m_ResultWidth; col ++) {
- int src_col_l, src_row_l, res_x, res_y;
- result2stretch_fix.Transform(col, row, src_col_l, src_row_l, res_x, res_y);
- if (src_col_l >= 0 && src_col_l <= stretch_width && src_row_l >= 0 && src_row_l <= stretch_height) {
- int pos_pixel[8];
- int u_w[4], v_w[4];
- if (src_col_l == stretch_width) {
- src_col_l--;
- }
- if (src_row_l == stretch_height) {
- src_row_l--;
- }
- _bicubic_get_pos_weight(pos_pixel, u_w, v_w, src_col_l, src_row_l, res_x, res_y, stretch_width, stretch_height);
- *dest_pos_mask = _bicubic_interpol(stretch_buf_mask, stretch_pitch_mask, pos_pixel, u_w, v_w, res_x, res_y, 1, 0);
- }
- dest_pos_mask++;
- }
+ if (src_row_l == stretch_height) {
+ src_row_l--;
}
- } else {
- CPDF_FixedMatrix result2stretch_fix(result2stretch, 8);
- for (int row = 0; row < m_ResultHeight; row ++) {
- uint8_t* dest_pos_mask = (uint8_t*)pTransformed->m_pAlphaMask->GetScanline(row);
- for (int col = 0; col < m_ResultWidth; col ++) {
- int src_col, src_row;
- result2stretch_fix.Transform(col, row, src_col, src_row);
- if (src_col >= 0 && src_col <= stretch_width && src_row >= 0 && src_row <= stretch_height) {
- if (src_col == stretch_width) {
- src_col --;
- }
- if (src_row == stretch_height) {
- src_row --;
- }
- *dest_pos_mask = stretch_buf_mask[src_row * stretch_pitch_mask + src_col];
- }
- dest_pos_mask++;
- }
+ int src_col_r = src_col_l + 1;
+ int src_row_r = src_row_l + 1;
+ if (src_col_r == stretch_width) {
+ src_col_r--;
+ }
+ if (src_row_r == stretch_height) {
+ src_row_r--;
+ }
+ int row_offset_l = src_row_l * stretch_pitch;
+ int row_offset_r = src_row_r * stretch_pitch;
+ *dest_scan =
+ _bilinear_interpol(stretch_buf, row_offset_l, row_offset_r,
+ src_col_l, src_col_r, res_x, res_y, 1, 0);
+ }
+ dest_scan++;
+ }
+ }
+ } else if (m_Flags & FXDIB_BICUBIC_INTERPOL) {
+ CFX_BilinearMatrix result2stretch_fix(result2stretch, 8);
+ for (int row = 0; row < m_ResultHeight; row++) {
+ uint8_t* dest_scan = (uint8_t*)pTransformed->GetScanline(row);
+ for (int col = 0; col < m_ResultWidth; col++) {
+ int src_col_l, src_row_l, res_x, res_y;
+ result2stretch_fix.Transform(col, row, src_col_l, src_row_l, res_x,
+ res_y);
+ if (src_col_l >= 0 && src_col_l <= stretch_width && src_row_l >= 0 &&
+ src_row_l <= stretch_height) {
+ int pos_pixel[8];
+ int u_w[4], v_w[4];
+ if (src_col_l == stretch_width) {
+ src_col_l--;
+ }
+ if (src_row_l == stretch_height) {
+ src_row_l--;
}
+ _bicubic_get_pos_weight(pos_pixel, u_w, v_w, src_col_l, src_row_l,
+ res_x, res_y, stretch_width,
+ stretch_height);
+ *dest_scan =
+ _bicubic_interpol(stretch_buf, stretch_pitch, pos_pixel, u_w,
+ v_w, res_x, res_y, 1, 0);
+ }
+ dest_scan++;
}
+ }
+ } else {
+ CPDF_FixedMatrix result2stretch_fix(result2stretch, 8);
+ for (int row = 0; row < m_ResultHeight; row++) {
+ uint8_t* dest_scan = (uint8_t*)pTransformed->GetScanline(row);
+ for (int col = 0; col < m_ResultWidth; col++) {
+ int src_col, src_row;
+ result2stretch_fix.Transform(col, row, src_col, src_row);
+ if (src_col >= 0 && src_col <= stretch_width && src_row >= 0 &&
+ src_row <= stretch_height) {
+ if (src_col == stretch_width) {
+ src_col--;
+ }
+ if (src_row == stretch_height) {
+ src_row--;
+ }
+ const uint8_t* src_pixel =
+ stretch_buf + stretch_pitch * src_row + src_col;
+ *dest_scan = *src_pixel;
+ }
+ dest_scan++;
+ }
+ }
}
- if (m_Storer.GetBitmap()->IsAlphaMask()) {
- if (!(m_Flags & FXDIB_DOWNSAMPLE) && !(m_Flags & FXDIB_BICUBIC_INTERPOL)) {
- CFX_BilinearMatrix result2stretch_fix(result2stretch, 8);
- for (int row = 0; row < m_ResultHeight; row ++) {
- uint8_t* dest_scan = (uint8_t*)pTransformed->GetScanline(row);
- for (int col = 0; col < m_ResultWidth; col ++) {
- int src_col_l, src_row_l, res_x, res_y;
- result2stretch_fix.Transform(col, row, src_col_l, src_row_l, res_x, res_y);
- if (src_col_l >= 0 && src_col_l <= stretch_width && src_row_l >= 0 && src_row_l <= stretch_height) {
- if (src_col_l == stretch_width) {
- src_col_l--;
- }
- if (src_row_l == stretch_height) {
- src_row_l--;
- }
- int src_col_r = src_col_l + 1;
- int src_row_r = src_row_l + 1;
- if (src_col_r == stretch_width) {
- src_col_r--;
- }
- if (src_row_r == stretch_height) {
- src_row_r--;
- }
- int row_offset_l = src_row_l * stretch_pitch;
- int row_offset_r = src_row_r * stretch_pitch;
- *dest_scan = _bilinear_interpol(stretch_buf, row_offset_l, row_offset_r, src_col_l, src_col_r, res_x, res_y, 1, 0);
- }
- dest_scan ++;
- }
+ } else {
+ int Bpp = m_Storer.GetBitmap()->GetBPP() / 8;
+ int destBpp = pTransformed->GetBPP() / 8;
+ if (Bpp == 1) {
+ FX_DWORD argb[256];
+ FX_ARGB* pPal = m_Storer.GetBitmap()->GetPalette();
+ if (pPal) {
+ for (int i = 0; i < 256; i++) {
+ argb[i] = pPal[i];
+ }
+ } else {
+ if (m_Storer.GetBitmap()->IsCmykImage())
+ for (int i = 0; i < 256; i++) {
+ argb[i] = 255 - i;
+ }
+ else
+ for (int i = 0; i < 256; i++) {
+ argb[i] = 0xff000000 | (i * 0x010101);
+ }
+ }
+ if (!(m_Flags & FXDIB_DOWNSAMPLE) &&
+ !(m_Flags & FXDIB_BICUBIC_INTERPOL)) {
+ CFX_BilinearMatrix result2stretch_fix(result2stretch, 8);
+ for (int row = 0; row < m_ResultHeight; row++) {
+ uint8_t* dest_pos = (uint8_t*)pTransformed->GetScanline(row);
+ for (int col = 0; col < m_ResultWidth; col++) {
+ int src_col_l, src_row_l, res_x, res_y;
+ result2stretch_fix.Transform(col, row, src_col_l, src_row_l, res_x,
+ res_y);
+ if (src_col_l >= 0 && src_col_l <= stretch_width &&
+ src_row_l >= 0 && src_row_l <= stretch_height) {
+ if (src_col_l == stretch_width) {
+ src_col_l--;
+ }
+ if (src_row_l == stretch_height) {
+ src_row_l--;
+ }
+ int src_col_r = src_col_l + 1;
+ int src_row_r = src_row_l + 1;
+ if (src_col_r == stretch_width) {
+ src_col_r--;
+ }
+ if (src_row_r == stretch_height) {
+ src_row_r--;
+ }
+ int row_offset_l = src_row_l * stretch_pitch;
+ int row_offset_r = src_row_r * stretch_pitch;
+ FX_DWORD r_bgra_cmyk = argb[_bilinear_interpol(
+ stretch_buf, row_offset_l, row_offset_r, src_col_l, src_col_r,
+ res_x, res_y, 1, 0)];
+ if (transformF == FXDIB_Rgba) {
+ dest_pos[0] = (uint8_t)(r_bgra_cmyk >> 24);
+ dest_pos[1] = (uint8_t)(r_bgra_cmyk >> 16);
+ dest_pos[2] = (uint8_t)(r_bgra_cmyk >> 8);
+ } else {
+ *(FX_DWORD*)dest_pos = r_bgra_cmyk;
+ }
}
- } else if (m_Flags & FXDIB_BICUBIC_INTERPOL) {
- CFX_BilinearMatrix result2stretch_fix(result2stretch, 8);
- for (int row = 0; row < m_ResultHeight; row ++) {
- uint8_t* dest_scan = (uint8_t*)pTransformed->GetScanline(row);
- for (int col = 0; col < m_ResultWidth; col ++) {
- int src_col_l, src_row_l, res_x, res_y;
- result2stretch_fix.Transform(col, row, src_col_l, src_row_l, res_x, res_y);
- if (src_col_l >= 0 && src_col_l <= stretch_width && src_row_l >= 0 && src_row_l <= stretch_height) {
- int pos_pixel[8];
- int u_w[4], v_w[4];
- if (src_col_l == stretch_width) {
- src_col_l--;
- }
- if (src_row_l == stretch_height) {
- src_row_l--;
- }
- _bicubic_get_pos_weight(pos_pixel, u_w, v_w, src_col_l, src_row_l, res_x, res_y, stretch_width, stretch_height);
- *dest_scan = _bicubic_interpol(stretch_buf, stretch_pitch, pos_pixel, u_w, v_w, res_x, res_y, 1, 0);
- }
- dest_scan ++;
- }
+ dest_pos += destBpp;
+ }
+ }
+ } else if (m_Flags & FXDIB_BICUBIC_INTERPOL) {
+ CFX_BilinearMatrix result2stretch_fix(result2stretch, 8);
+ for (int row = 0; row < m_ResultHeight; row++) {
+ uint8_t* dest_pos = (uint8_t*)pTransformed->GetScanline(row);
+ for (int col = 0; col < m_ResultWidth; col++) {
+ int src_col_l, src_row_l, res_x, res_y;
+ result2stretch_fix.Transform(col, row, src_col_l, src_row_l, res_x,
+ res_y);
+ if (src_col_l >= 0 && src_col_l <= stretch_width &&
+ src_row_l >= 0 && src_row_l <= stretch_height) {
+ int pos_pixel[8];
+ int u_w[4], v_w[4];
+ if (src_col_l == stretch_width) {
+ src_col_l--;
+ }
+ if (src_row_l == stretch_height) {
+ src_row_l--;
+ }
+ _bicubic_get_pos_weight(pos_pixel, u_w, v_w, src_col_l, src_row_l,
+ res_x, res_y, stretch_width,
+ stretch_height);
+ FX_DWORD r_bgra_cmyk =
+ argb[_bicubic_interpol(stretch_buf, stretch_pitch, pos_pixel,
+ u_w, v_w, res_x, res_y, 1, 0)];
+ if (transformF == FXDIB_Rgba) {
+ dest_pos[0] = (uint8_t)(r_bgra_cmyk >> 24);
+ dest_pos[1] = (uint8_t)(r_bgra_cmyk >> 16);
+ dest_pos[2] = (uint8_t)(r_bgra_cmyk >> 8);
+ } else {
+ *(FX_DWORD*)dest_pos = r_bgra_cmyk;
+ }
}
- } else {
- CPDF_FixedMatrix result2stretch_fix(result2stretch, 8);
- for (int row = 0; row < m_ResultHeight; row ++) {
- uint8_t* dest_scan = (uint8_t*)pTransformed->GetScanline(row);
- for (int col = 0; col < m_ResultWidth; col ++) {
- int src_col, src_row;
- result2stretch_fix.Transform(col, row, src_col, src_row);
- if (src_col >= 0 && src_col <= stretch_width && src_row >= 0 && src_row <= stretch_height) {
- if (src_col == stretch_width) {
- src_col --;
- }
- if (src_row == stretch_height) {
- src_row --;
- }
- const uint8_t* src_pixel = stretch_buf + stretch_pitch * src_row + src_col;
- *dest_scan = *src_pixel;
- }
- dest_scan ++;
- }
+ dest_pos += destBpp;
+ }
+ }
+ } else {
+ CPDF_FixedMatrix result2stretch_fix(result2stretch, 8);
+ for (int row = 0; row < m_ResultHeight; row++) {
+ uint8_t* dest_pos = (uint8_t*)pTransformed->GetScanline(row);
+ for (int col = 0; col < m_ResultWidth; col++) {
+ int src_col, src_row;
+ result2stretch_fix.Transform(col, row, src_col, src_row);
+ if (src_col >= 0 && src_col <= stretch_width && src_row >= 0 &&
+ src_row <= stretch_height) {
+ if (src_col == stretch_width) {
+ src_col--;
+ }
+ if (src_row == stretch_height) {
+ src_row--;
+ }
+ FX_DWORD r_bgra_cmyk =
+ argb[stretch_buf[src_row * stretch_pitch + src_col]];
+ if (transformF == FXDIB_Rgba) {
+ dest_pos[0] = (uint8_t)(r_bgra_cmyk >> 24);
+ dest_pos[1] = (uint8_t)(r_bgra_cmyk >> 16);
+ dest_pos[2] = (uint8_t)(r_bgra_cmyk >> 8);
+ } else {
+ *(FX_DWORD*)dest_pos = r_bgra_cmyk;
+ }
}
+ dest_pos += destBpp;
+ }
}
+ }
} else {
- int Bpp = m_Storer.GetBitmap()->GetBPP() / 8;
- int destBpp = pTransformed->GetBPP() / 8;
- if (Bpp == 1) {
- FX_DWORD argb[256];
- FX_ARGB* pPal = m_Storer.GetBitmap()->GetPalette();
- if (pPal) {
- for (int i = 0; i < 256; i ++) {
- argb[i] = pPal[i];
+ FX_BOOL bHasAlpha = m_Storer.GetBitmap()->HasAlpha();
+ int destBpp = pTransformed->GetBPP() / 8;
+ if (!(m_Flags & FXDIB_DOWNSAMPLE) &&
+ !(m_Flags & FXDIB_BICUBIC_INTERPOL)) {
+ CFX_BilinearMatrix result2stretch_fix(result2stretch, 8);
+ for (int row = 0; row < m_ResultHeight; row++) {
+ uint8_t* dest_pos = (uint8_t*)pTransformed->GetScanline(row);
+ for (int col = 0; col < m_ResultWidth; col++) {
+ int src_col_l, src_row_l, res_x, res_y, r_pos_k_r = 0;
+ result2stretch_fix.Transform(col, row, src_col_l, src_row_l, res_x,
+ res_y);
+ if (src_col_l >= 0 && src_col_l <= stretch_width &&
+ src_row_l >= 0 && src_row_l <= stretch_height) {
+ if (src_col_l == stretch_width) {
+ src_col_l--;
+ }
+ if (src_row_l == stretch_height) {
+ src_row_l--;
+ }
+ int src_col_r = src_col_l + 1;
+ int src_row_r = src_row_l + 1;
+ if (src_col_r == stretch_width) {
+ src_col_r--;
+ }
+ if (src_row_r == stretch_height) {
+ src_row_r--;
+ }
+ int row_offset_l = src_row_l * stretch_pitch;
+ int row_offset_r = src_row_r * stretch_pitch;
+ uint8_t r_pos_red_y_r = _bilinear_interpol(
+ stretch_buf, row_offset_l, row_offset_r, src_col_l, src_col_r,
+ res_x, res_y, Bpp, 2);
+ uint8_t r_pos_green_m_r = _bilinear_interpol(
+ stretch_buf, row_offset_l, row_offset_r, src_col_l, src_col_r,
+ res_x, res_y, Bpp, 1);
+ uint8_t r_pos_blue_c_r = _bilinear_interpol(
+ stretch_buf, row_offset_l, row_offset_r, src_col_l, src_col_r,
+ res_x, res_y, Bpp, 0);
+ if (bHasAlpha) {
+ if (transformF != FXDIB_Argb) {
+ if (transformF == FXDIB_Rgba) {
+ dest_pos[0] = r_pos_blue_c_r;
+ dest_pos[1] = r_pos_green_m_r;
+ dest_pos[2] = r_pos_red_y_r;
+ } else {
+ r_pos_k_r = _bilinear_interpol(
+ stretch_buf, row_offset_l, row_offset_r, src_col_l,
+ src_col_r, res_x, res_y, Bpp, 3);
+ *(FX_DWORD*)dest_pos =
+ FXCMYK_TODIB(CmykEncode(r_pos_blue_c_r, r_pos_green_m_r,
+ r_pos_red_y_r, r_pos_k_r));
+ }
+ } else {
+ uint8_t r_pos_a_r = _bilinear_interpol(
+ stretch_buf, row_offset_l, row_offset_r, src_col_l,
+ src_col_r, res_x, res_y, Bpp, 3);
+ *(FX_DWORD*)dest_pos = FXARGB_TODIB(
+ FXARGB_MAKE(r_pos_a_r, r_pos_red_y_r, r_pos_green_m_r,
+ r_pos_blue_c_r));
}
- } else {
- if (m_Storer.GetBitmap()->IsCmykImage())
- for (int i = 0; i < 256; i ++) {
- argb[i] = 255 - i;
- }
- else
- for (int i = 0; i < 256; i ++) {
- argb[i] = 0xff000000 | (i * 0x010101);
- }
- }
- if (!(m_Flags & FXDIB_DOWNSAMPLE) && !(m_Flags & FXDIB_BICUBIC_INTERPOL)) {
- CFX_BilinearMatrix result2stretch_fix(result2stretch, 8);
- for (int row = 0; row < m_ResultHeight; row ++) {
- uint8_t* dest_pos = (uint8_t*)pTransformed->GetScanline(row);
- for (int col = 0; col < m_ResultWidth; col ++) {
- int src_col_l, src_row_l, res_x, res_y;
- result2stretch_fix.Transform(col, row, src_col_l, src_row_l, res_x, res_y);
- if (src_col_l >= 0 && src_col_l <= stretch_width && src_row_l >= 0 && src_row_l <= stretch_height) {
- if (src_col_l == stretch_width) {
- src_col_l--;
- }
- if (src_row_l == stretch_height) {
- src_row_l--;
- }
- int src_col_r = src_col_l + 1;
- int src_row_r = src_row_l + 1;
- if (src_col_r == stretch_width) {
- src_col_r--;
- }
- if (src_row_r == stretch_height) {
- src_row_r--;
- }
- int row_offset_l = src_row_l * stretch_pitch;
- int row_offset_r = src_row_r * stretch_pitch;
- FX_DWORD r_bgra_cmyk = argb[_bilinear_interpol(stretch_buf, row_offset_l, row_offset_r, src_col_l, src_col_r, res_x, res_y, 1, 0)];
- if (transformF == FXDIB_Rgba) {
- dest_pos[0] = (uint8_t)(r_bgra_cmyk >> 24);
- dest_pos[1] = (uint8_t)(r_bgra_cmyk >> 16);
- dest_pos[2] = (uint8_t)(r_bgra_cmyk >> 8);
- } else {
- *(FX_DWORD*)dest_pos = r_bgra_cmyk;
- }
- }
- dest_pos += destBpp;
- }
+ } else {
+ r_pos_k_r = 0xff;
+ if (transformF == FXDIB_Cmyka) {
+ r_pos_k_r = _bilinear_interpol(
+ stretch_buf, row_offset_l, row_offset_r, src_col_l,
+ src_col_r, res_x, res_y, Bpp, 3);
+ *(FX_DWORD*)dest_pos =
+ FXCMYK_TODIB(CmykEncode(r_pos_blue_c_r, r_pos_green_m_r,
+ r_pos_red_y_r, r_pos_k_r));
+ } else {
+ *(FX_DWORD*)dest_pos = FXARGB_TODIB(
+ FXARGB_MAKE(r_pos_k_r, r_pos_red_y_r, r_pos_green_m_r,
+ r_pos_blue_c_r));
}
- } else if (m_Flags & FXDIB_BICUBIC_INTERPOL) {
- CFX_BilinearMatrix result2stretch_fix(result2stretch, 8);
- for (int row = 0; row < m_ResultHeight; row ++) {
- uint8_t* dest_pos = (uint8_t*)pTransformed->GetScanline(row);
- for (int col = 0; col < m_ResultWidth; col ++) {
- int src_col_l, src_row_l, res_x, res_y;
- result2stretch_fix.Transform(col, row, src_col_l, src_row_l, res_x, res_y);
- if (src_col_l >= 0 && src_col_l <= stretch_width && src_row_l >= 0 && src_row_l <= stretch_height) {
- int pos_pixel[8];
- int u_w[4], v_w[4];
- if (src_col_l == stretch_width) {
- src_col_l--;
- }
- if (src_row_l == stretch_height) {
- src_row_l--;
- }
- _bicubic_get_pos_weight(pos_pixel, u_w, v_w, src_col_l, src_row_l, res_x, res_y, stretch_width, stretch_height);
- FX_DWORD r_bgra_cmyk = argb[_bicubic_interpol(stretch_buf, stretch_pitch, pos_pixel, u_w, v_w, res_x, res_y, 1, 0)];
- if (transformF == FXDIB_Rgba) {
- dest_pos[0] = (uint8_t)(r_bgra_cmyk >> 24);
- dest_pos[1] = (uint8_t)(r_bgra_cmyk >> 16);
- dest_pos[2] = (uint8_t)(r_bgra_cmyk >> 8);
- } else {
- *(FX_DWORD*)dest_pos = r_bgra_cmyk;
- }
- }
- dest_pos += destBpp;
- }
+ }
+ }
+ dest_pos += destBpp;
+ }
+ }
+ } else if (m_Flags & FXDIB_BICUBIC_INTERPOL) {
+ CFX_BilinearMatrix result2stretch_fix(result2stretch, 8);
+ for (int row = 0; row < m_ResultHeight; row++) {
+ uint8_t* dest_pos = (uint8_t*)pTransformed->GetScanline(row);
+ for (int col = 0; col < m_ResultWidth; col++) {
+ int src_col_l, src_row_l, res_x, res_y, r_pos_k_r = 0;
+ result2stretch_fix.Transform(col, row, src_col_l, src_row_l, res_x,
+ res_y);
+ if (src_col_l >= 0 && src_col_l <= stretch_width &&
+ src_row_l >= 0 && src_row_l <= stretch_height) {
+ int pos_pixel[8];
+ int u_w[4], v_w[4];
+ if (src_col_l == stretch_width) {
+ src_col_l--;
+ }
+ if (src_row_l == stretch_height) {
+ src_row_l--;
+ }
+ _bicubic_get_pos_weight(pos_pixel, u_w, v_w, src_col_l, src_row_l,
+ res_x, res_y, stretch_width,
+ stretch_height);
+ uint8_t r_pos_red_y_r =
+ _bicubic_interpol(stretch_buf, stretch_pitch, pos_pixel, u_w,
+ v_w, res_x, res_y, Bpp, 2);
+ uint8_t r_pos_green_m_r =
+ _bicubic_interpol(stretch_buf, stretch_pitch, pos_pixel, u_w,
+ v_w, res_x, res_y, Bpp, 1);
+ uint8_t r_pos_blue_c_r =
+ _bicubic_interpol(stretch_buf, stretch_pitch, pos_pixel, u_w,
+ v_w, res_x, res_y, Bpp, 0);
+ if (bHasAlpha) {
+ if (transformF != FXDIB_Argb) {
+ if (transformF == FXDIB_Rgba) {
+ dest_pos[0] = r_pos_blue_c_r;
+ dest_pos[1] = r_pos_green_m_r;
+ dest_pos[2] = r_pos_red_y_r;
+ } else {
+ r_pos_k_r =
+ _bicubic_interpol(stretch_buf, stretch_pitch, pos_pixel,
+ u_w, v_w, res_x, res_y, Bpp, 3);
+ *(FX_DWORD*)dest_pos =
+ FXCMYK_TODIB(CmykEncode(r_pos_blue_c_r, r_pos_green_m_r,
+ r_pos_red_y_r, r_pos_k_r));
+ }
+ } else {
+ uint8_t r_pos_a_r =
+ _bicubic_interpol(stretch_buf, stretch_pitch, pos_pixel,
+ u_w, v_w, res_x, res_y, Bpp, 3);
+ *(FX_DWORD*)dest_pos = FXARGB_TODIB(
+ FXARGB_MAKE(r_pos_a_r, r_pos_red_y_r, r_pos_green_m_r,
+ r_pos_blue_c_r));
}
- } else {
- CPDF_FixedMatrix result2stretch_fix(result2stretch, 8);
- for (int row = 0; row < m_ResultHeight; row ++) {
- uint8_t* dest_pos = (uint8_t*)pTransformed->GetScanline(row);
- for (int col = 0; col < m_ResultWidth; col ++) {
- int src_col, src_row;
- result2stretch_fix.Transform(col, row, src_col, src_row);
- if (src_col >= 0 && src_col <= stretch_width && src_row >= 0 && src_row <= stretch_height) {
- if (src_col == stretch_width) {
- src_col --;
- }
- if (src_row == stretch_height) {
- src_row --;
- }
- FX_DWORD r_bgra_cmyk = argb[stretch_buf[src_row * stretch_pitch + src_col]];
- if (transformF == FXDIB_Rgba) {
- dest_pos[0] = (uint8_t)(r_bgra_cmyk >> 24);
- dest_pos[1] = (uint8_t)(r_bgra_cmyk >> 16);
- dest_pos[2] = (uint8_t)(r_bgra_cmyk >> 8);
- } else {
- *(FX_DWORD*)dest_pos = r_bgra_cmyk;
- }
- }
- dest_pos += destBpp;
- }
+ } else {
+ r_pos_k_r = 0xff;
+ if (transformF == FXDIB_Cmyka) {
+ r_pos_k_r =
+ _bicubic_interpol(stretch_buf, stretch_pitch, pos_pixel,
+ u_w, v_w, res_x, res_y, Bpp, 3);
+ *(FX_DWORD*)dest_pos =
+ FXCMYK_TODIB(CmykEncode(r_pos_blue_c_r, r_pos_green_m_r,
+ r_pos_red_y_r, r_pos_k_r));
+ } else {
+ *(FX_DWORD*)dest_pos = FXARGB_TODIB(
+ FXARGB_MAKE(r_pos_k_r, r_pos_red_y_r, r_pos_green_m_r,
+ r_pos_blue_c_r));
}
+ }
}
- } else {
- FX_BOOL bHasAlpha = m_Storer.GetBitmap()->HasAlpha();
- int destBpp = pTransformed->GetBPP() / 8;
- if (!(m_Flags & FXDIB_DOWNSAMPLE) && !(m_Flags & FXDIB_BICUBIC_INTERPOL)) {
- CFX_BilinearMatrix result2stretch_fix(result2stretch, 8);
- for (int row = 0; row < m_ResultHeight; row ++) {
- uint8_t* dest_pos = (uint8_t*)pTransformed->GetScanline(row);
- for (int col = 0; col < m_ResultWidth; col ++) {
- int src_col_l, src_row_l, res_x, res_y, r_pos_k_r = 0;
- result2stretch_fix.Transform(col, row, src_col_l, src_row_l, res_x, res_y);
- if (src_col_l >= 0 && src_col_l <= stretch_width && src_row_l >= 0 && src_row_l <= stretch_height) {
- if (src_col_l == stretch_width) {
- src_col_l--;
- }
- if (src_row_l == stretch_height) {
- src_row_l--;
- }
- int src_col_r = src_col_l + 1;
- int src_row_r = src_row_l + 1;
- if (src_col_r == stretch_width) {
- src_col_r--;
- }
- if (src_row_r == stretch_height) {
- src_row_r--;
- }
- int row_offset_l = src_row_l * stretch_pitch;
- int row_offset_r = src_row_r * stretch_pitch;
- uint8_t r_pos_red_y_r = _bilinear_interpol(stretch_buf, row_offset_l, row_offset_r, src_col_l, src_col_r, res_x, res_y, Bpp, 2);
- uint8_t r_pos_green_m_r = _bilinear_interpol(stretch_buf, row_offset_l, row_offset_r, src_col_l, src_col_r, res_x, res_y, Bpp, 1);
- uint8_t r_pos_blue_c_r = _bilinear_interpol(stretch_buf, row_offset_l, row_offset_r, src_col_l, src_col_r, res_x, res_y, Bpp, 0);
- if (bHasAlpha) {
- if (transformF != FXDIB_Argb) {
- if (transformF == FXDIB_Rgba) {
- dest_pos[0] = r_pos_blue_c_r;
- dest_pos[1] = r_pos_green_m_r;
- dest_pos[2] = r_pos_red_y_r;
- } else {
- r_pos_k_r = _bilinear_interpol(stretch_buf, row_offset_l, row_offset_r, src_col_l, src_col_r, res_x, res_y, Bpp, 3);
- *(FX_DWORD*)dest_pos = FXCMYK_TODIB(CmykEncode(r_pos_blue_c_r, r_pos_green_m_r, r_pos_red_y_r, r_pos_k_r));
- }
- } else {
- uint8_t r_pos_a_r = _bilinear_interpol(stretch_buf, row_offset_l, row_offset_r, src_col_l, src_col_r, res_x, res_y, Bpp, 3);
- *(FX_DWORD*)dest_pos = FXARGB_TODIB(FXARGB_MAKE(r_pos_a_r, r_pos_red_y_r, r_pos_green_m_r, r_pos_blue_c_r));
- }
- } else {
- r_pos_k_r = 0xff;
- if (transformF == FXDIB_Cmyka) {
- r_pos_k_r = _bilinear_interpol(stretch_buf, row_offset_l, row_offset_r, src_col_l, src_col_r, res_x, res_y, Bpp, 3);
- *(FX_DWORD*)dest_pos = FXCMYK_TODIB(CmykEncode(r_pos_blue_c_r, r_pos_green_m_r, r_pos_red_y_r, r_pos_k_r));
- } else {
- *(FX_DWORD*)dest_pos = FXARGB_TODIB(FXARGB_MAKE(r_pos_k_r, r_pos_red_y_r, r_pos_green_m_r, r_pos_blue_c_r));
- }
- }
- }
- dest_pos += destBpp;
- }
- }
- } else if (m_Flags & FXDIB_BICUBIC_INTERPOL) {
- CFX_BilinearMatrix result2stretch_fix(result2stretch, 8);
- for (int row = 0; row < m_ResultHeight; row ++) {
- uint8_t* dest_pos = (uint8_t*)pTransformed->GetScanline(row);
- for (int col = 0; col < m_ResultWidth; col ++) {
- int src_col_l, src_row_l, res_x, res_y, r_pos_k_r = 0;
- result2stretch_fix.Transform(col, row, src_col_l, src_row_l, res_x, res_y);
- if (src_col_l >= 0 && src_col_l <= stretch_width && src_row_l >= 0 && src_row_l <= stretch_height) {
- int pos_pixel[8];
- int u_w[4], v_w[4];
- if (src_col_l == stretch_width) {
- src_col_l--;
- }
- if (src_row_l == stretch_height) {
- src_row_l--;
- }
- _bicubic_get_pos_weight(pos_pixel, u_w, v_w, src_col_l, src_row_l, res_x, res_y, stretch_width, stretch_height);
- uint8_t r_pos_red_y_r = _bicubic_interpol(stretch_buf, stretch_pitch, pos_pixel, u_w, v_w, res_x, res_y, Bpp, 2);
- uint8_t r_pos_green_m_r = _bicubic_interpol(stretch_buf, stretch_pitch, pos_pixel, u_w, v_w, res_x, res_y, Bpp, 1);
- uint8_t r_pos_blue_c_r = _bicubic_interpol(stretch_buf, stretch_pitch, pos_pixel, u_w, v_w, res_x, res_y, Bpp, 0);
- if (bHasAlpha) {
- if (transformF != FXDIB_Argb) {
- if (transformF == FXDIB_Rgba) {
- dest_pos[0] = r_pos_blue_c_r;
- dest_pos[1] = r_pos_green_m_r;
- dest_pos[2] = r_pos_red_y_r;
- } else {
- r_pos_k_r = _bicubic_interpol(stretch_buf, stretch_pitch, pos_pixel, u_w, v_w, res_x, res_y, Bpp, 3);
- *(FX_DWORD*)dest_pos = FXCMYK_TODIB(CmykEncode(r_pos_blue_c_r, r_pos_green_m_r, r_pos_red_y_r, r_pos_k_r));
- }
- } else {
- uint8_t r_pos_a_r = _bicubic_interpol(stretch_buf, stretch_pitch, pos_pixel, u_w, v_w, res_x, res_y, Bpp, 3);
- *(FX_DWORD*)dest_pos = FXARGB_TODIB(FXARGB_MAKE(r_pos_a_r, r_pos_red_y_r, r_pos_green_m_r, r_pos_blue_c_r));
- }
- } else {
- r_pos_k_r = 0xff;
- if (transformF == FXDIB_Cmyka) {
- r_pos_k_r = _bicubic_interpol(stretch_buf, stretch_pitch, pos_pixel, u_w, v_w, res_x, res_y, Bpp, 3);
- *(FX_DWORD*)dest_pos = FXCMYK_TODIB(CmykEncode(r_pos_blue_c_r, r_pos_green_m_r, r_pos_red_y_r, r_pos_k_r));
- } else {
- *(FX_DWORD*)dest_pos = FXARGB_TODIB(FXARGB_MAKE(r_pos_k_r, r_pos_red_y_r, r_pos_green_m_r, r_pos_blue_c_r));
- }
- }
- }
- dest_pos += destBpp;
- }
+ dest_pos += destBpp;
+ }
+ }
+ } else {
+ CPDF_FixedMatrix result2stretch_fix(result2stretch, 8);
+ for (int row = 0; row < m_ResultHeight; row++) {
+ uint8_t* dest_pos = (uint8_t*)pTransformed->GetScanline(row);
+ for (int col = 0; col < m_ResultWidth; col++) {
+ int src_col, src_row;
+ result2stretch_fix.Transform(col, row, src_col, src_row);
+ if (src_col >= 0 && src_col <= stretch_width && src_row >= 0 &&
+ src_row <= stretch_height) {
+ if (src_col == stretch_width) {
+ src_col--;
+ }
+ if (src_row == stretch_height) {
+ src_row--;
+ }
+ const uint8_t* src_pos =
+ stretch_buf + src_row * stretch_pitch + src_col * Bpp;
+ if (bHasAlpha) {
+ if (transformF != FXDIB_Argb) {
+ if (transformF == FXDIB_Rgba) {
+ dest_pos[0] = src_pos[0];
+ dest_pos[1] = src_pos[1];
+ dest_pos[2] = src_pos[2];
+ } else {
+ *(FX_DWORD*)dest_pos = FXCMYK_TODIB(CmykEncode(
+ src_pos[0], src_pos[1], src_pos[2], src_pos[3]));
+ }
+ } else {
+ *(FX_DWORD*)dest_pos = FXARGB_TODIB(FXARGB_MAKE(
+ src_pos[3], src_pos[2], src_pos[1], src_pos[0]));
}
- } else {
- CPDF_FixedMatrix result2stretch_fix(result2stretch, 8);
- for (int row = 0; row < m_ResultHeight; row ++) {
- uint8_t* dest_pos = (uint8_t*)pTransformed->GetScanline(row);
- for (int col = 0; col < m_ResultWidth; col ++) {
- int src_col, src_row;
- result2stretch_fix.Transform(col, row, src_col, src_row);
- if (src_col >= 0 && src_col <= stretch_width && src_row >= 0 && src_row <= stretch_height) {
- if (src_col == stretch_width) {
- src_col --;
- }
- if (src_row == stretch_height) {
- src_row --;
- }
- const uint8_t* src_pos = stretch_buf + src_row * stretch_pitch + src_col * Bpp;
- if (bHasAlpha) {
- if (transformF != FXDIB_Argb) {
- if (transformF == FXDIB_Rgba) {
- dest_pos[0] = src_pos[0];
- dest_pos[1] = src_pos[1];
- dest_pos[2] = src_pos[2];
- } else {
- *(FX_DWORD*)dest_pos = FXCMYK_TODIB(CmykEncode(src_pos[0], src_pos[1], src_pos[2], src_pos[3]));
- }
- } else {
- *(FX_DWORD*)dest_pos = FXARGB_TODIB(FXARGB_MAKE(src_pos[3], src_pos[2], src_pos[1], src_pos[0]));
- }
- } else {
- if (transformF == FXDIB_Cmyka) {
- *(FX_DWORD*)dest_pos = FXCMYK_TODIB(CmykEncode(src_pos[0], src_pos[1], src_pos[2], src_pos[3]));
- } else {
- *(FX_DWORD*)dest_pos = FXARGB_TODIB(FXARGB_MAKE(0xff, src_pos[2], src_pos[1], src_pos[0]));
- }
- }
- }
- dest_pos += destBpp;
- }
+ } else {
+ if (transformF == FXDIB_Cmyka) {
+ *(FX_DWORD*)dest_pos = FXCMYK_TODIB(CmykEncode(
+ src_pos[0], src_pos[1], src_pos[2], src_pos[3]));
+ } else {
+ *(FX_DWORD*)dest_pos = FXARGB_TODIB(
+ FXARGB_MAKE(0xff, src_pos[2], src_pos[1], src_pos[0]));
}
+ }
}
+ dest_pos += destBpp;
+ }
}
+ }
}
- m_Storer.Replace(pTransformed);
- return FALSE;
+ }
+ m_Storer.Replace(pTransformed);
+ return FALSE;
}
diff --git a/core/src/fxge/ge/fx_ge.cpp b/core/src/fxge/ge/fx_ge.cpp
index 6ba6cf5979..d37ed5c714 100644
--- a/core/src/fxge/ge/fx_ge.cpp
+++ b/core/src/fxge/ge/fx_ge.cpp
@@ -7,59 +7,51 @@
#include "../../../include/fxge/fx_ge.h"
#include "text_int.h"
static CFX_GEModule* g_pGEModule = NULL;
-CFX_GEModule::CFX_GEModule()
-{
- m_pFontCache = NULL;
- m_pFontMgr = NULL;
- m_FTLibrary = NULL;
- m_pCodecModule = NULL;
- m_pPlatformData = NULL;
-}
-CFX_GEModule::~CFX_GEModule()
-{
- delete m_pFontCache;
- m_pFontCache = NULL;
- delete m_pFontMgr;
- m_pFontMgr = NULL;
- DestroyPlatform();
-}
-CFX_GEModule* CFX_GEModule::Get()
-{
- return g_pGEModule;
-}
-void CFX_GEModule::Create()
-{
- g_pGEModule = new CFX_GEModule;
- g_pGEModule->m_pFontMgr = new CFX_FontMgr;
- g_pGEModule->InitPlatform();
- g_pGEModule->SetTextGamma(2.2f);
-}
-void CFX_GEModule::Use(CFX_GEModule* pModule)
-{
- g_pGEModule = pModule;
-}
-void CFX_GEModule::Destroy()
-{
- delete g_pGEModule;
- g_pGEModule = NULL;
-}
-CFX_FontCache* CFX_GEModule::GetFontCache()
-{
- if (m_pFontCache == NULL) {
- m_pFontCache = new CFX_FontCache();
- }
- return m_pFontCache;
-}
-void CFX_GEModule::SetTextGamma(FX_FLOAT gammaValue)
-{
- gammaValue /= 2.2f;
- int i = 0;
- while (i < 256) {
- m_GammaValue[i] = (uint8_t)(FXSYS_pow((FX_FLOAT)i / 255, gammaValue) * 255.0f + 0.5f);
- i++;
- }
-}
-const uint8_t* CFX_GEModule::GetTextGammaTable()
-{
- return m_GammaValue;
+CFX_GEModule::CFX_GEModule() {
+ m_pFontCache = NULL;
+ m_pFontMgr = NULL;
+ m_FTLibrary = NULL;
+ m_pCodecModule = NULL;
+ m_pPlatformData = NULL;
+}
+CFX_GEModule::~CFX_GEModule() {
+ delete m_pFontCache;
+ m_pFontCache = NULL;
+ delete m_pFontMgr;
+ m_pFontMgr = NULL;
+ DestroyPlatform();
+}
+CFX_GEModule* CFX_GEModule::Get() {
+ return g_pGEModule;
+}
+void CFX_GEModule::Create() {
+ g_pGEModule = new CFX_GEModule;
+ g_pGEModule->m_pFontMgr = new CFX_FontMgr;
+ g_pGEModule->InitPlatform();
+ g_pGEModule->SetTextGamma(2.2f);
+}
+void CFX_GEModule::Use(CFX_GEModule* pModule) {
+ g_pGEModule = pModule;
+}
+void CFX_GEModule::Destroy() {
+ delete g_pGEModule;
+ g_pGEModule = NULL;
+}
+CFX_FontCache* CFX_GEModule::GetFontCache() {
+ if (m_pFontCache == NULL) {
+ m_pFontCache = new CFX_FontCache();
+ }
+ return m_pFontCache;
+}
+void CFX_GEModule::SetTextGamma(FX_FLOAT gammaValue) {
+ gammaValue /= 2.2f;
+ int i = 0;
+ while (i < 256) {
+ m_GammaValue[i] =
+ (uint8_t)(FXSYS_pow((FX_FLOAT)i / 255, gammaValue) * 255.0f + 0.5f);
+ i++;
+ }
+}
+const uint8_t* CFX_GEModule::GetTextGammaTable() {
+ return m_GammaValue;
}
diff --git a/core/src/fxge/ge/fx_ge_device.cpp b/core/src/fxge/ge/fx_ge_device.cpp
index 0baa99cdc7..7ab399a3bd 100644
--- a/core/src/fxge/ge/fx_ge_device.cpp
+++ b/core/src/fxge/ge/fx_ge_device.cpp
@@ -5,398 +5,471 @@
// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
#include "../../../include/fxge/fx_ge.h"
-CFX_RenderDevice::CFX_RenderDevice()
-{
- m_pDeviceDriver = NULL;
- m_pBitmap = NULL;
+CFX_RenderDevice::CFX_RenderDevice() {
+ m_pDeviceDriver = NULL;
+ m_pBitmap = NULL;
}
-CFX_RenderDevice::~CFX_RenderDevice()
-{
- delete m_pDeviceDriver;
+CFX_RenderDevice::~CFX_RenderDevice() {
+ delete m_pDeviceDriver;
}
-void CFX_RenderDevice::SetDeviceDriver(IFX_RenderDeviceDriver* pDriver)
-{
- delete m_pDeviceDriver;
- m_pDeviceDriver = pDriver;
- InitDeviceInfo();
+void CFX_RenderDevice::SetDeviceDriver(IFX_RenderDeviceDriver* pDriver) {
+ delete m_pDeviceDriver;
+ m_pDeviceDriver = pDriver;
+ InitDeviceInfo();
}
-void CFX_RenderDevice::InitDeviceInfo()
-{
- ASSERT(m_pDeviceDriver != NULL);
- m_Width = m_pDeviceDriver->GetDeviceCaps(FXDC_PIXEL_WIDTH);
- m_Height = m_pDeviceDriver->GetDeviceCaps(FXDC_PIXEL_HEIGHT);
- m_bpp = m_pDeviceDriver->GetDeviceCaps(FXDC_BITS_PIXEL);
- m_RenderCaps = m_pDeviceDriver->GetDeviceCaps(FXDC_RENDER_CAPS);
- m_DeviceClass = m_pDeviceDriver->GetDeviceCaps(FXDC_DEVICE_CLASS);
- if (!m_pDeviceDriver->GetClipBox(&m_ClipBox)) {
- m_ClipBox.left = 0;
- m_ClipBox.top = 0;
- m_ClipBox.right = m_Width;
- m_ClipBox.bottom = m_Height;
- }
+void CFX_RenderDevice::InitDeviceInfo() {
+ ASSERT(m_pDeviceDriver != NULL);
+ m_Width = m_pDeviceDriver->GetDeviceCaps(FXDC_PIXEL_WIDTH);
+ m_Height = m_pDeviceDriver->GetDeviceCaps(FXDC_PIXEL_HEIGHT);
+ m_bpp = m_pDeviceDriver->GetDeviceCaps(FXDC_BITS_PIXEL);
+ m_RenderCaps = m_pDeviceDriver->GetDeviceCaps(FXDC_RENDER_CAPS);
+ m_DeviceClass = m_pDeviceDriver->GetDeviceCaps(FXDC_DEVICE_CLASS);
+ if (!m_pDeviceDriver->GetClipBox(&m_ClipBox)) {
+ m_ClipBox.left = 0;
+ m_ClipBox.top = 0;
+ m_ClipBox.right = m_Width;
+ m_ClipBox.bottom = m_Height;
+ }
}
-FX_BOOL CFX_RenderDevice::StartRendering()
-{
- return m_pDeviceDriver->StartRendering();
+FX_BOOL CFX_RenderDevice::StartRendering() {
+ return m_pDeviceDriver->StartRendering();
}
-void CFX_RenderDevice::EndRendering()
-{
- m_pDeviceDriver->EndRendering();
+void CFX_RenderDevice::EndRendering() {
+ m_pDeviceDriver->EndRendering();
}
-void CFX_RenderDevice::SaveState()
-{
- m_pDeviceDriver->SaveState();
+void CFX_RenderDevice::SaveState() {
+ m_pDeviceDriver->SaveState();
}
-void CFX_RenderDevice::RestoreState(FX_BOOL bKeepSaved)
-{
- m_pDeviceDriver->RestoreState(bKeepSaved);
- UpdateClipBox();
+void CFX_RenderDevice::RestoreState(FX_BOOL bKeepSaved) {
+ m_pDeviceDriver->RestoreState(bKeepSaved);
+ UpdateClipBox();
}
-int CFX_RenderDevice::GetDeviceCaps(int caps_id) const
-{
- return m_pDeviceDriver->GetDeviceCaps(caps_id);
+int CFX_RenderDevice::GetDeviceCaps(int caps_id) const {
+ return m_pDeviceDriver->GetDeviceCaps(caps_id);
}
-CFX_Matrix CFX_RenderDevice::GetCTM() const
-{
- return m_pDeviceDriver->GetCTM();
+CFX_Matrix CFX_RenderDevice::GetCTM() const {
+ return m_pDeviceDriver->GetCTM();
}
-FX_BOOL CFX_RenderDevice::CreateCompatibleBitmap(CFX_DIBitmap* pDIB, int width, int height) const
-{
- if (m_RenderCaps & FXRC_CMYK_OUTPUT) {
- return pDIB->Create(width, height, m_RenderCaps & FXRC_ALPHA_OUTPUT ? FXDIB_Cmyka : FXDIB_Cmyk);
- }
- if (m_RenderCaps & FXRC_BYTEMASK_OUTPUT) {
- return pDIB->Create(width, height, FXDIB_8bppMask);
- }
-#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
- return pDIB->Create(width, height, m_RenderCaps & FXRC_ALPHA_OUTPUT ? FXDIB_Argb : FXDIB_Rgb32);
+FX_BOOL CFX_RenderDevice::CreateCompatibleBitmap(CFX_DIBitmap* pDIB,
+ int width,
+ int height) const {
+ if (m_RenderCaps & FXRC_CMYK_OUTPUT) {
+ return pDIB->Create(width, height, m_RenderCaps & FXRC_ALPHA_OUTPUT
+ ? FXDIB_Cmyka
+ : FXDIB_Cmyk);
+ }
+ if (m_RenderCaps & FXRC_BYTEMASK_OUTPUT) {
+ return pDIB->Create(width, height, FXDIB_8bppMask);
+ }
+#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
+ return pDIB->Create(width, height, m_RenderCaps & FXRC_ALPHA_OUTPUT
+ ? FXDIB_Argb
+ : FXDIB_Rgb32);
#else
- return pDIB->Create(width, height, m_RenderCaps & FXRC_ALPHA_OUTPUT ? FXDIB_Argb : FXDIB_Rgb);
+ return pDIB->Create(
+ width, height, m_RenderCaps & FXRC_ALPHA_OUTPUT ? FXDIB_Argb : FXDIB_Rgb);
#endif
}
-FX_BOOL CFX_RenderDevice::SetClip_PathFill(const CFX_PathData* pPathData,
- const CFX_AffineMatrix* pObject2Device,
- int fill_mode
- )
-{
- if (!m_pDeviceDriver->SetClip_PathFill(pPathData, pObject2Device, fill_mode)) {
- return FALSE;
- }
- UpdateClipBox();
- return TRUE;
+FX_BOOL CFX_RenderDevice::SetClip_PathFill(
+ const CFX_PathData* pPathData,
+ const CFX_AffineMatrix* pObject2Device,
+ int fill_mode) {
+ if (!m_pDeviceDriver->SetClip_PathFill(pPathData, pObject2Device,
+ fill_mode)) {
+ return FALSE;
+ }
+ UpdateClipBox();
+ return TRUE;
}
-FX_BOOL CFX_RenderDevice::SetClip_PathStroke(const CFX_PathData* pPathData,
- const CFX_AffineMatrix* pObject2Device,
- const CFX_GraphStateData* pGraphState
- )
-{
- if (!m_pDeviceDriver->SetClip_PathStroke(pPathData, pObject2Device, pGraphState)) {
- return FALSE;
- }
- UpdateClipBox();
- return TRUE;
+FX_BOOL CFX_RenderDevice::SetClip_PathStroke(
+ const CFX_PathData* pPathData,
+ const CFX_AffineMatrix* pObject2Device,
+ const CFX_GraphStateData* pGraphState) {
+ if (!m_pDeviceDriver->SetClip_PathStroke(pPathData, pObject2Device,
+ pGraphState)) {
+ return FALSE;
+ }
+ UpdateClipBox();
+ return TRUE;
}
-FX_BOOL CFX_RenderDevice::SetClip_Rect(const FX_RECT* pRect)
-{
- CFX_PathData path;
- path.AppendRect((FX_FLOAT)(pRect->left), (FX_FLOAT)(pRect->bottom), (FX_FLOAT)(pRect->right), (FX_FLOAT)(pRect->top));
- if (!SetClip_PathFill(&path, NULL, FXFILL_WINDING)) {
- return FALSE;
- }
- UpdateClipBox();
- return TRUE;
+FX_BOOL CFX_RenderDevice::SetClip_Rect(const FX_RECT* pRect) {
+ CFX_PathData path;
+ path.AppendRect((FX_FLOAT)(pRect->left), (FX_FLOAT)(pRect->bottom),
+ (FX_FLOAT)(pRect->right), (FX_FLOAT)(pRect->top));
+ if (!SetClip_PathFill(&path, NULL, FXFILL_WINDING)) {
+ return FALSE;
+ }
+ UpdateClipBox();
+ return TRUE;
}
-void CFX_RenderDevice::UpdateClipBox()
-{
- if (m_pDeviceDriver->GetClipBox(&m_ClipBox)) {
- return;
- }
- m_ClipBox.left = 0;
- m_ClipBox.top = 0;
- m_ClipBox.right = m_Width;
- m_ClipBox.bottom = m_Height;
+void CFX_RenderDevice::UpdateClipBox() {
+ if (m_pDeviceDriver->GetClipBox(&m_ClipBox)) {
+ return;
+ }
+ m_ClipBox.left = 0;
+ m_ClipBox.top = 0;
+ m_ClipBox.right = m_Width;
+ m_ClipBox.bottom = m_Height;
}
FX_BOOL CFX_RenderDevice::DrawPath(const CFX_PathData* pPathData,
const CFX_AffineMatrix* pObject2Device,
const CFX_GraphStateData* pGraphState,
- FX_DWORD fill_color, FX_DWORD stroke_color, int fill_mode,
- int alpha_flag, void* pIccTransform, int blend_type)
-{
- uint8_t fill_alpha, stroke_alpha;
- if (FXGETFLAG_COLORTYPE(alpha_flag)) {
- fill_alpha = FXGETFLAG_ALPHA_FILL(alpha_flag);
- stroke_alpha = FXGETFLAG_ALPHA_STROKE(alpha_flag);
+ FX_DWORD fill_color,
+ FX_DWORD stroke_color,
+ int fill_mode,
+ int alpha_flag,
+ void* pIccTransform,
+ int blend_type) {
+ uint8_t fill_alpha, stroke_alpha;
+ if (FXGETFLAG_COLORTYPE(alpha_flag)) {
+ fill_alpha = FXGETFLAG_ALPHA_FILL(alpha_flag);
+ stroke_alpha = FXGETFLAG_ALPHA_STROKE(alpha_flag);
+ } else {
+ fill_alpha = FXARGB_A(fill_color);
+ stroke_alpha = FXARGB_A(stroke_color);
+ }
+ if ((fill_mode & 3) == 0) {
+ fill_alpha = 0;
+ }
+ if (pGraphState == NULL) {
+ stroke_alpha = 0;
+ }
+ if (stroke_alpha == 0 && pPathData->GetPointCount() == 2) {
+ FX_PATHPOINT* pPoints = pPathData->GetPoints();
+ FX_FLOAT x1, x2, y1, y2;
+ if (pObject2Device) {
+ pObject2Device->Transform(pPoints[0].m_PointX, pPoints[0].m_PointY, x1,
+ y1);
+ pObject2Device->Transform(pPoints[1].m_PointX, pPoints[1].m_PointY, x2,
+ y2);
} else {
- fill_alpha = FXARGB_A(fill_color);
- stroke_alpha = FXARGB_A(stroke_color);
- }
- if ((fill_mode & 3) == 0) {
- fill_alpha = 0;
- }
- if (pGraphState == NULL) {
- stroke_alpha = 0;
- }
- if (stroke_alpha == 0 && pPathData->GetPointCount() == 2) {
- FX_PATHPOINT* pPoints = pPathData->GetPoints();
- FX_FLOAT x1, x2, y1, y2;
- if (pObject2Device) {
- pObject2Device->Transform(pPoints[0].m_PointX, pPoints[0].m_PointY, x1, y1);
- pObject2Device->Transform(pPoints[1].m_PointX, pPoints[1].m_PointY, x2, y2);
- } else {
- x1 = pPoints[0].m_PointX;
- y1 = pPoints[0].m_PointY;
- x2 = pPoints[1].m_PointX;
- y2 = pPoints[1].m_PointY;
- }
- DrawCosmeticLine(x1, y1, x2, y2, fill_color, fill_mode, alpha_flag, pIccTransform, blend_type);
- return TRUE;
+ x1 = pPoints[0].m_PointX;
+ y1 = pPoints[0].m_PointY;
+ x2 = pPoints[1].m_PointX;
+ y2 = pPoints[1].m_PointY;
}
- if ((pPathData->GetPointCount() == 5 || pPathData->GetPointCount() == 4) && stroke_alpha == 0) {
- CFX_FloatRect rect_f;
- if (!(fill_mode & FXFILL_RECT_AA) && pPathData->IsRect(pObject2Device, &rect_f)) {
- FX_RECT rect_i = rect_f.GetOutterRect();
- int width = (int)FXSYS_ceil(rect_f.right - rect_f.left);
- if (width < 1) {
- width = 1;
- if (rect_i.left == rect_i.right) {
- rect_i.right ++;
- }
- }
- int height = (int)FXSYS_ceil(rect_f.top - rect_f.bottom);
- if (height < 1) {
- height = 1;
- if (rect_i.bottom == rect_i.top) {
- rect_i.bottom ++;
- }
- }
- if (rect_i.Width() >= width + 1) {
- if (rect_f.left - (FX_FLOAT)(rect_i.left) > (FX_FLOAT)(rect_i.right) - rect_f.right) {
- rect_i.left ++;
- } else {
- rect_i.right --;
- }
- }
- if (rect_i.Height() >= height + 1) {
- if (rect_f.top - (FX_FLOAT)(rect_i.top) > (FX_FLOAT)(rect_i.bottom) - rect_f.bottom) {
- rect_i.top ++;
- } else {
- rect_i.bottom --;
- }
- }
- if (FillRect(&rect_i, fill_color, alpha_flag, pIccTransform, blend_type)) {
- return TRUE;
- }
+ DrawCosmeticLine(x1, y1, x2, y2, fill_color, fill_mode, alpha_flag,
+ pIccTransform, blend_type);
+ return TRUE;
+ }
+ if ((pPathData->GetPointCount() == 5 || pPathData->GetPointCount() == 4) &&
+ stroke_alpha == 0) {
+ CFX_FloatRect rect_f;
+ if (!(fill_mode & FXFILL_RECT_AA) &&
+ pPathData->IsRect(pObject2Device, &rect_f)) {
+ FX_RECT rect_i = rect_f.GetOutterRect();
+ int width = (int)FXSYS_ceil(rect_f.right - rect_f.left);
+ if (width < 1) {
+ width = 1;
+ if (rect_i.left == rect_i.right) {
+ rect_i.right++;
}
- }
- if((fill_mode & 3) && stroke_alpha == 0 && !(fill_mode & FX_FILL_STROKE) && !(fill_mode & FX_FILL_TEXT_MODE)) {
- CFX_PathData newPath;
- FX_BOOL bThin = FALSE;
- if (pPathData->GetZeroAreaPath(newPath, (CFX_Matrix*)pObject2Device, bThin, m_pDeviceDriver->GetDriverType())) {
- CFX_GraphStateData graphState;
- graphState.m_LineWidth = 0.0f;
- FX_DWORD strokecolor = fill_color;
- if (bThin) {
- if (FXGETFLAG_COLORTYPE(alpha_flag)) {
- FXSETFLAG_ALPHA_STROKE(alpha_flag, fill_alpha >> 2);
- } else {
- strokecolor = (((fill_alpha >> 2) << 24) | (strokecolor & 0x00ffffff));
- }
- }
- CFX_AffineMatrix* pMatrix = NULL;
- if (pObject2Device && !pObject2Device->IsIdentity()) {
- pMatrix = (CFX_AffineMatrix*)pObject2Device;
- }
- int smooth_path = FX_ZEROAREA_FILL;
- if (fill_mode & FXFILL_NOPATHSMOOTH) {
- smooth_path |= FXFILL_NOPATHSMOOTH;
- }
- m_pDeviceDriver->DrawPath(&newPath, pMatrix, &graphState, 0, strokecolor, smooth_path, alpha_flag, pIccTransform, blend_type);
+ }
+ int height = (int)FXSYS_ceil(rect_f.top - rect_f.bottom);
+ if (height < 1) {
+ height = 1;
+ if (rect_i.bottom == rect_i.top) {
+ rect_i.bottom++;
}
- }
- if ((fill_mode & 3) && fill_alpha && stroke_alpha < 0xff && (fill_mode & FX_FILL_STROKE)) {
- if (!(m_RenderCaps & FXRC_GET_BITS)) {
- return FALSE;
- }
- CFX_FloatRect bbox;
- if (pGraphState) {
- bbox = pPathData->GetBoundingBox(pGraphState->m_LineWidth, pGraphState->m_MiterLimit);
+ }
+ if (rect_i.Width() >= width + 1) {
+ if (rect_f.left - (FX_FLOAT)(rect_i.left) >
+ (FX_FLOAT)(rect_i.right) - rect_f.right) {
+ rect_i.left++;
} else {
- bbox = pPathData->GetBoundingBox();
- }
- if (pObject2Device) {
- bbox.Transform(pObject2Device);
+ rect_i.right--;
}
- CFX_Matrix ctm = GetCTM();
- FX_FLOAT fScaleX = FXSYS_fabs(ctm.a);
- FX_FLOAT fScaleY = FXSYS_fabs(ctm.d);
- FX_RECT rect = bbox.GetOutterRect();
- CFX_DIBitmap bitmap, Backdrop;
- if (!CreateCompatibleBitmap(&bitmap, FXSYS_round(rect.Width() * fScaleX), FXSYS_round(rect.Height() * fScaleY))) {
- return FALSE;
- }
- if (bitmap.HasAlpha()) {
- bitmap.Clear(0);
- Backdrop.Copy(&bitmap);
+ }
+ if (rect_i.Height() >= height + 1) {
+ if (rect_f.top - (FX_FLOAT)(rect_i.top) >
+ (FX_FLOAT)(rect_i.bottom) - rect_f.bottom) {
+ rect_i.top++;
} else {
- if (!m_pDeviceDriver->GetDIBits(&bitmap, rect.left, rect.top, NULL)) {
- return FALSE;
- }
- Backdrop.Copy(&bitmap);
- }
- CFX_FxgeDevice bitmap_device;
- bitmap_device.Attach(&bitmap, 0, FALSE, &Backdrop, TRUE);
- CFX_AffineMatrix matrix;
- if (pObject2Device) {
- matrix = *pObject2Device;
+ rect_i.bottom--;
}
- matrix.TranslateI(-rect.left, -rect.top);
- matrix.Concat(fScaleX, 0, 0, fScaleY, 0, 0);
- if (!bitmap_device.GetDeviceDriver()->DrawPath(pPathData, &matrix, pGraphState, fill_color, stroke_color, fill_mode, alpha_flag, pIccTransform, blend_type)) {
- return FALSE;
- }
- FX_RECT src_rect(0, 0, FXSYS_round(rect.Width() * fScaleX), FXSYS_round(rect.Height() * fScaleY));
- return m_pDeviceDriver->SetDIBits(&bitmap, 0, &src_rect, rect.left, rect.top, FXDIB_BLEND_NORMAL);
- }
- return m_pDeviceDriver->DrawPath(pPathData, pObject2Device, pGraphState, fill_color, stroke_color, fill_mode, alpha_flag, pIccTransform, blend_type);
-}
-FX_BOOL CFX_RenderDevice::SetPixel(int x, int y, FX_DWORD color, int alpha_flag, void* pIccTransform)
-{
- if (m_pDeviceDriver->SetPixel(x, y, color, alpha_flag, pIccTransform)) {
+ }
+ if (FillRect(&rect_i, fill_color, alpha_flag, pIccTransform,
+ blend_type)) {
return TRUE;
+ }
}
- FX_RECT rect(x, y, x + 1, y + 1);
- return FillRect(&rect, color, alpha_flag, pIccTransform);
-}
-FX_BOOL CFX_RenderDevice::FillRect(const FX_RECT* pRect, FX_DWORD fill_color, int alpha_flag, void* pIccTransform, int blend_type)
-{
- if (m_pDeviceDriver->FillRect(pRect, fill_color, alpha_flag, pIccTransform, blend_type)) {
- return TRUE;
+ }
+ if ((fill_mode & 3) && stroke_alpha == 0 && !(fill_mode & FX_FILL_STROKE) &&
+ !(fill_mode & FX_FILL_TEXT_MODE)) {
+ CFX_PathData newPath;
+ FX_BOOL bThin = FALSE;
+ if (pPathData->GetZeroAreaPath(newPath, (CFX_Matrix*)pObject2Device, bThin,
+ m_pDeviceDriver->GetDriverType())) {
+ CFX_GraphStateData graphState;
+ graphState.m_LineWidth = 0.0f;
+ FX_DWORD strokecolor = fill_color;
+ if (bThin) {
+ if (FXGETFLAG_COLORTYPE(alpha_flag)) {
+ FXSETFLAG_ALPHA_STROKE(alpha_flag, fill_alpha >> 2);
+ } else {
+ strokecolor =
+ (((fill_alpha >> 2) << 24) | (strokecolor & 0x00ffffff));
+ }
+ }
+ CFX_AffineMatrix* pMatrix = NULL;
+ if (pObject2Device && !pObject2Device->IsIdentity()) {
+ pMatrix = (CFX_AffineMatrix*)pObject2Device;
+ }
+ int smooth_path = FX_ZEROAREA_FILL;
+ if (fill_mode & FXFILL_NOPATHSMOOTH) {
+ smooth_path |= FXFILL_NOPATHSMOOTH;
+ }
+ m_pDeviceDriver->DrawPath(&newPath, pMatrix, &graphState, 0, strokecolor,
+ smooth_path, alpha_flag, pIccTransform,
+ blend_type);
}
+ }
+ if ((fill_mode & 3) && fill_alpha && stroke_alpha < 0xff &&
+ (fill_mode & FX_FILL_STROKE)) {
if (!(m_RenderCaps & FXRC_GET_BITS)) {
- return FALSE;
+ return FALSE;
}
- CFX_DIBitmap bitmap;
- if (!CreateCompatibleBitmap(&bitmap, pRect->Width(), pRect->Height())) {
- return FALSE;
+ CFX_FloatRect bbox;
+ if (pGraphState) {
+ bbox = pPathData->GetBoundingBox(pGraphState->m_LineWidth,
+ pGraphState->m_MiterLimit);
+ } else {
+ bbox = pPathData->GetBoundingBox();
}
- if (!m_pDeviceDriver->GetDIBits(&bitmap, pRect->left, pRect->top)) {
- return FALSE;
+ if (pObject2Device) {
+ bbox.Transform(pObject2Device);
}
- if (!bitmap.CompositeRect(0, 0, pRect->Width(), pRect->Height(), fill_color, alpha_flag, pIccTransform)) {
+ CFX_Matrix ctm = GetCTM();
+ FX_FLOAT fScaleX = FXSYS_fabs(ctm.a);
+ FX_FLOAT fScaleY = FXSYS_fabs(ctm.d);
+ FX_RECT rect = bbox.GetOutterRect();
+ CFX_DIBitmap bitmap, Backdrop;
+ if (!CreateCompatibleBitmap(&bitmap, FXSYS_round(rect.Width() * fScaleX),
+ FXSYS_round(rect.Height() * fScaleY))) {
+ return FALSE;
+ }
+ if (bitmap.HasAlpha()) {
+ bitmap.Clear(0);
+ Backdrop.Copy(&bitmap);
+ } else {
+ if (!m_pDeviceDriver->GetDIBits(&bitmap, rect.left, rect.top, NULL)) {
return FALSE;
+ }
+ Backdrop.Copy(&bitmap);
+ }
+ CFX_FxgeDevice bitmap_device;
+ bitmap_device.Attach(&bitmap, 0, FALSE, &Backdrop, TRUE);
+ CFX_AffineMatrix matrix;
+ if (pObject2Device) {
+ matrix = *pObject2Device;
}
- FX_RECT src_rect(0, 0, pRect->Width(), pRect->Height());
- m_pDeviceDriver->SetDIBits(&bitmap, 0, &src_rect, pRect->left, pRect->top, FXDIB_BLEND_NORMAL);
+ matrix.TranslateI(-rect.left, -rect.top);
+ matrix.Concat(fScaleX, 0, 0, fScaleY, 0, 0);
+ if (!bitmap_device.GetDeviceDriver()->DrawPath(
+ pPathData, &matrix, pGraphState, fill_color, stroke_color,
+ fill_mode, alpha_flag, pIccTransform, blend_type)) {
+ return FALSE;
+ }
+ FX_RECT src_rect(0, 0, FXSYS_round(rect.Width() * fScaleX),
+ FXSYS_round(rect.Height() * fScaleY));
+ return m_pDeviceDriver->SetDIBits(&bitmap, 0, &src_rect, rect.left,
+ rect.top, FXDIB_BLEND_NORMAL);
+ }
+ return m_pDeviceDriver->DrawPath(pPathData, pObject2Device, pGraphState,
+ fill_color, stroke_color, fill_mode,
+ alpha_flag, pIccTransform, blend_type);
+}
+FX_BOOL CFX_RenderDevice::SetPixel(int x,
+ int y,
+ FX_DWORD color,
+ int alpha_flag,
+ void* pIccTransform) {
+ if (m_pDeviceDriver->SetPixel(x, y, color, alpha_flag, pIccTransform)) {
return TRUE;
+ }
+ FX_RECT rect(x, y, x + 1, y + 1);
+ return FillRect(&rect, color, alpha_flag, pIccTransform);
}
-FX_BOOL CFX_RenderDevice::DrawCosmeticLine(FX_FLOAT x1, FX_FLOAT y1, FX_FLOAT x2, FX_FLOAT y2, FX_DWORD color,
- int fill_mode, int alpha_flag, void* pIccTransform, int blend_type)
-{
- if (((m_RenderCaps & FXRC_ALPHA_PATH) &&
- (FXGETFLAG_COLORTYPE(alpha_flag) && FXGETFLAG_ALPHA_FILL(alpha_flag) == 0xff)) ||
- color >= 0xff000000)
- if (m_pDeviceDriver->DrawCosmeticLine(x1, y1, x2, y2, color, alpha_flag, pIccTransform, blend_type)) {
- return TRUE;
- }
- CFX_GraphStateData graph_state;
- CFX_PathData path;
- path.SetPointCount(2);
- path.SetPoint(0, x1, y1, FXPT_MOVETO);
- path.SetPoint(1, x2, y2, FXPT_LINETO);
- return m_pDeviceDriver->DrawPath(&path, NULL, &graph_state, 0, color, fill_mode, alpha_flag, pIccTransform, blend_type);
+FX_BOOL CFX_RenderDevice::FillRect(const FX_RECT* pRect,
+ FX_DWORD fill_color,
+ int alpha_flag,
+ void* pIccTransform,
+ int blend_type) {
+ if (m_pDeviceDriver->FillRect(pRect, fill_color, alpha_flag, pIccTransform,
+ blend_type)) {
+ return TRUE;
+ }
+ if (!(m_RenderCaps & FXRC_GET_BITS)) {
+ return FALSE;
+ }
+ CFX_DIBitmap bitmap;
+ if (!CreateCompatibleBitmap(&bitmap, pRect->Width(), pRect->Height())) {
+ return FALSE;
+ }
+ if (!m_pDeviceDriver->GetDIBits(&bitmap, pRect->left, pRect->top)) {
+ return FALSE;
+ }
+ if (!bitmap.CompositeRect(0, 0, pRect->Width(), pRect->Height(), fill_color,
+ alpha_flag, pIccTransform)) {
+ return FALSE;
+ }
+ FX_RECT src_rect(0, 0, pRect->Width(), pRect->Height());
+ m_pDeviceDriver->SetDIBits(&bitmap, 0, &src_rect, pRect->left, pRect->top,
+ FXDIB_BLEND_NORMAL);
+ return TRUE;
}
-FX_BOOL CFX_RenderDevice::GetDIBits(CFX_DIBitmap* pBitmap, int left, int top, void* pIccTransform)
-{
- if (!(m_RenderCaps & FXRC_GET_BITS)) {
- return FALSE;
+FX_BOOL CFX_RenderDevice::DrawCosmeticLine(FX_FLOAT x1,
+ FX_FLOAT y1,
+ FX_FLOAT x2,
+ FX_FLOAT y2,
+ FX_DWORD color,
+ int fill_mode,
+ int alpha_flag,
+ void* pIccTransform,
+ int blend_type) {
+ if (((m_RenderCaps & FXRC_ALPHA_PATH) &&
+ (FXGETFLAG_COLORTYPE(alpha_flag) &&
+ FXGETFLAG_ALPHA_FILL(alpha_flag) == 0xff)) ||
+ color >= 0xff000000)
+ if (m_pDeviceDriver->DrawCosmeticLine(x1, y1, x2, y2, color, alpha_flag,
+ pIccTransform, blend_type)) {
+ return TRUE;
}
- return m_pDeviceDriver->GetDIBits(pBitmap, left, top, pIccTransform);
+ CFX_GraphStateData graph_state;
+ CFX_PathData path;
+ path.SetPointCount(2);
+ path.SetPoint(0, x1, y1, FXPT_MOVETO);
+ path.SetPoint(1, x2, y2, FXPT_LINETO);
+ return m_pDeviceDriver->DrawPath(&path, NULL, &graph_state, 0, color,
+ fill_mode, alpha_flag, pIccTransform,
+ blend_type);
}
-CFX_DIBitmap* CFX_RenderDevice::GetBackDrop()
-{
- return m_pDeviceDriver->GetBackDrop();
+FX_BOOL CFX_RenderDevice::GetDIBits(CFX_DIBitmap* pBitmap,
+ int left,
+ int top,
+ void* pIccTransform) {
+ if (!(m_RenderCaps & FXRC_GET_BITS)) {
+ return FALSE;
+ }
+ return m_pDeviceDriver->GetDIBits(pBitmap, left, top, pIccTransform);
}
-FX_BOOL CFX_RenderDevice::SetDIBits(const CFX_DIBSource* pBitmap, int left, int top, int blend_mode,
- void* pIccTransform)
-{
- ASSERT(!pBitmap->IsAlphaMask());
- CFX_AffineMatrix ctm = GetCTM();
- FX_FLOAT fScaleX = FXSYS_fabs(ctm.a);
- FX_FLOAT fScaleY = FXSYS_fabs(ctm.d);
- FX_RECT dest_rect(left, top, FXSYS_round(left + pBitmap->GetWidth() / fScaleX), FXSYS_round(top + pBitmap->GetHeight() / fScaleY));
- dest_rect.Intersect(m_ClipBox);
- if (dest_rect.IsEmpty()) {
- return TRUE;
+CFX_DIBitmap* CFX_RenderDevice::GetBackDrop() {
+ return m_pDeviceDriver->GetBackDrop();
+}
+FX_BOOL CFX_RenderDevice::SetDIBits(const CFX_DIBSource* pBitmap,
+ int left,
+ int top,
+ int blend_mode,
+ void* pIccTransform) {
+ ASSERT(!pBitmap->IsAlphaMask());
+ CFX_AffineMatrix ctm = GetCTM();
+ FX_FLOAT fScaleX = FXSYS_fabs(ctm.a);
+ FX_FLOAT fScaleY = FXSYS_fabs(ctm.d);
+ FX_RECT dest_rect(left, top,
+ FXSYS_round(left + pBitmap->GetWidth() / fScaleX),
+ FXSYS_round(top + pBitmap->GetHeight() / fScaleY));
+ dest_rect.Intersect(m_ClipBox);
+ if (dest_rect.IsEmpty()) {
+ return TRUE;
+ }
+ FX_RECT src_rect(dest_rect.left - left, dest_rect.top - top,
+ dest_rect.left - left + dest_rect.Width(),
+ dest_rect.top - top + dest_rect.Height());
+ src_rect.left = FXSYS_round(src_rect.left * fScaleX);
+ src_rect.top = FXSYS_round(src_rect.top * fScaleY);
+ src_rect.right = FXSYS_round(src_rect.right * fScaleX);
+ src_rect.bottom = FXSYS_round(src_rect.bottom * fScaleY);
+ if ((blend_mode != FXDIB_BLEND_NORMAL && !(m_RenderCaps & FXRC_BLEND_MODE)) ||
+ (pBitmap->HasAlpha() && !(m_RenderCaps & FXRC_ALPHA_IMAGE))) {
+ if (!(m_RenderCaps & FXRC_GET_BITS)) {
+ return FALSE;
}
- FX_RECT src_rect(dest_rect.left - left, dest_rect.top - top,
- dest_rect.left - left + dest_rect.Width(), dest_rect.top - top + dest_rect.Height());
- src_rect.left = FXSYS_round(src_rect.left * fScaleX);
- src_rect.top = FXSYS_round(src_rect.top * fScaleY);
- src_rect.right = FXSYS_round(src_rect.right * fScaleX);
- src_rect.bottom = FXSYS_round(src_rect.bottom * fScaleY);
- if ((blend_mode != FXDIB_BLEND_NORMAL && !(m_RenderCaps & FXRC_BLEND_MODE)) ||
- (pBitmap->HasAlpha() && !(m_RenderCaps & FXRC_ALPHA_IMAGE))) {
- if (!(m_RenderCaps & FXRC_GET_BITS)) {
- return FALSE;
- }
- int bg_pixel_width = FXSYS_round(dest_rect.Width() * fScaleX);
- int bg_pixel_height = FXSYS_round(dest_rect.Height() * fScaleY);
- CFX_DIBitmap background;
- if (!background.Create(bg_pixel_width, bg_pixel_height,
- (m_RenderCaps & FXRC_CMYK_OUTPUT) ? FXDIB_Cmyk : FXDIB_Rgb32)) {
- return FALSE;
- }
- if (!m_pDeviceDriver->GetDIBits(&background, dest_rect.left, dest_rect.top)) {
- return FALSE;
- }
- if (!background.CompositeBitmap(0, 0, bg_pixel_width, bg_pixel_height,
- pBitmap, src_rect.left, src_rect.top,
- blend_mode, NULL, FALSE, pIccTransform)) {
- return FALSE;
- }
- FX_RECT src_rect(0, 0, bg_pixel_width, bg_pixel_height);
- return m_pDeviceDriver->SetDIBits(&background, 0, &src_rect, dest_rect.left, dest_rect.top, FXDIB_BLEND_NORMAL);
+ int bg_pixel_width = FXSYS_round(dest_rect.Width() * fScaleX);
+ int bg_pixel_height = FXSYS_round(dest_rect.Height() * fScaleY);
+ CFX_DIBitmap background;
+ if (!background.Create(
+ bg_pixel_width, bg_pixel_height,
+ (m_RenderCaps & FXRC_CMYK_OUTPUT) ? FXDIB_Cmyk : FXDIB_Rgb32)) {
+ return FALSE;
}
- return m_pDeviceDriver->SetDIBits(pBitmap, 0, &src_rect, dest_rect.left, dest_rect.top, blend_mode, 0, pIccTransform);
-}
-FX_BOOL CFX_RenderDevice::StretchDIBits(const CFX_DIBSource* pBitmap, int left, int top,
- int dest_width, int dest_height, FX_DWORD flags,
- void* pIccTransform, int blend_mode)
-{
- FX_RECT dest_rect(left, top, left + dest_width, top + dest_height);
- FX_RECT clip_box = m_ClipBox;
- clip_box.Intersect(dest_rect);
- if (clip_box.IsEmpty()) {
- return TRUE;
+ if (!m_pDeviceDriver->GetDIBits(&background, dest_rect.left,
+ dest_rect.top)) {
+ return FALSE;
+ }
+ if (!background.CompositeBitmap(0, 0, bg_pixel_width, bg_pixel_height,
+ pBitmap, src_rect.left, src_rect.top,
+ blend_mode, NULL, FALSE, pIccTransform)) {
+ return FALSE;
}
- return m_pDeviceDriver->StretchDIBits(pBitmap, 0, left, top, dest_width, dest_height, &clip_box, flags, 0, pIccTransform, blend_mode);
+ FX_RECT src_rect(0, 0, bg_pixel_width, bg_pixel_height);
+ return m_pDeviceDriver->SetDIBits(&background, 0, &src_rect, dest_rect.left,
+ dest_rect.top, FXDIB_BLEND_NORMAL);
+ }
+ return m_pDeviceDriver->SetDIBits(pBitmap, 0, &src_rect, dest_rect.left,
+ dest_rect.top, blend_mode, 0,
+ pIccTransform);
+}
+FX_BOOL CFX_RenderDevice::StretchDIBits(const CFX_DIBSource* pBitmap,
+ int left,
+ int top,
+ int dest_width,
+ int dest_height,
+ FX_DWORD flags,
+ void* pIccTransform,
+ int blend_mode) {
+ FX_RECT dest_rect(left, top, left + dest_width, top + dest_height);
+ FX_RECT clip_box = m_ClipBox;
+ clip_box.Intersect(dest_rect);
+ if (clip_box.IsEmpty()) {
+ return TRUE;
+ }
+ return m_pDeviceDriver->StretchDIBits(pBitmap, 0, left, top, dest_width,
+ dest_height, &clip_box, flags, 0,
+ pIccTransform, blend_mode);
}
-FX_BOOL CFX_RenderDevice::SetBitMask(const CFX_DIBSource* pBitmap, int left, int top, FX_DWORD argb,
- int alpha_flag, void* pIccTransform)
-{
- FX_RECT src_rect(0, 0, pBitmap->GetWidth(), pBitmap->GetHeight());
- return m_pDeviceDriver->SetDIBits(pBitmap, argb, &src_rect, left, top, FXDIB_BLEND_NORMAL, alpha_flag, pIccTransform);
+FX_BOOL CFX_RenderDevice::SetBitMask(const CFX_DIBSource* pBitmap,
+ int left,
+ int top,
+ FX_DWORD argb,
+ int alpha_flag,
+ void* pIccTransform) {
+ FX_RECT src_rect(0, 0, pBitmap->GetWidth(), pBitmap->GetHeight());
+ return m_pDeviceDriver->SetDIBits(pBitmap, argb, &src_rect, left, top,
+ FXDIB_BLEND_NORMAL, alpha_flag,
+ pIccTransform);
}
-FX_BOOL CFX_RenderDevice::StretchBitMask(const CFX_DIBSource* pBitmap, int left, int top,
- int dest_width, int dest_height, FX_DWORD argb, FX_DWORD flags,
- int alpha_flag, void* pIccTransform)
-{
- FX_RECT dest_rect(left, top, left + dest_width, top + dest_height);
- FX_RECT clip_box = m_ClipBox;
- clip_box.Intersect(dest_rect);
- return m_pDeviceDriver->StretchDIBits(pBitmap, argb, left, top, dest_width, dest_height, &clip_box, flags, alpha_flag, pIccTransform);
+FX_BOOL CFX_RenderDevice::StretchBitMask(const CFX_DIBSource* pBitmap,
+ int left,
+ int top,
+ int dest_width,
+ int dest_height,
+ FX_DWORD argb,
+ FX_DWORD flags,
+ int alpha_flag,
+ void* pIccTransform) {
+ FX_RECT dest_rect(left, top, left + dest_width, top + dest_height);
+ FX_RECT clip_box = m_ClipBox;
+ clip_box.Intersect(dest_rect);
+ return m_pDeviceDriver->StretchDIBits(pBitmap, argb, left, top, dest_width,
+ dest_height, &clip_box, flags,
+ alpha_flag, pIccTransform);
}
-FX_BOOL CFX_RenderDevice::StartDIBits(const CFX_DIBSource* pBitmap, int bitmap_alpha, FX_DWORD argb,
- const CFX_AffineMatrix* pMatrix, FX_DWORD flags, void*& handle,
- int alpha_flag, void* pIccTransform, int blend_mode)
-{
- return m_pDeviceDriver->StartDIBits(pBitmap, bitmap_alpha, argb, pMatrix, flags, handle, alpha_flag, pIccTransform, blend_mode);
+FX_BOOL CFX_RenderDevice::StartDIBits(const CFX_DIBSource* pBitmap,
+ int bitmap_alpha,
+ FX_DWORD argb,
+ const CFX_AffineMatrix* pMatrix,
+ FX_DWORD flags,
+ void*& handle,
+ int alpha_flag,
+ void* pIccTransform,
+ int blend_mode) {
+ return m_pDeviceDriver->StartDIBits(pBitmap, bitmap_alpha, argb, pMatrix,
+ flags, handle, alpha_flag, pIccTransform,
+ blend_mode);
}
-FX_BOOL CFX_RenderDevice::ContinueDIBits(void* handle, IFX_Pause* pPause)
-{
- return m_pDeviceDriver->ContinueDIBits(handle, pPause);
+FX_BOOL CFX_RenderDevice::ContinueDIBits(void* handle, IFX_Pause* pPause) {
+ return m_pDeviceDriver->ContinueDIBits(handle, pPause);
}
-void CFX_RenderDevice::CancelDIBits(void* handle)
-{
- m_pDeviceDriver->CancelDIBits(handle);
+void CFX_RenderDevice::CancelDIBits(void* handle) {
+ m_pDeviceDriver->CancelDIBits(handle);
}
diff --git a/core/src/fxge/ge/fx_ge_font.cpp b/core/src/fxge/ge/fx_ge_font.cpp
index 6a950bf20b..e701ee9492 100644
--- a/core/src/fxge/ge/fx_ge_font.cpp
+++ b/core/src/fxge/ge/fx_ge_font.cpp
@@ -7,426 +7,426 @@
#include "../../../include/fxge/fx_ge.h"
#include "../../../include/fxge/fx_freetype.h"
#include "text_int.h"
-#define EM_ADJUST(em, a) (em == 0?(a): (a)*1000/em)
-extern void _FPDFAPI_GetInternalFontData(int id1, const uint8_t*& data, FX_DWORD& size);
-CFX_Font::CFX_Font()
-{
- m_pSubstFont = NULL;
- m_Face = NULL;
- m_bEmbedded = FALSE;
- m_bVertical = FALSE;
- m_pFontData = NULL;
- m_pFontDataAllocation = NULL;
- m_dwSize = 0;
- m_pOwnedStream = NULL;
- m_pGsubData = NULL;
- m_pPlatformFont = NULL;
- m_pPlatformFontCollection = NULL;
- m_pDwFont = NULL;
- m_hHandle = NULL;
- m_bDwLoaded = FALSE;
+#define EM_ADJUST(em, a) (em == 0 ? (a) : (a)*1000 / em)
+extern void _FPDFAPI_GetInternalFontData(int id1,
+ const uint8_t*& data,
+ FX_DWORD& size);
+CFX_Font::CFX_Font() {
+ m_pSubstFont = NULL;
+ m_Face = NULL;
+ m_bEmbedded = FALSE;
+ m_bVertical = FALSE;
+ m_pFontData = NULL;
+ m_pFontDataAllocation = NULL;
+ m_dwSize = 0;
+ m_pOwnedStream = NULL;
+ m_pGsubData = NULL;
+ m_pPlatformFont = NULL;
+ m_pPlatformFontCollection = NULL;
+ m_pDwFont = NULL;
+ m_hHandle = NULL;
+ m_bDwLoaded = FALSE;
}
-CFX_Font::~CFX_Font()
-{
- delete m_pSubstFont;
- m_pSubstFont = NULL;
- if (m_pFontDataAllocation) {
- FX_Free(m_pFontDataAllocation);
- m_pFontDataAllocation = NULL;
- }
- if (m_Face) {
- if (FXFT_Get_Face_External_Stream(m_Face)) {
- FXFT_Clear_Face_External_Stream(m_Face);
- }
- if(m_bEmbedded) {
- DeleteFace();
- } else {
- CFX_GEModule::Get()->GetFontMgr()->ReleaseFace(m_Face);
- }
- }
- if (m_pOwnedStream) {
- FX_Free(m_pOwnedStream);
- m_pOwnedStream = NULL;
+CFX_Font::~CFX_Font() {
+ delete m_pSubstFont;
+ m_pSubstFont = NULL;
+ if (m_pFontDataAllocation) {
+ FX_Free(m_pFontDataAllocation);
+ m_pFontDataAllocation = NULL;
+ }
+ if (m_Face) {
+ if (FXFT_Get_Face_External_Stream(m_Face)) {
+ FXFT_Clear_Face_External_Stream(m_Face);
}
- if (m_pGsubData) {
- FX_Free(m_pGsubData);
- m_pGsubData = NULL;
+ if (m_bEmbedded) {
+ DeleteFace();
+ } else {
+ CFX_GEModule::Get()->GetFontMgr()->ReleaseFace(m_Face);
}
-#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
- ReleasePlatformResource();
+ }
+ if (m_pOwnedStream) {
+ FX_Free(m_pOwnedStream);
+ m_pOwnedStream = NULL;
+ }
+ if (m_pGsubData) {
+ FX_Free(m_pGsubData);
+ m_pGsubData = NULL;
+ }
+#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
+ ReleasePlatformResource();
#endif
}
-void CFX_Font::DeleteFace()
-{
- FXFT_Done_Face(m_Face);
- m_Face = NULL;
+void CFX_Font::DeleteFace() {
+ FXFT_Done_Face(m_Face);
+ m_Face = NULL;
}
-FX_BOOL CFX_Font::LoadSubst(const CFX_ByteString& face_name, FX_BOOL bTrueType, FX_DWORD flags,
- int weight, int italic_angle, int CharsetCP, FX_BOOL bVertical)
-{
- m_bEmbedded = FALSE;
- m_bVertical = bVertical;
- m_pSubstFont = new CFX_SubstFont;
- m_Face = CFX_GEModule::Get()->GetFontMgr()->FindSubstFont(face_name, bTrueType, flags, weight, italic_angle,
- CharsetCP, m_pSubstFont);
-#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
- if(m_pSubstFont->m_ExtHandle) {
- m_pPlatformFont = m_pSubstFont->m_ExtHandle;
- m_pSubstFont->m_ExtHandle = NULL;
- }
+FX_BOOL CFX_Font::LoadSubst(const CFX_ByteString& face_name,
+ FX_BOOL bTrueType,
+ FX_DWORD flags,
+ int weight,
+ int italic_angle,
+ int CharsetCP,
+ FX_BOOL bVertical) {
+ m_bEmbedded = FALSE;
+ m_bVertical = bVertical;
+ m_pSubstFont = new CFX_SubstFont;
+ m_Face = CFX_GEModule::Get()->GetFontMgr()->FindSubstFont(
+ face_name, bTrueType, flags, weight, italic_angle, CharsetCP,
+ m_pSubstFont);
+#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
+ if (m_pSubstFont->m_ExtHandle) {
+ m_pPlatformFont = m_pSubstFont->m_ExtHandle;
+ m_pSubstFont->m_ExtHandle = NULL;
+ }
#endif
- if (m_Face) {
- m_pFontData = FXFT_Get_Face_Stream_Base(m_Face);
- m_dwSize = FXFT_Get_Face_Stream_Size(m_Face);
- }
- return TRUE;
+ if (m_Face) {
+ m_pFontData = FXFT_Get_Face_Stream_Base(m_Face);
+ m_dwSize = FXFT_Get_Face_Stream_Size(m_Face);
+ }
+ return TRUE;
}
extern "C" {
- unsigned long _FTStreamRead(FXFT_Stream stream, unsigned long offset,
- unsigned char* buffer, unsigned long count)
- {
- if (count == 0) {
- return 0;
- }
- IFX_FileRead* pFile = (IFX_FileRead*)stream->descriptor.pointer;
- int res = pFile->ReadBlock(buffer, offset, count);
- if (res) {
- return count;
- }
- return 0;
- }
- void _FTStreamClose(FXFT_Stream stream)
- {
- }
+unsigned long _FTStreamRead(FXFT_Stream stream,
+ unsigned long offset,
+ unsigned char* buffer,
+ unsigned long count) {
+ if (count == 0) {
+ return 0;
+ }
+ IFX_FileRead* pFile = (IFX_FileRead*)stream->descriptor.pointer;
+ int res = pFile->ReadBlock(buffer, offset, count);
+ if (res) {
+ return count;
+ }
+ return 0;
+}
+void _FTStreamClose(FXFT_Stream stream) {}
};
-FX_BOOL _LoadFile(FXFT_Library library, FXFT_Face* Face, IFX_FileRead* pFile, FXFT_Stream* stream)
-{
- FXFT_Stream stream1 = (FXFT_Stream)FX_Alloc(uint8_t, sizeof (FXFT_StreamRec));
- stream1->base = NULL;
- stream1->size = (unsigned long)pFile->GetSize();
- stream1->pos = 0;
- stream1->descriptor.pointer = pFile;
- stream1->close = _FTStreamClose;
- stream1->read = _FTStreamRead;
- FXFT_Open_Args args;
- args.flags = FT_OPEN_STREAM;
- args.stream = stream1;
- if (FXFT_Open_Face(library, &args, 0, Face)) {
- FX_Free(stream1);
- return FALSE;
- }
- if (stream) {
- *stream = stream1;
- }
- return TRUE;
+FX_BOOL _LoadFile(FXFT_Library library,
+ FXFT_Face* Face,
+ IFX_FileRead* pFile,
+ FXFT_Stream* stream) {
+ FXFT_Stream stream1 = (FXFT_Stream)FX_Alloc(uint8_t, sizeof(FXFT_StreamRec));
+ stream1->base = NULL;
+ stream1->size = (unsigned long)pFile->GetSize();
+ stream1->pos = 0;
+ stream1->descriptor.pointer = pFile;
+ stream1->close = _FTStreamClose;
+ stream1->read = _FTStreamRead;
+ FXFT_Open_Args args;
+ args.flags = FT_OPEN_STREAM;
+ args.stream = stream1;
+ if (FXFT_Open_Face(library, &args, 0, Face)) {
+ FX_Free(stream1);
+ return FALSE;
+ }
+ if (stream) {
+ *stream = stream1;
+ }
+ return TRUE;
}
-FX_BOOL CFX_Font::LoadFile(IFX_FileRead* pFile)
-{
- m_bEmbedded = FALSE;
- FXFT_Library library;
- if (CFX_GEModule::Get()->GetFontMgr()->m_FTLibrary == NULL) {
- FXFT_Init_FreeType(&CFX_GEModule::Get()->GetFontMgr()->m_FTLibrary);
- }
- library = CFX_GEModule::Get()->GetFontMgr()->m_FTLibrary;
- FXFT_Stream stream = NULL;
- if (!_LoadFile(library, &m_Face, pFile, &stream)) {
- return FALSE;
- }
- m_pOwnedStream = stream;
- FXFT_Set_Pixel_Sizes(m_Face, 0, 64);
- return TRUE;
+FX_BOOL CFX_Font::LoadFile(IFX_FileRead* pFile) {
+ m_bEmbedded = FALSE;
+ FXFT_Library library;
+ if (CFX_GEModule::Get()->GetFontMgr()->m_FTLibrary == NULL) {
+ FXFT_Init_FreeType(&CFX_GEModule::Get()->GetFontMgr()->m_FTLibrary);
+ }
+ library = CFX_GEModule::Get()->GetFontMgr()->m_FTLibrary;
+ FXFT_Stream stream = NULL;
+ if (!_LoadFile(library, &m_Face, pFile, &stream)) {
+ return FALSE;
+ }
+ m_pOwnedStream = stream;
+ FXFT_Set_Pixel_Sizes(m_Face, 0, 64);
+ return TRUE;
}
-int CFX_Font::GetGlyphWidth(FX_DWORD glyph_index)
-{
- if (!m_Face) {
- return 0;
- }
- if (m_pSubstFont && (m_pSubstFont->m_SubstFlags & FXFONT_SUBST_MM)) {
- AdjustMMParams(glyph_index, 0, 0);
- }
- int err = FXFT_Load_Glyph(m_Face, glyph_index, FXFT_LOAD_NO_SCALE | FXFT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH);
- if (err) {
- return 0;
- }
- int width = EM_ADJUST(FXFT_Get_Face_UnitsPerEM(m_Face), FXFT_Get_Glyph_HoriAdvance(m_Face));
- return width;
+int CFX_Font::GetGlyphWidth(FX_DWORD glyph_index) {
+ if (!m_Face) {
+ return 0;
+ }
+ if (m_pSubstFont && (m_pSubstFont->m_SubstFlags & FXFONT_SUBST_MM)) {
+ AdjustMMParams(glyph_index, 0, 0);
+ }
+ int err = FXFT_Load_Glyph(
+ m_Face, glyph_index,
+ FXFT_LOAD_NO_SCALE | FXFT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH);
+ if (err) {
+ return 0;
+ }
+ int width = EM_ADJUST(FXFT_Get_Face_UnitsPerEM(m_Face),
+ FXFT_Get_Glyph_HoriAdvance(m_Face));
+ return width;
}
-static FXFT_Face FT_LoadFont(uint8_t* pData, int size)
-{
- FXFT_Library library;
- if (CFX_GEModule::Get()->GetFontMgr()->m_FTLibrary == NULL) {
- FXFT_Init_FreeType(&CFX_GEModule::Get()->GetFontMgr()->m_FTLibrary);
- }
- library = CFX_GEModule::Get()->GetFontMgr()->m_FTLibrary;
- FXFT_Face face = NULL;
- int error = FXFT_New_Memory_Face(library, pData, size, 0, &face);
- if (error) {
- return NULL;
- }
- error = FXFT_Set_Pixel_Sizes(face, 64, 64);
- if (error) {
- return NULL;
- }
- return face;
+static FXFT_Face FT_LoadFont(uint8_t* pData, int size) {
+ FXFT_Library library;
+ if (CFX_GEModule::Get()->GetFontMgr()->m_FTLibrary == NULL) {
+ FXFT_Init_FreeType(&CFX_GEModule::Get()->GetFontMgr()->m_FTLibrary);
+ }
+ library = CFX_GEModule::Get()->GetFontMgr()->m_FTLibrary;
+ FXFT_Face face = NULL;
+ int error = FXFT_New_Memory_Face(library, pData, size, 0, &face);
+ if (error) {
+ return NULL;
+ }
+ error = FXFT_Set_Pixel_Sizes(face, 64, 64);
+ if (error) {
+ return NULL;
+ }
+ return face;
}
-FX_BOOL CFX_Font::LoadEmbedded(const uint8_t* data, FX_DWORD size)
-{
- m_pFontDataAllocation = FX_Alloc(uint8_t, size);
- FXSYS_memcpy(m_pFontDataAllocation, data, size);
- m_Face = FT_LoadFont((uint8_t*)m_pFontDataAllocation, size);
- m_pFontData = (uint8_t*)m_pFontDataAllocation;
- m_bEmbedded = TRUE;
- m_dwSize = size;
- return m_Face != NULL;
+FX_BOOL CFX_Font::LoadEmbedded(const uint8_t* data, FX_DWORD size) {
+ m_pFontDataAllocation = FX_Alloc(uint8_t, size);
+ FXSYS_memcpy(m_pFontDataAllocation, data, size);
+ m_Face = FT_LoadFont((uint8_t*)m_pFontDataAllocation, size);
+ m_pFontData = (uint8_t*)m_pFontDataAllocation;
+ m_bEmbedded = TRUE;
+ m_dwSize = size;
+ return m_Face != NULL;
}
-FX_BOOL CFX_Font::IsTTFont()
-{
- if (m_Face == NULL) {
- return FALSE;
- }
- return FXFT_Is_Face_TT_OT(m_Face) == FXFT_FACE_FLAG_SFNT;
+FX_BOOL CFX_Font::IsTTFont() {
+ if (m_Face == NULL) {
+ return FALSE;
+ }
+ return FXFT_Is_Face_TT_OT(m_Face) == FXFT_FACE_FLAG_SFNT;
}
-int CFX_Font::GetAscent() const
-{
- if (m_Face == NULL) {
- return 0;
- }
- int ascent = EM_ADJUST(FXFT_Get_Face_UnitsPerEM(m_Face), FXFT_Get_Face_Ascender(m_Face));
- return ascent;
+int CFX_Font::GetAscent() const {
+ if (m_Face == NULL) {
+ return 0;
+ }
+ int ascent = EM_ADJUST(FXFT_Get_Face_UnitsPerEM(m_Face),
+ FXFT_Get_Face_Ascender(m_Face));
+ return ascent;
}
-int CFX_Font::GetDescent() const
-{
- if (m_Face == NULL) {
- return 0;
- }
- int descent = EM_ADJUST(FXFT_Get_Face_UnitsPerEM(m_Face), FXFT_Get_Face_Descender(m_Face));
- return descent;
+int CFX_Font::GetDescent() const {
+ if (m_Face == NULL) {
+ return 0;
+ }
+ int descent = EM_ADJUST(FXFT_Get_Face_UnitsPerEM(m_Face),
+ FXFT_Get_Face_Descender(m_Face));
+ return descent;
}
-FX_BOOL CFX_Font::GetGlyphBBox(FX_DWORD glyph_index, FX_RECT &bbox)
-{
- if (m_Face == NULL) {
- return FALSE;
- }
- if (FXFT_Is_Face_Tricky(m_Face)) {
- int error = FXFT_Set_Char_Size(m_Face, 0, 1000 * 64, 72, 72);
- if (error) {
- return FALSE;
- }
- error = FXFT_Load_Glyph(m_Face, glyph_index, FXFT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH);
- if (error) {
- return FALSE;
- }
- FXFT_BBox cbox;
- FT_Glyph glyph;
- error = FXFT_Get_Glyph(((FXFT_Face)m_Face)->glyph, &glyph);
- if (error) {
- return FALSE;
- }
- FXFT_Glyph_Get_CBox(glyph, FXFT_GLYPH_BBOX_PIXELS, &cbox);
- int pixel_size_x = ((FXFT_Face)m_Face)->size->metrics.x_ppem,
- pixel_size_y = ((FXFT_Face)m_Face)->size->metrics.y_ppem;
- if (pixel_size_x == 0 || pixel_size_y == 0) {
- bbox.left = cbox.xMin;
- bbox.right = cbox.xMax;
- bbox.top = cbox.yMax;
- bbox.bottom = cbox.yMin;
- } else {
- bbox.left = cbox.xMin * 1000 / pixel_size_x;
- bbox.right = cbox.xMax * 1000 / pixel_size_x;
- bbox.top = cbox.yMax * 1000 / pixel_size_y;
- bbox.bottom = cbox.yMin * 1000 / pixel_size_y;
- }
- if (bbox.top > FXFT_Get_Face_Ascender(m_Face)) {
- bbox.top = FXFT_Get_Face_Ascender(m_Face);
- }
- if (bbox.bottom < FXFT_Get_Face_Descender(m_Face)) {
- bbox.bottom = FXFT_Get_Face_Descender(m_Face);
- }
- FT_Done_Glyph(glyph);
- return FXFT_Set_Pixel_Sizes(m_Face, 0, 64) == 0;
+FX_BOOL CFX_Font::GetGlyphBBox(FX_DWORD glyph_index, FX_RECT& bbox) {
+ if (m_Face == NULL) {
+ return FALSE;
+ }
+ if (FXFT_Is_Face_Tricky(m_Face)) {
+ int error = FXFT_Set_Char_Size(m_Face, 0, 1000 * 64, 72, 72);
+ if (error) {
+ return FALSE;
}
- if (FXFT_Load_Glyph(m_Face, glyph_index, FXFT_LOAD_NO_SCALE | FXFT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH)) {
- return FALSE;
+ error = FXFT_Load_Glyph(m_Face, glyph_index,
+ FXFT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH);
+ if (error) {
+ return FALSE;
}
- int em = FXFT_Get_Face_UnitsPerEM(m_Face);
- if (em == 0) {
- bbox.left = FXFT_Get_Glyph_HoriBearingX(m_Face);
- bbox.bottom = FXFT_Get_Glyph_HoriBearingY(m_Face);
- bbox.top = bbox.bottom - FXFT_Get_Glyph_Height(m_Face);
- bbox.right = bbox.left + FXFT_Get_Glyph_Width(m_Face);
+ FXFT_BBox cbox;
+ FT_Glyph glyph;
+ error = FXFT_Get_Glyph(((FXFT_Face)m_Face)->glyph, &glyph);
+ if (error) {
+ return FALSE;
+ }
+ FXFT_Glyph_Get_CBox(glyph, FXFT_GLYPH_BBOX_PIXELS, &cbox);
+ int pixel_size_x = ((FXFT_Face)m_Face)->size->metrics.x_ppem,
+ pixel_size_y = ((FXFT_Face)m_Face)->size->metrics.y_ppem;
+ if (pixel_size_x == 0 || pixel_size_y == 0) {
+ bbox.left = cbox.xMin;
+ bbox.right = cbox.xMax;
+ bbox.top = cbox.yMax;
+ bbox.bottom = cbox.yMin;
} else {
- bbox.left = FXFT_Get_Glyph_HoriBearingX(m_Face) * 1000 / em;
- bbox.top = (FXFT_Get_Glyph_HoriBearingY(m_Face) - FXFT_Get_Glyph_Height(m_Face)) * 1000 / em;
- bbox.right = (FXFT_Get_Glyph_HoriBearingX(m_Face) + FXFT_Get_Glyph_Width(m_Face)) * 1000 / em;
- bbox.bottom = (FXFT_Get_Glyph_HoriBearingY(m_Face)) * 1000 / em;
- }
- return TRUE;
+ bbox.left = cbox.xMin * 1000 / pixel_size_x;
+ bbox.right = cbox.xMax * 1000 / pixel_size_x;
+ bbox.top = cbox.yMax * 1000 / pixel_size_y;
+ bbox.bottom = cbox.yMin * 1000 / pixel_size_y;
+ }
+ if (bbox.top > FXFT_Get_Face_Ascender(m_Face)) {
+ bbox.top = FXFT_Get_Face_Ascender(m_Face);
+ }
+ if (bbox.bottom < FXFT_Get_Face_Descender(m_Face)) {
+ bbox.bottom = FXFT_Get_Face_Descender(m_Face);
+ }
+ FT_Done_Glyph(glyph);
+ return FXFT_Set_Pixel_Sizes(m_Face, 0, 64) == 0;
+ }
+ if (FXFT_Load_Glyph(
+ m_Face, glyph_index,
+ FXFT_LOAD_NO_SCALE | FXFT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH)) {
+ return FALSE;
+ }
+ int em = FXFT_Get_Face_UnitsPerEM(m_Face);
+ if (em == 0) {
+ bbox.left = FXFT_Get_Glyph_HoriBearingX(m_Face);
+ bbox.bottom = FXFT_Get_Glyph_HoriBearingY(m_Face);
+ bbox.top = bbox.bottom - FXFT_Get_Glyph_Height(m_Face);
+ bbox.right = bbox.left + FXFT_Get_Glyph_Width(m_Face);
+ } else {
+ bbox.left = FXFT_Get_Glyph_HoriBearingX(m_Face) * 1000 / em;
+ bbox.top =
+ (FXFT_Get_Glyph_HoriBearingY(m_Face) - FXFT_Get_Glyph_Height(m_Face)) *
+ 1000 / em;
+ bbox.right =
+ (FXFT_Get_Glyph_HoriBearingX(m_Face) + FXFT_Get_Glyph_Width(m_Face)) *
+ 1000 / em;
+ bbox.bottom = (FXFT_Get_Glyph_HoriBearingY(m_Face)) * 1000 / em;
+ }
+ return TRUE;
}
-FX_BOOL CFX_Font::IsItalic()
-{
- if (m_Face == NULL) {
- return FALSE;
- }
- FX_BOOL ret = FXFT_Is_Face_Italic(m_Face) == FXFT_STYLE_FLAG_ITALIC;
- if (!ret) {
- CFX_ByteString str(FXFT_Get_Face_Style_Name(m_Face));
- str.MakeLower();
- if (str.Find("italic") != -1) {
- ret = TRUE;
- }
- }
- return ret;
+FX_BOOL CFX_Font::IsItalic() {
+ if (m_Face == NULL) {
+ return FALSE;
+ }
+ FX_BOOL ret = FXFT_Is_Face_Italic(m_Face) == FXFT_STYLE_FLAG_ITALIC;
+ if (!ret) {
+ CFX_ByteString str(FXFT_Get_Face_Style_Name(m_Face));
+ str.MakeLower();
+ if (str.Find("italic") != -1) {
+ ret = TRUE;
+ }
+ }
+ return ret;
}
-FX_BOOL CFX_Font::IsBold()
-{
- if (m_Face == NULL) {
- return FALSE;
- }
- return FXFT_Is_Face_Bold(m_Face) == FXFT_STYLE_FLAG_BOLD;
+FX_BOOL CFX_Font::IsBold() {
+ if (m_Face == NULL) {
+ return FALSE;
+ }
+ return FXFT_Is_Face_Bold(m_Face) == FXFT_STYLE_FLAG_BOLD;
}
-FX_BOOL CFX_Font::IsFixedWidth()
-{
- if (m_Face == NULL) {
- return FALSE;
- }
- return FXFT_Is_Face_fixedwidth(m_Face);
+FX_BOOL CFX_Font::IsFixedWidth() {
+ if (m_Face == NULL) {
+ return FALSE;
+ }
+ return FXFT_Is_Face_fixedwidth(m_Face);
}
-CFX_WideString CFX_Font::GetPsName() const
-{
- if (m_Face == NULL) {
- return CFX_WideString();
- }
- CFX_WideString psName = CFX_WideString::FromLocal(FXFT_Get_Postscript_Name(m_Face));
- if (psName.IsEmpty()) {
- psName = CFX_WideString::FromLocal("Untitled");
- }
- return psName;
+CFX_WideString CFX_Font::GetPsName() const {
+ if (m_Face == NULL) {
+ return CFX_WideString();
+ }
+ CFX_WideString psName =
+ CFX_WideString::FromLocal(FXFT_Get_Postscript_Name(m_Face));
+ if (psName.IsEmpty()) {
+ psName = CFX_WideString::FromLocal("Untitled");
+ }
+ return psName;
}
-CFX_ByteString CFX_Font::GetFamilyName() const
-{
- if (m_Face == NULL && m_pSubstFont == NULL) {
- return CFX_ByteString();
- }
- if (m_Face) {
- return CFX_ByteString(FXFT_Get_Face_Family_Name(m_Face));
- }
- return m_pSubstFont->m_Family;
+CFX_ByteString CFX_Font::GetFamilyName() const {
+ if (m_Face == NULL && m_pSubstFont == NULL) {
+ return CFX_ByteString();
+ }
+ if (m_Face) {
+ return CFX_ByteString(FXFT_Get_Face_Family_Name(m_Face));
+ }
+ return m_pSubstFont->m_Family;
}
-CFX_ByteString CFX_Font::GetFaceName() const
-{
- if (m_Face == NULL && m_pSubstFont == NULL) {
- return CFX_ByteString();
- }
- if (m_Face) {
- CFX_ByteString facename;
- CFX_ByteString style = CFX_ByteString(FXFT_Get_Face_Style_Name(m_Face));
- facename = GetFamilyName();
- if (facename.IsEmpty()) {
- facename = "Untitled";
- }
- if (!style.IsEmpty() && style != "Regular") {
- facename += " " + style;
- }
- return facename;
- }
- return m_pSubstFont->m_Family;
+CFX_ByteString CFX_Font::GetFaceName() const {
+ if (m_Face == NULL && m_pSubstFont == NULL) {
+ return CFX_ByteString();
+ }
+ if (m_Face) {
+ CFX_ByteString facename;
+ CFX_ByteString style = CFX_ByteString(FXFT_Get_Face_Style_Name(m_Face));
+ facename = GetFamilyName();
+ if (facename.IsEmpty()) {
+ facename = "Untitled";
+ }
+ if (!style.IsEmpty() && style != "Regular") {
+ facename += " " + style;
+ }
+ return facename;
+ }
+ return m_pSubstFont->m_Family;
}
-FX_BOOL CFX_Font::GetBBox(FX_RECT &bbox)
-{
- if (m_Face == NULL) {
- return FALSE;
- }
- int em = FXFT_Get_Face_UnitsPerEM(m_Face);
- if (em == 0) {
- bbox.left = FXFT_Get_Face_xMin(m_Face);
- bbox.bottom = FXFT_Get_Face_yMax(m_Face);
- bbox.top = FXFT_Get_Face_yMin(m_Face);
- bbox.right = FXFT_Get_Face_xMax(m_Face);
- } else {
- bbox.left = FXFT_Get_Face_xMin(m_Face) * 1000 / em;
- bbox.top = FXFT_Get_Face_yMin(m_Face) * 1000 / em;
- bbox.right = FXFT_Get_Face_xMax(m_Face) * 1000 / em;
- bbox.bottom = FXFT_Get_Face_yMax(m_Face) * 1000 / em;
- }
- return TRUE;
+FX_BOOL CFX_Font::GetBBox(FX_RECT& bbox) {
+ if (m_Face == NULL) {
+ return FALSE;
+ }
+ int em = FXFT_Get_Face_UnitsPerEM(m_Face);
+ if (em == 0) {
+ bbox.left = FXFT_Get_Face_xMin(m_Face);
+ bbox.bottom = FXFT_Get_Face_yMax(m_Face);
+ bbox.top = FXFT_Get_Face_yMin(m_Face);
+ bbox.right = FXFT_Get_Face_xMax(m_Face);
+ } else {
+ bbox.left = FXFT_Get_Face_xMin(m_Face) * 1000 / em;
+ bbox.top = FXFT_Get_Face_yMin(m_Face) * 1000 / em;
+ bbox.right = FXFT_Get_Face_xMax(m_Face) * 1000 / em;
+ bbox.bottom = FXFT_Get_Face_yMax(m_Face) * 1000 / em;
+ }
+ return TRUE;
}
-int CFX_Font::GetHeight()
-{
- if (m_Face == NULL) {
- return 0;
- }
- int height = EM_ADJUST(FXFT_Get_Face_UnitsPerEM(m_Face), FXFT_Get_Face_Height(m_Face));
- return height;
+int CFX_Font::GetHeight() {
+ if (m_Face == NULL) {
+ return 0;
+ }
+ int height =
+ EM_ADJUST(FXFT_Get_Face_UnitsPerEM(m_Face), FXFT_Get_Face_Height(m_Face));
+ return height;
}
-int CFX_Font::GetMaxAdvanceWidth()
-{
- if (m_Face == NULL) {
- return 0;
- }
- int width = EM_ADJUST(FXFT_Get_Face_UnitsPerEM(m_Face), FXFT_Get_Face_MaxAdvanceWidth(m_Face));
- return width;
+int CFX_Font::GetMaxAdvanceWidth() {
+ if (m_Face == NULL) {
+ return 0;
+ }
+ int width = EM_ADJUST(FXFT_Get_Face_UnitsPerEM(m_Face),
+ FXFT_Get_Face_MaxAdvanceWidth(m_Face));
+ return width;
}
-int CFX_Font::GetULPos()
-{
- if (m_Face == NULL) {
- return 0;
- }
- int pos = EM_ADJUST(FXFT_Get_Face_UnitsPerEM(m_Face), FXFT_Get_Face_UnderLinePosition(m_Face));
- return pos;
+int CFX_Font::GetULPos() {
+ if (m_Face == NULL) {
+ return 0;
+ }
+ int pos = EM_ADJUST(FXFT_Get_Face_UnitsPerEM(m_Face),
+ FXFT_Get_Face_UnderLinePosition(m_Face));
+ return pos;
}
-int CFX_Font::GetULthickness()
-{
- if (m_Face == NULL) {
- return 0;
- }
- int thickness = EM_ADJUST(FXFT_Get_Face_UnitsPerEM(m_Face), FXFT_Get_Face_UnderLineThickness(m_Face));
- return thickness;
+int CFX_Font::GetULthickness() {
+ if (m_Face == NULL) {
+ return 0;
+ }
+ int thickness = EM_ADJUST(FXFT_Get_Face_UnitsPerEM(m_Face),
+ FXFT_Get_Face_UnderLineThickness(m_Face));
+ return thickness;
}
-CFX_UnicodeEncoding::CFX_UnicodeEncoding(CFX_Font* pFont)
-{
- m_pFont = pFont;
+CFX_UnicodeEncoding::CFX_UnicodeEncoding(CFX_Font* pFont) {
+ m_pFont = pFont;
}
-FX_DWORD CFX_UnicodeEncoding::GlyphFromCharCode(FX_DWORD charcode)
-{
- FXFT_Face face = m_pFont->GetFace();
- if (!face) {
- return charcode;
- }
- if (FXFT_Select_Charmap(face, FXFT_ENCODING_UNICODE) == 0) {
- return FXFT_Get_Char_Index(face, charcode);
- }
- if (m_pFont->m_pSubstFont && m_pFont->m_pSubstFont->m_Charset == 2) {
- FX_DWORD index = 0;
- if (FXFT_Select_Charmap(face, FXFT_ENCODING_MS_SYMBOL) == 0) {
- index = FXFT_Get_Char_Index(face, charcode);
- }
- if (!index && !FXFT_Select_Charmap(face, FXFT_ENCODING_APPLE_ROMAN)) {
- return FXFT_Get_Char_Index(face, charcode);
- }
- }
+FX_DWORD CFX_UnicodeEncoding::GlyphFromCharCode(FX_DWORD charcode) {
+ FXFT_Face face = m_pFont->GetFace();
+ if (!face) {
return charcode;
-}
-FX_DWORD CFX_UnicodeEncoding::GlyphFromCharCodeEx(FX_DWORD charcode, int encoding)
-{
- FXFT_Face face = m_pFont->GetFace();
- if (!face) {
- return charcode;
- }
- if (encoding == ENCODING_UNICODE) {
- return GlyphFromCharCode(charcode);
+ }
+ if (FXFT_Select_Charmap(face, FXFT_ENCODING_UNICODE) == 0) {
+ return FXFT_Get_Char_Index(face, charcode);
+ }
+ if (m_pFont->m_pSubstFont && m_pFont->m_pSubstFont->m_Charset == 2) {
+ FX_DWORD index = 0;
+ if (FXFT_Select_Charmap(face, FXFT_ENCODING_MS_SYMBOL) == 0) {
+ index = FXFT_Get_Char_Index(face, charcode);
}
- int nmaps = FXFT_Get_Face_CharmapCount(m_pFont->m_Face);
- int i = 0;
- while (i < nmaps) {
- int encoding = FXFT_Get_Charmap_Encoding(FXFT_Get_Face_Charmaps(face)[i++]);
- if (encoding != FXFT_ENCODING_UNICODE) {
- FXFT_Select_Charmap(face, encoding);
- break;
- }
+ if (!index && !FXFT_Select_Charmap(face, FXFT_ENCODING_APPLE_ROMAN)) {
+ return FXFT_Get_Char_Index(face, charcode);
}
- return FXFT_Get_Char_Index(face, charcode);
+ }
+ return charcode;
+}
+FX_DWORD CFX_UnicodeEncoding::GlyphFromCharCodeEx(FX_DWORD charcode,
+ int encoding) {
+ FXFT_Face face = m_pFont->GetFace();
+ if (!face) {
+ return charcode;
+ }
+ if (encoding == ENCODING_UNICODE) {
+ return GlyphFromCharCode(charcode);
+ }
+ int nmaps = FXFT_Get_Face_CharmapCount(m_pFont->m_Face);
+ int i = 0;
+ while (i < nmaps) {
+ int encoding = FXFT_Get_Charmap_Encoding(FXFT_Get_Face_Charmaps(face)[i++]);
+ if (encoding != FXFT_ENCODING_UNICODE) {
+ FXFT_Select_Charmap(face, encoding);
+ break;
+ }
+ }
+ return FXFT_Get_Char_Index(face, charcode);
}
-IFX_FontEncoding* FXGE_CreateUnicodeEncoding(CFX_Font* pFont)
-{
- return new CFX_UnicodeEncoding(pFont);
+IFX_FontEncoding* FXGE_CreateUnicodeEncoding(CFX_Font* pFont) {
+ return new CFX_UnicodeEncoding(pFont);
}
diff --git a/core/src/fxge/ge/fx_ge_fontmap.cpp b/core/src/fxge/ge/fx_ge_fontmap.cpp
index 495d95c8d7..cd2195829f 100644
--- a/core/src/fxge/ge/fx_ge_fontmap.cpp
+++ b/core/src/fxge/ge/fx_ge_fontmap.cpp
@@ -9,147 +9,150 @@
#include "../../../include/fxge/fx_ge.h"
#include "../../../include/fxge/fx_freetype.h"
#include "text_int.h"
-#define GET_TT_SHORT(w) (FX_WORD)(((w)[0] << 8) | (w)[1])
-#define GET_TT_LONG(w) (FX_DWORD)(((w)[0] << 24) | ((w)[1] << 16) | ((w)[2] << 8) | (w)[3])
-CFX_SubstFont::CFX_SubstFont()
-{
- m_ExtHandle = NULL;
- m_Charset = 0;
- m_SubstFlags = 0;
- m_Weight = 0;
- m_ItalicAngle = 0;
- m_bSubstOfCJK = FALSE;
- m_WeightCJK = 0;
- m_bItlicCJK = FALSE;
+#define GET_TT_SHORT(w) (FX_WORD)(((w)[0] << 8) | (w)[1])
+#define GET_TT_LONG(w) \
+ (FX_DWORD)(((w)[0] << 24) | ((w)[1] << 16) | ((w)[2] << 8) | (w)[3])
+CFX_SubstFont::CFX_SubstFont() {
+ m_ExtHandle = NULL;
+ m_Charset = 0;
+ m_SubstFlags = 0;
+ m_Weight = 0;
+ m_ItalicAngle = 0;
+ m_bSubstOfCJK = FALSE;
+ m_WeightCJK = 0;
+ m_bItlicCJK = FALSE;
}
-CTTFontDesc::~CTTFontDesc()
-{
- if (m_Type == 1) {
- if (m_SingleFace.m_pFace) {
- FXFT_Done_Face(m_SingleFace.m_pFace);
- }
- } else if (m_Type == 2) {
- for (int i = 0; i < 16; i ++)
- if (m_TTCFace.m_pFaces[i]) {
- FXFT_Done_Face(m_TTCFace.m_pFaces[i]);
- }
- }
- if (m_pFontData) {
- FX_Free(m_pFontData);
- }
+CTTFontDesc::~CTTFontDesc() {
+ if (m_Type == 1) {
+ if (m_SingleFace.m_pFace) {
+ FXFT_Done_Face(m_SingleFace.m_pFace);
+ }
+ } else if (m_Type == 2) {
+ for (int i = 0; i < 16; i++)
+ if (m_TTCFace.m_pFaces[i]) {
+ FXFT_Done_Face(m_TTCFace.m_pFaces[i]);
+ }
+ }
+ if (m_pFontData) {
+ FX_Free(m_pFontData);
+ }
}
-FX_BOOL CTTFontDesc::ReleaseFace(FXFT_Face face)
-{
- if (m_Type == 1) {
- if (m_SingleFace.m_pFace != face) {
- return FALSE;
- }
- } else if (m_Type == 2) {
- int i;
- for (i = 0; i < 16; i ++)
- if (m_TTCFace.m_pFaces[i] == face) {
- break;
- }
- if (i == 16) {
- return FALSE;
- }
+FX_BOOL CTTFontDesc::ReleaseFace(FXFT_Face face) {
+ if (m_Type == 1) {
+ if (m_SingleFace.m_pFace != face) {
+ return FALSE;
}
- m_RefCount --;
- if (m_RefCount) {
- return FALSE;
- }
- delete this;
- return TRUE;
+ } else if (m_Type == 2) {
+ int i;
+ for (i = 0; i < 16; i++)
+ if (m_TTCFace.m_pFaces[i] == face) {
+ break;
+ }
+ if (i == 16) {
+ return FALSE;
+ }
+ }
+ m_RefCount--;
+ if (m_RefCount) {
+ return FALSE;
+ }
+ delete this;
+ return TRUE;
}
-CFX_FontMgr::CFX_FontMgr() : m_FTLibrary(nullptr)
-{
- m_pBuiltinMapper = new CFX_FontMapper(this);
- FXSYS_memset(m_ExternalFonts, 0, sizeof m_ExternalFonts);
+CFX_FontMgr::CFX_FontMgr() : m_FTLibrary(nullptr) {
+ m_pBuiltinMapper = new CFX_FontMapper(this);
+ FXSYS_memset(m_ExternalFonts, 0, sizeof m_ExternalFonts);
}
-CFX_FontMgr::~CFX_FontMgr()
-{
- delete m_pBuiltinMapper;
- FreeCache();
- if (m_FTLibrary) {
- FXFT_Done_FreeType(m_FTLibrary);
- }
+CFX_FontMgr::~CFX_FontMgr() {
+ delete m_pBuiltinMapper;
+ FreeCache();
+ if (m_FTLibrary) {
+ FXFT_Done_FreeType(m_FTLibrary);
+ }
}
-void CFX_FontMgr::InitFTLibrary()
-{
- if (m_FTLibrary == NULL) {
- FXFT_Init_FreeType(&m_FTLibrary);
- }
+void CFX_FontMgr::InitFTLibrary() {
+ if (m_FTLibrary == NULL) {
+ FXFT_Init_FreeType(&m_FTLibrary);
+ }
}
-void CFX_FontMgr::FreeCache()
-{
- FX_POSITION pos = m_FaceMap.GetStartPosition();
- while(pos) {
- CFX_ByteString Key;
- CTTFontDesc* face;
- m_FaceMap.GetNextAssoc(pos, Key, (void*&)face);
- delete face;
- }
- m_FaceMap.RemoveAll();
+void CFX_FontMgr::FreeCache() {
+ FX_POSITION pos = m_FaceMap.GetStartPosition();
+ while (pos) {
+ CFX_ByteString Key;
+ CTTFontDesc* face;
+ m_FaceMap.GetNextAssoc(pos, Key, (void*&)face);
+ delete face;
+ }
+ m_FaceMap.RemoveAll();
}
-void CFX_FontMgr::SetSystemFontInfo(IFX_SystemFontInfo* pFontInfo)
-{
- m_pBuiltinMapper->SetSystemFontInfo(pFontInfo);
+void CFX_FontMgr::SetSystemFontInfo(IFX_SystemFontInfo* pFontInfo) {
+ m_pBuiltinMapper->SetSystemFontInfo(pFontInfo);
}
-FXFT_Face CFX_FontMgr::FindSubstFont(const CFX_ByteString& face_name, FX_BOOL bTrueType,
- FX_DWORD flags, int weight, int italic_angle, int CharsetCP, CFX_SubstFont* pSubstFont)
-{
- if (!m_FTLibrary) {
- FXFT_Init_FreeType(&m_FTLibrary);
- }
- return m_pBuiltinMapper->FindSubstFont(face_name, bTrueType, flags, weight, italic_angle, CharsetCP, pSubstFont);
+FXFT_Face CFX_FontMgr::FindSubstFont(const CFX_ByteString& face_name,
+ FX_BOOL bTrueType,
+ FX_DWORD flags,
+ int weight,
+ int italic_angle,
+ int CharsetCP,
+ CFX_SubstFont* pSubstFont) {
+ if (!m_FTLibrary) {
+ FXFT_Init_FreeType(&m_FTLibrary);
+ }
+ return m_pBuiltinMapper->FindSubstFont(face_name, bTrueType, flags, weight,
+ italic_angle, CharsetCP, pSubstFont);
}
FXFT_Face CFX_FontMgr::GetCachedFace(const CFX_ByteString& face_name,
- int weight, FX_BOOL bItalic, uint8_t*& pFontData)
-{
- CFX_ByteString key(face_name);
- key += ',';
- key += CFX_ByteString::FormatInteger(weight);
- key += bItalic ? 'I' : 'N';
- CTTFontDesc* pFontDesc = NULL;
- m_FaceMap.Lookup(key, (void*&)pFontDesc);
- if(pFontDesc) {
- pFontData = pFontDesc->m_pFontData;
- pFontDesc->m_RefCount ++;
- return pFontDesc->m_SingleFace.m_pFace;
- }
- return NULL;
+ int weight,
+ FX_BOOL bItalic,
+ uint8_t*& pFontData) {
+ CFX_ByteString key(face_name);
+ key += ',';
+ key += CFX_ByteString::FormatInteger(weight);
+ key += bItalic ? 'I' : 'N';
+ CTTFontDesc* pFontDesc = NULL;
+ m_FaceMap.Lookup(key, (void*&)pFontDesc);
+ if (pFontDesc) {
+ pFontData = pFontDesc->m_pFontData;
+ pFontDesc->m_RefCount++;
+ return pFontDesc->m_SingleFace.m_pFace;
+ }
+ return NULL;
}
FXFT_Face CFX_FontMgr::AddCachedFace(const CFX_ByteString& face_name,
- int weight, FX_BOOL bItalic, uint8_t* pData, FX_DWORD size, int face_index)
-{
- CTTFontDesc* pFontDesc = new CTTFontDesc;
- pFontDesc->m_Type = 1;
- pFontDesc->m_SingleFace.m_pFace = NULL;
- pFontDesc->m_SingleFace.m_bBold = weight;
- pFontDesc->m_SingleFace.m_bItalic = bItalic;
- pFontDesc->m_pFontData = pData;
- pFontDesc->m_RefCount = 1;
- FXFT_Library library;
- if (m_FTLibrary == NULL) {
- FXFT_Init_FreeType(&m_FTLibrary);
- }
- library = m_FTLibrary;
- int ret = FXFT_New_Memory_Face(library, pData, size, face_index, &pFontDesc->m_SingleFace.m_pFace);
- if (ret) {
- delete pFontDesc;
- return NULL;
- }
- ret = FXFT_Set_Pixel_Sizes(pFontDesc->m_SingleFace.m_pFace, 64, 64);
- if (ret) {
- delete pFontDesc;
- return NULL;
- }
- CFX_ByteString key(face_name);
- key += ',';
- key += CFX_ByteString::FormatInteger(weight);
- key += bItalic ? 'I' : 'N';
- m_FaceMap.SetAt(key, pFontDesc);
- return pFontDesc->m_SingleFace.m_pFace;
+ int weight,
+ FX_BOOL bItalic,
+ uint8_t* pData,
+ FX_DWORD size,
+ int face_index) {
+ CTTFontDesc* pFontDesc = new CTTFontDesc;
+ pFontDesc->m_Type = 1;
+ pFontDesc->m_SingleFace.m_pFace = NULL;
+ pFontDesc->m_SingleFace.m_bBold = weight;
+ pFontDesc->m_SingleFace.m_bItalic = bItalic;
+ pFontDesc->m_pFontData = pData;
+ pFontDesc->m_RefCount = 1;
+ FXFT_Library library;
+ if (m_FTLibrary == NULL) {
+ FXFT_Init_FreeType(&m_FTLibrary);
+ }
+ library = m_FTLibrary;
+ int ret = FXFT_New_Memory_Face(library, pData, size, face_index,
+ &pFontDesc->m_SingleFace.m_pFace);
+ if (ret) {
+ delete pFontDesc;
+ return NULL;
+ }
+ ret = FXFT_Set_Pixel_Sizes(pFontDesc->m_SingleFace.m_pFace, 64, 64);
+ if (ret) {
+ delete pFontDesc;
+ return NULL;
+ }
+ CFX_ByteString key(face_name);
+ key += ',';
+ key += CFX_ByteString::FormatInteger(weight);
+ key += bItalic ? 'I' : 'N';
+ m_FaceMap.SetAt(key, pFontDesc);
+ return pFontDesc->m_SingleFace.m_pFace;
}
const FX_CHAR* const g_Base14FontNames[14] = {
"Courier",
@@ -168,10 +171,9 @@ const FX_CHAR* const g_Base14FontNames[14] = {
"ZapfDingbats",
};
const struct _AltFontName {
- const FX_CHAR* m_pName;
- int m_Index;
-}
-g_AltFontNames[] = {
+ const FX_CHAR* m_pName;
+ int m_Index;
+} g_AltFontNames[] = {
{"Arial", 4},
{"Arial,Bold", 5},
{"Arial,BoldItalic", 6},
@@ -263,144 +265,149 @@ g_AltFontNames[] = {
{"ZapfDingbats", 13},
};
extern "C" {
- static int compareString(const void* key, const void* element)
- {
- return FXSYS_stricmp((const FX_CHAR*)key, ((_AltFontName*)element)->m_pName);
- }
+static int compareString(const void* key, const void* element) {
+ return FXSYS_stricmp((const FX_CHAR*)key, ((_AltFontName*)element)->m_pName);
}
-int _PDF_GetStandardFontName(CFX_ByteString& name)
-{
- _AltFontName* found = (_AltFontName*)FXSYS_bsearch(name.c_str(), g_AltFontNames,
- sizeof g_AltFontNames / sizeof (_AltFontName), sizeof (_AltFontName), compareString);
- if (found == NULL) {
- return -1;
- }
- name = g_Base14FontNames[found->m_Index];
- return found->m_Index;
}
-int GetTTCIndex(const uint8_t* pFontData, FX_DWORD ttc_size, FX_DWORD font_offset)
-{
- int face_index = 0;
- const uint8_t* p = pFontData + 8;
- FX_DWORD nfont = GET_TT_LONG(p);
- FX_DWORD index;
- for (index = 0; index < nfont; index ++) {
- p = pFontData + 12 + index * 4;
- if (GET_TT_LONG(p) == font_offset) {
- break;
- }
- }
- if(index >= nfont) {
- face_index = 0;
- } else {
- face_index = index;
- }
- return face_index;
+int _PDF_GetStandardFontName(CFX_ByteString& name) {
+ _AltFontName* found =
+ (_AltFontName*)FXSYS_bsearch(name.c_str(), g_AltFontNames,
+ sizeof g_AltFontNames / sizeof(_AltFontName),
+ sizeof(_AltFontName), compareString);
+ if (found == NULL) {
+ return -1;
+ }
+ name = g_Base14FontNames[found->m_Index];
+ return found->m_Index;
}
-FXFT_Face CFX_FontMgr::GetCachedTTCFace(int ttc_size, FX_DWORD checksum,
- int font_offset, uint8_t*& pFontData)
-{
- CFX_ByteString key;
- key.Format("%d:%d", ttc_size, checksum);
- CTTFontDesc* pFontDesc = NULL;
- m_FaceMap.Lookup(key, (void*&)pFontDesc);
- if (pFontDesc == NULL) {
- return NULL;
- }
- pFontData = pFontDesc->m_pFontData;
- pFontDesc->m_RefCount ++;
- int face_index = GetTTCIndex(pFontDesc->m_pFontData, ttc_size, font_offset);
- if (pFontDesc->m_TTCFace.m_pFaces[face_index] == NULL) {
- pFontDesc->m_TTCFace.m_pFaces[face_index] = GetFixedFace(pFontDesc->m_pFontData, ttc_size, face_index);
- }
- return pFontDesc->m_TTCFace.m_pFaces[face_index];
+int GetTTCIndex(const uint8_t* pFontData,
+ FX_DWORD ttc_size,
+ FX_DWORD font_offset) {
+ int face_index = 0;
+ const uint8_t* p = pFontData + 8;
+ FX_DWORD nfont = GET_TT_LONG(p);
+ FX_DWORD index;
+ for (index = 0; index < nfont; index++) {
+ p = pFontData + 12 + index * 4;
+ if (GET_TT_LONG(p) == font_offset) {
+ break;
+ }
+ }
+ if (index >= nfont) {
+ face_index = 0;
+ } else {
+ face_index = index;
+ }
+ return face_index;
}
-FXFT_Face CFX_FontMgr::AddCachedTTCFace(int ttc_size, FX_DWORD checksum,
- uint8_t* pData, FX_DWORD size, int font_offset)
-{
- CFX_ByteString key;
- key.Format("%d:%d", ttc_size, checksum);
- CTTFontDesc* pFontDesc = new CTTFontDesc;
- pFontDesc->m_Type = 2;
- pFontDesc->m_pFontData = pData;
- for (int i = 0; i < 16; i ++) {
- pFontDesc->m_TTCFace.m_pFaces[i] = NULL;
- }
- pFontDesc->m_RefCount ++;
- key.Format("%d:%d", ttc_size, checksum);
- m_FaceMap.SetAt(key, pFontDesc);
- int face_index = GetTTCIndex(pFontDesc->m_pFontData, ttc_size, font_offset);
- pFontDesc->m_TTCFace.m_pFaces[face_index] = GetFixedFace(pFontDesc->m_pFontData, ttc_size, face_index);
- return pFontDesc->m_TTCFace.m_pFaces[face_index];
+FXFT_Face CFX_FontMgr::GetCachedTTCFace(int ttc_size,
+ FX_DWORD checksum,
+ int font_offset,
+ uint8_t*& pFontData) {
+ CFX_ByteString key;
+ key.Format("%d:%d", ttc_size, checksum);
+ CTTFontDesc* pFontDesc = NULL;
+ m_FaceMap.Lookup(key, (void*&)pFontDesc);
+ if (pFontDesc == NULL) {
+ return NULL;
+ }
+ pFontData = pFontDesc->m_pFontData;
+ pFontDesc->m_RefCount++;
+ int face_index = GetTTCIndex(pFontDesc->m_pFontData, ttc_size, font_offset);
+ if (pFontDesc->m_TTCFace.m_pFaces[face_index] == NULL) {
+ pFontDesc->m_TTCFace.m_pFaces[face_index] =
+ GetFixedFace(pFontDesc->m_pFontData, ttc_size, face_index);
+ }
+ return pFontDesc->m_TTCFace.m_pFaces[face_index];
}
-FXFT_Face CFX_FontMgr::GetFixedFace(const uint8_t* pData, FX_DWORD size, int face_index)
-{
- FXFT_Library library;
- if (m_FTLibrary == NULL) {
- FXFT_Init_FreeType(&m_FTLibrary);
- }
- library = m_FTLibrary;
- FXFT_Face face = NULL;
- int ret = FXFT_New_Memory_Face(library, pData, size, face_index, &face);
- if (ret) {
- return NULL;
- }
- ret = FXFT_Set_Pixel_Sizes(face, 64, 64);
- if (ret) {
- return NULL;
- }
- return face;
+FXFT_Face CFX_FontMgr::AddCachedTTCFace(int ttc_size,
+ FX_DWORD checksum,
+ uint8_t* pData,
+ FX_DWORD size,
+ int font_offset) {
+ CFX_ByteString key;
+ key.Format("%d:%d", ttc_size, checksum);
+ CTTFontDesc* pFontDesc = new CTTFontDesc;
+ pFontDesc->m_Type = 2;
+ pFontDesc->m_pFontData = pData;
+ for (int i = 0; i < 16; i++) {
+ pFontDesc->m_TTCFace.m_pFaces[i] = NULL;
+ }
+ pFontDesc->m_RefCount++;
+ key.Format("%d:%d", ttc_size, checksum);
+ m_FaceMap.SetAt(key, pFontDesc);
+ int face_index = GetTTCIndex(pFontDesc->m_pFontData, ttc_size, font_offset);
+ pFontDesc->m_TTCFace.m_pFaces[face_index] =
+ GetFixedFace(pFontDesc->m_pFontData, ttc_size, face_index);
+ return pFontDesc->m_TTCFace.m_pFaces[face_index];
}
-FXFT_Face CFX_FontMgr::GetFileFace(const FX_CHAR* filename, int face_index)
-{
- FXFT_Library library;
- if (m_FTLibrary == NULL) {
- FXFT_Init_FreeType(&m_FTLibrary);
- }
- library = m_FTLibrary;
- FXFT_Face face = NULL;
- int ret = FXFT_New_Face(library, filename, face_index, &face);
- if (ret) {
- return NULL;
- }
- ret = FXFT_Set_Pixel_Sizes(face, 64, 64);
- if (ret) {
- return NULL;
- }
- return face;
+FXFT_Face CFX_FontMgr::GetFixedFace(const uint8_t* pData,
+ FX_DWORD size,
+ int face_index) {
+ FXFT_Library library;
+ if (m_FTLibrary == NULL) {
+ FXFT_Init_FreeType(&m_FTLibrary);
+ }
+ library = m_FTLibrary;
+ FXFT_Face face = NULL;
+ int ret = FXFT_New_Memory_Face(library, pData, size, face_index, &face);
+ if (ret) {
+ return NULL;
+ }
+ ret = FXFT_Set_Pixel_Sizes(face, 64, 64);
+ if (ret) {
+ return NULL;
+ }
+ return face;
}
-void CFX_FontMgr::ReleaseFace(FXFT_Face face)
-{
- if (face == NULL) {
- return;
- }
- FX_POSITION pos = m_FaceMap.GetStartPosition();
- while(pos) {
- CFX_ByteString Key;
- CTTFontDesc* ttface;
- m_FaceMap.GetNextAssoc(pos, Key, (void*&)ttface);
- if (ttface->ReleaseFace(face)) {
- m_FaceMap.RemoveKey(Key);
- }
- }
+FXFT_Face CFX_FontMgr::GetFileFace(const FX_CHAR* filename, int face_index) {
+ FXFT_Library library;
+ if (m_FTLibrary == NULL) {
+ FXFT_Init_FreeType(&m_FTLibrary);
+ }
+ library = m_FTLibrary;
+ FXFT_Face face = NULL;
+ int ret = FXFT_New_Face(library, filename, face_index, &face);
+ if (ret) {
+ return NULL;
+ }
+ ret = FXFT_Set_Pixel_Sizes(face, 64, 64);
+ if (ret) {
+ return NULL;
+ }
+ return face;
+}
+void CFX_FontMgr::ReleaseFace(FXFT_Face face) {
+ if (face == NULL) {
+ return;
+ }
+ FX_POSITION pos = m_FaceMap.GetStartPosition();
+ while (pos) {
+ CFX_ByteString Key;
+ CTTFontDesc* ttface;
+ m_FaceMap.GetNextAssoc(pos, Key, (void*&)ttface);
+ if (ttface->ReleaseFace(face)) {
+ m_FaceMap.RemoveKey(Key);
+ }
+ }
}
extern "C" {
- extern const unsigned char g_FoxitFixedItalicFontData [18746];
- extern const unsigned char g_FoxitFixedFontData [17597];
- extern const unsigned char g_FoxitSansItalicFontData [16339];
- extern const unsigned char g_FoxitSansFontData [15025];
- extern const unsigned char g_FoxitSerifItalicFontData [21227];
- extern const unsigned char g_FoxitSerifFontData [19469];
- extern const unsigned char g_FoxitFixedBoldItalicFontData [19151];
- extern const unsigned char g_FoxitFixedBoldFontData [18055];
- extern const unsigned char g_FoxitSansBoldItalicFontData [16418];
- extern const unsigned char g_FoxitSansBoldFontData [16344];
- extern const unsigned char g_FoxitSerifBoldItalicFontData [20733];
- extern const unsigned char g_FoxitSerifBoldFontData [19395];
- extern const unsigned char g_FoxitSymbolFontData[16729];
- extern const unsigned char g_FoxitDingbatsFontData[29513];
- extern const unsigned char g_FoxitSerifMMFontData[113417];
- extern const unsigned char g_FoxitSansMMFontData[66919];
+extern const unsigned char g_FoxitFixedItalicFontData[18746];
+extern const unsigned char g_FoxitFixedFontData[17597];
+extern const unsigned char g_FoxitSansItalicFontData[16339];
+extern const unsigned char g_FoxitSansFontData[15025];
+extern const unsigned char g_FoxitSerifItalicFontData[21227];
+extern const unsigned char g_FoxitSerifFontData[19469];
+extern const unsigned char g_FoxitFixedBoldItalicFontData[19151];
+extern const unsigned char g_FoxitFixedBoldFontData[18055];
+extern const unsigned char g_FoxitSansBoldItalicFontData[16418];
+extern const unsigned char g_FoxitSansBoldFontData[16344];
+extern const unsigned char g_FoxitSerifBoldItalicFontData[20733];
+extern const unsigned char g_FoxitSerifBoldFontData[19395];
+extern const unsigned char g_FoxitSymbolFontData[16729];
+extern const unsigned char g_FoxitDingbatsFontData[29513];
+extern const unsigned char g_FoxitSerifMMFontData[113417];
+extern const unsigned char g_FoxitSansMMFontData[66919];
};
const FoxitFonts g_FoxitFonts[14] = {
{g_FoxitFixedFontData, 17597},
@@ -418,1094 +425,1089 @@ const FoxitFonts g_FoxitFonts[14] = {
{g_FoxitSymbolFontData, 16729},
{g_FoxitDingbatsFontData, 29513},
};
-void _FPDFAPI_GetInternalFontData(int id, const uint8_t*& data, FX_DWORD& size)
-{
- CFX_GEModule::Get()->GetFontMgr()->GetStandardFont(data, size, id);
+void _FPDFAPI_GetInternalFontData(int id,
+ const uint8_t*& data,
+ FX_DWORD& size) {
+ CFX_GEModule::Get()->GetFontMgr()->GetStandardFont(data, size, id);
}
-FX_BOOL CFX_FontMgr::GetStandardFont(const uint8_t*& pFontData, FX_DWORD& size, int index)
-{
- if (index > 15 || index < 0) {
- return FALSE;
- }
- {
- if (index >= 14) {
- if (index == 14) {
- pFontData = g_FoxitSerifMMFontData;
- size = 113417;
- } else {
- pFontData = g_FoxitSansMMFontData;
- size = 66919;
- }
- } else {
- pFontData = g_FoxitFonts[index].m_pFontData;
- size = g_FoxitFonts[index].m_dwSize;
- }
+FX_BOOL CFX_FontMgr::GetStandardFont(const uint8_t*& pFontData,
+ FX_DWORD& size,
+ int index) {
+ if (index > 15 || index < 0) {
+ return FALSE;
+ }
+ {
+ if (index >= 14) {
+ if (index == 14) {
+ pFontData = g_FoxitSerifMMFontData;
+ size = 113417;
+ } else {
+ pFontData = g_FoxitSansMMFontData;
+ size = 66919;
+ }
+ } else {
+ pFontData = g_FoxitFonts[index].m_pFontData;
+ size = g_FoxitFonts[index].m_dwSize;
}
- return TRUE;
+ }
+ return TRUE;
}
CFX_FontMapper::CFX_FontMapper(CFX_FontMgr* mgr)
- : m_pFontInfo(nullptr),
- m_bListLoaded(FALSE),
- m_pFontEnumerator(nullptr),
- m_pFontMgr(mgr)
-{
- FXSYS_memset(m_FoxitFaces, 0, sizeof m_FoxitFaces);
- m_MMFaces[0] = m_MMFaces[1] = NULL;
+ : m_pFontInfo(nullptr),
+ m_bListLoaded(FALSE),
+ m_pFontEnumerator(nullptr),
+ m_pFontMgr(mgr) {
+ FXSYS_memset(m_FoxitFaces, 0, sizeof m_FoxitFaces);
+ m_MMFaces[0] = m_MMFaces[1] = NULL;
}
-CFX_FontMapper::~CFX_FontMapper()
-{
- for (int i = 0; i < 14; i ++)
- if (m_FoxitFaces[i]) {
- FXFT_Done_Face(m_FoxitFaces[i]);
- }
- if (m_MMFaces[0]) {
- FXFT_Done_Face(m_MMFaces[0]);
- }
- if (m_MMFaces[1]) {
- FXFT_Done_Face(m_MMFaces[1]);
- }
- if (m_pFontInfo) {
- m_pFontInfo->Release();
- }
+CFX_FontMapper::~CFX_FontMapper() {
+ for (int i = 0; i < 14; i++)
+ if (m_FoxitFaces[i]) {
+ FXFT_Done_Face(m_FoxitFaces[i]);
+ }
+ if (m_MMFaces[0]) {
+ FXFT_Done_Face(m_MMFaces[0]);
+ }
+ if (m_MMFaces[1]) {
+ FXFT_Done_Face(m_MMFaces[1]);
+ }
+ if (m_pFontInfo) {
+ m_pFontInfo->Release();
+ }
}
-void CFX_FontMapper::SetSystemFontInfo(IFX_SystemFontInfo* pFontInfo)
-{
- if (pFontInfo == NULL) {
- return;
- }
- if (m_pFontInfo) {
- m_pFontInfo->Release();
- }
- m_pFontInfo = pFontInfo;
+void CFX_FontMapper::SetSystemFontInfo(IFX_SystemFontInfo* pFontInfo) {
+ if (pFontInfo == NULL) {
+ return;
+ }
+ if (m_pFontInfo) {
+ m_pFontInfo->Release();
+ }
+ m_pFontInfo = pFontInfo;
}
-static CFX_ByteString _TT_NormalizeName(const FX_CHAR* family)
-{
- CFX_ByteString norm(family, -1);
- norm.Remove(' ');
- norm.Remove('-');
- norm.Remove(',');
- int pos = norm.Find('+');
- if (pos > 0) {
- norm = norm.Left(pos);
- }
- norm.MakeLower();
- return norm;
+static CFX_ByteString _TT_NormalizeName(const FX_CHAR* family) {
+ CFX_ByteString norm(family, -1);
+ norm.Remove(' ');
+ norm.Remove('-');
+ norm.Remove(',');
+ int pos = norm.Find('+');
+ if (pos > 0) {
+ norm = norm.Left(pos);
+ }
+ norm.MakeLower();
+ return norm;
}
-CFX_ByteString _FPDF_GetNameFromTT(const uint8_t* name_table, FX_DWORD name_id)
-{
- const uint8_t* ptr = name_table + 2;
- int name_count = GET_TT_SHORT(ptr);
- int string_offset = GET_TT_SHORT(ptr + 2);
- const uint8_t* string_ptr = name_table + string_offset;
- ptr += 4;
- for (int i = 0; i < name_count; i ++) {
- if (GET_TT_SHORT(ptr + 6) == name_id && GET_TT_SHORT(ptr) == 1 && GET_TT_SHORT(ptr + 2) == 0) {
- return CFX_ByteStringC(string_ptr + GET_TT_SHORT(ptr + 10), GET_TT_SHORT(ptr + 8));
- }
- ptr += 12;
- }
- return CFX_ByteString();
+CFX_ByteString _FPDF_GetNameFromTT(const uint8_t* name_table,
+ FX_DWORD name_id) {
+ const uint8_t* ptr = name_table + 2;
+ int name_count = GET_TT_SHORT(ptr);
+ int string_offset = GET_TT_SHORT(ptr + 2);
+ const uint8_t* string_ptr = name_table + string_offset;
+ ptr += 4;
+ for (int i = 0; i < name_count; i++) {
+ if (GET_TT_SHORT(ptr + 6) == name_id && GET_TT_SHORT(ptr) == 1 &&
+ GET_TT_SHORT(ptr + 2) == 0) {
+ return CFX_ByteStringC(string_ptr + GET_TT_SHORT(ptr + 10),
+ GET_TT_SHORT(ptr + 8));
+ }
+ ptr += 12;
+ }
+ return CFX_ByteString();
}
-static CFX_ByteString _FPDF_ReadStringFromFile(FXSYS_FILE* pFile, FX_DWORD size)
-{
- CFX_ByteString buffer;
- if (!FXSYS_fread(buffer.GetBuffer(size), size, 1, pFile)) {
- return CFX_ByteString();
- }
- buffer.ReleaseBuffer(size);
- return buffer;
-}
-CFX_ByteString _FPDF_LoadTableFromTT(FXSYS_FILE* pFile, const uint8_t* pTables, FX_DWORD nTables, FX_DWORD tag)
-{
- for (FX_DWORD i = 0; i < nTables; i ++) {
- const uint8_t* p = pTables + i * 16;
- if (GET_TT_LONG(p) == tag) {
- FX_DWORD offset = GET_TT_LONG(p + 8);
- FX_DWORD size = GET_TT_LONG(p + 12);
- FXSYS_fseek(pFile, offset, FXSYS_SEEK_SET);
- return _FPDF_ReadStringFromFile(pFile, size);
- }
- }
+static CFX_ByteString _FPDF_ReadStringFromFile(FXSYS_FILE* pFile,
+ FX_DWORD size) {
+ CFX_ByteString buffer;
+ if (!FXSYS_fread(buffer.GetBuffer(size), size, 1, pFile)) {
return CFX_ByteString();
+ }
+ buffer.ReleaseBuffer(size);
+ return buffer;
}
-CFX_ByteString _FPDF_LoadTableFromTTStreamFile(IFX_FileStream* pFile, const uint8_t* pTables, FX_DWORD nTables, FX_DWORD tag)
-{
- for (FX_DWORD i = 0; i < nTables; i ++) {
- const uint8_t* p = pTables + i * 16;
- if (GET_TT_LONG(p) == tag) {
- FX_DWORD offset = GET_TT_LONG(p + 8);
- FX_DWORD size = GET_TT_LONG(p + 12);
- CFX_ByteString buffer;
- if (!pFile->ReadBlock(buffer.GetBuffer(size), offset, size)) {
- return CFX_ByteString();
- }
- buffer.ReleaseBuffer(size);
- return buffer;
- }
- }
- return CFX_ByteString();
+CFX_ByteString _FPDF_LoadTableFromTT(FXSYS_FILE* pFile,
+ const uint8_t* pTables,
+ FX_DWORD nTables,
+ FX_DWORD tag) {
+ for (FX_DWORD i = 0; i < nTables; i++) {
+ const uint8_t* p = pTables + i * 16;
+ if (GET_TT_LONG(p) == tag) {
+ FX_DWORD offset = GET_TT_LONG(p + 8);
+ FX_DWORD size = GET_TT_LONG(p + 12);
+ FXSYS_fseek(pFile, offset, FXSYS_SEEK_SET);
+ return _FPDF_ReadStringFromFile(pFile, size);
+ }
+ }
+ return CFX_ByteString();
}
-CFX_ByteString CFX_FontMapper::GetPSNameFromTT(void* hFont)
-{
- if (m_pFontInfo == NULL) {
- CFX_ByteString();
- }
- CFX_ByteString result;
- FX_DWORD size = m_pFontInfo->GetFontData(hFont, 0x6e616d65, NULL, 0);
- if (size) {
- uint8_t* buffer = FX_Alloc(uint8_t, size);
- m_pFontInfo->GetFontData(hFont, 0x6e616d65, buffer, size);
- result = _FPDF_GetNameFromTT(buffer, 6);
- FX_Free(buffer);
+CFX_ByteString _FPDF_LoadTableFromTTStreamFile(IFX_FileStream* pFile,
+ const uint8_t* pTables,
+ FX_DWORD nTables,
+ FX_DWORD tag) {
+ for (FX_DWORD i = 0; i < nTables; i++) {
+ const uint8_t* p = pTables + i * 16;
+ if (GET_TT_LONG(p) == tag) {
+ FX_DWORD offset = GET_TT_LONG(p + 8);
+ FX_DWORD size = GET_TT_LONG(p + 12);
+ CFX_ByteString buffer;
+ if (!pFile->ReadBlock(buffer.GetBuffer(size), offset, size)) {
+ return CFX_ByteString();
+ }
+ buffer.ReleaseBuffer(size);
+ return buffer;
}
- return result;
+ }
+ return CFX_ByteString();
}
-void CFX_FontMapper::AddInstalledFont(const CFX_ByteString& name, int charset)
-{
- if (m_pFontInfo == NULL) {
- return;
- }
- if (m_CharsetArray.Find((FX_DWORD)charset) == -1) {
- m_CharsetArray.Add((FX_DWORD)charset);
- m_FaceArray.Add(name);
- }
- if (name == m_LastFamily) {
- return;
- }
- const uint8_t* ptr = name;
- FX_BOOL bLocalized = FALSE;
- for (int i = 0; i < name.GetLength(); i ++)
- if (ptr[i] > 0x80) {
- bLocalized = TRUE;
- break;
- }
- if (bLocalized) {
- void* hFont = m_pFontInfo->GetFont(name);
- if (hFont == NULL) {
- int iExact;
- hFont = m_pFontInfo->MapFont(0, 0, FXFONT_DEFAULT_CHARSET, 0, name, iExact);
- if (hFont == NULL) {
- return;
- }
- }
- CFX_ByteString new_name = GetPSNameFromTT(hFont);
- if (!new_name.IsEmpty()) {
- new_name.Insert(0, ' ');
- m_InstalledTTFonts.Add(new_name);
- }
- m_pFontInfo->DeleteFont(hFont);
- }
- m_InstalledTTFonts.Add(name);
- m_LastFamily = name;
+CFX_ByteString CFX_FontMapper::GetPSNameFromTT(void* hFont) {
+ if (m_pFontInfo == NULL) {
+ CFX_ByteString();
+ }
+ CFX_ByteString result;
+ FX_DWORD size = m_pFontInfo->GetFontData(hFont, 0x6e616d65, NULL, 0);
+ if (size) {
+ uint8_t* buffer = FX_Alloc(uint8_t, size);
+ m_pFontInfo->GetFontData(hFont, 0x6e616d65, buffer, size);
+ result = _FPDF_GetNameFromTT(buffer, 6);
+ FX_Free(buffer);
+ }
+ return result;
}
-void CFX_FontMapper::LoadInstalledFonts()
-{
- if (m_pFontInfo == NULL) {
- return;
- }
- if (m_bListLoaded) {
+void CFX_FontMapper::AddInstalledFont(const CFX_ByteString& name, int charset) {
+ if (m_pFontInfo == NULL) {
+ return;
+ }
+ if (m_CharsetArray.Find((FX_DWORD)charset) == -1) {
+ m_CharsetArray.Add((FX_DWORD)charset);
+ m_FaceArray.Add(name);
+ }
+ if (name == m_LastFamily) {
+ return;
+ }
+ const uint8_t* ptr = name;
+ FX_BOOL bLocalized = FALSE;
+ for (int i = 0; i < name.GetLength(); i++)
+ if (ptr[i] > 0x80) {
+ bLocalized = TRUE;
+ break;
+ }
+ if (bLocalized) {
+ void* hFont = m_pFontInfo->GetFont(name);
+ if (hFont == NULL) {
+ int iExact;
+ hFont =
+ m_pFontInfo->MapFont(0, 0, FXFONT_DEFAULT_CHARSET, 0, name, iExact);
+ if (hFont == NULL) {
return;
+ }
}
- if (m_bListLoaded) {
- return;
+ CFX_ByteString new_name = GetPSNameFromTT(hFont);
+ if (!new_name.IsEmpty()) {
+ new_name.Insert(0, ' ');
+ m_InstalledTTFonts.Add(new_name);
}
- m_pFontInfo->EnumFontList(this);
- m_bListLoaded = TRUE;
+ m_pFontInfo->DeleteFont(hFont);
+ }
+ m_InstalledTTFonts.Add(name);
+ m_LastFamily = name;
}
-CFX_ByteString CFX_FontMapper::MatchInstalledFonts(const CFX_ByteString& norm_name)
-{
- LoadInstalledFonts();
- int i;
- for (i = m_InstalledTTFonts.GetSize() - 1; i >= 0; i --) {
- CFX_ByteString norm1 = _TT_NormalizeName(m_InstalledTTFonts[i]);
- if (norm1 == norm_name) {
- break;
- }
- }
- if (i < 0) {
- return CFX_ByteString();
- }
- CFX_ByteString match = m_InstalledTTFonts[i];
- if (match[0] == ' ') {
- match = m_InstalledTTFonts[i + 1];
- }
- return match;
+void CFX_FontMapper::LoadInstalledFonts() {
+ if (m_pFontInfo == NULL) {
+ return;
+ }
+ if (m_bListLoaded) {
+ return;
+ }
+ if (m_bListLoaded) {
+ return;
+ }
+ m_pFontInfo->EnumFontList(this);
+ m_bListLoaded = TRUE;
+}
+CFX_ByteString CFX_FontMapper::MatchInstalledFonts(
+ const CFX_ByteString& norm_name) {
+ LoadInstalledFonts();
+ int i;
+ for (i = m_InstalledTTFonts.GetSize() - 1; i >= 0; i--) {
+ CFX_ByteString norm1 = _TT_NormalizeName(m_InstalledTTFonts[i]);
+ if (norm1 == norm_name) {
+ break;
+ }
+ }
+ if (i < 0) {
+ return CFX_ByteString();
+ }
+ CFX_ByteString match = m_InstalledTTFonts[i];
+ if (match[0] == ' ') {
+ match = m_InstalledTTFonts[i + 1];
+ }
+ return match;
}
typedef struct _CHARSET_MAP_ {
- uint8_t charset;
- FX_WORD codepage;
+ uint8_t charset;
+ FX_WORD codepage;
} CHARSET_MAP;
static const CHARSET_MAP g_Codepage2CharsetTable[] = {
- { 1 , 0 },
- { 2 , 42 },
- { 254, 437 },
- { 255, 850 },
- { 222, 874 },
- { 128, 932 },
- { 134, 936 },
- { 129, 949 },
- { 136, 950 },
- { 238, 1250 },
- { 204, 1251 },
- { 0, 1252 },
- { 161, 1253 },
- { 162, 1254 },
- { 177, 1255 },
- { 178, 1256 },
- { 186, 1257 },
- { 163, 1258 },
- { 130, 1361 },
- { 77, 10000 },
- { 78, 10001 },
- { 79, 10003 },
- { 80, 10008 },
- { 81, 10002 },
- { 83, 10005 },
- { 84, 10004 },
- { 85, 10006 },
- { 86, 10081 },
- { 87, 10021 },
- { 88, 10029 },
- { 89, 10007 },
+ {1, 0}, {2, 42}, {254, 437}, {255, 850}, {222, 874},
+ {128, 932}, {134, 936}, {129, 949}, {136, 950}, {238, 1250},
+ {204, 1251}, {0, 1252}, {161, 1253}, {162, 1254}, {177, 1255},
+ {178, 1256}, {186, 1257}, {163, 1258}, {130, 1361}, {77, 10000},
+ {78, 10001}, {79, 10003}, {80, 10008}, {81, 10002}, {83, 10005},
+ {84, 10004}, {85, 10006}, {86, 10081}, {87, 10021}, {88, 10029},
+ {89, 10007},
};
-uint8_t _GetCharsetFromCodePage(FX_WORD codepage)
-{
- int32_t iEnd = sizeof(g_Codepage2CharsetTable) / sizeof(CHARSET_MAP) - 1;
- FXSYS_assert(iEnd >= 0);
- int32_t iStart = 0, iMid;
- do {
- iMid = (iStart + iEnd) / 2;
- const CHARSET_MAP & cp = g_Codepage2CharsetTable[iMid];
- if (codepage == cp.codepage) {
- return cp.charset;
- }
- if (codepage < cp.codepage) {
- iEnd = iMid - 1;
- } else {
- iStart = iMid + 1;
- }
- } while (iStart <= iEnd);
- return 1;
-}
-FX_DWORD _GetCodePageRangeFromCharset(int charset)
-{
- if (charset == FXFONT_EASTEUROPE_CHARSET) {
- return 1 << 1;
- }
- if (charset == FXFONT_GREEK_CHARSET) {
- return 1 << 3;
- }
- if (charset == FXFONT_TURKISH_CHARSET) {
- return 1 << 4;
- }
- if (charset == FXFONT_HEBREW_CHARSET) {
- return 1 << 5;
- }
- if (charset == FXFONT_ARABIC_CHARSET) {
- return 1 << 6;
- }
- if (charset == FXFONT_BALTIC_CHARSET) {
- return 1 << 7;
- }
- if (charset == FXFONT_THAI_CHARSET) {
- return 1 << 16;
- }
- if (charset == FXFONT_SHIFTJIS_CHARSET) {
- return 1 << 17;
- }
- if (charset == FXFONT_GB2312_CHARSET) {
- return 1 << 18;
- }
- if (charset == FXFONT_CHINESEBIG5_CHARSET) {
- return 1 << 20;
- }
- if (charset == FXFONT_HANGEUL_CHARSET) {
- return 1 << 19;
- }
- if (charset == FXFONT_SYMBOL_CHARSET) {
- return 1 << 31;
+uint8_t _GetCharsetFromCodePage(FX_WORD codepage) {
+ int32_t iEnd = sizeof(g_Codepage2CharsetTable) / sizeof(CHARSET_MAP) - 1;
+ FXSYS_assert(iEnd >= 0);
+ int32_t iStart = 0, iMid;
+ do {
+ iMid = (iStart + iEnd) / 2;
+ const CHARSET_MAP& cp = g_Codepage2CharsetTable[iMid];
+ if (codepage == cp.codepage) {
+ return cp.charset;
+ }
+ if (codepage < cp.codepage) {
+ iEnd = iMid - 1;
+ } else {
+ iStart = iMid + 1;
}
- return 1 << 21;
+ } while (iStart <= iEnd);
+ return 1;
}
-FXFT_Face CFX_FontMapper::UseInternalSubst(CFX_SubstFont* pSubstFont, int iBaseFont, int italic_angle, int weight, int picthfamily)
-{
- if (iBaseFont < 12) {
- if (m_FoxitFaces[iBaseFont]) {
- return m_FoxitFaces[iBaseFont];
- }
- const uint8_t* pFontData = NULL;
- FX_DWORD size = 0;
- if (m_pFontMgr->GetStandardFont(pFontData, size, iBaseFont)) {
- m_FoxitFaces[iBaseFont] = m_pFontMgr->GetFixedFace(pFontData, size, 0);
- return m_FoxitFaces[iBaseFont];
- }
- }
- pSubstFont->m_SubstFlags |= FXFONT_SUBST_MM;
- pSubstFont->m_ItalicAngle = italic_angle;
- if (weight) {
- pSubstFont->m_Weight = weight;
- }
- if (picthfamily & FXFONT_FF_ROMAN) {
- pSubstFont->m_Weight = pSubstFont->m_Weight * 4 / 5;
- pSubstFont->m_Family = "Chrome Serif";
- if (m_MMFaces[1]) {
- return m_MMFaces[1];
- }
- const uint8_t* pFontData = NULL;
- FX_DWORD size;
- m_pFontMgr->GetStandardFont(pFontData, size, 14);
- m_MMFaces[1] = m_pFontMgr->GetFixedFace(pFontData, size, 0);
- return m_MMFaces[1];
- }
- pSubstFont->m_Family = "Chrome Sans";
- if (m_MMFaces[0]) {
- return m_MMFaces[0];
+FX_DWORD _GetCodePageRangeFromCharset(int charset) {
+ if (charset == FXFONT_EASTEUROPE_CHARSET) {
+ return 1 << 1;
+ }
+ if (charset == FXFONT_GREEK_CHARSET) {
+ return 1 << 3;
+ }
+ if (charset == FXFONT_TURKISH_CHARSET) {
+ return 1 << 4;
+ }
+ if (charset == FXFONT_HEBREW_CHARSET) {
+ return 1 << 5;
+ }
+ if (charset == FXFONT_ARABIC_CHARSET) {
+ return 1 << 6;
+ }
+ if (charset == FXFONT_BALTIC_CHARSET) {
+ return 1 << 7;
+ }
+ if (charset == FXFONT_THAI_CHARSET) {
+ return 1 << 16;
+ }
+ if (charset == FXFONT_SHIFTJIS_CHARSET) {
+ return 1 << 17;
+ }
+ if (charset == FXFONT_GB2312_CHARSET) {
+ return 1 << 18;
+ }
+ if (charset == FXFONT_CHINESEBIG5_CHARSET) {
+ return 1 << 20;
+ }
+ if (charset == FXFONT_HANGEUL_CHARSET) {
+ return 1 << 19;
+ }
+ if (charset == FXFONT_SYMBOL_CHARSET) {
+ return 1 << 31;
+ }
+ return 1 << 21;
+}
+FXFT_Face CFX_FontMapper::UseInternalSubst(CFX_SubstFont* pSubstFont,
+ int iBaseFont,
+ int italic_angle,
+ int weight,
+ int picthfamily) {
+ if (iBaseFont < 12) {
+ if (m_FoxitFaces[iBaseFont]) {
+ return m_FoxitFaces[iBaseFont];
}
const uint8_t* pFontData = NULL;
FX_DWORD size = 0;
- m_pFontMgr->GetStandardFont(pFontData, size, 15);
- m_MMFaces[0] = m_pFontMgr->GetFixedFace(pFontData, size, 0);
+ if (m_pFontMgr->GetStandardFont(pFontData, size, iBaseFont)) {
+ m_FoxitFaces[iBaseFont] = m_pFontMgr->GetFixedFace(pFontData, size, 0);
+ return m_FoxitFaces[iBaseFont];
+ }
+ }
+ pSubstFont->m_SubstFlags |= FXFONT_SUBST_MM;
+ pSubstFont->m_ItalicAngle = italic_angle;
+ if (weight) {
+ pSubstFont->m_Weight = weight;
+ }
+ if (picthfamily & FXFONT_FF_ROMAN) {
+ pSubstFont->m_Weight = pSubstFont->m_Weight * 4 / 5;
+ pSubstFont->m_Family = "Chrome Serif";
+ if (m_MMFaces[1]) {
+ return m_MMFaces[1];
+ }
+ const uint8_t* pFontData = NULL;
+ FX_DWORD size;
+ m_pFontMgr->GetStandardFont(pFontData, size, 14);
+ m_MMFaces[1] = m_pFontMgr->GetFixedFace(pFontData, size, 0);
+ return m_MMFaces[1];
+ }
+ pSubstFont->m_Family = "Chrome Sans";
+ if (m_MMFaces[0]) {
return m_MMFaces[0];
+ }
+ const uint8_t* pFontData = NULL;
+ FX_DWORD size = 0;
+ m_pFontMgr->GetStandardFont(pFontData, size, 15);
+ m_MMFaces[0] = m_pFontMgr->GetFixedFace(pFontData, size, 0);
+ return m_MMFaces[0];
}
const struct _AltFontFamily {
- const FX_CHAR* m_pFontName;
- const FX_CHAR* m_pFontFamily;
-}
-g_AltFontFamilies[] = {
+ const FX_CHAR* m_pFontName;
+ const FX_CHAR* m_pFontFamily;
+} g_AltFontFamilies[] = {
{"AGaramondPro", "Adobe Garamond Pro"},
{"BankGothicBT-Medium", "BankGothic Md BT"},
{"ForteMT", "Forte"},
};
extern "C" {
- static int compareFontFamilyString(const void* key, const void* element)
- {
- CFX_ByteString str_key((const FX_CHAR*)key);
- if (str_key.Find(((_AltFontFamily*)element)->m_pFontName) != -1) {
- return 0;
- }
- return FXSYS_stricmp((const FX_CHAR*)key, ((_AltFontFamily*)element)->m_pFontName);
- }
+static int compareFontFamilyString(const void* key, const void* element) {
+ CFX_ByteString str_key((const FX_CHAR*)key);
+ if (str_key.Find(((_AltFontFamily*)element)->m_pFontName) != -1) {
+ return 0;
+ }
+ return FXSYS_stricmp((const FX_CHAR*)key,
+ ((_AltFontFamily*)element)->m_pFontName);
}
-#define FX_FONT_STYLE_None 0x00
-#define FX_FONT_STYLE_Bold 0x01
-#define FX_FONT_STYLE_Italic 0x02
-#define FX_FONT_STYLE_BoldBold 0x04
-static CFX_ByteString _GetFontFamily(CFX_ByteString fontName, int nStyle)
-{
- if (fontName.Find("Script") >= 0) {
- if ((nStyle & FX_FONT_STYLE_Bold) == FX_FONT_STYLE_Bold) {
- fontName = "ScriptMTBold";
- } else if (fontName.Find("Palace") >= 0) {
- fontName = "PalaceScriptMT";
- } else if (fontName.Find("French") >= 0) {
- fontName = "FrenchScriptMT";
- } else if (fontName.Find("FreeStyle") >= 0) {
- fontName = "FreeStyleScript";
- }
- return fontName;
- }
- _AltFontFamily* found = (_AltFontFamily*)FXSYS_bsearch(fontName.c_str(), g_AltFontFamilies,
- sizeof g_AltFontFamilies / sizeof (_AltFontFamily), sizeof (_AltFontFamily), compareFontFamilyString);
- if (found == NULL) {
- return fontName;
- }
- return found->m_pFontFamily;
+}
+#define FX_FONT_STYLE_None 0x00
+#define FX_FONT_STYLE_Bold 0x01
+#define FX_FONT_STYLE_Italic 0x02
+#define FX_FONT_STYLE_BoldBold 0x04
+static CFX_ByteString _GetFontFamily(CFX_ByteString fontName, int nStyle) {
+ if (fontName.Find("Script") >= 0) {
+ if ((nStyle & FX_FONT_STYLE_Bold) == FX_FONT_STYLE_Bold) {
+ fontName = "ScriptMTBold";
+ } else if (fontName.Find("Palace") >= 0) {
+ fontName = "PalaceScriptMT";
+ } else if (fontName.Find("French") >= 0) {
+ fontName = "FrenchScriptMT";
+ } else if (fontName.Find("FreeStyle") >= 0) {
+ fontName = "FreeStyleScript";
+ }
+ return fontName;
+ }
+ _AltFontFamily* found = (_AltFontFamily*)FXSYS_bsearch(
+ fontName.c_str(), g_AltFontFamilies,
+ sizeof g_AltFontFamilies / sizeof(_AltFontFamily), sizeof(_AltFontFamily),
+ compareFontFamilyString);
+ if (found == NULL) {
+ return fontName;
+ }
+ return found->m_pFontFamily;
};
typedef struct _FX_FontStyle {
- const FX_CHAR* style;
- int32_t len;
+ const FX_CHAR* style;
+ int32_t len;
} FX_FontStyle;
const FX_FontStyle g_FontStyles[] = {
- { "Bold", 4 },
- { "Italic", 6 },
- { "BoldItalic", 10 },
- { "Reg", 3 },
- { "Regular", 7 },
+ {"Bold", 4}, {"Italic", 6}, {"BoldItalic", 10}, {"Reg", 3}, {"Regular", 7},
};
-CFX_ByteString ParseStyle(const FX_CHAR* pStyle, int iLen, int iIndex)
-{
- CFX_ByteTextBuf buf;
- if (!iLen || iLen <= iIndex) {
- return buf.GetByteString();
- }
- while (iIndex < iLen) {
- if (pStyle[iIndex] == ',') {
- break;
- }
- buf.AppendChar(pStyle[iIndex]);
- ++iIndex;
- }
+CFX_ByteString ParseStyle(const FX_CHAR* pStyle, int iLen, int iIndex) {
+ CFX_ByteTextBuf buf;
+ if (!iLen || iLen <= iIndex) {
return buf.GetByteString();
+ }
+ while (iIndex < iLen) {
+ if (pStyle[iIndex] == ',') {
+ break;
+ }
+ buf.AppendChar(pStyle[iIndex]);
+ ++iIndex;
+ }
+ return buf.GetByteString();
}
-int32_t GetStyleType(const CFX_ByteString &bsStyle, FX_BOOL bRevert)
-{
- int32_t iLen = bsStyle.GetLength();
- if (!iLen) {
- return -1;
- }
- int iSize = sizeof(g_FontStyles) / sizeof(FX_FontStyle);
- const FX_FontStyle *pStyle = NULL;
- for (int i = iSize - 1; i >= 0; --i) {
- pStyle = g_FontStyles + i;
- if (!pStyle || pStyle->len > iLen) {
- continue;
- }
- if (!bRevert) {
- if (bsStyle.Left(pStyle->len).Compare(pStyle->style) == 0) {
- return i;
- }
- } else {
- if (bsStyle.Right(pStyle->len).Compare(pStyle->style) == 0) {
- return i;
- }
- }
- }
+int32_t GetStyleType(const CFX_ByteString& bsStyle, FX_BOOL bRevert) {
+ int32_t iLen = bsStyle.GetLength();
+ if (!iLen) {
return -1;
-}
-FX_BOOL CheckSupportThirdPartFont(CFX_ByteString name, int &PitchFamily)
-{
- if (name == FX_BSTRC("MyriadPro")) {
- PitchFamily &= ~FXFONT_FF_ROMAN;
- return TRUE;
+ }
+ int iSize = sizeof(g_FontStyles) / sizeof(FX_FontStyle);
+ const FX_FontStyle* pStyle = NULL;
+ for (int i = iSize - 1; i >= 0; --i) {
+ pStyle = g_FontStyles + i;
+ if (!pStyle || pStyle->len > iLen) {
+ continue;
+ }
+ if (!bRevert) {
+ if (bsStyle.Left(pStyle->len).Compare(pStyle->style) == 0) {
+ return i;
+ }
+ } else {
+ if (bsStyle.Right(pStyle->len).Compare(pStyle->style) == 0) {
+ return i;
+ }
}
- return FALSE;
+ }
+ return -1;
}
-FXFT_Face CFX_FontMapper::FindSubstFont(const CFX_ByteString& name, FX_BOOL bTrueType, FX_DWORD flags,
- int weight, int italic_angle, int WindowCP, CFX_SubstFont* pSubstFont)
-{
- if (!(flags & FXFONT_USEEXTERNATTR)) {
- weight = FXFONT_FW_NORMAL;
- italic_angle = 0;
- }
- CFX_ByteString SubstName = name;
- SubstName.Remove(0x20);
- if (bTrueType) {
- if (name[0] == '@') {
- SubstName = name.Mid(1);
- }
- }
- _PDF_GetStandardFontName(SubstName);
- if (SubstName == FX_BSTRC("Symbol") && !bTrueType) {
- pSubstFont->m_Family = "Chrome Symbol";
- pSubstFont->m_Charset = FXFONT_SYMBOL_CHARSET;
- pSubstFont->m_SubstFlags |= FXFONT_SUBST_STANDARD;
- if (m_FoxitFaces[12]) {
- return m_FoxitFaces[12];
- }
- const uint8_t* pFontData = NULL;
- FX_DWORD size = 0;
- m_pFontMgr->GetStandardFont(pFontData, size, 12);
- m_FoxitFaces[12] = m_pFontMgr->GetFixedFace(pFontData, size, 0);
- return m_FoxitFaces[12];
- }
- if (SubstName == FX_BSTRC("ZapfDingbats")) {
- pSubstFont->m_Family = "Chrome Dingbats";
- pSubstFont->m_Charset = FXFONT_SYMBOL_CHARSET;
- pSubstFont->m_SubstFlags |= FXFONT_SUBST_STANDARD;
- if (m_FoxitFaces[13]) {
- return m_FoxitFaces[13];
- }
- const uint8_t* pFontData = NULL;
- FX_DWORD size = 0;
- m_pFontMgr->GetStandardFont(pFontData, size, 13);
- m_FoxitFaces[13] = m_pFontMgr->GetFixedFace(pFontData, size, 0);
- return m_FoxitFaces[13];
+FX_BOOL CheckSupportThirdPartFont(CFX_ByteString name, int& PitchFamily) {
+ if (name == FX_BSTRC("MyriadPro")) {
+ PitchFamily &= ~FXFONT_FF_ROMAN;
+ return TRUE;
+ }
+ return FALSE;
+}
+FXFT_Face CFX_FontMapper::FindSubstFont(const CFX_ByteString& name,
+ FX_BOOL bTrueType,
+ FX_DWORD flags,
+ int weight,
+ int italic_angle,
+ int WindowCP,
+ CFX_SubstFont* pSubstFont) {
+ if (!(flags & FXFONT_USEEXTERNATTR)) {
+ weight = FXFONT_FW_NORMAL;
+ italic_angle = 0;
+ }
+ CFX_ByteString SubstName = name;
+ SubstName.Remove(0x20);
+ if (bTrueType) {
+ if (name[0] == '@') {
+ SubstName = name.Mid(1);
+ }
+ }
+ _PDF_GetStandardFontName(SubstName);
+ if (SubstName == FX_BSTRC("Symbol") && !bTrueType) {
+ pSubstFont->m_Family = "Chrome Symbol";
+ pSubstFont->m_Charset = FXFONT_SYMBOL_CHARSET;
+ pSubstFont->m_SubstFlags |= FXFONT_SUBST_STANDARD;
+ if (m_FoxitFaces[12]) {
+ return m_FoxitFaces[12];
}
- int iBaseFont = 0;
- CFX_ByteString family, style;
- FX_BOOL bHasComma = FALSE;
- FX_BOOL bHasHypen = FALSE;
- int find = SubstName.Find(FX_BSTRC(","), 0);
- if (find >= 0) {
- family = SubstName.Left(find);
- _PDF_GetStandardFontName(family);
- style = SubstName.Mid(find + 1);
- bHasComma = TRUE;
- } else {
- family = SubstName;
+ const uint8_t* pFontData = NULL;
+ FX_DWORD size = 0;
+ m_pFontMgr->GetStandardFont(pFontData, size, 12);
+ m_FoxitFaces[12] = m_pFontMgr->GetFixedFace(pFontData, size, 0);
+ return m_FoxitFaces[12];
+ }
+ if (SubstName == FX_BSTRC("ZapfDingbats")) {
+ pSubstFont->m_Family = "Chrome Dingbats";
+ pSubstFont->m_Charset = FXFONT_SYMBOL_CHARSET;
+ pSubstFont->m_SubstFlags |= FXFONT_SUBST_STANDARD;
+ if (m_FoxitFaces[13]) {
+ return m_FoxitFaces[13];
}
- for (; iBaseFont < 12; iBaseFont ++)
- if (family == CFX_ByteStringC(g_Base14FontNames[iBaseFont])) {
- break;
- }
- int PitchFamily = 0;
- FX_BOOL bItalic = FALSE;
- FX_DWORD nStyle = 0;
- FX_BOOL bStyleAvail = FALSE;
- if (iBaseFont < 12) {
- family = g_Base14FontNames[iBaseFont];
- if ((iBaseFont % 4) == 1 || (iBaseFont % 4) == 2) {
- nStyle |= FX_FONT_STYLE_Bold;
- }
- if ((iBaseFont % 4) / 2) {
- nStyle |= FX_FONT_STYLE_Italic;
- }
- if (iBaseFont < 4) {
- PitchFamily |= FXFONT_FF_FIXEDPITCH;
- }
- if (iBaseFont >= 8) {
- PitchFamily |= FXFONT_FF_ROMAN;
- }
- } else {
- if (!bHasComma) {
- find = family.ReverseFind('-');
- if (find >= 0) {
- style = family.Mid(find + 1);
- family = family.Left(find);
- bHasHypen = TRUE;
- }
+ const uint8_t* pFontData = NULL;
+ FX_DWORD size = 0;
+ m_pFontMgr->GetStandardFont(pFontData, size, 13);
+ m_FoxitFaces[13] = m_pFontMgr->GetFixedFace(pFontData, size, 0);
+ return m_FoxitFaces[13];
+ }
+ int iBaseFont = 0;
+ CFX_ByteString family, style;
+ FX_BOOL bHasComma = FALSE;
+ FX_BOOL bHasHypen = FALSE;
+ int find = SubstName.Find(FX_BSTRC(","), 0);
+ if (find >= 0) {
+ family = SubstName.Left(find);
+ _PDF_GetStandardFontName(family);
+ style = SubstName.Mid(find + 1);
+ bHasComma = TRUE;
+ } else {
+ family = SubstName;
+ }
+ for (; iBaseFont < 12; iBaseFont++)
+ if (family == CFX_ByteStringC(g_Base14FontNames[iBaseFont])) {
+ break;
+ }
+ int PitchFamily = 0;
+ FX_BOOL bItalic = FALSE;
+ FX_DWORD nStyle = 0;
+ FX_BOOL bStyleAvail = FALSE;
+ if (iBaseFont < 12) {
+ family = g_Base14FontNames[iBaseFont];
+ if ((iBaseFont % 4) == 1 || (iBaseFont % 4) == 2) {
+ nStyle |= FX_FONT_STYLE_Bold;
+ }
+ if ((iBaseFont % 4) / 2) {
+ nStyle |= FX_FONT_STYLE_Italic;
+ }
+ if (iBaseFont < 4) {
+ PitchFamily |= FXFONT_FF_FIXEDPITCH;
+ }
+ if (iBaseFont >= 8) {
+ PitchFamily |= FXFONT_FF_ROMAN;
+ }
+ } else {
+ if (!bHasComma) {
+ find = family.ReverseFind('-');
+ if (find >= 0) {
+ style = family.Mid(find + 1);
+ family = family.Left(find);
+ bHasHypen = TRUE;
+ }
+ }
+ if (!bHasHypen) {
+ int nLen = family.GetLength();
+ int32_t nRet = GetStyleType(family, TRUE);
+ if (nRet > -1) {
+ family = family.Left(nLen - g_FontStyles[nRet].len);
+ if (nRet == 0) {
+ nStyle |= FX_FONT_STYLE_Bold;
}
- if (!bHasHypen) {
- int nLen = family.GetLength();
- int32_t nRet = GetStyleType(family, TRUE);
- if (nRet > -1) {
- family = family.Left(nLen - g_FontStyles[nRet].len);
- if (nRet == 0) {
- nStyle |= FX_FONT_STYLE_Bold;
- }
- if (nRet == 1) {
- nStyle |= FX_FONT_STYLE_Italic;
- }
- if (nRet == 2) {
- nStyle |= (FX_FONT_STYLE_Bold | FX_FONT_STYLE_Italic);
- }
- }
+ if (nRet == 1) {
+ nStyle |= FX_FONT_STYLE_Italic;
}
- if (flags & FXFONT_SERIF) {
- PitchFamily |= FXFONT_FF_ROMAN;
+ if (nRet == 2) {
+ nStyle |= (FX_FONT_STYLE_Bold | FX_FONT_STYLE_Italic);
}
- if (flags & FXFONT_SCRIPT) {
- PitchFamily |= FXFONT_FF_SCRIPT;
+ }
+ }
+ if (flags & FXFONT_SERIF) {
+ PitchFamily |= FXFONT_FF_ROMAN;
+ }
+ if (flags & FXFONT_SCRIPT) {
+ PitchFamily |= FXFONT_FF_SCRIPT;
+ }
+ if (flags & FXFONT_FIXED_PITCH) {
+ PitchFamily |= FXFONT_FF_FIXEDPITCH;
+ }
+ }
+ if (!style.IsEmpty()) {
+ int nLen = style.GetLength();
+ const FX_CHAR* pStyle = style;
+ int i = 0;
+ FX_BOOL bFirstItem = TRUE;
+ CFX_ByteString buf;
+ while (i < nLen) {
+ buf = ParseStyle(pStyle, nLen, i);
+ int32_t nRet = GetStyleType(buf, FALSE);
+ if ((i && !bStyleAvail) || (!i && nRet < 0)) {
+ family = SubstName;
+ iBaseFont = 12;
+ break;
+ } else if (nRet >= 0) {
+ bStyleAvail = TRUE;
+ }
+ if (nRet == 0) {
+ if (nStyle & FX_FONT_STYLE_Bold) {
+ nStyle |= FX_FONT_STYLE_BoldBold;
+ } else {
+ nStyle |= FX_FONT_STYLE_Bold;
}
- if (flags & FXFONT_FIXED_PITCH) {
- PitchFamily |= FXFONT_FF_FIXEDPITCH;
+ bFirstItem = FALSE;
+ }
+ if (nRet == 1) {
+ if (bFirstItem) {
+ nStyle |= FX_FONT_STYLE_Italic;
+ } else {
+ family = SubstName;
+ iBaseFont = 12;
}
- }
- if (!style.IsEmpty()) {
- int nLen = style.GetLength();
- const FX_CHAR* pStyle = style;
- int i = 0;
- FX_BOOL bFirstItem = TRUE;
- CFX_ByteString buf;
- while (i < nLen) {
- buf = ParseStyle(pStyle, nLen, i);
- int32_t nRet = GetStyleType(buf, FALSE);
- if ((i && !bStyleAvail) || (!i && nRet < 0)) {
- family = SubstName;
- iBaseFont = 12;
- break;
- } else if (nRet >= 0) {
- bStyleAvail = TRUE;
- }
- if (nRet == 0) {
- if (nStyle & FX_FONT_STYLE_Bold) {
- nStyle |= FX_FONT_STYLE_BoldBold;
- } else {
- nStyle |= FX_FONT_STYLE_Bold;
- }
- bFirstItem = FALSE;
- }
- if (nRet == 1) {
- if (bFirstItem) {
- nStyle |= FX_FONT_STYLE_Italic;
- } else {
- family = SubstName;
- iBaseFont = 12;
- }
- break;
- }
- if (nRet == 2) {
- nStyle |= FX_FONT_STYLE_Italic;
- if (nStyle & FX_FONT_STYLE_Bold) {
- nStyle |= FX_FONT_STYLE_BoldBold;
- } else {
- nStyle |= FX_FONT_STYLE_Bold;
- }
- bFirstItem = FALSE;
- }
- i += buf.GetLength() + 1;
+ break;
+ }
+ if (nRet == 2) {
+ nStyle |= FX_FONT_STYLE_Italic;
+ if (nStyle & FX_FONT_STYLE_Bold) {
+ nStyle |= FX_FONT_STYLE_BoldBold;
+ } else {
+ nStyle |= FX_FONT_STYLE_Bold;
}
- }
- weight = weight ? weight : FXFONT_FW_NORMAL;
- int old_weight = weight;
- if (nStyle) {
- weight = nStyle & FX_FONT_STYLE_BoldBold ? 900 : (nStyle & FX_FONT_STYLE_Bold ? FXFONT_FW_BOLD : FXFONT_FW_NORMAL);
- }
- if (nStyle & FX_FONT_STYLE_Italic) {
- bItalic = TRUE;
- }
- FX_BOOL bCJK = FALSE;
- int iExact = 0;
- int Charset = FXFONT_ANSI_CHARSET;
- if (WindowCP) {
- Charset = _GetCharsetFromCodePage(WindowCP);
- } else if (iBaseFont == 12 && (flags & FXFONT_SYMBOLIC)) {
- Charset = FXFONT_SYMBOL_CHARSET;
- }
- if (Charset == FXFONT_SHIFTJIS_CHARSET || Charset == FXFONT_GB2312_CHARSET ||
- Charset == FXFONT_HANGEUL_CHARSET || Charset == FXFONT_CHINESEBIG5_CHARSET) {
- bCJK = TRUE;
- }
- if (m_pFontInfo == NULL) {
- pSubstFont->m_SubstFlags |= FXFONT_SUBST_STANDARD;
- return UseInternalSubst(pSubstFont, iBaseFont, italic_angle, old_weight, PitchFamily);
- }
- family = _GetFontFamily(family, nStyle);
- CFX_ByteString match = MatchInstalledFonts(_TT_NormalizeName(family));
- if (match.IsEmpty() && family != SubstName && (!bHasComma && (!bHasHypen || (bHasHypen && !bStyleAvail)))) {
- match = MatchInstalledFonts(_TT_NormalizeName(SubstName));
- }
- if (match.IsEmpty() && iBaseFont >= 12) {
- if (!bCJK) {
- if (!CheckSupportThirdPartFont(family, PitchFamily)) {
- if (italic_angle != 0) {
- bItalic = TRUE;
- } else {
- bItalic = FALSE;
- }
- weight = old_weight;
- }
+ bFirstItem = FALSE;
+ }
+ i += buf.GetLength() + 1;
+ }
+ }
+ weight = weight ? weight : FXFONT_FW_NORMAL;
+ int old_weight = weight;
+ if (nStyle) {
+ weight =
+ nStyle & FX_FONT_STYLE_BoldBold
+ ? 900
+ : (nStyle & FX_FONT_STYLE_Bold ? FXFONT_FW_BOLD : FXFONT_FW_NORMAL);
+ }
+ if (nStyle & FX_FONT_STYLE_Italic) {
+ bItalic = TRUE;
+ }
+ FX_BOOL bCJK = FALSE;
+ int iExact = 0;
+ int Charset = FXFONT_ANSI_CHARSET;
+ if (WindowCP) {
+ Charset = _GetCharsetFromCodePage(WindowCP);
+ } else if (iBaseFont == 12 && (flags & FXFONT_SYMBOLIC)) {
+ Charset = FXFONT_SYMBOL_CHARSET;
+ }
+ if (Charset == FXFONT_SHIFTJIS_CHARSET || Charset == FXFONT_GB2312_CHARSET ||
+ Charset == FXFONT_HANGEUL_CHARSET ||
+ Charset == FXFONT_CHINESEBIG5_CHARSET) {
+ bCJK = TRUE;
+ }
+ if (m_pFontInfo == NULL) {
+ pSubstFont->m_SubstFlags |= FXFONT_SUBST_STANDARD;
+ return UseInternalSubst(pSubstFont, iBaseFont, italic_angle, old_weight,
+ PitchFamily);
+ }
+ family = _GetFontFamily(family, nStyle);
+ CFX_ByteString match = MatchInstalledFonts(_TT_NormalizeName(family));
+ if (match.IsEmpty() && family != SubstName &&
+ (!bHasComma && (!bHasHypen || (bHasHypen && !bStyleAvail)))) {
+ match = MatchInstalledFonts(_TT_NormalizeName(SubstName));
+ }
+ if (match.IsEmpty() && iBaseFont >= 12) {
+ if (!bCJK) {
+ if (!CheckSupportThirdPartFont(family, PitchFamily)) {
+ if (italic_angle != 0) {
+ bItalic = TRUE;
} else {
- pSubstFont->m_bSubstOfCJK = TRUE;
- if (nStyle) {
- pSubstFont->m_WeightCJK = weight;
- } else {
- pSubstFont->m_WeightCJK = FXFONT_FW_NORMAL;
- }
- if (nStyle & FX_FONT_STYLE_Italic) {
- pSubstFont->m_bItlicCJK = TRUE;
- }
+ bItalic = FALSE;
}
+ weight = old_weight;
+ }
} else {
- italic_angle = 0;
- weight = nStyle & FX_FONT_STYLE_BoldBold ? 900 : (nStyle & FX_FONT_STYLE_Bold ? FXFONT_FW_BOLD : FXFONT_FW_NORMAL);
+ pSubstFont->m_bSubstOfCJK = TRUE;
+ if (nStyle) {
+ pSubstFont->m_WeightCJK = weight;
+ } else {
+ pSubstFont->m_WeightCJK = FXFONT_FW_NORMAL;
+ }
+ if (nStyle & FX_FONT_STYLE_Italic) {
+ pSubstFont->m_bItlicCJK = TRUE;
+ }
+ }
+ } else {
+ italic_angle = 0;
+ weight =
+ nStyle & FX_FONT_STYLE_BoldBold
+ ? 900
+ : (nStyle & FX_FONT_STYLE_Bold ? FXFONT_FW_BOLD : FXFONT_FW_NORMAL);
+ }
+ if (!match.IsEmpty() || iBaseFont < 12) {
+ pSubstFont->m_SubstFlags |= FXFONT_SUBST_EXACT;
+ if (!match.IsEmpty()) {
+ family = match;
}
- if (!match.IsEmpty() || iBaseFont < 12) {
- pSubstFont->m_SubstFlags |= FXFONT_SUBST_EXACT;
- if (!match.IsEmpty()) {
- family = match;
- }
- if (iBaseFont < 12) {
- if (nStyle && !(iBaseFont % 4)) {
- if ((nStyle & 0x3) == 1) {
- iBaseFont += 1;
- }
- if ((nStyle & 0x3) == 2) {
- iBaseFont += 3;
- }
- if ((nStyle & 0x3) == 3) {
- iBaseFont += 2;
- }
- }
- if (m_pFontMgr->m_ExternalFonts[iBaseFont].m_pFontData) {
- if (m_FoxitFaces[iBaseFont]) {
- return m_FoxitFaces[iBaseFont];
- }
- m_FoxitFaces[iBaseFont] = m_pFontMgr->GetFixedFace(m_pFontMgr->m_ExternalFonts[iBaseFont].m_pFontData,
- m_pFontMgr->m_ExternalFonts[iBaseFont].m_dwSize, 0);
- if (m_FoxitFaces[iBaseFont]) {
- return m_FoxitFaces[iBaseFont];
- }
- } else {
- family = g_Base14FontNames[iBaseFont];
- }
- pSubstFont->m_SubstFlags |= FXFONT_SUBST_STANDARD;
- }
- } else {
- if (flags & FXFONT_ITALIC) {
- bItalic = TRUE;
+ if (iBaseFont < 12) {
+ if (nStyle && !(iBaseFont % 4)) {
+ if ((nStyle & 0x3) == 1) {
+ iBaseFont += 1;
}
- }
- iExact = !match.IsEmpty();
- void* hFont = m_pFontInfo->MapFont(weight, bItalic, Charset, PitchFamily, family, iExact);
- if (iExact) {
- pSubstFont->m_SubstFlags |= FXFONT_SUBST_EXACT;
- }
- if (hFont == NULL) {
- if (bCJK) {
- if (italic_angle != 0) {
- bItalic = TRUE;
- } else {
- bItalic = FALSE;
- }
- weight = old_weight;
+ if ((nStyle & 0x3) == 2) {
+ iBaseFont += 3;
}
- if (!match.IsEmpty()) {
- hFont = m_pFontInfo->GetFont(match);
- if (hFont == NULL) {
- return UseInternalSubst(pSubstFont, iBaseFont, italic_angle, old_weight, PitchFamily);
- }
- } else {
- if (Charset == FXFONT_SYMBOL_CHARSET) {
-#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ || _FXM_PLATFORM_ == _FXM_PLATFORM_ANDROID_
- if (SubstName == FX_BSTRC("Symbol")) {
- pSubstFont->m_Family = "Chrome Symbol";
- pSubstFont->m_SubstFlags |= FXFONT_SUBST_STANDARD;
- pSubstFont->m_Charset = FXFONT_SYMBOL_CHARSET;
- if (m_FoxitFaces[12]) {
- return m_FoxitFaces[12];
- }
- const uint8_t* pFontData = NULL;
- FX_DWORD size = 0;
- m_pFontMgr->GetStandardFont(pFontData, size, 12);
- m_FoxitFaces[12] = m_pFontMgr->GetFixedFace(pFontData, size, 0);
- return m_FoxitFaces[12];
- }
-#endif
- pSubstFont->m_SubstFlags |= FXFONT_SUBST_NONSYMBOL;
- return FindSubstFont(family, bTrueType, flags & ~FXFONT_SYMBOLIC, weight, italic_angle, 0, pSubstFont);
- }
- if (Charset == FXFONT_ANSI_CHARSET) {
- pSubstFont->m_SubstFlags |= FXFONT_SUBST_STANDARD;
- return UseInternalSubst(pSubstFont, iBaseFont, italic_angle, old_weight, PitchFamily);
- }
- int index = m_CharsetArray.Find(Charset);
- if (index < 0) {
- return UseInternalSubst(pSubstFont, iBaseFont, italic_angle, old_weight, PitchFamily);
- }
- hFont = m_pFontInfo->GetFont(m_FaceArray[index]);
+ if ((nStyle & 0x3) == 3) {
+ iBaseFont += 2;
}
- }
- pSubstFont->m_ExtHandle = m_pFontInfo->RetainFont(hFont);
- if (hFont == NULL) {
- return NULL;
- }
- m_pFontInfo->GetFaceName(hFont, SubstName);
- if (Charset == FXFONT_DEFAULT_CHARSET) {
- m_pFontInfo->GetFontCharset(hFont, Charset);
- }
- FX_DWORD ttc_size = m_pFontInfo->GetFontData(hFont, 0x74746366, NULL, 0);
- FX_DWORD font_size = m_pFontInfo->GetFontData(hFont, 0, NULL, 0);
- if(font_size == 0 && ttc_size == 0) {
- m_pFontInfo->DeleteFont(hFont);
- return NULL;
- }
- FXFT_Face face = NULL;
- if (ttc_size) {
- uint8_t temp[1024];
- m_pFontInfo->GetFontData(hFont, 0x74746366, temp, 1024);
- FX_DWORD checksum = 0;
- for (int i = 0; i < 256; i ++) {
- checksum += ((FX_DWORD*)temp)[i];
+ }
+ if (m_pFontMgr->m_ExternalFonts[iBaseFont].m_pFontData) {
+ if (m_FoxitFaces[iBaseFont]) {
+ return m_FoxitFaces[iBaseFont];
}
- uint8_t* pFontData;
- face = m_pFontMgr->GetCachedTTCFace(ttc_size, checksum, ttc_size - font_size, pFontData);
- if (face == NULL) {
- pFontData = FX_Alloc(uint8_t, ttc_size);
- m_pFontInfo->GetFontData(hFont, 0x74746366, pFontData, ttc_size);
- face = m_pFontMgr->AddCachedTTCFace(ttc_size, checksum, pFontData, ttc_size,
- ttc_size - font_size);
+ m_FoxitFaces[iBaseFont] = m_pFontMgr->GetFixedFace(
+ m_pFontMgr->m_ExternalFonts[iBaseFont].m_pFontData,
+ m_pFontMgr->m_ExternalFonts[iBaseFont].m_dwSize, 0);
+ if (m_FoxitFaces[iBaseFont]) {
+ return m_FoxitFaces[iBaseFont];
}
+ } else {
+ family = g_Base14FontNames[iBaseFont];
+ }
+ pSubstFont->m_SubstFlags |= FXFONT_SUBST_STANDARD;
+ }
+ } else {
+ if (flags & FXFONT_ITALIC) {
+ bItalic = TRUE;
+ }
+ }
+ iExact = !match.IsEmpty();
+ void* hFont = m_pFontInfo->MapFont(weight, bItalic, Charset, PitchFamily,
+ family, iExact);
+ if (iExact) {
+ pSubstFont->m_SubstFlags |= FXFONT_SUBST_EXACT;
+ }
+ if (hFont == NULL) {
+ if (bCJK) {
+ if (italic_angle != 0) {
+ bItalic = TRUE;
+ } else {
+ bItalic = FALSE;
+ }
+ weight = old_weight;
+ }
+ if (!match.IsEmpty()) {
+ hFont = m_pFontInfo->GetFont(match);
+ if (hFont == NULL) {
+ return UseInternalSubst(pSubstFont, iBaseFont, italic_angle, old_weight,
+ PitchFamily);
+ }
} else {
- uint8_t* pFontData;
- face = m_pFontMgr->GetCachedFace(SubstName, weight, bItalic, pFontData);
- if (face == NULL) {
- pFontData = FX_Alloc(uint8_t, font_size);
- m_pFontInfo->GetFontData(hFont, 0, pFontData, font_size);
- face = m_pFontMgr->AddCachedFace(SubstName, weight, bItalic, pFontData, font_size, m_pFontInfo->GetFaceIndex(hFont));
+ if (Charset == FXFONT_SYMBOL_CHARSET) {
+#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ || \
+ _FXM_PLATFORM_ == _FXM_PLATFORM_ANDROID_
+ if (SubstName == FX_BSTRC("Symbol")) {
+ pSubstFont->m_Family = "Chrome Symbol";
+ pSubstFont->m_SubstFlags |= FXFONT_SUBST_STANDARD;
+ pSubstFont->m_Charset = FXFONT_SYMBOL_CHARSET;
+ if (m_FoxitFaces[12]) {
+ return m_FoxitFaces[12];
+ }
+ const uint8_t* pFontData = NULL;
+ FX_DWORD size = 0;
+ m_pFontMgr->GetStandardFont(pFontData, size, 12);
+ m_FoxitFaces[12] = m_pFontMgr->GetFixedFace(pFontData, size, 0);
+ return m_FoxitFaces[12];
}
- }
+#endif
+ pSubstFont->m_SubstFlags |= FXFONT_SUBST_NONSYMBOL;
+ return FindSubstFont(family, bTrueType, flags & ~FXFONT_SYMBOLIC,
+ weight, italic_angle, 0, pSubstFont);
+ }
+ if (Charset == FXFONT_ANSI_CHARSET) {
+ pSubstFont->m_SubstFlags |= FXFONT_SUBST_STANDARD;
+ return UseInternalSubst(pSubstFont, iBaseFont, italic_angle, old_weight,
+ PitchFamily);
+ }
+ int index = m_CharsetArray.Find(Charset);
+ if (index < 0) {
+ return UseInternalSubst(pSubstFont, iBaseFont, italic_angle, old_weight,
+ PitchFamily);
+ }
+ hFont = m_pFontInfo->GetFont(m_FaceArray[index]);
+ }
+ }
+ pSubstFont->m_ExtHandle = m_pFontInfo->RetainFont(hFont);
+ if (hFont == NULL) {
+ return NULL;
+ }
+ m_pFontInfo->GetFaceName(hFont, SubstName);
+ if (Charset == FXFONT_DEFAULT_CHARSET) {
+ m_pFontInfo->GetFontCharset(hFont, Charset);
+ }
+ FX_DWORD ttc_size = m_pFontInfo->GetFontData(hFont, 0x74746366, NULL, 0);
+ FX_DWORD font_size = m_pFontInfo->GetFontData(hFont, 0, NULL, 0);
+ if (font_size == 0 && ttc_size == 0) {
+ m_pFontInfo->DeleteFont(hFont);
+ return NULL;
+ }
+ FXFT_Face face = NULL;
+ if (ttc_size) {
+ uint8_t temp[1024];
+ m_pFontInfo->GetFontData(hFont, 0x74746366, temp, 1024);
+ FX_DWORD checksum = 0;
+ for (int i = 0; i < 256; i++) {
+ checksum += ((FX_DWORD*)temp)[i];
+ }
+ uint8_t* pFontData;
+ face = m_pFontMgr->GetCachedTTCFace(ttc_size, checksum,
+ ttc_size - font_size, pFontData);
if (face == NULL) {
- m_pFontInfo->DeleteFont(hFont);
- return NULL;
- }
- pSubstFont->m_Family = SubstName;
- pSubstFont->m_Charset = Charset;
- FX_BOOL bNeedUpdateWeight = FALSE;
- if (FXFT_Is_Face_Bold(face)) {
- if (weight == FXFONT_FW_BOLD) {
- bNeedUpdateWeight = FALSE;
- } else {
- bNeedUpdateWeight = TRUE;
- }
+ pFontData = FX_Alloc(uint8_t, ttc_size);
+ m_pFontInfo->GetFontData(hFont, 0x74746366, pFontData, ttc_size);
+ face = m_pFontMgr->AddCachedTTCFace(ttc_size, checksum, pFontData,
+ ttc_size, ttc_size - font_size);
+ }
+ } else {
+ uint8_t* pFontData;
+ face = m_pFontMgr->GetCachedFace(SubstName, weight, bItalic, pFontData);
+ if (face == NULL) {
+ pFontData = FX_Alloc(uint8_t, font_size);
+ m_pFontInfo->GetFontData(hFont, 0, pFontData, font_size);
+ face = m_pFontMgr->AddCachedFace(SubstName, weight, bItalic, pFontData,
+ font_size,
+ m_pFontInfo->GetFaceIndex(hFont));
+ }
+ }
+ if (face == NULL) {
+ m_pFontInfo->DeleteFont(hFont);
+ return NULL;
+ }
+ pSubstFont->m_Family = SubstName;
+ pSubstFont->m_Charset = Charset;
+ FX_BOOL bNeedUpdateWeight = FALSE;
+ if (FXFT_Is_Face_Bold(face)) {
+ if (weight == FXFONT_FW_BOLD) {
+ bNeedUpdateWeight = FALSE;
} else {
- if (weight == FXFONT_FW_NORMAL) {
- bNeedUpdateWeight = FALSE;
- } else {
- bNeedUpdateWeight = TRUE;
- }
+ bNeedUpdateWeight = TRUE;
}
- if (bNeedUpdateWeight) {
- pSubstFont->m_Weight = weight;
- }
- if (bItalic && !FXFT_Is_Face_Italic(face)) {
- if (italic_angle == 0) {
- italic_angle = -12;
- } else if (FXSYS_abs(italic_angle) < 5) {
- italic_angle = 0;
- }
- pSubstFont->m_ItalicAngle = italic_angle;
+ } else {
+ if (weight == FXFONT_FW_NORMAL) {
+ bNeedUpdateWeight = FALSE;
+ } else {
+ bNeedUpdateWeight = TRUE;
+ }
+ }
+ if (bNeedUpdateWeight) {
+ pSubstFont->m_Weight = weight;
+ }
+ if (bItalic && !FXFT_Is_Face_Italic(face)) {
+ if (italic_angle == 0) {
+ italic_angle = -12;
+ } else if (FXSYS_abs(italic_angle) < 5) {
+ italic_angle = 0;
}
- m_pFontInfo->DeleteFont(hFont);
- return face;
+ pSubstFont->m_ItalicAngle = italic_angle;
+ }
+ m_pFontInfo->DeleteFont(hFont);
+ return face;
}
extern "C" {
- unsigned long _FTStreamRead(FXFT_Stream stream, unsigned long offset,
- unsigned char* buffer, unsigned long count);
- void _FTStreamClose(FXFT_Stream stream);
+unsigned long _FTStreamRead(FXFT_Stream stream,
+ unsigned long offset,
+ unsigned char* buffer,
+ unsigned long count);
+void _FTStreamClose(FXFT_Stream stream);
};
-CFontFileFaceInfo::CFontFileFaceInfo()
-{
- m_pFile = NULL;
- m_Face = NULL;
- m_Charsets = 0;
- m_FileSize = 0;
- m_FontOffset = 0;
- m_Weight = 0;
- m_bItalic = FALSE;
- m_PitchFamily = 0;
+CFontFileFaceInfo::CFontFileFaceInfo() {
+ m_pFile = NULL;
+ m_Face = NULL;
+ m_Charsets = 0;
+ m_FileSize = 0;
+ m_FontOffset = 0;
+ m_Weight = 0;
+ m_bItalic = FALSE;
+ m_PitchFamily = 0;
}
-CFontFileFaceInfo::~CFontFileFaceInfo()
-{
- if (m_Face) {
- FXFT_Done_Face(m_Face);
- }
- m_Face = NULL;
+CFontFileFaceInfo::~CFontFileFaceInfo() {
+ if (m_Face) {
+ FXFT_Done_Face(m_Face);
+ }
+ m_Face = NULL;
}
-extern FX_BOOL _LoadFile(FXFT_Library library, FXFT_Face* Face, IFX_FileRead* pFile, FXFT_Stream* stream);
+extern FX_BOOL _LoadFile(FXFT_Library library,
+ FXFT_Face* Face,
+ IFX_FileRead* pFile,
+ FXFT_Stream* stream);
#if _FX_OS_ == _FX_ANDROID_
-IFX_SystemFontInfo* IFX_SystemFontInfo::CreateDefault()
-{
- return NULL;
+IFX_SystemFontInfo* IFX_SystemFontInfo::CreateDefault() {
+ return NULL;
}
#endif
-CFX_FolderFontInfo::CFX_FolderFontInfo()
-{
-}
-CFX_FolderFontInfo::~CFX_FolderFontInfo()
-{
- FX_POSITION pos = m_FontList.GetStartPosition();
- while (pos) {
- CFX_ByteString key;
- void* value;
- m_FontList.GetNextAssoc(pos, key, value);
- delete (CFontFaceInfo*)value;
- }
+CFX_FolderFontInfo::CFX_FolderFontInfo() {}
+CFX_FolderFontInfo::~CFX_FolderFontInfo() {
+ FX_POSITION pos = m_FontList.GetStartPosition();
+ while (pos) {
+ CFX_ByteString key;
+ void* value;
+ m_FontList.GetNextAssoc(pos, key, value);
+ delete (CFontFaceInfo*)value;
+ }
}
-void CFX_FolderFontInfo::AddPath(const CFX_ByteStringC& path)
-{
- m_PathList.Add(path);
+void CFX_FolderFontInfo::AddPath(const CFX_ByteStringC& path) {
+ m_PathList.Add(path);
}
-void CFX_FolderFontInfo::Release()
-{
- delete this;
+void CFX_FolderFontInfo::Release() {
+ delete this;
}
-FX_BOOL CFX_FolderFontInfo::EnumFontList(CFX_FontMapper* pMapper)
-{
- m_pMapper = pMapper;
- for (int i = 0; i < m_PathList.GetSize(); i ++) {
- ScanPath(m_PathList[i]);
- }
- return TRUE;
+FX_BOOL CFX_FolderFontInfo::EnumFontList(CFX_FontMapper* pMapper) {
+ m_pMapper = pMapper;
+ for (int i = 0; i < m_PathList.GetSize(); i++) {
+ ScanPath(m_PathList[i]);
+ }
+ return TRUE;
}
-void CFX_FolderFontInfo::ScanPath(CFX_ByteString& path)
-{
- void* handle = FX_OpenFolder(path);
- if (handle == NULL) {
- return;
- }
- CFX_ByteString filename;
- FX_BOOL bFolder;
- while (FX_GetNextFile(handle, filename, bFolder)) {
- if (bFolder) {
- if (filename == "." || filename == "..") {
- continue;
- }
- } else {
- CFX_ByteString ext = filename.Right(4);
- ext.MakeUpper();
- if (ext != ".TTF" && ext != ".OTF" && ext != ".TTC") {
- continue;
- }
- }
- CFX_ByteString fullpath = path;
-#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
- fullpath += "\\";
+void CFX_FolderFontInfo::ScanPath(CFX_ByteString& path) {
+ void* handle = FX_OpenFolder(path);
+ if (handle == NULL) {
+ return;
+ }
+ CFX_ByteString filename;
+ FX_BOOL bFolder;
+ while (FX_GetNextFile(handle, filename, bFolder)) {
+ if (bFolder) {
+ if (filename == "." || filename == "..") {
+ continue;
+ }
+ } else {
+ CFX_ByteString ext = filename.Right(4);
+ ext.MakeUpper();
+ if (ext != ".TTF" && ext != ".OTF" && ext != ".TTC") {
+ continue;
+ }
+ }
+ CFX_ByteString fullpath = path;
+#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
+ fullpath += "\\";
#else
- fullpath += "/";
+ fullpath += "/";
#endif
- fullpath += filename;
- if (bFolder) {
- ScanPath(fullpath);
- } else {
- ScanFile(fullpath);
- }
- }
- FX_CloseFolder(handle);
-}
-void CFX_FolderFontInfo::ScanFile(CFX_ByteString& path)
-{
- FXSYS_FILE* pFile = FXSYS_fopen(path, "rb");
- if (pFile == NULL) {
- return;
- }
- FXSYS_fseek(pFile, 0, FXSYS_SEEK_END);
- FX_DWORD filesize = FXSYS_ftell(pFile);
- uint8_t buffer[16];
- FXSYS_fseek(pFile, 0, FXSYS_SEEK_SET);
- size_t readCnt = FXSYS_fread(buffer, 12, 1, pFile);
- if (readCnt != 1) {
- FXSYS_fclose(pFile);
- return;
- }
-
- if (GET_TT_LONG(buffer) == 0x74746366) {
- FX_DWORD nFaces = GET_TT_LONG(buffer + 8);
- if (nFaces > std::numeric_limits<FX_DWORD>::max() / 4) {
- FXSYS_fclose(pFile);
- return;
- }
- FX_DWORD face_bytes = nFaces * 4;
- uint8_t* offsets = FX_Alloc(uint8_t, face_bytes);
- readCnt = FXSYS_fread(offsets, 1, face_bytes, pFile);
- if (readCnt != face_bytes) {
- FX_Free(offsets);
- FXSYS_fclose(pFile);
- return;
- }
- for (FX_DWORD i = 0; i < nFaces; i ++) {
- uint8_t* p = offsets + i * 4;
- ReportFace(path, pFile, filesize, GET_TT_LONG(p));
- }
- FX_Free(offsets);
+ fullpath += filename;
+ if (bFolder) {
+ ScanPath(fullpath);
} else {
- ReportFace(path, pFile, filesize, 0);
+ ScanFile(fullpath);
}
- FXSYS_fclose(pFile);
+ }
+ FX_CloseFolder(handle);
}
-void CFX_FolderFontInfo::ReportFace(CFX_ByteString& path, FXSYS_FILE* pFile, FX_DWORD filesize, FX_DWORD offset)
-{
- FXSYS_fseek(pFile, offset, FXSYS_SEEK_SET);
- char buffer[16];
- if (!FXSYS_fread(buffer, 12, 1, pFile)) {
- return;
- }
- FX_DWORD nTables = GET_TT_SHORT(buffer + 4);
- CFX_ByteString tables = _FPDF_ReadStringFromFile(pFile, nTables * 16);
- if (tables.IsEmpty()) {
- return;
- }
- CFX_ByteString names = _FPDF_LoadTableFromTT(pFile, tables, nTables, 0x6e616d65);
- CFX_ByteString facename = _FPDF_GetNameFromTT(names, 1);
- CFX_ByteString style = _FPDF_GetNameFromTT(names, 2);
- if (style != "Regular") {
- facename += " " + style;
- }
- void* p;
- if (m_FontList.Lookup(facename, p)) {
- return;
- }
- CFontFaceInfo* pInfo = new CFontFaceInfo;
- pInfo->m_FilePath = path;
- pInfo->m_FaceName = facename;
- pInfo->m_FontTables = tables;
- pInfo->m_FontOffset = offset;
- pInfo->m_FileSize = filesize;
- pInfo->m_Charsets = 0;
- CFX_ByteString os2 = _FPDF_LoadTableFromTT(pFile, tables, nTables, 0x4f532f32);
- if (os2.GetLength() >= 86) {
- const uint8_t* p = (const uint8_t*)os2 + 78;
- FX_DWORD codepages = GET_TT_LONG(p);
- if (codepages & (1 << 17)) {
- m_pMapper->AddInstalledFont(facename, FXFONT_SHIFTJIS_CHARSET);
- pInfo->m_Charsets |= CHARSET_FLAG_SHIFTJIS;
- }
- if (codepages & (1 << 18)) {
- m_pMapper->AddInstalledFont(facename, FXFONT_GB2312_CHARSET);
- pInfo->m_Charsets |= CHARSET_FLAG_GB;
- }
- if (codepages & (1 << 20)) {
- m_pMapper->AddInstalledFont(facename, FXFONT_CHINESEBIG5_CHARSET);
- pInfo->m_Charsets |= CHARSET_FLAG_BIG5;
- }
- if ((codepages & (1 << 19)) || (codepages & (1 << 21))) {
- m_pMapper->AddInstalledFont(facename, FXFONT_HANGEUL_CHARSET);
- pInfo->m_Charsets |= CHARSET_FLAG_KOREAN;
- }
- if (codepages & (1 << 31)) {
- m_pMapper->AddInstalledFont(facename, FXFONT_SYMBOL_CHARSET);
- pInfo->m_Charsets |= CHARSET_FLAG_SYMBOL;
- }
- }
- m_pMapper->AddInstalledFont(facename, FXFONT_ANSI_CHARSET);
- pInfo->m_Charsets |= CHARSET_FLAG_ANSI;
- pInfo->m_Styles = 0;
- if (style.Find(FX_BSTRC("Bold")) > -1) {
- pInfo->m_Styles |= FXFONT_BOLD;
- }
- if (style.Find(FX_BSTRC("Italic")) > -1 || style.Find(FX_BSTRC("Oblique")) > -1) {
- pInfo->m_Styles |= FXFONT_ITALIC;
- }
- if (facename.Find(FX_BSTRC("Serif")) > -1) {
- pInfo->m_Styles |= FXFONT_SERIF;
- }
- m_FontList.SetAt(facename, pInfo);
-}
-void* CFX_FolderFontInfo::MapFont(int weight, FX_BOOL bItalic, int charset, int pitch_family, const FX_CHAR* family, int& iExact)
-{
- return NULL;
+void CFX_FolderFontInfo::ScanFile(CFX_ByteString& path) {
+ FXSYS_FILE* pFile = FXSYS_fopen(path, "rb");
+ if (pFile == NULL) {
+ return;
+ }
+ FXSYS_fseek(pFile, 0, FXSYS_SEEK_END);
+ FX_DWORD filesize = FXSYS_ftell(pFile);
+ uint8_t buffer[16];
+ FXSYS_fseek(pFile, 0, FXSYS_SEEK_SET);
+ size_t readCnt = FXSYS_fread(buffer, 12, 1, pFile);
+ if (readCnt != 1) {
+ FXSYS_fclose(pFile);
+ return;
+ }
+
+ if (GET_TT_LONG(buffer) == 0x74746366) {
+ FX_DWORD nFaces = GET_TT_LONG(buffer + 8);
+ if (nFaces > std::numeric_limits<FX_DWORD>::max() / 4) {
+ FXSYS_fclose(pFile);
+ return;
+ }
+ FX_DWORD face_bytes = nFaces * 4;
+ uint8_t* offsets = FX_Alloc(uint8_t, face_bytes);
+ readCnt = FXSYS_fread(offsets, 1, face_bytes, pFile);
+ if (readCnt != face_bytes) {
+ FX_Free(offsets);
+ FXSYS_fclose(pFile);
+ return;
+ }
+ for (FX_DWORD i = 0; i < nFaces; i++) {
+ uint8_t* p = offsets + i * 4;
+ ReportFace(path, pFile, filesize, GET_TT_LONG(p));
+ }
+ FX_Free(offsets);
+ } else {
+ ReportFace(path, pFile, filesize, 0);
+ }
+ FXSYS_fclose(pFile);
}
-void* CFX_FolderFontInfo::GetFont(const FX_CHAR* face)
-{
- void* p;
- if (!m_FontList.Lookup(face, p)) {
- return NULL;
- }
- return p;
+void CFX_FolderFontInfo::ReportFace(CFX_ByteString& path,
+ FXSYS_FILE* pFile,
+ FX_DWORD filesize,
+ FX_DWORD offset) {
+ FXSYS_fseek(pFile, offset, FXSYS_SEEK_SET);
+ char buffer[16];
+ if (!FXSYS_fread(buffer, 12, 1, pFile)) {
+ return;
+ }
+ FX_DWORD nTables = GET_TT_SHORT(buffer + 4);
+ CFX_ByteString tables = _FPDF_ReadStringFromFile(pFile, nTables * 16);
+ if (tables.IsEmpty()) {
+ return;
+ }
+ CFX_ByteString names =
+ _FPDF_LoadTableFromTT(pFile, tables, nTables, 0x6e616d65);
+ CFX_ByteString facename = _FPDF_GetNameFromTT(names, 1);
+ CFX_ByteString style = _FPDF_GetNameFromTT(names, 2);
+ if (style != "Regular") {
+ facename += " " + style;
+ }
+ void* p;
+ if (m_FontList.Lookup(facename, p)) {
+ return;
+ }
+ CFontFaceInfo* pInfo = new CFontFaceInfo;
+ pInfo->m_FilePath = path;
+ pInfo->m_FaceName = facename;
+ pInfo->m_FontTables = tables;
+ pInfo->m_FontOffset = offset;
+ pInfo->m_FileSize = filesize;
+ pInfo->m_Charsets = 0;
+ CFX_ByteString os2 =
+ _FPDF_LoadTableFromTT(pFile, tables, nTables, 0x4f532f32);
+ if (os2.GetLength() >= 86) {
+ const uint8_t* p = (const uint8_t*)os2 + 78;
+ FX_DWORD codepages = GET_TT_LONG(p);
+ if (codepages & (1 << 17)) {
+ m_pMapper->AddInstalledFont(facename, FXFONT_SHIFTJIS_CHARSET);
+ pInfo->m_Charsets |= CHARSET_FLAG_SHIFTJIS;
+ }
+ if (codepages & (1 << 18)) {
+ m_pMapper->AddInstalledFont(facename, FXFONT_GB2312_CHARSET);
+ pInfo->m_Charsets |= CHARSET_FLAG_GB;
+ }
+ if (codepages & (1 << 20)) {
+ m_pMapper->AddInstalledFont(facename, FXFONT_CHINESEBIG5_CHARSET);
+ pInfo->m_Charsets |= CHARSET_FLAG_BIG5;
+ }
+ if ((codepages & (1 << 19)) || (codepages & (1 << 21))) {
+ m_pMapper->AddInstalledFont(facename, FXFONT_HANGEUL_CHARSET);
+ pInfo->m_Charsets |= CHARSET_FLAG_KOREAN;
+ }
+ if (codepages & (1 << 31)) {
+ m_pMapper->AddInstalledFont(facename, FXFONT_SYMBOL_CHARSET);
+ pInfo->m_Charsets |= CHARSET_FLAG_SYMBOL;
+ }
+ }
+ m_pMapper->AddInstalledFont(facename, FXFONT_ANSI_CHARSET);
+ pInfo->m_Charsets |= CHARSET_FLAG_ANSI;
+ pInfo->m_Styles = 0;
+ if (style.Find(FX_BSTRC("Bold")) > -1) {
+ pInfo->m_Styles |= FXFONT_BOLD;
+ }
+ if (style.Find(FX_BSTRC("Italic")) > -1 ||
+ style.Find(FX_BSTRC("Oblique")) > -1) {
+ pInfo->m_Styles |= FXFONT_ITALIC;
+ }
+ if (facename.Find(FX_BSTRC("Serif")) > -1) {
+ pInfo->m_Styles |= FXFONT_SERIF;
+ }
+ m_FontList.SetAt(facename, pInfo);
}
-FX_DWORD CFX_FolderFontInfo::GetFontData(void* hFont, FX_DWORD table, uint8_t* buffer, FX_DWORD size)
-{
- if (hFont == NULL) {
- return 0;
- }
- CFontFaceInfo* pFont = (CFontFaceInfo*)hFont;
- FXSYS_FILE* pFile = NULL;
- if (size > 0) {
- pFile = FXSYS_fopen(pFont->m_FilePath, "rb");
- if (pFile == NULL) {
- return 0;
- }
- }
- FX_DWORD datasize = 0;
- FX_DWORD offset;
- if (table == 0) {
- datasize = pFont->m_FontOffset ? 0 : pFont->m_FileSize;
- offset = 0;
- } else if (table == 0x74746366) {
- datasize = pFont->m_FontOffset ? pFont->m_FileSize : 0;
- offset = 0;
- } else {
- FX_DWORD nTables = pFont->m_FontTables.GetLength() / 16;
- for (FX_DWORD i = 0; i < nTables; i ++) {
- const uint8_t* p = (const uint8_t*)pFont->m_FontTables + i * 16;
- if (GET_TT_LONG(p) == table) {
- offset = GET_TT_LONG(p + 8);
- datasize = GET_TT_LONG(p + 12);
- }
- }
- }
- if (datasize && size >= datasize && pFile) {
- FXSYS_fseek(pFile, offset, FXSYS_SEEK_SET);
- FXSYS_fread(buffer, datasize, 1, pFile);
- }
- if (pFile) {
- FXSYS_fclose(pFile);
- }
- return datasize;
+void* CFX_FolderFontInfo::MapFont(int weight,
+ FX_BOOL bItalic,
+ int charset,
+ int pitch_family,
+ const FX_CHAR* family,
+ int& iExact) {
+ return NULL;
}
-void CFX_FolderFontInfo::DeleteFont(void* hFont)
-{
+void* CFX_FolderFontInfo::GetFont(const FX_CHAR* face) {
+ void* p;
+ if (!m_FontList.Lookup(face, p)) {
+ return NULL;
+ }
+ return p;
}
-FX_BOOL CFX_FolderFontInfo::GetFaceName(void* hFont, CFX_ByteString& name)
-{
- if (hFont == NULL) {
- return FALSE;
- }
- CFontFaceInfo* pFont = (CFontFaceInfo*)hFont;
- name = pFont->m_FaceName;
- return TRUE;
+FX_DWORD CFX_FolderFontInfo::GetFontData(void* hFont,
+ FX_DWORD table,
+ uint8_t* buffer,
+ FX_DWORD size) {
+ if (hFont == NULL) {
+ return 0;
+ }
+ CFontFaceInfo* pFont = (CFontFaceInfo*)hFont;
+ FXSYS_FILE* pFile = NULL;
+ if (size > 0) {
+ pFile = FXSYS_fopen(pFont->m_FilePath, "rb");
+ if (pFile == NULL) {
+ return 0;
+ }
+ }
+ FX_DWORD datasize = 0;
+ FX_DWORD offset;
+ if (table == 0) {
+ datasize = pFont->m_FontOffset ? 0 : pFont->m_FileSize;
+ offset = 0;
+ } else if (table == 0x74746366) {
+ datasize = pFont->m_FontOffset ? pFont->m_FileSize : 0;
+ offset = 0;
+ } else {
+ FX_DWORD nTables = pFont->m_FontTables.GetLength() / 16;
+ for (FX_DWORD i = 0; i < nTables; i++) {
+ const uint8_t* p = (const uint8_t*)pFont->m_FontTables + i * 16;
+ if (GET_TT_LONG(p) == table) {
+ offset = GET_TT_LONG(p + 8);
+ datasize = GET_TT_LONG(p + 12);
+ }
+ }
+ }
+ if (datasize && size >= datasize && pFile) {
+ FXSYS_fseek(pFile, offset, FXSYS_SEEK_SET);
+ FXSYS_fread(buffer, datasize, 1, pFile);
+ }
+ if (pFile) {
+ FXSYS_fclose(pFile);
+ }
+ return datasize;
}
-FX_BOOL CFX_FolderFontInfo::GetFontCharset(void* hFont, int& charset)
-{
+void CFX_FolderFontInfo::DeleteFont(void* hFont) {}
+FX_BOOL CFX_FolderFontInfo::GetFaceName(void* hFont, CFX_ByteString& name) {
+ if (hFont == NULL) {
return FALSE;
+ }
+ CFontFaceInfo* pFont = (CFontFaceInfo*)hFont;
+ name = pFont->m_FaceName;
+ return TRUE;
+}
+FX_BOOL CFX_FolderFontInfo::GetFontCharset(void* hFont, int& charset) {
+ return FALSE;
}
diff --git a/core/src/fxge/ge/fx_ge_linux.cpp b/core/src/fxge/ge/fx_ge_linux.cpp
index 861afd259c..61202597f5 100644
--- a/core/src/fxge/ge/fx_ge_linux.cpp
+++ b/core/src/fxge/ge/fx_ge_linux.cpp
@@ -10,10 +10,9 @@
#if _FXM_PLATFORM_ == _FXM_PLATFORM_LINUX_
static const struct {
- const FX_CHAR* m_pName;
- const FX_CHAR* m_pSubstName;
-}
-Base14Substs[] = {
+ const FX_CHAR* m_pName;
+ const FX_CHAR* m_pSubstName;
+} Base14Substs[] = {
{"Courier", "Courier New"},
{"Courier-Bold", "Courier New Bold"},
{"Courier-BoldOblique", "Courier New Bold Italic"},
@@ -27,205 +26,222 @@ Base14Substs[] = {
{"Times-BoldItalic", "Times New Roman Bold Italic"},
{"Times-Italic", "Times New Roman Italic"},
};
-class CFX_LinuxFontInfo : public CFX_FolderFontInfo
-{
-public:
- void* MapFont(int weight, FX_BOOL bItalic, int charset, int pitch_family, const FX_CHAR* family, int& iExact) override;
- FX_BOOL ParseFontCfg();
- void* FindFont(int weight, FX_BOOL bItalic, int charset, int pitch_family, const FX_CHAR* family, FX_BOOL bMatchName);
+class CFX_LinuxFontInfo : public CFX_FolderFontInfo {
+ public:
+ void* MapFont(int weight,
+ FX_BOOL bItalic,
+ int charset,
+ int pitch_family,
+ const FX_CHAR* family,
+ int& iExact) override;
+ FX_BOOL ParseFontCfg();
+ void* FindFont(int weight,
+ FX_BOOL bItalic,
+ int charset,
+ int pitch_family,
+ const FX_CHAR* family,
+ FX_BOOL bMatchName);
};
-#define LINUX_GPNAMESIZE 6
+#define LINUX_GPNAMESIZE 6
static const struct {
- const FX_CHAR* NameArr[LINUX_GPNAMESIZE];
-}
-LinuxGpFontList[] = {
- {{"TakaoPGothic", "VL PGothic", "IPAPGothic", "VL Gothic", "Kochi Gothic", "VL Gothic regular"}},
- {{"TakaoGothic", "VL Gothic", "IPAGothic", "Kochi Gothic", NULL, "VL Gothic regular"}},
- {{"TakaoPMincho", "IPAPMincho", "VL Gothic", "Kochi Mincho", NULL, "VL Gothic regular"}},
- {{"TakaoMincho", "IPAMincho", "VL Gothic", "Kochi Mincho", NULL, "VL Gothic regular"}},
+ const FX_CHAR* NameArr[LINUX_GPNAMESIZE];
+} LinuxGpFontList[] = {
+ {{"TakaoPGothic", "VL PGothic", "IPAPGothic", "VL Gothic", "Kochi Gothic",
+ "VL Gothic regular"}},
+ {{"TakaoGothic", "VL Gothic", "IPAGothic", "Kochi Gothic", NULL,
+ "VL Gothic regular"}},
+ {{"TakaoPMincho", "IPAPMincho", "VL Gothic", "Kochi Mincho", NULL,
+ "VL Gothic regular"}},
+ {{"TakaoMincho", "IPAMincho", "VL Gothic", "Kochi Mincho", NULL,
+ "VL Gothic regular"}},
};
static const FX_CHAR* const g_LinuxGbFontList[] = {
- "AR PL UMing CN Light",
- "WenQuanYi Micro Hei",
- "AR PL UKai CN",
+ "AR PL UMing CN Light", "WenQuanYi Micro Hei", "AR PL UKai CN",
};
static const FX_CHAR* const g_LinuxB5FontList[] = {
- "AR PL UMing TW Light",
- "WenQuanYi Micro Hei",
- "AR PL UKai TW",
+ "AR PL UMing TW Light", "WenQuanYi Micro Hei", "AR PL UKai TW",
};
static const FX_CHAR* const g_LinuxHGFontList[] = {
"UnDotum",
};
-static int32_t GetJapanesePreference(const FX_CHAR* facearr, int weight, int picth_family)
-{
- CFX_ByteString face = facearr;
- if (face.Find("Gothic") >= 0 || face.Find("\x83\x53\x83\x56\x83\x62\x83\x4e") >= 0) {
- if (face.Find("PGothic") >= 0 || face.Find("\x82\x6f\x83\x53\x83\x56\x83\x62\x83\x4e") >= 0) {
- return 0;
- }
- return 1;
+static int32_t GetJapanesePreference(const FX_CHAR* facearr,
+ int weight,
+ int picth_family) {
+ CFX_ByteString face = facearr;
+ if (face.Find("Gothic") >= 0 ||
+ face.Find("\x83\x53\x83\x56\x83\x62\x83\x4e") >= 0) {
+ if (face.Find("PGothic") >= 0 ||
+ face.Find("\x82\x6f\x83\x53\x83\x56\x83\x62\x83\x4e") >= 0) {
+ return 0;
}
- if (face.Find("Mincho") >= 0 || face.Find("\x96\xbe\x92\xa9") >= 0) {
- if (face.Find("PMincho") >= 0 || face.Find("\x82\x6f\x96\xbe\x92\xa9") >= 0) {
- return 2;
- }
- return 3;
- }
- if (!(picth_family & FXFONT_FF_ROMAN) && weight > 400) {
- return 0;
- }
- return 2;
-}
-void* CFX_LinuxFontInfo::MapFont(int weight, FX_BOOL bItalic, int charset, int pitch_family, const FX_CHAR* cstr_face, int& iExact)
-{
- CFX_ByteString face = cstr_face;
- int iBaseFont;
- for (iBaseFont = 0; iBaseFont < 12; iBaseFont ++)
- if (face == CFX_ByteStringC(Base14Substs[iBaseFont].m_pName)) {
- face = Base14Substs[iBaseFont].m_pSubstName;
- iExact = 1;
- break;
- }
- if (iBaseFont < 12) {
- return GetFont(face);
- }
- void* p = NULL;
- FX_BOOL bCJK = TRUE;
- switch (charset) {
- case FXFONT_SHIFTJIS_CHARSET: {
- int32_t index = GetJapanesePreference(cstr_face, weight, pitch_family);
- if (index < 0) {
- break;
- }
- for (int32_t i = 0; i < LINUX_GPNAMESIZE; i++)
- if (m_FontList.Lookup(LinuxGpFontList[index].NameArr[i], p)) {
- return p;
- }
- }
- break;
- case FXFONT_GB2312_CHARSET: {
- static int32_t s_gbCount = sizeof(g_LinuxGbFontList) / sizeof(const FX_CHAR*);
- for (int32_t i = 0; i < s_gbCount; i++)
- if (m_FontList.Lookup(g_LinuxGbFontList[i], p)) {
- return p;
- }
- }
- break;
- case FXFONT_CHINESEBIG5_CHARSET: {
- static int32_t s_b5Count = sizeof(g_LinuxB5FontList) / sizeof(const FX_CHAR*);
- for (int32_t i = 0; i < s_b5Count; i++)
- if (m_FontList.Lookup(g_LinuxB5FontList[i], p)) {
- return p;
- }
- }
- break;
- case FXFONT_HANGEUL_CHARSET: {
- static int32_t s_hgCount = sizeof(g_LinuxHGFontList) / sizeof(const FX_CHAR*);
- for (int32_t i = 0; i < s_hgCount; i++)
- if (m_FontList.Lookup(g_LinuxHGFontList[i], p)) {
- return p;
- }
- }
- break;
- default:
- bCJK = FALSE;
- break;
- }
- if (charset == FXFONT_ANSI_CHARSET && (pitch_family & FXFONT_FF_FIXEDPITCH)) {
- return GetFont("Courier New");
- }
- return FindFont(weight, bItalic, charset, pitch_family, cstr_face, !bCJK);
-}
-static FX_DWORD _LinuxGetCharset(int charset)
-{
- switch(charset) {
- case FXFONT_SHIFTJIS_CHARSET:
- return CHARSET_FLAG_SHIFTJIS;
- case FXFONT_GB2312_CHARSET:
- return CHARSET_FLAG_GB;
- case FXFONT_CHINESEBIG5_CHARSET:
- return CHARSET_FLAG_BIG5;
- case FXFONT_HANGEUL_CHARSET:
- return CHARSET_FLAG_KOREAN;
- case FXFONT_SYMBOL_CHARSET:
- return CHARSET_FLAG_SYMBOL;
- case FXFONT_ANSI_CHARSET:
- return CHARSET_FLAG_ANSI;
- default:
- break;
+ return 1;
+ }
+ if (face.Find("Mincho") >= 0 || face.Find("\x96\xbe\x92\xa9") >= 0) {
+ if (face.Find("PMincho") >= 0 ||
+ face.Find("\x82\x6f\x96\xbe\x92\xa9") >= 0) {
+ return 2;
}
+ return 3;
+ }
+ if (!(picth_family & FXFONT_FF_ROMAN) && weight > 400) {
return 0;
+ }
+ return 2;
}
-static int32_t _LinuxGetSimilarValue(int weight, FX_BOOL bItalic, int pitch_family, FX_DWORD style)
-{
- int32_t iSimilarValue = 0;
- if ((style & FXFONT_BOLD) == (weight > 400)) {
- iSimilarValue += 16;
+void* CFX_LinuxFontInfo::MapFont(int weight,
+ FX_BOOL bItalic,
+ int charset,
+ int pitch_family,
+ const FX_CHAR* cstr_face,
+ int& iExact) {
+ CFX_ByteString face = cstr_face;
+ int iBaseFont;
+ for (iBaseFont = 0; iBaseFont < 12; iBaseFont++)
+ if (face == CFX_ByteStringC(Base14Substs[iBaseFont].m_pName)) {
+ face = Base14Substs[iBaseFont].m_pSubstName;
+ iExact = 1;
+ break;
}
- if ((style & FXFONT_ITALIC) == bItalic) {
- iSimilarValue += 16;
- }
- if ((style & FXFONT_SERIF) == (pitch_family & FXFONT_FF_ROMAN)) {
- iSimilarValue += 16;
- }
- if ((style & FXFONT_SCRIPT) == (pitch_family & FXFONT_FF_SCRIPT)) {
- iSimilarValue += 8;
- }
- if ((style & FXFONT_FIXED_PITCH) == (pitch_family & FXFONT_FF_FIXEDPITCH)) {
- iSimilarValue += 8;
- }
- return iSimilarValue;
-}
-void* CFX_LinuxFontInfo::FindFont(int weight, FX_BOOL bItalic, int charset, int pitch_family, const FX_CHAR* family, FX_BOOL bMatchName)
-{
- CFontFaceInfo* pFind = NULL;
- FX_DWORD charset_flag = _LinuxGetCharset(charset);
- int32_t iBestSimilar = 0;
- FX_POSITION pos = m_FontList.GetStartPosition();
- while (pos) {
- CFX_ByteString bsName;
- CFontFaceInfo* pFont = NULL;
- m_FontList.GetNextAssoc(pos, bsName, (void*&)pFont);
- if (!(pFont->m_Charsets & charset_flag) && charset != FXFONT_DEFAULT_CHARSET) {
- continue;
+ if (iBaseFont < 12) {
+ return GetFont(face);
+ }
+ void* p = NULL;
+ FX_BOOL bCJK = TRUE;
+ switch (charset) {
+ case FXFONT_SHIFTJIS_CHARSET: {
+ int32_t index = GetJapanesePreference(cstr_face, weight, pitch_family);
+ if (index < 0) {
+ break;
+ }
+ for (int32_t i = 0; i < LINUX_GPNAMESIZE; i++)
+ if (m_FontList.Lookup(LinuxGpFontList[index].NameArr[i], p)) {
+ return p;
}
- int32_t iSimilarValue = 0;
- int32_t index = bsName.Find(family);
- if (bMatchName && index < 0) {
- continue;
+ } break;
+ case FXFONT_GB2312_CHARSET: {
+ static int32_t s_gbCount =
+ sizeof(g_LinuxGbFontList) / sizeof(const FX_CHAR*);
+ for (int32_t i = 0; i < s_gbCount; i++)
+ if (m_FontList.Lookup(g_LinuxGbFontList[i], p)) {
+ return p;
}
- if (!bMatchName && index > 0) {
- iSimilarValue += 64;
+ } break;
+ case FXFONT_CHINESEBIG5_CHARSET: {
+ static int32_t s_b5Count =
+ sizeof(g_LinuxB5FontList) / sizeof(const FX_CHAR*);
+ for (int32_t i = 0; i < s_b5Count; i++)
+ if (m_FontList.Lookup(g_LinuxB5FontList[i], p)) {
+ return p;
}
- iSimilarValue = _LinuxGetSimilarValue(weight, bItalic, pitch_family, pFont->m_Styles);
- if (iSimilarValue > iBestSimilar) {
- iBestSimilar = iSimilarValue;
- pFind = pFont;
+ } break;
+ case FXFONT_HANGEUL_CHARSET: {
+ static int32_t s_hgCount =
+ sizeof(g_LinuxHGFontList) / sizeof(const FX_CHAR*);
+ for (int32_t i = 0; i < s_hgCount; i++)
+ if (m_FontList.Lookup(g_LinuxHGFontList[i], p)) {
+ return p;
}
- }
- return pFind;
+ } break;
+ default:
+ bCJK = FALSE;
+ break;
+ }
+ if (charset == FXFONT_ANSI_CHARSET && (pitch_family & FXFONT_FF_FIXEDPITCH)) {
+ return GetFont("Courier New");
+ }
+ return FindFont(weight, bItalic, charset, pitch_family, cstr_face, !bCJK);
}
-IFX_SystemFontInfo* IFX_SystemFontInfo::CreateDefault()
-{
- CFX_LinuxFontInfo* pInfo = new CFX_LinuxFontInfo;
- if (!pInfo->ParseFontCfg()) {
- pInfo->AddPath("/usr/share/fonts");
- pInfo->AddPath("/usr/share/X11/fonts/Type1");
- pInfo->AddPath("/usr/share/X11/fonts/TTF");
- pInfo->AddPath("/usr/local/share/fonts");
+static FX_DWORD _LinuxGetCharset(int charset) {
+ switch (charset) {
+ case FXFONT_SHIFTJIS_CHARSET:
+ return CHARSET_FLAG_SHIFTJIS;
+ case FXFONT_GB2312_CHARSET:
+ return CHARSET_FLAG_GB;
+ case FXFONT_CHINESEBIG5_CHARSET:
+ return CHARSET_FLAG_BIG5;
+ case FXFONT_HANGEUL_CHARSET:
+ return CHARSET_FLAG_KOREAN;
+ case FXFONT_SYMBOL_CHARSET:
+ return CHARSET_FLAG_SYMBOL;
+ case FXFONT_ANSI_CHARSET:
+ return CHARSET_FLAG_ANSI;
+ default:
+ break;
+ }
+ return 0;
+}
+static int32_t _LinuxGetSimilarValue(int weight,
+ FX_BOOL bItalic,
+ int pitch_family,
+ FX_DWORD style) {
+ int32_t iSimilarValue = 0;
+ if ((style & FXFONT_BOLD) == (weight > 400)) {
+ iSimilarValue += 16;
+ }
+ if ((style & FXFONT_ITALIC) == bItalic) {
+ iSimilarValue += 16;
+ }
+ if ((style & FXFONT_SERIF) == (pitch_family & FXFONT_FF_ROMAN)) {
+ iSimilarValue += 16;
+ }
+ if ((style & FXFONT_SCRIPT) == (pitch_family & FXFONT_FF_SCRIPT)) {
+ iSimilarValue += 8;
+ }
+ if ((style & FXFONT_FIXED_PITCH) == (pitch_family & FXFONT_FF_FIXEDPITCH)) {
+ iSimilarValue += 8;
+ }
+ return iSimilarValue;
+}
+void* CFX_LinuxFontInfo::FindFont(int weight,
+ FX_BOOL bItalic,
+ int charset,
+ int pitch_family,
+ const FX_CHAR* family,
+ FX_BOOL bMatchName) {
+ CFontFaceInfo* pFind = NULL;
+ FX_DWORD charset_flag = _LinuxGetCharset(charset);
+ int32_t iBestSimilar = 0;
+ FX_POSITION pos = m_FontList.GetStartPosition();
+ while (pos) {
+ CFX_ByteString bsName;
+ CFontFaceInfo* pFont = NULL;
+ m_FontList.GetNextAssoc(pos, bsName, (void*&)pFont);
+ if (!(pFont->m_Charsets & charset_flag) &&
+ charset != FXFONT_DEFAULT_CHARSET) {
+ continue;
+ }
+ int32_t iSimilarValue = 0;
+ int32_t index = bsName.Find(family);
+ if (bMatchName && index < 0) {
+ continue;
+ }
+ if (!bMatchName && index > 0) {
+ iSimilarValue += 64;
+ }
+ iSimilarValue =
+ _LinuxGetSimilarValue(weight, bItalic, pitch_family, pFont->m_Styles);
+ if (iSimilarValue > iBestSimilar) {
+ iBestSimilar = iSimilarValue;
+ pFind = pFont;
}
- return pInfo;
+ }
+ return pFind;
}
-FX_BOOL CFX_LinuxFontInfo::ParseFontCfg()
-{
- return FALSE;
+IFX_SystemFontInfo* IFX_SystemFontInfo::CreateDefault() {
+ CFX_LinuxFontInfo* pInfo = new CFX_LinuxFontInfo;
+ if (!pInfo->ParseFontCfg()) {
+ pInfo->AddPath("/usr/share/fonts");
+ pInfo->AddPath("/usr/share/X11/fonts/Type1");
+ pInfo->AddPath("/usr/share/X11/fonts/TTF");
+ pInfo->AddPath("/usr/local/share/fonts");
+ }
+ return pInfo;
}
-void CFX_GEModule::InitPlatform()
-{
- m_pFontMgr->SetSystemFontInfo(IFX_SystemFontInfo::CreateDefault());
+FX_BOOL CFX_LinuxFontInfo::ParseFontCfg() {
+ return FALSE;
}
-void CFX_GEModule::DestroyPlatform()
-{
+void CFX_GEModule::InitPlatform() {
+ m_pFontMgr->SetSystemFontInfo(IFX_SystemFontInfo::CreateDefault());
}
+void CFX_GEModule::DestroyPlatform() {}
#endif // _FXM_PLATFORM_ == _FXM_PLATFORM_LINUX_
diff --git a/core/src/fxge/ge/fx_ge_path.cpp b/core/src/fxge/ge/fx_ge_path.cpp
index b1410b3911..b50c271c20 100644
--- a/core/src/fxge/ge/fx_ge_path.cpp
+++ b/core/src/fxge/ge/fx_ge_path.cpp
@@ -8,624 +8,664 @@
#include "../../../include/fxcrt/fx_system.h"
#include "../../../include/fxge/fx_ge.h"
-CFX_ClipRgn::CFX_ClipRgn(int width, int height)
-{
+CFX_ClipRgn::CFX_ClipRgn(int width, int height) {
+ m_Type = RectI;
+ m_Box.left = m_Box.top = 0;
+ m_Box.right = width;
+ m_Box.bottom = height;
+}
+CFX_ClipRgn::CFX_ClipRgn(const FX_RECT& rect) {
+ m_Type = RectI;
+ m_Box = rect;
+}
+CFX_ClipRgn::CFX_ClipRgn(const CFX_ClipRgn& src) {
+ m_Type = src.m_Type;
+ m_Box = src.m_Box;
+ m_Mask = src.m_Mask;
+}
+CFX_ClipRgn::~CFX_ClipRgn() {}
+void CFX_ClipRgn::Reset(const FX_RECT& rect) {
+ m_Type = RectI;
+ m_Box = rect;
+ m_Mask.SetNull();
+}
+void CFX_ClipRgn::IntersectRect(const FX_RECT& rect) {
+ if (m_Type == RectI) {
+ m_Box.Intersect(rect);
+ return;
+ }
+ if (m_Type == MaskF) {
+ IntersectMaskRect(rect, m_Box, m_Mask);
+ return;
+ }
+}
+void CFX_ClipRgn::IntersectMaskRect(FX_RECT rect,
+ FX_RECT mask_rect,
+ CFX_DIBitmapRef Mask) {
+ const CFX_DIBitmap* mask_dib = Mask;
+ m_Type = MaskF;
+ m_Box = rect;
+ m_Box.Intersect(mask_rect);
+ if (m_Box.IsEmpty()) {
m_Type = RectI;
- m_Box.left = m_Box.top = 0;
- m_Box.right = width;
- m_Box.bottom = height;
-}
-CFX_ClipRgn::CFX_ClipRgn(const FX_RECT& rect)
-{
- m_Type = RectI;
- m_Box = rect;
-}
-CFX_ClipRgn::CFX_ClipRgn(const CFX_ClipRgn& src)
-{
- m_Type = src.m_Type;
- m_Box = src.m_Box;
- m_Mask = src.m_Mask;
-}
-CFX_ClipRgn::~CFX_ClipRgn()
-{
-}
-void CFX_ClipRgn::Reset(const FX_RECT& rect)
-{
- m_Type = RectI;
- m_Box = rect;
- m_Mask.SetNull();
-}
-void CFX_ClipRgn::IntersectRect(const FX_RECT& rect)
-{
- if (m_Type == RectI) {
- m_Box.Intersect(rect);
- return;
- }
- if (m_Type == MaskF) {
- IntersectMaskRect(rect, m_Box, m_Mask);
- return;
- }
-}
-void CFX_ClipRgn::IntersectMaskRect(FX_RECT rect, FX_RECT mask_rect, CFX_DIBitmapRef Mask)
-{
- const CFX_DIBitmap* mask_dib = Mask;
- m_Type = MaskF;
- m_Box = rect;
- m_Box.Intersect(mask_rect);
- if (m_Box.IsEmpty()) {
- m_Type = RectI;
- return;
- }
- if (m_Box == mask_rect) {
- m_Mask = Mask;
- return;
- }
- CFX_DIBitmap* new_dib = m_Mask.New();
+ return;
+ }
+ if (m_Box == mask_rect) {
+ m_Mask = Mask;
+ return;
+ }
+ CFX_DIBitmap* new_dib = m_Mask.New();
+ if (!new_dib) {
+ return;
+ }
+ new_dib->Create(m_Box.Width(), m_Box.Height(), FXDIB_8bppMask);
+ for (int row = m_Box.top; row < m_Box.bottom; row++) {
+ uint8_t* dest_scan =
+ new_dib->GetBuffer() + new_dib->GetPitch() * (row - m_Box.top);
+ uint8_t* src_scan =
+ mask_dib->GetBuffer() + mask_dib->GetPitch() * (row - mask_rect.top);
+ for (int col = m_Box.left; col < m_Box.right; col++) {
+ dest_scan[col - m_Box.left] = src_scan[col - mask_rect.left];
+ }
+ }
+}
+void CFX_ClipRgn::IntersectMaskF(int left, int top, CFX_DIBitmapRef Mask) {
+ const CFX_DIBitmap* mask_dib = Mask;
+ ASSERT(mask_dib->GetFormat() == FXDIB_8bppMask);
+ FX_RECT mask_box(left, top, left + mask_dib->GetWidth(),
+ top + mask_dib->GetHeight());
+ if (m_Type == RectI) {
+ IntersectMaskRect(m_Box, mask_box, Mask);
+ return;
+ }
+ if (m_Type == MaskF) {
+ FX_RECT new_box = m_Box;
+ new_box.Intersect(mask_box);
+ if (new_box.IsEmpty()) {
+ m_Type = RectI;
+ m_Mask.SetNull();
+ m_Box = new_box;
+ return;
+ }
+ CFX_DIBitmapRef new_mask;
+ CFX_DIBitmap* new_dib = new_mask.New();
if (!new_dib) {
- return;
- }
- new_dib->Create(m_Box.Width(), m_Box.Height(), FXDIB_8bppMask);
- for (int row = m_Box.top; row < m_Box.bottom; row ++) {
- uint8_t* dest_scan = new_dib->GetBuffer() + new_dib->GetPitch() * (row - m_Box.top);
- uint8_t* src_scan = mask_dib->GetBuffer() + mask_dib->GetPitch() * (row - mask_rect.top);
- for (int col = m_Box.left; col < m_Box.right; col ++) {
- dest_scan[col - m_Box.left] = src_scan[col - mask_rect.left];
- }
- }
-}
-void CFX_ClipRgn::IntersectMaskF(int left, int top, CFX_DIBitmapRef Mask)
-{
- const CFX_DIBitmap* mask_dib = Mask;
- ASSERT(mask_dib->GetFormat() == FXDIB_8bppMask);
- FX_RECT mask_box(left, top, left + mask_dib->GetWidth(), top + mask_dib->GetHeight());
- if (m_Type == RectI) {
- IntersectMaskRect(m_Box, mask_box, Mask);
- return;
- }
- if (m_Type == MaskF) {
- FX_RECT new_box = m_Box;
- new_box.Intersect(mask_box);
- if (new_box.IsEmpty()) {
- m_Type = RectI;
- m_Mask.SetNull();
- m_Box = new_box;
- return;
- }
- CFX_DIBitmapRef new_mask;
- CFX_DIBitmap* new_dib = new_mask.New();
- if (!new_dib) {
- return;
- }
- new_dib->Create(new_box.Width(), new_box.Height(), FXDIB_8bppMask);
- const CFX_DIBitmap* old_dib = m_Mask;
- for (int row = new_box.top; row < new_box.bottom; row ++) {
- uint8_t* old_scan = old_dib->GetBuffer() + (row - m_Box.top) * old_dib->GetPitch();
- uint8_t* mask_scan = mask_dib->GetBuffer() + (row - top) * mask_dib->GetPitch();
- uint8_t* new_scan = new_dib->GetBuffer() + (row - new_box.top) * new_dib->GetPitch();
- for (int col = new_box.left; col < new_box.right; col ++) {
- new_scan[col - new_box.left] = old_scan[col - m_Box.left] * mask_scan[col - left] / 255;
- }
- }
- m_Box = new_box;
- m_Mask = new_mask;
- return;
- }
- ASSERT(FALSE);
-}
-CFX_PathData::CFX_PathData()
-{
- m_PointCount = m_AllocCount = 0;
- m_pPoints = NULL;
-}
-CFX_PathData::~CFX_PathData()
-{
+ return;
+ }
+ new_dib->Create(new_box.Width(), new_box.Height(), FXDIB_8bppMask);
+ const CFX_DIBitmap* old_dib = m_Mask;
+ for (int row = new_box.top; row < new_box.bottom; row++) {
+ uint8_t* old_scan =
+ old_dib->GetBuffer() + (row - m_Box.top) * old_dib->GetPitch();
+ uint8_t* mask_scan =
+ mask_dib->GetBuffer() + (row - top) * mask_dib->GetPitch();
+ uint8_t* new_scan =
+ new_dib->GetBuffer() + (row - new_box.top) * new_dib->GetPitch();
+ for (int col = new_box.left; col < new_box.right; col++) {
+ new_scan[col - new_box.left] =
+ old_scan[col - m_Box.left] * mask_scan[col - left] / 255;
+ }
+ }
+ m_Box = new_box;
+ m_Mask = new_mask;
+ return;
+ }
+ ASSERT(FALSE);
+}
+CFX_PathData::CFX_PathData() {
+ m_PointCount = m_AllocCount = 0;
+ m_pPoints = NULL;
+}
+CFX_PathData::~CFX_PathData() {
+ if (m_pPoints) {
+ FX_Free(m_pPoints);
+ }
+}
+void CFX_PathData::SetPointCount(int nPoints) {
+ m_PointCount = nPoints;
+ if (m_AllocCount < nPoints) {
if (m_pPoints) {
- FX_Free(m_pPoints);
- }
-}
-void CFX_PathData::SetPointCount(int nPoints)
-{
- m_PointCount = nPoints;
- if (m_AllocCount < nPoints) {
- if (m_pPoints) {
- FX_Free(m_pPoints);
- m_pPoints = NULL;
- }
- m_pPoints = FX_Alloc(FX_PATHPOINT, nPoints);
- m_AllocCount = nPoints;
- }
-}
-void CFX_PathData::AllocPointCount(int nPoints)
-{
- if (m_AllocCount < nPoints) {
- FX_PATHPOINT* pNewBuf = FX_Alloc(FX_PATHPOINT, nPoints);
- if (m_PointCount) {
- FXSYS_memcpy(pNewBuf, m_pPoints, m_PointCount * sizeof(FX_PATHPOINT));
- }
- if (m_pPoints) {
- FX_Free(m_pPoints);
- }
- m_pPoints = pNewBuf;
- m_AllocCount = nPoints;
+ FX_Free(m_pPoints);
+ m_pPoints = NULL;
}
+ m_pPoints = FX_Alloc(FX_PATHPOINT, nPoints);
+ m_AllocCount = nPoints;
+ }
}
-CFX_PathData::CFX_PathData(const CFX_PathData& src)
-{
- m_PointCount = m_AllocCount = src.m_PointCount;
- m_pPoints = FX_Alloc(FX_PATHPOINT, src.m_PointCount);
- FXSYS_memcpy(m_pPoints, src.m_pPoints, sizeof(FX_PATHPOINT) * m_PointCount);
-}
-void CFX_PathData::TrimPoints(int nPoints)
-{
- if (m_PointCount <= nPoints) {
- return;
- }
- SetPointCount(nPoints);
-}
-void CFX_PathData::AddPointCount(int addPoints)
-{
- pdfium::base::CheckedNumeric<int> safe_new_count = m_PointCount;
- safe_new_count += addPoints;
- int new_count = safe_new_count.ValueOrDie();
- AllocPointCount(new_count);
- m_PointCount = new_count;
-}
-void CFX_PathData::Append(const CFX_PathData* pSrc, const CFX_AffineMatrix* pMatrix)
-{
- int old_count = m_PointCount;
- AddPointCount(pSrc->m_PointCount);
- FXSYS_memcpy(m_pPoints + old_count, pSrc->m_pPoints, pSrc->m_PointCount * sizeof(FX_PATHPOINT));
- if (pMatrix) {
- for (int i = 0; i < pSrc->m_PointCount; i ++) {
- pMatrix->Transform(m_pPoints[old_count + i].m_PointX, m_pPoints[old_count + i].m_PointY);
- }
- }
-}
-void CFX_PathData::SetPoint(int index, FX_FLOAT x, FX_FLOAT y, int flag)
-{
- ASSERT(index < m_PointCount);
- m_pPoints[index].m_PointX = x;
- m_pPoints[index].m_PointY = y;
- m_pPoints[index].m_Flag = flag;
-}
-void CFX_PathData::AppendRect(FX_FLOAT left, FX_FLOAT bottom, FX_FLOAT right, FX_FLOAT top)
-{
- int old_count = m_PointCount;
- AddPointCount(5);
- FX_PATHPOINT* pPoints = m_pPoints + old_count;
- pPoints[0].m_PointX = pPoints[1].m_PointX = pPoints[4].m_PointX = left;
- pPoints[2].m_PointX = pPoints[3].m_PointX = right;
- pPoints[0].m_PointY = pPoints[3].m_PointY = pPoints[4].m_PointY = bottom;
- pPoints[1].m_PointY = pPoints[2].m_PointY = top;
- pPoints[0].m_Flag = FXPT_MOVETO;
- pPoints[1].m_Flag = pPoints[2].m_Flag = pPoints[3].m_Flag = FXPT_LINETO;
- pPoints[4].m_Flag = FXPT_LINETO | FXPT_CLOSEFIGURE;
-}
-CFX_FloatRect CFX_PathData::GetBoundingBox() const
-{
- CFX_FloatRect rect;
+void CFX_PathData::AllocPointCount(int nPoints) {
+ if (m_AllocCount < nPoints) {
+ FX_PATHPOINT* pNewBuf = FX_Alloc(FX_PATHPOINT, nPoints);
if (m_PointCount) {
- rect.InitRect(m_pPoints[0].m_PointX, m_pPoints[0].m_PointY);
- for (int i = 1; i < m_PointCount; i ++) {
- rect.UpdateRect(m_pPoints[i].m_PointX, m_pPoints[i].m_PointY);
- }
- }
- return rect;
-}
-static void _UpdateLineEndPoints(CFX_FloatRect& rect, FX_FLOAT start_x, FX_FLOAT start_y, FX_FLOAT end_x, FX_FLOAT end_y,
- FX_FLOAT hw)
-{
- if (start_x == end_x) {
- if (start_y == end_y) {
- rect.UpdateRect(end_x + hw, end_y + hw);
- rect.UpdateRect(end_x - hw, end_y - hw);
- return;
- }
- FX_FLOAT point_y;
- if (end_y < start_y) {
- point_y = end_y - hw;
- } else {
- point_y = end_y + hw;
- }
- rect.UpdateRect(end_x + hw, point_y);
- rect.UpdateRect(end_x - hw, point_y);
- return;
+ FXSYS_memcpy(pNewBuf, m_pPoints, m_PointCount * sizeof(FX_PATHPOINT));
}
+ if (m_pPoints) {
+ FX_Free(m_pPoints);
+ }
+ m_pPoints = pNewBuf;
+ m_AllocCount = nPoints;
+ }
+}
+CFX_PathData::CFX_PathData(const CFX_PathData& src) {
+ m_PointCount = m_AllocCount = src.m_PointCount;
+ m_pPoints = FX_Alloc(FX_PATHPOINT, src.m_PointCount);
+ FXSYS_memcpy(m_pPoints, src.m_pPoints, sizeof(FX_PATHPOINT) * m_PointCount);
+}
+void CFX_PathData::TrimPoints(int nPoints) {
+ if (m_PointCount <= nPoints) {
+ return;
+ }
+ SetPointCount(nPoints);
+}
+void CFX_PathData::AddPointCount(int addPoints) {
+ pdfium::base::CheckedNumeric<int> safe_new_count = m_PointCount;
+ safe_new_count += addPoints;
+ int new_count = safe_new_count.ValueOrDie();
+ AllocPointCount(new_count);
+ m_PointCount = new_count;
+}
+void CFX_PathData::Append(const CFX_PathData* pSrc,
+ const CFX_AffineMatrix* pMatrix) {
+ int old_count = m_PointCount;
+ AddPointCount(pSrc->m_PointCount);
+ FXSYS_memcpy(m_pPoints + old_count, pSrc->m_pPoints,
+ pSrc->m_PointCount * sizeof(FX_PATHPOINT));
+ if (pMatrix) {
+ for (int i = 0; i < pSrc->m_PointCount; i++) {
+ pMatrix->Transform(m_pPoints[old_count + i].m_PointX,
+ m_pPoints[old_count + i].m_PointY);
+ }
+ }
+}
+void CFX_PathData::SetPoint(int index, FX_FLOAT x, FX_FLOAT y, int flag) {
+ ASSERT(index < m_PointCount);
+ m_pPoints[index].m_PointX = x;
+ m_pPoints[index].m_PointY = y;
+ m_pPoints[index].m_Flag = flag;
+}
+void CFX_PathData::AppendRect(FX_FLOAT left,
+ FX_FLOAT bottom,
+ FX_FLOAT right,
+ FX_FLOAT top) {
+ int old_count = m_PointCount;
+ AddPointCount(5);
+ FX_PATHPOINT* pPoints = m_pPoints + old_count;
+ pPoints[0].m_PointX = pPoints[1].m_PointX = pPoints[4].m_PointX = left;
+ pPoints[2].m_PointX = pPoints[3].m_PointX = right;
+ pPoints[0].m_PointY = pPoints[3].m_PointY = pPoints[4].m_PointY = bottom;
+ pPoints[1].m_PointY = pPoints[2].m_PointY = top;
+ pPoints[0].m_Flag = FXPT_MOVETO;
+ pPoints[1].m_Flag = pPoints[2].m_Flag = pPoints[3].m_Flag = FXPT_LINETO;
+ pPoints[4].m_Flag = FXPT_LINETO | FXPT_CLOSEFIGURE;
+}
+CFX_FloatRect CFX_PathData::GetBoundingBox() const {
+ CFX_FloatRect rect;
+ if (m_PointCount) {
+ rect.InitRect(m_pPoints[0].m_PointX, m_pPoints[0].m_PointY);
+ for (int i = 1; i < m_PointCount; i++) {
+ rect.UpdateRect(m_pPoints[i].m_PointX, m_pPoints[i].m_PointY);
+ }
+ }
+ return rect;
+}
+static void _UpdateLineEndPoints(CFX_FloatRect& rect,
+ FX_FLOAT start_x,
+ FX_FLOAT start_y,
+ FX_FLOAT end_x,
+ FX_FLOAT end_y,
+ FX_FLOAT hw) {
+ if (start_x == end_x) {
if (start_y == end_y) {
- FX_FLOAT point_x;
- if (end_x < start_x) {
- point_x = end_x - hw;
- } else {
- point_x = end_x + hw;
- }
- rect.UpdateRect(point_x, end_y + hw);
- rect.UpdateRect(point_x, end_y - hw);
- return;
- }
- FX_FLOAT dx = end_x - start_x;
- FX_FLOAT dy = end_y - start_y;
- FX_FLOAT ll = FXSYS_sqrt2(dx, dy);
- FX_FLOAT mx = end_x + hw * dx / ll;
- FX_FLOAT my = end_y + hw * dy / ll;
- FX_FLOAT dx1 = hw * dy / ll;
- FX_FLOAT dy1 = hw * dx / ll;
- rect.UpdateRect(mx - dx1, my + dy1);
- rect.UpdateRect(mx + dx1, my - dy1);
-}
-static void _UpdateLineJoinPoints(CFX_FloatRect& rect, FX_FLOAT start_x, FX_FLOAT start_y,
- FX_FLOAT middle_x, FX_FLOAT middle_y, FX_FLOAT end_x, FX_FLOAT end_y,
- FX_FLOAT half_width, FX_FLOAT miter_limit)
-{
- FX_FLOAT start_k = 0, start_c = 0, end_k = 0, end_c = 0, start_len = 0, start_dc = 0, end_len = 0, end_dc = 0;
- FX_BOOL bStartVert = FXSYS_fabs(start_x - middle_x) < 1.0f / 20;
- FX_BOOL bEndVert = FXSYS_fabs(middle_x - end_x) < 1.0f / 20;
- if (bStartVert && bEndVert) {
- int start_dir = middle_y > start_y ? 1 : -1;
- FX_FLOAT point_y = middle_y + half_width * start_dir;
- rect.UpdateRect(middle_x + half_width, point_y);
- rect.UpdateRect(middle_x - half_width, point_y);
- return;
- }
- if (!bStartVert) {
- start_k = FXSYS_Div(middle_y - start_y, middle_x - start_x);
- start_c = middle_y - FXSYS_Mul(start_k, middle_x);
- start_len = FXSYS_sqrt2(start_x - middle_x, start_y - middle_y);
- start_dc = (FX_FLOAT)FXSYS_fabs(FXSYS_MulDiv(half_width, start_len, start_x - middle_x));
- }
- if (!bEndVert) {
- end_k = FXSYS_Div(end_y - middle_y, end_x - middle_x);
- end_c = middle_y - FXSYS_Mul(end_k, middle_x);
- end_len = FXSYS_sqrt2(end_x - middle_x, end_y - middle_y);
- end_dc = (FX_FLOAT)FXSYS_fabs(FXSYS_MulDiv(half_width, end_len, end_x - middle_x));
- }
- if (bStartVert) {
- FX_FLOAT outside_x = start_x;
- if (end_x < start_x) {
- outside_x += half_width;
- } else {
- outside_x -= half_width;
- }
- FX_FLOAT outside_y;
- if (start_y < FXSYS_Mul(end_k, start_x) + end_c) {
- outside_y = FXSYS_Mul(end_k, outside_x) + end_c + end_dc;
- } else {
- outside_y = FXSYS_Mul(end_k, outside_x) + end_c - end_dc;
- }
- rect.UpdateRect(outside_x, outside_y);
- return;
+ rect.UpdateRect(end_x + hw, end_y + hw);
+ rect.UpdateRect(end_x - hw, end_y - hw);
+ return;
}
- if (bEndVert) {
- FX_FLOAT outside_x = end_x;
- if (start_x < end_x) {
- outside_x += half_width;
- } else {
- outside_x -= half_width;
- }
- FX_FLOAT outside_y;
- if (end_y < FXSYS_Mul(start_k, end_x) + start_c) {
- outside_y = FXSYS_Mul(start_k, outside_x) + start_c + start_dc;
- } else {
- outside_y = FXSYS_Mul(start_k, outside_x) + start_c - start_dc;
- }
- rect.UpdateRect(outside_x, outside_y);
- return;
- }
- if (FXSYS_fabs(start_k - end_k) < 1.0f / 20) {
- int start_dir = middle_x > start_x ? 1 : -1;
- int end_dir = end_x > middle_x ? 1 : -1;
- if (start_dir == end_dir) {
- _UpdateLineEndPoints(rect, middle_x, middle_y, end_x, end_y, half_width);
- } else {
- _UpdateLineEndPoints(rect, start_x, start_y, middle_x, middle_y, half_width);
- }
- return;
- }
- FX_FLOAT start_outside_c = start_c;
- if (end_y < FXSYS_Mul(start_k, end_x) + start_c) {
- start_outside_c += start_dc;
+ FX_FLOAT point_y;
+ if (end_y < start_y) {
+ point_y = end_y - hw;
+ } else {
+ point_y = end_y + hw;
+ }
+ rect.UpdateRect(end_x + hw, point_y);
+ rect.UpdateRect(end_x - hw, point_y);
+ return;
+ }
+ if (start_y == end_y) {
+ FX_FLOAT point_x;
+ if (end_x < start_x) {
+ point_x = end_x - hw;
} else {
- start_outside_c -= start_dc;
+ point_x = end_x + hw;
+ }
+ rect.UpdateRect(point_x, end_y + hw);
+ rect.UpdateRect(point_x, end_y - hw);
+ return;
+ }
+ FX_FLOAT dx = end_x - start_x;
+ FX_FLOAT dy = end_y - start_y;
+ FX_FLOAT ll = FXSYS_sqrt2(dx, dy);
+ FX_FLOAT mx = end_x + hw * dx / ll;
+ FX_FLOAT my = end_y + hw * dy / ll;
+ FX_FLOAT dx1 = hw * dy / ll;
+ FX_FLOAT dy1 = hw * dx / ll;
+ rect.UpdateRect(mx - dx1, my + dy1);
+ rect.UpdateRect(mx + dx1, my - dy1);
+}
+static void _UpdateLineJoinPoints(CFX_FloatRect& rect,
+ FX_FLOAT start_x,
+ FX_FLOAT start_y,
+ FX_FLOAT middle_x,
+ FX_FLOAT middle_y,
+ FX_FLOAT end_x,
+ FX_FLOAT end_y,
+ FX_FLOAT half_width,
+ FX_FLOAT miter_limit) {
+ FX_FLOAT start_k = 0, start_c = 0, end_k = 0, end_c = 0, start_len = 0,
+ start_dc = 0, end_len = 0, end_dc = 0;
+ FX_BOOL bStartVert = FXSYS_fabs(start_x - middle_x) < 1.0f / 20;
+ FX_BOOL bEndVert = FXSYS_fabs(middle_x - end_x) < 1.0f / 20;
+ if (bStartVert && bEndVert) {
+ int start_dir = middle_y > start_y ? 1 : -1;
+ FX_FLOAT point_y = middle_y + half_width * start_dir;
+ rect.UpdateRect(middle_x + half_width, point_y);
+ rect.UpdateRect(middle_x - half_width, point_y);
+ return;
+ }
+ if (!bStartVert) {
+ start_k = FXSYS_Div(middle_y - start_y, middle_x - start_x);
+ start_c = middle_y - FXSYS_Mul(start_k, middle_x);
+ start_len = FXSYS_sqrt2(start_x - middle_x, start_y - middle_y);
+ start_dc = (FX_FLOAT)FXSYS_fabs(
+ FXSYS_MulDiv(half_width, start_len, start_x - middle_x));
+ }
+ if (!bEndVert) {
+ end_k = FXSYS_Div(end_y - middle_y, end_x - middle_x);
+ end_c = middle_y - FXSYS_Mul(end_k, middle_x);
+ end_len = FXSYS_sqrt2(end_x - middle_x, end_y - middle_y);
+ end_dc = (FX_FLOAT)FXSYS_fabs(
+ FXSYS_MulDiv(half_width, end_len, end_x - middle_x));
+ }
+ if (bStartVert) {
+ FX_FLOAT outside_x = start_x;
+ if (end_x < start_x) {
+ outside_x += half_width;
+ } else {
+ outside_x -= half_width;
}
- FX_FLOAT end_outside_c = end_c;
+ FX_FLOAT outside_y;
if (start_y < FXSYS_Mul(end_k, start_x) + end_c) {
- end_outside_c += end_dc;
+ outside_y = FXSYS_Mul(end_k, outside_x) + end_c + end_dc;
} else {
- end_outside_c -= end_dc;
- }
- FX_FLOAT join_x = FXSYS_Div(end_outside_c - start_outside_c, start_k - end_k);
- FX_FLOAT join_y = FXSYS_Mul(start_k, join_x) + start_outside_c;
- rect.UpdateRect(join_x, join_y);
-}
-CFX_FloatRect CFX_PathData::GetBoundingBox(FX_FLOAT line_width, FX_FLOAT miter_limit) const
-{
- CFX_FloatRect rect(100000 * 1.0f, 100000 * 1.0f, -100000 * 1.0f, -100000 * 1.0f);
- int iPoint = 0;
- FX_FLOAT half_width = line_width;
- int iStartPoint, iEndPoint, iMiddlePoint;
- FX_BOOL bJoin;
- while (iPoint < m_PointCount) {
- if (m_pPoints[iPoint].m_Flag == FXPT_MOVETO) {
- iStartPoint = iPoint + 1;
- iEndPoint = iPoint;
- bJoin = FALSE;
- } else {
- if (m_pPoints[iPoint].m_Flag == FXPT_BEZIERTO) {
- rect.UpdateRect(m_pPoints[iPoint].m_PointX, m_pPoints[iPoint].m_PointY);
- rect.UpdateRect(m_pPoints[iPoint + 1].m_PointX, m_pPoints[iPoint + 1].m_PointY);
- iPoint += 2;
- }
- if (iPoint == m_PointCount - 1 || m_pPoints[iPoint + 1].m_Flag == FXPT_MOVETO) {
- iStartPoint = iPoint - 1;
- iEndPoint = iPoint;
- bJoin = FALSE;
- } else {
- iStartPoint = iPoint - 1;
- iMiddlePoint = iPoint;
- iEndPoint = iPoint + 1;
- bJoin = TRUE;
- }
- }
- FX_FLOAT start_x = m_pPoints[iStartPoint].m_PointX;
- FX_FLOAT start_y = m_pPoints[iStartPoint].m_PointY;
- FX_FLOAT end_x = m_pPoints[iEndPoint].m_PointX;
- FX_FLOAT end_y = m_pPoints[iEndPoint].m_PointY;
- if (bJoin) {
- FX_FLOAT middle_x = m_pPoints[iMiddlePoint].m_PointX;
- FX_FLOAT middle_y = m_pPoints[iMiddlePoint].m_PointY;
- _UpdateLineJoinPoints(rect, start_x, start_y, middle_x, middle_y, end_x, end_y, half_width, miter_limit);
- } else {
- _UpdateLineEndPoints(rect, start_x, start_y, end_x, end_y, half_width);
- }
- iPoint ++;
- }
- return rect;
-}
-void CFX_PathData::Transform(const CFX_AffineMatrix* pMatrix)
-{
- if (pMatrix == NULL) {
- return;
- }
- for (int i = 0; i < m_PointCount; i ++) {
- pMatrix->Transform(m_pPoints[i].m_PointX, m_pPoints[i].m_PointY);
- }
-}
-FX_BOOL CFX_PathData::GetZeroAreaPath(CFX_PathData& NewPath, CFX_AffineMatrix* pMatrix, FX_BOOL&bThin, FX_BOOL bAdjust) const
-{
- if (m_PointCount < 3) {
- return FALSE;
- }
- if (m_PointCount == 3 && (m_pPoints[0].m_Flag & FXPT_TYPE) == FXPT_MOVETO &&
- (m_pPoints[1].m_Flag & FXPT_TYPE) == FXPT_LINETO && (m_pPoints[2].m_Flag & FXPT_TYPE) == FXPT_LINETO
- && m_pPoints[0].m_PointX == m_pPoints[2].m_PointX && m_pPoints[0].m_PointY == m_pPoints[2].m_PointY) {
- NewPath.AddPointCount(2);
- if (bAdjust) {
- if (pMatrix) {
- FX_FLOAT x = m_pPoints[0].m_PointX, y = m_pPoints[0].m_PointY;
- pMatrix->TransformPoint(x, y);
- x = (int)x + 0.5f;
- y = (int)y + 0.5f;
- NewPath.SetPoint(0, x, y, FXPT_MOVETO);
- x = m_pPoints[1].m_PointX, y = m_pPoints[1].m_PointY;
- pMatrix->TransformPoint(x, y);
- x = (int)x + 0.5f;
- y = (int)y + 0.5f;
- NewPath.SetPoint(1, x, y, FXPT_LINETO);
- pMatrix->SetIdentity();
- } else {
- FX_FLOAT x = (int)m_pPoints[0].m_PointX + 0.5f, y = (int)m_pPoints[0].m_PointY + 0.5f;
- NewPath.SetPoint(0, x, y, FXPT_MOVETO);
- x = (int)m_pPoints[1].m_PointX + 0.5f, y = (int)m_pPoints[1].m_PointY + 0.5f;
- NewPath.SetPoint(1, x, y, FXPT_LINETO);
- }
- } else {
- NewPath.SetPoint(0, m_pPoints[0].m_PointX, m_pPoints[0].m_PointY, FXPT_MOVETO);
- NewPath.SetPoint(1, m_pPoints[1].m_PointX, m_pPoints[1].m_PointY, FXPT_LINETO);
- }
- if (m_pPoints[0].m_PointX != m_pPoints[1].m_PointX && m_pPoints[0].m_PointY != m_pPoints[1].m_PointY) {
- bThin = TRUE;
- }
- return TRUE;
- }
- if (((m_PointCount > 3) && (m_PointCount % 2))) {
- int mid = m_PointCount / 2;
- FX_BOOL bZeroArea = FALSE;
- CFX_PathData t_path;
- for (int i = 0; i < mid; i++) {
- if (!(m_pPoints[mid - i - 1].m_PointX == m_pPoints[mid + i + 1].m_PointX
- && m_pPoints[mid - i - 1].m_PointY == m_pPoints[mid + i + 1].m_PointY &&
- ((m_pPoints[mid - i - 1].m_Flag & FXPT_TYPE) != FXPT_BEZIERTO && (m_pPoints[mid + i + 1].m_Flag & FXPT_TYPE) != FXPT_BEZIERTO))) {
- bZeroArea = TRUE;
- break;
- }
- int new_count = t_path.GetPointCount();
- t_path.AddPointCount(2);
- t_path.SetPoint(new_count, m_pPoints[mid - i].m_PointX, m_pPoints[mid - i].m_PointY, FXPT_MOVETO);
- t_path.SetPoint(new_count + 1, m_pPoints[mid - i - 1].m_PointX, m_pPoints[mid - i - 1].m_PointY, FXPT_LINETO);
- }
- if (!bZeroArea) {
- NewPath.Append(&t_path, NULL);
- bThin = TRUE;
- return TRUE;
- }
- }
- int stratPoint = 0;
- int next = 0, i;
- for (i = 0; i < m_PointCount; i++) {
- int point_type = m_pPoints[i].m_Flag & FXPT_TYPE;
- if (point_type == FXPT_MOVETO) {
- stratPoint = i;
- } else if (point_type == FXPT_LINETO) {
- next = (i + 1 - stratPoint) % (m_PointCount - stratPoint) + stratPoint;
- if ((m_pPoints[next].m_Flag & FXPT_TYPE) != FXPT_BEZIERTO && (m_pPoints[next].m_Flag & FXPT_TYPE) != FXPT_MOVETO) {
- if((m_pPoints[i - 1].m_PointX == m_pPoints[i].m_PointX && m_pPoints[i].m_PointX == m_pPoints[next].m_PointX)
- && ((m_pPoints[i].m_PointY - m_pPoints[i - 1].m_PointY) * (m_pPoints[i].m_PointY - m_pPoints[next].m_PointY) > 0)) {
- int pre = i;
- if (FXSYS_fabs(m_pPoints[i].m_PointY - m_pPoints[i - 1].m_PointY)
- < FXSYS_fabs(m_pPoints[i].m_PointY - m_pPoints[next].m_PointY)) {
- pre --;
- next--;
- }
- int new_count = NewPath.GetPointCount();
- NewPath.AddPointCount(2);
- NewPath.SetPoint(new_count, m_pPoints[pre].m_PointX, m_pPoints[pre].m_PointY, FXPT_MOVETO);
- NewPath.SetPoint(new_count + 1, m_pPoints[next].m_PointX, m_pPoints[next].m_PointY, FXPT_LINETO);
- } else if((m_pPoints[i - 1].m_PointY == m_pPoints[i].m_PointY && m_pPoints[i].m_PointY == m_pPoints[next].m_PointY)
- && ((m_pPoints[i].m_PointX - m_pPoints[i - 1].m_PointX) * (m_pPoints[i].m_PointX - m_pPoints[next].m_PointX) > 0)) {
- int pre = i;
- if (FXSYS_fabs(m_pPoints[i].m_PointX - m_pPoints[i - 1].m_PointX)
- < FXSYS_fabs(m_pPoints[i].m_PointX - m_pPoints[next].m_PointX)) {
- pre --;
- next--;
- }
- int new_count = NewPath.GetPointCount();
- NewPath.AddPointCount(2);
- NewPath.SetPoint(new_count, m_pPoints[pre].m_PointX, m_pPoints[pre].m_PointY, FXPT_MOVETO);
- NewPath.SetPoint(new_count + 1, m_pPoints[next].m_PointX, m_pPoints[next].m_PointY, FXPT_LINETO);
- } else if ((m_pPoints[i - 1].m_Flag & FXPT_TYPE) == FXPT_MOVETO && (m_pPoints[next].m_Flag & FXPT_TYPE) == FXPT_LINETO &&
- m_pPoints[i - 1].m_PointX == m_pPoints[next].m_PointX && m_pPoints[i - 1].m_PointY == m_pPoints[next].m_PointY
- && m_pPoints[next].m_Flag & FXPT_CLOSEFIGURE) {
- int new_count = NewPath.GetPointCount();
- NewPath.AddPointCount(2);
- NewPath.SetPoint(new_count, m_pPoints[i - 1].m_PointX, m_pPoints[i - 1].m_PointY, FXPT_MOVETO);
- NewPath.SetPoint(new_count + 1, m_pPoints[i].m_PointX, m_pPoints[i].m_PointY, FXPT_LINETO);
- bThin = TRUE;
- }
- }
- } else if (point_type == FXPT_BEZIERTO) {
- i += 2;
- continue;
- }
+ outside_y = FXSYS_Mul(end_k, outside_x) + end_c - end_dc;
+ }
+ rect.UpdateRect(outside_x, outside_y);
+ return;
+ }
+ if (bEndVert) {
+ FX_FLOAT outside_x = end_x;
+ if (start_x < end_x) {
+ outside_x += half_width;
+ } else {
+ outside_x -= half_width;
}
- if (m_PointCount > 3 && NewPath.GetPointCount()) {
- bThin = TRUE;
+ FX_FLOAT outside_y;
+ if (end_y < FXSYS_Mul(start_k, end_x) + start_c) {
+ outside_y = FXSYS_Mul(start_k, outside_x) + start_c + start_dc;
+ } else {
+ outside_y = FXSYS_Mul(start_k, outside_x) + start_c - start_dc;
+ }
+ rect.UpdateRect(outside_x, outside_y);
+ return;
+ }
+ if (FXSYS_fabs(start_k - end_k) < 1.0f / 20) {
+ int start_dir = middle_x > start_x ? 1 : -1;
+ int end_dir = end_x > middle_x ? 1 : -1;
+ if (start_dir == end_dir) {
+ _UpdateLineEndPoints(rect, middle_x, middle_y, end_x, end_y, half_width);
+ } else {
+ _UpdateLineEndPoints(rect, start_x, start_y, middle_x, middle_y,
+ half_width);
+ }
+ return;
+ }
+ FX_FLOAT start_outside_c = start_c;
+ if (end_y < FXSYS_Mul(start_k, end_x) + start_c) {
+ start_outside_c += start_dc;
+ } else {
+ start_outside_c -= start_dc;
+ }
+ FX_FLOAT end_outside_c = end_c;
+ if (start_y < FXSYS_Mul(end_k, start_x) + end_c) {
+ end_outside_c += end_dc;
+ } else {
+ end_outside_c -= end_dc;
+ }
+ FX_FLOAT join_x = FXSYS_Div(end_outside_c - start_outside_c, start_k - end_k);
+ FX_FLOAT join_y = FXSYS_Mul(start_k, join_x) + start_outside_c;
+ rect.UpdateRect(join_x, join_y);
+}
+CFX_FloatRect CFX_PathData::GetBoundingBox(FX_FLOAT line_width,
+ FX_FLOAT miter_limit) const {
+ CFX_FloatRect rect(100000 * 1.0f, 100000 * 1.0f, -100000 * 1.0f,
+ -100000 * 1.0f);
+ int iPoint = 0;
+ FX_FLOAT half_width = line_width;
+ int iStartPoint, iEndPoint, iMiddlePoint;
+ FX_BOOL bJoin;
+ while (iPoint < m_PointCount) {
+ if (m_pPoints[iPoint].m_Flag == FXPT_MOVETO) {
+ iStartPoint = iPoint + 1;
+ iEndPoint = iPoint;
+ bJoin = FALSE;
+ } else {
+ if (m_pPoints[iPoint].m_Flag == FXPT_BEZIERTO) {
+ rect.UpdateRect(m_pPoints[iPoint].m_PointX, m_pPoints[iPoint].m_PointY);
+ rect.UpdateRect(m_pPoints[iPoint + 1].m_PointX,
+ m_pPoints[iPoint + 1].m_PointY);
+ iPoint += 2;
+ }
+ if (iPoint == m_PointCount - 1 ||
+ m_pPoints[iPoint + 1].m_Flag == FXPT_MOVETO) {
+ iStartPoint = iPoint - 1;
+ iEndPoint = iPoint;
+ bJoin = FALSE;
+ } else {
+ iStartPoint = iPoint - 1;
+ iMiddlePoint = iPoint;
+ iEndPoint = iPoint + 1;
+ bJoin = TRUE;
+ }
+ }
+ FX_FLOAT start_x = m_pPoints[iStartPoint].m_PointX;
+ FX_FLOAT start_y = m_pPoints[iStartPoint].m_PointY;
+ FX_FLOAT end_x = m_pPoints[iEndPoint].m_PointX;
+ FX_FLOAT end_y = m_pPoints[iEndPoint].m_PointY;
+ if (bJoin) {
+ FX_FLOAT middle_x = m_pPoints[iMiddlePoint].m_PointX;
+ FX_FLOAT middle_y = m_pPoints[iMiddlePoint].m_PointY;
+ _UpdateLineJoinPoints(rect, start_x, start_y, middle_x, middle_y, end_x,
+ end_y, half_width, miter_limit);
+ } else {
+ _UpdateLineEndPoints(rect, start_x, start_y, end_x, end_y, half_width);
+ }
+ iPoint++;
+ }
+ return rect;
+}
+void CFX_PathData::Transform(const CFX_AffineMatrix* pMatrix) {
+ if (pMatrix == NULL) {
+ return;
+ }
+ for (int i = 0; i < m_PointCount; i++) {
+ pMatrix->Transform(m_pPoints[i].m_PointX, m_pPoints[i].m_PointY);
+ }
+}
+FX_BOOL CFX_PathData::GetZeroAreaPath(CFX_PathData& NewPath,
+ CFX_AffineMatrix* pMatrix,
+ FX_BOOL& bThin,
+ FX_BOOL bAdjust) const {
+ if (m_PointCount < 3) {
+ return FALSE;
+ }
+ if (m_PointCount == 3 && (m_pPoints[0].m_Flag & FXPT_TYPE) == FXPT_MOVETO &&
+ (m_pPoints[1].m_Flag & FXPT_TYPE) == FXPT_LINETO &&
+ (m_pPoints[2].m_Flag & FXPT_TYPE) == FXPT_LINETO &&
+ m_pPoints[0].m_PointX == m_pPoints[2].m_PointX &&
+ m_pPoints[0].m_PointY == m_pPoints[2].m_PointY) {
+ NewPath.AddPointCount(2);
+ if (bAdjust) {
+ if (pMatrix) {
+ FX_FLOAT x = m_pPoints[0].m_PointX, y = m_pPoints[0].m_PointY;
+ pMatrix->TransformPoint(x, y);
+ x = (int)x + 0.5f;
+ y = (int)y + 0.5f;
+ NewPath.SetPoint(0, x, y, FXPT_MOVETO);
+ x = m_pPoints[1].m_PointX, y = m_pPoints[1].m_PointY;
+ pMatrix->TransformPoint(x, y);
+ x = (int)x + 0.5f;
+ y = (int)y + 0.5f;
+ NewPath.SetPoint(1, x, y, FXPT_LINETO);
+ pMatrix->SetIdentity();
+ } else {
+ FX_FLOAT x = (int)m_pPoints[0].m_PointX + 0.5f,
+ y = (int)m_pPoints[0].m_PointY + 0.5f;
+ NewPath.SetPoint(0, x, y, FXPT_MOVETO);
+ x = (int)m_pPoints[1].m_PointX + 0.5f,
+ y = (int)m_pPoints[1].m_PointY + 0.5f;
+ NewPath.SetPoint(1, x, y, FXPT_LINETO);
+ }
+ } else {
+ NewPath.SetPoint(0, m_pPoints[0].m_PointX, m_pPoints[0].m_PointY,
+ FXPT_MOVETO);
+ NewPath.SetPoint(1, m_pPoints[1].m_PointX, m_pPoints[1].m_PointY,
+ FXPT_LINETO);
}
- if (NewPath.GetPointCount() == 0) {
- return FALSE;
+ if (m_pPoints[0].m_PointX != m_pPoints[1].m_PointX &&
+ m_pPoints[0].m_PointY != m_pPoints[1].m_PointY) {
+ bThin = TRUE;
}
return TRUE;
-}
-FX_BOOL CFX_PathData::IsRect() const
-{
- if (m_PointCount != 5 && m_PointCount != 4) {
- return FALSE;
- }
- if ((m_PointCount == 5 && (m_pPoints[0].m_PointX != m_pPoints[4].m_PointX ||
- m_pPoints[0].m_PointY != m_pPoints[4].m_PointY)) ||
- (m_pPoints[0].m_PointX == m_pPoints[2].m_PointX && m_pPoints[0].m_PointY == m_pPoints[2].m_PointY) ||
- (m_pPoints[1].m_PointX == m_pPoints[3].m_PointX && m_pPoints[1].m_PointY == m_pPoints[3].m_PointY)) {
- return FALSE;
- }
- if (m_pPoints[0].m_PointX != m_pPoints[3].m_PointX && m_pPoints[0].m_PointY != m_pPoints[3].m_PointY) {
- return FALSE;
- }
- for (int i = 1; i < 4; i ++) {
- if ((m_pPoints[i].m_Flag & FXPT_TYPE) != FXPT_LINETO) {
- return FALSE;
- }
- if (m_pPoints[i].m_PointX != m_pPoints[i - 1].m_PointX && m_pPoints[i].m_PointY != m_pPoints[i - 1].m_PointY) {
- return FALSE;
- }
- }
- return m_PointCount == 5 || (m_pPoints[3].m_Flag & FXPT_CLOSEFIGURE);
-}
-FX_BOOL CFX_PathData::IsRect(const CFX_AffineMatrix* pMatrix, CFX_FloatRect* pRect) const
-{
- if (pMatrix == NULL) {
- if (!IsRect()) {
- return FALSE;
- }
- if (pRect) {
- pRect->left = m_pPoints[0].m_PointX;
- pRect->right = m_pPoints[2].m_PointX;
- pRect->bottom = m_pPoints[0].m_PointY;
- pRect->top = m_pPoints[2].m_PointY;
- pRect->Normalize();
- }
- return TRUE;
- }
- if (m_PointCount != 5 && m_PointCount != 4) {
- return FALSE;
- }
- if ((m_PointCount == 5 && (m_pPoints[0].m_PointX != m_pPoints[4].m_PointX || m_pPoints[0].m_PointY != m_pPoints[4].m_PointY)) ||
- (m_pPoints[1].m_PointX == m_pPoints[3].m_PointX && m_pPoints[1].m_PointY == m_pPoints[3].m_PointY)) {
- return FALSE;
- }
- if (m_PointCount == 4 && m_pPoints[0].m_PointX != m_pPoints[3].m_PointX && m_pPoints[0].m_PointY != m_pPoints[3].m_PointY) {
- return FALSE;
- }
- FX_FLOAT x[5], y[5];
- for (int i = 0; i < m_PointCount; i ++) {
- pMatrix->Transform(m_pPoints[i].m_PointX, m_pPoints[i].m_PointY, x[i], y[i]);
- if (i) {
- if ((m_pPoints[i].m_Flag & FXPT_TYPE) != FXPT_LINETO) {
- return FALSE;
- }
- if (x[i] != x[i - 1] && y[i] != y[i - 1]) {
- return FALSE;
- }
+ }
+ if (((m_PointCount > 3) && (m_PointCount % 2))) {
+ int mid = m_PointCount / 2;
+ FX_BOOL bZeroArea = FALSE;
+ CFX_PathData t_path;
+ for (int i = 0; i < mid; i++) {
+ if (!(m_pPoints[mid - i - 1].m_PointX ==
+ m_pPoints[mid + i + 1].m_PointX &&
+ m_pPoints[mid - i - 1].m_PointY ==
+ m_pPoints[mid + i + 1].m_PointY &&
+ ((m_pPoints[mid - i - 1].m_Flag & FXPT_TYPE) != FXPT_BEZIERTO &&
+ (m_pPoints[mid + i + 1].m_Flag & FXPT_TYPE) != FXPT_BEZIERTO))) {
+ bZeroArea = TRUE;
+ break;
+ }
+ int new_count = t_path.GetPointCount();
+ t_path.AddPointCount(2);
+ t_path.SetPoint(new_count, m_pPoints[mid - i].m_PointX,
+ m_pPoints[mid - i].m_PointY, FXPT_MOVETO);
+ t_path.SetPoint(new_count + 1, m_pPoints[mid - i - 1].m_PointX,
+ m_pPoints[mid - i - 1].m_PointY, FXPT_LINETO);
+ }
+ if (!bZeroArea) {
+ NewPath.Append(&t_path, NULL);
+ bThin = TRUE;
+ return TRUE;
+ }
+ }
+ int stratPoint = 0;
+ int next = 0, i;
+ for (i = 0; i < m_PointCount; i++) {
+ int point_type = m_pPoints[i].m_Flag & FXPT_TYPE;
+ if (point_type == FXPT_MOVETO) {
+ stratPoint = i;
+ } else if (point_type == FXPT_LINETO) {
+ next = (i + 1 - stratPoint) % (m_PointCount - stratPoint) + stratPoint;
+ if ((m_pPoints[next].m_Flag & FXPT_TYPE) != FXPT_BEZIERTO &&
+ (m_pPoints[next].m_Flag & FXPT_TYPE) != FXPT_MOVETO) {
+ if ((m_pPoints[i - 1].m_PointX == m_pPoints[i].m_PointX &&
+ m_pPoints[i].m_PointX == m_pPoints[next].m_PointX) &&
+ ((m_pPoints[i].m_PointY - m_pPoints[i - 1].m_PointY) *
+ (m_pPoints[i].m_PointY - m_pPoints[next].m_PointY) >
+ 0)) {
+ int pre = i;
+ if (FXSYS_fabs(m_pPoints[i].m_PointY - m_pPoints[i - 1].m_PointY) <
+ FXSYS_fabs(m_pPoints[i].m_PointY - m_pPoints[next].m_PointY)) {
+ pre--;
+ next--;
+ }
+ int new_count = NewPath.GetPointCount();
+ NewPath.AddPointCount(2);
+ NewPath.SetPoint(new_count, m_pPoints[pre].m_PointX,
+ m_pPoints[pre].m_PointY, FXPT_MOVETO);
+ NewPath.SetPoint(new_count + 1, m_pPoints[next].m_PointX,
+ m_pPoints[next].m_PointY, FXPT_LINETO);
+ } else if ((m_pPoints[i - 1].m_PointY == m_pPoints[i].m_PointY &&
+ m_pPoints[i].m_PointY == m_pPoints[next].m_PointY) &&
+ ((m_pPoints[i].m_PointX - m_pPoints[i - 1].m_PointX) *
+ (m_pPoints[i].m_PointX - m_pPoints[next].m_PointX) >
+ 0)) {
+ int pre = i;
+ if (FXSYS_fabs(m_pPoints[i].m_PointX - m_pPoints[i - 1].m_PointX) <
+ FXSYS_fabs(m_pPoints[i].m_PointX - m_pPoints[next].m_PointX)) {
+ pre--;
+ next--;
+ }
+ int new_count = NewPath.GetPointCount();
+ NewPath.AddPointCount(2);
+ NewPath.SetPoint(new_count, m_pPoints[pre].m_PointX,
+ m_pPoints[pre].m_PointY, FXPT_MOVETO);
+ NewPath.SetPoint(new_count + 1, m_pPoints[next].m_PointX,
+ m_pPoints[next].m_PointY, FXPT_LINETO);
+ } else if ((m_pPoints[i - 1].m_Flag & FXPT_TYPE) == FXPT_MOVETO &&
+ (m_pPoints[next].m_Flag & FXPT_TYPE) == FXPT_LINETO &&
+ m_pPoints[i - 1].m_PointX == m_pPoints[next].m_PointX &&
+ m_pPoints[i - 1].m_PointY == m_pPoints[next].m_PointY &&
+ m_pPoints[next].m_Flag & FXPT_CLOSEFIGURE) {
+ int new_count = NewPath.GetPointCount();
+ NewPath.AddPointCount(2);
+ NewPath.SetPoint(new_count, m_pPoints[i - 1].m_PointX,
+ m_pPoints[i - 1].m_PointY, FXPT_MOVETO);
+ NewPath.SetPoint(new_count + 1, m_pPoints[i].m_PointX,
+ m_pPoints[i].m_PointY, FXPT_LINETO);
+ bThin = TRUE;
}
+ }
+ } else if (point_type == FXPT_BEZIERTO) {
+ i += 2;
+ continue;
+ }
+ }
+ if (m_PointCount > 3 && NewPath.GetPointCount()) {
+ bThin = TRUE;
+ }
+ if (NewPath.GetPointCount() == 0) {
+ return FALSE;
+ }
+ return TRUE;
+}
+FX_BOOL CFX_PathData::IsRect() const {
+ if (m_PointCount != 5 && m_PointCount != 4) {
+ return FALSE;
+ }
+ if ((m_PointCount == 5 && (m_pPoints[0].m_PointX != m_pPoints[4].m_PointX ||
+ m_pPoints[0].m_PointY != m_pPoints[4].m_PointY)) ||
+ (m_pPoints[0].m_PointX == m_pPoints[2].m_PointX &&
+ m_pPoints[0].m_PointY == m_pPoints[2].m_PointY) ||
+ (m_pPoints[1].m_PointX == m_pPoints[3].m_PointX &&
+ m_pPoints[1].m_PointY == m_pPoints[3].m_PointY)) {
+ return FALSE;
+ }
+ if (m_pPoints[0].m_PointX != m_pPoints[3].m_PointX &&
+ m_pPoints[0].m_PointY != m_pPoints[3].m_PointY) {
+ return FALSE;
+ }
+ for (int i = 1; i < 4; i++) {
+ if ((m_pPoints[i].m_Flag & FXPT_TYPE) != FXPT_LINETO) {
+ return FALSE;
+ }
+ if (m_pPoints[i].m_PointX != m_pPoints[i - 1].m_PointX &&
+ m_pPoints[i].m_PointY != m_pPoints[i - 1].m_PointY) {
+ return FALSE;
+ }
+ }
+ return m_PointCount == 5 || (m_pPoints[3].m_Flag & FXPT_CLOSEFIGURE);
+}
+FX_BOOL CFX_PathData::IsRect(const CFX_AffineMatrix* pMatrix,
+ CFX_FloatRect* pRect) const {
+ if (pMatrix == NULL) {
+ if (!IsRect()) {
+ return FALSE;
}
if (pRect) {
- pRect->left = x[0];
- pRect->right = x[2];
- pRect->bottom = y[0];
- pRect->top = y[2];
- pRect->Normalize();
+ pRect->left = m_pPoints[0].m_PointX;
+ pRect->right = m_pPoints[2].m_PointX;
+ pRect->bottom = m_pPoints[0].m_PointY;
+ pRect->top = m_pPoints[2].m_PointY;
+ pRect->Normalize();
}
return TRUE;
-}
-void CFX_PathData::Copy(const CFX_PathData &src)
-{
- SetPointCount(src.m_PointCount);
- FXSYS_memcpy(m_pPoints, src.m_pPoints, sizeof(FX_PATHPOINT) * m_PointCount);
-}
-CFX_GraphStateData::CFX_GraphStateData()
-{
- m_LineCap = LineCapButt;
- m_DashCount = 0;
- m_DashArray = NULL;
- m_DashPhase = 0;
- m_LineJoin = LineJoinMiter;
- m_MiterLimit = 10 * 1.0f;
- m_LineWidth = 1.0f;
-}
-CFX_GraphStateData::CFX_GraphStateData(const CFX_GraphStateData& src)
-{
- m_DashArray = NULL;
- Copy(src);
-}
-void CFX_GraphStateData::Copy(const CFX_GraphStateData& src)
-{
- m_LineCap = src.m_LineCap;
- m_DashCount = src.m_DashCount;
- if (m_DashArray) {
- FX_Free(m_DashArray);
- }
- m_DashArray = NULL;
- m_DashPhase = src.m_DashPhase;
- m_LineJoin = src.m_LineJoin;
- m_MiterLimit = src.m_MiterLimit;
- m_LineWidth = src.m_LineWidth;
- if (m_DashCount) {
- m_DashArray = FX_Alloc(FX_FLOAT, m_DashCount);
- FXSYS_memcpy(m_DashArray, src.m_DashArray, m_DashCount * sizeof(FX_FLOAT));
- }
-}
-CFX_GraphStateData::~CFX_GraphStateData()
-{
- if (m_DashArray) {
- FX_Free(m_DashArray);
- }
-}
-void CFX_GraphStateData::SetDashCount(int count)
-{
- if (m_DashArray) {
- FX_Free(m_DashArray);
- }
- m_DashArray = NULL;
- m_DashCount = count;
- if (count == 0) {
- return;
- }
- m_DashArray = FX_Alloc(FX_FLOAT, count);
+ }
+ if (m_PointCount != 5 && m_PointCount != 4) {
+ return FALSE;
+ }
+ if ((m_PointCount == 5 && (m_pPoints[0].m_PointX != m_pPoints[4].m_PointX ||
+ m_pPoints[0].m_PointY != m_pPoints[4].m_PointY)) ||
+ (m_pPoints[1].m_PointX == m_pPoints[3].m_PointX &&
+ m_pPoints[1].m_PointY == m_pPoints[3].m_PointY)) {
+ return FALSE;
+ }
+ if (m_PointCount == 4 && m_pPoints[0].m_PointX != m_pPoints[3].m_PointX &&
+ m_pPoints[0].m_PointY != m_pPoints[3].m_PointY) {
+ return FALSE;
+ }
+ FX_FLOAT x[5], y[5];
+ for (int i = 0; i < m_PointCount; i++) {
+ pMatrix->Transform(m_pPoints[i].m_PointX, m_pPoints[i].m_PointY, x[i],
+ y[i]);
+ if (i) {
+ if ((m_pPoints[i].m_Flag & FXPT_TYPE) != FXPT_LINETO) {
+ return FALSE;
+ }
+ if (x[i] != x[i - 1] && y[i] != y[i - 1]) {
+ return FALSE;
+ }
+ }
+ }
+ if (pRect) {
+ pRect->left = x[0];
+ pRect->right = x[2];
+ pRect->bottom = y[0];
+ pRect->top = y[2];
+ pRect->Normalize();
+ }
+ return TRUE;
+}
+void CFX_PathData::Copy(const CFX_PathData& src) {
+ SetPointCount(src.m_PointCount);
+ FXSYS_memcpy(m_pPoints, src.m_pPoints, sizeof(FX_PATHPOINT) * m_PointCount);
+}
+CFX_GraphStateData::CFX_GraphStateData() {
+ m_LineCap = LineCapButt;
+ m_DashCount = 0;
+ m_DashArray = NULL;
+ m_DashPhase = 0;
+ m_LineJoin = LineJoinMiter;
+ m_MiterLimit = 10 * 1.0f;
+ m_LineWidth = 1.0f;
+}
+CFX_GraphStateData::CFX_GraphStateData(const CFX_GraphStateData& src) {
+ m_DashArray = NULL;
+ Copy(src);
+}
+void CFX_GraphStateData::Copy(const CFX_GraphStateData& src) {
+ m_LineCap = src.m_LineCap;
+ m_DashCount = src.m_DashCount;
+ if (m_DashArray) {
+ FX_Free(m_DashArray);
+ }
+ m_DashArray = NULL;
+ m_DashPhase = src.m_DashPhase;
+ m_LineJoin = src.m_LineJoin;
+ m_MiterLimit = src.m_MiterLimit;
+ m_LineWidth = src.m_LineWidth;
+ if (m_DashCount) {
+ m_DashArray = FX_Alloc(FX_FLOAT, m_DashCount);
+ FXSYS_memcpy(m_DashArray, src.m_DashArray, m_DashCount * sizeof(FX_FLOAT));
+ }
+}
+CFX_GraphStateData::~CFX_GraphStateData() {
+ if (m_DashArray) {
+ FX_Free(m_DashArray);
+ }
+}
+void CFX_GraphStateData::SetDashCount(int count) {
+ if (m_DashArray) {
+ FX_Free(m_DashArray);
+ }
+ m_DashArray = NULL;
+ m_DashCount = count;
+ if (count == 0) {
+ return;
+ }
+ m_DashArray = FX_Alloc(FX_FLOAT, count);
}
diff --git a/core/src/fxge/ge/fx_ge_ps.cpp b/core/src/fxge/ge/fx_ge_ps.cpp
index ba5c5fbabb..d20825d458 100644
--- a/core/src/fxge/ge/fx_ge_ps.cpp
+++ b/core/src/fxge/ge/fx_ge_ps.cpp
@@ -8,172 +8,173 @@
#include "../../../include/fxcodec/fx_codec.h"
#include "text_int.h"
struct PSGlyph {
- CFX_Font* m_pFont;
- FX_DWORD m_GlyphIndex;
- FX_BOOL m_bGlyphAdjust;
- FX_FLOAT m_AdjustMatrix[4];
+ CFX_Font* m_pFont;
+ FX_DWORD m_GlyphIndex;
+ FX_BOOL m_bGlyphAdjust;
+ FX_FLOAT m_AdjustMatrix[4];
};
-class CPSFont
-{
-public:
- PSGlyph m_Glyphs[256];
- int m_nGlyphs;
+class CPSFont {
+ public:
+ PSGlyph m_Glyphs[256];
+ int m_nGlyphs;
};
-CFX_PSRenderer::CFX_PSRenderer()
-{
- m_pOutput = NULL;
- m_bColorSet = m_bGraphStateSet = FALSE;
- m_bInited = FALSE;
+CFX_PSRenderer::CFX_PSRenderer() {
+ m_pOutput = NULL;
+ m_bColorSet = m_bGraphStateSet = FALSE;
+ m_bInited = FALSE;
}
-CFX_PSRenderer::~CFX_PSRenderer()
-{
- for (int i = 0; i < (int)m_PSFontList.GetSize(); i ++) {
- CPSFont* pFont = m_PSFontList[i];
- delete pFont;
- }
+CFX_PSRenderer::~CFX_PSRenderer() {
+ for (int i = 0; i < (int)m_PSFontList.GetSize(); i++) {
+ CPSFont* pFont = m_PSFontList[i];
+ delete pFont;
+ }
}
-#define OUTPUT_PS(str) m_pOutput->OutputPS(str, sizeof str-1)
-void CFX_PSRenderer::Init(IFX_PSOutput* pOutput, int pslevel, int width, int height, FX_BOOL bCmykOutput)
-{
- m_PSLevel = pslevel;
- m_pOutput = pOutput;
- m_ClipBox.left = m_ClipBox.top = 0;
- m_ClipBox.right = width;
- m_ClipBox.bottom = height;
- m_bCmykOutput = bCmykOutput;
+#define OUTPUT_PS(str) m_pOutput->OutputPS(str, sizeof str - 1)
+void CFX_PSRenderer::Init(IFX_PSOutput* pOutput,
+ int pslevel,
+ int width,
+ int height,
+ FX_BOOL bCmykOutput) {
+ m_PSLevel = pslevel;
+ m_pOutput = pOutput;
+ m_ClipBox.left = m_ClipBox.top = 0;
+ m_ClipBox.right = width;
+ m_ClipBox.bottom = height;
+ m_bCmykOutput = bCmykOutput;
}
-FX_BOOL CFX_PSRenderer::StartRendering()
-{
- if (m_bInited) {
- return TRUE;
- }
- static const char init_str[] = "\nsave\n/im/initmatrix load def\n"
- "/n/newpath load def/m/moveto load def/l/lineto load def/c/curveto load def/h/closepath load def\n"
- "/f/fill load def/F/eofill load def/s/stroke load def/W/clip load def/W*/eoclip load def\n"
- "/rg/setrgbcolor load def/k/setcmykcolor load def\n"
- "/J/setlinecap load def/j/setlinejoin load def/w/setlinewidth load def/M/setmiterlimit load def/d/setdash load def\n"
- "/q/gsave load def/Q/grestore load def/iM/imagemask load def\n"
- "/Tj/show load def/Ff/findfont load def/Fs/scalefont load def/Sf/setfont load def\n"
- "/cm/concat load def/Cm/currentmatrix load def/mx/matrix load def/sm/setmatrix load def\n"
- ;
- OUTPUT_PS(init_str);
- m_bInited = TRUE;
+FX_BOOL CFX_PSRenderer::StartRendering() {
+ if (m_bInited) {
return TRUE;
+ }
+ static const char init_str[] =
+ "\nsave\n/im/initmatrix load def\n"
+ "/n/newpath load def/m/moveto load def/l/lineto load def/c/curveto load "
+ "def/h/closepath load def\n"
+ "/f/fill load def/F/eofill load def/s/stroke load def/W/clip load "
+ "def/W*/eoclip load def\n"
+ "/rg/setrgbcolor load def/k/setcmykcolor load def\n"
+ "/J/setlinecap load def/j/setlinejoin load def/w/setlinewidth load "
+ "def/M/setmiterlimit load def/d/setdash load def\n"
+ "/q/gsave load def/Q/grestore load def/iM/imagemask load def\n"
+ "/Tj/show load def/Ff/findfont load def/Fs/scalefont load def/Sf/setfont "
+ "load def\n"
+ "/cm/concat load def/Cm/currentmatrix load def/mx/matrix load "
+ "def/sm/setmatrix load def\n";
+ OUTPUT_PS(init_str);
+ m_bInited = TRUE;
+ return TRUE;
}
-void CFX_PSRenderer::EndRendering()
-{
- if (m_bInited) {
- OUTPUT_PS("\nrestore\n");
- }
- m_bInited = FALSE;
+void CFX_PSRenderer::EndRendering() {
+ if (m_bInited) {
+ OUTPUT_PS("\nrestore\n");
+ }
+ m_bInited = FALSE;
}
-void CFX_PSRenderer::SaveState()
-{
- StartRendering();
- OUTPUT_PS("q\n");
- m_ClipBoxStack.Add(m_ClipBox);
+void CFX_PSRenderer::SaveState() {
+ StartRendering();
+ OUTPUT_PS("q\n");
+ m_ClipBoxStack.Add(m_ClipBox);
}
-void CFX_PSRenderer::RestoreState(FX_BOOL bKeepSaved)
-{
- StartRendering();
- if (bKeepSaved) {
- OUTPUT_PS("Q\nq\n");
- } else {
- OUTPUT_PS("Q\n");
- }
- m_bColorSet = m_bGraphStateSet = FALSE;
- m_ClipBox = m_ClipBoxStack.GetAt(m_ClipBoxStack.GetSize() - 1);
- if (!bKeepSaved) {
- m_ClipBoxStack.RemoveAt(m_ClipBoxStack.GetSize() - 1);
- }
+void CFX_PSRenderer::RestoreState(FX_BOOL bKeepSaved) {
+ StartRendering();
+ if (bKeepSaved) {
+ OUTPUT_PS("Q\nq\n");
+ } else {
+ OUTPUT_PS("Q\n");
+ }
+ m_bColorSet = m_bGraphStateSet = FALSE;
+ m_ClipBox = m_ClipBoxStack.GetAt(m_ClipBoxStack.GetSize() - 1);
+ if (!bKeepSaved) {
+ m_ClipBoxStack.RemoveAt(m_ClipBoxStack.GetSize() - 1);
+ }
}
-void CFX_PSRenderer::OutputPath(const CFX_PathData* pPathData, const CFX_AffineMatrix* pObject2Device)
-{
- int nPoints = pPathData->GetPointCount();
- CFX_ByteTextBuf buf;
- buf.EstimateSize(nPoints * 10);
- for (int i = 0; i < nPoints; i ++) {
- uint8_t flag = pPathData->GetFlag(i);
- FX_FLOAT x = pPathData->GetPointX(i);
- FX_FLOAT y = pPathData->GetPointY(i);
+void CFX_PSRenderer::OutputPath(const CFX_PathData* pPathData,
+ const CFX_AffineMatrix* pObject2Device) {
+ int nPoints = pPathData->GetPointCount();
+ CFX_ByteTextBuf buf;
+ buf.EstimateSize(nPoints * 10);
+ for (int i = 0; i < nPoints; i++) {
+ uint8_t flag = pPathData->GetFlag(i);
+ FX_FLOAT x = pPathData->GetPointX(i);
+ FX_FLOAT y = pPathData->GetPointY(i);
+ if (pObject2Device) {
+ pObject2Device->Transform(x, y);
+ }
+ buf << x << FX_BSTRC(" ") << y;
+ switch (flag & FXPT_TYPE) {
+ case FXPT_MOVETO:
+ buf << FX_BSTRC(" m ");
+ break;
+ case FXPT_LINETO:
+ if (flag & FXPT_CLOSEFIGURE) {
+ buf << FX_BSTRC(" l h ");
+ } else {
+ buf << FX_BSTRC(" l ");
+ }
+ break;
+ case FXPT_BEZIERTO: {
+ FX_FLOAT x1 = pPathData->GetPointX(i + 1);
+ FX_FLOAT x2 = pPathData->GetPointX(i + 2);
+ FX_FLOAT y1 = pPathData->GetPointY(i + 1);
+ FX_FLOAT y2 = pPathData->GetPointY(i + 2);
if (pObject2Device) {
- pObject2Device->Transform(x, y);
+ pObject2Device->Transform(x1, y1);
+ pObject2Device->Transform(x2, y2);
}
- buf << x << FX_BSTRC(" ") << y;
- switch (flag & FXPT_TYPE) {
- case FXPT_MOVETO:
- buf << FX_BSTRC(" m ");
- break;
- case FXPT_LINETO:
- if (flag & FXPT_CLOSEFIGURE) {
- buf << FX_BSTRC(" l h ");
- } else {
- buf << FX_BSTRC(" l ");
- }
- break;
- case FXPT_BEZIERTO: {
- FX_FLOAT x1 = pPathData->GetPointX(i + 1);
- FX_FLOAT x2 = pPathData->GetPointX(i + 2);
- FX_FLOAT y1 = pPathData->GetPointY(i + 1);
- FX_FLOAT y2 = pPathData->GetPointY(i + 2);
- if (pObject2Device) {
- pObject2Device->Transform(x1, y1);
- pObject2Device->Transform(x2, y2);
- }
- buf << FX_BSTRC(" ") << x1 << FX_BSTRC(" ") << y1 << FX_BSTRC(" ") << x2 << FX_BSTRC(" ") << y2;
- if (flag & FXPT_CLOSEFIGURE) {
- buf << FX_BSTRC(" c h\n");
- } else {
- buf << FX_BSTRC(" c\n");
- }
- i += 2;
- break;
- }
+ buf << FX_BSTRC(" ") << x1 << FX_BSTRC(" ") << y1 << FX_BSTRC(" ") << x2
+ << FX_BSTRC(" ") << y2;
+ if (flag & FXPT_CLOSEFIGURE) {
+ buf << FX_BSTRC(" c h\n");
+ } else {
+ buf << FX_BSTRC(" c\n");
}
+ i += 2;
+ break;
+ }
}
- m_pOutput->OutputPS((const FX_CHAR*)buf.GetBuffer(), buf.GetSize());
+ }
+ m_pOutput->OutputPS((const FX_CHAR*)buf.GetBuffer(), buf.GetSize());
}
void CFX_PSRenderer::SetClip_PathFill(const CFX_PathData* pPathData,
const CFX_AffineMatrix* pObject2Device,
- int fill_mode
- )
-{
- StartRendering();
- OutputPath(pPathData, pObject2Device);
- CFX_FloatRect rect = pPathData->GetBoundingBox();
- if (pObject2Device) {
- rect.Transform(pObject2Device);
- }
- m_ClipBox.Intersect(rect.GetOutterRect());
- if ((fill_mode & 3) == FXFILL_WINDING) {
- OUTPUT_PS("W n\n");
- } else {
- OUTPUT_PS("W* n\n");
- }
+ int fill_mode) {
+ StartRendering();
+ OutputPath(pPathData, pObject2Device);
+ CFX_FloatRect rect = pPathData->GetBoundingBox();
+ if (pObject2Device) {
+ rect.Transform(pObject2Device);
+ }
+ m_ClipBox.Intersect(rect.GetOutterRect());
+ if ((fill_mode & 3) == FXFILL_WINDING) {
+ OUTPUT_PS("W n\n");
+ } else {
+ OUTPUT_PS("W* n\n");
+ }
}
void CFX_PSRenderer::SetClip_PathStroke(const CFX_PathData* pPathData,
const CFX_AffineMatrix* pObject2Device,
- const CFX_GraphStateData* pGraphState
- )
-{
- StartRendering();
- SetGraphState(pGraphState);
- if (pObject2Device) {
- CFX_ByteTextBuf buf;
- buf << FX_BSTRC("mx Cm [") << pObject2Device->a << FX_BSTRC(" ") << pObject2Device->b << FX_BSTRC(" ") <<
- pObject2Device->c << FX_BSTRC(" ") << pObject2Device->d << FX_BSTRC(" ") << pObject2Device->e <<
- FX_BSTRC(" ") << pObject2Device->f << FX_BSTRC("]cm ");
- m_pOutput->OutputPS((const FX_CHAR*)buf.GetBuffer(), buf.GetSize());
- }
- OutputPath(pPathData, NULL);
- CFX_FloatRect rect = pPathData->GetBoundingBox(pGraphState->m_LineWidth, pGraphState->m_MiterLimit);
- rect.Transform(pObject2Device);
- m_ClipBox.Intersect(rect.GetOutterRect());
- if (pObject2Device) {
- OUTPUT_PS("strokepath W n sm\n");
- } else {
- OUTPUT_PS("strokepath W n\n");
- }
+ const CFX_GraphStateData* pGraphState) {
+ StartRendering();
+ SetGraphState(pGraphState);
+ if (pObject2Device) {
+ CFX_ByteTextBuf buf;
+ buf << FX_BSTRC("mx Cm [") << pObject2Device->a << FX_BSTRC(" ")
+ << pObject2Device->b << FX_BSTRC(" ") << pObject2Device->c
+ << FX_BSTRC(" ") << pObject2Device->d << FX_BSTRC(" ")
+ << pObject2Device->e << FX_BSTRC(" ") << pObject2Device->f
+ << FX_BSTRC("]cm ");
+ m_pOutput->OutputPS((const FX_CHAR*)buf.GetBuffer(), buf.GetSize());
+ }
+ OutputPath(pPathData, NULL);
+ CFX_FloatRect rect = pPathData->GetBoundingBox(pGraphState->m_LineWidth,
+ pGraphState->m_MiterLimit);
+ rect.Transform(pObject2Device);
+ m_ClipBox.Intersect(rect.GetOutterRect());
+ if (pObject2Device) {
+ OUTPUT_PS("strokepath W n sm\n");
+ } else {
+ OUTPUT_PS("strokepath W n\n");
+ }
}
FX_BOOL CFX_PSRenderer::DrawPath(const CFX_PathData* pPathData,
const CFX_AffineMatrix* pObject2Device,
@@ -182,463 +183,536 @@ FX_BOOL CFX_PSRenderer::DrawPath(const CFX_PathData* pPathData,
FX_DWORD stroke_color,
int fill_mode,
int alpha_flag,
- void* pIccTransform
- )
-{
- StartRendering();
- int fill_alpha = FXGETFLAG_COLORTYPE(alpha_flag) ? FXGETFLAG_ALPHA_FILL(alpha_flag) : FXARGB_A(fill_color);
- int stroke_alpha = FXGETFLAG_COLORTYPE(alpha_flag) ? FXGETFLAG_ALPHA_STROKE(alpha_flag) : FXARGB_A(stroke_color);
- if (fill_alpha && fill_alpha < 255) {
- return FALSE;
- }
- if (stroke_alpha && stroke_alpha < 255) {
- return FALSE;
- }
- if (fill_alpha == 0 && stroke_alpha == 0) {
- return FALSE;
- }
- if (stroke_alpha) {
- SetGraphState(pGraphState);
- if (pObject2Device) {
- CFX_ByteTextBuf buf;
- buf << FX_BSTRC("mx Cm [") << pObject2Device->a << FX_BSTRC(" ") << pObject2Device->b << FX_BSTRC(" ") <<
- pObject2Device->c << FX_BSTRC(" ") << pObject2Device->d << FX_BSTRC(" ") << pObject2Device->e <<
- FX_BSTRC(" ") << pObject2Device->f << FX_BSTRC("]cm ");
- m_pOutput->OutputPS((const FX_CHAR*)buf.GetBuffer(), buf.GetSize());
- }
- }
- OutputPath(pPathData, stroke_alpha ? NULL : pObject2Device);
- if (fill_mode && fill_alpha) {
- SetColor(fill_color, alpha_flag, pIccTransform);
- if ((fill_mode & 3) == FXFILL_WINDING) {
- if (stroke_alpha) {
- OUTPUT_PS("q f Q ");
- } else {
- OUTPUT_PS("f");
- }
- } else if ((fill_mode & 3) == FXFILL_ALTERNATE) {
- if (stroke_alpha) {
- OUTPUT_PS("q F Q ");
- } else {
- OUTPUT_PS("F");
- }
- }
- }
- if (stroke_alpha) {
- SetColor(stroke_color, alpha_flag, pIccTransform);
- if (pObject2Device) {
- OUTPUT_PS("s sm");
- } else {
- OUTPUT_PS("s");
- }
+ void* pIccTransform) {
+ StartRendering();
+ int fill_alpha = FXGETFLAG_COLORTYPE(alpha_flag)
+ ? FXGETFLAG_ALPHA_FILL(alpha_flag)
+ : FXARGB_A(fill_color);
+ int stroke_alpha = FXGETFLAG_COLORTYPE(alpha_flag)
+ ? FXGETFLAG_ALPHA_STROKE(alpha_flag)
+ : FXARGB_A(stroke_color);
+ if (fill_alpha && fill_alpha < 255) {
+ return FALSE;
+ }
+ if (stroke_alpha && stroke_alpha < 255) {
+ return FALSE;
+ }
+ if (fill_alpha == 0 && stroke_alpha == 0) {
+ return FALSE;
+ }
+ if (stroke_alpha) {
+ SetGraphState(pGraphState);
+ if (pObject2Device) {
+ CFX_ByteTextBuf buf;
+ buf << FX_BSTRC("mx Cm [") << pObject2Device->a << FX_BSTRC(" ")
+ << pObject2Device->b << FX_BSTRC(" ") << pObject2Device->c
+ << FX_BSTRC(" ") << pObject2Device->d << FX_BSTRC(" ")
+ << pObject2Device->e << FX_BSTRC(" ") << pObject2Device->f
+ << FX_BSTRC("]cm ");
+ m_pOutput->OutputPS((const FX_CHAR*)buf.GetBuffer(), buf.GetSize());
+ }
+ }
+ OutputPath(pPathData, stroke_alpha ? NULL : pObject2Device);
+ if (fill_mode && fill_alpha) {
+ SetColor(fill_color, alpha_flag, pIccTransform);
+ if ((fill_mode & 3) == FXFILL_WINDING) {
+ if (stroke_alpha) {
+ OUTPUT_PS("q f Q ");
+ } else {
+ OUTPUT_PS("f");
+ }
+ } else if ((fill_mode & 3) == FXFILL_ALTERNATE) {
+ if (stroke_alpha) {
+ OUTPUT_PS("q F Q ");
+ } else {
+ OUTPUT_PS("F");
+ }
+ }
+ }
+ if (stroke_alpha) {
+ SetColor(stroke_color, alpha_flag, pIccTransform);
+ if (pObject2Device) {
+ OUTPUT_PS("s sm");
+ } else {
+ OUTPUT_PS("s");
}
- OUTPUT_PS("\n");
- return TRUE;
+ }
+ OUTPUT_PS("\n");
+ return TRUE;
}
-void CFX_PSRenderer::SetGraphState(const CFX_GraphStateData* pGraphState)
-{
- CFX_ByteTextBuf buf;
- if (!m_bGraphStateSet || m_CurGraphState.m_LineCap != pGraphState->m_LineCap) {
- buf << pGraphState->m_LineCap << FX_BSTRC(" J\n");
- }
- if (!m_bGraphStateSet || m_CurGraphState.m_DashCount != pGraphState->m_DashCount ||
- FXSYS_memcmp(m_CurGraphState.m_DashArray, pGraphState->m_DashArray, sizeof(FX_FLOAT)*m_CurGraphState.m_DashCount)) {
- buf << FX_BSTRC("[");
- for (int i = 0; i < pGraphState->m_DashCount; i ++) {
- buf << pGraphState->m_DashArray[i] << FX_BSTRC(" ");
- }
- buf << FX_BSTRC("]") << pGraphState->m_DashPhase << FX_BSTRC(" d\n");
- }
- if (!m_bGraphStateSet || m_CurGraphState.m_LineJoin != pGraphState->m_LineJoin) {
- buf << pGraphState->m_LineJoin << FX_BSTRC(" j\n");
- }
- if (!m_bGraphStateSet || m_CurGraphState.m_LineWidth != pGraphState->m_LineWidth) {
- buf << pGraphState->m_LineWidth << FX_BSTRC(" w\n");
- }
- if (!m_bGraphStateSet || m_CurGraphState.m_MiterLimit != pGraphState->m_MiterLimit) {
- buf << pGraphState->m_MiterLimit << FX_BSTRC(" M\n");
- }
- m_CurGraphState.Copy(*pGraphState);
- m_bGraphStateSet = TRUE;
- if (buf.GetSize()) {
- m_pOutput->OutputPS((const FX_CHAR*)buf.GetBuffer(), buf.GetSize());
- }
+void CFX_PSRenderer::SetGraphState(const CFX_GraphStateData* pGraphState) {
+ CFX_ByteTextBuf buf;
+ if (!m_bGraphStateSet ||
+ m_CurGraphState.m_LineCap != pGraphState->m_LineCap) {
+ buf << pGraphState->m_LineCap << FX_BSTRC(" J\n");
+ }
+ if (!m_bGraphStateSet ||
+ m_CurGraphState.m_DashCount != pGraphState->m_DashCount ||
+ FXSYS_memcmp(m_CurGraphState.m_DashArray, pGraphState->m_DashArray,
+ sizeof(FX_FLOAT) * m_CurGraphState.m_DashCount)) {
+ buf << FX_BSTRC("[");
+ for (int i = 0; i < pGraphState->m_DashCount; i++) {
+ buf << pGraphState->m_DashArray[i] << FX_BSTRC(" ");
+ }
+ buf << FX_BSTRC("]") << pGraphState->m_DashPhase << FX_BSTRC(" d\n");
+ }
+ if (!m_bGraphStateSet ||
+ m_CurGraphState.m_LineJoin != pGraphState->m_LineJoin) {
+ buf << pGraphState->m_LineJoin << FX_BSTRC(" j\n");
+ }
+ if (!m_bGraphStateSet ||
+ m_CurGraphState.m_LineWidth != pGraphState->m_LineWidth) {
+ buf << pGraphState->m_LineWidth << FX_BSTRC(" w\n");
+ }
+ if (!m_bGraphStateSet ||
+ m_CurGraphState.m_MiterLimit != pGraphState->m_MiterLimit) {
+ buf << pGraphState->m_MiterLimit << FX_BSTRC(" M\n");
+ }
+ m_CurGraphState.Copy(*pGraphState);
+ m_bGraphStateSet = TRUE;
+ if (buf.GetSize()) {
+ m_pOutput->OutputPS((const FX_CHAR*)buf.GetBuffer(), buf.GetSize());
+ }
}
-static void FaxCompressData(uint8_t* src_buf, int width, int height, uint8_t*& dest_buf, FX_DWORD& dest_size)
-{
- CCodec_ModuleMgr* pEncoders = CFX_GEModule::Get()->GetCodecModule();
- if (width * height > 128 && pEncoders && pEncoders->GetFaxModule()->Encode(src_buf, width, height, (width + 7) / 8, dest_buf, dest_size)) {
- FX_Free(src_buf);
- } else {
- dest_buf = src_buf;
- dest_size = (width + 7) / 8 * height;
- }
+static void FaxCompressData(uint8_t* src_buf,
+ int width,
+ int height,
+ uint8_t*& dest_buf,
+ FX_DWORD& dest_size) {
+ CCodec_ModuleMgr* pEncoders = CFX_GEModule::Get()->GetCodecModule();
+ if (width * height > 128 && pEncoders &&
+ pEncoders->GetFaxModule()->Encode(src_buf, width, height, (width + 7) / 8,
+ dest_buf, dest_size)) {
+ FX_Free(src_buf);
+ } else {
+ dest_buf = src_buf;
+ dest_size = (width + 7) / 8 * height;
+ }
}
-static void PSCompressData(int PSLevel, uint8_t* src_buf, FX_DWORD src_size,
- uint8_t*& output_buf, FX_DWORD& output_size, const FX_CHAR*& filter)
-{
- output_buf = src_buf;
- output_size = src_size;
- filter = "";
- if (src_size < 1024) {
- return;
- }
- CCodec_ModuleMgr* pEncoders = CFX_GEModule::Get()->GetCodecModule();
- uint8_t* dest_buf = NULL;
- FX_DWORD dest_size = src_size;
- if (PSLevel >= 3) {
- if (pEncoders && pEncoders->GetFlateModule()->Encode(src_buf, src_size, dest_buf, dest_size)) {
- filter = "/FlateDecode filter ";
- }
- } else {
- if (pEncoders && pEncoders->GetBasicModule()->RunLengthEncode(src_buf, src_size, dest_buf, dest_size)) {
- filter = "/RunLengthDecode filter ";
- }
- }
- if (dest_size < src_size) {
- output_buf = dest_buf;
- output_size = dest_size;
- } else {
- filter = NULL;
- if (dest_buf) {
- FX_Free(dest_buf);
- }
- }
+static void PSCompressData(int PSLevel,
+ uint8_t* src_buf,
+ FX_DWORD src_size,
+ uint8_t*& output_buf,
+ FX_DWORD& output_size,
+ const FX_CHAR*& filter) {
+ output_buf = src_buf;
+ output_size = src_size;
+ filter = "";
+ if (src_size < 1024) {
+ return;
+ }
+ CCodec_ModuleMgr* pEncoders = CFX_GEModule::Get()->GetCodecModule();
+ uint8_t* dest_buf = NULL;
+ FX_DWORD dest_size = src_size;
+ if (PSLevel >= 3) {
+ if (pEncoders &&
+ pEncoders->GetFlateModule()->Encode(src_buf, src_size, dest_buf,
+ dest_size)) {
+ filter = "/FlateDecode filter ";
+ }
+ } else {
+ if (pEncoders &&
+ pEncoders->GetBasicModule()->RunLengthEncode(src_buf, src_size,
+ dest_buf, dest_size)) {
+ filter = "/RunLengthDecode filter ";
+ }
+ }
+ if (dest_size < src_size) {
+ output_buf = dest_buf;
+ output_size = dest_size;
+ } else {
+ filter = NULL;
+ if (dest_buf) {
+ FX_Free(dest_buf);
+ }
+ }
}
-FX_BOOL CFX_PSRenderer::SetDIBits(const CFX_DIBSource* pSource, FX_DWORD color, int left, int top,
- int alpha_flag, void* pIccTransform)
-{
- StartRendering();
- CFX_AffineMatrix matrix((FX_FLOAT)(pSource->GetWidth()), 0.0f, 0.0f, -(FX_FLOAT)(pSource->GetHeight()),
- (FX_FLOAT)(left), (FX_FLOAT)(top + pSource->GetHeight()));
- return DrawDIBits(pSource, color, &matrix, 0, alpha_flag, pIccTransform);
+FX_BOOL CFX_PSRenderer::SetDIBits(const CFX_DIBSource* pSource,
+ FX_DWORD color,
+ int left,
+ int top,
+ int alpha_flag,
+ void* pIccTransform) {
+ StartRendering();
+ CFX_AffineMatrix matrix((FX_FLOAT)(pSource->GetWidth()), 0.0f, 0.0f,
+ -(FX_FLOAT)(pSource->GetHeight()), (FX_FLOAT)(left),
+ (FX_FLOAT)(top + pSource->GetHeight()));
+ return DrawDIBits(pSource, color, &matrix, 0, alpha_flag, pIccTransform);
}
-FX_BOOL CFX_PSRenderer::StretchDIBits(const CFX_DIBSource* pSource, FX_DWORD color, int dest_left, int dest_top,
- int dest_width, int dest_height, FX_DWORD flags,
- int alpha_flag, void* pIccTransform)
-{
- StartRendering();
- CFX_AffineMatrix matrix((FX_FLOAT)(dest_width), 0.0f, 0.0f, (FX_FLOAT)(-dest_height),
- (FX_FLOAT)(dest_left), (FX_FLOAT)(dest_top + dest_height));
- return DrawDIBits(pSource, color, &matrix, flags, alpha_flag, pIccTransform);
+FX_BOOL CFX_PSRenderer::StretchDIBits(const CFX_DIBSource* pSource,
+ FX_DWORD color,
+ int dest_left,
+ int dest_top,
+ int dest_width,
+ int dest_height,
+ FX_DWORD flags,
+ int alpha_flag,
+ void* pIccTransform) {
+ StartRendering();
+ CFX_AffineMatrix matrix((FX_FLOAT)(dest_width), 0.0f, 0.0f,
+ (FX_FLOAT)(-dest_height), (FX_FLOAT)(dest_left),
+ (FX_FLOAT)(dest_top + dest_height));
+ return DrawDIBits(pSource, color, &matrix, flags, alpha_flag, pIccTransform);
}
-FX_BOOL CFX_PSRenderer::DrawDIBits(const CFX_DIBSource* pSource, FX_DWORD color,
- const CFX_AffineMatrix* pMatrix, FX_DWORD flags,
- int alpha_flag, void* pIccTransform)
-{
- StartRendering();
- if ((pMatrix->a == 0 && pMatrix->b == 0) || (pMatrix->c == 0 && pMatrix->d == 0)) {
- return TRUE;
- }
- if (pSource->HasAlpha()) {
- return FALSE;
- }
- int alpha = FXGETFLAG_COLORTYPE(alpha_flag) ? FXGETFLAG_ALPHA_FILL(color) : FXARGB_A(color);
- if (pSource->IsAlphaMask() && (alpha < 255 || pSource->GetBPP() != 1)) {
- return FALSE;
- }
- OUTPUT_PS("q\n");
- CFX_ByteTextBuf buf;
- buf << FX_BSTRC("[") << pMatrix->a << FX_BSTRC(" ") << pMatrix->b << FX_BSTRC(" ") <<
- pMatrix->c << FX_BSTRC(" ") << pMatrix->d << FX_BSTRC(" ") << pMatrix->e <<
- FX_BSTRC(" ") << pMatrix->f << FX_BSTRC("]cm ");
- int width = pSource->GetWidth();
- int height = pSource->GetHeight();
- buf << width << FX_BSTRC(" ") << height;
- if (pSource->GetBPP() == 1 && pSource->GetPalette() == NULL) {
- int pitch = (width + 7) / 8;
- FX_DWORD src_size = height * pitch;
- uint8_t* src_buf = FX_Alloc(uint8_t, src_size);
- for (int row = 0; row < height; row ++) {
- const uint8_t* src_scan = pSource->GetScanline(row);
- FXSYS_memcpy(src_buf + row * pitch, src_scan, pitch);
- }
- uint8_t* output_buf;
- FX_DWORD output_size;
- FaxCompressData(src_buf, width, height, output_buf, output_size);
- if (pSource->IsAlphaMask()) {
- SetColor(color, alpha_flag, pIccTransform);
- m_bColorSet = FALSE;
- buf << FX_BSTRC(" true[");
- } else {
- buf << FX_BSTRC(" 1[");
- }
- buf << width << FX_BSTRC(" 0 0 -") << height << FX_BSTRC(" 0 ") << height <<
- FX_BSTRC("]currentfile/ASCII85Decode filter ");
- if (output_buf != src_buf)
- buf << FX_BSTRC("<</K -1/EndOfBlock false/Columns ") << width << FX_BSTRC("/Rows ") << height <<
- FX_BSTRC(">>/CCITTFaxDecode filter ");
- if (pSource->IsAlphaMask()) {
- buf << FX_BSTRC("iM\n");
- } else {
- buf << FX_BSTRC("false 1 colorimage\n");
- }
- m_pOutput->OutputPS((const FX_CHAR*)buf.GetBuffer(), buf.GetSize());
- WritePSBinary(output_buf, output_size);
- FX_Free(output_buf);
- } else {
- CFX_DIBSource* pConverted = (CFX_DIBSource*)pSource;
- if (pIccTransform) {
- FXDIB_Format format = m_bCmykOutput ? FXDIB_Cmyk : FXDIB_Rgb;
- pConverted = pSource->CloneConvert(format, NULL, pIccTransform);
- } else {
- switch (pSource->GetFormat()) {
- case FXDIB_1bppRgb:
- case FXDIB_Rgb32:
- pConverted = pSource->CloneConvert(FXDIB_Rgb);
- break;
- case FXDIB_8bppRgb:
- if (pSource->GetPalette() != NULL) {
- pConverted = pSource->CloneConvert(FXDIB_Rgb);
- }
- break;
- case FXDIB_1bppCmyk:
- pConverted = pSource->CloneConvert(FXDIB_Cmyk);
- break;
- case FXDIB_8bppCmyk:
- if (pSource->GetPalette() != NULL) {
- pConverted = pSource->CloneConvert(FXDIB_Cmyk);
- }
- break;
- default:
- break;
- }
- }
- if (pConverted == NULL) {
- OUTPUT_PS("\nQ\n");
- return FALSE;
- }
- int Bpp = pConverted->GetBPP() / 8;
- uint8_t* output_buf = NULL;
- FX_STRSIZE output_size = 0;
- const FX_CHAR* filter = NULL;
- if (flags & FXRENDER_IMAGE_LOSSY) {
- CCodec_ModuleMgr* pEncoders = CFX_GEModule::Get()->GetCodecModule();
- if (pEncoders && pEncoders->GetJpegModule()->Encode(pConverted, output_buf, output_size)) {
- filter = "/DCTDecode filter ";
- }
- }
- if (filter == NULL) {
- int src_pitch = width * Bpp;
- output_size = height * src_pitch;
- output_buf = FX_Alloc(uint8_t, output_size);
- for (int row = 0; row < height; row ++) {
- const uint8_t* src_scan = pConverted->GetScanline(row);
- uint8_t* dest_scan = output_buf + row * src_pitch;
- if (Bpp == 3) {
- for (int col = 0; col < width; col ++) {
- *dest_scan++ = src_scan[2];
- *dest_scan++ = src_scan[1];
- *dest_scan++ = *src_scan;
- src_scan += 3;
- }
- } else {
- FXSYS_memcpy(dest_scan, src_scan, src_pitch);
- }
- }
- uint8_t* compressed_buf;
- FX_DWORD compressed_size;
- PSCompressData(m_PSLevel, output_buf, output_size, compressed_buf, compressed_size, filter);
- if (output_buf != compressed_buf) {
- FX_Free(output_buf);
- }
- output_buf = compressed_buf;
- output_size = compressed_size;
- }
- if (pConverted != pSource) {
- delete pConverted;
- pConverted = NULL;
- }
- buf << FX_BSTRC(" 8[");
- buf << width << FX_BSTRC(" 0 0 -") << height << FX_BSTRC(" 0 ") << height << FX_BSTRC("]");
- buf << FX_BSTRC("currentfile/ASCII85Decode filter ");
- if (filter) {
- buf << filter;
- }
- buf << FX_BSTRC("false ") << Bpp;
- buf << FX_BSTRC(" colorimage\n");
- m_pOutput->OutputPS((const FX_CHAR*)buf.GetBuffer(), buf.GetSize());
- WritePSBinary(output_buf, output_size);
- FX_Free(output_buf);
- }
- OUTPUT_PS("\nQ\n");
+FX_BOOL CFX_PSRenderer::DrawDIBits(const CFX_DIBSource* pSource,
+ FX_DWORD color,
+ const CFX_AffineMatrix* pMatrix,
+ FX_DWORD flags,
+ int alpha_flag,
+ void* pIccTransform) {
+ StartRendering();
+ if ((pMatrix->a == 0 && pMatrix->b == 0) ||
+ (pMatrix->c == 0 && pMatrix->d == 0)) {
return TRUE;
-}
-void CFX_PSRenderer::SetColor(FX_DWORD color, int alpha_flag, void* pIccTransform)
-{
- if (!CFX_GEModule::Get()->GetCodecModule() || !CFX_GEModule::Get()->GetCodecModule()->GetIccModule()) {
- pIccTransform = NULL;
+ }
+ if (pSource->HasAlpha()) {
+ return FALSE;
+ }
+ int alpha = FXGETFLAG_COLORTYPE(alpha_flag) ? FXGETFLAG_ALPHA_FILL(color)
+ : FXARGB_A(color);
+ if (pSource->IsAlphaMask() && (alpha < 255 || pSource->GetBPP() != 1)) {
+ return FALSE;
+ }
+ OUTPUT_PS("q\n");
+ CFX_ByteTextBuf buf;
+ buf << FX_BSTRC("[") << pMatrix->a << FX_BSTRC(" ") << pMatrix->b
+ << FX_BSTRC(" ") << pMatrix->c << FX_BSTRC(" ") << pMatrix->d
+ << FX_BSTRC(" ") << pMatrix->e << FX_BSTRC(" ") << pMatrix->f
+ << FX_BSTRC("]cm ");
+ int width = pSource->GetWidth();
+ int height = pSource->GetHeight();
+ buf << width << FX_BSTRC(" ") << height;
+ if (pSource->GetBPP() == 1 && pSource->GetPalette() == NULL) {
+ int pitch = (width + 7) / 8;
+ FX_DWORD src_size = height * pitch;
+ uint8_t* src_buf = FX_Alloc(uint8_t, src_size);
+ for (int row = 0; row < height; row++) {
+ const uint8_t* src_scan = pSource->GetScanline(row);
+ FXSYS_memcpy(src_buf + row * pitch, src_scan, pitch);
+ }
+ uint8_t* output_buf;
+ FX_DWORD output_size;
+ FaxCompressData(src_buf, width, height, output_buf, output_size);
+ if (pSource->IsAlphaMask()) {
+ SetColor(color, alpha_flag, pIccTransform);
+ m_bColorSet = FALSE;
+ buf << FX_BSTRC(" true[");
+ } else {
+ buf << FX_BSTRC(" 1[");
+ }
+ buf << width << FX_BSTRC(" 0 0 -") << height << FX_BSTRC(" 0 ") << height
+ << FX_BSTRC("]currentfile/ASCII85Decode filter ");
+ if (output_buf != src_buf)
+ buf << FX_BSTRC("<</K -1/EndOfBlock false/Columns ") << width
+ << FX_BSTRC("/Rows ") << height
+ << FX_BSTRC(">>/CCITTFaxDecode filter ");
+ if (pSource->IsAlphaMask()) {
+ buf << FX_BSTRC("iM\n");
+ } else {
+ buf << FX_BSTRC("false 1 colorimage\n");
}
- FX_BOOL bCMYK = FALSE;
+ m_pOutput->OutputPS((const FX_CHAR*)buf.GetBuffer(), buf.GetSize());
+ WritePSBinary(output_buf, output_size);
+ FX_Free(output_buf);
+ } else {
+ CFX_DIBSource* pConverted = (CFX_DIBSource*)pSource;
if (pIccTransform) {
- ICodec_IccModule* pIccModule = CFX_GEModule::Get()->GetCodecModule()->GetIccModule();
- color = FXGETFLAG_COLORTYPE(alpha_flag) ? FXCMYK_TODIB(color) : FXARGB_TODIB(color);
- uint8_t* pColor = (uint8_t*)&color;
- pIccModule->TranslateScanline(pIccTransform, pColor, pColor, 1);
- color = m_bCmykOutput ? FXCMYK_TODIB(color) : FXARGB_TODIB(color);
- bCMYK = m_bCmykOutput;
+ FXDIB_Format format = m_bCmykOutput ? FXDIB_Cmyk : FXDIB_Rgb;
+ pConverted = pSource->CloneConvert(format, NULL, pIccTransform);
} else {
- bCMYK = FXGETFLAG_COLORTYPE(alpha_flag);
- }
- if (bCMYK != m_bCmykOutput || !m_bColorSet || m_LastColor != color) {
- CFX_ByteTextBuf buf;
- if (bCMYK) {
- buf << FXSYS_GetCValue(color) / 255.0 << FX_BSTRC(" ") << FXSYS_GetMValue(color) / 255.0 << FX_BSTRC(" ")
- << FXSYS_GetYValue(color) / 255.0 << FX_BSTRC(" ") << FXSYS_GetKValue(color) / 255.0 << FX_BSTRC(" k\n");
+ switch (pSource->GetFormat()) {
+ case FXDIB_1bppRgb:
+ case FXDIB_Rgb32:
+ pConverted = pSource->CloneConvert(FXDIB_Rgb);
+ break;
+ case FXDIB_8bppRgb:
+ if (pSource->GetPalette() != NULL) {
+ pConverted = pSource->CloneConvert(FXDIB_Rgb);
+ }
+ break;
+ case FXDIB_1bppCmyk:
+ pConverted = pSource->CloneConvert(FXDIB_Cmyk);
+ break;
+ case FXDIB_8bppCmyk:
+ if (pSource->GetPalette() != NULL) {
+ pConverted = pSource->CloneConvert(FXDIB_Cmyk);
+ }
+ break;
+ default:
+ break;
+ }
+ }
+ if (pConverted == NULL) {
+ OUTPUT_PS("\nQ\n");
+ return FALSE;
+ }
+ int Bpp = pConverted->GetBPP() / 8;
+ uint8_t* output_buf = NULL;
+ FX_STRSIZE output_size = 0;
+ const FX_CHAR* filter = NULL;
+ if (flags & FXRENDER_IMAGE_LOSSY) {
+ CCodec_ModuleMgr* pEncoders = CFX_GEModule::Get()->GetCodecModule();
+ if (pEncoders &&
+ pEncoders->GetJpegModule()->Encode(pConverted, output_buf,
+ output_size)) {
+ filter = "/DCTDecode filter ";
+ }
+ }
+ if (filter == NULL) {
+ int src_pitch = width * Bpp;
+ output_size = height * src_pitch;
+ output_buf = FX_Alloc(uint8_t, output_size);
+ for (int row = 0; row < height; row++) {
+ const uint8_t* src_scan = pConverted->GetScanline(row);
+ uint8_t* dest_scan = output_buf + row * src_pitch;
+ if (Bpp == 3) {
+ for (int col = 0; col < width; col++) {
+ *dest_scan++ = src_scan[2];
+ *dest_scan++ = src_scan[1];
+ *dest_scan++ = *src_scan;
+ src_scan += 3;
+ }
} else {
- buf << FXARGB_R(color) / 255.0 << FX_BSTRC(" ") << FXARGB_G(color) / 255.0 << FX_BSTRC(" ")
- << FXARGB_B(color) / 255.0 << FX_BSTRC(" rg\n");
+ FXSYS_memcpy(dest_scan, src_scan, src_pitch);
}
- if (bCMYK == m_bCmykOutput) {
- m_bColorSet = TRUE;
- m_LastColor = color;
- }
- m_pOutput->OutputPS((const FX_CHAR*)buf.GetBuffer(), buf.GetSize());
- }
+ }
+ uint8_t* compressed_buf;
+ FX_DWORD compressed_size;
+ PSCompressData(m_PSLevel, output_buf, output_size, compressed_buf,
+ compressed_size, filter);
+ if (output_buf != compressed_buf) {
+ FX_Free(output_buf);
+ }
+ output_buf = compressed_buf;
+ output_size = compressed_size;
+ }
+ if (pConverted != pSource) {
+ delete pConverted;
+ pConverted = NULL;
+ }
+ buf << FX_BSTRC(" 8[");
+ buf << width << FX_BSTRC(" 0 0 -") << height << FX_BSTRC(" 0 ") << height
+ << FX_BSTRC("]");
+ buf << FX_BSTRC("currentfile/ASCII85Decode filter ");
+ if (filter) {
+ buf << filter;
+ }
+ buf << FX_BSTRC("false ") << Bpp;
+ buf << FX_BSTRC(" colorimage\n");
+ m_pOutput->OutputPS((const FX_CHAR*)buf.GetBuffer(), buf.GetSize());
+ WritePSBinary(output_buf, output_size);
+ FX_Free(output_buf);
+ }
+ OUTPUT_PS("\nQ\n");
+ return TRUE;
}
-void CFX_PSRenderer::FindPSFontGlyph(CFX_FaceCache* pFaceCache, CFX_Font* pFont, const FXTEXT_CHARPOS& charpos,
- int& ps_fontnum, int &ps_glyphindex)
-{
- for (int i = 0; i < (int)m_PSFontList.GetSize(); i ++) {
- CPSFont* pPSFont = m_PSFontList[i];
- for (int j = 0; j < pPSFont->m_nGlyphs; j ++)
- if (pPSFont->m_Glyphs[j].m_pFont == pFont && pPSFont->m_Glyphs[j].m_GlyphIndex == charpos.m_GlyphIndex) {
- if ((!pPSFont->m_Glyphs[j].m_bGlyphAdjust && !charpos.m_bGlyphAdjust) ||
- (pPSFont->m_Glyphs[j].m_bGlyphAdjust && charpos.m_bGlyphAdjust &&
- (FXSYS_fabs(pPSFont->m_Glyphs[j].m_AdjustMatrix[0] - charpos.m_AdjustMatrix[0]) < 0.01 &&
- FXSYS_fabs(pPSFont->m_Glyphs[j].m_AdjustMatrix[1] - charpos.m_AdjustMatrix[1]) < 0.01 &&
- FXSYS_fabs(pPSFont->m_Glyphs[j].m_AdjustMatrix[2] - charpos.m_AdjustMatrix[2]) < 0.01 &&
- FXSYS_fabs(pPSFont->m_Glyphs[j].m_AdjustMatrix[3] - charpos.m_AdjustMatrix[3]) < 0.01))) {
- ps_fontnum = i;
- ps_glyphindex = j;
- return;
- }
- }
- }
- if (m_PSFontList.GetSize() == 0 || m_PSFontList[m_PSFontList.GetSize() - 1]->m_nGlyphs == 256) {
- CPSFont* pPSFont = new CPSFont;
- pPSFont->m_nGlyphs = 0;
- m_PSFontList.Add(pPSFont);
- CFX_ByteTextBuf buf;
- buf << FX_BSTRC("8 dict begin/FontType 3 def/FontMatrix[1 0 0 1 0 0]def\n"
- "/FontBBox[0 0 0 0]def/Encoding 256 array def 0 1 255{Encoding exch/.notdef put}for\n"
- "/CharProcs 1 dict def CharProcs begin/.notdef {} def end\n"
- "/BuildGlyph{1 0 -10 -10 10 10 setcachedevice exch/CharProcs get exch 2 copy known not{pop/.notdef}if get exec}bind def\n"
- "/BuildChar{1 index/Encoding get exch get 1 index/BuildGlyph get exec}bind def\n"
- "currentdict end\n");
- buf << FX_BSTRC("/X") << m_PSFontList.GetSize() - 1 << FX_BSTRC(" exch definefont pop\n");
- m_pOutput->OutputPS((const FX_CHAR*)buf.GetBuffer(), buf.GetSize());
- buf.Clear();
- }
- ps_fontnum = m_PSFontList.GetSize() - 1;
- CPSFont* pPSFont = m_PSFontList[ps_fontnum];
- ps_glyphindex = pPSFont->m_nGlyphs;
- pPSFont->m_Glyphs[ps_glyphindex].m_GlyphIndex = charpos.m_GlyphIndex;
- pPSFont->m_Glyphs[ps_glyphindex].m_pFont = pFont;
- pPSFont->m_Glyphs[ps_glyphindex].m_bGlyphAdjust = charpos.m_bGlyphAdjust;
- if (charpos.m_bGlyphAdjust) {
- pPSFont->m_Glyphs[ps_glyphindex].m_AdjustMatrix[0] = charpos.m_AdjustMatrix[0];
- pPSFont->m_Glyphs[ps_glyphindex].m_AdjustMatrix[1] = charpos.m_AdjustMatrix[1];
- pPSFont->m_Glyphs[ps_glyphindex].m_AdjustMatrix[2] = charpos.m_AdjustMatrix[2];
- pPSFont->m_Glyphs[ps_glyphindex].m_AdjustMatrix[3] = charpos.m_AdjustMatrix[3];
- }
- pPSFont->m_nGlyphs ++;
- CFX_AffineMatrix matrix;
- if (charpos.m_bGlyphAdjust)
- matrix.Set(charpos.m_AdjustMatrix[0], charpos.m_AdjustMatrix[1],
- charpos.m_AdjustMatrix[2], charpos.m_AdjustMatrix[3], 0, 0);
- matrix.Concat(1.0f, 0, 0, 1.0f, 0, 0);
- const CFX_PathData* pPathData = pFaceCache->LoadGlyphPath(pFont, charpos.m_GlyphIndex, charpos.m_FontCharWidth);
- if (pPathData == NULL) {
- return;
- }
- CFX_PathData TransformedPath(*pPathData);
- if (charpos.m_bGlyphAdjust) {
- TransformedPath.Transform(&matrix);
- }
+void CFX_PSRenderer::SetColor(FX_DWORD color,
+ int alpha_flag,
+ void* pIccTransform) {
+ if (!CFX_GEModule::Get()->GetCodecModule() ||
+ !CFX_GEModule::Get()->GetCodecModule()->GetIccModule()) {
+ pIccTransform = NULL;
+ }
+ FX_BOOL bCMYK = FALSE;
+ if (pIccTransform) {
+ ICodec_IccModule* pIccModule =
+ CFX_GEModule::Get()->GetCodecModule()->GetIccModule();
+ color = FXGETFLAG_COLORTYPE(alpha_flag) ? FXCMYK_TODIB(color)
+ : FXARGB_TODIB(color);
+ uint8_t* pColor = (uint8_t*)&color;
+ pIccModule->TranslateScanline(pIccTransform, pColor, pColor, 1);
+ color = m_bCmykOutput ? FXCMYK_TODIB(color) : FXARGB_TODIB(color);
+ bCMYK = m_bCmykOutput;
+ } else {
+ bCMYK = FXGETFLAG_COLORTYPE(alpha_flag);
+ }
+ if (bCMYK != m_bCmykOutput || !m_bColorSet || m_LastColor != color) {
CFX_ByteTextBuf buf;
- buf << FX_BSTRC("/X") << ps_fontnum << FX_BSTRC(" Ff/CharProcs get begin/")
- << ps_glyphindex << FX_BSTRC("{");
- buf << FX_BSTRC("n ");
- for (int p = 0; p < TransformedPath.GetPointCount(); p ++) {
- FX_FLOAT x = TransformedPath.GetPointX(p), y = TransformedPath.GetPointY(p);
- switch (TransformedPath.GetFlag(p) & FXPT_TYPE) {
- case FXPT_MOVETO: {
- buf << x << FX_BSTRC(" ") << y << FX_BSTRC(" m\n");
- break;
- }
- case FXPT_LINETO: {
- buf << x << FX_BSTRC(" ") << y << FX_BSTRC(" l\n");
- break;
- }
- case FXPT_BEZIERTO: {
- buf << x << FX_BSTRC(" ") << y << FX_BSTRC(" ")
- << TransformedPath.GetPointX(p + 1) << FX_BSTRC(" ")
- << TransformedPath.GetPointY(p + 1) << FX_BSTRC(" ")
- << TransformedPath.GetPointX(p + 2) << FX_BSTRC(" ")
- << TransformedPath.GetPointY(p + 2) << FX_BSTRC(" c\n");
- p += 2;
- break;
- }
- }
+ if (bCMYK) {
+ buf << FXSYS_GetCValue(color) / 255.0 << FX_BSTRC(" ")
+ << FXSYS_GetMValue(color) / 255.0 << FX_BSTRC(" ")
+ << FXSYS_GetYValue(color) / 255.0 << FX_BSTRC(" ")
+ << FXSYS_GetKValue(color) / 255.0 << FX_BSTRC(" k\n");
+ } else {
+ buf << FXARGB_R(color) / 255.0 << FX_BSTRC(" ") << FXARGB_G(color) / 255.0
+ << FX_BSTRC(" ") << FXARGB_B(color) / 255.0 << FX_BSTRC(" rg\n");
+ }
+ if (bCMYK == m_bCmykOutput) {
+ m_bColorSet = TRUE;
+ m_LastColor = color;
}
- buf << FX_BSTRC("f");
- buf << FX_BSTRC("}bind def end\n");
- buf << FX_BSTRC("/X") << ps_fontnum << FX_BSTRC(" Ff/Encoding get ") << ps_glyphindex
- << FX_BSTRC("/") << ps_glyphindex << FX_BSTRC(" put\n");
m_pOutput->OutputPS((const FX_CHAR*)buf.GetBuffer(), buf.GetSize());
+ }
}
-FX_BOOL CFX_PSRenderer::DrawText(int nChars, const FXTEXT_CHARPOS* pCharPos, CFX_Font* pFont,
- CFX_FontCache* pCache, const CFX_AffineMatrix* pObject2Device,
- FX_FLOAT font_size, FX_DWORD color,
- int alpha_flag, void* pIccTransform)
-{
- StartRendering();
- int alpha = FXGETFLAG_COLORTYPE(alpha_flag) ? FXGETFLAG_ALPHA_FILL(alpha_flag) : FXARGB_A(color);
- if (alpha < 255) {
- return FALSE;
- }
- if ((pObject2Device->a == 0 && pObject2Device->b == 0) || (pObject2Device->c == 0 && pObject2Device->d == 0)) {
- return TRUE;
- }
- SetColor(color, alpha_flag, pIccTransform);
- CFX_ByteTextBuf buf;
- buf << FX_BSTRC("q[") << pObject2Device->a << FX_BSTRC(" ") << pObject2Device->b << FX_BSTRC(" ")
- << pObject2Device->c << FX_BSTRC(" ") << pObject2Device->d;
- buf << FX_BSTRC(" ") << pObject2Device->e << FX_BSTRC(" ") << pObject2Device->f << "]cm\n";
- if (pCache == NULL) {
- pCache = CFX_GEModule::Get()->GetFontCache();
- }
- CFX_FaceCache* pFaceCache = pCache->GetCachedFace(pFont);
- FX_FONTCACHE_DEFINE(pCache, pFont);
- int last_fontnum = -1;
- for (int i = 0; i < nChars; i ++) {
- int ps_fontnum, ps_glyphindex;
- FindPSFontGlyph(pFaceCache, pFont, pCharPos[i], ps_fontnum, ps_glyphindex);
- if (last_fontnum != ps_fontnum) {
- buf << FX_BSTRC("/X") << ps_fontnum << FX_BSTRC(" Ff ") << font_size
- << FX_BSTRC(" Fs Sf ");
- last_fontnum = ps_fontnum;
+void CFX_PSRenderer::FindPSFontGlyph(CFX_FaceCache* pFaceCache,
+ CFX_Font* pFont,
+ const FXTEXT_CHARPOS& charpos,
+ int& ps_fontnum,
+ int& ps_glyphindex) {
+ for (int i = 0; i < (int)m_PSFontList.GetSize(); i++) {
+ CPSFont* pPSFont = m_PSFontList[i];
+ for (int j = 0; j < pPSFont->m_nGlyphs; j++)
+ if (pPSFont->m_Glyphs[j].m_pFont == pFont &&
+ pPSFont->m_Glyphs[j].m_GlyphIndex == charpos.m_GlyphIndex) {
+ if ((!pPSFont->m_Glyphs[j].m_bGlyphAdjust && !charpos.m_bGlyphAdjust) ||
+ (pPSFont->m_Glyphs[j].m_bGlyphAdjust && charpos.m_bGlyphAdjust &&
+ (FXSYS_fabs(pPSFont->m_Glyphs[j].m_AdjustMatrix[0] -
+ charpos.m_AdjustMatrix[0]) < 0.01 &&
+ FXSYS_fabs(pPSFont->m_Glyphs[j].m_AdjustMatrix[1] -
+ charpos.m_AdjustMatrix[1]) < 0.01 &&
+ FXSYS_fabs(pPSFont->m_Glyphs[j].m_AdjustMatrix[2] -
+ charpos.m_AdjustMatrix[2]) < 0.01 &&
+ FXSYS_fabs(pPSFont->m_Glyphs[j].m_AdjustMatrix[3] -
+ charpos.m_AdjustMatrix[3]) < 0.01))) {
+ ps_fontnum = i;
+ ps_glyphindex = j;
+ return;
}
- buf << pCharPos[i].m_OriginX << FX_BSTRC(" ")
- << pCharPos[i].m_OriginY << FX_BSTRC(" m");
- CFX_ByteString hex;
- hex.Format("<%02X>", ps_glyphindex);
- buf << hex << FX_BSTRC("Tj\n");
- }
- buf << FX_BSTRC("Q\n");
+ }
+ }
+ if (m_PSFontList.GetSize() == 0 ||
+ m_PSFontList[m_PSFontList.GetSize() - 1]->m_nGlyphs == 256) {
+ CPSFont* pPSFont = new CPSFont;
+ pPSFont->m_nGlyphs = 0;
+ m_PSFontList.Add(pPSFont);
+ CFX_ByteTextBuf buf;
+ buf << FX_BSTRC(
+ "8 dict begin/FontType 3 def/FontMatrix[1 0 0 1 0 0]def\n"
+ "/FontBBox[0 0 0 0]def/Encoding 256 array def 0 1 255{Encoding "
+ "exch/.notdef put}for\n"
+ "/CharProcs 1 dict def CharProcs begin/.notdef {} def end\n"
+ "/BuildGlyph{1 0 -10 -10 10 10 setcachedevice exch/CharProcs get exch "
+ "2 copy known not{pop/.notdef}if get exec}bind def\n"
+ "/BuildChar{1 index/Encoding get exch get 1 index/BuildGlyph get "
+ "exec}bind def\n"
+ "currentdict end\n");
+ buf << FX_BSTRC("/X") << m_PSFontList.GetSize() - 1
+ << FX_BSTRC(" exch definefont pop\n");
m_pOutput->OutputPS((const FX_CHAR*)buf.GetBuffer(), buf.GetSize());
+ buf.Clear();
+ }
+ ps_fontnum = m_PSFontList.GetSize() - 1;
+ CPSFont* pPSFont = m_PSFontList[ps_fontnum];
+ ps_glyphindex = pPSFont->m_nGlyphs;
+ pPSFont->m_Glyphs[ps_glyphindex].m_GlyphIndex = charpos.m_GlyphIndex;
+ pPSFont->m_Glyphs[ps_glyphindex].m_pFont = pFont;
+ pPSFont->m_Glyphs[ps_glyphindex].m_bGlyphAdjust = charpos.m_bGlyphAdjust;
+ if (charpos.m_bGlyphAdjust) {
+ pPSFont->m_Glyphs[ps_glyphindex].m_AdjustMatrix[0] =
+ charpos.m_AdjustMatrix[0];
+ pPSFont->m_Glyphs[ps_glyphindex].m_AdjustMatrix[1] =
+ charpos.m_AdjustMatrix[1];
+ pPSFont->m_Glyphs[ps_glyphindex].m_AdjustMatrix[2] =
+ charpos.m_AdjustMatrix[2];
+ pPSFont->m_Glyphs[ps_glyphindex].m_AdjustMatrix[3] =
+ charpos.m_AdjustMatrix[3];
+ }
+ pPSFont->m_nGlyphs++;
+ CFX_AffineMatrix matrix;
+ if (charpos.m_bGlyphAdjust)
+ matrix.Set(charpos.m_AdjustMatrix[0], charpos.m_AdjustMatrix[1],
+ charpos.m_AdjustMatrix[2], charpos.m_AdjustMatrix[3], 0, 0);
+ matrix.Concat(1.0f, 0, 0, 1.0f, 0, 0);
+ const CFX_PathData* pPathData = pFaceCache->LoadGlyphPath(
+ pFont, charpos.m_GlyphIndex, charpos.m_FontCharWidth);
+ if (pPathData == NULL) {
+ return;
+ }
+ CFX_PathData TransformedPath(*pPathData);
+ if (charpos.m_bGlyphAdjust) {
+ TransformedPath.Transform(&matrix);
+ }
+ CFX_ByteTextBuf buf;
+ buf << FX_BSTRC("/X") << ps_fontnum << FX_BSTRC(" Ff/CharProcs get begin/")
+ << ps_glyphindex << FX_BSTRC("{");
+ buf << FX_BSTRC("n ");
+ for (int p = 0; p < TransformedPath.GetPointCount(); p++) {
+ FX_FLOAT x = TransformedPath.GetPointX(p), y = TransformedPath.GetPointY(p);
+ switch (TransformedPath.GetFlag(p) & FXPT_TYPE) {
+ case FXPT_MOVETO: {
+ buf << x << FX_BSTRC(" ") << y << FX_BSTRC(" m\n");
+ break;
+ }
+ case FXPT_LINETO: {
+ buf << x << FX_BSTRC(" ") << y << FX_BSTRC(" l\n");
+ break;
+ }
+ case FXPT_BEZIERTO: {
+ buf << x << FX_BSTRC(" ") << y << FX_BSTRC(" ")
+ << TransformedPath.GetPointX(p + 1) << FX_BSTRC(" ")
+ << TransformedPath.GetPointY(p + 1) << FX_BSTRC(" ")
+ << TransformedPath.GetPointX(p + 2) << FX_BSTRC(" ")
+ << TransformedPath.GetPointY(p + 2) << FX_BSTRC(" c\n");
+ p += 2;
+ break;
+ }
+ }
+ }
+ buf << FX_BSTRC("f");
+ buf << FX_BSTRC("}bind def end\n");
+ buf << FX_BSTRC("/X") << ps_fontnum << FX_BSTRC(" Ff/Encoding get ")
+ << ps_glyphindex << FX_BSTRC("/") << ps_glyphindex << FX_BSTRC(" put\n");
+ m_pOutput->OutputPS((const FX_CHAR*)buf.GetBuffer(), buf.GetSize());
+}
+FX_BOOL CFX_PSRenderer::DrawText(int nChars,
+ const FXTEXT_CHARPOS* pCharPos,
+ CFX_Font* pFont,
+ CFX_FontCache* pCache,
+ const CFX_AffineMatrix* pObject2Device,
+ FX_FLOAT font_size,
+ FX_DWORD color,
+ int alpha_flag,
+ void* pIccTransform) {
+ StartRendering();
+ int alpha = FXGETFLAG_COLORTYPE(alpha_flag) ? FXGETFLAG_ALPHA_FILL(alpha_flag)
+ : FXARGB_A(color);
+ if (alpha < 255) {
+ return FALSE;
+ }
+ if ((pObject2Device->a == 0 && pObject2Device->b == 0) ||
+ (pObject2Device->c == 0 && pObject2Device->d == 0)) {
return TRUE;
+ }
+ SetColor(color, alpha_flag, pIccTransform);
+ CFX_ByteTextBuf buf;
+ buf << FX_BSTRC("q[") << pObject2Device->a << FX_BSTRC(" ")
+ << pObject2Device->b << FX_BSTRC(" ") << pObject2Device->c
+ << FX_BSTRC(" ") << pObject2Device->d;
+ buf << FX_BSTRC(" ") << pObject2Device->e << FX_BSTRC(" ")
+ << pObject2Device->f << "]cm\n";
+ if (pCache == NULL) {
+ pCache = CFX_GEModule::Get()->GetFontCache();
+ }
+ CFX_FaceCache* pFaceCache = pCache->GetCachedFace(pFont);
+ FX_FONTCACHE_DEFINE(pCache, pFont);
+ int last_fontnum = -1;
+ for (int i = 0; i < nChars; i++) {
+ int ps_fontnum, ps_glyphindex;
+ FindPSFontGlyph(pFaceCache, pFont, pCharPos[i], ps_fontnum, ps_glyphindex);
+ if (last_fontnum != ps_fontnum) {
+ buf << FX_BSTRC("/X") << ps_fontnum << FX_BSTRC(" Ff ") << font_size
+ << FX_BSTRC(" Fs Sf ");
+ last_fontnum = ps_fontnum;
+ }
+ buf << pCharPos[i].m_OriginX << FX_BSTRC(" ") << pCharPos[i].m_OriginY
+ << FX_BSTRC(" m");
+ CFX_ByteString hex;
+ hex.Format("<%02X>", ps_glyphindex);
+ buf << hex << FX_BSTRC("Tj\n");
+ }
+ buf << FX_BSTRC("Q\n");
+ m_pOutput->OutputPS((const FX_CHAR*)buf.GetBuffer(), buf.GetSize());
+ return TRUE;
}
-void CFX_PSRenderer::WritePSBinary(const uint8_t* data, int len)
-{
- uint8_t* dest_buf;
- FX_DWORD dest_size;
- CCodec_ModuleMgr* pEncoders = CFX_GEModule::Get()->GetCodecModule();
- if (pEncoders && pEncoders->GetBasicModule()->A85Encode(data, len, dest_buf, dest_size)) {
- m_pOutput->OutputPS((const FX_CHAR*)dest_buf, dest_size);
- FX_Free(dest_buf);
- } else {
- m_pOutput->OutputPS((const FX_CHAR*)data, len);
- }
+void CFX_PSRenderer::WritePSBinary(const uint8_t* data, int len) {
+ uint8_t* dest_buf;
+ FX_DWORD dest_size;
+ CCodec_ModuleMgr* pEncoders = CFX_GEModule::Get()->GetCodecModule();
+ if (pEncoders &&
+ pEncoders->GetBasicModule()->A85Encode(data, len, dest_buf, dest_size)) {
+ m_pOutput->OutputPS((const FX_CHAR*)dest_buf, dest_size);
+ FX_Free(dest_buf);
+ } else {
+ m_pOutput->OutputPS((const FX_CHAR*)data, len);
+ }
}
diff --git a/core/src/fxge/ge/fx_ge_text.cpp b/core/src/fxge/ge/fx_ge_text.cpp
index 59a4cfb37d..7a84330ac0 100644
--- a/core/src/fxge/ge/fx_ge_text.cpp
+++ b/core/src/fxge/ge/fx_ge_text.cpp
@@ -10,1709 +10,1969 @@
#include "text_int.h"
#undef FX_GAMMA
#undef FX_GAMMA_INVERSE
-#define FX_GAMMA(value) (value)
-#define FX_GAMMA_INVERSE(value) (value)
+#define FX_GAMMA(value) (value)
+#define FX_GAMMA_INVERSE(value) (value)
namespace {
void ResetTransform(FT_Face face) {
- FXFT_Matrix matrix;
- matrix.xx = 0x10000L;
- matrix.xy = 0;
- matrix.yx = 0;
- matrix.yy = 0x10000L;
- FXFT_Set_Transform(face, &matrix, 0);
+ FXFT_Matrix matrix;
+ matrix.xx = 0x10000L;
+ matrix.xy = 0;
+ matrix.yx = 0;
+ matrix.yy = 0x10000L;
+ FXFT_Set_Transform(face, &matrix, 0);
}
// Sets the given transform on the font, and resets it to the identity when it
// goes out of scope.
-class ScopedFontTransform
-{
-public:
- ScopedFontTransform(FT_Face face, FXFT_Matrix* matrix) : m_Face(face) {
- FXFT_Set_Transform(m_Face, matrix, 0);
- }
+class ScopedFontTransform {
+ public:
+ ScopedFontTransform(FT_Face face, FXFT_Matrix* matrix) : m_Face(face) {
+ FXFT_Set_Transform(m_Face, matrix, 0);
+ }
- ~ScopedFontTransform() {
- ResetTransform(m_Face);
- }
+ ~ScopedFontTransform() { ResetTransform(m_Face); }
-private:
- FT_Face m_Face;
+ private:
+ FT_Face m_Face;
};
-
}
-FX_RECT FXGE_GetGlyphsBBox(FXTEXT_GLYPHPOS* pGlyphAndPos, int nChars, int anti_alias, FX_FLOAT retinaScaleX, FX_FLOAT retinaScaleY)
-{
- FX_RECT rect(0, 0, 0, 0);
- FX_BOOL bStarted = FALSE;
- for (int iChar = 0; iChar < nChars; iChar ++) {
- FXTEXT_GLYPHPOS& glyph = pGlyphAndPos[iChar];
- const CFX_GlyphBitmap* pGlyph = glyph.m_pGlyph;
- if (pGlyph == NULL) {
- continue;
- }
- int char_left = glyph.m_OriginX + pGlyph->m_Left;
- int char_width = (int)(pGlyph->m_Bitmap.GetWidth() / retinaScaleX);
- if (anti_alias == FXFT_RENDER_MODE_LCD) {
- char_width /= 3;
- }
- int char_right = char_left + char_width;
- int char_top = glyph.m_OriginY - pGlyph->m_Top;
- int char_bottom = char_top + (int)(pGlyph->m_Bitmap.GetHeight() / retinaScaleY);
- if (!bStarted) {
- rect.left = char_left;
- rect.right = char_right;
- rect.top = char_top;
- rect.bottom = char_bottom;
- bStarted = TRUE;
- } else {
- if (rect.left > char_left) {
- rect.left = char_left;
- }
- if (rect.right < char_right) {
- rect.right = char_right;
- }
- if (rect.top > char_top) {
- rect.top = char_top;
- }
- if (rect.bottom < char_bottom) {
- rect.bottom = char_bottom;
- }
- }
- }
- return rect;
+FX_RECT FXGE_GetGlyphsBBox(FXTEXT_GLYPHPOS* pGlyphAndPos,
+ int nChars,
+ int anti_alias,
+ FX_FLOAT retinaScaleX,
+ FX_FLOAT retinaScaleY) {
+ FX_RECT rect(0, 0, 0, 0);
+ FX_BOOL bStarted = FALSE;
+ for (int iChar = 0; iChar < nChars; iChar++) {
+ FXTEXT_GLYPHPOS& glyph = pGlyphAndPos[iChar];
+ const CFX_GlyphBitmap* pGlyph = glyph.m_pGlyph;
+ if (pGlyph == NULL) {
+ continue;
+ }
+ int char_left = glyph.m_OriginX + pGlyph->m_Left;
+ int char_width = (int)(pGlyph->m_Bitmap.GetWidth() / retinaScaleX);
+ if (anti_alias == FXFT_RENDER_MODE_LCD) {
+ char_width /= 3;
+ }
+ int char_right = char_left + char_width;
+ int char_top = glyph.m_OriginY - pGlyph->m_Top;
+ int char_bottom =
+ char_top + (int)(pGlyph->m_Bitmap.GetHeight() / retinaScaleY);
+ if (!bStarted) {
+ rect.left = char_left;
+ rect.right = char_right;
+ rect.top = char_top;
+ rect.bottom = char_bottom;
+ bStarted = TRUE;
+ } else {
+ if (rect.left > char_left) {
+ rect.left = char_left;
+ }
+ if (rect.right < char_right) {
+ rect.right = char_right;
+ }
+ if (rect.top > char_top) {
+ rect.top = char_top;
+ }
+ if (rect.bottom < char_bottom) {
+ rect.bottom = char_bottom;
+ }
+ }
+ }
+ return rect;
}
-static void _AdjustGlyphSpace(FXTEXT_GLYPHPOS* pGlyphAndPos, int nChars)
-{
- ASSERT(nChars > 1);
- FX_BOOL bVertical = FALSE;
- if (pGlyphAndPos[nChars - 1].m_OriginX == pGlyphAndPos[0].m_OriginX) {
- bVertical = TRUE;
- } else if (pGlyphAndPos[nChars - 1].m_OriginY != pGlyphAndPos[0].m_OriginY) {
- return;
- }
- int i = nChars - 1;
- int* next_origin = bVertical ? &pGlyphAndPos[i].m_OriginY : &pGlyphAndPos[i].m_OriginX;
- FX_FLOAT next_origin_f = bVertical ? pGlyphAndPos[i].m_fOriginY : pGlyphAndPos[i].m_fOriginX;
- for (i --; i > 0; i --) {
- int* this_origin = bVertical ? &pGlyphAndPos[i].m_OriginY : &pGlyphAndPos[i].m_OriginX;
- FX_FLOAT this_origin_f = bVertical ? pGlyphAndPos[i].m_fOriginY : pGlyphAndPos[i].m_fOriginX;
- int space = (*next_origin) - (*this_origin);
- FX_FLOAT space_f = next_origin_f - this_origin_f;
- FX_FLOAT error = (FX_FLOAT)(FXSYS_fabs(space_f) - FXSYS_fabs((FX_FLOAT)(space)));
- if (error > 0.5f) {
- *this_origin += space > 0 ? -1 : 1;
- }
- next_origin = this_origin;
- next_origin_f = this_origin_f;
- }
+static void _AdjustGlyphSpace(FXTEXT_GLYPHPOS* pGlyphAndPos, int nChars) {
+ ASSERT(nChars > 1);
+ FX_BOOL bVertical = FALSE;
+ if (pGlyphAndPos[nChars - 1].m_OriginX == pGlyphAndPos[0].m_OriginX) {
+ bVertical = TRUE;
+ } else if (pGlyphAndPos[nChars - 1].m_OriginY != pGlyphAndPos[0].m_OriginY) {
+ return;
+ }
+ int i = nChars - 1;
+ int* next_origin =
+ bVertical ? &pGlyphAndPos[i].m_OriginY : &pGlyphAndPos[i].m_OriginX;
+ FX_FLOAT next_origin_f =
+ bVertical ? pGlyphAndPos[i].m_fOriginY : pGlyphAndPos[i].m_fOriginX;
+ for (i--; i > 0; i--) {
+ int* this_origin =
+ bVertical ? &pGlyphAndPos[i].m_OriginY : &pGlyphAndPos[i].m_OriginX;
+ FX_FLOAT this_origin_f =
+ bVertical ? pGlyphAndPos[i].m_fOriginY : pGlyphAndPos[i].m_fOriginX;
+ int space = (*next_origin) - (*this_origin);
+ FX_FLOAT space_f = next_origin_f - this_origin_f;
+ FX_FLOAT error =
+ (FX_FLOAT)(FXSYS_fabs(space_f) - FXSYS_fabs((FX_FLOAT)(space)));
+ if (error > 0.5f) {
+ *this_origin += space > 0 ? -1 : 1;
+ }
+ next_origin = this_origin;
+ next_origin_f = this_origin_f;
+ }
}
static const uint8_t g_TextGammaAdjust[256] = {
- 0, 2, 3, 4, 6, 7, 8, 10, 11, 12, 13, 15, 16, 17, 18, 19,
- 21, 22, 23, 24, 25, 26, 27, 29, 30, 31, 32, 33, 34, 35, 36, 38,
- 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 51, 52, 53, 54, 55,
- 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 71, 72,
- 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88,
- 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
- 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120,
- 121, 122, 123, 124, 125, 126, 127, 128, 129, 129, 130, 131, 132, 133, 134, 135,
- 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151,
- 152, 153, 154, 155, 156, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166,
- 167, 168, 169, 170, 171, 172, 173, 174, 174, 175, 176, 177, 178, 179, 180, 181,
- 182, 183, 184, 185, 186, 187, 188, 189, 190, 190, 191, 192, 193, 194, 195, 196,
- 197, 198, 199, 200, 201, 202, 203, 204, 204, 205, 206, 207, 208, 209, 210, 211,
- 212, 213, 214, 215, 216, 217, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226,
- 227, 228, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 239, 240,
- 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 250, 251, 252, 253, 254, 255,
+ 0, 2, 3, 4, 6, 7, 8, 10, 11, 12, 13, 15, 16, 17, 18,
+ 19, 21, 22, 23, 24, 25, 26, 27, 29, 30, 31, 32, 33, 34, 35,
+ 36, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 51, 52,
+ 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67,
+ 68, 69, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83,
+ 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98,
+ 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113,
+ 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128,
+ 129, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142,
+ 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 156,
+ 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171,
+ 172, 173, 174, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185,
+ 186, 187, 188, 189, 190, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199,
+ 200, 201, 202, 203, 204, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213,
+ 214, 215, 216, 217, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227,
+ 228, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 239, 240,
+ 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 250, 251, 252, 253, 254,
+ 255,
};
#define ADJUST_ALPHA(background, foreground, src_alpha, text_flags, a) \
- src_alpha = g_TextGammaAdjust[(uint8_t)src_alpha];
-void _Color2Argb(FX_ARGB& argb, FX_DWORD color, int alpha_flag, void* pIccTransform)
-{
- if (pIccTransform == NULL && !FXGETFLAG_COLORTYPE(alpha_flag)) {
- argb = color;
- return;
- }
- if (!CFX_GEModule::Get()->GetCodecModule() || !CFX_GEModule::Get()->GetCodecModule()->GetIccModule()) {
- pIccTransform = NULL;
- }
- uint8_t bgra[4];
- if (pIccTransform) {
- ICodec_IccModule* pIccModule = CFX_GEModule::Get()->GetCodecModule()->GetIccModule();
- color = FXGETFLAG_COLORTYPE(alpha_flag) ? FXCMYK_TODIB(color) : FXARGB_TODIB(color);
- pIccModule->TranslateScanline(pIccTransform, bgra, (const uint8_t*)&color, 1);
- bgra[3] = FXGETFLAG_COLORTYPE(alpha_flag) ?
- (alpha_flag >> 24) ? FXGETFLAG_ALPHA_FILL(alpha_flag) : FXGETFLAG_ALPHA_STROKE(alpha_flag) :
- FXARGB_A(color);
- argb = FXARGB_MAKE(bgra[3], bgra[2], bgra[1], bgra[0]);
- return;
- }
- AdobeCMYK_to_sRGB1(FXSYS_GetCValue(color), FXSYS_GetMValue(color),
- FXSYS_GetYValue(color), FXSYS_GetKValue(color),
- bgra[2], bgra[1], bgra[0]);
- bgra[3] = (alpha_flag >> 24) ? FXGETFLAG_ALPHA_FILL(alpha_flag) : FXGETFLAG_ALPHA_STROKE(alpha_flag);
+ src_alpha = g_TextGammaAdjust[(uint8_t)src_alpha];
+void _Color2Argb(FX_ARGB& argb,
+ FX_DWORD color,
+ int alpha_flag,
+ void* pIccTransform) {
+ if (pIccTransform == NULL && !FXGETFLAG_COLORTYPE(alpha_flag)) {
+ argb = color;
+ return;
+ }
+ if (!CFX_GEModule::Get()->GetCodecModule() ||
+ !CFX_GEModule::Get()->GetCodecModule()->GetIccModule()) {
+ pIccTransform = NULL;
+ }
+ uint8_t bgra[4];
+ if (pIccTransform) {
+ ICodec_IccModule* pIccModule =
+ CFX_GEModule::Get()->GetCodecModule()->GetIccModule();
+ color = FXGETFLAG_COLORTYPE(alpha_flag) ? FXCMYK_TODIB(color)
+ : FXARGB_TODIB(color);
+ pIccModule->TranslateScanline(pIccTransform, bgra, (const uint8_t*)&color,
+ 1);
+ bgra[3] = FXGETFLAG_COLORTYPE(alpha_flag)
+ ? (alpha_flag >> 24) ? FXGETFLAG_ALPHA_FILL(alpha_flag)
+ : FXGETFLAG_ALPHA_STROKE(alpha_flag)
+ : FXARGB_A(color);
argb = FXARGB_MAKE(bgra[3], bgra[2], bgra[1], bgra[0]);
+ return;
+ }
+ AdobeCMYK_to_sRGB1(FXSYS_GetCValue(color), FXSYS_GetMValue(color),
+ FXSYS_GetYValue(color), FXSYS_GetKValue(color), bgra[2],
+ bgra[1], bgra[0]);
+ bgra[3] = (alpha_flag >> 24) ? FXGETFLAG_ALPHA_FILL(alpha_flag)
+ : FXGETFLAG_ALPHA_STROKE(alpha_flag);
+ argb = FXARGB_MAKE(bgra[3], bgra[2], bgra[1], bgra[0]);
}
-FX_BOOL CFX_RenderDevice::DrawNormalText(int nChars, const FXTEXT_CHARPOS* pCharPos,
- CFX_Font* pFont, CFX_FontCache* pCache,
- FX_FLOAT font_size, const CFX_AffineMatrix* pText2Device,
- FX_DWORD fill_color, FX_DWORD text_flags,
- int alpha_flag, void* pIccTransform)
-{
- int nativetext_flags = text_flags;
- if (m_DeviceClass != FXDC_DISPLAY) {
- if (!(text_flags & FXTEXT_PRINTGRAPHICTEXT)) {
-#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
- if (!(text_flags & FXFONT_CIDFONT) && pFont->GetPsName().Find(CFX_WideString::FromLocal("+ZJHL")) == -1)
+FX_BOOL CFX_RenderDevice::DrawNormalText(int nChars,
+ const FXTEXT_CHARPOS* pCharPos,
+ CFX_Font* pFont,
+ CFX_FontCache* pCache,
+ FX_FLOAT font_size,
+ const CFX_AffineMatrix* pText2Device,
+ FX_DWORD fill_color,
+ FX_DWORD text_flags,
+ int alpha_flag,
+ void* pIccTransform) {
+ int nativetext_flags = text_flags;
+ if (m_DeviceClass != FXDC_DISPLAY) {
+ if (!(text_flags & FXTEXT_PRINTGRAPHICTEXT)) {
+#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
+ if (!(text_flags & FXFONT_CIDFONT) &&
+ pFont->GetPsName().Find(CFX_WideString::FromLocal("+ZJHL")) == -1)
#ifdef FOXIT_CHROME_BUILD
- if (pFont->GetPsName() != CFX_WideString::FromLocal("CNAAJI+cmex10"))
+ if (pFont->GetPsName() != CFX_WideString::FromLocal("CNAAJI+cmex10"))
#endif
#endif
- if (m_pDeviceDriver->DrawDeviceText(nChars, pCharPos, pFont, pCache, pText2Device, font_size, fill_color, alpha_flag, pIccTransform)) {
- return TRUE;
- }
- }
- int alpha = FXGETFLAG_COLORTYPE(alpha_flag) ? FXGETFLAG_ALPHA_FILL(alpha_flag) : FXARGB_A(fill_color);
- if (alpha < 255) {
- return FALSE;
- }
- } else if (!(text_flags & FXTEXT_NO_NATIVETEXT)) {
-#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
- if (!(text_flags & FXFONT_CIDFONT))
+ if (m_pDeviceDriver->DrawDeviceText(
+ nChars, pCharPos, pFont, pCache, pText2Device, font_size,
+ fill_color, alpha_flag, pIccTransform)) {
+ return TRUE;
+ }
+ }
+ int alpha = FXGETFLAG_COLORTYPE(alpha_flag)
+ ? FXGETFLAG_ALPHA_FILL(alpha_flag)
+ : FXARGB_A(fill_color);
+ if (alpha < 255) {
+ return FALSE;
+ }
+ } else if (!(text_flags & FXTEXT_NO_NATIVETEXT)) {
+#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
+ if (!(text_flags & FXFONT_CIDFONT))
#ifdef FOXIT_CHROME_BUILD
- if (pFont->GetPsName() != CFX_WideString::FromLocal("CNAAJI+cmex10"))
+ if (pFont->GetPsName() != CFX_WideString::FromLocal("CNAAJI+cmex10"))
#endif
#endif
- if (m_pDeviceDriver->DrawDeviceText(nChars, pCharPos, pFont, pCache, pText2Device, font_size, fill_color, alpha_flag, pIccTransform)) {
- return TRUE;
- }
- }
- CFX_AffineMatrix char2device, deviceCtm, text2Device;
- if (pText2Device) {
- char2device = *pText2Device;
- text2Device = *pText2Device;
- }
- char2device.Scale(font_size, -font_size);
- if (FXSYS_fabs(char2device.a) + FXSYS_fabs(char2device.b) > 50 * 1.0f ||
- ((m_DeviceClass == FXDC_PRINTER && !m_pDeviceDriver->IsPSPrintDriver())
- && !(text_flags & FXTEXT_PRINTIMAGETEXT))) {
- if (pFont->GetFace() != NULL || (pFont->GetSubstFont()->m_SubstFlags & FXFONT_SUBST_GLYPHPATH)) {
- int nPathFlags = (text_flags & FXTEXT_NOSMOOTH) == 0 ? 0 : FXFILL_NOPATHSMOOTH;
- return DrawTextPath(nChars, pCharPos, pFont, pCache, font_size, pText2Device, NULL, NULL, fill_color, 0, NULL, nPathFlags, alpha_flag, pIccTransform);
- }
- }
- int anti_alias = FXFT_RENDER_MODE_MONO;
- FX_BOOL bNormal = FALSE;
- if ((text_flags & FXTEXT_NOSMOOTH) == 0) {
- if (m_DeviceClass == FXDC_DISPLAY && m_bpp > 1) {
- FX_BOOL bClearType;
- if (pFont->GetFace() == NULL && !(pFont->GetSubstFont()->m_SubstFlags & FXFONT_SUBST_CLEARTYPE)) {
- bClearType = FALSE;
- } else {
- bClearType = text_flags & FXTEXT_CLEARTYPE;
- }
- if ((m_RenderCaps & (FXRC_ALPHA_OUTPUT | FXRC_CMYK_OUTPUT))) {
- anti_alias = FXFT_RENDER_MODE_LCD;
- bNormal = TRUE;
- } else if (m_bpp < 16) {
- anti_alias = FXFT_RENDER_MODE_NORMAL;
- } else {
- if (bClearType == FALSE) {
- anti_alias = FXFT_RENDER_MODE_LCD;
- bNormal = TRUE;
- } else {
- anti_alias = FXFT_RENDER_MODE_LCD;
- }
- }
+ if (m_pDeviceDriver->DrawDeviceText(nChars, pCharPos, pFont, pCache,
+ pText2Device, font_size, fill_color,
+ alpha_flag, pIccTransform)) {
+ return TRUE;
}
- }
- if (pCache == NULL) {
- pCache = CFX_GEModule::Get()->GetFontCache();
- }
- CFX_FaceCache* pFaceCache = pCache->GetCachedFace(pFont);
- FX_FONTCACHE_DEFINE(pCache, pFont);
- FXTEXT_GLYPHPOS* pGlyphAndPos = FX_Alloc(FXTEXT_GLYPHPOS, nChars);
- int iChar;
- deviceCtm = char2device;
- CFX_AffineMatrix matrixCTM = GetCTM();
- FX_FLOAT scale_x = FXSYS_fabs(matrixCTM.a);
- FX_FLOAT scale_y = FXSYS_fabs(matrixCTM.d);
- deviceCtm.Concat(scale_x, 0, 0, scale_y, 0, 0);
- text2Device.Concat(scale_x, 0, 0, scale_y, 0, 0);
- for (iChar = 0; iChar < nChars; iChar ++) {
- FXTEXT_GLYPHPOS& glyph = pGlyphAndPos[iChar];
- const FXTEXT_CHARPOS& charpos = pCharPos[iChar];
- glyph.m_fOriginX = charpos.m_OriginX;
- glyph.m_fOriginY = charpos.m_OriginY;
- text2Device.Transform(glyph.m_fOriginX, glyph.m_fOriginY);
- if (anti_alias < FXFT_RENDER_MODE_LCD) {
- glyph.m_OriginX = FXSYS_round(glyph.m_fOriginX);
+ }
+ CFX_AffineMatrix char2device, deviceCtm, text2Device;
+ if (pText2Device) {
+ char2device = *pText2Device;
+ text2Device = *pText2Device;
+ }
+ char2device.Scale(font_size, -font_size);
+ if (FXSYS_fabs(char2device.a) + FXSYS_fabs(char2device.b) > 50 * 1.0f ||
+ ((m_DeviceClass == FXDC_PRINTER && !m_pDeviceDriver->IsPSPrintDriver()) &&
+ !(text_flags & FXTEXT_PRINTIMAGETEXT))) {
+ if (pFont->GetFace() != NULL ||
+ (pFont->GetSubstFont()->m_SubstFlags & FXFONT_SUBST_GLYPHPATH)) {
+ int nPathFlags =
+ (text_flags & FXTEXT_NOSMOOTH) == 0 ? 0 : FXFILL_NOPATHSMOOTH;
+ return DrawTextPath(nChars, pCharPos, pFont, pCache, font_size,
+ pText2Device, NULL, NULL, fill_color, 0, NULL,
+ nPathFlags, alpha_flag, pIccTransform);
+ }
+ }
+ int anti_alias = FXFT_RENDER_MODE_MONO;
+ FX_BOOL bNormal = FALSE;
+ if ((text_flags & FXTEXT_NOSMOOTH) == 0) {
+ if (m_DeviceClass == FXDC_DISPLAY && m_bpp > 1) {
+ FX_BOOL bClearType;
+ if (pFont->GetFace() == NULL &&
+ !(pFont->GetSubstFont()->m_SubstFlags & FXFONT_SUBST_CLEARTYPE)) {
+ bClearType = FALSE;
+ } else {
+ bClearType = text_flags & FXTEXT_CLEARTYPE;
+ }
+ if ((m_RenderCaps & (FXRC_ALPHA_OUTPUT | FXRC_CMYK_OUTPUT))) {
+ anti_alias = FXFT_RENDER_MODE_LCD;
+ bNormal = TRUE;
+ } else if (m_bpp < 16) {
+ anti_alias = FXFT_RENDER_MODE_NORMAL;
+ } else {
+ if (bClearType == FALSE) {
+ anti_alias = FXFT_RENDER_MODE_LCD;
+ bNormal = TRUE;
} else {
- glyph.m_OriginX = (int)FXSYS_floor(glyph.m_fOriginX);
+ anti_alias = FXFT_RENDER_MODE_LCD;
}
- glyph.m_OriginY = FXSYS_round(glyph.m_fOriginY);
- if (charpos.m_bGlyphAdjust) {
- CFX_AffineMatrix new_matrix(charpos.m_AdjustMatrix[0], charpos.m_AdjustMatrix[1],
- charpos.m_AdjustMatrix[2], charpos.m_AdjustMatrix[3], 0, 0);
- new_matrix.Concat(deviceCtm);
- glyph.m_pGlyph = pFaceCache->LoadGlyphBitmap(pFont, charpos.m_GlyphIndex, charpos.m_bFontStyle, &new_matrix,
- charpos.m_FontCharWidth, anti_alias, nativetext_flags);
- } else
- glyph.m_pGlyph = pFaceCache->LoadGlyphBitmap(pFont, charpos.m_GlyphIndex, charpos.m_bFontStyle, &deviceCtm,
- charpos.m_FontCharWidth, anti_alias, nativetext_flags);
- }
- if (anti_alias < FXFT_RENDER_MODE_LCD && nChars > 1) {
- _AdjustGlyphSpace(pGlyphAndPos, nChars);
- }
- FX_RECT bmp_rect1 = FXGE_GetGlyphsBBox(pGlyphAndPos, nChars, anti_alias);
- if (scale_x > 1 && scale_y > 1) {
- bmp_rect1.left--;
- bmp_rect1.top --;
- bmp_rect1.right ++;
- bmp_rect1.bottom ++;
+ }
+ }
+ }
+ if (pCache == NULL) {
+ pCache = CFX_GEModule::Get()->GetFontCache();
+ }
+ CFX_FaceCache* pFaceCache = pCache->GetCachedFace(pFont);
+ FX_FONTCACHE_DEFINE(pCache, pFont);
+ FXTEXT_GLYPHPOS* pGlyphAndPos = FX_Alloc(FXTEXT_GLYPHPOS, nChars);
+ int iChar;
+ deviceCtm = char2device;
+ CFX_AffineMatrix matrixCTM = GetCTM();
+ FX_FLOAT scale_x = FXSYS_fabs(matrixCTM.a);
+ FX_FLOAT scale_y = FXSYS_fabs(matrixCTM.d);
+ deviceCtm.Concat(scale_x, 0, 0, scale_y, 0, 0);
+ text2Device.Concat(scale_x, 0, 0, scale_y, 0, 0);
+ for (iChar = 0; iChar < nChars; iChar++) {
+ FXTEXT_GLYPHPOS& glyph = pGlyphAndPos[iChar];
+ const FXTEXT_CHARPOS& charpos = pCharPos[iChar];
+ glyph.m_fOriginX = charpos.m_OriginX;
+ glyph.m_fOriginY = charpos.m_OriginY;
+ text2Device.Transform(glyph.m_fOriginX, glyph.m_fOriginY);
+ if (anti_alias < FXFT_RENDER_MODE_LCD) {
+ glyph.m_OriginX = FXSYS_round(glyph.m_fOriginX);
+ } else {
+ glyph.m_OriginX = (int)FXSYS_floor(glyph.m_fOriginX);
+ }
+ glyph.m_OriginY = FXSYS_round(glyph.m_fOriginY);
+ if (charpos.m_bGlyphAdjust) {
+ CFX_AffineMatrix new_matrix(
+ charpos.m_AdjustMatrix[0], charpos.m_AdjustMatrix[1],
+ charpos.m_AdjustMatrix[2], charpos.m_AdjustMatrix[3], 0, 0);
+ new_matrix.Concat(deviceCtm);
+ glyph.m_pGlyph = pFaceCache->LoadGlyphBitmap(
+ pFont, charpos.m_GlyphIndex, charpos.m_bFontStyle, &new_matrix,
+ charpos.m_FontCharWidth, anti_alias, nativetext_flags);
+ } else
+ glyph.m_pGlyph = pFaceCache->LoadGlyphBitmap(
+ pFont, charpos.m_GlyphIndex, charpos.m_bFontStyle, &deviceCtm,
+ charpos.m_FontCharWidth, anti_alias, nativetext_flags);
+ }
+ if (anti_alias < FXFT_RENDER_MODE_LCD && nChars > 1) {
+ _AdjustGlyphSpace(pGlyphAndPos, nChars);
+ }
+ FX_RECT bmp_rect1 = FXGE_GetGlyphsBBox(pGlyphAndPos, nChars, anti_alias);
+ if (scale_x > 1 && scale_y > 1) {
+ bmp_rect1.left--;
+ bmp_rect1.top--;
+ bmp_rect1.right++;
+ bmp_rect1.bottom++;
+ }
+ FX_RECT bmp_rect(FXSYS_round((FX_FLOAT)(bmp_rect1.left) / scale_x),
+ FXSYS_round((FX_FLOAT)(bmp_rect1.top) / scale_y),
+ FXSYS_round((FX_FLOAT)bmp_rect1.right / scale_x),
+ FXSYS_round((FX_FLOAT)bmp_rect1.bottom / scale_y));
+ bmp_rect.Intersect(m_ClipBox);
+ if (bmp_rect.IsEmpty()) {
+ FX_Free(pGlyphAndPos);
+ return TRUE;
+ }
+ int pixel_width = FXSYS_round(bmp_rect.Width() * scale_x);
+ int pixel_height = FXSYS_round(bmp_rect.Height() * scale_y);
+ int pixel_left = FXSYS_round(bmp_rect.left * scale_x);
+ int pixel_top = FXSYS_round(bmp_rect.top * scale_y);
+ if (anti_alias == FXFT_RENDER_MODE_MONO) {
+ CFX_DIBitmap bitmap;
+ if (!bitmap.Create(pixel_width, pixel_height, FXDIB_1bppMask)) {
+ FX_Free(pGlyphAndPos);
+ return FALSE;
+ }
+ bitmap.Clear(0);
+ for (iChar = 0; iChar < nChars; iChar++) {
+ FXTEXT_GLYPHPOS& glyph = pGlyphAndPos[iChar];
+ if (glyph.m_pGlyph == NULL) {
+ continue;
+ }
+ const CFX_DIBitmap* pGlyph = &glyph.m_pGlyph->m_Bitmap;
+ bitmap.TransferBitmap(
+ glyph.m_OriginX + glyph.m_pGlyph->m_Left - pixel_left,
+ glyph.m_OriginY - glyph.m_pGlyph->m_Top - pixel_top,
+ pGlyph->GetWidth(), pGlyph->GetHeight(), pGlyph, 0, 0);
}
- FX_RECT bmp_rect(FXSYS_round((FX_FLOAT)(bmp_rect1.left) / scale_x), FXSYS_round((FX_FLOAT)(bmp_rect1.top) / scale_y),
- FXSYS_round((FX_FLOAT)bmp_rect1.right / scale_x), FXSYS_round((FX_FLOAT)bmp_rect1.bottom / scale_y));
- bmp_rect.Intersect(m_ClipBox);
- if (bmp_rect.IsEmpty()) {
+ FX_Free(pGlyphAndPos);
+ return SetBitMask(&bitmap, bmp_rect.left, bmp_rect.top, fill_color);
+ }
+ CFX_DIBitmap bitmap;
+ if (m_bpp == 8) {
+ if (!bitmap.Create(pixel_width, pixel_height, FXDIB_8bppMask)) {
+ FX_Free(pGlyphAndPos);
+ return FALSE;
+ }
+ } else {
+ if (!CreateCompatibleBitmap(&bitmap, pixel_width, pixel_height)) {
+ FX_Free(pGlyphAndPos);
+ return FALSE;
+ }
+ }
+ if (!bitmap.HasAlpha() && !bitmap.IsAlphaMask()) {
+ bitmap.Clear(0xFFFFFFFF);
+ if (!GetDIBits(&bitmap, bmp_rect.left, bmp_rect.top)) {
+ FX_Free(pGlyphAndPos);
+ return FALSE;
+ }
+ } else {
+ bitmap.Clear(0);
+ if (bitmap.m_pAlphaMask) {
+ bitmap.m_pAlphaMask->Clear(0);
+ }
+ }
+ int dest_width = pixel_width;
+ uint8_t* dest_buf = bitmap.GetBuffer();
+ int dest_pitch = bitmap.GetPitch();
+ int Bpp = bitmap.GetBPP() / 8;
+ int a, r, g, b;
+ if (anti_alias == FXFT_RENDER_MODE_LCD) {
+ _Color2Argb(fill_color, fill_color, alpha_flag | (1 << 24), pIccTransform);
+ ArgbDecode(fill_color, a, r, g, b);
+ r = FX_GAMMA(r);
+ g = FX_GAMMA(g);
+ b = FX_GAMMA(b);
+ }
+ for (iChar = 0; iChar < nChars; iChar++) {
+ FXTEXT_GLYPHPOS& glyph = pGlyphAndPos[iChar];
+ if (glyph.m_pGlyph == NULL) {
+ continue;
+ }
+ const CFX_DIBitmap* pGlyph = &glyph.m_pGlyph->m_Bitmap;
+ int left = glyph.m_OriginX + glyph.m_pGlyph->m_Left - pixel_left;
+ int top = glyph.m_OriginY - glyph.m_pGlyph->m_Top - pixel_top;
+ int ncols = pGlyph->GetWidth();
+ int nrows = pGlyph->GetHeight();
+ if (anti_alias == FXFT_RENDER_MODE_NORMAL) {
+ if (!bitmap.CompositeMask(left, top, ncols, nrows, pGlyph, fill_color, 0,
+ 0, FXDIB_BLEND_NORMAL, NULL, FALSE, alpha_flag,
+ pIccTransform)) {
FX_Free(pGlyphAndPos);
- return TRUE;
- }
- int pixel_width = FXSYS_round(bmp_rect.Width() * scale_x);
- int pixel_height = FXSYS_round(bmp_rect.Height() * scale_y);
- int pixel_left = FXSYS_round(bmp_rect.left * scale_x);
- int pixel_top = FXSYS_round(bmp_rect.top * scale_y);
- if (anti_alias == FXFT_RENDER_MODE_MONO) {
- CFX_DIBitmap bitmap;
- if (!bitmap.Create(pixel_width, pixel_height, FXDIB_1bppMask)) {
- FX_Free(pGlyphAndPos);
- return FALSE;
+ return FALSE;
+ }
+ continue;
+ }
+ FX_BOOL bBGRStripe = text_flags & FXTEXT_BGR_STRIPE;
+ ncols /= 3;
+ int x_subpixel = (int)(glyph.m_fOriginX * 3) % 3;
+ uint8_t* src_buf = pGlyph->GetBuffer();
+ int src_pitch = pGlyph->GetPitch();
+ int start_col = left;
+ if (start_col < 0) {
+ start_col = 0;
+ }
+ int end_col = left + ncols;
+ if (end_col > dest_width) {
+ end_col = dest_width;
+ }
+ if (start_col >= end_col) {
+ continue;
+ }
+ if (bitmap.GetFormat() == FXDIB_Argb) {
+ for (int row = 0; row < nrows; row++) {
+ int dest_row = row + top;
+ if (dest_row < 0 || dest_row >= bitmap.GetHeight()) {
+ continue;
}
- bitmap.Clear(0);
- for (iChar = 0; iChar < nChars; iChar ++) {
- FXTEXT_GLYPHPOS& glyph = pGlyphAndPos[iChar];
- if (glyph.m_pGlyph == NULL) {
- continue;
+ uint8_t* src_scan = src_buf + row * src_pitch + (start_col - left) * 3;
+ uint8_t* dest_scan =
+ dest_buf + dest_row * dest_pitch + (start_col << 2);
+ if (bBGRStripe) {
+ if (x_subpixel == 0) {
+ for (int col = start_col; col < end_col; col++) {
+ int src_alpha = src_scan[2];
+ src_alpha = src_alpha * a / 255;
+ dest_scan[2] = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[2]), r, src_alpha));
+ src_alpha = src_scan[1];
+ src_alpha = src_alpha * a / 255;
+ dest_scan[1] = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[1]), g, src_alpha));
+ src_alpha = src_scan[0];
+ src_alpha = src_alpha * a / 255;
+ dest_scan[0] = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[0]), b, src_alpha));
+ dest_scan[3] = 255;
+ dest_scan += 4;
+ src_scan += 3;
}
- const CFX_DIBitmap* pGlyph = &glyph.m_pGlyph->m_Bitmap;
- bitmap.TransferBitmap(glyph.m_OriginX + glyph.m_pGlyph->m_Left - pixel_left,
- glyph.m_OriginY - glyph.m_pGlyph->m_Top - pixel_top,
- pGlyph->GetWidth(), pGlyph->GetHeight(), pGlyph, 0, 0);
- }
- FX_Free(pGlyphAndPos);
- return SetBitMask(&bitmap, bmp_rect.left, bmp_rect.top, fill_color);
- }
- CFX_DIBitmap bitmap;
- if (m_bpp == 8) {
- if (!bitmap.Create(pixel_width, pixel_height, FXDIB_8bppMask)) {
- FX_Free(pGlyphAndPos);
- return FALSE;
- }
- } else {
- if (!CreateCompatibleBitmap(&bitmap, pixel_width, pixel_height)) {
- FX_Free(pGlyphAndPos);
- return FALSE;
- }
- }
- if (!bitmap.HasAlpha() && !bitmap.IsAlphaMask()) {
- bitmap.Clear(0xFFFFFFFF);
- if (!GetDIBits(&bitmap, bmp_rect.left, bmp_rect.top)) {
- FX_Free(pGlyphAndPos);
- return FALSE;
- }
- } else {
- bitmap.Clear(0);
- if (bitmap.m_pAlphaMask) {
- bitmap.m_pAlphaMask->Clear(0);
- }
- }
- int dest_width = pixel_width;
- uint8_t* dest_buf = bitmap.GetBuffer();
- int dest_pitch = bitmap.GetPitch();
- int Bpp = bitmap.GetBPP() / 8;
- int a, r, g, b;
- if (anti_alias == FXFT_RENDER_MODE_LCD) {
- _Color2Argb(fill_color, fill_color, alpha_flag | (1 << 24), pIccTransform);
- ArgbDecode(fill_color, a, r, g, b);
- r = FX_GAMMA(r);
- g = FX_GAMMA(g);
- b = FX_GAMMA(b);
- }
- for (iChar = 0; iChar < nChars; iChar ++) {
- FXTEXT_GLYPHPOS& glyph = pGlyphAndPos[iChar];
- if (glyph.m_pGlyph == NULL) {
- continue;
- }
- const CFX_DIBitmap* pGlyph = &glyph.m_pGlyph->m_Bitmap;
- int left = glyph.m_OriginX + glyph.m_pGlyph->m_Left - pixel_left;
- int top = glyph.m_OriginY - glyph.m_pGlyph->m_Top - pixel_top;
- int ncols = pGlyph->GetWidth();
- int nrows = pGlyph->GetHeight();
- if (anti_alias == FXFT_RENDER_MODE_NORMAL) {
- if (!bitmap.CompositeMask(left, top, ncols, nrows, pGlyph, fill_color,
- 0, 0, FXDIB_BLEND_NORMAL, NULL, FALSE, alpha_flag, pIccTransform)) {
- FX_Free(pGlyphAndPos);
- return FALSE;
+ } else if (x_subpixel == 1) {
+ int src_alpha = src_scan[1];
+ ADJUST_ALPHA(dest_scan[2], r, src_alpha, nativetext_flags, a);
+ src_alpha = src_alpha * a / 255;
+ dest_scan[2] = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[2]), r, src_alpha));
+ src_alpha = src_scan[0];
+ ADJUST_ALPHA(dest_scan[1], g, src_alpha, nativetext_flags, a);
+ src_alpha = src_alpha * a / 255;
+ dest_scan[1] = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[1]), g, src_alpha));
+ if (start_col > left) {
+ src_alpha = src_scan[-1];
+ ADJUST_ALPHA(dest_scan[0], b, src_alpha, nativetext_flags, a);
+ src_alpha = src_alpha * a / 255;
+ dest_scan[0] = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[0]), b, src_alpha));
}
- continue;
- }
- FX_BOOL bBGRStripe = text_flags & FXTEXT_BGR_STRIPE;
- ncols /= 3;
- int x_subpixel = (int)(glyph.m_fOriginX * 3) % 3;
- uint8_t* src_buf = pGlyph->GetBuffer();
- int src_pitch = pGlyph->GetPitch();
- int start_col = left;
- if (start_col < 0) {
- start_col = 0;
- }
- int end_col = left + ncols;
- if (end_col > dest_width) {
- end_col = dest_width;
- }
- if (start_col >= end_col) {
- continue;
- }
- if (bitmap.GetFormat() == FXDIB_Argb) {
- for (int row = 0; row < nrows; row ++) {
- int dest_row = row + top;
- if (dest_row < 0 || dest_row >= bitmap.GetHeight()) {
- continue;
+ dest_scan[3] = 255;
+ dest_scan += 4;
+ src_scan += 3;
+ for (int col = start_col + 1; col < end_col - 1; col++) {
+ int src_alpha = src_scan[1];
+ ADJUST_ALPHA(dest_scan[2], r, src_alpha, nativetext_flags, a);
+ src_alpha = src_alpha * a / 255;
+ dest_scan[2] = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[2]), r, src_alpha));
+ src_alpha = src_scan[0];
+ ADJUST_ALPHA(dest_scan[1], g, src_alpha, nativetext_flags, a);
+ src_alpha = src_alpha * a / 255;
+ dest_scan[1] = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[1]), g, src_alpha));
+ src_alpha = src_scan[-1];
+ ADJUST_ALPHA(dest_scan[0], b, src_alpha, nativetext_flags, a);
+ src_alpha = src_alpha * a / 255;
+ dest_scan[0] = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[0]), b, src_alpha));
+ dest_scan[3] = 255;
+ dest_scan += 4;
+ src_scan += 3;
+ }
+ } else {
+ int src_alpha = src_scan[0];
+ ADJUST_ALPHA(dest_scan[2], r, src_alpha, nativetext_flags, a);
+ src_alpha = src_alpha * a / 255;
+ dest_scan[2] = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[2]), r, src_alpha));
+ if (start_col > left) {
+ src_alpha = src_scan[-1];
+ ADJUST_ALPHA(dest_scan[1], g, src_alpha, nativetext_flags, a);
+ src_alpha = src_alpha * a / 255;
+ dest_scan[1] = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[1]), g, src_alpha));
+ src_alpha = src_scan[-2];
+ ADJUST_ALPHA(dest_scan[0], b, src_alpha, nativetext_flags, a);
+ src_alpha = src_alpha * a / 255;
+ dest_scan[0] = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[0]), b, src_alpha));
+ }
+ dest_scan[3] = 255;
+ dest_scan += 4;
+ src_scan += 3;
+ for (int col = start_col + 1; col < end_col - 1; col++) {
+ int src_alpha = src_scan[0];
+ ADJUST_ALPHA(dest_scan[2], r, src_alpha, nativetext_flags, a);
+ src_alpha = src_alpha * a / 255;
+ dest_scan[2] = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[2]), r, src_alpha));
+ src_alpha = src_scan[-1];
+ ADJUST_ALPHA(dest_scan[1], g, src_alpha, nativetext_flags, a);
+ src_alpha = src_alpha * a / 255;
+ dest_scan[1] = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[1]), g, src_alpha));
+ src_alpha = src_scan[-2];
+ ADJUST_ALPHA(dest_scan[0], b, src_alpha, nativetext_flags, a);
+ src_alpha = src_alpha * a / 255;
+ dest_scan[0] = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[0]), b, src_alpha));
+ dest_scan[3] = 255;
+ dest_scan += 4;
+ src_scan += 3;
+ }
+ }
+ } else {
+ if (x_subpixel == 0) {
+ for (int col = start_col; col < end_col; col++) {
+ if (bNormal) {
+ int src_alpha1 = (src_scan[0] + src_scan[1] + src_scan[2]) / 3;
+ ADJUST_ALPHA(dest_scan[2], r, src_alpha1, nativetext_flags, a);
+ src_alpha1 = src_alpha1 * a / 255;
+ uint8_t back_alpha = dest_scan[3];
+ if (back_alpha == 0) {
+ FXARGB_SETDIB(dest_scan, FXARGB_MAKE(src_alpha1, r, g, b));
+ dest_scan += 4;
+ src_scan += 3;
+ continue;
}
- uint8_t* src_scan = src_buf + row * src_pitch + (start_col - left) * 3;
- uint8_t* dest_scan = dest_buf + dest_row * dest_pitch + (start_col << 2);
- if (bBGRStripe) {
- if (x_subpixel == 0) {
- for (int col = start_col; col < end_col; col ++) {
- int src_alpha = src_scan[2];
- src_alpha = src_alpha * a / 255;
- dest_scan[2] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[2]), r, src_alpha));
- src_alpha = src_scan[1];
- src_alpha = src_alpha * a / 255;
- dest_scan[1] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[1]), g, src_alpha));
- src_alpha = src_scan[0];
- src_alpha = src_alpha * a / 255;
- dest_scan[0] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[0]), b, src_alpha));
- dest_scan[3] = 255;
- dest_scan += 4;
- src_scan += 3;
- }
- } else if (x_subpixel == 1) {
- int src_alpha = src_scan[1];
- ADJUST_ALPHA(dest_scan[2], r, src_alpha, nativetext_flags, a);
- src_alpha = src_alpha * a / 255;
- dest_scan[2] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[2]), r, src_alpha));
- src_alpha = src_scan[0];
- ADJUST_ALPHA(dest_scan[1], g, src_alpha, nativetext_flags, a);
- src_alpha = src_alpha * a / 255;
- dest_scan[1] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[1]), g, src_alpha));
- if (start_col > left) {
- src_alpha = src_scan[-1];
- ADJUST_ALPHA(dest_scan[0], b, src_alpha, nativetext_flags, a);
- src_alpha = src_alpha * a / 255;
- dest_scan[0] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[0]), b, src_alpha));
- }
- dest_scan[3] = 255;
- dest_scan += 4;
- src_scan += 3;
- for (int col = start_col + 1; col < end_col - 1; col ++) {
- int src_alpha = src_scan[1];
- ADJUST_ALPHA(dest_scan[2], r, src_alpha, nativetext_flags, a);
- src_alpha = src_alpha * a / 255;
- dest_scan[2] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[2]), r, src_alpha));
- src_alpha = src_scan[0];
- ADJUST_ALPHA(dest_scan[1], g, src_alpha, nativetext_flags, a);
- src_alpha = src_alpha * a / 255;
- dest_scan[1] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[1]), g, src_alpha));
- src_alpha = src_scan[-1];
- ADJUST_ALPHA(dest_scan[0], b, src_alpha, nativetext_flags, a);
- src_alpha = src_alpha * a / 255;
- dest_scan[0] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[0]), b, src_alpha));
- dest_scan[3] = 255;
- dest_scan += 4;
- src_scan += 3;
- }
- } else {
- int src_alpha = src_scan[0];
- ADJUST_ALPHA(dest_scan[2], r, src_alpha, nativetext_flags, a);
- src_alpha = src_alpha * a / 255;
- dest_scan[2] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[2]), r, src_alpha));
- if (start_col > left) {
- src_alpha = src_scan[-1];
- ADJUST_ALPHA(dest_scan[1], g, src_alpha, nativetext_flags, a);
- src_alpha = src_alpha * a / 255;
- dest_scan[1] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[1]), g, src_alpha));
- src_alpha = src_scan[-2];
- ADJUST_ALPHA(dest_scan[0], b, src_alpha, nativetext_flags, a);
- src_alpha = src_alpha * a / 255;
- dest_scan[0] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[0]), b, src_alpha));
- }
- dest_scan[3] = 255;
- dest_scan += 4;
- src_scan += 3;
- for (int col = start_col + 1; col < end_col - 1; col ++) {
- int src_alpha = src_scan[0];
- ADJUST_ALPHA(dest_scan[2], r, src_alpha, nativetext_flags, a);
- src_alpha = src_alpha * a / 255;
- dest_scan[2] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[2]), r, src_alpha));
- src_alpha = src_scan[-1];
- ADJUST_ALPHA(dest_scan[1], g, src_alpha, nativetext_flags, a);
- src_alpha = src_alpha * a / 255;
- dest_scan[1] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[1]), g, src_alpha));
- src_alpha = src_scan[-2];
- ADJUST_ALPHA(dest_scan[0], b, src_alpha, nativetext_flags, a);
- src_alpha = src_alpha * a / 255;
- dest_scan[0] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[0]), b, src_alpha));
- dest_scan[3] = 255;
- dest_scan += 4;
- src_scan += 3;
- }
- }
+ if (src_alpha1 == 0) {
+ dest_scan += 4;
+ src_scan += 3;
+ continue;
+ }
+ uint8_t dest_alpha =
+ back_alpha + src_alpha1 - back_alpha * src_alpha1 / 255;
+ dest_scan[3] = dest_alpha;
+ int alpha_ratio = src_alpha1 * 255 / dest_alpha;
+ dest_scan[2] = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[2]), r, alpha_ratio));
+ dest_scan[1] = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[1]), g, alpha_ratio));
+ dest_scan[0] = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[0]), b, alpha_ratio));
+ dest_scan += 4;
+ src_scan += 3;
+ continue;
+ }
+ int src_alpha = src_scan[0];
+ ADJUST_ALPHA(dest_scan[2], r, src_alpha, nativetext_flags, a);
+ src_alpha = src_alpha * a / 255;
+ dest_scan[2] = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[2]), r, src_alpha));
+ src_alpha = src_scan[1];
+ ADJUST_ALPHA(dest_scan[1], g, src_alpha, nativetext_flags, a);
+ src_alpha = src_alpha * a / 255;
+ dest_scan[1] = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[1]), g, src_alpha));
+ src_alpha = src_scan[2];
+ ADJUST_ALPHA(dest_scan[0], b, src_alpha, nativetext_flags, a);
+ src_alpha = src_alpha * a / 255;
+ dest_scan[0] = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[0]), b, src_alpha));
+ dest_scan[3] = 255;
+ dest_scan += 4;
+ src_scan += 3;
+ }
+ } else if (x_subpixel == 1) {
+ if (bNormal) {
+ int src_alpha1 =
+ start_col > left
+ ? ((src_scan[-1] + src_scan[0] + src_scan[1]) / 3)
+ : ((src_scan[0] + src_scan[1]) / 3);
+ ADJUST_ALPHA(dest_scan[2], r, src_alpha1, nativetext_flags, a);
+ src_alpha1 = src_alpha1 * a / 255;
+ if (src_alpha1 == 0) {
+ dest_scan += 4;
+ src_scan += 3;
+ } else {
+ uint8_t back_alpha = dest_scan[3];
+ if (back_alpha == 0) {
+ FXARGB_SETDIB(dest_scan, FXARGB_MAKE(src_alpha1, r, g, b));
} else {
- if (x_subpixel == 0) {
- for (int col = start_col; col < end_col; col ++) {
- if (bNormal) {
- int src_alpha1 = (src_scan[0] + src_scan[1] + src_scan[2]) / 3;
- ADJUST_ALPHA(dest_scan[2], r, src_alpha1, nativetext_flags, a);
- src_alpha1 = src_alpha1 * a / 255;
- uint8_t back_alpha = dest_scan[3];
- if (back_alpha == 0) {
- FXARGB_SETDIB(dest_scan, FXARGB_MAKE(src_alpha1, r, g, b));
- dest_scan += 4;
- src_scan += 3;
- continue;
- }
- if (src_alpha1 == 0) {
- dest_scan += 4;
- src_scan += 3;
- continue;
- }
- uint8_t dest_alpha = back_alpha + src_alpha1 - back_alpha * src_alpha1 / 255;
- dest_scan[3] = dest_alpha;
- int alpha_ratio = src_alpha1 * 255 / dest_alpha;
- dest_scan[2] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[2]), r, alpha_ratio));
- dest_scan[1] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[1]), g, alpha_ratio));
- dest_scan[0] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[0]), b, alpha_ratio));
- dest_scan += 4;
- src_scan += 3;
- continue;
- }
- int src_alpha = src_scan[0];
- ADJUST_ALPHA(dest_scan[2], r, src_alpha, nativetext_flags, a);
- src_alpha = src_alpha * a / 255;
- dest_scan[2] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[2]), r, src_alpha));
- src_alpha = src_scan[1];
- ADJUST_ALPHA(dest_scan[1], g, src_alpha, nativetext_flags, a);
- src_alpha = src_alpha * a / 255;
- dest_scan[1] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[1]), g, src_alpha));
- src_alpha = src_scan[2];
- ADJUST_ALPHA(dest_scan[0], b, src_alpha, nativetext_flags, a);
- src_alpha = src_alpha * a / 255;
- dest_scan[0] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[0]), b, src_alpha));
- dest_scan[3] = 255;
- dest_scan += 4;
- src_scan += 3;
- }
- } else if (x_subpixel == 1) {
- if (bNormal) {
- int src_alpha1 = start_col > left ? ((src_scan[-1] + src_scan[0] + src_scan[1]) / 3) : ((src_scan[0] + src_scan[1]) / 3);
- ADJUST_ALPHA(dest_scan[2], r, src_alpha1, nativetext_flags, a);
- src_alpha1 = src_alpha1 * a / 255;
- if (src_alpha1 == 0) {
- dest_scan += 4;
- src_scan += 3;
- } else {
- uint8_t back_alpha = dest_scan[3];
- if (back_alpha == 0) {
- FXARGB_SETDIB(dest_scan, FXARGB_MAKE(src_alpha1, r, g, b));
- } else {
- uint8_t dest_alpha = back_alpha + src_alpha1 - back_alpha * src_alpha1 / 255;
- dest_scan[3] = dest_alpha;
- int alpha_ratio = src_alpha1 * 255 / dest_alpha;
- dest_scan[2] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[2]), r, alpha_ratio));
- dest_scan[1] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[1]), g, alpha_ratio));
- dest_scan[0] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[0]), b, alpha_ratio));
- }
- dest_scan += 4;
- src_scan += 3;
- }
- } else {
- if (start_col > left) {
- int src_alpha = src_scan[-1];
- ADJUST_ALPHA(dest_scan[2], r, src_alpha, nativetext_flags, a);
- src_alpha = src_alpha * a / 255;
- dest_scan[2] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[2]), r, src_alpha));
- }
- int src_alpha = src_scan[0];
- ADJUST_ALPHA(dest_scan[1], g, src_alpha, nativetext_flags, a);
- src_alpha = src_alpha * a / 255;
- dest_scan[1] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[1]), g, src_alpha));
- src_alpha = src_scan[1];
- ADJUST_ALPHA(dest_scan[0], b, src_alpha, nativetext_flags, a);
- src_alpha = src_alpha * a / 255;
- dest_scan[0] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[0]), b, src_alpha));
- dest_scan[3] = 255;
- dest_scan += 4;
- src_scan += 3;
- }
- for (int col = start_col + 1; col < end_col; col ++) {
- if (bNormal) {
- int src_alpha1 = (src_scan[-1] + src_scan[0] + src_scan[1]) / 3;
- ADJUST_ALPHA(dest_scan[2], r, src_alpha1, nativetext_flags, a);
- src_alpha1 = src_alpha1 * a / 255;
- uint8_t back_alpha = dest_scan[3];
- if (back_alpha == 0) {
- FXARGB_SETDIB(dest_scan, FXARGB_MAKE(src_alpha1, r, g, b));
- dest_scan += 4;
- src_scan += 3;
- continue;
- }
- if (src_alpha1 == 0) {
- dest_scan += 4;
- src_scan += 3;
- continue;
- }
- uint8_t dest_alpha = back_alpha + src_alpha1 - back_alpha * src_alpha1 / 255;
- dest_scan[3] = dest_alpha;
- int alpha_ratio = src_alpha1 * 255 / dest_alpha;
- dest_scan[2] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[2]), r, alpha_ratio));
- dest_scan[1] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[1]), g, alpha_ratio));
- dest_scan[0] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[0]), b, alpha_ratio));
- dest_scan += 4;
- src_scan += 3;
- continue;
- }
- int src_alpha = src_scan[-1];
- ADJUST_ALPHA(dest_scan[2], r, src_alpha, nativetext_flags, a);
- src_alpha = src_alpha * a / 255;
- dest_scan[2] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[2]), r, src_alpha));
- src_alpha = src_scan[0];
- ADJUST_ALPHA(dest_scan[1], g, src_alpha, nativetext_flags, a);
- src_alpha = src_alpha * a / 255;
- dest_scan[1] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[1]), g, src_alpha));
- src_alpha = src_scan[1];
- ADJUST_ALPHA(dest_scan[0], b, src_alpha, nativetext_flags, a);
- src_alpha = src_alpha * a / 255;
- dest_scan[0] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[0]), b, src_alpha));
- dest_scan[3] = 255;
- dest_scan += 4;
- src_scan += 3;
- }
- } else {
- if (bNormal) {
- int src_alpha1 = start_col > left ? ((src_scan[-2] + src_scan[-1] + src_scan[0]) / 3) : ((src_scan[0]) / 3);
- ADJUST_ALPHA(dest_scan[2], r, src_alpha1, nativetext_flags, a);
- src_alpha1 = src_alpha1 * a / 255;
- if (src_alpha1 == 0) {
- dest_scan += 4;
- src_scan += 3;
- } else {
- uint8_t back_alpha = dest_scan[3];
- if (back_alpha == 0) {
- FXARGB_SETDIB(dest_scan, FXARGB_MAKE(src_alpha1, r, g, b));
- } else {
- uint8_t dest_alpha = back_alpha + src_alpha1 - back_alpha * src_alpha1 / 255;
- dest_scan[3] = dest_alpha;
- int alpha_ratio = src_alpha1 * 255 / dest_alpha;
- dest_scan[2] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[2]), r, alpha_ratio));
- dest_scan[1] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[1]), g, alpha_ratio));
- dest_scan[0] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[0]), b, alpha_ratio));
- }
- dest_scan += 4;
- src_scan += 3;
- }
- } else {
- if (start_col > left) {
- int src_alpha = src_scan[-2];
- ADJUST_ALPHA(dest_scan[2], r, src_alpha, nativetext_flags, a);
- src_alpha = src_alpha * a / 255;
- dest_scan[2] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[2]), r, src_alpha));
- src_alpha = src_scan[-1];
- ADJUST_ALPHA(dest_scan[1], g, src_alpha, nativetext_flags, a);
- src_alpha = src_alpha * a / 255;
- dest_scan[1] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[1]), g, src_alpha));
- }
- int src_alpha = src_scan[0];
- ADJUST_ALPHA(dest_scan[0], b, src_alpha, nativetext_flags, a);
- src_alpha = src_alpha * a / 255;
- dest_scan[0] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[0]), b, src_alpha));
- dest_scan[3] = 255;
- dest_scan += 4;
- src_scan += 3;
- }
- for (int col = start_col + 1; col < end_col; col ++) {
- if (bNormal) {
- int src_alpha1 = (src_scan[-2] + src_scan[-1] + src_scan[0]) / 3;
- ADJUST_ALPHA(dest_scan[2], r, src_alpha1, nativetext_flags, a);
- src_alpha1 = src_alpha1 * a / 255;
- uint8_t back_alpha = dest_scan[3];
- if (back_alpha == 0) {
- FXARGB_SETDIB(dest_scan, FXARGB_MAKE(src_alpha1, r, g, b));
- dest_scan += 4;
- src_scan += 3;
- continue;
- }
- if (src_alpha1 == 0) {
- dest_scan += 4;
- src_scan += 3;
- continue;
- }
- uint8_t dest_alpha = back_alpha + src_alpha1 - back_alpha * src_alpha1 / 255;
- dest_scan[3] = dest_alpha;
- int alpha_ratio = src_alpha1 * 255 / dest_alpha;
- dest_scan[2] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[2]), r, alpha_ratio));
- dest_scan[1] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[1]), g, alpha_ratio));
- dest_scan[0] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[0]), b, alpha_ratio));
- dest_scan += 4;
- src_scan += 3;
- continue;
- }
- int src_alpha = src_scan[-2];
- ADJUST_ALPHA(dest_scan[2], r, src_alpha, nativetext_flags, a);
- src_alpha = src_alpha * a / 255;
- dest_scan[2] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[2]), r, src_alpha));
- src_alpha = src_scan[-1];
- ADJUST_ALPHA(dest_scan[1], g, src_alpha, nativetext_flags, a);
- src_alpha = src_alpha * a / 255;
- dest_scan[1] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[1]), g, src_alpha));
- src_alpha = src_scan[0];
- ADJUST_ALPHA(dest_scan[0], b, src_alpha, nativetext_flags, a);
- src_alpha = src_alpha * a / 255;
- dest_scan[0] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[0]), b, src_alpha));
- dest_scan[3] = 255;
- dest_scan += 4;
- src_scan += 3;
- }
- }
+ uint8_t dest_alpha =
+ back_alpha + src_alpha1 - back_alpha * src_alpha1 / 255;
+ dest_scan[3] = dest_alpha;
+ int alpha_ratio = src_alpha1 * 255 / dest_alpha;
+ dest_scan[2] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(
+ FX_GAMMA(dest_scan[2]), r, alpha_ratio));
+ dest_scan[1] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(
+ FX_GAMMA(dest_scan[1]), g, alpha_ratio));
+ dest_scan[0] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(
+ FX_GAMMA(dest_scan[0]), b, alpha_ratio));
}
+ dest_scan += 4;
+ src_scan += 3;
+ }
+ } else {
+ if (start_col > left) {
+ int src_alpha = src_scan[-1];
+ ADJUST_ALPHA(dest_scan[2], r, src_alpha, nativetext_flags, a);
+ src_alpha = src_alpha * a / 255;
+ dest_scan[2] = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[2]), r, src_alpha));
+ }
+ int src_alpha = src_scan[0];
+ ADJUST_ALPHA(dest_scan[1], g, src_alpha, nativetext_flags, a);
+ src_alpha = src_alpha * a / 255;
+ dest_scan[1] = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[1]), g, src_alpha));
+ src_alpha = src_scan[1];
+ ADJUST_ALPHA(dest_scan[0], b, src_alpha, nativetext_flags, a);
+ src_alpha = src_alpha * a / 255;
+ dest_scan[0] = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[0]), b, src_alpha));
+ dest_scan[3] = 255;
+ dest_scan += 4;
+ src_scan += 3;
}
- } else {
- for (int row = 0; row < nrows; row ++) {
- int dest_row = row + top;
- if (dest_row < 0 || dest_row >= bitmap.GetHeight()) {
- continue;
+ for (int col = start_col + 1; col < end_col; col++) {
+ if (bNormal) {
+ int src_alpha1 = (src_scan[-1] + src_scan[0] + src_scan[1]) / 3;
+ ADJUST_ALPHA(dest_scan[2], r, src_alpha1, nativetext_flags, a);
+ src_alpha1 = src_alpha1 * a / 255;
+ uint8_t back_alpha = dest_scan[3];
+ if (back_alpha == 0) {
+ FXARGB_SETDIB(dest_scan, FXARGB_MAKE(src_alpha1, r, g, b));
+ dest_scan += 4;
+ src_scan += 3;
+ continue;
}
- uint8_t* src_scan = src_buf + row * src_pitch + (start_col - left) * 3;
- uint8_t* dest_scan = dest_buf + dest_row * dest_pitch + start_col * Bpp;
- if (bBGRStripe) {
- if (x_subpixel == 0) {
- for (int col = start_col; col < end_col; col ++) {
- int src_alpha = src_scan[2];
- ADJUST_ALPHA(dest_scan[2], r, src_alpha, nativetext_flags, a);
- src_alpha = src_alpha * a / 255;
- dest_scan[2] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[2]), r, src_alpha));
- src_alpha = src_scan[1];
- ADJUST_ALPHA(dest_scan[1], g, src_alpha, nativetext_flags, a);
- src_alpha = src_alpha * a / 255;
- dest_scan[1] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[1]), g, src_alpha));
- src_alpha = src_scan[0];
- ADJUST_ALPHA(dest_scan[0], b, src_alpha, nativetext_flags, a);
- src_alpha = src_alpha * a / 255;
- dest_scan[0] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[0]), b, src_alpha));
- dest_scan += Bpp;
- src_scan += 3;
- }
- } else if (x_subpixel == 1) {
- int src_alpha = src_scan[1];
- ADJUST_ALPHA(dest_scan[2], r, src_alpha, nativetext_flags, a);
- src_alpha = src_alpha * a / 255;
- dest_scan[2] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[2]), r, src_alpha));
- src_alpha = src_scan[0];
- ADJUST_ALPHA(dest_scan[1], g, src_alpha, nativetext_flags, a);
- src_alpha = src_alpha * a / 255;
- dest_scan[1] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[1]), g, src_alpha));
- if (start_col > left) {
- src_alpha = src_scan[-1];
- ADJUST_ALPHA(dest_scan[0], b, src_alpha, nativetext_flags, a);
- src_alpha = src_alpha * a / 255;
- dest_scan[0] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[0]), b, src_alpha));
- }
- dest_scan += Bpp;
- src_scan += 3;
- for (int col = start_col + 1; col < end_col - 1; col ++) {
- int src_alpha = src_scan[1];
- ADJUST_ALPHA(dest_scan[2], r, src_alpha, nativetext_flags, a);
- src_alpha = src_alpha * a / 255;
- dest_scan[2] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[2]), r, src_alpha));
- src_alpha = src_scan[0];
- ADJUST_ALPHA(dest_scan[1], g, src_alpha, nativetext_flags, a);
- src_alpha = src_alpha * a / 255;
- dest_scan[1] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[1]), g, src_alpha));
- src_alpha = src_scan[-1];
- ADJUST_ALPHA(dest_scan[0], b, src_alpha, nativetext_flags, a);
- src_alpha = src_alpha * a / 255;
- dest_scan[0] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[0]), b, src_alpha));
- dest_scan += Bpp;
- src_scan += 3;
- }
- } else {
- int src_alpha = src_scan[0];
- ADJUST_ALPHA(dest_scan[2], r, src_alpha, nativetext_flags, a);
- src_alpha = src_alpha * a / 255;
- dest_scan[2] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[2]), r, src_alpha));
- if (start_col > left) {
- src_alpha = src_scan[-1];
- ADJUST_ALPHA(dest_scan[1], g, src_alpha, nativetext_flags, a);
- src_alpha = src_alpha * a / 255;
- dest_scan[1] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[1]), g, src_alpha));
- src_alpha = src_scan[-2];
- ADJUST_ALPHA(dest_scan[0], b, src_alpha, nativetext_flags, a);
- src_alpha = src_alpha * a / 255;
- dest_scan[0] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[0]), b, src_alpha));
- }
- dest_scan += Bpp;
- src_scan += 3;
- for (int col = start_col + 1; col < end_col - 1; col ++) {
- int src_alpha = src_scan[0];
- ADJUST_ALPHA(dest_scan[2], r, src_alpha, nativetext_flags, a);
- src_alpha = src_alpha * a / 255;
- dest_scan[2] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[2]), r, src_alpha));
- src_alpha = src_scan[-1];
- ADJUST_ALPHA(dest_scan[1], g, src_alpha, nativetext_flags, a);
- src_alpha = src_alpha * a / 255;
- dest_scan[1] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[1]), g, src_alpha));
- src_alpha = src_scan[-2];
- ADJUST_ALPHA(dest_scan[0], b, src_alpha, nativetext_flags, a);
- src_alpha = src_alpha * a / 255;
- dest_scan[0] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[0]), b, src_alpha));
- dest_scan += Bpp;
- src_scan += 3;
- }
- }
+ if (src_alpha1 == 0) {
+ dest_scan += 4;
+ src_scan += 3;
+ continue;
+ }
+ uint8_t dest_alpha =
+ back_alpha + src_alpha1 - back_alpha * src_alpha1 / 255;
+ dest_scan[3] = dest_alpha;
+ int alpha_ratio = src_alpha1 * 255 / dest_alpha;
+ dest_scan[2] = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[2]), r, alpha_ratio));
+ dest_scan[1] = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[1]), g, alpha_ratio));
+ dest_scan[0] = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[0]), b, alpha_ratio));
+ dest_scan += 4;
+ src_scan += 3;
+ continue;
+ }
+ int src_alpha = src_scan[-1];
+ ADJUST_ALPHA(dest_scan[2], r, src_alpha, nativetext_flags, a);
+ src_alpha = src_alpha * a / 255;
+ dest_scan[2] = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[2]), r, src_alpha));
+ src_alpha = src_scan[0];
+ ADJUST_ALPHA(dest_scan[1], g, src_alpha, nativetext_flags, a);
+ src_alpha = src_alpha * a / 255;
+ dest_scan[1] = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[1]), g, src_alpha));
+ src_alpha = src_scan[1];
+ ADJUST_ALPHA(dest_scan[0], b, src_alpha, nativetext_flags, a);
+ src_alpha = src_alpha * a / 255;
+ dest_scan[0] = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[0]), b, src_alpha));
+ dest_scan[3] = 255;
+ dest_scan += 4;
+ src_scan += 3;
+ }
+ } else {
+ if (bNormal) {
+ int src_alpha1 =
+ start_col > left
+ ? ((src_scan[-2] + src_scan[-1] + src_scan[0]) / 3)
+ : ((src_scan[0]) / 3);
+ ADJUST_ALPHA(dest_scan[2], r, src_alpha1, nativetext_flags, a);
+ src_alpha1 = src_alpha1 * a / 255;
+ if (src_alpha1 == 0) {
+ dest_scan += 4;
+ src_scan += 3;
+ } else {
+ uint8_t back_alpha = dest_scan[3];
+ if (back_alpha == 0) {
+ FXARGB_SETDIB(dest_scan, FXARGB_MAKE(src_alpha1, r, g, b));
} else {
- if (x_subpixel == 0) {
- for (int col = start_col; col < end_col; col ++) {
- if (bNormal) {
- int src_alpha1 = (src_scan[0] + src_scan[1] + src_scan[2]) / 3;
- ADJUST_ALPHA(dest_scan[2], r, src_alpha1, nativetext_flags, a);
- src_alpha1 = src_alpha1 * a / 255;
- if (src_alpha1 == 0) {
- dest_scan += Bpp;
- src_scan += 3;
- continue;
- }
- dest_scan[2] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[2]), r, src_alpha1));
- dest_scan[1] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[1]), g, src_alpha1));
- dest_scan[0] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[0]), b, src_alpha1));
- dest_scan += Bpp;
- src_scan += 3;
- continue;
- }
- int src_alpha = src_scan[0];
- ADJUST_ALPHA(dest_scan[2], r, src_alpha, nativetext_flags, a);
- src_alpha = src_alpha * a / 255;
- dest_scan[2] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[2]), r, src_alpha));
- src_alpha = src_scan[1];
- ADJUST_ALPHA(dest_scan[1], g, src_alpha, nativetext_flags, a);
- src_alpha = src_alpha * a / 255;
- dest_scan[1] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[1]), g, src_alpha));
- src_alpha = src_scan[2];
- ADJUST_ALPHA(dest_scan[0], b, src_alpha, nativetext_flags, a);
- src_alpha = src_alpha * a / 255;
- dest_scan[0] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[0]), b, src_alpha));
- dest_scan += Bpp;
- src_scan += 3;
- }
- } else if (x_subpixel == 1) {
- if (bNormal) {
- int src_alpha1 = start_col > left ? (src_scan[0] + src_scan[1] + src_scan[-1]) / 3 : (src_scan[0] + src_scan[1]) / 3;
- ADJUST_ALPHA(dest_scan[2], r, src_alpha1, nativetext_flags, a);
- src_alpha1 = src_alpha1 * a / 255;
- dest_scan[2] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[2]), r, src_alpha1));
- dest_scan[1] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[1]), g, src_alpha1));
- dest_scan[0] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[0]), b, src_alpha1));
- dest_scan += Bpp;
- src_scan += 3;
- } else {
- if (start_col > left) {
- int src_alpha = src_scan[-1];
- ADJUST_ALPHA(dest_scan[2], r, src_alpha, nativetext_flags, a);
- src_alpha = src_alpha * a / 255;
- dest_scan[2] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[2]), r, src_alpha));
- }
- int src_alpha = src_scan[0];
- ADJUST_ALPHA(dest_scan[1], g, src_alpha, nativetext_flags, a);
- src_alpha = src_alpha * a / 255;
- dest_scan[1] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[1]), g, src_alpha));
- src_alpha = src_scan[1];
- ADJUST_ALPHA(dest_scan[0], b, src_alpha, nativetext_flags, a);
- src_alpha = src_alpha * a / 255;
- dest_scan[0] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[0]), b, src_alpha));
- dest_scan += Bpp;
- src_scan += 3;
- }
- for (int col = start_col + 1; col < end_col; col ++) {
- if (bNormal) {
- int src_alpha1 = (src_scan[0] + src_scan[1] + src_scan[-1]) / 3;
- ADJUST_ALPHA(dest_scan[2], r, src_alpha1, nativetext_flags, a);
- src_alpha1 = src_alpha1 * a / 255;
- if (src_alpha1 == 0) {
- dest_scan += Bpp;
- src_scan += 3;
- continue;
- }
- dest_scan[2] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[2]), r, src_alpha1));
- dest_scan[1] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[1]), g, src_alpha1));
- dest_scan[0] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[0]), b, src_alpha1));
- dest_scan += Bpp;
- src_scan += 3;
- continue;
- }
- int src_alpha = src_scan[-1];
- ADJUST_ALPHA(dest_scan[2], r, src_alpha, nativetext_flags, a);
- src_alpha = src_alpha * a / 255;
- dest_scan[2] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[2]), r, src_alpha));
- src_alpha = src_scan[0];
- ADJUST_ALPHA(dest_scan[1], g, src_alpha, nativetext_flags, a);
- src_alpha = src_alpha * a / 255;
- dest_scan[1] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[1]), g, src_alpha));
- src_alpha = src_scan[1];
- ADJUST_ALPHA(dest_scan[0], b, src_alpha, nativetext_flags, a);
- src_alpha = src_alpha * a / 255;
- dest_scan[0] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[0]), b, src_alpha));
- dest_scan += Bpp;
- src_scan += 3;
- }
- } else {
- if (bNormal) {
- int src_alpha1 = start_col > left ? (src_scan[0] + src_scan[-2] + src_scan[-1]) / 3 : src_scan[0] / 3;
- ADJUST_ALPHA(dest_scan[2], r, src_alpha1, nativetext_flags, a);
- src_alpha1 = src_alpha1 * a / 255;
- dest_scan[2] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[2]), r, src_alpha1));
- dest_scan[1] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[1]), g, src_alpha1));
- dest_scan[0] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[0]), b, src_alpha1));
- dest_scan += Bpp;
- src_scan += 3;
- } else {
- if (start_col > left) {
- int src_alpha = src_scan[-2];
- ADJUST_ALPHA(dest_scan[2], r, src_alpha, nativetext_flags, a);
- src_alpha = src_alpha * a / 255;
- dest_scan[2] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[2]), r, src_alpha));
- src_alpha = src_scan[-1];
- ADJUST_ALPHA(dest_scan[1], g, src_alpha, nativetext_flags, a);
- src_alpha = src_alpha * a / 255;
- dest_scan[1] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[1]), g, src_alpha));
- }
- int src_alpha = src_scan[0];
- ADJUST_ALPHA(dest_scan[0], b, src_alpha, nativetext_flags, a);
- src_alpha = src_alpha * a / 255;
- dest_scan[0] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[0]), b, src_alpha));
- dest_scan += Bpp;
- src_scan += 3;
- }
- for (int col = start_col + 1; col < end_col; col ++) {
- if (bNormal) {
- int src_alpha1 = ((int)(src_scan[0]) + (int)(src_scan[-2]) + (int)(src_scan[-1])) / 3;
- ADJUST_ALPHA(dest_scan[2], r, src_alpha1, nativetext_flags, a);
- src_alpha1 = src_alpha1 * a / 255;
- if (src_alpha1 == 0) {
- dest_scan += Bpp;
- src_scan += 3;
- continue;
- }
- dest_scan[2] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[2]), r, src_alpha1));
- dest_scan[1] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[1]), g, src_alpha1));
- dest_scan[0] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[0]), b, src_alpha1));
- dest_scan += Bpp;
- src_scan += 3;
- continue;
- }
- int src_alpha = src_scan[-2];
- ADJUST_ALPHA(dest_scan[2], r, src_alpha, nativetext_flags, a);
- src_alpha = src_alpha * a / 255;
- dest_scan[2] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[2]), r, src_alpha));
- src_alpha = src_scan[-1];
- ADJUST_ALPHA(dest_scan[1], g, src_alpha, nativetext_flags, a);
- src_alpha = src_alpha * a / 255;
- dest_scan[1] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[1]), g, src_alpha));
- src_alpha = src_scan[0];
- ADJUST_ALPHA(dest_scan[0], b, src_alpha, nativetext_flags, a);
- src_alpha = src_alpha * a / 255;
- dest_scan[0] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[0]), b, src_alpha));
- dest_scan += Bpp;
- src_scan += 3;
- }
- }
+ uint8_t dest_alpha =
+ back_alpha + src_alpha1 - back_alpha * src_alpha1 / 255;
+ dest_scan[3] = dest_alpha;
+ int alpha_ratio = src_alpha1 * 255 / dest_alpha;
+ dest_scan[2] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(
+ FX_GAMMA(dest_scan[2]), r, alpha_ratio));
+ dest_scan[1] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(
+ FX_GAMMA(dest_scan[1]), g, alpha_ratio));
+ dest_scan[0] = FX_GAMMA_INVERSE(FXDIB_ALPHA_MERGE(
+ FX_GAMMA(dest_scan[0]), b, alpha_ratio));
+ }
+ dest_scan += 4;
+ src_scan += 3;
+ }
+ } else {
+ if (start_col > left) {
+ int src_alpha = src_scan[-2];
+ ADJUST_ALPHA(dest_scan[2], r, src_alpha, nativetext_flags, a);
+ src_alpha = src_alpha * a / 255;
+ dest_scan[2] = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[2]), r, src_alpha));
+ src_alpha = src_scan[-1];
+ ADJUST_ALPHA(dest_scan[1], g, src_alpha, nativetext_flags, a);
+ src_alpha = src_alpha * a / 255;
+ dest_scan[1] = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[1]), g, src_alpha));
+ }
+ int src_alpha = src_scan[0];
+ ADJUST_ALPHA(dest_scan[0], b, src_alpha, nativetext_flags, a);
+ src_alpha = src_alpha * a / 255;
+ dest_scan[0] = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[0]), b, src_alpha));
+ dest_scan[3] = 255;
+ dest_scan += 4;
+ src_scan += 3;
+ }
+ for (int col = start_col + 1; col < end_col; col++) {
+ if (bNormal) {
+ int src_alpha1 =
+ (src_scan[-2] + src_scan[-1] + src_scan[0]) / 3;
+ ADJUST_ALPHA(dest_scan[2], r, src_alpha1, nativetext_flags, a);
+ src_alpha1 = src_alpha1 * a / 255;
+ uint8_t back_alpha = dest_scan[3];
+ if (back_alpha == 0) {
+ FXARGB_SETDIB(dest_scan, FXARGB_MAKE(src_alpha1, r, g, b));
+ dest_scan += 4;
+ src_scan += 3;
+ continue;
+ }
+ if (src_alpha1 == 0) {
+ dest_scan += 4;
+ src_scan += 3;
+ continue;
}
+ uint8_t dest_alpha =
+ back_alpha + src_alpha1 - back_alpha * src_alpha1 / 255;
+ dest_scan[3] = dest_alpha;
+ int alpha_ratio = src_alpha1 * 255 / dest_alpha;
+ dest_scan[2] = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[2]), r, alpha_ratio));
+ dest_scan[1] = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[1]), g, alpha_ratio));
+ dest_scan[0] = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[0]), b, alpha_ratio));
+ dest_scan += 4;
+ src_scan += 3;
+ continue;
+ }
+ int src_alpha = src_scan[-2];
+ ADJUST_ALPHA(dest_scan[2], r, src_alpha, nativetext_flags, a);
+ src_alpha = src_alpha * a / 255;
+ dest_scan[2] = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[2]), r, src_alpha));
+ src_alpha = src_scan[-1];
+ ADJUST_ALPHA(dest_scan[1], g, src_alpha, nativetext_flags, a);
+ src_alpha = src_alpha * a / 255;
+ dest_scan[1] = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[1]), g, src_alpha));
+ src_alpha = src_scan[0];
+ ADJUST_ALPHA(dest_scan[0], b, src_alpha, nativetext_flags, a);
+ src_alpha = src_alpha * a / 255;
+ dest_scan[0] = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[0]), b, src_alpha));
+ dest_scan[3] = 255;
+ dest_scan += 4;
+ src_scan += 3;
}
+ }
}
- }
- if (bitmap.IsAlphaMask()) {
- SetBitMask(&bitmap, bmp_rect.left, bmp_rect.top, fill_color, alpha_flag, pIccTransform);
+ }
} else {
- SetDIBits(&bitmap, bmp_rect.left, bmp_rect.top);
- }
- FX_Free(pGlyphAndPos);
- return TRUE;
-}
-FX_BOOL CFX_RenderDevice::DrawTextPath(int nChars, const FXTEXT_CHARPOS* pCharPos,
- CFX_Font* pFont, CFX_FontCache* pCache,
- FX_FLOAT font_size, const CFX_AffineMatrix* pText2User,
- const CFX_AffineMatrix* pUser2Device, const CFX_GraphStateData* pGraphState,
- FX_DWORD fill_color, FX_ARGB stroke_color, CFX_PathData* pClippingPath, int nFlag,
- int alpha_flag, void* pIccTransform, int blend_type)
-{
- if (pCache == NULL) {
- pCache = CFX_GEModule::Get()->GetFontCache();
- }
- CFX_FaceCache* pFaceCache = pCache->GetCachedFace(pFont);
- FX_FONTCACHE_DEFINE(pCache, pFont);
- for (int iChar = 0; iChar < nChars; iChar ++) {
- const FXTEXT_CHARPOS& charpos = pCharPos[iChar];
- CFX_AffineMatrix matrix;
- if (charpos.m_bGlyphAdjust)
- matrix.Set(charpos.m_AdjustMatrix[0], charpos.m_AdjustMatrix[1],
- charpos.m_AdjustMatrix[2], charpos.m_AdjustMatrix[3], 0, 0);
- matrix.Concat(font_size, 0, 0, font_size, charpos.m_OriginX, charpos.m_OriginY);
- const CFX_PathData* pPath = pFaceCache->LoadGlyphPath(pFont, charpos.m_GlyphIndex, charpos.m_FontCharWidth);
- if (pPath == NULL) {
- continue;
+ for (int row = 0; row < nrows; row++) {
+ int dest_row = row + top;
+ if (dest_row < 0 || dest_row >= bitmap.GetHeight()) {
+ continue;
}
- matrix.Concat(*pText2User);
- CFX_PathData TransformedPath(*pPath);
- TransformedPath.Transform(&matrix);
- FX_BOOL bHasAlpha = FXGETFLAG_COLORTYPE(alpha_flag) ?
- (FXGETFLAG_ALPHA_FILL(alpha_flag) || FXGETFLAG_ALPHA_STROKE(alpha_flag)) :
- (fill_color || stroke_color);
- if (bHasAlpha) {
- int fill_mode = nFlag;
- if (FXGETFLAG_COLORTYPE(alpha_flag)) {
- if (FXGETFLAG_ALPHA_FILL(alpha_flag)) {
- fill_mode |= FXFILL_WINDING;
+ uint8_t* src_scan = src_buf + row * src_pitch + (start_col - left) * 3;
+ uint8_t* dest_scan = dest_buf + dest_row * dest_pitch + start_col * Bpp;
+ if (bBGRStripe) {
+ if (x_subpixel == 0) {
+ for (int col = start_col; col < end_col; col++) {
+ int src_alpha = src_scan[2];
+ ADJUST_ALPHA(dest_scan[2], r, src_alpha, nativetext_flags, a);
+ src_alpha = src_alpha * a / 255;
+ dest_scan[2] = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[2]), r, src_alpha));
+ src_alpha = src_scan[1];
+ ADJUST_ALPHA(dest_scan[1], g, src_alpha, nativetext_flags, a);
+ src_alpha = src_alpha * a / 255;
+ dest_scan[1] = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[1]), g, src_alpha));
+ src_alpha = src_scan[0];
+ ADJUST_ALPHA(dest_scan[0], b, src_alpha, nativetext_flags, a);
+ src_alpha = src_alpha * a / 255;
+ dest_scan[0] = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[0]), b, src_alpha));
+ dest_scan += Bpp;
+ src_scan += 3;
+ }
+ } else if (x_subpixel == 1) {
+ int src_alpha = src_scan[1];
+ ADJUST_ALPHA(dest_scan[2], r, src_alpha, nativetext_flags, a);
+ src_alpha = src_alpha * a / 255;
+ dest_scan[2] = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[2]), r, src_alpha));
+ src_alpha = src_scan[0];
+ ADJUST_ALPHA(dest_scan[1], g, src_alpha, nativetext_flags, a);
+ src_alpha = src_alpha * a / 255;
+ dest_scan[1] = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[1]), g, src_alpha));
+ if (start_col > left) {
+ src_alpha = src_scan[-1];
+ ADJUST_ALPHA(dest_scan[0], b, src_alpha, nativetext_flags, a);
+ src_alpha = src_alpha * a / 255;
+ dest_scan[0] = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[0]), b, src_alpha));
+ }
+ dest_scan += Bpp;
+ src_scan += 3;
+ for (int col = start_col + 1; col < end_col - 1; col++) {
+ int src_alpha = src_scan[1];
+ ADJUST_ALPHA(dest_scan[2], r, src_alpha, nativetext_flags, a);
+ src_alpha = src_alpha * a / 255;
+ dest_scan[2] = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[2]), r, src_alpha));
+ src_alpha = src_scan[0];
+ ADJUST_ALPHA(dest_scan[1], g, src_alpha, nativetext_flags, a);
+ src_alpha = src_alpha * a / 255;
+ dest_scan[1] = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[1]), g, src_alpha));
+ src_alpha = src_scan[-1];
+ ADJUST_ALPHA(dest_scan[0], b, src_alpha, nativetext_flags, a);
+ src_alpha = src_alpha * a / 255;
+ dest_scan[0] = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[0]), b, src_alpha));
+ dest_scan += Bpp;
+ src_scan += 3;
+ }
+ } else {
+ int src_alpha = src_scan[0];
+ ADJUST_ALPHA(dest_scan[2], r, src_alpha, nativetext_flags, a);
+ src_alpha = src_alpha * a / 255;
+ dest_scan[2] = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[2]), r, src_alpha));
+ if (start_col > left) {
+ src_alpha = src_scan[-1];
+ ADJUST_ALPHA(dest_scan[1], g, src_alpha, nativetext_flags, a);
+ src_alpha = src_alpha * a / 255;
+ dest_scan[1] = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[1]), g, src_alpha));
+ src_alpha = src_scan[-2];
+ ADJUST_ALPHA(dest_scan[0], b, src_alpha, nativetext_flags, a);
+ src_alpha = src_alpha * a / 255;
+ dest_scan[0] = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[0]), b, src_alpha));
+ }
+ dest_scan += Bpp;
+ src_scan += 3;
+ for (int col = start_col + 1; col < end_col - 1; col++) {
+ int src_alpha = src_scan[0];
+ ADJUST_ALPHA(dest_scan[2], r, src_alpha, nativetext_flags, a);
+ src_alpha = src_alpha * a / 255;
+ dest_scan[2] = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[2]), r, src_alpha));
+ src_alpha = src_scan[-1];
+ ADJUST_ALPHA(dest_scan[1], g, src_alpha, nativetext_flags, a);
+ src_alpha = src_alpha * a / 255;
+ dest_scan[1] = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[1]), g, src_alpha));
+ src_alpha = src_scan[-2];
+ ADJUST_ALPHA(dest_scan[0], b, src_alpha, nativetext_flags, a);
+ src_alpha = src_alpha * a / 255;
+ dest_scan[0] = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[0]), b, src_alpha));
+ dest_scan += Bpp;
+ src_scan += 3;
+ }
+ }
+ } else {
+ if (x_subpixel == 0) {
+ for (int col = start_col; col < end_col; col++) {
+ if (bNormal) {
+ int src_alpha1 = (src_scan[0] + src_scan[1] + src_scan[2]) / 3;
+ ADJUST_ALPHA(dest_scan[2], r, src_alpha1, nativetext_flags, a);
+ src_alpha1 = src_alpha1 * a / 255;
+ if (src_alpha1 == 0) {
+ dest_scan += Bpp;
+ src_scan += 3;
+ continue;
}
+ dest_scan[2] = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[2]), r, src_alpha1));
+ dest_scan[1] = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[1]), g, src_alpha1));
+ dest_scan[0] = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[0]), b, src_alpha1));
+ dest_scan += Bpp;
+ src_scan += 3;
+ continue;
+ }
+ int src_alpha = src_scan[0];
+ ADJUST_ALPHA(dest_scan[2], r, src_alpha, nativetext_flags, a);
+ src_alpha = src_alpha * a / 255;
+ dest_scan[2] = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[2]), r, src_alpha));
+ src_alpha = src_scan[1];
+ ADJUST_ALPHA(dest_scan[1], g, src_alpha, nativetext_flags, a);
+ src_alpha = src_alpha * a / 255;
+ dest_scan[1] = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[1]), g, src_alpha));
+ src_alpha = src_scan[2];
+ ADJUST_ALPHA(dest_scan[0], b, src_alpha, nativetext_flags, a);
+ src_alpha = src_alpha * a / 255;
+ dest_scan[0] = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[0]), b, src_alpha));
+ dest_scan += Bpp;
+ src_scan += 3;
+ }
+ } else if (x_subpixel == 1) {
+ if (bNormal) {
+ int src_alpha1 =
+ start_col > left
+ ? (src_scan[0] + src_scan[1] + src_scan[-1]) / 3
+ : (src_scan[0] + src_scan[1]) / 3;
+ ADJUST_ALPHA(dest_scan[2], r, src_alpha1, nativetext_flags, a);
+ src_alpha1 = src_alpha1 * a / 255;
+ dest_scan[2] = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[2]), r, src_alpha1));
+ dest_scan[1] = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[1]), g, src_alpha1));
+ dest_scan[0] = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[0]), b, src_alpha1));
+ dest_scan += Bpp;
+ src_scan += 3;
} else {
- if (fill_color) {
- fill_mode |= FXFILL_WINDING;
+ if (start_col > left) {
+ int src_alpha = src_scan[-1];
+ ADJUST_ALPHA(dest_scan[2], r, src_alpha, nativetext_flags, a);
+ src_alpha = src_alpha * a / 255;
+ dest_scan[2] = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[2]), r, src_alpha));
+ }
+ int src_alpha = src_scan[0];
+ ADJUST_ALPHA(dest_scan[1], g, src_alpha, nativetext_flags, a);
+ src_alpha = src_alpha * a / 255;
+ dest_scan[1] = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[1]), g, src_alpha));
+ src_alpha = src_scan[1];
+ ADJUST_ALPHA(dest_scan[0], b, src_alpha, nativetext_flags, a);
+ src_alpha = src_alpha * a / 255;
+ dest_scan[0] = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[0]), b, src_alpha));
+ dest_scan += Bpp;
+ src_scan += 3;
+ }
+ for (int col = start_col + 1; col < end_col; col++) {
+ if (bNormal) {
+ int src_alpha1 = (src_scan[0] + src_scan[1] + src_scan[-1]) / 3;
+ ADJUST_ALPHA(dest_scan[2], r, src_alpha1, nativetext_flags, a);
+ src_alpha1 = src_alpha1 * a / 255;
+ if (src_alpha1 == 0) {
+ dest_scan += Bpp;
+ src_scan += 3;
+ continue;
}
+ dest_scan[2] = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[2]), r, src_alpha1));
+ dest_scan[1] = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[1]), g, src_alpha1));
+ dest_scan[0] = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[0]), b, src_alpha1));
+ dest_scan += Bpp;
+ src_scan += 3;
+ continue;
+ }
+ int src_alpha = src_scan[-1];
+ ADJUST_ALPHA(dest_scan[2], r, src_alpha, nativetext_flags, a);
+ src_alpha = src_alpha * a / 255;
+ dest_scan[2] = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[2]), r, src_alpha));
+ src_alpha = src_scan[0];
+ ADJUST_ALPHA(dest_scan[1], g, src_alpha, nativetext_flags, a);
+ src_alpha = src_alpha * a / 255;
+ dest_scan[1] = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[1]), g, src_alpha));
+ src_alpha = src_scan[1];
+ ADJUST_ALPHA(dest_scan[0], b, src_alpha, nativetext_flags, a);
+ src_alpha = src_alpha * a / 255;
+ dest_scan[0] = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[0]), b, src_alpha));
+ dest_scan += Bpp;
+ src_scan += 3;
}
- fill_mode |= FX_FILL_TEXT_MODE;
- if (!DrawPath(&TransformedPath, pUser2Device, pGraphState, fill_color, stroke_color, fill_mode, alpha_flag, pIccTransform, blend_type)) {
- return FALSE;
+ } else {
+ if (bNormal) {
+ int src_alpha1 =
+ start_col > left
+ ? (src_scan[0] + src_scan[-2] + src_scan[-1]) / 3
+ : src_scan[0] / 3;
+ ADJUST_ALPHA(dest_scan[2], r, src_alpha1, nativetext_flags, a);
+ src_alpha1 = src_alpha1 * a / 255;
+ dest_scan[2] = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[2]), r, src_alpha1));
+ dest_scan[1] = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[1]), g, src_alpha1));
+ dest_scan[0] = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[0]), b, src_alpha1));
+ dest_scan += Bpp;
+ src_scan += 3;
+ } else {
+ if (start_col > left) {
+ int src_alpha = src_scan[-2];
+ ADJUST_ALPHA(dest_scan[2], r, src_alpha, nativetext_flags, a);
+ src_alpha = src_alpha * a / 255;
+ dest_scan[2] = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[2]), r, src_alpha));
+ src_alpha = src_scan[-1];
+ ADJUST_ALPHA(dest_scan[1], g, src_alpha, nativetext_flags, a);
+ src_alpha = src_alpha * a / 255;
+ dest_scan[1] = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[1]), g, src_alpha));
+ }
+ int src_alpha = src_scan[0];
+ ADJUST_ALPHA(dest_scan[0], b, src_alpha, nativetext_flags, a);
+ src_alpha = src_alpha * a / 255;
+ dest_scan[0] = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[0]), b, src_alpha));
+ dest_scan += Bpp;
+ src_scan += 3;
}
+ for (int col = start_col + 1; col < end_col; col++) {
+ if (bNormal) {
+ int src_alpha1 = ((int)(src_scan[0]) + (int)(src_scan[-2]) +
+ (int)(src_scan[-1])) /
+ 3;
+ ADJUST_ALPHA(dest_scan[2], r, src_alpha1, nativetext_flags, a);
+ src_alpha1 = src_alpha1 * a / 255;
+ if (src_alpha1 == 0) {
+ dest_scan += Bpp;
+ src_scan += 3;
+ continue;
+ }
+ dest_scan[2] = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[2]), r, src_alpha1));
+ dest_scan[1] = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[1]), g, src_alpha1));
+ dest_scan[0] = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[0]), b, src_alpha1));
+ dest_scan += Bpp;
+ src_scan += 3;
+ continue;
+ }
+ int src_alpha = src_scan[-2];
+ ADJUST_ALPHA(dest_scan[2], r, src_alpha, nativetext_flags, a);
+ src_alpha = src_alpha * a / 255;
+ dest_scan[2] = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[2]), r, src_alpha));
+ src_alpha = src_scan[-1];
+ ADJUST_ALPHA(dest_scan[1], g, src_alpha, nativetext_flags, a);
+ src_alpha = src_alpha * a / 255;
+ dest_scan[1] = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[1]), g, src_alpha));
+ src_alpha = src_scan[0];
+ ADJUST_ALPHA(dest_scan[0], b, src_alpha, nativetext_flags, a);
+ src_alpha = src_alpha * a / 255;
+ dest_scan[0] = FX_GAMMA_INVERSE(
+ FXDIB_ALPHA_MERGE(FX_GAMMA(dest_scan[0]), b, src_alpha));
+ dest_scan += Bpp;
+ src_scan += 3;
+ }
+ }
}
- if (pClippingPath) {
- pClippingPath->Append(&TransformedPath, pUser2Device);
+ }
+ }
+ }
+ if (bitmap.IsAlphaMask()) {
+ SetBitMask(&bitmap, bmp_rect.left, bmp_rect.top, fill_color, alpha_flag,
+ pIccTransform);
+ } else {
+ SetDIBits(&bitmap, bmp_rect.left, bmp_rect.top);
+ }
+ FX_Free(pGlyphAndPos);
+ return TRUE;
+}
+FX_BOOL CFX_RenderDevice::DrawTextPath(int nChars,
+ const FXTEXT_CHARPOS* pCharPos,
+ CFX_Font* pFont,
+ CFX_FontCache* pCache,
+ FX_FLOAT font_size,
+ const CFX_AffineMatrix* pText2User,
+ const CFX_AffineMatrix* pUser2Device,
+ const CFX_GraphStateData* pGraphState,
+ FX_DWORD fill_color,
+ FX_ARGB stroke_color,
+ CFX_PathData* pClippingPath,
+ int nFlag,
+ int alpha_flag,
+ void* pIccTransform,
+ int blend_type) {
+ if (pCache == NULL) {
+ pCache = CFX_GEModule::Get()->GetFontCache();
+ }
+ CFX_FaceCache* pFaceCache = pCache->GetCachedFace(pFont);
+ FX_FONTCACHE_DEFINE(pCache, pFont);
+ for (int iChar = 0; iChar < nChars; iChar++) {
+ const FXTEXT_CHARPOS& charpos = pCharPos[iChar];
+ CFX_AffineMatrix matrix;
+ if (charpos.m_bGlyphAdjust)
+ matrix.Set(charpos.m_AdjustMatrix[0], charpos.m_AdjustMatrix[1],
+ charpos.m_AdjustMatrix[2], charpos.m_AdjustMatrix[3], 0, 0);
+ matrix.Concat(font_size, 0, 0, font_size, charpos.m_OriginX,
+ charpos.m_OriginY);
+ const CFX_PathData* pPath = pFaceCache->LoadGlyphPath(
+ pFont, charpos.m_GlyphIndex, charpos.m_FontCharWidth);
+ if (pPath == NULL) {
+ continue;
+ }
+ matrix.Concat(*pText2User);
+ CFX_PathData TransformedPath(*pPath);
+ TransformedPath.Transform(&matrix);
+ FX_BOOL bHasAlpha = FXGETFLAG_COLORTYPE(alpha_flag)
+ ? (FXGETFLAG_ALPHA_FILL(alpha_flag) ||
+ FXGETFLAG_ALPHA_STROKE(alpha_flag))
+ : (fill_color || stroke_color);
+ if (bHasAlpha) {
+ int fill_mode = nFlag;
+ if (FXGETFLAG_COLORTYPE(alpha_flag)) {
+ if (FXGETFLAG_ALPHA_FILL(alpha_flag)) {
+ fill_mode |= FXFILL_WINDING;
}
+ } else {
+ if (fill_color) {
+ fill_mode |= FXFILL_WINDING;
+ }
+ }
+ fill_mode |= FX_FILL_TEXT_MODE;
+ if (!DrawPath(&TransformedPath, pUser2Device, pGraphState, fill_color,
+ stroke_color, fill_mode, alpha_flag, pIccTransform,
+ blend_type)) {
+ return FALSE;
+ }
}
- return TRUE;
+ if (pClippingPath) {
+ pClippingPath->Append(&TransformedPath, pUser2Device);
+ }
+ }
+ return TRUE;
}
-CFX_FontCache::~CFX_FontCache()
-{
- FreeCache(TRUE);
+CFX_FontCache::~CFX_FontCache() {
+ FreeCache(TRUE);
}
-CFX_FaceCache* CFX_FontCache::GetCachedFace(CFX_Font* pFont)
-{
- FXFT_Face internal_face = pFont->GetFace();
- const FX_BOOL bExternal = internal_face == nullptr;
- FXFT_Face face = bExternal ?
- (FXFT_Face)pFont->GetSubstFont()->m_ExtHandle : internal_face;
- CFX_FTCacheMap& map = bExternal ? m_ExtFaceMap : m_FTFaceMap;
- auto it = map.find(face);
- if (it != map.end()) {
- CFX_CountedFaceCache* counted_face_cache = it->second;
- counted_face_cache->m_nCount++;
- return counted_face_cache->m_Obj;
- }
+CFX_FaceCache* CFX_FontCache::GetCachedFace(CFX_Font* pFont) {
+ FXFT_Face internal_face = pFont->GetFace();
+ const FX_BOOL bExternal = internal_face == nullptr;
+ FXFT_Face face =
+ bExternal ? (FXFT_Face)pFont->GetSubstFont()->m_ExtHandle : internal_face;
+ CFX_FTCacheMap& map = bExternal ? m_ExtFaceMap : m_FTFaceMap;
+ auto it = map.find(face);
+ if (it != map.end()) {
+ CFX_CountedFaceCache* counted_face_cache = it->second;
+ counted_face_cache->m_nCount++;
+ return counted_face_cache->m_Obj;
+ }
- CFX_FaceCache* face_cache = new CFX_FaceCache(bExternal ? nullptr : face);
- CFX_CountedFaceCache* counted_face_cache = new CFX_CountedFaceCache;
- counted_face_cache->m_nCount = 2;
- counted_face_cache->m_Obj = face_cache;
- map[face] = counted_face_cache;
- return face_cache;
+ CFX_FaceCache* face_cache = new CFX_FaceCache(bExternal ? nullptr : face);
+ CFX_CountedFaceCache* counted_face_cache = new CFX_CountedFaceCache;
+ counted_face_cache->m_nCount = 2;
+ counted_face_cache->m_Obj = face_cache;
+ map[face] = counted_face_cache;
+ return face_cache;
}
-void CFX_FontCache::ReleaseCachedFace(CFX_Font* pFont)
-{
- FXFT_Face internal_face = pFont->GetFace();
- const FX_BOOL bExternal = internal_face == nullptr;
- FXFT_Face face = bExternal ?
- (FXFT_Face)pFont->GetSubstFont()->m_ExtHandle : internal_face;
- CFX_FTCacheMap& map = bExternal ? m_ExtFaceMap : m_FTFaceMap;
+void CFX_FontCache::ReleaseCachedFace(CFX_Font* pFont) {
+ FXFT_Face internal_face = pFont->GetFace();
+ const FX_BOOL bExternal = internal_face == nullptr;
+ FXFT_Face face =
+ bExternal ? (FXFT_Face)pFont->GetSubstFont()->m_ExtHandle : internal_face;
+ CFX_FTCacheMap& map = bExternal ? m_ExtFaceMap : m_FTFaceMap;
- auto it = map.find(face);
- if (it == map.end())
- return;
+ auto it = map.find(face);
+ if (it == map.end())
+ return;
- CFX_CountedFaceCache* counted_face_cache = it->second;
- if (counted_face_cache->m_nCount > 1) {
- counted_face_cache->m_nCount--;
- }
+ CFX_CountedFaceCache* counted_face_cache = it->second;
+ if (counted_face_cache->m_nCount > 1) {
+ counted_face_cache->m_nCount--;
+ }
}
-void CFX_FontCache::FreeCache(FX_BOOL bRelease)
-{
- for (auto it = m_FTFaceMap.begin(); it != m_FTFaceMap.end();) {
- auto curr_it = it++;
- CFX_CountedFaceCache* cache = curr_it->second;
- if (bRelease || cache->m_nCount < 2) {
- delete cache->m_Obj;
- delete cache;
- m_FTFaceMap.erase(curr_it);
- }
- }
+void CFX_FontCache::FreeCache(FX_BOOL bRelease) {
+ for (auto it = m_FTFaceMap.begin(); it != m_FTFaceMap.end();) {
+ auto curr_it = it++;
+ CFX_CountedFaceCache* cache = curr_it->second;
+ if (bRelease || cache->m_nCount < 2) {
+ delete cache->m_Obj;
+ delete cache;
+ m_FTFaceMap.erase(curr_it);
+ }
+ }
- for (auto it = m_ExtFaceMap.begin(); it != m_ExtFaceMap.end();) {
- auto curr_it = it++;
- CFX_CountedFaceCache* cache = curr_it->second;
- if (bRelease || cache->m_nCount < 2) {
- delete cache->m_Obj;
- delete cache;
- m_ExtFaceMap.erase(curr_it);
- }
- }
+ for (auto it = m_ExtFaceMap.begin(); it != m_ExtFaceMap.end();) {
+ auto curr_it = it++;
+ CFX_CountedFaceCache* cache = curr_it->second;
+ if (bRelease || cache->m_nCount < 2) {
+ delete cache->m_Obj;
+ delete cache;
+ m_ExtFaceMap.erase(curr_it);
+ }
+ }
}
-CFX_FaceCache::CFX_FaceCache(FXFT_Face face)
-{
- m_Face = face;
-}
-CFX_FaceCache::~CFX_FaceCache()
-{
- FX_POSITION pos = m_SizeMap.GetStartPosition();
- CFX_ByteString Key;
- CFX_SizeGlyphCache* pSizeCache = NULL;
- while(pos) {
- m_SizeMap.GetNextAssoc( pos, Key, (void*&)pSizeCache);
- delete pSizeCache;
- }
- m_SizeMap.RemoveAll();
- pos = m_PathMap.GetStartPosition();
- void* key1;
- CFX_PathData* pPath;
- while (pos) {
- m_PathMap.GetNextAssoc(pos, key1, (void*&)pPath);
- delete pPath;
- }
- m_PathMap.RemoveAll();
+CFX_FaceCache::CFX_FaceCache(FXFT_Face face) {
+ m_Face = face;
}
-#if _FXM_PLATFORM_ != _FXM_PLATFORM_APPLE_
-void CFX_FaceCache::InitPlatform()
-{
+CFX_FaceCache::~CFX_FaceCache() {
+ FX_POSITION pos = m_SizeMap.GetStartPosition();
+ CFX_ByteString Key;
+ CFX_SizeGlyphCache* pSizeCache = NULL;
+ while (pos) {
+ m_SizeMap.GetNextAssoc(pos, Key, (void*&)pSizeCache);
+ delete pSizeCache;
+ }
+ m_SizeMap.RemoveAll();
+ pos = m_PathMap.GetStartPosition();
+ void* key1;
+ CFX_PathData* pPath;
+ while (pos) {
+ m_PathMap.GetNextAssoc(pos, key1, (void*&)pPath);
+ delete pPath;
+ }
+ m_PathMap.RemoveAll();
}
+#if _FXM_PLATFORM_ != _FXM_PLATFORM_APPLE_
+void CFX_FaceCache::InitPlatform() {}
#endif
-CFX_GlyphBitmap* CFX_FaceCache::LookUpGlyphBitmap(CFX_Font* pFont, const CFX_AffineMatrix* pMatrix,
- CFX_ByteStringC& FaceGlyphsKey, FX_DWORD glyph_index, FX_BOOL bFontStyle,
- int dest_width, int anti_alias)
-{
- CFX_SizeGlyphCache* pSizeCache = NULL;
- if (!m_SizeMap.Lookup(FaceGlyphsKey, (void*&)pSizeCache)) {
- pSizeCache = new CFX_SizeGlyphCache;
- m_SizeMap.SetAt(FaceGlyphsKey, pSizeCache);
- }
- CFX_GlyphBitmap* pGlyphBitmap = NULL;
- if (pSizeCache->m_GlyphMap.Lookup((void*)(uintptr_t)glyph_index, (void*&)pGlyphBitmap)) {
- return pGlyphBitmap;
- }
- pGlyphBitmap = RenderGlyph(pFont, glyph_index, bFontStyle, pMatrix, dest_width, anti_alias);
- if (pGlyphBitmap == NULL) {
- return NULL;
- }
- pSizeCache->m_GlyphMap.SetAt((void*)(uintptr_t)glyph_index, pGlyphBitmap);
+CFX_GlyphBitmap* CFX_FaceCache::LookUpGlyphBitmap(
+ CFX_Font* pFont,
+ const CFX_AffineMatrix* pMatrix,
+ CFX_ByteStringC& FaceGlyphsKey,
+ FX_DWORD glyph_index,
+ FX_BOOL bFontStyle,
+ int dest_width,
+ int anti_alias) {
+ CFX_SizeGlyphCache* pSizeCache = NULL;
+ if (!m_SizeMap.Lookup(FaceGlyphsKey, (void*&)pSizeCache)) {
+ pSizeCache = new CFX_SizeGlyphCache;
+ m_SizeMap.SetAt(FaceGlyphsKey, pSizeCache);
+ }
+ CFX_GlyphBitmap* pGlyphBitmap = NULL;
+ if (pSizeCache->m_GlyphMap.Lookup((void*)(uintptr_t)glyph_index,
+ (void*&)pGlyphBitmap)) {
return pGlyphBitmap;
+ }
+ pGlyphBitmap = RenderGlyph(pFont, glyph_index, bFontStyle, pMatrix,
+ dest_width, anti_alias);
+ if (pGlyphBitmap == NULL) {
+ return NULL;
+ }
+ pSizeCache->m_GlyphMap.SetAt((void*)(uintptr_t)glyph_index, pGlyphBitmap);
+ return pGlyphBitmap;
}
-const CFX_GlyphBitmap* CFX_FaceCache::LoadGlyphBitmap(CFX_Font* pFont, FX_DWORD glyph_index, FX_BOOL bFontStyle, const CFX_AffineMatrix* pMatrix,
- int dest_width, int anti_alias, int& text_flags)
-{
- if (glyph_index == (FX_DWORD) - 1) {
- return NULL;
- }
- _CFX_UniqueKeyGen keygen;
-#if _FXM_PLATFORM_ != _FXM_PLATFORM_APPLE_
+const CFX_GlyphBitmap* CFX_FaceCache::LoadGlyphBitmap(
+ CFX_Font* pFont,
+ FX_DWORD glyph_index,
+ FX_BOOL bFontStyle,
+ const CFX_AffineMatrix* pMatrix,
+ int dest_width,
+ int anti_alias,
+ int& text_flags) {
+ if (glyph_index == (FX_DWORD)-1) {
+ return NULL;
+ }
+ _CFX_UniqueKeyGen keygen;
+#if _FXM_PLATFORM_ != _FXM_PLATFORM_APPLE_
+ if (pFont->GetSubstFont())
+ keygen.Generate(9, (int)(pMatrix->a * 10000), (int)(pMatrix->b * 10000),
+ (int)(pMatrix->c * 10000), (int)(pMatrix->d * 10000),
+ dest_width, anti_alias, pFont->GetSubstFont()->m_Weight,
+ pFont->GetSubstFont()->m_ItalicAngle, pFont->IsVertical());
+ else
+ keygen.Generate(6, (int)(pMatrix->a * 10000), (int)(pMatrix->b * 10000),
+ (int)(pMatrix->c * 10000), (int)(pMatrix->d * 10000),
+ dest_width, anti_alias);
+#else
+ if (text_flags & FXTEXT_NO_NATIVETEXT) {
if (pFont->GetSubstFont())
- keygen.Generate(9, (int)(pMatrix->a * 10000), (int)(pMatrix->b * 10000),
- (int)(pMatrix->c * 10000), (int)(pMatrix->d * 10000), dest_width, anti_alias,
- pFont->GetSubstFont()->m_Weight, pFont->GetSubstFont()->m_ItalicAngle, pFont->IsVertical());
+ keygen.Generate(9, (int)(pMatrix->a * 10000), (int)(pMatrix->b * 10000),
+ (int)(pMatrix->c * 10000), (int)(pMatrix->d * 10000),
+ dest_width, anti_alias, pFont->GetSubstFont()->m_Weight,
+ pFont->GetSubstFont()->m_ItalicAngle,
+ pFont->IsVertical());
else
- keygen.Generate(6, (int)(pMatrix->a * 10000), (int)(pMatrix->b * 10000),
- (int)(pMatrix->c * 10000), (int)(pMatrix->d * 10000), dest_width, anti_alias);
-#else
- if (text_flags & FXTEXT_NO_NATIVETEXT) {
- if (pFont->GetSubstFont())
- keygen.Generate(9, (int)(pMatrix->a * 10000), (int)(pMatrix->b * 10000),
- (int)(pMatrix->c * 10000), (int)(pMatrix->d * 10000), dest_width, anti_alias,
- pFont->GetSubstFont()->m_Weight, pFont->GetSubstFont()->m_ItalicAngle, pFont->IsVertical());
- else
- keygen.Generate(6, (int)(pMatrix->a * 10000), (int)(pMatrix->b * 10000),
- (int)(pMatrix->c * 10000), (int)(pMatrix->d * 10000), dest_width, anti_alias);
- } else {
- if (pFont->GetSubstFont())
- keygen.Generate(10, (int)(pMatrix->a * 10000), (int)(pMatrix->b * 10000),
- (int)(pMatrix->c * 10000), (int)(pMatrix->d * 10000), dest_width, anti_alias,
- pFont->GetSubstFont()->m_Weight, pFont->GetSubstFont()->m_ItalicAngle, pFont->IsVertical(), 3);
- else
- keygen.Generate(7, (int)(pMatrix->a * 10000), (int)(pMatrix->b * 10000),
- (int)(pMatrix->c * 10000), (int)(pMatrix->d * 10000), dest_width, anti_alias, 3);
- }
-#endif
- CFX_ByteStringC FaceGlyphsKey(keygen.m_Key, keygen.m_KeyLen);
-#if _FXM_PLATFORM_ != _FXM_PLATFORM_APPLE_
- return LookUpGlyphBitmap(pFont, pMatrix, FaceGlyphsKey, glyph_index, bFontStyle, dest_width, anti_alias);
-#else
- if (text_flags & FXTEXT_NO_NATIVETEXT) {
- return LookUpGlyphBitmap(pFont, pMatrix, FaceGlyphsKey, glyph_index, bFontStyle, dest_width, anti_alias);
- }
- CFX_GlyphBitmap* pGlyphBitmap;
- CFX_SizeGlyphCache* pSizeCache = NULL;
- if (m_SizeMap.Lookup(FaceGlyphsKey, (void*&)pSizeCache)) {
- if (pSizeCache->m_GlyphMap.Lookup((void*)(uintptr_t)glyph_index, (void*&)pGlyphBitmap)) {
- return pGlyphBitmap;
- }
- pGlyphBitmap = RenderGlyph_Nativetext(pFont, glyph_index, pMatrix, dest_width, anti_alias);
- if (pGlyphBitmap) {
- pSizeCache->m_GlyphMap.SetAt((void*)(uintptr_t)glyph_index, pGlyphBitmap);
- return pGlyphBitmap;
- }
- } else {
- pGlyphBitmap = RenderGlyph_Nativetext(pFont, glyph_index, pMatrix, dest_width, anti_alias);
- if (pGlyphBitmap) {
- pSizeCache = new CFX_SizeGlyphCache;
- m_SizeMap.SetAt(FaceGlyphsKey, pSizeCache);
- pSizeCache->m_GlyphMap.SetAt((void*)(uintptr_t)glyph_index, pGlyphBitmap);
- return pGlyphBitmap;
- }
- }
+ keygen.Generate(6, (int)(pMatrix->a * 10000), (int)(pMatrix->b * 10000),
+ (int)(pMatrix->c * 10000), (int)(pMatrix->d * 10000),
+ dest_width, anti_alias);
+ } else {
if (pFont->GetSubstFont())
- keygen.Generate(9, (int)(pMatrix->a * 10000), (int)(pMatrix->b * 10000),
- (int)(pMatrix->c * 10000), (int)(pMatrix->d * 10000), dest_width, anti_alias,
- pFont->GetSubstFont()->m_Weight, pFont->GetSubstFont()->m_ItalicAngle, pFont->IsVertical());
+ keygen.Generate(10, (int)(pMatrix->a * 10000), (int)(pMatrix->b * 10000),
+ (int)(pMatrix->c * 10000), (int)(pMatrix->d * 10000),
+ dest_width, anti_alias, pFont->GetSubstFont()->m_Weight,
+ pFont->GetSubstFont()->m_ItalicAngle, pFont->IsVertical(),
+ 3);
else
- keygen.Generate(6, (int)(pMatrix->a * 10000), (int)(pMatrix->b * 10000),
- (int)(pMatrix->c * 10000), (int)(pMatrix->d * 10000), dest_width, anti_alias);
- CFX_ByteStringC FaceGlyphsKey2(keygen.m_Key, keygen.m_KeyLen);
- text_flags |= FXTEXT_NO_NATIVETEXT;
- return LookUpGlyphBitmap(pFont, pMatrix, FaceGlyphsKey2, glyph_index, bFontStyle, dest_width, anti_alias);
+ keygen.Generate(7, (int)(pMatrix->a * 10000), (int)(pMatrix->b * 10000),
+ (int)(pMatrix->c * 10000), (int)(pMatrix->d * 10000),
+ dest_width, anti_alias, 3);
+ }
+#endif
+ CFX_ByteStringC FaceGlyphsKey(keygen.m_Key, keygen.m_KeyLen);
+#if _FXM_PLATFORM_ != _FXM_PLATFORM_APPLE_
+ return LookUpGlyphBitmap(pFont, pMatrix, FaceGlyphsKey, glyph_index,
+ bFontStyle, dest_width, anti_alias);
+#else
+ if (text_flags & FXTEXT_NO_NATIVETEXT) {
+ return LookUpGlyphBitmap(pFont, pMatrix, FaceGlyphsKey, glyph_index,
+ bFontStyle, dest_width, anti_alias);
+ }
+ CFX_GlyphBitmap* pGlyphBitmap;
+ CFX_SizeGlyphCache* pSizeCache = NULL;
+ if (m_SizeMap.Lookup(FaceGlyphsKey, (void*&)pSizeCache)) {
+ if (pSizeCache->m_GlyphMap.Lookup((void*)(uintptr_t)glyph_index,
+ (void*&)pGlyphBitmap)) {
+ return pGlyphBitmap;
+ }
+ pGlyphBitmap = RenderGlyph_Nativetext(pFont, glyph_index, pMatrix,
+ dest_width, anti_alias);
+ if (pGlyphBitmap) {
+ pSizeCache->m_GlyphMap.SetAt((void*)(uintptr_t)glyph_index, pGlyphBitmap);
+ return pGlyphBitmap;
+ }
+ } else {
+ pGlyphBitmap = RenderGlyph_Nativetext(pFont, glyph_index, pMatrix,
+ dest_width, anti_alias);
+ if (pGlyphBitmap) {
+ pSizeCache = new CFX_SizeGlyphCache;
+ m_SizeMap.SetAt(FaceGlyphsKey, pSizeCache);
+ pSizeCache->m_GlyphMap.SetAt((void*)(uintptr_t)glyph_index, pGlyphBitmap);
+ return pGlyphBitmap;
+ }
+ }
+ if (pFont->GetSubstFont())
+ keygen.Generate(9, (int)(pMatrix->a * 10000), (int)(pMatrix->b * 10000),
+ (int)(pMatrix->c * 10000), (int)(pMatrix->d * 10000),
+ dest_width, anti_alias, pFont->GetSubstFont()->m_Weight,
+ pFont->GetSubstFont()->m_ItalicAngle, pFont->IsVertical());
+ else
+ keygen.Generate(6, (int)(pMatrix->a * 10000), (int)(pMatrix->b * 10000),
+ (int)(pMatrix->c * 10000), (int)(pMatrix->d * 10000),
+ dest_width, anti_alias);
+ CFX_ByteStringC FaceGlyphsKey2(keygen.m_Key, keygen.m_KeyLen);
+ text_flags |= FXTEXT_NO_NATIVETEXT;
+ return LookUpGlyphBitmap(pFont, pMatrix, FaceGlyphsKey2, glyph_index,
+ bFontStyle, dest_width, anti_alias);
#endif
}
-CFX_SizeGlyphCache::~CFX_SizeGlyphCache()
-{
- FX_POSITION pos = m_GlyphMap.GetStartPosition();
- void* Key;
- CFX_GlyphBitmap* pGlyphBitmap = NULL;
- while(pos) {
- m_GlyphMap.GetNextAssoc(pos, Key, (void*&)pGlyphBitmap);
- delete pGlyphBitmap;
- }
- m_GlyphMap.RemoveAll();
+CFX_SizeGlyphCache::~CFX_SizeGlyphCache() {
+ FX_POSITION pos = m_GlyphMap.GetStartPosition();
+ void* Key;
+ CFX_GlyphBitmap* pGlyphBitmap = NULL;
+ while (pos) {
+ m_GlyphMap.GetNextAssoc(pos, Key, (void*&)pGlyphBitmap);
+ delete pGlyphBitmap;
+ }
+ m_GlyphMap.RemoveAll();
}
-#define CONTRAST_RAMP_STEP 1
-void CFX_Font::AdjustMMParams(int glyph_index, int dest_width, int weight)
-{
- FXFT_MM_Var pMasters = NULL;
- FXFT_Get_MM_Var(m_Face, &pMasters);
- if (pMasters == NULL) {
- return;
- }
- long coords[2];
- if (weight == 0) {
- coords[0] = FXFT_Get_MM_Axis_Def(FXFT_Get_MM_Axis(pMasters, 0)) / 65536;
- } else {
- coords[0] = weight;
- }
- if (dest_width == 0) {
- coords[1] = FXFT_Get_MM_Axis_Def(FXFT_Get_MM_Axis(pMasters, 1)) / 65536;
- } else {
- int min_param = FXFT_Get_MM_Axis_Min(FXFT_Get_MM_Axis(pMasters, 1)) / 65536;
- int max_param = FXFT_Get_MM_Axis_Max(FXFT_Get_MM_Axis(pMasters, 1)) / 65536;
- coords[1] = min_param;
- int error = FXFT_Set_MM_Design_Coordinates(m_Face, 2, coords);
- error = FXFT_Load_Glyph(m_Face, glyph_index, FXFT_LOAD_NO_SCALE | FXFT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH);
- int min_width = FXFT_Get_Glyph_HoriAdvance(m_Face) * 1000 / FXFT_Get_Face_UnitsPerEM(m_Face);
- coords[1] = max_param;
- error = FXFT_Set_MM_Design_Coordinates(m_Face, 2, coords);
- error = FXFT_Load_Glyph(m_Face, glyph_index, FXFT_LOAD_NO_SCALE | FXFT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH);
- int max_width = FXFT_Get_Glyph_HoriAdvance(m_Face) * 1000 / FXFT_Get_Face_UnitsPerEM(m_Face);
- if (max_width == min_width) {
- return;
- }
- int param = min_param + (max_param - min_param) * (dest_width - min_width) / (max_width - min_width);
- coords[1] = param;
- }
- FXFT_Free(m_Face, pMasters);
- FXFT_Set_MM_Design_Coordinates(m_Face, 2, coords);
+#define CONTRAST_RAMP_STEP 1
+void CFX_Font::AdjustMMParams(int glyph_index, int dest_width, int weight) {
+ FXFT_MM_Var pMasters = NULL;
+ FXFT_Get_MM_Var(m_Face, &pMasters);
+ if (pMasters == NULL) {
+ return;
+ }
+ long coords[2];
+ if (weight == 0) {
+ coords[0] = FXFT_Get_MM_Axis_Def(FXFT_Get_MM_Axis(pMasters, 0)) / 65536;
+ } else {
+ coords[0] = weight;
+ }
+ if (dest_width == 0) {
+ coords[1] = FXFT_Get_MM_Axis_Def(FXFT_Get_MM_Axis(pMasters, 1)) / 65536;
+ } else {
+ int min_param = FXFT_Get_MM_Axis_Min(FXFT_Get_MM_Axis(pMasters, 1)) / 65536;
+ int max_param = FXFT_Get_MM_Axis_Max(FXFT_Get_MM_Axis(pMasters, 1)) / 65536;
+ coords[1] = min_param;
+ int error = FXFT_Set_MM_Design_Coordinates(m_Face, 2, coords);
+ error = FXFT_Load_Glyph(
+ m_Face, glyph_index,
+ FXFT_LOAD_NO_SCALE | FXFT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH);
+ int min_width = FXFT_Get_Glyph_HoriAdvance(m_Face) * 1000 /
+ FXFT_Get_Face_UnitsPerEM(m_Face);
+ coords[1] = max_param;
+ error = FXFT_Set_MM_Design_Coordinates(m_Face, 2, coords);
+ error = FXFT_Load_Glyph(
+ m_Face, glyph_index,
+ FXFT_LOAD_NO_SCALE | FXFT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH);
+ int max_width = FXFT_Get_Glyph_HoriAdvance(m_Face) * 1000 /
+ FXFT_Get_Face_UnitsPerEM(m_Face);
+ if (max_width == min_width) {
+ return;
+ }
+ int param = min_param +
+ (max_param - min_param) * (dest_width - min_width) /
+ (max_width - min_width);
+ coords[1] = param;
+ }
+ FXFT_Free(m_Face, pMasters);
+ FXFT_Set_MM_Design_Coordinates(m_Face, 2, coords);
}
static const size_t ANGLESKEW_ARRAY_SIZE = 30;
static const char g_AngleSkew[ANGLESKEW_ARRAY_SIZE] = {
- 0, 2, 3, 5, 7, 9, 11, 12, 14, 16,
- 18, 19, 21, 23, 25, 27, 29, 31, 32, 34,
- 36, 38, 40, 42, 45, 47, 49, 51, 53, 55,
+ 0, 2, 3, 5, 7, 9, 11, 12, 14, 16, 18, 19, 21, 23, 25,
+ 27, 29, 31, 32, 34, 36, 38, 40, 42, 45, 47, 49, 51, 53, 55,
};
static const size_t WEIGHTPOW_ARRAY_SIZE = 100;
static const uint8_t g_WeightPow[WEIGHTPOW_ARRAY_SIZE] = {
- 0, 3, 6, 7, 8, 9, 11, 12, 14, 15, 16, 17, 18, 19, 20,
- 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 35, 36, 36,
- 37, 37, 37, 38, 38, 38, 39, 39, 39, 40, 40, 40, 41, 41, 41, 42, 42, 42,
- 42, 43, 43, 43, 44, 44, 44, 44, 45, 45, 45, 45, 46, 46, 46, 46, 47, 47,
- 47, 47, 48, 48, 48, 48, 48, 49, 49, 49, 49, 50, 50, 50, 50, 50, 51, 51,
- 51, 51, 51, 52, 52, 52, 52, 52, 53, 53, 53, 53, 53,
+ 0, 3, 6, 7, 8, 9, 11, 12, 14, 15, 16, 17, 18, 19, 20, 21, 22,
+ 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 35, 36, 36, 37,
+ 37, 37, 38, 38, 38, 39, 39, 39, 40, 40, 40, 41, 41, 41, 42, 42, 42,
+ 42, 43, 43, 43, 44, 44, 44, 44, 45, 45, 45, 45, 46, 46, 46, 46, 47,
+ 47, 47, 47, 48, 48, 48, 48, 48, 49, 49, 49, 49, 50, 50, 50, 50, 50,
+ 51, 51, 51, 51, 51, 52, 52, 52, 52, 52, 53, 53, 53, 53, 53,
};
static const uint8_t g_WeightPow_11[WEIGHTPOW_ARRAY_SIZE] = {
- 0, 4, 7, 8, 9, 10, 12, 13, 15, 17, 18, 19, 20, 21, 22,
- 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 39, 39, 40, 40,
- 41, 41, 41, 42, 42, 42, 43, 43, 43, 44, 44, 44, 45, 45, 45, 46, 46, 46,
- 46, 43, 47, 47, 48, 48, 48, 48, 45, 50, 50, 50, 46, 51, 51, 51, 52, 52,
- 52, 52, 53, 53, 53, 53, 53, 54, 54, 54, 54, 55, 55, 55, 55, 55, 56, 56,
- 56, 56, 56, 57, 57, 57, 57, 57, 58, 58, 58, 58, 58,
+ 0, 4, 7, 8, 9, 10, 12, 13, 15, 17, 18, 19, 20, 21, 22, 23, 24,
+ 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 39, 39, 40, 40, 41,
+ 41, 41, 42, 42, 42, 43, 43, 43, 44, 44, 44, 45, 45, 45, 46, 46, 46,
+ 46, 43, 47, 47, 48, 48, 48, 48, 45, 50, 50, 50, 46, 51, 51, 51, 52,
+ 52, 52, 52, 53, 53, 53, 53, 53, 54, 54, 54, 54, 55, 55, 55, 55, 55,
+ 56, 56, 56, 56, 56, 57, 57, 57, 57, 57, 58, 58, 58, 58, 58,
};
static const uint8_t g_WeightPow_SHIFTJIS[WEIGHTPOW_ARRAY_SIZE] = {
- 0, 0, 1, 2, 3, 4, 5, 7, 8, 10, 11, 13, 14, 16, 17, 19, 21, 22, 24, 26, 28,
- 30, 32, 33, 35, 37, 39, 41, 43, 45, 48, 48, 48, 48, 49, 49, 49, 50, 50, 50, 50,
- 51, 51, 51, 51, 52, 52, 52, 52, 52, 53, 53, 53, 53, 53, 54, 54, 54, 54, 54, 55, 55,
- 55, 55, 55, 56, 56, 56, 56, 56 , 56, 57, 57, 57 , 57 , 57, 57, 57, 58, 58, 58, 58, 58,
- 58, 58, 59, 59, 59, 59, 59, 59, 59, 60, 60, 60, 60, 60, 60, 60, 60,
+ 0, 0, 1, 2, 3, 4, 5, 7, 8, 10, 11, 13, 14, 16, 17, 19, 21,
+ 22, 24, 26, 28, 30, 32, 33, 35, 37, 39, 41, 43, 45, 48, 48, 48, 48,
+ 49, 49, 49, 50, 50, 50, 50, 51, 51, 51, 51, 52, 52, 52, 52, 52, 53,
+ 53, 53, 53, 53, 54, 54, 54, 54, 54, 55, 55, 55, 55, 55, 56, 56, 56,
+ 56, 56, 56, 57, 57, 57, 57, 57, 57, 57, 58, 58, 58, 58, 58, 58, 58,
+ 59, 59, 59, 59, 59, 59, 59, 60, 60, 60, 60, 60, 60, 60, 60,
};
-static void _GammaAdjust(uint8_t* pData, int nWid, int nHei, int src_pitch, const uint8_t* gammaTable)
-{
- int count = nHei * src_pitch;
- for(int i = 0; i < count; i++) {
- pData[i] = gammaTable[pData[i]];
- }
+static void _GammaAdjust(uint8_t* pData,
+ int nWid,
+ int nHei,
+ int src_pitch,
+ const uint8_t* gammaTable) {
+ int count = nHei * src_pitch;
+ for (int i = 0; i < count; i++) {
+ pData[i] = gammaTable[pData[i]];
+ }
}
-static void _ContrastAdjust(uint8_t* pDataIn, uint8_t* pDataOut, int nWid, int nHei, int nSrcRowBytes, int nDstRowBytes)
-{
- int col, row, temp;
- int max = 0, min = 255;
- FX_FLOAT rate;
- for (row = 0; row < nHei; row ++) {
- uint8_t* pRow = pDataIn + row * nSrcRowBytes;
- for (col = 0; col < nWid; col++) {
- temp = *pRow ++;
- if (temp > max) {
- max = temp;
- }
- if (temp < min) {
- min = temp;
- }
- }
- }
- temp = max - min;
- if (0 == temp || 255 == temp) {
- int rowbytes = FXSYS_abs(nSrcRowBytes) > nDstRowBytes ? nDstRowBytes : FXSYS_abs(nSrcRowBytes);
- for (row = 0; row < nHei; row ++) {
- FXSYS_memcpy(pDataOut + row * nDstRowBytes, pDataIn + row * nSrcRowBytes, rowbytes);
- }
- return;
- }
- rate = 255.f / temp;
- for (row = 0; row < nHei; row ++) {
- uint8_t* pSrcRow = pDataIn + row * nSrcRowBytes;
- uint8_t* pDstRow = pDataOut + row * nDstRowBytes;
- for (col = 0; col < nWid; col ++) {
- temp = (int)((*(pSrcRow++) - min) * rate + 0.5);
- if (temp > 255) {
- temp = 255;
- } else if (temp < 0) {
- temp = 0;
- }
- *pDstRow ++ = (uint8_t)temp;
- }
- }
+static void _ContrastAdjust(uint8_t* pDataIn,
+ uint8_t* pDataOut,
+ int nWid,
+ int nHei,
+ int nSrcRowBytes,
+ int nDstRowBytes) {
+ int col, row, temp;
+ int max = 0, min = 255;
+ FX_FLOAT rate;
+ for (row = 0; row < nHei; row++) {
+ uint8_t* pRow = pDataIn + row * nSrcRowBytes;
+ for (col = 0; col < nWid; col++) {
+ temp = *pRow++;
+ if (temp > max) {
+ max = temp;
+ }
+ if (temp < min) {
+ min = temp;
+ }
+ }
+ }
+ temp = max - min;
+ if (0 == temp || 255 == temp) {
+ int rowbytes = FXSYS_abs(nSrcRowBytes) > nDstRowBytes
+ ? nDstRowBytes
+ : FXSYS_abs(nSrcRowBytes);
+ for (row = 0; row < nHei; row++) {
+ FXSYS_memcpy(pDataOut + row * nDstRowBytes, pDataIn + row * nSrcRowBytes,
+ rowbytes);
+ }
+ return;
+ }
+ rate = 255.f / temp;
+ for (row = 0; row < nHei; row++) {
+ uint8_t* pSrcRow = pDataIn + row * nSrcRowBytes;
+ uint8_t* pDstRow = pDataOut + row * nDstRowBytes;
+ for (col = 0; col < nWid; col++) {
+ temp = (int)((*(pSrcRow++) - min) * rate + 0.5);
+ if (temp > 255) {
+ temp = 255;
+ } else if (temp < 0) {
+ temp = 0;
+ }
+ *pDstRow++ = (uint8_t)temp;
+ }
+ }
}
-CFX_GlyphBitmap* CFX_FaceCache::RenderGlyph(CFX_Font* pFont, FX_DWORD glyph_index, FX_BOOL bFontStyle,
- const CFX_AffineMatrix* pMatrix, int dest_width, int anti_alias)
-{
- if (m_Face == NULL) {
- return NULL;
- }
- FXFT_Matrix ft_matrix;
- ft_matrix.xx = (signed long)(pMatrix->GetA() / 64 * 65536);
- ft_matrix.xy = (signed long)(pMatrix->GetC() / 64 * 65536);
- ft_matrix.yx = (signed long)(pMatrix->GetB() / 64 * 65536);
- ft_matrix.yy = (signed long)(pMatrix->GetD() / 64 * 65536);
- FX_BOOL bUseCJKSubFont = FALSE;
- const CFX_SubstFont* pSubstFont = pFont->GetSubstFont();
- if (pSubstFont) {
- bUseCJKSubFont = pSubstFont->m_bSubstOfCJK && bFontStyle;
- int skew = 0;
- if (bUseCJKSubFont) {
- skew = pSubstFont->m_bItlicCJK ? -15 : 0;
- } else {
- skew = pSubstFont->m_ItalicAngle;
- }
- if (skew) {
- skew = skew <= -ANGLESKEW_ARRAY_SIZE ? -58 : -g_AngleSkew[-skew];
- if (pFont->IsVertical()) {
- ft_matrix.yx += ft_matrix.yy * skew / 100;
- } else {
- ft_matrix.xy += -ft_matrix.xx * skew / 100;
- }
- }
- if (pSubstFont->m_SubstFlags & FXFONT_SUBST_MM) {
- pFont->AdjustMMParams(glyph_index, dest_width, pFont->GetSubstFont()->m_Weight);
- }
- }
- ScopedFontTransform scoped_transform(m_Face, &ft_matrix);
- int load_flags = (m_Face->face_flags & FT_FACE_FLAG_SFNT) ? FXFT_LOAD_NO_BITMAP : (FXFT_LOAD_NO_BITMAP | FT_LOAD_NO_HINTING);
- int error = FXFT_Load_Glyph(m_Face, glyph_index, load_flags);
- if (error) {
- //if an error is returned, try to reload glyphs without hinting.
- if (load_flags & FT_LOAD_NO_HINTING || load_flags & FT_LOAD_NO_SCALE) {
- return NULL;
- }
-
- load_flags |= FT_LOAD_NO_HINTING;
- error = FXFT_Load_Glyph(m_Face, glyph_index, load_flags);
-
- if (error) {
- return NULL;
- }
- }
- int weight = 0;
+CFX_GlyphBitmap* CFX_FaceCache::RenderGlyph(CFX_Font* pFont,
+ FX_DWORD glyph_index,
+ FX_BOOL bFontStyle,
+ const CFX_AffineMatrix* pMatrix,
+ int dest_width,
+ int anti_alias) {
+ if (m_Face == NULL) {
+ return NULL;
+ }
+ FXFT_Matrix ft_matrix;
+ ft_matrix.xx = (signed long)(pMatrix->GetA() / 64 * 65536);
+ ft_matrix.xy = (signed long)(pMatrix->GetC() / 64 * 65536);
+ ft_matrix.yx = (signed long)(pMatrix->GetB() / 64 * 65536);
+ ft_matrix.yy = (signed long)(pMatrix->GetD() / 64 * 65536);
+ FX_BOOL bUseCJKSubFont = FALSE;
+ const CFX_SubstFont* pSubstFont = pFont->GetSubstFont();
+ if (pSubstFont) {
+ bUseCJKSubFont = pSubstFont->m_bSubstOfCJK && bFontStyle;
+ int skew = 0;
if (bUseCJKSubFont) {
- weight = pSubstFont->m_WeightCJK;
+ skew = pSubstFont->m_bItlicCJK ? -15 : 0;
} else {
- weight = pSubstFont ? pSubstFont->m_Weight : 0;
- }
- if (pSubstFont && !(pSubstFont->m_SubstFlags & FXFONT_SUBST_MM) && weight > 400) {
- int index = (weight - 400) / 10;
- if (index >= WEIGHTPOW_ARRAY_SIZE) {
- return NULL;
- }
- int level = 0;
- if (pSubstFont->m_Charset == FXFONT_SHIFTJIS_CHARSET) {
- level = g_WeightPow_SHIFTJIS[index] * 2 * (FXSYS_abs((int)(ft_matrix.xx)) + FXSYS_abs((int)(ft_matrix.xy))) / 36655;
- } else {
- level = g_WeightPow_11[index] * (FXSYS_abs((int)(ft_matrix.xx)) + FXSYS_abs((int)(ft_matrix.xy))) / 36655;
- }
- FXFT_Outline_Embolden(FXFT_Get_Glyph_Outline(m_Face), level);
+ skew = pSubstFont->m_ItalicAngle;
+ }
+ if (skew) {
+ skew = skew <= -ANGLESKEW_ARRAY_SIZE ? -58 : -g_AngleSkew[-skew];
+ if (pFont->IsVertical()) {
+ ft_matrix.yx += ft_matrix.yy * skew / 100;
+ } else {
+ ft_matrix.xy += -ft_matrix.xx * skew / 100;
+ }
+ }
+ if (pSubstFont->m_SubstFlags & FXFONT_SUBST_MM) {
+ pFont->AdjustMMParams(glyph_index, dest_width,
+ pFont->GetSubstFont()->m_Weight);
+ }
+ }
+ ScopedFontTransform scoped_transform(m_Face, &ft_matrix);
+ int load_flags = (m_Face->face_flags & FT_FACE_FLAG_SFNT)
+ ? FXFT_LOAD_NO_BITMAP
+ : (FXFT_LOAD_NO_BITMAP | FT_LOAD_NO_HINTING);
+ int error = FXFT_Load_Glyph(m_Face, glyph_index, load_flags);
+ if (error) {
+ // if an error is returned, try to reload glyphs without hinting.
+ if (load_flags & FT_LOAD_NO_HINTING || load_flags & FT_LOAD_NO_SCALE) {
+ return NULL;
}
- FXFT_Library_SetLcdFilter(CFX_GEModule::Get()->GetFontMgr()->m_FTLibrary, FT_LCD_FILTER_DEFAULT);
- error = FXFT_Render_Glyph(m_Face, anti_alias);
+
+ load_flags |= FT_LOAD_NO_HINTING;
+ error = FXFT_Load_Glyph(m_Face, glyph_index, load_flags);
+
if (error) {
- return NULL;
- }
- int bmwidth = FXFT_Get_Bitmap_Width(FXFT_Get_Glyph_Bitmap(m_Face));
- int bmheight = FXFT_Get_Bitmap_Rows(FXFT_Get_Glyph_Bitmap(m_Face));
- if (bmwidth > 2048 || bmheight > 2048) {
- return NULL;
- }
- int dib_width = bmwidth;
- CFX_GlyphBitmap* pGlyphBitmap = new CFX_GlyphBitmap;
- pGlyphBitmap->m_Bitmap.Create(dib_width, bmheight,
- anti_alias == FXFT_RENDER_MODE_MONO ? FXDIB_1bppMask : FXDIB_8bppMask);
- pGlyphBitmap->m_Left = FXFT_Get_Glyph_BitmapLeft(m_Face);
- pGlyphBitmap->m_Top = FXFT_Get_Glyph_BitmapTop(m_Face);
- int dest_pitch = pGlyphBitmap->m_Bitmap.GetPitch();
- int src_pitch = FXFT_Get_Bitmap_Pitch(FXFT_Get_Glyph_Bitmap(m_Face));
- uint8_t* pDestBuf = pGlyphBitmap->m_Bitmap.GetBuffer();
- uint8_t* pSrcBuf = (uint8_t*)FXFT_Get_Bitmap_Buffer(FXFT_Get_Glyph_Bitmap(m_Face));
- if (anti_alias != FXFT_RENDER_MODE_MONO && FXFT_Get_Bitmap_PixelMode(FXFT_Get_Glyph_Bitmap(m_Face)) == FXFT_PIXEL_MODE_MONO) {
- int bytes = anti_alias == FXFT_RENDER_MODE_LCD ? 3 : 1;
- for(int i = 0; i < bmheight; i++)
- for(int n = 0; n < bmwidth; n++) {
- uint8_t data = (pSrcBuf[i * src_pitch + n / 8] & (0x80 >> (n % 8))) ? 255 : 0;
- for (int b = 0; b < bytes; b ++) {
- pDestBuf[i * dest_pitch + n * bytes + b] = data;
- }
- }
+ return NULL;
+ }
+ }
+ int weight = 0;
+ if (bUseCJKSubFont) {
+ weight = pSubstFont->m_WeightCJK;
+ } else {
+ weight = pSubstFont ? pSubstFont->m_Weight : 0;
+ }
+ if (pSubstFont && !(pSubstFont->m_SubstFlags & FXFONT_SUBST_MM) &&
+ weight > 400) {
+ int index = (weight - 400) / 10;
+ if (index >= WEIGHTPOW_ARRAY_SIZE) {
+ return NULL;
+ }
+ int level = 0;
+ if (pSubstFont->m_Charset == FXFONT_SHIFTJIS_CHARSET) {
+ level =
+ g_WeightPow_SHIFTJIS[index] * 2 *
+ (FXSYS_abs((int)(ft_matrix.xx)) + FXSYS_abs((int)(ft_matrix.xy))) /
+ 36655;
} else {
- FXSYS_memset(pDestBuf, 0, dest_pitch * bmheight);
- if (anti_alias == FXFT_RENDER_MODE_MONO && FXFT_Get_Bitmap_PixelMode(FXFT_Get_Glyph_Bitmap(m_Face)) == FXFT_PIXEL_MODE_MONO) {
- int rowbytes = FXSYS_abs(src_pitch) > dest_pitch ? dest_pitch : FXSYS_abs(src_pitch);
- for (int row = 0; row < bmheight; row ++) {
- FXSYS_memcpy(pDestBuf + row * dest_pitch, pSrcBuf + row * src_pitch, rowbytes);
- }
- } else {
- _ContrastAdjust(pSrcBuf, pDestBuf, bmwidth, bmheight, src_pitch, dest_pitch);
- _GammaAdjust(pDestBuf, bmwidth, bmheight, dest_pitch, CFX_GEModule::Get()->GetTextGammaTable());
+ level = g_WeightPow_11[index] * (FXSYS_abs((int)(ft_matrix.xx)) +
+ FXSYS_abs((int)(ft_matrix.xy))) /
+ 36655;
+ }
+ FXFT_Outline_Embolden(FXFT_Get_Glyph_Outline(m_Face), level);
+ }
+ FXFT_Library_SetLcdFilter(CFX_GEModule::Get()->GetFontMgr()->m_FTLibrary,
+ FT_LCD_FILTER_DEFAULT);
+ error = FXFT_Render_Glyph(m_Face, anti_alias);
+ if (error) {
+ return NULL;
+ }
+ int bmwidth = FXFT_Get_Bitmap_Width(FXFT_Get_Glyph_Bitmap(m_Face));
+ int bmheight = FXFT_Get_Bitmap_Rows(FXFT_Get_Glyph_Bitmap(m_Face));
+ if (bmwidth > 2048 || bmheight > 2048) {
+ return NULL;
+ }
+ int dib_width = bmwidth;
+ CFX_GlyphBitmap* pGlyphBitmap = new CFX_GlyphBitmap;
+ pGlyphBitmap->m_Bitmap.Create(
+ dib_width, bmheight,
+ anti_alias == FXFT_RENDER_MODE_MONO ? FXDIB_1bppMask : FXDIB_8bppMask);
+ pGlyphBitmap->m_Left = FXFT_Get_Glyph_BitmapLeft(m_Face);
+ pGlyphBitmap->m_Top = FXFT_Get_Glyph_BitmapTop(m_Face);
+ int dest_pitch = pGlyphBitmap->m_Bitmap.GetPitch();
+ int src_pitch = FXFT_Get_Bitmap_Pitch(FXFT_Get_Glyph_Bitmap(m_Face));
+ uint8_t* pDestBuf = pGlyphBitmap->m_Bitmap.GetBuffer();
+ uint8_t* pSrcBuf =
+ (uint8_t*)FXFT_Get_Bitmap_Buffer(FXFT_Get_Glyph_Bitmap(m_Face));
+ if (anti_alias != FXFT_RENDER_MODE_MONO &&
+ FXFT_Get_Bitmap_PixelMode(FXFT_Get_Glyph_Bitmap(m_Face)) ==
+ FXFT_PIXEL_MODE_MONO) {
+ int bytes = anti_alias == FXFT_RENDER_MODE_LCD ? 3 : 1;
+ for (int i = 0; i < bmheight; i++)
+ for (int n = 0; n < bmwidth; n++) {
+ uint8_t data =
+ (pSrcBuf[i * src_pitch + n / 8] & (0x80 >> (n % 8))) ? 255 : 0;
+ for (int b = 0; b < bytes; b++) {
+ pDestBuf[i * dest_pitch + n * bytes + b] = data;
}
+ }
+ } else {
+ FXSYS_memset(pDestBuf, 0, dest_pitch * bmheight);
+ if (anti_alias == FXFT_RENDER_MODE_MONO &&
+ FXFT_Get_Bitmap_PixelMode(FXFT_Get_Glyph_Bitmap(m_Face)) ==
+ FXFT_PIXEL_MODE_MONO) {
+ int rowbytes =
+ FXSYS_abs(src_pitch) > dest_pitch ? dest_pitch : FXSYS_abs(src_pitch);
+ for (int row = 0; row < bmheight; row++) {
+ FXSYS_memcpy(pDestBuf + row * dest_pitch, pSrcBuf + row * src_pitch,
+ rowbytes);
+ }
+ } else {
+ _ContrastAdjust(pSrcBuf, pDestBuf, bmwidth, bmheight, src_pitch,
+ dest_pitch);
+ _GammaAdjust(pDestBuf, bmwidth, bmheight, dest_pitch,
+ CFX_GEModule::Get()->GetTextGammaTable());
}
- return pGlyphBitmap;
+ }
+ return pGlyphBitmap;
}
-FX_BOOL _OutputGlyph(void* dib, int x, int y, CFX_Font* pFont,
- int glyph_index, FX_ARGB argb)
-{
- CFX_DIBitmap* pDib = (CFX_DIBitmap*)dib;
- FXFT_Face face = pFont->GetFace();
- int error = FXFT_Load_Glyph(face, glyph_index, FXFT_LOAD_NO_BITMAP);
- if (error) {
- return FALSE;
- }
- error = FXFT_Render_Glyph(face, FXFT_RENDER_MODE_NORMAL);
- if (error) {
- return FALSE;
- }
- int bmwidth = FXFT_Get_Bitmap_Width(FXFT_Get_Glyph_Bitmap(face));
- int bmheight = FXFT_Get_Bitmap_Rows(FXFT_Get_Glyph_Bitmap(face));
- int left = FXFT_Get_Glyph_BitmapLeft(face);
- int top = FXFT_Get_Glyph_BitmapTop(face);
- const uint8_t* src_buf = (const uint8_t*)FXFT_Get_Bitmap_Buffer(FXFT_Get_Glyph_Bitmap(face));
- int src_pitch = FXFT_Get_Bitmap_Pitch(FXFT_Get_Glyph_Bitmap(face));
- CFX_DIBitmap mask;
- mask.Create(bmwidth, bmheight, FXDIB_8bppMask);
- uint8_t* dest_buf = mask.GetBuffer();
- int dest_pitch = mask.GetPitch();
- for (int row = 0; row < bmheight; row ++) {
- const uint8_t* src_scan = src_buf + row * src_pitch;
- uint8_t* dest_scan = dest_buf + row * dest_pitch;
- FXSYS_memcpy(dest_scan, src_scan, dest_pitch);
- }
- pDib->CompositeMask(x + left, y - top, bmwidth, bmheight, &mask, argb, 0, 0);
- return TRUE;
+FX_BOOL _OutputGlyph(void* dib,
+ int x,
+ int y,
+ CFX_Font* pFont,
+ int glyph_index,
+ FX_ARGB argb) {
+ CFX_DIBitmap* pDib = (CFX_DIBitmap*)dib;
+ FXFT_Face face = pFont->GetFace();
+ int error = FXFT_Load_Glyph(face, glyph_index, FXFT_LOAD_NO_BITMAP);
+ if (error) {
+ return FALSE;
+ }
+ error = FXFT_Render_Glyph(face, FXFT_RENDER_MODE_NORMAL);
+ if (error) {
+ return FALSE;
+ }
+ int bmwidth = FXFT_Get_Bitmap_Width(FXFT_Get_Glyph_Bitmap(face));
+ int bmheight = FXFT_Get_Bitmap_Rows(FXFT_Get_Glyph_Bitmap(face));
+ int left = FXFT_Get_Glyph_BitmapLeft(face);
+ int top = FXFT_Get_Glyph_BitmapTop(face);
+ const uint8_t* src_buf =
+ (const uint8_t*)FXFT_Get_Bitmap_Buffer(FXFT_Get_Glyph_Bitmap(face));
+ int src_pitch = FXFT_Get_Bitmap_Pitch(FXFT_Get_Glyph_Bitmap(face));
+ CFX_DIBitmap mask;
+ mask.Create(bmwidth, bmheight, FXDIB_8bppMask);
+ uint8_t* dest_buf = mask.GetBuffer();
+ int dest_pitch = mask.GetPitch();
+ for (int row = 0; row < bmheight; row++) {
+ const uint8_t* src_scan = src_buf + row * src_pitch;
+ uint8_t* dest_scan = dest_buf + row * dest_pitch;
+ FXSYS_memcpy(dest_scan, src_scan, dest_pitch);
+ }
+ pDib->CompositeMask(x + left, y - top, bmwidth, bmheight, &mask, argb, 0, 0);
+ return TRUE;
}
-FX_BOOL OutputText(void* dib, int x, int y, CFX_Font* pFont, double font_size,
- CFX_AffineMatrix* pText_matrix, unsigned short const* text, unsigned long argb)
-{
- if (!pFont) {
- return FALSE;
- }
- FXFT_Face face = pFont->GetFace();
- FXFT_Select_Charmap(pFont->m_Face, FXFT_ENCODING_UNICODE);
- if (pText_matrix) {
- FXFT_Matrix ft_matrix;
- ft_matrix.xx = (signed long)(pText_matrix->a / 64 * 65536);
- ft_matrix.xy = (signed long)(pText_matrix->c / 64 * 65536);
- ft_matrix.yx = (signed long)(pText_matrix->b / 64 * 65536);
- ft_matrix.yy = (signed long)(pText_matrix->d / 64 * 65536);
- FXFT_Set_Transform(face, &ft_matrix, 0);
- }
- FX_FLOAT x_pos = 0;
- for (; *text != 0; text ++) {
- FX_WCHAR unicode = *text;
- int glyph_index = FXFT_Get_Char_Index(pFont->m_Face, unicode);
- if (glyph_index <= 0) {
- continue;
- }
- int err = FXFT_Load_Glyph(pFont->m_Face, glyph_index, FXFT_LOAD_NO_SCALE | FXFT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH);
- if (err) {
- continue;
- }
- int w = FXFT_Get_Glyph_HoriAdvance(pFont->m_Face);
- int em = FXFT_Get_Face_UnitsPerEM(pFont->m_Face);
- FX_FLOAT x1, y1;
- pText_matrix->Transform(x_pos, 0, x1, y1);
- _OutputGlyph(dib, (int)x1 + x, (int) - y1 + y, pFont,
- glyph_index, argb);
- x_pos += (FX_FLOAT)w / em;
- }
- if (pText_matrix)
- ResetTransform(face);
- return TRUE;
+FX_BOOL OutputText(void* dib,
+ int x,
+ int y,
+ CFX_Font* pFont,
+ double font_size,
+ CFX_AffineMatrix* pText_matrix,
+ unsigned short const* text,
+ unsigned long argb) {
+ if (!pFont) {
+ return FALSE;
+ }
+ FXFT_Face face = pFont->GetFace();
+ FXFT_Select_Charmap(pFont->m_Face, FXFT_ENCODING_UNICODE);
+ if (pText_matrix) {
+ FXFT_Matrix ft_matrix;
+ ft_matrix.xx = (signed long)(pText_matrix->a / 64 * 65536);
+ ft_matrix.xy = (signed long)(pText_matrix->c / 64 * 65536);
+ ft_matrix.yx = (signed long)(pText_matrix->b / 64 * 65536);
+ ft_matrix.yy = (signed long)(pText_matrix->d / 64 * 65536);
+ FXFT_Set_Transform(face, &ft_matrix, 0);
+ }
+ FX_FLOAT x_pos = 0;
+ for (; *text != 0; text++) {
+ FX_WCHAR unicode = *text;
+ int glyph_index = FXFT_Get_Char_Index(pFont->m_Face, unicode);
+ if (glyph_index <= 0) {
+ continue;
+ }
+ int err = FXFT_Load_Glyph(
+ pFont->m_Face, glyph_index,
+ FXFT_LOAD_NO_SCALE | FXFT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH);
+ if (err) {
+ continue;
+ }
+ int w = FXFT_Get_Glyph_HoriAdvance(pFont->m_Face);
+ int em = FXFT_Get_Face_UnitsPerEM(pFont->m_Face);
+ FX_FLOAT x1, y1;
+ pText_matrix->Transform(x_pos, 0, x1, y1);
+ _OutputGlyph(dib, (int)x1 + x, (int)-y1 + y, pFont, glyph_index, argb);
+ x_pos += (FX_FLOAT)w / em;
+ }
+ if (pText_matrix)
+ ResetTransform(face);
+ return TRUE;
}
-FX_BOOL OutputGlyph(void* dib, int x, int y, CFX_Font* pFont, double font_size,
- CFX_AffineMatrix* pMatrix, unsigned long glyph_index, unsigned long argb)
-{
- FXFT_Matrix ft_matrix;
- if (pMatrix) {
- ft_matrix.xx = (signed long)(pMatrix->a * font_size / 64 * 65536);
- ft_matrix.xy = (signed long)(pMatrix->c * font_size / 64 * 65536);
- ft_matrix.yx = (signed long)(pMatrix->b * font_size / 64 * 65536);
- ft_matrix.yy = (signed long)(pMatrix->d * font_size / 64 * 65536);
- } else {
- ft_matrix.xx = (signed long)(font_size / 64 * 65536);
- ft_matrix.xy = ft_matrix.yx = 0;
- ft_matrix.yy = (signed long)(font_size / 64 * 65536);
- }
- ScopedFontTransform scoped_transform(pFont->m_Face, &ft_matrix);
- FX_BOOL ret = _OutputGlyph(dib, x, y, pFont,
- glyph_index, argb);
- return ret;
+FX_BOOL OutputGlyph(void* dib,
+ int x,
+ int y,
+ CFX_Font* pFont,
+ double font_size,
+ CFX_AffineMatrix* pMatrix,
+ unsigned long glyph_index,
+ unsigned long argb) {
+ FXFT_Matrix ft_matrix;
+ if (pMatrix) {
+ ft_matrix.xx = (signed long)(pMatrix->a * font_size / 64 * 65536);
+ ft_matrix.xy = (signed long)(pMatrix->c * font_size / 64 * 65536);
+ ft_matrix.yx = (signed long)(pMatrix->b * font_size / 64 * 65536);
+ ft_matrix.yy = (signed long)(pMatrix->d * font_size / 64 * 65536);
+ } else {
+ ft_matrix.xx = (signed long)(font_size / 64 * 65536);
+ ft_matrix.xy = ft_matrix.yx = 0;
+ ft_matrix.yy = (signed long)(font_size / 64 * 65536);
+ }
+ ScopedFontTransform scoped_transform(pFont->m_Face, &ft_matrix);
+ FX_BOOL ret = _OutputGlyph(dib, x, y, pFont, glyph_index, argb);
+ return ret;
}
-const CFX_PathData* CFX_FaceCache::LoadGlyphPath(CFX_Font* pFont, FX_DWORD glyph_index, int dest_width)
-{
- if (m_Face == NULL || glyph_index == (FX_DWORD) - 1) {
- return NULL;
- }
- CFX_PathData* pGlyphPath = NULL;
- void* key;
- if (pFont->GetSubstFont())
- key = (void*)(uintptr_t)(glyph_index + ((pFont->GetSubstFont()->m_Weight / 16) << 15) +
- ((pFont->GetSubstFont()->m_ItalicAngle / 2) << 21) + ((dest_width / 16) << 25) +
- (pFont->IsVertical() << 31));
- else {
- key = (void*)(uintptr_t)glyph_index;
- }
- if (m_PathMap.Lookup(key, (void*&)pGlyphPath)) {
- return pGlyphPath;
- }
- pGlyphPath = pFont->LoadGlyphPath(glyph_index, dest_width);
- m_PathMap.SetAt(key, pGlyphPath);
+const CFX_PathData* CFX_FaceCache::LoadGlyphPath(CFX_Font* pFont,
+ FX_DWORD glyph_index,
+ int dest_width) {
+ if (m_Face == NULL || glyph_index == (FX_DWORD)-1) {
+ return NULL;
+ }
+ CFX_PathData* pGlyphPath = NULL;
+ void* key;
+ if (pFont->GetSubstFont())
+ key = (void*)(uintptr_t)(
+ glyph_index + ((pFont->GetSubstFont()->m_Weight / 16) << 15) +
+ ((pFont->GetSubstFont()->m_ItalicAngle / 2) << 21) +
+ ((dest_width / 16) << 25) + (pFont->IsVertical() << 31));
+ else {
+ key = (void*)(uintptr_t)glyph_index;
+ }
+ if (m_PathMap.Lookup(key, (void*&)pGlyphPath)) {
return pGlyphPath;
+ }
+ pGlyphPath = pFont->LoadGlyphPath(glyph_index, dest_width);
+ m_PathMap.SetAt(key, pGlyphPath);
+ return pGlyphPath;
}
typedef struct {
- FX_BOOL m_bCount;
- int m_PointCount;
- FX_PATHPOINT* m_pPoints;
- int m_CurX;
- int m_CurY;
- FX_FLOAT m_CoordUnit;
+ FX_BOOL m_bCount;
+ int m_PointCount;
+ FX_PATHPOINT* m_pPoints;
+ int m_CurX;
+ int m_CurY;
+ FX_FLOAT m_CoordUnit;
} OUTLINE_PARAMS;
-void _Outline_CheckEmptyContour(OUTLINE_PARAMS* param)
-{
- if (param->m_PointCount >= 2 && param->m_pPoints[param->m_PointCount - 2].m_Flag == FXPT_MOVETO &&
- param->m_pPoints[param->m_PointCount - 2].m_PointX == param->m_pPoints[param->m_PointCount - 1].m_PointX &&
- param->m_pPoints[param->m_PointCount - 2].m_PointY == param->m_pPoints[param->m_PointCount - 1].m_PointY) {
- param->m_PointCount -= 2;
- }
- if (param->m_PointCount >= 4 && param->m_pPoints[param->m_PointCount - 4].m_Flag == FXPT_MOVETO &&
- param->m_pPoints[param->m_PointCount - 3].m_Flag == FXPT_BEZIERTO &&
- param->m_pPoints[param->m_PointCount - 3].m_PointX == param->m_pPoints[param->m_PointCount - 4].m_PointX &&
- param->m_pPoints[param->m_PointCount - 3].m_PointY == param->m_pPoints[param->m_PointCount - 4].m_PointY &&
- param->m_pPoints[param->m_PointCount - 2].m_PointX == param->m_pPoints[param->m_PointCount - 4].m_PointX &&
- param->m_pPoints[param->m_PointCount - 2].m_PointY == param->m_pPoints[param->m_PointCount - 4].m_PointY &&
- param->m_pPoints[param->m_PointCount - 1].m_PointX == param->m_pPoints[param->m_PointCount - 4].m_PointX &&
- param->m_pPoints[param->m_PointCount - 1].m_PointY == param->m_pPoints[param->m_PointCount - 4].m_PointY) {
- param->m_PointCount -= 4;
- }
+void _Outline_CheckEmptyContour(OUTLINE_PARAMS* param) {
+ if (param->m_PointCount >= 2 &&
+ param->m_pPoints[param->m_PointCount - 2].m_Flag == FXPT_MOVETO &&
+ param->m_pPoints[param->m_PointCount - 2].m_PointX ==
+ param->m_pPoints[param->m_PointCount - 1].m_PointX &&
+ param->m_pPoints[param->m_PointCount - 2].m_PointY ==
+ param->m_pPoints[param->m_PointCount - 1].m_PointY) {
+ param->m_PointCount -= 2;
+ }
+ if (param->m_PointCount >= 4 &&
+ param->m_pPoints[param->m_PointCount - 4].m_Flag == FXPT_MOVETO &&
+ param->m_pPoints[param->m_PointCount - 3].m_Flag == FXPT_BEZIERTO &&
+ param->m_pPoints[param->m_PointCount - 3].m_PointX ==
+ param->m_pPoints[param->m_PointCount - 4].m_PointX &&
+ param->m_pPoints[param->m_PointCount - 3].m_PointY ==
+ param->m_pPoints[param->m_PointCount - 4].m_PointY &&
+ param->m_pPoints[param->m_PointCount - 2].m_PointX ==
+ param->m_pPoints[param->m_PointCount - 4].m_PointX &&
+ param->m_pPoints[param->m_PointCount - 2].m_PointY ==
+ param->m_pPoints[param->m_PointCount - 4].m_PointY &&
+ param->m_pPoints[param->m_PointCount - 1].m_PointX ==
+ param->m_pPoints[param->m_PointCount - 4].m_PointX &&
+ param->m_pPoints[param->m_PointCount - 1].m_PointY ==
+ param->m_pPoints[param->m_PointCount - 4].m_PointY) {
+ param->m_PointCount -= 4;
+ }
}
extern "C" {
- static int _Outline_MoveTo(const FXFT_Vector* to, void* user)
- {
- OUTLINE_PARAMS* param = (OUTLINE_PARAMS*)user;
- if (!param->m_bCount) {
- _Outline_CheckEmptyContour(param);
- param->m_pPoints[param->m_PointCount].m_PointX = to->x / param->m_CoordUnit;
- param->m_pPoints[param->m_PointCount].m_PointY = to->y / param->m_CoordUnit;
- param->m_pPoints[param->m_PointCount].m_Flag = FXPT_MOVETO;
- param->m_CurX = to->x;
- param->m_CurY = to->y;
- if (param->m_PointCount) {
- param->m_pPoints[param->m_PointCount - 1].m_Flag |= FXPT_CLOSEFIGURE;
- }
- }
- param->m_PointCount ++;
- return 0;
- }
+static int _Outline_MoveTo(const FXFT_Vector* to, void* user) {
+ OUTLINE_PARAMS* param = (OUTLINE_PARAMS*)user;
+ if (!param->m_bCount) {
+ _Outline_CheckEmptyContour(param);
+ param->m_pPoints[param->m_PointCount].m_PointX = to->x / param->m_CoordUnit;
+ param->m_pPoints[param->m_PointCount].m_PointY = to->y / param->m_CoordUnit;
+ param->m_pPoints[param->m_PointCount].m_Flag = FXPT_MOVETO;
+ param->m_CurX = to->x;
+ param->m_CurY = to->y;
+ if (param->m_PointCount) {
+ param->m_pPoints[param->m_PointCount - 1].m_Flag |= FXPT_CLOSEFIGURE;
+ }
+ }
+ param->m_PointCount++;
+ return 0;
+}
};
extern "C" {
- static int _Outline_LineTo(const FXFT_Vector* to, void* user)
- {
- OUTLINE_PARAMS* param = (OUTLINE_PARAMS*)user;
- if (!param->m_bCount) {
- param->m_pPoints[param->m_PointCount].m_PointX = to->x / param->m_CoordUnit;
- param->m_pPoints[param->m_PointCount].m_PointY = to->y / param->m_CoordUnit;
- param->m_pPoints[param->m_PointCount].m_Flag = FXPT_LINETO;
- param->m_CurX = to->x;
- param->m_CurY = to->y;
- }
- param->m_PointCount ++;
- return 0;
- }
+static int _Outline_LineTo(const FXFT_Vector* to, void* user) {
+ OUTLINE_PARAMS* param = (OUTLINE_PARAMS*)user;
+ if (!param->m_bCount) {
+ param->m_pPoints[param->m_PointCount].m_PointX = to->x / param->m_CoordUnit;
+ param->m_pPoints[param->m_PointCount].m_PointY = to->y / param->m_CoordUnit;
+ param->m_pPoints[param->m_PointCount].m_Flag = FXPT_LINETO;
+ param->m_CurX = to->x;
+ param->m_CurY = to->y;
+ }
+ param->m_PointCount++;
+ return 0;
+}
};
extern "C" {
- static int _Outline_ConicTo(const FXFT_Vector* control, const FXFT_Vector* to, void* user)
- {
- OUTLINE_PARAMS* param = (OUTLINE_PARAMS*)user;
- if (!param->m_bCount) {
- param->m_pPoints[param->m_PointCount].m_PointX = (param->m_CurX + (control->x - param->m_CurX) * 2 / 3) / param->m_CoordUnit;
- param->m_pPoints[param->m_PointCount].m_PointY = (param->m_CurY + (control->y - param->m_CurY) * 2 / 3) / param->m_CoordUnit;
- param->m_pPoints[param->m_PointCount].m_Flag = FXPT_BEZIERTO;
- param->m_pPoints[param->m_PointCount + 1].m_PointX = (control->x + (to->x - control->x) / 3) / param->m_CoordUnit;
- param->m_pPoints[param->m_PointCount + 1].m_PointY = (control->y + (to->y - control->y) / 3) / param->m_CoordUnit;
- param->m_pPoints[param->m_PointCount + 1].m_Flag = FXPT_BEZIERTO;
- param->m_pPoints[param->m_PointCount + 2].m_PointX = to->x / param->m_CoordUnit;
- param->m_pPoints[param->m_PointCount + 2].m_PointY = to->y / param->m_CoordUnit;
- param->m_pPoints[param->m_PointCount + 2].m_Flag = FXPT_BEZIERTO;
- param->m_CurX = to->x;
- param->m_CurY = to->y;
- }
- param->m_PointCount += 3;
- return 0;
- }
+static int _Outline_ConicTo(const FXFT_Vector* control,
+ const FXFT_Vector* to,
+ void* user) {
+ OUTLINE_PARAMS* param = (OUTLINE_PARAMS*)user;
+ if (!param->m_bCount) {
+ param->m_pPoints[param->m_PointCount].m_PointX =
+ (param->m_CurX + (control->x - param->m_CurX) * 2 / 3) /
+ param->m_CoordUnit;
+ param->m_pPoints[param->m_PointCount].m_PointY =
+ (param->m_CurY + (control->y - param->m_CurY) * 2 / 3) /
+ param->m_CoordUnit;
+ param->m_pPoints[param->m_PointCount].m_Flag = FXPT_BEZIERTO;
+ param->m_pPoints[param->m_PointCount + 1].m_PointX =
+ (control->x + (to->x - control->x) / 3) / param->m_CoordUnit;
+ param->m_pPoints[param->m_PointCount + 1].m_PointY =
+ (control->y + (to->y - control->y) / 3) / param->m_CoordUnit;
+ param->m_pPoints[param->m_PointCount + 1].m_Flag = FXPT_BEZIERTO;
+ param->m_pPoints[param->m_PointCount + 2].m_PointX =
+ to->x / param->m_CoordUnit;
+ param->m_pPoints[param->m_PointCount + 2].m_PointY =
+ to->y / param->m_CoordUnit;
+ param->m_pPoints[param->m_PointCount + 2].m_Flag = FXPT_BEZIERTO;
+ param->m_CurX = to->x;
+ param->m_CurY = to->y;
+ }
+ param->m_PointCount += 3;
+ return 0;
+}
};
extern "C" {
- static int _Outline_CubicTo(const FXFT_Vector* control1, const FXFT_Vector* control2, const FXFT_Vector* to, void* user)
- {
- OUTLINE_PARAMS* param = (OUTLINE_PARAMS*)user;
- if (!param->m_bCount) {
- param->m_pPoints[param->m_PointCount].m_PointX = control1->x / param->m_CoordUnit;
- param->m_pPoints[param->m_PointCount].m_PointY = control1->y / param->m_CoordUnit;
- param->m_pPoints[param->m_PointCount].m_Flag = FXPT_BEZIERTO;
- param->m_pPoints[param->m_PointCount + 1].m_PointX = control2->x / param->m_CoordUnit;
- param->m_pPoints[param->m_PointCount + 1].m_PointY = control2->y / param->m_CoordUnit;
- param->m_pPoints[param->m_PointCount + 1].m_Flag = FXPT_BEZIERTO;
- param->m_pPoints[param->m_PointCount + 2].m_PointX = to->x / param->m_CoordUnit;
- param->m_pPoints[param->m_PointCount + 2].m_PointY = to->y / param->m_CoordUnit;
- param->m_pPoints[param->m_PointCount + 2].m_Flag = FXPT_BEZIERTO;
- param->m_CurX = to->x;
- param->m_CurY = to->y;
- }
- param->m_PointCount += 3;
- return 0;
- }
+static int _Outline_CubicTo(const FXFT_Vector* control1,
+ const FXFT_Vector* control2,
+ const FXFT_Vector* to,
+ void* user) {
+ OUTLINE_PARAMS* param = (OUTLINE_PARAMS*)user;
+ if (!param->m_bCount) {
+ param->m_pPoints[param->m_PointCount].m_PointX =
+ control1->x / param->m_CoordUnit;
+ param->m_pPoints[param->m_PointCount].m_PointY =
+ control1->y / param->m_CoordUnit;
+ param->m_pPoints[param->m_PointCount].m_Flag = FXPT_BEZIERTO;
+ param->m_pPoints[param->m_PointCount + 1].m_PointX =
+ control2->x / param->m_CoordUnit;
+ param->m_pPoints[param->m_PointCount + 1].m_PointY =
+ control2->y / param->m_CoordUnit;
+ param->m_pPoints[param->m_PointCount + 1].m_Flag = FXPT_BEZIERTO;
+ param->m_pPoints[param->m_PointCount + 2].m_PointX =
+ to->x / param->m_CoordUnit;
+ param->m_pPoints[param->m_PointCount + 2].m_PointY =
+ to->y / param->m_CoordUnit;
+ param->m_pPoints[param->m_PointCount + 2].m_Flag = FXPT_BEZIERTO;
+ param->m_CurX = to->x;
+ param->m_CurY = to->y;
+ }
+ param->m_PointCount += 3;
+ return 0;
+}
};
-CFX_PathData* CFX_Font::LoadGlyphPath(FX_DWORD glyph_index, int dest_width)
-{
- if (m_Face == NULL) {
- return NULL;
- }
- FXFT_Set_Pixel_Sizes(m_Face, 0, 64);
- FXFT_Matrix ft_matrix = {65536, 0, 0, 65536};
- if (m_pSubstFont) {
- if (m_pSubstFont->m_ItalicAngle) {
- int skew = m_pSubstFont->m_ItalicAngle;
- skew = skew <= -ANGLESKEW_ARRAY_SIZE ? -58 : -g_AngleSkew[-skew];
- if (m_bVertical) {
- ft_matrix.yx += ft_matrix.yy * skew / 100;
- } else {
- ft_matrix.xy += -ft_matrix.xx * skew / 100;
- }
- }
- if (m_pSubstFont->m_SubstFlags & FXFONT_SUBST_MM) {
- AdjustMMParams(glyph_index, dest_width, m_pSubstFont->m_Weight);
- }
- }
- ScopedFontTransform scoped_transform(m_Face, &ft_matrix);
- int load_flags = FXFT_LOAD_NO_BITMAP;
- if (!(m_Face->face_flags & FT_FACE_FLAG_SFNT) || !FT_IS_TRICKY(m_Face)) {
- load_flags |= FT_LOAD_NO_HINTING;
- }
- int error = FXFT_Load_Glyph(m_Face, glyph_index, load_flags);
- if (error) {
- return NULL;
- }
- if (m_pSubstFont && !(m_pSubstFont->m_SubstFlags & FXFONT_SUBST_MM) && m_pSubstFont->m_Weight > 400) {
- int index = (m_pSubstFont->m_Weight - 400) / 10;
- if (index >= WEIGHTPOW_ARRAY_SIZE)
- index = WEIGHTPOW_ARRAY_SIZE - 1;
- int level = 0;
- if (m_pSubstFont->m_Charset == FXFONT_SHIFTJIS_CHARSET) {
- level = g_WeightPow_SHIFTJIS[index] * 2 * 65536 / 36655;
- } else {
- level = g_WeightPow[index] * 2;
- }
- FXFT_Outline_Embolden(FXFT_Get_Glyph_Outline(m_Face), level);
- }
- FXFT_Outline_Funcs funcs;
- funcs.move_to = _Outline_MoveTo;
- funcs.line_to = _Outline_LineTo;
- funcs.conic_to = _Outline_ConicTo;
- funcs.cubic_to = _Outline_CubicTo;
- funcs.shift = 0;
- funcs.delta = 0;
- OUTLINE_PARAMS params;
- params.m_bCount = TRUE;
- params.m_PointCount = 0;
- FXFT_Outline_Decompose(FXFT_Get_Glyph_Outline(m_Face), &funcs, &params);
- if (params.m_PointCount == 0) {
- return NULL;
- }
- CFX_PathData* pPath = new CFX_PathData;
- pPath->SetPointCount(params.m_PointCount);
- params.m_bCount = FALSE;
- params.m_PointCount = 0;
- params.m_pPoints = pPath->GetPoints();
- params.m_CurX = params.m_CurY = 0;
- params.m_CoordUnit = 64 * 64.0;
- FXFT_Outline_Decompose(FXFT_Get_Glyph_Outline(m_Face), &funcs, &params);
- _Outline_CheckEmptyContour(&params);
- pPath->TrimPoints(params.m_PointCount);
- if (params.m_PointCount) {
- pPath->GetPoints()[params.m_PointCount - 1].m_Flag |= FXPT_CLOSEFIGURE;
- }
- return pPath;
+CFX_PathData* CFX_Font::LoadGlyphPath(FX_DWORD glyph_index, int dest_width) {
+ if (m_Face == NULL) {
+ return NULL;
+ }
+ FXFT_Set_Pixel_Sizes(m_Face, 0, 64);
+ FXFT_Matrix ft_matrix = {65536, 0, 0, 65536};
+ if (m_pSubstFont) {
+ if (m_pSubstFont->m_ItalicAngle) {
+ int skew = m_pSubstFont->m_ItalicAngle;
+ skew = skew <= -ANGLESKEW_ARRAY_SIZE ? -58 : -g_AngleSkew[-skew];
+ if (m_bVertical) {
+ ft_matrix.yx += ft_matrix.yy * skew / 100;
+ } else {
+ ft_matrix.xy += -ft_matrix.xx * skew / 100;
+ }
+ }
+ if (m_pSubstFont->m_SubstFlags & FXFONT_SUBST_MM) {
+ AdjustMMParams(glyph_index, dest_width, m_pSubstFont->m_Weight);
+ }
+ }
+ ScopedFontTransform scoped_transform(m_Face, &ft_matrix);
+ int load_flags = FXFT_LOAD_NO_BITMAP;
+ if (!(m_Face->face_flags & FT_FACE_FLAG_SFNT) || !FT_IS_TRICKY(m_Face)) {
+ load_flags |= FT_LOAD_NO_HINTING;
+ }
+ int error = FXFT_Load_Glyph(m_Face, glyph_index, load_flags);
+ if (error) {
+ return NULL;
+ }
+ if (m_pSubstFont && !(m_pSubstFont->m_SubstFlags & FXFONT_SUBST_MM) &&
+ m_pSubstFont->m_Weight > 400) {
+ int index = (m_pSubstFont->m_Weight - 400) / 10;
+ if (index >= WEIGHTPOW_ARRAY_SIZE)
+ index = WEIGHTPOW_ARRAY_SIZE - 1;
+ int level = 0;
+ if (m_pSubstFont->m_Charset == FXFONT_SHIFTJIS_CHARSET) {
+ level = g_WeightPow_SHIFTJIS[index] * 2 * 65536 / 36655;
+ } else {
+ level = g_WeightPow[index] * 2;
+ }
+ FXFT_Outline_Embolden(FXFT_Get_Glyph_Outline(m_Face), level);
+ }
+ FXFT_Outline_Funcs funcs;
+ funcs.move_to = _Outline_MoveTo;
+ funcs.line_to = _Outline_LineTo;
+ funcs.conic_to = _Outline_ConicTo;
+ funcs.cubic_to = _Outline_CubicTo;
+ funcs.shift = 0;
+ funcs.delta = 0;
+ OUTLINE_PARAMS params;
+ params.m_bCount = TRUE;
+ params.m_PointCount = 0;
+ FXFT_Outline_Decompose(FXFT_Get_Glyph_Outline(m_Face), &funcs, &params);
+ if (params.m_PointCount == 0) {
+ return NULL;
+ }
+ CFX_PathData* pPath = new CFX_PathData;
+ pPath->SetPointCount(params.m_PointCount);
+ params.m_bCount = FALSE;
+ params.m_PointCount = 0;
+ params.m_pPoints = pPath->GetPoints();
+ params.m_CurX = params.m_CurY = 0;
+ params.m_CoordUnit = 64 * 64.0;
+ FXFT_Outline_Decompose(FXFT_Get_Glyph_Outline(m_Face), &funcs, &params);
+ _Outline_CheckEmptyContour(&params);
+ pPath->TrimPoints(params.m_PointCount);
+ if (params.m_PointCount) {
+ pPath->GetPoints()[params.m_PointCount - 1].m_Flag |= FXPT_CLOSEFIGURE;
+ }
+ return pPath;
}
-void _CFX_UniqueKeyGen::Generate(int count, ...)
-{
- va_list argList;
- va_start(argList, count);
- for (int i = 0; i < count; i ++) {
- int p = va_arg(argList, int);
- ((FX_DWORD*)m_Key)[i] = p;
- }
- va_end(argList);
- m_KeyLen = count * sizeof(FX_DWORD);
+void _CFX_UniqueKeyGen::Generate(int count, ...) {
+ va_list argList;
+ va_start(argList, count);
+ for (int i = 0; i < count; i++) {
+ int p = va_arg(argList, int);
+ ((FX_DWORD*)m_Key)[i] = p;
+ }
+ va_end(argList);
+ m_KeyLen = count * sizeof(FX_DWORD);
}
diff --git a/core/src/fxge/ge/text_int.h b/core/src/fxge/ge/text_int.h
index 12fac6a60a..a05907162c 100644
--- a/core/src/fxge/ge/text_int.h
+++ b/core/src/fxge/ge/text_int.h
@@ -8,98 +8,86 @@
#define CORE_SRC_FXGE_GE_TEXT_INT_H_
struct _CFX_UniqueKeyGen {
- void Generate(int count, ...);
- FX_CHAR m_Key[128];
- int m_KeyLen;
+ void Generate(int count, ...);
+ FX_CHAR m_Key[128];
+ int m_KeyLen;
};
-class CFX_SizeGlyphCache
-{
-public:
- CFX_SizeGlyphCache()
- {
- m_GlyphMap.InitHashTable(253);
- }
- ~CFX_SizeGlyphCache();
- CFX_MapPtrToPtr m_GlyphMap;
+class CFX_SizeGlyphCache {
+ public:
+ CFX_SizeGlyphCache() { m_GlyphMap.InitHashTable(253); }
+ ~CFX_SizeGlyphCache();
+ CFX_MapPtrToPtr m_GlyphMap;
};
-class CTTFontDesc
-{
-public:
- CTTFontDesc()
- {
- m_Type = 0;
- m_pFontData = NULL;
- m_RefCount = 0;
- }
- ~CTTFontDesc();
- FX_BOOL ReleaseFace(FXFT_Face face);
- int m_Type;
- union {
- struct {
- FX_BOOL m_bItalic;
- FX_BOOL m_bBold;
- FXFT_Face m_pFace;
- } m_SingleFace;
- struct {
- FXFT_Face m_pFaces[16];
- } m_TTCFace;
- };
- uint8_t* m_pFontData;
- int m_RefCount;
+class CTTFontDesc {
+ public:
+ CTTFontDesc() {
+ m_Type = 0;
+ m_pFontData = NULL;
+ m_RefCount = 0;
+ }
+ ~CTTFontDesc();
+ FX_BOOL ReleaseFace(FXFT_Face face);
+ int m_Type;
+ union {
+ struct {
+ FX_BOOL m_bItalic;
+ FX_BOOL m_bBold;
+ FXFT_Face m_pFace;
+ } m_SingleFace;
+ struct {
+ FXFT_Face m_pFaces[16];
+ } m_TTCFace;
+ };
+ uint8_t* m_pFontData;
+ int m_RefCount;
};
-class CFX_UnicodeEncoding : public IFX_FontEncoding
-{
-public:
- CFX_UnicodeEncoding(CFX_Font* pFont);
- virtual FX_DWORD GlyphFromCharCodeEx(FX_DWORD charcode, int encoding = ENCODING_UNICODE);
-private:
- CFX_Font* m_pFont;
- virtual FX_DWORD GlyphFromCharCode(FX_DWORD charcode);
- virtual CFX_WideString UnicodeFromCharCode(FX_DWORD charcode) const
- {
- return CFX_WideString((FX_WCHAR)charcode);
- }
- virtual FX_DWORD CharCodeFromUnicode(FX_WCHAR Unicode) const
- {
- return Unicode;
- }
- virtual FX_BOOL IsUnicodeCompatible() const
- {
- return TRUE;
- }
+class CFX_UnicodeEncoding : public IFX_FontEncoding {
+ public:
+ CFX_UnicodeEncoding(CFX_Font* pFont);
+ virtual FX_DWORD GlyphFromCharCodeEx(FX_DWORD charcode,
+ int encoding = ENCODING_UNICODE);
+
+ private:
+ CFX_Font* m_pFont;
+ virtual FX_DWORD GlyphFromCharCode(FX_DWORD charcode);
+ virtual CFX_WideString UnicodeFromCharCode(FX_DWORD charcode) const {
+ return CFX_WideString((FX_WCHAR)charcode);
+ }
+ virtual FX_DWORD CharCodeFromUnicode(FX_WCHAR Unicode) const {
+ return Unicode;
+ }
+ virtual FX_BOOL IsUnicodeCompatible() const { return TRUE; }
};
-#define CHARSET_FLAG_ANSI 1
-#define CHARSET_FLAG_SYMBOL 2
-#define CHARSET_FLAG_SHIFTJIS 4
-#define CHARSET_FLAG_BIG5 8
-#define CHARSET_FLAG_GB 16
-#define CHARSET_FLAG_KOREAN 32
-class CFontFaceInfo
-{
-public:
- CFX_ByteString m_FilePath;
- CFX_ByteString m_FaceName;
- FX_DWORD m_Styles;
- FX_DWORD m_Charsets;
- FX_DWORD m_FontOffset;
- FX_DWORD m_FileSize;
- CFX_ByteString m_FontTables;
+#define CHARSET_FLAG_ANSI 1
+#define CHARSET_FLAG_SYMBOL 2
+#define CHARSET_FLAG_SHIFTJIS 4
+#define CHARSET_FLAG_BIG5 8
+#define CHARSET_FLAG_GB 16
+#define CHARSET_FLAG_KOREAN 32
+class CFontFaceInfo {
+ public:
+ CFX_ByteString m_FilePath;
+ CFX_ByteString m_FaceName;
+ FX_DWORD m_Styles;
+ FX_DWORD m_Charsets;
+ FX_DWORD m_FontOffset;
+ FX_DWORD m_FileSize;
+ CFX_ByteString m_FontTables;
};
-class CFontFileFaceInfo
-{
-public:
- CFontFileFaceInfo();
- ~CFontFileFaceInfo();
- IFX_FileStream* m_pFile;
- FXFT_Face m_Face;
- CFX_ByteString m_FaceName;
- FX_DWORD m_Charsets;
- FX_DWORD m_FileSize;
- FX_DWORD m_FontOffset;
- int m_Weight;
- FX_BOOL m_bItalic;
- int m_PitchFamily;
- CFX_ByteString m_FontTables;
+class CFontFileFaceInfo {
+ public:
+ CFontFileFaceInfo();
+ ~CFontFileFaceInfo();
+ IFX_FileStream* m_pFile;
+ FXFT_Face m_Face;
+ CFX_ByteString m_FaceName;
+ FX_DWORD m_Charsets;
+ FX_DWORD m_FileSize;
+ FX_DWORD m_FontOffset;
+ int m_Weight;
+ FX_BOOL m_bItalic;
+ int m_PitchFamily;
+ CFX_ByteString m_FontTables;
};
#endif // CORE_SRC_FXGE_GE_TEXT_INT_H_
diff --git a/core/src/fxge/skia/fx_skia_blitter_new.cpp b/core/src/fxge/skia/fx_skia_blitter_new.cpp
index 3437eb497d..a3ed75b9cb 100644
--- a/core/src/fxge/skia/fx_skia_blitter_new.cpp
+++ b/core/src/fxge/skia/fx_skia_blitter_new.cpp
@@ -8,308 +8,385 @@
#include "../../../include/fxcodec/fx_codec.h"
#include "SkBlitter.h"
#include "fx_skia_blitter_new.h"
- // We use our own renderer here to make it simple
- void CFX_SkiaRenderer::blitAntiH(int x, int y, const SkAlpha antialias[], const int16_t runs[])
- {
- FXSYS_assert(m_Alpha);
- if (m_pOriDevice == NULL && composite_span == NULL) return;
- if (y < m_ClipBox.top || y >= m_ClipBox.bottom) return;
- while (1)
- {
- int width = runs[0];
- SkASSERT(width >= 0);
- if (width <= 0)
- return;
- unsigned aa = antialias[0];
- if (aa)
- (*composite_span)(m_pDestScan, m_pOriScan, 0, x, width, y, aa, m_ClipBox.top, m_ClipBox.left, m_ClipBox.right, m_pClipScan, m_pDestExtraAlphaScan);
- runs += width;
- antialias += width;
- x += width;
- }
- }
+// We use our own renderer here to make it simple
+void CFX_SkiaRenderer::blitAntiH(int x,
+ int y,
+ const SkAlpha antialias[],
+ const int16_t runs[]) {
+ FXSYS_assert(m_Alpha);
+ if (m_pOriDevice == NULL && composite_span == NULL)
+ return;
+ if (y < m_ClipBox.top || y >= m_ClipBox.bottom)
+ return;
+ while (1) {
+ int width = runs[0];
+ SkASSERT(width >= 0);
+ if (width <= 0)
+ return;
+ unsigned aa = antialias[0];
+ if (aa)
+ (*composite_span)(m_pDestScan, m_pOriScan, 0, x, width, y, aa,
+ m_ClipBox.top, m_ClipBox.left, m_ClipBox.right,
+ m_pClipScan, m_pDestExtraAlphaScan);
+ runs += width;
+ antialias += width;
+ x += width;
+ }
+}
- void CFX_SkiaRenderer::blitH(int x, int y, int width)
- {
- FXSYS_assert(m_Alpha && width);
- if (y < m_ClipBox.top || y >= m_ClipBox.bottom) return;
- (*composite_span)(m_pDestScan, m_pOriScan, 0, x, width, y, 255, m_ClipBox.top, m_ClipBox.left, m_ClipBox.right, m_pClipScan, m_pDestExtraAlphaScan);
- }
+void CFX_SkiaRenderer::blitH(int x, int y, int width) {
+ FXSYS_assert(m_Alpha && width);
+ if (y < m_ClipBox.top || y >= m_ClipBox.bottom)
+ return;
+ (*composite_span)(m_pDestScan, m_pOriScan, 0, x, width, y, 255, m_ClipBox.top,
+ m_ClipBox.left, m_ClipBox.right, m_pClipScan,
+ m_pDestExtraAlphaScan);
+}
- void CFX_SkiaRenderer::blitV(int x, int y, int height, SkAlpha alpha)
- {
- FXSYS_assert(m_Alpha && alpha);
- if (alpha == 255) {
- blitRect(x, y, 1, height);
- } else {
- int16_t runs[2];
- runs[0] = 1;
- runs[1] = 0;
- while (--height >= 0) {
- if (y >= m_ClipBox.bottom)
- return;
- blitAntiH(x, y ++, &alpha, runs);
- }
- }
- }
- void CFX_SkiaRenderer::blitRect(int x, int y, int width, int height)
- {
- FXSYS_assert(m_Alpha && width);
- while (--height >= 0){
- if (y >= m_ClipBox.bottom)
- return;
- blitH(x, y ++, width);
- }
+void CFX_SkiaRenderer::blitV(int x, int y, int height, SkAlpha alpha) {
+ FXSYS_assert(m_Alpha && alpha);
+ if (alpha == 255) {
+ blitRect(x, y, 1, height);
+ } else {
+ int16_t runs[2];
+ runs[0] = 1;
+ runs[1] = 0;
+ while (--height >= 0) {
+ if (y >= m_ClipBox.bottom)
+ return;
+ blitAntiH(x, y++, &alpha, runs);
}
+ }
+}
+void CFX_SkiaRenderer::blitRect(int x, int y, int width, int height) {
+ FXSYS_assert(m_Alpha && width);
+ while (--height >= 0) {
+ if (y >= m_ClipBox.bottom)
+ return;
+ blitH(x, y++, width);
+ }
+}
- void CFX_SkiaRenderer::blitAntiRect(int x, int y, int width, int height,
- SkAlpha leftAlpha, SkAlpha rightAlpha)
- {
- blitV(x++, y, height, leftAlpha);
- if (width > 0) {
- blitRect(x, y, width, height);
- x += width;
- }
- blitV(x, y, height, rightAlpha);
- }
- /*---------------------------------------------------------------------------------------------------*/
- void CFX_SkiaRenderer::CompositeSpan1bpp_0(uint8_t* dest_scan, uint8_t* ori_scan,int Bpp,
- int span_left, int span_len, int span_top, uint8_t cover_scan,
- int clip_top, int clip_left, int clip_right, uint8_t* clip_scan,
- uint8_t* dest_extra_alpha_scan)
- {
- ASSERT(!m_bRgbByteOrder);
- ASSERT(!m_pDevice->IsCmykImage());
- dest_scan = (uint8_t*)m_pDevice->GetScanline(span_top) + span_left/8;
- int col_start = span_left < clip_left ? clip_left - span_left : 0;
- int col_end = (span_left + span_len) < clip_right ? span_len : (clip_right - span_left);
- if (col_end < col_start) return; // do nothing.
- dest_scan += col_start/8;
+void CFX_SkiaRenderer::blitAntiRect(int x,
+ int y,
+ int width,
+ int height,
+ SkAlpha leftAlpha,
+ SkAlpha rightAlpha) {
+ blitV(x++, y, height, leftAlpha);
+ if (width > 0) {
+ blitRect(x, y, width, height);
+ x += width;
+ }
+ blitV(x, y, height, rightAlpha);
+}
+/*---------------------------------------------------------------------------------------------------*/
+void CFX_SkiaRenderer::CompositeSpan1bpp_0(uint8_t* dest_scan,
+ uint8_t* ori_scan,
+ int Bpp,
+ int span_left,
+ int span_len,
+ int span_top,
+ uint8_t cover_scan,
+ int clip_top,
+ int clip_left,
+ int clip_right,
+ uint8_t* clip_scan,
+ uint8_t* dest_extra_alpha_scan) {
+ ASSERT(!m_bRgbByteOrder);
+ ASSERT(!m_pDevice->IsCmykImage());
+ dest_scan = (uint8_t*)m_pDevice->GetScanline(span_top) + span_left / 8;
+ int col_start = span_left < clip_left ? clip_left - span_left : 0;
+ int col_end =
+ (span_left + span_len) < clip_right ? span_len : (clip_right - span_left);
+ if (col_end < col_start)
+ return; // do nothing.
+ dest_scan += col_start / 8;
- int index = 0;
- if (m_pDevice->GetPalette() == NULL)
- index = ((uint8_t)m_Color == 0xff) ? 1 : 0;
- else {
- for (int i = 0; i < 2; i ++)
- if (FXARGB_TODIB(m_pDevice->GetPalette()[i]) == m_Color)
- index = i;
- }
- uint8_t* dest_scan1 = dest_scan;
- int src_alpha = m_Alpha * cover_scan / 255;
- for (int col = col_start; col < col_end; col ++) {
- if (src_alpha) {
- if (!index)
- *dest_scan1 &= ~(1 << (7 - (col+span_left)%8));
- else
- *dest_scan1|= 1 << (7 - (col+span_left)%8);
- }
- dest_scan1 = dest_scan+(span_left%8+col-col_start+1)/8;
- }
+ int index = 0;
+ if (m_pDevice->GetPalette() == NULL)
+ index = ((uint8_t)m_Color == 0xff) ? 1 : 0;
+ else {
+ for (int i = 0; i < 2; i++)
+ if (FXARGB_TODIB(m_pDevice->GetPalette()[i]) == m_Color)
+ index = i;
+ }
+ uint8_t* dest_scan1 = dest_scan;
+ int src_alpha = m_Alpha * cover_scan / 255;
+ for (int col = col_start; col < col_end; col++) {
+ if (src_alpha) {
+ if (!index)
+ *dest_scan1 &= ~(1 << (7 - (col + span_left) % 8));
+ else
+ *dest_scan1 |= 1 << (7 - (col + span_left) % 8);
}
- void CFX_SkiaRenderer::CompositeSpan1bpp_4(uint8_t* dest_scan, uint8_t* ori_scan,int Bpp,
- int span_left, int span_len, int span_top, uint8_t cover_scan,
- int clip_top, int clip_left, int clip_right, uint8_t* clip_scan,
- uint8_t* dest_extra_alpha_scan)
- {
- ASSERT(!m_bRgbByteOrder);
- ASSERT(!m_pDevice->IsCmykImage());
- dest_scan = (uint8_t*)m_pDevice->GetScanline(span_top) + span_left/8;
- clip_scan = (uint8_t*)m_pClipMask->GetScanline(span_top-clip_top) - clip_left + span_left;
- int col_start = span_left < clip_left ? clip_left - span_left : 0;
- int col_end = (span_left + span_len) < clip_right ? span_len : (clip_right - span_left);
- if (col_end < col_start) return; // do nothing.
- dest_scan += col_start/8;
+ dest_scan1 = dest_scan + (span_left % 8 + col - col_start + 1) / 8;
+ }
+}
+void CFX_SkiaRenderer::CompositeSpan1bpp_4(uint8_t* dest_scan,
+ uint8_t* ori_scan,
+ int Bpp,
+ int span_left,
+ int span_len,
+ int span_top,
+ uint8_t cover_scan,
+ int clip_top,
+ int clip_left,
+ int clip_right,
+ uint8_t* clip_scan,
+ uint8_t* dest_extra_alpha_scan) {
+ ASSERT(!m_bRgbByteOrder);
+ ASSERT(!m_pDevice->IsCmykImage());
+ dest_scan = (uint8_t*)m_pDevice->GetScanline(span_top) + span_left / 8;
+ clip_scan = (uint8_t*)m_pClipMask->GetScanline(span_top - clip_top) -
+ clip_left + span_left;
+ int col_start = span_left < clip_left ? clip_left - span_left : 0;
+ int col_end =
+ (span_left + span_len) < clip_right ? span_len : (clip_right - span_left);
+ if (col_end < col_start)
+ return; // do nothing.
+ dest_scan += col_start / 8;
- int index = 0;
- if (m_pDevice->GetPalette() == NULL)
- index = ((uint8_t)m_Color == 0xff) ? 1 : 0;
- else {
- for (int i = 0; i < 2; i ++)
- if (FXARGB_TODIB(m_pDevice->GetPalette()[i]) == m_Color)
- index = i;
- }
- uint8_t* dest_scan1 = dest_scan;
- int src_alpha = m_Alpha * cover_scan / 255;
- for (int col = col_start; col < col_end; col ++) {
- int src_alpha1 = src_alpha * clip_scan[col] / 255;
- if (src_alpha1) {
- if (!index)
- *dest_scan1 &= ~(1 << (7 - (col+span_left)%8));
- else
- *dest_scan1|= 1 << (7 - (col+span_left)%8);
- }
- dest_scan1 = dest_scan+(span_left%8+col-col_start+1)/8;
- }
- }
- /*-----------------------------------------------------------------------------------------------------*/
- void CFX_SkiaRenderer::CompositeSpanGray_2(uint8_t* dest_scan, uint8_t* ori_scan,int Bpp,
- int span_left, int span_len, int span_top, uint8_t cover_scan,
- int clip_top, int clip_left, int clip_right, uint8_t* clip_scan,
- uint8_t* dest_extra_alpha_scan)
- {
- ASSERT(!m_pDevice->IsCmykImage());
- ASSERT(!m_bRgbByteOrder);
- dest_scan = (uint8_t*)m_pDevice->GetScanline(span_top) + span_left;
- int col_start = span_left < clip_left ? clip_left - span_left : 0;
- int col_end = (span_left + span_len) < clip_right ? span_len : (clip_right - span_left);
- if (col_end < col_start) return; // do nothing.
- dest_scan += col_start;
- if (cover_scan == 255 && m_Alpha == 255) {
- FXSYS_memset(dest_scan, FXARGB_MAKE(m_Gray, m_Gray, m_Gray, m_Gray), col_end - col_start);
- return;
- }
- int src_alpha = m_Alpha * cover_scan / 255;
- for (int col = col_start; col < col_end; col ++) {
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Gray, src_alpha);
- dest_scan++;
- }
+ int index = 0;
+ if (m_pDevice->GetPalette() == NULL)
+ index = ((uint8_t)m_Color == 0xff) ? 1 : 0;
+ else {
+ for (int i = 0; i < 2; i++)
+ if (FXARGB_TODIB(m_pDevice->GetPalette()[i]) == m_Color)
+ index = i;
+ }
+ uint8_t* dest_scan1 = dest_scan;
+ int src_alpha = m_Alpha * cover_scan / 255;
+ for (int col = col_start; col < col_end; col++) {
+ int src_alpha1 = src_alpha * clip_scan[col] / 255;
+ if (src_alpha1) {
+ if (!index)
+ *dest_scan1 &= ~(1 << (7 - (col + span_left) % 8));
+ else
+ *dest_scan1 |= 1 << (7 - (col + span_left) % 8);
}
- void CFX_SkiaRenderer::CompositeSpanGray_3(uint8_t* dest_scan, uint8_t* ori_scan,int Bpp,
- int span_left, int span_len, int span_top, uint8_t cover_scan,
- int clip_top, int clip_left, int clip_right, uint8_t* clip_scan,
- uint8_t* dest_extra_alpha_scan)
- {
- ASSERT(!m_pDevice->IsCmykImage());
- ASSERT(!m_bRgbByteOrder);
- dest_scan = (uint8_t*)m_pDevice->GetScanline(span_top) + span_left;
- ori_scan = (uint8_t*)m_pOriDevice->GetScanline(span_top) + span_left;
- int col_start = span_left < clip_left ? clip_left - span_left : 0;
- int col_end = (span_left + span_len) < clip_right ? span_len : (clip_right - span_left);
- if (col_end < col_start) return; // do nothing.
- dest_scan += col_start;
- ori_scan += col_start;
- if (m_Alpha == 255 && cover_scan == 255) {
- FXSYS_memset(dest_scan, FXARGB_MAKE(m_Gray, m_Gray, m_Gray, m_Gray), col_end - col_start);
- } else {
- int src_alpha = m_Alpha;
+ dest_scan1 = dest_scan + (span_left % 8 + col - col_start + 1) / 8;
+ }
+}
+/*-----------------------------------------------------------------------------------------------------*/
+void CFX_SkiaRenderer::CompositeSpanGray_2(uint8_t* dest_scan,
+ uint8_t* ori_scan,
+ int Bpp,
+ int span_left,
+ int span_len,
+ int span_top,
+ uint8_t cover_scan,
+ int clip_top,
+ int clip_left,
+ int clip_right,
+ uint8_t* clip_scan,
+ uint8_t* dest_extra_alpha_scan) {
+ ASSERT(!m_pDevice->IsCmykImage());
+ ASSERT(!m_bRgbByteOrder);
+ dest_scan = (uint8_t*)m_pDevice->GetScanline(span_top) + span_left;
+ int col_start = span_left < clip_left ? clip_left - span_left : 0;
+ int col_end =
+ (span_left + span_len) < clip_right ? span_len : (clip_right - span_left);
+ if (col_end < col_start)
+ return; // do nothing.
+ dest_scan += col_start;
+ if (cover_scan == 255 && m_Alpha == 255) {
+ FXSYS_memset(dest_scan, FXARGB_MAKE(m_Gray, m_Gray, m_Gray, m_Gray),
+ col_end - col_start);
+ return;
+ }
+ int src_alpha = m_Alpha * cover_scan / 255;
+ for (int col = col_start; col < col_end; col++) {
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Gray, src_alpha);
+ dest_scan++;
+ }
+}
+void CFX_SkiaRenderer::CompositeSpanGray_3(uint8_t* dest_scan,
+ uint8_t* ori_scan,
+ int Bpp,
+ int span_left,
+ int span_len,
+ int span_top,
+ uint8_t cover_scan,
+ int clip_top,
+ int clip_left,
+ int clip_right,
+ uint8_t* clip_scan,
+ uint8_t* dest_extra_alpha_scan) {
+ ASSERT(!m_pDevice->IsCmykImage());
+ ASSERT(!m_bRgbByteOrder);
+ dest_scan = (uint8_t*)m_pDevice->GetScanline(span_top) + span_left;
+ ori_scan = (uint8_t*)m_pOriDevice->GetScanline(span_top) + span_left;
+ int col_start = span_left < clip_left ? clip_left - span_left : 0;
+ int col_end =
+ (span_left + span_len) < clip_right ? span_len : (clip_right - span_left);
+ if (col_end < col_start)
+ return; // do nothing.
+ dest_scan += col_start;
+ ori_scan += col_start;
+ if (m_Alpha == 255 && cover_scan == 255) {
+ FXSYS_memset(dest_scan, FXARGB_MAKE(m_Gray, m_Gray, m_Gray, m_Gray),
+ col_end - col_start);
+ } else {
+ int src_alpha = m_Alpha;
#if 1
- for (int col = col_start; col < col_end; col ++) {
- int gray = FXDIB_ALPHA_MERGE(*ori_scan++, m_Gray, src_alpha);
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, cover_scan);
- dest_scan ++;
- }
+ for (int col = col_start; col < col_end; col++) {
+ int gray = FXDIB_ALPHA_MERGE(*ori_scan++, m_Gray, src_alpha);
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, cover_scan);
+ dest_scan++;
+ }
#else
- if (m_bFullCover) {
- if (src_alpha == 255) {
- FXSYS_memset(dest_scan, FXARGB_MAKE(m_Gray, m_Gray, m_Gray, m_Gray), col_end - col_start);
- return;
- }
- for (int col = col_start; col < col_end; col ++)
- *dest_scan = FXDIB_ALPHA_MERGE(*ori_scan++, m_Gray, src_alpha);
- } else {
- for (int col = col_start; col < col_end; col ++) {
- int gray = FXDIB_ALPHA_MERGE(*ori_scan++, m_Gray, src_alpha);
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, cover_scan);
- dest_scan++;
- }
- }
-#endif
- }
+ if (m_bFullCover) {
+ if (src_alpha == 255) {
+ FXSYS_memset(dest_scan, FXARGB_MAKE(m_Gray, m_Gray, m_Gray, m_Gray),
+ col_end - col_start);
+ return;
+ }
+ for (int col = col_start; col < col_end; col++)
+ *dest_scan = FXDIB_ALPHA_MERGE(*ori_scan++, m_Gray, src_alpha);
+ } else {
+ for (int col = col_start; col < col_end; col++) {
+ int gray = FXDIB_ALPHA_MERGE(*ori_scan++, m_Gray, src_alpha);
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, cover_scan);
+ dest_scan++;
+ }
}
+#endif
+ }
+}
- void CFX_SkiaRenderer::CompositeSpanGray_6(uint8_t* dest_scan, uint8_t* ori_scan,int Bpp,
- int span_left, int span_len, int span_top, uint8_t cover_scan,
- int clip_top, int clip_left, int clip_right, uint8_t* clip_scan,
- uint8_t* dest_extra_alpha_scan)
- {
- ASSERT(!m_bRgbByteOrder);
- dest_scan = (uint8_t*)m_pDevice->GetScanline(span_top) + span_left;
- clip_scan = (uint8_t*)m_pClipMask->GetScanline(span_top-clip_top) - clip_left + span_left;
- int col_start = span_left < clip_left ? clip_left - span_left : 0;
- int col_end = (span_left + span_len) < clip_right ? span_len : (clip_right - span_left);
- if (col_end < col_start) return; // do nothing.
- dest_scan += col_start;
- int src_alpha = m_Alpha * cover_scan / 255;
- for (int col = col_start; col < col_end; col ++) {
- int src_alpha1 = src_alpha * clip_scan[col] / 255;
- if (!src_alpha1) {
- dest_scan ++;
- continue;
- }
- if (src_alpha1 == 255)
- *dest_scan++ = m_Gray;
- else {
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Gray, src_alpha1);
- dest_scan ++;
- }
- }
+void CFX_SkiaRenderer::CompositeSpanGray_6(uint8_t* dest_scan,
+ uint8_t* ori_scan,
+ int Bpp,
+ int span_left,
+ int span_len,
+ int span_top,
+ uint8_t cover_scan,
+ int clip_top,
+ int clip_left,
+ int clip_right,
+ uint8_t* clip_scan,
+ uint8_t* dest_extra_alpha_scan) {
+ ASSERT(!m_bRgbByteOrder);
+ dest_scan = (uint8_t*)m_pDevice->GetScanline(span_top) + span_left;
+ clip_scan = (uint8_t*)m_pClipMask->GetScanline(span_top - clip_top) -
+ clip_left + span_left;
+ int col_start = span_left < clip_left ? clip_left - span_left : 0;
+ int col_end =
+ (span_left + span_len) < clip_right ? span_len : (clip_right - span_left);
+ if (col_end < col_start)
+ return; // do nothing.
+ dest_scan += col_start;
+ int src_alpha = m_Alpha * cover_scan / 255;
+ for (int col = col_start; col < col_end; col++) {
+ int src_alpha1 = src_alpha * clip_scan[col] / 255;
+ if (!src_alpha1) {
+ dest_scan++;
+ continue;
+ }
+ if (src_alpha1 == 255)
+ *dest_scan++ = m_Gray;
+ else {
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Gray, src_alpha1);
+ dest_scan++;
}
+ }
+}
- void CFX_SkiaRenderer::CompositeSpanGray_7(uint8_t* dest_scan, uint8_t* ori_scan,int Bpp,
- int span_left, int span_len, int span_top, uint8_t cover_scan,
- int clip_top, int clip_left, int clip_right, uint8_t* clip_scan,
- uint8_t* dest_extra_alpha_scan)
- {
- ASSERT(!m_pDevice->IsCmykImage());
- dest_scan = (uint8_t*)m_pDevice->GetScanline(span_top) + span_left;
- ori_scan = (uint8_t*)m_pOriDevice->GetScanline(span_top) + span_left;
- clip_scan = (uint8_t*)m_pClipMask->GetScanline(span_top-clip_top) - clip_left + span_left;
- int col_start = span_left < clip_left ? clip_left - span_left : 0;
- int col_end = (span_left + span_len) < clip_right ? span_len : (clip_right - span_left);
- if (col_end < col_start) return; // do nothing.
- dest_scan += col_start;
- ori_scan += col_start;
+void CFX_SkiaRenderer::CompositeSpanGray_7(uint8_t* dest_scan,
+ uint8_t* ori_scan,
+ int Bpp,
+ int span_left,
+ int span_len,
+ int span_top,
+ uint8_t cover_scan,
+ int clip_top,
+ int clip_left,
+ int clip_right,
+ uint8_t* clip_scan,
+ uint8_t* dest_extra_alpha_scan) {
+ ASSERT(!m_pDevice->IsCmykImage());
+ dest_scan = (uint8_t*)m_pDevice->GetScanline(span_top) + span_left;
+ ori_scan = (uint8_t*)m_pOriDevice->GetScanline(span_top) + span_left;
+ clip_scan = (uint8_t*)m_pClipMask->GetScanline(span_top - clip_top) -
+ clip_left + span_left;
+ int col_start = span_left < clip_left ? clip_left - span_left : 0;
+ int col_end =
+ (span_left + span_len) < clip_right ? span_len : (clip_right - span_left);
+ if (col_end < col_start)
+ return; // do nothing.
+ dest_scan += col_start;
+ ori_scan += col_start;
#if 1
- for (int col = col_start; col < col_end; col ++) {
- int src_alpha = m_Alpha * clip_scan[col] / 255;
- if (src_alpha == 255 && cover_scan == 255) {
- *dest_scan++ = m_Gray;
- ori_scan++;
- continue;
- }
- int gray = FXDIB_ALPHA_MERGE(*ori_scan++, m_Gray, src_alpha);
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, cover_scan);
- dest_scan++;
- }
+ for (int col = col_start; col < col_end; col++) {
+ int src_alpha = m_Alpha * clip_scan[col] / 255;
+ if (src_alpha == 255 && cover_scan == 255) {
+ *dest_scan++ = m_Gray;
+ ori_scan++;
+ continue;
+ }
+ int gray = FXDIB_ALPHA_MERGE(*ori_scan++, m_Gray, src_alpha);
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, cover_scan);
+ dest_scan++;
+ }
#else
- if (m_bFullCover) {
- for (int col = col_start; col < col_end; col ++) {
- int src_alpha = m_Alpha * clip_scan[col] / 255;
- if (!src_alpha) {
- dest_scan++;
- ori_scan++;
- continue;
- }
- if (src_alpha == 255){
- *dest_scan++ = m_Gray;
- ori_scan++;
- continue;
- }
- *dest_scan++ = FXDIB_ALPHA_MERGE(*ori_scan++, m_Gray, src_alpha);
- }
- } else {
- for (int col = col_start; col < col_end; col ++) {
- int src_alpha = m_Alpha * clip_scan[col] / 255;
- if (src_alpha == 255 && cover_scan == 255) {
- *dest_scan++ = m_Gray;
- ori_scan++;
- continue;
- }
- int gray = FXDIB_ALPHA_MERGE(*ori_scan++, m_Gray, src_alpha);
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, cover_scan);
- dest_scan++;
- }
- }
-#endif
+ if (m_bFullCover) {
+ for (int col = col_start; col < col_end; col++) {
+ int src_alpha = m_Alpha * clip_scan[col] / 255;
+ if (!src_alpha) {
+ dest_scan++;
+ ori_scan++;
+ continue;
+ }
+ if (src_alpha == 255) {
+ *dest_scan++ = m_Gray;
+ ori_scan++;
+ continue;
+ }
+ *dest_scan++ = FXDIB_ALPHA_MERGE(*ori_scan++, m_Gray, src_alpha);
}
- /*--------------------------------------------------------------------------------------------------*/
+ } else {
+ for (int col = col_start; col < col_end; col++) {
+ int src_alpha = m_Alpha * clip_scan[col] / 255;
+ if (src_alpha == 255 && cover_scan == 255) {
+ *dest_scan++ = m_Gray;
+ ori_scan++;
+ continue;
+ }
+ int gray = FXDIB_ALPHA_MERGE(*ori_scan++, m_Gray, src_alpha);
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, cover_scan);
+ dest_scan++;
+ }
+ }
+#endif
+}
+/*--------------------------------------------------------------------------------------------------*/
- void CFX_SkiaRenderer::CompositeSpanARGB_2(uint8_t* dest_scan, uint8_t* ori_scan,int Bpp,
- int span_left, int span_len, int span_top, uint8_t cover_scan,
- int clip_top, int clip_left, int clip_right, uint8_t* clip_scan,
- uint8_t* dest_extra_alpha_scan)
- {
- dest_scan = (uint8_t*)m_pDevice->GetScanline(span_top) + (span_left<<2);
- int col_start = span_left < clip_left ? clip_left - span_left : 0;
- int col_end = (span_left + span_len) < clip_right ? span_len : (clip_right - span_left);
- if (col_end < col_start) return; // do nothing.
- dest_scan += col_start<<2;
- if (m_Alpha == 255 && cover_scan == 255) {
- FXSYS_memset(dest_scan, m_Color, (col_end - col_start)<<2);
- return;
- }
- int src_alpha;
+void CFX_SkiaRenderer::CompositeSpanARGB_2(uint8_t* dest_scan,
+ uint8_t* ori_scan,
+ int Bpp,
+ int span_left,
+ int span_len,
+ int span_top,
+ uint8_t cover_scan,
+ int clip_top,
+ int clip_left,
+ int clip_right,
+ uint8_t* clip_scan,
+ uint8_t* dest_extra_alpha_scan) {
+ dest_scan = (uint8_t*)m_pDevice->GetScanline(span_top) + (span_left << 2);
+ int col_start = span_left < clip_left ? clip_left - span_left : 0;
+ int col_end =
+ (span_left + span_len) < clip_right ? span_len : (clip_right - span_left);
+ if (col_end < col_start)
+ return; // do nothing.
+ dest_scan += col_start << 2;
+ if (m_Alpha == 255 && cover_scan == 255) {
+ FXSYS_memset(dest_scan, m_Color, (col_end - col_start) << 2);
+ return;
+ }
+ int src_alpha;
#if 0
if (m_bFullCover) {
if (m_Alpha == 255) {
@@ -319,293 +396,341 @@
}
else
#endif
- src_alpha = m_Alpha * cover_scan / 255;
- for (int col = col_start; col < col_end; col ++) {
- // Dest format: Argb
- // calculate destination alpha (it's union of source and dest alpha)
- if (dest_scan[3] == 0) {
- dest_scan[3] = src_alpha;
- *dest_scan++ = m_Blue;
- *dest_scan++ = m_Green;
- *dest_scan = m_Red;
- dest_scan += 2;
- continue;
- }
- uint8_t dest_alpha = dest_scan[3] + src_alpha - dest_scan[3] * src_alpha / 255;
- dest_scan[3] = dest_alpha;
- int alpha_ratio = src_alpha*255/dest_alpha;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Blue, alpha_ratio);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Green, alpha_ratio);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Red, alpha_ratio);
- dest_scan += 2;
- }
+ src_alpha = m_Alpha * cover_scan / 255;
+ for (int col = col_start; col < col_end; col++) {
+ // Dest format: Argb
+ // calculate destination alpha (it's union of source and dest alpha)
+ if (dest_scan[3] == 0) {
+ dest_scan[3] = src_alpha;
+ *dest_scan++ = m_Blue;
+ *dest_scan++ = m_Green;
+ *dest_scan = m_Red;
+ dest_scan += 2;
+ continue;
}
+ uint8_t dest_alpha =
+ dest_scan[3] + src_alpha - dest_scan[3] * src_alpha / 255;
+ dest_scan[3] = dest_alpha;
+ int alpha_ratio = src_alpha * 255 / dest_alpha;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Blue, alpha_ratio);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Green, alpha_ratio);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Red, alpha_ratio);
+ dest_scan += 2;
+ }
+}
- void CFX_SkiaRenderer::CompositeSpanARGB_3(uint8_t* dest_scan, uint8_t* ori_scan,int Bpp,
- int span_left, int span_len, int span_top, uint8_t cover_scan,
- int clip_top, int clip_left, int clip_right, uint8_t* clip_scan,
- uint8_t* dest_extra_alpha_scan)
- {
- ASSERT(!m_pDevice->IsCmykImage());
- dest_scan = (uint8_t*)m_pDevice->GetScanline(span_top) + (span_left<<2);
- //ori_scan = (uint8_t*)m_pOriDevice->GetScanline(span_top) + (span_left<<2);
- int col_start = span_left < clip_left ? clip_left - span_left : 0;
- int col_end = (span_left + span_len) < clip_right ? span_len : (clip_right - span_left);
- if (col_end < col_start) return; // do nothing.
- dest_scan += col_start << 2;
- //ori_scan += col_start << 2;
+void CFX_SkiaRenderer::CompositeSpanARGB_3(uint8_t* dest_scan,
+ uint8_t* ori_scan,
+ int Bpp,
+ int span_left,
+ int span_len,
+ int span_top,
+ uint8_t cover_scan,
+ int clip_top,
+ int clip_left,
+ int clip_right,
+ uint8_t* clip_scan,
+ uint8_t* dest_extra_alpha_scan) {
+ ASSERT(!m_pDevice->IsCmykImage());
+ dest_scan = (uint8_t*)m_pDevice->GetScanline(span_top) + (span_left << 2);
+ // ori_scan = (uint8_t*)m_pOriDevice->GetScanline(span_top) + (span_left<<2);
+ int col_start = span_left < clip_left ? clip_left - span_left : 0;
+ int col_end =
+ (span_left + span_len) < clip_right ? span_len : (clip_right - span_left);
+ if (col_end < col_start)
+ return; // do nothing.
+ dest_scan += col_start << 2;
+ // ori_scan += col_start << 2;
- if (m_Alpha == 255 && cover_scan == 255){
- FXSYS_memset(dest_scan, m_Color, (col_end - col_start)<<2);
- return;
- }
- if (cover_scan == 255) {
- int dst_color = (0x00ffffff&m_Color)|(m_Alpha<<24);
- FXSYS_memset(dest_scan, dst_color, (col_end - col_start)<<2);
- return;
- }
- // Do not need origin bitmap, because of merge in pure transparent background
- int src_alpha_covered = m_Alpha * cover_scan / 255;
- for (int col = col_start; col < col_end; col ++)
- {
- // shortcut
- if (dest_scan[3] == 0) {
- dest_scan[3] = src_alpha_covered;
- *dest_scan ++ = m_Blue;
- *dest_scan ++ = m_Green;
- *dest_scan = m_Red;
- dest_scan += 2;
- continue;
- }
- // We should do alpha transition and color transition
- // alpha fg color fg
- // alpha bg color bg
- // alpha cover color cover
- dest_scan[3] = FXDIB_ALPHA_MERGE(dest_scan[3], m_Alpha, cover_scan);
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Blue, cover_scan);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Green, cover_scan);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Red, cover_scan);
- dest_scan += 2;
- }
+ if (m_Alpha == 255 && cover_scan == 255) {
+ FXSYS_memset(dest_scan, m_Color, (col_end - col_start) << 2);
+ return;
+ }
+ if (cover_scan == 255) {
+ int dst_color = (0x00ffffff & m_Color) | (m_Alpha << 24);
+ FXSYS_memset(dest_scan, dst_color, (col_end - col_start) << 2);
+ return;
+ }
+ // Do not need origin bitmap, because of merge in pure transparent background
+ int src_alpha_covered = m_Alpha * cover_scan / 255;
+ for (int col = col_start; col < col_end; col++) {
+ // shortcut
+ if (dest_scan[3] == 0) {
+ dest_scan[3] = src_alpha_covered;
+ *dest_scan++ = m_Blue;
+ *dest_scan++ = m_Green;
+ *dest_scan = m_Red;
+ dest_scan += 2;
+ continue;
}
- void CFX_SkiaRenderer::CompositeSpanARGB_6(uint8_t* dest_scan, uint8_t* ori_scan,int Bpp,
- int span_left, int span_len, int span_top, uint8_t cover_scan,
- int clip_top, int clip_left, int clip_right, uint8_t* clip_scan,
- uint8_t* dest_extra_alpha_scan)
- {
- dest_scan = (uint8_t*)m_pDevice->GetScanline(span_top) + (span_left<<2);
- clip_scan = (uint8_t*)m_pClipMask->GetScanline(span_top-clip_top) - clip_left + span_left;
- int col_start = span_left < clip_left ? clip_left - span_left : 0;
- int col_end = (span_left + span_len) < clip_right ? span_len : (clip_right - span_left);
- if (col_end < col_start) return; // do nothing.
- dest_scan += col_start << 2;
+ // We should do alpha transition and color transition
+ // alpha fg color fg
+ // alpha bg color bg
+ // alpha cover color cover
+ dest_scan[3] = FXDIB_ALPHA_MERGE(dest_scan[3], m_Alpha, cover_scan);
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Blue, cover_scan);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Green, cover_scan);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Red, cover_scan);
+ dest_scan += 2;
+ }
+}
+void CFX_SkiaRenderer::CompositeSpanARGB_6(uint8_t* dest_scan,
+ uint8_t* ori_scan,
+ int Bpp,
+ int span_left,
+ int span_len,
+ int span_top,
+ uint8_t cover_scan,
+ int clip_top,
+ int clip_left,
+ int clip_right,
+ uint8_t* clip_scan,
+ uint8_t* dest_extra_alpha_scan) {
+ dest_scan = (uint8_t*)m_pDevice->GetScanline(span_top) + (span_left << 2);
+ clip_scan = (uint8_t*)m_pClipMask->GetScanline(span_top - clip_top) -
+ clip_left + span_left;
+ int col_start = span_left < clip_left ? clip_left - span_left : 0;
+ int col_end =
+ (span_left + span_len) < clip_right ? span_len : (clip_right - span_left);
+ if (col_end < col_start)
+ return; // do nothing.
+ dest_scan += col_start << 2;
#if 1
- int src_alpha = m_Alpha * cover_scan / 255;
- for (int col = col_start; col < col_end; col ++) {
- int src_alpha1 = src_alpha* clip_scan[col] / 255;
- if (!src_alpha1) {
- dest_scan += 4;
- continue;
- }
- if (src_alpha1 == 255) {
- *(FX_DWORD*)dest_scan = m_Color;
- dest_scan += 4;
- } else {
- // Dest format: Argb
- // calculate destination alpha (it's union of source and dest alpha)
- if (dest_scan[3] == 0) {
- dest_scan[3] = src_alpha1;
- *dest_scan++ = m_Blue;
- *dest_scan++ = m_Green;
- *dest_scan = m_Red;
- dest_scan += 2;
- continue;
- }
- uint8_t dest_alpha = dest_scan[3] + src_alpha1 - dest_scan[3] * src_alpha1 / 255;
- dest_scan[3] = dest_alpha;
- int alpha_ratio = src_alpha1*255/dest_alpha;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Blue, alpha_ratio);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Green, alpha_ratio);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Red, alpha_ratio);
- dest_scan += 2;
- }
- }
+ int src_alpha = m_Alpha * cover_scan / 255;
+ for (int col = col_start; col < col_end; col++) {
+ int src_alpha1 = src_alpha * clip_scan[col] / 255;
+ if (!src_alpha1) {
+ dest_scan += 4;
+ continue;
+ }
+ if (src_alpha1 == 255) {
+ *(FX_DWORD*)dest_scan = m_Color;
+ dest_scan += 4;
+ } else {
+ // Dest format: Argb
+ // calculate destination alpha (it's union of source and dest alpha)
+ if (dest_scan[3] == 0) {
+ dest_scan[3] = src_alpha1;
+ *dest_scan++ = m_Blue;
+ *dest_scan++ = m_Green;
+ *dest_scan = m_Red;
+ dest_scan += 2;
+ continue;
+ }
+ uint8_t dest_alpha =
+ dest_scan[3] + src_alpha1 - dest_scan[3] * src_alpha1 / 255;
+ dest_scan[3] = dest_alpha;
+ int alpha_ratio = src_alpha1 * 255 / dest_alpha;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Blue, alpha_ratio);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Green, alpha_ratio);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Red, alpha_ratio);
+ dest_scan += 2;
+ }
+ }
#else
- if (m_bFullCover) {
- for (int col = col_start; col < col_end; col ++) {
- int src_alpha = m_Alpha * clip_scan[col] / 255;
- if (!src_alpha) {
- dest_scan += 4;
- continue;
- }
- if (src_alpha == 255){
- *(FX_DWORD*)dest_scan = m_Color;
- dest_scan += 4;
- continue;
- } else {
- // Dest format: Argb
- // calculate destination alpha (it's union of source and dest alpha)
- if (dest_scan[3] == 0) {
- dest_scan[3] = src_alpha;
- *dest_scan++ = m_Blue;
- *dest_scan++ = m_Green;
- *dest_scan = m_Red;
- dest_scan += 2;
- continue;
- }
- uint8_t dest_alpha = dest_scan[3] + src_alpha - dest_scan[3] * src_alpha / 255;
- dest_scan[3] = dest_alpha;
- int alpha_ratio = src_alpha*255/dest_alpha;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Blue, alpha_ratio);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Green, alpha_ratio);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Red, alpha_ratio);
- dest_scan += 2;
- }
- }
- } else {
- int src_alpha = m_Alpha * cover_scan / 255;
- for (int col = col_start; col < col_end; col ++) {
- int src_alpha1 = src_alpha* clip_scan[col] / 255;
- if (!src_alpha1) {
- dest_scan += 4;
- continue;
- }
- if (src_alpha1 == 255) {
- *(FX_DWORD*)dest_scan = m_Color;
- dest_scan += 4;
- } else {
- // Dest format: Argb
- // calculate destination alpha (it's union of source and dest alpha)
- if (dest_scan[3] == 0) {
- dest_scan[3] = src_alpha1;
- *dest_scan++ = m_Blue;
- *dest_scan++ = m_Green;
- *dest_scan = m_Red;
- dest_scan += 2;
- continue;
- }
- uint8_t dest_alpha = dest_scan[3] + src_alpha1 - dest_scan[3] * src_alpha1 / 255;
- dest_scan[3] = dest_alpha;
- int alpha_ratio = src_alpha1*255/dest_alpha;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Blue, alpha_ratio);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Green, alpha_ratio);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Red, alpha_ratio);
- dest_scan += 2;
- }
- }
+ if (m_bFullCover) {
+ for (int col = col_start; col < col_end; col++) {
+ int src_alpha = m_Alpha * clip_scan[col] / 255;
+ if (!src_alpha) {
+ dest_scan += 4;
+ continue;
+ }
+ if (src_alpha == 255) {
+ *(FX_DWORD*)dest_scan = m_Color;
+ dest_scan += 4;
+ continue;
+ } else {
+ // Dest format: Argb
+ // calculate destination alpha (it's union of source and dest alpha)
+ if (dest_scan[3] == 0) {
+ dest_scan[3] = src_alpha;
+ *dest_scan++ = m_Blue;
+ *dest_scan++ = m_Green;
+ *dest_scan = m_Red;
+ dest_scan += 2;
+ continue;
}
-#endif
+ uint8_t dest_alpha =
+ dest_scan[3] + src_alpha - dest_scan[3] * src_alpha / 255;
+ dest_scan[3] = dest_alpha;
+ int alpha_ratio = src_alpha * 255 / dest_alpha;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Blue, alpha_ratio);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Green, alpha_ratio);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Red, alpha_ratio);
+ dest_scan += 2;
+ }
}
-
- void CFX_SkiaRenderer::CompositeSpanARGB_7(uint8_t* dest_scan, uint8_t* ori_scan,int Bpp,
- int span_left, int span_len, int span_top, uint8_t cover_scan,
- int clip_top, int clip_left, int clip_right, uint8_t* clip_scan,
- uint8_t* dest_extra_alpha_scan)
- {
- ASSERT(!m_pDevice->IsCmykImage());
- dest_scan = (uint8_t*)m_pDevice->GetScanline(span_top) + (span_left<<2);
- //ori_scan = (uint8_t*)m_pOriDevice->GetScanline(span_top) + (span_left<<2);
- clip_scan = (uint8_t*)m_pClipMask->GetScanline(span_top-clip_top) - clip_left + span_left;
- int col_start = span_left < clip_left ? clip_left - span_left : 0;
- int col_end = (span_left + span_len) < clip_right ? span_len : (clip_right - span_left);
- if (col_end < col_start) return; // do nothing.
- dest_scan += col_start << 2;
- //ori_scan += col_start << 2;
- // Do not need origin bitmap, because of merge in pure transparent background
- for (int col = col_start; col < col_end; col ++)
- {
- int src_alpha = m_Alpha * clip_scan[col] / 255;
- int src_alpha_covered = src_alpha * cover_scan / 255;
- // shortcut
- if (src_alpha_covered == 0){
- dest_scan += 4;
- continue;
- }
- // shortcut
- if (cover_scan == 255 || dest_scan[3] == 0)
- {
- // origin alpha always zero, just get src alpha
- dest_scan[3] = src_alpha_covered;
- *dest_scan ++ = m_Blue;
- *dest_scan ++ = m_Green;
- *dest_scan = m_Red;
- dest_scan += 2;
- continue;
- }
- // We should do alpha transition and color transition
- // alpha fg color fg
- // alpha bg color bg
- // alpha cover color cover
- dest_scan[3] = FXDIB_ALPHA_MERGE(dest_scan[3], src_alpha, cover_scan);
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Blue, cover_scan);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Green, cover_scan);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Red, cover_scan);
- dest_scan += 2;
+ } else {
+ int src_alpha = m_Alpha * cover_scan / 255;
+ for (int col = col_start; col < col_end; col++) {
+ int src_alpha1 = src_alpha * clip_scan[col] / 255;
+ if (!src_alpha1) {
+ dest_scan += 4;
+ continue;
+ }
+ if (src_alpha1 == 255) {
+ *(FX_DWORD*)dest_scan = m_Color;
+ dest_scan += 4;
+ } else {
+ // Dest format: Argb
+ // calculate destination alpha (it's union of source and dest alpha)
+ if (dest_scan[3] == 0) {
+ dest_scan[3] = src_alpha1;
+ *dest_scan++ = m_Blue;
+ *dest_scan++ = m_Green;
+ *dest_scan = m_Red;
+ dest_scan += 2;
+ continue;
}
+ uint8_t dest_alpha =
+ dest_scan[3] + src_alpha1 - dest_scan[3] * src_alpha1 / 255;
+ dest_scan[3] = dest_alpha;
+ int alpha_ratio = src_alpha1 * 255 / dest_alpha;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Blue, alpha_ratio);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Green, alpha_ratio);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Red, alpha_ratio);
+ dest_scan += 2;
+ }
}
+ }
+#endif
+}
- /*-----------------------------------------------------------------------------------------------------------*/
- void CFX_SkiaRenderer::CompositeSpanRGB32_2(uint8_t* dest_scan, uint8_t* ori_scan,int Bpp,
- int span_left, int span_len, int span_top, uint8_t cover_scan,
- int clip_top, int clip_left, int clip_right, uint8_t* clip_scan,
- uint8_t* dest_extra_alpha_scan)
- {
- dest_scan = (uint8_t*)m_pDevice->GetScanline(span_top) + (span_left<<2);
- int col_start = span_left < clip_left ? clip_left - span_left : 0;
- int col_end = (span_left + span_len) < clip_right ? span_len : (clip_right - span_left);
- if (col_end < col_start) return; // do nothing.
- dest_scan += (col_start << 2);
- if (m_Alpha == 255 && cover_scan == 255) {
- FXSYS_memset(dest_scan, m_Color, (col_end - col_start)<<2);
- return;
- }
- int src_alpha;
+void CFX_SkiaRenderer::CompositeSpanARGB_7(uint8_t* dest_scan,
+ uint8_t* ori_scan,
+ int Bpp,
+ int span_left,
+ int span_len,
+ int span_top,
+ uint8_t cover_scan,
+ int clip_top,
+ int clip_left,
+ int clip_right,
+ uint8_t* clip_scan,
+ uint8_t* dest_extra_alpha_scan) {
+ ASSERT(!m_pDevice->IsCmykImage());
+ dest_scan = (uint8_t*)m_pDevice->GetScanline(span_top) + (span_left << 2);
+ // ori_scan = (uint8_t*)m_pOriDevice->GetScanline(span_top) + (span_left<<2);
+ clip_scan = (uint8_t*)m_pClipMask->GetScanline(span_top - clip_top) -
+ clip_left + span_left;
+ int col_start = span_left < clip_left ? clip_left - span_left : 0;
+ int col_end =
+ (span_left + span_len) < clip_right ? span_len : (clip_right - span_left);
+ if (col_end < col_start)
+ return; // do nothing.
+ dest_scan += col_start << 2;
+ // ori_scan += col_start << 2;
+ // Do not need origin bitmap, because of merge in pure transparent background
+ for (int col = col_start; col < col_end; col++) {
+ int src_alpha = m_Alpha * clip_scan[col] / 255;
+ int src_alpha_covered = src_alpha * cover_scan / 255;
+ // shortcut
+ if (src_alpha_covered == 0) {
+ dest_scan += 4;
+ continue;
+ }
+ // shortcut
+ if (cover_scan == 255 || dest_scan[3] == 0) {
+ // origin alpha always zero, just get src alpha
+ dest_scan[3] = src_alpha_covered;
+ *dest_scan++ = m_Blue;
+ *dest_scan++ = m_Green;
+ *dest_scan = m_Red;
+ dest_scan += 2;
+ continue;
+ }
+ // We should do alpha transition and color transition
+ // alpha fg color fg
+ // alpha bg color bg
+ // alpha cover color cover
+ dest_scan[3] = FXDIB_ALPHA_MERGE(dest_scan[3], src_alpha, cover_scan);
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Blue, cover_scan);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Green, cover_scan);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Red, cover_scan);
+ dest_scan += 2;
+ }
+}
+
+/*-----------------------------------------------------------------------------------------------------------*/
+void CFX_SkiaRenderer::CompositeSpanRGB32_2(uint8_t* dest_scan,
+ uint8_t* ori_scan,
+ int Bpp,
+ int span_left,
+ int span_len,
+ int span_top,
+ uint8_t cover_scan,
+ int clip_top,
+ int clip_left,
+ int clip_right,
+ uint8_t* clip_scan,
+ uint8_t* dest_extra_alpha_scan) {
+ dest_scan = (uint8_t*)m_pDevice->GetScanline(span_top) + (span_left << 2);
+ int col_start = span_left < clip_left ? clip_left - span_left : 0;
+ int col_end =
+ (span_left + span_len) < clip_right ? span_len : (clip_right - span_left);
+ if (col_end < col_start)
+ return; // do nothing.
+ dest_scan += (col_start << 2);
+ if (m_Alpha == 255 && cover_scan == 255) {
+ FXSYS_memset(dest_scan, m_Color, (col_end - col_start) << 2);
+ return;
+ }
+ int src_alpha;
#if 0
if (m_bFullCover)
src_alpha = m_Alpha;
else
#endif
- src_alpha = m_Alpha * cover_scan / 255;
- for (int col = col_start; col < col_end; col ++) {
- // Dest format: Rgb32
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Blue, src_alpha);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Green, src_alpha);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Red, src_alpha);
- dest_scan += 2;
- }
- }
- void CFX_SkiaRenderer::CompositeSpanRGB32_3(uint8_t* dest_scan, uint8_t* ori_scan,int Bpp,
- int span_left, int span_len, int span_top, uint8_t cover_scan,
- int clip_top, int clip_left, int clip_right, uint8_t* clip_scan,
- uint8_t* dest_extra_alpha_scan)
- {
- dest_scan = (uint8_t*)m_pDevice->GetScanline(span_top) + (span_left<<2);
- ori_scan = (uint8_t*)m_pOriDevice->GetScanline(span_top) + (span_left<<2);
- int col_start = span_left < clip_left ? clip_left - span_left : 0;
- int col_end = (span_left + span_len) < clip_right ? span_len : (clip_right - span_left);
- if (col_end < col_start) return; // do nothing.
- dest_scan += col_start << 2;
- ori_scan += col_start << 2;
- if (m_Alpha == 255 && cover_scan == 255) {
- FXSYS_memset(dest_scan, m_Color, (col_end - col_start)<<2);
- return;
- }
- int src_alpha = m_Alpha;
- for (int col = col_start; col < col_end; col ++) {
+ src_alpha = m_Alpha * cover_scan / 255;
+ for (int col = col_start; col < col_end; col++) {
+ // Dest format: Rgb32
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Blue, src_alpha);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Green, src_alpha);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Red, src_alpha);
+ dest_scan += 2;
+ }
+}
+void CFX_SkiaRenderer::CompositeSpanRGB32_3(uint8_t* dest_scan,
+ uint8_t* ori_scan,
+ int Bpp,
+ int span_left,
+ int span_len,
+ int span_top,
+ uint8_t cover_scan,
+ int clip_top,
+ int clip_left,
+ int clip_right,
+ uint8_t* clip_scan,
+ uint8_t* dest_extra_alpha_scan) {
+ dest_scan = (uint8_t*)m_pDevice->GetScanline(span_top) + (span_left << 2);
+ ori_scan = (uint8_t*)m_pOriDevice->GetScanline(span_top) + (span_left << 2);
+ int col_start = span_left < clip_left ? clip_left - span_left : 0;
+ int col_end =
+ (span_left + span_len) < clip_right ? span_len : (clip_right - span_left);
+ if (col_end < col_start)
+ return; // do nothing.
+ dest_scan += col_start << 2;
+ ori_scan += col_start << 2;
+ if (m_Alpha == 255 && cover_scan == 255) {
+ FXSYS_memset(dest_scan, m_Color, (col_end - col_start) << 2);
+ return;
+ }
+ int src_alpha = m_Alpha;
+ for (int col = col_start; col < col_end; col++) {
#if 0
if (m_bFullCover) {
*dest_scan++ = FXDIB_ALPHA_MERGE(*ori_scan++, m_Blue, src_alpha);
@@ -615,231 +740,273 @@
continue;
}
#endif
- int b = FXDIB_ALPHA_MERGE(*ori_scan++, m_Blue, src_alpha);
- int g = FXDIB_ALPHA_MERGE(*ori_scan++, m_Green, src_alpha);
- int r = FXDIB_ALPHA_MERGE(*ori_scan, m_Red, src_alpha);
- ori_scan += 2;
- *dest_scan = FXDIB_ALPHA_MERGE( *dest_scan, b, cover_scan);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, g, cover_scan);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, r, cover_scan);
- dest_scan += 2;
- }
- }
- void CFX_SkiaRenderer::CompositeSpanRGB32_6(uint8_t* dest_scan, uint8_t* ori_scan,int Bpp,
- int span_left, int span_len, int span_top, uint8_t cover_scan,
- int clip_top, int clip_left, int clip_right, uint8_t* clip_scan,
- uint8_t* dest_extra_alpha_scan)
- {
- dest_scan = (uint8_t*)m_pDevice->GetScanline(span_top) + (span_left<<2);
- clip_scan = (uint8_t*)m_pClipMask->GetScanline(span_top-clip_top) - clip_left + span_left;
- int col_start = span_left < clip_left ? clip_left - span_left : 0;
- int col_end = (span_left + span_len) < clip_right ? span_len : (clip_right - span_left);
- if (col_end < col_start) return; // do nothing.
- dest_scan += col_start << 2;
+ int b = FXDIB_ALPHA_MERGE(*ori_scan++, m_Blue, src_alpha);
+ int g = FXDIB_ALPHA_MERGE(*ori_scan++, m_Green, src_alpha);
+ int r = FXDIB_ALPHA_MERGE(*ori_scan, m_Red, src_alpha);
+ ori_scan += 2;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, b, cover_scan);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, g, cover_scan);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, r, cover_scan);
+ dest_scan += 2;
+ }
+}
+void CFX_SkiaRenderer::CompositeSpanRGB32_6(uint8_t* dest_scan,
+ uint8_t* ori_scan,
+ int Bpp,
+ int span_left,
+ int span_len,
+ int span_top,
+ uint8_t cover_scan,
+ int clip_top,
+ int clip_left,
+ int clip_right,
+ uint8_t* clip_scan,
+ uint8_t* dest_extra_alpha_scan) {
+ dest_scan = (uint8_t*)m_pDevice->GetScanline(span_top) + (span_left << 2);
+ clip_scan = (uint8_t*)m_pClipMask->GetScanline(span_top - clip_top) -
+ clip_left + span_left;
+ int col_start = span_left < clip_left ? clip_left - span_left : 0;
+ int col_end =
+ (span_left + span_len) < clip_right ? span_len : (clip_right - span_left);
+ if (col_end < col_start)
+ return; // do nothing.
+ dest_scan += col_start << 2;
#if 1
- int src_alpha = m_Alpha * cover_scan / 255;
- for (int col = col_start; col < col_end; col ++) {
- int src_alpha1 = src_alpha * clip_scan[col] / 255;
- if (!src_alpha1) {
- dest_scan += 4;
- continue;
- }
- if (src_alpha1 == 255) {
- *(FX_DWORD*)dest_scan = m_Color;
- dest_scan += 4;
- } else {
- // Dest format: Rgb or Rgb32
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Blue, src_alpha1);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Green, src_alpha1);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Red, src_alpha1);
- dest_scan += 2;
- }
- }
+ int src_alpha = m_Alpha * cover_scan / 255;
+ for (int col = col_start; col < col_end; col++) {
+ int src_alpha1 = src_alpha * clip_scan[col] / 255;
+ if (!src_alpha1) {
+ dest_scan += 4;
+ continue;
+ }
+ if (src_alpha1 == 255) {
+ *(FX_DWORD*)dest_scan = m_Color;
+ dest_scan += 4;
+ } else {
+ // Dest format: Rgb or Rgb32
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Blue, src_alpha1);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Green, src_alpha1);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Red, src_alpha1);
+ dest_scan += 2;
+ }
+ }
#else
- if (m_bFullCover) {
- for (int col = col_start; col < col_end; col ++) {
- int src_alpha = m_Alpha * clip_scan[col] / 255;
- if (!src_alpha) {
- dest_scan += 4;
- continue;
- }
- if (src_alpha == 255) {
- *(FX_DWORD*)dest_scan = m_Color;
- dest_scan += 4;
- } else {
- // Dest format: Rgb or Rgb32
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Blue, src_alpha);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Green, src_alpha);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Red, src_alpha);
- dest_scan += 2;
- }
- }
- } else {
- // Rgb32
- int src_alpha = m_Alpha * cover_scan / 255;
- for (int col = col_start; col < col_end; col ++) {
- int src_alpha1 = src_alpha * clip_scan[col] / 255;
- if (!src_alpha1) {
- dest_scan += 4;
- continue;
- }
- if (src_alpha1 == 255) {
- *(FX_DWORD*)dest_scan = m_Color;
- dest_scan += 4;
- } else {
- // Dest format: Rgb or Rgb32
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Blue, src_alpha1);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Green, src_alpha1);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Red, src_alpha1);
- dest_scan += 2;
- }
- }
- }
-#endif
+ if (m_bFullCover) {
+ for (int col = col_start; col < col_end; col++) {
+ int src_alpha = m_Alpha * clip_scan[col] / 255;
+ if (!src_alpha) {
+ dest_scan += 4;
+ continue;
+ }
+ if (src_alpha == 255) {
+ *(FX_DWORD*)dest_scan = m_Color;
+ dest_scan += 4;
+ } else {
+ // Dest format: Rgb or Rgb32
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Blue, src_alpha);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Green, src_alpha);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Red, src_alpha);
+ dest_scan += 2;
+ }
}
- void CFX_SkiaRenderer::CompositeSpanRGB32_7(uint8_t* dest_scan, uint8_t* ori_scan,int Bpp,
- int span_left, int span_len, int span_top, uint8_t cover_scan,
- int clip_top, int clip_left, int clip_right, uint8_t* clip_scan,
- uint8_t* dest_extra_alpha_scan)
- {
- ASSERT(!m_pDevice->IsCmykImage());
- dest_scan = (uint8_t*)m_pDevice->GetScanline(span_top) + (span_left<<2);
- ori_scan = (uint8_t*)m_pOriDevice->GetScanline(span_top) + (span_left<<2);
- clip_scan = (uint8_t*)m_pClipMask->GetScanline(span_top-clip_top) - clip_left + span_left;
- int col_start = span_left < clip_left ? clip_left - span_left : 0;
- int col_end = (span_left + span_len) < clip_right ? span_len : (clip_right - span_left);
- if (col_end < col_start) return; // do nothing.
- dest_scan += col_start << 2;
- ori_scan += col_start << 2;
+ } else {
+ // Rgb32
+ int src_alpha = m_Alpha * cover_scan / 255;
+ for (int col = col_start; col < col_end; col++) {
+ int src_alpha1 = src_alpha * clip_scan[col] / 255;
+ if (!src_alpha1) {
+ dest_scan += 4;
+ continue;
+ }
+ if (src_alpha1 == 255) {
+ *(FX_DWORD*)dest_scan = m_Color;
+ dest_scan += 4;
+ } else {
+ // Dest format: Rgb or Rgb32
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Blue, src_alpha1);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Green, src_alpha1);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Red, src_alpha1);
+ dest_scan += 2;
+ }
+ }
+ }
+#endif
+}
+void CFX_SkiaRenderer::CompositeSpanRGB32_7(uint8_t* dest_scan,
+ uint8_t* ori_scan,
+ int Bpp,
+ int span_left,
+ int span_len,
+ int span_top,
+ uint8_t cover_scan,
+ int clip_top,
+ int clip_left,
+ int clip_right,
+ uint8_t* clip_scan,
+ uint8_t* dest_extra_alpha_scan) {
+ ASSERT(!m_pDevice->IsCmykImage());
+ dest_scan = (uint8_t*)m_pDevice->GetScanline(span_top) + (span_left << 2);
+ ori_scan = (uint8_t*)m_pOriDevice->GetScanline(span_top) + (span_left << 2);
+ clip_scan = (uint8_t*)m_pClipMask->GetScanline(span_top - clip_top) -
+ clip_left + span_left;
+ int col_start = span_left < clip_left ? clip_left - span_left : 0;
+ int col_end =
+ (span_left + span_len) < clip_right ? span_len : (clip_right - span_left);
+ if (col_end < col_start)
+ return; // do nothing.
+ dest_scan += col_start << 2;
+ ori_scan += col_start << 2;
#if 1
- for (int col = col_start; col < col_end; col ++) {
- int src_alpha = m_Alpha * clip_scan[col] / 255;
- if (src_alpha == 255 && cover_scan == 255) {
- *(FX_DWORD*)dest_scan = m_Color;
- dest_scan += 4;
- ori_scan += 4;
- continue;
- }
- int b = FXDIB_ALPHA_MERGE(*ori_scan++, m_Blue, src_alpha);
- int g = FXDIB_ALPHA_MERGE(*ori_scan++, m_Green, src_alpha);
- int r = FXDIB_ALPHA_MERGE(*ori_scan, m_Red, src_alpha);
- ori_scan += 2;
- *dest_scan = FXDIB_ALPHA_MERGE( *dest_scan, b, cover_scan);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, g, cover_scan);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, r, cover_scan);
- dest_scan += 2;
- }
+ for (int col = col_start; col < col_end; col++) {
+ int src_alpha = m_Alpha * clip_scan[col] / 255;
+ if (src_alpha == 255 && cover_scan == 255) {
+ *(FX_DWORD*)dest_scan = m_Color;
+ dest_scan += 4;
+ ori_scan += 4;
+ continue;
+ }
+ int b = FXDIB_ALPHA_MERGE(*ori_scan++, m_Blue, src_alpha);
+ int g = FXDIB_ALPHA_MERGE(*ori_scan++, m_Green, src_alpha);
+ int r = FXDIB_ALPHA_MERGE(*ori_scan, m_Red, src_alpha);
+ ori_scan += 2;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, b, cover_scan);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, g, cover_scan);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, r, cover_scan);
+ dest_scan += 2;
+ }
#else
- if (m_bFullCover) {
- for (int col = col_start; col < col_end; col ++) {
- int src_alpha = m_Alpha * clip_scan[col] / 255;
- if (!src_alpha) {
- *(FX_DWORD*)dest_scan = *(FX_DWORD*)ori_scan;
- dest_scan += 4;
- ori_scan += 4;
- continue;
- }
- if (src_alpha == 255) {
- *(FX_DWORD*)dest_scan = m_Color;
- dest_scan += 4;
- ori_scan += 4;
- continue;
- }
- *dest_scan++ = FXDIB_ALPHA_MERGE(*ori_scan++, m_Blue, src_alpha);
- *dest_scan++ = FXDIB_ALPHA_MERGE(*ori_scan++, m_Green, src_alpha);
- *dest_scan = FXDIB_ALPHA_MERGE(*ori_scan, m_Red, src_alpha);
- dest_scan += 2; ori_scan += 2;
- }
- } else {
- for (int col = col_start; col < col_end; col ++) {
- int src_alpha = m_Alpha * clip_scan[col] / 255;
- if (src_alpha == 255 && cover_scan == 255) {
- *(FX_DWORD*)dest_scan = m_Color;
- dest_scan += 4;
- ori_scan += 4;
- continue;
- }
- int b = FXDIB_ALPHA_MERGE(*ori_scan++, m_Blue, src_alpha);
- int g = FXDIB_ALPHA_MERGE(*ori_scan++, m_Green, src_alpha);
- int r = FXDIB_ALPHA_MERGE(*ori_scan, m_Red, src_alpha);
- ori_scan += 2;
- *dest_scan = FXDIB_ALPHA_MERGE( *dest_scan, b, cover_scan);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, g, cover_scan);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, r, cover_scan);
- dest_scan += 2;
- }
- }
-#endif
+ if (m_bFullCover) {
+ for (int col = col_start; col < col_end; col++) {
+ int src_alpha = m_Alpha * clip_scan[col] / 255;
+ if (!src_alpha) {
+ *(FX_DWORD*)dest_scan = *(FX_DWORD*)ori_scan;
+ dest_scan += 4;
+ ori_scan += 4;
+ continue;
+ }
+ if (src_alpha == 255) {
+ *(FX_DWORD*)dest_scan = m_Color;
+ dest_scan += 4;
+ ori_scan += 4;
+ continue;
+ }
+ *dest_scan++ = FXDIB_ALPHA_MERGE(*ori_scan++, m_Blue, src_alpha);
+ *dest_scan++ = FXDIB_ALPHA_MERGE(*ori_scan++, m_Green, src_alpha);
+ *dest_scan = FXDIB_ALPHA_MERGE(*ori_scan, m_Red, src_alpha);
+ dest_scan += 2;
+ ori_scan += 2;
}
- /*-----------------------------------------------------------------------------------------------------*/
- void CFX_SkiaRenderer::CompositeSpanRGB24_2(uint8_t* dest_scan, uint8_t* ori_scan,int Bpp,
- int span_left, int span_len, int span_top, uint8_t cover_scan,
- int clip_top, int clip_left, int clip_right, uint8_t* clip_scan,
- uint8_t* dest_extra_alpha_scan)
- {
- dest_scan = (uint8_t*)m_pDevice->GetScanline(span_top) + span_left + (span_left<<1);
- int col_start = span_left < clip_left ? clip_left - span_left : 0;
- int col_end = (span_left + span_len) < clip_right ? span_len : (clip_right - span_left);
- if (col_end < col_start) return; // do nothing.
- dest_scan += (col_start<<1)+col_start;
- int src_alpha;
+ } else {
+ for (int col = col_start; col < col_end; col++) {
+ int src_alpha = m_Alpha * clip_scan[col] / 255;
+ if (src_alpha == 255 && cover_scan == 255) {
+ *(FX_DWORD*)dest_scan = m_Color;
+ dest_scan += 4;
+ ori_scan += 4;
+ continue;
+ }
+ int b = FXDIB_ALPHA_MERGE(*ori_scan++, m_Blue, src_alpha);
+ int g = FXDIB_ALPHA_MERGE(*ori_scan++, m_Green, src_alpha);
+ int r = FXDIB_ALPHA_MERGE(*ori_scan, m_Red, src_alpha);
+ ori_scan += 2;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, b, cover_scan);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, g, cover_scan);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, r, cover_scan);
+ dest_scan += 2;
+ }
+ }
+#endif
+}
+/*-----------------------------------------------------------------------------------------------------*/
+void CFX_SkiaRenderer::CompositeSpanRGB24_2(uint8_t* dest_scan,
+ uint8_t* ori_scan,
+ int Bpp,
+ int span_left,
+ int span_len,
+ int span_top,
+ uint8_t cover_scan,
+ int clip_top,
+ int clip_left,
+ int clip_right,
+ uint8_t* clip_scan,
+ uint8_t* dest_extra_alpha_scan) {
+ dest_scan =
+ (uint8_t*)m_pDevice->GetScanline(span_top) + span_left + (span_left << 1);
+ int col_start = span_left < clip_left ? clip_left - span_left : 0;
+ int col_end =
+ (span_left + span_len) < clip_right ? span_len : (clip_right - span_left);
+ if (col_end < col_start)
+ return; // do nothing.
+ dest_scan += (col_start << 1) + col_start;
+ int src_alpha;
#if 0
if (m_bFullCover)
src_alpha = m_Alpha;
else
#endif
- src_alpha = m_Alpha * cover_scan / 255;
- if (src_alpha == 255) {
- for (int col = col_start; col < col_end; col ++) {
- *dest_scan++ = m_Blue;
- *dest_scan++ = m_Green;
- *dest_scan++ = m_Red;
- }
- return;
- }
- for (int col = col_start; col < col_end; col ++) {
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Blue, src_alpha);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Green, src_alpha);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Red, src_alpha);
- dest_scan ++;
- }
+ src_alpha = m_Alpha * cover_scan / 255;
+ if (src_alpha == 255) {
+ for (int col = col_start; col < col_end; col++) {
+ *dest_scan++ = m_Blue;
+ *dest_scan++ = m_Green;
+ *dest_scan++ = m_Red;
}
- void CFX_SkiaRenderer::CompositeSpanRGB24_3(uint8_t* dest_scan, uint8_t* ori_scan,int Bpp,
- int span_left, int span_len, int span_top, uint8_t cover_scan,
- int clip_top, int clip_left, int clip_right, uint8_t* clip_scan,
- uint8_t* dest_extra_alpha_scan)
- {
- ASSERT(!m_pDevice->IsCmykImage());
- dest_scan = (uint8_t*)m_pDevice->GetScanline(span_top) + span_left + (span_left<<1);
- ori_scan = (uint8_t*)m_pOriDevice->GetScanline(span_top) + span_left + (span_left<<1);
- int col_start = span_left < clip_left ? clip_left - span_left : 0;
- int col_end = (span_left + span_len) < clip_right ? span_len : (clip_right - span_left);
- if (col_end < col_start) return; // do nothing.
- dest_scan += (col_start<<1) + col_start;
- ori_scan += (col_start<<1) + col_start;
- if (m_Alpha == 255&&cover_scan == 255) {
- for (int col = col_start; col < col_end; col ++) {
- *dest_scan ++ = m_Blue;
- *dest_scan ++ = m_Green;
- *dest_scan ++ = m_Red;
- }
- return;
- }
- for (int col = col_start; col < col_end; col ++) {
+ return;
+ }
+ for (int col = col_start; col < col_end; col++) {
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Blue, src_alpha);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Green, src_alpha);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Red, src_alpha);
+ dest_scan++;
+ }
+}
+void CFX_SkiaRenderer::CompositeSpanRGB24_3(uint8_t* dest_scan,
+ uint8_t* ori_scan,
+ int Bpp,
+ int span_left,
+ int span_len,
+ int span_top,
+ uint8_t cover_scan,
+ int clip_top,
+ int clip_left,
+ int clip_right,
+ uint8_t* clip_scan,
+ uint8_t* dest_extra_alpha_scan) {
+ ASSERT(!m_pDevice->IsCmykImage());
+ dest_scan =
+ (uint8_t*)m_pDevice->GetScanline(span_top) + span_left + (span_left << 1);
+ ori_scan = (uint8_t*)m_pOriDevice->GetScanline(span_top) + span_left +
+ (span_left << 1);
+ int col_start = span_left < clip_left ? clip_left - span_left : 0;
+ int col_end =
+ (span_left + span_len) < clip_right ? span_len : (clip_right - span_left);
+ if (col_end < col_start)
+ return; // do nothing.
+ dest_scan += (col_start << 1) + col_start;
+ ori_scan += (col_start << 1) + col_start;
+ if (m_Alpha == 255 && cover_scan == 255) {
+ for (int col = col_start; col < col_end; col++) {
+ *dest_scan++ = m_Blue;
+ *dest_scan++ = m_Green;
+ *dest_scan++ = m_Red;
+ }
+ return;
+ }
+ for (int col = col_start; col < col_end; col++) {
#if 0
if (m_bFullCover) {
*dest_scan++ = FXDIB_ALPHA_MERGE(*ori_scan++, m_Blue, m_Alpha);
@@ -848,762 +1015,834 @@
continue;
}
#endif
- int b = FXDIB_ALPHA_MERGE(*ori_scan++, m_Blue, m_Alpha);
- int g = FXDIB_ALPHA_MERGE(*ori_scan++, m_Green, m_Alpha);
- int r = FXDIB_ALPHA_MERGE(*ori_scan++, m_Red, m_Alpha);
- *dest_scan = FXDIB_ALPHA_MERGE( *dest_scan, b, cover_scan);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, g, cover_scan);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, r, cover_scan);
- dest_scan ++;
- }
- }
- void CFX_SkiaRenderer::CompositeSpanRGB24_6(uint8_t* dest_scan, uint8_t* ori_scan,int Bpp,
- int span_left, int span_len, int span_top, uint8_t cover_scan,
- int clip_top, int clip_left, int clip_right, uint8_t* clip_scan,
- uint8_t* dest_extra_alpha_scan)
- {
- dest_scan = (uint8_t*)m_pDevice->GetScanline(span_top) + span_left+(span_left<<1);
- clip_scan = (uint8_t*)m_pClipMask->GetScanline(span_top-clip_top) - clip_left + span_left;
- int col_start = span_left < clip_left ? clip_left - span_left : 0;
- int col_end = (span_left + span_len) < clip_right ? span_len : (clip_right - span_left);
- if (col_end < col_start) return; // do nothing.
- dest_scan += col_start + (col_start << 1);
+ int b = FXDIB_ALPHA_MERGE(*ori_scan++, m_Blue, m_Alpha);
+ int g = FXDIB_ALPHA_MERGE(*ori_scan++, m_Green, m_Alpha);
+ int r = FXDIB_ALPHA_MERGE(*ori_scan++, m_Red, m_Alpha);
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, b, cover_scan);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, g, cover_scan);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, r, cover_scan);
+ dest_scan++;
+ }
+}
+void CFX_SkiaRenderer::CompositeSpanRGB24_6(uint8_t* dest_scan,
+ uint8_t* ori_scan,
+ int Bpp,
+ int span_left,
+ int span_len,
+ int span_top,
+ uint8_t cover_scan,
+ int clip_top,
+ int clip_left,
+ int clip_right,
+ uint8_t* clip_scan,
+ uint8_t* dest_extra_alpha_scan) {
+ dest_scan =
+ (uint8_t*)m_pDevice->GetScanline(span_top) + span_left + (span_left << 1);
+ clip_scan = (uint8_t*)m_pClipMask->GetScanline(span_top - clip_top) -
+ clip_left + span_left;
+ int col_start = span_left < clip_left ? clip_left - span_left : 0;
+ int col_end =
+ (span_left + span_len) < clip_right ? span_len : (clip_right - span_left);
+ if (col_end < col_start)
+ return; // do nothing.
+ dest_scan += col_start + (col_start << 1);
#if 1
- int src_alpha = m_Alpha * cover_scan /255;
- for (int col = col_start; col < col_end; col ++) {
- int src_alpha1 = src_alpha * clip_scan[col] / 255;
- if (!src_alpha1) {
- dest_scan += 3;
- continue;
- }
- if (src_alpha1 == 255) {
- *dest_scan++ = m_Blue;
- *dest_scan++ = m_Green;
- *dest_scan++ = m_Red;
- } else {
- // Dest format: Rgb
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Blue, src_alpha1);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Green, src_alpha1);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Red, src_alpha1);
- dest_scan ++;
- }
- }
+ int src_alpha = m_Alpha * cover_scan / 255;
+ for (int col = col_start; col < col_end; col++) {
+ int src_alpha1 = src_alpha * clip_scan[col] / 255;
+ if (!src_alpha1) {
+ dest_scan += 3;
+ continue;
+ }
+ if (src_alpha1 == 255) {
+ *dest_scan++ = m_Blue;
+ *dest_scan++ = m_Green;
+ *dest_scan++ = m_Red;
+ } else {
+ // Dest format: Rgb
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Blue, src_alpha1);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Green, src_alpha1);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Red, src_alpha1);
+ dest_scan++;
+ }
+ }
#else
- if (m_bFullCover) {
- for (int col = col_start; col < col_end; col ++) {
- int src_alpha = m_Alpha * clip_scan[col] / 255;
- if (!src_alpha) {
- dest_scan += 3;
- continue;
- }
- if (src_alpha == 255) {
- *dest_scan++ = m_Blue;
- *dest_scan++ = m_Green;
- *dest_scan++ = m_Red;
- } else {
- // Dest format: Rgb
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Blue, src_alpha);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Green, src_alpha);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Red, src_alpha);
- dest_scan ++;
- }
- }
- } else {
- int src_alpha = m_Alpha * cover_scan /255;
- for (int col = col_start; col < col_end; col ++) {
- int src_alpha1 = src_alpha * clip_scan[col] / 255;
- if (!src_alpha1) {
- dest_scan += 3;
- continue;
- }
- if (src_alpha1 == 255) {
- *dest_scan++ = m_Blue;
- *dest_scan++ = m_Green;
- *dest_scan++ = m_Red;
- } else {
- // Dest format: Rgb
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Blue, src_alpha1);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Green, src_alpha1);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Red, src_alpha1);
- dest_scan ++;
- }
- }
- }
-#endif
+ if (m_bFullCover) {
+ for (int col = col_start; col < col_end; col++) {
+ int src_alpha = m_Alpha * clip_scan[col] / 255;
+ if (!src_alpha) {
+ dest_scan += 3;
+ continue;
+ }
+ if (src_alpha == 255) {
+ *dest_scan++ = m_Blue;
+ *dest_scan++ = m_Green;
+ *dest_scan++ = m_Red;
+ } else {
+ // Dest format: Rgb
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Blue, src_alpha);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Green, src_alpha);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Red, src_alpha);
+ dest_scan++;
+ }
}
- void CFX_SkiaRenderer::CompositeSpanRGB24_7(uint8_t* dest_scan, uint8_t* ori_scan,int Bpp,
- int span_left, int span_len, int span_top, uint8_t cover_scan,
- int clip_top, int clip_left, int clip_right, uint8_t* clip_scan,
- uint8_t* dest_extra_alpha_scan)
- {
- ASSERT(!m_pDevice->IsCmykImage());
- dest_scan = (uint8_t*)m_pDevice->GetScanline(span_top) + span_left+(span_left<<1);
- ori_scan = (uint8_t*)m_pOriDevice->GetScanline(span_top) + span_left+(span_left<<1);
- clip_scan = (uint8_t*)m_pClipMask->GetScanline(span_top-clip_top) - clip_left + span_left;
- int col_start = span_left < clip_left ? clip_left - span_left : 0;
- int col_end = (span_left + span_len) < clip_right ? span_len : (clip_right - span_left);
- if (col_end < col_start) return; // do nothing.
- dest_scan += col_start + (col_start<<1);
- ori_scan += col_start + (col_start<<1);
+ } else {
+ int src_alpha = m_Alpha * cover_scan / 255;
+ for (int col = col_start; col < col_end; col++) {
+ int src_alpha1 = src_alpha * clip_scan[col] / 255;
+ if (!src_alpha1) {
+ dest_scan += 3;
+ continue;
+ }
+ if (src_alpha1 == 255) {
+ *dest_scan++ = m_Blue;
+ *dest_scan++ = m_Green;
+ *dest_scan++ = m_Red;
+ } else {
+ // Dest format: Rgb
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Blue, src_alpha1);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Green, src_alpha1);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Red, src_alpha1);
+ dest_scan++;
+ }
+ }
+ }
+#endif
+}
+void CFX_SkiaRenderer::CompositeSpanRGB24_7(uint8_t* dest_scan,
+ uint8_t* ori_scan,
+ int Bpp,
+ int span_left,
+ int span_len,
+ int span_top,
+ uint8_t cover_scan,
+ int clip_top,
+ int clip_left,
+ int clip_right,
+ uint8_t* clip_scan,
+ uint8_t* dest_extra_alpha_scan) {
+ ASSERT(!m_pDevice->IsCmykImage());
+ dest_scan =
+ (uint8_t*)m_pDevice->GetScanline(span_top) + span_left + (span_left << 1);
+ ori_scan = (uint8_t*)m_pOriDevice->GetScanline(span_top) + span_left +
+ (span_left << 1);
+ clip_scan = (uint8_t*)m_pClipMask->GetScanline(span_top - clip_top) -
+ clip_left + span_left;
+ int col_start = span_left < clip_left ? clip_left - span_left : 0;
+ int col_end =
+ (span_left + span_len) < clip_right ? span_len : (clip_right - span_left);
+ if (col_end < col_start)
+ return; // do nothing.
+ dest_scan += col_start + (col_start << 1);
+ ori_scan += col_start + (col_start << 1);
#if 1
- for (int col = col_start; col < col_end; col ++) {
- int src_alpha = m_Alpha * clip_scan[col] / 255;
- if (src_alpha == 255 && cover_scan == 255) {
- *dest_scan++ = m_Blue;
- *dest_scan++ = m_Green;
- *dest_scan++ = m_Red;
- ori_scan += 3;
- continue;
- }
- int b = FXDIB_ALPHA_MERGE(*ori_scan++, m_Blue, src_alpha);
- int g = FXDIB_ALPHA_MERGE(*ori_scan++, m_Green, src_alpha);
- int r = FXDIB_ALPHA_MERGE(*ori_scan++, m_Red, src_alpha);
- *dest_scan = FXDIB_ALPHA_MERGE( *dest_scan, b, cover_scan);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, g, cover_scan);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, r, cover_scan);
- dest_scan ++;
- }
+ for (int col = col_start; col < col_end; col++) {
+ int src_alpha = m_Alpha * clip_scan[col] / 255;
+ if (src_alpha == 255 && cover_scan == 255) {
+ *dest_scan++ = m_Blue;
+ *dest_scan++ = m_Green;
+ *dest_scan++ = m_Red;
+ ori_scan += 3;
+ continue;
+ }
+ int b = FXDIB_ALPHA_MERGE(*ori_scan++, m_Blue, src_alpha);
+ int g = FXDIB_ALPHA_MERGE(*ori_scan++, m_Green, src_alpha);
+ int r = FXDIB_ALPHA_MERGE(*ori_scan++, m_Red, src_alpha);
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, b, cover_scan);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, g, cover_scan);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, r, cover_scan);
+ dest_scan++;
+ }
#else
- if (m_bFullCover) {
- for (int col = col_start; col < col_end; col ++) {
- int src_alpha = m_Alpha * clip_scan[col] / 255;
- if (!src_alpha){
- *dest_scan++ = *ori_scan++;
- *dest_scan++ = *ori_scan++;
- *dest_scan++ = *ori_scan++;
- continue;
- }
- if (src_alpha == 255){
- *dest_scan++ = m_Blue;
- *dest_scan++ = m_Green;
- *dest_scan++ = m_Red;
- ori_scan += 3;
- continue;
- }
- *dest_scan++ = FXDIB_ALPHA_MERGE(*ori_scan++, m_Blue, src_alpha);
- *dest_scan++ = FXDIB_ALPHA_MERGE(*ori_scan++, m_Green, src_alpha);
- *dest_scan++ = FXDIB_ALPHA_MERGE(*ori_scan++, m_Red, src_alpha);
- }
- } else {
- for (int col = col_start; col < col_end; col ++) {
- int src_alpha = m_Alpha * clip_scan[col] / 255;
- if (src_alpha == 255 && cover_scan == 255) {
- *dest_scan++ = m_Blue;
- *dest_scan++ = m_Green;
- *dest_scan++ = m_Red;
- ori_scan += 3;
- continue;
- }
- int b = FXDIB_ALPHA_MERGE(*ori_scan++, m_Blue, src_alpha);
- int g = FXDIB_ALPHA_MERGE(*ori_scan++, m_Green, src_alpha);
- int r = FXDIB_ALPHA_MERGE(*ori_scan++, m_Red, src_alpha);
- *dest_scan = FXDIB_ALPHA_MERGE( *dest_scan, b, cover_scan);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, g, cover_scan);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, r, cover_scan);
- dest_scan ++;
- }
- }
-#endif
+ if (m_bFullCover) {
+ for (int col = col_start; col < col_end; col++) {
+ int src_alpha = m_Alpha * clip_scan[col] / 255;
+ if (!src_alpha) {
+ *dest_scan++ = *ori_scan++;
+ *dest_scan++ = *ori_scan++;
+ *dest_scan++ = *ori_scan++;
+ continue;
+ }
+ if (src_alpha == 255) {
+ *dest_scan++ = m_Blue;
+ *dest_scan++ = m_Green;
+ *dest_scan++ = m_Red;
+ ori_scan += 3;
+ continue;
+ }
+ *dest_scan++ = FXDIB_ALPHA_MERGE(*ori_scan++, m_Blue, src_alpha);
+ *dest_scan++ = FXDIB_ALPHA_MERGE(*ori_scan++, m_Green, src_alpha);
+ *dest_scan++ = FXDIB_ALPHA_MERGE(*ori_scan++, m_Red, src_alpha);
}
- void CFX_SkiaRenderer::CompositeSpanRGB24_10(uint8_t* dest_scan, uint8_t* ori_scan,int Bpp,
- int span_left, int span_len, int span_top, uint8_t cover_scan,
- int clip_top, int clip_left, int clip_right, uint8_t* clip_scan,
- uint8_t* dest_extra_alpha_scan)
- {
- dest_scan = (uint8_t*)m_pDevice->GetScanline(span_top) + span_left+(span_left<<1);
- dest_extra_alpha_scan = (uint8_t*)m_pDevice->m_pAlphaMask->GetScanline(span_top)+span_left;
- int col_start = span_left < clip_left ? clip_left - span_left : 0;
- int col_end = (span_left + span_len) < clip_right ? span_len : (clip_right - span_left);
- if (col_end < col_start) return; // do nothing.
- dest_scan += col_start+(col_start<<1);
+ } else {
+ for (int col = col_start; col < col_end; col++) {
+ int src_alpha = m_Alpha * clip_scan[col] / 255;
+ if (src_alpha == 255 && cover_scan == 255) {
+ *dest_scan++ = m_Blue;
+ *dest_scan++ = m_Green;
+ *dest_scan++ = m_Red;
+ ori_scan += 3;
+ continue;
+ }
+ int b = FXDIB_ALPHA_MERGE(*ori_scan++, m_Blue, src_alpha);
+ int g = FXDIB_ALPHA_MERGE(*ori_scan++, m_Green, src_alpha);
+ int r = FXDIB_ALPHA_MERGE(*ori_scan++, m_Red, src_alpha);
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, b, cover_scan);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, g, cover_scan);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, r, cover_scan);
+ dest_scan++;
+ }
+ }
+#endif
+}
+void CFX_SkiaRenderer::CompositeSpanRGB24_10(uint8_t* dest_scan,
+ uint8_t* ori_scan,
+ int Bpp,
+ int span_left,
+ int span_len,
+ int span_top,
+ uint8_t cover_scan,
+ int clip_top,
+ int clip_left,
+ int clip_right,
+ uint8_t* clip_scan,
+ uint8_t* dest_extra_alpha_scan) {
+ dest_scan =
+ (uint8_t*)m_pDevice->GetScanline(span_top) + span_left + (span_left << 1);
+ dest_extra_alpha_scan =
+ (uint8_t*)m_pDevice->m_pAlphaMask->GetScanline(span_top) + span_left;
+ int col_start = span_left < clip_left ? clip_left - span_left : 0;
+ int col_end =
+ (span_left + span_len) < clip_right ? span_len : (clip_right - span_left);
+ if (col_end < col_start)
+ return; // do nothing.
+ dest_scan += col_start + (col_start << 1);
#if 1
- if (m_Alpha == 255 && cover_scan == 255) {
- for (int col = col_start; col < col_end; col ++) {
- *dest_scan++ = (uint8_t)m_Blue;
- *dest_scan++ = (uint8_t)m_Green;
- *dest_scan++ = (uint8_t)m_Red;
- *dest_extra_alpha_scan++ = 255;
- }
- return;
- }
- int src_alpha = m_Alpha * cover_scan / 255;
- for (int col = col_start; col < col_end; col ++) {
- // Dest format: Rgba
- // calculate destination alpha (it's union of source and dest alpha)
- uint8_t dest_alpha = (*dest_extra_alpha_scan) + src_alpha -
- (*dest_extra_alpha_scan) * src_alpha / 255;
- *dest_extra_alpha_scan++ = dest_alpha;
- int alpha_ratio = src_alpha*255/dest_alpha;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Blue, alpha_ratio);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Green, alpha_ratio);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Red, alpha_ratio);
- dest_scan ++;
- }
+ if (m_Alpha == 255 && cover_scan == 255) {
+ for (int col = col_start; col < col_end; col++) {
+ *dest_scan++ = (uint8_t)m_Blue;
+ *dest_scan++ = (uint8_t)m_Green;
+ *dest_scan++ = (uint8_t)m_Red;
+ *dest_extra_alpha_scan++ = 255;
+ }
+ return;
+ }
+ int src_alpha = m_Alpha * cover_scan / 255;
+ for (int col = col_start; col < col_end; col++) {
+ // Dest format: Rgba
+ // calculate destination alpha (it's union of source and dest alpha)
+ uint8_t dest_alpha = (*dest_extra_alpha_scan) + src_alpha -
+ (*dest_extra_alpha_scan) * src_alpha / 255;
+ *dest_extra_alpha_scan++ = dest_alpha;
+ int alpha_ratio = src_alpha * 255 / dest_alpha;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Blue, alpha_ratio);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Green, alpha_ratio);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Red, alpha_ratio);
+ dest_scan++;
+ }
#else
- if (m_bFullCover) {
- if (m_Alpha == 255) {
- for (int col = col_start; col < col_end; col ++) {
- *dest_scan++ = (uint8_t)m_Blue;
- *dest_scan++ = (uint8_t)m_Green;
- *dest_scan++ = (uint8_t)m_Red;
- *dest_extra_alpha_scan++ = 255;
- }
- return;
- }
- for (int col = col_start; col < col_end; col ++) {
- // Dest format: Rgba
- // calculate destination alpha (it's union of source and dest alpha)
- uint8_t dest_alpha = (*dest_extra_alpha_scan) + m_Alpha -
- (*dest_extra_alpha_scan) * m_Alpha / 255;
- *dest_extra_alpha_scan++ = dest_alpha;
- int alpha_ratio = m_Alpha*255/dest_alpha;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Blue, alpha_ratio);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Green, alpha_ratio);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Red, alpha_ratio);
- dest_scan ++;
- }
- } else {
- if (m_Alpha == 255 && cover_scan == 255) {
- for (int col = col_start; col < col_end; col ++) {
- *dest_scan++ = (uint8_t)m_Blue;
- *dest_scan++ = (uint8_t)m_Green;
- *dest_scan++ = (uint8_t)m_Red;
- *dest_extra_alpha_scan++ = 255;
- }
- return;
- }
- int src_alpha = m_Alpha * cover_scan / 255;
- for (int col = col_start; col < col_end; col ++) {
- // Dest format: Rgba
- // calculate destination alpha (it's union of source and dest alpha)
- uint8_t dest_alpha = (*dest_extra_alpha_scan) + src_alpha -
- (*dest_extra_alpha_scan) * src_alpha / 255;
- *dest_extra_alpha_scan++ = dest_alpha;
- int alpha_ratio = src_alpha*255/dest_alpha;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Blue, alpha_ratio);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Green, alpha_ratio);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Red, alpha_ratio);
- dest_scan ++;
- }
- }
-#endif
+ if (m_bFullCover) {
+ if (m_Alpha == 255) {
+ for (int col = col_start; col < col_end; col++) {
+ *dest_scan++ = (uint8_t)m_Blue;
+ *dest_scan++ = (uint8_t)m_Green;
+ *dest_scan++ = (uint8_t)m_Red;
+ *dest_extra_alpha_scan++ = 255;
+ }
+ return;
+ }
+ for (int col = col_start; col < col_end; col++) {
+ // Dest format: Rgba
+ // calculate destination alpha (it's union of source and dest alpha)
+ uint8_t dest_alpha = (*dest_extra_alpha_scan) + m_Alpha -
+ (*dest_extra_alpha_scan) * m_Alpha / 255;
+ *dest_extra_alpha_scan++ = dest_alpha;
+ int alpha_ratio = m_Alpha * 255 / dest_alpha;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Blue, alpha_ratio);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Green, alpha_ratio);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Red, alpha_ratio);
+ dest_scan++;
}
- void CFX_SkiaRenderer::CompositeSpanRGB24_14(uint8_t* dest_scan, uint8_t* ori_scan,int Bpp,
- int span_left, int span_len, int span_top, uint8_t cover_scan,
- int clip_top, int clip_left, int clip_right, uint8_t* clip_scan,
- uint8_t* dest_extra_alpha_scan)
- {
- dest_scan = (uint8_t*)m_pDevice->GetScanline(span_top) + span_left+(span_left<<1);
- dest_extra_alpha_scan = (uint8_t*)m_pDevice->m_pAlphaMask->GetScanline(span_top)+span_left;
- clip_scan = (uint8_t*)m_pClipMask->GetScanline(span_top-clip_top) - clip_left + span_left;
- int col_start = span_left < clip_left ? clip_left - span_left : 0;
- int col_end = (span_left + span_len) < clip_right ? span_len : (clip_right - span_left);
- if (col_end < col_start) return; // do nothing.
- dest_scan += col_start + (col_start << 1);
+ } else {
+ if (m_Alpha == 255 && cover_scan == 255) {
+ for (int col = col_start; col < col_end; col++) {
+ *dest_scan++ = (uint8_t)m_Blue;
+ *dest_scan++ = (uint8_t)m_Green;
+ *dest_scan++ = (uint8_t)m_Red;
+ *dest_extra_alpha_scan++ = 255;
+ }
+ return;
+ }
+ int src_alpha = m_Alpha * cover_scan / 255;
+ for (int col = col_start; col < col_end; col++) {
+ // Dest format: Rgba
+ // calculate destination alpha (it's union of source and dest alpha)
+ uint8_t dest_alpha = (*dest_extra_alpha_scan) + src_alpha -
+ (*dest_extra_alpha_scan) * src_alpha / 255;
+ *dest_extra_alpha_scan++ = dest_alpha;
+ int alpha_ratio = src_alpha * 255 / dest_alpha;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Blue, alpha_ratio);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Green, alpha_ratio);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Red, alpha_ratio);
+ dest_scan++;
+ }
+ }
+#endif
+}
+void CFX_SkiaRenderer::CompositeSpanRGB24_14(uint8_t* dest_scan,
+ uint8_t* ori_scan,
+ int Bpp,
+ int span_left,
+ int span_len,
+ int span_top,
+ uint8_t cover_scan,
+ int clip_top,
+ int clip_left,
+ int clip_right,
+ uint8_t* clip_scan,
+ uint8_t* dest_extra_alpha_scan) {
+ dest_scan =
+ (uint8_t*)m_pDevice->GetScanline(span_top) + span_left + (span_left << 1);
+ dest_extra_alpha_scan =
+ (uint8_t*)m_pDevice->m_pAlphaMask->GetScanline(span_top) + span_left;
+ clip_scan = (uint8_t*)m_pClipMask->GetScanline(span_top - clip_top) -
+ clip_left + span_left;
+ int col_start = span_left < clip_left ? clip_left - span_left : 0;
+ int col_end =
+ (span_left + span_len) < clip_right ? span_len : (clip_right - span_left);
+ if (col_end < col_start)
+ return; // do nothing.
+ dest_scan += col_start + (col_start << 1);
#if 1
- int src_alpha = m_Alpha * cover_scan / 255;
- for (int col = col_start; col < col_end; col ++) {
- int src_alpha1 = src_alpha * clip_scan[col] / 255;
- if (!src_alpha1) {
- dest_extra_alpha_scan++;
- dest_scan += 3;
- continue;
- }
- if (src_alpha1 == 255) {
- *dest_scan++ = (uint8_t)m_Blue;
- *dest_scan++ = (uint8_t)m_Green;
- *dest_scan++ = (uint8_t)m_Red;
- *dest_extra_alpha_scan++ = (uint8_t)m_Alpha;
- } else {
- // Dest format: Rgba
- // calculate destination alpha (it's union of source and dest alpha)
- uint8_t dest_alpha = (*dest_extra_alpha_scan) + src_alpha1 -
- (*dest_extra_alpha_scan) * src_alpha1 / 255;
- *dest_extra_alpha_scan++ = dest_alpha;
- int alpha_ratio = src_alpha1*255/dest_alpha;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Blue, alpha_ratio);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Green, alpha_ratio);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Red, alpha_ratio);
- dest_scan ++;
- }
- }
+ int src_alpha = m_Alpha * cover_scan / 255;
+ for (int col = col_start; col < col_end; col++) {
+ int src_alpha1 = src_alpha * clip_scan[col] / 255;
+ if (!src_alpha1) {
+ dest_extra_alpha_scan++;
+ dest_scan += 3;
+ continue;
+ }
+ if (src_alpha1 == 255) {
+ *dest_scan++ = (uint8_t)m_Blue;
+ *dest_scan++ = (uint8_t)m_Green;
+ *dest_scan++ = (uint8_t)m_Red;
+ *dest_extra_alpha_scan++ = (uint8_t)m_Alpha;
+ } else {
+ // Dest format: Rgba
+ // calculate destination alpha (it's union of source and dest alpha)
+ uint8_t dest_alpha = (*dest_extra_alpha_scan) + src_alpha1 -
+ (*dest_extra_alpha_scan) * src_alpha1 / 255;
+ *dest_extra_alpha_scan++ = dest_alpha;
+ int alpha_ratio = src_alpha1 * 255 / dest_alpha;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Blue, alpha_ratio);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Green, alpha_ratio);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Red, alpha_ratio);
+ dest_scan++;
+ }
+ }
#else
- if (m_bFullCover) {
- for (int col = col_start; col < col_end; col ++) {
- int src_alpha = m_Alpha * clip_scan[col] / 255;
- if (!src_alpha) {
- dest_extra_alpha_scan++;
- dest_scan += 3;
- continue;
- }
- if (src_alpha == 255) {
- *dest_scan++ = (uint8_t)m_Blue;
- *dest_scan++ = (uint8_t)m_Green;
- *dest_scan++ = (uint8_t)m_Red;
- *dest_extra_alpha_scan++ = (uint8_t)m_Alpha;
- } else {
- // Dest format: Rgba
- // calculate destination alpha (it's union of source and dest alpha)
- uint8_t dest_alpha = (*dest_extra_alpha_scan) + src_alpha -
- (*dest_extra_alpha_scan) * src_alpha / 255;
- *dest_extra_alpha_scan++ = dest_alpha;
- int alpha_ratio = src_alpha*255/dest_alpha;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Blue, alpha_ratio);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Green, alpha_ratio);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Red, alpha_ratio);
- dest_scan ++;
- }
- }
- } else {
- int src_alpha = m_Alpha * cover_scan / 255;
- for (int col = col_start; col < col_end; col ++) {
- int src_alpha1 = m_Alpha * cover_scan * clip_scan[col] / 255;
- if (!src_alpha1) {
- dest_extra_alpha_scan++;
- dest_scan += 3;
- continue;
- }
- if (src_alpha1 == 255) {
- *dest_scan++ = (uint8_t)m_Blue;
- *dest_scan++ = (uint8_t)m_Green;
- *dest_scan++ = (uint8_t)m_Red;
- *dest_extra_alpha_scan++ = (uint8_t)m_Alpha;
- } else {
- // Dest format: Rgba
- // calculate destination alpha (it's union of source and dest alpha)
- uint8_t dest_alpha = (*dest_extra_alpha_scan) + src_alpha1 -
- (*dest_extra_alpha_scan) * src_alpha1 / 255;
- *dest_extra_alpha_scan++ = dest_alpha;
- int alpha_ratio = src_alpha1*255/dest_alpha;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Blue, alpha_ratio);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Green, alpha_ratio);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Red, alpha_ratio);
- dest_scan ++;
- }
- }
- }
-#endif
+ if (m_bFullCover) {
+ for (int col = col_start; col < col_end; col++) {
+ int src_alpha = m_Alpha * clip_scan[col] / 255;
+ if (!src_alpha) {
+ dest_extra_alpha_scan++;
+ dest_scan += 3;
+ continue;
+ }
+ if (src_alpha == 255) {
+ *dest_scan++ = (uint8_t)m_Blue;
+ *dest_scan++ = (uint8_t)m_Green;
+ *dest_scan++ = (uint8_t)m_Red;
+ *dest_extra_alpha_scan++ = (uint8_t)m_Alpha;
+ } else {
+ // Dest format: Rgba
+ // calculate destination alpha (it's union of source and dest alpha)
+ uint8_t dest_alpha = (*dest_extra_alpha_scan) + src_alpha -
+ (*dest_extra_alpha_scan) * src_alpha / 255;
+ *dest_extra_alpha_scan++ = dest_alpha;
+ int alpha_ratio = src_alpha * 255 / dest_alpha;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Blue, alpha_ratio);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Green, alpha_ratio);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Red, alpha_ratio);
+ dest_scan++;
+ }
+ }
+ } else {
+ int src_alpha = m_Alpha * cover_scan / 255;
+ for (int col = col_start; col < col_end; col++) {
+ int src_alpha1 = m_Alpha * cover_scan * clip_scan[col] / 255;
+ if (!src_alpha1) {
+ dest_extra_alpha_scan++;
+ dest_scan += 3;
+ continue;
+ }
+ if (src_alpha1 == 255) {
+ *dest_scan++ = (uint8_t)m_Blue;
+ *dest_scan++ = (uint8_t)m_Green;
+ *dest_scan++ = (uint8_t)m_Red;
+ *dest_extra_alpha_scan++ = (uint8_t)m_Alpha;
+ } else {
+ // Dest format: Rgba
+ // calculate destination alpha (it's union of source and dest alpha)
+ uint8_t dest_alpha = (*dest_extra_alpha_scan) + src_alpha1 -
+ (*dest_extra_alpha_scan) * src_alpha1 / 255;
+ *dest_extra_alpha_scan++ = dest_alpha;
+ int alpha_ratio = src_alpha1 * 255 / dest_alpha;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Blue, alpha_ratio);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Green, alpha_ratio);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Red, alpha_ratio);
+ dest_scan++;
+ }
}
- /*-----------------------------------------------------------------------------------------------------*/
+ }
+#endif
+}
+/*-----------------------------------------------------------------------------------------------------*/
- // A general alpha merge function (with clipping mask). Cmyka/Cmyk device.
- void CFX_SkiaRenderer::CompositeSpanCMYK(uint8_t* dest_scan, uint8_t* ori_scan,int Bpp,
- int span_left, int span_len, int span_top, uint8_t cover_scan,
- int clip_top, int clip_left, int clip_right, uint8_t* clip_scan,
- uint8_t* dest_extra_alpha_scan)
- {
- ASSERT(!m_bRgbByteOrder);
- // Cmyk(a)
- int col_start = span_left < clip_left ? clip_left - span_left : 0;
- int col_end = (span_left + span_len) < clip_right ? span_len : (clip_right - span_left);
- if (col_end < col_start) return; // do nothing.
- dest_scan += col_start * 4;
- Bpp; // for avoid compile warning.
+// A general alpha merge function (with clipping mask). Cmyka/Cmyk device.
+void CFX_SkiaRenderer::CompositeSpanCMYK(uint8_t* dest_scan,
+ uint8_t* ori_scan,
+ int Bpp,
+ int span_left,
+ int span_len,
+ int span_top,
+ uint8_t cover_scan,
+ int clip_top,
+ int clip_left,
+ int clip_right,
+ uint8_t* clip_scan,
+ uint8_t* dest_extra_alpha_scan) {
+ ASSERT(!m_bRgbByteOrder);
+ // Cmyk(a)
+ int col_start = span_left < clip_left ? clip_left - span_left : 0;
+ int col_end =
+ (span_left + span_len) < clip_right ? span_len : (clip_right - span_left);
+ if (col_end < col_start)
+ return; // do nothing.
+ dest_scan += col_start * 4;
+ Bpp; // for avoid compile warning.
- if (dest_extra_alpha_scan) {
- // CMYKa
- for (int col = col_start; col < col_end; col ++) {
- int src_alpha;
- if (m_bFullCover) {
- if (clip_scan)
- src_alpha = m_Alpha * clip_scan[col] / 255;
- else
- src_alpha = m_Alpha;
- } else {
- if (clip_scan)
- src_alpha = m_Alpha * cover_scan * clip_scan[col] / 255 / 255;
- else
- src_alpha = m_Alpha * cover_scan / 255;
- }
+ if (dest_extra_alpha_scan) {
+ // CMYKa
+ for (int col = col_start; col < col_end; col++) {
+ int src_alpha;
+ if (m_bFullCover) {
+ if (clip_scan)
+ src_alpha = m_Alpha * clip_scan[col] / 255;
+ else
+ src_alpha = m_Alpha;
+ } else {
+ if (clip_scan)
+ src_alpha = m_Alpha * cover_scan * clip_scan[col] / 255 / 255;
+ else
+ src_alpha = m_Alpha * cover_scan / 255;
+ }
- if (src_alpha) {
- if (src_alpha == 255) {
- *(FX_CMYK*)dest_scan = m_Color;
- *dest_extra_alpha_scan = (uint8_t)m_Alpha;
- } else {
- // Dest format: Cmyka
- // calculate destination alpha (it's union of source and dest alpha)
- uint8_t dest_alpha = (*dest_extra_alpha_scan) + src_alpha -
- (*dest_extra_alpha_scan) * src_alpha / 255;
- *dest_extra_alpha_scan++ = dest_alpha;
- int alpha_ratio = src_alpha*255/dest_alpha;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Red, alpha_ratio);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Green, alpha_ratio);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Blue, alpha_ratio);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Gray, alpha_ratio);
- dest_scan ++;
- continue;
- }
- }
- dest_extra_alpha_scan++;
- dest_scan += 4;
- }
+ if (src_alpha) {
+ if (src_alpha == 255) {
+ *(FX_CMYK*)dest_scan = m_Color;
+ *dest_extra_alpha_scan = (uint8_t)m_Alpha;
} else {
- // CMYK
- for (int col = col_start; col < col_end; col ++) {
- int src_alpha;
- if (clip_scan)
- src_alpha = m_Alpha * cover_scan * clip_scan[col] / 255 / 255;
- else
- src_alpha = m_Alpha * cover_scan / 255;
-
- if (src_alpha) {
- if (src_alpha == 255) {
- *(FX_CMYK*)dest_scan = m_Color;
- } else {
- // Dest format: cmyk
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Red, src_alpha);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Green, src_alpha);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Blue, src_alpha);
- dest_scan ++;
- *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Gray, src_alpha);
- dest_scan ++;
- continue;
- }
- }
- dest_scan += 4;
- }
+ // Dest format: Cmyka
+ // calculate destination alpha (it's union of source and dest alpha)
+ uint8_t dest_alpha = (*dest_extra_alpha_scan) + src_alpha -
+ (*dest_extra_alpha_scan) * src_alpha / 255;
+ *dest_extra_alpha_scan++ = dest_alpha;
+ int alpha_ratio = src_alpha * 255 / dest_alpha;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Red, alpha_ratio);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Green, alpha_ratio);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Blue, alpha_ratio);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Gray, alpha_ratio);
+ dest_scan++;
+ continue;
}
+ }
+ dest_extra_alpha_scan++;
+ dest_scan += 4;
}
+ } else {
+ // CMYK
+ for (int col = col_start; col < col_end; col++) {
+ int src_alpha;
+ if (clip_scan)
+ src_alpha = m_Alpha * cover_scan * clip_scan[col] / 255 / 255;
+ else
+ src_alpha = m_Alpha * cover_scan / 255;
-
-
- //--------------------------------------------------------------------
- FX_BOOL CFX_SkiaRenderer::Init(CFX_DIBitmap* pDevice, CFX_DIBitmap* pOriDevice, const CFX_ClipRgn* pClipRgn, FX_DWORD color, FX_BOOL bFullCover, FX_BOOL bRgbByteOrder,
- int alpha_flag, void* pIccTransform) //The alpha flag must be fill_flag if exist.
- {
- m_pDevice = pDevice;
- m_pClipRgn = pClipRgn;
- m_bRgbByteOrder = bRgbByteOrder;
- m_pOriDevice = pOriDevice;
- m_pDestScan = NULL;
- m_pDestExtraAlphaScan = NULL;
- m_pOriScan = NULL;
- m_pClipScan = NULL;
- composite_span = NULL;
- if (m_pClipRgn)
- m_ClipBox = m_pClipRgn->GetBox();
- else {
- m_ClipBox.left = m_ClipBox.top = 0;
- m_ClipBox.right = m_pDevice->GetWidth();
- m_ClipBox.bottom = m_pDevice->GetHeight();
- }
- m_pClipMask = NULL;
- if (m_pClipRgn && m_pClipRgn->GetType() == CFX_ClipRgn::MaskF)
- {
- m_pClipMask = m_pClipRgn->GetMask();
- m_pClipScan = m_pClipMask->GetBuffer();
+ if (src_alpha) {
+ if (src_alpha == 255) {
+ *(FX_CMYK*)dest_scan = m_Color;
+ } else {
+ // Dest format: cmyk
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Red, src_alpha);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Green, src_alpha);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Blue, src_alpha);
+ dest_scan++;
+ *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, m_Gray, src_alpha);
+ dest_scan++;
+ continue;
}
- if (m_pDevice->m_pAlphaMask)
- m_pDestExtraAlphaScan = m_pDevice->m_pAlphaMask->GetBuffer();
- if (m_pOriDevice)
- m_pOriScan = m_pOriDevice->GetBuffer();
- m_pDestScan = m_pDevice->GetBuffer();
-
- m_bFullCover = bFullCover;
+ }
+ dest_scan += 4;
+ }
+ }
+}
- FX_BOOL bObjectCMYK = FXGETFLAG_COLORTYPE(alpha_flag);
- FX_BOOL bDeviceCMYK = pDevice->IsCmykImage();
+//--------------------------------------------------------------------
+FX_BOOL CFX_SkiaRenderer::Init(
+ CFX_DIBitmap* pDevice,
+ CFX_DIBitmap* pOriDevice,
+ const CFX_ClipRgn* pClipRgn,
+ FX_DWORD color,
+ FX_BOOL bFullCover,
+ FX_BOOL bRgbByteOrder,
+ int alpha_flag,
+ void* pIccTransform) // The alpha flag must be fill_flag if exist.
+{
+ m_pDevice = pDevice;
+ m_pClipRgn = pClipRgn;
+ m_bRgbByteOrder = bRgbByteOrder;
+ m_pOriDevice = pOriDevice;
+ m_pDestScan = NULL;
+ m_pDestExtraAlphaScan = NULL;
+ m_pOriScan = NULL;
+ m_pClipScan = NULL;
+ composite_span = NULL;
+ if (m_pClipRgn)
+ m_ClipBox = m_pClipRgn->GetBox();
+ else {
+ m_ClipBox.left = m_ClipBox.top = 0;
+ m_ClipBox.right = m_pDevice->GetWidth();
+ m_ClipBox.bottom = m_pDevice->GetHeight();
+ }
+ m_pClipMask = NULL;
+ if (m_pClipRgn && m_pClipRgn->GetType() == CFX_ClipRgn::MaskF) {
+ m_pClipMask = m_pClipRgn->GetMask();
+ m_pClipScan = m_pClipMask->GetBuffer();
+ }
+ if (m_pDevice->m_pAlphaMask)
+ m_pDestExtraAlphaScan = m_pDevice->m_pAlphaMask->GetBuffer();
+ if (m_pOriDevice)
+ m_pOriScan = m_pOriDevice->GetBuffer();
+ m_pDestScan = m_pDevice->GetBuffer();
- m_Alpha = bObjectCMYK ? FXGETFLAG_ALPHA_FILL(alpha_flag) : FXARGB_A(color);
+ m_bFullCover = bFullCover;
- ICodec_IccModule* pIccModule = NULL;
- // No lcms engine, we skip the transform
- if (!CFX_GEModule::Get()->GetCodecModule() || !CFX_GEModule::Get()->GetCodecModule()->GetIccModule())
- pIccTransform = NULL;
- else
- pIccModule = CFX_GEModule::Get()->GetCodecModule()->GetIccModule();
+ FX_BOOL bObjectCMYK = FXGETFLAG_COLORTYPE(alpha_flag);
+ FX_BOOL bDeviceCMYK = pDevice->IsCmykImage();
- if (m_pDevice->GetBPP() == 8) { // Gray(a) device
- ASSERT(!m_bRgbByteOrder);
- if (m_pDevice->IsAlphaMask()) {
- //Alpha Mask
- m_Gray = 255;
- } else {
- //Gray(a) device
- if (pIccTransform) {
- uint8_t gray;
- color = bObjectCMYK ? FXCMYK_TODIB(color) : FXARGB_TODIB(color);
- pIccModule->TranslateScanline(pIccTransform, &gray, (const uint8_t*)&color, 1);
- m_Gray = gray;
- } else {
- if (bObjectCMYK) {
- uint8_t r, g, b;
- AdobeCMYK_to_sRGB1(FXSYS_GetCValue(color), FXSYS_GetMValue(color), FXSYS_GetYValue(color), FXSYS_GetKValue(color),
- r, g, b);
- m_Gray = FXRGB2GRAY(r, g, b);
- } else {
- m_Gray = FXRGB2GRAY(FXARGB_R(color), FXARGB_G(color), FXARGB_B(color));
- }
- }
- }
- } else {
- if (bDeviceCMYK) { // Cmyk(a) Device
- ASSERT(!m_bRgbByteOrder);
- //TODO... opt for cmyk
- composite_span = &CFX_SkiaRenderer::CompositeSpanCMYK;
- if (bObjectCMYK) {
- m_Color = FXCMYK_TODIB(color);
- if (pIccTransform)
- pIccModule->TranslateScanline(pIccTransform, (uint8_t*)&m_Color, (const uint8_t*)&m_Color, 1);
- } else { // Object RGB
- if (!pIccTransform)
- return FALSE;
- color = FXARGB_TODIB(color);
- pIccModule->TranslateScanline(pIccTransform, (uint8_t*)&m_Color, (const uint8_t*)&color, 1);
- }
- m_Red = ((uint8_t*)&m_Color)[0];
- m_Green = ((uint8_t*)&m_Color)[1];
- m_Blue = ((uint8_t*)&m_Color)[2];
- m_Gray = ((uint8_t*)&m_Color)[3];
- return TRUE;
- }
- if (pIccTransform) {
- color = bObjectCMYK ? FXCMYK_TODIB(color) : FXARGB_TODIB(color);
- pIccModule->TranslateScanline(pIccTransform, (uint8_t*)&m_Color, (const uint8_t*)&color, 1);
- ((uint8_t*)&m_Color)[3] = m_Alpha;
- m_Red = ((uint8_t*)&m_Color)[2];
- m_Green = ((uint8_t*)&m_Color)[1];
- m_Blue = ((uint8_t*)&m_Color)[0];
- // Need Johnson to improvement it.
- if (m_bRgbByteOrder) {
- // swap
- m_Red = ((uint8_t*)&m_Color)[0];
- m_Blue = ((uint8_t*)&m_Color)[2];
- m_Color = FXARGB_TODIB(m_Color);
- m_Color = FXARGB_TOBGRORDERDIB(m_Color);
- }
- } else {
- if (bObjectCMYK) {
- uint8_t r, g, b;
- AdobeCMYK_to_sRGB1(FXSYS_GetCValue(color), FXSYS_GetMValue(color), FXSYS_GetYValue(color), FXSYS_GetKValue(color),
- r, g, b);
- m_Color = FXARGB_MAKE(m_Alpha, r, g, b);
- if (m_bRgbByteOrder){
- m_Color = FXARGB_TOBGRORDERDIB(m_Color);
- m_Red = b; m_Green = g; m_Blue = r;//
- }else {
- m_Color = FXARGB_TODIB(m_Color);
- m_Red = r; m_Green = g; m_Blue = b;//
- }
- } else {
- if (m_bRgbByteOrder){
- m_Color = FXARGB_TOBGRORDERDIB(color);
- ArgbDecode(color, m_Alpha, m_Blue, m_Green, m_Red); //
- }else {
- m_Color = FXARGB_TODIB(color);
- ArgbDecode(color, m_Alpha, m_Red, m_Green, m_Blue);
- }
- }
- }
- }
- // Get palette transparency selector
- m_ProcessFilter = (m_pOriDevice? 1 : 0) /* has Ori Device flag */
- + (m_pDevice->GetBPP() >= 8 ? 2 : 0) /* bpp flag */
- + (m_pClipMask? 4 : 0) /* has clip region flag */
- + (m_pDevice->m_pAlphaMask? 8 : 0); /* has Alpha Mask chanel flag */
- switch(m_ProcessFilter) {
- case 0:
- composite_span = &CFX_SkiaRenderer::CompositeSpan1bpp_0;
- break;
- case 2:
- {
- if (m_pDevice->GetBPP() == 8)
- composite_span = &CFX_SkiaRenderer::CompositeSpanGray_2;
- else if (m_pDevice->GetBPP() == 24)
- composite_span = &CFX_SkiaRenderer::CompositeSpanRGB24_2;
- else
- composite_span = m_pDevice->HasAlpha()?&CFX_SkiaRenderer::CompositeSpanARGB_2 : &CFX_SkiaRenderer::CompositeSpanRGB32_2;
- }
- break;
- case 3:
- {
- if (m_pDevice->GetBPP() == 8)
- composite_span = &CFX_SkiaRenderer::CompositeSpanGray_3;
- else if (m_pDevice->GetBPP() == 24)
- composite_span = &CFX_SkiaRenderer::CompositeSpanRGB24_3;
- else
- composite_span = m_pDevice->HasAlpha()?&CFX_SkiaRenderer::CompositeSpanARGB_3 : &CFX_SkiaRenderer::CompositeSpanRGB32_3;
- }
- break;
- case 4:
- composite_span = &CFX_SkiaRenderer::CompositeSpan1bpp_4;
- break;
- case 6:
- {
- if (m_pDevice->GetBPP() == 8)
- composite_span = &CFX_SkiaRenderer::CompositeSpanGray_6;
- else if (m_pDevice->GetBPP() == 24)
- composite_span = &CFX_SkiaRenderer::CompositeSpanRGB24_6;
- else
- composite_span = m_pDevice->HasAlpha()?&CFX_SkiaRenderer::CompositeSpanARGB_6 : &CFX_SkiaRenderer::CompositeSpanRGB32_6;
- }
- break;
- case 7:
- {
- if (m_pDevice->GetBPP() == 8)
- composite_span = &CFX_SkiaRenderer::CompositeSpanGray_7;
- else if (m_pDevice->GetBPP() == 24)
- composite_span = &CFX_SkiaRenderer::CompositeSpanRGB24_7;
- else
- composite_span = m_pDevice->HasAlpha()?&CFX_SkiaRenderer::CompositeSpanARGB_7 : &CFX_SkiaRenderer::CompositeSpanRGB32_7;
- }
- break;
- case 1:
- case 5:
- case 8:
- case 9:
- case 11:
- case 12:
- case 13:
- case 15:
- //TODO...
- break;
- case 10:
- composite_span = &CFX_SkiaRenderer::CompositeSpanRGB24_10;
- break;
- case 14:
- composite_span = &CFX_SkiaRenderer::CompositeSpanRGB24_14;
- break;
- }
- if (composite_span == NULL)
- return FALSE;
- return TRUE;
- }
+ m_Alpha = bObjectCMYK ? FXGETFLAG_ALPHA_FILL(alpha_flag) : FXARGB_A(color);
- /*----------------------------------------------------------------------------------------------------*/
- void CFX_SkiaA8Renderer::blitAntiH(int x, int y, const SkAlpha antialias[], const int16_t runs[])
- {
- FXSYS_assert(m_pDevice);
- int dst_y = y - m_Top;
- if (dst_y < 0 || dst_y >= m_pDevice->GetHeight())
- return;
+ ICodec_IccModule* pIccModule = NULL;
+ // No lcms engine, we skip the transform
+ if (!CFX_GEModule::Get()->GetCodecModule() ||
+ !CFX_GEModule::Get()->GetCodecModule()->GetIccModule())
+ pIccTransform = NULL;
+ else
+ pIccModule = CFX_GEModule::Get()->GetCodecModule()->GetIccModule();
- uint8_t* dest_scan = m_pDevice->GetBuffer() + m_pDevice->GetPitch() * dst_y;
- uint8_t* dest_pos = dest_scan;
- while (1)
- {
- if (x >= m_dstWidth)
- return;
- int width = runs[0];
- SkASSERT(width >= 0);
- if (width <= 0)
- return;
- unsigned aa = antialias[0];
- if (aa) {
- int col_start = x < m_Left ? 0 : x - m_Left;
- int col_end = x + width;
- col_end = col_end < m_dstWidth ? col_end - m_Left: m_pDevice->GetWidth();
- int result = col_end - col_start;
- if (result > 0) {
- dest_pos = dest_scan + col_start;
- if (result >= 4)
- FXSYS_memset(dest_pos, FXARGB_MAKE(aa, aa, aa, aa),result);
- else
- FXSYS_memset(dest_pos,aa,result);
- }
- }
- runs += width;
- antialias += width;
- x += width;
+ if (m_pDevice->GetBPP() == 8) { // Gray(a) device
+ ASSERT(!m_bRgbByteOrder);
+ if (m_pDevice->IsAlphaMask()) {
+ // Alpha Mask
+ m_Gray = 255;
+ } else {
+ // Gray(a) device
+ if (pIccTransform) {
+ uint8_t gray;
+ color = bObjectCMYK ? FXCMYK_TODIB(color) : FXARGB_TODIB(color);
+ pIccModule->TranslateScanline(pIccTransform, &gray,
+ (const uint8_t*)&color, 1);
+ m_Gray = gray;
+ } else {
+ if (bObjectCMYK) {
+ uint8_t r, g, b;
+ AdobeCMYK_to_sRGB1(FXSYS_GetCValue(color), FXSYS_GetMValue(color),
+ FXSYS_GetYValue(color), FXSYS_GetKValue(color), r,
+ g, b);
+ m_Gray = FXRGB2GRAY(r, g, b);
+ } else {
+ m_Gray =
+ FXRGB2GRAY(FXARGB_R(color), FXARGB_G(color), FXARGB_B(color));
}
+ }
}
- void CFX_SkiaA8Renderer::blitH(int x, int y, int width)
- {
- FXSYS_assert(m_pDevice);
- int dst_y = y - m_Top;
- if (dst_y < 0 || dst_y >= m_pDevice->GetHeight())
- return;
- if (x >= m_dstWidth)
- return;
- uint8_t* dest_scan = m_pDevice->GetBuffer() + m_pDevice->GetPitch() * dst_y;
- int col_start = x < m_Left ? 0 : x - m_Left;
- int col_end = x + width;
- col_end = col_end < m_dstWidth ? col_end - m_Left: m_pDevice->GetWidth();
- int result = col_end - col_start;
- if (result > 0) {
- uint8_t* dest_pos = dest_scan + col_start;
- if (result >= 4)
- FXSYS_memset(dest_pos, 0xffffffff,result);
- else
- FXSYS_memset(dest_pos,255,result);
- }
+ } else {
+ if (bDeviceCMYK) { // Cmyk(a) Device
+ ASSERT(!m_bRgbByteOrder);
+ // TODO... opt for cmyk
+ composite_span = &CFX_SkiaRenderer::CompositeSpanCMYK;
+ if (bObjectCMYK) {
+ m_Color = FXCMYK_TODIB(color);
+ if (pIccTransform)
+ pIccModule->TranslateScanline(pIccTransform, (uint8_t*)&m_Color,
+ (const uint8_t*)&m_Color, 1);
+ } else { // Object RGB
+ if (!pIccTransform)
+ return FALSE;
+ color = FXARGB_TODIB(color);
+ pIccModule->TranslateScanline(pIccTransform, (uint8_t*)&m_Color,
+ (const uint8_t*)&color, 1);
+ }
+ m_Red = ((uint8_t*)&m_Color)[0];
+ m_Green = ((uint8_t*)&m_Color)[1];
+ m_Blue = ((uint8_t*)&m_Color)[2];
+ m_Gray = ((uint8_t*)&m_Color)[3];
+ return TRUE;
}
- void CFX_SkiaA8Renderer::blitV(int x, int y, int height, SkAlpha alpha)
- {
- FXSYS_assert(alpha);
- if (alpha == 255) {
- blitRect(x, y, 1, height);
+ if (pIccTransform) {
+ color = bObjectCMYK ? FXCMYK_TODIB(color) : FXARGB_TODIB(color);
+ pIccModule->TranslateScanline(pIccTransform, (uint8_t*)&m_Color,
+ (const uint8_t*)&color, 1);
+ ((uint8_t*)&m_Color)[3] = m_Alpha;
+ m_Red = ((uint8_t*)&m_Color)[2];
+ m_Green = ((uint8_t*)&m_Color)[1];
+ m_Blue = ((uint8_t*)&m_Color)[0];
+ // Need Johnson to improvement it.
+ if (m_bRgbByteOrder) {
+ // swap
+ m_Red = ((uint8_t*)&m_Color)[0];
+ m_Blue = ((uint8_t*)&m_Color)[2];
+ m_Color = FXARGB_TODIB(m_Color);
+ m_Color = FXARGB_TOBGRORDERDIB(m_Color);
+ }
+ } else {
+ if (bObjectCMYK) {
+ uint8_t r, g, b;
+ AdobeCMYK_to_sRGB1(FXSYS_GetCValue(color), FXSYS_GetMValue(color),
+ FXSYS_GetYValue(color), FXSYS_GetKValue(color), r, g,
+ b);
+ m_Color = FXARGB_MAKE(m_Alpha, r, g, b);
+ if (m_bRgbByteOrder) {
+ m_Color = FXARGB_TOBGRORDERDIB(m_Color);
+ m_Red = b;
+ m_Green = g;
+ m_Blue = r; //
} else {
- int16_t runs[2];
- runs[0] = 1;
- runs[1] = 0;
- while (--height >= 0) {
- if (y >= m_dstHeight)
- return;
- blitAntiH(x, y ++, &alpha, runs);
- }
+ m_Color = FXARGB_TODIB(m_Color);
+ m_Red = r;
+ m_Green = g;
+ m_Blue = b; //
}
- }
- void CFX_SkiaA8Renderer::blitRect(int x, int y, int width, int height)
- {
- FXSYS_assert(m_pDevice);
- while (--height >= 0) {
- if (y >= m_dstHeight)
- return;
- blitH(x , y ++, width);
+ } else {
+ if (m_bRgbByteOrder) {
+ m_Color = FXARGB_TOBGRORDERDIB(color);
+ ArgbDecode(color, m_Alpha, m_Blue, m_Green, m_Red); //
+ } else {
+ m_Color = FXARGB_TODIB(color);
+ ArgbDecode(color, m_Alpha, m_Red, m_Green, m_Blue);
}
+ }
}
+ }
+ // Get palette transparency selector
+ m_ProcessFilter =
+ (m_pOriDevice ? 1 : 0) /* has Ori Device flag */
+ + (m_pDevice->GetBPP() >= 8 ? 2 : 0) /* bpp flag */
+ + (m_pClipMask ? 4 : 0) /* has clip region flag */
+ + (m_pDevice->m_pAlphaMask ? 8 : 0); /* has Alpha Mask chanel flag */
+ switch (m_ProcessFilter) {
+ case 0:
+ composite_span = &CFX_SkiaRenderer::CompositeSpan1bpp_0;
+ break;
+ case 2: {
+ if (m_pDevice->GetBPP() == 8)
+ composite_span = &CFX_SkiaRenderer::CompositeSpanGray_2;
+ else if (m_pDevice->GetBPP() == 24)
+ composite_span = &CFX_SkiaRenderer::CompositeSpanRGB24_2;
+ else
+ composite_span = m_pDevice->HasAlpha()
+ ? &CFX_SkiaRenderer::CompositeSpanARGB_2
+ : &CFX_SkiaRenderer::CompositeSpanRGB32_2;
+ } break;
+ case 3: {
+ if (m_pDevice->GetBPP() == 8)
+ composite_span = &CFX_SkiaRenderer::CompositeSpanGray_3;
+ else if (m_pDevice->GetBPP() == 24)
+ composite_span = &CFX_SkiaRenderer::CompositeSpanRGB24_3;
+ else
+ composite_span = m_pDevice->HasAlpha()
+ ? &CFX_SkiaRenderer::CompositeSpanARGB_3
+ : &CFX_SkiaRenderer::CompositeSpanRGB32_3;
+ } break;
+ case 4:
+ composite_span = &CFX_SkiaRenderer::CompositeSpan1bpp_4;
+ break;
+ case 6: {
+ if (m_pDevice->GetBPP() == 8)
+ composite_span = &CFX_SkiaRenderer::CompositeSpanGray_6;
+ else if (m_pDevice->GetBPP() == 24)
+ composite_span = &CFX_SkiaRenderer::CompositeSpanRGB24_6;
+ else
+ composite_span = m_pDevice->HasAlpha()
+ ? &CFX_SkiaRenderer::CompositeSpanARGB_6
+ : &CFX_SkiaRenderer::CompositeSpanRGB32_6;
+ } break;
+ case 7: {
+ if (m_pDevice->GetBPP() == 8)
+ composite_span = &CFX_SkiaRenderer::CompositeSpanGray_7;
+ else if (m_pDevice->GetBPP() == 24)
+ composite_span = &CFX_SkiaRenderer::CompositeSpanRGB24_7;
+ else
+ composite_span = m_pDevice->HasAlpha()
+ ? &CFX_SkiaRenderer::CompositeSpanARGB_7
+ : &CFX_SkiaRenderer::CompositeSpanRGB32_7;
+ } break;
+ case 1:
+ case 5:
+ case 8:
+ case 9:
+ case 11:
+ case 12:
+ case 13:
+ case 15:
+ // TODO...
+ break;
+ case 10:
+ composite_span = &CFX_SkiaRenderer::CompositeSpanRGB24_10;
+ break;
+ case 14:
+ composite_span = &CFX_SkiaRenderer::CompositeSpanRGB24_14;
+ break;
+ }
+ if (composite_span == NULL)
+ return FALSE;
+ return TRUE;
+}
- void CFX_SkiaA8Renderer::blitAntiRect(int x, int y, int width, int height,
- SkAlpha leftAlpha, SkAlpha rightAlpha)
- {
- blitV(x++, y, height, leftAlpha);
- if (width > 0) {
- blitRect(x, y, width, height);
- x += width;
- }
- blitV(x, y, height, rightAlpha);
- }
+/*----------------------------------------------------------------------------------------------------*/
+void CFX_SkiaA8Renderer::blitAntiH(int x,
+ int y,
+ const SkAlpha antialias[],
+ const int16_t runs[]) {
+ FXSYS_assert(m_pDevice);
+ int dst_y = y - m_Top;
+ if (dst_y < 0 || dst_y >= m_pDevice->GetHeight())
+ return;
- FX_BOOL CFX_SkiaA8Renderer::Init(CFX_DIBitmap* pDevice, int Left, int Top)
- {
- m_pDevice = pDevice;
- m_Left = Left;
- m_Top = Top;
- if (pDevice){
- m_dstWidth = m_Left + pDevice->GetWidth();
- m_dstHeight = m_Top + pDevice->GetHeight();
- }
- return TRUE;
+ uint8_t* dest_scan = m_pDevice->GetBuffer() + m_pDevice->GetPitch() * dst_y;
+ uint8_t* dest_pos = dest_scan;
+ while (1) {
+ if (x >= m_dstWidth)
+ return;
+ int width = runs[0];
+ SkASSERT(width >= 0);
+ if (width <= 0)
+ return;
+ unsigned aa = antialias[0];
+ if (aa) {
+ int col_start = x < m_Left ? 0 : x - m_Left;
+ int col_end = x + width;
+ col_end = col_end < m_dstWidth ? col_end - m_Left : m_pDevice->GetWidth();
+ int result = col_end - col_start;
+ if (result > 0) {
+ dest_pos = dest_scan + col_start;
+ if (result >= 4)
+ FXSYS_memset(dest_pos, FXARGB_MAKE(aa, aa, aa, aa), result);
+ else
+ FXSYS_memset(dest_pos, aa, result);
+ }
}
+ runs += width;
+ antialias += width;
+ x += width;
+ }
+}
+void CFX_SkiaA8Renderer::blitH(int x, int y, int width) {
+ FXSYS_assert(m_pDevice);
+ int dst_y = y - m_Top;
+ if (dst_y < 0 || dst_y >= m_pDevice->GetHeight())
+ return;
+ if (x >= m_dstWidth)
+ return;
+ uint8_t* dest_scan = m_pDevice->GetBuffer() + m_pDevice->GetPitch() * dst_y;
+ int col_start = x < m_Left ? 0 : x - m_Left;
+ int col_end = x + width;
+ col_end = col_end < m_dstWidth ? col_end - m_Left : m_pDevice->GetWidth();
+ int result = col_end - col_start;
+ if (result > 0) {
+ uint8_t* dest_pos = dest_scan + col_start;
+ if (result >= 4)
+ FXSYS_memset(dest_pos, 0xffffffff, result);
+ else
+ FXSYS_memset(dest_pos, 255, result);
+ }
+}
+void CFX_SkiaA8Renderer::blitV(int x, int y, int height, SkAlpha alpha) {
+ FXSYS_assert(alpha);
+ if (alpha == 255) {
+ blitRect(x, y, 1, height);
+ } else {
+ int16_t runs[2];
+ runs[0] = 1;
+ runs[1] = 0;
+ while (--height >= 0) {
+ if (y >= m_dstHeight)
+ return;
+ blitAntiH(x, y++, &alpha, runs);
+ }
+ }
+}
+void CFX_SkiaA8Renderer::blitRect(int x, int y, int width, int height) {
+ FXSYS_assert(m_pDevice);
+ while (--height >= 0) {
+ if (y >= m_dstHeight)
+ return;
+ blitH(x, y++, width);
+ }
+}
+
+void CFX_SkiaA8Renderer::blitAntiRect(int x,
+ int y,
+ int width,
+ int height,
+ SkAlpha leftAlpha,
+ SkAlpha rightAlpha) {
+ blitV(x++, y, height, leftAlpha);
+ if (width > 0) {
+ blitRect(x, y, width, height);
+ x += width;
+ }
+ blitV(x, y, height, rightAlpha);
+}
+
+FX_BOOL CFX_SkiaA8Renderer::Init(CFX_DIBitmap* pDevice, int Left, int Top) {
+ m_pDevice = pDevice;
+ m_Left = Left;
+ m_Top = Top;
+ if (pDevice) {
+ m_dstWidth = m_Left + pDevice->GetWidth();
+ m_dstHeight = m_Top + pDevice->GetHeight();
+ }
+ return TRUE;
+}
#endif
diff --git a/core/src/fxge/skia/fx_skia_blitter_new.h b/core/src/fxge/skia/fx_skia_blitter_new.h
index e60c6398d2..36a6b438f1 100644
--- a/core/src/fxge/skia/fx_skia_blitter_new.h
+++ b/core/src/fxge/skia/fx_skia_blitter_new.h
@@ -6,224 +6,516 @@
#define CORE_SRC_FXGE_SKIA_FX_SKIA_BLITTER_NEW_H_
#if defined(_SKIA_SUPPORT_)
-class CFX_SkiaRenderer : public SkBlitter
-{
-protected:
- int m_Alpha,
- m_Red, // Or the complementary-color, Cyan
- m_Green, // Magenta
- m_Blue, // Yellow
- m_Gray; // Black
- FX_DWORD m_Color; // FX_ARGB or FX_CMYK
- FX_BOOL m_bFullCover;
- int m_ProcessFilter;
- FX_BOOL m_bRgbByteOrder;
-
- FX_RECT m_ClipBox;
- CFX_DIBitmap* m_pDevice;
- CFX_DIBitmap* m_pOriDevice;
- const CFX_ClipRgn* m_pClipRgn;
- const CFX_DIBitmap* m_pClipMask;
-
- uint8_t* m_pDestScan;
- uint8_t* m_pDestExtraAlphaScan;
- uint8_t* m_pOriScan;
- uint8_t* m_pClipScan;
-
- void (CFX_SkiaRenderer::*composite_span)(uint8_t*,uint8_t*,int,int,int,int,uint8_t,int,int,int,uint8_t*,uint8_t*);
-public:
-
- //--------------------------------------------------------------------
- virtual void blitAntiH(int x, int y, const SkAlpha antialias[], const int16_t runs[]);
- virtual void blitH(int x, int y, int width);
- virtual void blitV(int x, int y, int height, SkAlpha alpha);
- virtual void blitRect(int x, int y, int width, int height);
- virtual void blitAntiRect(int x, int y, int width, int height, SkAlpha leftAlpha, SkAlpha rightAlpha);
-
- /*------------------------------------------------------------------------------------------------------*/
- // A general alpha merge function (with clipping mask). Gray device.
- void CompositeSpan1bpp_0(uint8_t* dest_scan, uint8_t* ori_scan,int Bpp,
- int span_left, int span_len, int span_top, uint8_t cover_scan,
- int clip_top, int clip_left, int clip_right, uint8_t* clip_scan,
- uint8_t* dest_extra_alpha_scan);
- void CompositeSpan1bpp_1(uint8_t* dest_scan, uint8_t* ori_scan,int Bpp,
- int span_left, int span_len, int span_top, uint8_t cover_scan,
- int clip_top, int clip_left, int clip_right, uint8_t* clip_scan,
- uint8_t* dest_extra_alpha_scan);
- void CompositeSpan1bpp_4(uint8_t* dest_scan, uint8_t* ori_scan,int Bpp,
- int span_left, int span_len, int span_top, uint8_t cover_scan,
- int clip_top, int clip_left, int clip_right, uint8_t* clip_scan,
- uint8_t* dest_extra_alpha_scan);
- void CompositeSpan1bpp_5(uint8_t* dest_scan, uint8_t* ori_scan,int Bpp,
- int span_left, int span_len, int span_top, uint8_t cover_scan,
- int clip_top, int clip_left, int clip_right, uint8_t* clip_scan,
- uint8_t* dest_extra_alpha_scan);
- void CompositeSpan1bpp_8(uint8_t* dest_scan, uint8_t* ori_scan,int Bpp,
- int span_left, int span_len, int span_top, uint8_t cover_scan,
- int clip_top, int clip_left, int clip_right, uint8_t* clip_scan,
- uint8_t* dest_extra_alpha_scan);
- void CompositeSpan1bpp_9(uint8_t* dest_scan, uint8_t* ori_scan,int Bpp,
- int span_left, int span_len, int span_top, uint8_t cover_scan,
- int clip_top, int clip_left, int clip_right, uint8_t* clip_scan,
- uint8_t* dest_extra_alpha_scan);
- void CompositeSpan1bpp_12(uint8_t* dest_scan, uint8_t* ori_scan,int Bpp,
- int span_left, int span_len, int span_top, uint8_t cover_scan,
- int clip_top, int clip_left, int clip_right, uint8_t* clip_scan,
- uint8_t* dest_extra_alpha_scan);
- void CompositeSpan1bpp_13(uint8_t* dest_scan, uint8_t* ori_scan,int Bpp,
- int span_left, int span_len, int span_top, uint8_t cover_scan,
- int clip_top, int clip_left, int clip_right, uint8_t* clip_scan,
- uint8_t* dest_extra_alpha_scan);
-
- /*--------------------------------------------------------------------------------------------------------*/
-
- // A general alpha merge function (with clipping mask). Gray device.
- void CompositeSpanGray_2(uint8_t* dest_scan, uint8_t* ori_scan,int Bpp,
- int span_left, int span_len, int span_top, uint8_t cover_scan,
- int clip_top, int clip_left, int clip_right, uint8_t* clip_scan,
- uint8_t* dest_extra_alpha_scan);
-
- void CompositeSpanGray_3(uint8_t* dest_scan, uint8_t* ori_scan,int Bpp,
- int span_left, int span_len, int span_top, uint8_t cover_scan,
- int clip_top, int clip_left, int clip_right, uint8_t* clip_scan,
- uint8_t* dest_extra_alpha_scan);
-
- void CompositeSpanGray_6(uint8_t* dest_scan, uint8_t* ori_scan,int Bpp,
- int span_left, int span_len, int span_top, uint8_t cover_scan,
- int clip_top, int clip_left, int clip_right, uint8_t* clip_scan,
- uint8_t* dest_extra_alpha_scan);
-
- void CompositeSpanGray_7(uint8_t* dest_scan, uint8_t* ori_scan,int Bpp,
- int span_left, int span_len, int span_top, uint8_t cover_scan,
- int clip_top, int clip_left, int clip_right, uint8_t* clip_scan,
- uint8_t* dest_extra_alpha_scan);
-
- void CompositeSpanGray_10(uint8_t* dest_scan, uint8_t* ori_scan,int Bpp,
- int span_left, int span_len, int span_top, uint8_t cover_scan,
- int clip_top, int clip_left, int clip_right, uint8_t* clip_scan,
- uint8_t* dest_extra_alpha_scan);
-
-
- void CompositeSpanGray_11(uint8_t* dest_scan, uint8_t* ori_scan,int Bpp,
- int span_left, int span_len, int span_top, uint8_t cover_scan,
- int clip_top, int clip_left, int clip_right, uint8_t* clip_scan,
- uint8_t* dest_extra_alpha_scan);
-
- void CompositeSpanGray_14(uint8_t* dest_scan, uint8_t* ori_scan,int Bpp,
- int span_left, int span_len, int span_top, uint8_t cover_scan,
- int clip_top, int clip_left, int clip_right, uint8_t* clip_scan,
- uint8_t* dest_extra_alpha_scan);
-
- void CompositeSpanGray_15(uint8_t* dest_scan, uint8_t* ori_scan,int Bpp,
- int span_left, int span_len, int span_top, uint8_t cover_scan,
- int clip_top, int clip_left, int clip_right, uint8_t* clip_scan,
- uint8_t* dest_extra_alpha_scan);
-
- /*--------------------------------------------------------------------------------------------------------*/
- void CompositeSpanARGB_2(uint8_t* dest_scan, uint8_t* ori_scan,int Bpp,
- int span_left, int span_len, int span_top, uint8_t cover_scan,
- int clip_top, int clip_left, int clip_right, uint8_t* clip_scan,
- uint8_t* dest_extra_alpha_scan);
-
- void CompositeSpanARGB_3(uint8_t* dest_scan, uint8_t* ori_scan,int Bpp,
- int span_left, int span_len, int span_top, uint8_t cover_scan,
- int clip_top, int clip_left, int clip_right, uint8_t* clip_scan,
- uint8_t* dest_extra_alpha_scan);
-
-
- void CompositeSpanARGB_6(uint8_t* dest_scan, uint8_t* ori_scan,int Bpp,
- int span_left, int span_len, int span_top, uint8_t cover_scan,
- int clip_top, int clip_left, int clip_right, uint8_t* clip_scan,
- uint8_t* dest_extra_alpha_scan);
-
-
- void CompositeSpanARGB_7(uint8_t* dest_scan, uint8_t* ori_scan,int Bpp,
- int span_left, int span_len, int span_top, uint8_t cover_scan,
- int clip_top, int clip_left, int clip_right, uint8_t* clip_scan,
- uint8_t* dest_extra_alpha_scan);
- // ...
- /*--------------------------------------------------------------------------------------------------------*/
- void CompositeSpanRGB32_2(uint8_t* dest_scan, uint8_t* ori_scan,int Bpp,
- int span_left, int span_len, int span_top, uint8_t cover_scan,
- int clip_top, int clip_left, int clip_right, uint8_t* clip_scan,
- uint8_t* dest_extra_alpha_scan);
- void CompositeSpanRGB32_3(uint8_t* dest_scan, uint8_t* ori_scan,int Bpp,
- int span_left, int span_len, int span_top, uint8_t cover_scan,
- int clip_top, int clip_left, int clip_right, uint8_t* clip_scan,
- uint8_t* dest_extra_alpha_scan);
- void CompositeSpanRGB32_6(uint8_t* dest_scan, uint8_t* ori_scan,int Bpp,
- int span_left, int span_len, int span_top, uint8_t cover_scan,
- int clip_top, int clip_left, int clip_right, uint8_t* clip_scan,
- uint8_t* dest_extra_alpha_scan);
- void CompositeSpanRGB32_7(uint8_t* dest_scan, uint8_t* ori_scan,int Bpp,
- int span_left, int span_len, int span_top, uint8_t cover_scan,
- int clip_top, int clip_left, int clip_right, uint8_t* clip_scan,
- uint8_t* dest_extra_alpha_scan);
-
- /*---------------------------------------------------------------------------------------------------------*/
-
- void CompositeSpanRGB24_2(uint8_t* dest_scan, uint8_t* ori_scan,int Bpp,
- int span_left, int span_len, int span_top, uint8_t cover_scan,
- int clip_top, int clip_left, int clip_right, uint8_t* clip_scan,
- uint8_t* dest_extra_alpha_scan);
- void CompositeSpanRGB24_3(uint8_t* dest_scan, uint8_t* ori_scan,int Bpp,
- int span_left, int span_len, int span_top, uint8_t cover_scan,
- int clip_top, int clip_left, int clip_right, uint8_t* clip_scan,
- uint8_t* dest_extra_alpha_scan);
- void CompositeSpanRGB24_6(uint8_t* dest_scan, uint8_t* ori_scan,int Bpp,
- int span_left, int span_len, int span_top, uint8_t cover_scan,
- int clip_top, int clip_left, int clip_right, uint8_t* clip_scan,
- uint8_t* dest_extra_alpha_scan);
- void CompositeSpanRGB24_7(uint8_t* dest_scan, uint8_t* ori_scan,int Bpp,
- int span_left, int span_len, int span_top, uint8_t cover_scan,
- int clip_top, int clip_left, int clip_right, uint8_t* clip_scan,
- uint8_t* dest_extra_alpha_scan);
- void CompositeSpanRGB24_10(uint8_t* dest_scan, uint8_t* ori_scan,int Bpp,
- int span_left, int span_len, int span_top, uint8_t cover_scan,
- int clip_top, int clip_left, int clip_right, uint8_t* clip_scan,
- uint8_t* dest_extra_alpha_scan);
- void CompositeSpanRGB24_11(uint8_t* dest_scan, uint8_t* ori_scan,int Bpp,
- int span_left, int span_len, int span_top, uint8_t cover_scan,
- int clip_top, int clip_left, int clip_right, uint8_t* clip_scan,
- uint8_t* dest_extra_alpha_scan);
- void CompositeSpanRGB24_14(uint8_t* dest_scan, uint8_t* ori_scan,int Bpp,
- int span_left, int span_len, int span_top, uint8_t cover_scan,
- int clip_top, int clip_left, int clip_right, uint8_t* clip_scan,
- uint8_t* dest_extra_alpha_scan);
- void CompositeSpanRGB24_15(uint8_t* dest_scan, uint8_t* ori_scan,int Bpp,
- int span_left, int span_len, int span_top, uint8_t cover_scan,
- int clip_top, int clip_left, int clip_right, uint8_t* clip_scan,
- uint8_t* dest_extra_alpha_scan);
-
- /*----------------------------------------------------------------------------------------------------------*/
-
- // A general alpha merge function (with clipping mask). Cmyka/Cmyk device.
- void CompositeSpanCMYK(uint8_t* dest_scan, uint8_t* ori_scan,int Bpp,
- int span_left, int span_len, int span_top, uint8_t cover_scan,
- int clip_top, int clip_left, int clip_right, uint8_t* clip_scan,
- uint8_t* dest_extra_alpha_scan);
-
-
- //--------------------------------------------------------------------
- FX_BOOL Init(CFX_DIBitmap* pDevice, CFX_DIBitmap* pOriDevice, const CFX_ClipRgn* pClipRgn, FX_DWORD color, FX_BOOL bFullCover, FX_BOOL bRgbByteOrder,
- int alpha_flag = 0, void* pIccTransform = NULL); //The alpha flag must be fill_flag if exist.
+class CFX_SkiaRenderer : public SkBlitter {
+ protected:
+ int m_Alpha,
+ m_Red, // Or the complementary-color, Cyan
+ m_Green, // Magenta
+ m_Blue, // Yellow
+ m_Gray; // Black
+ FX_DWORD m_Color; // FX_ARGB or FX_CMYK
+ FX_BOOL m_bFullCover;
+ int m_ProcessFilter;
+ FX_BOOL m_bRgbByteOrder;
+
+ FX_RECT m_ClipBox;
+ CFX_DIBitmap* m_pDevice;
+ CFX_DIBitmap* m_pOriDevice;
+ const CFX_ClipRgn* m_pClipRgn;
+ const CFX_DIBitmap* m_pClipMask;
+
+ uint8_t* m_pDestScan;
+ uint8_t* m_pDestExtraAlphaScan;
+ uint8_t* m_pOriScan;
+ uint8_t* m_pClipScan;
+
+ void (CFX_SkiaRenderer::*composite_span)(uint8_t*,
+ uint8_t*,
+ int,
+ int,
+ int,
+ int,
+ uint8_t,
+ int,
+ int,
+ int,
+ uint8_t*,
+ uint8_t*);
+
+ public:
+ //--------------------------------------------------------------------
+ virtual void blitAntiH(int x,
+ int y,
+ const SkAlpha antialias[],
+ const int16_t runs[]);
+ virtual void blitH(int x, int y, int width);
+ virtual void blitV(int x, int y, int height, SkAlpha alpha);
+ virtual void blitRect(int x, int y, int width, int height);
+ virtual void blitAntiRect(int x,
+ int y,
+ int width,
+ int height,
+ SkAlpha leftAlpha,
+ SkAlpha rightAlpha);
+
+ /*------------------------------------------------------------------------------------------------------*/
+ // A general alpha merge function (with clipping mask). Gray device.
+ void CompositeSpan1bpp_0(uint8_t* dest_scan,
+ uint8_t* ori_scan,
+ int Bpp,
+ int span_left,
+ int span_len,
+ int span_top,
+ uint8_t cover_scan,
+ int clip_top,
+ int clip_left,
+ int clip_right,
+ uint8_t* clip_scan,
+ uint8_t* dest_extra_alpha_scan);
+ void CompositeSpan1bpp_1(uint8_t* dest_scan,
+ uint8_t* ori_scan,
+ int Bpp,
+ int span_left,
+ int span_len,
+ int span_top,
+ uint8_t cover_scan,
+ int clip_top,
+ int clip_left,
+ int clip_right,
+ uint8_t* clip_scan,
+ uint8_t* dest_extra_alpha_scan);
+ void CompositeSpan1bpp_4(uint8_t* dest_scan,
+ uint8_t* ori_scan,
+ int Bpp,
+ int span_left,
+ int span_len,
+ int span_top,
+ uint8_t cover_scan,
+ int clip_top,
+ int clip_left,
+ int clip_right,
+ uint8_t* clip_scan,
+ uint8_t* dest_extra_alpha_scan);
+ void CompositeSpan1bpp_5(uint8_t* dest_scan,
+ uint8_t* ori_scan,
+ int Bpp,
+ int span_left,
+ int span_len,
+ int span_top,
+ uint8_t cover_scan,
+ int clip_top,
+ int clip_left,
+ int clip_right,
+ uint8_t* clip_scan,
+ uint8_t* dest_extra_alpha_scan);
+ void CompositeSpan1bpp_8(uint8_t* dest_scan,
+ uint8_t* ori_scan,
+ int Bpp,
+ int span_left,
+ int span_len,
+ int span_top,
+ uint8_t cover_scan,
+ int clip_top,
+ int clip_left,
+ int clip_right,
+ uint8_t* clip_scan,
+ uint8_t* dest_extra_alpha_scan);
+ void CompositeSpan1bpp_9(uint8_t* dest_scan,
+ uint8_t* ori_scan,
+ int Bpp,
+ int span_left,
+ int span_len,
+ int span_top,
+ uint8_t cover_scan,
+ int clip_top,
+ int clip_left,
+ int clip_right,
+ uint8_t* clip_scan,
+ uint8_t* dest_extra_alpha_scan);
+ void CompositeSpan1bpp_12(uint8_t* dest_scan,
+ uint8_t* ori_scan,
+ int Bpp,
+ int span_left,
+ int span_len,
+ int span_top,
+ uint8_t cover_scan,
+ int clip_top,
+ int clip_left,
+ int clip_right,
+ uint8_t* clip_scan,
+ uint8_t* dest_extra_alpha_scan);
+ void CompositeSpan1bpp_13(uint8_t* dest_scan,
+ uint8_t* ori_scan,
+ int Bpp,
+ int span_left,
+ int span_len,
+ int span_top,
+ uint8_t cover_scan,
+ int clip_top,
+ int clip_left,
+ int clip_right,
+ uint8_t* clip_scan,
+ uint8_t* dest_extra_alpha_scan);
+
+ /*--------------------------------------------------------------------------------------------------------*/
+
+ // A general alpha merge function (with clipping mask). Gray device.
+ void CompositeSpanGray_2(uint8_t* dest_scan,
+ uint8_t* ori_scan,
+ int Bpp,
+ int span_left,
+ int span_len,
+ int span_top,
+ uint8_t cover_scan,
+ int clip_top,
+ int clip_left,
+ int clip_right,
+ uint8_t* clip_scan,
+ uint8_t* dest_extra_alpha_scan);
+
+ void CompositeSpanGray_3(uint8_t* dest_scan,
+ uint8_t* ori_scan,
+ int Bpp,
+ int span_left,
+ int span_len,
+ int span_top,
+ uint8_t cover_scan,
+ int clip_top,
+ int clip_left,
+ int clip_right,
+ uint8_t* clip_scan,
+ uint8_t* dest_extra_alpha_scan);
+
+ void CompositeSpanGray_6(uint8_t* dest_scan,
+ uint8_t* ori_scan,
+ int Bpp,
+ int span_left,
+ int span_len,
+ int span_top,
+ uint8_t cover_scan,
+ int clip_top,
+ int clip_left,
+ int clip_right,
+ uint8_t* clip_scan,
+ uint8_t* dest_extra_alpha_scan);
+
+ void CompositeSpanGray_7(uint8_t* dest_scan,
+ uint8_t* ori_scan,
+ int Bpp,
+ int span_left,
+ int span_len,
+ int span_top,
+ uint8_t cover_scan,
+ int clip_top,
+ int clip_left,
+ int clip_right,
+ uint8_t* clip_scan,
+ uint8_t* dest_extra_alpha_scan);
+
+ void CompositeSpanGray_10(uint8_t* dest_scan,
+ uint8_t* ori_scan,
+ int Bpp,
+ int span_left,
+ int span_len,
+ int span_top,
+ uint8_t cover_scan,
+ int clip_top,
+ int clip_left,
+ int clip_right,
+ uint8_t* clip_scan,
+ uint8_t* dest_extra_alpha_scan);
+
+ void CompositeSpanGray_11(uint8_t* dest_scan,
+ uint8_t* ori_scan,
+ int Bpp,
+ int span_left,
+ int span_len,
+ int span_top,
+ uint8_t cover_scan,
+ int clip_top,
+ int clip_left,
+ int clip_right,
+ uint8_t* clip_scan,
+ uint8_t* dest_extra_alpha_scan);
+
+ void CompositeSpanGray_14(uint8_t* dest_scan,
+ uint8_t* ori_scan,
+ int Bpp,
+ int span_left,
+ int span_len,
+ int span_top,
+ uint8_t cover_scan,
+ int clip_top,
+ int clip_left,
+ int clip_right,
+ uint8_t* clip_scan,
+ uint8_t* dest_extra_alpha_scan);
+
+ void CompositeSpanGray_15(uint8_t* dest_scan,
+ uint8_t* ori_scan,
+ int Bpp,
+ int span_left,
+ int span_len,
+ int span_top,
+ uint8_t cover_scan,
+ int clip_top,
+ int clip_left,
+ int clip_right,
+ uint8_t* clip_scan,
+ uint8_t* dest_extra_alpha_scan);
+
+ /*--------------------------------------------------------------------------------------------------------*/
+ void CompositeSpanARGB_2(uint8_t* dest_scan,
+ uint8_t* ori_scan,
+ int Bpp,
+ int span_left,
+ int span_len,
+ int span_top,
+ uint8_t cover_scan,
+ int clip_top,
+ int clip_left,
+ int clip_right,
+ uint8_t* clip_scan,
+ uint8_t* dest_extra_alpha_scan);
+
+ void CompositeSpanARGB_3(uint8_t* dest_scan,
+ uint8_t* ori_scan,
+ int Bpp,
+ int span_left,
+ int span_len,
+ int span_top,
+ uint8_t cover_scan,
+ int clip_top,
+ int clip_left,
+ int clip_right,
+ uint8_t* clip_scan,
+ uint8_t* dest_extra_alpha_scan);
+
+ void CompositeSpanARGB_6(uint8_t* dest_scan,
+ uint8_t* ori_scan,
+ int Bpp,
+ int span_left,
+ int span_len,
+ int span_top,
+ uint8_t cover_scan,
+ int clip_top,
+ int clip_left,
+ int clip_right,
+ uint8_t* clip_scan,
+ uint8_t* dest_extra_alpha_scan);
+
+ void CompositeSpanARGB_7(uint8_t* dest_scan,
+ uint8_t* ori_scan,
+ int Bpp,
+ int span_left,
+ int span_len,
+ int span_top,
+ uint8_t cover_scan,
+ int clip_top,
+ int clip_left,
+ int clip_right,
+ uint8_t* clip_scan,
+ uint8_t* dest_extra_alpha_scan);
+ // ...
+ /*--------------------------------------------------------------------------------------------------------*/
+ void CompositeSpanRGB32_2(uint8_t* dest_scan,
+ uint8_t* ori_scan,
+ int Bpp,
+ int span_left,
+ int span_len,
+ int span_top,
+ uint8_t cover_scan,
+ int clip_top,
+ int clip_left,
+ int clip_right,
+ uint8_t* clip_scan,
+ uint8_t* dest_extra_alpha_scan);
+ void CompositeSpanRGB32_3(uint8_t* dest_scan,
+ uint8_t* ori_scan,
+ int Bpp,
+ int span_left,
+ int span_len,
+ int span_top,
+ uint8_t cover_scan,
+ int clip_top,
+ int clip_left,
+ int clip_right,
+ uint8_t* clip_scan,
+ uint8_t* dest_extra_alpha_scan);
+ void CompositeSpanRGB32_6(uint8_t* dest_scan,
+ uint8_t* ori_scan,
+ int Bpp,
+ int span_left,
+ int span_len,
+ int span_top,
+ uint8_t cover_scan,
+ int clip_top,
+ int clip_left,
+ int clip_right,
+ uint8_t* clip_scan,
+ uint8_t* dest_extra_alpha_scan);
+ void CompositeSpanRGB32_7(uint8_t* dest_scan,
+ uint8_t* ori_scan,
+ int Bpp,
+ int span_left,
+ int span_len,
+ int span_top,
+ uint8_t cover_scan,
+ int clip_top,
+ int clip_left,
+ int clip_right,
+ uint8_t* clip_scan,
+ uint8_t* dest_extra_alpha_scan);
+
+ /*---------------------------------------------------------------------------------------------------------*/
+
+ void CompositeSpanRGB24_2(uint8_t* dest_scan,
+ uint8_t* ori_scan,
+ int Bpp,
+ int span_left,
+ int span_len,
+ int span_top,
+ uint8_t cover_scan,
+ int clip_top,
+ int clip_left,
+ int clip_right,
+ uint8_t* clip_scan,
+ uint8_t* dest_extra_alpha_scan);
+ void CompositeSpanRGB24_3(uint8_t* dest_scan,
+ uint8_t* ori_scan,
+ int Bpp,
+ int span_left,
+ int span_len,
+ int span_top,
+ uint8_t cover_scan,
+ int clip_top,
+ int clip_left,
+ int clip_right,
+ uint8_t* clip_scan,
+ uint8_t* dest_extra_alpha_scan);
+ void CompositeSpanRGB24_6(uint8_t* dest_scan,
+ uint8_t* ori_scan,
+ int Bpp,
+ int span_left,
+ int span_len,
+ int span_top,
+ uint8_t cover_scan,
+ int clip_top,
+ int clip_left,
+ int clip_right,
+ uint8_t* clip_scan,
+ uint8_t* dest_extra_alpha_scan);
+ void CompositeSpanRGB24_7(uint8_t* dest_scan,
+ uint8_t* ori_scan,
+ int Bpp,
+ int span_left,
+ int span_len,
+ int span_top,
+ uint8_t cover_scan,
+ int clip_top,
+ int clip_left,
+ int clip_right,
+ uint8_t* clip_scan,
+ uint8_t* dest_extra_alpha_scan);
+ void CompositeSpanRGB24_10(uint8_t* dest_scan,
+ uint8_t* ori_scan,
+ int Bpp,
+ int span_left,
+ int span_len,
+ int span_top,
+ uint8_t cover_scan,
+ int clip_top,
+ int clip_left,
+ int clip_right,
+ uint8_t* clip_scan,
+ uint8_t* dest_extra_alpha_scan);
+ void CompositeSpanRGB24_11(uint8_t* dest_scan,
+ uint8_t* ori_scan,
+ int Bpp,
+ int span_left,
+ int span_len,
+ int span_top,
+ uint8_t cover_scan,
+ int clip_top,
+ int clip_left,
+ int clip_right,
+ uint8_t* clip_scan,
+ uint8_t* dest_extra_alpha_scan);
+ void CompositeSpanRGB24_14(uint8_t* dest_scan,
+ uint8_t* ori_scan,
+ int Bpp,
+ int span_left,
+ int span_len,
+ int span_top,
+ uint8_t cover_scan,
+ int clip_top,
+ int clip_left,
+ int clip_right,
+ uint8_t* clip_scan,
+ uint8_t* dest_extra_alpha_scan);
+ void CompositeSpanRGB24_15(uint8_t* dest_scan,
+ uint8_t* ori_scan,
+ int Bpp,
+ int span_left,
+ int span_len,
+ int span_top,
+ uint8_t cover_scan,
+ int clip_top,
+ int clip_left,
+ int clip_right,
+ uint8_t* clip_scan,
+ uint8_t* dest_extra_alpha_scan);
+
+ /*----------------------------------------------------------------------------------------------------------*/
+
+ // A general alpha merge function (with clipping mask). Cmyka/Cmyk device.
+ void CompositeSpanCMYK(uint8_t* dest_scan,
+ uint8_t* ori_scan,
+ int Bpp,
+ int span_left,
+ int span_len,
+ int span_top,
+ uint8_t cover_scan,
+ int clip_top,
+ int clip_left,
+ int clip_right,
+ uint8_t* clip_scan,
+ uint8_t* dest_extra_alpha_scan);
+
+ //--------------------------------------------------------------------
+ FX_BOOL Init(CFX_DIBitmap* pDevice,
+ CFX_DIBitmap* pOriDevice,
+ const CFX_ClipRgn* pClipRgn,
+ FX_DWORD color,
+ FX_BOOL bFullCover,
+ FX_BOOL bRgbByteOrder,
+ int alpha_flag = 0,
+ void* pIccTransform =
+ NULL); // The alpha flag must be fill_flag if exist.
};
-class CFX_SkiaA8Renderer : public SkBlitter
-{
-public:
- //--------------------------------------------------------------------
- virtual void blitAntiH(int x, int y, const SkAlpha antialias[], const int16_t runs[]);
- virtual void blitH(int x, int y, int width);
- virtual void blitV(int x, int y, int height, SkAlpha alpha);
- virtual void blitRect(int x, int y, int width, int height);
- virtual void blitAntiRect(int x, int y, int width, int height, SkAlpha leftAlpha, SkAlpha rightAlpha);
- //--------------------------------------------------------------------
- FX_BOOL Init(CFX_DIBitmap* pDevice, int Left, int Top);
- CFX_DIBitmap* m_pDevice;
- int m_Left;
- int m_Top;
- int m_dstWidth;
- int m_dstHeight;
+class CFX_SkiaA8Renderer : public SkBlitter {
+ public:
+ //--------------------------------------------------------------------
+ virtual void blitAntiH(int x,
+ int y,
+ const SkAlpha antialias[],
+ const int16_t runs[]);
+ virtual void blitH(int x, int y, int width);
+ virtual void blitV(int x, int y, int height, SkAlpha alpha);
+ virtual void blitRect(int x, int y, int width, int height);
+ virtual void blitAntiRect(int x,
+ int y,
+ int width,
+ int height,
+ SkAlpha leftAlpha,
+ SkAlpha rightAlpha);
+ //--------------------------------------------------------------------
+ FX_BOOL Init(CFX_DIBitmap* pDevice, int Left, int Top);
+ CFX_DIBitmap* m_pDevice;
+ int m_Left;
+ int m_Top;
+ int m_dstWidth;
+ int m_dstHeight;
};
#endif
diff --git a/core/src/fxge/skia/fx_skia_device.cpp b/core/src/fxge/skia/fx_skia_device.cpp
index 41ce077976..fcd8e9871e 100644
--- a/core/src/fxge/skia/fx_skia_device.cpp
+++ b/core/src/fxge/skia/fx_skia_device.cpp
@@ -7,27 +7,28 @@
#if defined(_SKIA_SUPPORT_)
#include "../../../include/fxcodec/fx_codec.h"
-
//#define _FOXIT_DEBUG_
//#define _FOXIT_BENCHMARK_
extern "C" {
- extern void FX_OUTPUT_LOG_FUNC(const char*, ...);
- extern int FX_GET_TICK_FUNC();
+extern void FX_OUTPUT_LOG_FUNC(const char*, ...);
+extern int FX_GET_TICK_FUNC();
};
#ifdef _FOXIT_DEBUG_
#define FOXIT_DEBUG1(msg) FX_OUTPUT_LOG_FUNC(msg)
-#define FOXIT_DEBUG2(msg,para) FX_OUTPUT_LOG_FUNC(msg,para)
-#define FOXIT_DEBUG3(msg,para1,para2) FX_OUTPUT_LOG_FUNC(msg,para1,para2)
-#define FOXIT_DEBUG4(msg,para1,para2,para3) FX_OUTPUT_LOG_FUNC(msg,para1,para2,para3)
-#define FOXIT_DEBUG5(msg,para1,para2,para3,param4) FX_OUTPUT_LOG_FUNC(msg,para1,para2,para3,param4)
+#define FOXIT_DEBUG2(msg, para) FX_OUTPUT_LOG_FUNC(msg, para)
+#define FOXIT_DEBUG3(msg, para1, para2) FX_OUTPUT_LOG_FUNC(msg, para1, para2)
+#define FOXIT_DEBUG4(msg, para1, para2, para3) \
+ FX_OUTPUT_LOG_FUNC(msg, para1, para2, para3)
+#define FOXIT_DEBUG5(msg, para1, para2, para3, param4) \
+ FX_OUTPUT_LOG_FUNC(msg, para1, para2, para3, param4)
#else
#define FOXIT_DEBUG1(msg)
-#define FOXIT_DEBUG2(msg,para)
-#define FOXIT_DEBUG3(msg,para1,para2)
-#define FOXIT_DEBUG4(msg,para1,para2,para3)
-#define FOXIT_DEBUG5(msg,para1,para2,para3,param4)
+#define FOXIT_DEBUG2(msg, para)
+#define FOXIT_DEBUG3(msg, para1, para2)
+#define FOXIT_DEBUG4(msg, para1, para2, para3)
+#define FOXIT_DEBUG5(msg, para1, para2, para3, param4)
#endif
#include "SkDashPathEffect.h"
@@ -36,496 +37,593 @@ extern "C" {
#include "SkRasterClip.h"
#include "SkStroke.h"
-
#include "fx_skia_blitter_new.h"
#include "../agg/fx_agg_driver.h"
#include "fx_skia_device.h"
/// Run-length-encoded supersampling antialiased blitter.
-class SuperBlitter_skia
-{
-public:
- static void DrawPath(const SkPath& srcPath, SkBlitter* blitter, const SkRasterClip& rect, const SkPaint& origPaint);
+class SuperBlitter_skia {
+ public:
+ static void DrawPath(const SkPath& srcPath,
+ SkBlitter* blitter,
+ const SkRasterClip& rect,
+ const SkPaint& origPaint);
};
FX_BOOL FxSkDrawTreatAsHairline(const SkPaint& paint, SkScalar* coverage) {
- if (SkPaint::kStroke_Style != paint.getStyle())
- return FALSE;
- FXSYS_assert(coverage);
- SkScalar strokeWidth = paint.getStrokeWidth();
- if (0 == strokeWidth) {
- *coverage = SK_Scalar1;
- return TRUE;
- }
- // if we get here, we need to try to fake a thick-stroke with a modulated
- // hairline
- if (!paint.isAntiAlias())
- return FALSE;
- if (strokeWidth <= SK_Scalar1) {
- *coverage = strokeWidth;
- return TRUE;
- }
- return FALSE;
+ if (SkPaint::kStroke_Style != paint.getStyle())
+ return FALSE;
+ FXSYS_assert(coverage);
+ SkScalar strokeWidth = paint.getStrokeWidth();
+ if (0 == strokeWidth) {
+ *coverage = SK_Scalar1;
+ return TRUE;
+ }
+ // if we get here, we need to try to fake a thick-stroke with a modulated
+ // hairline
+ if (!paint.isAntiAlias())
+ return FALSE;
+ if (strokeWidth <= SK_Scalar1) {
+ *coverage = strokeWidth;
+ return TRUE;
+ }
+ return FALSE;
}
-void SuperBlitter_skia::DrawPath(const SkPath& srcPath, SkBlitter* blitter, const SkRasterClip& rect, const SkPaint& origPaint)
-{
- SkPath* pathPtr = (SkPath*)&srcPath;
- bool doFill = true;
- SkPath tmpPath;
- SkTCopyOnFirstWrite<SkPaint> paint(origPaint);
- {
- SkScalar coverage;
- if (FxSkDrawTreatAsHairline(origPaint, &coverage)) {
- if (SK_Scalar1 == coverage) {
- paint.writable()->setStrokeWidth(0);
- } else if (1) {//xfermodeSupportsCoverageAsAlpha(xfer), we not use blend mode here, xfer aways NULL.
- U8CPU newAlpha;
- // this is the old technique, which we preserve for now so
- // we don't change previous results (testing)
- // the new way seems fine, its just (a tiny bit) different
- int scale = (int)SkScalarMul(coverage, 256);
- newAlpha = origPaint.getAlpha() * scale >> 8;
- SkPaint* writablePaint = paint.writable();
- writablePaint->setStrokeWidth(0);
- writablePaint->setAlpha(newAlpha);
- }
- }
- }
- if (paint->getPathEffect() || paint->getStyle() != SkPaint::kFill_Style) {
- SkIRect devBounds = rect.getBounds();
- // outset to have slop for antialasing and hairlines
- devBounds.outset(1, 1);
- SkRect cullRect = SkRect::Make(devBounds);
- doFill = paint->getFillPath(*pathPtr, &tmpPath, &cullRect);
- pathPtr = &tmpPath;
- }
- // avoid possibly allocating a new path in transform if we can
- SkPath* devPathPtr = pathPtr;
- void (*proc)(const SkPath&, const SkRasterClip&, SkBlitter*);
- if (doFill) {
- if (paint->isAntiAlias()) {
- proc = SkScan::AntiFillPath;
- } else {
- proc = SkScan::FillPath;
- }
- } else { // hairline
- if (paint->isAntiAlias()) {
- proc = SkScan::AntiHairPath;
- } else {
- proc = SkScan::HairPath;
- }
- }
- proc(*devPathPtr, rect, blitter);
+void SuperBlitter_skia::DrawPath(const SkPath& srcPath,
+ SkBlitter* blitter,
+ const SkRasterClip& rect,
+ const SkPaint& origPaint) {
+ SkPath* pathPtr = (SkPath*)&srcPath;
+ bool doFill = true;
+ SkPath tmpPath;
+ SkTCopyOnFirstWrite<SkPaint> paint(origPaint);
+ {
+ SkScalar coverage;
+ if (FxSkDrawTreatAsHairline(origPaint, &coverage)) {
+ if (SK_Scalar1 == coverage) {
+ paint.writable()->setStrokeWidth(0);
+ } else if (1) { // xfermodeSupportsCoverageAsAlpha(xfer), we not use
+ // blend mode here, xfer aways NULL.
+ U8CPU newAlpha;
+ // this is the old technique, which we preserve for now so
+ // we don't change previous results (testing)
+ // the new way seems fine, its just (a tiny bit) different
+ int scale = (int)SkScalarMul(coverage, 256);
+ newAlpha = origPaint.getAlpha() * scale >> 8;
+ SkPaint* writablePaint = paint.writable();
+ writablePaint->setStrokeWidth(0);
+ writablePaint->setAlpha(newAlpha);
+ }
+ }
+ }
+ if (paint->getPathEffect() || paint->getStyle() != SkPaint::kFill_Style) {
+ SkIRect devBounds = rect.getBounds();
+ // outset to have slop for antialasing and hairlines
+ devBounds.outset(1, 1);
+ SkRect cullRect = SkRect::Make(devBounds);
+ doFill = paint->getFillPath(*pathPtr, &tmpPath, &cullRect);
+ pathPtr = &tmpPath;
+ }
+ // avoid possibly allocating a new path in transform if we can
+ SkPath* devPathPtr = pathPtr;
+ void (*proc)(const SkPath&, const SkRasterClip&, SkBlitter*);
+ if (doFill) {
+ if (paint->isAntiAlias()) {
+ proc = SkScan::AntiFillPath;
+ } else {
+ proc = SkScan::FillPath;
+ }
+ } else { // hairline
+ if (paint->isAntiAlias()) {
+ proc = SkScan::AntiHairPath;
+ } else {
+ proc = SkScan::HairPath;
+ }
+ }
+ proc(*devPathPtr, rect, blitter);
}
-class CSkia_PathData
-{
-public:
- CSkia_PathData() {}
- ~CSkia_PathData() {}
- SkPath m_PathData;
+class CSkia_PathData {
+ public:
+ CSkia_PathData() {}
+ ~CSkia_PathData() {}
+ SkPath m_PathData;
- void BuildPath(const CFX_PathData* pPathData, const CFX_AffineMatrix* pObject2Device);
+ void BuildPath(const CFX_PathData* pPathData,
+ const CFX_AffineMatrix* pObject2Device);
};
-void CSkia_PathData::BuildPath(const CFX_PathData* pPathData, const CFX_AffineMatrix* pObject2Device)
-{
- const CFX_PathData* pFPath = pPathData;
- int nPoints = pFPath->GetPointCount();
- FX_PATHPOINT* pPoints = pFPath->GetPoints();
- for (int i = 0; i < nPoints; i ++) {
- FX_FIXFLOAT x = pPoints[i].m_PointX, y = pPoints[i].m_PointY;
- if (pObject2Device) pObject2Device->Transform(x, y);
- int point_type = pPoints[i].m_Flag & FXPT_TYPE;
- if (point_type == FXPT_MOVETO) {
- m_PathData.moveTo(x, y);
- } else if (point_type == FXPT_LINETO) {
- if (pPoints[i-1].m_Flag == FXPT_MOVETO && (i == nPoints-1 || pPoints[i+1].m_Flag == FXPT_MOVETO) &&
- FXSYS_abs(pPoints[i].m_PointX - pPoints[i-1].m_PointX) < 0.4f && FXSYS_abs(pPoints[i].m_PointY - pPoints[i-1].m_PointY)< 0.4f)
- // PDF line includes the destination point, unlike Windows line.
- // We received some PDF which actually draws zero length lines. TESTDOC: summer cha show.pdf
- // Therefore, we have to extend the line by 0.4 pixel here.
- // But only for standalone segment. TESTDOC: bug #1434 - maze.pdf; TESTDOC: bug#1508 di704P_QIG_111.pdf
- x += 0.4;
- // TODO: we should actually tell skia vertex generator to process zero length stroked line
- // (only butts are drawn)
- m_PathData.lineTo(x, y);
- } else if (point_type == FXPT_BEZIERTO) {
- FX_FIXFLOAT x2 = pPoints[i+1].m_PointX, y2 = pPoints[i+1].m_PointY;
- FX_FIXFLOAT x3 = pPoints[i+2].m_PointX, y3 = pPoints[i+2].m_PointY;
- if (pObject2Device){
- pObject2Device->Transform(x2, y2);
- pObject2Device->Transform(x3, y3);
- }
- m_PathData.cubicTo(x, y, x2, y2, x3, y3);
- i += 2;
- }
- if (pPoints[i].m_Flag & FXPT_CLOSEFIGURE) m_PathData.close();
- }
+void CSkia_PathData::BuildPath(const CFX_PathData* pPathData,
+ const CFX_AffineMatrix* pObject2Device) {
+ const CFX_PathData* pFPath = pPathData;
+ int nPoints = pFPath->GetPointCount();
+ FX_PATHPOINT* pPoints = pFPath->GetPoints();
+ for (int i = 0; i < nPoints; i++) {
+ FX_FIXFLOAT x = pPoints[i].m_PointX, y = pPoints[i].m_PointY;
+ if (pObject2Device)
+ pObject2Device->Transform(x, y);
+ int point_type = pPoints[i].m_Flag & FXPT_TYPE;
+ if (point_type == FXPT_MOVETO) {
+ m_PathData.moveTo(x, y);
+ } else if (point_type == FXPT_LINETO) {
+ if (pPoints[i - 1].m_Flag == FXPT_MOVETO &&
+ (i == nPoints - 1 || pPoints[i + 1].m_Flag == FXPT_MOVETO) &&
+ FXSYS_abs(pPoints[i].m_PointX - pPoints[i - 1].m_PointX) < 0.4f &&
+ FXSYS_abs(pPoints[i].m_PointY - pPoints[i - 1].m_PointY) < 0.4f)
+ // PDF line includes the destination point, unlike Windows line.
+ // We received some PDF which actually draws zero length lines. TESTDOC:
+ // summer cha show.pdf
+ // Therefore, we have to extend the line by 0.4 pixel here.
+ // But only for standalone segment. TESTDOC: bug #1434 - maze.pdf;
+ // TESTDOC: bug#1508 di704P_QIG_111.pdf
+ x += 0.4;
+ // TODO: we should actually tell skia vertex generator to process zero
+ // length stroked line
+ // (only butts are drawn)
+ m_PathData.lineTo(x, y);
+ } else if (point_type == FXPT_BEZIERTO) {
+ FX_FIXFLOAT x2 = pPoints[i + 1].m_PointX, y2 = pPoints[i + 1].m_PointY;
+ FX_FIXFLOAT x3 = pPoints[i + 2].m_PointX, y3 = pPoints[i + 2].m_PointY;
+ if (pObject2Device) {
+ pObject2Device->Transform(x2, y2);
+ pObject2Device->Transform(x3, y3);
+ }
+ m_PathData.cubicTo(x, y, x2, y2, x3, y3);
+ i += 2;
+ }
+ if (pPoints[i].m_Flag & FXPT_CLOSEFIGURE)
+ m_PathData.close();
+ }
}
// convert a stroking path to scanlines
-static void SkRasterizeStroke(SkPaint& spaint, SkPath* dstPathData, SkPath& path_data,
- const CFX_AffineMatrix* pObject2Device,
- const CFX_GraphStateData* pGraphState, FX_FIXFLOAT scale = FIX8_ONE,
- FX_BOOL bStrokeAdjust = FALSE, FX_BOOL bTextMode = FALSE)
-{
- SkPaint::Cap cap;
- switch (pGraphState->m_LineCap) {
- case CFX_GraphStateData::LineCapRound:
- cap = SkPaint::kRound_Cap;
- break;
- case CFX_GraphStateData::LineCapSquare:
- cap = SkPaint::kSquare_Cap;
- break;
- default:
- cap = SkPaint::kButt_Cap;
- break;
- }
- SkPaint::Join join;
- switch (pGraphState->m_LineJoin) {
- case CFX_GraphStateData::LineJoinRound:
- join = SkPaint::kRound_Join;
- break;
- case CFX_GraphStateData::LineJoinBevel:
- join = SkPaint::kBevel_Join;
- break;
- default:
- join = SkPaint::kMiter_Join;
- break;
- }
- FX_FIXFLOAT width = pGraphState->m_LineWidth*scale;
- FX_FIXFLOAT unit = fix32_to_8(fixdiv_8_8_to_32(FIX8_ONE, (pObject2Device->GetXUnit() + pObject2Device->GetYUnit()) / 2));
- if (width <= unit) width = unit;
-
- if (pGraphState->m_DashArray == NULL) {
- SkStroke stroker;
- stroker.setCap(cap);
- stroker.setJoin(join);
- stroker.setMiterLimit(pGraphState->m_MiterLimit);
- stroker.setWidth(width);
- stroker.setDoFill(FALSE);
- stroker.strokePath(path_data, dstPathData);
- SkMatrix smatrix;
- smatrix.setAll(pObject2Device->a, pObject2Device->c, pObject2Device->e, pObject2Device->b, pObject2Device->d, pObject2Device->f, 0, 0, 1);
- dstPathData->transform(smatrix);
- } else {
- int count = (pGraphState->m_DashCount+1)/2;
- SkScalar* intervals = FX_Alloc2D(SkScalar, count, sizeof(SkScalar));
- // Set dash pattern
- for (int i = 0; i < count; i ++) {
- FX_FIXFLOAT on = pGraphState->m_DashArray[i*2];
- if (on <= 0.000001f) on = FIX8_ONE/10;
- FX_FIXFLOAT off = i*2+1 == pGraphState->m_DashCount ? on :
- pGraphState->m_DashArray[i*2+1];
- if (off < 0) off = 0;
- intervals[i*2]=on*scale;
- intervals[i*2+1]=off*scale;
- }
- SkDashPathEffect* pEffect = new SkDashPathEffect(intervals,count*2, pGraphState->m_DashPhase*scale);
- spaint.setPathEffect(pEffect)->unref();
- spaint.setStrokeWidth(width);
- spaint.setStrokeMiter(pGraphState->m_MiterLimit);
- spaint.setStrokeCap(cap);
- spaint.setStrokeJoin(join);
- spaint.getFillPath(path_data, dstPathData);
- SkMatrix smatrix;
- smatrix.setAll(pObject2Device->a, pObject2Device->c, pObject2Device->e, pObject2Device->b, pObject2Device->d, pObject2Device->f, 0, 0, 1);
- dstPathData->transform(smatrix);
- FX_Free(intervals);
- }
+static void SkRasterizeStroke(SkPaint& spaint,
+ SkPath* dstPathData,
+ SkPath& path_data,
+ const CFX_AffineMatrix* pObject2Device,
+ const CFX_GraphStateData* pGraphState,
+ FX_FIXFLOAT scale = FIX8_ONE,
+ FX_BOOL bStrokeAdjust = FALSE,
+ FX_BOOL bTextMode = FALSE) {
+ SkPaint::Cap cap;
+ switch (pGraphState->m_LineCap) {
+ case CFX_GraphStateData::LineCapRound:
+ cap = SkPaint::kRound_Cap;
+ break;
+ case CFX_GraphStateData::LineCapSquare:
+ cap = SkPaint::kSquare_Cap;
+ break;
+ default:
+ cap = SkPaint::kButt_Cap;
+ break;
+ }
+ SkPaint::Join join;
+ switch (pGraphState->m_LineJoin) {
+ case CFX_GraphStateData::LineJoinRound:
+ join = SkPaint::kRound_Join;
+ break;
+ case CFX_GraphStateData::LineJoinBevel:
+ join = SkPaint::kBevel_Join;
+ break;
+ default:
+ join = SkPaint::kMiter_Join;
+ break;
+ }
+ FX_FIXFLOAT width = pGraphState->m_LineWidth * scale;
+ FX_FIXFLOAT unit = fix32_to_8(fixdiv_8_8_to_32(
+ FIX8_ONE, (pObject2Device->GetXUnit() + pObject2Device->GetYUnit()) / 2));
+ if (width <= unit)
+ width = unit;
+
+ if (pGraphState->m_DashArray == NULL) {
+ SkStroke stroker;
+ stroker.setCap(cap);
+ stroker.setJoin(join);
+ stroker.setMiterLimit(pGraphState->m_MiterLimit);
+ stroker.setWidth(width);
+ stroker.setDoFill(FALSE);
+ stroker.strokePath(path_data, dstPathData);
+ SkMatrix smatrix;
+ smatrix.setAll(pObject2Device->a, pObject2Device->c, pObject2Device->e,
+ pObject2Device->b, pObject2Device->d, pObject2Device->f, 0,
+ 0, 1);
+ dstPathData->transform(smatrix);
+ } else {
+ int count = (pGraphState->m_DashCount + 1) / 2;
+ SkScalar* intervals = FX_Alloc2D(SkScalar, count, sizeof(SkScalar));
+ // Set dash pattern
+ for (int i = 0; i < count; i++) {
+ FX_FIXFLOAT on = pGraphState->m_DashArray[i * 2];
+ if (on <= 0.000001f)
+ on = FIX8_ONE / 10;
+ FX_FIXFLOAT off = i * 2 + 1 == pGraphState->m_DashCount
+ ? on
+ : pGraphState->m_DashArray[i * 2 + 1];
+ if (off < 0)
+ off = 0;
+ intervals[i * 2] = on * scale;
+ intervals[i * 2 + 1] = off * scale;
+ }
+ SkDashPathEffect* pEffect = new SkDashPathEffect(
+ intervals, count * 2, pGraphState->m_DashPhase * scale);
+ spaint.setPathEffect(pEffect)->unref();
+ spaint.setStrokeWidth(width);
+ spaint.setStrokeMiter(pGraphState->m_MiterLimit);
+ spaint.setStrokeCap(cap);
+ spaint.setStrokeJoin(join);
+ spaint.getFillPath(path_data, dstPathData);
+ SkMatrix smatrix;
+ smatrix.setAll(pObject2Device->a, pObject2Device->c, pObject2Device->e,
+ pObject2Device->b, pObject2Device->d, pObject2Device->f, 0,
+ 0, 1);
+ dstPathData->transform(smatrix);
+ FX_Free(intervals);
+ }
}
-CFX_SkiaDeviceDriver::CFX_SkiaDeviceDriver(CFX_DIBitmap* pBitmap, int dither_bits, FX_BOOL bRgbByteOrder, CFX_DIBitmap* pOriDevice, FX_BOOL bGroupKnockout)
-{
- m_pAggDriver = new CFX_AggDeviceDriver(pBitmap, dither_bits, bRgbByteOrder, pOriDevice, bGroupKnockout);
+CFX_SkiaDeviceDriver::CFX_SkiaDeviceDriver(CFX_DIBitmap* pBitmap,
+ int dither_bits,
+ FX_BOOL bRgbByteOrder,
+ CFX_DIBitmap* pOriDevice,
+ FX_BOOL bGroupKnockout) {
+ m_pAggDriver = new CFX_AggDeviceDriver(pBitmap, dither_bits, bRgbByteOrder,
+ pOriDevice, bGroupKnockout);
}
-CFX_SkiaDeviceDriver::~CFX_SkiaDeviceDriver()
-{
- delete m_pAggDriver;
+CFX_SkiaDeviceDriver::~CFX_SkiaDeviceDriver() {
+ delete m_pAggDriver;
}
-FX_BOOL CFX_SkiaDeviceDriver::DrawDeviceText(int nChars, const FXTEXT_CHARPOS* pCharPos, CFX_Font* pFont,
- CFX_FontCache* pCache, const CFX_AffineMatrix* pObject2Device, FX_FIXFLOAT font_size, FX_DWORD color,
- int alpha_flag, void* pIccTransform)
-{
- return m_pAggDriver->DrawDeviceText(nChars, pCharPos, pFont,pCache, pObject2Device, font_size, color,
- alpha_flag, pIccTransform);
+FX_BOOL CFX_SkiaDeviceDriver::DrawDeviceText(
+ int nChars,
+ const FXTEXT_CHARPOS* pCharPos,
+ CFX_Font* pFont,
+ CFX_FontCache* pCache,
+ const CFX_AffineMatrix* pObject2Device,
+ FX_FIXFLOAT font_size,
+ FX_DWORD color,
+ int alpha_flag,
+ void* pIccTransform) {
+ return m_pAggDriver->DrawDeviceText(nChars, pCharPos, pFont, pCache,
+ pObject2Device, font_size, color,
+ alpha_flag, pIccTransform);
}
-int CFX_SkiaDeviceDriver::GetDeviceCaps(int caps_id)
-{
- return m_pAggDriver->GetDeviceCaps(caps_id);
+int CFX_SkiaDeviceDriver::GetDeviceCaps(int caps_id) {
+ return m_pAggDriver->GetDeviceCaps(caps_id);
}
-void CFX_SkiaDeviceDriver::SaveState()
-{
- m_pAggDriver->SaveState();
+void CFX_SkiaDeviceDriver::SaveState() {
+ m_pAggDriver->SaveState();
}
-void CFX_SkiaDeviceDriver::RestoreState(FX_BOOL bKeepSaved)
-{
- m_pAggDriver->RestoreState(bKeepSaved);
+void CFX_SkiaDeviceDriver::RestoreState(FX_BOOL bKeepSaved) {
+ m_pAggDriver->RestoreState(bKeepSaved);
}
-void CFX_SkiaDeviceDriver::SetClipMask(rasterizer_scanline_aa& rasterizer)
-{
- m_pAggDriver->SetClipMask(rasterizer);
+void CFX_SkiaDeviceDriver::SetClipMask(rasterizer_scanline_aa& rasterizer) {
+ m_pAggDriver->SetClipMask(rasterizer);
}
-void CFX_SkiaDeviceDriver::SetClipMask(SkPath& skPath, SkPaint* spaint)
-{
- SkIRect clip_box;
- clip_box.set(0, 0, fix0_to_8(GetDeviceCaps(FXDC_PIXEL_WIDTH)), fix0_to_8(GetDeviceCaps(FXDC_PIXEL_HEIGHT)));
- clip_box.intersect(m_pAggDriver->m_pClipRgn->GetBox().left, m_pAggDriver->m_pClipRgn->GetBox().top,
- m_pAggDriver->m_pClipRgn->GetBox().right, m_pAggDriver->m_pClipRgn->GetBox().bottom);
-
- SkPath* pathPtr = &skPath;
-
- SkRect path_rect = skPath.getBounds();
-
- clip_box.intersect(FXSYS_floor(path_rect.fLeft), FXSYS_floor(path_rect.fTop), FXSYS_floor(path_rect.fRight)+1, FXSYS_floor(path_rect.fBottom)+1);
- CFX_DIBitmapRef mask;
- CFX_DIBitmap* pThisLayer = mask.New();
- pThisLayer->Create(clip_box.width(), clip_box.height(), FXDIB_8bppMask);
- pThisLayer->Clear(0);
-
- CFX_SkiaA8Renderer render;
- render.Init(pThisLayer, clip_box.fLeft, clip_box.fTop);
-
- SkRasterClip rasterClip(clip_box);
- SuperBlitter_skia::DrawPath(skPath, (SkBlitter*)&render, rasterClip, *spaint);
-
- // Finally, we have got the mask that we need, intersect with current clip region
- m_pAggDriver->m_pClipRgn->IntersectMaskF(clip_box.fLeft, clip_box.fTop, mask);
-
+void CFX_SkiaDeviceDriver::SetClipMask(SkPath& skPath, SkPaint* spaint) {
+ SkIRect clip_box;
+ clip_box.set(0, 0, fix0_to_8(GetDeviceCaps(FXDC_PIXEL_WIDTH)),
+ fix0_to_8(GetDeviceCaps(FXDC_PIXEL_HEIGHT)));
+ clip_box.intersect(m_pAggDriver->m_pClipRgn->GetBox().left,
+ m_pAggDriver->m_pClipRgn->GetBox().top,
+ m_pAggDriver->m_pClipRgn->GetBox().right,
+ m_pAggDriver->m_pClipRgn->GetBox().bottom);
+
+ SkPath* pathPtr = &skPath;
+
+ SkRect path_rect = skPath.getBounds();
+
+ clip_box.intersect(FXSYS_floor(path_rect.fLeft), FXSYS_floor(path_rect.fTop),
+ FXSYS_floor(path_rect.fRight) + 1,
+ FXSYS_floor(path_rect.fBottom) + 1);
+ CFX_DIBitmapRef mask;
+ CFX_DIBitmap* pThisLayer = mask.New();
+ pThisLayer->Create(clip_box.width(), clip_box.height(), FXDIB_8bppMask);
+ pThisLayer->Clear(0);
+
+ CFX_SkiaA8Renderer render;
+ render.Init(pThisLayer, clip_box.fLeft, clip_box.fTop);
+
+ SkRasterClip rasterClip(clip_box);
+ SuperBlitter_skia::DrawPath(skPath, (SkBlitter*)&render, rasterClip, *spaint);
+
+ // Finally, we have got the mask that we need, intersect with current clip
+ // region
+ m_pAggDriver->m_pClipRgn->IntersectMaskF(clip_box.fLeft, clip_box.fTop, mask);
}
-FX_BOOL CFX_SkiaDeviceDriver::SetClip_PathFill(const CFX_PathData* pPathData, // path info
- const CFX_AffineMatrix* pObject2Device, // optional transformation
- int fill_mode // fill mode, WINDING or ALTERNATE
- )
-{
- if (m_pAggDriver->m_pClipRgn == NULL)
- m_pAggDriver->m_pClipRgn = new CFX_ClipRgn(GetDeviceCaps(FXDC_PIXEL_WIDTH), GetDeviceCaps(FXDC_PIXEL_HEIGHT));
-
- if (pPathData->GetPointCount() == 5 || pPathData->GetPointCount() == 4) {
- CFX_FloatRect rectf;
- if (pPathData->IsRect(pObject2Device, &rectf)) {
- rectf.Intersect(CFX_FloatRect(0, 0, (FX_FIXFLOAT)GetDeviceCaps(FXDC_PIXEL_WIDTH), (FX_FIXFLOAT)GetDeviceCaps(FXDC_PIXEL_HEIGHT)));
- FX_RECT rect = rectf.GetOutterRect();
- m_pAggDriver->m_pClipRgn->IntersectRect(rect);
- return TRUE;
- }
- }
- CSkia_PathData path_data;
- path_data.BuildPath(pPathData, pObject2Device);
- path_data.m_PathData.close();
- path_data.m_PathData.setFillType((fill_mode&3) == FXFILL_WINDING? SkPath::kWinding_FillType:SkPath::kEvenOdd_FillType);
-
- SkPaint spaint;
- spaint.setColor(0xffffffff);
- spaint.setAntiAlias(TRUE);
- spaint.setStyle(SkPaint::kFill_Style);
-
- SetClipMask(path_data.m_PathData, &spaint);
-
- return TRUE;
+FX_BOOL CFX_SkiaDeviceDriver::SetClip_PathFill(
+ const CFX_PathData* pPathData, // path info
+ const CFX_AffineMatrix* pObject2Device, // optional transformation
+ int fill_mode // fill mode, WINDING or ALTERNATE
+ ) {
+ if (m_pAggDriver->m_pClipRgn == NULL)
+ m_pAggDriver->m_pClipRgn = new CFX_ClipRgn(
+ GetDeviceCaps(FXDC_PIXEL_WIDTH), GetDeviceCaps(FXDC_PIXEL_HEIGHT));
+
+ if (pPathData->GetPointCount() == 5 || pPathData->GetPointCount() == 4) {
+ CFX_FloatRect rectf;
+ if (pPathData->IsRect(pObject2Device, &rectf)) {
+ rectf.Intersect(
+ CFX_FloatRect(0, 0, (FX_FIXFLOAT)GetDeviceCaps(FXDC_PIXEL_WIDTH),
+ (FX_FIXFLOAT)GetDeviceCaps(FXDC_PIXEL_HEIGHT)));
+ FX_RECT rect = rectf.GetOutterRect();
+ m_pAggDriver->m_pClipRgn->IntersectRect(rect);
+ return TRUE;
+ }
+ }
+ CSkia_PathData path_data;
+ path_data.BuildPath(pPathData, pObject2Device);
+ path_data.m_PathData.close();
+ path_data.m_PathData.setFillType((fill_mode & 3) == FXFILL_WINDING
+ ? SkPath::kWinding_FillType
+ : SkPath::kEvenOdd_FillType);
+
+ SkPaint spaint;
+ spaint.setColor(0xffffffff);
+ spaint.setAntiAlias(TRUE);
+ spaint.setStyle(SkPaint::kFill_Style);
+
+ SetClipMask(path_data.m_PathData, &spaint);
+
+ return TRUE;
}
-FX_BOOL CFX_SkiaDeviceDriver::SetClip_PathStroke(const CFX_PathData* pPathData, // path info
- const CFX_AffineMatrix* pObject2Device, // optional transformation
- const CFX_GraphStateData* pGraphState // graphic state, for pen attributes
- )
-{
- if (m_pAggDriver->m_pClipRgn == NULL)
- m_pAggDriver->m_pClipRgn = new CFX_ClipRgn(GetDeviceCaps(FXDC_PIXEL_WIDTH), GetDeviceCaps(FXDC_PIXEL_HEIGHT));
-
- // build path data
- CSkia_PathData path_data;
- path_data.BuildPath(pPathData, NULL);
- path_data.m_PathData.setFillType(SkPath::kWinding_FillType);
-
- SkPaint spaint;
- spaint.setColor(0xffffffff);
- spaint.setStyle(SkPaint::kStroke_Style);
- spaint.setAntiAlias(TRUE);
-
- SkPath dst_path;
- SkRasterizeStroke(spaint, &dst_path, path_data.m_PathData, pObject2Device, pGraphState, 1, FALSE, 0);
- spaint.setStyle(SkPaint::kFill_Style);
- SetClipMask(dst_path, &spaint);
-
- return TRUE;
+FX_BOOL CFX_SkiaDeviceDriver::SetClip_PathStroke(
+ const CFX_PathData* pPathData, // path info
+ const CFX_AffineMatrix* pObject2Device, // optional transformation
+ const CFX_GraphStateData* pGraphState // graphic state, for pen attributes
+ ) {
+ if (m_pAggDriver->m_pClipRgn == NULL)
+ m_pAggDriver->m_pClipRgn = new CFX_ClipRgn(
+ GetDeviceCaps(FXDC_PIXEL_WIDTH), GetDeviceCaps(FXDC_PIXEL_HEIGHT));
+
+ // build path data
+ CSkia_PathData path_data;
+ path_data.BuildPath(pPathData, NULL);
+ path_data.m_PathData.setFillType(SkPath::kWinding_FillType);
+
+ SkPaint spaint;
+ spaint.setColor(0xffffffff);
+ spaint.setStyle(SkPaint::kStroke_Style);
+ spaint.setAntiAlias(TRUE);
+
+ SkPath dst_path;
+ SkRasterizeStroke(spaint, &dst_path, path_data.m_PathData, pObject2Device,
+ pGraphState, 1, FALSE, 0);
+ spaint.setStyle(SkPaint::kFill_Style);
+ SetClipMask(dst_path, &spaint);
+
+ return TRUE;
}
-FX_BOOL CFX_SkiaDeviceDriver::RenderRasterizer(rasterizer_scanline_aa& rasterizer, FX_DWORD color, FX_BOOL bFullCover, FX_BOOL bGroupKnockout,
- int alpha_flag, void* pIccTransform)
-{
- return m_pAggDriver->RenderRasterizer(rasterizer, color, bFullCover, bGroupKnockout,alpha_flag, pIccTransform);
+FX_BOOL CFX_SkiaDeviceDriver::RenderRasterizer(
+ rasterizer_scanline_aa& rasterizer,
+ FX_DWORD color,
+ FX_BOOL bFullCover,
+ FX_BOOL bGroupKnockout,
+ int alpha_flag,
+ void* pIccTransform) {
+ return m_pAggDriver->RenderRasterizer(
+ rasterizer, color, bFullCover, bGroupKnockout, alpha_flag, pIccTransform);
}
-FX_BOOL CFX_SkiaDeviceDriver::RenderRasterizerSkia(SkPath& skPath, const SkPaint& origPaint, SkIRect& rect, FX_DWORD color, FX_BOOL bFullCover, FX_BOOL bGroupKnockout,
- int alpha_flag, void* pIccTransform, FX_BOOL bFill)
-{
- CFX_DIBitmap* pt = bGroupKnockout?m_pAggDriver->GetBackDrop():NULL;
- CFX_SkiaRenderer render;
- if (!render.Init(m_pAggDriver->m_pBitmap, pt, m_pAggDriver->m_pClipRgn, color, bFullCover, m_pAggDriver->m_bRgbByteOrder, alpha_flag, pIccTransform))
- return FALSE;
-
- SkRasterClip rasterClip(rect);
- SuperBlitter_skia::DrawPath(skPath, (SkBlitter*)&render, rasterClip, origPaint);
-
- return TRUE;
-
+FX_BOOL CFX_SkiaDeviceDriver::RenderRasterizerSkia(SkPath& skPath,
+ const SkPaint& origPaint,
+ SkIRect& rect,
+ FX_DWORD color,
+ FX_BOOL bFullCover,
+ FX_BOOL bGroupKnockout,
+ int alpha_flag,
+ void* pIccTransform,
+ FX_BOOL bFill) {
+ CFX_DIBitmap* pt = bGroupKnockout ? m_pAggDriver->GetBackDrop() : NULL;
+ CFX_SkiaRenderer render;
+ if (!render.Init(m_pAggDriver->m_pBitmap, pt, m_pAggDriver->m_pClipRgn, color,
+ bFullCover, m_pAggDriver->m_bRgbByteOrder, alpha_flag,
+ pIccTransform))
+ return FALSE;
+
+ SkRasterClip rasterClip(rect);
+ SuperBlitter_skia::DrawPath(skPath, (SkBlitter*)&render, rasterClip,
+ origPaint);
+
+ return TRUE;
}
-FX_BOOL CFX_SkiaDeviceDriver::DrawPath(const CFX_PathData* pPathData, // path info
- const CFX_AffineMatrix* pObject2Device, // optional transformation
- const CFX_GraphStateData* pGraphState, // graphic state, for pen attributes
- FX_DWORD fill_color, // fill color
- FX_DWORD stroke_color, // stroke color
- int fill_mode, // fill mode, WINDING or ALTERNATE. 0 for not filled
- int alpha_flag,
- void* pIccTransform
- )
-{
- if (GetBuffer() == NULL) return TRUE;
- FOXIT_DEBUG1("CFX_SkiaDeviceDriver::DrawPath: entering");
- SkIRect rect;
- rect.set(0, 0, GetDeviceCaps(FXDC_PIXEL_WIDTH), GetDeviceCaps(FXDC_PIXEL_HEIGHT));
- if ((fill_mode & 3) && fill_color) {
- // We have to transform before building path data, otherwise we'll have flatting problem
- // when we enlarge a small path (flatten before transformed)
- // TESTDOC: Bug #5115 - DS_S1Dimpact_lr.pdf
- // build path data
- CSkia_PathData path_data;
- path_data.BuildPath(pPathData, pObject2Device);
- //path_data.m_PathData.close();
- path_data.m_PathData.setFillType((fill_mode&3) == FXFILL_WINDING? SkPath::kWinding_FillType:SkPath::kEvenOdd_FillType);
-
- SkPaint spaint;
- spaint.setAntiAlias(TRUE);
- spaint.setStyle(SkPaint::kFill_Style);
- spaint.setColor(fill_color);
- if (!RenderRasterizerSkia(path_data.m_PathData, spaint, rect, fill_color, fill_mode & FXFILL_FULLCOVER, FALSE, alpha_flag, pIccTransform))
- return FALSE;
- }
-
- int stroke_alpha = FXGETFLAG_COLORTYPE(alpha_flag) ? FXGETFLAG_ALPHA_STROKE(alpha_flag) : FXARGB_A(stroke_color);
-
- if (pGraphState && stroke_alpha) {
- // We split the matrix into two parts: first part doing the scaling, so we won't have the
- // flatness problem, second part doing the transformation, so we don't have stroking geo problem.
- // TESTDOC: Bug #5253 - test[1].pdf
- CFX_AffineMatrix matrix1, matrix2;
- if (pObject2Device) {
- matrix1.a = FXSYS_fabs(pObject2Device->a) > FXSYS_fabs(pObject2Device->b) ?
- FXSYS_fabs(pObject2Device->a) : FXSYS_fabs(pObject2Device->b);
- matrix1.d = matrix1.a;//FXSYS_fabs(pObject2Device->c) > FXSYS_fabs(pObject2Device->d) ?
- //pObject2Device->c : pObject2Device->d;
- matrix2.Set(pObject2Device->a/matrix1.a, pObject2Device->b/matrix1.a,
- pObject2Device->c/matrix1.d, pObject2Device->d/matrix1.d,
- pObject2Device->e, pObject2Device->f);
- }
- // build path data
- CSkia_PathData path_data;
- path_data.BuildPath(pPathData, &matrix1);
- path_data.m_PathData.setFillType(SkPath::kWinding_FillType);
-
- SkPaint spaint;
- spaint.setColor(stroke_color);
- spaint.setStyle(SkPaint::kStroke_Style);
- spaint.setAntiAlias(TRUE);
- SkPath dst_path;
- SkRasterizeStroke(spaint, &dst_path, path_data.m_PathData, &matrix2, pGraphState, matrix1.a, FALSE, 0);
- spaint.setStyle(SkPaint::kFill_Style);
- int fill_flag = FXGETFLAG_COLORTYPE(alpha_flag)<<8 | FXGETFLAG_ALPHA_STROKE(alpha_flag);
-
- if (!RenderRasterizerSkia(dst_path, spaint, rect, stroke_color, fill_mode & FXFILL_FULLCOVER, FALSE, fill_flag, pIccTransform, FALSE))
- return FALSE;
-
- }
-
- return TRUE;
+FX_BOOL CFX_SkiaDeviceDriver::DrawPath(
+ const CFX_PathData* pPathData, // path info
+ const CFX_AffineMatrix* pObject2Device, // optional transformation
+ const CFX_GraphStateData* pGraphState, // graphic state, for pen attributes
+ FX_DWORD fill_color, // fill color
+ FX_DWORD stroke_color, // stroke color
+ int fill_mode, // fill mode, WINDING or ALTERNATE. 0 for not filled
+ int alpha_flag,
+ void* pIccTransform) {
+ if (GetBuffer() == NULL)
+ return TRUE;
+ FOXIT_DEBUG1("CFX_SkiaDeviceDriver::DrawPath: entering");
+ SkIRect rect;
+ rect.set(0, 0, GetDeviceCaps(FXDC_PIXEL_WIDTH),
+ GetDeviceCaps(FXDC_PIXEL_HEIGHT));
+ if ((fill_mode & 3) && fill_color) {
+ // We have to transform before building path data, otherwise we'll have
+ // flatting problem
+ // when we enlarge a small path (flatten before transformed)
+ // TESTDOC: Bug #5115 - DS_S1Dimpact_lr.pdf
+ // build path data
+ CSkia_PathData path_data;
+ path_data.BuildPath(pPathData, pObject2Device);
+ // path_data.m_PathData.close();
+ path_data.m_PathData.setFillType((fill_mode & 3) == FXFILL_WINDING
+ ? SkPath::kWinding_FillType
+ : SkPath::kEvenOdd_FillType);
+
+ SkPaint spaint;
+ spaint.setAntiAlias(TRUE);
+ spaint.setStyle(SkPaint::kFill_Style);
+ spaint.setColor(fill_color);
+ if (!RenderRasterizerSkia(path_data.m_PathData, spaint, rect, fill_color,
+ fill_mode & FXFILL_FULLCOVER, FALSE, alpha_flag,
+ pIccTransform))
+ return FALSE;
+ }
+
+ int stroke_alpha = FXGETFLAG_COLORTYPE(alpha_flag)
+ ? FXGETFLAG_ALPHA_STROKE(alpha_flag)
+ : FXARGB_A(stroke_color);
+
+ if (pGraphState && stroke_alpha) {
+ // We split the matrix into two parts: first part doing the scaling, so we
+ // won't have the
+ // flatness problem, second part doing the transformation, so we don't have
+ // stroking geo problem.
+ // TESTDOC: Bug #5253 - test[1].pdf
+ CFX_AffineMatrix matrix1, matrix2;
+ if (pObject2Device) {
+ matrix1.a = FXSYS_fabs(pObject2Device->a) > FXSYS_fabs(pObject2Device->b)
+ ? FXSYS_fabs(pObject2Device->a)
+ : FXSYS_fabs(pObject2Device->b);
+ matrix1.d = matrix1.a; // FXSYS_fabs(pObject2Device->c) >
+ // FXSYS_fabs(pObject2Device->d) ?
+ // pObject2Device->c : pObject2Device->d;
+ matrix2.Set(pObject2Device->a / matrix1.a, pObject2Device->b / matrix1.a,
+ pObject2Device->c / matrix1.d, pObject2Device->d / matrix1.d,
+ pObject2Device->e, pObject2Device->f);
+ }
+ // build path data
+ CSkia_PathData path_data;
+ path_data.BuildPath(pPathData, &matrix1);
+ path_data.m_PathData.setFillType(SkPath::kWinding_FillType);
+
+ SkPaint spaint;
+ spaint.setColor(stroke_color);
+ spaint.setStyle(SkPaint::kStroke_Style);
+ spaint.setAntiAlias(TRUE);
+ SkPath dst_path;
+ SkRasterizeStroke(spaint, &dst_path, path_data.m_PathData, &matrix2,
+ pGraphState, matrix1.a, FALSE, 0);
+ spaint.setStyle(SkPaint::kFill_Style);
+ int fill_flag = FXGETFLAG_COLORTYPE(alpha_flag) << 8 |
+ FXGETFLAG_ALPHA_STROKE(alpha_flag);
+
+ if (!RenderRasterizerSkia(dst_path, spaint, rect, stroke_color,
+ fill_mode & FXFILL_FULLCOVER, FALSE, fill_flag,
+ pIccTransform, FALSE))
+ return FALSE;
+ }
+
+ return TRUE;
}
-FX_BOOL CFX_SkiaDeviceDriver::SetPixel(int x, int y, FX_DWORD color,
- int alpha_flag, void* pIccTransform)
-{
- return m_pAggDriver->SetPixel(x, y, color, alpha_flag, pIccTransform);
+FX_BOOL CFX_SkiaDeviceDriver::SetPixel(int x,
+ int y,
+ FX_DWORD color,
+ int alpha_flag,
+ void* pIccTransform) {
+ return m_pAggDriver->SetPixel(x, y, color, alpha_flag, pIccTransform);
}
-FX_BOOL CFX_SkiaDeviceDriver::FillRect(const FX_RECT* pRect, FX_DWORD fill_color, int alpha_flag, void* pIccTransform)
-{
- return m_pAggDriver->FillRect(pRect, fill_color, alpha_flag, pIccTransform);
+FX_BOOL CFX_SkiaDeviceDriver::FillRect(const FX_RECT* pRect,
+ FX_DWORD fill_color,
+ int alpha_flag,
+ void* pIccTransform) {
+ return m_pAggDriver->FillRect(pRect, fill_color, alpha_flag, pIccTransform);
}
-FX_BOOL CFX_SkiaDeviceDriver::GetClipBox(FX_RECT* pRect)
-{
- return m_pAggDriver->GetClipBox(pRect);
+FX_BOOL CFX_SkiaDeviceDriver::GetClipBox(FX_RECT* pRect) {
+ return m_pAggDriver->GetClipBox(pRect);
}
-FX_BOOL CFX_SkiaDeviceDriver::GetDIBits(CFX_DIBitmap* pBitmap, int left, int top, void* pIccTransform, FX_BOOL bDEdge)
-{
- return m_pAggDriver->GetDIBits(pBitmap, left, top, pIccTransform, bDEdge);
+FX_BOOL CFX_SkiaDeviceDriver::GetDIBits(CFX_DIBitmap* pBitmap,
+ int left,
+ int top,
+ void* pIccTransform,
+ FX_BOOL bDEdge) {
+ return m_pAggDriver->GetDIBits(pBitmap, left, top, pIccTransform, bDEdge);
}
-FX_BOOL CFX_SkiaDeviceDriver::SetDIBits(const CFX_DIBSource* pBitmap, FX_DWORD argb, const FX_RECT* pSrcRect, int left, int top, int blend_type,
- int alpha_flag, void* pIccTransform)
-{
- return m_pAggDriver->SetDIBits(pBitmap, argb, pSrcRect, left, top, blend_type, alpha_flag, pIccTransform);
+FX_BOOL CFX_SkiaDeviceDriver::SetDIBits(const CFX_DIBSource* pBitmap,
+ FX_DWORD argb,
+ const FX_RECT* pSrcRect,
+ int left,
+ int top,
+ int blend_type,
+ int alpha_flag,
+ void* pIccTransform) {
+ return m_pAggDriver->SetDIBits(pBitmap, argb, pSrcRect, left, top, blend_type,
+ alpha_flag, pIccTransform);
}
-FX_BOOL CFX_SkiaDeviceDriver::StretchDIBits(const CFX_DIBSource* pSource, FX_DWORD argb, int dest_left, int dest_top,
- int dest_width, int dest_height, const FX_RECT* pClipRect, FX_DWORD flags,
- int alpha_flag, void* pIccTransform)
-{
- return m_pAggDriver->StretchDIBits(pSource, argb, dest_left, dest_top,
- dest_width, dest_height, pClipRect, flags,
- alpha_flag, pIccTransform);
+FX_BOOL CFX_SkiaDeviceDriver::StretchDIBits(const CFX_DIBSource* pSource,
+ FX_DWORD argb,
+ int dest_left,
+ int dest_top,
+ int dest_width,
+ int dest_height,
+ const FX_RECT* pClipRect,
+ FX_DWORD flags,
+ int alpha_flag,
+ void* pIccTransform) {
+ return m_pAggDriver->StretchDIBits(pSource, argb, dest_left, dest_top,
+ dest_width, dest_height, pClipRect, flags,
+ alpha_flag, pIccTransform);
}
-FX_BOOL CFX_SkiaDeviceDriver::StartDIBits(const CFX_DIBSource* pSource, int bitmap_alpha, FX_DWORD argb,
- const CFX_AffineMatrix* pMatrix, FX_DWORD render_flags, void*& handle,
- int alpha_flag, void* pIccTransform)
-{
- return m_pAggDriver->StartDIBits(pSource, bitmap_alpha, argb,
- pMatrix, render_flags, handle, alpha_flag, pIccTransform);
+FX_BOOL CFX_SkiaDeviceDriver::StartDIBits(const CFX_DIBSource* pSource,
+ int bitmap_alpha,
+ FX_DWORD argb,
+ const CFX_AffineMatrix* pMatrix,
+ FX_DWORD render_flags,
+ void*& handle,
+ int alpha_flag,
+ void* pIccTransform) {
+ return m_pAggDriver->StartDIBits(pSource, bitmap_alpha, argb, pMatrix,
+ render_flags, handle, alpha_flag,
+ pIccTransform);
}
-FX_BOOL CFX_SkiaDeviceDriver::ContinueDIBits(void* pHandle, IFX_Pause* pPause)
-{
- return m_pAggDriver->ContinueDIBits(pHandle, pPause);
+FX_BOOL CFX_SkiaDeviceDriver::ContinueDIBits(void* pHandle, IFX_Pause* pPause) {
+ return m_pAggDriver->ContinueDIBits(pHandle, pPause);
}
-void CFX_SkiaDeviceDriver::CancelDIBits(void* pHandle)
-{
- m_pAggDriver->CancelDIBits(pHandle);
+void CFX_SkiaDeviceDriver::CancelDIBits(void* pHandle) {
+ m_pAggDriver->CancelDIBits(pHandle);
}
-CFX_SkiaDevice::CFX_SkiaDevice()
-{
- m_bOwnedBitmap = FALSE;
+CFX_SkiaDevice::CFX_SkiaDevice() {
+ m_bOwnedBitmap = FALSE;
}
-FX_BOOL CFX_SkiaDevice::Attach(CFX_DIBitmap* pBitmap, int dither_bits, FX_BOOL bRgbByteOrder, CFX_DIBitmap* pOriDevice, FX_BOOL bGroupKnockout)
-{
- if (pBitmap == NULL)
- return FALSE;
- SetBitmap(pBitmap);
- CFX_SkiaDeviceDriver* pDriver = new CFX_SkiaDeviceDriver(pBitmap, dither_bits, bRgbByteOrder, pOriDevice, bGroupKnockout);
- SetDeviceDriver(pDriver);
- return TRUE;
+FX_BOOL CFX_SkiaDevice::Attach(CFX_DIBitmap* pBitmap,
+ int dither_bits,
+ FX_BOOL bRgbByteOrder,
+ CFX_DIBitmap* pOriDevice,
+ FX_BOOL bGroupKnockout) {
+ if (pBitmap == NULL)
+ return FALSE;
+ SetBitmap(pBitmap);
+ CFX_SkiaDeviceDriver* pDriver = new CFX_SkiaDeviceDriver(
+ pBitmap, dither_bits, bRgbByteOrder, pOriDevice, bGroupKnockout);
+ SetDeviceDriver(pDriver);
+ return TRUE;
}
-FX_BOOL CFX_SkiaDevice::Create(int width, int height, FXDIB_Format format, int dither_bits, CFX_DIBitmap* pOriDevice)
-{
- m_bOwnedBitmap = TRUE;
- CFX_DIBitmap* pBitmap = new CFX_DIBitmap;
- if (!pBitmap->Create(width, height, format)) {
- delete pBitmap;
- return FALSE;
- }
- SetBitmap(pBitmap);
- CFX_SkiaDeviceDriver* pDriver = new CFX_SkiaDeviceDriver(pBitmap, dither_bits, FALSE, pOriDevice, FALSE);
- SetDeviceDriver(pDriver);
- return TRUE;
+FX_BOOL CFX_SkiaDevice::Create(int width,
+ int height,
+ FXDIB_Format format,
+ int dither_bits,
+ CFX_DIBitmap* pOriDevice) {
+ m_bOwnedBitmap = TRUE;
+ CFX_DIBitmap* pBitmap = new CFX_DIBitmap;
+ if (!pBitmap->Create(width, height, format)) {
+ delete pBitmap;
+ return FALSE;
+ }
+ SetBitmap(pBitmap);
+ CFX_SkiaDeviceDriver* pDriver =
+ new CFX_SkiaDeviceDriver(pBitmap, dither_bits, FALSE, pOriDevice, FALSE);
+ SetDeviceDriver(pDriver);
+ return TRUE;
}
-CFX_SkiaDevice::~CFX_SkiaDevice()
-{
- if (m_bOwnedBitmap && GetBitmap()) delete GetBitmap();
+CFX_SkiaDevice::~CFX_SkiaDevice() {
+ if (m_bOwnedBitmap && GetBitmap())
+ delete GetBitmap();
}
#endif
diff --git a/core/src/fxge/skia/fx_skia_device.h b/core/src/fxge/skia/fx_skia_device.h
index ab51e51a33..1de829b783 100644
--- a/core/src/fxge/skia/fx_skia_device.h
+++ b/core/src/fxge/skia/fx_skia_device.h
@@ -6,85 +6,141 @@
#define CORE_SRC_FXGE_SKIA_FX_SKIA_DEVICE_H_
#if defined(_SKIA_SUPPORT_)
-class CFX_SkiaDeviceDriver : public IFX_RenderDeviceDriver
-{
-public:
- CFX_SkiaDeviceDriver(CFX_DIBitmap* pBitmap, int dither_bits, FX_BOOL bRgbByteOrder, CFX_DIBitmap* pOriDevice, FX_BOOL bGroupKnockout);
- virtual ~CFX_SkiaDeviceDriver();
-
- /** Options */
- virtual int GetDeviceCaps(int caps_id);
-
- /** Save and restore all graphic states */
- virtual void SaveState();
- virtual void RestoreState(FX_BOOL bKeepSaved);
-
- /** Set clipping path using filled region */
- virtual FX_BOOL SetClip_PathFill(const CFX_PathData* pPathData, // path info
- const CFX_AffineMatrix* pObject2Device, // optional transformation
- int fill_mode // fill mode, WINDING or ALTERNATE
- );
-
- /** Set clipping path using stroked region */
- virtual FX_BOOL SetClip_PathStroke(const CFX_PathData* pPathData, // path info
- const CFX_AffineMatrix* pObject2Device, // optional transformation
- const CFX_GraphStateData* pGraphState // graphic state, for pen attributes
- );
-
- /** Draw a path */
- virtual FX_BOOL DrawPath(const CFX_PathData* pPathData,
- const CFX_AffineMatrix* pObject2Device,
- const CFX_GraphStateData* pGraphState,
- FX_DWORD fill_color,
- FX_DWORD stroke_color,
- int fill_mode,
- int alpha_flag = 0,
- void* pIccTransform = NULL
- );
-
- virtual FX_BOOL SetPixel(int x, int y, FX_DWORD color,
- int alpha_flag = 0, void* pIccTransform = NULL);
-
- virtual FX_BOOL FillRect(const FX_RECT* pRect, FX_DWORD fill_color,
- int alpha_flag = 0, void* pIccTransform = NULL);
-
- /** Draw a single pixel (device dependant) line */
- virtual FX_BOOL DrawCosmeticLine(FX_FIXFLOAT x1, FX_FIXFLOAT y1, FX_FIXFLOAT x2, FX_FIXFLOAT y2, FX_DWORD color,
- int alpha_flag, void* pIccTransform, int blend_type) { return FALSE; }
-
- virtual FX_BOOL GetClipBox(FX_RECT* pRect);
-
- /** Load device buffer into a DIB */
- virtual FX_BOOL GetDIBits(CFX_DIBitmap* pBitmap, int left, int top, void* pIccTransform = NULL, FX_BOOL bDEdge = FALSE);
-
- virtual CFX_DIBitmap* GetBackDrop() { return m_pAggDriver->GetBackDrop(); }
-
- virtual FX_BOOL SetDIBits(const CFX_DIBSource* pBitmap, FX_DWORD color, const FX_RECT* pSrcRect,
- int dest_left, int dest_top, int blend_type,
- int alpha_flag = 0, void* pIccTransform = NULL);
- virtual FX_BOOL StretchDIBits(const CFX_DIBSource* pBitmap, FX_DWORD color, int dest_left, int dest_top,
- int dest_width, int dest_height, const FX_RECT* pClipRect, FX_DWORD flags,
- int alpha_flag = 0, void* pIccTransform = NULL);
-
- virtual FX_BOOL StartDIBits(const CFX_DIBSource* pBitmap, int bitmap_alpha, FX_DWORD color,
- const CFX_AffineMatrix* pMatrix, FX_DWORD flags, void*& handle,
- int alpha_flag = 0, void* pIccTransform = NULL);
- virtual FX_BOOL ContinueDIBits(void* handle, IFX_Pause* pPause);
- virtual void CancelDIBits(void* handle);
-
- virtual FX_BOOL DrawDeviceText(int nChars, const FXTEXT_CHARPOS* pCharPos, CFX_Font* pFont,
- CFX_FontCache* pCache, const CFX_AffineMatrix* pObject2Device, FX_FIXFLOAT font_size, FX_DWORD color,
- int alpha_flag = 0, void* pIccTransform = NULL);
-
- virtual FX_BOOL RenderRasterizer(rasterizer_scanline_aa& rasterizer, FX_DWORD color, FX_BOOL bFullCover, FX_BOOL bGroupKnockout,
- int alpha_flag, void* pIccTransform);
- virtual FX_BOOL RenderRasterizerSkia(SkPath& skPath, const SkPaint& origPaint, SkIRect& rect, FX_DWORD color, FX_BOOL bFullCover, FX_BOOL bGroupKnockout,
- int alpha_flag, void* pIccTransform, FX_BOOL bFill = TRUE);
- void SetClipMask(rasterizer_scanline_aa& rasterizer);
- void SetClipMask(SkPath& skPath, SkPaint* spaint);
- virtual uint8_t* GetBuffer() const {return m_pAggDriver->GetBuffer();}
-
- CFX_AggDeviceDriver* m_pAggDriver;
+class CFX_SkiaDeviceDriver : public IFX_RenderDeviceDriver {
+ public:
+ CFX_SkiaDeviceDriver(CFX_DIBitmap* pBitmap,
+ int dither_bits,
+ FX_BOOL bRgbByteOrder,
+ CFX_DIBitmap* pOriDevice,
+ FX_BOOL bGroupKnockout);
+ virtual ~CFX_SkiaDeviceDriver();
+
+ /** Options */
+ virtual int GetDeviceCaps(int caps_id);
+
+ /** Save and restore all graphic states */
+ virtual void SaveState();
+ virtual void RestoreState(FX_BOOL bKeepSaved);
+
+ /** Set clipping path using filled region */
+ virtual FX_BOOL SetClip_PathFill(
+ const CFX_PathData* pPathData, // path info
+ const CFX_AffineMatrix* pObject2Device, // optional transformation
+ int fill_mode // fill mode, WINDING or ALTERNATE
+ );
+
+ /** Set clipping path using stroked region */
+ virtual FX_BOOL SetClip_PathStroke(
+ const CFX_PathData* pPathData, // path info
+ const CFX_AffineMatrix* pObject2Device, // optional transformation
+ const CFX_GraphStateData*
+ pGraphState // graphic state, for pen attributes
+ );
+
+ /** Draw a path */
+ virtual FX_BOOL DrawPath(const CFX_PathData* pPathData,
+ const CFX_AffineMatrix* pObject2Device,
+ const CFX_GraphStateData* pGraphState,
+ FX_DWORD fill_color,
+ FX_DWORD stroke_color,
+ int fill_mode,
+ int alpha_flag = 0,
+ void* pIccTransform = NULL);
+
+ virtual FX_BOOL SetPixel(int x,
+ int y,
+ FX_DWORD color,
+ int alpha_flag = 0,
+ void* pIccTransform = NULL);
+
+ virtual FX_BOOL FillRect(const FX_RECT* pRect,
+ FX_DWORD fill_color,
+ int alpha_flag = 0,
+ void* pIccTransform = NULL);
+
+ /** Draw a single pixel (device dependant) line */
+ virtual FX_BOOL DrawCosmeticLine(FX_FIXFLOAT x1,
+ FX_FIXFLOAT y1,
+ FX_FIXFLOAT x2,
+ FX_FIXFLOAT y2,
+ FX_DWORD color,
+ int alpha_flag,
+ void* pIccTransform,
+ int blend_type) {
+ return FALSE;
+ }
+
+ virtual FX_BOOL GetClipBox(FX_RECT* pRect);
+
+ /** Load device buffer into a DIB */
+ virtual FX_BOOL GetDIBits(CFX_DIBitmap* pBitmap,
+ int left,
+ int top,
+ void* pIccTransform = NULL,
+ FX_BOOL bDEdge = FALSE);
+
+ virtual CFX_DIBitmap* GetBackDrop() { return m_pAggDriver->GetBackDrop(); }
+
+ virtual FX_BOOL SetDIBits(const CFX_DIBSource* pBitmap,
+ FX_DWORD color,
+ const FX_RECT* pSrcRect,
+ int dest_left,
+ int dest_top,
+ int blend_type,
+ int alpha_flag = 0,
+ void* pIccTransform = NULL);
+ virtual FX_BOOL StretchDIBits(const CFX_DIBSource* pBitmap,
+ FX_DWORD color,
+ int dest_left,
+ int dest_top,
+ int dest_width,
+ int dest_height,
+ const FX_RECT* pClipRect,
+ FX_DWORD flags,
+ int alpha_flag = 0,
+ void* pIccTransform = NULL);
+
+ virtual FX_BOOL StartDIBits(const CFX_DIBSource* pBitmap,
+ int bitmap_alpha,
+ FX_DWORD color,
+ const CFX_AffineMatrix* pMatrix,
+ FX_DWORD flags,
+ void*& handle,
+ int alpha_flag = 0,
+ void* pIccTransform = NULL);
+ virtual FX_BOOL ContinueDIBits(void* handle, IFX_Pause* pPause);
+ virtual void CancelDIBits(void* handle);
+
+ virtual FX_BOOL DrawDeviceText(int nChars,
+ const FXTEXT_CHARPOS* pCharPos,
+ CFX_Font* pFont,
+ CFX_FontCache* pCache,
+ const CFX_AffineMatrix* pObject2Device,
+ FX_FIXFLOAT font_size,
+ FX_DWORD color,
+ int alpha_flag = 0,
+ void* pIccTransform = NULL);
+
+ virtual FX_BOOL RenderRasterizer(rasterizer_scanline_aa& rasterizer,
+ FX_DWORD color,
+ FX_BOOL bFullCover,
+ FX_BOOL bGroupKnockout,
+ int alpha_flag,
+ void* pIccTransform);
+ virtual FX_BOOL RenderRasterizerSkia(SkPath& skPath,
+ const SkPaint& origPaint,
+ SkIRect& rect,
+ FX_DWORD color,
+ FX_BOOL bFullCover,
+ FX_BOOL bGroupKnockout,
+ int alpha_flag,
+ void* pIccTransform,
+ FX_BOOL bFill = TRUE);
+ void SetClipMask(rasterizer_scanline_aa& rasterizer);
+ void SetClipMask(SkPath& skPath, SkPaint* spaint);
+ virtual uint8_t* GetBuffer() const { return m_pAggDriver->GetBuffer(); }
+
+ CFX_AggDeviceDriver* m_pAggDriver;
};
#endif // defined(_SKIA_SUPPORT_)
diff --git a/core/src/fxge/win32/dwrite_int.h b/core/src/fxge/win32/dwrite_int.h
index dc2a338935..a2c91ce5b4 100644
--- a/core/src/fxge/win32/dwrite_int.h
+++ b/core/src/fxge/win32/dwrite_int.h
@@ -8,54 +8,59 @@
#define CORE_SRC_FXGE_WIN32_DWRITE_INT_H_
#ifndef DECLSPEC_UUID
-#if (_MSC_VER >= 1100) && defined (__cplusplus)
-#define DECLSPEC_UUID(x) __declspec(uuid(x))
+#if (_MSC_VER >= 1100) && defined(__cplusplus)
+#define DECLSPEC_UUID(x) __declspec(uuid(x))
#else
#define DECLSPEC_UUID(x)
#endif
#endif
#ifndef DECLSPEC_NOVTABLE
#if (_MSC_VER >= 1100) && defined(__cplusplus)
-#define DECLSPEC_NOVTABLE __declspec(novtable)
+#define DECLSPEC_NOVTABLE __declspec(novtable)
#else
#define DECLSPEC_NOVTABLE
#endif
#endif
-#if(WINVER < 0x0500)
+#if (WINVER < 0x0500)
#ifndef _MAC
DECLARE_HANDLE(HMONITOR);
#endif
#endif
-class CDWriteExt
-{
-public:
- CDWriteExt();
- ~CDWriteExt();
-
- void Load();
- void Unload();
-
- FX_BOOL IsAvailable()
- {
- return m_pDWriteFactory != NULL;
- }
-
- void* DwCreateFontFaceFromStream(uint8_t* pData, FX_DWORD size, int simulation_style);
- FX_BOOL DwCreateRenderingTarget(CFX_DIBitmap* pSrc, void** renderTarget);
- void DwDeleteRenderingTarget(void* renderTarget);
- FX_BOOL DwRendingString(void* renderTarget, CFX_ClipRgn* pClipRgn, FX_RECT& stringRect, CFX_AffineMatrix* pMatrix,
- void *font, FX_FLOAT font_size, FX_ARGB text_color,
- int glyph_count, unsigned short* glyph_indices,
- FX_FLOAT baselineOriginX, FX_FLOAT baselineOriginY,
- void* glyph_offsets,
- FX_FLOAT* glyph_advances);
- void DwDeleteFont(void* pFont);
-
-protected:
- void* m_hModule;
- void* m_pDWriteFactory;
- void* m_pDwFontContext;
- void* m_pDwTextRenderer;
+class CDWriteExt {
+ public:
+ CDWriteExt();
+ ~CDWriteExt();
+
+ void Load();
+ void Unload();
+
+ FX_BOOL IsAvailable() { return m_pDWriteFactory != NULL; }
+
+ void* DwCreateFontFaceFromStream(uint8_t* pData,
+ FX_DWORD size,
+ int simulation_style);
+ FX_BOOL DwCreateRenderingTarget(CFX_DIBitmap* pSrc, void** renderTarget);
+ void DwDeleteRenderingTarget(void* renderTarget);
+ FX_BOOL DwRendingString(void* renderTarget,
+ CFX_ClipRgn* pClipRgn,
+ FX_RECT& stringRect,
+ CFX_AffineMatrix* pMatrix,
+ void* font,
+ FX_FLOAT font_size,
+ FX_ARGB text_color,
+ int glyph_count,
+ unsigned short* glyph_indices,
+ FX_FLOAT baselineOriginX,
+ FX_FLOAT baselineOriginY,
+ void* glyph_offsets,
+ FX_FLOAT* glyph_advances);
+ void DwDeleteFont(void* pFont);
+
+ protected:
+ void* m_hModule;
+ void* m_pDWriteFactory;
+ void* m_pDwFontContext;
+ void* m_pDwTextRenderer;
};
#endif // CORE_SRC_FXGE_WIN32_DWRITE_INT_H_
diff --git a/core/src/fxge/win32/fx_win32_device.cpp b/core/src/fxge/win32/fx_win32_device.cpp
index b068ffbaec..4cfc6cbf82 100644
--- a/core/src/fxge/win32/fx_win32_device.cpp
+++ b/core/src/fxge/win32/fx_win32_device.cpp
@@ -18,155 +18,153 @@
#include "dwrite_int.h"
#include "win32_int.h"
-class CFX_Win32FontInfo final : public IFX_SystemFontInfo
-{
-public:
- CFX_Win32FontInfo();
- ~CFX_Win32FontInfo();
- virtual void Release();
- virtual FX_BOOL EnumFontList(CFX_FontMapper* pMapper);
- virtual void* MapFont(int weight, FX_BOOL bItalic, int charset, int pitch_family, const FX_CHAR* face, int& iExact);
- virtual void* GetFont(const FX_CHAR* face)
- {
- return NULL;
- }
- virtual FX_DWORD GetFontData(void* hFont, FX_DWORD table, uint8_t* buffer, FX_DWORD size);
- virtual void DeleteFont(void* hFont);
- virtual FX_BOOL GetFaceName(void* hFont, CFX_ByteString& name);
- virtual FX_BOOL GetFontCharset(void* hFont, int& charset);
- FX_BOOL IsOpenTypeFromDiv(const LOGFONTA *plf);
- FX_BOOL IsSupportFontFormDiv(const LOGFONTA* plf);
- void AddInstalledFont(const LOGFONTA *plf, FX_DWORD FontType);
- void GetGBPreference(CFX_ByteString& face, int weight, int picth_family);
- void GetJapanesePreference(CFX_ByteString& face, int weight, int picth_family);
- CFX_ByteString FindFont(const CFX_ByteString& name);
- HDC m_hDC;
- CFX_FontMapper* m_pMapper;
- CFX_ByteString m_LastFamily;
- CFX_ByteString m_KaiTi, m_FangSong;
+class CFX_Win32FontInfo final : public IFX_SystemFontInfo {
+ public:
+ CFX_Win32FontInfo();
+ ~CFX_Win32FontInfo();
+ virtual void Release();
+ virtual FX_BOOL EnumFontList(CFX_FontMapper* pMapper);
+ virtual void* MapFont(int weight,
+ FX_BOOL bItalic,
+ int charset,
+ int pitch_family,
+ const FX_CHAR* face,
+ int& iExact);
+ virtual void* GetFont(const FX_CHAR* face) { return NULL; }
+ virtual FX_DWORD GetFontData(void* hFont,
+ FX_DWORD table,
+ uint8_t* buffer,
+ FX_DWORD size);
+ virtual void DeleteFont(void* hFont);
+ virtual FX_BOOL GetFaceName(void* hFont, CFX_ByteString& name);
+ virtual FX_BOOL GetFontCharset(void* hFont, int& charset);
+ FX_BOOL IsOpenTypeFromDiv(const LOGFONTA* plf);
+ FX_BOOL IsSupportFontFormDiv(const LOGFONTA* plf);
+ void AddInstalledFont(const LOGFONTA* plf, FX_DWORD FontType);
+ void GetGBPreference(CFX_ByteString& face, int weight, int picth_family);
+ void GetJapanesePreference(CFX_ByteString& face,
+ int weight,
+ int picth_family);
+ CFX_ByteString FindFont(const CFX_ByteString& name);
+ HDC m_hDC;
+ CFX_FontMapper* m_pMapper;
+ CFX_ByteString m_LastFamily;
+ CFX_ByteString m_KaiTi, m_FangSong;
};
-CFX_Win32FontInfo::CFX_Win32FontInfo()
-{
- m_hDC = CreateCompatibleDC(NULL);
+CFX_Win32FontInfo::CFX_Win32FontInfo() {
+ m_hDC = CreateCompatibleDC(NULL);
}
-CFX_Win32FontInfo::~CFX_Win32FontInfo()
-{
- m_pMapper = NULL;
+CFX_Win32FontInfo::~CFX_Win32FontInfo() {
+ m_pMapper = NULL;
}
-void CFX_Win32FontInfo::Release()
-{
- DeleteDC(m_hDC);
- delete this;
+void CFX_Win32FontInfo::Release() {
+ DeleteDC(m_hDC);
+ delete this;
}
-#define TT_MAKE_TAG(x1, x2, x3, x4) (((FX_DWORD)x1<<24)|((FX_DWORD)x2<<16)|((FX_DWORD)x3<<8)|(FX_DWORD)x4)
-FX_BOOL CFX_Win32FontInfo::IsOpenTypeFromDiv(const LOGFONTA *plf)
-{
- HFONT hFont = CreateFontIndirectA(plf);
- FX_BOOL ret = FALSE;
- FX_DWORD font_size = GetFontData(hFont, 0, NULL, 0);
- if (font_size != GDI_ERROR && font_size >= sizeof(FX_DWORD)) {
- FX_DWORD lVersion = 0;
- GetFontData(hFont, 0, (uint8_t*)(&lVersion), sizeof(FX_DWORD));
- lVersion = (((FX_DWORD)(uint8_t)(lVersion)) << 24) | ((FX_DWORD)((uint8_t)(lVersion >> 8))) << 16 |
- ((FX_DWORD)((uint8_t)(lVersion >> 16))) << 8 | ((uint8_t)(lVersion >> 24));
- if (lVersion == TT_MAKE_TAG('O', 'T', 'T', 'O') ||
- lVersion == 0x00010000 ||
- lVersion == TT_MAKE_TAG('t', 't', 'c', 'f') ||
- lVersion == TT_MAKE_TAG('t', 'r', 'u', 'e') ||
- lVersion == 0x00020000) {
- ret = TRUE;
- }
- }
- DeleteFont(hFont);
- return ret;
+#define TT_MAKE_TAG(x1, x2, x3, x4) \
+ (((FX_DWORD)x1 << 24) | ((FX_DWORD)x2 << 16) | ((FX_DWORD)x3 << 8) | \
+ (FX_DWORD)x4)
+FX_BOOL CFX_Win32FontInfo::IsOpenTypeFromDiv(const LOGFONTA* plf) {
+ HFONT hFont = CreateFontIndirectA(plf);
+ FX_BOOL ret = FALSE;
+ FX_DWORD font_size = GetFontData(hFont, 0, NULL, 0);
+ if (font_size != GDI_ERROR && font_size >= sizeof(FX_DWORD)) {
+ FX_DWORD lVersion = 0;
+ GetFontData(hFont, 0, (uint8_t*)(&lVersion), sizeof(FX_DWORD));
+ lVersion = (((FX_DWORD)(uint8_t)(lVersion)) << 24) |
+ ((FX_DWORD)((uint8_t)(lVersion >> 8))) << 16 |
+ ((FX_DWORD)((uint8_t)(lVersion >> 16))) << 8 |
+ ((uint8_t)(lVersion >> 24));
+ if (lVersion == TT_MAKE_TAG('O', 'T', 'T', 'O') || lVersion == 0x00010000 ||
+ lVersion == TT_MAKE_TAG('t', 't', 'c', 'f') ||
+ lVersion == TT_MAKE_TAG('t', 'r', 'u', 'e') || lVersion == 0x00020000) {
+ ret = TRUE;
+ }
+ }
+ DeleteFont(hFont);
+ return ret;
}
-FX_BOOL CFX_Win32FontInfo::IsSupportFontFormDiv(const LOGFONTA* plf)
-{
- HFONT hFont = CreateFontIndirectA(plf);
- FX_BOOL ret = FALSE;
- FX_DWORD font_size = GetFontData(hFont, 0, NULL, 0);
- if (font_size != GDI_ERROR && font_size >= sizeof(FX_DWORD)) {
- FX_DWORD lVersion = 0;
- GetFontData(hFont, 0, (uint8_t*)(&lVersion), sizeof(FX_DWORD));
- lVersion = (((FX_DWORD)(uint8_t)(lVersion)) << 24) | ((FX_DWORD)((uint8_t)(lVersion >> 8))) << 16 |
- ((FX_DWORD)((uint8_t)(lVersion >> 16))) << 8 | ((uint8_t)(lVersion >> 24));
- if (lVersion == TT_MAKE_TAG('O', 'T', 'T', 'O') ||
- lVersion == 0x00010000 ||
- lVersion == TT_MAKE_TAG('t', 't', 'c', 'f') ||
- lVersion == TT_MAKE_TAG('t', 'r', 'u', 'e') ||
- lVersion == 0x00020000) {
- ret = TRUE;
- } else if ((lVersion & 0xFFFF0000) == TT_MAKE_TAG(0x80, 0x01, 0x00, 0x00) ||
- (lVersion & 0xFFFF0000) == TT_MAKE_TAG('%', '!', 0, 0)) {
- ret = TRUE;
- }
- }
- DeleteFont(hFont);
- return ret;
+FX_BOOL CFX_Win32FontInfo::IsSupportFontFormDiv(const LOGFONTA* plf) {
+ HFONT hFont = CreateFontIndirectA(plf);
+ FX_BOOL ret = FALSE;
+ FX_DWORD font_size = GetFontData(hFont, 0, NULL, 0);
+ if (font_size != GDI_ERROR && font_size >= sizeof(FX_DWORD)) {
+ FX_DWORD lVersion = 0;
+ GetFontData(hFont, 0, (uint8_t*)(&lVersion), sizeof(FX_DWORD));
+ lVersion = (((FX_DWORD)(uint8_t)(lVersion)) << 24) |
+ ((FX_DWORD)((uint8_t)(lVersion >> 8))) << 16 |
+ ((FX_DWORD)((uint8_t)(lVersion >> 16))) << 8 |
+ ((uint8_t)(lVersion >> 24));
+ if (lVersion == TT_MAKE_TAG('O', 'T', 'T', 'O') || lVersion == 0x00010000 ||
+ lVersion == TT_MAKE_TAG('t', 't', 'c', 'f') ||
+ lVersion == TT_MAKE_TAG('t', 'r', 'u', 'e') || lVersion == 0x00020000) {
+ ret = TRUE;
+ } else if ((lVersion & 0xFFFF0000) == TT_MAKE_TAG(0x80, 0x01, 0x00, 0x00) ||
+ (lVersion & 0xFFFF0000) == TT_MAKE_TAG('%', '!', 0, 0)) {
+ ret = TRUE;
+ }
+ }
+ DeleteFont(hFont);
+ return ret;
}
-void CFX_Win32FontInfo::AddInstalledFont(const LOGFONTA *plf, FX_DWORD FontType)
-{
- CFX_ByteString name(plf->lfFaceName, -1);
- if (name[0] == '@') {
- return;
- }
- if (name == m_LastFamily) {
- m_pMapper->AddInstalledFont(name, plf->lfCharSet);
- return;
- }
- if (!(FontType & TRUETYPE_FONTTYPE) && !(FontType & DEVICE_FONTTYPE)) {
- return;
- }
- if (!(FontType & TRUETYPE_FONTTYPE)) {
- if (!IsSupportFontFormDiv(plf)) {
- return;
- }
- }
+void CFX_Win32FontInfo::AddInstalledFont(const LOGFONTA* plf,
+ FX_DWORD FontType) {
+ CFX_ByteString name(plf->lfFaceName, -1);
+ if (name[0] == '@') {
+ return;
+ }
+ if (name == m_LastFamily) {
m_pMapper->AddInstalledFont(name, plf->lfCharSet);
- m_LastFamily = name;
+ return;
+ }
+ if (!(FontType & TRUETYPE_FONTTYPE) && !(FontType & DEVICE_FONTTYPE)) {
+ return;
+ }
+ if (!(FontType & TRUETYPE_FONTTYPE)) {
+ if (!IsSupportFontFormDiv(plf)) {
+ return;
+ }
+ }
+ m_pMapper->AddInstalledFont(name, plf->lfCharSet);
+ m_LastFamily = name;
}
-static int CALLBACK FontEnumProc(
- const LOGFONTA *plf,
- const TEXTMETRICA *lpntme,
- FX_DWORD FontType,
- LPARAM lParam
-)
-{
- CFX_Win32FontInfo* pFontInfo = (CFX_Win32FontInfo*)lParam;
- if (pFontInfo->m_pMapper->GetFontEnumerator()) {
- pFontInfo->m_pMapper->GetFontEnumerator()->HitFont();
- }
- pFontInfo->AddInstalledFont(plf, FontType);
- return 1;
+static int CALLBACK FontEnumProc(const LOGFONTA* plf,
+ const TEXTMETRICA* lpntme,
+ FX_DWORD FontType,
+ LPARAM lParam) {
+ CFX_Win32FontInfo* pFontInfo = (CFX_Win32FontInfo*)lParam;
+ if (pFontInfo->m_pMapper->GetFontEnumerator()) {
+ pFontInfo->m_pMapper->GetFontEnumerator()->HitFont();
+ }
+ pFontInfo->AddInstalledFont(plf, FontType);
+ return 1;
}
-FX_BOOL CFX_Win32FontInfo::EnumFontList(CFX_FontMapper* pMapper)
-{
- m_pMapper = pMapper;
- LOGFONTA lf;
- FXSYS_memset(&lf, 0, sizeof(LOGFONTA));
- lf.lfCharSet = DEFAULT_CHARSET;
- lf.lfFaceName[0] = 0;
- lf.lfPitchAndFamily = 0;
- EnumFontFamiliesExA(m_hDC, &lf, (FONTENUMPROCA)FontEnumProc, (uintptr_t)this, 0);
- if (pMapper->GetFontEnumerator()) {
- pMapper->GetFontEnumerator()->Finish();
- }
- return TRUE;
+FX_BOOL CFX_Win32FontInfo::EnumFontList(CFX_FontMapper* pMapper) {
+ m_pMapper = pMapper;
+ LOGFONTA lf;
+ FXSYS_memset(&lf, 0, sizeof(LOGFONTA));
+ lf.lfCharSet = DEFAULT_CHARSET;
+ lf.lfFaceName[0] = 0;
+ lf.lfPitchAndFamily = 0;
+ EnumFontFamiliesExA(m_hDC, &lf, (FONTENUMPROCA)FontEnumProc, (uintptr_t) this,
+ 0);
+ if (pMapper->GetFontEnumerator()) {
+ pMapper->GetFontEnumerator()->Finish();
+ }
+ return TRUE;
}
static const struct {
- const FX_CHAR* m_pFaceName;
- const FX_CHAR* m_pVariantName;
-}
-VariantNames[] = {
+ const FX_CHAR* m_pFaceName;
+ const FX_CHAR* m_pVariantName;
+} VariantNames[] = {
{"DFKai-SB", "\x19\x6A\x77\x69\xD4\x9A"},
};
static const struct {
- const FX_CHAR* m_pName;
- const FX_CHAR* m_pWinName;
- FX_BOOL m_bBold;
- FX_BOOL m_bItalic;
-}
-Base14Substs[] = {
+ const FX_CHAR* m_pName;
+ const FX_CHAR* m_pWinName;
+ FX_BOOL m_bBold;
+ FX_BOOL m_bItalic;
+} Base14Substs[] = {
{"Courier", "Courier New", FALSE, FALSE},
{"Courier-Bold", "Courier New", TRUE, FALSE},
{"Courier-BoldOblique", "Courier New", TRUE, TRUE},
@@ -180,578 +178,617 @@ Base14Substs[] = {
{"Times-BoldItalic", "Times New Roman", TRUE, TRUE},
{"Times-Italic", "Times New Roman", FALSE, TRUE},
};
-CFX_ByteString CFX_Win32FontInfo::FindFont(const CFX_ByteString& name)
-{
- if (m_pMapper == NULL) {
- return name;
- }
- int nFonts = m_pMapper->m_InstalledTTFonts.GetSize();
- for (int i = 0; i < nFonts; i ++) {
- CFX_ByteString thisname = m_pMapper->m_InstalledTTFonts[i];
- if (thisname[0] == ' ') {
- if (thisname.Mid(1, name.GetLength()) == name) {
- return m_pMapper->m_InstalledTTFonts[i + 1];
- }
- } else if (thisname.Left(name.GetLength()) == name) {
- return m_pMapper->m_InstalledTTFonts[i];
- }
- }
- return CFX_ByteString();
+CFX_ByteString CFX_Win32FontInfo::FindFont(const CFX_ByteString& name) {
+ if (m_pMapper == NULL) {
+ return name;
+ }
+ int nFonts = m_pMapper->m_InstalledTTFonts.GetSize();
+ for (int i = 0; i < nFonts; i++) {
+ CFX_ByteString thisname = m_pMapper->m_InstalledTTFonts[i];
+ if (thisname[0] == ' ') {
+ if (thisname.Mid(1, name.GetLength()) == name) {
+ return m_pMapper->m_InstalledTTFonts[i + 1];
+ }
+ } else if (thisname.Left(name.GetLength()) == name) {
+ return m_pMapper->m_InstalledTTFonts[i];
+ }
+ }
+ return CFX_ByteString();
}
struct _FontNameMap {
- const FX_CHAR* m_pSubFontName;
- const FX_CHAR* m_pSrcFontName;
+ const FX_CHAR* m_pSubFontName;
+ const FX_CHAR* m_pSrcFontName;
};
const _FontNameMap g_JpFontNameMap[] = {
{"MS Mincho", "Heiseimin-W3"},
{"MS Gothic", "Jun101-Light"},
};
extern "C" {
- static int compareString(const void* key, const void* element)
- {
- return FXSYS_stricmp((const FX_CHAR*)key, ((_FontNameMap*)element)->m_pSrcFontName);
- }
+static int compareString(const void* key, const void* element) {
+ return FXSYS_stricmp((const FX_CHAR*)key,
+ ((_FontNameMap*)element)->m_pSrcFontName);
}
-FX_BOOL _GetSubFontName(CFX_ByteString& name)
-{
- int size = sizeof g_JpFontNameMap;
- void* pFontnameMap = (void*)g_JpFontNameMap;
- _FontNameMap* found = (_FontNameMap*)FXSYS_bsearch(name.c_str(), pFontnameMap,
- size / sizeof (_FontNameMap), sizeof (_FontNameMap), compareString);
- if (found == NULL) {
- return FALSE;
- }
- name = found->m_pSubFontName;
- return TRUE;
}
-void CFX_Win32FontInfo::GetGBPreference(CFX_ByteString& face, int weight, int picth_family)
-{
- if (face.Find("KaiTi") >= 0 || face.Find("\xbf\xac") >= 0) {
- if (m_KaiTi.IsEmpty()) {
- m_KaiTi = FindFont("KaiTi");
- if (m_KaiTi.IsEmpty()) {
- m_KaiTi = "SimSun";
- }
- }
- face = m_KaiTi;
- } else if (face.Find("FangSong") >= 0 || face.Find("\xb7\xc2\xcb\xce") >= 0) {
- if (m_FangSong.IsEmpty()) {
- m_FangSong = FindFont("FangSong");
- if (m_FangSong.IsEmpty()) {
- m_FangSong = "SimSun";
- }
- }
- face = m_FangSong;
- } else if (face.Find("SimSun") >= 0 || face.Find("\xcb\xce") >= 0) {
- face = "SimSun";
- } else if (face.Find("SimHei") >= 0 || face.Find("\xba\xda") >= 0) {
- face = "SimHei";
- } else if (!(picth_family & FF_ROMAN) && weight > 550) {
- face = "SimHei";
- } else {
- face = "SimSun";
- }
+FX_BOOL _GetSubFontName(CFX_ByteString& name) {
+ int size = sizeof g_JpFontNameMap;
+ void* pFontnameMap = (void*)g_JpFontNameMap;
+ _FontNameMap* found = (_FontNameMap*)FXSYS_bsearch(
+ name.c_str(), pFontnameMap, size / sizeof(_FontNameMap),
+ sizeof(_FontNameMap), compareString);
+ if (found == NULL) {
+ return FALSE;
+ }
+ name = found->m_pSubFontName;
+ return TRUE;
}
-void CFX_Win32FontInfo::GetJapanesePreference(CFX_ByteString& face, int weight, int picth_family)
-{
- if (face.Find("Gothic") >= 0 || face.Find("\x83\x53\x83\x56\x83\x62\x83\x4e") >= 0) {
- if (face.Find("PGothic") >= 0 || face.Find("\x82\x6f\x83\x53\x83\x56\x83\x62\x83\x4e") >= 0) {
- face = "MS PGothic";
- } else if (face.Find("UI Gothic") >= 0) {
- face = "MS UI Gothic";
- } else {
- if (face.Find("HGSGothicM") >= 0 || face.Find("HGMaruGothicMPRO") >= 0) {
- face = "MS PGothic";
- } else {
- face = "MS Gothic";
- }
- }
- return;
- }
- if (face.Find("Mincho") >= 0 || face.Find("\x96\xbe\x92\xa9") >= 0) {
- if (face.Find("PMincho") >= 0 || face.Find("\x82\x6f\x96\xbe\x92\xa9") >= 0) {
- face = "MS PMincho";
- } else {
- face = "MS Mincho";
- }
- return;
- }
- if (_GetSubFontName(face)) {
- return;
- }
- if (!(picth_family & FF_ROMAN) && weight > 400) {
+void CFX_Win32FontInfo::GetGBPreference(CFX_ByteString& face,
+ int weight,
+ int picth_family) {
+ if (face.Find("KaiTi") >= 0 || face.Find("\xbf\xac") >= 0) {
+ if (m_KaiTi.IsEmpty()) {
+ m_KaiTi = FindFont("KaiTi");
+ if (m_KaiTi.IsEmpty()) {
+ m_KaiTi = "SimSun";
+ }
+ }
+ face = m_KaiTi;
+ } else if (face.Find("FangSong") >= 0 || face.Find("\xb7\xc2\xcb\xce") >= 0) {
+ if (m_FangSong.IsEmpty()) {
+ m_FangSong = FindFont("FangSong");
+ if (m_FangSong.IsEmpty()) {
+ m_FangSong = "SimSun";
+ }
+ }
+ face = m_FangSong;
+ } else if (face.Find("SimSun") >= 0 || face.Find("\xcb\xce") >= 0) {
+ face = "SimSun";
+ } else if (face.Find("SimHei") >= 0 || face.Find("\xba\xda") >= 0) {
+ face = "SimHei";
+ } else if (!(picth_family & FF_ROMAN) && weight > 550) {
+ face = "SimHei";
+ } else {
+ face = "SimSun";
+ }
+}
+void CFX_Win32FontInfo::GetJapanesePreference(CFX_ByteString& face,
+ int weight,
+ int picth_family) {
+ if (face.Find("Gothic") >= 0 ||
+ face.Find("\x83\x53\x83\x56\x83\x62\x83\x4e") >= 0) {
+ if (face.Find("PGothic") >= 0 ||
+ face.Find("\x82\x6f\x83\x53\x83\x56\x83\x62\x83\x4e") >= 0) {
+ face = "MS PGothic";
+ } else if (face.Find("UI Gothic") >= 0) {
+ face = "MS UI Gothic";
+ } else {
+ if (face.Find("HGSGothicM") >= 0 || face.Find("HGMaruGothicMPRO") >= 0) {
face = "MS PGothic";
+ } else {
+ face = "MS Gothic";
+ }
+ }
+ return;
+ }
+ if (face.Find("Mincho") >= 0 || face.Find("\x96\xbe\x92\xa9") >= 0) {
+ if (face.Find("PMincho") >= 0 ||
+ face.Find("\x82\x6f\x96\xbe\x92\xa9") >= 0) {
+ face = "MS PMincho";
} else {
- face = "MS PMincho";
- }
+ face = "MS Mincho";
+ }
+ return;
+ }
+ if (_GetSubFontName(face)) {
+ return;
+ }
+ if (!(picth_family & FF_ROMAN) && weight > 400) {
+ face = "MS PGothic";
+ } else {
+ face = "MS PMincho";
+ }
}
-void* CFX_Win32FontInfo::MapFont(int weight, FX_BOOL bItalic, int charset, int pitch_family, const FX_CHAR* cstr_face, int& iExact)
-{
- CFX_ByteString face = cstr_face;
- int iBaseFont;
- for (iBaseFont = 0; iBaseFont < 12; iBaseFont ++)
- if (face == CFX_ByteStringC(Base14Substs[iBaseFont].m_pName)) {
- face = Base14Substs[iBaseFont].m_pWinName;
- weight = Base14Substs[iBaseFont].m_bBold ? FW_BOLD : FW_NORMAL;
- bItalic = Base14Substs[iBaseFont].m_bItalic;
- iExact = TRUE;
- break;
- }
- if (charset == ANSI_CHARSET || charset == SYMBOL_CHARSET) {
- charset = DEFAULT_CHARSET;
- }
- int subst_pitch_family = pitch_family;
- switch (charset) {
- case SHIFTJIS_CHARSET:
- subst_pitch_family = FF_ROMAN;
- break;
- case CHINESEBIG5_CHARSET:
- case HANGUL_CHARSET:
- case GB2312_CHARSET:
- subst_pitch_family = 0;
- break;
- }
- HFONT hFont = ::CreateFontA(-10, 0, 0, 0, weight, bItalic, 0, 0, charset, OUT_TT_ONLY_PRECIS,
- 0, 0, subst_pitch_family, face);
- char facebuf[100];
- HFONT hOldFont = (HFONT)::SelectObject(m_hDC, hFont);
- int ret = ::GetTextFaceA(m_hDC, 100, facebuf);
- ::SelectObject(m_hDC, hOldFont);
- if (face.EqualNoCase(facebuf)) {
- return hFont;
- }
- int iCount = sizeof(VariantNames) / sizeof(VariantNames[0]);
- for (int i = 0; i < iCount; ++i) {
- if (face == VariantNames[i].m_pFaceName) {
- CFX_WideString wsFace = CFX_WideString::FromLocal(facebuf);
- const unsigned short* pName = (const unsigned short*)VariantNames[i].m_pVariantName;
- FX_STRSIZE len = CFX_WideString::WStringLength(pName);
- CFX_WideString wsName = CFX_WideString::FromUTF16LE(pName, len);
- if (wsFace == wsName) {
- return hFont;
- }
- }
- }
- ::DeleteObject(hFont);
- if (charset == DEFAULT_CHARSET) {
- return NULL;
- }
- switch (charset) {
- case SHIFTJIS_CHARSET:
- GetJapanesePreference(face, weight, pitch_family);
- break;
- case GB2312_CHARSET:
- GetGBPreference(face, weight, pitch_family);
- break;
- case HANGUL_CHARSET:
- face = "Gulim";
- break;
- case CHINESEBIG5_CHARSET:
- if (face.Find("MSung") >= 0) {
- face = "MingLiU";
- } else {
- face = "PMingLiU";
- }
- break;
- }
- hFont = ::CreateFontA(-10, 0, 0, 0, weight, bItalic, 0, 0, charset, OUT_TT_ONLY_PRECIS,
- 0, 0, subst_pitch_family, face);
+void* CFX_Win32FontInfo::MapFont(int weight,
+ FX_BOOL bItalic,
+ int charset,
+ int pitch_family,
+ const FX_CHAR* cstr_face,
+ int& iExact) {
+ CFX_ByteString face = cstr_face;
+ int iBaseFont;
+ for (iBaseFont = 0; iBaseFont < 12; iBaseFont++)
+ if (face == CFX_ByteStringC(Base14Substs[iBaseFont].m_pName)) {
+ face = Base14Substs[iBaseFont].m_pWinName;
+ weight = Base14Substs[iBaseFont].m_bBold ? FW_BOLD : FW_NORMAL;
+ bItalic = Base14Substs[iBaseFont].m_bItalic;
+ iExact = TRUE;
+ break;
+ }
+ if (charset == ANSI_CHARSET || charset == SYMBOL_CHARSET) {
+ charset = DEFAULT_CHARSET;
+ }
+ int subst_pitch_family = pitch_family;
+ switch (charset) {
+ case SHIFTJIS_CHARSET:
+ subst_pitch_family = FF_ROMAN;
+ break;
+ case CHINESEBIG5_CHARSET:
+ case HANGUL_CHARSET:
+ case GB2312_CHARSET:
+ subst_pitch_family = 0;
+ break;
+ }
+ HFONT hFont =
+ ::CreateFontA(-10, 0, 0, 0, weight, bItalic, 0, 0, charset,
+ OUT_TT_ONLY_PRECIS, 0, 0, subst_pitch_family, face);
+ char facebuf[100];
+ HFONT hOldFont = (HFONT)::SelectObject(m_hDC, hFont);
+ int ret = ::GetTextFaceA(m_hDC, 100, facebuf);
+ ::SelectObject(m_hDC, hOldFont);
+ if (face.EqualNoCase(facebuf)) {
return hFont;
+ }
+ int iCount = sizeof(VariantNames) / sizeof(VariantNames[0]);
+ for (int i = 0; i < iCount; ++i) {
+ if (face == VariantNames[i].m_pFaceName) {
+ CFX_WideString wsFace = CFX_WideString::FromLocal(facebuf);
+ const unsigned short* pName =
+ (const unsigned short*)VariantNames[i].m_pVariantName;
+ FX_STRSIZE len = CFX_WideString::WStringLength(pName);
+ CFX_WideString wsName = CFX_WideString::FromUTF16LE(pName, len);
+ if (wsFace == wsName) {
+ return hFont;
+ }
+ }
+ }
+ ::DeleteObject(hFont);
+ if (charset == DEFAULT_CHARSET) {
+ return NULL;
+ }
+ switch (charset) {
+ case SHIFTJIS_CHARSET:
+ GetJapanesePreference(face, weight, pitch_family);
+ break;
+ case GB2312_CHARSET:
+ GetGBPreference(face, weight, pitch_family);
+ break;
+ case HANGUL_CHARSET:
+ face = "Gulim";
+ break;
+ case CHINESEBIG5_CHARSET:
+ if (face.Find("MSung") >= 0) {
+ face = "MingLiU";
+ } else {
+ face = "PMingLiU";
+ }
+ break;
+ }
+ hFont = ::CreateFontA(-10, 0, 0, 0, weight, bItalic, 0, 0, charset,
+ OUT_TT_ONLY_PRECIS, 0, 0, subst_pitch_family, face);
+ return hFont;
}
-void CFX_Win32FontInfo::DeleteFont(void* hFont)
-{
- ::DeleteObject(hFont);
-}
-FX_DWORD CFX_Win32FontInfo::GetFontData(void* hFont, FX_DWORD table, uint8_t* buffer, FX_DWORD size)
-{
- HFONT hOldFont = (HFONT)::SelectObject(m_hDC, (HFONT)hFont);
- table = FXDWORD_FROM_MSBFIRST(table);
- size = ::GetFontData(m_hDC, table, 0, buffer, size);
- ::SelectObject(m_hDC, hOldFont);
- if (size == GDI_ERROR) {
- return 0;
- }
- return size;
+void CFX_Win32FontInfo::DeleteFont(void* hFont) {
+ ::DeleteObject(hFont);
}
-FX_BOOL CFX_Win32FontInfo::GetFaceName(void* hFont, CFX_ByteString& name)
-{
- char facebuf[100];
- HFONT hOldFont = (HFONT)::SelectObject(m_hDC, (HFONT)hFont);
- int ret = ::GetTextFaceA(m_hDC, 100, facebuf);
- ::SelectObject(m_hDC, hOldFont);
- if (ret == 0) {
- return FALSE;
- }
- name = facebuf;
- return TRUE;
+FX_DWORD CFX_Win32FontInfo::GetFontData(void* hFont,
+ FX_DWORD table,
+ uint8_t* buffer,
+ FX_DWORD size) {
+ HFONT hOldFont = (HFONT)::SelectObject(m_hDC, (HFONT)hFont);
+ table = FXDWORD_FROM_MSBFIRST(table);
+ size = ::GetFontData(m_hDC, table, 0, buffer, size);
+ ::SelectObject(m_hDC, hOldFont);
+ if (size == GDI_ERROR) {
+ return 0;
+ }
+ return size;
}
-FX_BOOL CFX_Win32FontInfo::GetFontCharset(void* hFont, int& charset)
-{
- TEXTMETRIC tm;
- HFONT hOldFont = (HFONT)::SelectObject(m_hDC, (HFONT)hFont);
- ::GetTextMetrics(m_hDC, &tm);
- ::SelectObject(m_hDC, hOldFont);
- charset = tm.tmCharSet;
- return TRUE;
+FX_BOOL CFX_Win32FontInfo::GetFaceName(void* hFont, CFX_ByteString& name) {
+ char facebuf[100];
+ HFONT hOldFont = (HFONT)::SelectObject(m_hDC, (HFONT)hFont);
+ int ret = ::GetTextFaceA(m_hDC, 100, facebuf);
+ ::SelectObject(m_hDC, hOldFont);
+ if (ret == 0) {
+ return FALSE;
+ }
+ name = facebuf;
+ return TRUE;
}
-IFX_SystemFontInfo* IFX_SystemFontInfo::CreateDefault()
-{
- return new CFX_Win32FontInfo;
+FX_BOOL CFX_Win32FontInfo::GetFontCharset(void* hFont, int& charset) {
+ TEXTMETRIC tm;
+ HFONT hOldFont = (HFONT)::SelectObject(m_hDC, (HFONT)hFont);
+ ::GetTextMetrics(m_hDC, &tm);
+ ::SelectObject(m_hDC, hOldFont);
+ charset = tm.tmCharSet;
+ return TRUE;
}
-void CFX_GEModule::InitPlatform()
-{
- CWin32Platform* pPlatformData = new CWin32Platform;
- OSVERSIONINFO ver;
- ver.dwOSVersionInfoSize = sizeof(ver);
- GetVersionEx(&ver);
- pPlatformData->m_bHalfTone = ver.dwMajorVersion >= 5;
- pPlatformData->m_GdiplusExt.Load();
- m_pPlatformData = pPlatformData;
- m_pFontMgr->SetSystemFontInfo(IFX_SystemFontInfo::CreateDefault());
+IFX_SystemFontInfo* IFX_SystemFontInfo::CreateDefault() {
+ return new CFX_Win32FontInfo;
}
-void CFX_GEModule::DestroyPlatform()
-{
- delete (CWin32Platform*)m_pPlatformData;
- m_pPlatformData = NULL;
+void CFX_GEModule::InitPlatform() {
+ CWin32Platform* pPlatformData = new CWin32Platform;
+ OSVERSIONINFO ver;
+ ver.dwOSVersionInfoSize = sizeof(ver);
+ GetVersionEx(&ver);
+ pPlatformData->m_bHalfTone = ver.dwMajorVersion >= 5;
+ pPlatformData->m_GdiplusExt.Load();
+ m_pPlatformData = pPlatformData;
+ m_pFontMgr->SetSystemFontInfo(IFX_SystemFontInfo::CreateDefault());
}
-CGdiDeviceDriver::CGdiDeviceDriver(HDC hDC, int device_class)
-{
- m_hDC = hDC;
- m_DeviceClass = device_class;
- CWin32Platform* pPlatform = (CWin32Platform*)CFX_GEModule::Get()->GetPlatformData();
- SetStretchBltMode(hDC, pPlatform->m_bHalfTone ? HALFTONE : COLORONCOLOR);
- if (GetObjectType(m_hDC) == OBJ_MEMDC) {
- HBITMAP hBitmap = CreateBitmap(1, 1, 1, 1, NULL);
- hBitmap = (HBITMAP)SelectObject(m_hDC, hBitmap);
- BITMAP bitmap;
- GetObject(hBitmap, sizeof bitmap, &bitmap);
- m_nBitsPerPixel = bitmap.bmBitsPixel;
- m_Width = bitmap.bmWidth;
- m_Height = abs(bitmap.bmHeight);
- hBitmap = (HBITMAP)SelectObject(m_hDC, hBitmap);
- DeleteObject(hBitmap);
- } else {
- m_nBitsPerPixel = ::GetDeviceCaps(m_hDC, BITSPIXEL);
- m_Width = ::GetDeviceCaps(m_hDC, HORZRES);
- m_Height = ::GetDeviceCaps(m_hDC, VERTRES);
- }
- if (m_DeviceClass != FXDC_DISPLAY) {
- m_RenderCaps = FXRC_BIT_MASK;
- } else {
- m_RenderCaps = FXRC_GET_BITS | FXRC_BIT_MASK;
- }
+void CFX_GEModule::DestroyPlatform() {
+ delete (CWin32Platform*)m_pPlatformData;
+ m_pPlatformData = NULL;
}
-int CGdiDeviceDriver::GetDeviceCaps(int caps_id)
-{
- switch (caps_id) {
- case FXDC_DEVICE_CLASS:
- return m_DeviceClass;
- case FXDC_PIXEL_WIDTH:
- return m_Width;
- case FXDC_PIXEL_HEIGHT:
- return m_Height;
- case FXDC_BITS_PIXEL:
- return m_nBitsPerPixel;
- case FXDC_RENDER_CAPS:
- return m_RenderCaps;
- }
- return 0;
+CGdiDeviceDriver::CGdiDeviceDriver(HDC hDC, int device_class) {
+ m_hDC = hDC;
+ m_DeviceClass = device_class;
+ CWin32Platform* pPlatform =
+ (CWin32Platform*)CFX_GEModule::Get()->GetPlatformData();
+ SetStretchBltMode(hDC, pPlatform->m_bHalfTone ? HALFTONE : COLORONCOLOR);
+ if (GetObjectType(m_hDC) == OBJ_MEMDC) {
+ HBITMAP hBitmap = CreateBitmap(1, 1, 1, 1, NULL);
+ hBitmap = (HBITMAP)SelectObject(m_hDC, hBitmap);
+ BITMAP bitmap;
+ GetObject(hBitmap, sizeof bitmap, &bitmap);
+ m_nBitsPerPixel = bitmap.bmBitsPixel;
+ m_Width = bitmap.bmWidth;
+ m_Height = abs(bitmap.bmHeight);
+ hBitmap = (HBITMAP)SelectObject(m_hDC, hBitmap);
+ DeleteObject(hBitmap);
+ } else {
+ m_nBitsPerPixel = ::GetDeviceCaps(m_hDC, BITSPIXEL);
+ m_Width = ::GetDeviceCaps(m_hDC, HORZRES);
+ m_Height = ::GetDeviceCaps(m_hDC, VERTRES);
+ }
+ if (m_DeviceClass != FXDC_DISPLAY) {
+ m_RenderCaps = FXRC_BIT_MASK;
+ } else {
+ m_RenderCaps = FXRC_GET_BITS | FXRC_BIT_MASK;
+ }
}
-void* CGdiDeviceDriver::GetClipRgn()
-{
- HRGN hClipRgn = CreateRectRgn(0, 0, 1, 1);
- if (::GetClipRgn(m_hDC, hClipRgn) == 0) {
- DeleteObject(hClipRgn);
- hClipRgn = NULL;
- }
- return (void*)hClipRgn;
+int CGdiDeviceDriver::GetDeviceCaps(int caps_id) {
+ switch (caps_id) {
+ case FXDC_DEVICE_CLASS:
+ return m_DeviceClass;
+ case FXDC_PIXEL_WIDTH:
+ return m_Width;
+ case FXDC_PIXEL_HEIGHT:
+ return m_Height;
+ case FXDC_BITS_PIXEL:
+ return m_nBitsPerPixel;
+ case FXDC_RENDER_CAPS:
+ return m_RenderCaps;
+ }
+ return 0;
}
-FX_BOOL CGdiDeviceDriver::GDI_SetDIBits(const CFX_DIBitmap* pBitmap1, const FX_RECT* pSrcRect, int left, int top, void* pIccTransform)
-{
- if (m_DeviceClass == FXDC_PRINTER) {
- CFX_DIBitmap* pBitmap = pBitmap1->FlipImage(FALSE, TRUE);
- if (pBitmap == NULL) {
- return FALSE;
- }
- if ((pBitmap->IsCmykImage() || pIccTransform) &&
- !pBitmap->ConvertFormat(FXDIB_Rgb, pIccTransform)) {
- return FALSE;
- }
- int width = pSrcRect->Width(), height = pSrcRect->Height();
- int pitch = pBitmap->GetPitch();
- LPBYTE pBuffer = pBitmap->GetBuffer();
- CFX_ByteString info = CFX_WindowsDIB::GetBitmapInfo(pBitmap);
- ((BITMAPINFOHEADER*)info.c_str())->biHeight *= -1;
- FX_RECT dst_rect(0, 0, width, height);
- dst_rect.Intersect(0, 0, pBitmap->GetWidth(), pBitmap->GetHeight());
- int dst_width = dst_rect.Width();
- int dst_height = dst_rect.Height();
- ::StretchDIBits(m_hDC, left, top, dst_width, dst_height,
- 0, 0, dst_width, dst_height, pBuffer, (BITMAPINFO*)info.c_str(), DIB_RGB_COLORS, SRCCOPY);
- delete pBitmap;
- } else {
- CFX_DIBitmap* pBitmap = (CFX_DIBitmap*)pBitmap1;
- if ((pBitmap->IsCmykImage() || pIccTransform) &&
- (pBitmap = pBitmap->CloneConvert(FXDIB_Rgb, NULL, pIccTransform)) == NULL) {
- return FALSE;
- }
- int width = pSrcRect->Width(), height = pSrcRect->Height();
- int pitch = pBitmap->GetPitch();
- LPBYTE pBuffer = pBitmap->GetBuffer();
- CFX_ByteString info = CFX_WindowsDIB::GetBitmapInfo(pBitmap);
- ::SetDIBitsToDevice(m_hDC, left, top, width, height, pSrcRect->left, pBitmap->GetHeight() - pSrcRect->bottom,
- 0, pBitmap->GetHeight(), pBuffer, (BITMAPINFO*)info.c_str(), DIB_RGB_COLORS);
- if (pBitmap != pBitmap1) {
- delete pBitmap;
- }
- }
- return TRUE;
+void* CGdiDeviceDriver::GetClipRgn() {
+ HRGN hClipRgn = CreateRectRgn(0, 0, 1, 1);
+ if (::GetClipRgn(m_hDC, hClipRgn) == 0) {
+ DeleteObject(hClipRgn);
+ hClipRgn = NULL;
+ }
+ return (void*)hClipRgn;
}
-FX_BOOL CGdiDeviceDriver::GDI_StretchDIBits(const CFX_DIBitmap* pBitmap1, int dest_left, int dest_top,
- int dest_width, int dest_height, FX_DWORD flags, void* pIccTransform)
-{
- CFX_DIBitmap* pBitmap = (CFX_DIBitmap*)pBitmap1;
- if (pBitmap == NULL || dest_width == 0 || dest_height == 0) {
- return FALSE;
+FX_BOOL CGdiDeviceDriver::GDI_SetDIBits(const CFX_DIBitmap* pBitmap1,
+ const FX_RECT* pSrcRect,
+ int left,
+ int top,
+ void* pIccTransform) {
+ if (m_DeviceClass == FXDC_PRINTER) {
+ CFX_DIBitmap* pBitmap = pBitmap1->FlipImage(FALSE, TRUE);
+ if (pBitmap == NULL) {
+ return FALSE;
}
if ((pBitmap->IsCmykImage() || pIccTransform) &&
- !pBitmap->ConvertFormat(FXDIB_Rgb, pIccTransform)) {
- return FALSE;
+ !pBitmap->ConvertFormat(FXDIB_Rgb, pIccTransform)) {
+ return FALSE;
}
+ int width = pSrcRect->Width(), height = pSrcRect->Height();
+ int pitch = pBitmap->GetPitch();
+ LPBYTE pBuffer = pBitmap->GetBuffer();
CFX_ByteString info = CFX_WindowsDIB::GetBitmapInfo(pBitmap);
- if ((int64_t)abs(dest_width) * abs(dest_height) < (int64_t)pBitmap1->GetWidth() * pBitmap1->GetHeight() * 4 ||
- (flags & FXDIB_INTERPOL) || (flags & FXDIB_BICUBIC_INTERPOL)) {
- SetStretchBltMode(m_hDC, HALFTONE);
- } else {
- SetStretchBltMode(m_hDC, COLORONCOLOR);
- }
- CFX_DIBitmap* pToStrechBitmap = pBitmap;
- bool del = false;
- if (m_DeviceClass == FXDC_PRINTER && ((int64_t)pBitmap->GetWidth() * pBitmap->GetHeight() > (int64_t)abs(dest_width) * abs(dest_height))) {
- pToStrechBitmap = pBitmap->StretchTo(dest_width, dest_height);
- del = true;
- }
- CFX_ByteString toStrechBitmapInfo = CFX_WindowsDIB::GetBitmapInfo(pToStrechBitmap);
- ::StretchDIBits(m_hDC, dest_left, dest_top, dest_width, dest_height,
- 0, 0, pToStrechBitmap->GetWidth(), pToStrechBitmap->GetHeight(), pToStrechBitmap->GetBuffer(),
- (BITMAPINFO*)toStrechBitmapInfo.c_str(), DIB_RGB_COLORS, SRCCOPY);
- if (del) {
- delete pToStrechBitmap;
- }
- return TRUE;
-}
-FX_BOOL CGdiDeviceDriver::GDI_StretchBitMask(const CFX_DIBitmap* pBitmap1, int dest_left, int dest_top,
- int dest_width, int dest_height, FX_DWORD bitmap_color, FX_DWORD flags,
- int alpha_flag, void* pIccTransform)
-{
+ ((BITMAPINFOHEADER*)info.c_str())->biHeight *= -1;
+ FX_RECT dst_rect(0, 0, width, height);
+ dst_rect.Intersect(0, 0, pBitmap->GetWidth(), pBitmap->GetHeight());
+ int dst_width = dst_rect.Width();
+ int dst_height = dst_rect.Height();
+ ::StretchDIBits(m_hDC, left, top, dst_width, dst_height, 0, 0, dst_width,
+ dst_height, pBuffer, (BITMAPINFO*)info.c_str(),
+ DIB_RGB_COLORS, SRCCOPY);
+ delete pBitmap;
+ } else {
CFX_DIBitmap* pBitmap = (CFX_DIBitmap*)pBitmap1;
- if (pBitmap == NULL || dest_width == 0 || dest_height == 0) {
- return FALSE;
- }
- _Color2Argb(bitmap_color, bitmap_color, alpha_flag | (1 << 24), pIccTransform);
- int width = pBitmap->GetWidth(), height = pBitmap->GetHeight();
- struct {
- BITMAPINFOHEADER bmiHeader;
- FX_DWORD bmiColors[2];
- } bmi;
- FXSYS_memset(&bmi.bmiHeader, 0, sizeof (BITMAPINFOHEADER));
- bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
- bmi.bmiHeader.biBitCount = 1;
- bmi.bmiHeader.biCompression = BI_RGB;
- bmi.bmiHeader.biHeight = -height;
- bmi.bmiHeader.biPlanes = 1;
- bmi.bmiHeader.biWidth = width;
- if (m_nBitsPerPixel != 1) {
- SetStretchBltMode(m_hDC, HALFTONE);
+ if ((pBitmap->IsCmykImage() || pIccTransform) &&
+ (pBitmap = pBitmap->CloneConvert(FXDIB_Rgb, NULL, pIccTransform)) ==
+ NULL) {
+ return FALSE;
}
- bmi.bmiColors[0] = 0xffffff;
- bmi.bmiColors[1] = 0;
-
- HBRUSH hPattern = CreateSolidBrush(bitmap_color & 0xffffff);
- HBRUSH hOld = (HBRUSH)SelectObject(m_hDC, hPattern);
+ int width = pSrcRect->Width(), height = pSrcRect->Height();
+ int pitch = pBitmap->GetPitch();
+ LPBYTE pBuffer = pBitmap->GetBuffer();
+ CFX_ByteString info = CFX_WindowsDIB::GetBitmapInfo(pBitmap);
+ ::SetDIBitsToDevice(m_hDC, left, top, width, height, pSrcRect->left,
+ pBitmap->GetHeight() - pSrcRect->bottom, 0,
+ pBitmap->GetHeight(), pBuffer,
+ (BITMAPINFO*)info.c_str(), DIB_RGB_COLORS);
+ if (pBitmap != pBitmap1) {
+ delete pBitmap;
+ }
+ }
+ return TRUE;
+}
+FX_BOOL CGdiDeviceDriver::GDI_StretchDIBits(const CFX_DIBitmap* pBitmap1,
+ int dest_left,
+ int dest_top,
+ int dest_width,
+ int dest_height,
+ FX_DWORD flags,
+ void* pIccTransform) {
+ CFX_DIBitmap* pBitmap = (CFX_DIBitmap*)pBitmap1;
+ if (pBitmap == NULL || dest_width == 0 || dest_height == 0) {
+ return FALSE;
+ }
+ if ((pBitmap->IsCmykImage() || pIccTransform) &&
+ !pBitmap->ConvertFormat(FXDIB_Rgb, pIccTransform)) {
+ return FALSE;
+ }
+ CFX_ByteString info = CFX_WindowsDIB::GetBitmapInfo(pBitmap);
+ if ((int64_t)abs(dest_width) * abs(dest_height) <
+ (int64_t)pBitmap1->GetWidth() * pBitmap1->GetHeight() * 4 ||
+ (flags & FXDIB_INTERPOL) || (flags & FXDIB_BICUBIC_INTERPOL)) {
+ SetStretchBltMode(m_hDC, HALFTONE);
+ } else {
+ SetStretchBltMode(m_hDC, COLORONCOLOR);
+ }
+ CFX_DIBitmap* pToStrechBitmap = pBitmap;
+ bool del = false;
+ if (m_DeviceClass == FXDC_PRINTER &&
+ ((int64_t)pBitmap->GetWidth() * pBitmap->GetHeight() >
+ (int64_t)abs(dest_width) * abs(dest_height))) {
+ pToStrechBitmap = pBitmap->StretchTo(dest_width, dest_height);
+ del = true;
+ }
+ CFX_ByteString toStrechBitmapInfo =
+ CFX_WindowsDIB::GetBitmapInfo(pToStrechBitmap);
+ ::StretchDIBits(m_hDC, dest_left, dest_top, dest_width, dest_height, 0, 0,
+ pToStrechBitmap->GetWidth(), pToStrechBitmap->GetHeight(),
+ pToStrechBitmap->GetBuffer(),
+ (BITMAPINFO*)toStrechBitmapInfo.c_str(), DIB_RGB_COLORS,
+ SRCCOPY);
+ if (del) {
+ delete pToStrechBitmap;
+ }
+ return TRUE;
+}
+FX_BOOL CGdiDeviceDriver::GDI_StretchBitMask(const CFX_DIBitmap* pBitmap1,
+ int dest_left,
+ int dest_top,
+ int dest_width,
+ int dest_height,
+ FX_DWORD bitmap_color,
+ FX_DWORD flags,
+ int alpha_flag,
+ void* pIccTransform) {
+ CFX_DIBitmap* pBitmap = (CFX_DIBitmap*)pBitmap1;
+ if (pBitmap == NULL || dest_width == 0 || dest_height == 0) {
+ return FALSE;
+ }
+ _Color2Argb(bitmap_color, bitmap_color, alpha_flag | (1 << 24),
+ pIccTransform);
+ int width = pBitmap->GetWidth(), height = pBitmap->GetHeight();
+ struct {
+ BITMAPINFOHEADER bmiHeader;
+ FX_DWORD bmiColors[2];
+ } bmi;
+ FXSYS_memset(&bmi.bmiHeader, 0, sizeof(BITMAPINFOHEADER));
+ bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
+ bmi.bmiHeader.biBitCount = 1;
+ bmi.bmiHeader.biCompression = BI_RGB;
+ bmi.bmiHeader.biHeight = -height;
+ bmi.bmiHeader.biPlanes = 1;
+ bmi.bmiHeader.biWidth = width;
+ if (m_nBitsPerPixel != 1) {
+ SetStretchBltMode(m_hDC, HALFTONE);
+ }
+ bmi.bmiColors[0] = 0xffffff;
+ bmi.bmiColors[1] = 0;
+ HBRUSH hPattern = CreateSolidBrush(bitmap_color & 0xffffff);
+ HBRUSH hOld = (HBRUSH)SelectObject(m_hDC, hPattern);
- // In PDF, when image mask is 1, use device bitmap; when mask is 0, use brush bitmap.
- // A complete list of the boolen operations is as follows:
+ // In PDF, when image mask is 1, use device bitmap; when mask is 0, use brush
+ // bitmap.
+ // A complete list of the boolen operations is as follows:
- /* P(bitmap_color) S(ImageMask) D(DeviceBitmap) Result
- * 0 0 0 0
- * 0 0 1 0
- * 0 1 0 0
- * 0 1 1 1
- * 1 0 0 1
- * 1 0 1 1
- * 1 1 0 0
- * 1 1 1 1
- */
- // The boolen codes is B8. Based on http://msdn.microsoft.com/en-us/library/aa932106.aspx, the ROP3 code is 0xB8074A
+ /* P(bitmap_color) S(ImageMask) D(DeviceBitmap) Result
+ * 0 0 0 0
+ * 0 0 1 0
+ * 0 1 0 0
+ * 0 1 1 1
+ * 1 0 0 1
+ * 1 0 1 1
+ * 1 1 0 0
+ * 1 1 1 1
+ */
+ // The boolen codes is B8. Based on
+ // http://msdn.microsoft.com/en-us/library/aa932106.aspx, the ROP3 code is
+ // 0xB8074A
- ::StretchDIBits(m_hDC, dest_left, dest_top, dest_width, dest_height,
- 0, 0, width, height, pBitmap->GetBuffer(), (BITMAPINFO*)&bmi, DIB_RGB_COLORS, 0xB8074A);
+ ::StretchDIBits(m_hDC, dest_left, dest_top, dest_width, dest_height, 0, 0,
+ width, height, pBitmap->GetBuffer(), (BITMAPINFO*)&bmi,
+ DIB_RGB_COLORS, 0xB8074A);
- SelectObject(m_hDC, hOld);
- DeleteObject(hPattern);
+ SelectObject(m_hDC, hOld);
+ DeleteObject(hPattern);
- return TRUE;
+ return TRUE;
}
-FX_BOOL CGdiDeviceDriver::GetClipBox(FX_RECT* pRect)
-{
- return ::GetClipBox(m_hDC, (RECT*)pRect);
+FX_BOOL CGdiDeviceDriver::GetClipBox(FX_RECT* pRect) {
+ return ::GetClipBox(m_hDC, (RECT*)pRect);
}
-FX_BOOL CGdiDeviceDriver::SetClipRgn(void* hRgn)
-{
- ::SelectClipRgn(m_hDC, (HRGN)hRgn);
- return TRUE;
+FX_BOOL CGdiDeviceDriver::SetClipRgn(void* hRgn) {
+ ::SelectClipRgn(m_hDC, (HRGN)hRgn);
+ return TRUE;
}
-static HPEN _CreatePen(const CFX_GraphStateData* pGraphState, const CFX_AffineMatrix* pMatrix, FX_DWORD argb)
-{
- FX_FLOAT width;
- FX_FLOAT scale = 1.f;
- if (pMatrix)
- scale = FXSYS_fabs(pMatrix->a) > FXSYS_fabs(pMatrix->b) ?
- FXSYS_fabs(pMatrix->a) : FXSYS_fabs(pMatrix->b);
- if (pGraphState) {
- width = scale * pGraphState->m_LineWidth;
- } else {
- width = 1.0f;
- }
- FX_DWORD PenStyle = PS_GEOMETRIC;
- if (width < 1) {
- width = 1;
- }
- if(pGraphState->m_DashCount) {
- PenStyle |= PS_USERSTYLE;
- } else {
- PenStyle |= PS_SOLID;
- }
- switch(pGraphState->m_LineCap) {
- case 0:
- PenStyle |= PS_ENDCAP_FLAT;
- break;
- case 1:
- PenStyle |= PS_ENDCAP_ROUND;
- break;
- case 2:
- PenStyle |= PS_ENDCAP_SQUARE;
- break;
- }
- switch(pGraphState->m_LineJoin) {
- case 0:
- PenStyle |= PS_JOIN_MITER;
- break;
- case 1:
- PenStyle |= PS_JOIN_ROUND;
- break;
- case 2:
- PenStyle |= PS_JOIN_BEVEL;
- break;
- }
- int a;
- FX_COLORREF rgb;
- ArgbDecode(argb, a, rgb);
- LOGBRUSH lb;
- lb.lbColor = rgb;
- lb.lbStyle = BS_SOLID;
- lb.lbHatch = 0;
- FX_DWORD* pDash = NULL;
- if (pGraphState->m_DashCount) {
- pDash = FX_Alloc(FX_DWORD, pGraphState->m_DashCount);
- for (int i = 0; i < pGraphState->m_DashCount; i ++) {
- pDash[i] = FXSYS_round(pMatrix ? pMatrix->TransformDistance(pGraphState->m_DashArray[i]) : pGraphState->m_DashArray[i]);
- if (pDash[i] < 1) {
- pDash[i] = 1;
- }
- }
- }
- HPEN hPen = ExtCreatePen(PenStyle, (DWORD)FXSYS_ceil(width), &lb, pGraphState->m_DashCount, (const DWORD*)pDash);
- if (pDash) {
- FX_Free(pDash);
- }
- return hPen;
+static HPEN _CreatePen(const CFX_GraphStateData* pGraphState,
+ const CFX_AffineMatrix* pMatrix,
+ FX_DWORD argb) {
+ FX_FLOAT width;
+ FX_FLOAT scale = 1.f;
+ if (pMatrix)
+ scale = FXSYS_fabs(pMatrix->a) > FXSYS_fabs(pMatrix->b)
+ ? FXSYS_fabs(pMatrix->a)
+ : FXSYS_fabs(pMatrix->b);
+ if (pGraphState) {
+ width = scale * pGraphState->m_LineWidth;
+ } else {
+ width = 1.0f;
+ }
+ FX_DWORD PenStyle = PS_GEOMETRIC;
+ if (width < 1) {
+ width = 1;
+ }
+ if (pGraphState->m_DashCount) {
+ PenStyle |= PS_USERSTYLE;
+ } else {
+ PenStyle |= PS_SOLID;
+ }
+ switch (pGraphState->m_LineCap) {
+ case 0:
+ PenStyle |= PS_ENDCAP_FLAT;
+ break;
+ case 1:
+ PenStyle |= PS_ENDCAP_ROUND;
+ break;
+ case 2:
+ PenStyle |= PS_ENDCAP_SQUARE;
+ break;
+ }
+ switch (pGraphState->m_LineJoin) {
+ case 0:
+ PenStyle |= PS_JOIN_MITER;
+ break;
+ case 1:
+ PenStyle |= PS_JOIN_ROUND;
+ break;
+ case 2:
+ PenStyle |= PS_JOIN_BEVEL;
+ break;
+ }
+ int a;
+ FX_COLORREF rgb;
+ ArgbDecode(argb, a, rgb);
+ LOGBRUSH lb;
+ lb.lbColor = rgb;
+ lb.lbStyle = BS_SOLID;
+ lb.lbHatch = 0;
+ FX_DWORD* pDash = NULL;
+ if (pGraphState->m_DashCount) {
+ pDash = FX_Alloc(FX_DWORD, pGraphState->m_DashCount);
+ for (int i = 0; i < pGraphState->m_DashCount; i++) {
+ pDash[i] = FXSYS_round(
+ pMatrix ? pMatrix->TransformDistance(pGraphState->m_DashArray[i])
+ : pGraphState->m_DashArray[i]);
+ if (pDash[i] < 1) {
+ pDash[i] = 1;
+ }
+ }
+ }
+ HPEN hPen = ExtCreatePen(PenStyle, (DWORD)FXSYS_ceil(width), &lb,
+ pGraphState->m_DashCount, (const DWORD*)pDash);
+ if (pDash) {
+ FX_Free(pDash);
+ }
+ return hPen;
}
-static HBRUSH _CreateBrush(FX_DWORD argb)
-{
- int a;
- FX_COLORREF rgb;
- ArgbDecode(argb, a, rgb);
- return CreateSolidBrush(rgb);
+static HBRUSH _CreateBrush(FX_DWORD argb) {
+ int a;
+ FX_COLORREF rgb;
+ ArgbDecode(argb, a, rgb);
+ return CreateSolidBrush(rgb);
}
-static void _SetPathToDC(HDC hDC, const CFX_PathData* pPathData, const CFX_AffineMatrix* pMatrix)
-{
- BeginPath(hDC);
- int nPoints = pPathData->GetPointCount();
- FX_PATHPOINT* pPoints = pPathData->GetPoints();
- for(int i = 0; i < nPoints; i++) {
- FX_FLOAT posx = pPoints[i].m_PointX, posy = pPoints[i].m_PointY;
- if (pMatrix) {
- pMatrix->Transform(posx, posy);
- }
- int screen_x = FXSYS_round(posx), screen_y = FXSYS_round(posy);
- int point_type = pPoints[i].m_Flag & FXPT_TYPE;
- if(point_type == PT_MOVETO) {
- MoveToEx(hDC, screen_x, screen_y, NULL);
- } else if(point_type == PT_LINETO) {
- if (pPoints[i].m_PointY == pPoints[i - 1].m_PointY && pPoints[i].m_PointX == pPoints[i - 1].m_PointX) {
- screen_x ++;
- }
- LineTo(hDC, screen_x, screen_y);
- } else if(point_type == PT_BEZIERTO) {
- POINT lppt[3];
- lppt[0].x = screen_x;
- lppt[0].y = screen_y;
- posx = pPoints[i + 1].m_PointX;
- posy = pPoints[i + 1].m_PointY;
- if (pMatrix) {
- pMatrix->Transform(posx, posy);
- }
- lppt[1].x = FXSYS_round(posx);
- lppt[1].y = FXSYS_round(posy);
- posx = pPoints[i + 2].m_PointX;
- posy = pPoints[i + 2].m_PointY;
- if (pMatrix) {
- pMatrix->Transform(posx, posy);
- }
- lppt[2].x = FXSYS_round(posx);
- lppt[2].y = FXSYS_round(posy);
- PolyBezierTo(hDC, lppt, 3);
- i += 2;
- }
- if (pPoints[i].m_Flag & PT_CLOSEFIGURE) {
- CloseFigure(hDC);
- }
- }
- EndPath(hDC);
+static void _SetPathToDC(HDC hDC,
+ const CFX_PathData* pPathData,
+ const CFX_AffineMatrix* pMatrix) {
+ BeginPath(hDC);
+ int nPoints = pPathData->GetPointCount();
+ FX_PATHPOINT* pPoints = pPathData->GetPoints();
+ for (int i = 0; i < nPoints; i++) {
+ FX_FLOAT posx = pPoints[i].m_PointX, posy = pPoints[i].m_PointY;
+ if (pMatrix) {
+ pMatrix->Transform(posx, posy);
+ }
+ int screen_x = FXSYS_round(posx), screen_y = FXSYS_round(posy);
+ int point_type = pPoints[i].m_Flag & FXPT_TYPE;
+ if (point_type == PT_MOVETO) {
+ MoveToEx(hDC, screen_x, screen_y, NULL);
+ } else if (point_type == PT_LINETO) {
+ if (pPoints[i].m_PointY == pPoints[i - 1].m_PointY &&
+ pPoints[i].m_PointX == pPoints[i - 1].m_PointX) {
+ screen_x++;
+ }
+ LineTo(hDC, screen_x, screen_y);
+ } else if (point_type == PT_BEZIERTO) {
+ POINT lppt[3];
+ lppt[0].x = screen_x;
+ lppt[0].y = screen_y;
+ posx = pPoints[i + 1].m_PointX;
+ posy = pPoints[i + 1].m_PointY;
+ if (pMatrix) {
+ pMatrix->Transform(posx, posy);
+ }
+ lppt[1].x = FXSYS_round(posx);
+ lppt[1].y = FXSYS_round(posy);
+ posx = pPoints[i + 2].m_PointX;
+ posy = pPoints[i + 2].m_PointY;
+ if (pMatrix) {
+ pMatrix->Transform(posx, posy);
+ }
+ lppt[2].x = FXSYS_round(posx);
+ lppt[2].y = FXSYS_round(posy);
+ PolyBezierTo(hDC, lppt, 3);
+ i += 2;
+ }
+ if (pPoints[i].m_Flag & PT_CLOSEFIGURE) {
+ CloseFigure(hDC);
+ }
+ }
+ EndPath(hDC);
}
-void CGdiDeviceDriver::DrawLine(FX_FLOAT x1, FX_FLOAT y1, FX_FLOAT x2, FX_FLOAT y2)
-{
- int flag1 = (x1 < 0) | ((x1 > m_Width) << 1) | ((y1 < 0) << 2) | ((y1 > m_Height) << 3);
- int flag2 = (x2 < 0) | ((x2 > m_Width) << 1) | ((y2 < 0) << 2) | ((y2 > m_Height) << 3);
- if (flag1 & flag2) {
- return;
- }
- if (flag1 || flag2) {
- agg::rect_base<FX_FLOAT> rect(0.0f, 0.0f, (FX_FLOAT)(m_Width), (FX_FLOAT)(m_Height));
- FX_FLOAT x[2], y[2];
- int np = agg::clip_liang_barsky<FX_FLOAT>(x1, y1, x2, y2, rect, x, y);
- if (np == 0) {
- return;
- }
- if (np == 1) {
- x2 = x[0];
- y2 = y[0];
- } else {
- x1 = x[0];
- y1 = y[0];
- x2 = x[np - 1];
- y2 = y[np - 1];
- }
- }
- MoveToEx(m_hDC, FXSYS_round(x1), FXSYS_round(y1), NULL);
- LineTo(m_hDC, FXSYS_round(x2), FXSYS_round(y2));
+void CGdiDeviceDriver::DrawLine(FX_FLOAT x1,
+ FX_FLOAT y1,
+ FX_FLOAT x2,
+ FX_FLOAT y2) {
+ int flag1 = (x1 < 0) | ((x1 > m_Width) << 1) | ((y1 < 0) << 2) |
+ ((y1 > m_Height) << 3);
+ int flag2 = (x2 < 0) | ((x2 > m_Width) << 1) | ((y2 < 0) << 2) |
+ ((y2 > m_Height) << 3);
+ if (flag1 & flag2) {
+ return;
+ }
+ if (flag1 || flag2) {
+ agg::rect_base<FX_FLOAT> rect(0.0f, 0.0f, (FX_FLOAT)(m_Width),
+ (FX_FLOAT)(m_Height));
+ FX_FLOAT x[2], y[2];
+ int np = agg::clip_liang_barsky<FX_FLOAT>(x1, y1, x2, y2, rect, x, y);
+ if (np == 0) {
+ return;
+ }
+ if (np == 1) {
+ x2 = x[0];
+ y2 = y[0];
+ } else {
+ x1 = x[0];
+ y1 = y[0];
+ x2 = x[np - 1];
+ y2 = y[np - 1];
+ }
+ }
+ MoveToEx(m_hDC, FXSYS_round(x1), FXSYS_round(y1), NULL);
+ LineTo(m_hDC, FXSYS_round(x2), FXSYS_round(y2));
}
-static FX_BOOL _MatrixNoScaled(const CFX_AffineMatrix* pMatrix)
-{
- return pMatrix->GetA() == 1.0f && pMatrix->GetB() == 0 && pMatrix->GetC() == 0 && pMatrix->GetD() == 1.0f;
+static FX_BOOL _MatrixNoScaled(const CFX_AffineMatrix* pMatrix) {
+ return pMatrix->GetA() == 1.0f && pMatrix->GetB() == 0 &&
+ pMatrix->GetC() == 0 && pMatrix->GetD() == 1.0f;
}
FX_BOOL CGdiDeviceDriver::DrawPath(const CFX_PathData* pPathData,
const CFX_AffineMatrix* pMatrix,
@@ -761,446 +798,519 @@ FX_BOOL CGdiDeviceDriver::DrawPath(const CFX_PathData* pPathData,
int fill_mode,
int alpha_flag,
void* pIccTransform,
- int blend_type
- )
-{
- if (blend_type != FXDIB_BLEND_NORMAL) {
- return FALSE;
- }
- _Color2Argb(fill_color, fill_color, alpha_flag | (1 << 24), pIccTransform);
- _Color2Argb(stroke_color, stroke_color, alpha_flag, pIccTransform);
- CWin32Platform* pPlatform = (CWin32Platform*)CFX_GEModule::Get()->GetPlatformData();
- if ((pGraphState == NULL || stroke_color == 0) && !pPlatform->m_GdiplusExt.IsAvailable()) {
- CFX_FloatRect bbox_f = pPathData->GetBoundingBox();
- if (pMatrix) {
- bbox_f.Transform(pMatrix);
- }
- FX_RECT bbox = bbox_f.GetInnerRect();
- if (bbox.Width() <= 0) {
- return DrawCosmeticLine((FX_FLOAT)(bbox.left), (FX_FLOAT)(bbox.top), (FX_FLOAT)(bbox.left), (FX_FLOAT)(bbox.bottom + 1), fill_color,
- alpha_flag, pIccTransform, FXDIB_BLEND_NORMAL);
- } else if (bbox.Height() <= 0) {
- return DrawCosmeticLine((FX_FLOAT)(bbox.left), (FX_FLOAT)(bbox.top), (FX_FLOAT)(bbox.right + 1), (FX_FLOAT)(bbox.top), fill_color,
- alpha_flag, pIccTransform, FXDIB_BLEND_NORMAL);
- }
- }
- int fill_alpha = FXARGB_A(fill_color);
- int stroke_alpha = FXARGB_A(stroke_color);
- FX_BOOL bDrawAlpha = (fill_alpha > 0 && fill_alpha < 255) || (stroke_alpha > 0 && stroke_alpha < 255 && pGraphState);
- if (!pPlatform->m_GdiplusExt.IsAvailable() && bDrawAlpha) {
- return FALSE;
- }
- if (pPlatform->m_GdiplusExt.IsAvailable()) {
- if (bDrawAlpha || ((m_DeviceClass != FXDC_PRINTER && !(fill_mode & FXFILL_FULLCOVER)) || (pGraphState && pGraphState->m_DashCount))) {
- if ( !((NULL == pMatrix || _MatrixNoScaled(pMatrix)) &&
- pGraphState && pGraphState->m_LineWidth == 1.f &&
- (pPathData->GetPointCount() == 5 || pPathData->GetPointCount() == 4) &&
- pPathData->IsRect()) ) {
- if (pPlatform->m_GdiplusExt.DrawPath(m_hDC, pPathData, pMatrix, pGraphState, fill_color, stroke_color, fill_mode)) {
- return TRUE;
- }
- }
+ int blend_type) {
+ if (blend_type != FXDIB_BLEND_NORMAL) {
+ return FALSE;
+ }
+ _Color2Argb(fill_color, fill_color, alpha_flag | (1 << 24), pIccTransform);
+ _Color2Argb(stroke_color, stroke_color, alpha_flag, pIccTransform);
+ CWin32Platform* pPlatform =
+ (CWin32Platform*)CFX_GEModule::Get()->GetPlatformData();
+ if ((pGraphState == NULL || stroke_color == 0) &&
+ !pPlatform->m_GdiplusExt.IsAvailable()) {
+ CFX_FloatRect bbox_f = pPathData->GetBoundingBox();
+ if (pMatrix) {
+ bbox_f.Transform(pMatrix);
+ }
+ FX_RECT bbox = bbox_f.GetInnerRect();
+ if (bbox.Width() <= 0) {
+ return DrawCosmeticLine((FX_FLOAT)(bbox.left), (FX_FLOAT)(bbox.top),
+ (FX_FLOAT)(bbox.left),
+ (FX_FLOAT)(bbox.bottom + 1), fill_color,
+ alpha_flag, pIccTransform, FXDIB_BLEND_NORMAL);
+ } else if (bbox.Height() <= 0) {
+ return DrawCosmeticLine((FX_FLOAT)(bbox.left), (FX_FLOAT)(bbox.top),
+ (FX_FLOAT)(bbox.right + 1), (FX_FLOAT)(bbox.top),
+ fill_color, alpha_flag, pIccTransform,
+ FXDIB_BLEND_NORMAL);
+ }
+ }
+ int fill_alpha = FXARGB_A(fill_color);
+ int stroke_alpha = FXARGB_A(stroke_color);
+ FX_BOOL bDrawAlpha = (fill_alpha > 0 && fill_alpha < 255) ||
+ (stroke_alpha > 0 && stroke_alpha < 255 && pGraphState);
+ if (!pPlatform->m_GdiplusExt.IsAvailable() && bDrawAlpha) {
+ return FALSE;
+ }
+ if (pPlatform->m_GdiplusExt.IsAvailable()) {
+ if (bDrawAlpha ||
+ ((m_DeviceClass != FXDC_PRINTER && !(fill_mode & FXFILL_FULLCOVER)) ||
+ (pGraphState && pGraphState->m_DashCount))) {
+ if (!((NULL == pMatrix || _MatrixNoScaled(pMatrix)) && pGraphState &&
+ pGraphState->m_LineWidth == 1.f &&
+ (pPathData->GetPointCount() == 5 ||
+ pPathData->GetPointCount() == 4) &&
+ pPathData->IsRect())) {
+ if (pPlatform->m_GdiplusExt.DrawPath(m_hDC, pPathData, pMatrix,
+ pGraphState, fill_color,
+ stroke_color, fill_mode)) {
+ return TRUE;
}
- }
- int old_fill_mode = fill_mode;
- fill_mode &= 3;
- HPEN hPen = NULL;
- HBRUSH hBrush = NULL;
+ }
+ }
+ }
+ int old_fill_mode = fill_mode;
+ fill_mode &= 3;
+ HPEN hPen = NULL;
+ HBRUSH hBrush = NULL;
+ if (pGraphState && stroke_alpha) {
+ SetMiterLimit(m_hDC, pGraphState->m_MiterLimit, NULL);
+ hPen = _CreatePen(pGraphState, pMatrix, stroke_color);
+ hPen = (HPEN)SelectObject(m_hDC, hPen);
+ }
+ if (fill_mode && fill_alpha) {
+ SetPolyFillMode(m_hDC, fill_mode);
+ hBrush = _CreateBrush(fill_color);
+ hBrush = (HBRUSH)SelectObject(m_hDC, hBrush);
+ }
+ if (pPathData->GetPointCount() == 2 && pGraphState &&
+ pGraphState->m_DashCount) {
+ FX_FLOAT x1 = pPathData->GetPointX(0), y1 = pPathData->GetPointY(0);
+ if (pMatrix) {
+ pMatrix->Transform(x1, y1);
+ }
+ FX_FLOAT x2 = pPathData->GetPointX(1), y2 = pPathData->GetPointY(1);
+ if (pMatrix) {
+ pMatrix->Transform(x2, y2);
+ }
+ DrawLine(x1, y1, x2, y2);
+ } else {
+ _SetPathToDC(m_hDC, pPathData, pMatrix);
if (pGraphState && stroke_alpha) {
- SetMiterLimit(m_hDC, pGraphState->m_MiterLimit, NULL);
- hPen = _CreatePen(pGraphState, pMatrix, stroke_color);
- hPen = (HPEN)SelectObject(m_hDC, hPen);
- }
- if (fill_mode && fill_alpha) {
- SetPolyFillMode(m_hDC, fill_mode);
- hBrush = _CreateBrush(fill_color);
- hBrush = (HBRUSH)SelectObject(m_hDC, hBrush);
- }
- if (pPathData->GetPointCount() == 2 && pGraphState && pGraphState->m_DashCount) {
- FX_FLOAT x1 = pPathData->GetPointX(0), y1 = pPathData->GetPointY(0);
- if (pMatrix) {
- pMatrix->Transform(x1, y1);
- }
- FX_FLOAT x2 = pPathData->GetPointX(1), y2 = pPathData->GetPointY(1);
- if (pMatrix) {
- pMatrix->Transform(x2, y2);
- }
- DrawLine(x1, y1, x2, y2);
- } else {
- _SetPathToDC(m_hDC, pPathData, pMatrix);
- if (pGraphState && stroke_alpha) {
- if (fill_mode && fill_alpha) {
- if (old_fill_mode & FX_FILL_TEXT_MODE) {
- StrokeAndFillPath(m_hDC);
- } else {
- FillPath(m_hDC);
- _SetPathToDC(m_hDC, pPathData, pMatrix);
- StrokePath(m_hDC);
- }
- } else {
- StrokePath(m_hDC);
- }
- } else if (fill_mode && fill_alpha) {
- FillPath(m_hDC);
+ if (fill_mode && fill_alpha) {
+ if (old_fill_mode & FX_FILL_TEXT_MODE) {
+ StrokeAndFillPath(m_hDC);
+ } else {
+ FillPath(m_hDC);
+ _SetPathToDC(m_hDC, pPathData, pMatrix);
+ StrokePath(m_hDC);
}
- }
- if (hPen) {
- hPen = (HPEN)SelectObject(m_hDC, hPen);
- DeleteObject(hPen);
- }
- if (hBrush) {
- hBrush = (HBRUSH)SelectObject(m_hDC, hBrush);
- DeleteObject(hBrush);
- }
- return TRUE;
-}
-FX_BOOL CGdiDeviceDriver::FillRect(const FX_RECT* pRect, FX_DWORD fill_color, int alpha_flag, void* pIccTransform, int blend_type)
-{
- if (blend_type != FXDIB_BLEND_NORMAL) {
- return FALSE;
- }
- _Color2Argb(fill_color, fill_color, alpha_flag | (1 << 24), pIccTransform);
- int alpha;
- FX_COLORREF rgb;
- ArgbDecode(fill_color, alpha, rgb);
- if (alpha == 0) {
- return TRUE;
- }
- if (alpha < 255) {
- return FALSE;
- }
- HBRUSH hBrush = CreateSolidBrush(rgb);
- ::FillRect(m_hDC, (RECT*)pRect, hBrush);
+ } else {
+ StrokePath(m_hDC);
+ }
+ } else if (fill_mode && fill_alpha) {
+ FillPath(m_hDC);
+ }
+ }
+ if (hPen) {
+ hPen = (HPEN)SelectObject(m_hDC, hPen);
+ DeleteObject(hPen);
+ }
+ if (hBrush) {
+ hBrush = (HBRUSH)SelectObject(m_hDC, hBrush);
DeleteObject(hBrush);
+ }
+ return TRUE;
+}
+FX_BOOL CGdiDeviceDriver::FillRect(const FX_RECT* pRect,
+ FX_DWORD fill_color,
+ int alpha_flag,
+ void* pIccTransform,
+ int blend_type) {
+ if (blend_type != FXDIB_BLEND_NORMAL) {
+ return FALSE;
+ }
+ _Color2Argb(fill_color, fill_color, alpha_flag | (1 << 24), pIccTransform);
+ int alpha;
+ FX_COLORREF rgb;
+ ArgbDecode(fill_color, alpha, rgb);
+ if (alpha == 0) {
return TRUE;
+ }
+ if (alpha < 255) {
+ return FALSE;
+ }
+ HBRUSH hBrush = CreateSolidBrush(rgb);
+ ::FillRect(m_hDC, (RECT*)pRect, hBrush);
+ DeleteObject(hBrush);
+ return TRUE;
}
FX_BOOL CGdiDeviceDriver::SetClip_PathFill(const CFX_PathData* pPathData,
- const CFX_AffineMatrix* pMatrix,
- int fill_mode
- )
-{
- if (pPathData->GetPointCount() == 5) {
- CFX_FloatRect rectf;
- if (pPathData->IsRect(pMatrix, &rectf)) {
- FX_RECT rect = rectf.GetOutterRect();
- IntersectClipRect(m_hDC, rect.left, rect.top, rect.right, rect.bottom);
- return TRUE;
- }
- }
- _SetPathToDC(m_hDC, pPathData, pMatrix);
- SetPolyFillMode(m_hDC, fill_mode & 3);
- SelectClipPath(m_hDC, RGN_AND);
- return TRUE;
+ const CFX_AffineMatrix* pMatrix,
+ int fill_mode) {
+ if (pPathData->GetPointCount() == 5) {
+ CFX_FloatRect rectf;
+ if (pPathData->IsRect(pMatrix, &rectf)) {
+ FX_RECT rect = rectf.GetOutterRect();
+ IntersectClipRect(m_hDC, rect.left, rect.top, rect.right, rect.bottom);
+ return TRUE;
+ }
+ }
+ _SetPathToDC(m_hDC, pPathData, pMatrix);
+ SetPolyFillMode(m_hDC, fill_mode & 3);
+ SelectClipPath(m_hDC, RGN_AND);
+ return TRUE;
}
-FX_BOOL CGdiDeviceDriver::SetClip_PathStroke(const CFX_PathData* pPathData,
- const CFX_AffineMatrix* pMatrix,
- const CFX_GraphStateData* pGraphState
- )
-{
- HPEN hPen = _CreatePen(pGraphState, pMatrix, 0xff000000);
- hPen = (HPEN)SelectObject(m_hDC, hPen);
- _SetPathToDC(m_hDC, pPathData, pMatrix);
- WidenPath(m_hDC);
- SetPolyFillMode(m_hDC, WINDING);
- FX_BOOL ret = SelectClipPath(m_hDC, RGN_AND);
- hPen = (HPEN)SelectObject(m_hDC, hPen);
- DeleteObject(hPen);
- return ret;
+FX_BOOL CGdiDeviceDriver::SetClip_PathStroke(
+ const CFX_PathData* pPathData,
+ const CFX_AffineMatrix* pMatrix,
+ const CFX_GraphStateData* pGraphState) {
+ HPEN hPen = _CreatePen(pGraphState, pMatrix, 0xff000000);
+ hPen = (HPEN)SelectObject(m_hDC, hPen);
+ _SetPathToDC(m_hDC, pPathData, pMatrix);
+ WidenPath(m_hDC);
+ SetPolyFillMode(m_hDC, WINDING);
+ FX_BOOL ret = SelectClipPath(m_hDC, RGN_AND);
+ hPen = (HPEN)SelectObject(m_hDC, hPen);
+ DeleteObject(hPen);
+ return ret;
}
-FX_BOOL CGdiDeviceDriver::DrawCosmeticLine(FX_FLOAT x1, FX_FLOAT y1, FX_FLOAT x2, FX_FLOAT y2, FX_DWORD color,
- int alpha_flag, void* pIccTransform, int blend_type)
-{
- if (blend_type != FXDIB_BLEND_NORMAL) {
- return FALSE;
- }
- _Color2Argb(color, color, alpha_flag | (1 << 24), pIccTransform);
- int a;
- FX_COLORREF rgb;
- ArgbDecode(color, a, rgb);
- if (a == 0) {
- return TRUE;
- }
- HPEN hPen = CreatePen(PS_SOLID, 1, rgb);
- hPen = (HPEN)SelectObject(m_hDC, hPen);
- MoveToEx(m_hDC, FXSYS_round(x1), FXSYS_round(y1), NULL);
- LineTo(m_hDC, FXSYS_round(x2), FXSYS_round(y2));
- hPen = (HPEN)SelectObject(m_hDC, hPen);
- DeleteObject(hPen);
+FX_BOOL CGdiDeviceDriver::DrawCosmeticLine(FX_FLOAT x1,
+ FX_FLOAT y1,
+ FX_FLOAT x2,
+ FX_FLOAT y2,
+ FX_DWORD color,
+ int alpha_flag,
+ void* pIccTransform,
+ int blend_type) {
+ if (blend_type != FXDIB_BLEND_NORMAL) {
+ return FALSE;
+ }
+ _Color2Argb(color, color, alpha_flag | (1 << 24), pIccTransform);
+ int a;
+ FX_COLORREF rgb;
+ ArgbDecode(color, a, rgb);
+ if (a == 0) {
return TRUE;
+ }
+ HPEN hPen = CreatePen(PS_SOLID, 1, rgb);
+ hPen = (HPEN)SelectObject(m_hDC, hPen);
+ MoveToEx(m_hDC, FXSYS_round(x1), FXSYS_round(y1), NULL);
+ LineTo(m_hDC, FXSYS_round(x2), FXSYS_round(y2));
+ hPen = (HPEN)SelectObject(m_hDC, hPen);
+ DeleteObject(hPen);
+ return TRUE;
}
-FX_BOOL CGdiDeviceDriver::DeleteDeviceRgn(void* pRgn)
-{
- DeleteObject((HGDIOBJ)pRgn);
- return TRUE;
+FX_BOOL CGdiDeviceDriver::DeleteDeviceRgn(void* pRgn) {
+ DeleteObject((HGDIOBJ)pRgn);
+ return TRUE;
}
-CGdiDisplayDriver::CGdiDisplayDriver(HDC hDC) : CGdiDeviceDriver(hDC, FXDC_DISPLAY)
-{
- CWin32Platform* pPlatform = (CWin32Platform*)CFX_GEModule::Get()->GetPlatformData();
- if (pPlatform->m_GdiplusExt.IsAvailable()) {
- m_RenderCaps |= FXRC_ALPHA_PATH | FXRC_ALPHA_IMAGE;
- }
+CGdiDisplayDriver::CGdiDisplayDriver(HDC hDC)
+ : CGdiDeviceDriver(hDC, FXDC_DISPLAY) {
+ CWin32Platform* pPlatform =
+ (CWin32Platform*)CFX_GEModule::Get()->GetPlatformData();
+ if (pPlatform->m_GdiplusExt.IsAvailable()) {
+ m_RenderCaps |= FXRC_ALPHA_PATH | FXRC_ALPHA_IMAGE;
+ }
}
-FX_BOOL CGdiDisplayDriver::GetDIBits(CFX_DIBitmap* pBitmap, int left, int top, void* pIccTransform, FX_BOOL bDEdge)
-{
- FX_BOOL ret = FALSE;
- int width = pBitmap->GetWidth();
- int height = pBitmap->GetHeight();
- HBITMAP hbmp = CreateCompatibleBitmap(m_hDC, width, height);
- HDC hDCMemory = CreateCompatibleDC(m_hDC);
- HBITMAP holdbmp = (HBITMAP)SelectObject(hDCMemory, hbmp);
- BitBlt(hDCMemory, 0, 0, width, height, m_hDC, left, top, SRCCOPY);
- SelectObject(hDCMemory, holdbmp);
- BITMAPINFO bmi;
- FXSYS_memset(&bmi, 0, sizeof bmi);
- bmi.bmiHeader.biSize = sizeof bmi.bmiHeader;
- bmi.bmiHeader.biBitCount = pBitmap->GetBPP();
- bmi.bmiHeader.biHeight = -height;
- bmi.bmiHeader.biPlanes = 1;
- bmi.bmiHeader.biWidth = width;
- if (!CFX_GEModule::Get()->GetCodecModule() || !CFX_GEModule::Get()->GetCodecModule()->GetIccModule()) {
- pIccTransform = NULL;
- }
- if (pBitmap->GetBPP() > 8 && !pBitmap->IsCmykImage() && pIccTransform == NULL) {
- ret = ::GetDIBits(hDCMemory, hbmp, 0, height, pBitmap->GetBuffer(), &bmi, DIB_RGB_COLORS) == height;
+FX_BOOL CGdiDisplayDriver::GetDIBits(CFX_DIBitmap* pBitmap,
+ int left,
+ int top,
+ void* pIccTransform,
+ FX_BOOL bDEdge) {
+ FX_BOOL ret = FALSE;
+ int width = pBitmap->GetWidth();
+ int height = pBitmap->GetHeight();
+ HBITMAP hbmp = CreateCompatibleBitmap(m_hDC, width, height);
+ HDC hDCMemory = CreateCompatibleDC(m_hDC);
+ HBITMAP holdbmp = (HBITMAP)SelectObject(hDCMemory, hbmp);
+ BitBlt(hDCMemory, 0, 0, width, height, m_hDC, left, top, SRCCOPY);
+ SelectObject(hDCMemory, holdbmp);
+ BITMAPINFO bmi;
+ FXSYS_memset(&bmi, 0, sizeof bmi);
+ bmi.bmiHeader.biSize = sizeof bmi.bmiHeader;
+ bmi.bmiHeader.biBitCount = pBitmap->GetBPP();
+ bmi.bmiHeader.biHeight = -height;
+ bmi.bmiHeader.biPlanes = 1;
+ bmi.bmiHeader.biWidth = width;
+ if (!CFX_GEModule::Get()->GetCodecModule() ||
+ !CFX_GEModule::Get()->GetCodecModule()->GetIccModule()) {
+ pIccTransform = NULL;
+ }
+ if (pBitmap->GetBPP() > 8 && !pBitmap->IsCmykImage() &&
+ pIccTransform == NULL) {
+ ret = ::GetDIBits(hDCMemory, hbmp, 0, height, pBitmap->GetBuffer(), &bmi,
+ DIB_RGB_COLORS) == height;
+ } else {
+ CFX_DIBitmap bitmap;
+ if (bitmap.Create(width, height, FXDIB_Rgb)) {
+ bmi.bmiHeader.biBitCount = 24;
+ ::GetDIBits(hDCMemory, hbmp, 0, height, bitmap.GetBuffer(), &bmi,
+ DIB_RGB_COLORS);
+ ret = pBitmap->TransferBitmap(0, 0, width, height, &bitmap, 0, 0,
+ pIccTransform);
} else {
- CFX_DIBitmap bitmap;
- if (bitmap.Create(width, height, FXDIB_Rgb)) {
- bmi.bmiHeader.biBitCount = 24;
- ::GetDIBits(hDCMemory, hbmp, 0, height, bitmap.GetBuffer(), &bmi, DIB_RGB_COLORS);
- ret = pBitmap->TransferBitmap(0, 0, width, height, &bitmap, 0, 0, pIccTransform);
- } else {
- ret = FALSE;
- }
- }
- if (pBitmap->HasAlpha() && ret) {
- pBitmap->LoadChannel(FXDIB_Alpha, 0xff);
- }
- DeleteObject(hbmp);
- DeleteObject(hDCMemory);
- return ret;
+ ret = FALSE;
+ }
+ }
+ if (pBitmap->HasAlpha() && ret) {
+ pBitmap->LoadChannel(FXDIB_Alpha, 0xff);
+ }
+ DeleteObject(hbmp);
+ DeleteObject(hDCMemory);
+ return ret;
}
-FX_BOOL CGdiDisplayDriver::SetDIBits(const CFX_DIBSource* pSource, FX_DWORD color, const FX_RECT* pSrcRect, int left, int top, int blend_type,
- int alpha_flag, void* pIccTransform)
-{
- ASSERT(blend_type == FXDIB_BLEND_NORMAL);
- if (pSource->IsAlphaMask()) {
- int width = pSource->GetWidth(), height = pSource->GetHeight();
- int alpha = FXGETFLAG_COLORTYPE(alpha_flag) ? FXGETFLAG_ALPHA_FILL(alpha_flag) : FXARGB_A(color);
- FX_BOOL bGDI = pSource->GetBPP() == 1 && alpha == 255;
- if (!bGDI) {
- CFX_DIBitmap background;
- if (!background.Create(width, height, FXDIB_Rgb32) ||
- !GetDIBits(&background, left, top, NULL) ||
- !background.CompositeMask(0, 0, width, height, pSource, color,
- 0, 0, FXDIB_BLEND_NORMAL, NULL, FALSE,
- alpha_flag, pIccTransform)) {
- return FALSE;
- }
- FX_RECT src_rect(0, 0, width, height);
- return SetDIBits(&background, 0, &src_rect, left, top, FXDIB_BLEND_NORMAL, 0, NULL);
- }
- FX_RECT clip_rect(left, top, left + pSrcRect->Width(), top + pSrcRect->Height());
- return StretchDIBits(pSource, color, left - pSrcRect->left, top - pSrcRect->top, width, height,
- &clip_rect, 0, alpha_flag, pIccTransform, FXDIB_BLEND_NORMAL);
- }
- int width = pSrcRect->Width(), height = pSrcRect->Height();
- if (pSource->HasAlpha()) {
- CFX_DIBitmap bitmap;
- if (!bitmap.Create(width, height, FXDIB_Rgb) ||
- !GetDIBits(&bitmap, left, top, NULL) ||
- !bitmap.CompositeBitmap(0, 0, width, height, pSource, pSrcRect->left, pSrcRect->top, FXDIB_BLEND_NORMAL, NULL, FALSE, pIccTransform)) {
- return FALSE;
- }
- FX_RECT src_rect(0, 0, width, height);
- return SetDIBits(&bitmap, 0, &src_rect, left, top, FXDIB_BLEND_NORMAL, 0, NULL);
- }
- CFX_DIBExtractor temp(pSource);
- CFX_DIBitmap* pBitmap = temp;
- if (pBitmap) {
- return GDI_SetDIBits(pBitmap, pSrcRect, left, top, pIccTransform);
- }
- return FALSE;
+FX_BOOL CGdiDisplayDriver::SetDIBits(const CFX_DIBSource* pSource,
+ FX_DWORD color,
+ const FX_RECT* pSrcRect,
+ int left,
+ int top,
+ int blend_type,
+ int alpha_flag,
+ void* pIccTransform) {
+ ASSERT(blend_type == FXDIB_BLEND_NORMAL);
+ if (pSource->IsAlphaMask()) {
+ int width = pSource->GetWidth(), height = pSource->GetHeight();
+ int alpha = FXGETFLAG_COLORTYPE(alpha_flag)
+ ? FXGETFLAG_ALPHA_FILL(alpha_flag)
+ : FXARGB_A(color);
+ FX_BOOL bGDI = pSource->GetBPP() == 1 && alpha == 255;
+ if (!bGDI) {
+ CFX_DIBitmap background;
+ if (!background.Create(width, height, FXDIB_Rgb32) ||
+ !GetDIBits(&background, left, top, NULL) ||
+ !background.CompositeMask(0, 0, width, height, pSource, color, 0, 0,
+ FXDIB_BLEND_NORMAL, NULL, FALSE, alpha_flag,
+ pIccTransform)) {
+ return FALSE;
+ }
+ FX_RECT src_rect(0, 0, width, height);
+ return SetDIBits(&background, 0, &src_rect, left, top, FXDIB_BLEND_NORMAL,
+ 0, NULL);
+ }
+ FX_RECT clip_rect(left, top, left + pSrcRect->Width(),
+ top + pSrcRect->Height());
+ return StretchDIBits(pSource, color, left - pSrcRect->left,
+ top - pSrcRect->top, width, height, &clip_rect, 0,
+ alpha_flag, pIccTransform, FXDIB_BLEND_NORMAL);
+ }
+ int width = pSrcRect->Width(), height = pSrcRect->Height();
+ if (pSource->HasAlpha()) {
+ CFX_DIBitmap bitmap;
+ if (!bitmap.Create(width, height, FXDIB_Rgb) ||
+ !GetDIBits(&bitmap, left, top, NULL) ||
+ !bitmap.CompositeBitmap(0, 0, width, height, pSource, pSrcRect->left,
+ pSrcRect->top, FXDIB_BLEND_NORMAL, NULL, FALSE,
+ pIccTransform)) {
+ return FALSE;
+ }
+ FX_RECT src_rect(0, 0, width, height);
+ return SetDIBits(&bitmap, 0, &src_rect, left, top, FXDIB_BLEND_NORMAL, 0,
+ NULL);
+ }
+ CFX_DIBExtractor temp(pSource);
+ CFX_DIBitmap* pBitmap = temp;
+ if (pBitmap) {
+ return GDI_SetDIBits(pBitmap, pSrcRect, left, top, pIccTransform);
+ }
+ return FALSE;
}
-FX_BOOL CGdiDisplayDriver::UseFoxitStretchEngine(const CFX_DIBSource* pSource, FX_DWORD color, int dest_left, int dest_top,
- int dest_width, int dest_height, const FX_RECT* pClipRect, int render_flags,
- int alpha_flag, void* pIccTransform, int blend_type)
-{
- FX_RECT bitmap_clip = *pClipRect;
- if (dest_width < 0) {
- dest_left += dest_width;
- }
- if (dest_height < 0) {
- dest_top += dest_height;
- }
- bitmap_clip.Offset(-dest_left, -dest_top);
- CFX_DIBitmap* pStretched = pSource->StretchTo(dest_width, dest_height, render_flags, &bitmap_clip);
+FX_BOOL CGdiDisplayDriver::UseFoxitStretchEngine(const CFX_DIBSource* pSource,
+ FX_DWORD color,
+ int dest_left,
+ int dest_top,
+ int dest_width,
+ int dest_height,
+ const FX_RECT* pClipRect,
+ int render_flags,
+ int alpha_flag,
+ void* pIccTransform,
+ int blend_type) {
+ FX_RECT bitmap_clip = *pClipRect;
+ if (dest_width < 0) {
+ dest_left += dest_width;
+ }
+ if (dest_height < 0) {
+ dest_top += dest_height;
+ }
+ bitmap_clip.Offset(-dest_left, -dest_top);
+ CFX_DIBitmap* pStretched =
+ pSource->StretchTo(dest_width, dest_height, render_flags, &bitmap_clip);
+ if (pStretched == NULL) {
+ return TRUE;
+ }
+ FX_RECT src_rect(0, 0, pStretched->GetWidth(), pStretched->GetHeight());
+ FX_BOOL ret =
+ SetDIBits(pStretched, color, &src_rect, pClipRect->left, pClipRect->top,
+ FXDIB_BLEND_NORMAL, alpha_flag, pIccTransform);
+ delete pStretched;
+ return ret;
+}
+FX_BOOL CGdiDisplayDriver::StretchDIBits(const CFX_DIBSource* pSource,
+ FX_DWORD color,
+ int dest_left,
+ int dest_top,
+ int dest_width,
+ int dest_height,
+ const FX_RECT* pClipRect,
+ FX_DWORD flags,
+ int alpha_flag,
+ void* pIccTransform,
+ int blend_type) {
+ ASSERT(pSource != NULL && pClipRect != NULL);
+ if (flags || dest_width > 10000 || dest_width < -10000 ||
+ dest_height > 10000 || dest_height < -10000) {
+ return UseFoxitStretchEngine(pSource, color, dest_left, dest_top,
+ dest_width, dest_height, pClipRect, flags,
+ alpha_flag, pIccTransform, blend_type);
+ }
+ if (pSource->IsAlphaMask()) {
+ FX_RECT image_rect;
+ image_rect.left = dest_width > 0 ? dest_left : dest_left + dest_width;
+ image_rect.right = dest_width > 0 ? dest_left + dest_width : dest_left;
+ image_rect.top = dest_height > 0 ? dest_top : dest_top + dest_height;
+ image_rect.bottom = dest_height > 0 ? dest_top + dest_height : dest_top;
+ FX_RECT clip_rect = image_rect;
+ clip_rect.Intersect(*pClipRect);
+ clip_rect.Offset(-image_rect.left, -image_rect.top);
+ int clip_width = clip_rect.Width(), clip_height = clip_rect.Height();
+ CFX_DIBitmap* pStretched =
+ pSource->StretchTo(dest_width, dest_height, flags, &clip_rect);
if (pStretched == NULL) {
- return TRUE;
- }
- FX_RECT src_rect(0, 0, pStretched->GetWidth(), pStretched->GetHeight());
- FX_BOOL ret = SetDIBits(pStretched, color, &src_rect, pClipRect->left, pClipRect->top, FXDIB_BLEND_NORMAL, alpha_flag, pIccTransform);
+ return TRUE;
+ }
+ CFX_DIBitmap background;
+ if (!background.Create(clip_width, clip_height, FXDIB_Rgb32) ||
+ !GetDIBits(&background, image_rect.left + clip_rect.left,
+ image_rect.top + clip_rect.top, NULL) ||
+ !background.CompositeMask(0, 0, clip_width, clip_height, pStretched,
+ color, 0, 0, FXDIB_BLEND_NORMAL, NULL, FALSE,
+ alpha_flag, pIccTransform)) {
+ delete pStretched;
+ return FALSE;
+ }
+ FX_RECT src_rect(0, 0, clip_width, clip_height);
+ FX_BOOL ret =
+ SetDIBits(&background, 0, &src_rect, image_rect.left + clip_rect.left,
+ image_rect.top + clip_rect.top, FXDIB_BLEND_NORMAL, 0, NULL);
delete pStretched;
return ret;
+ }
+ if (pSource->HasAlpha()) {
+ CWin32Platform* pPlatform =
+ (CWin32Platform*)CFX_GEModule::Get()->GetPlatformData();
+ if (pPlatform->m_GdiplusExt.IsAvailable() && pIccTransform == NULL &&
+ !pSource->IsCmykImage()) {
+ CFX_DIBExtractor temp(pSource);
+ CFX_DIBitmap* pBitmap = temp;
+ if (pBitmap == NULL) {
+ return FALSE;
+ }
+ return pPlatform->m_GdiplusExt.StretchDIBits(
+ m_hDC, pBitmap, dest_left, dest_top, dest_width, dest_height,
+ pClipRect, flags);
+ }
+ return UseFoxitStretchEngine(pSource, color, dest_left, dest_top,
+ dest_width, dest_height, pClipRect, flags,
+ alpha_flag, pIccTransform, blend_type);
+ }
+ CFX_DIBExtractor temp(pSource);
+ CFX_DIBitmap* pBitmap = temp;
+ if (pBitmap) {
+ return GDI_StretchDIBits(pBitmap, dest_left, dest_top, dest_width,
+ dest_height, flags, pIccTransform);
+ }
+ return FALSE;
}
-FX_BOOL CGdiDisplayDriver::StretchDIBits(const CFX_DIBSource* pSource, FX_DWORD color, int dest_left, int dest_top,
- int dest_width, int dest_height, const FX_RECT* pClipRect, FX_DWORD flags,
- int alpha_flag, void* pIccTransform, int blend_type)
-{
- ASSERT(pSource != NULL && pClipRect != NULL);
- if (flags || dest_width > 10000 || dest_width < -10000 || dest_height > 10000 || dest_height < -10000) {
- return UseFoxitStretchEngine(pSource, color, dest_left, dest_top, dest_width, dest_height,
- pClipRect, flags, alpha_flag, pIccTransform, blend_type);
- }
- if (pSource->IsAlphaMask()) {
- FX_RECT image_rect;
- image_rect.left = dest_width > 0 ? dest_left : dest_left + dest_width;
- image_rect.right = dest_width > 0 ? dest_left + dest_width : dest_left;
- image_rect.top = dest_height > 0 ? dest_top : dest_top + dest_height;
- image_rect.bottom = dest_height > 0 ? dest_top + dest_height : dest_top;
- FX_RECT clip_rect = image_rect;
- clip_rect.Intersect(*pClipRect);
- clip_rect.Offset(-image_rect.left, -image_rect.top);
- int clip_width = clip_rect.Width(), clip_height = clip_rect.Height();
- CFX_DIBitmap* pStretched = pSource->StretchTo(dest_width, dest_height, flags, &clip_rect);
- if (pStretched == NULL) {
- return TRUE;
- }
- CFX_DIBitmap background;
- if (!background.Create(clip_width, clip_height, FXDIB_Rgb32) ||
- !GetDIBits(&background, image_rect.left + clip_rect.left, image_rect.top + clip_rect.top, NULL) ||
- !background.CompositeMask(0, 0, clip_width, clip_height, pStretched, color, 0, 0, FXDIB_BLEND_NORMAL, NULL, FALSE, alpha_flag, pIccTransform)) {
- delete pStretched;
- return FALSE;
- }
- FX_RECT src_rect(0, 0, clip_width, clip_height);
- FX_BOOL ret = SetDIBits(&background, 0, &src_rect, image_rect.left + clip_rect.left, image_rect.top + clip_rect.top, FXDIB_BLEND_NORMAL, 0, NULL);
- delete pStretched;
- return ret;
- }
- if (pSource->HasAlpha()) {
- CWin32Platform* pPlatform = (CWin32Platform*)CFX_GEModule::Get()->GetPlatformData();
- if (pPlatform->m_GdiplusExt.IsAvailable() && pIccTransform == NULL && !pSource->IsCmykImage()) {
- CFX_DIBExtractor temp(pSource);
- CFX_DIBitmap* pBitmap = temp;
- if (pBitmap == NULL) {
- return FALSE;
- }
- return pPlatform->m_GdiplusExt.StretchDIBits(m_hDC, pBitmap, dest_left, dest_top, dest_width, dest_height, pClipRect, flags);
- }
- return UseFoxitStretchEngine(pSource, color, dest_left, dest_top, dest_width, dest_height,
- pClipRect, flags, alpha_flag, pIccTransform, blend_type);
- }
- CFX_DIBExtractor temp(pSource);
- CFX_DIBitmap* pBitmap = temp;
- if (pBitmap) {
- return GDI_StretchDIBits(pBitmap, dest_left, dest_top, dest_width, dest_height, flags, pIccTransform);
- }
- return FALSE;
-}
-#define GET_PS_FEATURESETTING 4121
-#define FEATURESETTING_PSLEVEL 2
-int GetPSLevel(HDC hDC)
-{
- int device_type = ::GetDeviceCaps(hDC, TECHNOLOGY);
- if (device_type != DT_RASPRINTER) {
- return 0;
- }
- FX_DWORD esc = GET_PS_FEATURESETTING;
+#define GET_PS_FEATURESETTING 4121
+#define FEATURESETTING_PSLEVEL 2
+int GetPSLevel(HDC hDC) {
+ int device_type = ::GetDeviceCaps(hDC, TECHNOLOGY);
+ if (device_type != DT_RASPRINTER) {
+ return 0;
+ }
+ FX_DWORD esc = GET_PS_FEATURESETTING;
+ if (ExtEscape(hDC, QUERYESCSUPPORT, sizeof esc, (char*)&esc, 0, NULL)) {
+ int param = FEATURESETTING_PSLEVEL;
+ if (ExtEscape(hDC, GET_PS_FEATURESETTING, sizeof(int), (char*)&param,
+ sizeof(int), (char*)&param) > 0) {
+ return param;
+ }
+ }
+ esc = POSTSCRIPT_IDENTIFY;
+ if (ExtEscape(hDC, QUERYESCSUPPORT, sizeof esc, (char*)&esc, 0, NULL) == 0) {
+ esc = POSTSCRIPT_DATA;
if (ExtEscape(hDC, QUERYESCSUPPORT, sizeof esc, (char*)&esc, 0, NULL)) {
- int param = FEATURESETTING_PSLEVEL;
- if (ExtEscape(hDC, GET_PS_FEATURESETTING, sizeof(int), (char*)&param, sizeof(int), (char*)&param) > 0) {
- return param;
- }
- }
- esc = POSTSCRIPT_IDENTIFY;
- if (ExtEscape(hDC, QUERYESCSUPPORT, sizeof esc, (char*)&esc, 0, NULL) == 0) {
- esc = POSTSCRIPT_DATA;
- if (ExtEscape(hDC, QUERYESCSUPPORT, sizeof esc, (char*)&esc, 0, NULL)) {
- return 2;
- }
- return 0;
- }
- esc = PSIDENT_GDICENTRIC;
- if (ExtEscape(hDC, POSTSCRIPT_IDENTIFY, sizeof(FX_DWORD), (char*)&esc, 0, NULL) <= 0) {
- return 2;
- }
- esc = GET_PS_FEATURESETTING;
- if (ExtEscape(hDC, QUERYESCSUPPORT, sizeof esc, (char*)&esc, 0, NULL)) {
- int param = FEATURESETTING_PSLEVEL;
- if (ExtEscape(hDC, GET_PS_FEATURESETTING, sizeof(int), (char*)&param, sizeof(int), (char*)&param) > 0) {
- return param;
- }
+ return 2;
}
+ return 0;
+ }
+ esc = PSIDENT_GDICENTRIC;
+ if (ExtEscape(hDC, POSTSCRIPT_IDENTIFY, sizeof(FX_DWORD), (char*)&esc, 0,
+ NULL) <= 0) {
return 2;
+ }
+ esc = GET_PS_FEATURESETTING;
+ if (ExtEscape(hDC, QUERYESCSUPPORT, sizeof esc, (char*)&esc, 0, NULL)) {
+ int param = FEATURESETTING_PSLEVEL;
+ if (ExtEscape(hDC, GET_PS_FEATURESETTING, sizeof(int), (char*)&param,
+ sizeof(int), (char*)&param) > 0) {
+ return param;
+ }
+ }
+ return 2;
}
int CFX_WindowsDevice::m_psLevel = 2;
-CFX_WindowsDevice::CFX_WindowsDevice(HDC hDC, FX_BOOL bCmykOutput, FX_BOOL bForcePSOutput, int psLevel)
-{
- m_bForcePSOutput = bForcePSOutput;
- m_psLevel = psLevel;
- if (bForcePSOutput) {
- IFX_RenderDeviceDriver* pDriver = new CPSPrinterDriver;
- ((CPSPrinterDriver*)pDriver)->Init(hDC, psLevel, bCmykOutput);
- SetDeviceDriver(pDriver);
- return;
- }
- SetDeviceDriver(CreateDriver(hDC, bCmykOutput));
+CFX_WindowsDevice::CFX_WindowsDevice(HDC hDC,
+ FX_BOOL bCmykOutput,
+ FX_BOOL bForcePSOutput,
+ int psLevel) {
+ m_bForcePSOutput = bForcePSOutput;
+ m_psLevel = psLevel;
+ if (bForcePSOutput) {
+ IFX_RenderDeviceDriver* pDriver = new CPSPrinterDriver;
+ ((CPSPrinterDriver*)pDriver)->Init(hDC, psLevel, bCmykOutput);
+ SetDeviceDriver(pDriver);
+ return;
+ }
+ SetDeviceDriver(CreateDriver(hDC, bCmykOutput));
}
-HDC CFX_WindowsDevice::GetDC() const
-{
- IFX_RenderDeviceDriver *pRDD = GetDeviceDriver();
- if (!pRDD) {
- return NULL;
- }
- return (HDC)pRDD->GetPlatformSurface();
+HDC CFX_WindowsDevice::GetDC() const {
+ IFX_RenderDeviceDriver* pRDD = GetDeviceDriver();
+ if (!pRDD) {
+ return NULL;
+ }
+ return (HDC)pRDD->GetPlatformSurface();
}
-IFX_RenderDeviceDriver* CFX_WindowsDevice::CreateDriver(HDC hDC, FX_BOOL bCmykOutput)
-{
- int device_type = ::GetDeviceCaps(hDC, TECHNOLOGY);
- int obj_type = ::GetObjectType(hDC);
- int device_class;
- if (device_type == DT_RASPRINTER || device_type == DT_PLOTTER || obj_type == OBJ_ENHMETADC) {
- device_class = FXDC_PRINTER;
- } else {
- device_class = FXDC_DISPLAY;
- }
- if (device_class == FXDC_PRINTER) {
- return new CGdiPrinterDriver(hDC);
- }
- return new CGdiDisplayDriver(hDC);
+IFX_RenderDeviceDriver* CFX_WindowsDevice::CreateDriver(HDC hDC,
+ FX_BOOL bCmykOutput) {
+ int device_type = ::GetDeviceCaps(hDC, TECHNOLOGY);
+ int obj_type = ::GetObjectType(hDC);
+ int device_class;
+ if (device_type == DT_RASPRINTER || device_type == DT_PLOTTER ||
+ obj_type == OBJ_ENHMETADC) {
+ device_class = FXDC_PRINTER;
+ } else {
+ device_class = FXDC_DISPLAY;
+ }
+ if (device_class == FXDC_PRINTER) {
+ return new CGdiPrinterDriver(hDC);
+ }
+ return new CGdiDisplayDriver(hDC);
}
-CFX_WinBitmapDevice::CFX_WinBitmapDevice(int width, int height, FXDIB_Format format)
-{
- BITMAPINFOHEADER bmih;
- FXSYS_memset(&bmih, 0, sizeof (BITMAPINFOHEADER));
- bmih.biSize = sizeof(BITMAPINFOHEADER);
- bmih.biBitCount = format & 0xff;
- bmih.biHeight = -height;
- bmih.biPlanes = 1;
- bmih.biWidth = width;
- uint8_t* pBuffer;
- m_hBitmap = CreateDIBSection(NULL, (BITMAPINFO*)&bmih, DIB_RGB_COLORS, (void**)&pBuffer, NULL, 0);
- if (m_hBitmap == NULL) {
- return;
- }
- CFX_DIBitmap* pBitmap = new CFX_DIBitmap;
- pBitmap->Create(width, height, format, pBuffer);
- SetBitmap(pBitmap);
- m_hDC = ::CreateCompatibleDC(NULL);
- m_hOldBitmap = (HBITMAP)SelectObject(m_hDC, m_hBitmap);
- IFX_RenderDeviceDriver* pDriver = new CGdiDisplayDriver(m_hDC);
- SetDeviceDriver(pDriver);
+CFX_WinBitmapDevice::CFX_WinBitmapDevice(int width,
+ int height,
+ FXDIB_Format format) {
+ BITMAPINFOHEADER bmih;
+ FXSYS_memset(&bmih, 0, sizeof(BITMAPINFOHEADER));
+ bmih.biSize = sizeof(BITMAPINFOHEADER);
+ bmih.biBitCount = format & 0xff;
+ bmih.biHeight = -height;
+ bmih.biPlanes = 1;
+ bmih.biWidth = width;
+ uint8_t* pBuffer;
+ m_hBitmap = CreateDIBSection(NULL, (BITMAPINFO*)&bmih, DIB_RGB_COLORS,
+ (void**)&pBuffer, NULL, 0);
+ if (m_hBitmap == NULL) {
+ return;
+ }
+ CFX_DIBitmap* pBitmap = new CFX_DIBitmap;
+ pBitmap->Create(width, height, format, pBuffer);
+ SetBitmap(pBitmap);
+ m_hDC = ::CreateCompatibleDC(NULL);
+ m_hOldBitmap = (HBITMAP)SelectObject(m_hDC, m_hBitmap);
+ IFX_RenderDeviceDriver* pDriver = new CGdiDisplayDriver(m_hDC);
+ SetDeviceDriver(pDriver);
}
-CFX_WinBitmapDevice::~CFX_WinBitmapDevice()
-{
- if (m_hDC) {
- SelectObject(m_hDC, m_hOldBitmap);
- DeleteDC(m_hDC);
- }
- if (m_hBitmap) {
- DeleteObject(m_hBitmap);
- }
- delete GetBitmap();
+CFX_WinBitmapDevice::~CFX_WinBitmapDevice() {
+ if (m_hDC) {
+ SelectObject(m_hDC, m_hOldBitmap);
+ DeleteDC(m_hDC);
+ }
+ if (m_hBitmap) {
+ DeleteObject(m_hBitmap);
+ }
+ delete GetBitmap();
}
#endif // _FX_OS_ == _FX_WIN32_DESKTOP_ || _FX_OS_ == _FX_WIN64_
diff --git a/core/src/fxge/win32/fx_win32_dib.cpp b/core/src/fxge/win32/fx_win32_dib.cpp
index 3dcfce4802..b1ffe8080d 100644
--- a/core/src/fxge/win32/fx_win32_dib.cpp
+++ b/core/src/fxge/win32/fx_win32_dib.cpp
@@ -5,273 +5,282 @@
// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
#include "../../../include/fxge/fx_ge.h"
-#if _FX_OS_ == _FX_WIN32_DESKTOP_ || _FX_OS_ == _FX_WIN64_DESKTOP_
+#if _FX_OS_ == _FX_WIN32_DESKTOP_ || _FX_OS_ == _FX_WIN64_DESKTOP_
#include <windows.h>
#include "../../../include/fxge/fx_ge_win32.h"
#include "win32_int.h"
-CFX_ByteString CFX_WindowsDIB::GetBitmapInfo(const CFX_DIBitmap* pBitmap)
-{
- CFX_ByteString result;
- int len = sizeof (BITMAPINFOHEADER);
- if (pBitmap->GetBPP() == 1 || pBitmap->GetBPP() == 8) {
- len += sizeof (DWORD) * (int)(1 << pBitmap->GetBPP());
- }
- BITMAPINFOHEADER* pbmih = (BITMAPINFOHEADER*)result.GetBuffer(len);
- FXSYS_memset(pbmih, 0, sizeof (BITMAPINFOHEADER));
- pbmih->biSize = sizeof(BITMAPINFOHEADER);
- pbmih->biBitCount = pBitmap->GetBPP();
- pbmih->biCompression = BI_RGB;
- pbmih->biHeight = -(int)pBitmap->GetHeight();
- pbmih->biPlanes = 1;
- pbmih->biWidth = pBitmap->GetWidth();
- if (pBitmap->GetBPP() == 8) {
- FX_DWORD* pPalette = (FX_DWORD*)(pbmih + 1);
- if (pBitmap->GetPalette() == NULL) {
- for (int i = 0; i < 256; i ++) {
- pPalette[i] = i * 0x010101;
- }
- } else {
- for (int i = 0; i < 256; i ++) {
- pPalette[i] = pBitmap->GetPalette()[i];
- }
- }
+CFX_ByteString CFX_WindowsDIB::GetBitmapInfo(const CFX_DIBitmap* pBitmap) {
+ CFX_ByteString result;
+ int len = sizeof(BITMAPINFOHEADER);
+ if (pBitmap->GetBPP() == 1 || pBitmap->GetBPP() == 8) {
+ len += sizeof(DWORD) * (int)(1 << pBitmap->GetBPP());
+ }
+ BITMAPINFOHEADER* pbmih = (BITMAPINFOHEADER*)result.GetBuffer(len);
+ FXSYS_memset(pbmih, 0, sizeof(BITMAPINFOHEADER));
+ pbmih->biSize = sizeof(BITMAPINFOHEADER);
+ pbmih->biBitCount = pBitmap->GetBPP();
+ pbmih->biCompression = BI_RGB;
+ pbmih->biHeight = -(int)pBitmap->GetHeight();
+ pbmih->biPlanes = 1;
+ pbmih->biWidth = pBitmap->GetWidth();
+ if (pBitmap->GetBPP() == 8) {
+ FX_DWORD* pPalette = (FX_DWORD*)(pbmih + 1);
+ if (pBitmap->GetPalette() == NULL) {
+ for (int i = 0; i < 256; i++) {
+ pPalette[i] = i * 0x010101;
+ }
+ } else {
+ for (int i = 0; i < 256; i++) {
+ pPalette[i] = pBitmap->GetPalette()[i];
+ }
}
- if (pBitmap->GetBPP() == 1) {
- FX_DWORD* pPalette = (FX_DWORD*)(pbmih + 1);
- if (pBitmap->GetPalette() == NULL) {
- pPalette[0] = 0;
- pPalette[1] = 0xffffff;
- } else {
- pPalette[0] = pBitmap->GetPalette()[0];
- pPalette[1] = pBitmap->GetPalette()[1];
- }
+ }
+ if (pBitmap->GetBPP() == 1) {
+ FX_DWORD* pPalette = (FX_DWORD*)(pbmih + 1);
+ if (pBitmap->GetPalette() == NULL) {
+ pPalette[0] = 0;
+ pPalette[1] = 0xffffff;
+ } else {
+ pPalette[0] = pBitmap->GetPalette()[0];
+ pPalette[1] = pBitmap->GetPalette()[1];
}
- result.ReleaseBuffer(len);
- return result;
+ }
+ result.ReleaseBuffer(len);
+ return result;
}
-CFX_DIBitmap* _FX_WindowsDIB_LoadFromBuf(BITMAPINFO* pbmi, LPVOID pData, FX_BOOL bAlpha)
-{
- int width = pbmi->bmiHeader.biWidth;
- int height = pbmi->bmiHeader.biHeight;
- BOOL bBottomUp = TRUE;
- if (height < 0) {
- height = -height;
- bBottomUp = FALSE;
- }
- int pitch = (width * pbmi->bmiHeader.biBitCount + 31) / 32 * 4;
- CFX_DIBitmap* pBitmap = new CFX_DIBitmap;
- FXDIB_Format format = bAlpha ? (FXDIB_Format)(pbmi->bmiHeader.biBitCount + 0x200) : (FXDIB_Format)pbmi->bmiHeader.biBitCount;
- FX_BOOL ret = pBitmap->Create(width, height, format);
- if (!ret) {
- delete pBitmap;
- return NULL;
+CFX_DIBitmap* _FX_WindowsDIB_LoadFromBuf(BITMAPINFO* pbmi,
+ LPVOID pData,
+ FX_BOOL bAlpha) {
+ int width = pbmi->bmiHeader.biWidth;
+ int height = pbmi->bmiHeader.biHeight;
+ BOOL bBottomUp = TRUE;
+ if (height < 0) {
+ height = -height;
+ bBottomUp = FALSE;
+ }
+ int pitch = (width * pbmi->bmiHeader.biBitCount + 31) / 32 * 4;
+ CFX_DIBitmap* pBitmap = new CFX_DIBitmap;
+ FXDIB_Format format = bAlpha
+ ? (FXDIB_Format)(pbmi->bmiHeader.biBitCount + 0x200)
+ : (FXDIB_Format)pbmi->bmiHeader.biBitCount;
+ FX_BOOL ret = pBitmap->Create(width, height, format);
+ if (!ret) {
+ delete pBitmap;
+ return NULL;
+ }
+ FXSYS_memcpy(pBitmap->GetBuffer(), pData, pitch * height);
+ if (bBottomUp) {
+ uint8_t* temp_buf = FX_Alloc(uint8_t, pitch);
+ int top = 0, bottom = height - 1;
+ while (top < bottom) {
+ FXSYS_memcpy(temp_buf, pBitmap->GetBuffer() + top * pitch, pitch);
+ FXSYS_memcpy(pBitmap->GetBuffer() + top * pitch,
+ pBitmap->GetBuffer() + bottom * pitch, pitch);
+ FXSYS_memcpy(pBitmap->GetBuffer() + bottom * pitch, temp_buf, pitch);
+ top++;
+ bottom--;
}
- FXSYS_memcpy(pBitmap->GetBuffer(), pData, pitch * height);
- if (bBottomUp) {
- uint8_t* temp_buf = FX_Alloc(uint8_t, pitch);
- int top = 0, bottom = height - 1;
- while (top < bottom) {
- FXSYS_memcpy(temp_buf, pBitmap->GetBuffer() + top * pitch, pitch);
- FXSYS_memcpy(pBitmap->GetBuffer() + top * pitch, pBitmap->GetBuffer() + bottom * pitch, pitch);
- FXSYS_memcpy(pBitmap->GetBuffer() + bottom * pitch, temp_buf, pitch);
- top ++;
- bottom --;
- }
- FX_Free(temp_buf);
- temp_buf = NULL;
+ FX_Free(temp_buf);
+ temp_buf = NULL;
+ }
+ if (pbmi->bmiHeader.biBitCount == 1) {
+ for (int i = 0; i < 2; i++) {
+ pBitmap->SetPaletteEntry(i, ((FX_DWORD*)pbmi->bmiColors)[i] | 0xff000000);
}
- if (pbmi->bmiHeader.biBitCount == 1) {
- for (int i = 0; i < 2; i ++) {
- pBitmap->SetPaletteEntry(i, ((FX_DWORD*)pbmi->bmiColors)[i] | 0xff000000);
- }
- } else if (pbmi->bmiHeader.biBitCount == 8) {
- for (int i = 0; i < 256; i ++) {
- pBitmap->SetPaletteEntry(i, ((FX_DWORD*)pbmi->bmiColors)[i] | 0xff000000);
- }
+ } else if (pbmi->bmiHeader.biBitCount == 8) {
+ for (int i = 0; i < 256; i++) {
+ pBitmap->SetPaletteEntry(i, ((FX_DWORD*)pbmi->bmiColors)[i] | 0xff000000);
}
- return pBitmap;
+ }
+ return pBitmap;
}
-CFX_DIBitmap* CFX_WindowsDIB::LoadFromBuf(BITMAPINFO* pbmi, LPVOID pData)
-{
- return _FX_WindowsDIB_LoadFromBuf(pbmi, pData, FALSE);
+CFX_DIBitmap* CFX_WindowsDIB::LoadFromBuf(BITMAPINFO* pbmi, LPVOID pData) {
+ return _FX_WindowsDIB_LoadFromBuf(pbmi, pData, FALSE);
}
-HBITMAP CFX_WindowsDIB::GetDDBitmap(const CFX_DIBitmap* pBitmap, HDC hDC)
-{
- CFX_ByteString info = GetBitmapInfo(pBitmap);
- HBITMAP hBitmap = NULL;
- hBitmap = CreateDIBitmap(hDC, (BITMAPINFOHEADER*)info.c_str(), CBM_INIT,
- pBitmap->GetBuffer(), (BITMAPINFO*)info.c_str(), DIB_RGB_COLORS);
- return hBitmap;
+HBITMAP CFX_WindowsDIB::GetDDBitmap(const CFX_DIBitmap* pBitmap, HDC hDC) {
+ CFX_ByteString info = GetBitmapInfo(pBitmap);
+ HBITMAP hBitmap = NULL;
+ hBitmap = CreateDIBitmap(hDC, (BITMAPINFOHEADER*)info.c_str(), CBM_INIT,
+ pBitmap->GetBuffer(), (BITMAPINFO*)info.c_str(),
+ DIB_RGB_COLORS);
+ return hBitmap;
}
-void GetBitmapSize(HBITMAP hBitmap, int& w, int& h)
-{
- BITMAP bmp;
- GetObject(hBitmap, sizeof bmp, &bmp);
- w = bmp.bmWidth;
- h = bmp.bmHeight;
+void GetBitmapSize(HBITMAP hBitmap, int& w, int& h) {
+ BITMAP bmp;
+ GetObject(hBitmap, sizeof bmp, &bmp);
+ w = bmp.bmWidth;
+ h = bmp.bmHeight;
}
-CFX_DIBitmap* CFX_WindowsDIB::LoadFromFile(const FX_WCHAR* filename)
-{
- CWin32Platform* pPlatform = (CWin32Platform*)CFX_GEModule::Get()->GetPlatformData();
- if (pPlatform->m_GdiplusExt.IsAvailable()) {
- WINDIB_Open_Args_ args;
- args.flags = WINDIB_OPEN_PATHNAME;
- args.path_name = filename;
- return pPlatform->m_GdiplusExt.LoadDIBitmap(args);
- }
- HBITMAP hBitmap = (HBITMAP)LoadImageW(NULL, (wchar_t*)filename, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
- if (hBitmap == NULL) {
- return NULL;
- }
- HDC hDC = CreateCompatibleDC(NULL);
- int width, height;
- GetBitmapSize(hBitmap, width, height);
- CFX_DIBitmap* pDIBitmap = new CFX_DIBitmap;
- if (!pDIBitmap->Create(width, height, FXDIB_Rgb)) {
- delete pDIBitmap;
- DeleteDC(hDC);
- return NULL;
- }
- CFX_ByteString info = GetBitmapInfo(pDIBitmap);
- int ret = GetDIBits(hDC, hBitmap, 0, height, pDIBitmap->GetBuffer(), (BITMAPINFO*)info.c_str(), DIB_RGB_COLORS);
- if (!ret) {
- delete pDIBitmap;
- pDIBitmap = NULL;
- }
+CFX_DIBitmap* CFX_WindowsDIB::LoadFromFile(const FX_WCHAR* filename) {
+ CWin32Platform* pPlatform =
+ (CWin32Platform*)CFX_GEModule::Get()->GetPlatformData();
+ if (pPlatform->m_GdiplusExt.IsAvailable()) {
+ WINDIB_Open_Args_ args;
+ args.flags = WINDIB_OPEN_PATHNAME;
+ args.path_name = filename;
+ return pPlatform->m_GdiplusExt.LoadDIBitmap(args);
+ }
+ HBITMAP hBitmap = (HBITMAP)LoadImageW(NULL, (wchar_t*)filename, IMAGE_BITMAP,
+ 0, 0, LR_LOADFROMFILE);
+ if (hBitmap == NULL) {
+ return NULL;
+ }
+ HDC hDC = CreateCompatibleDC(NULL);
+ int width, height;
+ GetBitmapSize(hBitmap, width, height);
+ CFX_DIBitmap* pDIBitmap = new CFX_DIBitmap;
+ if (!pDIBitmap->Create(width, height, FXDIB_Rgb)) {
+ delete pDIBitmap;
DeleteDC(hDC);
- return pDIBitmap;
+ return NULL;
+ }
+ CFX_ByteString info = GetBitmapInfo(pDIBitmap);
+ int ret = GetDIBits(hDC, hBitmap, 0, height, pDIBitmap->GetBuffer(),
+ (BITMAPINFO*)info.c_str(), DIB_RGB_COLORS);
+ if (!ret) {
+ delete pDIBitmap;
+ pDIBitmap = NULL;
+ }
+ DeleteDC(hDC);
+ return pDIBitmap;
}
-CFX_DIBitmap* CFX_WindowsDIB::LoadDIBitmap(WINDIB_Open_Args_ args)
-{
- CWin32Platform* pPlatform = (CWin32Platform*)CFX_GEModule::Get()->GetPlatformData();
- if (pPlatform->m_GdiplusExt.IsAvailable()) {
- return pPlatform->m_GdiplusExt.LoadDIBitmap(args);
- }
- if (args.flags == WINDIB_OPEN_MEMORY) {
- return NULL;
- }
- HBITMAP hBitmap = (HBITMAP)LoadImageW(NULL, (wchar_t*)args.path_name, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
- if (hBitmap == NULL) {
- return NULL;
- }
- HDC hDC = CreateCompatibleDC(NULL);
- int width, height;
- GetBitmapSize(hBitmap, width, height);
- CFX_DIBitmap* pDIBitmap = new CFX_DIBitmap;
- if (!pDIBitmap->Create(width, height, FXDIB_Rgb)) {
- delete pDIBitmap;
- DeleteDC(hDC);
- return NULL;
- }
- CFX_ByteString info = GetBitmapInfo(pDIBitmap);
- int ret = GetDIBits(hDC, hBitmap, 0, height, pDIBitmap->GetBuffer(), (BITMAPINFO*)info.c_str(), DIB_RGB_COLORS);
- if (!ret) {
- delete pDIBitmap;
- pDIBitmap = NULL;
- }
+CFX_DIBitmap* CFX_WindowsDIB::LoadDIBitmap(WINDIB_Open_Args_ args) {
+ CWin32Platform* pPlatform =
+ (CWin32Platform*)CFX_GEModule::Get()->GetPlatformData();
+ if (pPlatform->m_GdiplusExt.IsAvailable()) {
+ return pPlatform->m_GdiplusExt.LoadDIBitmap(args);
+ }
+ if (args.flags == WINDIB_OPEN_MEMORY) {
+ return NULL;
+ }
+ HBITMAP hBitmap = (HBITMAP)LoadImageW(NULL, (wchar_t*)args.path_name,
+ IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
+ if (hBitmap == NULL) {
+ return NULL;
+ }
+ HDC hDC = CreateCompatibleDC(NULL);
+ int width, height;
+ GetBitmapSize(hBitmap, width, height);
+ CFX_DIBitmap* pDIBitmap = new CFX_DIBitmap;
+ if (!pDIBitmap->Create(width, height, FXDIB_Rgb)) {
+ delete pDIBitmap;
DeleteDC(hDC);
- return pDIBitmap;
+ return NULL;
+ }
+ CFX_ByteString info = GetBitmapInfo(pDIBitmap);
+ int ret = GetDIBits(hDC, hBitmap, 0, height, pDIBitmap->GetBuffer(),
+ (BITMAPINFO*)info.c_str(), DIB_RGB_COLORS);
+ if (!ret) {
+ delete pDIBitmap;
+ pDIBitmap = NULL;
+ }
+ DeleteDC(hDC);
+ return pDIBitmap;
}
-CFX_DIBitmap* CFX_WindowsDIB::LoadFromDDB(HDC hDC, HBITMAP hBitmap, FX_DWORD* pPalette, FX_DWORD palsize)
-{
- FX_BOOL bCreatedDC = hDC == NULL;
- if (hDC == NULL) {
- hDC = CreateCompatibleDC(NULL);
+CFX_DIBitmap* CFX_WindowsDIB::LoadFromDDB(HDC hDC,
+ HBITMAP hBitmap,
+ FX_DWORD* pPalette,
+ FX_DWORD palsize) {
+ FX_BOOL bCreatedDC = hDC == NULL;
+ if (hDC == NULL) {
+ hDC = CreateCompatibleDC(NULL);
+ }
+ BITMAPINFOHEADER bmih;
+ FXSYS_memset(&bmih, 0, sizeof bmih);
+ bmih.biSize = sizeof bmih;
+ GetDIBits(hDC, hBitmap, 0, 0, NULL, (BITMAPINFO*)&bmih, DIB_RGB_COLORS);
+ int width = bmih.biWidth;
+ int height = abs(bmih.biHeight);
+ bmih.biHeight = -height;
+ bmih.biCompression = BI_RGB;
+ CFX_DIBitmap* pDIBitmap = new CFX_DIBitmap;
+ int ret = 0;
+ if (bmih.biBitCount == 1 || bmih.biBitCount == 8) {
+ int size = sizeof(BITMAPINFOHEADER) + 8;
+ if (bmih.biBitCount == 8) {
+ size += sizeof(FX_DWORD) * 254;
}
- BITMAPINFOHEADER bmih;
- FXSYS_memset(&bmih, 0, sizeof bmih);
- bmih.biSize = sizeof bmih;
- GetDIBits(hDC, hBitmap, 0, 0, NULL, (BITMAPINFO*)&bmih, DIB_RGB_COLORS);
- int width = bmih.biWidth;
- int height = abs(bmih.biHeight);
- bmih.biHeight = -height;
- bmih.biCompression = BI_RGB;
- CFX_DIBitmap* pDIBitmap = new CFX_DIBitmap;
- int ret = 0;
- if (bmih.biBitCount == 1 || bmih.biBitCount == 8) {
- int size = sizeof (BITMAPINFOHEADER) + 8;
- if (bmih.biBitCount == 8) {
- size += sizeof (FX_DWORD) * 254;
- }
- BITMAPINFO* pbmih = (BITMAPINFO*)FX_Alloc(uint8_t, size);
- pbmih->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
- pbmih->bmiHeader.biBitCount = bmih.biBitCount;
- pbmih->bmiHeader.biCompression = BI_RGB;
- pbmih->bmiHeader.biHeight = -height;
- pbmih->bmiHeader.biPlanes = 1;
- pbmih->bmiHeader.biWidth = bmih.biWidth;
- if (!pDIBitmap->Create(bmih.biWidth, height, bmih.biBitCount == 1 ? FXDIB_1bppRgb : FXDIB_8bppRgb)) {
- delete pDIBitmap;
- FX_Free(pbmih);
- if (bCreatedDC) {
- DeleteDC(hDC);
- }
- return NULL;
- }
- ret = GetDIBits(hDC, hBitmap, 0, height, pDIBitmap->GetBuffer(), (BITMAPINFO*)pbmih, DIB_RGB_COLORS);
- FX_Free(pbmih);
- pbmih = NULL;
- pDIBitmap->CopyPalette(pPalette, palsize);
- } else {
- if (bmih.biBitCount <= 24) {
- bmih.biBitCount = 24;
- } else {
- bmih.biBitCount = 32;
- }
- if (!pDIBitmap->Create(bmih.biWidth, height, bmih.biBitCount == 24 ? FXDIB_Rgb : FXDIB_Rgb32)) {
- delete pDIBitmap;
- if (bCreatedDC) {
- DeleteDC(hDC);
- }
- return NULL;
- }
- ret = GetDIBits(hDC, hBitmap, 0, height, pDIBitmap->GetBuffer(), (BITMAPINFO*)&bmih, DIB_RGB_COLORS);
- if (ret != 0 && bmih.biBitCount == 32) {
- int pitch = pDIBitmap->GetPitch();
- for (int row = 0; row < height; row ++) {
- uint8_t* dest_scan = (uint8_t*)(pDIBitmap->GetBuffer() + row * pitch);
- for (int col = 0; col < width; col++) {
- dest_scan[3] = 255;
- dest_scan += 4;
- }
- }
- }
+ BITMAPINFO* pbmih = (BITMAPINFO*)FX_Alloc(uint8_t, size);
+ pbmih->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
+ pbmih->bmiHeader.biBitCount = bmih.biBitCount;
+ pbmih->bmiHeader.biCompression = BI_RGB;
+ pbmih->bmiHeader.biHeight = -height;
+ pbmih->bmiHeader.biPlanes = 1;
+ pbmih->bmiHeader.biWidth = bmih.biWidth;
+ if (!pDIBitmap->Create(bmih.biWidth, height, bmih.biBitCount == 1
+ ? FXDIB_1bppRgb
+ : FXDIB_8bppRgb)) {
+ delete pDIBitmap;
+ FX_Free(pbmih);
+ if (bCreatedDC) {
+ DeleteDC(hDC);
+ }
+ return NULL;
}
- if (ret == 0) {
- delete pDIBitmap;
- pDIBitmap = NULL;
+ ret = GetDIBits(hDC, hBitmap, 0, height, pDIBitmap->GetBuffer(),
+ (BITMAPINFO*)pbmih, DIB_RGB_COLORS);
+ FX_Free(pbmih);
+ pbmih = NULL;
+ pDIBitmap->CopyPalette(pPalette, palsize);
+ } else {
+ if (bmih.biBitCount <= 24) {
+ bmih.biBitCount = 24;
+ } else {
+ bmih.biBitCount = 32;
}
- if (bCreatedDC) {
+ if (!pDIBitmap->Create(bmih.biWidth, height,
+ bmih.biBitCount == 24 ? FXDIB_Rgb : FXDIB_Rgb32)) {
+ delete pDIBitmap;
+ if (bCreatedDC) {
DeleteDC(hDC);
+ }
+ return NULL;
}
- return pDIBitmap;
+ ret = GetDIBits(hDC, hBitmap, 0, height, pDIBitmap->GetBuffer(),
+ (BITMAPINFO*)&bmih, DIB_RGB_COLORS);
+ if (ret != 0 && bmih.biBitCount == 32) {
+ int pitch = pDIBitmap->GetPitch();
+ for (int row = 0; row < height; row++) {
+ uint8_t* dest_scan = (uint8_t*)(pDIBitmap->GetBuffer() + row * pitch);
+ for (int col = 0; col < width; col++) {
+ dest_scan[3] = 255;
+ dest_scan += 4;
+ }
+ }
+ }
+ }
+ if (ret == 0) {
+ delete pDIBitmap;
+ pDIBitmap = NULL;
+ }
+ if (bCreatedDC) {
+ DeleteDC(hDC);
+ }
+ return pDIBitmap;
}
-CFX_WindowsDIB::CFX_WindowsDIB(HDC hDC, int width, int height)
-{
- Create(width, height, FXDIB_Rgb, (uint8_t*)1);
- BITMAPINFOHEADER bmih;
- FXSYS_memset(&bmih, 0, sizeof bmih);
- bmih.biSize = sizeof bmih;
- bmih.biBitCount = 24;
- bmih.biHeight = -height;
- bmih.biPlanes = 1;
- bmih.biWidth = width;
- m_hBitmap = CreateDIBSection(hDC, (BITMAPINFO*)&bmih, DIB_RGB_COLORS, (LPVOID*)&m_pBuffer, NULL, 0);
- m_hMemDC = CreateCompatibleDC(hDC);
- m_hOldBitmap = (HBITMAP)SelectObject(m_hMemDC, m_hBitmap);
+CFX_WindowsDIB::CFX_WindowsDIB(HDC hDC, int width, int height) {
+ Create(width, height, FXDIB_Rgb, (uint8_t*)1);
+ BITMAPINFOHEADER bmih;
+ FXSYS_memset(&bmih, 0, sizeof bmih);
+ bmih.biSize = sizeof bmih;
+ bmih.biBitCount = 24;
+ bmih.biHeight = -height;
+ bmih.biPlanes = 1;
+ bmih.biWidth = width;
+ m_hBitmap = CreateDIBSection(hDC, (BITMAPINFO*)&bmih, DIB_RGB_COLORS,
+ (LPVOID*)&m_pBuffer, NULL, 0);
+ m_hMemDC = CreateCompatibleDC(hDC);
+ m_hOldBitmap = (HBITMAP)SelectObject(m_hMemDC, m_hBitmap);
}
-CFX_WindowsDIB::~CFX_WindowsDIB()
-{
- SelectObject(m_hMemDC, m_hOldBitmap);
- DeleteDC(m_hMemDC);
- DeleteObject(m_hBitmap);
+CFX_WindowsDIB::~CFX_WindowsDIB() {
+ SelectObject(m_hMemDC, m_hOldBitmap);
+ DeleteDC(m_hMemDC);
+ DeleteObject(m_hBitmap);
}
-void CFX_WindowsDIB::LoadFromDevice(HDC hDC, int left, int top)
-{
- ::BitBlt(m_hMemDC, 0, 0, m_Width, m_Height, hDC, left, top, SRCCOPY);
+void CFX_WindowsDIB::LoadFromDevice(HDC hDC, int left, int top) {
+ ::BitBlt(m_hMemDC, 0, 0, m_Width, m_Height, hDC, left, top, SRCCOPY);
}
-void CFX_WindowsDIB::SetToDevice(HDC hDC, int left, int top)
-{
- ::BitBlt(hDC, left, top, m_Width, m_Height, m_hMemDC, 0, 0, SRCCOPY);
+void CFX_WindowsDIB::SetToDevice(HDC hDC, int left, int top) {
+ ::BitBlt(hDC, left, top, m_Width, m_Height, m_hMemDC, 0, 0, SRCCOPY);
}
#endif
diff --git a/core/src/fxge/win32/fx_win32_dwrite.cpp b/core/src/fxge/win32/fx_win32_dwrite.cpp
index 65a35d86a1..5a3c16c2af 100644
--- a/core/src/fxge/win32/fx_win32_dwrite.cpp
+++ b/core/src/fxge/win32/fx_win32_dwrite.cpp
@@ -9,396 +9,362 @@
#include "../../../include/fxge/fx_ge_win32.h"
#include "dwrite_int.h"
#include <dwrite.h>
-typedef HRESULT (__stdcall *FuncType_DWriteCreateFactory)(__in DWRITE_FACTORY_TYPE, __in REFIID, __out IUnknown **);
+typedef HRESULT(__stdcall* FuncType_DWriteCreateFactory)(
+ __in DWRITE_FACTORY_TYPE,
+ __in REFIID,
+ __out IUnknown**);
template <typename InterfaceType>
-inline void SafeRelease(InterfaceType** currentObject)
-{
- if (*currentObject != NULL) {
- (*currentObject)->Release();
- *currentObject = NULL;
- }
+inline void SafeRelease(InterfaceType** currentObject) {
+ if (*currentObject != NULL) {
+ (*currentObject)->Release();
+ *currentObject = NULL;
+ }
}
template <typename InterfaceType>
-inline InterfaceType* SafeAcquire(InterfaceType* newObject)
-{
- if (newObject != NULL) {
- newObject->AddRef();
- }
- return newObject;
+inline InterfaceType* SafeAcquire(InterfaceType* newObject) {
+ if (newObject != NULL) {
+ newObject->AddRef();
+ }
+ return newObject;
}
-class CDwFontFileStream final : public IDWriteFontFileStream
-{
-public:
- explicit CDwFontFileStream(void const* fontFileReferenceKey, UINT32 fontFileReferenceKeySize);
- virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID iid, void** ppvObject);
- virtual ULONG STDMETHODCALLTYPE AddRef();
- virtual ULONG STDMETHODCALLTYPE Release();
- virtual HRESULT STDMETHODCALLTYPE ReadFileFragment(void const** fragmentStart, UINT64 fileOffset, UINT64 fragmentSize, OUT void** fragmentContext);
- virtual void STDMETHODCALLTYPE ReleaseFileFragment(void* fragmentContext);
- virtual HRESULT STDMETHODCALLTYPE GetFileSize(OUT UINT64* fileSize);
- virtual HRESULT STDMETHODCALLTYPE GetLastWriteTime(OUT UINT64* lastWriteTime);
- bool IsInitialized()
- {
- return resourcePtr_ != NULL;
- }
-private:
- ULONG refCount_;
- void const* resourcePtr_;
- DWORD resourceSize_;
+class CDwFontFileStream final : public IDWriteFontFileStream {
+ public:
+ explicit CDwFontFileStream(void const* fontFileReferenceKey,
+ UINT32 fontFileReferenceKeySize);
+ virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID iid,
+ void** ppvObject);
+ virtual ULONG STDMETHODCALLTYPE AddRef();
+ virtual ULONG STDMETHODCALLTYPE Release();
+ virtual HRESULT STDMETHODCALLTYPE
+ ReadFileFragment(void const** fragmentStart,
+ UINT64 fileOffset,
+ UINT64 fragmentSize,
+ OUT void** fragmentContext);
+ virtual void STDMETHODCALLTYPE ReleaseFileFragment(void* fragmentContext);
+ virtual HRESULT STDMETHODCALLTYPE GetFileSize(OUT UINT64* fileSize);
+ virtual HRESULT STDMETHODCALLTYPE GetLastWriteTime(OUT UINT64* lastWriteTime);
+ bool IsInitialized() { return resourcePtr_ != NULL; }
+
+ private:
+ ULONG refCount_;
+ void const* resourcePtr_;
+ DWORD resourceSize_;
};
-class CDwFontFileLoader final : public IDWriteFontFileLoader
-{
-public:
- virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID iid, void** ppvObject);
- virtual ULONG STDMETHODCALLTYPE AddRef();
- virtual ULONG STDMETHODCALLTYPE Release();
- virtual HRESULT STDMETHODCALLTYPE CreateStreamFromKey(void const* fontFileReferenceKey, UINT32 fontFileReferenceKeySize, OUT IDWriteFontFileStream** fontFileStream);
+class CDwFontFileLoader final : public IDWriteFontFileLoader {
+ public:
+ virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID iid,
+ void** ppvObject);
+ virtual ULONG STDMETHODCALLTYPE AddRef();
+ virtual ULONG STDMETHODCALLTYPE Release();
+ virtual HRESULT STDMETHODCALLTYPE
+ CreateStreamFromKey(void const* fontFileReferenceKey,
+ UINT32 fontFileReferenceKeySize,
+ OUT IDWriteFontFileStream** fontFileStream);
- static IDWriteFontFileLoader* GetLoader()
- {
- if (instance_ == NULL) {
- instance_ = new CDwFontFileLoader();
- }
- return instance_;
+ static IDWriteFontFileLoader* GetLoader() {
+ if (instance_ == NULL) {
+ instance_ = new CDwFontFileLoader();
}
- static bool IsLoaderInitialized()
- {
- return instance_ != NULL;
- }
-private:
- CDwFontFileLoader();
- ULONG refCount_;
- static IDWriteFontFileLoader* instance_;
+ return instance_;
+ }
+ static bool IsLoaderInitialized() { return instance_ != NULL; }
+
+ private:
+ CDwFontFileLoader();
+ ULONG refCount_;
+ static IDWriteFontFileLoader* instance_;
};
-class CDwFontContext
-{
-public:
- CDwFontContext(IDWriteFactory* dwriteFactory);
- ~CDwFontContext();
- HRESULT Initialize();
-private:
- CDwFontContext(CDwFontContext const&);
- void operator=(CDwFontContext const&);
- HRESULT hr_;
- IDWriteFactory* dwriteFactory_;
+class CDwFontContext {
+ public:
+ CDwFontContext(IDWriteFactory* dwriteFactory);
+ ~CDwFontContext();
+ HRESULT Initialize();
+
+ private:
+ CDwFontContext(CDwFontContext const&);
+ void operator=(CDwFontContext const&);
+ HRESULT hr_;
+ IDWriteFactory* dwriteFactory_;
};
-class CDwGdiTextRenderer
-{
-public:
- CDwGdiTextRenderer(
- CFX_DIBitmap* pBitmap,
- IDWriteBitmapRenderTarget* bitmapRenderTarget,
- IDWriteRenderingParams* renderingParams
- );
- ~CDwGdiTextRenderer();
- HRESULT STDMETHODCALLTYPE DrawGlyphRun(
- const FX_RECT& text_bbox,
- __in_opt CFX_ClipRgn* pClipRgn,
- __in_opt DWRITE_MATRIX const* pMatrix,
- FLOAT baselineOriginX,
- FLOAT baselineOriginY,
- DWRITE_MEASURING_MODE measuringMode,
- __in DWRITE_GLYPH_RUN const* glyphRun,
- const COLORREF& textColor
- );
-private:
- CFX_DIBitmap* pBitmap_;
- IDWriteBitmapRenderTarget* pRenderTarget_;
- IDWriteRenderingParams* pRenderingParams_;
+class CDwGdiTextRenderer {
+ public:
+ CDwGdiTextRenderer(CFX_DIBitmap* pBitmap,
+ IDWriteBitmapRenderTarget* bitmapRenderTarget,
+ IDWriteRenderingParams* renderingParams);
+ ~CDwGdiTextRenderer();
+ HRESULT STDMETHODCALLTYPE DrawGlyphRun(const FX_RECT& text_bbox,
+ __in_opt CFX_ClipRgn* pClipRgn,
+ __in_opt DWRITE_MATRIX const* pMatrix,
+ FLOAT baselineOriginX,
+ FLOAT baselineOriginY,
+ DWRITE_MEASURING_MODE measuringMode,
+ __in DWRITE_GLYPH_RUN const* glyphRun,
+ const COLORREF& textColor);
+
+ private:
+ CFX_DIBitmap* pBitmap_;
+ IDWriteBitmapRenderTarget* pRenderTarget_;
+ IDWriteRenderingParams* pRenderingParams_;
};
-CDWriteExt::CDWriteExt()
-{
- m_hModule = NULL;
- m_pDWriteFactory = NULL;
- m_pDwFontContext = NULL;
- m_pDwTextRenderer = NULL;
+CDWriteExt::CDWriteExt() {
+ m_hModule = NULL;
+ m_pDWriteFactory = NULL;
+ m_pDwFontContext = NULL;
+ m_pDwTextRenderer = NULL;
}
-void CDWriteExt::Load()
-{
-}
-void CDWriteExt::Unload()
-{
- if (m_pDwFontContext) {
- delete (CDwFontContext*)m_pDwFontContext;
- m_pDwFontContext = NULL;
- }
- SafeRelease((IDWriteFactory**)&m_pDWriteFactory);
+void CDWriteExt::Load() {}
+void CDWriteExt::Unload() {
+ if (m_pDwFontContext) {
+ delete (CDwFontContext*)m_pDwFontContext;
+ m_pDwFontContext = NULL;
+ }
+ SafeRelease((IDWriteFactory**)&m_pDWriteFactory);
}
-CDWriteExt::~CDWriteExt()
-{
- Unload();
+CDWriteExt::~CDWriteExt() {
+ Unload();
}
-LPVOID CDWriteExt::DwCreateFontFaceFromStream(uint8_t* pData, FX_DWORD size, int simulation_style)
-{
- IDWriteFactory* pDwFactory = (IDWriteFactory*)m_pDWriteFactory;
- IDWriteFontFile* pDwFontFile = NULL;
- IDWriteFontFace* pDwFontFace = NULL;
- BOOL isSupportedFontType = FALSE;
- DWRITE_FONT_FILE_TYPE fontFileType;
- DWRITE_FONT_FACE_TYPE fontFaceType;
- UINT32 numberOfFaces;
- DWRITE_FONT_SIMULATIONS fontStyle = (DWRITE_FONT_SIMULATIONS)(simulation_style & 3);
- HRESULT hr = S_OK;
- hr = pDwFactory->CreateCustomFontFileReference(
- (void const*)pData,
- (UINT32)size,
- CDwFontFileLoader::GetLoader(),
- &pDwFontFile
- );
- if (FAILED(hr)) {
- goto failed;
- }
- hr = pDwFontFile->Analyze(
- &isSupportedFontType,
- &fontFileType,
- &fontFaceType,
- &numberOfFaces
- );
- if (FAILED(hr) || !isSupportedFontType || fontFaceType == DWRITE_FONT_FACE_TYPE_UNKNOWN) {
- goto failed;
- }
- hr = pDwFactory->CreateFontFace(
- fontFaceType,
- 1,
- &pDwFontFile,
- 0,
- fontStyle,
- &pDwFontFace
- );
- if (FAILED(hr)) {
- goto failed;
- }
- SafeRelease(&pDwFontFile);
- return pDwFontFace;
+LPVOID CDWriteExt::DwCreateFontFaceFromStream(uint8_t* pData,
+ FX_DWORD size,
+ int simulation_style) {
+ IDWriteFactory* pDwFactory = (IDWriteFactory*)m_pDWriteFactory;
+ IDWriteFontFile* pDwFontFile = NULL;
+ IDWriteFontFace* pDwFontFace = NULL;
+ BOOL isSupportedFontType = FALSE;
+ DWRITE_FONT_FILE_TYPE fontFileType;
+ DWRITE_FONT_FACE_TYPE fontFaceType;
+ UINT32 numberOfFaces;
+ DWRITE_FONT_SIMULATIONS fontStyle =
+ (DWRITE_FONT_SIMULATIONS)(simulation_style & 3);
+ HRESULT hr = S_OK;
+ hr = pDwFactory->CreateCustomFontFileReference(
+ (void const*)pData, (UINT32)size, CDwFontFileLoader::GetLoader(),
+ &pDwFontFile);
+ if (FAILED(hr)) {
+ goto failed;
+ }
+ hr = pDwFontFile->Analyze(&isSupportedFontType, &fontFileType, &fontFaceType,
+ &numberOfFaces);
+ if (FAILED(hr) || !isSupportedFontType ||
+ fontFaceType == DWRITE_FONT_FACE_TYPE_UNKNOWN) {
+ goto failed;
+ }
+ hr = pDwFactory->CreateFontFace(fontFaceType, 1, &pDwFontFile, 0, fontStyle,
+ &pDwFontFace);
+ if (FAILED(hr)) {
+ goto failed;
+ }
+ SafeRelease(&pDwFontFile);
+ return pDwFontFace;
failed:
- SafeRelease(&pDwFontFile);
- return NULL;
+ SafeRelease(&pDwFontFile);
+ return NULL;
}
-FX_BOOL CDWriteExt::DwCreateRenderingTarget(CFX_DIBitmap* pBitmap, void** renderTarget)
-{
- if (pBitmap->GetFormat() > FXDIB_Argb) {
- return FALSE;
- }
- IDWriteFactory* pDwFactory = (IDWriteFactory*)m_pDWriteFactory;
- IDWriteGdiInterop* pGdiInterop = NULL;
- IDWriteBitmapRenderTarget* pBitmapRenderTarget = NULL;
- IDWriteRenderingParams* pRenderingParams = NULL;
- HRESULT hr = S_OK;
- hr = pDwFactory->GetGdiInterop(&pGdiInterop);
- if (FAILED(hr)) {
- goto failed;
- }
- hr = pGdiInterop->CreateBitmapRenderTarget(NULL, pBitmap->GetWidth(), pBitmap->GetHeight(),
- &pBitmapRenderTarget);
- if (FAILED(hr)) {
- goto failed;
- }
- hr = pDwFactory->CreateCustomRenderingParams(
- 1.0f,
- 0.0f,
- 1.0f,
- DWRITE_PIXEL_GEOMETRY_RGB,
- DWRITE_RENDERING_MODE_DEFAULT,
- &pRenderingParams
- );
- if (FAILED(hr)) {
- goto failed;
- }
- hr = pBitmapRenderTarget->SetPixelsPerDip(1.0f);
- if (FAILED(hr)) {
- goto failed;
- }
- *(CDwGdiTextRenderer**)renderTarget = new CDwGdiTextRenderer(pBitmap, pBitmapRenderTarget, pRenderingParams);
- SafeRelease(&pGdiInterop);
- SafeRelease(&pBitmapRenderTarget);
- SafeRelease(&pRenderingParams);
- return TRUE;
-failed:
- SafeRelease(&pGdiInterop);
- SafeRelease(&pBitmapRenderTarget);
- SafeRelease(&pRenderingParams);
+FX_BOOL CDWriteExt::DwCreateRenderingTarget(CFX_DIBitmap* pBitmap,
+ void** renderTarget) {
+ if (pBitmap->GetFormat() > FXDIB_Argb) {
return FALSE;
+ }
+ IDWriteFactory* pDwFactory = (IDWriteFactory*)m_pDWriteFactory;
+ IDWriteGdiInterop* pGdiInterop = NULL;
+ IDWriteBitmapRenderTarget* pBitmapRenderTarget = NULL;
+ IDWriteRenderingParams* pRenderingParams = NULL;
+ HRESULT hr = S_OK;
+ hr = pDwFactory->GetGdiInterop(&pGdiInterop);
+ if (FAILED(hr)) {
+ goto failed;
+ }
+ hr = pGdiInterop->CreateBitmapRenderTarget(
+ NULL, pBitmap->GetWidth(), pBitmap->GetHeight(), &pBitmapRenderTarget);
+ if (FAILED(hr)) {
+ goto failed;
+ }
+ hr = pDwFactory->CreateCustomRenderingParams(
+ 1.0f, 0.0f, 1.0f, DWRITE_PIXEL_GEOMETRY_RGB,
+ DWRITE_RENDERING_MODE_DEFAULT, &pRenderingParams);
+ if (FAILED(hr)) {
+ goto failed;
+ }
+ hr = pBitmapRenderTarget->SetPixelsPerDip(1.0f);
+ if (FAILED(hr)) {
+ goto failed;
+ }
+ *(CDwGdiTextRenderer**)renderTarget =
+ new CDwGdiTextRenderer(pBitmap, pBitmapRenderTarget, pRenderingParams);
+ SafeRelease(&pGdiInterop);
+ SafeRelease(&pBitmapRenderTarget);
+ SafeRelease(&pRenderingParams);
+ return TRUE;
+failed:
+ SafeRelease(&pGdiInterop);
+ SafeRelease(&pBitmapRenderTarget);
+ SafeRelease(&pRenderingParams);
+ return FALSE;
}
-FX_BOOL CDWriteExt::DwRendingString(void* renderTarget, CFX_ClipRgn* pClipRgn, FX_RECT& stringRect, CFX_AffineMatrix* pMatrix,
- void *font, FX_FLOAT font_size, FX_ARGB text_color,
- int glyph_count, unsigned short* glyph_indices,
- FX_FLOAT baselineOriginX, FX_FLOAT baselineOriginY,
+FX_BOOL CDWriteExt::DwRendingString(void* renderTarget,
+ CFX_ClipRgn* pClipRgn,
+ FX_RECT& stringRect,
+ CFX_AffineMatrix* pMatrix,
+ void* font,
+ FX_FLOAT font_size,
+ FX_ARGB text_color,
+ int glyph_count,
+ unsigned short* glyph_indices,
+ FX_FLOAT baselineOriginX,
+ FX_FLOAT baselineOriginY,
void* glyph_offsets,
- FX_FLOAT* glyph_advances)
-{
- if (renderTarget == NULL) {
- return TRUE;
- }
- CDwGdiTextRenderer* pTextRenderer = (CDwGdiTextRenderer*)renderTarget;
- DWRITE_MATRIX transform;
- DWRITE_GLYPH_RUN glyphRun;
- HRESULT hr = S_OK;
- if (pMatrix) {
- transform.m11 = pMatrix->a;
- transform.m12 = pMatrix->b;
- transform.m21 = pMatrix->c;
- transform.m22 = pMatrix->d;
- transform.dx = pMatrix->e;
- transform.dy = pMatrix->f;
- }
- glyphRun.fontFace = (IDWriteFontFace*)font;
- glyphRun.fontEmSize = font_size;
- glyphRun.glyphCount = glyph_count;
- glyphRun.glyphIndices = glyph_indices;
- glyphRun.glyphAdvances = glyph_advances;
- glyphRun.glyphOffsets = (DWRITE_GLYPH_OFFSET*)glyph_offsets;
- glyphRun.isSideways = FALSE;
- glyphRun.bidiLevel = 0;
- hr = pTextRenderer->DrawGlyphRun(
- stringRect,
- pClipRgn,
- pMatrix ? &transform : NULL,
- baselineOriginX, baselineOriginY,
- DWRITE_MEASURING_MODE_NATURAL,
- &glyphRun,
- RGB(FXARGB_R(text_color), FXARGB_G(text_color), FXARGB_B(text_color))
- );
- return SUCCEEDED(hr) ? TRUE : FALSE;
+ FX_FLOAT* glyph_advances) {
+ if (renderTarget == NULL) {
+ return TRUE;
+ }
+ CDwGdiTextRenderer* pTextRenderer = (CDwGdiTextRenderer*)renderTarget;
+ DWRITE_MATRIX transform;
+ DWRITE_GLYPH_RUN glyphRun;
+ HRESULT hr = S_OK;
+ if (pMatrix) {
+ transform.m11 = pMatrix->a;
+ transform.m12 = pMatrix->b;
+ transform.m21 = pMatrix->c;
+ transform.m22 = pMatrix->d;
+ transform.dx = pMatrix->e;
+ transform.dy = pMatrix->f;
+ }
+ glyphRun.fontFace = (IDWriteFontFace*)font;
+ glyphRun.fontEmSize = font_size;
+ glyphRun.glyphCount = glyph_count;
+ glyphRun.glyphIndices = glyph_indices;
+ glyphRun.glyphAdvances = glyph_advances;
+ glyphRun.glyphOffsets = (DWRITE_GLYPH_OFFSET*)glyph_offsets;
+ glyphRun.isSideways = FALSE;
+ glyphRun.bidiLevel = 0;
+ hr = pTextRenderer->DrawGlyphRun(
+ stringRect, pClipRgn, pMatrix ? &transform : NULL, baselineOriginX,
+ baselineOriginY, DWRITE_MEASURING_MODE_NATURAL, &glyphRun,
+ RGB(FXARGB_R(text_color), FXARGB_G(text_color), FXARGB_B(text_color)));
+ return SUCCEEDED(hr) ? TRUE : FALSE;
}
-void CDWriteExt::DwDeleteRenderingTarget(void* renderTarget)
-{
- delete (CDwGdiTextRenderer*)renderTarget;
+void CDWriteExt::DwDeleteRenderingTarget(void* renderTarget) {
+ delete (CDwGdiTextRenderer*)renderTarget;
}
-void CDWriteExt::DwDeleteFont(void* pFont)
-{
- if (pFont) {
- SafeRelease((IDWriteFontFace**)&pFont);
- }
+void CDWriteExt::DwDeleteFont(void* pFont) {
+ if (pFont) {
+ SafeRelease((IDWriteFontFace**)&pFont);
+ }
}
-CDwFontFileStream::CDwFontFileStream(void const* fontFileReferenceKey, UINT32 fontFileReferenceKeySize)
-{
- refCount_ = 0;
- resourcePtr_ = fontFileReferenceKey;
- resourceSize_ = fontFileReferenceKeySize;
+CDwFontFileStream::CDwFontFileStream(void const* fontFileReferenceKey,
+ UINT32 fontFileReferenceKeySize) {
+ refCount_ = 0;
+ resourcePtr_ = fontFileReferenceKey;
+ resourceSize_ = fontFileReferenceKeySize;
}
-HRESULT STDMETHODCALLTYPE CDwFontFileStream::QueryInterface(REFIID iid, void** ppvObject)
-{
- if (iid == IID_IUnknown || iid == __uuidof(IDWriteFontFileStream)) {
- *ppvObject = this;
- AddRef();
- return S_OK;
- }
- *ppvObject = NULL;
- return E_NOINTERFACE;
+HRESULT STDMETHODCALLTYPE CDwFontFileStream::QueryInterface(REFIID iid,
+ void** ppvObject) {
+ if (iid == IID_IUnknown || iid == __uuidof(IDWriteFontFileStream)) {
+ *ppvObject = this;
+ AddRef();
+ return S_OK;
+ }
+ *ppvObject = NULL;
+ return E_NOINTERFACE;
}
-ULONG STDMETHODCALLTYPE CDwFontFileStream::AddRef()
-{
- return InterlockedIncrement((long*)(&refCount_));
+ULONG STDMETHODCALLTYPE CDwFontFileStream::AddRef() {
+ return InterlockedIncrement((long*)(&refCount_));
}
-ULONG STDMETHODCALLTYPE CDwFontFileStream::Release()
-{
- ULONG newCount = InterlockedDecrement((long*)(&refCount_));
- if (newCount == 0) {
- delete this;
- }
- return newCount;
+ULONG STDMETHODCALLTYPE CDwFontFileStream::Release() {
+ ULONG newCount = InterlockedDecrement((long*)(&refCount_));
+ if (newCount == 0) {
+ delete this;
+ }
+ return newCount;
}
-HRESULT STDMETHODCALLTYPE CDwFontFileStream::ReadFileFragment(
- void const** fragmentStart,
- UINT64 fileOffset,
- UINT64 fragmentSize,
- OUT void** fragmentContext
-)
-{
- if (fileOffset <= resourceSize_ && fragmentSize <= resourceSize_ - fileOffset) {
- *fragmentStart = static_cast<uint8_t const*>(resourcePtr_) + static_cast<size_t>(fileOffset);
- *fragmentContext = NULL;
- return S_OK;
- }
- *fragmentStart = NULL;
+HRESULT STDMETHODCALLTYPE
+CDwFontFileStream::ReadFileFragment(void const** fragmentStart,
+ UINT64 fileOffset,
+ UINT64 fragmentSize,
+ OUT void** fragmentContext) {
+ if (fileOffset <= resourceSize_ &&
+ fragmentSize <= resourceSize_ - fileOffset) {
+ *fragmentStart = static_cast<uint8_t const*>(resourcePtr_) +
+ static_cast<size_t>(fileOffset);
*fragmentContext = NULL;
- return E_FAIL;
-}
-void STDMETHODCALLTYPE CDwFontFileStream::ReleaseFileFragment(void* fragmentContext)
-{
-}
-HRESULT STDMETHODCALLTYPE CDwFontFileStream::GetFileSize(OUT UINT64* fileSize)
-{
- *fileSize = resourceSize_;
return S_OK;
+ }
+ *fragmentStart = NULL;
+ *fragmentContext = NULL;
+ return E_FAIL;
}
-HRESULT STDMETHODCALLTYPE CDwFontFileStream::GetLastWriteTime(OUT UINT64* lastWriteTime)
-{
- *lastWriteTime = 0;
- return E_NOTIMPL;
+void STDMETHODCALLTYPE
+CDwFontFileStream::ReleaseFileFragment(void* fragmentContext) {}
+HRESULT STDMETHODCALLTYPE CDwFontFileStream::GetFileSize(OUT UINT64* fileSize) {
+ *fileSize = resourceSize_;
+ return S_OK;
+}
+HRESULT STDMETHODCALLTYPE
+CDwFontFileStream::GetLastWriteTime(OUT UINT64* lastWriteTime) {
+ *lastWriteTime = 0;
+ return E_NOTIMPL;
}
IDWriteFontFileLoader* CDwFontFileLoader::instance_ = NULL;
-CDwFontFileLoader::CDwFontFileLoader() :
- refCount_(0)
-{
+CDwFontFileLoader::CDwFontFileLoader() : refCount_(0) {}
+HRESULT STDMETHODCALLTYPE CDwFontFileLoader::QueryInterface(REFIID iid,
+ void** ppvObject) {
+ if (iid == IID_IUnknown || iid == __uuidof(IDWriteFontFileLoader)) {
+ *ppvObject = this;
+ AddRef();
+ return S_OK;
+ }
+ *ppvObject = NULL;
+ return E_NOINTERFACE;
}
-HRESULT STDMETHODCALLTYPE CDwFontFileLoader::QueryInterface(REFIID iid, void** ppvObject)
-{
- if (iid == IID_IUnknown || iid == __uuidof(IDWriteFontFileLoader)) {
- *ppvObject = this;
- AddRef();
- return S_OK;
- }
- *ppvObject = NULL;
- return E_NOINTERFACE;
+ULONG STDMETHODCALLTYPE CDwFontFileLoader::AddRef() {
+ return InterlockedIncrement((long*)(&refCount_));
}
-ULONG STDMETHODCALLTYPE CDwFontFileLoader::AddRef()
-{
- return InterlockedIncrement((long*)(&refCount_));
-}
-ULONG STDMETHODCALLTYPE CDwFontFileLoader::Release()
-{
- ULONG newCount = InterlockedDecrement((long*)(&refCount_));
- if (newCount == 0) {
- instance_ = NULL;
- delete this;
- }
- return newCount;
+ULONG STDMETHODCALLTYPE CDwFontFileLoader::Release() {
+ ULONG newCount = InterlockedDecrement((long*)(&refCount_));
+ if (newCount == 0) {
+ instance_ = NULL;
+ delete this;
+ }
+ return newCount;
}
HRESULT STDMETHODCALLTYPE CDwFontFileLoader::CreateStreamFromKey(
void const* fontFileReferenceKey,
UINT32 fontFileReferenceKeySize,
- OUT IDWriteFontFileStream** fontFileStream
-)
-{
- *fontFileStream = NULL;
- CDwFontFileStream* stream = new CDwFontFileStream(fontFileReferenceKey, fontFileReferenceKeySize);
- if (!stream->IsInitialized()) {
- delete stream;
- return E_FAIL;
- }
- *fontFileStream = SafeAcquire(stream);
- return S_OK;
-}
-CDwFontContext::CDwFontContext(IDWriteFactory* dwriteFactory) :
- hr_(S_FALSE),
- dwriteFactory_(SafeAcquire(dwriteFactory))
-{
-}
-CDwFontContext::~CDwFontContext()
-{
- if(dwriteFactory_ && hr_ == S_OK) {
- dwriteFactory_->UnregisterFontFileLoader(CDwFontFileLoader::GetLoader());
- }
- SafeRelease(&dwriteFactory_);
+ OUT IDWriteFontFileStream** fontFileStream) {
+ *fontFileStream = NULL;
+ CDwFontFileStream* stream =
+ new CDwFontFileStream(fontFileReferenceKey, fontFileReferenceKeySize);
+ if (!stream->IsInitialized()) {
+ delete stream;
+ return E_FAIL;
+ }
+ *fontFileStream = SafeAcquire(stream);
+ return S_OK;
}
-HRESULT CDwFontContext::Initialize()
-{
- if (hr_ == S_FALSE) {
- return hr_ = dwriteFactory_->RegisterFontFileLoader(CDwFontFileLoader::GetLoader());
- }
- return hr_;
+CDwFontContext::CDwFontContext(IDWriteFactory* dwriteFactory)
+ : hr_(S_FALSE), dwriteFactory_(SafeAcquire(dwriteFactory)) {}
+CDwFontContext::~CDwFontContext() {
+ if (dwriteFactory_ && hr_ == S_OK) {
+ dwriteFactory_->UnregisterFontFileLoader(CDwFontFileLoader::GetLoader());
+ }
+ SafeRelease(&dwriteFactory_);
}
-CDwGdiTextRenderer::CDwGdiTextRenderer(CFX_DIBitmap* pBitmap, IDWriteBitmapRenderTarget* bitmapRenderTarget, IDWriteRenderingParams* renderingParams):
- pBitmap_(pBitmap),
- pRenderTarget_(SafeAcquire(bitmapRenderTarget)),
- pRenderingParams_(SafeAcquire(renderingParams))
-{
+HRESULT CDwFontContext::Initialize() {
+ if (hr_ == S_FALSE) {
+ return hr_ = dwriteFactory_->RegisterFontFileLoader(
+ CDwFontFileLoader::GetLoader());
+ }
+ return hr_;
}
-CDwGdiTextRenderer::~CDwGdiTextRenderer()
-{
- SafeRelease(&pRenderTarget_);
- SafeRelease(&pRenderingParams_);
+CDwGdiTextRenderer::CDwGdiTextRenderer(
+ CFX_DIBitmap* pBitmap,
+ IDWriteBitmapRenderTarget* bitmapRenderTarget,
+ IDWriteRenderingParams* renderingParams)
+ : pBitmap_(pBitmap),
+ pRenderTarget_(SafeAcquire(bitmapRenderTarget)),
+ pRenderingParams_(SafeAcquire(renderingParams)) {}
+CDwGdiTextRenderer::~CDwGdiTextRenderer() {
+ SafeRelease(&pRenderTarget_);
+ SafeRelease(&pRenderingParams_);
}
STDMETHODIMP CDwGdiTextRenderer::DrawGlyphRun(
const FX_RECT& text_bbox,
@@ -408,60 +374,34 @@ STDMETHODIMP CDwGdiTextRenderer::DrawGlyphRun(
FLOAT baselineOriginY,
DWRITE_MEASURING_MODE measuringMode,
__in DWRITE_GLYPH_RUN const* glyphRun,
- const COLORREF& textColor
-)
-{
- HRESULT hr = S_OK;
- if (pMatrix) {
- hr = pRenderTarget_->SetCurrentTransform(pMatrix);
- if (FAILED(hr)) {
- return hr;
- }
- }
- HDC hDC = pRenderTarget_->GetMemoryDC();
- HBITMAP hBitmap = (HBITMAP)::GetCurrentObject(hDC, OBJ_BITMAP);
- BITMAP bitmap;
- GetObject(hBitmap, sizeof bitmap, &bitmap);
- CFX_DIBitmap dib;
- dib.Create(
- bitmap.bmWidth,
- bitmap.bmHeight,
- bitmap.bmBitsPixel == 24 ? FXDIB_Rgb : FXDIB_Rgb32,
- (uint8_t*)bitmap.bmBits
- );
- dib.CompositeBitmap(
- text_bbox.left,
- text_bbox.top,
- text_bbox.Width(),
- text_bbox.Height(),
- pBitmap_,
- text_bbox.left,
- text_bbox.top,
- FXDIB_BLEND_NORMAL,
- NULL
- );
- hr = pRenderTarget_->DrawGlyphRun(
- baselineOriginX,
- baselineOriginY,
- measuringMode,
- glyphRun,
- pRenderingParams_,
- textColor
- );
+ const COLORREF& textColor) {
+ HRESULT hr = S_OK;
+ if (pMatrix) {
+ hr = pRenderTarget_->SetCurrentTransform(pMatrix);
if (FAILED(hr)) {
- return hr;
+ return hr;
}
- pBitmap_->CompositeBitmap(
- text_bbox.left,
- text_bbox.top,
- text_bbox.Width(),
- text_bbox.Height(),
- &dib,
- text_bbox.left,
- text_bbox.top,
- FXDIB_BLEND_NORMAL,
- pClipRgn
- );
+ }
+ HDC hDC = pRenderTarget_->GetMemoryDC();
+ HBITMAP hBitmap = (HBITMAP)::GetCurrentObject(hDC, OBJ_BITMAP);
+ BITMAP bitmap;
+ GetObject(hBitmap, sizeof bitmap, &bitmap);
+ CFX_DIBitmap dib;
+ dib.Create(bitmap.bmWidth, bitmap.bmHeight,
+ bitmap.bmBitsPixel == 24 ? FXDIB_Rgb : FXDIB_Rgb32,
+ (uint8_t*)bitmap.bmBits);
+ dib.CompositeBitmap(text_bbox.left, text_bbox.top, text_bbox.Width(),
+ text_bbox.Height(), pBitmap_, text_bbox.left,
+ text_bbox.top, FXDIB_BLEND_NORMAL, NULL);
+ hr = pRenderTarget_->DrawGlyphRun(baselineOriginX, baselineOriginY,
+ measuringMode, glyphRun, pRenderingParams_,
+ textColor);
+ if (FAILED(hr)) {
return hr;
+ }
+ pBitmap_->CompositeBitmap(text_bbox.left, text_bbox.top, text_bbox.Width(),
+ text_bbox.Height(), &dib, text_bbox.left,
+ text_bbox.top, FXDIB_BLEND_NORMAL, pClipRgn);
+ return hr;
}
#endif
diff --git a/core/src/fxge/win32/fx_win32_gdipext.cpp b/core/src/fxge/win32/fx_win32_gdipext.cpp
index d90215a4ea..ce65a26301 100644
--- a/core/src/fxge/win32/fx_win32_gdipext.cpp
+++ b/core/src/fxge/win32/fx_win32_gdipext.cpp
@@ -9,102 +9,102 @@
#include <windows.h>
#include <algorithm>
namespace Gdiplus {
- using std::min;
- using std::max;
+using std::min;
+using std::max;
} // namespace Gdiplus
#include <gdiplus.h>
#include "../../../include/fxge/fx_ge_win32.h"
#include "win32_int.h"
using namespace Gdiplus;
using namespace Gdiplus::DllExports;
-#define GdiFillType2Gdip(fill_type) (fill_type == ALTERNATE ? FillModeAlternate : FillModeWinding)
-static CombineMode GdiCombineMode2Gdip(int mode)
-{
- switch (mode) {
- case RGN_AND:
- return CombineModeIntersect;
- }
- return CombineModeIntersect;
+#define GdiFillType2Gdip(fill_type) \
+ (fill_type == ALTERNATE ? FillModeAlternate : FillModeWinding)
+static CombineMode GdiCombineMode2Gdip(int mode) {
+ switch (mode) {
+ case RGN_AND:
+ return CombineModeIntersect;
+ }
+ return CombineModeIntersect;
}
enum {
- FuncId_GdipCreatePath2,
- FuncId_GdipSetPenDashStyle,
- FuncId_GdipSetPenDashArray,
- FuncId_GdipSetPenDashCap197819,
- FuncId_GdipSetPenLineJoin,
- FuncId_GdipSetPenWidth,
- FuncId_GdipCreateFromHDC,
- FuncId_GdipSetPageUnit,
- FuncId_GdipSetSmoothingMode,
- FuncId_GdipCreateSolidFill,
- FuncId_GdipFillPath,
- FuncId_GdipDeleteBrush,
- FuncId_GdipCreatePen1,
- FuncId_GdipSetPenMiterLimit,
- FuncId_GdipDrawPath,
- FuncId_GdipDeletePen,
- FuncId_GdipDeletePath,
- FuncId_GdipDeleteGraphics,
- FuncId_GdipCreateBitmapFromFileICM,
- FuncId_GdipCreateBitmapFromStreamICM,
- FuncId_GdipGetImageHeight,
- FuncId_GdipGetImageWidth,
- FuncId_GdipGetImagePixelFormat,
- FuncId_GdipBitmapLockBits,
- FuncId_GdipGetImagePaletteSize,
- FuncId_GdipGetImagePalette,
- FuncId_GdipBitmapUnlockBits,
- FuncId_GdipDisposeImage,
- FuncId_GdipFillRectangle,
- FuncId_GdipCreateBitmapFromScan0,
- FuncId_GdipSetImagePalette,
- FuncId_GdipSetInterpolationMode,
- FuncId_GdipDrawImagePointsI,
- FuncId_GdipCreateBitmapFromGdiDib,
- FuncId_GdiplusStartup,
- FuncId_GdipDrawLineI,
- FuncId_GdipResetClip,
- FuncId_GdipCreatePath,
- FuncId_GdipAddPathPath,
- FuncId_GdipSetPathFillMode,
- FuncId_GdipSetClipPath,
- FuncId_GdipGetClip,
- FuncId_GdipCreateRegion,
- FuncId_GdipGetClipBoundsI,
- FuncId_GdipSetClipRegion,
- FuncId_GdipWidenPath,
- FuncId_GdipAddPathLine,
- FuncId_GdipAddPathRectangle,
- FuncId_GdipDeleteRegion,
- FuncId_GdipGetDC,
- FuncId_GdipReleaseDC,
- FuncId_GdipSetPenLineCap197819,
- FuncId_GdipSetPenDashOffset,
- FuncId_GdipResetPath,
- FuncId_GdipCreateRegionPath,
- FuncId_GdipCreateFont,
- FuncId_GdipGetFontSize,
- FuncId_GdipCreateFontFamilyFromName,
- FuncId_GdipSetTextRenderingHint,
- FuncId_GdipDrawDriverString,
- FuncId_GdipCreateMatrix2,
- FuncId_GdipDeleteMatrix,
- FuncId_GdipSetWorldTransform,
- FuncId_GdipResetWorldTransform,
- FuncId_GdipDeleteFontFamily,
- FuncId_GdipDeleteFont,
- FuncId_GdipNewPrivateFontCollection,
- FuncId_GdipDeletePrivateFontCollection,
- FuncId_GdipPrivateAddMemoryFont,
- FuncId_GdipGetFontCollectionFamilyList,
- FuncId_GdipGetFontCollectionFamilyCount,
- FuncId_GdipSetTextContrast,
- FuncId_GdipSetPixelOffsetMode,
- FuncId_GdipGetImageGraphicsContext,
- FuncId_GdipDrawImageI,
- FuncId_GdipDrawImageRectI,
- FuncId_GdipDrawString,
- FuncId_GdipSetPenTransform,
+ FuncId_GdipCreatePath2,
+ FuncId_GdipSetPenDashStyle,
+ FuncId_GdipSetPenDashArray,
+ FuncId_GdipSetPenDashCap197819,
+ FuncId_GdipSetPenLineJoin,
+ FuncId_GdipSetPenWidth,
+ FuncId_GdipCreateFromHDC,
+ FuncId_GdipSetPageUnit,
+ FuncId_GdipSetSmoothingMode,
+ FuncId_GdipCreateSolidFill,
+ FuncId_GdipFillPath,
+ FuncId_GdipDeleteBrush,
+ FuncId_GdipCreatePen1,
+ FuncId_GdipSetPenMiterLimit,
+ FuncId_GdipDrawPath,
+ FuncId_GdipDeletePen,
+ FuncId_GdipDeletePath,
+ FuncId_GdipDeleteGraphics,
+ FuncId_GdipCreateBitmapFromFileICM,
+ FuncId_GdipCreateBitmapFromStreamICM,
+ FuncId_GdipGetImageHeight,
+ FuncId_GdipGetImageWidth,
+ FuncId_GdipGetImagePixelFormat,
+ FuncId_GdipBitmapLockBits,
+ FuncId_GdipGetImagePaletteSize,
+ FuncId_GdipGetImagePalette,
+ FuncId_GdipBitmapUnlockBits,
+ FuncId_GdipDisposeImage,
+ FuncId_GdipFillRectangle,
+ FuncId_GdipCreateBitmapFromScan0,
+ FuncId_GdipSetImagePalette,
+ FuncId_GdipSetInterpolationMode,
+ FuncId_GdipDrawImagePointsI,
+ FuncId_GdipCreateBitmapFromGdiDib,
+ FuncId_GdiplusStartup,
+ FuncId_GdipDrawLineI,
+ FuncId_GdipResetClip,
+ FuncId_GdipCreatePath,
+ FuncId_GdipAddPathPath,
+ FuncId_GdipSetPathFillMode,
+ FuncId_GdipSetClipPath,
+ FuncId_GdipGetClip,
+ FuncId_GdipCreateRegion,
+ FuncId_GdipGetClipBoundsI,
+ FuncId_GdipSetClipRegion,
+ FuncId_GdipWidenPath,
+ FuncId_GdipAddPathLine,
+ FuncId_GdipAddPathRectangle,
+ FuncId_GdipDeleteRegion,
+ FuncId_GdipGetDC,
+ FuncId_GdipReleaseDC,
+ FuncId_GdipSetPenLineCap197819,
+ FuncId_GdipSetPenDashOffset,
+ FuncId_GdipResetPath,
+ FuncId_GdipCreateRegionPath,
+ FuncId_GdipCreateFont,
+ FuncId_GdipGetFontSize,
+ FuncId_GdipCreateFontFamilyFromName,
+ FuncId_GdipSetTextRenderingHint,
+ FuncId_GdipDrawDriverString,
+ FuncId_GdipCreateMatrix2,
+ FuncId_GdipDeleteMatrix,
+ FuncId_GdipSetWorldTransform,
+ FuncId_GdipResetWorldTransform,
+ FuncId_GdipDeleteFontFamily,
+ FuncId_GdipDeleteFont,
+ FuncId_GdipNewPrivateFontCollection,
+ FuncId_GdipDeletePrivateFontCollection,
+ FuncId_GdipPrivateAddMemoryFont,
+ FuncId_GdipGetFontCollectionFamilyList,
+ FuncId_GdipGetFontCollectionFamilyCount,
+ FuncId_GdipSetTextContrast,
+ FuncId_GdipSetPixelOffsetMode,
+ FuncId_GdipGetImageGraphicsContext,
+ FuncId_GdipDrawImageI,
+ FuncId_GdipDrawImageRectI,
+ FuncId_GdipDrawString,
+ FuncId_GdipSetPenTransform,
};
static LPCSTR g_GdipFuncNames[] = {
"GdipCreatePath2",
@@ -186,1070 +186,1335 @@ static LPCSTR g_GdipFuncNames[] = {
"GdipDrawString",
"GdipSetPenTransform",
};
-typedef GpStatus (WINGDIPAPI *FuncType_GdipCreatePath2)(GDIPCONST GpPointF*, GDIPCONST BYTE*, INT, GpFillMode, GpPath **path);
-typedef GpStatus (WINGDIPAPI *FuncType_GdipSetPenDashStyle)(GpPen *pen, GpDashStyle dashstyle);
-typedef GpStatus (WINGDIPAPI *FuncType_GdipSetPenDashArray)(GpPen *pen, GDIPCONST REAL *dash, INT count);
-typedef GpStatus (WINGDIPAPI *FuncType_GdipSetPenDashCap197819)(GpPen *pen, GpDashCap dashCap);
-typedef GpStatus (WINGDIPAPI *FuncType_GdipSetPenLineJoin)(GpPen *pen, GpLineJoin lineJoin);
-typedef GpStatus (WINGDIPAPI *FuncType_GdipSetPenWidth)(GpPen *pen, REAL width);
-typedef GpStatus (WINGDIPAPI *FuncType_GdipCreateFromHDC)(HDC hdc, GpGraphics **graphics);
-typedef GpStatus (WINGDIPAPI *FuncType_GdipSetPageUnit)(GpGraphics *graphics, GpUnit unit);
-typedef GpStatus (WINGDIPAPI *FuncType_GdipSetSmoothingMode)(GpGraphics *graphics, SmoothingMode smoothingMode);
-typedef GpStatus (WINGDIPAPI *FuncType_GdipCreateSolidFill)(ARGB color, GpSolidFill **brush);
-typedef GpStatus (WINGDIPAPI *FuncType_GdipFillPath)(GpGraphics *graphics, GpBrush *brush, GpPath *path);
-typedef GpStatus (WINGDIPAPI *FuncType_GdipDeleteBrush)(GpBrush *brush);
-typedef GpStatus (WINGDIPAPI *FuncType_GdipCreatePen1)(ARGB color, REAL width, GpUnit unit, GpPen **pen);
-typedef GpStatus (WINGDIPAPI *FuncType_GdipSetPenMiterLimit)(GpPen *pen, REAL miterLimit);
-typedef GpStatus (WINGDIPAPI *FuncType_GdipDrawPath)(GpGraphics *graphics, GpPen *pen, GpPath *path);
-typedef GpStatus (WINGDIPAPI *FuncType_GdipDeletePen)(GpPen *pen);
-typedef GpStatus (WINGDIPAPI *FuncType_GdipDeletePath)(GpPath* path);
-typedef GpStatus (WINGDIPAPI *FuncType_GdipDeleteGraphics)(GpGraphics *graphics);
-typedef GpStatus (WINGDIPAPI *FuncType_GdipCreateBitmapFromFileICM)(GDIPCONST WCHAR* filename, GpBitmap **bitmap);
-typedef GpStatus (WINGDIPAPI *FuncType_GdipCreateBitmapFromStreamICM)(IStream* stream, GpBitmap **bitmap);
-typedef GpStatus (WINGDIPAPI *FuncType_GdipGetImageWidth)(GpImage *image, UINT *width);
-typedef GpStatus (WINGDIPAPI *FuncType_GdipGetImageHeight)(GpImage *image, UINT *height);
-typedef GpStatus (WINGDIPAPI *FuncType_GdipGetImagePixelFormat)(GpImage *image, PixelFormat *format);
-typedef GpStatus (WINGDIPAPI *FuncType_GdipBitmapLockBits)(GpBitmap* bitmap, GDIPCONST GpRect* rect, UINT flags, PixelFormat format, BitmapData* lockedBitmapData);
-typedef GpStatus (WINGDIPAPI *FuncType_GdipGetImagePalette)(GpImage *image, ColorPalette *palette, INT size);
-typedef GpStatus (WINGDIPAPI *FuncType_GdipGetImagePaletteSize)(GpImage *image, INT *size);
-typedef GpStatus (WINGDIPAPI *FuncType_GdipBitmapUnlockBits)(GpBitmap* bitmap, BitmapData* lockedBitmapData);
-typedef GpStatus (WINGDIPAPI *FuncType_GdipDisposeImage)(GpImage *image);
-typedef GpStatus (WINGDIPAPI *FuncType_GdipFillRectangle)(GpGraphics *graphics, GpBrush *brush, REAL x, REAL y, REAL width, REAL height);
-typedef GpStatus (WINGDIPAPI *FuncType_GdipCreateBitmapFromScan0)(INT width, INT height, INT stride, PixelFormat format, BYTE* scan0, GpBitmap** bitmap);
-typedef GpStatus (WINGDIPAPI *FuncType_GdipSetImagePalette)(GpImage *image, GDIPCONST ColorPalette *palette);
-typedef GpStatus (WINGDIPAPI *FuncType_GdipSetInterpolationMode)(GpGraphics *graphics, InterpolationMode interpolationMode);
-typedef GpStatus (WINGDIPAPI *FuncType_GdipDrawImagePointsI)(GpGraphics *graphics, GpImage *image, GDIPCONST GpPoint *dstpoints, INT count);
-typedef GpStatus (WINGDIPAPI *FuncType_GdipCreateBitmapFromGdiDib)(GDIPCONST BITMAPINFO* gdiBitmapInfo, VOID* gdiBitmapData, GpBitmap** bitmap);
-typedef Status (WINAPI *FuncType_GdiplusStartup)(OUT uintptr_t *token, const GdiplusStartupInput *input, OUT GdiplusStartupOutput *output);
-typedef GpStatus (WINGDIPAPI *FuncType_GdipDrawLineI)(GpGraphics *graphics, GpPen *pen, int x1, int y1, int x2, int y2);
-typedef GpStatus (WINGDIPAPI *FuncType_GdipResetClip)(GpGraphics *graphics);
-typedef GpStatus (WINGDIPAPI *FuncType_GdipCreatePath)(GpFillMode brushMode, GpPath **path);
-typedef GpStatus (WINGDIPAPI *FuncType_GdipAddPathPath)(GpPath *path, GDIPCONST GpPath* addingPath, BOOL connect);
-typedef GpStatus (WINGDIPAPI *FuncType_GdipSetPathFillMode)(GpPath *path, GpFillMode fillmode);
-typedef GpStatus (WINGDIPAPI *FuncType_GdipSetClipPath)(GpGraphics *graphics, GpPath *path, CombineMode combineMode);
-typedef GpStatus (WINGDIPAPI *FuncType_GdipGetClip)(GpGraphics *graphics, GpRegion *region);
-typedef GpStatus (WINGDIPAPI *FuncType_GdipCreateRegion)(GpRegion **region);
-typedef GpStatus (WINGDIPAPI *FuncType_GdipGetClipBoundsI)(GpGraphics *graphics, GpRect *rect);
-typedef GpStatus (WINGDIPAPI *FuncType_GdipSetClipRegion)(GpGraphics *graphics, GpRegion *region, CombineMode combineMode);
-typedef GpStatus (WINGDIPAPI *FuncType_GdipWidenPath)(GpPath *nativePath, GpPen *pen, GpMatrix *matrix, REAL flatness);
-typedef GpStatus (WINGDIPAPI *FuncType_GdipAddPathLine)(GpPath *path, REAL x1, REAL y1, REAL x2, REAL y2);
-typedef GpStatus (WINGDIPAPI *FuncType_GdipAddPathRectangle)(GpPath *path, REAL x, REAL y, REAL width, REAL height);
-typedef GpStatus (WINGDIPAPI *FuncType_GdipDeleteRegion)(GpRegion *region);
-typedef GpStatus (WINGDIPAPI *FuncType_GdipGetDC)(GpGraphics* graphics, HDC * hdc);
-typedef GpStatus (WINGDIPAPI *FuncType_GdipReleaseDC)(GpGraphics* graphics, HDC hdc);
-typedef GpStatus (WINGDIPAPI *FuncType_GdipSetPenLineCap197819)(GpPen *pen, GpLineCap startCap, GpLineCap endCap, GpDashCap dashCap);
-typedef GpStatus (WINGDIPAPI *FuncType_GdipSetPenDashOffset)(GpPen *pen, REAL offset);
-typedef GpStatus (WINGDIPAPI *FuncType_GdipResetPath)(GpPath *path);
-typedef GpStatus (WINGDIPAPI *FuncType_GdipCreateRegionPath)(GpPath *path, GpRegion **region);
-typedef GpStatus (WINGDIPAPI *FuncType_GdipCreateFont)(GDIPCONST GpFontFamily *fontFamily, REAL emSize, INT style, Unit unit, GpFont **font);
-typedef GpStatus (WINGDIPAPI *FuncType_GdipGetFontSize)(GpFont *font, REAL *size);
-typedef GpStatus (WINGDIPAPI *FuncType_GdipCreateFontFamilyFromName)(GDIPCONST WCHAR *name, GpFontCollection *fontCollection, GpFontFamily **FontFamily);
-typedef GpStatus (WINGDIPAPI *FuncType_GdipSetTextRenderingHint)(GpGraphics *graphics, TextRenderingHint mode);
-typedef GpStatus (WINGDIPAPI *FuncType_GdipDrawDriverString)(GpGraphics *graphics, GDIPCONST UINT16 *text, INT length, GDIPCONST GpFont *font, GDIPCONST GpBrush *brush, GDIPCONST PointF *positions, INT flags, GDIPCONST GpMatrix *matrix);
-typedef GpStatus (WINGDIPAPI *FuncType_GdipCreateMatrix2)(REAL m11, REAL m12, REAL m21, REAL m22, REAL dx, REAL dy, GpMatrix **matrix);
-typedef GpStatus (WINGDIPAPI *FuncType_GdipDeleteMatrix)(GpMatrix *matrix);
-typedef GpStatus (WINGDIPAPI *FuncType_GdipSetWorldTransform)(GpGraphics *graphics, GpMatrix *matrix);
-typedef GpStatus (WINGDIPAPI *FuncType_GdipResetWorldTransform)(GpGraphics *graphics);
-typedef GpStatus (WINGDIPAPI *FuncType_GdipDeleteFontFamily)(GpFontFamily *FontFamily);
-typedef GpStatus (WINGDIPAPI *FuncType_GdipDeleteFont)(GpFont* font);
-typedef GpStatus (WINGDIPAPI *FuncType_GdipNewPrivateFontCollection)(GpFontCollection** fontCollection);
-typedef GpStatus (WINGDIPAPI *FuncType_GdipDeletePrivateFontCollection)(GpFontCollection** fontCollection);
-typedef GpStatus (WINGDIPAPI *FuncType_GdipPrivateAddMemoryFont)(GpFontCollection* fontCollection, GDIPCONST void* memory, INT length);
-typedef GpStatus (WINGDIPAPI *FuncType_GdipGetFontCollectionFamilyList)(GpFontCollection* fontCollection, INT numSought, GpFontFamily* gpfamilies[], INT* numFound);
-typedef GpStatus (WINGDIPAPI *FuncType_GdipGetFontCollectionFamilyCount)(GpFontCollection* fontCollection, INT* numFound);
-typedef GpStatus (WINGDIPAPI *FuncType_GdipSetTextContrast)(GpGraphics *graphics, UINT contrast);
-typedef GpStatus (WINGDIPAPI *FuncType_GdipSetPixelOffsetMode)(GpGraphics* graphics, PixelOffsetMode pixelOffsetMode);
-typedef GpStatus (WINGDIPAPI *FuncType_GdipGetImageGraphicsContext)(GpImage *image, GpGraphics **graphics);
-typedef GpStatus (WINGDIPAPI *FuncType_GdipDrawImageI)(GpGraphics *graphics, GpImage *image, INT x, INT y);
-typedef GpStatus (WINGDIPAPI *FuncType_GdipDrawImageRectI)(GpGraphics *graphics, GpImage *image, INT x, INT y, INT width, INT height);
-typedef GpStatus (WINGDIPAPI *FuncType_GdipDrawString)(GpGraphics *graphics, GDIPCONST WCHAR *string, INT length, GDIPCONST GpFont *font, GDIPCONST RectF *layoutRect, GDIPCONST GpStringFormat *stringFormat, GDIPCONST GpBrush *brush);
-typedef GpStatus (WINGDIPAPI *FuncType_GdipSetPenTransform)(GpPen *pen, GpMatrix *matrix);
-#define CallFunc(funcname) ((FuncType_##funcname)GdiplusExt.m_Functions[FuncId_##funcname])
-typedef HANDLE (__stdcall *FuncType_GdiAddFontMemResourceEx)(PVOID pbFont, DWORD cbFont, PVOID pdv, DWORD *pcFonts);
-typedef BOOL (__stdcall *FuncType_GdiRemoveFontMemResourceEx)(HANDLE handle);
-void* CGdiplusExt::GdiAddFontMemResourceEx(void *pFontdata, FX_DWORD size, void* pdv, FX_DWORD* num_face)
-{
- if (m_pGdiAddFontMemResourceEx) {
- return ((FuncType_GdiAddFontMemResourceEx)m_pGdiAddFontMemResourceEx)((PVOID)pFontdata, (DWORD)size, (PVOID)pdv, (DWORD*)num_face);
- }
- return NULL;
+typedef GpStatus(WINGDIPAPI* FuncType_GdipCreatePath2)(GDIPCONST GpPointF*,
+ GDIPCONST BYTE*,
+ INT,
+ GpFillMode,
+ GpPath** path);
+typedef GpStatus(WINGDIPAPI* FuncType_GdipSetPenDashStyle)(
+ GpPen* pen,
+ GpDashStyle dashstyle);
+typedef GpStatus(WINGDIPAPI* FuncType_GdipSetPenDashArray)(GpPen* pen,
+ GDIPCONST REAL* dash,
+ INT count);
+typedef GpStatus(WINGDIPAPI* FuncType_GdipSetPenDashCap197819)(
+ GpPen* pen,
+ GpDashCap dashCap);
+typedef GpStatus(WINGDIPAPI* FuncType_GdipSetPenLineJoin)(GpPen* pen,
+ GpLineJoin lineJoin);
+typedef GpStatus(WINGDIPAPI* FuncType_GdipSetPenWidth)(GpPen* pen, REAL width);
+typedef GpStatus(WINGDIPAPI* FuncType_GdipCreateFromHDC)(HDC hdc,
+ GpGraphics** graphics);
+typedef GpStatus(WINGDIPAPI* FuncType_GdipSetPageUnit)(GpGraphics* graphics,
+ GpUnit unit);
+typedef GpStatus(WINGDIPAPI* FuncType_GdipSetSmoothingMode)(
+ GpGraphics* graphics,
+ SmoothingMode smoothingMode);
+typedef GpStatus(WINGDIPAPI* FuncType_GdipCreateSolidFill)(ARGB color,
+ GpSolidFill** brush);
+typedef GpStatus(WINGDIPAPI* FuncType_GdipFillPath)(GpGraphics* graphics,
+ GpBrush* brush,
+ GpPath* path);
+typedef GpStatus(WINGDIPAPI* FuncType_GdipDeleteBrush)(GpBrush* brush);
+typedef GpStatus(WINGDIPAPI* FuncType_GdipCreatePen1)(ARGB color,
+ REAL width,
+ GpUnit unit,
+ GpPen** pen);
+typedef GpStatus(WINGDIPAPI* FuncType_GdipSetPenMiterLimit)(GpPen* pen,
+ REAL miterLimit);
+typedef GpStatus(WINGDIPAPI* FuncType_GdipDrawPath)(GpGraphics* graphics,
+ GpPen* pen,
+ GpPath* path);
+typedef GpStatus(WINGDIPAPI* FuncType_GdipDeletePen)(GpPen* pen);
+typedef GpStatus(WINGDIPAPI* FuncType_GdipDeletePath)(GpPath* path);
+typedef GpStatus(WINGDIPAPI* FuncType_GdipDeleteGraphics)(GpGraphics* graphics);
+typedef GpStatus(WINGDIPAPI* FuncType_GdipCreateBitmapFromFileICM)(
+ GDIPCONST WCHAR* filename,
+ GpBitmap** bitmap);
+typedef GpStatus(WINGDIPAPI* FuncType_GdipCreateBitmapFromStreamICM)(
+ IStream* stream,
+ GpBitmap** bitmap);
+typedef GpStatus(WINGDIPAPI* FuncType_GdipGetImageWidth)(GpImage* image,
+ UINT* width);
+typedef GpStatus(WINGDIPAPI* FuncType_GdipGetImageHeight)(GpImage* image,
+ UINT* height);
+typedef GpStatus(WINGDIPAPI* FuncType_GdipGetImagePixelFormat)(
+ GpImage* image,
+ PixelFormat* format);
+typedef GpStatus(WINGDIPAPI* FuncType_GdipBitmapLockBits)(
+ GpBitmap* bitmap,
+ GDIPCONST GpRect* rect,
+ UINT flags,
+ PixelFormat format,
+ BitmapData* lockedBitmapData);
+typedef GpStatus(WINGDIPAPI* FuncType_GdipGetImagePalette)(
+ GpImage* image,
+ ColorPalette* palette,
+ INT size);
+typedef GpStatus(WINGDIPAPI* FuncType_GdipGetImagePaletteSize)(GpImage* image,
+ INT* size);
+typedef GpStatus(WINGDIPAPI* FuncType_GdipBitmapUnlockBits)(
+ GpBitmap* bitmap,
+ BitmapData* lockedBitmapData);
+typedef GpStatus(WINGDIPAPI* FuncType_GdipDisposeImage)(GpImage* image);
+typedef GpStatus(WINGDIPAPI* FuncType_GdipFillRectangle)(GpGraphics* graphics,
+ GpBrush* brush,
+ REAL x,
+ REAL y,
+ REAL width,
+ REAL height);
+typedef GpStatus(WINGDIPAPI* FuncType_GdipCreateBitmapFromScan0)(
+ INT width,
+ INT height,
+ INT stride,
+ PixelFormat format,
+ BYTE* scan0,
+ GpBitmap** bitmap);
+typedef GpStatus(WINGDIPAPI* FuncType_GdipSetImagePalette)(
+ GpImage* image,
+ GDIPCONST ColorPalette* palette);
+typedef GpStatus(WINGDIPAPI* FuncType_GdipSetInterpolationMode)(
+ GpGraphics* graphics,
+ InterpolationMode interpolationMode);
+typedef GpStatus(WINGDIPAPI* FuncType_GdipDrawImagePointsI)(
+ GpGraphics* graphics,
+ GpImage* image,
+ GDIPCONST GpPoint* dstpoints,
+ INT count);
+typedef GpStatus(WINGDIPAPI* FuncType_GdipCreateBitmapFromGdiDib)(
+ GDIPCONST BITMAPINFO* gdiBitmapInfo,
+ VOID* gdiBitmapData,
+ GpBitmap** bitmap);
+typedef Status(WINAPI* FuncType_GdiplusStartup)(
+ OUT uintptr_t* token,
+ const GdiplusStartupInput* input,
+ OUT GdiplusStartupOutput* output);
+typedef GpStatus(WINGDIPAPI* FuncType_GdipDrawLineI)(GpGraphics* graphics,
+ GpPen* pen,
+ int x1,
+ int y1,
+ int x2,
+ int y2);
+typedef GpStatus(WINGDIPAPI* FuncType_GdipResetClip)(GpGraphics* graphics);
+typedef GpStatus(WINGDIPAPI* FuncType_GdipCreatePath)(GpFillMode brushMode,
+ GpPath** path);
+typedef GpStatus(WINGDIPAPI* FuncType_GdipAddPathPath)(
+ GpPath* path,
+ GDIPCONST GpPath* addingPath,
+ BOOL connect);
+typedef GpStatus(WINGDIPAPI* FuncType_GdipSetPathFillMode)(GpPath* path,
+ GpFillMode fillmode);
+typedef GpStatus(WINGDIPAPI* FuncType_GdipSetClipPath)(GpGraphics* graphics,
+ GpPath* path,
+ CombineMode combineMode);
+typedef GpStatus(WINGDIPAPI* FuncType_GdipGetClip)(GpGraphics* graphics,
+ GpRegion* region);
+typedef GpStatus(WINGDIPAPI* FuncType_GdipCreateRegion)(GpRegion** region);
+typedef GpStatus(WINGDIPAPI* FuncType_GdipGetClipBoundsI)(GpGraphics* graphics,
+ GpRect* rect);
+typedef GpStatus(WINGDIPAPI* FuncType_GdipSetClipRegion)(
+ GpGraphics* graphics,
+ GpRegion* region,
+ CombineMode combineMode);
+typedef GpStatus(WINGDIPAPI* FuncType_GdipWidenPath)(GpPath* nativePath,
+ GpPen* pen,
+ GpMatrix* matrix,
+ REAL flatness);
+typedef GpStatus(WINGDIPAPI* FuncType_GdipAddPathLine)(GpPath* path,
+ REAL x1,
+ REAL y1,
+ REAL x2,
+ REAL y2);
+typedef GpStatus(WINGDIPAPI* FuncType_GdipAddPathRectangle)(GpPath* path,
+ REAL x,
+ REAL y,
+ REAL width,
+ REAL height);
+typedef GpStatus(WINGDIPAPI* FuncType_GdipDeleteRegion)(GpRegion* region);
+typedef GpStatus(WINGDIPAPI* FuncType_GdipGetDC)(GpGraphics* graphics,
+ HDC* hdc);
+typedef GpStatus(WINGDIPAPI* FuncType_GdipReleaseDC)(GpGraphics* graphics,
+ HDC hdc);
+typedef GpStatus(WINGDIPAPI* FuncType_GdipSetPenLineCap197819)(
+ GpPen* pen,
+ GpLineCap startCap,
+ GpLineCap endCap,
+ GpDashCap dashCap);
+typedef GpStatus(WINGDIPAPI* FuncType_GdipSetPenDashOffset)(GpPen* pen,
+ REAL offset);
+typedef GpStatus(WINGDIPAPI* FuncType_GdipResetPath)(GpPath* path);
+typedef GpStatus(WINGDIPAPI* FuncType_GdipCreateRegionPath)(GpPath* path,
+ GpRegion** region);
+typedef GpStatus(WINGDIPAPI* FuncType_GdipCreateFont)(
+ GDIPCONST GpFontFamily* fontFamily,
+ REAL emSize,
+ INT style,
+ Unit unit,
+ GpFont** font);
+typedef GpStatus(WINGDIPAPI* FuncType_GdipGetFontSize)(GpFont* font,
+ REAL* size);
+typedef GpStatus(WINGDIPAPI* FuncType_GdipCreateFontFamilyFromName)(
+ GDIPCONST WCHAR* name,
+ GpFontCollection* fontCollection,
+ GpFontFamily** FontFamily);
+typedef GpStatus(WINGDIPAPI* FuncType_GdipSetTextRenderingHint)(
+ GpGraphics* graphics,
+ TextRenderingHint mode);
+typedef GpStatus(WINGDIPAPI* FuncType_GdipDrawDriverString)(
+ GpGraphics* graphics,
+ GDIPCONST UINT16* text,
+ INT length,
+ GDIPCONST GpFont* font,
+ GDIPCONST GpBrush* brush,
+ GDIPCONST PointF* positions,
+ INT flags,
+ GDIPCONST GpMatrix* matrix);
+typedef GpStatus(WINGDIPAPI* FuncType_GdipCreateMatrix2)(REAL m11,
+ REAL m12,
+ REAL m21,
+ REAL m22,
+ REAL dx,
+ REAL dy,
+ GpMatrix** matrix);
+typedef GpStatus(WINGDIPAPI* FuncType_GdipDeleteMatrix)(GpMatrix* matrix);
+typedef GpStatus(WINGDIPAPI* FuncType_GdipSetWorldTransform)(
+ GpGraphics* graphics,
+ GpMatrix* matrix);
+typedef GpStatus(WINGDIPAPI* FuncType_GdipResetWorldTransform)(
+ GpGraphics* graphics);
+typedef GpStatus(WINGDIPAPI* FuncType_GdipDeleteFontFamily)(
+ GpFontFamily* FontFamily);
+typedef GpStatus(WINGDIPAPI* FuncType_GdipDeleteFont)(GpFont* font);
+typedef GpStatus(WINGDIPAPI* FuncType_GdipNewPrivateFontCollection)(
+ GpFontCollection** fontCollection);
+typedef GpStatus(WINGDIPAPI* FuncType_GdipDeletePrivateFontCollection)(
+ GpFontCollection** fontCollection);
+typedef GpStatus(WINGDIPAPI* FuncType_GdipPrivateAddMemoryFont)(
+ GpFontCollection* fontCollection,
+ GDIPCONST void* memory,
+ INT length);
+typedef GpStatus(WINGDIPAPI* FuncType_GdipGetFontCollectionFamilyList)(
+ GpFontCollection* fontCollection,
+ INT numSought,
+ GpFontFamily* gpfamilies[],
+ INT* numFound);
+typedef GpStatus(WINGDIPAPI* FuncType_GdipGetFontCollectionFamilyCount)(
+ GpFontCollection* fontCollection,
+ INT* numFound);
+typedef GpStatus(WINGDIPAPI* FuncType_GdipSetTextContrast)(GpGraphics* graphics,
+ UINT contrast);
+typedef GpStatus(WINGDIPAPI* FuncType_GdipSetPixelOffsetMode)(
+ GpGraphics* graphics,
+ PixelOffsetMode pixelOffsetMode);
+typedef GpStatus(WINGDIPAPI* FuncType_GdipGetImageGraphicsContext)(
+ GpImage* image,
+ GpGraphics** graphics);
+typedef GpStatus(WINGDIPAPI* FuncType_GdipDrawImageI)(GpGraphics* graphics,
+ GpImage* image,
+ INT x,
+ INT y);
+typedef GpStatus(WINGDIPAPI* FuncType_GdipDrawImageRectI)(GpGraphics* graphics,
+ GpImage* image,
+ INT x,
+ INT y,
+ INT width,
+ INT height);
+typedef GpStatus(WINGDIPAPI* FuncType_GdipDrawString)(
+ GpGraphics* graphics,
+ GDIPCONST WCHAR* string,
+ INT length,
+ GDIPCONST GpFont* font,
+ GDIPCONST RectF* layoutRect,
+ GDIPCONST GpStringFormat* stringFormat,
+ GDIPCONST GpBrush* brush);
+typedef GpStatus(WINGDIPAPI* FuncType_GdipSetPenTransform)(GpPen* pen,
+ GpMatrix* matrix);
+#define CallFunc(funcname) \
+ ((FuncType_##funcname)GdiplusExt.m_Functions[FuncId_##funcname])
+typedef HANDLE(__stdcall* FuncType_GdiAddFontMemResourceEx)(PVOID pbFont,
+ DWORD cbFont,
+ PVOID pdv,
+ DWORD* pcFonts);
+typedef BOOL(__stdcall* FuncType_GdiRemoveFontMemResourceEx)(HANDLE handle);
+void* CGdiplusExt::GdiAddFontMemResourceEx(void* pFontdata,
+ FX_DWORD size,
+ void* pdv,
+ FX_DWORD* num_face) {
+ if (m_pGdiAddFontMemResourceEx) {
+ return ((FuncType_GdiAddFontMemResourceEx)m_pGdiAddFontMemResourceEx)(
+ (PVOID)pFontdata, (DWORD)size, (PVOID)pdv, (DWORD*)num_face);
+ }
+ return NULL;
}
-FX_BOOL CGdiplusExt::GdiRemoveFontMemResourceEx(void* handle)
-{
- if (m_pGdiRemoveFontMemResourseEx) {
- return ((FuncType_GdiRemoveFontMemResourceEx)m_pGdiRemoveFontMemResourseEx)((HANDLE)handle);
- }
- return FALSE;
+FX_BOOL CGdiplusExt::GdiRemoveFontMemResourceEx(void* handle) {
+ if (m_pGdiRemoveFontMemResourseEx) {
+ return ((FuncType_GdiRemoveFontMemResourceEx)m_pGdiRemoveFontMemResourseEx)(
+ (HANDLE)handle);
+ }
+ return FALSE;
}
-static GpBrush* _GdipCreateBrush(DWORD argb)
-{
- CGdiplusExt& GdiplusExt = ((CWin32Platform*)CFX_GEModule::Get()->GetPlatformData())->m_GdiplusExt;
- GpSolidFill* solidBrush = NULL;
- CallFunc(GdipCreateSolidFill)((ARGB)argb, &solidBrush);
- return solidBrush;
+static GpBrush* _GdipCreateBrush(DWORD argb) {
+ CGdiplusExt& GdiplusExt =
+ ((CWin32Platform*)CFX_GEModule::Get()->GetPlatformData())->m_GdiplusExt;
+ GpSolidFill* solidBrush = NULL;
+ CallFunc(GdipCreateSolidFill)((ARGB)argb, &solidBrush);
+ return solidBrush;
}
-static CFX_DIBitmap* _StretchMonoToGray(int dest_width, int dest_height,
- const CFX_DIBitmap* pSource, FX_RECT* pClipRect)
-{
- FX_BOOL bFlipX = dest_width < 0;
- if (bFlipX) {
- dest_width = -dest_width;
- }
- FX_BOOL bFlipY = dest_height < 0;
- if (bFlipY) {
- dest_height = -dest_height;
- }
- int result_width = pClipRect->Width();
- int result_height = pClipRect->Height();
- int result_pitch = (result_width + 3) / 4 * 4;
- CFX_DIBitmap* pStretched = new CFX_DIBitmap;
- if (!pStretched->Create(result_width, result_height, FXDIB_8bppRgb)) {
- delete pStretched;
- return NULL;
- }
- LPBYTE dest_buf = pStretched->GetBuffer();
- int src_width = pSource->GetWidth();
- int src_height = pSource->GetHeight();
- int src_count = src_width * src_height;
- int dest_count = dest_width * dest_height;
- int ratio = 255 * dest_count / src_count;
- int y_unit = src_height / dest_height;
- int x_unit = src_width / dest_width;
- int area_unit = y_unit * x_unit;
- LPBYTE src_buf = pSource->GetBuffer();
- int src_pitch = pSource->GetPitch();
- for (int dest_y = 0; dest_y < result_height; dest_y ++) {
- LPBYTE dest_scan = dest_buf + dest_y * result_pitch;
- int src_y_start = bFlipY ? (dest_height - 1 - dest_y - pClipRect->top) : (dest_y + pClipRect->top);
- src_y_start = src_y_start * src_height / dest_height;
- LPBYTE src_scan = src_buf + src_y_start * src_pitch;
- for (int dest_x = 0; dest_x < result_width; dest_x ++) {
- int sum = 0;
- int src_x_start = bFlipX ? (dest_width - 1 - dest_x - pClipRect->left) : (dest_x + pClipRect->left);
- src_x_start = src_x_start * src_width / dest_width;
- int src_x_end = src_x_start + x_unit;
- LPBYTE src_line = src_scan;
- for (int src_y = 0; src_y < y_unit; src_y ++) {
- for (int src_x = src_x_start; src_x < src_x_end; src_x ++) {
- if (!(src_line[src_x / 8] & (1 << (7 - src_x % 8)))) {
- sum += 255;
- }
- }
- src_line += src_pitch;
- }
- dest_scan[dest_x] = 255 - sum / area_unit;
+static CFX_DIBitmap* _StretchMonoToGray(int dest_width,
+ int dest_height,
+ const CFX_DIBitmap* pSource,
+ FX_RECT* pClipRect) {
+ FX_BOOL bFlipX = dest_width < 0;
+ if (bFlipX) {
+ dest_width = -dest_width;
+ }
+ FX_BOOL bFlipY = dest_height < 0;
+ if (bFlipY) {
+ dest_height = -dest_height;
+ }
+ int result_width = pClipRect->Width();
+ int result_height = pClipRect->Height();
+ int result_pitch = (result_width + 3) / 4 * 4;
+ CFX_DIBitmap* pStretched = new CFX_DIBitmap;
+ if (!pStretched->Create(result_width, result_height, FXDIB_8bppRgb)) {
+ delete pStretched;
+ return NULL;
+ }
+ LPBYTE dest_buf = pStretched->GetBuffer();
+ int src_width = pSource->GetWidth();
+ int src_height = pSource->GetHeight();
+ int src_count = src_width * src_height;
+ int dest_count = dest_width * dest_height;
+ int ratio = 255 * dest_count / src_count;
+ int y_unit = src_height / dest_height;
+ int x_unit = src_width / dest_width;
+ int area_unit = y_unit * x_unit;
+ LPBYTE src_buf = pSource->GetBuffer();
+ int src_pitch = pSource->GetPitch();
+ for (int dest_y = 0; dest_y < result_height; dest_y++) {
+ LPBYTE dest_scan = dest_buf + dest_y * result_pitch;
+ int src_y_start = bFlipY ? (dest_height - 1 - dest_y - pClipRect->top)
+ : (dest_y + pClipRect->top);
+ src_y_start = src_y_start * src_height / dest_height;
+ LPBYTE src_scan = src_buf + src_y_start * src_pitch;
+ for (int dest_x = 0; dest_x < result_width; dest_x++) {
+ int sum = 0;
+ int src_x_start = bFlipX ? (dest_width - 1 - dest_x - pClipRect->left)
+ : (dest_x + pClipRect->left);
+ src_x_start = src_x_start * src_width / dest_width;
+ int src_x_end = src_x_start + x_unit;
+ LPBYTE src_line = src_scan;
+ for (int src_y = 0; src_y < y_unit; src_y++) {
+ for (int src_x = src_x_start; src_x < src_x_end; src_x++) {
+ if (!(src_line[src_x / 8] & (1 << (7 - src_x % 8)))) {
+ sum += 255;
+ }
}
+ src_line += src_pitch;
+ }
+ dest_scan[dest_x] = 255 - sum / area_unit;
}
- return pStretched;
+ }
+ return pStretched;
}
-static void OutputImageMask(GpGraphics* pGraphics, BOOL bMonoDevice, const CFX_DIBitmap* pBitmap, int dest_left, int dest_top,
- int dest_width, int dest_height, FX_ARGB argb, const FX_RECT* pClipRect)
-{
- ASSERT(pBitmap->GetBPP() == 1);
- CGdiplusExt& GdiplusExt = ((CWin32Platform*)CFX_GEModule::Get()->GetPlatformData())->m_GdiplusExt;
- int src_width = pBitmap->GetWidth(), src_height = pBitmap->GetHeight();
- int src_pitch = pBitmap->GetPitch();
- uint8_t* scan0 = pBitmap->GetBuffer();
- if (src_width == 1 && src_height == 1) {
- if ((scan0[0] & 0x80) == 0) {
- return;
- }
- GpSolidFill* solidBrush;
- CallFunc(GdipCreateSolidFill)((ARGB)argb, &solidBrush);
- if (dest_width < 0) {
- dest_width = -dest_width;
- dest_left -= dest_width;
- }
- if (dest_height < 0) {
- dest_height = -dest_height;
- dest_top -= dest_height;
- }
- CallFunc(GdipFillRectangle)(pGraphics, solidBrush, (float)dest_left, (float)dest_top,
- (float)dest_width, (float)dest_height);
- CallFunc(GdipDeleteBrush)(solidBrush);
- return;
- }
- if (!bMonoDevice && abs(dest_width) < src_width && abs(dest_height) < src_height) {
- FX_RECT image_rect(dest_left, dest_top, dest_left + dest_width, dest_top + dest_height);
- image_rect.Normalize();
- FX_RECT image_clip = image_rect;
- image_clip.Intersect(*pClipRect);
- if (image_clip.IsEmpty()) {
- return;
- }
- image_clip.Offset(-image_rect.left, -image_rect.top);
- CFX_DIBitmap* pStretched = NULL;
- if (src_width * src_height > 10000) {
- pStretched = _StretchMonoToGray(dest_width, dest_height, pBitmap, &image_clip);
- } else {
- pStretched = pBitmap->StretchTo(dest_width, dest_height, FALSE, &image_clip);
- }
- GpBitmap* bitmap;
- CallFunc(GdipCreateBitmapFromScan0)(image_clip.Width(), image_clip.Height(),
- (image_clip.Width() + 3) / 4 * 4, PixelFormat8bppIndexed, pStretched->GetBuffer(), &bitmap);
- int a, r, g, b;
- ArgbDecode(argb, a, r, g, b);
- UINT pal[258];
- pal[0] = 0;
- pal[1] = 256;
- for (int i = 0; i < 256; i ++) {
- pal[i + 2] = ArgbEncode(i * a / 255, r, g, b);
- }
- CallFunc(GdipSetImagePalette)(bitmap, (ColorPalette*)pal);
- CallFunc(GdipDrawImageI)(pGraphics, bitmap, image_rect.left + image_clip.left,
- image_rect.top + image_clip.top);
- CallFunc(GdipDisposeImage)(bitmap);
- delete pStretched;
- return;
- }
- GpBitmap* bitmap;
- CallFunc(GdipCreateBitmapFromScan0)(src_width, src_height, src_pitch, PixelFormat1bppIndexed, scan0, &bitmap);
- UINT palette[4] = { PaletteFlagsHasAlpha, 2, 0, argb };
- CallFunc(GdipSetImagePalette)(bitmap, (ColorPalette*)palette);
- Point destinationPoints[] = {
- Point(dest_left, dest_top),
- Point(dest_left + dest_width, dest_top),
- Point(dest_left, dest_top + dest_height)
- };
- CallFunc(GdipDrawImagePointsI)(pGraphics, bitmap, destinationPoints, 3);
- CallFunc(GdipDisposeImage)(bitmap);
-}
-static void OutputImage(GpGraphics* pGraphics, const CFX_DIBitmap* pBitmap, const FX_RECT* pSrcRect,
- int dest_left, int dest_top, int dest_width, int dest_height)
-{
- int src_width = pSrcRect->Width(), src_height = pSrcRect->Height();
- CGdiplusExt& GdiplusExt = ((CWin32Platform*)CFX_GEModule::Get()->GetPlatformData())->m_GdiplusExt;
- if (pBitmap->GetBPP() == 1 && (pSrcRect->left % 8)) {
- FX_RECT new_rect(0, 0, src_width, src_height);
- CFX_DIBitmap* pCloned = pBitmap->Clone(pSrcRect);
- if (!pCloned) {
- return;
- }
- OutputImage(pGraphics, pCloned, &new_rect, dest_left, dest_top, dest_width, dest_height);
- delete pCloned;
- return;
- }
- int src_pitch = pBitmap->GetPitch();
- uint8_t* scan0 = pBitmap->GetBuffer() + pSrcRect->top * src_pitch + pBitmap->GetBPP() * pSrcRect->left / 8;
- GpBitmap* bitmap = NULL;
- switch (pBitmap->GetFormat()) {
- case FXDIB_Argb:
- CallFunc(GdipCreateBitmapFromScan0)(src_width, src_height, src_pitch,
- PixelFormat32bppARGB, scan0, &bitmap);
- break;
- case FXDIB_Rgb32:
- CallFunc(GdipCreateBitmapFromScan0)(src_width, src_height, src_pitch,
- PixelFormat32bppRGB, scan0, &bitmap);
- break;
- case FXDIB_Rgb:
- CallFunc(GdipCreateBitmapFromScan0)(src_width, src_height, src_pitch,
- PixelFormat24bppRGB, scan0, &bitmap);
- break;
- case FXDIB_8bppRgb: {
- CallFunc(GdipCreateBitmapFromScan0)(src_width, src_height, src_pitch,
- PixelFormat8bppIndexed, scan0, &bitmap);
- UINT pal[258];
- pal[0] = 0;
- pal[1] = 256;
- for (int i = 0; i < 256; i ++) {
- pal[i + 2] = pBitmap->GetPaletteEntry(i);
- }
- CallFunc(GdipSetImagePalette)(bitmap, (ColorPalette*)pal);
- break;
- }
- case FXDIB_1bppRgb: {
- CallFunc(GdipCreateBitmapFromScan0)(src_width, src_height, src_pitch,
- PixelFormat1bppIndexed, scan0, &bitmap);
- break;
- }
+static void OutputImageMask(GpGraphics* pGraphics,
+ BOOL bMonoDevice,
+ const CFX_DIBitmap* pBitmap,
+ int dest_left,
+ int dest_top,
+ int dest_width,
+ int dest_height,
+ FX_ARGB argb,
+ const FX_RECT* pClipRect) {
+ ASSERT(pBitmap->GetBPP() == 1);
+ CGdiplusExt& GdiplusExt =
+ ((CWin32Platform*)CFX_GEModule::Get()->GetPlatformData())->m_GdiplusExt;
+ int src_width = pBitmap->GetWidth(), src_height = pBitmap->GetHeight();
+ int src_pitch = pBitmap->GetPitch();
+ uint8_t* scan0 = pBitmap->GetBuffer();
+ if (src_width == 1 && src_height == 1) {
+ if ((scan0[0] & 0x80) == 0) {
+ return;
+ }
+ GpSolidFill* solidBrush;
+ CallFunc(GdipCreateSolidFill)((ARGB)argb, &solidBrush);
+ if (dest_width < 0) {
+ dest_width = -dest_width;
+ dest_left -= dest_width;
}
if (dest_height < 0) {
- dest_height --;
- }
- if (dest_width < 0) {
- dest_width --;
+ dest_height = -dest_height;
+ dest_top -= dest_height;
+ }
+ CallFunc(GdipFillRectangle)(pGraphics, solidBrush, (float)dest_left,
+ (float)dest_top, (float)dest_width,
+ (float)dest_height);
+ CallFunc(GdipDeleteBrush)(solidBrush);
+ return;
+ }
+ if (!bMonoDevice && abs(dest_width) < src_width &&
+ abs(dest_height) < src_height) {
+ FX_RECT image_rect(dest_left, dest_top, dest_left + dest_width,
+ dest_top + dest_height);
+ image_rect.Normalize();
+ FX_RECT image_clip = image_rect;
+ image_clip.Intersect(*pClipRect);
+ if (image_clip.IsEmpty()) {
+ return;
+ }
+ image_clip.Offset(-image_rect.left, -image_rect.top);
+ CFX_DIBitmap* pStretched = NULL;
+ if (src_width * src_height > 10000) {
+ pStretched =
+ _StretchMonoToGray(dest_width, dest_height, pBitmap, &image_clip);
+ } else {
+ pStretched =
+ pBitmap->StretchTo(dest_width, dest_height, FALSE, &image_clip);
}
- Point destinationPoints[] = {
- Point(dest_left, dest_top),
- Point(dest_left + dest_width, dest_top),
- Point(dest_left, dest_top + dest_height)
- };
- CallFunc(GdipDrawImagePointsI)(pGraphics, bitmap, destinationPoints, 3);
+ GpBitmap* bitmap;
+ CallFunc(GdipCreateBitmapFromScan0)(image_clip.Width(), image_clip.Height(),
+ (image_clip.Width() + 3) / 4 * 4,
+ PixelFormat8bppIndexed,
+ pStretched->GetBuffer(), &bitmap);
+ int a, r, g, b;
+ ArgbDecode(argb, a, r, g, b);
+ UINT pal[258];
+ pal[0] = 0;
+ pal[1] = 256;
+ for (int i = 0; i < 256; i++) {
+ pal[i + 2] = ArgbEncode(i * a / 255, r, g, b);
+ }
+ CallFunc(GdipSetImagePalette)(bitmap, (ColorPalette*)pal);
+ CallFunc(GdipDrawImageI)(pGraphics, bitmap,
+ image_rect.left + image_clip.left,
+ image_rect.top + image_clip.top);
CallFunc(GdipDisposeImage)(bitmap);
+ delete pStretched;
+ return;
+ }
+ GpBitmap* bitmap;
+ CallFunc(GdipCreateBitmapFromScan0)(src_width, src_height, src_pitch,
+ PixelFormat1bppIndexed, scan0, &bitmap);
+ UINT palette[4] = {PaletteFlagsHasAlpha, 2, 0, argb};
+ CallFunc(GdipSetImagePalette)(bitmap, (ColorPalette*)palette);
+ Point destinationPoints[] = {Point(dest_left, dest_top),
+ Point(dest_left + dest_width, dest_top),
+ Point(dest_left, dest_top + dest_height)};
+ CallFunc(GdipDrawImagePointsI)(pGraphics, bitmap, destinationPoints, 3);
+ CallFunc(GdipDisposeImage)(bitmap);
}
-CGdiplusExt::CGdiplusExt()
-{
- m_hModule = NULL;
- m_GdiModule = NULL;
- for (int i = 0; i < sizeof g_GdipFuncNames / sizeof(LPCSTR); i ++) {
- m_Functions[i] = NULL;
- }
- m_pGdiAddFontMemResourceEx = NULL;
- m_pGdiRemoveFontMemResourseEx = NULL;
+static void OutputImage(GpGraphics* pGraphics,
+ const CFX_DIBitmap* pBitmap,
+ const FX_RECT* pSrcRect,
+ int dest_left,
+ int dest_top,
+ int dest_width,
+ int dest_height) {
+ int src_width = pSrcRect->Width(), src_height = pSrcRect->Height();
+ CGdiplusExt& GdiplusExt =
+ ((CWin32Platform*)CFX_GEModule::Get()->GetPlatformData())->m_GdiplusExt;
+ if (pBitmap->GetBPP() == 1 && (pSrcRect->left % 8)) {
+ FX_RECT new_rect(0, 0, src_width, src_height);
+ CFX_DIBitmap* pCloned = pBitmap->Clone(pSrcRect);
+ if (!pCloned) {
+ return;
+ }
+ OutputImage(pGraphics, pCloned, &new_rect, dest_left, dest_top, dest_width,
+ dest_height);
+ delete pCloned;
+ return;
+ }
+ int src_pitch = pBitmap->GetPitch();
+ uint8_t* scan0 = pBitmap->GetBuffer() + pSrcRect->top * src_pitch +
+ pBitmap->GetBPP() * pSrcRect->left / 8;
+ GpBitmap* bitmap = NULL;
+ switch (pBitmap->GetFormat()) {
+ case FXDIB_Argb:
+ CallFunc(GdipCreateBitmapFromScan0)(src_width, src_height, src_pitch,
+ PixelFormat32bppARGB, scan0, &bitmap);
+ break;
+ case FXDIB_Rgb32:
+ CallFunc(GdipCreateBitmapFromScan0)(src_width, src_height, src_pitch,
+ PixelFormat32bppRGB, scan0, &bitmap);
+ break;
+ case FXDIB_Rgb:
+ CallFunc(GdipCreateBitmapFromScan0)(src_width, src_height, src_pitch,
+ PixelFormat24bppRGB, scan0, &bitmap);
+ break;
+ case FXDIB_8bppRgb: {
+ CallFunc(GdipCreateBitmapFromScan0)(src_width, src_height, src_pitch,
+ PixelFormat8bppIndexed, scan0,
+ &bitmap);
+ UINT pal[258];
+ pal[0] = 0;
+ pal[1] = 256;
+ for (int i = 0; i < 256; i++) {
+ pal[i + 2] = pBitmap->GetPaletteEntry(i);
+ }
+ CallFunc(GdipSetImagePalette)(bitmap, (ColorPalette*)pal);
+ break;
+ }
+ case FXDIB_1bppRgb: {
+ CallFunc(GdipCreateBitmapFromScan0)(src_width, src_height, src_pitch,
+ PixelFormat1bppIndexed, scan0,
+ &bitmap);
+ break;
+ }
+ }
+ if (dest_height < 0) {
+ dest_height--;
+ }
+ if (dest_width < 0) {
+ dest_width--;
+ }
+ Point destinationPoints[] = {Point(dest_left, dest_top),
+ Point(dest_left + dest_width, dest_top),
+ Point(dest_left, dest_top + dest_height)};
+ CallFunc(GdipDrawImagePointsI)(pGraphics, bitmap, destinationPoints, 3);
+ CallFunc(GdipDisposeImage)(bitmap);
}
-void CGdiplusExt::Load()
-{
- CFX_ByteString strPlusPath = "";
- FX_CHAR buf[MAX_PATH];
- GetSystemDirectoryA(buf, MAX_PATH);
- strPlusPath += buf;
- strPlusPath += "\\";
- strPlusPath += "GDIPLUS.DLL";
- m_hModule = LoadLibraryA(strPlusPath);
- if (m_hModule == NULL) {
- return;
- }
- for (int i = 0; i < sizeof g_GdipFuncNames / sizeof(LPCSTR); i ++) {
- m_Functions[i] = GetProcAddress(m_hModule, g_GdipFuncNames[i]);
- if (m_Functions[i] == NULL) {
- m_hModule = NULL;
- return;
- }
- }
- uintptr_t gdiplusToken;
- GdiplusStartupInput gdiplusStartupInput;
- ((FuncType_GdiplusStartup)m_Functions[FuncId_GdiplusStartup])(&gdiplusToken, &gdiplusStartupInput, NULL);
- m_GdiModule = LoadLibraryA("GDI32.DLL");
- if (m_GdiModule == NULL) {
- return;
- }
- m_pGdiAddFontMemResourceEx = GetProcAddress(m_GdiModule, "AddFontMemResourceEx");
- m_pGdiRemoveFontMemResourseEx = GetProcAddress(m_GdiModule, "RemoveFontMemResourceEx");
+CGdiplusExt::CGdiplusExt() {
+ m_hModule = NULL;
+ m_GdiModule = NULL;
+ for (int i = 0; i < sizeof g_GdipFuncNames / sizeof(LPCSTR); i++) {
+ m_Functions[i] = NULL;
+ }
+ m_pGdiAddFontMemResourceEx = NULL;
+ m_pGdiRemoveFontMemResourseEx = NULL;
}
-CGdiplusExt::~CGdiplusExt()
-{
+void CGdiplusExt::Load() {
+ CFX_ByteString strPlusPath = "";
+ FX_CHAR buf[MAX_PATH];
+ GetSystemDirectoryA(buf, MAX_PATH);
+ strPlusPath += buf;
+ strPlusPath += "\\";
+ strPlusPath += "GDIPLUS.DLL";
+ m_hModule = LoadLibraryA(strPlusPath);
+ if (m_hModule == NULL) {
+ return;
+ }
+ for (int i = 0; i < sizeof g_GdipFuncNames / sizeof(LPCSTR); i++) {
+ m_Functions[i] = GetProcAddress(m_hModule, g_GdipFuncNames[i]);
+ if (m_Functions[i] == NULL) {
+ m_hModule = NULL;
+ return;
+ }
+ }
+ uintptr_t gdiplusToken;
+ GdiplusStartupInput gdiplusStartupInput;
+ ((FuncType_GdiplusStartup)m_Functions[FuncId_GdiplusStartup])(
+ &gdiplusToken, &gdiplusStartupInput, NULL);
+ m_GdiModule = LoadLibraryA("GDI32.DLL");
+ if (m_GdiModule == NULL) {
+ return;
+ }
+ m_pGdiAddFontMemResourceEx =
+ GetProcAddress(m_GdiModule, "AddFontMemResourceEx");
+ m_pGdiRemoveFontMemResourseEx =
+ GetProcAddress(m_GdiModule, "RemoveFontMemResourceEx");
}
-LPVOID CGdiplusExt::LoadMemFont(LPBYTE pData, FX_DWORD size)
-{
- GpFontCollection* pCollection = NULL;
- CGdiplusExt& GdiplusExt = ((CWin32Platform*)CFX_GEModule::Get()->GetPlatformData())->m_GdiplusExt;
- CallFunc(GdipNewPrivateFontCollection)(&pCollection);
- GpStatus status = CallFunc(GdipPrivateAddMemoryFont)(pCollection, pData, size);
- if (status == Ok) {
- return pCollection;
- }
- CallFunc(GdipDeletePrivateFontCollection)(&pCollection);
- return NULL;
+CGdiplusExt::~CGdiplusExt() {}
+LPVOID CGdiplusExt::LoadMemFont(LPBYTE pData, FX_DWORD size) {
+ GpFontCollection* pCollection = NULL;
+ CGdiplusExt& GdiplusExt =
+ ((CWin32Platform*)CFX_GEModule::Get()->GetPlatformData())->m_GdiplusExt;
+ CallFunc(GdipNewPrivateFontCollection)(&pCollection);
+ GpStatus status =
+ CallFunc(GdipPrivateAddMemoryFont)(pCollection, pData, size);
+ if (status == Ok) {
+ return pCollection;
+ }
+ CallFunc(GdipDeletePrivateFontCollection)(&pCollection);
+ return NULL;
}
-void CGdiplusExt::DeleteMemFont(LPVOID pCollection)
-{
- CGdiplusExt& GdiplusExt = ((CWin32Platform*)CFX_GEModule::Get()->GetPlatformData())->m_GdiplusExt;
- CallFunc(GdipDeletePrivateFontCollection)((GpFontCollection**)&pCollection);
+void CGdiplusExt::DeleteMemFont(LPVOID pCollection) {
+ CGdiplusExt& GdiplusExt =
+ ((CWin32Platform*)CFX_GEModule::Get()->GetPlatformData())->m_GdiplusExt;
+ CallFunc(GdipDeletePrivateFontCollection)((GpFontCollection**)&pCollection);
}
-FX_BOOL CGdiplusExt::GdipCreateBitmap(CFX_DIBitmap* pBitmap, void**bitmap)
-{
- CGdiplusExt& GdiplusExt = ((CWin32Platform*)CFX_GEModule::Get()->GetPlatformData())->m_GdiplusExt;
- PixelFormat format;
- switch (pBitmap->GetFormat()) {
- case FXDIB_Rgb:
- format = PixelFormat24bppRGB;
- break;
- case FXDIB_Rgb32:
- format = PixelFormat32bppRGB;
- break;
- case FXDIB_Argb:
- format = PixelFormat32bppARGB;
- break;
- default:
- return FALSE;
- }
- GpStatus status = CallFunc(GdipCreateBitmapFromScan0)(pBitmap->GetWidth(), pBitmap->GetHeight(),
- pBitmap->GetPitch(), format, pBitmap->GetBuffer(), (GpBitmap**)bitmap);
- if (status == Ok) {
- return TRUE;
- }
- return FALSE;
+FX_BOOL CGdiplusExt::GdipCreateBitmap(CFX_DIBitmap* pBitmap, void** bitmap) {
+ CGdiplusExt& GdiplusExt =
+ ((CWin32Platform*)CFX_GEModule::Get()->GetPlatformData())->m_GdiplusExt;
+ PixelFormat format;
+ switch (pBitmap->GetFormat()) {
+ case FXDIB_Rgb:
+ format = PixelFormat24bppRGB;
+ break;
+ case FXDIB_Rgb32:
+ format = PixelFormat32bppRGB;
+ break;
+ case FXDIB_Argb:
+ format = PixelFormat32bppARGB;
+ break;
+ default:
+ return FALSE;
+ }
+ GpStatus status = CallFunc(GdipCreateBitmapFromScan0)(
+ pBitmap->GetWidth(), pBitmap->GetHeight(), pBitmap->GetPitch(), format,
+ pBitmap->GetBuffer(), (GpBitmap**)bitmap);
+ if (status == Ok) {
+ return TRUE;
+ }
+ return FALSE;
}
-FX_BOOL CGdiplusExt::GdipCreateFromImage(void* bitmap, void** graphics)
-{
- CGdiplusExt& GdiplusExt = ((CWin32Platform*)CFX_GEModule::Get()->GetPlatformData())->m_GdiplusExt;
- GpStatus status = CallFunc(GdipGetImageGraphicsContext)((GpBitmap*)bitmap, (GpGraphics**)graphics);
- if (status == Ok) {
- return TRUE;
- }
- return FALSE;
+FX_BOOL CGdiplusExt::GdipCreateFromImage(void* bitmap, void** graphics) {
+ CGdiplusExt& GdiplusExt =
+ ((CWin32Platform*)CFX_GEModule::Get()->GetPlatformData())->m_GdiplusExt;
+ GpStatus status = CallFunc(GdipGetImageGraphicsContext)(
+ (GpBitmap*)bitmap, (GpGraphics**)graphics);
+ if (status == Ok) {
+ return TRUE;
+ }
+ return FALSE;
}
-FX_BOOL CGdiplusExt::GdipCreateFontFamilyFromName(const FX_WCHAR* name, void* pFontCollection, void**pFamily)
-{
- CGdiplusExt& GdiplusExt = ((CWin32Platform*)CFX_GEModule::Get()->GetPlatformData())->m_GdiplusExt;
- GpStatus status = CallFunc(GdipCreateFontFamilyFromName)((GDIPCONST WCHAR *)name, (GpFontCollection*)pFontCollection, (GpFontFamily**)pFamily);
- if (status == Ok) {
- return TRUE;
- }
- return FALSE;
+FX_BOOL CGdiplusExt::GdipCreateFontFamilyFromName(const FX_WCHAR* name,
+ void* pFontCollection,
+ void** pFamily) {
+ CGdiplusExt& GdiplusExt =
+ ((CWin32Platform*)CFX_GEModule::Get()->GetPlatformData())->m_GdiplusExt;
+ GpStatus status = CallFunc(GdipCreateFontFamilyFromName)(
+ (GDIPCONST WCHAR*)name, (GpFontCollection*)pFontCollection,
+ (GpFontFamily**)pFamily);
+ if (status == Ok) {
+ return TRUE;
+ }
+ return FALSE;
}
-FX_BOOL CGdiplusExt::GdipCreateFontFromFamily(void* pFamily, FX_FLOAT font_size, int fontstyle, int flag, void** pFont)
-{
- CGdiplusExt& GdiplusExt = ((CWin32Platform*)CFX_GEModule::Get()->GetPlatformData())->m_GdiplusExt;
- GpStatus status = CallFunc(GdipCreateFont)((GpFontFamily*)pFamily, font_size, fontstyle, Unit(flag), (GpFont**)pFont);
- if (status == Ok) {
- return TRUE;
- }
- return FALSE;
+FX_BOOL CGdiplusExt::GdipCreateFontFromFamily(void* pFamily,
+ FX_FLOAT font_size,
+ int fontstyle,
+ int flag,
+ void** pFont) {
+ CGdiplusExt& GdiplusExt =
+ ((CWin32Platform*)CFX_GEModule::Get()->GetPlatformData())->m_GdiplusExt;
+ GpStatus status =
+ CallFunc(GdipCreateFont)((GpFontFamily*)pFamily, font_size, fontstyle,
+ Unit(flag), (GpFont**)pFont);
+ if (status == Ok) {
+ return TRUE;
+ }
+ return FALSE;
}
-void CGdiplusExt::GdipGetFontSize(void *pFont, FX_FLOAT *size)
-{
- REAL get_size;
- CGdiplusExt& GdiplusExt = ((CWin32Platform*)CFX_GEModule::Get()->GetPlatformData())->m_GdiplusExt;
- GpStatus status = CallFunc(GdipGetFontSize)((GpFont *)pFont, (REAL*)&get_size);
- if (status == Ok) {
- *size = (FX_FLOAT)get_size;
- } else {
- *size = 0;
- }
+void CGdiplusExt::GdipGetFontSize(void* pFont, FX_FLOAT* size) {
+ REAL get_size;
+ CGdiplusExt& GdiplusExt =
+ ((CWin32Platform*)CFX_GEModule::Get()->GetPlatformData())->m_GdiplusExt;
+ GpStatus status = CallFunc(GdipGetFontSize)((GpFont*)pFont, (REAL*)&get_size);
+ if (status == Ok) {
+ *size = (FX_FLOAT)get_size;
+ } else {
+ *size = 0;
+ }
}
-void CGdiplusExt::GdipSetTextRenderingHint(void* graphics, int mode)
-{
- CGdiplusExt& GdiplusExt = ((CWin32Platform*)CFX_GEModule::Get()->GetPlatformData())->m_GdiplusExt;
- CallFunc(GdipSetTextRenderingHint)((GpGraphics*)graphics, (TextRenderingHint)mode);
+void CGdiplusExt::GdipSetTextRenderingHint(void* graphics, int mode) {
+ CGdiplusExt& GdiplusExt =
+ ((CWin32Platform*)CFX_GEModule::Get()->GetPlatformData())->m_GdiplusExt;
+ CallFunc(GdipSetTextRenderingHint)((GpGraphics*)graphics,
+ (TextRenderingHint)mode);
}
-void CGdiplusExt::GdipSetPageUnit(void* graphics, FX_DWORD unit)
-{
- CGdiplusExt& GdiplusExt = ((CWin32Platform*)CFX_GEModule::Get()->GetPlatformData())->m_GdiplusExt;
- CallFunc(GdipSetPageUnit)((GpGraphics*)graphics, (GpUnit)unit);
+void CGdiplusExt::GdipSetPageUnit(void* graphics, FX_DWORD unit) {
+ CGdiplusExt& GdiplusExt =
+ ((CWin32Platform*)CFX_GEModule::Get()->GetPlatformData())->m_GdiplusExt;
+ CallFunc(GdipSetPageUnit)((GpGraphics*)graphics, (GpUnit)unit);
}
-FX_BOOL CGdiplusExt::GdipDrawDriverString(void *graphics, unsigned short *text, int length,
- void *font, void* brush, void *positions, int flags, const void *matrix)
-{
- CGdiplusExt& GdiplusExt = ((CWin32Platform*)CFX_GEModule::Get()->GetPlatformData())->m_GdiplusExt;
- GpStatus status = CallFunc(GdipDrawDriverString)((GpGraphics*)graphics, (GDIPCONST UINT16 *)text, (INT)length, (GDIPCONST GpFont *)font, (GDIPCONST GpBrush*)brush,
- (GDIPCONST PointF *)positions, (INT)flags, (GDIPCONST GpMatrix *)matrix);
- if (status == Ok) {
- return TRUE;
- }
- return FALSE;
+FX_BOOL CGdiplusExt::GdipDrawDriverString(void* graphics,
+ unsigned short* text,
+ int length,
+ void* font,
+ void* brush,
+ void* positions,
+ int flags,
+ const void* matrix) {
+ CGdiplusExt& GdiplusExt =
+ ((CWin32Platform*)CFX_GEModule::Get()->GetPlatformData())->m_GdiplusExt;
+ GpStatus status = CallFunc(GdipDrawDriverString)(
+ (GpGraphics*)graphics, (GDIPCONST UINT16*)text, (INT)length,
+ (GDIPCONST GpFont*)font, (GDIPCONST GpBrush*)brush,
+ (GDIPCONST PointF*)positions, (INT)flags, (GDIPCONST GpMatrix*)matrix);
+ if (status == Ok) {
+ return TRUE;
+ }
+ return FALSE;
}
-void CGdiplusExt::GdipCreateBrush(FX_DWORD fill_argb, void** pBrush)
-{
- CGdiplusExt& GdiplusExt = ((CWin32Platform*)CFX_GEModule::Get()->GetPlatformData())->m_GdiplusExt;
- CallFunc(GdipCreateSolidFill)((ARGB)fill_argb, (GpSolidFill**)pBrush);
+void CGdiplusExt::GdipCreateBrush(FX_DWORD fill_argb, void** pBrush) {
+ CGdiplusExt& GdiplusExt =
+ ((CWin32Platform*)CFX_GEModule::Get()->GetPlatformData())->m_GdiplusExt;
+ CallFunc(GdipCreateSolidFill)((ARGB)fill_argb, (GpSolidFill**)pBrush);
}
-void CGdiplusExt::GdipDeleteBrush(void* pBrush)
-{
- CGdiplusExt& GdiplusExt = ((CWin32Platform*)CFX_GEModule::Get()->GetPlatformData())->m_GdiplusExt;
- CallFunc(GdipDeleteBrush)((GpSolidFill*)pBrush);
+void CGdiplusExt::GdipDeleteBrush(void* pBrush) {
+ CGdiplusExt& GdiplusExt =
+ ((CWin32Platform*)CFX_GEModule::Get()->GetPlatformData())->m_GdiplusExt;
+ CallFunc(GdipDeleteBrush)((GpSolidFill*)pBrush);
}
-void* CGdiplusExt::GdipCreateFontFromCollection(void* pFontCollection, FX_FLOAT font_size, int fontstyle)
-{
- CGdiplusExt& GdiplusExt = ((CWin32Platform*)CFX_GEModule::Get()->GetPlatformData())->m_GdiplusExt;
- int numFamilies = 0;
- GpStatus status = CallFunc(GdipGetFontCollectionFamilyCount)((GpFontCollection*)pFontCollection, &numFamilies);
- if (status != Ok) {
- return NULL;
- }
- GpFontFamily* family_list[1];
- status = CallFunc(GdipGetFontCollectionFamilyList)((GpFontCollection*)pFontCollection, 1, family_list, &numFamilies);
- if (status != Ok) {
- return NULL;
- }
- GpFont* pFont = NULL;
- status = CallFunc(GdipCreateFont)(family_list[0], font_size, fontstyle, UnitPixel, &pFont);
- if (status != Ok) {
- return NULL;
- }
- return pFont;
+void* CGdiplusExt::GdipCreateFontFromCollection(void* pFontCollection,
+ FX_FLOAT font_size,
+ int fontstyle) {
+ CGdiplusExt& GdiplusExt =
+ ((CWin32Platform*)CFX_GEModule::Get()->GetPlatformData())->m_GdiplusExt;
+ int numFamilies = 0;
+ GpStatus status = CallFunc(GdipGetFontCollectionFamilyCount)(
+ (GpFontCollection*)pFontCollection, &numFamilies);
+ if (status != Ok) {
+ return NULL;
+ }
+ GpFontFamily* family_list[1];
+ status = CallFunc(GdipGetFontCollectionFamilyList)(
+ (GpFontCollection*)pFontCollection, 1, family_list, &numFamilies);
+ if (status != Ok) {
+ return NULL;
+ }
+ GpFont* pFont = NULL;
+ status = CallFunc(GdipCreateFont)(family_list[0], font_size, fontstyle,
+ UnitPixel, &pFont);
+ if (status != Ok) {
+ return NULL;
+ }
+ return pFont;
}
-void CGdiplusExt::GdipCreateMatrix(FX_FLOAT a, FX_FLOAT b, FX_FLOAT c, FX_FLOAT d, FX_FLOAT e, FX_FLOAT f, void** matrix)
-{
- CGdiplusExt& GdiplusExt = ((CWin32Platform*)CFX_GEModule::Get()->GetPlatformData())->m_GdiplusExt;
- CallFunc(GdipCreateMatrix2)(a, b, c, d, e, f, (GpMatrix**)matrix);
+void CGdiplusExt::GdipCreateMatrix(FX_FLOAT a,
+ FX_FLOAT b,
+ FX_FLOAT c,
+ FX_FLOAT d,
+ FX_FLOAT e,
+ FX_FLOAT f,
+ void** matrix) {
+ CGdiplusExt& GdiplusExt =
+ ((CWin32Platform*)CFX_GEModule::Get()->GetPlatformData())->m_GdiplusExt;
+ CallFunc(GdipCreateMatrix2)(a, b, c, d, e, f, (GpMatrix**)matrix);
}
-void CGdiplusExt::GdipDeleteMatrix(void* matrix)
-{
- CGdiplusExt& GdiplusExt = ((CWin32Platform*)CFX_GEModule::Get()->GetPlatformData())->m_GdiplusExt;
- CallFunc(GdipDeleteMatrix)((GpMatrix*)matrix);
+void CGdiplusExt::GdipDeleteMatrix(void* matrix) {
+ CGdiplusExt& GdiplusExt =
+ ((CWin32Platform*)CFX_GEModule::Get()->GetPlatformData())->m_GdiplusExt;
+ CallFunc(GdipDeleteMatrix)((GpMatrix*)matrix);
}
-void CGdiplusExt::GdipDeleteFontFamily(void* pFamily)
-{
- CGdiplusExt& GdiplusExt = ((CWin32Platform*)CFX_GEModule::Get()->GetPlatformData())->m_GdiplusExt;
- CallFunc(GdipDeleteFontFamily)((GpFontFamily*)pFamily);
+void CGdiplusExt::GdipDeleteFontFamily(void* pFamily) {
+ CGdiplusExt& GdiplusExt =
+ ((CWin32Platform*)CFX_GEModule::Get()->GetPlatformData())->m_GdiplusExt;
+ CallFunc(GdipDeleteFontFamily)((GpFontFamily*)pFamily);
}
-void CGdiplusExt::GdipDeleteFont(void* pFont)
-{
- CGdiplusExt& GdiplusExt = ((CWin32Platform*)CFX_GEModule::Get()->GetPlatformData())->m_GdiplusExt;
- CallFunc(GdipDeleteFont)((GpFont*)pFont);
+void CGdiplusExt::GdipDeleteFont(void* pFont) {
+ CGdiplusExt& GdiplusExt =
+ ((CWin32Platform*)CFX_GEModule::Get()->GetPlatformData())->m_GdiplusExt;
+ CallFunc(GdipDeleteFont)((GpFont*)pFont);
}
-void CGdiplusExt::GdipSetWorldTransform(void* graphics, void* pMatrix)
-{
- CGdiplusExt& GdiplusExt = ((CWin32Platform*)CFX_GEModule::Get()->GetPlatformData())->m_GdiplusExt;
- CallFunc(GdipSetWorldTransform)((GpGraphics*)graphics, (GpMatrix*)pMatrix);
+void CGdiplusExt::GdipSetWorldTransform(void* graphics, void* pMatrix) {
+ CGdiplusExt& GdiplusExt =
+ ((CWin32Platform*)CFX_GEModule::Get()->GetPlatformData())->m_GdiplusExt;
+ CallFunc(GdipSetWorldTransform)((GpGraphics*)graphics, (GpMatrix*)pMatrix);
}
-void CGdiplusExt::GdipDisposeImage(void* bitmap)
-{
- CGdiplusExt& GdiplusExt = ((CWin32Platform*)CFX_GEModule::Get()->GetPlatformData())->m_GdiplusExt;
- CallFunc(GdipDisposeImage)((GpBitmap*)bitmap);
+void CGdiplusExt::GdipDisposeImage(void* bitmap) {
+ CGdiplusExt& GdiplusExt =
+ ((CWin32Platform*)CFX_GEModule::Get()->GetPlatformData())->m_GdiplusExt;
+ CallFunc(GdipDisposeImage)((GpBitmap*)bitmap);
}
-void CGdiplusExt::GdipDeleteGraphics(void* graphics)
-{
- CGdiplusExt& GdiplusExt = ((CWin32Platform*)CFX_GEModule::Get()->GetPlatformData())->m_GdiplusExt;
- CallFunc(GdipDeleteGraphics)((GpGraphics*)graphics);
+void CGdiplusExt::GdipDeleteGraphics(void* graphics) {
+ CGdiplusExt& GdiplusExt =
+ ((CWin32Platform*)CFX_GEModule::Get()->GetPlatformData())->m_GdiplusExt;
+ CallFunc(GdipDeleteGraphics)((GpGraphics*)graphics);
}
-FX_BOOL CGdiplusExt::StretchBitMask(HDC hDC, BOOL bMonoDevice, const CFX_DIBitmap* pBitmap, int dest_left, int dest_top,
- int dest_width, int dest_height, FX_DWORD argb, const FX_RECT* pClipRect, int flags)
-{
- ASSERT(pBitmap->GetBPP() == 1);
- CGdiplusExt& GdiplusExt = ((CWin32Platform*)CFX_GEModule::Get()->GetPlatformData())->m_GdiplusExt;
- GpGraphics* pGraphics = NULL;
- CallFunc(GdipCreateFromHDC)(hDC, &pGraphics);
- CallFunc(GdipSetPageUnit)(pGraphics, UnitPixel);
- if (flags & FXDIB_NOSMOOTH) {
- CallFunc(GdipSetInterpolationMode)(pGraphics, InterpolationModeNearestNeighbor);
- } else {
- CallFunc(GdipSetInterpolationMode)(pGraphics, InterpolationModeHighQuality);
- }
- OutputImageMask(pGraphics, bMonoDevice, pBitmap, dest_left, dest_top, dest_width, dest_height, argb, pClipRect);
- CallFunc(GdipDeleteGraphics)(pGraphics);
- return TRUE;
+FX_BOOL CGdiplusExt::StretchBitMask(HDC hDC,
+ BOOL bMonoDevice,
+ const CFX_DIBitmap* pBitmap,
+ int dest_left,
+ int dest_top,
+ int dest_width,
+ int dest_height,
+ FX_DWORD argb,
+ const FX_RECT* pClipRect,
+ int flags) {
+ ASSERT(pBitmap->GetBPP() == 1);
+ CGdiplusExt& GdiplusExt =
+ ((CWin32Platform*)CFX_GEModule::Get()->GetPlatformData())->m_GdiplusExt;
+ GpGraphics* pGraphics = NULL;
+ CallFunc(GdipCreateFromHDC)(hDC, &pGraphics);
+ CallFunc(GdipSetPageUnit)(pGraphics, UnitPixel);
+ if (flags & FXDIB_NOSMOOTH) {
+ CallFunc(GdipSetInterpolationMode)(pGraphics,
+ InterpolationModeNearestNeighbor);
+ } else {
+ CallFunc(GdipSetInterpolationMode)(pGraphics, InterpolationModeHighQuality);
+ }
+ OutputImageMask(pGraphics, bMonoDevice, pBitmap, dest_left, dest_top,
+ dest_width, dest_height, argb, pClipRect);
+ CallFunc(GdipDeleteGraphics)(pGraphics);
+ return TRUE;
}
-FX_BOOL CGdiplusExt::StretchDIBits(HDC hDC, const CFX_DIBitmap* pBitmap, int dest_left, int dest_top,
- int dest_width, int dest_height, const FX_RECT* pClipRect, int flags)
-{
- GpGraphics* pGraphics;
- CGdiplusExt& GdiplusExt = ((CWin32Platform*)CFX_GEModule::Get()->GetPlatformData())->m_GdiplusExt;
- CallFunc(GdipCreateFromHDC)(hDC, &pGraphics);
- CallFunc(GdipSetPageUnit)(pGraphics, UnitPixel);
- if (flags & FXDIB_NOSMOOTH) {
- CallFunc(GdipSetInterpolationMode)(pGraphics, InterpolationModeNearestNeighbor);
- } else if (pBitmap->GetWidth() > abs(dest_width) / 2 || pBitmap->GetHeight() > abs(dest_height) / 2) {
- CallFunc(GdipSetInterpolationMode)(pGraphics, InterpolationModeHighQuality);
- } else {
- CallFunc(GdipSetInterpolationMode)(pGraphics, InterpolationModeBilinear);
- }
- FX_RECT src_rect(0, 0, pBitmap->GetWidth(), pBitmap->GetHeight());
- OutputImage(pGraphics, pBitmap, &src_rect, dest_left, dest_top, dest_width, dest_height);
- CallFunc(GdipDeleteGraphics)(pGraphics);
- CallFunc(GdipDeleteGraphics)(pGraphics);
- return TRUE;
+FX_BOOL CGdiplusExt::StretchDIBits(HDC hDC,
+ const CFX_DIBitmap* pBitmap,
+ int dest_left,
+ int dest_top,
+ int dest_width,
+ int dest_height,
+ const FX_RECT* pClipRect,
+ int flags) {
+ GpGraphics* pGraphics;
+ CGdiplusExt& GdiplusExt =
+ ((CWin32Platform*)CFX_GEModule::Get()->GetPlatformData())->m_GdiplusExt;
+ CallFunc(GdipCreateFromHDC)(hDC, &pGraphics);
+ CallFunc(GdipSetPageUnit)(pGraphics, UnitPixel);
+ if (flags & FXDIB_NOSMOOTH) {
+ CallFunc(GdipSetInterpolationMode)(pGraphics,
+ InterpolationModeNearestNeighbor);
+ } else if (pBitmap->GetWidth() > abs(dest_width) / 2 ||
+ pBitmap->GetHeight() > abs(dest_height) / 2) {
+ CallFunc(GdipSetInterpolationMode)(pGraphics, InterpolationModeHighQuality);
+ } else {
+ CallFunc(GdipSetInterpolationMode)(pGraphics, InterpolationModeBilinear);
+ }
+ FX_RECT src_rect(0, 0, pBitmap->GetWidth(), pBitmap->GetHeight());
+ OutputImage(pGraphics, pBitmap, &src_rect, dest_left, dest_top, dest_width,
+ dest_height);
+ CallFunc(GdipDeleteGraphics)(pGraphics);
+ CallFunc(GdipDeleteGraphics)(pGraphics);
+ return TRUE;
}
-static GpPen* _GdipCreatePen(const CFX_GraphStateData* pGraphState, const CFX_AffineMatrix* pMatrix, DWORD argb, FX_BOOL bTextMode = FALSE)
-{
- CGdiplusExt& GdiplusExt = ((CWin32Platform*)CFX_GEModule::Get()->GetPlatformData())->m_GdiplusExt;
- FX_FLOAT width = pGraphState ? pGraphState->m_LineWidth : 1.0f;
- if (!bTextMode) {
- FX_FLOAT unit = pMatrix == NULL ? 1.0f : FXSYS_Div(1.0f, (pMatrix->GetXUnit() + pMatrix->GetYUnit()) / 2);
- if (width < unit) {
- width = unit;
- }
- }
- GpPen* pPen = NULL;
- CallFunc(GdipCreatePen1)((ARGB)argb, width, UnitWorld, &pPen);
- LineCap lineCap;
- DashCap dashCap = DashCapFlat;
- FX_BOOL bDashExtend = FALSE;
- switch(pGraphState->m_LineCap) {
- case CFX_GraphStateData::LineCapButt:
- lineCap = LineCapFlat;
- break;
- case CFX_GraphStateData::LineCapRound:
- lineCap = LineCapRound;
- dashCap = DashCapRound;
- bDashExtend = TRUE;
- break;
- case CFX_GraphStateData::LineCapSquare:
- lineCap = LineCapSquare;
- bDashExtend = TRUE;
- break;
- }
- CallFunc(GdipSetPenLineCap197819)(pPen, lineCap, lineCap, dashCap);
- LineJoin lineJoin;
- switch(pGraphState->m_LineJoin) {
- case CFX_GraphStateData::LineJoinMiter:
- lineJoin = LineJoinMiterClipped;
- break;
- case CFX_GraphStateData::LineJoinRound:
- lineJoin = LineJoinRound;
- break;
- case CFX_GraphStateData::LineJoinBevel:
- lineJoin = LineJoinBevel;
- break;
- }
- CallFunc(GdipSetPenLineJoin)(pPen, lineJoin);
- if(pGraphState->m_DashCount) {
- FX_FLOAT* pDashArray = FX_Alloc(FX_FLOAT, pGraphState->m_DashCount + pGraphState->m_DashCount % 2);
- int nCount = 0;
- FX_FLOAT on_leftover = 0, off_leftover = 0;
- for (int i = 0; i < pGraphState->m_DashCount; i += 2) {
- FX_FLOAT on_phase = pGraphState->m_DashArray[i];
- FX_FLOAT off_phase;
- if (i == pGraphState->m_DashCount - 1) {
- off_phase = on_phase;
- } else {
- off_phase = pGraphState->m_DashArray[i + 1];
- }
- on_phase /= width;
- off_phase /= width;
- if (on_phase + off_phase <= 0.00002f) {
- on_phase = 1.0f / 10;
- off_phase = 1.0f / 10;
- }
- if (bDashExtend) {
- if (off_phase < 1) {
- off_phase = 0;
- } else {
- off_phase -= 1;
- }
- on_phase += 1;
- }
- if (on_phase == 0 || off_phase == 0) {
- if (nCount == 0) {
- on_leftover += on_phase;
- off_leftover += off_phase;
- } else {
- pDashArray[nCount - 2] += on_phase;
- pDashArray[nCount - 1] += off_phase;
- }
- } else {
- pDashArray[nCount++] = on_phase + on_leftover;
- on_leftover = 0;
- pDashArray[nCount++] = off_phase + off_leftover;
- off_leftover = 0;
- }
+static GpPen* _GdipCreatePen(const CFX_GraphStateData* pGraphState,
+ const CFX_AffineMatrix* pMatrix,
+ DWORD argb,
+ FX_BOOL bTextMode = FALSE) {
+ CGdiplusExt& GdiplusExt =
+ ((CWin32Platform*)CFX_GEModule::Get()->GetPlatformData())->m_GdiplusExt;
+ FX_FLOAT width = pGraphState ? pGraphState->m_LineWidth : 1.0f;
+ if (!bTextMode) {
+ FX_FLOAT unit =
+ pMatrix == NULL
+ ? 1.0f
+ : FXSYS_Div(1.0f, (pMatrix->GetXUnit() + pMatrix->GetYUnit()) / 2);
+ if (width < unit) {
+ width = unit;
+ }
+ }
+ GpPen* pPen = NULL;
+ CallFunc(GdipCreatePen1)((ARGB)argb, width, UnitWorld, &pPen);
+ LineCap lineCap;
+ DashCap dashCap = DashCapFlat;
+ FX_BOOL bDashExtend = FALSE;
+ switch (pGraphState->m_LineCap) {
+ case CFX_GraphStateData::LineCapButt:
+ lineCap = LineCapFlat;
+ break;
+ case CFX_GraphStateData::LineCapRound:
+ lineCap = LineCapRound;
+ dashCap = DashCapRound;
+ bDashExtend = TRUE;
+ break;
+ case CFX_GraphStateData::LineCapSquare:
+ lineCap = LineCapSquare;
+ bDashExtend = TRUE;
+ break;
+ }
+ CallFunc(GdipSetPenLineCap197819)(pPen, lineCap, lineCap, dashCap);
+ LineJoin lineJoin;
+ switch (pGraphState->m_LineJoin) {
+ case CFX_GraphStateData::LineJoinMiter:
+ lineJoin = LineJoinMiterClipped;
+ break;
+ case CFX_GraphStateData::LineJoinRound:
+ lineJoin = LineJoinRound;
+ break;
+ case CFX_GraphStateData::LineJoinBevel:
+ lineJoin = LineJoinBevel;
+ break;
+ }
+ CallFunc(GdipSetPenLineJoin)(pPen, lineJoin);
+ if (pGraphState->m_DashCount) {
+ FX_FLOAT* pDashArray = FX_Alloc(
+ FX_FLOAT, pGraphState->m_DashCount + pGraphState->m_DashCount % 2);
+ int nCount = 0;
+ FX_FLOAT on_leftover = 0, off_leftover = 0;
+ for (int i = 0; i < pGraphState->m_DashCount; i += 2) {
+ FX_FLOAT on_phase = pGraphState->m_DashArray[i];
+ FX_FLOAT off_phase;
+ if (i == pGraphState->m_DashCount - 1) {
+ off_phase = on_phase;
+ } else {
+ off_phase = pGraphState->m_DashArray[i + 1];
+ }
+ on_phase /= width;
+ off_phase /= width;
+ if (on_phase + off_phase <= 0.00002f) {
+ on_phase = 1.0f / 10;
+ off_phase = 1.0f / 10;
+ }
+ if (bDashExtend) {
+ if (off_phase < 1) {
+ off_phase = 0;
+ } else {
+ off_phase -= 1;
}
- CallFunc(GdipSetPenDashArray)(pPen, pDashArray, nCount);
- FX_FLOAT phase = pGraphState->m_DashPhase;
- if (bDashExtend) {
- if (phase < 0.5f) {
- phase = 0;
- } else {
- phase -= 0.5f;
- }
+ on_phase += 1;
+ }
+ if (on_phase == 0 || off_phase == 0) {
+ if (nCount == 0) {
+ on_leftover += on_phase;
+ off_leftover += off_phase;
+ } else {
+ pDashArray[nCount - 2] += on_phase;
+ pDashArray[nCount - 1] += off_phase;
}
- CallFunc(GdipSetPenDashOffset)(pPen, phase);
- FX_Free(pDashArray);
- pDashArray = NULL;
- }
- CallFunc(GdipSetPenMiterLimit)(pPen, pGraphState->m_MiterLimit);
- return pPen;
+ } else {
+ pDashArray[nCount++] = on_phase + on_leftover;
+ on_leftover = 0;
+ pDashArray[nCount++] = off_phase + off_leftover;
+ off_leftover = 0;
+ }
+ }
+ CallFunc(GdipSetPenDashArray)(pPen, pDashArray, nCount);
+ FX_FLOAT phase = pGraphState->m_DashPhase;
+ if (bDashExtend) {
+ if (phase < 0.5f) {
+ phase = 0;
+ } else {
+ phase -= 0.5f;
+ }
+ }
+ CallFunc(GdipSetPenDashOffset)(pPen, phase);
+ FX_Free(pDashArray);
+ pDashArray = NULL;
+ }
+ CallFunc(GdipSetPenMiterLimit)(pPen, pGraphState->m_MiterLimit);
+ return pPen;
}
-static FX_BOOL IsSmallTriangle(PointF* points, const CFX_AffineMatrix* pMatrix, int& v1, int& v2)
-{
- int pairs[] = {1, 2, 0, 2, 0, 1};
- for (int i = 0; i < 3; i ++) {
- int pair1 = pairs[i * 2];
- int pair2 = pairs[i * 2 + 1];
- FX_FLOAT x1 = points[pair1].X, x2 = points[pair2].X;
- FX_FLOAT y1 = points[pair1].Y, y2 = points[pair2].Y;
- if (pMatrix) {
- pMatrix->Transform(x1, y1);
- pMatrix->Transform(x2, y2);
- }
- FX_FLOAT dx = x1 - x2;
- FX_FLOAT dy = y1 - y2;
- FX_FLOAT distance_square = FXSYS_Mul(dx, dx) + FXSYS_Mul(dy, dy);
- if (distance_square < (1.0f * 2 + 1.0f / 4)) {
- v1 = i;
- v2 = pair1;
- return TRUE;
- }
- }
- return FALSE;
+static FX_BOOL IsSmallTriangle(PointF* points,
+ const CFX_AffineMatrix* pMatrix,
+ int& v1,
+ int& v2) {
+ int pairs[] = {1, 2, 0, 2, 0, 1};
+ for (int i = 0; i < 3; i++) {
+ int pair1 = pairs[i * 2];
+ int pair2 = pairs[i * 2 + 1];
+ FX_FLOAT x1 = points[pair1].X, x2 = points[pair2].X;
+ FX_FLOAT y1 = points[pair1].Y, y2 = points[pair2].Y;
+ if (pMatrix) {
+ pMatrix->Transform(x1, y1);
+ pMatrix->Transform(x2, y2);
+ }
+ FX_FLOAT dx = x1 - x2;
+ FX_FLOAT dy = y1 - y2;
+ FX_FLOAT distance_square = FXSYS_Mul(dx, dx) + FXSYS_Mul(dy, dy);
+ if (distance_square < (1.0f * 2 + 1.0f / 4)) {
+ v1 = i;
+ v2 = pair1;
+ return TRUE;
+ }
+ }
+ return FALSE;
}
-FX_BOOL CGdiplusExt::DrawPath(HDC hDC, const CFX_PathData* pPathData,
- const CFX_AffineMatrix* pObject2Device,
- const CFX_GraphStateData* pGraphState,
- FX_DWORD fill_argb,
- FX_DWORD stroke_argb,
- int fill_mode
- )
-{
- int nPoints = pPathData->GetPointCount();
- if (nPoints == 0) {
- return TRUE;
- }
- FX_PATHPOINT* pPoints = pPathData->GetPoints();
- GpGraphics* pGraphics = NULL;
- CGdiplusExt& GdiplusExt = ((CWin32Platform*)CFX_GEModule::Get()->GetPlatformData())->m_GdiplusExt;
- CallFunc(GdipCreateFromHDC)(hDC, &pGraphics);
- CallFunc(GdipSetPageUnit)(pGraphics, UnitPixel);
- CallFunc(GdipSetPixelOffsetMode)(pGraphics, PixelOffsetModeHalf);
- GpMatrix* pMatrix = NULL;
+FX_BOOL CGdiplusExt::DrawPath(HDC hDC,
+ const CFX_PathData* pPathData,
+ const CFX_AffineMatrix* pObject2Device,
+ const CFX_GraphStateData* pGraphState,
+ FX_DWORD fill_argb,
+ FX_DWORD stroke_argb,
+ int fill_mode) {
+ int nPoints = pPathData->GetPointCount();
+ if (nPoints == 0) {
+ return TRUE;
+ }
+ FX_PATHPOINT* pPoints = pPathData->GetPoints();
+ GpGraphics* pGraphics = NULL;
+ CGdiplusExt& GdiplusExt =
+ ((CWin32Platform*)CFX_GEModule::Get()->GetPlatformData())->m_GdiplusExt;
+ CallFunc(GdipCreateFromHDC)(hDC, &pGraphics);
+ CallFunc(GdipSetPageUnit)(pGraphics, UnitPixel);
+ CallFunc(GdipSetPixelOffsetMode)(pGraphics, PixelOffsetModeHalf);
+ GpMatrix* pMatrix = NULL;
+ if (pObject2Device) {
+ CallFunc(GdipCreateMatrix2)(pObject2Device->a, pObject2Device->b,
+ pObject2Device->c, pObject2Device->d,
+ pObject2Device->e, pObject2Device->f, &pMatrix);
+ CallFunc(GdipSetWorldTransform)(pGraphics, pMatrix);
+ }
+ PointF* points = FX_Alloc(PointF, nPoints);
+ BYTE* types = FX_Alloc(BYTE, nPoints);
+ int nSubPathes = 0;
+ FX_BOOL bSubClose = FALSE;
+ int pos_subclose = 0;
+ FX_BOOL bSmooth = FALSE;
+ int startpoint = 0;
+ for (int i = 0; i < nPoints; i++) {
+ points[i].X = pPoints[i].m_PointX;
+ points[i].Y = pPoints[i].m_PointY;
+ FX_FLOAT x, y;
if (pObject2Device) {
- CallFunc(GdipCreateMatrix2)(pObject2Device->a, pObject2Device->b, pObject2Device->c, pObject2Device->d, pObject2Device->e, pObject2Device->f, &pMatrix);
- CallFunc(GdipSetWorldTransform)(pGraphics, pMatrix);
- }
- PointF *points = FX_Alloc(PointF, nPoints);
- BYTE * types = FX_Alloc(BYTE, nPoints);
- int nSubPathes = 0;
- FX_BOOL bSubClose = FALSE;
- int pos_subclose = 0;
- FX_BOOL bSmooth = FALSE;
- int startpoint = 0;
- for(int i = 0; i < nPoints; i++) {
- points[i].X = pPoints[i].m_PointX;
- points[i].Y = pPoints[i].m_PointY;
- FX_FLOAT x, y;
- if (pObject2Device) {
- pObject2Device->Transform(pPoints[i].m_PointX, pPoints[i].m_PointY, x, y);
- } else {
- x = pPoints[i].m_PointX;
- y = pPoints[i].m_PointY;
- }
- if (x > 50000 * 1.0f) {
- points[i].X = 50000 * 1.0f;
- }
- if (x < -50000 * 1.0f) {
- points[i].X = -50000 * 1.0f;
- }
- if (y > 50000 * 1.0f) {
- points[i].Y = 50000 * 1.0f;
- }
- if (y < -50000 * 1.0f) {
- points[i].Y = -50000 * 1.0f;
- }
- int point_type = pPoints[i].m_Flag & FXPT_TYPE;
- if(point_type == FXPT_MOVETO) {
- types[i] = PathPointTypeStart;
- nSubPathes ++;
- bSubClose = FALSE;
- startpoint = i;
- } else if (point_type == FXPT_LINETO) {
- types[i] = PathPointTypeLine;
- if (pPoints[i - 1].m_Flag == FXPT_MOVETO && (i == nPoints - 1 || pPoints[i + 1].m_Flag == FXPT_MOVETO) &&
- points[i].Y == points[i - 1].Y && points[i].X == points[i - 1].X) {
- points[i].X += 0.01f;
- continue;
- }
- if (!bSmooth && points[i].X != points[i - 1].X && points[i].Y != points[i - 1].Y) {
- bSmooth = TRUE;
- }
- } else if (point_type == FXPT_BEZIERTO) {
- types[i] = PathPointTypeBezier;
- bSmooth = TRUE;
- }
- if (pPoints[i].m_Flag & FXPT_CLOSEFIGURE) {
- if (bSubClose) {
- types[pos_subclose] &= ~PathPointTypeCloseSubpath;
- } else {
- bSubClose = TRUE;
- }
- pos_subclose = i;
- types[i] |= PathPointTypeCloseSubpath;
- if (!bSmooth && points[i].X != points[startpoint].X && points[i].Y != points[startpoint].Y) {
- bSmooth = TRUE;
- }
- }
- }
- if (fill_mode & FXFILL_NOPATHSMOOTH) {
- bSmooth = FALSE;
- CallFunc(GdipSetSmoothingMode)(pGraphics, SmoothingModeNone);
- } else if (!(fill_mode & FXFILL_FULLCOVER)) {
- if (!bSmooth && (fill_mode & 3)) {
- bSmooth = TRUE;
- }
- if (bSmooth || (pGraphState && pGraphState->m_LineWidth > 2)) {
- CallFunc(GdipSetSmoothingMode)(pGraphics, SmoothingModeAntiAlias);
- }
- }
- int new_fill_mode = fill_mode & 3;
- if (nPoints == 4 && pGraphState == NULL) {
- int v1, v2;
- if (IsSmallTriangle(points, pObject2Device, v1, v2)) {
- GpPen* pPen = NULL;
- CallFunc(GdipCreatePen1)(fill_argb, 1.0f, UnitPixel, &pPen);
- CallFunc(GdipDrawLineI)(pGraphics, pPen, FXSYS_round(points[v1].X), FXSYS_round(points[v1].Y),
- FXSYS_round(points[v2].X), FXSYS_round(points[v2].Y));
- CallFunc(GdipDeletePen)(pPen);
- return TRUE;
- }
- }
- GpPath* pGpPath = NULL;
- CallFunc(GdipCreatePath2)(points, types, nPoints, GdiFillType2Gdip(new_fill_mode), &pGpPath);
- if (!pGpPath) {
- if (pMatrix) {
- CallFunc(GdipDeleteMatrix)(pMatrix);
- }
- FX_Free(points);
- FX_Free(types);
- CallFunc(GdipDeleteGraphics)(pGraphics);
- return FALSE;
- }
- if (new_fill_mode) {
- GpBrush* pBrush = _GdipCreateBrush(fill_argb);
- CallFunc(GdipSetPathFillMode)(pGpPath, GdiFillType2Gdip(new_fill_mode));
- CallFunc(GdipFillPath)(pGraphics, pBrush, pGpPath);
- CallFunc(GdipDeleteBrush)(pBrush);
- }
- if (pGraphState && stroke_argb) {
- GpPen* pPen = _GdipCreatePen(pGraphState, pObject2Device, stroke_argb, fill_mode & FX_STROKE_TEXT_MODE);
- if (nSubPathes == 1) {
- CallFunc(GdipDrawPath)(pGraphics, pPen, pGpPath);
- } else {
- int iStart = 0;
- for (int i = 0; i < nPoints; i ++) {
- if (i == nPoints - 1 || types[i + 1] == PathPointTypeStart) {
- GpPath* pSubPath;
- CallFunc(GdipCreatePath2)(points + iStart, types + iStart, i - iStart + 1, GdiFillType2Gdip(new_fill_mode), &pSubPath);
- iStart = i + 1;
- CallFunc(GdipDrawPath)(pGraphics, pPen, pSubPath);
- CallFunc(GdipDeletePath)(pSubPath);
- }
- }
- }
- CallFunc(GdipDeletePen)(pPen);
- }
+ pObject2Device->Transform(pPoints[i].m_PointX, pPoints[i].m_PointY, x, y);
+ } else {
+ x = pPoints[i].m_PointX;
+ y = pPoints[i].m_PointY;
+ }
+ if (x > 50000 * 1.0f) {
+ points[i].X = 50000 * 1.0f;
+ }
+ if (x < -50000 * 1.0f) {
+ points[i].X = -50000 * 1.0f;
+ }
+ if (y > 50000 * 1.0f) {
+ points[i].Y = 50000 * 1.0f;
+ }
+ if (y < -50000 * 1.0f) {
+ points[i].Y = -50000 * 1.0f;
+ }
+ int point_type = pPoints[i].m_Flag & FXPT_TYPE;
+ if (point_type == FXPT_MOVETO) {
+ types[i] = PathPointTypeStart;
+ nSubPathes++;
+ bSubClose = FALSE;
+ startpoint = i;
+ } else if (point_type == FXPT_LINETO) {
+ types[i] = PathPointTypeLine;
+ if (pPoints[i - 1].m_Flag == FXPT_MOVETO &&
+ (i == nPoints - 1 || pPoints[i + 1].m_Flag == FXPT_MOVETO) &&
+ points[i].Y == points[i - 1].Y && points[i].X == points[i - 1].X) {
+ points[i].X += 0.01f;
+ continue;
+ }
+ if (!bSmooth && points[i].X != points[i - 1].X &&
+ points[i].Y != points[i - 1].Y) {
+ bSmooth = TRUE;
+ }
+ } else if (point_type == FXPT_BEZIERTO) {
+ types[i] = PathPointTypeBezier;
+ bSmooth = TRUE;
+ }
+ if (pPoints[i].m_Flag & FXPT_CLOSEFIGURE) {
+ if (bSubClose) {
+ types[pos_subclose] &= ~PathPointTypeCloseSubpath;
+ } else {
+ bSubClose = TRUE;
+ }
+ pos_subclose = i;
+ types[i] |= PathPointTypeCloseSubpath;
+ if (!bSmooth && points[i].X != points[startpoint].X &&
+ points[i].Y != points[startpoint].Y) {
+ bSmooth = TRUE;
+ }
+ }
+ }
+ if (fill_mode & FXFILL_NOPATHSMOOTH) {
+ bSmooth = FALSE;
+ CallFunc(GdipSetSmoothingMode)(pGraphics, SmoothingModeNone);
+ } else if (!(fill_mode & FXFILL_FULLCOVER)) {
+ if (!bSmooth && (fill_mode & 3)) {
+ bSmooth = TRUE;
+ }
+ if (bSmooth || (pGraphState && pGraphState->m_LineWidth > 2)) {
+ CallFunc(GdipSetSmoothingMode)(pGraphics, SmoothingModeAntiAlias);
+ }
+ }
+ int new_fill_mode = fill_mode & 3;
+ if (nPoints == 4 && pGraphState == NULL) {
+ int v1, v2;
+ if (IsSmallTriangle(points, pObject2Device, v1, v2)) {
+ GpPen* pPen = NULL;
+ CallFunc(GdipCreatePen1)(fill_argb, 1.0f, UnitPixel, &pPen);
+ CallFunc(GdipDrawLineI)(
+ pGraphics, pPen, FXSYS_round(points[v1].X), FXSYS_round(points[v1].Y),
+ FXSYS_round(points[v2].X), FXSYS_round(points[v2].Y));
+ CallFunc(GdipDeletePen)(pPen);
+ return TRUE;
+ }
+ }
+ GpPath* pGpPath = NULL;
+ CallFunc(GdipCreatePath2)(points, types, nPoints,
+ GdiFillType2Gdip(new_fill_mode), &pGpPath);
+ if (!pGpPath) {
if (pMatrix) {
- CallFunc(GdipDeleteMatrix)(pMatrix);
+ CallFunc(GdipDeleteMatrix)(pMatrix);
}
FX_Free(points);
FX_Free(types);
- CallFunc(GdipDeletePath)(pGpPath);
CallFunc(GdipDeleteGraphics)(pGraphics);
- return TRUE;
-}
-class GpStream final : public IStream
-{
- LONG m_RefCount;
- int m_ReadPos;
- CFX_ByteTextBuf m_InterStream;
-public:
- GpStream()
- {
- m_RefCount = 1;
- m_ReadPos = 0;
- }
- virtual HRESULT STDMETHODCALLTYPE
- QueryInterface(REFIID iid, void ** ppvObject)
- {
- if (iid == __uuidof(IUnknown) ||
- iid == __uuidof(IStream) ||
- iid == __uuidof(ISequentialStream)) {
- *ppvObject = static_cast<IStream*>(this);
- AddRef();
- return S_OK;
- }
- return E_NOINTERFACE;
- }
- virtual ULONG STDMETHODCALLTYPE AddRef(void)
- {
- return (ULONG)InterlockedIncrement(&m_RefCount);
- }
- virtual ULONG STDMETHODCALLTYPE Release(void)
- {
- ULONG res = (ULONG) InterlockedDecrement(&m_RefCount);
- if (res == 0) {
- delete this;
- }
- return res;
- }
-public:
- virtual HRESULT STDMETHODCALLTYPE Read(void* Output, ULONG cb, ULONG* pcbRead)
- {
- size_t bytes_left;
- size_t bytes_out;
- if (pcbRead != NULL) {
- *pcbRead = 0;
- }
- if (m_ReadPos == m_InterStream.GetLength()) {
- return HRESULT_FROM_WIN32(ERROR_END_OF_MEDIA);
- }
- bytes_left = m_InterStream.GetLength() - m_ReadPos;
- bytes_out = FX_MIN(cb, bytes_left);
- FXSYS_memcpy(Output, m_InterStream.GetBuffer() + m_ReadPos, bytes_out);
- m_ReadPos += (int32_t)bytes_out;
- if (pcbRead != NULL) {
- *pcbRead = (ULONG)bytes_out;
- }
- return S_OK;
- }
- virtual HRESULT STDMETHODCALLTYPE Write(void const* Input, ULONG cb, ULONG* pcbWritten)
- {
- if (cb <= 0) {
- if (pcbWritten != NULL) {
- *pcbWritten = 0;
- }
- return S_OK;
- }
- m_InterStream.InsertBlock(m_InterStream.GetLength(), Input, cb);
- if (pcbWritten != NULL) {
- *pcbWritten = cb;
- }
- return S_OK;
- }
-public:
- virtual HRESULT STDMETHODCALLTYPE SetSize(ULARGE_INTEGER)
- {
- return E_NOTIMPL;
- }
- virtual HRESULT STDMETHODCALLTYPE CopyTo(IStream*, ULARGE_INTEGER, ULARGE_INTEGER*, ULARGE_INTEGER*)
- {
- return E_NOTIMPL;
- }
- virtual HRESULT STDMETHODCALLTYPE Commit(DWORD)
- {
- return E_NOTIMPL;
- }
- virtual HRESULT STDMETHODCALLTYPE Revert(void)
- {
- return E_NOTIMPL;
- }
- virtual HRESULT STDMETHODCALLTYPE LockRegion(ULARGE_INTEGER, ULARGE_INTEGER, DWORD)
- {
- return E_NOTIMPL;
- }
- virtual HRESULT STDMETHODCALLTYPE UnlockRegion(ULARGE_INTEGER, ULARGE_INTEGER, DWORD)
- {
- return E_NOTIMPL;
- }
- virtual HRESULT STDMETHODCALLTYPE Clone(IStream **)
- {
- return E_NOTIMPL;
- }
- virtual HRESULT STDMETHODCALLTYPE Seek(LARGE_INTEGER liDistanceToMove, DWORD dwOrigin, ULARGE_INTEGER* lpNewFilePointer)
- {
- long start = 0;
- long new_read_position;
- switch(dwOrigin) {
- case STREAM_SEEK_SET:
- start = 0;
- break;
- case STREAM_SEEK_CUR:
- start = m_ReadPos;
- break;
- case STREAM_SEEK_END:
- start = m_InterStream.GetLength();
- break;
- default:
- return STG_E_INVALIDFUNCTION;
- break;
- }
- new_read_position = start + (long)liDistanceToMove.QuadPart;
- if (new_read_position < 0 || new_read_position > m_InterStream.GetLength()) {
- return STG_E_SEEKERROR;
- }
- m_ReadPos = new_read_position;
- if (lpNewFilePointer != NULL) {
- lpNewFilePointer->QuadPart = m_ReadPos;
- }
- return S_OK;
- }
- virtual HRESULT STDMETHODCALLTYPE Stat(STATSTG* pStatstg, DWORD grfStatFlag)
- {
- if (pStatstg == NULL) {
- return STG_E_INVALIDFUNCTION;
+ return FALSE;
+ }
+ if (new_fill_mode) {
+ GpBrush* pBrush = _GdipCreateBrush(fill_argb);
+ CallFunc(GdipSetPathFillMode)(pGpPath, GdiFillType2Gdip(new_fill_mode));
+ CallFunc(GdipFillPath)(pGraphics, pBrush, pGpPath);
+ CallFunc(GdipDeleteBrush)(pBrush);
+ }
+ if (pGraphState && stroke_argb) {
+ GpPen* pPen = _GdipCreatePen(pGraphState, pObject2Device, stroke_argb,
+ fill_mode & FX_STROKE_TEXT_MODE);
+ if (nSubPathes == 1) {
+ CallFunc(GdipDrawPath)(pGraphics, pPen, pGpPath);
+ } else {
+ int iStart = 0;
+ for (int i = 0; i < nPoints; i++) {
+ if (i == nPoints - 1 || types[i + 1] == PathPointTypeStart) {
+ GpPath* pSubPath;
+ CallFunc(GdipCreatePath2)(points + iStart, types + iStart,
+ i - iStart + 1,
+ GdiFillType2Gdip(new_fill_mode), &pSubPath);
+ iStart = i + 1;
+ CallFunc(GdipDrawPath)(pGraphics, pPen, pSubPath);
+ CallFunc(GdipDeletePath)(pSubPath);
}
- ZeroMemory(pStatstg, sizeof(STATSTG));
- pStatstg->cbSize.QuadPart = m_InterStream.GetLength();
- return S_OK;
- }
+ }
+ }
+ CallFunc(GdipDeletePen)(pPen);
+ }
+ if (pMatrix) {
+ CallFunc(GdipDeleteMatrix)(pMatrix);
+ }
+ FX_Free(points);
+ FX_Free(types);
+ CallFunc(GdipDeletePath)(pGpPath);
+ CallFunc(GdipDeleteGraphics)(pGraphics);
+ return TRUE;
+}
+class GpStream final : public IStream {
+ LONG m_RefCount;
+ int m_ReadPos;
+ CFX_ByteTextBuf m_InterStream;
+
+ public:
+ GpStream() {
+ m_RefCount = 1;
+ m_ReadPos = 0;
+ }
+ virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID iid,
+ void** ppvObject) {
+ if (iid == __uuidof(IUnknown) || iid == __uuidof(IStream) ||
+ iid == __uuidof(ISequentialStream)) {
+ *ppvObject = static_cast<IStream*>(this);
+ AddRef();
+ return S_OK;
+ }
+ return E_NOINTERFACE;
+ }
+ virtual ULONG STDMETHODCALLTYPE AddRef(void) {
+ return (ULONG)InterlockedIncrement(&m_RefCount);
+ }
+ virtual ULONG STDMETHODCALLTYPE Release(void) {
+ ULONG res = (ULONG)InterlockedDecrement(&m_RefCount);
+ if (res == 0) {
+ delete this;
+ }
+ return res;
+ }
+
+ public:
+ virtual HRESULT STDMETHODCALLTYPE Read(void* Output,
+ ULONG cb,
+ ULONG* pcbRead) {
+ size_t bytes_left;
+ size_t bytes_out;
+ if (pcbRead != NULL) {
+ *pcbRead = 0;
+ }
+ if (m_ReadPos == m_InterStream.GetLength()) {
+ return HRESULT_FROM_WIN32(ERROR_END_OF_MEDIA);
+ }
+ bytes_left = m_InterStream.GetLength() - m_ReadPos;
+ bytes_out = FX_MIN(cb, bytes_left);
+ FXSYS_memcpy(Output, m_InterStream.GetBuffer() + m_ReadPos, bytes_out);
+ m_ReadPos += (int32_t)bytes_out;
+ if (pcbRead != NULL) {
+ *pcbRead = (ULONG)bytes_out;
+ }
+ return S_OK;
+ }
+ virtual HRESULT STDMETHODCALLTYPE Write(void const* Input,
+ ULONG cb,
+ ULONG* pcbWritten) {
+ if (cb <= 0) {
+ if (pcbWritten != NULL) {
+ *pcbWritten = 0;
+ }
+ return S_OK;
+ }
+ m_InterStream.InsertBlock(m_InterStream.GetLength(), Input, cb);
+ if (pcbWritten != NULL) {
+ *pcbWritten = cb;
+ }
+ return S_OK;
+ }
+
+ public:
+ virtual HRESULT STDMETHODCALLTYPE SetSize(ULARGE_INTEGER) {
+ return E_NOTIMPL;
+ }
+ virtual HRESULT STDMETHODCALLTYPE CopyTo(IStream*,
+ ULARGE_INTEGER,
+ ULARGE_INTEGER*,
+ ULARGE_INTEGER*) {
+ return E_NOTIMPL;
+ }
+ virtual HRESULT STDMETHODCALLTYPE Commit(DWORD) { return E_NOTIMPL; }
+ virtual HRESULT STDMETHODCALLTYPE Revert(void) { return E_NOTIMPL; }
+ virtual HRESULT STDMETHODCALLTYPE LockRegion(ULARGE_INTEGER,
+ ULARGE_INTEGER,
+ DWORD) {
+ return E_NOTIMPL;
+ }
+ virtual HRESULT STDMETHODCALLTYPE UnlockRegion(ULARGE_INTEGER,
+ ULARGE_INTEGER,
+ DWORD) {
+ return E_NOTIMPL;
+ }
+ virtual HRESULT STDMETHODCALLTYPE Clone(IStream**) { return E_NOTIMPL; }
+ virtual HRESULT STDMETHODCALLTYPE Seek(LARGE_INTEGER liDistanceToMove,
+ DWORD dwOrigin,
+ ULARGE_INTEGER* lpNewFilePointer) {
+ long start = 0;
+ long new_read_position;
+ switch (dwOrigin) {
+ case STREAM_SEEK_SET:
+ start = 0;
+ break;
+ case STREAM_SEEK_CUR:
+ start = m_ReadPos;
+ break;
+ case STREAM_SEEK_END:
+ start = m_InterStream.GetLength();
+ break;
+ default:
+ return STG_E_INVALIDFUNCTION;
+ break;
+ }
+ new_read_position = start + (long)liDistanceToMove.QuadPart;
+ if (new_read_position < 0 ||
+ new_read_position > m_InterStream.GetLength()) {
+ return STG_E_SEEKERROR;
+ }
+ m_ReadPos = new_read_position;
+ if (lpNewFilePointer != NULL) {
+ lpNewFilePointer->QuadPart = m_ReadPos;
+ }
+ return S_OK;
+ }
+ virtual HRESULT STDMETHODCALLTYPE Stat(STATSTG* pStatstg, DWORD grfStatFlag) {
+ if (pStatstg == NULL) {
+ return STG_E_INVALIDFUNCTION;
+ }
+ ZeroMemory(pStatstg, sizeof(STATSTG));
+ pStatstg->cbSize.QuadPart = m_InterStream.GetLength();
+ return S_OK;
+ }
};
typedef struct {
- BITMAPINFO* pbmi;
- int Stride;
- LPBYTE pScan0;
- GpBitmap* pBitmap;
- BitmapData* pBitmapData;
- GpStream* pStream;
+ BITMAPINFO* pbmi;
+ int Stride;
+ LPBYTE pScan0;
+ GpBitmap* pBitmap;
+ BitmapData* pBitmapData;
+ GpStream* pStream;
} PREVIEW3_DIBITMAP;
-static PREVIEW3_DIBITMAP* LoadDIBitmap(WINDIB_Open_Args_ args)
-{
- GpBitmap* pBitmap;
- GpStream* pStream = NULL;
- CGdiplusExt& GdiplusExt = ((CWin32Platform*)CFX_GEModule::Get()->GetPlatformData())->m_GdiplusExt;
- Status status = Ok;
- if (args.flags == WINDIB_OPEN_PATHNAME) {
- status = CallFunc(GdipCreateBitmapFromFileICM)((wchar_t*)args.path_name, &pBitmap);
- } else {
- if (args.memory_size == 0 || !args.memory_base) {
- return NULL;
- }
- pStream = new GpStream;
- pStream->Write(args.memory_base, (ULONG)args.memory_size, NULL);
- status = CallFunc(GdipCreateBitmapFromStreamICM)(pStream, &pBitmap);
- }
- if (status != Ok) {
- if (pStream) {
- pStream->Release();
- }
- return NULL;
- }
- UINT height, width;
- CallFunc(GdipGetImageHeight)(pBitmap, &height);
- CallFunc(GdipGetImageWidth)(pBitmap, &width);
- PixelFormat pixel_format;
- CallFunc(GdipGetImagePixelFormat)(pBitmap, &pixel_format);
- int info_size = sizeof(BITMAPINFOHEADER);
- int bpp = 24;
- int dest_pixel_format = PixelFormat24bppRGB;
- if (pixel_format == PixelFormat1bppIndexed) {
- info_size += 8;
- bpp = 1;
- dest_pixel_format = PixelFormat1bppIndexed;
- } else if (pixel_format == PixelFormat8bppIndexed) {
- info_size += 1024;
- bpp = 8;
- dest_pixel_format = PixelFormat8bppIndexed;
- } else if (pixel_format == PixelFormat32bppARGB) {
- bpp = 32;
- dest_pixel_format = PixelFormat32bppARGB;
+static PREVIEW3_DIBITMAP* LoadDIBitmap(WINDIB_Open_Args_ args) {
+ GpBitmap* pBitmap;
+ GpStream* pStream = NULL;
+ CGdiplusExt& GdiplusExt =
+ ((CWin32Platform*)CFX_GEModule::Get()->GetPlatformData())->m_GdiplusExt;
+ Status status = Ok;
+ if (args.flags == WINDIB_OPEN_PATHNAME) {
+ status = CallFunc(GdipCreateBitmapFromFileICM)((wchar_t*)args.path_name,
+ &pBitmap);
+ } else {
+ if (args.memory_size == 0 || !args.memory_base) {
+ return NULL;
+ }
+ pStream = new GpStream;
+ pStream->Write(args.memory_base, (ULONG)args.memory_size, NULL);
+ status = CallFunc(GdipCreateBitmapFromStreamICM)(pStream, &pBitmap);
+ }
+ if (status != Ok) {
+ if (pStream) {
+ pStream->Release();
}
- LPBYTE buf = FX_Alloc(BYTE, info_size);
- BITMAPINFOHEADER* pbmih = (BITMAPINFOHEADER*)buf;
- pbmih->biBitCount = bpp;
- pbmih->biCompression = BI_RGB;
- pbmih->biHeight = -(int)height;
- pbmih->biPlanes = 1;
- pbmih->biWidth = width;
- Rect rect(0, 0, width, height);
- BitmapData* pBitmapData = FX_Alloc(BitmapData, 1);
- CallFunc(GdipBitmapLockBits)(pBitmap, &rect, ImageLockModeRead,
- dest_pixel_format, pBitmapData);
- if (pixel_format == PixelFormat1bppIndexed || pixel_format == PixelFormat8bppIndexed) {
- DWORD* ppal = (DWORD*)(buf + sizeof(BITMAPINFOHEADER));
- struct {
- UINT flags;
- UINT Count;
- DWORD Entries[256];
- } pal;
- int size = 0;
- CallFunc(GdipGetImagePaletteSize)(pBitmap, &size);
- CallFunc(GdipGetImagePalette)(pBitmap, (ColorPalette*)&pal, size);
- int entries = pixel_format == PixelFormat1bppIndexed ? 2 : 256;
- for (int i = 0; i < entries; i ++) {
- ppal[i] = pal.Entries[i] & 0x00ffffff;
- }
- }
- PREVIEW3_DIBITMAP* pInfo = FX_Alloc(PREVIEW3_DIBITMAP, 1);
- pInfo->pbmi = (BITMAPINFO*)buf;
- pInfo->pScan0 = (LPBYTE)pBitmapData->Scan0;
- pInfo->Stride = pBitmapData->Stride;
- pInfo->pBitmap = pBitmap;
- pInfo->pBitmapData = pBitmapData;
- pInfo->pStream = pStream;
- return pInfo;
+ return NULL;
+ }
+ UINT height, width;
+ CallFunc(GdipGetImageHeight)(pBitmap, &height);
+ CallFunc(GdipGetImageWidth)(pBitmap, &width);
+ PixelFormat pixel_format;
+ CallFunc(GdipGetImagePixelFormat)(pBitmap, &pixel_format);
+ int info_size = sizeof(BITMAPINFOHEADER);
+ int bpp = 24;
+ int dest_pixel_format = PixelFormat24bppRGB;
+ if (pixel_format == PixelFormat1bppIndexed) {
+ info_size += 8;
+ bpp = 1;
+ dest_pixel_format = PixelFormat1bppIndexed;
+ } else if (pixel_format == PixelFormat8bppIndexed) {
+ info_size += 1024;
+ bpp = 8;
+ dest_pixel_format = PixelFormat8bppIndexed;
+ } else if (pixel_format == PixelFormat32bppARGB) {
+ bpp = 32;
+ dest_pixel_format = PixelFormat32bppARGB;
+ }
+ LPBYTE buf = FX_Alloc(BYTE, info_size);
+ BITMAPINFOHEADER* pbmih = (BITMAPINFOHEADER*)buf;
+ pbmih->biBitCount = bpp;
+ pbmih->biCompression = BI_RGB;
+ pbmih->biHeight = -(int)height;
+ pbmih->biPlanes = 1;
+ pbmih->biWidth = width;
+ Rect rect(0, 0, width, height);
+ BitmapData* pBitmapData = FX_Alloc(BitmapData, 1);
+ CallFunc(GdipBitmapLockBits)(pBitmap, &rect, ImageLockModeRead,
+ dest_pixel_format, pBitmapData);
+ if (pixel_format == PixelFormat1bppIndexed ||
+ pixel_format == PixelFormat8bppIndexed) {
+ DWORD* ppal = (DWORD*)(buf + sizeof(BITMAPINFOHEADER));
+ struct {
+ UINT flags;
+ UINT Count;
+ DWORD Entries[256];
+ } pal;
+ int size = 0;
+ CallFunc(GdipGetImagePaletteSize)(pBitmap, &size);
+ CallFunc(GdipGetImagePalette)(pBitmap, (ColorPalette*)&pal, size);
+ int entries = pixel_format == PixelFormat1bppIndexed ? 2 : 256;
+ for (int i = 0; i < entries; i++) {
+ ppal[i] = pal.Entries[i] & 0x00ffffff;
+ }
+ }
+ PREVIEW3_DIBITMAP* pInfo = FX_Alloc(PREVIEW3_DIBITMAP, 1);
+ pInfo->pbmi = (BITMAPINFO*)buf;
+ pInfo->pScan0 = (LPBYTE)pBitmapData->Scan0;
+ pInfo->Stride = pBitmapData->Stride;
+ pInfo->pBitmap = pBitmap;
+ pInfo->pBitmapData = pBitmapData;
+ pInfo->pStream = pStream;
+ return pInfo;
}
-static void FreeDIBitmap(PREVIEW3_DIBITMAP* pInfo)
-{
- CGdiplusExt& GdiplusExt = ((CWin32Platform*)CFX_GEModule::Get()->GetPlatformData())->m_GdiplusExt;
- CallFunc(GdipBitmapUnlockBits)(pInfo->pBitmap, pInfo->pBitmapData);
- CallFunc(GdipDisposeImage)(pInfo->pBitmap);
- FX_Free(pInfo->pBitmapData);
- FX_Free((LPBYTE)pInfo->pbmi);
- if (pInfo->pStream) {
- pInfo->pStream->Release();
- }
- FX_Free(pInfo);
+static void FreeDIBitmap(PREVIEW3_DIBITMAP* pInfo) {
+ CGdiplusExt& GdiplusExt =
+ ((CWin32Platform*)CFX_GEModule::Get()->GetPlatformData())->m_GdiplusExt;
+ CallFunc(GdipBitmapUnlockBits)(pInfo->pBitmap, pInfo->pBitmapData);
+ CallFunc(GdipDisposeImage)(pInfo->pBitmap);
+ FX_Free(pInfo->pBitmapData);
+ FX_Free((LPBYTE)pInfo->pbmi);
+ if (pInfo->pStream) {
+ pInfo->pStream->Release();
+ }
+ FX_Free(pInfo);
}
-CFX_DIBitmap* _FX_WindowsDIB_LoadFromBuf(BITMAPINFO* pbmi, LPVOID pData, FX_BOOL bAlpha);
-CFX_DIBitmap* CGdiplusExt::LoadDIBitmap(WINDIB_Open_Args_ args)
-{
- PREVIEW3_DIBITMAP* pInfo = ::LoadDIBitmap(args);
- if (pInfo == NULL) {
- return NULL;
- }
- int height = abs(pInfo->pbmi->bmiHeader.biHeight);
- int width = pInfo->pbmi->bmiHeader.biWidth;
- int dest_pitch = (width * pInfo->pbmi->bmiHeader.biBitCount + 31) / 32 * 4;
- LPBYTE pData = FX_Alloc2D(BYTE, dest_pitch, height);
- if (dest_pitch == pInfo->Stride) {
- FXSYS_memcpy(pData, pInfo->pScan0, dest_pitch * height);
- } else {
- for (int i = 0; i < height; i ++) {
- FXSYS_memcpy(pData + dest_pitch * i, pInfo->pScan0 + pInfo->Stride * i, dest_pitch);
- }
- }
- CFX_DIBitmap* pDIBitmap = _FX_WindowsDIB_LoadFromBuf(pInfo->pbmi, pData, pInfo->pbmi->bmiHeader.biBitCount == 32);
- FX_Free(pData);
- FreeDIBitmap(pInfo);
- return pDIBitmap;
+CFX_DIBitmap* _FX_WindowsDIB_LoadFromBuf(BITMAPINFO* pbmi,
+ LPVOID pData,
+ FX_BOOL bAlpha);
+CFX_DIBitmap* CGdiplusExt::LoadDIBitmap(WINDIB_Open_Args_ args) {
+ PREVIEW3_DIBITMAP* pInfo = ::LoadDIBitmap(args);
+ if (pInfo == NULL) {
+ return NULL;
+ }
+ int height = abs(pInfo->pbmi->bmiHeader.biHeight);
+ int width = pInfo->pbmi->bmiHeader.biWidth;
+ int dest_pitch = (width * pInfo->pbmi->bmiHeader.biBitCount + 31) / 32 * 4;
+ LPBYTE pData = FX_Alloc2D(BYTE, dest_pitch, height);
+ if (dest_pitch == pInfo->Stride) {
+ FXSYS_memcpy(pData, pInfo->pScan0, dest_pitch * height);
+ } else {
+ for (int i = 0; i < height; i++) {
+ FXSYS_memcpy(pData + dest_pitch * i, pInfo->pScan0 + pInfo->Stride * i,
+ dest_pitch);
+ }
+ }
+ CFX_DIBitmap* pDIBitmap = _FX_WindowsDIB_LoadFromBuf(
+ pInfo->pbmi, pData, pInfo->pbmi->bmiHeader.biBitCount == 32);
+ FX_Free(pData);
+ FreeDIBitmap(pInfo);
+ return pDIBitmap;
}
#endif
diff --git a/core/src/fxge/win32/fx_win32_print.cpp b/core/src/fxge/win32/fx_win32_print.cpp
index 86dbf9bb0a..85f339b529 100644
--- a/core/src/fxge/win32/fx_win32_print.cpp
+++ b/core/src/fxge/win32/fx_win32_print.cpp
@@ -14,397 +14,464 @@
#include "../dib/dib_int.h"
#define SIZETHRESHOLD 1000
#define OUTPUTPSLEN 4096
-CGdiPrinterDriver::CGdiPrinterDriver(HDC hDC) : CGdiDeviceDriver(hDC, FXDC_PRINTER)
-{
- m_HorzSize = ::GetDeviceCaps(m_hDC, HORZSIZE);
- m_VertSize = ::GetDeviceCaps(m_hDC, VERTSIZE);
- m_bSupportROP = TRUE;
+CGdiPrinterDriver::CGdiPrinterDriver(HDC hDC)
+ : CGdiDeviceDriver(hDC, FXDC_PRINTER) {
+ m_HorzSize = ::GetDeviceCaps(m_hDC, HORZSIZE);
+ m_VertSize = ::GetDeviceCaps(m_hDC, VERTSIZE);
+ m_bSupportROP = TRUE;
}
-int CGdiPrinterDriver::GetDeviceCaps(int caps_id)
-{
- if (caps_id == FXDC_HORZ_SIZE) {
- return m_HorzSize;
- }
- if (caps_id == FXDC_VERT_SIZE) {
- return m_VertSize;
- }
- return CGdiDeviceDriver::GetDeviceCaps(caps_id);
+int CGdiPrinterDriver::GetDeviceCaps(int caps_id) {
+ if (caps_id == FXDC_HORZ_SIZE) {
+ return m_HorzSize;
+ }
+ if (caps_id == FXDC_VERT_SIZE) {
+ return m_VertSize;
+ }
+ return CGdiDeviceDriver::GetDeviceCaps(caps_id);
+}
+FX_BOOL CGdiPrinterDriver::SetDIBits(const CFX_DIBSource* pSource,
+ FX_DWORD color,
+ const FX_RECT* pSrcRect,
+ int left,
+ int top,
+ int blend_type,
+ int alpha_flag,
+ void* pIccTransform) {
+ if (pSource->IsAlphaMask()) {
+ FX_RECT clip_rect(left, top, left + pSrcRect->Width(),
+ top + pSrcRect->Height());
+ return StretchDIBits(pSource, color, left - pSrcRect->left,
+ top - pSrcRect->top, pSource->GetWidth(),
+ pSource->GetHeight(), &clip_rect, 0, alpha_flag,
+ pIccTransform, FXDIB_BLEND_NORMAL);
+ }
+ ASSERT(pSource != NULL && !pSource->IsAlphaMask() && pSrcRect != NULL);
+ ASSERT(blend_type == FXDIB_BLEND_NORMAL);
+ if (pSource->HasAlpha()) {
+ return FALSE;
+ }
+ CFX_DIBExtractor temp(pSource);
+ CFX_DIBitmap* pBitmap = temp;
+ if (pBitmap == NULL) {
+ return FALSE;
+ }
+ return GDI_SetDIBits(pBitmap, pSrcRect, left, top, pIccTransform);
}
-FX_BOOL CGdiPrinterDriver::SetDIBits(const CFX_DIBSource* pSource, FX_DWORD color, const FX_RECT* pSrcRect, int left, int top, int blend_type,
- int alpha_flag, void* pIccTransform)
-{
- if (pSource->IsAlphaMask()) {
- FX_RECT clip_rect(left, top, left + pSrcRect->Width(), top + pSrcRect->Height());
- return StretchDIBits(pSource, color, left - pSrcRect->left, top - pSrcRect->top, pSource->GetWidth(), pSource->GetHeight(),
- &clip_rect, 0, alpha_flag, pIccTransform, FXDIB_BLEND_NORMAL);
+FX_BOOL CGdiPrinterDriver::StretchDIBits(const CFX_DIBSource* pSource,
+ FX_DWORD color,
+ int dest_left,
+ int dest_top,
+ int dest_width,
+ int dest_height,
+ const FX_RECT* pClipRect,
+ FX_DWORD flags,
+ int alpha_flag,
+ void* pIccTransform,
+ int blend_type) {
+ if (pSource->IsAlphaMask()) {
+ int alpha = FXGETFLAG_COLORTYPE(alpha_flag)
+ ? FXGETFLAG_ALPHA_FILL(alpha_flag)
+ : FXARGB_A(color);
+ if (pSource->GetBPP() != 1 || alpha != 255 || !m_bSupportROP) {
+ return FALSE;
}
- ASSERT(pSource != NULL && !pSource->IsAlphaMask() && pSrcRect != NULL);
- ASSERT(blend_type == FXDIB_BLEND_NORMAL);
- if (pSource->HasAlpha()) {
+ if (dest_width < 0 || dest_height < 0) {
+ CFX_DIBitmap* pFlipped =
+ pSource->FlipImage(dest_width < 0, dest_height < 0);
+ if (pFlipped == NULL) {
return FALSE;
+ }
+ if (dest_width < 0) {
+ dest_left += dest_width;
+ }
+ if (dest_height < 0) {
+ dest_top += dest_height;
+ }
+ FX_BOOL ret = GDI_StretchBitMask(pFlipped, dest_left, dest_top,
+ abs(dest_width), abs(dest_height), color,
+ flags, alpha_flag, pIccTransform);
+ delete pFlipped;
+ return ret;
}
CFX_DIBExtractor temp(pSource);
CFX_DIBitmap* pBitmap = temp;
if (pBitmap == NULL) {
- return FALSE;
+ return FALSE;
}
- return GDI_SetDIBits(pBitmap, pSrcRect, left, top, pIccTransform);
-}
-FX_BOOL CGdiPrinterDriver::StretchDIBits(const CFX_DIBSource* pSource, FX_DWORD color, int dest_left, int dest_top,
- int dest_width, int dest_height, const FX_RECT* pClipRect, FX_DWORD flags,
- int alpha_flag, void* pIccTransform, int blend_type)
-{
- if (pSource->IsAlphaMask()) {
- int alpha = FXGETFLAG_COLORTYPE(alpha_flag) ? FXGETFLAG_ALPHA_FILL(alpha_flag) : FXARGB_A(color);
- if (pSource->GetBPP() != 1 || alpha != 255 || !m_bSupportROP) {
- return FALSE;
- }
- if (dest_width < 0 || dest_height < 0) {
- CFX_DIBitmap* pFlipped = pSource->FlipImage(dest_width < 0, dest_height < 0);
- if (pFlipped == NULL) {
- return FALSE;
- }
- if (dest_width < 0) {
- dest_left += dest_width;
- }
- if (dest_height < 0) {
- dest_top += dest_height;
- }
- FX_BOOL ret = GDI_StretchBitMask(pFlipped, dest_left, dest_top, abs(dest_width), abs(dest_height), color, flags, alpha_flag, pIccTransform);
- delete pFlipped;
- return ret;
- }
- CFX_DIBExtractor temp(pSource);
- CFX_DIBitmap* pBitmap = temp;
- if (pBitmap == NULL) {
- return FALSE;
- }
- return GDI_StretchBitMask(pBitmap, dest_left, dest_top, dest_width, dest_height, color, flags, alpha_flag, pIccTransform);
+ return GDI_StretchBitMask(pBitmap, dest_left, dest_top, dest_width,
+ dest_height, color, flags, alpha_flag,
+ pIccTransform);
+ }
+ if (pSource->HasAlpha()) {
+ return FALSE;
+ }
+ if (dest_width < 0 || dest_height < 0) {
+ CFX_DIBitmap* pFlipped =
+ pSource->FlipImage(dest_width < 0, dest_height < 0);
+ if (pFlipped == NULL) {
+ return FALSE;
}
- if (pSource->HasAlpha()) {
- return FALSE;
+ if (dest_width < 0) {
+ dest_left += dest_width;
}
- if (dest_width < 0 || dest_height < 0) {
- CFX_DIBitmap* pFlipped = pSource->FlipImage(dest_width < 0, dest_height < 0);
- if (pFlipped == NULL) {
- return FALSE;
- }
- if (dest_width < 0) {
- dest_left += dest_width;
- }
- if (dest_height < 0) {
- dest_top += dest_height;
- }
- FX_BOOL ret = GDI_StretchDIBits(pFlipped, dest_left, dest_top, abs(dest_width), abs(dest_height), flags, pIccTransform);
- delete pFlipped;
- return ret;
- }
- CFX_DIBExtractor temp(pSource);
- CFX_DIBitmap* pBitmap = temp;
- if (pBitmap == NULL) {
- return FALSE;
+ if (dest_height < 0) {
+ dest_top += dest_height;
}
- return GDI_StretchDIBits(pBitmap, dest_left, dest_top, dest_width, dest_height, flags, pIccTransform);
+ FX_BOOL ret =
+ GDI_StretchDIBits(pFlipped, dest_left, dest_top, abs(dest_width),
+ abs(dest_height), flags, pIccTransform);
+ delete pFlipped;
+ return ret;
+ }
+ CFX_DIBExtractor temp(pSource);
+ CFX_DIBitmap* pBitmap = temp;
+ if (pBitmap == NULL) {
+ return FALSE;
+ }
+ return GDI_StretchDIBits(pBitmap, dest_left, dest_top, dest_width,
+ dest_height, flags, pIccTransform);
}
-static CFX_DIBitmap* Transform1bppBitmap(const CFX_DIBSource* pSrc, const CFX_AffineMatrix* pDestMatrix)
-{
- ASSERT(pSrc->GetFormat() == FXDIB_1bppRgb || pSrc->GetFormat() == FXDIB_1bppMask || pSrc->GetFormat() == FXDIB_1bppCmyk);
- CFX_FloatRect unit_rect = pDestMatrix->GetUnitRect();
- FX_RECT full_rect = unit_rect.GetOutterRect();
- int full_left = full_rect.left;
- int full_top = full_rect.top;
- CFX_DIBExtractor src_bitmap(pSrc);
- CFX_DIBitmap* pSrcBitmap = src_bitmap;
- if (pSrcBitmap == NULL) {
- return NULL;
+static CFX_DIBitmap* Transform1bppBitmap(const CFX_DIBSource* pSrc,
+ const CFX_AffineMatrix* pDestMatrix) {
+ ASSERT(pSrc->GetFormat() == FXDIB_1bppRgb ||
+ pSrc->GetFormat() == FXDIB_1bppMask ||
+ pSrc->GetFormat() == FXDIB_1bppCmyk);
+ CFX_FloatRect unit_rect = pDestMatrix->GetUnitRect();
+ FX_RECT full_rect = unit_rect.GetOutterRect();
+ int full_left = full_rect.left;
+ int full_top = full_rect.top;
+ CFX_DIBExtractor src_bitmap(pSrc);
+ CFX_DIBitmap* pSrcBitmap = src_bitmap;
+ if (pSrcBitmap == NULL) {
+ return NULL;
+ }
+ int src_width = pSrcBitmap->GetWidth(), src_height = pSrcBitmap->GetHeight();
+ uint8_t* src_buf = pSrcBitmap->GetBuffer();
+ FX_DWORD src_pitch = pSrcBitmap->GetPitch();
+ FX_FLOAT dest_area = pDestMatrix->GetUnitArea();
+ FX_FLOAT area_scale =
+ FXSYS_Div((FX_FLOAT)(src_width * src_height), dest_area);
+ FX_FLOAT size_scale = FXSYS_sqrt(area_scale);
+ CFX_AffineMatrix adjusted_matrix(*pDestMatrix);
+ adjusted_matrix.Scale(size_scale, size_scale);
+ CFX_FloatRect result_rect_f = adjusted_matrix.GetUnitRect();
+ FX_RECT result_rect = result_rect_f.GetOutterRect();
+ CFX_AffineMatrix src2result;
+ src2result.e = adjusted_matrix.c + adjusted_matrix.e;
+ src2result.f = adjusted_matrix.d + adjusted_matrix.f;
+ src2result.a = adjusted_matrix.a / pSrcBitmap->GetWidth();
+ src2result.b = adjusted_matrix.b / pSrcBitmap->GetWidth();
+ src2result.c = -adjusted_matrix.c / pSrcBitmap->GetHeight();
+ src2result.d = -adjusted_matrix.d / pSrcBitmap->GetHeight();
+ src2result.TranslateI(-result_rect.left, -result_rect.top);
+ CFX_AffineMatrix result2src;
+ result2src.SetReverse(src2result);
+ CPDF_FixedMatrix result2src_fix(result2src, 8);
+ int result_width = result_rect.Width();
+ int result_height = result_rect.Height();
+ CFX_DIBitmap* pTempBitmap = new CFX_DIBitmap;
+ if (!pTempBitmap->Create(result_width, result_height, pSrc->GetFormat())) {
+ delete pTempBitmap;
+ if (pSrcBitmap != src_bitmap) {
+ delete pSrcBitmap;
}
- int src_width = pSrcBitmap->GetWidth(), src_height = pSrcBitmap->GetHeight();
- uint8_t* src_buf = pSrcBitmap->GetBuffer();
- FX_DWORD src_pitch = pSrcBitmap->GetPitch();
- FX_FLOAT dest_area = pDestMatrix->GetUnitArea();
- FX_FLOAT area_scale = FXSYS_Div((FX_FLOAT)(src_width * src_height), dest_area);
- FX_FLOAT size_scale = FXSYS_sqrt(area_scale);
- CFX_AffineMatrix adjusted_matrix(*pDestMatrix);
- adjusted_matrix.Scale(size_scale, size_scale);
- CFX_FloatRect result_rect_f = adjusted_matrix.GetUnitRect();
- FX_RECT result_rect = result_rect_f.GetOutterRect();
- CFX_AffineMatrix src2result;
- src2result.e = adjusted_matrix.c + adjusted_matrix.e;
- src2result.f = adjusted_matrix.d + adjusted_matrix.f;
- src2result.a = adjusted_matrix.a / pSrcBitmap->GetWidth();
- src2result.b = adjusted_matrix.b / pSrcBitmap->GetWidth();
- src2result.c = -adjusted_matrix.c / pSrcBitmap->GetHeight();
- src2result.d = -adjusted_matrix.d / pSrcBitmap->GetHeight();
- src2result.TranslateI(-result_rect.left, -result_rect.top);
- CFX_AffineMatrix result2src;
- result2src.SetReverse(src2result);
- CPDF_FixedMatrix result2src_fix(result2src, 8);
- int result_width = result_rect.Width();
- int result_height = result_rect.Height();
- CFX_DIBitmap* pTempBitmap = new CFX_DIBitmap;
- if (!pTempBitmap->Create(result_width, result_height, pSrc->GetFormat())) {
- delete pTempBitmap;
- if (pSrcBitmap != src_bitmap) {
- delete pSrcBitmap;
+ return NULL;
+ }
+ pTempBitmap->CopyPalette(pSrc->GetPalette());
+ uint8_t* dest_buf = pTempBitmap->GetBuffer();
+ int dest_pitch = pTempBitmap->GetPitch();
+ FXSYS_memset(dest_buf, pSrc->IsAlphaMask() ? 0 : 0xff,
+ dest_pitch * result_height);
+ if (pSrcBitmap->IsAlphaMask()) {
+ for (int dest_y = 0; dest_y < result_height; dest_y++) {
+ uint8_t* dest_scan = dest_buf + dest_y * dest_pitch;
+ for (int dest_x = 0; dest_x < result_width; dest_x++) {
+ int src_x, src_y;
+ result2src_fix.Transform(dest_x, dest_y, src_x, src_y);
+ if (src_x < 0 || src_x >= src_width || src_y < 0 ||
+ src_y >= src_height) {
+ continue;
}
- return NULL;
+ if (!((src_buf + src_pitch * src_y)[src_x / 8] &
+ (1 << (7 - src_x % 8)))) {
+ continue;
+ }
+ dest_scan[dest_x / 8] |= 1 << (7 - dest_x % 8);
+ }
}
- pTempBitmap->CopyPalette(pSrc->GetPalette());
- uint8_t* dest_buf = pTempBitmap->GetBuffer();
- int dest_pitch = pTempBitmap->GetPitch();
- FXSYS_memset(dest_buf, pSrc->IsAlphaMask() ? 0 : 0xff, dest_pitch * result_height);
- if (pSrcBitmap->IsAlphaMask()) {
- for (int dest_y = 0; dest_y < result_height; dest_y ++) {
- uint8_t* dest_scan = dest_buf + dest_y * dest_pitch;
- for (int dest_x = 0; dest_x < result_width; dest_x ++) {
- int src_x, src_y;
- result2src_fix.Transform(dest_x, dest_y, src_x, src_y);
- if (src_x < 0 || src_x >= src_width || src_y < 0 || src_y >= src_height) {
- continue;
- }
- if (!((src_buf + src_pitch * src_y)[src_x / 8] & (1 << (7 - src_x % 8)))) {
- continue;
- }
- dest_scan[dest_x / 8] |= 1 << (7 - dest_x % 8);
- }
+ } else {
+ for (int dest_y = 0; dest_y < result_height; dest_y++) {
+ uint8_t* dest_scan = dest_buf + dest_y * dest_pitch;
+ for (int dest_x = 0; dest_x < result_width; dest_x++) {
+ int src_x, src_y;
+ result2src_fix.Transform(dest_x, dest_y, src_x, src_y);
+ if (src_x < 0 || src_x >= src_width || src_y < 0 ||
+ src_y >= src_height) {
+ continue;
}
- } else {
- for (int dest_y = 0; dest_y < result_height; dest_y ++) {
- uint8_t* dest_scan = dest_buf + dest_y * dest_pitch;
- for (int dest_x = 0; dest_x < result_width; dest_x ++) {
- int src_x, src_y;
- result2src_fix.Transform(dest_x, dest_y, src_x, src_y);
- if (src_x < 0 || src_x >= src_width || src_y < 0 || src_y >= src_height) {
- continue;
- }
- if ((src_buf + src_pitch * src_y)[src_x / 8] & (1 << (7 - src_x % 8))) {
- continue;
- }
- dest_scan[dest_x / 8] &= ~(1 << (7 - dest_x % 8));
- }
+ if ((src_buf + src_pitch * src_y)[src_x / 8] & (1 << (7 - src_x % 8))) {
+ continue;
}
+ dest_scan[dest_x / 8] &= ~(1 << (7 - dest_x % 8));
+ }
}
- if (pSrcBitmap != src_bitmap) {
- delete pSrcBitmap;
- }
- return pTempBitmap;
+ }
+ if (pSrcBitmap != src_bitmap) {
+ delete pSrcBitmap;
+ }
+ return pTempBitmap;
}
-FX_BOOL CGdiPrinterDriver::StartDIBits(const CFX_DIBSource* pSource, int bitmap_alpha, FX_DWORD color,
- const CFX_AffineMatrix* pMatrix, FX_DWORD render_flags, void*& handle,
- int alpha_flag, void* pIccTransform, int blend_type)
-{
- if (bitmap_alpha < 255 || pSource->HasAlpha() || (pSource->IsAlphaMask() && (pSource->GetBPP() != 1 || !m_bSupportROP))) {
- return FALSE;
- }
- CFX_FloatRect unit_rect = pMatrix->GetUnitRect();
- FX_RECT full_rect = unit_rect.GetOutterRect();
- if (FXSYS_fabs(pMatrix->b) < 0.5f && pMatrix->a != 0 && FXSYS_fabs(pMatrix->c) < 0.5f && pMatrix->d != 0) {
- FX_BOOL bFlipX = pMatrix->a < 0;
- FX_BOOL bFlipY = pMatrix->d > 0;
- return StretchDIBits(pSource, color, bFlipX ? full_rect.right : full_rect.left, bFlipY ? full_rect.bottom : full_rect.top,
- bFlipX ? -full_rect.Width() : full_rect.Width(), bFlipY ? -full_rect.Height() : full_rect.Height(), NULL, 0,
- alpha_flag, pIccTransform, blend_type);
+FX_BOOL CGdiPrinterDriver::StartDIBits(const CFX_DIBSource* pSource,
+ int bitmap_alpha,
+ FX_DWORD color,
+ const CFX_AffineMatrix* pMatrix,
+ FX_DWORD render_flags,
+ void*& handle,
+ int alpha_flag,
+ void* pIccTransform,
+ int blend_type) {
+ if (bitmap_alpha < 255 || pSource->HasAlpha() ||
+ (pSource->IsAlphaMask() && (pSource->GetBPP() != 1 || !m_bSupportROP))) {
+ return FALSE;
+ }
+ CFX_FloatRect unit_rect = pMatrix->GetUnitRect();
+ FX_RECT full_rect = unit_rect.GetOutterRect();
+ if (FXSYS_fabs(pMatrix->b) < 0.5f && pMatrix->a != 0 &&
+ FXSYS_fabs(pMatrix->c) < 0.5f && pMatrix->d != 0) {
+ FX_BOOL bFlipX = pMatrix->a < 0;
+ FX_BOOL bFlipY = pMatrix->d > 0;
+ return StretchDIBits(pSource, color,
+ bFlipX ? full_rect.right : full_rect.left,
+ bFlipY ? full_rect.bottom : full_rect.top,
+ bFlipX ? -full_rect.Width() : full_rect.Width(),
+ bFlipY ? -full_rect.Height() : full_rect.Height(),
+ NULL, 0, alpha_flag, pIccTransform, blend_type);
+ }
+ if (FXSYS_fabs(pMatrix->a) < 0.5f && FXSYS_fabs(pMatrix->d) < 0.5f) {
+ CFX_DIBitmap* pTransformed =
+ pSource->SwapXY(pMatrix->c > 0, pMatrix->b < 0);
+ if (pTransformed == NULL) {
+ return FALSE;
}
- if (FXSYS_fabs(pMatrix->a) < 0.5f && FXSYS_fabs(pMatrix->d) < 0.5f) {
- CFX_DIBitmap* pTransformed = pSource->SwapXY(pMatrix->c > 0, pMatrix->b < 0);
- if (pTransformed == NULL) {
- return FALSE;
- }
- FX_BOOL ret = StretchDIBits(pTransformed, color, full_rect.left, full_rect.top, full_rect.Width(), full_rect.Height(), NULL, 0,
- alpha_flag, pIccTransform, blend_type);
- delete pTransformed;
- return ret;
+ FX_BOOL ret = StretchDIBits(
+ pTransformed, color, full_rect.left, full_rect.top, full_rect.Width(),
+ full_rect.Height(), NULL, 0, alpha_flag, pIccTransform, blend_type);
+ delete pTransformed;
+ return ret;
+ }
+ if (pSource->GetBPP() == 1) {
+ CFX_DIBitmap* pTransformed = Transform1bppBitmap(pSource, pMatrix);
+ if (pIccTransform == NULL) {
+ return FALSE;
}
- if (pSource->GetBPP() == 1) {
- CFX_DIBitmap* pTransformed = Transform1bppBitmap(pSource, pMatrix);
- if (pIccTransform == NULL) {
- return FALSE;
- }
- SaveState();
- CFX_PathData path;
- path.AppendRect(0, 0, 1.0f, 1.0f);
- SetClip_PathFill(&path, pMatrix, WINDING);
- FX_BOOL ret = StretchDIBits(pTransformed, color, full_rect.left, full_rect.top, full_rect.Width(), full_rect.Height(), NULL, 0,
- alpha_flag, pIccTransform, blend_type);
- RestoreState();
- delete pTransformed;
- handle = NULL;
- return ret;
- }
- return FALSE;
+ SaveState();
+ CFX_PathData path;
+ path.AppendRect(0, 0, 1.0f, 1.0f);
+ SetClip_PathFill(&path, pMatrix, WINDING);
+ FX_BOOL ret = StretchDIBits(
+ pTransformed, color, full_rect.left, full_rect.top, full_rect.Width(),
+ full_rect.Height(), NULL, 0, alpha_flag, pIccTransform, blend_type);
+ RestoreState();
+ delete pTransformed;
+ handle = NULL;
+ return ret;
+ }
+ return FALSE;
}
-CPSOutput::CPSOutput(HDC hDC)
-{
- m_hDC = hDC;
- m_pBuf = NULL;
+CPSOutput::CPSOutput(HDC hDC) {
+ m_hDC = hDC;
+ m_pBuf = NULL;
}
-CPSOutput::~CPSOutput()
-{
- if (m_pBuf) {
- FX_Free(m_pBuf);
- }
+CPSOutput::~CPSOutput() {
+ if (m_pBuf) {
+ FX_Free(m_pBuf);
+ }
}
-void CPSOutput::Init()
-{
- m_pBuf = FX_Alloc(FX_CHAR, 1026);
+void CPSOutput::Init() {
+ m_pBuf = FX_Alloc(FX_CHAR, 1026);
}
-void CPSOutput::OutputPS(const FX_CHAR* string, int len)
-{
- if (len < 0) {
- len = (int)FXSYS_strlen(string);
- }
- int sent_len = 0;
- while (len > 0) {
- int send_len = len > 1024 ? 1024 : len;
- *(FX_WORD*)m_pBuf = send_len;
- FXSYS_memcpy(m_pBuf + 2, string + sent_len, send_len);
- int ret = ExtEscape(m_hDC, PASSTHROUGH, send_len + 2, m_pBuf, 0, NULL);
- sent_len += send_len;
- len -= send_len;
- }
+void CPSOutput::OutputPS(const FX_CHAR* string, int len) {
+ if (len < 0) {
+ len = (int)FXSYS_strlen(string);
+ }
+ int sent_len = 0;
+ while (len > 0) {
+ int send_len = len > 1024 ? 1024 : len;
+ *(FX_WORD*)m_pBuf = send_len;
+ FXSYS_memcpy(m_pBuf + 2, string + sent_len, send_len);
+ int ret = ExtEscape(m_hDC, PASSTHROUGH, send_len + 2, m_pBuf, 0, NULL);
+ sent_len += send_len;
+ len -= send_len;
+ }
}
-CPSPrinterDriver::CPSPrinterDriver()
-{
- m_pPSOutput = NULL;
- m_bCmykOutput = FALSE;
+CPSPrinterDriver::CPSPrinterDriver() {
+ m_pPSOutput = NULL;
+ m_bCmykOutput = FALSE;
}
-CPSPrinterDriver::~CPSPrinterDriver()
-{
- EndRendering();
- delete m_pPSOutput;
+CPSPrinterDriver::~CPSPrinterDriver() {
+ EndRendering();
+ delete m_pPSOutput;
}
-FX_BOOL CPSPrinterDriver::Init(HDC hDC, int pslevel, FX_BOOL bCmykOutput)
-{
- m_hDC = hDC;
- m_HorzSize = ::GetDeviceCaps(m_hDC, HORZSIZE);
- m_VertSize = ::GetDeviceCaps(m_hDC, VERTSIZE);
- m_Width = ::GetDeviceCaps(m_hDC, HORZRES);
- m_Height = ::GetDeviceCaps(m_hDC, VERTRES);
- m_nBitsPerPixel = ::GetDeviceCaps(m_hDC, BITSPIXEL);
- m_pPSOutput = new CPSOutput(hDC);
- ((CPSOutput*)m_pPSOutput)->Init();
- m_PSRenderer.Init(m_pPSOutput, pslevel, m_Width, m_Height, bCmykOutput);
- m_bCmykOutput = bCmykOutput;
- HRGN hRgn = ::CreateRectRgn(0, 0, 1, 1);
- int ret = ::GetClipRgn(hDC, hRgn);
- if (ret == 1) {
- ret = ::GetRegionData(hRgn, 0, NULL);
- if (ret) {
- RGNDATA* pData = (RGNDATA*)FX_Alloc(uint8_t, ret);
- ret = ::GetRegionData(hRgn, ret, pData);
- if (ret) {
- CFX_PathData path;
- path.AllocPointCount(pData->rdh.nCount * 5);
- for (FX_DWORD i = 0; i < pData->rdh.nCount; i ++) {
- RECT* pRect = (RECT*)(pData->Buffer + pData->rdh.nRgnSize * i);
- path.AppendRect((FX_FLOAT)pRect->left, (FX_FLOAT)pRect->bottom, (FX_FLOAT)pRect->right, (FX_FLOAT)pRect->top);
- }
- m_PSRenderer.SetClip_PathFill(&path, NULL, FXFILL_WINDING);
- }
- FX_Free(pData);
+FX_BOOL CPSPrinterDriver::Init(HDC hDC, int pslevel, FX_BOOL bCmykOutput) {
+ m_hDC = hDC;
+ m_HorzSize = ::GetDeviceCaps(m_hDC, HORZSIZE);
+ m_VertSize = ::GetDeviceCaps(m_hDC, VERTSIZE);
+ m_Width = ::GetDeviceCaps(m_hDC, HORZRES);
+ m_Height = ::GetDeviceCaps(m_hDC, VERTRES);
+ m_nBitsPerPixel = ::GetDeviceCaps(m_hDC, BITSPIXEL);
+ m_pPSOutput = new CPSOutput(hDC);
+ ((CPSOutput*)m_pPSOutput)->Init();
+ m_PSRenderer.Init(m_pPSOutput, pslevel, m_Width, m_Height, bCmykOutput);
+ m_bCmykOutput = bCmykOutput;
+ HRGN hRgn = ::CreateRectRgn(0, 0, 1, 1);
+ int ret = ::GetClipRgn(hDC, hRgn);
+ if (ret == 1) {
+ ret = ::GetRegionData(hRgn, 0, NULL);
+ if (ret) {
+ RGNDATA* pData = (RGNDATA*)FX_Alloc(uint8_t, ret);
+ ret = ::GetRegionData(hRgn, ret, pData);
+ if (ret) {
+ CFX_PathData path;
+ path.AllocPointCount(pData->rdh.nCount * 5);
+ for (FX_DWORD i = 0; i < pData->rdh.nCount; i++) {
+ RECT* pRect = (RECT*)(pData->Buffer + pData->rdh.nRgnSize * i);
+ path.AppendRect((FX_FLOAT)pRect->left, (FX_FLOAT)pRect->bottom,
+ (FX_FLOAT)pRect->right, (FX_FLOAT)pRect->top);
}
+ m_PSRenderer.SetClip_PathFill(&path, NULL, FXFILL_WINDING);
+ }
+ FX_Free(pData);
}
- ::DeleteObject(hRgn);
- return TRUE;
+ }
+ ::DeleteObject(hRgn);
+ return TRUE;
}
-int CPSPrinterDriver::GetDeviceCaps(int caps_id)
-{
- switch (caps_id) {
- case FXDC_DEVICE_CLASS:
- return FXDC_PRINTER;
- case FXDC_PIXEL_WIDTH:
- return m_Width;
- case FXDC_PIXEL_HEIGHT:
- return m_Height;
- case FXDC_BITS_PIXEL:
- return m_nBitsPerPixel;
- case FXDC_RENDER_CAPS:
- return m_bCmykOutput ? FXRC_BIT_MASK | FXRC_CMYK_OUTPUT : FXRC_BIT_MASK;
- case FXDC_HORZ_SIZE:
- return m_HorzSize;
- case FXDC_VERT_SIZE:
- return m_VertSize;
- }
- return 0;
+int CPSPrinterDriver::GetDeviceCaps(int caps_id) {
+ switch (caps_id) {
+ case FXDC_DEVICE_CLASS:
+ return FXDC_PRINTER;
+ case FXDC_PIXEL_WIDTH:
+ return m_Width;
+ case FXDC_PIXEL_HEIGHT:
+ return m_Height;
+ case FXDC_BITS_PIXEL:
+ return m_nBitsPerPixel;
+ case FXDC_RENDER_CAPS:
+ return m_bCmykOutput ? FXRC_BIT_MASK | FXRC_CMYK_OUTPUT : FXRC_BIT_MASK;
+ case FXDC_HORZ_SIZE:
+ return m_HorzSize;
+ case FXDC_VERT_SIZE:
+ return m_VertSize;
+ }
+ return 0;
}
-FX_BOOL CPSPrinterDriver::StartRendering()
-{
- return m_PSRenderer.StartRendering();
+FX_BOOL CPSPrinterDriver::StartRendering() {
+ return m_PSRenderer.StartRendering();
}
-void CPSPrinterDriver::EndRendering()
-{
- m_PSRenderer.EndRendering();
+void CPSPrinterDriver::EndRendering() {
+ m_PSRenderer.EndRendering();
}
-void CPSPrinterDriver::SaveState()
-{
- m_PSRenderer.SaveState();
+void CPSPrinterDriver::SaveState() {
+ m_PSRenderer.SaveState();
}
-void CPSPrinterDriver::RestoreState(FX_BOOL bKeepSaved)
-{
- m_PSRenderer.RestoreState(bKeepSaved);
+void CPSPrinterDriver::RestoreState(FX_BOOL bKeepSaved) {
+ m_PSRenderer.RestoreState(bKeepSaved);
}
-FX_BOOL CPSPrinterDriver::SetClip_PathFill(const CFX_PathData* pPathData, const CFX_AffineMatrix* pObject2Device,
- int fill_mode)
-{
- m_PSRenderer.SetClip_PathFill(pPathData, pObject2Device, fill_mode);
- return TRUE;
+FX_BOOL CPSPrinterDriver::SetClip_PathFill(
+ const CFX_PathData* pPathData,
+ const CFX_AffineMatrix* pObject2Device,
+ int fill_mode) {
+ m_PSRenderer.SetClip_PathFill(pPathData, pObject2Device, fill_mode);
+ return TRUE;
}
-FX_BOOL CPSPrinterDriver::SetClip_PathStroke(const CFX_PathData* pPathData,
- const CFX_AffineMatrix* pObject2Device,
- const CFX_GraphStateData* pGraphState)
-{
- m_PSRenderer.SetClip_PathStroke(pPathData, pObject2Device, pGraphState);
- return TRUE;
+FX_BOOL CPSPrinterDriver::SetClip_PathStroke(
+ const CFX_PathData* pPathData,
+ const CFX_AffineMatrix* pObject2Device,
+ const CFX_GraphStateData* pGraphState) {
+ m_PSRenderer.SetClip_PathStroke(pPathData, pObject2Device, pGraphState);
+ return TRUE;
}
-FX_BOOL CPSPrinterDriver::DrawPath(const CFX_PathData* pPathData,
+FX_BOOL CPSPrinterDriver::DrawPath(const CFX_PathData* pPathData,
const CFX_AffineMatrix* pObject2Device,
- const CFX_GraphStateData* pGraphState, FX_ARGB fill_color, FX_ARGB stroke_color,
- int fill_mode, int alpha_flag, void* pIccTransform, int blend_type)
-{
- if (blend_type != FXDIB_BLEND_NORMAL) {
- return FALSE;
- }
- return m_PSRenderer.DrawPath(pPathData, pObject2Device, pGraphState, fill_color, stroke_color, fill_mode & 3, alpha_flag, pIccTransform);
+ const CFX_GraphStateData* pGraphState,
+ FX_ARGB fill_color,
+ FX_ARGB stroke_color,
+ int fill_mode,
+ int alpha_flag,
+ void* pIccTransform,
+ int blend_type) {
+ if (blend_type != FXDIB_BLEND_NORMAL) {
+ return FALSE;
+ }
+ return m_PSRenderer.DrawPath(pPathData, pObject2Device, pGraphState,
+ fill_color, stroke_color, fill_mode & 3,
+ alpha_flag, pIccTransform);
}
-FX_BOOL CPSPrinterDriver::GetClipBox(FX_RECT* pRect)
-{
- *pRect = m_PSRenderer.GetClipBox();
- return TRUE;
+FX_BOOL CPSPrinterDriver::GetClipBox(FX_RECT* pRect) {
+ *pRect = m_PSRenderer.GetClipBox();
+ return TRUE;
}
-FX_BOOL CPSPrinterDriver::SetDIBits(const CFX_DIBSource* pBitmap, FX_DWORD color, const FX_RECT* pSrcRect, int left, int top, int blend_type,
- int alpha_flag, void* pIccTransform)
-{
- if (blend_type != FXDIB_BLEND_NORMAL) {
- return FALSE;
- }
- return m_PSRenderer.SetDIBits(pBitmap, color, left, top, alpha_flag, pIccTransform);
+FX_BOOL CPSPrinterDriver::SetDIBits(const CFX_DIBSource* pBitmap,
+ FX_DWORD color,
+ const FX_RECT* pSrcRect,
+ int left,
+ int top,
+ int blend_type,
+ int alpha_flag,
+ void* pIccTransform) {
+ if (blend_type != FXDIB_BLEND_NORMAL) {
+ return FALSE;
+ }
+ return m_PSRenderer.SetDIBits(pBitmap, color, left, top, alpha_flag,
+ pIccTransform);
}
-FX_BOOL CPSPrinterDriver::StretchDIBits(const CFX_DIBSource* pBitmap, FX_DWORD color, int dest_left, int dest_top,
- int dest_width, int dest_height, const FX_RECT* pClipRect, FX_DWORD flags,
- int alpha_flag, void* pIccTransform, int blend_type)
-{
- if (blend_type != FXDIB_BLEND_NORMAL) {
- return FALSE;
- }
- return m_PSRenderer.StretchDIBits(pBitmap, color, dest_left, dest_top, dest_width, dest_height, flags, alpha_flag, pIccTransform);
+FX_BOOL CPSPrinterDriver::StretchDIBits(const CFX_DIBSource* pBitmap,
+ FX_DWORD color,
+ int dest_left,
+ int dest_top,
+ int dest_width,
+ int dest_height,
+ const FX_RECT* pClipRect,
+ FX_DWORD flags,
+ int alpha_flag,
+ void* pIccTransform,
+ int blend_type) {
+ if (blend_type != FXDIB_BLEND_NORMAL) {
+ return FALSE;
+ }
+ return m_PSRenderer.StretchDIBits(pBitmap, color, dest_left, dest_top,
+ dest_width, dest_height, flags, alpha_flag,
+ pIccTransform);
}
-FX_BOOL CPSPrinterDriver::StartDIBits(const CFX_DIBSource* pBitmap, int bitmap_alpha, FX_DWORD color,
- const CFX_AffineMatrix* pMatrix, FX_DWORD render_flags, void*& handle,
- int alpha_flag, void* pIccTransform, int blend_type)
-{
- if (blend_type != FXDIB_BLEND_NORMAL) {
- return FALSE;
- }
- if (bitmap_alpha < 255) {
- return FALSE;
- }
- handle = NULL;
- return m_PSRenderer.DrawDIBits(pBitmap, color, pMatrix, render_flags, alpha_flag, pIccTransform);
+FX_BOOL CPSPrinterDriver::StartDIBits(const CFX_DIBSource* pBitmap,
+ int bitmap_alpha,
+ FX_DWORD color,
+ const CFX_AffineMatrix* pMatrix,
+ FX_DWORD render_flags,
+ void*& handle,
+ int alpha_flag,
+ void* pIccTransform,
+ int blend_type) {
+ if (blend_type != FXDIB_BLEND_NORMAL) {
+ return FALSE;
+ }
+ if (bitmap_alpha < 255) {
+ return FALSE;
+ }
+ handle = NULL;
+ return m_PSRenderer.DrawDIBits(pBitmap, color, pMatrix, render_flags,
+ alpha_flag, pIccTransform);
}
-FX_BOOL CPSPrinterDriver::DrawDeviceText(int nChars, const FXTEXT_CHARPOS* pCharPos, CFX_Font* pFont,
- CFX_FontCache* pCache, const CFX_AffineMatrix* pObject2Device, FX_FLOAT font_size, FX_DWORD color,
- int alpha_flag, void* pIccTransform)
-{
- return m_PSRenderer.DrawText(nChars, pCharPos, pFont, pCache, pObject2Device, font_size, color, alpha_flag, pIccTransform);
+FX_BOOL CPSPrinterDriver::DrawDeviceText(int nChars,
+ const FXTEXT_CHARPOS* pCharPos,
+ CFX_Font* pFont,
+ CFX_FontCache* pCache,
+ const CFX_AffineMatrix* pObject2Device,
+ FX_FLOAT font_size,
+ FX_DWORD color,
+ int alpha_flag,
+ void* pIccTransform) {
+ return m_PSRenderer.DrawText(nChars, pCharPos, pFont, pCache, pObject2Device,
+ font_size, color, alpha_flag, pIccTransform);
}
#endif
diff --git a/core/src/fxge/win32/win32_int.h b/core/src/fxge/win32/win32_int.h
index 569c4f6baa..cb3b017ad8 100644
--- a/core/src/fxge/win32/win32_int.h
+++ b/core/src/fxge/win32/win32_int.h
@@ -6,237 +6,348 @@
#ifndef CORE_SRC_FXGE_WIN32_WIN32_INT_H_
#define CORE_SRC_FXGE_WIN32_WIN32_INT_H_
-struct WINDIB_Open_Args_;
-class CGdiplusExt
-{
-public:
- CGdiplusExt();
- ~CGdiplusExt();
- void Load();
- FX_BOOL IsAvailable()
- {
- return m_hModule != NULL;
- }
- FX_BOOL StretchBitMask(HDC hDC, BOOL bMonoDevice, const CFX_DIBitmap* pBitmap, int dest_left, int dest_top,
- int dest_width, int dest_height, FX_DWORD argb, const FX_RECT* pClipRect, int flags);
- FX_BOOL StretchDIBits(HDC hDC, const CFX_DIBitmap* pBitmap, int dest_left, int dest_top,
- int dest_width, int dest_height, const FX_RECT* pClipRect, int flags);
- FX_BOOL DrawPath(HDC hDC, const CFX_PathData* pPathData,
- const CFX_AffineMatrix* pObject2Device,
- const CFX_GraphStateData* pGraphState,
- FX_DWORD fill_argb,
- FX_DWORD stroke_argb,
- int fill_mode
- );
+struct WINDIB_Open_Args_;
+class CGdiplusExt {
+ public:
+ CGdiplusExt();
+ ~CGdiplusExt();
+ void Load();
+ FX_BOOL IsAvailable() { return m_hModule != NULL; }
+ FX_BOOL StretchBitMask(HDC hDC,
+ BOOL bMonoDevice,
+ const CFX_DIBitmap* pBitmap,
+ int dest_left,
+ int dest_top,
+ int dest_width,
+ int dest_height,
+ FX_DWORD argb,
+ const FX_RECT* pClipRect,
+ int flags);
+ FX_BOOL StretchDIBits(HDC hDC,
+ const CFX_DIBitmap* pBitmap,
+ int dest_left,
+ int dest_top,
+ int dest_width,
+ int dest_height,
+ const FX_RECT* pClipRect,
+ int flags);
+ FX_BOOL DrawPath(HDC hDC,
+ const CFX_PathData* pPathData,
+ const CFX_AffineMatrix* pObject2Device,
+ const CFX_GraphStateData* pGraphState,
+ FX_DWORD fill_argb,
+ FX_DWORD stroke_argb,
+ int fill_mode);
+
+ void* LoadMemFont(uint8_t* pData, FX_DWORD size);
+ void DeleteMemFont(void* pFontCollection);
+ FX_BOOL GdipCreateFromImage(void* bitmap, void** graphics);
+ void GdipDeleteGraphics(void* graphics);
+ void GdipSetTextRenderingHint(void* graphics, int mode);
+ void GdipSetPageUnit(void* graphics, FX_DWORD unit);
+ void GdipSetWorldTransform(void* graphics, void* pMatrix);
+ FX_BOOL GdipDrawDriverString(void* graphics,
+ unsigned short* text,
+ int length,
+ void* font,
+ void* brush,
+ void* positions,
+ int flags,
+ const void* matrix);
+ void GdipCreateBrush(FX_DWORD fill_argb, void** pBrush);
+ void GdipDeleteBrush(void* pBrush);
+ void GdipCreateMatrix(FX_FLOAT a,
+ FX_FLOAT b,
+ FX_FLOAT c,
+ FX_FLOAT d,
+ FX_FLOAT e,
+ FX_FLOAT f,
+ void** matrix);
+ void GdipDeleteMatrix(void* matrix);
+ FX_BOOL GdipCreateFontFamilyFromName(const FX_WCHAR* name,
+ void* pFontCollection,
+ void** pFamily);
+ void GdipDeleteFontFamily(void* pFamily);
+ FX_BOOL GdipCreateFontFromFamily(void* pFamily,
+ FX_FLOAT font_size,
+ int fontstyle,
+ int flag,
+ void** pFont);
+ void* GdipCreateFontFromCollection(void* pFontCollection,
+ FX_FLOAT font_size,
+ int fontstyle);
+ void GdipDeleteFont(void* pFont);
+ FX_BOOL GdipCreateBitmap(CFX_DIBitmap* pBitmap, void** bitmap);
+ void GdipDisposeImage(void* bitmap);
+ void GdipGetFontSize(void* pFont, FX_FLOAT* size);
+ void* GdiAddFontMemResourceEx(void* pFontdata,
+ FX_DWORD size,
+ void* pdv,
+ FX_DWORD* num_face);
+ FX_BOOL GdiRemoveFontMemResourceEx(void* handle);
+ void* m_Functions[100];
+ void* m_pGdiAddFontMemResourceEx;
+ void* m_pGdiRemoveFontMemResourseEx;
+ CFX_DIBitmap* LoadDIBitmap(WINDIB_Open_Args_ args);
- void* LoadMemFont(uint8_t* pData, FX_DWORD size);
- void DeleteMemFont(void* pFontCollection);
- FX_BOOL GdipCreateFromImage(void* bitmap, void** graphics);
- void GdipDeleteGraphics(void* graphics);
- void GdipSetTextRenderingHint(void* graphics, int mode);
- void GdipSetPageUnit(void* graphics, FX_DWORD unit);
- void GdipSetWorldTransform(void* graphics, void* pMatrix);
- FX_BOOL GdipDrawDriverString(void *graphics, unsigned short *text, int length, void *font, void* brush, void *positions, int flags, const void *matrix);
- void GdipCreateBrush(FX_DWORD fill_argb, void** pBrush);
- void GdipDeleteBrush(void* pBrush);
- void GdipCreateMatrix(FX_FLOAT a, FX_FLOAT b, FX_FLOAT c, FX_FLOAT d, FX_FLOAT e, FX_FLOAT f, void** matrix);
- void GdipDeleteMatrix(void* matrix);
- FX_BOOL GdipCreateFontFamilyFromName(const FX_WCHAR* name, void* pFontCollection, void**pFamily);
- void GdipDeleteFontFamily(void* pFamily);
- FX_BOOL GdipCreateFontFromFamily(void* pFamily, FX_FLOAT font_size, int fontstyle, int flag, void** pFont);
- void* GdipCreateFontFromCollection(void* pFontCollection, FX_FLOAT font_size, int fontstyle);
- void GdipDeleteFont(void* pFont);
- FX_BOOL GdipCreateBitmap(CFX_DIBitmap* pBitmap, void**bitmap);
- void GdipDisposeImage(void* bitmap);
- void GdipGetFontSize(void *pFont, FX_FLOAT *size);
- void* GdiAddFontMemResourceEx(void *pFontdata, FX_DWORD size, void* pdv, FX_DWORD* num_face);
- FX_BOOL GdiRemoveFontMemResourceEx(void* handle);
- void* m_Functions[100];
- void* m_pGdiAddFontMemResourceEx;
- void* m_pGdiRemoveFontMemResourseEx;
- CFX_DIBitmap* LoadDIBitmap(WINDIB_Open_Args_ args);
-protected:
- HMODULE m_hModule;
- HMODULE m_GdiModule;
+ protected:
+ HMODULE m_hModule;
+ HMODULE m_GdiModule;
};
#include "dwrite_int.h"
-class CWin32Platform
-{
-public:
- FX_BOOL m_bHalfTone;
- CGdiplusExt m_GdiplusExt;
- CDWriteExt m_DWriteExt;
+class CWin32Platform {
+ public:
+ FX_BOOL m_bHalfTone;
+ CGdiplusExt m_GdiplusExt;
+ CDWriteExt m_DWriteExt;
};
-class CGdiDeviceDriver : public IFX_RenderDeviceDriver
-{
-protected:
- virtual int GetDeviceCaps(int caps_id);
- virtual void SaveState()
- {
- SaveDC(m_hDC);
- }
- virtual void RestoreState(FX_BOOL bKeepSaved = FALSE)
- {
- RestoreDC(m_hDC, -1);
- if (bKeepSaved) {
- SaveDC(m_hDC);
- }
+class CGdiDeviceDriver : public IFX_RenderDeviceDriver {
+ protected:
+ virtual int GetDeviceCaps(int caps_id);
+ virtual void SaveState() { SaveDC(m_hDC); }
+ virtual void RestoreState(FX_BOOL bKeepSaved = FALSE) {
+ RestoreDC(m_hDC, -1);
+ if (bKeepSaved) {
+ SaveDC(m_hDC);
}
- virtual FX_BOOL SetClip_PathFill(const CFX_PathData* pPathData,
+ }
+ virtual FX_BOOL SetClip_PathFill(const CFX_PathData* pPathData,
+ const CFX_AffineMatrix* pObject2Device,
+ int fill_mode);
+ virtual FX_BOOL SetClip_PathStroke(const CFX_PathData* pPathData,
const CFX_AffineMatrix* pObject2Device,
- int fill_mode
- );
- virtual FX_BOOL SetClip_PathStroke(const CFX_PathData* pPathData,
- const CFX_AffineMatrix* pObject2Device,
- const CFX_GraphStateData* pGraphState
- );
- virtual FX_BOOL DrawPath(const CFX_PathData* pPathData,
- const CFX_AffineMatrix* pObject2Device,
- const CFX_GraphStateData* pGraphState,
- FX_DWORD fill_color,
- FX_DWORD stroke_color,
- int fill_mode,
+ const CFX_GraphStateData* pGraphState);
+ virtual FX_BOOL DrawPath(const CFX_PathData* pPathData,
+ const CFX_AffineMatrix* pObject2Device,
+ const CFX_GraphStateData* pGraphState,
+ FX_DWORD fill_color,
+ FX_DWORD stroke_color,
+ int fill_mode,
+ int alpha_flag,
+ void* pIccTransform,
+ int blend_type);
+ virtual FX_BOOL FillRect(const FX_RECT* pRect,
+ FX_DWORD fill_color,
+ int alpha_flag,
+ void* pIccTransform,
+ int blend_type);
+ virtual FX_BOOL DrawCosmeticLine(FX_FLOAT x1,
+ FX_FLOAT y1,
+ FX_FLOAT x2,
+ FX_FLOAT y2,
+ FX_DWORD color,
+ int alpha_flag,
+ void* pIccTransform,
+ int blend_type);
+ virtual void* GetClipRgn();
+ virtual FX_BOOL SetClipRgn(void* pRgn);
+ virtual FX_BOOL GetClipBox(FX_RECT* pRect);
+ virtual FX_BOOL DeleteDeviceRgn(void* pRgn);
+ virtual void DrawLine(FX_FLOAT x1, FX_FLOAT y1, FX_FLOAT x2, FX_FLOAT y2);
+ virtual void* GetPlatformSurface() { return (void*)m_hDC; }
+ FX_BOOL GDI_SetDIBits(const CFX_DIBitmap* pBitmap,
+ const FX_RECT* pSrcRect,
+ int left,
+ int top,
+ void* pIccTransform);
+ FX_BOOL GDI_StretchDIBits(const CFX_DIBitmap* pBitmap,
+ int dest_left,
+ int dest_top,
+ int dest_width,
+ int dest_height,
+ FX_DWORD flags,
+ void* pIccTransform);
+ FX_BOOL GDI_StretchBitMask(const CFX_DIBitmap* pBitmap,
+ int dest_left,
+ int dest_top,
+ int dest_width,
+ int dest_height,
+ FX_DWORD bitmap_color,
+ FX_DWORD flags,
int alpha_flag,
- void* pIccTransform,
- int blend_type
- );
- virtual FX_BOOL FillRect(const FX_RECT* pRect,
- FX_DWORD fill_color,
- int alpha_flag, void* pIccTransform, int blend_type);
- virtual FX_BOOL DrawCosmeticLine(FX_FLOAT x1, FX_FLOAT y1, FX_FLOAT x2, FX_FLOAT y2, FX_DWORD color,
- int alpha_flag, void* pIccTransform, int blend_type);
- virtual void* GetClipRgn() ;
- virtual FX_BOOL SetClipRgn(void* pRgn) ;
- virtual FX_BOOL GetClipBox(FX_RECT* pRect);
- virtual FX_BOOL DeleteDeviceRgn(void* pRgn);
- virtual void DrawLine(FX_FLOAT x1, FX_FLOAT y1, FX_FLOAT x2, FX_FLOAT y2);
- virtual void* GetPlatformSurface()
- {
- return (void*)m_hDC;
- }
- FX_BOOL GDI_SetDIBits(const CFX_DIBitmap* pBitmap, const FX_RECT* pSrcRect, int left, int top,
- void* pIccTransform);
- FX_BOOL GDI_StretchDIBits(const CFX_DIBitmap* pBitmap, int dest_left, int dest_top,
- int dest_width, int dest_height, FX_DWORD flags,
- void* pIccTransform);
- FX_BOOL GDI_StretchBitMask(const CFX_DIBitmap* pBitmap, int dest_left, int dest_top,
- int dest_width, int dest_height, FX_DWORD bitmap_color, FX_DWORD flags,
- int alpha_flag, void* pIccTransform);
- HDC m_hDC;
- int m_Width, m_Height, m_nBitsPerPixel;
- int m_DeviceClass, m_RenderCaps;
- CGdiDeviceDriver(HDC hDC, int device_class);
- ~CGdiDeviceDriver() {}
+ void* pIccTransform);
+ HDC m_hDC;
+ int m_Width, m_Height, m_nBitsPerPixel;
+ int m_DeviceClass, m_RenderCaps;
+ CGdiDeviceDriver(HDC hDC, int device_class);
+ ~CGdiDeviceDriver() {}
};
-class CGdiDisplayDriver : public CGdiDeviceDriver
-{
-public:
- CGdiDisplayDriver(HDC hDC);
-protected:
- virtual FX_BOOL GetDIBits(CFX_DIBitmap* pBitmap, int left, int top, void* pIccTransform = NULL, FX_BOOL bDEdge = FALSE);
- virtual FX_BOOL SetDIBits(const CFX_DIBSource* pBitmap, FX_DWORD color, const FX_RECT* pSrcRect, int left, int top, int blend_type,
- int alpha_flag, void* pIccTransform);
- virtual FX_BOOL StretchDIBits(const CFX_DIBSource* pBitmap, FX_DWORD color, int dest_left, int dest_top,
- int dest_width, int dest_height, const FX_RECT* pClipRect, FX_DWORD flags,
- int alpha_flag, void* pIccTransform, int blend_type);
- virtual FX_BOOL StartDIBits(const CFX_DIBSource* pBitmap, int bitmap_alpha, FX_DWORD color,
- const CFX_AffineMatrix* pMatrix, FX_DWORD render_flags, void*& handle,
- int alpha_flag, void* pIccTransform, int blend_type)
- {
- return FALSE;
- }
- FX_BOOL UseFoxitStretchEngine(const CFX_DIBSource* pSource, FX_DWORD color, int dest_left, int dest_top,
- int dest_width, int dest_height, const FX_RECT* pClipRect, int render_flags,
- int alpha_flag = 0, void* pIccTransform = NULL, int blend_type = FXDIB_BLEND_NORMAL);
+class CGdiDisplayDriver : public CGdiDeviceDriver {
+ public:
+ CGdiDisplayDriver(HDC hDC);
+
+ protected:
+ virtual FX_BOOL GetDIBits(CFX_DIBitmap* pBitmap,
+ int left,
+ int top,
+ void* pIccTransform = NULL,
+ FX_BOOL bDEdge = FALSE);
+ virtual FX_BOOL SetDIBits(const CFX_DIBSource* pBitmap,
+ FX_DWORD color,
+ const FX_RECT* pSrcRect,
+ int left,
+ int top,
+ int blend_type,
+ int alpha_flag,
+ void* pIccTransform);
+ virtual FX_BOOL StretchDIBits(const CFX_DIBSource* pBitmap,
+ FX_DWORD color,
+ int dest_left,
+ int dest_top,
+ int dest_width,
+ int dest_height,
+ const FX_RECT* pClipRect,
+ FX_DWORD flags,
+ int alpha_flag,
+ void* pIccTransform,
+ int blend_type);
+ virtual FX_BOOL StartDIBits(const CFX_DIBSource* pBitmap,
+ int bitmap_alpha,
+ FX_DWORD color,
+ const CFX_AffineMatrix* pMatrix,
+ FX_DWORD render_flags,
+ void*& handle,
+ int alpha_flag,
+ void* pIccTransform,
+ int blend_type) {
+ return FALSE;
+ }
+ FX_BOOL UseFoxitStretchEngine(const CFX_DIBSource* pSource,
+ FX_DWORD color,
+ int dest_left,
+ int dest_top,
+ int dest_width,
+ int dest_height,
+ const FX_RECT* pClipRect,
+ int render_flags,
+ int alpha_flag = 0,
+ void* pIccTransform = NULL,
+ int blend_type = FXDIB_BLEND_NORMAL);
};
-class CGdiPrinterDriver : public CGdiDeviceDriver
-{
-public:
- CGdiPrinterDriver(HDC hDC);
-protected:
- virtual int GetDeviceCaps(int caps_id);
- virtual FX_BOOL SetDIBits(const CFX_DIBSource* pBitmap, FX_DWORD color, const FX_RECT* pSrcRect, int left, int top, int blend_type,
- int alpha_flag, void* pIccTransform);
- virtual FX_BOOL StretchDIBits(const CFX_DIBSource* pBitmap, FX_DWORD color, int dest_left, int dest_top,
- int dest_width, int dest_height, const FX_RECT* pClipRect, FX_DWORD flags,
- int alpha_flag, void* pIccTransform, int blend_type);
- virtual FX_BOOL StartDIBits(const CFX_DIBSource* pBitmap, int bitmap_alpha, FX_DWORD color,
- const CFX_AffineMatrix* pMatrix, FX_DWORD render_flags, void*& handle,
- int alpha_flag, void* pIccTransform, int blend_type);
- int m_HorzSize, m_VertSize;
- FX_BOOL m_bSupportROP;
+class CGdiPrinterDriver : public CGdiDeviceDriver {
+ public:
+ CGdiPrinterDriver(HDC hDC);
+
+ protected:
+ virtual int GetDeviceCaps(int caps_id);
+ virtual FX_BOOL SetDIBits(const CFX_DIBSource* pBitmap,
+ FX_DWORD color,
+ const FX_RECT* pSrcRect,
+ int left,
+ int top,
+ int blend_type,
+ int alpha_flag,
+ void* pIccTransform);
+ virtual FX_BOOL StretchDIBits(const CFX_DIBSource* pBitmap,
+ FX_DWORD color,
+ int dest_left,
+ int dest_top,
+ int dest_width,
+ int dest_height,
+ const FX_RECT* pClipRect,
+ FX_DWORD flags,
+ int alpha_flag,
+ void* pIccTransform,
+ int blend_type);
+ virtual FX_BOOL StartDIBits(const CFX_DIBSource* pBitmap,
+ int bitmap_alpha,
+ FX_DWORD color,
+ const CFX_AffineMatrix* pMatrix,
+ FX_DWORD render_flags,
+ void*& handle,
+ int alpha_flag,
+ void* pIccTransform,
+ int blend_type);
+ int m_HorzSize, m_VertSize;
+ FX_BOOL m_bSupportROP;
};
-class CPSOutput : public IFX_PSOutput
-{
-public:
- CPSOutput(HDC hDC);
- virtual ~CPSOutput();
- virtual void Release()
- {
- delete this;
- }
- void Init();
- virtual void OutputPS(const FX_CHAR* string, int len);
- HDC m_hDC;
- FX_CHAR* m_pBuf;
+class CPSOutput : public IFX_PSOutput {
+ public:
+ CPSOutput(HDC hDC);
+ virtual ~CPSOutput();
+ virtual void Release() { delete this; }
+ void Init();
+ virtual void OutputPS(const FX_CHAR* string, int len);
+ HDC m_hDC;
+ FX_CHAR* m_pBuf;
};
-class CPSPrinterDriver : public IFX_RenderDeviceDriver
-{
-public:
- CPSPrinterDriver();
- FX_BOOL Init(HDC hDC, int ps_level, FX_BOOL bCmykOutput);
- ~CPSPrinterDriver();
-protected:
- virtual FX_BOOL IsPSPrintDriver()
- {
- return TRUE;
- }
- virtual int GetDeviceCaps(int caps_id);
- virtual FX_BOOL StartRendering();
- virtual void EndRendering();
- virtual void SaveState();
- virtual void RestoreState(FX_BOOL bKeepSaved = FALSE);
- virtual FX_BOOL SetClip_PathFill(const CFX_PathData* pPathData,
+class CPSPrinterDriver : public IFX_RenderDeviceDriver {
+ public:
+ CPSPrinterDriver();
+ FX_BOOL Init(HDC hDC, int ps_level, FX_BOOL bCmykOutput);
+ ~CPSPrinterDriver();
+
+ protected:
+ virtual FX_BOOL IsPSPrintDriver() { return TRUE; }
+ virtual int GetDeviceCaps(int caps_id);
+ virtual FX_BOOL StartRendering();
+ virtual void EndRendering();
+ virtual void SaveState();
+ virtual void RestoreState(FX_BOOL bKeepSaved = FALSE);
+ virtual FX_BOOL SetClip_PathFill(const CFX_PathData* pPathData,
+ const CFX_AffineMatrix* pObject2Device,
+ int fill_mode);
+ virtual FX_BOOL SetClip_PathStroke(const CFX_PathData* pPathData,
const CFX_AffineMatrix* pObject2Device,
- int fill_mode
- );
- virtual FX_BOOL SetClip_PathStroke(const CFX_PathData* pPathData,
- const CFX_AffineMatrix* pObject2Device,
- const CFX_GraphStateData* pGraphState
- );
- virtual FX_BOOL DrawPath(const CFX_PathData* pPathData,
- const CFX_AffineMatrix* pObject2Device,
- const CFX_GraphStateData* pGraphState,
- FX_DWORD fill_color,
- FX_DWORD stroke_color,
- int fill_mode,
- int alpha_flag,
- void* pIccTransform,
- int blend_type
- );
- virtual FX_BOOL GetClipBox(FX_RECT* pRect);
- virtual FX_BOOL SetDIBits(const CFX_DIBSource* pBitmap, FX_DWORD color, const FX_RECT* pSrcRect, int left, int top, int blend_type,
- int alpha_flag, void* pIccTransform);
- virtual FX_BOOL StretchDIBits(const CFX_DIBSource* pBitmap, FX_DWORD color, int dest_left, int dest_top,
- int dest_width, int dest_height, const FX_RECT* pClipRect, FX_DWORD flags,
- int alpha_flag, void* pIccTransform, int blend_type);
- virtual FX_BOOL StartDIBits(const CFX_DIBSource* pBitmap, int bitmap_alpha, FX_DWORD color,
- const CFX_AffineMatrix* pMatrix, FX_DWORD render_flags, void*& handle,
- int alpha_flag, void* pIccTransform, int blend_type);
- virtual FX_BOOL DrawDeviceText(int nChars, const FXTEXT_CHARPOS* pCharPos, CFX_Font* pFont,
- CFX_FontCache* pCache, const CFX_AffineMatrix* pObject2Device, FX_FLOAT font_size, FX_DWORD color,
- int alpha_flag, void* pIccTransform);
- virtual void* GetPlatformSurface()
- {
- return (void*)m_hDC;
- }
- HDC m_hDC;
- FX_BOOL m_bCmykOutput;
- int m_Width, m_Height, m_nBitsPerPixel;
- int m_HorzSize, m_VertSize;
- CPSOutput* m_pPSOutput;
- CFX_PSRenderer m_PSRenderer;
+ const CFX_GraphStateData* pGraphState);
+ virtual FX_BOOL DrawPath(const CFX_PathData* pPathData,
+ const CFX_AffineMatrix* pObject2Device,
+ const CFX_GraphStateData* pGraphState,
+ FX_DWORD fill_color,
+ FX_DWORD stroke_color,
+ int fill_mode,
+ int alpha_flag,
+ void* pIccTransform,
+ int blend_type);
+ virtual FX_BOOL GetClipBox(FX_RECT* pRect);
+ virtual FX_BOOL SetDIBits(const CFX_DIBSource* pBitmap,
+ FX_DWORD color,
+ const FX_RECT* pSrcRect,
+ int left,
+ int top,
+ int blend_type,
+ int alpha_flag,
+ void* pIccTransform);
+ virtual FX_BOOL StretchDIBits(const CFX_DIBSource* pBitmap,
+ FX_DWORD color,
+ int dest_left,
+ int dest_top,
+ int dest_width,
+ int dest_height,
+ const FX_RECT* pClipRect,
+ FX_DWORD flags,
+ int alpha_flag,
+ void* pIccTransform,
+ int blend_type);
+ virtual FX_BOOL StartDIBits(const CFX_DIBSource* pBitmap,
+ int bitmap_alpha,
+ FX_DWORD color,
+ const CFX_AffineMatrix* pMatrix,
+ FX_DWORD render_flags,
+ void*& handle,
+ int alpha_flag,
+ void* pIccTransform,
+ int blend_type);
+ virtual FX_BOOL DrawDeviceText(int nChars,
+ const FXTEXT_CHARPOS* pCharPos,
+ CFX_Font* pFont,
+ CFX_FontCache* pCache,
+ const CFX_AffineMatrix* pObject2Device,
+ FX_FLOAT font_size,
+ FX_DWORD color,
+ int alpha_flag,
+ void* pIccTransform);
+ virtual void* GetPlatformSurface() { return (void*)m_hDC; }
+ HDC m_hDC;
+ FX_BOOL m_bCmykOutput;
+ int m_Width, m_Height, m_nBitsPerPixel;
+ int m_HorzSize, m_VertSize;
+ CPSOutput* m_pPSOutput;
+ CFX_PSRenderer m_PSRenderer;
};
-void _Color2Argb(FX_ARGB& argb, FX_DWORD color, int alpha_flag, void* pIccTransform);
+void _Color2Argb(FX_ARGB& argb,
+ FX_DWORD color,
+ int alpha_flag,
+ void* pIccTransform);
#endif // CORE_SRC_FXGE_WIN32_WIN32_INT_H_
diff --git a/fpdfsdk/include/formfiller/FFL_CBA_Fontmap.h b/fpdfsdk/include/formfiller/FFL_CBA_Fontmap.h
index 3be49fc2de..7978150736 100644
--- a/fpdfsdk/include/formfiller/FFL_CBA_Fontmap.h
+++ b/fpdfsdk/include/formfiller/FFL_CBA_Fontmap.h
@@ -12,39 +12,43 @@
class CPDF_Dictionary;
class CPDFSDK_Annot;
-class CBA_FontMap : public CPWL_FontMap
-{
-public:
- CBA_FontMap(CPDFSDK_Annot* pAnnot, IFX_SystemHandler* pSystemHandler);
- CBA_FontMap(CPDF_Document* pDocument, CPDF_Dictionary* pAnnotDict, IFX_SystemHandler* pSystemHandler);
-
- virtual ~CBA_FontMap();
-
- virtual void Initial(const FX_CHAR* fontname = NULL);
-
-public:
- void SetDefaultFont(CPDF_Font * pFont, const CFX_ByteString & sFontName);
-
- void Reset();
- void SetAPType(const CFX_ByteString& sAPType);
-
-protected:
- virtual CPDF_Font* FindFontSameCharset(CFX_ByteString& sFontAlias, int32_t nCharset);
- virtual void AddedFont(CPDF_Font* pFont, const CFX_ByteString& sFontAlias);
- virtual CPDF_Document* GetDocument();
-private:
- CPDF_Font* FindResFontSameCharset(CPDF_Dictionary* pResDict, CFX_ByteString& sFontAlias,
- int32_t nCharset);
- CPDF_Font* GetAnnotDefaultFont(CFX_ByteString &csNameTag);
- void AddFontToAnnotDict(CPDF_Font* pFont, const CFX_ByteString& sAlias);
-
-private:
- CPDF_Document* m_pDocument;
- CPDF_Dictionary* m_pAnnotDict;
- CPDF_Font* m_pDefaultFont;
- CFX_ByteString m_sDefaultFontName;
-
- CFX_ByteString m_sAPType;
+class CBA_FontMap : public CPWL_FontMap {
+ public:
+ CBA_FontMap(CPDFSDK_Annot* pAnnot, IFX_SystemHandler* pSystemHandler);
+ CBA_FontMap(CPDF_Document* pDocument,
+ CPDF_Dictionary* pAnnotDict,
+ IFX_SystemHandler* pSystemHandler);
+
+ virtual ~CBA_FontMap();
+
+ virtual void Initial(const FX_CHAR* fontname = NULL);
+
+ public:
+ void SetDefaultFont(CPDF_Font* pFont, const CFX_ByteString& sFontName);
+
+ void Reset();
+ void SetAPType(const CFX_ByteString& sAPType);
+
+ protected:
+ virtual CPDF_Font* FindFontSameCharset(CFX_ByteString& sFontAlias,
+ int32_t nCharset);
+ virtual void AddedFont(CPDF_Font* pFont, const CFX_ByteString& sFontAlias);
+ virtual CPDF_Document* GetDocument();
+
+ private:
+ CPDF_Font* FindResFontSameCharset(CPDF_Dictionary* pResDict,
+ CFX_ByteString& sFontAlias,
+ int32_t nCharset);
+ CPDF_Font* GetAnnotDefaultFont(CFX_ByteString& csNameTag);
+ void AddFontToAnnotDict(CPDF_Font* pFont, const CFX_ByteString& sAlias);
+
+ private:
+ CPDF_Document* m_pDocument;
+ CPDF_Dictionary* m_pAnnotDict;
+ CPDF_Font* m_pDefaultFont;
+ CFX_ByteString m_sDefaultFontName;
+
+ CFX_ByteString m_sAPType;
};
#endif // FPDFSDK_INCLUDE_FORMFILLER_FFL_CBA_FONTMAP_H_
diff --git a/fpdfsdk/include/formfiller/FFL_CheckBox.h b/fpdfsdk/include/formfiller/FFL_CheckBox.h
index 3deeae8aa7..0ac7170a16 100644
--- a/fpdfsdk/include/formfiller/FFL_CheckBox.h
+++ b/fpdfsdk/include/formfiller/FFL_CheckBox.h
@@ -9,21 +9,25 @@
#include "FFL_FormFiller.h"
-class CFFL_CheckBox : public CFFL_Button
-{
-public:
- CFFL_CheckBox(CPDFDoc_Environment* pApp, CPDFSDK_Widget* pWidget);
- virtual ~CFFL_CheckBox();
-
- virtual CPWL_Wnd* NewPDFWindow(const PWL_CREATEPARAM& cp, CPDFSDK_PageView* pPageView);
-
- virtual FX_BOOL OnKeyDown(CPDFSDK_Annot* pAnnot, FX_UINT nKeyCode, FX_UINT nFlags);
- virtual FX_BOOL OnChar(CPDFSDK_Annot* pAnnot, FX_UINT nChar, FX_UINT nFlags);
- virtual FX_BOOL OnLButtonUp(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point);
-
- virtual FX_BOOL IsDataChanged(CPDFSDK_PageView* pPageView);
- virtual void SaveData(CPDFSDK_PageView* pPageView);
+class CFFL_CheckBox : public CFFL_Button {
+ public:
+ CFFL_CheckBox(CPDFDoc_Environment* pApp, CPDFSDK_Widget* pWidget);
+ virtual ~CFFL_CheckBox();
+
+ virtual CPWL_Wnd* NewPDFWindow(const PWL_CREATEPARAM& cp,
+ CPDFSDK_PageView* pPageView);
+
+ virtual FX_BOOL OnKeyDown(CPDFSDK_Annot* pAnnot,
+ FX_UINT nKeyCode,
+ FX_UINT nFlags);
+ virtual FX_BOOL OnChar(CPDFSDK_Annot* pAnnot, FX_UINT nChar, FX_UINT nFlags);
+ virtual FX_BOOL OnLButtonUp(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_UINT nFlags,
+ const CPDF_Point& point);
+
+ virtual FX_BOOL IsDataChanged(CPDFSDK_PageView* pPageView);
+ virtual void SaveData(CPDFSDK_PageView* pPageView);
};
#endif // FPDFSDK_INCLUDE_FORMFILLER_FFL_CHECKBOX_H_
-
diff --git a/fpdfsdk/include/formfiller/FFL_ComboBox.h b/fpdfsdk/include/formfiller/FFL_ComboBox.h
index e5c65c2715..5be7198918 100644
--- a/fpdfsdk/include/formfiller/FFL_ComboBox.h
+++ b/fpdfsdk/include/formfiller/FFL_ComboBox.h
@@ -13,56 +13,63 @@
class CBA_FontMap;
class CPDFSDK_Document;
-struct FFL_ComboBoxState
-{
- int nIndex;
- int nStart;
- int nEnd;
- CFX_WideString sValue;
+struct FFL_ComboBoxState {
+ int nIndex;
+ int nStart;
+ int nEnd;
+ CFX_WideString sValue;
};
-class CFFL_ComboBox : public CFFL_FormFiller, public IPWL_FocusHandler, public IPWL_Edit_Notify
-{
-public:
- CFFL_ComboBox(CPDFDoc_Environment* pApp, CPDFSDK_Annot* pWidget);
- virtual ~CFFL_ComboBox();
-
- virtual PWL_CREATEPARAM GetCreateParam();
- virtual CPWL_Wnd* NewPDFWindow(const PWL_CREATEPARAM& cp, CPDFSDK_PageView* pPageView);
-
-
- virtual FX_BOOL OnChar(CPDFSDK_Annot* pAnnot, FX_UINT nChar, FX_UINT nFlags);
-
- virtual FX_BOOL IsDataChanged(CPDFSDK_PageView* pPageView);
- virtual void SaveData(CPDFSDK_PageView* pPageView);
-
- virtual void GetActionData(CPDFSDK_PageView* pPageView, CPDF_AAction::AActionType type, PDFSDK_FieldAction& fa);
- virtual void SetActionData(CPDFSDK_PageView* pPageView, CPDF_AAction::AActionType type, const PDFSDK_FieldAction& fa);
- virtual FX_BOOL IsActionDataChanged(CPDF_AAction::AActionType type, const PDFSDK_FieldAction& faOld, const PDFSDK_FieldAction& faNew);
- virtual void SaveState(CPDFSDK_PageView* pPageView);
- virtual void RestoreState(CPDFSDK_PageView* pPageView);
-
- virtual CPWL_Wnd* ResetPDFWindow(CPDFSDK_PageView* pPageView, FX_BOOL bRestoreValue);
- virtual void OnKeyStroke(FX_BOOL bKeyDown, FX_UINT nFlag);
-
-public:
- virtual void OnSetFocus(CPWL_Wnd* pWnd);
- virtual void OnKillFocus(CPWL_Wnd* pWnd);
-
-public:
- virtual void OnAddUndo(CPWL_Edit* pEdit);
-
-public:
- virtual FX_BOOL CanCopy(CPDFSDK_Document* pDocument);
- virtual FX_BOOL CanCut(CPDFSDK_Document* pDocument);
- virtual FX_BOOL CanPaste(CPDFSDK_Document* pDocument);
-
-private:
- CFX_WideString GetSelectExportText();
-
-private:
- CBA_FontMap* m_pFontMap;
- FFL_ComboBoxState m_State;
+class CFFL_ComboBox : public CFFL_FormFiller,
+ public IPWL_FocusHandler,
+ public IPWL_Edit_Notify {
+ public:
+ CFFL_ComboBox(CPDFDoc_Environment* pApp, CPDFSDK_Annot* pWidget);
+ virtual ~CFFL_ComboBox();
+
+ virtual PWL_CREATEPARAM GetCreateParam();
+ virtual CPWL_Wnd* NewPDFWindow(const PWL_CREATEPARAM& cp,
+ CPDFSDK_PageView* pPageView);
+
+ virtual FX_BOOL OnChar(CPDFSDK_Annot* pAnnot, FX_UINT nChar, FX_UINT nFlags);
+
+ virtual FX_BOOL IsDataChanged(CPDFSDK_PageView* pPageView);
+ virtual void SaveData(CPDFSDK_PageView* pPageView);
+
+ virtual void GetActionData(CPDFSDK_PageView* pPageView,
+ CPDF_AAction::AActionType type,
+ PDFSDK_FieldAction& fa);
+ virtual void SetActionData(CPDFSDK_PageView* pPageView,
+ CPDF_AAction::AActionType type,
+ const PDFSDK_FieldAction& fa);
+ virtual FX_BOOL IsActionDataChanged(CPDF_AAction::AActionType type,
+ const PDFSDK_FieldAction& faOld,
+ const PDFSDK_FieldAction& faNew);
+ virtual void SaveState(CPDFSDK_PageView* pPageView);
+ virtual void RestoreState(CPDFSDK_PageView* pPageView);
+
+ virtual CPWL_Wnd* ResetPDFWindow(CPDFSDK_PageView* pPageView,
+ FX_BOOL bRestoreValue);
+ virtual void OnKeyStroke(FX_BOOL bKeyDown, FX_UINT nFlag);
+
+ public:
+ virtual void OnSetFocus(CPWL_Wnd* pWnd);
+ virtual void OnKillFocus(CPWL_Wnd* pWnd);
+
+ public:
+ virtual void OnAddUndo(CPWL_Edit* pEdit);
+
+ public:
+ virtual FX_BOOL CanCopy(CPDFSDK_Document* pDocument);
+ virtual FX_BOOL CanCut(CPDFSDK_Document* pDocument);
+ virtual FX_BOOL CanPaste(CPDFSDK_Document* pDocument);
+
+ private:
+ CFX_WideString GetSelectExportText();
+
+ private:
+ CBA_FontMap* m_pFontMap;
+ FFL_ComboBoxState m_State;
};
#endif // FPDFSDK_INCLUDE_FORMFILLER_FFL_COMBOBOX_H_
diff --git a/fpdfsdk/include/formfiller/FFL_FormFiller.h b/fpdfsdk/include/formfiller/FFL_FormFiller.h
index fc858a8822..64c813671a 100644
--- a/fpdfsdk/include/formfiller/FFL_FormFiller.h
+++ b/fpdfsdk/include/formfiller/FFL_FormFiller.h
@@ -18,138 +18,187 @@ class CPDFSDK_PageView;
class CPDFSDK_Document;
class CPDFSDK_Widget;
-class CFFL_FormFiller : public IPWL_Provider, public CPWL_TimerHandler
-{
-public:
- CFFL_FormFiller(CPDFDoc_Environment* pApp, CPDFSDK_Annot* pAnnot);
- virtual ~CFFL_FormFiller();
-
- virtual FX_RECT GetViewBBox(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot);
- virtual void OnDraw(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot,
- CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device,
- FX_DWORD dwFlags);
- virtual void OnDrawDeactive(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot,
- CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device,
- FX_DWORD dwFlags);
-
- virtual void OnCreate(CPDFSDK_Annot* pAnnot);
- virtual void OnLoad(CPDFSDK_Annot* pAnnot);
- virtual void OnDelete(CPDFSDK_Annot* pAnnot);
-
- virtual void OnMouseEnter(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot);
- virtual void OnMouseExit(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot);
-
- virtual FX_BOOL OnLButtonDown(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point);
- virtual FX_BOOL OnLButtonUp(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point);
- virtual FX_BOOL OnLButtonDblClk(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point);
- virtual FX_BOOL OnMouseMove(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point);
- virtual FX_BOOL OnMouseWheel(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, short zDelta, const CPDF_Point& point);
- virtual FX_BOOL OnRButtonDown(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point);
- virtual FX_BOOL OnRButtonUp(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point);
-
- virtual FX_BOOL OnKeyDown(CPDFSDK_Annot* pAnnot, FX_UINT nKeyCode, FX_UINT nFlags);
- virtual FX_BOOL OnChar(CPDFSDK_Annot* pAnnot, FX_UINT nChar, FX_UINT nFlags);
-
- virtual FX_BOOL OnSetFocus(CPDFSDK_Annot* pAnnot, FX_UINT nFlag);
- virtual FX_BOOL OnKillFocus(CPDFSDK_Annot* pAnnot, FX_UINT nFlag);
-
- virtual FX_BOOL CanCopy(CPDFSDK_Document* pDocument);
- virtual FX_BOOL CanCut(CPDFSDK_Document* pDocument);
- virtual FX_BOOL CanPaste(CPDFSDK_Document* pDocument);
-
- virtual void DoCopy(CPDFSDK_Document* pDocument);
- virtual void DoCut(CPDFSDK_Document* pDocument);
- virtual void DoPaste(CPDFSDK_Document* pDocument);
-
- // CPWL_TimerHandler
- virtual void TimerProc();
- virtual IFX_SystemHandler* GetSystemHandler() const;
-
- virtual CPDF_Matrix GetWindowMatrix(void* pAttachedData);
- virtual CFX_WideString LoadPopupMenuString(int nIndex);
-
- virtual void GetActionData(CPDFSDK_PageView* pPageView, CPDF_AAction::AActionType type,
- PDFSDK_FieldAction& fa);
- virtual void SetActionData(CPDFSDK_PageView* pPageView, CPDF_AAction::AActionType type,
- const PDFSDK_FieldAction& fa);
- virtual FX_BOOL IsActionDataChanged(CPDF_AAction::AActionType type, const PDFSDK_FieldAction& faOld,
- const PDFSDK_FieldAction& faNew);
-
- virtual void SaveState(CPDFSDK_PageView* pPageView);
- virtual void RestoreState(CPDFSDK_PageView* pPageView);
-
- virtual CPWL_Wnd* ResetPDFWindow(CPDFSDK_PageView* pPageView, FX_BOOL bRestoreValue);
-
- virtual void OnKeyStroke(FX_BOOL bKeyDown);
-
- CPDF_Matrix GetCurMatrix();
-
- CPDF_Rect FFLtoPWL(const CPDF_Rect& rect);
- CPDF_Rect PWLtoFFL(const CPDF_Rect& rect);
- CPDF_Point FFLtoPWL(const CPDF_Point& point);
- CPDF_Point PWLtoFFL(const CPDF_Point& point);
-
- CPDF_Point WndtoPWL(CPDFSDK_PageView* pPageView, const CPDF_Point& pt);
- CPDF_Rect FFLtoWnd(CPDFSDK_PageView* pPageView, const CPDF_Rect& rect);
-
- void SetWindowRect(CPDFSDK_PageView* pPageView, const CPDF_Rect& rcWindow);
- CPDF_Rect GetWindowRect(CPDFSDK_PageView* pPageView);
-
- FX_BOOL CommitData(CPDFSDK_PageView* pPageView, FX_UINT nFlag);
- virtual FX_BOOL IsDataChanged(CPDFSDK_PageView* pPageView);
- virtual void SaveData(CPDFSDK_PageView* pPageView);
-
- CPWL_Wnd* GetPDFWindow(CPDFSDK_PageView* pPageView, FX_BOOL bNew);
- void DestroyPDFWindow(CPDFSDK_PageView* pPageView);
- void EscapeFiller(CPDFSDK_PageView* pPageView, FX_BOOL bDestroyPDFWindow);
-
- virtual PWL_CREATEPARAM GetCreateParam();
- virtual CPWL_Wnd* NewPDFWindow(const PWL_CREATEPARAM& cp, CPDFSDK_PageView* pPageView) = 0;
- virtual CPDF_Rect GetFocusBox(CPDFSDK_PageView* pPageView);
-
- FX_BOOL IsValid() const;
- CPDF_Rect GetPDFWindowRect() const;
-
- CPDFSDK_PageView* GetCurPageView();
- void SetChangeMark();
-
- virtual void InvalidateRect(double left, double top, double right, double bottom);
- CPDFDoc_Environment* GetApp(){return m_pApp;}
- CPDFSDK_Annot* GetSDKAnnot() {return m_pAnnot;}
-
-protected:
- using CFFL_PageView2PDFWindow = std::map<CPDFSDK_PageView*, CPWL_Wnd*>;
-
- CPDFDoc_Environment* m_pApp;
- CPDFSDK_Widget* m_pWidget;
- CPDFSDK_Annot* m_pAnnot;
-
- FX_BOOL m_bValid;
- CFFL_PageView2PDFWindow m_Maps;
- CPDF_Point m_ptOldPos;
+class CFFL_FormFiller : public IPWL_Provider, public CPWL_TimerHandler {
+ public:
+ CFFL_FormFiller(CPDFDoc_Environment* pApp, CPDFSDK_Annot* pAnnot);
+ virtual ~CFFL_FormFiller();
+
+ virtual FX_RECT GetViewBBox(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot);
+ virtual void OnDraw(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ CFX_RenderDevice* pDevice,
+ CPDF_Matrix* pUser2Device,
+ FX_DWORD dwFlags);
+ virtual void OnDrawDeactive(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ CFX_RenderDevice* pDevice,
+ CPDF_Matrix* pUser2Device,
+ FX_DWORD dwFlags);
+
+ virtual void OnCreate(CPDFSDK_Annot* pAnnot);
+ virtual void OnLoad(CPDFSDK_Annot* pAnnot);
+ virtual void OnDelete(CPDFSDK_Annot* pAnnot);
+
+ virtual void OnMouseEnter(CPDFSDK_PageView* pPageView, CPDFSDK_Annot* pAnnot);
+ virtual void OnMouseExit(CPDFSDK_PageView* pPageView, CPDFSDK_Annot* pAnnot);
+
+ virtual FX_BOOL OnLButtonDown(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_UINT nFlags,
+ const CPDF_Point& point);
+ virtual FX_BOOL OnLButtonUp(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_UINT nFlags,
+ const CPDF_Point& point);
+ virtual FX_BOOL OnLButtonDblClk(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_UINT nFlags,
+ const CPDF_Point& point);
+ virtual FX_BOOL OnMouseMove(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_UINT nFlags,
+ const CPDF_Point& point);
+ virtual FX_BOOL OnMouseWheel(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_UINT nFlags,
+ short zDelta,
+ const CPDF_Point& point);
+ virtual FX_BOOL OnRButtonDown(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_UINT nFlags,
+ const CPDF_Point& point);
+ virtual FX_BOOL OnRButtonUp(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_UINT nFlags,
+ const CPDF_Point& point);
+
+ virtual FX_BOOL OnKeyDown(CPDFSDK_Annot* pAnnot,
+ FX_UINT nKeyCode,
+ FX_UINT nFlags);
+ virtual FX_BOOL OnChar(CPDFSDK_Annot* pAnnot, FX_UINT nChar, FX_UINT nFlags);
+
+ virtual FX_BOOL OnSetFocus(CPDFSDK_Annot* pAnnot, FX_UINT nFlag);
+ virtual FX_BOOL OnKillFocus(CPDFSDK_Annot* pAnnot, FX_UINT nFlag);
+
+ virtual FX_BOOL CanCopy(CPDFSDK_Document* pDocument);
+ virtual FX_BOOL CanCut(CPDFSDK_Document* pDocument);
+ virtual FX_BOOL CanPaste(CPDFSDK_Document* pDocument);
+
+ virtual void DoCopy(CPDFSDK_Document* pDocument);
+ virtual void DoCut(CPDFSDK_Document* pDocument);
+ virtual void DoPaste(CPDFSDK_Document* pDocument);
+
+ // CPWL_TimerHandler
+ virtual void TimerProc();
+ virtual IFX_SystemHandler* GetSystemHandler() const;
+
+ virtual CPDF_Matrix GetWindowMatrix(void* pAttachedData);
+ virtual CFX_WideString LoadPopupMenuString(int nIndex);
+
+ virtual void GetActionData(CPDFSDK_PageView* pPageView,
+ CPDF_AAction::AActionType type,
+ PDFSDK_FieldAction& fa);
+ virtual void SetActionData(CPDFSDK_PageView* pPageView,
+ CPDF_AAction::AActionType type,
+ const PDFSDK_FieldAction& fa);
+ virtual FX_BOOL IsActionDataChanged(CPDF_AAction::AActionType type,
+ const PDFSDK_FieldAction& faOld,
+ const PDFSDK_FieldAction& faNew);
+
+ virtual void SaveState(CPDFSDK_PageView* pPageView);
+ virtual void RestoreState(CPDFSDK_PageView* pPageView);
+
+ virtual CPWL_Wnd* ResetPDFWindow(CPDFSDK_PageView* pPageView,
+ FX_BOOL bRestoreValue);
+
+ virtual void OnKeyStroke(FX_BOOL bKeyDown);
+
+ CPDF_Matrix GetCurMatrix();
+
+ CPDF_Rect FFLtoPWL(const CPDF_Rect& rect);
+ CPDF_Rect PWLtoFFL(const CPDF_Rect& rect);
+ CPDF_Point FFLtoPWL(const CPDF_Point& point);
+ CPDF_Point PWLtoFFL(const CPDF_Point& point);
+
+ CPDF_Point WndtoPWL(CPDFSDK_PageView* pPageView, const CPDF_Point& pt);
+ CPDF_Rect FFLtoWnd(CPDFSDK_PageView* pPageView, const CPDF_Rect& rect);
+
+ void SetWindowRect(CPDFSDK_PageView* pPageView, const CPDF_Rect& rcWindow);
+ CPDF_Rect GetWindowRect(CPDFSDK_PageView* pPageView);
+
+ FX_BOOL CommitData(CPDFSDK_PageView* pPageView, FX_UINT nFlag);
+ virtual FX_BOOL IsDataChanged(CPDFSDK_PageView* pPageView);
+ virtual void SaveData(CPDFSDK_PageView* pPageView);
+
+ CPWL_Wnd* GetPDFWindow(CPDFSDK_PageView* pPageView, FX_BOOL bNew);
+ void DestroyPDFWindow(CPDFSDK_PageView* pPageView);
+ void EscapeFiller(CPDFSDK_PageView* pPageView, FX_BOOL bDestroyPDFWindow);
+
+ virtual PWL_CREATEPARAM GetCreateParam();
+ virtual CPWL_Wnd* NewPDFWindow(const PWL_CREATEPARAM& cp,
+ CPDFSDK_PageView* pPageView) = 0;
+ virtual CPDF_Rect GetFocusBox(CPDFSDK_PageView* pPageView);
+
+ FX_BOOL IsValid() const;
+ CPDF_Rect GetPDFWindowRect() const;
+
+ CPDFSDK_PageView* GetCurPageView();
+ void SetChangeMark();
+
+ virtual void InvalidateRect(double left,
+ double top,
+ double right,
+ double bottom);
+ CPDFDoc_Environment* GetApp() { return m_pApp; }
+ CPDFSDK_Annot* GetSDKAnnot() { return m_pAnnot; }
+
+ protected:
+ using CFFL_PageView2PDFWindow = std::map<CPDFSDK_PageView*, CPWL_Wnd*>;
+
+ CPDFDoc_Environment* m_pApp;
+ CPDFSDK_Widget* m_pWidget;
+ CPDFSDK_Annot* m_pAnnot;
+
+ FX_BOOL m_bValid;
+ CFFL_PageView2PDFWindow m_Maps;
+ CPDF_Point m_ptOldPos;
};
-class CFFL_Button : public CFFL_FormFiller
-{
-public:
- CFFL_Button(CPDFDoc_Environment* pApp, CPDFSDK_Annot* pWidget);
- virtual ~CFFL_Button();
-
- virtual void OnMouseEnter(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot);
- virtual void OnMouseExit(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot);
- virtual FX_BOOL OnLButtonDown(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point);
- virtual FX_BOOL OnLButtonUp(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point);
- virtual FX_BOOL OnMouseMove(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point);
- virtual void OnDraw(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot,
- CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device,
- FX_DWORD dwFlags);
-
- virtual void OnDrawDeactive(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot,
- CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device,
- FX_DWORD dwFlags);
-protected:
- FX_BOOL m_bMouseIn;
- FX_BOOL m_bMouseDown;
+class CFFL_Button : public CFFL_FormFiller {
+ public:
+ CFFL_Button(CPDFDoc_Environment* pApp, CPDFSDK_Annot* pWidget);
+ virtual ~CFFL_Button();
+
+ virtual void OnMouseEnter(CPDFSDK_PageView* pPageView, CPDFSDK_Annot* pAnnot);
+ virtual void OnMouseExit(CPDFSDK_PageView* pPageView, CPDFSDK_Annot* pAnnot);
+ virtual FX_BOOL OnLButtonDown(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_UINT nFlags,
+ const CPDF_Point& point);
+ virtual FX_BOOL OnLButtonUp(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_UINT nFlags,
+ const CPDF_Point& point);
+ virtual FX_BOOL OnMouseMove(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_UINT nFlags,
+ const CPDF_Point& point);
+ virtual void OnDraw(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ CFX_RenderDevice* pDevice,
+ CPDF_Matrix* pUser2Device,
+ FX_DWORD dwFlags);
+
+ virtual void OnDrawDeactive(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ CFX_RenderDevice* pDevice,
+ CPDF_Matrix* pUser2Device,
+ FX_DWORD dwFlags);
+
+ protected:
+ FX_BOOL m_bMouseIn;
+ FX_BOOL m_bMouseDown;
};
#endif // FPDFSDK_INCLUDE_FORMFILLER_FFL_FORMFILLER_H_
diff --git a/fpdfsdk/include/formfiller/FFL_IFormFiller.h b/fpdfsdk/include/formfiller/FFL_IFormFiller.h
index e553723dc3..3acdb237d0 100644
--- a/fpdfsdk/include/formfiller/FFL_IFormFiller.h
+++ b/fpdfsdk/include/formfiller/FFL_IFormFiller.h
@@ -14,80 +14,142 @@
class CFFL_FormFiller;
class CFFL_PrivateData;
-class CFFL_IFormFiller : public IPWL_Filler_Notify
-{
-public:
- CFFL_IFormFiller(CPDFDoc_Environment* pApp);
- virtual ~CFFL_IFormFiller();
-
- virtual FX_BOOL Annot_HitTest(CPDFSDK_PageView* pPageView,CPDFSDK_Annot* pAnnot, CPDF_Point point);
- virtual FX_RECT GetViewBBox(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot);
- virtual void OnDraw(CPDFSDK_PageView *pPageView, /*HDC hDC,*/ CPDFSDK_Annot* pAnnot,
- CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device,
- /*const CRect& rcWindow,*/ FX_DWORD dwFlags);
-
-
- virtual void OnCreate(CPDFSDK_Annot* pAnnot);
- virtual void OnLoad(CPDFSDK_Annot* pAnnot);
- virtual void OnDelete(CPDFSDK_Annot* pAnnot);
-
- virtual void OnMouseEnter(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlag);
- virtual void OnMouseExit(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlag);
-
- virtual FX_BOOL OnLButtonDown(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point);
- virtual FX_BOOL OnLButtonUp(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point);
- virtual FX_BOOL OnLButtonDblClk(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point);
- virtual FX_BOOL OnMouseMove(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point);
- virtual FX_BOOL OnMouseWheel(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, short zDelta, const CPDF_Point& point);
- virtual FX_BOOL OnRButtonDown(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point);
- virtual FX_BOOL OnRButtonUp(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point);
-
- virtual FX_BOOL OnKeyDown(CPDFSDK_Annot* pAnnot, FX_UINT nKeyCode, FX_UINT nFlags);
- virtual FX_BOOL OnChar(CPDFSDK_Annot* pAnnot, FX_UINT nChar, FX_UINT nFlags);
-
- virtual FX_BOOL OnSetFocus(CPDFSDK_Annot* pAnnot,FX_UINT nFlag);
- virtual FX_BOOL OnKillFocus(CPDFSDK_Annot* pAnnot, FX_UINT nFlag);
-
- virtual void QueryWherePopup(void* pPrivateData, FX_FLOAT fPopupMin,FX_FLOAT fPopupMax, int32_t & nRet, FX_FLOAT & fPopupRet);
- virtual void OnBeforeKeyStroke(FX_BOOL bEditOrList, void* pPrivateData, int32_t nKeyCode,
- CFX_WideString & strChange, const CFX_WideString& strChangeEx,
- int nSelStart, int nSelEnd,
- FX_BOOL bKeyDown, FX_BOOL & bRC, FX_BOOL & bExit, FX_DWORD nFlag);
- virtual void OnAfterKeyStroke(FX_BOOL bEditOrList, void* pPrivateData, FX_BOOL & bExit, FX_DWORD nFlag) ;
-
- CFFL_FormFiller* GetFormFiller(CPDFSDK_Annot* pAnnot, FX_BOOL bRegister);
- void RemoveFormFiller(CPDFSDK_Annot* pAnnot);
-
- static FX_BOOL IsVisible(CPDFSDK_Widget* pWidget);
- static FX_BOOL IsReadOnly(CPDFSDK_Widget* pWidget);
- static FX_BOOL IsFillingAllowed(CPDFSDK_Widget* pWidget);
- static FX_BOOL IsValidAnnot(CPDFSDK_PageView* pPageView, CPDFSDK_Annot* pAnnot);
-
- void OnKeyStrokeCommit(CPDFSDK_Widget* pWidget, CPDFSDK_PageView* pPageView, FX_BOOL& bRC, FX_BOOL& bExit, FX_DWORD nFlag);
- void OnValidate(CPDFSDK_Widget* pWidget, CPDFSDK_PageView* pPageView, FX_BOOL& bRC, FX_BOOL& bExit, FX_DWORD nFlag);
-
- void OnCalculate(CPDFSDK_Widget* pWidget, CPDFSDK_PageView* pPageView, FX_BOOL& bExit, FX_DWORD nFlag);
- void OnFormat(CPDFSDK_Widget* pWidget, CPDFSDK_PageView* pPageView, FX_BOOL& bExit, FX_DWORD nFlag);
- void OnButtonUp(CPDFSDK_Widget* pWidget, CPDFSDK_PageView* pPageView, FX_BOOL& bReset, FX_BOOL& bExit,FX_UINT nFlag);
-
-private:
- using CFFL_Widget2Filler = std::map<CPDFSDK_Annot*, CFFL_FormFiller*>;
-
- void UnRegisterFormFiller(CPDFSDK_Annot* pAnnot);
-
- CPDFDoc_Environment* m_pApp;
- CFFL_Widget2Filler m_Maps;
- FX_BOOL m_bNotifying;
+class CFFL_IFormFiller : public IPWL_Filler_Notify {
+ public:
+ CFFL_IFormFiller(CPDFDoc_Environment* pApp);
+ virtual ~CFFL_IFormFiller();
+
+ virtual FX_BOOL Annot_HitTest(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ CPDF_Point point);
+ virtual FX_RECT GetViewBBox(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot);
+ virtual void OnDraw(CPDFSDK_PageView* pPageView,
+ /*HDC hDC,*/ CPDFSDK_Annot* pAnnot,
+ CFX_RenderDevice* pDevice,
+ CPDF_Matrix* pUser2Device,
+ /*const CRect& rcWindow,*/ FX_DWORD dwFlags);
+
+ virtual void OnCreate(CPDFSDK_Annot* pAnnot);
+ virtual void OnLoad(CPDFSDK_Annot* pAnnot);
+ virtual void OnDelete(CPDFSDK_Annot* pAnnot);
+
+ virtual void OnMouseEnter(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_UINT nFlag);
+ virtual void OnMouseExit(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_UINT nFlag);
+
+ virtual FX_BOOL OnLButtonDown(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_UINT nFlags,
+ const CPDF_Point& point);
+ virtual FX_BOOL OnLButtonUp(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_UINT nFlags,
+ const CPDF_Point& point);
+ virtual FX_BOOL OnLButtonDblClk(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_UINT nFlags,
+ const CPDF_Point& point);
+ virtual FX_BOOL OnMouseMove(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_UINT nFlags,
+ const CPDF_Point& point);
+ virtual FX_BOOL OnMouseWheel(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_UINT nFlags,
+ short zDelta,
+ const CPDF_Point& point);
+ virtual FX_BOOL OnRButtonDown(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_UINT nFlags,
+ const CPDF_Point& point);
+ virtual FX_BOOL OnRButtonUp(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_UINT nFlags,
+ const CPDF_Point& point);
+
+ virtual FX_BOOL OnKeyDown(CPDFSDK_Annot* pAnnot,
+ FX_UINT nKeyCode,
+ FX_UINT nFlags);
+ virtual FX_BOOL OnChar(CPDFSDK_Annot* pAnnot, FX_UINT nChar, FX_UINT nFlags);
+
+ virtual FX_BOOL OnSetFocus(CPDFSDK_Annot* pAnnot, FX_UINT nFlag);
+ virtual FX_BOOL OnKillFocus(CPDFSDK_Annot* pAnnot, FX_UINT nFlag);
+
+ virtual void QueryWherePopup(void* pPrivateData,
+ FX_FLOAT fPopupMin,
+ FX_FLOAT fPopupMax,
+ int32_t& nRet,
+ FX_FLOAT& fPopupRet);
+ virtual void OnBeforeKeyStroke(FX_BOOL bEditOrList,
+ void* pPrivateData,
+ int32_t nKeyCode,
+ CFX_WideString& strChange,
+ const CFX_WideString& strChangeEx,
+ int nSelStart,
+ int nSelEnd,
+ FX_BOOL bKeyDown,
+ FX_BOOL& bRC,
+ FX_BOOL& bExit,
+ FX_DWORD nFlag);
+ virtual void OnAfterKeyStroke(FX_BOOL bEditOrList,
+ void* pPrivateData,
+ FX_BOOL& bExit,
+ FX_DWORD nFlag);
+
+ CFFL_FormFiller* GetFormFiller(CPDFSDK_Annot* pAnnot, FX_BOOL bRegister);
+ void RemoveFormFiller(CPDFSDK_Annot* pAnnot);
+
+ static FX_BOOL IsVisible(CPDFSDK_Widget* pWidget);
+ static FX_BOOL IsReadOnly(CPDFSDK_Widget* pWidget);
+ static FX_BOOL IsFillingAllowed(CPDFSDK_Widget* pWidget);
+ static FX_BOOL IsValidAnnot(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot);
+
+ void OnKeyStrokeCommit(CPDFSDK_Widget* pWidget,
+ CPDFSDK_PageView* pPageView,
+ FX_BOOL& bRC,
+ FX_BOOL& bExit,
+ FX_DWORD nFlag);
+ void OnValidate(CPDFSDK_Widget* pWidget,
+ CPDFSDK_PageView* pPageView,
+ FX_BOOL& bRC,
+ FX_BOOL& bExit,
+ FX_DWORD nFlag);
+
+ void OnCalculate(CPDFSDK_Widget* pWidget,
+ CPDFSDK_PageView* pPageView,
+ FX_BOOL& bExit,
+ FX_DWORD nFlag);
+ void OnFormat(CPDFSDK_Widget* pWidget,
+ CPDFSDK_PageView* pPageView,
+ FX_BOOL& bExit,
+ FX_DWORD nFlag);
+ void OnButtonUp(CPDFSDK_Widget* pWidget,
+ CPDFSDK_PageView* pPageView,
+ FX_BOOL& bReset,
+ FX_BOOL& bExit,
+ FX_UINT nFlag);
+
+ private:
+ using CFFL_Widget2Filler = std::map<CPDFSDK_Annot*, CFFL_FormFiller*>;
+
+ void UnRegisterFormFiller(CPDFSDK_Annot* pAnnot);
+
+ CPDFDoc_Environment* m_pApp;
+ CFFL_Widget2Filler m_Maps;
+ FX_BOOL m_bNotifying;
};
-class CFFL_PrivateData
-{
-public:
- CPDFSDK_Widget* pWidget;
- CPDFSDK_PageView* pPageView;
- int nWidgetAge;
- int nValueAge;
+class CFFL_PrivateData {
+ public:
+ CPDFSDK_Widget* pWidget;
+ CPDFSDK_PageView* pPageView;
+ int nWidgetAge;
+ int nValueAge;
};
#endif // FPDFSDK_INCLUDE_FORMFILLER_FFL_IFORMFILLER_H_
-
diff --git a/fpdfsdk/include/formfiller/FFL_ListBox.h b/fpdfsdk/include/formfiller/FFL_ListBox.h
index 4c0813f5c8..2e26069e2c 100644
--- a/fpdfsdk/include/formfiller/FFL_ListBox.h
+++ b/fpdfsdk/include/formfiller/FFL_ListBox.h
@@ -11,43 +11,40 @@
#include "FFL_FormFiller.h"
-class CBA_FontMap;
-
-class CFFL_ListBox : public CFFL_FormFiller
-{
-public:
- CFFL_ListBox(CPDFDoc_Environment* pApp, CPDFSDK_Annot* pWidget);
- virtual ~CFFL_ListBox();
-
- virtual PWL_CREATEPARAM GetCreateParam();
- virtual CPWL_Wnd* NewPDFWindow(const PWL_CREATEPARAM& cp,
- CPDFSDK_PageView* pPageView);
-
- virtual FX_BOOL OnChar(CPDFSDK_Annot* pAnnot, FX_UINT nChar,
- FX_UINT nFlags);
-
- virtual FX_BOOL IsDataChanged(CPDFSDK_PageView* pPageView);
- virtual void SaveData(CPDFSDK_PageView* pPageView);
-
- virtual void GetActionData(CPDFSDK_PageView* pPageView,
- CPDF_AAction::AActionType type,
- PDFSDK_FieldAction& fa);
- virtual void SetActionData(CPDFSDK_PageView* pPageView,
- CPDF_AAction::AActionType type,
- const PDFSDK_FieldAction& fa);
-
- virtual void SaveState(CPDFSDK_PageView* pPageView);
- virtual void RestoreState(CPDFSDK_PageView* pPageView);
-
- virtual CPWL_Wnd* ResetPDFWindow(CPDFSDK_PageView* pPageView,
- FX_BOOL bRestoreValue);
- virtual void OnKeyStroke(FX_BOOL bKeyDown, FX_DWORD nFlag);
-
-private:
- CBA_FontMap* m_pFontMap;
- std::set<int> m_OriginSelections;
- CFX_ArrayTemplate<int> m_State;
-};
+class CBA_FontMap;
+
+class CFFL_ListBox : public CFFL_FormFiller {
+ public:
+ CFFL_ListBox(CPDFDoc_Environment* pApp, CPDFSDK_Annot* pWidget);
+ virtual ~CFFL_ListBox();
+
+ virtual PWL_CREATEPARAM GetCreateParam();
+ virtual CPWL_Wnd* NewPDFWindow(const PWL_CREATEPARAM& cp,
+ CPDFSDK_PageView* pPageView);
+
+ virtual FX_BOOL OnChar(CPDFSDK_Annot* pAnnot, FX_UINT nChar, FX_UINT nFlags);
+
+ virtual FX_BOOL IsDataChanged(CPDFSDK_PageView* pPageView);
+ virtual void SaveData(CPDFSDK_PageView* pPageView);
+ virtual void GetActionData(CPDFSDK_PageView* pPageView,
+ CPDF_AAction::AActionType type,
+ PDFSDK_FieldAction& fa);
+ virtual void SetActionData(CPDFSDK_PageView* pPageView,
+ CPDF_AAction::AActionType type,
+ const PDFSDK_FieldAction& fa);
+
+ virtual void SaveState(CPDFSDK_PageView* pPageView);
+ virtual void RestoreState(CPDFSDK_PageView* pPageView);
+
+ virtual CPWL_Wnd* ResetPDFWindow(CPDFSDK_PageView* pPageView,
+ FX_BOOL bRestoreValue);
+ virtual void OnKeyStroke(FX_BOOL bKeyDown, FX_DWORD nFlag);
+
+ private:
+ CBA_FontMap* m_pFontMap;
+ std::set<int> m_OriginSelections;
+ CFX_ArrayTemplate<int> m_State;
+};
#endif // FPDFSDK_INCLUDE_FORMFILLER_FFL_LISTBOX_H_
diff --git a/fpdfsdk/include/formfiller/FFL_Notify.h b/fpdfsdk/include/formfiller/FFL_Notify.h
index 961d4b7a79..ee9e81a18f 100644
--- a/fpdfsdk/include/formfiller/FFL_Notify.h
+++ b/fpdfsdk/include/formfiller/FFL_Notify.h
@@ -13,43 +13,62 @@
class CFFL_FormFiller;
class CPDF_FormField;
-class CFFL_Notify
-{
-public:
- CFFL_Notify(CFFL_FormFiller * pFormFiller);
- virtual ~CFFL_Notify();
-
-public:
- FX_BOOL OnSetFocus(FX_BOOL & bExit);
- FX_BOOL OnMouseEnter(FX_BOOL & bExit);
- FX_BOOL OnMouseDown(FX_BOOL & bExit);
- FX_BOOL OnMouseUp(FX_BOOL & bExit);
- FX_BOOL OnMouseExit(FX_BOOL & bExit);
- FX_BOOL OnKillFocus(FX_BOOL & bExit);
-
- FX_BOOL OnCalculate();
- FX_BOOL OnFormat(int iCommitKey);
- FX_BOOL OnValidate(CPDF_FormField* pFormField, CFX_WideString& strValue, CFX_WideString & strChange,
- const CFX_WideString& strChangeEx, FX_BOOL bKeyDown, FX_BOOL bModifier,
- FX_BOOL bShift, FX_BOOL & bRC);
- FX_BOOL OnKeyStroke(CPDF_FormField* pFormField, int nCommitKey, CFX_WideString& strValue, CFX_WideString& strChange,
- const CFX_WideString& strChangeEx, FX_BOOL bKeyDown, FX_BOOL bModifier,
- FX_BOOL bShift, FX_BOOL bWillCommit, FX_BOOL bFieldFull,
- int& nSelStart, int& nSelEnd, FX_BOOL& bRC);
-
- void BeforeNotify();
- void AfterNotify();
- FX_BOOL IsNotifying() const {return m_nNotifyFlag > 0;}
-
-private:
- FX_BOOL DoAAction(CPDF_AAction::AActionType eAAT, FX_BOOL & bExit);
- FX_BOOL FindAAction(CPDF_AAction::AActionType eAAT,CPDF_Action & action);
- FX_BOOL FindAAction(CPDF_AAction aaction,CPDF_AAction::AActionType eAAT,CPDF_Action & action);
- FX_BOOL ExecuteActionTree(CPDF_AAction::AActionType eAAT, CPDF_Action & action, FX_BOOL& bExit);
- FX_BOOL ExecuteAction(CPDF_AAction::AActionType eAAT,CPDF_Action & action,FX_BOOL& bExit);
-
- FX_BOOL m_bDoActioning;
- int32_t m_nNotifyFlag;
+class CFFL_Notify {
+ public:
+ CFFL_Notify(CFFL_FormFiller* pFormFiller);
+ virtual ~CFFL_Notify();
+
+ public:
+ FX_BOOL OnSetFocus(FX_BOOL& bExit);
+ FX_BOOL OnMouseEnter(FX_BOOL& bExit);
+ FX_BOOL OnMouseDown(FX_BOOL& bExit);
+ FX_BOOL OnMouseUp(FX_BOOL& bExit);
+ FX_BOOL OnMouseExit(FX_BOOL& bExit);
+ FX_BOOL OnKillFocus(FX_BOOL& bExit);
+
+ FX_BOOL OnCalculate();
+ FX_BOOL OnFormat(int iCommitKey);
+ FX_BOOL OnValidate(CPDF_FormField* pFormField,
+ CFX_WideString& strValue,
+ CFX_WideString& strChange,
+ const CFX_WideString& strChangeEx,
+ FX_BOOL bKeyDown,
+ FX_BOOL bModifier,
+ FX_BOOL bShift,
+ FX_BOOL& bRC);
+ FX_BOOL OnKeyStroke(CPDF_FormField* pFormField,
+ int nCommitKey,
+ CFX_WideString& strValue,
+ CFX_WideString& strChange,
+ const CFX_WideString& strChangeEx,
+ FX_BOOL bKeyDown,
+ FX_BOOL bModifier,
+ FX_BOOL bShift,
+ FX_BOOL bWillCommit,
+ FX_BOOL bFieldFull,
+ int& nSelStart,
+ int& nSelEnd,
+ FX_BOOL& bRC);
+
+ void BeforeNotify();
+ void AfterNotify();
+ FX_BOOL IsNotifying() const { return m_nNotifyFlag > 0; }
+
+ private:
+ FX_BOOL DoAAction(CPDF_AAction::AActionType eAAT, FX_BOOL& bExit);
+ FX_BOOL FindAAction(CPDF_AAction::AActionType eAAT, CPDF_Action& action);
+ FX_BOOL FindAAction(CPDF_AAction aaction,
+ CPDF_AAction::AActionType eAAT,
+ CPDF_Action& action);
+ FX_BOOL ExecuteActionTree(CPDF_AAction::AActionType eAAT,
+ CPDF_Action& action,
+ FX_BOOL& bExit);
+ FX_BOOL ExecuteAction(CPDF_AAction::AActionType eAAT,
+ CPDF_Action& action,
+ FX_BOOL& bExit);
+
+ FX_BOOL m_bDoActioning;
+ int32_t m_nNotifyFlag;
};
#endif // FPDFSDK_INCLUDE_FORMFILLER_FFL_NOTIFY_H_
diff --git a/fpdfsdk/include/formfiller/FFL_PushButton.h b/fpdfsdk/include/formfiller/FFL_PushButton.h
index 3cfaefb9bd..5c4819400d 100644
--- a/fpdfsdk/include/formfiller/FFL_PushButton.h
+++ b/fpdfsdk/include/formfiller/FFL_PushButton.h
@@ -9,18 +9,20 @@
#include "FFL_FormFiller.h"
-class CFFL_PushButton : public CFFL_Button
-{
-public:
- CFFL_PushButton(CPDFDoc_Environment* pApp, CPDFSDK_Annot* pAnnot);
- virtual ~CFFL_PushButton();
+class CFFL_PushButton : public CFFL_Button {
+ public:
+ CFFL_PushButton(CPDFDoc_Environment* pApp, CPDFSDK_Annot* pAnnot);
+ virtual ~CFFL_PushButton();
- virtual CPWL_Wnd* NewPDFWindow(const PWL_CREATEPARAM& cp, CPDFSDK_PageView* pPageView);
+ virtual CPWL_Wnd* NewPDFWindow(const PWL_CREATEPARAM& cp,
+ CPDFSDK_PageView* pPageView);
- virtual FX_BOOL OnChar(CPDFSDK_Annot* pAnnot, FX_UINT nChar, FX_UINT nFlags);
- virtual void OnDraw(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot,
- CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device,
- FX_DWORD dwFlags);
+ virtual FX_BOOL OnChar(CPDFSDK_Annot* pAnnot, FX_UINT nChar, FX_UINT nFlags);
+ virtual void OnDraw(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ CFX_RenderDevice* pDevice,
+ CPDF_Matrix* pUser2Device,
+ FX_DWORD dwFlags);
};
#endif // FPDFSDK_INCLUDE_FORMFILLER_FFL_PUSHBUTTON_H_
diff --git a/fpdfsdk/include/formfiller/FFL_RadioButton.h b/fpdfsdk/include/formfiller/FFL_RadioButton.h
index 46332e07fd..ba7bff4629 100644
--- a/fpdfsdk/include/formfiller/FFL_RadioButton.h
+++ b/fpdfsdk/include/formfiller/FFL_RadioButton.h
@@ -9,18 +9,23 @@
#include "FFL_FormFiller.h"
-class CFFL_RadioButton : public CFFL_Button
-{
-public:
- CFFL_RadioButton(CPDFDoc_Environment* pApp, CPDFSDK_Annot* pAnnot);
- virtual ~CFFL_RadioButton();
+class CFFL_RadioButton : public CFFL_Button {
+ public:
+ CFFL_RadioButton(CPDFDoc_Environment* pApp, CPDFSDK_Annot* pAnnot);
+ virtual ~CFFL_RadioButton();
- virtual CPWL_Wnd* NewPDFWindow(const PWL_CREATEPARAM& cp, CPDFSDK_PageView* pPageView);
- virtual FX_BOOL OnKeyDown(CPDFSDK_Annot* pAnnot, FX_UINT nKeyCode, FX_UINT nFlags);
- virtual FX_BOOL OnChar(CPDFSDK_Annot* pAnnot, FX_UINT nChar, FX_UINT nFlags);
- virtual FX_BOOL OnLButtonUp(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point);
- virtual FX_BOOL IsDataChanged(CPDFSDK_PageView* pPageView);
- virtual void SaveData(CPDFSDK_PageView* pPageView);
+ virtual CPWL_Wnd* NewPDFWindow(const PWL_CREATEPARAM& cp,
+ CPDFSDK_PageView* pPageView);
+ virtual FX_BOOL OnKeyDown(CPDFSDK_Annot* pAnnot,
+ FX_UINT nKeyCode,
+ FX_UINT nFlags);
+ virtual FX_BOOL OnChar(CPDFSDK_Annot* pAnnot, FX_UINT nChar, FX_UINT nFlags);
+ virtual FX_BOOL OnLButtonUp(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_UINT nFlags,
+ const CPDF_Point& point);
+ virtual FX_BOOL IsDataChanged(CPDFSDK_PageView* pPageView);
+ virtual void SaveData(CPDFSDK_PageView* pPageView);
};
#endif // FPDFSDK_INCLUDE_FORMFILLER_FFL_RADIOBUTTON_H_
diff --git a/fpdfsdk/include/formfiller/FFL_TextField.h b/fpdfsdk/include/formfiller/FFL_TextField.h
index 10bd5c0e43..65da9257ac 100644
--- a/fpdfsdk/include/formfiller/FFL_TextField.h
+++ b/fpdfsdk/include/formfiller/FFL_TextField.h
@@ -9,61 +9,64 @@
#include "FFL_FormFiller.h"
-#define BF_ALIGN_LEFT 0
-#define BF_ALIGN_MIDDLE 1
-#define BF_ALIGN_RIGHT 2
+#define BF_ALIGN_LEFT 0
+#define BF_ALIGN_MIDDLE 1
+#define BF_ALIGN_RIGHT 2
class CBA_FontMap;
-struct FFL_TextFieldState
-{
- int nStart;
- int nEnd;
- CFX_WideString sValue;
+struct FFL_TextFieldState {
+ int nStart;
+ int nEnd;
+ CFX_WideString sValue;
};
-class CFFL_TextField : public CFFL_FormFiller, public IPWL_FocusHandler, public IPWL_Edit_Notify
-{
-public:
- CFFL_TextField(CPDFDoc_Environment* pApp, CPDFSDK_Annot* pAnnot);
- virtual ~CFFL_TextField();
-
- virtual PWL_CREATEPARAM GetCreateParam();
- virtual CPWL_Wnd* NewPDFWindow(const PWL_CREATEPARAM& cp, CPDFSDK_PageView* pPageView);
-
-
- virtual FX_BOOL OnChar(CPDFSDK_Annot* pAnnot, FX_UINT nChar, FX_UINT nFlags);
-
- virtual FX_BOOL IsDataChanged(CPDFSDK_PageView* pPageView);
- virtual void SaveData(CPDFSDK_PageView* pPageView);
-
- virtual void GetActionData(CPDFSDK_PageView* pPageView, CPDF_AAction::AActionType type,
- PDFSDK_FieldAction& fa);
- virtual void SetActionData(CPDFSDK_PageView* pPageView, CPDF_AAction::AActionType type,
- const PDFSDK_FieldAction& fa);
- virtual FX_BOOL IsActionDataChanged(CPDF_AAction::AActionType type, const PDFSDK_FieldAction& faOld,
- const PDFSDK_FieldAction& faNew);
- virtual void SaveState(CPDFSDK_PageView* pPageView);
- virtual void RestoreState(CPDFSDK_PageView* pPageView);
-
- virtual CPWL_Wnd* ResetPDFWindow(CPDFSDK_PageView* pPageView, FX_BOOL bRestoreValue);
-
-public:
- virtual void OnSetFocus(CPWL_Wnd* pWnd);
- virtual void OnKillFocus(CPWL_Wnd* pWnd);
-
-public:
- virtual void OnAddUndo(CPWL_Edit* pEdit);
-
-public:
- virtual FX_BOOL CanCopy(CPDFSDK_Document* pDocument);
- virtual FX_BOOL CanCut(CPDFSDK_Document* pDocument);
- virtual FX_BOOL CanPaste(CPDFSDK_Document* pDocument);
-
-private:
- CBA_FontMap* m_pFontMap;
- FFL_TextFieldState m_State;
-
+class CFFL_TextField : public CFFL_FormFiller,
+ public IPWL_FocusHandler,
+ public IPWL_Edit_Notify {
+ public:
+ CFFL_TextField(CPDFDoc_Environment* pApp, CPDFSDK_Annot* pAnnot);
+ virtual ~CFFL_TextField();
+
+ virtual PWL_CREATEPARAM GetCreateParam();
+ virtual CPWL_Wnd* NewPDFWindow(const PWL_CREATEPARAM& cp,
+ CPDFSDK_PageView* pPageView);
+
+ virtual FX_BOOL OnChar(CPDFSDK_Annot* pAnnot, FX_UINT nChar, FX_UINT nFlags);
+
+ virtual FX_BOOL IsDataChanged(CPDFSDK_PageView* pPageView);
+ virtual void SaveData(CPDFSDK_PageView* pPageView);
+
+ virtual void GetActionData(CPDFSDK_PageView* pPageView,
+ CPDF_AAction::AActionType type,
+ PDFSDK_FieldAction& fa);
+ virtual void SetActionData(CPDFSDK_PageView* pPageView,
+ CPDF_AAction::AActionType type,
+ const PDFSDK_FieldAction& fa);
+ virtual FX_BOOL IsActionDataChanged(CPDF_AAction::AActionType type,
+ const PDFSDK_FieldAction& faOld,
+ const PDFSDK_FieldAction& faNew);
+ virtual void SaveState(CPDFSDK_PageView* pPageView);
+ virtual void RestoreState(CPDFSDK_PageView* pPageView);
+
+ virtual CPWL_Wnd* ResetPDFWindow(CPDFSDK_PageView* pPageView,
+ FX_BOOL bRestoreValue);
+
+ public:
+ virtual void OnSetFocus(CPWL_Wnd* pWnd);
+ virtual void OnKillFocus(CPWL_Wnd* pWnd);
+
+ public:
+ virtual void OnAddUndo(CPWL_Edit* pEdit);
+
+ public:
+ virtual FX_BOOL CanCopy(CPDFSDK_Document* pDocument);
+ virtual FX_BOOL CanCut(CPDFSDK_Document* pDocument);
+ virtual FX_BOOL CanPaste(CPDFSDK_Document* pDocument);
+
+ private:
+ CBA_FontMap* m_pFontMap;
+ FFL_TextFieldState m_State;
};
#endif // FPDFSDK_INCLUDE_FORMFILLER_FFL_TEXTFIELD_H_
diff --git a/fpdfsdk/include/formfiller/FFL_Utils.h b/fpdfsdk/include/formfiller/FFL_Utils.h
index fe025eca4b..372a2b6837 100644
--- a/fpdfsdk/include/formfiller/FFL_Utils.h
+++ b/fpdfsdk/include/formfiller/FFL_Utils.h
@@ -9,15 +9,12 @@
#include "../../../core/include/fpdfapi/fpdf_parser.h"
-class CFFL_Utils
-{
-public:
- static CPDF_Rect MaxRect(const CPDF_Rect& rect1,const CPDF_Rect& rect2);
- static CPDF_Rect InflateRect(const CPDF_Rect& crRect,
- const FX_FLOAT& fSize);
- static CPDF_Rect DeflateRect(const CPDF_Rect& crRect,
- const FX_FLOAT& fSize);
- static FX_BOOL TraceObject(CPDF_Object* pObj);
+class CFFL_Utils {
+ public:
+ static CPDF_Rect MaxRect(const CPDF_Rect& rect1, const CPDF_Rect& rect2);
+ static CPDF_Rect InflateRect(const CPDF_Rect& crRect, const FX_FLOAT& fSize);
+ static CPDF_Rect DeflateRect(const CPDF_Rect& crRect, const FX_FLOAT& fSize);
+ static FX_BOOL TraceObject(CPDF_Object* pObj);
};
#endif // FPDFSDK_INCLUDE_FORMFILLER_FFL_UTILS_H_
diff --git a/fpdfsdk/include/fsdk_actionhandler.h b/fpdfsdk/include/fsdk_actionhandler.h
index 39ec4f41af..dfb7d488c2 100644
--- a/fpdfsdk/include/fsdk_actionhandler.h
+++ b/fpdfsdk/include/fsdk_actionhandler.h
@@ -20,65 +20,118 @@ class CPDF_Bookmark;
class CPDF_Dictionary;
class IFXJS_Runtime;
-class CPDFSDK_FormActionHandler
-{
-public:
- FX_BOOL DoAction_Hide(const CPDF_Action& action, CPDFSDK_Document* pDocument);
- FX_BOOL DoAction_SubmitForm(const CPDF_Action& action, CPDFSDK_Document* pDocument);
- FX_BOOL DoAction_ResetForm(const CPDF_Action& action, CPDFSDK_Document* pDocument);
- FX_BOOL DoAction_ImportData(const CPDF_Action& action, CPDFSDK_Document* pDocument);
+class CPDFSDK_FormActionHandler {
+ public:
+ FX_BOOL DoAction_Hide(const CPDF_Action& action, CPDFSDK_Document* pDocument);
+ FX_BOOL DoAction_SubmitForm(const CPDF_Action& action,
+ CPDFSDK_Document* pDocument);
+ FX_BOOL DoAction_ResetForm(const CPDF_Action& action,
+ CPDFSDK_Document* pDocument);
+ FX_BOOL DoAction_ImportData(const CPDF_Action& action,
+ CPDFSDK_Document* pDocument);
};
-class CPDFSDK_MediaActionHandler
-{
-public:
- FX_BOOL DoAction_Rendition(const CPDF_Action& action, CPDFSDK_Document* pDocument);
- FX_BOOL DoAction_Sound(const CPDF_Action& action, CPDFSDK_Document* pDocument);
- FX_BOOL DoAction_Movie(const CPDF_Action& action, CPDFSDK_Document* pDocument);
+class CPDFSDK_MediaActionHandler {
+ public:
+ FX_BOOL DoAction_Rendition(const CPDF_Action& action,
+ CPDFSDK_Document* pDocument);
+ FX_BOOL DoAction_Sound(const CPDF_Action& action,
+ CPDFSDK_Document* pDocument);
+ FX_BOOL DoAction_Movie(const CPDF_Action& action,
+ CPDFSDK_Document* pDocument);
};
-class CPDFSDK_ActionHandler
-{
-public:
- CPDFSDK_ActionHandler(CPDFDoc_Environment* pEvi);
+class CPDFSDK_ActionHandler {
+ public:
+ CPDFSDK_ActionHandler(CPDFDoc_Environment* pEvi);
- void SetMediaActionHandler(CPDFSDK_MediaActionHandler* pHandler);
+ void SetMediaActionHandler(CPDFSDK_MediaActionHandler* pHandler);
- FX_BOOL DoAction_DocOpen(const CPDF_Action& action, CPDFSDK_Document* pDocument);
- FX_BOOL DoAction_JavaScript(const CPDF_Action& JsAction,CFX_WideString csJSName, CPDFSDK_Document* pDocument);
- FX_BOOL DoAction_Page(const CPDF_Action& action, enum CPDF_AAction::AActionType eType, CPDFSDK_Document* pDocument);
- FX_BOOL DoAction_Document(const CPDF_Action& action, enum CPDF_AAction::AActionType eType, CPDFSDK_Document* pDocument);
- FX_BOOL DoAction_BookMark(CPDF_Bookmark *pBookMark, const CPDF_Action& action, CPDF_AAction::AActionType type, CPDFSDK_Document* pDocument);
- FX_BOOL DoAction_Screen(const CPDF_Action& action, CPDF_AAction::AActionType type, CPDFSDK_Document* pDocument, CPDFSDK_Annot* pScreen);
- FX_BOOL DoAction_Link(const CPDF_Action& action, CPDFSDK_Document* pDocument);
- FX_BOOL DoAction_Field(const CPDF_Action& action, CPDF_AAction::AActionType type, CPDFSDK_Document* pDocument, CPDF_FormField* pFormField, PDFSDK_FieldAction& data);
- FX_BOOL DoAction_FieldJavaScript(const CPDF_Action& JsAction, CPDF_AAction::AActionType type, CPDFSDK_Document* pDocument, CPDF_FormField* pFormField, PDFSDK_FieldAction& data);
+ FX_BOOL DoAction_DocOpen(const CPDF_Action& action,
+ CPDFSDK_Document* pDocument);
+ FX_BOOL DoAction_JavaScript(const CPDF_Action& JsAction,
+ CFX_WideString csJSName,
+ CPDFSDK_Document* pDocument);
+ FX_BOOL DoAction_Page(const CPDF_Action& action,
+ enum CPDF_AAction::AActionType eType,
+ CPDFSDK_Document* pDocument);
+ FX_BOOL DoAction_Document(const CPDF_Action& action,
+ enum CPDF_AAction::AActionType eType,
+ CPDFSDK_Document* pDocument);
+ FX_BOOL DoAction_BookMark(CPDF_Bookmark* pBookMark,
+ const CPDF_Action& action,
+ CPDF_AAction::AActionType type,
+ CPDFSDK_Document* pDocument);
+ FX_BOOL DoAction_Screen(const CPDF_Action& action,
+ CPDF_AAction::AActionType type,
+ CPDFSDK_Document* pDocument,
+ CPDFSDK_Annot* pScreen);
+ FX_BOOL DoAction_Link(const CPDF_Action& action, CPDFSDK_Document* pDocument);
+ FX_BOOL DoAction_Field(const CPDF_Action& action,
+ CPDF_AAction::AActionType type,
+ CPDFSDK_Document* pDocument,
+ CPDF_FormField* pFormField,
+ PDFSDK_FieldAction& data);
+ FX_BOOL DoAction_FieldJavaScript(const CPDF_Action& JsAction,
+ CPDF_AAction::AActionType type,
+ CPDFSDK_Document* pDocument,
+ CPDF_FormField* pFormField,
+ PDFSDK_FieldAction& data);
-private:
- FX_BOOL ExecuteDocumentOpenAction(const CPDF_Action& action, CPDFSDK_Document* pDocument, CFX_PtrList& list);
- FX_BOOL ExecuteDocumentPageAction(const CPDF_Action& action, CPDF_AAction::AActionType type, CPDFSDK_Document* pDocument, CFX_PtrList& list);
- FX_BOOL ExecuteFieldAction(const CPDF_Action& action, CPDF_AAction::AActionType type, CPDFSDK_Document* pDocument, CPDF_FormField* pFormField, PDFSDK_FieldAction& data, CFX_PtrList& list);
- FX_BOOL ExecuteScreenAction(const CPDF_Action& action, CPDF_AAction::AActionType type, CPDFSDK_Document* pDocument, CPDFSDK_Annot* pScreen, CFX_PtrList& list);
- FX_BOOL ExecuteBookMark(const CPDF_Action& action, CPDFSDK_Document* pDocument, CPDF_Bookmark* pBookmark, CFX_PtrList& list);
- FX_BOOL ExecuteLinkAction(const CPDF_Action& action, CPDFSDK_Document* pDocument, CFX_PtrList& list);
+ private:
+ FX_BOOL ExecuteDocumentOpenAction(const CPDF_Action& action,
+ CPDFSDK_Document* pDocument,
+ CFX_PtrList& list);
+ FX_BOOL ExecuteDocumentPageAction(const CPDF_Action& action,
+ CPDF_AAction::AActionType type,
+ CPDFSDK_Document* pDocument,
+ CFX_PtrList& list);
+ FX_BOOL ExecuteFieldAction(const CPDF_Action& action,
+ CPDF_AAction::AActionType type,
+ CPDFSDK_Document* pDocument,
+ CPDF_FormField* pFormField,
+ PDFSDK_FieldAction& data,
+ CFX_PtrList& list);
+ FX_BOOL ExecuteScreenAction(const CPDF_Action& action,
+ CPDF_AAction::AActionType type,
+ CPDFSDK_Document* pDocument,
+ CPDFSDK_Annot* pScreen,
+ CFX_PtrList& list);
+ FX_BOOL ExecuteBookMark(const CPDF_Action& action,
+ CPDFSDK_Document* pDocument,
+ CPDF_Bookmark* pBookmark,
+ CFX_PtrList& list);
+ FX_BOOL ExecuteLinkAction(const CPDF_Action& action,
+ CPDFSDK_Document* pDocument,
+ CFX_PtrList& list);
- void DoAction_NoJs(const CPDF_Action& action, CPDFSDK_Document* pDocument);
- void RunDocumentPageJavaScript(CPDFSDK_Document* pDocument, CPDF_AAction::AActionType type, const CFX_WideString& script);
- void RunDocumentOpenJavaScript(CPDFSDK_Document* pDocument, const CFX_WideString& sScriptName, const CFX_WideString& script);
- void RunFieldJavaScript(CPDFSDK_Document* pDocument, CPDF_FormField* pFormField, CPDF_AAction::AActionType type, PDFSDK_FieldAction& data, const CFX_WideString& script);
+ void DoAction_NoJs(const CPDF_Action& action, CPDFSDK_Document* pDocument);
+ void RunDocumentPageJavaScript(CPDFSDK_Document* pDocument,
+ CPDF_AAction::AActionType type,
+ const CFX_WideString& script);
+ void RunDocumentOpenJavaScript(CPDFSDK_Document* pDocument,
+ const CFX_WideString& sScriptName,
+ const CFX_WideString& script);
+ void RunFieldJavaScript(CPDFSDK_Document* pDocument,
+ CPDF_FormField* pFormField,
+ CPDF_AAction::AActionType type,
+ PDFSDK_FieldAction& data,
+ const CFX_WideString& script);
- FX_BOOL IsValidField(CPDFSDK_Document* pDocument, CPDF_Dictionary* pFieldDict);
- FX_BOOL IsValidDocView(CPDFSDK_Document* pDocument);
+ FX_BOOL IsValidField(CPDFSDK_Document* pDocument,
+ CPDF_Dictionary* pFieldDict);
+ FX_BOOL IsValidDocView(CPDFSDK_Document* pDocument);
- void DoAction_GoTo(CPDFSDK_Document* pDocument, const CPDF_Action& action);
- void DoAction_GoToR(CPDFSDK_Document* pDocument, const CPDF_Action& action);
- void DoAction_Launch(CPDFSDK_Document* pDocument, const CPDF_Action& action);
- void DoAction_URI(CPDFSDK_Document* pDocument, const CPDF_Action& action);
- void DoAction_Named(CPDFSDK_Document* pDocument, const CPDF_Action& action);
- void DoAction_SetOCGState(CPDFSDK_Document* pDocument, const CPDF_Action& action);
+ void DoAction_GoTo(CPDFSDK_Document* pDocument, const CPDF_Action& action);
+ void DoAction_GoToR(CPDFSDK_Document* pDocument, const CPDF_Action& action);
+ void DoAction_Launch(CPDFSDK_Document* pDocument, const CPDF_Action& action);
+ void DoAction_URI(CPDFSDK_Document* pDocument, const CPDF_Action& action);
+ void DoAction_Named(CPDFSDK_Document* pDocument, const CPDF_Action& action);
+ void DoAction_SetOCGState(CPDFSDK_Document* pDocument,
+ const CPDF_Action& action);
- nonstd::unique_ptr<CPDFSDK_FormActionHandler> m_pFormActionHandler;
- CPDFSDK_MediaActionHandler* m_pMediaActionHandler;
+ nonstd::unique_ptr<CPDFSDK_FormActionHandler> m_pFormActionHandler;
+ CPDFSDK_MediaActionHandler* m_pMediaActionHandler;
};
#endif // FPDFSDK_INCLUDE_FSDK_ACTIONHANDLER_H_
diff --git a/fpdfsdk/include/fsdk_annothandler.h b/fpdfsdk/include/fsdk_annothandler.h
index b4705699c8..8bcf116e45 100644
--- a/fpdfsdk/include/fsdk_annothandler.h
+++ b/fpdfsdk/include/fsdk_annothandler.h
@@ -19,235 +19,339 @@ class CPDF_Matrix;
class CPDF_Point;
class CPDF_Rect;
-class IPDFSDK_AnnotHandler
-{
-
-public:
- virtual ~IPDFSDK_AnnotHandler() {};
-
- virtual CFX_ByteString GetType() = 0;
-
- virtual CFX_ByteString GetName() = 0;
-
- virtual FX_BOOL CanAnswer(CPDFSDK_Annot* pAnnot) = 0;
-
-
- virtual CPDFSDK_Annot* NewAnnot(CPDF_Annot* pAnnot, CPDFSDK_PageView* pPage) = 0;
-
- virtual void ReleaseAnnot(CPDFSDK_Annot* pAnnot) = 0;
-
- virtual void DeleteAnnot(CPDFSDK_Annot* pAnnot) = 0;
-
-
- virtual CPDF_Rect GetViewBBox(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot) = 0;
-
- virtual FX_BOOL HitTest(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, const CPDF_Point& point) = 0;
-
-
- virtual void OnDraw(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot,
- CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device,
- FX_DWORD dwFlags) = 0;
-
- virtual void OnDrawSleep(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot,
- CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device,
- const CPDF_Rect& rcWindow, FX_DWORD dwFlags) = 0;
-
-
-
-
- virtual void OnCreate(CPDFSDK_Annot* pAnnot) = 0;
-
- virtual void OnLoad(CPDFSDK_Annot* pAnnot) = 0;
-
- virtual void OnDelete(CPDFSDK_Annot* pAnnot) = 0;
-
- virtual void OnRelease(CPDFSDK_Annot* pAnnot) = 0;
-
-
- virtual void OnMouseEnter(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlag) = 0;
- virtual void OnMouseExit(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlag) = 0;
-
-
- virtual FX_BOOL OnLButtonDown(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) = 0;
- virtual FX_BOOL OnLButtonUp(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) = 0;
- virtual FX_BOOL OnLButtonDblClk(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) = 0;
- virtual FX_BOOL OnMouseMove(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) = 0;
- virtual FX_BOOL OnMouseWheel(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, short zDelta, const CPDF_Point& point) = 0;
- virtual FX_BOOL OnRButtonDown(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) = 0;
- virtual FX_BOOL OnRButtonUp(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) = 0;
- virtual FX_BOOL OnRButtonDblClk(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) = 0;
-//by wjm.
- virtual FX_BOOL OnChar(CPDFSDK_Annot* pAnnot, FX_DWORD nChar, FX_DWORD nFlags) = 0;
- virtual FX_BOOL OnKeyDown(CPDFSDK_Annot* pAnnot, int nKeyCode, int nFlag) = 0;
- virtual FX_BOOL OnKeyUp(CPDFSDK_Annot* pAnnot, int nKeyCode, int nFlag) =0 ;
-
- virtual void OnDeSelected(CPDFSDK_Annot* pAnnot) = 0;
- virtual void OnSelected(CPDFSDK_Annot* pAnnot) = 0;
-
- virtual FX_BOOL OnSetFocus(CPDFSDK_Annot* pAnnot, FX_DWORD nFlag) = 0;
- virtual FX_BOOL OnKillFocus(CPDFSDK_Annot* pAnnot, FX_DWORD nFlag) = 0;
-
+class IPDFSDK_AnnotHandler {
+ public:
+ virtual ~IPDFSDK_AnnotHandler(){};
+
+ virtual CFX_ByteString GetType() = 0;
+
+ virtual CFX_ByteString GetName() = 0;
+
+ virtual FX_BOOL CanAnswer(CPDFSDK_Annot* pAnnot) = 0;
+
+ virtual CPDFSDK_Annot* NewAnnot(CPDF_Annot* pAnnot,
+ CPDFSDK_PageView* pPage) = 0;
+
+ virtual void ReleaseAnnot(CPDFSDK_Annot* pAnnot) = 0;
+
+ virtual void DeleteAnnot(CPDFSDK_Annot* pAnnot) = 0;
+
+ virtual CPDF_Rect GetViewBBox(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot) = 0;
+
+ virtual FX_BOOL HitTest(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ const CPDF_Point& point) = 0;
+
+ virtual void OnDraw(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ CFX_RenderDevice* pDevice,
+ CPDF_Matrix* pUser2Device,
+ FX_DWORD dwFlags) = 0;
+
+ virtual void OnDrawSleep(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ CFX_RenderDevice* pDevice,
+ CPDF_Matrix* pUser2Device,
+ const CPDF_Rect& rcWindow,
+ FX_DWORD dwFlags) = 0;
+
+ virtual void OnCreate(CPDFSDK_Annot* pAnnot) = 0;
+
+ virtual void OnLoad(CPDFSDK_Annot* pAnnot) = 0;
+
+ virtual void OnDelete(CPDFSDK_Annot* pAnnot) = 0;
+
+ virtual void OnRelease(CPDFSDK_Annot* pAnnot) = 0;
+
+ virtual void OnMouseEnter(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_DWORD nFlag) = 0;
+ virtual void OnMouseExit(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_DWORD nFlag) = 0;
+
+ virtual FX_BOOL OnLButtonDown(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_DWORD nFlags,
+ const CPDF_Point& point) = 0;
+ virtual FX_BOOL OnLButtonUp(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_DWORD nFlags,
+ const CPDF_Point& point) = 0;
+ virtual FX_BOOL OnLButtonDblClk(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_DWORD nFlags,
+ const CPDF_Point& point) = 0;
+ virtual FX_BOOL OnMouseMove(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_DWORD nFlags,
+ const CPDF_Point& point) = 0;
+ virtual FX_BOOL OnMouseWheel(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_DWORD nFlags,
+ short zDelta,
+ const CPDF_Point& point) = 0;
+ virtual FX_BOOL OnRButtonDown(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_DWORD nFlags,
+ const CPDF_Point& point) = 0;
+ virtual FX_BOOL OnRButtonUp(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_DWORD nFlags,
+ const CPDF_Point& point) = 0;
+ virtual FX_BOOL OnRButtonDblClk(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_DWORD nFlags,
+ const CPDF_Point& point) = 0;
+ // by wjm.
+ virtual FX_BOOL OnChar(CPDFSDK_Annot* pAnnot,
+ FX_DWORD nChar,
+ FX_DWORD nFlags) = 0;
+ virtual FX_BOOL OnKeyDown(CPDFSDK_Annot* pAnnot, int nKeyCode, int nFlag) = 0;
+ virtual FX_BOOL OnKeyUp(CPDFSDK_Annot* pAnnot, int nKeyCode, int nFlag) = 0;
+
+ virtual void OnDeSelected(CPDFSDK_Annot* pAnnot) = 0;
+ virtual void OnSelected(CPDFSDK_Annot* pAnnot) = 0;
+
+ virtual FX_BOOL OnSetFocus(CPDFSDK_Annot* pAnnot, FX_DWORD nFlag) = 0;
+ virtual FX_BOOL OnKillFocus(CPDFSDK_Annot* pAnnot, FX_DWORD nFlag) = 0;
};
-
-class CPDFSDK_BFAnnotHandler:public IPDFSDK_AnnotHandler
-{
-public:
- CPDFSDK_BFAnnotHandler(CPDFDoc_Environment* pApp) : m_pApp(pApp), m_pFormFiller(NULL) {}
- virtual ~CPDFSDK_BFAnnotHandler() {}
-public:
-
- virtual CFX_ByteString GetType() {return CFX_ByteString("Widget");}
-
- virtual CFX_ByteString GetName() {return CFX_ByteString("WidgetHandler");}
-
- virtual FX_BOOL CanAnswer(CPDFSDK_Annot* pAnnot);
-
- virtual CPDFSDK_Annot* NewAnnot(CPDF_Annot* pAnnot, CPDFSDK_PageView* pPage);
-
- virtual void ReleaseAnnot(CPDFSDK_Annot* pAnnot) ;
-
- virtual void DeleteAnnot(CPDFSDK_Annot* pAnnot) {}
-
-
- virtual CPDF_Rect GetViewBBox(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot) ;
-
- virtual FX_BOOL HitTest(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, const CPDF_Point& point);
-
-
- virtual void OnDraw(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot,
- CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device,
- FX_DWORD dwFlags) ;
-
- virtual void OnDrawSleep(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot,
- CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device,
- const CPDF_Rect& rcWindow, FX_DWORD dwFlags) {}
-
-
- virtual void OnCreate(CPDFSDK_Annot* pAnnot) ;
-
- virtual void OnLoad(CPDFSDK_Annot* pAnnot) ;
-
- virtual void OnDelete(CPDFSDK_Annot* pAnnot) {}
-
- virtual void OnRelease(CPDFSDK_Annot* pAnnot) {}
-
-
- virtual void OnMouseEnter(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlag) ;
- virtual void OnMouseExit(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlag) ;
-
-
- virtual FX_BOOL OnLButtonDown(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) ;
- virtual FX_BOOL OnLButtonUp(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) ;
- virtual FX_BOOL OnLButtonDblClk(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) ;
- virtual FX_BOOL OnMouseMove(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) ;
- virtual FX_BOOL OnMouseWheel(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, short zDelta, const CPDF_Point& point) ;
- virtual FX_BOOL OnRButtonDown(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) ;
- virtual FX_BOOL OnRButtonUp(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) ;
- virtual FX_BOOL OnRButtonDblClk(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point) {return FALSE;}
-
-//by wjm.
- virtual FX_BOOL OnChar(CPDFSDK_Annot* pAnnot, FX_DWORD nChar, FX_DWORD nFlags);
- virtual FX_BOOL OnKeyDown(CPDFSDK_Annot* pAnnot, int nKeyCode, int nFlag);
- virtual FX_BOOL OnKeyUp(CPDFSDK_Annot* pAnnot, int nKeyCode, int nFlag);
-
- virtual void OnDeSelected(CPDFSDK_Annot* pAnnot) {}
- virtual void OnSelected(CPDFSDK_Annot* pAnnot) {}
-
- virtual FX_BOOL OnSetFocus(CPDFSDK_Annot* pAnnot, FX_DWORD nFlag);
- virtual FX_BOOL OnKillFocus(CPDFSDK_Annot* pAnnot, FX_DWORD nFlag);
-
- void SetFormFiller(CFFL_IFormFiller* pFiller){m_pFormFiller = pFiller;}
- CFFL_IFormFiller* GetFormFiller() {return m_pFormFiller;}
-private:
-
- CPDFDoc_Environment* m_pApp;
- CFFL_IFormFiller* m_pFormFiller;
+class CPDFSDK_BFAnnotHandler : public IPDFSDK_AnnotHandler {
+ public:
+ CPDFSDK_BFAnnotHandler(CPDFDoc_Environment* pApp)
+ : m_pApp(pApp), m_pFormFiller(NULL) {}
+ virtual ~CPDFSDK_BFAnnotHandler() {}
+
+ public:
+ virtual CFX_ByteString GetType() { return CFX_ByteString("Widget"); }
+
+ virtual CFX_ByteString GetName() { return CFX_ByteString("WidgetHandler"); }
+
+ virtual FX_BOOL CanAnswer(CPDFSDK_Annot* pAnnot);
+
+ virtual CPDFSDK_Annot* NewAnnot(CPDF_Annot* pAnnot, CPDFSDK_PageView* pPage);
+
+ virtual void ReleaseAnnot(CPDFSDK_Annot* pAnnot);
+
+ virtual void DeleteAnnot(CPDFSDK_Annot* pAnnot) {}
+
+ virtual CPDF_Rect GetViewBBox(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot);
+
+ virtual FX_BOOL HitTest(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ const CPDF_Point& point);
+
+ virtual void OnDraw(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ CFX_RenderDevice* pDevice,
+ CPDF_Matrix* pUser2Device,
+ FX_DWORD dwFlags);
+
+ virtual void OnDrawSleep(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ CFX_RenderDevice* pDevice,
+ CPDF_Matrix* pUser2Device,
+ const CPDF_Rect& rcWindow,
+ FX_DWORD dwFlags) {}
+
+ virtual void OnCreate(CPDFSDK_Annot* pAnnot);
+
+ virtual void OnLoad(CPDFSDK_Annot* pAnnot);
+
+ virtual void OnDelete(CPDFSDK_Annot* pAnnot) {}
+
+ virtual void OnRelease(CPDFSDK_Annot* pAnnot) {}
+
+ virtual void OnMouseEnter(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_DWORD nFlag);
+ virtual void OnMouseExit(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_DWORD nFlag);
+
+ virtual FX_BOOL OnLButtonDown(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_DWORD nFlags,
+ const CPDF_Point& point);
+ virtual FX_BOOL OnLButtonUp(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_DWORD nFlags,
+ const CPDF_Point& point);
+ virtual FX_BOOL OnLButtonDblClk(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_DWORD nFlags,
+ const CPDF_Point& point);
+ virtual FX_BOOL OnMouseMove(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_DWORD nFlags,
+ const CPDF_Point& point);
+ virtual FX_BOOL OnMouseWheel(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_DWORD nFlags,
+ short zDelta,
+ const CPDF_Point& point);
+ virtual FX_BOOL OnRButtonDown(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_DWORD nFlags,
+ const CPDF_Point& point);
+ virtual FX_BOOL OnRButtonUp(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_DWORD nFlags,
+ const CPDF_Point& point);
+ virtual FX_BOOL OnRButtonDblClk(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_DWORD nFlags,
+ const CPDF_Point& point) {
+ return FALSE;
+ }
+
+ // by wjm.
+ virtual FX_BOOL OnChar(CPDFSDK_Annot* pAnnot,
+ FX_DWORD nChar,
+ FX_DWORD nFlags);
+ virtual FX_BOOL OnKeyDown(CPDFSDK_Annot* pAnnot, int nKeyCode, int nFlag);
+ virtual FX_BOOL OnKeyUp(CPDFSDK_Annot* pAnnot, int nKeyCode, int nFlag);
+
+ virtual void OnDeSelected(CPDFSDK_Annot* pAnnot) {}
+ virtual void OnSelected(CPDFSDK_Annot* pAnnot) {}
+
+ virtual FX_BOOL OnSetFocus(CPDFSDK_Annot* pAnnot, FX_DWORD nFlag);
+ virtual FX_BOOL OnKillFocus(CPDFSDK_Annot* pAnnot, FX_DWORD nFlag);
+
+ void SetFormFiller(CFFL_IFormFiller* pFiller) { m_pFormFiller = pFiller; }
+ CFFL_IFormFiller* GetFormFiller() { return m_pFormFiller; }
+
+ private:
+ CPDFDoc_Environment* m_pApp;
+ CFFL_IFormFiller* m_pFormFiller;
};
#define CBA_AnnotHandlerArray CFX_ArrayTemplate<IPDFSDK_AnnotHandler*>
-class CPDFSDK_AnnotHandlerMgr
-{
-public:
- // Destroy the handler
- CPDFSDK_AnnotHandlerMgr(CPDFDoc_Environment* pApp);
- virtual ~CPDFSDK_AnnotHandlerMgr() ;
-
-public:
- void RegisterAnnotHandler(IPDFSDK_AnnotHandler* pAnnotHandler);
- void UnRegisterAnnotHandler(IPDFSDK_AnnotHandler* pAnnotHandler);
-
- virtual CPDFSDK_Annot* NewAnnot(CPDF_Annot * pAnnot, CPDFSDK_PageView *pPageView);
- virtual void ReleaseAnnot(CPDFSDK_Annot * pAnnot);
-
- virtual void Annot_OnCreate(CPDFSDK_Annot* pAnnot);
- virtual void Annot_OnLoad(CPDFSDK_Annot* pAnnot);
-public:
- IPDFSDK_AnnotHandler* GetAnnotHandler(CPDFSDK_Annot* pAnnot) const;
- virtual void Annot_OnDraw(CPDFSDK_PageView* pPageView, CPDFSDK_Annot* pAnnot,
- CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device,FX_DWORD dwFlags);
-
- virtual void Annot_OnMouseEnter(CPDFSDK_PageView * pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags);
- virtual void Annot_OnMouseExit(CPDFSDK_PageView * pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags);
-
- virtual FX_BOOL Annot_OnLButtonDown(CPDFSDK_PageView * pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point);
- virtual FX_BOOL Annot_OnLButtonUp(CPDFSDK_PageView * pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point);
- virtual FX_BOOL Annot_OnLButtonDblClk(CPDFSDK_PageView * pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point);
-
- virtual FX_BOOL Annot_OnMouseMove(CPDFSDK_PageView * pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point);
- virtual FX_BOOL Annot_OnMouseWheel(CPDFSDK_PageView * pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, short zDelta, const CPDF_Point& point);
- virtual FX_BOOL Annot_OnRButtonDown(CPDFSDK_PageView * pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point);
- virtual FX_BOOL Annot_OnRButtonUp(CPDFSDK_PageView * pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point);
-
-
- virtual FX_BOOL Annot_OnChar(CPDFSDK_Annot* pAnnot, FX_DWORD nChar, FX_DWORD nFlags);
- virtual FX_BOOL Annot_OnKeyDown(CPDFSDK_Annot* pAnnot, int nKeyCode, int nFlag);
- virtual FX_BOOL Annot_OnKeyUp(CPDFSDK_Annot* pAnnot, int nKeyCode, int nFlag);
-
- virtual FX_BOOL Annot_OnSetFocus(CPDFSDK_Annot* pAnnot, FX_DWORD nFlag);
- virtual FX_BOOL Annot_OnKillFocus(CPDFSDK_Annot* pAnnot, FX_DWORD nFlag);
-
- virtual CPDF_Rect Annot_OnGetViewBBox(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot);
- virtual FX_BOOL Annot_OnHitTest(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, const CPDF_Point& point);
-
-private:
- IPDFSDK_AnnotHandler* GetAnnotHandler(const CFX_ByteString& sType) const;
- CPDFSDK_Annot* GetNextAnnot(CPDFSDK_Annot* pSDKAnnot,FX_BOOL bNext);
-private:
- CBA_AnnotHandlerArray m_Handlers;
- CFX_MapByteStringToPtr m_mapType2Handler;
- CPDFDoc_Environment* m_pApp;
+class CPDFSDK_AnnotHandlerMgr {
+ public:
+ // Destroy the handler
+ CPDFSDK_AnnotHandlerMgr(CPDFDoc_Environment* pApp);
+ virtual ~CPDFSDK_AnnotHandlerMgr();
+
+ public:
+ void RegisterAnnotHandler(IPDFSDK_AnnotHandler* pAnnotHandler);
+ void UnRegisterAnnotHandler(IPDFSDK_AnnotHandler* pAnnotHandler);
+
+ virtual CPDFSDK_Annot* NewAnnot(CPDF_Annot* pAnnot,
+ CPDFSDK_PageView* pPageView);
+ virtual void ReleaseAnnot(CPDFSDK_Annot* pAnnot);
+
+ virtual void Annot_OnCreate(CPDFSDK_Annot* pAnnot);
+ virtual void Annot_OnLoad(CPDFSDK_Annot* pAnnot);
+
+ public:
+ IPDFSDK_AnnotHandler* GetAnnotHandler(CPDFSDK_Annot* pAnnot) const;
+ virtual void Annot_OnDraw(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ CFX_RenderDevice* pDevice,
+ CPDF_Matrix* pUser2Device,
+ FX_DWORD dwFlags);
+
+ virtual void Annot_OnMouseEnter(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_DWORD nFlags);
+ virtual void Annot_OnMouseExit(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_DWORD nFlags);
+
+ virtual FX_BOOL Annot_OnLButtonDown(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_DWORD nFlags,
+ const CPDF_Point& point);
+ virtual FX_BOOL Annot_OnLButtonUp(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_DWORD nFlags,
+ const CPDF_Point& point);
+ virtual FX_BOOL Annot_OnLButtonDblClk(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_DWORD nFlags,
+ const CPDF_Point& point);
+
+ virtual FX_BOOL Annot_OnMouseMove(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_DWORD nFlags,
+ const CPDF_Point& point);
+ virtual FX_BOOL Annot_OnMouseWheel(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_DWORD nFlags,
+ short zDelta,
+ const CPDF_Point& point);
+ virtual FX_BOOL Annot_OnRButtonDown(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_DWORD nFlags,
+ const CPDF_Point& point);
+ virtual FX_BOOL Annot_OnRButtonUp(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_DWORD nFlags,
+ const CPDF_Point& point);
+
+ virtual FX_BOOL Annot_OnChar(CPDFSDK_Annot* pAnnot,
+ FX_DWORD nChar,
+ FX_DWORD nFlags);
+ virtual FX_BOOL Annot_OnKeyDown(CPDFSDK_Annot* pAnnot,
+ int nKeyCode,
+ int nFlag);
+ virtual FX_BOOL Annot_OnKeyUp(CPDFSDK_Annot* pAnnot, int nKeyCode, int nFlag);
+
+ virtual FX_BOOL Annot_OnSetFocus(CPDFSDK_Annot* pAnnot, FX_DWORD nFlag);
+ virtual FX_BOOL Annot_OnKillFocus(CPDFSDK_Annot* pAnnot, FX_DWORD nFlag);
+
+ virtual CPDF_Rect Annot_OnGetViewBBox(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot);
+ virtual FX_BOOL Annot_OnHitTest(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ const CPDF_Point& point);
+
+ private:
+ IPDFSDK_AnnotHandler* GetAnnotHandler(const CFX_ByteString& sType) const;
+ CPDFSDK_Annot* GetNextAnnot(CPDFSDK_Annot* pSDKAnnot, FX_BOOL bNext);
+
+ private:
+ CBA_AnnotHandlerArray m_Handlers;
+ CFX_MapByteStringToPtr m_mapType2Handler;
+ CPDFDoc_Environment* m_pApp;
};
-typedef int (*AI_COMPARE) (CPDFSDK_Annot* p1, CPDFSDK_Annot* p2);
-
-class CPDFSDK_AnnotIterator
-{
-public:
- CPDFSDK_AnnotIterator(CPDFSDK_PageView * pPageView, FX_BOOL bReverse,
- FX_BOOL bIgnoreTopmost=FALSE,FX_BOOL bCircle=FALSE,CFX_PtrArray* pList=NULL);
- virtual ~CPDFSDK_AnnotIterator() { }
-
- virtual CPDFSDK_Annot* Next (const CPDFSDK_Annot* pCurrent) ;
- virtual CPDFSDK_Annot* Prev (const CPDFSDK_Annot* pCurrent) ;
- virtual CPDFSDK_Annot* Next(int& index ) ;
- virtual CPDFSDK_Annot* Prev(int& index ) ;
- virtual int Count(){return m_pIteratorAnnotList.GetSize();}
-
- virtual FX_BOOL InitIteratorAnnotList(CPDFSDK_PageView * pPageView,CFX_PtrArray* pList=NULL);
-
- void InsertSort(CFX_PtrArray &arrayList, AI_COMPARE pCompare);
-
-protected:
- CPDFSDK_Annot* NextAnnot (const CPDFSDK_Annot* pCurrent) ;
- CPDFSDK_Annot* PrevAnnot (const CPDFSDK_Annot* pCurrent) ;
- CPDFSDK_Annot* NextAnnot(int& index ) ;
- CPDFSDK_Annot* PrevAnnot(int& index ) ;
-
- CFX_PtrArray m_pIteratorAnnotList;
- FX_BOOL m_bReverse;
- FX_BOOL m_bIgnoreTopmost;
- FX_BOOL m_bCircle;
+typedef int (*AI_COMPARE)(CPDFSDK_Annot* p1, CPDFSDK_Annot* p2);
+
+class CPDFSDK_AnnotIterator {
+ public:
+ CPDFSDK_AnnotIterator(CPDFSDK_PageView* pPageView,
+ FX_BOOL bReverse,
+ FX_BOOL bIgnoreTopmost = FALSE,
+ FX_BOOL bCircle = FALSE,
+ CFX_PtrArray* pList = NULL);
+ virtual ~CPDFSDK_AnnotIterator() {}
+
+ virtual CPDFSDK_Annot* Next(const CPDFSDK_Annot* pCurrent);
+ virtual CPDFSDK_Annot* Prev(const CPDFSDK_Annot* pCurrent);
+ virtual CPDFSDK_Annot* Next(int& index);
+ virtual CPDFSDK_Annot* Prev(int& index);
+ virtual int Count() { return m_pIteratorAnnotList.GetSize(); }
+
+ virtual FX_BOOL InitIteratorAnnotList(CPDFSDK_PageView* pPageView,
+ CFX_PtrArray* pList = NULL);
+
+ void InsertSort(CFX_PtrArray& arrayList, AI_COMPARE pCompare);
+
+ protected:
+ CPDFSDK_Annot* NextAnnot(const CPDFSDK_Annot* pCurrent);
+ CPDFSDK_Annot* PrevAnnot(const CPDFSDK_Annot* pCurrent);
+ CPDFSDK_Annot* NextAnnot(int& index);
+ CPDFSDK_Annot* PrevAnnot(int& index);
+
+ CFX_PtrArray m_pIteratorAnnotList;
+ FX_BOOL m_bReverse;
+ FX_BOOL m_bIgnoreTopmost;
+ FX_BOOL m_bCircle;
};
#endif // FPDFSDK_INCLUDE_FSDK_ANNOTHANDLER_H_
diff --git a/fpdfsdk/include/fsdk_baseannot.h b/fpdfsdk/include/fsdk_baseannot.h
index dcd295de9f..bfeebeb9f3 100644
--- a/fpdfsdk/include/fsdk_baseannot.h
+++ b/fpdfsdk/include/fsdk_baseannot.h
@@ -25,169 +25,172 @@ class CPDF_Matrix;
class CPDF_RenderOptions;
class CFX_RenderDevice;
-#define CFX_IntArray CFX_ArrayTemplate<int>
-
-class CPDFSDK_DateTime
-{
-public:
- CPDFSDK_DateTime();
- CPDFSDK_DateTime(const CFX_ByteString& dtStr);
- CPDFSDK_DateTime(const CPDFSDK_DateTime& datetime);
- CPDFSDK_DateTime(const FX_SYSTEMTIME& st);
-
-
- CPDFSDK_DateTime& operator = (const CPDFSDK_DateTime& datetime);
- CPDFSDK_DateTime& operator = (const FX_SYSTEMTIME& st);
- FX_BOOL operator == (CPDFSDK_DateTime& datetime);
- FX_BOOL operator != (CPDFSDK_DateTime& datetime);
- FX_BOOL operator > (CPDFSDK_DateTime& datetime);
- FX_BOOL operator >= (CPDFSDK_DateTime& datetime);
- FX_BOOL operator < (CPDFSDK_DateTime& datetime);
- FX_BOOL operator <= (CPDFSDK_DateTime& datetime);
- operator time_t();
-
- CPDFSDK_DateTime& FromPDFDateTimeString(const CFX_ByteString& dtStr);
- CFX_ByteString ToCommonDateTimeString();
- CFX_ByteString ToPDFDateTimeString();
- void ToSystemTime(FX_SYSTEMTIME& st);
- CPDFSDK_DateTime ToGMT();
- CPDFSDK_DateTime& AddDays(short days);
- CPDFSDK_DateTime& AddSeconds(int seconds);
-
- void ResetDateTime();
-
- struct FX_DATETIME
- {
- int16_t year;
- uint8_t month;
- uint8_t day;
- uint8_t hour;
- uint8_t minute;
- uint8_t second;
- int8_t tzHour;
- uint8_t tzMinute;
- }dt;
+#define CFX_IntArray CFX_ArrayTemplate<int>
+
+class CPDFSDK_DateTime {
+ public:
+ CPDFSDK_DateTime();
+ CPDFSDK_DateTime(const CFX_ByteString& dtStr);
+ CPDFSDK_DateTime(const CPDFSDK_DateTime& datetime);
+ CPDFSDK_DateTime(const FX_SYSTEMTIME& st);
+
+ CPDFSDK_DateTime& operator=(const CPDFSDK_DateTime& datetime);
+ CPDFSDK_DateTime& operator=(const FX_SYSTEMTIME& st);
+ FX_BOOL operator==(CPDFSDK_DateTime& datetime);
+ FX_BOOL operator!=(CPDFSDK_DateTime& datetime);
+ FX_BOOL operator>(CPDFSDK_DateTime& datetime);
+ FX_BOOL operator>=(CPDFSDK_DateTime& datetime);
+ FX_BOOL operator<(CPDFSDK_DateTime& datetime);
+ FX_BOOL operator<=(CPDFSDK_DateTime& datetime);
+ operator time_t();
+
+ CPDFSDK_DateTime& FromPDFDateTimeString(const CFX_ByteString& dtStr);
+ CFX_ByteString ToCommonDateTimeString();
+ CFX_ByteString ToPDFDateTimeString();
+ void ToSystemTime(FX_SYSTEMTIME& st);
+ CPDFSDK_DateTime ToGMT();
+ CPDFSDK_DateTime& AddDays(short days);
+ CPDFSDK_DateTime& AddSeconds(int seconds);
+
+ void ResetDateTime();
+
+ struct FX_DATETIME {
+ int16_t year;
+ uint8_t month;
+ uint8_t day;
+ uint8_t hour;
+ uint8_t minute;
+ uint8_t second;
+ int8_t tzHour;
+ uint8_t tzMinute;
+ } dt;
};
-class CPDFSDK_Annot
-{
-public:
- CPDFSDK_Annot(CPDF_Annot* pAnnot, CPDFSDK_PageView* pPageView);
- virtual ~CPDFSDK_Annot();
-public:
- virtual FX_FLOAT GetMinWidth() const;
- virtual FX_FLOAT GetMinHeight() const;
- //define layout order to 5.
- virtual int GetLayoutOrder() const { return 5; }
+class CPDFSDK_Annot {
+ public:
+ CPDFSDK_Annot(CPDF_Annot* pAnnot, CPDFSDK_PageView* pPageView);
+ virtual ~CPDFSDK_Annot();
-public:
- CPDF_Annot* GetPDFAnnot();
+ public:
+ virtual FX_FLOAT GetMinWidth() const;
+ virtual FX_FLOAT GetMinHeight() const;
+ // define layout order to 5.
+ virtual int GetLayoutOrder() const { return 5; }
- void SetPage(CPDFSDK_PageView* pPageView);
- CPDFSDK_PageView* GetPageView();
- FX_DWORD GetFlags();
+ public:
+ CPDF_Annot* GetPDFAnnot();
- // Tab Order
- int GetTabOrder();
- void SetTabOrder(int iTabOrder);
+ void SetPage(CPDFSDK_PageView* pPageView);
+ CPDFSDK_PageView* GetPageView();
+ FX_DWORD GetFlags();
- // Selection
- FX_BOOL IsSelected();
- void SetSelected(FX_BOOL bSelected);
+ // Tab Order
+ int GetTabOrder();
+ void SetTabOrder(int iTabOrder);
- CFX_ByteString GetType() const;
- virtual CFX_ByteString GetSubType() const;
+ // Selection
+ FX_BOOL IsSelected();
+ void SetSelected(FX_BOOL bSelected);
- CPDF_Page* GetPDFPage();
+ CFX_ByteString GetType() const;
+ virtual CFX_ByteString GetSubType() const;
-public:
- CPDF_Dictionary* GetAnnotDict() const;
+ CPDF_Page* GetPDFPage();
- void SetRect(const CPDF_Rect& rect);
- CPDF_Rect GetRect() const;
+ public:
+ CPDF_Dictionary* GetAnnotDict() const;
- void SetContents(const CFX_WideString& sContents);
- CFX_WideString GetContents() const;
+ void SetRect(const CPDF_Rect& rect);
+ CPDF_Rect GetRect() const;
- void SetAnnotName(const CFX_WideString& sName);
- CFX_WideString GetAnnotName() const;
+ void SetContents(const CFX_WideString& sContents);
+ CFX_WideString GetContents() const;
- void SetModifiedDate(const FX_SYSTEMTIME& st);
- FX_SYSTEMTIME GetModifiedDate() const;
+ void SetAnnotName(const CFX_WideString& sName);
+ CFX_WideString GetAnnotName() const;
- void SetFlags(int nFlags);
- int GetFlags() const;
+ void SetModifiedDate(const FX_SYSTEMTIME& st);
+ FX_SYSTEMTIME GetModifiedDate() const;
- void SetAppState(const CFX_ByteString& str);
- CFX_ByteString GetAppState() const;
+ void SetFlags(int nFlags);
+ int GetFlags() const;
- void SetStructParent(int key);
- int GetStructParent() const;
+ void SetAppState(const CFX_ByteString& str);
+ CFX_ByteString GetAppState() const;
- //border
- void SetBorderWidth(int nWidth);
- int GetBorderWidth() const;
+ void SetStructParent(int key);
+ int GetStructParent() const;
- //BBS_SOLID
- //BBS_DASH
- //BBS_BEVELED
- //BBS_INSET
- //BBS_UNDERLINE
+ // border
+ void SetBorderWidth(int nWidth);
+ int GetBorderWidth() const;
- void SetBorderStyle(int nStyle);
- int GetBorderStyle() const;
+ // BBS_SOLID
+ // BBS_DASH
+ // BBS_BEVELED
+ // BBS_INSET
+ // BBS_UNDERLINE
- void SetBorderDash(const CFX_IntArray& array);
- void GetBorderDash(CFX_IntArray& array) const;
+ void SetBorderStyle(int nStyle);
+ int GetBorderStyle() const;
- //The background of the annotation's icon when closed
- //The title bar of the annotation's pop-up window
- //The border of a link annotation
+ void SetBorderDash(const CFX_IntArray& array);
+ void GetBorderDash(CFX_IntArray& array) const;
- void SetColor(FX_COLORREF color);
- void RemoveColor();
- FX_BOOL GetColor(FX_COLORREF& color) const;
+ // The background of the annotation's icon when closed
+ // The title bar of the annotation's pop-up window
+ // The border of a link annotation
- FX_BOOL IsVisible() const;
- //action
+ void SetColor(FX_COLORREF color);
+ void RemoveColor();
+ FX_BOOL GetColor(FX_COLORREF& color) const;
- CPDF_Action GetAction() const;
- void SetAction(const CPDF_Action& a);
- void RemoveAction();
+ FX_BOOL IsVisible() const;
+ // action
- CPDF_AAction GetAAction() const;
- void SetAAction(const CPDF_AAction& aa);
- void RemoveAAction();
+ CPDF_Action GetAction() const;
+ void SetAction(const CPDF_Action& a);
+ void RemoveAction();
- virtual CPDF_Action GetAAction(CPDF_AAction::AActionType eAAT);
+ CPDF_AAction GetAAction() const;
+ void SetAAction(const CPDF_AAction& aa);
+ void RemoveAAction();
-public:
- FX_BOOL IsAppearanceValid();
- FX_BOOL IsAppearanceValid(CPDF_Annot::AppearanceMode mode);
- void DrawAppearance(CFX_RenderDevice* pDevice, const CPDF_Matrix* pUser2Device,
- CPDF_Annot::AppearanceMode mode, const CPDF_RenderOptions* pOptions);
- void DrawBorder(CFX_RenderDevice* pDevice, const CPDF_Matrix* pUser2Device,
- const CPDF_RenderOptions* pOptions);
+ virtual CPDF_Action GetAAction(CPDF_AAction::AActionType eAAT);
- void ClearCachedAP();
+ public:
+ FX_BOOL IsAppearanceValid();
+ FX_BOOL IsAppearanceValid(CPDF_Annot::AppearanceMode mode);
+ void DrawAppearance(CFX_RenderDevice* pDevice,
+ const CPDF_Matrix* pUser2Device,
+ CPDF_Annot::AppearanceMode mode,
+ const CPDF_RenderOptions* pOptions);
+ void DrawBorder(CFX_RenderDevice* pDevice,
+ const CPDF_Matrix* pUser2Device,
+ const CPDF_RenderOptions* pOptions);
- void WriteAppearance(const CFX_ByteString& sAPType, const CPDF_Rect& rcBBox,
- const CPDF_Matrix& matrix, const CFX_ByteString& sContents,
- const CFX_ByteString& sAPState = "");
+ void ClearCachedAP();
-public:
- virtual void Annot_OnDraw(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device,CPDF_RenderOptions* pOptions);
-public:
+ void WriteAppearance(const CFX_ByteString& sAPType,
+ const CPDF_Rect& rcBBox,
+ const CPDF_Matrix& matrix,
+ const CFX_ByteString& sContents,
+ const CFX_ByteString& sAPState = "");
+ public:
+ virtual void Annot_OnDraw(CFX_RenderDevice* pDevice,
+ CPDF_Matrix* pUser2Device,
+ CPDF_RenderOptions* pOptions);
-private:
- FX_BOOL CreateFormFiller();
-protected:
- CPDF_Annot* m_pAnnot;
- CPDFSDK_PageView* m_pPageView;
- FX_BOOL m_bSelected;
- int m_nTabOrder;
+ public:
+ private:
+ FX_BOOL CreateFormFiller();
+ protected:
+ CPDF_Annot* m_pAnnot;
+ CPDFSDK_PageView* m_pPageView;
+ FX_BOOL m_bSelected;
+ int m_nTabOrder;
};
#endif // FPDFSDK_INCLUDE_FSDK_BASEANNOT_H_
diff --git a/fpdfsdk/include/fsdk_baseform.h b/fpdfsdk/include/fsdk_baseform.h
index edbd5e4efc..b685ae6a8e 100644
--- a/fpdfsdk/include/fsdk_baseform.h
+++ b/fpdfsdk/include/fsdk_baseform.h
@@ -31,255 +31,277 @@ class CPDF_Action;
class CPDF_FormField;
struct CPWL_Color;
-typedef struct _PDFSDK_FieldAction
-{
- _PDFSDK_FieldAction()
- {
- bModifier = FALSE;
- bShift = FALSE;
- nCommitKey = 0;
- bKeyDown = FALSE;
- nSelEnd = nSelStart = 0;
- bWillCommit = FALSE;
- bFieldFull = FALSE;
- bRC = TRUE;
- }
-
- FX_BOOL bModifier; //in
- FX_BOOL bShift; //in
- int nCommitKey; //in
- CFX_WideString sChange; //in[out]
- CFX_WideString sChangeEx; //in
- FX_BOOL bKeyDown; //in
- int nSelEnd; //in[out]
- int nSelStart; //in[out]
- CFX_WideString sValue; //in[out]
- FX_BOOL bWillCommit; //in
- FX_BOOL bFieldFull; //in
- FX_BOOL bRC; //in[out]
-}PDFSDK_FieldAction;
-class CPDFSDK_Widget : public CPDFSDK_Annot
-{
-public:
- CPDFSDK_Widget(CPDF_Annot* pAnnot, CPDFSDK_PageView* pPageView, CPDFSDK_InterForm* pInterForm);
- virtual ~CPDFSDK_Widget();
-
- virtual CFX_ByteString GetSubType() const;
-
- virtual CPDF_Action GetAAction(CPDF_AAction::AActionType eAAT);
-
- int GetFieldType() const;
- //define layout order to 2.
- virtual int GetLayoutOrder() const {return 2;}
- /*
- FIELDFLAG_READONLY
- FIELDFLAG_REQUIRED
- FIELDFLAG_NOEXPORT
- */
-
- int GetFieldFlags() const;
- int GetRotate() const;
-
- FX_BOOL GetFillColor(FX_COLORREF& color) const;
- FX_BOOL GetBorderColor(FX_COLORREF& color) const;
- FX_BOOL GetTextColor(FX_COLORREF& color) const;
- FX_FLOAT GetFontSize() const;
-
- int GetSelectedIndex(int nIndex) const;
- CFX_WideString GetValue() const;
- CFX_WideString GetDefaultValue() const;
- CFX_WideString GetOptionLabel(int nIndex) const;
- int CountOptions() const;
- FX_BOOL IsOptionSelected(int nIndex) const;
- int GetTopVisibleIndex() const;
- FX_BOOL IsChecked() const;
- /*
- BF_ALIGN_LEFT
- BF_ALIGN_MIDDL
- BF_ALIGN_RIGHT
- */
- int GetAlignment() const;
- int GetMaxLen() const;
- CFX_WideString GetAlternateName() const;
-
-//Set Properties.
- void SetCheck(FX_BOOL bChecked, FX_BOOL bNotify);
- void SetValue(const CFX_WideString& sValue, FX_BOOL bNotify);
- void SetDefaultValue(const CFX_WideString& sValue);
- void SetOptionSelection(int index, FX_BOOL bSelected, FX_BOOL bNotify);
- void ClearSelection(FX_BOOL bNotify);
- void SetTopVisibleIndex(int index);
-
- void ResetAppearance(const FX_WCHAR* sValue, FX_BOOL bValueChanged);
- void ResetFieldAppearance(FX_BOOL bValueChanged);
- void UpdateField();
- CFX_WideString OnFormat(FX_BOOL& bFormated);
-
-//Message.
- FX_BOOL OnAAction(CPDF_AAction::AActionType type, PDFSDK_FieldAction& data,
- CPDFSDK_PageView* pPageView);
-
- CPDFSDK_InterForm* GetInterForm() const {return m_pInterForm;}
- CPDF_FormField* GetFormField() const;
- CPDF_FormControl* GetFormControl() const;
- static CPDF_FormControl* GetFormControl(CPDF_InterForm* pInterForm, CPDF_Dictionary* pAnnotDict);
-
- void DrawShadow(CFX_RenderDevice* pDevice, CPDFSDK_PageView* pPageView);
-
- void SetAppModified();
- void ClearAppModified();
- FX_BOOL IsAppModified() const;
-
- int32_t GetAppearanceAge() const;
- int32_t GetValueAge() const;
-
-private:
- void ResetAppearance_PushButton();
- void ResetAppearance_CheckBox();
- void ResetAppearance_RadioButton();
- void ResetAppearance_ComboBox(const FX_WCHAR* sValue);
- void ResetAppearance_ListBox();
- void ResetAppearance_TextField(const FX_WCHAR* sValue);
-
- CPDF_Rect GetClientRect() const;
- CPDF_Rect GetRotatedRect() const;
-
- CFX_ByteString GetBackgroundAppStream() const;
- CFX_ByteString GetBorderAppStream() const;
- CPDF_Matrix GetMatrix() const;
-
- CPWL_Color GetTextPWLColor() const;
- CPWL_Color GetBorderPWLColor() const;
- CPWL_Color GetFillPWLColor() const;
-
- void AddImageToAppearance(const CFX_ByteString& sAPType, CPDF_Stream* pImage);
- void RemoveAppearance(const CFX_ByteString& sAPType);
-public:
- FX_BOOL IsWidgetAppearanceValid(CPDF_Annot::AppearanceMode mode);
- void DrawAppearance(CFX_RenderDevice* pDevice, const CPDF_Matrix* pUser2Device,
- CPDF_Annot::AppearanceMode mode, const CPDF_RenderOptions* pOptions);
-public:
- FX_BOOL HitTest(FX_FLOAT pageX, FX_FLOAT pageY);
-private:
- CPDFSDK_InterForm* m_pInterForm;
- FX_BOOL m_bAppModified;
- int32_t m_nAppAge;
- int32_t m_nValueAge;
+typedef struct _PDFSDK_FieldAction {
+ _PDFSDK_FieldAction() {
+ bModifier = FALSE;
+ bShift = FALSE;
+ nCommitKey = 0;
+ bKeyDown = FALSE;
+ nSelEnd = nSelStart = 0;
+ bWillCommit = FALSE;
+ bFieldFull = FALSE;
+ bRC = TRUE;
+ }
+
+ FX_BOOL bModifier; // in
+ FX_BOOL bShift; // in
+ int nCommitKey; // in
+ CFX_WideString sChange; // in[out]
+ CFX_WideString sChangeEx; // in
+ FX_BOOL bKeyDown; // in
+ int nSelEnd; // in[out]
+ int nSelStart; // in[out]
+ CFX_WideString sValue; // in[out]
+ FX_BOOL bWillCommit; // in
+ FX_BOOL bFieldFull; // in
+ FX_BOOL bRC; // in[out]
+} PDFSDK_FieldAction;
+class CPDFSDK_Widget : public CPDFSDK_Annot {
+ public:
+ CPDFSDK_Widget(CPDF_Annot* pAnnot,
+ CPDFSDK_PageView* pPageView,
+ CPDFSDK_InterForm* pInterForm);
+ virtual ~CPDFSDK_Widget();
+
+ virtual CFX_ByteString GetSubType() const;
+
+ virtual CPDF_Action GetAAction(CPDF_AAction::AActionType eAAT);
+
+ int GetFieldType() const;
+ // define layout order to 2.
+ virtual int GetLayoutOrder() const { return 2; }
+ /*
+ FIELDFLAG_READONLY
+ FIELDFLAG_REQUIRED
+ FIELDFLAG_NOEXPORT
+ */
+
+ int GetFieldFlags() const;
+ int GetRotate() const;
+
+ FX_BOOL GetFillColor(FX_COLORREF& color) const;
+ FX_BOOL GetBorderColor(FX_COLORREF& color) const;
+ FX_BOOL GetTextColor(FX_COLORREF& color) const;
+ FX_FLOAT GetFontSize() const;
+
+ int GetSelectedIndex(int nIndex) const;
+ CFX_WideString GetValue() const;
+ CFX_WideString GetDefaultValue() const;
+ CFX_WideString GetOptionLabel(int nIndex) const;
+ int CountOptions() const;
+ FX_BOOL IsOptionSelected(int nIndex) const;
+ int GetTopVisibleIndex() const;
+ FX_BOOL IsChecked() const;
+ /*
+ BF_ALIGN_LEFT
+ BF_ALIGN_MIDDL
+ BF_ALIGN_RIGHT
+ */
+ int GetAlignment() const;
+ int GetMaxLen() const;
+ CFX_WideString GetAlternateName() const;
+
+ // Set Properties.
+ void SetCheck(FX_BOOL bChecked, FX_BOOL bNotify);
+ void SetValue(const CFX_WideString& sValue, FX_BOOL bNotify);
+ void SetDefaultValue(const CFX_WideString& sValue);
+ void SetOptionSelection(int index, FX_BOOL bSelected, FX_BOOL bNotify);
+ void ClearSelection(FX_BOOL bNotify);
+ void SetTopVisibleIndex(int index);
+
+ void ResetAppearance(const FX_WCHAR* sValue, FX_BOOL bValueChanged);
+ void ResetFieldAppearance(FX_BOOL bValueChanged);
+ void UpdateField();
+ CFX_WideString OnFormat(FX_BOOL& bFormated);
+
+ // Message.
+ FX_BOOL OnAAction(CPDF_AAction::AActionType type,
+ PDFSDK_FieldAction& data,
+ CPDFSDK_PageView* pPageView);
+
+ CPDFSDK_InterForm* GetInterForm() const { return m_pInterForm; }
+ CPDF_FormField* GetFormField() const;
+ CPDF_FormControl* GetFormControl() const;
+ static CPDF_FormControl* GetFormControl(CPDF_InterForm* pInterForm,
+ CPDF_Dictionary* pAnnotDict);
+
+ void DrawShadow(CFX_RenderDevice* pDevice, CPDFSDK_PageView* pPageView);
+
+ void SetAppModified();
+ void ClearAppModified();
+ FX_BOOL IsAppModified() const;
+
+ int32_t GetAppearanceAge() const;
+ int32_t GetValueAge() const;
+
+ private:
+ void ResetAppearance_PushButton();
+ void ResetAppearance_CheckBox();
+ void ResetAppearance_RadioButton();
+ void ResetAppearance_ComboBox(const FX_WCHAR* sValue);
+ void ResetAppearance_ListBox();
+ void ResetAppearance_TextField(const FX_WCHAR* sValue);
+
+ CPDF_Rect GetClientRect() const;
+ CPDF_Rect GetRotatedRect() const;
+
+ CFX_ByteString GetBackgroundAppStream() const;
+ CFX_ByteString GetBorderAppStream() const;
+ CPDF_Matrix GetMatrix() const;
+
+ CPWL_Color GetTextPWLColor() const;
+ CPWL_Color GetBorderPWLColor() const;
+ CPWL_Color GetFillPWLColor() const;
+
+ void AddImageToAppearance(const CFX_ByteString& sAPType, CPDF_Stream* pImage);
+ void RemoveAppearance(const CFX_ByteString& sAPType);
+
+ public:
+ FX_BOOL IsWidgetAppearanceValid(CPDF_Annot::AppearanceMode mode);
+ void DrawAppearance(CFX_RenderDevice* pDevice,
+ const CPDF_Matrix* pUser2Device,
+ CPDF_Annot::AppearanceMode mode,
+ const CPDF_RenderOptions* pOptions);
+
+ public:
+ FX_BOOL HitTest(FX_FLOAT pageX, FX_FLOAT pageY);
+
+ private:
+ CPDFSDK_InterForm* m_pInterForm;
+ FX_BOOL m_bAppModified;
+ int32_t m_nAppAge;
+ int32_t m_nValueAge;
};
-class CPDFSDK_InterForm : public CPDF_FormNotify
-{
-public:
- explicit CPDFSDK_InterForm(CPDFSDK_Document* pDocument);
- ~CPDFSDK_InterForm() override;
+class CPDFSDK_InterForm : public CPDF_FormNotify {
+ public:
+ explicit CPDFSDK_InterForm(CPDFSDK_Document* pDocument);
+ ~CPDFSDK_InterForm() override;
- CPDF_InterForm* GetInterForm() const { return m_pInterForm; }
- CPDFSDK_Document* GetDocument() const { return m_pDocument; }
+ CPDF_InterForm* GetInterForm() const { return m_pInterForm; }
+ CPDFSDK_Document* GetDocument() const { return m_pDocument; }
- FX_BOOL HighlightWidgets();
+ FX_BOOL HighlightWidgets();
- CPDFSDK_Widget* GetSibling(CPDFSDK_Widget* pWidget, FX_BOOL bNext) const;
- CPDFSDK_Widget* GetWidget(CPDF_FormControl* pControl) const;
- void GetWidgets(const CFX_WideString& sFieldName, CFX_PtrArray& widgets);
- void GetWidgets(CPDF_FormField* pField, CFX_PtrArray& widgets);
+ CPDFSDK_Widget* GetSibling(CPDFSDK_Widget* pWidget, FX_BOOL bNext) const;
+ CPDFSDK_Widget* GetWidget(CPDF_FormControl* pControl) const;
+ void GetWidgets(const CFX_WideString& sFieldName, CFX_PtrArray& widgets);
+ void GetWidgets(CPDF_FormField* pField, CFX_PtrArray& widgets);
- void AddMap(CPDF_FormControl* pControl, CPDFSDK_Widget* pWidget);
- void RemoveMap(CPDF_FormControl* pControl);
+ void AddMap(CPDF_FormControl* pControl, CPDFSDK_Widget* pWidget);
+ void RemoveMap(CPDF_FormControl* pControl);
- void EnableCalculate(FX_BOOL bEnabled);
- FX_BOOL IsCalculateEnabled() const;
+ void EnableCalculate(FX_BOOL bEnabled);
+ FX_BOOL IsCalculateEnabled() const;
#ifdef _WIN32
- CPDF_Stream* LoadImageFromFile(const CFX_WideString& sFile);
+ CPDF_Stream* LoadImageFromFile(const CFX_WideString& sFile);
#endif
- void OnKeyStrokeCommit(CPDF_FormField* pFormField, CFX_WideString& csValue, FX_BOOL& bRC);
- void OnValidate(CPDF_FormField* pFormField, CFX_WideString& csValue, FX_BOOL& bRC);
- void OnCalculate(CPDF_FormField* pFormField = NULL);
- CFX_WideString OnFormat(CPDF_FormField* pFormField, FX_BOOL& bFormated);
-
- void ResetFieldAppearance(CPDF_FormField* pFormField, const FX_WCHAR* sValue, FX_BOOL bValueChanged);
- void UpdateField(CPDF_FormField* pFormField);
-
- FX_BOOL DoAction_Hide(const CPDF_Action& action);
- FX_BOOL DoAction_SubmitForm(const CPDF_Action& action);
- FX_BOOL DoAction_ResetForm(const CPDF_Action& action);
- FX_BOOL DoAction_ImportData(const CPDF_Action& action);
-
- void GetFieldFromObjects(const CFX_PtrArray& objects, CFX_PtrArray& fields);
- FX_BOOL IsValidField(CPDF_Dictionary* pFieldDict);
- FX_BOOL SubmitFields(const CFX_WideString& csDestination, const CFX_PtrArray& fields,
- FX_BOOL bIncludeOrExclude, FX_BOOL bUrlEncoded);
- FX_BOOL SubmitForm(const CFX_WideString& sDestination, FX_BOOL bUrlEncoded);
- FX_BOOL ExportFormToFDFTextBuf(CFX_ByteTextBuf& textBuf);
- FX_BOOL ExportFieldsToFDFTextBuf(const CFX_PtrArray& fields,FX_BOOL bIncludeOrExclude, CFX_ByteTextBuf& textBuf);
- CFX_WideString GetTemporaryFileName(const CFX_WideString& sFileExt);
-
-private:
- virtual int BeforeValueChange(const CPDF_FormField* pField, CFX_WideString& csValue);
- virtual int AfterValueChange(const CPDF_FormField* pField);
- virtual int BeforeSelectionChange(const CPDF_FormField* pField, CFX_WideString& csValue);
- virtual int AfterSelectionChange(const CPDF_FormField* pField);
- virtual int AfterCheckedStatusChange(const CPDF_FormField* pField, const CFX_ByteArray& statusArray);
- virtual int BeforeFormReset(const CPDF_InterForm* pForm);
- virtual int AfterFormReset(const CPDF_InterForm* pForm);
- virtual int BeforeFormImportData(const CPDF_InterForm* pForm);
- virtual int AfterFormImportData(const CPDF_InterForm* pForm);
-
- FX_BOOL FDFToURLEncodedData(CFX_WideString csFDFFile, CFX_WideString csTxtFile);
- FX_BOOL FDFToURLEncodedData(uint8_t*& pBuf, FX_STRSIZE& nBufSize);
- int GetPageIndexByAnnotDict(CPDF_Document* pDocument, CPDF_Dictionary* pAnnotDict) const;
- void DoFDFBuffer(CFX_ByteString sBuffer);
-
- using CPDFSDK_WidgetMap = std::map<CPDF_FormControl*, CPDFSDK_Widget*>;
-
- CPDFSDK_Document* m_pDocument;
- CPDF_InterForm* m_pInterForm;
- CPDFSDK_WidgetMap m_Map;
- FX_BOOL m_bCalculate;
- FX_BOOL m_bBusy;
-
-public:
- FX_BOOL IsNeedHighLight(int nFieldType);
- void RemoveAllHighLight();
- void SetHighlightAlpha(uint8_t alpha) {m_iHighlightAlpha = alpha;}
- uint8_t GetHighlightAlpha() {return m_iHighlightAlpha;}
- void SetHighlightColor(FX_COLORREF clr, int nFieldType);
- FX_COLORREF GetHighlightColor(int nFieldType);
-private:
- FX_COLORREF m_aHighlightColor[6];
- uint8_t m_iHighlightAlpha;
- FX_BOOL m_bNeedHightlight[6];
+ void OnKeyStrokeCommit(CPDF_FormField* pFormField,
+ CFX_WideString& csValue,
+ FX_BOOL& bRC);
+ void OnValidate(CPDF_FormField* pFormField,
+ CFX_WideString& csValue,
+ FX_BOOL& bRC);
+ void OnCalculate(CPDF_FormField* pFormField = NULL);
+ CFX_WideString OnFormat(CPDF_FormField* pFormField, FX_BOOL& bFormated);
+
+ void ResetFieldAppearance(CPDF_FormField* pFormField,
+ const FX_WCHAR* sValue,
+ FX_BOOL bValueChanged);
+ void UpdateField(CPDF_FormField* pFormField);
+
+ FX_BOOL DoAction_Hide(const CPDF_Action& action);
+ FX_BOOL DoAction_SubmitForm(const CPDF_Action& action);
+ FX_BOOL DoAction_ResetForm(const CPDF_Action& action);
+ FX_BOOL DoAction_ImportData(const CPDF_Action& action);
+
+ void GetFieldFromObjects(const CFX_PtrArray& objects, CFX_PtrArray& fields);
+ FX_BOOL IsValidField(CPDF_Dictionary* pFieldDict);
+ FX_BOOL SubmitFields(const CFX_WideString& csDestination,
+ const CFX_PtrArray& fields,
+ FX_BOOL bIncludeOrExclude,
+ FX_BOOL bUrlEncoded);
+ FX_BOOL SubmitForm(const CFX_WideString& sDestination, FX_BOOL bUrlEncoded);
+ FX_BOOL ExportFormToFDFTextBuf(CFX_ByteTextBuf& textBuf);
+ FX_BOOL ExportFieldsToFDFTextBuf(const CFX_PtrArray& fields,
+ FX_BOOL bIncludeOrExclude,
+ CFX_ByteTextBuf& textBuf);
+ CFX_WideString GetTemporaryFileName(const CFX_WideString& sFileExt);
+
+ private:
+ virtual int BeforeValueChange(const CPDF_FormField* pField,
+ CFX_WideString& csValue);
+ virtual int AfterValueChange(const CPDF_FormField* pField);
+ virtual int BeforeSelectionChange(const CPDF_FormField* pField,
+ CFX_WideString& csValue);
+ virtual int AfterSelectionChange(const CPDF_FormField* pField);
+ virtual int AfterCheckedStatusChange(const CPDF_FormField* pField,
+ const CFX_ByteArray& statusArray);
+ virtual int BeforeFormReset(const CPDF_InterForm* pForm);
+ virtual int AfterFormReset(const CPDF_InterForm* pForm);
+ virtual int BeforeFormImportData(const CPDF_InterForm* pForm);
+ virtual int AfterFormImportData(const CPDF_InterForm* pForm);
+
+ FX_BOOL FDFToURLEncodedData(CFX_WideString csFDFFile,
+ CFX_WideString csTxtFile);
+ FX_BOOL FDFToURLEncodedData(uint8_t*& pBuf, FX_STRSIZE& nBufSize);
+ int GetPageIndexByAnnotDict(CPDF_Document* pDocument,
+ CPDF_Dictionary* pAnnotDict) const;
+ void DoFDFBuffer(CFX_ByteString sBuffer);
+
+ using CPDFSDK_WidgetMap = std::map<CPDF_FormControl*, CPDFSDK_Widget*>;
+
+ CPDFSDK_Document* m_pDocument;
+ CPDF_InterForm* m_pInterForm;
+ CPDFSDK_WidgetMap m_Map;
+ FX_BOOL m_bCalculate;
+ FX_BOOL m_bBusy;
+
+ public:
+ FX_BOOL IsNeedHighLight(int nFieldType);
+ void RemoveAllHighLight();
+ void SetHighlightAlpha(uint8_t alpha) { m_iHighlightAlpha = alpha; }
+ uint8_t GetHighlightAlpha() { return m_iHighlightAlpha; }
+ void SetHighlightColor(FX_COLORREF clr, int nFieldType);
+ FX_COLORREF GetHighlightColor(int nFieldType);
+
+ private:
+ FX_COLORREF m_aHighlightColor[6];
+ uint8_t m_iHighlightAlpha;
+ FX_BOOL m_bNeedHightlight[6];
};
-#define BAI_STRUCTURE 0
-#define BAI_ROW 1
-#define BAI_COLUMN 2
-
-#define CPDFSDK_Annots CFX_ArrayTemplate<CPDFSDK_Annot*>
-#define CPDFSDK_SortAnnots CGW_ArrayTemplate<CPDFSDK_Annot*>
-class CBA_AnnotIterator
-{
-public:
- CBA_AnnotIterator(CPDFSDK_PageView* pPageView, const CFX_ByteString& sType, const CFX_ByteString& sSubType);
- ~CBA_AnnotIterator();
-
- CPDFSDK_Annot* GetFirstAnnot();
- CPDFSDK_Annot* GetLastAnnot();
- CPDFSDK_Annot* GetNextAnnot(CPDFSDK_Annot* pAnnot);
- CPDFSDK_Annot* GetPrevAnnot(CPDFSDK_Annot* pAnnot);
-
-private:
- void GenerateResults();
- static int CompareByLeft(CPDFSDK_Annot* p1, CPDFSDK_Annot* p2);
- static int CompareByTop(CPDFSDK_Annot* p1, CPDFSDK_Annot* p2);
- static CPDF_Rect GetAnnotRect(CPDFSDK_Annot* pAnnot);
-
- CPDFSDK_PageView* m_pPageView;
- CFX_ByteString m_sType;
- CFX_ByteString m_sSubType;
- int m_nTabs;
- CPDFSDK_Annots m_Annots;
+#define BAI_STRUCTURE 0
+#define BAI_ROW 1
+#define BAI_COLUMN 2
+
+#define CPDFSDK_Annots CFX_ArrayTemplate<CPDFSDK_Annot*>
+#define CPDFSDK_SortAnnots CGW_ArrayTemplate<CPDFSDK_Annot*>
+class CBA_AnnotIterator {
+ public:
+ CBA_AnnotIterator(CPDFSDK_PageView* pPageView,
+ const CFX_ByteString& sType,
+ const CFX_ByteString& sSubType);
+ ~CBA_AnnotIterator();
+
+ CPDFSDK_Annot* GetFirstAnnot();
+ CPDFSDK_Annot* GetLastAnnot();
+ CPDFSDK_Annot* GetNextAnnot(CPDFSDK_Annot* pAnnot);
+ CPDFSDK_Annot* GetPrevAnnot(CPDFSDK_Annot* pAnnot);
+
+ private:
+ void GenerateResults();
+ static int CompareByLeft(CPDFSDK_Annot* p1, CPDFSDK_Annot* p2);
+ static int CompareByTop(CPDFSDK_Annot* p1, CPDFSDK_Annot* p2);
+ static CPDF_Rect GetAnnotRect(CPDFSDK_Annot* pAnnot);
+
+ CPDFSDK_PageView* m_pPageView;
+ CFX_ByteString m_sType;
+ CFX_ByteString m_sSubType;
+ int m_nTabs;
+ CPDFSDK_Annots m_Annots;
};
#endif // FPDFSDK_INCLUDE_FSDK_BASEFORM_H_
diff --git a/fpdfsdk/include/fsdk_common.h b/fpdfsdk/include/fsdk_common.h
index b243cd4ab7..279048b9ac 100644
--- a/fpdfsdk/include/fsdk_common.h
+++ b/fpdfsdk/include/fsdk_common.h
@@ -7,39 +7,39 @@
#ifndef FPDFSDK_INCLUDE_FSDK_COMMON_H_
#define FPDFSDK_INCLUDE_FSDK_COMMON_H_
-#define BFFT_SIGNATURE "Signature"
+#define BFFT_SIGNATURE "Signature"
-//for all fields
-#define FIELDFLAG_READONLY 1
-#define FIELDFLAG_REQUIRED 2
-#define FIELDFLAG_NOEXPORT 4
-//for text fields
-#define FIELDFLAG_MULTILINE (1<<12)
-#define FIELDFLAG_PASSWORD (1<<13)
-#define FIELDFLAG_FILESELECT (1<<20)
-#define FIELDFLAG_DONOTSPELLCHECK (1<<22)
-#define FIELDFLAG_DONOTSCROLL (1<<23)
-#define FIELDFLAG_COMB (1<<24)
-#define FIELDFLAG_RICHTEXT (1<<25)
-//for button fileds
-#define FIELDFLAG_NOTOGGLETOOFF (1<<14)
-#define FIELDFLAG_RADIO (1<<15)
-#define FIELDFLAG_PUSHBUTTON (1<<16)
-#define FIELDFLAG_RADIOSINUNISON (1<<25)
-//for choice fields
-#define FIELDFLAG_COMBO (1<<17)
-#define FIELDFLAG_EDIT (1<<18)
-#define FIELDFLAG_SORT (1<<19)
-#define FIELDFLAG_MULTISELECT (1<<21)
+// for all fields
+#define FIELDFLAG_READONLY 1
+#define FIELDFLAG_REQUIRED 2
+#define FIELDFLAG_NOEXPORT 4
+// for text fields
+#define FIELDFLAG_MULTILINE (1 << 12)
+#define FIELDFLAG_PASSWORD (1 << 13)
+#define FIELDFLAG_FILESELECT (1 << 20)
+#define FIELDFLAG_DONOTSPELLCHECK (1 << 22)
+#define FIELDFLAG_DONOTSCROLL (1 << 23)
+#define FIELDFLAG_COMB (1 << 24)
+#define FIELDFLAG_RICHTEXT (1 << 25)
+// for button fileds
+#define FIELDFLAG_NOTOGGLETOOFF (1 << 14)
+#define FIELDFLAG_RADIO (1 << 15)
+#define FIELDFLAG_PUSHBUTTON (1 << 16)
+#define FIELDFLAG_RADIOSINUNISON (1 << 25)
+// for choice fields
+#define FIELDFLAG_COMBO (1 << 17)
+#define FIELDFLAG_EDIT (1 << 18)
+#define FIELDFLAG_SORT (1 << 19)
+#define FIELDFLAG_MULTISELECT (1 << 21)
#ifndef FIELDFLAG_DONOTSPELLCHECK
-#define FIELDFLAG_DONOTSPELLCHECK (1<<22)
+#define FIELDFLAG_DONOTSPELLCHECK (1 << 22)
#endif
-#define FIELDFLAG_COMMITONSELCHANGE (1<<26)
+#define FIELDFLAG_COMMITONSELCHANGE (1 << 26)
-#define BBS_SOLID 0
-#define BBS_DASH 1
-#define BBS_BEVELED 2
-#define BBS_INSET 3
-#define BBS_UNDERLINE 4
+#define BBS_SOLID 0
+#define BBS_DASH 1
+#define BBS_BEVELED 2
+#define BBS_INSET 3
+#define BBS_UNDERLINE 4
#endif // FPDFSDK_INCLUDE_FSDK_COMMON_H_
diff --git a/fpdfsdk/include/fsdk_define.h b/fpdfsdk/include/fsdk_define.h
index 29b265a428..310fa43bd0 100644
--- a/fpdfsdk/include/fsdk_define.h
+++ b/fpdfsdk/include/fsdk_define.h
@@ -27,40 +27,51 @@
#ifndef FX_ARGBTOCOLORREF
/** @brief Convert a #FX_ARGB to a #FX_COLORREF. */
-#define FX_ARGBTOCOLORREF(argb) ((((FX_DWORD)argb & 0x00FF0000) >> 16)|((FX_DWORD)argb & 0x0000FF00)|(((FX_DWORD)argb & 0x000000FF) << 16))
+#define FX_ARGBTOCOLORREF(argb) \
+ ((((FX_DWORD)argb & 0x00FF0000) >> 16) | ((FX_DWORD)argb & 0x0000FF00) | \
+ (((FX_DWORD)argb & 0x000000FF) << 16))
#endif
#ifndef FX_COLORREFTOARGB
/** @brief Convert a #FX_COLORREF to a #FX_ARGB. */
-#define FX_COLORREFTOARGB(rgb) ((FX_DWORD)0xFF000000|(((FX_DWORD)rgb & 0x000000FF) << 16)|((FX_DWORD)rgb & 0x0000FF00)|(((FX_DWORD)rgb & 0x00FF0000) >> 16))
+#define FX_COLORREFTOARGB(rgb) \
+ ((FX_DWORD)0xFF000000 | (((FX_DWORD)rgb & 0x000000FF) << 16) | \
+ ((FX_DWORD)rgb & 0x0000FF00) | (((FX_DWORD)rgb & 0x00FF0000) >> 16))
#endif
typedef unsigned int FX_UINT;
class CRenderContext;
class IFSDK_PAUSE_Adapter;
-class CPDF_CustomAccess final : public IFX_FileRead
-{
-public:
- CPDF_CustomAccess(FPDF_FILEACCESS* pFileAccess);
- ~CPDF_CustomAccess() {}
+class CPDF_CustomAccess final : public IFX_FileRead {
+ public:
+ CPDF_CustomAccess(FPDF_FILEACCESS* pFileAccess);
+ ~CPDF_CustomAccess() {}
- virtual FX_FILESIZE GetSize() override { return m_FileAccess.m_FileLen; }
+ virtual FX_FILESIZE GetSize() override { return m_FileAccess.m_FileLen; }
- virtual void Release() override { delete this; }
+ virtual void Release() override { delete this; }
- virtual FX_BOOL ReadBlock(void* buffer, FX_FILESIZE offset, size_t size) override;
+ virtual FX_BOOL ReadBlock(void* buffer,
+ FX_FILESIZE offset,
+ size_t size) override;
-private:
- FPDF_FILEACCESS m_FileAccess;
+ private:
+ FPDF_FILEACCESS m_FileAccess;
};
void DropContext(void* data);
void FSDK_SetSandBoxPolicy(FPDF_DWORD policy, FPDF_BOOL enable);
FPDF_BOOL FSDK_IsSandBoxPolicyEnabled(FPDF_DWORD policy);
-void FPDF_RenderPage_Retail(CRenderContext* pContext, FPDF_PAGE page,
- int start_x, int start_y, int size_x, int size_y,
- int rotate, int flags, FX_BOOL bNeedToRestore,
+void FPDF_RenderPage_Retail(CRenderContext* pContext,
+ FPDF_PAGE page,
+ int start_x,
+ int start_y,
+ int size_x,
+ int size_y,
+ int rotate,
+ int flags,
+ FX_BOOL bNeedToRestore,
IFSDK_PAUSE_Adapter* pause);
#endif // FPDFSDK_INCLUDE_FSDK_DEFINE_H_
diff --git a/fpdfsdk/include/fsdk_mgr.h b/fpdfsdk/include/fsdk_mgr.h
index d57138b350..4cb0ae8c15 100644
--- a/fpdfsdk/include/fsdk_mgr.h
+++ b/fpdfsdk/include/fsdk_mgr.h
@@ -11,7 +11,7 @@
#include "../../core/include/fpdftext/fpdf_text.h"
#include "../../public/fpdf_formfill.h"
-#include "../../public/fpdf_fwlevent.h" // cross platform keycode and events define.
+#include "../../public/fpdf_fwlevent.h" // cross platform keycode and events define.
#include "fsdk_common.h"
#include "fsdk_define.h"
#include "fx_systemhandler.h"
@@ -31,384 +31,399 @@ class CPDFSDK_PageView;
class CPDFSDK_Widget;
class IFX_SystemHandler;
-class CPDFDoc_Environment final
-{
-public:
- CPDFDoc_Environment(CPDF_Document* pDoc, FPDF_FORMFILLINFO* pFFinfo);
- ~CPDFDoc_Environment();
-
- void FFI_Invalidate(FPDF_PAGE page, double left, double top, double right, double bottom)
- {
- if (m_pInfo && m_pInfo->FFI_Invalidate)
- m_pInfo->FFI_Invalidate(m_pInfo, page, left, top, right, bottom);
- }
-
- void FFI_OutputSelectedRect(FPDF_PAGE page, double left, double top, double right, double bottom)
- {
- if (m_pInfo && m_pInfo->FFI_OutputSelectedRect)
- m_pInfo->FFI_OutputSelectedRect(m_pInfo, page, left, top, right, bottom);
- }
-
- void FFI_SetCursor(int nCursorType)
- {
- if (m_pInfo && m_pInfo->FFI_SetCursor)
- m_pInfo->FFI_SetCursor(m_pInfo, nCursorType);
- }
-
- int FFI_SetTimer(int uElapse, TimerCallback lpTimerFunc)
- {
- if (m_pInfo && m_pInfo->FFI_SetTimer)
- return m_pInfo->FFI_SetTimer(m_pInfo, uElapse, lpTimerFunc);
- return -1;
- }
-
- void FFI_KillTimer(int nTimerID)
- {
- if (m_pInfo && m_pInfo->FFI_KillTimer)
- m_pInfo->FFI_KillTimer(m_pInfo, nTimerID);
- }
-
- FX_SYSTEMTIME FFI_GetLocalTime() const
- {
- FX_SYSTEMTIME fxtime;
- if (m_pInfo && m_pInfo->FFI_GetLocalTime)
- {
- FPDF_SYSTEMTIME systime = m_pInfo->FFI_GetLocalTime(m_pInfo);
- fxtime.wDay = systime.wDay;
- fxtime.wDayOfWeek = systime.wDayOfWeek;
- fxtime.wHour = systime.wHour;
- fxtime.wMilliseconds = systime.wMilliseconds;
- fxtime.wMinute = systime.wMinute;
- fxtime.wMonth = systime.wMonth;
- fxtime.wSecond = systime.wSecond;
- fxtime.wYear = systime.wYear;
- }
- return fxtime;
- }
-
- void FFI_OnChange()
- {
- if (m_pInfo && m_pInfo->FFI_OnChange)
- m_pInfo->FFI_OnChange(m_pInfo);
- }
-
- FX_BOOL FFI_IsSHIFTKeyDown(FX_DWORD nFlag) const
- {
- return (nFlag & FWL_EVENTFLAG_ShiftKey) != 0;
- }
-
- FX_BOOL FFI_IsCTRLKeyDown(FX_DWORD nFlag) const
- {
- return (nFlag & FWL_EVENTFLAG_ControlKey) != 0;
- }
-
- FX_BOOL FFI_IsALTKeyDown(FX_DWORD nFlag) const
- {
- return (nFlag & FWL_EVENTFLAG_AltKey) != 0;
- }
-
- FX_BOOL FFI_IsINSERTKeyDown(FX_DWORD nFlag) const
- {
- return FALSE;
- }
-
- int JS_appAlert(const FX_WCHAR* Msg, const FX_WCHAR* Title, FX_UINT Type, FX_UINT Icon);
- int JS_appResponse(const FX_WCHAR* Question, const FX_WCHAR* Title, const FX_WCHAR* Default,
- const FX_WCHAR* cLabel, FPDF_BOOL bPassword, void* response, int length);
-
- void JS_appBeep(int nType)
- {
- if (m_pInfo && m_pInfo->m_pJsPlatform && m_pInfo->m_pJsPlatform->app_beep)
- m_pInfo->m_pJsPlatform->app_beep(m_pInfo->m_pJsPlatform, nType);
- }
-
- CFX_WideString JS_fieldBrowse();
- CFX_WideString JS_docGetFilePath();
-
- void JS_docSubmitForm(void* formData, int length, const FX_WCHAR* URL);
- void JS_docmailForm(void* mailData, int length, FPDF_BOOL bUI,
- const FX_WCHAR* To, const FX_WCHAR* Subject,
- const FX_WCHAR* CC, const FX_WCHAR* BCC,
- const FX_WCHAR* Msg);
-
- void JS_docprint(FPDF_BOOL bUI, int nStart, int nEnd, FPDF_BOOL bSilent,
- FPDF_BOOL bShrinkToFit, FPDF_BOOL bPrintAsImage,
- FPDF_BOOL bReverse ,FPDF_BOOL bAnnotations)
- {
- if (m_pInfo && m_pInfo->m_pJsPlatform && m_pInfo->m_pJsPlatform->Doc_print)
- m_pInfo->m_pJsPlatform->Doc_print(
- m_pInfo->m_pJsPlatform, bUI, nStart, nEnd, bSilent, bShrinkToFit,
- bPrintAsImage, bReverse, bAnnotations);
- }
-
- void JS_docgotoPage(int nPageNum)
- {
- if (m_pInfo && m_pInfo->m_pJsPlatform && m_pInfo->m_pJsPlatform->Doc_gotoPage)
- m_pInfo->m_pJsPlatform->Doc_gotoPage(m_pInfo->m_pJsPlatform, nPageNum);
- }
-
- FPDF_PAGE FFI_GetPage(FPDF_DOCUMENT document, int nPageIndex)
- {
- if (m_pInfo && m_pInfo->FFI_GetPage)
- return m_pInfo->FFI_GetPage(m_pInfo, document, nPageIndex);
- return NULL;
+class CPDFDoc_Environment final {
+ public:
+ CPDFDoc_Environment(CPDF_Document* pDoc, FPDF_FORMFILLINFO* pFFinfo);
+ ~CPDFDoc_Environment();
+
+ void FFI_Invalidate(FPDF_PAGE page,
+ double left,
+ double top,
+ double right,
+ double bottom) {
+ if (m_pInfo && m_pInfo->FFI_Invalidate)
+ m_pInfo->FFI_Invalidate(m_pInfo, page, left, top, right, bottom);
+ }
+
+ void FFI_OutputSelectedRect(FPDF_PAGE page,
+ double left,
+ double top,
+ double right,
+ double bottom) {
+ if (m_pInfo && m_pInfo->FFI_OutputSelectedRect)
+ m_pInfo->FFI_OutputSelectedRect(m_pInfo, page, left, top, right, bottom);
+ }
+
+ void FFI_SetCursor(int nCursorType) {
+ if (m_pInfo && m_pInfo->FFI_SetCursor)
+ m_pInfo->FFI_SetCursor(m_pInfo, nCursorType);
+ }
+
+ int FFI_SetTimer(int uElapse, TimerCallback lpTimerFunc) {
+ if (m_pInfo && m_pInfo->FFI_SetTimer)
+ return m_pInfo->FFI_SetTimer(m_pInfo, uElapse, lpTimerFunc);
+ return -1;
+ }
+
+ void FFI_KillTimer(int nTimerID) {
+ if (m_pInfo && m_pInfo->FFI_KillTimer)
+ m_pInfo->FFI_KillTimer(m_pInfo, nTimerID);
+ }
+
+ FX_SYSTEMTIME FFI_GetLocalTime() const {
+ FX_SYSTEMTIME fxtime;
+ if (m_pInfo && m_pInfo->FFI_GetLocalTime) {
+ FPDF_SYSTEMTIME systime = m_pInfo->FFI_GetLocalTime(m_pInfo);
+ fxtime.wDay = systime.wDay;
+ fxtime.wDayOfWeek = systime.wDayOfWeek;
+ fxtime.wHour = systime.wHour;
+ fxtime.wMilliseconds = systime.wMilliseconds;
+ fxtime.wMinute = systime.wMinute;
+ fxtime.wMonth = systime.wMonth;
+ fxtime.wSecond = systime.wSecond;
+ fxtime.wYear = systime.wYear;
}
+ return fxtime;
+ }
+
+ void FFI_OnChange() {
+ if (m_pInfo && m_pInfo->FFI_OnChange)
+ m_pInfo->FFI_OnChange(m_pInfo);
+ }
+
+ FX_BOOL FFI_IsSHIFTKeyDown(FX_DWORD nFlag) const {
+ return (nFlag & FWL_EVENTFLAG_ShiftKey) != 0;
+ }
+
+ FX_BOOL FFI_IsCTRLKeyDown(FX_DWORD nFlag) const {
+ return (nFlag & FWL_EVENTFLAG_ControlKey) != 0;
+ }
+
+ FX_BOOL FFI_IsALTKeyDown(FX_DWORD nFlag) const {
+ return (nFlag & FWL_EVENTFLAG_AltKey) != 0;
+ }
+
+ FX_BOOL FFI_IsINSERTKeyDown(FX_DWORD nFlag) const { return FALSE; }
+
+ int JS_appAlert(const FX_WCHAR* Msg,
+ const FX_WCHAR* Title,
+ FX_UINT Type,
+ FX_UINT Icon);
+ int JS_appResponse(const FX_WCHAR* Question,
+ const FX_WCHAR* Title,
+ const FX_WCHAR* Default,
+ const FX_WCHAR* cLabel,
+ FPDF_BOOL bPassword,
+ void* response,
+ int length);
+
+ void JS_appBeep(int nType) {
+ if (m_pInfo && m_pInfo->m_pJsPlatform && m_pInfo->m_pJsPlatform->app_beep)
+ m_pInfo->m_pJsPlatform->app_beep(m_pInfo->m_pJsPlatform, nType);
+ }
+
+ CFX_WideString JS_fieldBrowse();
+ CFX_WideString JS_docGetFilePath();
+
+ void JS_docSubmitForm(void* formData, int length, const FX_WCHAR* URL);
+ void JS_docmailForm(void* mailData,
+ int length,
+ FPDF_BOOL bUI,
+ const FX_WCHAR* To,
+ const FX_WCHAR* Subject,
+ const FX_WCHAR* CC,
+ const FX_WCHAR* BCC,
+ const FX_WCHAR* Msg);
+
+ void JS_docprint(FPDF_BOOL bUI,
+ int nStart,
+ int nEnd,
+ FPDF_BOOL bSilent,
+ FPDF_BOOL bShrinkToFit,
+ FPDF_BOOL bPrintAsImage,
+ FPDF_BOOL bReverse,
+ FPDF_BOOL bAnnotations) {
+ if (m_pInfo && m_pInfo->m_pJsPlatform && m_pInfo->m_pJsPlatform->Doc_print)
+ m_pInfo->m_pJsPlatform->Doc_print(m_pInfo->m_pJsPlatform, bUI, nStart,
+ nEnd, bSilent, bShrinkToFit,
+ bPrintAsImage, bReverse, bAnnotations);
+ }
+
+ void JS_docgotoPage(int nPageNum) {
+ if (m_pInfo && m_pInfo->m_pJsPlatform &&
+ m_pInfo->m_pJsPlatform->Doc_gotoPage)
+ m_pInfo->m_pJsPlatform->Doc_gotoPage(m_pInfo->m_pJsPlatform, nPageNum);
+ }
+
+ FPDF_PAGE FFI_GetPage(FPDF_DOCUMENT document, int nPageIndex) {
+ if (m_pInfo && m_pInfo->FFI_GetPage)
+ return m_pInfo->FFI_GetPage(m_pInfo, document, nPageIndex);
+ return NULL;
+ }
+
+ FPDF_PAGE FFI_GetCurrentPage(FPDF_DOCUMENT document) {
+ if (m_pInfo && m_pInfo->FFI_GetCurrentPage)
+ return m_pInfo->FFI_GetCurrentPage(m_pInfo, document);
+ return NULL;
+ }
+
+ int FFI_GetRotation(FPDF_PAGE page) {
+ if (m_pInfo && m_pInfo->FFI_GetRotation)
+ return m_pInfo->FFI_GetRotation(m_pInfo, page);
+ return 0;
+ }
+
+ void FFI_ExecuteNamedAction(const FX_CHAR* namedAction) {
+ if (m_pInfo && m_pInfo->FFI_ExecuteNamedAction)
+ m_pInfo->FFI_ExecuteNamedAction(m_pInfo, namedAction);
+ }
+
+ void FFI_OnSetFieldInputFocus(void* field,
+ FPDF_WIDESTRING focusText,
+ FPDF_DWORD nTextLen,
+ FX_BOOL bFocus) {
+ if (m_pInfo && m_pInfo->FFI_SetTextFieldFocus)
+ m_pInfo->FFI_SetTextFieldFocus(m_pInfo, focusText, nTextLen, bFocus);
+ }
+
+ void FFI_DoURIAction(const FX_CHAR* bsURI) {
+ if (m_pInfo && m_pInfo->FFI_DoURIAction)
+ m_pInfo->FFI_DoURIAction(m_pInfo, bsURI);
+ }
+
+ void FFI_DoGoToAction(int nPageIndex,
+ int zoomMode,
+ float* fPosArray,
+ int sizeOfArray) {
+ if (m_pInfo && m_pInfo->FFI_DoGoToAction)
+ m_pInfo->FFI_DoGoToAction(m_pInfo, nPageIndex, zoomMode, fPosArray,
+ sizeOfArray);
+ }
+
+ FX_BOOL IsJSInitiated() const { return m_pInfo && m_pInfo->m_pJsPlatform; }
+ void SetSDKDocument(CPDFSDK_Document* pFXDoc) { m_pSDKDoc = pFXDoc; }
+ CPDFSDK_Document* GetSDKDocument() const { return m_pSDKDoc; }
+ CPDF_Document* GetPDFDocument() const { return m_pPDFDoc; }
+ CFX_ByteString GetAppName() const { return ""; }
+ IFX_SystemHandler* GetSysHandler() const { return m_pSysHandler; }
+ FPDF_FORMFILLINFO* GetFormFillInfo() const { return m_pInfo; }
+ CJS_RuntimeFactory* GetRuntimeFactory() const { return m_pJSRuntimeFactory; }
+
+ CFFL_IFormFiller* GetIFormFiller(); // Creates if not present.
+ CPDFSDK_AnnotHandlerMgr* GetAnnotHandlerMgr(); // Creates if not present.
+ IFXJS_Runtime* GetJSRuntime(); // Creates if not present.
+ CPDFSDK_ActionHandler* GetActionHander(); // Creates if not present.
+
+ private:
+ CPDFSDK_AnnotHandlerMgr* m_pAnnotHandlerMgr;
+ CPDFSDK_ActionHandler* m_pActionHandler;
+ IFXJS_Runtime* m_pJSRuntime;
+ FPDF_FORMFILLINFO* const m_pInfo;
+ CPDFSDK_Document* m_pSDKDoc;
+ CPDF_Document* const m_pPDFDoc;
+ CFFL_IFormFiller* m_pIFormFiller;
+ IFX_SystemHandler* m_pSysHandler;
+ CJS_RuntimeFactory* m_pJSRuntimeFactory;
+};
- FPDF_PAGE FFI_GetCurrentPage(FPDF_DOCUMENT document)
- {
- if (m_pInfo && m_pInfo->FFI_GetCurrentPage)
- return m_pInfo->FFI_GetCurrentPage(m_pInfo, document);
- return NULL;
- }
+class CPDFSDK_Document {
+ public:
+ CPDFSDK_Document(CPDF_Document* pDoc, CPDFDoc_Environment* pEnv);
+ ~CPDFSDK_Document();
+
+ CPDFSDK_InterForm* GetInterForm();
+ CPDF_Document* GetDocument() { return m_pDoc; }
+
+ CPDFSDK_PageView* GetPageView(CPDF_Page* pPDFPage, FX_BOOL ReNew = TRUE);
+ CPDFSDK_PageView* GetPageView(int nIndex);
+ CPDFSDK_PageView* GetCurrentView();
+ void ReMovePageView(CPDF_Page* pPDFPage);
+ void UpdateAllViews(CPDFSDK_PageView* pSender, CPDFSDK_Annot* pAnnot);
+
+ CPDFSDK_Annot* GetFocusAnnot();
+
+ IFXJS_Runtime* GetJsRuntime();
+
+ FX_BOOL SetFocusAnnot(CPDFSDK_Annot* pAnnot, FX_UINT nFlag = 0);
+ FX_BOOL KillFocusAnnot(FX_UINT nFlag = 0);
+
+ FX_BOOL ExtractPages(const CFX_WordArray& arrExtraPages,
+ CPDF_Document* pDstDoc);
+ FX_BOOL InsertPages(int nInsertAt,
+ const CPDF_Document* pSrcDoc,
+ const CFX_WordArray& arrSrcPages);
+ FX_BOOL ReplacePages(int nPage,
+ const CPDF_Document* pSrcDoc,
+ const CFX_WordArray& arrSrcPages);
+
+ void OnCloseDocument();
+
+ int GetPageCount() { return m_pDoc->GetPageCount(); }
+ FX_BOOL GetPermissions(int nFlag);
+ FX_BOOL GetChangeMark() { return m_bChangeMask; }
+ void SetChangeMark() { m_bChangeMask = TRUE; }
+ void ClearChangeMark() { m_bChangeMask = FALSE; }
+ CFX_WideString GetPath();
+ CPDF_Page* GetPage(int nIndex);
+ CPDFDoc_Environment* GetEnv() { return m_pEnv; }
+ void ProcJavascriptFun();
+ FX_BOOL ProcOpenAction();
+ CPDF_OCContext* GetOCContext();
+
+ private:
+ std::map<CPDF_Page*, CPDFSDK_PageView*> m_pageMap;
+ CPDF_Document* m_pDoc;
+ CPDFSDK_InterForm* m_pInterForm;
+ CPDFSDK_Annot* m_pFocusAnnot;
+ CPDFDoc_Environment* m_pEnv;
+ CPDF_OCContext* m_pOccontent;
+ FX_BOOL m_bChangeMask;
+};
+class CPDFSDK_PageView final {
+ public:
+ CPDFSDK_PageView(CPDFSDK_Document* pSDKDoc, CPDF_Page* page);
+ ~CPDFSDK_PageView();
+ void PageView_OnDraw(CFX_RenderDevice* pDevice,
+ CPDF_Matrix* pUser2Device,
+ CPDF_RenderOptions* pOptions);
+ CPDF_Annot* GetPDFAnnotAtPoint(FX_FLOAT pageX, FX_FLOAT pageY);
+ CPDFSDK_Annot* GetFXAnnotAtPoint(FX_FLOAT pageX, FX_FLOAT pageY);
+ CPDF_Annot* GetPDFWidgetAtPoint(FX_FLOAT pageX, FX_FLOAT pageY);
+ CPDFSDK_Annot* GetFXWidgetAtPoint(FX_FLOAT pageX, FX_FLOAT pageY);
+ CPDFSDK_Annot* GetFocusAnnot();
+ void SetFocusAnnot(CPDFSDK_Annot* pSDKAnnot, FX_UINT nFlag = 0) {
+ m_pSDKDoc->SetFocusAnnot(pSDKAnnot, nFlag);
+ }
+ FX_BOOL KillFocusAnnot(FX_UINT nFlag = 0) {
+ return m_pSDKDoc->KillFocusAnnot(nFlag);
+ }
+ FX_BOOL Annot_HasAppearance(CPDF_Annot* pAnnot);
+
+ CPDFSDK_Annot* AddAnnot(CPDF_Dictionary* pDict);
+ CPDFSDK_Annot* AddAnnot(const FX_CHAR* lpSubType, CPDF_Dictionary* pDict);
+ CPDFSDK_Annot* AddAnnot(CPDF_Annot* pPDFAnnot);
+ FX_BOOL DeleteAnnot(CPDFSDK_Annot* pAnnot);
+ int CountAnnots();
+ CPDFSDK_Annot* GetAnnot(int nIndex);
+ CPDFSDK_Annot* GetAnnotByDict(CPDF_Dictionary* pDict);
+ CPDF_Page* GetPDFPage() { return m_page; }
+ CPDF_Document* GetPDFDocument();
+ CPDFSDK_Document* GetSDKDocument() { return m_pSDKDoc; }
+ FX_BOOL OnLButtonDown(const CPDF_Point& point, FX_UINT nFlag);
+ FX_BOOL OnLButtonUp(const CPDF_Point& point, FX_UINT nFlag);
+ FX_BOOL OnChar(int nChar, FX_UINT nFlag);
+ FX_BOOL OnKeyDown(int nKeyCode, int nFlag);
+ FX_BOOL OnKeyUp(int nKeyCode, int nFlag);
+
+ FX_BOOL OnMouseMove(const CPDF_Point& point, int nFlag);
+ FX_BOOL OnMouseWheel(double deltaX,
+ double deltaY,
+ const CPDF_Point& point,
+ int nFlag);
+ FX_BOOL IsValidAnnot(void* p);
+ void GetCurrentMatrix(CPDF_Matrix& matrix) { matrix = m_curMatrix; }
+ void UpdateRects(CFX_RectArray& rects);
+ void UpdateView(CPDFSDK_Annot* pAnnot);
+ CFX_PtrArray* GetAnnotList() { return &m_fxAnnotArray; }
+
+ int GetPageIndex();
+ void LoadFXAnnots();
+
+ void SetValid(FX_BOOL bValid) { m_bValid = bValid; }
+ FX_BOOL IsValid() { return m_bValid; }
+ void SetLock(FX_BOOL bLocked) { m_bLocked = bLocked; }
+ FX_BOOL IsLocked() { return m_bLocked; }
+ void TakeOverPage() { m_bTakeOverPage = TRUE; }
+
+ private:
+ void PageView_OnHighlightFormFields(CFX_RenderDevice* pDevice,
+ CPDFSDK_Widget* pWidget);
+ CPDF_Matrix m_curMatrix;
+ CPDF_Page* m_page;
+ CPDF_AnnotList* m_pAnnotList;
+ // CPDFSDK_Annot* m_pFocusAnnot;
+ CFX_PtrArray m_fxAnnotArray;
+ CPDFSDK_Document* m_pSDKDoc;
+ CPDFSDK_Widget* m_CaptureWidget;
+ FX_BOOL m_bEnterWidget;
+ FX_BOOL m_bExitWidget;
+ FX_BOOL m_bOnWidget;
+ FX_BOOL m_bValid;
+ FX_BOOL m_bLocked;
+ FX_BOOL m_bTakeOverPage;
+};
- int FFI_GetRotation(FPDF_PAGE page)
- {
- if (m_pInfo && m_pInfo->FFI_GetRotation)
- return m_pInfo->FFI_GetRotation(m_pInfo, page);
- return 0;
+template <class TYPE>
+class CGW_ArrayTemplate : public CFX_ArrayTemplate<TYPE> {
+ public:
+ CGW_ArrayTemplate() {}
+ virtual ~CGW_ArrayTemplate() {}
+
+ typedef int (*LP_COMPARE)(TYPE p1, TYPE p2);
+
+ void Sort(LP_COMPARE pCompare, FX_BOOL bAscent = TRUE) {
+ int nSize = this->GetSize();
+ QuickSort(0, nSize - 1, bAscent, pCompare);
+ }
+
+ private:
+ void QuickSort(FX_UINT nStartPos,
+ FX_UINT nStopPos,
+ FX_BOOL bAscend,
+ LP_COMPARE pCompare) {
+ if (nStartPos >= nStopPos)
+ return;
+
+ if ((nStopPos - nStartPos) == 1) {
+ TYPE Value1 = this->GetAt(nStartPos);
+ TYPE Value2 = this->GetAt(nStopPos);
+
+ int iGreate = (*pCompare)(Value1, Value2);
+ if ((bAscend && iGreate > 0) || (!bAscend && iGreate < 0)) {
+ this->SetAt(nStartPos, Value2);
+ this->SetAt(nStopPos, Value1);
+ }
+ return;
}
- void FFI_ExecuteNamedAction(const FX_CHAR* namedAction)
- {
- if (m_pInfo && m_pInfo->FFI_ExecuteNamedAction)
- m_pInfo->FFI_ExecuteNamedAction(m_pInfo, namedAction);
- }
+ FX_UINT m = nStartPos + (nStopPos - nStartPos) / 2;
+ FX_UINT i = nStartPos;
- void FFI_OnSetFieldInputFocus(void* field,FPDF_WIDESTRING focusText, FPDF_DWORD nTextLen, FX_BOOL bFocus)
- {
- if (m_pInfo && m_pInfo->FFI_SetTextFieldFocus)
- m_pInfo->FFI_SetTextFieldFocus(m_pInfo, focusText, nTextLen, bFocus);
- }
+ TYPE Value = this->GetAt(m);
- void FFI_DoURIAction(const FX_CHAR* bsURI)
- {
- if (m_pInfo && m_pInfo->FFI_DoURIAction)
- m_pInfo->FFI_DoURIAction(m_pInfo, bsURI);
- }
+ while (i < m) {
+ TYPE temp = this->GetAt(i);
- void FFI_DoGoToAction(int nPageIndex, int zoomMode, float* fPosArray, int sizeOfArray)
- {
- if (m_pInfo && m_pInfo->FFI_DoGoToAction)
- m_pInfo->FFI_DoGoToAction(m_pInfo, nPageIndex, zoomMode, fPosArray, sizeOfArray);
+ int iGreate = (*pCompare)(temp, Value);
+ if ((bAscend && iGreate > 0) || (!bAscend && iGreate < 0)) {
+ this->InsertAt(m + 1, temp);
+ this->RemoveAt(i);
+ m--;
+ } else {
+ i++;
+ }
}
- FX_BOOL IsJSInitiated() const { return m_pInfo && m_pInfo->m_pJsPlatform; }
- void SetSDKDocument(CPDFSDK_Document* pFXDoc) { m_pSDKDoc = pFXDoc; }
- CPDFSDK_Document* GetSDKDocument() const { return m_pSDKDoc; }
- CPDF_Document* GetPDFDocument() const { return m_pPDFDoc; }
- CFX_ByteString GetAppName() const { return ""; }
- IFX_SystemHandler* GetSysHandler() const { return m_pSysHandler; }
- FPDF_FORMFILLINFO* GetFormFillInfo() const { return m_pInfo;}
- CJS_RuntimeFactory* GetRuntimeFactory() const { return m_pJSRuntimeFactory; }
-
- CFFL_IFormFiller* GetIFormFiller(); // Creates if not present.
- CPDFSDK_AnnotHandlerMgr* GetAnnotHandlerMgr(); // Creates if not present.
- IFXJS_Runtime* GetJSRuntime(); // Creates if not present.
- CPDFSDK_ActionHandler* GetActionHander(); // Creates if not present.
-
-private:
- CPDFSDK_AnnotHandlerMgr* m_pAnnotHandlerMgr;
- CPDFSDK_ActionHandler* m_pActionHandler;
- IFXJS_Runtime* m_pJSRuntime;
- FPDF_FORMFILLINFO* const m_pInfo;
- CPDFSDK_Document* m_pSDKDoc;
- CPDF_Document* const m_pPDFDoc;
- CFFL_IFormFiller* m_pIFormFiller;
- IFX_SystemHandler* m_pSysHandler;
- CJS_RuntimeFactory* m_pJSRuntimeFactory;
-};
+ FX_UINT j = nStopPos;
-class CPDFSDK_Document
-{
-public:
- CPDFSDK_Document(CPDF_Document* pDoc, CPDFDoc_Environment* pEnv);
- ~CPDFSDK_Document();
-
- CPDFSDK_InterForm* GetInterForm() ;
- CPDF_Document* GetDocument() {return m_pDoc;}
-
- CPDFSDK_PageView* GetPageView(CPDF_Page* pPDFPage, FX_BOOL ReNew = TRUE);
- CPDFSDK_PageView* GetPageView(int nIndex);
- CPDFSDK_PageView* GetCurrentView();
- void ReMovePageView(CPDF_Page* pPDFPage);
- void UpdateAllViews(CPDFSDK_PageView* pSender, CPDFSDK_Annot* pAnnot);
-
- CPDFSDK_Annot* GetFocusAnnot();
-
- IFXJS_Runtime * GetJsRuntime();
-
- FX_BOOL SetFocusAnnot(CPDFSDK_Annot* pAnnot, FX_UINT nFlag = 0);
- FX_BOOL KillFocusAnnot(FX_UINT nFlag = 0);
-
- FX_BOOL ExtractPages(const CFX_WordArray &arrExtraPages, CPDF_Document* pDstDoc);
- FX_BOOL InsertPages(int nInsertAt, const CPDF_Document* pSrcDoc, const CFX_WordArray &arrSrcPages);
- FX_BOOL ReplacePages(int nPage, const CPDF_Document* pSrcDoc, const CFX_WordArray &arrSrcPages);
-
- void OnCloseDocument();
-
- int GetPageCount() {return m_pDoc->GetPageCount();}
- FX_BOOL GetPermissions(int nFlag);
- FX_BOOL GetChangeMark() {return m_bChangeMask;}
- void SetChangeMark() {m_bChangeMask = TRUE;}
- void ClearChangeMark() {m_bChangeMask= FALSE;}
- CFX_WideString GetPath() ;
- CPDF_Page* GetPage(int nIndex);
- CPDFDoc_Environment * GetEnv() {return m_pEnv; }
- void ProcJavascriptFun();
- FX_BOOL ProcOpenAction();
- CPDF_OCContext* GetOCContext();
-private:
- std::map<CPDF_Page*, CPDFSDK_PageView*> m_pageMap;
- CPDF_Document* m_pDoc;
- CPDFSDK_InterForm* m_pInterForm;
- CPDFSDK_Annot* m_pFocusAnnot;
- CPDFDoc_Environment* m_pEnv;
- CPDF_OCContext* m_pOccontent;
- FX_BOOL m_bChangeMask;
-};
-class CPDFSDK_PageView final
-{
-public:
- CPDFSDK_PageView(CPDFSDK_Document* pSDKDoc,CPDF_Page* page);
- ~CPDFSDK_PageView();
- void PageView_OnDraw(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device,CPDF_RenderOptions* pOptions) ;
- CPDF_Annot* GetPDFAnnotAtPoint(FX_FLOAT pageX, FX_FLOAT pageY);
- CPDFSDK_Annot* GetFXAnnotAtPoint(FX_FLOAT pageX, FX_FLOAT pageY);
- CPDF_Annot* GetPDFWidgetAtPoint(FX_FLOAT pageX, FX_FLOAT pageY);
- CPDFSDK_Annot* GetFXWidgetAtPoint(FX_FLOAT pageX, FX_FLOAT pageY);
- CPDFSDK_Annot* GetFocusAnnot() ;
- void SetFocusAnnot(CPDFSDK_Annot* pSDKAnnot,FX_UINT nFlag = 0) {m_pSDKDoc->SetFocusAnnot(pSDKAnnot, nFlag);}
- FX_BOOL KillFocusAnnot(FX_UINT nFlag = 0) {return m_pSDKDoc->KillFocusAnnot(nFlag);}
- FX_BOOL Annot_HasAppearance(CPDF_Annot* pAnnot);
-
- CPDFSDK_Annot* AddAnnot(CPDF_Dictionary * pDict);
- CPDFSDK_Annot* AddAnnot(const FX_CHAR* lpSubType,CPDF_Dictionary * pDict);
- CPDFSDK_Annot* AddAnnot(CPDF_Annot * pPDFAnnot);
- FX_BOOL DeleteAnnot(CPDFSDK_Annot* pAnnot);
- int CountAnnots();
- CPDFSDK_Annot* GetAnnot(int nIndex);
- CPDFSDK_Annot* GetAnnotByDict(CPDF_Dictionary * pDict);
- CPDF_Page* GetPDFPage(){return m_page;}
- CPDF_Document* GetPDFDocument();
- CPDFSDK_Document* GetSDKDocument() {return m_pSDKDoc;}
- FX_BOOL OnLButtonDown(const CPDF_Point & point, FX_UINT nFlag);
- FX_BOOL OnLButtonUp(const CPDF_Point & point, FX_UINT nFlag);
- FX_BOOL OnChar(int nChar, FX_UINT nFlag);
- FX_BOOL OnKeyDown(int nKeyCode, int nFlag);
- FX_BOOL OnKeyUp(int nKeyCode, int nFlag);
-
- FX_BOOL OnMouseMove(const CPDF_Point & point, int nFlag);
- FX_BOOL OnMouseWheel(double deltaX, double deltaY,const CPDF_Point& point, int nFlag);
- FX_BOOL IsValidAnnot(void* p);
- void GetCurrentMatrix(CPDF_Matrix& matrix) {matrix = m_curMatrix;}
- void UpdateRects(CFX_RectArray& rects);
- void UpdateView(CPDFSDK_Annot* pAnnot);
- CFX_PtrArray* GetAnnotList(){ return &m_fxAnnotArray; }
-
- int GetPageIndex();
- void LoadFXAnnots();
-
- void SetValid(FX_BOOL bValid) {m_bValid = bValid;}
- FX_BOOL IsValid() {return m_bValid;}
- void SetLock(FX_BOOL bLocked) {m_bLocked= bLocked;}
- FX_BOOL IsLocked() {return m_bLocked;}
- void TakeOverPage() {m_bTakeOverPage = TRUE;}
-private:
- void PageView_OnHighlightFormFields(CFX_RenderDevice* pDevice, CPDFSDK_Widget* pWidget);
- CPDF_Matrix m_curMatrix;
- CPDF_Page* m_page;
- CPDF_AnnotList* m_pAnnotList;
- //CPDFSDK_Annot* m_pFocusAnnot;
- CFX_PtrArray m_fxAnnotArray;
- CPDFSDK_Document* m_pSDKDoc;
- CPDFSDK_Widget* m_CaptureWidget;
- FX_BOOL m_bEnterWidget;
- FX_BOOL m_bExitWidget;
- FX_BOOL m_bOnWidget;
- FX_BOOL m_bValid;
- FX_BOOL m_bLocked;
- FX_BOOL m_bTakeOverPage;
-};
-
-
-template<class TYPE>
-class CGW_ArrayTemplate : public CFX_ArrayTemplate<TYPE>
-{
-public:
- CGW_ArrayTemplate(){}
- virtual ~CGW_ArrayTemplate(){}
+ while (j > m) {
+ TYPE temp = this->GetAt(j);
- typedef int (*LP_COMPARE)(TYPE p1, TYPE p2);
-
- void Sort(LP_COMPARE pCompare, FX_BOOL bAscent = TRUE)
- {
- int nSize = this->GetSize();
- QuickSort(0, nSize -1, bAscent, pCompare);
+ int iGreate = (*pCompare)(temp, Value);
+ if ((bAscend && iGreate < 0) || (!bAscend && iGreate > 0)) {
+ this->RemoveAt(j);
+ this->InsertAt(m, temp);
+ m++;
+ } else {
+ j--;
+ }
}
-private:
- void QuickSort(FX_UINT nStartPos, FX_UINT nStopPos, FX_BOOL bAscend, LP_COMPARE pCompare)
- {
- if (nStartPos >= nStopPos) return;
-
- if ((nStopPos - nStartPos) == 1)
- {
- TYPE Value1 = this->GetAt(nStartPos);
- TYPE Value2 = this->GetAt(nStopPos);
-
- int iGreate = (*pCompare)(Value1, Value2);
- if ((bAscend && iGreate > 0) || (!bAscend && iGreate < 0))
- {
- this->SetAt(nStartPos, Value2);
- this->SetAt(nStopPos, Value1);
- }
- return;
- }
-
- FX_UINT m = nStartPos + (nStopPos - nStartPos) / 2;
- FX_UINT i = nStartPos;
-
- TYPE Value = this->GetAt(m);
-
- while (i < m)
- {
- TYPE temp = this->GetAt(i);
-
- int iGreate = (*pCompare)(temp, Value);
- if ((bAscend && iGreate > 0) || (!bAscend && iGreate < 0))
- {
- this->InsertAt(m+1, temp);
- this->RemoveAt(i);
- m--;
- }
- else
- {
- i++;
- }
- }
-
- FX_UINT j = nStopPos;
-
- while (j > m)
- {
- TYPE temp = this->GetAt(j);
-
- int iGreate = (*pCompare)(temp, Value);
- if ((bAscend && iGreate < 0) || (!bAscend && iGreate > 0))
- {
- this->RemoveAt(j);
- this->InsertAt(m, temp);
- m++;
- }
- else
- {
- j--;
- }
- }
-
- if (nStartPos < m) QuickSort(nStartPos, m, bAscend, pCompare);
- if (nStopPos > m) QuickSort(m, nStopPos, bAscend, pCompare);
- }
+ if (nStartPos < m)
+ QuickSort(nStartPos, m, bAscend, pCompare);
+ if (nStopPos > m)
+ QuickSort(m, nStopPos, bAscend, pCompare);
+ }
};
#endif // FPDFSDK_INCLUDE_FSDK_MGR_H_
diff --git a/fpdfsdk/include/fsdk_rendercontext.h b/fpdfsdk/include/fsdk_rendercontext.h
index b2bc163b49..9d1dabd41c 100644
--- a/fpdfsdk/include/fsdk_rendercontext.h
+++ b/fpdfsdk/include/fsdk_rendercontext.h
@@ -11,33 +11,31 @@
#include "fsdk_define.h"
// Everything about rendering is put here: for OOM recovery
-class CRenderContext
-{
-public:
- CRenderContext() { Clear(); }
- ~CRenderContext();
-
- void Clear();
-
- CFX_RenderDevice* m_pDevice;
- CPDF_RenderContext* m_pContext;
- CPDF_ProgressiveRenderer* m_pRenderer;
- CPDF_AnnotList* m_pAnnots;
- CPDF_RenderOptions* m_pOptions;
+class CRenderContext {
+ public:
+ CRenderContext() { Clear(); }
+ ~CRenderContext();
+
+ void Clear();
+
+ CFX_RenderDevice* m_pDevice;
+ CPDF_RenderContext* m_pContext;
+ CPDF_ProgressiveRenderer* m_pRenderer;
+ CPDF_AnnotList* m_pAnnots;
+ CPDF_RenderOptions* m_pOptions;
#ifdef _WIN32_WCE
- CFX_DIBitmap* m_pBitmap;
- HBITMAP m_hBitmap;
+ CFX_DIBitmap* m_pBitmap;
+ HBITMAP m_hBitmap;
#endif
};
-class IFSDK_PAUSE_Adapter : public IFX_Pause
-{
-public:
- IFSDK_PAUSE_Adapter(IFSDK_PAUSE* IPause );
- FX_BOOL NeedToPauseNow();
+class IFSDK_PAUSE_Adapter : public IFX_Pause {
+ public:
+ IFSDK_PAUSE_Adapter(IFSDK_PAUSE* IPause);
+ FX_BOOL NeedToPauseNow();
-private:
- IFSDK_PAUSE* m_IPause;
+ private:
+ IFSDK_PAUSE* m_IPause;
};
#endif // FPDFSDK_INCLUDE_FSDK_RENDERCONTEXT_H_
diff --git a/fpdfsdk/include/fx_systemhandler.h b/fpdfsdk/include/fx_systemhandler.h
index bf59e452ea..31d3347477 100644
--- a/fpdfsdk/include/fx_systemhandler.h
+++ b/fpdfsdk/include/fx_systemhandler.h
@@ -7,13 +7,12 @@
#ifndef FPDFSDK_INCLUDE_FX_SYSTEMHANDLER_H_
#define FPDFSDK_INCLUDE_FX_SYSTEMHANDLER_H_
-typedef void* FX_HWND;
-typedef void* FX_HMENU;
-typedef void (*TimerCallback)(int32_t idEvent);
+typedef void* FX_HWND;
+typedef void* FX_HMENU;
+typedef void (*TimerCallback)(int32_t idEvent);
-typedef struct _FX_SYSTEMTIME
-{
- _FX_SYSTEMTIME()
+typedef struct _FX_SYSTEMTIME {
+ _FX_SYSTEMTIME()
: wYear(0),
wMonth(0),
wDayOfWeek(0),
@@ -22,72 +21,80 @@ typedef struct _FX_SYSTEMTIME
wMinute(0),
wSecond(0),
wMilliseconds(0) {}
- FX_WORD wYear;
- FX_WORD wMonth;
- FX_WORD wDayOfWeek;
- FX_WORD wDay;
- FX_WORD wHour;
- FX_WORD wMinute;
- FX_WORD wSecond;
- FX_WORD wMilliseconds;
-}FX_SYSTEMTIME;
-
-//cursor style
-#define FXCT_ARROW 0
-#define FXCT_NESW 1
-#define FXCT_NWSE 2
-#define FXCT_VBEAM 3
-#define FXCT_HBEAM 4
-#define FXCT_HAND 5
-
-class IFX_SystemHandler
-{
-public:
- virtual ~IFX_SystemHandler() {}
- virtual void InvalidateRect(FX_HWND hWnd, FX_RECT rect) = 0;
- virtual void OutputSelectedRect(void* pFormFiller, CPDF_Rect&rect) = 0;
-
- virtual FX_BOOL IsSelectionImplemented() = 0;
-
- virtual CFX_WideString GetClipboardText(FX_HWND hWnd) = 0;
- virtual FX_BOOL SetClipboardText(FX_HWND hWnd, CFX_WideString string) = 0;
-
- virtual void ClientToScreen(FX_HWND hWnd, int32_t& x, int32_t& y) = 0;
- virtual void ScreenToClient(FX_HWND hWnd, int32_t& x, int32_t& y) = 0;
-
- /*cursor style
- FXCT_ARROW
- FXCT_NESW
- FXCT_NWSE
- FXCT_VBEAM
- FXCT_HBEAM
- FXCT_HAND
- */
- virtual void SetCursor(int32_t nCursorType) = 0;
-
- virtual FX_HMENU CreatePopupMenu() = 0;
- virtual FX_BOOL AppendMenuItem(FX_HMENU hMenu, int32_t nIDNewItem, CFX_WideString string) = 0;
- virtual FX_BOOL EnableMenuItem(FX_HMENU hMenu, int32_t nIDItem, FX_BOOL bEnabled) = 0;
- virtual int32_t TrackPopupMenu(FX_HMENU hMenu, int32_t x, int32_t y, FX_HWND hParent) = 0;
- virtual void DestroyMenu(FX_HMENU hMenu) = 0;
-
- virtual CFX_ByteString GetNativeTrueTypeFont(int32_t nCharset) = 0;
- virtual FX_BOOL FindNativeTrueTypeFont(int32_t nCharset, CFX_ByteString sFontFaceName) = 0;
- virtual CPDF_Font* AddNativeTrueTypeFontToPDF(CPDF_Document* pDoc, CFX_ByteString sFontFaceName, uint8_t nCharset) = 0;
-
- virtual int32_t SetTimer(int32_t uElapse, TimerCallback lpTimerFunc) = 0;
- virtual void KillTimer(int32_t nID) = 0;
-
-
- virtual FX_BOOL IsSHIFTKeyDown(FX_DWORD nFlag) = 0;
- virtual FX_BOOL IsCTRLKeyDown(FX_DWORD nFlag) = 0;
- virtual FX_BOOL IsALTKeyDown(FX_DWORD nFlag) = 0;
- virtual FX_BOOL IsINSERTKeyDown(FX_DWORD nFlag) = 0;
-
- virtual FX_SYSTEMTIME GetLocalTime() = 0;
-
- virtual int32_t GetCharSet() = 0;
- virtual void SetCharSet(int32_t nCharSet) = 0;
+ FX_WORD wYear;
+ FX_WORD wMonth;
+ FX_WORD wDayOfWeek;
+ FX_WORD wDay;
+ FX_WORD wHour;
+ FX_WORD wMinute;
+ FX_WORD wSecond;
+ FX_WORD wMilliseconds;
+} FX_SYSTEMTIME;
+
+// cursor style
+#define FXCT_ARROW 0
+#define FXCT_NESW 1
+#define FXCT_NWSE 2
+#define FXCT_VBEAM 3
+#define FXCT_HBEAM 4
+#define FXCT_HAND 5
+
+class IFX_SystemHandler {
+ public:
+ virtual ~IFX_SystemHandler() {}
+ virtual void InvalidateRect(FX_HWND hWnd, FX_RECT rect) = 0;
+ virtual void OutputSelectedRect(void* pFormFiller, CPDF_Rect& rect) = 0;
+
+ virtual FX_BOOL IsSelectionImplemented() = 0;
+
+ virtual CFX_WideString GetClipboardText(FX_HWND hWnd) = 0;
+ virtual FX_BOOL SetClipboardText(FX_HWND hWnd, CFX_WideString string) = 0;
+
+ virtual void ClientToScreen(FX_HWND hWnd, int32_t& x, int32_t& y) = 0;
+ virtual void ScreenToClient(FX_HWND hWnd, int32_t& x, int32_t& y) = 0;
+
+ /*cursor style
+ FXCT_ARROW
+ FXCT_NESW
+ FXCT_NWSE
+ FXCT_VBEAM
+ FXCT_HBEAM
+ FXCT_HAND
+ */
+ virtual void SetCursor(int32_t nCursorType) = 0;
+
+ virtual FX_HMENU CreatePopupMenu() = 0;
+ virtual FX_BOOL AppendMenuItem(FX_HMENU hMenu,
+ int32_t nIDNewItem,
+ CFX_WideString string) = 0;
+ virtual FX_BOOL EnableMenuItem(FX_HMENU hMenu,
+ int32_t nIDItem,
+ FX_BOOL bEnabled) = 0;
+ virtual int32_t TrackPopupMenu(FX_HMENU hMenu,
+ int32_t x,
+ int32_t y,
+ FX_HWND hParent) = 0;
+ virtual void DestroyMenu(FX_HMENU hMenu) = 0;
+
+ virtual CFX_ByteString GetNativeTrueTypeFont(int32_t nCharset) = 0;
+ virtual FX_BOOL FindNativeTrueTypeFont(int32_t nCharset,
+ CFX_ByteString sFontFaceName) = 0;
+ virtual CPDF_Font* AddNativeTrueTypeFontToPDF(CPDF_Document* pDoc,
+ CFX_ByteString sFontFaceName,
+ uint8_t nCharset) = 0;
+
+ virtual int32_t SetTimer(int32_t uElapse, TimerCallback lpTimerFunc) = 0;
+ virtual void KillTimer(int32_t nID) = 0;
+
+ virtual FX_BOOL IsSHIFTKeyDown(FX_DWORD nFlag) = 0;
+ virtual FX_BOOL IsCTRLKeyDown(FX_DWORD nFlag) = 0;
+ virtual FX_BOOL IsALTKeyDown(FX_DWORD nFlag) = 0;
+ virtual FX_BOOL IsINSERTKeyDown(FX_DWORD nFlag) = 0;
+
+ virtual FX_SYSTEMTIME GetLocalTime() = 0;
+
+ virtual int32_t GetCharSet() = 0;
+ virtual void SetCharSet(int32_t nCharSet) = 0;
};
#endif // FPDFSDK_INCLUDE_FX_SYSTEMHANDLER_H_
diff --git a/fpdfsdk/include/fxedit/fx_edit.h b/fpdfsdk/include/fxedit/fx_edit.h
index d154cb2290..bfe6a254ff 100644
--- a/fpdfsdk/include/fxedit/fx_edit.h
+++ b/fpdfsdk/include/fxedit/fx_edit.h
@@ -35,451 +35,535 @@ struct CPVT_WordPlace;
struct CPVT_WordProps;
struct CPVT_WordRange;
-#define PVTWORD_STYLE_NORMAL 0x0000L
-#define PVTWORD_STYLE_HIGHLIGHT 0x0001L
-#define PVTWORD_STYLE_UNDERLINE 0x0002L
-#define PVTWORD_STYLE_CROSSOUT 0x0004L
-#define PVTWORD_STYLE_SQUIGGLY 0x0008L
-#define PVTWORD_STYLE_DUALCROSSOUT 0x0010L
-#define PVTWORD_STYLE_BOLD 0x0020L
-#define PVTWORD_STYLE_ITALIC 0x0040L
-
-#define FX_EDIT_ISLATINWORD(u) (u == 0x2D || (u <= 0x005A && u >= 0x0041) || (u <= 0x007A && u >= 0x0061) || (u <= 0x02AF && u >= 0x00C0))
+#define PVTWORD_STYLE_NORMAL 0x0000L
+#define PVTWORD_STYLE_HIGHLIGHT 0x0001L
+#define PVTWORD_STYLE_UNDERLINE 0x0002L
+#define PVTWORD_STYLE_CROSSOUT 0x0004L
+#define PVTWORD_STYLE_SQUIGGLY 0x0008L
+#define PVTWORD_STYLE_DUALCROSSOUT 0x0010L
+#define PVTWORD_STYLE_BOLD 0x0020L
+#define PVTWORD_STYLE_ITALIC 0x0040L
+
+#define FX_EDIT_ISLATINWORD(u) \
+ (u == 0x2D || (u <= 0x005A && u >= 0x0041) || \
+ (u <= 0x007A && u >= 0x0061) || (u <= 0x02AF && u >= 0x00C0))
#ifndef DEFAULT_CHARSET
-#define DEFAULT_CHARSET 1
+#define DEFAULT_CHARSET 1
#endif
-class IFX_Edit_FontMap
-{
-public:
- virtual ~IFX_Edit_FontMap() { }
- //map a fontindex to pdf font.
- virtual CPDF_Font * GetPDFFont(int32_t nFontIndex) = 0;
- //get the alias of a pdf font.
- virtual CFX_ByteString GetPDFFontAlias(int32_t nFontIndex) = 0;
- //get the index of a font that can show a word.
- virtual int32_t GetWordFontIndex(FX_WORD word, int32_t charset, int32_t nFontIndex) = 0;
- //get the charcode of word from unicode
- virtual int32_t CharCodeFromUnicode(int32_t nFontIndex, FX_WORD word) = 0;
- //get the charset of unicode
- virtual int32_t CharSetFromUnicode(FX_WORD word, int32_t nOldCharset) = 0;
+class IFX_Edit_FontMap {
+ public:
+ virtual ~IFX_Edit_FontMap() {}
+ // map a fontindex to pdf font.
+ virtual CPDF_Font* GetPDFFont(int32_t nFontIndex) = 0;
+ // get the alias of a pdf font.
+ virtual CFX_ByteString GetPDFFontAlias(int32_t nFontIndex) = 0;
+ // get the index of a font that can show a word.
+ virtual int32_t GetWordFontIndex(FX_WORD word,
+ int32_t charset,
+ int32_t nFontIndex) = 0;
+ // get the charcode of word from unicode
+ virtual int32_t CharCodeFromUnicode(int32_t nFontIndex, FX_WORD word) = 0;
+ // get the charset of unicode
+ virtual int32_t CharSetFromUnicode(FX_WORD word, int32_t nOldCharset) = 0;
};
-class IFX_Edit_Notify
-{
-public:
- virtual ~IFX_Edit_Notify() { }
- //set the horizontal scrollbar information.
- virtual void IOnSetScrollInfoX(FX_FLOAT fPlateMin, FX_FLOAT fPlateMax,
- FX_FLOAT fContentMin, FX_FLOAT fContentMax,
- FX_FLOAT fSmallStep, FX_FLOAT fBigStep) = 0;
- //set the vertical scrollbar information.
- virtual void IOnSetScrollInfoY(FX_FLOAT fPlateMin, FX_FLOAT fPlateMax,
- FX_FLOAT fContentMin, FX_FLOAT fContentMax,
- FX_FLOAT fSmallStep, FX_FLOAT fBigStep) = 0;
- //set the position of horizontal scrollbar.
- virtual void IOnSetScrollPosX(FX_FLOAT fx) = 0;
- //set the position of vertical scrollbar.
- virtual void IOnSetScrollPosY(FX_FLOAT fy) = 0;
- //set the caret information.
- virtual void IOnSetCaret(FX_BOOL bVisible,const CPDF_Point & ptHead,const CPDF_Point & ptFoot, const CPVT_WordPlace& place) = 0;
- //if the caret position is changed ,send the information of current postion to user.
- virtual void IOnCaretChange(const CPVT_SecProps & secProps, const CPVT_WordProps & wordProps) = 0;
- //if the text area is changed, send the information to user.
- virtual void IOnContentChange(const CPDF_Rect& rcContent) = 0;
- //Invalidate the rectangle relative to the bounding box of edit.
- virtual void IOnInvalidateRect(CPDF_Rect * pRect) = 0;
+class IFX_Edit_Notify {
+ public:
+ virtual ~IFX_Edit_Notify() {}
+ // set the horizontal scrollbar information.
+ virtual void IOnSetScrollInfoX(FX_FLOAT fPlateMin,
+ FX_FLOAT fPlateMax,
+ FX_FLOAT fContentMin,
+ FX_FLOAT fContentMax,
+ FX_FLOAT fSmallStep,
+ FX_FLOAT fBigStep) = 0;
+ // set the vertical scrollbar information.
+ virtual void IOnSetScrollInfoY(FX_FLOAT fPlateMin,
+ FX_FLOAT fPlateMax,
+ FX_FLOAT fContentMin,
+ FX_FLOAT fContentMax,
+ FX_FLOAT fSmallStep,
+ FX_FLOAT fBigStep) = 0;
+ // set the position of horizontal scrollbar.
+ virtual void IOnSetScrollPosX(FX_FLOAT fx) = 0;
+ // set the position of vertical scrollbar.
+ virtual void IOnSetScrollPosY(FX_FLOAT fy) = 0;
+ // set the caret information.
+ virtual void IOnSetCaret(FX_BOOL bVisible,
+ const CPDF_Point& ptHead,
+ const CPDF_Point& ptFoot,
+ const CPVT_WordPlace& place) = 0;
+ // if the caret position is changed ,send the information of current postion
+ // to user.
+ virtual void IOnCaretChange(const CPVT_SecProps& secProps,
+ const CPVT_WordProps& wordProps) = 0;
+ // if the text area is changed, send the information to user.
+ virtual void IOnContentChange(const CPDF_Rect& rcContent) = 0;
+ // Invalidate the rectangle relative to the bounding box of edit.
+ virtual void IOnInvalidateRect(CPDF_Rect* pRect) = 0;
};
-class IFX_Edit_OprNotify
-{
-public:
- virtual ~IFX_Edit_OprNotify() { }
-
- //OprType: 0
- virtual void OnInsertWord(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace) = 0;
- //OprType: 1
- virtual void OnInsertReturn(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace) = 0;
- //OprType: 2
- virtual void OnBackSpace(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace) = 0;
- //OprType: 3
- virtual void OnDelete(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace) = 0;
- //OprType: 4
- virtual void OnClear(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace) = 0;
- //OprType: 5
- virtual void OnInsertText(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace) = 0;
- //OprType: 6
- virtual void OnSetText(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace) = 0;
- //
- virtual void OnAddUndo(IFX_Edit_UndoItem* pUndoItem) = 0;
+class IFX_Edit_OprNotify {
+ public:
+ virtual ~IFX_Edit_OprNotify() {}
+
+ // OprType: 0
+ virtual void OnInsertWord(const CPVT_WordPlace& place,
+ const CPVT_WordPlace& oldplace) = 0;
+ // OprType: 1
+ virtual void OnInsertReturn(const CPVT_WordPlace& place,
+ const CPVT_WordPlace& oldplace) = 0;
+ // OprType: 2
+ virtual void OnBackSpace(const CPVT_WordPlace& place,
+ const CPVT_WordPlace& oldplace) = 0;
+ // OprType: 3
+ virtual void OnDelete(const CPVT_WordPlace& place,
+ const CPVT_WordPlace& oldplace) = 0;
+ // OprType: 4
+ virtual void OnClear(const CPVT_WordPlace& place,
+ const CPVT_WordPlace& oldplace) = 0;
+ // OprType: 5
+ virtual void OnInsertText(const CPVT_WordPlace& place,
+ const CPVT_WordPlace& oldplace) = 0;
+ // OprType: 6
+ virtual void OnSetText(const CPVT_WordPlace& place,
+ const CPVT_WordPlace& oldplace) = 0;
+ //
+ virtual void OnAddUndo(IFX_Edit_UndoItem* pUndoItem) = 0;
};
-class IFX_Edit_Iterator
-{
-public:
- virtual ~IFX_Edit_Iterator() {}
-public:
- //move the current position to the next word.
- virtual FX_BOOL NextWord() = 0;
- //move the current position to the next line.
- virtual FX_BOOL NextLine() = 0;
- //move the current position to the next section.
- virtual FX_BOOL NextSection() = 0;
-
- //move the current position to the previous word.
- virtual FX_BOOL PrevWord() = 0;
- //move the current position to the previous line.
- virtual FX_BOOL PrevLine() = 0;
- //move the current position to the previous section.
- virtual FX_BOOL PrevSection() = 0;
-
- //get the information of the current word.
- virtual FX_BOOL GetWord(CPVT_Word & word) const = 0;
- //get the information of the current line.
- virtual FX_BOOL GetLine(CPVT_Line & line) const = 0;
- //get the information of the current section.
- virtual FX_BOOL GetSection(CPVT_Section & section) const = 0;
- //set the current position.
- virtual void SetAt(int32_t nWordIndex) = 0;
- //set the current position.
- virtual void SetAt(const CPVT_WordPlace & place) = 0;
- //get the current position.
- virtual const CPVT_WordPlace & GetAt() const = 0;
-
- //get the edit which this iterator belongs to
- virtual IFX_Edit* GetEdit() const = 0;
+class IFX_Edit_Iterator {
+ public:
+ virtual ~IFX_Edit_Iterator() {}
+
+ public:
+ // move the current position to the next word.
+ virtual FX_BOOL NextWord() = 0;
+ // move the current position to the next line.
+ virtual FX_BOOL NextLine() = 0;
+ // move the current position to the next section.
+ virtual FX_BOOL NextSection() = 0;
+
+ // move the current position to the previous word.
+ virtual FX_BOOL PrevWord() = 0;
+ // move the current position to the previous line.
+ virtual FX_BOOL PrevLine() = 0;
+ // move the current position to the previous section.
+ virtual FX_BOOL PrevSection() = 0;
+
+ // get the information of the current word.
+ virtual FX_BOOL GetWord(CPVT_Word& word) const = 0;
+ // get the information of the current line.
+ virtual FX_BOOL GetLine(CPVT_Line& line) const = 0;
+ // get the information of the current section.
+ virtual FX_BOOL GetSection(CPVT_Section& section) const = 0;
+ // set the current position.
+ virtual void SetAt(int32_t nWordIndex) = 0;
+ // set the current position.
+ virtual void SetAt(const CPVT_WordPlace& place) = 0;
+ // get the current position.
+ virtual const CPVT_WordPlace& GetAt() const = 0;
+
+ // get the edit which this iterator belongs to
+ virtual IFX_Edit* GetEdit() const = 0;
};
-class IFX_Edit_UndoItem
-{
-public:
- virtual ~IFX_Edit_UndoItem() { }
+class IFX_Edit_UndoItem {
+ public:
+ virtual ~IFX_Edit_UndoItem() {}
- virtual void Undo() = 0;
- virtual void Redo() = 0;
- virtual CFX_WideString GetUndoTitle() = 0;
+ virtual void Undo() = 0;
+ virtual void Redo() = 0;
+ virtual CFX_WideString GetUndoTitle() = 0;
};
-class IFX_Edit
-{
-public:
- static IFX_Edit* NewEdit();
- static void DelEdit(IFX_Edit* pEdit);
-
- //set a IFX_Edit_FontMap pointer implemented by user.
- virtual void SetFontMap(IFX_Edit_FontMap* pFontMap) = 0;
- //if user don't like to use FontMap, implement VTProvider and set it directly.
- virtual void SetVTProvider(IPDF_VariableText_Provider* pProvider) = 0;
- //set a IFX_Edit_Notify pointer implemented by user.
- virtual void SetNotify(IFX_Edit_Notify * pNotify) = 0;
- virtual void SetOprNotify(IFX_Edit_OprNotify* pOprNotify) = 0;
- //get a pointer allocated by CPDF_Edit, by this pointer, user can iterate the contents of edit, but don't need to release.
- virtual IFX_Edit_Iterator* GetIterator() = 0;
- //get a VT pointer relative to this edit.
- virtual IPDF_VariableText* GetVariableText() = 0;
- //get the IFX_Edit_FontMap pointer set by user.
- virtual IFX_Edit_FontMap* GetFontMap() = 0;
-
- //initialize the edit.
- virtual void Initialize() = 0;
-
- //set the bounding box of the text area.
- virtual void SetPlateRect(const CPDF_Rect & rect, FX_BOOL bPaint = TRUE) = 0;
- //set the scroll origin
- virtual void SetScrollPos(const CPDF_Point & point) = 0;
-
- //set the horizontal text alignment in text box, nFormat (0:left 1:middle 2:right).
- virtual void SetAlignmentH(int32_t nFormat = 0, FX_BOOL bPaint = TRUE) = 0;
- //set the vertical text alignment in text box, nFormat (0:top 1:center 2:bottom).
- virtual void SetAlignmentV(int32_t nFormat = 0, FX_BOOL bPaint = TRUE) = 0;
- //if the text is shown in secret , set a character for substitute.
- virtual void SetPasswordChar(FX_WORD wSubWord = '*', FX_BOOL bPaint = TRUE) = 0;
- //set the maximal count of words of the text.
- virtual void SetLimitChar(int32_t nLimitChar = 0, FX_BOOL bPaint = TRUE) = 0;
- //if set the count of charArray , then all words is shown in equal space.
- virtual void SetCharArray(int32_t nCharArray = 0, FX_BOOL bPaint = TRUE) = 0;
- //set the space of two characters.
- virtual void SetCharSpace(FX_FLOAT fCharSpace = 0.0f, FX_BOOL bPaint = TRUE) = 0;
- //set the horizontal scale of all characters.
- virtual void SetHorzScale(int32_t nHorzScale = 100, FX_BOOL bPaint = TRUE) = 0;
- //set the leading of all lines
- virtual void SetLineLeading(FX_FLOAT fLineLeading, FX_BOOL bPaint = TRUE) = 0;
- //if set, CRLF is allowed.
- virtual void SetMultiLine(FX_BOOL bMultiLine = TRUE, FX_BOOL bPaint = TRUE) = 0;
- //if set, all words auto fit the width of the bounding box.
- virtual void SetAutoReturn(FX_BOOL bAuto = TRUE, FX_BOOL bPaint = TRUE) = 0;
- //if set, a font size is calculated to full fit the bounding box.
- virtual void SetAutoFontSize(FX_BOOL bAuto = TRUE, FX_BOOL bPaint = TRUE) = 0;
- //is set, the text is allowed to scroll.
- virtual void SetAutoScroll(FX_BOOL bAuto = TRUE, FX_BOOL bPaint = TRUE) = 0;
- //set the font size of all words.
- virtual void SetFontSize(FX_FLOAT fFontSize, FX_BOOL bPaint = TRUE) = 0;
- //the text is allowed to auto-scroll, allow the text overflow?
- virtual void SetTextOverflow(FX_BOOL bAllowed = FALSE, FX_BOOL bPaint = TRUE) = 0;
-
- //query if the edit is richedit.
- virtual FX_BOOL IsRichText() const = 0;
- //set the edit is richedit.
- virtual void SetRichText(FX_BOOL bRichText = TRUE, FX_BOOL bPaint = TRUE) = 0;
- //set the fontsize of selected text.
- virtual FX_BOOL SetRichFontSize(FX_FLOAT fFontSize) = 0;
- //set the fontindex of selected text, user can change the font of selected text.
- virtual FX_BOOL SetRichFontIndex(int32_t nFontIndex) = 0;
- //set the textcolor of selected text.
- virtual FX_BOOL SetRichTextColor(FX_COLORREF dwColor) = 0;
- //set the text script type of selected text. (0:normal 1:superscript 2:subscript)
- virtual FX_BOOL SetRichTextScript(int32_t nScriptType) = 0;
- //set the bold font style of selected text.
- virtual FX_BOOL SetRichTextBold(FX_BOOL bBold = TRUE) = 0;
- //set the italic font style of selected text.
- virtual FX_BOOL SetRichTextItalic(FX_BOOL bItalic = TRUE) = 0;
- //set the underline style of selected text.
- virtual FX_BOOL SetRichTextUnderline(FX_BOOL bUnderline = TRUE) = 0;
- //set the crossout style of selected text.
- virtual FX_BOOL SetRichTextCrossout(FX_BOOL bCrossout = TRUE) = 0;
- //set the charspace of selected text, in user coordinate.
- virtual FX_BOOL SetRichTextCharSpace(FX_FLOAT fCharSpace) = 0;
- //set the horizontal scale of selected text, default value is 100.
- virtual FX_BOOL SetRichTextHorzScale(int32_t nHorzScale = 100) = 0;
- //set the leading of selected section, in user coordinate.
- virtual FX_BOOL SetRichTextLineLeading(FX_FLOAT fLineLeading) = 0;
- //set the indent of selected section, in user coordinate.
- virtual FX_BOOL SetRichTextLineIndent(FX_FLOAT fLineIndent) = 0;
- //set the alignment of selected section, nAlignment(0:left 1:middle 2:right)
- virtual FX_BOOL SetRichTextAlignment(int32_t nAlignment) = 0;
-
- //set the selected range of text.
- //if nStartChar == 0 and nEndChar == -1, select all the text.
- virtual void SetSel(int32_t nStartChar,int32_t nEndChar) = 0;
- //get the selected range of text.
- virtual void GetSel(int32_t & nStartChar, int32_t & nEndChar) const = 0;
- //select all the text.
- virtual void SelectAll() = 0;
- //set text is not selected.
- virtual void SelectNone() = 0;
- //get the caret position.
- virtual int32_t GetCaret() const = 0;
- virtual CPVT_WordPlace GetCaretWordPlace() const = 0;
- //get the string of selected text.
- virtual CFX_WideString GetSelText() const = 0;
- //get the text conent
- virtual CFX_WideString GetText() const = 0;
- //query if any text is selected.
- virtual FX_BOOL IsSelected() const = 0;
- //get the scroll origin
- virtual CPDF_Point GetScrollPos() const = 0;
- //get the bounding box of the text area.
- virtual CPDF_Rect GetPlateRect() const = 0;
- //get the fact area of the text.
- virtual CPDF_Rect GetContentRect() const = 0;
- //get the visible word range
- virtual CPVT_WordRange GetVisibleWordRange() const = 0;
- //get the whole word range
- virtual CPVT_WordRange GetWholeWordRange() const = 0;
- //get the word range of select text
- virtual CPVT_WordRange GetSelectWordRange() const = 0;
-
- //send the mousedown message to edit for response.
- //if Shift key is hold, bShift is TRUE, is Ctrl key is hold, bCtrl is TRUE.
- virtual void OnMouseDown(const CPDF_Point & point,FX_BOOL bShift,FX_BOOL bCtrl) = 0;
- //send the mousemove message to edit when mouse down is TRUE.
- virtual void OnMouseMove(const CPDF_Point & point,FX_BOOL bShift,FX_BOOL bCtrl) = 0;
- //send the UP key message to edit.
- virtual void OnVK_UP(FX_BOOL bShift,FX_BOOL bCtrl) = 0;
- //send the DOWN key message to edit.
- virtual void OnVK_DOWN(FX_BOOL bShift,FX_BOOL bCtrl) = 0;
- //send the LEFT key message to edit.
- virtual void OnVK_LEFT(FX_BOOL bShift,FX_BOOL bCtrl) = 0;
- //send the RIGHT key message to edit.
- virtual void OnVK_RIGHT(FX_BOOL bShift,FX_BOOL bCtrl) = 0;
- //send the HOME key message to edit.
- virtual void OnVK_HOME(FX_BOOL bShift,FX_BOOL bCtrl) = 0;
- //send the END key message to edit.
- virtual void OnVK_END(FX_BOOL bShift,FX_BOOL bCtrl) = 0;
-
- //put text into edit.
- virtual void SetText(const FX_WCHAR* text,int32_t charset = DEFAULT_CHARSET,
- const CPVT_SecProps * pSecProps = NULL,const CPVT_WordProps * pWordProps = NULL) = 0;
- //insert a word into the edit.
- virtual FX_BOOL InsertWord(FX_WORD word, int32_t charset = DEFAULT_CHARSET, const CPVT_WordProps * pWordProps = NULL) = 0;
- //insert a return into the edit.
- virtual FX_BOOL InsertReturn(const CPVT_SecProps * pSecProps = NULL,const CPVT_WordProps * pWordProps = NULL) = 0;
- //insert text into the edit.
- virtual FX_BOOL InsertText(const FX_WCHAR* text, int32_t charset = DEFAULT_CHARSET,
- const CPVT_SecProps * pSecProps = NULL,const CPVT_WordProps * pWordProps = NULL) = 0;
- //do backspace operation.
- virtual FX_BOOL Backspace() = 0;
- //do delete operation.
- virtual FX_BOOL Delete() = 0;
- //delete the selected text.
- virtual FX_BOOL Clear() = 0;
-
- //do Redo operation.
- virtual FX_BOOL Redo() = 0;
- //do Undo operation.
- virtual FX_BOOL Undo() = 0;
- //move caret
- virtual void SetCaret(int32_t nPos) = 0;
-
- //arrange all words over again
- virtual void Paint() = 0;
-
- //allow to refresh screen?
- virtual void EnableRefresh(FX_BOOL bRefresh) = 0;
-
- virtual void RefreshWordRange(const CPVT_WordRange& wr) = 0;
-
- //allow undo/redo?
- virtual void EnableUndo(FX_BOOL bUndo) = 0;
-
- //allow notify?
- virtual void EnableNotify(FX_BOOL bNotify) = 0;
-
- //allow opr notify?
- virtual void EnableOprNotify(FX_BOOL bNotify) = 0;
-
- //map word place to word index.
- virtual int32_t WordPlaceToWordIndex(const CPVT_WordPlace & place) const = 0;
- //map word index to word place.
- virtual CPVT_WordPlace WordIndexToWordPlace(int32_t index) const = 0;
-
- //get the beginning position of a line
- virtual CPVT_WordPlace GetLineBeginPlace(const CPVT_WordPlace & place) const = 0;
-
- //get the ending position of a line
- virtual CPVT_WordPlace GetLineEndPlace(const CPVT_WordPlace & place) const = 0;
-
- //get the beginning position of a section
- virtual CPVT_WordPlace GetSectionBeginPlace(const CPVT_WordPlace & place) const = 0;
-
- //get the ending position of a section
- virtual CPVT_WordPlace GetSectionEndPlace(const CPVT_WordPlace & place) const = 0;
-
- //search a wordplace form point
- virtual CPVT_WordPlace SearchWordPlace(const CPDF_Point& point) const = 0;
-
- //get the font size of non_rich text or default font size of richtext.
- virtual FX_FLOAT GetFontSize() const = 0;
- //get the mask character.
- virtual FX_WORD GetPasswordChar() const = 0;
- //get the count of charArray
- virtual int32_t GetCharArray() const = 0;
- //get the horizontal scale of all characters
- virtual int32_t GetHorzScale() const = 0;
- //get the space of two characters
- virtual FX_FLOAT GetCharSpace() const = 0;
- //get the latin words of specified range
- virtual CFX_WideString GetRangeText(const CPVT_WordRange & range) const = 0;
- //is the text full in bounding box
- virtual FX_BOOL IsTextFull() const = 0;
- virtual FX_BOOL CanUndo() const = 0;
- virtual FX_BOOL CanRedo() const = 0;
- //if the content is changed after settext?
- virtual FX_BOOL IsModified() const = 0;
- //get the total words in edit
- virtual int32_t GetTotalWords() const = 0;
-
- virtual void AddUndoItem(IFX_Edit_UndoItem* pUndoItem) = 0;
-
- static CFX_ByteString GetEditAppearanceStream(IFX_Edit* pEdit, const CPDF_Point & ptOffset,
- const CPVT_WordRange* pRange = NULL,
- FX_BOOL bContinuous = TRUE, FX_WORD SubWord = 0);
- static CFX_ByteString GetSelectAppearanceStream(IFX_Edit* pEdit, const CPDF_Point & ptOffset, const CPVT_WordRange* pRange = NULL);
- static void DrawEdit(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device, IFX_Edit* pEdit, FX_COLORREF crTextFill, FX_COLORREF crTextStroke,
- const CPDF_Rect& rcClip, const CPDF_Point& ptOffset, const CPVT_WordRange* pRange, IFX_SystemHandler* pSystemHandler, void* pFFLData);
- static void DrawUnderline(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device, IFX_Edit* pEdit, FX_COLORREF color,
- const CPDF_Rect& rcClip, const CPDF_Point& ptOffset, const CPVT_WordRange* pRange);
- static void DrawRichEdit(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device, IFX_Edit* pEdit,
- const CPDF_Rect& rcClip, const CPDF_Point& ptOffset, const CPVT_WordRange* pRange);
- static void GeneratePageObjects(CPDF_PageObjects* pPageObjects, IFX_Edit* pEdit,
- const CPDF_Point& ptOffset, const CPVT_WordRange* pRange, FX_COLORREF crText, CFX_ArrayTemplate<CPDF_TextObject*>& ObjArray);
- static void GenerateRichPageObjects(CPDF_PageObjects* pPageObjects, IFX_Edit* pEdit,
- const CPDF_Point& ptOffset, const CPVT_WordRange* pRange, CFX_ArrayTemplate<CPDF_TextObject*>& ObjArray);
- static void GenerateUnderlineObjects(CPDF_PageObjects* pPageObjects, IFX_Edit* pEdit,
- const CPDF_Point& ptOffset, const CPVT_WordRange* pRange, FX_COLORREF color);
-
-protected:
- ~IFX_Edit() { }
+class IFX_Edit {
+ public:
+ static IFX_Edit* NewEdit();
+ static void DelEdit(IFX_Edit* pEdit);
+
+ // set a IFX_Edit_FontMap pointer implemented by user.
+ virtual void SetFontMap(IFX_Edit_FontMap* pFontMap) = 0;
+ // if user don't like to use FontMap, implement VTProvider and set it
+ // directly.
+ virtual void SetVTProvider(IPDF_VariableText_Provider* pProvider) = 0;
+ // set a IFX_Edit_Notify pointer implemented by user.
+ virtual void SetNotify(IFX_Edit_Notify* pNotify) = 0;
+ virtual void SetOprNotify(IFX_Edit_OprNotify* pOprNotify) = 0;
+ // get a pointer allocated by CPDF_Edit, by this pointer, user can iterate the
+ // contents of edit, but don't need to release.
+ virtual IFX_Edit_Iterator* GetIterator() = 0;
+ // get a VT pointer relative to this edit.
+ virtual IPDF_VariableText* GetVariableText() = 0;
+ // get the IFX_Edit_FontMap pointer set by user.
+ virtual IFX_Edit_FontMap* GetFontMap() = 0;
+
+ // initialize the edit.
+ virtual void Initialize() = 0;
+
+ // set the bounding box of the text area.
+ virtual void SetPlateRect(const CPDF_Rect& rect, FX_BOOL bPaint = TRUE) = 0;
+ // set the scroll origin
+ virtual void SetScrollPos(const CPDF_Point& point) = 0;
+
+ // set the horizontal text alignment in text box, nFormat (0:left 1:middle
+ // 2:right).
+ virtual void SetAlignmentH(int32_t nFormat = 0, FX_BOOL bPaint = TRUE) = 0;
+ // set the vertical text alignment in text box, nFormat (0:top 1:center
+ // 2:bottom).
+ virtual void SetAlignmentV(int32_t nFormat = 0, FX_BOOL bPaint = TRUE) = 0;
+ // if the text is shown in secret , set a character for substitute.
+ virtual void SetPasswordChar(FX_WORD wSubWord = '*',
+ FX_BOOL bPaint = TRUE) = 0;
+ // set the maximal count of words of the text.
+ virtual void SetLimitChar(int32_t nLimitChar = 0, FX_BOOL bPaint = TRUE) = 0;
+ // if set the count of charArray , then all words is shown in equal space.
+ virtual void SetCharArray(int32_t nCharArray = 0, FX_BOOL bPaint = TRUE) = 0;
+ // set the space of two characters.
+ virtual void SetCharSpace(FX_FLOAT fCharSpace = 0.0f,
+ FX_BOOL bPaint = TRUE) = 0;
+ // set the horizontal scale of all characters.
+ virtual void SetHorzScale(int32_t nHorzScale = 100,
+ FX_BOOL bPaint = TRUE) = 0;
+ // set the leading of all lines
+ virtual void SetLineLeading(FX_FLOAT fLineLeading, FX_BOOL bPaint = TRUE) = 0;
+ // if set, CRLF is allowed.
+ virtual void SetMultiLine(FX_BOOL bMultiLine = TRUE,
+ FX_BOOL bPaint = TRUE) = 0;
+ // if set, all words auto fit the width of the bounding box.
+ virtual void SetAutoReturn(FX_BOOL bAuto = TRUE, FX_BOOL bPaint = TRUE) = 0;
+ // if set, a font size is calculated to full fit the bounding box.
+ virtual void SetAutoFontSize(FX_BOOL bAuto = TRUE, FX_BOOL bPaint = TRUE) = 0;
+ // is set, the text is allowed to scroll.
+ virtual void SetAutoScroll(FX_BOOL bAuto = TRUE, FX_BOOL bPaint = TRUE) = 0;
+ // set the font size of all words.
+ virtual void SetFontSize(FX_FLOAT fFontSize, FX_BOOL bPaint = TRUE) = 0;
+ // the text is allowed to auto-scroll, allow the text overflow?
+ virtual void SetTextOverflow(FX_BOOL bAllowed = FALSE,
+ FX_BOOL bPaint = TRUE) = 0;
+
+ // query if the edit is richedit.
+ virtual FX_BOOL IsRichText() const = 0;
+ // set the edit is richedit.
+ virtual void SetRichText(FX_BOOL bRichText = TRUE, FX_BOOL bPaint = TRUE) = 0;
+ // set the fontsize of selected text.
+ virtual FX_BOOL SetRichFontSize(FX_FLOAT fFontSize) = 0;
+ // set the fontindex of selected text, user can change the font of selected
+ // text.
+ virtual FX_BOOL SetRichFontIndex(int32_t nFontIndex) = 0;
+ // set the textcolor of selected text.
+ virtual FX_BOOL SetRichTextColor(FX_COLORREF dwColor) = 0;
+ // set the text script type of selected text. (0:normal 1:superscript
+ // 2:subscript)
+ virtual FX_BOOL SetRichTextScript(int32_t nScriptType) = 0;
+ // set the bold font style of selected text.
+ virtual FX_BOOL SetRichTextBold(FX_BOOL bBold = TRUE) = 0;
+ // set the italic font style of selected text.
+ virtual FX_BOOL SetRichTextItalic(FX_BOOL bItalic = TRUE) = 0;
+ // set the underline style of selected text.
+ virtual FX_BOOL SetRichTextUnderline(FX_BOOL bUnderline = TRUE) = 0;
+ // set the crossout style of selected text.
+ virtual FX_BOOL SetRichTextCrossout(FX_BOOL bCrossout = TRUE) = 0;
+ // set the charspace of selected text, in user coordinate.
+ virtual FX_BOOL SetRichTextCharSpace(FX_FLOAT fCharSpace) = 0;
+ // set the horizontal scale of selected text, default value is 100.
+ virtual FX_BOOL SetRichTextHorzScale(int32_t nHorzScale = 100) = 0;
+ // set the leading of selected section, in user coordinate.
+ virtual FX_BOOL SetRichTextLineLeading(FX_FLOAT fLineLeading) = 0;
+ // set the indent of selected section, in user coordinate.
+ virtual FX_BOOL SetRichTextLineIndent(FX_FLOAT fLineIndent) = 0;
+ // set the alignment of selected section, nAlignment(0:left 1:middle 2:right)
+ virtual FX_BOOL SetRichTextAlignment(int32_t nAlignment) = 0;
+
+ // set the selected range of text.
+ // if nStartChar == 0 and nEndChar == -1, select all the text.
+ virtual void SetSel(int32_t nStartChar, int32_t nEndChar) = 0;
+ // get the selected range of text.
+ virtual void GetSel(int32_t& nStartChar, int32_t& nEndChar) const = 0;
+ // select all the text.
+ virtual void SelectAll() = 0;
+ // set text is not selected.
+ virtual void SelectNone() = 0;
+ // get the caret position.
+ virtual int32_t GetCaret() const = 0;
+ virtual CPVT_WordPlace GetCaretWordPlace() const = 0;
+ // get the string of selected text.
+ virtual CFX_WideString GetSelText() const = 0;
+ // get the text conent
+ virtual CFX_WideString GetText() const = 0;
+ // query if any text is selected.
+ virtual FX_BOOL IsSelected() const = 0;
+ // get the scroll origin
+ virtual CPDF_Point GetScrollPos() const = 0;
+ // get the bounding box of the text area.
+ virtual CPDF_Rect GetPlateRect() const = 0;
+ // get the fact area of the text.
+ virtual CPDF_Rect GetContentRect() const = 0;
+ // get the visible word range
+ virtual CPVT_WordRange GetVisibleWordRange() const = 0;
+ // get the whole word range
+ virtual CPVT_WordRange GetWholeWordRange() const = 0;
+ // get the word range of select text
+ virtual CPVT_WordRange GetSelectWordRange() const = 0;
+
+ // send the mousedown message to edit for response.
+ // if Shift key is hold, bShift is TRUE, is Ctrl key is hold, bCtrl is TRUE.
+ virtual void OnMouseDown(const CPDF_Point& point,
+ FX_BOOL bShift,
+ FX_BOOL bCtrl) = 0;
+ // send the mousemove message to edit when mouse down is TRUE.
+ virtual void OnMouseMove(const CPDF_Point& point,
+ FX_BOOL bShift,
+ FX_BOOL bCtrl) = 0;
+ // send the UP key message to edit.
+ virtual void OnVK_UP(FX_BOOL bShift, FX_BOOL bCtrl) = 0;
+ // send the DOWN key message to edit.
+ virtual void OnVK_DOWN(FX_BOOL bShift, FX_BOOL bCtrl) = 0;
+ // send the LEFT key message to edit.
+ virtual void OnVK_LEFT(FX_BOOL bShift, FX_BOOL bCtrl) = 0;
+ // send the RIGHT key message to edit.
+ virtual void OnVK_RIGHT(FX_BOOL bShift, FX_BOOL bCtrl) = 0;
+ // send the HOME key message to edit.
+ virtual void OnVK_HOME(FX_BOOL bShift, FX_BOOL bCtrl) = 0;
+ // send the END key message to edit.
+ virtual void OnVK_END(FX_BOOL bShift, FX_BOOL bCtrl) = 0;
+
+ // put text into edit.
+ virtual void SetText(const FX_WCHAR* text,
+ int32_t charset = DEFAULT_CHARSET,
+ const CPVT_SecProps* pSecProps = NULL,
+ const CPVT_WordProps* pWordProps = NULL) = 0;
+ // insert a word into the edit.
+ virtual FX_BOOL InsertWord(FX_WORD word,
+ int32_t charset = DEFAULT_CHARSET,
+ const CPVT_WordProps* pWordProps = NULL) = 0;
+ // insert a return into the edit.
+ virtual FX_BOOL InsertReturn(const CPVT_SecProps* pSecProps = NULL,
+ const CPVT_WordProps* pWordProps = NULL) = 0;
+ // insert text into the edit.
+ virtual FX_BOOL InsertText(const FX_WCHAR* text,
+ int32_t charset = DEFAULT_CHARSET,
+ const CPVT_SecProps* pSecProps = NULL,
+ const CPVT_WordProps* pWordProps = NULL) = 0;
+ // do backspace operation.
+ virtual FX_BOOL Backspace() = 0;
+ // do delete operation.
+ virtual FX_BOOL Delete() = 0;
+ // delete the selected text.
+ virtual FX_BOOL Clear() = 0;
+
+ // do Redo operation.
+ virtual FX_BOOL Redo() = 0;
+ // do Undo operation.
+ virtual FX_BOOL Undo() = 0;
+ // move caret
+ virtual void SetCaret(int32_t nPos) = 0;
+
+ // arrange all words over again
+ virtual void Paint() = 0;
+
+ // allow to refresh screen?
+ virtual void EnableRefresh(FX_BOOL bRefresh) = 0;
+
+ virtual void RefreshWordRange(const CPVT_WordRange& wr) = 0;
+
+ // allow undo/redo?
+ virtual void EnableUndo(FX_BOOL bUndo) = 0;
+
+ // allow notify?
+ virtual void EnableNotify(FX_BOOL bNotify) = 0;
+
+ // allow opr notify?
+ virtual void EnableOprNotify(FX_BOOL bNotify) = 0;
+
+ // map word place to word index.
+ virtual int32_t WordPlaceToWordIndex(const CPVT_WordPlace& place) const = 0;
+ // map word index to word place.
+ virtual CPVT_WordPlace WordIndexToWordPlace(int32_t index) const = 0;
+
+ // get the beginning position of a line
+ virtual CPVT_WordPlace GetLineBeginPlace(
+ const CPVT_WordPlace& place) const = 0;
+
+ // get the ending position of a line
+ virtual CPVT_WordPlace GetLineEndPlace(const CPVT_WordPlace& place) const = 0;
+
+ // get the beginning position of a section
+ virtual CPVT_WordPlace GetSectionBeginPlace(
+ const CPVT_WordPlace& place) const = 0;
+
+ // get the ending position of a section
+ virtual CPVT_WordPlace GetSectionEndPlace(
+ const CPVT_WordPlace& place) const = 0;
+
+ // search a wordplace form point
+ virtual CPVT_WordPlace SearchWordPlace(const CPDF_Point& point) const = 0;
+
+ // get the font size of non_rich text or default font size of richtext.
+ virtual FX_FLOAT GetFontSize() const = 0;
+ // get the mask character.
+ virtual FX_WORD GetPasswordChar() const = 0;
+ // get the count of charArray
+ virtual int32_t GetCharArray() const = 0;
+ // get the horizontal scale of all characters
+ virtual int32_t GetHorzScale() const = 0;
+ // get the space of two characters
+ virtual FX_FLOAT GetCharSpace() const = 0;
+ // get the latin words of specified range
+ virtual CFX_WideString GetRangeText(const CPVT_WordRange& range) const = 0;
+ // is the text full in bounding box
+ virtual FX_BOOL IsTextFull() const = 0;
+ virtual FX_BOOL CanUndo() const = 0;
+ virtual FX_BOOL CanRedo() const = 0;
+ // if the content is changed after settext?
+ virtual FX_BOOL IsModified() const = 0;
+ // get the total words in edit
+ virtual int32_t GetTotalWords() const = 0;
+
+ virtual void AddUndoItem(IFX_Edit_UndoItem* pUndoItem) = 0;
+
+ static CFX_ByteString GetEditAppearanceStream(
+ IFX_Edit* pEdit,
+ const CPDF_Point& ptOffset,
+ const CPVT_WordRange* pRange = NULL,
+ FX_BOOL bContinuous = TRUE,
+ FX_WORD SubWord = 0);
+ static CFX_ByteString GetSelectAppearanceStream(
+ IFX_Edit* pEdit,
+ const CPDF_Point& ptOffset,
+ const CPVT_WordRange* pRange = NULL);
+ static void DrawEdit(CFX_RenderDevice* pDevice,
+ CPDF_Matrix* pUser2Device,
+ IFX_Edit* pEdit,
+ FX_COLORREF crTextFill,
+ FX_COLORREF crTextStroke,
+ const CPDF_Rect& rcClip,
+ const CPDF_Point& ptOffset,
+ const CPVT_WordRange* pRange,
+ IFX_SystemHandler* pSystemHandler,
+ void* pFFLData);
+ static void DrawUnderline(CFX_RenderDevice* pDevice,
+ CPDF_Matrix* pUser2Device,
+ IFX_Edit* pEdit,
+ FX_COLORREF color,
+ const CPDF_Rect& rcClip,
+ const CPDF_Point& ptOffset,
+ const CPVT_WordRange* pRange);
+ static void DrawRichEdit(CFX_RenderDevice* pDevice,
+ CPDF_Matrix* pUser2Device,
+ IFX_Edit* pEdit,
+ const CPDF_Rect& rcClip,
+ const CPDF_Point& ptOffset,
+ const CPVT_WordRange* pRange);
+ static void GeneratePageObjects(
+ CPDF_PageObjects* pPageObjects,
+ IFX_Edit* pEdit,
+ const CPDF_Point& ptOffset,
+ const CPVT_WordRange* pRange,
+ FX_COLORREF crText,
+ CFX_ArrayTemplate<CPDF_TextObject*>& ObjArray);
+ static void GenerateRichPageObjects(
+ CPDF_PageObjects* pPageObjects,
+ IFX_Edit* pEdit,
+ const CPDF_Point& ptOffset,
+ const CPVT_WordRange* pRange,
+ CFX_ArrayTemplate<CPDF_TextObject*>& ObjArray);
+ static void GenerateUnderlineObjects(CPDF_PageObjects* pPageObjects,
+ IFX_Edit* pEdit,
+ const CPDF_Point& ptOffset,
+ const CPVT_WordRange* pRange,
+ FX_COLORREF color);
+
+ protected:
+ ~IFX_Edit() {}
};
-class IFX_List_Notify
-{
-public:
- virtual ~IFX_List_Notify() { }
- //set the horizontal scrollbar information.
- virtual void IOnSetScrollInfoX(FX_FLOAT fPlateMin, FX_FLOAT fPlateMax,
- FX_FLOAT fContentMin, FX_FLOAT fContentMax,
- FX_FLOAT fSmallStep, FX_FLOAT fBigStep) = 0;
- //set the vertical scrollbar information.
- virtual void IOnSetScrollInfoY(FX_FLOAT fPlateMin, FX_FLOAT fPlateMax,
- FX_FLOAT fContentMin, FX_FLOAT fContentMax,
- FX_FLOAT fSmallStep, FX_FLOAT fBigStep) = 0;
- //set the position of horizontal scrollbar.
- virtual void IOnSetScrollPosX(FX_FLOAT fx) = 0;
- //set the position of vertical scrollbar.
- virtual void IOnSetScrollPosY(FX_FLOAT fy) = 0;
- //Invalidate the rectangle relative to the bounding box of edit.
- virtual void IOnInvalidateRect(CPDF_Rect * pRect) = 0;
+class IFX_List_Notify {
+ public:
+ virtual ~IFX_List_Notify() {}
+ // set the horizontal scrollbar information.
+ virtual void IOnSetScrollInfoX(FX_FLOAT fPlateMin,
+ FX_FLOAT fPlateMax,
+ FX_FLOAT fContentMin,
+ FX_FLOAT fContentMax,
+ FX_FLOAT fSmallStep,
+ FX_FLOAT fBigStep) = 0;
+ // set the vertical scrollbar information.
+ virtual void IOnSetScrollInfoY(FX_FLOAT fPlateMin,
+ FX_FLOAT fPlateMax,
+ FX_FLOAT fContentMin,
+ FX_FLOAT fContentMax,
+ FX_FLOAT fSmallStep,
+ FX_FLOAT fBigStep) = 0;
+ // set the position of horizontal scrollbar.
+ virtual void IOnSetScrollPosX(FX_FLOAT fx) = 0;
+ // set the position of vertical scrollbar.
+ virtual void IOnSetScrollPosY(FX_FLOAT fy) = 0;
+ // Invalidate the rectangle relative to the bounding box of edit.
+ virtual void IOnInvalidateRect(CPDF_Rect* pRect) = 0;
};
-class IFX_List
-{
-public:
- static IFX_List* NewList();
- static void DelList(IFX_List* pList);
-
- virtual void SetFontMap(IFX_Edit_FontMap * pFontMap) = 0;
- virtual void SetNotify(IFX_List_Notify * pNotify) = 0;
-
- virtual void SetPlateRect(const CPDF_Rect & rect) = 0;
- virtual void SetFontSize(FX_FLOAT fFontSize) = 0;
-
- virtual CPDF_Rect GetPlateRect() const = 0;
- virtual CPDF_Rect GetContentRect() const = 0;
-
- virtual FX_FLOAT GetFontSize() const = 0;
- virtual IFX_Edit* GetItemEdit(int32_t nIndex) const = 0;
- virtual int32_t GetCount() const = 0;
- virtual FX_BOOL IsItemSelected(int32_t nIndex) const = 0;
- virtual FX_FLOAT GetFirstHeight() const = 0;
-
- virtual void SetMultipleSel(FX_BOOL bMultiple) = 0;
- virtual FX_BOOL IsMultipleSel() const = 0;
- virtual FX_BOOL IsValid(int32_t nItemIndex) const = 0;
- virtual int32_t FindNext(int32_t nIndex,FX_WCHAR nChar) const = 0;
-
- virtual void SetScrollPos(const CPDF_Point & point) = 0;
- virtual void ScrollToListItem(int32_t nItemIndex) = 0;
- virtual CPDF_Rect GetItemRect(int32_t nIndex) const = 0;
- virtual int32_t GetCaret() const = 0;
- virtual int32_t GetSelect() const = 0;
- virtual int32_t GetTopItem() const = 0;
- virtual int32_t GetItemIndex(const CPDF_Point & point) const = 0;
- virtual int32_t GetFirstSelected() const = 0;
-
- virtual void AddString(const FX_WCHAR* string) = 0;
- virtual void SetTopItem(int32_t nIndex) = 0;
- virtual void Select(int32_t nItemIndex) = 0;
- virtual void SetCaret(int32_t nItemIndex) = 0;
- virtual void Empty() = 0;
- virtual void Cancel() = 0;
- virtual CFX_WideString GetText() const = 0;
-
-
- virtual void OnMouseDown(const CPDF_Point & point,FX_BOOL bShift,FX_BOOL bCtrl) = 0;
- virtual void OnMouseMove(const CPDF_Point & point,FX_BOOL bShift,FX_BOOL bCtrl) = 0;
- virtual void OnVK_UP(FX_BOOL bShift,FX_BOOL bCtrl) = 0;
- virtual void OnVK_DOWN(FX_BOOL bShift,FX_BOOL bCtrl) = 0;
- virtual void OnVK_LEFT(FX_BOOL bShift,FX_BOOL bCtrl) = 0;
- virtual void OnVK_RIGHT(FX_BOOL bShift,FX_BOOL bCtrl) = 0;
- virtual void OnVK_HOME(FX_BOOL bShift,FX_BOOL bCtrl) = 0;
- virtual void OnVK_END(FX_BOOL bShift,FX_BOOL bCtrl) = 0;
- virtual void OnVK(int32_t nItemIndex,FX_BOOL bShift,FX_BOOL bCtrl) = 0;
- virtual FX_BOOL OnChar(FX_WORD nChar,FX_BOOL bShift,FX_BOOL bCtrl) = 0;
-
-protected:
- ~IFX_List() { }
+class IFX_List {
+ public:
+ static IFX_List* NewList();
+ static void DelList(IFX_List* pList);
+
+ virtual void SetFontMap(IFX_Edit_FontMap* pFontMap) = 0;
+ virtual void SetNotify(IFX_List_Notify* pNotify) = 0;
+
+ virtual void SetPlateRect(const CPDF_Rect& rect) = 0;
+ virtual void SetFontSize(FX_FLOAT fFontSize) = 0;
+
+ virtual CPDF_Rect GetPlateRect() const = 0;
+ virtual CPDF_Rect GetContentRect() const = 0;
+
+ virtual FX_FLOAT GetFontSize() const = 0;
+ virtual IFX_Edit* GetItemEdit(int32_t nIndex) const = 0;
+ virtual int32_t GetCount() const = 0;
+ virtual FX_BOOL IsItemSelected(int32_t nIndex) const = 0;
+ virtual FX_FLOAT GetFirstHeight() const = 0;
+
+ virtual void SetMultipleSel(FX_BOOL bMultiple) = 0;
+ virtual FX_BOOL IsMultipleSel() const = 0;
+ virtual FX_BOOL IsValid(int32_t nItemIndex) const = 0;
+ virtual int32_t FindNext(int32_t nIndex, FX_WCHAR nChar) const = 0;
+
+ virtual void SetScrollPos(const CPDF_Point& point) = 0;
+ virtual void ScrollToListItem(int32_t nItemIndex) = 0;
+ virtual CPDF_Rect GetItemRect(int32_t nIndex) const = 0;
+ virtual int32_t GetCaret() const = 0;
+ virtual int32_t GetSelect() const = 0;
+ virtual int32_t GetTopItem() const = 0;
+ virtual int32_t GetItemIndex(const CPDF_Point& point) const = 0;
+ virtual int32_t GetFirstSelected() const = 0;
+
+ virtual void AddString(const FX_WCHAR* string) = 0;
+ virtual void SetTopItem(int32_t nIndex) = 0;
+ virtual void Select(int32_t nItemIndex) = 0;
+ virtual void SetCaret(int32_t nItemIndex) = 0;
+ virtual void Empty() = 0;
+ virtual void Cancel() = 0;
+ virtual CFX_WideString GetText() const = 0;
+
+ virtual void OnMouseDown(const CPDF_Point& point,
+ FX_BOOL bShift,
+ FX_BOOL bCtrl) = 0;
+ virtual void OnMouseMove(const CPDF_Point& point,
+ FX_BOOL bShift,
+ FX_BOOL bCtrl) = 0;
+ virtual void OnVK_UP(FX_BOOL bShift, FX_BOOL bCtrl) = 0;
+ virtual void OnVK_DOWN(FX_BOOL bShift, FX_BOOL bCtrl) = 0;
+ virtual void OnVK_LEFT(FX_BOOL bShift, FX_BOOL bCtrl) = 0;
+ virtual void OnVK_RIGHT(FX_BOOL bShift, FX_BOOL bCtrl) = 0;
+ virtual void OnVK_HOME(FX_BOOL bShift, FX_BOOL bCtrl) = 0;
+ virtual void OnVK_END(FX_BOOL bShift, FX_BOOL bCtrl) = 0;
+ virtual void OnVK(int32_t nItemIndex, FX_BOOL bShift, FX_BOOL bCtrl) = 0;
+ virtual FX_BOOL OnChar(FX_WORD nChar, FX_BOOL bShift, FX_BOOL bCtrl) = 0;
+
+ protected:
+ ~IFX_List() {}
};
#endif // FPDFSDK_INCLUDE_FXEDIT_FX_EDIT_H_
diff --git a/fpdfsdk/include/fxedit/fxet_edit.h b/fpdfsdk/include/fxedit/fxet_edit.h
index 7a2742f0ee..d654ebc451 100644
--- a/fpdfsdk/include/fxedit/fxet_edit.h
+++ b/fpdfsdk/include/fxedit/fxet_edit.h
@@ -23,795 +23,801 @@ class CFX_Edit_UndoItem;
class CFX_Edit_Undo;
class CFX_Edit_Provider;
-#define FX_EDIT_IsFloatZero(f) (f < 0.0001 && f > -0.0001)
-#define FX_EDIT_IsFloatEqual(fa,fb) FX_EDIT_IsFloatZero(fa - fb)
-#define FX_EDIT_IsFloatBigger(fa,fb) (fa > fb && !FX_EDIT_IsFloatEqual(fa,fb))
-#define FX_EDIT_IsFloatSmaller(fa,fb) (fa < fb && !FX_EDIT_IsFloatEqual(fa,fb))
+#define FX_EDIT_IsFloatZero(f) (f < 0.0001 && f > -0.0001)
+#define FX_EDIT_IsFloatEqual(fa, fb) FX_EDIT_IsFloatZero(fa - fb)
+#define FX_EDIT_IsFloatBigger(fa, fb) (fa > fb && !FX_EDIT_IsFloatEqual(fa, fb))
+#define FX_EDIT_IsFloatSmaller(fa, fb) \
+ (fa < fb && !FX_EDIT_IsFloatEqual(fa, fb))
+
+template <class T>
+T FX_EDIT_MIN(const T& i, const T& j) {
+ return ((i < j) ? i : j);
+}
+template <class T>
+T FX_EDIT_MAX(const T& i, const T& j) {
+ return ((i > j) ? i : j);
+}
+
+#define FX_EDIT_PI 3.14159265358979f
+#define FX_EDIT_ITALIC_ANGEL 10 * FX_EDIT_PI / 180.0f
-template<class T> T FX_EDIT_MIN (const T & i, const T & j) { return ((i < j) ? i : j); }
-template<class T> T FX_EDIT_MAX (const T & i, const T & j) { return ((i > j) ? i : j); }
+/* ------------------------- CFX_Edit_Refresh ---------------------------- */
-#define FX_EDIT_PI 3.14159265358979f
-#define FX_EDIT_ITALIC_ANGEL 10 * FX_EDIT_PI / 180.0f
+enum REFRESH_PLAN_E { RP_ANALYSE, RP_NOANALYSE, RP_OPTIONAL };
+
+enum EDIT_PROPS_E {
+ EP_LINELEADING,
+ EP_LINEINDENT,
+ EP_ALIGNMENT,
+ EP_FONTINDEX,
+ EP_FONTSIZE,
+ EP_WORDCOLOR,
+ EP_SCRIPTTYPE,
+ EP_UNDERLINE,
+ EP_CROSSOUT,
+ EP_CHARSPACE,
+ EP_HORZSCALE,
+ EP_BOLD,
+ EP_ITALIC
+};
+struct CFX_Edit_LineRect {
+ CFX_Edit_LineRect(const CPVT_WordRange& wrLine, const CPDF_Rect& rcLine)
+ : m_wrLine(wrLine), m_rcLine(rcLine) {}
-/* ------------------------- CFX_Edit_Refresh ---------------------------- */
+ FX_BOOL operator!=(const CFX_Edit_LineRect& linerect) const {
+ return FXSYS_memcmp(this, &linerect, sizeof(CFX_Edit_LineRect)) != 0;
+ }
-enum REFRESH_PLAN_E
-{
- RP_ANALYSE,
- RP_NOANALYSE,
- RP_OPTIONAL
-};
+ FX_BOOL IsSameHeight(const CFX_Edit_LineRect& linerect) const {
+ return FX_EDIT_IsFloatZero(
+ (m_rcLine.top - m_rcLine.bottom) -
+ (linerect.m_rcLine.top - linerect.m_rcLine.bottom));
+ }
-enum EDIT_PROPS_E
-{
- EP_LINELEADING,
- EP_LINEINDENT,
- EP_ALIGNMENT,
- EP_FONTINDEX,
- EP_FONTSIZE,
- EP_WORDCOLOR,
- EP_SCRIPTTYPE,
- EP_UNDERLINE,
- EP_CROSSOUT,
- EP_CHARSPACE,
- EP_HORZSCALE,
- EP_BOLD,
- EP_ITALIC
-};
+ FX_BOOL IsSameTop(const CFX_Edit_LineRect& linerect) const {
+ return FX_EDIT_IsFloatZero(m_rcLine.top - linerect.m_rcLine.top);
+ }
-struct CFX_Edit_LineRect
-{
- CFX_Edit_LineRect(const CPVT_WordRange & wrLine,const CPDF_Rect & rcLine) :
- m_wrLine(wrLine), m_rcLine(rcLine)
- {
- }
-
- FX_BOOL operator != (const CFX_Edit_LineRect & linerect) const
- {
- return FXSYS_memcmp(this, &linerect, sizeof(CFX_Edit_LineRect)) != 0;
- }
-
- FX_BOOL IsSameHeight(const CFX_Edit_LineRect & linerect) const
- {
- return FX_EDIT_IsFloatZero((m_rcLine.top - m_rcLine.bottom) - (linerect.m_rcLine.top -linerect.m_rcLine.bottom));
- }
-
- FX_BOOL IsSameTop(const CFX_Edit_LineRect & linerect) const
- {
- return FX_EDIT_IsFloatZero(m_rcLine.top - linerect.m_rcLine.top);
- }
-
- FX_BOOL IsSameLeft(const CFX_Edit_LineRect & linerect) const
- {
- return FX_EDIT_IsFloatZero(m_rcLine.left - linerect.m_rcLine.left);
- }
-
- FX_BOOL IsSameRight(const CFX_Edit_LineRect & linerect) const
- {
- return FX_EDIT_IsFloatZero(m_rcLine.right - linerect.m_rcLine.right);
- }
-
- CPVT_WordRange m_wrLine;
- CPDF_Rect m_rcLine;
-};
+ FX_BOOL IsSameLeft(const CFX_Edit_LineRect& linerect) const {
+ return FX_EDIT_IsFloatZero(m_rcLine.left - linerect.m_rcLine.left);
+ }
-class CFX_Edit_LineRectArray
-{
-public:
- CFX_Edit_LineRectArray()
- {
- }
-
- virtual ~CFX_Edit_LineRectArray()
- {
- Empty();
- }
-
- void Empty()
- {
- for (int32_t i = 0, sz = m_LineRects.GetSize(); i < sz; i++)
- delete m_LineRects.GetAt(i);
-
- m_LineRects.RemoveAll();
- }
-
- void RemoveAll()
- {
- m_LineRects.RemoveAll();
- }
-
- void operator = (CFX_Edit_LineRectArray & rects)
- {
- Empty();
- for (int32_t i = 0, sz = rects.GetSize(); i < sz; i++)
- m_LineRects.Add(rects.GetAt(i));
-
- rects.RemoveAll();
- }
-
- void Add(const CPVT_WordRange & wrLine,const CPDF_Rect & rcLine)
- {
- if (CFX_Edit_LineRect * pRect = new CFX_Edit_LineRect(wrLine,rcLine))
- m_LineRects.Add(pRect);
- }
-
- int32_t GetSize() const
- {
- return m_LineRects.GetSize();
- }
-
- CFX_Edit_LineRect * GetAt(int32_t nIndex) const
- {
- if (nIndex < 0 || nIndex >= m_LineRects.GetSize())
- return NULL;
-
- return m_LineRects.GetAt(nIndex);
- }
-
- CFX_ArrayTemplate<CFX_Edit_LineRect*> m_LineRects;
-};
+ FX_BOOL IsSameRight(const CFX_Edit_LineRect& linerect) const {
+ return FX_EDIT_IsFloatZero(m_rcLine.right - linerect.m_rcLine.right);
+ }
-class CFX_Edit_RectArray
-{
-public:
- CFX_Edit_RectArray()
- {
- }
-
- virtual ~CFX_Edit_RectArray()
- {
- Empty();
- }
-
- void Empty()
- {
- for (int32_t i = 0, sz = m_Rects.GetSize(); i < sz; i++)
- delete m_Rects.GetAt(i);
-
- m_Rects.RemoveAll();
- }
-
- void Add(const CPDF_Rect & rect)
- {
- //check for overlaped area
- for (int32_t i = 0, sz = m_Rects.GetSize(); i < sz; i++)
- if (CPDF_Rect * pRect = m_Rects.GetAt(i))
- if (pRect->Contains(rect))return;
-
- if (CPDF_Rect * pNewRect = new CPDF_Rect(rect))
- m_Rects.Add(pNewRect);
- }
-
- int32_t GetSize() const
- {
- return m_Rects.GetSize();
- }
-
- CPDF_Rect * GetAt(int32_t nIndex) const
- {
- if (nIndex < 0 || nIndex >= m_Rects.GetSize())
- return NULL;
-
- return m_Rects.GetAt(nIndex);
- }
-
- CFX_ArrayTemplate<CPDF_Rect*> m_Rects;
+ CPVT_WordRange m_wrLine;
+ CPDF_Rect m_rcLine;
};
-class CFX_Edit_Refresh
-{
-public:
- CFX_Edit_Refresh();
- virtual ~CFX_Edit_Refresh();
-
- void BeginRefresh();
- void Push(const CPVT_WordRange & linerange,const CPDF_Rect & rect);
- void NoAnalyse();
- void Analyse(int32_t nAlignment);
- void AddRefresh(const CPDF_Rect & rect);
- const CFX_Edit_RectArray * GetRefreshRects() const;
- void EndRefresh();
-
-private:
- CFX_Edit_LineRectArray m_NewLineRects;
- CFX_Edit_LineRectArray m_OldLineRects;
- CFX_Edit_RectArray m_RefreshRects;
-};
+class CFX_Edit_LineRectArray {
+ public:
+ CFX_Edit_LineRectArray() {}
+ virtual ~CFX_Edit_LineRectArray() { Empty(); }
-/* ------------------------- CFX_Edit_Select ---------------------------- */
+ void Empty() {
+ for (int32_t i = 0, sz = m_LineRects.GetSize(); i < sz; i++)
+ delete m_LineRects.GetAt(i);
+
+ m_LineRects.RemoveAll();
+ }
+
+ void RemoveAll() { m_LineRects.RemoveAll(); }
-class CFX_Edit_Select
-{
-public:
- CFX_Edit_Select()
- {
- }
-
- CFX_Edit_Select(const CPVT_WordPlace & begin,const CPVT_WordPlace & end)
- {
- Set(begin,end);
- }
-
- CFX_Edit_Select(const CPVT_WordRange & range)
- {
- Set(range.BeginPos,range.EndPos);
- }
-
- CPVT_WordRange ConvertToWordRange() const
- {
- return CPVT_WordRange(BeginPos, EndPos);
- }
-
- void Default()
- {
- BeginPos.Default();
- EndPos.Default();
- }
-
- void Set(const CPVT_WordPlace & begin,const CPVT_WordPlace & end)
- {
- BeginPos = begin;
- EndPos = end;
- }
-
- void SetBeginPos(const CPVT_WordPlace & begin)
- {
- BeginPos = begin;
- }
-
- void SetEndPos(const CPVT_WordPlace & end)
- {
- EndPos = end;
- }
-
- FX_BOOL IsExist() const
- {
- return BeginPos != EndPos;
- }
-
- FX_BOOL operator != (const CPVT_WordRange & wr) const
- {
- return wr.BeginPos != BeginPos || wr.EndPos != EndPos;
- }
-
- CPVT_WordPlace BeginPos,EndPos;
+ void operator=(CFX_Edit_LineRectArray& rects) {
+ Empty();
+ for (int32_t i = 0, sz = rects.GetSize(); i < sz; i++)
+ m_LineRects.Add(rects.GetAt(i));
+
+ rects.RemoveAll();
+ }
+
+ void Add(const CPVT_WordRange& wrLine, const CPDF_Rect& rcLine) {
+ if (CFX_Edit_LineRect* pRect = new CFX_Edit_LineRect(wrLine, rcLine))
+ m_LineRects.Add(pRect);
+ }
+
+ int32_t GetSize() const { return m_LineRects.GetSize(); }
+
+ CFX_Edit_LineRect* GetAt(int32_t nIndex) const {
+ if (nIndex < 0 || nIndex >= m_LineRects.GetSize())
+ return NULL;
+
+ return m_LineRects.GetAt(nIndex);
+ }
+
+ CFX_ArrayTemplate<CFX_Edit_LineRect*> m_LineRects;
};
-/* ------------------------- CFX_Edit_Undo ---------------------------- */
+class CFX_Edit_RectArray {
+ public:
+ CFX_Edit_RectArray() {}
-class CFX_Edit_Undo
-{
-public:
- CFX_Edit_Undo(int32_t nBufsize = 10000);
- virtual ~CFX_Edit_Undo();
+ virtual ~CFX_Edit_RectArray() { Empty(); }
- void Undo();
- void Redo();
+ void Empty() {
+ for (int32_t i = 0, sz = m_Rects.GetSize(); i < sz; i++)
+ delete m_Rects.GetAt(i);
- void AddItem(IFX_Edit_UndoItem* pItem);
+ m_Rects.RemoveAll();
+ }
- FX_BOOL CanUndo() const;
- FX_BOOL CanRedo() const;
- FX_BOOL IsModified() const;
- FX_BOOL IsWorking() const;
+ void Add(const CPDF_Rect& rect) {
+ // check for overlaped area
+ for (int32_t i = 0, sz = m_Rects.GetSize(); i < sz; i++)
+ if (CPDF_Rect* pRect = m_Rects.GetAt(i))
+ if (pRect->Contains(rect))
+ return;
- void Reset();
+ if (CPDF_Rect* pNewRect = new CPDF_Rect(rect))
+ m_Rects.Add(pNewRect);
+ }
- IFX_Edit_UndoItem* GetItem(int32_t nIndex);
- int32_t GetItemCount(){return m_UndoItemStack.GetSize();}
- int32_t GetCurUndoPos(){return m_nCurUndoPos;}
+ int32_t GetSize() const { return m_Rects.GetSize(); }
-private:
- void SetBufSize(int32_t nSize){m_nBufSize = nSize;}
- int32_t GetBufSize(){return m_nBufSize;}
+ CPDF_Rect* GetAt(int32_t nIndex) const {
+ if (nIndex < 0 || nIndex >= m_Rects.GetSize())
+ return NULL;
- void RemoveHeads();
- void RemoveTails();
+ return m_Rects.GetAt(nIndex);
+ }
-private:
- CFX_ArrayTemplate<IFX_Edit_UndoItem*> m_UndoItemStack;
+ CFX_ArrayTemplate<CPDF_Rect*> m_Rects;
+};
- int32_t m_nCurUndoPos;
- int32_t m_nBufSize;
- FX_BOOL m_bModified;
- FX_BOOL m_bVirgin;
- FX_BOOL m_bWorking;
+class CFX_Edit_Refresh {
+ public:
+ CFX_Edit_Refresh();
+ virtual ~CFX_Edit_Refresh();
+
+ void BeginRefresh();
+ void Push(const CPVT_WordRange& linerange, const CPDF_Rect& rect);
+ void NoAnalyse();
+ void Analyse(int32_t nAlignment);
+ void AddRefresh(const CPDF_Rect& rect);
+ const CFX_Edit_RectArray* GetRefreshRects() const;
+ void EndRefresh();
+
+ private:
+ CFX_Edit_LineRectArray m_NewLineRects;
+ CFX_Edit_LineRectArray m_OldLineRects;
+ CFX_Edit_RectArray m_RefreshRects;
};
-class CFX_Edit_UndoItem : public IFX_Edit_UndoItem
-{
-public:
- CFX_Edit_UndoItem() : m_bFirst(TRUE), m_bLast(TRUE) {}
+/* ------------------------- CFX_Edit_Select ---------------------------- */
- CFX_WideString GetUndoTitle() override { return L""; }
+class CFX_Edit_Select {
+ public:
+ CFX_Edit_Select() {}
- void SetFirst(FX_BOOL bFirst){m_bFirst = bFirst;}
- FX_BOOL IsFirst(){return m_bFirst;}
- void SetLast(FX_BOOL bLast){m_bLast = bLast;}
- FX_BOOL IsLast(){return m_bLast;}
+ CFX_Edit_Select(const CPVT_WordPlace& begin, const CPVT_WordPlace& end) {
+ Set(begin, end);
+ }
-private:
- FX_BOOL m_bFirst;
- FX_BOOL m_bLast;
-};
+ CFX_Edit_Select(const CPVT_WordRange& range) {
+ Set(range.BeginPos, range.EndPos);
+ }
-class CFX_Edit_GroupUndoItem : public IFX_Edit_UndoItem
-{
-public:
- CFX_Edit_GroupUndoItem(const CFX_WideString& sTitle);
- ~CFX_Edit_GroupUndoItem() override;
+ CPVT_WordRange ConvertToWordRange() const {
+ return CPVT_WordRange(BeginPos, EndPos);
+ }
- void Undo() override;
- void Redo() override;
- CFX_WideString GetUndoTitle() override;
+ void Default() {
+ BeginPos.Default();
+ EndPos.Default();
+ }
- void AddUndoItem(CFX_Edit_UndoItem* pUndoItem);
- void UpdateItems();
+ void Set(const CPVT_WordPlace& begin, const CPVT_WordPlace& end) {
+ BeginPos = begin;
+ EndPos = end;
+ }
-private:
- CFX_WideString m_sTitle;
- CFX_ArrayTemplate<CFX_Edit_UndoItem*> m_Items;
+ void SetBeginPos(const CPVT_WordPlace& begin) { BeginPos = begin; }
+
+ void SetEndPos(const CPVT_WordPlace& end) { EndPos = end; }
+
+ FX_BOOL IsExist() const { return BeginPos != EndPos; }
+
+ FX_BOOL operator!=(const CPVT_WordRange& wr) const {
+ return wr.BeginPos != BeginPos || wr.EndPos != EndPos;
+ }
+
+ CPVT_WordPlace BeginPos, EndPos;
};
-/* ------------------------- CFX_Edit_UndoItem derived classes ---------------------------- */
+/* ------------------------- CFX_Edit_Undo ---------------------------- */
-class CFXEU_InsertWord : public CFX_Edit_UndoItem
-{
-public:
- CFXEU_InsertWord(CFX_Edit * pEdit, const CPVT_WordPlace & wpOldPlace, const CPVT_WordPlace & wpNewPlace,
- FX_WORD word, int32_t charset, const CPVT_WordProps * pWordProps);
- virtual ~CFXEU_InsertWord();
+class CFX_Edit_Undo {
+ public:
+ CFX_Edit_Undo(int32_t nBufsize = 10000);
+ virtual ~CFX_Edit_Undo();
- void Redo();
- void Undo();
+ void Undo();
+ void Redo();
-private:
- CFX_Edit* m_pEdit;
+ void AddItem(IFX_Edit_UndoItem* pItem);
- CPVT_WordPlace m_wpOld;
- CPVT_WordPlace m_wpNew;
- FX_WORD m_Word;
- int32_t m_nCharset;
- CPVT_WordProps m_WordProps;
-};
+ FX_BOOL CanUndo() const;
+ FX_BOOL CanRedo() const;
+ FX_BOOL IsModified() const;
+ FX_BOOL IsWorking() const;
-class CFXEU_InsertReturn : public CFX_Edit_UndoItem
-{
-public:
- CFXEU_InsertReturn(CFX_Edit * pEdit, const CPVT_WordPlace & wpOldPlace, const CPVT_WordPlace & wpNewPlace,
- const CPVT_SecProps * pSecProps, const CPVT_WordProps * pWordProps);
- virtual ~CFXEU_InsertReturn();
+ void Reset();
- void Redo();
- void Undo();
+ IFX_Edit_UndoItem* GetItem(int32_t nIndex);
+ int32_t GetItemCount() { return m_UndoItemStack.GetSize(); }
+ int32_t GetCurUndoPos() { return m_nCurUndoPos; }
-private:
- CFX_Edit * m_pEdit;
+ private:
+ void SetBufSize(int32_t nSize) { m_nBufSize = nSize; }
+ int32_t GetBufSize() { return m_nBufSize; }
- CPVT_WordPlace m_wpOld;
- CPVT_WordPlace m_wpNew;
- CPVT_SecProps m_SecProps;
- CPVT_WordProps m_WordProps;
-};
+ void RemoveHeads();
+ void RemoveTails();
+
+ private:
+ CFX_ArrayTemplate<IFX_Edit_UndoItem*> m_UndoItemStack;
-class CFXEU_Backspace : public CFX_Edit_UndoItem
-{
-public:
- CFXEU_Backspace(CFX_Edit * pEdit, const CPVT_WordPlace & wpOldPlace, const CPVT_WordPlace & wpNewPlace,
- FX_WORD word, int32_t charset,
- const CPVT_SecProps & SecProps, const CPVT_WordProps & WordProps);
- virtual ~CFXEU_Backspace();
-
- void Redo();
- void Undo();
-
-private:
- CFX_Edit * m_pEdit;
-
- CPVT_WordPlace m_wpOld;
- CPVT_WordPlace m_wpNew;
- FX_WORD m_Word;
- int32_t m_nCharset;
- CPVT_SecProps m_SecProps;
- CPVT_WordProps m_WordProps;
+ int32_t m_nCurUndoPos;
+ int32_t m_nBufSize;
+ FX_BOOL m_bModified;
+ FX_BOOL m_bVirgin;
+ FX_BOOL m_bWorking;
};
-class CFXEU_Delete : public CFX_Edit_UndoItem
-{
-public:
- CFXEU_Delete(CFX_Edit * pEdit, const CPVT_WordPlace & wpOldPlace, const CPVT_WordPlace & wpNewPlace,
- FX_WORD word, int32_t charset,
- const CPVT_SecProps & SecProps, const CPVT_WordProps & WordProps, FX_BOOL bSecEnd);
- virtual ~CFXEU_Delete();
-
- void Redo();
- void Undo();
-
-private:
- CFX_Edit * m_pEdit;
-
- CPVT_WordPlace m_wpOld;
- CPVT_WordPlace m_wpNew;
- FX_WORD m_Word;
- int32_t m_nCharset;
- CPVT_SecProps m_SecProps;
- CPVT_WordProps m_WordProps;
- FX_BOOL m_bSecEnd;
+class CFX_Edit_UndoItem : public IFX_Edit_UndoItem {
+ public:
+ CFX_Edit_UndoItem() : m_bFirst(TRUE), m_bLast(TRUE) {}
+
+ CFX_WideString GetUndoTitle() override { return L""; }
+
+ void SetFirst(FX_BOOL bFirst) { m_bFirst = bFirst; }
+ FX_BOOL IsFirst() { return m_bFirst; }
+ void SetLast(FX_BOOL bLast) { m_bLast = bLast; }
+ FX_BOOL IsLast() { return m_bLast; }
+
+ private:
+ FX_BOOL m_bFirst;
+ FX_BOOL m_bLast;
};
-class CFXEU_Clear : public CFX_Edit_UndoItem
-{
-public:
- CFXEU_Clear(CFX_Edit * pEdit, const CPVT_WordRange & wrSel, const CFX_WideString & swText);
- virtual ~CFXEU_Clear();
+class CFX_Edit_GroupUndoItem : public IFX_Edit_UndoItem {
+ public:
+ CFX_Edit_GroupUndoItem(const CFX_WideString& sTitle);
+ ~CFX_Edit_GroupUndoItem() override;
- void Redo();
- void Undo();
+ void Undo() override;
+ void Redo() override;
+ CFX_WideString GetUndoTitle() override;
-private:
- CFX_Edit* m_pEdit;
+ void AddUndoItem(CFX_Edit_UndoItem* pUndoItem);
+ void UpdateItems();
- CPVT_WordRange m_wrSel;
- CFX_WideString m_swText;
+ private:
+ CFX_WideString m_sTitle;
+ CFX_ArrayTemplate<CFX_Edit_UndoItem*> m_Items;
};
-class CFXEU_ClearRich : public CFX_Edit_UndoItem
-{
-public:
- CFXEU_ClearRich(CFX_Edit * pEdit, const CPVT_WordPlace & wpOldPlace, const CPVT_WordPlace & wpNewPlace,
- const CPVT_WordRange & wrSel,
- FX_WORD word, int32_t charset,
- const CPVT_SecProps & SecProps, const CPVT_WordProps & WordProps);
- virtual ~CFXEU_ClearRich();
-
- void Redo();
- void Undo();
-
-private:
- CFX_Edit * m_pEdit;
-
- CPVT_WordPlace m_wpOld;
- CPVT_WordPlace m_wpNew;
- CPVT_WordRange m_wrSel;
- FX_WORD m_Word;
- int32_t m_nCharset;
- CPVT_SecProps m_SecProps;
- CPVT_WordProps m_WordProps;
+/* ------------------------- CFX_Edit_UndoItem derived classes
+ * ---------------------------- */
+
+class CFXEU_InsertWord : public CFX_Edit_UndoItem {
+ public:
+ CFXEU_InsertWord(CFX_Edit* pEdit,
+ const CPVT_WordPlace& wpOldPlace,
+ const CPVT_WordPlace& wpNewPlace,
+ FX_WORD word,
+ int32_t charset,
+ const CPVT_WordProps* pWordProps);
+ virtual ~CFXEU_InsertWord();
+
+ void Redo();
+ void Undo();
+
+ private:
+ CFX_Edit* m_pEdit;
+
+ CPVT_WordPlace m_wpOld;
+ CPVT_WordPlace m_wpNew;
+ FX_WORD m_Word;
+ int32_t m_nCharset;
+ CPVT_WordProps m_WordProps;
};
-class CFXEU_InsertText : public CFX_Edit_UndoItem
-{
-public:
- CFXEU_InsertText(CFX_Edit * pEdit, const CPVT_WordPlace & wpOldPlace, const CPVT_WordPlace & wpNewPlace,
- const CFX_WideString & swText, int32_t charset,
- const CPVT_SecProps * pSecProps, const CPVT_WordProps * pWordProps);
- virtual ~CFXEU_InsertText();
-
- void Redo();
- void Undo();
-
-private:
- CFX_Edit * m_pEdit;
-
- CPVT_WordPlace m_wpOld;
- CPVT_WordPlace m_wpNew;
- CFX_WideString m_swText;
- int32_t m_nCharset;
- CPVT_SecProps m_SecProps;
- CPVT_WordProps m_WordProps;
+class CFXEU_InsertReturn : public CFX_Edit_UndoItem {
+ public:
+ CFXEU_InsertReturn(CFX_Edit* pEdit,
+ const CPVT_WordPlace& wpOldPlace,
+ const CPVT_WordPlace& wpNewPlace,
+ const CPVT_SecProps* pSecProps,
+ const CPVT_WordProps* pWordProps);
+ virtual ~CFXEU_InsertReturn();
+
+ void Redo();
+ void Undo();
+
+ private:
+ CFX_Edit* m_pEdit;
+
+ CPVT_WordPlace m_wpOld;
+ CPVT_WordPlace m_wpNew;
+ CPVT_SecProps m_SecProps;
+ CPVT_WordProps m_WordProps;
};
-class CFXEU_SetSecProps : public CFX_Edit_UndoItem
-{
-public:
- CFXEU_SetSecProps(CFX_Edit * pEdit, const CPVT_WordPlace & place, EDIT_PROPS_E ep,
- const CPVT_SecProps & oldsecprops, const CPVT_WordProps & oldwordprops,
- const CPVT_SecProps & newsecprops, const CPVT_WordProps & newwordprops, const CPVT_WordRange & range);
- virtual ~CFXEU_SetSecProps();
-
- void Redo();
- void Undo();
-
-private:
- CFX_Edit * m_pEdit;
- CPVT_WordPlace m_wpPlace;
- CPVT_WordRange m_wrPlace;
- EDIT_PROPS_E m_eProps;
-
- CPVT_SecProps m_OldSecProps;
- CPVT_SecProps m_NewSecProps;
- CPVT_WordProps m_OldWordProps;
- CPVT_WordProps m_NewWordProps;
+class CFXEU_Backspace : public CFX_Edit_UndoItem {
+ public:
+ CFXEU_Backspace(CFX_Edit* pEdit,
+ const CPVT_WordPlace& wpOldPlace,
+ const CPVT_WordPlace& wpNewPlace,
+ FX_WORD word,
+ int32_t charset,
+ const CPVT_SecProps& SecProps,
+ const CPVT_WordProps& WordProps);
+ virtual ~CFXEU_Backspace();
+
+ void Redo();
+ void Undo();
+
+ private:
+ CFX_Edit* m_pEdit;
+
+ CPVT_WordPlace m_wpOld;
+ CPVT_WordPlace m_wpNew;
+ FX_WORD m_Word;
+ int32_t m_nCharset;
+ CPVT_SecProps m_SecProps;
+ CPVT_WordProps m_WordProps;
};
-class CFXEU_SetWordProps : public CFX_Edit_UndoItem
-{
-public:
- CFXEU_SetWordProps(CFX_Edit * pEdit, const CPVT_WordPlace & place, EDIT_PROPS_E ep,
- const CPVT_WordProps & oldprops, const CPVT_WordProps & newprops, const CPVT_WordRange & range);
- virtual ~CFXEU_SetWordProps();
+class CFXEU_Delete : public CFX_Edit_UndoItem {
+ public:
+ CFXEU_Delete(CFX_Edit* pEdit,
+ const CPVT_WordPlace& wpOldPlace,
+ const CPVT_WordPlace& wpNewPlace,
+ FX_WORD word,
+ int32_t charset,
+ const CPVT_SecProps& SecProps,
+ const CPVT_WordProps& WordProps,
+ FX_BOOL bSecEnd);
+ virtual ~CFXEU_Delete();
+
+ void Redo();
+ void Undo();
+
+ private:
+ CFX_Edit* m_pEdit;
+
+ CPVT_WordPlace m_wpOld;
+ CPVT_WordPlace m_wpNew;
+ FX_WORD m_Word;
+ int32_t m_nCharset;
+ CPVT_SecProps m_SecProps;
+ CPVT_WordProps m_WordProps;
+ FX_BOOL m_bSecEnd;
+};
+
+class CFXEU_Clear : public CFX_Edit_UndoItem {
+ public:
+ CFXEU_Clear(CFX_Edit* pEdit,
+ const CPVT_WordRange& wrSel,
+ const CFX_WideString& swText);
+ virtual ~CFXEU_Clear();
+
+ void Redo();
+ void Undo();
+
+ private:
+ CFX_Edit* m_pEdit;
+
+ CPVT_WordRange m_wrSel;
+ CFX_WideString m_swText;
+};
- void Redo();
- void Undo();
+class CFXEU_ClearRich : public CFX_Edit_UndoItem {
+ public:
+ CFXEU_ClearRich(CFX_Edit* pEdit,
+ const CPVT_WordPlace& wpOldPlace,
+ const CPVT_WordPlace& wpNewPlace,
+ const CPVT_WordRange& wrSel,
+ FX_WORD word,
+ int32_t charset,
+ const CPVT_SecProps& SecProps,
+ const CPVT_WordProps& WordProps);
+ virtual ~CFXEU_ClearRich();
+
+ void Redo();
+ void Undo();
+
+ private:
+ CFX_Edit* m_pEdit;
+
+ CPVT_WordPlace m_wpOld;
+ CPVT_WordPlace m_wpNew;
+ CPVT_WordRange m_wrSel;
+ FX_WORD m_Word;
+ int32_t m_nCharset;
+ CPVT_SecProps m_SecProps;
+ CPVT_WordProps m_WordProps;
+};
-private:
- CFX_Edit * m_pEdit;
- CPVT_WordPlace m_wpPlace;
- CPVT_WordRange m_wrPlace;
- EDIT_PROPS_E m_eProps;
+class CFXEU_InsertText : public CFX_Edit_UndoItem {
+ public:
+ CFXEU_InsertText(CFX_Edit* pEdit,
+ const CPVT_WordPlace& wpOldPlace,
+ const CPVT_WordPlace& wpNewPlace,
+ const CFX_WideString& swText,
+ int32_t charset,
+ const CPVT_SecProps* pSecProps,
+ const CPVT_WordProps* pWordProps);
+ virtual ~CFXEU_InsertText();
+
+ void Redo();
+ void Undo();
+
+ private:
+ CFX_Edit* m_pEdit;
+
+ CPVT_WordPlace m_wpOld;
+ CPVT_WordPlace m_wpNew;
+ CFX_WideString m_swText;
+ int32_t m_nCharset;
+ CPVT_SecProps m_SecProps;
+ CPVT_WordProps m_WordProps;
+};
+
+class CFXEU_SetSecProps : public CFX_Edit_UndoItem {
+ public:
+ CFXEU_SetSecProps(CFX_Edit* pEdit,
+ const CPVT_WordPlace& place,
+ EDIT_PROPS_E ep,
+ const CPVT_SecProps& oldsecprops,
+ const CPVT_WordProps& oldwordprops,
+ const CPVT_SecProps& newsecprops,
+ const CPVT_WordProps& newwordprops,
+ const CPVT_WordRange& range);
+ virtual ~CFXEU_SetSecProps();
+
+ void Redo();
+ void Undo();
+
+ private:
+ CFX_Edit* m_pEdit;
+ CPVT_WordPlace m_wpPlace;
+ CPVT_WordRange m_wrPlace;
+ EDIT_PROPS_E m_eProps;
+
+ CPVT_SecProps m_OldSecProps;
+ CPVT_SecProps m_NewSecProps;
+ CPVT_WordProps m_OldWordProps;
+ CPVT_WordProps m_NewWordProps;
+};
- CPVT_WordProps m_OldWordProps;
- CPVT_WordProps m_NewWordProps;
+class CFXEU_SetWordProps : public CFX_Edit_UndoItem {
+ public:
+ CFXEU_SetWordProps(CFX_Edit* pEdit,
+ const CPVT_WordPlace& place,
+ EDIT_PROPS_E ep,
+ const CPVT_WordProps& oldprops,
+ const CPVT_WordProps& newprops,
+ const CPVT_WordRange& range);
+ virtual ~CFXEU_SetWordProps();
+
+ void Redo();
+ void Undo();
+
+ private:
+ CFX_Edit* m_pEdit;
+ CPVT_WordPlace m_wpPlace;
+ CPVT_WordRange m_wrPlace;
+ EDIT_PROPS_E m_eProps;
+
+ CPVT_WordProps m_OldWordProps;
+ CPVT_WordProps m_NewWordProps;
};
/* ------------------------- CFX_Edit ---------------------------- */
-class CFX_Edit : public IFX_Edit
-{
- friend class CFX_Edit_Iterator;
- friend class CFXEU_InsertWord;
- friend class CFXEU_InsertReturn;
- friend class CFXEU_Backspace;
- friend class CFXEU_Delete;
- friend class CFXEU_Clear;
- friend class CFXEU_ClearRich;
- friend class CFXEU_SetSecProps;
- friend class CFXEU_SetWordProps;
- friend class CFXEU_InsertText;
-
-public:
- CFX_Edit(IPDF_VariableText * pVT);
- virtual ~CFX_Edit();
-
- void SetFontMap(IFX_Edit_FontMap * pFontMap);
- void SetVTProvider(IPDF_VariableText_Provider* pProvider);
- void SetNotify(IFX_Edit_Notify * pNotify);
- void SetOprNotify(IFX_Edit_OprNotify* pOprNotify);
- IFX_Edit_Iterator* GetIterator();
- IPDF_VariableText * GetVariableText();
- IFX_Edit_FontMap* GetFontMap();
-
- void Initialize();
- void SetPlateRect(const CPDF_Rect & rect, FX_BOOL bPaint = TRUE);
- void SetScrollPos(const CPDF_Point & point);
-
- void SetAlignmentH(int32_t nFormat = 0, FX_BOOL bPaint = TRUE);
- void SetAlignmentV(int32_t nFormat = 0, FX_BOOL bPaint = TRUE);
- void SetPasswordChar(FX_WORD wSubWord = '*', FX_BOOL bPaint = TRUE);
- void SetLimitChar(int32_t nLimitChar = 0, FX_BOOL bPaint = TRUE);
- void SetCharArray(int32_t nCharArray = 0, FX_BOOL bPaint = TRUE);
- void SetCharSpace(FX_FLOAT fCharSpace = 0.0f, FX_BOOL bPaint = TRUE);
- void SetHorzScale(int32_t nHorzScale = 100, FX_BOOL bPaint = TRUE);
- void SetLineLeading(FX_FLOAT fLineLeading, FX_BOOL bPaint = TRUE);
- void SetMultiLine(FX_BOOL bMultiLine = TRUE, FX_BOOL bPaint = TRUE);
- void SetAutoReturn(FX_BOOL bAuto = TRUE, FX_BOOL bPaint = TRUE);
- void SetAutoFontSize(FX_BOOL bAuto = TRUE, FX_BOOL bPaint = TRUE);
- void SetAutoScroll(FX_BOOL bAuto = TRUE, FX_BOOL bPaint = TRUE);
- void SetFontSize(FX_FLOAT fFontSize, FX_BOOL bPaint = TRUE);
- void SetTextOverflow(FX_BOOL bAllowed = FALSE, FX_BOOL bPaint = TRUE);
-
- FX_BOOL IsRichText() const;
- void SetRichText(FX_BOOL bRichText = TRUE, FX_BOOL bPaint = TRUE);
- FX_BOOL SetRichFontSize(FX_FLOAT fFontSize);
- FX_BOOL SetRichFontIndex(int32_t nFontIndex);
- FX_BOOL SetRichTextColor(FX_COLORREF dwColor);
- FX_BOOL SetRichTextScript(int32_t nScriptType);
- FX_BOOL SetRichTextBold(FX_BOOL bBold = TRUE);
- FX_BOOL SetRichTextItalic(FX_BOOL bItalic = TRUE);
- FX_BOOL SetRichTextUnderline(FX_BOOL bUnderline = TRUE);
- FX_BOOL SetRichTextCrossout(FX_BOOL bCrossout = TRUE);
- FX_BOOL SetRichTextCharSpace(FX_FLOAT fCharSpace);
- FX_BOOL SetRichTextHorzScale(int32_t nHorzScale = 100);
- FX_BOOL SetRichTextLineLeading(FX_FLOAT fLineLeading);
- FX_BOOL SetRichTextLineIndent(FX_FLOAT fLineIndent);
- FX_BOOL SetRichTextAlignment(int32_t nAlignment);
-
- void OnMouseDown(const CPDF_Point & point,FX_BOOL bShift,FX_BOOL bCtrl);
- void OnMouseMove(const CPDF_Point & point,FX_BOOL bShift,FX_BOOL bCtrl);
- void OnVK_UP(FX_BOOL bShift,FX_BOOL bCtrl);
- void OnVK_DOWN(FX_BOOL bShift,FX_BOOL bCtrl);
- void OnVK_LEFT(FX_BOOL bShift,FX_BOOL bCtrl);
- void OnVK_RIGHT(FX_BOOL bShift,FX_BOOL bCtrl);
- void OnVK_HOME(FX_BOOL bShift,FX_BOOL bCtrl);
- void OnVK_END(FX_BOOL bShift,FX_BOOL bCtrl);
-
- void SetText(const FX_WCHAR* text,int32_t charset = DEFAULT_CHARSET,
- const CPVT_SecProps * pSecProps = NULL,const CPVT_WordProps * pWordProps = NULL);
- FX_BOOL InsertWord(FX_WORD word, int32_t charset = DEFAULT_CHARSET, const CPVT_WordProps * pWordProps = NULL);
- FX_BOOL InsertReturn(const CPVT_SecProps * pSecProps = NULL,const CPVT_WordProps * pWordProps = NULL);
- FX_BOOL Backspace();
- FX_BOOL Delete();
- FX_BOOL Clear();
- FX_BOOL Empty();
- FX_BOOL InsertText(const FX_WCHAR* text, int32_t charset = DEFAULT_CHARSET,
- const CPVT_SecProps * pSecProps = NULL,const CPVT_WordProps * pWordProps = NULL);
- FX_BOOL Redo();
- FX_BOOL Undo();
- CPVT_WordPlace DoInsertText(const CPVT_WordPlace& place, const FX_WCHAR* text, int32_t charset,
- const CPVT_SecProps * pSecProps, const CPVT_WordProps * pWordProps);
- int32_t GetCharSetFromUnicode(FX_WORD word, int32_t nOldCharset);
-
- int32_t WordPlaceToWordIndex(const CPVT_WordPlace & place) const;
- CPVT_WordPlace WordIndexToWordPlace(int32_t index) const;
-
- CPVT_WordPlace GetLineBeginPlace(const CPVT_WordPlace & place) const;
- CPVT_WordPlace GetLineEndPlace(const CPVT_WordPlace & place) const;
- CPVT_WordPlace GetSectionBeginPlace(const CPVT_WordPlace & place) const;
- CPVT_WordPlace GetSectionEndPlace(const CPVT_WordPlace & place) const;
- CPVT_WordPlace SearchWordPlace(const CPDF_Point& point) const;
-
- int32_t GetCaret() const;
- CPVT_WordPlace GetCaretWordPlace() const;
- CFX_WideString GetSelText() const;
- CFX_WideString GetText() const;
- FX_FLOAT GetFontSize() const;
- FX_WORD GetPasswordChar() const;
- CPDF_Point GetScrollPos() const;
- int32_t GetCharArray() const;
- CPDF_Rect GetPlateRect() const;
- CPDF_Rect GetContentRect() const;
- CFX_WideString GetRangeText(const CPVT_WordRange & range) const;
- int32_t GetHorzScale() const;
- FX_FLOAT GetCharSpace() const;
- int32_t GetTotalWords() const;
- int32_t GetTotalLines() const;
-
- void SetSel(int32_t nStartChar,int32_t nEndChar);
- void GetSel(int32_t & nStartChar, int32_t & nEndChar) const;
-
-private:
- void SelectAll();
- void SelectNone();
- void SetSel(const CPVT_WordPlace & begin,const CPVT_WordPlace & end);
- FX_BOOL IsSelected() const;
-
- void RearrangeAll();
- void RearrangePart(const CPVT_WordRange & range);
- void Paint();
- void ScrollToCaret();
- void SetScrollInfo();
- void SetScrollPosX(FX_FLOAT fx);
- void SetScrollPosY(FX_FLOAT fy);
- void SetScrollLimit();
- void SetContentChanged();
- void EnableNotify(FX_BOOL bNotify);
-
- void SetText(const FX_WCHAR* text,int32_t charset,
- const CPVT_SecProps * pSecProps,const CPVT_WordProps * pWordProps,FX_BOOL bAddUndo, FX_BOOL bPaint);
- FX_BOOL InsertWord(FX_WORD word, int32_t charset, const CPVT_WordProps * pWordProps,FX_BOOL bAddUndo, FX_BOOL bPaint);
- FX_BOOL InsertReturn(const CPVT_SecProps * pSecProps,const CPVT_WordProps * pWordProps,FX_BOOL bAddUndo, FX_BOOL bPaint);
- FX_BOOL Backspace(FX_BOOL bAddUndo, FX_BOOL bPaint);
- FX_BOOL Delete(FX_BOOL bAddUndo, FX_BOOL bPaint);
- FX_BOOL Clear(FX_BOOL bAddUndo, FX_BOOL bPaint);
- FX_BOOL InsertText(const FX_WCHAR* text, int32_t charset,
- const CPVT_SecProps * pSecProps,const CPVT_WordProps * pWordProps,FX_BOOL bAddUndo, FX_BOOL bPaint);
- FX_BOOL SetRichTextProps(EDIT_PROPS_E eProps,
- const CPVT_SecProps * pSecProps, const CPVT_WordProps * pWordProps);
- FX_BOOL SetSecProps(EDIT_PROPS_E eProps, const CPVT_WordPlace & place,
- const CPVT_SecProps * pSecProps, const CPVT_WordProps * pWordProps, const CPVT_WordRange & wr, FX_BOOL bAddUndo);
- FX_BOOL SetWordProps(EDIT_PROPS_E eProps, const CPVT_WordPlace & place,
- const CPVT_WordProps * pWordProps, const CPVT_WordRange & wr, FX_BOOL bAddUndo);
- void PaintSetProps(EDIT_PROPS_E eProps, const CPVT_WordRange & wr);
- void PaintInsertText(const CPVT_WordPlace & wpOld, const CPVT_WordPlace & wpNew);
-
- inline CPDF_Point VTToEdit(const CPDF_Point & point) const;
- inline CPDF_Point EditToVT(const CPDF_Point & point) const;
- inline CPDF_Rect VTToEdit(const CPDF_Rect & rect) const;
- inline CPDF_Rect EditToVT(const CPDF_Rect & rect) const;
-
- void EnableRefresh(FX_BOOL bRefresh);
- void Refresh(REFRESH_PLAN_E ePlan,const CPVT_WordRange * pRange1 = NULL,const CPVT_WordRange * pRange2 = NULL);
- void RefreshPushLineRects(const CPVT_WordRange & wr);
- void RefreshPushRandomRects(const CPVT_WordRange & wr);
- void RefreshWordRange(const CPVT_WordRange& wr);
-
- void SetCaret(int32_t nPos);
- void SetCaret(const CPVT_WordPlace & place);
- void SetCaretInfo();
- void SetCaretOrigin();
- void SetCaretChange();
-
- CPVT_WordRange GetWholeWordRange() const;
- CPVT_WordRange GetVisibleWordRange() const;
- CPVT_WordRange GetLatinWordsRange(const CPVT_WordPlace & place) const;
- CPVT_WordRange CombineWordRange(const CPVT_WordRange & wr1, const CPVT_WordRange & wr2);
- CPVT_WordRange GetSelectWordRange() const;
-
- void EnableUndo(FX_BOOL bUndo);
- void EnableOprNotify(FX_BOOL bNotify);
-
- FX_BOOL IsTextFull() const;
- FX_BOOL IsTextOverflow() const;
- FX_BOOL CanUndo() const;
- FX_BOOL CanRedo() const;
- FX_BOOL IsModified() const;
-
- void BeginGroupUndo(const CFX_WideString& sTitle);
- void EndGroupUndo();
- void AddEditUndoItem(CFX_Edit_UndoItem* pEditUndoItem);
- void AddUndoItem(IFX_Edit_UndoItem* pUndoItem);
-
- void SetPageInfo(const CPVT_WordPlace& place);
- CPVT_WordPlace SearchPageEndPlace(const CPVT_WordPlace& wpPageBegin, const CPDF_Point& point) const;
- FX_FLOAT GetLineTop(const CPVT_WordPlace& place) const;
- FX_FLOAT GetLineBottom(const CPVT_WordPlace& place) const;
-
-private:
- IPDF_VariableText* m_pVT;
- IFX_Edit_Notify* m_pNotify;
- IFX_Edit_OprNotify* m_pOprNotify;
- CFX_Edit_Provider* m_pVTProvide;
-
- CPVT_WordPlace m_wpCaret;
- CPVT_WordPlace m_wpOldCaret;
- CFX_Edit_Select m_SelState;
-
- CPDF_Point m_ptScrollPos;
- CPDF_Point m_ptRefreshScrollPos;
- FX_BOOL m_bEnableScroll;
- IFX_Edit_Iterator * m_pIterator;
- CFX_Edit_Refresh m_Refresh;
- CPDF_Point m_ptCaret;
- CFX_Edit_Undo m_Undo;
- int32_t m_nAlignment;
- FX_BOOL m_bNotifyFlag;
- FX_BOOL m_bEnableOverflow;
- FX_BOOL m_bEnableRefresh;
- CPDF_Rect m_rcOldContent;
- FX_BOOL m_bEnableUndo;
- FX_BOOL m_bNotify;
- FX_BOOL m_bOprNotify;
- CFX_Edit_GroupUndoItem* m_pGroupUndoItem;
+class CFX_Edit : public IFX_Edit {
+ friend class CFX_Edit_Iterator;
+ friend class CFXEU_InsertWord;
+ friend class CFXEU_InsertReturn;
+ friend class CFXEU_Backspace;
+ friend class CFXEU_Delete;
+ friend class CFXEU_Clear;
+ friend class CFXEU_ClearRich;
+ friend class CFXEU_SetSecProps;
+ friend class CFXEU_SetWordProps;
+ friend class CFXEU_InsertText;
+
+ public:
+ CFX_Edit(IPDF_VariableText* pVT);
+ virtual ~CFX_Edit();
+
+ void SetFontMap(IFX_Edit_FontMap* pFontMap);
+ void SetVTProvider(IPDF_VariableText_Provider* pProvider);
+ void SetNotify(IFX_Edit_Notify* pNotify);
+ void SetOprNotify(IFX_Edit_OprNotify* pOprNotify);
+ IFX_Edit_Iterator* GetIterator();
+ IPDF_VariableText* GetVariableText();
+ IFX_Edit_FontMap* GetFontMap();
+
+ void Initialize();
+ void SetPlateRect(const CPDF_Rect& rect, FX_BOOL bPaint = TRUE);
+ void SetScrollPos(const CPDF_Point& point);
+
+ void SetAlignmentH(int32_t nFormat = 0, FX_BOOL bPaint = TRUE);
+ void SetAlignmentV(int32_t nFormat = 0, FX_BOOL bPaint = TRUE);
+ void SetPasswordChar(FX_WORD wSubWord = '*', FX_BOOL bPaint = TRUE);
+ void SetLimitChar(int32_t nLimitChar = 0, FX_BOOL bPaint = TRUE);
+ void SetCharArray(int32_t nCharArray = 0, FX_BOOL bPaint = TRUE);
+ void SetCharSpace(FX_FLOAT fCharSpace = 0.0f, FX_BOOL bPaint = TRUE);
+ void SetHorzScale(int32_t nHorzScale = 100, FX_BOOL bPaint = TRUE);
+ void SetLineLeading(FX_FLOAT fLineLeading, FX_BOOL bPaint = TRUE);
+ void SetMultiLine(FX_BOOL bMultiLine = TRUE, FX_BOOL bPaint = TRUE);
+ void SetAutoReturn(FX_BOOL bAuto = TRUE, FX_BOOL bPaint = TRUE);
+ void SetAutoFontSize(FX_BOOL bAuto = TRUE, FX_BOOL bPaint = TRUE);
+ void SetAutoScroll(FX_BOOL bAuto = TRUE, FX_BOOL bPaint = TRUE);
+ void SetFontSize(FX_FLOAT fFontSize, FX_BOOL bPaint = TRUE);
+ void SetTextOverflow(FX_BOOL bAllowed = FALSE, FX_BOOL bPaint = TRUE);
+
+ FX_BOOL IsRichText() const;
+ void SetRichText(FX_BOOL bRichText = TRUE, FX_BOOL bPaint = TRUE);
+ FX_BOOL SetRichFontSize(FX_FLOAT fFontSize);
+ FX_BOOL SetRichFontIndex(int32_t nFontIndex);
+ FX_BOOL SetRichTextColor(FX_COLORREF dwColor);
+ FX_BOOL SetRichTextScript(int32_t nScriptType);
+ FX_BOOL SetRichTextBold(FX_BOOL bBold = TRUE);
+ FX_BOOL SetRichTextItalic(FX_BOOL bItalic = TRUE);
+ FX_BOOL SetRichTextUnderline(FX_BOOL bUnderline = TRUE);
+ FX_BOOL SetRichTextCrossout(FX_BOOL bCrossout = TRUE);
+ FX_BOOL SetRichTextCharSpace(FX_FLOAT fCharSpace);
+ FX_BOOL SetRichTextHorzScale(int32_t nHorzScale = 100);
+ FX_BOOL SetRichTextLineLeading(FX_FLOAT fLineLeading);
+ FX_BOOL SetRichTextLineIndent(FX_FLOAT fLineIndent);
+ FX_BOOL SetRichTextAlignment(int32_t nAlignment);
+
+ void OnMouseDown(const CPDF_Point& point, FX_BOOL bShift, FX_BOOL bCtrl);
+ void OnMouseMove(const CPDF_Point& point, FX_BOOL bShift, FX_BOOL bCtrl);
+ void OnVK_UP(FX_BOOL bShift, FX_BOOL bCtrl);
+ void OnVK_DOWN(FX_BOOL bShift, FX_BOOL bCtrl);
+ void OnVK_LEFT(FX_BOOL bShift, FX_BOOL bCtrl);
+ void OnVK_RIGHT(FX_BOOL bShift, FX_BOOL bCtrl);
+ void OnVK_HOME(FX_BOOL bShift, FX_BOOL bCtrl);
+ void OnVK_END(FX_BOOL bShift, FX_BOOL bCtrl);
+
+ void SetText(const FX_WCHAR* text,
+ int32_t charset = DEFAULT_CHARSET,
+ const CPVT_SecProps* pSecProps = NULL,
+ const CPVT_WordProps* pWordProps = NULL);
+ FX_BOOL InsertWord(FX_WORD word,
+ int32_t charset = DEFAULT_CHARSET,
+ const CPVT_WordProps* pWordProps = NULL);
+ FX_BOOL InsertReturn(const CPVT_SecProps* pSecProps = NULL,
+ const CPVT_WordProps* pWordProps = NULL);
+ FX_BOOL Backspace();
+ FX_BOOL Delete();
+ FX_BOOL Clear();
+ FX_BOOL Empty();
+ FX_BOOL InsertText(const FX_WCHAR* text,
+ int32_t charset = DEFAULT_CHARSET,
+ const CPVT_SecProps* pSecProps = NULL,
+ const CPVT_WordProps* pWordProps = NULL);
+ FX_BOOL Redo();
+ FX_BOOL Undo();
+ CPVT_WordPlace DoInsertText(const CPVT_WordPlace& place,
+ const FX_WCHAR* text,
+ int32_t charset,
+ const CPVT_SecProps* pSecProps,
+ const CPVT_WordProps* pWordProps);
+ int32_t GetCharSetFromUnicode(FX_WORD word, int32_t nOldCharset);
+
+ int32_t WordPlaceToWordIndex(const CPVT_WordPlace& place) const;
+ CPVT_WordPlace WordIndexToWordPlace(int32_t index) const;
+
+ CPVT_WordPlace GetLineBeginPlace(const CPVT_WordPlace& place) const;
+ CPVT_WordPlace GetLineEndPlace(const CPVT_WordPlace& place) const;
+ CPVT_WordPlace GetSectionBeginPlace(const CPVT_WordPlace& place) const;
+ CPVT_WordPlace GetSectionEndPlace(const CPVT_WordPlace& place) const;
+ CPVT_WordPlace SearchWordPlace(const CPDF_Point& point) const;
+
+ int32_t GetCaret() const;
+ CPVT_WordPlace GetCaretWordPlace() const;
+ CFX_WideString GetSelText() const;
+ CFX_WideString GetText() const;
+ FX_FLOAT GetFontSize() const;
+ FX_WORD GetPasswordChar() const;
+ CPDF_Point GetScrollPos() const;
+ int32_t GetCharArray() const;
+ CPDF_Rect GetPlateRect() const;
+ CPDF_Rect GetContentRect() const;
+ CFX_WideString GetRangeText(const CPVT_WordRange& range) const;
+ int32_t GetHorzScale() const;
+ FX_FLOAT GetCharSpace() const;
+ int32_t GetTotalWords() const;
+ int32_t GetTotalLines() const;
+
+ void SetSel(int32_t nStartChar, int32_t nEndChar);
+ void GetSel(int32_t& nStartChar, int32_t& nEndChar) const;
+
+ private:
+ void SelectAll();
+ void SelectNone();
+ void SetSel(const CPVT_WordPlace& begin, const CPVT_WordPlace& end);
+ FX_BOOL IsSelected() const;
+
+ void RearrangeAll();
+ void RearrangePart(const CPVT_WordRange& range);
+ void Paint();
+ void ScrollToCaret();
+ void SetScrollInfo();
+ void SetScrollPosX(FX_FLOAT fx);
+ void SetScrollPosY(FX_FLOAT fy);
+ void SetScrollLimit();
+ void SetContentChanged();
+ void EnableNotify(FX_BOOL bNotify);
+
+ void SetText(const FX_WCHAR* text,
+ int32_t charset,
+ const CPVT_SecProps* pSecProps,
+ const CPVT_WordProps* pWordProps,
+ FX_BOOL bAddUndo,
+ FX_BOOL bPaint);
+ FX_BOOL InsertWord(FX_WORD word,
+ int32_t charset,
+ const CPVT_WordProps* pWordProps,
+ FX_BOOL bAddUndo,
+ FX_BOOL bPaint);
+ FX_BOOL InsertReturn(const CPVT_SecProps* pSecProps,
+ const CPVT_WordProps* pWordProps,
+ FX_BOOL bAddUndo,
+ FX_BOOL bPaint);
+ FX_BOOL Backspace(FX_BOOL bAddUndo, FX_BOOL bPaint);
+ FX_BOOL Delete(FX_BOOL bAddUndo, FX_BOOL bPaint);
+ FX_BOOL Clear(FX_BOOL bAddUndo, FX_BOOL bPaint);
+ FX_BOOL InsertText(const FX_WCHAR* text,
+ int32_t charset,
+ const CPVT_SecProps* pSecProps,
+ const CPVT_WordProps* pWordProps,
+ FX_BOOL bAddUndo,
+ FX_BOOL bPaint);
+ FX_BOOL SetRichTextProps(EDIT_PROPS_E eProps,
+ const CPVT_SecProps* pSecProps,
+ const CPVT_WordProps* pWordProps);
+ FX_BOOL SetSecProps(EDIT_PROPS_E eProps,
+ const CPVT_WordPlace& place,
+ const CPVT_SecProps* pSecProps,
+ const CPVT_WordProps* pWordProps,
+ const CPVT_WordRange& wr,
+ FX_BOOL bAddUndo);
+ FX_BOOL SetWordProps(EDIT_PROPS_E eProps,
+ const CPVT_WordPlace& place,
+ const CPVT_WordProps* pWordProps,
+ const CPVT_WordRange& wr,
+ FX_BOOL bAddUndo);
+ void PaintSetProps(EDIT_PROPS_E eProps, const CPVT_WordRange& wr);
+ void PaintInsertText(const CPVT_WordPlace& wpOld,
+ const CPVT_WordPlace& wpNew);
+
+ inline CPDF_Point VTToEdit(const CPDF_Point& point) const;
+ inline CPDF_Point EditToVT(const CPDF_Point& point) const;
+ inline CPDF_Rect VTToEdit(const CPDF_Rect& rect) const;
+ inline CPDF_Rect EditToVT(const CPDF_Rect& rect) const;
+
+ void EnableRefresh(FX_BOOL bRefresh);
+ void Refresh(REFRESH_PLAN_E ePlan,
+ const CPVT_WordRange* pRange1 = NULL,
+ const CPVT_WordRange* pRange2 = NULL);
+ void RefreshPushLineRects(const CPVT_WordRange& wr);
+ void RefreshPushRandomRects(const CPVT_WordRange& wr);
+ void RefreshWordRange(const CPVT_WordRange& wr);
+
+ void SetCaret(int32_t nPos);
+ void SetCaret(const CPVT_WordPlace& place);
+ void SetCaretInfo();
+ void SetCaretOrigin();
+ void SetCaretChange();
+
+ CPVT_WordRange GetWholeWordRange() const;
+ CPVT_WordRange GetVisibleWordRange() const;
+ CPVT_WordRange GetLatinWordsRange(const CPVT_WordPlace& place) const;
+ CPVT_WordRange CombineWordRange(const CPVT_WordRange& wr1,
+ const CPVT_WordRange& wr2);
+ CPVT_WordRange GetSelectWordRange() const;
+
+ void EnableUndo(FX_BOOL bUndo);
+ void EnableOprNotify(FX_BOOL bNotify);
+
+ FX_BOOL IsTextFull() const;
+ FX_BOOL IsTextOverflow() const;
+ FX_BOOL CanUndo() const;
+ FX_BOOL CanRedo() const;
+ FX_BOOL IsModified() const;
+
+ void BeginGroupUndo(const CFX_WideString& sTitle);
+ void EndGroupUndo();
+ void AddEditUndoItem(CFX_Edit_UndoItem* pEditUndoItem);
+ void AddUndoItem(IFX_Edit_UndoItem* pUndoItem);
+
+ void SetPageInfo(const CPVT_WordPlace& place);
+ CPVT_WordPlace SearchPageEndPlace(const CPVT_WordPlace& wpPageBegin,
+ const CPDF_Point& point) const;
+ FX_FLOAT GetLineTop(const CPVT_WordPlace& place) const;
+ FX_FLOAT GetLineBottom(const CPVT_WordPlace& place) const;
+
+ private:
+ IPDF_VariableText* m_pVT;
+ IFX_Edit_Notify* m_pNotify;
+ IFX_Edit_OprNotify* m_pOprNotify;
+ CFX_Edit_Provider* m_pVTProvide;
+
+ CPVT_WordPlace m_wpCaret;
+ CPVT_WordPlace m_wpOldCaret;
+ CFX_Edit_Select m_SelState;
+
+ CPDF_Point m_ptScrollPos;
+ CPDF_Point m_ptRefreshScrollPos;
+ FX_BOOL m_bEnableScroll;
+ IFX_Edit_Iterator* m_pIterator;
+ CFX_Edit_Refresh m_Refresh;
+ CPDF_Point m_ptCaret;
+ CFX_Edit_Undo m_Undo;
+ int32_t m_nAlignment;
+ FX_BOOL m_bNotifyFlag;
+ FX_BOOL m_bEnableOverflow;
+ FX_BOOL m_bEnableRefresh;
+ CPDF_Rect m_rcOldContent;
+ FX_BOOL m_bEnableUndo;
+ FX_BOOL m_bNotify;
+ FX_BOOL m_bOprNotify;
+ CFX_Edit_GroupUndoItem* m_pGroupUndoItem;
};
/* ------------------------- CFX_Edit_Iterator ---------------------------- */
-class CFX_Edit_Iterator : public IFX_Edit_Iterator
-{
-public:
- CFX_Edit_Iterator(CFX_Edit * pEdit,IPDF_VariableText_Iterator * pVTIterator);
- virtual ~CFX_Edit_Iterator();
-
- FX_BOOL NextWord();
- FX_BOOL NextLine();
- FX_BOOL NextSection();
- FX_BOOL PrevWord();
- FX_BOOL PrevLine();
- FX_BOOL PrevSection();
-
- FX_BOOL GetWord(CPVT_Word & word) const;
- FX_BOOL GetLine(CPVT_Line & line) const;
- FX_BOOL GetSection(CPVT_Section & section) const;
- void SetAt(int32_t nWordIndex);
- void SetAt(const CPVT_WordPlace & place);
- const CPVT_WordPlace & GetAt() const;
- IFX_Edit* GetEdit() const;
-
-private:
- CFX_Edit * m_pEdit;
- IPDF_VariableText_Iterator* m_pVTIterator;
+class CFX_Edit_Iterator : public IFX_Edit_Iterator {
+ public:
+ CFX_Edit_Iterator(CFX_Edit* pEdit, IPDF_VariableText_Iterator* pVTIterator);
+ virtual ~CFX_Edit_Iterator();
+
+ FX_BOOL NextWord();
+ FX_BOOL NextLine();
+ FX_BOOL NextSection();
+ FX_BOOL PrevWord();
+ FX_BOOL PrevLine();
+ FX_BOOL PrevSection();
+
+ FX_BOOL GetWord(CPVT_Word& word) const;
+ FX_BOOL GetLine(CPVT_Line& line) const;
+ FX_BOOL GetSection(CPVT_Section& section) const;
+ void SetAt(int32_t nWordIndex);
+ void SetAt(const CPVT_WordPlace& place);
+ const CPVT_WordPlace& GetAt() const;
+ IFX_Edit* GetEdit() const;
+
+ private:
+ CFX_Edit* m_pEdit;
+ IPDF_VariableText_Iterator* m_pVTIterator;
};
-class CFX_Edit_Provider : public IPDF_VariableText_Provider
-{
-public:
- CFX_Edit_Provider(IFX_Edit_FontMap* pFontMap);
- virtual ~CFX_Edit_Provider();
+class CFX_Edit_Provider : public IPDF_VariableText_Provider {
+ public:
+ CFX_Edit_Provider(IFX_Edit_FontMap* pFontMap);
+ virtual ~CFX_Edit_Provider();
- IFX_Edit_FontMap* GetFontMap();
+ IFX_Edit_FontMap* GetFontMap();
- int32_t GetCharWidth(int32_t nFontIndex, FX_WORD word, int32_t nWordStyle);
- int32_t GetTypeAscent(int32_t nFontIndex);
- int32_t GetTypeDescent(int32_t nFontIndex);
- int32_t GetWordFontIndex(FX_WORD word, int32_t charset, int32_t nFontIndex);
- int32_t GetDefaultFontIndex();
- FX_BOOL IsLatinWord(FX_WORD word);
+ int32_t GetCharWidth(int32_t nFontIndex, FX_WORD word, int32_t nWordStyle);
+ int32_t GetTypeAscent(int32_t nFontIndex);
+ int32_t GetTypeDescent(int32_t nFontIndex);
+ int32_t GetWordFontIndex(FX_WORD word, int32_t charset, int32_t nFontIndex);
+ int32_t GetDefaultFontIndex();
+ FX_BOOL IsLatinWord(FX_WORD word);
-private:
- IFX_Edit_FontMap* m_pFontMap;
+ private:
+ IFX_Edit_FontMap* m_pFontMap;
};
#endif // FPDFSDK_INCLUDE_FXEDIT_FXET_EDIT_H_
diff --git a/fpdfsdk/include/fxedit/fxet_list.h b/fpdfsdk/include/fxedit/fxet_list.h
index fe75b0fc35..4aa35684cf 100644
--- a/fpdfsdk/include/fxedit/fxet_list.h
+++ b/fpdfsdk/include/fxedit/fxet_list.h
@@ -12,353 +12,337 @@
class IFX_Edit;
-class CLST_Size
-{
-public:
- CLST_Size() : x(0.0f), y(0.0f)
- {
- }
-
- CLST_Size(FX_FLOAT other_x, FX_FLOAT other_y)
- {
- x = other_x;
- y = other_y;
- }
-
- void Default()
- {
- x = 0.0f;
- y = 0.0f;
- }
-
- FX_BOOL operator != (const CLST_Size & size) const
- {
- return FXSYS_memcmp(this, &size, sizeof(CLST_Size)) != 0;
- }
-
- FX_FLOAT x,y;
+class CLST_Size {
+ public:
+ CLST_Size() : x(0.0f), y(0.0f) {}
+
+ CLST_Size(FX_FLOAT other_x, FX_FLOAT other_y) {
+ x = other_x;
+ y = other_y;
+ }
+
+ void Default() {
+ x = 0.0f;
+ y = 0.0f;
+ }
+
+ FX_BOOL operator!=(const CLST_Size& size) const {
+ return FXSYS_memcmp(this, &size, sizeof(CLST_Size)) != 0;
+ }
+
+ FX_FLOAT x, y;
};
-class CLST_Rect : public CPDF_Rect
-{
-public:
- CLST_Rect()
- {
- left = top = right = bottom = 0.0f;
- }
-
- CLST_Rect(FX_FLOAT other_left,
- FX_FLOAT other_top,
- FX_FLOAT other_right,
- FX_FLOAT other_bottom)
- {
- left = other_left;
- top = other_top;
- right = other_right;
- bottom = other_bottom;
- }
-
- CLST_Rect(const CPDF_Rect & rect)
- {
- left = rect.left;
- top = rect.top;
- right = rect.right;
- bottom = rect.bottom;
- }
-
- void Default()
- {
- left = top = right = bottom = 0.0f;
- }
-
- const CLST_Rect operator = (const CPDF_Rect & rect)
- {
- left = rect.left;
- top = rect.top;
- right = rect.right;
- bottom = rect.bottom;
-
- return *this;
- }
-
- FX_BOOL operator == (const CLST_Rect & rect) const
- {
- return FXSYS_memcmp(this, &rect, sizeof(CLST_Rect)) == 0;
- }
-
- FX_BOOL operator != (const CLST_Rect & rect) const
- {
- return FXSYS_memcmp(this, &rect, sizeof(CLST_Rect)) != 0;
- }
-
- FX_FLOAT Width() const
- {
- return right - left;
- }
-
- FX_FLOAT Height() const
- {
- if (top > bottom)
- return top - bottom;
- return bottom - top;
- }
-
- CPDF_Point LeftTop() const
- {
- return CPDF_Point(left,top);
- }
-
- CPDF_Point RightBottom() const
- {
- return CPDF_Point(right,bottom);
- }
-
- const CLST_Rect operator += (const CPDF_Point & point)
- {
- left += point.x;
- right += point.x;
- top += point.y;
- bottom += point.y;
-
- return *this;
- }
-
- const CLST_Rect operator -= (const CPDF_Point & point)
- {
- left -= point.x;
- right -= point.x;
- top -= point.y;
- bottom -= point.y;
-
- return *this;
- }
-
- CLST_Rect operator + (const CPDF_Point & point) const
- {
- return CLST_Rect(left + point.x,
- top + point.y,
- right + point.x,
- bottom + point.y);
- }
-
- CLST_Rect operator - (const CPDF_Point & point) const
- {
- return CLST_Rect(left - point.x,
- top - point.y,
- right - point.x,
- bottom - point.y);
- }
+class CLST_Rect : public CPDF_Rect {
+ public:
+ CLST_Rect() { left = top = right = bottom = 0.0f; }
+
+ CLST_Rect(FX_FLOAT other_left,
+ FX_FLOAT other_top,
+ FX_FLOAT other_right,
+ FX_FLOAT other_bottom) {
+ left = other_left;
+ top = other_top;
+ right = other_right;
+ bottom = other_bottom;
+ }
+
+ CLST_Rect(const CPDF_Rect& rect) {
+ left = rect.left;
+ top = rect.top;
+ right = rect.right;
+ bottom = rect.bottom;
+ }
+
+ void Default() { left = top = right = bottom = 0.0f; }
+
+ const CLST_Rect operator=(const CPDF_Rect& rect) {
+ left = rect.left;
+ top = rect.top;
+ right = rect.right;
+ bottom = rect.bottom;
+
+ return *this;
+ }
+
+ FX_BOOL operator==(const CLST_Rect& rect) const {
+ return FXSYS_memcmp(this, &rect, sizeof(CLST_Rect)) == 0;
+ }
+
+ FX_BOOL operator!=(const CLST_Rect& rect) const {
+ return FXSYS_memcmp(this, &rect, sizeof(CLST_Rect)) != 0;
+ }
+
+ FX_FLOAT Width() const { return right - left; }
+
+ FX_FLOAT Height() const {
+ if (top > bottom)
+ return top - bottom;
+ return bottom - top;
+ }
+
+ CPDF_Point LeftTop() const { return CPDF_Point(left, top); }
+
+ CPDF_Point RightBottom() const { return CPDF_Point(right, bottom); }
+
+ const CLST_Rect operator+=(const CPDF_Point& point) {
+ left += point.x;
+ right += point.x;
+ top += point.y;
+ bottom += point.y;
+
+ return *this;
+ }
+
+ const CLST_Rect operator-=(const CPDF_Point& point) {
+ left -= point.x;
+ right -= point.x;
+ top -= point.y;
+ bottom -= point.y;
+
+ return *this;
+ }
+
+ CLST_Rect operator+(const CPDF_Point& point) const {
+ return CLST_Rect(left + point.x, top + point.y, right + point.x,
+ bottom + point.y);
+ }
+
+ CLST_Rect operator-(const CPDF_Point& point) const {
+ return CLST_Rect(left - point.x, top - point.y, right - point.x,
+ bottom - point.y);
+ }
};
-class CFX_ListItem
-{
-public:
- CFX_ListItem();
- virtual ~CFX_ListItem();
-
- void SetFontMap(IFX_Edit_FontMap * pFontMap);
- IFX_Edit_Iterator* GetIterator() const;
- IFX_Edit* GetEdit() const;
-
-public:
- void SetRect(const CLST_Rect & rect);
- void SetSelect(FX_BOOL bSelected);
- void SetCaret(FX_BOOL bCaret);
- void SetText(const FX_WCHAR* text);
- void SetFontSize(FX_FLOAT fFontSize);
- CFX_WideString GetText() const;
-
- CLST_Rect GetRect() const;
- FX_BOOL IsSelected() const;
- FX_BOOL IsCaret() const;
- FX_FLOAT GetItemHeight() const;
- FX_WORD GetFirstChar() const;
-
-private:
- IFX_Edit* m_pEdit;
- FX_BOOL m_bSelected;
- FX_BOOL m_bCaret;
- CLST_Rect m_rcListItem;
+class CFX_ListItem {
+ public:
+ CFX_ListItem();
+ virtual ~CFX_ListItem();
+
+ void SetFontMap(IFX_Edit_FontMap* pFontMap);
+ IFX_Edit_Iterator* GetIterator() const;
+ IFX_Edit* GetEdit() const;
+
+ public:
+ void SetRect(const CLST_Rect& rect);
+ void SetSelect(FX_BOOL bSelected);
+ void SetCaret(FX_BOOL bCaret);
+ void SetText(const FX_WCHAR* text);
+ void SetFontSize(FX_FLOAT fFontSize);
+ CFX_WideString GetText() const;
+
+ CLST_Rect GetRect() const;
+ FX_BOOL IsSelected() const;
+ FX_BOOL IsCaret() const;
+ FX_FLOAT GetItemHeight() const;
+ FX_WORD GetFirstChar() const;
+
+ private:
+ IFX_Edit* m_pEdit;
+ FX_BOOL m_bSelected;
+ FX_BOOL m_bCaret;
+ CLST_Rect m_rcListItem;
};
-class CFX_ListContainer
-{
-public:
- CFX_ListContainer() : m_rcPlate(0.0f,0.0f,0.0f,0.0f), m_rcContent(0.0f,0.0f,0.0f,0.0f){}
- virtual ~CFX_ListContainer(){}
- virtual void SetPlateRect(const CPDF_Rect & rect){m_rcPlate = rect;}
- CPDF_Rect GetPlateRect() const{return m_rcPlate;}
- void SetContentRect(const CLST_Rect & rect){m_rcContent = rect;}
- CLST_Rect GetContentRect() const{return m_rcContent;}
- CPDF_Point GetBTPoint() const{return CPDF_Point(m_rcPlate.left,m_rcPlate.top);}
- CPDF_Point GetETPoint() const{return CPDF_Point(m_rcPlate.right,m_rcPlate.bottom);}
-public:
- CPDF_Point InnerToOuter(const CPDF_Point & point) const{return CPDF_Point(point.x + GetBTPoint().x,GetBTPoint().y - point.y);}
- CPDF_Point OuterToInner(const CPDF_Point & point) const{return CPDF_Point(point.x - GetBTPoint().x,GetBTPoint().y - point.y);}
- CPDF_Rect InnerToOuter(const CLST_Rect & rect) const{CPDF_Point ptLeftTop = InnerToOuter(CPDF_Point(rect.left,rect.top));
- CPDF_Point ptRightBottom = InnerToOuter(CPDF_Point(rect.right,rect.bottom));
- return CPDF_Rect(ptLeftTop.x,ptRightBottom.y,ptRightBottom.x,ptLeftTop.y);}
- CLST_Rect OuterToInner(const CPDF_Rect & rect) const{CPDF_Point ptLeftTop = OuterToInner(CPDF_Point(rect.left,rect.top));
- CPDF_Point ptRightBottom = OuterToInner(CPDF_Point(rect.right,rect.bottom));
- return CLST_Rect(ptLeftTop.x,ptLeftTop.y,ptRightBottom.x,ptRightBottom.y);}
-private:
- CPDF_Rect m_rcPlate;
- CLST_Rect m_rcContent; //positive forever!
+class CFX_ListContainer {
+ public:
+ CFX_ListContainer()
+ : m_rcPlate(0.0f, 0.0f, 0.0f, 0.0f),
+ m_rcContent(0.0f, 0.0f, 0.0f, 0.0f) {}
+ virtual ~CFX_ListContainer() {}
+ virtual void SetPlateRect(const CPDF_Rect& rect) { m_rcPlate = rect; }
+ CPDF_Rect GetPlateRect() const { return m_rcPlate; }
+ void SetContentRect(const CLST_Rect& rect) { m_rcContent = rect; }
+ CLST_Rect GetContentRect() const { return m_rcContent; }
+ CPDF_Point GetBTPoint() const {
+ return CPDF_Point(m_rcPlate.left, m_rcPlate.top);
+ }
+ CPDF_Point GetETPoint() const {
+ return CPDF_Point(m_rcPlate.right, m_rcPlate.bottom);
+ }
+
+ public:
+ CPDF_Point InnerToOuter(const CPDF_Point& point) const {
+ return CPDF_Point(point.x + GetBTPoint().x, GetBTPoint().y - point.y);
+ }
+ CPDF_Point OuterToInner(const CPDF_Point& point) const {
+ return CPDF_Point(point.x - GetBTPoint().x, GetBTPoint().y - point.y);
+ }
+ CPDF_Rect InnerToOuter(const CLST_Rect& rect) const {
+ CPDF_Point ptLeftTop = InnerToOuter(CPDF_Point(rect.left, rect.top));
+ CPDF_Point ptRightBottom =
+ InnerToOuter(CPDF_Point(rect.right, rect.bottom));
+ return CPDF_Rect(ptLeftTop.x, ptRightBottom.y, ptRightBottom.x,
+ ptLeftTop.y);
+ }
+ CLST_Rect OuterToInner(const CPDF_Rect& rect) const {
+ CPDF_Point ptLeftTop = OuterToInner(CPDF_Point(rect.left, rect.top));
+ CPDF_Point ptRightBottom =
+ OuterToInner(CPDF_Point(rect.right, rect.bottom));
+ return CLST_Rect(ptLeftTop.x, ptLeftTop.y, ptRightBottom.x,
+ ptRightBottom.y);
+ }
+
+ private:
+ CPDF_Rect m_rcPlate;
+ CLST_Rect m_rcContent; // positive forever!
};
-template<class TYPE> class CLST_ArrayTemplate : public CFX_ArrayTemplate<TYPE>
-{
-public:
- FX_BOOL IsEmpty() { return CFX_ArrayTemplate<TYPE>::GetSize() <= 0; }
- TYPE GetAt(int32_t nIndex) const { if (nIndex >= 0 && nIndex < CFX_ArrayTemplate<TYPE>::GetSize()) return CFX_ArrayTemplate<TYPE>::GetAt(nIndex); return NULL;}
- void RemoveAt(int32_t nIndex){if (nIndex >= 0 && nIndex < CFX_ArrayTemplate<TYPE>::GetSize()) CFX_ArrayTemplate<TYPE>::RemoveAt(nIndex);}
+template <class TYPE>
+class CLST_ArrayTemplate : public CFX_ArrayTemplate<TYPE> {
+ public:
+ FX_BOOL IsEmpty() { return CFX_ArrayTemplate<TYPE>::GetSize() <= 0; }
+ TYPE GetAt(int32_t nIndex) const {
+ if (nIndex >= 0 && nIndex < CFX_ArrayTemplate<TYPE>::GetSize())
+ return CFX_ArrayTemplate<TYPE>::GetAt(nIndex);
+ return NULL;
+ }
+ void RemoveAt(int32_t nIndex) {
+ if (nIndex >= 0 && nIndex < CFX_ArrayTemplate<TYPE>::GetSize())
+ CFX_ArrayTemplate<TYPE>::RemoveAt(nIndex);
+ }
};
-class CFX_List : protected CFX_ListContainer , public IFX_List
-{
-public:
- CFX_List();
- virtual ~CFX_List();
+class CFX_List : protected CFX_ListContainer, public IFX_List {
+ public:
+ CFX_List();
+ virtual ~CFX_List();
-public:
- virtual void SetFontMap(IFX_Edit_FontMap * pFontMap);
- virtual void SetFontSize(FX_FLOAT fFontSize);
+ public:
+ virtual void SetFontMap(IFX_Edit_FontMap* pFontMap);
+ virtual void SetFontSize(FX_FLOAT fFontSize);
- virtual CPDF_Rect GetPlateRect() const;
- virtual CPDF_Rect GetContentRect() const;
+ virtual CPDF_Rect GetPlateRect() const;
+ virtual CPDF_Rect GetContentRect() const;
- virtual FX_FLOAT GetFontSize() const;
- virtual IFX_Edit* GetItemEdit(int32_t nIndex) const;
- virtual int32_t GetCount() const;
- virtual FX_BOOL IsItemSelected(int32_t nIndex) const;
- virtual FX_FLOAT GetFirstHeight() const;
+ virtual FX_FLOAT GetFontSize() const;
+ virtual IFX_Edit* GetItemEdit(int32_t nIndex) const;
+ virtual int32_t GetCount() const;
+ virtual FX_BOOL IsItemSelected(int32_t nIndex) const;
+ virtual FX_FLOAT GetFirstHeight() const;
- virtual void SetMultipleSel(FX_BOOL bMultiple);
- virtual FX_BOOL IsMultipleSel() const;
- virtual FX_BOOL IsValid(int32_t nItemIndex) const;
- virtual int32_t FindNext(int32_t nIndex,FX_WCHAR nChar) const;
+ virtual void SetMultipleSel(FX_BOOL bMultiple);
+ virtual FX_BOOL IsMultipleSel() const;
+ virtual FX_BOOL IsValid(int32_t nItemIndex) const;
+ virtual int32_t FindNext(int32_t nIndex, FX_WCHAR nChar) const;
-protected:
- virtual void Empty();
+ protected:
+ virtual void Empty();
- void AddItem(const FX_WCHAR* str);
- virtual void ReArrange(int32_t nItemIndex);
+ void AddItem(const FX_WCHAR* str);
+ virtual void ReArrange(int32_t nItemIndex);
- virtual CPDF_Rect GetItemRect(int32_t nIndex) const;
- CFX_WideString GetItemText(int32_t nIndex) const;
+ virtual CPDF_Rect GetItemRect(int32_t nIndex) const;
+ CFX_WideString GetItemText(int32_t nIndex) const;
- void SetItemSelect(int32_t nItemIndex, FX_BOOL bSelected);
- void SetItemCaret(int32_t nItemIndex, FX_BOOL bCaret);
+ void SetItemSelect(int32_t nItemIndex, FX_BOOL bSelected);
+ void SetItemCaret(int32_t nItemIndex, FX_BOOL bCaret);
- virtual int32_t GetItemIndex(const CPDF_Point & point) const;
- int32_t GetFirstSelected() const;
- int32_t GetLastSelected() const;
- FX_WCHAR Toupper(FX_WCHAR c) const;
+ virtual int32_t GetItemIndex(const CPDF_Point& point) const;
+ int32_t GetFirstSelected() const;
+ int32_t GetLastSelected() const;
+ FX_WCHAR Toupper(FX_WCHAR c) const;
-private:
- CLST_ArrayTemplate<CFX_ListItem*> m_aListItems;
- FX_FLOAT m_fFontSize;
- IFX_Edit_FontMap* m_pFontMap;
- FX_BOOL m_bMultiple;
+ private:
+ CLST_ArrayTemplate<CFX_ListItem*> m_aListItems;
+ FX_FLOAT m_fFontSize;
+ IFX_Edit_FontMap* m_pFontMap;
+ FX_BOOL m_bMultiple;
};
-struct CPLST_Select_Item
-{
- CPLST_Select_Item(int32_t other_nItemIndex, int32_t other_nState)
- {
- nItemIndex = other_nItemIndex;
- nState = other_nState;
- }
+struct CPLST_Select_Item {
+ CPLST_Select_Item(int32_t other_nItemIndex, int32_t other_nState) {
+ nItemIndex = other_nItemIndex;
+ nState = other_nState;
+ }
- int32_t nItemIndex;
- int32_t nState; //0:normal select -1:to deselect 1: to select
+ int32_t nItemIndex;
+ int32_t nState; // 0:normal select -1:to deselect 1: to select
};
-class CPLST_Select
-{
-public:
- CPLST_Select();
- virtual ~CPLST_Select();
-
-public:
- void Add(int32_t nItemIndex);
- void Add(int32_t nBeginIndex, int32_t nEndIndex);
- void Sub(int32_t nItemIndex);
- void Sub(int32_t nBeginIndex, int32_t nEndIndex);
- FX_BOOL IsExist(int32_t nItemIndex) const;
- int32_t Find(int32_t nItemIndex) const;
- int32_t GetCount() const;
- int32_t GetItemIndex(int32_t nIndex) const;
- int32_t GetState(int32_t nIndex) const;
- void Done();
- void DeselectAll();
-
-private:
- CFX_ArrayTemplate<CPLST_Select_Item*> m_aItems;
+class CPLST_Select {
+ public:
+ CPLST_Select();
+ virtual ~CPLST_Select();
+
+ public:
+ void Add(int32_t nItemIndex);
+ void Add(int32_t nBeginIndex, int32_t nEndIndex);
+ void Sub(int32_t nItemIndex);
+ void Sub(int32_t nBeginIndex, int32_t nEndIndex);
+ FX_BOOL IsExist(int32_t nItemIndex) const;
+ int32_t Find(int32_t nItemIndex) const;
+ int32_t GetCount() const;
+ int32_t GetItemIndex(int32_t nIndex) const;
+ int32_t GetState(int32_t nIndex) const;
+ void Done();
+ void DeselectAll();
+
+ private:
+ CFX_ArrayTemplate<CPLST_Select_Item*> m_aItems;
};
-class CFX_ListCtrl : public CFX_List
-{
-public:
- CFX_ListCtrl();
- virtual ~CFX_ListCtrl();
-
-public:
- void SetNotify(IFX_List_Notify * pNotify);
-
- void OnMouseDown(const CPDF_Point & point,FX_BOOL bShift,FX_BOOL bCtrl);
- void OnMouseMove(const CPDF_Point & point,FX_BOOL bShift,FX_BOOL bCtrl);
- void OnVK_UP(FX_BOOL bShift,FX_BOOL bCtrl);
- void OnVK_DOWN(FX_BOOL bShift,FX_BOOL bCtrl);
- void OnVK_LEFT(FX_BOOL bShift,FX_BOOL bCtrl);
- void OnVK_RIGHT(FX_BOOL bShift,FX_BOOL bCtrl);
- void OnVK_HOME(FX_BOOL bShift,FX_BOOL bCtrl);
- void OnVK_END(FX_BOOL bShift,FX_BOOL bCtrl);
- void OnVK(int32_t nItemIndex,FX_BOOL bShift,FX_BOOL bCtrl);
- FX_BOOL OnChar(FX_WORD nChar,FX_BOOL bShift,FX_BOOL bCtrl);
-
- virtual CPDF_Point InToOut(const CPDF_Point & point) const;
- virtual CPDF_Point OutToIn(const CPDF_Point & point) const;
- virtual CPDF_Rect InToOut(const CPDF_Rect & rect) const;
- virtual CPDF_Rect OutToIn(const CPDF_Rect & rect) const;
-
- virtual void SetPlateRect(const CPDF_Rect & rect);
- void SetScrollPos(const CPDF_Point & point);
- void ScrollToListItem(int32_t nItemIndex);
- virtual CPDF_Rect GetItemRect(int32_t nIndex) const;
- int32_t GetCaret() const {return m_nCaretIndex;}
- int32_t GetSelect() const {return m_nSelItem;}
- int32_t GetTopItem() const;
- virtual CPDF_Rect GetContentRect() const;
- virtual int32_t GetItemIndex(const CPDF_Point & point) const;
-
- void AddString(const FX_WCHAR* string);
- void SetTopItem(int32_t nIndex);
- void Select(int32_t nItemIndex);
- virtual void SetCaret(int32_t nItemIndex);
- virtual void Empty();
- virtual void Cancel();
- CFX_WideString GetText() const;
-
-private:
- void SetMultipleSelect(int32_t nItemIndex, FX_BOOL bSelected);
- void SetSingleSelect(int32_t nItemIndex);
- void InvalidateItem(int32_t nItemIndex);
- void SelectItems();
- FX_BOOL IsItemVisible(int32_t nItemIndex) const;
- void SetScrollInfo();
- void SetScrollPosY(FX_FLOAT fy);
- virtual void ReArrange(int32_t nItemIndex);
-
-private:
- IFX_List_Notify* m_pNotify;
- FX_BOOL m_bNotifyFlag;
- CPDF_Point m_ptScrollPos;
- CPLST_Select m_aSelItems; //for multiple
- int32_t m_nSelItem; //for single
- int32_t m_nFootIndex; //for multiple
- FX_BOOL m_bCtrlSel; //for multiple
- int32_t m_nCaretIndex; //for multiple
+class CFX_ListCtrl : public CFX_List {
+ public:
+ CFX_ListCtrl();
+ virtual ~CFX_ListCtrl();
+
+ public:
+ void SetNotify(IFX_List_Notify* pNotify);
+
+ void OnMouseDown(const CPDF_Point& point, FX_BOOL bShift, FX_BOOL bCtrl);
+ void OnMouseMove(const CPDF_Point& point, FX_BOOL bShift, FX_BOOL bCtrl);
+ void OnVK_UP(FX_BOOL bShift, FX_BOOL bCtrl);
+ void OnVK_DOWN(FX_BOOL bShift, FX_BOOL bCtrl);
+ void OnVK_LEFT(FX_BOOL bShift, FX_BOOL bCtrl);
+ void OnVK_RIGHT(FX_BOOL bShift, FX_BOOL bCtrl);
+ void OnVK_HOME(FX_BOOL bShift, FX_BOOL bCtrl);
+ void OnVK_END(FX_BOOL bShift, FX_BOOL bCtrl);
+ void OnVK(int32_t nItemIndex, FX_BOOL bShift, FX_BOOL bCtrl);
+ FX_BOOL OnChar(FX_WORD nChar, FX_BOOL bShift, FX_BOOL bCtrl);
+
+ virtual CPDF_Point InToOut(const CPDF_Point& point) const;
+ virtual CPDF_Point OutToIn(const CPDF_Point& point) const;
+ virtual CPDF_Rect InToOut(const CPDF_Rect& rect) const;
+ virtual CPDF_Rect OutToIn(const CPDF_Rect& rect) const;
+
+ virtual void SetPlateRect(const CPDF_Rect& rect);
+ void SetScrollPos(const CPDF_Point& point);
+ void ScrollToListItem(int32_t nItemIndex);
+ virtual CPDF_Rect GetItemRect(int32_t nIndex) const;
+ int32_t GetCaret() const { return m_nCaretIndex; }
+ int32_t GetSelect() const { return m_nSelItem; }
+ int32_t GetTopItem() const;
+ virtual CPDF_Rect GetContentRect() const;
+ virtual int32_t GetItemIndex(const CPDF_Point& point) const;
+
+ void AddString(const FX_WCHAR* string);
+ void SetTopItem(int32_t nIndex);
+ void Select(int32_t nItemIndex);
+ virtual void SetCaret(int32_t nItemIndex);
+ virtual void Empty();
+ virtual void Cancel();
+ CFX_WideString GetText() const;
+
+ private:
+ void SetMultipleSelect(int32_t nItemIndex, FX_BOOL bSelected);
+ void SetSingleSelect(int32_t nItemIndex);
+ void InvalidateItem(int32_t nItemIndex);
+ void SelectItems();
+ FX_BOOL IsItemVisible(int32_t nItemIndex) const;
+ void SetScrollInfo();
+ void SetScrollPosY(FX_FLOAT fy);
+ virtual void ReArrange(int32_t nItemIndex);
+
+ private:
+ IFX_List_Notify* m_pNotify;
+ FX_BOOL m_bNotifyFlag;
+ CPDF_Point m_ptScrollPos;
+ CPLST_Select m_aSelItems; // for multiple
+ int32_t m_nSelItem; // for single
+ int32_t m_nFootIndex; // for multiple
+ FX_BOOL m_bCtrlSel; // for multiple
+ int32_t m_nCaretIndex; // for multiple
};
#endif // FPDFSDK_INCLUDE_FXEDIT_FXET_LIST_H_
diff --git a/fpdfsdk/include/javascript/Consts.h b/fpdfsdk/include/javascript/Consts.h
index d04cc6b54c..c0abe4c7d4 100644
--- a/fpdfsdk/include/javascript/Consts.h
+++ b/fpdfsdk/include/javascript/Consts.h
@@ -11,117 +11,108 @@
/* ------------------------------ border ------------------------------ */
-class CJS_Border : public CJS_Object
-{
-public:
- CJS_Border(JSFXObject pObject) : CJS_Object(pObject) {};
- virtual ~CJS_Border(void){};
+class CJS_Border : public CJS_Object {
+ public:
+ CJS_Border(JSFXObject pObject) : CJS_Object(pObject){};
+ virtual ~CJS_Border(void){};
- DECLARE_JS_CLASS_CONST();
+ DECLARE_JS_CLASS_CONST();
};
/* ------------------------------ display ------------------------------ */
-class CJS_Display : public CJS_Object
-{
-public:
- CJS_Display(JSFXObject pObject) : CJS_Object(pObject) {};
- virtual ~CJS_Display(void){};
+class CJS_Display : public CJS_Object {
+ public:
+ CJS_Display(JSFXObject pObject) : CJS_Object(pObject){};
+ virtual ~CJS_Display(void){};
- DECLARE_JS_CLASS_CONST();
+ DECLARE_JS_CLASS_CONST();
};
/* ------------------------------ font ------------------------------ */
-class CJS_Font : public CJS_Object
-{
-public:
- CJS_Font(JSFXObject pObject) : CJS_Object(pObject) {};
- virtual ~CJS_Font(void){};
+class CJS_Font : public CJS_Object {
+ public:
+ CJS_Font(JSFXObject pObject) : CJS_Object(pObject){};
+ virtual ~CJS_Font(void){};
- DECLARE_JS_CLASS_CONST();
+ DECLARE_JS_CLASS_CONST();
};
/* ------------------------------ highlight ------------------------------ */
-class CJS_Highlight : public CJS_Object
-{
-public:
- CJS_Highlight(JSFXObject pObject) : CJS_Object(pObject) {};
- virtual ~CJS_Highlight(void){};
+class CJS_Highlight : public CJS_Object {
+ public:
+ CJS_Highlight(JSFXObject pObject) : CJS_Object(pObject){};
+ virtual ~CJS_Highlight(void){};
- DECLARE_JS_CLASS_CONST();
+ DECLARE_JS_CLASS_CONST();
};
/* ------------------------------ position ------------------------------ */
-class CJS_Position : public CJS_Object
-{
-public:
- CJS_Position(JSFXObject pObject) : CJS_Object(pObject) {};
- virtual ~CJS_Position(void){};
+class CJS_Position : public CJS_Object {
+ public:
+ CJS_Position(JSFXObject pObject) : CJS_Object(pObject){};
+ virtual ~CJS_Position(void){};
- DECLARE_JS_CLASS_CONST();
+ DECLARE_JS_CLASS_CONST();
};
/* ------------------------------ scaleHow ------------------------------ */
-class CJS_ScaleHow : public CJS_Object
-{
-public:
- CJS_ScaleHow(JSFXObject pObject) : CJS_Object(pObject) {};
- virtual ~CJS_ScaleHow(void){};
+class CJS_ScaleHow : public CJS_Object {
+ public:
+ CJS_ScaleHow(JSFXObject pObject) : CJS_Object(pObject){};
+ virtual ~CJS_ScaleHow(void){};
- DECLARE_JS_CLASS_CONST();
+ DECLARE_JS_CLASS_CONST();
};
/* ------------------------------ scaleWhen ------------------------------ */
-class CJS_ScaleWhen : public CJS_Object
-{
-public:
- CJS_ScaleWhen(JSFXObject pObject) : CJS_Object(pObject) {};
- virtual ~CJS_ScaleWhen(void){};
+class CJS_ScaleWhen : public CJS_Object {
+ public:
+ CJS_ScaleWhen(JSFXObject pObject) : CJS_Object(pObject){};
+ virtual ~CJS_ScaleWhen(void){};
- DECLARE_JS_CLASS_CONST();
+ DECLARE_JS_CLASS_CONST();
};
/* ------------------------------ style ------------------------------ */
-class CJS_Style : public CJS_Object
-{
-public:
- CJS_Style(JSFXObject pObject) : CJS_Object(pObject) {};
- virtual ~CJS_Style(void){};
+class CJS_Style : public CJS_Object {
+ public:
+ CJS_Style(JSFXObject pObject) : CJS_Object(pObject){};
+ virtual ~CJS_Style(void){};
- DECLARE_JS_CLASS_CONST();
+ DECLARE_JS_CLASS_CONST();
};
/* ------------------------------ zoomtype ------------------------------ */
-class CJS_Zoomtype : public CJS_Object
-{
-public:
- CJS_Zoomtype(JSFXObject pObject) : CJS_Object(pObject) {};
- virtual ~CJS_Zoomtype(void){};
+class CJS_Zoomtype : public CJS_Object {
+ public:
+ CJS_Zoomtype(JSFXObject pObject) : CJS_Object(pObject){};
+ virtual ~CJS_Zoomtype(void){};
- DECLARE_JS_CLASS_CONST();
+ DECLARE_JS_CLASS_CONST();
};
-/* ------------------------------ CJS_GlobalConsts ------------------------------ */
+/* ------------------------------ CJS_GlobalConsts
+ * ------------------------------ */
-class CJS_GlobalConsts : public CJS_Object
-{
-public:
- static int Init(IJS_Runtime* pRuntime);
+class CJS_GlobalConsts : public CJS_Object {
+ public:
+ static int Init(IJS_Runtime* pRuntime);
};
-/* ------------------------------ CJS_GlobalArrays ------------------------------ */
+/* ------------------------------ CJS_GlobalArrays
+ * ------------------------------ */
-class CJS_GlobalArrays : public CJS_Object
-{
-public:
- static int Init(IJS_Runtime* pRuntime);
+class CJS_GlobalArrays : public CJS_Object {
+ public:
+ static int Init(IJS_Runtime* pRuntime);
};
#endif // FPDFSDK_INCLUDE_JAVASCRIPT_CONSTS_H_
diff --git a/fpdfsdk/include/javascript/Document.h b/fpdfsdk/include/javascript/Document.h
index b6447fda2a..7d0e05fc43 100644
--- a/fpdfsdk/include/javascript/Document.h
+++ b/fpdfsdk/include/javascript/Document.h
@@ -9,266 +9,398 @@
#include "JS_Define.h"
-class PrintParamsObj : public CJS_EmbedObj
-{
-public:
- PrintParamsObj(CJS_Object* pJSObject);
- virtual ~PrintParamsObj(){}
+class PrintParamsObj : public CJS_EmbedObj {
+ public:
+ PrintParamsObj(CJS_Object* pJSObject);
+ virtual ~PrintParamsObj() {}
-public:
- FX_BOOL bUI;
- int nStart;
- int nEnd;
- FX_BOOL bSilent;
- FX_BOOL bShrinkToFit;
- FX_BOOL bPrintAsImage;
- FX_BOOL bReverse;
- FX_BOOL bAnnotations;
+ public:
+ FX_BOOL bUI;
+ int nStart;
+ int nEnd;
+ FX_BOOL bSilent;
+ FX_BOOL bShrinkToFit;
+ FX_BOOL bPrintAsImage;
+ FX_BOOL bReverse;
+ FX_BOOL bAnnotations;
};
-class CJS_PrintParamsObj : public CJS_Object
-{
-public:
- CJS_PrintParamsObj(JSFXObject pObject) : CJS_Object(pObject) {}
- virtual ~CJS_PrintParamsObj(){}
+class CJS_PrintParamsObj : public CJS_Object {
+ public:
+ CJS_PrintParamsObj(JSFXObject pObject) : CJS_Object(pObject) {}
+ virtual ~CJS_PrintParamsObj() {}
- DECLARE_JS_CLASS(CJS_PrintParamsObj);
+ DECLARE_JS_CLASS(CJS_PrintParamsObj);
};
-
class Icon;
class Field;
-struct IconElement
-{
- IconElement() : IconName(L""), NextIcon(NULL), IconStream(NULL) {}
- virtual ~IconElement()
- {
- }
- CFX_WideString IconName;
- IconElement* NextIcon;
- Icon* IconStream;
+struct IconElement {
+ IconElement() : IconName(L""), NextIcon(NULL), IconStream(NULL) {}
+ virtual ~IconElement() {}
+ CFX_WideString IconName;
+ IconElement* NextIcon;
+ Icon* IconStream;
};
-class IconTree
-{
-public:
- IconTree():m_pHead(NULL), m_pEnd(NULL), m_iLength(0)
- {
-
- }
+class IconTree {
+ public:
+ IconTree() : m_pHead(NULL), m_pEnd(NULL), m_iLength(0) {}
- virtual ~IconTree()
- {
- }
+ virtual ~IconTree() {}
-public:
- void InsertIconElement(IconElement* pNewIcon);
- void DeleteIconTree();
- int GetLength();
- IconElement* operator[](int iIndex);
+ public:
+ void InsertIconElement(IconElement* pNewIcon);
+ void DeleteIconTree();
+ int GetLength();
+ IconElement* operator[](int iIndex);
-private:
- IconElement* m_pHead;
- IconElement* m_pEnd;
- int m_iLength;
+ private:
+ IconElement* m_pHead;
+ IconElement* m_pEnd;
+ int m_iLength;
};
struct CJS_DelayData;
struct CJS_DelayAnnot;
struct CJS_AnnotObj;
-class Document : public CJS_EmbedObj
-{
-public:
- Document(CJS_Object* pJSObject);
- virtual ~Document();
+class Document : public CJS_EmbedObj {
+ public:
+ Document(CJS_Object* pJSObject);
+ virtual ~Document();
-public:
- FX_BOOL ADBE(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL author(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL baseURL(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL bookmarkRoot(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL calculate(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL Collab(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL creationDate(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL creator(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL delay(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL dirty(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL documentFileName(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL external(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL filesize(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL icons(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL info(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL keywords(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL layout(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL media(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL modDate(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL mouseX(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL mouseY(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL numFields(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL numPages(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL pageNum(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL pageWindowRect(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL path(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL producer(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL subject(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL title(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL zoom(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL zoomType(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
+ public:
+ FX_BOOL ADBE(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
+ FX_BOOL author(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
+ FX_BOOL baseURL(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
+ FX_BOOL bookmarkRoot(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError);
+ FX_BOOL calculate(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError);
+ FX_BOOL Collab(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
+ FX_BOOL creationDate(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError);
+ FX_BOOL creator(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
+ FX_BOOL delay(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
+ FX_BOOL dirty(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
+ FX_BOOL documentFileName(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError);
+ FX_BOOL external(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError);
+ FX_BOOL filesize(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError);
+ FX_BOOL icons(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
+ FX_BOOL info(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
+ FX_BOOL keywords(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError);
+ FX_BOOL layout(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
+ FX_BOOL media(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
+ FX_BOOL modDate(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
+ FX_BOOL mouseX(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
+ FX_BOOL mouseY(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
+ FX_BOOL numFields(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError);
+ FX_BOOL numPages(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError);
+ FX_BOOL pageNum(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
+ FX_BOOL pageWindowRect(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError);
+ FX_BOOL path(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
+ FX_BOOL producer(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError);
+ FX_BOOL subject(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
+ FX_BOOL title(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
+ FX_BOOL zoom(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
+ FX_BOOL zoomType(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError);
- FX_BOOL addAnnot(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL addField(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL addLink(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL addIcon(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL calculateNow(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL closeDoc(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL createDataObject(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL deletePages(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL exportAsText(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL exportAsFDF(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL exportAsXFDF(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL extractPages(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL getAnnot(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL getAnnots(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL getAnnot3D(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL getAnnots3D(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL getField(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL getIcon(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL getLinks(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL getNthFieldName(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL getOCGs(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL getPageBox(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL getPageNthWord(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL getPageNthWordQuads(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL getPageNumWords(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL getPrintParams(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL getURL(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL importAnFDF(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL importAnXFDF(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL importTextData(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL insertPages(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL mailForm(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL print(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL removeField(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL replacePages(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL resetForm(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL saveAs(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL submitForm(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL mailDoc(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL removeIcon(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
+ FX_BOOL addAnnot(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL addField(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL addLink(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL addIcon(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL calculateNow(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL closeDoc(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL createDataObject(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL deletePages(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL exportAsText(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL exportAsFDF(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL exportAsXFDF(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL extractPages(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL getAnnot(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL getAnnots(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL getAnnot3D(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL getAnnots3D(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL getField(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL getIcon(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL getLinks(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL getNthFieldName(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL getOCGs(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL getPageBox(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL getPageNthWord(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL getPageNthWordQuads(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL getPageNumWords(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL getPrintParams(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL getURL(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL importAnFDF(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL importAnXFDF(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL importTextData(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL insertPages(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL mailForm(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL print(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL removeField(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL replacePages(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL resetForm(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL saveAs(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL submitForm(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL mailDoc(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL removeIcon(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
-public:
- void AttachDoc(CPDFSDK_Document* pDoc);
- CPDFSDK_Document* GetReaderDoc();
- static FX_BOOL ExtractFileName(CPDFSDK_Document* pDoc, CFX_ByteString& strFileName);
- static FX_BOOL ExtractFolderName(CPDFSDK_Document* pDoc, CFX_ByteString& strFolderName);
- void AddDelayData(CJS_DelayData* pData);
- void DoFieldDelay(const CFX_WideString& sFieldName, int nControlIndex);
- void AddDelayAnnotData(CJS_AnnotObj *pData);
- void DoAnnotDelay();
- void SetIsolate(v8::Isolate* isolate) {m_isolate = isolate;}
- CJS_Document* GetCJSDoc() const;
+ public:
+ void AttachDoc(CPDFSDK_Document* pDoc);
+ CPDFSDK_Document* GetReaderDoc();
+ static FX_BOOL ExtractFileName(CPDFSDK_Document* pDoc,
+ CFX_ByteString& strFileName);
+ static FX_BOOL ExtractFolderName(CPDFSDK_Document* pDoc,
+ CFX_ByteString& strFolderName);
+ void AddDelayData(CJS_DelayData* pData);
+ void DoFieldDelay(const CFX_WideString& sFieldName, int nControlIndex);
+ void AddDelayAnnotData(CJS_AnnotObj* pData);
+ void DoAnnotDelay();
+ void SetIsolate(v8::Isolate* isolate) { m_isolate = isolate; }
+ CJS_Document* GetCJSDoc() const;
-private:
- CFX_WideString ReversalStr(CFX_WideString cbFrom);
- CFX_WideString CutString(CFX_WideString cbFrom);
- bool IsEnclosedInRect(CFX_FloatRect rect, CFX_FloatRect LinkRect);
- int CountWords(CPDF_TextObject* pTextObj);
- CFX_WideString GetObjWordStr(CPDF_TextObject* pTextObj, int nWordIndex);
- FX_BOOL ParserParams(JSObject *pObj,CJS_AnnotObj& annotobj);
+ private:
+ CFX_WideString ReversalStr(CFX_WideString cbFrom);
+ CFX_WideString CutString(CFX_WideString cbFrom);
+ bool IsEnclosedInRect(CFX_FloatRect rect, CFX_FloatRect LinkRect);
+ int CountWords(CPDF_TextObject* pTextObj);
+ CFX_WideString GetObjWordStr(CPDF_TextObject* pTextObj, int nWordIndex);
+ FX_BOOL ParserParams(JSObject* pObj, CJS_AnnotObj& annotobj);
- v8::Isolate* m_isolate;
- IconTree* m_pIconTree;
- CPDFSDK_Document* m_pDocument;
- CFX_WideString m_cwBaseURL;
- bool m_bDelay;
- CFX_ArrayTemplate<CJS_DelayData*> m_DelayData;
- CFX_ArrayTemplate<CJS_AnnotObj*> m_DelayAnnotData;
+ v8::Isolate* m_isolate;
+ IconTree* m_pIconTree;
+ CPDFSDK_Document* m_pDocument;
+ CFX_WideString m_cwBaseURL;
+ bool m_bDelay;
+ CFX_ArrayTemplate<CJS_DelayData*> m_DelayData;
+ CFX_ArrayTemplate<CJS_AnnotObj*> m_DelayAnnotData;
};
-class CJS_Document : public CJS_Object
-{
-public:
- CJS_Document(JSFXObject pObject) : CJS_Object(pObject) {};
- virtual ~CJS_Document(){};
+class CJS_Document : public CJS_Object {
+ public:
+ CJS_Document(JSFXObject pObject) : CJS_Object(pObject){};
+ virtual ~CJS_Document(){};
- virtual FX_BOOL InitInstance(IFXJS_Context* cc);
+ virtual FX_BOOL InitInstance(IFXJS_Context* cc);
- DECLARE_JS_CLASS(CJS_Document);
+ DECLARE_JS_CLASS(CJS_Document);
- JS_STATIC_PROP(ADBE, Document);
- JS_STATIC_PROP(author, Document);
- JS_STATIC_PROP(baseURL, Document);
- JS_STATIC_PROP(bookmarkRoot, Document);
- JS_STATIC_PROP(calculate, Document);
- JS_STATIC_PROP(Collab, Document);
- JS_STATIC_PROP(creationDate, Document);
- JS_STATIC_PROP(creator, Document);
- JS_STATIC_PROP(delay, Document);
- JS_STATIC_PROP(dirty, Document);
- JS_STATIC_PROP(documentFileName, Document);
- JS_STATIC_PROP(external, Document);
- JS_STATIC_PROP(filesize, Document);
- JS_STATIC_PROP(icons, Document);
- JS_STATIC_PROP(info, Document);
- JS_STATIC_PROP(keywords, Document);
- JS_STATIC_PROP(layout, Document);
- JS_STATIC_PROP(media, Document);
- JS_STATIC_PROP(modDate, Document);
- JS_STATIC_PROP(mouseX, Document);
- JS_STATIC_PROP(mouseY, Document);
- JS_STATIC_PROP(numFields, Document);
- JS_STATIC_PROP(numPages, Document);
- JS_STATIC_PROP(pageNum, Document);
- JS_STATIC_PROP(pageWindowRect, Document);
- JS_STATIC_PROP(path, Document);
- JS_STATIC_PROP(producer, Document);
- JS_STATIC_PROP(subject, Document);
- JS_STATIC_PROP(title, Document);
- JS_STATIC_PROP(zoom, Document);
- JS_STATIC_PROP(zoomType, Document);
+ JS_STATIC_PROP(ADBE, Document);
+ JS_STATIC_PROP(author, Document);
+ JS_STATIC_PROP(baseURL, Document);
+ JS_STATIC_PROP(bookmarkRoot, Document);
+ JS_STATIC_PROP(calculate, Document);
+ JS_STATIC_PROP(Collab, Document);
+ JS_STATIC_PROP(creationDate, Document);
+ JS_STATIC_PROP(creator, Document);
+ JS_STATIC_PROP(delay, Document);
+ JS_STATIC_PROP(dirty, Document);
+ JS_STATIC_PROP(documentFileName, Document);
+ JS_STATIC_PROP(external, Document);
+ JS_STATIC_PROP(filesize, Document);
+ JS_STATIC_PROP(icons, Document);
+ JS_STATIC_PROP(info, Document);
+ JS_STATIC_PROP(keywords, Document);
+ JS_STATIC_PROP(layout, Document);
+ JS_STATIC_PROP(media, Document);
+ JS_STATIC_PROP(modDate, Document);
+ JS_STATIC_PROP(mouseX, Document);
+ JS_STATIC_PROP(mouseY, Document);
+ JS_STATIC_PROP(numFields, Document);
+ JS_STATIC_PROP(numPages, Document);
+ JS_STATIC_PROP(pageNum, Document);
+ JS_STATIC_PROP(pageWindowRect, Document);
+ JS_STATIC_PROP(path, Document);
+ JS_STATIC_PROP(producer, Document);
+ JS_STATIC_PROP(subject, Document);
+ JS_STATIC_PROP(title, Document);
+ JS_STATIC_PROP(zoom, Document);
+ JS_STATIC_PROP(zoomType, Document);
- JS_STATIC_METHOD(addAnnot,Document);
- JS_STATIC_METHOD(addField, Document);
- JS_STATIC_METHOD(addLink, Document);
- JS_STATIC_METHOD(addIcon, Document);
- JS_STATIC_METHOD(calculateNow, Document);
- JS_STATIC_METHOD(closeDoc, Document);
- JS_STATIC_METHOD(createDataObject, Document);
- JS_STATIC_METHOD(deletePages, Document);
- JS_STATIC_METHOD(exportAsText, Document);
- JS_STATIC_METHOD(exportAsFDF, Document);
- JS_STATIC_METHOD(exportAsXFDF, Document);
- JS_STATIC_METHOD(extractPages, Document);
- JS_STATIC_METHOD(getAnnot, Document);
- JS_STATIC_METHOD(getAnnots, Document);
- JS_STATIC_METHOD(getAnnot3D, Document);
- JS_STATIC_METHOD(getAnnots3D, Document);
- JS_STATIC_METHOD(getField, Document);
- JS_STATIC_METHOD(getIcon, Document);
- JS_STATIC_METHOD(getLinks, Document);
- JS_STATIC_METHOD(getNthFieldName, Document);
- JS_STATIC_METHOD(getOCGs, Document);
- JS_STATIC_METHOD(getPageBox, Document);
- JS_STATIC_METHOD(getPageNthWord, Document);
- JS_STATIC_METHOD(getPageNthWordQuads, Document);
- JS_STATIC_METHOD(getPageNumWords, Document);
- JS_STATIC_METHOD(getPrintParams, Document);
- JS_STATIC_METHOD(getURL, Document);
- JS_STATIC_METHOD(importAnFDF, Document);
- JS_STATIC_METHOD(importAnXFDF, Document);
- JS_STATIC_METHOD(importTextData, Document);
- JS_STATIC_METHOD(insertPages, Document);
- JS_STATIC_METHOD(mailForm, Document);
- JS_STATIC_METHOD(print, Document);
- JS_STATIC_METHOD(removeField, Document);
- JS_STATIC_METHOD(replacePages, Document);
- JS_STATIC_METHOD(removeIcon, Document);
- JS_STATIC_METHOD(resetForm, Document);
- JS_STATIC_METHOD(saveAs, Document);
- JS_STATIC_METHOD(submitForm, Document);
- JS_STATIC_METHOD(mailDoc, Document);
+ JS_STATIC_METHOD(addAnnot, Document);
+ JS_STATIC_METHOD(addField, Document);
+ JS_STATIC_METHOD(addLink, Document);
+ JS_STATIC_METHOD(addIcon, Document);
+ JS_STATIC_METHOD(calculateNow, Document);
+ JS_STATIC_METHOD(closeDoc, Document);
+ JS_STATIC_METHOD(createDataObject, Document);
+ JS_STATIC_METHOD(deletePages, Document);
+ JS_STATIC_METHOD(exportAsText, Document);
+ JS_STATIC_METHOD(exportAsFDF, Document);
+ JS_STATIC_METHOD(exportAsXFDF, Document);
+ JS_STATIC_METHOD(extractPages, Document);
+ JS_STATIC_METHOD(getAnnot, Document);
+ JS_STATIC_METHOD(getAnnots, Document);
+ JS_STATIC_METHOD(getAnnot3D, Document);
+ JS_STATIC_METHOD(getAnnots3D, Document);
+ JS_STATIC_METHOD(getField, Document);
+ JS_STATIC_METHOD(getIcon, Document);
+ JS_STATIC_METHOD(getLinks, Document);
+ JS_STATIC_METHOD(getNthFieldName, Document);
+ JS_STATIC_METHOD(getOCGs, Document);
+ JS_STATIC_METHOD(getPageBox, Document);
+ JS_STATIC_METHOD(getPageNthWord, Document);
+ JS_STATIC_METHOD(getPageNthWordQuads, Document);
+ JS_STATIC_METHOD(getPageNumWords, Document);
+ JS_STATIC_METHOD(getPrintParams, Document);
+ JS_STATIC_METHOD(getURL, Document);
+ JS_STATIC_METHOD(importAnFDF, Document);
+ JS_STATIC_METHOD(importAnXFDF, Document);
+ JS_STATIC_METHOD(importTextData, Document);
+ JS_STATIC_METHOD(insertPages, Document);
+ JS_STATIC_METHOD(mailForm, Document);
+ JS_STATIC_METHOD(print, Document);
+ JS_STATIC_METHOD(removeField, Document);
+ JS_STATIC_METHOD(replacePages, Document);
+ JS_STATIC_METHOD(removeIcon, Document);
+ JS_STATIC_METHOD(resetForm, Document);
+ JS_STATIC_METHOD(saveAs, Document);
+ JS_STATIC_METHOD(submitForm, Document);
+ JS_STATIC_METHOD(mailDoc, Document);
};
#endif // FPDFSDK_INCLUDE_JAVASCRIPT_DOCUMENT_H_
diff --git a/fpdfsdk/include/javascript/Field.h b/fpdfsdk/include/javascript/Field.h
index 70d1d39b48..afbf783bf2 100644
--- a/fpdfsdk/include/javascript/Field.h
+++ b/fpdfsdk/include/javascript/Field.h
@@ -14,346 +14,611 @@
class Document;
-enum FIELD_PROP
-{
- FP_ALIGNMENT,
- FP_BORDERSTYLE,
- FP_BUTTONALIGNX,
- FP_BUTTONALIGNY,
- FP_BUTTONFITBOUNDS,
- FP_BUTTONPOSITION,
- FP_BUTTONSCALEHOW,
- FP_BUTTONSCALEWHEN,
- FP_CALCORDERINDEX,
- FP_CHARLIMIT,
- FP_COMB,
- FP_COMMITONSELCHANGE,
- FP_CURRENTVALUEINDICES,
- FP_DEFAULTVALUE,
- FP_DONOTSCROLL,
- FP_DISPLAY,
- FP_FILLCOLOR,
- FP_HIDDEN,
- FP_HIGHLIGHT,
- FP_LINEWIDTH,
- FP_MULTILINE,
- FP_MULTIPLESELECTION,
- FP_PASSWORD,
- FP_RECT,
- FP_RICHTEXT,
- FP_RICHVALUE,
- FP_ROTATION,
- FP_STROKECOLOR,
- FP_STYLE,
- FP_TEXTCOLOR,
- FP_TEXTFONT,
- FP_TEXTSIZE,
- FP_USERNAME,
- FP_VALUE
+enum FIELD_PROP {
+ FP_ALIGNMENT,
+ FP_BORDERSTYLE,
+ FP_BUTTONALIGNX,
+ FP_BUTTONALIGNY,
+ FP_BUTTONFITBOUNDS,
+ FP_BUTTONPOSITION,
+ FP_BUTTONSCALEHOW,
+ FP_BUTTONSCALEWHEN,
+ FP_CALCORDERINDEX,
+ FP_CHARLIMIT,
+ FP_COMB,
+ FP_COMMITONSELCHANGE,
+ FP_CURRENTVALUEINDICES,
+ FP_DEFAULTVALUE,
+ FP_DONOTSCROLL,
+ FP_DISPLAY,
+ FP_FILLCOLOR,
+ FP_HIDDEN,
+ FP_HIGHLIGHT,
+ FP_LINEWIDTH,
+ FP_MULTILINE,
+ FP_MULTIPLESELECTION,
+ FP_PASSWORD,
+ FP_RECT,
+ FP_RICHTEXT,
+ FP_RICHVALUE,
+ FP_ROTATION,
+ FP_STROKECOLOR,
+ FP_STYLE,
+ FP_TEXTCOLOR,
+ FP_TEXTFONT,
+ FP_TEXTSIZE,
+ FP_USERNAME,
+ FP_VALUE
};
-class CJS_WideStringArray
-{
-public:
- CJS_WideStringArray(){}
- virtual ~CJS_WideStringArray()
- {
- for (int i=0,sz=m_Data.GetSize(); i<sz; i++)
- delete m_Data.GetAt(i);
- m_Data.RemoveAll();
- }
-
- void Add(const CFX_WideString& string)
- {
- m_Data.Add(new CFX_WideString(string));
- }
-
- int GetSize() const
- {
- return m_Data.GetSize();
- }
-
- CFX_WideString GetAt(int i) const
- {
- return *m_Data.GetAt(i);
- }
-
-private:
- CFX_ArrayTemplate<CFX_WideString*> m_Data;
+class CJS_WideStringArray {
+ public:
+ CJS_WideStringArray() {}
+ virtual ~CJS_WideStringArray() {
+ for (int i = 0, sz = m_Data.GetSize(); i < sz; i++)
+ delete m_Data.GetAt(i);
+ m_Data.RemoveAll();
+ }
+
+ void Add(const CFX_WideString& string) {
+ m_Data.Add(new CFX_WideString(string));
+ }
+
+ int GetSize() const { return m_Data.GetSize(); }
+
+ CFX_WideString GetAt(int i) const { return *m_Data.GetAt(i); }
+
+ private:
+ CFX_ArrayTemplate<CFX_WideString*> m_Data;
};
-struct CJS_DelayData
-{
- CFX_WideString sFieldName;
- int nControlIndex;
- enum FIELD_PROP eProp;
- int32_t num;
- bool b;
- CFX_ByteString string;
- CFX_WideString widestring;
- CPDF_Rect rect;
- CPWL_Color color;
- CFX_DWordArray wordarray;
- CJS_WideStringArray widestringarray;
+struct CJS_DelayData {
+ CFX_WideString sFieldName;
+ int nControlIndex;
+ enum FIELD_PROP eProp;
+ int32_t num;
+ bool b;
+ CFX_ByteString string;
+ CFX_WideString widestring;
+ CPDF_Rect rect;
+ CPWL_Color color;
+ CFX_DWordArray wordarray;
+ CJS_WideStringArray widestringarray;
};
-class Field : public CJS_EmbedObj
-{
-public:
- Field(CJS_Object* pJSObject);
- virtual ~Field(void);
-
- FX_BOOL alignment(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL borderStyle(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL buttonAlignX(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL buttonAlignY(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL buttonFitBounds(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL buttonPosition(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL buttonScaleHow(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL buttonScaleWhen(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL calcOrderIndex(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL charLimit(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL comb(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL commitOnSelChange(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL currentValueIndices(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL defaultStyle(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL defaultValue(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL doNotScroll(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL doNotSpellCheck(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL delay(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL display(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL doc(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL editable(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL exportValues(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL fileSelect(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL fillColor(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL hidden(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL highlight(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL lineWidth(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL multiline(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL multipleSelection(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL name(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL numItems(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL page(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL password(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL print(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL radiosInUnison(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL readonly(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL rect(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL required(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL richText(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL richValue(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL rotation(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL strokeColor(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL style(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL submitName(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL textColor(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL textFont(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL textSize(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL type(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL userName(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL value(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL valueAsString(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL source(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
-
- FX_BOOL browseForFileToSubmit(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL buttonGetCaption(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL buttonGetIcon(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL buttonImportIcon(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL buttonSetCaption(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL buttonSetIcon(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL checkThisBox(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL clearItems(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL defaultIsChecked(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL deleteItemAt(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL getArray(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL getItemAt(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL getLock(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL insertItemAt(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL isBoxChecked(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL isDefaultChecked(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL setAction(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL setFocus(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL setItems(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL setLock(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL signatureGetModifications(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL signatureGetSeedValue(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL signatureInfo(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL signatureSetSeedValue(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL signatureSign(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL signatureValidate(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
-
-public:
- static void SetAlignment(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, const CFX_ByteString& string);
- static void SetBorderStyle(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, const CFX_ByteString& string);
- static void SetButtonAlignX(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, int number);
- static void SetButtonAlignY(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, int number);
- static void SetButtonFitBounds(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, bool b);
- static void SetButtonPosition(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, int number);
- static void SetButtonScaleHow(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, int number);
- static void SetButtonScaleWhen(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, int number);
- static void SetCalcOrderIndex(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, int number);
- static void SetCharLimit(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, int number);
- static void SetComb(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, bool b);
- static void SetCommitOnSelChange(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, bool b);
- static void SetCurrentValueIndices(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, const CFX_DWordArray& array);
- static void SetDefaultStyle(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex);
- static void SetDefaultValue(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, const CFX_WideString& string);
- static void SetDoNotScroll(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, bool b);
- static void SetDisplay(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, int number);
- static void SetFillColor(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, const CPWL_Color& color);
- static void SetHidden(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, bool b);
- static void SetHighlight(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, const CFX_ByteString& string);
- static void SetLineWidth(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, int number);
- static void SetMultiline(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, bool b);
- static void SetMultipleSelection(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, bool b);
- static void SetPassword(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, bool b);
- static void SetRect(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, const CPDF_Rect& rect);
- static void SetRichText(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, bool b);
- static void SetRichValue(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex);
- static void SetRotation(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, int number);
- static void SetStrokeColor(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, const CPWL_Color& color);
- static void SetStyle(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, const CFX_ByteString& string);
- static void SetTextColor(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, const CPWL_Color& color);
- static void SetTextFont(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, const CFX_ByteString& string);
- static void SetTextSize(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, int number);
- static void SetUserName(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, const CFX_WideString& string);
- static void SetValue(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, const CJS_WideStringArray& strArray);
-
-public:
- static void AddField(CPDFSDK_Document* pDocument, int nPageIndex, int nFieldType,
- const CFX_WideString& sName, const CPDF_Rect& rcCoords);
-public:
- static void UpdateFormField(CPDFSDK_Document* pDocument, CPDF_FormField* pFormField,
- FX_BOOL bChangeMark, FX_BOOL bResetAP, FX_BOOL bRefresh);
- static void UpdateFormControl(CPDFSDK_Document* pDocument, CPDF_FormControl* pFormControl,
- FX_BOOL bChangeMark, FX_BOOL bResetAP, FX_BOOL bRefresh);
-
- static CPDFSDK_Widget* GetWidget(CPDFSDK_Document* pDocument, CPDF_FormControl* pFormControl);
- static void GetFormFields(CPDFSDK_Document* pDocument, const CFX_WideString& csFieldName, CFX_PtrArray& FieldsArray);
-
- static void DoDelay(CPDFSDK_Document* pDocument, CJS_DelayData* pData);
-
-public:
- FX_BOOL AttachField(Document* pDocument, const CFX_WideString& csFieldName);
- void SetDelay(FX_BOOL bDelay);
- void SetIsolate(v8::Isolate* isolate) {m_isolate = isolate;}
-protected:
- void ParseFieldName(const std::wstring &strFieldNameParsed,std::wstring &strFieldName,int & iControlNo);
- void GetFormFields(const CFX_WideString& csFieldName, CFX_PtrArray& FieldsArray);
- CPDF_FormControl* GetSmartFieldControl(CPDF_FormField* pFormField);
- FX_BOOL ValueIsOccur(CPDF_FormField* pFormField, CFX_WideString csOptLabel);
-
- void AddDelay_Int(enum FIELD_PROP prop, int32_t n);
- void AddDelay_Bool(enum FIELD_PROP prop,bool b);
- void AddDelay_String(enum FIELD_PROP prop, const CFX_ByteString& string);
- void AddDelay_WideString(enum FIELD_PROP prop, const CFX_WideString& string);
- void AddDelay_Rect(enum FIELD_PROP prop, const CPDF_Rect& rect);
- void AddDelay_Color(enum FIELD_PROP prop, const CPWL_Color& color);
- void AddDelay_WordArray(enum FIELD_PROP prop, const CFX_DWordArray& array);
- void AddDelay_WideStringArray(enum FIELD_PROP prop, const CJS_WideStringArray& array);
-
- void DoDelay();
-public:
- Document* m_pJSDoc;
- CPDFSDK_Document* m_pDocument;
- CFX_WideString m_FieldName;
- int m_nFormControlIndex;
- FX_BOOL m_bCanSet;
-
- FX_BOOL m_bDelay;
- v8::Isolate* m_isolate;
+class Field : public CJS_EmbedObj {
+ public:
+ Field(CJS_Object* pJSObject);
+ virtual ~Field(void);
+
+ FX_BOOL alignment(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError);
+ FX_BOOL borderStyle(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError);
+ FX_BOOL buttonAlignX(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError);
+ FX_BOOL buttonAlignY(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError);
+ FX_BOOL buttonFitBounds(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError);
+ FX_BOOL buttonPosition(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError);
+ FX_BOOL buttonScaleHow(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError);
+ FX_BOOL buttonScaleWhen(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError);
+ FX_BOOL calcOrderIndex(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError);
+ FX_BOOL charLimit(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError);
+ FX_BOOL comb(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
+ FX_BOOL commitOnSelChange(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError);
+ FX_BOOL currentValueIndices(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError);
+ FX_BOOL defaultStyle(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError);
+ FX_BOOL defaultValue(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError);
+ FX_BOOL doNotScroll(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError);
+ FX_BOOL doNotSpellCheck(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError);
+ FX_BOOL delay(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
+ FX_BOOL display(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
+ FX_BOOL doc(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
+ FX_BOOL editable(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError);
+ FX_BOOL exportValues(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError);
+ FX_BOOL fileSelect(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError);
+ FX_BOOL fillColor(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError);
+ FX_BOOL hidden(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
+ FX_BOOL highlight(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError);
+ FX_BOOL lineWidth(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError);
+ FX_BOOL multiline(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError);
+ FX_BOOL multipleSelection(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError);
+ FX_BOOL name(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
+ FX_BOOL numItems(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError);
+ FX_BOOL page(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
+ FX_BOOL password(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError);
+ FX_BOOL print(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
+ FX_BOOL radiosInUnison(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError);
+ FX_BOOL readonly(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError);
+ FX_BOOL rect(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
+ FX_BOOL required(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError);
+ FX_BOOL richText(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError);
+ FX_BOOL richValue(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError);
+ FX_BOOL rotation(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError);
+ FX_BOOL strokeColor(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError);
+ FX_BOOL style(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
+ FX_BOOL submitName(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError);
+ FX_BOOL textColor(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError);
+ FX_BOOL textFont(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError);
+ FX_BOOL textSize(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError);
+ FX_BOOL type(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
+ FX_BOOL userName(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError);
+ FX_BOOL value(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
+ FX_BOOL valueAsString(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError);
+ FX_BOOL source(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
+
+ FX_BOOL browseForFileToSubmit(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL buttonGetCaption(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL buttonGetIcon(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL buttonImportIcon(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL buttonSetCaption(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL buttonSetIcon(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL checkThisBox(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL clearItems(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL defaultIsChecked(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL deleteItemAt(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL getArray(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL getItemAt(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL getLock(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL insertItemAt(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL isBoxChecked(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL isDefaultChecked(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL setAction(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL setFocus(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL setItems(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL setLock(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL signatureGetModifications(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL signatureGetSeedValue(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL signatureInfo(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL signatureSetSeedValue(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL signatureSign(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL signatureValidate(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+
+ public:
+ static void SetAlignment(CPDFSDK_Document* pDocument,
+ const CFX_WideString& swFieldName,
+ int nControlIndex,
+ const CFX_ByteString& string);
+ static void SetBorderStyle(CPDFSDK_Document* pDocument,
+ const CFX_WideString& swFieldName,
+ int nControlIndex,
+ const CFX_ByteString& string);
+ static void SetButtonAlignX(CPDFSDK_Document* pDocument,
+ const CFX_WideString& swFieldName,
+ int nControlIndex,
+ int number);
+ static void SetButtonAlignY(CPDFSDK_Document* pDocument,
+ const CFX_WideString& swFieldName,
+ int nControlIndex,
+ int number);
+ static void SetButtonFitBounds(CPDFSDK_Document* pDocument,
+ const CFX_WideString& swFieldName,
+ int nControlIndex,
+ bool b);
+ static void SetButtonPosition(CPDFSDK_Document* pDocument,
+ const CFX_WideString& swFieldName,
+ int nControlIndex,
+ int number);
+ static void SetButtonScaleHow(CPDFSDK_Document* pDocument,
+ const CFX_WideString& swFieldName,
+ int nControlIndex,
+ int number);
+ static void SetButtonScaleWhen(CPDFSDK_Document* pDocument,
+ const CFX_WideString& swFieldName,
+ int nControlIndex,
+ int number);
+ static void SetCalcOrderIndex(CPDFSDK_Document* pDocument,
+ const CFX_WideString& swFieldName,
+ int nControlIndex,
+ int number);
+ static void SetCharLimit(CPDFSDK_Document* pDocument,
+ const CFX_WideString& swFieldName,
+ int nControlIndex,
+ int number);
+ static void SetComb(CPDFSDK_Document* pDocument,
+ const CFX_WideString& swFieldName,
+ int nControlIndex,
+ bool b);
+ static void SetCommitOnSelChange(CPDFSDK_Document* pDocument,
+ const CFX_WideString& swFieldName,
+ int nControlIndex,
+ bool b);
+ static void SetCurrentValueIndices(CPDFSDK_Document* pDocument,
+ const CFX_WideString& swFieldName,
+ int nControlIndex,
+ const CFX_DWordArray& array);
+ static void SetDefaultStyle(CPDFSDK_Document* pDocument,
+ const CFX_WideString& swFieldName,
+ int nControlIndex);
+ static void SetDefaultValue(CPDFSDK_Document* pDocument,
+ const CFX_WideString& swFieldName,
+ int nControlIndex,
+ const CFX_WideString& string);
+ static void SetDoNotScroll(CPDFSDK_Document* pDocument,
+ const CFX_WideString& swFieldName,
+ int nControlIndex,
+ bool b);
+ static void SetDisplay(CPDFSDK_Document* pDocument,
+ const CFX_WideString& swFieldName,
+ int nControlIndex,
+ int number);
+ static void SetFillColor(CPDFSDK_Document* pDocument,
+ const CFX_WideString& swFieldName,
+ int nControlIndex,
+ const CPWL_Color& color);
+ static void SetHidden(CPDFSDK_Document* pDocument,
+ const CFX_WideString& swFieldName,
+ int nControlIndex,
+ bool b);
+ static void SetHighlight(CPDFSDK_Document* pDocument,
+ const CFX_WideString& swFieldName,
+ int nControlIndex,
+ const CFX_ByteString& string);
+ static void SetLineWidth(CPDFSDK_Document* pDocument,
+ const CFX_WideString& swFieldName,
+ int nControlIndex,
+ int number);
+ static void SetMultiline(CPDFSDK_Document* pDocument,
+ const CFX_WideString& swFieldName,
+ int nControlIndex,
+ bool b);
+ static void SetMultipleSelection(CPDFSDK_Document* pDocument,
+ const CFX_WideString& swFieldName,
+ int nControlIndex,
+ bool b);
+ static void SetPassword(CPDFSDK_Document* pDocument,
+ const CFX_WideString& swFieldName,
+ int nControlIndex,
+ bool b);
+ static void SetRect(CPDFSDK_Document* pDocument,
+ const CFX_WideString& swFieldName,
+ int nControlIndex,
+ const CPDF_Rect& rect);
+ static void SetRichText(CPDFSDK_Document* pDocument,
+ const CFX_WideString& swFieldName,
+ int nControlIndex,
+ bool b);
+ static void SetRichValue(CPDFSDK_Document* pDocument,
+ const CFX_WideString& swFieldName,
+ int nControlIndex);
+ static void SetRotation(CPDFSDK_Document* pDocument,
+ const CFX_WideString& swFieldName,
+ int nControlIndex,
+ int number);
+ static void SetStrokeColor(CPDFSDK_Document* pDocument,
+ const CFX_WideString& swFieldName,
+ int nControlIndex,
+ const CPWL_Color& color);
+ static void SetStyle(CPDFSDK_Document* pDocument,
+ const CFX_WideString& swFieldName,
+ int nControlIndex,
+ const CFX_ByteString& string);
+ static void SetTextColor(CPDFSDK_Document* pDocument,
+ const CFX_WideString& swFieldName,
+ int nControlIndex,
+ const CPWL_Color& color);
+ static void SetTextFont(CPDFSDK_Document* pDocument,
+ const CFX_WideString& swFieldName,
+ int nControlIndex,
+ const CFX_ByteString& string);
+ static void SetTextSize(CPDFSDK_Document* pDocument,
+ const CFX_WideString& swFieldName,
+ int nControlIndex,
+ int number);
+ static void SetUserName(CPDFSDK_Document* pDocument,
+ const CFX_WideString& swFieldName,
+ int nControlIndex,
+ const CFX_WideString& string);
+ static void SetValue(CPDFSDK_Document* pDocument,
+ const CFX_WideString& swFieldName,
+ int nControlIndex,
+ const CJS_WideStringArray& strArray);
+
+ public:
+ static void AddField(CPDFSDK_Document* pDocument,
+ int nPageIndex,
+ int nFieldType,
+ const CFX_WideString& sName,
+ const CPDF_Rect& rcCoords);
+
+ public:
+ static void UpdateFormField(CPDFSDK_Document* pDocument,
+ CPDF_FormField* pFormField,
+ FX_BOOL bChangeMark,
+ FX_BOOL bResetAP,
+ FX_BOOL bRefresh);
+ static void UpdateFormControl(CPDFSDK_Document* pDocument,
+ CPDF_FormControl* pFormControl,
+ FX_BOOL bChangeMark,
+ FX_BOOL bResetAP,
+ FX_BOOL bRefresh);
+
+ static CPDFSDK_Widget* GetWidget(CPDFSDK_Document* pDocument,
+ CPDF_FormControl* pFormControl);
+ static void GetFormFields(CPDFSDK_Document* pDocument,
+ const CFX_WideString& csFieldName,
+ CFX_PtrArray& FieldsArray);
+
+ static void DoDelay(CPDFSDK_Document* pDocument, CJS_DelayData* pData);
+
+ public:
+ FX_BOOL AttachField(Document* pDocument, const CFX_WideString& csFieldName);
+ void SetDelay(FX_BOOL bDelay);
+ void SetIsolate(v8::Isolate* isolate) { m_isolate = isolate; }
+
+ protected:
+ void ParseFieldName(const std::wstring& strFieldNameParsed,
+ std::wstring& strFieldName,
+ int& iControlNo);
+ void GetFormFields(const CFX_WideString& csFieldName,
+ CFX_PtrArray& FieldsArray);
+ CPDF_FormControl* GetSmartFieldControl(CPDF_FormField* pFormField);
+ FX_BOOL ValueIsOccur(CPDF_FormField* pFormField, CFX_WideString csOptLabel);
+
+ void AddDelay_Int(enum FIELD_PROP prop, int32_t n);
+ void AddDelay_Bool(enum FIELD_PROP prop, bool b);
+ void AddDelay_String(enum FIELD_PROP prop, const CFX_ByteString& string);
+ void AddDelay_WideString(enum FIELD_PROP prop, const CFX_WideString& string);
+ void AddDelay_Rect(enum FIELD_PROP prop, const CPDF_Rect& rect);
+ void AddDelay_Color(enum FIELD_PROP prop, const CPWL_Color& color);
+ void AddDelay_WordArray(enum FIELD_PROP prop, const CFX_DWordArray& array);
+ void AddDelay_WideStringArray(enum FIELD_PROP prop,
+ const CJS_WideStringArray& array);
+
+ void DoDelay();
+
+ public:
+ Document* m_pJSDoc;
+ CPDFSDK_Document* m_pDocument;
+ CFX_WideString m_FieldName;
+ int m_nFormControlIndex;
+ FX_BOOL m_bCanSet;
+
+ FX_BOOL m_bDelay;
+ v8::Isolate* m_isolate;
};
-class CJS_Field : public CJS_Object
-{
-public:
- CJS_Field(JSFXObject pObject) : CJS_Object(pObject) {};
- virtual ~CJS_Field(void){};
-
- virtual FX_BOOL InitInstance(IFXJS_Context* cc);
-
- DECLARE_JS_CLASS(CJS_Field);
-
- JS_STATIC_PROP(alignment, Field);
- JS_STATIC_PROP(borderStyle, Field);
- JS_STATIC_PROP(buttonAlignX, Field);
- JS_STATIC_PROP(buttonAlignY, Field);
- JS_STATIC_PROP(buttonFitBounds, Field);
- JS_STATIC_PROP(buttonPosition, Field);
- JS_STATIC_PROP(buttonScaleHow, Field);
- JS_STATIC_PROP(buttonScaleWhen, Field);
- JS_STATIC_PROP(calcOrderIndex, Field);
- JS_STATIC_PROP(charLimit, Field);
- JS_STATIC_PROP(comb, Field);
- JS_STATIC_PROP(commitOnSelChange, Field);
- JS_STATIC_PROP(currentValueIndices, Field);
- JS_STATIC_PROP(defaultStyle, Field);
- JS_STATIC_PROP(defaultValue, Field);
- JS_STATIC_PROP(doNotScroll, Field);
- JS_STATIC_PROP(doNotSpellCheck, Field);
- JS_STATIC_PROP(delay, Field);
- JS_STATIC_PROP(display, Field);
- JS_STATIC_PROP(doc, Field);
- JS_STATIC_PROP(editable, Field);
- JS_STATIC_PROP(exportValues, Field);
- JS_STATIC_PROP(fileSelect, Field);
- JS_STATIC_PROP(fillColor, Field);
- JS_STATIC_PROP(hidden, Field);
- JS_STATIC_PROP(highlight, Field);
- JS_STATIC_PROP(lineWidth, Field);
- JS_STATIC_PROP(multiline, Field);
- JS_STATIC_PROP(multipleSelection, Field);
- JS_STATIC_PROP(name, Field);
- JS_STATIC_PROP(numItems, Field);
- JS_STATIC_PROP(page, Field);
- JS_STATIC_PROP(password, Field);
- JS_STATIC_PROP(print, Field);
- JS_STATIC_PROP(radiosInUnison, Field);
- JS_STATIC_PROP(readonly, Field);
- JS_STATIC_PROP(rect, Field);
- JS_STATIC_PROP(required, Field);
- JS_STATIC_PROP(richText, Field);
- JS_STATIC_PROP(richValue, Field);
- JS_STATIC_PROP(rotation, Field);
- JS_STATIC_PROP(strokeColor, Field);
- JS_STATIC_PROP(style, Field);
- JS_STATIC_PROP(submitName, Field);
- JS_STATIC_PROP(textColor, Field);
- JS_STATIC_PROP(textFont, Field);
- JS_STATIC_PROP(textSize, Field);
- JS_STATIC_PROP(type, Field);
- JS_STATIC_PROP(userName, Field);
- JS_STATIC_PROP(value, Field);
- JS_STATIC_PROP(valueAsString, Field);
- JS_STATIC_PROP(source, Field);
-
- JS_STATIC_METHOD(browseForFileToSubmit, Field);
- JS_STATIC_METHOD(buttonGetCaption, Field);
- JS_STATIC_METHOD(buttonGetIcon, Field);
- JS_STATIC_METHOD(buttonImportIcon, Field);
- JS_STATIC_METHOD(buttonSetCaption, Field);
- JS_STATIC_METHOD(buttonSetIcon, Field);
- JS_STATIC_METHOD(checkThisBox, Field);
- JS_STATIC_METHOD(clearItems, Field);
- JS_STATIC_METHOD(defaultIsChecked, Field);
- JS_STATIC_METHOD(deleteItemAt, Field);
- JS_STATIC_METHOD(getArray, Field);
- JS_STATIC_METHOD(getItemAt, Field);
- JS_STATIC_METHOD(getLock, Field);
- JS_STATIC_METHOD(insertItemAt, Field);
- JS_STATIC_METHOD(isBoxChecked, Field);
- JS_STATIC_METHOD(isDefaultChecked, Field);
- JS_STATIC_METHOD(setAction, Field);
- JS_STATIC_METHOD(setFocus, Field);
- JS_STATIC_METHOD(setItems, Field);
- JS_STATIC_METHOD(setLock, Field);
- JS_STATIC_METHOD(signatureGetModifications, Field);
- JS_STATIC_METHOD(signatureGetSeedValue, Field);
- JS_STATIC_METHOD(signatureInfo, Field);
- JS_STATIC_METHOD(signatureSetSeedValue, Field);
- JS_STATIC_METHOD(signatureSign, Field);
- JS_STATIC_METHOD(signatureValidate, Field);
+class CJS_Field : public CJS_Object {
+ public:
+ CJS_Field(JSFXObject pObject) : CJS_Object(pObject){};
+ virtual ~CJS_Field(void){};
+
+ virtual FX_BOOL InitInstance(IFXJS_Context* cc);
+
+ DECLARE_JS_CLASS(CJS_Field);
+
+ JS_STATIC_PROP(alignment, Field);
+ JS_STATIC_PROP(borderStyle, Field);
+ JS_STATIC_PROP(buttonAlignX, Field);
+ JS_STATIC_PROP(buttonAlignY, Field);
+ JS_STATIC_PROP(buttonFitBounds, Field);
+ JS_STATIC_PROP(buttonPosition, Field);
+ JS_STATIC_PROP(buttonScaleHow, Field);
+ JS_STATIC_PROP(buttonScaleWhen, Field);
+ JS_STATIC_PROP(calcOrderIndex, Field);
+ JS_STATIC_PROP(charLimit, Field);
+ JS_STATIC_PROP(comb, Field);
+ JS_STATIC_PROP(commitOnSelChange, Field);
+ JS_STATIC_PROP(currentValueIndices, Field);
+ JS_STATIC_PROP(defaultStyle, Field);
+ JS_STATIC_PROP(defaultValue, Field);
+ JS_STATIC_PROP(doNotScroll, Field);
+ JS_STATIC_PROP(doNotSpellCheck, Field);
+ JS_STATIC_PROP(delay, Field);
+ JS_STATIC_PROP(display, Field);
+ JS_STATIC_PROP(doc, Field);
+ JS_STATIC_PROP(editable, Field);
+ JS_STATIC_PROP(exportValues, Field);
+ JS_STATIC_PROP(fileSelect, Field);
+ JS_STATIC_PROP(fillColor, Field);
+ JS_STATIC_PROP(hidden, Field);
+ JS_STATIC_PROP(highlight, Field);
+ JS_STATIC_PROP(lineWidth, Field);
+ JS_STATIC_PROP(multiline, Field);
+ JS_STATIC_PROP(multipleSelection, Field);
+ JS_STATIC_PROP(name, Field);
+ JS_STATIC_PROP(numItems, Field);
+ JS_STATIC_PROP(page, Field);
+ JS_STATIC_PROP(password, Field);
+ JS_STATIC_PROP(print, Field);
+ JS_STATIC_PROP(radiosInUnison, Field);
+ JS_STATIC_PROP(readonly, Field);
+ JS_STATIC_PROP(rect, Field);
+ JS_STATIC_PROP(required, Field);
+ JS_STATIC_PROP(richText, Field);
+ JS_STATIC_PROP(richValue, Field);
+ JS_STATIC_PROP(rotation, Field);
+ JS_STATIC_PROP(strokeColor, Field);
+ JS_STATIC_PROP(style, Field);
+ JS_STATIC_PROP(submitName, Field);
+ JS_STATIC_PROP(textColor, Field);
+ JS_STATIC_PROP(textFont, Field);
+ JS_STATIC_PROP(textSize, Field);
+ JS_STATIC_PROP(type, Field);
+ JS_STATIC_PROP(userName, Field);
+ JS_STATIC_PROP(value, Field);
+ JS_STATIC_PROP(valueAsString, Field);
+ JS_STATIC_PROP(source, Field);
+
+ JS_STATIC_METHOD(browseForFileToSubmit, Field);
+ JS_STATIC_METHOD(buttonGetCaption, Field);
+ JS_STATIC_METHOD(buttonGetIcon, Field);
+ JS_STATIC_METHOD(buttonImportIcon, Field);
+ JS_STATIC_METHOD(buttonSetCaption, Field);
+ JS_STATIC_METHOD(buttonSetIcon, Field);
+ JS_STATIC_METHOD(checkThisBox, Field);
+ JS_STATIC_METHOD(clearItems, Field);
+ JS_STATIC_METHOD(defaultIsChecked, Field);
+ JS_STATIC_METHOD(deleteItemAt, Field);
+ JS_STATIC_METHOD(getArray, Field);
+ JS_STATIC_METHOD(getItemAt, Field);
+ JS_STATIC_METHOD(getLock, Field);
+ JS_STATIC_METHOD(insertItemAt, Field);
+ JS_STATIC_METHOD(isBoxChecked, Field);
+ JS_STATIC_METHOD(isDefaultChecked, Field);
+ JS_STATIC_METHOD(setAction, Field);
+ JS_STATIC_METHOD(setFocus, Field);
+ JS_STATIC_METHOD(setItems, Field);
+ JS_STATIC_METHOD(setLock, Field);
+ JS_STATIC_METHOD(signatureGetModifications, Field);
+ JS_STATIC_METHOD(signatureGetSeedValue, Field);
+ JS_STATIC_METHOD(signatureInfo, Field);
+ JS_STATIC_METHOD(signatureSetSeedValue, Field);
+ JS_STATIC_METHOD(signatureSign, Field);
+ JS_STATIC_METHOD(signatureValidate, Field);
};
#endif // FPDFSDK_INCLUDE_JAVASCRIPT_FIELD_H_
diff --git a/fpdfsdk/include/javascript/IJavaScript.h b/fpdfsdk/include/javascript/IJavaScript.h
index 783b249ff6..53a4225aed 100644
--- a/fpdfsdk/include/javascript/IJavaScript.h
+++ b/fpdfsdk/include/javascript/IJavaScript.h
@@ -15,99 +15,155 @@ class CPDF_FormField;
class CPDFSDK_Annot;
class CPDFSDK_Document;
-class IFXJS_Context
-{
-public:
- virtual ~IFXJS_Context() { }
- virtual FX_BOOL Compile(const CFX_WideString& script, CFX_WideString& info) = 0;
- virtual FX_BOOL RunScript(const CFX_WideString& script, CFX_WideString& info) = 0;
-
- virtual void OnApp_Init() = 0;
-
- virtual void OnDoc_Open(CPDFSDK_Document* pDoc, const CFX_WideString& strTargetName) = 0;
- virtual void OnDoc_WillPrint(CPDFSDK_Document* pDoc) = 0;
- virtual void OnDoc_DidPrint(CPDFSDK_Document* pDoc) = 0;
- virtual void OnDoc_WillSave(CPDFSDK_Document* pDoc) = 0;
- virtual void OnDoc_DidSave(CPDFSDK_Document* pDoc) = 0;
- virtual void OnDoc_WillClose(CPDFSDK_Document* pDoc) = 0;
-
- virtual void OnPage_Open(CPDFSDK_Document* pTarget) = 0;
- virtual void OnPage_Close(CPDFSDK_Document* pTarget) = 0;
- virtual void OnPage_InView(CPDFSDK_Document* pTarget) = 0;
- virtual void OnPage_OutView(CPDFSDK_Document* pTarget) = 0;
-
- virtual void OnField_MouseDown(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField* pTarget) = 0;
- virtual void OnField_MouseEnter(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField* pTarget) = 0;
- virtual void OnField_MouseExit(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField* pTarget) = 0;
- virtual void OnField_MouseUp(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField* pTarget) = 0;
- virtual void OnField_Focus(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField* pTarget, const CFX_WideString& Value) = 0;
- virtual void OnField_Blur(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField* pTarget, const CFX_WideString& Value) = 0;
-
- virtual void OnField_Calculate(CPDF_FormField* pSource, CPDF_FormField* pTarget, CFX_WideString& Value, FX_BOOL& bRc) = 0;
- virtual void OnField_Format(CPDF_FormField* pTarget, CFX_WideString& Value, FX_BOOL bWillCommit) = 0;
- virtual void OnField_Keystroke(CFX_WideString& strChange, const CFX_WideString& strChangeEx,
- FX_BOOL KeyDown, FX_BOOL bModifier, int &nSelEnd,int &nSelStart, FX_BOOL bShift,
- CPDF_FormField* pTarget, CFX_WideString& Value, FX_BOOL bWillCommit,
- FX_BOOL bFieldFull, FX_BOOL &bRc) = 0;
- virtual void OnField_Validate(CFX_WideString& strChange, const CFX_WideString& strChangeEx, FX_BOOL bKeyDown,
- FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField* pTarget, CFX_WideString& Value, FX_BOOL& bRc) = 0;
-
- virtual void OnScreen_Focus(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen) = 0;
- virtual void OnScreen_Blur(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen) = 0;
- virtual void OnScreen_Open(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen) = 0;
- virtual void OnScreen_Close(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen) = 0;
- virtual void OnScreen_MouseDown(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen) = 0;
- virtual void OnScreen_MouseUp(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen) = 0;
- virtual void OnScreen_MouseEnter(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen) = 0;
- virtual void OnScreen_MouseExit(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen) = 0;
- virtual void OnScreen_InView(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen) = 0;
- virtual void OnScreen_OutView(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen) = 0;
-
- virtual void OnBookmark_MouseUp(CPDF_Bookmark* pBookMark) = 0;
- virtual void OnLink_MouseUp(CPDFSDK_Document* pTarget) = 0;
-
- virtual void OnMenu_Exec(CPDFSDK_Document* pTarget, const CFX_WideString &) = 0;
- virtual void OnBatchExec(CPDFSDK_Document* pTarget) = 0;
- virtual void OnConsole_Exec() = 0;
- virtual void OnExternal_Exec() = 0;
-
- virtual void EnableMessageBox(FX_BOOL bEnable) = 0;
+class IFXJS_Context {
+ public:
+ virtual ~IFXJS_Context() {}
+ virtual FX_BOOL Compile(const CFX_WideString& script,
+ CFX_WideString& info) = 0;
+ virtual FX_BOOL RunScript(const CFX_WideString& script,
+ CFX_WideString& info) = 0;
+
+ virtual void OnApp_Init() = 0;
+
+ virtual void OnDoc_Open(CPDFSDK_Document* pDoc,
+ const CFX_WideString& strTargetName) = 0;
+ virtual void OnDoc_WillPrint(CPDFSDK_Document* pDoc) = 0;
+ virtual void OnDoc_DidPrint(CPDFSDK_Document* pDoc) = 0;
+ virtual void OnDoc_WillSave(CPDFSDK_Document* pDoc) = 0;
+ virtual void OnDoc_DidSave(CPDFSDK_Document* pDoc) = 0;
+ virtual void OnDoc_WillClose(CPDFSDK_Document* pDoc) = 0;
+
+ virtual void OnPage_Open(CPDFSDK_Document* pTarget) = 0;
+ virtual void OnPage_Close(CPDFSDK_Document* pTarget) = 0;
+ virtual void OnPage_InView(CPDFSDK_Document* pTarget) = 0;
+ virtual void OnPage_OutView(CPDFSDK_Document* pTarget) = 0;
+
+ virtual void OnField_MouseDown(FX_BOOL bModifier,
+ FX_BOOL bShift,
+ CPDF_FormField* pTarget) = 0;
+ virtual void OnField_MouseEnter(FX_BOOL bModifier,
+ FX_BOOL bShift,
+ CPDF_FormField* pTarget) = 0;
+ virtual void OnField_MouseExit(FX_BOOL bModifier,
+ FX_BOOL bShift,
+ CPDF_FormField* pTarget) = 0;
+ virtual void OnField_MouseUp(FX_BOOL bModifier,
+ FX_BOOL bShift,
+ CPDF_FormField* pTarget) = 0;
+ virtual void OnField_Focus(FX_BOOL bModifier,
+ FX_BOOL bShift,
+ CPDF_FormField* pTarget,
+ const CFX_WideString& Value) = 0;
+ virtual void OnField_Blur(FX_BOOL bModifier,
+ FX_BOOL bShift,
+ CPDF_FormField* pTarget,
+ const CFX_WideString& Value) = 0;
+
+ virtual void OnField_Calculate(CPDF_FormField* pSource,
+ CPDF_FormField* pTarget,
+ CFX_WideString& Value,
+ FX_BOOL& bRc) = 0;
+ virtual void OnField_Format(CPDF_FormField* pTarget,
+ CFX_WideString& Value,
+ FX_BOOL bWillCommit) = 0;
+ virtual void OnField_Keystroke(CFX_WideString& strChange,
+ const CFX_WideString& strChangeEx,
+ FX_BOOL KeyDown,
+ FX_BOOL bModifier,
+ int& nSelEnd,
+ int& nSelStart,
+ FX_BOOL bShift,
+ CPDF_FormField* pTarget,
+ CFX_WideString& Value,
+ FX_BOOL bWillCommit,
+ FX_BOOL bFieldFull,
+ FX_BOOL& bRc) = 0;
+ virtual void OnField_Validate(CFX_WideString& strChange,
+ const CFX_WideString& strChangeEx,
+ FX_BOOL bKeyDown,
+ FX_BOOL bModifier,
+ FX_BOOL bShift,
+ CPDF_FormField* pTarget,
+ CFX_WideString& Value,
+ FX_BOOL& bRc) = 0;
+
+ virtual void OnScreen_Focus(FX_BOOL bModifier,
+ FX_BOOL bShift,
+ CPDFSDK_Annot* pScreen) = 0;
+ virtual void OnScreen_Blur(FX_BOOL bModifier,
+ FX_BOOL bShift,
+ CPDFSDK_Annot* pScreen) = 0;
+ virtual void OnScreen_Open(FX_BOOL bModifier,
+ FX_BOOL bShift,
+ CPDFSDK_Annot* pScreen) = 0;
+ virtual void OnScreen_Close(FX_BOOL bModifier,
+ FX_BOOL bShift,
+ CPDFSDK_Annot* pScreen) = 0;
+ virtual void OnScreen_MouseDown(FX_BOOL bModifier,
+ FX_BOOL bShift,
+ CPDFSDK_Annot* pScreen) = 0;
+ virtual void OnScreen_MouseUp(FX_BOOL bModifier,
+ FX_BOOL bShift,
+ CPDFSDK_Annot* pScreen) = 0;
+ virtual void OnScreen_MouseEnter(FX_BOOL bModifier,
+ FX_BOOL bShift,
+ CPDFSDK_Annot* pScreen) = 0;
+ virtual void OnScreen_MouseExit(FX_BOOL bModifier,
+ FX_BOOL bShift,
+ CPDFSDK_Annot* pScreen) = 0;
+ virtual void OnScreen_InView(FX_BOOL bModifier,
+ FX_BOOL bShift,
+ CPDFSDK_Annot* pScreen) = 0;
+ virtual void OnScreen_OutView(FX_BOOL bModifier,
+ FX_BOOL bShift,
+ CPDFSDK_Annot* pScreen) = 0;
+
+ virtual void OnBookmark_MouseUp(CPDF_Bookmark* pBookMark) = 0;
+ virtual void OnLink_MouseUp(CPDFSDK_Document* pTarget) = 0;
+
+ virtual void OnMenu_Exec(CPDFSDK_Document* pTarget,
+ const CFX_WideString&) = 0;
+ virtual void OnBatchExec(CPDFSDK_Document* pTarget) = 0;
+ virtual void OnConsole_Exec() = 0;
+ virtual void OnExternal_Exec() = 0;
+
+ virtual void EnableMessageBox(FX_BOOL bEnable) = 0;
};
-class IFXJS_Runtime
-{
-public:
- virtual IFXJS_Context* NewContext() = 0;
- virtual void ReleaseContext(IFXJS_Context * pContext) = 0;
- virtual IFXJS_Context* GetCurrentContext() = 0;
+class IFXJS_Runtime {
+ public:
+ virtual IFXJS_Context* NewContext() = 0;
+ virtual void ReleaseContext(IFXJS_Context* pContext) = 0;
+ virtual IFXJS_Context* GetCurrentContext() = 0;
- virtual void SetReaderDocument(CPDFSDK_Document* pReaderDoc) = 0;
- virtual CPDFSDK_Document* GetReaderDocument() = 0;
+ virtual void SetReaderDocument(CPDFSDK_Document* pReaderDoc) = 0;
+ virtual CPDFSDK_Document* GetReaderDocument() = 0;
-protected:
- ~IFXJS_Runtime() { }
+ protected:
+ ~IFXJS_Runtime() {}
};
class CPDFDoc_Environment;
class CJS_GlobalData;
-class CJS_RuntimeFactory
-{
-public:
- CJS_RuntimeFactory():m_bInit(FALSE),m_nRef(0),m_pGlobalData(NULL),m_nGlobalDataCount(0) {}
- ~CJS_RuntimeFactory();
- IFXJS_Runtime* NewJSRuntime(CPDFDoc_Environment* pApp);
- void DeleteJSRuntime(IFXJS_Runtime* pRuntime);
- void AddRef();
- void Release();
-
- CJS_GlobalData* NewGlobalData(CPDFDoc_Environment* pApp);
- void ReleaseGlobalData();
-private:
- FX_BOOL m_bInit;
- int m_nRef;
- CJS_GlobalData* m_pGlobalData;
- int32_t m_nGlobalDataCount;
+class CJS_RuntimeFactory {
+ public:
+ CJS_RuntimeFactory()
+ : m_bInit(FALSE), m_nRef(0), m_pGlobalData(NULL), m_nGlobalDataCount(0) {}
+ ~CJS_RuntimeFactory();
+ IFXJS_Runtime* NewJSRuntime(CPDFDoc_Environment* pApp);
+ void DeleteJSRuntime(IFXJS_Runtime* pRuntime);
+ void AddRef();
+ void Release();
+
+ CJS_GlobalData* NewGlobalData(CPDFDoc_Environment* pApp);
+ void ReleaseGlobalData();
+
+ private:
+ FX_BOOL m_bInit;
+ int m_nRef;
+ CJS_GlobalData* m_pGlobalData;
+ int32_t m_nGlobalDataCount;
};
#endif // FPDFSDK_INCLUDE_JAVASCRIPT_IJAVASCRIPT_H_
diff --git a/fpdfsdk/include/javascript/Icon.h b/fpdfsdk/include/javascript/Icon.h
index 0298005f00..0b549ec613 100644
--- a/fpdfsdk/include/javascript/Icon.h
+++ b/fpdfsdk/include/javascript/Icon.h
@@ -9,32 +9,30 @@
#include "JS_Define.h"
-class Icon : public CJS_EmbedObj
-{
-public:
- Icon(CJS_Object* pJSObject);
- virtual ~Icon();
- FX_BOOL name(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- void SetStream(CPDF_Stream* pIconStream);
- CPDF_Stream* GetStream();
- void SetIconName(CFX_WideString name);
- CFX_WideString GetIconName();
-
-private:
- CPDF_Stream* m_pIconStream;
- CFX_WideString m_swIconName;
+class Icon : public CJS_EmbedObj {
+ public:
+ Icon(CJS_Object* pJSObject);
+ virtual ~Icon();
+ FX_BOOL name(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
+ void SetStream(CPDF_Stream* pIconStream);
+ CPDF_Stream* GetStream();
+ void SetIconName(CFX_WideString name);
+ CFX_WideString GetIconName();
+
+ private:
+ CPDF_Stream* m_pIconStream;
+ CFX_WideString m_swIconName;
};
-class CJS_Icon : public CJS_Object
-{
-public:
- CJS_Icon(JSFXObject pObject) : CJS_Object(pObject){};
- virtual ~CJS_Icon(){};
+class CJS_Icon : public CJS_Object {
+ public:
+ CJS_Icon(JSFXObject pObject) : CJS_Object(pObject){};
+ virtual ~CJS_Icon(){};
-public:
- DECLARE_JS_CLASS(CJS_Icon);
+ public:
+ DECLARE_JS_CLASS(CJS_Icon);
- JS_STATIC_PROP(name, Icon);
+ JS_STATIC_PROP(name, Icon);
};
#endif // FPDFSDK_INCLUDE_JAVASCRIPT_ICON_H_
diff --git a/fpdfsdk/include/javascript/JS_Context.h b/fpdfsdk/include/javascript/JS_Context.h
index 2e2cf37a5e..f61f37cdc6 100644
--- a/fpdfsdk/include/javascript/JS_Context.h
+++ b/fpdfsdk/include/javascript/JS_Context.h
@@ -14,84 +14,138 @@
class CJS_EventHandler;
class CJS_Runtime;
-class CJS_Context : public IFXJS_Context
-{
-public:
- CJS_Context(CJS_Runtime* pRuntime);
- virtual ~CJS_Context();
-
-public:
- virtual FX_BOOL Compile(const CFX_WideString& script, CFX_WideString& info);
- virtual FX_BOOL RunScript(const CFX_WideString& script, CFX_WideString& info);
-
-public:
- virtual void OnApp_Init();
-
- virtual void OnDoc_Open(CPDFSDK_Document* pDoc, const CFX_WideString& strTargetName);
- virtual void OnDoc_WillPrint(CPDFSDK_Document* pDoc);
- virtual void OnDoc_DidPrint(CPDFSDK_Document* pDoc);
- virtual void OnDoc_WillSave(CPDFSDK_Document* pDoc);
- virtual void OnDoc_DidSave(CPDFSDK_Document* pDoc);
- virtual void OnDoc_WillClose(CPDFSDK_Document* pDoc);
-
- virtual void OnPage_Open(CPDFSDK_Document* pTarget);
- virtual void OnPage_Close(CPDFSDK_Document* pTarget);
- virtual void OnPage_InView(CPDFSDK_Document* pTarget);
- virtual void OnPage_OutView(CPDFSDK_Document* pTarget);
-
- virtual void OnField_MouseDown(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField *pTarget);
- virtual void OnField_MouseEnter(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField *pTarget);
- virtual void OnField_MouseExit(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField *pTarget);
- virtual void OnField_MouseUp(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField *pTarget);
- virtual void OnField_Focus(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField* pTarget, const CFX_WideString& Value);
- virtual void OnField_Blur(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField* pTarget, const CFX_WideString& Value);
-
- virtual void OnField_Calculate(CPDF_FormField* pSource, CPDF_FormField* pTarget, CFX_WideString& Value, FX_BOOL& bRc);
- virtual void OnField_Format(CPDF_FormField* pTarget, CFX_WideString& Value, FX_BOOL bWillCommit);
- virtual void OnField_Keystroke(CFX_WideString& strChange, const CFX_WideString& strChangeEx,
- FX_BOOL bKeyDown, FX_BOOL bModifier, int &nSelEnd,int &nSelStart, FX_BOOL bShift,
- CPDF_FormField* pTarget, CFX_WideString& Value, FX_BOOL bWillCommit,
- FX_BOOL bFieldFull, FX_BOOL &bRc);
- virtual void OnField_Validate(CFX_WideString& strChange, const CFX_WideString& strChangeEx, FX_BOOL bKeyDown,
- FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField* pTarget, CFX_WideString& Value, FX_BOOL& bRc);
-
- virtual void OnScreen_Focus(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen);
- virtual void OnScreen_Blur(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen);
- virtual void OnScreen_Open(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen);
- virtual void OnScreen_Close(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen);
- virtual void OnScreen_MouseDown(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen);
- virtual void OnScreen_MouseUp(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen);
- virtual void OnScreen_MouseEnter(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen);
- virtual void OnScreen_MouseExit(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen);
- virtual void OnScreen_InView(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen);
- virtual void OnScreen_OutView(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen);
-
- virtual void OnBookmark_MouseUp(CPDF_Bookmark* pBookMark);
- virtual void OnLink_MouseUp(CPDFSDK_Document* pTarget);
-
- virtual void OnMenu_Exec(CPDFSDK_Document* pTarget, const CFX_WideString& strTargetName);
- virtual void OnBatchExec(CPDFSDK_Document* pTarget);
- virtual void OnConsole_Exec();
- virtual void OnExternal_Exec();
-
- virtual void EnableMessageBox(FX_BOOL bEnable) {m_bMsgBoxEnable = bEnable;}
- FX_BOOL IsMsgBoxEnabled() const {return m_bMsgBoxEnable;}
-
-public:
- CPDFDoc_Environment* GetReaderApp();
- CJS_Runtime* GetJSRuntime(){return m_pRuntime;}
-
- FX_BOOL DoJob(int nMode, const CFX_WideString& script, CFX_WideString& info);
-
- CJS_EventHandler* GetEventHandler(){return m_pEventHandler;};
- CPDFSDK_Document* GetReaderDocument();
-
-private:
- CJS_Runtime* m_pRuntime;
- CJS_EventHandler* m_pEventHandler;
-
- FX_BOOL m_bBusy;
- FX_BOOL m_bMsgBoxEnable;
+class CJS_Context : public IFXJS_Context {
+ public:
+ CJS_Context(CJS_Runtime* pRuntime);
+ virtual ~CJS_Context();
+
+ public:
+ virtual FX_BOOL Compile(const CFX_WideString& script, CFX_WideString& info);
+ virtual FX_BOOL RunScript(const CFX_WideString& script, CFX_WideString& info);
+
+ public:
+ virtual void OnApp_Init();
+
+ virtual void OnDoc_Open(CPDFSDK_Document* pDoc,
+ const CFX_WideString& strTargetName);
+ virtual void OnDoc_WillPrint(CPDFSDK_Document* pDoc);
+ virtual void OnDoc_DidPrint(CPDFSDK_Document* pDoc);
+ virtual void OnDoc_WillSave(CPDFSDK_Document* pDoc);
+ virtual void OnDoc_DidSave(CPDFSDK_Document* pDoc);
+ virtual void OnDoc_WillClose(CPDFSDK_Document* pDoc);
+
+ virtual void OnPage_Open(CPDFSDK_Document* pTarget);
+ virtual void OnPage_Close(CPDFSDK_Document* pTarget);
+ virtual void OnPage_InView(CPDFSDK_Document* pTarget);
+ virtual void OnPage_OutView(CPDFSDK_Document* pTarget);
+
+ virtual void OnField_MouseDown(FX_BOOL bModifier,
+ FX_BOOL bShift,
+ CPDF_FormField* pTarget);
+ virtual void OnField_MouseEnter(FX_BOOL bModifier,
+ FX_BOOL bShift,
+ CPDF_FormField* pTarget);
+ virtual void OnField_MouseExit(FX_BOOL bModifier,
+ FX_BOOL bShift,
+ CPDF_FormField* pTarget);
+ virtual void OnField_MouseUp(FX_BOOL bModifier,
+ FX_BOOL bShift,
+ CPDF_FormField* pTarget);
+ virtual void OnField_Focus(FX_BOOL bModifier,
+ FX_BOOL bShift,
+ CPDF_FormField* pTarget,
+ const CFX_WideString& Value);
+ virtual void OnField_Blur(FX_BOOL bModifier,
+ FX_BOOL bShift,
+ CPDF_FormField* pTarget,
+ const CFX_WideString& Value);
+
+ virtual void OnField_Calculate(CPDF_FormField* pSource,
+ CPDF_FormField* pTarget,
+ CFX_WideString& Value,
+ FX_BOOL& bRc);
+ virtual void OnField_Format(CPDF_FormField* pTarget,
+ CFX_WideString& Value,
+ FX_BOOL bWillCommit);
+ virtual void OnField_Keystroke(CFX_WideString& strChange,
+ const CFX_WideString& strChangeEx,
+ FX_BOOL bKeyDown,
+ FX_BOOL bModifier,
+ int& nSelEnd,
+ int& nSelStart,
+ FX_BOOL bShift,
+ CPDF_FormField* pTarget,
+ CFX_WideString& Value,
+ FX_BOOL bWillCommit,
+ FX_BOOL bFieldFull,
+ FX_BOOL& bRc);
+ virtual void OnField_Validate(CFX_WideString& strChange,
+ const CFX_WideString& strChangeEx,
+ FX_BOOL bKeyDown,
+ FX_BOOL bModifier,
+ FX_BOOL bShift,
+ CPDF_FormField* pTarget,
+ CFX_WideString& Value,
+ FX_BOOL& bRc);
+
+ virtual void OnScreen_Focus(FX_BOOL bModifier,
+ FX_BOOL bShift,
+ CPDFSDK_Annot* pScreen);
+ virtual void OnScreen_Blur(FX_BOOL bModifier,
+ FX_BOOL bShift,
+ CPDFSDK_Annot* pScreen);
+ virtual void OnScreen_Open(FX_BOOL bModifier,
+ FX_BOOL bShift,
+ CPDFSDK_Annot* pScreen);
+ virtual void OnScreen_Close(FX_BOOL bModifier,
+ FX_BOOL bShift,
+ CPDFSDK_Annot* pScreen);
+ virtual void OnScreen_MouseDown(FX_BOOL bModifier,
+ FX_BOOL bShift,
+ CPDFSDK_Annot* pScreen);
+ virtual void OnScreen_MouseUp(FX_BOOL bModifier,
+ FX_BOOL bShift,
+ CPDFSDK_Annot* pScreen);
+ virtual void OnScreen_MouseEnter(FX_BOOL bModifier,
+ FX_BOOL bShift,
+ CPDFSDK_Annot* pScreen);
+ virtual void OnScreen_MouseExit(FX_BOOL bModifier,
+ FX_BOOL bShift,
+ CPDFSDK_Annot* pScreen);
+ virtual void OnScreen_InView(FX_BOOL bModifier,
+ FX_BOOL bShift,
+ CPDFSDK_Annot* pScreen);
+ virtual void OnScreen_OutView(FX_BOOL bModifier,
+ FX_BOOL bShift,
+ CPDFSDK_Annot* pScreen);
+
+ virtual void OnBookmark_MouseUp(CPDF_Bookmark* pBookMark);
+ virtual void OnLink_MouseUp(CPDFSDK_Document* pTarget);
+
+ virtual void OnMenu_Exec(CPDFSDK_Document* pTarget,
+ const CFX_WideString& strTargetName);
+ virtual void OnBatchExec(CPDFSDK_Document* pTarget);
+ virtual void OnConsole_Exec();
+ virtual void OnExternal_Exec();
+
+ virtual void EnableMessageBox(FX_BOOL bEnable) { m_bMsgBoxEnable = bEnable; }
+ FX_BOOL IsMsgBoxEnabled() const { return m_bMsgBoxEnable; }
+
+ public:
+ CPDFDoc_Environment* GetReaderApp();
+ CJS_Runtime* GetJSRuntime() { return m_pRuntime; }
+
+ FX_BOOL DoJob(int nMode, const CFX_WideString& script, CFX_WideString& info);
+
+ CJS_EventHandler* GetEventHandler() { return m_pEventHandler; };
+ CPDFSDK_Document* GetReaderDocument();
+
+ private:
+ CJS_Runtime* m_pRuntime;
+ CJS_EventHandler* m_pEventHandler;
+
+ FX_BOOL m_bBusy;
+ FX_BOOL m_bMsgBoxEnable;
};
#endif // FPDFSDK_INCLUDE_JAVASCRIPT_JS_CONTEXT_H_
diff --git a/fpdfsdk/include/javascript/JS_Define.h b/fpdfsdk/include/javascript/JS_Define.h
index f1b36bf3d0..0c020b6734 100644
--- a/fpdfsdk/include/javascript/JS_Define.h
+++ b/fpdfsdk/include/javascript/JS_Define.h
@@ -12,46 +12,70 @@
#include "JS_Object.h"
#include "JS_Value.h"
-struct JSConstSpec
-{
- const wchar_t* pName;
- double number;
- const wchar_t* string;
- uint8_t t; //0:double 1:str
+struct JSConstSpec {
+ const wchar_t* pName;
+ double number;
+ const wchar_t* string;
+ uint8_t t; // 0:double 1:str
};
-struct JSPropertySpec
-{
- const wchar_t* pName;
- v8::AccessorGetterCallback pPropGet;
- v8::AccessorSetterCallback pPropPut;
+struct JSPropertySpec {
+ const wchar_t* pName;
+ v8::AccessorGetterCallback pPropGet;
+ v8::AccessorSetterCallback pPropPut;
};
-struct JSMethodSpec
-{
- const wchar_t* pName;
- v8::FunctionCallback pMethodCall;
+struct JSMethodSpec {
+ const wchar_t* pName;
+ v8::FunctionCallback pMethodCall;
};
-/* ====================================== PUBLIC DEFINE SPEC ============================================== */
-#define JS_WIDESTRING(widestring) L###widestring
-
-#define BEGIN_JS_STATIC_CONST(js_class_name) JSConstSpec js_class_name::JS_Class_Consts[] = {
-#define JS_STATIC_CONST_ENTRY_NUMBER(const_name, pValue) {JS_WIDESTRING(const_name), pValue, L"", 0},
-#define JS_STATIC_CONST_ENTRY_STRING(const_name, pValue) {JS_WIDESTRING(const_name), 0, JS_WIDESTRING(pValue), 1},
-#define END_JS_STATIC_CONST() {0, 0, 0, 0}};
-
-#define BEGIN_JS_STATIC_PROP(js_class_name) JSPropertySpec js_class_name::JS_Class_Properties[] = {
-#define JS_STATIC_PROP_ENTRY(prop_name) {JS_WIDESTRING(prop_name), get_##prop_name##_static, set_##prop_name##_static},
-#define END_JS_STATIC_PROP() {0, 0, 0}};
-
-#define BEGIN_JS_STATIC_METHOD(js_class_name) JSMethodSpec js_class_name::JS_Class_Methods[] = {
-#define JS_STATIC_METHOD_ENTRY(method_name) {JS_WIDESTRING(method_name), method_name##_static},
-#define END_JS_STATIC_METHOD() {0, 0}};
-
-/* ======================================== PROP CALLBACK ============================================ */
-
-template <class C, FX_BOOL (C::*M)(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)>
+/* ====================================== PUBLIC DEFINE SPEC
+ * ============================================== */
+#define JS_WIDESTRING(widestring) L## #widestring
+
+#define BEGIN_JS_STATIC_CONST(js_class_name) \
+ JSConstSpec js_class_name::JS_Class_Consts[] = {
+#define JS_STATIC_CONST_ENTRY_NUMBER(const_name, pValue) \
+ { JS_WIDESTRING(const_name), pValue, L"", 0 } \
+ ,
+#define JS_STATIC_CONST_ENTRY_STRING(const_name, pValue) \
+ { JS_WIDESTRING(const_name), 0, JS_WIDESTRING(pValue), 1 } \
+ ,
+#define END_JS_STATIC_CONST() \
+ { 0, 0, 0, 0 } \
+ } \
+ ;
+
+#define BEGIN_JS_STATIC_PROP(js_class_name) \
+ JSPropertySpec js_class_name::JS_Class_Properties[] = {
+#define JS_STATIC_PROP_ENTRY(prop_name) \
+ { \
+ JS_WIDESTRING(prop_name), get_##prop_name##_static, set_##prop_name##_static \
+ } \
+ ,
+#define END_JS_STATIC_PROP() \
+ { 0, 0, 0 } \
+ } \
+ ;
+
+#define BEGIN_JS_STATIC_METHOD(js_class_name) \
+ JSMethodSpec js_class_name::JS_Class_Methods[] = {
+#define JS_STATIC_METHOD_ENTRY(method_name) \
+ { JS_WIDESTRING(method_name), method_name##_static } \
+ ,
+#define END_JS_STATIC_METHOD() \
+ { 0, 0 } \
+ } \
+ ;
+
+/* ======================================== PROP CALLBACK
+ * ============================================ */
+
+template <class C,
+ FX_BOOL (C::*M)(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError)>
void JSPropGetter(const char* prop_name_string,
const char* class_name_string,
v8::Local<v8::String> property,
@@ -62,19 +86,23 @@ void JSPropGetter(const char* prop_name_string,
v8::Local<v8::External> field = v8::Local<v8::External>::Cast(v);
IFXJS_Runtime* pRuntime = (IFXJS_Runtime*)field->Value();
IFXJS_Context* pContext = pRuntime->GetCurrentContext();
- CJS_Object* pJSObj = (CJS_Object*)JS_GetPrivate(isolate,info.Holder());
+ CJS_Object* pJSObj = (CJS_Object*)JS_GetPrivate(isolate, info.Holder());
C* pObj = reinterpret_cast<C*>(pJSObj->GetEmbedObject());
CFX_WideString sError;
CJS_PropValue value(isolate);
value.StartGetting();
if (!(pObj->*M)(pContext, value, sError)) {
- JS_Error(isolate, JSFormatErrorString(class_name_string, prop_name_string, sError));
+ JS_Error(isolate,
+ JSFormatErrorString(class_name_string, prop_name_string, sError));
return;
}
info.GetReturnValue().Set((v8::Local<v8::Value>)value);
}
-template <class C, FX_BOOL (C::*M)(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)>
+template <class C,
+ FX_BOOL (C::*M)(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError)>
void JSPropSetter(const char* prop_name_string,
const char* class_name_string,
v8::Local<v8::String> property,
@@ -86,34 +114,39 @@ void JSPropSetter(const char* prop_name_string,
v8::Local<v8::External> field = v8::Local<v8::External>::Cast(v);
IFXJS_Runtime* pRuntime = (IFXJS_Runtime*)field->Value();
IFXJS_Context* pContext = pRuntime->GetCurrentContext();
- CJS_Object* pJSObj = (CJS_Object*)JS_GetPrivate(isolate,info.Holder());
+ CJS_Object* pJSObj = (CJS_Object*)JS_GetPrivate(isolate, info.Holder());
C* pObj = reinterpret_cast<C*>(pJSObj->GetEmbedObject());
CFX_WideString sError;
CJS_PropValue propValue(CJS_Value(isolate, value, VT_unknown));
propValue.StartSetting();
if (!(pObj->*M)(pContext, propValue, sError)) {
- JS_Error(isolate, JSFormatErrorString(class_name_string, prop_name_string, sError));
+ JS_Error(isolate,
+ JSFormatErrorString(class_name_string, prop_name_string, sError));
}
}
-#define JS_STATIC_PROP(prop_name, class_name) \
- static void get_##prop_name##_static( \
- v8::Local<v8::String> property, \
- const v8::PropertyCallbackInfo<v8::Value>& info) { \
- JSPropGetter<class_name, &class_name::prop_name>( \
- #prop_name, #class_name, property, info); \
- } \
- static void set_##prop_name##_static( \
- v8::Local<v8::String> property, \
- v8::Local<v8::Value> value, \
- const v8::PropertyCallbackInfo<void>& info) { \
- JSPropSetter<class_name, &class_name::prop_name>( \
- #prop_name, #class_name, property, value, info); \
+#define JS_STATIC_PROP(prop_name, class_name) \
+ static void get_##prop_name##_static( \
+ v8::Local<v8::String> property, \
+ const v8::PropertyCallbackInfo<v8::Value>& info) { \
+ JSPropGetter<class_name, &class_name::prop_name>(#prop_name, #class_name, \
+ property, info); \
+ } \
+ static void set_##prop_name##_static( \
+ v8::Local<v8::String> property, v8::Local<v8::Value> value, \
+ const v8::PropertyCallbackInfo<void>& info) { \
+ JSPropSetter<class_name, &class_name::prop_name>(#prop_name, #class_name, \
+ property, value, info); \
}
-/* ========================================= METHOD CALLBACK =========================================== */
+/* ========================================= METHOD CALLBACK
+ * =========================================== */
-template <class C, FX_BOOL (C::*M)(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)>
+template <class C,
+ FX_BOOL (C::*M)(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError)>
void JSMethod(const char* method_name_string,
const char* class_name_string,
const v8::FunctionCallbackInfo<v8::Value>& info) {
@@ -124,121 +157,140 @@ void JSMethod(const char* method_name_string,
IFXJS_Runtime* pRuntime = (IFXJS_Runtime*)field->Value();
IFXJS_Context* cc = pRuntime->GetCurrentContext();
CJS_Parameters parameters;
- for (unsigned int i = 0; i<(unsigned int)info.Length(); i++) {
+ for (unsigned int i = 0; i < (unsigned int)info.Length(); i++) {
parameters.push_back(CJS_Value(isolate, info[i], VT_unknown));
}
CJS_Value valueRes(isolate);
- CJS_Object* pJSObj = (CJS_Object *)JS_GetPrivate(isolate,info.Holder());
+ CJS_Object* pJSObj = (CJS_Object*)JS_GetPrivate(isolate, info.Holder());
C* pObj = reinterpret_cast<C*>(pJSObj->GetEmbedObject());
CFX_WideString sError;
if (!(pObj->*M)(cc, parameters, valueRes, sError)) {
- JS_Error(isolate, JSFormatErrorString(class_name_string, method_name_string, sError));
+ JS_Error(isolate, JSFormatErrorString(class_name_string, method_name_string,
+ sError));
return;
}
info.GetReturnValue().Set(valueRes.ToV8Value());
}
-#define JS_STATIC_METHOD(method_name, class_name) \
- static void method_name##_static( \
- const v8::FunctionCallbackInfo<v8::Value>& info) { \
- JSMethod<class_name, &class_name::method_name>( \
- #method_name, #class_name, info); \
+#define JS_STATIC_METHOD(method_name, class_name) \
+ static void method_name##_static( \
+ const v8::FunctionCallbackInfo<v8::Value>& info) { \
+ JSMethod<class_name, &class_name::method_name>(#method_name, #class_name, \
+ info); \
}
#define JS_SPECIAL_STATIC_METHOD(method_name, class_alternate, class_name) \
- static void method_name##_static( \
- const v8::FunctionCallbackInfo<v8::Value>& info) { \
- JSMethod<class_alternate, &class_alternate::method_name>( \
- #method_name, #class_name, info); \
+ static void method_name##_static( \
+ const v8::FunctionCallbackInfo<v8::Value>& info) { \
+ JSMethod<class_alternate, &class_alternate::method_name>( \
+ #method_name, #class_name, info); \
}
-/* ===================================== JS CLASS =============================================== */
-
-#define DECLARE_JS_CLASS(js_class_name) \
- static void JSConstructor(IFXJS_Context* cc, JSFXObject obj,JSFXObject global);\
- static void JSDestructor(JSFXObject obj);\
- static int Init(IJS_Runtime* pRuntime, FXJSOBJTYPE eObjType);\
- static JSConstSpec JS_Class_Consts[];\
- static JSPropertySpec JS_Class_Properties[];\
- static JSMethodSpec JS_Class_Methods[];\
- static const wchar_t* m_pClassName
-
-#define IMPLEMENT_JS_CLASS_RICH(js_class_name, class_alternate, class_name) \
-const wchar_t* js_class_name::m_pClassName = JS_WIDESTRING(class_name);\
-void js_class_name::JSConstructor(IFXJS_Context* cc, JSFXObject obj, JSFXObject global)\
-{\
- CJS_Object* pObj = new js_class_name(obj);\
- pObj->SetEmbedObject(new class_alternate(pObj));\
- JS_SetPrivate(NULL,obj,(void*)pObj); \
- pObj->InitInstance(cc);\
-}\
-\
-void js_class_name::JSDestructor(JSFXObject obj) \
-{\
- js_class_name* pObj = (js_class_name*)JS_GetPrivate(NULL,obj);\
- ASSERT(pObj != NULL);\
- pObj->ExitInstance();\
- delete pObj;\
-}\
-\
-int js_class_name::Init(IJS_Runtime* pRuntime, FXJSOBJTYPE eObjType)\
-{\
- int nObjDefnID = JS_DefineObj(pRuntime, js_class_name::m_pClassName, eObjType, JSConstructor, JSDestructor);\
- if (nObjDefnID >= 0)\
- {\
- for (int j=0, szj=sizeof(JS_Class_Properties)/sizeof(JSPropertySpec)-1; j<szj; j++)\
- {\
- if (JS_DefineObjProperty(pRuntime, nObjDefnID, JS_Class_Properties[j].pName, JS_Class_Properties[j].pPropGet, JS_Class_Properties[j].pPropPut) < 0) return -1;\
- }\
- for (int k=0, szk=sizeof(JS_Class_Methods)/sizeof(JSMethodSpec)-1; k<szk; k++)\
- {\
- if (JS_DefineObjMethod(pRuntime, nObjDefnID,JS_Class_Methods[k].pName, JS_Class_Methods[k].pMethodCall) < 0) return -1;\
- }\
- return nObjDefnID;\
- }\
- return -1;\
-}
+/* ===================================== JS CLASS
+ * =============================================== */
+
+#define DECLARE_JS_CLASS(js_class_name) \
+ static void JSConstructor(IFXJS_Context* cc, JSFXObject obj, \
+ JSFXObject global); \
+ static void JSDestructor(JSFXObject obj); \
+ static int Init(IJS_Runtime* pRuntime, FXJSOBJTYPE eObjType); \
+ static JSConstSpec JS_Class_Consts[]; \
+ static JSPropertySpec JS_Class_Properties[]; \
+ static JSMethodSpec JS_Class_Methods[]; \
+ static const wchar_t* m_pClassName
+
+#define IMPLEMENT_JS_CLASS_RICH(js_class_name, class_alternate, class_name) \
+ const wchar_t* js_class_name::m_pClassName = JS_WIDESTRING(class_name); \
+ void js_class_name::JSConstructor(IFXJS_Context* cc, JSFXObject obj, \
+ JSFXObject global) { \
+ CJS_Object* pObj = new js_class_name(obj); \
+ pObj->SetEmbedObject(new class_alternate(pObj)); \
+ JS_SetPrivate(NULL, obj, (void*)pObj); \
+ pObj->InitInstance(cc); \
+ } \
+ \
+ void js_class_name::JSDestructor(JSFXObject obj) { \
+ js_class_name* pObj = (js_class_name*)JS_GetPrivate(NULL, obj); \
+ ASSERT(pObj != NULL); \
+ pObj->ExitInstance(); \
+ delete pObj; \
+ } \
+ \
+ int js_class_name::Init(IJS_Runtime* pRuntime, FXJSOBJTYPE eObjType) { \
+ int nObjDefnID = JS_DefineObj(pRuntime, js_class_name::m_pClassName, \
+ eObjType, JSConstructor, JSDestructor); \
+ if (nObjDefnID >= 0) { \
+ for (int j = 0, \
+ szj = sizeof(JS_Class_Properties) / sizeof(JSPropertySpec) - 1; \
+ j < szj; j++) { \
+ if (JS_DefineObjProperty(pRuntime, nObjDefnID, \
+ JS_Class_Properties[j].pName, \
+ JS_Class_Properties[j].pPropGet, \
+ JS_Class_Properties[j].pPropPut) < 0) \
+ return -1; \
+ } \
+ for (int k = 0, \
+ szk = sizeof(JS_Class_Methods) / sizeof(JSMethodSpec) - 1; \
+ k < szk; k++) { \
+ if (JS_DefineObjMethod(pRuntime, nObjDefnID, \
+ JS_Class_Methods[k].pName, \
+ JS_Class_Methods[k].pMethodCall) < 0) \
+ return -1; \
+ } \
+ return nObjDefnID; \
+ } \
+ return -1; \
+ }
-#define IMPLEMENT_JS_CLASS(js_class_name, class_name) IMPLEMENT_JS_CLASS_RICH(js_class_name, class_name, class_name)
-
-/* ======================================== CONST CLASS ============================================ */
-
-#define DECLARE_JS_CLASS_CONST() \
- static int Init(IJS_Runtime* pRuntime, FXJSOBJTYPE eObjType);\
- static JSConstSpec JS_Class_Consts[];\
- static const wchar_t* m_pClassName
-
-#define IMPLEMENT_JS_CLASS_CONST(js_class_name, class_name) \
-const wchar_t* js_class_name::m_pClassName = JS_WIDESTRING(class_name);\
-int js_class_name::Init(IJS_Runtime* pRuntime, FXJSOBJTYPE eObjType)\
-{\
- int nObjDefnID = JS_DefineObj(pRuntime, js_class_name::m_pClassName, eObjType, NULL, NULL);\
- if (nObjDefnID >=0)\
- {\
- for (int i=0, sz=sizeof(JS_Class_Consts)/sizeof(JSConstSpec)-1; i<sz; i++)\
- {\
- if (JS_Class_Consts[i].t == 0)\
- {\
- if (JS_DefineObjConst(pRuntime, nObjDefnID, JS_Class_Consts[i].pName, JS_NewNumber(pRuntime,JS_Class_Consts[i].number)) < 0) return -1;\
- }\
- else\
- {\
- if (JS_DefineObjConst(pRuntime, nObjDefnID, JS_Class_Consts[i].pName, JS_NewString(pRuntime,JS_Class_Consts[i].string)) < 0) return -1;\
- }\
- }\
- return nObjDefnID;\
- }\
- return -1;\
-}
+#define IMPLEMENT_JS_CLASS(js_class_name, class_name) \
+ IMPLEMENT_JS_CLASS_RICH(js_class_name, class_name, class_name)
+
+/* ======================================== CONST CLASS
+ * ============================================ */
+
+#define DECLARE_JS_CLASS_CONST() \
+ static int Init(IJS_Runtime* pRuntime, FXJSOBJTYPE eObjType); \
+ static JSConstSpec JS_Class_Consts[]; \
+ static const wchar_t* m_pClassName
+
+#define IMPLEMENT_JS_CLASS_CONST(js_class_name, class_name) \
+ const wchar_t* js_class_name::m_pClassName = JS_WIDESTRING(class_name); \
+ int js_class_name::Init(IJS_Runtime* pRuntime, FXJSOBJTYPE eObjType) { \
+ int nObjDefnID = JS_DefineObj(pRuntime, js_class_name::m_pClassName, \
+ eObjType, NULL, NULL); \
+ if (nObjDefnID >= 0) { \
+ for (int i = 0, sz = sizeof(JS_Class_Consts) / sizeof(JSConstSpec) - 1; \
+ i < sz; i++) { \
+ if (JS_Class_Consts[i].t == 0) { \
+ if (JS_DefineObjConst( \
+ pRuntime, nObjDefnID, JS_Class_Consts[i].pName, \
+ JS_NewNumber(pRuntime, JS_Class_Consts[i].number)) < 0) \
+ return -1; \
+ } else { \
+ if (JS_DefineObjConst( \
+ pRuntime, nObjDefnID, JS_Class_Consts[i].pName, \
+ JS_NewString(pRuntime, JS_Class_Consts[i].string)) < 0) \
+ return -1; \
+ } \
+ } \
+ return nObjDefnID; \
+ } \
+ return -1; \
+ }
-/* ===================================== SPECIAL JS CLASS =============================================== */
+/* ===================================== SPECIAL JS CLASS
+ * =============================================== */
template <class Alt>
-void JSSpecialPropQuery(const char *, v8::Local<v8::String> property,const v8::PropertyCallbackInfo<v8::Integer>& info) {
+void JSSpecialPropQuery(const char*,
+ v8::Local<v8::String> property,
+ const v8::PropertyCallbackInfo<v8::Integer>& info) {
v8::Isolate* isolate = info.GetIsolate();
v8::String::Utf8Value utf8_value(property);
- CFX_WideString propname = CFX_WideString::FromUTF8(*utf8_value, utf8_value.length());
- CJS_Object* pJSObj = reinterpret_cast<CJS_Object*>(JS_GetPrivate(isolate, info.Holder()));
+ CFX_WideString propname =
+ CFX_WideString::FromUTF8(*utf8_value, utf8_value.length());
+ CJS_Object* pJSObj =
+ reinterpret_cast<CJS_Object*>(JS_GetPrivate(isolate, info.Holder()));
Alt* pObj = reinterpret_cast<Alt*>(pJSObj->GetEmbedObject());
FX_BOOL bRet = pObj->QueryProperty(propname.c_str());
info.GetReturnValue().Set(bRet ? 4 : 0);
@@ -254,16 +306,18 @@ void JSSpecialPropGet(const char* class_name,
v8::Local<v8::External> field = v8::Local<v8::External>::Cast(v);
IFXJS_Runtime* pRuntime = (IFXJS_Runtime*)field->Value();
IFXJS_Context* pRuntimeContext = pRuntime->GetCurrentContext();
- CJS_Object* pJSObj = reinterpret_cast<CJS_Object*>(JS_GetPrivate(isolate, info.Holder()));
+ CJS_Object* pJSObj =
+ reinterpret_cast<CJS_Object*>(JS_GetPrivate(isolate, info.Holder()));
Alt* pObj = reinterpret_cast<Alt*>(pJSObj->GetEmbedObject());
v8::String::Utf8Value utf8_value(property);
- CFX_WideString propname = CFX_WideString::FromUTF8(*utf8_value, utf8_value.length());
+ CFX_WideString propname =
+ CFX_WideString::FromUTF8(*utf8_value, utf8_value.length());
CFX_WideString sError;
CJS_PropValue value(isolate);
value.StartGetting();
if (!pObj->DoProperty(pRuntimeContext, propname.c_str(), value, sError)) {
- JS_Error(isolate, JSFormatErrorString(class_name, "GetProperty", sError));
- return;
+ JS_Error(isolate, JSFormatErrorString(class_name, "GetProperty", sError));
+ return;
}
info.GetReturnValue().Set((v8::Local<v8::Value>)value);
}
@@ -279,15 +333,17 @@ void JSSpecialPropPut(const char* class_name,
v8::Local<v8::External> field = v8::Local<v8::External>::Cast(v);
IFXJS_Runtime* pRuntime = (IFXJS_Runtime*)field->Value();
IFXJS_Context* pRuntimeContext = pRuntime->GetCurrentContext();
- CJS_Object* pJSObj = reinterpret_cast<CJS_Object*>(JS_GetPrivate(isolate, info.Holder()));
+ CJS_Object* pJSObj =
+ reinterpret_cast<CJS_Object*>(JS_GetPrivate(isolate, info.Holder()));
Alt* pObj = reinterpret_cast<Alt*>(pJSObj->GetEmbedObject());
v8::String::Utf8Value utf8_value(property);
- CFX_WideString propname = CFX_WideString::FromUTF8(*utf8_value, utf8_value.length());
+ CFX_WideString propname =
+ CFX_WideString::FromUTF8(*utf8_value, utf8_value.length());
CFX_WideString sError;
- CJS_PropValue PropValue(CJS_Value(isolate,value,VT_unknown));
+ CJS_PropValue PropValue(CJS_Value(isolate, value, VT_unknown));
PropValue.StartSetting();
if (!pObj->DoProperty(pRuntimeContext, propname.c_str(), PropValue, sError)) {
- JS_Error(isolate, JSFormatErrorString(class_name, "PutProperty", sError));
+ JS_Error(isolate, JSFormatErrorString(class_name, "PutProperty", sError));
}
}
@@ -301,10 +357,12 @@ void JSSpecialPropDel(const char* class_name,
v8::Local<v8::External> field = v8::Local<v8::External>::Cast(v);
IFXJS_Runtime* pRuntime = (IFXJS_Runtime*)field->Value();
IFXJS_Context* pRuntimeContext = pRuntime->GetCurrentContext();
- CJS_Object* pJSObj = reinterpret_cast<CJS_Object*>(JS_GetPrivate(isolate, info.Holder()));
+ CJS_Object* pJSObj =
+ reinterpret_cast<CJS_Object*>(JS_GetPrivate(isolate, info.Holder()));
Alt* pObj = reinterpret_cast<Alt*>(pJSObj->GetEmbedObject());
v8::String::Utf8Value utf8_value(property);
- CFX_WideString propname = CFX_WideString::FromUTF8(*utf8_value, utf8_value.length());
+ CFX_WideString propname =
+ CFX_WideString::FromUTF8(*utf8_value, utf8_value.length());
CFX_WideString sError;
if (!pObj->DelProperty(pRuntimeContext, propname.c_str(), sError)) {
CFX_ByteString cbName;
@@ -313,77 +371,110 @@ void JSSpecialPropDel(const char* class_name,
}
}
-#define DECLARE_SPECIAL_JS_CLASS(js_class_name) \
- static void JSConstructor(IFXJS_Context* cc, JSFXObject obj, JSFXObject global);\
- static void JSDestructor(JSFXObject obj);\
- static JSConstSpec JS_Class_Consts[];\
- static JSPropertySpec JS_Class_Properties[];\
- static JSMethodSpec JS_Class_Methods[];\
- static int Init(IJS_Runtime* pRuntime, FXJSOBJTYPE eObjType);\
- static const wchar_t* m_pClassName;\
- static void queryprop_##js_class_name##_static(v8::Local<v8::String> property,const v8::PropertyCallbackInfo<v8::Integer>& info);\
- static void getprop_##js_class_name##_static(v8::Local<v8::String> property, const v8::PropertyCallbackInfo<v8::Value>& info);\
- static void putprop_##js_class_name##_static(v8::Local<v8::String> property,v8::Local<v8::Value> value,const v8::PropertyCallbackInfo<v8::Value>& info);\
- static void delprop_##js_class_name##_static(v8::Local<v8::String> property,const v8::PropertyCallbackInfo<v8::Boolean>& info)
+#define DECLARE_SPECIAL_JS_CLASS(js_class_name) \
+ static void JSConstructor(IFXJS_Context* cc, JSFXObject obj, \
+ JSFXObject global); \
+ static void JSDestructor(JSFXObject obj); \
+ static JSConstSpec JS_Class_Consts[]; \
+ static JSPropertySpec JS_Class_Properties[]; \
+ static JSMethodSpec JS_Class_Methods[]; \
+ static int Init(IJS_Runtime* pRuntime, FXJSOBJTYPE eObjType); \
+ static const wchar_t* m_pClassName; \
+ static void queryprop_##js_class_name##_static( \
+ v8::Local<v8::String> property, \
+ const v8::PropertyCallbackInfo<v8::Integer>& info); \
+ static void getprop_##js_class_name##_static( \
+ v8::Local<v8::String> property, \
+ const v8::PropertyCallbackInfo<v8::Value>& info); \
+ static void putprop_##js_class_name##_static( \
+ v8::Local<v8::String> property, v8::Local<v8::Value> value, \
+ const v8::PropertyCallbackInfo<v8::Value>& info); \
+ static void delprop_##js_class_name##_static( \
+ v8::Local<v8::String> property, \
+ const v8::PropertyCallbackInfo<v8::Boolean>& info)
#define IMPLEMENT_SPECIAL_JS_CLASS(js_class_name, class_alternate, class_name) \
-const wchar_t * js_class_name::m_pClassName = JS_WIDESTRING(class_name);\
-void js_class_name::queryprop_##js_class_name##_static(v8::Local<v8::String> property,const v8::PropertyCallbackInfo<v8::Integer>& info) { \
- JSSpecialPropQuery<class_alternate>(#class_name, property, info); \
-}\
-void js_class_name::getprop_##js_class_name##_static(v8::Local<v8::String> property, const v8::PropertyCallbackInfo<v8::Value>& info) { \
- JSSpecialPropGet<class_alternate>(#class_name, property, info); \
-} \
-void js_class_name::putprop_##js_class_name##_static(v8::Local<v8::String> property,v8::Local<v8::Value> value,const v8::PropertyCallbackInfo<v8::Value>& info) {\
- JSSpecialPropPut<class_alternate>(#class_name, property, value, info); \
-}\
-void js_class_name::delprop_##js_class_name##_static(v8::Local<v8::String> property,const v8::PropertyCallbackInfo<v8::Boolean>& info) { \
- JSSpecialPropDel<class_alternate>(#class_name, property, info); \
-} \
-void js_class_name::JSConstructor(IFXJS_Context* cc, JSFXObject obj,JSFXObject global)\
-{\
- CJS_Object* pObj = new js_class_name(obj);\
- pObj->SetEmbedObject(new class_alternate(pObj));\
- JS_SetPrivate(NULL,obj, (void*)pObj); \
- pObj->InitInstance(cc);\
-}\
-\
-void js_class_name::JSDestructor(JSFXObject obj) \
-{\
- js_class_name* pObj = (js_class_name*)JS_GetPrivate(NULL,obj);\
- ASSERT(pObj != NULL);\
- pObj->ExitInstance();\
- delete pObj;\
-}\
-\
-int js_class_name::Init(IJS_Runtime* pRuntime, FXJSOBJTYPE eObjType)\
-{\
-\
- int nObjDefnID = JS_DefineObj(pRuntime, js_class_name::m_pClassName, eObjType, JSConstructor, JSDestructor);\
-\
- if (nObjDefnID >= 0)\
- {\
- for (int j=0, szj=sizeof(JS_Class_Properties)/sizeof(JSPropertySpec)-1; j<szj; j++)\
- {\
- if (JS_DefineObjProperty(pRuntime, nObjDefnID, JS_Class_Properties[j].pName, JS_Class_Properties[j].pPropGet,JS_Class_Properties[j].pPropPut)<0)return -1;\
- }\
-\
- for (int k=0, szk=sizeof(JS_Class_Methods)/sizeof(JSMethodSpec)-1; k<szk; k++)\
- {\
- if (JS_DefineObjMethod(pRuntime, nObjDefnID,JS_Class_Methods[k].pName,JS_Class_Methods[k].pMethodCall)<0)return -1;\
- }\
- if (JS_DefineObjAllProperties(pRuntime, nObjDefnID, js_class_name::queryprop_##js_class_name##_static, js_class_name::getprop_##js_class_name##_static,js_class_name::putprop_##js_class_name##_static,js_class_name::delprop_##js_class_name##_static)<0) return -1;\
-\
- return nObjDefnID;\
- }\
-\
- return -1;\
-}
+ const wchar_t* js_class_name::m_pClassName = JS_WIDESTRING(class_name); \
+ void js_class_name::queryprop_##js_class_name##_static( \
+ v8::Local<v8::String> property, \
+ const v8::PropertyCallbackInfo<v8::Integer>& info) { \
+ JSSpecialPropQuery<class_alternate>(#class_name, property, info); \
+ } \
+ void js_class_name::getprop_##js_class_name##_static( \
+ v8::Local<v8::String> property, \
+ const v8::PropertyCallbackInfo<v8::Value>& info) { \
+ JSSpecialPropGet<class_alternate>(#class_name, property, info); \
+ } \
+ void js_class_name::putprop_##js_class_name##_static( \
+ v8::Local<v8::String> property, v8::Local<v8::Value> value, \
+ const v8::PropertyCallbackInfo<v8::Value>& info) { \
+ JSSpecialPropPut<class_alternate>(#class_name, property, value, info); \
+ } \
+ void js_class_name::delprop_##js_class_name##_static( \
+ v8::Local<v8::String> property, \
+ const v8::PropertyCallbackInfo<v8::Boolean>& info) { \
+ JSSpecialPropDel<class_alternate>(#class_name, property, info); \
+ } \
+ void js_class_name::JSConstructor(IFXJS_Context* cc, JSFXObject obj, \
+ JSFXObject global) { \
+ CJS_Object* pObj = new js_class_name(obj); \
+ pObj->SetEmbedObject(new class_alternate(pObj)); \
+ JS_SetPrivate(NULL, obj, (void*)pObj); \
+ pObj->InitInstance(cc); \
+ } \
+ \
+ void js_class_name::JSDestructor(JSFXObject obj) { \
+ js_class_name* pObj = (js_class_name*)JS_GetPrivate(NULL, obj); \
+ ASSERT(pObj != NULL); \
+ pObj->ExitInstance(); \
+ delete pObj; \
+ } \
+ \
+ int js_class_name::Init(IJS_Runtime* pRuntime, FXJSOBJTYPE eObjType) { \
+ int nObjDefnID = JS_DefineObj(pRuntime, js_class_name::m_pClassName, \
+ eObjType, JSConstructor, JSDestructor); \
+ \
+ if (nObjDefnID >= 0) { \
+ for (int j = 0, \
+ szj = sizeof(JS_Class_Properties) / sizeof(JSPropertySpec) - 1; \
+ j < szj; j++) { \
+ if (JS_DefineObjProperty(pRuntime, nObjDefnID, \
+ JS_Class_Properties[j].pName, \
+ JS_Class_Properties[j].pPropGet, \
+ JS_Class_Properties[j].pPropPut) < 0) \
+ return -1; \
+ } \
+ \
+ for (int k = 0, \
+ szk = sizeof(JS_Class_Methods) / sizeof(JSMethodSpec) - 1; \
+ k < szk; k++) { \
+ if (JS_DefineObjMethod(pRuntime, nObjDefnID, \
+ JS_Class_Methods[k].pName, \
+ JS_Class_Methods[k].pMethodCall) < 0) \
+ return -1; \
+ } \
+ if (JS_DefineObjAllProperties( \
+ pRuntime, nObjDefnID, \
+ js_class_name::queryprop_##js_class_name##_static, \
+ js_class_name::getprop_##js_class_name##_static, \
+ js_class_name::putprop_##js_class_name##_static, \
+ js_class_name::delprop_##js_class_name##_static) < 0) \
+ return -1; \
+ \
+ return nObjDefnID; \
+ } \
+ \
+ return -1; \
+ }
-/* ======================================== GLOBAL METHODS ============================================ */
+/* ======================================== GLOBAL METHODS
+ * ============================================ */
-template <FX_BOOL (*F)(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)>
-void JSGlobalFunc(const char *func_name_string,
+template <FX_BOOL (*F)(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError)>
+void JSGlobalFunc(const char* func_name_string,
const v8::FunctionCallbackInfo<v8::Value>& info) {
v8::Isolate* isolate = info.GetIsolate();
v8::Local<v8::Context> context = isolate->GetCurrentContext();
@@ -392,76 +483,83 @@ void JSGlobalFunc(const char *func_name_string,
IFXJS_Runtime* pRuntime = (IFXJS_Runtime*)field->Value();
IFXJS_Context* cc = pRuntime->GetCurrentContext();
CJS_Parameters parameters;
- for (unsigned int i = 0; i<(unsigned int)info.Length(); i++) {
+ for (unsigned int i = 0; i < (unsigned int)info.Length(); i++) {
parameters.push_back(CJS_Value(isolate, info[i], VT_unknown));
}
CJS_Value valueRes(isolate);
CFX_WideString sError;
- if (!(*F)(cc, parameters, valueRes, sError))
- {
- JS_Error(isolate, JSFormatErrorString(func_name_string, nullptr, sError));
+ if (!(*F)(cc, parameters, valueRes, sError)) {
+ JS_Error(isolate, JSFormatErrorString(func_name_string, nullptr, sError));
return;
}
info.GetReturnValue().Set(valueRes.ToV8Value());
}
-#define JS_STATIC_GLOBAL_FUN(fun_name) \
- static void fun_name##_static(const v8::FunctionCallbackInfo<v8::Value>& info) { \
- JSGlobalFunc<fun_name>(#fun_name, info); \
+#define JS_STATIC_GLOBAL_FUN(fun_name) \
+ static void fun_name##_static( \
+ const v8::FunctionCallbackInfo<v8::Value>& info) { \
+ JSGlobalFunc<fun_name>(#fun_name, info); \
}
-#define JS_STATIC_DECLARE_GLOBAL_FUN() \
-static JSMethodSpec global_methods[]; \
-static int Init(IJS_Runtime* pRuntime)
+#define JS_STATIC_DECLARE_GLOBAL_FUN() \
+ static JSMethodSpec global_methods[]; \
+ static int Init(IJS_Runtime* pRuntime)
#define BEGIN_JS_STATIC_GLOBAL_FUN(js_class_name) \
-JSMethodSpec js_class_name::global_methods[] = {
-
-#define JS_STATIC_GLOBAL_FUN_ENTRY(method_name) JS_STATIC_METHOD_ENTRY(method_name)
+ JSMethodSpec js_class_name::global_methods[] = {
+#define JS_STATIC_GLOBAL_FUN_ENTRY(method_name) \
+ JS_STATIC_METHOD_ENTRY(method_name)
#define END_JS_STATIC_GLOBAL_FUN() END_JS_STATIC_METHOD()
-#define IMPLEMENT_JS_STATIC_GLOBAL_FUN(js_class_name) \
-int js_class_name::Init(IJS_Runtime* pRuntime)\
-{\
- for (int i=0, sz=sizeof(js_class_name::global_methods)/sizeof(JSMethodSpec)-1; i<sz; i++)\
- {\
- if (JS_DefineGlobalMethod(pRuntime,\
- js_class_name::global_methods[i].pName,\
- js_class_name::global_methods[i].pMethodCall\
- ) < 0\
- )return -1;\
- }\
- return 0;\
-}
-
-/* ======================================== GLOBAL CONSTS ============================================ */
-#define DEFINE_GLOBAL_CONST(pRuntime, const_name , const_value)\
-if (JS_DefineGlobalConst(pRuntime,JS_WIDESTRING(const_name),JS_NewString(pRuntime,JS_WIDESTRING(const_value)))) return -1
-
-/* ======================================== GLOBAL ARRAYS ============================================ */
+#define IMPLEMENT_JS_STATIC_GLOBAL_FUN(js_class_name) \
+ int js_class_name::Init(IJS_Runtime* pRuntime) { \
+ for (int i = 0, sz = sizeof(js_class_name::global_methods) / \
+ sizeof(JSMethodSpec) - \
+ 1; \
+ i < sz; i++) { \
+ if (JS_DefineGlobalMethod( \
+ pRuntime, js_class_name::global_methods[i].pName, \
+ js_class_name::global_methods[i].pMethodCall) < 0) \
+ return -1; \
+ } \
+ return 0; \
+ }
-#define DEFINE_GLOBAL_ARRAY(pRuntime)\
-int size = FX_ArraySize(ArrayContent);\
-\
-CJS_Array array(pRuntime);\
-for (int i=0; i<size; i++) array.SetElement(i,CJS_Value(pRuntime,ArrayContent[i]));\
-\
-CJS_PropValue prop(pRuntime);\
-prop << array;\
-if (JS_DefineGlobalConst(pRuntime, (const wchar_t*)ArrayName, prop.ToV8Value()) < 0)\
- return -1
+/* ======================================== GLOBAL CONSTS
+ * ============================================ */
+#define DEFINE_GLOBAL_CONST(pRuntime, const_name, const_value) \
+ if (JS_DefineGlobalConst( \
+ pRuntime, JS_WIDESTRING(const_name), \
+ JS_NewString(pRuntime, JS_WIDESTRING(const_value)))) \
+ return -1
+
+/* ======================================== GLOBAL ARRAYS
+ * ============================================ */
+
+#define DEFINE_GLOBAL_ARRAY(pRuntime) \
+ int size = FX_ArraySize(ArrayContent); \
+ \
+ CJS_Array array(pRuntime); \
+ for (int i = 0; i < size; i++) \
+ array.SetElement(i, CJS_Value(pRuntime, ArrayContent[i])); \
+ \
+ CJS_PropValue prop(pRuntime); \
+ prop << array; \
+ if (JS_DefineGlobalConst(pRuntime, (const wchar_t*)ArrayName, \
+ prop.ToV8Value()) < 0) \
+ return -1
/* ============================================================ */
-#define VALUE_NAME_STRING L"string"
-#define VALUE_NAME_NUMBER L"number"
-#define VALUE_NAME_BOOLEAN L"boolean"
-#define VALUE_NAME_DATE L"date"
-#define VALUE_NAME_OBJECT L"object"
-#define VALUE_NAME_FXOBJ L"fxobj"
-#define VALUE_NAME_NULL L"null"
-#define VALUE_NAME_UNDEFINED L"undefined"
+#define VALUE_NAME_STRING L"string"
+#define VALUE_NAME_NUMBER L"number"
+#define VALUE_NAME_BOOLEAN L"boolean"
+#define VALUE_NAME_DATE L"date"
+#define VALUE_NAME_OBJECT L"object"
+#define VALUE_NAME_FXOBJ L"fxobj"
+#define VALUE_NAME_NULL L"null"
+#define VALUE_NAME_UNDEFINED L"undefined"
FXJSVALUETYPE GET_VALUE_TYPE(v8::Local<v8::Value> p);
diff --git a/fpdfsdk/include/javascript/JS_EventHandler.h b/fpdfsdk/include/javascript/JS_EventHandler.h
index 62afb829e7..5e4982c1df 100644
--- a/fpdfsdk/include/javascript/JS_EventHandler.h
+++ b/fpdfsdk/include/javascript/JS_EventHandler.h
@@ -17,157 +17,204 @@ class CPDF_Bookmark;
class CPDF_FormField;
class Field;
-enum JS_EVENT_T
-{
- JET_UNKNOWN,
- JET_APP_INIT,
- JET_DOC_OPEN,
- JET_DOC_WILLPRINT,
- JET_DOC_DIDPRINT,
- JET_DOC_WILLSAVE,
- JET_DOC_DIDSAVE,
- JET_DOC_WILLCLOSE,
- JET_PAGE_OPEN,
- JET_PAGE_CLOSE,
- JET_PAGE_INVIEW,
- JET_PAGE_OUTVIEW,
- JET_FIELD_MOUSEDOWN,
- JET_FIELD_MOUSEUP,
- JET_FIELD_MOUSEENTER,
- JET_FIELD_MOUSEEXIT,
- JET_FIELD_FOCUS,
- JET_FIELD_BLUR,
- JET_FIELD_KEYSTROKE,
- JET_FIELD_VALIDATE,
- JET_FIELD_CALCULATE,
- JET_FIELD_FORMAT,
- JET_SCREEN_FOCUS,
- JET_SCREEN_BLUR,
- JET_SCREEN_OPEN,
- JET_SCREEN_CLOSE,
- JET_SCREEN_MOUSEDOWN,
- JET_SCREEN_MOUSEUP,
- JET_SCREEN_MOUSEENTER,
- JET_SCREEN_MOUSEEXIT,
- JET_SCREEN_INVIEW,
- JET_SCREEN_OUTVIEW,
- JET_BATCH_EXEC,
- JET_MENU_EXEC,
- JET_CONSOLE_EXEC,
- JET_EXTERNAL_EXEC,
- JET_BOOKMARK_MOUSEUP,
- JET_LINK_MOUSEUP
+enum JS_EVENT_T {
+ JET_UNKNOWN,
+ JET_APP_INIT,
+ JET_DOC_OPEN,
+ JET_DOC_WILLPRINT,
+ JET_DOC_DIDPRINT,
+ JET_DOC_WILLSAVE,
+ JET_DOC_DIDSAVE,
+ JET_DOC_WILLCLOSE,
+ JET_PAGE_OPEN,
+ JET_PAGE_CLOSE,
+ JET_PAGE_INVIEW,
+ JET_PAGE_OUTVIEW,
+ JET_FIELD_MOUSEDOWN,
+ JET_FIELD_MOUSEUP,
+ JET_FIELD_MOUSEENTER,
+ JET_FIELD_MOUSEEXIT,
+ JET_FIELD_FOCUS,
+ JET_FIELD_BLUR,
+ JET_FIELD_KEYSTROKE,
+ JET_FIELD_VALIDATE,
+ JET_FIELD_CALCULATE,
+ JET_FIELD_FORMAT,
+ JET_SCREEN_FOCUS,
+ JET_SCREEN_BLUR,
+ JET_SCREEN_OPEN,
+ JET_SCREEN_CLOSE,
+ JET_SCREEN_MOUSEDOWN,
+ JET_SCREEN_MOUSEUP,
+ JET_SCREEN_MOUSEENTER,
+ JET_SCREEN_MOUSEEXIT,
+ JET_SCREEN_INVIEW,
+ JET_SCREEN_OUTVIEW,
+ JET_BATCH_EXEC,
+ JET_MENU_EXEC,
+ JET_CONSOLE_EXEC,
+ JET_EXTERNAL_EXEC,
+ JET_BOOKMARK_MOUSEUP,
+ JET_LINK_MOUSEUP
};
-class CJS_EventHandler
-{
-public:
- CJS_EventHandler(CJS_Context * pContext);
- virtual ~CJS_EventHandler();
-
- void OnApp_Init();
-
- void OnDoc_Open(CPDFSDK_Document* pDoc, const CFX_WideString& strTargetName);
- void OnDoc_WillPrint(CPDFSDK_Document* pDoc);
- void OnDoc_DidPrint(CPDFSDK_Document* pDoc);
- void OnDoc_WillSave(CPDFSDK_Document* pDoc);
- void OnDoc_DidSave(CPDFSDK_Document* pDoc);
- void OnDoc_WillClose(CPDFSDK_Document* pDoc);
-
- void OnPage_Open(CPDFSDK_Document* pDoc);
- void OnPage_Close(CPDFSDK_Document* pDoc);
- void OnPage_InView(CPDFSDK_Document* pTarget);
- void OnPage_OutView(CPDFSDK_Document* pTarget);
-
- void OnField_Calculate(CPDF_FormField* pSource, CPDF_FormField* pTarget, CFX_WideString& Value, FX_BOOL& bRc);
- void OnField_Format(CPDF_FormField* pTarget, CFX_WideString& Value, FX_BOOL bWillCommit);
- void OnField_Keystroke(CFX_WideString& strChange, const CFX_WideString& strChangeEx,
- FX_BOOL KeyDown, FX_BOOL bModifier, int &nSelEnd,int &nSelStart, FX_BOOL bShift,
- CPDF_FormField* pTarget, CFX_WideString& Value, FX_BOOL bWillCommit,
- FX_BOOL bFieldFull, FX_BOOL &bRc);
- void OnField_Validate(CFX_WideString& strChange, const CFX_WideString& strChangeEx, FX_BOOL bKeyDown,
- FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField* pTarget, CFX_WideString& Value, FX_BOOL& bRc);
-
- void OnField_MouseDown(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField *pTarget);
- void OnField_MouseEnter(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField *pTarget);
- void OnField_MouseExit(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField *pTarget);
- void OnField_MouseUp(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField *pTarget);
- void OnField_Blur(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField* pTarget, const CFX_WideString& Value);
- void OnField_Focus(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField* pTarget, const CFX_WideString& Value);
-
- void OnScreen_Focus(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen);
- void OnScreen_Blur(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen);
- void OnScreen_Open(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen);
- void OnScreen_Close(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen);
- void OnScreen_MouseDown(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen);
- void OnScreen_MouseUp(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen);
- void OnScreen_MouseEnter(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen);
- void OnScreen_MouseExit(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen);
- void OnScreen_InView(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen);
- void OnScreen_OutView(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen);
-
- void OnBookmark_MouseUp(CPDF_Bookmark* pBookMark);
- void OnLink_MouseUp(CPDFSDK_Document* pTarget);
-
- void OnMenu_Exec(CPDFSDK_Document* pTarget, const CFX_WideString& strTargetName);
- void OnBatchExec(CPDFSDK_Document *pTarget);
- void OnConsole_Exec();
- void OnExternal_Exec();
-
-public:
- void Initial(JS_EVENT_T type);
- void Destroy();
- FX_BOOL IsValid();
-
-
- CFX_WideString& Change();
- CFX_WideString ChangeEx();
- int CommitKey();
- FX_BOOL FieldFull();
- FX_BOOL KeyDown();
- FX_BOOL Modifier();
- const FX_WCHAR* Name();
- const FX_WCHAR* Type();
- FX_BOOL& Rc();
- int& SelEnd();
- int& SelStart();
- FX_BOOL Shift();
- Field* Source();
- Field* Target_Field();
- CFX_WideString& Value();
- FX_BOOL WillCommit();
- CFX_WideString TargetName();
-
- JS_EVENT_T EventType() {return m_eEventType;};
-
-public:
- CJS_Context* m_pJSContext;
- JS_EVENT_T m_eEventType;
- FX_BOOL m_bValid;
-
- CFX_WideString m_strTargetName;
- CFX_WideString m_strSourceName;
- CFX_WideString* m_pWideStrChange;
- CFX_WideString m_WideStrChangeDu;
- CFX_WideString m_WideStrChangeEx;
- int m_nCommitKey;
- FX_BOOL m_bKeyDown;
- FX_BOOL m_bModifier;
- FX_BOOL m_bShift;
- int* m_pISelEnd;
- int m_nSelEndDu;
- int* m_pISelStart;
- int m_nSelStartDu;
- FX_BOOL m_bWillCommit;
- CFX_WideString* m_pValue;
- FX_BOOL m_bFieldFull;
- FX_BOOL* m_pbRc;
- FX_BOOL m_bRcDu;
-
- CPDFSDK_Document* m_pSourceDoc;
- CPDF_Bookmark* m_pTargetBookMark;
- CPDFSDK_Document* m_pTargetDoc;
- CPDFSDK_Annot* m_pTargetAnnot;
+class CJS_EventHandler {
+ public:
+ CJS_EventHandler(CJS_Context* pContext);
+ virtual ~CJS_EventHandler();
+
+ void OnApp_Init();
+
+ void OnDoc_Open(CPDFSDK_Document* pDoc, const CFX_WideString& strTargetName);
+ void OnDoc_WillPrint(CPDFSDK_Document* pDoc);
+ void OnDoc_DidPrint(CPDFSDK_Document* pDoc);
+ void OnDoc_WillSave(CPDFSDK_Document* pDoc);
+ void OnDoc_DidSave(CPDFSDK_Document* pDoc);
+ void OnDoc_WillClose(CPDFSDK_Document* pDoc);
+
+ void OnPage_Open(CPDFSDK_Document* pDoc);
+ void OnPage_Close(CPDFSDK_Document* pDoc);
+ void OnPage_InView(CPDFSDK_Document* pTarget);
+ void OnPage_OutView(CPDFSDK_Document* pTarget);
+
+ void OnField_Calculate(CPDF_FormField* pSource,
+ CPDF_FormField* pTarget,
+ CFX_WideString& Value,
+ FX_BOOL& bRc);
+ void OnField_Format(CPDF_FormField* pTarget,
+ CFX_WideString& Value,
+ FX_BOOL bWillCommit);
+ void OnField_Keystroke(CFX_WideString& strChange,
+ const CFX_WideString& strChangeEx,
+ FX_BOOL KeyDown,
+ FX_BOOL bModifier,
+ int& nSelEnd,
+ int& nSelStart,
+ FX_BOOL bShift,
+ CPDF_FormField* pTarget,
+ CFX_WideString& Value,
+ FX_BOOL bWillCommit,
+ FX_BOOL bFieldFull,
+ FX_BOOL& bRc);
+ void OnField_Validate(CFX_WideString& strChange,
+ const CFX_WideString& strChangeEx,
+ FX_BOOL bKeyDown,
+ FX_BOOL bModifier,
+ FX_BOOL bShift,
+ CPDF_FormField* pTarget,
+ CFX_WideString& Value,
+ FX_BOOL& bRc);
+
+ void OnField_MouseDown(FX_BOOL bModifier,
+ FX_BOOL bShift,
+ CPDF_FormField* pTarget);
+ void OnField_MouseEnter(FX_BOOL bModifier,
+ FX_BOOL bShift,
+ CPDF_FormField* pTarget);
+ void OnField_MouseExit(FX_BOOL bModifier,
+ FX_BOOL bShift,
+ CPDF_FormField* pTarget);
+ void OnField_MouseUp(FX_BOOL bModifier,
+ FX_BOOL bShift,
+ CPDF_FormField* pTarget);
+ void OnField_Blur(FX_BOOL bModifier,
+ FX_BOOL bShift,
+ CPDF_FormField* pTarget,
+ const CFX_WideString& Value);
+ void OnField_Focus(FX_BOOL bModifier,
+ FX_BOOL bShift,
+ CPDF_FormField* pTarget,
+ const CFX_WideString& Value);
+
+ void OnScreen_Focus(FX_BOOL bModifier,
+ FX_BOOL bShift,
+ CPDFSDK_Annot* pScreen);
+ void OnScreen_Blur(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen);
+ void OnScreen_Open(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen);
+ void OnScreen_Close(FX_BOOL bModifier,
+ FX_BOOL bShift,
+ CPDFSDK_Annot* pScreen);
+ void OnScreen_MouseDown(FX_BOOL bModifier,
+ FX_BOOL bShift,
+ CPDFSDK_Annot* pScreen);
+ void OnScreen_MouseUp(FX_BOOL bModifier,
+ FX_BOOL bShift,
+ CPDFSDK_Annot* pScreen);
+ void OnScreen_MouseEnter(FX_BOOL bModifier,
+ FX_BOOL bShift,
+ CPDFSDK_Annot* pScreen);
+ void OnScreen_MouseExit(FX_BOOL bModifier,
+ FX_BOOL bShift,
+ CPDFSDK_Annot* pScreen);
+ void OnScreen_InView(FX_BOOL bModifier,
+ FX_BOOL bShift,
+ CPDFSDK_Annot* pScreen);
+ void OnScreen_OutView(FX_BOOL bModifier,
+ FX_BOOL bShift,
+ CPDFSDK_Annot* pScreen);
+
+ void OnBookmark_MouseUp(CPDF_Bookmark* pBookMark);
+ void OnLink_MouseUp(CPDFSDK_Document* pTarget);
+
+ void OnMenu_Exec(CPDFSDK_Document* pTarget,
+ const CFX_WideString& strTargetName);
+ void OnBatchExec(CPDFSDK_Document* pTarget);
+ void OnConsole_Exec();
+ void OnExternal_Exec();
+
+ public:
+ void Initial(JS_EVENT_T type);
+ void Destroy();
+ FX_BOOL IsValid();
+
+ CFX_WideString& Change();
+ CFX_WideString ChangeEx();
+ int CommitKey();
+ FX_BOOL FieldFull();
+ FX_BOOL KeyDown();
+ FX_BOOL Modifier();
+ const FX_WCHAR* Name();
+ const FX_WCHAR* Type();
+ FX_BOOL& Rc();
+ int& SelEnd();
+ int& SelStart();
+ FX_BOOL Shift();
+ Field* Source();
+ Field* Target_Field();
+ CFX_WideString& Value();
+ FX_BOOL WillCommit();
+ CFX_WideString TargetName();
+
+ JS_EVENT_T EventType() { return m_eEventType; };
+
+ public:
+ CJS_Context* m_pJSContext;
+ JS_EVENT_T m_eEventType;
+ FX_BOOL m_bValid;
+
+ CFX_WideString m_strTargetName;
+ CFX_WideString m_strSourceName;
+ CFX_WideString* m_pWideStrChange;
+ CFX_WideString m_WideStrChangeDu;
+ CFX_WideString m_WideStrChangeEx;
+ int m_nCommitKey;
+ FX_BOOL m_bKeyDown;
+ FX_BOOL m_bModifier;
+ FX_BOOL m_bShift;
+ int* m_pISelEnd;
+ int m_nSelEndDu;
+ int* m_pISelStart;
+ int m_nSelStartDu;
+ FX_BOOL m_bWillCommit;
+ CFX_WideString* m_pValue;
+ FX_BOOL m_bFieldFull;
+ FX_BOOL* m_pbRc;
+ FX_BOOL m_bRcDu;
+
+ CPDFSDK_Document* m_pSourceDoc;
+ CPDF_Bookmark* m_pTargetBookMark;
+ CPDFSDK_Document* m_pTargetDoc;
+ CPDFSDK_Annot* m_pTargetAnnot;
};
#endif // FPDFSDK_INCLUDE_JAVASCRIPT_JS_EVENTHANDLER_H_
diff --git a/fpdfsdk/include/javascript/JS_GlobalData.h b/fpdfsdk/include/javascript/JS_GlobalData.h
index b3637b93d5..607eec79bd 100644
--- a/fpdfsdk/include/javascript/JS_GlobalData.h
+++ b/fpdfsdk/include/javascript/JS_GlobalData.h
@@ -9,89 +9,94 @@
#include "../../../core/include/fxcrt/fx_basic.h"
-#define JS_GLOBALDATA_TYPE_NUMBER 0
-#define JS_GLOBALDATA_TYPE_BOOLEAN 1
-#define JS_GLOBALDATA_TYPE_STRING 2
-#define JS_GLOBALDATA_TYPE_OBJECT 3
-#define JS_GLOBALDATA_TYPE_NULL 4
+#define JS_GLOBALDATA_TYPE_NUMBER 0
+#define JS_GLOBALDATA_TYPE_BOOLEAN 1
+#define JS_GLOBALDATA_TYPE_STRING 2
+#define JS_GLOBALDATA_TYPE_OBJECT 3
+#define JS_GLOBALDATA_TYPE_NULL 4
class CJS_KeyValue;
class CPDFDoc_Environment;
-class CJS_GlobalVariableArray
-{
-public:
- CJS_GlobalVariableArray();
- virtual ~CJS_GlobalVariableArray();
+class CJS_GlobalVariableArray {
+ public:
+ CJS_GlobalVariableArray();
+ virtual ~CJS_GlobalVariableArray();
- void Add(CJS_KeyValue* p);
- int Count() const;
- CJS_KeyValue* GetAt(int index) const;
- void Copy(const CJS_GlobalVariableArray& array);
+ void Add(CJS_KeyValue* p);
+ int Count() const;
+ CJS_KeyValue* GetAt(int index) const;
+ void Copy(const CJS_GlobalVariableArray& array);
- void Empty();
+ void Empty();
-private:
- CFX_ArrayTemplate<CJS_KeyValue*> array;
+ private:
+ CFX_ArrayTemplate<CJS_KeyValue*> array;
};
-class CJS_KeyValue
-{
-public:
- CJS_KeyValue(){}
- virtual ~CJS_KeyValue(){}
-
- CFX_ByteString sKey;
- int nType; //0:int 1:bool 2:string 3:obj
- double dData;
- bool bData;
- CFX_ByteString sData;
- CJS_GlobalVariableArray objData;
+class CJS_KeyValue {
+ public:
+ CJS_KeyValue() {}
+ virtual ~CJS_KeyValue() {}
+
+ CFX_ByteString sKey;
+ int nType; // 0:int 1:bool 2:string 3:obj
+ double dData;
+ bool bData;
+ CFX_ByteString sData;
+ CJS_GlobalVariableArray objData;
};
-class CJS_GlobalData_Element
-{
-public:
- CJS_GlobalData_Element(){}
- virtual ~CJS_GlobalData_Element(){}
+class CJS_GlobalData_Element {
+ public:
+ CJS_GlobalData_Element() {}
+ virtual ~CJS_GlobalData_Element() {}
- CJS_KeyValue data;
- FX_BOOL bPersistent;
+ CJS_KeyValue data;
+ FX_BOOL bPersistent;
};
-class CJS_GlobalData
-{
-public:
- CJS_GlobalData(CPDFDoc_Environment* pApp);
- virtual ~CJS_GlobalData();
-
-public:
- void SetGlobalVariableNumber(const FX_CHAR* propname, double dData);
- void SetGlobalVariableBoolean(const FX_CHAR* propname, bool bData);
- void SetGlobalVariableString(const FX_CHAR* propname, const CFX_ByteString& sData);
- void SetGlobalVariableObject(const FX_CHAR* propname, const CJS_GlobalVariableArray& array);
- void SetGlobalVariableNull(const FX_CHAR* propname);
-
- FX_BOOL SetGlobalVariablePersistent(const FX_CHAR* propname, FX_BOOL bPersistent);
- FX_BOOL DeleteGlobalVariable(const FX_CHAR* propname);
-
- int32_t GetSize() const;
- CJS_GlobalData_Element* GetAt(int index) const;
-
-private:
- void LoadGlobalPersistentVariables();
- void SaveGlobalPersisitentVariables();
-
- CJS_GlobalData_Element* GetGlobalVariable(const FX_CHAR* propname);
- int FindGlobalVariable(const FX_CHAR* propname);
-
- void LoadFileBuffer(const FX_WCHAR* sFilePath, uint8_t*& pBuffer, int32_t& nLength);
- void WriteFileBuffer(const FX_WCHAR* sFilePath, const FX_CHAR* pBuffer, int32_t nLength);
- void MakeByteString(const CFX_ByteString& name, CJS_KeyValue* pData, CFX_BinaryBuf& sData);
-
-private:
- CFX_ArrayTemplate<CJS_GlobalData_Element*> m_arrayGlobalData;
- CFX_WideString m_sFilePath;
+class CJS_GlobalData {
+ public:
+ CJS_GlobalData(CPDFDoc_Environment* pApp);
+ virtual ~CJS_GlobalData();
+
+ public:
+ void SetGlobalVariableNumber(const FX_CHAR* propname, double dData);
+ void SetGlobalVariableBoolean(const FX_CHAR* propname, bool bData);
+ void SetGlobalVariableString(const FX_CHAR* propname,
+ const CFX_ByteString& sData);
+ void SetGlobalVariableObject(const FX_CHAR* propname,
+ const CJS_GlobalVariableArray& array);
+ void SetGlobalVariableNull(const FX_CHAR* propname);
+
+ FX_BOOL SetGlobalVariablePersistent(const FX_CHAR* propname,
+ FX_BOOL bPersistent);
+ FX_BOOL DeleteGlobalVariable(const FX_CHAR* propname);
+
+ int32_t GetSize() const;
+ CJS_GlobalData_Element* GetAt(int index) const;
+
+ private:
+ void LoadGlobalPersistentVariables();
+ void SaveGlobalPersisitentVariables();
+
+ CJS_GlobalData_Element* GetGlobalVariable(const FX_CHAR* propname);
+ int FindGlobalVariable(const FX_CHAR* propname);
+
+ void LoadFileBuffer(const FX_WCHAR* sFilePath,
+ uint8_t*& pBuffer,
+ int32_t& nLength);
+ void WriteFileBuffer(const FX_WCHAR* sFilePath,
+ const FX_CHAR* pBuffer,
+ int32_t nLength);
+ void MakeByteString(const CFX_ByteString& name,
+ CJS_KeyValue* pData,
+ CFX_BinaryBuf& sData);
+
+ private:
+ CFX_ArrayTemplate<CJS_GlobalData_Element*> m_arrayGlobalData;
+ CFX_WideString m_sFilePath;
};
#endif // FPDFSDK_INCLUDE_JAVASCRIPT_JS_GLOBALDATA_H_
diff --git a/fpdfsdk/include/javascript/JS_Object.h b/fpdfsdk/include/javascript/JS_Object.h
index 3898d184d1..fd63d98cbc 100644
--- a/fpdfsdk/include/javascript/JS_Object.h
+++ b/fpdfsdk/include/javascript/JS_Object.h
@@ -7,8 +7,8 @@
#ifndef FPDFSDK_INCLUDE_JAVASCRIPT_JS_OBJECT_H_
#define FPDFSDK_INCLUDE_JAVASCRIPT_JS_OBJECT_H_
-#include "../fsdk_define.h" // For FX_UINT
-#include "../fsdk_mgr.h" // For CPDFDoc_Environment
+#include "../fsdk_define.h" // For FX_UINT
+#include "../fsdk_mgr.h" // For CPDFDoc_Environment
#include "../fx_systemhandler.h" // For IFX_SystemHandler
#include "../jsapi/fxjs_v8.h"
@@ -17,279 +17,228 @@ class CJS_Object;
class CJS_Timer;
class CJS_Context;
-class CJS_EmbedObj
-{
-public:
- CJS_EmbedObj(CJS_Object* pJSObject);
- virtual ~CJS_EmbedObj();
+class CJS_EmbedObj {
+ public:
+ CJS_EmbedObj(CJS_Object* pJSObject);
+ virtual ~CJS_EmbedObj();
- virtual void TimerProc(CJS_Timer* pTimer){};
+ virtual void TimerProc(CJS_Timer* pTimer){};
- CJS_Timer* BeginTimer(CPDFDoc_Environment * pApp, FX_UINT nElapse);
- void EndTimer(CJS_Timer* pTimer);
+ CJS_Timer* BeginTimer(CPDFDoc_Environment* pApp, FX_UINT nElapse);
+ void EndTimer(CJS_Timer* pTimer);
- CJS_Object* GetJSObject(){return m_pJSObject;};
- operator CJS_Object* (){return m_pJSObject;};
+ CJS_Object* GetJSObject() { return m_pJSObject; };
+ operator CJS_Object*() { return m_pJSObject; };
- CPDFSDK_PageView * JSGetPageView(IFXJS_Context* cc);
- int MsgBox(CPDFDoc_Environment* pApp, CPDFSDK_PageView* pPageView, const FX_WCHAR* swMsg, const FX_WCHAR* swTitle = NULL, FX_UINT nType = 0, FX_UINT nIcon = 0);
- void Alert(CJS_Context* pContext, const FX_WCHAR* swMsg);
+ CPDFSDK_PageView* JSGetPageView(IFXJS_Context* cc);
+ int MsgBox(CPDFDoc_Environment* pApp,
+ CPDFSDK_PageView* pPageView,
+ const FX_WCHAR* swMsg,
+ const FX_WCHAR* swTitle = NULL,
+ FX_UINT nType = 0,
+ FX_UINT nIcon = 0);
+ void Alert(CJS_Context* pContext, const FX_WCHAR* swMsg);
-protected:
- CJS_Object* m_pJSObject;
+ protected:
+ CJS_Object* m_pJSObject;
};
-class CJS_Object
-{
-public:
- CJS_Object(JSFXObject pObject);
- virtual ~CJS_Object(void);
+class CJS_Object {
+ public:
+ CJS_Object(JSFXObject pObject);
+ virtual ~CJS_Object(void);
- void MakeWeak();
- void Dispose();
+ void MakeWeak();
+ void Dispose();
- virtual FX_BOOL IsType(const FX_CHAR* sClassName){return TRUE;};
- virtual CFX_ByteString GetClassName(){return "";};
+ virtual FX_BOOL IsType(const FX_CHAR* sClassName) { return TRUE; };
+ virtual CFX_ByteString GetClassName() { return ""; };
- virtual FX_BOOL InitInstance(IFXJS_Context* cc){return TRUE;};
- virtual FX_BOOL ExitInstance(){return TRUE;};
+ virtual FX_BOOL InitInstance(IFXJS_Context* cc) { return TRUE; };
+ virtual FX_BOOL ExitInstance() { return TRUE; };
- operator JSFXObject () {return v8::Local<v8::Object>::New(m_pIsolate, m_pObject);}
- operator CJS_EmbedObj* (){return m_pEmbedObj;};
+ operator JSFXObject() {
+ return v8::Local<v8::Object>::New(m_pIsolate, m_pObject);
+ }
+ operator CJS_EmbedObj*() { return m_pEmbedObj; };
- void SetEmbedObject(CJS_EmbedObj* pObj){m_pEmbedObj = pObj;};
- CJS_EmbedObj * GetEmbedObject(){return m_pEmbedObj;};
+ void SetEmbedObject(CJS_EmbedObj* pObj) { m_pEmbedObj = pObj; };
+ CJS_EmbedObj* GetEmbedObject() { return m_pEmbedObj; };
- static CPDFSDK_PageView * JSGetPageView(IFXJS_Context* cc);
- static int MsgBox(CPDFDoc_Environment* pApp, CPDFSDK_PageView* pPageView, const FX_WCHAR* swMsg, const FX_WCHAR* swTitle = NULL, FX_UINT nType = 0,FX_UINT nIcon = 0);
- static void Alert(CJS_Context* pContext, const FX_WCHAR* swMsg);
+ static CPDFSDK_PageView* JSGetPageView(IFXJS_Context* cc);
+ static int MsgBox(CPDFDoc_Environment* pApp,
+ CPDFSDK_PageView* pPageView,
+ const FX_WCHAR* swMsg,
+ const FX_WCHAR* swTitle = NULL,
+ FX_UINT nType = 0,
+ FX_UINT nIcon = 0);
+ static void Alert(CJS_Context* pContext, const FX_WCHAR* swMsg);
- v8::Isolate* GetIsolate() {return m_pIsolate;}
-protected:
- CJS_EmbedObj * m_pEmbedObj;
- v8::Global<v8::Object> m_pObject;
- v8::Isolate* m_pIsolate;
+ v8::Isolate* GetIsolate() { return m_pIsolate; }
+
+ protected:
+ CJS_EmbedObj* m_pEmbedObj;
+ v8::Global<v8::Object> m_pObject;
+ v8::Isolate* m_pIsolate;
};
-struct JS_TIMER_MAP
-{
- FX_UINT nID;
- CJS_Timer * pTimer;
+struct JS_TIMER_MAP {
+ FX_UINT nID;
+ CJS_Timer* pTimer;
};
-typedef CFX_ArrayTemplate<JS_TIMER_MAP*> CTimerMapArray;
-
-struct JS_TIMER_MAPARRAY
-{
-public:
- JS_TIMER_MAPARRAY()
- {
- }
-
- ~JS_TIMER_MAPARRAY()
- {
- Reset();
- }
-
- void Reset()
- {
- for (int i=0,sz=m_Array.GetSize(); i<sz; i++)
- delete m_Array.GetAt(i);
-
- m_Array.RemoveAll();
- }
-
- void SetAt(FX_UINT nIndex,CJS_Timer * pTimer)
- {
- int i = Find(nIndex);
-
- if (i>=0)
- {
- if (JS_TIMER_MAP * pMap = m_Array.GetAt(i))
- pMap->pTimer = pTimer;
- }
- else
- {
- if (JS_TIMER_MAP * pMap = new JS_TIMER_MAP)
- {
- pMap->nID = nIndex;
- pMap->pTimer = pTimer;
- m_Array.Add(pMap);
- }
- }
- }
-
- CJS_Timer * GetAt(FX_UINT nIndex)
- {
- int i = Find(nIndex);
-
- if (i>=0)
- {
- if (JS_TIMER_MAP * pMap = m_Array.GetAt(i))
- return pMap->pTimer;
- }
- return NULL;
- }
-
- void RemoveAt(FX_UINT nIndex)
- {
- int i = Find(nIndex);
-
- if (i>=0)
- {
- delete m_Array.GetAt(i);
- m_Array.RemoveAt(i);
- }
- //To prevent potential fake memory leak reported by vc6.
- if(m_Array.GetSize() == 0)
- m_Array.RemoveAll();
- }
-
- int Find(FX_UINT nIndex)
- {
- for (int i=0,sz=m_Array.GetSize(); i<sz; i++)
- {
- if (JS_TIMER_MAP * pMap = m_Array.GetAt(i))
- {
- if (pMap->nID == nIndex)
- return i;
- }
- }
-
- return -1;
- }
-
- CTimerMapArray m_Array;
+typedef CFX_ArrayTemplate<JS_TIMER_MAP*> CTimerMapArray;
+
+struct JS_TIMER_MAPARRAY {
+ public:
+ JS_TIMER_MAPARRAY() {}
+
+ ~JS_TIMER_MAPARRAY() { Reset(); }
+
+ void Reset() {
+ for (int i = 0, sz = m_Array.GetSize(); i < sz; i++)
+ delete m_Array.GetAt(i);
+
+ m_Array.RemoveAll();
+ }
+
+ void SetAt(FX_UINT nIndex, CJS_Timer* pTimer) {
+ int i = Find(nIndex);
+
+ if (i >= 0) {
+ if (JS_TIMER_MAP* pMap = m_Array.GetAt(i))
+ pMap->pTimer = pTimer;
+ } else {
+ if (JS_TIMER_MAP* pMap = new JS_TIMER_MAP) {
+ pMap->nID = nIndex;
+ pMap->pTimer = pTimer;
+ m_Array.Add(pMap);
+ }
+ }
+ }
+
+ CJS_Timer* GetAt(FX_UINT nIndex) {
+ int i = Find(nIndex);
+
+ if (i >= 0) {
+ if (JS_TIMER_MAP* pMap = m_Array.GetAt(i))
+ return pMap->pTimer;
+ }
+ return NULL;
+ }
+
+ void RemoveAt(FX_UINT nIndex) {
+ int i = Find(nIndex);
+
+ if (i >= 0) {
+ delete m_Array.GetAt(i);
+ m_Array.RemoveAt(i);
+ }
+ // To prevent potential fake memory leak reported by vc6.
+ if (m_Array.GetSize() == 0)
+ m_Array.RemoveAll();
+ }
+
+ int Find(FX_UINT nIndex) {
+ for (int i = 0, sz = m_Array.GetSize(); i < sz; i++) {
+ if (JS_TIMER_MAP* pMap = m_Array.GetAt(i)) {
+ if (pMap->nID == nIndex)
+ return i;
+ }
+ }
+
+ return -1;
+ }
+
+ CTimerMapArray m_Array;
};
JS_TIMER_MAPARRAY& GetTimeMap();
class CJS_Runtime;
-class CJS_Timer
-{
-public:
- CJS_Timer(CJS_EmbedObj * pObj,CPDFDoc_Environment* pApp):
- m_nTimerID(0),
- m_pEmbedObj(pObj),
- m_bProcessing(FALSE),
- m_dwStartTime(0),
- m_dwTimeOut(0),
- m_dwElapse(0),
- m_pRuntime(NULL),
- m_nType(0),
- m_pApp(pApp)
- {
- }
-
- virtual ~CJS_Timer()
- {
- KillJSTimer();
- }
-
-public:
- FX_UINT SetJSTimer(FX_UINT nElapse)
- {
- if (m_nTimerID)KillJSTimer();
- IFX_SystemHandler* pHandler = m_pApp->GetSysHandler();
- m_nTimerID = pHandler->SetTimer(nElapse,TimerProc);
- GetTimeMap().SetAt(m_nTimerID,this);
- m_dwElapse = nElapse;
- return m_nTimerID;
- };
-
- void KillJSTimer()
- {
- if (m_nTimerID)
- {
- IFX_SystemHandler* pHandler = m_pApp->GetSysHandler();
- pHandler->KillTimer(m_nTimerID);
- GetTimeMap().RemoveAt(m_nTimerID);
- m_nTimerID = 0;
- }
- };
-
- void SetType(int nType)
- {
- m_nType = nType;
- }
-
- int GetType() const
- {
- return m_nType;
- }
-
- void SetStartTime(FX_DWORD dwStartTime)
- {
- m_dwStartTime = dwStartTime;
- }
-
- FX_DWORD GetStartTime() const
- {
- return m_dwStartTime;
- }
-
- void SetTimeOut(FX_DWORD dwTimeOut)
- {
- m_dwTimeOut = dwTimeOut;
- }
-
- FX_DWORD GetTimeOut() const
- {
- return m_dwTimeOut;
- }
-
- void SetRuntime(CJS_Runtime* pRuntime)
- {
- m_pRuntime = pRuntime;
- }
-
- CJS_Runtime* GetRuntime() const
- {
- return m_pRuntime;
- }
-
- void SetJScript(const CFX_WideString& script)
- {
- m_swJScript = script;
- }
-
- CFX_WideString GetJScript() const
- {
- return m_swJScript;
- }
-
- static void TimerProc(int idEvent)
- {
- if (CJS_Timer * pTimer = GetTimeMap().GetAt(idEvent))
- {
- if (!pTimer->m_bProcessing)
- {
- pTimer->m_bProcessing = TRUE;
- if (pTimer->m_pEmbedObj) pTimer->m_pEmbedObj->TimerProc(pTimer);
- pTimer->m_bProcessing = FALSE;
- }
- else
- {
- // TRACE(L"BUSY!\n");
- }
- }
- };
-
-private:
- FX_UINT m_nTimerID;
- CJS_EmbedObj* m_pEmbedObj;
- FX_BOOL m_bProcessing;
-
- //data
- FX_DWORD m_dwStartTime;
- FX_DWORD m_dwTimeOut;
- FX_DWORD m_dwElapse;
- CJS_Runtime* m_pRuntime;
- CFX_WideString m_swJScript;
- int m_nType; //0:Interval; 1:TimeOut
-
- CPDFDoc_Environment* m_pApp;
+class CJS_Timer {
+ public:
+ CJS_Timer(CJS_EmbedObj* pObj, CPDFDoc_Environment* pApp)
+ : m_nTimerID(0),
+ m_pEmbedObj(pObj),
+ m_bProcessing(FALSE),
+ m_dwStartTime(0),
+ m_dwTimeOut(0),
+ m_dwElapse(0),
+ m_pRuntime(NULL),
+ m_nType(0),
+ m_pApp(pApp) {}
+
+ virtual ~CJS_Timer() { KillJSTimer(); }
+
+ public:
+ FX_UINT SetJSTimer(FX_UINT nElapse) {
+ if (m_nTimerID)
+ KillJSTimer();
+ IFX_SystemHandler* pHandler = m_pApp->GetSysHandler();
+ m_nTimerID = pHandler->SetTimer(nElapse, TimerProc);
+ GetTimeMap().SetAt(m_nTimerID, this);
+ m_dwElapse = nElapse;
+ return m_nTimerID;
+ };
+
+ void KillJSTimer() {
+ if (m_nTimerID) {
+ IFX_SystemHandler* pHandler = m_pApp->GetSysHandler();
+ pHandler->KillTimer(m_nTimerID);
+ GetTimeMap().RemoveAt(m_nTimerID);
+ m_nTimerID = 0;
+ }
+ };
+
+ void SetType(int nType) { m_nType = nType; }
+
+ int GetType() const { return m_nType; }
+
+ void SetStartTime(FX_DWORD dwStartTime) { m_dwStartTime = dwStartTime; }
+
+ FX_DWORD GetStartTime() const { return m_dwStartTime; }
+
+ void SetTimeOut(FX_DWORD dwTimeOut) { m_dwTimeOut = dwTimeOut; }
+
+ FX_DWORD GetTimeOut() const { return m_dwTimeOut; }
+
+ void SetRuntime(CJS_Runtime* pRuntime) { m_pRuntime = pRuntime; }
+
+ CJS_Runtime* GetRuntime() const { return m_pRuntime; }
+
+ void SetJScript(const CFX_WideString& script) { m_swJScript = script; }
+
+ CFX_WideString GetJScript() const { return m_swJScript; }
+
+ static void TimerProc(int idEvent) {
+ if (CJS_Timer* pTimer = GetTimeMap().GetAt(idEvent)) {
+ if (!pTimer->m_bProcessing) {
+ pTimer->m_bProcessing = TRUE;
+ if (pTimer->m_pEmbedObj)
+ pTimer->m_pEmbedObj->TimerProc(pTimer);
+ pTimer->m_bProcessing = FALSE;
+ } else {
+ // TRACE(L"BUSY!\n");
+ }
+ }
+ };
+
+ private:
+ FX_UINT m_nTimerID;
+ CJS_EmbedObj* m_pEmbedObj;
+ FX_BOOL m_bProcessing;
+
+ // data
+ FX_DWORD m_dwStartTime;
+ FX_DWORD m_dwTimeOut;
+ FX_DWORD m_dwElapse;
+ CJS_Runtime* m_pRuntime;
+ CFX_WideString m_swJScript;
+ int m_nType; // 0:Interval; 1:TimeOut
+
+ CPDFDoc_Environment* m_pApp;
};
#endif // FPDFSDK_INCLUDE_JAVASCRIPT_JS_OBJECT_H_
diff --git a/fpdfsdk/include/javascript/JS_Runtime.h b/fpdfsdk/include/javascript/JS_Runtime.h
index 8fdfa8b733..f4dabf017e 100644
--- a/fpdfsdk/include/javascript/JS_Runtime.h
+++ b/fpdfsdk/include/javascript/JS_Runtime.h
@@ -16,59 +16,60 @@
class CJS_Context;
class CJS_ArrayBufferAllocator : public v8::ArrayBuffer::Allocator {
- void* Allocate(size_t length) override;
- void* AllocateUninitialized(size_t length) override;
- void Free(void* data, size_t length) override;
+ void* Allocate(size_t length) override;
+ void* AllocateUninitialized(size_t length) override;
+ void Free(void* data, size_t length) override;
};
-class CJS_FieldEvent
-{
-public:
- CFX_WideString sTargetName;
- JS_EVENT_T eEventType;
- CJS_FieldEvent* pNext;
+class CJS_FieldEvent {
+ public:
+ CFX_WideString sTargetName;
+ JS_EVENT_T eEventType;
+ CJS_FieldEvent* pNext;
};
-class CJS_Runtime : public IFXJS_Runtime
-{
-public:
- CJS_Runtime(CPDFDoc_Environment * pApp);
- virtual ~CJS_Runtime();
+class CJS_Runtime : public IFXJS_Runtime {
+ public:
+ CJS_Runtime(CPDFDoc_Environment* pApp);
+ virtual ~CJS_Runtime();
- virtual IFXJS_Context * NewContext();
- virtual void ReleaseContext(IFXJS_Context * pContext);
- virtual IFXJS_Context* GetCurrentContext();
+ virtual IFXJS_Context* NewContext();
+ virtual void ReleaseContext(IFXJS_Context* pContext);
+ virtual IFXJS_Context* GetCurrentContext();
- virtual void SetReaderDocument(CPDFSDK_Document *pReaderDoc);
- virtual CPDFSDK_Document * GetReaderDocument(){return m_pDocument;}
+ virtual void SetReaderDocument(CPDFSDK_Document* pReaderDoc);
+ virtual CPDFSDK_Document* GetReaderDocument() { return m_pDocument; }
- CPDFDoc_Environment * GetReaderApp(){return m_pApp;}
+ CPDFDoc_Environment* GetReaderApp() { return m_pApp; }
- FX_BOOL InitJSObjects();
+ FX_BOOL InitJSObjects();
- FX_BOOL AddEventToLoop(const CFX_WideString& sTargetName, JS_EVENT_T eEventType);
- void RemoveEventInLoop(const CFX_WideString& sTargetName, JS_EVENT_T eEventType);
- void RemoveEventsInLoop(CJS_FieldEvent* pStart);
+ FX_BOOL AddEventToLoop(const CFX_WideString& sTargetName,
+ JS_EVENT_T eEventType);
+ void RemoveEventInLoop(const CFX_WideString& sTargetName,
+ JS_EVENT_T eEventType);
+ void RemoveEventsInLoop(CJS_FieldEvent* pStart);
- void BeginBlock(){m_bBlocking = TRUE;}
- void EndBlock(){m_bBlocking = FALSE;}
- FX_BOOL IsBlocking(){return m_bBlocking;}
+ void BeginBlock() { m_bBlocking = TRUE; }
+ void EndBlock() { m_bBlocking = FALSE; }
+ FX_BOOL IsBlocking() { return m_bBlocking; }
- operator IJS_Runtime*() {return (IJS_Runtime*)m_isolate;}
- v8::Isolate* GetIsolate(){return m_isolate;};
- void SetIsolate(v8::Isolate* isolate){m_isolate = isolate;}
+ operator IJS_Runtime*() { return (IJS_Runtime*)m_isolate; }
+ v8::Isolate* GetIsolate() { return m_isolate; };
+ void SetIsolate(v8::Isolate* isolate) { m_isolate = isolate; }
- v8::Local<v8::Context> NewJSContext();
-protected:
- CFX_ArrayTemplate<CJS_Context*> m_ContextArray;
- CPDFDoc_Environment* m_pApp;
- CPDFSDK_Document* m_pDocument;
- FX_BOOL m_bBlocking;
- CJS_FieldEvent* m_pFieldEventPath;
+ v8::Local<v8::Context> NewJSContext();
- v8::Isolate* m_isolate;
- nonstd::unique_ptr<CJS_ArrayBufferAllocator> m_pArrayBufferAllocator;
- v8::Global<v8::Context> m_context;
+ protected:
+ CFX_ArrayTemplate<CJS_Context*> m_ContextArray;
+ CPDFDoc_Environment* m_pApp;
+ CPDFSDK_Document* m_pDocument;
+ FX_BOOL m_bBlocking;
+ CJS_FieldEvent* m_pFieldEventPath;
+
+ v8::Isolate* m_isolate;
+ nonstd::unique_ptr<CJS_ArrayBufferAllocator> m_pArrayBufferAllocator;
+ v8::Global<v8::Context> m_context;
};
#endif // FPDFSDK_INCLUDE_JAVASCRIPT_JS_RUNTIME_H_
diff --git a/fpdfsdk/include/javascript/JS_Value.h b/fpdfsdk/include/javascript/JS_Value.h
index 6186817fa5..1606fb5396 100644
--- a/fpdfsdk/include/javascript/JS_Value.h
+++ b/fpdfsdk/include/javascript/JS_Value.h
@@ -15,175 +15,179 @@ class CJS_Date;
class CJS_Document;
class CJS_Object;
-class CJS_Value
-{
-public:
- CJS_Value(v8::Isolate* isolate);
- CJS_Value(v8::Isolate* isolate, v8::Local<v8::Value> pValue,FXJSVALUETYPE t);
- CJS_Value(v8::Isolate* isolate, const int &iValue);
- CJS_Value(v8::Isolate* isolate, const double &dValue);
- CJS_Value(v8::Isolate* isolate, const float &fValue);
- CJS_Value(v8::Isolate* isolate, const bool &bValue);
- CJS_Value(v8::Isolate* isolate, JSFXObject);
- CJS_Value(v8::Isolate* isolate, CJS_Object*);
- CJS_Value(v8::Isolate* isolate, CJS_Document*);
- CJS_Value(v8::Isolate* isolate, const FX_CHAR* pStr);
- CJS_Value(v8::Isolate* isolate, const FX_WCHAR* pWstr);
- CJS_Value(v8::Isolate* isolate, CJS_Array& array);
-
- ~CJS_Value();
-
- void SetNull();
- void Attach(v8::Local<v8::Value> pValue,FXJSVALUETYPE t);
- void Attach(CJS_Value *pValue);
- void Detach();
-
-
- int ToInt() const;
- bool ToBool() const;
- double ToDouble() const;
- float ToFloat() const;
- CJS_Object* ToCJSObject() const;
- CFX_WideString ToCFXWideString() const;
- CFX_ByteString ToCFXByteString() const;
- v8::Local<v8::Object> ToV8Object() const;
- v8::Local<v8::Array> ToV8Array() const;
- v8::Local<v8::Value> ToV8Value() const;
-
- void operator = (int iValue);
- void operator = (bool bValue);
- void operator = (double);
- void operator = (float);
- void operator = (CJS_Object*);
- void operator = (CJS_Document*);
- void operator = (v8::Local<v8::Object>);
- void operator = (CJS_Array &);
- void operator = (CJS_Date &);
- void operator = (const FX_WCHAR* pWstr);
- void operator = (const FX_CHAR* pStr);
- void operator = (CJS_Value value);
-
- FX_BOOL IsArrayObject() const;
- FX_BOOL IsDateObject() const;
- FXJSVALUETYPE GetType() const;
-
- FX_BOOL ConvertToArray(CJS_Array &) const;
- FX_BOOL ConvertToDate(CJS_Date &) const;
-
- v8::Isolate* GetIsolate() {return m_isolate;}
-protected:
- v8::Local<v8::Value> m_pValue;
- FXJSVALUETYPE m_eType;
- v8::Isolate* m_isolate;
+class CJS_Value {
+ public:
+ CJS_Value(v8::Isolate* isolate);
+ CJS_Value(v8::Isolate* isolate, v8::Local<v8::Value> pValue, FXJSVALUETYPE t);
+ CJS_Value(v8::Isolate* isolate, const int& iValue);
+ CJS_Value(v8::Isolate* isolate, const double& dValue);
+ CJS_Value(v8::Isolate* isolate, const float& fValue);
+ CJS_Value(v8::Isolate* isolate, const bool& bValue);
+ CJS_Value(v8::Isolate* isolate, JSFXObject);
+ CJS_Value(v8::Isolate* isolate, CJS_Object*);
+ CJS_Value(v8::Isolate* isolate, CJS_Document*);
+ CJS_Value(v8::Isolate* isolate, const FX_CHAR* pStr);
+ CJS_Value(v8::Isolate* isolate, const FX_WCHAR* pWstr);
+ CJS_Value(v8::Isolate* isolate, CJS_Array& array);
+
+ ~CJS_Value();
+
+ void SetNull();
+ void Attach(v8::Local<v8::Value> pValue, FXJSVALUETYPE t);
+ void Attach(CJS_Value* pValue);
+ void Detach();
+
+ int ToInt() const;
+ bool ToBool() const;
+ double ToDouble() const;
+ float ToFloat() const;
+ CJS_Object* ToCJSObject() const;
+ CFX_WideString ToCFXWideString() const;
+ CFX_ByteString ToCFXByteString() const;
+ v8::Local<v8::Object> ToV8Object() const;
+ v8::Local<v8::Array> ToV8Array() const;
+ v8::Local<v8::Value> ToV8Value() const;
+
+ void operator=(int iValue);
+ void operator=(bool bValue);
+ void operator=(double);
+ void operator=(float);
+ void operator=(CJS_Object*);
+ void operator=(CJS_Document*);
+ void operator=(v8::Local<v8::Object>);
+ void operator=(CJS_Array&);
+ void operator=(CJS_Date&);
+ void operator=(const FX_WCHAR* pWstr);
+ void operator=(const FX_CHAR* pStr);
+ void operator=(CJS_Value value);
+
+ FX_BOOL IsArrayObject() const;
+ FX_BOOL IsDateObject() const;
+ FXJSVALUETYPE GetType() const;
+
+ FX_BOOL ConvertToArray(CJS_Array&) const;
+ FX_BOOL ConvertToDate(CJS_Date&) const;
+
+ v8::Isolate* GetIsolate() { return m_isolate; }
+
+ protected:
+ v8::Local<v8::Value> m_pValue;
+ FXJSVALUETYPE m_eType;
+ v8::Isolate* m_isolate;
};
-class CJS_Parameters : public CFX_ArrayTemplate<CJS_Value>
-{
-public:
- void push_back(const CJS_Value& newElement) {
- CFX_ArrayTemplate<CJS_Value>::Add(newElement);
- }
- int size() const {
- return CFX_ArrayTemplate<CJS_Value>::GetSize();
- }
+class CJS_Parameters : public CFX_ArrayTemplate<CJS_Value> {
+ public:
+ void push_back(const CJS_Value& newElement) {
+ CFX_ArrayTemplate<CJS_Value>::Add(newElement);
+ }
+ int size() const { return CFX_ArrayTemplate<CJS_Value>::GetSize(); }
};
-class CJS_PropValue: public CJS_Value
-{
-public:
- CJS_PropValue(const CJS_Value&);
- CJS_PropValue(v8::Isolate* isolate);
- ~CJS_PropValue();
-public:
- FX_BOOL IsSetting();
- FX_BOOL IsGetting();
- void operator<<(int);
- void operator>>(int&) const;
- void operator<<(bool);
- void operator>>(bool&) const;
- void operator<<(double);
- void operator>>(double&) const;
- void operator<<(CJS_Object* pObj);
- void operator>>(CJS_Object*& ppObj) const;
- void operator<<(CJS_Document* pJsDoc);
- void operator>>(CJS_Document*& ppJsDoc) const;
- void operator<<(CFX_ByteString);
- void operator>>(CFX_ByteString&) const;
- void operator<<(CFX_WideString);
- void operator>>(CFX_WideString&) const;
- void operator<<(const FX_WCHAR* c_string);
- void operator<<(JSFXObject);
- void operator>>(JSFXObject&) const;
- void operator>>(CJS_Array& array) const;
- void operator<<(CJS_Array& array);
- void operator<<(CJS_Date& date);
- void operator>>(CJS_Date& date) const;
- operator v8::Local<v8::Value>() const;
- void StartSetting();
- void StartGetting();
-private:
- FX_BOOL m_bIsSetting;
+class CJS_PropValue : public CJS_Value {
+ public:
+ CJS_PropValue(const CJS_Value&);
+ CJS_PropValue(v8::Isolate* isolate);
+ ~CJS_PropValue();
+
+ public:
+ FX_BOOL IsSetting();
+ FX_BOOL IsGetting();
+ void operator<<(int);
+ void operator>>(int&) const;
+ void operator<<(bool);
+ void operator>>(bool&) const;
+ void operator<<(double);
+ void operator>>(double&) const;
+ void operator<<(CJS_Object* pObj);
+ void operator>>(CJS_Object*& ppObj) const;
+ void operator<<(CJS_Document* pJsDoc);
+ void operator>>(CJS_Document*& ppJsDoc) const;
+ void operator<<(CFX_ByteString);
+ void operator>>(CFX_ByteString&) const;
+ void operator<<(CFX_WideString);
+ void operator>>(CFX_WideString&) const;
+ void operator<<(const FX_WCHAR* c_string);
+ void operator<<(JSFXObject);
+ void operator>>(JSFXObject&) const;
+ void operator>>(CJS_Array& array) const;
+ void operator<<(CJS_Array& array);
+ void operator<<(CJS_Date& date);
+ void operator>>(CJS_Date& date) const;
+ operator v8::Local<v8::Value>() const;
+ void StartSetting();
+ void StartGetting();
+
+ private:
+ FX_BOOL m_bIsSetting;
};
-class CJS_Array
-{
-public:
- CJS_Array(v8::Isolate* isolate);
- virtual ~CJS_Array();
-
- void Attach(v8::Local<v8::Array> pArray);
- void GetElement(unsigned index,CJS_Value &value);
- void SetElement(unsigned index,CJS_Value value);
- int GetLength();
- FX_BOOL IsAttached();
- operator v8::Local<v8::Array>();
-
- v8::Isolate* GetIsolate() {return m_isolate;}
-private:
- v8::Local<v8::Array> m_pArray;
- v8::Isolate* m_isolate;
+class CJS_Array {
+ public:
+ CJS_Array(v8::Isolate* isolate);
+ virtual ~CJS_Array();
+
+ void Attach(v8::Local<v8::Array> pArray);
+ void GetElement(unsigned index, CJS_Value& value);
+ void SetElement(unsigned index, CJS_Value value);
+ int GetLength();
+ FX_BOOL IsAttached();
+ operator v8::Local<v8::Array>();
+
+ v8::Isolate* GetIsolate() { return m_isolate; }
+
+ private:
+ v8::Local<v8::Array> m_pArray;
+ v8::Isolate* m_isolate;
};
-class CJS_Date
-{
-friend class CJS_Value;
-public:
- CJS_Date(v8::Isolate* isolate);
- CJS_Date(v8::Isolate* isolate,double dMsec_time);
- CJS_Date(v8::Isolate* isolate,int year, int mon, int day,int hour, int min, int sec);
- virtual ~CJS_Date();
- void Attach(v8::Local<v8::Value> pDate);
+class CJS_Date {
+ friend class CJS_Value;
+
+ public:
+ CJS_Date(v8::Isolate* isolate);
+ CJS_Date(v8::Isolate* isolate, double dMsec_time);
+ CJS_Date(v8::Isolate* isolate,
+ int year,
+ int mon,
+ int day,
+ int hour,
+ int min,
+ int sec);
+ virtual ~CJS_Date();
+ void Attach(v8::Local<v8::Value> pDate);
- int GetYear();
- void SetYear(int iYear);
+ int GetYear();
+ void SetYear(int iYear);
- int GetMonth();
- void SetMonth(int iMonth);
+ int GetMonth();
+ void SetMonth(int iMonth);
- int GetDay();
- void SetDay(int iDay);
+ int GetDay();
+ void SetDay(int iDay);
- int GetHours();
- void SetHours(int iHours);
+ int GetHours();
+ void SetHours(int iHours);
- int GetMinutes();
- void SetMinutes(int minutes);
+ int GetMinutes();
+ void SetMinutes(int minutes);
- int GetSeconds();
- void SetSeconds(int seconds);
+ int GetSeconds();
+ void SetSeconds(int seconds);
- operator v8::Local<v8::Value>();
- operator double() const;
+ operator v8::Local<v8::Value>();
+ operator double() const;
- CFX_WideString ToString() const;
+ CFX_WideString ToString() const;
- static double MakeDate(int year, int mon, int mday,int hour, int min, int sec,int ms);
+ static double
+ MakeDate(int year, int mon, int mday, int hour, int min, int sec, int ms);
- FX_BOOL IsValidDate();
+ FX_BOOL IsValidDate();
-protected:
- v8::Local<v8::Value> m_pDate;
- v8::Isolate* m_isolate;
+ protected:
+ v8::Local<v8::Value> m_pDate;
+ v8::Isolate* m_isolate;
};
#endif // FPDFSDK_INCLUDE_JAVASCRIPT_JS_VALUE_H_
diff --git a/fpdfsdk/include/javascript/PublicMethods.h b/fpdfsdk/include/javascript/PublicMethods.h
index cff9e11479..c5d5ea6d46 100644
--- a/fpdfsdk/include/javascript/PublicMethods.h
+++ b/fpdfsdk/include/javascript/PublicMethods.h
@@ -9,95 +9,177 @@
#include "JS_Define.h"
-class CJS_PublicMethods : public CJS_Object
-{
-public:
- CJS_PublicMethods(JSFXObject pObject) : CJS_Object(pObject) {};
- virtual ~CJS_PublicMethods(void){};
+class CJS_PublicMethods : public CJS_Object {
+ public:
+ CJS_PublicMethods(JSFXObject pObject) : CJS_Object(pObject){};
+ virtual ~CJS_PublicMethods(void){};
-public:
- static FX_BOOL AFNumber_Format(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- static FX_BOOL AFNumber_Keystroke(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- static FX_BOOL AFPercent_Format(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- static FX_BOOL AFPercent_Keystroke(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- static FX_BOOL AFDate_FormatEx(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- static FX_BOOL AFDate_KeystrokeEx(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- static FX_BOOL AFDate_Format(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- static FX_BOOL AFDate_Keystroke(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- static FX_BOOL AFTime_FormatEx(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError); //
- static FX_BOOL AFTime_KeystrokeEx(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- static FX_BOOL AFTime_Format(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- static FX_BOOL AFTime_Keystroke(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- static FX_BOOL AFSpecial_Format(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- static FX_BOOL AFSpecial_Keystroke(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- static FX_BOOL AFSpecial_KeystrokeEx(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);//
- static FX_BOOL AFSimple(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- static FX_BOOL AFMakeNumber(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- static FX_BOOL AFSimple_Calculate(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- static FX_BOOL AFRange_Validate(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- static FX_BOOL AFMergeChange(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- static FX_BOOL AFParseDateEx(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- static FX_BOOL AFExtractNums(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
+ public:
+ static FX_BOOL AFNumber_Format(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ static FX_BOOL AFNumber_Keystroke(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ static FX_BOOL AFPercent_Format(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ static FX_BOOL AFPercent_Keystroke(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ static FX_BOOL AFDate_FormatEx(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ static FX_BOOL AFDate_KeystrokeEx(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ static FX_BOOL AFDate_Format(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ static FX_BOOL AFDate_Keystroke(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ static FX_BOOL AFTime_FormatEx(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError); //
+ static FX_BOOL AFTime_KeystrokeEx(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ static FX_BOOL AFTime_Format(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ static FX_BOOL AFTime_Keystroke(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ static FX_BOOL AFSpecial_Format(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ static FX_BOOL AFSpecial_Keystroke(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ static FX_BOOL AFSpecial_KeystrokeEx(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError); //
+ static FX_BOOL AFSimple(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ static FX_BOOL AFMakeNumber(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ static FX_BOOL AFSimple_Calculate(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ static FX_BOOL AFRange_Validate(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ static FX_BOOL AFMergeChange(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ static FX_BOOL AFParseDateEx(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ static FX_BOOL AFExtractNums(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
-public:
- JS_STATIC_GLOBAL_FUN(AFNumber_Format);
- JS_STATIC_GLOBAL_FUN(AFNumber_Keystroke);
- JS_STATIC_GLOBAL_FUN(AFPercent_Format);
- JS_STATIC_GLOBAL_FUN(AFPercent_Keystroke);
- JS_STATIC_GLOBAL_FUN(AFDate_FormatEx);
- JS_STATIC_GLOBAL_FUN(AFDate_KeystrokeEx);
- JS_STATIC_GLOBAL_FUN(AFDate_Format);
- JS_STATIC_GLOBAL_FUN(AFDate_Keystroke);
- JS_STATIC_GLOBAL_FUN(AFTime_FormatEx);
- JS_STATIC_GLOBAL_FUN(AFTime_KeystrokeEx);
- JS_STATIC_GLOBAL_FUN(AFTime_Format);
- JS_STATIC_GLOBAL_FUN(AFTime_Keystroke);
- JS_STATIC_GLOBAL_FUN(AFSpecial_Format);
- JS_STATIC_GLOBAL_FUN(AFSpecial_Keystroke);
- JS_STATIC_GLOBAL_FUN(AFSpecial_KeystrokeEx);
- JS_STATIC_GLOBAL_FUN(AFSimple);
- JS_STATIC_GLOBAL_FUN(AFMakeNumber);
- JS_STATIC_GLOBAL_FUN(AFSimple_Calculate);
- JS_STATIC_GLOBAL_FUN(AFRange_Validate);
- JS_STATIC_GLOBAL_FUN(AFMergeChange);
- JS_STATIC_GLOBAL_FUN(AFParseDateEx);
- JS_STATIC_GLOBAL_FUN(AFExtractNums);
+ public:
+ JS_STATIC_GLOBAL_FUN(AFNumber_Format);
+ JS_STATIC_GLOBAL_FUN(AFNumber_Keystroke);
+ JS_STATIC_GLOBAL_FUN(AFPercent_Format);
+ JS_STATIC_GLOBAL_FUN(AFPercent_Keystroke);
+ JS_STATIC_GLOBAL_FUN(AFDate_FormatEx);
+ JS_STATIC_GLOBAL_FUN(AFDate_KeystrokeEx);
+ JS_STATIC_GLOBAL_FUN(AFDate_Format);
+ JS_STATIC_GLOBAL_FUN(AFDate_Keystroke);
+ JS_STATIC_GLOBAL_FUN(AFTime_FormatEx);
+ JS_STATIC_GLOBAL_FUN(AFTime_KeystrokeEx);
+ JS_STATIC_GLOBAL_FUN(AFTime_Format);
+ JS_STATIC_GLOBAL_FUN(AFTime_Keystroke);
+ JS_STATIC_GLOBAL_FUN(AFSpecial_Format);
+ JS_STATIC_GLOBAL_FUN(AFSpecial_Keystroke);
+ JS_STATIC_GLOBAL_FUN(AFSpecial_KeystrokeEx);
+ JS_STATIC_GLOBAL_FUN(AFSimple);
+ JS_STATIC_GLOBAL_FUN(AFMakeNumber);
+ JS_STATIC_GLOBAL_FUN(AFSimple_Calculate);
+ JS_STATIC_GLOBAL_FUN(AFRange_Validate);
+ JS_STATIC_GLOBAL_FUN(AFMergeChange);
+ JS_STATIC_GLOBAL_FUN(AFParseDateEx);
+ JS_STATIC_GLOBAL_FUN(AFExtractNums);
- JS_STATIC_DECLARE_GLOBAL_FUN();
+ JS_STATIC_DECLARE_GLOBAL_FUN();
-public:
- static int ParseStringInteger(const CFX_WideString & string,int nStart,int & nSkip, int nMaxStep);
- static CFX_WideString ParseStringString(const CFX_WideString& string, int nStart, int& nSkip);
- static double MakeRegularDate(const CFX_WideString & value,const CFX_WideString & format, FX_BOOL& bWrongFormat);
- static CFX_WideString MakeFormatDate(double dDate,const CFX_WideString & format);
- static FX_BOOL ConvertStringToNumber(const FX_WCHAR* swSource, double & dRet, FX_BOOL & bDot);
- static double ParseStringToNumber(const FX_WCHAR* swSource);
- static double ParseNormalDate(const CFX_WideString & value, FX_BOOL& bWrongFormat);
- static double MakeInterDate(CFX_WideString strValue);
- static double ParseNumber(const FX_WCHAR* swSource, FX_BOOL& bAllDigits, FX_BOOL& bDot, FX_BOOL& bSign, FX_BOOL& bKXJS);
+ public:
+ static int ParseStringInteger(const CFX_WideString& string,
+ int nStart,
+ int& nSkip,
+ int nMaxStep);
+ static CFX_WideString ParseStringString(const CFX_WideString& string,
+ int nStart,
+ int& nSkip);
+ static double MakeRegularDate(const CFX_WideString& value,
+ const CFX_WideString& format,
+ FX_BOOL& bWrongFormat);
+ static CFX_WideString MakeFormatDate(double dDate,
+ const CFX_WideString& format);
+ static FX_BOOL ConvertStringToNumber(const FX_WCHAR* swSource,
+ double& dRet,
+ FX_BOOL& bDot);
+ static double ParseStringToNumber(const FX_WCHAR* swSource);
+ static double ParseNormalDate(const CFX_WideString& value,
+ FX_BOOL& bWrongFormat);
+ static double MakeInterDate(CFX_WideString strValue);
+ static double ParseNumber(const FX_WCHAR* swSource,
+ FX_BOOL& bAllDigits,
+ FX_BOOL& bDot,
+ FX_BOOL& bSign,
+ FX_BOOL& bKXJS);
-public:
- static CFX_WideString StrLTrim(const FX_WCHAR* pStr);
- static CFX_WideString StrRTrim(const FX_WCHAR* pStr);
- static CFX_WideString StrTrim(const FX_WCHAR* pStr);
+ public:
+ static CFX_WideString StrLTrim(const FX_WCHAR* pStr);
+ static CFX_WideString StrRTrim(const FX_WCHAR* pStr);
+ static CFX_WideString StrTrim(const FX_WCHAR* pStr);
- static CFX_ByteString StrLTrim(const FX_CHAR* pStr);
- static CFX_ByteString StrRTrim(const FX_CHAR* pStr);
- static CFX_ByteString StrTrim(const FX_CHAR* pStr);
+ static CFX_ByteString StrLTrim(const FX_CHAR* pStr);
+ static CFX_ByteString StrRTrim(const FX_CHAR* pStr);
+ static CFX_ByteString StrTrim(const FX_CHAR* pStr);
- static FX_BOOL IsNumber(const FX_CHAR* string);
- static FX_BOOL IsNumber(const FX_WCHAR* string);
+ static FX_BOOL IsNumber(const FX_CHAR* string);
+ static FX_BOOL IsNumber(const FX_WCHAR* string);
- static FX_BOOL IsDigit(char ch);
- static FX_BOOL IsDigit(wchar_t ch);
- static FX_BOOL IsAlphabetic(wchar_t ch);
- static FX_BOOL IsAlphaNumeric(wchar_t ch);
+ static FX_BOOL IsDigit(char ch);
+ static FX_BOOL IsDigit(wchar_t ch);
+ static FX_BOOL IsAlphabetic(wchar_t ch);
+ static FX_BOOL IsAlphaNumeric(wchar_t ch);
- static FX_BOOL maskSatisfied(wchar_t c_Change,wchar_t c_Mask);
- static FX_BOOL isReservedMaskChar(wchar_t ch);
+ static FX_BOOL maskSatisfied(wchar_t c_Change, wchar_t c_Mask);
+ static FX_BOOL isReservedMaskChar(wchar_t ch);
- static double AF_Simple(const FX_WCHAR* sFuction, double dValue1, double dValue2);
- static CJS_Array AF_MakeArrayFromList(v8::Isolate* isolate, CJS_Value val);
+ static double AF_Simple(const FX_WCHAR* sFuction,
+ double dValue1,
+ double dValue2);
+ static CJS_Array AF_MakeArrayFromList(v8::Isolate* isolate, CJS_Value val);
};
#endif // FPDFSDK_INCLUDE_JAVASCRIPT_PUBLICMETHODS_H_
diff --git a/fpdfsdk/include/javascript/app.h b/fpdfsdk/include/javascript/app.h
index ac90e62b0d..221a7c1d89 100644
--- a/fpdfsdk/include/javascript/app.h
+++ b/fpdfsdk/include/javascript/app.h
@@ -15,35 +15,33 @@ class CJS_Runtime;
class CJS_Timer;
-class TimerObj : public CJS_EmbedObj
-{
-public:
- TimerObj(CJS_Object* pJSObject);
- virtual ~TimerObj();
-
-public:
- void SetTimer(CJS_Timer* pTimer);
- CJS_Timer* GetTimer() const;
-
-private:
- CJS_Timer* m_pTimer;
-};
+class TimerObj : public CJS_EmbedObj {
+ public:
+ TimerObj(CJS_Object* pJSObject);
+ virtual ~TimerObj();
-class CJS_TimerObj : public CJS_Object
-{
-public:
- CJS_TimerObj(JSFXObject pObject) : CJS_Object(pObject) {}
- virtual ~CJS_TimerObj(){}
+ public:
+ void SetTimer(CJS_Timer* pTimer);
+ CJS_Timer* GetTimer() const;
- DECLARE_JS_CLASS(CJS_TimerObj);
+ private:
+ CJS_Timer* m_pTimer;
};
+class CJS_TimerObj : public CJS_Object {
+ public:
+ CJS_TimerObj(JSFXObject pObject) : CJS_Object(pObject) {}
+ virtual ~CJS_TimerObj() {}
+
+ DECLARE_JS_CLASS(CJS_TimerObj);
+};
// struct APP_MENUITEM_ARRAY;
//
// struct APP_MENUITEM
// {
-// APP_MENUITEM() : oSubMenu(NULL), cName(L""), cReturn(L""), bMarked(false), bEnabled(true)
+// APP_MENUITEM() : oSubMenu(NULL), cName(L""), cReturn(L""),
+// bMarked(false), bEnabled(true)
// {
// }
// CFX_WideString cName;
@@ -103,121 +101,206 @@ public:
// HMENU hMenu;
// };
-class app : public CJS_EmbedObj
-{
-public:
- app(CJS_Object * pJSObject);
- virtual ~app();
-
-public:
- FX_BOOL activeDocs(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL calculate(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL formsVersion(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL fs(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL fullscreen(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL language(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL media(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL platform(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL runtimeHighlight(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL viewerType(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL viewerVariation(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL viewerVersion(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
-
-
- FX_BOOL alert(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL beep(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL browseForDoc(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL clearInterval(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL clearTimeOut(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL execDialog(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL execMenuItem(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL findComponent(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL goBack(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL goForward(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL launchURL(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL mailMsg(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL newFDF(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL newDoc(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL openDoc(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL openFDF(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL popUpMenuEx(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL popUpMenu(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL response(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL setInterval(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL setTimeOut(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
-
-private:
-// FX_DWORD AppGetTickCount();
- void TimerProc(CJS_Timer* pTimer);
- void RunJsScript(CJS_Runtime * pRuntime,const CFX_WideString & wsScript);
-// void ParsePopupMenuObj(APP_MENUITEM * ppMenuItem,JSObject * pObj);
-// void DeleteMenuItems(APP_MENUITEM_ARRAY * pMenuItems);
-// void AddMenuItem(APP_MENUITEM_ARRAY * pMenuItems, HMENU hMenu, MENUITEMINFO MenuItemInfo);
-// void InitMenuItemInfo(MENUITEMINFO& MenuItemInfo);
-// void DestroyPopUpMenu();
-
-// void ParserMenuItem(APP_MENU* pHead, const CJS_Parameters&params);
-// void AddItemToMenu(APP_MENU* pHead, HMENU hMenu, MENUITEMINFO MenuItemInfo);
-// void DestroyMenuItems(APP_MENU* pHead);
-
-public:
- static CFX_WideString SysPathToPDFPath(const CFX_WideString& sOldPath);
-
-private:
-
- bool m_bCalculate;
- bool m_bRuntimeHighLight;
-
- CFX_ArrayTemplate<CJS_Timer*> m_aTimer;
-// APP_MENU* m_pMenuHead;
-
-public:
-// static CReader_App* s_App;
+class app : public CJS_EmbedObj {
+ public:
+ app(CJS_Object* pJSObject);
+ virtual ~app();
+
+ public:
+ FX_BOOL activeDocs(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError);
+ FX_BOOL calculate(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError);
+ FX_BOOL formsVersion(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError);
+ FX_BOOL fs(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
+ FX_BOOL fullscreen(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError);
+ FX_BOOL language(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError);
+ FX_BOOL media(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
+ FX_BOOL platform(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError);
+ FX_BOOL runtimeHighlight(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError);
+ FX_BOOL viewerType(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError);
+ FX_BOOL viewerVariation(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError);
+ FX_BOOL viewerVersion(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError);
+
+ FX_BOOL alert(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL beep(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL browseForDoc(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL clearInterval(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL clearTimeOut(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL execDialog(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL execMenuItem(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL findComponent(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL goBack(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL goForward(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL launchURL(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL mailMsg(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL newFDF(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL newDoc(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL openDoc(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL openFDF(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL popUpMenuEx(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL popUpMenu(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL response(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL setInterval(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL setTimeOut(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+
+ private:
+ // FX_DWORD AppGetTickCount();
+ void TimerProc(CJS_Timer* pTimer);
+ void RunJsScript(CJS_Runtime* pRuntime, const CFX_WideString& wsScript);
+ // void ParsePopupMenuObj(APP_MENUITEM *
+ //ppMenuItem,JSObject * pObj);
+ // void DeleteMenuItems(APP_MENUITEM_ARRAY *
+ //pMenuItems);
+ // void AddMenuItem(APP_MENUITEM_ARRAY * pMenuItems, HMENU
+ // hMenu, MENUITEMINFO MenuItemInfo);
+ // void InitMenuItemInfo(MENUITEMINFO&
+ // MenuItemInfo);
+ // void DestroyPopUpMenu();
+
+ // void ParserMenuItem(APP_MENU* pHead, const
+ // CJS_Parameters&params);
+ // void AddItemToMenu(APP_MENU* pHead, HMENU hMenu,
+ // MENUITEMINFO MenuItemInfo);
+ // void DestroyMenuItems(APP_MENU*
+ // pHead);
+
+ public:
+ static CFX_WideString SysPathToPDFPath(const CFX_WideString& sOldPath);
+
+ private:
+ bool m_bCalculate;
+ bool m_bRuntimeHighLight;
+
+ CFX_ArrayTemplate<CJS_Timer*> m_aTimer;
+ // APP_MENU* m_pMenuHead;
+
+ public:
+ // static CReader_App* s_App;
};
-class CJS_App : public CJS_Object
-{
-public:
- CJS_App(JSFXObject pObject) : CJS_Object(pObject) {};
- virtual ~CJS_App(void){};
-
- DECLARE_JS_CLASS(CJS_App);
-
- JS_STATIC_PROP(activeDocs, app);
- JS_STATIC_PROP(calculate, app);
- JS_STATIC_PROP(formsVersion, app);
- JS_STATIC_PROP(fs, app);
- JS_STATIC_PROP(fullscreen, app);
- JS_STATIC_PROP(language, app);
- JS_STATIC_PROP(media, app);
- JS_STATIC_PROP(platform, app);
- JS_STATIC_PROP(runtimeHighlight, app);
- JS_STATIC_PROP(viewerType, app);
- JS_STATIC_PROP(viewerVariation, app);
- JS_STATIC_PROP(viewerVersion, app);
-
- JS_STATIC_METHOD(alert, app);
- JS_STATIC_METHOD(beep, app);
- JS_STATIC_METHOD(browseForDoc, app);
- JS_STATIC_METHOD(clearInterval, app);
- JS_STATIC_METHOD(clearTimeOut, app);
- JS_STATIC_METHOD(execDialog, app);
- JS_STATIC_METHOD(execMenuItem, app);
- JS_STATIC_METHOD(findComponent, app);
- JS_STATIC_METHOD(goBack, app);
- JS_STATIC_METHOD(goForward, app);
- JS_STATIC_METHOD(launchURL, app);
- JS_STATIC_METHOD(mailMsg, app);
- JS_STATIC_METHOD(newFDF, app);
- JS_STATIC_METHOD(newDoc, app);
- JS_STATIC_METHOD(openDoc, app);
- JS_STATIC_METHOD(openFDF, app);
- JS_STATIC_METHOD(popUpMenuEx, app);
- JS_STATIC_METHOD(popUpMenu, app);
- JS_STATIC_METHOD(response, app);
- JS_STATIC_METHOD(setInterval, app);
- JS_STATIC_METHOD(setTimeOut, app);
-
+class CJS_App : public CJS_Object {
+ public:
+ CJS_App(JSFXObject pObject) : CJS_Object(pObject){};
+ virtual ~CJS_App(void){};
+
+ DECLARE_JS_CLASS(CJS_App);
+
+ JS_STATIC_PROP(activeDocs, app);
+ JS_STATIC_PROP(calculate, app);
+ JS_STATIC_PROP(formsVersion, app);
+ JS_STATIC_PROP(fs, app);
+ JS_STATIC_PROP(fullscreen, app);
+ JS_STATIC_PROP(language, app);
+ JS_STATIC_PROP(media, app);
+ JS_STATIC_PROP(platform, app);
+ JS_STATIC_PROP(runtimeHighlight, app);
+ JS_STATIC_PROP(viewerType, app);
+ JS_STATIC_PROP(viewerVariation, app);
+ JS_STATIC_PROP(viewerVersion, app);
+
+ JS_STATIC_METHOD(alert, app);
+ JS_STATIC_METHOD(beep, app);
+ JS_STATIC_METHOD(browseForDoc, app);
+ JS_STATIC_METHOD(clearInterval, app);
+ JS_STATIC_METHOD(clearTimeOut, app);
+ JS_STATIC_METHOD(execDialog, app);
+ JS_STATIC_METHOD(execMenuItem, app);
+ JS_STATIC_METHOD(findComponent, app);
+ JS_STATIC_METHOD(goBack, app);
+ JS_STATIC_METHOD(goForward, app);
+ JS_STATIC_METHOD(launchURL, app);
+ JS_STATIC_METHOD(mailMsg, app);
+ JS_STATIC_METHOD(newFDF, app);
+ JS_STATIC_METHOD(newDoc, app);
+ JS_STATIC_METHOD(openDoc, app);
+ JS_STATIC_METHOD(openFDF, app);
+ JS_STATIC_METHOD(popUpMenuEx, app);
+ JS_STATIC_METHOD(popUpMenu, app);
+ JS_STATIC_METHOD(response, app);
+ JS_STATIC_METHOD(setInterval, app);
+ JS_STATIC_METHOD(setTimeOut, app);
};
#endif // FPDFSDK_INCLUDE_JAVASCRIPT_APP_H_
diff --git a/fpdfsdk/include/javascript/color.h b/fpdfsdk/include/javascript/color.h
index df863b552f..45704efa80 100644
--- a/fpdfsdk/include/javascript/color.h
+++ b/fpdfsdk/include/javascript/color.h
@@ -10,71 +10,76 @@
#include "JS_Define.h"
// TODO(tsepez): include CPWL_Color.h once its own IWYU is fixed.
-class color : public CJS_EmbedObj
-{
-public:
- color(CJS_Object* pJSObject);
- virtual ~color(void);
+class color : public CJS_EmbedObj {
+ public:
+ color(CJS_Object* pJSObject);
+ virtual ~color(void);
- FX_BOOL black(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL blue(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL cyan(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL dkGray(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL gray(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL green(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL ltGray(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL magenta(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL red(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL transparent(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL white(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL yellow(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
+ FX_BOOL black(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
+ FX_BOOL blue(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
+ FX_BOOL cyan(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
+ FX_BOOL dkGray(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
+ FX_BOOL gray(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
+ FX_BOOL green(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
+ FX_BOOL ltGray(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
+ FX_BOOL magenta(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
+ FX_BOOL red(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
+ FX_BOOL transparent(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError);
+ FX_BOOL white(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
+ FX_BOOL yellow(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL convert(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL equal(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
+ FX_BOOL convert(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL equal(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
-public:
- static void ConvertPWLColorToArray(const CPWL_Color& color, CJS_Array& array);
- static void ConvertArrayToPWLColor(CJS_Array& array, CPWL_Color& color);
+ public:
+ static void ConvertPWLColorToArray(const CPWL_Color& color, CJS_Array& array);
+ static void ConvertArrayToPWLColor(CJS_Array& array, CPWL_Color& color);
-private:
- CPWL_Color m_crTransparent;
- CPWL_Color m_crBlack;
- CPWL_Color m_crWhite;
- CPWL_Color m_crRed;
- CPWL_Color m_crGreen;
- CPWL_Color m_crBlue;
- CPWL_Color m_crCyan;
- CPWL_Color m_crMagenta;
- CPWL_Color m_crYellow;
- CPWL_Color m_crDKGray;
- CPWL_Color m_crGray;
- CPWL_Color m_crLTGray;
+ private:
+ CPWL_Color m_crTransparent;
+ CPWL_Color m_crBlack;
+ CPWL_Color m_crWhite;
+ CPWL_Color m_crRed;
+ CPWL_Color m_crGreen;
+ CPWL_Color m_crBlue;
+ CPWL_Color m_crCyan;
+ CPWL_Color m_crMagenta;
+ CPWL_Color m_crYellow;
+ CPWL_Color m_crDKGray;
+ CPWL_Color m_crGray;
+ CPWL_Color m_crLTGray;
};
-class CJS_Color : public CJS_Object
-{
-public:
- CJS_Color(JSFXObject pObject) : CJS_Object(pObject) {};
- virtual ~CJS_Color(void){};
+class CJS_Color : public CJS_Object {
+ public:
+ CJS_Color(JSFXObject pObject) : CJS_Object(pObject){};
+ virtual ~CJS_Color(void){};
- DECLARE_JS_CLASS(CJS_Color);
+ DECLARE_JS_CLASS(CJS_Color);
- JS_STATIC_PROP(black, color);
- JS_STATIC_PROP(blue, color);
- JS_STATIC_PROP(cyan, color);
- JS_STATIC_PROP(dkGray, color);
- JS_STATIC_PROP(gray, color);
- JS_STATIC_PROP(green, color);
- JS_STATIC_PROP(ltGray, color);
- JS_STATIC_PROP(magenta, color);
- JS_STATIC_PROP(red, color);
- JS_STATIC_PROP(transparent, color);
- JS_STATIC_PROP(white, color);
- JS_STATIC_PROP(yellow, color);
-
- JS_STATIC_METHOD(convert,color);
- JS_STATIC_METHOD(equal,color);
+ JS_STATIC_PROP(black, color);
+ JS_STATIC_PROP(blue, color);
+ JS_STATIC_PROP(cyan, color);
+ JS_STATIC_PROP(dkGray, color);
+ JS_STATIC_PROP(gray, color);
+ JS_STATIC_PROP(green, color);
+ JS_STATIC_PROP(ltGray, color);
+ JS_STATIC_PROP(magenta, color);
+ JS_STATIC_PROP(red, color);
+ JS_STATIC_PROP(transparent, color);
+ JS_STATIC_PROP(white, color);
+ JS_STATIC_PROP(yellow, color);
+ JS_STATIC_METHOD(convert, color);
+ JS_STATIC_METHOD(equal, color);
};
#endif // FPDFSDK_INCLUDE_JAVASCRIPT_COLOR_H_
diff --git a/fpdfsdk/include/javascript/console.h b/fpdfsdk/include/javascript/console.h
index 0cbc291b44..a04d87b007 100644
--- a/fpdfsdk/include/javascript/console.h
+++ b/fpdfsdk/include/javascript/console.h
@@ -9,31 +9,41 @@
#include "JS_Define.h"
-class console : public CJS_EmbedObj
-{
-public:
- console(CJS_Object* pJSObject);
- virtual ~console(void);
-
-public:
- FX_BOOL clear(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL hide(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL println(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL show(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
+class console : public CJS_EmbedObj {
+ public:
+ console(CJS_Object* pJSObject);
+ virtual ~console(void);
+
+ public:
+ FX_BOOL clear(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL hide(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL println(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL show(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
};
-class CJS_Console : public CJS_Object
-{
-public:
- CJS_Console(JSFXObject pObject) : CJS_Object(pObject) {};
- virtual ~CJS_Console(void){};
+class CJS_Console : public CJS_Object {
+ public:
+ CJS_Console(JSFXObject pObject) : CJS_Object(pObject){};
+ virtual ~CJS_Console(void){};
- DECLARE_JS_CLASS(CJS_Console);
+ DECLARE_JS_CLASS(CJS_Console);
- JS_STATIC_METHOD(clear, console);
- JS_STATIC_METHOD(hide, console);
- JS_STATIC_METHOD(println, console);
- JS_STATIC_METHOD(show, console);
+ JS_STATIC_METHOD(clear, console);
+ JS_STATIC_METHOD(hide, console);
+ JS_STATIC_METHOD(println, console);
+ JS_STATIC_METHOD(show, console);
};
#endif // FPDFSDK_INCLUDE_JAVASCRIPT_CONSOLE_H_
diff --git a/fpdfsdk/include/javascript/event.h b/fpdfsdk/include/javascript/event.h
index 91a38ba487..c7c899e69d 100644
--- a/fpdfsdk/include/javascript/event.h
+++ b/fpdfsdk/include/javascript/event.h
@@ -9,64 +9,81 @@
#include "JS_Define.h"
-class event : public CJS_EmbedObj
-{
-public:
- event(CJS_Object * pJSObject);
- virtual ~event(void);
-
-public:
- FX_BOOL change(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL changeEx(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL commitKey(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL fieldFull(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL keyDown(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL modifier(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL name(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL rc(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL richChange(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL richChangeEx(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL richValue(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL selEnd(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL selStart(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL shift(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL source(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL target(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL targetName(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL type(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL value(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
- FX_BOOL willCommit(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
+class event : public CJS_EmbedObj {
+ public:
+ event(CJS_Object* pJSObject);
+ virtual ~event(void);
+ public:
+ FX_BOOL change(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
+ FX_BOOL changeEx(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError);
+ FX_BOOL commitKey(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError);
+ FX_BOOL fieldFull(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError);
+ FX_BOOL keyDown(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
+ FX_BOOL modifier(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError);
+ FX_BOOL name(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
+ FX_BOOL rc(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
+ FX_BOOL richChange(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError);
+ FX_BOOL richChangeEx(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError);
+ FX_BOOL richValue(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError);
+ FX_BOOL selEnd(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
+ FX_BOOL selStart(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError);
+ FX_BOOL shift(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
+ FX_BOOL source(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
+ FX_BOOL target(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
+ FX_BOOL targetName(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError);
+ FX_BOOL type(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
+ FX_BOOL value(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError);
+ FX_BOOL willCommit(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError);
};
-class CJS_Event : public CJS_Object
-{
-public:
- CJS_Event(JSFXObject pObject) : CJS_Object(pObject) {};
- virtual ~CJS_Event(void){};
+class CJS_Event : public CJS_Object {
+ public:
+ CJS_Event(JSFXObject pObject) : CJS_Object(pObject){};
+ virtual ~CJS_Event(void){};
- DECLARE_JS_CLASS(CJS_Event);
+ DECLARE_JS_CLASS(CJS_Event);
- JS_STATIC_PROP(change, event);
- JS_STATIC_PROP(changeEx, event);
- JS_STATIC_PROP(commitKey, event);
- JS_STATIC_PROP(fieldFull, event);
- JS_STATIC_PROP(keyDown, event);
- JS_STATIC_PROP(modifier, event);
- JS_STATIC_PROP(name, event);
- JS_STATIC_PROP(rc, event);
- JS_STATIC_PROP(richChange, event);
- JS_STATIC_PROP(richChangeEx, event);
- JS_STATIC_PROP(richValue, event);
- JS_STATIC_PROP(selEnd, event);
- JS_STATIC_PROP(selStart, event);
- JS_STATIC_PROP(shift, event);
- JS_STATIC_PROP(source, event);
- JS_STATIC_PROP(target, event);
- JS_STATIC_PROP(targetName, event);
- JS_STATIC_PROP(type, event);
- JS_STATIC_PROP(value, event);
- JS_STATIC_PROP(willCommit, event);
+ JS_STATIC_PROP(change, event);
+ JS_STATIC_PROP(changeEx, event);
+ JS_STATIC_PROP(commitKey, event);
+ JS_STATIC_PROP(fieldFull, event);
+ JS_STATIC_PROP(keyDown, event);
+ JS_STATIC_PROP(modifier, event);
+ JS_STATIC_PROP(name, event);
+ JS_STATIC_PROP(rc, event);
+ JS_STATIC_PROP(richChange, event);
+ JS_STATIC_PROP(richChangeEx, event);
+ JS_STATIC_PROP(richValue, event);
+ JS_STATIC_PROP(selEnd, event);
+ JS_STATIC_PROP(selStart, event);
+ JS_STATIC_PROP(shift, event);
+ JS_STATIC_PROP(source, event);
+ JS_STATIC_PROP(target, event);
+ JS_STATIC_PROP(targetName, event);
+ JS_STATIC_PROP(type, event);
+ JS_STATIC_PROP(value, event);
+ JS_STATIC_PROP(willCommit, event);
};
#endif // FPDFSDK_INCLUDE_JAVASCRIPT_EVENT_H_
diff --git a/fpdfsdk/include/javascript/global.h b/fpdfsdk/include/javascript/global.h
index 83e07f67c3..303ac76a3e 100644
--- a/fpdfsdk/include/javascript/global.h
+++ b/fpdfsdk/include/javascript/global.h
@@ -13,77 +13,82 @@ class CJS_GlobalData;
class CJS_GlobalVariableArray;
class CJS_KeyValue;
-struct js_global_data
-{
- js_global_data()
- {
- nType = 0;
- dData = 0;
- bData = FALSE;
- sData = "";
- bPersistent = FALSE;
- bDeleted = FALSE;
- }
-
- ~js_global_data()
- {
- pData.Reset();
- }
- int nType; //0:int 1:bool 2:string 3:obj
- double dData;
- bool bData;
- CFX_ByteString sData;
- v8::Global<v8::Object> pData;
- bool bPersistent;
- bool bDeleted;
+struct js_global_data {
+ js_global_data() {
+ nType = 0;
+ dData = 0;
+ bData = FALSE;
+ sData = "";
+ bPersistent = FALSE;
+ bDeleted = FALSE;
+ }
+
+ ~js_global_data() { pData.Reset(); }
+ int nType; // 0:int 1:bool 2:string 3:obj
+ double dData;
+ bool bData;
+ CFX_ByteString sData;
+ v8::Global<v8::Object> pData;
+ bool bPersistent;
+ bool bDeleted;
};
-class global_alternate : public CJS_EmbedObj
-{
-public:
- global_alternate(CJS_Object* pJSObject);
- virtual ~global_alternate();
-
-public:
- FX_BOOL setPersistent(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
-
-public:
- FX_BOOL QueryProperty(const FX_WCHAR* propname);
- FX_BOOL DoProperty(IFXJS_Context* cc, const FX_WCHAR* propname, CJS_PropValue & vp, CFX_WideString & sError);
- FX_BOOL DelProperty(IFXJS_Context* cc, const FX_WCHAR* propname, CFX_WideString & sError);
-
- void Initial(CPDFDoc_Environment* pApp);
-
-private:
- void UpdateGlobalPersistentVariables();
- void CommitGlobalPersisitentVariables();
- void DestroyGlobalPersisitentVariables();
- FX_BOOL SetGlobalVariables(const FX_CHAR* propname, int nType,
- double dData, bool bData, const CFX_ByteString& sData, JSObject pData, bool bDefaultPersistent);
-
- void ObjectToArray(v8::Local<v8::Object> pObj, CJS_GlobalVariableArray& array);
- void PutObjectProperty(v8::Local<v8::Object> obj, CJS_KeyValue* pData);
-
-private:
- CFX_MapByteStringToPtr m_mapGlobal;
- CFX_WideString m_sFilePath;
- CJS_GlobalData* m_pGlobalData;
- CPDFDoc_Environment* m_pApp;
+class global_alternate : public CJS_EmbedObj {
+ public:
+ global_alternate(CJS_Object* pJSObject);
+ virtual ~global_alternate();
+
+ public:
+ FX_BOOL setPersistent(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+
+ public:
+ FX_BOOL QueryProperty(const FX_WCHAR* propname);
+ FX_BOOL DoProperty(IFXJS_Context* cc,
+ const FX_WCHAR* propname,
+ CJS_PropValue& vp,
+ CFX_WideString& sError);
+ FX_BOOL DelProperty(IFXJS_Context* cc,
+ const FX_WCHAR* propname,
+ CFX_WideString& sError);
+
+ void Initial(CPDFDoc_Environment* pApp);
+
+ private:
+ void UpdateGlobalPersistentVariables();
+ void CommitGlobalPersisitentVariables();
+ void DestroyGlobalPersisitentVariables();
+ FX_BOOL SetGlobalVariables(const FX_CHAR* propname,
+ int nType,
+ double dData,
+ bool bData,
+ const CFX_ByteString& sData,
+ JSObject pData,
+ bool bDefaultPersistent);
+
+ void ObjectToArray(v8::Local<v8::Object> pObj,
+ CJS_GlobalVariableArray& array);
+ void PutObjectProperty(v8::Local<v8::Object> obj, CJS_KeyValue* pData);
+
+ private:
+ CFX_MapByteStringToPtr m_mapGlobal;
+ CFX_WideString m_sFilePath;
+ CJS_GlobalData* m_pGlobalData;
+ CPDFDoc_Environment* m_pApp;
};
+class CJS_Global : public CJS_Object {
+ public:
+ CJS_Global(JSFXObject pObject) : CJS_Object(pObject){};
+ virtual ~CJS_Global(void){};
-class CJS_Global : public CJS_Object
-{
-public:
- CJS_Global(JSFXObject pObject) : CJS_Object(pObject) {};
- virtual ~CJS_Global(void){};
+ virtual FX_BOOL InitInstance(IFXJS_Context* cc);
- virtual FX_BOOL InitInstance(IFXJS_Context* cc);
-
- DECLARE_SPECIAL_JS_CLASS(CJS_Global);
-
- JS_SPECIAL_STATIC_METHOD(setPersistent, global_alternate, global);
+ DECLARE_SPECIAL_JS_CLASS(CJS_Global);
+ JS_SPECIAL_STATIC_METHOD(setPersistent, global_alternate, global);
};
#endif // FPDFSDK_INCLUDE_JAVASCRIPT_GLOBAL_H_
diff --git a/fpdfsdk/include/javascript/report.h b/fpdfsdk/include/javascript/report.h
index 56f742ce08..a9004fd46a 100644
--- a/fpdfsdk/include/javascript/report.h
+++ b/fpdfsdk/include/javascript/report.h
@@ -9,28 +9,32 @@
#include "JS_Define.h"
-class Report : public CJS_EmbedObj
-{
-public:
- Report(CJS_Object * pJSObject);
- virtual ~Report();
-
-public:
- FX_BOOL save(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL writeText(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
+class Report : public CJS_EmbedObj {
+ public:
+ Report(CJS_Object* pJSObject);
+ virtual ~Report();
+
+ public:
+ FX_BOOL save(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL writeText(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
};
-class CJS_Report : public CJS_Object
-{
-public:
- CJS_Report(JSFXObject pObject) : CJS_Object(pObject){};
- virtual ~CJS_Report(){};
+class CJS_Report : public CJS_Object {
+ public:
+ CJS_Report(JSFXObject pObject) : CJS_Object(pObject){};
+ virtual ~CJS_Report(){};
-public:
- DECLARE_JS_CLASS(CJS_Report);
+ public:
+ DECLARE_JS_CLASS(CJS_Report);
- JS_STATIC_METHOD(save, Report)
- JS_STATIC_METHOD(writeText, Report);
+ JS_STATIC_METHOD(save, Report)
+ JS_STATIC_METHOD(writeText, Report);
};
#endif // FPDFSDK_INCLUDE_JAVASCRIPT_REPORT_H_
diff --git a/fpdfsdk/include/javascript/resource.h b/fpdfsdk/include/javascript/resource.h
index 433785984d..80629cf2ae 100644
--- a/fpdfsdk/include/javascript/resource.h
+++ b/fpdfsdk/include/javascript/resource.h
@@ -8,28 +8,28 @@
#define FPDFSDK_INCLUDE_JAVASCRIPT_RESOURCE_H_
#include "../../../core/include/fxcrt/fx_string.h" // For CFX_WideString.
-#include "../fsdk_define.h" // For FX_UINT.
+#include "../fsdk_define.h" // For FX_UINT.
class CJS_Context;
-#define IDS_STRING_JSALERT 25613
-#define IDS_STRING_JSPARAMERROR 25614
+#define IDS_STRING_JSALERT 25613
+#define IDS_STRING_JSPARAMERROR 25614
#define IDS_STRING_JSAFNUMBER_KEYSTROKE 25615
-#define IDS_STRING_JSPARAM_TOOLONG 25617
-#define IDS_STRING_JSPARSEDATE 25618
-#define IDS_STRING_JSRANGE1 25619
-#define IDS_STRING_JSRANGE2 25620
-#define IDS_STRING_JSRANGE3 25621
-#define IDS_STRING_NOTSUPPORT 25627
-#define IDS_STRING_JSBUSY 25628
-#define IDS_STRING_JSEVENT 25629
-#define IDS_STRING_RUN 25630
-#define IDS_STRING_JSPRINT1 25632
-#define IDS_STRING_JSPRINT2 25633
-#define IDS_STRING_JSNOGLOBAL 25635
-#define IDS_STRING_JSREADONLY 25636
-#define IDS_STRING_JSTYPEERROR 25637
-#define IDS_STRING_JSVALUEERROR 25638
+#define IDS_STRING_JSPARAM_TOOLONG 25617
+#define IDS_STRING_JSPARSEDATE 25618
+#define IDS_STRING_JSRANGE1 25619
+#define IDS_STRING_JSRANGE2 25620
+#define IDS_STRING_JSRANGE3 25621
+#define IDS_STRING_NOTSUPPORT 25627
+#define IDS_STRING_JSBUSY 25628
+#define IDS_STRING_JSEVENT 25629
+#define IDS_STRING_RUN 25630
+#define IDS_STRING_JSPRINT1 25632
+#define IDS_STRING_JSPRINT2 25633
+#define IDS_STRING_JSNOGLOBAL 25635
+#define IDS_STRING_JSREADONLY 25636
+#define IDS_STRING_JSTYPEERROR 25637
+#define IDS_STRING_JSVALUEERROR 25638
CFX_WideString JSGetStringFromID(CJS_Context* pContext, FX_UINT id);
CFX_WideString JSFormatErrorString(const char* class_name,
diff --git a/fpdfsdk/include/javascript/util.h b/fpdfsdk/include/javascript/util.h
index ca4db349da..2e65bd3f58 100644
--- a/fpdfsdk/include/javascript/util.h
+++ b/fpdfsdk/include/javascript/util.h
@@ -11,40 +11,58 @@
#include "JS_Define.h"
-class util : public CJS_EmbedObj
-{
-public:
- util(CJS_Object * pJSObject);
- virtual ~util(void);
-
-public:
- FX_BOOL printd(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL printf(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL printx(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL scand(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
- FX_BOOL byteToChar(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
-
-public:
- static void printd(const std::wstring &cFormat,CJS_Date Date,bool bXFAPicture, std::wstring &cPurpose);
- static void printx(const std::string &cFormat,const std::string &cSource, std::string &cPurpose);
- static int ParstDataType(std::wstring* sFormat);
+class util : public CJS_EmbedObj {
+ public:
+ util(CJS_Object* pJSObject);
+ virtual ~util(void);
+
+ public:
+ FX_BOOL printd(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL printf(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL printx(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL scand(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+ FX_BOOL byteToChar(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError);
+
+ public:
+ static void printd(const std::wstring& cFormat,
+ CJS_Date Date,
+ bool bXFAPicture,
+ std::wstring& cPurpose);
+ static void printx(const std::string& cFormat,
+ const std::string& cSource,
+ std::string& cPurpose);
+ static int ParstDataType(std::wstring* sFormat);
};
-class CJS_Util : public CJS_Object
-{
-public:
- CJS_Util(JSFXObject pObject) : CJS_Object(pObject) {};
- virtual ~CJS_Util(void){};
+class CJS_Util : public CJS_Object {
+ public:
+ CJS_Util(JSFXObject pObject) : CJS_Object(pObject){};
+ virtual ~CJS_Util(void){};
- DECLARE_JS_CLASS(CJS_Util);
+ DECLARE_JS_CLASS(CJS_Util);
- JS_STATIC_METHOD(printd, util);
- JS_STATIC_METHOD(printf, util);
- JS_STATIC_METHOD(printx, util);
- JS_STATIC_METHOD(scand, util);
- JS_STATIC_METHOD(byteToChar, util);
+ JS_STATIC_METHOD(printd, util);
+ JS_STATIC_METHOD(printf, util);
+ JS_STATIC_METHOD(printx, util);
+ JS_STATIC_METHOD(scand, util);
+ JS_STATIC_METHOD(byteToChar, util);
};
-int64_t FX_atoi64(const char *nptr);
+int64_t FX_atoi64(const char* nptr);
#endif // FPDFSDK_INCLUDE_JAVASCRIPT_UTIL_H_
diff --git a/fpdfsdk/include/jsapi/fxjs_v8.h b/fpdfsdk/include/jsapi/fxjs_v8.h
index e291898701..72f2a5de01 100644
--- a/fpdfsdk/include/jsapi/fxjs_v8.h
+++ b/fpdfsdk/include/jsapi/fxjs_v8.h
@@ -13,127 +13,202 @@
#include <v8.h>
#include "../../../core/include/fxcrt/fx_string.h" // For CFX_WideString
-typedef v8::Value JSValue;
-typedef v8::Local<v8::Object> JSObject;
-typedef v8::Local<v8::Object> JSFXObject;
-
-enum FXJSOBJTYPE
-{
- JS_DYNAMIC = 0,
- JS_STATIC = 1,
+typedef v8::Value JSValue;
+typedef v8::Local<v8::Object> JSObject;
+typedef v8::Local<v8::Object> JSFXObject;
+
+enum FXJSOBJTYPE {
+ JS_DYNAMIC = 0,
+ JS_STATIC = 1,
};
-enum FXJSVALUETYPE
-{
- VT_unknown,
- VT_string,
- VT_number,
- VT_boolean,
- VT_date,
- VT_object,
- VT_fxobject,
- VT_null,
- VT_undefined
+enum FXJSVALUETYPE {
+ VT_unknown,
+ VT_string,
+ VT_number,
+ VT_boolean,
+ VT_date,
+ VT_object,
+ VT_fxobject,
+ VT_null,
+ VT_undefined
};
-struct FXJSErr
-{
- const wchar_t* message;
- const wchar_t* srcline;
- unsigned linnum;
+struct FXJSErr {
+ const wchar_t* message;
+ const wchar_t* srcline;
+ unsigned linnum;
};
-/* --------------------------------------------- API --------------------------------------------- */
+/* --------------------------------------------- API
+ * --------------------------------------------- */
typedef v8::Isolate IJS_Runtime;
class IFXJS_Context;
class IFXJS_Runtime;
-typedef void (*LP_CONSTRUCTOR)(IFXJS_Context* cc, v8::Local<v8::Object> obj, v8::Local<v8::Object> global);
+typedef void (*LP_CONSTRUCTOR)(IFXJS_Context* cc,
+ v8::Local<v8::Object> obj,
+ v8::Local<v8::Object> global);
typedef void (*LP_DESTRUCTOR)(v8::Local<v8::Object> obj);
-
-int JS_DefineObj(IJS_Runtime* pJSRuntime, const wchar_t* sObjName, FXJSOBJTYPE eObjType, LP_CONSTRUCTOR pConstructor, LP_DESTRUCTOR pDestructor);
-int JS_DefineObjMethod(IJS_Runtime* pJSRuntime, int nObjDefnID, const wchar_t* sMethodName, v8::FunctionCallback pMethodCall);
-int JS_DefineObjProperty(IJS_Runtime* pJSRuntime, int nObjDefnID, const wchar_t* sPropName, v8::AccessorGetterCallback pPropGet, v8::AccessorSetterCallback pPropPut);
-int JS_DefineObjAllProperties(IJS_Runtime* pJSRuntime, int nObjDefnID, v8::NamedPropertyQueryCallback pPropQurey, v8::NamedPropertyGetterCallback pPropGet, v8::NamedPropertySetterCallback pPropPut, v8::NamedPropertyDeleterCallback pPropDel);
-int JS_DefineObjConst(IJS_Runtime* pJSRuntime, int nObjDefnID, const wchar_t* sConstName, v8::Local<v8::Value> pDefault);
-int JS_DefineGlobalMethod(IJS_Runtime* pJSRuntime, const wchar_t* sMethodName, v8::FunctionCallback pMethodCall);
-int JS_DefineGlobalConst(IJS_Runtime* pJSRuntime, const wchar_t* sConstName, v8::Local<v8::Value> pDefault);
-
-void JS_InitialRuntime(IJS_Runtime* pJSRuntime,IFXJS_Runtime* pFXRuntime, IFXJS_Context* context, v8::Global<v8::Context>& v8PersistentContext);
-void JS_ReleaseRuntime(IJS_Runtime* pJSRuntime, v8::Global<v8::Context>& v8PersistentContext);
-void JS_Initial(unsigned int embedderDataSlot);
-void JS_Release();
-int JS_Parse(IJS_Runtime* pJSRuntime, IFXJS_Context* pJSContext, const wchar_t* script, long length, FXJSErr* perror);
-int JS_Execute(IJS_Runtime* pJSRuntime, IFXJS_Context* pJSContext, const wchar_t* script, long length, FXJSErr* perror);
-v8::Local<v8::Object> JS_NewFxDynamicObj(IJS_Runtime* pJSRuntime, IFXJS_Context* pJSContext, int nObjDefnID);
-v8::Local<v8::Object> JS_GetStaticObj(IJS_Runtime* pJSRuntime, int nObjDefnID);
-void JS_SetThisObj(IJS_Runtime* pJSRuntime, int nThisObjID);
-v8::Local<v8::Object> JS_GetThisObj(IJS_Runtime * pJSRuntime);
-int JS_GetObjDefnID(v8::Local<v8::Object> pObj);
-IJS_Runtime* JS_GetRuntime(v8::Local<v8::Object> pObj);
-int JS_GetObjDefnID(IJS_Runtime * pJSRuntime, const wchar_t* pObjName);
-void JS_Error(v8::Isolate* isolate, const CFX_WideString& message);
-unsigned JS_CalcHash(const wchar_t* main, unsigned nLen);
-unsigned JS_CalcHash(const wchar_t* main);
-const wchar_t* JS_GetTypeof(v8::Local<v8::Value> pObj);
-void JS_SetPrivate(IJS_Runtime* pJSRuntime, v8::Local<v8::Object> pObj, void* p);
-void* JS_GetPrivate(IJS_Runtime* pJSRuntime, v8::Local<v8::Object> pObj);
-void JS_SetPrivate(v8::Local<v8::Object> pObj, void* p);
-void* JS_GetPrivate(v8::Local<v8::Object> pObj);
-void JS_FreePrivate(void* p);
-void JS_FreePrivate(v8::Local<v8::Object> pObj);
-v8::Local<v8::Value> JS_GetObjectValue(v8::Local<v8::Object> pObj);
-v8::Local<v8::Value> JS_GetObjectElement(IJS_Runtime* pJSRuntime, v8::Local<v8::Object> pObj,const wchar_t* PropertyName);
-v8::Local<v8::Array> JS_GetObjectElementNames(IJS_Runtime* pJSRuntime, v8::Local<v8::Object> pObj);
-void JS_PutObjectString(IJS_Runtime* pJSRuntime,v8::Local<v8::Object> pObj, const wchar_t* PropertyName, const wchar_t* sValue);
-void JS_PutObjectNumber(IJS_Runtime* pJSRuntime,v8::Local<v8::Object> pObj, const wchar_t* PropertyName, int nValue);
-void JS_PutObjectNumber(IJS_Runtime* pJSRuntime,v8::Local<v8::Object> pObj, const wchar_t* PropertyName, float fValue);
-void JS_PutObjectNumber(IJS_Runtime* pJSRuntime,v8::Local<v8::Object> pObj, const wchar_t* PropertyName, double dValue);
-void JS_PutObjectBoolean(IJS_Runtime* pJSRuntime,v8::Local<v8::Object> pObj, const wchar_t* PropertyName, bool bValue);
-void JS_PutObjectObject(IJS_Runtime* pJSRuntime,v8::Local<v8::Object> pObj, const wchar_t* PropertyName, v8::Local<v8::Object> pPut);
-void JS_PutObjectNull(IJS_Runtime* pJSRuntime,v8::Local<v8::Object> pObj, const wchar_t* PropertyName);
-unsigned JS_PutArrayElement(IJS_Runtime* pJSRuntime, v8::Local<v8::Array> pArray,unsigned index,v8::Local<v8::Value> pValue,FXJSVALUETYPE eType);
-v8::Local<v8::Value> JS_GetArrayElement(IJS_Runtime* pJSRuntime, v8::Local<v8::Array> pArray,unsigned index);
-unsigned JS_GetArrayLength(v8::Local<v8::Array> pArray);
-v8::Local<v8::Value> JS_GetListValue(IJS_Runtime* pJSRuntime, v8::Local<v8::Value> pList, int index);
-
-
-v8::Local<v8::Array> JS_NewArray(IJS_Runtime* pJSRuntime);
-v8::Local<v8::Value> JS_NewNumber(IJS_Runtime* pJSRuntime,int number);
-v8::Local<v8::Value> JS_NewNumber(IJS_Runtime* pJSRuntime,double number);
-v8::Local<v8::Value> JS_NewNumber(IJS_Runtime* pJSRuntime,float number);
-v8::Local<v8::Value> JS_NewBoolean(IJS_Runtime* pJSRuntime,bool b);
-v8::Local<v8::Value> JS_NewObject(IJS_Runtime* pJSRuntime,v8::Local<v8::Object> pObj);
-v8::Local<v8::Value> JS_NewObject2(IJS_Runtime* pJSRuntime,v8::Local<v8::Array> pObj);
-v8::Local<v8::Value> JS_NewString(IJS_Runtime* pJSRuntime,const wchar_t* string);
-v8::Local<v8::Value> JS_NewString(IJS_Runtime* pJSRuntime,const wchar_t* string, unsigned nLen);
-v8::Local<v8::Value> JS_NewNull();
-v8::Local<v8::Value> JS_NewDate(IJS_Runtime* pJSRuntime,double d);
-v8::Local<v8::Value> JS_NewValue(IJS_Runtime* pJSRuntime);
-
-
-int JS_ToInt32(IJS_Runtime* pJSRuntime, v8::Local<v8::Value> pValue);
-bool JS_ToBoolean(IJS_Runtime* pJSRuntime, v8::Local<v8::Value> pValue);
-double JS_ToNumber(IJS_Runtime* pJSRuntime, v8::Local<v8::Value> pValue);
-v8::Local<v8::Object> JS_ToObject(IJS_Runtime* pJSRuntime, v8::Local<v8::Value> pValue);
-CFX_WideString JS_ToString(IJS_Runtime* pJSRuntime, v8::Local<v8::Value> pValue);
-v8::Local<v8::Array> JS_ToArray(IJS_Runtime* pJSRuntime, v8::Local<v8::Value> pValue);
-void JS_ValueCopy(v8::Local<v8::Value>& pTo, v8::Local<v8::Value> pFrom);
-
-double JS_GetDateTime();
-int JS_GetYearFromTime(double dt);
-int JS_GetMonthFromTime(double dt);
-int JS_GetDayFromTime(double dt);
-int JS_GetHourFromTime(double dt);
-int JS_GetMinFromTime(double dt);
-int JS_GetSecFromTime(double dt);
-double JS_DateParse(const wchar_t* string);
-double JS_MakeDay(int nYear, int nMonth, int nDay);
-double JS_MakeTime(int nHour, int nMin, int nSec, int nMs);
-double JS_MakeDate(double day, double time);
-bool JS_PortIsNan(double d);
-double JS_LocalTime(double d);
+int JS_DefineObj(IJS_Runtime* pJSRuntime,
+ const wchar_t* sObjName,
+ FXJSOBJTYPE eObjType,
+ LP_CONSTRUCTOR pConstructor,
+ LP_DESTRUCTOR pDestructor);
+int JS_DefineObjMethod(IJS_Runtime* pJSRuntime,
+ int nObjDefnID,
+ const wchar_t* sMethodName,
+ v8::FunctionCallback pMethodCall);
+int JS_DefineObjProperty(IJS_Runtime* pJSRuntime,
+ int nObjDefnID,
+ const wchar_t* sPropName,
+ v8::AccessorGetterCallback pPropGet,
+ v8::AccessorSetterCallback pPropPut);
+int JS_DefineObjAllProperties(IJS_Runtime* pJSRuntime,
+ int nObjDefnID,
+ v8::NamedPropertyQueryCallback pPropQurey,
+ v8::NamedPropertyGetterCallback pPropGet,
+ v8::NamedPropertySetterCallback pPropPut,
+ v8::NamedPropertyDeleterCallback pPropDel);
+int JS_DefineObjConst(IJS_Runtime* pJSRuntime,
+ int nObjDefnID,
+ const wchar_t* sConstName,
+ v8::Local<v8::Value> pDefault);
+int JS_DefineGlobalMethod(IJS_Runtime* pJSRuntime,
+ const wchar_t* sMethodName,
+ v8::FunctionCallback pMethodCall);
+int JS_DefineGlobalConst(IJS_Runtime* pJSRuntime,
+ const wchar_t* sConstName,
+ v8::Local<v8::Value> pDefault);
+
+void JS_InitialRuntime(IJS_Runtime* pJSRuntime,
+ IFXJS_Runtime* pFXRuntime,
+ IFXJS_Context* context,
+ v8::Global<v8::Context>& v8PersistentContext);
+void JS_ReleaseRuntime(IJS_Runtime* pJSRuntime,
+ v8::Global<v8::Context>& v8PersistentContext);
+void JS_Initial(unsigned int embedderDataSlot);
+void JS_Release();
+int JS_Parse(IJS_Runtime* pJSRuntime,
+ IFXJS_Context* pJSContext,
+ const wchar_t* script,
+ long length,
+ FXJSErr* perror);
+int JS_Execute(IJS_Runtime* pJSRuntime,
+ IFXJS_Context* pJSContext,
+ const wchar_t* script,
+ long length,
+ FXJSErr* perror);
+v8::Local<v8::Object> JS_NewFxDynamicObj(IJS_Runtime* pJSRuntime,
+ IFXJS_Context* pJSContext,
+ int nObjDefnID);
+v8::Local<v8::Object> JS_GetStaticObj(IJS_Runtime* pJSRuntime, int nObjDefnID);
+void JS_SetThisObj(IJS_Runtime* pJSRuntime, int nThisObjID);
+v8::Local<v8::Object> JS_GetThisObj(IJS_Runtime* pJSRuntime);
+int JS_GetObjDefnID(v8::Local<v8::Object> pObj);
+IJS_Runtime* JS_GetRuntime(v8::Local<v8::Object> pObj);
+int JS_GetObjDefnID(IJS_Runtime* pJSRuntime, const wchar_t* pObjName);
+void JS_Error(v8::Isolate* isolate, const CFX_WideString& message);
+unsigned JS_CalcHash(const wchar_t* main, unsigned nLen);
+unsigned JS_CalcHash(const wchar_t* main);
+const wchar_t* JS_GetTypeof(v8::Local<v8::Value> pObj);
+void JS_SetPrivate(IJS_Runtime* pJSRuntime,
+ v8::Local<v8::Object> pObj,
+ void* p);
+void* JS_GetPrivate(IJS_Runtime* pJSRuntime, v8::Local<v8::Object> pObj);
+void JS_SetPrivate(v8::Local<v8::Object> pObj, void* p);
+void* JS_GetPrivate(v8::Local<v8::Object> pObj);
+void JS_FreePrivate(void* p);
+void JS_FreePrivate(v8::Local<v8::Object> pObj);
+v8::Local<v8::Value> JS_GetObjectValue(v8::Local<v8::Object> pObj);
+v8::Local<v8::Value> JS_GetObjectElement(IJS_Runtime* pJSRuntime,
+ v8::Local<v8::Object> pObj,
+ const wchar_t* PropertyName);
+v8::Local<v8::Array> JS_GetObjectElementNames(IJS_Runtime* pJSRuntime,
+ v8::Local<v8::Object> pObj);
+void JS_PutObjectString(IJS_Runtime* pJSRuntime,
+ v8::Local<v8::Object> pObj,
+ const wchar_t* PropertyName,
+ const wchar_t* sValue);
+void JS_PutObjectNumber(IJS_Runtime* pJSRuntime,
+ v8::Local<v8::Object> pObj,
+ const wchar_t* PropertyName,
+ int nValue);
+void JS_PutObjectNumber(IJS_Runtime* pJSRuntime,
+ v8::Local<v8::Object> pObj,
+ const wchar_t* PropertyName,
+ float fValue);
+void JS_PutObjectNumber(IJS_Runtime* pJSRuntime,
+ v8::Local<v8::Object> pObj,
+ const wchar_t* PropertyName,
+ double dValue);
+void JS_PutObjectBoolean(IJS_Runtime* pJSRuntime,
+ v8::Local<v8::Object> pObj,
+ const wchar_t* PropertyName,
+ bool bValue);
+void JS_PutObjectObject(IJS_Runtime* pJSRuntime,
+ v8::Local<v8::Object> pObj,
+ const wchar_t* PropertyName,
+ v8::Local<v8::Object> pPut);
+void JS_PutObjectNull(IJS_Runtime* pJSRuntime,
+ v8::Local<v8::Object> pObj,
+ const wchar_t* PropertyName);
+unsigned JS_PutArrayElement(IJS_Runtime* pJSRuntime,
+ v8::Local<v8::Array> pArray,
+ unsigned index,
+ v8::Local<v8::Value> pValue,
+ FXJSVALUETYPE eType);
+v8::Local<v8::Value> JS_GetArrayElement(IJS_Runtime* pJSRuntime,
+ v8::Local<v8::Array> pArray,
+ unsigned index);
+unsigned JS_GetArrayLength(v8::Local<v8::Array> pArray);
+v8::Local<v8::Value> JS_GetListValue(IJS_Runtime* pJSRuntime,
+ v8::Local<v8::Value> pList,
+ int index);
+
+v8::Local<v8::Array> JS_NewArray(IJS_Runtime* pJSRuntime);
+v8::Local<v8::Value> JS_NewNumber(IJS_Runtime* pJSRuntime, int number);
+v8::Local<v8::Value> JS_NewNumber(IJS_Runtime* pJSRuntime, double number);
+v8::Local<v8::Value> JS_NewNumber(IJS_Runtime* pJSRuntime, float number);
+v8::Local<v8::Value> JS_NewBoolean(IJS_Runtime* pJSRuntime, bool b);
+v8::Local<v8::Value> JS_NewObject(IJS_Runtime* pJSRuntime,
+ v8::Local<v8::Object> pObj);
+v8::Local<v8::Value> JS_NewObject2(IJS_Runtime* pJSRuntime,
+ v8::Local<v8::Array> pObj);
+v8::Local<v8::Value> JS_NewString(IJS_Runtime* pJSRuntime,
+ const wchar_t* string);
+v8::Local<v8::Value> JS_NewString(IJS_Runtime* pJSRuntime,
+ const wchar_t* string,
+ unsigned nLen);
+v8::Local<v8::Value> JS_NewNull();
+v8::Local<v8::Value> JS_NewDate(IJS_Runtime* pJSRuntime, double d);
+v8::Local<v8::Value> JS_NewValue(IJS_Runtime* pJSRuntime);
+
+int JS_ToInt32(IJS_Runtime* pJSRuntime, v8::Local<v8::Value> pValue);
+bool JS_ToBoolean(IJS_Runtime* pJSRuntime, v8::Local<v8::Value> pValue);
+double JS_ToNumber(IJS_Runtime* pJSRuntime, v8::Local<v8::Value> pValue);
+v8::Local<v8::Object> JS_ToObject(IJS_Runtime* pJSRuntime,
+ v8::Local<v8::Value> pValue);
+CFX_WideString JS_ToString(IJS_Runtime* pJSRuntime,
+ v8::Local<v8::Value> pValue);
+v8::Local<v8::Array> JS_ToArray(IJS_Runtime* pJSRuntime,
+ v8::Local<v8::Value> pValue);
+void JS_ValueCopy(v8::Local<v8::Value>& pTo, v8::Local<v8::Value> pFrom);
+
+double JS_GetDateTime();
+int JS_GetYearFromTime(double dt);
+int JS_GetMonthFromTime(double dt);
+int JS_GetDayFromTime(double dt);
+int JS_GetHourFromTime(double dt);
+int JS_GetMinFromTime(double dt);
+int JS_GetSecFromTime(double dt);
+double JS_DateParse(const wchar_t* string);
+double JS_MakeDay(int nYear, int nMonth, int nDay);
+double JS_MakeTime(int nHour, int nMin, int nSec, int nMs);
+double JS_MakeDate(double day, double time);
+bool JS_PortIsNan(double d);
+double JS_LocalTime(double d);
#endif // FPDFSDK_INCLUDE_JSAPI_FXJS_V8_H_
diff --git a/fpdfsdk/include/pdfwindow/PWL_Button.h b/fpdfsdk/include/pdfwindow/PWL_Button.h
index 4937841819..363556762f 100644
--- a/fpdfsdk/include/pdfwindow/PWL_Button.h
+++ b/fpdfsdk/include/pdfwindow/PWL_Button.h
@@ -9,19 +9,18 @@
#include "PWL_Wnd.h"
-class CPWL_Button : public CPWL_Wnd
-{
-public:
- CPWL_Button();
- virtual ~CPWL_Button();
+class CPWL_Button : public CPWL_Wnd {
+ public:
+ CPWL_Button();
+ virtual ~CPWL_Button();
- virtual CFX_ByteString GetClassName() const;
- virtual void OnCreate(PWL_CREATEPARAM & cp);
- virtual FX_BOOL OnLButtonDown(const CPDF_Point & point, FX_DWORD nFlag);
- virtual FX_BOOL OnLButtonUp(const CPDF_Point & point, FX_DWORD nFlag);
+ virtual CFX_ByteString GetClassName() const;
+ virtual void OnCreate(PWL_CREATEPARAM& cp);
+ virtual FX_BOOL OnLButtonDown(const CPDF_Point& point, FX_DWORD nFlag);
+ virtual FX_BOOL OnLButtonUp(const CPDF_Point& point, FX_DWORD nFlag);
-protected:
- FX_BOOL m_bMouseDown;
+ protected:
+ FX_BOOL m_bMouseDown;
};
#endif // FPDFSDK_INCLUDE_PDFWINDOW_PWL_BUTTON_H_
diff --git a/fpdfsdk/include/pdfwindow/PWL_Caret.h b/fpdfsdk/include/pdfwindow/PWL_Caret.h
index 6838bc49e7..7e61eeb66e 100644
--- a/fpdfsdk/include/pdfwindow/PWL_Caret.h
+++ b/fpdfsdk/include/pdfwindow/PWL_Caret.h
@@ -9,45 +9,43 @@
#include "PWL_Wnd.h"
-struct PWL_CARET_INFO
-{
-public:
- PWL_CARET_INFO() : bVisible(FALSE), ptHead(0,0), ptFoot(0,0)
- {
- }
-
- FX_BOOL bVisible;
- CPDF_Point ptHead;
- CPDF_Point ptFoot;
-};
+struct PWL_CARET_INFO {
+ public:
+ PWL_CARET_INFO() : bVisible(FALSE), ptHead(0, 0), ptFoot(0, 0) {}
+ FX_BOOL bVisible;
+ CPDF_Point ptHead;
+ CPDF_Point ptFoot;
+};
-class CPWL_Caret : public CPWL_Wnd
-{
-public:
- CPWL_Caret();
- virtual ~CPWL_Caret();
-
- virtual CFX_ByteString GetClassName() const;
- virtual void GetThisAppearanceStream(CFX_ByteTextBuf & sAppStream);
- virtual void DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device);
- virtual void InvalidateRect(CPDF_Rect * pRect = NULL);
- virtual void SetVisible(FX_BOOL bVisible) {}
- virtual void TimerProc();
- void SetCaret(FX_BOOL bVisible, const CPDF_Point & ptHead, const CPDF_Point & ptFoot);
- CFX_ByteString GetCaretAppearanceStream(const CPDF_Point & ptOffset);
- void SetInvalidRect(CPDF_Rect rc) {m_rcInvalid = rc;}
-
-private:
- void GetCaretApp(CFX_ByteTextBuf & sAppStream,const CPDF_Point & ptOffset);
- CPDF_Rect GetCaretRect() const;
-
- FX_BOOL m_bFlash;
- CPDF_Point m_ptHead;
- CPDF_Point m_ptFoot;
- FX_FLOAT m_fWidth;
- int32_t m_nDelay;
- CPDF_Rect m_rcInvalid;
+class CPWL_Caret : public CPWL_Wnd {
+ public:
+ CPWL_Caret();
+ virtual ~CPWL_Caret();
+
+ virtual CFX_ByteString GetClassName() const;
+ virtual void GetThisAppearanceStream(CFX_ByteTextBuf& sAppStream);
+ virtual void DrawThisAppearance(CFX_RenderDevice* pDevice,
+ CPDF_Matrix* pUser2Device);
+ virtual void InvalidateRect(CPDF_Rect* pRect = NULL);
+ virtual void SetVisible(FX_BOOL bVisible) {}
+ virtual void TimerProc();
+ void SetCaret(FX_BOOL bVisible,
+ const CPDF_Point& ptHead,
+ const CPDF_Point& ptFoot);
+ CFX_ByteString GetCaretAppearanceStream(const CPDF_Point& ptOffset);
+ void SetInvalidRect(CPDF_Rect rc) { m_rcInvalid = rc; }
+
+ private:
+ void GetCaretApp(CFX_ByteTextBuf& sAppStream, const CPDF_Point& ptOffset);
+ CPDF_Rect GetCaretRect() const;
+
+ FX_BOOL m_bFlash;
+ CPDF_Point m_ptHead;
+ CPDF_Point m_ptFoot;
+ FX_FLOAT m_fWidth;
+ int32_t m_nDelay;
+ CPDF_Rect m_rcInvalid;
};
#endif // FPDFSDK_INCLUDE_PDFWINDOW_PWL_CARET_H_
diff --git a/fpdfsdk/include/pdfwindow/PWL_ComboBox.h b/fpdfsdk/include/pdfwindow/PWL_ComboBox.h
index 7a86ccd0c2..98ae7ca986 100644
--- a/fpdfsdk/include/pdfwindow/PWL_ComboBox.h
+++ b/fpdfsdk/include/pdfwindow/PWL_ComboBox.h
@@ -11,108 +11,108 @@
#include "PWL_ListBox.h"
#include "PWL_Wnd.h"
-class CPWL_CBEdit : public CPWL_Edit
-{
-public:
- CPWL_CBEdit(){};
- virtual ~CPWL_CBEdit(){};
+class CPWL_CBEdit : public CPWL_Edit {
+ public:
+ CPWL_CBEdit(){};
+ virtual ~CPWL_CBEdit(){};
};
-class CPWL_CBListBox : public CPWL_ListBox
-{
-public:
- CPWL_CBListBox(){};
- virtual ~CPWL_CBListBox(){};
+class CPWL_CBListBox : public CPWL_ListBox {
+ public:
+ CPWL_CBListBox(){};
+ virtual ~CPWL_CBListBox(){};
-public:
- virtual FX_BOOL OnLButtonUp(const CPDF_Point & point, FX_DWORD nFlag);
+ public:
+ virtual FX_BOOL OnLButtonUp(const CPDF_Point& point, FX_DWORD nFlag);
- FX_BOOL OnKeyDownWithExit(FX_WORD nChar, FX_BOOL & bExit, FX_DWORD nFlag);
- FX_BOOL OnCharWithExit(FX_WORD nChar, FX_BOOL & bExit, FX_DWORD nFlag);
+ FX_BOOL OnKeyDownWithExit(FX_WORD nChar, FX_BOOL& bExit, FX_DWORD nFlag);
+ FX_BOOL OnCharWithExit(FX_WORD nChar, FX_BOOL& bExit, FX_DWORD nFlag);
};
-#define PWL_COMBOBOX_BUTTON_WIDTH 13
+#define PWL_COMBOBOX_BUTTON_WIDTH 13
-class CPWL_CBButton : public CPWL_Wnd
-{
-public:
- CPWL_CBButton(){};
- virtual ~CPWL_CBButton(){};
+class CPWL_CBButton : public CPWL_Wnd {
+ public:
+ CPWL_CBButton(){};
+ virtual ~CPWL_CBButton(){};
-public:
- virtual void GetThisAppearanceStream(CFX_ByteTextBuf & sAppStream);
- virtual void DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device);
-
- virtual FX_BOOL OnLButtonDown(const CPDF_Point & point, FX_DWORD nFlag);
- virtual FX_BOOL OnLButtonUp(const CPDF_Point & point, FX_DWORD nFlag);
+ public:
+ virtual void GetThisAppearanceStream(CFX_ByteTextBuf& sAppStream);
+ virtual void DrawThisAppearance(CFX_RenderDevice* pDevice,
+ CPDF_Matrix* pUser2Device);
+ virtual FX_BOOL OnLButtonDown(const CPDF_Point& point, FX_DWORD nFlag);
+ virtual FX_BOOL OnLButtonUp(const CPDF_Point& point, FX_DWORD nFlag);
};
-class CPWL_ComboBox : public CPWL_Wnd
-{
-public:
- CPWL_ComboBox();
- operator CPWL_Edit* () {return m_pEdit;}
+class CPWL_ComboBox : public CPWL_Wnd {
+ public:
+ CPWL_ComboBox();
+ operator CPWL_Edit*() { return m_pEdit; }
+
+ public:
+ virtual CFX_ByteString GetClassName() const;
+ virtual void OnCreate(PWL_CREATEPARAM& cp);
-public:
- virtual CFX_ByteString GetClassName() const;
- virtual void OnCreate(PWL_CREATEPARAM & cp);
+ virtual FX_BOOL OnKeyDown(FX_WORD nChar, FX_DWORD nFlag);
+ virtual FX_BOOL OnChar(FX_WORD nChar, FX_DWORD nFlag);
- virtual FX_BOOL OnKeyDown(FX_WORD nChar, FX_DWORD nFlag);
- virtual FX_BOOL OnChar(FX_WORD nChar, FX_DWORD nFlag);
+ virtual void OnNotify(CPWL_Wnd* pWnd,
+ FX_DWORD msg,
+ intptr_t wParam = 0,
+ intptr_t lParam = 0);
- virtual void OnNotify(CPWL_Wnd* pWnd, FX_DWORD msg, intptr_t wParam = 0, intptr_t lParam = 0);
+ virtual void CreateChildWnd(const PWL_CREATEPARAM& cp);
+ virtual void RePosChildWnd();
- virtual void CreateChildWnd(const PWL_CREATEPARAM & cp);
- virtual void RePosChildWnd();
+ virtual CPDF_Rect GetFocusRect() const;
- virtual CPDF_Rect GetFocusRect() const;
+ virtual void SetFocus();
+ virtual void KillFocus();
- virtual void SetFocus();
- virtual void KillFocus();
+ FX_BOOL IsModified() const;
- FX_BOOL IsModified() const;
+ public:
+ void SetFillerNotify(IPWL_Filler_Notify* pNotify);
-public:
- void SetFillerNotify(IPWL_Filler_Notify* pNotify);
+ CFX_WideString GetText() const;
+ void SetText(const FX_WCHAR* text);
- CFX_WideString GetText() const;
- void SetText(const FX_WCHAR* text);
+ void AddString(const FX_WCHAR* string);
+ int32_t GetSelect() const;
+ void SetSelect(int32_t nItemIndex);
- void AddString(const FX_WCHAR* string);
- int32_t GetSelect() const;
- void SetSelect(int32_t nItemIndex);
+ void SetEditSel(int32_t nStartChar, int32_t nEndChar);
+ void GetEditSel(int32_t& nStartChar, int32_t& nEndChar) const;
+ void Clear();
+ void SelectAll();
+ FX_BOOL IsPopup() const;
- void SetEditSel(int32_t nStartChar,int32_t nEndChar);
- void GetEditSel(int32_t & nStartChar, int32_t & nEndChar ) const;
- void Clear();
- void SelectAll();
- FX_BOOL IsPopup() const;
+ void SetSelectText();
- void SetSelectText();
+ private:
+ void CreateEdit(const PWL_CREATEPARAM& cp);
+ void CreateButton(const PWL_CREATEPARAM& cp);
+ void CreateListBox(const PWL_CREATEPARAM& cp);
-private:
- void CreateEdit(const PWL_CREATEPARAM & cp);
- void CreateButton(const PWL_CREATEPARAM & cp);
- void CreateListBox(const PWL_CREATEPARAM & cp);
+ void SetPopup(FX_BOOL bPopup);
- void SetPopup(FX_BOOL bPopup);
+ private:
+ CPWL_CBEdit* m_pEdit;
+ CPWL_CBButton* m_pButton;
+ CPWL_CBListBox* m_pList;
-private:
- CPWL_CBEdit* m_pEdit;
- CPWL_CBButton* m_pButton;
- CPWL_CBListBox* m_pList;
+ FX_BOOL m_bPopup;
+ CPDF_Rect m_rcOldWindow;
+ int32_t m_nPopupWhere;
+ int32_t m_nSelectItem;
+ IPWL_Filler_Notify* m_pFillerNotify;
- FX_BOOL m_bPopup;
- CPDF_Rect m_rcOldWindow;
- int32_t m_nPopupWhere;
- int32_t m_nSelectItem;
- IPWL_Filler_Notify* m_pFillerNotify;
+ public:
+ void AttachFFLData(void* pData) { m_pFormFiller = pData; }
-public:
- void AttachFFLData(void* pData) {m_pFormFiller = pData;}
-private:
- void* m_pFormFiller;
+ private:
+ void* m_pFormFiller;
};
#endif // FPDFSDK_INCLUDE_PDFWINDOW_PWL_COMBOBOX_H_
diff --git a/fpdfsdk/include/pdfwindow/PWL_Edit.h b/fpdfsdk/include/pdfwindow/PWL_Edit.h
index 5c90ff704b..ea1b3ef636 100644
--- a/fpdfsdk/include/pdfwindow/PWL_Edit.h
+++ b/fpdfsdk/include/pdfwindow/PWL_Edit.h
@@ -15,128 +15,164 @@ class CPWL_Edit;
class IPWL_Filler_Notify;
class IPWL_SpellCheck;
-class IPWL_Filler_Notify
-{
-public:
- virtual ~IPWL_Filler_Notify() { }
- virtual void QueryWherePopup(void* pPrivateData, FX_FLOAT fPopupMin,FX_FLOAT fPopupMax,
- int32_t & nRet, FX_FLOAT & fPopupRet) = 0; //nRet: (0:bottom 1:top)
- virtual void OnBeforeKeyStroke(FX_BOOL bEditOrList, void* pPrivateData, int32_t nKeyCode,
- CFX_WideString & strChange, const CFX_WideString& strChangeEx,
- int nSelStart, int nSelEnd,
- FX_BOOL bKeyDown, FX_BOOL & bRC, FX_BOOL & bExit, FX_DWORD nFlag) = 0;
- virtual void OnAfterKeyStroke(FX_BOOL bEditOrList, void* pPrivateData, FX_BOOL & bExit, FX_DWORD nFlag) = 0;
+class IPWL_Filler_Notify {
+ public:
+ virtual ~IPWL_Filler_Notify() {}
+ virtual void QueryWherePopup(
+ void* pPrivateData,
+ FX_FLOAT fPopupMin,
+ FX_FLOAT fPopupMax,
+ int32_t& nRet,
+ FX_FLOAT& fPopupRet) = 0; // nRet: (0:bottom 1:top)
+ virtual void OnBeforeKeyStroke(FX_BOOL bEditOrList,
+ void* pPrivateData,
+ int32_t nKeyCode,
+ CFX_WideString& strChange,
+ const CFX_WideString& strChangeEx,
+ int nSelStart,
+ int nSelEnd,
+ FX_BOOL bKeyDown,
+ FX_BOOL& bRC,
+ FX_BOOL& bExit,
+ FX_DWORD nFlag) = 0;
+ virtual void OnAfterKeyStroke(FX_BOOL bEditOrList,
+ void* pPrivateData,
+ FX_BOOL& bExit,
+ FX_DWORD nFlag) = 0;
};
-class CPWL_Edit : public CPWL_EditCtrl, public IFX_Edit_OprNotify
-{
-public:
- CPWL_Edit();
- virtual ~CPWL_Edit();
-
-public:
- virtual CFX_ByteString GetClassName() const;
- virtual void OnDestroy();
- virtual void OnCreated();
- virtual void RePosChildWnd();
- virtual CPDF_Rect GetClientRect() const;
-
- virtual void GetThisAppearanceStream(CFX_ByteTextBuf & sAppStream);
- virtual void DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device);
-
- virtual FX_BOOL OnLButtonDown(const CPDF_Point & point, FX_DWORD nFlag);
- virtual FX_BOOL OnLButtonDblClk(const CPDF_Point & point, FX_DWORD nFlag);
- virtual FX_BOOL OnRButtonUp(const CPDF_Point & point, FX_DWORD nFlag);
- virtual FX_BOOL OnMouseWheel(short zDelta, const CPDF_Point & point, FX_DWORD nFlag);
-
- virtual FX_BOOL OnKeyDown(FX_WORD nChar, FX_DWORD nFlag);
- virtual FX_BOOL OnChar(FX_WORD nChar, FX_DWORD nFlag);
-
- virtual CPDF_Rect GetFocusRect() const;
-
-public:
- void SetAlignFormatH(PWL_EDIT_ALIGNFORMAT_H nFormat = PEAH_LEFT, FX_BOOL bPaint = TRUE); //0:left 1:right 2:middle
- void SetAlignFormatV(PWL_EDIT_ALIGNFORMAT_V nFormat = PEAV_TOP, FX_BOOL bPaint = TRUE); //0:top 1:bottom 2:center
-
- void SetCharArray(int32_t nCharArray);
- void SetLimitChar(int32_t nLimitChar);
-
- void SetHorzScale(int32_t nHorzScale, FX_BOOL bPaint = TRUE);
- void SetCharSpace(FX_FLOAT fCharSpace, FX_BOOL bPaint = TRUE);
-
- void SetLineLeading(FX_FLOAT fLineLeading, FX_BOOL bPaint = TRUE);
-
- void EnableSpellCheck(FX_BOOL bEnabled);
-
- FX_BOOL CanSelectAll() const;
- FX_BOOL CanClear() const;
- FX_BOOL CanCopy() const;
- FX_BOOL CanCut() const;
- FX_BOOL CanPaste() const;
-
- virtual void CopyText();
- virtual void PasteText();
- virtual void CutText();
-
- virtual void SetText(const FX_WCHAR* csText);
- void ReplaceSel(const FX_WCHAR* csText);
-
- CFX_ByteString GetTextAppearanceStream(const CPDF_Point & ptOffset) const;
- CFX_ByteString GetCaretAppearanceStream(const CPDF_Point & ptOffset) const;
- CFX_ByteString GetSelectAppearanceStream(const CPDF_Point & ptOffset) const;
-
- FX_BOOL IsTextFull() const;
-
- static FX_FLOAT GetCharArrayAutoFontSize(CPDF_Font* pFont, const CPDF_Rect& rcPlate, int32_t nCharArray);
-
- void SetFillerNotify(IPWL_Filler_Notify* pNotify) {m_pFillerNotify = pNotify;}
-
- void GeneratePageObjects(CPDF_PageObjects* pPageObjects,
- const CPDF_Point& ptOffset, CFX_ArrayTemplate<CPDF_TextObject*>& ObjArray);
- void GeneratePageObjects(CPDF_PageObjects* pPageObjects,
- const CPDF_Point& ptOffset);
-
-protected:
- virtual void OnSetFocus();
- virtual void OnKillFocus();
-
-protected:
- virtual void OnInsertWord(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace);
- virtual void OnInsertReturn(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace);
- virtual void OnBackSpace(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace);
- virtual void OnDelete(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace);
- virtual void OnClear(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace);
- virtual void OnSetText(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace);
- virtual void OnInsertText(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace);
- virtual void OnAddUndo(IFX_Edit_UndoItem* pUndoItem);
-
-private:
- CPVT_WordRange GetSelectWordRange() const;
- virtual void ShowVScrollBar(FX_BOOL bShow);
- FX_BOOL IsVScrollBarVisible() const;
- void SetParamByFlag();
-
- FX_FLOAT GetCharArrayAutoFontSize(int32_t nCharArray);
- CPDF_Point GetWordRightBottomPoint(const CPVT_WordPlace& wpWord);
-
- CPVT_WordRange CombineWordRange(const CPVT_WordRange& wr1, const CPVT_WordRange& wr2);
- CPVT_WordRange GetLatinWordsRange(const CPDF_Point & point) const;
- CPVT_WordRange GetLatinWordsRange(const CPVT_WordPlace & place) const;
- CPVT_WordRange GetArabicWordsRange(const CPVT_WordPlace & place) const;
- CPVT_WordRange GetSameWordsRange(const CPVT_WordPlace & place, FX_BOOL bLatin, FX_BOOL bArabic) const;
-
- void AjustArabicWords(const CPVT_WordRange& wr);
-public:
- FX_BOOL IsProceedtoOnChar(FX_WORD nKeyCode, FX_DWORD nFlag);
-private:
- IPWL_Filler_Notify* m_pFillerNotify;
- IPWL_SpellCheck* m_pSpellCheck;
- FX_BOOL m_bFocus;
- CPDF_Rect m_rcOldWindow;
-public:
- void AttachFFLData(void* pData) {m_pFormFiller = pData;}
-private:
- void* m_pFormFiller;
+class CPWL_Edit : public CPWL_EditCtrl, public IFX_Edit_OprNotify {
+ public:
+ CPWL_Edit();
+ virtual ~CPWL_Edit();
+
+ public:
+ virtual CFX_ByteString GetClassName() const;
+ virtual void OnDestroy();
+ virtual void OnCreated();
+ virtual void RePosChildWnd();
+ virtual CPDF_Rect GetClientRect() const;
+
+ virtual void GetThisAppearanceStream(CFX_ByteTextBuf& sAppStream);
+ virtual void DrawThisAppearance(CFX_RenderDevice* pDevice,
+ CPDF_Matrix* pUser2Device);
+
+ virtual FX_BOOL OnLButtonDown(const CPDF_Point& point, FX_DWORD nFlag);
+ virtual FX_BOOL OnLButtonDblClk(const CPDF_Point& point, FX_DWORD nFlag);
+ virtual FX_BOOL OnRButtonUp(const CPDF_Point& point, FX_DWORD nFlag);
+ virtual FX_BOOL OnMouseWheel(short zDelta,
+ const CPDF_Point& point,
+ FX_DWORD nFlag);
+
+ virtual FX_BOOL OnKeyDown(FX_WORD nChar, FX_DWORD nFlag);
+ virtual FX_BOOL OnChar(FX_WORD nChar, FX_DWORD nFlag);
+
+ virtual CPDF_Rect GetFocusRect() const;
+
+ public:
+ void SetAlignFormatH(PWL_EDIT_ALIGNFORMAT_H nFormat = PEAH_LEFT,
+ FX_BOOL bPaint = TRUE); // 0:left 1:right 2:middle
+ void SetAlignFormatV(PWL_EDIT_ALIGNFORMAT_V nFormat = PEAV_TOP,
+ FX_BOOL bPaint = TRUE); // 0:top 1:bottom 2:center
+
+ void SetCharArray(int32_t nCharArray);
+ void SetLimitChar(int32_t nLimitChar);
+
+ void SetHorzScale(int32_t nHorzScale, FX_BOOL bPaint = TRUE);
+ void SetCharSpace(FX_FLOAT fCharSpace, FX_BOOL bPaint = TRUE);
+
+ void SetLineLeading(FX_FLOAT fLineLeading, FX_BOOL bPaint = TRUE);
+
+ void EnableSpellCheck(FX_BOOL bEnabled);
+
+ FX_BOOL CanSelectAll() const;
+ FX_BOOL CanClear() const;
+ FX_BOOL CanCopy() const;
+ FX_BOOL CanCut() const;
+ FX_BOOL CanPaste() const;
+
+ virtual void CopyText();
+ virtual void PasteText();
+ virtual void CutText();
+
+ virtual void SetText(const FX_WCHAR* csText);
+ void ReplaceSel(const FX_WCHAR* csText);
+
+ CFX_ByteString GetTextAppearanceStream(const CPDF_Point& ptOffset) const;
+ CFX_ByteString GetCaretAppearanceStream(const CPDF_Point& ptOffset) const;
+ CFX_ByteString GetSelectAppearanceStream(const CPDF_Point& ptOffset) const;
+
+ FX_BOOL IsTextFull() const;
+
+ static FX_FLOAT GetCharArrayAutoFontSize(CPDF_Font* pFont,
+ const CPDF_Rect& rcPlate,
+ int32_t nCharArray);
+
+ void SetFillerNotify(IPWL_Filler_Notify* pNotify) {
+ m_pFillerNotify = pNotify;
+ }
+
+ void GeneratePageObjects(CPDF_PageObjects* pPageObjects,
+ const CPDF_Point& ptOffset,
+ CFX_ArrayTemplate<CPDF_TextObject*>& ObjArray);
+ void GeneratePageObjects(CPDF_PageObjects* pPageObjects,
+ const CPDF_Point& ptOffset);
+
+ protected:
+ virtual void OnSetFocus();
+ virtual void OnKillFocus();
+
+ protected:
+ virtual void OnInsertWord(const CPVT_WordPlace& place,
+ const CPVT_WordPlace& oldplace);
+ virtual void OnInsertReturn(const CPVT_WordPlace& place,
+ const CPVT_WordPlace& oldplace);
+ virtual void OnBackSpace(const CPVT_WordPlace& place,
+ const CPVT_WordPlace& oldplace);
+ virtual void OnDelete(const CPVT_WordPlace& place,
+ const CPVT_WordPlace& oldplace);
+ virtual void OnClear(const CPVT_WordPlace& place,
+ const CPVT_WordPlace& oldplace);
+ virtual void OnSetText(const CPVT_WordPlace& place,
+ const CPVT_WordPlace& oldplace);
+ virtual void OnInsertText(const CPVT_WordPlace& place,
+ const CPVT_WordPlace& oldplace);
+ virtual void OnAddUndo(IFX_Edit_UndoItem* pUndoItem);
+
+ private:
+ CPVT_WordRange GetSelectWordRange() const;
+ virtual void ShowVScrollBar(FX_BOOL bShow);
+ FX_BOOL IsVScrollBarVisible() const;
+ void SetParamByFlag();
+
+ FX_FLOAT GetCharArrayAutoFontSize(int32_t nCharArray);
+ CPDF_Point GetWordRightBottomPoint(const CPVT_WordPlace& wpWord);
+
+ CPVT_WordRange CombineWordRange(const CPVT_WordRange& wr1,
+ const CPVT_WordRange& wr2);
+ CPVT_WordRange GetLatinWordsRange(const CPDF_Point& point) const;
+ CPVT_WordRange GetLatinWordsRange(const CPVT_WordPlace& place) const;
+ CPVT_WordRange GetArabicWordsRange(const CPVT_WordPlace& place) const;
+ CPVT_WordRange GetSameWordsRange(const CPVT_WordPlace& place,
+ FX_BOOL bLatin,
+ FX_BOOL bArabic) const;
+
+ void AjustArabicWords(const CPVT_WordRange& wr);
+
+ public:
+ FX_BOOL IsProceedtoOnChar(FX_WORD nKeyCode, FX_DWORD nFlag);
+
+ private:
+ IPWL_Filler_Notify* m_pFillerNotify;
+ IPWL_SpellCheck* m_pSpellCheck;
+ FX_BOOL m_bFocus;
+ CPDF_Rect m_rcOldWindow;
+
+ public:
+ void AttachFFLData(void* pData) { m_pFormFiller = pData; }
+
+ private:
+ void* m_pFormFiller;
};
#endif // FPDFSDK_INCLUDE_PDFWINDOW_PWL_EDIT_H_
diff --git a/fpdfsdk/include/pdfwindow/PWL_EditCtrl.h b/fpdfsdk/include/pdfwindow/PWL_EditCtrl.h
index 273b3842c8..784ec61140 100644
--- a/fpdfsdk/include/pdfwindow/PWL_EditCtrl.h
+++ b/fpdfsdk/include/pdfwindow/PWL_EditCtrl.h
@@ -18,159 +18,172 @@ class IFX_Edit;
class IPWL_Edit_Notify;
struct CPVT_WordPlace;
-enum PWL_EDIT_ALIGNFORMAT_H
-{
- PEAH_LEFT = 0,
- PEAH_MIDDLE,
- PEAH_RIGHT
+enum PWL_EDIT_ALIGNFORMAT_H { PEAH_LEFT = 0, PEAH_MIDDLE, PEAH_RIGHT };
+
+enum PWL_EDIT_ALIGNFORMAT_V { PEAV_TOP = 0, PEAV_CENTER, PEAV_BOTTOM };
+
+class IPWL_Edit_Notify {
+ public:
+ virtual ~IPWL_Edit_Notify() {}
+ // when the position of caret is changed in edit
+ virtual void OnCaretMove(int32_t x1, int32_t y1, int32_t x2, int32_t y2) {}
+ virtual void OnContentChange(const CPDF_Rect& rcContent) {}
+ // OprType: 0 InsertWord
+ // 1 InsertReturn
+ // 2 BackSpace
+ // 3 Delete
+ // 4 Clear
+ // 5 InsertText
+ // 6 SetText
+ virtual void OnInsertWord(const CPVT_WordPlace& place,
+ const CPVT_WordPlace& oldplace) {}
+ virtual void OnInsertReturn(const CPVT_WordPlace& place,
+ const CPVT_WordPlace& oldplace) {}
+ virtual void OnBackSpace(const CPVT_WordPlace& place,
+ const CPVT_WordPlace& oldplace) {}
+ virtual void OnDelete(const CPVT_WordPlace& place,
+ const CPVT_WordPlace& oldplace) {}
+ virtual void OnClear(const CPVT_WordPlace& place,
+ const CPVT_WordPlace& oldplace) {}
+ virtual void OnInsertText(const CPVT_WordPlace& place,
+ const CPVT_WordPlace& oldplace) {}
+ virtual void OnSetText(const CPVT_WordPlace& place,
+ const CPVT_WordPlace& oldplace) {}
+ virtual void OnAddUndo(CPWL_Edit* pEdit) {}
};
-enum PWL_EDIT_ALIGNFORMAT_V
-{
- PEAV_TOP = 0,
- PEAV_CENTER,
- PEAV_BOTTOM
-};
-
-class IPWL_Edit_Notify
-{
-public:
- virtual ~IPWL_Edit_Notify() { }
- //when the position of caret is changed in edit
- virtual void OnCaretMove(int32_t x1, int32_t y1, int32_t x2, int32_t y2) {}
- virtual void OnContentChange(const CPDF_Rect& rcContent){}
- //OprType: 0 InsertWord
- //1 InsertReturn
- //2 BackSpace
- //3 Delete
- //4 Clear
- //5 InsertText
- //6 SetText
- virtual void OnInsertWord(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace){}
- virtual void OnInsertReturn(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace){}
- virtual void OnBackSpace(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace){}
- virtual void OnDelete(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace){}
- virtual void OnClear(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace){}
- virtual void OnInsertText(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace){}
- virtual void OnSetText(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace){}
- virtual void OnAddUndo(CPWL_Edit* pEdit) {}
-};
-
-class CPWL_EditCtrl : public CPWL_Wnd, public IFX_Edit_Notify
-{
- friend class CPWL_Edit_Notify;
-
-public:
- CPWL_EditCtrl();
- virtual ~CPWL_EditCtrl();
-
-public:
- virtual void OnCreate(PWL_CREATEPARAM & cp);
- virtual void OnCreated();
-
- virtual FX_BOOL OnKeyDown(FX_WORD nChar, FX_DWORD nFlag);
- virtual FX_BOOL OnChar(FX_WORD nChar, FX_DWORD nFlag);
- virtual FX_BOOL OnLButtonDown(const CPDF_Point & point, FX_DWORD nFlag);
- virtual FX_BOOL OnLButtonUp(const CPDF_Point & point, FX_DWORD nFlag);
- virtual FX_BOOL OnMouseMove(const CPDF_Point & point, FX_DWORD nFlag);
- virtual void OnNotify(CPWL_Wnd* pWnd, FX_DWORD msg, intptr_t wParam = 0, intptr_t lParam = 0);
-
- virtual void CreateChildWnd(const PWL_CREATEPARAM & cp);
- virtual void RePosChildWnd();
- virtual void SetFontSize(FX_FLOAT fFontSize);
- virtual FX_FLOAT GetFontSize() const;
-
-public:
- virtual void SetText(const FX_WCHAR* csText);
-
- virtual void CopyText();
- virtual void PasteText();
- virtual void CutText();
-
- CPDF_Rect GetContentRect() const;
- void GetCaretPos(int32_t& x, int32_t& y) const;
- FX_BOOL IsModified() const;
-
- CFX_WideString GetText() const;
- void SetSel(int32_t nStartChar,int32_t nEndChar);
- void GetSel(int32_t & nStartChar, int32_t & nEndChar ) const;
- void GetTextRange(const CPDF_Rect& rect, int32_t & nStartChar, int32_t & nEndChar) const;
- CFX_WideString GetText(int32_t & nStartChar, int32_t & nEndChar) const;
- void Clear();
- void SelectAll();
-
- int32_t GetCaret() const;
- void SetCaret(int32_t nPos);
- int32_t GetTotalWords() const;
-
- void Paint();
-
- void EnableRefresh(FX_BOOL bRefresh);
- CPDF_Point GetScrollPos() const;
- void SetScrollPos(const CPDF_Point& point);
-
- void SetEditNotify(IPWL_Edit_Notify* pNotify) {m_pEditNotify = pNotify;}
-
- void SetCharSet(uint8_t nCharSet){m_nCharSet = nCharSet;}
- int32_t GetCharSet() const;
-
- void SetCodePage(int32_t nCodePage){m_nCodePage = nCodePage;}
- int32_t GetCodePage() const {return m_nCodePage;}
-
- CPDF_Font * GetCaretFont() const;
- FX_FLOAT GetCaretFontSize() const;
-
- FX_BOOL CanUndo() const;
- FX_BOOL CanRedo() const;
- void Redo();
- void Undo();
-
- void SetReadyToInput();
-protected:
- virtual void ShowVScrollBar(FX_BOOL bShow);
-
- virtual void InsertWord(FX_WORD word, int32_t nCharset);
- virtual void InsertReturn();
- virtual void InsertText(const FX_WCHAR* csText);
-
- virtual void SetCursor();
- FX_BOOL IsWndHorV();
-
- void Delete();
- void Backspace();
-
-protected:
- void GetCaretInfo(CPDF_Point & ptHead, CPDF_Point & ptFoot) const;
- void SetCaret(FX_BOOL bVisible, const CPDF_Point & ptHead, const CPDF_Point & ptFoot);
-
- void SetEditCaret(FX_BOOL bVisible);
-
-protected:
- virtual void IOnSetScrollInfoX(FX_FLOAT fPlateMin, FX_FLOAT fPlateMax,
- FX_FLOAT fContentMin, FX_FLOAT fContentMax,
- FX_FLOAT fSmallStep, FX_FLOAT fBigStep){}
- virtual void IOnSetScrollInfoY(FX_FLOAT fPlateMin, FX_FLOAT fPlateMax,
- FX_FLOAT fContentMin, FX_FLOAT fContentMax,
- FX_FLOAT fSmallStep, FX_FLOAT fBigStep);
- virtual void IOnSetScrollPosX(FX_FLOAT fx){}
- virtual void IOnSetScrollPosY(FX_FLOAT fy);
- virtual void IOnSetCaret(FX_BOOL bVisible,const CPDF_Point & ptHead,const CPDF_Point & ptFoot, const CPVT_WordPlace& place);
- virtual void IOnCaretChange(const CPVT_SecProps & secProps, const CPVT_WordProps & wordProps);
- virtual void IOnContentChange(const CPDF_Rect& rcContent);
- virtual void IOnInvalidateRect(CPDF_Rect * pRect);
-
-private:
- void CreateEditCaret(const PWL_CREATEPARAM & cp);
-
-protected:
- IFX_Edit* m_pEdit;
- CPWL_Caret* m_pEditCaret;
- FX_BOOL m_bMouseDown;
- IPWL_Edit_Notify* m_pEditNotify;
-
-private:
- int32_t m_nCharSet;
- int32_t m_nCodePage;
+class CPWL_EditCtrl : public CPWL_Wnd, public IFX_Edit_Notify {
+ friend class CPWL_Edit_Notify;
+
+ public:
+ CPWL_EditCtrl();
+ virtual ~CPWL_EditCtrl();
+
+ public:
+ virtual void OnCreate(PWL_CREATEPARAM& cp);
+ virtual void OnCreated();
+
+ virtual FX_BOOL OnKeyDown(FX_WORD nChar, FX_DWORD nFlag);
+ virtual FX_BOOL OnChar(FX_WORD nChar, FX_DWORD nFlag);
+ virtual FX_BOOL OnLButtonDown(const CPDF_Point& point, FX_DWORD nFlag);
+ virtual FX_BOOL OnLButtonUp(const CPDF_Point& point, FX_DWORD nFlag);
+ virtual FX_BOOL OnMouseMove(const CPDF_Point& point, FX_DWORD nFlag);
+ virtual void OnNotify(CPWL_Wnd* pWnd,
+ FX_DWORD msg,
+ intptr_t wParam = 0,
+ intptr_t lParam = 0);
+
+ virtual void CreateChildWnd(const PWL_CREATEPARAM& cp);
+ virtual void RePosChildWnd();
+ virtual void SetFontSize(FX_FLOAT fFontSize);
+ virtual FX_FLOAT GetFontSize() const;
+
+ public:
+ virtual void SetText(const FX_WCHAR* csText);
+
+ virtual void CopyText();
+ virtual void PasteText();
+ virtual void CutText();
+
+ CPDF_Rect GetContentRect() const;
+ void GetCaretPos(int32_t& x, int32_t& y) const;
+ FX_BOOL IsModified() const;
+
+ CFX_WideString GetText() const;
+ void SetSel(int32_t nStartChar, int32_t nEndChar);
+ void GetSel(int32_t& nStartChar, int32_t& nEndChar) const;
+ void GetTextRange(const CPDF_Rect& rect,
+ int32_t& nStartChar,
+ int32_t& nEndChar) const;
+ CFX_WideString GetText(int32_t& nStartChar, int32_t& nEndChar) const;
+ void Clear();
+ void SelectAll();
+
+ int32_t GetCaret() const;
+ void SetCaret(int32_t nPos);
+ int32_t GetTotalWords() const;
+
+ void Paint();
+
+ void EnableRefresh(FX_BOOL bRefresh);
+ CPDF_Point GetScrollPos() const;
+ void SetScrollPos(const CPDF_Point& point);
+
+ void SetEditNotify(IPWL_Edit_Notify* pNotify) { m_pEditNotify = pNotify; }
+
+ void SetCharSet(uint8_t nCharSet) { m_nCharSet = nCharSet; }
+ int32_t GetCharSet() const;
+
+ void SetCodePage(int32_t nCodePage) { m_nCodePage = nCodePage; }
+ int32_t GetCodePage() const { return m_nCodePage; }
+
+ CPDF_Font* GetCaretFont() const;
+ FX_FLOAT GetCaretFontSize() const;
+
+ FX_BOOL CanUndo() const;
+ FX_BOOL CanRedo() const;
+ void Redo();
+ void Undo();
+
+ void SetReadyToInput();
+
+ protected:
+ virtual void ShowVScrollBar(FX_BOOL bShow);
+
+ virtual void InsertWord(FX_WORD word, int32_t nCharset);
+ virtual void InsertReturn();
+ virtual void InsertText(const FX_WCHAR* csText);
+
+ virtual void SetCursor();
+ FX_BOOL IsWndHorV();
+
+ void Delete();
+ void Backspace();
+
+ protected:
+ void GetCaretInfo(CPDF_Point& ptHead, CPDF_Point& ptFoot) const;
+ void SetCaret(FX_BOOL bVisible,
+ const CPDF_Point& ptHead,
+ const CPDF_Point& ptFoot);
+
+ void SetEditCaret(FX_BOOL bVisible);
+
+ protected:
+ virtual void IOnSetScrollInfoX(FX_FLOAT fPlateMin,
+ FX_FLOAT fPlateMax,
+ FX_FLOAT fContentMin,
+ FX_FLOAT fContentMax,
+ FX_FLOAT fSmallStep,
+ FX_FLOAT fBigStep) {}
+ virtual void IOnSetScrollInfoY(FX_FLOAT fPlateMin,
+ FX_FLOAT fPlateMax,
+ FX_FLOAT fContentMin,
+ FX_FLOAT fContentMax,
+ FX_FLOAT fSmallStep,
+ FX_FLOAT fBigStep);
+ virtual void IOnSetScrollPosX(FX_FLOAT fx) {}
+ virtual void IOnSetScrollPosY(FX_FLOAT fy);
+ virtual void IOnSetCaret(FX_BOOL bVisible,
+ const CPDF_Point& ptHead,
+ const CPDF_Point& ptFoot,
+ const CPVT_WordPlace& place);
+ virtual void IOnCaretChange(const CPVT_SecProps& secProps,
+ const CPVT_WordProps& wordProps);
+ virtual void IOnContentChange(const CPDF_Rect& rcContent);
+ virtual void IOnInvalidateRect(CPDF_Rect* pRect);
+
+ private:
+ void CreateEditCaret(const PWL_CREATEPARAM& cp);
+
+ protected:
+ IFX_Edit* m_pEdit;
+ CPWL_Caret* m_pEditCaret;
+ FX_BOOL m_bMouseDown;
+ IPWL_Edit_Notify* m_pEditNotify;
+
+ private:
+ int32_t m_nCharSet;
+ int32_t m_nCodePage;
};
#endif // FPDFSDK_INCLUDE_PDFWINDOW_PWL_EDITCTRL_H_
diff --git a/fpdfsdk/include/pdfwindow/PWL_FontMap.h b/fpdfsdk/include/pdfwindow/PWL_FontMap.h
index 562d5df9c1..0f5124ca02 100644
--- a/fpdfsdk/include/pdfwindow/PWL_FontMap.h
+++ b/fpdfsdk/include/pdfwindow/PWL_FontMap.h
@@ -13,118 +13,127 @@
class CPDF_Document;
class IFX_SystemHandler;
-struct CPWL_FontMap_Data
-{
- CPDF_Font* pFont;
- int32_t nCharset;
- CFX_ByteString sFontName;
+struct CPWL_FontMap_Data {
+ CPDF_Font* pFont;
+ int32_t nCharset;
+ CFX_ByteString sFontName;
};
-struct CPWL_FontMap_Native
-{
- int32_t nCharset;
- CFX_ByteString sFontName;
+struct CPWL_FontMap_Native {
+ int32_t nCharset;
+ CFX_ByteString sFontName;
};
#ifndef ANSI_CHARSET
-#define ANSI_CHARSET 0
-#define DEFAULT_CHARSET 1
-#define SYMBOL_CHARSET 2
-#define SHIFTJIS_CHARSET 128
-#define HANGEUL_CHARSET 129
-#define HANGUL_CHARSET 129
-#define GB2312_CHARSET 134
-#define CHINESEBIG5_CHARSET 136
-#define OEM_CHARSET 255
-#define JOHAB_CHARSET 130
-#define HEBREW_CHARSET 177
-#define ARABIC_CHARSET 178
-#define GREEK_CHARSET 161
-#define TURKISH_CHARSET 162
-#define VIETNAMESE_CHARSET 163
-#define THAI_CHARSET 222
-#define EASTEUROPE_CHARSET 238
-#define RUSSIAN_CHARSET 204
-#define BALTIC_CHARSET 186
+#define ANSI_CHARSET 0
+#define DEFAULT_CHARSET 1
+#define SYMBOL_CHARSET 2
+#define SHIFTJIS_CHARSET 128
+#define HANGEUL_CHARSET 129
+#define HANGUL_CHARSET 129
+#define GB2312_CHARSET 134
+#define CHINESEBIG5_CHARSET 136
+#define OEM_CHARSET 255
+#define JOHAB_CHARSET 130
+#define HEBREW_CHARSET 177
+#define ARABIC_CHARSET 178
+#define GREEK_CHARSET 161
+#define TURKISH_CHARSET 162
+#define VIETNAMESE_CHARSET 163
+#define THAI_CHARSET 222
+#define EASTEUROPE_CHARSET 238
+#define RUSSIAN_CHARSET 204
+#define BALTIC_CHARSET 186
#endif
-class CPWL_FontMap : public IFX_Edit_FontMap
-{
-public:
- CPWL_FontMap(IFX_SystemHandler* pSystemHandler);
- virtual ~CPWL_FontMap();
-
- virtual CPDF_Font* GetPDFFont(int32_t nFontIndex);
- virtual CFX_ByteString GetPDFFontAlias(int32_t nFontIndex);
- virtual int32_t GetWordFontIndex(FX_WORD word, int32_t nCharset, int32_t nFontIndex);
- virtual int32_t CharCodeFromUnicode(int32_t nFontIndex, FX_WORD word);
- virtual int32_t CharSetFromUnicode(FX_WORD word, int32_t nOldCharset);
-
-public:
- virtual void Initial(const FX_CHAR* fontname = NULL);
- void SetSystemHandler(IFX_SystemHandler* pSystemHandler);
-
- int32_t GetFontMapCount() const;
- const CPWL_FontMap_Data* GetFontMapData(int32_t nIndex) const;
-
-public:
- static int32_t GetNativeCharset();
- CFX_ByteString GetNativeFontName(int32_t nCharset);
-
- static CFX_ByteString GetDefaultFontByCharset(int32_t nCharset);
-
- CPDF_Font* AddFontToDocument(CPDF_Document* pDoc, CFX_ByteString& sFontName, uint8_t nCharset);
- static FX_BOOL IsStandardFont(const CFX_ByteString& sFontName);
- CPDF_Font* AddStandardFont(CPDF_Document* pDoc, CFX_ByteString& sFontName);
- CPDF_Font* AddSystemFont(CPDF_Document* pDoc, CFX_ByteString& sFontName,
- uint8_t nCharset);
-
-protected:
- virtual CPDF_Font* FindFontSameCharset(CFX_ByteString& sFontAlias, int32_t nCharset);
- virtual void AddedFont(CPDF_Font* pFont, const CFX_ByteString& sFontAlias);
- FX_BOOL KnowWord(int32_t nFontIndex, FX_WORD word);
-
- virtual CPDF_Document* GetDocument();
-
- void Empty();
- int32_t GetFontIndex(const CFX_ByteString& sFontName, int32_t nCharset, FX_BOOL bFind);
- int32_t GetPWLFontIndex(FX_WORD word, int32_t nCharset);
- int32_t AddFontData(CPDF_Font* pFont, const CFX_ByteString& sFontAlias, int32_t nCharset = DEFAULT_CHARSET);
-
- CFX_ByteString EncodeFontAlias(const CFX_ByteString& sFontName, int32_t nCharset);
- CFX_ByteString EncodeFontAlias(const CFX_ByteString& sFontName);
-
-private:
- CFX_ByteString GetFontName(int32_t nFontIndex);
- int32_t FindFont(const CFX_ByteString& sFontName, int32_t nCharset = DEFAULT_CHARSET);
-
- CFX_ByteString GetNativeFont(int32_t nCharset);
-
-public:
- using CharsetFontMap = FPDF_CharsetFontMap;
- static const CharsetFontMap defaultTTFMap[];
-
-protected:
- CFX_ArrayTemplate<CPWL_FontMap_Data*> m_aData;
- CFX_ArrayTemplate<CPWL_FontMap_Native*> m_aNativeFont;
-
-private:
- CPDF_Document* m_pPDFDoc;
- IFX_SystemHandler* m_pSystemHandler;
+class CPWL_FontMap : public IFX_Edit_FontMap {
+ public:
+ CPWL_FontMap(IFX_SystemHandler* pSystemHandler);
+ virtual ~CPWL_FontMap();
+
+ virtual CPDF_Font* GetPDFFont(int32_t nFontIndex);
+ virtual CFX_ByteString GetPDFFontAlias(int32_t nFontIndex);
+ virtual int32_t GetWordFontIndex(FX_WORD word,
+ int32_t nCharset,
+ int32_t nFontIndex);
+ virtual int32_t CharCodeFromUnicode(int32_t nFontIndex, FX_WORD word);
+ virtual int32_t CharSetFromUnicode(FX_WORD word, int32_t nOldCharset);
+
+ public:
+ virtual void Initial(const FX_CHAR* fontname = NULL);
+ void SetSystemHandler(IFX_SystemHandler* pSystemHandler);
+
+ int32_t GetFontMapCount() const;
+ const CPWL_FontMap_Data* GetFontMapData(int32_t nIndex) const;
+
+ public:
+ static int32_t GetNativeCharset();
+ CFX_ByteString GetNativeFontName(int32_t nCharset);
+
+ static CFX_ByteString GetDefaultFontByCharset(int32_t nCharset);
+
+ CPDF_Font* AddFontToDocument(CPDF_Document* pDoc,
+ CFX_ByteString& sFontName,
+ uint8_t nCharset);
+ static FX_BOOL IsStandardFont(const CFX_ByteString& sFontName);
+ CPDF_Font* AddStandardFont(CPDF_Document* pDoc, CFX_ByteString& sFontName);
+ CPDF_Font* AddSystemFont(CPDF_Document* pDoc,
+ CFX_ByteString& sFontName,
+ uint8_t nCharset);
+
+ protected:
+ virtual CPDF_Font* FindFontSameCharset(CFX_ByteString& sFontAlias,
+ int32_t nCharset);
+ virtual void AddedFont(CPDF_Font* pFont, const CFX_ByteString& sFontAlias);
+ FX_BOOL KnowWord(int32_t nFontIndex, FX_WORD word);
+
+ virtual CPDF_Document* GetDocument();
+
+ void Empty();
+ int32_t GetFontIndex(const CFX_ByteString& sFontName,
+ int32_t nCharset,
+ FX_BOOL bFind);
+ int32_t GetPWLFontIndex(FX_WORD word, int32_t nCharset);
+ int32_t AddFontData(CPDF_Font* pFont,
+ const CFX_ByteString& sFontAlias,
+ int32_t nCharset = DEFAULT_CHARSET);
+
+ CFX_ByteString EncodeFontAlias(const CFX_ByteString& sFontName,
+ int32_t nCharset);
+ CFX_ByteString EncodeFontAlias(const CFX_ByteString& sFontName);
+
+ private:
+ CFX_ByteString GetFontName(int32_t nFontIndex);
+ int32_t FindFont(const CFX_ByteString& sFontName,
+ int32_t nCharset = DEFAULT_CHARSET);
+
+ CFX_ByteString GetNativeFont(int32_t nCharset);
+
+ public:
+ using CharsetFontMap = FPDF_CharsetFontMap;
+ static const CharsetFontMap defaultTTFMap[];
+
+ protected:
+ CFX_ArrayTemplate<CPWL_FontMap_Data*> m_aData;
+ CFX_ArrayTemplate<CPWL_FontMap_Native*> m_aNativeFont;
+
+ private:
+ CPDF_Document* m_pPDFDoc;
+ IFX_SystemHandler* m_pSystemHandler;
};
-class CPWL_DocFontMap : public CPWL_FontMap
-{
-public:
- CPWL_DocFontMap(IFX_SystemHandler* pSystemHandler, CPDF_Document* pAttachedDoc);
- virtual ~CPWL_DocFontMap();
+class CPWL_DocFontMap : public CPWL_FontMap {
+ public:
+ CPWL_DocFontMap(IFX_SystemHandler* pSystemHandler,
+ CPDF_Document* pAttachedDoc);
+ virtual ~CPWL_DocFontMap();
- virtual CPDF_Document* GetDocument();
+ virtual CPDF_Document* GetDocument();
-private:
- CPDF_Document* m_pAttachedDoc;
+ private:
+ CPDF_Document* m_pAttachedDoc;
};
#endif // FPDFSDK_INCLUDE_PDFWINDOW_PWL_FONTMAP_H_
diff --git a/fpdfsdk/include/pdfwindow/PWL_Icon.h b/fpdfsdk/include/pdfwindow/PWL_Icon.h
index cff4e8ca69..7183f0245c 100644
--- a/fpdfsdk/include/pdfwindow/PWL_Icon.h
+++ b/fpdfsdk/include/pdfwindow/PWL_Icon.h
@@ -10,51 +10,48 @@
#include "../../../core/include/fxcrt/fx_string.h"
#include "PWL_Wnd.h"
-class CPWL_Image : public CPWL_Wnd
-{
-public:
- CPWL_Image();
- virtual ~CPWL_Image();
-
- virtual CFX_ByteString GetImageAppStream();
-
- virtual void GetScale(FX_FLOAT & fHScale,FX_FLOAT & fVScale);
- virtual void GetImageOffset(FX_FLOAT & x,FX_FLOAT & y);
- virtual CPDF_Stream * GetPDFStream();
-
-public:
- void SetPDFStream(CPDF_Stream* pStream);
- void GetImageSize(FX_FLOAT & fWidth,FX_FLOAT & fHeight);
- CPDF_Matrix GetImageMatrix();
- CFX_ByteString GetImageAlias();
- void SetImageAlias(const FX_CHAR* sImageAlias);
-
-protected:
- CPDF_Stream* m_pPDFStream;
- CFX_ByteString m_sImageAlias;
+class CPWL_Image : public CPWL_Wnd {
+ public:
+ CPWL_Image();
+ virtual ~CPWL_Image();
+
+ virtual CFX_ByteString GetImageAppStream();
+
+ virtual void GetScale(FX_FLOAT& fHScale, FX_FLOAT& fVScale);
+ virtual void GetImageOffset(FX_FLOAT& x, FX_FLOAT& y);
+ virtual CPDF_Stream* GetPDFStream();
+
+ public:
+ void SetPDFStream(CPDF_Stream* pStream);
+ void GetImageSize(FX_FLOAT& fWidth, FX_FLOAT& fHeight);
+ CPDF_Matrix GetImageMatrix();
+ CFX_ByteString GetImageAlias();
+ void SetImageAlias(const FX_CHAR* sImageAlias);
+
+ protected:
+ CPDF_Stream* m_pPDFStream;
+ CFX_ByteString m_sImageAlias;
};
-class CPWL_Icon : public CPWL_Image
-{
-public:
- CPWL_Icon();
- virtual ~CPWL_Icon();
+class CPWL_Icon : public CPWL_Image {
+ public:
+ CPWL_Icon();
+ virtual ~CPWL_Icon();
- virtual CPDF_IconFit * GetIconFit(){return m_pIconFit;};
+ virtual CPDF_IconFit* GetIconFit() { return m_pIconFit; };
- virtual void GetScale(FX_FLOAT & fHScale,FX_FLOAT & fVScale);
- virtual void GetImageOffset(FX_FLOAT & x,FX_FLOAT & y);
+ virtual void GetScale(FX_FLOAT& fHScale, FX_FLOAT& fVScale);
+ virtual void GetImageOffset(FX_FLOAT& x, FX_FLOAT& y);
- int32_t GetScaleMethod();
- FX_BOOL IsProportionalScale();
- void GetIconPosition(FX_FLOAT & fLeft, FX_FLOAT & fBottom);
- FX_BOOL GetFittingBounds();
+ int32_t GetScaleMethod();
+ FX_BOOL IsProportionalScale();
+ void GetIconPosition(FX_FLOAT& fLeft, FX_FLOAT& fBottom);
+ FX_BOOL GetFittingBounds();
- void SetIconFit(CPDF_IconFit * pIconFit){m_pIconFit = pIconFit;};
+ void SetIconFit(CPDF_IconFit* pIconFit) { m_pIconFit = pIconFit; };
-private:
- CPDF_IconFit * m_pIconFit;
+ private:
+ CPDF_IconFit* m_pIconFit;
};
-
#endif // FPDFSDK_INCLUDE_PDFWINDOW_PWL_ICON_H_
diff --git a/fpdfsdk/include/pdfwindow/PWL_IconList.h b/fpdfsdk/include/pdfwindow/PWL_IconList.h
index b8bc3d2957..30a12dcd9b 100644
--- a/fpdfsdk/include/pdfwindow/PWL_IconList.h
+++ b/fpdfsdk/include/pdfwindow/PWL_IconList.h
@@ -17,112 +17,114 @@ class CPWL_IconList_Content;
class CPWL_IconList;
class CPWL_Label;
-class IPWL_IconList_Notify
-{
-public:
- virtual ~IPWL_IconList_Notify() { }
- virtual void OnNoteListSelChanged(int32_t nItemIndex) = 0;
+class IPWL_IconList_Notify {
+ public:
+ virtual ~IPWL_IconList_Notify() {}
+ virtual void OnNoteListSelChanged(int32_t nItemIndex) = 0;
};
-class CPWL_IconList_Item : public CPWL_Wnd
-{
-public:
- CPWL_IconList_Item();
- virtual ~CPWL_IconList_Item();
-
- virtual CFX_ByteString GetClassName() const;
- virtual void CreateChildWnd(const PWL_CREATEPARAM & cp);
- virtual void RePosChildWnd();
-
- void SetSelect(FX_BOOL bSelected);
- FX_BOOL IsSelected() const;
- void SetData(void* pData);
- void SetIcon(int32_t nIconIndex);
- void SetText(const CFX_WideString& str);
- void SetIconFillColor(const CPWL_Color& color);
- CFX_WideString GetText() const;
-
-protected:
- virtual FX_FLOAT GetItemHeight(FX_FLOAT fLimitWidth);
- virtual void DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device);
-
- virtual void OnEnabled();
- virtual void OnDisabled();
-
-private:
- int32_t m_nIconIndex;
- void* m_pData;
- FX_BOOL m_bSelected;
- CPWL_Label* m_pText;
- CPWL_Color m_crIcon;
+class CPWL_IconList_Item : public CPWL_Wnd {
+ public:
+ CPWL_IconList_Item();
+ virtual ~CPWL_IconList_Item();
+
+ virtual CFX_ByteString GetClassName() const;
+ virtual void CreateChildWnd(const PWL_CREATEPARAM& cp);
+ virtual void RePosChildWnd();
+
+ void SetSelect(FX_BOOL bSelected);
+ FX_BOOL IsSelected() const;
+ void SetData(void* pData);
+ void SetIcon(int32_t nIconIndex);
+ void SetText(const CFX_WideString& str);
+ void SetIconFillColor(const CPWL_Color& color);
+ CFX_WideString GetText() const;
+
+ protected:
+ virtual FX_FLOAT GetItemHeight(FX_FLOAT fLimitWidth);
+ virtual void DrawThisAppearance(CFX_RenderDevice* pDevice,
+ CPDF_Matrix* pUser2Device);
+
+ virtual void OnEnabled();
+ virtual void OnDisabled();
+
+ private:
+ int32_t m_nIconIndex;
+ void* m_pData;
+ FX_BOOL m_bSelected;
+ CPWL_Label* m_pText;
+ CPWL_Color m_crIcon;
};
-class CPWL_IconList_Content : public CPWL_ListCtrl
-{
-public:
- CPWL_IconList_Content(int32_t nListCount);
- virtual ~CPWL_IconList_Content();
-
- void SetSelect(int32_t nIndex);
- int32_t GetSelect() const;
- void SetNotify(IPWL_IconList_Notify* pNotify);
- void EnableNotify(FX_BOOL bNotify);
- void SetListData(int32_t nItemIndex, void* pData);
- void SetListIcon(int32_t nItemIndex, int32_t nIconIndex);
- void SetListString(int32_t nItemIndex, const CFX_WideString& str);
- void SetIconFillColor(const CPWL_Color& color);
- CFX_WideString GetListString(int32_t nItemIndex) const;
- IPWL_IconList_Notify* GetNotify() const;
- void ScrollToItem(int32_t nItemIndex);
-
-protected:
- virtual void CreateChildWnd(const PWL_CREATEPARAM & cp);
- virtual FX_BOOL OnLButtonDown(const CPDF_Point & point, FX_DWORD nFlag);
- virtual FX_BOOL OnLButtonUp(const CPDF_Point & point, FX_DWORD nFlag);
- virtual FX_BOOL OnMouseMove(const CPDF_Point & point, FX_DWORD nFlag);
- virtual FX_BOOL OnKeyDown(FX_WORD nChar, FX_DWORD nFlag);
-
-private:
- CPWL_IconList_Item* GetListItem(int32_t nItemIndex) const;
- void SelectItem(int32_t nItemIndex, FX_BOOL bSelect);
- int32_t FindItemIndex(const CPDF_Point& point);
-
- int32_t m_nSelectIndex;
- IPWL_IconList_Notify* m_pNotify;
- FX_BOOL m_bEnableNotify;
- FX_BOOL m_bMouseDown;
- int32_t m_nListCount;
+class CPWL_IconList_Content : public CPWL_ListCtrl {
+ public:
+ CPWL_IconList_Content(int32_t nListCount);
+ virtual ~CPWL_IconList_Content();
+
+ void SetSelect(int32_t nIndex);
+ int32_t GetSelect() const;
+ void SetNotify(IPWL_IconList_Notify* pNotify);
+ void EnableNotify(FX_BOOL bNotify);
+ void SetListData(int32_t nItemIndex, void* pData);
+ void SetListIcon(int32_t nItemIndex, int32_t nIconIndex);
+ void SetListString(int32_t nItemIndex, const CFX_WideString& str);
+ void SetIconFillColor(const CPWL_Color& color);
+ CFX_WideString GetListString(int32_t nItemIndex) const;
+ IPWL_IconList_Notify* GetNotify() const;
+ void ScrollToItem(int32_t nItemIndex);
+
+ protected:
+ virtual void CreateChildWnd(const PWL_CREATEPARAM& cp);
+ virtual FX_BOOL OnLButtonDown(const CPDF_Point& point, FX_DWORD nFlag);
+ virtual FX_BOOL OnLButtonUp(const CPDF_Point& point, FX_DWORD nFlag);
+ virtual FX_BOOL OnMouseMove(const CPDF_Point& point, FX_DWORD nFlag);
+ virtual FX_BOOL OnKeyDown(FX_WORD nChar, FX_DWORD nFlag);
+
+ private:
+ CPWL_IconList_Item* GetListItem(int32_t nItemIndex) const;
+ void SelectItem(int32_t nItemIndex, FX_BOOL bSelect);
+ int32_t FindItemIndex(const CPDF_Point& point);
+
+ int32_t m_nSelectIndex;
+ IPWL_IconList_Notify* m_pNotify;
+ FX_BOOL m_bEnableNotify;
+ FX_BOOL m_bMouseDown;
+ int32_t m_nListCount;
};
-class CPWL_IconList : public CPWL_Wnd
-{
-public:
- CPWL_IconList(int32_t nListCount);
- virtual ~CPWL_IconList();
-
- virtual FX_BOOL OnMouseWheel(short zDelta, const CPDF_Point & point, FX_DWORD nFlag);
-
- void SetSelect(int32_t nIndex);
- void SetTopItem(int32_t nIndex);
- int32_t GetSelect() const;
- void SetNotify(IPWL_IconList_Notify* pNotify);
- void EnableNotify(FX_BOOL bNotify);
- void SetListData(int32_t nItemIndex, void* pData);
- void SetListIcon(int32_t nItemIndex, int32_t nIconIndex);
- void SetListString(int32_t nItemIndex, const CFX_WideString& str);
- void SetIconFillColor(const CPWL_Color& color);
- CFX_WideString GetListString(int32_t nItemIndex) const;
-
-protected:
- virtual void OnCreated();
- virtual void RePosChildWnd();
- virtual void CreateChildWnd(const PWL_CREATEPARAM & cp);
-
- virtual void OnNotify(CPWL_Wnd* pWnd, FX_DWORD msg, intptr_t wParam = 0, intptr_t lParam = 0);
-
-private:
- CPWL_IconList_Content* m_pListContent;
- int32_t m_nListCount;
+class CPWL_IconList : public CPWL_Wnd {
+ public:
+ CPWL_IconList(int32_t nListCount);
+ virtual ~CPWL_IconList();
+
+ virtual FX_BOOL OnMouseWheel(short zDelta,
+ const CPDF_Point& point,
+ FX_DWORD nFlag);
+
+ void SetSelect(int32_t nIndex);
+ void SetTopItem(int32_t nIndex);
+ int32_t GetSelect() const;
+ void SetNotify(IPWL_IconList_Notify* pNotify);
+ void EnableNotify(FX_BOOL bNotify);
+ void SetListData(int32_t nItemIndex, void* pData);
+ void SetListIcon(int32_t nItemIndex, int32_t nIconIndex);
+ void SetListString(int32_t nItemIndex, const CFX_WideString& str);
+ void SetIconFillColor(const CPWL_Color& color);
+ CFX_WideString GetListString(int32_t nItemIndex) const;
+
+ protected:
+ virtual void OnCreated();
+ virtual void RePosChildWnd();
+ virtual void CreateChildWnd(const PWL_CREATEPARAM& cp);
+
+ virtual void OnNotify(CPWL_Wnd* pWnd,
+ FX_DWORD msg,
+ intptr_t wParam = 0,
+ intptr_t lParam = 0);
+
+ private:
+ CPWL_IconList_Content* m_pListContent;
+ int32_t m_nListCount;
};
#endif // FPDFSDK_INCLUDE_PDFWINDOW_PWL_ICONLIST_H_
diff --git a/fpdfsdk/include/pdfwindow/PWL_Label.h b/fpdfsdk/include/pdfwindow/PWL_Label.h
index 3df547e0b2..b6cb7f557c 100644
--- a/fpdfsdk/include/pdfwindow/PWL_Label.h
+++ b/fpdfsdk/include/pdfwindow/PWL_Label.h
@@ -11,35 +11,35 @@
class IFX_Edit;
-class CPWL_Label : public CPWL_Wnd
-{
-public:
- CPWL_Label();
- virtual ~CPWL_Label();
-
- virtual CFX_ByteString GetClassName() const;
- virtual void SetFontSize(FX_FLOAT fFontSize);
- virtual FX_FLOAT GetFontSize() const;
-
- void SetText(const FX_WCHAR* csText);
- CFX_WideString GetText() const;
- void SetLimitChar(int32_t nLimitChar);
- void SetHorzScale(int32_t nHorzScale);
- void SetCharSpace(FX_FLOAT fCharSpace);
- CPDF_Rect GetContentRect() const;
- int32_t GetTotalWords();
- CFX_ByteString GetTextAppearanceStream(const CPDF_Point & ptOffset) const;
-
-protected:
- virtual void OnCreated();
- virtual void DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device);
- virtual void GetThisAppearanceStream(CFX_ByteTextBuf & sAppStream);
- virtual void RePosChildWnd();
-
-private:
- void SetParamByFlag();
-
- IFX_Edit* m_pEdit;
+class CPWL_Label : public CPWL_Wnd {
+ public:
+ CPWL_Label();
+ virtual ~CPWL_Label();
+
+ virtual CFX_ByteString GetClassName() const;
+ virtual void SetFontSize(FX_FLOAT fFontSize);
+ virtual FX_FLOAT GetFontSize() const;
+
+ void SetText(const FX_WCHAR* csText);
+ CFX_WideString GetText() const;
+ void SetLimitChar(int32_t nLimitChar);
+ void SetHorzScale(int32_t nHorzScale);
+ void SetCharSpace(FX_FLOAT fCharSpace);
+ CPDF_Rect GetContentRect() const;
+ int32_t GetTotalWords();
+ CFX_ByteString GetTextAppearanceStream(const CPDF_Point& ptOffset) const;
+
+ protected:
+ virtual void OnCreated();
+ virtual void DrawThisAppearance(CFX_RenderDevice* pDevice,
+ CPDF_Matrix* pUser2Device);
+ virtual void GetThisAppearanceStream(CFX_ByteTextBuf& sAppStream);
+ virtual void RePosChildWnd();
+
+ private:
+ void SetParamByFlag();
+
+ IFX_Edit* m_pEdit;
};
#endif // FPDFSDK_INCLUDE_PDFWINDOW_PWL_LABEL_H_
diff --git a/fpdfsdk/include/pdfwindow/PWL_ListBox.h b/fpdfsdk/include/pdfwindow/PWL_ListBox.h
index 7c37fb30ef..b9372eff9c 100644
--- a/fpdfsdk/include/pdfwindow/PWL_ListBox.h
+++ b/fpdfsdk/include/pdfwindow/PWL_ListBox.h
@@ -15,89 +15,107 @@ class CPWL_List_Notify;
class CPWL_ListBox;
class IPWL_Filler_Notify;
-class CPWL_List_Notify : public IFX_List_Notify
-{
-public:
- CPWL_List_Notify(CPWL_ListBox * pList);
- virtual ~CPWL_List_Notify();
-
- void IOnSetScrollInfoX(FX_FLOAT fPlateMin, FX_FLOAT fPlateMax,
- FX_FLOAT fContentMin, FX_FLOAT fContentMax,
- FX_FLOAT fSmallStep, FX_FLOAT fBigStep){}
- void IOnSetScrollInfoY(FX_FLOAT fPlateMin, FX_FLOAT fPlateMax,
- FX_FLOAT fContentMin, FX_FLOAT fContentMax,
- FX_FLOAT fSmallStep, FX_FLOAT fBigStep);
- void IOnSetScrollPosX(FX_FLOAT fx){}
- void IOnSetScrollPosY(FX_FLOAT fy);
- void IOnSetCaret(FX_BOOL bVisible,const CPDF_Point & ptHead,const CPDF_Point & ptFoot, const CPVT_WordPlace& place);
- void IOnCaretChange(const CPVT_SecProps & secProps, const CPVT_WordProps & wordProps);
- void IOnInvalidateRect(CPDF_Rect * pRect);
-
-private:
- CPWL_ListBox* m_pList;
+class CPWL_List_Notify : public IFX_List_Notify {
+ public:
+ CPWL_List_Notify(CPWL_ListBox* pList);
+ virtual ~CPWL_List_Notify();
+
+ void IOnSetScrollInfoX(FX_FLOAT fPlateMin,
+ FX_FLOAT fPlateMax,
+ FX_FLOAT fContentMin,
+ FX_FLOAT fContentMax,
+ FX_FLOAT fSmallStep,
+ FX_FLOAT fBigStep) {}
+ void IOnSetScrollInfoY(FX_FLOAT fPlateMin,
+ FX_FLOAT fPlateMax,
+ FX_FLOAT fContentMin,
+ FX_FLOAT fContentMax,
+ FX_FLOAT fSmallStep,
+ FX_FLOAT fBigStep);
+ void IOnSetScrollPosX(FX_FLOAT fx) {}
+ void IOnSetScrollPosY(FX_FLOAT fy);
+ void IOnSetCaret(FX_BOOL bVisible,
+ const CPDF_Point& ptHead,
+ const CPDF_Point& ptFoot,
+ const CPVT_WordPlace& place);
+ void IOnCaretChange(const CPVT_SecProps& secProps,
+ const CPVT_WordProps& wordProps);
+ void IOnInvalidateRect(CPDF_Rect* pRect);
+
+ private:
+ CPWL_ListBox* m_pList;
};
-class CPWL_ListBox : public CPWL_Wnd
-{
-public:
- CPWL_ListBox();
- virtual ~CPWL_ListBox();
-
- virtual CFX_ByteString GetClassName() const;
- virtual void OnCreated();
- virtual void OnDestroy();
- virtual void GetThisAppearanceStream(CFX_ByteTextBuf & sAppStream);
- virtual void DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device);
-
- virtual FX_BOOL OnKeyDown(FX_WORD nChar, FX_DWORD nFlag);
- virtual FX_BOOL OnChar(FX_WORD nChar, FX_DWORD nFlag);
- virtual FX_BOOL OnLButtonDown(const CPDF_Point & point, FX_DWORD nFlag);
- virtual FX_BOOL OnLButtonUp(const CPDF_Point & point, FX_DWORD nFlag);
- virtual FX_BOOL OnMouseMove(const CPDF_Point & point, FX_DWORD nFlag);
- virtual FX_BOOL OnMouseWheel(short zDelta, const CPDF_Point & point, FX_DWORD nFlag);
- virtual void KillFocus();
-
- virtual void OnNotify(CPWL_Wnd* pWnd, FX_DWORD msg, intptr_t wParam = 0, intptr_t lParam = 0);
- virtual void RePosChildWnd();
- virtual CFX_WideString GetText() const;
- virtual CPDF_Rect GetFocusRect() const;
- virtual void SetFontSize(FX_FLOAT fFontSize);
- virtual FX_FLOAT GetFontSize() const;
-
- void OnNotifySelChanged(FX_BOOL bKeyDown, FX_BOOL & bExit , FX_DWORD nFlag);
-
- void AddString(const FX_WCHAR* string);
- void SetTopVisibleIndex(int32_t nItemIndex);
- void ScrollToListItem(int32_t nItemIndex);
- void ResetContent();
- void Reset();
- void Select(int32_t nItemIndex);
- void SetCaret(int32_t nItemIndex);
- void SetHoverSel(FX_BOOL bHoverSel);
-
- int32_t GetCount() const;
- FX_BOOL IsMultipleSel() const;
- int32_t GetCaretIndex() const;
- int32_t GetCurSel() const;
- FX_BOOL IsItemSelected(int32_t nItemIndex) const;
- int32_t GetTopVisibleIndex() const;
- int32_t FindNext(int32_t nIndex,FX_WCHAR nChar) const;
- CPDF_Rect GetContentRect() const;
- FX_FLOAT GetFirstHeight() const;
- CPDF_Rect GetListRect() const;
-
- void SetFillerNotify(IPWL_Filler_Notify* pNotify) {m_pFillerNotify = pNotify;}
-
-protected:
- IFX_List* m_pList;
- CPWL_List_Notify* m_pListNotify;
- FX_BOOL m_bMouseDown;
- FX_BOOL m_bHoverSel;
- IPWL_Filler_Notify* m_pFillerNotify;
-public:
- void AttachFFLData(void* pData) {m_pFormFiller = pData;}
-private:
- void* m_pFormFiller;
+class CPWL_ListBox : public CPWL_Wnd {
+ public:
+ CPWL_ListBox();
+ virtual ~CPWL_ListBox();
+
+ virtual CFX_ByteString GetClassName() const;
+ virtual void OnCreated();
+ virtual void OnDestroy();
+ virtual void GetThisAppearanceStream(CFX_ByteTextBuf& sAppStream);
+ virtual void DrawThisAppearance(CFX_RenderDevice* pDevice,
+ CPDF_Matrix* pUser2Device);
+
+ virtual FX_BOOL OnKeyDown(FX_WORD nChar, FX_DWORD nFlag);
+ virtual FX_BOOL OnChar(FX_WORD nChar, FX_DWORD nFlag);
+ virtual FX_BOOL OnLButtonDown(const CPDF_Point& point, FX_DWORD nFlag);
+ virtual FX_BOOL OnLButtonUp(const CPDF_Point& point, FX_DWORD nFlag);
+ virtual FX_BOOL OnMouseMove(const CPDF_Point& point, FX_DWORD nFlag);
+ virtual FX_BOOL OnMouseWheel(short zDelta,
+ const CPDF_Point& point,
+ FX_DWORD nFlag);
+ virtual void KillFocus();
+
+ virtual void OnNotify(CPWL_Wnd* pWnd,
+ FX_DWORD msg,
+ intptr_t wParam = 0,
+ intptr_t lParam = 0);
+ virtual void RePosChildWnd();
+ virtual CFX_WideString GetText() const;
+ virtual CPDF_Rect GetFocusRect() const;
+ virtual void SetFontSize(FX_FLOAT fFontSize);
+ virtual FX_FLOAT GetFontSize() const;
+
+ void OnNotifySelChanged(FX_BOOL bKeyDown, FX_BOOL& bExit, FX_DWORD nFlag);
+
+ void AddString(const FX_WCHAR* string);
+ void SetTopVisibleIndex(int32_t nItemIndex);
+ void ScrollToListItem(int32_t nItemIndex);
+ void ResetContent();
+ void Reset();
+ void Select(int32_t nItemIndex);
+ void SetCaret(int32_t nItemIndex);
+ void SetHoverSel(FX_BOOL bHoverSel);
+
+ int32_t GetCount() const;
+ FX_BOOL IsMultipleSel() const;
+ int32_t GetCaretIndex() const;
+ int32_t GetCurSel() const;
+ FX_BOOL IsItemSelected(int32_t nItemIndex) const;
+ int32_t GetTopVisibleIndex() const;
+ int32_t FindNext(int32_t nIndex, FX_WCHAR nChar) const;
+ CPDF_Rect GetContentRect() const;
+ FX_FLOAT GetFirstHeight() const;
+ CPDF_Rect GetListRect() const;
+
+ void SetFillerNotify(IPWL_Filler_Notify* pNotify) {
+ m_pFillerNotify = pNotify;
+ }
+
+ protected:
+ IFX_List* m_pList;
+ CPWL_List_Notify* m_pListNotify;
+ FX_BOOL m_bMouseDown;
+ FX_BOOL m_bHoverSel;
+ IPWL_Filler_Notify* m_pFillerNotify;
+
+ public:
+ void AttachFFLData(void* pData) { m_pFormFiller = pData; }
+
+ private:
+ void* m_pFormFiller;
};
#endif // FPDFSDK_INCLUDE_PDFWINDOW_PWL_LISTBOX_H_
diff --git a/fpdfsdk/include/pdfwindow/PWL_ListCtrl.h b/fpdfsdk/include/pdfwindow/PWL_ListCtrl.h
index c107a0cf5e..cd90692150 100644
--- a/fpdfsdk/include/pdfwindow/PWL_ListCtrl.h
+++ b/fpdfsdk/include/pdfwindow/PWL_ListCtrl.h
@@ -9,39 +9,39 @@
#include "PWL_Wnd.h"
-class CPWL_ListCtrl : public CPWL_Wnd
-{
-public:
- CPWL_ListCtrl();
- virtual ~CPWL_ListCtrl();
-
- void SetScrollPos(const CPDF_Point& point);
- CPDF_Point GetScrollPos() const;
- CPDF_Rect GetScrollArea() const;
- void SetItemSpace(FX_FLOAT fSpace);
- void SetTopSpace(FX_FLOAT fSpace);
- void SetBottomSpace(FX_FLOAT fSpace);
- void ResetFace();
- void ResetContent(int32_t nStart);
- int32_t GetItemIndex(CPWL_Wnd* pItem);
- FX_FLOAT GetContentsHeight(FX_FLOAT fLimitWidth);
- CPDF_Point InToOut(const CPDF_Point& point) const;
- CPDF_Point OutToIn(const CPDF_Point& point) const;
- CPDF_Rect InToOut(const CPDF_Rect& rect) const;
- CPDF_Rect OutToIn(const CPDF_Rect& rect) const;
-
-protected:
- virtual void RePosChildWnd();
- virtual void DrawChildAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device);
-
-private:
- void ResetAll(FX_BOOL bMove,int32_t nStart);
-
- CPDF_Rect m_rcContent;
- CPDF_Point m_ptScroll;
- FX_FLOAT m_fItemSpace;
- FX_FLOAT m_fTopSpace;
- FX_FLOAT m_fBottomSpace;
+class CPWL_ListCtrl : public CPWL_Wnd {
+ public:
+ CPWL_ListCtrl();
+ virtual ~CPWL_ListCtrl();
+
+ void SetScrollPos(const CPDF_Point& point);
+ CPDF_Point GetScrollPos() const;
+ CPDF_Rect GetScrollArea() const;
+ void SetItemSpace(FX_FLOAT fSpace);
+ void SetTopSpace(FX_FLOAT fSpace);
+ void SetBottomSpace(FX_FLOAT fSpace);
+ void ResetFace();
+ void ResetContent(int32_t nStart);
+ int32_t GetItemIndex(CPWL_Wnd* pItem);
+ FX_FLOAT GetContentsHeight(FX_FLOAT fLimitWidth);
+ CPDF_Point InToOut(const CPDF_Point& point) const;
+ CPDF_Point OutToIn(const CPDF_Point& point) const;
+ CPDF_Rect InToOut(const CPDF_Rect& rect) const;
+ CPDF_Rect OutToIn(const CPDF_Rect& rect) const;
+
+ protected:
+ virtual void RePosChildWnd();
+ virtual void DrawChildAppearance(CFX_RenderDevice* pDevice,
+ CPDF_Matrix* pUser2Device);
+
+ private:
+ void ResetAll(FX_BOOL bMove, int32_t nStart);
+
+ CPDF_Rect m_rcContent;
+ CPDF_Point m_ptScroll;
+ FX_FLOAT m_fItemSpace;
+ FX_FLOAT m_fTopSpace;
+ FX_FLOAT m_fBottomSpace;
};
#endif // FPDFSDK_INCLUDE_PDFWINDOW_PWL_LISTCTRL_H_
diff --git a/fpdfsdk/include/pdfwindow/PWL_Note.h b/fpdfsdk/include/pdfwindow/PWL_Note.h
index 29b7857e20..4f18fa20d0 100644
--- a/fpdfsdk/include/pdfwindow/PWL_Note.h
+++ b/fpdfsdk/include/pdfwindow/PWL_Note.h
@@ -28,333 +28,342 @@ class IPWL_NoteItem;
class IPWL_NoteNotify;
class IPopup_Note;
-class IPWL_NoteNotify
-{
-public:
- virtual ~IPWL_NoteNotify() { }
- virtual void OnNoteMove(const FX_RECT& rtWin) = 0;
- virtual void OnNoteShow(FX_BOOL bShow) = 0;
- virtual void OnNoteActivate(FX_BOOL bActive) = 0;
- virtual void OnNoteClose() = 0;
- virtual void OnItemCreate(IPWL_NoteItem* pItem) = 0;
- virtual void OnItemDelete(IPWL_NoteItem* pItem) = 0;
- virtual void OnSetAuthorName(IPWL_NoteItem* pItem) = 0;
- virtual void OnSetBkColor(IPWL_NoteItem* pItem) = 0;
- virtual void OnSetContents(IPWL_NoteItem* pItem) = 0;
- virtual void OnSetDateTime(IPWL_NoteItem* pItem) = 0;
- virtual void OnSetSubjectName(IPWL_NoteItem* pItem) = 0;
- virtual void OnPopupMenu(int32_t x, int32_t y) = 0;
- virtual void OnPopupMenu(IPWL_NoteItem* pItem, int32_t x, int32_t y) = 0;
+class IPWL_NoteNotify {
+ public:
+ virtual ~IPWL_NoteNotify() {}
+ virtual void OnNoteMove(const FX_RECT& rtWin) = 0;
+ virtual void OnNoteShow(FX_BOOL bShow) = 0;
+ virtual void OnNoteActivate(FX_BOOL bActive) = 0;
+ virtual void OnNoteClose() = 0;
+ virtual void OnItemCreate(IPWL_NoteItem* pItem) = 0;
+ virtual void OnItemDelete(IPWL_NoteItem* pItem) = 0;
+ virtual void OnSetAuthorName(IPWL_NoteItem* pItem) = 0;
+ virtual void OnSetBkColor(IPWL_NoteItem* pItem) = 0;
+ virtual void OnSetContents(IPWL_NoteItem* pItem) = 0;
+ virtual void OnSetDateTime(IPWL_NoteItem* pItem) = 0;
+ virtual void OnSetSubjectName(IPWL_NoteItem* pItem) = 0;
+ virtual void OnPopupMenu(int32_t x, int32_t y) = 0;
+ virtual void OnPopupMenu(IPWL_NoteItem* pItem, int32_t x, int32_t y) = 0;
};
-class IPWL_NoteHandler
-{
-public:
- virtual ~IPWL_NoteHandler() { }
- virtual void OnNoteColorChanged(const CPWL_Color& color) = 0;
+class IPWL_NoteHandler {
+ public:
+ virtual ~IPWL_NoteHandler() {}
+ virtual void OnNoteColorChanged(const CPWL_Color& color) = 0;
};
-class IPWL_NoteItem
-{
-public:
- virtual ~IPWL_NoteItem() { }
- virtual void SetPrivateData(void* pData) = 0;
- virtual void SetBkColor(const CPWL_Color& color) = 0;
- virtual void SetSubjectName(const CFX_WideString& sName) = 0;
- virtual void SetAuthorName(const CFX_WideString& sName) = 0;
- virtual void SetDateTime(FX_SYSTEMTIME time) = 0;
- virtual void SetContents(const CFX_WideString& sContents) = 0;
-
- virtual IPWL_NoteItem* CreateSubItem() = 0;
- virtual int32_t CountSubItems() const = 0;
- virtual IPWL_NoteItem* GetSubItems(int32_t index) const = 0;
- virtual void DeleteSubItem(IPWL_NoteItem* pNoteItem) = 0;
- virtual void SetFocus() = 0;
-
- virtual IPWL_NoteItem* GetParentItem() const = 0;
- virtual void* GetPrivateData() const = 0;
- virtual CFX_WideString GetAuthorName() const = 0;
- virtual CPWL_Color GetBkColor() const = 0;
- virtual CFX_WideString GetContents() const = 0;
- virtual FX_SYSTEMTIME GetDateTime() const = 0;
- virtual CFX_WideString GetSubjectName() const = 0;
-
- virtual CPWL_Edit* GetEdit() const = 0;
+class IPWL_NoteItem {
+ public:
+ virtual ~IPWL_NoteItem() {}
+ virtual void SetPrivateData(void* pData) = 0;
+ virtual void SetBkColor(const CPWL_Color& color) = 0;
+ virtual void SetSubjectName(const CFX_WideString& sName) = 0;
+ virtual void SetAuthorName(const CFX_WideString& sName) = 0;
+ virtual void SetDateTime(FX_SYSTEMTIME time) = 0;
+ virtual void SetContents(const CFX_WideString& sContents) = 0;
+
+ virtual IPWL_NoteItem* CreateSubItem() = 0;
+ virtual int32_t CountSubItems() const = 0;
+ virtual IPWL_NoteItem* GetSubItems(int32_t index) const = 0;
+ virtual void DeleteSubItem(IPWL_NoteItem* pNoteItem) = 0;
+ virtual void SetFocus() = 0;
+
+ virtual IPWL_NoteItem* GetParentItem() const = 0;
+ virtual void* GetPrivateData() const = 0;
+ virtual CFX_WideString GetAuthorName() const = 0;
+ virtual CPWL_Color GetBkColor() const = 0;
+ virtual CFX_WideString GetContents() const = 0;
+ virtual FX_SYSTEMTIME GetDateTime() const = 0;
+ virtual CFX_WideString GetSubjectName() const = 0;
+
+ virtual CPWL_Edit* GetEdit() const = 0;
};
-class CPWL_Note_Icon : public CPWL_Wnd
-{
-public:
- CPWL_Note_Icon();
- virtual ~CPWL_Note_Icon();
+class CPWL_Note_Icon : public CPWL_Wnd {
+ public:
+ CPWL_Note_Icon();
+ virtual ~CPWL_Note_Icon();
- void SetIconType(int32_t nType);
+ void SetIconType(int32_t nType);
-public:
+ public:
+ protected:
+ virtual void DrawThisAppearance(CFX_RenderDevice* pDevice,
+ CPDF_Matrix* pUser2Device);
-protected:
- virtual void DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device);
-
-private:
- int32_t m_nType;
+ private:
+ int32_t m_nType;
};
-class CPWL_Note_CloseBox : public CPWL_Button
-{
-public:
- CPWL_Note_CloseBox();
- virtual ~CPWL_Note_CloseBox();
+class CPWL_Note_CloseBox : public CPWL_Button {
+ public:
+ CPWL_Note_CloseBox();
+ virtual ~CPWL_Note_CloseBox();
-protected:
- virtual void DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device);
- virtual FX_BOOL OnLButtonDown(const CPDF_Point & point, FX_DWORD nFlag);
- virtual FX_BOOL OnLButtonUp(const CPDF_Point & point, FX_DWORD nFlag);
+ protected:
+ virtual void DrawThisAppearance(CFX_RenderDevice* pDevice,
+ CPDF_Matrix* pUser2Device);
+ virtual FX_BOOL OnLButtonDown(const CPDF_Point& point, FX_DWORD nFlag);
+ virtual FX_BOOL OnLButtonUp(const CPDF_Point& point, FX_DWORD nFlag);
-private:
- FX_BOOL m_bMouseDown;
+ private:
+ FX_BOOL m_bMouseDown;
};
-class CPWL_Note_LBBox : public CPWL_Wnd
-{
-public:
- CPWL_Note_LBBox();
- virtual ~CPWL_Note_LBBox();
+class CPWL_Note_LBBox : public CPWL_Wnd {
+ public:
+ CPWL_Note_LBBox();
+ virtual ~CPWL_Note_LBBox();
-protected:
- virtual void DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device);
+ protected:
+ virtual void DrawThisAppearance(CFX_RenderDevice* pDevice,
+ CPDF_Matrix* pUser2Device);
};
-class CPWL_Note_RBBox : public CPWL_Wnd
-{
-public:
- CPWL_Note_RBBox();
- virtual ~CPWL_Note_RBBox();
+class CPWL_Note_RBBox : public CPWL_Wnd {
+ public:
+ CPWL_Note_RBBox();
+ virtual ~CPWL_Note_RBBox();
-protected:
- virtual void DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device);
+ protected:
+ virtual void DrawThisAppearance(CFX_RenderDevice* pDevice,
+ CPDF_Matrix* pUser2Device);
};
-class CPWL_Note_Edit : public CPWL_Edit
-{
-public:
- CPWL_Note_Edit();
- virtual ~CPWL_Note_Edit();
-
- void EnableNotify(FX_BOOL bEnable) {m_bEnableNotify = bEnable;}
- virtual FX_FLOAT GetItemHeight(FX_FLOAT fLimitWidth);
- FX_FLOAT GetItemLeftMargin();
- FX_FLOAT GetItemRightMargin();
-
- virtual void SetText(const FX_WCHAR* csText);
-
-protected:
- virtual void OnNotify(CPWL_Wnd* pWnd, FX_DWORD msg, intptr_t wParam = 0, intptr_t lParam = 0);
- virtual void RePosChildWnd();
- virtual void OnSetFocus();
- virtual void OnKillFocus();
-
-private:
- FX_BOOL m_bEnableNotify;
- FX_FLOAT m_fOldItemHeight;
- FX_BOOL m_bSizeChanged;
- FX_FLOAT m_fOldMin;
- FX_FLOAT m_fOldMax;
+class CPWL_Note_Edit : public CPWL_Edit {
+ public:
+ CPWL_Note_Edit();
+ virtual ~CPWL_Note_Edit();
+
+ void EnableNotify(FX_BOOL bEnable) { m_bEnableNotify = bEnable; }
+ virtual FX_FLOAT GetItemHeight(FX_FLOAT fLimitWidth);
+ FX_FLOAT GetItemLeftMargin();
+ FX_FLOAT GetItemRightMargin();
+
+ virtual void SetText(const FX_WCHAR* csText);
+
+ protected:
+ virtual void OnNotify(CPWL_Wnd* pWnd,
+ FX_DWORD msg,
+ intptr_t wParam = 0,
+ intptr_t lParam = 0);
+ virtual void RePosChildWnd();
+ virtual void OnSetFocus();
+ virtual void OnKillFocus();
+
+ private:
+ FX_BOOL m_bEnableNotify;
+ FX_FLOAT m_fOldItemHeight;
+ FX_BOOL m_bSizeChanged;
+ FX_FLOAT m_fOldMin;
+ FX_FLOAT m_fOldMax;
};
-class CPWL_Note_Options : public CPWL_Wnd
-{
-public:
- CPWL_Note_Options();
- virtual ~CPWL_Note_Options();
+class CPWL_Note_Options : public CPWL_Wnd {
+ public:
+ CPWL_Note_Options();
+ virtual ~CPWL_Note_Options();
- CPDF_Rect GetContentRect() const;
- virtual void SetTextColor(const CPWL_Color & color);
- void SetText(const CFX_WideString& sText);
+ CPDF_Rect GetContentRect() const;
+ virtual void SetTextColor(const CPWL_Color& color);
+ void SetText(const CFX_WideString& sText);
-protected:
- virtual void RePosChildWnd();
- virtual void CreateChildWnd(const PWL_CREATEPARAM & cp);
- virtual void DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device);
+ protected:
+ virtual void RePosChildWnd();
+ virtual void CreateChildWnd(const PWL_CREATEPARAM& cp);
+ virtual void DrawThisAppearance(CFX_RenderDevice* pDevice,
+ CPDF_Matrix* pUser2Device);
-private:
- CPWL_Label* m_pText;
+ private:
+ CPWL_Label* m_pText;
};
-class CPWL_Note_Contents : public CPWL_ListCtrl
-{
-public:
- CPWL_Note_Contents();
- virtual ~CPWL_Note_Contents();
+class CPWL_Note_Contents : public CPWL_ListCtrl {
+ public:
+ CPWL_Note_Contents();
+ virtual ~CPWL_Note_Contents();
- virtual CFX_ByteString GetClassName() const;
- virtual void OnNotify(CPWL_Wnd* pWnd, FX_DWORD msg, intptr_t wParam = 0, intptr_t lParam = 0);
- virtual FX_BOOL OnLButtonDown(const CPDF_Point& point, FX_DWORD nFlag);
+ virtual CFX_ByteString GetClassName() const;
+ virtual void OnNotify(CPWL_Wnd* pWnd,
+ FX_DWORD msg,
+ intptr_t wParam = 0,
+ intptr_t lParam = 0);
+ virtual FX_BOOL OnLButtonDown(const CPDF_Point& point, FX_DWORD nFlag);
- void SetEditFocus(FX_BOOL bLast);
- CPWL_Edit* GetEdit() const;
+ void SetEditFocus(FX_BOOL bLast);
+ CPWL_Edit* GetEdit() const;
-public:
- void SetText(const CFX_WideString& sText);
- CFX_WideString GetText() const;
+ public:
+ void SetText(const CFX_WideString& sText);
+ CFX_WideString GetText() const;
- CPWL_NoteItem* CreateSubItem();
- void DeleteSubItem(IPWL_NoteItem* pNoteItem);
- int32_t CountSubItems() const;
- IPWL_NoteItem* GetSubItems(int32_t index) const;
+ CPWL_NoteItem* CreateSubItem();
+ void DeleteSubItem(IPWL_NoteItem* pNoteItem);
+ int32_t CountSubItems() const;
+ IPWL_NoteItem* GetSubItems(int32_t index) const;
- virtual IPWL_NoteItem* GetHitNoteItem(const CPDF_Point& point);
- void EnableRead(FX_BOOL bEnabled);
- void EnableModify(FX_BOOL bEnabled);
+ virtual IPWL_NoteItem* GetHitNoteItem(const CPDF_Point& point);
+ void EnableRead(FX_BOOL bEnabled);
+ void EnableModify(FX_BOOL bEnabled);
-protected:
- virtual void CreateChildWnd(const PWL_CREATEPARAM & cp);
+ protected:
+ virtual void CreateChildWnd(const PWL_CREATEPARAM& cp);
-private:
- CPWL_Note_Edit* m_pEdit;
+ private:
+ CPWL_Note_Edit* m_pEdit;
};
-class CPWL_NoteItem : public CPWL_Wnd, public IPWL_NoteItem
-{
-public:
- CPWL_NoteItem();
- virtual ~CPWL_NoteItem();
-
-public:
- virtual void SetPrivateData(void* pData);
- virtual void SetBkColor(const CPWL_Color& color);
- virtual void SetSubjectName(const CFX_WideString& sName);
- virtual void SetAuthorName(const CFX_WideString& sName);
- virtual void SetDateTime(FX_SYSTEMTIME time);
- virtual void SetContents(const CFX_WideString& sContents);
-
- virtual IPWL_NoteItem* CreateSubItem();
- virtual int32_t CountSubItems() const;
- virtual IPWL_NoteItem* GetSubItems(int32_t index) const;
- virtual void DeleteSubItem(IPWL_NoteItem* pNoteItem);
- virtual void SetFocus(){SetNoteFocus(FALSE);}
-
- virtual IPWL_NoteItem* GetParentItem() const;
- virtual void* GetPrivateData() const;
- virtual CFX_WideString GetAuthorName() const;
- virtual CPWL_Color GetBkColor() const;
- virtual CFX_WideString GetContents() const;
- virtual FX_SYSTEMTIME GetDateTime() const;
- virtual CFX_WideString GetSubjectName() const;
- virtual FX_BOOL IsTopItem() const { return FALSE;}
- virtual CPWL_Edit* GetEdit() const;
-
-public:
- virtual FX_BOOL OnLButtonDown(const CPDF_Point& point, FX_DWORD nFlag);
- virtual FX_BOOL OnRButtonUp(const CPDF_Point & point, FX_DWORD nFlag);
- virtual CFX_ByteString GetClassName() const;
- virtual IPWL_NoteItem* GetHitNoteItem(const CPDF_Point& point);
- virtual IPWL_NoteItem* GetFocusedNoteItem() const;
-
- virtual void ResetSubjectName(int32_t nItemIndex);
- void EnableRead(FX_BOOL bEnabled);
- void EnableModify(FX_BOOL bEnabled);
-
-protected:
- virtual void RePosChildWnd();
- virtual void CreateChildWnd(const PWL_CREATEPARAM & cp);
-
- virtual void OnNotify(CPWL_Wnd* pWnd, FX_DWORD msg, intptr_t wParam = 0, intptr_t lParam = 0);
-
-public:
- virtual FX_FLOAT GetItemHeight(FX_FLOAT fLimitWidth);
- virtual FX_FLOAT GetItemLeftMargin();
- virtual FX_FLOAT GetItemRightMargin();
- CPWL_NoteItem* CreateNoteItem();
- CPWL_NoteItem* GetParentNoteItem() const;
-
- void SetNoteFocus(FX_BOOL bLast);
- void OnContentsValidate();
-
- void OnCreateNoteItem();
-
-protected:
- void PopupNoteItemMenu(const CPDF_Point& point);
-
- virtual const CPWL_Note* GetNote() const;
- virtual IPWL_NoteNotify* GetNoteNotify() const;
-
-protected:
- CPWL_Label* m_pSubject;
- CPWL_Label* m_pDateTime;
- CPWL_Note_Contents* m_pContents;
-
-private:
- void* m_pPrivateData;
- FX_SYSTEMTIME m_dtNote;
- CFX_WideString m_sAuthor;
-
- FX_FLOAT m_fOldItemHeight;
- FX_BOOL m_bSizeChanged;
- FX_BOOL m_bAllowModify;
+class CPWL_NoteItem : public CPWL_Wnd, public IPWL_NoteItem {
+ public:
+ CPWL_NoteItem();
+ virtual ~CPWL_NoteItem();
+
+ public:
+ virtual void SetPrivateData(void* pData);
+ virtual void SetBkColor(const CPWL_Color& color);
+ virtual void SetSubjectName(const CFX_WideString& sName);
+ virtual void SetAuthorName(const CFX_WideString& sName);
+ virtual void SetDateTime(FX_SYSTEMTIME time);
+ virtual void SetContents(const CFX_WideString& sContents);
+
+ virtual IPWL_NoteItem* CreateSubItem();
+ virtual int32_t CountSubItems() const;
+ virtual IPWL_NoteItem* GetSubItems(int32_t index) const;
+ virtual void DeleteSubItem(IPWL_NoteItem* pNoteItem);
+ virtual void SetFocus() { SetNoteFocus(FALSE); }
+
+ virtual IPWL_NoteItem* GetParentItem() const;
+ virtual void* GetPrivateData() const;
+ virtual CFX_WideString GetAuthorName() const;
+ virtual CPWL_Color GetBkColor() const;
+ virtual CFX_WideString GetContents() const;
+ virtual FX_SYSTEMTIME GetDateTime() const;
+ virtual CFX_WideString GetSubjectName() const;
+ virtual FX_BOOL IsTopItem() const { return FALSE; }
+ virtual CPWL_Edit* GetEdit() const;
+
+ public:
+ virtual FX_BOOL OnLButtonDown(const CPDF_Point& point, FX_DWORD nFlag);
+ virtual FX_BOOL OnRButtonUp(const CPDF_Point& point, FX_DWORD nFlag);
+ virtual CFX_ByteString GetClassName() const;
+ virtual IPWL_NoteItem* GetHitNoteItem(const CPDF_Point& point);
+ virtual IPWL_NoteItem* GetFocusedNoteItem() const;
+
+ virtual void ResetSubjectName(int32_t nItemIndex);
+ void EnableRead(FX_BOOL bEnabled);
+ void EnableModify(FX_BOOL bEnabled);
+
+ protected:
+ virtual void RePosChildWnd();
+ virtual void CreateChildWnd(const PWL_CREATEPARAM& cp);
+
+ virtual void OnNotify(CPWL_Wnd* pWnd,
+ FX_DWORD msg,
+ intptr_t wParam = 0,
+ intptr_t lParam = 0);
+
+ public:
+ virtual FX_FLOAT GetItemHeight(FX_FLOAT fLimitWidth);
+ virtual FX_FLOAT GetItemLeftMargin();
+ virtual FX_FLOAT GetItemRightMargin();
+ CPWL_NoteItem* CreateNoteItem();
+ CPWL_NoteItem* GetParentNoteItem() const;
+
+ void SetNoteFocus(FX_BOOL bLast);
+ void OnContentsValidate();
+
+ void OnCreateNoteItem();
+
+ protected:
+ void PopupNoteItemMenu(const CPDF_Point& point);
+
+ virtual const CPWL_Note* GetNote() const;
+ virtual IPWL_NoteNotify* GetNoteNotify() const;
+
+ protected:
+ CPWL_Label* m_pSubject;
+ CPWL_Label* m_pDateTime;
+ CPWL_Note_Contents* m_pContents;
+
+ private:
+ void* m_pPrivateData;
+ FX_SYSTEMTIME m_dtNote;
+ CFX_WideString m_sAuthor;
+
+ FX_FLOAT m_fOldItemHeight;
+ FX_BOOL m_bSizeChanged;
+ FX_BOOL m_bAllowModify;
};
-class CPWL_Note : public CPWL_NoteItem
-{
-public:
- CPWL_Note(IPopup_Note* pPopupNote, IPWL_NoteNotify* pNoteNotify, IPWL_NoteHandler* pNoteHandler);
- virtual ~CPWL_Note();
-
-public:
- virtual void SetSubjectName(const CFX_WideString& sName);
- virtual void SetAuthorName(const CFX_WideString& sName);
- virtual CFX_WideString GetAuthorName() const;
- virtual void SetBkColor(const CPWL_Color& color);
- virtual void ResetSubjectName(int32_t nItemIndex){}
- virtual FX_BOOL IsTopItem() const {return TRUE;}
- virtual const CPWL_Note* GetNote() const;
- virtual IPWL_NoteNotify* GetNoteNotify() const;
-
-public:
- IPWL_NoteItem* Reply();
- void EnableNotify(FX_BOOL bEnabled);
- void SetIconType(int32_t nType);
- void SetOptionsText(const CFX_WideString& sText);
- void EnableRead(FX_BOOL bEnabled);
- void EnableModify(FX_BOOL bEnabled);
-
- CFX_WideString GetReplyString() const;
- void SetReplyString(const CFX_WideString& string);
-
- //0-normal / 1-caption / 2-leftbottom corner / 3-rightbottom corner / 4-close / 5-options
- int32_t NoteHitTest(const CPDF_Point& point) const;
- CPDF_Rect GetCaptionRect() const {return m_rcCaption;}
- IPopup_Note* GetPopupNote() const {return m_pPopupNote;}
-
-public:
- virtual FX_BOOL OnLButtonDown(const CPDF_Point & point, FX_DWORD nFlag);
- virtual FX_BOOL OnRButtonUp(const CPDF_Point & point, FX_DWORD nFlag);
- virtual FX_BOOL OnMouseWheel(short zDelta, const CPDF_Point & point, FX_DWORD nFlag);
-
-protected:
- virtual void RePosChildWnd();
- virtual void CreateChildWnd(const PWL_CREATEPARAM & cp);
-
- virtual void OnNotify(CPWL_Wnd* pWnd, FX_DWORD msg, intptr_t wParam = 0, intptr_t lParam = 0);
-
- FX_BOOL ResetScrollBar();
- void RePosNoteChildren();
- FX_BOOL ScrollBarShouldVisible();
-
-private:
- CPWL_Label* m_pAuthor;
- CPWL_Note_Icon* m_pIcon;
- CPWL_Note_CloseBox* m_pCloseBox;
- CPWL_Note_LBBox* m_pLBBox;
- CPWL_Note_RBBox* m_pRBBox;
- CPWL_ScrollBar* m_pContentsBar;
- CPWL_Note_Options* m_pOptions;
- IPWL_NoteNotify* m_pNoteNotify;
- FX_BOOL m_bResizing;
- PWL_SCROLL_INFO m_OldScrollInfo;
- CPDF_Rect m_rcCaption;
- FX_BOOL m_bEnalbleNotify;
- IPopup_Note* m_pPopupNote;
- CFX_WideString m_sReplyString;
+class CPWL_Note : public CPWL_NoteItem {
+ public:
+ CPWL_Note(IPopup_Note* pPopupNote,
+ IPWL_NoteNotify* pNoteNotify,
+ IPWL_NoteHandler* pNoteHandler);
+ virtual ~CPWL_Note();
+
+ public:
+ virtual void SetSubjectName(const CFX_WideString& sName);
+ virtual void SetAuthorName(const CFX_WideString& sName);
+ virtual CFX_WideString GetAuthorName() const;
+ virtual void SetBkColor(const CPWL_Color& color);
+ virtual void ResetSubjectName(int32_t nItemIndex) {}
+ virtual FX_BOOL IsTopItem() const { return TRUE; }
+ virtual const CPWL_Note* GetNote() const;
+ virtual IPWL_NoteNotify* GetNoteNotify() const;
+
+ public:
+ IPWL_NoteItem* Reply();
+ void EnableNotify(FX_BOOL bEnabled);
+ void SetIconType(int32_t nType);
+ void SetOptionsText(const CFX_WideString& sText);
+ void EnableRead(FX_BOOL bEnabled);
+ void EnableModify(FX_BOOL bEnabled);
+
+ CFX_WideString GetReplyString() const;
+ void SetReplyString(const CFX_WideString& string);
+
+ // 0-normal / 1-caption / 2-leftbottom corner / 3-rightbottom corner / 4-close
+ // / 5-options
+ int32_t NoteHitTest(const CPDF_Point& point) const;
+ CPDF_Rect GetCaptionRect() const { return m_rcCaption; }
+ IPopup_Note* GetPopupNote() const { return m_pPopupNote; }
+
+ public:
+ virtual FX_BOOL OnLButtonDown(const CPDF_Point& point, FX_DWORD nFlag);
+ virtual FX_BOOL OnRButtonUp(const CPDF_Point& point, FX_DWORD nFlag);
+ virtual FX_BOOL OnMouseWheel(short zDelta,
+ const CPDF_Point& point,
+ FX_DWORD nFlag);
+
+ protected:
+ virtual void RePosChildWnd();
+ virtual void CreateChildWnd(const PWL_CREATEPARAM& cp);
+
+ virtual void OnNotify(CPWL_Wnd* pWnd,
+ FX_DWORD msg,
+ intptr_t wParam = 0,
+ intptr_t lParam = 0);
+
+ FX_BOOL ResetScrollBar();
+ void RePosNoteChildren();
+ FX_BOOL ScrollBarShouldVisible();
+
+ private:
+ CPWL_Label* m_pAuthor;
+ CPWL_Note_Icon* m_pIcon;
+ CPWL_Note_CloseBox* m_pCloseBox;
+ CPWL_Note_LBBox* m_pLBBox;
+ CPWL_Note_RBBox* m_pRBBox;
+ CPWL_ScrollBar* m_pContentsBar;
+ CPWL_Note_Options* m_pOptions;
+ IPWL_NoteNotify* m_pNoteNotify;
+ FX_BOOL m_bResizing;
+ PWL_SCROLL_INFO m_OldScrollInfo;
+ CPDF_Rect m_rcCaption;
+ FX_BOOL m_bEnalbleNotify;
+ IPopup_Note* m_pPopupNote;
+ CFX_WideString m_sReplyString;
};
#endif // FPDFSDK_INCLUDE_PDFWINDOW_PWL_NOTE_H_
diff --git a/fpdfsdk/include/pdfwindow/PWL_ScrollBar.h b/fpdfsdk/include/pdfwindow/PWL_ScrollBar.h
index 0390222545..a149a01416 100644
--- a/fpdfsdk/include/pdfwindow/PWL_ScrollBar.h
+++ b/fpdfsdk/include/pdfwindow/PWL_ScrollBar.h
@@ -12,155 +12,150 @@
class CPWL_SBButton;
class CPWL_ScrollBar;
-struct PWL_SCROLL_INFO
-{
-public:
- PWL_SCROLL_INFO() : fContentMin(0.0f), fContentMax(0.0f), fPlateWidth(0.0f), fBigStep(0.0f), fSmallStep(0.0f)
- {
- }
- FX_FLOAT fContentMin;
- FX_FLOAT fContentMax;
- FX_FLOAT fPlateWidth;
- FX_FLOAT fBigStep;
- FX_FLOAT fSmallStep;
+struct PWL_SCROLL_INFO {
+ public:
+ PWL_SCROLL_INFO()
+ : fContentMin(0.0f),
+ fContentMax(0.0f),
+ fPlateWidth(0.0f),
+ fBigStep(0.0f),
+ fSmallStep(0.0f) {}
+ FX_FLOAT fContentMin;
+ FX_FLOAT fContentMax;
+ FX_FLOAT fPlateWidth;
+ FX_FLOAT fBigStep;
+ FX_FLOAT fSmallStep;
};
-enum PWL_SCROLLBAR_TYPE
-{
- SBT_HSCROLL,
- SBT_VSCROLL
-};
+enum PWL_SCROLLBAR_TYPE { SBT_HSCROLL, SBT_VSCROLL };
-enum PWL_SBBUTTON_TYPE
-{
- PSBT_MIN,
- PSBT_MAX,
- PSBT_POS
-};
+enum PWL_SBBUTTON_TYPE { PSBT_MIN, PSBT_MAX, PSBT_POS };
+
+class CPWL_SBButton : public CPWL_Wnd {
+ public:
+ CPWL_SBButton(PWL_SCROLLBAR_TYPE eScrollBarType,
+ PWL_SBBUTTON_TYPE eButtonType);
+ virtual ~CPWL_SBButton();
-class CPWL_SBButton : public CPWL_Wnd
-{
-public:
- CPWL_SBButton(PWL_SCROLLBAR_TYPE eScrollBarType,PWL_SBBUTTON_TYPE eButtonType);
- virtual ~CPWL_SBButton();
-
-public:
- virtual CFX_ByteString GetClassName() const;
- virtual void OnCreate(PWL_CREATEPARAM & cp);
- virtual void GetThisAppearanceStream(CFX_ByteTextBuf & sAppStream);
- virtual void DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device);
- virtual FX_BOOL OnLButtonDown(const CPDF_Point & point, FX_DWORD nFlag);
- virtual FX_BOOL OnLButtonUp(const CPDF_Point & point, FX_DWORD nFlag);
- virtual FX_BOOL OnMouseMove(const CPDF_Point & point, FX_DWORD nFlag);
-
-protected:
- PWL_SCROLLBAR_TYPE m_eScrollBarType;
- PWL_SBBUTTON_TYPE m_eSBButtonType;
-
- FX_BOOL m_bMouseDown;
+ public:
+ virtual CFX_ByteString GetClassName() const;
+ virtual void OnCreate(PWL_CREATEPARAM& cp);
+ virtual void GetThisAppearanceStream(CFX_ByteTextBuf& sAppStream);
+ virtual void DrawThisAppearance(CFX_RenderDevice* pDevice,
+ CPDF_Matrix* pUser2Device);
+ virtual FX_BOOL OnLButtonDown(const CPDF_Point& point, FX_DWORD nFlag);
+ virtual FX_BOOL OnLButtonUp(const CPDF_Point& point, FX_DWORD nFlag);
+ virtual FX_BOOL OnMouseMove(const CPDF_Point& point, FX_DWORD nFlag);
+
+ protected:
+ PWL_SCROLLBAR_TYPE m_eScrollBarType;
+ PWL_SBBUTTON_TYPE m_eSBButtonType;
+
+ FX_BOOL m_bMouseDown;
};
-struct PWL_FLOATRANGE
-{
-public:
- PWL_FLOATRANGE();
- PWL_FLOATRANGE(FX_FLOAT min,FX_FLOAT max);
- void Default();
- void Set(FX_FLOAT min,FX_FLOAT max);
- FX_BOOL In(FX_FLOAT x) const;
- FX_FLOAT GetWidth() const;
-
- FX_FLOAT fMin,fMax;
+struct PWL_FLOATRANGE {
+ public:
+ PWL_FLOATRANGE();
+ PWL_FLOATRANGE(FX_FLOAT min, FX_FLOAT max);
+ void Default();
+ void Set(FX_FLOAT min, FX_FLOAT max);
+ FX_BOOL In(FX_FLOAT x) const;
+ FX_FLOAT GetWidth() const;
+
+ FX_FLOAT fMin, fMax;
};
-struct PWL_SCROLL_PRIVATEDATA
-{
-public:
- PWL_SCROLL_PRIVATEDATA();
-
- void Default();
- void SetScrollRange(FX_FLOAT min,FX_FLOAT max);
- void SetClientWidth(FX_FLOAT width);
- void SetSmallStep(FX_FLOAT step);
- void SetBigStep(FX_FLOAT step);
- FX_BOOL SetPos(FX_FLOAT pos);
-
- void AddSmall();
- void SubSmall();
- void AddBig();
- void SubBig();
-
- PWL_FLOATRANGE ScrollRange;
- FX_FLOAT fClientWidth;
- FX_FLOAT fScrollPos;
- FX_FLOAT fBigStep;
- FX_FLOAT fSmallStep;
+struct PWL_SCROLL_PRIVATEDATA {
+ public:
+ PWL_SCROLL_PRIVATEDATA();
+
+ void Default();
+ void SetScrollRange(FX_FLOAT min, FX_FLOAT max);
+ void SetClientWidth(FX_FLOAT width);
+ void SetSmallStep(FX_FLOAT step);
+ void SetBigStep(FX_FLOAT step);
+ FX_BOOL SetPos(FX_FLOAT pos);
+
+ void AddSmall();
+ void SubSmall();
+ void AddBig();
+ void SubBig();
+
+ PWL_FLOATRANGE ScrollRange;
+ FX_FLOAT fClientWidth;
+ FX_FLOAT fScrollPos;
+ FX_FLOAT fBigStep;
+ FX_FLOAT fSmallStep;
};
-class CPWL_ScrollBar : public CPWL_Wnd
-{
-public:
- CPWL_ScrollBar(PWL_SCROLLBAR_TYPE sbType = SBT_HSCROLL);
- virtual ~CPWL_ScrollBar();
-
-public:
- virtual CFX_ByteString GetClassName() const;
- virtual void OnCreate(PWL_CREATEPARAM & cp);
- virtual void RePosChildWnd();
- virtual void GetThisAppearanceStream(CFX_ByteTextBuf & sAppStream);
- virtual void DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device);
-
- virtual FX_BOOL OnLButtonDown(const CPDF_Point & point, FX_DWORD nFlag);
- virtual FX_BOOL OnLButtonUp(const CPDF_Point & point, FX_DWORD nFlag);
- virtual void OnNotify(CPWL_Wnd* pWnd, FX_DWORD msg, intptr_t wParam = 0, intptr_t lParam = 0);
-
- virtual void CreateChildWnd(const PWL_CREATEPARAM & cp);
-
- FX_FLOAT GetScrollBarWidth() const;
- PWL_SCROLLBAR_TYPE GetScrollBarType() const {return m_sbType;};
-
- void SetNotifyForever(FX_BOOL bForever) {m_bNotifyForever = bForever;}
-
-protected:
- void SetScrollRange(FX_FLOAT fMin,FX_FLOAT fMax,FX_FLOAT fClientWidth);
- void SetScrollPos(FX_FLOAT fPos);
- void MovePosButton(FX_BOOL bRefresh);
- void SetScrollStep(FX_FLOAT fBigStep,FX_FLOAT fSmallStep);
- void NotifyScrollWindow();
- CPDF_Rect GetScrollArea() const;
-
-private:
- void CreateButtons(const PWL_CREATEPARAM & cp);
-
- void OnMinButtonLBDown(const CPDF_Point & point);
- void OnMinButtonLBUp(const CPDF_Point & point);
- void OnMinButtonMouseMove(const CPDF_Point & point);
-
- void OnMaxButtonLBDown(const CPDF_Point & point);
- void OnMaxButtonLBUp(const CPDF_Point & point);
- void OnMaxButtonMouseMove(const CPDF_Point & point);
-
- void OnPosButtonLBDown(const CPDF_Point & point);
- void OnPosButtonLBUp(const CPDF_Point & point);
- void OnPosButtonMouseMove(const CPDF_Point & point);
-
- FX_FLOAT TrueToFace(FX_FLOAT);
- FX_FLOAT FaceToTrue(FX_FLOAT);
-
- virtual void TimerProc();
-
-private:
- PWL_SCROLLBAR_TYPE m_sbType;
- PWL_SCROLL_INFO m_OriginInfo;
- CPWL_SBButton* m_pMinButton;
- CPWL_SBButton* m_pMaxButton;
- CPWL_SBButton* m_pPosButton;
- PWL_SCROLL_PRIVATEDATA m_sData;
- FX_BOOL m_bMouseDown;
- FX_BOOL m_bMinOrMax;
- FX_BOOL m_bNotifyForever;
- FX_FLOAT m_nOldPos;
- FX_FLOAT m_fOldPosButton;
+class CPWL_ScrollBar : public CPWL_Wnd {
+ public:
+ CPWL_ScrollBar(PWL_SCROLLBAR_TYPE sbType = SBT_HSCROLL);
+ virtual ~CPWL_ScrollBar();
+
+ public:
+ virtual CFX_ByteString GetClassName() const;
+ virtual void OnCreate(PWL_CREATEPARAM& cp);
+ virtual void RePosChildWnd();
+ virtual void GetThisAppearanceStream(CFX_ByteTextBuf& sAppStream);
+ virtual void DrawThisAppearance(CFX_RenderDevice* pDevice,
+ CPDF_Matrix* pUser2Device);
+
+ virtual FX_BOOL OnLButtonDown(const CPDF_Point& point, FX_DWORD nFlag);
+ virtual FX_BOOL OnLButtonUp(const CPDF_Point& point, FX_DWORD nFlag);
+ virtual void OnNotify(CPWL_Wnd* pWnd,
+ FX_DWORD msg,
+ intptr_t wParam = 0,
+ intptr_t lParam = 0);
+
+ virtual void CreateChildWnd(const PWL_CREATEPARAM& cp);
+
+ FX_FLOAT GetScrollBarWidth() const;
+ PWL_SCROLLBAR_TYPE GetScrollBarType() const { return m_sbType; };
+
+ void SetNotifyForever(FX_BOOL bForever) { m_bNotifyForever = bForever; }
+
+ protected:
+ void SetScrollRange(FX_FLOAT fMin, FX_FLOAT fMax, FX_FLOAT fClientWidth);
+ void SetScrollPos(FX_FLOAT fPos);
+ void MovePosButton(FX_BOOL bRefresh);
+ void SetScrollStep(FX_FLOAT fBigStep, FX_FLOAT fSmallStep);
+ void NotifyScrollWindow();
+ CPDF_Rect GetScrollArea() const;
+
+ private:
+ void CreateButtons(const PWL_CREATEPARAM& cp);
+
+ void OnMinButtonLBDown(const CPDF_Point& point);
+ void OnMinButtonLBUp(const CPDF_Point& point);
+ void OnMinButtonMouseMove(const CPDF_Point& point);
+
+ void OnMaxButtonLBDown(const CPDF_Point& point);
+ void OnMaxButtonLBUp(const CPDF_Point& point);
+ void OnMaxButtonMouseMove(const CPDF_Point& point);
+
+ void OnPosButtonLBDown(const CPDF_Point& point);
+ void OnPosButtonLBUp(const CPDF_Point& point);
+ void OnPosButtonMouseMove(const CPDF_Point& point);
+
+ FX_FLOAT TrueToFace(FX_FLOAT);
+ FX_FLOAT FaceToTrue(FX_FLOAT);
+
+ virtual void TimerProc();
+
+ private:
+ PWL_SCROLLBAR_TYPE m_sbType;
+ PWL_SCROLL_INFO m_OriginInfo;
+ CPWL_SBButton* m_pMinButton;
+ CPWL_SBButton* m_pMaxButton;
+ CPWL_SBButton* m_pPosButton;
+ PWL_SCROLL_PRIVATEDATA m_sData;
+ FX_BOOL m_bMouseDown;
+ FX_BOOL m_bMinOrMax;
+ FX_BOOL m_bNotifyForever;
+ FX_FLOAT m_nOldPos;
+ FX_FLOAT m_fOldPosButton;
};
#endif // FPDFSDK_INCLUDE_PDFWINDOW_PWL_SCROLLBAR_H_
diff --git a/fpdfsdk/include/pdfwindow/PWL_Signature.h b/fpdfsdk/include/pdfwindow/PWL_Signature.h
index d9be322a7d..c48d4e9708 100644
--- a/fpdfsdk/include/pdfwindow/PWL_Signature.h
+++ b/fpdfsdk/include/pdfwindow/PWL_Signature.h
@@ -13,55 +13,55 @@
class CFX_DIBSource;
class CPWL_Label;
-class CPWL_Signature_Image : public CPWL_Image
-{
-public:
- CPWL_Signature_Image();
- virtual ~CPWL_Signature_Image();
+class CPWL_Signature_Image : public CPWL_Image {
+ public:
+ CPWL_Signature_Image();
+ virtual ~CPWL_Signature_Image();
- void SetImage(CFX_DIBSource* pImage);
- CFX_DIBSource* GetImage();
+ void SetImage(CFX_DIBSource* pImage);
+ CFX_DIBSource* GetImage();
-protected:
- virtual void DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device);
- virtual void GetThisAppearanceStream(CFX_ByteTextBuf & sAppStream);
+ protected:
+ virtual void DrawThisAppearance(CFX_RenderDevice* pDevice,
+ CPDF_Matrix* pUser2Device);
+ virtual void GetThisAppearanceStream(CFX_ByteTextBuf& sAppStream);
- virtual void GetScale(FX_FLOAT & fHScale,FX_FLOAT & fVScale);
+ virtual void GetScale(FX_FLOAT& fHScale, FX_FLOAT& fVScale);
-private:
- CFX_DIBSource* m_pImage;
+ private:
+ CFX_DIBSource* m_pImage;
};
-class CPWL_Signature : public CPWL_Wnd
-{
-public:
- CPWL_Signature();
- virtual ~CPWL_Signature();
+class CPWL_Signature : public CPWL_Wnd {
+ public:
+ CPWL_Signature();
+ virtual ~CPWL_Signature();
- void SetText(const FX_WCHAR* sText);
- void SetDescription(const FX_WCHAR* string);
- void SetImage(CFX_DIBSource* pImage);
- void SetImageStream(CPDF_Stream * pStream, const FX_CHAR* sImageAlias);
+ void SetText(const FX_WCHAR* sText);
+ void SetDescription(const FX_WCHAR* string);
+ void SetImage(CFX_DIBSource* pImage);
+ void SetImageStream(CPDF_Stream* pStream, const FX_CHAR* sImageAlias);
- void SetTextFlag(FX_BOOL bTextExist);
- void SetImageFlag(FX_BOOL bImageExist);
- void SetFoxitFlag(FX_BOOL bFlagExist);
+ void SetTextFlag(FX_BOOL bTextExist);
+ void SetImageFlag(FX_BOOL bImageExist);
+ void SetFoxitFlag(FX_BOOL bFlagExist);
-protected:
- virtual void RePosChildWnd();
- virtual void CreateChildWnd(const PWL_CREATEPARAM & cp);
+ protected:
+ virtual void RePosChildWnd();
+ virtual void CreateChildWnd(const PWL_CREATEPARAM& cp);
- virtual void DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device);
- virtual void GetThisAppearanceStream(CFX_ByteTextBuf & sAppStream);
+ virtual void DrawThisAppearance(CFX_RenderDevice* pDevice,
+ CPDF_Matrix* pUser2Device);
+ virtual void GetThisAppearanceStream(CFX_ByteTextBuf& sAppStream);
-private:
- CPWL_Label* m_pText;
- CPWL_Label* m_pDescription;
- CPWL_Signature_Image* m_pImage;
+ private:
+ CPWL_Label* m_pText;
+ CPWL_Label* m_pDescription;
+ CPWL_Signature_Image* m_pImage;
- FX_BOOL m_bTextExist;
- FX_BOOL m_bImageExist;
- FX_BOOL m_bFlagExist;
+ FX_BOOL m_bTextExist;
+ FX_BOOL m_bImageExist;
+ FX_BOOL m_bFlagExist;
};
#endif // FPDFSDK_INCLUDE_PDFWINDOW_PWL_SIGNATURE_H_
diff --git a/fpdfsdk/include/pdfwindow/PWL_SpecialButton.h b/fpdfsdk/include/pdfwindow/PWL_SpecialButton.h
index 31787d79ed..8cfe819a67 100644
--- a/fpdfsdk/include/pdfwindow/PWL_SpecialButton.h
+++ b/fpdfsdk/include/pdfwindow/PWL_SpecialButton.h
@@ -9,48 +9,45 @@
#include "PWL_Button.h"
-class CPWL_PushButton : public CPWL_Button
-{
-public:
- CPWL_PushButton();
- virtual ~CPWL_PushButton();
-
- virtual CFX_ByteString GetClassName() const;
- virtual CPDF_Rect GetFocusRect() const;
+class CPWL_PushButton : public CPWL_Button {
+ public:
+ CPWL_PushButton();
+ virtual ~CPWL_PushButton();
+
+ virtual CFX_ByteString GetClassName() const;
+ virtual CPDF_Rect GetFocusRect() const;
};
-class CPWL_CheckBox : public CPWL_Button
-{
-public:
- CPWL_CheckBox();
- virtual ~CPWL_CheckBox();
+class CPWL_CheckBox : public CPWL_Button {
+ public:
+ CPWL_CheckBox();
+ virtual ~CPWL_CheckBox();
- virtual CFX_ByteString GetClassName() const;
- virtual FX_BOOL OnLButtonUp(const CPDF_Point & point, FX_DWORD nFlag);
- virtual FX_BOOL OnChar(FX_WORD nChar, FX_DWORD nFlag);
+ virtual CFX_ByteString GetClassName() const;
+ virtual FX_BOOL OnLButtonUp(const CPDF_Point& point, FX_DWORD nFlag);
+ virtual FX_BOOL OnChar(FX_WORD nChar, FX_DWORD nFlag);
- void SetCheck(FX_BOOL bCheck);
- FX_BOOL IsChecked() const;
+ void SetCheck(FX_BOOL bCheck);
+ FX_BOOL IsChecked() const;
-private:
- FX_BOOL m_bChecked;
+ private:
+ FX_BOOL m_bChecked;
};
-class CPWL_RadioButton : public CPWL_Button
-{
-public:
- CPWL_RadioButton();
- virtual ~CPWL_RadioButton();
+class CPWL_RadioButton : public CPWL_Button {
+ public:
+ CPWL_RadioButton();
+ virtual ~CPWL_RadioButton();
- virtual CFX_ByteString GetClassName() const;
- virtual FX_BOOL OnLButtonUp(const CPDF_Point & point, FX_DWORD nFlag);
- virtual FX_BOOL OnChar(FX_WORD nChar, FX_DWORD nFlag);
+ virtual CFX_ByteString GetClassName() const;
+ virtual FX_BOOL OnLButtonUp(const CPDF_Point& point, FX_DWORD nFlag);
+ virtual FX_BOOL OnChar(FX_WORD nChar, FX_DWORD nFlag);
- void SetCheck(FX_BOOL bCheck);
- FX_BOOL IsChecked() const;
+ void SetCheck(FX_BOOL bCheck);
+ FX_BOOL IsChecked() const;
-private:
- FX_BOOL m_bChecked;
+ private:
+ FX_BOOL m_bChecked;
};
#endif // FPDFSDK_INCLUDE_PDFWINDOW_PWL_SPECIALBUTTON_H_
diff --git a/fpdfsdk/include/pdfwindow/PWL_Utils.h b/fpdfsdk/include/pdfwindow/PWL_Utils.h
index b58f30e399..e797510d50 100644
--- a/fpdfsdk/include/pdfwindow/PWL_Utils.h
+++ b/fpdfsdk/include/pdfwindow/PWL_Utils.h
@@ -8,236 +8,406 @@
#define FPDFSDK_INCLUDE_PDFWINDOW_PWL_UTILS_H_
#include "../../../core/include/fpdfapi/fpdf_parser.h" // For CPDF_Point.
-#include "../../../core/include/fpdfdoc/fpdf_vt.h" // For CPVT_WordRange.
+#include "../../../core/include/fpdfdoc/fpdf_vt.h" // For CPVT_WordRange.
#include "../fxedit/fx_edit.h"
#include "PWL_Wnd.h"
class CFX_PathData;
struct CPWL_Color;
-template<class T> T PWL_MIN (const T & i, const T & j) { return ((i < j) ? i : j); }
-template<class T> T PWL_MAX (const T & i, const T & j) { return ((i > j) ? i : j); }
-
-#define PWL_PDF2WIN(color) (uint8_t(color*255))
-#define PWL_WIN2PDF(color) ((FX_FLOAT)((FX_FLOAT)color/255.0f))
-
-#define PWL_MAKEDWORD(low,high) ((FX_DWORD)((FX_WORD)(low) | (FX_DWORD)(((FX_WORD)(high))<<16)))
-#define PWL_GETLOWWORD(dword) ((FX_WORD)(dword))
-#define PWL_GETHIGHWORD(dword) ((FX_WORD)(dword>>16))
-
-#define PWL_ICONTYPE_CHECKMARK 0
-#define PWL_ICONTYPE_CIRCLE 1
-#define PWL_ICONTYPE_COMMENT 2
-#define PWL_ICONTYPE_CROSS 3
-#define PWL_ICONTYPE_HELP 4
-#define PWL_ICONTYPE_INSERTTEXT 5
-#define PWL_ICONTYPE_KEY 6
-#define PWL_ICONTYPE_NEWPARAGRAPH 7
-#define PWL_ICONTYPE_TEXTNOTE 8
-#define PWL_ICONTYPE_PARAGRAPH 9
-#define PWL_ICONTYPE_RIGHTARROW 10
-#define PWL_ICONTYPE_RIGHTPOINTER 11
-#define PWL_ICONTYPE_STAR 12
-#define PWL_ICONTYPE_UPARROW 13
-#define PWL_ICONTYPE_UPLEFTARROW 14
-
-#define PWL_ICONTYPE_GRAPH 15
-#define PWL_ICONTYPE_PAPERCLIP 16
-#define PWL_ICONTYPE_ATTACHMENT 17
-#define PWL_ICONTYPE_TAG 18
-
-#define PWL_ICONTYPE_FOXIT 19
-
-#define PWL_ICONTYPE_UNKNOWN -1
-
-//checkbox & radiobutton style
-#define PCS_CHECK 0
-#define PCS_CIRCLE 1
-#define PCS_CROSS 2
-#define PCS_DIAMOND 3
-#define PCS_SQUARE 4
-#define PCS_STAR 5
-
-#define PWL_PI 3.14159265358979f
-#define PWL_BEZIER 0.5522847498308f
-
-//pushbutton layout style
-#define PPBL_LABEL 0
-#define PPBL_ICON 1
-#define PPBL_ICONTOPLABELBOTTOM 2
-#define PPBL_LABELTOPICONBOTTOM 3
-#define PPBL_ICONLEFTLABELRIGHT 4
-#define PPBL_LABELLEFTICONRIGHT 5
-#define PPBL_LABELOVERICON 6
-
-class CPWL_Point : public CPDF_Point
-{
-public:
- CPWL_Point() : CPDF_Point(0.0f,0.0f){}
- CPWL_Point(FX_FLOAT fx, FX_FLOAT fy) : CPDF_Point(fx,fy) {}
- CPWL_Point(const CPWL_Point& point) : CPDF_Point(point.x, point.y) {}
+template <class T>
+T PWL_MIN(const T& i, const T& j) {
+ return ((i < j) ? i : j);
+}
+template <class T>
+T PWL_MAX(const T& i, const T& j) {
+ return ((i > j) ? i : j);
+}
+
+#define PWL_PDF2WIN(color) (uint8_t(color * 255))
+#define PWL_WIN2PDF(color) ((FX_FLOAT)((FX_FLOAT)color / 255.0f))
+
+#define PWL_MAKEDWORD(low, high) \
+ ((FX_DWORD)((FX_WORD)(low) | (FX_DWORD)(((FX_WORD)(high)) << 16)))
+#define PWL_GETLOWWORD(dword) ((FX_WORD)(dword))
+#define PWL_GETHIGHWORD(dword) ((FX_WORD)(dword >> 16))
+
+#define PWL_ICONTYPE_CHECKMARK 0
+#define PWL_ICONTYPE_CIRCLE 1
+#define PWL_ICONTYPE_COMMENT 2
+#define PWL_ICONTYPE_CROSS 3
+#define PWL_ICONTYPE_HELP 4
+#define PWL_ICONTYPE_INSERTTEXT 5
+#define PWL_ICONTYPE_KEY 6
+#define PWL_ICONTYPE_NEWPARAGRAPH 7
+#define PWL_ICONTYPE_TEXTNOTE 8
+#define PWL_ICONTYPE_PARAGRAPH 9
+#define PWL_ICONTYPE_RIGHTARROW 10
+#define PWL_ICONTYPE_RIGHTPOINTER 11
+#define PWL_ICONTYPE_STAR 12
+#define PWL_ICONTYPE_UPARROW 13
+#define PWL_ICONTYPE_UPLEFTARROW 14
+
+#define PWL_ICONTYPE_GRAPH 15
+#define PWL_ICONTYPE_PAPERCLIP 16
+#define PWL_ICONTYPE_ATTACHMENT 17
+#define PWL_ICONTYPE_TAG 18
+
+#define PWL_ICONTYPE_FOXIT 19
+
+#define PWL_ICONTYPE_UNKNOWN -1
+
+// checkbox & radiobutton style
+#define PCS_CHECK 0
+#define PCS_CIRCLE 1
+#define PCS_CROSS 2
+#define PCS_DIAMOND 3
+#define PCS_SQUARE 4
+#define PCS_STAR 5
+
+#define PWL_PI 3.14159265358979f
+#define PWL_BEZIER 0.5522847498308f
+
+// pushbutton layout style
+#define PPBL_LABEL 0
+#define PPBL_ICON 1
+#define PPBL_ICONTOPLABELBOTTOM 2
+#define PPBL_LABELTOPICONBOTTOM 3
+#define PPBL_ICONLEFTLABELRIGHT 4
+#define PPBL_LABELLEFTICONRIGHT 5
+#define PPBL_LABELOVERICON 6
+
+class CPWL_Point : public CPDF_Point {
+ public:
+ CPWL_Point() : CPDF_Point(0.0f, 0.0f) {}
+ CPWL_Point(FX_FLOAT fx, FX_FLOAT fy) : CPDF_Point(fx, fy) {}
+ CPWL_Point(const CPWL_Point& point) : CPDF_Point(point.x, point.y) {}
};
-enum PWL_PATHDATA_TYPE
-{
- PWLPT_MOVETO,
- PWLPT_LINETO,
- PWLPT_BEZIERTO,
- PWLPT_UNKNOWN
+enum PWL_PATHDATA_TYPE {
+ PWLPT_MOVETO,
+ PWLPT_LINETO,
+ PWLPT_BEZIERTO,
+ PWLPT_UNKNOWN
};
-enum PWL_PATH_TYPE
-{
- PWLPT_PATHDATA,
- PWLPT_STREAM
-};
+enum PWL_PATH_TYPE { PWLPT_PATHDATA, PWLPT_STREAM };
-class CPWL_PathData
-{
-public:
- CPWL_PathData() : point(), type(PWLPT_UNKNOWN){}
- CPWL_PathData(const CPWL_Point& pt, PWL_PATHDATA_TYPE tp) : point(pt), type(tp) {}
+class CPWL_PathData {
+ public:
+ CPWL_PathData() : point(), type(PWLPT_UNKNOWN) {}
+ CPWL_PathData(const CPWL_Point& pt, PWL_PATHDATA_TYPE tp)
+ : point(pt), type(tp) {}
- CPWL_Point point;
- PWL_PATHDATA_TYPE type;
+ CPWL_Point point;
+ PWL_PATHDATA_TYPE type;
};
class IPWL_SpellCheck;
-class CPWL_Utils
-{
-public:
- static CPDF_Rect InflateRect(const CPDF_Rect& rcRect, FX_FLOAT fSize);
- static CPDF_Rect DeflateRect(const CPDF_Rect& rcRect, FX_FLOAT fSize);
- static FX_BOOL IntersectRect(const CPDF_Rect& rect1, const CPDF_Rect& rect2);
- static FX_BOOL ContainsRect(const CPDF_Rect& rcParent, const CPDF_Rect& rcChild);
- static CPDF_Rect ScaleRect(const CPDF_Rect& rcRect,FX_FLOAT fScale);
- static CPVT_WordRange OverlapWordRange(const CPVT_WordRange& wr1, const CPVT_WordRange& wr2);
- static CPDF_Rect GetCenterSquare(const CPDF_Rect & rect);
- static CPWL_Color SubstractColor(const CPWL_Color & sColor,FX_FLOAT fColorSub);
- static CPWL_Color DevideColor(const CPWL_Color & sColor,FX_FLOAT fColorDevide);
- static CPDF_Rect MaxRect(const CPDF_Rect & rect1,const CPDF_Rect & rect2);
- static CPDF_Rect OffsetRect(const CPDF_Rect & rect,FX_FLOAT x,FX_FLOAT y);
- static CPDF_Point OffsetPoint(const CPDF_Point & point,FX_FLOAT x,FX_FLOAT y);
- static FX_COLORREF PWLColorToFXColor(const CPWL_Color& color, int32_t nTransparancy = 255);
- static FX_BOOL IsBlackOrWhite(const CPWL_Color& color);
- static CPWL_Color GetReverseColor(const CPWL_Color& color);
-
- static CFX_ByteString GetColorAppStream(const CPWL_Color & color,const FX_BOOL & bFillOrStroke = TRUE);
- static CFX_ByteString GetBorderAppStream(const CPDF_Rect & rect, FX_FLOAT fWidth,
- const CPWL_Color & color, const CPWL_Color & crLeftTop, const CPWL_Color & crRightBottom,
- int32_t nStyle, const CPWL_Dash & dash);
- static CFX_ByteString GetCircleBorderAppStream(const CPDF_Rect & rect, FX_FLOAT fWidth,
- const CPWL_Color & color, const CPWL_Color & crLeftTop, const CPWL_Color & crRightBottom,
- int32_t nStyle, const CPWL_Dash & dash);
- static CFX_ByteString GetRectFillAppStream(const CPDF_Rect & rect,const CPWL_Color & color);
- static CFX_ByteString GetCircleFillAppStream(const CPDF_Rect & rect,const CPWL_Color & color);
-
- static CFX_ByteString GetPushButtonAppStream(const CPDF_Rect & rcBBox,
- IFX_Edit_FontMap * pFontMap,
- CPDF_Stream * pIconStream,
- CPDF_IconFit & IconFit,
- const CFX_WideString & sLabel,
- const CPWL_Color & crText,
- FX_FLOAT fFontSize,
- int32_t nLayOut);
- static CFX_ByteString GetCheckBoxAppStream(const CPDF_Rect & rcBBox,
- int32_t nStyle,
- const CPWL_Color & crText);
- static CFX_ByteString GetRadioButtonAppStream(const CPDF_Rect & rcBBox,
- int32_t nStyle,
- const CPWL_Color & crText);
-
- static CFX_ByteString GetEditAppStream(IFX_Edit* pEdit, const CPDF_Point & ptOffset, const CPVT_WordRange * pRange = NULL,
- FX_BOOL bContinuous = TRUE, FX_WORD SubWord = 0);
- static CFX_ByteString GetEditSelAppStream(IFX_Edit* pEdit, const CPDF_Point & ptOffset,
- const CPVT_WordRange * pRange = NULL);
- static CFX_ByteString GetSpellCheckAppStream(IFX_Edit* pEdit, IPWL_SpellCheck* pSpellCheck,
- const CPDF_Point & ptOffset,
- const CPVT_WordRange * pRange = NULL);
- static CFX_ByteString GetTextAppStream(const CPDF_Rect & rcBBox,IFX_Edit_FontMap * pFontMap,
- const CFX_WideString & sText, int32_t nAlignmentH, int32_t nAlignmentV,
- FX_FLOAT fFontSize, FX_BOOL bMultiLine, FX_BOOL bAutoReturn, const CPWL_Color & crText);
- static CFX_ByteString GetDropButtonAppStream(const CPDF_Rect & rcBBox);
-
- static void DrawFillRect(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device,const CPDF_Rect & rect,
- const CPWL_Color & color, int32_t nTransparancy);
- static void DrawFillRect(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device,
- const CPDF_Rect & rect,const FX_COLORREF & color);
- static void DrawStrokeRect(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device,const CPDF_Rect & rect,
- const FX_COLORREF & color, FX_FLOAT fWidth);
- static void DrawStrokeLine(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device,
- const CPDF_Point & ptMoveTo, const CPDF_Point & ptLineTo, const FX_COLORREF & color, FX_FLOAT fWidth);
- static void DrawBorder(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device,
- const CPDF_Rect & rect, FX_FLOAT fWidth,
- const CPWL_Color & color, const CPWL_Color & crLeftTop, const CPWL_Color & crRightBottom,
- int32_t nStyle, const CPWL_Dash & dash, int32_t nTransparancy);
- static void DrawFillArea(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device,
- const CPDF_Point* pPts, int32_t nCount, const FX_COLORREF& color);
- static void DrawShadow(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device,
- FX_BOOL bVertical, FX_BOOL bHorizontal, CPDF_Rect rect,
- int32_t nTransparancy, int32_t nStartGray, int32_t nEndGray);
- static void DrawEditSpellCheck(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device, IFX_Edit* pEdit,
- const CPDF_Rect& rcClip, const CPDF_Point& ptOffset, const CPVT_WordRange* pRange,
- IPWL_SpellCheck* pSpellCheck);
-public:
- static void ConvertCMYK2RGB(FX_FLOAT dC,FX_FLOAT dM,FX_FLOAT dY,FX_FLOAT dK,FX_FLOAT &dR,FX_FLOAT &dG,FX_FLOAT &dB);
- static void ConvertRGB2CMYK(FX_FLOAT dR,FX_FLOAT dG,FX_FLOAT dB,FX_FLOAT &dC,FX_FLOAT &dM,FX_FLOAT &dY,FX_FLOAT &dK);
-
- static void ConvertRGB2GRAY(FX_FLOAT dR,FX_FLOAT dG,FX_FLOAT dB,FX_FLOAT &dGray);
- static void ConvertGRAY2RGB(FX_FLOAT dGray,FX_FLOAT &dR,FX_FLOAT &dG,FX_FLOAT &dB);
-
- static void ConvertCMYK2GRAY(FX_FLOAT dC,FX_FLOAT dM,FX_FLOAT dY,FX_FLOAT dK,FX_FLOAT &dGray);
- static void ConvertGRAY2CMYK(FX_FLOAT dGray,FX_FLOAT &dC,FX_FLOAT &dM,FX_FLOAT &dY,FX_FLOAT &dK);
-
- static void PWLColorToARGB(const CPWL_Color& color, int32_t& alpha, FX_FLOAT& red, FX_FLOAT& green, FX_FLOAT& blue);
-
-public:
- static CFX_ByteString GetIconAppStream(int32_t nType, const CPDF_Rect& rect, const CPWL_Color& crFill,
- const CPWL_Color& crStroke = PWL_DEFAULT_BLACKCOLOR);
- static void DrawIconAppStream(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device,
- int32_t nType, const CPDF_Rect & rect, const CPWL_Color& crFill,
- const CPWL_Color& crStroke, const int32_t nTransparancy);
-
-private:
- static CFX_ByteString GetAppStreamFromArray(const CPWL_PathData* pPathData, int32_t nCount);
- static void GetPathDataFromArray(CFX_PathData& path, const CPWL_PathData* pPathData, int32_t nCount);
-
- static CFX_ByteString GetAppStream_Check(const CPDF_Rect & rcBBox, const CPWL_Color & crText);
- static CFX_ByteString GetAppStream_Circle(const CPDF_Rect & rcBBox, const CPWL_Color & crText);
- static CFX_ByteString GetAppStream_Cross(const CPDF_Rect & rcBBox, const CPWL_Color & crText);
- static CFX_ByteString GetAppStream_Diamond(const CPDF_Rect & rcBBox, const CPWL_Color & crText);
- static CFX_ByteString GetAppStream_Square(const CPDF_Rect & rcBBox, const CPWL_Color & crText);
- static CFX_ByteString GetAppStream_Star(const CPDF_Rect & rcBBox, const CPWL_Color & crText);
-
- static CFX_ByteString GetAP_Check(const CPDF_Rect & crBBox);
- static CFX_ByteString GetAP_Circle(const CPDF_Rect & crBBox);
- static CFX_ByteString GetAP_Cross(const CPDF_Rect & crBBox);
- static CFX_ByteString GetAP_Diamond(const CPDF_Rect & crBBox);
- static CFX_ByteString GetAP_Square(const CPDF_Rect & crBBox);
- static CFX_ByteString GetAP_Star(const CPDF_Rect & crBBox);
- static CFX_ByteString GetAP_HalfCircle(const CPDF_Rect & crBBox,FX_FLOAT fRotate);
-
- static void GetGraphics_Checkmark(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type);
- static void GetGraphics_Circle(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type);
- static void GetGraphics_Comment(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type);
- static void GetGraphics_Cross(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type);
- static void GetGraphics_Help(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type);
- static void GetGraphics_InsertText(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type);
- static void GetGraphics_Key(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type);
- static void GetGraphics_NewParagraph(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type);
- static void GetGraphics_TextNote(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type);
- static void GetGraphics_Paragraph(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type);
- static void GetGraphics_RightArrow(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type);
- static void GetGraphics_RightPointer(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type);
- static void GetGraphics_Star(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type);
- static void GetGraphics_UpArrow(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type);
- static void GetGraphics_UpLeftArrow(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type);
- static void GetGraphics_Graph(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type);
- static void GetGraphics_Paperclip(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type);
- static void GetGraphics_Attachment(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type);
- static void GetGraphics_Tag(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type);
- static void GetGraphics_Foxit(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type);
+class CPWL_Utils {
+ public:
+ static CPDF_Rect InflateRect(const CPDF_Rect& rcRect, FX_FLOAT fSize);
+ static CPDF_Rect DeflateRect(const CPDF_Rect& rcRect, FX_FLOAT fSize);
+ static FX_BOOL IntersectRect(const CPDF_Rect& rect1, const CPDF_Rect& rect2);
+ static FX_BOOL ContainsRect(const CPDF_Rect& rcParent,
+ const CPDF_Rect& rcChild);
+ static CPDF_Rect ScaleRect(const CPDF_Rect& rcRect, FX_FLOAT fScale);
+ static CPVT_WordRange OverlapWordRange(const CPVT_WordRange& wr1,
+ const CPVT_WordRange& wr2);
+ static CPDF_Rect GetCenterSquare(const CPDF_Rect& rect);
+ static CPWL_Color SubstractColor(const CPWL_Color& sColor,
+ FX_FLOAT fColorSub);
+ static CPWL_Color DevideColor(const CPWL_Color& sColor,
+ FX_FLOAT fColorDevide);
+ static CPDF_Rect MaxRect(const CPDF_Rect& rect1, const CPDF_Rect& rect2);
+ static CPDF_Rect OffsetRect(const CPDF_Rect& rect, FX_FLOAT x, FX_FLOAT y);
+ static CPDF_Point OffsetPoint(const CPDF_Point& point,
+ FX_FLOAT x,
+ FX_FLOAT y);
+ static FX_COLORREF PWLColorToFXColor(const CPWL_Color& color,
+ int32_t nTransparancy = 255);
+ static FX_BOOL IsBlackOrWhite(const CPWL_Color& color);
+ static CPWL_Color GetReverseColor(const CPWL_Color& color);
+
+ static CFX_ByteString GetColorAppStream(const CPWL_Color& color,
+ const FX_BOOL& bFillOrStroke = TRUE);
+ static CFX_ByteString GetBorderAppStream(const CPDF_Rect& rect,
+ FX_FLOAT fWidth,
+ const CPWL_Color& color,
+ const CPWL_Color& crLeftTop,
+ const CPWL_Color& crRightBottom,
+ int32_t nStyle,
+ const CPWL_Dash& dash);
+ static CFX_ByteString GetCircleBorderAppStream(
+ const CPDF_Rect& rect,
+ FX_FLOAT fWidth,
+ const CPWL_Color& color,
+ const CPWL_Color& crLeftTop,
+ const CPWL_Color& crRightBottom,
+ int32_t nStyle,
+ const CPWL_Dash& dash);
+ static CFX_ByteString GetRectFillAppStream(const CPDF_Rect& rect,
+ const CPWL_Color& color);
+ static CFX_ByteString GetCircleFillAppStream(const CPDF_Rect& rect,
+ const CPWL_Color& color);
+
+ static CFX_ByteString GetPushButtonAppStream(const CPDF_Rect& rcBBox,
+ IFX_Edit_FontMap* pFontMap,
+ CPDF_Stream* pIconStream,
+ CPDF_IconFit& IconFit,
+ const CFX_WideString& sLabel,
+ const CPWL_Color& crText,
+ FX_FLOAT fFontSize,
+ int32_t nLayOut);
+ static CFX_ByteString GetCheckBoxAppStream(const CPDF_Rect& rcBBox,
+ int32_t nStyle,
+ const CPWL_Color& crText);
+ static CFX_ByteString GetRadioButtonAppStream(const CPDF_Rect& rcBBox,
+ int32_t nStyle,
+ const CPWL_Color& crText);
+
+ static CFX_ByteString GetEditAppStream(IFX_Edit* pEdit,
+ const CPDF_Point& ptOffset,
+ const CPVT_WordRange* pRange = NULL,
+ FX_BOOL bContinuous = TRUE,
+ FX_WORD SubWord = 0);
+ static CFX_ByteString GetEditSelAppStream(
+ IFX_Edit* pEdit,
+ const CPDF_Point& ptOffset,
+ const CPVT_WordRange* pRange = NULL);
+ static CFX_ByteString GetSpellCheckAppStream(
+ IFX_Edit* pEdit,
+ IPWL_SpellCheck* pSpellCheck,
+ const CPDF_Point& ptOffset,
+ const CPVT_WordRange* pRange = NULL);
+ static CFX_ByteString GetTextAppStream(const CPDF_Rect& rcBBox,
+ IFX_Edit_FontMap* pFontMap,
+ const CFX_WideString& sText,
+ int32_t nAlignmentH,
+ int32_t nAlignmentV,
+ FX_FLOAT fFontSize,
+ FX_BOOL bMultiLine,
+ FX_BOOL bAutoReturn,
+ const CPWL_Color& crText);
+ static CFX_ByteString GetDropButtonAppStream(const CPDF_Rect& rcBBox);
+
+ static void DrawFillRect(CFX_RenderDevice* pDevice,
+ CPDF_Matrix* pUser2Device,
+ const CPDF_Rect& rect,
+ const CPWL_Color& color,
+ int32_t nTransparancy);
+ static void DrawFillRect(CFX_RenderDevice* pDevice,
+ CPDF_Matrix* pUser2Device,
+ const CPDF_Rect& rect,
+ const FX_COLORREF& color);
+ static void DrawStrokeRect(CFX_RenderDevice* pDevice,
+ CPDF_Matrix* pUser2Device,
+ const CPDF_Rect& rect,
+ const FX_COLORREF& color,
+ FX_FLOAT fWidth);
+ static void DrawStrokeLine(CFX_RenderDevice* pDevice,
+ CPDF_Matrix* pUser2Device,
+ const CPDF_Point& ptMoveTo,
+ const CPDF_Point& ptLineTo,
+ const FX_COLORREF& color,
+ FX_FLOAT fWidth);
+ static void DrawBorder(CFX_RenderDevice* pDevice,
+ CPDF_Matrix* pUser2Device,
+ const CPDF_Rect& rect,
+ FX_FLOAT fWidth,
+ const CPWL_Color& color,
+ const CPWL_Color& crLeftTop,
+ const CPWL_Color& crRightBottom,
+ int32_t nStyle,
+ const CPWL_Dash& dash,
+ int32_t nTransparancy);
+ static void DrawFillArea(CFX_RenderDevice* pDevice,
+ CPDF_Matrix* pUser2Device,
+ const CPDF_Point* pPts,
+ int32_t nCount,
+ const FX_COLORREF& color);
+ static void DrawShadow(CFX_RenderDevice* pDevice,
+ CPDF_Matrix* pUser2Device,
+ FX_BOOL bVertical,
+ FX_BOOL bHorizontal,
+ CPDF_Rect rect,
+ int32_t nTransparancy,
+ int32_t nStartGray,
+ int32_t nEndGray);
+ static void DrawEditSpellCheck(CFX_RenderDevice* pDevice,
+ CPDF_Matrix* pUser2Device,
+ IFX_Edit* pEdit,
+ const CPDF_Rect& rcClip,
+ const CPDF_Point& ptOffset,
+ const CPVT_WordRange* pRange,
+ IPWL_SpellCheck* pSpellCheck);
+
+ public:
+ static void ConvertCMYK2RGB(FX_FLOAT dC,
+ FX_FLOAT dM,
+ FX_FLOAT dY,
+ FX_FLOAT dK,
+ FX_FLOAT& dR,
+ FX_FLOAT& dG,
+ FX_FLOAT& dB);
+ static void ConvertRGB2CMYK(FX_FLOAT dR,
+ FX_FLOAT dG,
+ FX_FLOAT dB,
+ FX_FLOAT& dC,
+ FX_FLOAT& dM,
+ FX_FLOAT& dY,
+ FX_FLOAT& dK);
+
+ static void ConvertRGB2GRAY(FX_FLOAT dR,
+ FX_FLOAT dG,
+ FX_FLOAT dB,
+ FX_FLOAT& dGray);
+ static void ConvertGRAY2RGB(FX_FLOAT dGray,
+ FX_FLOAT& dR,
+ FX_FLOAT& dG,
+ FX_FLOAT& dB);
+
+ static void ConvertCMYK2GRAY(FX_FLOAT dC,
+ FX_FLOAT dM,
+ FX_FLOAT dY,
+ FX_FLOAT dK,
+ FX_FLOAT& dGray);
+ static void ConvertGRAY2CMYK(FX_FLOAT dGray,
+ FX_FLOAT& dC,
+ FX_FLOAT& dM,
+ FX_FLOAT& dY,
+ FX_FLOAT& dK);
+
+ static void PWLColorToARGB(const CPWL_Color& color,
+ int32_t& alpha,
+ FX_FLOAT& red,
+ FX_FLOAT& green,
+ FX_FLOAT& blue);
+
+ public:
+ static CFX_ByteString GetIconAppStream(
+ int32_t nType,
+ const CPDF_Rect& rect,
+ const CPWL_Color& crFill,
+ const CPWL_Color& crStroke = PWL_DEFAULT_BLACKCOLOR);
+ static void DrawIconAppStream(CFX_RenderDevice* pDevice,
+ CPDF_Matrix* pUser2Device,
+ int32_t nType,
+ const CPDF_Rect& rect,
+ const CPWL_Color& crFill,
+ const CPWL_Color& crStroke,
+ const int32_t nTransparancy);
+
+ private:
+ static CFX_ByteString GetAppStreamFromArray(const CPWL_PathData* pPathData,
+ int32_t nCount);
+ static void GetPathDataFromArray(CFX_PathData& path,
+ const CPWL_PathData* pPathData,
+ int32_t nCount);
+
+ static CFX_ByteString GetAppStream_Check(const CPDF_Rect& rcBBox,
+ const CPWL_Color& crText);
+ static CFX_ByteString GetAppStream_Circle(const CPDF_Rect& rcBBox,
+ const CPWL_Color& crText);
+ static CFX_ByteString GetAppStream_Cross(const CPDF_Rect& rcBBox,
+ const CPWL_Color& crText);
+ static CFX_ByteString GetAppStream_Diamond(const CPDF_Rect& rcBBox,
+ const CPWL_Color& crText);
+ static CFX_ByteString GetAppStream_Square(const CPDF_Rect& rcBBox,
+ const CPWL_Color& crText);
+ static CFX_ByteString GetAppStream_Star(const CPDF_Rect& rcBBox,
+ const CPWL_Color& crText);
+
+ static CFX_ByteString GetAP_Check(const CPDF_Rect& crBBox);
+ static CFX_ByteString GetAP_Circle(const CPDF_Rect& crBBox);
+ static CFX_ByteString GetAP_Cross(const CPDF_Rect& crBBox);
+ static CFX_ByteString GetAP_Diamond(const CPDF_Rect& crBBox);
+ static CFX_ByteString GetAP_Square(const CPDF_Rect& crBBox);
+ static CFX_ByteString GetAP_Star(const CPDF_Rect& crBBox);
+ static CFX_ByteString GetAP_HalfCircle(const CPDF_Rect& crBBox,
+ FX_FLOAT fRotate);
+
+ static void GetGraphics_Checkmark(CFX_ByteString& sPathData,
+ CFX_PathData& path,
+ const CPDF_Rect& crBBox,
+ const PWL_PATH_TYPE type);
+ static void GetGraphics_Circle(CFX_ByteString& sPathData,
+ CFX_PathData& path,
+ const CPDF_Rect& crBBox,
+ const PWL_PATH_TYPE type);
+ static void GetGraphics_Comment(CFX_ByteString& sPathData,
+ CFX_PathData& path,
+ const CPDF_Rect& crBBox,
+ const PWL_PATH_TYPE type);
+ static void GetGraphics_Cross(CFX_ByteString& sPathData,
+ CFX_PathData& path,
+ const CPDF_Rect& crBBox,
+ const PWL_PATH_TYPE type);
+ static void GetGraphics_Help(CFX_ByteString& sPathData,
+ CFX_PathData& path,
+ const CPDF_Rect& crBBox,
+ const PWL_PATH_TYPE type);
+ static void GetGraphics_InsertText(CFX_ByteString& sPathData,
+ CFX_PathData& path,
+ const CPDF_Rect& crBBox,
+ const PWL_PATH_TYPE type);
+ static void GetGraphics_Key(CFX_ByteString& sPathData,
+ CFX_PathData& path,
+ const CPDF_Rect& crBBox,
+ const PWL_PATH_TYPE type);
+ static void GetGraphics_NewParagraph(CFX_ByteString& sPathData,
+ CFX_PathData& path,
+ const CPDF_Rect& crBBox,
+ const PWL_PATH_TYPE type);
+ static void GetGraphics_TextNote(CFX_ByteString& sPathData,
+ CFX_PathData& path,
+ const CPDF_Rect& crBBox,
+ const PWL_PATH_TYPE type);
+ static void GetGraphics_Paragraph(CFX_ByteString& sPathData,
+ CFX_PathData& path,
+ const CPDF_Rect& crBBox,
+ const PWL_PATH_TYPE type);
+ static void GetGraphics_RightArrow(CFX_ByteString& sPathData,
+ CFX_PathData& path,
+ const CPDF_Rect& crBBox,
+ const PWL_PATH_TYPE type);
+ static void GetGraphics_RightPointer(CFX_ByteString& sPathData,
+ CFX_PathData& path,
+ const CPDF_Rect& crBBox,
+ const PWL_PATH_TYPE type);
+ static void GetGraphics_Star(CFX_ByteString& sPathData,
+ CFX_PathData& path,
+ const CPDF_Rect& crBBox,
+ const PWL_PATH_TYPE type);
+ static void GetGraphics_UpArrow(CFX_ByteString& sPathData,
+ CFX_PathData& path,
+ const CPDF_Rect& crBBox,
+ const PWL_PATH_TYPE type);
+ static void GetGraphics_UpLeftArrow(CFX_ByteString& sPathData,
+ CFX_PathData& path,
+ const CPDF_Rect& crBBox,
+ const PWL_PATH_TYPE type);
+ static void GetGraphics_Graph(CFX_ByteString& sPathData,
+ CFX_PathData& path,
+ const CPDF_Rect& crBBox,
+ const PWL_PATH_TYPE type);
+ static void GetGraphics_Paperclip(CFX_ByteString& sPathData,
+ CFX_PathData& path,
+ const CPDF_Rect& crBBox,
+ const PWL_PATH_TYPE type);
+ static void GetGraphics_Attachment(CFX_ByteString& sPathData,
+ CFX_PathData& path,
+ const CPDF_Rect& crBBox,
+ const PWL_PATH_TYPE type);
+ static void GetGraphics_Tag(CFX_ByteString& sPathData,
+ CFX_PathData& path,
+ const CPDF_Rect& crBBox,
+ const PWL_PATH_TYPE type);
+ static void GetGraphics_Foxit(CFX_ByteString& sPathData,
+ CFX_PathData& path,
+ const CPDF_Rect& crBBox,
+ const PWL_PATH_TYPE type);
};
#endif // FPDFSDK_INCLUDE_PDFWINDOW_PWL_UTILS_H_
diff --git a/fpdfsdk/include/pdfwindow/PWL_Wnd.h b/fpdfsdk/include/pdfwindow/PWL_Wnd.h
index f2b996c747..63fd28b6d1 100644
--- a/fpdfsdk/include/pdfwindow/PWL_Wnd.h
+++ b/fpdfsdk/include/pdfwindow/PWL_Wnd.h
@@ -21,443 +21,454 @@ class IFX_SystemHandler;
class IPWL_Provider;
class IPWL_SpellCheck;
-//window styles
-#define PWS_CHILD 0x80000000L
-#define PWS_BORDER 0x40000000L
-#define PWS_BACKGROUND 0x20000000L
-#define PWS_HSCROLL 0x10000000L
-#define PWS_VSCROLL 0x08000000L
-#define PWS_VISIBLE 0x04000000L
-#define PWS_DISABLE 0x02000000L
-#define PWS_READONLY 0x01000000L
-#define PWS_AUTOFONTSIZE 0x00800000L
-#define PWS_AUTOTRANSPARENT 0x00400000L
-#define PWS_NOREFRESHCLIP 0x00200000L
-
-//edit and label styles
-#define PES_MULTILINE 0x0001L
-#define PES_PASSWORD 0x0002L
-#define PES_LEFT 0x0004L
-#define PES_RIGHT 0x0008L
-#define PES_MIDDLE 0x0010L
-#define PES_TOP 0x0020L
-#define PES_BOTTOM 0x0040L
-#define PES_CENTER 0x0080L
-#define PES_CHARARRAY 0x0100L
-#define PES_AUTOSCROLL 0x0200L
-#define PES_AUTORETURN 0x0400L
-#define PES_UNDO 0x0800L
-#define PES_RICH 0x1000L
-#define PES_SPELLCHECK 0x2000L
-#define PES_TEXTOVERFLOW 0x4000L
-#define PES_NOREAD 0x8000L
-
-//listbox styles
-#define PLBS_MULTIPLESEL 0x0001L
-#define PLBS_HOVERSEL 0x0008L
-
-//combobox styles
-#define PCBS_ALLOWCUSTOMTEXT 0x0001L
-
-//richedit styles
-#define PRES_MULTILINE 0x0001L
-#define PRES_AUTORETURN 0x0002L
-#define PRES_AUTOSCROLL 0x0004L
-#define PRES_SPELLCHECK 0x0008L
-#define PRES_UNDO 0x0100L
-#define PRES_MULTIPAGES 0x0200L
-#define PRES_TEXTOVERFLOW 0x0400L
-
-//border style
-#define PBS_SOLID 0
-#define PBS_DASH 1
-#define PBS_BEVELED 2
-#define PBS_INSET 3
-#define PBS_UNDERLINED 4
-#define PBS_SHADOW 5
-
-//notification messages
-#define PNM_ADDCHILD 0x00000000L
-#define PNM_REMOVECHILD 0x00000001L
-#define PNM_SETSCROLLINFO 0x00000002L
-#define PNM_SETSCROLLPOS 0x00000003L
-#define PNM_SCROLLWINDOW 0x00000004L
-#define PNM_LBUTTONDOWN 0x00000005L
-#define PNM_LBUTTONUP 0x00000006L
-#define PNM_MOUSEMOVE 0x00000007L
-#define PNM_NOTERESET 0x00000008L
-#define PNM_SETCARETINFO 0x00000009L
-#define PNM_SELCHANGED 0x0000000AL
-#define PNM_NOTEEDITCHANGED 0x0000000BL
-
-#define PWL_CLASSNAME_EDIT "CPWL_Edit"
-
-struct CPWL_Dash
-{
- CPWL_Dash(int32_t dash, int32_t gap, int32_t phase) : nDash(dash), nGap(gap), nPhase(phase)
- {}
-
- int32_t nDash;
- int32_t nGap;
- int32_t nPhase;
+// window styles
+#define PWS_CHILD 0x80000000L
+#define PWS_BORDER 0x40000000L
+#define PWS_BACKGROUND 0x20000000L
+#define PWS_HSCROLL 0x10000000L
+#define PWS_VSCROLL 0x08000000L
+#define PWS_VISIBLE 0x04000000L
+#define PWS_DISABLE 0x02000000L
+#define PWS_READONLY 0x01000000L
+#define PWS_AUTOFONTSIZE 0x00800000L
+#define PWS_AUTOTRANSPARENT 0x00400000L
+#define PWS_NOREFRESHCLIP 0x00200000L
+
+// edit and label styles
+#define PES_MULTILINE 0x0001L
+#define PES_PASSWORD 0x0002L
+#define PES_LEFT 0x0004L
+#define PES_RIGHT 0x0008L
+#define PES_MIDDLE 0x0010L
+#define PES_TOP 0x0020L
+#define PES_BOTTOM 0x0040L
+#define PES_CENTER 0x0080L
+#define PES_CHARARRAY 0x0100L
+#define PES_AUTOSCROLL 0x0200L
+#define PES_AUTORETURN 0x0400L
+#define PES_UNDO 0x0800L
+#define PES_RICH 0x1000L
+#define PES_SPELLCHECK 0x2000L
+#define PES_TEXTOVERFLOW 0x4000L
+#define PES_NOREAD 0x8000L
+
+// listbox styles
+#define PLBS_MULTIPLESEL 0x0001L
+#define PLBS_HOVERSEL 0x0008L
+
+// combobox styles
+#define PCBS_ALLOWCUSTOMTEXT 0x0001L
+
+// richedit styles
+#define PRES_MULTILINE 0x0001L
+#define PRES_AUTORETURN 0x0002L
+#define PRES_AUTOSCROLL 0x0004L
+#define PRES_SPELLCHECK 0x0008L
+#define PRES_UNDO 0x0100L
+#define PRES_MULTIPAGES 0x0200L
+#define PRES_TEXTOVERFLOW 0x0400L
+
+// border style
+#define PBS_SOLID 0
+#define PBS_DASH 1
+#define PBS_BEVELED 2
+#define PBS_INSET 3
+#define PBS_UNDERLINED 4
+#define PBS_SHADOW 5
+
+// notification messages
+#define PNM_ADDCHILD 0x00000000L
+#define PNM_REMOVECHILD 0x00000001L
+#define PNM_SETSCROLLINFO 0x00000002L
+#define PNM_SETSCROLLPOS 0x00000003L
+#define PNM_SCROLLWINDOW 0x00000004L
+#define PNM_LBUTTONDOWN 0x00000005L
+#define PNM_LBUTTONUP 0x00000006L
+#define PNM_MOUSEMOVE 0x00000007L
+#define PNM_NOTERESET 0x00000008L
+#define PNM_SETCARETINFO 0x00000009L
+#define PNM_SELCHANGED 0x0000000AL
+#define PNM_NOTEEDITCHANGED 0x0000000BL
+
+#define PWL_CLASSNAME_EDIT "CPWL_Edit"
+
+struct CPWL_Dash {
+ CPWL_Dash(int32_t dash, int32_t gap, int32_t phase)
+ : nDash(dash), nGap(gap), nPhase(phase) {}
+
+ int32_t nDash;
+ int32_t nGap;
+ int32_t nPhase;
};
-struct CPWL_Color
-{
- CPWL_Color(int32_t type = COLORTYPE_TRANSPARENT, FX_FLOAT color1 = 0.0f, FX_FLOAT color2 = 0.0f, FX_FLOAT color3 = 0.0f, FX_FLOAT color4 = 0.0f)
- : nColorType(type), fColor1(color1), fColor2(color2), fColor3(color3), fColor4(color4)
- {}
-
- CPWL_Color(int32_t r, int32_t g, int32_t b) :
- nColorType(COLORTYPE_RGB), fColor1(r/255.0f), fColor2(g/255.0f), fColor3(b/255.0f), fColor4(0)
- {}
-
- void ConvertColorType(int32_t other_nColorType);
-
- /*
- COLORTYPE_TRANSPARENT
- COLORTYPE_RGB
- COLORTYPE_CMYK
- COLORTYPE_GRAY
- */
- int32_t nColorType;
- FX_FLOAT fColor1,fColor2,fColor3,fColor4;
+struct CPWL_Color {
+ CPWL_Color(int32_t type = COLORTYPE_TRANSPARENT,
+ FX_FLOAT color1 = 0.0f,
+ FX_FLOAT color2 = 0.0f,
+ FX_FLOAT color3 = 0.0f,
+ FX_FLOAT color4 = 0.0f)
+ : nColorType(type),
+ fColor1(color1),
+ fColor2(color2),
+ fColor3(color3),
+ fColor4(color4) {}
+
+ CPWL_Color(int32_t r, int32_t g, int32_t b)
+ : nColorType(COLORTYPE_RGB),
+ fColor1(r / 255.0f),
+ fColor2(g / 255.0f),
+ fColor3(b / 255.0f),
+ fColor4(0) {}
+
+ void ConvertColorType(int32_t other_nColorType);
+
+ /*
+ COLORTYPE_TRANSPARENT
+ COLORTYPE_RGB
+ COLORTYPE_CMYK
+ COLORTYPE_GRAY
+ */
+ int32_t nColorType;
+ FX_FLOAT fColor1, fColor2, fColor3, fColor4;
};
-inline FX_BOOL operator == (const CPWL_Color &c1, const CPWL_Color &c2)
-{
- return c1.nColorType == c2.nColorType &&
- c1.fColor1 - c2.fColor1 < 0.0001 && c1.fColor1 - c2.fColor1 > -0.0001 &&
- c1.fColor2 - c2.fColor2 < 0.0001 && c1.fColor2 - c2.fColor2 > -0.0001 &&
- c1.fColor3 - c2.fColor3 < 0.0001 && c1.fColor3 - c2.fColor3 > -0.0001 &&
- c1.fColor4 - c2.fColor4 < 0.0001 && c1.fColor4 - c2.fColor4 > -0.0001;
+inline FX_BOOL operator==(const CPWL_Color& c1, const CPWL_Color& c2) {
+ return c1.nColorType == c2.nColorType && c1.fColor1 - c2.fColor1 < 0.0001 &&
+ c1.fColor1 - c2.fColor1 > -0.0001 &&
+ c1.fColor2 - c2.fColor2 < 0.0001 &&
+ c1.fColor2 - c2.fColor2 > -0.0001 &&
+ c1.fColor3 - c2.fColor3 < 0.0001 &&
+ c1.fColor3 - c2.fColor3 > -0.0001 &&
+ c1.fColor4 - c2.fColor4 < 0.0001 && c1.fColor4 - c2.fColor4 > -0.0001;
}
-inline FX_BOOL operator != (const CPWL_Color &c1, const CPWL_Color &c2)
-{
- return !operator == (c1, c2);
+inline FX_BOOL operator!=(const CPWL_Color& c1, const CPWL_Color& c2) {
+ return !operator==(c1, c2);
}
-#define PWL_SCROLLBAR_WIDTH 12.0f
-#define PWL_SCROLLBAR_BUTTON_WIDTH 9.0f
-#define PWL_SCROLLBAR_POSBUTTON_MINWIDTH 2.0f
-#define PWL_SCROLLBAR_TRANSPARANCY 150
-#define PWL_SCROLLBAR_BKCOLOR CPWL_Color(COLORTYPE_RGB,220.0f/255.0f,220.0f/255.0f,220.0f/255.0f)
-#define PWL_DEFAULT_SELTEXTCOLOR CPWL_Color(COLORTYPE_RGB,1,1,1)
-#define PWL_DEFAULT_SELBACKCOLOR CPWL_Color(COLORTYPE_RGB,0,51.0f/255.0f,113.0f/255.0f)
-#define PWL_DEFAULT_BACKCOLOR PWL_DEFAULT_SELTEXTCOLOR
-#define PWL_DEFAULT_TEXTCOLOR CPWL_Color(COLORTYPE_RGB,0,0,0)
-#define PWL_DEFAULT_FONTSIZE 9.0f
-#define PWL_DEFAULT_BLACKCOLOR CPWL_Color(COLORTYPE_GRAY,0)
-#define PWL_DEFAULT_WHITECOLOR CPWL_Color(COLORTYPE_GRAY,1)
-#define PWL_DEFAULT_HEAVYGRAYCOLOR CPWL_Color(COLORTYPE_GRAY,0.50)
-#define PWL_DEFAULT_LIGHTGRAYCOLOR CPWL_Color(COLORTYPE_GRAY,0.75)
-#define PWL_TRIANGLE_HALFLEN 2.0f
-#define PWL_CBBUTTON_TRIANGLE_HALFLEN 3.0f
-#define PWL_INVALIDATE_INFLATE 2
-
-class IPWL_SpellCheck
-{
-public:
- virtual ~IPWL_SpellCheck() { }
- virtual FX_BOOL CheckWord(const FX_CHAR* sWord) = 0;
- virtual void SuggestWords(const FX_CHAR* sWord, CFX_ByteStringArray & sSuggest) = 0;
+#define PWL_SCROLLBAR_WIDTH 12.0f
+#define PWL_SCROLLBAR_BUTTON_WIDTH 9.0f
+#define PWL_SCROLLBAR_POSBUTTON_MINWIDTH 2.0f
+#define PWL_SCROLLBAR_TRANSPARANCY 150
+#define PWL_SCROLLBAR_BKCOLOR \
+ CPWL_Color(COLORTYPE_RGB, 220.0f / 255.0f, 220.0f / 255.0f, 220.0f / 255.0f)
+#define PWL_DEFAULT_SELTEXTCOLOR CPWL_Color(COLORTYPE_RGB, 1, 1, 1)
+#define PWL_DEFAULT_SELBACKCOLOR \
+ CPWL_Color(COLORTYPE_RGB, 0, 51.0f / 255.0f, 113.0f / 255.0f)
+#define PWL_DEFAULT_BACKCOLOR PWL_DEFAULT_SELTEXTCOLOR
+#define PWL_DEFAULT_TEXTCOLOR CPWL_Color(COLORTYPE_RGB, 0, 0, 0)
+#define PWL_DEFAULT_FONTSIZE 9.0f
+#define PWL_DEFAULT_BLACKCOLOR CPWL_Color(COLORTYPE_GRAY, 0)
+#define PWL_DEFAULT_WHITECOLOR CPWL_Color(COLORTYPE_GRAY, 1)
+#define PWL_DEFAULT_HEAVYGRAYCOLOR CPWL_Color(COLORTYPE_GRAY, 0.50)
+#define PWL_DEFAULT_LIGHTGRAYCOLOR CPWL_Color(COLORTYPE_GRAY, 0.75)
+#define PWL_TRIANGLE_HALFLEN 2.0f
+#define PWL_CBBUTTON_TRIANGLE_HALFLEN 3.0f
+#define PWL_INVALIDATE_INFLATE 2
+
+class IPWL_SpellCheck {
+ public:
+ virtual ~IPWL_SpellCheck() {}
+ virtual FX_BOOL CheckWord(const FX_CHAR* sWord) = 0;
+ virtual void SuggestWords(const FX_CHAR* sWord,
+ CFX_ByteStringArray& sSuggest) = 0;
};
-class IPWL_Provider
-{
-public:
- virtual ~IPWL_Provider() { }
-
- //get a matrix which map user space to CWnd client space
- virtual CPDF_Matrix GetWindowMatrix(void* pAttachedData) = 0;
-
- /*
- 0 L"&Undo\tCtrl+Z"
- 1 L"&Redo\tCtrl+Shift+Z"
- 2 L"Cu&t\tCtrl+X"
- 3 L"&Copy\tCtrl+C"
- 4 L"&Paste\tCtrl+V"
- 5 L"&Delete"
- 6 L"&Select All\tCtrl+A"
- */
- virtual CFX_WideString LoadPopupMenuString(int32_t nIndex) = 0;
+class IPWL_Provider {
+ public:
+ virtual ~IPWL_Provider() {}
+
+ // get a matrix which map user space to CWnd client space
+ virtual CPDF_Matrix GetWindowMatrix(void* pAttachedData) = 0;
+
+ /*
+ 0 L"&Undo\tCtrl+Z"
+ 1 L"&Redo\tCtrl+Shift+Z"
+ 2 L"Cu&t\tCtrl+X"
+ 3 L"&Copy\tCtrl+C"
+ 4 L"&Paste\tCtrl+V"
+ 5 L"&Delete"
+ 6 L"&Select All\tCtrl+A"
+ */
+ virtual CFX_WideString LoadPopupMenuString(int32_t nIndex) = 0;
};
-class IPWL_FocusHandler
-{
-public:
- virtual ~IPWL_FocusHandler() { }
- virtual void OnSetFocus(CPWL_Wnd* pWnd) = 0;
- virtual void OnKillFocus(CPWL_Wnd* pWnd) = 0;
+class IPWL_FocusHandler {
+ public:
+ virtual ~IPWL_FocusHandler() {}
+ virtual void OnSetFocus(CPWL_Wnd* pWnd) = 0;
+ virtual void OnKillFocus(CPWL_Wnd* pWnd) = 0;
};
-struct PWL_CREATEPARAM
-{
-public:
- PWL_CREATEPARAM() : rcRectWnd(0,0,0,0),
- pSystemHandler(NULL),
- pFontMap(NULL),
- pProvider(NULL),
- pFocusHandler(NULL),
- dwFlags(0),
- sBackgroundColor(),
- hAttachedWnd(NULL),
- pSpellCheck(NULL),
- nBorderStyle(PBS_SOLID),
- dwBorderWidth(1),
- sBorderColor(),
- sTextColor(),
- sTextStrokeColor(),
- nTransparency(255),
- fFontSize(PWL_DEFAULT_FONTSIZE),
- sDash(3,0,0),
- pAttachedData(NULL),
- pParentWnd(NULL),
- pMsgControl(NULL),
- eCursorType(FXCT_ARROW),
- mtChild(1,0,0,1,0,0)
- {
- }
-
- CPDF_Rect rcRectWnd; //required
- IFX_SystemHandler* pSystemHandler; //required
- IFX_Edit_FontMap* pFontMap; //required for text window
- IPWL_Provider* pProvider; //required for self coordinate
- IPWL_FocusHandler* pFocusHandler; //optional
- FX_DWORD dwFlags; //optional
- CPWL_Color sBackgroundColor; //optional
- FX_HWND hAttachedWnd; //required for no-reader framework
- IPWL_SpellCheck* pSpellCheck; //required for spellchecking
- int32_t nBorderStyle; //optional
- int32_t dwBorderWidth; //optional
- CPWL_Color sBorderColor; //optional
- CPWL_Color sTextColor; //optional
- CPWL_Color sTextStrokeColor; //optional
- int32_t nTransparency; //optional
- FX_FLOAT fFontSize; //optional
- CPWL_Dash sDash; //optional
- void* pAttachedData; //optional
- CPWL_Wnd* pParentWnd; //ignore
- CPWL_MsgControl* pMsgControl; //ignore
- int32_t eCursorType; //ignore
- CPDF_Matrix mtChild; //ignore
+struct PWL_CREATEPARAM {
+ public:
+ PWL_CREATEPARAM()
+ : rcRectWnd(0, 0, 0, 0),
+ pSystemHandler(NULL),
+ pFontMap(NULL),
+ pProvider(NULL),
+ pFocusHandler(NULL),
+ dwFlags(0),
+ sBackgroundColor(),
+ hAttachedWnd(NULL),
+ pSpellCheck(NULL),
+ nBorderStyle(PBS_SOLID),
+ dwBorderWidth(1),
+ sBorderColor(),
+ sTextColor(),
+ sTextStrokeColor(),
+ nTransparency(255),
+ fFontSize(PWL_DEFAULT_FONTSIZE),
+ sDash(3, 0, 0),
+ pAttachedData(NULL),
+ pParentWnd(NULL),
+ pMsgControl(NULL),
+ eCursorType(FXCT_ARROW),
+ mtChild(1, 0, 0, 1, 0, 0) {}
+
+ CPDF_Rect rcRectWnd; // required
+ IFX_SystemHandler* pSystemHandler; // required
+ IFX_Edit_FontMap* pFontMap; // required for text window
+ IPWL_Provider* pProvider; // required for self coordinate
+ IPWL_FocusHandler* pFocusHandler; // optional
+ FX_DWORD dwFlags; // optional
+ CPWL_Color sBackgroundColor; // optional
+ FX_HWND hAttachedWnd; // required for no-reader framework
+ IPWL_SpellCheck* pSpellCheck; // required for spellchecking
+ int32_t nBorderStyle; // optional
+ int32_t dwBorderWidth; // optional
+ CPWL_Color sBorderColor; // optional
+ CPWL_Color sTextColor; // optional
+ CPWL_Color sTextStrokeColor; // optional
+ int32_t nTransparency; // optional
+ FX_FLOAT fFontSize; // optional
+ CPWL_Dash sDash; // optional
+ void* pAttachedData; // optional
+ CPWL_Wnd* pParentWnd; // ignore
+ CPWL_MsgControl* pMsgControl; // ignore
+ int32_t eCursorType; // ignore
+ CPDF_Matrix mtChild; // ignore
};
-class CPWL_Timer
-{
-public:
- CPWL_Timer(CPWL_TimerHandler* pAttached, IFX_SystemHandler* pSystemHandler);
- virtual ~CPWL_Timer();
+class CPWL_Timer {
+ public:
+ CPWL_Timer(CPWL_TimerHandler* pAttached, IFX_SystemHandler* pSystemHandler);
+ virtual ~CPWL_Timer();
- int32_t SetPWLTimer(int32_t nElapse);
- void KillPWLTimer();
- static void TimerProc(int32_t idEvent);
+ int32_t SetPWLTimer(int32_t nElapse);
+ void KillPWLTimer();
+ static void TimerProc(int32_t idEvent);
-private:
- int32_t m_nTimerID;
- CPWL_TimerHandler* m_pAttached;
- IFX_SystemHandler* m_pSystemHandler;
+ private:
+ int32_t m_nTimerID;
+ CPWL_TimerHandler* m_pAttached;
+ IFX_SystemHandler* m_pSystemHandler;
};
-class CPWL_TimerHandler
-{
-public:
- CPWL_TimerHandler();
- virtual ~CPWL_TimerHandler();
+class CPWL_TimerHandler {
+ public:
+ CPWL_TimerHandler();
+ virtual ~CPWL_TimerHandler();
- void BeginTimer(int32_t nElapse);
- void EndTimer();
- virtual void TimerProc();
- virtual IFX_SystemHandler* GetSystemHandler() const = 0;
+ void BeginTimer(int32_t nElapse);
+ void EndTimer();
+ virtual void TimerProc();
+ virtual IFX_SystemHandler* GetSystemHandler() const = 0;
-private:
- CPWL_Timer* m_pTimer;
+ private:
+ CPWL_Timer* m_pTimer;
};
-class CPWL_Wnd : public CPWL_TimerHandler
-{
- friend class CPWL_MsgControl;
-public:
- CPWL_Wnd();
- virtual ~CPWL_Wnd();
-
- void Create(const PWL_CREATEPARAM & cp);
- virtual CFX_ByteString GetClassName() const;
- void Destroy();
- void Move(const CPDF_Rect & rcNew,FX_BOOL bReset,FX_BOOL bRefresh);
- virtual void InvalidateRect(CPDF_Rect* pRect = NULL);
-
- void GetAppearanceStream(CFX_ByteString & sAppStream);
- void DrawAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device);
-
- virtual FX_BOOL OnKeyDown(FX_WORD nChar, FX_DWORD nFlag);
- virtual FX_BOOL OnKeyUp(FX_WORD nChar, FX_DWORD nFlag);
- virtual FX_BOOL OnChar(FX_WORD nChar, FX_DWORD nFlag);
- virtual FX_BOOL OnLButtonDblClk(const CPDF_Point & point, FX_DWORD nFlag);
- virtual FX_BOOL OnLButtonDown(const CPDF_Point & point, FX_DWORD nFlag);
- virtual FX_BOOL OnLButtonUp(const CPDF_Point & point, FX_DWORD nFlag);
- virtual FX_BOOL OnMButtonDblClk(const CPDF_Point & point, FX_DWORD nFlag);
- virtual FX_BOOL OnMButtonDown(const CPDF_Point & point, FX_DWORD nFlag);
- virtual FX_BOOL OnMButtonUp(const CPDF_Point & point, FX_DWORD nFlag);
- virtual FX_BOOL OnRButtonDown(const CPDF_Point & point, FX_DWORD nFlag);
- virtual FX_BOOL OnRButtonUp(const CPDF_Point & point, FX_DWORD nFlag);
- virtual FX_BOOL OnMouseMove(const CPDF_Point & point, FX_DWORD nFlag);
- virtual FX_BOOL OnMouseWheel(short zDelta, const CPDF_Point & point, FX_DWORD nFlag);
-
- virtual void SetFocus();
- virtual void KillFocus();
- void SetCapture();
- void ReleaseCapture();
-
- virtual void OnNotify(CPWL_Wnd* pWnd, FX_DWORD msg, intptr_t wParam = 0, intptr_t lParam = 0);
- virtual void SetTextColor(const CPWL_Color & color);
- virtual void SetTextStrokeColor(const CPWL_Color & color);
- virtual void SetVisible(FX_BOOL bVisible);
-
- virtual CPDF_Rect GetFocusRect() const;
- virtual CPWL_Color GetBackgroundColor() const;
- virtual CPWL_Color GetBorderColor() const;
- virtual CPWL_Color GetTextColor() const;
- virtual CPWL_Color GetTextStrokeColor() const;
- virtual FX_FLOAT GetFontSize() const;
- virtual int32_t GetInnerBorderWidth() const;
- virtual CPWL_Color GetBorderLeftTopColor(int32_t nBorderStyle) const;
- virtual CPWL_Color GetBorderRightBottomColor(int32_t nBorderStyle) const;
-
- virtual FX_BOOL IsModified() const {return FALSE;}
-
- virtual void SetFontSize(FX_FLOAT fFontSize);
-
- void SetBackgroundColor(const CPWL_Color & color);
- void SetBorderColor(const CPWL_Color & color);
- void SetBorderWidth(int32_t nBorderWidth);
- void SetClipRect(const CPDF_Rect & rect);
- void SetBorderStyle(int32_t eBorderStyle);
- void SetBorderDash(const CPWL_Dash & sDash);
-
- CPDF_Rect GetOriginWindowRect() const;
- virtual CPDF_Rect GetWindowRect() const;
- virtual CPDF_Rect GetClientRect() const;
- CPDF_Point GetCenterPoint() const;
- CPDF_Rect GetClientCenterSquare() const;
- CPDF_Rect GetWindowCenterSquare() const;
- int32_t GetBorderWidth() const;
- FX_BOOL IsVisible() const {return m_bVisible;}
- FX_BOOL HasFlag(FX_DWORD dwFlags) const;
- void AddFlag(FX_DWORD dwFlags);
- void RemoveFlag(FX_DWORD dwFlags);
- CPDF_Rect GetClipRect() const;
- CPWL_Wnd* GetParentWindow() const;
- int32_t GetBorderStyle() const;
- CPWL_Dash GetBorderDash() const;
- void* GetAttachedData() const;
-
- FX_BOOL WndHitTest(const CPDF_Point & point) const;
- FX_BOOL ClientHitTest(const CPDF_Point & point) const;
- FX_BOOL IsCaptureMouse() const;
-
- const CPWL_Wnd* GetFocused() const;
- FX_BOOL IsFocused() const;
- FX_BOOL IsReadOnly() const;
- CPWL_ScrollBar* GetVScrollBar() const;
-
- IFX_Edit_FontMap* GetFontMap() const;
- IPWL_Provider* GetProvider() const;
- virtual IFX_SystemHandler* GetSystemHandler() const;
- IPWL_FocusHandler* GetFocusHandler() const;
-
- int32_t GetTransparency();
- void SetTransparency(int32_t nTransparency);
-
- CPDF_Matrix GetChildToRoot() const;
- CPDF_Matrix GetChildMatrix() const;
- void SetChildMatrix(const CPDF_Matrix& mt);
- CPDF_Matrix GetWindowMatrix() const;
-
- virtual CPDF_Point ChildToParent(const CPDF_Point& point) const;
- virtual CPDF_Rect ChildToParent(const CPDF_Rect& rect) const;
- virtual CPDF_Point ParentToChild(const CPDF_Point& point) const;
- virtual CPDF_Rect ParentToChild(const CPDF_Rect& rect) const;
-
- //those methods only implemented by listctrl item
- virtual FX_FLOAT GetItemHeight(FX_FLOAT fLimitWidth) {return 0;}
- virtual FX_FLOAT GetItemLeftMargin() {return 0;}
- virtual FX_FLOAT GetItemRightMargin() {return 0;}
-
- void EnableWindow(FX_BOOL bEnable);
- FX_BOOL IsEnabled();
- virtual void SetCursor();
-
-protected:
- virtual void CreateChildWnd(const PWL_CREATEPARAM & cp);
- virtual void RePosChildWnd();
- void GetAppearanceStream(CFX_ByteTextBuf & sAppStream);
- virtual void GetThisAppearanceStream(CFX_ByteTextBuf & sAppStream);
- virtual void GetChildAppearanceStream(CFX_ByteTextBuf & sAppStream);
-
- virtual void DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device);
- virtual void DrawChildAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device);
-
- virtual void OnCreate(PWL_CREATEPARAM & cp);
- virtual void OnCreated();
- virtual void OnDestroy();
-
- virtual void OnSetFocus();
- virtual void OnKillFocus();
-
- virtual void OnEnabled();
- virtual void OnDisabled();
-
- void SetNotifyFlag(FX_BOOL bNotifying = TRUE){m_bNotifying = bNotifying;};
-
- FX_BOOL IsValid() const;
- PWL_CREATEPARAM GetCreationParam() const;
- FX_BOOL IsNotifying() const {return m_bNotifying;}
-
- void InvalidateRectMove(const CPDF_Rect & rcOld, const CPDF_Rect & rcNew);
-
- void PWLtoWnd(const CPDF_Point & point, int32_t& x, int32_t& y) const;
- FX_RECT PWLtoWnd(const CPDF_Rect & rect) const;
- FX_HWND GetAttachedHWnd() const;
-
- FX_BOOL IsWndCaptureMouse(const CPWL_Wnd * pWnd) const;
- FX_BOOL IsWndCaptureKeyboard(const CPWL_Wnd * pWnd) const;
- const CPWL_Wnd* GetRootWnd() const;
-
- FX_BOOL IsCTRLpressed(FX_DWORD nFlag) const;
- FX_BOOL IsSHIFTpressed(FX_DWORD nFlag) const;
- FX_BOOL IsALTpressed(FX_DWORD nFlag) const;
- FX_BOOL IsINSERTpressed(FX_DWORD nFlag) const;
-
-private:
- void AddChild(CPWL_Wnd * pWnd);
- void RemoveChild(CPWL_Wnd * pWnd);
-
- void CreateScrollBar(const PWL_CREATEPARAM & cp);
- void CreateVScrollBar(const PWL_CREATEPARAM & cp);
-
- void AjustStyle();
- void CreateMsgControl();
- void DestroyMsgControl();
-
- CPWL_MsgControl* GetMsgControl() const;
-
-protected:
- CFX_ArrayTemplate<CPWL_Wnd*> m_aChildren;
+class CPWL_Wnd : public CPWL_TimerHandler {
+ friend class CPWL_MsgControl;
+
+ public:
+ CPWL_Wnd();
+ virtual ~CPWL_Wnd();
+
+ void Create(const PWL_CREATEPARAM& cp);
+ virtual CFX_ByteString GetClassName() const;
+ void Destroy();
+ void Move(const CPDF_Rect& rcNew, FX_BOOL bReset, FX_BOOL bRefresh);
+ virtual void InvalidateRect(CPDF_Rect* pRect = NULL);
+
+ void GetAppearanceStream(CFX_ByteString& sAppStream);
+ void DrawAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device);
+
+ virtual FX_BOOL OnKeyDown(FX_WORD nChar, FX_DWORD nFlag);
+ virtual FX_BOOL OnKeyUp(FX_WORD nChar, FX_DWORD nFlag);
+ virtual FX_BOOL OnChar(FX_WORD nChar, FX_DWORD nFlag);
+ virtual FX_BOOL OnLButtonDblClk(const CPDF_Point& point, FX_DWORD nFlag);
+ virtual FX_BOOL OnLButtonDown(const CPDF_Point& point, FX_DWORD nFlag);
+ virtual FX_BOOL OnLButtonUp(const CPDF_Point& point, FX_DWORD nFlag);
+ virtual FX_BOOL OnMButtonDblClk(const CPDF_Point& point, FX_DWORD nFlag);
+ virtual FX_BOOL OnMButtonDown(const CPDF_Point& point, FX_DWORD nFlag);
+ virtual FX_BOOL OnMButtonUp(const CPDF_Point& point, FX_DWORD nFlag);
+ virtual FX_BOOL OnRButtonDown(const CPDF_Point& point, FX_DWORD nFlag);
+ virtual FX_BOOL OnRButtonUp(const CPDF_Point& point, FX_DWORD nFlag);
+ virtual FX_BOOL OnMouseMove(const CPDF_Point& point, FX_DWORD nFlag);
+ virtual FX_BOOL OnMouseWheel(short zDelta,
+ const CPDF_Point& point,
+ FX_DWORD nFlag);
+
+ virtual void SetFocus();
+ virtual void KillFocus();
+ void SetCapture();
+ void ReleaseCapture();
+
+ virtual void OnNotify(CPWL_Wnd* pWnd,
+ FX_DWORD msg,
+ intptr_t wParam = 0,
+ intptr_t lParam = 0);
+ virtual void SetTextColor(const CPWL_Color& color);
+ virtual void SetTextStrokeColor(const CPWL_Color& color);
+ virtual void SetVisible(FX_BOOL bVisible);
+
+ virtual CPDF_Rect GetFocusRect() const;
+ virtual CPWL_Color GetBackgroundColor() const;
+ virtual CPWL_Color GetBorderColor() const;
+ virtual CPWL_Color GetTextColor() const;
+ virtual CPWL_Color GetTextStrokeColor() const;
+ virtual FX_FLOAT GetFontSize() const;
+ virtual int32_t GetInnerBorderWidth() const;
+ virtual CPWL_Color GetBorderLeftTopColor(int32_t nBorderStyle) const;
+ virtual CPWL_Color GetBorderRightBottomColor(int32_t nBorderStyle) const;
+
+ virtual FX_BOOL IsModified() const { return FALSE; }
+
+ virtual void SetFontSize(FX_FLOAT fFontSize);
+
+ void SetBackgroundColor(const CPWL_Color& color);
+ void SetBorderColor(const CPWL_Color& color);
+ void SetBorderWidth(int32_t nBorderWidth);
+ void SetClipRect(const CPDF_Rect& rect);
+ void SetBorderStyle(int32_t eBorderStyle);
+ void SetBorderDash(const CPWL_Dash& sDash);
+
+ CPDF_Rect GetOriginWindowRect() const;
+ virtual CPDF_Rect GetWindowRect() const;
+ virtual CPDF_Rect GetClientRect() const;
+ CPDF_Point GetCenterPoint() const;
+ CPDF_Rect GetClientCenterSquare() const;
+ CPDF_Rect GetWindowCenterSquare() const;
+ int32_t GetBorderWidth() const;
+ FX_BOOL IsVisible() const { return m_bVisible; }
+ FX_BOOL HasFlag(FX_DWORD dwFlags) const;
+ void AddFlag(FX_DWORD dwFlags);
+ void RemoveFlag(FX_DWORD dwFlags);
+ CPDF_Rect GetClipRect() const;
+ CPWL_Wnd* GetParentWindow() const;
+ int32_t GetBorderStyle() const;
+ CPWL_Dash GetBorderDash() const;
+ void* GetAttachedData() const;
+
+ FX_BOOL WndHitTest(const CPDF_Point& point) const;
+ FX_BOOL ClientHitTest(const CPDF_Point& point) const;
+ FX_BOOL IsCaptureMouse() const;
+
+ const CPWL_Wnd* GetFocused() const;
+ FX_BOOL IsFocused() const;
+ FX_BOOL IsReadOnly() const;
+ CPWL_ScrollBar* GetVScrollBar() const;
+
+ IFX_Edit_FontMap* GetFontMap() const;
+ IPWL_Provider* GetProvider() const;
+ virtual IFX_SystemHandler* GetSystemHandler() const;
+ IPWL_FocusHandler* GetFocusHandler() const;
+
+ int32_t GetTransparency();
+ void SetTransparency(int32_t nTransparency);
+
+ CPDF_Matrix GetChildToRoot() const;
+ CPDF_Matrix GetChildMatrix() const;
+ void SetChildMatrix(const CPDF_Matrix& mt);
+ CPDF_Matrix GetWindowMatrix() const;
+
+ virtual CPDF_Point ChildToParent(const CPDF_Point& point) const;
+ virtual CPDF_Rect ChildToParent(const CPDF_Rect& rect) const;
+ virtual CPDF_Point ParentToChild(const CPDF_Point& point) const;
+ virtual CPDF_Rect ParentToChild(const CPDF_Rect& rect) const;
+
+ // those methods only implemented by listctrl item
+ virtual FX_FLOAT GetItemHeight(FX_FLOAT fLimitWidth) { return 0; }
+ virtual FX_FLOAT GetItemLeftMargin() { return 0; }
+ virtual FX_FLOAT GetItemRightMargin() { return 0; }
+
+ void EnableWindow(FX_BOOL bEnable);
+ FX_BOOL IsEnabled();
+ virtual void SetCursor();
+
+ protected:
+ virtual void CreateChildWnd(const PWL_CREATEPARAM& cp);
+ virtual void RePosChildWnd();
+ void GetAppearanceStream(CFX_ByteTextBuf& sAppStream);
+ virtual void GetThisAppearanceStream(CFX_ByteTextBuf& sAppStream);
+ virtual void GetChildAppearanceStream(CFX_ByteTextBuf& sAppStream);
+
+ virtual void DrawThisAppearance(CFX_RenderDevice* pDevice,
+ CPDF_Matrix* pUser2Device);
+ virtual void DrawChildAppearance(CFX_RenderDevice* pDevice,
+ CPDF_Matrix* pUser2Device);
+
+ virtual void OnCreate(PWL_CREATEPARAM& cp);
+ virtual void OnCreated();
+ virtual void OnDestroy();
+
+ virtual void OnSetFocus();
+ virtual void OnKillFocus();
+
+ virtual void OnEnabled();
+ virtual void OnDisabled();
+
+ void SetNotifyFlag(FX_BOOL bNotifying = TRUE) { m_bNotifying = bNotifying; };
+
+ FX_BOOL IsValid() const;
+ PWL_CREATEPARAM GetCreationParam() const;
+ FX_BOOL IsNotifying() const { return m_bNotifying; }
+
+ void InvalidateRectMove(const CPDF_Rect& rcOld, const CPDF_Rect& rcNew);
+
+ void PWLtoWnd(const CPDF_Point& point, int32_t& x, int32_t& y) const;
+ FX_RECT PWLtoWnd(const CPDF_Rect& rect) const;
+ FX_HWND GetAttachedHWnd() const;
+
+ FX_BOOL IsWndCaptureMouse(const CPWL_Wnd* pWnd) const;
+ FX_BOOL IsWndCaptureKeyboard(const CPWL_Wnd* pWnd) const;
+ const CPWL_Wnd* GetRootWnd() const;
+
+ FX_BOOL IsCTRLpressed(FX_DWORD nFlag) const;
+ FX_BOOL IsSHIFTpressed(FX_DWORD nFlag) const;
+ FX_BOOL IsALTpressed(FX_DWORD nFlag) const;
+ FX_BOOL IsINSERTpressed(FX_DWORD nFlag) const;
+
+ private:
+ void AddChild(CPWL_Wnd* pWnd);
+ void RemoveChild(CPWL_Wnd* pWnd);
+
+ void CreateScrollBar(const PWL_CREATEPARAM& cp);
+ void CreateVScrollBar(const PWL_CREATEPARAM& cp);
+
+ void AjustStyle();
+ void CreateMsgControl();
+ void DestroyMsgControl();
+
+ CPWL_MsgControl* GetMsgControl() const;
+
+ protected:
+ CFX_ArrayTemplate<CPWL_Wnd*> m_aChildren;
-private:
- PWL_CREATEPARAM m_sPrivateParam;
+ private:
+ PWL_CREATEPARAM m_sPrivateParam;
- CPWL_ScrollBar* m_pVScrollBar;
+ CPWL_ScrollBar* m_pVScrollBar;
- CPDF_Rect m_rcWindow;
- CPDF_Rect m_rcClip;
+ CPDF_Rect m_rcWindow;
+ CPDF_Rect m_rcClip;
- FX_BOOL m_bCreated;
- FX_BOOL m_bVisible;
- FX_BOOL m_bNotifying;
- FX_BOOL m_bEnabled;
+ FX_BOOL m_bCreated;
+ FX_BOOL m_bVisible;
+ FX_BOOL m_bNotifying;
+ FX_BOOL m_bEnabled;
};
#endif // FPDFSDK_INCLUDE_PDFWINDOW_PWL_WND_H_
diff --git a/fpdfsdk/src/formfiller/FFL_CBA_Fontmap.cpp b/fpdfsdk/src/formfiller/FFL_CBA_Fontmap.cpp
index 699a7e4ffe..3a8853cb24 100644
--- a/fpdfsdk/src/formfiller/FFL_CBA_Fontmap.cpp
+++ b/fpdfsdk/src/formfiller/FFL_CBA_Fontmap.cpp
@@ -7,293 +7,280 @@
#include "../../include/formfiller/FormFiller.h"
#include "../../include/formfiller/FFL_CBA_Fontmap.h"
-CBA_FontMap::CBA_FontMap(CPDFSDK_Annot* pAnnot, IFX_SystemHandler* pSystemHandler) :
- CPWL_FontMap(pSystemHandler),
- m_pDocument(NULL),
- m_pAnnotDict(NULL),
- m_pDefaultFont(NULL),
- m_sAPType("N")
-{
- ASSERT(pAnnot != NULL);
-
- CPDF_Page* pPage = pAnnot->GetPDFPage();
-
- m_pDocument = pPage->m_pDocument;
- m_pAnnotDict = pAnnot->GetPDFAnnot()->GetAnnotDict();
+CBA_FontMap::CBA_FontMap(CPDFSDK_Annot* pAnnot,
+ IFX_SystemHandler* pSystemHandler)
+ : CPWL_FontMap(pSystemHandler),
+ m_pDocument(NULL),
+ m_pAnnotDict(NULL),
+ m_pDefaultFont(NULL),
+ m_sAPType("N") {
+ ASSERT(pAnnot != NULL);
+
+ CPDF_Page* pPage = pAnnot->GetPDFPage();
+
+ m_pDocument = pPage->m_pDocument;
+ m_pAnnotDict = pAnnot->GetPDFAnnot()->GetAnnotDict();
}
-CBA_FontMap::CBA_FontMap(CPDF_Document* pDocument, CPDF_Dictionary* pAnnotDict,
- IFX_SystemHandler* pSystemHandler) :
- CPWL_FontMap(pSystemHandler),
- m_pDocument(pDocument),
- m_pAnnotDict(pAnnotDict),
- m_pDefaultFont(NULL),
- m_sAPType("N")
-{
+CBA_FontMap::CBA_FontMap(CPDF_Document* pDocument,
+ CPDF_Dictionary* pAnnotDict,
+ IFX_SystemHandler* pSystemHandler)
+ : CPWL_FontMap(pSystemHandler),
+ m_pDocument(pDocument),
+ m_pAnnotDict(pAnnotDict),
+ m_pDefaultFont(NULL),
+ m_sAPType("N") {}
+
+CBA_FontMap::~CBA_FontMap() {}
+
+void CBA_FontMap::Reset() {
+ Empty();
+ m_pDefaultFont = NULL;
+ m_sDefaultFontName = "";
}
-CBA_FontMap::~CBA_FontMap()
-{
+void CBA_FontMap::Initial(const FX_CHAR* fontname) {
+ int32_t nCharset = DEFAULT_CHARSET;
+
+ if (!m_pDefaultFont) {
+ m_pDefaultFont = GetAnnotDefaultFont(m_sDefaultFontName);
+ if (m_pDefaultFont) {
+ if (const CFX_SubstFont* pSubstFont = m_pDefaultFont->GetSubstFont())
+ nCharset = pSubstFont->m_Charset;
+ else {
+ if (m_sDefaultFontName == "Wingdings" ||
+ m_sDefaultFontName == "Wingdings2" ||
+ m_sDefaultFontName == "Wingdings3" ||
+ m_sDefaultFontName == "Webdings")
+ nCharset = SYMBOL_CHARSET;
+ else
+ nCharset = ANSI_CHARSET;
+ }
+ AddFontData(m_pDefaultFont, m_sDefaultFontName, nCharset);
+ AddFontToAnnotDict(m_pDefaultFont, m_sDefaultFontName);
+ }
+ }
+
+ if (nCharset != ANSI_CHARSET)
+ CPWL_FontMap::Initial(fontname);
}
-void CBA_FontMap::Reset()
-{
- Empty();
- m_pDefaultFont = NULL;
- m_sDefaultFontName = "";
-}
-
-void CBA_FontMap::Initial(const FX_CHAR* fontname)
-{
- int32_t nCharset = DEFAULT_CHARSET;
-
- if (!m_pDefaultFont)
- {
- m_pDefaultFont = GetAnnotDefaultFont(m_sDefaultFontName);
- if (m_pDefaultFont)
- {
- if (const CFX_SubstFont* pSubstFont = m_pDefaultFont->GetSubstFont())
- nCharset = pSubstFont->m_Charset;
- else
- {
- if (m_sDefaultFontName == "Wingdings" || m_sDefaultFontName == "Wingdings2" ||
- m_sDefaultFontName == "Wingdings3" || m_sDefaultFontName == "Webdings")
- nCharset = SYMBOL_CHARSET;
- else
- nCharset = ANSI_CHARSET;
- }
- AddFontData(m_pDefaultFont, m_sDefaultFontName, nCharset);
- AddFontToAnnotDict(m_pDefaultFont, m_sDefaultFontName);
- }
- }
-
- if (nCharset != ANSI_CHARSET)
- CPWL_FontMap::Initial(fontname);
-}
+void CBA_FontMap::SetDefaultFont(CPDF_Font* pFont,
+ const CFX_ByteString& sFontName) {
+ ASSERT(pFont != NULL);
-void CBA_FontMap::SetDefaultFont(CPDF_Font * pFont, const CFX_ByteString & sFontName)
-{
- ASSERT(pFont != NULL);
+ if (m_pDefaultFont)
+ return;
- if (m_pDefaultFont) return;
+ m_pDefaultFont = pFont;
+ m_sDefaultFontName = sFontName;
- m_pDefaultFont = pFont;
- m_sDefaultFontName = sFontName;
+ // if (m_sDefaultFontName.IsEmpty())
+ // m_sDefaultFontName = pFont->GetFontTypeName();
-// if (m_sDefaultFontName.IsEmpty())
-// m_sDefaultFontName = pFont->GetFontTypeName();
-
- int32_t nCharset = DEFAULT_CHARSET;
- if (const CFX_SubstFont* pSubstFont = m_pDefaultFont->GetSubstFont())
- nCharset = pSubstFont->m_Charset;
- AddFontData(m_pDefaultFont, m_sDefaultFontName, nCharset);
+ int32_t nCharset = DEFAULT_CHARSET;
+ if (const CFX_SubstFont* pSubstFont = m_pDefaultFont->GetSubstFont())
+ nCharset = pSubstFont->m_Charset;
+ AddFontData(m_pDefaultFont, m_sDefaultFontName, nCharset);
}
-CPDF_Font* CBA_FontMap::FindFontSameCharset(CFX_ByteString& sFontAlias, int32_t nCharset)
-{
- ASSERT(m_pAnnotDict != NULL);
+CPDF_Font* CBA_FontMap::FindFontSameCharset(CFX_ByteString& sFontAlias,
+ int32_t nCharset) {
+ ASSERT(m_pAnnotDict != NULL);
- if (m_pAnnotDict->GetString("Subtype") == "Widget")
- {
- CPDF_Document* pDocument = GetDocument();
- ASSERT(pDocument != NULL);
+ if (m_pAnnotDict->GetString("Subtype") == "Widget") {
+ CPDF_Document* pDocument = GetDocument();
+ ASSERT(pDocument != NULL);
- CPDF_Dictionary * pRootDict = pDocument->GetRoot();
- if (!pRootDict) return NULL;
+ CPDF_Dictionary* pRootDict = pDocument->GetRoot();
+ if (!pRootDict)
+ return NULL;
- CPDF_Dictionary* pAcroFormDict = pRootDict->GetDict("AcroForm");
- if (!pAcroFormDict) return NULL;
+ CPDF_Dictionary* pAcroFormDict = pRootDict->GetDict("AcroForm");
+ if (!pAcroFormDict)
+ return NULL;
- CPDF_Dictionary * pDRDict = pAcroFormDict->GetDict("DR");
- if (!pDRDict) return NULL;
+ CPDF_Dictionary* pDRDict = pAcroFormDict->GetDict("DR");
+ if (!pDRDict)
+ return NULL;
- return FindResFontSameCharset(pDRDict, sFontAlias, nCharset);
- }
+ return FindResFontSameCharset(pDRDict, sFontAlias, nCharset);
+ }
- return NULL;
+ return NULL;
}
-CPDF_Document* CBA_FontMap::GetDocument()
-{
- return m_pDocument;
+CPDF_Document* CBA_FontMap::GetDocument() {
+ return m_pDocument;
}
-CPDF_Font* CBA_FontMap::FindResFontSameCharset(CPDF_Dictionary* pResDict, CFX_ByteString& sFontAlias,
- int32_t nCharset)
-{
- if (!pResDict) return NULL;
-
- CPDF_Document* pDocument = GetDocument();
- ASSERT(pDocument != NULL);
-
- CPDF_Dictionary* pFonts = pResDict->GetDict("Font");
- if (pFonts == NULL) return NULL;
-
- CPDF_Font* pFind = NULL;
-
- FX_POSITION pos = pFonts->GetStartPos();
- while (pos)
- {
- CPDF_Object* pObj = NULL;
- CFX_ByteString csKey;
- pObj = pFonts->GetNextElement(pos, csKey);
- if (pObj == NULL) continue;
-
- CPDF_Object* pDirect = pObj->GetDirect();
- if (pDirect == NULL || pDirect->GetType() != PDFOBJ_DICTIONARY) continue;
-
- CPDF_Dictionary* pElement = (CPDF_Dictionary*)pDirect;
- if (pElement->GetString("Type") != "Font") continue;
-
- CPDF_Font* pFont = pDocument->LoadFont(pElement);
- if (pFont == NULL) continue;
- const CFX_SubstFont* pSubst = pFont->GetSubstFont();
- if (pSubst == NULL) continue;
- if (pSubst->m_Charset == nCharset)
- {
- sFontAlias = csKey;
- pFind = pFont;
- }
- }
- return pFind;
+CPDF_Font* CBA_FontMap::FindResFontSameCharset(CPDF_Dictionary* pResDict,
+ CFX_ByteString& sFontAlias,
+ int32_t nCharset) {
+ if (!pResDict)
+ return NULL;
+
+ CPDF_Document* pDocument = GetDocument();
+ ASSERT(pDocument != NULL);
+
+ CPDF_Dictionary* pFonts = pResDict->GetDict("Font");
+ if (pFonts == NULL)
+ return NULL;
+
+ CPDF_Font* pFind = NULL;
+
+ FX_POSITION pos = pFonts->GetStartPos();
+ while (pos) {
+ CPDF_Object* pObj = NULL;
+ CFX_ByteString csKey;
+ pObj = pFonts->GetNextElement(pos, csKey);
+ if (pObj == NULL)
+ continue;
+
+ CPDF_Object* pDirect = pObj->GetDirect();
+ if (pDirect == NULL || pDirect->GetType() != PDFOBJ_DICTIONARY)
+ continue;
+
+ CPDF_Dictionary* pElement = (CPDF_Dictionary*)pDirect;
+ if (pElement->GetString("Type") != "Font")
+ continue;
+
+ CPDF_Font* pFont = pDocument->LoadFont(pElement);
+ if (pFont == NULL)
+ continue;
+ const CFX_SubstFont* pSubst = pFont->GetSubstFont();
+ if (pSubst == NULL)
+ continue;
+ if (pSubst->m_Charset == nCharset) {
+ sFontAlias = csKey;
+ pFind = pFont;
+ }
+ }
+ return pFind;
}
-void CBA_FontMap::AddedFont(CPDF_Font* pFont, const CFX_ByteString& sFontAlias)
-{
- AddFontToAnnotDict(pFont, sFontAlias);
+void CBA_FontMap::AddedFont(CPDF_Font* pFont,
+ const CFX_ByteString& sFontAlias) {
+ AddFontToAnnotDict(pFont, sFontAlias);
}
-void CBA_FontMap::AddFontToAnnotDict(CPDF_Font* pFont, const CFX_ByteString& sAlias)
-{
- if (!pFont) return;
-
- ASSERT(m_pAnnotDict != NULL);
- ASSERT(m_pDocument != NULL);
-
- CPDF_Dictionary* pAPDict = m_pAnnotDict->GetDict("AP");
-
- if (pAPDict == NULL)
- {
- pAPDict = new CPDF_Dictionary;
- m_pAnnotDict->SetAt("AP", pAPDict);
- }
-
- //to avoid checkbox and radiobutton
- CPDF_Object* pObject = pAPDict->GetElement(m_sAPType);
- if (pObject && pObject->GetType() == PDFOBJ_DICTIONARY)
- return;
-
- CPDF_Stream* pStream = pAPDict->GetStream(m_sAPType);
- if (pStream == NULL)
- {
- pStream = new CPDF_Stream(NULL, 0, NULL);
- int32_t objnum = m_pDocument->AddIndirectObject(pStream);
- pAPDict->SetAtReference(m_sAPType, m_pDocument, objnum);
- }
-
- CPDF_Dictionary * pStreamDict = pStream->GetDict();
-
- if (!pStreamDict)
- {
- pStreamDict = new CPDF_Dictionary;
- pStream->InitStream(NULL, 0, pStreamDict);
- }
-
- if (pStreamDict)
- {
- CPDF_Dictionary* pStreamResList = pStreamDict->GetDict("Resources");
- if (!pStreamResList)
- {
- pStreamResList = new CPDF_Dictionary();
- pStreamDict->SetAt("Resources", pStreamResList);
- }
-
- if (pStreamResList)
- {
- CPDF_Dictionary* pStreamResFontList = pStreamResList->GetDict("Font");
- if (!pStreamResFontList)
- {
- pStreamResFontList = new CPDF_Dictionary;
- int32_t objnum = m_pDocument->AddIndirectObject(pStreamResFontList);
- pStreamResList->SetAtReference("Font", m_pDocument, objnum);
- }
- if (!pStreamResFontList->KeyExist(sAlias))
- pStreamResFontList->SetAtReference(sAlias, m_pDocument, pFont->GetFontDict());
- }
- }
+void CBA_FontMap::AddFontToAnnotDict(CPDF_Font* pFont,
+ const CFX_ByteString& sAlias) {
+ if (!pFont)
+ return;
+
+ ASSERT(m_pAnnotDict != NULL);
+ ASSERT(m_pDocument != NULL);
+
+ CPDF_Dictionary* pAPDict = m_pAnnotDict->GetDict("AP");
+
+ if (pAPDict == NULL) {
+ pAPDict = new CPDF_Dictionary;
+ m_pAnnotDict->SetAt("AP", pAPDict);
+ }
+
+ // to avoid checkbox and radiobutton
+ CPDF_Object* pObject = pAPDict->GetElement(m_sAPType);
+ if (pObject && pObject->GetType() == PDFOBJ_DICTIONARY)
+ return;
+
+ CPDF_Stream* pStream = pAPDict->GetStream(m_sAPType);
+ if (pStream == NULL) {
+ pStream = new CPDF_Stream(NULL, 0, NULL);
+ int32_t objnum = m_pDocument->AddIndirectObject(pStream);
+ pAPDict->SetAtReference(m_sAPType, m_pDocument, objnum);
+ }
+
+ CPDF_Dictionary* pStreamDict = pStream->GetDict();
+
+ if (!pStreamDict) {
+ pStreamDict = new CPDF_Dictionary;
+ pStream->InitStream(NULL, 0, pStreamDict);
+ }
+
+ if (pStreamDict) {
+ CPDF_Dictionary* pStreamResList = pStreamDict->GetDict("Resources");
+ if (!pStreamResList) {
+ pStreamResList = new CPDF_Dictionary();
+ pStreamDict->SetAt("Resources", pStreamResList);
+ }
+
+ if (pStreamResList) {
+ CPDF_Dictionary* pStreamResFontList = pStreamResList->GetDict("Font");
+ if (!pStreamResFontList) {
+ pStreamResFontList = new CPDF_Dictionary;
+ int32_t objnum = m_pDocument->AddIndirectObject(pStreamResFontList);
+ pStreamResList->SetAtReference("Font", m_pDocument, objnum);
+ }
+ if (!pStreamResFontList->KeyExist(sAlias))
+ pStreamResFontList->SetAtReference(sAlias, m_pDocument,
+ pFont->GetFontDict());
+ }
+ }
}
-CPDF_Font* CBA_FontMap::GetAnnotDefaultFont(CFX_ByteString &sAlias)
-{
- ASSERT(m_pAnnotDict != NULL);
- ASSERT(m_pDocument != NULL);
-
- CPDF_Dictionary* pAcroFormDict = NULL;
-
- FX_BOOL bWidget = (m_pAnnotDict->GetString("Subtype") == "Widget");
-
- if (bWidget)
- {
- if (CPDF_Dictionary * pRootDict = m_pDocument->GetRoot())
- pAcroFormDict = pRootDict->GetDict("AcroForm");
- }
-
- CFX_ByteString sDA;
- CPDF_Object* pObj;
- if ((pObj = FPDF_GetFieldAttr(m_pAnnotDict, "DA")))
- sDA = pObj->GetString();
-
- if (bWidget)
- {
- if (sDA.IsEmpty())
- {
- pObj = FPDF_GetFieldAttr(pAcroFormDict, "DA");
- sDA = pObj ? pObj->GetString() : CFX_ByteString();
- }
- }
-
- CPDF_Dictionary * pFontDict = NULL;
-
- if (!sDA.IsEmpty())
- {
- CPDF_SimpleParser syntax(sDA);
- syntax.FindTagParam("Tf", 2);
- CFX_ByteString sFontName = syntax.GetWord();
- sAlias = PDF_NameDecode(sFontName).Mid(1);
-
- if (CPDF_Dictionary * pDRDict = m_pAnnotDict->GetDict("DR"))
- if (CPDF_Dictionary* pDRFontDict = pDRDict->GetDict("Font"))
- pFontDict = pDRFontDict->GetDict(sAlias);
-
- if (!pFontDict)
- if (CPDF_Dictionary* pAPDict = m_pAnnotDict->GetDict("AP"))
- if (CPDF_Dictionary* pNormalDict = pAPDict->GetDict("N"))
- if (CPDF_Dictionary* pNormalResDict = pNormalDict->GetDict("Resources"))
- if (CPDF_Dictionary* pResFontDict = pNormalResDict->GetDict("Font"))
- pFontDict = pResFontDict->GetDict(sAlias);
-
- if (bWidget)
- {
- if (!pFontDict)
- {
- if (pAcroFormDict)
- {
- if (CPDF_Dictionary * pDRDict = pAcroFormDict->GetDict("DR"))
- if (CPDF_Dictionary* pDRFontDict = pDRDict->GetDict("Font"))
- pFontDict = pDRFontDict->GetDict(sAlias);
- }
- }
- }
- }
-
- return pFontDict ? m_pDocument->LoadFont(pFontDict) : nullptr;
+CPDF_Font* CBA_FontMap::GetAnnotDefaultFont(CFX_ByteString& sAlias) {
+ ASSERT(m_pAnnotDict != NULL);
+ ASSERT(m_pDocument != NULL);
+
+ CPDF_Dictionary* pAcroFormDict = NULL;
+
+ FX_BOOL bWidget = (m_pAnnotDict->GetString("Subtype") == "Widget");
+
+ if (bWidget) {
+ if (CPDF_Dictionary* pRootDict = m_pDocument->GetRoot())
+ pAcroFormDict = pRootDict->GetDict("AcroForm");
+ }
+
+ CFX_ByteString sDA;
+ CPDF_Object* pObj;
+ if ((pObj = FPDF_GetFieldAttr(m_pAnnotDict, "DA")))
+ sDA = pObj->GetString();
+
+ if (bWidget) {
+ if (sDA.IsEmpty()) {
+ pObj = FPDF_GetFieldAttr(pAcroFormDict, "DA");
+ sDA = pObj ? pObj->GetString() : CFX_ByteString();
+ }
+ }
+
+ CPDF_Dictionary* pFontDict = NULL;
+
+ if (!sDA.IsEmpty()) {
+ CPDF_SimpleParser syntax(sDA);
+ syntax.FindTagParam("Tf", 2);
+ CFX_ByteString sFontName = syntax.GetWord();
+ sAlias = PDF_NameDecode(sFontName).Mid(1);
+
+ if (CPDF_Dictionary* pDRDict = m_pAnnotDict->GetDict("DR"))
+ if (CPDF_Dictionary* pDRFontDict = pDRDict->GetDict("Font"))
+ pFontDict = pDRFontDict->GetDict(sAlias);
+
+ if (!pFontDict)
+ if (CPDF_Dictionary* pAPDict = m_pAnnotDict->GetDict("AP"))
+ if (CPDF_Dictionary* pNormalDict = pAPDict->GetDict("N"))
+ if (CPDF_Dictionary* pNormalResDict =
+ pNormalDict->GetDict("Resources"))
+ if (CPDF_Dictionary* pResFontDict = pNormalResDict->GetDict("Font"))
+ pFontDict = pResFontDict->GetDict(sAlias);
+
+ if (bWidget) {
+ if (!pFontDict) {
+ if (pAcroFormDict) {
+ if (CPDF_Dictionary* pDRDict = pAcroFormDict->GetDict("DR"))
+ if (CPDF_Dictionary* pDRFontDict = pDRDict->GetDict("Font"))
+ pFontDict = pDRFontDict->GetDict(sAlias);
+ }
+ }
+ }
+ }
+
+ return pFontDict ? m_pDocument->LoadFont(pFontDict) : nullptr;
}
-void CBA_FontMap::SetAPType(const CFX_ByteString& sAPType)
-{
- m_sAPType = sAPType;
+void CBA_FontMap::SetAPType(const CFX_ByteString& sAPType) {
+ m_sAPType = sAPType;
- Reset();
- Initial();
+ Reset();
+ Initial();
}
-
diff --git a/fpdfsdk/src/formfiller/FFL_CheckBox.cpp b/fpdfsdk/src/formfiller/FFL_CheckBox.cpp
index 55d2d45bc2..42c6251d68 100644
--- a/fpdfsdk/src/formfiller/FFL_CheckBox.cpp
+++ b/fpdfsdk/src/formfiller/FFL_CheckBox.cpp
@@ -8,137 +8,122 @@
#include "../../include/formfiller/FFL_FormFiller.h"
#include "../../include/formfiller/FFL_CheckBox.h"
+/* ------------------------------- CFFL_CheckBox -------------------------------
+ */
-/* ------------------------------- CFFL_CheckBox ------------------------------- */
+CFFL_CheckBox::CFFL_CheckBox(CPDFDoc_Environment* pApp, CPDFSDK_Widget* pWidget)
+ : CFFL_Button(pApp, pWidget) {}
-CFFL_CheckBox::CFFL_CheckBox(CPDFDoc_Environment* pApp, CPDFSDK_Widget* pWidget) :
- CFFL_Button(pApp, pWidget)
-{
-}
-
-CFFL_CheckBox::~CFFL_CheckBox()
-{
-}
+CFFL_CheckBox::~CFFL_CheckBox() {}
-CPWL_Wnd* CFFL_CheckBox::NewPDFWindow(const PWL_CREATEPARAM& cp, CPDFSDK_PageView* pPageView)
-{
- CPWL_CheckBox* pWnd = new CPWL_CheckBox();
- pWnd->Create(cp);
+CPWL_Wnd* CFFL_CheckBox::NewPDFWindow(const PWL_CREATEPARAM& cp,
+ CPDFSDK_PageView* pPageView) {
+ CPWL_CheckBox* pWnd = new CPWL_CheckBox();
+ pWnd->Create(cp);
- ASSERT(m_pWidget != NULL);
- pWnd->SetCheck(m_pWidget->IsChecked());
+ ASSERT(m_pWidget != NULL);
+ pWnd->SetCheck(m_pWidget->IsChecked());
- return pWnd;
+ return pWnd;
}
-FX_BOOL CFFL_CheckBox::OnKeyDown(CPDFSDK_Annot* pAnnot, FX_UINT nKeyCode, FX_UINT nFlags)
-{
- switch (nKeyCode)
- {
- case FWL_VKEY_Return:
- case FWL_VKEY_Space:
- return TRUE;
- default:
- return CFFL_FormFiller::OnKeyDown(pAnnot, nKeyCode, nFlags);
- }
+FX_BOOL CFFL_CheckBox::OnKeyDown(CPDFSDK_Annot* pAnnot,
+ FX_UINT nKeyCode,
+ FX_UINT nFlags) {
+ switch (nKeyCode) {
+ case FWL_VKEY_Return:
+ case FWL_VKEY_Space:
+ return TRUE;
+ default:
+ return CFFL_FormFiller::OnKeyDown(pAnnot, nKeyCode, nFlags);
+ }
}
-FX_BOOL CFFL_CheckBox::OnChar(CPDFSDK_Annot* pAnnot, FX_UINT nChar, FX_UINT nFlags)
-{
- switch (nChar)
- {
- case FWL_VKEY_Return:
- case FWL_VKEY_Space:
- {
- CFFL_IFormFiller* pIFormFiller = m_pApp->GetIFormFiller();
- ASSERT(pIFormFiller != NULL);
-
- CPDFSDK_PageView* pPageView = pAnnot->GetPageView();
- ASSERT(pPageView != NULL);
-
- FX_BOOL bReset = FALSE;
- FX_BOOL bExit = FALSE;
-
- pIFormFiller->OnButtonUp(m_pWidget, pPageView, bReset, bExit,nFlags);
-
- if (bReset) return TRUE;
- if (bExit) return TRUE;
-
- CFFL_FormFiller::OnChar(pAnnot, nChar, nFlags);
-
- if (CPWL_CheckBox * pWnd = (CPWL_CheckBox*)GetPDFWindow(pPageView, TRUE))
- pWnd->SetCheck(!pWnd->IsChecked());
-
- CommitData(pPageView,nFlags);
- return TRUE;
- }
- default:
- return CFFL_FormFiller::OnChar(pAnnot, nChar, nFlags);
- }
+FX_BOOL CFFL_CheckBox::OnChar(CPDFSDK_Annot* pAnnot,
+ FX_UINT nChar,
+ FX_UINT nFlags) {
+ switch (nChar) {
+ case FWL_VKEY_Return:
+ case FWL_VKEY_Space: {
+ CFFL_IFormFiller* pIFormFiller = m_pApp->GetIFormFiller();
+ ASSERT(pIFormFiller != NULL);
+
+ CPDFSDK_PageView* pPageView = pAnnot->GetPageView();
+ ASSERT(pPageView != NULL);
+
+ FX_BOOL bReset = FALSE;
+ FX_BOOL bExit = FALSE;
+
+ pIFormFiller->OnButtonUp(m_pWidget, pPageView, bReset, bExit, nFlags);
+
+ if (bReset)
+ return TRUE;
+ if (bExit)
+ return TRUE;
+
+ CFFL_FormFiller::OnChar(pAnnot, nChar, nFlags);
+
+ if (CPWL_CheckBox* pWnd = (CPWL_CheckBox*)GetPDFWindow(pPageView, TRUE))
+ pWnd->SetCheck(!pWnd->IsChecked());
+
+ CommitData(pPageView, nFlags);
+ return TRUE;
+ }
+ default:
+ return CFFL_FormFiller::OnChar(pAnnot, nChar, nFlags);
+ }
}
-FX_BOOL CFFL_CheckBox::OnLButtonUp(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point)
-{
- CFFL_Button::OnLButtonUp(pPageView, pAnnot, nFlags, point);
+FX_BOOL CFFL_CheckBox::OnLButtonUp(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_UINT nFlags,
+ const CPDF_Point& point) {
+ CFFL_Button::OnLButtonUp(pPageView, pAnnot, nFlags, point);
- if (IsValid())
- {
- if (CPWL_CheckBox * pWnd = (CPWL_CheckBox*)GetPDFWindow(pPageView, TRUE))
- {
- CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot;
- pWnd->SetCheck(!pWidget->IsChecked());
- // pWnd->SetCheck(!pWnd->IsChecked());
- }
+ if (IsValid()) {
+ if (CPWL_CheckBox* pWnd = (CPWL_CheckBox*)GetPDFWindow(pPageView, TRUE)) {
+ CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot;
+ pWnd->SetCheck(!pWidget->IsChecked());
+ // pWnd->SetCheck(!pWnd->IsChecked());
+ }
- if (!CommitData(pPageView, nFlags)) return FALSE;
- }
+ if (!CommitData(pPageView, nFlags))
+ return FALSE;
+ }
- return TRUE;
+ return TRUE;
}
-FX_BOOL CFFL_CheckBox::IsDataChanged(CPDFSDK_PageView* pPageView)
-{
+FX_BOOL CFFL_CheckBox::IsDataChanged(CPDFSDK_PageView* pPageView) {
+ ASSERT(m_pWidget != NULL);
- ASSERT(m_pWidget != NULL);
+ if (CPWL_CheckBox* pWnd = (CPWL_CheckBox*)GetPDFWindow(pPageView, FALSE)) {
+ return pWnd->IsChecked() != m_pWidget->IsChecked();
+ }
- if (CPWL_CheckBox* pWnd = (CPWL_CheckBox*)GetPDFWindow(pPageView, FALSE))
- {
- return pWnd->IsChecked() != m_pWidget->IsChecked();
- }
-
- return FALSE;
+ return FALSE;
}
-void CFFL_CheckBox::SaveData(CPDFSDK_PageView* pPageView)
-{
-
- ASSERT(m_pWidget != NULL);
-
- if (CPWL_CheckBox* pWnd = (CPWL_CheckBox*)GetPDFWindow(pPageView, FALSE))
- {
-
- FX_BOOL bNewChecked = pWnd->IsChecked();
-
-
- if (bNewChecked)
- {
- CPDF_FormField* pField = m_pWidget->GetFormField();
- ASSERT(pField != NULL);
-
- for (int32_t i=0,sz=pField->CountControls(); i<sz; i++)
- {
- if (CPDF_FormControl* pCtrl = pField->GetControl(i))
- {
- if (pCtrl->IsChecked())
- {
- break;
- }
- }
- }
- }
-
- m_pWidget->SetCheck(bNewChecked, FALSE);
- m_pWidget->UpdateField();
- SetChangeMark();
- }
-
+void CFFL_CheckBox::SaveData(CPDFSDK_PageView* pPageView) {
+ ASSERT(m_pWidget != NULL);
+
+ if (CPWL_CheckBox* pWnd = (CPWL_CheckBox*)GetPDFWindow(pPageView, FALSE)) {
+ FX_BOOL bNewChecked = pWnd->IsChecked();
+
+ if (bNewChecked) {
+ CPDF_FormField* pField = m_pWidget->GetFormField();
+ ASSERT(pField != NULL);
+
+ for (int32_t i = 0, sz = pField->CountControls(); i < sz; i++) {
+ if (CPDF_FormControl* pCtrl = pField->GetControl(i)) {
+ if (pCtrl->IsChecked()) {
+ break;
+ }
+ }
+ }
+ }
+
+ m_pWidget->SetCheck(bNewChecked, FALSE);
+ m_pWidget->UpdateField();
+ SetChangeMark();
+ }
}
diff --git a/fpdfsdk/src/formfiller/FFL_ComboBox.cpp b/fpdfsdk/src/formfiller/FFL_ComboBox.cpp
index 841b45ecba..b49726d5ab 100644
--- a/fpdfsdk/src/formfiller/FFL_ComboBox.cpp
+++ b/fpdfsdk/src/formfiller/FFL_ComboBox.cpp
@@ -10,381 +10,335 @@
#include "../../include/formfiller/FFL_CBA_Fontmap.h"
#include "../../include/formfiller/FFL_ComboBox.h"
-
-/* ------------------------------- CFFL_ComboBox ------------------------------- */
-
-CFFL_ComboBox::CFFL_ComboBox(CPDFDoc_Environment* pApp, CPDFSDK_Annot* pAnnot) :
- CFFL_FormFiller(pApp, pAnnot), m_pFontMap( NULL )
-{
- m_State.nIndex = 0;
- m_State.nStart = 0;
- m_State.nEnd = 0;
+/* ------------------------------- CFFL_ComboBox -------------------------------
+ */
+
+CFFL_ComboBox::CFFL_ComboBox(CPDFDoc_Environment* pApp, CPDFSDK_Annot* pAnnot)
+ : CFFL_FormFiller(pApp, pAnnot), m_pFontMap(NULL) {
+ m_State.nIndex = 0;
+ m_State.nStart = 0;
+ m_State.nEnd = 0;
}
-CFFL_ComboBox::~CFFL_ComboBox()
-{
- delete m_pFontMap;
+CFFL_ComboBox::~CFFL_ComboBox() {
+ delete m_pFontMap;
}
-PWL_CREATEPARAM CFFL_ComboBox::GetCreateParam()
-{
- PWL_CREATEPARAM cp = CFFL_FormFiller::GetCreateParam();
+PWL_CREATEPARAM CFFL_ComboBox::GetCreateParam() {
+ PWL_CREATEPARAM cp = CFFL_FormFiller::GetCreateParam();
- ASSERT(m_pWidget != NULL);
+ ASSERT(m_pWidget != NULL);
- int nFlags = m_pWidget->GetFieldFlags();
+ int nFlags = m_pWidget->GetFieldFlags();
- if (nFlags & FIELDFLAG_EDIT)
- {
- cp.dwFlags |= PCBS_ALLOWCUSTOMTEXT;
- }
+ if (nFlags & FIELDFLAG_EDIT) {
+ cp.dwFlags |= PCBS_ALLOWCUSTOMTEXT;
+ }
- if (!m_pFontMap)
- {
- m_pFontMap = new CBA_FontMap(m_pWidget, GetSystemHandler());
- m_pFontMap->Initial();
- }
+ if (!m_pFontMap) {
+ m_pFontMap = new CBA_FontMap(m_pWidget, GetSystemHandler());
+ m_pFontMap->Initial();
+ }
- cp.pFontMap = m_pFontMap;
- cp.pFocusHandler = this;
+ cp.pFontMap = m_pFontMap;
+ cp.pFocusHandler = this;
- return cp;
+ return cp;
}
-CPWL_Wnd* CFFL_ComboBox::NewPDFWindow(const PWL_CREATEPARAM& cp, CPDFSDK_PageView* pPageView)
-{
- CPWL_ComboBox * pWnd = new CPWL_ComboBox();
- pWnd->AttachFFLData(this);
- pWnd->Create(cp);
-
- CFFL_IFormFiller* pFormFiller = m_pApp->GetIFormFiller();
- pWnd->SetFillerNotify(pFormFiller);
-
- int32_t nCurSel = m_pWidget->GetSelectedIndex(0);
- CFX_WideString swText;
- if (nCurSel < 0)
- swText = m_pWidget->GetValue();
- else
- swText = m_pWidget->GetOptionLabel(nCurSel);
-
- for (int32_t i=0,sz=m_pWidget->CountOptions(); i<sz; i++)
- {
- pWnd->AddString(m_pWidget->GetOptionLabel(i).c_str());
- }
-
- pWnd->SetSelect(nCurSel);
- pWnd->SetText(swText.c_str());
- return pWnd;
+CPWL_Wnd* CFFL_ComboBox::NewPDFWindow(const PWL_CREATEPARAM& cp,
+ CPDFSDK_PageView* pPageView) {
+ CPWL_ComboBox* pWnd = new CPWL_ComboBox();
+ pWnd->AttachFFLData(this);
+ pWnd->Create(cp);
+
+ CFFL_IFormFiller* pFormFiller = m_pApp->GetIFormFiller();
+ pWnd->SetFillerNotify(pFormFiller);
+
+ int32_t nCurSel = m_pWidget->GetSelectedIndex(0);
+ CFX_WideString swText;
+ if (nCurSel < 0)
+ swText = m_pWidget->GetValue();
+ else
+ swText = m_pWidget->GetOptionLabel(nCurSel);
+
+ for (int32_t i = 0, sz = m_pWidget->CountOptions(); i < sz; i++) {
+ pWnd->AddString(m_pWidget->GetOptionLabel(i).c_str());
+ }
+
+ pWnd->SetSelect(nCurSel);
+ pWnd->SetText(swText.c_str());
+ return pWnd;
}
-
-FX_BOOL CFFL_ComboBox::OnChar(CPDFSDK_Annot* pAnnot, FX_UINT nChar, FX_UINT nFlags)
-{
- return CFFL_FormFiller::OnChar(pAnnot, nChar, nFlags);
+FX_BOOL CFFL_ComboBox::OnChar(CPDFSDK_Annot* pAnnot,
+ FX_UINT nChar,
+ FX_UINT nFlags) {
+ return CFFL_FormFiller::OnChar(pAnnot, nChar, nFlags);
}
-FX_BOOL CFFL_ComboBox::IsDataChanged(CPDFSDK_PageView* pPageView)
-{
- CPWL_ComboBox* pWnd = (CPWL_ComboBox*)GetPDFWindow(pPageView, FALSE);
- if (!pWnd)
- return FALSE;
+FX_BOOL CFFL_ComboBox::IsDataChanged(CPDFSDK_PageView* pPageView) {
+ CPWL_ComboBox* pWnd = (CPWL_ComboBox*)GetPDFWindow(pPageView, FALSE);
+ if (!pWnd)
+ return FALSE;
- int32_t nCurSel = pWnd->GetSelect();
- if (!(m_pWidget->GetFieldFlags() & FIELDFLAG_EDIT))
- return nCurSel != m_pWidget->GetSelectedIndex(0);
+ int32_t nCurSel = pWnd->GetSelect();
+ if (!(m_pWidget->GetFieldFlags() & FIELDFLAG_EDIT))
+ return nCurSel != m_pWidget->GetSelectedIndex(0);
- if (nCurSel >= 0)
- return nCurSel != m_pWidget->GetSelectedIndex(0);
+ if (nCurSel >= 0)
+ return nCurSel != m_pWidget->GetSelectedIndex(0);
- return pWnd->GetText() != m_pWidget->GetValue();
+ return pWnd->GetText() != m_pWidget->GetValue();
}
-void CFFL_ComboBox::SaveData(CPDFSDK_PageView* pPageView)
-{
- ASSERT(m_pWidget != NULL);
-
- if (CPWL_ComboBox* pWnd = (CPWL_ComboBox*)GetPDFWindow(pPageView, FALSE))
- {
- CFX_WideString swText = pWnd->GetText();
- int32_t nCurSel = pWnd->GetSelect();
-
- //mantis:0004157
- FX_BOOL bSetValue = TRUE;
-
- if (m_pWidget->GetFieldFlags() & FIELDFLAG_EDIT)
- {
- if (nCurSel >= 0)
- {
- if (swText != m_pWidget->GetOptionLabel(nCurSel))
- bSetValue = TRUE;
- else
- bSetValue = FALSE;
- }
- else
- bSetValue = TRUE;
- }
- else
- bSetValue = FALSE;
+void CFFL_ComboBox::SaveData(CPDFSDK_PageView* pPageView) {
+ ASSERT(m_pWidget != NULL);
- CFX_WideString sOldValue;
+ if (CPWL_ComboBox* pWnd = (CPWL_ComboBox*)GetPDFWindow(pPageView, FALSE)) {
+ CFX_WideString swText = pWnd->GetText();
+ int32_t nCurSel = pWnd->GetSelect();
+ // mantis:0004157
+ FX_BOOL bSetValue = TRUE;
- if (bSetValue)
- {
- sOldValue = m_pWidget->GetValue();
- m_pWidget->SetValue(swText, FALSE);
- }
+ if (m_pWidget->GetFieldFlags() & FIELDFLAG_EDIT) {
+ if (nCurSel >= 0) {
+ if (swText != m_pWidget->GetOptionLabel(nCurSel))
+ bSetValue = TRUE;
else
- {
- m_pWidget->GetSelectedIndex(0);
- m_pWidget->SetOptionSelection(nCurSel, TRUE, FALSE);
- }
-
- m_pWidget->ResetFieldAppearance(TRUE);
- m_pWidget->UpdateField();
- SetChangeMark();
-
- m_pWidget->GetPDFPage();
+ bSetValue = FALSE;
+ } else
+ bSetValue = TRUE;
+ } else
+ bSetValue = FALSE;
+
+ CFX_WideString sOldValue;
+
+ if (bSetValue) {
+ sOldValue = m_pWidget->GetValue();
+ m_pWidget->SetValue(swText, FALSE);
+ } else {
+ m_pWidget->GetSelectedIndex(0);
+ m_pWidget->SetOptionSelection(nCurSel, TRUE, FALSE);
+ }
+ m_pWidget->ResetFieldAppearance(TRUE);
+ m_pWidget->UpdateField();
+ SetChangeMark();
- }
+ m_pWidget->GetPDFPage();
+ }
}
- void CFFL_ComboBox::GetActionData( CPDFSDK_PageView* pPageView, CPDF_AAction::AActionType type, PDFSDK_FieldAction& fa)
-{
- switch (type)
- {
+void CFFL_ComboBox::GetActionData(CPDFSDK_PageView* pPageView,
+ CPDF_AAction::AActionType type,
+ PDFSDK_FieldAction& fa) {
+ switch (type) {
case CPDF_AAction::KeyStroke:
- if (CPWL_ComboBox* pComboBox = (CPWL_ComboBox*)GetPDFWindow(pPageView, FALSE))
- {
- if (CPWL_Edit* pEdit = (CPWL_Edit*)*pComboBox)
- {
- fa.bFieldFull = pEdit->IsTextFull();
- int nSelStart = 0;
- int nSelEnd = 0;
- pEdit->GetSel(nSelStart, nSelEnd);
- fa.nSelEnd = nSelEnd;
- fa.nSelStart = nSelStart;
- fa.sValue = pEdit->GetText();
- fa.sChangeEx = GetSelectExportText();
-
- if (fa.bFieldFull)
- {
- fa.sChange = L"";
- fa.sChangeEx = L"";
- }
- }
+ if (CPWL_ComboBox* pComboBox =
+ (CPWL_ComboBox*)GetPDFWindow(pPageView, FALSE)) {
+ if (CPWL_Edit* pEdit = (CPWL_Edit*)*pComboBox) {
+ fa.bFieldFull = pEdit->IsTextFull();
+ int nSelStart = 0;
+ int nSelEnd = 0;
+ pEdit->GetSel(nSelStart, nSelEnd);
+ fa.nSelEnd = nSelEnd;
+ fa.nSelStart = nSelStart;
+ fa.sValue = pEdit->GetText();
+ fa.sChangeEx = GetSelectExportText();
+
+ if (fa.bFieldFull) {
+ fa.sChange = L"";
+ fa.sChangeEx = L"";
+ }
}
- break;
+ }
+ break;
case CPDF_AAction::Validate:
- if (CPWL_ComboBox* pComboBox = (CPWL_ComboBox*)GetPDFWindow(pPageView, FALSE))
- {
- if (CPWL_Edit* pEdit = (CPWL_Edit*)*pComboBox)
- {
- fa.sValue = pEdit->GetText();
- }
+ if (CPWL_ComboBox* pComboBox =
+ (CPWL_ComboBox*)GetPDFWindow(pPageView, FALSE)) {
+ if (CPWL_Edit* pEdit = (CPWL_Edit*)*pComboBox) {
+ fa.sValue = pEdit->GetText();
}
- break;
+ }
+ break;
case CPDF_AAction::LoseFocus:
case CPDF_AAction::GetFocus:
- ASSERT(m_pWidget != NULL);
- fa.sValue = m_pWidget->GetValue();
- break;
+ ASSERT(m_pWidget != NULL);
+ fa.sValue = m_pWidget->GetValue();
+ break;
default:
- break;
- }
+ break;
+ }
}
-
-
-void CFFL_ComboBox::SetActionData(CPDFSDK_PageView* pPageView, CPDF_AAction::AActionType type,
- const PDFSDK_FieldAction& fa)
-{
- switch (type)
- {
+void CFFL_ComboBox::SetActionData(CPDFSDK_PageView* pPageView,
+ CPDF_AAction::AActionType type,
+ const PDFSDK_FieldAction& fa) {
+ switch (type) {
case CPDF_AAction::KeyStroke:
- if (CPWL_ComboBox* pComboBox = (CPWL_ComboBox*)GetPDFWindow(pPageView, FALSE))
- {
- if (CPWL_Edit* pEdit = (CPWL_Edit*)*pComboBox)
- {
- pEdit->SetSel(fa.nSelStart, fa.nSelEnd);
- pEdit->ReplaceSel(fa.sChange.c_str());
- }
+ if (CPWL_ComboBox* pComboBox =
+ (CPWL_ComboBox*)GetPDFWindow(pPageView, FALSE)) {
+ if (CPWL_Edit* pEdit = (CPWL_Edit*)*pComboBox) {
+ pEdit->SetSel(fa.nSelStart, fa.nSelEnd);
+ pEdit->ReplaceSel(fa.sChange.c_str());
}
- break;
+ }
+ break;
default:
- break;
- }
+ break;
+ }
}
-FX_BOOL CFFL_ComboBox::IsActionDataChanged(CPDF_AAction::AActionType type, const PDFSDK_FieldAction& faOld,
- const PDFSDK_FieldAction& faNew)
-{
- switch (type)
- {
+FX_BOOL CFFL_ComboBox::IsActionDataChanged(CPDF_AAction::AActionType type,
+ const PDFSDK_FieldAction& faOld,
+ const PDFSDK_FieldAction& faNew) {
+ switch (type) {
case CPDF_AAction::KeyStroke:
- return (!faOld.bFieldFull && faOld.nSelEnd != faNew.nSelEnd) || faOld.nSelStart != faNew.nSelStart ||
- faOld.sChange != faNew.sChange;
+ return (!faOld.bFieldFull && faOld.nSelEnd != faNew.nSelEnd) ||
+ faOld.nSelStart != faNew.nSelStart ||
+ faOld.sChange != faNew.sChange;
default:
- break;
- }
+ break;
+ }
- return FALSE;
+ return FALSE;
}
-void CFFL_ComboBox::SaveState(CPDFSDK_PageView* pPageView)
-{
- ASSERT(pPageView != NULL);
+void CFFL_ComboBox::SaveState(CPDFSDK_PageView* pPageView) {
+ ASSERT(pPageView != NULL);
- if (CPWL_ComboBox* pComboBox = (CPWL_ComboBox*)GetPDFWindow(pPageView, FALSE))
- {
- m_State.nIndex = pComboBox->GetSelect();
+ if (CPWL_ComboBox* pComboBox =
+ (CPWL_ComboBox*)GetPDFWindow(pPageView, FALSE)) {
+ m_State.nIndex = pComboBox->GetSelect();
- if (CPWL_Edit* pEdit = (CPWL_Edit*)*pComboBox)
- {
- pEdit->GetSel(m_State.nStart, m_State.nEnd);
- m_State.sValue = pEdit->GetText();
- }
+ if (CPWL_Edit* pEdit = (CPWL_Edit*)*pComboBox) {
+ pEdit->GetSel(m_State.nStart, m_State.nEnd);
+ m_State.sValue = pEdit->GetText();
}
+ }
}
-void CFFL_ComboBox::RestoreState(CPDFSDK_PageView* pPageView)
-{
- ASSERT(pPageView != NULL);
-
- if (CPWL_ComboBox* pComboBox = (CPWL_ComboBox*)GetPDFWindow(pPageView, TRUE))
- {
- if (m_State.nIndex >= 0)
- pComboBox->SetSelect(m_State.nIndex);
- else
- {
- if (CPWL_Edit* pEdit = (CPWL_Edit*)*pComboBox)
- {
- pEdit->SetText(m_State.sValue.c_str());
- pEdit->SetSel(m_State.nStart, m_State.nEnd);
- }
- }
+void CFFL_ComboBox::RestoreState(CPDFSDK_PageView* pPageView) {
+ ASSERT(pPageView != NULL);
+
+ if (CPWL_ComboBox* pComboBox =
+ (CPWL_ComboBox*)GetPDFWindow(pPageView, TRUE)) {
+ if (m_State.nIndex >= 0)
+ pComboBox->SetSelect(m_State.nIndex);
+ else {
+ if (CPWL_Edit* pEdit = (CPWL_Edit*)*pComboBox) {
+ pEdit->SetText(m_State.sValue.c_str());
+ pEdit->SetSel(m_State.nStart, m_State.nEnd);
+ }
}
+ }
}
-CPWL_Wnd* CFFL_ComboBox::ResetPDFWindow(CPDFSDK_PageView* pPageView, FX_BOOL bRestoreValue)
-{
- if (bRestoreValue)
- SaveState(pPageView);
+CPWL_Wnd* CFFL_ComboBox::ResetPDFWindow(CPDFSDK_PageView* pPageView,
+ FX_BOOL bRestoreValue) {
+ if (bRestoreValue)
+ SaveState(pPageView);
- DestroyPDFWindow(pPageView);
+ DestroyPDFWindow(pPageView);
- CPWL_Wnd* pRet = NULL;
+ CPWL_Wnd* pRet = NULL;
- if (bRestoreValue)
- {
- RestoreState(pPageView);
- pRet = GetPDFWindow(pPageView, FALSE);
- }
- else
- pRet = GetPDFWindow(pPageView, TRUE);
+ if (bRestoreValue) {
+ RestoreState(pPageView);
+ pRet = GetPDFWindow(pPageView, FALSE);
+ } else
+ pRet = GetPDFWindow(pPageView, TRUE);
- m_pWidget->UpdateField();
+ m_pWidget->UpdateField();
- return pRet;
+ return pRet;
}
-void CFFL_ComboBox::OnKeyStroke(FX_BOOL bKeyDown, FX_UINT nFlag)
-{
- ASSERT(m_pWidget != NULL);
+void CFFL_ComboBox::OnKeyStroke(FX_BOOL bKeyDown, FX_UINT nFlag) {
+ ASSERT(m_pWidget != NULL);
- int nFlags = m_pWidget->GetFieldFlags();
+ int nFlags = m_pWidget->GetFieldFlags();
- if (nFlags & FIELDFLAG_COMMITONSELCHANGE)
- {
- if (m_bValid)
- {
- CPDFSDK_PageView* pPageView = GetCurPageView();
- ASSERT(pPageView != NULL);
+ if (nFlags & FIELDFLAG_COMMITONSELCHANGE) {
+ if (m_bValid) {
+ CPDFSDK_PageView* pPageView = GetCurPageView();
+ ASSERT(pPageView != NULL);
- if (CommitData(pPageView, nFlag))
- {
- DestroyPDFWindow(pPageView);
- m_bValid = FALSE;
- }
- }
+ if (CommitData(pPageView, nFlag)) {
+ DestroyPDFWindow(pPageView);
+ m_bValid = FALSE;
+ }
}
+ }
}
-void CFFL_ComboBox::OnSetFocus(CPWL_Wnd* pWnd)
-{
- ASSERT(m_pApp != NULL);
+void CFFL_ComboBox::OnSetFocus(CPWL_Wnd* pWnd) {
+ ASSERT(m_pApp != NULL);
- ASSERT(pWnd != NULL);
+ ASSERT(pWnd != NULL);
- if (pWnd->GetClassName() == PWL_CLASSNAME_EDIT)
- {
- CPWL_Edit* pEdit = (CPWL_Edit*)pWnd;
- pEdit->SetCharSet(134);
- pEdit->SetCodePage(936);
+ if (pWnd->GetClassName() == PWL_CLASSNAME_EDIT) {
+ CPWL_Edit* pEdit = (CPWL_Edit*)pWnd;
+ pEdit->SetCharSet(134);
+ pEdit->SetCodePage(936);
- pEdit->SetReadyToInput();
- CFX_WideString wsText = pEdit->GetText();
- int nCharacters = wsText.GetLength();
- CFX_ByteString bsUTFText = wsText.UTF16LE_Encode();
- unsigned short* pBuffer = (unsigned short*)bsUTFText.c_str();
- m_pApp->FFI_OnSetFieldInputFocus(m_pWidget->GetFormField(), pBuffer, nCharacters, TRUE);
+ pEdit->SetReadyToInput();
+ CFX_WideString wsText = pEdit->GetText();
+ int nCharacters = wsText.GetLength();
+ CFX_ByteString bsUTFText = wsText.UTF16LE_Encode();
+ unsigned short* pBuffer = (unsigned short*)bsUTFText.c_str();
+ m_pApp->FFI_OnSetFieldInputFocus(m_pWidget->GetFormField(), pBuffer,
+ nCharacters, TRUE);
- pEdit->SetEditNotify(this);
- }
+ pEdit->SetEditNotify(this);
+ }
}
-void CFFL_ComboBox::OnKillFocus(CPWL_Wnd* pWnd)
-{
- ASSERT(m_pApp != NULL);
+void CFFL_ComboBox::OnKillFocus(CPWL_Wnd* pWnd) {
+ ASSERT(m_pApp != NULL);
}
-FX_BOOL CFFL_ComboBox::CanCopy(CPDFSDK_Document* pDocument)
-{
- ASSERT(pDocument != NULL);
+FX_BOOL CFFL_ComboBox::CanCopy(CPDFSDK_Document* pDocument) {
+ ASSERT(pDocument != NULL);
- return FALSE;
+ return FALSE;
}
-FX_BOOL CFFL_ComboBox::CanCut(CPDFSDK_Document* pDocument)
-{
- ASSERT(pDocument != NULL);
+FX_BOOL CFFL_ComboBox::CanCut(CPDFSDK_Document* pDocument) {
+ ASSERT(pDocument != NULL);
- return FALSE;
+ return FALSE;
}
-FX_BOOL CFFL_ComboBox::CanPaste(CPDFSDK_Document* pDocument)
-{
- ASSERT(pDocument != NULL);
+FX_BOOL CFFL_ComboBox::CanPaste(CPDFSDK_Document* pDocument) {
+ ASSERT(pDocument != NULL);
- return FALSE;
+ return FALSE;
}
-void CFFL_ComboBox::OnAddUndo(CPWL_Edit* pEdit)
-{
- ASSERT(pEdit != NULL);
+void CFFL_ComboBox::OnAddUndo(CPWL_Edit* pEdit) {
+ ASSERT(pEdit != NULL);
}
-CFX_WideString CFFL_ComboBox::GetSelectExportText()
-{
- CFX_WideString swRet;
-
- int nExport = -1;
- CPDFSDK_PageView *pPageView = GetCurPageView();
- if (CPWL_ComboBox * pComboBox = (CPWL_ComboBox*)GetPDFWindow(pPageView, FALSE))
- {
- nExport = pComboBox->GetSelect();
- }
-
- if (nExport >= 0)
- {
- if (CPDF_FormField * pFormField = m_pWidget->GetFormField())
- {
- swRet = pFormField->GetOptionValue(nExport);
- if (swRet.IsEmpty())
- swRet = pFormField->GetOptionLabel(nExport);
- }
+CFX_WideString CFFL_ComboBox::GetSelectExportText() {
+ CFX_WideString swRet;
+
+ int nExport = -1;
+ CPDFSDK_PageView* pPageView = GetCurPageView();
+ if (CPWL_ComboBox* pComboBox =
+ (CPWL_ComboBox*)GetPDFWindow(pPageView, FALSE)) {
+ nExport = pComboBox->GetSelect();
+ }
+
+ if (nExport >= 0) {
+ if (CPDF_FormField* pFormField = m_pWidget->GetFormField()) {
+ swRet = pFormField->GetOptionValue(nExport);
+ if (swRet.IsEmpty())
+ swRet = pFormField->GetOptionLabel(nExport);
}
+ }
- return swRet;
+ return swRet;
}
diff --git a/fpdfsdk/src/formfiller/FFL_FormFiller.cpp b/fpdfsdk/src/formfiller/FFL_FormFiller.cpp
index 1811cb0424..4fb7542091 100644
--- a/fpdfsdk/src/formfiller/FFL_FormFiller.cpp
+++ b/fpdfsdk/src/formfiller/FFL_FormFiller.cpp
@@ -4,803 +4,737 @@
// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
#include "../../include/formfiller/FFL_FormFiller.h"
#include "../../include/formfiller/FFL_Notify.h"
#include "../../include/formfiller/FFL_CBA_Fontmap.h"
-#define GetRed(rgb) ((uint8_t)(rgb))
-#define GetGreen(rgb) ((uint8_t)(((FX_WORD)(rgb)) >> 8))
-#define GetBlue(rgb) ((uint8_t)((rgb)>>16))
+#define GetRed(rgb) ((uint8_t)(rgb))
+#define GetGreen(rgb) ((uint8_t)(((FX_WORD)(rgb)) >> 8))
+#define GetBlue(rgb) ((uint8_t)((rgb) >> 16))
-#define FFL_HINT_ELAPSE 800
+#define FFL_HINT_ELAPSE 800
/* ------------------------- CFFL_FormFiller ------------------------- */
-CFFL_FormFiller::CFFL_FormFiller(CPDFDoc_Environment* pApp, CPDFSDK_Annot* pAnnot)
- : m_pApp(pApp),
- m_pAnnot(pAnnot),
- m_bValid(FALSE),
- m_ptOldPos(0,0)
-{
- m_pWidget = (CPDFSDK_Widget*) pAnnot;
-}
-
-CFFL_FormFiller::~CFFL_FormFiller()
-{
- for (auto& it : m_Maps) {
- CPWL_Wnd* pWnd = it.second;
- CFFL_PrivateData* pData = (CFFL_PrivateData*)pWnd->GetAttachedData();
- pWnd->Destroy();
- delete pWnd;
- delete pData;
- }
- m_Maps.clear();
+CFFL_FormFiller::CFFL_FormFiller(CPDFDoc_Environment* pApp,
+ CPDFSDK_Annot* pAnnot)
+ : m_pApp(pApp), m_pAnnot(pAnnot), m_bValid(FALSE), m_ptOldPos(0, 0) {
+ m_pWidget = (CPDFSDK_Widget*)pAnnot;
}
-void CFFL_FormFiller::SetWindowRect(CPDFSDK_PageView* pPageView, const CPDF_Rect& rcWindow)
-{
- if (CPWL_Wnd* pWnd = GetPDFWindow(pPageView, FALSE))
- {
- pWnd->Move(CPDF_Rect(rcWindow), TRUE, FALSE);
- }
+CFFL_FormFiller::~CFFL_FormFiller() {
+ for (auto& it : m_Maps) {
+ CPWL_Wnd* pWnd = it.second;
+ CFFL_PrivateData* pData = (CFFL_PrivateData*)pWnd->GetAttachedData();
+ pWnd->Destroy();
+ delete pWnd;
+ delete pData;
+ }
+ m_Maps.clear();
}
-CPDF_Rect CFFL_FormFiller::GetWindowRect(CPDFSDK_PageView* pPageView)
-{
- if (CPWL_Wnd* pWnd = GetPDFWindow(pPageView, FALSE))
- {
- return pWnd->GetWindowRect();
- }
-
- return CPDF_Rect(0,0,0,0);
+void CFFL_FormFiller::SetWindowRect(CPDFSDK_PageView* pPageView,
+ const CPDF_Rect& rcWindow) {
+ if (CPWL_Wnd* pWnd = GetPDFWindow(pPageView, FALSE)) {
+ pWnd->Move(CPDF_Rect(rcWindow), TRUE, FALSE);
+ }
}
-FX_RECT CFFL_FormFiller::GetViewBBox(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot)
-{
- ASSERT(pPageView != NULL);
- ASSERT(pAnnot != NULL);
+CPDF_Rect CFFL_FormFiller::GetWindowRect(CPDFSDK_PageView* pPageView) {
+ if (CPWL_Wnd* pWnd = GetPDFWindow(pPageView, FALSE)) {
+ return pWnd->GetWindowRect();
+ }
- CPDF_Rect rcAnnot = m_pWidget->GetRect();
+ return CPDF_Rect(0, 0, 0, 0);
+}
- if (CPWL_Wnd* pWnd = GetPDFWindow(pPageView, FALSE))
- {
- CPDF_Rect rcWindow = pWnd->GetWindowRect();
- rcAnnot = PWLtoFFL(rcWindow);
- }
+FX_RECT CFFL_FormFiller::GetViewBBox(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot) {
+ ASSERT(pPageView != NULL);
+ ASSERT(pAnnot != NULL);
- CPDF_Rect rcWin = rcAnnot;
+ CPDF_Rect rcAnnot = m_pWidget->GetRect();
- CPDF_Rect rcFocus = GetFocusBox(pPageView);
- if (!rcFocus.IsEmpty())
- rcWin.Union(rcFocus);
+ if (CPWL_Wnd* pWnd = GetPDFWindow(pPageView, FALSE)) {
+ CPDF_Rect rcWindow = pWnd->GetWindowRect();
+ rcAnnot = PWLtoFFL(rcWindow);
+ }
- CPDF_Rect rect = CPWL_Utils::InflateRect(rcWin,1);
+ CPDF_Rect rcWin = rcAnnot;
- return rect.GetOutterRect();
-}
+ CPDF_Rect rcFocus = GetFocusBox(pPageView);
+ if (!rcFocus.IsEmpty())
+ rcWin.Union(rcFocus);
-void CFFL_FormFiller::OnDraw(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot,
- CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device,
- FX_DWORD dwFlags)
-{
- ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget");
+ CPDF_Rect rect = CPWL_Utils::InflateRect(rcWin, 1);
- if (CPWL_Wnd * pWnd = GetPDFWindow(pPageView, FALSE))
- {
- CPDF_Matrix mt = GetCurMatrix();
- mt.Concat(*pUser2Device);
- pWnd->DrawAppearance(pDevice,&mt);
- }
- else
- {
- CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot;
- if (CFFL_IFormFiller::IsVisible(pWidget))
- pWidget->DrawAppearance(pDevice, pUser2Device, CPDF_Annot::Normal, NULL);
- }
+ return rect.GetOutterRect();
}
-void CFFL_FormFiller::OnDrawDeactive(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot,
- CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device,
- FX_DWORD dwFlags)
-{
+void CFFL_FormFiller::OnDraw(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ CFX_RenderDevice* pDevice,
+ CPDF_Matrix* pUser2Device,
+ FX_DWORD dwFlags) {
+ ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget");
+
+ if (CPWL_Wnd* pWnd = GetPDFWindow(pPageView, FALSE)) {
+ CPDF_Matrix mt = GetCurMatrix();
+ mt.Concat(*pUser2Device);
+ pWnd->DrawAppearance(pDevice, &mt);
+ } else {
CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot;
- pWidget->DrawAppearance(pDevice, pUser2Device, CPDF_Annot::Normal, NULL);
+ if (CFFL_IFormFiller::IsVisible(pWidget))
+ pWidget->DrawAppearance(pDevice, pUser2Device, CPDF_Annot::Normal, NULL);
+ }
}
-
-void CFFL_FormFiller::OnCreate(CPDFSDK_Annot* pAnnot)
-{
+void CFFL_FormFiller::OnDrawDeactive(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ CFX_RenderDevice* pDevice,
+ CPDF_Matrix* pUser2Device,
+ FX_DWORD dwFlags) {
+ CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot;
+ pWidget->DrawAppearance(pDevice, pUser2Device, CPDF_Annot::Normal, NULL);
}
-void CFFL_FormFiller::OnLoad(CPDFSDK_Annot* pAnnot)
-{
-}
+void CFFL_FormFiller::OnCreate(CPDFSDK_Annot* pAnnot) {}
-void CFFL_FormFiller::OnDelete(CPDFSDK_Annot* pAnnot)
-{
-}
+void CFFL_FormFiller::OnLoad(CPDFSDK_Annot* pAnnot) {}
-void CFFL_FormFiller::OnMouseEnter(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot)
-{
-}
+void CFFL_FormFiller::OnDelete(CPDFSDK_Annot* pAnnot) {}
-void CFFL_FormFiller::OnMouseExit(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot)
-{
- EndTimer();
- ASSERT(m_pWidget != NULL);
+void CFFL_FormFiller::OnMouseEnter(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot) {}
+
+void CFFL_FormFiller::OnMouseExit(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot) {
+ EndTimer();
+ ASSERT(m_pWidget != NULL);
}
-FX_BOOL CFFL_FormFiller::OnLButtonDown(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point)
-{
- if (CPWL_Wnd * pWnd = GetPDFWindow(pPageView, TRUE))
- {
- m_bValid = TRUE;
- FX_RECT rect = GetViewBBox(pPageView,pAnnot);
- InvalidateRect(rect.left, rect.top, rect.right, rect.bottom);
+FX_BOOL CFFL_FormFiller::OnLButtonDown(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_UINT nFlags,
+ const CPDF_Point& point) {
+ if (CPWL_Wnd* pWnd = GetPDFWindow(pPageView, TRUE)) {
+ m_bValid = TRUE;
+ FX_RECT rect = GetViewBBox(pPageView, pAnnot);
+ InvalidateRect(rect.left, rect.top, rect.right, rect.bottom);
- if(!rect.Contains((int)point.x, (int)point.y))
- return FALSE;
+ if (!rect.Contains((int)point.x, (int)point.y))
+ return FALSE;
- return pWnd->OnLButtonDown(WndtoPWL(pPageView, point),nFlags);
- }
+ return pWnd->OnLButtonDown(WndtoPWL(pPageView, point), nFlags);
+ }
- return FALSE;
+ return FALSE;
}
-FX_BOOL CFFL_FormFiller::OnLButtonUp(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point)
-{
- if (CPWL_Wnd * pWnd = GetPDFWindow(pPageView, FALSE))
- {
- FX_RECT rcFFL = GetViewBBox(pPageView, pAnnot);
- InvalidateRect(rcFFL.left, rcFFL.top, rcFFL.right, rcFFL.bottom);
- pWnd->OnLButtonUp(WndtoPWL(pPageView, point),nFlags);
- return TRUE;
- }
+FX_BOOL CFFL_FormFiller::OnLButtonUp(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_UINT nFlags,
+ const CPDF_Point& point) {
+ if (CPWL_Wnd* pWnd = GetPDFWindow(pPageView, FALSE)) {
+ FX_RECT rcFFL = GetViewBBox(pPageView, pAnnot);
+ InvalidateRect(rcFFL.left, rcFFL.top, rcFFL.right, rcFFL.bottom);
+ pWnd->OnLButtonUp(WndtoPWL(pPageView, point), nFlags);
+ return TRUE;
+ }
- return FALSE;
+ return FALSE;
}
-FX_BOOL CFFL_FormFiller::OnLButtonDblClk(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point)
-{
- if (CPWL_Wnd * pWnd = GetPDFWindow(pPageView, FALSE))
- {
- pWnd->OnLButtonDblClk(WndtoPWL(pPageView, point),nFlags);
- return TRUE;
- }
+FX_BOOL CFFL_FormFiller::OnLButtonDblClk(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_UINT nFlags,
+ const CPDF_Point& point) {
+ if (CPWL_Wnd* pWnd = GetPDFWindow(pPageView, FALSE)) {
+ pWnd->OnLButtonDblClk(WndtoPWL(pPageView, point), nFlags);
+ return TRUE;
+ }
- return FALSE;
+ return FALSE;
}
-FX_BOOL CFFL_FormFiller::OnMouseMove(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point)
-{
- if ((m_ptOldPos.x != point.x) || (m_ptOldPos.y != point.y))
- {
- m_ptOldPos = point;
- }
+FX_BOOL CFFL_FormFiller::OnMouseMove(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_UINT nFlags,
+ const CPDF_Point& point) {
+ if ((m_ptOldPos.x != point.x) || (m_ptOldPos.y != point.y)) {
+ m_ptOldPos = point;
+ }
- if (CPWL_Wnd * pWnd = GetPDFWindow(pPageView, FALSE))
- {
- pWnd->OnMouseMove(WndtoPWL(pPageView, point),nFlags);
- return TRUE;
- }
+ if (CPWL_Wnd* pWnd = GetPDFWindow(pPageView, FALSE)) {
+ pWnd->OnMouseMove(WndtoPWL(pPageView, point), nFlags);
+ return TRUE;
+ }
- return FALSE;
+ return FALSE;
}
-FX_BOOL CFFL_FormFiller::OnMouseWheel(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, short zDelta, const CPDF_Point& point)
-{
- if (!IsValid()) return FALSE;
+FX_BOOL CFFL_FormFiller::OnMouseWheel(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_UINT nFlags,
+ short zDelta,
+ const CPDF_Point& point) {
+ if (!IsValid())
+ return FALSE;
- if (CPWL_Wnd * pWnd = GetPDFWindow(pPageView, TRUE))
- {
- return pWnd->OnMouseWheel(zDelta, WndtoPWL(pPageView, point),nFlags);
- }
+ if (CPWL_Wnd* pWnd = GetPDFWindow(pPageView, TRUE)) {
+ return pWnd->OnMouseWheel(zDelta, WndtoPWL(pPageView, point), nFlags);
+ }
- return FALSE;
+ return FALSE;
}
-FX_BOOL CFFL_FormFiller::OnRButtonDown(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point)
-{
- if (CPWL_Wnd * pWnd = GetPDFWindow(pPageView, TRUE))
- {
- pWnd->OnRButtonDown(WndtoPWL(pPageView, point),nFlags);
- return TRUE;
- }
+FX_BOOL CFFL_FormFiller::OnRButtonDown(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_UINT nFlags,
+ const CPDF_Point& point) {
+ if (CPWL_Wnd* pWnd = GetPDFWindow(pPageView, TRUE)) {
+ pWnd->OnRButtonDown(WndtoPWL(pPageView, point), nFlags);
+ return TRUE;
+ }
- return FALSE;
+ return FALSE;
}
-FX_BOOL CFFL_FormFiller::OnRButtonUp(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point)
-{
- if (CPWL_Wnd * pWnd = GetPDFWindow(pPageView, FALSE))
- {
- pWnd->OnRButtonUp(WndtoPWL(pPageView, point),nFlags);
- return TRUE;
- }
+FX_BOOL CFFL_FormFiller::OnRButtonUp(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_UINT nFlags,
+ const CPDF_Point& point) {
+ if (CPWL_Wnd* pWnd = GetPDFWindow(pPageView, FALSE)) {
+ pWnd->OnRButtonUp(WndtoPWL(pPageView, point), nFlags);
+ return TRUE;
+ }
- return FALSE;
+ return FALSE;
}
-FX_BOOL CFFL_FormFiller::OnKeyDown(CPDFSDK_Annot* pAnnot, FX_UINT nKeyCode, FX_UINT nFlags)
-{
- if (IsValid())
- {
- CPDFSDK_PageView* pPageView = GetCurPageView();
- ASSERT(pPageView != NULL);
+FX_BOOL CFFL_FormFiller::OnKeyDown(CPDFSDK_Annot* pAnnot,
+ FX_UINT nKeyCode,
+ FX_UINT nFlags) {
+ if (IsValid()) {
+ CPDFSDK_PageView* pPageView = GetCurPageView();
+ ASSERT(pPageView != NULL);
- if (CPWL_Wnd * pWnd = GetPDFWindow(pPageView, FALSE))
- {
- return pWnd->OnKeyDown(nKeyCode,nFlags);
- }
+ if (CPWL_Wnd* pWnd = GetPDFWindow(pPageView, FALSE)) {
+ return pWnd->OnKeyDown(nKeyCode, nFlags);
}
+ }
- return FALSE;
+ return FALSE;
}
-FX_BOOL CFFL_FormFiller::OnChar(CPDFSDK_Annot* pAnnot, FX_UINT nChar, FX_UINT nFlags)
-{
- if (IsValid())
- {
- CPDFSDK_PageView* pPageView = GetCurPageView();
- ASSERT(pPageView != NULL);
+FX_BOOL CFFL_FormFiller::OnChar(CPDFSDK_Annot* pAnnot,
+ FX_UINT nChar,
+ FX_UINT nFlags) {
+ if (IsValid()) {
+ CPDFSDK_PageView* pPageView = GetCurPageView();
+ ASSERT(pPageView != NULL);
- if (CPWL_Wnd * pWnd = GetPDFWindow(pPageView, FALSE))
- {
- return pWnd->OnChar(nChar,nFlags);
- }
+ if (CPWL_Wnd* pWnd = GetPDFWindow(pPageView, FALSE)) {
+ return pWnd->OnChar(nChar, nFlags);
}
+ }
- return FALSE;
+ return FALSE;
}
-FX_BOOL CFFL_FormFiller::OnSetFocus(CPDFSDK_Annot* pAnnot, FX_UINT nFlag)
-{
- CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot;
- CPDF_Page* pPage = pWidget->GetPDFPage();
- CPDFSDK_Document* pDoc = m_pApp->GetSDKDocument();
- CPDFSDK_PageView* pPageView = pDoc->GetPageView(pPage);
- if (CPWL_Wnd* pWnd = GetPDFWindow(pPageView, TRUE))
- pWnd->SetFocus();
+FX_BOOL CFFL_FormFiller::OnSetFocus(CPDFSDK_Annot* pAnnot, FX_UINT nFlag) {
+ CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot;
+ CPDF_Page* pPage = pWidget->GetPDFPage();
+ CPDFSDK_Document* pDoc = m_pApp->GetSDKDocument();
+ CPDFSDK_PageView* pPageView = pDoc->GetPageView(pPage);
+ if (CPWL_Wnd* pWnd = GetPDFWindow(pPageView, TRUE))
+ pWnd->SetFocus();
- m_bValid = TRUE;
- FX_RECT rcRect = GetViewBBox(pPageView,pAnnot);
- InvalidateRect(rcRect.left, rcRect.top, rcRect.right, rcRect.bottom);
- return TRUE;
+ m_bValid = TRUE;
+ FX_RECT rcRect = GetViewBBox(pPageView, pAnnot);
+ InvalidateRect(rcRect.left, rcRect.top, rcRect.right, rcRect.bottom);
+ return TRUE;
}
-FX_BOOL CFFL_FormFiller::OnKillFocus(CPDFSDK_Annot* pAnnot, FX_UINT nFlag)
-{
- if (!IsValid())
- return TRUE;
+FX_BOOL CFFL_FormFiller::OnKillFocus(CPDFSDK_Annot* pAnnot, FX_UINT nFlag) {
+ if (!IsValid())
+ return TRUE;
- CPDFSDK_PageView* pPageView = GetCurPageView();
- CommitData(pPageView, nFlag);
+ CPDFSDK_PageView* pPageView = GetCurPageView();
+ CommitData(pPageView, nFlag);
- if (CPWL_Wnd* pWnd = GetPDFWindow(pPageView, FALSE))
- pWnd->KillFocus();
+ if (CPWL_Wnd* pWnd = GetPDFWindow(pPageView, FALSE))
+ pWnd->KillFocus();
- switch (m_pWidget->GetFieldType())
- {
+ switch (m_pWidget->GetFieldType()) {
case FIELDTYPE_PUSHBUTTON:
case FIELDTYPE_CHECKBOX:
case FIELDTYPE_RADIOBUTTON:
- EscapeFiller(pPageView, TRUE);
- break;
+ EscapeFiller(pPageView, TRUE);
+ break;
default:
- EscapeFiller(pPageView, FALSE);
- break;
- }
- return TRUE;
+ EscapeFiller(pPageView, FALSE);
+ break;
+ }
+ return TRUE;
}
-FX_BOOL CFFL_FormFiller::IsValid() const
-{
- return m_bValid;
+FX_BOOL CFFL_FormFiller::IsValid() const {
+ return m_bValid;
}
-PWL_CREATEPARAM CFFL_FormFiller::GetCreateParam()
-{
- ASSERT(m_pApp != NULL);
+PWL_CREATEPARAM CFFL_FormFiller::GetCreateParam() {
+ ASSERT(m_pApp != NULL);
- PWL_CREATEPARAM cp;
- cp.pParentWnd = NULL;
- cp.pProvider = this;
- cp.rcRectWnd = GetPDFWindowRect();
+ PWL_CREATEPARAM cp;
+ cp.pParentWnd = NULL;
+ cp.pProvider = this;
+ cp.rcRectWnd = GetPDFWindowRect();
- FX_DWORD dwCreateFlags = PWS_BORDER | PWS_BACKGROUND | PWS_VISIBLE;
- FX_DWORD dwFieldFlag = m_pWidget->GetFieldFlags();
- if (dwFieldFlag & FIELDFLAG_READONLY)
- {
- dwCreateFlags |= PWS_READONLY;
- }
+ FX_DWORD dwCreateFlags = PWS_BORDER | PWS_BACKGROUND | PWS_VISIBLE;
+ FX_DWORD dwFieldFlag = m_pWidget->GetFieldFlags();
+ if (dwFieldFlag & FIELDFLAG_READONLY) {
+ dwCreateFlags |= PWS_READONLY;
+ }
- FX_COLORREF color;
- if (m_pWidget->GetFillColor(color))
- {
- cp.sBackgroundColor = CPWL_Color(GetRed(color), GetGreen(color), GetBlue(color));
- }
+ FX_COLORREF color;
+ if (m_pWidget->GetFillColor(color)) {
+ cp.sBackgroundColor =
+ CPWL_Color(GetRed(color), GetGreen(color), GetBlue(color));
+ }
- if (m_pWidget->GetBorderColor(color))
- {
- cp.sBorderColor = CPWL_Color(GetRed(color), GetGreen(color), GetBlue(color));
- }
+ if (m_pWidget->GetBorderColor(color)) {
+ cp.sBorderColor =
+ CPWL_Color(GetRed(color), GetGreen(color), GetBlue(color));
+ }
- cp.sTextColor = CPWL_Color(COLORTYPE_GRAY,0);
+ cp.sTextColor = CPWL_Color(COLORTYPE_GRAY, 0);
- if (m_pWidget->GetTextColor(color))
- {
- cp.sTextColor = CPWL_Color(GetRed(color), GetGreen(color), GetBlue(color));
- }
+ if (m_pWidget->GetTextColor(color)) {
+ cp.sTextColor = CPWL_Color(GetRed(color), GetGreen(color), GetBlue(color));
+ }
- cp.fFontSize = m_pWidget->GetFontSize();
- cp.dwBorderWidth = m_pWidget->GetBorderWidth();
+ cp.fFontSize = m_pWidget->GetFontSize();
+ cp.dwBorderWidth = m_pWidget->GetBorderWidth();
- int nBorderStyle = m_pWidget->GetBorderStyle();
+ int nBorderStyle = m_pWidget->GetBorderStyle();
- switch (nBorderStyle)
- {
+ switch (nBorderStyle) {
case BBS_SOLID:
- cp.nBorderStyle = PBS_SOLID;
- break;
+ cp.nBorderStyle = PBS_SOLID;
+ break;
case BBS_DASH:
- cp.nBorderStyle = PBS_DASH;
- cp.sDash = CPWL_Dash(3,3,0);
- break;
+ cp.nBorderStyle = PBS_DASH;
+ cp.sDash = CPWL_Dash(3, 3, 0);
+ break;
case BBS_BEVELED:
- cp.nBorderStyle = PBS_BEVELED;
- cp.dwBorderWidth *= 2;
- break;
+ cp.nBorderStyle = PBS_BEVELED;
+ cp.dwBorderWidth *= 2;
+ break;
case BBS_INSET:
- cp.nBorderStyle = PBS_INSET;
- cp.dwBorderWidth *= 2;
- break;
+ cp.nBorderStyle = PBS_INSET;
+ cp.dwBorderWidth *= 2;
+ break;
case BBS_UNDERLINE:
- cp.nBorderStyle = PBS_UNDERLINED;
- break;
- }
+ cp.nBorderStyle = PBS_UNDERLINED;
+ break;
+ }
- if (cp.fFontSize <= 0)
- {
- dwCreateFlags |= PWS_AUTOFONTSIZE;
- }
+ if (cp.fFontSize <= 0) {
+ dwCreateFlags |= PWS_AUTOFONTSIZE;
+ }
- cp.dwFlags = dwCreateFlags;
- cp.pSystemHandler = m_pApp->GetSysHandler();
- return cp;
+ cp.dwFlags = dwCreateFlags;
+ cp.pSystemHandler = m_pApp->GetSysHandler();
+ return cp;
}
-CPWL_Wnd* CFFL_FormFiller::GetPDFWindow(CPDFSDK_PageView* pPageView, FX_BOOL bNew)
-{
- ASSERT(pPageView);
+CPWL_Wnd* CFFL_FormFiller::GetPDFWindow(CPDFSDK_PageView* pPageView,
+ FX_BOOL bNew) {
+ ASSERT(pPageView);
- auto it = m_Maps.find(pPageView);
- const bool found = it != m_Maps.end();
- CPWL_Wnd* pWnd = found ? it->second : nullptr;
- if (!bNew)
- return pWnd;
+ auto it = m_Maps.find(pPageView);
+ const bool found = it != m_Maps.end();
+ CPWL_Wnd* pWnd = found ? it->second : nullptr;
+ if (!bNew)
+ return pWnd;
- if (found) {
- CFFL_PrivateData* pPrivateData =
- (CFFL_PrivateData*)pWnd->GetAttachedData();
- if (pPrivateData->nWidgetAge != m_pWidget->GetAppearanceAge()) {
- return ResetPDFWindow(
- pPageView, m_pWidget->GetValueAge() == pPrivateData->nValueAge);
- }
- } else {
- PWL_CREATEPARAM cp = GetCreateParam();
- cp.hAttachedWnd = (FX_HWND)m_pWidget;
+ if (found) {
+ CFFL_PrivateData* pPrivateData = (CFFL_PrivateData*)pWnd->GetAttachedData();
+ if (pPrivateData->nWidgetAge != m_pWidget->GetAppearanceAge()) {
+ return ResetPDFWindow(
+ pPageView, m_pWidget->GetValueAge() == pPrivateData->nValueAge);
+ }
+ } else {
+ PWL_CREATEPARAM cp = GetCreateParam();
+ cp.hAttachedWnd = (FX_HWND)m_pWidget;
- CFFL_PrivateData* pPrivateData = new CFFL_PrivateData;
- pPrivateData->pWidget = m_pWidget;
- pPrivateData->pPageView = pPageView;
- pPrivateData->nWidgetAge = m_pWidget->GetAppearanceAge();
- pPrivateData->nValueAge = 0;
+ CFFL_PrivateData* pPrivateData = new CFFL_PrivateData;
+ pPrivateData->pWidget = m_pWidget;
+ pPrivateData->pPageView = pPageView;
+ pPrivateData->nWidgetAge = m_pWidget->GetAppearanceAge();
+ pPrivateData->nValueAge = 0;
- cp.pAttachedData = pPrivateData;
+ cp.pAttachedData = pPrivateData;
- pWnd = NewPDFWindow(cp, pPageView);
- m_Maps[pPageView] = pWnd;
- }
+ pWnd = NewPDFWindow(cp, pPageView);
+ m_Maps[pPageView] = pWnd;
+ }
- return pWnd;
+ return pWnd;
}
-void CFFL_FormFiller::DestroyPDFWindow(CPDFSDK_PageView* pPageView)
-{
- auto it = m_Maps.find(pPageView);
- if (it == m_Maps.end())
- return;
+void CFFL_FormFiller::DestroyPDFWindow(CPDFSDK_PageView* pPageView) {
+ auto it = m_Maps.find(pPageView);
+ if (it == m_Maps.end())
+ return;
- CPWL_Wnd* pWnd = it->second;
- CFFL_PrivateData* pData = (CFFL_PrivateData*)pWnd->GetAttachedData();
- pWnd->Destroy();
- delete pWnd;
- delete pData;
+ CPWL_Wnd* pWnd = it->second;
+ CFFL_PrivateData* pData = (CFFL_PrivateData*)pWnd->GetAttachedData();
+ pWnd->Destroy();
+ delete pWnd;
+ delete pData;
- m_Maps.erase(it);
+ m_Maps.erase(it);
}
-CPDF_Matrix CFFL_FormFiller::GetWindowMatrix(void* pAttachedData)
-{
- if (CFFL_PrivateData* pPrivateData = (CFFL_PrivateData*)pAttachedData)
- {
- if (pPrivateData->pPageView)
- {
- CPDF_Matrix mtPageView;
- pPrivateData->pPageView->GetCurrentMatrix(mtPageView);
- CPDF_Matrix mt = GetCurMatrix();
- mt.Concat(mtPageView);
+CPDF_Matrix CFFL_FormFiller::GetWindowMatrix(void* pAttachedData) {
+ if (CFFL_PrivateData* pPrivateData = (CFFL_PrivateData*)pAttachedData) {
+ if (pPrivateData->pPageView) {
+ CPDF_Matrix mtPageView;
+ pPrivateData->pPageView->GetCurrentMatrix(mtPageView);
+ CPDF_Matrix mt = GetCurMatrix();
+ mt.Concat(mtPageView);
- return mt;
- }
+ return mt;
}
- return CPDF_Matrix(1,0,0,1,0,0);
+ }
+ return CPDF_Matrix(1, 0, 0, 1, 0, 0);
}
-CPDF_Matrix CFFL_FormFiller::GetCurMatrix()
-{
- CPDF_Matrix mt;
+CPDF_Matrix CFFL_FormFiller::GetCurMatrix() {
+ CPDF_Matrix mt;
- ASSERT(m_pWidget != NULL);
+ ASSERT(m_pWidget != NULL);
- CPDF_Rect rcDA ;
- m_pWidget->GetPDFAnnot()->GetRect(rcDA);
+ CPDF_Rect rcDA;
+ m_pWidget->GetPDFAnnot()->GetRect(rcDA);
-
- switch (m_pWidget->GetRotate())
- {
+ switch (m_pWidget->GetRotate()) {
default:
case 0:
- mt = CPDF_Matrix(1,0,0,1,0,0);
- break;
+ mt = CPDF_Matrix(1, 0, 0, 1, 0, 0);
+ break;
case 90:
- mt = CPDF_Matrix(0,1,-1,0,rcDA.right - rcDA.left,0);
- break;
+ mt = CPDF_Matrix(0, 1, -1, 0, rcDA.right - rcDA.left, 0);
+ break;
case 180:
- mt = CPDF_Matrix(-1,0,0,-1,rcDA.right - rcDA.left,rcDA.top - rcDA.bottom);
- break;
+ mt = CPDF_Matrix(-1, 0, 0, -1, rcDA.right - rcDA.left,
+ rcDA.top - rcDA.bottom);
+ break;
case 270:
- mt = CPDF_Matrix(0,-1,1,0,0,rcDA.top - rcDA.bottom);
- break;
- }
- mt.e += rcDA.left;
- mt.f += rcDA.bottom;
+ mt = CPDF_Matrix(0, -1, 1, 0, 0, rcDA.top - rcDA.bottom);
+ break;
+ }
+ mt.e += rcDA.left;
+ mt.f += rcDA.bottom;
- return mt;
+ return mt;
}
-CFX_WideString CFFL_FormFiller::LoadPopupMenuString(int nIndex)
-{
- ASSERT(m_pApp != NULL);
+CFX_WideString CFFL_FormFiller::LoadPopupMenuString(int nIndex) {
+ ASSERT(m_pApp != NULL);
- return L"";
+ return L"";
}
-CPDF_Rect CFFL_FormFiller::GetPDFWindowRect() const
-{
- CPDF_Rect rectAnnot;
- m_pWidget->GetPDFAnnot()->GetRect(rectAnnot);
+CPDF_Rect CFFL_FormFiller::GetPDFWindowRect() const {
+ CPDF_Rect rectAnnot;
+ m_pWidget->GetPDFAnnot()->GetRect(rectAnnot);
- FX_FLOAT fWidth = rectAnnot.right - rectAnnot.left;
- FX_FLOAT fHeight = rectAnnot.top - rectAnnot.bottom;
- if ((m_pWidget->GetRotate() / 90) & 0x01)
- return CPDF_Rect(0, 0, fHeight, fWidth);
+ FX_FLOAT fWidth = rectAnnot.right - rectAnnot.left;
+ FX_FLOAT fHeight = rectAnnot.top - rectAnnot.bottom;
+ if ((m_pWidget->GetRotate() / 90) & 0x01)
+ return CPDF_Rect(0, 0, fHeight, fWidth);
- return CPDF_Rect(0, 0, fWidth, fHeight);
+ return CPDF_Rect(0, 0, fWidth, fHeight);
}
-CPDFSDK_PageView* CFFL_FormFiller::GetCurPageView()
-{
- CPDF_Page* pPage = m_pAnnot->GetPDFPage();
- CPDFSDK_Document* pSDKDoc = m_pApp->GetSDKDocument();
- return pSDKDoc ? pSDKDoc->GetPageView(pPage) : nullptr;
+CPDFSDK_PageView* CFFL_FormFiller::GetCurPageView() {
+ CPDF_Page* pPage = m_pAnnot->GetPDFPage();
+ CPDFSDK_Document* pSDKDoc = m_pApp->GetSDKDocument();
+ return pSDKDoc ? pSDKDoc->GetPageView(pPage) : nullptr;
}
-CPDF_Rect CFFL_FormFiller::GetFocusBox(CPDFSDK_PageView* pPageView)
-{
- if (CPWL_Wnd* pWnd = GetPDFWindow(pPageView, FALSE))
- {
- CPDF_Rect rcFocus = FFLtoWnd(pPageView, PWLtoFFL(pWnd->GetFocusRect()));
- CPDF_Rect rcPage = pPageView->GetPDFPage()->GetPageBBox();
- if (rcPage.Contains(rcFocus))
- return rcFocus;
- }
- return CPDF_Rect(0,0,0,0);
+CPDF_Rect CFFL_FormFiller::GetFocusBox(CPDFSDK_PageView* pPageView) {
+ if (CPWL_Wnd* pWnd = GetPDFWindow(pPageView, FALSE)) {
+ CPDF_Rect rcFocus = FFLtoWnd(pPageView, PWLtoFFL(pWnd->GetFocusRect()));
+ CPDF_Rect rcPage = pPageView->GetPDFPage()->GetPageBBox();
+ if (rcPage.Contains(rcFocus))
+ return rcFocus;
+ }
+ return CPDF_Rect(0, 0, 0, 0);
}
-CPDF_Rect CFFL_FormFiller::FFLtoPWL(const CPDF_Rect& rect)
-{
- CPDF_Matrix mt;
- mt.SetReverse(GetCurMatrix());
+CPDF_Rect CFFL_FormFiller::FFLtoPWL(const CPDF_Rect& rect) {
+ CPDF_Matrix mt;
+ mt.SetReverse(GetCurMatrix());
- CPDF_Rect temp = rect;
- mt.TransformRect(temp);
+ CPDF_Rect temp = rect;
+ mt.TransformRect(temp);
- return temp;
+ return temp;
}
-CPDF_Rect CFFL_FormFiller::PWLtoFFL(const CPDF_Rect& rect)
-{
- CPDF_Matrix mt = GetCurMatrix();
+CPDF_Rect CFFL_FormFiller::PWLtoFFL(const CPDF_Rect& rect) {
+ CPDF_Matrix mt = GetCurMatrix();
- CPDF_Rect temp = rect;
- mt.TransformRect(temp);
+ CPDF_Rect temp = rect;
+ mt.TransformRect(temp);
- return temp;
+ return temp;
}
-CPDF_Point CFFL_FormFiller::FFLtoPWL(const CPDF_Point& point)
-{
- CPDF_Matrix mt;
- mt.SetReverse(GetCurMatrix());
+CPDF_Point CFFL_FormFiller::FFLtoPWL(const CPDF_Point& point) {
+ CPDF_Matrix mt;
+ mt.SetReverse(GetCurMatrix());
- CPDF_Point pt = point;
- mt.Transform(pt.x,pt.y);
+ CPDF_Point pt = point;
+ mt.Transform(pt.x, pt.y);
- return pt;
+ return pt;
}
-CPDF_Point CFFL_FormFiller::PWLtoFFL(const CPDF_Point & point)
-{
- CPDF_Matrix mt = GetCurMatrix();
-
- CPDF_Point pt = point;
- mt.Transform(pt.x,pt.y);
-
- return pt;
-}
-
-CPDF_Point CFFL_FormFiller::WndtoPWL(CPDFSDK_PageView* pPageView, const CPDF_Point& pt)
-{
- return FFLtoPWL(pt);
-}
-
-CPDF_Rect CFFL_FormFiller::FFLtoWnd(CPDFSDK_PageView* pPageView, const CPDF_Rect & rect)
-{
- return rect;
-}
-
-FX_BOOL CFFL_FormFiller::CommitData(CPDFSDK_PageView* pPageView, FX_UINT nFlag)
-{
- if (IsDataChanged(pPageView))
- {
- FX_BOOL bRC = TRUE;
- FX_BOOL bExit = FALSE;
- CFFL_IFormFiller* pIFormFiller = m_pApp->GetIFormFiller();
- pIFormFiller->OnKeyStrokeCommit(m_pWidget, pPageView, bRC, bExit, nFlag);
- if (bExit)
- return TRUE;
- if (!bRC)
- {
- ResetPDFWindow(pPageView, FALSE);
- return TRUE;
- }
-
- pIFormFiller->OnValidate(m_pWidget, pPageView, bRC, bExit, nFlag);
- if (bExit)
- return TRUE;
- if (!bRC)
- {
- ResetPDFWindow(pPageView, FALSE);
- return TRUE;
- }
-
- SaveData(pPageView);
- pIFormFiller->OnCalculate(m_pWidget, pPageView, bExit,nFlag);
- if (bExit)
- return TRUE;
-
- pIFormFiller->OnFormat(m_pWidget, pPageView, bExit,nFlag);
- }
- return TRUE;
-}
+CPDF_Point CFFL_FormFiller::PWLtoFFL(const CPDF_Point& point) {
+ CPDF_Matrix mt = GetCurMatrix();
-FX_BOOL CFFL_FormFiller::IsDataChanged(CPDFSDK_PageView* pPageView)
-{
- return FALSE;
-}
+ CPDF_Point pt = point;
+ mt.Transform(pt.x, pt.y);
-void CFFL_FormFiller::SaveData(CPDFSDK_PageView* pPageView)
-{
+ return pt;
}
-void CFFL_FormFiller::SetChangeMark()
-{
- m_pApp->FFI_OnChange();
+CPDF_Point CFFL_FormFiller::WndtoPWL(CPDFSDK_PageView* pPageView,
+ const CPDF_Point& pt) {
+ return FFLtoPWL(pt);
}
-void CFFL_FormFiller::GetActionData(CPDFSDK_PageView* pPageView, CPDF_AAction::AActionType type,
- PDFSDK_FieldAction& fa)
-{
- fa.sValue = m_pWidget->GetValue();
+CPDF_Rect CFFL_FormFiller::FFLtoWnd(CPDFSDK_PageView* pPageView,
+ const CPDF_Rect& rect) {
+ return rect;
}
-void CFFL_FormFiller::SetActionData(CPDFSDK_PageView* pPageView, CPDF_AAction::AActionType type,
- const PDFSDK_FieldAction& fa)
-{
-}
+FX_BOOL CFFL_FormFiller::CommitData(CPDFSDK_PageView* pPageView,
+ FX_UINT nFlag) {
+ if (IsDataChanged(pPageView)) {
+ FX_BOOL bRC = TRUE;
+ FX_BOOL bExit = FALSE;
+ CFFL_IFormFiller* pIFormFiller = m_pApp->GetIFormFiller();
+ pIFormFiller->OnKeyStrokeCommit(m_pWidget, pPageView, bRC, bExit, nFlag);
+ if (bExit)
+ return TRUE;
+ if (!bRC) {
+ ResetPDFWindow(pPageView, FALSE);
+ return TRUE;
+ }
-FX_BOOL CFFL_FormFiller::IsActionDataChanged(CPDF_AAction::AActionType type, const PDFSDK_FieldAction& faOld,
- const PDFSDK_FieldAction& faNew)
-{
- return FALSE;
-}
+ pIFormFiller->OnValidate(m_pWidget, pPageView, bRC, bExit, nFlag);
+ if (bExit)
+ return TRUE;
+ if (!bRC) {
+ ResetPDFWindow(pPageView, FALSE);
+ return TRUE;
+ }
-void CFFL_FormFiller::SaveState(CPDFSDK_PageView* pPageView)
-{
-}
+ SaveData(pPageView);
+ pIFormFiller->OnCalculate(m_pWidget, pPageView, bExit, nFlag);
+ if (bExit)
+ return TRUE;
-void CFFL_FormFiller::RestoreState(CPDFSDK_PageView* pPageView)
-{
+ pIFormFiller->OnFormat(m_pWidget, pPageView, bExit, nFlag);
+ }
+ return TRUE;
}
-CPWL_Wnd* CFFL_FormFiller::ResetPDFWindow(CPDFSDK_PageView* pPageView, FX_BOOL bRestoreValue)
-{
- return GetPDFWindow(pPageView, FALSE);
+FX_BOOL CFFL_FormFiller::IsDataChanged(CPDFSDK_PageView* pPageView) {
+ return FALSE;
}
-void CFFL_FormFiller::TimerProc()
-{
+void CFFL_FormFiller::SaveData(CPDFSDK_PageView* pPageView) {}
+void CFFL_FormFiller::SetChangeMark() {
+ m_pApp->FFI_OnChange();
}
-IFX_SystemHandler* CFFL_FormFiller::GetSystemHandler() const
-{
- return m_pApp->GetSysHandler();
+void CFFL_FormFiller::GetActionData(CPDFSDK_PageView* pPageView,
+ CPDF_AAction::AActionType type,
+ PDFSDK_FieldAction& fa) {
+ fa.sValue = m_pWidget->GetValue();
}
-void CFFL_FormFiller::OnKeyStroke(FX_BOOL bKeyDown)
-{
+void CFFL_FormFiller::SetActionData(CPDFSDK_PageView* pPageView,
+ CPDF_AAction::AActionType type,
+ const PDFSDK_FieldAction& fa) {}
+
+FX_BOOL CFFL_FormFiller::IsActionDataChanged(CPDF_AAction::AActionType type,
+ const PDFSDK_FieldAction& faOld,
+ const PDFSDK_FieldAction& faNew) {
+ return FALSE;
}
-void CFFL_FormFiller::EscapeFiller(CPDFSDK_PageView* pPageView, FX_BOOL bDestroyPDFWindow)
-{
- m_bValid = FALSE;
+void CFFL_FormFiller::SaveState(CPDFSDK_PageView* pPageView) {}
- FX_RECT rcRect = GetViewBBox(pPageView, m_pWidget);
- InvalidateRect(rcRect.left, rcRect.top, rcRect.right, rcRect.bottom);
+void CFFL_FormFiller::RestoreState(CPDFSDK_PageView* pPageView) {}
- if(bDestroyPDFWindow)
- DestroyPDFWindow(pPageView);
+CPWL_Wnd* CFFL_FormFiller::ResetPDFWindow(CPDFSDK_PageView* pPageView,
+ FX_BOOL bRestoreValue) {
+ return GetPDFWindow(pPageView, FALSE);
}
-FX_BOOL CFFL_FormFiller::CanCopy(CPDFSDK_Document* pDocument)
-{
- return FALSE;
-}
+void CFFL_FormFiller::TimerProc() {}
-FX_BOOL CFFL_FormFiller::CanCut(CPDFSDK_Document* pDocument)
-{
- return FALSE;
+IFX_SystemHandler* CFFL_FormFiller::GetSystemHandler() const {
+ return m_pApp->GetSysHandler();
}
-FX_BOOL CFFL_FormFiller::CanPaste(CPDFSDK_Document* pDocument)
-{
- return FALSE;
-}
+void CFFL_FormFiller::OnKeyStroke(FX_BOOL bKeyDown) {}
-void CFFL_FormFiller::DoCopy(CPDFSDK_Document* pDocument)
-{
-}
+void CFFL_FormFiller::EscapeFiller(CPDFSDK_PageView* pPageView,
+ FX_BOOL bDestroyPDFWindow) {
+ m_bValid = FALSE;
-void CFFL_FormFiller::DoCut(CPDFSDK_Document* pDocument)
-{
-}
+ FX_RECT rcRect = GetViewBBox(pPageView, m_pWidget);
+ InvalidateRect(rcRect.left, rcRect.top, rcRect.right, rcRect.bottom);
-void CFFL_FormFiller::DoPaste(CPDFSDK_Document* pDocument)
-{
+ if (bDestroyPDFWindow)
+ DestroyPDFWindow(pPageView);
}
-void CFFL_FormFiller::InvalidateRect(double left, double top, double right, double bottom)
-{
- CPDF_Page * pPage = m_pWidget->GetPDFPage();
- m_pApp->FFI_Invalidate(pPage, left, top, right, bottom);
+FX_BOOL CFFL_FormFiller::CanCopy(CPDFSDK_Document* pDocument) {
+ return FALSE;
}
-/* ------------------------- CFFL_Button ------------------------- */
-
-CFFL_Button::CFFL_Button(CPDFDoc_Environment* pApp, CPDFSDK_Annot* pWidget) :
- CFFL_FormFiller(pApp, pWidget),
- m_bMouseIn(FALSE),
- m_bMouseDown(FALSE)
-{
+FX_BOOL CFFL_FormFiller::CanCut(CPDFSDK_Document* pDocument) {
+ return FALSE;
}
-CFFL_Button::~CFFL_Button()
-{
+FX_BOOL CFFL_FormFiller::CanPaste(CPDFSDK_Document* pDocument) {
+ return FALSE;
}
-void CFFL_Button::OnMouseEnter(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot)
-{
- m_bMouseIn = TRUE;
- FX_RECT rect = GetViewBBox(pPageView,pAnnot);
- InvalidateRect(rect.left, rect.top, rect.right, rect.bottom);
-}
+void CFFL_FormFiller::DoCopy(CPDFSDK_Document* pDocument) {}
-void CFFL_Button::OnMouseExit(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot)
-{
- m_bMouseIn = FALSE;
+void CFFL_FormFiller::DoCut(CPDFSDK_Document* pDocument) {}
- FX_RECT rect = GetViewBBox(pPageView,pAnnot);
- InvalidateRect(rect.left, rect.top, rect.right, rect.bottom);
- EndTimer();
- ASSERT(m_pWidget != NULL);
+void CFFL_FormFiller::DoPaste(CPDFSDK_Document* pDocument) {}
+
+void CFFL_FormFiller::InvalidateRect(double left,
+ double top,
+ double right,
+ double bottom) {
+ CPDF_Page* pPage = m_pWidget->GetPDFPage();
+ m_pApp->FFI_Invalidate(pPage, left, top, right, bottom);
}
-FX_BOOL CFFL_Button::OnLButtonDown(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point)
-{
- CPDF_Rect rcAnnot = pAnnot->GetRect();
- if(!rcAnnot.Contains(point.x, point.y))
- return FALSE;
+/* ------------------------- CFFL_Button ------------------------- */
- m_bMouseDown = TRUE;
- m_bValid = TRUE;
- FX_RECT rect = GetViewBBox(pPageView, pAnnot);
- InvalidateRect(rect.left, rect.top, rect.right, rect.bottom);
- return TRUE;
-}
+CFFL_Button::CFFL_Button(CPDFDoc_Environment* pApp, CPDFSDK_Annot* pWidget)
+ : CFFL_FormFiller(pApp, pWidget), m_bMouseIn(FALSE), m_bMouseDown(FALSE) {}
-FX_BOOL CFFL_Button::OnLButtonUp(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point)
-{
- CPDF_Rect rcAnnot = pAnnot->GetRect();
- if(!rcAnnot.Contains(point.x, point.y))
- return FALSE;
+CFFL_Button::~CFFL_Button() {}
- m_bMouseDown = FALSE;
- m_pWidget->GetPDFPage();
+void CFFL_Button::OnMouseEnter(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot) {
+ m_bMouseIn = TRUE;
+ FX_RECT rect = GetViewBBox(pPageView, pAnnot);
+ InvalidateRect(rect.left, rect.top, rect.right, rect.bottom);
+}
+void CFFL_Button::OnMouseExit(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot) {
+ m_bMouseIn = FALSE;
- FX_RECT rect = GetViewBBox(pPageView, pAnnot);
- InvalidateRect(rect.left, rect.top, rect.right, rect.bottom);
- return TRUE;
+ FX_RECT rect = GetViewBBox(pPageView, pAnnot);
+ InvalidateRect(rect.left, rect.top, rect.right, rect.bottom);
+ EndTimer();
+ ASSERT(m_pWidget != NULL);
}
-FX_BOOL CFFL_Button::OnMouseMove(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point)
-{
- ASSERT(m_pApp != NULL);
+FX_BOOL CFFL_Button::OnLButtonDown(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_UINT nFlags,
+ const CPDF_Point& point) {
+ CPDF_Rect rcAnnot = pAnnot->GetRect();
+ if (!rcAnnot.Contains(point.x, point.y))
+ return FALSE;
- return TRUE;
+ m_bMouseDown = TRUE;
+ m_bValid = TRUE;
+ FX_RECT rect = GetViewBBox(pPageView, pAnnot);
+ InvalidateRect(rect.left, rect.top, rect.right, rect.bottom);
+ return TRUE;
}
-void CFFL_Button::OnDraw(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot,
- CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device,
- FX_DWORD dwFlags)
-{
- ASSERT(pPageView != NULL);
- CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot;
- CPDF_FormControl* pCtrl = pWidget->GetFormControl();
- CPDF_FormControl::HighlightingMode eHM = pCtrl->GetHighlightingMode();
-
- if (eHM == CPDF_FormControl::Push)
- {
- if (m_bMouseDown)
- {
- if (pWidget->IsWidgetAppearanceValid(CPDF_Annot::Down))
- pWidget->DrawAppearance(pDevice, pUser2Device, CPDF_Annot::Down, NULL);
- else
- pWidget->DrawAppearance(pDevice, pUser2Device, CPDF_Annot::Normal, NULL);
- }
- else if (m_bMouseIn)
- {
- if (pWidget->IsWidgetAppearanceValid(CPDF_Annot::Rollover))
- pWidget->DrawAppearance(pDevice, pUser2Device, CPDF_Annot::Rollover, NULL);
- else
- pWidget->DrawAppearance(pDevice, pUser2Device, CPDF_Annot::Normal, NULL);
- }
- else
- {
- pWidget->DrawAppearance(pDevice, pUser2Device, CPDF_Annot::Normal, NULL);
- }
+FX_BOOL CFFL_Button::OnLButtonUp(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_UINT nFlags,
+ const CPDF_Point& point) {
+ CPDF_Rect rcAnnot = pAnnot->GetRect();
+ if (!rcAnnot.Contains(point.x, point.y))
+ return FALSE;
+
+ m_bMouseDown = FALSE;
+ m_pWidget->GetPDFPage();
+
+ FX_RECT rect = GetViewBBox(pPageView, pAnnot);
+ InvalidateRect(rect.left, rect.top, rect.right, rect.bottom);
+ return TRUE;
+}
+
+FX_BOOL CFFL_Button::OnMouseMove(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_UINT nFlags,
+ const CPDF_Point& point) {
+ ASSERT(m_pApp != NULL);
+
+ return TRUE;
+}
+
+void CFFL_Button::OnDraw(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ CFX_RenderDevice* pDevice,
+ CPDF_Matrix* pUser2Device,
+ FX_DWORD dwFlags) {
+ ASSERT(pPageView != NULL);
+ CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot;
+ CPDF_FormControl* pCtrl = pWidget->GetFormControl();
+ CPDF_FormControl::HighlightingMode eHM = pCtrl->GetHighlightingMode();
+
+ if (eHM == CPDF_FormControl::Push) {
+ if (m_bMouseDown) {
+ if (pWidget->IsWidgetAppearanceValid(CPDF_Annot::Down))
+ pWidget->DrawAppearance(pDevice, pUser2Device, CPDF_Annot::Down, NULL);
+ else
+ pWidget->DrawAppearance(pDevice, pUser2Device, CPDF_Annot::Normal,
+ NULL);
+ } else if (m_bMouseIn) {
+ if (pWidget->IsWidgetAppearanceValid(CPDF_Annot::Rollover))
+ pWidget->DrawAppearance(pDevice, pUser2Device, CPDF_Annot::Rollover,
+ NULL);
+ else
+ pWidget->DrawAppearance(pDevice, pUser2Device, CPDF_Annot::Normal,
+ NULL);
+ } else {
+ pWidget->DrawAppearance(pDevice, pUser2Device, CPDF_Annot::Normal, NULL);
}
- else
- pWidget->DrawAppearance(pDevice, pUser2Device, CPDF_Annot::Normal, NULL);
+ } else
+ pWidget->DrawAppearance(pDevice, pUser2Device, CPDF_Annot::Normal, NULL);
}
-
-void CFFL_Button::OnDrawDeactive(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot,
- CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device,
- FX_DWORD dwFlags)
-{
- OnDraw(pPageView, pAnnot, pDevice, pUser2Device, dwFlags);
+void CFFL_Button::OnDrawDeactive(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ CFX_RenderDevice* pDevice,
+ CPDF_Matrix* pUser2Device,
+ FX_DWORD dwFlags) {
+ OnDraw(pPageView, pAnnot, pDevice, pUser2Device, dwFlags);
}
diff --git a/fpdfsdk/src/formfiller/FFL_IFormFiller.cpp b/fpdfsdk/src/formfiller/FFL_IFormFiller.cpp
index 7ce811e85b..ad573470bd 100644
--- a/fpdfsdk/src/formfiller/FFL_IFormFiller.cpp
+++ b/fpdfsdk/src/formfiller/FFL_IFormFiller.cpp
@@ -13,941 +13,898 @@
#include "../../include/formfiller/FFL_RadioButton.h"
#include "../../include/formfiller/FFL_TextField.h"
-#define FFL_MAXLISTBOXHEIGHT 140.0f
+#define FFL_MAXLISTBOXHEIGHT 140.0f
// HHOOK CFFL_IFormFiller::m_hookSheet = NULL;
// MSG CFFL_IFormFiller::g_Msg;
-/* ----------------------------- CFFL_IFormFiller ----------------------------- */
+/* ----------------------------- CFFL_IFormFiller -----------------------------
+ */
-CFFL_IFormFiller::CFFL_IFormFiller(CPDFDoc_Environment* pApp) :
- m_pApp(pApp),
- m_bNotifying(FALSE)
-{
-}
-
-CFFL_IFormFiller::~CFFL_IFormFiller()
-{
- for (auto& it : m_Maps)
- delete it.second;
- m_Maps.clear();
-}
+CFFL_IFormFiller::CFFL_IFormFiller(CPDFDoc_Environment* pApp)
+ : m_pApp(pApp), m_bNotifying(FALSE) {}
-FX_BOOL CFFL_IFormFiller::Annot_HitTest(CPDFSDK_PageView* pPageView,CPDFSDK_Annot* pAnnot, CPDF_Point point)
-{
- CPDF_Rect rc = pAnnot->GetRect();
- if(rc.Contains(point.x, point.y))
- return TRUE;
- return FALSE;
+CFFL_IFormFiller::~CFFL_IFormFiller() {
+ for (auto& it : m_Maps)
+ delete it.second;
+ m_Maps.clear();
}
-FX_RECT CFFL_IFormFiller::GetViewBBox(CPDFSDK_PageView* pPageView, CPDFSDK_Annot* pAnnot)
-{
- if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE))
- return pFormFiller->GetViewBBox(pPageView, pAnnot);
-
- ASSERT(pPageView != NULL);
-
- CPDF_Annot* pPDFAnnot = pAnnot->GetPDFAnnot();
- CPDF_Rect rcAnnot;
- pPDFAnnot->GetRect(rcAnnot);
-
- CPDF_Rect rcWin = CPWL_Utils::InflateRect(rcAnnot, 1);
- return rcWin.GetOutterRect();
-}
-
-void CFFL_IFormFiller::OnDraw(CPDFSDK_PageView* pPageView, /*HDC hDC,*/ CPDFSDK_Annot* pAnnot,
- CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device,
- /*const CRect& rcWindow,*/ FX_DWORD dwFlags)
-{
- ASSERT(pPageView != NULL);
- CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot;
-
- if (IsVisible(pWidget))
- {
- if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE))
- {
- if (pFormFiller->IsValid())
- {
- pFormFiller->OnDraw(pPageView, pAnnot, pDevice, pUser2Device, dwFlags);
- pAnnot->GetPDFPage();
-
- CPDFSDK_Document* pDocument = m_pApp->GetSDKDocument();
- if (pDocument->GetFocusAnnot() == pAnnot)
- {
- CPDF_Rect rcFocus = pFormFiller->GetFocusBox(pPageView);
- if (!rcFocus.IsEmpty())
- {
- CFX_PathData path;
- path.SetPointCount(5);
- path.SetPoint(0, rcFocus.left, rcFocus.top, FXPT_MOVETO);
- path.SetPoint(1, rcFocus.left, rcFocus.bottom, FXPT_LINETO);
- path.SetPoint(2, rcFocus.right, rcFocus.bottom, FXPT_LINETO);
- path.SetPoint(3, rcFocus.right, rcFocus.top, FXPT_LINETO);
- path.SetPoint(4, rcFocus.left, rcFocus.top, FXPT_LINETO);
-
- CFX_GraphStateData gsd;
- gsd.SetDashCount(1);
- gsd.m_DashArray[0] = 1.0f;
- gsd.m_DashPhase = 0;
- gsd.m_LineWidth = 1.0f;
- pDevice->DrawPath(&path, pUser2Device, &gsd, 0, ArgbEncode(255,0,0,0), FXFILL_ALTERNATE);
- }
- }
- return;
- }
+FX_BOOL CFFL_IFormFiller::Annot_HitTest(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ CPDF_Point point) {
+ CPDF_Rect rc = pAnnot->GetRect();
+ if (rc.Contains(point.x, point.y))
+ return TRUE;
+ return FALSE;
+}
+
+FX_RECT CFFL_IFormFiller::GetViewBBox(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot) {
+ if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE))
+ return pFormFiller->GetViewBBox(pPageView, pAnnot);
+
+ ASSERT(pPageView != NULL);
+
+ CPDF_Annot* pPDFAnnot = pAnnot->GetPDFAnnot();
+ CPDF_Rect rcAnnot;
+ pPDFAnnot->GetRect(rcAnnot);
+
+ CPDF_Rect rcWin = CPWL_Utils::InflateRect(rcAnnot, 1);
+ return rcWin.GetOutterRect();
+}
+
+void CFFL_IFormFiller::OnDraw(CPDFSDK_PageView* pPageView,
+ /*HDC hDC,*/ CPDFSDK_Annot* pAnnot,
+ CFX_RenderDevice* pDevice,
+ CPDF_Matrix* pUser2Device,
+ /*const CRect& rcWindow,*/ FX_DWORD dwFlags) {
+ ASSERT(pPageView != NULL);
+ CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot;
+
+ if (IsVisible(pWidget)) {
+ if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) {
+ if (pFormFiller->IsValid()) {
+ pFormFiller->OnDraw(pPageView, pAnnot, pDevice, pUser2Device, dwFlags);
+ pAnnot->GetPDFPage();
+
+ CPDFSDK_Document* pDocument = m_pApp->GetSDKDocument();
+ if (pDocument->GetFocusAnnot() == pAnnot) {
+ CPDF_Rect rcFocus = pFormFiller->GetFocusBox(pPageView);
+ if (!rcFocus.IsEmpty()) {
+ CFX_PathData path;
+ path.SetPointCount(5);
+ path.SetPoint(0, rcFocus.left, rcFocus.top, FXPT_MOVETO);
+ path.SetPoint(1, rcFocus.left, rcFocus.bottom, FXPT_LINETO);
+ path.SetPoint(2, rcFocus.right, rcFocus.bottom, FXPT_LINETO);
+ path.SetPoint(3, rcFocus.right, rcFocus.top, FXPT_LINETO);
+ path.SetPoint(4, rcFocus.left, rcFocus.top, FXPT_LINETO);
+
+ CFX_GraphStateData gsd;
+ gsd.SetDashCount(1);
+ gsd.m_DashArray[0] = 1.0f;
+ gsd.m_DashPhase = 0;
+ gsd.m_LineWidth = 1.0f;
+ pDevice->DrawPath(&path, pUser2Device, &gsd, 0,
+ ArgbEncode(255, 0, 0, 0), FXFILL_ALTERNATE);
+ }
}
-
- if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE))
- pFormFiller->OnDrawDeactive(pPageView, pAnnot, pDevice, pUser2Device, dwFlags);
- else
- pWidget->DrawAppearance(pDevice, pUser2Device, CPDF_Annot::Normal, NULL);
-
- if (!IsReadOnly(pWidget) && IsFillingAllowed(pWidget))
- pWidget->DrawShadow(pDevice, pPageView);
+ return;
+ }
}
-}
-void CFFL_IFormFiller::OnCreate(CPDFSDK_Annot* pAnnot)
-{
if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE))
- {
- pFormFiller->OnCreate(pAnnot);
- }
-}
+ pFormFiller->OnDrawDeactive(pPageView, pAnnot, pDevice, pUser2Device,
+ dwFlags);
+ else
+ pWidget->DrawAppearance(pDevice, pUser2Device, CPDF_Annot::Normal, NULL);
-void CFFL_IFormFiller::OnLoad(CPDFSDK_Annot* pAnnot)
-{
- if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE))
- {
- pFormFiller->OnLoad(pAnnot);
- }
+ if (!IsReadOnly(pWidget) && IsFillingAllowed(pWidget))
+ pWidget->DrawShadow(pDevice, pPageView);
+ }
}
-void CFFL_IFormFiller::OnDelete(CPDFSDK_Annot* pAnnot)
-{
- if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE))
- {
- pFormFiller->OnDelete(pAnnot);
- }
+void CFFL_IFormFiller::OnCreate(CPDFSDK_Annot* pAnnot) {
+ if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) {
+ pFormFiller->OnCreate(pAnnot);
+ }
+}
- UnRegisterFormFiller(pAnnot);
+void CFFL_IFormFiller::OnLoad(CPDFSDK_Annot* pAnnot) {
+ if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) {
+ pFormFiller->OnLoad(pAnnot);
+ }
}
-void CFFL_IFormFiller::OnMouseEnter(CPDFSDK_PageView* pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlag)
-{
- ASSERT(pAnnot != NULL);
- ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget");
+void CFFL_IFormFiller::OnDelete(CPDFSDK_Annot* pAnnot) {
+ if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) {
+ pFormFiller->OnDelete(pAnnot);
+ }
- if (!m_bNotifying)
- {
- CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot;
- if (pWidget->GetAAction(CPDF_AAction::CursorEnter))
- {
- m_bNotifying = TRUE;
+ UnRegisterFormFiller(pAnnot);
+}
- int nValueAge = pWidget->GetValueAge();
+void CFFL_IFormFiller::OnMouseEnter(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_UINT nFlag) {
+ ASSERT(pAnnot != NULL);
+ ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget");
- pWidget->ClearAppModified();
+ if (!m_bNotifying) {
+ CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot;
+ if (pWidget->GetAAction(CPDF_AAction::CursorEnter)) {
+ m_bNotifying = TRUE;
- ASSERT(pPageView != NULL);
+ int nValueAge = pWidget->GetValueAge();
+ pWidget->ClearAppModified();
+ ASSERT(pPageView != NULL);
- PDFSDK_FieldAction fa;
- fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlag);
- fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlag);
- pWidget->OnAAction(CPDF_AAction::CursorEnter, fa, pPageView );
- m_bNotifying = FALSE;
+ PDFSDK_FieldAction fa;
+ fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlag);
+ fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlag);
+ pWidget->OnAAction(CPDF_AAction::CursorEnter, fa, pPageView);
+ m_bNotifying = FALSE;
- //if ( !IsValidAnnot(pPageView, pAnnot) ) return;
+ // if ( !IsValidAnnot(pPageView, pAnnot) ) return;
- if (pWidget->IsAppModified())
- {
- if (CFFL_FormFiller* pFormFiller = GetFormFiller(pWidget, FALSE))
- {
- pFormFiller->ResetPDFWindow(pPageView, pWidget->GetValueAge() == nValueAge);
- }
- }
+ if (pWidget->IsAppModified()) {
+ if (CFFL_FormFiller* pFormFiller = GetFormFiller(pWidget, FALSE)) {
+ pFormFiller->ResetPDFWindow(pPageView,
+ pWidget->GetValueAge() == nValueAge);
}
+ }
}
+ }
- if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, TRUE))
- {
- pFormFiller->OnMouseEnter(pPageView, pAnnot);
- }
+ if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, TRUE)) {
+ pFormFiller->OnMouseEnter(pPageView, pAnnot);
+ }
}
-void CFFL_IFormFiller::OnMouseExit(CPDFSDK_PageView* pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlag)
-{
- ASSERT(pAnnot != NULL);
- ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget");
-
- if (!m_bNotifying)
- {
- CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot;
- if (pWidget->GetAAction(CPDF_AAction::CursorExit))
- {
- m_bNotifying = TRUE;
- pWidget->GetAppearanceAge();
- int nValueAge = pWidget->GetValueAge();
- pWidget->ClearAppModified();
-
- ASSERT(pPageView != NULL);
+void CFFL_IFormFiller::OnMouseExit(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_UINT nFlag) {
+ ASSERT(pAnnot != NULL);
+ ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget");
+ if (!m_bNotifying) {
+ CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot;
+ if (pWidget->GetAAction(CPDF_AAction::CursorExit)) {
+ m_bNotifying = TRUE;
+ pWidget->GetAppearanceAge();
+ int nValueAge = pWidget->GetValueAge();
+ pWidget->ClearAppModified();
+ ASSERT(pPageView != NULL);
- PDFSDK_FieldAction fa;
- fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlag);
- fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlag);
+ PDFSDK_FieldAction fa;
+ fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlag);
+ fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlag);
- pWidget->OnAAction(CPDF_AAction::CursorExit, fa, pPageView);
- m_bNotifying = FALSE;
+ pWidget->OnAAction(CPDF_AAction::CursorExit, fa, pPageView);
+ m_bNotifying = FALSE;
- //if (!IsValidAnnot(pPageView, pAnnot)) return;
+ // if (!IsValidAnnot(pPageView, pAnnot)) return;
- if (pWidget->IsAppModified())
- {
- if (CFFL_FormFiller* pFormFiller = GetFormFiller(pWidget, FALSE))
- {
- pFormFiller->ResetPDFWindow(pPageView, nValueAge == pWidget->GetValueAge());
- }
- }
+ if (pWidget->IsAppModified()) {
+ if (CFFL_FormFiller* pFormFiller = GetFormFiller(pWidget, FALSE)) {
+ pFormFiller->ResetPDFWindow(pPageView,
+ nValueAge == pWidget->GetValueAge());
}
+ }
}
+ }
- if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE))
- {
- pFormFiller->OnMouseExit(pPageView, pAnnot);
- }
+ if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) {
+ pFormFiller->OnMouseExit(pPageView, pAnnot);
+ }
}
-FX_BOOL CFFL_IFormFiller::OnLButtonDown(CPDFSDK_PageView* pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point)
-{
- ASSERT(pAnnot != NULL);
- ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget");
-
- if (!m_bNotifying)
- {
- CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot;
- if (Annot_HitTest(pPageView, pAnnot, point) && pWidget->GetAAction(CPDF_AAction::ButtonDown))
- {
- m_bNotifying = TRUE;
- pWidget->GetAppearanceAge();
- int nValueAge = pWidget->GetValueAge();
- pWidget->ClearAppModified();
-
- ASSERT(pPageView != NULL);
+FX_BOOL CFFL_IFormFiller::OnLButtonDown(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_UINT nFlags,
+ const CPDF_Point& point) {
+ ASSERT(pAnnot != NULL);
+ ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget");
+ if (!m_bNotifying) {
+ CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot;
+ if (Annot_HitTest(pPageView, pAnnot, point) &&
+ pWidget->GetAAction(CPDF_AAction::ButtonDown)) {
+ m_bNotifying = TRUE;
+ pWidget->GetAppearanceAge();
+ int nValueAge = pWidget->GetValueAge();
+ pWidget->ClearAppModified();
+
+ ASSERT(pPageView != NULL);
+
+ PDFSDK_FieldAction fa;
+ fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlags);
+ fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlags);
+ pWidget->OnAAction(CPDF_AAction::ButtonDown, fa, pPageView);
+ m_bNotifying = FALSE;
+
+ if (!IsValidAnnot(pPageView, pAnnot))
+ return TRUE;
-
- PDFSDK_FieldAction fa;
- fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlags);
- fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlags);
- pWidget->OnAAction(CPDF_AAction::ButtonDown, fa, pPageView);
- m_bNotifying = FALSE;
-
- if (!IsValidAnnot(pPageView, pAnnot)) return TRUE;
-
- if (pWidget->IsAppModified())
- {
- if (CFFL_FormFiller* pFormFiller = GetFormFiller(pWidget, FALSE))
- {
- pFormFiller->ResetPDFWindow(pPageView, nValueAge == pWidget->GetValueAge());
- }
- }
+ if (pWidget->IsAppModified()) {
+ if (CFFL_FormFiller* pFormFiller = GetFormFiller(pWidget, FALSE)) {
+ pFormFiller->ResetPDFWindow(pPageView,
+ nValueAge == pWidget->GetValueAge());
}
+ }
}
+ }
- if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE))
- {
- return pFormFiller->OnLButtonDown(pPageView, pAnnot, nFlags, point);
- }
+ if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) {
+ return pFormFiller->OnLButtonDown(pPageView, pAnnot, nFlags, point);
+ }
- return FALSE;
+ return FALSE;
}
-FX_BOOL CFFL_IFormFiller::OnLButtonUp(CPDFSDK_PageView* pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point)
-{
- ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget");
- CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot;
- CPDFSDK_Document* pDocument = m_pApp->GetSDKDocument();
+FX_BOOL CFFL_IFormFiller::OnLButtonUp(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_UINT nFlags,
+ const CPDF_Point& point) {
+ ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget");
+ CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot;
+ CPDFSDK_Document* pDocument = m_pApp->GetSDKDocument();
- switch (pWidget->GetFieldType())
- {
+ switch (pWidget->GetFieldType()) {
case FIELDTYPE_PUSHBUTTON:
case FIELDTYPE_CHECKBOX:
case FIELDTYPE_RADIOBUTTON:
- if (GetViewBBox(pPageView, pAnnot).Contains((int)point.x, (int)point.y))
- pDocument->SetFocusAnnot(pAnnot);
- break;
- default:
+ if (GetViewBBox(pPageView, pAnnot).Contains((int)point.x, (int)point.y))
pDocument->SetFocusAnnot(pAnnot);
- break;
- }
-
- FX_BOOL bRet = FALSE;
+ break;
+ default:
+ pDocument->SetFocusAnnot(pAnnot);
+ break;
+ }
+
+ FX_BOOL bRet = FALSE;
+
+ if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) {
+ bRet = pFormFiller->OnLButtonUp(pPageView, pAnnot, nFlags, point);
+ }
+
+ if (pDocument->GetFocusAnnot() == pAnnot) {
+ FX_BOOL bExit = FALSE;
+ FX_BOOL bReset = FALSE;
+ OnButtonUp(pWidget, pPageView, bReset, bExit, nFlags);
+ if (bExit)
+ return TRUE;
+ }
+ return bRet;
+}
+
+void CFFL_IFormFiller::OnButtonUp(CPDFSDK_Widget* pWidget,
+ CPDFSDK_PageView* pPageView,
+ FX_BOOL& bReset,
+ FX_BOOL& bExit,
+ FX_UINT nFlag) {
+ ASSERT(pWidget != NULL);
+
+ if (!m_bNotifying) {
+ if (pWidget->GetAAction(CPDF_AAction::ButtonUp)) {
+ m_bNotifying = TRUE;
+ int nAge = pWidget->GetAppearanceAge();
+ int nValueAge = pWidget->GetValueAge();
+
+ ASSERT(pPageView != NULL);
+ // CReader_DocView* pDocView = pPageView->GetDocView();
+ // ASSERT(pDocView != NULL);
+
+ PDFSDK_FieldAction fa;
+ fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlag);
+ fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlag);
+
+ pWidget->OnAAction(CPDF_AAction::ButtonUp, fa, pPageView);
+ m_bNotifying = FALSE;
+
+ if (!IsValidAnnot(pPageView, pWidget)) {
+ bExit = TRUE;
+ return;
+ }
- if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE))
- {
- bRet = pFormFiller->OnLButtonUp(pPageView, pAnnot, nFlags, point);
- }
+ if (nAge != pWidget->GetAppearanceAge()) {
+ if (CFFL_FormFiller* pFormFiller = GetFormFiller(pWidget, FALSE)) {
+ pFormFiller->ResetPDFWindow(pPageView,
+ nValueAge == pWidget->GetValueAge());
+ }
- if (pDocument->GetFocusAnnot() == pAnnot)
- {
- FX_BOOL bExit = FALSE;
- FX_BOOL bReset = FALSE;
- OnButtonUp(pWidget, pPageView, bReset, bExit,nFlags);
- if (bExit) return TRUE;
+ bReset = TRUE;
+ }
}
- return bRet;
+ }
}
-void CFFL_IFormFiller::OnButtonUp(CPDFSDK_Widget* pWidget, CPDFSDK_PageView* pPageView, FX_BOOL& bReset, FX_BOOL& bExit,FX_UINT nFlag)
-{
- ASSERT(pWidget != NULL);
-
- if (!m_bNotifying)
- {
- if (pWidget->GetAAction(CPDF_AAction::ButtonUp))
- {
- m_bNotifying = TRUE;
- int nAge = pWidget->GetAppearanceAge();
- int nValueAge = pWidget->GetValueAge();
-
- ASSERT(pPageView != NULL);
-// CReader_DocView* pDocView = pPageView->GetDocView();
-// ASSERT(pDocView != NULL);
-
+FX_BOOL CFFL_IFormFiller::OnLButtonDblClk(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_UINT nFlags,
+ const CPDF_Point& point) {
+ ASSERT(pAnnot != NULL);
+ ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget");
+ if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) {
+ return pFormFiller->OnLButtonDblClk(pPageView, pAnnot, nFlags, point);
+ }
- PDFSDK_FieldAction fa;
- fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlag);
- fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlag);
-
- pWidget->OnAAction(CPDF_AAction::ButtonUp, fa, pPageView);
- m_bNotifying = FALSE;
+ return FALSE;
+}
- if (!IsValidAnnot(pPageView, pWidget))
- {
- bExit = TRUE;
- return;
- }
+FX_BOOL CFFL_IFormFiller::OnMouseMove(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_UINT nFlags,
+ const CPDF_Point& point) {
+ ASSERT(pAnnot != NULL);
+ ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget");
- if (nAge != pWidget->GetAppearanceAge())
- {
- if (CFFL_FormFiller* pFormFiller = GetFormFiller(pWidget, FALSE))
- {
- pFormFiller->ResetPDFWindow(pPageView, nValueAge == pWidget->GetValueAge());
- }
+ // change cursor
+ if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, TRUE)) {
+ return pFormFiller->OnMouseMove(pPageView, pAnnot, nFlags, point);
+ }
- bReset = TRUE;
- }
- }
- }
+ return FALSE;
}
-FX_BOOL CFFL_IFormFiller::OnLButtonDblClk(CPDFSDK_PageView* pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point)
-{
- ASSERT(pAnnot != NULL);
- ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget");
+FX_BOOL CFFL_IFormFiller::OnMouseWheel(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_UINT nFlags,
+ short zDelta,
+ const CPDF_Point& point) {
+ ASSERT(pAnnot != NULL);
+ ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget");
- if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE))
- {
- return pFormFiller->OnLButtonDblClk(pPageView, pAnnot, nFlags, point);
- }
+ if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) {
+ return pFormFiller->OnMouseWheel(pPageView, pAnnot, nFlags, zDelta, point);
+ }
- return FALSE;
+ return FALSE;
}
-FX_BOOL CFFL_IFormFiller::OnMouseMove(CPDFSDK_PageView* pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point)
-{
- ASSERT(pAnnot != NULL);
- ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget");
+FX_BOOL CFFL_IFormFiller::OnRButtonDown(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_UINT nFlags,
+ const CPDF_Point& point) {
+ ASSERT(pAnnot != NULL);
+ ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget");
- //change cursor
- if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, TRUE))
- {
- return pFormFiller->OnMouseMove(pPageView, pAnnot, nFlags, point);
- }
+ if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) {
+ return pFormFiller->OnRButtonDown(pPageView, pAnnot, nFlags, point);
+ }
- return FALSE;
+ return FALSE;
}
-FX_BOOL CFFL_IFormFiller::OnMouseWheel(CPDFSDK_PageView* pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, short zDelta, const CPDF_Point& point)
-{
- ASSERT(pAnnot != NULL);
- ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget");
+FX_BOOL CFFL_IFormFiller::OnRButtonUp(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_UINT nFlags,
+ const CPDF_Point& point) {
+ ASSERT(pAnnot != NULL);
+ ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget");
- if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE))
- {
- return pFormFiller->OnMouseWheel(pPageView, pAnnot, nFlags, zDelta, point);
- }
+ if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) {
+ return pFormFiller->OnRButtonUp(pPageView, pAnnot, nFlags, point);
+ }
- return FALSE;
+ return FALSE;
}
-FX_BOOL CFFL_IFormFiller::OnRButtonDown(CPDFSDK_PageView* pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point)
-{
- ASSERT(pAnnot != NULL);
- ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget");
+FX_BOOL CFFL_IFormFiller::OnKeyDown(CPDFSDK_Annot* pAnnot,
+ FX_UINT nKeyCode,
+ FX_UINT nFlags) {
+ ASSERT(pAnnot != NULL);
+ ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget");
- if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE))
- {
- return pFormFiller->OnRButtonDown(pPageView, pAnnot, nFlags, point);
- }
+ if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) {
+ return pFormFiller->OnKeyDown(pAnnot, nKeyCode, nFlags);
+ }
- return FALSE;
+ return FALSE;
}
-FX_BOOL CFFL_IFormFiller::OnRButtonUp(CPDFSDK_PageView* pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point)
-{
- ASSERT(pAnnot != NULL);
- ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget");
+FX_BOOL CFFL_IFormFiller::OnChar(CPDFSDK_Annot* pAnnot,
+ FX_UINT nChar,
+ FX_UINT nFlags) {
+ ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget");
+ if (nChar == FWL_VKEY_Tab)
+ return TRUE;
- if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE))
- {
- return pFormFiller->OnRButtonUp(pPageView, pAnnot, nFlags, point);
- }
+ if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE))
+ return pFormFiller->OnChar(pAnnot, nChar, nFlags);
- return FALSE;
+ return FALSE;
}
-FX_BOOL CFFL_IFormFiller::OnKeyDown(CPDFSDK_Annot* pAnnot, FX_UINT nKeyCode, FX_UINT nFlags)
-{
- ASSERT(pAnnot != NULL);
- ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget");
-
- if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE))
- {
- return pFormFiller->OnKeyDown(pAnnot, nKeyCode, nFlags);
- }
-
+FX_BOOL CFFL_IFormFiller::OnSetFocus(CPDFSDK_Annot* pAnnot, FX_UINT nFlag) {
+ if (!pAnnot)
return FALSE;
-}
-FX_BOOL CFFL_IFormFiller::OnChar(CPDFSDK_Annot* pAnnot, FX_UINT nChar, FX_UINT nFlags)
-{
- ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget");
- if (nChar == FWL_VKEY_Tab)
- return TRUE;
+ ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget");
- if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE))
- return pFormFiller->OnChar(pAnnot, nChar, nFlags);
+ if (!m_bNotifying) {
+ CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot;
+ if (pWidget->GetAAction(CPDF_AAction::GetFocus)) {
+ m_bNotifying = TRUE;
+ pWidget->GetAppearanceAge();
- return FALSE;
-}
+ int nValueAge = pWidget->GetValueAge();
+ pWidget->ClearAppModified();
-FX_BOOL CFFL_IFormFiller::OnSetFocus(CPDFSDK_Annot* pAnnot,FX_UINT nFlag)
-{
- if (!pAnnot)
- return FALSE;
+ CPDFSDK_PageView* pPageView = pAnnot->GetPageView();
+ ASSERT(pPageView != NULL);
- ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget");
+ PDFSDK_FieldAction fa;
+ fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlag);
+ fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlag);
- if (!m_bNotifying)
- {
- CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot;
- if (pWidget->GetAAction(CPDF_AAction::GetFocus))
- {
- m_bNotifying = TRUE;
- pWidget->GetAppearanceAge();
-
- int nValueAge = pWidget->GetValueAge();
- pWidget->ClearAppModified();
-
- CPDFSDK_PageView* pPageView = pAnnot->GetPageView();
- ASSERT(pPageView != NULL);
-
- PDFSDK_FieldAction fa;
- fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlag);
- fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlag);
-
- CFFL_FormFiller* pFormFiller = GetFormFiller(pWidget, TRUE);
- if(!pFormFiller) return FALSE;
- pFormFiller->GetActionData(pPageView, CPDF_AAction::GetFocus, fa);
- pWidget->OnAAction(CPDF_AAction::GetFocus, fa, pPageView);
- m_bNotifying = FALSE;
-
- if (pWidget->IsAppModified())
- {
- if (CFFL_FormFiller* pFormFiller = GetFormFiller(pWidget, FALSE))
- {
- pFormFiller->ResetPDFWindow(pPageView, nValueAge == pWidget->GetValueAge());
- }
- }
+ CFFL_FormFiller* pFormFiller = GetFormFiller(pWidget, TRUE);
+ if (!pFormFiller)
+ return FALSE;
+ pFormFiller->GetActionData(pPageView, CPDF_AAction::GetFocus, fa);
+ pWidget->OnAAction(CPDF_AAction::GetFocus, fa, pPageView);
+ m_bNotifying = FALSE;
+
+ if (pWidget->IsAppModified()) {
+ if (CFFL_FormFiller* pFormFiller = GetFormFiller(pWidget, FALSE)) {
+ pFormFiller->ResetPDFWindow(pPageView,
+ nValueAge == pWidget->GetValueAge());
}
+ }
}
+ }
- if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, TRUE))
- return pFormFiller->OnSetFocus(pAnnot, nFlag);
+ if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, TRUE))
+ return pFormFiller->OnSetFocus(pAnnot, nFlag);
- return TRUE;
+ return TRUE;
}
-FX_BOOL CFFL_IFormFiller::OnKillFocus(CPDFSDK_Annot* pAnnot,FX_UINT nFlag)
-{
- if(!pAnnot) return FALSE;
- ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget");
+FX_BOOL CFFL_IFormFiller::OnKillFocus(CPDFSDK_Annot* pAnnot, FX_UINT nFlag) {
+ if (!pAnnot)
+ return FALSE;
+ ASSERT(pAnnot->GetPDFAnnot()->GetSubType() == "Widget");
- if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE))
- {
- if (pFormFiller->OnKillFocus(pAnnot, nFlag))
- {
- if (!m_bNotifying)
- {
- CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot;
- if (pWidget->GetAAction(CPDF_AAction::LoseFocus))
- {
- m_bNotifying = TRUE;
- pWidget->ClearAppModified();
-
- CPDFSDK_PageView* pPageView = pWidget->GetPageView();
- ASSERT(pPageView != NULL);
-
- PDFSDK_FieldAction fa;
- fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlag);
- fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlag);
-
- pFormFiller->GetActionData(pPageView, CPDF_AAction::LoseFocus, fa);
-
- pWidget->OnAAction(CPDF_AAction::LoseFocus, fa, pPageView);
- m_bNotifying = FALSE;
-
- }
- }
- }
- else
- return FALSE;
- }
+ if (CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, FALSE)) {
+ if (pFormFiller->OnKillFocus(pAnnot, nFlag)) {
+ if (!m_bNotifying) {
+ CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot;
+ if (pWidget->GetAAction(CPDF_AAction::LoseFocus)) {
+ m_bNotifying = TRUE;
+ pWidget->ClearAppModified();
- return TRUE;
-}
+ CPDFSDK_PageView* pPageView = pWidget->GetPageView();
+ ASSERT(pPageView != NULL);
-FX_BOOL CFFL_IFormFiller::IsVisible(CPDFSDK_Widget* pWidget)
-{
- return pWidget->IsVisible();
-}
+ PDFSDK_FieldAction fa;
+ fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlag);
+ fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlag);
-FX_BOOL CFFL_IFormFiller::IsReadOnly(CPDFSDK_Widget* pWidget)
-{
- ASSERT(pWidget != NULL);
+ pFormFiller->GetActionData(pPageView, CPDF_AAction::LoseFocus, fa);
- int nFieldFlags = pWidget->GetFieldFlags();
+ pWidget->OnAAction(CPDF_AAction::LoseFocus, fa, pPageView);
+ m_bNotifying = FALSE;
+ }
+ }
+ } else
+ return FALSE;
+ }
- return (nFieldFlags & FIELDFLAG_READONLY) == FIELDFLAG_READONLY;
+ return TRUE;
}
-FX_BOOL CFFL_IFormFiller::IsFillingAllowed(CPDFSDK_Widget* pWidget)
-{
- ASSERT(pWidget != NULL);
+FX_BOOL CFFL_IFormFiller::IsVisible(CPDFSDK_Widget* pWidget) {
+ return pWidget->IsVisible();
+}
- if (pWidget->GetFieldType() == FIELDTYPE_PUSHBUTTON)
- return TRUE;
- else
- {
- CPDF_Page* pPage = pWidget->GetPDFPage();
- ASSERT(pPage != NULL);
+FX_BOOL CFFL_IFormFiller::IsReadOnly(CPDFSDK_Widget* pWidget) {
+ ASSERT(pWidget != NULL);
- CPDF_Document* pDocument = pPage->m_pDocument;
- ASSERT(pDocument != NULL);
+ int nFieldFlags = pWidget->GetFieldFlags();
- FX_DWORD dwPermissions = pDocument->GetUserPermissions();
- return (dwPermissions&FPDFPERM_FILL_FORM) ||
- (dwPermissions&FPDFPERM_ANNOT_FORM) ||
- (dwPermissions&FPDFPERM_MODIFY);
- }
- return TRUE;
+ return (nFieldFlags & FIELDFLAG_READONLY) == FIELDFLAG_READONLY;
}
-CFFL_FormFiller* CFFL_IFormFiller::GetFormFiller(CPDFSDK_Annot* pAnnot, FX_BOOL bRegister)
-{
- auto it = m_Maps.find(pAnnot);
- if (it != m_Maps.end())
- return it->second;
+FX_BOOL CFFL_IFormFiller::IsFillingAllowed(CPDFSDK_Widget* pWidget) {
+ ASSERT(pWidget != NULL);
- if (!bRegister)
- return nullptr;
-
- CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot;
- int nFieldType = pWidget->GetFieldType();
- CFFL_FormFiller* pFormFiller;
- switch (nFieldType) {
- case FIELDTYPE_PUSHBUTTON:
- pFormFiller = new CFFL_PushButton(m_pApp, pWidget);
- break;
- case FIELDTYPE_CHECKBOX:
- pFormFiller = new CFFL_CheckBox(m_pApp, pWidget);
- break;
- case FIELDTYPE_RADIOBUTTON:
- pFormFiller = new CFFL_RadioButton(m_pApp, pWidget);
- break;
- case FIELDTYPE_TEXTFIELD:
- pFormFiller = new CFFL_TextField(m_pApp, pWidget);
- break;
- case FIELDTYPE_LISTBOX:
- pFormFiller = new CFFL_ListBox(m_pApp, pWidget);
- break;
- case FIELDTYPE_COMBOBOX:
- pFormFiller = new CFFL_ComboBox(m_pApp, pWidget);
- break;
- case FIELDTYPE_UNKNOWN:
- default:
- pFormFiller = nullptr;
- break;
- }
+ if (pWidget->GetFieldType() == FIELDTYPE_PUSHBUTTON)
+ return TRUE;
+ else {
+ CPDF_Page* pPage = pWidget->GetPDFPage();
+ ASSERT(pPage != NULL);
+
+ CPDF_Document* pDocument = pPage->m_pDocument;
+ ASSERT(pDocument != NULL);
+
+ FX_DWORD dwPermissions = pDocument->GetUserPermissions();
+ return (dwPermissions & FPDFPERM_FILL_FORM) ||
+ (dwPermissions & FPDFPERM_ANNOT_FORM) ||
+ (dwPermissions & FPDFPERM_MODIFY);
+ }
+ return TRUE;
+}
+
+CFFL_FormFiller* CFFL_IFormFiller::GetFormFiller(CPDFSDK_Annot* pAnnot,
+ FX_BOOL bRegister) {
+ auto it = m_Maps.find(pAnnot);
+ if (it != m_Maps.end())
+ return it->second;
+
+ if (!bRegister)
+ return nullptr;
+
+ CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot;
+ int nFieldType = pWidget->GetFieldType();
+ CFFL_FormFiller* pFormFiller;
+ switch (nFieldType) {
+ case FIELDTYPE_PUSHBUTTON:
+ pFormFiller = new CFFL_PushButton(m_pApp, pWidget);
+ break;
+ case FIELDTYPE_CHECKBOX:
+ pFormFiller = new CFFL_CheckBox(m_pApp, pWidget);
+ break;
+ case FIELDTYPE_RADIOBUTTON:
+ pFormFiller = new CFFL_RadioButton(m_pApp, pWidget);
+ break;
+ case FIELDTYPE_TEXTFIELD:
+ pFormFiller = new CFFL_TextField(m_pApp, pWidget);
+ break;
+ case FIELDTYPE_LISTBOX:
+ pFormFiller = new CFFL_ListBox(m_pApp, pWidget);
+ break;
+ case FIELDTYPE_COMBOBOX:
+ pFormFiller = new CFFL_ComboBox(m_pApp, pWidget);
+ break;
+ case FIELDTYPE_UNKNOWN:
+ default:
+ pFormFiller = nullptr;
+ break;
+ }
- if (!pFormFiller)
- return nullptr;
+ if (!pFormFiller)
+ return nullptr;
- m_Maps[pAnnot] = pFormFiller;
- return pFormFiller;
+ m_Maps[pAnnot] = pFormFiller;
+ return pFormFiller;
}
-void CFFL_IFormFiller::RemoveFormFiller(CPDFSDK_Annot* pAnnot)
-{
- if ( pAnnot != NULL )
- {
- UnRegisterFormFiller( pAnnot );
- }
+void CFFL_IFormFiller::RemoveFormFiller(CPDFSDK_Annot* pAnnot) {
+ if (pAnnot != NULL) {
+ UnRegisterFormFiller(pAnnot);
+ }
}
-void CFFL_IFormFiller::UnRegisterFormFiller(CPDFSDK_Annot* pAnnot)
-{
- auto it = m_Maps.find(pAnnot);
- if (it == m_Maps.end())
- return;
+void CFFL_IFormFiller::UnRegisterFormFiller(CPDFSDK_Annot* pAnnot) {
+ auto it = m_Maps.find(pAnnot);
+ if (it == m_Maps.end())
+ return;
- delete it->second;
- m_Maps.erase(it);
+ delete it->second;
+ m_Maps.erase(it);
}
-void CFFL_IFormFiller::QueryWherePopup(void* pPrivateData, FX_FLOAT fPopupMin,FX_FLOAT fPopupMax, int32_t & nRet, FX_FLOAT & fPopupRet)
-{
- ASSERT(pPrivateData != NULL);
-
- CFFL_PrivateData* pData = (CFFL_PrivateData*)pPrivateData;
+void CFFL_IFormFiller::QueryWherePopup(void* pPrivateData,
+ FX_FLOAT fPopupMin,
+ FX_FLOAT fPopupMax,
+ int32_t& nRet,
+ FX_FLOAT& fPopupRet) {
+ ASSERT(pPrivateData != NULL);
+ CFFL_PrivateData* pData = (CFFL_PrivateData*)pPrivateData;
+ CPDF_Rect rcPageView(0, 0, 0, 0);
+ rcPageView.right = pData->pWidget->GetPDFPage()->GetPageWidth();
+ rcPageView.bottom = pData->pWidget->GetPDFPage()->GetPageHeight();
+ rcPageView.Normalize();
+ ASSERT(pData->pWidget != NULL);
+ CPDF_Rect rcAnnot = pData->pWidget->GetRect();
- CPDF_Rect rcPageView(0,0,0,0);
- rcPageView.right = pData->pWidget->GetPDFPage()->GetPageWidth();
- rcPageView.bottom = pData->pWidget->GetPDFPage()->GetPageHeight();
- rcPageView.Normalize();
+ FX_FLOAT fTop = 0.0f;
+ FX_FLOAT fBottom = 0.0f;
-
- ASSERT(pData->pWidget != NULL);
- CPDF_Rect rcAnnot = pData->pWidget->GetRect();
-
- FX_FLOAT fTop = 0.0f;
- FX_FLOAT fBottom = 0.0f;
-
- CPDFSDK_Widget * pWidget = (CPDFSDK_Widget*)pData->pWidget;
- switch (pWidget->GetRotate() / 90)
- {
+ CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pData->pWidget;
+ switch (pWidget->GetRotate() / 90) {
default:
case 0:
- fTop = rcPageView.top - rcAnnot.top;
- fBottom = rcAnnot.bottom - rcPageView.bottom;
- break;
+ fTop = rcPageView.top - rcAnnot.top;
+ fBottom = rcAnnot.bottom - rcPageView.bottom;
+ break;
case 1:
- fTop = rcAnnot.left - rcPageView.left;
- fBottom = rcPageView.right - rcAnnot.right;
- break;
+ fTop = rcAnnot.left - rcPageView.left;
+ fBottom = rcPageView.right - rcAnnot.right;
+ break;
case 2:
- fTop = rcAnnot.bottom - rcPageView.bottom;
- fBottom = rcPageView.top - rcAnnot.top;
- break;
+ fTop = rcAnnot.bottom - rcPageView.bottom;
+ fBottom = rcPageView.top - rcAnnot.top;
+ break;
case 3:
- fTop = rcPageView.right - rcAnnot.right;
- fBottom = rcAnnot.left - rcPageView.left;
- break;
- }
-
- FX_FLOAT fFactHeight = 0;
- FX_BOOL bBottom = TRUE;
- FX_FLOAT fMaxListBoxHeight = 0;
- if (fPopupMax > FFL_MAXLISTBOXHEIGHT)
- {
- if (fPopupMin > FFL_MAXLISTBOXHEIGHT)
- {
- fMaxListBoxHeight = fPopupMin;
- }
- else
- {
- fMaxListBoxHeight = FFL_MAXLISTBOXHEIGHT;
- }
- }
- else
- fMaxListBoxHeight = fPopupMax;
-
- if (fBottom > fMaxListBoxHeight)
- {
- fFactHeight = fMaxListBoxHeight;
+ fTop = rcPageView.right - rcAnnot.right;
+ fBottom = rcAnnot.left - rcPageView.left;
+ break;
+ }
+
+ FX_FLOAT fFactHeight = 0;
+ FX_BOOL bBottom = TRUE;
+ FX_FLOAT fMaxListBoxHeight = 0;
+ if (fPopupMax > FFL_MAXLISTBOXHEIGHT) {
+ if (fPopupMin > FFL_MAXLISTBOXHEIGHT) {
+ fMaxListBoxHeight = fPopupMin;
+ } else {
+ fMaxListBoxHeight = FFL_MAXLISTBOXHEIGHT;
+ }
+ } else
+ fMaxListBoxHeight = fPopupMax;
+
+ if (fBottom > fMaxListBoxHeight) {
+ fFactHeight = fMaxListBoxHeight;
+ bBottom = TRUE;
+ } else {
+ if (fTop > fMaxListBoxHeight) {
+ fFactHeight = fMaxListBoxHeight;
+ bBottom = FALSE;
+ } else {
+ if (fTop > fBottom) {
+ fFactHeight = fTop;
+ bBottom = FALSE;
+ } else {
+ fFactHeight = fBottom;
bBottom = TRUE;
+ }
}
- else
- {
- if (fTop > fMaxListBoxHeight)
- {
- fFactHeight = fMaxListBoxHeight;
- bBottom = FALSE;
- }
- else
- {
- if (fTop > fBottom)
- {
- fFactHeight = fTop;
- bBottom = FALSE;
- }
- else
- {
- fFactHeight = fBottom;
- bBottom = TRUE;
- }
- }
- }
+ }
- nRet = bBottom ? 0 : 1;
- fPopupRet = fFactHeight;
+ nRet = bBottom ? 0 : 1;
+ fPopupRet = fFactHeight;
}
-void CFFL_IFormFiller::OnKeyStrokeCommit(CPDFSDK_Widget* pWidget, CPDFSDK_PageView* pPageView, FX_BOOL& bRC, FX_BOOL& bExit, FX_DWORD nFlag)
-{
- if (!m_bNotifying)
- {
- ASSERT(pWidget != NULL);
- if (pWidget->GetAAction(CPDF_AAction::KeyStroke))
- {
- m_bNotifying = TRUE;
- pWidget->ClearAppModified();
+void CFFL_IFormFiller::OnKeyStrokeCommit(CPDFSDK_Widget* pWidget,
+ CPDFSDK_PageView* pPageView,
+ FX_BOOL& bRC,
+ FX_BOOL& bExit,
+ FX_DWORD nFlag) {
+ if (!m_bNotifying) {
+ ASSERT(pWidget != NULL);
+ if (pWidget->GetAAction(CPDF_AAction::KeyStroke)) {
+ m_bNotifying = TRUE;
+ pWidget->ClearAppModified();
- ASSERT(pPageView != NULL);
+ ASSERT(pPageView != NULL);
- PDFSDK_FieldAction fa;
- fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlag);
- fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlag);
- fa.bWillCommit = TRUE;
- fa.bKeyDown = TRUE;
- fa.bRC = TRUE;
+ PDFSDK_FieldAction fa;
+ fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlag);
+ fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlag);
+ fa.bWillCommit = TRUE;
+ fa.bKeyDown = TRUE;
+ fa.bRC = TRUE;
- CFFL_FormFiller* pFormFiller = GetFormFiller(pWidget, FALSE);
- ASSERT(pFormFiller != NULL);
+ CFFL_FormFiller* pFormFiller = GetFormFiller(pWidget, FALSE);
+ ASSERT(pFormFiller != NULL);
- pFormFiller->GetActionData(pPageView, CPDF_AAction::KeyStroke, fa);
- pFormFiller->SaveState(pPageView);
+ pFormFiller->GetActionData(pPageView, CPDF_AAction::KeyStroke, fa);
+ pFormFiller->SaveState(pPageView);
- PDFSDK_FieldAction faOld = fa;
- pWidget->OnAAction(CPDF_AAction::KeyStroke, fa, pPageView);
+ PDFSDK_FieldAction faOld = fa;
+ pWidget->OnAAction(CPDF_AAction::KeyStroke, fa, pPageView);
- bRC = fa.bRC;
-// bExit = !IsValidAnnot(m_pApp, pDocument, pDocView, pPageView, pWidget);
+ bRC = fa.bRC;
+ // bExit = !IsValidAnnot(m_pApp, pDocument, pDocView, pPageView,
+ // pWidget);
- m_bNotifying = FALSE;
- }
+ m_bNotifying = FALSE;
}
+ }
}
-void CFFL_IFormFiller::OnValidate(CPDFSDK_Widget* pWidget, CPDFSDK_PageView* pPageView, FX_BOOL& bRC, FX_BOOL& bExit, FX_DWORD nFlag)
-{
- if (!m_bNotifying)
- {
- ASSERT(pWidget != NULL);
- if (pWidget->GetAAction(CPDF_AAction::Validate))
- {
- m_bNotifying = TRUE;
- pWidget->ClearAppModified();
-
- ASSERT(pPageView != NULL);
-// CReader_DocView* pDocView = pPageView->GetDocView();
-// ASSERT(pDocView != NULL);
-
+void CFFL_IFormFiller::OnValidate(CPDFSDK_Widget* pWidget,
+ CPDFSDK_PageView* pPageView,
+ FX_BOOL& bRC,
+ FX_BOOL& bExit,
+ FX_DWORD nFlag) {
+ if (!m_bNotifying) {
+ ASSERT(pWidget != NULL);
+ if (pWidget->GetAAction(CPDF_AAction::Validate)) {
+ m_bNotifying = TRUE;
+ pWidget->ClearAppModified();
+ ASSERT(pPageView != NULL);
+ // CReader_DocView* pDocView = pPageView->GetDocView();
+ // ASSERT(pDocView != NULL);
- PDFSDK_FieldAction fa;
- fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlag);
- fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlag);
- fa.bKeyDown = TRUE;
- fa.bRC = TRUE;
+ PDFSDK_FieldAction fa;
+ fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlag);
+ fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlag);
+ fa.bKeyDown = TRUE;
+ fa.bRC = TRUE;
- CFFL_FormFiller* pFormFiller = GetFormFiller(pWidget, FALSE);
- ASSERT(pFormFiller != NULL);
+ CFFL_FormFiller* pFormFiller = GetFormFiller(pWidget, FALSE);
+ ASSERT(pFormFiller != NULL);
- pFormFiller->GetActionData(pPageView, CPDF_AAction::Validate, fa);
- pFormFiller->SaveState(pPageView);
+ pFormFiller->GetActionData(pPageView, CPDF_AAction::Validate, fa);
+ pFormFiller->SaveState(pPageView);
- PDFSDK_FieldAction faOld = fa;
- pWidget->OnAAction(CPDF_AAction::Validate, fa, pPageView);
+ PDFSDK_FieldAction faOld = fa;
+ pWidget->OnAAction(CPDF_AAction::Validate, fa, pPageView);
- bRC = fa.bRC;
-// bExit = !IsValidAnnot(m_pApp, pDocument, pDocView, pPageView, pWidget);
+ bRC = fa.bRC;
+ // bExit = !IsValidAnnot(m_pApp, pDocument, pDocView, pPageView,
+ // pWidget);
- m_bNotifying = FALSE;
- }
+ m_bNotifying = FALSE;
}
+ }
}
-void CFFL_IFormFiller::OnCalculate(CPDFSDK_Widget* pWidget, CPDFSDK_PageView* pPageView, FX_BOOL& bExit, FX_DWORD nFlag)
-{
- if (!m_bNotifying)
- {
- ASSERT(pWidget != NULL);
- ASSERT(pPageView != NULL);
-// CReader_DocView* pDocView = pPageView->GetDocView();
-// ASSERT(pDocView != NULL);
- CPDFSDK_Document* pDocument = pPageView->GetSDKDocument();
- ASSERT(pDocument != NULL);
+void CFFL_IFormFiller::OnCalculate(CPDFSDK_Widget* pWidget,
+ CPDFSDK_PageView* pPageView,
+ FX_BOOL& bExit,
+ FX_DWORD nFlag) {
+ if (!m_bNotifying) {
+ ASSERT(pWidget != NULL);
+ ASSERT(pPageView != NULL);
+ // CReader_DocView* pDocView = pPageView->GetDocView();
+ // ASSERT(pDocView != NULL);
+ CPDFSDK_Document* pDocument = pPageView->GetSDKDocument();
+ ASSERT(pDocument != NULL);
- CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm();
- ASSERT(pInterForm != NULL);
+ CPDFSDK_InterForm* pInterForm =
+ (CPDFSDK_InterForm*)pDocument->GetInterForm();
+ ASSERT(pInterForm != NULL);
- pInterForm->OnCalculate(pWidget->GetFormField());
+ pInterForm->OnCalculate(pWidget->GetFormField());
-// bExit = !IsValidAnnot(m_pApp, pDocument, pDocView, pPageView, pWidget);
+ // bExit = !IsValidAnnot(m_pApp, pDocument, pDocView, pPageView,
+ // pWidget);
- m_bNotifying = FALSE;
- }
+ m_bNotifying = FALSE;
+ }
}
-void CFFL_IFormFiller::OnFormat(CPDFSDK_Widget* pWidget, CPDFSDK_PageView* pPageView, FX_BOOL& bExit, FX_DWORD nFlag)
-{
- if (!m_bNotifying)
- {
- ASSERT(pWidget != NULL);
- ASSERT(pPageView != NULL);
-// CReader_DocView* pDocView = pPageView->GetDocView();
-// ASSERT(pDocView != NULL);
- CPDFSDK_Document* pDocument = pPageView->GetSDKDocument();
- ASSERT(pDocument != NULL);
-
- CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm();
- ASSERT(pInterForm != NULL);
+void CFFL_IFormFiller::OnFormat(CPDFSDK_Widget* pWidget,
+ CPDFSDK_PageView* pPageView,
+ FX_BOOL& bExit,
+ FX_DWORD nFlag) {
+ if (!m_bNotifying) {
+ ASSERT(pWidget != NULL);
+ ASSERT(pPageView != NULL);
+ // CReader_DocView* pDocView = pPageView->GetDocView();
+ // ASSERT(pDocView != NULL);
+ CPDFSDK_Document* pDocument = pPageView->GetSDKDocument();
+ ASSERT(pDocument != NULL);
- FX_BOOL bFormated = FALSE;
- CFX_WideString sValue = pInterForm->OnFormat(pWidget->GetFormField(), bFormated);
+ CPDFSDK_InterForm* pInterForm =
+ (CPDFSDK_InterForm*)pDocument->GetInterForm();
+ ASSERT(pInterForm != NULL);
-// bExit = !IsValidAnnot(m_pApp, pDocument, pDocView, pPageView, pWidget);
+ FX_BOOL bFormated = FALSE;
+ CFX_WideString sValue =
+ pInterForm->OnFormat(pWidget->GetFormField(), bFormated);
- if (bExit) return;
+ // bExit = !IsValidAnnot(m_pApp, pDocument, pDocView, pPageView,
+ // pWidget);
- if (bFormated)
- {
- pInterForm->ResetFieldAppearance(pWidget->GetFormField(), sValue.c_str(), TRUE);
- pInterForm->UpdateField(pWidget->GetFormField());
- }
+ if (bExit)
+ return;
- m_bNotifying = FALSE;
+ if (bFormated) {
+ pInterForm->ResetFieldAppearance(pWidget->GetFormField(), sValue.c_str(),
+ TRUE);
+ pInterForm->UpdateField(pWidget->GetFormField());
}
+
+ m_bNotifying = FALSE;
+ }
}
-FX_BOOL CFFL_IFormFiller::IsValidAnnot(CPDFSDK_PageView* pPageView, CPDFSDK_Annot* pAnnot)
-{
+FX_BOOL CFFL_IFormFiller::IsValidAnnot(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot) {
+ ASSERT(pPageView != NULL);
+ ASSERT(pAnnot != NULL);
- ASSERT(pPageView != NULL);
- ASSERT(pAnnot != NULL);
-
- if(pPageView)
- return pPageView->IsValidAnnot(pAnnot->GetPDFAnnot());
- else
- return FALSE;
+ if (pPageView)
+ return pPageView->IsValidAnnot(pAnnot->GetPDFAnnot());
+ else
+ return FALSE;
}
-void CFFL_IFormFiller::OnBeforeKeyStroke(FX_BOOL bEditOrList, void* pPrivateData, int32_t nKeyCode,
- CFX_WideString & strChange, const CFX_WideString& strChangeEx,
- int nSelStart, int nSelEnd,
- FX_BOOL bKeyDown, FX_BOOL & bRC, FX_BOOL & bExit, FX_DWORD nFlag)
-{
- ASSERT(pPrivateData != NULL);
- CFFL_PrivateData* pData = (CFFL_PrivateData*)pPrivateData;
- ASSERT(pData->pWidget != NULL);
-
- CFFL_FormFiller* pFormFiller = GetFormFiller(pData->pWidget, FALSE);
- ASSERT(pFormFiller != NULL);
-
- if (!m_bNotifying)
- {
- if (pData->pWidget->GetAAction(CPDF_AAction::KeyStroke))
- {
- m_bNotifying = TRUE;
- int nAge = pData->pWidget->GetAppearanceAge();
- int nValueAge = pData->pWidget->GetValueAge();
-
- ASSERT(pData->pPageView != NULL);
- CPDFSDK_Document* pDocument = pData->pPageView->GetSDKDocument();
-
- PDFSDK_FieldAction fa;
- fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlag);
- fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlag);
- fa.sChange = strChange;
- fa.sChangeEx = strChangeEx;
- fa.bKeyDown = bKeyDown;
- fa.bWillCommit = FALSE;
- fa.bRC = TRUE;
- fa.nSelStart = nSelStart;
- fa.nSelEnd = nSelEnd;
-
-
- pFormFiller->GetActionData(pData->pPageView, CPDF_AAction::KeyStroke, fa);
- pFormFiller->SaveState(pData->pPageView);
-
- if (pData->pWidget->OnAAction(CPDF_AAction::KeyStroke, fa, pData->pPageView))
- {
- if (!IsValidAnnot(pData->pPageView, pData->pWidget))
- {
- bExit = TRUE;
- m_bNotifying = FALSE;
- return;
- }
-
- if (nAge != pData->pWidget->GetAppearanceAge())
- {
- CPWL_Wnd* pWnd = pFormFiller->ResetPDFWindow(pData->pPageView, nValueAge == pData->pWidget->GetValueAge());
- pData = (CFFL_PrivateData*)pWnd->GetAttachedData();
- bExit = TRUE;
- }
-
- if (fa.bRC)
- {
- pFormFiller->SetActionData(pData->pPageView, CPDF_AAction::KeyStroke, fa);
- bRC = FALSE;
- }
- else
- {
- pFormFiller->RestoreState(pData->pPageView);
- bRC = FALSE;
- }
-
- if (pDocument->GetFocusAnnot() != pData->pWidget)
- {
- pFormFiller->CommitData(pData->pPageView,nFlag);
- bExit = TRUE;
- }
- }
- else
- {
- if (!IsValidAnnot(pData->pPageView, pData->pWidget))
- {
- bExit = TRUE;
- m_bNotifying = FALSE;
- return;
- }
- }
-
- m_bNotifying = FALSE;
+void CFFL_IFormFiller::OnBeforeKeyStroke(FX_BOOL bEditOrList,
+ void* pPrivateData,
+ int32_t nKeyCode,
+ CFX_WideString& strChange,
+ const CFX_WideString& strChangeEx,
+ int nSelStart,
+ int nSelEnd,
+ FX_BOOL bKeyDown,
+ FX_BOOL& bRC,
+ FX_BOOL& bExit,
+ FX_DWORD nFlag) {
+ ASSERT(pPrivateData != NULL);
+ CFFL_PrivateData* pData = (CFFL_PrivateData*)pPrivateData;
+ ASSERT(pData->pWidget != NULL);
+
+ CFFL_FormFiller* pFormFiller = GetFormFiller(pData->pWidget, FALSE);
+ ASSERT(pFormFiller != NULL);
+
+ if (!m_bNotifying) {
+ if (pData->pWidget->GetAAction(CPDF_AAction::KeyStroke)) {
+ m_bNotifying = TRUE;
+ int nAge = pData->pWidget->GetAppearanceAge();
+ int nValueAge = pData->pWidget->GetValueAge();
+
+ ASSERT(pData->pPageView != NULL);
+ CPDFSDK_Document* pDocument = pData->pPageView->GetSDKDocument();
+
+ PDFSDK_FieldAction fa;
+ fa.bModifier = m_pApp->FFI_IsCTRLKeyDown(nFlag);
+ fa.bShift = m_pApp->FFI_IsSHIFTKeyDown(nFlag);
+ fa.sChange = strChange;
+ fa.sChangeEx = strChangeEx;
+ fa.bKeyDown = bKeyDown;
+ fa.bWillCommit = FALSE;
+ fa.bRC = TRUE;
+ fa.nSelStart = nSelStart;
+ fa.nSelEnd = nSelEnd;
+
+ pFormFiller->GetActionData(pData->pPageView, CPDF_AAction::KeyStroke, fa);
+ pFormFiller->SaveState(pData->pPageView);
+
+ if (pData->pWidget->OnAAction(CPDF_AAction::KeyStroke, fa,
+ pData->pPageView)) {
+ if (!IsValidAnnot(pData->pPageView, pData->pWidget)) {
+ bExit = TRUE;
+ m_bNotifying = FALSE;
+ return;
+ }
+
+ if (nAge != pData->pWidget->GetAppearanceAge()) {
+ CPWL_Wnd* pWnd = pFormFiller->ResetPDFWindow(
+ pData->pPageView, nValueAge == pData->pWidget->GetValueAge());
+ pData = (CFFL_PrivateData*)pWnd->GetAttachedData();
+ bExit = TRUE;
+ }
+
+ if (fa.bRC) {
+ pFormFiller->SetActionData(pData->pPageView, CPDF_AAction::KeyStroke,
+ fa);
+ bRC = FALSE;
+ } else {
+ pFormFiller->RestoreState(pData->pPageView);
+ bRC = FALSE;
+ }
+
+ if (pDocument->GetFocusAnnot() != pData->pWidget) {
+ pFormFiller->CommitData(pData->pPageView, nFlag);
+ bExit = TRUE;
}
+ } else {
+ if (!IsValidAnnot(pData->pPageView, pData->pWidget)) {
+ bExit = TRUE;
+ m_bNotifying = FALSE;
+ return;
+ }
+ }
+
+ m_bNotifying = FALSE;
}
+ }
}
-void CFFL_IFormFiller::OnAfterKeyStroke(FX_BOOL bEditOrList, void* pPrivateData, FX_BOOL & bExit,FX_DWORD nFlag)
-{
- ASSERT(pPrivateData != NULL);
- CFFL_PrivateData* pData = (CFFL_PrivateData*)pPrivateData;
- ASSERT(pData->pWidget != NULL);
+void CFFL_IFormFiller::OnAfterKeyStroke(FX_BOOL bEditOrList,
+ void* pPrivateData,
+ FX_BOOL& bExit,
+ FX_DWORD nFlag) {
+ ASSERT(pPrivateData != NULL);
+ CFFL_PrivateData* pData = (CFFL_PrivateData*)pPrivateData;
+ ASSERT(pData->pWidget != NULL);
- CFFL_FormFiller* pFormFiller = GetFormFiller(pData->pWidget, FALSE);
- ASSERT(pFormFiller != NULL);
+ CFFL_FormFiller* pFormFiller = GetFormFiller(pData->pWidget, FALSE);
+ ASSERT(pFormFiller != NULL);
- if (!bEditOrList)
- pFormFiller->OnKeyStroke(bExit);
+ if (!bEditOrList)
+ pFormFiller->OnKeyStroke(bExit);
}
diff --git a/fpdfsdk/src/formfiller/FFL_ListBox.cpp b/fpdfsdk/src/formfiller/FFL_ListBox.cpp
index c105cfcbdd..0735f48cf3 100644
--- a/fpdfsdk/src/formfiller/FFL_ListBox.cpp
+++ b/fpdfsdk/src/formfiller/FFL_ListBox.cpp
@@ -12,286 +12,237 @@
//#include "../../include/formfiller/FFL_Undo.h"
#include "../../include/formfiller/FFL_CBA_Fontmap.h"
+#define FFL_DEFAULTLISTBOXFONTSIZE 12.0f
-#define FFL_DEFAULTLISTBOXFONTSIZE 12.0f
+/* ------------------------------- CFFL_ListBox -------------------------------
+ */
+CFFL_ListBox::CFFL_ListBox(CPDFDoc_Environment* pApp, CPDFSDK_Annot* pWidget)
+ : CFFL_FormFiller(pApp, pWidget), m_pFontMap(NULL) {}
-/* ------------------------------- CFFL_ListBox ------------------------------- */
-
-CFFL_ListBox::CFFL_ListBox(CPDFDoc_Environment* pApp, CPDFSDK_Annot* pWidget) :
- CFFL_FormFiller(pApp, pWidget),
- m_pFontMap(NULL)
-{
+CFFL_ListBox::~CFFL_ListBox() {
+ delete m_pFontMap;
}
-CFFL_ListBox::~CFFL_ListBox()
-{
- delete m_pFontMap;
+PWL_CREATEPARAM CFFL_ListBox::GetCreateParam() {
+ PWL_CREATEPARAM cp = CFFL_FormFiller::GetCreateParam();
+
+ ASSERT(m_pWidget != NULL);
+ FX_DWORD dwFieldFlag = m_pWidget->GetFieldFlags();
+
+ if (dwFieldFlag & FIELDFLAG_MULTISELECT) {
+ cp.dwFlags |= PLBS_MULTIPLESEL;
+ }
+
+ cp.dwFlags |= PWS_VSCROLL;
+
+ if (cp.dwFlags & PWS_AUTOFONTSIZE)
+ cp.fFontSize = FFL_DEFAULTLISTBOXFONTSIZE;
+
+ if (!m_pFontMap) {
+ m_pFontMap = new CBA_FontMap(m_pWidget, m_pApp->GetSysHandler());
+ m_pFontMap->Initial();
+ }
+ cp.pFontMap = m_pFontMap;
+
+ return cp;
}
-PWL_CREATEPARAM CFFL_ListBox::GetCreateParam()
-{
- PWL_CREATEPARAM cp = CFFL_FormFiller::GetCreateParam();
+CPWL_Wnd* CFFL_ListBox::NewPDFWindow(const PWL_CREATEPARAM& cp,
+ CPDFSDK_PageView* pPageView) {
+ CPWL_ListBox* pWnd = new CPWL_ListBox();
+ pWnd->AttachFFLData(this);
+ pWnd->Create(cp);
- ASSERT(m_pWidget != NULL);
- FX_DWORD dwFieldFlag = m_pWidget->GetFieldFlags();
+ ASSERT(m_pApp != NULL);
+ CFFL_IFormFiller* pIFormFiller = m_pApp->GetIFormFiller();
+ pWnd->SetFillerNotify(pIFormFiller);
- if (dwFieldFlag & FIELDFLAG_MULTISELECT)
- {
- cp.dwFlags |= PLBS_MULTIPLESEL;
- }
+ for (int32_t i = 0, sz = m_pWidget->CountOptions(); i < sz; i++)
+ pWnd->AddString(m_pWidget->GetOptionLabel(i).c_str());
- cp.dwFlags |= PWS_VSCROLL;
+ if (pWnd->HasFlag(PLBS_MULTIPLESEL)) {
+ m_OriginSelections.clear();
- if (cp.dwFlags & PWS_AUTOFONTSIZE)
- cp.fFontSize = FFL_DEFAULTLISTBOXFONTSIZE;
+ FX_BOOL bSetCaret = FALSE;
+ for (int32_t i = 0, sz = m_pWidget->CountOptions(); i < sz; i++) {
+ if (m_pWidget->IsOptionSelected(i)) {
+ if (!bSetCaret) {
+ pWnd->SetCaret(i);
+ bSetCaret = TRUE;
+ }
+ pWnd->Select(i);
+ m_OriginSelections.insert(i);
+ }
+ }
+ } else {
+ for (int i = 0, sz = m_pWidget->CountOptions(); i < sz; i++) {
+ if (m_pWidget->IsOptionSelected(i)) {
+ pWnd->Select(i);
+ break;
+ }
+ }
+ }
- if (!m_pFontMap)
- {
- m_pFontMap = new CBA_FontMap(m_pWidget, m_pApp->GetSysHandler());
- m_pFontMap->Initial();
- }
- cp.pFontMap = m_pFontMap;
+ pWnd->SetTopVisibleIndex(m_pWidget->GetTopVisibleIndex());
- return cp;
+ return pWnd;
}
-CPWL_Wnd* CFFL_ListBox::NewPDFWindow(const PWL_CREATEPARAM& cp, CPDFSDK_PageView* pPageView)
-{
- CPWL_ListBox* pWnd = new CPWL_ListBox();
- pWnd->AttachFFLData(this);
- pWnd->Create(cp);
-
- ASSERT(m_pApp != NULL);
- CFFL_IFormFiller* pIFormFiller = m_pApp->GetIFormFiller();
- pWnd->SetFillerNotify(pIFormFiller);
-
- for (int32_t i=0,sz=m_pWidget->CountOptions(); i<sz; i++)
- pWnd->AddString(m_pWidget->GetOptionLabel(i).c_str());
-
- if (pWnd->HasFlag(PLBS_MULTIPLESEL))
- {
- m_OriginSelections.clear();
-
- FX_BOOL bSetCaret = FALSE;
- for (int32_t i=0,sz=m_pWidget->CountOptions(); i<sz; i++)
- {
- if (m_pWidget->IsOptionSelected(i))
- {
- if (!bSetCaret)
- {
- pWnd->SetCaret(i);
- bSetCaret = TRUE;
- }
- pWnd->Select(i);
- m_OriginSelections.insert(i);
- }
- }
- }
- else
- {
- for (int i=0,sz=m_pWidget->CountOptions(); i<sz; i++)
- {
- if (m_pWidget->IsOptionSelected(i))
- {
- pWnd->Select(i);
- break;
- }
- }
- }
-
- pWnd->SetTopVisibleIndex(m_pWidget->GetTopVisibleIndex());
-
- return pWnd;
+FX_BOOL CFFL_ListBox::OnChar(CPDFSDK_Annot* pAnnot,
+ FX_UINT nChar,
+ FX_UINT nFlags) {
+ return CFFL_FormFiller::OnChar(pAnnot, nChar, nFlags);
}
+FX_BOOL CFFL_ListBox::IsDataChanged(CPDFSDK_PageView* pPageView) {
+ CPWL_ListBox* pListBox = (CPWL_ListBox*)GetPDFWindow(pPageView, FALSE);
+ if (!pListBox)
+ return FALSE;
-FX_BOOL CFFL_ListBox::OnChar(CPDFSDK_Annot* pAnnot, FX_UINT nChar, FX_UINT nFlags)
-{
- return CFFL_FormFiller::OnChar(pAnnot, nChar, nFlags);
+ if (m_pWidget->GetFieldFlags() & FIELDFLAG_MULTISELECT) {
+ int nSelCount = 0;
+ for (int32_t i = 0, sz = pListBox->GetCount(); i < sz; ++i) {
+ if (pListBox->IsItemSelected(i)) {
+ if (m_OriginSelections.count(i) == 0)
+ return TRUE;
+
+ nSelCount++;
+ }
+ }
+
+ return nSelCount != m_OriginSelections.size();
+ }
+ return pListBox->GetCurSel() != m_pWidget->GetSelectedIndex(0);
}
-FX_BOOL CFFL_ListBox::IsDataChanged(CPDFSDK_PageView* pPageView)
-{
- CPWL_ListBox* pListBox = (CPWL_ListBox*)GetPDFWindow(pPageView, FALSE);
- if (!pListBox)
- return FALSE;
+void CFFL_ListBox::SaveData(CPDFSDK_PageView* pPageView) {
+ ASSERT(m_pWidget != NULL);
- if (m_pWidget->GetFieldFlags() & FIELDFLAG_MULTISELECT) {
- int nSelCount = 0;
- for (int32_t i = 0, sz = pListBox->GetCount(); i < sz; ++i) {
- if (pListBox->IsItemSelected(i)) {
- if (m_OriginSelections.count(i) == 0)
- return TRUE;
-
- nSelCount++;
- }
+ if (CPWL_ListBox* pListBox = (CPWL_ListBox*)GetPDFWindow(pPageView, FALSE)) {
+ CFX_IntArray aOldSelect, aNewSelect;
+
+ {
+ for (int i = 0, sz = m_pWidget->CountOptions(); i < sz; i++) {
+ if (m_pWidget->IsOptionSelected(i)) {
+ aOldSelect.Add(i);
}
+ }
+ }
+
+ int32_t nNewTopIndex = pListBox->GetTopVisibleIndex();
- return nSelCount != m_OriginSelections.size();
+ m_pWidget->ClearSelection(FALSE);
+
+ if (m_pWidget->GetFieldFlags() & FIELDFLAG_MULTISELECT) {
+ for (int32_t i = 0, sz = pListBox->GetCount(); i < sz; i++) {
+ if (pListBox->IsItemSelected(i)) {
+ m_pWidget->SetOptionSelection(i, TRUE, FALSE);
+ aNewSelect.Add(i);
+ }
+ }
+ } else {
+ m_pWidget->SetOptionSelection(pListBox->GetCurSel(), TRUE, FALSE);
+ aNewSelect.Add(pListBox->GetCurSel());
}
- return pListBox->GetCurSel() != m_pWidget->GetSelectedIndex(0);
-}
-void CFFL_ListBox::SaveData(CPDFSDK_PageView* pPageView)
-{
- ASSERT(m_pWidget != NULL);
-
- if (CPWL_ListBox* pListBox = (CPWL_ListBox*)GetPDFWindow(pPageView, FALSE))
- {
- CFX_IntArray aOldSelect, aNewSelect;
-
- {
- for (int i=0,sz=m_pWidget->CountOptions(); i<sz; i++)
- {
- if (m_pWidget->IsOptionSelected(i))
- {
- aOldSelect.Add(i);
- }
- }
- }
-
-
- int32_t nNewTopIndex = pListBox->GetTopVisibleIndex();
-
- m_pWidget->ClearSelection(FALSE);
-
- if (m_pWidget->GetFieldFlags() & FIELDFLAG_MULTISELECT)
- {
- for (int32_t i=0,sz=pListBox->GetCount(); i<sz; i++)
- {
- if (pListBox->IsItemSelected(i))
- {
- m_pWidget->SetOptionSelection(i, TRUE, FALSE);
- aNewSelect.Add(i);
- }
- }
- }
- else
- {
- m_pWidget->SetOptionSelection(pListBox->GetCurSel(), TRUE, FALSE);
- aNewSelect.Add(pListBox->GetCurSel());
- }
-
- m_pWidget->SetTopVisibleIndex(nNewTopIndex);
- m_pWidget->ResetFieldAppearance(TRUE);
- m_pWidget->UpdateField();
- SetChangeMark();
- }
+ m_pWidget->SetTopVisibleIndex(nNewTopIndex);
+ m_pWidget->ResetFieldAppearance(TRUE);
+ m_pWidget->UpdateField();
+ SetChangeMark();
+ }
}
-void CFFL_ListBox::GetActionData(CPDFSDK_PageView* pPageView, CPDF_AAction::AActionType type,
- PDFSDK_FieldAction& fa)
-{
- switch (type)
- {
- case CPDF_AAction::Validate:
- if (m_pWidget->GetFieldFlags() & FIELDFLAG_MULTISELECT)
- {
- fa.sValue = L"";
- }
- else
- {
- if (CPWL_ListBox* pListBox = (CPWL_ListBox*)GetPDFWindow(pPageView, FALSE))
- {
- ASSERT(m_pWidget != NULL);
- int32_t nCurSel = pListBox->GetCurSel();
- if (nCurSel >= 0)
- fa.sValue = m_pWidget->GetOptionLabel(nCurSel);
- }
- }
- break;
- case CPDF_AAction::LoseFocus:
- case CPDF_AAction::GetFocus:
- if (m_pWidget->GetFieldFlags() & FIELDFLAG_MULTISELECT)
- {
- fa.sValue = L"";
- }
- else
- {
- ASSERT(m_pWidget != NULL);
- int32_t nCurSel = m_pWidget->GetSelectedIndex(0);
- if (nCurSel >= 0)
- fa.sValue = m_pWidget->GetOptionLabel(nCurSel);
- }
- break;
- default:
- break;
- }
+void CFFL_ListBox::GetActionData(CPDFSDK_PageView* pPageView,
+ CPDF_AAction::AActionType type,
+ PDFSDK_FieldAction& fa) {
+ switch (type) {
+ case CPDF_AAction::Validate:
+ if (m_pWidget->GetFieldFlags() & FIELDFLAG_MULTISELECT) {
+ fa.sValue = L"";
+ } else {
+ if (CPWL_ListBox* pListBox =
+ (CPWL_ListBox*)GetPDFWindow(pPageView, FALSE)) {
+ ASSERT(m_pWidget != NULL);
+ int32_t nCurSel = pListBox->GetCurSel();
+ if (nCurSel >= 0)
+ fa.sValue = m_pWidget->GetOptionLabel(nCurSel);
+ }
+ }
+ break;
+ case CPDF_AAction::LoseFocus:
+ case CPDF_AAction::GetFocus:
+ if (m_pWidget->GetFieldFlags() & FIELDFLAG_MULTISELECT) {
+ fa.sValue = L"";
+ } else {
+ ASSERT(m_pWidget != NULL);
+ int32_t nCurSel = m_pWidget->GetSelectedIndex(0);
+ if (nCurSel >= 0)
+ fa.sValue = m_pWidget->GetOptionLabel(nCurSel);
+ }
+ break;
+ default:
+ break;
+ }
}
+void CFFL_ListBox::SetActionData(CPDFSDK_PageView* pPageView,
+ CPDF_AAction::AActionType type,
+ const PDFSDK_FieldAction& fa) {}
-void CFFL_ListBox::SetActionData(CPDFSDK_PageView* pPageView, CPDF_AAction::AActionType type,
- const PDFSDK_FieldAction& fa)
-{
-}
+void CFFL_ListBox::SaveState(CPDFSDK_PageView* pPageView) {
+ ASSERT(pPageView != NULL);
-void CFFL_ListBox::SaveState(CPDFSDK_PageView* pPageView)
-{
- ASSERT(pPageView != NULL);
-
- if (CPWL_ListBox* pListBox = (CPWL_ListBox*)GetPDFWindow(pPageView, FALSE))
- {
- for (int32_t i=0,sz=pListBox->GetCount(); i<sz; i++)
- {
- if (pListBox->IsItemSelected(i))
- {
- m_State.Add(i);
- }
- }
- }
+ if (CPWL_ListBox* pListBox = (CPWL_ListBox*)GetPDFWindow(pPageView, FALSE)) {
+ for (int32_t i = 0, sz = pListBox->GetCount(); i < sz; i++) {
+ if (pListBox->IsItemSelected(i)) {
+ m_State.Add(i);
+ }
+ }
+ }
}
-void CFFL_ListBox::RestoreState(CPDFSDK_PageView* pPageView)
-{
- if (CPWL_ListBox* pListBox = (CPWL_ListBox*)GetPDFWindow(pPageView, FALSE))
- {
- for (int i=0,sz=m_State.GetSize(); i<sz; i++)
- pListBox->Select(m_State[i]);
- }
+void CFFL_ListBox::RestoreState(CPDFSDK_PageView* pPageView) {
+ if (CPWL_ListBox* pListBox = (CPWL_ListBox*)GetPDFWindow(pPageView, FALSE)) {
+ for (int i = 0, sz = m_State.GetSize(); i < sz; i++)
+ pListBox->Select(m_State[i]);
+ }
}
-CPWL_Wnd* CFFL_ListBox::ResetPDFWindow(CPDFSDK_PageView* pPageView, FX_BOOL bRestoreValue)
-{
- if (bRestoreValue)
- SaveState(pPageView);
+CPWL_Wnd* CFFL_ListBox::ResetPDFWindow(CPDFSDK_PageView* pPageView,
+ FX_BOOL bRestoreValue) {
+ if (bRestoreValue)
+ SaveState(pPageView);
- DestroyPDFWindow(pPageView);
+ DestroyPDFWindow(pPageView);
- CPWL_Wnd* pRet = NULL;
+ CPWL_Wnd* pRet = NULL;
- if (bRestoreValue)
- {
- RestoreState(pPageView);
- pRet = GetPDFWindow(pPageView, FALSE);
- }
- else
- pRet = GetPDFWindow(pPageView, TRUE);
+ if (bRestoreValue) {
+ RestoreState(pPageView);
+ pRet = GetPDFWindow(pPageView, FALSE);
+ } else
+ pRet = GetPDFWindow(pPageView, TRUE);
- m_pWidget->UpdateField();
+ m_pWidget->UpdateField();
- return pRet;
+ return pRet;
}
-void CFFL_ListBox::OnKeyStroke(FX_BOOL bKeyDown, FX_DWORD nFlag)
-{
- ASSERT(m_pWidget != NULL);
-
- int nFlags = m_pWidget->GetFieldFlags();
-
- if (nFlags & FIELDFLAG_COMMITONSELCHANGE)
- {
- if (m_bValid)
- {
- CPDFSDK_PageView* pPageView = GetCurPageView();
- ASSERT(pPageView != NULL);
-
- if (CommitData(pPageView, nFlag))
- {
- DestroyPDFWindow(pPageView);
- m_bValid = FALSE;
- }
- }
- }
-}
+void CFFL_ListBox::OnKeyStroke(FX_BOOL bKeyDown, FX_DWORD nFlag) {
+ ASSERT(m_pWidget != NULL);
+
+ int nFlags = m_pWidget->GetFieldFlags();
+ if (nFlags & FIELDFLAG_COMMITONSELCHANGE) {
+ if (m_bValid) {
+ CPDFSDK_PageView* pPageView = GetCurPageView();
+ ASSERT(pPageView != NULL);
+
+ if (CommitData(pPageView, nFlag)) {
+ DestroyPDFWindow(pPageView);
+ m_bValid = FALSE;
+ }
+ }
+ }
+}
diff --git a/fpdfsdk/src/formfiller/FFL_Notify.cpp b/fpdfsdk/src/formfiller/FFL_Notify.cpp
index 58a2202b61..e348f8e0b9 100644
--- a/fpdfsdk/src/formfiller/FFL_Notify.cpp
+++ b/fpdfsdk/src/formfiller/FFL_Notify.cpp
@@ -10,164 +10,168 @@
// #include "../../include/formfiller/FFL_ComboBox.h"
// #include "../../include/formfiller/FFL_Module.h"
-/* -------------------------------- CFFL_Notify ------------------------------ */
+/* -------------------------------- CFFL_Notify ------------------------------
+ */
//#pragma warning(disable: 4800)
-CFFL_Notify::CFFL_Notify(CFFL_FormFiller * pFormFiller) :
- m_bDoActioning(FALSE),
- m_nNotifyFlag(0)
-{
- ASSERT(pFormFiller != NULL);
+CFFL_Notify::CFFL_Notify(CFFL_FormFiller* pFormFiller)
+ : m_bDoActioning(FALSE), m_nNotifyFlag(0) {
+ ASSERT(pFormFiller != NULL);
}
-CFFL_Notify::~CFFL_Notify()
-{
-}
+CFFL_Notify::~CFFL_Notify() {}
-void CFFL_Notify::BeforeNotify()
-{
- m_nNotifyFlag ++;
+void CFFL_Notify::BeforeNotify() {
+ m_nNotifyFlag++;
}
-
-void CFFL_Notify::AfterNotify()
-{
- m_nNotifyFlag --;
+void CFFL_Notify::AfterNotify() {
+ m_nNotifyFlag--;
}
-FX_BOOL CFFL_Notify::OnMouseUp(FX_BOOL & bExit)
-{
- BeforeNotify();
- FX_BOOL bRet = FALSE;//DoAAction(CPDF_AAction::AActionType::ButtonUp, bExit);
- AfterNotify();
- return bRet;
+FX_BOOL CFFL_Notify::OnMouseUp(FX_BOOL& bExit) {
+ BeforeNotify();
+ FX_BOOL bRet =
+ FALSE; // DoAAction(CPDF_AAction::AActionType::ButtonUp, bExit);
+ AfterNotify();
+ return bRet;
}
-FX_BOOL CFFL_Notify::OnMouseDown(FX_BOOL & bExit)
-{
- BeforeNotify();
- FX_BOOL bRet = FALSE;//DoAAction(CPDF_AAction::AActionType::ButtonDown, bExit);
- AfterNotify();
- return bRet;
+FX_BOOL CFFL_Notify::OnMouseDown(FX_BOOL& bExit) {
+ BeforeNotify();
+ FX_BOOL bRet =
+ FALSE; // DoAAction(CPDF_AAction::AActionType::ButtonDown, bExit);
+ AfterNotify();
+ return bRet;
}
-FX_BOOL CFFL_Notify::OnMouseEnter(FX_BOOL & bExit)
-{
- BeforeNotify();
- FX_BOOL bRet = FALSE;//DoAAction(CPDF_AAction::AActionType::CursorEnter, bExit);
- AfterNotify();
- return bRet;
+FX_BOOL CFFL_Notify::OnMouseEnter(FX_BOOL& bExit) {
+ BeforeNotify();
+ FX_BOOL bRet =
+ FALSE; // DoAAction(CPDF_AAction::AActionType::CursorEnter, bExit);
+ AfterNotify();
+ return bRet;
}
-FX_BOOL CFFL_Notify::OnMouseExit(FX_BOOL & bExit)
-{
- BeforeNotify();
- FX_BOOL bRet = FALSE;//DoAAction(CPDF_AAction::AActionType::CursorExit, bExit);
- AfterNotify();
- return bRet;
+FX_BOOL CFFL_Notify::OnMouseExit(FX_BOOL& bExit) {
+ BeforeNotify();
+ FX_BOOL bRet =
+ FALSE; // DoAAction(CPDF_AAction::AActionType::CursorExit, bExit);
+ AfterNotify();
+ return bRet;
}
-FX_BOOL CFFL_Notify::OnSetFocus(FX_BOOL & bExit)
-{
- BeforeNotify();
- FX_BOOL bRet = FALSE;//DoAAction(CPDF_AAction::AActionType::GetFocus, bExit);
- AfterNotify();
- return bRet;
+FX_BOOL CFFL_Notify::OnSetFocus(FX_BOOL& bExit) {
+ BeforeNotify();
+ FX_BOOL bRet =
+ FALSE; // DoAAction(CPDF_AAction::AActionType::GetFocus, bExit);
+ AfterNotify();
+ return bRet;
}
-FX_BOOL CFFL_Notify::OnKillFocus(FX_BOOL & bExit)
-{
- BeforeNotify();
- FX_BOOL bRet = FALSE;//DoAAction(CPDF_AAction::AActionType::LoseFocus, bExit);
- AfterNotify();
- return bRet;
+FX_BOOL CFFL_Notify::OnKillFocus(FX_BOOL& bExit) {
+ BeforeNotify();
+ FX_BOOL bRet =
+ FALSE; // DoAAction(CPDF_AAction::AActionType::LoseFocus, bExit);
+ AfterNotify();
+ return bRet;
}
-FX_BOOL CFFL_Notify::OnCalculate()
-{
- return TRUE;
+FX_BOOL CFFL_Notify::OnCalculate() {
+ return TRUE;
}
-FX_BOOL CFFL_Notify::OnFormat(int iCommitKey)
-{
- return TRUE;
+FX_BOOL CFFL_Notify::OnFormat(int iCommitKey) {
+ return TRUE;
}
-FX_BOOL CFFL_Notify::OnKeyStroke(CPDF_FormField* pFormField, int nCommitKey, CFX_WideString& strValue, CFX_WideString& strChange,
- const CFX_WideString& strChangeEx, FX_BOOL bKeyDown, FX_BOOL bModifier,
- FX_BOOL bShift, FX_BOOL bWillCommit, FX_BOOL bFieldFull,
- int& nSelStart, int& nSelEnd, FX_BOOL& bRC)
-{
- return TRUE;
+FX_BOOL CFFL_Notify::OnKeyStroke(CPDF_FormField* pFormField,
+ int nCommitKey,
+ CFX_WideString& strValue,
+ CFX_WideString& strChange,
+ const CFX_WideString& strChangeEx,
+ FX_BOOL bKeyDown,
+ FX_BOOL bModifier,
+ FX_BOOL bShift,
+ FX_BOOL bWillCommit,
+ FX_BOOL bFieldFull,
+ int& nSelStart,
+ int& nSelEnd,
+ FX_BOOL& bRC) {
+ return TRUE;
}
-FX_BOOL CFFL_Notify::OnValidate(CPDF_FormField* pFormField, CFX_WideString& strValue, CFX_WideString & strChange,
- const CFX_WideString& strChangeEx, FX_BOOL bKeyDown, FX_BOOL bModifier,
- FX_BOOL bShift, FX_BOOL & bRC)
-{
- return TRUE;
+FX_BOOL CFFL_Notify::OnValidate(CPDF_FormField* pFormField,
+ CFX_WideString& strValue,
+ CFX_WideString& strChange,
+ const CFX_WideString& strChangeEx,
+ FX_BOOL bKeyDown,
+ FX_BOOL bModifier,
+ FX_BOOL bShift,
+ FX_BOOL& bRC) {
+ return TRUE;
}
-FX_BOOL CFFL_Notify::DoAAction(CPDF_AAction::AActionType eAAT, FX_BOOL & bExit)
-{
- if (m_bDoActioning)
- return FALSE;
+FX_BOOL CFFL_Notify::DoAAction(CPDF_AAction::AActionType eAAT, FX_BOOL& bExit) {
+ if (m_bDoActioning)
+ return FALSE;
- CPDF_Action action;
- if (!FindAAction(eAAT, action))
- return FALSE;
+ CPDF_Action action;
+ if (!FindAAction(eAAT, action))
+ return FALSE;
- m_bDoActioning = TRUE;
- ExecuteActionTree(eAAT,action,bExit);
- m_bDoActioning = FALSE;
- return TRUE;
+ m_bDoActioning = TRUE;
+ ExecuteActionTree(eAAT, action, bExit);
+ m_bDoActioning = FALSE;
+ return TRUE;
}
-FX_BOOL CFFL_Notify::ExecuteActionTree(CPDF_AAction::AActionType eAAT,CPDF_Action & action, FX_BOOL& bExit)
-{
- if (!ExecuteAction(eAAT,action,bExit)) return FALSE;
- if (bExit) return TRUE;
+FX_BOOL CFFL_Notify::ExecuteActionTree(CPDF_AAction::AActionType eAAT,
+ CPDF_Action& action,
+ FX_BOOL& bExit) {
+ if (!ExecuteAction(eAAT, action, bExit))
+ return FALSE;
+ if (bExit)
+ return TRUE;
- for (int32_t i=0,sz=action.GetSubActionsCount(); i<sz; i++)
- {
- CPDF_Action subaction = action.GetSubAction(i);
- if (!ExecuteActionTree(eAAT,subaction,bExit)) return FALSE;
- if (bExit) break;
- }
+ for (int32_t i = 0, sz = action.GetSubActionsCount(); i < sz; i++) {
+ CPDF_Action subaction = action.GetSubAction(i);
+ if (!ExecuteActionTree(eAAT, subaction, bExit))
+ return FALSE;
+ if (bExit)
+ break;
+ }
- return TRUE;
+ return TRUE;
}
-
-FX_BOOL CFFL_Notify::FindAAction(CPDF_AAction::AActionType eAAT,CPDF_Action & action)
-{
- return FALSE;
+FX_BOOL CFFL_Notify::FindAAction(CPDF_AAction::AActionType eAAT,
+ CPDF_Action& action) {
+ return FALSE;
}
-FX_BOOL CFFL_Notify::FindAAction(CPDF_AAction aaction,CPDF_AAction::AActionType eAAT,CPDF_Action & action)
-{
- CPDF_Action MyAction;
-
- if (aaction.ActionExist(eAAT))
- {
- MyAction = aaction.GetAction(eAAT);
- }
- else
- return FALSE;
+FX_BOOL CFFL_Notify::FindAAction(CPDF_AAction aaction,
+ CPDF_AAction::AActionType eAAT,
+ CPDF_Action& action) {
+ CPDF_Action MyAction;
+ if (aaction.ActionExist(eAAT)) {
+ MyAction = aaction.GetAction(eAAT);
+ } else
+ return FALSE;
- if (MyAction.GetType() == CPDF_Action::Unknown)
- return FALSE;
+ if (MyAction.GetType() == CPDF_Action::Unknown)
+ return FALSE;
- action = MyAction;
+ action = MyAction;
- return TRUE;
+ return TRUE;
}
-FX_BOOL CFFL_Notify::ExecuteAction(CPDF_AAction::AActionType eAAT,CPDF_Action & action,FX_BOOL& bExit)
-{
- return FALSE;
+FX_BOOL CFFL_Notify::ExecuteAction(CPDF_AAction::AActionType eAAT,
+ CPDF_Action& action,
+ FX_BOOL& bExit) {
+ return FALSE;
}
//#pragma warning(default: 4800)
-
diff --git a/fpdfsdk/src/formfiller/FFL_PushButton.cpp b/fpdfsdk/src/formfiller/FFL_PushButton.cpp
index a5df48840c..533d786177 100644
--- a/fpdfsdk/src/formfiller/FFL_PushButton.cpp
+++ b/fpdfsdk/src/formfiller/FFL_PushButton.cpp
@@ -8,36 +8,33 @@
#include "../../include/formfiller/FFL_FormFiller.h"
#include "../../include/formfiller/FFL_PushButton.h"
-/* ------------------------------- CFFL_PushButton ------------------------------- */
+/* ------------------------------- CFFL_PushButton
+ * ------------------------------- */
-CFFL_PushButton::CFFL_PushButton(CPDFDoc_Environment* pApp, CPDFSDK_Annot* pAnnot):
- CFFL_Button( pApp, pAnnot)
-{
-}
+CFFL_PushButton::CFFL_PushButton(CPDFDoc_Environment* pApp,
+ CPDFSDK_Annot* pAnnot)
+ : CFFL_Button(pApp, pAnnot) {}
-CFFL_PushButton::~CFFL_PushButton()
-{
-}
+CFFL_PushButton::~CFFL_PushButton() {}
-CPWL_Wnd* CFFL_PushButton::NewPDFWindow(const PWL_CREATEPARAM& cp, CPDFSDK_PageView* pPageView)
-{
- CPWL_PushButton* pWnd = new CPWL_PushButton();
- pWnd->Create(cp);
+CPWL_Wnd* CFFL_PushButton::NewPDFWindow(const PWL_CREATEPARAM& cp,
+ CPDFSDK_PageView* pPageView) {
+ CPWL_PushButton* pWnd = new CPWL_PushButton();
+ pWnd->Create(cp);
- return pWnd;
+ return pWnd;
}
-
-FX_BOOL CFFL_PushButton::OnChar(CPDFSDK_Annot* pAnnot, FX_UINT nChar, FX_UINT nFlags)
-{
- return CFFL_FormFiller::OnChar(pAnnot, nChar, nFlags);
+FX_BOOL CFFL_PushButton::OnChar(CPDFSDK_Annot* pAnnot,
+ FX_UINT nChar,
+ FX_UINT nFlags) {
+ return CFFL_FormFiller::OnChar(pAnnot, nChar, nFlags);
}
-void CFFL_PushButton::OnDraw(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot,
- CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device,
- FX_DWORD dwFlags)
-{
- CFFL_Button::OnDraw(pPageView, pAnnot, pDevice, pUser2Device, dwFlags);
+void CFFL_PushButton::OnDraw(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ CFX_RenderDevice* pDevice,
+ CPDF_Matrix* pUser2Device,
+ FX_DWORD dwFlags) {
+ CFFL_Button::OnDraw(pPageView, pAnnot, pDevice, pUser2Device, dwFlags);
}
-
-
diff --git a/fpdfsdk/src/formfiller/FFL_RadioButton.cpp b/fpdfsdk/src/formfiller/FFL_RadioButton.cpp
index 1f73e8ccaa..7c4f9a9e49 100644
--- a/fpdfsdk/src/formfiller/FFL_RadioButton.cpp
+++ b/fpdfsdk/src/formfiller/FFL_RadioButton.cpp
@@ -9,129 +9,124 @@
#include "../../include/formfiller/FFL_RadioButton.h"
//#include "../include/FFL_Undo.h"
-/* ------------------------------- CFFL_RadioButton ------------------------------- */
+/* ------------------------------- CFFL_RadioButton
+ * ------------------------------- */
-CFFL_RadioButton::CFFL_RadioButton(CPDFDoc_Environment* pApp, CPDFSDK_Annot* pWidget) :
- CFFL_Button(pApp, pWidget)
-{
-}
+CFFL_RadioButton::CFFL_RadioButton(CPDFDoc_Environment* pApp,
+ CPDFSDK_Annot* pWidget)
+ : CFFL_Button(pApp, pWidget) {}
-CFFL_RadioButton::~CFFL_RadioButton()
-{
-}
+CFFL_RadioButton::~CFFL_RadioButton() {}
-CPWL_Wnd* CFFL_RadioButton::NewPDFWindow(const PWL_CREATEPARAM& cp, CPDFSDK_PageView* pPageView)
-{
- CPWL_RadioButton* pWnd = new CPWL_RadioButton();
- pWnd->Create(cp);
+CPWL_Wnd* CFFL_RadioButton::NewPDFWindow(const PWL_CREATEPARAM& cp,
+ CPDFSDK_PageView* pPageView) {
+ CPWL_RadioButton* pWnd = new CPWL_RadioButton();
+ pWnd->Create(cp);
- ASSERT(m_pWidget != NULL);
- pWnd->SetCheck(m_pWidget->IsChecked());
+ ASSERT(m_pWidget != NULL);
+ pWnd->SetCheck(m_pWidget->IsChecked());
- return pWnd;
+ return pWnd;
}
-FX_BOOL CFFL_RadioButton::OnKeyDown(CPDFSDK_Annot* pAnnot, FX_UINT nKeyCode, FX_UINT nFlags)
-{
- switch (nKeyCode)
- {
- case FWL_VKEY_Return:
- case FWL_VKEY_Space:
- return TRUE;
- default:
- return CFFL_FormFiller::OnKeyDown(pAnnot, nKeyCode, nFlags);
- }
+FX_BOOL CFFL_RadioButton::OnKeyDown(CPDFSDK_Annot* pAnnot,
+ FX_UINT nKeyCode,
+ FX_UINT nFlags) {
+ switch (nKeyCode) {
+ case FWL_VKEY_Return:
+ case FWL_VKEY_Space:
+ return TRUE;
+ default:
+ return CFFL_FormFiller::OnKeyDown(pAnnot, nKeyCode, nFlags);
+ }
}
-FX_BOOL CFFL_RadioButton::OnChar(CPDFSDK_Annot* pAnnot, FX_UINT nChar, FX_UINT nFlags)
-{
- switch (nChar)
- {
- case FWL_VKEY_Return:
- case FWL_VKEY_Space:
- {
- CFFL_IFormFiller* pIFormFiller = m_pApp->GetIFormFiller();
- ASSERT(pIFormFiller != NULL);
-
- CPDFSDK_PageView* pPageView = pAnnot->GetPageView();
- ASSERT(pPageView != NULL);
-
- FX_BOOL bReset = FALSE;
- FX_BOOL bExit = FALSE;
-
- pIFormFiller->OnButtonUp(m_pWidget, pPageView, bReset, bExit,nFlags);
-
- if (bReset) return TRUE;
- if (bExit) return TRUE;
-
- CFFL_FormFiller::OnChar(pAnnot, nChar, nFlags);
-
- if (CPWL_RadioButton * pWnd = (CPWL_RadioButton*)GetPDFWindow(pPageView, TRUE))
- pWnd->SetCheck(TRUE);
- CommitData(pPageView,nFlags);
- return TRUE;
- }
- default:
- return CFFL_FormFiller::OnChar(pAnnot, nChar, nFlags);
- }
+FX_BOOL CFFL_RadioButton::OnChar(CPDFSDK_Annot* pAnnot,
+ FX_UINT nChar,
+ FX_UINT nFlags) {
+ switch (nChar) {
+ case FWL_VKEY_Return:
+ case FWL_VKEY_Space: {
+ CFFL_IFormFiller* pIFormFiller = m_pApp->GetIFormFiller();
+ ASSERT(pIFormFiller != NULL);
+
+ CPDFSDK_PageView* pPageView = pAnnot->GetPageView();
+ ASSERT(pPageView != NULL);
+
+ FX_BOOL bReset = FALSE;
+ FX_BOOL bExit = FALSE;
+
+ pIFormFiller->OnButtonUp(m_pWidget, pPageView, bReset, bExit, nFlags);
+
+ if (bReset)
+ return TRUE;
+ if (bExit)
+ return TRUE;
+
+ CFFL_FormFiller::OnChar(pAnnot, nChar, nFlags);
+
+ if (CPWL_RadioButton* pWnd =
+ (CPWL_RadioButton*)GetPDFWindow(pPageView, TRUE))
+ pWnd->SetCheck(TRUE);
+ CommitData(pPageView, nFlags);
+ return TRUE;
+ }
+ default:
+ return CFFL_FormFiller::OnChar(pAnnot, nChar, nFlags);
+ }
}
-FX_BOOL CFFL_RadioButton::OnLButtonUp(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point)
-{
- CFFL_Button::OnLButtonUp(pPageView, pAnnot, nFlags, point);
+FX_BOOL CFFL_RadioButton::OnLButtonUp(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_UINT nFlags,
+ const CPDF_Point& point) {
+ CFFL_Button::OnLButtonUp(pPageView, pAnnot, nFlags, point);
- if (IsValid())
- {
- if (CPWL_RadioButton * pWnd = (CPWL_RadioButton*)GetPDFWindow(pPageView, TRUE))
- pWnd->SetCheck(TRUE);
+ if (IsValid()) {
+ if (CPWL_RadioButton* pWnd =
+ (CPWL_RadioButton*)GetPDFWindow(pPageView, TRUE))
+ pWnd->SetCheck(TRUE);
- if (!CommitData(pPageView,nFlags)) return FALSE;
- }
+ if (!CommitData(pPageView, nFlags))
+ return FALSE;
+ }
- return TRUE;
+ return TRUE;
}
-FX_BOOL CFFL_RadioButton::IsDataChanged(CPDFSDK_PageView* pPageView)
-{
- ASSERT(m_pWidget != NULL);
+FX_BOOL CFFL_RadioButton::IsDataChanged(CPDFSDK_PageView* pPageView) {
+ ASSERT(m_pWidget != NULL);
- if (CPWL_RadioButton* pWnd = (CPWL_RadioButton*)GetPDFWindow(pPageView, FALSE))
- {
- return pWnd->IsChecked() != m_pWidget->IsChecked();
- }
+ if (CPWL_RadioButton* pWnd =
+ (CPWL_RadioButton*)GetPDFWindow(pPageView, FALSE)) {
+ return pWnd->IsChecked() != m_pWidget->IsChecked();
+ }
- return FALSE;
+ return FALSE;
}
-void CFFL_RadioButton::SaveData(CPDFSDK_PageView* pPageView)
-{
- ASSERT(m_pWidget != NULL);
-
- if (CPWL_RadioButton* pWnd = (CPWL_RadioButton*)GetPDFWindow(pPageView, FALSE))
- {
-
- FX_BOOL bNewChecked = pWnd->IsChecked();
-
- if (bNewChecked)
- {
- CPDF_FormField* pField = m_pWidget->GetFormField();
- ASSERT(pField != NULL);
-
- for (int32_t i=0,sz=pField->CountControls(); i<sz; i++)
- {
- if (CPDF_FormControl* pCtrl = pField->GetControl(i))
- {
- if (pCtrl->IsChecked())
- {
- break;
- }
- }
- }
- }
-
- m_pWidget->SetCheck(bNewChecked, FALSE);
- m_pWidget->UpdateField();
- SetChangeMark();
- }
+void CFFL_RadioButton::SaveData(CPDFSDK_PageView* pPageView) {
+ ASSERT(m_pWidget != NULL);
+
+ if (CPWL_RadioButton* pWnd =
+ (CPWL_RadioButton*)GetPDFWindow(pPageView, FALSE)) {
+ FX_BOOL bNewChecked = pWnd->IsChecked();
+
+ if (bNewChecked) {
+ CPDF_FormField* pField = m_pWidget->GetFormField();
+ ASSERT(pField != NULL);
+
+ for (int32_t i = 0, sz = pField->CountControls(); i < sz; i++) {
+ if (CPDF_FormControl* pCtrl = pField->GetControl(i)) {
+ if (pCtrl->IsChecked()) {
+ break;
+ }
+ }
+ }
+ }
+
+ m_pWidget->SetCheck(bNewChecked, FALSE);
+ m_pWidget->UpdateField();
+ SetChangeMark();
+ }
}
-
diff --git a/fpdfsdk/src/formfiller/FFL_TextField.cpp b/fpdfsdk/src/formfiller/FFL_TextField.cpp
index a4b87263ed..2acf6b8fda 100644
--- a/fpdfsdk/src/formfiller/FFL_TextField.cpp
+++ b/fpdfsdk/src/formfiller/FFL_TextField.cpp
@@ -7,353 +7,302 @@
#include "../../include/formfiller/FFL_TextField.h"
#include "../../include/formfiller/FFL_CBA_Fontmap.h"
-/* ------------------------------- CFFL_TextField ------------------------------- */
+/* ------------------------------- CFFL_TextField
+ * ------------------------------- */
-CFFL_TextField::CFFL_TextField(CPDFDoc_Environment* pApp, CPDFSDK_Annot* pAnnot) :
- CFFL_FormFiller(pApp, pAnnot),
- m_pFontMap(NULL)//,
- //m_pSpellCheck(NULL)
+CFFL_TextField::CFFL_TextField(CPDFDoc_Environment* pApp, CPDFSDK_Annot* pAnnot)
+ : CFFL_FormFiller(pApp, pAnnot),
+ m_pFontMap(NULL) //,
+// m_pSpellCheck(NULL)
{
- m_State.nStart = m_State.nEnd = 0;
+ m_State.nStart = m_State.nEnd = 0;
}
-CFFL_TextField::~CFFL_TextField()
-{
- delete m_pFontMap;
+CFFL_TextField::~CFFL_TextField() {
+ delete m_pFontMap;
}
-PWL_CREATEPARAM CFFL_TextField::GetCreateParam()
-{
- PWL_CREATEPARAM cp = CFFL_FormFiller::GetCreateParam();
+PWL_CREATEPARAM CFFL_TextField::GetCreateParam() {
+ PWL_CREATEPARAM cp = CFFL_FormFiller::GetCreateParam();
- ASSERT(m_pWidget != NULL);
- int nFlags = m_pWidget->GetFieldFlags();
+ ASSERT(m_pWidget != NULL);
+ int nFlags = m_pWidget->GetFieldFlags();
+ if (nFlags & FIELDFLAG_PASSWORD) {
+ cp.dwFlags |= PES_PASSWORD;
+ }
- if (nFlags & FIELDFLAG_PASSWORD)
- {
- cp.dwFlags |= PES_PASSWORD;
- }
+ if (!(nFlags & FIELDFLAG_DONOTSPELLCHECK)) {
+ }
- if (!(nFlags & FIELDFLAG_DONOTSPELLCHECK))
- {
- }
+ if (nFlags & FIELDFLAG_MULTILINE) {
+ cp.dwFlags |= PES_MULTILINE | PES_AUTORETURN | PES_TOP;
- if (nFlags & FIELDFLAG_MULTILINE)
- {
- cp.dwFlags |= PES_MULTILINE | PES_AUTORETURN | PES_TOP;
-
- if (!(nFlags & FIELDFLAG_DONOTSCROLL))
- {
- cp.dwFlags |= PWS_VSCROLL | PES_AUTOSCROLL;
- }
+ if (!(nFlags & FIELDFLAG_DONOTSCROLL)) {
+ cp.dwFlags |= PWS_VSCROLL | PES_AUTOSCROLL;
}
- else
- {
- cp.dwFlags |= PES_CENTER;
+ } else {
+ cp.dwFlags |= PES_CENTER;
- if (!(nFlags & FIELDFLAG_DONOTSCROLL))
- {
- cp.dwFlags |= PES_AUTOSCROLL;
- }
+ if (!(nFlags & FIELDFLAG_DONOTSCROLL)) {
+ cp.dwFlags |= PES_AUTOSCROLL;
}
+ }
- if (nFlags & FIELDFLAG_COMB)
- {
- cp.dwFlags |= PES_CHARARRAY;
- }
+ if (nFlags & FIELDFLAG_COMB) {
+ cp.dwFlags |= PES_CHARARRAY;
+ }
- if (nFlags & FIELDFLAG_RICHTEXT)
- {
- cp.dwFlags |= PES_RICH;
- }
+ if (nFlags & FIELDFLAG_RICHTEXT) {
+ cp.dwFlags |= PES_RICH;
+ }
- cp.dwFlags |= PES_UNDO;
+ cp.dwFlags |= PES_UNDO;
- switch (m_pWidget->GetAlignment())
- {
+ switch (m_pWidget->GetAlignment()) {
default:
case BF_ALIGN_LEFT:
- cp.dwFlags |= PES_LEFT;
- break;
+ cp.dwFlags |= PES_LEFT;
+ break;
case BF_ALIGN_MIDDLE:
- cp.dwFlags |= PES_MIDDLE;
- break;
+ cp.dwFlags |= PES_MIDDLE;
+ break;
case BF_ALIGN_RIGHT:
- cp.dwFlags |= PES_RIGHT;
- break;
- }
-
- if (!m_pFontMap)
- {
- m_pFontMap = new CBA_FontMap(m_pWidget, m_pApp->GetSysHandler());
- m_pFontMap->Initial();
- }
- cp.pFontMap = m_pFontMap;
- cp.pFocusHandler = this;
-
- return cp;
+ cp.dwFlags |= PES_RIGHT;
+ break;
+ }
+
+ if (!m_pFontMap) {
+ m_pFontMap = new CBA_FontMap(m_pWidget, m_pApp->GetSysHandler());
+ m_pFontMap->Initial();
+ }
+ cp.pFontMap = m_pFontMap;
+ cp.pFocusHandler = this;
+
+ return cp;
}
-CPWL_Wnd* CFFL_TextField::NewPDFWindow(const PWL_CREATEPARAM& cp, CPDFSDK_PageView* pPageView)
-{
- CPWL_Edit * pWnd = new CPWL_Edit();
- pWnd->AttachFFLData(this);
- pWnd->Create(cp);
-
-
-
- ASSERT(m_pApp != NULL);
- CFFL_IFormFiller* pIFormFiller = m_pApp->GetIFormFiller();
- pWnd->SetFillerNotify(pIFormFiller);
-
- ASSERT(m_pWidget != NULL);
- int32_t nMaxLen = m_pWidget->GetMaxLen();
- CFX_WideString swValue = m_pWidget->GetValue();
-
- if (nMaxLen > 0)
- {
- if (pWnd->HasFlag(PES_CHARARRAY))
- {
- pWnd->SetCharArray(nMaxLen);
- pWnd->SetAlignFormatV(PEAV_CENTER);
- }
- else
- {
- pWnd->SetLimitChar(nMaxLen);
- }
+CPWL_Wnd* CFFL_TextField::NewPDFWindow(const PWL_CREATEPARAM& cp,
+ CPDFSDK_PageView* pPageView) {
+ CPWL_Edit* pWnd = new CPWL_Edit();
+ pWnd->AttachFFLData(this);
+ pWnd->Create(cp);
+
+ ASSERT(m_pApp != NULL);
+ CFFL_IFormFiller* pIFormFiller = m_pApp->GetIFormFiller();
+ pWnd->SetFillerNotify(pIFormFiller);
+
+ ASSERT(m_pWidget != NULL);
+ int32_t nMaxLen = m_pWidget->GetMaxLen();
+ CFX_WideString swValue = m_pWidget->GetValue();
+
+ if (nMaxLen > 0) {
+ if (pWnd->HasFlag(PES_CHARARRAY)) {
+ pWnd->SetCharArray(nMaxLen);
+ pWnd->SetAlignFormatV(PEAV_CENTER);
+ } else {
+ pWnd->SetLimitChar(nMaxLen);
}
+ }
- pWnd->SetText(swValue.c_str());
- return pWnd;
+ pWnd->SetText(swValue.c_str());
+ return pWnd;
}
-
-FX_BOOL CFFL_TextField::OnChar(CPDFSDK_Annot* pAnnot, FX_UINT nChar, FX_UINT nFlags)
-{
- switch (nChar)
- {
+FX_BOOL CFFL_TextField::OnChar(CPDFSDK_Annot* pAnnot,
+ FX_UINT nChar,
+ FX_UINT nFlags) {
+ switch (nChar) {
case FWL_VKEY_Return:
- if (!(m_pWidget->GetFieldFlags() & FIELDFLAG_MULTILINE))
- {
- CPDFSDK_PageView* pPageView = GetCurPageView();
- ASSERT(pPageView != NULL);
- m_bValid = !m_bValid;
- CPDF_Rect rcAnnot = pAnnot->GetRect();
- m_pApp->FFI_Invalidate(pAnnot->GetPDFPage(), rcAnnot.left, rcAnnot.top, rcAnnot.right, rcAnnot.bottom);
-
- if (m_bValid)
- {
- if (CPWL_Wnd* pWnd = GetPDFWindow(pPageView, TRUE))
- pWnd->SetFocus();
- }
- else
- {
- if (CommitData(pPageView, nFlags))
- {
- DestroyPDFWindow(pPageView);
- return TRUE;
- }
- return FALSE;
- }
- }
- break;
- case FWL_VKEY_Escape:
- {
- CPDFSDK_PageView* pPageView = GetCurPageView();
- ASSERT(pPageView != NULL);
- EscapeFiller(pPageView,TRUE);
+ if (!(m_pWidget->GetFieldFlags() & FIELDFLAG_MULTILINE)) {
+ CPDFSDK_PageView* pPageView = GetCurPageView();
+ ASSERT(pPageView != NULL);
+ m_bValid = !m_bValid;
+ CPDF_Rect rcAnnot = pAnnot->GetRect();
+ m_pApp->FFI_Invalidate(pAnnot->GetPDFPage(), rcAnnot.left, rcAnnot.top,
+ rcAnnot.right, rcAnnot.bottom);
+
+ if (m_bValid) {
+ if (CPWL_Wnd* pWnd = GetPDFWindow(pPageView, TRUE))
+ pWnd->SetFocus();
+ } else {
+ if (CommitData(pPageView, nFlags)) {
+ DestroyPDFWindow(pPageView);
return TRUE;
+ }
+ return FALSE;
}
+ }
+ break;
+ case FWL_VKEY_Escape: {
+ CPDFSDK_PageView* pPageView = GetCurPageView();
+ ASSERT(pPageView != NULL);
+ EscapeFiller(pPageView, TRUE);
+ return TRUE;
}
+ }
- return CFFL_FormFiller::OnChar(pAnnot, nChar, nFlags);
+ return CFFL_FormFiller::OnChar(pAnnot, nChar, nFlags);
}
-FX_BOOL CFFL_TextField::IsDataChanged(CPDFSDK_PageView* pPageView)
-{
- ASSERT(m_pWidget != NULL);
+FX_BOOL CFFL_TextField::IsDataChanged(CPDFSDK_PageView* pPageView) {
+ ASSERT(m_pWidget != NULL);
- if (CPWL_Edit * pEdit = (CPWL_Edit*)GetPDFWindow(pPageView, FALSE))
- return pEdit->GetText() != m_pWidget->GetValue();
+ if (CPWL_Edit* pEdit = (CPWL_Edit*)GetPDFWindow(pPageView, FALSE))
+ return pEdit->GetText() != m_pWidget->GetValue();
- return FALSE;
+ return FALSE;
}
-void CFFL_TextField::SaveData(CPDFSDK_PageView* pPageView)
-{
- ASSERT(m_pWidget != NULL);
+void CFFL_TextField::SaveData(CPDFSDK_PageView* pPageView) {
+ ASSERT(m_pWidget != NULL);
- if (CPWL_Edit* pWnd = (CPWL_Edit*)GetPDFWindow(pPageView, FALSE))
- {
- CFX_WideString sOldValue = m_pWidget->GetValue();
- CFX_WideString sNewValue = pWnd->GetText();
+ if (CPWL_Edit* pWnd = (CPWL_Edit*)GetPDFWindow(pPageView, FALSE)) {
+ CFX_WideString sOldValue = m_pWidget->GetValue();
+ CFX_WideString sNewValue = pWnd->GetText();
- m_pWidget->SetValue(sNewValue, FALSE);
- m_pWidget->ResetFieldAppearance(TRUE);
- m_pWidget->UpdateField();
- SetChangeMark();
- }
+ m_pWidget->SetValue(sNewValue, FALSE);
+ m_pWidget->ResetFieldAppearance(TRUE);
+ m_pWidget->UpdateField();
+ SetChangeMark();
+ }
}
-void CFFL_TextField::GetActionData(CPDFSDK_PageView* pPageView, CPDF_AAction::AActionType type,
- PDFSDK_FieldAction& fa)
-{
- switch (type)
- {
+void CFFL_TextField::GetActionData(CPDFSDK_PageView* pPageView,
+ CPDF_AAction::AActionType type,
+ PDFSDK_FieldAction& fa) {
+ switch (type) {
case CPDF_AAction::KeyStroke:
- if (CPWL_Edit* pWnd = (CPWL_Edit*)GetPDFWindow(pPageView, FALSE))
- {
- fa.bFieldFull = pWnd->IsTextFull();
+ if (CPWL_Edit* pWnd = (CPWL_Edit*)GetPDFWindow(pPageView, FALSE)) {
+ fa.bFieldFull = pWnd->IsTextFull();
- fa.sValue = pWnd->GetText();
+ fa.sValue = pWnd->GetText();
- if (fa.bFieldFull)
- {
- fa.sChange = L"";
- fa.sChangeEx = L"";
- }
+ if (fa.bFieldFull) {
+ fa.sChange = L"";
+ fa.sChangeEx = L"";
}
- break;
+ }
+ break;
case CPDF_AAction::Validate:
- if (CPWL_Edit* pWnd = (CPWL_Edit*)GetPDFWindow(pPageView, FALSE))
- {
- fa.sValue = pWnd->GetText();
- }
- break;
+ if (CPWL_Edit* pWnd = (CPWL_Edit*)GetPDFWindow(pPageView, FALSE)) {
+ fa.sValue = pWnd->GetText();
+ }
+ break;
case CPDF_AAction::LoseFocus:
case CPDF_AAction::GetFocus:
- ASSERT(m_pWidget != NULL);
- fa.sValue = m_pWidget->GetValue();
- break;
+ ASSERT(m_pWidget != NULL);
+ fa.sValue = m_pWidget->GetValue();
+ break;
default:
- break;
- }
+ break;
+ }
}
-void CFFL_TextField::SetActionData(CPDFSDK_PageView* pPageView, CPDF_AAction::AActionType type,
- const PDFSDK_FieldAction& fa)
-{
- switch (type)
- {
+void CFFL_TextField::SetActionData(CPDFSDK_PageView* pPageView,
+ CPDF_AAction::AActionType type,
+ const PDFSDK_FieldAction& fa) {
+ switch (type) {
case CPDF_AAction::KeyStroke:
- if (CPWL_Edit * pEdit = (CPWL_Edit*)GetPDFWindow(pPageView, FALSE))
- {
- pEdit->SetFocus();
- pEdit->SetSel(fa.nSelStart, fa.nSelEnd);
- pEdit->ReplaceSel(fa.sChange.c_str());
- }
- break;
+ if (CPWL_Edit* pEdit = (CPWL_Edit*)GetPDFWindow(pPageView, FALSE)) {
+ pEdit->SetFocus();
+ pEdit->SetSel(fa.nSelStart, fa.nSelEnd);
+ pEdit->ReplaceSel(fa.sChange.c_str());
+ }
+ break;
default:
- break;
- }
+ break;
+ }
}
-
-FX_BOOL CFFL_TextField::IsActionDataChanged(CPDF_AAction::AActionType type, const PDFSDK_FieldAction& faOld,
- const PDFSDK_FieldAction& faNew)
-{
- switch (type)
- {
+FX_BOOL CFFL_TextField::IsActionDataChanged(CPDF_AAction::AActionType type,
+ const PDFSDK_FieldAction& faOld,
+ const PDFSDK_FieldAction& faNew) {
+ switch (type) {
case CPDF_AAction::KeyStroke:
- return (!faOld.bFieldFull && faOld.nSelEnd != faNew.nSelEnd) || faOld.nSelStart != faNew.nSelStart ||
- faOld.sChange != faNew.sChange;
+ return (!faOld.bFieldFull && faOld.nSelEnd != faNew.nSelEnd) ||
+ faOld.nSelStart != faNew.nSelStart ||
+ faOld.sChange != faNew.sChange;
default:
- break;
- }
+ break;
+ }
- return FALSE;
+ return FALSE;
}
-void CFFL_TextField::SaveState(CPDFSDK_PageView* pPageView)
-{
- ASSERT(pPageView != NULL);
+void CFFL_TextField::SaveState(CPDFSDK_PageView* pPageView) {
+ ASSERT(pPageView != NULL);
- if (CPWL_Edit* pWnd = (CPWL_Edit*)GetPDFWindow(pPageView, FALSE))
- {
- pWnd->GetSel(m_State.nStart, m_State.nEnd);
- m_State.sValue = pWnd->GetText();
- }
+ if (CPWL_Edit* pWnd = (CPWL_Edit*)GetPDFWindow(pPageView, FALSE)) {
+ pWnd->GetSel(m_State.nStart, m_State.nEnd);
+ m_State.sValue = pWnd->GetText();
+ }
}
-void CFFL_TextField::RestoreState(CPDFSDK_PageView* pPageView)
-{
- ASSERT(pPageView != NULL);
+void CFFL_TextField::RestoreState(CPDFSDK_PageView* pPageView) {
+ ASSERT(pPageView != NULL);
- if (CPWL_Edit* pWnd = (CPWL_Edit*)GetPDFWindow(pPageView, TRUE))
- {
- pWnd->SetText(m_State.sValue.c_str());
- pWnd->SetSel(m_State.nStart, m_State.nEnd);
- }
+ if (CPWL_Edit* pWnd = (CPWL_Edit*)GetPDFWindow(pPageView, TRUE)) {
+ pWnd->SetText(m_State.sValue.c_str());
+ pWnd->SetSel(m_State.nStart, m_State.nEnd);
+ }
}
-CPWL_Wnd* CFFL_TextField::ResetPDFWindow(CPDFSDK_PageView* pPageView, FX_BOOL bRestoreValue)
-{
- if (bRestoreValue)
- SaveState(pPageView);
+CPWL_Wnd* CFFL_TextField::ResetPDFWindow(CPDFSDK_PageView* pPageView,
+ FX_BOOL bRestoreValue) {
+ if (bRestoreValue)
+ SaveState(pPageView);
- DestroyPDFWindow(pPageView);
+ DestroyPDFWindow(pPageView);
- CPWL_Wnd* pRet = NULL;
+ CPWL_Wnd* pRet = NULL;
- if (bRestoreValue)
- {
- RestoreState(pPageView);
- pRet = GetPDFWindow(pPageView, FALSE);
- }
- else
- pRet = GetPDFWindow(pPageView, TRUE);
+ if (bRestoreValue) {
+ RestoreState(pPageView);
+ pRet = GetPDFWindow(pPageView, FALSE);
+ } else
+ pRet = GetPDFWindow(pPageView, TRUE);
- m_pWidget->UpdateField();
+ m_pWidget->UpdateField();
- return pRet;
+ return pRet;
}
-void CFFL_TextField::OnSetFocus(CPWL_Wnd* pWnd)
-{
- ASSERT(m_pApp != NULL);
+void CFFL_TextField::OnSetFocus(CPWL_Wnd* pWnd) {
+ ASSERT(m_pApp != NULL);
- ASSERT(pWnd != NULL);
+ ASSERT(pWnd != NULL);
- if (pWnd->GetClassName() == PWL_CLASSNAME_EDIT)
- {
- CPWL_Edit* pEdit = (CPWL_Edit*)pWnd;
- pEdit->SetCharSet(134);
- pEdit->SetCodePage(936);
+ if (pWnd->GetClassName() == PWL_CLASSNAME_EDIT) {
+ CPWL_Edit* pEdit = (CPWL_Edit*)pWnd;
+ pEdit->SetCharSet(134);
+ pEdit->SetCodePage(936);
- pEdit->SetReadyToInput();
- CFX_WideString wsText = pEdit->GetText();
- int nCharacters = wsText.GetLength();
- CFX_ByteString bsUTFText = wsText.UTF16LE_Encode();
- unsigned short* pBuffer = (unsigned short*)bsUTFText.c_str();
- m_pApp->FFI_OnSetFieldInputFocus(m_pWidget->GetFormField(), pBuffer, nCharacters, TRUE);
+ pEdit->SetReadyToInput();
+ CFX_WideString wsText = pEdit->GetText();
+ int nCharacters = wsText.GetLength();
+ CFX_ByteString bsUTFText = wsText.UTF16LE_Encode();
+ unsigned short* pBuffer = (unsigned short*)bsUTFText.c_str();
+ m_pApp->FFI_OnSetFieldInputFocus(m_pWidget->GetFormField(), pBuffer,
+ nCharacters, TRUE);
- pEdit->SetEditNotify(this);
- //pUndo->BeginEdit(pDocument);
- }
+ pEdit->SetEditNotify(this);
+ // pUndo->BeginEdit(pDocument);
+ }
}
-void CFFL_TextField::OnKillFocus(CPWL_Wnd* pWnd)
-{
+void CFFL_TextField::OnKillFocus(CPWL_Wnd* pWnd) {}
+FX_BOOL CFFL_TextField::CanCopy(CPDFSDK_Document* pDocument) {
+ return FALSE;
}
-FX_BOOL CFFL_TextField::CanCopy(CPDFSDK_Document* pDocument)
-{
- return FALSE;
+FX_BOOL CFFL_TextField::CanCut(CPDFSDK_Document* pDocument) {
+ return FALSE;
}
-FX_BOOL CFFL_TextField::CanCut(CPDFSDK_Document* pDocument)
-{
- return FALSE;
-}
-
-FX_BOOL CFFL_TextField::CanPaste(CPDFSDK_Document* pDocument)
-{
- return FALSE;
-}
-
-void CFFL_TextField::OnAddUndo(CPWL_Edit* pEdit)
-{
+FX_BOOL CFFL_TextField::CanPaste(CPDFSDK_Document* pDocument) {
+ return FALSE;
}
+void CFFL_TextField::OnAddUndo(CPWL_Edit* pEdit) {}
diff --git a/fpdfsdk/src/formfiller/FFL_Utils.cpp b/fpdfsdk/src/formfiller/FFL_Utils.cpp
index 8d2d76d73c..d2ce56ac52 100644
--- a/fpdfsdk/src/formfiller/FFL_Utils.cpp
+++ b/fpdfsdk/src/formfiller/FFL_Utils.cpp
@@ -9,106 +9,91 @@
#include "../../include/formfiller/FormFiller.h"
#include "../../include/formfiller/FFL_Utils.h"
-CPDF_Rect CFFL_Utils::MaxRect(const CPDF_Rect & rect1,const CPDF_Rect & rect2)
-{
- CPDF_Rect rcRet;
+CPDF_Rect CFFL_Utils::MaxRect(const CPDF_Rect& rect1, const CPDF_Rect& rect2) {
+ CPDF_Rect rcRet;
- rcRet.left = std::min(rect1.left, rect2.left);
- rcRet.bottom = std::min(rect1.bottom, rect2.bottom);
- rcRet.right = std::max(rect1.right, rect2.right);
- rcRet.top = std::max(rect1.top, rect2.top);
+ rcRet.left = std::min(rect1.left, rect2.left);
+ rcRet.bottom = std::min(rect1.bottom, rect2.bottom);
+ rcRet.right = std::max(rect1.right, rect2.right);
+ rcRet.top = std::max(rect1.top, rect2.top);
- return rcRet;
+ return rcRet;
}
-CPDF_Rect CFFL_Utils::InflateRect(const CPDF_Rect & crRect,const FX_FLOAT & fSize)
-{
- CPDF_Rect crNew(crRect.left - fSize,
- crRect.bottom - fSize,
- crRect.right + fSize,
- crRect.top + fSize);
- crNew.Normalize();
- return crNew;
+CPDF_Rect CFFL_Utils::InflateRect(const CPDF_Rect& crRect,
+ const FX_FLOAT& fSize) {
+ CPDF_Rect crNew(crRect.left - fSize, crRect.bottom - fSize,
+ crRect.right + fSize, crRect.top + fSize);
+ crNew.Normalize();
+ return crNew;
}
-CPDF_Rect CFFL_Utils::DeflateRect(const CPDF_Rect & crRect,const FX_FLOAT & fSize)
-{
- CPDF_Rect crNew(crRect.left + fSize,
- crRect.bottom + fSize,
- crRect.right - fSize,
- crRect.top - fSize);
- crNew.Normalize();
- return crNew;
+CPDF_Rect CFFL_Utils::DeflateRect(const CPDF_Rect& crRect,
+ const FX_FLOAT& fSize) {
+ CPDF_Rect crNew(crRect.left + fSize, crRect.bottom + fSize,
+ crRect.right - fSize, crRect.top - fSize);
+ crNew.Normalize();
+ return crNew;
}
-FX_BOOL CFFL_Utils::TraceObject(CPDF_Object* pObj)
-{
- if (!pObj) return FALSE;
-
- FX_DWORD dwObjNum = pObj->GetObjNum();
- switch (pObj->GetType())
- {
- case PDFOBJ_ARRAY:
- {
- CPDF_Array* pArray = (CPDF_Array*)pObj;
- for (FX_DWORD i = 0; i < pArray->GetCount(); i ++)
- {
- CPDF_Object* pElement = pArray->GetElementValue(i);
- TraceObject(pElement);
- }
- }
- break;
-
- case PDFOBJ_DICTIONARY:
- {
- CPDF_Dictionary* pDict = (CPDF_Dictionary*)pObj;
-
- FX_POSITION fPos = pDict->GetStartPos();
- CFX_ByteString csKey;
- do
- {
- CPDF_Object* pElement = pDict->GetNextElement(fPos, csKey);
- //TRACE(csKey + "\n");
- if (!pElement) break;
- TraceObject(pElement);
- }while (TRUE);
- }
- break;
-
- case PDFOBJ_STREAM:
- {
- CPDF_Stream* pStream = (CPDF_Stream*)pObj;
- CPDF_Dictionary* pDict = pStream->GetDict();
- TraceObject(pDict);
- }
- break;
-
- case PDFOBJ_REFERENCE:
- {
- CPDF_Object* pDirectObj = pObj->GetDirect();
- TraceObject(pDirectObj);
- }
- break;
-
- case PDFOBJ_BOOLEAN:
- break;
- case PDFOBJ_NUMBER:
- //TRACE("%d\n",(int32_t)pObj);
- break;
- case PDFOBJ_STRING:
- //TRACE(((CPDF_String*)pObj)->GetString() + "\n");
- break;
- case PDFOBJ_NAME:
- //TRACE(((CPDF_Name*)pObj)->GetString() + "\n");
- break;
- case PDFOBJ_NULL:
-// case PDFOBJ_KEYWORD:
-// case PDFOBJ_EOF:
- default:
- break;
- }
- if (dwObjNum == 0) return FALSE;
-
- return TRUE;
+FX_BOOL CFFL_Utils::TraceObject(CPDF_Object* pObj) {
+ if (!pObj)
+ return FALSE;
+
+ FX_DWORD dwObjNum = pObj->GetObjNum();
+ switch (pObj->GetType()) {
+ case PDFOBJ_ARRAY: {
+ CPDF_Array* pArray = (CPDF_Array*)pObj;
+ for (FX_DWORD i = 0; i < pArray->GetCount(); i++) {
+ CPDF_Object* pElement = pArray->GetElementValue(i);
+ TraceObject(pElement);
+ }
+ } break;
+
+ case PDFOBJ_DICTIONARY: {
+ CPDF_Dictionary* pDict = (CPDF_Dictionary*)pObj;
+
+ FX_POSITION fPos = pDict->GetStartPos();
+ CFX_ByteString csKey;
+ do {
+ CPDF_Object* pElement = pDict->GetNextElement(fPos, csKey);
+ // TRACE(csKey + "\n");
+ if (!pElement)
+ break;
+ TraceObject(pElement);
+ } while (TRUE);
+ } break;
+
+ case PDFOBJ_STREAM: {
+ CPDF_Stream* pStream = (CPDF_Stream*)pObj;
+ CPDF_Dictionary* pDict = pStream->GetDict();
+ TraceObject(pDict);
+ } break;
+
+ case PDFOBJ_REFERENCE: {
+ CPDF_Object* pDirectObj = pObj->GetDirect();
+ TraceObject(pDirectObj);
+ } break;
+
+ case PDFOBJ_BOOLEAN:
+ break;
+ case PDFOBJ_NUMBER:
+ // TRACE("%d\n",(int32_t)pObj);
+ break;
+ case PDFOBJ_STRING:
+ // TRACE(((CPDF_String*)pObj)->GetString() + "\n");
+ break;
+ case PDFOBJ_NAME:
+ // TRACE(((CPDF_Name*)pObj)->GetString() + "\n");
+ break;
+ case PDFOBJ_NULL:
+ // case PDFOBJ_KEYWORD:
+ // case PDFOBJ_EOF:
+ default:
+ break;
+ }
+ if (dwObjNum == 0)
+ return FALSE;
+
+ return TRUE;
}
-
diff --git a/fpdfsdk/src/fpdf_dataavail.cpp b/fpdfsdk/src/fpdf_dataavail.cpp
index b26d2af10a..8f9638d90a 100644
--- a/fpdfsdk/src/fpdf_dataavail.cpp
+++ b/fpdfsdk/src/fpdf_dataavail.cpp
@@ -8,157 +8,135 @@
#include "../include/fsdk_define.h"
extern void ProcessParseError(FX_DWORD err_code);
-class CFPDF_FileAvailWrap : public IFX_FileAvail
-{
-public:
- CFPDF_FileAvailWrap()
- {
- m_pfileAvail = NULL;
- }
-
- void Set(FX_FILEAVAIL* pfileAvail)
- {
- m_pfileAvail = pfileAvail;
- }
-
- virtual FX_BOOL IsDataAvail( FX_FILESIZE offset, FX_DWORD size)
- {
- return m_pfileAvail->IsDataAvail(m_pfileAvail, offset, size);
- }
-
-private:
- FX_FILEAVAIL* m_pfileAvail;
+class CFPDF_FileAvailWrap : public IFX_FileAvail {
+ public:
+ CFPDF_FileAvailWrap() { m_pfileAvail = NULL; }
+
+ void Set(FX_FILEAVAIL* pfileAvail) { m_pfileAvail = pfileAvail; }
+
+ virtual FX_BOOL IsDataAvail(FX_FILESIZE offset, FX_DWORD size) {
+ return m_pfileAvail->IsDataAvail(m_pfileAvail, offset, size);
+ }
+
+ private:
+ FX_FILEAVAIL* m_pfileAvail;
};
-class CFPDF_FileAccessWrap : public IFX_FileRead
-{
-public:
- CFPDF_FileAccessWrap()
- {
- m_pFileAccess = NULL;
- }
-
- void Set(FPDF_FILEACCESS* pFile)
- {
- m_pFileAccess = pFile;
- }
-
- virtual FX_FILESIZE GetSize()
- {
- return m_pFileAccess->m_FileLen;
- }
-
- virtual FX_BOOL ReadBlock(void* buffer, FX_FILESIZE offset, size_t size)
- {
- return m_pFileAccess->m_GetBlock(m_pFileAccess->m_Param, offset, (uint8_t*)buffer, size);
- }
-
- virtual void Release()
- {
- }
-
-private:
- FPDF_FILEACCESS* m_pFileAccess;
+class CFPDF_FileAccessWrap : public IFX_FileRead {
+ public:
+ CFPDF_FileAccessWrap() { m_pFileAccess = NULL; }
+
+ void Set(FPDF_FILEACCESS* pFile) { m_pFileAccess = pFile; }
+
+ virtual FX_FILESIZE GetSize() { return m_pFileAccess->m_FileLen; }
+
+ virtual FX_BOOL ReadBlock(void* buffer, FX_FILESIZE offset, size_t size) {
+ return m_pFileAccess->m_GetBlock(m_pFileAccess->m_Param, offset,
+ (uint8_t*)buffer, size);
+ }
+
+ virtual void Release() {}
+
+ private:
+ FPDF_FILEACCESS* m_pFileAccess;
};
-class CFPDF_DownloadHintsWrap : public IFX_DownloadHints
-{
-public:
- CFPDF_DownloadHintsWrap(FX_DOWNLOADHINTS* pDownloadHints)
- {
- m_pDownloadHints = pDownloadHints;
- }
-public:
- virtual void AddSegment(FX_FILESIZE offset, FX_DWORD size)
- {
- m_pDownloadHints->AddSegment(m_pDownloadHints, offset, size);
- }
-private:
- FX_DOWNLOADHINTS* m_pDownloadHints;
+class CFPDF_DownloadHintsWrap : public IFX_DownloadHints {
+ public:
+ CFPDF_DownloadHintsWrap(FX_DOWNLOADHINTS* pDownloadHints) {
+ m_pDownloadHints = pDownloadHints;
+ }
+
+ public:
+ virtual void AddSegment(FX_FILESIZE offset, FX_DWORD size) {
+ m_pDownloadHints->AddSegment(m_pDownloadHints, offset, size);
+ }
+
+ private:
+ FX_DOWNLOADHINTS* m_pDownloadHints;
};
-class CFPDF_DataAvail
-{
-public:
- CFPDF_DataAvail()
- {
- m_pDataAvail = NULL;
- }
-
- ~CFPDF_DataAvail()
- {
- delete m_pDataAvail;
- }
-
- IPDF_DataAvail* m_pDataAvail;
- CFPDF_FileAvailWrap m_FileAvail;
- CFPDF_FileAccessWrap m_FileRead;
+class CFPDF_DataAvail {
+ public:
+ CFPDF_DataAvail() { m_pDataAvail = NULL; }
+
+ ~CFPDF_DataAvail() { delete m_pDataAvail; }
+
+ IPDF_DataAvail* m_pDataAvail;
+ CFPDF_FileAvailWrap m_FileAvail;
+ CFPDF_FileAccessWrap m_FileRead;
};
-DLLEXPORT FPDF_AVAIL STDCALL FPDFAvail_Create(FX_FILEAVAIL* file_avail, FPDF_FILEACCESS* file)
-{
- CFPDF_DataAvail* pAvail = new CFPDF_DataAvail;
- pAvail->m_FileAvail.Set(file_avail);
- pAvail->m_FileRead.Set(file);
- pAvail->m_pDataAvail = IPDF_DataAvail::Create(&pAvail->m_FileAvail, &pAvail->m_FileRead);
- return pAvail;
+DLLEXPORT FPDF_AVAIL STDCALL FPDFAvail_Create(FX_FILEAVAIL* file_avail,
+ FPDF_FILEACCESS* file) {
+ CFPDF_DataAvail* pAvail = new CFPDF_DataAvail;
+ pAvail->m_FileAvail.Set(file_avail);
+ pAvail->m_FileRead.Set(file);
+ pAvail->m_pDataAvail =
+ IPDF_DataAvail::Create(&pAvail->m_FileAvail, &pAvail->m_FileRead);
+ return pAvail;
}
-DLLEXPORT void STDCALL FPDFAvail_Destroy(FPDF_AVAIL avail)
-{
- delete (CFPDF_DataAvail*)avail;
+DLLEXPORT void STDCALL FPDFAvail_Destroy(FPDF_AVAIL avail) {
+ delete (CFPDF_DataAvail*)avail;
}
-DLLEXPORT int STDCALL FPDFAvail_IsDocAvail(FPDF_AVAIL avail, FX_DOWNLOADHINTS* hints)
-{
- if (avail == NULL || hints == NULL) return 0;
- CFPDF_DownloadHintsWrap hints_wrap(hints);
- return ((CFPDF_DataAvail*)avail)->m_pDataAvail->IsDocAvail(&hints_wrap);
+DLLEXPORT int STDCALL FPDFAvail_IsDocAvail(FPDF_AVAIL avail,
+ FX_DOWNLOADHINTS* hints) {
+ if (avail == NULL || hints == NULL)
+ return 0;
+ CFPDF_DownloadHintsWrap hints_wrap(hints);
+ return ((CFPDF_DataAvail*)avail)->m_pDataAvail->IsDocAvail(&hints_wrap);
}
-extern void CheckUnSupportError(CPDF_Document * pDoc, FX_DWORD err_code);
-
-DLLEXPORT FPDF_DOCUMENT STDCALL FPDFAvail_GetDocument(FPDF_AVAIL avail, FPDF_BYTESTRING password)
-{
- if (avail == NULL) return NULL;
- CPDF_Parser* pParser = new CPDF_Parser;
- pParser->SetPassword(password);
-
- FX_DWORD err_code = pParser->StartAsynParse(((CFPDF_DataAvail*)avail)->m_pDataAvail->GetFileRead());
- if (err_code) {
- delete pParser;
- ProcessParseError(err_code);
- return NULL;
- }
- ((CFPDF_DataAvail*)avail)->m_pDataAvail->SetDocument(pParser->GetDocument());
- CheckUnSupportError(pParser->GetDocument(), FPDF_ERR_SUCCESS);
- return pParser->GetDocument();
+extern void CheckUnSupportError(CPDF_Document* pDoc, FX_DWORD err_code);
+
+DLLEXPORT FPDF_DOCUMENT STDCALL
+FPDFAvail_GetDocument(FPDF_AVAIL avail, FPDF_BYTESTRING password) {
+ if (avail == NULL)
+ return NULL;
+ CPDF_Parser* pParser = new CPDF_Parser;
+ pParser->SetPassword(password);
+
+ FX_DWORD err_code = pParser->StartAsynParse(
+ ((CFPDF_DataAvail*)avail)->m_pDataAvail->GetFileRead());
+ if (err_code) {
+ delete pParser;
+ ProcessParseError(err_code);
+ return NULL;
+ }
+ ((CFPDF_DataAvail*)avail)->m_pDataAvail->SetDocument(pParser->GetDocument());
+ CheckUnSupportError(pParser->GetDocument(), FPDF_ERR_SUCCESS);
+ return pParser->GetDocument();
}
-DLLEXPORT int STDCALL FPDFAvail_GetFirstPageNum(FPDF_DOCUMENT doc)
-{
- if (doc == NULL) return 0;
- CPDF_Document* pDoc = (CPDF_Document*)doc;
- return ((CPDF_Parser*)pDoc->GetParser())->GetFirstPageNo();
+DLLEXPORT int STDCALL FPDFAvail_GetFirstPageNum(FPDF_DOCUMENT doc) {
+ if (doc == NULL)
+ return 0;
+ CPDF_Document* pDoc = (CPDF_Document*)doc;
+ return ((CPDF_Parser*)pDoc->GetParser())->GetFirstPageNo();
}
-DLLEXPORT int STDCALL FPDFAvail_IsPageAvail(FPDF_AVAIL avail, int page_index, FX_DOWNLOADHINTS* hints)
-{
- if (avail == NULL || hints == NULL) return 0;
- CFPDF_DownloadHintsWrap hints_wrap(hints);
- return ((CFPDF_DataAvail*)avail)->m_pDataAvail->IsPageAvail(page_index, &hints_wrap);
+DLLEXPORT int STDCALL FPDFAvail_IsPageAvail(FPDF_AVAIL avail,
+ int page_index,
+ FX_DOWNLOADHINTS* hints) {
+ if (avail == NULL || hints == NULL)
+ return 0;
+ CFPDF_DownloadHintsWrap hints_wrap(hints);
+ return ((CFPDF_DataAvail*)avail)
+ ->m_pDataAvail->IsPageAvail(page_index, &hints_wrap);
}
-DLLEXPORT int STDCALL FPDFAvail_IsFormAvail(FPDF_AVAIL avail, FX_DOWNLOADHINTS* hints)
-{
- if (avail == NULL || hints == NULL) return -1;
- CFPDF_DownloadHintsWrap hints_wrap(hints);
- return ((CFPDF_DataAvail*)avail)->m_pDataAvail->IsFormAvail(&hints_wrap);
+DLLEXPORT int STDCALL FPDFAvail_IsFormAvail(FPDF_AVAIL avail,
+ FX_DOWNLOADHINTS* hints) {
+ if (avail == NULL || hints == NULL)
+ return -1;
+ CFPDF_DownloadHintsWrap hints_wrap(hints);
+ return ((CFPDF_DataAvail*)avail)->m_pDataAvail->IsFormAvail(&hints_wrap);
}
-DLLEXPORT FPDF_BOOL STDCALL FPDFAvail_IsLinearized(FPDF_AVAIL avail)
-{
- if (avail == NULL) return -1;
- return ((CFPDF_DataAvail*)avail)->m_pDataAvail->IsLinearizedPDF();
-
+DLLEXPORT FPDF_BOOL STDCALL FPDFAvail_IsLinearized(FPDF_AVAIL avail) {
+ if (avail == NULL)
+ return -1;
+ return ((CFPDF_DataAvail*)avail)->m_pDataAvail->IsLinearizedPDF();
}
diff --git a/fpdfsdk/src/fpdf_dataavail_embeddertest.cpp b/fpdfsdk/src/fpdf_dataavail_embeddertest.cpp
index 3207802d48..65e9348f55 100644
--- a/fpdfsdk/src/fpdf_dataavail_embeddertest.cpp
+++ b/fpdfsdk/src/fpdf_dataavail_embeddertest.cpp
@@ -7,8 +7,7 @@
#include "../../testing/embedder_test.h"
#include "testing/gtest/include/gtest/gtest.h"
-class FPDFDataAvailEmbeddertest : public EmbedderTest {
-};
+class FPDFDataAvailEmbeddertest : public EmbedderTest {};
TEST_F(FPDFDataAvailEmbeddertest, TrailerUnterminated) {
// Document must open without crashing but is too malformed to be available.
diff --git a/fpdfsdk/src/fpdf_ext.cpp b/fpdfsdk/src/fpdf_ext.cpp
index 0d8db417ac..e95a2f0094 100644
--- a/fpdfsdk/src/fpdf_ext.cpp
+++ b/fpdfsdk/src/fpdf_ext.cpp
@@ -8,238 +8,206 @@
#include "../../public/fpdf_ext.h"
#include "../include/fsdk_define.h"
-#define FPDFSDK_UNSUPPORT_CALL 100
-
-class CFSDK_UnsupportInfo_Adapter
-{
-public:
- CFSDK_UnsupportInfo_Adapter(UNSUPPORT_INFO* unsp_info){ m_unsp_info = unsp_info;}
-// FX_BOOL NeedToPauseNow();
- void ReportError(int nErrorType);
-
-private:
- UNSUPPORT_INFO* m_unsp_info;
+#define FPDFSDK_UNSUPPORT_CALL 100
+
+class CFSDK_UnsupportInfo_Adapter {
+ public:
+ CFSDK_UnsupportInfo_Adapter(UNSUPPORT_INFO* unsp_info) {
+ m_unsp_info = unsp_info;
+ }
+ // FX_BOOL NeedToPauseNow();
+ void ReportError(int nErrorType);
+
+ private:
+ UNSUPPORT_INFO* m_unsp_info;
};
-void CFSDK_UnsupportInfo_Adapter::ReportError(int nErrorType)
-{
- if(m_unsp_info && m_unsp_info->FSDK_UnSupport_Handler)
- {
- m_unsp_info->FSDK_UnSupport_Handler(m_unsp_info,nErrorType);
- }
+void CFSDK_UnsupportInfo_Adapter::ReportError(int nErrorType) {
+ if (m_unsp_info && m_unsp_info->FSDK_UnSupport_Handler) {
+ m_unsp_info->FSDK_UnSupport_Handler(m_unsp_info, nErrorType);
+ }
}
-void FreeUnsupportInfo(void* pData)
-{
- CFSDK_UnsupportInfo_Adapter * pAdapter = (CFSDK_UnsupportInfo_Adapter *)pData;
- delete pAdapter;
+void FreeUnsupportInfo(void* pData) {
+ CFSDK_UnsupportInfo_Adapter* pAdapter = (CFSDK_UnsupportInfo_Adapter*)pData;
+ delete pAdapter;
}
-FX_BOOL FPDF_UnSupportError(int nError)
-{
- CFSDK_UnsupportInfo_Adapter * pAdapter = (CFSDK_UnsupportInfo_Adapter *)CPDF_ModuleMgr::Get()->GetPrivateData((void *)FPDFSDK_UNSUPPORT_CALL);
+FX_BOOL FPDF_UnSupportError(int nError) {
+ CFSDK_UnsupportInfo_Adapter* pAdapter =
+ (CFSDK_UnsupportInfo_Adapter*)CPDF_ModuleMgr::Get()->GetPrivateData(
+ (void*)FPDFSDK_UNSUPPORT_CALL);
- if(!pAdapter)
- return FALSE;
- pAdapter->ReportError(nError);
- return TRUE;
+ if (!pAdapter)
+ return FALSE;
+ pAdapter->ReportError(nError);
+ return TRUE;
}
-DLLEXPORT FPDF_BOOL STDCALL FSDK_SetUnSpObjProcessHandler(UNSUPPORT_INFO* unsp_info)
-{
- if (!unsp_info || unsp_info->version!=1)
- return FALSE;
- CFSDK_UnsupportInfo_Adapter * pAdapter = new CFSDK_UnsupportInfo_Adapter(unsp_info);
+DLLEXPORT FPDF_BOOL STDCALL
+FSDK_SetUnSpObjProcessHandler(UNSUPPORT_INFO* unsp_info) {
+ if (!unsp_info || unsp_info->version != 1)
+ return FALSE;
+ CFSDK_UnsupportInfo_Adapter* pAdapter =
+ new CFSDK_UnsupportInfo_Adapter(unsp_info);
- CPDF_ModuleMgr::Get()->SetPrivateData((void *)FPDFSDK_UNSUPPORT_CALL,pAdapter, &FreeUnsupportInfo);
+ CPDF_ModuleMgr::Get()->SetPrivateData((void*)FPDFSDK_UNSUPPORT_CALL, pAdapter,
+ &FreeUnsupportInfo);
- return TRUE;
+ return TRUE;
}
-void CheckUnSupportAnnot(CPDF_Document * pDoc, CPDF_Annot* pPDFAnnot)
-{
- CFX_ByteString cbSubType = pPDFAnnot->GetSubType();
- if(cbSubType.Compare("3D") == 0)
- {
- FPDF_UnSupportError(FPDF_UNSP_ANNOT_3DANNOT);
- }
- else if(cbSubType.Compare("Screen") ==0)
- {
- CPDF_Dictionary* pAnnotDict = pPDFAnnot->GetAnnotDict();
- CFX_ByteString cbString;
- if(pAnnotDict->KeyExist("IT"))
- cbString = pAnnotDict->GetString("IT");
- if(cbString.Compare("Img") != 0)
- FPDF_UnSupportError(FPDF_UNSP_ANNOT_SCREEN_MEDIA);
+void CheckUnSupportAnnot(CPDF_Document* pDoc, CPDF_Annot* pPDFAnnot) {
+ CFX_ByteString cbSubType = pPDFAnnot->GetSubType();
+ if (cbSubType.Compare("3D") == 0) {
+ FPDF_UnSupportError(FPDF_UNSP_ANNOT_3DANNOT);
+ } else if (cbSubType.Compare("Screen") == 0) {
+ CPDF_Dictionary* pAnnotDict = pPDFAnnot->GetAnnotDict();
+ CFX_ByteString cbString;
+ if (pAnnotDict->KeyExist("IT"))
+ cbString = pAnnotDict->GetString("IT");
+ if (cbString.Compare("Img") != 0)
+ FPDF_UnSupportError(FPDF_UNSP_ANNOT_SCREEN_MEDIA);
+ } else if (cbSubType.Compare("Movie") == 0) {
+ FPDF_UnSupportError(FPDF_UNSP_ANNOT_MOVIE);
+ } else if (cbSubType.Compare("Sound") == 0) {
+ FPDF_UnSupportError(FPDF_UNSP_ANNOT_SOUND);
+ } else if (cbSubType.Compare("RichMedia") == 0) {
+ FPDF_UnSupportError(FPDF_UNSP_ANNOT_SCREEN_RICHMEDIA);
+ } else if (cbSubType.Compare("FileAttachment") == 0) {
+ FPDF_UnSupportError(FPDF_UNSP_ANNOT_ATTACHMENT);
+ } else if (cbSubType.Compare("Widget") == 0) {
+ CPDF_Dictionary* pAnnotDict = pPDFAnnot->GetAnnotDict();
+ CFX_ByteString cbString;
+ if (pAnnotDict->KeyExist("FT")) {
+ cbString = pAnnotDict->GetString("FT");
}
- else if(cbSubType.Compare("Movie") ==0)
- {
- FPDF_UnSupportError(FPDF_UNSP_ANNOT_MOVIE);
- }
- else if(cbSubType.Compare("Sound") ==0)
- {
- FPDF_UnSupportError(FPDF_UNSP_ANNOT_SOUND);
- }
- else if(cbSubType.Compare("RichMedia") ==0)
- {
- FPDF_UnSupportError(FPDF_UNSP_ANNOT_SCREEN_RICHMEDIA);
- }
- else if(cbSubType.Compare("FileAttachment") ==0)
- {
- FPDF_UnSupportError(FPDF_UNSP_ANNOT_ATTACHMENT);
- }
- else if(cbSubType.Compare("Widget") ==0)
- {
- CPDF_Dictionary* pAnnotDict = pPDFAnnot->GetAnnotDict();
- CFX_ByteString cbString;
- if(pAnnotDict->KeyExist("FT"))
- {
- cbString = pAnnotDict->GetString("FT");
- }
- if(cbString.Compare("Sig") == 0)
- {
- FPDF_UnSupportError(FPDF_UNSP_ANNOT_SIG);
- }
+ if (cbString.Compare("Sig") == 0) {
+ FPDF_UnSupportError(FPDF_UNSP_ANNOT_SIG);
}
-
+ }
}
-FX_BOOL CheckSharedForm(CXML_Element * pElement, CFX_ByteString cbName)
-{
- int count = pElement->CountAttrs();
- int i=0;
- for (i = 0; i < count; i++)
- {
- CFX_ByteString space, name;
- CFX_WideString value;
- pElement->GetAttrByIndex(i, space, name, value);
- if (space == FX_BSTRC("xmlns") && name == FX_BSTRC("adhocwf") && value == L"http://ns.adobe.com/AcrobatAdhocWorkflow/1.0/")
- {
- CXML_Element *pVersion = pElement->GetElement("adhocwf",cbName);
- if (!pVersion)
- continue;
- CFX_WideString wsContent = pVersion->GetContent(0); // == 1.1
- int nType = wsContent.GetInteger();
- switch(nType)
- {
- case 1:
- FPDF_UnSupportError(FPDF_UNSP_DOC_SHAREDFORM_ACROBAT);
- break;
- case 2:
- FPDF_UnSupportError(FPDF_UNSP_DOC_SHAREDFORM_FILESYSTEM);
- break;
- case 0:
- FPDF_UnSupportError(FPDF_UNSP_DOC_SHAREDFORM_EMAIL);
- break;
- }
- }
+FX_BOOL CheckSharedForm(CXML_Element* pElement, CFX_ByteString cbName) {
+ int count = pElement->CountAttrs();
+ int i = 0;
+ for (i = 0; i < count; i++) {
+ CFX_ByteString space, name;
+ CFX_WideString value;
+ pElement->GetAttrByIndex(i, space, name, value);
+ if (space == FX_BSTRC("xmlns") && name == FX_BSTRC("adhocwf") &&
+ value == L"http://ns.adobe.com/AcrobatAdhocWorkflow/1.0/") {
+ CXML_Element* pVersion = pElement->GetElement("adhocwf", cbName);
+ if (!pVersion)
+ continue;
+ CFX_WideString wsContent = pVersion->GetContent(0); // == 1.1
+ int nType = wsContent.GetInteger();
+ switch (nType) {
+ case 1:
+ FPDF_UnSupportError(FPDF_UNSP_DOC_SHAREDFORM_ACROBAT);
+ break;
+ case 2:
+ FPDF_UnSupportError(FPDF_UNSP_DOC_SHAREDFORM_FILESYSTEM);
+ break;
+ case 0:
+ FPDF_UnSupportError(FPDF_UNSP_DOC_SHAREDFORM_EMAIL);
+ break;
+ }
}
-
- FX_DWORD nCount = pElement->CountChildren();
- for(i=0; i<(int)nCount; i++)
- {
- CXML_Element::ChildType childType = pElement->GetChildType(i);
- if(childType == CXML_Element::Element)
- {
- CXML_Element * pChild = pElement->GetElement(i);
- if(CheckSharedForm(pChild, cbName))
- return TRUE;
- }
+ }
+
+ FX_DWORD nCount = pElement->CountChildren();
+ for (i = 0; i < (int)nCount; i++) {
+ CXML_Element::ChildType childType = pElement->GetChildType(i);
+ if (childType == CXML_Element::Element) {
+ CXML_Element* pChild = pElement->GetElement(i);
+ if (CheckSharedForm(pChild, cbName))
+ return TRUE;
}
- return FALSE;
+ }
+ return FALSE;
}
-void CheckUnSupportError(CPDF_Document * pDoc, FX_DWORD err_code)
-{
- // Security
- if(err_code == FPDF_ERR_SECURITY)
- {
- FPDF_UnSupportError(FPDF_UNSP_DOC_SECURITY);
- return ;
+void CheckUnSupportError(CPDF_Document* pDoc, FX_DWORD err_code) {
+ // Security
+ if (err_code == FPDF_ERR_SECURITY) {
+ FPDF_UnSupportError(FPDF_UNSP_DOC_SECURITY);
+ return;
+ }
+ if (!pDoc)
+ return;
+
+ // Portfolios and Packages
+ CPDF_Dictionary* pRootDict = pDoc->GetRoot();
+ if (pRootDict) {
+ CFX_ByteString cbString;
+ if (pRootDict->KeyExist("Collection")) {
+ FPDF_UnSupportError(FPDF_UNSP_DOC_PORTABLECOLLECTION);
+ return;
}
- if(!pDoc)
- return ;
-
- // Portfolios and Packages
- CPDF_Dictionary * pRootDict = pDoc->GetRoot();
- if(pRootDict)
- {
- CFX_ByteString cbString;
- if(pRootDict->KeyExist("Collection"))
- {
- FPDF_UnSupportError(FPDF_UNSP_DOC_PORTABLECOLLECTION);
- return ;
- }
- if(pRootDict->KeyExist("Names"))
- {
- CPDF_Dictionary* pNameDict = pRootDict->GetDict("Names");
- if (pNameDict && pNameDict->KeyExist("EmbeddedFiles"))
- {
- FPDF_UnSupportError(FPDF_UNSP_DOC_ATTACHMENT);
- return;
- }
- if (pNameDict && pNameDict->KeyExist("JavaScript"))
- {
- CPDF_Dictionary* pJSDict = pNameDict->GetDict("JavaScript");
- CPDF_Array * pArray = pJSDict ? pJSDict->GetArray("Names") : NULL;
- if (pArray) {
- int nCount = pArray->GetCount();
- for(int i=0; i<nCount; i++)
- {
- CFX_ByteString cbStr = pArray->GetString(i);
- if(cbStr.Compare("com.adobe.acrobat.SharedReview.Register") == 0)
- {
- FPDF_UnSupportError(FPDF_UNSP_DOC_SHAREDREVIEW);
- return;
- }
- }
- }
+ if (pRootDict->KeyExist("Names")) {
+ CPDF_Dictionary* pNameDict = pRootDict->GetDict("Names");
+ if (pNameDict && pNameDict->KeyExist("EmbeddedFiles")) {
+ FPDF_UnSupportError(FPDF_UNSP_DOC_ATTACHMENT);
+ return;
+ }
+ if (pNameDict && pNameDict->KeyExist("JavaScript")) {
+ CPDF_Dictionary* pJSDict = pNameDict->GetDict("JavaScript");
+ CPDF_Array* pArray = pJSDict ? pJSDict->GetArray("Names") : NULL;
+ if (pArray) {
+ int nCount = pArray->GetCount();
+ for (int i = 0; i < nCount; i++) {
+ CFX_ByteString cbStr = pArray->GetString(i);
+ if (cbStr.Compare("com.adobe.acrobat.SharedReview.Register") == 0) {
+ FPDF_UnSupportError(FPDF_UNSP_DOC_SHAREDREVIEW);
+ return;
}
+ }
}
+ }
}
-
- // SharedForm
- CPDF_Metadata metaData;
- metaData.LoadDoc(pDoc);
- CXML_Element * pElement = metaData.GetRoot();
- if(pElement)
- CheckSharedForm(pElement, "workflowType");
-
- // XFA Forms
- CPDF_InterForm * pInterForm = new CPDF_InterForm(pDoc,FALSE);
- if (pInterForm->HasXFAForm())
- {
- FPDF_UnSupportError(FPDF_UNSP_DOC_XFAFORM);
- }
- delete pInterForm;
+ }
+
+ // SharedForm
+ CPDF_Metadata metaData;
+ metaData.LoadDoc(pDoc);
+ CXML_Element* pElement = metaData.GetRoot();
+ if (pElement)
+ CheckSharedForm(pElement, "workflowType");
+
+ // XFA Forms
+ CPDF_InterForm* pInterForm = new CPDF_InterForm(pDoc, FALSE);
+ if (pInterForm->HasXFAForm()) {
+ FPDF_UnSupportError(FPDF_UNSP_DOC_XFAFORM);
+ }
+ delete pInterForm;
}
-DLLEXPORT int FPDFDoc_GetPageMode(FPDF_DOCUMENT document)
-{
- if (!document)
- return PAGEMODE_UNKNOWN;
-
- CPDF_Dictionary* pRoot = ((CPDF_Document*)document)->GetRoot();
- if (!pRoot)
- return PAGEMODE_UNKNOWN;
-
- CPDF_Object* pName = pRoot->GetElement("PageMode");
- if (!pName)
- return PAGEMODE_USENONE;
-
- CFX_ByteString strPageMode = pName->GetString();
- if (strPageMode.IsEmpty()||strPageMode.EqualNoCase("UseNone"))
- return PAGEMODE_USENONE;
- if (strPageMode.EqualNoCase("UseOutlines"))
- return PAGEMODE_USEOUTLINES;
- if (strPageMode.EqualNoCase("UseThumbs"))
- return PAGEMODE_USETHUMBS;
- if (strPageMode.EqualNoCase("FullScreen"))
- return PAGEMODE_FULLSCREEN;
- if (strPageMode.EqualNoCase("UseOC"))
- return PAGEMODE_USEOC;
- if (strPageMode.EqualNoCase("UseAttachments"))
- return PAGEMODE_USEATTACHMENTS;
+DLLEXPORT int FPDFDoc_GetPageMode(FPDF_DOCUMENT document) {
+ if (!document)
+ return PAGEMODE_UNKNOWN;
+ CPDF_Dictionary* pRoot = ((CPDF_Document*)document)->GetRoot();
+ if (!pRoot)
return PAGEMODE_UNKNOWN;
+
+ CPDF_Object* pName = pRoot->GetElement("PageMode");
+ if (!pName)
+ return PAGEMODE_USENONE;
+
+ CFX_ByteString strPageMode = pName->GetString();
+ if (strPageMode.IsEmpty() || strPageMode.EqualNoCase("UseNone"))
+ return PAGEMODE_USENONE;
+ if (strPageMode.EqualNoCase("UseOutlines"))
+ return PAGEMODE_USEOUTLINES;
+ if (strPageMode.EqualNoCase("UseThumbs"))
+ return PAGEMODE_USETHUMBS;
+ if (strPageMode.EqualNoCase("FullScreen"))
+ return PAGEMODE_FULLSCREEN;
+ if (strPageMode.EqualNoCase("UseOC"))
+ return PAGEMODE_USEOC;
+ if (strPageMode.EqualNoCase("UseAttachments"))
+ return PAGEMODE_USEATTACHMENTS;
+
+ return PAGEMODE_UNKNOWN;
}
diff --git a/fpdfsdk/src/fpdf_flatten.cpp b/fpdfsdk/src/fpdf_flatten.cpp
index 988d7f46b5..210df63d3e 100644
--- a/fpdfsdk/src/fpdf_flatten.cpp
+++ b/fpdfsdk/src/fpdf_flatten.cpp
@@ -13,537 +13,514 @@ typedef CFX_ArrayTemplate<CPDF_Rect> CPDF_RectArray;
enum FPDF_TYPE { MAX, MIN };
enum FPDF_VALUE { TOP, LEFT, RIGHT, BOTTOM };
-FX_BOOL IsValiableRect(CPDF_Rect rect, CPDF_Rect rcPage)
-{
- if ( rect.left - rect.right > 0.000001f ||
- rect.bottom - rect.top > 0.000001f)
- return FALSE;
-
- if (rect.left == 0.0f &&
- rect.top == 0.0f &&
- rect.right == 0.0f &&
- rect.bottom == 0.0f)
- return FALSE;
-
- if (!rcPage.IsEmpty())
- {
- if (rect.left - rcPage.left < -10.000001f ||
- rect.right - rcPage.right > 10.000001f ||
- rect.top - rcPage.top > 10.000001f ||
- rect.bottom - rcPage.bottom < -10.000001f)
- return FALSE;
- }
-
- return TRUE;
+FX_BOOL IsValiableRect(CPDF_Rect rect, CPDF_Rect rcPage) {
+ if (rect.left - rect.right > 0.000001f || rect.bottom - rect.top > 0.000001f)
+ return FALSE;
+
+ if (rect.left == 0.0f && rect.top == 0.0f && rect.right == 0.0f &&
+ rect.bottom == 0.0f)
+ return FALSE;
+
+ if (!rcPage.IsEmpty()) {
+ if (rect.left - rcPage.left < -10.000001f ||
+ rect.right - rcPage.right > 10.000001f ||
+ rect.top - rcPage.top > 10.000001f ||
+ rect.bottom - rcPage.bottom < -10.000001f)
+ return FALSE;
+ }
+
+ return TRUE;
}
+FX_BOOL GetContentsRect(CPDF_Document* pDoc,
+ CPDF_Dictionary* pDict,
+ CPDF_RectArray* pRectArray) {
+ CPDF_Page* pPDFPage = new CPDF_Page;
+ pPDFPage->Load(pDoc, pDict, FALSE);
+ pPDFPage->ParseContent();
-FX_BOOL GetContentsRect( CPDF_Document * pDoc, CPDF_Dictionary* pDict, CPDF_RectArray * pRectArray )
-{
- CPDF_Page* pPDFPage = new CPDF_Page;
- pPDFPage->Load( pDoc, pDict, FALSE );
- pPDFPage->ParseContent();
+ FX_POSITION pos = pPDFPage->GetFirstObjectPosition();
- FX_POSITION pos = pPDFPage->GetFirstObjectPosition();
+ while (pos) {
+ CPDF_PageObject* pPageObject = pPDFPage->GetNextObject(pos);
+ if (!pPageObject)
+ continue;
- while (pos)
- {
- CPDF_PageObject* pPageObject = pPDFPage->GetNextObject(pos);
- if (!pPageObject)continue;
+ CPDF_Rect rc;
+ rc.left = pPageObject->m_Left;
+ rc.right = pPageObject->m_Right;
+ rc.bottom = pPageObject->m_Bottom;
+ rc.top = pPageObject->m_Top;
- CPDF_Rect rc;
- rc.left = pPageObject->m_Left;
- rc.right = pPageObject->m_Right;
- rc.bottom = pPageObject->m_Bottom;
- rc.top = pPageObject->m_Top;
+ if (IsValiableRect(rc, pDict->GetRect("MediaBox"))) {
+ pRectArray->Add(rc);
+ }
+ }
- if (IsValiableRect(rc, pDict->GetRect("MediaBox")))
- {
- pRectArray->Add(rc);
- }
- }
+ delete pPDFPage;
+ return TRUE;
+}
- delete pPDFPage;
- return TRUE;
+void ParserStream(CPDF_Dictionary* pPageDic,
+ CPDF_Dictionary* pStream,
+ CPDF_RectArray* pRectArray,
+ CPDF_ObjectArray* pObjectArray) {
+ if (!pStream)
+ return;
+ CPDF_Rect rect;
+ if (pStream->KeyExist("Rect"))
+ rect = pStream->GetRect("Rect");
+ else if (pStream->KeyExist("BBox"))
+ rect = pStream->GetRect("BBox");
+
+ if (IsValiableRect(rect, pPageDic->GetRect("MediaBox")))
+ pRectArray->Add(rect);
+
+ pObjectArray->Add(pStream);
}
+int ParserAnnots(CPDF_Document* pSourceDoc,
+ CPDF_Dictionary* pPageDic,
+ CPDF_RectArray* pRectArray,
+ CPDF_ObjectArray* pObjectArray,
+ int nUsage) {
+ if (!pSourceDoc || !pPageDic)
+ return FLATTEN_FAIL;
+
+ GetContentsRect(pSourceDoc, pPageDic, pRectArray);
+ CPDF_Array* pAnnots = pPageDic->GetArray("Annots");
+ if (!pAnnots)
+ return FLATTEN_NOTHINGTODO;
+
+ FX_DWORD dwSize = pAnnots->GetCount();
+ for (int i = 0; i < (int)dwSize; i++) {
+ CPDF_Object* pObj = pAnnots->GetElementValue(i);
+ if (!pObj || pObj->GetType() != PDFOBJ_DICTIONARY)
+ continue;
+
+ CPDF_Dictionary* pAnnotDic = (CPDF_Dictionary*)pObj;
+ CFX_ByteString sSubtype = pAnnotDic->GetString("Subtype");
+ if (sSubtype == "Popup")
+ continue;
+
+ int nAnnotFlag = pAnnotDic->GetInteger("F");
+ if (nAnnotFlag & ANNOTFLAG_HIDDEN)
+ continue;
+
+ if (nUsage == FLAT_NORMALDISPLAY) {
+ if (nAnnotFlag & ANNOTFLAG_INVISIBLE)
+ continue;
+
+ ParserStream(pPageDic, pAnnotDic, pRectArray, pObjectArray);
+ } else {
+ if (nAnnotFlag & ANNOTFLAG_PRINT)
+ ParserStream(pPageDic, pAnnotDic, pRectArray, pObjectArray);
+ }
+ }
+ return FLATTEN_SUCCESS;
+}
-void ParserStream( CPDF_Dictionary * pPageDic, CPDF_Dictionary* pStream, CPDF_RectArray * pRectArray, CPDF_ObjectArray * pObjectArray )
-{
- if (!pStream)return;
- CPDF_Rect rect;
- if (pStream->KeyExist("Rect"))
- rect = pStream->GetRect("Rect");
- else if (pStream->KeyExist("BBox"))
- rect = pStream->GetRect("BBox");
+FX_FLOAT GetMinMaxValue(CPDF_RectArray& array,
+ FPDF_TYPE type,
+ FPDF_VALUE value) {
+ int nRects = array.GetSize();
+ FX_FLOAT fRet = 0.0f;
- if (IsValiableRect(rect, pPageDic->GetRect("MediaBox")))
- pRectArray->Add(rect);
+ if (nRects <= 0)
+ return 0.0f;
- pObjectArray->Add(pStream);
-}
+ FX_FLOAT* pArray = new FX_FLOAT[nRects];
+ switch (value) {
+ case LEFT: {
+ for (int i = 0; i < nRects; i++)
+ pArray[i] = CPDF_Rect(array.GetAt(i)).left;
+ break;
+ }
+ case TOP: {
+ for (int i = 0; i < nRects; i++)
+ pArray[i] = CPDF_Rect(array.GetAt(i)).top;
-int ParserAnnots( CPDF_Document* pSourceDoc, CPDF_Dictionary * pPageDic, CPDF_RectArray * pRectArray, CPDF_ObjectArray * pObjectArray, int nUsage)
-{
- if (!pSourceDoc || !pPageDic)
- return FLATTEN_FAIL;
+ break;
+ }
+ case RIGHT: {
+ for (int i = 0; i < nRects; i++)
+ pArray[i] = CPDF_Rect(array.GetAt(i)).right;
- GetContentsRect( pSourceDoc, pPageDic, pRectArray );
- CPDF_Array* pAnnots = pPageDic->GetArray("Annots");
- if (!pAnnots)
- return FLATTEN_NOTHINGTODO;
+ break;
+ }
+ case BOTTOM: {
+ for (int i = 0; i < nRects; i++)
+ pArray[i] = CPDF_Rect(array.GetAt(i)).bottom;
- FX_DWORD dwSize = pAnnots->GetCount();
- for (int i = 0; i < (int)dwSize; i++)
- {
- CPDF_Object* pObj = pAnnots->GetElementValue(i);
- if (!pObj || pObj->GetType() != PDFOBJ_DICTIONARY)
- continue;
+ break;
+ }
+ default:
+ break;
+ }
+ fRet = pArray[0];
+ if (type == MAX) {
+ for (int i = 1; i < nRects; i++)
+ if (fRet <= pArray[i])
+ fRet = pArray[i];
+ } else {
+ for (int i = 1; i < nRects; i++)
+ if (fRet >= pArray[i])
+ fRet = pArray[i];
+ }
+ delete[] pArray;
+ return fRet;
+}
- CPDF_Dictionary* pAnnotDic = (CPDF_Dictionary*)pObj;
- CFX_ByteString sSubtype = pAnnotDic->GetString("Subtype");
- if (sSubtype == "Popup")
- continue;
+CPDF_Rect CalculateRect(CPDF_RectArray* pRectArray) {
+ CPDF_Rect rcRet;
- int nAnnotFlag = pAnnotDic->GetInteger("F");
- if (nAnnotFlag & ANNOTFLAG_HIDDEN)
- continue;
+ rcRet.left = GetMinMaxValue(*pRectArray, MIN, LEFT);
+ rcRet.top = GetMinMaxValue(*pRectArray, MAX, TOP);
+ rcRet.right = GetMinMaxValue(*pRectArray, MAX, RIGHT);
+ rcRet.bottom = GetMinMaxValue(*pRectArray, MIN, BOTTOM);
- if(nUsage == FLAT_NORMALDISPLAY)
- {
- if (nAnnotFlag & ANNOTFLAG_INVISIBLE)
- continue;
+ return rcRet;
+}
- ParserStream( pPageDic, pAnnotDic, pRectArray, pObjectArray );
- }
- else
- {
- if (nAnnotFlag & ANNOTFLAG_PRINT)
- ParserStream( pPageDic, pAnnotDic, pRectArray, pObjectArray );
- }
+void SetPageContents(CFX_ByteString key,
+ CPDF_Dictionary* pPage,
+ CPDF_Document* pDocument) {
+ CPDF_Object* pContentsObj = pPage->GetStream("Contents");
+ if (!pContentsObj) {
+ pContentsObj = pPage->GetArray("Contents");
+ }
+
+ if (!pContentsObj) {
+ // Create a new contents dictionary
+ if (!key.IsEmpty()) {
+ CPDF_Stream* pNewContents = new CPDF_Stream(NULL, 0, new CPDF_Dictionary);
+ pPage->SetAtReference("Contents", pDocument,
+ pDocument->AddIndirectObject(pNewContents));
+
+ CFX_ByteString sStream;
+ sStream.Format("q 1 0 0 1 0 0 cm /%s Do Q", key.c_str());
+ pNewContents->SetData((const uint8_t*)sStream, sStream.GetLength(), FALSE,
+ FALSE);
+ }
+ return;
+ }
+
+ int iType = pContentsObj->GetType();
+ CPDF_Array* pContentsArray = NULL;
+
+ switch (iType) {
+ case PDFOBJ_STREAM: {
+ pContentsArray = new CPDF_Array;
+ CPDF_Stream* pContents = (CPDF_Stream*)pContentsObj;
+ FX_DWORD dwObjNum = pDocument->AddIndirectObject(pContents);
+ CPDF_StreamAcc acc;
+ acc.LoadAllData(pContents);
+ CFX_ByteString sStream = "q\n";
+ CFX_ByteString sBody =
+ CFX_ByteString((const FX_CHAR*)acc.GetData(), acc.GetSize());
+ sStream = sStream + sBody + "\nQ";
+ pContents->SetData((const uint8_t*)sStream, sStream.GetLength(), FALSE,
+ FALSE);
+ pContentsArray->AddReference(pDocument, dwObjNum);
+ break;
+ }
+
+ case PDFOBJ_ARRAY: {
+ pContentsArray = (CPDF_Array*)pContentsObj;
+ break;
}
- return FLATTEN_SUCCESS;
+ default:
+ break;
+ }
+
+ if (!pContentsArray)
+ return;
+
+ FX_DWORD dwObjNum = pDocument->AddIndirectObject(pContentsArray);
+ pPage->SetAtReference("Contents", pDocument, dwObjNum);
+
+ if (!key.IsEmpty()) {
+ CPDF_Stream* pNewContents = new CPDF_Stream(NULL, 0, new CPDF_Dictionary);
+ dwObjNum = pDocument->AddIndirectObject(pNewContents);
+ pContentsArray->AddReference(pDocument, dwObjNum);
+
+ CFX_ByteString sStream;
+ sStream.Format("q 1 0 0 1 0 0 cm /%s Do Q", key.c_str());
+ pNewContents->SetData((const uint8_t*)sStream, sStream.GetLength(), FALSE,
+ FALSE);
+ }
}
+CFX_AffineMatrix GetMatrix(CPDF_Rect rcAnnot,
+ CPDF_Rect rcStream,
+ CFX_AffineMatrix matrix) {
+ if (rcStream.IsEmpty())
+ return CFX_AffineMatrix();
+
+ matrix.TransformRect(rcStream);
+ rcStream.Normalize();
-FX_FLOAT GetMinMaxValue( CPDF_RectArray& array, FPDF_TYPE type, FPDF_VALUE value)
-{
- int nRects = array.GetSize();
- FX_FLOAT fRet = 0.0f;
-
- if (nRects <= 0)return 0.0f;
-
- FX_FLOAT* pArray = new FX_FLOAT[nRects];
- switch(value)
- {
- case LEFT:
- {
- for (int i = 0; i < nRects; i++)
- pArray[i] = CPDF_Rect(array.GetAt(i)).left;
-
- break;
- }
- case TOP:
- {
- for (int i = 0; i < nRects; i++)
- pArray[i] = CPDF_Rect(array.GetAt(i)).top;
-
- break;
- }
- case RIGHT:
- {
- for (int i = 0; i < nRects; i++)
- pArray[i] = CPDF_Rect(array.GetAt(i)).right;
-
- break;
- }
- case BOTTOM:
- {
- for (int i = 0; i < nRects; i++)
- pArray[i] = CPDF_Rect(array.GetAt(i)).bottom;
-
- break;
- }
- default:
- break;
- }
- fRet = pArray[0];
- if (type == MAX)
- {
- for (int i = 1; i < nRects; i++)
- if (fRet <= pArray[i])
- fRet = pArray[i];
- }
- else
- {
- for (int i = 1; i < nRects; i++)
- if (fRet >= pArray[i])
- fRet = pArray[i];
- }
- delete[] pArray;
- return fRet;
+ FX_FLOAT a = rcAnnot.Width() / rcStream.Width();
+ FX_FLOAT d = rcAnnot.Height() / rcStream.Height();
+
+ FX_FLOAT e = rcAnnot.left - rcStream.left * a;
+ FX_FLOAT f = rcAnnot.bottom - rcStream.bottom * d;
+ return CFX_AffineMatrix(a, 0, 0, d, e, f);
}
-CPDF_Rect CalculateRect( CPDF_RectArray * pRectArray )
-{
+void GetOffset(FX_FLOAT& fa,
+ FX_FLOAT& fd,
+ FX_FLOAT& fe,
+ FX_FLOAT& ff,
+ CPDF_Rect rcAnnot,
+ CPDF_Rect rcStream,
+ CFX_AffineMatrix matrix) {
+ FX_FLOAT fStreamWidth = 0.0f;
+ FX_FLOAT fStreamHeight = 0.0f;
+
+ if (matrix.a != 0 && matrix.d != 0) {
+ fStreamWidth = rcStream.right - rcStream.left;
+ fStreamHeight = rcStream.top - rcStream.bottom;
+ } else {
+ fStreamWidth = rcStream.top - rcStream.bottom;
+ fStreamHeight = rcStream.right - rcStream.left;
+ }
+
+ FX_FLOAT x1 =
+ matrix.a * rcStream.left + matrix.c * rcStream.bottom + matrix.e;
+ FX_FLOAT y1 =
+ matrix.b * rcStream.left + matrix.d * rcStream.bottom + matrix.f;
+ FX_FLOAT x2 = matrix.a * rcStream.left + matrix.c * rcStream.top + matrix.e;
+ FX_FLOAT y2 = matrix.b * rcStream.left + matrix.d * rcStream.top + matrix.f;
+ FX_FLOAT x3 =
+ matrix.a * rcStream.right + matrix.c * rcStream.bottom + matrix.e;
+ FX_FLOAT y3 =
+ matrix.b * rcStream.right + matrix.d * rcStream.bottom + matrix.f;
+ FX_FLOAT x4 = matrix.a * rcStream.right + matrix.c * rcStream.top + matrix.e;
+ FX_FLOAT y4 = matrix.b * rcStream.right + matrix.d * rcStream.top + matrix.f;
+
+ FX_FLOAT left = FX_MIN(FX_MIN(x1, x2), FX_MIN(x3, x4));
+ FX_FLOAT bottom = FX_MIN(FX_MIN(y1, y2), FX_MIN(y3, y4));
+
+ fa = (rcAnnot.right - rcAnnot.left) / fStreamWidth;
+ fd = (rcAnnot.top - rcAnnot.bottom) / fStreamHeight;
+ fe = rcAnnot.left - left * fa;
+ ff = rcAnnot.bottom - bottom * fd;
+}
- CPDF_Rect rcRet;
+DLLEXPORT int STDCALL FPDFPage_Flatten(FPDF_PAGE page, int nFlag) {
+ if (!page) {
+ return FLATTEN_FAIL;
+ }
+
+ CPDF_Page* pPage = (CPDF_Page*)(page);
+ CPDF_Document* pDocument = pPage->m_pDocument;
+ CPDF_Dictionary* pPageDict = pPage->m_pFormDict;
+
+ if (!pDocument || !pPageDict) {
+ return FLATTEN_FAIL;
+ }
+
+ CPDF_ObjectArray ObjectArray;
+ CPDF_RectArray RectArray;
+
+ int iRet = FLATTEN_FAIL;
+ iRet = ParserAnnots(pDocument, pPageDict, &RectArray, &ObjectArray, nFlag);
+ if (iRet == FLATTEN_NOTHINGTODO || iRet == FLATTEN_FAIL)
+ return iRet;
+
+ CPDF_Rect rcOriginalCB;
+ CPDF_Rect rcMerger = CalculateRect(&RectArray);
+ CPDF_Rect rcOriginalMB = pPageDict->GetRect("MediaBox");
+
+ if (pPageDict->KeyExist("CropBox"))
+ rcOriginalMB = pPageDict->GetRect("CropBox");
+
+ if (rcOriginalMB.IsEmpty()) {
+ rcOriginalMB = CPDF_Rect(0.0f, 0.0f, 612.0f, 792.0f);
+ }
+
+ rcMerger.left =
+ rcMerger.left < rcOriginalMB.left ? rcOriginalMB.left : rcMerger.left;
+ rcMerger.right =
+ rcMerger.right > rcOriginalMB.right ? rcOriginalMB.right : rcMerger.right;
+ rcMerger.top =
+ rcMerger.top > rcOriginalMB.top ? rcOriginalMB.top : rcMerger.top;
+ rcMerger.bottom = rcMerger.bottom < rcOriginalMB.bottom ? rcOriginalMB.bottom
+ : rcMerger.bottom;
+
+ if (pPageDict->KeyExist("ArtBox"))
+ rcOriginalCB = pPageDict->GetRect("ArtBox");
+ else
+ rcOriginalCB = rcOriginalMB;
+
+ if (!rcOriginalMB.IsEmpty()) {
+ CPDF_Array* pMediaBox = new CPDF_Array();
+ pMediaBox->Add(new CPDF_Number(rcOriginalMB.left));
+ pMediaBox->Add(new CPDF_Number(rcOriginalMB.bottom));
+ pMediaBox->Add(new CPDF_Number(rcOriginalMB.right));
+ pMediaBox->Add(new CPDF_Number(rcOriginalMB.top));
+ pPageDict->SetAt("MediaBox", pMediaBox);
+ }
+
+ if (!rcOriginalCB.IsEmpty()) {
+ CPDF_Array* pCropBox = new CPDF_Array();
+ pCropBox->Add(new CPDF_Number(rcOriginalCB.left));
+ pCropBox->Add(new CPDF_Number(rcOriginalCB.bottom));
+ pCropBox->Add(new CPDF_Number(rcOriginalCB.right));
+ pCropBox->Add(new CPDF_Number(rcOriginalCB.top));
+ pPageDict->SetAt("ArtBox", pCropBox);
+ }
+
+ CPDF_Dictionary* pRes = pPageDict->GetDict("Resources");
+ if (!pRes) {
+ pRes = new CPDF_Dictionary;
+ pPageDict->SetAt("Resources", pRes);
+ }
+
+ CPDF_Stream* pNewXObject = new CPDF_Stream(NULL, 0, new CPDF_Dictionary);
+ FX_DWORD dwObjNum = pDocument->AddIndirectObject(pNewXObject);
+ CPDF_Dictionary* pPageXObject = pRes->GetDict("XObject");
+ if (!pPageXObject) {
+ pPageXObject = new CPDF_Dictionary;
+ pRes->SetAt("XObject", pPageXObject);
+ }
+
+ CFX_ByteString key = "";
+ int nStreams = ObjectArray.GetSize();
+
+ if (nStreams > 0) {
+ for (int iKey = 0; /*iKey < 100*/; iKey++) {
+ char sExtend[5] = {};
+ FXSYS_itoa(iKey, sExtend, 10);
+ key = CFX_ByteString("FFT") + CFX_ByteString(sExtend);
+
+ if (!pPageXObject->KeyExist(key))
+ break;
+ }
+ }
+
+ SetPageContents(key, pPageDict, pDocument);
+
+ CPDF_Dictionary* pNewXORes = NULL;
+
+ if (!key.IsEmpty()) {
+ pPageXObject->SetAtReference(key, pDocument, dwObjNum);
+ CPDF_Dictionary* pNewOXbjectDic = pNewXObject->GetDict();
+ pNewXORes = new CPDF_Dictionary;
+ pNewOXbjectDic->SetAt("Resources", pNewXORes);
+ pNewOXbjectDic->SetAtName("Type", "XObject");
+ pNewOXbjectDic->SetAtName("Subtype", "Form");
+ pNewOXbjectDic->SetAtInteger("FormType", 1);
+ pNewOXbjectDic->SetAtName("Name", "FRM");
+ CPDF_Rect rcBBox = pPageDict->GetRect("ArtBox");
+ pNewOXbjectDic->SetAtRect("BBox", rcBBox);
+ }
+
+ for (int i = 0; i < nStreams; i++) {
+ CPDF_Dictionary* pAnnotDic = ObjectArray.GetAt(i);
+ if (!pAnnotDic)
+ continue;
+
+ CPDF_Rect rcAnnot = pAnnotDic->GetRect("Rect");
+ rcAnnot.Normalize();
+
+ CFX_ByteString sAnnotState = pAnnotDic->GetString("AS");
+ CPDF_Dictionary* pAnnotAP = pAnnotDic->GetDict("AP");
+ if (!pAnnotAP)
+ continue;
+
+ CPDF_Stream* pAPStream = pAnnotAP->GetStream("N");
+ if (!pAPStream) {
+ CPDF_Dictionary* pAPDic = pAnnotAP->GetDict("N");
+ if (!pAPDic)
+ continue;
+
+ if (!sAnnotState.IsEmpty()) {
+ pAPStream = pAPDic->GetStream(sAnnotState);
+ } else {
+ FX_POSITION pos = pAPDic->GetStartPos();
+ if (pos) {
+ CFX_ByteString sKey;
+ CPDF_Object* pFirstObj = pAPDic->GetNextElement(pos, sKey);
+ if (pFirstObj) {
+ if (pFirstObj->GetType() == PDFOBJ_REFERENCE)
+ pFirstObj = pFirstObj->GetDirect();
+
+ if (pFirstObj->GetType() != PDFOBJ_STREAM)
+ continue;
+
+ pAPStream = (CPDF_Stream*)pFirstObj;
+ }
+ }
+ }
+ }
- rcRet.left = GetMinMaxValue(*pRectArray, MIN, LEFT);
- rcRet.top = GetMinMaxValue(*pRectArray, MAX, TOP);
- rcRet.right = GetMinMaxValue(*pRectArray, MAX, RIGHT);
- rcRet.bottom = GetMinMaxValue(*pRectArray, MIN, BOTTOM);
+ if (!pAPStream)
+ continue;
- return rcRet;
-}
+ CPDF_Dictionary* pAPDic = pAPStream->GetDict();
+ CFX_AffineMatrix matrix = pAPDic->GetMatrix("Matrix");
+ CPDF_Rect rcStream;
+ if (pAPDic->KeyExist("Rect"))
+ rcStream = pAPDic->GetRect("Rect");
+ else if (pAPDic->KeyExist("BBox"))
+ rcStream = pAPDic->GetRect("BBox");
-void SetPageContents(CFX_ByteString key, CPDF_Dictionary* pPage, CPDF_Document* pDocument)
-{
- CPDF_Object* pContentsObj = pPage->GetStream("Contents");
- if (!pContentsObj)
- {
- pContentsObj = pPage->GetArray("Contents");
- }
-
- if (!pContentsObj)
- {
- //Create a new contents dictionary
- if (!key.IsEmpty())
- {
- CPDF_Stream* pNewContents = new CPDF_Stream(NULL, 0, new CPDF_Dictionary);
- pPage->SetAtReference("Contents", pDocument, pDocument->AddIndirectObject(pNewContents));
-
- CFX_ByteString sStream;
- sStream.Format("q 1 0 0 1 0 0 cm /%s Do Q", key.c_str());
- pNewContents->SetData((const uint8_t*)sStream, sStream.GetLength(), FALSE, FALSE);
- }
- return;
- }
-
- int iType = pContentsObj->GetType();
- CPDF_Array* pContentsArray = NULL;
-
- switch(iType)
- {
- case PDFOBJ_STREAM:
- {
- pContentsArray = new CPDF_Array;
- CPDF_Stream* pContents = (CPDF_Stream*)pContentsObj;
- FX_DWORD dwObjNum = pDocument->AddIndirectObject(pContents);
- CPDF_StreamAcc acc;
- acc.LoadAllData(pContents);
- CFX_ByteString sStream = "q\n";
- CFX_ByteString sBody = CFX_ByteString((const FX_CHAR*)acc.GetData(), acc.GetSize());
- sStream = sStream + sBody + "\nQ";
- pContents->SetData((const uint8_t*)sStream, sStream.GetLength(), FALSE, FALSE);
- pContentsArray->AddReference(pDocument, dwObjNum);
- break;
- }
-
- case PDFOBJ_ARRAY:
- {
- pContentsArray = (CPDF_Array*)pContentsObj;
- break;
- }
- default:
- break;
- }
-
- if (!pContentsArray)return;
-
- FX_DWORD dwObjNum = pDocument->AddIndirectObject(pContentsArray);
- pPage->SetAtReference("Contents", pDocument, dwObjNum);
-
- if (!key.IsEmpty())
- {
- CPDF_Stream* pNewContents = new CPDF_Stream(NULL, 0, new CPDF_Dictionary);
- dwObjNum = pDocument->AddIndirectObject(pNewContents);
- pContentsArray->AddReference(pDocument, dwObjNum);
-
- CFX_ByteString sStream;
- sStream.Format("q 1 0 0 1 0 0 cm /%s Do Q", key.c_str());
- pNewContents->SetData((const uint8_t*)sStream, sStream.GetLength(), FALSE, FALSE);
- }
-}
+ if (rcStream.IsEmpty())
+ continue;
-CFX_AffineMatrix GetMatrix(CPDF_Rect rcAnnot, CPDF_Rect rcStream, CFX_AffineMatrix matrix)
-{
- if(rcStream.IsEmpty())
- return CFX_AffineMatrix();
+ CPDF_Object* pObj = pAPStream;
- matrix.TransformRect(rcStream);
- rcStream.Normalize();
+ if (pObj) {
+ CPDF_Dictionary* pObjDic = pObj->GetDict();
+ if (pObjDic) {
+ pObjDic->SetAtName("Type", "XObject");
+ pObjDic->SetAtName("Subtype", "Form");
+ }
+ }
- FX_FLOAT a = rcAnnot.Width()/rcStream.Width();
- FX_FLOAT d = rcAnnot.Height()/rcStream.Height();
+ CPDF_Dictionary* pXObject = pNewXORes->GetDict("XObject");
+ if (!pXObject) {
+ pXObject = new CPDF_Dictionary;
+ pNewXORes->SetAt("XObject", pXObject);
+ }
- FX_FLOAT e = rcAnnot.left - rcStream.left * a;
- FX_FLOAT f = rcAnnot.bottom - rcStream.bottom * d;
- return CFX_AffineMatrix(a, 0, 0, d, e, f);
-}
+ CFX_ByteString sFormName;
+ sFormName.Format("F%d", i);
+ FX_DWORD dwObjNum = pDocument->AddIndirectObject(pObj);
+ pXObject->SetAtReference(sFormName, pDocument, dwObjNum);
+
+ CPDF_StreamAcc acc;
+ acc.LoadAllData(pNewXObject);
+
+ const uint8_t* pData = acc.GetData();
+ CFX_ByteString sStream(pData, acc.GetSize());
+ CFX_ByteString sTemp;
+
+ if (matrix.IsIdentity()) {
+ matrix.a = 1.0f;
+ matrix.b = 0.0f;
+ matrix.c = 0.0f;
+ matrix.d = 1.0f;
+ matrix.e = 0.0f;
+ matrix.f = 0.0f;
+ }
-void GetOffset(FX_FLOAT& fa, FX_FLOAT& fd, FX_FLOAT& fe, FX_FLOAT& ff, CPDF_Rect rcAnnot, CPDF_Rect rcStream, CFX_AffineMatrix matrix)
-{
- FX_FLOAT fStreamWidth = 0.0f;
- FX_FLOAT fStreamHeight = 0.0f;
-
-
-
- if (matrix.a != 0 && matrix.d != 0)
- {
- fStreamWidth = rcStream.right - rcStream.left;
- fStreamHeight = rcStream.top - rcStream.bottom;
- }
- else
- {
- fStreamWidth = rcStream.top - rcStream.bottom;
- fStreamHeight = rcStream.right - rcStream.left;
- }
-
- FX_FLOAT x1 = matrix.a * rcStream.left + matrix.c * rcStream.bottom + matrix.e;
- FX_FLOAT y1 = matrix.b * rcStream.left + matrix.d * rcStream.bottom + matrix.f;
- FX_FLOAT x2 = matrix.a * rcStream.left + matrix.c * rcStream.top + matrix.e;
- FX_FLOAT y2 = matrix.b * rcStream.left + matrix.d * rcStream.top + matrix.f;
- FX_FLOAT x3 = matrix.a * rcStream.right + matrix.c * rcStream.bottom + matrix.e;
- FX_FLOAT y3 = matrix.b * rcStream.right + matrix.d * rcStream.bottom + matrix.f;
- FX_FLOAT x4 = matrix.a * rcStream.right + matrix.c * rcStream.top + matrix.e;
- FX_FLOAT y4 = matrix.b * rcStream.right + matrix.d * rcStream.top + matrix.f;
-
- FX_FLOAT left = FX_MIN(FX_MIN(x1, x2), FX_MIN(x3, x4));
- FX_FLOAT bottom = FX_MIN(FX_MIN(y1, y2), FX_MIN(y3, y4));
-
- fa = (rcAnnot.right - rcAnnot.left)/fStreamWidth;
- fd = (rcAnnot.top - rcAnnot.bottom)/fStreamHeight;
- fe = rcAnnot.left - left * fa;
- ff = rcAnnot.bottom - bottom * fd;
-}
+ CFX_AffineMatrix m = GetMatrix(rcAnnot, rcStream, matrix);
+ sTemp.Format("q %f 0 0 %f %f %f cm /%s Do Q\n", m.a, m.d, m.e, m.f,
+ sFormName.c_str());
+ sStream += sTemp;
+
+ pNewXObject->SetData((const uint8_t*)sStream, sStream.GetLength(), FALSE,
+ FALSE);
+ }
+ pPageDict->RemoveAt("Annots");
+ ObjectArray.RemoveAll();
+ RectArray.RemoveAll();
-DLLEXPORT int STDCALL FPDFPage_Flatten( FPDF_PAGE page, int nFlag)
-{
- if (!page)
- {
- return FLATTEN_FAIL;
- }
-
- CPDF_Page * pPage = (CPDF_Page*)( page );
- CPDF_Document * pDocument = pPage->m_pDocument;
- CPDF_Dictionary * pPageDict = pPage->m_pFormDict;
-
- if ( !pDocument || !pPageDict )
- {
- return FLATTEN_FAIL;
- }
-
- CPDF_ObjectArray ObjectArray;
- CPDF_RectArray RectArray;
-
- int iRet = FLATTEN_FAIL;
- iRet = ParserAnnots( pDocument, pPageDict, &RectArray, &ObjectArray, nFlag);
- if (iRet == FLATTEN_NOTHINGTODO || iRet == FLATTEN_FAIL)
- return iRet;
-
- CPDF_Rect rcOriginalCB;
- CPDF_Rect rcMerger = CalculateRect( &RectArray );
- CPDF_Rect rcOriginalMB = pPageDict->GetRect("MediaBox");
-
- if (pPageDict->KeyExist("CropBox"))
- rcOriginalMB = pPageDict->GetRect("CropBox");
-
- if (rcOriginalMB.IsEmpty())
- {
- rcOriginalMB = CPDF_Rect(0.0f, 0.0f, 612.0f, 792.0f);
- }
-
- rcMerger.left = rcMerger.left < rcOriginalMB.left? rcOriginalMB.left : rcMerger.left;
- rcMerger.right = rcMerger.right > rcOriginalMB.right? rcOriginalMB.right : rcMerger.right;
- rcMerger.top = rcMerger.top > rcOriginalMB.top? rcOriginalMB.top : rcMerger.top;
- rcMerger.bottom = rcMerger.bottom < rcOriginalMB.bottom? rcOriginalMB.bottom : rcMerger.bottom;
-
- if (pPageDict->KeyExist("ArtBox"))
- rcOriginalCB = pPageDict->GetRect("ArtBox");
- else
- rcOriginalCB = rcOriginalMB;
-
- if (!rcOriginalMB.IsEmpty())
- {
- CPDF_Array* pMediaBox = new CPDF_Array();
- pMediaBox->Add(new CPDF_Number(rcOriginalMB.left));
- pMediaBox->Add(new CPDF_Number(rcOriginalMB.bottom));
- pMediaBox->Add(new CPDF_Number(rcOriginalMB.right));
- pMediaBox->Add(new CPDF_Number(rcOriginalMB.top));
- pPageDict->SetAt("MediaBox",pMediaBox);
- }
-
- if (!rcOriginalCB.IsEmpty())
- {
- CPDF_Array* pCropBox = new CPDF_Array();
- pCropBox->Add(new CPDF_Number(rcOriginalCB.left));
- pCropBox->Add(new CPDF_Number(rcOriginalCB.bottom));
- pCropBox->Add(new CPDF_Number(rcOriginalCB.right));
- pCropBox->Add(new CPDF_Number(rcOriginalCB.top));
- pPageDict->SetAt("ArtBox", pCropBox);
- }
-
- CPDF_Dictionary* pRes = pPageDict->GetDict("Resources");
- if (!pRes)
- {
- pRes = new CPDF_Dictionary;
- pPageDict->SetAt("Resources", pRes );
- }
-
- CPDF_Stream* pNewXObject = new CPDF_Stream(NULL, 0, new CPDF_Dictionary);
- FX_DWORD dwObjNum = pDocument->AddIndirectObject(pNewXObject);
- CPDF_Dictionary* pPageXObject = pRes->GetDict("XObject");
- if (!pPageXObject)
- {
- pPageXObject = new CPDF_Dictionary;
- pRes->SetAt("XObject", pPageXObject);
- }
-
- CFX_ByteString key = "";
- int nStreams = ObjectArray.GetSize();
-
- if (nStreams > 0)
- {
- for (int iKey = 0; /*iKey < 100*/; iKey++)
- {
- char sExtend[5] = {};
- FXSYS_itoa(iKey, sExtend, 10);
- key = CFX_ByteString("FFT") + CFX_ByteString(sExtend);
-
- if (!pPageXObject->KeyExist(key))
- break;
- }
- }
-
- SetPageContents(key, pPageDict, pDocument);
-
- CPDF_Dictionary* pNewXORes = NULL;
-
- if (!key.IsEmpty())
- {
- pPageXObject->SetAtReference(key, pDocument, dwObjNum);
- CPDF_Dictionary* pNewOXbjectDic = pNewXObject->GetDict();
- pNewXORes = new CPDF_Dictionary;
- pNewOXbjectDic->SetAt("Resources", pNewXORes);
- pNewOXbjectDic->SetAtName("Type", "XObject");
- pNewOXbjectDic->SetAtName("Subtype", "Form");
- pNewOXbjectDic->SetAtInteger("FormType", 1);
- pNewOXbjectDic->SetAtName("Name", "FRM");
- CPDF_Rect rcBBox = pPageDict->GetRect("ArtBox");
- pNewOXbjectDic->SetAtRect("BBox", rcBBox);
- }
-
- for (int i = 0; i < nStreams; i++)
- {
- CPDF_Dictionary* pAnnotDic = ObjectArray.GetAt(i);
- if (!pAnnotDic)continue;
-
- CPDF_Rect rcAnnot = pAnnotDic->GetRect("Rect");
- rcAnnot.Normalize();
-
- CFX_ByteString sAnnotState = pAnnotDic->GetString("AS");
- CPDF_Dictionary* pAnnotAP = pAnnotDic->GetDict("AP");
- if (!pAnnotAP)continue;
-
- CPDF_Stream* pAPStream = pAnnotAP->GetStream("N");
- if (!pAPStream)
- {
- CPDF_Dictionary* pAPDic = pAnnotAP->GetDict("N");
- if (!pAPDic)continue;
-
- if (!sAnnotState.IsEmpty())
- {
- pAPStream = pAPDic->GetStream(sAnnotState);
- }
- else
- {
- FX_POSITION pos = pAPDic->GetStartPos();
- if (pos)
- {
- CFX_ByteString sKey;
- CPDF_Object* pFirstObj = pAPDic->GetNextElement(pos, sKey);
- if (pFirstObj)
- {
- if (pFirstObj->GetType() == PDFOBJ_REFERENCE)
- pFirstObj = pFirstObj->GetDirect();
-
- if (pFirstObj->GetType() != PDFOBJ_STREAM)
- continue;
-
- pAPStream = (CPDF_Stream*)pFirstObj;
- }
- }
- }
- }
-
- if (!pAPStream)continue;
-
- CPDF_Dictionary* pAPDic = pAPStream->GetDict();
- CFX_AffineMatrix matrix = pAPDic->GetMatrix("Matrix");
-
- CPDF_Rect rcStream;
- if (pAPDic->KeyExist("Rect"))
- rcStream = pAPDic->GetRect("Rect");
- else if (pAPDic->KeyExist("BBox"))
- rcStream = pAPDic->GetRect("BBox");
-
- if (rcStream.IsEmpty())continue;
-
- CPDF_Object* pObj = pAPStream;
-
- if (pObj)
- {
- CPDF_Dictionary* pObjDic = pObj->GetDict();
- if (pObjDic)
- {
- pObjDic->SetAtName("Type", "XObject");
- pObjDic->SetAtName("Subtype", "Form");
- }
- }
-
- CPDF_Dictionary* pXObject = pNewXORes->GetDict("XObject");
- if (!pXObject)
- {
- pXObject = new CPDF_Dictionary;
- pNewXORes->SetAt("XObject", pXObject);
- }
-
- CFX_ByteString sFormName;
- sFormName.Format("F%d", i);
- FX_DWORD dwObjNum = pDocument->AddIndirectObject(pObj);
- pXObject->SetAtReference(sFormName, pDocument, dwObjNum);
-
- CPDF_StreamAcc acc;
- acc.LoadAllData(pNewXObject);
-
- const uint8_t* pData = acc.GetData();
- CFX_ByteString sStream(pData, acc.GetSize());
- CFX_ByteString sTemp;
-
- if (matrix.IsIdentity())
- {
- matrix.a = 1.0f;
- matrix.b = 0.0f;
- matrix.c = 0.0f;
- matrix.d = 1.0f;
- matrix.e = 0.0f;
- matrix.f = 0.0f;
- }
-
- CFX_AffineMatrix m = GetMatrix(rcAnnot, rcStream, matrix);
- sTemp.Format("q %f 0 0 %f %f %f cm /%s Do Q\n", m.a, m.d, m.e, m.f, sFormName.c_str());
- sStream += sTemp;
-
- pNewXObject->SetData((const uint8_t*)sStream, sStream.GetLength(), FALSE, FALSE);
- }
- pPageDict->RemoveAt( "Annots" );
-
- ObjectArray.RemoveAll();
- RectArray.RemoveAll();
-
- return FLATTEN_SUCCESS;
+ return FLATTEN_SUCCESS;
}
diff --git a/fpdfsdk/src/fpdf_progressive.cpp b/fpdfsdk/src/fpdf_progressive.cpp
index 4ec73ac2ba..aaa55a18f6 100644
--- a/fpdfsdk/src/fpdf_progressive.cpp
+++ b/fpdfsdk/src/fpdf_progressive.cpp
@@ -9,82 +9,86 @@
#include "../include/fsdk_define.h"
#include "../include/fsdk_rendercontext.h"
-DLLEXPORT int STDCALL FPDF_RenderPageBitmap_Start( FPDF_BITMAP bitmap, FPDF_PAGE page,
- int start_x, int start_y, int size_x,
- int size_y, int rotate, int flags,
- IFSDK_PAUSE * pause )
-{
- if (bitmap == NULL || page == NULL)
- return FPDF_RENDER_FAILED;
-
- if (!pause)
- return FPDF_RENDER_FAILED;
-
- if (pause->version !=1)
- return FPDF_RENDER_FAILED;
-
- CPDF_Page* pPage = (CPDF_Page*)page;
- CRenderContext* pContext = new CRenderContext;
- pPage->SetPrivateData((void*)1, pContext, DropContext);
+DLLEXPORT int STDCALL FPDF_RenderPageBitmap_Start(FPDF_BITMAP bitmap,
+ FPDF_PAGE page,
+ int start_x,
+ int start_y,
+ int size_x,
+ int size_y,
+ int rotate,
+ int flags,
+ IFSDK_PAUSE* pause) {
+ if (bitmap == NULL || page == NULL)
+ return FPDF_RENDER_FAILED;
+
+ if (!pause)
+ return FPDF_RENDER_FAILED;
+
+ if (pause->version != 1)
+ return FPDF_RENDER_FAILED;
+
+ CPDF_Page* pPage = (CPDF_Page*)page;
+ CRenderContext* pContext = new CRenderContext;
+ pPage->SetPrivateData((void*)1, pContext, DropContext);
#ifdef _SKIA_SUPPORT_
- pContext->m_pDevice = new CFX_SkiaDevice;
- if (flags & FPDF_REVERSE_BYTE_ORDER)
- ((CFX_SkiaDevice*)pContext->m_pDevice)->Attach((CFX_DIBitmap*)bitmap,0,TRUE);
- else
- ((CFX_SkiaDevice*)pContext->m_pDevice)->Attach((CFX_DIBitmap*)bitmap);
+ pContext->m_pDevice = new CFX_SkiaDevice;
+ if (flags & FPDF_REVERSE_BYTE_ORDER)
+ ((CFX_SkiaDevice*)pContext->m_pDevice)
+ ->Attach((CFX_DIBitmap*)bitmap, 0, TRUE);
+ else
+ ((CFX_SkiaDevice*)pContext->m_pDevice)->Attach((CFX_DIBitmap*)bitmap);
#else
- pContext->m_pDevice = new CFX_FxgeDevice;
- if (flags & FPDF_REVERSE_BYTE_ORDER)
- ((CFX_FxgeDevice*)pContext->m_pDevice)->Attach((CFX_DIBitmap*)bitmap,0,TRUE);
- else
- ((CFX_FxgeDevice*)pContext->m_pDevice)->Attach((CFX_DIBitmap*)bitmap);
+ pContext->m_pDevice = new CFX_FxgeDevice;
+ if (flags & FPDF_REVERSE_BYTE_ORDER)
+ ((CFX_FxgeDevice*)pContext->m_pDevice)
+ ->Attach((CFX_DIBitmap*)bitmap, 0, TRUE);
+ else
+ ((CFX_FxgeDevice*)pContext->m_pDevice)->Attach((CFX_DIBitmap*)bitmap);
#endif
- IFSDK_PAUSE_Adapter IPauseAdapter(pause);
+ IFSDK_PAUSE_Adapter IPauseAdapter(pause);
- FPDF_RenderPage_Retail(pContext, page, start_x, start_y, size_x, size_y,
- rotate, flags,FALSE, &IPauseAdapter);
+ FPDF_RenderPage_Retail(pContext, page, start_x, start_y, size_x, size_y,
+ rotate, flags, FALSE, &IPauseAdapter);
- if (pContext->m_pRenderer)
- return CPDF_ProgressiveRenderer::ToFPDFStatus(pContext->m_pRenderer->GetStatus());
+ if (pContext->m_pRenderer)
+ return CPDF_ProgressiveRenderer::ToFPDFStatus(
+ pContext->m_pRenderer->GetStatus());
- return FPDF_RENDER_FAILED;
+ return FPDF_RENDER_FAILED;
}
-DLLEXPORT int STDCALL FPDF_RenderPage_Continue(FPDF_PAGE page,IFSDK_PAUSE * pause)
-{
- if (page == NULL)
- return FPDF_RENDER_FAILED;
-
- if (!pause)
- return FPDF_RENDER_FAILED;
-
- if (pause->version !=1)
- return FPDF_RENDER_FAILED;
-
- CPDF_Page* pPage = (CPDF_Page*)page;
- CRenderContext * pContext = (CRenderContext*)pPage->GetPrivateData((void*)1);
- if (pContext && pContext->m_pRenderer)
- {
- IFSDK_PAUSE_Adapter IPauseAdapter(pause);
- pContext->m_pRenderer->Continue(&IPauseAdapter);
- return CPDF_ProgressiveRenderer::ToFPDFStatus(pContext->m_pRenderer->GetStatus());
- }
+DLLEXPORT int STDCALL FPDF_RenderPage_Continue(FPDF_PAGE page,
+ IFSDK_PAUSE* pause) {
+ if (page == NULL)
return FPDF_RENDER_FAILED;
-}
-
-DLLEXPORT void STDCALL FPDF_RenderPage_Close(FPDF_PAGE page)
-{
- if (!page)
- return;
+ if (!pause)
+ return FPDF_RENDER_FAILED;
- CPDF_Page* pPage = (CPDF_Page*)page;
- CRenderContext * pContext = (CRenderContext*)pPage->GetPrivateData((void*)1);
- if (!pContext)
- return;
+ if (pause->version != 1)
+ return FPDF_RENDER_FAILED;
- pContext->m_pDevice->RestoreState();
- delete pContext;
- pPage->RemovePrivateData((void*)1);
+ CPDF_Page* pPage = (CPDF_Page*)page;
+ CRenderContext* pContext = (CRenderContext*)pPage->GetPrivateData((void*)1);
+ if (pContext && pContext->m_pRenderer) {
+ IFSDK_PAUSE_Adapter IPauseAdapter(pause);
+ pContext->m_pRenderer->Continue(&IPauseAdapter);
+ return CPDF_ProgressiveRenderer::ToFPDFStatus(
+ pContext->m_pRenderer->GetStatus());
+ }
+ return FPDF_RENDER_FAILED;
}
+DLLEXPORT void STDCALL FPDF_RenderPage_Close(FPDF_PAGE page) {
+ if (!page)
+ return;
+
+ CPDF_Page* pPage = (CPDF_Page*)page;
+ CRenderContext* pContext = (CRenderContext*)pPage->GetPrivateData((void*)1);
+ if (!pContext)
+ return;
+
+ pContext->m_pDevice->RestoreState();
+ delete pContext;
+ pPage->RemovePrivateData((void*)1);
+}
diff --git a/fpdfsdk/src/fpdf_searchex.cpp b/fpdfsdk/src/fpdf_searchex.cpp
index e012d30590..9747316305 100644
--- a/fpdfsdk/src/fpdf_searchex.cpp
+++ b/fpdfsdk/src/fpdf_searchex.cpp
@@ -8,11 +8,9 @@
#include "../../core/include/fpdftext/fpdf_text.h"
-DLLEXPORT int STDCALL FPDFText_GetCharIndexFromTextIndex(
- FPDF_TEXTPAGE text_page,
- int nTextIndex)
-{
- if (!text_page)
- return -1;
- return ((IPDF_TextPage*)text_page)->CharIndexFromTextIndex(nTextIndex);
+DLLEXPORT int STDCALL
+FPDFText_GetCharIndexFromTextIndex(FPDF_TEXTPAGE text_page, int nTextIndex) {
+ if (!text_page)
+ return -1;
+ return ((IPDF_TextPage*)text_page)->CharIndexFromTextIndex(nTextIndex);
}
diff --git a/fpdfsdk/src/fpdf_sysfontinfo.cpp b/fpdfsdk/src/fpdf_sysfontinfo.cpp
index 6b7d6fbe4c..a0fdb5083d 100644
--- a/fpdfsdk/src/fpdf_sysfontinfo.cpp
+++ b/fpdfsdk/src/fpdf_sysfontinfo.cpp
@@ -8,167 +8,181 @@
#include "../include/fsdk_define.h"
#include "../include/pdfwindow/PWL_FontMap.h"
-class CFX_ExternalFontInfo final : public IFX_SystemFontInfo
-{
-public:
- CFX_ExternalFontInfo(FPDF_SYSFONTINFO* pInfo) : m_pInfo(pInfo) { }
-
- virtual void Release() override
- {
- if (m_pInfo->Release)
- m_pInfo->Release(m_pInfo);
- delete this;
- }
-
- virtual FX_BOOL EnumFontList(CFX_FontMapper* pMapper) override
- {
- if (m_pInfo->EnumFonts) {
- m_pInfo->EnumFonts(m_pInfo, pMapper);
- return TRUE;
- }
- return FALSE;
- }
-
- virtual void* MapFont(int weight, FX_BOOL bItalic, int charset, int pitch_family, const FX_CHAR* family, int& iExact) override
- {
- if (m_pInfo->MapFont)
- return m_pInfo->MapFont(m_pInfo, weight, bItalic, charset, pitch_family, family, &iExact);
- return NULL;
- }
-
- virtual void* GetFont(const FX_CHAR* family) override
- {
- if (m_pInfo->GetFont)
- return m_pInfo->GetFont(m_pInfo, family);
- return NULL;
- }
-
- virtual FX_DWORD GetFontData(void* hFont, FX_DWORD table, uint8_t* buffer, FX_DWORD size) override
- {
- if (m_pInfo->GetFontData)
- return m_pInfo->GetFontData(m_pInfo, hFont, table, buffer, size);
- return 0;
- }
-
- virtual FX_BOOL GetFaceName(void* hFont, CFX_ByteString& name) override
- {
- if (m_pInfo->GetFaceName == NULL) return FALSE;
- FX_DWORD size = m_pInfo->GetFaceName(m_pInfo, hFont, NULL, 0);
- if (size == 0) return FALSE;
- char* buffer = FX_Alloc(char, size);
- size = m_pInfo->GetFaceName(m_pInfo, hFont, buffer, size);
- name = CFX_ByteString(buffer, size);
- FX_Free(buffer);
- return TRUE;
- }
-
- virtual FX_BOOL GetFontCharset(void* hFont, int& charset) override
- {
- if (m_pInfo->GetFontCharset) {
- charset = m_pInfo->GetFontCharset(m_pInfo, hFont);
- return TRUE;
- }
- return FALSE;
- }
-
- virtual void DeleteFont(void* hFont) override
- {
- if (m_pInfo->DeleteFont)
- m_pInfo->DeleteFont(m_pInfo, hFont);
- }
-
-private:
- ~CFX_ExternalFontInfo() { }
-
- FPDF_SYSFONTINFO* const m_pInfo;
+class CFX_ExternalFontInfo final : public IFX_SystemFontInfo {
+ public:
+ CFX_ExternalFontInfo(FPDF_SYSFONTINFO* pInfo) : m_pInfo(pInfo) {}
+
+ virtual void Release() override {
+ if (m_pInfo->Release)
+ m_pInfo->Release(m_pInfo);
+ delete this;
+ }
+
+ virtual FX_BOOL EnumFontList(CFX_FontMapper* pMapper) override {
+ if (m_pInfo->EnumFonts) {
+ m_pInfo->EnumFonts(m_pInfo, pMapper);
+ return TRUE;
+ }
+ return FALSE;
+ }
+
+ virtual void* MapFont(int weight,
+ FX_BOOL bItalic,
+ int charset,
+ int pitch_family,
+ const FX_CHAR* family,
+ int& iExact) override {
+ if (m_pInfo->MapFont)
+ return m_pInfo->MapFont(m_pInfo, weight, bItalic, charset, pitch_family,
+ family, &iExact);
+ return NULL;
+ }
+
+ virtual void* GetFont(const FX_CHAR* family) override {
+ if (m_pInfo->GetFont)
+ return m_pInfo->GetFont(m_pInfo, family);
+ return NULL;
+ }
+
+ virtual FX_DWORD GetFontData(void* hFont,
+ FX_DWORD table,
+ uint8_t* buffer,
+ FX_DWORD size) override {
+ if (m_pInfo->GetFontData)
+ return m_pInfo->GetFontData(m_pInfo, hFont, table, buffer, size);
+ return 0;
+ }
+
+ virtual FX_BOOL GetFaceName(void* hFont, CFX_ByteString& name) override {
+ if (m_pInfo->GetFaceName == NULL)
+ return FALSE;
+ FX_DWORD size = m_pInfo->GetFaceName(m_pInfo, hFont, NULL, 0);
+ if (size == 0)
+ return FALSE;
+ char* buffer = FX_Alloc(char, size);
+ size = m_pInfo->GetFaceName(m_pInfo, hFont, buffer, size);
+ name = CFX_ByteString(buffer, size);
+ FX_Free(buffer);
+ return TRUE;
+ }
+
+ virtual FX_BOOL GetFontCharset(void* hFont, int& charset) override {
+ if (m_pInfo->GetFontCharset) {
+ charset = m_pInfo->GetFontCharset(m_pInfo, hFont);
+ return TRUE;
+ }
+ return FALSE;
+ }
+
+ virtual void DeleteFont(void* hFont) override {
+ if (m_pInfo->DeleteFont)
+ m_pInfo->DeleteFont(m_pInfo, hFont);
+ }
+
+ private:
+ ~CFX_ExternalFontInfo() {}
+
+ FPDF_SYSFONTINFO* const m_pInfo;
};
-DLLEXPORT void STDCALL FPDF_AddInstalledFont(void* mapper, const char* name, int charset)
-{
- ((CFX_FontMapper*)mapper)->AddInstalledFont(name, charset);
+DLLEXPORT void STDCALL FPDF_AddInstalledFont(void* mapper,
+ const char* name,
+ int charset) {
+ ((CFX_FontMapper*)mapper)->AddInstalledFont(name, charset);
}
-DLLEXPORT void STDCALL FPDF_SetSystemFontInfo(FPDF_SYSFONTINFO* pFontInfoExt)
-{
- if (pFontInfoExt->version != 1)
- return;
+DLLEXPORT void STDCALL FPDF_SetSystemFontInfo(FPDF_SYSFONTINFO* pFontInfoExt) {
+ if (pFontInfoExt->version != 1)
+ return;
- CFX_GEModule::Get()->GetFontMgr()->SetSystemFontInfo(
- new CFX_ExternalFontInfo(pFontInfoExt));
+ CFX_GEModule::Get()->GetFontMgr()->SetSystemFontInfo(
+ new CFX_ExternalFontInfo(pFontInfoExt));
}
-DLLEXPORT const FPDF_CharsetFontMap* STDCALL FPDF_GetDefaultTTFMap()
-{
- return CPWL_FontMap::defaultTTFMap;
+DLLEXPORT const FPDF_CharsetFontMap* STDCALL FPDF_GetDefaultTTFMap() {
+ return CPWL_FontMap::defaultTTFMap;
}
-struct FPDF_SYSFONTINFO_DEFAULT : public FPDF_SYSFONTINFO
-{
- IFX_SystemFontInfo* m_pFontInfo;
+struct FPDF_SYSFONTINFO_DEFAULT : public FPDF_SYSFONTINFO {
+ IFX_SystemFontInfo* m_pFontInfo;
};
-static void DefaultRelease(struct _FPDF_SYSFONTINFO* pThis)
-{
- ((FPDF_SYSFONTINFO_DEFAULT*)pThis)->m_pFontInfo->Release();
+static void DefaultRelease(struct _FPDF_SYSFONTINFO* pThis) {
+ ((FPDF_SYSFONTINFO_DEFAULT*)pThis)->m_pFontInfo->Release();
}
-static void DefaultEnumFonts(struct _FPDF_SYSFONTINFO* pThis, void* pMapper)
-{
- ((FPDF_SYSFONTINFO_DEFAULT*)pThis)->m_pFontInfo->EnumFontList((CFX_FontMapper*)pMapper);
+static void DefaultEnumFonts(struct _FPDF_SYSFONTINFO* pThis, void* pMapper) {
+ ((FPDF_SYSFONTINFO_DEFAULT*)pThis)
+ ->m_pFontInfo->EnumFontList((CFX_FontMapper*)pMapper);
}
-static void* DefaultMapFont(struct _FPDF_SYSFONTINFO* pThis, int weight, int bItalic, int charset, int pitch_family, const char* family, int* bExact)
-{
- return ((FPDF_SYSFONTINFO_DEFAULT*)pThis)->m_pFontInfo->MapFont(weight, bItalic, charset, pitch_family, family, *bExact);
+static void* DefaultMapFont(struct _FPDF_SYSFONTINFO* pThis,
+ int weight,
+ int bItalic,
+ int charset,
+ int pitch_family,
+ const char* family,
+ int* bExact) {
+ return ((FPDF_SYSFONTINFO_DEFAULT*)pThis)
+ ->m_pFontInfo->MapFont(weight, bItalic, charset, pitch_family, family,
+ *bExact);
}
-void* DefaultGetFont(struct _FPDF_SYSFONTINFO* pThis, const char* family)
-{
- return ((FPDF_SYSFONTINFO_DEFAULT*)pThis)->m_pFontInfo->GetFont(family);
+void* DefaultGetFont(struct _FPDF_SYSFONTINFO* pThis, const char* family) {
+ return ((FPDF_SYSFONTINFO_DEFAULT*)pThis)->m_pFontInfo->GetFont(family);
}
-static unsigned long DefaultGetFontData(struct _FPDF_SYSFONTINFO* pThis, void* hFont,
- unsigned int table, unsigned char* buffer, unsigned long buf_size)
-{
- return ((FPDF_SYSFONTINFO_DEFAULT*)pThis)->m_pFontInfo->GetFontData(hFont, table, buffer, buf_size);
+static unsigned long DefaultGetFontData(struct _FPDF_SYSFONTINFO* pThis,
+ void* hFont,
+ unsigned int table,
+ unsigned char* buffer,
+ unsigned long buf_size) {
+ return ((FPDF_SYSFONTINFO_DEFAULT*)pThis)
+ ->m_pFontInfo->GetFontData(hFont, table, buffer, buf_size);
}
-static unsigned long DefaultGetFaceName(struct _FPDF_SYSFONTINFO* pThis, void* hFont, char* buffer, unsigned long buf_size)
-{
- CFX_ByteString name;
- if (!((FPDF_SYSFONTINFO_DEFAULT*)pThis)->m_pFontInfo->GetFaceName(hFont, name)) return 0;
- if (name.GetLength() >= (long)buf_size) return name.GetLength() + 1;
- FXSYS_strcpy(buffer, name);
- return name.GetLength() + 1;
+static unsigned long DefaultGetFaceName(struct _FPDF_SYSFONTINFO* pThis,
+ void* hFont,
+ char* buffer,
+ unsigned long buf_size) {
+ CFX_ByteString name;
+ if (!((FPDF_SYSFONTINFO_DEFAULT*)pThis)
+ ->m_pFontInfo->GetFaceName(hFont, name))
+ return 0;
+ if (name.GetLength() >= (long)buf_size)
+ return name.GetLength() + 1;
+ FXSYS_strcpy(buffer, name);
+ return name.GetLength() + 1;
}
-static int DefaultGetFontCharset(struct _FPDF_SYSFONTINFO* pThis, void* hFont)
-{
- int charset;
- if (!((FPDF_SYSFONTINFO_DEFAULT*)pThis)->m_pFontInfo->GetFontCharset(hFont, charset)) return 0;
- return charset;
+static int DefaultGetFontCharset(struct _FPDF_SYSFONTINFO* pThis, void* hFont) {
+ int charset;
+ if (!((FPDF_SYSFONTINFO_DEFAULT*)pThis)
+ ->m_pFontInfo->GetFontCharset(hFont, charset))
+ return 0;
+ return charset;
}
-static void DefaultDeleteFont(struct _FPDF_SYSFONTINFO* pThis, void* hFont)
-{
- ((FPDF_SYSFONTINFO_DEFAULT*)pThis)->m_pFontInfo->DeleteFont(hFont);
+static void DefaultDeleteFont(struct _FPDF_SYSFONTINFO* pThis, void* hFont) {
+ ((FPDF_SYSFONTINFO_DEFAULT*)pThis)->m_pFontInfo->DeleteFont(hFont);
}
-DLLEXPORT FPDF_SYSFONTINFO* STDCALL FPDF_GetDefaultSystemFontInfo()
-{
- IFX_SystemFontInfo* pFontInfo = IFX_SystemFontInfo::CreateDefault();
- if (pFontInfo == NULL) return NULL;
-
- FPDF_SYSFONTINFO_DEFAULT* pFontInfoExt = FX_Alloc(FPDF_SYSFONTINFO_DEFAULT, 1);
- pFontInfoExt->DeleteFont = DefaultDeleteFont;
- pFontInfoExt->EnumFonts = DefaultEnumFonts;
- pFontInfoExt->GetFaceName = DefaultGetFaceName;
- pFontInfoExt->GetFont = DefaultGetFont;
- pFontInfoExt->GetFontCharset = DefaultGetFontCharset;
- pFontInfoExt->GetFontData = DefaultGetFontData;
- pFontInfoExt->MapFont = DefaultMapFont;
- pFontInfoExt->Release = DefaultRelease;
- pFontInfoExt->version = 1;
- pFontInfoExt->m_pFontInfo = pFontInfo;
- return pFontInfoExt;
+DLLEXPORT FPDF_SYSFONTINFO* STDCALL FPDF_GetDefaultSystemFontInfo() {
+ IFX_SystemFontInfo* pFontInfo = IFX_SystemFontInfo::CreateDefault();
+ if (pFontInfo == NULL)
+ return NULL;
+
+ FPDF_SYSFONTINFO_DEFAULT* pFontInfoExt =
+ FX_Alloc(FPDF_SYSFONTINFO_DEFAULT, 1);
+ pFontInfoExt->DeleteFont = DefaultDeleteFont;
+ pFontInfoExt->EnumFonts = DefaultEnumFonts;
+ pFontInfoExt->GetFaceName = DefaultGetFaceName;
+ pFontInfoExt->GetFont = DefaultGetFont;
+ pFontInfoExt->GetFontCharset = DefaultGetFontCharset;
+ pFontInfoExt->GetFontData = DefaultGetFontData;
+ pFontInfoExt->MapFont = DefaultMapFont;
+ pFontInfoExt->Release = DefaultRelease;
+ pFontInfoExt->version = 1;
+ pFontInfoExt->m_pFontInfo = pFontInfo;
+ return pFontInfoExt;
}
diff --git a/fpdfsdk/src/fpdf_transformpage.cpp b/fpdfsdk/src/fpdf_transformpage.cpp
index a29db5a9dc..71ba48e042 100644
--- a/fpdfsdk/src/fpdf_transformpage.cpp
+++ b/fpdfsdk/src/fpdf_transformpage.cpp
@@ -7,314 +7,314 @@
#include "../../public/fpdf_transformpage.h"
#include "../include/fsdk_define.h"
-DLLEXPORT void STDCALL FPDFPage_SetMediaBox(FPDF_PAGE page, float left, float bottom, float right, float top)
-{
- if(!page)
- return;
-
- CPDF_Page* pPage = (CPDF_Page*)page;
- CPDF_Dictionary* pPageDict = pPage->m_pFormDict;
- CPDF_Array* pMediaBoxArray = new CPDF_Array;
- pMediaBoxArray->Add(new CPDF_Number(left));
- pMediaBoxArray->Add(new CPDF_Number(bottom));
- pMediaBoxArray->Add(new CPDF_Number(FX_FLOAT(right)));
- pMediaBoxArray->Add(new CPDF_Number(FX_FLOAT(top)));
- pPageDict->SetAt("MediaBox", pMediaBoxArray);
+DLLEXPORT void STDCALL FPDFPage_SetMediaBox(FPDF_PAGE page,
+ float left,
+ float bottom,
+ float right,
+ float top) {
+ if (!page)
+ return;
+
+ CPDF_Page* pPage = (CPDF_Page*)page;
+ CPDF_Dictionary* pPageDict = pPage->m_pFormDict;
+ CPDF_Array* pMediaBoxArray = new CPDF_Array;
+ pMediaBoxArray->Add(new CPDF_Number(left));
+ pMediaBoxArray->Add(new CPDF_Number(bottom));
+ pMediaBoxArray->Add(new CPDF_Number(FX_FLOAT(right)));
+ pMediaBoxArray->Add(new CPDF_Number(FX_FLOAT(top)));
+ pPageDict->SetAt("MediaBox", pMediaBoxArray);
}
-
-DLLEXPORT void STDCALL FPDFPage_SetCropBox(FPDF_PAGE page, float left, float bottom, float right, float top)
-{
- if(!page)
- return;
-
- CPDF_Page* pPage = (CPDF_Page*)page;
- CPDF_Dictionary* pPageDict = pPage->m_pFormDict;
- CPDF_Array* pCropBoxArray = new CPDF_Array;
- pCropBoxArray->Add(new CPDF_Number(left));
- pCropBoxArray->Add(new CPDF_Number(bottom));
- pCropBoxArray->Add(new CPDF_Number(FX_FLOAT(right)));
- pCropBoxArray->Add(new CPDF_Number(FX_FLOAT(top)));
- pPageDict->SetAt("CropBox", pCropBoxArray);
+DLLEXPORT void STDCALL FPDFPage_SetCropBox(FPDF_PAGE page,
+ float left,
+ float bottom,
+ float right,
+ float top) {
+ if (!page)
+ return;
+
+ CPDF_Page* pPage = (CPDF_Page*)page;
+ CPDF_Dictionary* pPageDict = pPage->m_pFormDict;
+ CPDF_Array* pCropBoxArray = new CPDF_Array;
+ pCropBoxArray->Add(new CPDF_Number(left));
+ pCropBoxArray->Add(new CPDF_Number(bottom));
+ pCropBoxArray->Add(new CPDF_Number(FX_FLOAT(right)));
+ pCropBoxArray->Add(new CPDF_Number(FX_FLOAT(top)));
+ pPageDict->SetAt("CropBox", pCropBoxArray);
}
-
-DLLEXPORT FPDF_BOOL STDCALL FPDFPage_GetMediaBox(FPDF_PAGE page, float* left, float* bottom, float* right, float* top)
-{
- if(!page)
- return FALSE;
- CPDF_Page* pPage = (CPDF_Page*)page;
- CPDF_Dictionary* pPageDict = pPage->m_pFormDict;
- CPDF_Array* pArray = pPageDict->GetArray("MediaBox");
- if(pArray)
- {
- *left = pArray->GetFloat(0);
- *bottom = pArray->GetFloat(1);
- *right = pArray->GetFloat(2);
- *top = pArray->GetFloat(3);
- return TRUE;
- }
- return FALSE;
+DLLEXPORT FPDF_BOOL STDCALL FPDFPage_GetMediaBox(FPDF_PAGE page,
+ float* left,
+ float* bottom,
+ float* right,
+ float* top) {
+ if (!page)
+ return FALSE;
+ CPDF_Page* pPage = (CPDF_Page*)page;
+ CPDF_Dictionary* pPageDict = pPage->m_pFormDict;
+ CPDF_Array* pArray = pPageDict->GetArray("MediaBox");
+ if (pArray) {
+ *left = pArray->GetFloat(0);
+ *bottom = pArray->GetFloat(1);
+ *right = pArray->GetFloat(2);
+ *top = pArray->GetFloat(3);
+ return TRUE;
+ }
+ return FALSE;
}
-DLLEXPORT FPDF_BOOL STDCALL FPDFPage_GetCropBox(FPDF_PAGE page, float* left, float* bottom, float* right, float* top)
-{
- if(!page)
- return FALSE;
- CPDF_Page* pPage = (CPDF_Page*)page;
- CPDF_Dictionary* pPageDict = pPage->m_pFormDict;
- CPDF_Array* pArray = pPageDict->GetArray("CropBox");
- if(pArray)
- {
- *left = pArray->GetFloat(0);
- *bottom = pArray->GetFloat(1);
- *right = pArray->GetFloat(2);
- *top = pArray->GetFloat(3);
- return TRUE;
- }
- return FALSE;
+DLLEXPORT FPDF_BOOL STDCALL FPDFPage_GetCropBox(FPDF_PAGE page,
+ float* left,
+ float* bottom,
+ float* right,
+ float* top) {
+ if (!page)
+ return FALSE;
+ CPDF_Page* pPage = (CPDF_Page*)page;
+ CPDF_Dictionary* pPageDict = pPage->m_pFormDict;
+ CPDF_Array* pArray = pPageDict->GetArray("CropBox");
+ if (pArray) {
+ *left = pArray->GetFloat(0);
+ *bottom = pArray->GetFloat(1);
+ *right = pArray->GetFloat(2);
+ *top = pArray->GetFloat(3);
+ return TRUE;
+ }
+ return FALSE;
}
-DLLEXPORT FPDF_BOOL STDCALL FPDFPage_TransFormWithClip(FPDF_PAGE page, FS_MATRIX* matrix, FS_RECTF* clipRect)
-{
- if(!page)
- return FALSE;
-
- CFX_ByteTextBuf textBuf;
- textBuf<<"q ";
- CFX_FloatRect rect(clipRect->left, clipRect->bottom, clipRect->right, clipRect->top);
- rect.Normalize();
- CFX_ByteString bsClipping;
- bsClipping.Format("%f %f %f %f re W* n ", rect.left, rect.bottom, rect.Width(), rect.Height());
- textBuf<<bsClipping;
-
- CFX_ByteString bsMatix;
- bsMatix.Format("%f %f %f %f %f %f cm ", matrix->a, matrix->b,matrix->c,matrix->d,matrix->e,matrix->f);
- textBuf<<bsMatix;
-
-
- CPDF_Page* pPage = (CPDF_Page*)page;
- CPDF_Dictionary* pPageDic = pPage->m_pFormDict;
- CPDF_Object* pContentObj = pPageDic ? pPageDic->GetElement("Contents") : NULL;
- if(!pContentObj)
- pContentObj = pPageDic ? pPageDic->GetArray("Contents") : NULL;
- if(!pContentObj)
- return FALSE;
-
- CPDF_Dictionary* pDic = new CPDF_Dictionary;
- CPDF_Stream* pStream = new CPDF_Stream(NULL,0, pDic);
- pStream->SetData(textBuf.GetBuffer(), textBuf.GetSize(), FALSE, FALSE);
- CPDF_Document* pDoc = pPage->m_pDocument;
- if(!pDoc)
- return FALSE;
- pDoc->AddIndirectObject(pStream);
-
- pDic = new CPDF_Dictionary;
- CPDF_Stream* pEndStream = new CPDF_Stream(NULL,0, pDic);
- pEndStream->SetData((const uint8_t*)" Q", 2, FALSE, FALSE);
- pDoc->AddIndirectObject(pEndStream);
-
- CPDF_Array* pContentArray = NULL;
- if (pContentObj && pContentObj->GetType() == PDFOBJ_ARRAY)
- {
- pContentArray = (CPDF_Array*)pContentObj;
- CPDF_Reference* pRef = new CPDF_Reference(pDoc, pStream->GetObjNum());
- pContentArray->InsertAt(0, pRef);
- pContentArray->AddReference(pDoc,pEndStream);
-
- }
- else if(pContentObj && pContentObj->GetType() == PDFOBJ_REFERENCE)
- {
- CPDF_Reference* pReference = (CPDF_Reference*)pContentObj;
- CPDF_Object* pDirectObj = pReference->GetDirect();
- if(pDirectObj != NULL)
- {
- if(pDirectObj->GetType() == PDFOBJ_ARRAY)
- {
- pContentArray = (CPDF_Array*)pDirectObj;
- CPDF_Reference* pRef = new CPDF_Reference(pDoc, pStream->GetObjNum());
- pContentArray->InsertAt(0, pRef);
- pContentArray->AddReference(pDoc,pEndStream);
- }
- else if(pDirectObj->GetType() == PDFOBJ_STREAM)
- {
- pContentArray = new CPDF_Array();
- pContentArray->AddReference(pDoc,pStream->GetObjNum());
- pContentArray->AddReference(pDoc,pDirectObj->GetObjNum());
- pContentArray->AddReference(pDoc, pEndStream);
- pPageDic->SetAtReference("Contents", pDoc, pDoc->AddIndirectObject(pContentArray));
- }
- }
- }
-
- //Need to transform the patterns as well.
- CPDF_Dictionary* pRes = pPageDic->GetDict(FX_BSTRC("Resources"));
- if(pRes)
- {
- CPDF_Dictionary* pPattenDict = pRes->GetDict(FX_BSTRC("Pattern"));
- if(pPattenDict)
- {
- FX_POSITION pos = pPattenDict->GetStartPos();
- while(pos)
- {
- CPDF_Dictionary* pDict = NULL;
- CFX_ByteString key;
- CPDF_Object* pObj = pPattenDict->GetNextElement(pos, key);
- if(pObj->GetType() == PDFOBJ_REFERENCE)
- pObj = pObj->GetDirect();
- if(pObj->GetType() == PDFOBJ_DICTIONARY)
- {
- pDict = (CPDF_Dictionary*)pObj;
- }
- else if(pObj->GetType() == PDFOBJ_STREAM)
- {
- pDict = ((CPDF_Stream*)pObj)->GetDict();
- }
- else
- continue;
-
- CFX_AffineMatrix m = pDict->GetMatrix(FX_BSTRC("Matrix"));
- CFX_AffineMatrix t = *(CFX_AffineMatrix*)matrix;
- m.Concat(t);
- pDict->SetAtMatrix(FX_BSTRC("Matrix"), m);
- }
- }
- }
-
- return TRUE;
+DLLEXPORT FPDF_BOOL STDCALL FPDFPage_TransFormWithClip(FPDF_PAGE page,
+ FS_MATRIX* matrix,
+ FS_RECTF* clipRect) {
+ if (!page)
+ return FALSE;
+
+ CFX_ByteTextBuf textBuf;
+ textBuf << "q ";
+ CFX_FloatRect rect(clipRect->left, clipRect->bottom, clipRect->right,
+ clipRect->top);
+ rect.Normalize();
+ CFX_ByteString bsClipping;
+ bsClipping.Format("%f %f %f %f re W* n ", rect.left, rect.bottom,
+ rect.Width(), rect.Height());
+ textBuf << bsClipping;
+
+ CFX_ByteString bsMatix;
+ bsMatix.Format("%f %f %f %f %f %f cm ", matrix->a, matrix->b, matrix->c,
+ matrix->d, matrix->e, matrix->f);
+ textBuf << bsMatix;
+
+ CPDF_Page* pPage = (CPDF_Page*)page;
+ CPDF_Dictionary* pPageDic = pPage->m_pFormDict;
+ CPDF_Object* pContentObj = pPageDic ? pPageDic->GetElement("Contents") : NULL;
+ if (!pContentObj)
+ pContentObj = pPageDic ? pPageDic->GetArray("Contents") : NULL;
+ if (!pContentObj)
+ return FALSE;
+
+ CPDF_Dictionary* pDic = new CPDF_Dictionary;
+ CPDF_Stream* pStream = new CPDF_Stream(NULL, 0, pDic);
+ pStream->SetData(textBuf.GetBuffer(), textBuf.GetSize(), FALSE, FALSE);
+ CPDF_Document* pDoc = pPage->m_pDocument;
+ if (!pDoc)
+ return FALSE;
+ pDoc->AddIndirectObject(pStream);
+
+ pDic = new CPDF_Dictionary;
+ CPDF_Stream* pEndStream = new CPDF_Stream(NULL, 0, pDic);
+ pEndStream->SetData((const uint8_t*)" Q", 2, FALSE, FALSE);
+ pDoc->AddIndirectObject(pEndStream);
+
+ CPDF_Array* pContentArray = NULL;
+ if (pContentObj && pContentObj->GetType() == PDFOBJ_ARRAY) {
+ pContentArray = (CPDF_Array*)pContentObj;
+ CPDF_Reference* pRef = new CPDF_Reference(pDoc, pStream->GetObjNum());
+ pContentArray->InsertAt(0, pRef);
+ pContentArray->AddReference(pDoc, pEndStream);
+
+ } else if (pContentObj && pContentObj->GetType() == PDFOBJ_REFERENCE) {
+ CPDF_Reference* pReference = (CPDF_Reference*)pContentObj;
+ CPDF_Object* pDirectObj = pReference->GetDirect();
+ if (pDirectObj != NULL) {
+ if (pDirectObj->GetType() == PDFOBJ_ARRAY) {
+ pContentArray = (CPDF_Array*)pDirectObj;
+ CPDF_Reference* pRef = new CPDF_Reference(pDoc, pStream->GetObjNum());
+ pContentArray->InsertAt(0, pRef);
+ pContentArray->AddReference(pDoc, pEndStream);
+ } else if (pDirectObj->GetType() == PDFOBJ_STREAM) {
+ pContentArray = new CPDF_Array();
+ pContentArray->AddReference(pDoc, pStream->GetObjNum());
+ pContentArray->AddReference(pDoc, pDirectObj->GetObjNum());
+ pContentArray->AddReference(pDoc, pEndStream);
+ pPageDic->SetAtReference("Contents", pDoc,
+ pDoc->AddIndirectObject(pContentArray));
+ }
+ }
+ }
+
+ // Need to transform the patterns as well.
+ CPDF_Dictionary* pRes = pPageDic->GetDict(FX_BSTRC("Resources"));
+ if (pRes) {
+ CPDF_Dictionary* pPattenDict = pRes->GetDict(FX_BSTRC("Pattern"));
+ if (pPattenDict) {
+ FX_POSITION pos = pPattenDict->GetStartPos();
+ while (pos) {
+ CPDF_Dictionary* pDict = NULL;
+ CFX_ByteString key;
+ CPDF_Object* pObj = pPattenDict->GetNextElement(pos, key);
+ if (pObj->GetType() == PDFOBJ_REFERENCE)
+ pObj = pObj->GetDirect();
+ if (pObj->GetType() == PDFOBJ_DICTIONARY) {
+ pDict = (CPDF_Dictionary*)pObj;
+ } else if (pObj->GetType() == PDFOBJ_STREAM) {
+ pDict = ((CPDF_Stream*)pObj)->GetDict();
+ } else
+ continue;
+
+ CFX_AffineMatrix m = pDict->GetMatrix(FX_BSTRC("Matrix"));
+ CFX_AffineMatrix t = *(CFX_AffineMatrix*)matrix;
+ m.Concat(t);
+ pDict->SetAtMatrix(FX_BSTRC("Matrix"), m);
+ }
+ }
+ }
+
+ return TRUE;
}
-DLLEXPORT void STDCALL FPDFPageObj_TransformClipPath(FPDF_PAGEOBJECT page_object,double a, double b, double c, double d, double e, double f)
-{
- CPDF_PageObject* pPageObj = (CPDF_PageObject*)page_object;
- if(pPageObj == NULL)
- return;
- CFX_AffineMatrix matrix((FX_FLOAT)a,(FX_FLOAT)b,(FX_FLOAT)c,(FX_FLOAT)d,(FX_FLOAT)e,(FX_FLOAT)f);
-
- //Special treatment to shading object, because the ClipPath for shading object is already transformed.
- if(pPageObj->m_Type != PDFPAGE_SHADING)
- pPageObj->TransformClipPath(matrix);
- pPageObj->TransformGeneralState(matrix);
+DLLEXPORT void STDCALL
+FPDFPageObj_TransformClipPath(FPDF_PAGEOBJECT page_object,
+ double a,
+ double b,
+ double c,
+ double d,
+ double e,
+ double f) {
+ CPDF_PageObject* pPageObj = (CPDF_PageObject*)page_object;
+ if (pPageObj == NULL)
+ return;
+ CFX_AffineMatrix matrix((FX_FLOAT)a, (FX_FLOAT)b, (FX_FLOAT)c, (FX_FLOAT)d,
+ (FX_FLOAT)e, (FX_FLOAT)f);
+
+ // Special treatment to shading object, because the ClipPath for shading
+ // object is already transformed.
+ if (pPageObj->m_Type != PDFPAGE_SHADING)
+ pPageObj->TransformClipPath(matrix);
+ pPageObj->TransformGeneralState(matrix);
}
-
-DLLEXPORT FPDF_CLIPPATH STDCALL FPDF_CreateClipPath(float left, float bottom, float right, float top)
-{
- CPDF_ClipPath* pNewClipPath = new CPDF_ClipPath();
- pNewClipPath->GetModify();
- CPDF_Path Path;
- Path.GetModify();
- Path.AppendRect(left, bottom, right, top);
- pNewClipPath->AppendPath(Path, FXFILL_ALTERNATE, FALSE);
- return pNewClipPath;
+DLLEXPORT FPDF_CLIPPATH STDCALL FPDF_CreateClipPath(float left,
+ float bottom,
+ float right,
+ float top) {
+ CPDF_ClipPath* pNewClipPath = new CPDF_ClipPath();
+ pNewClipPath->GetModify();
+ CPDF_Path Path;
+ Path.GetModify();
+ Path.AppendRect(left, bottom, right, top);
+ pNewClipPath->AppendPath(Path, FXFILL_ALTERNATE, FALSE);
+ return pNewClipPath;
}
-DLLEXPORT void STDCALL FPDF_DestroyClipPath(FPDF_CLIPPATH clipPath)
-{
- delete (CPDF_ClipPath*)clipPath;
+DLLEXPORT void STDCALL FPDF_DestroyClipPath(FPDF_CLIPPATH clipPath) {
+ delete (CPDF_ClipPath*)clipPath;
}
-void OutputPath(CFX_ByteTextBuf& buf, CPDF_Path path)
-{
- const CFX_PathData* pPathData = path;
- if (pPathData == NULL) return;
-
- FX_PATHPOINT* pPoints = pPathData->GetPoints();
-
- if (path.IsRect()) {
- buf << (pPoints[0].m_PointX) << " " << (pPoints[0].m_PointY) << " "
- << (pPoints[2].m_PointX - pPoints[0].m_PointX) << " "
- << (pPoints[2].m_PointY - pPoints[0].m_PointY) << " re\n";
- return;
- }
-
- CFX_ByteString temp;
- for (int i = 0; i < pPathData->GetPointCount(); i ++) {
- buf << (pPoints[i].m_PointX) << " " << (pPoints[i].m_PointY);
- int point_type = pPoints[i].m_Flag & FXPT_TYPE;
- if (point_type == FXPT_MOVETO)
- buf << " m\n";
- else if (point_type == FXPT_BEZIERTO) {
- buf << " " << (pPoints[i+1].m_PointX) << " " << (pPoints[i+1].m_PointY) << " " <<
- (pPoints[i+2].m_PointX) << " " << (pPoints[i+2].m_PointY);
- if (pPoints[i+2].m_Flag & FXPT_CLOSEFIGURE)
- buf << " c h\n";
- else
- buf << " c\n";
- i += 2;
- } else if (point_type == FXPT_LINETO) {
- if (pPoints[i].m_Flag & FXPT_CLOSEFIGURE)
- buf << " l h\n";
- else
- buf << " l\n";
- }
- }
+void OutputPath(CFX_ByteTextBuf& buf, CPDF_Path path) {
+ const CFX_PathData* pPathData = path;
+ if (pPathData == NULL)
+ return;
+
+ FX_PATHPOINT* pPoints = pPathData->GetPoints();
+
+ if (path.IsRect()) {
+ buf << (pPoints[0].m_PointX) << " " << (pPoints[0].m_PointY) << " "
+ << (pPoints[2].m_PointX - pPoints[0].m_PointX) << " "
+ << (pPoints[2].m_PointY - pPoints[0].m_PointY) << " re\n";
+ return;
+ }
+
+ CFX_ByteString temp;
+ for (int i = 0; i < pPathData->GetPointCount(); i++) {
+ buf << (pPoints[i].m_PointX) << " " << (pPoints[i].m_PointY);
+ int point_type = pPoints[i].m_Flag & FXPT_TYPE;
+ if (point_type == FXPT_MOVETO)
+ buf << " m\n";
+ else if (point_type == FXPT_BEZIERTO) {
+ buf << " " << (pPoints[i + 1].m_PointX) << " "
+ << (pPoints[i + 1].m_PointY) << " " << (pPoints[i + 2].m_PointX)
+ << " " << (pPoints[i + 2].m_PointY);
+ if (pPoints[i + 2].m_Flag & FXPT_CLOSEFIGURE)
+ buf << " c h\n";
+ else
+ buf << " c\n";
+ i += 2;
+ } else if (point_type == FXPT_LINETO) {
+ if (pPoints[i].m_Flag & FXPT_CLOSEFIGURE)
+ buf << " l h\n";
+ else
+ buf << " l\n";
+ }
+ }
}
-DLLEXPORT void STDCALL FPDFPage_InsertClipPath(FPDF_PAGE page,FPDF_CLIPPATH clipPath)
-{
- if(!page)
- return;
- CPDF_Page* pPage = (CPDF_Page*)page;
- CPDF_Dictionary* pPageDic = pPage->m_pFormDict;
- CPDF_Object* pContentObj = pPageDic ? pPageDic->GetElement("Contents") : NULL;
- if(!pContentObj)
- pContentObj = pPageDic ? pPageDic->GetArray("Contents") : NULL;
- if(!pContentObj)
- return;
-
- CFX_ByteTextBuf strClip;
- CPDF_ClipPath* pClipPath = (CPDF_ClipPath*)clipPath;
- FX_DWORD i;
- for (i = 0; i < pClipPath->GetPathCount(); i ++) {
- CPDF_Path path = pClipPath->GetPath(i);
- int iClipType = pClipPath->GetClipType(i);
- if (path.GetPointCount() == 0) {
- // Empty clipping (totally clipped out)
- strClip << "0 0 m W n ";
- } else {
- OutputPath(strClip, path);
- if (iClipType == FXFILL_WINDING)
- strClip << "W n\n";
- else
- strClip << "W* n\n";
- }
- }
- CPDF_Dictionary* pDic = new CPDF_Dictionary;
- CPDF_Stream* pStream = new CPDF_Stream(NULL,0, pDic);
- pStream->SetData(strClip.GetBuffer(), strClip.GetSize(), FALSE, FALSE);
- CPDF_Document* pDoc = pPage->m_pDocument;
- if(!pDoc)
- return;
- pDoc->AddIndirectObject(pStream);
-
- CPDF_Array* pContentArray = NULL;
- if (pContentObj && pContentObj->GetType() == PDFOBJ_ARRAY)
- {
- pContentArray = (CPDF_Array*)pContentObj;
- CPDF_Reference* pRef = new CPDF_Reference(pDoc, pStream->GetObjNum());
- pContentArray->InsertAt(0, pRef);
- }
- else if(pContentObj && pContentObj->GetType() == PDFOBJ_REFERENCE)
- {
- CPDF_Reference* pReference = (CPDF_Reference*)pContentObj;
- CPDF_Object* pDirectObj = pReference->GetDirect();
- if(pDirectObj != NULL)
- {
- if(pDirectObj->GetType() == PDFOBJ_ARRAY)
- {
- pContentArray = (CPDF_Array*)pDirectObj;
- CPDF_Reference* pRef = new CPDF_Reference(pDoc, pStream->GetObjNum());
- pContentArray->InsertAt(0, pRef);
- }
- else if(pDirectObj->GetType() == PDFOBJ_STREAM)
- {
- pContentArray = new CPDF_Array();
- pContentArray->AddReference(pDoc,pStream->GetObjNum());
- pContentArray->AddReference(pDoc,pDirectObj->GetObjNum());
- pPageDic->SetAtReference("Contents", pDoc, pDoc->AddIndirectObject(pContentArray));
- }
- }
- }
+DLLEXPORT void STDCALL FPDFPage_InsertClipPath(FPDF_PAGE page,
+ FPDF_CLIPPATH clipPath) {
+ if (!page)
+ return;
+ CPDF_Page* pPage = (CPDF_Page*)page;
+ CPDF_Dictionary* pPageDic = pPage->m_pFormDict;
+ CPDF_Object* pContentObj = pPageDic ? pPageDic->GetElement("Contents") : NULL;
+ if (!pContentObj)
+ pContentObj = pPageDic ? pPageDic->GetArray("Contents") : NULL;
+ if (!pContentObj)
+ return;
+
+ CFX_ByteTextBuf strClip;
+ CPDF_ClipPath* pClipPath = (CPDF_ClipPath*)clipPath;
+ FX_DWORD i;
+ for (i = 0; i < pClipPath->GetPathCount(); i++) {
+ CPDF_Path path = pClipPath->GetPath(i);
+ int iClipType = pClipPath->GetClipType(i);
+ if (path.GetPointCount() == 0) {
+ // Empty clipping (totally clipped out)
+ strClip << "0 0 m W n ";
+ } else {
+ OutputPath(strClip, path);
+ if (iClipType == FXFILL_WINDING)
+ strClip << "W n\n";
+ else
+ strClip << "W* n\n";
+ }
+ }
+ CPDF_Dictionary* pDic = new CPDF_Dictionary;
+ CPDF_Stream* pStream = new CPDF_Stream(NULL, 0, pDic);
+ pStream->SetData(strClip.GetBuffer(), strClip.GetSize(), FALSE, FALSE);
+ CPDF_Document* pDoc = pPage->m_pDocument;
+ if (!pDoc)
+ return;
+ pDoc->AddIndirectObject(pStream);
+
+ CPDF_Array* pContentArray = NULL;
+ if (pContentObj && pContentObj->GetType() == PDFOBJ_ARRAY) {
+ pContentArray = (CPDF_Array*)pContentObj;
+ CPDF_Reference* pRef = new CPDF_Reference(pDoc, pStream->GetObjNum());
+ pContentArray->InsertAt(0, pRef);
+ } else if (pContentObj && pContentObj->GetType() == PDFOBJ_REFERENCE) {
+ CPDF_Reference* pReference = (CPDF_Reference*)pContentObj;
+ CPDF_Object* pDirectObj = pReference->GetDirect();
+ if (pDirectObj != NULL) {
+ if (pDirectObj->GetType() == PDFOBJ_ARRAY) {
+ pContentArray = (CPDF_Array*)pDirectObj;
+ CPDF_Reference* pRef = new CPDF_Reference(pDoc, pStream->GetObjNum());
+ pContentArray->InsertAt(0, pRef);
+ } else if (pDirectObj->GetType() == PDFOBJ_STREAM) {
+ pContentArray = new CPDF_Array();
+ pContentArray->AddReference(pDoc, pStream->GetObjNum());
+ pContentArray->AddReference(pDoc, pDirectObj->GetObjNum());
+ pPageDic->SetAtReference("Contents", pDoc,
+ pDoc->AddIndirectObject(pContentArray));
+ }
+ }
+ }
}
-
diff --git a/fpdfsdk/src/fpdfdoc.cpp b/fpdfsdk/src/fpdfdoc.cpp
index f75197bdbf..bcd401b4c4 100644
--- a/fpdfsdk/src/fpdfdoc.cpp
+++ b/fpdfsdk/src/fpdfdoc.cpp
@@ -9,287 +9,291 @@
static int THISMODULE = 0;
-static CPDF_Bookmark FindBookmark(const CPDF_BookmarkTree& tree, CPDF_Bookmark bookmark, const CFX_WideString& title)
-{
- if (bookmark && bookmark.GetTitle().CompareNoCase(title.c_str()) == 0) {
- // First check this item
- return bookmark;
- }
- // go into children items
- CPDF_Bookmark child = tree.GetFirstChild(bookmark);
- while (child) {
- // check if this item
- CPDF_Bookmark found = FindBookmark(tree, child, title);
- if (found)
- return found;
- child = tree.GetNextSibling(child);
- }
- return CPDF_Bookmark();
+static CPDF_Bookmark FindBookmark(const CPDF_BookmarkTree& tree,
+ CPDF_Bookmark bookmark,
+ const CFX_WideString& title) {
+ if (bookmark && bookmark.GetTitle().CompareNoCase(title.c_str()) == 0) {
+ // First check this item
+ return bookmark;
+ }
+ // go into children items
+ CPDF_Bookmark child = tree.GetFirstChild(bookmark);
+ while (child) {
+ // check if this item
+ CPDF_Bookmark found = FindBookmark(tree, child, title);
+ if (found)
+ return found;
+ child = tree.GetNextSibling(child);
+ }
+ return CPDF_Bookmark();
}
-DLLEXPORT FPDF_BOOKMARK STDCALL FPDFBookmark_GetFirstChild(FPDF_DOCUMENT document, FPDF_BOOKMARK pDict)
-{
- if (!document)
- return NULL;
- CPDF_Document* pDoc = (CPDF_Document*)document;
- CPDF_BookmarkTree tree(pDoc);
- CPDF_Bookmark bookmark = CPDF_Bookmark((CPDF_Dictionary*)pDict);
- return tree.GetFirstChild(bookmark).GetDict();
+DLLEXPORT FPDF_BOOKMARK STDCALL
+FPDFBookmark_GetFirstChild(FPDF_DOCUMENT document, FPDF_BOOKMARK pDict) {
+ if (!document)
+ return NULL;
+ CPDF_Document* pDoc = (CPDF_Document*)document;
+ CPDF_BookmarkTree tree(pDoc);
+ CPDF_Bookmark bookmark = CPDF_Bookmark((CPDF_Dictionary*)pDict);
+ return tree.GetFirstChild(bookmark).GetDict();
}
-DLLEXPORT FPDF_BOOKMARK STDCALL FPDFBookmark_GetNextSibling(FPDF_DOCUMENT document, FPDF_BOOKMARK pDict)
-{
- if (!document || !pDict)
- return NULL;
- CPDF_Document* pDoc = (CPDF_Document*)document;
- CPDF_BookmarkTree tree(pDoc);
- CPDF_Bookmark bookmark = CPDF_Bookmark((CPDF_Dictionary*)pDict);
- return tree.GetNextSibling(bookmark).GetDict();
+DLLEXPORT FPDF_BOOKMARK STDCALL
+FPDFBookmark_GetNextSibling(FPDF_DOCUMENT document, FPDF_BOOKMARK pDict) {
+ if (!document || !pDict)
+ return NULL;
+ CPDF_Document* pDoc = (CPDF_Document*)document;
+ CPDF_BookmarkTree tree(pDoc);
+ CPDF_Bookmark bookmark = CPDF_Bookmark((CPDF_Dictionary*)pDict);
+ return tree.GetNextSibling(bookmark).GetDict();
}
-DLLEXPORT unsigned long STDCALL FPDFBookmark_GetTitle(FPDF_BOOKMARK pDict, void* buffer, unsigned long buflen)
-{
- if (!pDict)
- return 0;
- CPDF_Bookmark bookmark((CPDF_Dictionary*)pDict);
- CFX_WideString title = bookmark.GetTitle();
- CFX_ByteString encodedTitle = title.UTF16LE_Encode();
- unsigned long len = encodedTitle.GetLength();
- if (buffer && buflen >= len) {
- FXSYS_memcpy(buffer, encodedTitle.c_str(), len);
- }
- return len;
+DLLEXPORT unsigned long STDCALL FPDFBookmark_GetTitle(FPDF_BOOKMARK pDict,
+ void* buffer,
+ unsigned long buflen) {
+ if (!pDict)
+ return 0;
+ CPDF_Bookmark bookmark((CPDF_Dictionary*)pDict);
+ CFX_WideString title = bookmark.GetTitle();
+ CFX_ByteString encodedTitle = title.UTF16LE_Encode();
+ unsigned long len = encodedTitle.GetLength();
+ if (buffer && buflen >= len) {
+ FXSYS_memcpy(buffer, encodedTitle.c_str(), len);
+ }
+ return len;
}
-DLLEXPORT FPDF_BOOKMARK STDCALL FPDFBookmark_Find(FPDF_DOCUMENT document, FPDF_WIDESTRING title)
-{
- if (!document)
- return NULL;
- if (!title || title[0] == 0)
- return NULL;
- CPDF_Document* pDoc = (CPDF_Document*)document;
- CPDF_BookmarkTree tree(pDoc);
- FX_STRSIZE len = CFX_WideString::WStringLength(title);
- CFX_WideString encodedTitle = CFX_WideString::FromUTF16LE(title, len);
- return FindBookmark(tree, CPDF_Bookmark(), encodedTitle).GetDict();
+DLLEXPORT FPDF_BOOKMARK STDCALL FPDFBookmark_Find(FPDF_DOCUMENT document,
+ FPDF_WIDESTRING title) {
+ if (!document)
+ return NULL;
+ if (!title || title[0] == 0)
+ return NULL;
+ CPDF_Document* pDoc = (CPDF_Document*)document;
+ CPDF_BookmarkTree tree(pDoc);
+ FX_STRSIZE len = CFX_WideString::WStringLength(title);
+ CFX_WideString encodedTitle = CFX_WideString::FromUTF16LE(title, len);
+ return FindBookmark(tree, CPDF_Bookmark(), encodedTitle).GetDict();
}
-DLLEXPORT FPDF_DEST STDCALL FPDFBookmark_GetDest(FPDF_DOCUMENT document, FPDF_BOOKMARK pDict)
-{
- if (!document)
- return NULL;
- if (!pDict)
- return NULL;
- CPDF_Bookmark bookmark((CPDF_Dictionary*)pDict);
- CPDF_Document* pDoc = (CPDF_Document*)document;
- CPDF_Dest dest = bookmark.GetDest(pDoc);
- if (dest)
- return dest.GetObject();
- // If this bookmark is not directly associated with a dest, we try to get action
- CPDF_Action action = bookmark.GetAction();
- if (!action)
- return NULL;
- return action.GetDest(pDoc).GetObject();
+DLLEXPORT FPDF_DEST STDCALL FPDFBookmark_GetDest(FPDF_DOCUMENT document,
+ FPDF_BOOKMARK pDict) {
+ if (!document)
+ return NULL;
+ if (!pDict)
+ return NULL;
+ CPDF_Bookmark bookmark((CPDF_Dictionary*)pDict);
+ CPDF_Document* pDoc = (CPDF_Document*)document;
+ CPDF_Dest dest = bookmark.GetDest(pDoc);
+ if (dest)
+ return dest.GetObject();
+ // If this bookmark is not directly associated with a dest, we try to get
+ // action
+ CPDF_Action action = bookmark.GetAction();
+ if (!action)
+ return NULL;
+ return action.GetDest(pDoc).GetObject();
}
-DLLEXPORT FPDF_ACTION STDCALL FPDFBookmark_GetAction(FPDF_BOOKMARK pDict)
-{
- if (!pDict)
- return NULL;
- CPDF_Bookmark bookmark((CPDF_Dictionary*)pDict);
- return bookmark.GetAction().GetDict();
+DLLEXPORT FPDF_ACTION STDCALL FPDFBookmark_GetAction(FPDF_BOOKMARK pDict) {
+ if (!pDict)
+ return NULL;
+ CPDF_Bookmark bookmark((CPDF_Dictionary*)pDict);
+ return bookmark.GetAction().GetDict();
}
-DLLEXPORT unsigned long STDCALL FPDFAction_GetType(FPDF_ACTION pDict)
-{
- if (!pDict)
- return 0;
- CPDF_Action action((CPDF_Dictionary*)pDict);
- CPDF_Action::ActionType type = action.GetType();
- switch (type) {
- case CPDF_Action::GoTo:
- return PDFACTION_GOTO;
- case CPDF_Action::GoToR:
- return PDFACTION_REMOTEGOTO;
- case CPDF_Action::URI:
- return PDFACTION_URI;
- case CPDF_Action::Launch:
- return PDFACTION_LAUNCH;
- default:
- return PDFACTION_UNSUPPORTED;
- }
- return PDFACTION_UNSUPPORTED;
+DLLEXPORT unsigned long STDCALL FPDFAction_GetType(FPDF_ACTION pDict) {
+ if (!pDict)
+ return 0;
+ CPDF_Action action((CPDF_Dictionary*)pDict);
+ CPDF_Action::ActionType type = action.GetType();
+ switch (type) {
+ case CPDF_Action::GoTo:
+ return PDFACTION_GOTO;
+ case CPDF_Action::GoToR:
+ return PDFACTION_REMOTEGOTO;
+ case CPDF_Action::URI:
+ return PDFACTION_URI;
+ case CPDF_Action::Launch:
+ return PDFACTION_LAUNCH;
+ default:
+ return PDFACTION_UNSUPPORTED;
+ }
+ return PDFACTION_UNSUPPORTED;
}
-DLLEXPORT FPDF_DEST STDCALL FPDFAction_GetDest(FPDF_DOCUMENT document, FPDF_ACTION pDict)
-{
- if (!document)
- return NULL;
- if (!pDict)
- return NULL;
- CPDF_Document* pDoc = (CPDF_Document*)document;
- CPDF_Action action((CPDF_Dictionary*)pDict);
- return action.GetDest(pDoc).GetObject();
+DLLEXPORT FPDF_DEST STDCALL FPDFAction_GetDest(FPDF_DOCUMENT document,
+ FPDF_ACTION pDict) {
+ if (!document)
+ return NULL;
+ if (!pDict)
+ return NULL;
+ CPDF_Document* pDoc = (CPDF_Document*)document;
+ CPDF_Action action((CPDF_Dictionary*)pDict);
+ return action.GetDest(pDoc).GetObject();
}
-DLLEXPORT unsigned long STDCALL FPDFAction_GetURIPath(FPDF_DOCUMENT document, FPDF_ACTION pDict,
- void* buffer, unsigned long buflen)
-{
- if (!document)
- return 0;
- if (!pDict)
- return 0;
- CPDF_Document* pDoc = (CPDF_Document*)document;
- CPDF_Action action((CPDF_Dictionary*)pDict);
- CFX_ByteString path = action.GetURI(pDoc);
- unsigned long len = path.GetLength() + 1;
- if (buffer != NULL && buflen >= len)
- FXSYS_memcpy(buffer, path.c_str(), len);
- return len;
+DLLEXPORT unsigned long STDCALL FPDFAction_GetURIPath(FPDF_DOCUMENT document,
+ FPDF_ACTION pDict,
+ void* buffer,
+ unsigned long buflen) {
+ if (!document)
+ return 0;
+ if (!pDict)
+ return 0;
+ CPDF_Document* pDoc = (CPDF_Document*)document;
+ CPDF_Action action((CPDF_Dictionary*)pDict);
+ CFX_ByteString path = action.GetURI(pDoc);
+ unsigned long len = path.GetLength() + 1;
+ if (buffer != NULL && buflen >= len)
+ FXSYS_memcpy(buffer, path.c_str(), len);
+ return len;
}
-DLLEXPORT unsigned long STDCALL FPDFDest_GetPageIndex(FPDF_DOCUMENT document, FPDF_DEST pDict)
-{
- if (!document)
- return 0;
- if (!pDict)
- return 0;
- CPDF_Document* pDoc = (CPDF_Document*)document;
- CPDF_Dest dest((CPDF_Array*)pDict);
- return dest.GetPageIndex(pDoc);
+DLLEXPORT unsigned long STDCALL FPDFDest_GetPageIndex(FPDF_DOCUMENT document,
+ FPDF_DEST pDict) {
+ if (!document)
+ return 0;
+ if (!pDict)
+ return 0;
+ CPDF_Document* pDoc = (CPDF_Document*)document;
+ CPDF_Dest dest((CPDF_Array*)pDict);
+ return dest.GetPageIndex(pDoc);
}
-static void ReleaseLinkList(void* data)
-{
- delete (CPDF_LinkList*)data;
+static void ReleaseLinkList(void* data) {
+ delete (CPDF_LinkList*)data;
}
-DLLEXPORT FPDF_LINK STDCALL FPDFLink_GetLinkAtPoint(FPDF_PAGE page, double x, double y)
-{
- if (!page)
- return NULL;
- CPDF_Page* pPage = (CPDF_Page*)page;
- // Link list is stored with the document
- CPDF_Document* pDoc = pPage->m_pDocument;
- CPDF_LinkList* pLinkList = (CPDF_LinkList*)pDoc->GetPrivateData(&THISMODULE);
- if (!pLinkList) {
- pLinkList = new CPDF_LinkList(pDoc);
- pDoc->SetPrivateData(&THISMODULE, pLinkList, ReleaseLinkList);
- }
- return pLinkList->GetLinkAtPoint(pPage, (FX_FLOAT)x, (FX_FLOAT)y).GetDict();
+DLLEXPORT FPDF_LINK STDCALL FPDFLink_GetLinkAtPoint(FPDF_PAGE page,
+ double x,
+ double y) {
+ if (!page)
+ return NULL;
+ CPDF_Page* pPage = (CPDF_Page*)page;
+ // Link list is stored with the document
+ CPDF_Document* pDoc = pPage->m_pDocument;
+ CPDF_LinkList* pLinkList = (CPDF_LinkList*)pDoc->GetPrivateData(&THISMODULE);
+ if (!pLinkList) {
+ pLinkList = new CPDF_LinkList(pDoc);
+ pDoc->SetPrivateData(&THISMODULE, pLinkList, ReleaseLinkList);
+ }
+ return pLinkList->GetLinkAtPoint(pPage, (FX_FLOAT)x, (FX_FLOAT)y).GetDict();
}
-DLLEXPORT FPDF_DEST STDCALL FPDFLink_GetDest(FPDF_DOCUMENT document, FPDF_LINK pDict)
-{
- if (!document)
- return NULL;
- if (!pDict)
- return NULL;
- CPDF_Document* pDoc = (CPDF_Document*)document;
- CPDF_Link link((CPDF_Dictionary*)pDict);
- FPDF_DEST dest = link.GetDest(pDoc).GetObject();
- if (dest)
- return dest;
- // If this link is not directly associated with a dest, we try to get action
- CPDF_Action action = link.GetAction();
- if (!action)
- return NULL;
- return action.GetDest(pDoc).GetObject();
+DLLEXPORT FPDF_DEST STDCALL FPDFLink_GetDest(FPDF_DOCUMENT document,
+ FPDF_LINK pDict) {
+ if (!document)
+ return NULL;
+ if (!pDict)
+ return NULL;
+ CPDF_Document* pDoc = (CPDF_Document*)document;
+ CPDF_Link link((CPDF_Dictionary*)pDict);
+ FPDF_DEST dest = link.GetDest(pDoc).GetObject();
+ if (dest)
+ return dest;
+ // If this link is not directly associated with a dest, we try to get action
+ CPDF_Action action = link.GetAction();
+ if (!action)
+ return NULL;
+ return action.GetDest(pDoc).GetObject();
}
-DLLEXPORT FPDF_ACTION STDCALL FPDFLink_GetAction(FPDF_LINK pDict)
-{
- if (!pDict)
- return NULL;
- CPDF_Link link((CPDF_Dictionary*)pDict);
- return link.GetAction().GetDict();
+DLLEXPORT FPDF_ACTION STDCALL FPDFLink_GetAction(FPDF_LINK pDict) {
+ if (!pDict)
+ return NULL;
+ CPDF_Link link((CPDF_Dictionary*)pDict);
+ return link.GetAction().GetDict();
}
-DLLEXPORT FPDF_BOOL STDCALL FPDFLink_Enumerate(FPDF_PAGE page, int* startPos, FPDF_LINK* linkAnnot)
-{
- if(!page || !startPos || !linkAnnot)
- return FALSE;
- CPDF_Page* pPage = (CPDF_Page*)page;
- if(!pPage->m_pFormDict)
- return FALSE;
- CPDF_Array* pAnnots = pPage->m_pFormDict->GetArray("Annots");
- if(!pAnnots)
- return FALSE;
- for (int i = *startPos; i < (int)pAnnots->GetCount(); i++) {
- CPDF_Dictionary* pDict = (CPDF_Dictionary*)pAnnots->GetElementValue(i);
- if (!pDict || pDict->GetType() != PDFOBJ_DICTIONARY)
- continue;
- if(pDict->GetString(FX_BSTRC("Subtype")).Equal(FX_BSTRC("Link"))) {
- *startPos = i + 1;
- *linkAnnot = (FPDF_LINK)pDict;
- return TRUE;
- }
- }
+DLLEXPORT FPDF_BOOL STDCALL FPDFLink_Enumerate(FPDF_PAGE page,
+ int* startPos,
+ FPDF_LINK* linkAnnot) {
+ if (!page || !startPos || !linkAnnot)
+ return FALSE;
+ CPDF_Page* pPage = (CPDF_Page*)page;
+ if (!pPage->m_pFormDict)
return FALSE;
+ CPDF_Array* pAnnots = pPage->m_pFormDict->GetArray("Annots");
+ if (!pAnnots)
+ return FALSE;
+ for (int i = *startPos; i < (int)pAnnots->GetCount(); i++) {
+ CPDF_Dictionary* pDict = (CPDF_Dictionary*)pAnnots->GetElementValue(i);
+ if (!pDict || pDict->GetType() != PDFOBJ_DICTIONARY)
+ continue;
+ if (pDict->GetString(FX_BSTRC("Subtype")).Equal(FX_BSTRC("Link"))) {
+ *startPos = i + 1;
+ *linkAnnot = (FPDF_LINK)pDict;
+ return TRUE;
+ }
+ }
+ return FALSE;
}
-DLLEXPORT FPDF_BOOL STDCALL FPDFLink_GetAnnotRect(FPDF_LINK linkAnnot, FS_RECTF* rect)
-{
- if(!linkAnnot || !rect)
- return FALSE;
- CPDF_Dictionary* pAnnotDict = (CPDF_Dictionary*)linkAnnot;
- CPDF_Rect rt = pAnnotDict->GetRect(FX_BSTRC("Rect"));
- rect->left = rt.left;
- rect->bottom = rt.bottom;
- rect->right = rt.right;
- rect->top = rt.top;
- return TRUE;
+DLLEXPORT FPDF_BOOL STDCALL FPDFLink_GetAnnotRect(FPDF_LINK linkAnnot,
+ FS_RECTF* rect) {
+ if (!linkAnnot || !rect)
+ return FALSE;
+ CPDF_Dictionary* pAnnotDict = (CPDF_Dictionary*)linkAnnot;
+ CPDF_Rect rt = pAnnotDict->GetRect(FX_BSTRC("Rect"));
+ rect->left = rt.left;
+ rect->bottom = rt.bottom;
+ rect->right = rt.right;
+ rect->top = rt.top;
+ return TRUE;
}
-DLLEXPORT int STDCALL FPDFLink_CountQuadPoints(FPDF_LINK linkAnnot)
-{
- if(!linkAnnot)
- return 0;
- CPDF_Dictionary* pAnnotDict = (CPDF_Dictionary*)linkAnnot;
- CPDF_Array* pArray = pAnnotDict->GetArray(FX_BSTRC("QuadPoints"));
- if (!pArray)
- return 0;
- return pArray->GetCount() / 8;
+DLLEXPORT int STDCALL FPDFLink_CountQuadPoints(FPDF_LINK linkAnnot) {
+ if (!linkAnnot)
+ return 0;
+ CPDF_Dictionary* pAnnotDict = (CPDF_Dictionary*)linkAnnot;
+ CPDF_Array* pArray = pAnnotDict->GetArray(FX_BSTRC("QuadPoints"));
+ if (!pArray)
+ return 0;
+ return pArray->GetCount() / 8;
}
-DLLEXPORT FPDF_BOOL STDCALL FPDFLink_GetQuadPoints(FPDF_LINK linkAnnot, int quadIndex, FS_QUADPOINTSF* quadPoints)
-{
- if(!linkAnnot || !quadPoints)
- return FALSE;
- CPDF_Dictionary* pAnnotDict = (CPDF_Dictionary*)linkAnnot;
- CPDF_Array* pArray = pAnnotDict->GetArray(FX_BSTRC("QuadPoints"));
- if (pArray) {
- if (quadIndex < 0 || quadIndex >= (int)pArray->GetCount()/8 || ((quadIndex*8+7) >= (int)pArray->GetCount()))
- return FALSE;
- quadPoints->x1 = pArray->GetNumber(quadIndex*8);
- quadPoints->y1 = pArray->GetNumber(quadIndex*8+1);
- quadPoints->x2 = pArray->GetNumber(quadIndex*8+2);
- quadPoints->y2 = pArray->GetNumber(quadIndex*8+3);
- quadPoints->x3 = pArray->GetNumber(quadIndex*8+4);
- quadPoints->y3 = pArray->GetNumber(quadIndex*8+5);
- quadPoints->x4 = pArray->GetNumber(quadIndex*8+6);
- quadPoints->y4 = pArray->GetNumber(quadIndex*8+7);
- return TRUE;
- }
+DLLEXPORT FPDF_BOOL STDCALL FPDFLink_GetQuadPoints(FPDF_LINK linkAnnot,
+ int quadIndex,
+ FS_QUADPOINTSF* quadPoints) {
+ if (!linkAnnot || !quadPoints)
return FALSE;
+ CPDF_Dictionary* pAnnotDict = (CPDF_Dictionary*)linkAnnot;
+ CPDF_Array* pArray = pAnnotDict->GetArray(FX_BSTRC("QuadPoints"));
+ if (pArray) {
+ if (quadIndex < 0 || quadIndex >= (int)pArray->GetCount() / 8 ||
+ ((quadIndex * 8 + 7) >= (int)pArray->GetCount()))
+ return FALSE;
+ quadPoints->x1 = pArray->GetNumber(quadIndex * 8);
+ quadPoints->y1 = pArray->GetNumber(quadIndex * 8 + 1);
+ quadPoints->x2 = pArray->GetNumber(quadIndex * 8 + 2);
+ quadPoints->y2 = pArray->GetNumber(quadIndex * 8 + 3);
+ quadPoints->x3 = pArray->GetNumber(quadIndex * 8 + 4);
+ quadPoints->y3 = pArray->GetNumber(quadIndex * 8 + 5);
+ quadPoints->x4 = pArray->GetNumber(quadIndex * 8 + 6);
+ quadPoints->y4 = pArray->GetNumber(quadIndex * 8 + 7);
+ return TRUE;
+ }
+ return FALSE;
}
-DLLEXPORT unsigned long STDCALL FPDF_GetMetaText(FPDF_DOCUMENT doc, FPDF_BYTESTRING tag,
- void* buffer, unsigned long buflen)
-{
- if (!doc || !tag)
- return 0;
- CPDF_Document* pDoc = (CPDF_Document*)doc;
- // Get info dictionary
- CPDF_Dictionary* pInfo = pDoc->GetInfo();
- if (!pInfo)
- return 0;
- CFX_WideString text = pInfo->GetUnicodeText(tag);
- // Use UTF-16LE encoding
- CFX_ByteString encodedText = text.UTF16LE_Encode();
- unsigned long len = encodedText.GetLength();
- if (buffer && buflen >= len) {
- FXSYS_memcpy(buffer, encodedText.c_str(), len);
- }
- return len;
+DLLEXPORT unsigned long STDCALL FPDF_GetMetaText(FPDF_DOCUMENT doc,
+ FPDF_BYTESTRING tag,
+ void* buffer,
+ unsigned long buflen) {
+ if (!doc || !tag)
+ return 0;
+ CPDF_Document* pDoc = (CPDF_Document*)doc;
+ // Get info dictionary
+ CPDF_Dictionary* pInfo = pDoc->GetInfo();
+ if (!pInfo)
+ return 0;
+ CFX_WideString text = pInfo->GetUnicodeText(tag);
+ // Use UTF-16LE encoding
+ CFX_ByteString encodedText = text.UTF16LE_Encode();
+ unsigned long len = encodedText.GetLength();
+ if (buffer && buflen >= len) {
+ FXSYS_memcpy(buffer, encodedText.c_str(), len);
+ }
+ return len;
}
diff --git a/fpdfsdk/src/fpdfdoc_embeddertest.cpp b/fpdfsdk/src/fpdfdoc_embeddertest.cpp
index 1f11bef214..9c9fac8d15 100644
--- a/fpdfsdk/src/fpdfdoc_embeddertest.cpp
+++ b/fpdfsdk/src/fpdfdoc_embeddertest.cpp
@@ -7,8 +7,7 @@
#include "../../testing/embedder_test.h"
#include "testing/gtest/include/gtest/gtest.h"
-class FPDFDocEmbeddertest : public EmbedderTest {
-};
+class FPDFDocEmbeddertest : public EmbedderTest {};
TEST_F(FPDFDocEmbeddertest, DestGetPageIndex) {
EXPECT_TRUE(OpenDocument("testing/resources/named_dests.pdf"));
diff --git a/fpdfsdk/src/fpdfeditimg.cpp b/fpdfsdk/src/fpdfeditimg.cpp
index 96cfba4194..3b5272cace 100644
--- a/fpdfsdk/src/fpdfeditimg.cpp
+++ b/fpdfsdk/src/fpdfeditimg.cpp
@@ -7,67 +7,71 @@
#include "../../public/fpdf_edit.h"
#include "../include/fsdk_define.h"
-
-DLLEXPORT FPDF_PAGEOBJECT STDCALL FPDFPageObj_NewImgeObj(FPDF_DOCUMENT document)
-{
- if (!document)
- return NULL;
- CPDF_ImageObject* pImageObj = new CPDF_ImageObject;
- CPDF_Image* pImg = new CPDF_Image((CPDF_Document *)document);
- pImageObj->m_pImage = pImg;
- return pImageObj;
+DLLEXPORT FPDF_PAGEOBJECT STDCALL
+FPDFPageObj_NewImgeObj(FPDF_DOCUMENT document) {
+ if (!document)
+ return NULL;
+ CPDF_ImageObject* pImageObj = new CPDF_ImageObject;
+ CPDF_Image* pImg = new CPDF_Image((CPDF_Document*)document);
+ pImageObj->m_pImage = pImg;
+ return pImageObj;
}
-DLLEXPORT FPDF_BOOL STDCALL FPDFImageObj_LoadJpegFile(FPDF_PAGE* pages, int nCount,FPDF_PAGEOBJECT image_object, FPDF_FILEACCESS* fileAccess)
-{
- if (!image_object || !fileAccess)
- return FALSE;
+DLLEXPORT FPDF_BOOL STDCALL
+FPDFImageObj_LoadJpegFile(FPDF_PAGE* pages,
+ int nCount,
+ FPDF_PAGEOBJECT image_object,
+ FPDF_FILEACCESS* fileAccess) {
+ if (!image_object || !fileAccess)
+ return FALSE;
- IFX_FileRead* pFile = new CPDF_CustomAccess(fileAccess);
- CPDF_ImageObject* pImgObj = (CPDF_ImageObject*)image_object;
- pImgObj->m_GeneralState.GetModify();
- for (int index=0;index<nCount;index++)
- {
- CPDF_Page* pPage = (CPDF_Page*)pages[index];
- pImgObj->m_pImage->ResetCache(pPage,NULL);
- }
- pImgObj->m_pImage->SetJpegImage(pFile);
+ IFX_FileRead* pFile = new CPDF_CustomAccess(fileAccess);
+ CPDF_ImageObject* pImgObj = (CPDF_ImageObject*)image_object;
+ pImgObj->m_GeneralState.GetModify();
+ for (int index = 0; index < nCount; index++) {
+ CPDF_Page* pPage = (CPDF_Page*)pages[index];
+ pImgObj->m_pImage->ResetCache(pPage, NULL);
+ }
+ pImgObj->m_pImage->SetJpegImage(pFile);
- return TRUE;
+ return TRUE;
}
-
-DLLEXPORT FPDF_BOOL STDCALL FPDFImageObj_SetMatrix (FPDF_PAGEOBJECT image_object,
- double a, double b, double c, double d, double e, double f)
-{
- if (!image_object)
- return FALSE;
- CPDF_ImageObject* pImgObj = (CPDF_ImageObject*)image_object;
- pImgObj->m_Matrix.a = (FX_FLOAT)a;
- pImgObj->m_Matrix.b = (FX_FLOAT)b;
- pImgObj->m_Matrix.c = (FX_FLOAT)c;
- pImgObj->m_Matrix.d = (FX_FLOAT)d;
- pImgObj->m_Matrix.e = (FX_FLOAT)e;
- pImgObj->m_Matrix.f = (FX_FLOAT)f;
- pImgObj->CalcBoundingBox();
- return TRUE;
+DLLEXPORT FPDF_BOOL STDCALL FPDFImageObj_SetMatrix(FPDF_PAGEOBJECT image_object,
+ double a,
+ double b,
+ double c,
+ double d,
+ double e,
+ double f) {
+ if (!image_object)
+ return FALSE;
+ CPDF_ImageObject* pImgObj = (CPDF_ImageObject*)image_object;
+ pImgObj->m_Matrix.a = (FX_FLOAT)a;
+ pImgObj->m_Matrix.b = (FX_FLOAT)b;
+ pImgObj->m_Matrix.c = (FX_FLOAT)c;
+ pImgObj->m_Matrix.d = (FX_FLOAT)d;
+ pImgObj->m_Matrix.e = (FX_FLOAT)e;
+ pImgObj->m_Matrix.f = (FX_FLOAT)f;
+ pImgObj->CalcBoundingBox();
+ return TRUE;
}
-DLLEXPORT FPDF_BOOL STDCALL FPDFImageObj_SetBitmap(FPDF_PAGE* pages,int nCount,FPDF_PAGEOBJECT image_object,FPDF_BITMAP bitmap)
-{
- if (!image_object || !bitmap)
- return FALSE;
- CFX_DIBitmap* pBmp = NULL;
- pBmp = (CFX_DIBitmap*)bitmap;
- CPDF_ImageObject* pImgObj = (CPDF_ImageObject*)image_object;
- pImgObj->m_GeneralState.GetModify();
- for (int index=0;index<nCount;index++)
- {
- CPDF_Page* pPage = (CPDF_Page*)pages[index];
- pImgObj->m_pImage->ResetCache(pPage,NULL);
- }
- pImgObj->m_pImage->SetImage(pBmp,FALSE);
- pImgObj->CalcBoundingBox();
- return TRUE;
+DLLEXPORT FPDF_BOOL STDCALL FPDFImageObj_SetBitmap(FPDF_PAGE* pages,
+ int nCount,
+ FPDF_PAGEOBJECT image_object,
+ FPDF_BITMAP bitmap) {
+ if (!image_object || !bitmap)
+ return FALSE;
+ CFX_DIBitmap* pBmp = NULL;
+ pBmp = (CFX_DIBitmap*)bitmap;
+ CPDF_ImageObject* pImgObj = (CPDF_ImageObject*)image_object;
+ pImgObj->m_GeneralState.GetModify();
+ for (int index = 0; index < nCount; index++) {
+ CPDF_Page* pPage = (CPDF_Page*)pages[index];
+ pImgObj->m_pImage->ResetCache(pPage, NULL);
+ }
+ pImgObj->m_pImage->SetImage(pBmp, FALSE);
+ pImgObj->CalcBoundingBox();
+ return TRUE;
}
-
diff --git a/fpdfsdk/src/fpdfeditpage.cpp b/fpdfsdk/src/fpdfeditpage.cpp
index 12c2cce1e2..0219c9ca7e 100644
--- a/fpdfsdk/src/fpdfeditpage.cpp
+++ b/fpdfsdk/src/fpdfeditpage.cpp
@@ -7,315 +7,321 @@
#include "../../public/fpdf_edit.h"
#include "../include/fsdk_define.h"
-
#if _FX_OS_ == _FX_ANDROID_
#include "time.h"
#else
#include <ctime>
#endif
-DLLEXPORT FPDF_DOCUMENT STDCALL FPDF_CreateNewDocument()
-{
- CPDF_Document* pDoc = new CPDF_Document;
- pDoc->CreateNewDoc();
- time_t currentTime;
-
- CFX_ByteString DateStr;
-
- if(FSDK_IsSandBoxPolicyEnabled(FPDF_POLICY_MACHINETIME_ACCESS))
- {
- if ( -1 != time( &currentTime ) )
- {
- tm * pTM = localtime( &currentTime );
- if ( pTM )
- {
- DateStr.Format( "D:%04d%02d%02d%02d%02d%02d", pTM->tm_year+1900, pTM->tm_mon+1,
- pTM->tm_mday, pTM->tm_hour, pTM->tm_min, pTM->tm_sec );
- }
- }
- }
-
- CPDF_Dictionary* pInfoDict = NULL;
- pInfoDict = pDoc->GetInfo();
- if (pInfoDict)
- {
- if(FSDK_IsSandBoxPolicyEnabled(FPDF_POLICY_MACHINETIME_ACCESS))
- pInfoDict->SetAt("CreationDate", new CPDF_String(DateStr));
- pInfoDict->SetAt("Creator", new CPDF_String(L"PDFium"));
- }
-
- return pDoc;
+DLLEXPORT FPDF_DOCUMENT STDCALL FPDF_CreateNewDocument() {
+ CPDF_Document* pDoc = new CPDF_Document;
+ pDoc->CreateNewDoc();
+ time_t currentTime;
+
+ CFX_ByteString DateStr;
+
+ if (FSDK_IsSandBoxPolicyEnabled(FPDF_POLICY_MACHINETIME_ACCESS)) {
+ if (-1 != time(&currentTime)) {
+ tm* pTM = localtime(&currentTime);
+ if (pTM) {
+ DateStr.Format("D:%04d%02d%02d%02d%02d%02d", pTM->tm_year + 1900,
+ pTM->tm_mon + 1, pTM->tm_mday, pTM->tm_hour, pTM->tm_min,
+ pTM->tm_sec);
+ }
+ }
+ }
+
+ CPDF_Dictionary* pInfoDict = NULL;
+ pInfoDict = pDoc->GetInfo();
+ if (pInfoDict) {
+ if (FSDK_IsSandBoxPolicyEnabled(FPDF_POLICY_MACHINETIME_ACCESS))
+ pInfoDict->SetAt("CreationDate", new CPDF_String(DateStr));
+ pInfoDict->SetAt("Creator", new CPDF_String(L"PDFium"));
+ }
+
+ return pDoc;
}
-DLLEXPORT void STDCALL FPDFPage_Delete(FPDF_DOCUMENT document, int page_index)
-{
- CPDF_Document* pDoc = (CPDF_Document*)document;
- if (pDoc == NULL)
- return;
- if (page_index < 0 || page_index >= pDoc->GetPageCount())
- return;
+DLLEXPORT void STDCALL FPDFPage_Delete(FPDF_DOCUMENT document, int page_index) {
+ CPDF_Document* pDoc = (CPDF_Document*)document;
+ if (pDoc == NULL)
+ return;
+ if (page_index < 0 || page_index >= pDoc->GetPageCount())
+ return;
- pDoc->DeletePage(page_index);
+ pDoc->DeletePage(page_index);
}
-DLLEXPORT FPDF_PAGE STDCALL FPDFPage_New(FPDF_DOCUMENT document, int page_index, double width, double height)
-{
- if (!document)
- return NULL;
-
-// CPDF_Parser* pParser = (CPDF_Parser*)document;
- CPDF_Document* pDoc = (CPDF_Document*)document;
- if(page_index < 0)
- page_index = 0;
- if(pDoc->GetPageCount()<page_index)
- page_index = pDoc->GetPageCount();
-// if (page_index < 0 || page_index >= pDoc->GetPageCount())
-// return NULL;
-
- CPDF_Dictionary* pPageDict = pDoc->CreateNewPage(page_index);
- if(!pPageDict)
- return NULL;
- CPDF_Array* pMediaBoxArray = new CPDF_Array;
- pMediaBoxArray->Add(new CPDF_Number(0));
- pMediaBoxArray->Add(new CPDF_Number(0));
- pMediaBoxArray->Add(new CPDF_Number(FX_FLOAT(width)));
- pMediaBoxArray->Add(new CPDF_Number(FX_FLOAT(height)));
-
- pPageDict->SetAt("MediaBox", pMediaBoxArray);
- pPageDict->SetAt("Rotate", new CPDF_Number(0));
- pPageDict->SetAt("Resources", new CPDF_Dictionary);
-
- CPDF_Page* pPage = new CPDF_Page;
- pPage->Load(pDoc,pPageDict);
- pPage->ParseContent();
-
- return pPage;
+DLLEXPORT FPDF_PAGE STDCALL FPDFPage_New(FPDF_DOCUMENT document,
+ int page_index,
+ double width,
+ double height) {
+ if (!document)
+ return NULL;
+
+ // CPDF_Parser* pParser = (CPDF_Parser*)document;
+ CPDF_Document* pDoc = (CPDF_Document*)document;
+ if (page_index < 0)
+ page_index = 0;
+ if (pDoc->GetPageCount() < page_index)
+ page_index = pDoc->GetPageCount();
+ // if (page_index < 0 || page_index >= pDoc->GetPageCount())
+ // return NULL;
+
+ CPDF_Dictionary* pPageDict = pDoc->CreateNewPage(page_index);
+ if (!pPageDict)
+ return NULL;
+ CPDF_Array* pMediaBoxArray = new CPDF_Array;
+ pMediaBoxArray->Add(new CPDF_Number(0));
+ pMediaBoxArray->Add(new CPDF_Number(0));
+ pMediaBoxArray->Add(new CPDF_Number(FX_FLOAT(width)));
+ pMediaBoxArray->Add(new CPDF_Number(FX_FLOAT(height)));
+
+ pPageDict->SetAt("MediaBox", pMediaBoxArray);
+ pPageDict->SetAt("Rotate", new CPDF_Number(0));
+ pPageDict->SetAt("Resources", new CPDF_Dictionary);
+
+ CPDF_Page* pPage = new CPDF_Page;
+ pPage->Load(pDoc, pPageDict);
+ pPage->ParseContent();
+
+ return pPage;
}
-DLLEXPORT int STDCALL FPDFPage_GetRotation(FPDF_PAGE page)
-{
- CPDF_Page* pPage = (CPDF_Page*)page;
- if (!pPage || !pPage->m_pFormDict || !pPage->m_pFormDict->KeyExist("Type") || !pPage->m_pFormDict->GetElement("Type")->GetDirect()
- || pPage->m_pFormDict->GetElement("Type")->GetDirect()->GetString().Compare("Page"))
- {
- return -1;
- }
- CPDF_Dictionary* pDict = pPage->m_pFormDict;
-
- int rotate = 0;
- if(pDict != NULL)
- {
- if (pDict->KeyExist("Rotate"))
- rotate = pDict->GetElement("Rotate")->GetDirect()? pDict->GetElement("Rotate")->GetDirect()->GetInteger() / 90 : 0;
- else
- {
- if(pDict->KeyExist("Parent"))
- {
- CPDF_Dictionary* pPages = (CPDF_Dictionary*)pDict->GetElement("Parent")->GetDirect();
- while(pPages)
- {
- if(pPages->KeyExist("Rotate"))
- {
- rotate = pPages->GetElement("Rotate")->GetDirect()? pPages->GetElement("Rotate")->GetDirect()->GetInteger() / 90 : 0;
- break;
- }
- else if(pPages->KeyExist("Parent"))
- pPages = (CPDF_Dictionary*)pPages->GetElement("Parent")->GetDirect();
- else break;
- }
- }
- }
- }
- else
- {
- return -1;
- }
-
- return rotate;
+DLLEXPORT int STDCALL FPDFPage_GetRotation(FPDF_PAGE page) {
+ CPDF_Page* pPage = (CPDF_Page*)page;
+ if (!pPage || !pPage->m_pFormDict || !pPage->m_pFormDict->KeyExist("Type") ||
+ !pPage->m_pFormDict->GetElement("Type")->GetDirect() ||
+ pPage->m_pFormDict->GetElement("Type")->GetDirect()->GetString().Compare(
+ "Page")) {
+ return -1;
+ }
+ CPDF_Dictionary* pDict = pPage->m_pFormDict;
+
+ int rotate = 0;
+ if (pDict != NULL) {
+ if (pDict->KeyExist("Rotate"))
+ rotate = pDict->GetElement("Rotate")->GetDirect()
+ ? pDict->GetElement("Rotate")->GetDirect()->GetInteger() / 90
+ : 0;
+ else {
+ if (pDict->KeyExist("Parent")) {
+ CPDF_Dictionary* pPages =
+ (CPDF_Dictionary*)pDict->GetElement("Parent")->GetDirect();
+ while (pPages) {
+ if (pPages->KeyExist("Rotate")) {
+ rotate =
+ pPages->GetElement("Rotate")->GetDirect()
+ ? pPages->GetElement("Rotate")->GetDirect()->GetInteger() /
+ 90
+ : 0;
+ break;
+ } else if (pPages->KeyExist("Parent"))
+ pPages =
+ (CPDF_Dictionary*)pPages->GetElement("Parent")->GetDirect();
+ else
+ break;
+ }
+ }
+ }
+ } else {
+ return -1;
+ }
+
+ return rotate;
}
-DLLEXPORT void STDCALL FPDFPage_InsertObject(FPDF_PAGE page, FPDF_PAGEOBJECT page_obj)
-{
- CPDF_Page* pPage = (CPDF_Page*)page;
- if (!pPage || !pPage->m_pFormDict || !pPage->m_pFormDict->KeyExist("Type") || !pPage->m_pFormDict->GetElement("Type")->GetDirect()
- || pPage->m_pFormDict->GetElement("Type")->GetDirect()->GetString().Compare("Page"))
- {
- return;
- }
- CPDF_PageObject* pPageObj = (CPDF_PageObject*)page_obj;
- if(pPageObj == NULL)
- return;
- FX_POSITION LastPersition = pPage->GetLastObjectPosition();
-
- pPage->InsertObject(LastPersition, pPageObj);
- switch(pPageObj->m_Type)
- {
- case FPDF_PAGEOBJ_PATH:
- {
- CPDF_PathObject* pPathObj = (CPDF_PathObject*)pPageObj;
- pPathObj->CalcBoundingBox();
- break;
- }
- case FPDF_PAGEOBJ_TEXT:
- {
- // CPDF_PathObject* pPathObj = (CPDF_PathObject*)pPageObj;
- // pPathObj->CalcBoundingBox();
- break;
- }
- case FPDF_PAGEOBJ_IMAGE:
- {
- CPDF_ImageObject* pImageObj = (CPDF_ImageObject*)pPageObj;
- pImageObj->CalcBoundingBox();
- break;
- }
- case FPDF_PAGEOBJ_SHADING:
- {
- CPDF_ShadingObject* pShadingObj = (CPDF_ShadingObject*)pPageObj;
- pShadingObj->CalcBoundingBox();
- break;
- }
- case FPDF_PAGEOBJ_FORM:
- {
- CPDF_FormObject* pFormObj = (CPDF_FormObject*)pPageObj;
- pFormObj->CalcBoundingBox();
- break;
- }
- default:
- break;
- }
-
- // pPage->ParseContent();
- //pPage->GenerateContent();
-
+DLLEXPORT void STDCALL FPDFPage_InsertObject(FPDF_PAGE page,
+ FPDF_PAGEOBJECT page_obj) {
+ CPDF_Page* pPage = (CPDF_Page*)page;
+ if (!pPage || !pPage->m_pFormDict || !pPage->m_pFormDict->KeyExist("Type") ||
+ !pPage->m_pFormDict->GetElement("Type")->GetDirect() ||
+ pPage->m_pFormDict->GetElement("Type")->GetDirect()->GetString().Compare(
+ "Page")) {
+ return;
+ }
+ CPDF_PageObject* pPageObj = (CPDF_PageObject*)page_obj;
+ if (pPageObj == NULL)
+ return;
+ FX_POSITION LastPersition = pPage->GetLastObjectPosition();
+
+ pPage->InsertObject(LastPersition, pPageObj);
+ switch (pPageObj->m_Type) {
+ case FPDF_PAGEOBJ_PATH: {
+ CPDF_PathObject* pPathObj = (CPDF_PathObject*)pPageObj;
+ pPathObj->CalcBoundingBox();
+ break;
+ }
+ case FPDF_PAGEOBJ_TEXT: {
+ // CPDF_PathObject* pPathObj = (CPDF_PathObject*)pPageObj;
+ // pPathObj->CalcBoundingBox();
+ break;
+ }
+ case FPDF_PAGEOBJ_IMAGE: {
+ CPDF_ImageObject* pImageObj = (CPDF_ImageObject*)pPageObj;
+ pImageObj->CalcBoundingBox();
+ break;
+ }
+ case FPDF_PAGEOBJ_SHADING: {
+ CPDF_ShadingObject* pShadingObj = (CPDF_ShadingObject*)pPageObj;
+ pShadingObj->CalcBoundingBox();
+ break;
+ }
+ case FPDF_PAGEOBJ_FORM: {
+ CPDF_FormObject* pFormObj = (CPDF_FormObject*)pPageObj;
+ pFormObj->CalcBoundingBox();
+ break;
+ }
+ default:
+ break;
+ }
+
+ // pPage->ParseContent();
+ // pPage->GenerateContent();
}
-DLLEXPORT int STDCALL FPDFPage_CountObject(FPDF_PAGE page)
-{
- CPDF_Page* pPage = (CPDF_Page*)page;
- if (!pPage || !pPage->m_pFormDict || !pPage->m_pFormDict->KeyExist("Type") || !pPage->m_pFormDict->GetElement("Type")->GetDirect()
- || pPage->m_pFormDict->GetElement("Type")->GetDirect()->GetString().Compare("Page"))
- {
- return -1;
- }
- return pPage->CountObjects();
-// return 0;
+DLLEXPORT int STDCALL FPDFPage_CountObject(FPDF_PAGE page) {
+ CPDF_Page* pPage = (CPDF_Page*)page;
+ if (!pPage || !pPage->m_pFormDict || !pPage->m_pFormDict->KeyExist("Type") ||
+ !pPage->m_pFormDict->GetElement("Type")->GetDirect() ||
+ pPage->m_pFormDict->GetElement("Type")->GetDirect()->GetString().Compare(
+ "Page")) {
+ return -1;
+ }
+ return pPage->CountObjects();
+ // return 0;
}
-DLLEXPORT FPDF_PAGEOBJECT STDCALL FPDFPage_GetObject(FPDF_PAGE page, int index)
-{
- CPDF_Page* pPage = (CPDF_Page*)page;
- if (!pPage || !pPage->m_pFormDict || !pPage->m_pFormDict->KeyExist("Type")
- || pPage->m_pFormDict->GetElement("Type")->GetDirect()->GetString().Compare("Page"))
- {
- return NULL;
- }
- return pPage->GetObjectByIndex(index);
-// return NULL;
+DLLEXPORT FPDF_PAGEOBJECT STDCALL FPDFPage_GetObject(FPDF_PAGE page,
+ int index) {
+ CPDF_Page* pPage = (CPDF_Page*)page;
+ if (!pPage || !pPage->m_pFormDict || !pPage->m_pFormDict->KeyExist("Type") ||
+ pPage->m_pFormDict->GetElement("Type")->GetDirect()->GetString().Compare(
+ "Page")) {
+ return NULL;
+ }
+ return pPage->GetObjectByIndex(index);
+ // return NULL;
}
-DLLEXPORT FPDF_BOOL STDCALL FPDFPage_HasTransparency(FPDF_PAGE page)
-{
- if(!page) return FALSE;
- CPDF_Page* pPage = (CPDF_Page*)page;
+DLLEXPORT FPDF_BOOL STDCALL FPDFPage_HasTransparency(FPDF_PAGE page) {
+ if (!page)
+ return FALSE;
+ CPDF_Page* pPage = (CPDF_Page*)page;
- return pPage->BackgroundAlphaNeeded();
+ return pPage->BackgroundAlphaNeeded();
}
-DLLEXPORT FPDF_BOOL STDCALL FPDFPageObj_HasTransparency(FPDF_PAGEOBJECT pageObject)
-{
- if(!pageObject) return FALSE;
- CPDF_PageObject* pPageObj = (CPDF_PageObject*)pageObject;
-
- const CPDF_GeneralStateData* pGeneralState = pPageObj->m_GeneralState;
- int blend_type = pGeneralState ? pGeneralState->m_BlendType : FXDIB_BLEND_NORMAL;
- if (blend_type != FXDIB_BLEND_NORMAL) return TRUE;
-
- CPDF_Dictionary* pSMaskDict = pGeneralState ? (CPDF_Dictionary*)pGeneralState->m_pSoftMask : NULL;
- if(pSMaskDict) return TRUE;
-
- if(pGeneralState && pGeneralState->m_FillAlpha != 1.0f)
- return TRUE;
-
- if(pPageObj->m_Type == PDFPAGE_PATH)
- {
- if(pGeneralState && pGeneralState->m_StrokeAlpha != 1.0f)
- return TRUE;
- }
-
- if(pPageObj->m_Type == PDFPAGE_FORM)
- {
- CPDF_FormObject* pFormObj = (CPDF_FormObject*)pPageObj;
- if(pFormObj->m_pForm && (pFormObj->m_pForm->m_Transparency & PDFTRANS_ISOLATED))
- return TRUE;
- if(pFormObj->m_pForm && (!(pFormObj->m_pForm->m_Transparency & PDFTRANS_ISOLATED) && (pFormObj->m_pForm->m_Transparency & PDFTRANS_GROUP)))
- return TRUE;
- }
- return FALSE;
+DLLEXPORT FPDF_BOOL STDCALL
+FPDFPageObj_HasTransparency(FPDF_PAGEOBJECT pageObject) {
+ if (!pageObject)
+ return FALSE;
+ CPDF_PageObject* pPageObj = (CPDF_PageObject*)pageObject;
+
+ const CPDF_GeneralStateData* pGeneralState = pPageObj->m_GeneralState;
+ int blend_type =
+ pGeneralState ? pGeneralState->m_BlendType : FXDIB_BLEND_NORMAL;
+ if (blend_type != FXDIB_BLEND_NORMAL)
+ return TRUE;
+
+ CPDF_Dictionary* pSMaskDict =
+ pGeneralState ? (CPDF_Dictionary*)pGeneralState->m_pSoftMask : NULL;
+ if (pSMaskDict)
+ return TRUE;
+
+ if (pGeneralState && pGeneralState->m_FillAlpha != 1.0f)
+ return TRUE;
+
+ if (pPageObj->m_Type == PDFPAGE_PATH) {
+ if (pGeneralState && pGeneralState->m_StrokeAlpha != 1.0f)
+ return TRUE;
+ }
+
+ if (pPageObj->m_Type == PDFPAGE_FORM) {
+ CPDF_FormObject* pFormObj = (CPDF_FormObject*)pPageObj;
+ if (pFormObj->m_pForm &&
+ (pFormObj->m_pForm->m_Transparency & PDFTRANS_ISOLATED))
+ return TRUE;
+ if (pFormObj->m_pForm &&
+ (!(pFormObj->m_pForm->m_Transparency & PDFTRANS_ISOLATED) &&
+ (pFormObj->m_pForm->m_Transparency & PDFTRANS_GROUP)))
+ return TRUE;
+ }
+ return FALSE;
}
-DLLEXPORT FPDF_BOOL STDCALL FPDFPage_GenerateContent(FPDF_PAGE page)
-{
- CPDF_Page* pPage = (CPDF_Page*)page;
- if (!pPage || !pPage->m_pFormDict || !pPage->m_pFormDict->KeyExist("Type") || !pPage->m_pFormDict->GetElement("Type")->GetDirect()
- || pPage->m_pFormDict->GetElement("Type")->GetDirect()->GetString().Compare("Page"))
- {
- return FALSE;
- }
- CPDF_PageContentGenerate CG(pPage);
- CG.GenerateContent();
-
- return TRUE;
+DLLEXPORT FPDF_BOOL STDCALL FPDFPage_GenerateContent(FPDF_PAGE page) {
+ CPDF_Page* pPage = (CPDF_Page*)page;
+ if (!pPage || !pPage->m_pFormDict || !pPage->m_pFormDict->KeyExist("Type") ||
+ !pPage->m_pFormDict->GetElement("Type")->GetDirect() ||
+ pPage->m_pFormDict->GetElement("Type")->GetDirect()->GetString().Compare(
+ "Page")) {
+ return FALSE;
+ }
+ CPDF_PageContentGenerate CG(pPage);
+ CG.GenerateContent();
+
+ return TRUE;
}
DLLEXPORT void STDCALL FPDFPageObj_Transform(FPDF_PAGEOBJECT page_object,
- double a, double b, double c, double d, double e, double f)
-{
- CPDF_PageObject* pPageObj = (CPDF_PageObject*)page_object;
- if(pPageObj == NULL)
- return;
- CFX_AffineMatrix matrix((FX_FLOAT)a,(FX_FLOAT)b,(FX_FLOAT)c,(FX_FLOAT)d,(FX_FLOAT)e,(FX_FLOAT)f);
- pPageObj->Transform(matrix);
+ double a,
+ double b,
+ double c,
+ double d,
+ double e,
+ double f) {
+ CPDF_PageObject* pPageObj = (CPDF_PageObject*)page_object;
+ if (pPageObj == NULL)
+ return;
+ CFX_AffineMatrix matrix((FX_FLOAT)a, (FX_FLOAT)b, (FX_FLOAT)c, (FX_FLOAT)d,
+ (FX_FLOAT)e, (FX_FLOAT)f);
+ pPageObj->Transform(matrix);
}
DLLEXPORT void STDCALL FPDFPage_TransformAnnots(FPDF_PAGE page,
- double a, double b, double c, double d, double e, double f)
-{
- if(page == NULL)
- return;
- CPDF_Page* pPage = (CPDF_Page*)page;
- CPDF_AnnotList AnnotList(pPage);
- for (int i=0; i<AnnotList.Count();i++)
- {
- CPDF_Annot* pAnnot = AnnotList.GetAt(i);
- // transformAnnots Rectangle
- CPDF_Rect rect;
- pAnnot->GetRect(rect);
- CFX_AffineMatrix matrix((FX_FLOAT)a,(FX_FLOAT)b,(FX_FLOAT)c,(FX_FLOAT)d,(FX_FLOAT)e,(FX_FLOAT)f);
- rect.Transform(&matrix);
- CPDF_Array *pRectArray = NULL;
- pRectArray = pAnnot->GetAnnotDict()->GetArray("Rect");
- if (!pRectArray) pRectArray=CPDF_Array::Create();
- pRectArray->SetAt(0, new CPDF_Number(rect.left));
- pRectArray->SetAt(1, new CPDF_Number(rect.bottom));
- pRectArray->SetAt(2, new CPDF_Number(rect.right));
- pRectArray->SetAt(3, new CPDF_Number(rect.top));
- pAnnot->GetAnnotDict()->SetAt("Rect",pRectArray);
-
- //Transform AP's rectangle
- //To Do
- }
-
+ double a,
+ double b,
+ double c,
+ double d,
+ double e,
+ double f) {
+ if (page == NULL)
+ return;
+ CPDF_Page* pPage = (CPDF_Page*)page;
+ CPDF_AnnotList AnnotList(pPage);
+ for (int i = 0; i < AnnotList.Count(); i++) {
+ CPDF_Annot* pAnnot = AnnotList.GetAt(i);
+ // transformAnnots Rectangle
+ CPDF_Rect rect;
+ pAnnot->GetRect(rect);
+ CFX_AffineMatrix matrix((FX_FLOAT)a, (FX_FLOAT)b, (FX_FLOAT)c, (FX_FLOAT)d,
+ (FX_FLOAT)e, (FX_FLOAT)f);
+ rect.Transform(&matrix);
+ CPDF_Array* pRectArray = NULL;
+ pRectArray = pAnnot->GetAnnotDict()->GetArray("Rect");
+ if (!pRectArray)
+ pRectArray = CPDF_Array::Create();
+ pRectArray->SetAt(0, new CPDF_Number(rect.left));
+ pRectArray->SetAt(1, new CPDF_Number(rect.bottom));
+ pRectArray->SetAt(2, new CPDF_Number(rect.right));
+ pRectArray->SetAt(3, new CPDF_Number(rect.top));
+ pAnnot->GetAnnotDict()->SetAt("Rect", pRectArray);
+
+ // Transform AP's rectangle
+ // To Do
+ }
}
-DLLEXPORT void STDCALL FPDFPage_SetRotation(FPDF_PAGE page, int rotate)
-{
- CPDF_Page* pPage = (CPDF_Page*)page;
- if (!pPage || !pPage->m_pFormDict || !pPage->m_pFormDict->KeyExist("Type") || !pPage->m_pFormDict->GetElement("Type")->GetDirect()
- || pPage->m_pFormDict->GetElement("Type")->GetDirect()->GetString().Compare("Page"))
- {
- return;
- }
- CPDF_Dictionary* pDict = pPage->m_pFormDict;
- rotate %=4;
-
- pDict->SetAt("Rotate", new CPDF_Number(rotate * 90));
+DLLEXPORT void STDCALL FPDFPage_SetRotation(FPDF_PAGE page, int rotate) {
+ CPDF_Page* pPage = (CPDF_Page*)page;
+ if (!pPage || !pPage->m_pFormDict || !pPage->m_pFormDict->KeyExist("Type") ||
+ !pPage->m_pFormDict->GetElement("Type")->GetDirect() ||
+ pPage->m_pFormDict->GetElement("Type")->GetDirect()->GetString().Compare(
+ "Page")) {
+ return;
+ }
+ CPDF_Dictionary* pDict = pPage->m_pFormDict;
+ rotate %= 4;
+
+ pDict->SetAt("Rotate", new CPDF_Number(rotate * 90));
}
diff --git a/fpdfsdk/src/fpdfformfill.cpp b/fpdfsdk/src/fpdfformfill.cpp
index 42e94c789d..170ae15799 100644
--- a/fpdfsdk/src/fpdfformfill.cpp
+++ b/fpdfsdk/src/fpdfformfill.cpp
@@ -13,308 +13,318 @@
namespace {
-CPDFSDK_Document* FormHandleToSDKDoc(FPDF_FORMHANDLE hHandle)
-{
- CPDFDoc_Environment* pEnv = (CPDFDoc_Environment*)hHandle;
- return pEnv ? pEnv->GetSDKDocument() : nullptr;
+CPDFSDK_Document* FormHandleToSDKDoc(FPDF_FORMHANDLE hHandle) {
+ CPDFDoc_Environment* pEnv = (CPDFDoc_Environment*)hHandle;
+ return pEnv ? pEnv->GetSDKDocument() : nullptr;
}
-CPDFSDK_InterForm* FormHandleToInterForm(FPDF_FORMHANDLE hHandle)
-{
- CPDFSDK_Document* pSDKDoc = FormHandleToSDKDoc(hHandle);
- return pSDKDoc ? pSDKDoc->GetInterForm() : nullptr;
+CPDFSDK_InterForm* FormHandleToInterForm(FPDF_FORMHANDLE hHandle) {
+ CPDFSDK_Document* pSDKDoc = FormHandleToSDKDoc(hHandle);
+ return pSDKDoc ? pSDKDoc->GetInterForm() : nullptr;
}
-CPDFSDK_PageView* FormHandleToPageView(FPDF_FORMHANDLE hHandle, FPDF_PAGE page)
-{
- if (!page)
- return nullptr;
+CPDFSDK_PageView* FormHandleToPageView(FPDF_FORMHANDLE hHandle,
+ FPDF_PAGE page) {
+ if (!page)
+ return nullptr;
- CPDFSDK_Document* pSDKDoc = FormHandleToSDKDoc(hHandle);
- return pSDKDoc ? pSDKDoc->GetPageView((CPDF_Page*)page, TRUE) : nullptr;
+ CPDFSDK_Document* pSDKDoc = FormHandleToSDKDoc(hHandle);
+ return pSDKDoc ? pSDKDoc->GetPageView((CPDF_Page*)page, TRUE) : nullptr;
}
} // namespace
-DLLEXPORT int STDCALL FPDPage_HasFormFieldAtPoint(
- FPDF_FORMHANDLE hHandle, FPDF_PAGE page, double page_x, double page_y)
-{
- if (!page || !hHandle)
- return -1;
- CPDF_Page* pPage = (CPDF_Page*) page;
-
- nonstd::unique_ptr<CPDF_InterForm> pInterForm(
- new CPDF_InterForm(pPage->m_pDocument, FALSE));
- CPDF_FormControl* pFormCtrl = pInterForm->GetControlAtPoint(
- pPage, (FX_FLOAT)page_x, (FX_FLOAT)page_y);
- if (!pFormCtrl)
- return -1;
-
- CPDF_FormField* pFormField = pFormCtrl->GetField();
- if(!pFormField)
- return -1;
-
- return pFormField->GetFieldType();
+DLLEXPORT int STDCALL FPDPage_HasFormFieldAtPoint(FPDF_FORMHANDLE hHandle,
+ FPDF_PAGE page,
+ double page_x,
+ double page_y) {
+ if (!page || !hHandle)
+ return -1;
+ CPDF_Page* pPage = (CPDF_Page*)page;
+
+ nonstd::unique_ptr<CPDF_InterForm> pInterForm(
+ new CPDF_InterForm(pPage->m_pDocument, FALSE));
+ CPDF_FormControl* pFormCtrl =
+ pInterForm->GetControlAtPoint(pPage, (FX_FLOAT)page_x, (FX_FLOAT)page_y);
+ if (!pFormCtrl)
+ return -1;
+
+ CPDF_FormField* pFormField = pFormCtrl->GetField();
+ if (!pFormField)
+ return -1;
+
+ return pFormField->GetFieldType();
}
-DLLEXPORT FPDF_FORMHANDLE STDCALL FPDFDOC_InitFormFillEnvironment(
- FPDF_DOCUMENT document, FPDF_FORMFILLINFO* formInfo)
-{
- if (!document || !formInfo || formInfo->version != 1)
- return nullptr;
+DLLEXPORT FPDF_FORMHANDLE STDCALL
+FPDFDOC_InitFormFillEnvironment(FPDF_DOCUMENT document,
+ FPDF_FORMFILLINFO* formInfo) {
+ if (!document || !formInfo || formInfo->version != 1)
+ return nullptr;
- CPDF_Document* pDocument = (CPDF_Document*)document;
- CPDFDoc_Environment* pEnv = new CPDFDoc_Environment(pDocument, formInfo);
- pEnv->SetSDKDocument(new CPDFSDK_Document(pDocument, pEnv));
- return pEnv;
+ CPDF_Document* pDocument = (CPDF_Document*)document;
+ CPDFDoc_Environment* pEnv = new CPDFDoc_Environment(pDocument, formInfo);
+ pEnv->SetSDKDocument(new CPDFSDK_Document(pDocument, pEnv));
+ return pEnv;
}
-DLLEXPORT void STDCALL FPDFDOC_ExitFormFillEnvironment(FPDF_FORMHANDLE hHandle)
-{
- if (!hHandle)
- return;
-
- CPDFDoc_Environment* pEnv = (CPDFDoc_Environment*)hHandle;
- if (CPDFSDK_Document* pSDKDoc = pEnv->GetSDKDocument())
- {
- pEnv->SetSDKDocument(NULL);
- delete pSDKDoc;
- }
- delete pEnv;
+DLLEXPORT void STDCALL
+FPDFDOC_ExitFormFillEnvironment(FPDF_FORMHANDLE hHandle) {
+ if (!hHandle)
+ return;
+
+ CPDFDoc_Environment* pEnv = (CPDFDoc_Environment*)hHandle;
+ if (CPDFSDK_Document* pSDKDoc = pEnv->GetSDKDocument()) {
+ pEnv->SetSDKDocument(NULL);
+ delete pSDKDoc;
+ }
+ delete pEnv;
}
-DLLEXPORT FPDF_BOOL STDCALL FORM_OnMouseMove(FPDF_FORMHANDLE hHandle, FPDF_PAGE page, int modifier, double page_x, double page_y)
-{
- CPDFSDK_PageView* pPageView = FormHandleToPageView(hHandle, page);
- if (!pPageView)
- return FALSE;
-
- CPDF_Point pt((FX_FLOAT)page_x, (FX_FLOAT)page_y);
- return pPageView->OnMouseMove(pt, modifier);
+DLLEXPORT FPDF_BOOL STDCALL FORM_OnMouseMove(FPDF_FORMHANDLE hHandle,
+ FPDF_PAGE page,
+ int modifier,
+ double page_x,
+ double page_y) {
+ CPDFSDK_PageView* pPageView = FormHandleToPageView(hHandle, page);
+ if (!pPageView)
+ return FALSE;
+
+ CPDF_Point pt((FX_FLOAT)page_x, (FX_FLOAT)page_y);
+ return pPageView->OnMouseMove(pt, modifier);
}
-DLLEXPORT FPDF_BOOL STDCALL FORM_OnLButtonDown(FPDF_FORMHANDLE hHandle, FPDF_PAGE page, int modifier, double page_x, double page_y)
-{
- CPDFSDK_PageView* pPageView = FormHandleToPageView(hHandle, page);
- if (!pPageView)
- return FALSE;
-
- CPDF_Point pt((FX_FLOAT)page_x, (FX_FLOAT)page_y);
- return pPageView->OnLButtonDown(pt, modifier);
+DLLEXPORT FPDF_BOOL STDCALL FORM_OnLButtonDown(FPDF_FORMHANDLE hHandle,
+ FPDF_PAGE page,
+ int modifier,
+ double page_x,
+ double page_y) {
+ CPDFSDK_PageView* pPageView = FormHandleToPageView(hHandle, page);
+ if (!pPageView)
+ return FALSE;
+
+ CPDF_Point pt((FX_FLOAT)page_x, (FX_FLOAT)page_y);
+ return pPageView->OnLButtonDown(pt, modifier);
}
-DLLEXPORT FPDF_BOOL STDCALL FORM_OnLButtonUp(FPDF_FORMHANDLE hHandle, FPDF_PAGE page, int modifier, double page_x, double page_y)
-{
- CPDFSDK_PageView* pPageView = FormHandleToPageView(hHandle, page);
- if (!pPageView)
- return FALSE;
-
- CPDF_Point pt((FX_FLOAT)page_x, (FX_FLOAT)page_y);
- return pPageView->OnLButtonUp(pt, modifier);
+DLLEXPORT FPDF_BOOL STDCALL FORM_OnLButtonUp(FPDF_FORMHANDLE hHandle,
+ FPDF_PAGE page,
+ int modifier,
+ double page_x,
+ double page_y) {
+ CPDFSDK_PageView* pPageView = FormHandleToPageView(hHandle, page);
+ if (!pPageView)
+ return FALSE;
+
+ CPDF_Point pt((FX_FLOAT)page_x, (FX_FLOAT)page_y);
+ return pPageView->OnLButtonUp(pt, modifier);
}
-DLLEXPORT FPDF_BOOL STDCALL FORM_OnKeyDown(FPDF_FORMHANDLE hHandle, FPDF_PAGE page, int nKeyCode, int modifier)
-{
- CPDFSDK_PageView* pPageView = FormHandleToPageView(hHandle, page);
- if (!pPageView)
- return FALSE;
+DLLEXPORT FPDF_BOOL STDCALL FORM_OnKeyDown(FPDF_FORMHANDLE hHandle,
+ FPDF_PAGE page,
+ int nKeyCode,
+ int modifier) {
+ CPDFSDK_PageView* pPageView = FormHandleToPageView(hHandle, page);
+ if (!pPageView)
+ return FALSE;
- return pPageView->OnKeyDown(nKeyCode, modifier);
+ return pPageView->OnKeyDown(nKeyCode, modifier);
}
-DLLEXPORT FPDF_BOOL STDCALL FORM_OnKeyUp(FPDF_FORMHANDLE hHandle, FPDF_PAGE page, int nKeyCode, int modifier)
-{
- CPDFSDK_PageView* pPageView = FormHandleToPageView(hHandle, page);
- if (!pPageView)
- return FALSE;
+DLLEXPORT FPDF_BOOL STDCALL FORM_OnKeyUp(FPDF_FORMHANDLE hHandle,
+ FPDF_PAGE page,
+ int nKeyCode,
+ int modifier) {
+ CPDFSDK_PageView* pPageView = FormHandleToPageView(hHandle, page);
+ if (!pPageView)
+ return FALSE;
- return pPageView->OnKeyUp(nKeyCode, modifier);
+ return pPageView->OnKeyUp(nKeyCode, modifier);
}
-DLLEXPORT FPDF_BOOL STDCALL FORM_OnChar(FPDF_FORMHANDLE hHandle, FPDF_PAGE page, int nChar, int modifier)
-{
- CPDFSDK_PageView* pPageView = FormHandleToPageView(hHandle, page);
- if (!pPageView)
- return FALSE;
+DLLEXPORT FPDF_BOOL STDCALL FORM_OnChar(FPDF_FORMHANDLE hHandle,
+ FPDF_PAGE page,
+ int nChar,
+ int modifier) {
+ CPDFSDK_PageView* pPageView = FormHandleToPageView(hHandle, page);
+ if (!pPageView)
+ return FALSE;
- return pPageView->OnChar(nChar, modifier);
+ return pPageView->OnChar(nChar, modifier);
}
-DLLEXPORT FPDF_BOOL STDCALL FORM_ForceToKillFocus(FPDF_FORMHANDLE hHandle)
-{
- CPDFSDK_Document* pSDKDoc = FormHandleToSDKDoc(hHandle);
- if (!pSDKDoc)
- return FALSE;
+DLLEXPORT FPDF_BOOL STDCALL FORM_ForceToKillFocus(FPDF_FORMHANDLE hHandle) {
+ CPDFSDK_Document* pSDKDoc = FormHandleToSDKDoc(hHandle);
+ if (!pSDKDoc)
+ return FALSE;
- return pSDKDoc->KillFocusAnnot(0);
+ return pSDKDoc->KillFocusAnnot(0);
}
-DLLEXPORT void STDCALL FPDF_FFLDraw(FPDF_FORMHANDLE hHandle, FPDF_BITMAP bitmap, FPDF_PAGE page,
- int start_x, int start_y, int size_x, int size_y, int rotate, int flags)
-{
- if (!hHandle || !page)
- return;
-
- CPDF_Page* pPage = (CPDF_Page*)page;
- CPDF_RenderOptions options;
- if (flags & FPDF_LCD_TEXT)
- options.m_Flags |= RENDER_CLEARTYPE;
- else
- options.m_Flags &= ~RENDER_CLEARTYPE;
-
- //Grayscale output
- if (flags & FPDF_GRAYSCALE)
- {
- options.m_ColorMode = RENDER_COLOR_GRAY;
- options.m_ForeColor = 0;
- options.m_BackColor = 0xffffff;
- }
-
- options.m_AddFlags = flags >> 8;
- options.m_pOCContext = new CPDF_OCContext(pPage->m_pDocument);
-
- CFX_AffineMatrix matrix;
- pPage->GetDisplayMatrix(matrix, start_x, start_y, size_x, size_y, rotate);
-
- FX_RECT clip;
- clip.left = start_x;
- clip.right = start_x + size_x;
- clip.top = start_y;
- clip.bottom = start_y + size_y;
+DLLEXPORT void STDCALL FPDF_FFLDraw(FPDF_FORMHANDLE hHandle,
+ FPDF_BITMAP bitmap,
+ FPDF_PAGE page,
+ int start_x,
+ int start_y,
+ int size_x,
+ int size_y,
+ int rotate,
+ int flags) {
+ if (!hHandle || !page)
+ return;
+
+ CPDF_Page* pPage = (CPDF_Page*)page;
+ CPDF_RenderOptions options;
+ if (flags & FPDF_LCD_TEXT)
+ options.m_Flags |= RENDER_CLEARTYPE;
+ else
+ options.m_Flags &= ~RENDER_CLEARTYPE;
+
+ // Grayscale output
+ if (flags & FPDF_GRAYSCALE) {
+ options.m_ColorMode = RENDER_COLOR_GRAY;
+ options.m_ForeColor = 0;
+ options.m_BackColor = 0xffffff;
+ }
+
+ options.m_AddFlags = flags >> 8;
+ options.m_pOCContext = new CPDF_OCContext(pPage->m_pDocument);
+
+ CFX_AffineMatrix matrix;
+ pPage->GetDisplayMatrix(matrix, start_x, start_y, size_x, size_y, rotate);
+
+ FX_RECT clip;
+ clip.left = start_x;
+ clip.right = start_x + size_x;
+ clip.top = start_y;
+ clip.bottom = start_y + size_y;
#ifdef _SKIA_SUPPORT_
- nonstd::unique_ptr<CFX_SkiaDevice> pDevice(new CFX_SkiaDevice);
+ nonstd::unique_ptr<CFX_SkiaDevice> pDevice(new CFX_SkiaDevice);
#else
- nonstd::unique_ptr<CFX_FxgeDevice> pDevice(new CFX_FxgeDevice);
+ nonstd::unique_ptr<CFX_FxgeDevice> pDevice(new CFX_FxgeDevice);
#endif
- pDevice->Attach((CFX_DIBitmap*)bitmap);
- pDevice->SaveState();
- pDevice->SetClip_Rect(&clip);
+ pDevice->Attach((CFX_DIBitmap*)bitmap);
+ pDevice->SaveState();
+ pDevice->SetClip_Rect(&clip);
- if (CPDFSDK_PageView* pPageView = FormHandleToPageView(hHandle, pPage))
- pPageView->PageView_OnDraw(pDevice.get(), &matrix, &options);
+ if (CPDFSDK_PageView* pPageView = FormHandleToPageView(hHandle, pPage))
+ pPageView->PageView_OnDraw(pDevice.get(), &matrix, &options);
- pDevice->RestoreState();
- delete options.m_pOCContext;
+ pDevice->RestoreState();
+ delete options.m_pOCContext;
}
-DLLEXPORT void STDCALL FPDF_SetFormFieldHighlightColor(FPDF_FORMHANDLE hHandle, int fieldType, unsigned long color)
-{
- if (CPDFSDK_InterForm* pInterForm = FormHandleToInterForm(hHandle))
- pInterForm->SetHighlightColor(color, fieldType);
+DLLEXPORT void STDCALL FPDF_SetFormFieldHighlightColor(FPDF_FORMHANDLE hHandle,
+ int fieldType,
+ unsigned long color) {
+ if (CPDFSDK_InterForm* pInterForm = FormHandleToInterForm(hHandle))
+ pInterForm->SetHighlightColor(color, fieldType);
}
-DLLEXPORT void STDCALL FPDF_SetFormFieldHighlightAlpha(FPDF_FORMHANDLE hHandle, unsigned char alpha)
-{
- if (CPDFSDK_InterForm* pInterForm = FormHandleToInterForm(hHandle))
- pInterForm->SetHighlightAlpha(alpha);
+DLLEXPORT void STDCALL FPDF_SetFormFieldHighlightAlpha(FPDF_FORMHANDLE hHandle,
+ unsigned char alpha) {
+ if (CPDFSDK_InterForm* pInterForm = FormHandleToInterForm(hHandle))
+ pInterForm->SetHighlightAlpha(alpha);
}
-DLLEXPORT void STDCALL FPDF_RemoveFormFieldHighlight(FPDF_FORMHANDLE hHandle)
-{
- if (CPDFSDK_InterForm* pInterForm = FormHandleToInterForm(hHandle))
- pInterForm->RemoveAllHighLight();
+DLLEXPORT void STDCALL FPDF_RemoveFormFieldHighlight(FPDF_FORMHANDLE hHandle) {
+ if (CPDFSDK_InterForm* pInterForm = FormHandleToInterForm(hHandle))
+ pInterForm->RemoveAllHighLight();
}
-DLLEXPORT void STDCALL FORM_OnAfterLoadPage(FPDF_PAGE page, FPDF_FORMHANDLE hHandle)
-{
- if (CPDFSDK_PageView* pPageView = FormHandleToPageView(hHandle, page))
- pPageView->SetValid(TRUE);
+DLLEXPORT void STDCALL FORM_OnAfterLoadPage(FPDF_PAGE page,
+ FPDF_FORMHANDLE hHandle) {
+ if (CPDFSDK_PageView* pPageView = FormHandleToPageView(hHandle, page))
+ pPageView->SetValid(TRUE);
}
-DLLEXPORT void STDCALL FORM_OnBeforeClosePage(FPDF_PAGE page, FPDF_FORMHANDLE hHandle)
-{
- if (!hHandle || !page)
- return;
-
- CPDFSDK_Document* pSDKDoc = ((CPDFDoc_Environment*)hHandle)->GetSDKDocument();
- if (!pSDKDoc)
- return;
-
- CPDF_Page* pPage = (CPDF_Page*)page;
- CPDFSDK_PageView* pPageView = pSDKDoc->GetPageView(pPage, FALSE);
- if (pPageView)
- {
- pPageView->SetValid(FALSE);
- // ReMovePageView() takes care of the delete for us.
- pSDKDoc->ReMovePageView(pPage);
- }
+DLLEXPORT void STDCALL FORM_OnBeforeClosePage(FPDF_PAGE page,
+ FPDF_FORMHANDLE hHandle) {
+ if (!hHandle || !page)
+ return;
+
+ CPDFSDK_Document* pSDKDoc = ((CPDFDoc_Environment*)hHandle)->GetSDKDocument();
+ if (!pSDKDoc)
+ return;
+
+ CPDF_Page* pPage = (CPDF_Page*)page;
+ CPDFSDK_PageView* pPageView = pSDKDoc->GetPageView(pPage, FALSE);
+ if (pPageView) {
+ pPageView->SetValid(FALSE);
+ // ReMovePageView() takes care of the delete for us.
+ pSDKDoc->ReMovePageView(pPage);
+ }
}
-DLLEXPORT void STDCALL FORM_DoDocumentJSAction(FPDF_FORMHANDLE hHandle)
-{
- CPDFSDK_Document* pSDKDoc = FormHandleToSDKDoc(hHandle);
- if (pSDKDoc && ((CPDFDoc_Environment*)hHandle)->IsJSInitiated())
- pSDKDoc->ProcJavascriptFun();
+DLLEXPORT void STDCALL FORM_DoDocumentJSAction(FPDF_FORMHANDLE hHandle) {
+ CPDFSDK_Document* pSDKDoc = FormHandleToSDKDoc(hHandle);
+ if (pSDKDoc && ((CPDFDoc_Environment*)hHandle)->IsJSInitiated())
+ pSDKDoc->ProcJavascriptFun();
}
-DLLEXPORT void STDCALL FORM_DoDocumentOpenAction(FPDF_FORMHANDLE hHandle)
-{
- CPDFSDK_Document* pSDKDoc = FormHandleToSDKDoc(hHandle);
- if (pSDKDoc && ((CPDFDoc_Environment*)hHandle)->IsJSInitiated())
- pSDKDoc->ProcOpenAction();
+DLLEXPORT void STDCALL FORM_DoDocumentOpenAction(FPDF_FORMHANDLE hHandle) {
+ CPDFSDK_Document* pSDKDoc = FormHandleToSDKDoc(hHandle);
+ if (pSDKDoc && ((CPDFDoc_Environment*)hHandle)->IsJSInitiated())
+ pSDKDoc->ProcOpenAction();
}
-DLLEXPORT void STDCALL FORM_DoDocumentAAction(FPDF_FORMHANDLE hHandle, int aaType)
-{
- CPDFSDK_Document* pSDKDoc = FormHandleToSDKDoc(hHandle);
- if (!pSDKDoc)
- return;
-
- CPDF_Document* pDoc = pSDKDoc->GetDocument();
- CPDF_Dictionary* pDic = pDoc->GetRoot();
- if (!pDic)
- return;
-
- CPDF_AAction aa = pDic->GetDict(FX_BSTRC("AA"));
- if (aa.ActionExist((CPDF_AAction::AActionType)aaType))
- {
- CPDF_Action action = aa.GetAction((CPDF_AAction::AActionType)aaType);
- CPDFSDK_ActionHandler *pActionHandler = ((CPDFDoc_Environment*)hHandle)->GetActionHander();
- ASSERT(pActionHandler != NULL);
- pActionHandler->DoAction_Document(action, (CPDF_AAction::AActionType)aaType, pSDKDoc);
- }
+DLLEXPORT void STDCALL FORM_DoDocumentAAction(FPDF_FORMHANDLE hHandle,
+ int aaType) {
+ CPDFSDK_Document* pSDKDoc = FormHandleToSDKDoc(hHandle);
+ if (!pSDKDoc)
+ return;
+
+ CPDF_Document* pDoc = pSDKDoc->GetDocument();
+ CPDF_Dictionary* pDic = pDoc->GetRoot();
+ if (!pDic)
+ return;
+
+ CPDF_AAction aa = pDic->GetDict(FX_BSTRC("AA"));
+ if (aa.ActionExist((CPDF_AAction::AActionType)aaType)) {
+ CPDF_Action action = aa.GetAction((CPDF_AAction::AActionType)aaType);
+ CPDFSDK_ActionHandler* pActionHandler =
+ ((CPDFDoc_Environment*)hHandle)->GetActionHander();
+ ASSERT(pActionHandler != NULL);
+ pActionHandler->DoAction_Document(action, (CPDF_AAction::AActionType)aaType,
+ pSDKDoc);
+ }
}
-DLLEXPORT void STDCALL FORM_DoPageAAction(FPDF_PAGE page, FPDF_FORMHANDLE hHandle, int aaType)
-{
- if(!hHandle || !page)
- return;
- CPDFSDK_Document* pSDKDoc = ((CPDFDoc_Environment*)hHandle)->GetSDKDocument();
- CPDF_Page* pPage = (CPDF_Page*)page;
- CPDFSDK_PageView* pPageView = pSDKDoc->GetPageView(pPage, FALSE);
- if(pPageView)
- {
- CPDFDoc_Environment *pEnv = pSDKDoc->GetEnv();
- ASSERT(pEnv != NULL);
-
- CPDFSDK_ActionHandler *pActionHandler = pEnv->GetActionHander();
- ASSERT(pActionHandler != NULL);
-
- CPDF_Dictionary *pPageDict = pPage->m_pFormDict;
- ASSERT(pPageDict != NULL);
-
- CPDF_AAction aa = pPageDict->GetDict(FX_BSTRC("AA"));
-
- FX_BOOL bExistOAAction = FALSE;
- FX_BOOL bExistCAAction = FALSE;
- if (FPDFPAGE_AACTION_OPEN == aaType)
- {
- bExistOAAction = aa.ActionExist(CPDF_AAction::OpenPage);
- if (bExistOAAction)
- {
- CPDF_Action action = aa.GetAction(CPDF_AAction::OpenPage);
- pActionHandler->DoAction_Page(action, CPDF_AAction::OpenPage, pSDKDoc);
- }
- }
- else
- {
- bExistCAAction = aa.ActionExist(CPDF_AAction::ClosePage);
- if (bExistCAAction)
- {
- CPDF_Action action = aa.GetAction(CPDF_AAction::ClosePage);
- pActionHandler->DoAction_Page(action, CPDF_AAction::ClosePage, pSDKDoc);
- }
- }
+DLLEXPORT void STDCALL FORM_DoPageAAction(FPDF_PAGE page,
+ FPDF_FORMHANDLE hHandle,
+ int aaType) {
+ if (!hHandle || !page)
+ return;
+ CPDFSDK_Document* pSDKDoc = ((CPDFDoc_Environment*)hHandle)->GetSDKDocument();
+ CPDF_Page* pPage = (CPDF_Page*)page;
+ CPDFSDK_PageView* pPageView = pSDKDoc->GetPageView(pPage, FALSE);
+ if (pPageView) {
+ CPDFDoc_Environment* pEnv = pSDKDoc->GetEnv();
+ ASSERT(pEnv != NULL);
+
+ CPDFSDK_ActionHandler* pActionHandler = pEnv->GetActionHander();
+ ASSERT(pActionHandler != NULL);
+
+ CPDF_Dictionary* pPageDict = pPage->m_pFormDict;
+ ASSERT(pPageDict != NULL);
+
+ CPDF_AAction aa = pPageDict->GetDict(FX_BSTRC("AA"));
+
+ FX_BOOL bExistOAAction = FALSE;
+ FX_BOOL bExistCAAction = FALSE;
+ if (FPDFPAGE_AACTION_OPEN == aaType) {
+ bExistOAAction = aa.ActionExist(CPDF_AAction::OpenPage);
+ if (bExistOAAction) {
+ CPDF_Action action = aa.GetAction(CPDF_AAction::OpenPage);
+ pActionHandler->DoAction_Page(action, CPDF_AAction::OpenPage, pSDKDoc);
+ }
+ } else {
+ bExistCAAction = aa.ActionExist(CPDF_AAction::ClosePage);
+ if (bExistCAAction) {
+ CPDF_Action action = aa.GetAction(CPDF_AAction::ClosePage);
+ pActionHandler->DoAction_Page(action, CPDF_AAction::ClosePage, pSDKDoc);
+ }
}
+ }
}
diff --git a/fpdfsdk/src/fpdfformfill_embeddertest.cpp b/fpdfsdk/src/fpdfformfill_embeddertest.cpp
index 1c38770edb..6baad11531 100644
--- a/fpdfsdk/src/fpdfformfill_embeddertest.cpp
+++ b/fpdfsdk/src/fpdfformfill_embeddertest.cpp
@@ -2,7 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-
#include "../../public/fpdf_formfill.h"
#include "../../testing/embedder_test.h"
#include "../../testing/embedder_test_mock_delegate.h"
@@ -13,8 +12,7 @@
using testing::_;
using testing::Return;
-class FPDFFormFillEmbeddertest : public EmbedderTest {
-};
+class FPDFFormFillEmbeddertest : public EmbedderTest {};
TEST_F(FPDFFormFillEmbeddertest, FirstTest) {
EmbedderTestMockDelegate mock;
diff --git a/fpdfsdk/src/fpdfppo.cpp b/fpdfsdk/src/fpdfppo.cpp
index 40d56b304d..a37772492f 100644
--- a/fpdfsdk/src/fpdfppo.cpp
+++ b/fpdfsdk/src/fpdfppo.cpp
@@ -8,425 +8,406 @@
#include "../../third_party/base/nonstd_unique_ptr.h"
#include "../include/fsdk_define.h"
-class CPDF_PageOrganizer
-{
-public:
- using ObjectNumberMap = std::map<FX_DWORD, FX_DWORD>;
- CPDF_PageOrganizer();
- ~CPDF_PageOrganizer();
-
- FX_BOOL PDFDocInit(CPDF_Document* pDestPDFDoc, CPDF_Document* pSrcPDFDoc);
- FX_BOOL ExportPage(CPDF_Document* pSrcPDFDoc,
- CFX_WordArray* nPageNum,
- CPDF_Document* pDestPDFDoc,
- int nIndex);
- CPDF_Object* PageDictGetInheritableTag(CPDF_Dictionary* pDict,
- CFX_ByteString nSrctag);
- FX_BOOL UpdateReference(CPDF_Object* pObj,
- CPDF_Document* pDoc,
- ObjectNumberMap* pObjNumberMap);
- FX_DWORD GetNewObjId(CPDF_Document* pDoc,
- ObjectNumberMap* pObjNumberMap,
- CPDF_Reference* pRef);
+class CPDF_PageOrganizer {
+ public:
+ using ObjectNumberMap = std::map<FX_DWORD, FX_DWORD>;
+ CPDF_PageOrganizer();
+ ~CPDF_PageOrganizer();
+
+ FX_BOOL PDFDocInit(CPDF_Document* pDestPDFDoc, CPDF_Document* pSrcPDFDoc);
+ FX_BOOL ExportPage(CPDF_Document* pSrcPDFDoc,
+ CFX_WordArray* nPageNum,
+ CPDF_Document* pDestPDFDoc,
+ int nIndex);
+ CPDF_Object* PageDictGetInheritableTag(CPDF_Dictionary* pDict,
+ CFX_ByteString nSrctag);
+ FX_BOOL UpdateReference(CPDF_Object* pObj,
+ CPDF_Document* pDoc,
+ ObjectNumberMap* pObjNumberMap);
+ FX_DWORD GetNewObjId(CPDF_Document* pDoc,
+ ObjectNumberMap* pObjNumberMap,
+ CPDF_Reference* pRef);
};
+CPDF_PageOrganizer::CPDF_PageOrganizer() {}
-CPDF_PageOrganizer::CPDF_PageOrganizer()
-{
-}
-
-CPDF_PageOrganizer::~CPDF_PageOrganizer()
-{
-}
+CPDF_PageOrganizer::~CPDF_PageOrganizer() {}
FX_BOOL CPDF_PageOrganizer::PDFDocInit(CPDF_Document* pDestPDFDoc,
- CPDF_Document* pSrcPDFDoc)
-{
- if (!pDestPDFDoc || !pSrcPDFDoc)
- return FALSE;
-
- CPDF_Dictionary* pNewRoot = pDestPDFDoc->GetRoot();
- if (!pNewRoot)
- return FALSE;
+ CPDF_Document* pSrcPDFDoc) {
+ if (!pDestPDFDoc || !pSrcPDFDoc)
+ return FALSE;
+
+ CPDF_Dictionary* pNewRoot = pDestPDFDoc->GetRoot();
+ if (!pNewRoot)
+ return FALSE;
+
+ // Set the document information////////////////////////////////////////////
+
+ CPDF_Dictionary* DInfoDict = pDestPDFDoc->GetInfo();
+ if (!DInfoDict)
+ return FALSE;
+
+ CFX_ByteString producerstr;
+ producerstr.Format("PDFium");
+ DInfoDict->SetAt("Producer", new CPDF_String(producerstr));
+
+ // Set type////////////////////////////////////////////////////////////////
+ CFX_ByteString cbRootType = pNewRoot->GetString("Type", "");
+ if (cbRootType.Equal("")) {
+ pNewRoot->SetAt("Type", new CPDF_Name("Catalog"));
+ }
+
+ CPDF_Object* pElement = pNewRoot->GetElement("Pages");
+ CPDF_Dictionary* pNewPages =
+ pElement ? (CPDF_Dictionary*)pElement->GetDirect() : nullptr;
+ if (!pNewPages) {
+ pNewPages = new CPDF_Dictionary;
+ FX_DWORD NewPagesON = pDestPDFDoc->AddIndirectObject(pNewPages);
+ pNewRoot->SetAt("Pages", new CPDF_Reference(pDestPDFDoc, NewPagesON));
+ }
+
+ CFX_ByteString cbPageType = pNewPages->GetString("Type", "");
+ if (cbPageType.Equal("")) {
+ pNewPages->SetAt("Type", new CPDF_Name("Pages"));
+ }
+
+ CPDF_Array* pKeysArray = pNewPages->GetArray("Kids");
+ if (!pKeysArray) {
+ CPDF_Array* pNewKids = new CPDF_Array;
+ FX_DWORD Kidsobjnum = -1;
+ Kidsobjnum = pDestPDFDoc->AddIndirectObject(pNewKids);
+
+ pNewPages->SetAt("Kids", new CPDF_Reference(pDestPDFDoc, Kidsobjnum));
+ pNewPages->SetAt("Count", new CPDF_Number(0));
+ }
+
+ return TRUE;
+}
- //Set the document information////////////////////////////////////////////
+FX_BOOL CPDF_PageOrganizer::ExportPage(CPDF_Document* pSrcPDFDoc,
+ CFX_WordArray* nPageNum,
+ CPDF_Document* pDestPDFDoc,
+ int nIndex) {
+ int curpage = nIndex;
+
+ nonstd::unique_ptr<ObjectNumberMap> pObjNumberMap(new ObjectNumberMap);
+
+ for (int i = 0; i < nPageNum->GetSize(); ++i) {
+ CPDF_Dictionary* pCurPageDict = pDestPDFDoc->CreateNewPage(curpage);
+ CPDF_Dictionary* pSrcPageDict = pSrcPDFDoc->GetPage(nPageNum->GetAt(i) - 1);
+ if (!pSrcPageDict || !pCurPageDict)
+ return FALSE;
+
+ // Clone the page dictionary///////////
+ FX_POSITION SrcPos = pSrcPageDict->GetStartPos();
+ while (SrcPos) {
+ CFX_ByteString cbSrcKeyStr;
+ CPDF_Object* pObj = pSrcPageDict->GetNextElement(SrcPos, cbSrcKeyStr);
+ if (cbSrcKeyStr.Compare(("Type")) && cbSrcKeyStr.Compare(("Parent"))) {
+ if (pCurPageDict->KeyExist(cbSrcKeyStr))
+ pCurPageDict->RemoveAt(cbSrcKeyStr);
+ pCurPageDict->SetAt(cbSrcKeyStr, pObj->Clone());
+ }
+ }
- CPDF_Dictionary* DInfoDict = pDestPDFDoc->GetInfo();
- if (!DInfoDict)
+ // inheritable item///////////////////////
+ CPDF_Object* pInheritable = nullptr;
+ // 1 MediaBox //required
+ if (!pCurPageDict->KeyExist("MediaBox")) {
+ pInheritable = PageDictGetInheritableTag(pSrcPageDict, "MediaBox");
+ if (!pInheritable) {
+ // Search the "CropBox" from source page dictionary,
+ // if not exists,we take the letter size.
+ pInheritable = PageDictGetInheritableTag(pSrcPageDict, "CropBox");
+ if (pInheritable) {
+ pCurPageDict->SetAt("MediaBox", pInheritable->Clone());
+ } else {
+ // Make the default size to be letter size (8.5'x11')
+ CPDF_Array* pArray = new CPDF_Array;
+ pArray->AddNumber(0);
+ pArray->AddNumber(0);
+ pArray->AddNumber(612);
+ pArray->AddNumber(792);
+ pCurPageDict->SetAt("MediaBox", pArray);
+ }
+ } else {
+ pCurPageDict->SetAt("MediaBox", pInheritable->Clone());
+ }
+ }
+ // 2 Resources //required
+ if (!pCurPageDict->KeyExist("Resources")) {
+ pInheritable = PageDictGetInheritableTag(pSrcPageDict, "Resources");
+ if (!pInheritable)
return FALSE;
-
- CFX_ByteString producerstr;
- producerstr.Format("PDFium");
- DInfoDict->SetAt("Producer", new CPDF_String(producerstr));
-
- //Set type////////////////////////////////////////////////////////////////
- CFX_ByteString cbRootType = pNewRoot->GetString("Type", "");
- if (cbRootType.Equal("") ) {
- pNewRoot->SetAt("Type", new CPDF_Name("Catalog"));
+ pCurPageDict->SetAt("Resources", pInheritable->Clone());
}
-
- CPDF_Object* pElement = pNewRoot->GetElement("Pages");
- CPDF_Dictionary* pNewPages = pElement ?
- (CPDF_Dictionary*)pElement->GetDirect() : nullptr;
- if (!pNewPages) {
- pNewPages = new CPDF_Dictionary;
- FX_DWORD NewPagesON = pDestPDFDoc->AddIndirectObject(pNewPages);
- pNewRoot->SetAt("Pages", new CPDF_Reference(pDestPDFDoc, NewPagesON));
+ // 3 CropBox //Optional
+ if (!pCurPageDict->KeyExist("CropBox")) {
+ pInheritable = PageDictGetInheritableTag(pSrcPageDict, "CropBox");
+ if (pInheritable)
+ pCurPageDict->SetAt("CropBox", pInheritable->Clone());
}
-
- CFX_ByteString cbPageType = pNewPages->GetString("Type", "");
- if (cbPageType.Equal("")) {
- pNewPages->SetAt("Type", new CPDF_Name("Pages"));
+ // 4 Rotate //Optional
+ if (!pCurPageDict->KeyExist("Rotate")) {
+ pInheritable = PageDictGetInheritableTag(pSrcPageDict, "Rotate");
+ if (pInheritable)
+ pCurPageDict->SetAt("Rotate", pInheritable->Clone());
}
- CPDF_Array* pKeysArray = pNewPages->GetArray("Kids");
- if (!pKeysArray) {
- CPDF_Array* pNewKids = new CPDF_Array;
- FX_DWORD Kidsobjnum = -1;
- Kidsobjnum = pDestPDFDoc->AddIndirectObject(pNewKids);
+ /////////////////////////////////////////////
+ // Update the reference
+ FX_DWORD dwOldPageObj = pSrcPageDict->GetObjNum();
+ FX_DWORD dwNewPageObj = pCurPageDict->GetObjNum();
- pNewPages->SetAt("Kids", new CPDF_Reference(pDestPDFDoc, Kidsobjnum));
- pNewPages->SetAt("Count", new CPDF_Number(0));
- }
+ (*pObjNumberMap)[dwOldPageObj] = dwNewPageObj;
- return TRUE;
+ UpdateReference(pCurPageDict, pDestPDFDoc, pObjNumberMap.get());
+ ++curpage;
+ }
+
+ return TRUE;
}
-FX_BOOL CPDF_PageOrganizer::ExportPage(CPDF_Document* pSrcPDFDoc,
- CFX_WordArray* nPageNum,
- CPDF_Document* pDestPDFDoc,
- int nIndex)
-{
- int curpage = nIndex;
-
- nonstd::unique_ptr<ObjectNumberMap> pObjNumberMap(new ObjectNumberMap);
-
- for (int i = 0; i < nPageNum->GetSize(); ++i) {
- CPDF_Dictionary* pCurPageDict = pDestPDFDoc->CreateNewPage(curpage);
- CPDF_Dictionary* pSrcPageDict =
- pSrcPDFDoc->GetPage(nPageNum->GetAt(i) - 1);
- if (!pSrcPageDict || !pCurPageDict)
- return FALSE;
-
- // Clone the page dictionary///////////
- FX_POSITION SrcPos = pSrcPageDict->GetStartPos();
- while (SrcPos) {
- CFX_ByteString cbSrcKeyStr;
- CPDF_Object* pObj = pSrcPageDict->GetNextElement(SrcPos,
- cbSrcKeyStr);
- if (cbSrcKeyStr.Compare(("Type")) &&
- cbSrcKeyStr.Compare(("Parent"))) {
- if (pCurPageDict->KeyExist(cbSrcKeyStr))
- pCurPageDict->RemoveAt(cbSrcKeyStr);
- pCurPageDict->SetAt(cbSrcKeyStr, pObj->Clone());
- }
- }
+CPDF_Object* CPDF_PageOrganizer::PageDictGetInheritableTag(
+ CPDF_Dictionary* pDict,
+ CFX_ByteString nSrctag) {
+ if (!pDict || nSrctag.IsEmpty())
+ return nullptr;
+ if (!pDict->KeyExist("Parent") || !pDict->KeyExist("Type"))
+ return nullptr;
- //inheritable item///////////////////////
- CPDF_Object* pInheritable = nullptr;
- //1 MediaBox //required
- if (!pCurPageDict->KeyExist("MediaBox")) {
- pInheritable = PageDictGetInheritableTag(pSrcPageDict, "MediaBox");
- if (!pInheritable) {
- // Search the "CropBox" from source page dictionary,
- // if not exists,we take the letter size.
- pInheritable = PageDictGetInheritableTag(pSrcPageDict,
- "CropBox");
- if (pInheritable) {
- pCurPageDict->SetAt("MediaBox", pInheritable->Clone());
- } else {
- // Make the default size to be letter size (8.5'x11')
- CPDF_Array* pArray = new CPDF_Array;
- pArray->AddNumber(0);
- pArray->AddNumber(0);
- pArray->AddNumber(612);
- pArray->AddNumber(792);
- pCurPageDict->SetAt("MediaBox", pArray);
- }
- } else {
- pCurPageDict->SetAt("MediaBox", pInheritable->Clone());
- }
- }
- //2 Resources //required
- if (!pCurPageDict->KeyExist("Resources")) {
- pInheritable = PageDictGetInheritableTag(pSrcPageDict, "Resources");
- if (!pInheritable)
- return FALSE;
- pCurPageDict->SetAt("Resources", pInheritable->Clone());
- }
- //3 CropBox //Optional
- if (!pCurPageDict->KeyExist("CropBox")) {
- pInheritable = PageDictGetInheritableTag(pSrcPageDict, "CropBox");
- if (pInheritable)
- pCurPageDict->SetAt("CropBox", pInheritable->Clone());
- }
- //4 Rotate //Optional
- if (!pCurPageDict->KeyExist("Rotate")) {
- pInheritable = PageDictGetInheritableTag(pSrcPageDict, "Rotate");
- if (pInheritable)
- pCurPageDict->SetAt("Rotate", pInheritable->Clone());
- }
+ CPDF_Object* pType = pDict->GetElement("Type")->GetDirect();
+ if (!pType || pType->GetType() != PDFOBJ_NAME)
+ return nullptr;
+ if (pType->GetString().Compare("Page"))
+ return nullptr;
- /////////////////////////////////////////////
- //Update the reference
- FX_DWORD dwOldPageObj = pSrcPageDict->GetObjNum();
- FX_DWORD dwNewPageObj = pCurPageDict->GetObjNum();
+ CPDF_Object* pParent = pDict->GetElement("Parent")->GetDirect();
+ if (!pParent || pParent->GetType() != PDFOBJ_DICTIONARY)
+ return nullptr;
- (*pObjNumberMap)[dwOldPageObj] = dwNewPageObj;
+ if (pDict->KeyExist((const char*)nSrctag))
+ return pDict->GetElement((const char*)nSrctag);
- UpdateReference(pCurPageDict, pDestPDFDoc, pObjNumberMap.get());
- ++curpage;
+ CPDF_Dictionary* pp = (CPDF_Dictionary*)pParent;
+ while (pp) {
+ if (pp->KeyExist((const char*)nSrctag)) {
+ return pp->GetElement((const char*)nSrctag);
}
-
- return TRUE;
-}
-
-CPDF_Object* CPDF_PageOrganizer::PageDictGetInheritableTag(
- CPDF_Dictionary* pDict,
- CFX_ByteString nSrctag)
-{
- if (!pDict || nSrctag.IsEmpty())
- return nullptr;
- if (!pDict->KeyExist("Parent") || !pDict->KeyExist("Type"))
- return nullptr;
-
- CPDF_Object* pType = pDict->GetElement("Type")->GetDirect();
- if (!pType || pType->GetType() != PDFOBJ_NAME)
- return nullptr;
- if (pType->GetString().Compare("Page"))
- return nullptr;
-
- CPDF_Object* pParent = pDict->GetElement("Parent")->GetDirect();
- if (!pParent || pParent->GetType() != PDFOBJ_DICTIONARY)
- return nullptr;
-
- if (pDict->KeyExist((const char*)nSrctag))
- return pDict->GetElement((const char*)nSrctag);
-
- CPDF_Dictionary* pp = (CPDF_Dictionary*)pParent;
- while (pp) {
- if (pp->KeyExist((const char*)nSrctag)) {
- return pp->GetElement((const char*)nSrctag);
- }
- if (!pp->KeyExist("Parent")) {
- break;
- }
- pp = (CPDF_Dictionary*)pp->GetElement("Parent")->GetDirect();
- if (pp->GetType() == PDFOBJ_NULL) {
- break;
- }
+ if (!pp->KeyExist("Parent")) {
+ break;
}
+ pp = (CPDF_Dictionary*)pp->GetElement("Parent")->GetDirect();
+ if (pp->GetType() == PDFOBJ_NULL) {
+ break;
+ }
+ }
- return nullptr;
+ return nullptr;
}
FX_BOOL CPDF_PageOrganizer::UpdateReference(CPDF_Object* pObj,
CPDF_Document* pDoc,
- ObjectNumberMap* pObjNumberMap)
-{
- switch (pObj->GetType()) {
- case PDFOBJ_REFERENCE: {
- CPDF_Reference* pReference = (CPDF_Reference*)pObj;
- FX_DWORD newobjnum = GetNewObjId(pDoc, pObjNumberMap, pReference);
- if (newobjnum == 0)
- return FALSE;
- pReference->SetRef(pDoc, newobjnum);
- break;
- }
- case PDFOBJ_DICTIONARY: {
- CPDF_Dictionary* pDict = (CPDF_Dictionary*)pObj;
-
- FX_POSITION pos = pDict->GetStartPos();
- while (pos) {
- CFX_ByteString key("");
- CPDF_Object* pNextObj = pDict->GetNextElement(pos, key);
- if (!FXSYS_strcmp(key, "Parent") ||
- !FXSYS_strcmp(key, "Prev") ||
- !FXSYS_strcmp(key, "First")) {
- continue;
- }
- if (pNextObj) {
- if (!UpdateReference(pNextObj, pDoc, pObjNumberMap))
- pDict->RemoveAt(key);
- } else {
- return FALSE;
- }
- }
- break;
- }
- case PDFOBJ_ARRAY: {
- CPDF_Array* pArray = (CPDF_Array*)pObj;
- FX_DWORD count = pArray->GetCount();
- for (FX_DWORD i = 0; i < count; ++i) {
- CPDF_Object* pNextObj = pArray->GetElement(i);
- if (!pNextObj)
- return FALSE;
- if (!UpdateReference(pNextObj, pDoc, pObjNumberMap))
- return FALSE;
- }
- break;
+ ObjectNumberMap* pObjNumberMap) {
+ switch (pObj->GetType()) {
+ case PDFOBJ_REFERENCE: {
+ CPDF_Reference* pReference = (CPDF_Reference*)pObj;
+ FX_DWORD newobjnum = GetNewObjId(pDoc, pObjNumberMap, pReference);
+ if (newobjnum == 0)
+ return FALSE;
+ pReference->SetRef(pDoc, newobjnum);
+ break;
+ }
+ case PDFOBJ_DICTIONARY: {
+ CPDF_Dictionary* pDict = (CPDF_Dictionary*)pObj;
+
+ FX_POSITION pos = pDict->GetStartPos();
+ while (pos) {
+ CFX_ByteString key("");
+ CPDF_Object* pNextObj = pDict->GetNextElement(pos, key);
+ if (!FXSYS_strcmp(key, "Parent") || !FXSYS_strcmp(key, "Prev") ||
+ !FXSYS_strcmp(key, "First")) {
+ continue;
}
- case PDFOBJ_STREAM: {
- CPDF_Stream* pStream = (CPDF_Stream*)pObj;
- CPDF_Dictionary* pDict = pStream->GetDict();
- if (pDict) {
- if (!UpdateReference(pDict, pDoc, pObjNumberMap))
- return FALSE;
- } else {
- return FALSE;
- }
- break;
+ if (pNextObj) {
+ if (!UpdateReference(pNextObj, pDoc, pObjNumberMap))
+ pDict->RemoveAt(key);
+ } else {
+ return FALSE;
}
- default:
- break;
+ }
+ break;
+ }
+ case PDFOBJ_ARRAY: {
+ CPDF_Array* pArray = (CPDF_Array*)pObj;
+ FX_DWORD count = pArray->GetCount();
+ for (FX_DWORD i = 0; i < count; ++i) {
+ CPDF_Object* pNextObj = pArray->GetElement(i);
+ if (!pNextObj)
+ return FALSE;
+ if (!UpdateReference(pNextObj, pDoc, pObjNumberMap))
+ return FALSE;
+ }
+ break;
}
+ case PDFOBJ_STREAM: {
+ CPDF_Stream* pStream = (CPDF_Stream*)pObj;
+ CPDF_Dictionary* pDict = pStream->GetDict();
+ if (pDict) {
+ if (!UpdateReference(pDict, pDoc, pObjNumberMap))
+ return FALSE;
+ } else {
+ return FALSE;
+ }
+ break;
+ }
+ default:
+ break;
+ }
- return TRUE;
+ return TRUE;
}
FX_DWORD CPDF_PageOrganizer::GetNewObjId(CPDF_Document* pDoc,
ObjectNumberMap* pObjNumberMap,
- CPDF_Reference* pRef)
-{
- if (!pRef)
- return 0;
-
- FX_DWORD dwObjnum = pRef->GetRefObjNum();
- FX_DWORD dwNewObjNum = 0;
- const auto it = pObjNumberMap->find(dwObjnum);
- if (it != pObjNumberMap->end())
- dwNewObjNum = it->second;
- if (dwNewObjNum)
- return dwNewObjNum;
-
- CPDF_Object* pDirect = pRef->GetDirect();
- if (!pDirect)
- return 0;
-
- CPDF_Object* pClone = pDirect->Clone();
- if (!pClone)
- return 0;
-
- if (pClone->GetType() == PDFOBJ_DICTIONARY) {
- CPDF_Dictionary* pDictClone = (CPDF_Dictionary*)pClone;
- if (pDictClone->KeyExist("Type")) {
- CFX_ByteString strType = pDictClone->GetString("Type");
- if (!FXSYS_stricmp(strType, "Pages")) {
- pDictClone->Release();
- return 4;
- }
- if (!FXSYS_stricmp(strType, "Page")) {
- pDictClone->Release();
- return 0;
- }
- }
- }
- dwNewObjNum = pDoc->AddIndirectObject(pClone);
- (*pObjNumberMap)[dwObjnum] = dwNewObjNum;
+ CPDF_Reference* pRef) {
+ if (!pRef)
+ return 0;
+
+ FX_DWORD dwObjnum = pRef->GetRefObjNum();
+ FX_DWORD dwNewObjNum = 0;
+ const auto it = pObjNumberMap->find(dwObjnum);
+ if (it != pObjNumberMap->end())
+ dwNewObjNum = it->second;
+ if (dwNewObjNum)
+ return dwNewObjNum;
- if (!UpdateReference(pClone, pDoc, pObjNumberMap)) {
- pClone->Release();
+ CPDF_Object* pDirect = pRef->GetDirect();
+ if (!pDirect)
+ return 0;
+
+ CPDF_Object* pClone = pDirect->Clone();
+ if (!pClone)
+ return 0;
+
+ if (pClone->GetType() == PDFOBJ_DICTIONARY) {
+ CPDF_Dictionary* pDictClone = (CPDF_Dictionary*)pClone;
+ if (pDictClone->KeyExist("Type")) {
+ CFX_ByteString strType = pDictClone->GetString("Type");
+ if (!FXSYS_stricmp(strType, "Pages")) {
+ pDictClone->Release();
+ return 4;
+ }
+ if (!FXSYS_stricmp(strType, "Page")) {
+ pDictClone->Release();
return 0;
+ }
}
- return dwNewObjNum;
+ }
+ dwNewObjNum = pDoc->AddIndirectObject(pClone);
+ (*pObjNumberMap)[dwObjnum] = dwNewObjNum;
+
+ if (!UpdateReference(pClone, pDoc, pObjNumberMap)) {
+ pClone->Release();
+ return 0;
+ }
+ return dwNewObjNum;
}
FPDF_BOOL ParserPageRangeString(CFX_ByteString rangstring,
CFX_WordArray* pageArray,
- int nCount)
-{
- if (rangstring.GetLength() != 0) {
- rangstring.Remove(' ');
- int nLength = rangstring.GetLength();
- CFX_ByteString cbCompareString("0123456789-,");
- for (int i = 0; i < nLength; ++i) {
- if (cbCompareString.Find(rangstring[i]) == -1)
- return FALSE;
+ int nCount) {
+ if (rangstring.GetLength() != 0) {
+ rangstring.Remove(' ');
+ int nLength = rangstring.GetLength();
+ CFX_ByteString cbCompareString("0123456789-,");
+ for (int i = 0; i < nLength; ++i) {
+ if (cbCompareString.Find(rangstring[i]) == -1)
+ return FALSE;
+ }
+ CFX_ByteString cbMidRange;
+ int nStringFrom = 0;
+ int nStringTo = 0;
+ while (nStringTo < nLength) {
+ nStringTo = rangstring.Find(',', nStringFrom);
+ if (nStringTo == -1)
+ nStringTo = nLength;
+ cbMidRange = rangstring.Mid(nStringFrom, nStringTo - nStringFrom);
+ int nMid = cbMidRange.Find('-');
+ if (nMid == -1) {
+ long lPageNum = atol(cbMidRange);
+ if (lPageNum <= 0 || lPageNum > nCount)
+ return FALSE;
+ pageArray->Add((FX_WORD)lPageNum);
+ } else {
+ int nStartPageNum = atol(cbMidRange.Mid(0, nMid));
+ if (nStartPageNum == 0)
+ return FALSE;
+
+ ++nMid;
+ int nEnd = cbMidRange.GetLength() - nMid;
+ if (nEnd == 0)
+ return FALSE;
+
+ int nEndPageNum = atol(cbMidRange.Mid(nMid, nEnd));
+ if (nStartPageNum < 0 || nStartPageNum > nEndPageNum ||
+ nEndPageNum > nCount) {
+ return FALSE;
}
- CFX_ByteString cbMidRange;
- int nStringFrom = 0;
- int nStringTo = 0;
- while (nStringTo < nLength) {
- nStringTo = rangstring.Find(',', nStringFrom);
- if (nStringTo == -1)
- nStringTo = nLength;
- cbMidRange = rangstring.Mid(nStringFrom, nStringTo - nStringFrom);
- int nMid = cbMidRange.Find('-');
- if (nMid == -1) {
- long lPageNum = atol(cbMidRange);
- if (lPageNum <= 0 || lPageNum > nCount)
- return FALSE;
- pageArray->Add((FX_WORD)lPageNum);
- } else {
- int nStartPageNum = atol(cbMidRange.Mid(0, nMid));
- if (nStartPageNum == 0)
- return FALSE;
-
- ++nMid;
- int nEnd = cbMidRange.GetLength() - nMid;
- if (nEnd == 0)
- return FALSE;
-
- int nEndPageNum = atol(cbMidRange.Mid(nMid, nEnd));
- if (nStartPageNum < 0 ||
- nStartPageNum >nEndPageNum ||
- nEndPageNum > nCount) {
- return FALSE;
- }
- for (int i = nStartPageNum; i <= nEndPageNum; ++i) {
- pageArray->Add(i);
- }
- }
- nStringFrom = nStringTo + 1;
+ for (int i = nStartPageNum; i <= nEndPageNum; ++i) {
+ pageArray->Add(i);
}
+ }
+ nStringFrom = nStringTo + 1;
}
- return TRUE;
+ }
+ return TRUE;
}
DLLEXPORT FPDF_BOOL STDCALL FPDF_ImportPages(FPDF_DOCUMENT dest_doc,
FPDF_DOCUMENT src_doc,
FPDF_BYTESTRING pagerange,
- int index)
-{
- if (!dest_doc || !src_doc)
- return FALSE;
-
- CFX_WordArray pageArray;
- CPDF_Document* pSrcDoc = (CPDF_Document*)src_doc;
- int nCount = pSrcDoc->GetPageCount();
- if (pagerange) {
- if (!ParserPageRangeString(pagerange,&pageArray,nCount))
- return FALSE;
- } else {
- for (int i = 1; i <= nCount; ++i) {
- pageArray.Add(i);
- }
+ int index) {
+ if (!dest_doc || !src_doc)
+ return FALSE;
+
+ CFX_WordArray pageArray;
+ CPDF_Document* pSrcDoc = (CPDF_Document*)src_doc;
+ int nCount = pSrcDoc->GetPageCount();
+ if (pagerange) {
+ if (!ParserPageRangeString(pagerange, &pageArray, nCount))
+ return FALSE;
+ } else {
+ for (int i = 1; i <= nCount; ++i) {
+ pageArray.Add(i);
}
+ }
- CPDF_Document* pDestDoc = (CPDF_Document*)dest_doc;
- CPDF_PageOrganizer pageOrg;
+ CPDF_Document* pDestDoc = (CPDF_Document*)dest_doc;
+ CPDF_PageOrganizer pageOrg;
- pageOrg.PDFDocInit(pDestDoc, pSrcDoc);
+ pageOrg.PDFDocInit(pDestDoc, pSrcDoc);
- return pageOrg.ExportPage(pSrcDoc,&pageArray,pDestDoc,index);
+ return pageOrg.ExportPage(pSrcDoc, &pageArray, pDestDoc, index);
}
DLLEXPORT FPDF_BOOL STDCALL FPDF_CopyViewerPreferences(FPDF_DOCUMENT dest_doc,
- FPDF_DOCUMENT src_doc)
-{
- if (!src_doc || !dest_doc)
- return false;
-
- CPDF_Document* pSrcDoc = (CPDF_Document*)src_doc;
- CPDF_Dictionary* pSrcDict = pSrcDoc->GetRoot();
- pSrcDict = pSrcDict->GetDict(FX_BSTRC("ViewerPreferences"));;
- if (!pSrcDict)
- return FALSE;
-
- CPDF_Document* pDstDoc = (CPDF_Document*)dest_doc;
- CPDF_Dictionary* pDstDict = pDstDoc->GetRoot();
- if (!pDstDict)
- return FALSE;
- pDstDict->SetAt(FX_BSTRC("ViewerPreferences"), pSrcDict->Clone(TRUE));
- return TRUE;
+ FPDF_DOCUMENT src_doc) {
+ if (!src_doc || !dest_doc)
+ return false;
+
+ CPDF_Document* pSrcDoc = (CPDF_Document*)src_doc;
+ CPDF_Dictionary* pSrcDict = pSrcDoc->GetRoot();
+ pSrcDict = pSrcDict->GetDict(FX_BSTRC("ViewerPreferences"));
+ ;
+ if (!pSrcDict)
+ return FALSE;
+
+ CPDF_Document* pDstDoc = (CPDF_Document*)dest_doc;
+ CPDF_Dictionary* pDstDict = pDstDoc->GetRoot();
+ if (!pDstDict)
+ return FALSE;
+ pDstDict->SetAt(FX_BSTRC("ViewerPreferences"), pSrcDict->Clone(TRUE));
+ return TRUE;
}
diff --git a/fpdfsdk/src/fpdfsave.cpp b/fpdfsdk/src/fpdfsave.cpp
index ddd6f6e90e..54c9253d2e 100644
--- a/fpdfsdk/src/fpdfsave.cpp
+++ b/fpdfsdk/src/fpdfsave.cpp
@@ -14,80 +14,75 @@
#include <ctime>
#endif
-class CFX_IFileWrite final : public IFX_StreamWrite
-{
-
-public:
- CFX_IFileWrite();
- FX_BOOL Init( FPDF_FILEWRITE * pFileWriteStruct );
- virtual FX_BOOL WriteBlock(const void* pData, size_t size) override;
- virtual void Release() override {}
-
-protected:
- FPDF_FILEWRITE* m_pFileWriteStruct;
+class CFX_IFileWrite final : public IFX_StreamWrite {
+ public:
+ CFX_IFileWrite();
+ FX_BOOL Init(FPDF_FILEWRITE* pFileWriteStruct);
+ virtual FX_BOOL WriteBlock(const void* pData, size_t size) override;
+ virtual void Release() override {}
+
+ protected:
+ FPDF_FILEWRITE* m_pFileWriteStruct;
};
-CFX_IFileWrite::CFX_IFileWrite()
-{
- m_pFileWriteStruct = NULL;
+CFX_IFileWrite::CFX_IFileWrite() {
+ m_pFileWriteStruct = NULL;
}
-FX_BOOL CFX_IFileWrite::Init( FPDF_FILEWRITE * pFileWriteStruct )
-{
- if (!pFileWriteStruct)
- return FALSE;
+FX_BOOL CFX_IFileWrite::Init(FPDF_FILEWRITE* pFileWriteStruct) {
+ if (!pFileWriteStruct)
+ return FALSE;
- m_pFileWriteStruct = pFileWriteStruct;
- return TRUE;
+ m_pFileWriteStruct = pFileWriteStruct;
+ return TRUE;
}
-FX_BOOL CFX_IFileWrite::WriteBlock(const void* pData, size_t size)
-{
- if (!m_pFileWriteStruct)
- return FALSE;
+FX_BOOL CFX_IFileWrite::WriteBlock(const void* pData, size_t size) {
+ if (!m_pFileWriteStruct)
+ return FALSE;
- m_pFileWriteStruct->WriteBlock( m_pFileWriteStruct, pData, size );
- return TRUE;
+ m_pFileWriteStruct->WriteBlock(m_pFileWriteStruct, pData, size);
+ return TRUE;
}
-FPDF_BOOL _FPDF_Doc_Save(FPDF_DOCUMENT document,FPDF_FILEWRITE * pFileWrite,FPDF_DWORD flags, FPDF_BOOL bSetVersion,
- int fileVerion)
-{
- CPDF_Document* pDoc = (CPDF_Document*)document;
- if (!pDoc)
- return 0;
-
- if ( flags < FPDF_INCREMENTAL || flags > FPDF_REMOVE_SECURITY )
- {
- flags = 0;
- }
-
- CPDF_Creator FileMaker(pDoc);
- if(bSetVersion)
- FileMaker.SetFileVersion(fileVerion);
- if(flags == FPDF_REMOVE_SECURITY)
- {
- flags = 0;
- FileMaker.RemoveSecurity();
- }
- CFX_IFileWrite* pStreamWrite = NULL;
- FX_BOOL bRet;
- pStreamWrite = new CFX_IFileWrite;
- pStreamWrite->Init( pFileWrite );
- bRet = FileMaker.Create(pStreamWrite, flags);
- delete pStreamWrite;
- return bRet;
+FPDF_BOOL _FPDF_Doc_Save(FPDF_DOCUMENT document,
+ FPDF_FILEWRITE* pFileWrite,
+ FPDF_DWORD flags,
+ FPDF_BOOL bSetVersion,
+ int fileVerion) {
+ CPDF_Document* pDoc = (CPDF_Document*)document;
+ if (!pDoc)
+ return 0;
+
+ if (flags < FPDF_INCREMENTAL || flags > FPDF_REMOVE_SECURITY) {
+ flags = 0;
+ }
+
+ CPDF_Creator FileMaker(pDoc);
+ if (bSetVersion)
+ FileMaker.SetFileVersion(fileVerion);
+ if (flags == FPDF_REMOVE_SECURITY) {
+ flags = 0;
+ FileMaker.RemoveSecurity();
+ }
+ CFX_IFileWrite* pStreamWrite = NULL;
+ FX_BOOL bRet;
+ pStreamWrite = new CFX_IFileWrite;
+ pStreamWrite->Init(pFileWrite);
+ bRet = FileMaker.Create(pStreamWrite, flags);
+ delete pStreamWrite;
+ return bRet;
}
-DLLEXPORT FPDF_BOOL STDCALL FPDF_SaveAsCopy( FPDF_DOCUMENT document,FPDF_FILEWRITE * pFileWrite,
- FPDF_DWORD flags )
-{
- return _FPDF_Doc_Save(document, pFileWrite, flags, FALSE , 0);
+DLLEXPORT FPDF_BOOL STDCALL FPDF_SaveAsCopy(FPDF_DOCUMENT document,
+ FPDF_FILEWRITE* pFileWrite,
+ FPDF_DWORD flags) {
+ return _FPDF_Doc_Save(document, pFileWrite, flags, FALSE, 0);
}
-
-DLLEXPORT FPDF_BOOL STDCALL FPDF_SaveWithVersion( FPDF_DOCUMENT document,FPDF_FILEWRITE * pFileWrite,
- FPDF_DWORD flags, int fileVersion)
-{
- return _FPDF_Doc_Save(document, pFileWrite, flags, TRUE , fileVersion);
+DLLEXPORT FPDF_BOOL STDCALL FPDF_SaveWithVersion(FPDF_DOCUMENT document,
+ FPDF_FILEWRITE* pFileWrite,
+ FPDF_DWORD flags,
+ int fileVersion) {
+ return _FPDF_Doc_Save(document, pFileWrite, flags, TRUE, fileVersion);
}
diff --git a/fpdfsdk/src/fpdftext.cpp b/fpdfsdk/src/fpdftext.cpp
index 4a6571531c..0761ffa91a 100644
--- a/fpdfsdk/src/fpdftext.cpp
+++ b/fpdfsdk/src/fpdftext.cpp
@@ -12,236 +12,276 @@
#include <tchar.h>
#endif
- // jabdelmalek: commented out to build on Linux. Not used.
- // extern HANDLE g_hModule;
-
-DLLEXPORT FPDF_TEXTPAGE STDCALL FPDFText_LoadPage(FPDF_PAGE page)
-{
- if (!page) return NULL;
- IPDF_TextPage* textpage=NULL;
- CPDF_ViewerPreferences viewRef(((CPDF_Page*)page)->m_pDocument);
- textpage=IPDF_TextPage::CreateTextPage((CPDF_Page*)page,viewRef.IsDirectionR2L());
- textpage->ParseTextPage();
- return textpage;
-}
-DLLEXPORT void STDCALL FPDFText_ClosePage(FPDF_TEXTPAGE text_page)
-{
- delete (IPDF_TextPage*)text_page;
-}
-DLLEXPORT int STDCALL FPDFText_CountChars(FPDF_TEXTPAGE text_page)
-{
- if (!text_page) return -1;
- IPDF_TextPage* textpage=(IPDF_TextPage*)text_page;
- return textpage->CountChars();
-}
-DLLEXPORT unsigned int STDCALL FPDFText_GetUnicode(FPDF_TEXTPAGE text_page, int index)
-{
- if (!text_page) return -1;
- IPDF_TextPage* textpage=(IPDF_TextPage*)text_page;
-
- if (index<0 || index>=textpage->CountChars()) return 0;
+// jabdelmalek: commented out to build on Linux. Not used.
+// extern HANDLE g_hModule;
- FPDF_CHAR_INFO charinfo;
- textpage->GetCharInfo(index,charinfo);
- return charinfo.m_Unicode;
+DLLEXPORT FPDF_TEXTPAGE STDCALL FPDFText_LoadPage(FPDF_PAGE page) {
+ if (!page)
+ return NULL;
+ IPDF_TextPage* textpage = NULL;
+ CPDF_ViewerPreferences viewRef(((CPDF_Page*)page)->m_pDocument);
+ textpage =
+ IPDF_TextPage::CreateTextPage((CPDF_Page*)page, viewRef.IsDirectionR2L());
+ textpage->ParseTextPage();
+ return textpage;
}
-DLLEXPORT double STDCALL FPDFText_GetFontSize(FPDF_TEXTPAGE text_page, int index)
-{
- if (!text_page) return 0;
- IPDF_TextPage* textpage=(IPDF_TextPage*)text_page;
+DLLEXPORT void STDCALL FPDFText_ClosePage(FPDF_TEXTPAGE text_page) {
+ delete (IPDF_TextPage*)text_page;
+}
+DLLEXPORT int STDCALL FPDFText_CountChars(FPDF_TEXTPAGE text_page) {
+ if (!text_page)
+ return -1;
+ IPDF_TextPage* textpage = (IPDF_TextPage*)text_page;
+ return textpage->CountChars();
+}
+DLLEXPORT unsigned int STDCALL FPDFText_GetUnicode(FPDF_TEXTPAGE text_page,
+ int index) {
+ if (!text_page)
+ return -1;
+ IPDF_TextPage* textpage = (IPDF_TextPage*)text_page;
- if (index<0 || index>=textpage->CountChars()) return 0;
+ if (index < 0 || index >= textpage->CountChars())
+ return 0;
- FPDF_CHAR_INFO charinfo;
- textpage->GetCharInfo(index,charinfo);
- return charinfo.m_FontSize;
+ FPDF_CHAR_INFO charinfo;
+ textpage->GetCharInfo(index, charinfo);
+ return charinfo.m_Unicode;
}
+DLLEXPORT double STDCALL FPDFText_GetFontSize(FPDF_TEXTPAGE text_page,
+ int index) {
+ if (!text_page)
+ return 0;
+ IPDF_TextPage* textpage = (IPDF_TextPage*)text_page;
-DLLEXPORT void STDCALL FPDFText_GetCharBox(FPDF_TEXTPAGE text_page, int index,double* left,
- double* right, double* bottom, double* top)
-{
- if (!text_page) return;
- IPDF_TextPage* textpage=(IPDF_TextPage*)text_page;
+ if (index < 0 || index >= textpage->CountChars())
+ return 0;
- if (index<0 || index>=textpage->CountChars()) return ;
- FPDF_CHAR_INFO charinfo;
- textpage->GetCharInfo(index,charinfo);
- *left=charinfo.m_CharBox.left;
- *right=charinfo.m_CharBox.right;
- *bottom=charinfo.m_CharBox.bottom;
- *top=charinfo.m_CharBox.top;
+ FPDF_CHAR_INFO charinfo;
+ textpage->GetCharInfo(index, charinfo);
+ return charinfo.m_FontSize;
}
-//select
-DLLEXPORT int STDCALL FPDFText_GetCharIndexAtPos(FPDF_TEXTPAGE text_page,double x,double y,double xTorelance,double yTorelance)
-{
- if (!text_page) return -3;
- IPDF_TextPage* textpage=(IPDF_TextPage*)text_page;
- return textpage->GetIndexAtPos((FX_FLOAT)x,(FX_FLOAT)y,(FX_FLOAT)xTorelance,(FX_FLOAT)yTorelance);
+DLLEXPORT void STDCALL FPDFText_GetCharBox(FPDF_TEXTPAGE text_page,
+ int index,
+ double* left,
+ double* right,
+ double* bottom,
+ double* top) {
+ if (!text_page)
+ return;
+ IPDF_TextPage* textpage = (IPDF_TextPage*)text_page;
+
+ if (index < 0 || index >= textpage->CountChars())
+ return;
+ FPDF_CHAR_INFO charinfo;
+ textpage->GetCharInfo(index, charinfo);
+ *left = charinfo.m_CharBox.left;
+ *right = charinfo.m_CharBox.right;
+ *bottom = charinfo.m_CharBox.bottom;
+ *top = charinfo.m_CharBox.top;
}
-DLLEXPORT int STDCALL FPDFText_GetText(FPDF_TEXTPAGE text_page,int start,int count,unsigned short* result)
-{
- if (!text_page) return 0;
- IPDF_TextPage* textpage=(IPDF_TextPage*)text_page;
+// select
+DLLEXPORT int STDCALL FPDFText_GetCharIndexAtPos(FPDF_TEXTPAGE text_page,
+ double x,
+ double y,
+ double xTorelance,
+ double yTorelance) {
+ if (!text_page)
+ return -3;
+ IPDF_TextPage* textpage = (IPDF_TextPage*)text_page;
+ return textpage->GetIndexAtPos((FX_FLOAT)x, (FX_FLOAT)y, (FX_FLOAT)xTorelance,
+ (FX_FLOAT)yTorelance);
+}
- if (start>=textpage->CountChars()) return 0;
+DLLEXPORT int STDCALL FPDFText_GetText(FPDF_TEXTPAGE text_page,
+ int start,
+ int count,
+ unsigned short* result) {
+ if (!text_page)
+ return 0;
+ IPDF_TextPage* textpage = (IPDF_TextPage*)text_page;
- CFX_WideString str=textpage->GetPageText(start,count);
- if(str.GetLength()>count)
- str = str.Left(count);
+ if (start >= textpage->CountChars())
+ return 0;
- CFX_ByteString cbUTF16str = str.UTF16LE_Encode();
- FXSYS_memcpy(result,cbUTF16str.GetBuffer(cbUTF16str.GetLength()),cbUTF16str.GetLength());
- cbUTF16str.ReleaseBuffer(cbUTF16str.GetLength());
+ CFX_WideString str = textpage->GetPageText(start, count);
+ if (str.GetLength() > count)
+ str = str.Left(count);
- return cbUTF16str.GetLength()/sizeof(unsigned short);
-}
+ CFX_ByteString cbUTF16str = str.UTF16LE_Encode();
+ FXSYS_memcpy(result, cbUTF16str.GetBuffer(cbUTF16str.GetLength()),
+ cbUTF16str.GetLength());
+ cbUTF16str.ReleaseBuffer(cbUTF16str.GetLength());
-DLLEXPORT int STDCALL FPDFText_CountRects(FPDF_TEXTPAGE text_page,int start,int count)
-{
- if (!text_page) return 0;
- IPDF_TextPage* textpage=(IPDF_TextPage*)text_page;
- return textpage->CountRects(start,count);
+ return cbUTF16str.GetLength() / sizeof(unsigned short);
+}
+DLLEXPORT int STDCALL FPDFText_CountRects(FPDF_TEXTPAGE text_page,
+ int start,
+ int count) {
+ if (!text_page)
+ return 0;
+ IPDF_TextPage* textpage = (IPDF_TextPage*)text_page;
+ return textpage->CountRects(start, count);
}
-DLLEXPORT void STDCALL FPDFText_GetRect(FPDF_TEXTPAGE text_page,int rect_index, double* left,double* top,
- double* right, double* bottom)
-{
- if (!text_page) return;
- IPDF_TextPage* textpage=(IPDF_TextPage*)text_page;
- CFX_FloatRect rect;
- textpage->GetRect(rect_index,rect.left,rect.top,rect.right,rect.bottom);
- *left=rect.left;
- *top=rect.top;
- *right=rect.right;
- *bottom=rect.bottom;
+DLLEXPORT void STDCALL FPDFText_GetRect(FPDF_TEXTPAGE text_page,
+ int rect_index,
+ double* left,
+ double* top,
+ double* right,
+ double* bottom) {
+ if (!text_page)
+ return;
+ IPDF_TextPage* textpage = (IPDF_TextPage*)text_page;
+ CFX_FloatRect rect;
+ textpage->GetRect(rect_index, rect.left, rect.top, rect.right, rect.bottom);
+ *left = rect.left;
+ *top = rect.top;
+ *right = rect.right;
+ *bottom = rect.bottom;
}
-DLLEXPORT int STDCALL FPDFText_GetBoundedText(FPDF_TEXTPAGE text_page,double left, double top,
- double right, double bottom,unsigned short* buffer,int buflen)
-{
- if (!text_page) return 0;
- IPDF_TextPage* textpage=(IPDF_TextPage*)text_page;
- CFX_FloatRect rect((FX_FLOAT)left,(FX_FLOAT)bottom,(FX_FLOAT)right,(FX_FLOAT)top);
- CFX_WideString str=textpage->GetTextByRect(rect);
-
- if (buflen<=0 || buffer==NULL)
- {
- return str.GetLength();
- }
+DLLEXPORT int STDCALL FPDFText_GetBoundedText(FPDF_TEXTPAGE text_page,
+ double left,
+ double top,
+ double right,
+ double bottom,
+ unsigned short* buffer,
+ int buflen) {
+ if (!text_page)
+ return 0;
+ IPDF_TextPage* textpage = (IPDF_TextPage*)text_page;
+ CFX_FloatRect rect((FX_FLOAT)left, (FX_FLOAT)bottom, (FX_FLOAT)right,
+ (FX_FLOAT)top);
+ CFX_WideString str = textpage->GetTextByRect(rect);
- CFX_ByteString cbUTF16Str = str.UTF16LE_Encode();
- int len = cbUTF16Str.GetLength()/sizeof(unsigned short);
- int size = buflen > len ? len : buflen;
- FXSYS_memcpy(buffer,cbUTF16Str.GetBuffer(size*sizeof(unsigned short)),size*sizeof(unsigned short));
- cbUTF16Str.ReleaseBuffer(size*sizeof(unsigned short));
+ if (buflen <= 0 || buffer == NULL) {
+ return str.GetLength();
+ }
- return size;
+ CFX_ByteString cbUTF16Str = str.UTF16LE_Encode();
+ int len = cbUTF16Str.GetLength() / sizeof(unsigned short);
+ int size = buflen > len ? len : buflen;
+ FXSYS_memcpy(buffer, cbUTF16Str.GetBuffer(size * sizeof(unsigned short)),
+ size * sizeof(unsigned short));
+ cbUTF16Str.ReleaseBuffer(size * sizeof(unsigned short));
+ return size;
}
-//Search
+// Search
//-1 for end
-DLLEXPORT FPDF_SCHHANDLE STDCALL FPDFText_FindStart(FPDF_TEXTPAGE text_page,FPDF_WIDESTRING findwhat,unsigned long flags,int start_index)
-{
- if (!text_page) return NULL;
- IPDF_TextPageFind* textpageFind=NULL;
- textpageFind=IPDF_TextPageFind::CreatePageFind((IPDF_TextPage*)text_page);
- FX_STRSIZE len = CFX_WideString::WStringLength(findwhat);
- textpageFind->FindFirst(CFX_WideString::FromUTF16LE(findwhat, len),flags,start_index);
- return textpageFind;
-}
-DLLEXPORT FPDF_BOOL STDCALL FPDFText_FindNext(FPDF_SCHHANDLE handle)
-{
- if (!handle) return FALSE;
- IPDF_TextPageFind* textpageFind=(IPDF_TextPageFind*)handle;
- return textpageFind->FindNext();
-}
-DLLEXPORT FPDF_BOOL STDCALL FPDFText_FindPrev(FPDF_SCHHANDLE handle)
-{
- if (!handle) return FALSE;
- IPDF_TextPageFind* textpageFind=(IPDF_TextPageFind*)handle;
- return textpageFind->FindPrev();
-}
-DLLEXPORT int STDCALL FPDFText_GetSchResultIndex(FPDF_SCHHANDLE handle)
-{
- if (!handle) return 0;
- IPDF_TextPageFind* textpageFind=(IPDF_TextPageFind*)handle;
- return textpageFind->GetCurOrder();
-}
-DLLEXPORT int STDCALL FPDFText_GetSchCount(FPDF_SCHHANDLE handle)
-{
- if (!handle) return 0;
- IPDF_TextPageFind* textpageFind=(IPDF_TextPageFind*)handle;
- return textpageFind->GetMatchedCount();
-}
-DLLEXPORT void STDCALL FPDFText_FindClose(FPDF_SCHHANDLE handle)
-{
- if (!handle) return;
- IPDF_TextPageFind* textpageFind=(IPDF_TextPageFind*)handle;
- delete textpageFind;
- handle=NULL;
-}
-
-//web link
-DLLEXPORT FPDF_PAGELINK STDCALL FPDFLink_LoadWebLinks(FPDF_TEXTPAGE text_page)
-{
- if (!text_page) return NULL;
- IPDF_LinkExtract* pageLink=NULL;
- pageLink=IPDF_LinkExtract::CreateLinkExtract();
- pageLink->ExtractLinks((IPDF_TextPage*)text_page);
- return pageLink;
-}
-DLLEXPORT int STDCALL FPDFLink_CountWebLinks(FPDF_PAGELINK link_page)
-{
- if (!link_page) return 0;
- IPDF_LinkExtract* pageLink=(IPDF_LinkExtract*)link_page;
- return pageLink->CountLinks();
-}
-DLLEXPORT int STDCALL FPDFLink_GetURL(FPDF_PAGELINK link_page,int link_index, unsigned short* buffer,int buflen)
-{
- if (!link_page) return 0;
- IPDF_LinkExtract* pageLink=(IPDF_LinkExtract*)link_page;
- CFX_WideString url=pageLink->GetURL(link_index);
-
- CFX_ByteString cbUTF16URL = url.UTF16LE_Encode();
- int len= cbUTF16URL.GetLength()/sizeof(unsigned short);
- if (buffer==NULL || buflen<=0)
- return len;
- int size=len<buflen ? len :buflen;
- if (size>0)
- {
- FXSYS_memcpy(buffer,cbUTF16URL.GetBuffer(size*sizeof(unsigned short)),size*sizeof(unsigned short));
- cbUTF16URL.ReleaseBuffer(size*sizeof(unsigned short));
- }
- return size;
-}
-DLLEXPORT int STDCALL FPDFLink_CountRects(FPDF_PAGELINK link_page,int link_index)
-{
- if (!link_page) return 0;
- IPDF_LinkExtract* pageLink=(IPDF_LinkExtract*)link_page;
- CFX_RectArray rectArray;
- pageLink->GetRects(link_index,rectArray);
- return rectArray.GetSize();
-}
-DLLEXPORT void STDCALL FPDFLink_GetRect(FPDF_PAGELINK link_page,int link_index, int rect_index, double* left,
- double* top,double* right, double* bottom)
-{
- if (!link_page) return;
- IPDF_LinkExtract* pageLink=(IPDF_LinkExtract*)link_page;
- CFX_RectArray rectArray;
- pageLink->GetRects(link_index,rectArray);
- if (rect_index >= 0 && rect_index < rectArray.GetSize()) {
- CFX_FloatRect rect=rectArray.GetAt(rect_index);
- *left=rect.left;
- *right=rect.right;
- *top=rect.top;
- *bottom=rect.bottom;
- }
-}
-DLLEXPORT void STDCALL FPDFLink_CloseWebLinks(FPDF_PAGELINK link_page)
-{
- delete (IPDF_LinkExtract*)link_page;
+DLLEXPORT FPDF_SCHHANDLE STDCALL FPDFText_FindStart(FPDF_TEXTPAGE text_page,
+ FPDF_WIDESTRING findwhat,
+ unsigned long flags,
+ int start_index) {
+ if (!text_page)
+ return NULL;
+ IPDF_TextPageFind* textpageFind = NULL;
+ textpageFind = IPDF_TextPageFind::CreatePageFind((IPDF_TextPage*)text_page);
+ FX_STRSIZE len = CFX_WideString::WStringLength(findwhat);
+ textpageFind->FindFirst(CFX_WideString::FromUTF16LE(findwhat, len), flags,
+ start_index);
+ return textpageFind;
+}
+DLLEXPORT FPDF_BOOL STDCALL FPDFText_FindNext(FPDF_SCHHANDLE handle) {
+ if (!handle)
+ return FALSE;
+ IPDF_TextPageFind* textpageFind = (IPDF_TextPageFind*)handle;
+ return textpageFind->FindNext();
+}
+DLLEXPORT FPDF_BOOL STDCALL FPDFText_FindPrev(FPDF_SCHHANDLE handle) {
+ if (!handle)
+ return FALSE;
+ IPDF_TextPageFind* textpageFind = (IPDF_TextPageFind*)handle;
+ return textpageFind->FindPrev();
+}
+DLLEXPORT int STDCALL FPDFText_GetSchResultIndex(FPDF_SCHHANDLE handle) {
+ if (!handle)
+ return 0;
+ IPDF_TextPageFind* textpageFind = (IPDF_TextPageFind*)handle;
+ return textpageFind->GetCurOrder();
}
+DLLEXPORT int STDCALL FPDFText_GetSchCount(FPDF_SCHHANDLE handle) {
+ if (!handle)
+ return 0;
+ IPDF_TextPageFind* textpageFind = (IPDF_TextPageFind*)handle;
+ return textpageFind->GetMatchedCount();
+}
+DLLEXPORT void STDCALL FPDFText_FindClose(FPDF_SCHHANDLE handle) {
+ if (!handle)
+ return;
+ IPDF_TextPageFind* textpageFind = (IPDF_TextPageFind*)handle;
+ delete textpageFind;
+ handle = NULL;
+}
+
+// web link
+DLLEXPORT FPDF_PAGELINK STDCALL FPDFLink_LoadWebLinks(FPDF_TEXTPAGE text_page) {
+ if (!text_page)
+ return NULL;
+ IPDF_LinkExtract* pageLink = NULL;
+ pageLink = IPDF_LinkExtract::CreateLinkExtract();
+ pageLink->ExtractLinks((IPDF_TextPage*)text_page);
+ return pageLink;
+}
+DLLEXPORT int STDCALL FPDFLink_CountWebLinks(FPDF_PAGELINK link_page) {
+ if (!link_page)
+ return 0;
+ IPDF_LinkExtract* pageLink = (IPDF_LinkExtract*)link_page;
+ return pageLink->CountLinks();
+}
+DLLEXPORT int STDCALL FPDFLink_GetURL(FPDF_PAGELINK link_page,
+ int link_index,
+ unsigned short* buffer,
+ int buflen) {
+ if (!link_page)
+ return 0;
+ IPDF_LinkExtract* pageLink = (IPDF_LinkExtract*)link_page;
+ CFX_WideString url = pageLink->GetURL(link_index);
+ CFX_ByteString cbUTF16URL = url.UTF16LE_Encode();
+ int len = cbUTF16URL.GetLength() / sizeof(unsigned short);
+ if (buffer == NULL || buflen <= 0)
+ return len;
+ int size = len < buflen ? len : buflen;
+ if (size > 0) {
+ FXSYS_memcpy(buffer, cbUTF16URL.GetBuffer(size * sizeof(unsigned short)),
+ size * sizeof(unsigned short));
+ cbUTF16URL.ReleaseBuffer(size * sizeof(unsigned short));
+ }
+ return size;
+}
+DLLEXPORT int STDCALL FPDFLink_CountRects(FPDF_PAGELINK link_page,
+ int link_index) {
+ if (!link_page)
+ return 0;
+ IPDF_LinkExtract* pageLink = (IPDF_LinkExtract*)link_page;
+ CFX_RectArray rectArray;
+ pageLink->GetRects(link_index, rectArray);
+ return rectArray.GetSize();
+}
+DLLEXPORT void STDCALL FPDFLink_GetRect(FPDF_PAGELINK link_page,
+ int link_index,
+ int rect_index,
+ double* left,
+ double* top,
+ double* right,
+ double* bottom) {
+ if (!link_page)
+ return;
+ IPDF_LinkExtract* pageLink = (IPDF_LinkExtract*)link_page;
+ CFX_RectArray rectArray;
+ pageLink->GetRects(link_index, rectArray);
+ if (rect_index >= 0 && rect_index < rectArray.GetSize()) {
+ CFX_FloatRect rect = rectArray.GetAt(rect_index);
+ *left = rect.left;
+ *right = rect.right;
+ *top = rect.top;
+ *bottom = rect.bottom;
+ }
+}
+DLLEXPORT void STDCALL FPDFLink_CloseWebLinks(FPDF_PAGELINK link_page) {
+ delete (IPDF_LinkExtract*)link_page;
+}
diff --git a/fpdfsdk/src/fpdftext_embeddertest.cpp b/fpdfsdk/src/fpdftext_embeddertest.cpp
index 8384a41944..dd3737a40e 100644
--- a/fpdfsdk/src/fpdftext_embeddertest.cpp
+++ b/fpdfsdk/src/fpdftext_embeddertest.cpp
@@ -25,8 +25,7 @@ static bool check_unsigned_shorts(const char* expected,
} // namespace
-class FPDFTextEmbeddertest : public EmbedderTest {
-};
+class FPDFTextEmbeddertest : public EmbedderTest {};
TEST_F(FPDFTextEmbeddertest, Text) {
EXPECT_TRUE(OpenDocument("testing/resources/hello_world.pdf"));
@@ -63,18 +62,14 @@ TEST_F(FPDFTextEmbeddertest, Text) {
EXPECT_NEAR(49.844, bottom, 0.001);
EXPECT_NEAR(55.520, top, 0.001);
- EXPECT_EQ(4, FPDFText_GetCharIndexAtPos(
- textpage, 42.0, 50.0, 1.0, 1.0));
- EXPECT_EQ(-1, FPDFText_GetCharIndexAtPos(
- textpage, 0.0, 0.0, 1.0, 1.0));
- EXPECT_EQ(-1, FPDFText_GetCharIndexAtPos(
- textpage, 199.0, 199.0, 1.0, 1.0));
+ EXPECT_EQ(4, FPDFText_GetCharIndexAtPos(textpage, 42.0, 50.0, 1.0, 1.0));
+ EXPECT_EQ(-1, FPDFText_GetCharIndexAtPos(textpage, 0.0, 0.0, 1.0, 1.0));
+ EXPECT_EQ(-1, FPDFText_GetCharIndexAtPos(textpage, 199.0, 199.0, 1.0, 1.0));
// Test out of range indicies.
- EXPECT_EQ(-1, FPDFText_GetCharIndexAtPos(
- textpage, 42.0, 10000000.0, 1.0, 1.0));
- EXPECT_EQ(-1, FPDFText_GetCharIndexAtPos(
- textpage, -1.0, 50.0, 1.0, 1.0));
+ EXPECT_EQ(-1,
+ FPDFText_GetCharIndexAtPos(textpage, 42.0, 10000000.0, 1.0, 1.0));
+ EXPECT_EQ(-1, FPDFText_GetCharIndexAtPos(textpage, -1.0, 50.0, 1.0, 1.0));
// Count does not include the terminating NUL in the string literal.
EXPECT_EQ(2, FPDFText_CountRects(textpage, 0, sizeof(expected) - 1));
@@ -110,25 +105,24 @@ TEST_F(FPDFTextEmbeddertest, Text) {
EXPECT_EQ(0.0, bottom);
EXPECT_EQ(0.0, top);
- EXPECT_EQ(9, FPDFText_GetBoundedText(
- textpage, 41.0, 56.0, 82.0, 48.0, 0, 0));
+ EXPECT_EQ(9, FPDFText_GetBoundedText(textpage, 41.0, 56.0, 82.0, 48.0, 0, 0));
// Extract starting at character 4 as above.
memset(fixed_buffer, 0xbd, sizeof(fixed_buffer));
- EXPECT_EQ(1, FPDFText_GetBoundedText(
- textpage, 41.0, 56.0, 82.0, 48.0, fixed_buffer, 1));
+ EXPECT_EQ(1, FPDFText_GetBoundedText(textpage, 41.0, 56.0, 82.0, 48.0,
+ fixed_buffer, 1));
EXPECT_TRUE(check_unsigned_shorts(expected + 4, fixed_buffer, 1));
EXPECT_EQ(0xbdbd, fixed_buffer[1]);
memset(fixed_buffer, 0xbd, sizeof(fixed_buffer));
- EXPECT_EQ(9, FPDFText_GetBoundedText(
- textpage, 41.0, 56.0, 82.0, 48.0, fixed_buffer, 9));
+ EXPECT_EQ(9, FPDFText_GetBoundedText(textpage, 41.0, 56.0, 82.0, 48.0,
+ fixed_buffer, 9));
EXPECT_TRUE(check_unsigned_shorts(expected + 4, fixed_buffer, 9));
EXPECT_EQ(0xbdbd, fixed_buffer[9]);
memset(fixed_buffer, 0xbd, sizeof(fixed_buffer));
- EXPECT_EQ(10, FPDFText_GetBoundedText(
- textpage, 41.0, 56.0, 82.0, 48.0, fixed_buffer, 128));
+ EXPECT_EQ(10, FPDFText_GetBoundedText(textpage, 41.0, 56.0, 82.0, 48.0,
+ fixed_buffer, 128));
EXPECT_TRUE(check_unsigned_shorts(expected + 4, fixed_buffer, 9));
EXPECT_EQ(0u, fixed_buffer[9]);
EXPECT_EQ(0xbdbd, fixed_buffer[10]);
@@ -146,10 +140,10 @@ TEST_F(FPDFTextEmbeddertest, TextSearch) {
EXPECT_NE(nullptr, textpage);
// Avoid issues with system wchar_t width vs. FPDF_WideString.
- const unsigned short nope[] = { 'n', 'o', 'p', 'e', '\0' };
- const unsigned short world[] = { 'w', 'o', 'r', 'l', 'd', '\0' };
- const unsigned short world_caps[] = { 'W', 'O', 'R', 'L', 'D', '\0' };
- const unsigned short world_substr[] = { 'o', 'r', 'l', 'd', '\0' };
+ const unsigned short nope[] = {'n', 'o', 'p', 'e', '\0'};
+ const unsigned short world[] = {'w', 'o', 'r', 'l', 'd', '\0'};
+ const unsigned short world_caps[] = {'W', 'O', 'R', 'L', 'D', '\0'};
+ const unsigned short world_substr[] = {'o', 'r', 'l', 'd', '\0'};
// No occurences of "nope" in test page.
FPDF_SCHHANDLE search = FPDFText_FindStart(textpage, nope, 0, 0);
@@ -203,8 +197,8 @@ TEST_F(FPDFTextEmbeddertest, TextSearch) {
FPDFText_FindClose(search);
// Exact search unaffected by case sensitiity and whole word flags.
- search = FPDFText_FindStart(
- textpage, world, FPDF_MATCHCASE | FPDF_MATCHWHOLEWORD, 0);
+ search = FPDFText_FindStart(textpage, world,
+ FPDF_MATCHCASE | FPDF_MATCHWHOLEWORD, 0);
EXPECT_NE(nullptr, search);
EXPECT_TRUE(FPDFText_FindNext(search));
EXPECT_EQ(7, FPDFText_GetSchResultIndex(search));
@@ -293,27 +287,28 @@ TEST_F(FPDFTextEmbeddertest, WebLinks) {
// Check buffer that doesn't have space for a terminating NUL.
memset(fixed_buffer, 0xbd, sizeof(fixed_buffer));
- EXPECT_EQ(sizeof(expected_url) - 1, FPDFLink_GetURL(
- pagelink, 0, fixed_buffer, sizeof(expected_url) - 1));
- EXPECT_TRUE(check_unsigned_shorts(
- expected_url, fixed_buffer, sizeof(expected_url) - 1));
+ EXPECT_EQ(
+ sizeof(expected_url) - 1,
+ FPDFLink_GetURL(pagelink, 0, fixed_buffer, sizeof(expected_url) - 1));
+ EXPECT_TRUE(check_unsigned_shorts(expected_url, fixed_buffer,
+ sizeof(expected_url) - 1));
EXPECT_EQ(0xbdbd, fixed_buffer[sizeof(expected_url) - 1]);
// Retreive link with exactly-sized buffer.
memset(fixed_buffer, 0xbd, sizeof(fixed_buffer));
- EXPECT_EQ(sizeof(expected_url), FPDFLink_GetURL(
- pagelink, 0, fixed_buffer, sizeof(expected_url)));
- EXPECT_TRUE(check_unsigned_shorts(
- expected_url, fixed_buffer, sizeof(expected_url)));
+ EXPECT_EQ(sizeof(expected_url),
+ FPDFLink_GetURL(pagelink, 0, fixed_buffer, sizeof(expected_url)));
+ EXPECT_TRUE(
+ check_unsigned_shorts(expected_url, fixed_buffer, sizeof(expected_url)));
EXPECT_EQ(0u, fixed_buffer[sizeof(expected_url) - 1]);
EXPECT_EQ(0xbdbd, fixed_buffer[sizeof(expected_url)]);
// Retreive link with ample-sized-buffer.
memset(fixed_buffer, 0xbd, sizeof(fixed_buffer));
- EXPECT_EQ(sizeof(expected_url), FPDFLink_GetURL(
- pagelink, 0, fixed_buffer, 128));
- EXPECT_TRUE(check_unsigned_shorts(
- expected_url, fixed_buffer, sizeof(expected_url)));
+ EXPECT_EQ(sizeof(expected_url),
+ FPDFLink_GetURL(pagelink, 0, fixed_buffer, 128));
+ EXPECT_TRUE(
+ check_unsigned_shorts(expected_url, fixed_buffer, sizeof(expected_url)));
EXPECT_EQ(0u, fixed_buffer[sizeof(expected_url) - 1]);
EXPECT_EQ(0xbdbd, fixed_buffer[sizeof(expected_url)]);
diff --git a/fpdfsdk/src/fpdfview.cpp b/fpdfsdk/src/fpdfview.cpp
index 9edd5d90ec..a419749e8e 100644
--- a/fpdfsdk/src/fpdfview.cpp
+++ b/fpdfsdk/src/fpdfview.cpp
@@ -15,54 +15,50 @@
#include "../include/fsdk_mgr.h"
#include "../include/fsdk_rendercontext.h"
-CPDF_CustomAccess::CPDF_CustomAccess(FPDF_FILEACCESS* pFileAccess)
-{
- if (pFileAccess)
- m_FileAccess = *pFileAccess;
-}
-
-FX_BOOL CPDF_CustomAccess::ReadBlock(void* buffer, FX_FILESIZE offset, size_t size)
-{
- if (offset < 0) {
- return FALSE;
- }
- FX_SAFE_FILESIZE newPos = pdfium::base::checked_cast<FX_FILESIZE, size_t>(size);
- newPos += offset;
- if (!newPos.IsValid() || newPos.ValueOrDie() > m_FileAccess.m_FileLen) {
- return FALSE;
- }
- return m_FileAccess.m_GetBlock(m_FileAccess.m_Param, offset,(uint8_t*) buffer, size);
-}
-
-//0 bit: FPDF_POLICY_MACHINETIME_ACCESS
+CPDF_CustomAccess::CPDF_CustomAccess(FPDF_FILEACCESS* pFileAccess) {
+ if (pFileAccess)
+ m_FileAccess = *pFileAccess;
+}
+
+FX_BOOL CPDF_CustomAccess::ReadBlock(void* buffer,
+ FX_FILESIZE offset,
+ size_t size) {
+ if (offset < 0) {
+ return FALSE;
+ }
+ FX_SAFE_FILESIZE newPos =
+ pdfium::base::checked_cast<FX_FILESIZE, size_t>(size);
+ newPos += offset;
+ if (!newPos.IsValid() || newPos.ValueOrDie() > m_FileAccess.m_FileLen) {
+ return FALSE;
+ }
+ return m_FileAccess.m_GetBlock(m_FileAccess.m_Param, offset, (uint8_t*)buffer,
+ size);
+}
+
+// 0 bit: FPDF_POLICY_MACHINETIME_ACCESS
static FX_DWORD foxit_sandbox_policy = 0xFFFFFFFF;
-void FSDK_SetSandBoxPolicy(FPDF_DWORD policy, FPDF_BOOL enable)
-{
- switch(policy)
- {
- case FPDF_POLICY_MACHINETIME_ACCESS:
- {
- if(enable)
- foxit_sandbox_policy |= 0x01;
- else
- foxit_sandbox_policy &= 0xFFFFFFFE;
- }
- break;
+void FSDK_SetSandBoxPolicy(FPDF_DWORD policy, FPDF_BOOL enable) {
+ switch (policy) {
+ case FPDF_POLICY_MACHINETIME_ACCESS: {
+ if (enable)
+ foxit_sandbox_policy |= 0x01;
+ else
+ foxit_sandbox_policy &= 0xFFFFFFFE;
+ } break;
default:
- break;
- }
+ break;
+ }
}
-FPDF_BOOL FSDK_IsSandBoxPolicyEnabled(FPDF_DWORD policy)
-{
- switch(policy)
- {
+FPDF_BOOL FSDK_IsSandBoxPolicyEnabled(FPDF_DWORD policy) {
+ switch (policy) {
case FPDF_POLICY_MACHINETIME_ACCESS:
- return (foxit_sandbox_policy & 0x01) ? TRUE : FALSE;
+ return (foxit_sandbox_policy & 0x01) ? TRUE : FALSE;
default:
- return FALSE;
- }
+ return FALSE;
+ }
}
#ifndef _T
@@ -72,248 +68,247 @@ FPDF_BOOL FSDK_IsSandBoxPolicyEnabled(FPDF_DWORD policy)
CCodec_ModuleMgr* g_pCodecModule = nullptr;
#if _FX_OS_ == _FX_LINUX_EMBEDDED_
-class CFontMapper : public IPDF_FontMapper
-{
-public:
- CFontMapper();
- virtual ~CFontMapper();
-
- virtual FT_Face FindSubstFont(
- CPDF_Document* pDoc, // [IN] The PDF document
- const CFX_ByteString& face_name, // [IN] Original name
- FX_BOOL bTrueType, // [IN] TrueType or Type1
- FX_DWORD flags, // [IN] PDF font flags (see PDF Reference section 5.7.1)
- int font_weight, // [IN] original font weight. 0 for not specified
- int CharsetCP, // [IN] code page for charset (see Win32 GetACP())
- FX_BOOL bVertical,
- CPDF_SubstFont* pSubstFont // [OUT] Subst font data
- );
-
- FT_Face m_SysFace;
+class CFontMapper : public IPDF_FontMapper {
+ public:
+ CFontMapper();
+ virtual ~CFontMapper();
+
+ virtual FT_Face FindSubstFont(
+ CPDF_Document* pDoc, // [IN] The PDF document
+ const CFX_ByteString& face_name, // [IN] Original name
+ FX_BOOL bTrueType, // [IN] TrueType or Type1
+ FX_DWORD flags, // [IN] PDF font flags (see PDF Reference section 5.7.1)
+ int font_weight, // [IN] original font weight. 0 for not specified
+ int CharsetCP, // [IN] code page for charset (see Win32 GetACP())
+ FX_BOOL bVertical,
+ CPDF_SubstFont* pSubstFont // [OUT] Subst font data
+ );
+
+ FT_Face m_SysFace;
};
CFontMapper* g_pFontMapper = NULL;
-#endif // #if _FX_OS_ == _FX_LINUX_EMBEDDED_
-
-DLLEXPORT void STDCALL FPDF_InitLibrary()
-{
- g_pCodecModule = new CCodec_ModuleMgr();
-
- CFX_GEModule::Create();
- CFX_GEModule::Get()->SetCodecModule(g_pCodecModule);
-
- CPDF_ModuleMgr::Create();
- CPDF_ModuleMgr::Get()->SetCodecModule(g_pCodecModule);
- CPDF_ModuleMgr::Get()->InitPageModule();
- CPDF_ModuleMgr::Get()->InitRenderModule();
- CPDF_ModuleMgr * pModuleMgr = CPDF_ModuleMgr::Get();
- if ( pModuleMgr )
- {
- pModuleMgr->LoadEmbeddedGB1CMaps();
- pModuleMgr->LoadEmbeddedJapan1CMaps();
- pModuleMgr->LoadEmbeddedCNS1CMaps();
- pModuleMgr->LoadEmbeddedKorea1CMaps();
- }
-}
+#endif // #if _FX_OS_ == _FX_LINUX_EMBEDDED_
+
+DLLEXPORT void STDCALL FPDF_InitLibrary() {
+ g_pCodecModule = new CCodec_ModuleMgr();
+ CFX_GEModule::Create();
+ CFX_GEModule::Get()->SetCodecModule(g_pCodecModule);
-DLLEXPORT void STDCALL FPDF_DestroyLibrary()
-{
+ CPDF_ModuleMgr::Create();
+ CPDF_ModuleMgr::Get()->SetCodecModule(g_pCodecModule);
+ CPDF_ModuleMgr::Get()->InitPageModule();
+ CPDF_ModuleMgr::Get()->InitRenderModule();
+ CPDF_ModuleMgr* pModuleMgr = CPDF_ModuleMgr::Get();
+ if (pModuleMgr) {
+ pModuleMgr->LoadEmbeddedGB1CMaps();
+ pModuleMgr->LoadEmbeddedJapan1CMaps();
+ pModuleMgr->LoadEmbeddedCNS1CMaps();
+ pModuleMgr->LoadEmbeddedKorea1CMaps();
+ }
+}
+DLLEXPORT void STDCALL FPDF_DestroyLibrary() {
#if _FX_OS_ == _FX_LINUX_EMBEDDED_
- delete g_pFontMapper;
- g_pFontMapper = nullptr;
+ delete g_pFontMapper;
+ g_pFontMapper = nullptr;
#endif
- CPDF_ModuleMgr::Destroy();
- CFX_GEModule::Destroy();
- delete g_pCodecModule;
- g_pCodecModule = nullptr;
+ CPDF_ModuleMgr::Destroy();
+ CFX_GEModule::Destroy();
+ delete g_pCodecModule;
+ g_pCodecModule = nullptr;
}
#ifndef _WIN32
int g_LastError;
-void SetLastError(int err)
-{
- g_LastError = err;
+void SetLastError(int err) {
+ g_LastError = err;
}
-int GetLastError()
-{
- return g_LastError;
+int GetLastError() {
+ return g_LastError;
}
#endif
-void ProcessParseError(FX_DWORD err_code)
-{
- // Translate FPDFAPI error code to FPDFVIEW error code
- switch (err_code) {
- case PDFPARSE_ERROR_FILE:
- err_code = FPDF_ERR_FILE;
- break;
- case PDFPARSE_ERROR_FORMAT:
- err_code = FPDF_ERR_FORMAT;
- break;
- case PDFPARSE_ERROR_PASSWORD:
- err_code = FPDF_ERR_PASSWORD;
- break;
- case PDFPARSE_ERROR_HANDLER:
- err_code = FPDF_ERR_SECURITY;
- break;
- }
- SetLastError(err_code);
+void ProcessParseError(FX_DWORD err_code) {
+ // Translate FPDFAPI error code to FPDFVIEW error code
+ switch (err_code) {
+ case PDFPARSE_ERROR_FILE:
+ err_code = FPDF_ERR_FILE;
+ break;
+ case PDFPARSE_ERROR_FORMAT:
+ err_code = FPDF_ERR_FORMAT;
+ break;
+ case PDFPARSE_ERROR_PASSWORD:
+ err_code = FPDF_ERR_PASSWORD;
+ break;
+ case PDFPARSE_ERROR_HANDLER:
+ err_code = FPDF_ERR_SECURITY;
+ break;
+ }
+ SetLastError(err_code);
+}
+
+DLLEXPORT void STDCALL FPDF_SetSandBoxPolicy(FPDF_DWORD policy,
+ FPDF_BOOL enable) {
+ return FSDK_SetSandBoxPolicy(policy, enable);
+}
+
+DLLEXPORT FPDF_DOCUMENT STDCALL FPDF_LoadDocument(FPDF_STRING file_path,
+ FPDF_BYTESTRING password) {
+ CPDF_Parser* pParser = new CPDF_Parser;
+ pParser->SetPassword(password);
+
+ FX_DWORD err_code = pParser->StartParse((const FX_CHAR*)file_path);
+ if (err_code) {
+ delete pParser;
+ ProcessParseError(err_code);
+ return NULL;
+ }
+ return pParser->GetDocument();
}
-DLLEXPORT void STDCALL FPDF_SetSandBoxPolicy(FPDF_DWORD policy, FPDF_BOOL enable)
-{
- return FSDK_SetSandBoxPolicy(policy, enable);
-}
+extern void CheckUnSupportError(CPDF_Document* pDoc, FX_DWORD err_code);
-DLLEXPORT FPDF_DOCUMENT STDCALL FPDF_LoadDocument(FPDF_STRING file_path, FPDF_BYTESTRING password)
-{
- CPDF_Parser* pParser = new CPDF_Parser;
- pParser->SetPassword(password);
+class CMemFile final : public IFX_FileRead {
+ public:
+ CMemFile(uint8_t* pBuf, FX_FILESIZE size) : m_pBuf(pBuf), m_size(size) {}
- FX_DWORD err_code = pParser->StartParse((const FX_CHAR*)file_path);
- if (err_code) {
- delete pParser;
- ProcessParseError(err_code);
- return NULL;
- }
- return pParser->GetDocument();
-}
-
-extern void CheckUnSupportError(CPDF_Document * pDoc, FX_DWORD err_code);
-
-class CMemFile final: public IFX_FileRead
-{
-public:
- CMemFile(uint8_t* pBuf, FX_FILESIZE size):m_pBuf(pBuf),m_size(size) {}
-
- virtual void Release() {delete this;}
- virtual FX_FILESIZE GetSize() {return m_size;}
- virtual FX_BOOL ReadBlock(void* buffer, FX_FILESIZE offset, size_t size)
- {
- if (offset < 0) {
- return FALSE;
- }
- FX_SAFE_FILESIZE newPos = pdfium::base::checked_cast<FX_FILESIZE, size_t>(size);
- newPos += offset;
- if (!newPos.IsValid() || newPos.ValueOrDie() > (FX_DWORD)m_size) {
- return FALSE;
- }
- FXSYS_memcpy(buffer, m_pBuf+offset, size);
- return TRUE;
- }
-private:
- uint8_t* m_pBuf;
- FX_FILESIZE m_size;
-};
-DLLEXPORT FPDF_DOCUMENT STDCALL FPDF_LoadMemDocument(const void* data_buf, int size, FPDF_BYTESTRING password)
-{
- CPDF_Parser* pParser = new CPDF_Parser;
- pParser->SetPassword(password);
- CMemFile* pMemFile = new CMemFile((uint8_t*)data_buf, size);
- FX_DWORD err_code = pParser->StartParse(pMemFile);
- if (err_code) {
- delete pParser;
- ProcessParseError(err_code);
- return NULL;
+ virtual void Release() { delete this; }
+ virtual FX_FILESIZE GetSize() { return m_size; }
+ virtual FX_BOOL ReadBlock(void* buffer, FX_FILESIZE offset, size_t size) {
+ if (offset < 0) {
+ return FALSE;
}
- CPDF_Document * pDoc = NULL;
- pDoc = pParser?pParser->GetDocument():NULL;
- CheckUnSupportError(pDoc, err_code);
- return pParser->GetDocument();
-}
-
-DLLEXPORT FPDF_DOCUMENT STDCALL FPDF_LoadCustomDocument(FPDF_FILEACCESS* pFileAccess, FPDF_BYTESTRING password)
-{
- CPDF_Parser* pParser = new CPDF_Parser;
- pParser->SetPassword(password);
- CPDF_CustomAccess* pFile = new CPDF_CustomAccess(pFileAccess);
- FX_DWORD err_code = pParser->StartParse(pFile);
- if (err_code) {
- delete pParser;
- ProcessParseError(err_code);
- return NULL;
+ FX_SAFE_FILESIZE newPos =
+ pdfium::base::checked_cast<FX_FILESIZE, size_t>(size);
+ newPos += offset;
+ if (!newPos.IsValid() || newPos.ValueOrDie() > (FX_DWORD)m_size) {
+ return FALSE;
}
- CPDF_Document * pDoc = NULL;
- pDoc = pParser?pParser->GetDocument():NULL;
- CheckUnSupportError(pDoc, err_code);
- return pParser->GetDocument();
-}
-
-DLLEXPORT FPDF_BOOL STDCALL FPDF_GetFileVersion(FPDF_DOCUMENT doc, int* fileVersion)
-{
- if(!doc||!fileVersion) return FALSE;
- *fileVersion = 0;
- CPDF_Document* pDoc = (CPDF_Document*)doc;
- CPDF_Parser* pParser = (CPDF_Parser*)pDoc->GetParser();
- if(!pParser)
- return FALSE;
- *fileVersion = pParser->GetFileVersion();
+ FXSYS_memcpy(buffer, m_pBuf + offset, size);
return TRUE;
-}
-
-// jabdelmalek: changed return type from FX_DWORD to build on Linux (and match header).
-DLLEXPORT unsigned long STDCALL FPDF_GetDocPermissions(FPDF_DOCUMENT document)
-{
- if (document == NULL) return 0;
- CPDF_Document*pDoc = (CPDF_Document*)document;
- CPDF_Parser* pParser = (CPDF_Parser*)pDoc->GetParser();
- CPDF_Dictionary* pDict = pParser->GetEncryptDict();
- if (pDict == NULL) return (FX_DWORD)-1;
-
- return pDict->GetInteger("P");
-}
-
-DLLEXPORT int STDCALL FPDF_GetSecurityHandlerRevision(FPDF_DOCUMENT document)
-{
- if (document == NULL) return -1;
- CPDF_Document*pDoc = (CPDF_Document*)document;
- CPDF_Parser* pParser = (CPDF_Parser*)pDoc->GetParser();
- CPDF_Dictionary* pDict = pParser->GetEncryptDict();
- if (pDict == NULL) return -1;
-
- return pDict->GetInteger("R");
-}
+ }
-DLLEXPORT int STDCALL FPDF_GetPageCount(FPDF_DOCUMENT document)
-{
- if (document == NULL) return 0;
- return ((CPDF_Document*)document)->GetPageCount();
-}
-
-DLLEXPORT FPDF_PAGE STDCALL FPDF_LoadPage(FPDF_DOCUMENT document, int page_index)
-{
- if (document == NULL) return NULL;
- if (page_index < 0 || page_index >= FPDF_GetPageCount(document)) return NULL;
-
- CPDF_Document* pDoc = (CPDF_Document*)document;
- if (pDoc == NULL) return NULL;
- CPDF_Dictionary* pDict = pDoc->GetPage(page_index);
- if (pDict == NULL) return NULL;
- CPDF_Page* pPage = new CPDF_Page;
- pPage->Load(pDoc, pDict);
- pPage->ParseContent();
- return pPage;
-}
-
-DLLEXPORT double STDCALL FPDF_GetPageWidth(FPDF_PAGE page)
-{
- if (!page)
- return 0.0;
- return ((CPDF_Page*)page)->GetPageWidth();
-}
-
-DLLEXPORT double STDCALL FPDF_GetPageHeight(FPDF_PAGE page)
-{
- if (!page) return 0.0;
- return ((CPDF_Page*)page)->GetPageHeight();
-}
-
-void DropContext(void* data)
-{
- delete (CRenderContext*)data;
+ private:
+ uint8_t* m_pBuf;
+ FX_FILESIZE m_size;
+};
+DLLEXPORT FPDF_DOCUMENT STDCALL FPDF_LoadMemDocument(const void* data_buf,
+ int size,
+ FPDF_BYTESTRING password) {
+ CPDF_Parser* pParser = new CPDF_Parser;
+ pParser->SetPassword(password);
+ CMemFile* pMemFile = new CMemFile((uint8_t*)data_buf, size);
+ FX_DWORD err_code = pParser->StartParse(pMemFile);
+ if (err_code) {
+ delete pParser;
+ ProcessParseError(err_code);
+ return NULL;
+ }
+ CPDF_Document* pDoc = NULL;
+ pDoc = pParser ? pParser->GetDocument() : NULL;
+ CheckUnSupportError(pDoc, err_code);
+ return pParser->GetDocument();
+}
+
+DLLEXPORT FPDF_DOCUMENT STDCALL
+FPDF_LoadCustomDocument(FPDF_FILEACCESS* pFileAccess,
+ FPDF_BYTESTRING password) {
+ CPDF_Parser* pParser = new CPDF_Parser;
+ pParser->SetPassword(password);
+ CPDF_CustomAccess* pFile = new CPDF_CustomAccess(pFileAccess);
+ FX_DWORD err_code = pParser->StartParse(pFile);
+ if (err_code) {
+ delete pParser;
+ ProcessParseError(err_code);
+ return NULL;
+ }
+ CPDF_Document* pDoc = NULL;
+ pDoc = pParser ? pParser->GetDocument() : NULL;
+ CheckUnSupportError(pDoc, err_code);
+ return pParser->GetDocument();
+}
+
+DLLEXPORT FPDF_BOOL STDCALL FPDF_GetFileVersion(FPDF_DOCUMENT doc,
+ int* fileVersion) {
+ if (!doc || !fileVersion)
+ return FALSE;
+ *fileVersion = 0;
+ CPDF_Document* pDoc = (CPDF_Document*)doc;
+ CPDF_Parser* pParser = (CPDF_Parser*)pDoc->GetParser();
+ if (!pParser)
+ return FALSE;
+ *fileVersion = pParser->GetFileVersion();
+ return TRUE;
+}
+
+// jabdelmalek: changed return type from FX_DWORD to build on Linux (and match
+// header).
+DLLEXPORT unsigned long STDCALL FPDF_GetDocPermissions(FPDF_DOCUMENT document) {
+ if (document == NULL)
+ return 0;
+ CPDF_Document* pDoc = (CPDF_Document*)document;
+ CPDF_Parser* pParser = (CPDF_Parser*)pDoc->GetParser();
+ CPDF_Dictionary* pDict = pParser->GetEncryptDict();
+ if (pDict == NULL)
+ return (FX_DWORD)-1;
+
+ return pDict->GetInteger("P");
+}
+
+DLLEXPORT int STDCALL FPDF_GetSecurityHandlerRevision(FPDF_DOCUMENT document) {
+ if (document == NULL)
+ return -1;
+ CPDF_Document* pDoc = (CPDF_Document*)document;
+ CPDF_Parser* pParser = (CPDF_Parser*)pDoc->GetParser();
+ CPDF_Dictionary* pDict = pParser->GetEncryptDict();
+ if (pDict == NULL)
+ return -1;
+
+ return pDict->GetInteger("R");
+}
+
+DLLEXPORT int STDCALL FPDF_GetPageCount(FPDF_DOCUMENT document) {
+ if (document == NULL)
+ return 0;
+ return ((CPDF_Document*)document)->GetPageCount();
+}
+
+DLLEXPORT FPDF_PAGE STDCALL FPDF_LoadPage(FPDF_DOCUMENT document,
+ int page_index) {
+ if (document == NULL)
+ return NULL;
+ if (page_index < 0 || page_index >= FPDF_GetPageCount(document))
+ return NULL;
+
+ CPDF_Document* pDoc = (CPDF_Document*)document;
+ if (pDoc == NULL)
+ return NULL;
+ CPDF_Dictionary* pDict = pDoc->GetPage(page_index);
+ if (pDict == NULL)
+ return NULL;
+ CPDF_Page* pPage = new CPDF_Page;
+ pPage->Load(pDoc, pDict);
+ pPage->ParseContent();
+ return pPage;
+}
+
+DLLEXPORT double STDCALL FPDF_GetPageWidth(FPDF_PAGE page) {
+ if (!page)
+ return 0.0;
+ return ((CPDF_Page*)page)->GetPageWidth();
+}
+
+DLLEXPORT double STDCALL FPDF_GetPageHeight(FPDF_PAGE page) {
+ if (!page)
+ return 0.0;
+ return ((CPDF_Page*)page)->GetPageHeight();
+}
+
+void DropContext(void* data) {
+ delete (CRenderContext*)data;
}
#if defined(_DEBUG) || defined(DEBUG)
@@ -321,531 +316,594 @@ void DropContext(void* data)
#endif
#if defined(_WIN32)
-DLLEXPORT void STDCALL FPDF_RenderPage(HDC dc, FPDF_PAGE page, int start_x, int start_y, int size_x, int size_y,
- int rotate, int flags)
-{
- if (page==NULL) return;
- CPDF_Page* pPage = (CPDF_Page*)page;
-
- CRenderContext* pContext = new CRenderContext;
- pPage->SetPrivateData((void*)1, pContext, DropContext);
+DLLEXPORT void STDCALL FPDF_RenderPage(HDC dc,
+ FPDF_PAGE page,
+ int start_x,
+ int start_y,
+ int size_x,
+ int size_y,
+ int rotate,
+ int flags) {
+ if (page == NULL)
+ return;
+ CPDF_Page* pPage = (CPDF_Page*)page;
+
+ CRenderContext* pContext = new CRenderContext;
+ pPage->SetPrivateData((void*)1, pContext, DropContext);
#ifndef _WIN32_WCE
- CFX_DIBitmap* pBitmap = NULL;
- FX_BOOL bBackgroundAlphaNeeded=FALSE;
- bBackgroundAlphaNeeded = pPage->BackgroundAlphaNeeded();
- if (bBackgroundAlphaNeeded)
- {
-
- pBitmap = new CFX_DIBitmap;
- pBitmap->Create(size_x, size_y, FXDIB_Argb);
- pBitmap->Clear(0x00ffffff);
+ CFX_DIBitmap* pBitmap = NULL;
+ FX_BOOL bBackgroundAlphaNeeded = FALSE;
+ bBackgroundAlphaNeeded = pPage->BackgroundAlphaNeeded();
+ if (bBackgroundAlphaNeeded) {
+ pBitmap = new CFX_DIBitmap;
+ pBitmap->Create(size_x, size_y, FXDIB_Argb);
+ pBitmap->Clear(0x00ffffff);
#ifdef _SKIA_SUPPORT_
- pContext->m_pDevice = new CFX_SkiaDevice;
- ((CFX_SkiaDevice*)pContext->m_pDevice)->Attach((CFX_DIBitmap*)pBitmap);
+ pContext->m_pDevice = new CFX_SkiaDevice;
+ ((CFX_SkiaDevice*)pContext->m_pDevice)->Attach((CFX_DIBitmap*)pBitmap);
#else
- pContext->m_pDevice = new CFX_FxgeDevice;
- ((CFX_FxgeDevice*)pContext->m_pDevice)->Attach((CFX_DIBitmap*)pBitmap);
+ pContext->m_pDevice = new CFX_FxgeDevice;
+ ((CFX_FxgeDevice*)pContext->m_pDevice)->Attach((CFX_DIBitmap*)pBitmap);
#endif
+ } else
+ pContext->m_pDevice = new CFX_WindowsDevice(dc);
+
+ FPDF_RenderPage_Retail(pContext, page, start_x, start_y, size_x, size_y,
+ rotate, flags, TRUE, NULL);
+
+ if (bBackgroundAlphaNeeded) {
+ if (pBitmap) {
+ CFX_WindowsDevice WinDC(dc);
+
+ if (WinDC.GetDeviceCaps(FXDC_DEVICE_CLASS) == FXDC_PRINTER) {
+ CFX_DIBitmap* pDst = new CFX_DIBitmap;
+ int pitch = pBitmap->GetPitch();
+ pDst->Create(size_x, size_y, FXDIB_Rgb32);
+ FXSYS_memset(pDst->GetBuffer(), -1, pitch * size_y);
+ pDst->CompositeBitmap(0, 0, size_x, size_y, pBitmap, 0, 0,
+ FXDIB_BLEND_NORMAL, NULL, FALSE, NULL);
+ WinDC.StretchDIBits(pDst, 0, 0, size_x, size_y);
+ delete pDst;
+ } else
+ WinDC.SetDIBits(pBitmap, 0, 0);
}
- else
- pContext->m_pDevice = new CFX_WindowsDevice(dc);
-
- FPDF_RenderPage_Retail(pContext, page, start_x, start_y, size_x, size_y,
- rotate, flags, TRUE, NULL);
-
- if (bBackgroundAlphaNeeded)
- {
- if (pBitmap)
- {
- CFX_WindowsDevice WinDC(dc);
-
- if (WinDC.GetDeviceCaps(FXDC_DEVICE_CLASS) == FXDC_PRINTER)
- {
- CFX_DIBitmap* pDst = new CFX_DIBitmap;
- int pitch = pBitmap->GetPitch();
- pDst->Create(size_x, size_y, FXDIB_Rgb32);
- FXSYS_memset(pDst->GetBuffer(), -1, pitch*size_y);
- pDst->CompositeBitmap(0, 0, size_x, size_y, pBitmap, 0, 0, FXDIB_BLEND_NORMAL, NULL, FALSE, NULL);
- WinDC.StretchDIBits(pDst,0,0,size_x,size_y);
- delete pDst;
- }
- else
- WinDC.SetDIBits(pBitmap,0,0);
-
- }
- }
+ }
#else
- // get clip region
- RECT rect, cliprect;
- rect.left = start_x;
- rect.top = start_y;
- rect.right = start_x + size_x;
- rect.bottom = start_y + size_y;
- GetClipBox(dc, &cliprect);
- IntersectRect(&rect, &rect, &cliprect);
- int width = rect.right - rect.left;
- int height = rect.bottom - rect.top;
+ // get clip region
+ RECT rect, cliprect;
+ rect.left = start_x;
+ rect.top = start_y;
+ rect.right = start_x + size_x;
+ rect.bottom = start_y + size_y;
+ GetClipBox(dc, &cliprect);
+ IntersectRect(&rect, &rect, &cliprect);
+ int width = rect.right - rect.left;
+ int height = rect.bottom - rect.top;
#ifdef DEBUG_TRACE
- {
- char str[128];
- memset(str, 0, sizeof(str));
- FXSYS_snprintf(str, sizeof(str) - 1, "Rendering DIB %d x %d", width, height);
- CPDF_ModuleMgr::Get()->ReportError(999, str);
- }
+ {
+ char str[128];
+ memset(str, 0, sizeof(str));
+ FXSYS_snprintf(str, sizeof(str) - 1, "Rendering DIB %d x %d", width,
+ height);
+ CPDF_ModuleMgr::Get()->ReportError(999, str);
+ }
#endif
- // Create a DIB section
- LPVOID pBuffer;
- BITMAPINFOHEADER bmih;
- FXSYS_memset(&bmih, 0, sizeof bmih);
- bmih.biSize = sizeof bmih;
- bmih.biBitCount = 24;
- bmih.biHeight = -height;
- bmih.biPlanes = 1;
- bmih.biWidth = width;
- pContext->m_hBitmap = CreateDIBSection(dc, (BITMAPINFO*)&bmih, DIB_RGB_COLORS, &pBuffer, NULL, 0);
- if (pContext->m_hBitmap == NULL) {
+ // Create a DIB section
+ LPVOID pBuffer;
+ BITMAPINFOHEADER bmih;
+ FXSYS_memset(&bmih, 0, sizeof bmih);
+ bmih.biSize = sizeof bmih;
+ bmih.biBitCount = 24;
+ bmih.biHeight = -height;
+ bmih.biPlanes = 1;
+ bmih.biWidth = width;
+ pContext->m_hBitmap = CreateDIBSection(dc, (BITMAPINFO*)&bmih, DIB_RGB_COLORS,
+ &pBuffer, NULL, 0);
+ if (pContext->m_hBitmap == NULL) {
#if defined(DEBUG) || defined(_DEBUG)
- char str[128];
- memset(str, 0, sizeof(str));
- FXSYS_snprintf(str, sizeof(str) - 1, "Error CreateDIBSection: %d x %d, error code = %d", width, height, GetLastError());
- CPDF_ModuleMgr::Get()->ReportError(FPDFERR_OUT_OF_MEMORY, str);
+ char str[128];
+ memset(str, 0, sizeof(str));
+ FXSYS_snprintf(str, sizeof(str) - 1,
+ "Error CreateDIBSection: %d x %d, error code = %d", width,
+ height, GetLastError());
+ CPDF_ModuleMgr::Get()->ReportError(FPDFERR_OUT_OF_MEMORY, str);
#else
- CPDF_ModuleMgr::Get()->ReportError(FPDFERR_OUT_OF_MEMORY, NULL);
+ CPDF_ModuleMgr::Get()->ReportError(FPDFERR_OUT_OF_MEMORY, NULL);
#endif
- }
- FXSYS_memset(pBuffer, 0xff, height*((width*3+3)/4*4));
+ }
+ FXSYS_memset(pBuffer, 0xff, height * ((width * 3 + 3) / 4 * 4));
#ifdef DEBUG_TRACE
- {
- CPDF_ModuleMgr::Get()->ReportError(999, "DIBSection created");
- }
+ { CPDF_ModuleMgr::Get()->ReportError(999, "DIBSection created"); }
#endif
- // Create a device with this external buffer
- pContext->m_pBitmap = new CFX_DIBitmap;
- pContext->m_pBitmap->Create(width, height, FXDIB_Rgb, (uint8_t*)pBuffer);
- pContext->m_pDevice = new CPDF_FxgeDevice;
- ((CPDF_FxgeDevice*)pContext->m_pDevice)->Attach(pContext->m_pBitmap);
+ // Create a device with this external buffer
+ pContext->m_pBitmap = new CFX_DIBitmap;
+ pContext->m_pBitmap->Create(width, height, FXDIB_Rgb, (uint8_t*)pBuffer);
+ pContext->m_pDevice = new CPDF_FxgeDevice;
+ ((CPDF_FxgeDevice*)pContext->m_pDevice)->Attach(pContext->m_pBitmap);
#ifdef DEBUG_TRACE
- CPDF_ModuleMgr::Get()->ReportError(999, "Ready for PDF rendering");
+ CPDF_ModuleMgr::Get()->ReportError(999, "Ready for PDF rendering");
#endif
- // output to bitmap device
- FPDF_RenderPage_Retail(pContext, page, start_x - rect.left,
- start_y - rect.top, size_x, size_y, rotate, flags);
+ // output to bitmap device
+ FPDF_RenderPage_Retail(pContext, page, start_x - rect.left,
+ start_y - rect.top, size_x, size_y, rotate, flags);
#ifdef DEBUG_TRACE
- CPDF_ModuleMgr::Get()->ReportError(999, "Finished PDF rendering");
+ CPDF_ModuleMgr::Get()->ReportError(999, "Finished PDF rendering");
#endif
- // Now output to real device
- HDC hMemDC = CreateCompatibleDC(dc);
- if (hMemDC == NULL) {
+ // Now output to real device
+ HDC hMemDC = CreateCompatibleDC(dc);
+ if (hMemDC == NULL) {
#if defined(DEBUG) || defined(_DEBUG)
- char str[128];
- memset(str, 0, sizeof(str));
- FXSYS_snprintf(str, sizeof(str) - 1, "Error CreateCompatibleDC. Error code = %d", GetLastError());
- CPDF_ModuleMgr::Get()->ReportError(FPDFERR_OUT_OF_MEMORY, str);
+ char str[128];
+ memset(str, 0, sizeof(str));
+ FXSYS_snprintf(str, sizeof(str) - 1,
+ "Error CreateCompatibleDC. Error code = %d", GetLastError());
+ CPDF_ModuleMgr::Get()->ReportError(FPDFERR_OUT_OF_MEMORY, str);
#else
- CPDF_ModuleMgr::Get()->ReportError(FPDFERR_OUT_OF_MEMORY, NULL);
+ CPDF_ModuleMgr::Get()->ReportError(FPDFERR_OUT_OF_MEMORY, NULL);
#endif
- }
+ }
- HGDIOBJ hOldBitmap = SelectObject(hMemDC, pContext->m_hBitmap);
+ HGDIOBJ hOldBitmap = SelectObject(hMemDC, pContext->m_hBitmap);
#ifdef DEBUG_TRACE
- CPDF_ModuleMgr::Get()->ReportError(999, "Ready for screen rendering");
+ CPDF_ModuleMgr::Get()->ReportError(999, "Ready for screen rendering");
#endif
- BitBlt(dc, rect.left, rect.top, width, height, hMemDC, 0, 0, SRCCOPY);
- SelectObject(hMemDC, hOldBitmap);
- DeleteDC(hMemDC);
+ BitBlt(dc, rect.left, rect.top, width, height, hMemDC, 0, 0, SRCCOPY);
+ SelectObject(hMemDC, hOldBitmap);
+ DeleteDC(hMemDC);
#ifdef DEBUG_TRACE
- CPDF_ModuleMgr::Get()->ReportError(999, "Finished screen rendering");
+ CPDF_ModuleMgr::Get()->ReportError(999, "Finished screen rendering");
#endif
#endif
- if (bBackgroundAlphaNeeded) {
- delete pBitmap;
- pBitmap = NULL;
- }
- delete pContext;
- pPage->RemovePrivateData((void*)1);
+ if (bBackgroundAlphaNeeded) {
+ delete pBitmap;
+ pBitmap = NULL;
+ }
+ delete pContext;
+ pPage->RemovePrivateData((void*)1);
}
#endif
-DLLEXPORT void STDCALL FPDF_RenderPageBitmap(FPDF_BITMAP bitmap, FPDF_PAGE page, int start_x, int start_y,
- int size_x, int size_y, int rotate, int flags)
-{
- if (bitmap == NULL || page == NULL) return;
- CPDF_Page* pPage = (CPDF_Page*)page;
-
-
- CRenderContext* pContext = new CRenderContext;
- pPage->SetPrivateData((void*)1, pContext, DropContext);
+DLLEXPORT void STDCALL FPDF_RenderPageBitmap(FPDF_BITMAP bitmap,
+ FPDF_PAGE page,
+ int start_x,
+ int start_y,
+ int size_x,
+ int size_y,
+ int rotate,
+ int flags) {
+ if (bitmap == NULL || page == NULL)
+ return;
+ CPDF_Page* pPage = (CPDF_Page*)page;
+
+ CRenderContext* pContext = new CRenderContext;
+ pPage->SetPrivateData((void*)1, pContext, DropContext);
#ifdef _SKIA_SUPPORT_
- pContext->m_pDevice = new CFX_SkiaDevice;
+ pContext->m_pDevice = new CFX_SkiaDevice;
- if (flags & FPDF_REVERSE_BYTE_ORDER)
- ((CFX_SkiaDevice*)pContext->m_pDevice)->Attach((CFX_DIBitmap*)bitmap,0,TRUE);
- else
- ((CFX_SkiaDevice*)pContext->m_pDevice)->Attach((CFX_DIBitmap*)bitmap);
+ if (flags & FPDF_REVERSE_BYTE_ORDER)
+ ((CFX_SkiaDevice*)pContext->m_pDevice)
+ ->Attach((CFX_DIBitmap*)bitmap, 0, TRUE);
+ else
+ ((CFX_SkiaDevice*)pContext->m_pDevice)->Attach((CFX_DIBitmap*)bitmap);
#else
- pContext->m_pDevice = new CFX_FxgeDevice;
+ pContext->m_pDevice = new CFX_FxgeDevice;
- if (flags & FPDF_REVERSE_BYTE_ORDER)
- ((CFX_FxgeDevice*)pContext->m_pDevice)->Attach((CFX_DIBitmap*)bitmap,0,TRUE);
- else
- ((CFX_FxgeDevice*)pContext->m_pDevice)->Attach((CFX_DIBitmap*)bitmap);
+ if (flags & FPDF_REVERSE_BYTE_ORDER)
+ ((CFX_FxgeDevice*)pContext->m_pDevice)
+ ->Attach((CFX_DIBitmap*)bitmap, 0, TRUE);
+ else
+ ((CFX_FxgeDevice*)pContext->m_pDevice)->Attach((CFX_DIBitmap*)bitmap);
#endif
- FPDF_RenderPage_Retail(pContext, page, start_x, start_y, size_x, size_y,
- rotate, flags, TRUE, NULL);
-
- delete pContext;
- pPage->RemovePrivateData((void*)1);
-}
-
-DLLEXPORT void STDCALL FPDF_ClosePage(FPDF_PAGE page)
-{
- if (!page) return;
- CPDFSDK_PageView* pPageView = (CPDFSDK_PageView*)(((CPDF_Page*)page))->GetPrivateData((void*)page);
- if (pPageView && pPageView->IsLocked()) {
- pPageView->TakeOverPage();
- return;
- }
- delete (CPDF_Page*)page;
-
-}
-
-DLLEXPORT void STDCALL FPDF_CloseDocument(FPDF_DOCUMENT document)
-{
- if (!document)
- return;
- CPDF_Document* pDoc = (CPDF_Document*)document;
- CPDF_Parser* pParser = (CPDF_Parser*)pDoc->GetParser();
- if (pParser == NULL)
- {
- delete pDoc;
- return;
- }
- delete pParser;
-}
-
-DLLEXPORT unsigned long STDCALL FPDF_GetLastError()
-{
- return GetLastError();
-}
-
-DLLEXPORT void STDCALL FPDF_DeviceToPage(FPDF_PAGE page, int start_x, int start_y, int size_x, int size_y,
- int rotate, int device_x, int device_y, double* page_x, double* page_y)
-{
- if (page == NULL || page_x == NULL || page_y == NULL) return;
- CPDF_Page* pPage = (CPDF_Page*)page;
-
- CPDF_Matrix page2device;
- pPage->GetDisplayMatrix(page2device, start_x, start_y, size_x, size_y, rotate);
- CPDF_Matrix device2page;
- device2page.SetReverse(page2device);
-
- FX_FLOAT page_x_f, page_y_f;
- device2page.Transform((FX_FLOAT)(device_x), (FX_FLOAT)(device_y), page_x_f, page_y_f);
-
- *page_x = (page_x_f);
- *page_y = (page_y_f);
-}
-
-DLLEXPORT void STDCALL FPDF_PageToDevice(FPDF_PAGE page, int start_x, int start_y, int size_x, int size_y,
- int rotate, double page_x, double page_y, int* device_x, int* device_y)
-{
- if (page == NULL || device_x == NULL || device_y == NULL) return;
- CPDF_Page* pPage = (CPDF_Page*)page;
-
- CPDF_Matrix page2device;
- pPage->GetDisplayMatrix(page2device, start_x, start_y, size_x, size_y, rotate);
-
- FX_FLOAT device_x_f, device_y_f;
- page2device.Transform(((FX_FLOAT)page_x), ((FX_FLOAT)page_y), device_x_f, device_y_f);
-
- *device_x = FXSYS_round(device_x_f);
- *device_y = FXSYS_round(device_y_f);
-}
-
-DLLEXPORT FPDF_BITMAP STDCALL FPDFBitmap_Create(int width, int height, int alpha)
-{
- nonstd::unique_ptr<CFX_DIBitmap> pBitmap(new CFX_DIBitmap);
- if (!pBitmap->Create(width, height, alpha ? FXDIB_Argb : FXDIB_Rgb32)) {
- return NULL;
- }
- return pBitmap.release();
-}
-
-DLLEXPORT FPDF_BITMAP STDCALL FPDFBitmap_CreateEx(int width, int height, int format, void* first_scan, int stride)
-{
- FXDIB_Format fx_format;
- switch (format) {
- case FPDFBitmap_Gray:
- fx_format = FXDIB_8bppRgb;
- break;
- case FPDFBitmap_BGR:
- fx_format = FXDIB_Rgb;
- break;
- case FPDFBitmap_BGRx:
- fx_format = FXDIB_Rgb32;
- break;
- case FPDFBitmap_BGRA:
- fx_format = FXDIB_Argb;
- break;
- default:
- return NULL;
- }
- CFX_DIBitmap* pBitmap = new CFX_DIBitmap;
- pBitmap->Create(width, height, fx_format, (uint8_t*)first_scan, stride);
- return pBitmap;
-}
-
-DLLEXPORT void STDCALL FPDFBitmap_FillRect(FPDF_BITMAP bitmap, int left, int top, int width, int height, FPDF_DWORD color)
-{
- if (bitmap == NULL) return;
+ FPDF_RenderPage_Retail(pContext, page, start_x, start_y, size_x, size_y,
+ rotate, flags, TRUE, NULL);
+
+ delete pContext;
+ pPage->RemovePrivateData((void*)1);
+}
+
+DLLEXPORT void STDCALL FPDF_ClosePage(FPDF_PAGE page) {
+ if (!page)
+ return;
+ CPDFSDK_PageView* pPageView =
+ (CPDFSDK_PageView*)(((CPDF_Page*)page))->GetPrivateData((void*)page);
+ if (pPageView && pPageView->IsLocked()) {
+ pPageView->TakeOverPage();
+ return;
+ }
+ delete (CPDF_Page*)page;
+}
+
+DLLEXPORT void STDCALL FPDF_CloseDocument(FPDF_DOCUMENT document) {
+ if (!document)
+ return;
+ CPDF_Document* pDoc = (CPDF_Document*)document;
+ CPDF_Parser* pParser = (CPDF_Parser*)pDoc->GetParser();
+ if (pParser == NULL) {
+ delete pDoc;
+ return;
+ }
+ delete pParser;
+}
+
+DLLEXPORT unsigned long STDCALL FPDF_GetLastError() {
+ return GetLastError();
+}
+
+DLLEXPORT void STDCALL FPDF_DeviceToPage(FPDF_PAGE page,
+ int start_x,
+ int start_y,
+ int size_x,
+ int size_y,
+ int rotate,
+ int device_x,
+ int device_y,
+ double* page_x,
+ double* page_y) {
+ if (page == NULL || page_x == NULL || page_y == NULL)
+ return;
+ CPDF_Page* pPage = (CPDF_Page*)page;
+
+ CPDF_Matrix page2device;
+ pPage->GetDisplayMatrix(page2device, start_x, start_y, size_x, size_y,
+ rotate);
+ CPDF_Matrix device2page;
+ device2page.SetReverse(page2device);
+
+ FX_FLOAT page_x_f, page_y_f;
+ device2page.Transform((FX_FLOAT)(device_x), (FX_FLOAT)(device_y), page_x_f,
+ page_y_f);
+
+ *page_x = (page_x_f);
+ *page_y = (page_y_f);
+}
+
+DLLEXPORT void STDCALL FPDF_PageToDevice(FPDF_PAGE page,
+ int start_x,
+ int start_y,
+ int size_x,
+ int size_y,
+ int rotate,
+ double page_x,
+ double page_y,
+ int* device_x,
+ int* device_y) {
+ if (page == NULL || device_x == NULL || device_y == NULL)
+ return;
+ CPDF_Page* pPage = (CPDF_Page*)page;
+
+ CPDF_Matrix page2device;
+ pPage->GetDisplayMatrix(page2device, start_x, start_y, size_x, size_y,
+ rotate);
+
+ FX_FLOAT device_x_f, device_y_f;
+ page2device.Transform(((FX_FLOAT)page_x), ((FX_FLOAT)page_y), device_x_f,
+ device_y_f);
+
+ *device_x = FXSYS_round(device_x_f);
+ *device_y = FXSYS_round(device_y_f);
+}
+
+DLLEXPORT FPDF_BITMAP STDCALL FPDFBitmap_Create(int width,
+ int height,
+ int alpha) {
+ nonstd::unique_ptr<CFX_DIBitmap> pBitmap(new CFX_DIBitmap);
+ if (!pBitmap->Create(width, height, alpha ? FXDIB_Argb : FXDIB_Rgb32)) {
+ return NULL;
+ }
+ return pBitmap.release();
+}
+
+DLLEXPORT FPDF_BITMAP STDCALL FPDFBitmap_CreateEx(int width,
+ int height,
+ int format,
+ void* first_scan,
+ int stride) {
+ FXDIB_Format fx_format;
+ switch (format) {
+ case FPDFBitmap_Gray:
+ fx_format = FXDIB_8bppRgb;
+ break;
+ case FPDFBitmap_BGR:
+ fx_format = FXDIB_Rgb;
+ break;
+ case FPDFBitmap_BGRx:
+ fx_format = FXDIB_Rgb32;
+ break;
+ case FPDFBitmap_BGRA:
+ fx_format = FXDIB_Argb;
+ break;
+ default:
+ return NULL;
+ }
+ CFX_DIBitmap* pBitmap = new CFX_DIBitmap;
+ pBitmap->Create(width, height, fx_format, (uint8_t*)first_scan, stride);
+ return pBitmap;
+}
+
+DLLEXPORT void STDCALL FPDFBitmap_FillRect(FPDF_BITMAP bitmap,
+ int left,
+ int top,
+ int width,
+ int height,
+ FPDF_DWORD color) {
+ if (bitmap == NULL)
+ return;
#ifdef _SKIA_SUPPORT_
- CFX_SkiaDevice device;
+ CFX_SkiaDevice device;
#else
- CFX_FxgeDevice device;
+ CFX_FxgeDevice device;
#endif
- device.Attach((CFX_DIBitmap*)bitmap);
- if (!((CFX_DIBitmap*)bitmap)->HasAlpha()) color |= 0xFF000000;
- FX_RECT rect(left, top, left+width, top+height);
- device.FillRect(&rect, color);
-}
-
-DLLEXPORT void* STDCALL FPDFBitmap_GetBuffer(FPDF_BITMAP bitmap)
-{
- if (bitmap == NULL) return NULL;
- return ((CFX_DIBitmap*)bitmap)->GetBuffer();
-}
-
-DLLEXPORT int STDCALL FPDFBitmap_GetWidth(FPDF_BITMAP bitmap)
-{
- if (bitmap == NULL) return 0;
- return ((CFX_DIBitmap*)bitmap)->GetWidth();
-}
-
-DLLEXPORT int STDCALL FPDFBitmap_GetHeight(FPDF_BITMAP bitmap)
-{
- if (bitmap == NULL) return 0;
- return ((CFX_DIBitmap*)bitmap)->GetHeight();
-}
-
-DLLEXPORT int STDCALL FPDFBitmap_GetStride(FPDF_BITMAP bitmap)
-{
- if (bitmap == NULL) return 0;
- return ((CFX_DIBitmap*)bitmap)->GetPitch();
-}
-
-DLLEXPORT void STDCALL FPDFBitmap_Destroy(FPDF_BITMAP bitmap)
-{
- delete (CFX_DIBitmap*)bitmap;
-}
-
-void FPDF_RenderPage_Retail(CRenderContext* pContext, FPDF_PAGE page, int start_x, int start_y, int size_x, int size_y,
- int rotate, int flags,FX_BOOL bNeedToRestore, IFSDK_PAUSE_Adapter * pause )
-{
- CPDF_Page* pPage = (CPDF_Page*)page;
- if (pPage == NULL) return;
-
- if (!pContext->m_pOptions)
- pContext->m_pOptions = new CPDF_RenderOptions;
-
- if (flags & FPDF_LCD_TEXT)
- pContext->m_pOptions->m_Flags |= RENDER_CLEARTYPE;
- else
- pContext->m_pOptions->m_Flags &= ~RENDER_CLEARTYPE;
- if (flags & FPDF_NO_NATIVETEXT)
- pContext->m_pOptions->m_Flags |= RENDER_NO_NATIVETEXT;
- if (flags & FPDF_RENDER_LIMITEDIMAGECACHE)
- pContext->m_pOptions->m_Flags |= RENDER_LIMITEDIMAGECACHE;
- if (flags & FPDF_RENDER_FORCEHALFTONE)
- pContext->m_pOptions->m_Flags |= RENDER_FORCE_HALFTONE;
- if (flags & FPDF_RENDER_NO_SMOOTHTEXT)
- pContext->m_pOptions->m_Flags |= RENDER_NOTEXTSMOOTH;
- if (flags & FPDF_RENDER_NO_SMOOTHIMAGE)
- pContext->m_pOptions->m_Flags |= RENDER_NOIMAGESMOOTH;
- if (flags & FPDF_RENDER_NO_SMOOTHPATH)
- pContext->m_pOptions->m_Flags |= RENDER_NOPATHSMOOTH;
- //Grayscale output
- if (flags & FPDF_GRAYSCALE)
- {
- pContext->m_pOptions->m_ColorMode = RENDER_COLOR_GRAY;
- pContext->m_pOptions->m_ForeColor = 0;
- pContext->m_pOptions->m_BackColor = 0xffffff;
- }
- const CPDF_OCContext::UsageType usage = (flags & FPDF_PRINTING) ? CPDF_OCContext::Print : CPDF_OCContext::View;
- pContext->m_pOptions->m_AddFlags = flags >> 8;
- pContext->m_pOptions->m_pOCContext = new CPDF_OCContext(pPage->m_pDocument, usage);
-
- CFX_AffineMatrix matrix;
- pPage->GetDisplayMatrix(matrix, start_x, start_y, size_x, size_y, rotate);
-
- FX_RECT clip;
- clip.left = start_x;
- clip.right = start_x + size_x;
- clip.top = start_y;
- clip.bottom = start_y + size_y;
- pContext->m_pDevice->SaveState();
- pContext->m_pDevice->SetClip_Rect(&clip);
-
- pContext->m_pContext = new CPDF_RenderContext;
- pContext->m_pContext->Create(pPage);
- pContext->m_pContext->AppendObjectList(pPage, &matrix);
-
- if (flags & FPDF_ANNOT) {
- pContext->m_pAnnots = new CPDF_AnnotList(pPage);
- FX_BOOL bPrinting = pContext->m_pDevice->GetDeviceClass() != FXDC_DISPLAY;
- pContext->m_pAnnots->DisplayAnnots(pPage, pContext->m_pContext, bPrinting, &matrix, TRUE, NULL);
- }
-
- pContext->m_pRenderer = new CPDF_ProgressiveRenderer(
- pContext->m_pContext, pContext->m_pDevice, pContext->m_pOptions);
- pContext->m_pRenderer->Start(pause);
- if (bNeedToRestore)
- pContext->m_pDevice->RestoreState();
-}
-
-DLLEXPORT int STDCALL FPDF_GetPageSizeByIndex(FPDF_DOCUMENT document, int page_index, double* width, double* height)
-{
- CPDF_Document* pDoc = (CPDF_Document*)document;
- if(pDoc == NULL)
- return FALSE;
-
- CPDF_Dictionary* pDict = pDoc->GetPage(page_index);
- if (pDict == NULL) return FALSE;
-
- CPDF_Page page;
- page.Load(pDoc, pDict);
- *width = page.GetPageWidth();
- *height = page.GetPageHeight();
-
+ device.Attach((CFX_DIBitmap*)bitmap);
+ if (!((CFX_DIBitmap*)bitmap)->HasAlpha())
+ color |= 0xFF000000;
+ FX_RECT rect(left, top, left + width, top + height);
+ device.FillRect(&rect, color);
+}
+
+DLLEXPORT void* STDCALL FPDFBitmap_GetBuffer(FPDF_BITMAP bitmap) {
+ if (bitmap == NULL)
+ return NULL;
+ return ((CFX_DIBitmap*)bitmap)->GetBuffer();
+}
+
+DLLEXPORT int STDCALL FPDFBitmap_GetWidth(FPDF_BITMAP bitmap) {
+ if (bitmap == NULL)
+ return 0;
+ return ((CFX_DIBitmap*)bitmap)->GetWidth();
+}
+
+DLLEXPORT int STDCALL FPDFBitmap_GetHeight(FPDF_BITMAP bitmap) {
+ if (bitmap == NULL)
+ return 0;
+ return ((CFX_DIBitmap*)bitmap)->GetHeight();
+}
+
+DLLEXPORT int STDCALL FPDFBitmap_GetStride(FPDF_BITMAP bitmap) {
+ if (bitmap == NULL)
+ return 0;
+ return ((CFX_DIBitmap*)bitmap)->GetPitch();
+}
+
+DLLEXPORT void STDCALL FPDFBitmap_Destroy(FPDF_BITMAP bitmap) {
+ delete (CFX_DIBitmap*)bitmap;
+}
+
+void FPDF_RenderPage_Retail(CRenderContext* pContext,
+ FPDF_PAGE page,
+ int start_x,
+ int start_y,
+ int size_x,
+ int size_y,
+ int rotate,
+ int flags,
+ FX_BOOL bNeedToRestore,
+ IFSDK_PAUSE_Adapter* pause) {
+ CPDF_Page* pPage = (CPDF_Page*)page;
+ if (pPage == NULL)
+ return;
+
+ if (!pContext->m_pOptions)
+ pContext->m_pOptions = new CPDF_RenderOptions;
+
+ if (flags & FPDF_LCD_TEXT)
+ pContext->m_pOptions->m_Flags |= RENDER_CLEARTYPE;
+ else
+ pContext->m_pOptions->m_Flags &= ~RENDER_CLEARTYPE;
+ if (flags & FPDF_NO_NATIVETEXT)
+ pContext->m_pOptions->m_Flags |= RENDER_NO_NATIVETEXT;
+ if (flags & FPDF_RENDER_LIMITEDIMAGECACHE)
+ pContext->m_pOptions->m_Flags |= RENDER_LIMITEDIMAGECACHE;
+ if (flags & FPDF_RENDER_FORCEHALFTONE)
+ pContext->m_pOptions->m_Flags |= RENDER_FORCE_HALFTONE;
+ if (flags & FPDF_RENDER_NO_SMOOTHTEXT)
+ pContext->m_pOptions->m_Flags |= RENDER_NOTEXTSMOOTH;
+ if (flags & FPDF_RENDER_NO_SMOOTHIMAGE)
+ pContext->m_pOptions->m_Flags |= RENDER_NOIMAGESMOOTH;
+ if (flags & FPDF_RENDER_NO_SMOOTHPATH)
+ pContext->m_pOptions->m_Flags |= RENDER_NOPATHSMOOTH;
+ // Grayscale output
+ if (flags & FPDF_GRAYSCALE) {
+ pContext->m_pOptions->m_ColorMode = RENDER_COLOR_GRAY;
+ pContext->m_pOptions->m_ForeColor = 0;
+ pContext->m_pOptions->m_BackColor = 0xffffff;
+ }
+ const CPDF_OCContext::UsageType usage =
+ (flags & FPDF_PRINTING) ? CPDF_OCContext::Print : CPDF_OCContext::View;
+ pContext->m_pOptions->m_AddFlags = flags >> 8;
+ pContext->m_pOptions->m_pOCContext =
+ new CPDF_OCContext(pPage->m_pDocument, usage);
+
+ CFX_AffineMatrix matrix;
+ pPage->GetDisplayMatrix(matrix, start_x, start_y, size_x, size_y, rotate);
+
+ FX_RECT clip;
+ clip.left = start_x;
+ clip.right = start_x + size_x;
+ clip.top = start_y;
+ clip.bottom = start_y + size_y;
+ pContext->m_pDevice->SaveState();
+ pContext->m_pDevice->SetClip_Rect(&clip);
+
+ pContext->m_pContext = new CPDF_RenderContext;
+ pContext->m_pContext->Create(pPage);
+ pContext->m_pContext->AppendObjectList(pPage, &matrix);
+
+ if (flags & FPDF_ANNOT) {
+ pContext->m_pAnnots = new CPDF_AnnotList(pPage);
+ FX_BOOL bPrinting = pContext->m_pDevice->GetDeviceClass() != FXDC_DISPLAY;
+ pContext->m_pAnnots->DisplayAnnots(pPage, pContext->m_pContext, bPrinting,
+ &matrix, TRUE, NULL);
+ }
+
+ pContext->m_pRenderer = new CPDF_ProgressiveRenderer(
+ pContext->m_pContext, pContext->m_pDevice, pContext->m_pOptions);
+ pContext->m_pRenderer->Start(pause);
+ if (bNeedToRestore)
+ pContext->m_pDevice->RestoreState();
+}
+
+DLLEXPORT int STDCALL FPDF_GetPageSizeByIndex(FPDF_DOCUMENT document,
+ int page_index,
+ double* width,
+ double* height) {
+ CPDF_Document* pDoc = (CPDF_Document*)document;
+ if (pDoc == NULL)
+ return FALSE;
+
+ CPDF_Dictionary* pDict = pDoc->GetPage(page_index);
+ if (pDict == NULL)
+ return FALSE;
+
+ CPDF_Page page;
+ page.Load(pDoc, pDict);
+ *width = page.GetPageWidth();
+ *height = page.GetPageHeight();
+
+ return TRUE;
+}
+
+DLLEXPORT FPDF_BOOL STDCALL
+FPDF_VIEWERREF_GetPrintScaling(FPDF_DOCUMENT document) {
+ CPDF_Document* pDoc = (CPDF_Document*)document;
+ if (!pDoc)
return TRUE;
+ CPDF_ViewerPreferences viewRef(pDoc);
+ return viewRef.PrintScaling();
}
-DLLEXPORT FPDF_BOOL STDCALL FPDF_VIEWERREF_GetPrintScaling(FPDF_DOCUMENT document)
-{
- CPDF_Document* pDoc = (CPDF_Document*)document;
- if (!pDoc) return TRUE;
- CPDF_ViewerPreferences viewRef(pDoc);
- return viewRef.PrintScaling();
-}
-
-DLLEXPORT int STDCALL FPDF_VIEWERREF_GetNumCopies(FPDF_DOCUMENT document)
-{
- CPDF_Document* pDoc = (CPDF_Document*)document;
- if (!pDoc) return 1;
- CPDF_ViewerPreferences viewRef(pDoc);
- return viewRef.NumCopies();
-}
-
-DLLEXPORT FPDF_PAGERANGE STDCALL FPDF_VIEWERREF_GetPrintPageRange(FPDF_DOCUMENT document)
-{
- CPDF_Document* pDoc = (CPDF_Document*)document;
- if (!pDoc) return NULL;
- CPDF_ViewerPreferences viewRef(pDoc);
- return viewRef.PrintPageRange();
-}
-
-DLLEXPORT FPDF_DUPLEXTYPE STDCALL FPDF_VIEWERREF_GetDuplex(FPDF_DOCUMENT document)
-{
- CPDF_Document* pDoc = (CPDF_Document*)document;
- if (!pDoc) return DuplexUndefined;
- CPDF_ViewerPreferences viewRef(pDoc);
- CFX_ByteString duplex = viewRef.Duplex();
- if (FX_BSTRC("Simplex") == duplex)
- return Simplex;
- if (FX_BSTRC("DuplexFlipShortEdge") == duplex)
- return DuplexFlipShortEdge;
- if (FX_BSTRC("DuplexFlipLongEdge") == duplex)
- return DuplexFlipLongEdge;
- return DuplexUndefined;
+DLLEXPORT int STDCALL FPDF_VIEWERREF_GetNumCopies(FPDF_DOCUMENT document) {
+ CPDF_Document* pDoc = (CPDF_Document*)document;
+ if (!pDoc)
+ return 1;
+ CPDF_ViewerPreferences viewRef(pDoc);
+ return viewRef.NumCopies();
}
-DLLEXPORT FPDF_DWORD STDCALL FPDF_CountNamedDests(FPDF_DOCUMENT document)
-{
- if (!document) return 0;
- CPDF_Document* pDoc = (CPDF_Document*)document;
-
- CPDF_Dictionary* pRoot = pDoc->GetRoot();
- if (!pRoot) return 0;
+DLLEXPORT FPDF_PAGERANGE STDCALL
+FPDF_VIEWERREF_GetPrintPageRange(FPDF_DOCUMENT document) {
+ CPDF_Document* pDoc = (CPDF_Document*)document;
+ if (!pDoc)
+ return NULL;
+ CPDF_ViewerPreferences viewRef(pDoc);
+ return viewRef.PrintPageRange();
+}
- CPDF_NameTree nameTree(pDoc, FX_BSTRC("Dests"));
- int count = nameTree.GetCount();
+DLLEXPORT FPDF_DUPLEXTYPE STDCALL
+FPDF_VIEWERREF_GetDuplex(FPDF_DOCUMENT document) {
+ CPDF_Document* pDoc = (CPDF_Document*)document;
+ if (!pDoc)
+ return DuplexUndefined;
+ CPDF_ViewerPreferences viewRef(pDoc);
+ CFX_ByteString duplex = viewRef.Duplex();
+ if (FX_BSTRC("Simplex") == duplex)
+ return Simplex;
+ if (FX_BSTRC("DuplexFlipShortEdge") == duplex)
+ return DuplexFlipShortEdge;
+ if (FX_BSTRC("DuplexFlipLongEdge") == duplex)
+ return DuplexFlipLongEdge;
+ return DuplexUndefined;
+}
+
+DLLEXPORT FPDF_DWORD STDCALL FPDF_CountNamedDests(FPDF_DOCUMENT document) {
+ if (!document)
+ return 0;
+ CPDF_Document* pDoc = (CPDF_Document*)document;
+
+ CPDF_Dictionary* pRoot = pDoc->GetRoot();
+ if (!pRoot)
+ return 0;
+
+ CPDF_NameTree nameTree(pDoc, FX_BSTRC("Dests"));
+ int count = nameTree.GetCount();
+ CPDF_Dictionary* pDest = pRoot->GetDict(FX_BSTRC("Dests"));
+ if (pDest)
+ count += pDest->GetCount();
+ return count;
+}
+
+DLLEXPORT FPDF_DEST STDCALL FPDF_GetNamedDestByName(FPDF_DOCUMENT document,
+ FPDF_BYTESTRING name) {
+ if (!document)
+ return NULL;
+ if (!name || name[0] == 0)
+ return NULL;
+
+ CPDF_Document* pDoc = (CPDF_Document*)document;
+ CPDF_NameTree name_tree(pDoc, FX_BSTRC("Dests"));
+ return name_tree.LookupNamedDest(pDoc, name);
+}
+
+DLLEXPORT FPDF_DEST STDCALL FPDF_GetNamedDest(FPDF_DOCUMENT document,
+ int index,
+ void* buffer,
+ long* buflen) {
+ if (!buffer)
+ *buflen = 0;
+ if (!document || index < 0)
+ return NULL;
+ CPDF_Document* pDoc = (CPDF_Document*)document;
+
+ CPDF_Dictionary* pRoot = pDoc->GetRoot();
+ if (!pRoot)
+ return NULL;
+
+ CPDF_Object* pDestObj = NULL;
+ CFX_ByteString bsName;
+ CPDF_NameTree nameTree(pDoc, FX_BSTRC("Dests"));
+ int count = nameTree.GetCount();
+ if (index >= count) {
CPDF_Dictionary* pDest = pRoot->GetDict(FX_BSTRC("Dests"));
- if (pDest)
- count += pDest->GetCount();
- return count;
-}
-
-DLLEXPORT FPDF_DEST STDCALL FPDF_GetNamedDestByName(FPDF_DOCUMENT document,FPDF_BYTESTRING name)
-{
- if (!document)
- return NULL;
- if (!name || name[0] == 0)
- return NULL;
-
- CPDF_Document* pDoc = (CPDF_Document*)document;
- CPDF_NameTree name_tree(pDoc, FX_BSTRC("Dests"));
- return name_tree.LookupNamedDest(pDoc, name);
-}
-
-DLLEXPORT FPDF_DEST STDCALL FPDF_GetNamedDest(FPDF_DOCUMENT document, int index, void* buffer, long* buflen)
-{
- if (!buffer)
- *buflen = 0;
- if (!document || index < 0) return NULL;
- CPDF_Document* pDoc = (CPDF_Document*)document;
-
- CPDF_Dictionary* pRoot = pDoc->GetRoot();
- if (!pRoot) return NULL;
-
- CPDF_Object* pDestObj = NULL;
- CFX_ByteString bsName;
- CPDF_NameTree nameTree(pDoc, FX_BSTRC("Dests"));
- int count = nameTree.GetCount();
- if (index >= count) {
- CPDF_Dictionary* pDest = pRoot->GetDict(FX_BSTRC("Dests"));
- if (!pDest) return NULL;
- if (index >= count + pDest->GetCount()) return NULL;
- index -= count;
- FX_POSITION pos = pDest->GetStartPos();
- int i = 0;
- while (pos) {
- pDestObj = pDest->GetNextElement(pos, bsName);
- if (!pDestObj) continue;
- if (i == index) break;
- i++;
- }
- } else {
- pDestObj = nameTree.LookupValue(index, bsName);
- }
- if (!pDestObj) return NULL;
- if (pDestObj->GetType() == PDFOBJ_DICTIONARY) {
- pDestObj = ((CPDF_Dictionary*)pDestObj)->GetArray(FX_BSTRC("D"));
- if (!pDestObj) return NULL;
- }
- if (pDestObj->GetType() != PDFOBJ_ARRAY) return NULL;
- CFX_WideString wsName = PDF_DecodeText(bsName);
- CFX_ByteString utf16Name = wsName.UTF16LE_Encode();
- unsigned int len = utf16Name.GetLength();
- if (!buffer) {
- *buflen = len;
- } else if (*buflen >= len) {
- memcpy(buffer, utf16Name.c_str(), len);
- *buflen = len;
- } else {
- *buflen = -1;
+ if (!pDest)
+ return NULL;
+ if (index >= count + pDest->GetCount())
+ return NULL;
+ index -= count;
+ FX_POSITION pos = pDest->GetStartPos();
+ int i = 0;
+ while (pos) {
+ pDestObj = pDest->GetNextElement(pos, bsName);
+ if (!pDestObj)
+ continue;
+ if (i == index)
+ break;
+ i++;
}
- return (FPDF_DEST)pDestObj;
+ } else {
+ pDestObj = nameTree.LookupValue(index, bsName);
+ }
+ if (!pDestObj)
+ return NULL;
+ if (pDestObj->GetType() == PDFOBJ_DICTIONARY) {
+ pDestObj = ((CPDF_Dictionary*)pDestObj)->GetArray(FX_BSTRC("D"));
+ if (!pDestObj)
+ return NULL;
+ }
+ if (pDestObj->GetType() != PDFOBJ_ARRAY)
+ return NULL;
+ CFX_WideString wsName = PDF_DecodeText(bsName);
+ CFX_ByteString utf16Name = wsName.UTF16LE_Encode();
+ unsigned int len = utf16Name.GetLength();
+ if (!buffer) {
+ *buflen = len;
+ } else if (*buflen >= len) {
+ memcpy(buffer, utf16Name.c_str(), len);
+ *buflen = len;
+ } else {
+ *buflen = -1;
+ }
+ return (FPDF_DEST)pDestObj;
}
diff --git a/fpdfsdk/src/fpdfview_embeddertest.cpp b/fpdfsdk/src/fpdfview_embeddertest.cpp
index cc0aa1f818..896a196fb7 100644
--- a/fpdfsdk/src/fpdfview_embeddertest.cpp
+++ b/fpdfsdk/src/fpdfview_embeddertest.cpp
@@ -14,8 +14,7 @@ TEST(fpdf, CApiTest) {
EXPECT_TRUE(CheckPDFiumCApi());
}
-class FPDFViewEmbeddertest : public EmbedderTest {
-};
+class FPDFViewEmbeddertest : public EmbedderTest {};
TEST_F(FPDFViewEmbeddertest, Document) {
EXPECT_TRUE(OpenDocument("testing/resources/about_blank.pdf"));
@@ -54,7 +53,7 @@ TEST_F(FPDFViewEmbeddertest, NamedDests) {
FPDF_DEST dest;
// Query the size of the first item.
- buffer_size = 2000000; // Absurdly large, check not used for this case.
+ buffer_size = 2000000; // Absurdly large, check not used for this case.
dest = FPDF_GetNamedDest(document(), 0, nullptr, &buffer_size);
EXPECT_NE(nullptr, dest);
EXPECT_EQ(12u, buffer_size);
@@ -104,9 +103,8 @@ TEST_F(FPDFViewEmbeddertest, NamedDests) {
dest = FPDF_GetNamedDest(document(), 4, fixed_buffer, &buffer_size);
EXPECT_NE(nullptr, dest);
EXPECT_EQ(30u, buffer_size);
- EXPECT_EQ(
- std::string("F\0i\0r\0s\0t\0A\0l\0t\0e\0r\0n\0a\0t\0e\0\0\0", 30),
- std::string(fixed_buffer, buffer_size));
+ EXPECT_EQ(std::string("F\0i\0r\0s\0t\0A\0l\0t\0e\0r\0n\0a\0t\0e\0\0\0", 30),
+ std::string(fixed_buffer, buffer_size));
// Try to retrieve sixth item with ample buffer. Item istaken from the
// old-style Dests dictionary object but has a sub-dictionary in
@@ -115,9 +113,8 @@ TEST_F(FPDFViewEmbeddertest, NamedDests) {
dest = FPDF_GetNamedDest(document(), 5, fixed_buffer, &buffer_size);
EXPECT_NE(nullptr, dest);
EXPECT_EQ(28u, buffer_size);
- EXPECT_EQ(
- std::string("L\0a\0s\0t\0A\0l\0t\0e\0r\0n\0a\0t\0e\0\0\0", 28),
- std::string(fixed_buffer, buffer_size));
+ EXPECT_EQ(std::string("L\0a\0s\0t\0A\0l\0t\0e\0r\0n\0a\0t\0e\0\0\0", 28),
+ std::string(fixed_buffer, buffer_size));
// Try to retrieve non-existent item with ample buffer.
buffer_size = sizeof(fixed_buffer);
diff --git a/fpdfsdk/src/fsdk_actionhandler.cpp b/fpdfsdk/src/fsdk_actionhandler.cpp
index 145559e057..5a2063e6dc 100644
--- a/fpdfsdk/src/fsdk_actionhandler.cpp
+++ b/fpdfsdk/src/fsdk_actionhandler.cpp
@@ -13,235 +13,224 @@
CPDFSDK_ActionHandler::CPDFSDK_ActionHandler(CPDFDoc_Environment* pEvi)
: m_pFormActionHandler(new CPDFSDK_FormActionHandler),
- m_pMediaActionHandler(NULL) {
-}
-
-void CPDFSDK_ActionHandler::SetMediaActionHandler(CPDFSDK_MediaActionHandler* pHandler)
-{
- ASSERT(pHandler != NULL);
- ASSERT(m_pMediaActionHandler == NULL);
- m_pMediaActionHandler = pHandler;
-}
-
-//document open
-FX_BOOL CPDFSDK_ActionHandler::DoAction_DocOpen(const CPDF_Action& action, CPDFSDK_Document* pDocument)
-{
- CFX_PtrList list;
- return ExecuteDocumentOpenAction(action, pDocument, list);
-}
-
-//document open
-FX_BOOL CPDFSDK_ActionHandler::DoAction_JavaScript(const CPDF_Action& JsAction,CFX_WideString csJSName,
- CPDFSDK_Document* pDocument)
-{
- if (JsAction.GetType() == CPDF_Action::JavaScript)
- {
- CFX_WideString swJS = JsAction.GetJavaScript();
- if (!swJS.IsEmpty())
- {
- RunDocumentOpenJavaScript(pDocument, csJSName, swJS);
- return TRUE;
- }
- }
-
- return FALSE;
-}
-
-FX_BOOL CPDFSDK_ActionHandler::DoAction_FieldJavaScript(const CPDF_Action& JsAction, CPDF_AAction::AActionType type,
- CPDFSDK_Document* pDocument, CPDF_FormField* pFormField,
- PDFSDK_FieldAction& data)
-{
- CPDFDoc_Environment* pEnv = pDocument->GetEnv();
- ASSERT(pEnv);
- if (pEnv->IsJSInitiated() && JsAction.GetType() == CPDF_Action::JavaScript)
- {
- CFX_WideString swJS = JsAction.GetJavaScript();
- if (!swJS.IsEmpty())
- {
- RunFieldJavaScript(pDocument, pFormField, type, data, swJS);
- return TRUE;
- }
- }
- return FALSE;
-}
-
-FX_BOOL CPDFSDK_ActionHandler::DoAction_Page(const CPDF_Action& action, enum CPDF_AAction::AActionType eType,
- CPDFSDK_Document* pDocument)
-{
- CFX_PtrList list;
- return ExecuteDocumentPageAction(action, eType, pDocument, list);
-}
-
-FX_BOOL CPDFSDK_ActionHandler::DoAction_Document(const CPDF_Action& action, enum CPDF_AAction::AActionType eType,
- CPDFSDK_Document* pDocument)
-{
- CFX_PtrList list;
- return ExecuteDocumentPageAction(action, eType, pDocument, list);
-}
-
-FX_BOOL CPDFSDK_ActionHandler::DoAction_BookMark(CPDF_Bookmark *pBookMark, const CPDF_Action& action, CPDF_AAction::AActionType type,
- CPDFSDK_Document* pDocument)
-{
- CFX_PtrList list;
- return ExecuteBookMark(action, pDocument, pBookMark, list);
-}
-
-FX_BOOL CPDFSDK_ActionHandler::DoAction_Screen(const CPDF_Action& action, CPDF_AAction::AActionType type,
- CPDFSDK_Document* pDocument, CPDFSDK_Annot* pScreen)
-{
- CFX_PtrList list;
- return ExecuteScreenAction(action, type, pDocument, pScreen, list);
-}
-
-FX_BOOL CPDFSDK_ActionHandler::DoAction_Link(const CPDF_Action& action,
- CPDFSDK_Document* pDocument)
-{
- CFX_PtrList list;
- return ExecuteLinkAction(action, pDocument, list);
-}
-
-FX_BOOL CPDFSDK_ActionHandler::DoAction_Field(const CPDF_Action& action, CPDF_AAction::AActionType type,
- CPDFSDK_Document* pDocument,
- CPDF_FormField* pFormField, PDFSDK_FieldAction& data)
-{
- CFX_PtrList list;
- return ExecuteFieldAction(action, type, pDocument, pFormField, data, list);
-}
-
-FX_BOOL CPDFSDK_ActionHandler::ExecuteDocumentOpenAction(const CPDF_Action& action, CPDFSDK_Document* pDocument,
- CFX_PtrList& list)
-{
- CPDF_Dictionary* pDict = action.GetDict();
- if (list.Find(pDict))
- return FALSE;
-
- list.AddTail(pDict);
-
- CPDFDoc_Environment* pEnv = pDocument->GetEnv();
- ASSERT(pEnv);
- if (action.GetType() == CPDF_Action::JavaScript)
- {
- if(pEnv->IsJSInitiated())
- {
- CFX_WideString swJS = action.GetJavaScript();
- if (!swJS.IsEmpty())
- {
- RunDocumentOpenJavaScript(pDocument, L"", swJS);
- }
- }
- }
- else
- {
- DoAction_NoJs(action, pDocument);
- }
-
- for (int32_t i=0,sz=action.GetSubActionsCount(); i<sz; i++)
- {
- CPDF_Action subaction = action.GetSubAction(i);
- if (!ExecuteDocumentOpenAction(subaction, pDocument, list)) return FALSE;
- }
-
- return TRUE;
-}
-
-FX_BOOL CPDFSDK_ActionHandler::ExecuteLinkAction(const CPDF_Action& action, CPDFSDK_Document* pDocument,
- CFX_PtrList& list)
-{
- ASSERT(pDocument != NULL);
-
- CPDF_Dictionary* pDict = action.GetDict();
- if (list.Find(pDict))
- return FALSE;
-
- list.AddTail(pDict);
-
- CPDFDoc_Environment* pEnv = pDocument->GetEnv();
- ASSERT(pEnv);
- if (action.GetType() == CPDF_Action::JavaScript)
- {
- if(pEnv->IsJSInitiated())
- {
- CFX_WideString swJS = action.GetJavaScript();
- if (!swJS.IsEmpty())
- {
- IFXJS_Runtime* pRuntime = pDocument->GetJsRuntime(); //????
- ASSERT(pRuntime != NULL);
-
- pRuntime->SetReaderDocument(pDocument);
-
- IFXJS_Context* pContext = pRuntime->NewContext();
- ASSERT(pContext != NULL);
-
- pContext->OnLink_MouseUp(pDocument);
-
- CFX_WideString csInfo;
- FX_BOOL bRet = pContext->RunScript(swJS, csInfo);
- if (!bRet)
- {
- // FIXME: return error.
- }
-
- pRuntime->ReleaseContext(pContext);
- }
- }
- }
- else
- {
- DoAction_NoJs(action, pDocument);
- }
-
- for (int32_t i=0,sz=action.GetSubActionsCount(); i<sz; i++)
- {
- CPDF_Action subaction = action.GetSubAction(i);
- if (!ExecuteLinkAction(subaction, pDocument, list)) return FALSE;
- }
-
- return TRUE;
-}
-
-FX_BOOL CPDFSDK_ActionHandler::ExecuteDocumentPageAction(const CPDF_Action& action, CPDF_AAction::AActionType type,
- CPDFSDK_Document* pDocument, CFX_PtrList& list)
-{
- ASSERT(pDocument != NULL);
-
- CPDF_Dictionary* pDict = action.GetDict();
- if (list.Find(pDict))
- return FALSE;
-
- list.AddTail(pDict);
-
- CPDFDoc_Environment* pEnv = pDocument->GetEnv();
- ASSERT(pEnv);
- if (action.GetType() == CPDF_Action::JavaScript)
- {
- if(pEnv->IsJSInitiated())
- {
- CFX_WideString swJS = action.GetJavaScript();
- if (!swJS.IsEmpty())
- {
- RunDocumentPageJavaScript(pDocument, type, swJS);
- }
- }
- }
- else
- {
- DoAction_NoJs(action, pDocument);
- }
-
- if (!IsValidDocView(pDocument))
- return FALSE;
-
- for (int32_t i=0,sz=action.GetSubActionsCount(); i<sz; i++)
- {
- CPDF_Action subaction = action.GetSubAction(i);
- if (!ExecuteDocumentPageAction(subaction, type, pDocument, list)) return FALSE;
- }
-
- return TRUE;
-}
-
-FX_BOOL CPDFSDK_ActionHandler::IsValidField(CPDFSDK_Document* pDocument, CPDF_Dictionary* pFieldDict)
-{
+ m_pMediaActionHandler(NULL) {}
+
+void CPDFSDK_ActionHandler::SetMediaActionHandler(
+ CPDFSDK_MediaActionHandler* pHandler) {
+ ASSERT(pHandler != NULL);
+ ASSERT(m_pMediaActionHandler == NULL);
+ m_pMediaActionHandler = pHandler;
+}
+
+// document open
+FX_BOOL CPDFSDK_ActionHandler::DoAction_DocOpen(const CPDF_Action& action,
+ CPDFSDK_Document* pDocument) {
+ CFX_PtrList list;
+ return ExecuteDocumentOpenAction(action, pDocument, list);
+}
+
+// document open
+FX_BOOL CPDFSDK_ActionHandler::DoAction_JavaScript(
+ const CPDF_Action& JsAction,
+ CFX_WideString csJSName,
+ CPDFSDK_Document* pDocument) {
+ if (JsAction.GetType() == CPDF_Action::JavaScript) {
+ CFX_WideString swJS = JsAction.GetJavaScript();
+ if (!swJS.IsEmpty()) {
+ RunDocumentOpenJavaScript(pDocument, csJSName, swJS);
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
+
+FX_BOOL CPDFSDK_ActionHandler::DoAction_FieldJavaScript(
+ const CPDF_Action& JsAction,
+ CPDF_AAction::AActionType type,
+ CPDFSDK_Document* pDocument,
+ CPDF_FormField* pFormField,
+ PDFSDK_FieldAction& data) {
+ CPDFDoc_Environment* pEnv = pDocument->GetEnv();
+ ASSERT(pEnv);
+ if (pEnv->IsJSInitiated() && JsAction.GetType() == CPDF_Action::JavaScript) {
+ CFX_WideString swJS = JsAction.GetJavaScript();
+ if (!swJS.IsEmpty()) {
+ RunFieldJavaScript(pDocument, pFormField, type, data, swJS);
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
+FX_BOOL CPDFSDK_ActionHandler::DoAction_Page(
+ const CPDF_Action& action,
+ enum CPDF_AAction::AActionType eType,
+ CPDFSDK_Document* pDocument) {
+ CFX_PtrList list;
+ return ExecuteDocumentPageAction(action, eType, pDocument, list);
+}
+
+FX_BOOL CPDFSDK_ActionHandler::DoAction_Document(
+ const CPDF_Action& action,
+ enum CPDF_AAction::AActionType eType,
+ CPDFSDK_Document* pDocument) {
+ CFX_PtrList list;
+ return ExecuteDocumentPageAction(action, eType, pDocument, list);
+}
+
+FX_BOOL CPDFSDK_ActionHandler::DoAction_BookMark(CPDF_Bookmark* pBookMark,
+ const CPDF_Action& action,
+ CPDF_AAction::AActionType type,
+ CPDFSDK_Document* pDocument) {
+ CFX_PtrList list;
+ return ExecuteBookMark(action, pDocument, pBookMark, list);
+}
+
+FX_BOOL CPDFSDK_ActionHandler::DoAction_Screen(const CPDF_Action& action,
+ CPDF_AAction::AActionType type,
+ CPDFSDK_Document* pDocument,
+ CPDFSDK_Annot* pScreen) {
+ CFX_PtrList list;
+ return ExecuteScreenAction(action, type, pDocument, pScreen, list);
+}
+
+FX_BOOL CPDFSDK_ActionHandler::DoAction_Link(const CPDF_Action& action,
+ CPDFSDK_Document* pDocument) {
+ CFX_PtrList list;
+ return ExecuteLinkAction(action, pDocument, list);
+}
+
+FX_BOOL CPDFSDK_ActionHandler::DoAction_Field(const CPDF_Action& action,
+ CPDF_AAction::AActionType type,
+ CPDFSDK_Document* pDocument,
+ CPDF_FormField* pFormField,
+ PDFSDK_FieldAction& data) {
+ CFX_PtrList list;
+ return ExecuteFieldAction(action, type, pDocument, pFormField, data, list);
+}
+
+FX_BOOL CPDFSDK_ActionHandler::ExecuteDocumentOpenAction(
+ const CPDF_Action& action,
+ CPDFSDK_Document* pDocument,
+ CFX_PtrList& list) {
+ CPDF_Dictionary* pDict = action.GetDict();
+ if (list.Find(pDict))
+ return FALSE;
+
+ list.AddTail(pDict);
+
+ CPDFDoc_Environment* pEnv = pDocument->GetEnv();
+ ASSERT(pEnv);
+ if (action.GetType() == CPDF_Action::JavaScript) {
+ if (pEnv->IsJSInitiated()) {
+ CFX_WideString swJS = action.GetJavaScript();
+ if (!swJS.IsEmpty()) {
+ RunDocumentOpenJavaScript(pDocument, L"", swJS);
+ }
+ }
+ } else {
+ DoAction_NoJs(action, pDocument);
+ }
+
+ for (int32_t i = 0, sz = action.GetSubActionsCount(); i < sz; i++) {
+ CPDF_Action subaction = action.GetSubAction(i);
+ if (!ExecuteDocumentOpenAction(subaction, pDocument, list))
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+FX_BOOL CPDFSDK_ActionHandler::ExecuteLinkAction(const CPDF_Action& action,
+ CPDFSDK_Document* pDocument,
+ CFX_PtrList& list) {
+ ASSERT(pDocument != NULL);
+
+ CPDF_Dictionary* pDict = action.GetDict();
+ if (list.Find(pDict))
+ return FALSE;
+
+ list.AddTail(pDict);
+
+ CPDFDoc_Environment* pEnv = pDocument->GetEnv();
+ ASSERT(pEnv);
+ if (action.GetType() == CPDF_Action::JavaScript) {
+ if (pEnv->IsJSInitiated()) {
+ CFX_WideString swJS = action.GetJavaScript();
+ if (!swJS.IsEmpty()) {
+ IFXJS_Runtime* pRuntime = pDocument->GetJsRuntime(); //????
+ ASSERT(pRuntime != NULL);
+
+ pRuntime->SetReaderDocument(pDocument);
+
+ IFXJS_Context* pContext = pRuntime->NewContext();
+ ASSERT(pContext != NULL);
+
+ pContext->OnLink_MouseUp(pDocument);
+
+ CFX_WideString csInfo;
+ FX_BOOL bRet = pContext->RunScript(swJS, csInfo);
+ if (!bRet) {
+ // FIXME: return error.
+ }
+
+ pRuntime->ReleaseContext(pContext);
+ }
+ }
+ } else {
+ DoAction_NoJs(action, pDocument);
+ }
+
+ for (int32_t i = 0, sz = action.GetSubActionsCount(); i < sz; i++) {
+ CPDF_Action subaction = action.GetSubAction(i);
+ if (!ExecuteLinkAction(subaction, pDocument, list))
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+FX_BOOL CPDFSDK_ActionHandler::ExecuteDocumentPageAction(
+ const CPDF_Action& action,
+ CPDF_AAction::AActionType type,
+ CPDFSDK_Document* pDocument,
+ CFX_PtrList& list) {
+ ASSERT(pDocument != NULL);
+
+ CPDF_Dictionary* pDict = action.GetDict();
+ if (list.Find(pDict))
+ return FALSE;
+
+ list.AddTail(pDict);
+
+ CPDFDoc_Environment* pEnv = pDocument->GetEnv();
+ ASSERT(pEnv);
+ if (action.GetType() == CPDF_Action::JavaScript) {
+ if (pEnv->IsJSInitiated()) {
+ CFX_WideString swJS = action.GetJavaScript();
+ if (!swJS.IsEmpty()) {
+ RunDocumentPageJavaScript(pDocument, type, swJS);
+ }
+ }
+ } else {
+ DoAction_NoJs(action, pDocument);
+ }
+
+ if (!IsValidDocView(pDocument))
+ return FALSE;
+
+ for (int32_t i = 0, sz = action.GetSubActionsCount(); i < sz; i++) {
+ CPDF_Action subaction = action.GetSubAction(i);
+ if (!ExecuteDocumentPageAction(subaction, type, pDocument, list))
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+FX_BOOL CPDFSDK_ActionHandler::IsValidField(CPDFSDK_Document* pDocument,
+ CPDF_Dictionary* pFieldDict) {
ASSERT(pDocument != NULL);
ASSERT(pFieldDict != NULL);
@@ -254,554 +243,545 @@ FX_BOOL CPDFSDK_ActionHandler::IsValidField(CPDFSDK_Document* pDocument, CPDF_Di
return pPDFInterForm->GetFieldByDict(pFieldDict) != NULL;
}
-FX_BOOL CPDFSDK_ActionHandler::ExecuteFieldAction(const CPDF_Action& action, CPDF_AAction::AActionType type,
- CPDFSDK_Document* pDocument, CPDF_FormField* pFormField,
- PDFSDK_FieldAction& data, CFX_PtrList& list)
-{
- ASSERT(pDocument != NULL);
-
- CPDF_Dictionary* pDict = action.GetDict();
- if (list.Find(pDict))
- return FALSE;
-
- list.AddTail(pDict);
-
- CPDFDoc_Environment* pEnv = pDocument->GetEnv();
- ASSERT(pEnv);
- if (action.GetType() == CPDF_Action::JavaScript)
- {
- if(pEnv->IsJSInitiated())
- {
- CFX_WideString swJS = action.GetJavaScript();
- if (!swJS.IsEmpty())
- {
- RunFieldJavaScript(pDocument, pFormField, type, data, swJS);
- if (!IsValidField(pDocument, pFormField->GetFieldDict()))
- return FALSE;
- }
- }
- }
- else
- {
- DoAction_NoJs(action, pDocument);
- }
-
- for (int32_t i=0,sz=action.GetSubActionsCount(); i<sz; i++)
- {
- CPDF_Action subaction = action.GetSubAction(i);
- if (!ExecuteFieldAction(subaction, type, pDocument, pFormField, data, list)) return FALSE;
- }
-
- return TRUE;
-}
-
-FX_BOOL CPDFSDK_ActionHandler::ExecuteScreenAction(const CPDF_Action& action, CPDF_AAction::AActionType type,
- CPDFSDK_Document* pDocument, CPDFSDK_Annot* pScreen, CFX_PtrList& list)
-{
- ASSERT(pDocument != NULL);
-
- CPDF_Dictionary* pDict = action.GetDict();
- if (list.Find(pDict))
- return FALSE;
-
- list.AddTail(pDict);
-
- CPDFDoc_Environment* pEnv = pDocument->GetEnv();
- ASSERT(pEnv);
- if (action.GetType() == CPDF_Action::JavaScript)
- {
- if(pEnv->IsJSInitiated())
- {
- CFX_WideString swJS = action.GetJavaScript();
- if (!swJS.IsEmpty())
- {
- IFXJS_Runtime* pRuntime = pDocument->GetJsRuntime();
- ASSERT(pRuntime != NULL);
-
- pRuntime->SetReaderDocument(pDocument);
-
- IFXJS_Context* pContext = pRuntime->NewContext();
- ASSERT(pContext != NULL);
-
- // switch (type)
- // {
- // case CPDF_AAction::CursorEnter:
- // pContext->OnScreen_MouseEnter(IsCTRLpressed(), IsSHIFTpressed(), pScreen);
- // break;
- // case CPDF_AAction::CursorExit:
- // pContext->OnScreen_MouseExit(IsCTRLpressed(), IsSHIFTpressed(), pScreen);
- // break;
- // case CPDF_AAction::ButtonDown:
- // pContext->OnScreen_MouseDown(IsCTRLpressed(), IsSHIFTpressed(), pScreen);
- // break;
- // case CPDF_AAction::ButtonUp:
- // pContext->OnScreen_MouseUp(IsCTRLpressed(), IsSHIFTpressed(), pScreen);
- // break;
- // case CPDF_AAction::GetFocus:
- // pContext->OnScreen_Focus(IsCTRLpressed(), IsSHIFTpressed(), pScreen);
- // break;
- // case CPDF_AAction::LoseFocus:
- // pContext->OnScreen_Blur(IsCTRLpressed(), IsSHIFTpressed(), pScreen);
- // break;
- // case CPDF_AAction::PageOpen:
- // pContext->OnScreen_Open(IsCTRLpressed(), IsSHIFTpressed(), pScreen);
- // break;
- // case CPDF_AAction::PageClose:
- // pContext->OnScreen_Close(IsCTRLpressed(), IsSHIFTpressed(), pScreen);
- // break;
- // case CPDF_AAction::PageVisible:
- // pContext->OnScreen_InView(IsCTRLpressed(), IsSHIFTpressed(), pScreen);
- // break;
- // case CPDF_AAction::PageInvisible:
- // pContext->OnScreen_OutView(IsCTRLpressed(), IsSHIFTpressed(), pScreen);
- // break;
- // default:
- // ASSERT(FALSE);
- // break;
- // }
-
- CFX_WideString csInfo;
- FX_BOOL bRet = pContext->RunScript(swJS, csInfo);
- if (!bRet)
- {
- //CBCL_FormNotify::MsgBoxJSError(pPageView->GetPageViewWnd(), csInfo);
- }
-
- pRuntime->ReleaseContext(pContext);
- }
- }
- }
- else
- {
- DoAction_NoJs(action, pDocument);
- }
-
- for (int32_t i=0,sz=action.GetSubActionsCount(); i<sz; i++)
- {
- CPDF_Action subaction = action.GetSubAction(i);
- if (!ExecuteScreenAction(subaction, type, pDocument, pScreen, list)) return FALSE;
- }
-
- return TRUE;
-}
-
-FX_BOOL CPDFSDK_ActionHandler::ExecuteBookMark(const CPDF_Action& action, CPDFSDK_Document* pDocument,
- CPDF_Bookmark* pBookmark, CFX_PtrList& list)
-{
- ASSERT(pDocument != NULL);
-
- CPDF_Dictionary* pDict = action.GetDict();
- if (list.Find(pDict))
- return FALSE;
-
- list.AddTail(pDict);
-
- CPDFDoc_Environment* pEnv = pDocument->GetEnv();
- ASSERT(pEnv);
- if (action.GetType() == CPDF_Action::JavaScript)
- {
- if(pEnv->IsJSInitiated())
- {
- CFX_WideString swJS = action.GetJavaScript();
- if (!swJS.IsEmpty())
- {
- IFXJS_Runtime* pRuntime = pDocument->GetJsRuntime();
- ASSERT(pRuntime != NULL);
-
- pRuntime->SetReaderDocument(pDocument);
-
- IFXJS_Context* pContext = pRuntime->NewContext();
- ASSERT(pContext != NULL);
-
- pContext->OnBookmark_MouseUp(pBookmark);
-
- CFX_WideString csInfo;
- FX_BOOL bRet = pContext->RunScript(swJS, csInfo);
- if (!bRet)
- {
- //CBCL_FormNotify::MsgBoxJSError(pPageView->GetPageViewWnd(), csInfo);
- }
-
- pRuntime->ReleaseContext(pContext);
- }
- }
- }
- else
- {
- DoAction_NoJs(action, pDocument);
- }
-
- for (int32_t i=0,sz=action.GetSubActionsCount(); i<sz; i++)
- {
- CPDF_Action subaction = action.GetSubAction(i);
- if (!ExecuteBookMark(subaction, pDocument, pBookmark, list)) return FALSE;
- }
-
- return TRUE;
-}
-
-void CPDFSDK_ActionHandler::DoAction_NoJs(const CPDF_Action& action, CPDFSDK_Document* pDocument)
-{
- ASSERT(pDocument != NULL);
-
- switch (action.GetType())
- {
- case CPDF_Action::GoTo:
- DoAction_GoTo(pDocument, action);
- break;
- case CPDF_Action::GoToR:
- DoAction_GoToR(pDocument, action);
- break;
- case CPDF_Action::GoToE:
- break;
- case CPDF_Action::Launch:
- DoAction_Launch(pDocument, action);
- break;
- case CPDF_Action::Thread:
- break;
- case CPDF_Action::URI:
- DoAction_URI(pDocument, action);
- break;
- case CPDF_Action::Sound:
- if (m_pMediaActionHandler)
- {
- m_pMediaActionHandler->DoAction_Sound(action, pDocument);
- }
- break;
- case CPDF_Action::Movie:
- if (m_pMediaActionHandler)
- {
- m_pMediaActionHandler->DoAction_Movie(action, pDocument);
- }
- break;
- case CPDF_Action::Hide:
- if (m_pFormActionHandler)
- {
- m_pFormActionHandler->DoAction_Hide(action, pDocument);
- }
- break;
- case CPDF_Action::Named:
- DoAction_Named(pDocument, action);
- break;
- case CPDF_Action::SubmitForm:
- if (m_pFormActionHandler)
- {
- m_pFormActionHandler->DoAction_SubmitForm(action, pDocument);
- }
- break;
- case CPDF_Action::ResetForm:
- if (m_pFormActionHandler)
- {
- m_pFormActionHandler->DoAction_ResetForm(action, pDocument);
- }
- break;
- case CPDF_Action::ImportData:
- if (m_pFormActionHandler)
- {
- m_pFormActionHandler->DoAction_ImportData(action, pDocument);
- }
- break;
- case CPDF_Action::JavaScript:
- ASSERT(FALSE);
- break;
- case CPDF_Action::SetOCGState:
- DoAction_SetOCGState(pDocument, action);
- break;
- case CPDF_Action::Rendition:
- if (m_pMediaActionHandler)
- {
- m_pMediaActionHandler->DoAction_Rendition(action, pDocument);
- }
- break;
- case CPDF_Action::Trans:
- break;
- case CPDF_Action::GoTo3DView:
- break;
- default:
- break;
- }
-}
-
-FX_BOOL CPDFSDK_ActionHandler::IsValidDocView(CPDFSDK_Document* pDocument)
-{
- ASSERT(pDocument != NULL);
- return TRUE;
+FX_BOOL CPDFSDK_ActionHandler::ExecuteFieldAction(
+ const CPDF_Action& action,
+ CPDF_AAction::AActionType type,
+ CPDFSDK_Document* pDocument,
+ CPDF_FormField* pFormField,
+ PDFSDK_FieldAction& data,
+ CFX_PtrList& list) {
+ ASSERT(pDocument != NULL);
+
+ CPDF_Dictionary* pDict = action.GetDict();
+ if (list.Find(pDict))
+ return FALSE;
+
+ list.AddTail(pDict);
+
+ CPDFDoc_Environment* pEnv = pDocument->GetEnv();
+ ASSERT(pEnv);
+ if (action.GetType() == CPDF_Action::JavaScript) {
+ if (pEnv->IsJSInitiated()) {
+ CFX_WideString swJS = action.GetJavaScript();
+ if (!swJS.IsEmpty()) {
+ RunFieldJavaScript(pDocument, pFormField, type, data, swJS);
+ if (!IsValidField(pDocument, pFormField->GetFieldDict()))
+ return FALSE;
+ }
+ }
+ } else {
+ DoAction_NoJs(action, pDocument);
+ }
+
+ for (int32_t i = 0, sz = action.GetSubActionsCount(); i < sz; i++) {
+ CPDF_Action subaction = action.GetSubAction(i);
+ if (!ExecuteFieldAction(subaction, type, pDocument, pFormField, data, list))
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+FX_BOOL CPDFSDK_ActionHandler::ExecuteScreenAction(
+ const CPDF_Action& action,
+ CPDF_AAction::AActionType type,
+ CPDFSDK_Document* pDocument,
+ CPDFSDK_Annot* pScreen,
+ CFX_PtrList& list) {
+ ASSERT(pDocument != NULL);
+
+ CPDF_Dictionary* pDict = action.GetDict();
+ if (list.Find(pDict))
+ return FALSE;
+
+ list.AddTail(pDict);
+
+ CPDFDoc_Environment* pEnv = pDocument->GetEnv();
+ ASSERT(pEnv);
+ if (action.GetType() == CPDF_Action::JavaScript) {
+ if (pEnv->IsJSInitiated()) {
+ CFX_WideString swJS = action.GetJavaScript();
+ if (!swJS.IsEmpty()) {
+ IFXJS_Runtime* pRuntime = pDocument->GetJsRuntime();
+ ASSERT(pRuntime != NULL);
+
+ pRuntime->SetReaderDocument(pDocument);
+
+ IFXJS_Context* pContext = pRuntime->NewContext();
+ ASSERT(pContext != NULL);
+
+ // switch (type)
+ // {
+ // case CPDF_AAction::CursorEnter:
+ // pContext->OnScreen_MouseEnter(IsCTRLpressed(),
+ // IsSHIFTpressed(), pScreen);
+ // break;
+ // case CPDF_AAction::CursorExit:
+ // pContext->OnScreen_MouseExit(IsCTRLpressed(),
+ // IsSHIFTpressed(), pScreen);
+ // break;
+ // case CPDF_AAction::ButtonDown:
+ // pContext->OnScreen_MouseDown(IsCTRLpressed(),
+ // IsSHIFTpressed(), pScreen);
+ // break;
+ // case CPDF_AAction::ButtonUp:
+ // pContext->OnScreen_MouseUp(IsCTRLpressed(),
+ // IsSHIFTpressed(), pScreen);
+ // break;
+ // case CPDF_AAction::GetFocus:
+ // pContext->OnScreen_Focus(IsCTRLpressed(),
+ // IsSHIFTpressed(), pScreen);
+ // break;
+ // case CPDF_AAction::LoseFocus:
+ // pContext->OnScreen_Blur(IsCTRLpressed(),
+ // IsSHIFTpressed(), pScreen);
+ // break;
+ // case CPDF_AAction::PageOpen:
+ // pContext->OnScreen_Open(IsCTRLpressed(),
+ // IsSHIFTpressed(), pScreen);
+ // break;
+ // case CPDF_AAction::PageClose:
+ // pContext->OnScreen_Close(IsCTRLpressed(),
+ // IsSHIFTpressed(), pScreen);
+ // break;
+ // case CPDF_AAction::PageVisible:
+ // pContext->OnScreen_InView(IsCTRLpressed(),
+ // IsSHIFTpressed(), pScreen);
+ // break;
+ // case CPDF_AAction::PageInvisible:
+ // pContext->OnScreen_OutView(IsCTRLpressed(),
+ // IsSHIFTpressed(), pScreen);
+ // break;
+ // default:
+ // ASSERT(FALSE);
+ // break;
+ // }
+
+ CFX_WideString csInfo;
+ FX_BOOL bRet = pContext->RunScript(swJS, csInfo);
+ if (!bRet) {
+ // CBCL_FormNotify::MsgBoxJSError(pPageView->GetPageViewWnd(),
+ // csInfo);
+ }
+
+ pRuntime->ReleaseContext(pContext);
+ }
+ }
+ } else {
+ DoAction_NoJs(action, pDocument);
+ }
+
+ for (int32_t i = 0, sz = action.GetSubActionsCount(); i < sz; i++) {
+ CPDF_Action subaction = action.GetSubAction(i);
+ if (!ExecuteScreenAction(subaction, type, pDocument, pScreen, list))
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+FX_BOOL CPDFSDK_ActionHandler::ExecuteBookMark(const CPDF_Action& action,
+ CPDFSDK_Document* pDocument,
+ CPDF_Bookmark* pBookmark,
+ CFX_PtrList& list) {
+ ASSERT(pDocument != NULL);
+
+ CPDF_Dictionary* pDict = action.GetDict();
+ if (list.Find(pDict))
+ return FALSE;
+
+ list.AddTail(pDict);
+
+ CPDFDoc_Environment* pEnv = pDocument->GetEnv();
+ ASSERT(pEnv);
+ if (action.GetType() == CPDF_Action::JavaScript) {
+ if (pEnv->IsJSInitiated()) {
+ CFX_WideString swJS = action.GetJavaScript();
+ if (!swJS.IsEmpty()) {
+ IFXJS_Runtime* pRuntime = pDocument->GetJsRuntime();
+ ASSERT(pRuntime != NULL);
+
+ pRuntime->SetReaderDocument(pDocument);
+
+ IFXJS_Context* pContext = pRuntime->NewContext();
+ ASSERT(pContext != NULL);
+
+ pContext->OnBookmark_MouseUp(pBookmark);
+
+ CFX_WideString csInfo;
+ FX_BOOL bRet = pContext->RunScript(swJS, csInfo);
+ if (!bRet) {
+ // CBCL_FormNotify::MsgBoxJSError(pPageView->GetPageViewWnd(),
+ // csInfo);
+ }
+
+ pRuntime->ReleaseContext(pContext);
+ }
+ }
+ } else {
+ DoAction_NoJs(action, pDocument);
+ }
+
+ for (int32_t i = 0, sz = action.GetSubActionsCount(); i < sz; i++) {
+ CPDF_Action subaction = action.GetSubAction(i);
+ if (!ExecuteBookMark(subaction, pDocument, pBookmark, list))
+ return FALSE;
+ }
+
+ return TRUE;
}
-void CPDFSDK_ActionHandler::DoAction_GoTo(CPDFSDK_Document* pDocument,
- const CPDF_Action& action)
-{
- ASSERT(action);
-
- CPDF_Document* pPDFDocument = pDocument->GetDocument();
- ASSERT(pPDFDocument != NULL);
- CPDFDoc_Environment* pApp = pDocument->GetEnv();
- ASSERT(pApp != NULL);
-
- CPDF_Dest MyDest = action.GetDest(pPDFDocument);
- int nPageIndex = MyDest.GetPageIndex(pPDFDocument);
- int nFitType = MyDest.GetZoomMode();
- const CPDF_Array * pMyArray = (CPDF_Array*)MyDest.GetObject();
- float* pPosAry = NULL;
- int sizeOfAry = 0;
- if (pMyArray != NULL)
- {
- pPosAry = new float[pMyArray->GetCount()];
- int j = 0;
- for (int i = 2; i < (int)pMyArray->GetCount(); i++)
- {
- pPosAry[j++] = pMyArray->GetFloat(i);
- }
- sizeOfAry = j;
- }
- pApp->FFI_DoGoToAction(nPageIndex, nFitType, pPosAry, sizeOfAry);
- if(pPosAry)
- delete[] pPosAry;
-}
-
-void CPDFSDK_ActionHandler::DoAction_GoToR(CPDFSDK_Document* pDocument, const CPDF_Action& action)
-{
-
-}
-
-void CPDFSDK_ActionHandler::DoAction_Launch(CPDFSDK_Document* pDocument, const CPDF_Action& action)
-{
+void CPDFSDK_ActionHandler::DoAction_NoJs(const CPDF_Action& action,
+ CPDFSDK_Document* pDocument) {
+ ASSERT(pDocument != NULL);
+ switch (action.GetType()) {
+ case CPDF_Action::GoTo:
+ DoAction_GoTo(pDocument, action);
+ break;
+ case CPDF_Action::GoToR:
+ DoAction_GoToR(pDocument, action);
+ break;
+ case CPDF_Action::GoToE:
+ break;
+ case CPDF_Action::Launch:
+ DoAction_Launch(pDocument, action);
+ break;
+ case CPDF_Action::Thread:
+ break;
+ case CPDF_Action::URI:
+ DoAction_URI(pDocument, action);
+ break;
+ case CPDF_Action::Sound:
+ if (m_pMediaActionHandler) {
+ m_pMediaActionHandler->DoAction_Sound(action, pDocument);
+ }
+ break;
+ case CPDF_Action::Movie:
+ if (m_pMediaActionHandler) {
+ m_pMediaActionHandler->DoAction_Movie(action, pDocument);
+ }
+ break;
+ case CPDF_Action::Hide:
+ if (m_pFormActionHandler) {
+ m_pFormActionHandler->DoAction_Hide(action, pDocument);
+ }
+ break;
+ case CPDF_Action::Named:
+ DoAction_Named(pDocument, action);
+ break;
+ case CPDF_Action::SubmitForm:
+ if (m_pFormActionHandler) {
+ m_pFormActionHandler->DoAction_SubmitForm(action, pDocument);
+ }
+ break;
+ case CPDF_Action::ResetForm:
+ if (m_pFormActionHandler) {
+ m_pFormActionHandler->DoAction_ResetForm(action, pDocument);
+ }
+ break;
+ case CPDF_Action::ImportData:
+ if (m_pFormActionHandler) {
+ m_pFormActionHandler->DoAction_ImportData(action, pDocument);
+ }
+ break;
+ case CPDF_Action::JavaScript:
+ ASSERT(FALSE);
+ break;
+ case CPDF_Action::SetOCGState:
+ DoAction_SetOCGState(pDocument, action);
+ break;
+ case CPDF_Action::Rendition:
+ if (m_pMediaActionHandler) {
+ m_pMediaActionHandler->DoAction_Rendition(action, pDocument);
+ }
+ break;
+ case CPDF_Action::Trans:
+ break;
+ case CPDF_Action::GoTo3DView:
+ break;
+ default:
+ break;
+ }
+}
+
+FX_BOOL CPDFSDK_ActionHandler::IsValidDocView(CPDFSDK_Document* pDocument) {
+ ASSERT(pDocument != NULL);
+ return TRUE;
}
-void CPDFSDK_ActionHandler::DoAction_URI(CPDFSDK_Document* pDocument, const CPDF_Action& action)
-{
- ASSERT(action);
-
- CPDFDoc_Environment* pApp = pDocument->GetEnv();
- ASSERT(pApp != NULL);
-
- CFX_ByteString sURI = action.GetURI(pDocument->GetDocument());
- pApp->FFI_DoURIAction(sURI.c_str());
+void CPDFSDK_ActionHandler::DoAction_GoTo(CPDFSDK_Document* pDocument,
+ const CPDF_Action& action) {
+ ASSERT(action);
+
+ CPDF_Document* pPDFDocument = pDocument->GetDocument();
+ ASSERT(pPDFDocument != NULL);
+ CPDFDoc_Environment* pApp = pDocument->GetEnv();
+ ASSERT(pApp != NULL);
+
+ CPDF_Dest MyDest = action.GetDest(pPDFDocument);
+ int nPageIndex = MyDest.GetPageIndex(pPDFDocument);
+ int nFitType = MyDest.GetZoomMode();
+ const CPDF_Array* pMyArray = (CPDF_Array*)MyDest.GetObject();
+ float* pPosAry = NULL;
+ int sizeOfAry = 0;
+ if (pMyArray != NULL) {
+ pPosAry = new float[pMyArray->GetCount()];
+ int j = 0;
+ for (int i = 2; i < (int)pMyArray->GetCount(); i++) {
+ pPosAry[j++] = pMyArray->GetFloat(i);
+ }
+ sizeOfAry = j;
+ }
+ pApp->FFI_DoGoToAction(nPageIndex, nFitType, pPosAry, sizeOfAry);
+ if (pPosAry)
+ delete[] pPosAry;
}
-void CPDFSDK_ActionHandler::DoAction_Named(CPDFSDK_Document* pDocument, const CPDF_Action& action)
-{
- ASSERT(action);
+void CPDFSDK_ActionHandler::DoAction_GoToR(CPDFSDK_Document* pDocument,
+ const CPDF_Action& action) {}
+
+void CPDFSDK_ActionHandler::DoAction_Launch(CPDFSDK_Document* pDocument,
+ const CPDF_Action& action) {}
+
+void CPDFSDK_ActionHandler::DoAction_URI(CPDFSDK_Document* pDocument,
+ const CPDF_Action& action) {
+ ASSERT(action);
+
+ CPDFDoc_Environment* pApp = pDocument->GetEnv();
+ ASSERT(pApp != NULL);
- CFX_ByteString csName = action.GetNamedAction();
- pDocument->GetEnv()->FFI_ExecuteNamedAction(csName);
+ CFX_ByteString sURI = action.GetURI(pDocument->GetDocument());
+ pApp->FFI_DoURIAction(sURI.c_str());
}
+void CPDFSDK_ActionHandler::DoAction_Named(CPDFSDK_Document* pDocument,
+ const CPDF_Action& action) {
+ ASSERT(action);
-void CPDFSDK_ActionHandler::DoAction_SetOCGState(CPDFSDK_Document* pDocument, const CPDF_Action& action)
-{
+ CFX_ByteString csName = action.GetNamedAction();
+ pDocument->GetEnv()->FFI_ExecuteNamedAction(csName);
}
-void CPDFSDK_ActionHandler::RunFieldJavaScript(CPDFSDK_Document* pDocument, CPDF_FormField* pFormField, CPDF_AAction::AActionType type,
- PDFSDK_FieldAction& data, const CFX_WideString& script)
-{
- ASSERT(type != CPDF_AAction::Calculate);
- ASSERT(type != CPDF_AAction::Format);
-
- ASSERT(pDocument != NULL);
-
- IFXJS_Runtime* pRuntime = pDocument->GetJsRuntime();
- ASSERT(pRuntime != NULL);
-
- pRuntime->SetReaderDocument(pDocument);
-
- IFXJS_Context* pContext = pRuntime->NewContext();
- ASSERT(pContext != NULL);
-
- switch (type)
- {
- case CPDF_AAction::CursorEnter:
- pContext->OnField_MouseEnter(data.bModifier, data.bShift, pFormField);
- break;
- case CPDF_AAction::CursorExit:
- pContext->OnField_MouseExit(data.bModifier, data.bShift, pFormField);
- break;
- case CPDF_AAction::ButtonDown:
- pContext->OnField_MouseDown(data.bModifier, data.bShift, pFormField);
- break;
- case CPDF_AAction::ButtonUp:
- pContext->OnField_MouseUp(data.bModifier, data.bShift, pFormField);
- break;
- case CPDF_AAction::GetFocus:
- pContext->OnField_Focus(data.bModifier, data.bShift, pFormField, data.sValue);
- break;
- case CPDF_AAction::LoseFocus:
- pContext->OnField_Blur(data.bModifier, data.bShift, pFormField, data.sValue);
- break;
- case CPDF_AAction::KeyStroke:
- pContext->OnField_Keystroke(data.sChange, data.sChangeEx, data.bKeyDown,
- data.bModifier, data.nSelEnd, data.nSelStart, data.bShift, pFormField, data.sValue,
- data.bWillCommit, data.bFieldFull, data.bRC);
- break;
- case CPDF_AAction::Validate:
- pContext->OnField_Validate(data.sChange, data.sChangeEx, data.bKeyDown, data.bModifier,
- data.bShift, pFormField, data.sValue, data.bRC);
- break;
- default:
- ASSERT(FALSE);
- break;
- }
-
- CFX_WideString csInfo;
- FX_BOOL bRet = pContext->RunScript(script, csInfo);
- if (!bRet)
- {
- //CBCL_FormNotify::MsgBoxJSError(pPageView->GetPageViewWnd(), csInfo);
- }
-
- pRuntime->ReleaseContext(pContext);
-}
-
-void CPDFSDK_ActionHandler::RunDocumentOpenJavaScript(CPDFSDK_Document* pDocument, const CFX_WideString& sScriptName, const CFX_WideString& script)
-{
- ASSERT(pDocument != NULL);
+void CPDFSDK_ActionHandler::DoAction_SetOCGState(CPDFSDK_Document* pDocument,
+ const CPDF_Action& action) {}
- IFXJS_Runtime* pRuntime = pDocument->GetJsRuntime();
- ASSERT(pRuntime != NULL);
+void CPDFSDK_ActionHandler::RunFieldJavaScript(CPDFSDK_Document* pDocument,
+ CPDF_FormField* pFormField,
+ CPDF_AAction::AActionType type,
+ PDFSDK_FieldAction& data,
+ const CFX_WideString& script) {
+ ASSERT(type != CPDF_AAction::Calculate);
+ ASSERT(type != CPDF_AAction::Format);
- pRuntime->SetReaderDocument(pDocument);
+ ASSERT(pDocument != NULL);
+
+ IFXJS_Runtime* pRuntime = pDocument->GetJsRuntime();
+ ASSERT(pRuntime != NULL);
+
+ pRuntime->SetReaderDocument(pDocument);
+
+ IFXJS_Context* pContext = pRuntime->NewContext();
+ ASSERT(pContext != NULL);
+
+ switch (type) {
+ case CPDF_AAction::CursorEnter:
+ pContext->OnField_MouseEnter(data.bModifier, data.bShift, pFormField);
+ break;
+ case CPDF_AAction::CursorExit:
+ pContext->OnField_MouseExit(data.bModifier, data.bShift, pFormField);
+ break;
+ case CPDF_AAction::ButtonDown:
+ pContext->OnField_MouseDown(data.bModifier, data.bShift, pFormField);
+ break;
+ case CPDF_AAction::ButtonUp:
+ pContext->OnField_MouseUp(data.bModifier, data.bShift, pFormField);
+ break;
+ case CPDF_AAction::GetFocus:
+ pContext->OnField_Focus(data.bModifier, data.bShift, pFormField,
+ data.sValue);
+ break;
+ case CPDF_AAction::LoseFocus:
+ pContext->OnField_Blur(data.bModifier, data.bShift, pFormField,
+ data.sValue);
+ break;
+ case CPDF_AAction::KeyStroke:
+ pContext->OnField_Keystroke(data.sChange, data.sChangeEx, data.bKeyDown,
+ data.bModifier, data.nSelEnd, data.nSelStart,
+ data.bShift, pFormField, data.sValue,
+ data.bWillCommit, data.bFieldFull, data.bRC);
+ break;
+ case CPDF_AAction::Validate:
+ pContext->OnField_Validate(data.sChange, data.sChangeEx, data.bKeyDown,
+ data.bModifier, data.bShift, pFormField,
+ data.sValue, data.bRC);
+ break;
+ default:
+ ASSERT(FALSE);
+ break;
+ }
+
+ CFX_WideString csInfo;
+ FX_BOOL bRet = pContext->RunScript(script, csInfo);
+ if (!bRet) {
+ // CBCL_FormNotify::MsgBoxJSError(pPageView->GetPageViewWnd(), csInfo);
+ }
+
+ pRuntime->ReleaseContext(pContext);
+}
+
+void CPDFSDK_ActionHandler::RunDocumentOpenJavaScript(
+ CPDFSDK_Document* pDocument,
+ const CFX_WideString& sScriptName,
+ const CFX_WideString& script) {
+ ASSERT(pDocument != NULL);
+
+ IFXJS_Runtime* pRuntime = pDocument->GetJsRuntime();
+ ASSERT(pRuntime != NULL);
- IFXJS_Context* pContext = pRuntime->NewContext();
- ASSERT(pContext != NULL);
-
- pContext->OnDoc_Open(pDocument, sScriptName);
+ pRuntime->SetReaderDocument(pDocument);
- CFX_WideString csInfo;
- FX_BOOL bRet = pContext->RunScript(script, csInfo);
- if (!bRet)
- {
- //CBCL_FormNotify::MsgBoxJSError(pPageView->GetPageViewWnd(), csInfo);
- }
-
- pRuntime->ReleaseContext(pContext);
-}
-
-void CPDFSDK_ActionHandler::RunDocumentPageJavaScript(CPDFSDK_Document* pDocument, CPDF_AAction::AActionType type, const CFX_WideString& script)
-{
- ASSERT(pDocument != NULL);
-
- IFXJS_Runtime* pRuntime = pDocument->GetJsRuntime();
- ASSERT(pRuntime != NULL);
-
- pRuntime->SetReaderDocument(pDocument);
-
- IFXJS_Context* pContext = pRuntime->NewContext();
- ASSERT(pContext != NULL);
-
- switch (type)
- {
- case CPDF_AAction::OpenPage:
- pContext->OnPage_Open(pDocument);
- break;
- case CPDF_AAction::ClosePage:
- pContext->OnPage_Close(pDocument);
- break;
- case CPDF_AAction::CloseDocument:
- pContext->OnDoc_WillClose(pDocument);
- break;
- case CPDF_AAction::SaveDocument:
- pContext->OnDoc_WillSave(pDocument);
- break;
- case CPDF_AAction::DocumentSaved:
- pContext->OnDoc_DidSave(pDocument);
- break;
- case CPDF_AAction::PrintDocument:
- pContext->OnDoc_WillPrint(pDocument);
- break;
- case CPDF_AAction::DocumentPrinted:
- pContext->OnDoc_DidPrint(pDocument);
- break;
- case CPDF_AAction::PageVisible:
- pContext->OnPage_InView(pDocument);
- break;
- case CPDF_AAction::PageInvisible:
- pContext->OnPage_OutView(pDocument);
- break;
- default:
- ASSERT(FALSE);
- break;
- }
-
- CFX_WideString csInfo;
- FX_BOOL bRet = pContext->RunScript(script, csInfo);
- if (!bRet)
- {
- //CBCL_FormNotify::MsgBoxJSError(pPageView->GetPageViewWnd(), csInfo);
- }
+ IFXJS_Context* pContext = pRuntime->NewContext();
+ ASSERT(pContext != NULL);
- pRuntime->ReleaseContext(pContext);
+ pContext->OnDoc_Open(pDocument, sScriptName);
+
+ CFX_WideString csInfo;
+ FX_BOOL bRet = pContext->RunScript(script, csInfo);
+ if (!bRet) {
+ // CBCL_FormNotify::MsgBoxJSError(pPageView->GetPageViewWnd(), csInfo);
+ }
+
+ pRuntime->ReleaseContext(pContext);
}
+void CPDFSDK_ActionHandler::RunDocumentPageJavaScript(
+ CPDFSDK_Document* pDocument,
+ CPDF_AAction::AActionType type,
+ const CFX_WideString& script) {
+ ASSERT(pDocument != NULL);
-FX_BOOL CPDFSDK_FormActionHandler::DoAction_Hide(const CPDF_Action& action, CPDFSDK_Document* pDocument)
-{
- ASSERT(pDocument != NULL);
+ IFXJS_Runtime* pRuntime = pDocument->GetJsRuntime();
+ ASSERT(pRuntime != NULL);
+
+ pRuntime->SetReaderDocument(pDocument);
+
+ IFXJS_Context* pContext = pRuntime->NewContext();
+ ASSERT(pContext != NULL);
+
+ switch (type) {
+ case CPDF_AAction::OpenPage:
+ pContext->OnPage_Open(pDocument);
+ break;
+ case CPDF_AAction::ClosePage:
+ pContext->OnPage_Close(pDocument);
+ break;
+ case CPDF_AAction::CloseDocument:
+ pContext->OnDoc_WillClose(pDocument);
+ break;
+ case CPDF_AAction::SaveDocument:
+ pContext->OnDoc_WillSave(pDocument);
+ break;
+ case CPDF_AAction::DocumentSaved:
+ pContext->OnDoc_DidSave(pDocument);
+ break;
+ case CPDF_AAction::PrintDocument:
+ pContext->OnDoc_WillPrint(pDocument);
+ break;
+ case CPDF_AAction::DocumentPrinted:
+ pContext->OnDoc_DidPrint(pDocument);
+ break;
+ case CPDF_AAction::PageVisible:
+ pContext->OnPage_InView(pDocument);
+ break;
+ case CPDF_AAction::PageInvisible:
+ pContext->OnPage_OutView(pDocument);
+ break;
+ default:
+ ASSERT(FALSE);
+ break;
+ }
+
+ CFX_WideString csInfo;
+ FX_BOOL bRet = pContext->RunScript(script, csInfo);
+ if (!bRet) {
+ // CBCL_FormNotify::MsgBoxJSError(pPageView->GetPageViewWnd(), csInfo);
+ }
+
+ pRuntime->ReleaseContext(pContext);
+}
+
+FX_BOOL CPDFSDK_FormActionHandler::DoAction_Hide(const CPDF_Action& action,
+ CPDFSDK_Document* pDocument) {
+ ASSERT(pDocument != NULL);
- CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm();
- ASSERT(pInterForm != NULL);
+ CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm();
+ ASSERT(pInterForm != NULL);
- if (pInterForm->DoAction_Hide(action))
- {
- pDocument->SetChangeMark();
- return TRUE;
- }
+ if (pInterForm->DoAction_Hide(action)) {
+ pDocument->SetChangeMark();
+ return TRUE;
+ }
- return FALSE;
+ return FALSE;
}
-FX_BOOL CPDFSDK_FormActionHandler::DoAction_SubmitForm(const CPDF_Action& action, CPDFSDK_Document* pDocument)
-{
- ASSERT(pDocument != NULL);
+FX_BOOL CPDFSDK_FormActionHandler::DoAction_SubmitForm(
+ const CPDF_Action& action,
+ CPDFSDK_Document* pDocument) {
+ ASSERT(pDocument != NULL);
- CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm();
- ASSERT(pInterForm != NULL);
+ CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm();
+ ASSERT(pInterForm != NULL);
- return pInterForm->DoAction_SubmitForm(action);
+ return pInterForm->DoAction_SubmitForm(action);
}
-FX_BOOL CPDFSDK_FormActionHandler::DoAction_ResetForm(const CPDF_Action& action, CPDFSDK_Document* pDocument)
-{
- ASSERT(pDocument != NULL);
+FX_BOOL CPDFSDK_FormActionHandler::DoAction_ResetForm(
+ const CPDF_Action& action,
+ CPDFSDK_Document* pDocument) {
+ ASSERT(pDocument != NULL);
- CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm();
- ASSERT(pInterForm != NULL);
+ CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm();
+ ASSERT(pInterForm != NULL);
- if (pInterForm->DoAction_ResetForm(action))
- {
- return TRUE;
- }
+ if (pInterForm->DoAction_ResetForm(action)) {
+ return TRUE;
+ }
- return FALSE;
+ return FALSE;
}
-FX_BOOL CPDFSDK_FormActionHandler::DoAction_ImportData(const CPDF_Action& action, CPDFSDK_Document* pDocument)
-{
- ASSERT(pDocument != NULL);
+FX_BOOL CPDFSDK_FormActionHandler::DoAction_ImportData(
+ const CPDF_Action& action,
+ CPDFSDK_Document* pDocument) {
+ ASSERT(pDocument != NULL);
- CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm();
- ASSERT(pInterForm != NULL);
+ CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm();
+ ASSERT(pInterForm != NULL);
- if (pInterForm->DoAction_ImportData(action))
- {
- pDocument->SetChangeMark();
- return TRUE;
- }
+ if (pInterForm->DoAction_ImportData(action)) {
+ pDocument->SetChangeMark();
+ return TRUE;
+ }
- return FALSE;
+ return FALSE;
}
-FX_BOOL CPDFSDK_MediaActionHandler::DoAction_Rendition(const CPDF_Action& action, CPDFSDK_Document* pDocument)
-{
- return FALSE;
+FX_BOOL CPDFSDK_MediaActionHandler::DoAction_Rendition(
+ const CPDF_Action& action,
+ CPDFSDK_Document* pDocument) {
+ return FALSE;
}
-FX_BOOL CPDFSDK_MediaActionHandler::DoAction_Sound(const CPDF_Action& action, CPDFSDK_Document* pDocument)
-{
- return FALSE;
+FX_BOOL CPDFSDK_MediaActionHandler::DoAction_Sound(
+ const CPDF_Action& action,
+ CPDFSDK_Document* pDocument) {
+ return FALSE;
}
-FX_BOOL CPDFSDK_MediaActionHandler::DoAction_Movie(const CPDF_Action& action, CPDFSDK_Document* pDocument)
-{
- return FALSE;
+FX_BOOL CPDFSDK_MediaActionHandler::DoAction_Movie(
+ const CPDF_Action& action,
+ CPDFSDK_Document* pDocument) {
+ return FALSE;
}
diff --git a/fpdfsdk/src/fsdk_annothandler.cpp b/fpdfsdk/src/fsdk_annothandler.cpp
index 9b008cd762..40938c7592 100644
--- a/fpdfsdk/src/fsdk_annothandler.cpp
+++ b/fpdfsdk/src/fsdk_annothandler.cpp
@@ -9,884 +9,810 @@
#include "../include/formfiller/FFL_FormFiller.h"
#include "../include/fsdk_annothandler.h"
+CPDFSDK_AnnotHandlerMgr::CPDFSDK_AnnotHandlerMgr(CPDFDoc_Environment* pApp) {
+ m_pApp = pApp;
-CPDFSDK_AnnotHandlerMgr::CPDFSDK_AnnotHandlerMgr(CPDFDoc_Environment* pApp)
-{
- m_pApp = pApp;
-
- CPDFSDK_BFAnnotHandler* pHandler = new CPDFSDK_BFAnnotHandler(m_pApp);
- pHandler->SetFormFiller(m_pApp->GetIFormFiller());
- RegisterAnnotHandler(pHandler);
+ CPDFSDK_BFAnnotHandler* pHandler = new CPDFSDK_BFAnnotHandler(m_pApp);
+ pHandler->SetFormFiller(m_pApp->GetIFormFiller());
+ RegisterAnnotHandler(pHandler);
}
-CPDFSDK_AnnotHandlerMgr::~CPDFSDK_AnnotHandlerMgr()
-{
- for(int i=0; i<m_Handlers.GetSize(); i++)
- {
- IPDFSDK_AnnotHandler* pHandler = m_Handlers.GetAt(i);
- delete pHandler;
- }
- m_Handlers.RemoveAll();
- m_mapType2Handler.RemoveAll();
+CPDFSDK_AnnotHandlerMgr::~CPDFSDK_AnnotHandlerMgr() {
+ for (int i = 0; i < m_Handlers.GetSize(); i++) {
+ IPDFSDK_AnnotHandler* pHandler = m_Handlers.GetAt(i);
+ delete pHandler;
+ }
+ m_Handlers.RemoveAll();
+ m_mapType2Handler.RemoveAll();
}
-void CPDFSDK_AnnotHandlerMgr::RegisterAnnotHandler(IPDFSDK_AnnotHandler* pAnnotHandler)
-{
- ASSERT(pAnnotHandler != NULL);
+void CPDFSDK_AnnotHandlerMgr::RegisterAnnotHandler(
+ IPDFSDK_AnnotHandler* pAnnotHandler) {
+ ASSERT(pAnnotHandler != NULL);
- ASSERT(GetAnnotHandler(pAnnotHandler->GetType()) == NULL);
+ ASSERT(GetAnnotHandler(pAnnotHandler->GetType()) == NULL);
- m_Handlers.Add(pAnnotHandler);
- m_mapType2Handler.SetAt(pAnnotHandler->GetType(), (void*)pAnnotHandler);
+ m_Handlers.Add(pAnnotHandler);
+ m_mapType2Handler.SetAt(pAnnotHandler->GetType(), (void*)pAnnotHandler);
}
-void CPDFSDK_AnnotHandlerMgr::UnRegisterAnnotHandler(IPDFSDK_AnnotHandler* pAnnotHandler)
-{
- ASSERT(pAnnotHandler != NULL);
+void CPDFSDK_AnnotHandlerMgr::UnRegisterAnnotHandler(
+ IPDFSDK_AnnotHandler* pAnnotHandler) {
+ ASSERT(pAnnotHandler != NULL);
- m_mapType2Handler.RemoveKey(pAnnotHandler->GetType());
+ m_mapType2Handler.RemoveKey(pAnnotHandler->GetType());
- for (int i=0, sz=m_Handlers.GetSize(); i<sz; i++)
- {
- if (m_Handlers.GetAt(i) == pAnnotHandler)
- {
- m_Handlers.RemoveAt(i);
- break;
- }
+ for (int i = 0, sz = m_Handlers.GetSize(); i < sz; i++) {
+ if (m_Handlers.GetAt(i) == pAnnotHandler) {
+ m_Handlers.RemoveAt(i);
+ break;
}
+ }
}
-CPDFSDK_Annot* CPDFSDK_AnnotHandlerMgr::NewAnnot(CPDF_Annot * pAnnot, CPDFSDK_PageView *pPageView)
-{
- ASSERT(pAnnot != NULL);
- ASSERT(pPageView != NULL);
+CPDFSDK_Annot* CPDFSDK_AnnotHandlerMgr::NewAnnot(CPDF_Annot* pAnnot,
+ CPDFSDK_PageView* pPageView) {
+ ASSERT(pAnnot != NULL);
+ ASSERT(pPageView != NULL);
- if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot->GetSubType()))
- {
- return pAnnotHandler->NewAnnot(pAnnot, pPageView);
- }
+ if (IPDFSDK_AnnotHandler* pAnnotHandler =
+ GetAnnotHandler(pAnnot->GetSubType())) {
+ return pAnnotHandler->NewAnnot(pAnnot, pPageView);
+ }
- return new CPDFSDK_Annot(pAnnot, pPageView);
+ return new CPDFSDK_Annot(pAnnot, pPageView);
}
-void CPDFSDK_AnnotHandlerMgr::ReleaseAnnot(CPDFSDK_Annot* pAnnot)
-{
- ASSERT(pAnnot != NULL);
+void CPDFSDK_AnnotHandlerMgr::ReleaseAnnot(CPDFSDK_Annot* pAnnot) {
+ ASSERT(pAnnot != NULL);
- pAnnot->GetPDFPage();
+ pAnnot->GetPDFPage();
- if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot))
- {
- pAnnotHandler->OnRelease(pAnnot);
- pAnnotHandler->ReleaseAnnot(pAnnot);
- }
- else
- {
- delete (CPDFSDK_Annot*)pAnnot;
- }
+ if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) {
+ pAnnotHandler->OnRelease(pAnnot);
+ pAnnotHandler->ReleaseAnnot(pAnnot);
+ } else {
+ delete (CPDFSDK_Annot*)pAnnot;
+ }
}
-void CPDFSDK_AnnotHandlerMgr::Annot_OnCreate(CPDFSDK_Annot* pAnnot)
-{
- ASSERT(pAnnot != NULL);
+void CPDFSDK_AnnotHandlerMgr::Annot_OnCreate(CPDFSDK_Annot* pAnnot) {
+ ASSERT(pAnnot != NULL);
- CPDF_Annot* pPDFAnnot = pAnnot->GetPDFAnnot();
+ CPDF_Annot* pPDFAnnot = pAnnot->GetPDFAnnot();
- CPDFSDK_DateTime curTime;
- pPDFAnnot->GetAnnotDict()->SetAtString("M", curTime.ToPDFDateTimeString());
- pPDFAnnot->GetAnnotDict()->SetAtNumber("F", 0);
+ CPDFSDK_DateTime curTime;
+ pPDFAnnot->GetAnnotDict()->SetAtString("M", curTime.ToPDFDateTimeString());
+ pPDFAnnot->GetAnnotDict()->SetAtNumber("F", 0);
- if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot))
- {
- pAnnotHandler->OnCreate(pAnnot);
- }
+ if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) {
+ pAnnotHandler->OnCreate(pAnnot);
+ }
}
-void CPDFSDK_AnnotHandlerMgr::Annot_OnLoad(CPDFSDK_Annot* pAnnot)
-{
- ASSERT(pAnnot != NULL);
+void CPDFSDK_AnnotHandlerMgr::Annot_OnLoad(CPDFSDK_Annot* pAnnot) {
+ ASSERT(pAnnot != NULL);
- if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot))
- {
- pAnnotHandler->OnLoad(pAnnot);
- }
+ if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) {
+ pAnnotHandler->OnLoad(pAnnot);
+ }
}
-IPDFSDK_AnnotHandler* CPDFSDK_AnnotHandlerMgr::GetAnnotHandler(CPDFSDK_Annot* pAnnot) const
-{
- ASSERT(pAnnot != NULL);
+IPDFSDK_AnnotHandler* CPDFSDK_AnnotHandlerMgr::GetAnnotHandler(
+ CPDFSDK_Annot* pAnnot) const {
+ ASSERT(pAnnot != NULL);
- CPDF_Annot* pPDFAnnot = pAnnot->GetPDFAnnot();
- ASSERT(pPDFAnnot != NULL);
+ CPDF_Annot* pPDFAnnot = pAnnot->GetPDFAnnot();
+ ASSERT(pPDFAnnot != NULL);
- return GetAnnotHandler(pPDFAnnot->GetSubType());
+ return GetAnnotHandler(pPDFAnnot->GetSubType());
}
-IPDFSDK_AnnotHandler* CPDFSDK_AnnotHandlerMgr::GetAnnotHandler(const CFX_ByteString& sType) const
-{
- void* pRet = NULL;
- m_mapType2Handler.Lookup(sType, pRet);
- return (IPDFSDK_AnnotHandler*)pRet;
+IPDFSDK_AnnotHandler* CPDFSDK_AnnotHandlerMgr::GetAnnotHandler(
+ const CFX_ByteString& sType) const {
+ void* pRet = NULL;
+ m_mapType2Handler.Lookup(sType, pRet);
+ return (IPDFSDK_AnnotHandler*)pRet;
}
-void CPDFSDK_AnnotHandlerMgr::Annot_OnDraw(CPDFSDK_PageView* pPageView, CPDFSDK_Annot* pAnnot, CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device,FX_DWORD dwFlags)
-{
- ASSERT(pAnnot != NULL);
+void CPDFSDK_AnnotHandlerMgr::Annot_OnDraw(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ CFX_RenderDevice* pDevice,
+ CPDF_Matrix* pUser2Device,
+ FX_DWORD dwFlags) {
+ ASSERT(pAnnot != NULL);
- if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot))
- {
- pAnnotHandler->OnDraw(pPageView, pAnnot, pDevice, pUser2Device, dwFlags);
- }
- else
- {
- pAnnot->DrawAppearance(pDevice, pUser2Device, CPDF_Annot::Normal, NULL);
- }
+ if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) {
+ pAnnotHandler->OnDraw(pPageView, pAnnot, pDevice, pUser2Device, dwFlags);
+ } else {
+ pAnnot->DrawAppearance(pDevice, pUser2Device, CPDF_Annot::Normal, NULL);
+ }
}
+FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnLButtonDown(
+ CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_DWORD nFlags,
+ const CPDF_Point& point) {
+ ASSERT(pAnnot != NULL);
-FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnLButtonDown(CPDFSDK_PageView * pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point)
-{
- ASSERT(pAnnot != NULL);
-
- if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot))
- {
- return pAnnotHandler->OnLButtonDown(pPageView, pAnnot, nFlags, point);
- }
- return FALSE;
+ if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) {
+ return pAnnotHandler->OnLButtonDown(pPageView, pAnnot, nFlags, point);
+ }
+ return FALSE;
}
-FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnLButtonUp(CPDFSDK_PageView * pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point)
- {
- ASSERT(pAnnot != NULL);
+FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnLButtonUp(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_DWORD nFlags,
+ const CPDF_Point& point) {
+ ASSERT(pAnnot != NULL);
- if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot))
- {
- return pAnnotHandler->OnLButtonUp(pPageView, pAnnot, nFlags, point);
- }
- return FALSE;
- }
-FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnLButtonDblClk(CPDFSDK_PageView * pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point)
-{
- ASSERT(pAnnot != NULL);
-
- if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot))
- {
- return pAnnotHandler->OnLButtonDblClk(pPageView, pAnnot, nFlags, point);
+ if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) {
+ return pAnnotHandler->OnLButtonUp(pPageView, pAnnot, nFlags, point);
+ }
+ return FALSE;
+}
+FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnLButtonDblClk(
+ CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_DWORD nFlags,
+ const CPDF_Point& point) {
+ ASSERT(pAnnot != NULL);
+
+ if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) {
+ return pAnnotHandler->OnLButtonDblClk(pPageView, pAnnot, nFlags, point);
+ }
+ return FALSE;
+}
+FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnMouseMove(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_DWORD nFlags,
+ const CPDF_Point& point) {
+ ASSERT(pAnnot != NULL);
+
+ if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) {
+ return pAnnotHandler->OnMouseMove(pPageView, pAnnot, nFlags, point);
+ }
+ return FALSE;
+}
+FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnMouseWheel(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_DWORD nFlags,
+ short zDelta,
+ const CPDF_Point& point) {
+ ASSERT(pAnnot != NULL);
+
+ if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) {
+ return pAnnotHandler->OnMouseWheel(pPageView, pAnnot, nFlags, zDelta,
+ point);
+ }
+ return FALSE;
+}
+FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnRButtonDown(
+ CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_DWORD nFlags,
+ const CPDF_Point& point) {
+ ASSERT(pAnnot != NULL);
+
+ if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) {
+ return pAnnotHandler->OnRButtonDown(pPageView, pAnnot, nFlags, point);
+ }
+ return FALSE;
+}
+FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnRButtonUp(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_DWORD nFlags,
+ const CPDF_Point& point) {
+ ASSERT(pAnnot != NULL);
+
+ if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) {
+ return pAnnotHandler->OnRButtonUp(pPageView, pAnnot, nFlags, point);
+ }
+ return FALSE;
+}
+
+void CPDFSDK_AnnotHandlerMgr::Annot_OnMouseEnter(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_DWORD nFlag) {
+ ASSERT(pAnnot != NULL);
+
+ if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) {
+ pAnnotHandler->OnMouseEnter(pPageView, pAnnot, nFlag);
+ }
+ return;
+}
+
+void CPDFSDK_AnnotHandlerMgr::Annot_OnMouseExit(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_DWORD nFlag) {
+ ASSERT(pAnnot != NULL);
+
+ if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) {
+ pAnnotHandler->OnMouseExit(pPageView, pAnnot, nFlag);
+ }
+ return;
+}
+
+FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnChar(CPDFSDK_Annot* pAnnot,
+ FX_DWORD nChar,
+ FX_DWORD nFlags) {
+ if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) {
+ return pAnnotHandler->OnChar(pAnnot, nChar, nFlags);
+ }
+ return FALSE;
+}
+
+FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnKeyDown(CPDFSDK_Annot* pAnnot,
+ int nKeyCode,
+ int nFlag) {
+ if (!m_pApp->FFI_IsCTRLKeyDown(nFlag) && !m_pApp->FFI_IsALTKeyDown(nFlag)) {
+ CPDFSDK_PageView* pPage = pAnnot->GetPageView();
+ CPDFSDK_Annot* pFocusAnnot = pPage->GetFocusAnnot();
+ if (pFocusAnnot && (nKeyCode == FWL_VKEY_Tab)) {
+ CPDFSDK_Annot* pNext =
+ GetNextAnnot(pFocusAnnot, !m_pApp->FFI_IsSHIFTKeyDown(nFlag));
+
+ if (pNext && pNext != pFocusAnnot) {
+ CPDFSDK_Document* pDocument = pPage->GetSDKDocument();
+ pDocument->SetFocusAnnot(pNext);
+ return TRUE;
+ }
}
- return FALSE;
-}
-FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnMouseMove(CPDFSDK_PageView * pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point)
-{
- ASSERT(pAnnot != NULL);
+ }
- if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot))
- {
- return pAnnotHandler->OnMouseMove(pPageView, pAnnot, nFlags, point);
- }
- return FALSE;
+ if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) {
+ return pAnnotHandler->OnKeyDown(pAnnot, nKeyCode, nFlag);
+ }
+ return FALSE;
}
-FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnMouseWheel(CPDFSDK_PageView * pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, short zDelta, const CPDF_Point& point)
-{
- ASSERT(pAnnot != NULL);
-
- if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot))
- {
- return pAnnotHandler->OnMouseWheel(pPageView, pAnnot,nFlags,zDelta, point);
- }
- return FALSE;
+FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnKeyUp(CPDFSDK_Annot* pAnnot,
+ int nKeyCode,
+ int nFlag) {
+ return FALSE;
}
-FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnRButtonDown(CPDFSDK_PageView * pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point)
-{
- ASSERT(pAnnot != NULL);
- if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot))
- {
- return pAnnotHandler->OnRButtonDown(pPageView, pAnnot, nFlags, point);
- }
- return FALSE;
-}
-FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnRButtonUp(CPDFSDK_PageView * pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point)
-{
- ASSERT(pAnnot != NULL);
+FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnSetFocus(CPDFSDK_Annot* pAnnot,
+ FX_DWORD nFlag) {
+ ASSERT(pAnnot != NULL);
- if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot))
- {
- return pAnnotHandler->OnRButtonUp(pPageView, pAnnot, nFlags, point);
+ if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) {
+ if (pAnnotHandler->OnSetFocus(pAnnot, nFlag)) {
+ CPDFSDK_PageView* pPage = pAnnot->GetPageView();
+ pPage->GetSDKDocument();
+ return TRUE;
}
- return FALSE;
+ }
+ return FALSE;
}
-void CPDFSDK_AnnotHandlerMgr::Annot_OnMouseEnter(CPDFSDK_PageView * pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlag)
-{
- ASSERT(pAnnot != NULL);
+FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnKillFocus(CPDFSDK_Annot* pAnnot,
+ FX_DWORD nFlag) {
+ ASSERT(pAnnot);
+ if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot))
+ return pAnnotHandler->OnKillFocus(pAnnot, nFlag);
- if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot))
- {
- pAnnotHandler->OnMouseEnter(pPageView, pAnnot, nFlag);
- }
- return ;
+ return FALSE;
}
-void CPDFSDK_AnnotHandlerMgr::Annot_OnMouseExit(CPDFSDK_PageView * pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlag)
-{
- ASSERT(pAnnot != NULL);
+CPDF_Rect CPDFSDK_AnnotHandlerMgr::Annot_OnGetViewBBox(
+ CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot) {
+ ASSERT(pAnnot);
+ if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot))
+ return pAnnotHandler->GetViewBBox(pPageView, pAnnot);
- if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot))
- {
- pAnnotHandler->OnMouseExit(pPageView, pAnnot, nFlag);
- }
- return;
+ return pAnnot->GetRect();
}
-FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnChar(CPDFSDK_Annot* pAnnot, FX_DWORD nChar, FX_DWORD nFlags)
-{
-
- if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot))
- {
- return pAnnotHandler->OnChar(pAnnot,nChar, nFlags);
- }
- return FALSE;
-
+FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnHitTest(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ const CPDF_Point& point) {
+ ASSERT(pAnnot);
+ if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot)) {
+ if (pAnnotHandler->CanAnswer(pAnnot))
+ return pAnnotHandler->HitTest(pPageView, pAnnot, point);
+ }
+ return FALSE;
}
-FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnKeyDown(CPDFSDK_Annot* pAnnot, int nKeyCode, int nFlag)
-{
-
- if (!m_pApp->FFI_IsCTRLKeyDown(nFlag) && !m_pApp->FFI_IsALTKeyDown(nFlag))
- {
- CPDFSDK_PageView* pPage = pAnnot->GetPageView();
- CPDFSDK_Annot* pFocusAnnot = pPage->GetFocusAnnot();
- if (pFocusAnnot && (nKeyCode == FWL_VKEY_Tab))
- {
- CPDFSDK_Annot* pNext = GetNextAnnot(pFocusAnnot, !m_pApp->FFI_IsSHIFTKeyDown(nFlag));
-
- if(pNext && pNext != pFocusAnnot)
- {
- CPDFSDK_Document* pDocument = pPage->GetSDKDocument();
- pDocument->SetFocusAnnot(pNext);
- return TRUE;
- }
- }
- }
-
- if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot))
- {
- return pAnnotHandler->OnKeyDown(pAnnot,nKeyCode, nFlag);
- }
- return FALSE;
+CPDFSDK_Annot* CPDFSDK_AnnotHandlerMgr::GetNextAnnot(CPDFSDK_Annot* pSDKAnnot,
+ FX_BOOL bNext) {
+ CBA_AnnotIterator ai(pSDKAnnot->GetPageView(), "Widget", "");
+ return bNext ? ai.GetNextAnnot(pSDKAnnot) : ai.GetPrevAnnot(pSDKAnnot);
}
-FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnKeyUp(CPDFSDK_Annot* pAnnot, int nKeyCode, int nFlag)
-{
- return FALSE;
-}
-
-FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnSetFocus(CPDFSDK_Annot* pAnnot, FX_DWORD nFlag)
-{
- ASSERT(pAnnot != NULL);
- if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot))
- {
- if (pAnnotHandler->OnSetFocus(pAnnot, nFlag))
- {
- CPDFSDK_PageView* pPage = pAnnot->GetPageView();
- pPage->GetSDKDocument();
- return TRUE;
- }
- }
+FX_BOOL CPDFSDK_BFAnnotHandler::CanAnswer(CPDFSDK_Annot* pAnnot) {
+ ASSERT(pAnnot->GetType() == "Widget");
+ if (pAnnot->GetSubType() == BFFT_SIGNATURE)
return FALSE;
-}
-
-FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnKillFocus(CPDFSDK_Annot* pAnnot, FX_DWORD nFlag)
-{
- ASSERT(pAnnot);
- if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot))
- return pAnnotHandler->OnKillFocus(pAnnot, nFlag);
+ CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot;
+ if (!pWidget->IsVisible())
return FALSE;
-}
-
-CPDF_Rect CPDFSDK_AnnotHandlerMgr::Annot_OnGetViewBBox(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot)
-{
- ASSERT(pAnnot);
- if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot))
- return pAnnotHandler->GetViewBBox(pPageView, pAnnot);
- return pAnnot->GetRect();
-}
-
-FX_BOOL CPDFSDK_AnnotHandlerMgr::Annot_OnHitTest(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, const CPDF_Point& point)
-{
- ASSERT(pAnnot);
- if (IPDFSDK_AnnotHandler* pAnnotHandler = GetAnnotHandler(pAnnot))
- {
- if (pAnnotHandler->CanAnswer(pAnnot))
- return pAnnotHandler->HitTest(pPageView, pAnnot, point);
- }
+ int nFieldFlags = pWidget->GetFieldFlags();
+ if ((nFieldFlags & FIELDFLAG_READONLY) == FIELDFLAG_READONLY)
return FALSE;
-}
-
-CPDFSDK_Annot* CPDFSDK_AnnotHandlerMgr::GetNextAnnot(CPDFSDK_Annot* pSDKAnnot,FX_BOOL bNext)
-{
- CBA_AnnotIterator ai(pSDKAnnot->GetPageView(), "Widget", "");
- return bNext ? ai.GetNextAnnot(pSDKAnnot) : ai.GetPrevAnnot(pSDKAnnot);
-}
-FX_BOOL CPDFSDK_BFAnnotHandler::CanAnswer(CPDFSDK_Annot* pAnnot)
-{
- ASSERT(pAnnot->GetType() == "Widget");
- if (pAnnot->GetSubType() == BFFT_SIGNATURE)
- return FALSE;
-
- CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot;
- if (!pWidget->IsVisible())
- return FALSE;
-
- int nFieldFlags = pWidget->GetFieldFlags();
- if ((nFieldFlags & FIELDFLAG_READONLY) == FIELDFLAG_READONLY)
- return FALSE;
-
- if (pWidget->GetFieldType() == FIELDTYPE_PUSHBUTTON)
- return TRUE;
+ if (pWidget->GetFieldType() == FIELDTYPE_PUSHBUTTON)
+ return TRUE;
- CPDF_Page* pPage = pWidget->GetPDFPage();
- CPDF_Document* pDocument = pPage->m_pDocument;
- FX_DWORD dwPermissions = pDocument->GetUserPermissions();
- return (dwPermissions & FPDFPERM_FILL_FORM) ||
- (dwPermissions & FPDFPERM_ANNOT_FORM);
+ CPDF_Page* pPage = pWidget->GetPDFPage();
+ CPDF_Document* pDocument = pPage->m_pDocument;
+ FX_DWORD dwPermissions = pDocument->GetUserPermissions();
+ return (dwPermissions & FPDFPERM_FILL_FORM) ||
+ (dwPermissions & FPDFPERM_ANNOT_FORM);
}
-CPDFSDK_Annot* CPDFSDK_BFAnnotHandler::NewAnnot(CPDF_Annot* pAnnot, CPDFSDK_PageView* pPage)
-{
- CPDFSDK_Document* pSDKDoc = m_pApp->GetSDKDocument();
- CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pSDKDoc->GetInterForm();
- CPDF_FormControl* pCtrl = CPDFSDK_Widget::GetFormControl(pInterForm->GetInterForm(), pAnnot->GetAnnotDict());
- if (!pCtrl)
- return nullptr;
+CPDFSDK_Annot* CPDFSDK_BFAnnotHandler::NewAnnot(CPDF_Annot* pAnnot,
+ CPDFSDK_PageView* pPage) {
+ CPDFSDK_Document* pSDKDoc = m_pApp->GetSDKDocument();
+ CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pSDKDoc->GetInterForm();
+ CPDF_FormControl* pCtrl = CPDFSDK_Widget::GetFormControl(
+ pInterForm->GetInterForm(), pAnnot->GetAnnotDict());
+ if (!pCtrl)
+ return nullptr;
- CPDFSDK_Widget* pWidget = new CPDFSDK_Widget(pAnnot, pPage, pInterForm);
- pInterForm->AddMap(pCtrl, pWidget);
- CPDF_InterForm* pPDFInterForm = pInterForm->GetInterForm();
- if (pPDFInterForm && pPDFInterForm->NeedConstructAP())
- pWidget->ResetAppearance(nullptr, FALSE);
+ CPDFSDK_Widget* pWidget = new CPDFSDK_Widget(pAnnot, pPage, pInterForm);
+ pInterForm->AddMap(pCtrl, pWidget);
+ CPDF_InterForm* pPDFInterForm = pInterForm->GetInterForm();
+ if (pPDFInterForm && pPDFInterForm->NeedConstructAP())
+ pWidget->ResetAppearance(nullptr, FALSE);
- return pWidget;
+ return pWidget;
}
-void CPDFSDK_BFAnnotHandler::ReleaseAnnot(CPDFSDK_Annot* pAnnot)
-{
- ASSERT(pAnnot != NULL);
-
- if (m_pFormFiller)
- m_pFormFiller->OnDelete(pAnnot);
-
- CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot;
- CPDFSDK_InterForm* pInterForm = pWidget->GetInterForm();
- ASSERT(pInterForm != NULL);
-
- CPDF_FormControl* pCtrol = pWidget->GetFormControl();
- pInterForm->RemoveMap(pCtrol);
-
+void CPDFSDK_BFAnnotHandler::ReleaseAnnot(CPDFSDK_Annot* pAnnot) {
+ ASSERT(pAnnot != NULL);
- delete pWidget;
-}
+ if (m_pFormFiller)
+ m_pFormFiller->OnDelete(pAnnot);
+ CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot;
+ CPDFSDK_InterForm* pInterForm = pWidget->GetInterForm();
+ ASSERT(pInterForm != NULL);
-void CPDFSDK_BFAnnotHandler::OnDraw(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device, FX_DWORD dwFlags)
-{
- ASSERT(pAnnot != NULL);
- CFX_ByteString sSubType = pAnnot->GetSubType();
+ CPDF_FormControl* pCtrol = pWidget->GetFormControl();
+ pInterForm->RemoveMap(pCtrol);
- if (sSubType == BFFT_SIGNATURE)
- {
- pAnnot->DrawAppearance(pDevice, pUser2Device, CPDF_Annot::Normal, NULL);
- }
- else
- {
- if (m_pFormFiller)
- {
- m_pFormFiller->OnDraw(pPageView, pAnnot, pDevice, pUser2Device, dwFlags);
- }
- }
+ delete pWidget;
}
-void CPDFSDK_BFAnnotHandler::OnMouseEnter(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlag)
-{
- ASSERT(pAnnot != NULL);
- CFX_ByteString sSubType = pAnnot->GetSubType();
+void CPDFSDK_BFAnnotHandler::OnDraw(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ CFX_RenderDevice* pDevice,
+ CPDF_Matrix* pUser2Device,
+ FX_DWORD dwFlags) {
+ ASSERT(pAnnot != NULL);
+ CFX_ByteString sSubType = pAnnot->GetSubType();
- if (sSubType == BFFT_SIGNATURE)
- {
+ if (sSubType == BFFT_SIGNATURE) {
+ pAnnot->DrawAppearance(pDevice, pUser2Device, CPDF_Annot::Normal, NULL);
+ } else {
+ if (m_pFormFiller) {
+ m_pFormFiller->OnDraw(pPageView, pAnnot, pDevice, pUser2Device, dwFlags);
}
- else
- {
- if (m_pFormFiller)
- m_pFormFiller->OnMouseEnter(pPageView, pAnnot, nFlag);
- }
-
-
+ }
}
-void CPDFSDK_BFAnnotHandler::OnMouseExit(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlag)
-{
- ASSERT(pAnnot != NULL);
- CFX_ByteString sSubType = pAnnot->GetSubType();
- if (sSubType == BFFT_SIGNATURE)
- {
- }
- else
- {
- if (m_pFormFiller)
- m_pFormFiller->OnMouseExit(pPageView, pAnnot, nFlag);
- }
+void CPDFSDK_BFAnnotHandler::OnMouseEnter(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_DWORD nFlag) {
+ ASSERT(pAnnot != NULL);
+ CFX_ByteString sSubType = pAnnot->GetSubType();
+ if (sSubType == BFFT_SIGNATURE) {
+ } else {
+ if (m_pFormFiller)
+ m_pFormFiller->OnMouseEnter(pPageView, pAnnot, nFlag);
+ }
}
-FX_BOOL CPDFSDK_BFAnnotHandler::OnLButtonDown(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point)
-{
- ASSERT(pAnnot != NULL);
- CFX_ByteString sSubType = pAnnot->GetSubType();
+void CPDFSDK_BFAnnotHandler::OnMouseExit(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_DWORD nFlag) {
+ ASSERT(pAnnot != NULL);
+ CFX_ByteString sSubType = pAnnot->GetSubType();
- if (sSubType == BFFT_SIGNATURE)
- {
- }
- else
- {
- if (m_pFormFiller)
- return m_pFormFiller->OnLButtonDown(pPageView, pAnnot, nFlags, point);
- }
+ if (sSubType == BFFT_SIGNATURE) {
+ } else {
+ if (m_pFormFiller)
+ m_pFormFiller->OnMouseExit(pPageView, pAnnot, nFlag);
+ }
+}
+FX_BOOL CPDFSDK_BFAnnotHandler::OnLButtonDown(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_DWORD nFlags,
+ const CPDF_Point& point) {
+ ASSERT(pAnnot != NULL);
+ CFX_ByteString sSubType = pAnnot->GetSubType();
+
+ if (sSubType == BFFT_SIGNATURE) {
+ } else {
+ if (m_pFormFiller)
+ return m_pFormFiller->OnLButtonDown(pPageView, pAnnot, nFlags, point);
+ }
- return FALSE;
+ return FALSE;
}
-FX_BOOL CPDFSDK_BFAnnotHandler::OnLButtonUp(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point)
-{
- ASSERT(pAnnot != NULL);
- CFX_ByteString sSubType = pAnnot->GetSubType();
+FX_BOOL CPDFSDK_BFAnnotHandler::OnLButtonUp(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_DWORD nFlags,
+ const CPDF_Point& point) {
+ ASSERT(pAnnot != NULL);
+ CFX_ByteString sSubType = pAnnot->GetSubType();
- if (sSubType == BFFT_SIGNATURE)
- {
- }
- else
- {
- if (m_pFormFiller)
- return m_pFormFiller->OnLButtonUp(pPageView, pAnnot, nFlags, point);
- }
+ if (sSubType == BFFT_SIGNATURE) {
+ } else {
+ if (m_pFormFiller)
+ return m_pFormFiller->OnLButtonUp(pPageView, pAnnot, nFlags, point);
+ }
- return FALSE;
+ return FALSE;
}
-FX_BOOL CPDFSDK_BFAnnotHandler::OnLButtonDblClk(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point)
-{
- ASSERT(pAnnot != NULL);
- CFX_ByteString sSubType = pAnnot->GetSubType();
+FX_BOOL CPDFSDK_BFAnnotHandler::OnLButtonDblClk(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_DWORD nFlags,
+ const CPDF_Point& point) {
+ ASSERT(pAnnot != NULL);
+ CFX_ByteString sSubType = pAnnot->GetSubType();
- if (sSubType == BFFT_SIGNATURE)
- {
- }
- else
- {
- if (m_pFormFiller)
- return m_pFormFiller->OnLButtonDblClk(pPageView, pAnnot, nFlags, point);
- }
+ if (sSubType == BFFT_SIGNATURE) {
+ } else {
+ if (m_pFormFiller)
+ return m_pFormFiller->OnLButtonDblClk(pPageView, pAnnot, nFlags, point);
+ }
- return FALSE;
+ return FALSE;
}
-FX_BOOL CPDFSDK_BFAnnotHandler::OnMouseMove(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point)
-{
- ASSERT(pAnnot != NULL);
- CFX_ByteString sSubType = pAnnot->GetSubType();
-
- if (sSubType == BFFT_SIGNATURE)
- {
- }
- else
- {
- if (m_pFormFiller)
- return m_pFormFiller->OnMouseMove(pPageView, pAnnot, nFlags, point);
- }
+FX_BOOL CPDFSDK_BFAnnotHandler::OnMouseMove(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_DWORD nFlags,
+ const CPDF_Point& point) {
+ ASSERT(pAnnot != NULL);
+ CFX_ByteString sSubType = pAnnot->GetSubType();
- return FALSE;
+ if (sSubType == BFFT_SIGNATURE) {
+ } else {
+ if (m_pFormFiller)
+ return m_pFormFiller->OnMouseMove(pPageView, pAnnot, nFlags, point);
+ }
+ return FALSE;
}
+FX_BOOL CPDFSDK_BFAnnotHandler::OnMouseWheel(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_DWORD nFlags,
+ short zDelta,
+ const CPDF_Point& point) {
+ ASSERT(pAnnot != NULL);
+ CFX_ByteString sSubType = pAnnot->GetSubType();
-FX_BOOL CPDFSDK_BFAnnotHandler::OnMouseWheel(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, short zDelta, const CPDF_Point& point)
-{
- ASSERT(pAnnot != NULL);
- CFX_ByteString sSubType = pAnnot->GetSubType();
-
- if (sSubType == BFFT_SIGNATURE)
- {
- }
- else
- {
- if (m_pFormFiller)
- return m_pFormFiller->OnMouseWheel(pPageView, pAnnot, nFlags, zDelta,point);
- }
+ if (sSubType == BFFT_SIGNATURE) {
+ } else {
+ if (m_pFormFiller)
+ return m_pFormFiller->OnMouseWheel(pPageView, pAnnot, nFlags, zDelta,
+ point);
+ }
- return FALSE;
+ return FALSE;
}
-FX_BOOL CPDFSDK_BFAnnotHandler::OnRButtonDown(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point)
-{
- ASSERT(pAnnot != NULL);
- CFX_ByteString sSubType = pAnnot->GetSubType();
+FX_BOOL CPDFSDK_BFAnnotHandler::OnRButtonDown(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_DWORD nFlags,
+ const CPDF_Point& point) {
+ ASSERT(pAnnot != NULL);
+ CFX_ByteString sSubType = pAnnot->GetSubType();
- if (sSubType == BFFT_SIGNATURE)
- {
- }
- else
- {
- if (m_pFormFiller)
- return m_pFormFiller->OnRButtonDown(pPageView, pAnnot, nFlags, point);
- }
-
- return FALSE;
-}
-FX_BOOL CPDFSDK_BFAnnotHandler::OnRButtonUp(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_DWORD nFlags, const CPDF_Point& point)
-{
- ASSERT(pAnnot != NULL);
- CFX_ByteString sSubType = pAnnot->GetSubType();
-
- if (sSubType == BFFT_SIGNATURE)
- {
- }
- else
- {
- if (m_pFormFiller)
- return m_pFormFiller->OnRButtonUp(pPageView, pAnnot, nFlags, point);
- }
+ if (sSubType == BFFT_SIGNATURE) {
+ } else {
+ if (m_pFormFiller)
+ return m_pFormFiller->OnRButtonDown(pPageView, pAnnot, nFlags, point);
+ }
- return FALSE;
+ return FALSE;
}
+FX_BOOL CPDFSDK_BFAnnotHandler::OnRButtonUp(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ FX_DWORD nFlags,
+ const CPDF_Point& point) {
+ ASSERT(pAnnot != NULL);
+ CFX_ByteString sSubType = pAnnot->GetSubType();
-FX_BOOL CPDFSDK_BFAnnotHandler::OnChar(CPDFSDK_Annot* pAnnot, FX_DWORD nChar, FX_DWORD nFlags)
-{
- ASSERT(pAnnot != NULL);
- CFX_ByteString sSubType = pAnnot->GetSubType();
-
- if (sSubType == BFFT_SIGNATURE)
- {
- }
- else
- {
- if (m_pFormFiller)
- return m_pFormFiller->OnChar(pAnnot,nChar, nFlags);
- }
+ if (sSubType == BFFT_SIGNATURE) {
+ } else {
+ if (m_pFormFiller)
+ return m_pFormFiller->OnRButtonUp(pPageView, pAnnot, nFlags, point);
+ }
- return FALSE;
+ return FALSE;
}
-FX_BOOL CPDFSDK_BFAnnotHandler::OnKeyDown(CPDFSDK_Annot* pAnnot, int nKeyCode, int nFlag)
-{
- ASSERT(pAnnot != NULL);
- CFX_ByteString sSubType = pAnnot->GetSubType();
+FX_BOOL CPDFSDK_BFAnnotHandler::OnChar(CPDFSDK_Annot* pAnnot,
+ FX_DWORD nChar,
+ FX_DWORD nFlags) {
+ ASSERT(pAnnot != NULL);
+ CFX_ByteString sSubType = pAnnot->GetSubType();
- if (sSubType == BFFT_SIGNATURE)
- {
- }
- else
- {
- if (m_pFormFiller)
- return m_pFormFiller->OnKeyDown(pAnnot,nKeyCode, nFlag);
- }
+ if (sSubType == BFFT_SIGNATURE) {
+ } else {
+ if (m_pFormFiller)
+ return m_pFormFiller->OnChar(pAnnot, nChar, nFlags);
+ }
- return FALSE;
+ return FALSE;
}
-FX_BOOL CPDFSDK_BFAnnotHandler::OnKeyUp(CPDFSDK_Annot* pAnnot, int nKeyCode, int nFlag)
-{
+FX_BOOL CPDFSDK_BFAnnotHandler::OnKeyDown(CPDFSDK_Annot* pAnnot,
+ int nKeyCode,
+ int nFlag) {
+ ASSERT(pAnnot != NULL);
+ CFX_ByteString sSubType = pAnnot->GetSubType();
- return FALSE;
-}
-void CPDFSDK_BFAnnotHandler::OnCreate(CPDFSDK_Annot* pAnnot)
-{
- ASSERT(pAnnot != NULL);
- CFX_ByteString sSubType = pAnnot->GetSubType();
+ if (sSubType == BFFT_SIGNATURE) {
+ } else {
+ if (m_pFormFiller)
+ return m_pFormFiller->OnKeyDown(pAnnot, nKeyCode, nFlag);
+ }
- if (sSubType == BFFT_SIGNATURE)
- {
- }
- else
- {
- if (m_pFormFiller)
- m_pFormFiller->OnCreate(pAnnot);
- }
+ return FALSE;
}
-void CPDFSDK_BFAnnotHandler::OnLoad(CPDFSDK_Annot* pAnnot)
-{
- ASSERT(pAnnot != NULL);
-
- CFX_ByteString sSubType = pAnnot->GetSubType();
-
- if (sSubType == BFFT_SIGNATURE)
- {
- }
- else
- {
- CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot;
- if (!pWidget->IsAppearanceValid())
- pWidget->ResetAppearance(NULL, FALSE);
-
- int nFieldType = pWidget->GetFieldType();
- if (nFieldType == FIELDTYPE_TEXTFIELD || nFieldType == FIELDTYPE_COMBOBOX)
- {
- FX_BOOL bFormated = FALSE;
- CFX_WideString sValue = pWidget->OnFormat(bFormated);
- if (bFormated && nFieldType == FIELDTYPE_COMBOBOX)
- {
- pWidget->ResetAppearance(sValue.c_str(), FALSE);
- }
- }
-
- if (m_pFormFiller)
- m_pFormFiller->OnLoad(pAnnot);
- }
+FX_BOOL CPDFSDK_BFAnnotHandler::OnKeyUp(CPDFSDK_Annot* pAnnot,
+ int nKeyCode,
+ int nFlag) {
+ return FALSE;
}
+void CPDFSDK_BFAnnotHandler::OnCreate(CPDFSDK_Annot* pAnnot) {
+ ASSERT(pAnnot != NULL);
+ CFX_ByteString sSubType = pAnnot->GetSubType();
-FX_BOOL CPDFSDK_BFAnnotHandler::OnSetFocus(CPDFSDK_Annot* pAnnot, FX_DWORD nFlag)
-{
- ASSERT(pAnnot != NULL);
- CFX_ByteString sSubType = pAnnot->GetSubType();
-
- if (sSubType == BFFT_SIGNATURE)
- {
- }
- else
- {
- if (m_pFormFiller)
- return m_pFormFiller->OnSetFocus(pAnnot,nFlag);
- }
-
- return TRUE;
+ if (sSubType == BFFT_SIGNATURE) {
+ } else {
+ if (m_pFormFiller)
+ m_pFormFiller->OnCreate(pAnnot);
+ }
}
-FX_BOOL CPDFSDK_BFAnnotHandler::OnKillFocus(CPDFSDK_Annot* pAnnot, FX_DWORD nFlag)
-{
- ASSERT(pAnnot != NULL);
- CFX_ByteString sSubType = pAnnot->GetSubType();
- if (sSubType == BFFT_SIGNATURE)
- {
- }
- else
- {
- if (m_pFormFiller)
- return m_pFormFiller->OnKillFocus(pAnnot,nFlag);
- }
+void CPDFSDK_BFAnnotHandler::OnLoad(CPDFSDK_Annot* pAnnot) {
+ ASSERT(pAnnot != NULL);
- return TRUE;
-}
+ CFX_ByteString sSubType = pAnnot->GetSubType();
-CPDF_Rect CPDFSDK_BFAnnotHandler::GetViewBBox(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot)
-{
- ASSERT(pAnnot != NULL);
- CFX_ByteString sSubType = pAnnot->GetSubType();
-
- if (sSubType == BFFT_SIGNATURE)
- {
- }
- else
- {
- if (m_pFormFiller)
- return m_pFormFiller->GetViewBBox(pPageView, pAnnot);
+ if (sSubType == BFFT_SIGNATURE) {
+ } else {
+ CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot;
+ if (!pWidget->IsAppearanceValid())
+ pWidget->ResetAppearance(NULL, FALSE);
+ int nFieldType = pWidget->GetFieldType();
+ if (nFieldType == FIELDTYPE_TEXTFIELD || nFieldType == FIELDTYPE_COMBOBOX) {
+ FX_BOOL bFormated = FALSE;
+ CFX_WideString sValue = pWidget->OnFormat(bFormated);
+ if (bFormated && nFieldType == FIELDTYPE_COMBOBOX) {
+ pWidget->ResetAppearance(sValue.c_str(), FALSE);
+ }
}
- return CPDF_Rect(0,0,0,0);
-}
-
-FX_BOOL CPDFSDK_BFAnnotHandler::HitTest(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, const CPDF_Point& point)
-{
- ASSERT(pPageView);
- ASSERT(pAnnot);
-
- CPDF_Rect rect = GetViewBBox(pPageView, pAnnot);
- return rect.Contains(point.x, point.y);
-}
-
-//CReader_AnnotIteratorEx
-
-CPDFSDK_AnnotIterator::CPDFSDK_AnnotIterator(CPDFSDK_PageView * pPageView,FX_BOOL bReverse,
- FX_BOOL bIgnoreTopmost/*=FALSE*/,
- FX_BOOL bCircle/*=FALSE*/,
- CFX_PtrArray *pList/*=NULL*/)
-{
- ASSERT(pPageView);
- m_bReverse=bReverse;
- m_bIgnoreTopmost= bIgnoreTopmost;
- m_bCircle=bCircle;
- m_pIteratorAnnotList.RemoveAll();
- InitIteratorAnnotList(pPageView,pList);
-}
-
-CPDFSDK_Annot* CPDFSDK_AnnotIterator::NextAnnot (const CPDFSDK_Annot* pCurrent)
-{
-
- int index = -1;
- int nCount = m_pIteratorAnnotList.GetSize();
- if (pCurrent) {
- for(int i=0;i<nCount;i++){
- CPDFSDK_Annot * pReaderAnnot= (CPDFSDK_Annot *)m_pIteratorAnnotList.GetAt(i);
- if(pReaderAnnot ==pCurrent){
- index=i;
- break;
- }
- }
- }
- return NextAnnot(index);
-}
-CPDFSDK_Annot* CPDFSDK_AnnotIterator::PrevAnnot (const CPDFSDK_Annot*pCurrent)
-{
- int index = -1;
- int nCount = m_pIteratorAnnotList.GetSize();
- if(pCurrent){
- for(int i=0;i<nCount;i++){
- CPDFSDK_Annot * pReaderAnnot= (CPDFSDK_Annot*)m_pIteratorAnnotList.GetAt(i);
- if(pReaderAnnot ==pCurrent){
- index=i;
- break;
- }
- }
- }
- return PrevAnnot(index);
-}
-CPDFSDK_Annot* CPDFSDK_AnnotIterator::NextAnnot (int& index)
-{
-
- int nCount=m_pIteratorAnnotList.GetSize();
- if(nCount<=0) index=-1;
- else{
- if(index<0){
- index=0;
- }
- else{
- if(m_bCircle){
- index=( index <nCount-1) ? (index+1) :0;
- }
- else{
- index=( index <nCount-1) ? (index+1) :-1;
- }
-
- }
- }
- return (index <0) ? NULL : (CPDFSDK_Annot*)m_pIteratorAnnotList.GetAt(index);
-}
-
-
-CPDFSDK_Annot* CPDFSDK_AnnotIterator::PrevAnnot (int& index)
-{
-
- int nCount=m_pIteratorAnnotList.GetSize();
- if(nCount<=0) index=-1;
- else{
- if(index<0){
- index=nCount-1;
- }
- else{
- if(m_bCircle){
- index = ( index >0) ? (index-1) :nCount-1;
- }
- else{
- index = ( index >0) ? (index-1) :-1;
- }
- }
- }
- return (index <0) ? NULL : (CPDFSDK_Annot*)m_pIteratorAnnotList.GetAt(index);
+ if (m_pFormFiller)
+ m_pFormFiller->OnLoad(pAnnot);
+ }
}
+FX_BOOL CPDFSDK_BFAnnotHandler::OnSetFocus(CPDFSDK_Annot* pAnnot,
+ FX_DWORD nFlag) {
+ ASSERT(pAnnot != NULL);
+ CFX_ByteString sSubType = pAnnot->GetSubType();
-CPDFSDK_Annot*CPDFSDK_AnnotIterator::Next(const CPDFSDK_Annot* pCurrent)
-{
-
- return (m_bReverse) ? PrevAnnot(pCurrent):NextAnnot(pCurrent);
-
-}
-
-CPDFSDK_Annot* CPDFSDK_AnnotIterator::Prev(const CPDFSDK_Annot* pCurrent)
-{
+ if (sSubType == BFFT_SIGNATURE) {
+ } else {
+ if (m_pFormFiller)
+ return m_pFormFiller->OnSetFocus(pAnnot, nFlag);
+ }
- return (m_bReverse) ? NextAnnot(pCurrent):PrevAnnot(pCurrent);
+ return TRUE;
}
+FX_BOOL CPDFSDK_BFAnnotHandler::OnKillFocus(CPDFSDK_Annot* pAnnot,
+ FX_DWORD nFlag) {
+ ASSERT(pAnnot != NULL);
+ CFX_ByteString sSubType = pAnnot->GetSubType();
-CPDFSDK_Annot*CPDFSDK_AnnotIterator::Next(int& index )
-{
-
- return (m_bReverse) ? PrevAnnot(index):NextAnnot(index);
+ if (sSubType == BFFT_SIGNATURE) {
+ } else {
+ if (m_pFormFiller)
+ return m_pFormFiller->OnKillFocus(pAnnot, nFlag);
+ }
+ return TRUE;
}
-CPDFSDK_Annot* CPDFSDK_AnnotIterator::Prev(int& index )
-{
+CPDF_Rect CPDFSDK_BFAnnotHandler::GetViewBBox(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot) {
+ ASSERT(pAnnot != NULL);
+ CFX_ByteString sSubType = pAnnot->GetSubType();
- return (m_bReverse) ? NextAnnot(index):PrevAnnot(index);
+ if (sSubType == BFFT_SIGNATURE) {
+ } else {
+ if (m_pFormFiller)
+ return m_pFormFiller->GetViewBBox(pPageView, pAnnot);
+ }
+
+ return CPDF_Rect(0, 0, 0, 0);
+}
+
+FX_BOOL CPDFSDK_BFAnnotHandler::HitTest(CPDFSDK_PageView* pPageView,
+ CPDFSDK_Annot* pAnnot,
+ const CPDF_Point& point) {
+ ASSERT(pPageView);
+ ASSERT(pAnnot);
+
+ CPDF_Rect rect = GetViewBBox(pPageView, pAnnot);
+ return rect.Contains(point.x, point.y);
+}
+
+// CReader_AnnotIteratorEx
+
+CPDFSDK_AnnotIterator::CPDFSDK_AnnotIterator(CPDFSDK_PageView* pPageView,
+ FX_BOOL bReverse,
+ FX_BOOL bIgnoreTopmost /*=FALSE*/,
+ FX_BOOL bCircle /*=FALSE*/,
+ CFX_PtrArray* pList /*=NULL*/) {
+ ASSERT(pPageView);
+ m_bReverse = bReverse;
+ m_bIgnoreTopmost = bIgnoreTopmost;
+ m_bCircle = bCircle;
+ m_pIteratorAnnotList.RemoveAll();
+ InitIteratorAnnotList(pPageView, pList);
}
-
-void CPDFSDK_AnnotIterator::InsertSort(CFX_PtrArray &arrayList, AI_COMPARE pCompare)
-{
- for (int i = 1; i < arrayList.GetSize(); i++)
- {
- if (pCompare((CPDFSDK_Annot*)(arrayList[i]) , (CPDFSDK_Annot*)(arrayList[i-1])) < 0)
- {
- int j = i-1;
- CPDFSDK_Annot* pTemp = (CPDFSDK_Annot*)arrayList[i];
-
- do
- {
- arrayList[j + 1] = arrayList[j];
- } while (--j >= 0 && pCompare(pTemp, (CPDFSDK_Annot*)arrayList[j]) < 0);
-
- arrayList[j+1] = pTemp;
- }
+CPDFSDK_Annot* CPDFSDK_AnnotIterator::NextAnnot(const CPDFSDK_Annot* pCurrent) {
+ int index = -1;
+ int nCount = m_pIteratorAnnotList.GetSize();
+ if (pCurrent) {
+ for (int i = 0; i < nCount; i++) {
+ CPDFSDK_Annot* pReaderAnnot =
+ (CPDFSDK_Annot*)m_pIteratorAnnotList.GetAt(i);
+ if (pReaderAnnot == pCurrent) {
+ index = i;
+ break;
+ }
}
-}
-
-int LyOrderCompare(CPDFSDK_Annot* p1, CPDFSDK_Annot* p2)
-{
- if (p1->GetLayoutOrder() < p2->GetLayoutOrder())
- return -1;
- if (p1->GetLayoutOrder() > p2->GetLayoutOrder())
- return 1;
- return 0;
-}
+ }
+ return NextAnnot(index);
+}
+CPDFSDK_Annot* CPDFSDK_AnnotIterator::PrevAnnot(const CPDFSDK_Annot* pCurrent) {
+ int index = -1;
+ int nCount = m_pIteratorAnnotList.GetSize();
+ if (pCurrent) {
+ for (int i = 0; i < nCount; i++) {
+ CPDFSDK_Annot* pReaderAnnot =
+ (CPDFSDK_Annot*)m_pIteratorAnnotList.GetAt(i);
+ if (pReaderAnnot == pCurrent) {
+ index = i;
+ break;
+ }
+ }
+ }
+ return PrevAnnot(index);
+}
+CPDFSDK_Annot* CPDFSDK_AnnotIterator::NextAnnot(int& index) {
+ int nCount = m_pIteratorAnnotList.GetSize();
+ if (nCount <= 0)
+ index = -1;
+ else {
+ if (index < 0) {
+ index = 0;
+ } else {
+ if (m_bCircle) {
+ index = (index < nCount - 1) ? (index + 1) : 0;
+ } else {
+ index = (index < nCount - 1) ? (index + 1) : -1;
+ }
+ }
+ }
+ return (index < 0) ? NULL : (CPDFSDK_Annot*)m_pIteratorAnnotList.GetAt(index);
+}
+
+CPDFSDK_Annot* CPDFSDK_AnnotIterator::PrevAnnot(int& index) {
+ int nCount = m_pIteratorAnnotList.GetSize();
+ if (nCount <= 0)
+ index = -1;
+ else {
+ if (index < 0) {
+ index = nCount - 1;
+ } else {
+ if (m_bCircle) {
+ index = (index > 0) ? (index - 1) : nCount - 1;
+ } else {
+ index = (index > 0) ? (index - 1) : -1;
+ }
+ }
+ }
+ return (index < 0) ? NULL : (CPDFSDK_Annot*)m_pIteratorAnnotList.GetAt(index);
+}
+
+CPDFSDK_Annot* CPDFSDK_AnnotIterator::Next(const CPDFSDK_Annot* pCurrent) {
+ return (m_bReverse) ? PrevAnnot(pCurrent) : NextAnnot(pCurrent);
+}
+
+CPDFSDK_Annot* CPDFSDK_AnnotIterator::Prev(const CPDFSDK_Annot* pCurrent) {
+ return (m_bReverse) ? NextAnnot(pCurrent) : PrevAnnot(pCurrent);
+}
+
+CPDFSDK_Annot* CPDFSDK_AnnotIterator::Next(int& index) {
+ return (m_bReverse) ? PrevAnnot(index) : NextAnnot(index);
+}
+
+CPDFSDK_Annot* CPDFSDK_AnnotIterator::Prev(int& index) {
+ return (m_bReverse) ? NextAnnot(index) : PrevAnnot(index);
+}
+
+void CPDFSDK_AnnotIterator::InsertSort(CFX_PtrArray& arrayList,
+ AI_COMPARE pCompare) {
+ for (int i = 1; i < arrayList.GetSize(); i++) {
+ if (pCompare((CPDFSDK_Annot*)(arrayList[i]),
+ (CPDFSDK_Annot*)(arrayList[i - 1])) < 0) {
+ int j = i - 1;
+ CPDFSDK_Annot* pTemp = (CPDFSDK_Annot*)arrayList[i];
+
+ do {
+ arrayList[j + 1] = arrayList[j];
+ } while (--j >= 0 && pCompare(pTemp, (CPDFSDK_Annot*)arrayList[j]) < 0);
+
+ arrayList[j + 1] = pTemp;
+ }
+ }
+}
+
+int LyOrderCompare(CPDFSDK_Annot* p1, CPDFSDK_Annot* p2) {
+ if (p1->GetLayoutOrder() < p2->GetLayoutOrder())
+ return -1;
+ if (p1->GetLayoutOrder() > p2->GetLayoutOrder())
+ return 1;
+ return 0;
+}
+
+FX_BOOL CPDFSDK_AnnotIterator::InitIteratorAnnotList(
+ CPDFSDK_PageView* pPageView,
+ CFX_PtrArray* pAnnotList) {
+ ASSERT(pPageView);
-FX_BOOL CPDFSDK_AnnotIterator::InitIteratorAnnotList(CPDFSDK_PageView* pPageView,CFX_PtrArray * pAnnotList)
-{
- ASSERT(pPageView);
+ if (pAnnotList == NULL) {
+ pAnnotList = pPageView->GetAnnotList();
+ }
- if(pAnnotList==NULL){
- pAnnotList=pPageView->GetAnnotList();
- }
+ m_pIteratorAnnotList.RemoveAll();
+ if (!pAnnotList)
+ return FALSE;
- m_pIteratorAnnotList.RemoveAll();
- if(!pAnnotList) return FALSE;
+ CPDFSDK_Annot* pTopMostAnnot =
+ (m_bIgnoreTopmost) ? NULL : pPageView->GetFocusAnnot();
- CPDFSDK_Annot * pTopMostAnnot= (m_bIgnoreTopmost) ? NULL : pPageView->GetFocusAnnot();
+ int nCount = pAnnotList->GetSize();
+ for (int i = nCount - 1; i >= 0; i--) {
+ CPDFSDK_Annot* pReaderAnnot = (CPDFSDK_Annot*)pAnnotList->GetAt(i);
+ m_pIteratorAnnotList.Add(pReaderAnnot);
+ }
- int nCount =pAnnotList->GetSize();
+ InsertSort(m_pIteratorAnnotList, &LyOrderCompare);
- for(int i = nCount- 1 ;i >= 0;i--)
- {
- CPDFSDK_Annot * pReaderAnnot= (CPDFSDK_Annot*)pAnnotList->GetAt(i);
- m_pIteratorAnnotList.Add(pReaderAnnot);
+ if (pTopMostAnnot) {
+ for (int i = 0; i < nCount; i++) {
+ CPDFSDK_Annot* pReaderAnnot =
+ (CPDFSDK_Annot*)m_pIteratorAnnotList.GetAt(i);
+ if (pReaderAnnot == pTopMostAnnot) {
+ m_pIteratorAnnotList.RemoveAt(i);
+ m_pIteratorAnnotList.InsertAt(0, pReaderAnnot);
+ break;
+ }
}
+ }
- InsertSort(m_pIteratorAnnotList,&LyOrderCompare);
-
- if(pTopMostAnnot)
- {
- for(int i=0 ;i<nCount;i++)
- {
- CPDFSDK_Annot * pReaderAnnot = (CPDFSDK_Annot*)m_pIteratorAnnotList.GetAt(i);
- if(pReaderAnnot == pTopMostAnnot)
- {
- m_pIteratorAnnotList.RemoveAt(i);
- m_pIteratorAnnotList.InsertAt(0, pReaderAnnot);
- break;
- }
- }
- }
-
- return TRUE;
+ return TRUE;
}
diff --git a/fpdfsdk/src/fsdk_baseannot.cpp b/fpdfsdk/src/fsdk_baseannot.cpp
index d0dc4ef738..c6731e6f56 100644
--- a/fpdfsdk/src/fsdk_baseannot.cpp
+++ b/fpdfsdk/src/fsdk_baseannot.cpp
@@ -8,30 +8,24 @@
#include "../include/fsdk_mgr.h"
#include "../include/fsdk_baseannot.h"
-
//---------------------------------------------------------------------------
// CPDFSDK_DateTime
//---------------------------------------------------------------------------
-int _gAfxGetTimeZoneInSeconds(FX_CHAR tzhour, uint8_t tzminute)
-{
- return (int)tzhour * 3600 + (int)tzminute * (tzhour >= 0 ? 60 : -60);
+int _gAfxGetTimeZoneInSeconds(FX_CHAR tzhour, uint8_t tzminute) {
+ return (int)tzhour * 3600 + (int)tzminute * (tzhour >= 0 ? 60 : -60);
}
-FX_BOOL _gAfxIsLeapYear(int16_t year)
-{
- return ((year % 400 == 0) || ((year % 4 == 0) && (year % 100 != 0)));
+FX_BOOL _gAfxIsLeapYear(int16_t year) {
+ return ((year % 400 == 0) || ((year % 4 == 0) && (year % 100 != 0)));
}
-FX_WORD _gAfxGetYearDays(int16_t year)
-{
- return (_gAfxIsLeapYear(year) == TRUE ? 366 : 365);
+FX_WORD _gAfxGetYearDays(int16_t year) {
+ return (_gAfxIsLeapYear(year) == TRUE ? 366 : 365);
}
-uint8_t _gAfxGetMonthDays(int16_t year, uint8_t month)
-{
- uint8_t mDays;
- switch (month)
- {
+uint8_t _gAfxGetMonthDays(int16_t year, uint8_t month) {
+ uint8_t mDays;
+ switch (month) {
case 1:
case 3:
case 5:
@@ -39,1037 +33,974 @@ uint8_t _gAfxGetMonthDays(int16_t year, uint8_t month)
case 8:
case 10:
case 12:
- mDays = 31;
- break;
+ mDays = 31;
+ break;
case 4:
case 6:
case 9:
case 11:
- mDays = 30;
- break;
+ mDays = 30;
+ break;
case 2:
- if (_gAfxIsLeapYear(year) == TRUE)
- mDays = 29;
- else
- mDays = 28;
- break;
+ if (_gAfxIsLeapYear(year) == TRUE)
+ mDays = 29;
+ else
+ mDays = 28;
+ break;
default:
- mDays = 0;
- break;
- }
+ mDays = 0;
+ break;
+ }
- return mDays;
+ return mDays;
}
-CPDFSDK_DateTime::CPDFSDK_DateTime()
-{
- ResetDateTime();
+CPDFSDK_DateTime::CPDFSDK_DateTime() {
+ ResetDateTime();
}
-CPDFSDK_DateTime::CPDFSDK_DateTime(const CFX_ByteString& dtStr)
-{
- ResetDateTime();
+CPDFSDK_DateTime::CPDFSDK_DateTime(const CFX_ByteString& dtStr) {
+ ResetDateTime();
- FromPDFDateTimeString(dtStr);
+ FromPDFDateTimeString(dtStr);
}
-CPDFSDK_DateTime::CPDFSDK_DateTime(const CPDFSDK_DateTime& datetime)
-{
- operator = (datetime);
+CPDFSDK_DateTime::CPDFSDK_DateTime(const CPDFSDK_DateTime& datetime) {
+ operator=(datetime);
}
-CPDFSDK_DateTime::CPDFSDK_DateTime(const FX_SYSTEMTIME& st)
-{
- operator = (st) ;
+CPDFSDK_DateTime::CPDFSDK_DateTime(const FX_SYSTEMTIME& st) {
+ operator=(st);
}
+void CPDFSDK_DateTime::ResetDateTime() {
+ tzset();
-void CPDFSDK_DateTime::ResetDateTime()
-{
- tzset();
-
- time_t curTime;
- time(&curTime);
- struct tm* newtime;
- //newtime = gmtime(&curTime);
- newtime = localtime(&curTime);
+ time_t curTime;
+ time(&curTime);
+ struct tm* newtime;
+ // newtime = gmtime(&curTime);
+ newtime = localtime(&curTime);
- dt.year = newtime->tm_year + 1900;
- dt.month = newtime->tm_mon + 1;
- dt.day = newtime->tm_mday;
- dt.hour = newtime->tm_hour;
- dt.minute = newtime->tm_min;
- dt.second = newtime->tm_sec;
-// dt.tzHour = _timezone / 3600 * -1;
-// dt.tzMinute = (abs(_timezone) % 3600) / 60;
+ dt.year = newtime->tm_year + 1900;
+ dt.month = newtime->tm_mon + 1;
+ dt.day = newtime->tm_mday;
+ dt.hour = newtime->tm_hour;
+ dt.minute = newtime->tm_min;
+ dt.second = newtime->tm_sec;
+ // dt.tzHour = _timezone / 3600 * -1;
+ // dt.tzMinute = (abs(_timezone) % 3600) / 60;
}
-CPDFSDK_DateTime& CPDFSDK_DateTime::operator = (const CPDFSDK_DateTime& datetime)
-{
- FXSYS_memcpy(&dt, &datetime.dt, sizeof(FX_DATETIME));
- return *this;
+CPDFSDK_DateTime& CPDFSDK_DateTime::operator=(
+ const CPDFSDK_DateTime& datetime) {
+ FXSYS_memcpy(&dt, &datetime.dt, sizeof(FX_DATETIME));
+ return *this;
}
-CPDFSDK_DateTime& CPDFSDK_DateTime::operator = (const FX_SYSTEMTIME& st)
-{
- tzset();
+CPDFSDK_DateTime& CPDFSDK_DateTime::operator=(const FX_SYSTEMTIME& st) {
+ tzset();
- dt.year = (int16_t)st.wYear;
- dt.month = (uint8_t)st.wMonth;
- dt.day = (uint8_t)st.wDay;
- dt.hour = (uint8_t)st.wHour;
- dt.minute = (uint8_t)st.wMinute;
- dt.second = (uint8_t)st.wSecond;
-// dt.tzHour = _timezone / 3600 * -1;
-// dt.tzMinute = (abs(_timezone) % 3600) / 60;
- return *this;
+ dt.year = (int16_t)st.wYear;
+ dt.month = (uint8_t)st.wMonth;
+ dt.day = (uint8_t)st.wDay;
+ dt.hour = (uint8_t)st.wHour;
+ dt.minute = (uint8_t)st.wMinute;
+ dt.second = (uint8_t)st.wSecond;
+ // dt.tzHour = _timezone / 3600 * -1;
+ // dt.tzMinute = (abs(_timezone) % 3600) / 60;
+ return *this;
}
-FX_BOOL CPDFSDK_DateTime::operator == (CPDFSDK_DateTime& datetime)
-{
- return (FXSYS_memcmp(&dt, &datetime.dt, sizeof(FX_DATETIME)) == 0);
+FX_BOOL CPDFSDK_DateTime::operator==(CPDFSDK_DateTime& datetime) {
+ return (FXSYS_memcmp(&dt, &datetime.dt, sizeof(FX_DATETIME)) == 0);
}
-FX_BOOL CPDFSDK_DateTime::operator != (CPDFSDK_DateTime& datetime)
-{
- return (FXSYS_memcmp(&dt, &datetime.dt, sizeof(FX_DATETIME)) != 0);
+FX_BOOL CPDFSDK_DateTime::operator!=(CPDFSDK_DateTime& datetime) {
+ return (FXSYS_memcmp(&dt, &datetime.dt, sizeof(FX_DATETIME)) != 0);
}
-FX_BOOL CPDFSDK_DateTime::operator > (CPDFSDK_DateTime& datetime)
-{
- CPDFSDK_DateTime dt1 = ToGMT();
- CPDFSDK_DateTime dt2 = datetime.ToGMT();
- int d1 = (((int)dt1.dt.year) << 16) | (((int)dt1.dt.month) << 8) | (int)dt1.dt.day;
- int d2 = (((int)dt1.dt.hour) << 16) | (((int)dt1.dt.minute) << 8) | (int)dt1.dt.second;
- int d3 = (((int)dt2.dt.year) << 16) | (((int)dt2.dt.month) << 8) | (int)dt2.dt.day;
- int d4 = (((int)dt2.dt.hour) << 16) | (((int)dt2.dt.minute) << 8) | (int)dt2.dt.second;
+FX_BOOL CPDFSDK_DateTime::operator>(CPDFSDK_DateTime& datetime) {
+ CPDFSDK_DateTime dt1 = ToGMT();
+ CPDFSDK_DateTime dt2 = datetime.ToGMT();
+ int d1 =
+ (((int)dt1.dt.year) << 16) | (((int)dt1.dt.month) << 8) | (int)dt1.dt.day;
+ int d2 = (((int)dt1.dt.hour) << 16) | (((int)dt1.dt.minute) << 8) |
+ (int)dt1.dt.second;
+ int d3 =
+ (((int)dt2.dt.year) << 16) | (((int)dt2.dt.month) << 8) | (int)dt2.dt.day;
+ int d4 = (((int)dt2.dt.hour) << 16) | (((int)dt2.dt.minute) << 8) |
+ (int)dt2.dt.second;
- if (d1 > d3) return TRUE;
- if (d2 > d4) return TRUE;
- return FALSE;
-}
-
-FX_BOOL CPDFSDK_DateTime::operator >= (CPDFSDK_DateTime& datetime)
-{
- CPDFSDK_DateTime dt1 = ToGMT();
- CPDFSDK_DateTime dt2 = datetime.ToGMT();
- int d1 = (((int)dt1.dt.year) << 16) | (((int)dt1.dt.month) << 8) | (int)dt1.dt.day;
- int d2 = (((int)dt1.dt.hour) << 16) | (((int)dt1.dt.minute) << 8) | (int)dt1.dt.second;
- int d3 = (((int)dt2.dt.year) << 16) | (((int)dt2.dt.month) << 8) | (int)dt2.dt.day;
- int d4 = (((int)dt2.dt.hour) << 16) | (((int)dt2.dt.minute) << 8) | (int)dt2.dt.second;
-
- if (d1 >= d3) return TRUE;
- if (d2 >= d4) return TRUE;
- return FALSE;
+ if (d1 > d3)
+ return TRUE;
+ if (d2 > d4)
+ return TRUE;
+ return FALSE;
+}
+
+FX_BOOL CPDFSDK_DateTime::operator>=(CPDFSDK_DateTime& datetime) {
+ CPDFSDK_DateTime dt1 = ToGMT();
+ CPDFSDK_DateTime dt2 = datetime.ToGMT();
+ int d1 =
+ (((int)dt1.dt.year) << 16) | (((int)dt1.dt.month) << 8) | (int)dt1.dt.day;
+ int d2 = (((int)dt1.dt.hour) << 16) | (((int)dt1.dt.minute) << 8) |
+ (int)dt1.dt.second;
+ int d3 =
+ (((int)dt2.dt.year) << 16) | (((int)dt2.dt.month) << 8) | (int)dt2.dt.day;
+ int d4 = (((int)dt2.dt.hour) << 16) | (((int)dt2.dt.minute) << 8) |
+ (int)dt2.dt.second;
+
+ if (d1 >= d3)
+ return TRUE;
+ if (d2 >= d4)
+ return TRUE;
+ return FALSE;
+}
+
+FX_BOOL CPDFSDK_DateTime::operator<(CPDFSDK_DateTime& datetime) {
+ CPDFSDK_DateTime dt1 = ToGMT();
+ CPDFSDK_DateTime dt2 = datetime.ToGMT();
+ int d1 =
+ (((int)dt1.dt.year) << 16) | (((int)dt1.dt.month) << 8) | (int)dt1.dt.day;
+ int d2 = (((int)dt1.dt.hour) << 16) | (((int)dt1.dt.minute) << 8) |
+ (int)dt1.dt.second;
+ int d3 =
+ (((int)dt2.dt.year) << 16) | (((int)dt2.dt.month) << 8) | (int)dt2.dt.day;
+ int d4 = (((int)dt2.dt.hour) << 16) | (((int)dt2.dt.minute) << 8) |
+ (int)dt2.dt.second;
+
+ if (d1 < d3)
+ return TRUE;
+ if (d2 < d4)
+ return TRUE;
+ return FALSE;
+}
+
+FX_BOOL CPDFSDK_DateTime::operator<=(CPDFSDK_DateTime& datetime) {
+ CPDFSDK_DateTime dt1 = ToGMT();
+ CPDFSDK_DateTime dt2 = datetime.ToGMT();
+ int d1 =
+ (((int)dt1.dt.year) << 16) | (((int)dt1.dt.month) << 8) | (int)dt1.dt.day;
+ int d2 = (((int)dt1.dt.hour) << 16) | (((int)dt1.dt.minute) << 8) |
+ (int)dt1.dt.second;
+ int d3 =
+ (((int)dt2.dt.year) << 16) | (((int)dt2.dt.month) << 8) | (int)dt2.dt.day;
+ int d4 = (((int)dt2.dt.hour) << 16) | (((int)dt2.dt.minute) << 8) |
+ (int)dt2.dt.second;
+
+ if (d1 <= d3)
+ return TRUE;
+ if (d2 <= d4)
+ return TRUE;
+ return FALSE;
}
-FX_BOOL CPDFSDK_DateTime::operator < (CPDFSDK_DateTime& datetime)
-{
- CPDFSDK_DateTime dt1 = ToGMT();
- CPDFSDK_DateTime dt2 = datetime.ToGMT();
- int d1 = (((int)dt1.dt.year) << 16) | (((int)dt1.dt.month) << 8) | (int)dt1.dt.day;
- int d2 = (((int)dt1.dt.hour) << 16) | (((int)dt1.dt.minute) << 8) | (int)dt1.dt.second;
- int d3 = (((int)dt2.dt.year) << 16) | (((int)dt2.dt.month) << 8) | (int)dt2.dt.day;
- int d4 = (((int)dt2.dt.hour) << 16) | (((int)dt2.dt.minute) << 8) | (int)dt2.dt.second;
-
- if (d1 < d3) return TRUE;
- if (d2 < d4) return TRUE;
- return FALSE;
-}
+CPDFSDK_DateTime::operator time_t() {
+ struct tm newtime;
-FX_BOOL CPDFSDK_DateTime::operator <= (CPDFSDK_DateTime& datetime)
-{
- CPDFSDK_DateTime dt1 = ToGMT();
- CPDFSDK_DateTime dt2 = datetime.ToGMT();
- int d1 = (((int)dt1.dt.year) << 16) | (((int)dt1.dt.month) << 8) | (int)dt1.dt.day;
- int d2 = (((int)dt1.dt.hour) << 16) | (((int)dt1.dt.minute) << 8) | (int)dt1.dt.second;
- int d3 = (((int)dt2.dt.year) << 16) | (((int)dt2.dt.month) << 8) | (int)dt2.dt.day;
- int d4 = (((int)dt2.dt.hour) << 16) | (((int)dt2.dt.minute) << 8) | (int)dt2.dt.second;
+ newtime.tm_year = dt.year - 1900;
+ newtime.tm_mon = dt.month - 1;
+ newtime.tm_mday = dt.day;
+ newtime.tm_hour = dt.hour;
+ newtime.tm_min = dt.minute;
+ newtime.tm_sec = dt.second;
- if (d1 <= d3) return TRUE;
- if (d2 <= d4) return TRUE;
- return FALSE;
+ return mktime(&newtime);
}
-CPDFSDK_DateTime::operator time_t()
-{
- struct tm newtime;
-
- newtime.tm_year = dt.year - 1900;
- newtime.tm_mon = dt.month - 1;
- newtime.tm_mday = dt.day;
- newtime.tm_hour = dt.hour;
- newtime.tm_min = dt.minute;
- newtime.tm_sec = dt.second;
-
- return mktime(&newtime);
-}
-
-CPDFSDK_DateTime& CPDFSDK_DateTime::FromPDFDateTimeString(const CFX_ByteString& dtStr)
-{
- int strLength = dtStr.GetLength();
- if (strLength > 0)
- {
- int i = 0;
- int j, k;
- FX_CHAR ch;
- while (i < strLength)
- {
- ch = dtStr[i];
- if (ch >= '0' && ch <= '9') break;
- i ++;
- }
- if (i >= strLength) return *this;
-
- j = 0;
- k = 0;
- while (i < strLength && j < 4)
- {
- ch = dtStr[i];
- k = k * 10 + ch - '0';
- j ++;
- if (ch < '0' || ch > '9') break;
- i ++;
- }
- dt.year = (int16_t)k;
- if (i >= strLength || j < 4) return *this;
-
- j = 0;
- k = 0;
- while (i < strLength && j < 2)
- {
- ch = dtStr[i];
- k = k * 10 + ch - '0';
- j ++;
- if (ch < '0' || ch > '9') break;
- i ++;
- }
- dt.month = (uint8_t)k;
- if (i >= strLength || j < 2) return *this;
-
- j = 0;
- k = 0;
- while (i < strLength && j < 2)
- {
- ch = dtStr[i];
- k = k * 10 + ch - '0';
- j ++;
- if (ch < '0' || ch > '9') break;
- i ++;
- }
- dt.day = (uint8_t)k;
- if (i >= strLength || j < 2) return *this;
-
- j = 0;
- k = 0;
- while (i < strLength && j < 2)
- {
- ch = dtStr[i];
- k = k * 10 + ch - '0';
- j ++;
- if (ch < '0' || ch > '9') break;
- i ++;
- }
- dt.hour = (uint8_t)k;
- if (i >= strLength || j < 2) return *this;
-
- j = 0;
- k = 0;
- while (i < strLength && j < 2)
- {
- ch = dtStr[i];
- k = k * 10 + ch - '0';
- j ++;
- if (ch < '0' || ch > '9') break;
- i ++;
- }
- dt.minute = (uint8_t)k;
- if (i >= strLength || j < 2) return *this;
-
- j = 0;
- k = 0;
- while (i < strLength && j < 2)
- {
- ch = dtStr[i];
- k = k * 10 + ch - '0';
- j ++;
- if (ch < '0' || ch > '9') break;
- i ++;
- }
- dt.second = (uint8_t)k;
- if (i >= strLength || j < 2) return *this;
-
- ch = dtStr[i ++];
- if (ch != '-' && ch != '+') return *this;
- if (ch == '-')
- dt.tzHour = -1;
- else
- dt.tzHour = 1;
- j = 0;
- k = 0;
- while (i < strLength && j < 2)
- {
- ch = dtStr[i];
- k = k * 10 + ch - '0';
- j ++;
- if (ch < '0' || ch > '9') break;
- i ++;
- }
- dt.tzHour *= (FX_CHAR)k;
- if (i >= strLength || j < 2) return *this;
-
- ch = dtStr[i ++];
- if (ch != '\'') return *this;
- j = 0;
- k = 0;
- while (i < strLength && j < 2)
- {
- ch = dtStr[i];
- k = k * 10 + ch - '0';
- j ++;
- if (ch < '0' || ch > '9') break;
- i ++;
- }
- dt.tzMinute = (uint8_t)k;
- if (i >= strLength || j < 2) return *this;
+CPDFSDK_DateTime& CPDFSDK_DateTime::FromPDFDateTimeString(
+ const CFX_ByteString& dtStr) {
+ int strLength = dtStr.GetLength();
+ if (strLength > 0) {
+ int i = 0;
+ int j, k;
+ FX_CHAR ch;
+ while (i < strLength) {
+ ch = dtStr[i];
+ if (ch >= '0' && ch <= '9')
+ break;
+ i++;
}
-
- return *this;
-}
-
-CFX_ByteString CPDFSDK_DateTime::ToCommonDateTimeString()
-{
- CFX_ByteString str1;
- str1.Format("%04d-%02d-%02d %02d:%02d:%02d ", dt.year, dt.month, dt.day, dt.hour, dt.minute, dt.second);
- if (dt.tzHour < 0)
- str1 += "-";
- else
- str1 += "+";
- CFX_ByteString str2;
- str2.Format("%02d:%02d", abs(dt.tzHour), dt.tzMinute);
- return str1 + str2;
-}
-
-CFX_ByteString CPDFSDK_DateTime::ToPDFDateTimeString()
-{
- CFX_ByteString dtStr;
- char tempStr[32];
- memset(tempStr, 0, sizeof(tempStr));
- FXSYS_snprintf(tempStr, sizeof(tempStr) - 1, "D:%04d%02d%02d%02d%02d%02d",
- dt.year, dt.month, dt.day, dt.hour, dt.minute, dt.second);
- dtStr = CFX_ByteString(tempStr);
- if (dt.tzHour < 0)
- dtStr += CFX_ByteString("-");
+ if (i >= strLength)
+ return *this;
+
+ j = 0;
+ k = 0;
+ while (i < strLength && j < 4) {
+ ch = dtStr[i];
+ k = k * 10 + ch - '0';
+ j++;
+ if (ch < '0' || ch > '9')
+ break;
+ i++;
+ }
+ dt.year = (int16_t)k;
+ if (i >= strLength || j < 4)
+ return *this;
+
+ j = 0;
+ k = 0;
+ while (i < strLength && j < 2) {
+ ch = dtStr[i];
+ k = k * 10 + ch - '0';
+ j++;
+ if (ch < '0' || ch > '9')
+ break;
+ i++;
+ }
+ dt.month = (uint8_t)k;
+ if (i >= strLength || j < 2)
+ return *this;
+
+ j = 0;
+ k = 0;
+ while (i < strLength && j < 2) {
+ ch = dtStr[i];
+ k = k * 10 + ch - '0';
+ j++;
+ if (ch < '0' || ch > '9')
+ break;
+ i++;
+ }
+ dt.day = (uint8_t)k;
+ if (i >= strLength || j < 2)
+ return *this;
+
+ j = 0;
+ k = 0;
+ while (i < strLength && j < 2) {
+ ch = dtStr[i];
+ k = k * 10 + ch - '0';
+ j++;
+ if (ch < '0' || ch > '9')
+ break;
+ i++;
+ }
+ dt.hour = (uint8_t)k;
+ if (i >= strLength || j < 2)
+ return *this;
+
+ j = 0;
+ k = 0;
+ while (i < strLength && j < 2) {
+ ch = dtStr[i];
+ k = k * 10 + ch - '0';
+ j++;
+ if (ch < '0' || ch > '9')
+ break;
+ i++;
+ }
+ dt.minute = (uint8_t)k;
+ if (i >= strLength || j < 2)
+ return *this;
+
+ j = 0;
+ k = 0;
+ while (i < strLength && j < 2) {
+ ch = dtStr[i];
+ k = k * 10 + ch - '0';
+ j++;
+ if (ch < '0' || ch > '9')
+ break;
+ i++;
+ }
+ dt.second = (uint8_t)k;
+ if (i >= strLength || j < 2)
+ return *this;
+
+ ch = dtStr[i++];
+ if (ch != '-' && ch != '+')
+ return *this;
+ if (ch == '-')
+ dt.tzHour = -1;
else
- dtStr += CFX_ByteString("+");
- memset(tempStr, 0, sizeof(tempStr));
- FXSYS_snprintf(tempStr, sizeof(tempStr) - 1, "%02d'%02d'", abs(dt.tzHour), dt.tzMinute);
- dtStr += CFX_ByteString(tempStr);
- return dtStr;
-}
-
-void CPDFSDK_DateTime::ToSystemTime(FX_SYSTEMTIME& st)
-{
- CPDFSDK_DateTime dt = *this;
- time_t t = (time_t)dt;
- struct tm* pTime = localtime(&t);
- if(pTime){
- st.wYear = (FX_WORD)pTime->tm_year + 1900;
- st.wMonth = (FX_WORD)pTime->tm_mon + 1;
- st.wDay = (FX_WORD)pTime->tm_mday;
- st.wDayOfWeek = (FX_WORD)pTime->tm_wday;
- st.wHour = (FX_WORD)pTime->tm_hour;
- st.wMinute = (FX_WORD)pTime->tm_min;
- st.wSecond = (FX_WORD)pTime->tm_sec;
- st.wMilliseconds = 0;
+ dt.tzHour = 1;
+ j = 0;
+ k = 0;
+ while (i < strLength && j < 2) {
+ ch = dtStr[i];
+ k = k * 10 + ch - '0';
+ j++;
+ if (ch < '0' || ch > '9')
+ break;
+ i++;
}
-}
+ dt.tzHour *= (FX_CHAR)k;
+ if (i >= strLength || j < 2)
+ return *this;
+
+ ch = dtStr[i++];
+ if (ch != '\'')
+ return *this;
+ j = 0;
+ k = 0;
+ while (i < strLength && j < 2) {
+ ch = dtStr[i];
+ k = k * 10 + ch - '0';
+ j++;
+ if (ch < '0' || ch > '9')
+ break;
+ i++;
+ }
+ dt.tzMinute = (uint8_t)k;
+ if (i >= strLength || j < 2)
+ return *this;
+ }
+
+ return *this;
+}
+
+CFX_ByteString CPDFSDK_DateTime::ToCommonDateTimeString() {
+ CFX_ByteString str1;
+ str1.Format("%04d-%02d-%02d %02d:%02d:%02d ", dt.year, dt.month, dt.day,
+ dt.hour, dt.minute, dt.second);
+ if (dt.tzHour < 0)
+ str1 += "-";
+ else
+ str1 += "+";
+ CFX_ByteString str2;
+ str2.Format("%02d:%02d", abs(dt.tzHour), dt.tzMinute);
+ return str1 + str2;
+}
+
+CFX_ByteString CPDFSDK_DateTime::ToPDFDateTimeString() {
+ CFX_ByteString dtStr;
+ char tempStr[32];
+ memset(tempStr, 0, sizeof(tempStr));
+ FXSYS_snprintf(tempStr, sizeof(tempStr) - 1, "D:%04d%02d%02d%02d%02d%02d",
+ dt.year, dt.month, dt.day, dt.hour, dt.minute, dt.second);
+ dtStr = CFX_ByteString(tempStr);
+ if (dt.tzHour < 0)
+ dtStr += CFX_ByteString("-");
+ else
+ dtStr += CFX_ByteString("+");
+ memset(tempStr, 0, sizeof(tempStr));
+ FXSYS_snprintf(tempStr, sizeof(tempStr) - 1, "%02d'%02d'", abs(dt.tzHour),
+ dt.tzMinute);
+ dtStr += CFX_ByteString(tempStr);
+ return dtStr;
+}
+
+void CPDFSDK_DateTime::ToSystemTime(FX_SYSTEMTIME& st) {
+ CPDFSDK_DateTime dt = *this;
+ time_t t = (time_t)dt;
+ struct tm* pTime = localtime(&t);
+ if (pTime) {
+ st.wYear = (FX_WORD)pTime->tm_year + 1900;
+ st.wMonth = (FX_WORD)pTime->tm_mon + 1;
+ st.wDay = (FX_WORD)pTime->tm_mday;
+ st.wDayOfWeek = (FX_WORD)pTime->tm_wday;
+ st.wHour = (FX_WORD)pTime->tm_hour;
+ st.wMinute = (FX_WORD)pTime->tm_min;
+ st.wSecond = (FX_WORD)pTime->tm_sec;
+ st.wMilliseconds = 0;
+ }
+}
+
+CPDFSDK_DateTime CPDFSDK_DateTime::ToGMT() {
+ CPDFSDK_DateTime dt = *this;
+ dt.AddSeconds(-_gAfxGetTimeZoneInSeconds(dt.dt.tzHour, dt.dt.tzMinute));
+ dt.dt.tzHour = 0;
+ dt.dt.tzMinute = 0;
+ return dt;
+}
+
+CPDFSDK_DateTime& CPDFSDK_DateTime::AddDays(short days) {
+ if (days == 0)
+ return *this;
-CPDFSDK_DateTime CPDFSDK_DateTime::ToGMT()
-{
- CPDFSDK_DateTime dt = *this;
- dt.AddSeconds(-_gAfxGetTimeZoneInSeconds(dt.dt.tzHour, dt.dt.tzMinute));
- dt.dt.tzHour = 0;
- dt.dt.tzMinute = 0;
- return dt;
-}
-
-CPDFSDK_DateTime& CPDFSDK_DateTime::AddDays(short days)
-{
- if (days == 0) return *this;
-
- int16_t y = dt.year, yy;
- uint8_t m = dt.month;
- uint8_t d = dt.day;
- int mdays, ydays, ldays;
-
- ldays = days;
- if (ldays > 0)
- {
- yy = y;
- if (((FX_WORD)m * 100 + d) > 300) yy ++;
- ydays = _gAfxGetYearDays(yy);
- while (ldays >= ydays)
- {
- y ++;
- ldays -= ydays;
- yy ++;
- mdays = _gAfxGetMonthDays(y, m);
- if (d > mdays)
- {
- m ++;
- d -= mdays;
- }
- ydays = _gAfxGetYearDays(yy);
- }
- mdays = _gAfxGetMonthDays(y, m) - d + 1;
- while (ldays >= mdays)
- {
- ldays -= mdays;
- m ++;
- d = 1;
- mdays = _gAfxGetMonthDays(y, m);
- }
- d += ldays;
+ int16_t y = dt.year, yy;
+ uint8_t m = dt.month;
+ uint8_t d = dt.day;
+ int mdays, ydays, ldays;
+
+ ldays = days;
+ if (ldays > 0) {
+ yy = y;
+ if (((FX_WORD)m * 100 + d) > 300)
+ yy++;
+ ydays = _gAfxGetYearDays(yy);
+ while (ldays >= ydays) {
+ y++;
+ ldays -= ydays;
+ yy++;
+ mdays = _gAfxGetMonthDays(y, m);
+ if (d > mdays) {
+ m++;
+ d -= mdays;
+ }
+ ydays = _gAfxGetYearDays(yy);
}
- else
- {
- ldays *= -1;
- yy = y;
- if (((FX_WORD)m * 100 + d) < 300) yy --;
- ydays = _gAfxGetYearDays(yy);
- while (ldays >= ydays)
- {
- y --;
- ldays -= ydays;
- yy --;
- mdays = _gAfxGetMonthDays(y, m);
- if (d > mdays)
- {
- m ++;
- d -= mdays;
- }
- ydays = _gAfxGetYearDays(yy);
- }
- while (ldays >= d)
- {
- ldays -= d;
- m --;
- mdays = _gAfxGetMonthDays(y, m);
- d = mdays;
- }
- d -= ldays;
+ mdays = _gAfxGetMonthDays(y, m) - d + 1;
+ while (ldays >= mdays) {
+ ldays -= mdays;
+ m++;
+ d = 1;
+ mdays = _gAfxGetMonthDays(y, m);
}
+ d += ldays;
+ } else {
+ ldays *= -1;
+ yy = y;
+ if (((FX_WORD)m * 100 + d) < 300)
+ yy--;
+ ydays = _gAfxGetYearDays(yy);
+ while (ldays >= ydays) {
+ y--;
+ ldays -= ydays;
+ yy--;
+ mdays = _gAfxGetMonthDays(y, m);
+ if (d > mdays) {
+ m++;
+ d -= mdays;
+ }
+ ydays = _gAfxGetYearDays(yy);
+ }
+ while (ldays >= d) {
+ ldays -= d;
+ m--;
+ mdays = _gAfxGetMonthDays(y, m);
+ d = mdays;
+ }
+ d -= ldays;
+ }
- dt.year = y;
- dt.month = m;
- dt.day = d;
+ dt.year = y;
+ dt.month = m;
+ dt.day = d;
- return *this;
+ return *this;
}
-CPDFSDK_DateTime& CPDFSDK_DateTime::AddSeconds(int seconds)
-{
- if (seconds == 0) return *this;
+CPDFSDK_DateTime& CPDFSDK_DateTime::AddSeconds(int seconds) {
+ if (seconds == 0)
+ return *this;
- int n;
- int days;
+ int n;
+ int days;
- n = dt.hour * 3600 + dt.minute * 60 + dt.second + seconds;
- if (n < 0)
- {
- days = (n - 86399) / 86400;
- n -= days * 86400;
- }
- else
- {
- days = n / 86400;
- n %= 86400;
- }
- dt.hour = (uint8_t)(n / 3600);
- dt.hour %= 24;
- n %= 3600;
- dt.minute = (uint8_t)(n / 60);
- dt.second = (uint8_t)(n % 60);
- if (days != 0) AddDays(days);
+ n = dt.hour * 3600 + dt.minute * 60 + dt.second + seconds;
+ if (n < 0) {
+ days = (n - 86399) / 86400;
+ n -= days * 86400;
+ } else {
+ days = n / 86400;
+ n %= 86400;
+ }
+ dt.hour = (uint8_t)(n / 3600);
+ dt.hour %= 24;
+ n %= 3600;
+ dt.minute = (uint8_t)(n / 60);
+ dt.second = (uint8_t)(n % 60);
+ if (days != 0)
+ AddDays(days);
- return *this;
+ return *this;
}
-
//---------------------------------------------------------------------------
// CPDFSDK_Annot
//---------------------------------------------------------------------------
-CPDFSDK_Annot::CPDFSDK_Annot(CPDF_Annot* pAnnot, CPDFSDK_PageView* pPageView) :
-m_pAnnot(pAnnot),
-m_pPageView(pPageView),
-m_bSelected(FALSE),
-m_nTabOrder(-1)
-{
-}
+CPDFSDK_Annot::CPDFSDK_Annot(CPDF_Annot* pAnnot, CPDFSDK_PageView* pPageView)
+ : m_pAnnot(pAnnot),
+ m_pPageView(pPageView),
+ m_bSelected(FALSE),
+ m_nTabOrder(-1) {}
-CPDFSDK_Annot::~CPDFSDK_Annot()
-{
- m_pAnnot = NULL;
- m_pPageView = NULL;
+CPDFSDK_Annot::~CPDFSDK_Annot() {
+ m_pAnnot = NULL;
+ m_pPageView = NULL;
}
-CPDF_Annot* CPDFSDK_Annot::GetPDFAnnot()
-{
- return m_pAnnot;
+CPDF_Annot* CPDFSDK_Annot::GetPDFAnnot() {
+ return m_pAnnot;
}
-FX_DWORD CPDFSDK_Annot::GetFlags()
-{
- ASSERT(m_pAnnot != NULL);
+FX_DWORD CPDFSDK_Annot::GetFlags() {
+ ASSERT(m_pAnnot != NULL);
- return m_pAnnot->GetFlags();
+ return m_pAnnot->GetFlags();
}
-void CPDFSDK_Annot::SetPage(CPDFSDK_PageView* pPageView)
-{
- m_pPageView = pPageView;
+void CPDFSDK_Annot::SetPage(CPDFSDK_PageView* pPageView) {
+ m_pPageView = pPageView;
}
-CPDFSDK_PageView* CPDFSDK_Annot::GetPageView()
-{
- return m_pPageView;
+CPDFSDK_PageView* CPDFSDK_Annot::GetPageView() {
+ return m_pPageView;
}
-FX_BOOL CPDFSDK_Annot::IsSelected()
-{
- return m_bSelected;
+FX_BOOL CPDFSDK_Annot::IsSelected() {
+ return m_bSelected;
}
-void CPDFSDK_Annot::SetSelected(FX_BOOL bSelected)
-{
- m_bSelected = bSelected;
+void CPDFSDK_Annot::SetSelected(FX_BOOL bSelected) {
+ m_bSelected = bSelected;
}
// Tab Order
-int CPDFSDK_Annot::GetTabOrder()
-{
- return m_nTabOrder;
+int CPDFSDK_Annot::GetTabOrder() {
+ return m_nTabOrder;
}
-void CPDFSDK_Annot::SetTabOrder(int iTabOrder)
-{
- m_nTabOrder = iTabOrder;
+void CPDFSDK_Annot::SetTabOrder(int iTabOrder) {
+ m_nTabOrder = iTabOrder;
}
-CPDF_Dictionary* CPDFSDK_Annot::GetAnnotDict() const
-{
- ASSERT(m_pAnnot != NULL);
+CPDF_Dictionary* CPDFSDK_Annot::GetAnnotDict() const {
+ ASSERT(m_pAnnot != NULL);
- return m_pAnnot->GetAnnotDict();
+ return m_pAnnot->GetAnnotDict();
}
-void CPDFSDK_Annot::SetRect(const CPDF_Rect& rect)
-{
- ASSERT(rect.right - rect.left >= GetMinWidth());
- ASSERT(rect.top - rect.bottom >= GetMinHeight());
+void CPDFSDK_Annot::SetRect(const CPDF_Rect& rect) {
+ ASSERT(rect.right - rect.left >= GetMinWidth());
+ ASSERT(rect.top - rect.bottom >= GetMinHeight());
- m_pAnnot->GetAnnotDict()->SetAtRect("Rect", rect);
+ m_pAnnot->GetAnnotDict()->SetAtRect("Rect", rect);
}
-CPDF_Rect CPDFSDK_Annot::GetRect() const
-{
- ASSERT(m_pAnnot != NULL);
+CPDF_Rect CPDFSDK_Annot::GetRect() const {
+ ASSERT(m_pAnnot != NULL);
- CPDF_Rect rect;
- m_pAnnot->GetRect(rect);
+ CPDF_Rect rect;
+ m_pAnnot->GetRect(rect);
- return rect;
+ return rect;
}
-CFX_ByteString CPDFSDK_Annot::GetType() const
-{
- ASSERT(m_pAnnot != NULL);
+CFX_ByteString CPDFSDK_Annot::GetType() const {
+ ASSERT(m_pAnnot != NULL);
- return m_pAnnot->GetSubType();
+ return m_pAnnot->GetSubType();
}
-CFX_ByteString CPDFSDK_Annot::GetSubType() const
-{
- return "";
+CFX_ByteString CPDFSDK_Annot::GetSubType() const {
+ return "";
}
-void CPDFSDK_Annot::DrawAppearance(CFX_RenderDevice* pDevice, const CPDF_Matrix* pUser2Device,
- CPDF_Annot::AppearanceMode mode, const CPDF_RenderOptions* pOptions)
-{
- ASSERT(m_pPageView != NULL);
- ASSERT(m_pAnnot != NULL);
+void CPDFSDK_Annot::DrawAppearance(CFX_RenderDevice* pDevice,
+ const CPDF_Matrix* pUser2Device,
+ CPDF_Annot::AppearanceMode mode,
+ const CPDF_RenderOptions* pOptions) {
+ ASSERT(m_pPageView != NULL);
+ ASSERT(m_pAnnot != NULL);
- m_pAnnot->DrawAppearance(m_pPageView->GetPDFPage(), pDevice, pUser2Device, mode, pOptions);
+ m_pAnnot->DrawAppearance(m_pPageView->GetPDFPage(), pDevice, pUser2Device,
+ mode, pOptions);
}
-FX_BOOL CPDFSDK_Annot::IsAppearanceValid()
-{
- return m_pAnnot->GetAnnotDict()->GetDict("AP") != NULL;
+FX_BOOL CPDFSDK_Annot::IsAppearanceValid() {
+ return m_pAnnot->GetAnnotDict()->GetDict("AP") != NULL;
}
-FX_BOOL CPDFSDK_Annot::IsAppearanceValid(CPDF_Annot::AppearanceMode mode)
-{
- CPDF_Dictionary* pAP = m_pAnnot->GetAnnotDict()->GetDict("AP");
- if (pAP == NULL) return FALSE;
-
- // Choose the right sub-ap
- const FX_CHAR* ap_entry = "N";
- if (mode == CPDF_Annot::Down)
- ap_entry = "D";
- else if (mode == CPDF_Annot::Rollover)
- ap_entry = "R";
- if (!pAP->KeyExist(ap_entry))
- ap_entry = "N";
+FX_BOOL CPDFSDK_Annot::IsAppearanceValid(CPDF_Annot::AppearanceMode mode) {
+ CPDF_Dictionary* pAP = m_pAnnot->GetAnnotDict()->GetDict("AP");
+ if (pAP == NULL)
+ return FALSE;
- // Get the AP stream or subdirectory
- CPDF_Object* psub = pAP->GetElementValue(ap_entry);
- if (psub == NULL) return FALSE;
+ // Choose the right sub-ap
+ const FX_CHAR* ap_entry = "N";
+ if (mode == CPDF_Annot::Down)
+ ap_entry = "D";
+ else if (mode == CPDF_Annot::Rollover)
+ ap_entry = "R";
+ if (!pAP->KeyExist(ap_entry))
+ ap_entry = "N";
+
+ // Get the AP stream or subdirectory
+ CPDF_Object* psub = pAP->GetElementValue(ap_entry);
+ if (psub == NULL)
+ return FALSE;
- return TRUE;
+ return TRUE;
}
-void CPDFSDK_Annot::DrawBorder(CFX_RenderDevice* pDevice, const CPDF_Matrix* pUser2Device,
- const CPDF_RenderOptions* pOptions)
-{
- ASSERT(m_pAnnot != NULL);
- m_pAnnot->DrawBorder(pDevice, pUser2Device, pOptions);
+void CPDFSDK_Annot::DrawBorder(CFX_RenderDevice* pDevice,
+ const CPDF_Matrix* pUser2Device,
+ const CPDF_RenderOptions* pOptions) {
+ ASSERT(m_pAnnot != NULL);
+ m_pAnnot->DrawBorder(pDevice, pUser2Device, pOptions);
}
-void CPDFSDK_Annot::ClearCachedAP()
-{
- ASSERT(m_pAnnot != NULL);
- m_pAnnot->ClearCachedAP();
+void CPDFSDK_Annot::ClearCachedAP() {
+ ASSERT(m_pAnnot != NULL);
+ m_pAnnot->ClearCachedAP();
}
-void CPDFSDK_Annot::SetContents(const CFX_WideString& sContents)
-{
- if (sContents.IsEmpty())
- m_pAnnot->GetAnnotDict()->RemoveAt("Contents");
- else
- m_pAnnot->GetAnnotDict()->SetAtString("Contents", PDF_EncodeText(sContents));
+void CPDFSDK_Annot::SetContents(const CFX_WideString& sContents) {
+ if (sContents.IsEmpty())
+ m_pAnnot->GetAnnotDict()->RemoveAt("Contents");
+ else
+ m_pAnnot->GetAnnotDict()->SetAtString("Contents",
+ PDF_EncodeText(sContents));
}
-CFX_WideString CPDFSDK_Annot::GetContents() const
-{
- return m_pAnnot->GetAnnotDict()->GetUnicodeText("Contents");
+CFX_WideString CPDFSDK_Annot::GetContents() const {
+ return m_pAnnot->GetAnnotDict()->GetUnicodeText("Contents");
}
-void CPDFSDK_Annot::SetAnnotName(const CFX_WideString& sName)
-{
- if (sName.IsEmpty())
- m_pAnnot->GetAnnotDict()->RemoveAt("NM");
- else
- m_pAnnot->GetAnnotDict()->SetAtString("NM", PDF_EncodeText(sName));
+void CPDFSDK_Annot::SetAnnotName(const CFX_WideString& sName) {
+ if (sName.IsEmpty())
+ m_pAnnot->GetAnnotDict()->RemoveAt("NM");
+ else
+ m_pAnnot->GetAnnotDict()->SetAtString("NM", PDF_EncodeText(sName));
}
-CFX_WideString CPDFSDK_Annot::GetAnnotName() const
-{
- return m_pAnnot->GetAnnotDict()->GetUnicodeText("NM");
+CFX_WideString CPDFSDK_Annot::GetAnnotName() const {
+ return m_pAnnot->GetAnnotDict()->GetUnicodeText("NM");
}
-void CPDFSDK_Annot::SetModifiedDate(const FX_SYSTEMTIME& st)
-{
- CPDFSDK_DateTime dt(st);
- CFX_ByteString str = dt.ToPDFDateTimeString();
+void CPDFSDK_Annot::SetModifiedDate(const FX_SYSTEMTIME& st) {
+ CPDFSDK_DateTime dt(st);
+ CFX_ByteString str = dt.ToPDFDateTimeString();
- if (str.IsEmpty())
- m_pAnnot->GetAnnotDict()->RemoveAt("M");
- else
- m_pAnnot->GetAnnotDict()->SetAtString("M", str);
+ if (str.IsEmpty())
+ m_pAnnot->GetAnnotDict()->RemoveAt("M");
+ else
+ m_pAnnot->GetAnnotDict()->SetAtString("M", str);
}
-FX_SYSTEMTIME CPDFSDK_Annot::GetModifiedDate() const
-{
- FX_SYSTEMTIME systime;
- CFX_ByteString str = m_pAnnot->GetAnnotDict()->GetString("M");
+FX_SYSTEMTIME CPDFSDK_Annot::GetModifiedDate() const {
+ FX_SYSTEMTIME systime;
+ CFX_ByteString str = m_pAnnot->GetAnnotDict()->GetString("M");
- CPDFSDK_DateTime dt(str);
- dt.ToSystemTime(systime);
+ CPDFSDK_DateTime dt(str);
+ dt.ToSystemTime(systime);
- return systime;
+ return systime;
}
-void CPDFSDK_Annot::SetFlags(int nFlags)
-{
- m_pAnnot->GetAnnotDict()->SetAtInteger("F", nFlags);
+void CPDFSDK_Annot::SetFlags(int nFlags) {
+ m_pAnnot->GetAnnotDict()->SetAtInteger("F", nFlags);
}
-int CPDFSDK_Annot::GetFlags() const
-{
- return m_pAnnot->GetAnnotDict()->GetInteger("F");
+int CPDFSDK_Annot::GetFlags() const {
+ return m_pAnnot->GetAnnotDict()->GetInteger("F");
}
-void CPDFSDK_Annot::SetAppState(const CFX_ByteString& str)
-{
- if (str.IsEmpty())
- m_pAnnot->GetAnnotDict()->RemoveAt("AS");
- else
- m_pAnnot->GetAnnotDict()->SetAtString("AS", str);
+void CPDFSDK_Annot::SetAppState(const CFX_ByteString& str) {
+ if (str.IsEmpty())
+ m_pAnnot->GetAnnotDict()->RemoveAt("AS");
+ else
+ m_pAnnot->GetAnnotDict()->SetAtString("AS", str);
}
-CFX_ByteString CPDFSDK_Annot::GetAppState() const
-{
- return m_pAnnot->GetAnnotDict()->GetString("AS");
+CFX_ByteString CPDFSDK_Annot::GetAppState() const {
+ return m_pAnnot->GetAnnotDict()->GetString("AS");
}
-void CPDFSDK_Annot::SetStructParent(int key)
-{
- m_pAnnot->GetAnnotDict()->SetAtInteger("StructParent", key);
+void CPDFSDK_Annot::SetStructParent(int key) {
+ m_pAnnot->GetAnnotDict()->SetAtInteger("StructParent", key);
}
-int CPDFSDK_Annot::GetStructParent() const
-{
- return m_pAnnot->GetAnnotDict()->GetInteger("StructParent");
+int CPDFSDK_Annot::GetStructParent() const {
+ return m_pAnnot->GetAnnotDict()->GetInteger("StructParent");
}
-//border
-void CPDFSDK_Annot::SetBorderWidth(int nWidth)
-{
- CPDF_Array* pBorder = m_pAnnot->GetAnnotDict()->GetArray("Border");
+// border
+void CPDFSDK_Annot::SetBorderWidth(int nWidth) {
+ CPDF_Array* pBorder = m_pAnnot->GetAnnotDict()->GetArray("Border");
- if (pBorder)
- {
- pBorder->SetAt(2, new CPDF_Number(nWidth));
- }
- else
- {
- CPDF_Dictionary* pBSDict = m_pAnnot->GetAnnotDict()->GetDict("BS");
-
- if (!pBSDict)
- {
- pBSDict = new CPDF_Dictionary;
- m_pAnnot->GetAnnotDict()->SetAt("BS", pBSDict);
- }
+ if (pBorder) {
+ pBorder->SetAt(2, new CPDF_Number(nWidth));
+ } else {
+ CPDF_Dictionary* pBSDict = m_pAnnot->GetAnnotDict()->GetDict("BS");
- pBSDict->SetAtInteger("W", nWidth);
+ if (!pBSDict) {
+ pBSDict = new CPDF_Dictionary;
+ m_pAnnot->GetAnnotDict()->SetAt("BS", pBSDict);
}
+
+ pBSDict->SetAtInteger("W", nWidth);
+ }
}
-int CPDFSDK_Annot::GetBorderWidth() const
-{
- if (CPDF_Array* pBorder = m_pAnnot->GetAnnotDict()->GetArray("Border")) {
- return pBorder->GetInteger(2);
- }
- if (CPDF_Dictionary* pBSDict = m_pAnnot->GetAnnotDict()->GetDict("BS")) {
- return pBSDict->GetInteger("W", 1);
- }
- return 1;
+int CPDFSDK_Annot::GetBorderWidth() const {
+ if (CPDF_Array* pBorder = m_pAnnot->GetAnnotDict()->GetArray("Border")) {
+ return pBorder->GetInteger(2);
+ }
+ if (CPDF_Dictionary* pBSDict = m_pAnnot->GetAnnotDict()->GetDict("BS")) {
+ return pBSDict->GetInteger("W", 1);
+ }
+ return 1;
}
-void CPDFSDK_Annot::SetBorderStyle(int nStyle)
-{
- CPDF_Dictionary* pBSDict = m_pAnnot->GetAnnotDict()->GetDict("BS");
- if (!pBSDict)
- {
- pBSDict = new CPDF_Dictionary;
- m_pAnnot->GetAnnotDict()->SetAt("BS", pBSDict);
- }
+void CPDFSDK_Annot::SetBorderStyle(int nStyle) {
+ CPDF_Dictionary* pBSDict = m_pAnnot->GetAnnotDict()->GetDict("BS");
+ if (!pBSDict) {
+ pBSDict = new CPDF_Dictionary;
+ m_pAnnot->GetAnnotDict()->SetAt("BS", pBSDict);
+ }
- switch (nStyle)
- {
+ switch (nStyle) {
case BBS_SOLID:
- pBSDict->SetAtName("S", "S");
- break;
+ pBSDict->SetAtName("S", "S");
+ break;
case BBS_DASH:
- pBSDict->SetAtName("S", "D");
- break;
+ pBSDict->SetAtName("S", "D");
+ break;
case BBS_BEVELED:
- pBSDict->SetAtName("S", "B");
- break;
+ pBSDict->SetAtName("S", "B");
+ break;
case BBS_INSET:
- pBSDict->SetAtName("S", "I");
- break;
+ pBSDict->SetAtName("S", "I");
+ break;
case BBS_UNDERLINE:
- pBSDict->SetAtName("S", "U");
- break;
- }
-}
-
-int CPDFSDK_Annot::GetBorderStyle() const
-{
- CPDF_Dictionary* pBSDict = m_pAnnot->GetAnnotDict()->GetDict("BS");
- if (pBSDict)
- {
- CFX_ByteString sBorderStyle = pBSDict->GetString("S", "S");
- if (sBorderStyle == "S") return BBS_SOLID;
- if (sBorderStyle == "D") return BBS_DASH;
- if (sBorderStyle == "B") return BBS_BEVELED;
- if (sBorderStyle == "I") return BBS_INSET;
- if (sBorderStyle == "U") return BBS_UNDERLINE;
+ pBSDict->SetAtName("S", "U");
+ break;
+ }
+}
+
+int CPDFSDK_Annot::GetBorderStyle() const {
+ CPDF_Dictionary* pBSDict = m_pAnnot->GetAnnotDict()->GetDict("BS");
+ if (pBSDict) {
+ CFX_ByteString sBorderStyle = pBSDict->GetString("S", "S");
+ if (sBorderStyle == "S")
+ return BBS_SOLID;
+ if (sBorderStyle == "D")
+ return BBS_DASH;
+ if (sBorderStyle == "B")
+ return BBS_BEVELED;
+ if (sBorderStyle == "I")
+ return BBS_INSET;
+ if (sBorderStyle == "U")
+ return BBS_UNDERLINE;
+ }
+
+ CPDF_Array* pBorder = m_pAnnot->GetAnnotDict()->GetArray("Border");
+ if (pBorder) {
+ if (pBorder->GetCount() >= 4) {
+ CPDF_Array* pDP = pBorder->GetArray(3);
+ if (pDP && pDP->GetCount() > 0)
+ return BBS_DASH;
}
+ }
- CPDF_Array* pBorder = m_pAnnot->GetAnnotDict()->GetArray("Border");
- if (pBorder)
- {
- if (pBorder->GetCount() >= 4)
- {
- CPDF_Array *pDP = pBorder->GetArray(3);
- if (pDP && pDP->GetCount() > 0)
- return BBS_DASH;
- }
- }
-
- return BBS_SOLID;
+ return BBS_SOLID;
}
-void CPDFSDK_Annot::SetBorderDash(const CFX_IntArray& array)
-{
- CPDF_Dictionary* pBSDict = m_pAnnot->GetAnnotDict()->GetDict("BS");
- if (!pBSDict)
- {
- pBSDict = new CPDF_Dictionary;
- m_pAnnot->GetAnnotDict()->SetAt("BS", pBSDict);
- }
+void CPDFSDK_Annot::SetBorderDash(const CFX_IntArray& array) {
+ CPDF_Dictionary* pBSDict = m_pAnnot->GetAnnotDict()->GetDict("BS");
+ if (!pBSDict) {
+ pBSDict = new CPDF_Dictionary;
+ m_pAnnot->GetAnnotDict()->SetAt("BS", pBSDict);
+ }
- CPDF_Array* pArray = new CPDF_Array;
- for (int i=0,sz=array.GetSize(); i<sz; i++)
- {
- pArray->AddInteger(array[i]);
- }
+ CPDF_Array* pArray = new CPDF_Array;
+ for (int i = 0, sz = array.GetSize(); i < sz; i++) {
+ pArray->AddInteger(array[i]);
+ }
- pBSDict->SetAt("D", pArray);
+ pBSDict->SetAt("D", pArray);
}
-void CPDFSDK_Annot::GetBorderDash(CFX_IntArray& array) const
-{
- CPDF_Array* pDash = NULL;
+void CPDFSDK_Annot::GetBorderDash(CFX_IntArray& array) const {
+ CPDF_Array* pDash = NULL;
- CPDF_Array* pBorder = m_pAnnot->GetAnnotDict()->GetArray("Border");
- if (pBorder)
- {
- pDash = pBorder->GetArray(3);
- }
- else
- {
- CPDF_Dictionary* pBSDict = m_pAnnot->GetAnnotDict()->GetDict("BS");
- if (pBSDict)
- {
- pDash = pBSDict->GetArray("D");
- }
+ CPDF_Array* pBorder = m_pAnnot->GetAnnotDict()->GetArray("Border");
+ if (pBorder) {
+ pDash = pBorder->GetArray(3);
+ } else {
+ CPDF_Dictionary* pBSDict = m_pAnnot->GetAnnotDict()->GetDict("BS");
+ if (pBSDict) {
+ pDash = pBSDict->GetArray("D");
}
+ }
- if (pDash)
- {
- for (int i=0,sz=pDash->GetCount(); i<sz; i++)
- {
- array.Add(pDash->GetInteger(i));
- }
+ if (pDash) {
+ for (int i = 0, sz = pDash->GetCount(); i < sz; i++) {
+ array.Add(pDash->GetInteger(i));
}
+ }
}
-void CPDFSDK_Annot::SetColor(FX_COLORREF color)
-{
- CPDF_Array* pArray = new CPDF_Array;
- pArray->AddNumber((FX_FLOAT)FXSYS_GetRValue(color) / 255.0f);
- pArray->AddNumber((FX_FLOAT)FXSYS_GetGValue(color) / 255.0f);
- pArray->AddNumber((FX_FLOAT)FXSYS_GetBValue(color) / 255.0f);
- m_pAnnot->GetAnnotDict()->SetAt("C", pArray);
+void CPDFSDK_Annot::SetColor(FX_COLORREF color) {
+ CPDF_Array* pArray = new CPDF_Array;
+ pArray->AddNumber((FX_FLOAT)FXSYS_GetRValue(color) / 255.0f);
+ pArray->AddNumber((FX_FLOAT)FXSYS_GetGValue(color) / 255.0f);
+ pArray->AddNumber((FX_FLOAT)FXSYS_GetBValue(color) / 255.0f);
+ m_pAnnot->GetAnnotDict()->SetAt("C", pArray);
}
-void CPDFSDK_Annot::RemoveColor()
-{
- m_pAnnot->GetAnnotDict()->RemoveAt("C");
+void CPDFSDK_Annot::RemoveColor() {
+ m_pAnnot->GetAnnotDict()->RemoveAt("C");
}
-FX_BOOL CPDFSDK_Annot::GetColor(FX_COLORREF& color) const
-{
- if (CPDF_Array* pEntry = m_pAnnot->GetAnnotDict()->GetArray("C"))
- {
- int nCount = pEntry->GetCount();
- if (nCount == 1)
- {
- FX_FLOAT g = pEntry->GetNumber(0) * 255;
+FX_BOOL CPDFSDK_Annot::GetColor(FX_COLORREF& color) const {
+ if (CPDF_Array* pEntry = m_pAnnot->GetAnnotDict()->GetArray("C")) {
+ int nCount = pEntry->GetCount();
+ if (nCount == 1) {
+ FX_FLOAT g = pEntry->GetNumber(0) * 255;
- color = FXSYS_RGB((int)g, (int)g, (int)g);
+ color = FXSYS_RGB((int)g, (int)g, (int)g);
- return TRUE;
- }
- else if (nCount == 3)
- {
- FX_FLOAT r = pEntry->GetNumber(0) * 255;
- FX_FLOAT g = pEntry->GetNumber(1) * 255;
- FX_FLOAT b = pEntry->GetNumber(2) * 255;
+ return TRUE;
+ } else if (nCount == 3) {
+ FX_FLOAT r = pEntry->GetNumber(0) * 255;
+ FX_FLOAT g = pEntry->GetNumber(1) * 255;
+ FX_FLOAT b = pEntry->GetNumber(2) * 255;
- color = FXSYS_RGB((int)r, (int)g, (int)b);
+ color = FXSYS_RGB((int)r, (int)g, (int)b);
- return TRUE;
- }
- else if (nCount == 4)
- {
- FX_FLOAT c = pEntry->GetNumber(0);
- FX_FLOAT m = pEntry->GetNumber(1);
- FX_FLOAT y = pEntry->GetNumber(2);
- FX_FLOAT k = pEntry->GetNumber(3);
+ return TRUE;
+ } else if (nCount == 4) {
+ FX_FLOAT c = pEntry->GetNumber(0);
+ FX_FLOAT m = pEntry->GetNumber(1);
+ FX_FLOAT y = pEntry->GetNumber(2);
+ FX_FLOAT k = pEntry->GetNumber(3);
- FX_FLOAT r = 1.0f - FX_MIN(1.0f, c + k);
- FX_FLOAT g = 1.0f - FX_MIN(1.0f, m + k);
- FX_FLOAT b = 1.0f - FX_MIN(1.0f, y + k);
+ FX_FLOAT r = 1.0f - FX_MIN(1.0f, c + k);
+ FX_FLOAT g = 1.0f - FX_MIN(1.0f, m + k);
+ FX_FLOAT b = 1.0f - FX_MIN(1.0f, y + k);
- color = FXSYS_RGB((int)(r * 255), (int)(g * 255), (int)(b * 255));
+ color = FXSYS_RGB((int)(r * 255), (int)(g * 255), (int)(b * 255));
- return TRUE;
- }
+ return TRUE;
}
-
- return FALSE;
-}
-
-
-void CPDFSDK_Annot::WriteAppearance(const CFX_ByteString& sAPType, const CPDF_Rect& rcBBox,
- const CPDF_Matrix& matrix, const CFX_ByteString& sContents,
- const CFX_ByteString& sAPState)
-{
- CPDF_Dictionary* pAPDict = m_pAnnot->GetAnnotDict()->GetDict("AP");
-
- if (!pAPDict)
- {
- pAPDict = new CPDF_Dictionary;
- m_pAnnot->GetAnnotDict()->SetAt("AP", pAPDict);
+ }
+
+ return FALSE;
+}
+
+void CPDFSDK_Annot::WriteAppearance(const CFX_ByteString& sAPType,
+ const CPDF_Rect& rcBBox,
+ const CPDF_Matrix& matrix,
+ const CFX_ByteString& sContents,
+ const CFX_ByteString& sAPState) {
+ CPDF_Dictionary* pAPDict = m_pAnnot->GetAnnotDict()->GetDict("AP");
+
+ if (!pAPDict) {
+ pAPDict = new CPDF_Dictionary;
+ m_pAnnot->GetAnnotDict()->SetAt("AP", pAPDict);
+ }
+
+ CPDF_Stream* pStream = NULL;
+ CPDF_Dictionary* pParentDict = NULL;
+
+ if (sAPState.IsEmpty()) {
+ pParentDict = pAPDict;
+ pStream = pAPDict->GetStream(sAPType);
+ } else {
+ CPDF_Dictionary* pAPTypeDict = pAPDict->GetDict(sAPType);
+ if (!pAPTypeDict) {
+ pAPTypeDict = new CPDF_Dictionary;
+ pAPDict->SetAt(sAPType, pAPTypeDict);
}
- CPDF_Stream* pStream = NULL;
- CPDF_Dictionary* pParentDict = NULL;
+ pParentDict = pAPTypeDict;
+ pStream = pAPTypeDict->GetStream(sAPState);
+ }
- if (sAPState.IsEmpty())
- {
- pParentDict = pAPDict;
- pStream = pAPDict->GetStream(sAPType);
- }
- else
- {
- CPDF_Dictionary* pAPTypeDict = pAPDict->GetDict(sAPType);
- if (!pAPTypeDict)
- {
- pAPTypeDict = new CPDF_Dictionary;
- pAPDict->SetAt(sAPType, pAPTypeDict);
- }
-
- pParentDict = pAPTypeDict;
- pStream = pAPTypeDict->GetStream(sAPState);
- }
+ if (!pStream) {
+ CPDF_Document* pDoc = m_pPageView->GetPDFDocument();
+ pStream = new CPDF_Stream(NULL, 0, NULL);
+ int32_t objnum = pDoc->AddIndirectObject(pStream);
+ pParentDict->SetAtReference(sAPType, pDoc, objnum);
+ }
- if (!pStream)
- {
- CPDF_Document* pDoc = m_pPageView->GetPDFDocument();
- pStream = new CPDF_Stream(NULL, 0, NULL);
- int32_t objnum = pDoc->AddIndirectObject(pStream);
- pParentDict->SetAtReference(sAPType, pDoc, objnum);
- }
+ CPDF_Dictionary* pStreamDict = pStream->GetDict();
+ if (!pStreamDict) {
+ pStreamDict = new CPDF_Dictionary;
+ pStreamDict->SetAtName("Type", "XObject");
+ pStreamDict->SetAtName("Subtype", "Form");
+ pStreamDict->SetAtInteger("FormType", 1);
+ pStream->InitStream(NULL, 0, pStreamDict);
+ }
- CPDF_Dictionary *pStreamDict = pStream->GetDict();
- if (!pStreamDict)
- {
- pStreamDict = new CPDF_Dictionary;
- pStreamDict->SetAtName("Type", "XObject");
- pStreamDict->SetAtName("Subtype", "Form");
- pStreamDict->SetAtInteger("FormType", 1);
- pStream->InitStream(NULL,0,pStreamDict);
- }
-
- if (pStreamDict)
- {
- pStreamDict->SetAtMatrix("Matrix",matrix);
- pStreamDict->SetAtRect("BBox", rcBBox);
- }
+ if (pStreamDict) {
+ pStreamDict->SetAtMatrix("Matrix", matrix);
+ pStreamDict->SetAtRect("BBox", rcBBox);
+ }
- pStream->SetData((uint8_t*)sContents.c_str(), sContents.GetLength(), FALSE, FALSE);
+ pStream->SetData((uint8_t*)sContents.c_str(), sContents.GetLength(), FALSE,
+ FALSE);
}
-#define BA_ANNOT_MINWIDTH 1
-#define BA_ANNOT_MINHEIGHT 1
+#define BA_ANNOT_MINWIDTH 1
+#define BA_ANNOT_MINHEIGHT 1
-FX_FLOAT CPDFSDK_Annot::GetMinWidth() const
-{
- return BA_ANNOT_MINWIDTH;
+FX_FLOAT CPDFSDK_Annot::GetMinWidth() const {
+ return BA_ANNOT_MINWIDTH;
}
-FX_FLOAT CPDFSDK_Annot::GetMinHeight() const
-{
- return BA_ANNOT_MINHEIGHT;
+FX_FLOAT CPDFSDK_Annot::GetMinHeight() const {
+ return BA_ANNOT_MINHEIGHT;
}
-FX_BOOL CPDFSDK_Annot::CreateFormFiller()
-{
- return TRUE;
+FX_BOOL CPDFSDK_Annot::CreateFormFiller() {
+ return TRUE;
}
-FX_BOOL CPDFSDK_Annot::IsVisible() const
-{
- int nFlags = GetFlags();
- return !((nFlags & ANNOTFLAG_INVISIBLE) || (nFlags & ANNOTFLAG_HIDDEN) || (nFlags & ANNOTFLAG_NOVIEW));
+FX_BOOL CPDFSDK_Annot::IsVisible() const {
+ int nFlags = GetFlags();
+ return !((nFlags & ANNOTFLAG_INVISIBLE) || (nFlags & ANNOTFLAG_HIDDEN) ||
+ (nFlags & ANNOTFLAG_NOVIEW));
}
-CPDF_Action CPDFSDK_Annot::GetAction() const
-{
- return CPDF_Action(m_pAnnot->GetAnnotDict()->GetDict("A"));
+CPDF_Action CPDFSDK_Annot::GetAction() const {
+ return CPDF_Action(m_pAnnot->GetAnnotDict()->GetDict("A"));
}
-void CPDFSDK_Annot::SetAction(const CPDF_Action& action)
-{
- ASSERT(action);
- if ((CPDF_Action&)action != CPDF_Action(m_pAnnot->GetAnnotDict()->GetDict("A")))
- {
- CPDF_Document* pDoc = m_pPageView->GetPDFDocument();
- CPDF_Dictionary* pDict = action.GetDict();
- if (pDict && pDict->GetObjNum() == 0) {
- pDoc->AddIndirectObject(pDict);
- }
- m_pAnnot->GetAnnotDict()->SetAtReference("A", pDoc, pDict->GetObjNum());
+void CPDFSDK_Annot::SetAction(const CPDF_Action& action) {
+ ASSERT(action);
+ if ((CPDF_Action&)action !=
+ CPDF_Action(m_pAnnot->GetAnnotDict()->GetDict("A"))) {
+ CPDF_Document* pDoc = m_pPageView->GetPDFDocument();
+ CPDF_Dictionary* pDict = action.GetDict();
+ if (pDict && pDict->GetObjNum() == 0) {
+ pDoc->AddIndirectObject(pDict);
}
+ m_pAnnot->GetAnnotDict()->SetAtReference("A", pDoc, pDict->GetObjNum());
+ }
}
-void CPDFSDK_Annot::RemoveAction()
-{
- m_pAnnot->GetAnnotDict()->RemoveAt("A");
+void CPDFSDK_Annot::RemoveAction() {
+ m_pAnnot->GetAnnotDict()->RemoveAt("A");
}
-CPDF_AAction CPDFSDK_Annot::GetAAction() const
-{
- return m_pAnnot->GetAnnotDict()->GetDict("AA");
+CPDF_AAction CPDFSDK_Annot::GetAAction() const {
+ return m_pAnnot->GetAnnotDict()->GetDict("AA");
}
-void CPDFSDK_Annot::SetAAction(const CPDF_AAction& aa)
-{
- ASSERT(aa != NULL);
+void CPDFSDK_Annot::SetAAction(const CPDF_AAction& aa) {
+ ASSERT(aa != NULL);
- if ((CPDF_AAction&)aa != m_pAnnot->GetAnnotDict()->GetDict("AA"))
- m_pAnnot->GetAnnotDict()->SetAt("AA", (CPDF_AAction&)aa);
+ if ((CPDF_AAction&)aa != m_pAnnot->GetAnnotDict()->GetDict("AA"))
+ m_pAnnot->GetAnnotDict()->SetAt("AA", (CPDF_AAction&)aa);
}
-void CPDFSDK_Annot::RemoveAAction()
-{
- m_pAnnot->GetAnnotDict()->RemoveAt("AA");
+void CPDFSDK_Annot::RemoveAAction() {
+ m_pAnnot->GetAnnotDict()->RemoveAt("AA");
}
-CPDF_Action CPDFSDK_Annot::GetAAction(CPDF_AAction::AActionType eAAT)
-{
- CPDF_AAction AAction = GetAAction();
+CPDF_Action CPDFSDK_Annot::GetAAction(CPDF_AAction::AActionType eAAT) {
+ CPDF_AAction AAction = GetAAction();
- if (AAction.ActionExist(eAAT))
- return AAction.GetAction(eAAT);
+ if (AAction.ActionExist(eAAT))
+ return AAction.GetAction(eAAT);
- if (eAAT == CPDF_AAction::ButtonUp)
- return GetAction();
+ if (eAAT == CPDF_AAction::ButtonUp)
+ return GetAction();
- return CPDF_Action();
+ return CPDF_Action();
}
-void CPDFSDK_Annot::Annot_OnDraw(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device, CPDF_RenderOptions* pOptions)
-{
-
- m_pAnnot->GetAPForm(m_pPageView->GetPDFPage(), CPDF_Annot::Normal);
- m_pAnnot->DrawAppearance(m_pPageView->GetPDFPage(), pDevice, pUser2Device, CPDF_Annot::Normal, NULL);
+void CPDFSDK_Annot::Annot_OnDraw(CFX_RenderDevice* pDevice,
+ CPDF_Matrix* pUser2Device,
+ CPDF_RenderOptions* pOptions) {
+ m_pAnnot->GetAPForm(m_pPageView->GetPDFPage(), CPDF_Annot::Normal);
+ m_pAnnot->DrawAppearance(m_pPageView->GetPDFPage(), pDevice, pUser2Device,
+ CPDF_Annot::Normal, NULL);
- return ;
+ return;
}
-CPDF_Page* CPDFSDK_Annot::GetPDFPage()
-{
- if(m_pPageView)
- return m_pPageView->GetPDFPage();
- return NULL;
+CPDF_Page* CPDFSDK_Annot::GetPDFPage() {
+ if (m_pPageView)
+ return m_pPageView->GetPDFPage();
+ return NULL;
}
-
diff --git a/fpdfsdk/src/fsdk_baseform.cpp b/fpdfsdk/src/fsdk_baseform.cpp
index ee16212f46..bc041fd05f 100644
--- a/fpdfsdk/src/fsdk_baseform.cpp
+++ b/fpdfsdk/src/fsdk_baseform.cpp
@@ -18,1562 +18,1484 @@
//* CPDFSDK_Widget
//------------------------------------------------------------------------------------
-#define IsFloatZero(f) ((f) < 0.01 && (f) > -0.01)
-#define IsFloatBigger(fa,fb) ((fa) > (fb) && !IsFloatZero((fa) - (fb)))
-#define IsFloatSmaller(fa,fb) ((fa) < (fb) && !IsFloatZero((fa) - (fb)))
-#define IsFloatEqual(fa,fb) IsFloatZero((fa)-(fb))
-
-CPDFSDK_Widget::CPDFSDK_Widget(CPDF_Annot* pAnnot, CPDFSDK_PageView* pPageView, CPDFSDK_InterForm* pInterForm) :
- CPDFSDK_Annot(pAnnot, pPageView),
- m_pInterForm(pInterForm),
- m_nAppAge(0),
- m_nValueAge(0)
-{
- ASSERT(m_pInterForm != NULL);
-}
-
-CPDFSDK_Widget::~CPDFSDK_Widget()
-{
-
-}
-
-FX_BOOL CPDFSDK_Widget::IsWidgetAppearanceValid(CPDF_Annot::AppearanceMode mode)
-{
- CPDF_Dictionary* pAP = m_pAnnot->GetAnnotDict()->GetDict("AP");
- if (pAP == NULL) return FALSE;
-
- // Choose the right sub-ap
- const FX_CHAR* ap_entry = "N";
- if (mode == CPDF_Annot::Down)
- ap_entry = "D";
- else if (mode == CPDF_Annot::Rollover)
- ap_entry = "R";
- if (!pAP->KeyExist(ap_entry))
- ap_entry = "N";
+#define IsFloatZero(f) ((f) < 0.01 && (f) > -0.01)
+#define IsFloatBigger(fa, fb) ((fa) > (fb) && !IsFloatZero((fa) - (fb)))
+#define IsFloatSmaller(fa, fb) ((fa) < (fb) && !IsFloatZero((fa) - (fb)))
+#define IsFloatEqual(fa, fb) IsFloatZero((fa) - (fb))
+
+CPDFSDK_Widget::CPDFSDK_Widget(CPDF_Annot* pAnnot,
+ CPDFSDK_PageView* pPageView,
+ CPDFSDK_InterForm* pInterForm)
+ : CPDFSDK_Annot(pAnnot, pPageView),
+ m_pInterForm(pInterForm),
+ m_nAppAge(0),
+ m_nValueAge(0) {
+ ASSERT(m_pInterForm != NULL);
+}
+
+CPDFSDK_Widget::~CPDFSDK_Widget() {}
+
+FX_BOOL CPDFSDK_Widget::IsWidgetAppearanceValid(
+ CPDF_Annot::AppearanceMode mode) {
+ CPDF_Dictionary* pAP = m_pAnnot->GetAnnotDict()->GetDict("AP");
+ if (pAP == NULL)
+ return FALSE;
- // Get the AP stream or subdirectory
- CPDF_Object* psub = pAP->GetElementValue(ap_entry);
- if (psub == NULL) return FALSE;
+ // Choose the right sub-ap
+ const FX_CHAR* ap_entry = "N";
+ if (mode == CPDF_Annot::Down)
+ ap_entry = "D";
+ else if (mode == CPDF_Annot::Rollover)
+ ap_entry = "R";
+ if (!pAP->KeyExist(ap_entry))
+ ap_entry = "N";
+
+ // Get the AP stream or subdirectory
+ CPDF_Object* psub = pAP->GetElementValue(ap_entry);
+ if (psub == NULL)
+ return FALSE;
- int nFieldType = GetFieldType();
- switch (nFieldType)
- {
+ int nFieldType = GetFieldType();
+ switch (nFieldType) {
case FIELDTYPE_PUSHBUTTON:
case FIELDTYPE_COMBOBOX:
case FIELDTYPE_LISTBOX:
case FIELDTYPE_TEXTFIELD:
case FIELDTYPE_SIGNATURE:
- return psub->GetType() == PDFOBJ_STREAM;
+ return psub->GetType() == PDFOBJ_STREAM;
case FIELDTYPE_CHECKBOX:
case FIELDTYPE_RADIOBUTTON:
- if (psub->GetType() == PDFOBJ_DICTIONARY) {
- CPDF_Dictionary* pSubDict = (CPDF_Dictionary*)psub;
- return pSubDict->GetStream(GetAppState()) != NULL;
- }
- return FALSE;
- }
+ if (psub->GetType() == PDFOBJ_DICTIONARY) {
+ CPDF_Dictionary* pSubDict = (CPDF_Dictionary*)psub;
+ return pSubDict->GetStream(GetAppState()) != NULL;
+ }
+ return FALSE;
+ }
- return TRUE;
+ return TRUE;
}
-int CPDFSDK_Widget::GetFieldType() const
-{
- CPDF_FormField* pField = GetFormField();
- ASSERT(pField != NULL);
+int CPDFSDK_Widget::GetFieldType() const {
+ CPDF_FormField* pField = GetFormField();
+ ASSERT(pField != NULL);
- return pField->GetFieldType();
+ return pField->GetFieldType();
}
-int CPDFSDK_Widget::GetFieldFlags() const
-{
- CPDF_InterForm* pPDFInterForm = m_pInterForm->GetInterForm();
- ASSERT(pPDFInterForm != NULL);
+int CPDFSDK_Widget::GetFieldFlags() const {
+ CPDF_InterForm* pPDFInterForm = m_pInterForm->GetInterForm();
+ ASSERT(pPDFInterForm != NULL);
- CPDF_FormControl* pFormControl = pPDFInterForm->GetControlByDict(m_pAnnot->GetAnnotDict());
- CPDF_FormField* pFormField = pFormControl->GetField();
- return pFormField->GetFieldFlags();
+ CPDF_FormControl* pFormControl =
+ pPDFInterForm->GetControlByDict(m_pAnnot->GetAnnotDict());
+ CPDF_FormField* pFormField = pFormControl->GetField();
+ return pFormField->GetFieldFlags();
}
-CFX_ByteString CPDFSDK_Widget::GetSubType() const
-{
- int nType = GetFieldType();
+CFX_ByteString CPDFSDK_Widget::GetSubType() const {
+ int nType = GetFieldType();
- if (nType == FIELDTYPE_SIGNATURE)
- return BFFT_SIGNATURE;
- return CPDFSDK_Annot::GetSubType();
+ if (nType == FIELDTYPE_SIGNATURE)
+ return BFFT_SIGNATURE;
+ return CPDFSDK_Annot::GetSubType();
}
-CPDF_FormField* CPDFSDK_Widget::GetFormField() const
-{
- ASSERT(m_pInterForm != NULL);
+CPDF_FormField* CPDFSDK_Widget::GetFormField() const {
+ ASSERT(m_pInterForm != NULL);
- CPDF_FormControl* pCtrl = GetFormControl();
- ASSERT(pCtrl != NULL);
+ CPDF_FormControl* pCtrl = GetFormControl();
+ ASSERT(pCtrl != NULL);
- return pCtrl->GetField();
+ return pCtrl->GetField();
}
-CPDF_FormControl* CPDFSDK_Widget::GetFormControl() const
-{
- ASSERT(m_pInterForm != NULL);
+CPDF_FormControl* CPDFSDK_Widget::GetFormControl() const {
+ ASSERT(m_pInterForm != NULL);
- CPDF_InterForm* pPDFInterForm = m_pInterForm->GetInterForm();
- ASSERT(pPDFInterForm != NULL);
+ CPDF_InterForm* pPDFInterForm = m_pInterForm->GetInterForm();
+ ASSERT(pPDFInterForm != NULL);
- return pPDFInterForm->GetControlByDict(GetAnnotDict());
+ return pPDFInterForm->GetControlByDict(GetAnnotDict());
}
-CPDF_FormControl* CPDFSDK_Widget::GetFormControl(CPDF_InterForm* pInterForm, CPDF_Dictionary* pAnnotDict)
-{
- ASSERT(pInterForm != NULL);
- ASSERT(pAnnotDict != NULL);
+CPDF_FormControl* CPDFSDK_Widget::GetFormControl(CPDF_InterForm* pInterForm,
+ CPDF_Dictionary* pAnnotDict) {
+ ASSERT(pInterForm != NULL);
+ ASSERT(pAnnotDict != NULL);
- CPDF_FormControl* pControl = pInterForm->GetControlByDict(pAnnotDict);
+ CPDF_FormControl* pControl = pInterForm->GetControlByDict(pAnnotDict);
- return pControl;
+ return pControl;
}
-int CPDFSDK_Widget::GetRotate() const
-{
- CPDF_FormControl* pCtrl = GetFormControl();
- ASSERT(pCtrl != NULL);
+int CPDFSDK_Widget::GetRotate() const {
+ CPDF_FormControl* pCtrl = GetFormControl();
+ ASSERT(pCtrl != NULL);
- return pCtrl->GetRotation() % 360;
+ return pCtrl->GetRotation() % 360;
}
-FX_BOOL CPDFSDK_Widget::GetFillColor(FX_COLORREF& color) const
-{
- CPDF_FormControl* pFormCtrl = GetFormControl();
- ASSERT(pFormCtrl != NULL);
+FX_BOOL CPDFSDK_Widget::GetFillColor(FX_COLORREF& color) const {
+ CPDF_FormControl* pFormCtrl = GetFormControl();
+ ASSERT(pFormCtrl != NULL);
- int iColorType = 0;
- color = FX_ARGBTOCOLORREF(pFormCtrl->GetBackgroundColor(iColorType));
+ int iColorType = 0;
+ color = FX_ARGBTOCOLORREF(pFormCtrl->GetBackgroundColor(iColorType));
- return iColorType != COLORTYPE_TRANSPARENT;
+ return iColorType != COLORTYPE_TRANSPARENT;
}
-FX_BOOL CPDFSDK_Widget::GetBorderColor(FX_COLORREF& color) const
-{
- CPDF_FormControl* pFormCtrl = GetFormControl();
- ASSERT(pFormCtrl != NULL);
+FX_BOOL CPDFSDK_Widget::GetBorderColor(FX_COLORREF& color) const {
+ CPDF_FormControl* pFormCtrl = GetFormControl();
+ ASSERT(pFormCtrl != NULL);
- int iColorType = 0;
- color = FX_ARGBTOCOLORREF(pFormCtrl->GetBorderColor(iColorType));
+ int iColorType = 0;
+ color = FX_ARGBTOCOLORREF(pFormCtrl->GetBorderColor(iColorType));
- return iColorType != COLORTYPE_TRANSPARENT;
+ return iColorType != COLORTYPE_TRANSPARENT;
}
-FX_BOOL CPDFSDK_Widget::GetTextColor(FX_COLORREF& color) const
-{
- CPDF_FormControl* pFormCtrl = GetFormControl();
- ASSERT(pFormCtrl != NULL);
+FX_BOOL CPDFSDK_Widget::GetTextColor(FX_COLORREF& color) const {
+ CPDF_FormControl* pFormCtrl = GetFormControl();
+ ASSERT(pFormCtrl != NULL);
- CPDF_DefaultAppearance da = pFormCtrl->GetDefaultAppearance();
- if (da.HasColor())
- {
- FX_ARGB argb;
- int iColorType = COLORTYPE_TRANSPARENT;
- da.GetColor(argb, iColorType);
- color = FX_ARGBTOCOLORREF(argb);
+ CPDF_DefaultAppearance da = pFormCtrl->GetDefaultAppearance();
+ if (da.HasColor()) {
+ FX_ARGB argb;
+ int iColorType = COLORTYPE_TRANSPARENT;
+ da.GetColor(argb, iColorType);
+ color = FX_ARGBTOCOLORREF(argb);
- return iColorType != COLORTYPE_TRANSPARENT;
- }
+ return iColorType != COLORTYPE_TRANSPARENT;
+ }
- return FALSE;
+ return FALSE;
}
-FX_FLOAT CPDFSDK_Widget::GetFontSize() const
-{
- CPDF_FormControl* pFormCtrl = GetFormControl();
- ASSERT(pFormCtrl != NULL);
+FX_FLOAT CPDFSDK_Widget::GetFontSize() const {
+ CPDF_FormControl* pFormCtrl = GetFormControl();
+ ASSERT(pFormCtrl != NULL);
- CPDF_DefaultAppearance pDa = pFormCtrl->GetDefaultAppearance();
- CFX_ByteString csFont = "";
- FX_FLOAT fFontSize = 0.0f;
- pDa.GetFont(csFont, fFontSize);
+ CPDF_DefaultAppearance pDa = pFormCtrl->GetDefaultAppearance();
+ CFX_ByteString csFont = "";
+ FX_FLOAT fFontSize = 0.0f;
+ pDa.GetFont(csFont, fFontSize);
- return fFontSize;
+ return fFontSize;
}
-int CPDFSDK_Widget::GetSelectedIndex(int nIndex) const
-{
- CPDF_FormField* pFormField = GetFormField();
- ASSERT(pFormField != NULL);
+int CPDFSDK_Widget::GetSelectedIndex(int nIndex) const {
+ CPDF_FormField* pFormField = GetFormField();
+ ASSERT(pFormField != NULL);
- return pFormField->GetSelectedIndex(nIndex);
+ return pFormField->GetSelectedIndex(nIndex);
}
-CFX_WideString CPDFSDK_Widget::GetValue() const
-{
- CPDF_FormField* pFormField = GetFormField();
- ASSERT(pFormField != NULL);
+CFX_WideString CPDFSDK_Widget::GetValue() const {
+ CPDF_FormField* pFormField = GetFormField();
+ ASSERT(pFormField != NULL);
- return pFormField->GetValue();
+ return pFormField->GetValue();
}
-CFX_WideString CPDFSDK_Widget::GetDefaultValue() const
-{
- CPDF_FormField* pFormField = GetFormField();
- ASSERT(pFormField != NULL);
+CFX_WideString CPDFSDK_Widget::GetDefaultValue() const {
+ CPDF_FormField* pFormField = GetFormField();
+ ASSERT(pFormField != NULL);
- return pFormField->GetDefaultValue();
+ return pFormField->GetDefaultValue();
}
-CFX_WideString CPDFSDK_Widget::GetOptionLabel(int nIndex) const
-{
- CPDF_FormField* pFormField = GetFormField();
- ASSERT(pFormField != NULL);
+CFX_WideString CPDFSDK_Widget::GetOptionLabel(int nIndex) const {
+ CPDF_FormField* pFormField = GetFormField();
+ ASSERT(pFormField != NULL);
- return pFormField->GetOptionLabel(nIndex);
+ return pFormField->GetOptionLabel(nIndex);
}
-int CPDFSDK_Widget::CountOptions() const
-{
- CPDF_FormField* pFormField = GetFormField();
- ASSERT(pFormField != NULL);
+int CPDFSDK_Widget::CountOptions() const {
+ CPDF_FormField* pFormField = GetFormField();
+ ASSERT(pFormField != NULL);
- return pFormField->CountOptions();
+ return pFormField->CountOptions();
}
-FX_BOOL CPDFSDK_Widget::IsOptionSelected(int nIndex) const
-{
- CPDF_FormField* pFormField = GetFormField();
- ASSERT(pFormField != NULL);
+FX_BOOL CPDFSDK_Widget::IsOptionSelected(int nIndex) const {
+ CPDF_FormField* pFormField = GetFormField();
+ ASSERT(pFormField != NULL);
- return pFormField->IsItemSelected(nIndex);
+ return pFormField->IsItemSelected(nIndex);
}
-int CPDFSDK_Widget::GetTopVisibleIndex() const
-{
- CPDF_FormField* pFormField = GetFormField();
- ASSERT(pFormField != NULL);
+int CPDFSDK_Widget::GetTopVisibleIndex() const {
+ CPDF_FormField* pFormField = GetFormField();
+ ASSERT(pFormField != NULL);
- return pFormField->GetTopVisibleIndex();
+ return pFormField->GetTopVisibleIndex();
}
-FX_BOOL CPDFSDK_Widget::IsChecked() const
-{
- CPDF_FormControl* pFormCtrl = GetFormControl();
- ASSERT(pFormCtrl != NULL);
+FX_BOOL CPDFSDK_Widget::IsChecked() const {
+ CPDF_FormControl* pFormCtrl = GetFormControl();
+ ASSERT(pFormCtrl != NULL);
- return pFormCtrl->IsChecked();
+ return pFormCtrl->IsChecked();
}
-int CPDFSDK_Widget::GetAlignment() const
-{
- CPDF_FormControl* pFormCtrl = GetFormControl();
- ASSERT(pFormCtrl != NULL);
+int CPDFSDK_Widget::GetAlignment() const {
+ CPDF_FormControl* pFormCtrl = GetFormControl();
+ ASSERT(pFormCtrl != NULL);
- return pFormCtrl->GetControlAlignment();
+ return pFormCtrl->GetControlAlignment();
}
-int CPDFSDK_Widget::GetMaxLen() const
-{
- CPDF_FormField* pFormField = GetFormField();
- ASSERT(pFormField != NULL);
+int CPDFSDK_Widget::GetMaxLen() const {
+ CPDF_FormField* pFormField = GetFormField();
+ ASSERT(pFormField != NULL);
- return pFormField->GetMaxLen();
+ return pFormField->GetMaxLen();
}
-void CPDFSDK_Widget::SetCheck(FX_BOOL bChecked, FX_BOOL bNotify)
-{
- CPDF_FormControl* pFormCtrl = GetFormControl();
- ASSERT(pFormCtrl != NULL);
+void CPDFSDK_Widget::SetCheck(FX_BOOL bChecked, FX_BOOL bNotify) {
+ CPDF_FormControl* pFormCtrl = GetFormControl();
+ ASSERT(pFormCtrl != NULL);
- CPDF_FormField* pFormField = pFormCtrl->GetField();
- ASSERT(pFormField != NULL);
+ CPDF_FormField* pFormField = pFormCtrl->GetField();
+ ASSERT(pFormField != NULL);
- pFormField->CheckControl(pFormField->GetControlIndex(pFormCtrl), bChecked, bNotify);
+ pFormField->CheckControl(pFormField->GetControlIndex(pFormCtrl), bChecked,
+ bNotify);
}
-void CPDFSDK_Widget::SetValue(const CFX_WideString& sValue, FX_BOOL bNotify)
-{
- CPDF_FormField* pFormField = GetFormField();
- ASSERT(pFormField != NULL);
+void CPDFSDK_Widget::SetValue(const CFX_WideString& sValue, FX_BOOL bNotify) {
+ CPDF_FormField* pFormField = GetFormField();
+ ASSERT(pFormField != NULL);
- pFormField->SetValue(sValue, bNotify);
+ pFormField->SetValue(sValue, bNotify);
}
-void CPDFSDK_Widget::SetDefaultValue(const CFX_WideString& sValue)
-{
-}
-void CPDFSDK_Widget::SetOptionSelection(int index, FX_BOOL bSelected, FX_BOOL bNotify)
-{
- CPDF_FormField* pFormField = GetFormField();
- ASSERT(pFormField != NULL);
+void CPDFSDK_Widget::SetDefaultValue(const CFX_WideString& sValue) {}
+void CPDFSDK_Widget::SetOptionSelection(int index,
+ FX_BOOL bSelected,
+ FX_BOOL bNotify) {
+ CPDF_FormField* pFormField = GetFormField();
+ ASSERT(pFormField != NULL);
- pFormField->SetItemSelection(index, bSelected, bNotify);
+ pFormField->SetItemSelection(index, bSelected, bNotify);
}
-void CPDFSDK_Widget::ClearSelection(FX_BOOL bNotify)
-{
- CPDF_FormField* pFormField = GetFormField();
- ASSERT(pFormField != NULL);
+void CPDFSDK_Widget::ClearSelection(FX_BOOL bNotify) {
+ CPDF_FormField* pFormField = GetFormField();
+ ASSERT(pFormField != NULL);
- pFormField->ClearSelection(bNotify);
+ pFormField->ClearSelection(bNotify);
}
-void CPDFSDK_Widget::SetTopVisibleIndex(int index)
-{
-}
+void CPDFSDK_Widget::SetTopVisibleIndex(int index) {}
-void CPDFSDK_Widget::SetAppModified()
-{
- m_bAppModified = TRUE;
+void CPDFSDK_Widget::SetAppModified() {
+ m_bAppModified = TRUE;
}
-void CPDFSDK_Widget::ClearAppModified()
-{
- m_bAppModified = FALSE;
+void CPDFSDK_Widget::ClearAppModified() {
+ m_bAppModified = FALSE;
}
-FX_BOOL CPDFSDK_Widget::IsAppModified() const
-{
- return m_bAppModified;
+FX_BOOL CPDFSDK_Widget::IsAppModified() const {
+ return m_bAppModified;
}
-void CPDFSDK_Widget::ResetAppearance(const FX_WCHAR* sValue, FX_BOOL bValueChanged)
-{
- SetAppModified();
+void CPDFSDK_Widget::ResetAppearance(const FX_WCHAR* sValue,
+ FX_BOOL bValueChanged) {
+ SetAppModified();
- m_nAppAge++;
- if (m_nAppAge > 999999)
- m_nAppAge = 0;
- if (bValueChanged)
- m_nValueAge++;
+ m_nAppAge++;
+ if (m_nAppAge > 999999)
+ m_nAppAge = 0;
+ if (bValueChanged)
+ m_nValueAge++;
- int nFieldType = GetFieldType();
+ int nFieldType = GetFieldType();
- switch (nFieldType)
- {
+ switch (nFieldType) {
case FIELDTYPE_PUSHBUTTON:
- ResetAppearance_PushButton();
- break;
+ ResetAppearance_PushButton();
+ break;
case FIELDTYPE_CHECKBOX:
- ResetAppearance_CheckBox();
- break;
+ ResetAppearance_CheckBox();
+ break;
case FIELDTYPE_RADIOBUTTON:
- ResetAppearance_RadioButton();
- break;
+ ResetAppearance_RadioButton();
+ break;
case FIELDTYPE_COMBOBOX:
- ResetAppearance_ComboBox(sValue);
- break;
+ ResetAppearance_ComboBox(sValue);
+ break;
case FIELDTYPE_LISTBOX:
- ResetAppearance_ListBox();
- break;
+ ResetAppearance_ListBox();
+ break;
case FIELDTYPE_TEXTFIELD:
- ResetAppearance_TextField(sValue);
- break;
- }
+ ResetAppearance_TextField(sValue);
+ break;
+ }
- ASSERT(m_pAnnot != NULL);
- m_pAnnot->ClearCachedAP();
+ ASSERT(m_pAnnot != NULL);
+ m_pAnnot->ClearCachedAP();
}
-CFX_WideString CPDFSDK_Widget::OnFormat(FX_BOOL& bFormated)
-{
- CPDF_FormField* pFormField = GetFormField();
- ASSERT(pFormField != NULL);
- return m_pInterForm->OnFormat(pFormField, bFormated);
+CFX_WideString CPDFSDK_Widget::OnFormat(FX_BOOL& bFormated) {
+ CPDF_FormField* pFormField = GetFormField();
+ ASSERT(pFormField != NULL);
+ return m_pInterForm->OnFormat(pFormField, bFormated);
}
-void CPDFSDK_Widget::ResetFieldAppearance(FX_BOOL bValueChanged)
-{
- CPDF_FormField* pFormField = GetFormField();
- ASSERT(pFormField != NULL);
+void CPDFSDK_Widget::ResetFieldAppearance(FX_BOOL bValueChanged) {
+ CPDF_FormField* pFormField = GetFormField();
+ ASSERT(pFormField != NULL);
- ASSERT(m_pInterForm != NULL);
+ ASSERT(m_pInterForm != NULL);
- m_pInterForm->ResetFieldAppearance(pFormField, NULL, bValueChanged);
+ m_pInterForm->ResetFieldAppearance(pFormField, NULL, bValueChanged);
}
-void CPDFSDK_Widget::DrawAppearance(CFX_RenderDevice* pDevice, const CPDF_Matrix* pUser2Device,
- CPDF_Annot::AppearanceMode mode, const CPDF_RenderOptions* pOptions)
-{
- int nFieldType = GetFieldType();
+void CPDFSDK_Widget::DrawAppearance(CFX_RenderDevice* pDevice,
+ const CPDF_Matrix* pUser2Device,
+ CPDF_Annot::AppearanceMode mode,
+ const CPDF_RenderOptions* pOptions) {
+ int nFieldType = GetFieldType();
- if ((nFieldType == FIELDTYPE_CHECKBOX || nFieldType == FIELDTYPE_RADIOBUTTON) &&
- mode == CPDF_Annot::Normal &&
- !IsWidgetAppearanceValid(CPDF_Annot::Normal))
- {
- CFX_PathData pathData;
+ if ((nFieldType == FIELDTYPE_CHECKBOX ||
+ nFieldType == FIELDTYPE_RADIOBUTTON) &&
+ mode == CPDF_Annot::Normal &&
+ !IsWidgetAppearanceValid(CPDF_Annot::Normal)) {
+ CFX_PathData pathData;
- CPDF_Rect rcAnnot = GetRect();
+ CPDF_Rect rcAnnot = GetRect();
- pathData.AppendRect(rcAnnot.left, rcAnnot.bottom,
- rcAnnot.right, rcAnnot.top);
+ pathData.AppendRect(rcAnnot.left, rcAnnot.bottom, rcAnnot.right,
+ rcAnnot.top);
- CFX_GraphStateData gsd;
- gsd.m_LineWidth = 0.0f;
+ CFX_GraphStateData gsd;
+ gsd.m_LineWidth = 0.0f;
- pDevice->DrawPath(&pathData, pUser2Device, &gsd, 0, 0xFFAAAAAA, FXFILL_ALTERNATE);
- }
- else
- {
- CPDFSDK_Annot::DrawAppearance(pDevice, pUser2Device, mode, pOptions);
- }
+ pDevice->DrawPath(&pathData, pUser2Device, &gsd, 0, 0xFFAAAAAA,
+ FXFILL_ALTERNATE);
+ } else {
+ CPDFSDK_Annot::DrawAppearance(pDevice, pUser2Device, mode, pOptions);
+ }
}
-void CPDFSDK_Widget::UpdateField()
-{
- CPDF_FormField* pFormField = GetFormField();
- ASSERT(pFormField != NULL);
+void CPDFSDK_Widget::UpdateField() {
+ CPDF_FormField* pFormField = GetFormField();
+ ASSERT(pFormField != NULL);
- ASSERT(m_pInterForm != NULL);
- m_pInterForm->UpdateField(pFormField);
+ ASSERT(m_pInterForm != NULL);
+ m_pInterForm->UpdateField(pFormField);
}
-void CPDFSDK_Widget::DrawShadow(CFX_RenderDevice* pDevice, CPDFSDK_PageView* pPageView)
-{
- ASSERT(m_pInterForm != NULL);
+void CPDFSDK_Widget::DrawShadow(CFX_RenderDevice* pDevice,
+ CPDFSDK_PageView* pPageView) {
+ ASSERT(m_pInterForm != NULL);
- int nFieldType = GetFieldType();
- if (m_pInterForm->IsNeedHighLight(nFieldType))
- {
-
-// if (nFieldType != FIELDTYPE_PUSHBUTTON)
-// {
- CPDF_Rect rc = GetRect();
- FX_COLORREF color = m_pInterForm->GetHighlightColor(nFieldType);
- uint8_t alpha = m_pInterForm->GetHighlightAlpha();
-
- CFX_FloatRect rcDevice;
- ASSERT(m_pInterForm->GetDocument());
- CPDFDoc_Environment* pEnv = m_pInterForm->GetDocument()->GetEnv();
- if(!pEnv)
- return;
- CFX_AffineMatrix page2device;
- pPageView->GetCurrentMatrix(page2device);
- page2device.Transform(((FX_FLOAT)rc.left), ((FX_FLOAT)rc.bottom), rcDevice.left, rcDevice.bottom);
-// pEnv->FFI_PageToDevice(m_pPageView->GetPDFPage(), rc.left, rc.bottom, &rcDevice.left, &rcDevice.bottom);
-// pEnv->FFI_PageToDevice(m_pPageView->GetPDFPage(), rc.right, rc.top, &rcDevice.right, &rcDevice.top);
- page2device.Transform(((FX_FLOAT)rc.right), ((FX_FLOAT)rc.top), rcDevice.right, rcDevice.top);
-
- rcDevice.Normalize();
-
- FX_ARGB argb = ArgbEncode((int)alpha, color);
- FX_RECT rcDev((int)rcDevice.left,(int)rcDevice.top,(int)rcDevice.right,(int)rcDevice.bottom);
- pDevice->FillRect(&rcDev, argb);
- /* }*/
- }
-}
+ int nFieldType = GetFieldType();
+ if (m_pInterForm->IsNeedHighLight(nFieldType)) {
+ // if (nFieldType != FIELDTYPE_PUSHBUTTON)
+ // {
+ CPDF_Rect rc = GetRect();
+ FX_COLORREF color = m_pInterForm->GetHighlightColor(nFieldType);
+ uint8_t alpha = m_pInterForm->GetHighlightAlpha();
-void CPDFSDK_Widget::ResetAppearance_PushButton()
-{
- CPDF_FormControl* pControl = GetFormControl();
- ASSERT(pControl != NULL);
+ CFX_FloatRect rcDevice;
+ ASSERT(m_pInterForm->GetDocument());
+ CPDFDoc_Environment* pEnv = m_pInterForm->GetDocument()->GetEnv();
+ if (!pEnv)
+ return;
+ CFX_AffineMatrix page2device;
+ pPageView->GetCurrentMatrix(page2device);
+ page2device.Transform(((FX_FLOAT)rc.left), ((FX_FLOAT)rc.bottom),
+ rcDevice.left, rcDevice.bottom);
+ // pEnv->FFI_PageToDevice(m_pPageView->GetPDFPage(), rc.left,
+ // rc.bottom, &rcDevice.left, &rcDevice.bottom);
+ // pEnv->FFI_PageToDevice(m_pPageView->GetPDFPage(), rc.right,
+ // rc.top, &rcDevice.right, &rcDevice.top);
+ page2device.Transform(((FX_FLOAT)rc.right), ((FX_FLOAT)rc.top),
+ rcDevice.right, rcDevice.top);
+ rcDevice.Normalize();
+
+ FX_ARGB argb = ArgbEncode((int)alpha, color);
+ FX_RECT rcDev((int)rcDevice.left, (int)rcDevice.top, (int)rcDevice.right,
+ (int)rcDevice.bottom);
+ pDevice->FillRect(&rcDev, argb);
+ /* }*/
+ }
+}
+void CPDFSDK_Widget::ResetAppearance_PushButton() {
+ CPDF_FormControl* pControl = GetFormControl();
+ ASSERT(pControl != NULL);
- CPDF_Rect rcWindow = GetRotatedRect();
+ CPDF_Rect rcWindow = GetRotatedRect();
- int32_t nLayout = 0;
+ int32_t nLayout = 0;
- switch (pControl->GetTextPosition())
- {
+ switch (pControl->GetTextPosition()) {
case TEXTPOS_ICON:
- nLayout = PPBL_ICON;
- break;
+ nLayout = PPBL_ICON;
+ break;
case TEXTPOS_BELOW:
- nLayout = PPBL_ICONTOPLABELBOTTOM;
- break;
+ nLayout = PPBL_ICONTOPLABELBOTTOM;
+ break;
case TEXTPOS_ABOVE:
- nLayout = PPBL_LABELTOPICONBOTTOM;
- break;
+ nLayout = PPBL_LABELTOPICONBOTTOM;
+ break;
case TEXTPOS_RIGHT:
- nLayout = PPBL_ICONLEFTLABELRIGHT;
- break;
+ nLayout = PPBL_ICONLEFTLABELRIGHT;
+ break;
case TEXTPOS_LEFT:
- nLayout = PPBL_LABELLEFTICONRIGHT;
- break;
+ nLayout = PPBL_LABELLEFTICONRIGHT;
+ break;
case TEXTPOS_OVERLAID:
- nLayout = PPBL_LABELOVERICON;
- break;
+ nLayout = PPBL_LABELOVERICON;
+ break;
default:
- nLayout = PPBL_LABEL;
- break;
- }
+ nLayout = PPBL_LABEL;
+ break;
+ }
- CPWL_Color crBackground, crBorder;
+ CPWL_Color crBackground, crBorder;
- int iColorType;
- FX_FLOAT fc[4];
+ int iColorType;
+ FX_FLOAT fc[4];
- pControl->GetOriginalBackgroundColor(iColorType, fc);
- if (iColorType > 0)
- crBackground = CPWL_Color(iColorType, fc[0], fc[1], fc[2], fc[3]);
+ pControl->GetOriginalBackgroundColor(iColorType, fc);
+ if (iColorType > 0)
+ crBackground = CPWL_Color(iColorType, fc[0], fc[1], fc[2], fc[3]);
- pControl->GetOriginalBorderColor(iColorType, fc);
- if (iColorType > 0)
- crBorder = CPWL_Color(iColorType, fc[0], fc[1], fc[2], fc[3]);
+ pControl->GetOriginalBorderColor(iColorType, fc);
+ if (iColorType > 0)
+ crBorder = CPWL_Color(iColorType, fc[0], fc[1], fc[2], fc[3]);
- FX_FLOAT fBorderWidth = (FX_FLOAT)GetBorderWidth();
- int32_t nBorderStyle = 0;
- CPWL_Dash dsBorder(3,0,0);
- CPWL_Color crLeftTop,crRightBottom;
+ FX_FLOAT fBorderWidth = (FX_FLOAT)GetBorderWidth();
+ int32_t nBorderStyle = 0;
+ CPWL_Dash dsBorder(3, 0, 0);
+ CPWL_Color crLeftTop, crRightBottom;
- switch (GetBorderStyle())
- {
+ switch (GetBorderStyle()) {
case BBS_DASH:
- nBorderStyle = PBS_DASH;
- dsBorder = CPWL_Dash(3, 3, 0);
- break;
+ nBorderStyle = PBS_DASH;
+ dsBorder = CPWL_Dash(3, 3, 0);
+ break;
case BBS_BEVELED:
- nBorderStyle = PBS_BEVELED;
- fBorderWidth *= 2;
- crLeftTop = CPWL_Color(COLORTYPE_GRAY,1);
- crRightBottom = CPWL_Utils::DevideColor(crBackground,2);
- break;
+ nBorderStyle = PBS_BEVELED;
+ fBorderWidth *= 2;
+ crLeftTop = CPWL_Color(COLORTYPE_GRAY, 1);
+ crRightBottom = CPWL_Utils::DevideColor(crBackground, 2);
+ break;
case BBS_INSET:
- nBorderStyle = PBS_INSET;
- fBorderWidth *= 2;
- crLeftTop = CPWL_Color(COLORTYPE_GRAY,0.5);
- crRightBottom = CPWL_Color(COLORTYPE_GRAY,0.75);
- break;
+ nBorderStyle = PBS_INSET;
+ fBorderWidth *= 2;
+ crLeftTop = CPWL_Color(COLORTYPE_GRAY, 0.5);
+ crRightBottom = CPWL_Color(COLORTYPE_GRAY, 0.75);
+ break;
case BBS_UNDERLINE:
- nBorderStyle = PBS_UNDERLINED;
- break;
+ nBorderStyle = PBS_UNDERLINED;
+ break;
default:
- nBorderStyle = PBS_SOLID;
+ nBorderStyle = PBS_SOLID;
+ break;
+ }
+
+ CPDF_Rect rcClient = CPWL_Utils::DeflateRect(rcWindow, fBorderWidth);
+
+ CPWL_Color crText(COLORTYPE_GRAY, 0);
+
+ FX_FLOAT fFontSize = 12.0f;
+ CFX_ByteString csNameTag;
+
+ CPDF_DefaultAppearance da = pControl->GetDefaultAppearance();
+ if (da.HasColor()) {
+ da.GetColor(iColorType, fc);
+ crText = CPWL_Color(iColorType, fc[0], fc[1], fc[2], fc[3]);
+ }
+
+ if (da.HasFont())
+ da.GetFont(csNameTag, fFontSize);
+
+ CFX_WideString csWCaption;
+ CFX_WideString csNormalCaption, csRolloverCaption, csDownCaption;
+
+ if (pControl->HasMKEntry("CA")) {
+ csNormalCaption = pControl->GetNormalCaption();
+ }
+ if (pControl->HasMKEntry("RC")) {
+ csRolloverCaption = pControl->GetRolloverCaption();
+ }
+ if (pControl->HasMKEntry("AC")) {
+ csDownCaption = pControl->GetDownCaption();
+ }
+
+ CPDF_Stream* pNormalIcon = NULL;
+ CPDF_Stream* pRolloverIcon = NULL;
+ CPDF_Stream* pDownIcon = NULL;
+
+ if (pControl->HasMKEntry("I")) {
+ pNormalIcon = pControl->GetNormalIcon();
+ }
+ if (pControl->HasMKEntry("RI")) {
+ pRolloverIcon = pControl->GetRolloverIcon();
+ }
+ if (pControl->HasMKEntry("IX")) {
+ pDownIcon = pControl->GetDownIcon();
+ }
+
+ if (pNormalIcon) {
+ if (CPDF_Dictionary* pImageDict = pNormalIcon->GetDict()) {
+ if (pImageDict->GetString("Name").IsEmpty())
+ pImageDict->SetAtString("Name", "ImgA");
+ }
+ }
+
+ if (pRolloverIcon) {
+ if (CPDF_Dictionary* pImageDict = pRolloverIcon->GetDict()) {
+ if (pImageDict->GetString("Name").IsEmpty())
+ pImageDict->SetAtString("Name", "ImgB");
+ }
+ }
+
+ if (pDownIcon) {
+ if (CPDF_Dictionary* pImageDict = pDownIcon->GetDict()) {
+ if (pImageDict->GetString("Name").IsEmpty())
+ pImageDict->SetAtString("Name", "ImgC");
+ }
+ }
+
+ CPDF_IconFit iconFit = pControl->GetIconFit();
+
+ CPDFSDK_Document* pDoc = m_pInterForm->GetDocument();
+ ASSERT(pDoc != NULL);
+ CPDFDoc_Environment* pEnv = pDoc->GetEnv();
+
+ CBA_FontMap FontMap(
+ this,
+ pEnv->GetSysHandler()); //,
+ //ISystemHandle::GetSystemHandler(m_pBaseForm->GetEnv()));
+ FontMap.Initial();
+
+ FontMap.SetAPType("N");
+
+ CFX_ByteString csAP =
+ CPWL_Utils::GetRectFillAppStream(rcWindow, crBackground) +
+ CPWL_Utils::GetBorderAppStream(rcWindow, fBorderWidth, crBorder,
+ crLeftTop, crRightBottom, nBorderStyle,
+ dsBorder) +
+ CPWL_Utils::GetPushButtonAppStream(
+ iconFit.GetFittingBounds() ? rcWindow : rcClient, &FontMap,
+ pNormalIcon, iconFit, csNormalCaption, crText, fFontSize, nLayout);
+
+ WriteAppearance("N", GetRotatedRect(), GetMatrix(), csAP);
+ if (pNormalIcon)
+ AddImageToAppearance("N", pNormalIcon);
+
+ CPDF_FormControl::HighlightingMode eHLM = pControl->GetHighlightingMode();
+ if (eHLM == CPDF_FormControl::Push || eHLM == CPDF_FormControl::Toggle) {
+ if (csRolloverCaption.IsEmpty() && !pRolloverIcon) {
+ csRolloverCaption = csNormalCaption;
+ pRolloverIcon = pNormalIcon;
+ }
+
+ FontMap.SetAPType("R");
+
+ csAP = CPWL_Utils::GetRectFillAppStream(rcWindow, crBackground) +
+ CPWL_Utils::GetBorderAppStream(rcWindow, fBorderWidth, crBorder,
+ crLeftTop, crRightBottom,
+ nBorderStyle, dsBorder) +
+ CPWL_Utils::GetPushButtonAppStream(
+ iconFit.GetFittingBounds() ? rcWindow : rcClient, &FontMap,
+ pRolloverIcon, iconFit, csRolloverCaption, crText, fFontSize,
+ nLayout);
+
+ WriteAppearance("R", GetRotatedRect(), GetMatrix(), csAP);
+ if (pRolloverIcon)
+ AddImageToAppearance("R", pRolloverIcon);
+
+ if (csDownCaption.IsEmpty() && !pDownIcon) {
+ csDownCaption = csNormalCaption;
+ pDownIcon = pNormalIcon;
+ }
+
+ switch (nBorderStyle) {
+ case PBS_BEVELED: {
+ CPWL_Color crTemp = crLeftTop;
+ crLeftTop = crRightBottom;
+ crRightBottom = crTemp;
+ } break;
+ case PBS_INSET:
+ crLeftTop = CPWL_Color(COLORTYPE_GRAY, 0);
+ crRightBottom = CPWL_Color(COLORTYPE_GRAY, 1);
break;
}
- CPDF_Rect rcClient = CPWL_Utils::DeflateRect(rcWindow,fBorderWidth);
-
- CPWL_Color crText(COLORTYPE_GRAY,0);
-
- FX_FLOAT fFontSize = 12.0f;
- CFX_ByteString csNameTag;
-
- CPDF_DefaultAppearance da = pControl->GetDefaultAppearance();
- if (da.HasColor())
- {
- da.GetColor(iColorType, fc);
- crText = CPWL_Color(iColorType, fc[0], fc[1], fc[2], fc[3]);
- }
-
- if (da.HasFont())
- da.GetFont(csNameTag, fFontSize);
+ FontMap.SetAPType("D");
- CFX_WideString csWCaption;
- CFX_WideString csNormalCaption, csRolloverCaption, csDownCaption;
-
- if (pControl->HasMKEntry("CA"))
- {
- csNormalCaption = pControl->GetNormalCaption();
- }
- if (pControl->HasMKEntry("RC"))
- {
- csRolloverCaption = pControl->GetRolloverCaption();
- }
- if (pControl->HasMKEntry("AC"))
- {
- csDownCaption = pControl->GetDownCaption();
- }
-
- CPDF_Stream* pNormalIcon = NULL;
- CPDF_Stream* pRolloverIcon = NULL;
- CPDF_Stream* pDownIcon = NULL;
-
- if (pControl->HasMKEntry("I"))
- {
- pNormalIcon = pControl->GetNormalIcon();
- }
- if (pControl->HasMKEntry("RI"))
- {
- pRolloverIcon = pControl->GetRolloverIcon();
- }
- if (pControl->HasMKEntry("IX"))
- {
- pDownIcon = pControl->GetDownIcon();
- }
-
- if (pNormalIcon)
- {
- if (CPDF_Dictionary* pImageDict = pNormalIcon->GetDict())
- {
- if (pImageDict->GetString("Name").IsEmpty())
- pImageDict->SetAtString("Name", "ImgA");
- }
- }
-
- if (pRolloverIcon)
- {
- if (CPDF_Dictionary* pImageDict = pRolloverIcon->GetDict())
- {
- if (pImageDict->GetString("Name").IsEmpty())
- pImageDict->SetAtString("Name", "ImgB");
- }
- }
+ csAP = CPWL_Utils::GetRectFillAppStream(
+ rcWindow, CPWL_Utils::SubstractColor(crBackground, 0.25f)) +
+ CPWL_Utils::GetBorderAppStream(rcWindow, fBorderWidth, crBorder,
+ crLeftTop, crRightBottom,
+ nBorderStyle, dsBorder) +
+ CPWL_Utils::GetPushButtonAppStream(
+ iconFit.GetFittingBounds() ? rcWindow : rcClient, &FontMap,
+ pDownIcon, iconFit, csDownCaption, crText, fFontSize, nLayout);
+ WriteAppearance("D", GetRotatedRect(), GetMatrix(), csAP);
if (pDownIcon)
- {
- if (CPDF_Dictionary* pImageDict = pDownIcon->GetDict())
- {
- if (pImageDict->GetString("Name").IsEmpty())
- pImageDict->SetAtString("Name", "ImgC");
- }
- }
-
- CPDF_IconFit iconFit = pControl->GetIconFit();
-
- CPDFSDK_Document* pDoc = m_pInterForm->GetDocument();
- ASSERT(pDoc != NULL);
- CPDFDoc_Environment* pEnv = pDoc->GetEnv();
-
- CBA_FontMap FontMap(this,pEnv->GetSysHandler());//, ISystemHandle::GetSystemHandler(m_pBaseForm->GetEnv()));
- FontMap.Initial();
-
- FontMap.SetAPType("N");
-
- CFX_ByteString csAP = CPWL_Utils::GetRectFillAppStream(rcWindow, crBackground) +
- CPWL_Utils::GetBorderAppStream(rcWindow, fBorderWidth, crBorder, crLeftTop, crRightBottom, nBorderStyle, dsBorder) +
- CPWL_Utils::GetPushButtonAppStream(iconFit.GetFittingBounds() ? rcWindow : rcClient, &FontMap, pNormalIcon, iconFit, csNormalCaption, crText, fFontSize, nLayout);
-
- WriteAppearance("N", GetRotatedRect(), GetMatrix(), csAP);
- if (pNormalIcon)
- AddImageToAppearance("N", pNormalIcon);
-
- CPDF_FormControl::HighlightingMode eHLM = pControl->GetHighlightingMode();
- if (eHLM == CPDF_FormControl::Push || eHLM == CPDF_FormControl::Toggle)
- {
- if (csRolloverCaption.IsEmpty() && !pRolloverIcon)
- {
- csRolloverCaption = csNormalCaption;
- pRolloverIcon = pNormalIcon;
- }
-
- FontMap.SetAPType("R");
-
- csAP = CPWL_Utils::GetRectFillAppStream(rcWindow, crBackground) +
- CPWL_Utils::GetBorderAppStream(rcWindow, fBorderWidth, crBorder, crLeftTop, crRightBottom, nBorderStyle, dsBorder) +
- CPWL_Utils::GetPushButtonAppStream(iconFit.GetFittingBounds() ? rcWindow : rcClient, &FontMap, pRolloverIcon, iconFit, csRolloverCaption, crText, fFontSize, nLayout);
-
- WriteAppearance("R", GetRotatedRect(), GetMatrix(), csAP);
- if (pRolloverIcon)
- AddImageToAppearance("R", pRolloverIcon);
-
- if (csDownCaption.IsEmpty() && !pDownIcon)
- {
- csDownCaption = csNormalCaption;
- pDownIcon = pNormalIcon;
- }
-
- switch (nBorderStyle)
- {
- case PBS_BEVELED:
- {
- CPWL_Color crTemp = crLeftTop;
- crLeftTop = crRightBottom;
- crRightBottom = crTemp;
- }
- break;
- case PBS_INSET:
- crLeftTop = CPWL_Color(COLORTYPE_GRAY,0);
- crRightBottom = CPWL_Color(COLORTYPE_GRAY,1);
- break;
- }
-
- FontMap.SetAPType("D");
-
- csAP = CPWL_Utils::GetRectFillAppStream(rcWindow, CPWL_Utils::SubstractColor(crBackground,0.25f)) +
- CPWL_Utils::GetBorderAppStream(rcWindow, fBorderWidth, crBorder, crLeftTop, crRightBottom, nBorderStyle, dsBorder) +
- CPWL_Utils::GetPushButtonAppStream(iconFit.GetFittingBounds() ? rcWindow : rcClient, &FontMap, pDownIcon, iconFit, csDownCaption, crText, fFontSize, nLayout);
-
- WriteAppearance("D", GetRotatedRect(), GetMatrix(), csAP);
- if (pDownIcon)
- AddImageToAppearance("D", pDownIcon);
- }
- else
- {
- RemoveAppearance("D");
- RemoveAppearance("R");
- }
+ AddImageToAppearance("D", pDownIcon);
+ } else {
+ RemoveAppearance("D");
+ RemoveAppearance("R");
+ }
}
-void CPDFSDK_Widget::ResetAppearance_CheckBox()
-{
- CPDF_FormControl* pControl = GetFormControl();
- ASSERT(pControl != NULL);
+void CPDFSDK_Widget::ResetAppearance_CheckBox() {
+ CPDF_FormControl* pControl = GetFormControl();
+ ASSERT(pControl != NULL);
+ CPWL_Color crBackground, crBorder, crText;
+ int iColorType;
+ FX_FLOAT fc[4];
- CPWL_Color crBackground, crBorder, crText;
+ pControl->GetOriginalBackgroundColor(iColorType, fc);
+ if (iColorType > 0)
+ crBackground = CPWL_Color(iColorType, fc[0], fc[1], fc[2], fc[3]);
- int iColorType;
- FX_FLOAT fc[4];
-
- pControl->GetOriginalBackgroundColor(iColorType, fc);
- if (iColorType > 0)
- crBackground = CPWL_Color(iColorType, fc[0], fc[1], fc[2], fc[3]);
+ pControl->GetOriginalBorderColor(iColorType, fc);
+ if (iColorType > 0)
+ crBorder = CPWL_Color(iColorType, fc[0], fc[1], fc[2], fc[3]);
- pControl->GetOriginalBorderColor(iColorType, fc);
- if (iColorType > 0)
- crBorder = CPWL_Color(iColorType, fc[0], fc[1], fc[2], fc[3]);
+ FX_FLOAT fBorderWidth = (FX_FLOAT)GetBorderWidth();
+ int32_t nBorderStyle = 0;
+ CPWL_Dash dsBorder(3, 0, 0);
+ CPWL_Color crLeftTop, crRightBottom;
- FX_FLOAT fBorderWidth = (FX_FLOAT)GetBorderWidth();
- int32_t nBorderStyle = 0;
- CPWL_Dash dsBorder(3,0,0);
- CPWL_Color crLeftTop,crRightBottom;
-
- switch (GetBorderStyle())
- {
+ switch (GetBorderStyle()) {
case BBS_DASH:
- nBorderStyle = PBS_DASH;
- dsBorder = CPWL_Dash(3, 3, 0);
- break;
+ nBorderStyle = PBS_DASH;
+ dsBorder = CPWL_Dash(3, 3, 0);
+ break;
case BBS_BEVELED:
- nBorderStyle = PBS_BEVELED;
- fBorderWidth *= 2;
- crLeftTop = CPWL_Color(COLORTYPE_GRAY,1);
- crRightBottom = CPWL_Utils::DevideColor(crBackground,2);
- break;
+ nBorderStyle = PBS_BEVELED;
+ fBorderWidth *= 2;
+ crLeftTop = CPWL_Color(COLORTYPE_GRAY, 1);
+ crRightBottom = CPWL_Utils::DevideColor(crBackground, 2);
+ break;
case BBS_INSET:
- nBorderStyle = PBS_INSET;
- fBorderWidth *= 2;
- crLeftTop = CPWL_Color(COLORTYPE_GRAY,0.5);
- crRightBottom = CPWL_Color(COLORTYPE_GRAY,0.75);
- break;
+ nBorderStyle = PBS_INSET;
+ fBorderWidth *= 2;
+ crLeftTop = CPWL_Color(COLORTYPE_GRAY, 0.5);
+ crRightBottom = CPWL_Color(COLORTYPE_GRAY, 0.75);
+ break;
case BBS_UNDERLINE:
- nBorderStyle = PBS_UNDERLINED;
- break;
+ nBorderStyle = PBS_UNDERLINED;
+ break;
default:
- nBorderStyle = PBS_SOLID;
- break;
- }
+ nBorderStyle = PBS_SOLID;
+ break;
+ }
- CPDF_Rect rcWindow = GetRotatedRect();
- CPDF_Rect rcClient = CPWL_Utils::DeflateRect(rcWindow,fBorderWidth);
+ CPDF_Rect rcWindow = GetRotatedRect();
+ CPDF_Rect rcClient = CPWL_Utils::DeflateRect(rcWindow, fBorderWidth);
- CPDF_DefaultAppearance da = pControl->GetDefaultAppearance();
- if (da.HasColor())
- {
- da.GetColor(iColorType, fc);
- crText = CPWL_Color(iColorType, fc[0], fc[1], fc[2], fc[3]);
- }
+ CPDF_DefaultAppearance da = pControl->GetDefaultAppearance();
+ if (da.HasColor()) {
+ da.GetColor(iColorType, fc);
+ crText = CPWL_Color(iColorType, fc[0], fc[1], fc[2], fc[3]);
+ }
- int32_t nStyle = 0;
+ int32_t nStyle = 0;
- CFX_WideString csWCaption = pControl->GetNormalCaption();
- if (csWCaption.GetLength() > 0)
- {
- switch (csWCaption[0])
- {
- case L'l':
- nStyle = PCS_CIRCLE;
- break;
- case L'8':
- nStyle = PCS_CROSS;
- break;
- case L'u':
- nStyle = PCS_DIAMOND;
- break;
- case L'n':
- nStyle = PCS_SQUARE;
- break;
- case L'H':
- nStyle = PCS_STAR;
- break;
- default: //L'4'
- nStyle = PCS_CHECK;
- break;
- }
- }
- else
- {
+ CFX_WideString csWCaption = pControl->GetNormalCaption();
+ if (csWCaption.GetLength() > 0) {
+ switch (csWCaption[0]) {
+ case L'l':
+ nStyle = PCS_CIRCLE;
+ break;
+ case L'8':
+ nStyle = PCS_CROSS;
+ break;
+ case L'u':
+ nStyle = PCS_DIAMOND;
+ break;
+ case L'n':
+ nStyle = PCS_SQUARE;
+ break;
+ case L'H':
+ nStyle = PCS_STAR;
+ break;
+ default: // L'4'
nStyle = PCS_CHECK;
+ break;
}
+ } else {
+ nStyle = PCS_CHECK;
+ }
- CFX_ByteString csAP_N_ON = CPWL_Utils::GetRectFillAppStream(rcWindow,crBackground) +
- CPWL_Utils::GetBorderAppStream(rcWindow,fBorderWidth,crBorder,crLeftTop,crRightBottom,nBorderStyle,dsBorder);
+ CFX_ByteString csAP_N_ON =
+ CPWL_Utils::GetRectFillAppStream(rcWindow, crBackground) +
+ CPWL_Utils::GetBorderAppStream(rcWindow, fBorderWidth, crBorder,
+ crLeftTop, crRightBottom, nBorderStyle,
+ dsBorder);
- CFX_ByteString csAP_N_OFF = csAP_N_ON;
+ CFX_ByteString csAP_N_OFF = csAP_N_ON;
- switch (nBorderStyle)
- {
- case PBS_BEVELED:
- {
- CPWL_Color crTemp = crLeftTop;
- crLeftTop = crRightBottom;
- crRightBottom = crTemp;
- }
- break;
+ switch (nBorderStyle) {
+ case PBS_BEVELED: {
+ CPWL_Color crTemp = crLeftTop;
+ crLeftTop = crRightBottom;
+ crRightBottom = crTemp;
+ } break;
case PBS_INSET:
- crLeftTop = CPWL_Color(COLORTYPE_GRAY,0);
- crRightBottom = CPWL_Color(COLORTYPE_GRAY,1);
- break;
- }
+ crLeftTop = CPWL_Color(COLORTYPE_GRAY, 0);
+ crRightBottom = CPWL_Color(COLORTYPE_GRAY, 1);
+ break;
+ }
- CFX_ByteString csAP_D_ON = CPWL_Utils::GetRectFillAppStream(rcWindow,CPWL_Utils::SubstractColor(crBackground,0.25f)) +
- CPWL_Utils::GetBorderAppStream(rcWindow,fBorderWidth,crBorder,crLeftTop,crRightBottom,nBorderStyle,dsBorder);
+ CFX_ByteString csAP_D_ON =
+ CPWL_Utils::GetRectFillAppStream(
+ rcWindow, CPWL_Utils::SubstractColor(crBackground, 0.25f)) +
+ CPWL_Utils::GetBorderAppStream(rcWindow, fBorderWidth, crBorder,
+ crLeftTop, crRightBottom, nBorderStyle,
+ dsBorder);
- CFX_ByteString csAP_D_OFF = csAP_D_ON;
+ CFX_ByteString csAP_D_OFF = csAP_D_ON;
- csAP_N_ON += CPWL_Utils::GetCheckBoxAppStream(rcClient,nStyle,crText);
- csAP_D_ON += CPWL_Utils::GetCheckBoxAppStream(rcClient,nStyle,crText);
+ csAP_N_ON += CPWL_Utils::GetCheckBoxAppStream(rcClient, nStyle, crText);
+ csAP_D_ON += CPWL_Utils::GetCheckBoxAppStream(rcClient, nStyle, crText);
- WriteAppearance("N", GetRotatedRect(), GetMatrix(), csAP_N_ON, pControl->GetCheckedAPState());
- WriteAppearance("N", GetRotatedRect(), GetMatrix(), csAP_N_OFF, "Off");
+ WriteAppearance("N", GetRotatedRect(), GetMatrix(), csAP_N_ON,
+ pControl->GetCheckedAPState());
+ WriteAppearance("N", GetRotatedRect(), GetMatrix(), csAP_N_OFF, "Off");
- WriteAppearance("D", GetRotatedRect(), GetMatrix(), csAP_D_ON, pControl->GetCheckedAPState());
- WriteAppearance("D", GetRotatedRect(), GetMatrix(), csAP_D_OFF, "Off");
+ WriteAppearance("D", GetRotatedRect(), GetMatrix(), csAP_D_ON,
+ pControl->GetCheckedAPState());
+ WriteAppearance("D", GetRotatedRect(), GetMatrix(), csAP_D_OFF, "Off");
- CFX_ByteString csAS = GetAppState();
- if (csAS.IsEmpty())
- SetAppState("Off");
+ CFX_ByteString csAS = GetAppState();
+ if (csAS.IsEmpty())
+ SetAppState("Off");
}
-void CPDFSDK_Widget::ResetAppearance_RadioButton()
-{
- CPDF_FormControl* pControl = GetFormControl();
- ASSERT(pControl != NULL);
+void CPDFSDK_Widget::ResetAppearance_RadioButton() {
+ CPDF_FormControl* pControl = GetFormControl();
+ ASSERT(pControl != NULL);
+ CPWL_Color crBackground, crBorder, crText;
+ int iColorType;
+ FX_FLOAT fc[4];
- CPWL_Color crBackground, crBorder, crText;
-
- int iColorType;
- FX_FLOAT fc[4];
+ pControl->GetOriginalBackgroundColor(iColorType, fc);
+ if (iColorType > 0)
+ crBackground = CPWL_Color(iColorType, fc[0], fc[1], fc[2], fc[3]);
- pControl->GetOriginalBackgroundColor(iColorType, fc);
- if (iColorType > 0)
- crBackground = CPWL_Color(iColorType, fc[0], fc[1], fc[2], fc[3]);
+ pControl->GetOriginalBorderColor(iColorType, fc);
+ if (iColorType > 0)
+ crBorder = CPWL_Color(iColorType, fc[0], fc[1], fc[2], fc[3]);
- pControl->GetOriginalBorderColor(iColorType, fc);
- if (iColorType > 0)
- crBorder = CPWL_Color(iColorType, fc[0], fc[1], fc[2], fc[3]);
+ FX_FLOAT fBorderWidth = (FX_FLOAT)GetBorderWidth();
+ int32_t nBorderStyle = 0;
+ CPWL_Dash dsBorder(3, 0, 0);
+ CPWL_Color crLeftTop, crRightBottom;
- FX_FLOAT fBorderWidth = (FX_FLOAT)GetBorderWidth();
- int32_t nBorderStyle = 0;
- CPWL_Dash dsBorder(3,0,0);
- CPWL_Color crLeftTop,crRightBottom;
-
- switch (GetBorderStyle())
- {
+ switch (GetBorderStyle()) {
case BBS_DASH:
- nBorderStyle = PBS_DASH;
- dsBorder = CPWL_Dash(3, 3, 0);
- break;
+ nBorderStyle = PBS_DASH;
+ dsBorder = CPWL_Dash(3, 3, 0);
+ break;
case BBS_BEVELED:
- nBorderStyle = PBS_BEVELED;
- fBorderWidth *= 2;
- crLeftTop = CPWL_Color(COLORTYPE_GRAY,1);
- crRightBottom = CPWL_Utils::DevideColor(crBackground,2);
- break;
+ nBorderStyle = PBS_BEVELED;
+ fBorderWidth *= 2;
+ crLeftTop = CPWL_Color(COLORTYPE_GRAY, 1);
+ crRightBottom = CPWL_Utils::DevideColor(crBackground, 2);
+ break;
case BBS_INSET:
- nBorderStyle = PBS_INSET;
- fBorderWidth *= 2;
- crLeftTop = CPWL_Color(COLORTYPE_GRAY,0.5);
- crRightBottom = CPWL_Color(COLORTYPE_GRAY,0.75);
- break;
+ nBorderStyle = PBS_INSET;
+ fBorderWidth *= 2;
+ crLeftTop = CPWL_Color(COLORTYPE_GRAY, 0.5);
+ crRightBottom = CPWL_Color(COLORTYPE_GRAY, 0.75);
+ break;
case BBS_UNDERLINE:
- nBorderStyle = PBS_UNDERLINED;
- break;
+ nBorderStyle = PBS_UNDERLINED;
+ break;
default:
- nBorderStyle = PBS_SOLID;
- break;
- }
+ nBorderStyle = PBS_SOLID;
+ break;
+ }
- CPDF_Rect rcWindow = GetRotatedRect();
- CPDF_Rect rcClient = CPWL_Utils::DeflateRect(rcWindow, fBorderWidth);
+ CPDF_Rect rcWindow = GetRotatedRect();
+ CPDF_Rect rcClient = CPWL_Utils::DeflateRect(rcWindow, fBorderWidth);
- CPDF_DefaultAppearance da = pControl->GetDefaultAppearance();
- if (da.HasColor())
- {
- da.GetColor(iColorType, fc);
- crText = CPWL_Color(iColorType, fc[0], fc[1], fc[2], fc[3]);
- }
+ CPDF_DefaultAppearance da = pControl->GetDefaultAppearance();
+ if (da.HasColor()) {
+ da.GetColor(iColorType, fc);
+ crText = CPWL_Color(iColorType, fc[0], fc[1], fc[2], fc[3]);
+ }
- int32_t nStyle = 0;
+ int32_t nStyle = 0;
- CFX_WideString csWCaption = pControl->GetNormalCaption();
- if (csWCaption.GetLength() > 0)
- {
- switch (csWCaption[0])
- {
- default: //L'l':
- nStyle = PCS_CIRCLE;
- break;
- case L'8':
- nStyle = PCS_CROSS;
- break;
- case L'u':
- nStyle = PCS_DIAMOND;
- break;
- case L'n':
- nStyle = PCS_SQUARE;
- break;
- case L'H':
- nStyle = PCS_STAR;
- break;
- case L'4':
- nStyle = PCS_CHECK;
- break;
- }
- }
- else
- {
+ CFX_WideString csWCaption = pControl->GetNormalCaption();
+ if (csWCaption.GetLength() > 0) {
+ switch (csWCaption[0]) {
+ default: // L'l':
nStyle = PCS_CIRCLE;
+ break;
+ case L'8':
+ nStyle = PCS_CROSS;
+ break;
+ case L'u':
+ nStyle = PCS_DIAMOND;
+ break;
+ case L'n':
+ nStyle = PCS_SQUARE;
+ break;
+ case L'H':
+ nStyle = PCS_STAR;
+ break;
+ case L'4':
+ nStyle = PCS_CHECK;
+ break;
}
+ } else {
+ nStyle = PCS_CIRCLE;
+ }
+
+ CFX_ByteString csAP_N_ON;
+
+ CPDF_Rect rcCenter =
+ CPWL_Utils::DeflateRect(CPWL_Utils::GetCenterSquare(rcWindow), 1.0f);
+
+ if (nStyle == PCS_CIRCLE) {
+ if (nBorderStyle == PBS_BEVELED) {
+ crLeftTop = CPWL_Color(COLORTYPE_GRAY, 1);
+ crRightBottom = CPWL_Utils::SubstractColor(crBackground, 0.25f);
+ } else if (nBorderStyle == PBS_INSET) {
+ crLeftTop = CPWL_Color(COLORTYPE_GRAY, 0.5f);
+ crRightBottom = CPWL_Color(COLORTYPE_GRAY, 0.75f);
+ }
+
+ csAP_N_ON = CPWL_Utils::GetCircleFillAppStream(rcCenter, crBackground) +
+ CPWL_Utils::GetCircleBorderAppStream(
+ rcCenter, fBorderWidth, crBorder, crLeftTop, crRightBottom,
+ nBorderStyle, dsBorder);
+ } else {
+ csAP_N_ON = CPWL_Utils::GetRectFillAppStream(rcWindow, crBackground) +
+ CPWL_Utils::GetBorderAppStream(rcWindow, fBorderWidth, crBorder,
+ crLeftTop, crRightBottom,
+ nBorderStyle, dsBorder);
+ }
+
+ CFX_ByteString csAP_N_OFF = csAP_N_ON;
+
+ switch (nBorderStyle) {
+ case PBS_BEVELED: {
+ CPWL_Color crTemp = crLeftTop;
+ crLeftTop = crRightBottom;
+ crRightBottom = crTemp;
+ } break;
+ case PBS_INSET:
+ crLeftTop = CPWL_Color(COLORTYPE_GRAY, 0);
+ crRightBottom = CPWL_Color(COLORTYPE_GRAY, 1);
+ break;
+ }
+
+ CFX_ByteString csAP_D_ON;
+
+ if (nStyle == PCS_CIRCLE) {
+ CPWL_Color crBK = CPWL_Utils::SubstractColor(crBackground, 0.25f);
+ if (nBorderStyle == PBS_BEVELED) {
+ crLeftTop = CPWL_Utils::SubstractColor(crBackground, 0.25f);
+ crRightBottom = CPWL_Color(COLORTYPE_GRAY, 1);
+ crBK = crBackground;
+ } else if (nBorderStyle == PBS_INSET) {
+ crLeftTop = CPWL_Color(COLORTYPE_GRAY, 0);
+ crRightBottom = CPWL_Color(COLORTYPE_GRAY, 1);
+ }
+
+ csAP_D_ON = CPWL_Utils::GetCircleFillAppStream(rcCenter, crBK) +
+ CPWL_Utils::GetCircleBorderAppStream(
+ rcCenter, fBorderWidth, crBorder, crLeftTop, crRightBottom,
+ nBorderStyle, dsBorder);
+ } else {
+ csAP_D_ON = CPWL_Utils::GetRectFillAppStream(
+ rcWindow, CPWL_Utils::SubstractColor(crBackground, 0.25f)) +
+ CPWL_Utils::GetBorderAppStream(rcWindow, fBorderWidth, crBorder,
+ crLeftTop, crRightBottom,
+ nBorderStyle, dsBorder);
+ }
+
+ CFX_ByteString csAP_D_OFF = csAP_D_ON;
+
+ csAP_N_ON += CPWL_Utils::GetRadioButtonAppStream(rcClient, nStyle, crText);
+ csAP_D_ON += CPWL_Utils::GetRadioButtonAppStream(rcClient, nStyle, crText);
+
+ WriteAppearance("N", GetRotatedRect(), GetMatrix(), csAP_N_ON,
+ pControl->GetCheckedAPState());
+ WriteAppearance("N", GetRotatedRect(), GetMatrix(), csAP_N_OFF, "Off");
+
+ WriteAppearance("D", GetRotatedRect(), GetMatrix(), csAP_D_ON,
+ pControl->GetCheckedAPState());
+ WriteAppearance("D", GetRotatedRect(), GetMatrix(), csAP_D_OFF, "Off");
+
+ CFX_ByteString csAS = GetAppState();
+ if (csAS.IsEmpty())
+ SetAppState("Off");
+}
+
+void CPDFSDK_Widget::ResetAppearance_ComboBox(const FX_WCHAR* sValue) {
+ CPDF_FormControl* pControl = GetFormControl();
+ ASSERT(pControl != NULL);
+ CPDF_FormField* pField = pControl->GetField();
+ ASSERT(pField != NULL);
+
+ CFX_ByteTextBuf sBody, sLines;
+
+ CPDF_Rect rcClient = GetClientRect();
+ CPDF_Rect rcButton = rcClient;
+ rcButton.left = rcButton.right - 13;
+ rcButton.Normalize();
+
+ if (IFX_Edit* pEdit = IFX_Edit::NewEdit()) {
+ pEdit->EnableRefresh(FALSE);
- CFX_ByteString csAP_N_ON;
+ CPDFSDK_Document* pDoc = m_pInterForm->GetDocument();
+ ASSERT(pDoc != NULL);
+ CPDFDoc_Environment* pEnv = pDoc->GetEnv();
+ CBA_FontMap FontMap(this, pEnv->GetSysHandler());
+ FontMap.Initial();
+ pEdit->SetFontMap(&FontMap);
- CPDF_Rect rcCenter = CPWL_Utils::DeflateRect(CPWL_Utils::GetCenterSquare(rcWindow), 1.0f);
+ CPDF_Rect rcEdit = rcClient;
+ rcEdit.right = rcButton.left;
+ rcEdit.Normalize();
- if (nStyle == PCS_CIRCLE)
- {
- if (nBorderStyle == PBS_BEVELED)
- {
- crLeftTop = CPWL_Color(COLORTYPE_GRAY, 1);
- crRightBottom = CPWL_Utils::SubstractColor(crBackground,0.25f);
- }
- else if (nBorderStyle == PBS_INSET)
- {
- crLeftTop = CPWL_Color(COLORTYPE_GRAY,0.5f);
- crRightBottom = CPWL_Color(COLORTYPE_GRAY,0.75f);
- }
+ pEdit->SetPlateRect(rcEdit);
+ pEdit->SetAlignmentV(1);
- csAP_N_ON = CPWL_Utils::GetCircleFillAppStream(rcCenter,crBackground) +
- CPWL_Utils::GetCircleBorderAppStream(rcCenter,fBorderWidth,crBorder,crLeftTop,crRightBottom,nBorderStyle,dsBorder);
- }
+ FX_FLOAT fFontSize = GetFontSize();
+ if (IsFloatZero(fFontSize))
+ pEdit->SetAutoFontSize(TRUE);
else
- {
- csAP_N_ON = CPWL_Utils::GetRectFillAppStream(rcWindow,crBackground) +
- CPWL_Utils::GetBorderAppStream(rcWindow,fBorderWidth,crBorder,crLeftTop,crRightBottom,nBorderStyle,dsBorder);
- }
+ pEdit->SetFontSize(fFontSize);
- CFX_ByteString csAP_N_OFF = csAP_N_ON;
+ pEdit->Initialize();
- switch (nBorderStyle)
- {
- case PBS_BEVELED:
- {
- CPWL_Color crTemp = crLeftTop;
- crLeftTop = crRightBottom;
- crRightBottom = crTemp;
- }
- break;
- case PBS_INSET:
- crLeftTop = CPWL_Color(COLORTYPE_GRAY,0);
- crRightBottom = CPWL_Color(COLORTYPE_GRAY,1);
- break;
+ if (sValue)
+ pEdit->SetText(sValue);
+ else {
+ int32_t nCurSel = pField->GetSelectedIndex(0);
+
+ if (nCurSel < 0)
+ pEdit->SetText(pField->GetValue().c_str());
+ else
+ pEdit->SetText(pField->GetOptionLabel(nCurSel).c_str());
}
- CFX_ByteString csAP_D_ON;
+ CPDF_Rect rcContent = pEdit->GetContentRect();
- if (nStyle == PCS_CIRCLE)
- {
- CPWL_Color crBK = CPWL_Utils::SubstractColor(crBackground,0.25f);
- if (nBorderStyle == PBS_BEVELED)
- {
- crLeftTop = CPWL_Utils::SubstractColor(crBackground,0.25f);
- crRightBottom = CPWL_Color(COLORTYPE_GRAY, 1);
- crBK = crBackground;
- }
- else if (nBorderStyle == PBS_INSET)
- {
- crLeftTop = CPWL_Color(COLORTYPE_GRAY,0);
- crRightBottom = CPWL_Color(COLORTYPE_GRAY,1);
- }
+ CFX_ByteString sEdit =
+ CPWL_Utils::GetEditAppStream(pEdit, CPDF_Point(0.0f, 0.0f));
+ if (sEdit.GetLength() > 0) {
+ sBody << "/Tx BMC\n"
+ << "q\n";
+ if (rcContent.Width() > rcEdit.Width() ||
+ rcContent.Height() > rcEdit.Height()) {
+ sBody << rcEdit.left << " " << rcEdit.bottom << " " << rcEdit.Width()
+ << " " << rcEdit.Height() << " re\nW\nn\n";
+ }
- csAP_D_ON = CPWL_Utils::GetCircleFillAppStream(rcCenter,crBK)
- + CPWL_Utils::GetCircleBorderAppStream(rcCenter,fBorderWidth,crBorder,crLeftTop,crRightBottom,nBorderStyle,dsBorder);
- }
- else
- {
- csAP_D_ON = CPWL_Utils::GetRectFillAppStream(rcWindow,CPWL_Utils::SubstractColor(crBackground,0.25f)) +
- CPWL_Utils::GetBorderAppStream(rcWindow,fBorderWidth,crBorder,crLeftTop,crRightBottom,nBorderStyle,dsBorder);
+ CPWL_Color crText = GetTextPWLColor();
+ sBody << "BT\n" << CPWL_Utils::GetColorAppStream(crText) << sEdit
+ << "ET\n"
+ << "Q\nEMC\n";
}
- CFX_ByteString csAP_D_OFF = csAP_D_ON;
+ IFX_Edit::DelEdit(pEdit);
+ }
- csAP_N_ON += CPWL_Utils::GetRadioButtonAppStream(rcClient,nStyle,crText);
- csAP_D_ON += CPWL_Utils::GetRadioButtonAppStream(rcClient,nStyle,crText);
+ sBody << CPWL_Utils::GetDropButtonAppStream(rcButton);
- WriteAppearance("N", GetRotatedRect(), GetMatrix(), csAP_N_ON, pControl->GetCheckedAPState());
- WriteAppearance("N", GetRotatedRect(), GetMatrix(), csAP_N_OFF, "Off");
+ CFX_ByteString sAP = GetBackgroundAppStream() + GetBorderAppStream() +
+ sLines.GetByteString() + sBody.GetByteString();
- WriteAppearance("D", GetRotatedRect(), GetMatrix(), csAP_D_ON, pControl->GetCheckedAPState());
- WriteAppearance("D", GetRotatedRect(), GetMatrix(), csAP_D_OFF, "Off");
-
- CFX_ByteString csAS = GetAppState();
- if (csAS.IsEmpty())
- SetAppState("Off");
+ WriteAppearance("N", GetRotatedRect(), GetMatrix(), sAP);
}
-void CPDFSDK_Widget::ResetAppearance_ComboBox(const FX_WCHAR* sValue)
-{
- CPDF_FormControl* pControl = GetFormControl();
- ASSERT(pControl != NULL);
- CPDF_FormField* pField = pControl->GetField();
- ASSERT(pField != NULL);
+void CPDFSDK_Widget::ResetAppearance_ListBox() {
+ CPDF_FormControl* pControl = GetFormControl();
+ ASSERT(pControl != NULL);
+ CPDF_FormField* pField = pControl->GetField();
+ ASSERT(pField != NULL);
- CFX_ByteTextBuf sBody, sLines;
+ CPDF_Rect rcClient = GetClientRect();
- CPDF_Rect rcClient = GetClientRect();
- CPDF_Rect rcButton = rcClient;
- rcButton.left = rcButton.right - 13;
- rcButton.Normalize();
-
- if (IFX_Edit * pEdit = IFX_Edit::NewEdit())
- {
- pEdit->EnableRefresh(FALSE);
+ CFX_ByteTextBuf sBody, sLines;
- CPDFSDK_Document* pDoc = m_pInterForm->GetDocument();
- ASSERT(pDoc != NULL);
- CPDFDoc_Environment* pEnv = pDoc->GetEnv();
- CBA_FontMap FontMap(this,pEnv->GetSysHandler());
- FontMap.Initial();
- pEdit->SetFontMap(&FontMap);
+ if (IFX_Edit* pEdit = IFX_Edit::NewEdit()) {
+ pEdit->EnableRefresh(FALSE);
- CPDF_Rect rcEdit = rcClient;
- rcEdit.right = rcButton.left;
- rcEdit.Normalize();
+ CPDFSDK_Document* pDoc = m_pInterForm->GetDocument();
+ ASSERT(pDoc != NULL);
+ CPDFDoc_Environment* pEnv = pDoc->GetEnv();
- pEdit->SetPlateRect(rcEdit);
- pEdit->SetAlignmentV(1);
+ CBA_FontMap FontMap(this, pEnv->GetSysHandler());
+ FontMap.Initial();
+ pEdit->SetFontMap(&FontMap);
- FX_FLOAT fFontSize = GetFontSize();
- if (IsFloatZero(fFontSize))
- pEdit->SetAutoFontSize(TRUE);
- else
- pEdit->SetFontSize(fFontSize);
+ pEdit->SetPlateRect(CPDF_Rect(rcClient.left, 0.0f, rcClient.right, 0.0f));
- pEdit->Initialize();
+ FX_FLOAT fFontSize = GetFontSize();
- if (sValue)
- pEdit->SetText(sValue);
- else
- {
- int32_t nCurSel = pField->GetSelectedIndex(0);
+ if (IsFloatZero(fFontSize))
+ pEdit->SetFontSize(12.0f);
+ else
+ pEdit->SetFontSize(fFontSize);
- if (nCurSel < 0)
- pEdit->SetText(pField->GetValue().c_str());
- else
- pEdit->SetText(pField->GetOptionLabel(nCurSel).c_str());
- }
+ pEdit->Initialize();
- CPDF_Rect rcContent = pEdit->GetContentRect();
+ CFX_ByteTextBuf sList;
+ FX_FLOAT fy = rcClient.top;
- CFX_ByteString sEdit = CPWL_Utils::GetEditAppStream(pEdit,CPDF_Point(0.0f,0.0f));
- if (sEdit.GetLength() > 0)
- {
- sBody << "/Tx BMC\n" << "q\n";
- if (rcContent.Width() > rcEdit.Width() ||
- rcContent.Height() > rcEdit.Height())
- {
- sBody << rcEdit.left << " " << rcEdit.bottom << " "
- << rcEdit.Width() << " " << rcEdit.Height() << " re\nW\nn\n";
- }
+ int32_t nTop = pField->GetTopVisibleIndex();
+ int32_t nCount = pField->CountOptions();
+ int32_t nSelCount = pField->CountSelectedItems();
- CPWL_Color crText = GetTextPWLColor();
- sBody << "BT\n" << CPWL_Utils::GetColorAppStream(crText) << sEdit << "ET\n" << "Q\nEMC\n";
+ for (int32_t i = nTop; i < nCount; i++) {
+ FX_BOOL bSelected = FALSE;
+ for (int32_t j = 0; j < nSelCount; j++) {
+ if (pField->GetSelectedIndex(j) == i) {
+ bSelected = TRUE;
+ break;
}
+ }
- IFX_Edit::DelEdit(pEdit);
- }
-
- sBody << CPWL_Utils::GetDropButtonAppStream(rcButton);
-
- CFX_ByteString sAP = GetBackgroundAppStream() + GetBorderAppStream() + sLines.GetByteString() + sBody.GetByteString();
-
- WriteAppearance("N", GetRotatedRect(), GetMatrix(), sAP);
-}
-
-void CPDFSDK_Widget::ResetAppearance_ListBox()
-{
- CPDF_FormControl* pControl = GetFormControl();
- ASSERT(pControl != NULL);
- CPDF_FormField* pField = pControl->GetField();
- ASSERT(pField != NULL);
-
- CPDF_Rect rcClient = GetClientRect();
-
- CFX_ByteTextBuf sBody, sLines;
-
- if (IFX_Edit * pEdit = IFX_Edit::NewEdit())
- {
- pEdit->EnableRefresh(FALSE);
-
- CPDFSDK_Document* pDoc = m_pInterForm->GetDocument();
- ASSERT(pDoc != NULL);
- CPDFDoc_Environment* pEnv = pDoc->GetEnv();
-
- CBA_FontMap FontMap(this,pEnv->GetSysHandler());
- FontMap.Initial();
- pEdit->SetFontMap(&FontMap);
-
- pEdit->SetPlateRect(CPDF_Rect(rcClient.left,0.0f,rcClient.right,0.0f));
-
- FX_FLOAT fFontSize = GetFontSize();
-
- if (IsFloatZero(fFontSize))
- pEdit->SetFontSize(12.0f);
- else
- pEdit->SetFontSize(fFontSize);
-
- pEdit->Initialize();
-
- CFX_ByteTextBuf sList;
- FX_FLOAT fy = rcClient.top;
-
- int32_t nTop = pField->GetTopVisibleIndex();
- int32_t nCount = pField->CountOptions();
- int32_t nSelCount = pField->CountSelectedItems();
-
- for (int32_t i=nTop; i<nCount; i++)
- {
- FX_BOOL bSelected = FALSE;
- for (int32_t j=0; j<nSelCount; j++)
- {
- if (pField->GetSelectedIndex(j) == i)
- {
- bSelected = TRUE;
- break;
- }
- }
-
- pEdit->SetText(pField->GetOptionLabel(i).c_str());
-
- CPDF_Rect rcContent = pEdit->GetContentRect();
- FX_FLOAT fItemHeight = rcContent.Height();
-
- if (bSelected)
- {
- CPDF_Rect rcItem = CPDF_Rect(rcClient.left,fy-fItemHeight,rcClient.right,fy);
- sList << "q\n" << CPWL_Utils::GetColorAppStream(CPWL_Color(COLORTYPE_RGB,0,51.0f/255.0f,113.0f/255.0f),TRUE)
- << rcItem.left << " " << rcItem.bottom << " " << rcItem.Width() << " " << rcItem.Height() << " re f\n" << "Q\n";
-
- sList << "BT\n" << CPWL_Utils::GetColorAppStream(CPWL_Color(COLORTYPE_GRAY,1),TRUE) <<
- CPWL_Utils::GetEditAppStream(pEdit,CPDF_Point(0.0f,fy)) << "ET\n";
- }
- else
- {
- CPWL_Color crText = GetTextPWLColor();
- sList << "BT\n" << CPWL_Utils::GetColorAppStream(crText,TRUE) <<
- CPWL_Utils::GetEditAppStream(pEdit,CPDF_Point(0.0f,fy)) << "ET\n";
- }
-
- fy -= fItemHeight;
- }
+ pEdit->SetText(pField->GetOptionLabel(i).c_str());
+
+ CPDF_Rect rcContent = pEdit->GetContentRect();
+ FX_FLOAT fItemHeight = rcContent.Height();
+
+ if (bSelected) {
+ CPDF_Rect rcItem =
+ CPDF_Rect(rcClient.left, fy - fItemHeight, rcClient.right, fy);
+ sList << "q\n" << CPWL_Utils::GetColorAppStream(
+ CPWL_Color(COLORTYPE_RGB, 0, 51.0f / 255.0f,
+ 113.0f / 255.0f),
+ TRUE)
+ << rcItem.left << " " << rcItem.bottom << " " << rcItem.Width()
+ << " " << rcItem.Height() << " re f\n"
+ << "Q\n";
+
+ sList << "BT\n" << CPWL_Utils::GetColorAppStream(
+ CPWL_Color(COLORTYPE_GRAY, 1), TRUE)
+ << CPWL_Utils::GetEditAppStream(pEdit, CPDF_Point(0.0f, fy))
+ << "ET\n";
+ } else {
+ CPWL_Color crText = GetTextPWLColor();
+ sList << "BT\n" << CPWL_Utils::GetColorAppStream(crText, TRUE)
+ << CPWL_Utils::GetEditAppStream(pEdit, CPDF_Point(0.0f, fy))
+ << "ET\n";
+ }
- if (sList.GetSize() > 0)
- {
- sBody << "/Tx BMC\n" << "q\n" << rcClient.left << " " << rcClient.bottom << " "
- << rcClient.Width() << " " << rcClient.Height() << " re\nW\nn\n";
- sBody << sList << "Q\nEMC\n";
- }
+ fy -= fItemHeight;
+ }
- IFX_Edit::DelEdit(pEdit);
+ if (sList.GetSize() > 0) {
+ sBody << "/Tx BMC\n"
+ << "q\n" << rcClient.left << " " << rcClient.bottom << " "
+ << rcClient.Width() << " " << rcClient.Height() << " re\nW\nn\n";
+ sBody << sList << "Q\nEMC\n";
}
- CFX_ByteString sAP = GetBackgroundAppStream() + GetBorderAppStream() + sLines.GetByteString() + sBody.GetByteString();
+ IFX_Edit::DelEdit(pEdit);
+ }
- WriteAppearance("N", GetRotatedRect(), GetMatrix(), sAP);
+ CFX_ByteString sAP = GetBackgroundAppStream() + GetBorderAppStream() +
+ sLines.GetByteString() + sBody.GetByteString();
+
+ WriteAppearance("N", GetRotatedRect(), GetMatrix(), sAP);
}
-void CPDFSDK_Widget::ResetAppearance_TextField(const FX_WCHAR* sValue)
-{
- CPDF_FormControl* pControl = GetFormControl();
- ASSERT(pControl != NULL);
- CPDF_FormField* pField = pControl->GetField();
- ASSERT(pField != NULL);
+void CPDFSDK_Widget::ResetAppearance_TextField(const FX_WCHAR* sValue) {
+ CPDF_FormControl* pControl = GetFormControl();
+ ASSERT(pControl != NULL);
+ CPDF_FormField* pField = pControl->GetField();
+ ASSERT(pField != NULL);
- CFX_ByteTextBuf sBody, sLines;
+ CFX_ByteTextBuf sBody, sLines;
- if (IFX_Edit * pEdit = IFX_Edit::NewEdit())
- {
- pEdit->EnableRefresh(FALSE);
+ if (IFX_Edit* pEdit = IFX_Edit::NewEdit()) {
+ pEdit->EnableRefresh(FALSE);
- CPDFSDK_Document* pDoc = m_pInterForm->GetDocument();
- ASSERT(pDoc != NULL);
- CPDFDoc_Environment* pEnv = pDoc->GetEnv();
+ CPDFSDK_Document* pDoc = m_pInterForm->GetDocument();
+ ASSERT(pDoc != NULL);
+ CPDFDoc_Environment* pEnv = pDoc->GetEnv();
- CBA_FontMap FontMap(this,pEnv->GetSysHandler());//, ISystemHandle::GetSystemHandler(m_pBaseForm->GetEnv()));
- FontMap.Initial();
- pEdit->SetFontMap(&FontMap);
+ CBA_FontMap FontMap(
+ this,
+ pEnv->GetSysHandler()); //,
+ //ISystemHandle::GetSystemHandler(m_pBaseForm->GetEnv()));
+ FontMap.Initial();
+ pEdit->SetFontMap(&FontMap);
- CPDF_Rect rcClient = GetClientRect();
- pEdit->SetPlateRect(rcClient);
- pEdit->SetAlignmentH(pControl->GetControlAlignment());
+ CPDF_Rect rcClient = GetClientRect();
+ pEdit->SetPlateRect(rcClient);
+ pEdit->SetAlignmentH(pControl->GetControlAlignment());
- FX_DWORD dwFieldFlags = pField->GetFieldFlags();
- FX_BOOL bMultiLine = (dwFieldFlags >> 12) & 1;
+ FX_DWORD dwFieldFlags = pField->GetFieldFlags();
+ FX_BOOL bMultiLine = (dwFieldFlags >> 12) & 1;
- if (bMultiLine)
- {
- pEdit->SetMultiLine(TRUE);
- pEdit->SetAutoReturn(TRUE);
- }
- else
- {
- pEdit->SetAlignmentV(1);
- }
+ if (bMultiLine) {
+ pEdit->SetMultiLine(TRUE);
+ pEdit->SetAutoReturn(TRUE);
+ } else {
+ pEdit->SetAlignmentV(1);
+ }
- FX_WORD subWord = 0;
- if ((dwFieldFlags >> 13) & 1)
- {
- subWord = '*';
- pEdit->SetPasswordChar(subWord);
- }
+ FX_WORD subWord = 0;
+ if ((dwFieldFlags >> 13) & 1) {
+ subWord = '*';
+ pEdit->SetPasswordChar(subWord);
+ }
- int nMaxLen = pField->GetMaxLen();
- FX_BOOL bCharArray = (dwFieldFlags >> 24) & 1;
- FX_FLOAT fFontSize = GetFontSize();
+ int nMaxLen = pField->GetMaxLen();
+ FX_BOOL bCharArray = (dwFieldFlags >> 24) & 1;
+ FX_FLOAT fFontSize = GetFontSize();
- if (nMaxLen > 0)
- {
- if (bCharArray)
- {
- pEdit->SetCharArray(nMaxLen);
+ if (nMaxLen > 0) {
+ if (bCharArray) {
+ pEdit->SetCharArray(nMaxLen);
- if (IsFloatZero(fFontSize))
- {
- fFontSize = CPWL_Edit::GetCharArrayAutoFontSize(FontMap.GetPDFFont(0),rcClient,nMaxLen);
- }
- }
- else
- {
- if (sValue)
- nMaxLen = wcslen((const wchar_t*)sValue);
- pEdit->SetLimitChar(nMaxLen);
- }
+ if (IsFloatZero(fFontSize)) {
+ fFontSize = CPWL_Edit::GetCharArrayAutoFontSize(FontMap.GetPDFFont(0),
+ rcClient, nMaxLen);
}
+ } else {
+ if (sValue)
+ nMaxLen = wcslen((const wchar_t*)sValue);
+ pEdit->SetLimitChar(nMaxLen);
+ }
+ }
- if (IsFloatZero(fFontSize))
- pEdit->SetAutoFontSize(TRUE);
- else
- pEdit->SetFontSize(fFontSize);
+ if (IsFloatZero(fFontSize))
+ pEdit->SetAutoFontSize(TRUE);
+ else
+ pEdit->SetFontSize(fFontSize);
- pEdit->Initialize();
+ pEdit->Initialize();
- if (sValue)
- pEdit->SetText(sValue);
- else
- pEdit->SetText(pField->GetValue().c_str());
+ if (sValue)
+ pEdit->SetText(sValue);
+ else
+ pEdit->SetText(pField->GetValue().c_str());
- CPDF_Rect rcContent = pEdit->GetContentRect();
+ CPDF_Rect rcContent = pEdit->GetContentRect();
- CFX_ByteString sEdit = CPWL_Utils::GetEditAppStream(pEdit,CPDF_Point(0.0f,0.0f),
- NULL,!bCharArray,subWord);
+ CFX_ByteString sEdit = CPWL_Utils::GetEditAppStream(
+ pEdit, CPDF_Point(0.0f, 0.0f), NULL, !bCharArray, subWord);
- if (sEdit.GetLength() > 0)
- {
- sBody << "/Tx BMC\n" << "q\n";
- if (rcContent.Width() > rcClient.Width() ||
- rcContent.Height() > rcClient.Height())
- {
- sBody << rcClient.left << " " << rcClient.bottom << " "
- << rcClient.Width() << " " << rcClient.Height() << " re\nW\nn\n";
+ if (sEdit.GetLength() > 0) {
+ sBody << "/Tx BMC\n"
+ << "q\n";
+ if (rcContent.Width() > rcClient.Width() ||
+ rcContent.Height() > rcClient.Height()) {
+ sBody << rcClient.left << " " << rcClient.bottom << " "
+ << rcClient.Width() << " " << rcClient.Height() << " re\nW\nn\n";
+ }
+ CPWL_Color crText = GetTextPWLColor();
+ sBody << "BT\n" << CPWL_Utils::GetColorAppStream(crText) << sEdit
+ << "ET\n"
+ << "Q\nEMC\n";
+ }
+
+ if (bCharArray) {
+ switch (GetBorderStyle()) {
+ case BBS_SOLID: {
+ CFX_ByteString sColor =
+ CPWL_Utils::GetColorAppStream(GetBorderPWLColor(), FALSE);
+ if (sColor.GetLength() > 0) {
+ sLines << "q\n" << GetBorderWidth() << " w\n"
+ << CPWL_Utils::GetColorAppStream(GetBorderPWLColor(), FALSE)
+ << " 2 J 0 j\n";
+
+ for (int32_t i = 1; i < nMaxLen; i++) {
+ sLines << rcClient.left +
+ ((rcClient.right - rcClient.left) / nMaxLen) * i
+ << " " << rcClient.bottom << " m\n"
+ << rcClient.left +
+ ((rcClient.right - rcClient.left) / nMaxLen) * i
+ << " " << rcClient.top << " l S\n";
}
- CPWL_Color crText = GetTextPWLColor();
- sBody << "BT\n" << CPWL_Utils::GetColorAppStream(crText) << sEdit << "ET\n" << "Q\nEMC\n";
- }
- if (bCharArray)
- {
- switch (GetBorderStyle())
- {
- case BBS_SOLID:
- {
- CFX_ByteString sColor = CPWL_Utils::GetColorAppStream(GetBorderPWLColor(),FALSE);
- if (sColor.GetLength() > 0)
- {
- sLines << "q\n" << GetBorderWidth() << " w\n"
- << CPWL_Utils::GetColorAppStream(GetBorderPWLColor(),FALSE) << " 2 J 0 j\n";
-
- for (int32_t i=1;i<nMaxLen;i++)
- {
- sLines << rcClient.left + ((rcClient.right - rcClient.left)/nMaxLen)*i << " "
- << rcClient.bottom << " m\n"
- << rcClient.left + ((rcClient.right - rcClient.left)/nMaxLen)*i << " "
- << rcClient.top << " l S\n";
- }
-
- sLines << "Q\n";
- }
- }
- break;
- case BBS_DASH:
- {
- CFX_ByteString sColor = CPWL_Utils::GetColorAppStream(GetBorderPWLColor(),FALSE);
- if (sColor.GetLength() > 0)
- {
- CPWL_Dash dsBorder = CPWL_Dash(3, 3, 0);
-
- sLines << "q\n" << GetBorderWidth() << " w\n"
- << CPWL_Utils::GetColorAppStream(GetBorderPWLColor(),FALSE)
- << "[" << dsBorder.nDash << " "
- << dsBorder.nGap << "] "
- << dsBorder.nPhase << " d\n";
-
- for (int32_t i=1;i<nMaxLen;i++)
- {
- sLines << rcClient.left + ((rcClient.right - rcClient.left)/nMaxLen)*i << " "
- << rcClient.bottom << " m\n"
- << rcClient.left + ((rcClient.right - rcClient.left)/nMaxLen)*i << " "
- << rcClient.top << " l S\n";
- }
-
- sLines << "Q\n";
- }
- }
- break;
+ sLines << "Q\n";
+ }
+ } break;
+ case BBS_DASH: {
+ CFX_ByteString sColor =
+ CPWL_Utils::GetColorAppStream(GetBorderPWLColor(), FALSE);
+ if (sColor.GetLength() > 0) {
+ CPWL_Dash dsBorder = CPWL_Dash(3, 3, 0);
+
+ sLines << "q\n" << GetBorderWidth() << " w\n"
+ << CPWL_Utils::GetColorAppStream(GetBorderPWLColor(), FALSE)
+ << "[" << dsBorder.nDash << " " << dsBorder.nGap << "] "
+ << dsBorder.nPhase << " d\n";
+
+ for (int32_t i = 1; i < nMaxLen; i++) {
+ sLines << rcClient.left +
+ ((rcClient.right - rcClient.left) / nMaxLen) * i
+ << " " << rcClient.bottom << " m\n"
+ << rcClient.left +
+ ((rcClient.right - rcClient.left) / nMaxLen) * i
+ << " " << rcClient.top << " l S\n";
}
- }
- IFX_Edit::DelEdit(pEdit);
+ sLines << "Q\n";
+ }
+ } break;
+ }
}
- CFX_ByteString sAP = GetBackgroundAppStream() + GetBorderAppStream() + sLines.GetByteString() + sBody.GetByteString();
- WriteAppearance("N", GetRotatedRect(), GetMatrix(), sAP);
+ IFX_Edit::DelEdit(pEdit);
+ }
+
+ CFX_ByteString sAP = GetBackgroundAppStream() + GetBorderAppStream() +
+ sLines.GetByteString() + sBody.GetByteString();
+ WriteAppearance("N", GetRotatedRect(), GetMatrix(), sAP);
}
-CPDF_Rect CPDFSDK_Widget::GetClientRect() const
-{
- CPDF_Rect rcWindow = GetRotatedRect();
- FX_FLOAT fBorderWidth = (FX_FLOAT)GetBorderWidth();
- switch (GetBorderStyle())
- {
+CPDF_Rect CPDFSDK_Widget::GetClientRect() const {
+ CPDF_Rect rcWindow = GetRotatedRect();
+ FX_FLOAT fBorderWidth = (FX_FLOAT)GetBorderWidth();
+ switch (GetBorderStyle()) {
case BBS_BEVELED:
case BBS_INSET:
- fBorderWidth *= 2.0f;
- break;
- }
+ fBorderWidth *= 2.0f;
+ break;
+ }
- return CPWL_Utils::DeflateRect(rcWindow, fBorderWidth);
-}
-
-CPDF_Rect CPDFSDK_Widget::GetRotatedRect() const
-{
- CPDF_Rect rectAnnot = GetRect();
- FX_FLOAT fWidth = rectAnnot.right - rectAnnot.left;
- FX_FLOAT fHeight = rectAnnot.top - rectAnnot.bottom;
-
- CPDF_FormControl* pControl = GetFormControl();
- CPDF_Rect rcPDFWindow;
- switch(abs(pControl->GetRotation() % 360))
- {
- case 0:
- case 180:
- default:
- rcPDFWindow = CPDF_Rect(0, 0, fWidth, fHeight);
- break;
- case 90:
- case 270:
- rcPDFWindow = CPDF_Rect(0, 0, fHeight, fWidth);
- break;
- }
+ return CPWL_Utils::DeflateRect(rcWindow, fBorderWidth);
+}
- return rcPDFWindow;
+CPDF_Rect CPDFSDK_Widget::GetRotatedRect() const {
+ CPDF_Rect rectAnnot = GetRect();
+ FX_FLOAT fWidth = rectAnnot.right - rectAnnot.left;
+ FX_FLOAT fHeight = rectAnnot.top - rectAnnot.bottom;
+
+ CPDF_FormControl* pControl = GetFormControl();
+ CPDF_Rect rcPDFWindow;
+ switch (abs(pControl->GetRotation() % 360)) {
+ case 0:
+ case 180:
+ default:
+ rcPDFWindow = CPDF_Rect(0, 0, fWidth, fHeight);
+ break;
+ case 90:
+ case 270:
+ rcPDFWindow = CPDF_Rect(0, 0, fHeight, fWidth);
+ break;
+ }
+
+ return rcPDFWindow;
}
-CFX_ByteString CPDFSDK_Widget::GetBackgroundAppStream() const
-{
- CPWL_Color crBackground = GetFillPWLColor();
- if (crBackground.nColorType != COLORTYPE_TRANSPARENT) {
- return CPWL_Utils::GetRectFillAppStream(GetRotatedRect(), crBackground);
- }
- return "";
+CFX_ByteString CPDFSDK_Widget::GetBackgroundAppStream() const {
+ CPWL_Color crBackground = GetFillPWLColor();
+ if (crBackground.nColorType != COLORTYPE_TRANSPARENT) {
+ return CPWL_Utils::GetRectFillAppStream(GetRotatedRect(), crBackground);
+ }
+ return "";
}
-CFX_ByteString CPDFSDK_Widget::GetBorderAppStream() const
-{
- CPDF_Rect rcWindow = GetRotatedRect();
- CPWL_Color crBorder = GetBorderPWLColor();
- CPWL_Color crBackground = GetFillPWLColor();
- CPWL_Color crLeftTop, crRightBottom;
+CFX_ByteString CPDFSDK_Widget::GetBorderAppStream() const {
+ CPDF_Rect rcWindow = GetRotatedRect();
+ CPWL_Color crBorder = GetBorderPWLColor();
+ CPWL_Color crBackground = GetFillPWLColor();
+ CPWL_Color crLeftTop, crRightBottom;
- FX_FLOAT fBorderWidth = (FX_FLOAT)GetBorderWidth();
- int32_t nBorderStyle = 0;
- CPWL_Dash dsBorder(3,0,0);
+ FX_FLOAT fBorderWidth = (FX_FLOAT)GetBorderWidth();
+ int32_t nBorderStyle = 0;
+ CPWL_Dash dsBorder(3, 0, 0);
- switch (GetBorderStyle())
- {
+ switch (GetBorderStyle()) {
case BBS_DASH:
- nBorderStyle = PBS_DASH;
- dsBorder = CPWL_Dash(3, 3, 0);
- break;
+ nBorderStyle = PBS_DASH;
+ dsBorder = CPWL_Dash(3, 3, 0);
+ break;
case BBS_BEVELED:
- nBorderStyle = PBS_BEVELED;
- fBorderWidth *= 2;
- crLeftTop = CPWL_Color(COLORTYPE_GRAY, 1);
- crRightBottom = CPWL_Utils::DevideColor(crBackground, 2);
- break;
+ nBorderStyle = PBS_BEVELED;
+ fBorderWidth *= 2;
+ crLeftTop = CPWL_Color(COLORTYPE_GRAY, 1);
+ crRightBottom = CPWL_Utils::DevideColor(crBackground, 2);
+ break;
case BBS_INSET:
- nBorderStyle = PBS_INSET;
- fBorderWidth *= 2;
- crLeftTop = CPWL_Color(COLORTYPE_GRAY, 0.5);
- crRightBottom = CPWL_Color(COLORTYPE_GRAY, 0.75);
- break;
+ nBorderStyle = PBS_INSET;
+ fBorderWidth *= 2;
+ crLeftTop = CPWL_Color(COLORTYPE_GRAY, 0.5);
+ crRightBottom = CPWL_Color(COLORTYPE_GRAY, 0.75);
+ break;
case BBS_UNDERLINE:
- nBorderStyle = PBS_UNDERLINED;
- break;
+ nBorderStyle = PBS_UNDERLINED;
+ break;
default:
- nBorderStyle = PBS_SOLID;
- break;
- }
+ nBorderStyle = PBS_SOLID;
+ break;
+ }
- return CPWL_Utils::GetBorderAppStream(rcWindow, fBorderWidth, crBorder, crLeftTop,
- crRightBottom, nBorderStyle, dsBorder);
+ return CPWL_Utils::GetBorderAppStream(rcWindow, fBorderWidth, crBorder,
+ crLeftTop, crRightBottom, nBorderStyle,
+ dsBorder);
}
-CPDF_Matrix CPDFSDK_Widget::GetMatrix() const
-{
- CPDF_Matrix mt;
- CPDF_FormControl* pControl = GetFormControl();
- ASSERT(pControl != NULL);
+CPDF_Matrix CPDFSDK_Widget::GetMatrix() const {
+ CPDF_Matrix mt;
+ CPDF_FormControl* pControl = GetFormControl();
+ ASSERT(pControl != NULL);
- CPDF_Rect rcAnnot = GetRect();
- FX_FLOAT fWidth = rcAnnot.right - rcAnnot.left;
- FX_FLOAT fHeight = rcAnnot.top - rcAnnot.bottom;
-
-
-
- switch (abs(pControl->GetRotation() % 360))
- {
- case 0:
- default:
- mt = CPDF_Matrix(1, 0, 0, 1, 0, 0);
- break;
- case 90:
- mt = CPDF_Matrix(0, 1, -1, 0, fWidth, 0);
- break;
- case 180:
- mt = CPDF_Matrix(-1, 0, 0, -1, fWidth, fHeight);
- break;
- case 270:
- mt = CPDF_Matrix(0, -1, 1, 0, 0, fHeight);
- break;
- }
-
- return mt;
-}
+ CPDF_Rect rcAnnot = GetRect();
+ FX_FLOAT fWidth = rcAnnot.right - rcAnnot.left;
+ FX_FLOAT fHeight = rcAnnot.top - rcAnnot.bottom;
-CPWL_Color CPDFSDK_Widget::GetTextPWLColor() const
-{
- CPWL_Color crText = CPWL_Color(COLORTYPE_GRAY, 0);
-
- CPDF_FormControl* pFormCtrl = GetFormControl();
- ASSERT(pFormCtrl != NULL);
-
- CPDF_DefaultAppearance da = pFormCtrl->GetDefaultAppearance();
- if (da.HasColor())
- {
- int32_t iColorType;
- FX_FLOAT fc[4];
- da.GetColor(iColorType, fc);
- crText = CPWL_Color(iColorType, fc[0], fc[1], fc[2], fc[3]);
- }
+ switch (abs(pControl->GetRotation() % 360)) {
+ case 0:
+ default:
+ mt = CPDF_Matrix(1, 0, 0, 1, 0, 0);
+ break;
+ case 90:
+ mt = CPDF_Matrix(0, 1, -1, 0, fWidth, 0);
+ break;
+ case 180:
+ mt = CPDF_Matrix(-1, 0, 0, -1, fWidth, fHeight);
+ break;
+ case 270:
+ mt = CPDF_Matrix(0, -1, 1, 0, 0, fHeight);
+ break;
+ }
+
+ return mt;
+}
+
+CPWL_Color CPDFSDK_Widget::GetTextPWLColor() const {
+ CPWL_Color crText = CPWL_Color(COLORTYPE_GRAY, 0);
+
+ CPDF_FormControl* pFormCtrl = GetFormControl();
+ ASSERT(pFormCtrl != NULL);
+
+ CPDF_DefaultAppearance da = pFormCtrl->GetDefaultAppearance();
+ if (da.HasColor()) {
+ int32_t iColorType;
+ FX_FLOAT fc[4];
+ da.GetColor(iColorType, fc);
+ crText = CPWL_Color(iColorType, fc[0], fc[1], fc[2], fc[3]);
+ }
- return crText;
+ return crText;
}
-CPWL_Color CPDFSDK_Widget::GetBorderPWLColor() const
-{
- CPWL_Color crBorder;
+CPWL_Color CPDFSDK_Widget::GetBorderPWLColor() const {
+ CPWL_Color crBorder;
- CPDF_FormControl* pFormCtrl = GetFormControl();
- ASSERT(pFormCtrl != NULL);
+ CPDF_FormControl* pFormCtrl = GetFormControl();
+ ASSERT(pFormCtrl != NULL);
- int32_t iColorType;
- FX_FLOAT fc[4];
- pFormCtrl->GetOriginalBorderColor(iColorType, fc);
- if (iColorType > 0)
- crBorder = CPWL_Color(iColorType, fc[0], fc[1], fc[2], fc[3]);
+ int32_t iColorType;
+ FX_FLOAT fc[4];
+ pFormCtrl->GetOriginalBorderColor(iColorType, fc);
+ if (iColorType > 0)
+ crBorder = CPWL_Color(iColorType, fc[0], fc[1], fc[2], fc[3]);
- return crBorder;
+ return crBorder;
}
-CPWL_Color CPDFSDK_Widget::GetFillPWLColor() const
-{
- CPWL_Color crFill;
+CPWL_Color CPDFSDK_Widget::GetFillPWLColor() const {
+ CPWL_Color crFill;
- CPDF_FormControl* pFormCtrl = GetFormControl();
- ASSERT(pFormCtrl != NULL);
+ CPDF_FormControl* pFormCtrl = GetFormControl();
+ ASSERT(pFormCtrl != NULL);
- int32_t iColorType;
- FX_FLOAT fc[4];
- pFormCtrl->GetOriginalBackgroundColor(iColorType, fc);
- if (iColorType > 0)
- crFill = CPWL_Color(iColorType, fc[0], fc[1], fc[2], fc[3]);
+ int32_t iColorType;
+ FX_FLOAT fc[4];
+ pFormCtrl->GetOriginalBackgroundColor(iColorType, fc);
+ if (iColorType > 0)
+ crFill = CPWL_Color(iColorType, fc[0], fc[1], fc[2], fc[3]);
- return crFill;
+ return crFill;
}
-void CPDFSDK_Widget::AddImageToAppearance(const CFX_ByteString& sAPType, CPDF_Stream* pImage)
-{
- ASSERT(pImage != NULL);
+void CPDFSDK_Widget::AddImageToAppearance(const CFX_ByteString& sAPType,
+ CPDF_Stream* pImage) {
+ ASSERT(pImage != NULL);
- CPDF_Document* pDoc = m_pPageView->GetPDFDocument();//pDocument->GetDocument();
- ASSERT(pDoc != NULL);
+ CPDF_Document* pDoc =
+ m_pPageView->GetPDFDocument(); // pDocument->GetDocument();
+ ASSERT(pDoc != NULL);
- CPDF_Dictionary* pAPDict = m_pAnnot->GetAnnotDict()->GetDict("AP");
- ASSERT(pAPDict != NULL);
+ CPDF_Dictionary* pAPDict = m_pAnnot->GetAnnotDict()->GetDict("AP");
+ ASSERT(pAPDict != NULL);
- CPDF_Stream* pStream = pAPDict->GetStream(sAPType);
- ASSERT(pStream != NULL);
+ CPDF_Stream* pStream = pAPDict->GetStream(sAPType);
+ ASSERT(pStream != NULL);
- CPDF_Dictionary* pStreamDict = pStream->GetDict();
- ASSERT(pStreamDict != NULL);
+ CPDF_Dictionary* pStreamDict = pStream->GetDict();
+ ASSERT(pStreamDict != NULL);
- CFX_ByteString sImageAlias = "IMG";
+ CFX_ByteString sImageAlias = "IMG";
- if (CPDF_Dictionary* pImageDict = pImage->GetDict())
- {
- sImageAlias = pImageDict->GetString("Name");
- if (sImageAlias.IsEmpty())
- sImageAlias = "IMG";
- }
+ if (CPDF_Dictionary* pImageDict = pImage->GetDict()) {
+ sImageAlias = pImageDict->GetString("Name");
+ if (sImageAlias.IsEmpty())
+ sImageAlias = "IMG";
+ }
- CPDF_Dictionary* pStreamResList = pStreamDict->GetDict("Resources");
- if (!pStreamResList)
- {
- pStreamResList = new CPDF_Dictionary();
- pStreamDict->SetAt("Resources", pStreamResList);
- }
+ CPDF_Dictionary* pStreamResList = pStreamDict->GetDict("Resources");
+ if (!pStreamResList) {
+ pStreamResList = new CPDF_Dictionary();
+ pStreamDict->SetAt("Resources", pStreamResList);
+ }
- if (pStreamResList)
- {
- CPDF_Dictionary* pXObject = new CPDF_Dictionary;
- pXObject->SetAtReference(sImageAlias, pDoc, pImage);
- pStreamResList->SetAt("XObject", pXObject);
- }
+ if (pStreamResList) {
+ CPDF_Dictionary* pXObject = new CPDF_Dictionary;
+ pXObject->SetAtReference(sImageAlias, pDoc, pImage);
+ pStreamResList->SetAt("XObject", pXObject);
+ }
}
-void CPDFSDK_Widget::RemoveAppearance(const CFX_ByteString& sAPType)
-{
- if (CPDF_Dictionary* pAPDict = m_pAnnot->GetAnnotDict()->GetDict("AP"))
- {
- pAPDict->RemoveAt(sAPType);
- }
+void CPDFSDK_Widget::RemoveAppearance(const CFX_ByteString& sAPType) {
+ if (CPDF_Dictionary* pAPDict = m_pAnnot->GetAnnotDict()->GetDict("AP")) {
+ pAPDict->RemoveAt(sAPType);
+ }
}
-FX_BOOL CPDFSDK_Widget::OnAAction(CPDF_AAction::AActionType type, PDFSDK_FieldAction& data, CPDFSDK_PageView* pPageView)
-{
- CPDF_Action action = GetAAction(type);
+FX_BOOL CPDFSDK_Widget::OnAAction(CPDF_AAction::AActionType type,
+ PDFSDK_FieldAction& data,
+ CPDFSDK_PageView* pPageView) {
+ CPDF_Action action = GetAAction(type);
- if (action && action.GetType() != CPDF_Action::Unknown)
- {
- CPDFSDK_Document* pDocument = pPageView->GetSDKDocument();
- ASSERT(pDocument != NULL);
+ if (action && action.GetType() != CPDF_Action::Unknown) {
+ CPDFSDK_Document* pDocument = pPageView->GetSDKDocument();
+ ASSERT(pDocument != NULL);
- CPDFDoc_Environment* pEnv = pDocument->GetEnv();
- ASSERT(pEnv != NULL);
+ CPDFDoc_Environment* pEnv = pDocument->GetEnv();
+ ASSERT(pEnv != NULL);
- CPDFSDK_ActionHandler* pActionHandler = pEnv->GetActionHander();/*(CPDFSDK_ActionHandler*)pApp->GetActionHandler();*/
- ASSERT(pActionHandler != NULL);
+ CPDFSDK_ActionHandler* pActionHandler =
+ pEnv->GetActionHander(); /*(CPDFSDK_ActionHandler*)pApp->GetActionHandler();*/
+ ASSERT(pActionHandler != NULL);
- return pActionHandler->DoAction_Field(action, type, pDocument, GetFormField(), data);
- }
+ return pActionHandler->DoAction_Field(action, type, pDocument,
+ GetFormField(), data);
+ }
- return FALSE;
+ return FALSE;
}
-CPDF_Action CPDFSDK_Widget::GetAAction(CPDF_AAction::AActionType eAAT)
-{
- switch (eAAT)
- {
+CPDF_Action CPDFSDK_Widget::GetAAction(CPDF_AAction::AActionType eAAT) {
+ switch (eAAT) {
case CPDF_AAction::CursorEnter:
case CPDF_AAction::CursorExit:
case CPDF_AAction::ButtonDown:
@@ -1584,1295 +1506,1174 @@ CPDF_Action CPDFSDK_Widget::GetAAction(CPDF_AAction::AActionType eAAT)
case CPDF_AAction::PageClose:
case CPDF_AAction::PageVisible:
case CPDF_AAction::PageInvisible:
- return CPDFSDK_Annot::GetAAction(eAAT);
+ return CPDFSDK_Annot::GetAAction(eAAT);
case CPDF_AAction::KeyStroke:
case CPDF_AAction::Format:
case CPDF_AAction::Validate:
- case CPDF_AAction::Calculate:
- {
- CPDF_FormField* pField = GetFormField();
- if (CPDF_AAction aa = pField->GetAdditionalAction())
- return aa.GetAction(eAAT);
+ case CPDF_AAction::Calculate: {
+ CPDF_FormField* pField = GetFormField();
+ if (CPDF_AAction aa = pField->GetAdditionalAction())
+ return aa.GetAction(eAAT);
- return CPDFSDK_Annot::GetAAction(eAAT);
- }
- default:
- break;
+ return CPDFSDK_Annot::GetAAction(eAAT);
}
+ default:
+ break;
+ }
- return CPDF_Action();
+ return CPDF_Action();
}
+CFX_WideString CPDFSDK_Widget::GetAlternateName() const {
+ CPDF_FormField* pFormField = GetFormField();
+ ASSERT(pFormField != NULL);
-CFX_WideString CPDFSDK_Widget::GetAlternateName() const
-{
- CPDF_FormField* pFormField = GetFormField();
- ASSERT(pFormField != NULL);
-
- return pFormField->GetAlternateName();
+ return pFormField->GetAlternateName();
}
-int32_t CPDFSDK_Widget::GetAppearanceAge() const
-{
- return m_nAppAge;
+int32_t CPDFSDK_Widget::GetAppearanceAge() const {
+ return m_nAppAge;
}
-int32_t CPDFSDK_Widget::GetValueAge() const
-{
- return m_nValueAge;
+int32_t CPDFSDK_Widget::GetValueAge() const {
+ return m_nValueAge;
}
+FX_BOOL CPDFSDK_Widget::HitTest(FX_FLOAT pageX, FX_FLOAT pageY) {
+ CPDF_Annot* pAnnot = GetPDFAnnot();
+ CFX_FloatRect annotRect;
+ pAnnot->GetRect(annotRect);
+ if (annotRect.Contains(pageX, pageY)) {
+ if (!IsVisible())
+ return FALSE;
-FX_BOOL CPDFSDK_Widget::HitTest(FX_FLOAT pageX, FX_FLOAT pageY)
-{
- CPDF_Annot* pAnnot = GetPDFAnnot();
- CFX_FloatRect annotRect;
- pAnnot->GetRect(annotRect);
- if(annotRect.Contains(pageX, pageY))
- {
- if (!IsVisible()) return FALSE;
-
- int nFieldFlags = GetFieldFlags();
- if ((nFieldFlags & FIELDFLAG_READONLY) == FIELDFLAG_READONLY)
- return FALSE;
+ int nFieldFlags = GetFieldFlags();
+ if ((nFieldFlags & FIELDFLAG_READONLY) == FIELDFLAG_READONLY)
+ return FALSE;
- return TRUE;
- }
- return FALSE;
+ return TRUE;
+ }
+ return FALSE;
}
CPDFSDK_InterForm::CPDFSDK_InterForm(CPDFSDK_Document* pDocument)
- :m_pDocument(pDocument),
- m_pInterForm(NULL),
- m_bCalculate(TRUE),
- m_bBusy(FALSE)
-{
- ASSERT(m_pDocument != NULL);
- m_pInterForm = new CPDF_InterForm(m_pDocument->GetDocument(), FALSE);
- ASSERT(m_pInterForm != NULL);
- m_pInterForm->SetFormNotify(this);
+ : m_pDocument(pDocument),
+ m_pInterForm(NULL),
+ m_bCalculate(TRUE),
+ m_bBusy(FALSE) {
+ ASSERT(m_pDocument != NULL);
+ m_pInterForm = new CPDF_InterForm(m_pDocument->GetDocument(), FALSE);
+ ASSERT(m_pInterForm != NULL);
+ m_pInterForm->SetFormNotify(this);
- for(int i=0; i<6; i++)
- m_bNeedHightlight[i] = FALSE;
- m_iHighlightAlpha = 0;
+ for (int i = 0; i < 6; i++)
+ m_bNeedHightlight[i] = FALSE;
+ m_iHighlightAlpha = 0;
}
-CPDFSDK_InterForm::~CPDFSDK_InterForm()
-{
- delete m_pInterForm;
- m_pInterForm = nullptr;
- m_Map.clear();
+CPDFSDK_InterForm::~CPDFSDK_InterForm() {
+ delete m_pInterForm;
+ m_pInterForm = nullptr;
+ m_Map.clear();
}
-FX_BOOL CPDFSDK_InterForm::HighlightWidgets()
-{
- return FALSE;
+FX_BOOL CPDFSDK_InterForm::HighlightWidgets() {
+ return FALSE;
}
-CPDFSDK_Widget* CPDFSDK_InterForm::GetSibling(CPDFSDK_Widget* pWidget, FX_BOOL bNext) const
-{
- nonstd::unique_ptr<CBA_AnnotIterator> pIterator(
- new CBA_AnnotIterator(pWidget->GetPageView(), "Widget", ""));
+CPDFSDK_Widget* CPDFSDK_InterForm::GetSibling(CPDFSDK_Widget* pWidget,
+ FX_BOOL bNext) const {
+ nonstd::unique_ptr<CBA_AnnotIterator> pIterator(
+ new CBA_AnnotIterator(pWidget->GetPageView(), "Widget", ""));
- if (bNext) {
- return (CPDFSDK_Widget*)pIterator->GetNextAnnot(pWidget);
- }
- return (CPDFSDK_Widget*)pIterator->GetPrevAnnot(pWidget);
+ if (bNext) {
+ return (CPDFSDK_Widget*)pIterator->GetNextAnnot(pWidget);
+ }
+ return (CPDFSDK_Widget*)pIterator->GetPrevAnnot(pWidget);
}
-CPDFSDK_Widget* CPDFSDK_InterForm::GetWidget(CPDF_FormControl* pControl) const
-{
- if (!pControl || !m_pInterForm)
- return nullptr;
+CPDFSDK_Widget* CPDFSDK_InterForm::GetWidget(CPDF_FormControl* pControl) const {
+ if (!pControl || !m_pInterForm)
+ return nullptr;
- CPDFSDK_Widget* pWidget = nullptr;
- const auto it = m_Map.find(pControl);
- if (it != m_Map.end())
- pWidget = it->second;
+ CPDFSDK_Widget* pWidget = nullptr;
+ const auto it = m_Map.find(pControl);
+ if (it != m_Map.end())
+ pWidget = it->second;
- if (pWidget)
- return pWidget;
+ if (pWidget)
+ return pWidget;
- CPDF_Dictionary* pControlDict = pControl->GetWidget();
- CPDF_Document* pDocument = m_pDocument->GetDocument();
- CPDFSDK_PageView* pPage = nullptr;
+ CPDF_Dictionary* pControlDict = pControl->GetWidget();
+ CPDF_Document* pDocument = m_pDocument->GetDocument();
+ CPDFSDK_PageView* pPage = nullptr;
- if (CPDF_Dictionary* pPageDict = pControlDict->GetDict("P")) {
- int nPageIndex = pDocument->GetPageIndex(pPageDict->GetObjNum());
- if (nPageIndex >= 0) {
- pPage = m_pDocument->GetPageView(nPageIndex);
- }
+ if (CPDF_Dictionary* pPageDict = pControlDict->GetDict("P")) {
+ int nPageIndex = pDocument->GetPageIndex(pPageDict->GetObjNum());
+ if (nPageIndex >= 0) {
+ pPage = m_pDocument->GetPageView(nPageIndex);
}
+ }
- if (!pPage) {
- int nPageIndex = GetPageIndexByAnnotDict(pDocument, pControlDict);
- if (nPageIndex >= 0) {
- pPage = m_pDocument->GetPageView(nPageIndex);
- }
+ if (!pPage) {
+ int nPageIndex = GetPageIndexByAnnotDict(pDocument, pControlDict);
+ if (nPageIndex >= 0) {
+ pPage = m_pDocument->GetPageView(nPageIndex);
}
+ }
- if (!pPage)
- return nullptr;
- return (CPDFSDK_Widget*)pPage->GetAnnotByDict(pControlDict);
+ if (!pPage)
+ return nullptr;
+ return (CPDFSDK_Widget*)pPage->GetAnnotByDict(pControlDict);
}
-void CPDFSDK_InterForm::GetWidgets(const CFX_WideString& sFieldName, CFX_PtrArray& widgets)
-{
- ASSERT(m_pInterForm != NULL);
+void CPDFSDK_InterForm::GetWidgets(const CFX_WideString& sFieldName,
+ CFX_PtrArray& widgets) {
+ ASSERT(m_pInterForm != NULL);
- for (int i=0,sz=m_pInterForm->CountFields(sFieldName); i<sz; i++)
- {
- CPDF_FormField* pFormField = m_pInterForm->GetField(i, sFieldName);
- ASSERT(pFormField != NULL);
+ for (int i = 0, sz = m_pInterForm->CountFields(sFieldName); i < sz; i++) {
+ CPDF_FormField* pFormField = m_pInterForm->GetField(i, sFieldName);
+ ASSERT(pFormField != NULL);
- GetWidgets(pFormField, widgets);
- }
+ GetWidgets(pFormField, widgets);
+ }
}
-void CPDFSDK_InterForm::GetWidgets(CPDF_FormField* pField, CFX_PtrArray& widgets)
-{
- ASSERT(pField != NULL);
-
- for (int i=0,isz=pField->CountControls(); i<isz; i++)
- {
- CPDF_FormControl* pFormCtrl = pField->GetControl(i);
- ASSERT(pFormCtrl != NULL);
+void CPDFSDK_InterForm::GetWidgets(CPDF_FormField* pField,
+ CFX_PtrArray& widgets) {
+ ASSERT(pField != NULL);
- CPDFSDK_Widget* pWidget = GetWidget(pFormCtrl);
-
- if (pWidget)
- widgets.Add(pWidget);
- }
-}
+ for (int i = 0, isz = pField->CountControls(); i < isz; i++) {
+ CPDF_FormControl* pFormCtrl = pField->GetControl(i);
+ ASSERT(pFormCtrl != NULL);
-int CPDFSDK_InterForm::GetPageIndexByAnnotDict(CPDF_Document* pDocument, CPDF_Dictionary* pAnnotDict) const
-{
- ASSERT(pDocument != NULL);
- ASSERT(pAnnotDict != NULL);
+ CPDFSDK_Widget* pWidget = GetWidget(pFormCtrl);
- for (int i=0,sz=pDocument->GetPageCount(); i<sz; i++)
- {
- if (CPDF_Dictionary* pPageDict = pDocument->GetPage(i))
- {
- if (CPDF_Array* pAnnots = pPageDict->GetArray("Annots"))
- {
- for (int j=0,jsz=pAnnots->GetCount(); j<jsz; j++)
- {
- CPDF_Object* pDict = pAnnots->GetElementValue(j);
- if (pAnnotDict == pDict)
- {
- return i;
- }
- }
- }
+ if (pWidget)
+ widgets.Add(pWidget);
+ }
+}
+
+int CPDFSDK_InterForm::GetPageIndexByAnnotDict(
+ CPDF_Document* pDocument,
+ CPDF_Dictionary* pAnnotDict) const {
+ ASSERT(pDocument != NULL);
+ ASSERT(pAnnotDict != NULL);
+
+ for (int i = 0, sz = pDocument->GetPageCount(); i < sz; i++) {
+ if (CPDF_Dictionary* pPageDict = pDocument->GetPage(i)) {
+ if (CPDF_Array* pAnnots = pPageDict->GetArray("Annots")) {
+ for (int j = 0, jsz = pAnnots->GetCount(); j < jsz; j++) {
+ CPDF_Object* pDict = pAnnots->GetElementValue(j);
+ if (pAnnotDict == pDict) {
+ return i;
+ }
}
+ }
}
+ }
- return -1;
+ return -1;
}
-void CPDFSDK_InterForm::AddMap(CPDF_FormControl* pControl, CPDFSDK_Widget* pWidget)
-{
- m_Map[pControl] = pWidget;
+void CPDFSDK_InterForm::AddMap(CPDF_FormControl* pControl,
+ CPDFSDK_Widget* pWidget) {
+ m_Map[pControl] = pWidget;
}
-void CPDFSDK_InterForm::RemoveMap(CPDF_FormControl* pControl)
-{
- m_Map.erase(pControl);
+void CPDFSDK_InterForm::RemoveMap(CPDF_FormControl* pControl) {
+ m_Map.erase(pControl);
}
-void CPDFSDK_InterForm::EnableCalculate(FX_BOOL bEnabled)
-{
- m_bCalculate = bEnabled;
+void CPDFSDK_InterForm::EnableCalculate(FX_BOOL bEnabled) {
+ m_bCalculate = bEnabled;
}
-FX_BOOL CPDFSDK_InterForm::IsCalculateEnabled() const
-{
- return m_bCalculate;
+FX_BOOL CPDFSDK_InterForm::IsCalculateEnabled() const {
+ return m_bCalculate;
}
#ifdef _WIN32
-CPDF_Stream* CPDFSDK_InterForm::LoadImageFromFile(const CFX_WideString& sFile)
-{
- ASSERT(m_pDocument != NULL);
- CPDF_Document* pDocument = m_pDocument->GetDocument();
- ASSERT(pDocument != NULL);
-
- CPDF_Stream* pRetStream = NULL;
-
- if (CFX_DIBitmap* pBmp = CFX_WindowsDIB::LoadFromFile(sFile.c_str()))
- {
- int nWidth = pBmp->GetWidth();
- int nHeight = pBmp->GetHeight();
+CPDF_Stream* CPDFSDK_InterForm::LoadImageFromFile(const CFX_WideString& sFile) {
+ ASSERT(m_pDocument != NULL);
+ CPDF_Document* pDocument = m_pDocument->GetDocument();
+ ASSERT(pDocument != NULL);
+
+ CPDF_Stream* pRetStream = NULL;
+
+ if (CFX_DIBitmap* pBmp = CFX_WindowsDIB::LoadFromFile(sFile.c_str())) {
+ int nWidth = pBmp->GetWidth();
+ int nHeight = pBmp->GetHeight();
+
+ CPDF_Image Image(pDocument);
+ Image.SetImage(pBmp, FALSE);
+ CPDF_Stream* pImageStream = Image.GetStream();
+ if (pImageStream) {
+ if (pImageStream->GetObjNum() == 0)
+ pDocument->AddIndirectObject(pImageStream);
+
+ CPDF_Dictionary* pStreamDict = new CPDF_Dictionary();
+ pStreamDict->SetAtName("Subtype", "Form");
+ pStreamDict->SetAtName("Name", "IMG");
+ CPDF_Array* pMatrix = new CPDF_Array();
+ pStreamDict->SetAt("Matrix", pMatrix);
+ pMatrix->AddInteger(1);
+ pMatrix->AddInteger(0);
+ pMatrix->AddInteger(0);
+ pMatrix->AddInteger(1);
+ pMatrix->AddInteger(-nWidth / 2);
+ pMatrix->AddInteger(-nHeight / 2);
+ CPDF_Dictionary* pResource = new CPDF_Dictionary();
+ pStreamDict->SetAt("Resources", pResource);
+ CPDF_Dictionary* pXObject = new CPDF_Dictionary();
+ pResource->SetAt("XObject", pXObject);
+ pXObject->SetAtReference("Img", pDocument, pImageStream);
+ CPDF_Array* pProcSet = new CPDF_Array();
+ pResource->SetAt("ProcSet", pProcSet);
+ pProcSet->AddName("PDF");
+ pProcSet->AddName("ImageC");
+ pStreamDict->SetAtName("Type", "XObject");
+ CPDF_Array* pBBox = new CPDF_Array();
+ pStreamDict->SetAt("BBox", pBBox);
+ pBBox->AddInteger(0);
+ pBBox->AddInteger(0);
+ pBBox->AddInteger(nWidth);
+ pBBox->AddInteger(nHeight);
+ pStreamDict->SetAtInteger("FormType", 1);
+
+ pRetStream = new CPDF_Stream(NULL, 0, NULL);
+ CFX_ByteString csStream;
+ csStream.Format("q\n%d 0 0 %d 0 0 cm\n/Img Do\nQ", nWidth, nHeight);
+ pRetStream->InitStream((uint8_t*)csStream.c_str(), csStream.GetLength(),
+ pStreamDict);
+ pDocument->AddIndirectObject(pRetStream);
+ }
+
+ delete pBmp;
+ }
+
+ return pRetStream;
+}
+#endif
- CPDF_Image Image(pDocument);
- Image.SetImage(pBmp, FALSE);
- CPDF_Stream* pImageStream = Image.GetStream();
- if (pImageStream)
- {
- if (pImageStream->GetObjNum() == 0)
- pDocument->AddIndirectObject(pImageStream);
-
- CPDF_Dictionary* pStreamDict = new CPDF_Dictionary();
- pStreamDict->SetAtName("Subtype", "Form");
- pStreamDict->SetAtName("Name", "IMG");
- CPDF_Array* pMatrix = new CPDF_Array();
- pStreamDict->SetAt("Matrix", pMatrix);
- pMatrix->AddInteger(1);
- pMatrix->AddInteger(0);
- pMatrix->AddInteger(0);
- pMatrix->AddInteger(1);
- pMatrix->AddInteger(-nWidth / 2);
- pMatrix->AddInteger(-nHeight / 2);
- CPDF_Dictionary* pResource = new CPDF_Dictionary();
- pStreamDict->SetAt("Resources", pResource);
- CPDF_Dictionary* pXObject = new CPDF_Dictionary();
- pResource->SetAt("XObject", pXObject);
- pXObject->SetAtReference("Img", pDocument, pImageStream);
- CPDF_Array* pProcSet = new CPDF_Array();
- pResource->SetAt("ProcSet", pProcSet);
- pProcSet->AddName("PDF");
- pProcSet->AddName("ImageC");
- pStreamDict->SetAtName("Type", "XObject");
- CPDF_Array* pBBox = new CPDF_Array();
- pStreamDict->SetAt("BBox", pBBox);
- pBBox->AddInteger(0);
- pBBox->AddInteger(0);
- pBBox->AddInteger(nWidth);
- pBBox->AddInteger(nHeight);
- pStreamDict->SetAtInteger("FormType", 1);
-
- pRetStream = new CPDF_Stream(NULL, 0, NULL);
- CFX_ByteString csStream;
- csStream.Format("q\n%d 0 0 %d 0 0 cm\n/Img Do\nQ", nWidth, nHeight);
- pRetStream->InitStream((uint8_t*)csStream.c_str(), csStream.GetLength(), pStreamDict);
- pDocument->AddIndirectObject(pRetStream);
- }
+void CPDFSDK_InterForm::OnCalculate(CPDF_FormField* pFormField) {
+ ASSERT(m_pDocument != NULL);
+ CPDFDoc_Environment* pEnv = m_pDocument->GetEnv();
+ ASSERT(pEnv);
+ if (!pEnv->IsJSInitiated())
+ return;
- delete pBmp;
- }
+ if (m_bBusy)
+ return;
- return pRetStream;
-}
-#endif
+ m_bBusy = TRUE;
-void CPDFSDK_InterForm::OnCalculate(CPDF_FormField* pFormField)
-{
- ASSERT(m_pDocument != NULL);
- CPDFDoc_Environment* pEnv = m_pDocument->GetEnv();
- ASSERT(pEnv);
- if(!pEnv->IsJSInitiated())
- return;
+ if (IsCalculateEnabled()) {
+ IFXJS_Runtime* pRuntime = m_pDocument->GetJsRuntime();
+ ASSERT(pRuntime != NULL);
- if (m_bBusy) return;
+ pRuntime->SetReaderDocument(m_pDocument);
- m_bBusy = TRUE;
+ int nSize = m_pInterForm->CountFieldsInCalculationOrder();
+ for (int i = 0; i < nSize; i++) {
+ if (CPDF_FormField* pField =
+ m_pInterForm->GetFieldInCalculationOrder(i)) {
+ // ASSERT(pField != NULL);
+ int nType = pField->GetFieldType();
+ if (nType == FIELDTYPE_COMBOBOX || nType == FIELDTYPE_TEXTFIELD) {
+ CPDF_AAction aAction = pField->GetAdditionalAction();
+ if (aAction && aAction.ActionExist(CPDF_AAction::Calculate)) {
+ CPDF_Action action = aAction.GetAction(CPDF_AAction::Calculate);
+ if (action) {
+ CFX_WideString csJS = action.GetJavaScript();
+ if (!csJS.IsEmpty()) {
+ IFXJS_Context* pContext = pRuntime->NewContext();
+ ASSERT(pContext != NULL);
- if (IsCalculateEnabled())
- {
- IFXJS_Runtime* pRuntime = m_pDocument->GetJsRuntime();
- ASSERT(pRuntime != NULL);
+ CFX_WideString sOldValue = pField->GetValue();
+ CFX_WideString sValue = sOldValue;
+ FX_BOOL bRC = TRUE;
+ pContext->OnField_Calculate(pFormField, pField, sValue, bRC);
- pRuntime->SetReaderDocument(m_pDocument);
+ CFX_WideString sInfo;
+ FX_BOOL bRet = pContext->RunScript(csJS, sInfo);
+ pRuntime->ReleaseContext(pContext);
- int nSize = m_pInterForm->CountFieldsInCalculationOrder();
- for (int i=0; i<nSize; i++)
- {
- if(CPDF_FormField* pField = m_pInterForm->GetFieldInCalculationOrder(i))
- {
-// ASSERT(pField != NULL);
- int nType = pField->GetFieldType();
- if (nType == FIELDTYPE_COMBOBOX || nType == FIELDTYPE_TEXTFIELD)
- {
- CPDF_AAction aAction = pField->GetAdditionalAction();
- if (aAction && aAction.ActionExist(CPDF_AAction::Calculate))
- {
- CPDF_Action action = aAction.GetAction(CPDF_AAction::Calculate);
- if (action)
- {
- CFX_WideString csJS = action.GetJavaScript();
- if (!csJS.IsEmpty())
- {
- IFXJS_Context* pContext = pRuntime->NewContext();
- ASSERT(pContext != NULL);
-
- CFX_WideString sOldValue = pField->GetValue();
- CFX_WideString sValue = sOldValue;
- FX_BOOL bRC = TRUE;
- pContext->OnField_Calculate(pFormField, pField, sValue, bRC);
-
- CFX_WideString sInfo;
- FX_BOOL bRet = pContext->RunScript(csJS, sInfo);
- pRuntime->ReleaseContext(pContext);
-
- if (bRet)
- {
- if (bRC)
- {
- if (sValue.Compare(sOldValue) != 0)
- pField->SetValue(sValue, TRUE);
- }
- }
- }
- }
- }
+ if (bRet) {
+ if (bRC) {
+ if (sValue.Compare(sOldValue) != 0)
+ pField->SetValue(sValue, TRUE);
+ }
}
+ }
}
+ }
}
-
-
+ }
}
+ }
- m_bBusy = FALSE;
+ m_bBusy = FALSE;
}
-CFX_WideString CPDFSDK_InterForm::OnFormat(CPDF_FormField* pFormField, FX_BOOL& bFormated)
-{
- ASSERT(m_pDocument != NULL);
- ASSERT(pFormField != NULL);
+CFX_WideString CPDFSDK_InterForm::OnFormat(CPDF_FormField* pFormField,
+ FX_BOOL& bFormated) {
+ ASSERT(m_pDocument != NULL);
+ ASSERT(pFormField != NULL);
- CFX_WideString sValue = pFormField->GetValue();
- CPDFDoc_Environment* pEnv = m_pDocument->GetEnv();
- ASSERT(pEnv);
- if(!pEnv->IsJSInitiated())
- {
- bFormated = FALSE;
- return sValue;
- }
+ CFX_WideString sValue = pFormField->GetValue();
+ CPDFDoc_Environment* pEnv = m_pDocument->GetEnv();
+ ASSERT(pEnv);
+ if (!pEnv->IsJSInitiated()) {
+ bFormated = FALSE;
+ return sValue;
+ }
- IFXJS_Runtime* pRuntime = m_pDocument->GetJsRuntime();
- ASSERT(pRuntime != NULL);
+ IFXJS_Runtime* pRuntime = m_pDocument->GetJsRuntime();
+ ASSERT(pRuntime != NULL);
- pRuntime->SetReaderDocument(m_pDocument);
+ pRuntime->SetReaderDocument(m_pDocument);
- if (pFormField->GetFieldType() == FIELDTYPE_COMBOBOX)
- {
- if (pFormField->CountSelectedItems() > 0)
- {
- int index = pFormField->GetSelectedIndex(0);
- if (index >= 0)
- sValue = pFormField->GetOptionLabel(index);
- }
+ if (pFormField->GetFieldType() == FIELDTYPE_COMBOBOX) {
+ if (pFormField->CountSelectedItems() > 0) {
+ int index = pFormField->GetSelectedIndex(0);
+ if (index >= 0)
+ sValue = pFormField->GetOptionLabel(index);
}
+ }
- bFormated = FALSE;
+ bFormated = FALSE;
- CPDF_AAction aAction = pFormField->GetAdditionalAction();
- if (aAction != NULL && aAction.ActionExist(CPDF_AAction::Format))
- {
- CPDF_Action action = aAction.GetAction(CPDF_AAction::Format);
- if (action)
- {
- CFX_WideString script = action.GetJavaScript();
- if (!script.IsEmpty())
- {
- CFX_WideString Value = sValue;
+ CPDF_AAction aAction = pFormField->GetAdditionalAction();
+ if (aAction != NULL && aAction.ActionExist(CPDF_AAction::Format)) {
+ CPDF_Action action = aAction.GetAction(CPDF_AAction::Format);
+ if (action) {
+ CFX_WideString script = action.GetJavaScript();
+ if (!script.IsEmpty()) {
+ CFX_WideString Value = sValue;
- IFXJS_Context* pContext = pRuntime->NewContext();
- ASSERT(pContext != NULL);
+ IFXJS_Context* pContext = pRuntime->NewContext();
+ ASSERT(pContext != NULL);
- pContext->OnField_Format(pFormField, Value, TRUE);
+ pContext->OnField_Format(pFormField, Value, TRUE);
- CFX_WideString sInfo;
- FX_BOOL bRet = pContext->RunScript(script, sInfo);
- pRuntime->ReleaseContext(pContext);
+ CFX_WideString sInfo;
+ FX_BOOL bRet = pContext->RunScript(script, sInfo);
+ pRuntime->ReleaseContext(pContext);
- if (bRet)
- {
- sValue = Value;
- bFormated = TRUE;
- }
- }
+ if (bRet) {
+ sValue = Value;
+ bFormated = TRUE;
}
+ }
}
+ }
- return sValue;
+ return sValue;
}
-void CPDFSDK_InterForm::ResetFieldAppearance(CPDF_FormField* pFormField, const FX_WCHAR* sValue, FX_BOOL bValueChanged)
-{
- ASSERT(pFormField != NULL);
+void CPDFSDK_InterForm::ResetFieldAppearance(CPDF_FormField* pFormField,
+ const FX_WCHAR* sValue,
+ FX_BOOL bValueChanged) {
+ ASSERT(pFormField != NULL);
- for (int i=0,sz=pFormField->CountControls(); i<sz; i++)
- {
- CPDF_FormControl* pFormCtrl = pFormField->GetControl(i);
- ASSERT(pFormCtrl != NULL);
+ for (int i = 0, sz = pFormField->CountControls(); i < sz; i++) {
+ CPDF_FormControl* pFormCtrl = pFormField->GetControl(i);
+ ASSERT(pFormCtrl != NULL);
- ASSERT(m_pInterForm != NULL);
- if(CPDFSDK_Widget* pWidget = GetWidget(pFormCtrl))
- pWidget->ResetAppearance(sValue, bValueChanged);
- }
+ ASSERT(m_pInterForm != NULL);
+ if (CPDFSDK_Widget* pWidget = GetWidget(pFormCtrl))
+ pWidget->ResetAppearance(sValue, bValueChanged);
+ }
}
-void CPDFSDK_InterForm::UpdateField(CPDF_FormField* pFormField)
-{
- ASSERT(pFormField != NULL);
+void CPDFSDK_InterForm::UpdateField(CPDF_FormField* pFormField) {
+ ASSERT(pFormField != NULL);
- for (int i=0,sz=pFormField->CountControls(); i<sz; i++)
- {
- CPDF_FormControl* pFormCtrl = pFormField->GetControl(i);
- ASSERT(pFormCtrl != NULL);
+ for (int i = 0, sz = pFormField->CountControls(); i < sz; i++) {
+ CPDF_FormControl* pFormCtrl = pFormField->GetControl(i);
+ ASSERT(pFormCtrl != NULL);
- if(CPDFSDK_Widget* pWidget = GetWidget(pFormCtrl))
- {
- CPDFDoc_Environment * pEnv = m_pDocument->GetEnv();
- CFFL_IFormFiller* pIFormFiller = pEnv->GetIFormFiller();
+ if (CPDFSDK_Widget* pWidget = GetWidget(pFormCtrl)) {
+ CPDFDoc_Environment* pEnv = m_pDocument->GetEnv();
+ CFFL_IFormFiller* pIFormFiller = pEnv->GetIFormFiller();
- CPDF_Page * pPage = pWidget->GetPDFPage();
- CPDFSDK_PageView * pPageView = m_pDocument->GetPageView(pPage,FALSE);
+ CPDF_Page* pPage = pWidget->GetPDFPage();
+ CPDFSDK_PageView* pPageView = m_pDocument->GetPageView(pPage, FALSE);
- FX_RECT rcBBox = pIFormFiller->GetViewBBox(pPageView, pWidget);
+ FX_RECT rcBBox = pIFormFiller->GetViewBBox(pPageView, pWidget);
- pEnv->FFI_Invalidate(pPage,rcBBox.left, rcBBox.top, rcBBox.right, rcBBox.bottom);
- }
+ pEnv->FFI_Invalidate(pPage, rcBBox.left, rcBBox.top, rcBBox.right,
+ rcBBox.bottom);
}
+ }
}
-void CPDFSDK_InterForm::OnKeyStrokeCommit(CPDF_FormField* pFormField, CFX_WideString& csValue, FX_BOOL& bRC)
-{
- ASSERT(pFormField != NULL);
+void CPDFSDK_InterForm::OnKeyStrokeCommit(CPDF_FormField* pFormField,
+ CFX_WideString& csValue,
+ FX_BOOL& bRC) {
+ ASSERT(pFormField != NULL);
- CPDF_AAction aAction = pFormField->GetAdditionalAction();
- if (aAction != NULL && aAction.ActionExist(CPDF_AAction::KeyStroke))
- {
- CPDF_Action action = aAction.GetAction(CPDF_AAction::KeyStroke);
- if (action)
- {
- ASSERT(m_pDocument != NULL);
- CPDFDoc_Environment* pEnv = m_pDocument->GetEnv();
- ASSERT(pEnv != NULL);
+ CPDF_AAction aAction = pFormField->GetAdditionalAction();
+ if (aAction != NULL && aAction.ActionExist(CPDF_AAction::KeyStroke)) {
+ CPDF_Action action = aAction.GetAction(CPDF_AAction::KeyStroke);
+ if (action) {
+ ASSERT(m_pDocument != NULL);
+ CPDFDoc_Environment* pEnv = m_pDocument->GetEnv();
+ ASSERT(pEnv != NULL);
- CPDFSDK_ActionHandler* pActionHandler = pEnv->GetActionHander();
- ASSERT(pActionHandler != NULL);
+ CPDFSDK_ActionHandler* pActionHandler = pEnv->GetActionHander();
+ ASSERT(pActionHandler != NULL);
- PDFSDK_FieldAction fa;
- fa.bModifier = pEnv->FFI_IsCTRLKeyDown(0);
- fa.bShift = pEnv->FFI_IsSHIFTKeyDown(0);
- fa.sValue = csValue;
+ PDFSDK_FieldAction fa;
+ fa.bModifier = pEnv->FFI_IsCTRLKeyDown(0);
+ fa.bShift = pEnv->FFI_IsSHIFTKeyDown(0);
+ fa.sValue = csValue;
- pActionHandler->DoAction_FieldJavaScript(action, CPDF_AAction::KeyStroke,
- m_pDocument, pFormField, fa);
- bRC = fa.bRC;
- }
+ pActionHandler->DoAction_FieldJavaScript(action, CPDF_AAction::KeyStroke,
+ m_pDocument, pFormField, fa);
+ bRC = fa.bRC;
}
+ }
}
-void CPDFSDK_InterForm::OnValidate(CPDF_FormField* pFormField, CFX_WideString& csValue, FX_BOOL& bRC)
-{
- ASSERT(pFormField != NULL);
+void CPDFSDK_InterForm::OnValidate(CPDF_FormField* pFormField,
+ CFX_WideString& csValue,
+ FX_BOOL& bRC) {
+ ASSERT(pFormField != NULL);
- CPDF_AAction aAction = pFormField->GetAdditionalAction();
- if (aAction != NULL && aAction.ActionExist(CPDF_AAction::Validate))
- {
- CPDF_Action action = aAction.GetAction(CPDF_AAction::Validate);
- if (action)
- {
- ASSERT(m_pDocument != NULL);
- CPDFDoc_Environment* pEnv = m_pDocument->GetEnv();
- ASSERT(pEnv != NULL);
+ CPDF_AAction aAction = pFormField->GetAdditionalAction();
+ if (aAction != NULL && aAction.ActionExist(CPDF_AAction::Validate)) {
+ CPDF_Action action = aAction.GetAction(CPDF_AAction::Validate);
+ if (action) {
+ ASSERT(m_pDocument != NULL);
+ CPDFDoc_Environment* pEnv = m_pDocument->GetEnv();
+ ASSERT(pEnv != NULL);
- CPDFSDK_ActionHandler* pActionHandler = pEnv->GetActionHander();
- ASSERT(pActionHandler != NULL);
+ CPDFSDK_ActionHandler* pActionHandler = pEnv->GetActionHander();
+ ASSERT(pActionHandler != NULL);
- PDFSDK_FieldAction fa;
- fa.bModifier = pEnv->FFI_IsCTRLKeyDown(0);
- fa.bShift = pEnv->FFI_IsSHIFTKeyDown(0);
- fa.sValue = csValue;
+ PDFSDK_FieldAction fa;
+ fa.bModifier = pEnv->FFI_IsCTRLKeyDown(0);
+ fa.bShift = pEnv->FFI_IsSHIFTKeyDown(0);
+ fa.sValue = csValue;
- pActionHandler->DoAction_FieldJavaScript(action, CPDF_AAction::Validate, m_pDocument, pFormField, fa);
- bRC = fa.bRC;
-
- }
+ pActionHandler->DoAction_FieldJavaScript(action, CPDF_AAction::Validate,
+ m_pDocument, pFormField, fa);
+ bRC = fa.bRC;
}
+ }
}
/* ----------------------------- action ----------------------------- */
-FX_BOOL CPDFSDK_InterForm::DoAction_Hide(const CPDF_Action& action)
-{
- ASSERT(action);
-
- CPDF_ActionFields af = action.GetWidgets();
- CFX_PtrArray fieldObjects;
- af.GetAllFields(fieldObjects);
- CFX_PtrArray widgetArray;
- CFX_PtrArray fields;
- GetFieldFromObjects(fieldObjects, fields);
-
- FX_BOOL bHide = action.GetHideStatus();
+FX_BOOL CPDFSDK_InterForm::DoAction_Hide(const CPDF_Action& action) {
+ ASSERT(action);
- FX_BOOL bChanged = FALSE;
+ CPDF_ActionFields af = action.GetWidgets();
+ CFX_PtrArray fieldObjects;
+ af.GetAllFields(fieldObjects);
+ CFX_PtrArray widgetArray;
+ CFX_PtrArray fields;
+ GetFieldFromObjects(fieldObjects, fields);
- for (int i=0, sz=fields.GetSize(); i<sz; i++)
- {
- CPDF_FormField* pField = (CPDF_FormField*)fields[i];
- ASSERT(pField != NULL);
-
-
- for (int j=0,jsz=pField->CountControls(); j<jsz; j++)
- {
- CPDF_FormControl* pControl = pField->GetControl(j);
- ASSERT(pControl != NULL);
-
- if (CPDFSDK_Widget* pWidget = GetWidget(pControl))
- {
- int nFlags = pWidget->GetFlags();
- if (bHide)
- {
- nFlags &= (~ANNOTFLAG_INVISIBLE);
- nFlags &= (~ANNOTFLAG_NOVIEW);
- nFlags |= (ANNOTFLAG_HIDDEN);
- }
- else
- {
- nFlags &= (~ANNOTFLAG_INVISIBLE);
- nFlags &= (~ANNOTFLAG_HIDDEN);
- nFlags &= (~ANNOTFLAG_NOVIEW);
- }
- pWidget->SetFlags(nFlags);
+ FX_BOOL bHide = action.GetHideStatus();
- CPDFSDK_PageView* pPageView = pWidget->GetPageView();
- ASSERT(pPageView != NULL);
+ FX_BOOL bChanged = FALSE;
- pPageView->UpdateView(pWidget);
+ for (int i = 0, sz = fields.GetSize(); i < sz; i++) {
+ CPDF_FormField* pField = (CPDF_FormField*)fields[i];
+ ASSERT(pField != NULL);
- bChanged = TRUE;
- }
+ for (int j = 0, jsz = pField->CountControls(); j < jsz; j++) {
+ CPDF_FormControl* pControl = pField->GetControl(j);
+ ASSERT(pControl != NULL);
+
+ if (CPDFSDK_Widget* pWidget = GetWidget(pControl)) {
+ int nFlags = pWidget->GetFlags();
+ if (bHide) {
+ nFlags &= (~ANNOTFLAG_INVISIBLE);
+ nFlags &= (~ANNOTFLAG_NOVIEW);
+ nFlags |= (ANNOTFLAG_HIDDEN);
+ } else {
+ nFlags &= (~ANNOTFLAG_INVISIBLE);
+ nFlags &= (~ANNOTFLAG_HIDDEN);
+ nFlags &= (~ANNOTFLAG_NOVIEW);
}
- }
+ pWidget->SetFlags(nFlags);
- return bChanged;
-}
+ CPDFSDK_PageView* pPageView = pWidget->GetPageView();
+ ASSERT(pPageView != NULL);
-FX_BOOL CPDFSDK_InterForm::DoAction_SubmitForm(const CPDF_Action& action)
-{
- ASSERT(m_pInterForm != NULL);
- CFX_WideString sDestination = action.GetFilePath();
- if (sDestination.IsEmpty())
- return FALSE;
-
- CPDF_Dictionary* pActionDict = action.GetDict();
- if (pActionDict->KeyExist("Fields"))
- {
- CPDF_ActionFields af = action.GetWidgets();
- FX_DWORD dwFlags = action.GetFlags();
- CFX_PtrArray fieldObjects;
- af.GetAllFields(fieldObjects);
-
- CFX_PtrArray fields;
- GetFieldFromObjects(fieldObjects, fields);
- if (fields.GetSize() != 0)
- {
- FX_BOOL bIncludeOrExclude = !(dwFlags & 0x01);
- if (m_pInterForm->CheckRequiredFields(&fields, bIncludeOrExclude))
- return FALSE;
+ pPageView->UpdateView(pWidget);
- return SubmitFields(sDestination, fields, bIncludeOrExclude, FALSE);
- }
+ bChanged = TRUE;
+ }
}
- if (m_pInterForm->CheckRequiredFields())
- return FALSE;
+ }
- return SubmitForm(sDestination, FALSE);
+ return bChanged;
}
-FX_BOOL CPDFSDK_InterForm::SubmitFields(const CFX_WideString& csDestination, const CFX_PtrArray& fields,
- FX_BOOL bIncludeOrExclude, FX_BOOL bUrlEncoded)
-{
- CPDFDoc_Environment* pEnv = m_pDocument->GetEnv();
- ASSERT(pEnv != NULL);
+FX_BOOL CPDFSDK_InterForm::DoAction_SubmitForm(const CPDF_Action& action) {
+ ASSERT(m_pInterForm != NULL);
+ CFX_WideString sDestination = action.GetFilePath();
+ if (sDestination.IsEmpty())
+ return FALSE;
- CFX_ByteTextBuf textBuf;
- ExportFieldsToFDFTextBuf(fields, bIncludeOrExclude, textBuf);
+ CPDF_Dictionary* pActionDict = action.GetDict();
+ if (pActionDict->KeyExist("Fields")) {
+ CPDF_ActionFields af = action.GetWidgets();
+ FX_DWORD dwFlags = action.GetFlags();
+ CFX_PtrArray fieldObjects;
+ af.GetAllFields(fieldObjects);
- uint8_t* pBuffer = textBuf.GetBuffer();
- FX_STRSIZE nBufSize = textBuf.GetLength();
+ CFX_PtrArray fields;
+ GetFieldFromObjects(fieldObjects, fields);
+ if (fields.GetSize() != 0) {
+ FX_BOOL bIncludeOrExclude = !(dwFlags & 0x01);
+ if (m_pInterForm->CheckRequiredFields(&fields, bIncludeOrExclude))
+ return FALSE;
- if (bUrlEncoded)
- {
- if(!FDFToURLEncodedData(pBuffer, nBufSize))
- return FALSE;
+ return SubmitFields(sDestination, fields, bIncludeOrExclude, FALSE);
}
+ }
+ if (m_pInterForm->CheckRequiredFields())
+ return FALSE;
- pEnv->JS_docSubmitForm(pBuffer, nBufSize, csDestination.c_str());
-
- return TRUE;
+ return SubmitForm(sDestination, FALSE);
}
-void CPDFSDK_InterForm::DoFDFBuffer(CFX_ByteString sBuffer)
-{
- ASSERT(m_pDocument != NULL);
+FX_BOOL CPDFSDK_InterForm::SubmitFields(const CFX_WideString& csDestination,
+ const CFX_PtrArray& fields,
+ FX_BOOL bIncludeOrExclude,
+ FX_BOOL bUrlEncoded) {
+ CPDFDoc_Environment* pEnv = m_pDocument->GetEnv();
+ ASSERT(pEnv != NULL);
- if (CFDF_Document *pFDFDocument = CFDF_Document::ParseMemory((const unsigned char *)sBuffer.GetBuffer(sBuffer.GetLength()), sBuffer.GetLength()))
- {
- CPDF_Dictionary* pRootDic = pFDFDocument->GetRoot();
- if(pRootDic)
- {
- CPDF_Dictionary * pFDFDict=pRootDic->GetDict("FDF");
- if(pFDFDict)
- {
- CPDF_Dictionary * pJSDict = pFDFDict->GetDict("JavaScript");
- if(pJSDict)
- {
- CFX_WideString csJS;
-
- CPDF_Object* pJS = pJSDict->GetElementValue("Before");
- if (pJS != NULL)
- {
- int iType = pJS->GetType();
- if (iType == PDFOBJ_STRING)
- csJS = pJSDict->GetUnicodeText("Before");
- else if (iType == PDFOBJ_STREAM)
- csJS = pJS->GetUnicodeText();
- }
+ CFX_ByteTextBuf textBuf;
+ ExportFieldsToFDFTextBuf(fields, bIncludeOrExclude, textBuf);
- }
- }
- }
- delete pFDFDocument;
- }
+ uint8_t* pBuffer = textBuf.GetBuffer();
+ FX_STRSIZE nBufSize = textBuf.GetLength();
- sBuffer.ReleaseBuffer();
-}
+ if (bUrlEncoded) {
+ if (!FDFToURLEncodedData(pBuffer, nBufSize))
+ return FALSE;
+ }
-FX_BOOL CPDFSDK_InterForm::FDFToURLEncodedData(CFX_WideString csFDFFile, CFX_WideString csTxtFile)
-{
- return TRUE;
-}
+ pEnv->JS_docSubmitForm(pBuffer, nBufSize, csDestination.c_str());
-FX_BOOL CPDFSDK_InterForm::FDFToURLEncodedData(uint8_t*& pBuf, FX_STRSIZE& nBufSize)
-{
- CFDF_Document* pFDF = CFDF_Document::ParseMemory(pBuf, nBufSize);
- if (pFDF)
- {
- CPDF_Dictionary* pMainDict = pFDF->GetRoot()->GetDict("FDF");
- if (pMainDict == NULL) return FALSE;
+ return TRUE;
+}
- // Get fields
- CPDF_Array* pFields = pMainDict->GetArray("Fields");
- if (pFields == NULL) return FALSE;
+void CPDFSDK_InterForm::DoFDFBuffer(CFX_ByteString sBuffer) {
+ ASSERT(m_pDocument != NULL);
- CFX_ByteTextBuf fdfEncodedData;
+ if (CFDF_Document* pFDFDocument = CFDF_Document::ParseMemory(
+ (const unsigned char*)sBuffer.GetBuffer(sBuffer.GetLength()),
+ sBuffer.GetLength())) {
+ CPDF_Dictionary* pRootDic = pFDFDocument->GetRoot();
+ if (pRootDic) {
+ CPDF_Dictionary* pFDFDict = pRootDic->GetDict("FDF");
+ if (pFDFDict) {
+ CPDF_Dictionary* pJSDict = pFDFDict->GetDict("JavaScript");
+ if (pJSDict) {
+ CFX_WideString csJS;
- for (FX_DWORD i = 0; i < pFields->GetCount(); i ++)
- {
- CPDF_Dictionary* pField = pFields->GetDict(i);
- if (pField == NULL) continue;
- CFX_WideString name;
- name = pField->GetUnicodeText("T");
- CFX_ByteString name_b = CFX_ByteString::FromUnicode(name);
- CFX_ByteString csBValue = pField->GetString("V");
- CFX_WideString csWValue = PDF_DecodeText(csBValue);
- CFX_ByteString csValue_b = CFX_ByteString::FromUnicode(csWValue);
-
- fdfEncodedData = fdfEncodedData<<name_b.GetBuffer(name_b.GetLength());
- name_b.ReleaseBuffer();
- fdfEncodedData = fdfEncodedData<<"=";
- fdfEncodedData = fdfEncodedData<<csValue_b.GetBuffer(csValue_b.GetLength());
- csValue_b.ReleaseBuffer();
- if(i != pFields->GetCount()-1)
- fdfEncodedData = fdfEncodedData<<"&";
+ CPDF_Object* pJS = pJSDict->GetElementValue("Before");
+ if (pJS != NULL) {
+ int iType = pJS->GetType();
+ if (iType == PDFOBJ_STRING)
+ csJS = pJSDict->GetUnicodeText("Before");
+ else if (iType == PDFOBJ_STREAM)
+ csJS = pJS->GetUnicodeText();
+ }
}
-
- nBufSize = fdfEncodedData.GetLength();
- pBuf = FX_Alloc(uint8_t, nBufSize);
- FXSYS_memcpy(pBuf, fdfEncodedData.GetBuffer(), nBufSize);
+ }
}
- return TRUE;
-}
-
-FX_BOOL CPDFSDK_InterForm::ExportFieldsToFDFTextBuf(const CFX_PtrArray& fields,FX_BOOL bIncludeOrExclude, CFX_ByteTextBuf& textBuf)
-{
- ASSERT(m_pDocument != NULL);
- ASSERT(m_pInterForm != NULL);
-
- CFDF_Document* pFDF = m_pInterForm->ExportToFDF(m_pDocument->GetPath(),(CFX_PtrArray&)fields, bIncludeOrExclude);
- if (!pFDF) return FALSE;
- FX_BOOL bRet = pFDF->WriteBuf(textBuf); // = FALSE;//
- delete pFDF;
+ delete pFDFDocument;
+ }
+
+ sBuffer.ReleaseBuffer();
+}
+
+FX_BOOL CPDFSDK_InterForm::FDFToURLEncodedData(CFX_WideString csFDFFile,
+ CFX_WideString csTxtFile) {
+ return TRUE;
+}
+
+FX_BOOL CPDFSDK_InterForm::FDFToURLEncodedData(uint8_t*& pBuf,
+ FX_STRSIZE& nBufSize) {
+ CFDF_Document* pFDF = CFDF_Document::ParseMemory(pBuf, nBufSize);
+ if (pFDF) {
+ CPDF_Dictionary* pMainDict = pFDF->GetRoot()->GetDict("FDF");
+ if (pMainDict == NULL)
+ return FALSE;
+
+ // Get fields
+ CPDF_Array* pFields = pMainDict->GetArray("Fields");
+ if (pFields == NULL)
+ return FALSE;
+
+ CFX_ByteTextBuf fdfEncodedData;
+
+ for (FX_DWORD i = 0; i < pFields->GetCount(); i++) {
+ CPDF_Dictionary* pField = pFields->GetDict(i);
+ if (pField == NULL)
+ continue;
+ CFX_WideString name;
+ name = pField->GetUnicodeText("T");
+ CFX_ByteString name_b = CFX_ByteString::FromUnicode(name);
+ CFX_ByteString csBValue = pField->GetString("V");
+ CFX_WideString csWValue = PDF_DecodeText(csBValue);
+ CFX_ByteString csValue_b = CFX_ByteString::FromUnicode(csWValue);
+
+ fdfEncodedData = fdfEncodedData << name_b.GetBuffer(name_b.GetLength());
+ name_b.ReleaseBuffer();
+ fdfEncodedData = fdfEncodedData << "=";
+ fdfEncodedData = fdfEncodedData
+ << csValue_b.GetBuffer(csValue_b.GetLength());
+ csValue_b.ReleaseBuffer();
+ if (i != pFields->GetCount() - 1)
+ fdfEncodedData = fdfEncodedData << "&";
+ }
+
+ nBufSize = fdfEncodedData.GetLength();
+ pBuf = FX_Alloc(uint8_t, nBufSize);
+ FXSYS_memcpy(pBuf, fdfEncodedData.GetBuffer(), nBufSize);
+ }
+ return TRUE;
+}
+
+FX_BOOL CPDFSDK_InterForm::ExportFieldsToFDFTextBuf(const CFX_PtrArray& fields,
+ FX_BOOL bIncludeOrExclude,
+ CFX_ByteTextBuf& textBuf) {
+ ASSERT(m_pDocument != NULL);
+ ASSERT(m_pInterForm != NULL);
+
+ CFDF_Document* pFDF = m_pInterForm->ExportToFDF(
+ m_pDocument->GetPath(), (CFX_PtrArray&)fields, bIncludeOrExclude);
+ if (!pFDF)
+ return FALSE;
+ FX_BOOL bRet = pFDF->WriteBuf(textBuf); // = FALSE;//
+ delete pFDF;
- return bRet;
+ return bRet;
}
-CFX_WideString CPDFSDK_InterForm::GetTemporaryFileName(const CFX_WideString& sFileExt)
-{
- CFX_WideString sFileName;
- return L"";
+CFX_WideString CPDFSDK_InterForm::GetTemporaryFileName(
+ const CFX_WideString& sFileExt) {
+ CFX_WideString sFileName;
+ return L"";
}
-FX_BOOL CPDFSDK_InterForm::SubmitForm(const CFX_WideString& sDestination, FX_BOOL bUrlEncoded)
-{
- if (sDestination.IsEmpty()) return FALSE;
+FX_BOOL CPDFSDK_InterForm::SubmitForm(const CFX_WideString& sDestination,
+ FX_BOOL bUrlEncoded) {
+ if (sDestination.IsEmpty())
+ return FALSE;
- CPDFDoc_Environment* pEnv = m_pDocument->GetEnv();
- ASSERT(pEnv != NULL);
+ CPDFDoc_Environment* pEnv = m_pDocument->GetEnv();
+ ASSERT(pEnv != NULL);
- if(NULL == m_pDocument) return FALSE;
- CFX_WideString wsPDFFilePath = m_pDocument->GetPath();
+ if (NULL == m_pDocument)
+ return FALSE;
+ CFX_WideString wsPDFFilePath = m_pDocument->GetPath();
- if(NULL == m_pInterForm) return FALSE;
- CFDF_Document* pFDFDoc = m_pInterForm->ExportToFDF(wsPDFFilePath);
- if (NULL == pFDFDoc) return FALSE;
+ if (NULL == m_pInterForm)
+ return FALSE;
+ CFDF_Document* pFDFDoc = m_pInterForm->ExportToFDF(wsPDFFilePath);
+ if (NULL == pFDFDoc)
+ return FALSE;
- CFX_ByteTextBuf FdfBuffer;
- FX_BOOL bRet = pFDFDoc->WriteBuf(FdfBuffer);
- delete pFDFDoc;
- if (!bRet) return FALSE;
+ CFX_ByteTextBuf FdfBuffer;
+ FX_BOOL bRet = pFDFDoc->WriteBuf(FdfBuffer);
+ delete pFDFDoc;
+ if (!bRet)
+ return FALSE;
- uint8_t* pBuffer = FdfBuffer.GetBuffer();
- FX_STRSIZE nBufSize = FdfBuffer.GetLength();
+ uint8_t* pBuffer = FdfBuffer.GetBuffer();
+ FX_STRSIZE nBufSize = FdfBuffer.GetLength();
- if (bUrlEncoded)
- {
- if(!FDFToURLEncodedData(pBuffer, nBufSize))
- return FALSE;
- }
+ if (bUrlEncoded) {
+ if (!FDFToURLEncodedData(pBuffer, nBufSize))
+ return FALSE;
+ }
- pEnv->JS_docSubmitForm(pBuffer, nBufSize, sDestination.c_str());
+ pEnv->JS_docSubmitForm(pBuffer, nBufSize, sDestination.c_str());
- if (bUrlEncoded && pBuffer)
- {
- FX_Free(pBuffer);
- pBuffer = NULL;
- }
+ if (bUrlEncoded && pBuffer) {
+ FX_Free(pBuffer);
+ pBuffer = NULL;
+ }
- return TRUE;
+ return TRUE;
}
-FX_BOOL CPDFSDK_InterForm::ExportFormToFDFTextBuf(CFX_ByteTextBuf& textBuf)
-{
+FX_BOOL CPDFSDK_InterForm::ExportFormToFDFTextBuf(CFX_ByteTextBuf& textBuf) {
+ ASSERT(m_pInterForm != NULL);
+ ASSERT(m_pDocument != NULL);
- ASSERT(m_pInterForm != NULL);
- ASSERT(m_pDocument != NULL);
-
- CFDF_Document* pFDF = m_pInterForm->ExportToFDF(m_pDocument->GetPath());
- if (!pFDF) return FALSE;
+ CFDF_Document* pFDF = m_pInterForm->ExportToFDF(m_pDocument->GetPath());
+ if (!pFDF)
+ return FALSE;
- FX_BOOL bRet = pFDF->WriteBuf(textBuf);
- delete pFDF;
+ FX_BOOL bRet = pFDF->WriteBuf(textBuf);
+ delete pFDF;
- return bRet;
+ return bRet;
}
+FX_BOOL CPDFSDK_InterForm::DoAction_ResetForm(const CPDF_Action& action) {
+ ASSERT(action);
-FX_BOOL CPDFSDK_InterForm::DoAction_ResetForm(const CPDF_Action& action)
-{
- ASSERT(action);
-
- CPDF_Dictionary* pActionDict = action.GetDict();
- if (pActionDict->KeyExist("Fields"))
- {
- CPDF_ActionFields af = action.GetWidgets();
- FX_DWORD dwFlags = action.GetFlags();
+ CPDF_Dictionary* pActionDict = action.GetDict();
+ if (pActionDict->KeyExist("Fields")) {
+ CPDF_ActionFields af = action.GetWidgets();
+ FX_DWORD dwFlags = action.GetFlags();
- CFX_PtrArray fieldObjects;
- af.GetAllFields(fieldObjects);
- CFX_PtrArray fields;
- GetFieldFromObjects(fieldObjects, fields);
- return m_pInterForm->ResetForm(fields, !(dwFlags & 0x01), TRUE);
- }
+ CFX_PtrArray fieldObjects;
+ af.GetAllFields(fieldObjects);
+ CFX_PtrArray fields;
+ GetFieldFromObjects(fieldObjects, fields);
+ return m_pInterForm->ResetForm(fields, !(dwFlags & 0x01), TRUE);
+ }
- return m_pInterForm->ResetForm(TRUE);
+ return m_pInterForm->ResetForm(TRUE);
}
-FX_BOOL CPDFSDK_InterForm::DoAction_ImportData(const CPDF_Action& action)
-{
- return FALSE;
+FX_BOOL CPDFSDK_InterForm::DoAction_ImportData(const CPDF_Action& action) {
+ return FALSE;
}
-void CPDFSDK_InterForm::GetFieldFromObjects(const CFX_PtrArray& objects, CFX_PtrArray& fields)
-{
- ASSERT(m_pInterForm != NULL);
+void CPDFSDK_InterForm::GetFieldFromObjects(const CFX_PtrArray& objects,
+ CFX_PtrArray& fields) {
+ ASSERT(m_pInterForm != NULL);
- int iCount = objects.GetSize();
- for (int i = 0; i < iCount; i ++)
- {
- CPDF_Object* pObject = (CPDF_Object*)objects[i];
- if (pObject == NULL) continue;
+ int iCount = objects.GetSize();
+ for (int i = 0; i < iCount; i++) {
+ CPDF_Object* pObject = (CPDF_Object*)objects[i];
+ if (pObject == NULL)
+ continue;
- int iType = pObject->GetType();
- if (iType == PDFOBJ_STRING)
- {
- CFX_WideString csName = pObject->GetUnicodeText();
- CPDF_FormField* pField = m_pInterForm->GetField(0, csName);
- if (pField != NULL)
- fields.Add(pField);
- }
- else if (iType == PDFOBJ_DICTIONARY)
- {
- if (m_pInterForm->IsValidFormField(pObject))
- fields.Add(pObject);
- }
+ int iType = pObject->GetType();
+ if (iType == PDFOBJ_STRING) {
+ CFX_WideString csName = pObject->GetUnicodeText();
+ CPDF_FormField* pField = m_pInterForm->GetField(0, csName);
+ if (pField != NULL)
+ fields.Add(pField);
+ } else if (iType == PDFOBJ_DICTIONARY) {
+ if (m_pInterForm->IsValidFormField(pObject))
+ fields.Add(pObject);
}
+ }
}
-/* ----------------------------- CPDF_FormNotify ----------------------------- */
+/* ----------------------------- CPDF_FormNotify -----------------------------
+ */
-int CPDFSDK_InterForm::BeforeValueChange(const CPDF_FormField* pField, CFX_WideString& csValue)
-{
- CPDF_FormField* pFormField = (CPDF_FormField*)pField;
- int nType = pFormField->GetFieldType();
- if (nType == FIELDTYPE_COMBOBOX || nType == FIELDTYPE_TEXTFIELD)
- {
- FX_BOOL bRC = TRUE;
- OnKeyStrokeCommit(pFormField, csValue, bRC);
- if (bRC)
- {
- OnValidate(pFormField, csValue, bRC);
- return bRC ? 1 : -1;
- }
- return -1;
+int CPDFSDK_InterForm::BeforeValueChange(const CPDF_FormField* pField,
+ CFX_WideString& csValue) {
+ CPDF_FormField* pFormField = (CPDF_FormField*)pField;
+ int nType = pFormField->GetFieldType();
+ if (nType == FIELDTYPE_COMBOBOX || nType == FIELDTYPE_TEXTFIELD) {
+ FX_BOOL bRC = TRUE;
+ OnKeyStrokeCommit(pFormField, csValue, bRC);
+ if (bRC) {
+ OnValidate(pFormField, csValue, bRC);
+ return bRC ? 1 : -1;
}
- return 0;
+ return -1;
+ }
+ return 0;
+}
+
+int CPDFSDK_InterForm::AfterValueChange(const CPDF_FormField* pField) {
+ CPDF_FormField* pFormField = (CPDF_FormField*)pField;
+ int nType = pFormField->GetFieldType();
+ if (nType == FIELDTYPE_COMBOBOX || nType == FIELDTYPE_TEXTFIELD) {
+ OnCalculate(pFormField);
+ FX_BOOL bFormated = FALSE;
+ CFX_WideString sValue = OnFormat(pFormField, bFormated);
+ if (bFormated)
+ ResetFieldAppearance(pFormField, sValue.c_str(), TRUE);
+ else
+ ResetFieldAppearance(pFormField, NULL, TRUE);
+ UpdateField(pFormField);
+ }
+ return 0;
}
-int CPDFSDK_InterForm::AfterValueChange(const CPDF_FormField* pField)
-{
- CPDF_FormField* pFormField = (CPDF_FormField*)pField;
- int nType = pFormField->GetFieldType();
- if (nType == FIELDTYPE_COMBOBOX || nType == FIELDTYPE_TEXTFIELD)
- {
- OnCalculate(pFormField);
- FX_BOOL bFormated = FALSE;
- CFX_WideString sValue = OnFormat(pFormField, bFormated);
- if (bFormated)
- ResetFieldAppearance(pFormField, sValue.c_str(), TRUE);
- else
- ResetFieldAppearance(pFormField, NULL, TRUE);
- UpdateField(pFormField);
- }
+int CPDFSDK_InterForm::BeforeSelectionChange(const CPDF_FormField* pField,
+ CFX_WideString& csValue) {
+ CPDF_FormField* pFormField = (CPDF_FormField*)pField;
+ if (pFormField->GetFieldType() != FIELDTYPE_LISTBOX)
return 0;
-}
-
-int CPDFSDK_InterForm::BeforeSelectionChange(const CPDF_FormField* pField, CFX_WideString& csValue)
-{
- CPDF_FormField* pFormField = (CPDF_FormField*)pField;
- if (pFormField->GetFieldType() != FIELDTYPE_LISTBOX)
- return 0;
- FX_BOOL bRC = TRUE;
- OnKeyStrokeCommit(pFormField, csValue, bRC);
- if (!bRC)
- return -1;
+ FX_BOOL bRC = TRUE;
+ OnKeyStrokeCommit(pFormField, csValue, bRC);
+ if (!bRC)
+ return -1;
- OnValidate(pFormField, csValue, bRC);
- if (!bRC)
- return -1;
+ OnValidate(pFormField, csValue, bRC);
+ if (!bRC)
+ return -1;
- return 1;
+ return 1;
}
-int CPDFSDK_InterForm::AfterSelectionChange(const CPDF_FormField* pField)
-{
- CPDF_FormField* pFormField = (CPDF_FormField*)pField;
- if (pFormField->GetFieldType() == FIELDTYPE_LISTBOX)
- {
- OnCalculate(pFormField);
- ResetFieldAppearance(pFormField, NULL, TRUE);
- UpdateField(pFormField);
- }
- return 0;
+int CPDFSDK_InterForm::AfterSelectionChange(const CPDF_FormField* pField) {
+ CPDF_FormField* pFormField = (CPDF_FormField*)pField;
+ if (pFormField->GetFieldType() == FIELDTYPE_LISTBOX) {
+ OnCalculate(pFormField);
+ ResetFieldAppearance(pFormField, NULL, TRUE);
+ UpdateField(pFormField);
+ }
+ return 0;
}
-int CPDFSDK_InterForm::AfterCheckedStatusChange(const CPDF_FormField* pField, const CFX_ByteArray& statusArray)
-{
- CPDF_FormField* pFormField = (CPDF_FormField*)pField;
- int nType = pFormField->GetFieldType();
- if (nType == FIELDTYPE_CHECKBOX || nType == FIELDTYPE_RADIOBUTTON)
- {
- OnCalculate(pFormField);
- UpdateField(pFormField);
- }
- return 0;
+int CPDFSDK_InterForm::AfterCheckedStatusChange(
+ const CPDF_FormField* pField,
+ const CFX_ByteArray& statusArray) {
+ CPDF_FormField* pFormField = (CPDF_FormField*)pField;
+ int nType = pFormField->GetFieldType();
+ if (nType == FIELDTYPE_CHECKBOX || nType == FIELDTYPE_RADIOBUTTON) {
+ OnCalculate(pFormField);
+ UpdateField(pFormField);
+ }
+ return 0;
}
-int CPDFSDK_InterForm::BeforeFormReset(const CPDF_InterForm* pForm)
-{
- return 0;
+int CPDFSDK_InterForm::BeforeFormReset(const CPDF_InterForm* pForm) {
+ return 0;
}
-int CPDFSDK_InterForm::AfterFormReset(const CPDF_InterForm* pForm)
-{
- OnCalculate(nullptr);
- return 0;
+int CPDFSDK_InterForm::AfterFormReset(const CPDF_InterForm* pForm) {
+ OnCalculate(nullptr);
+ return 0;
}
-int CPDFSDK_InterForm::BeforeFormImportData(const CPDF_InterForm* pForm)
-{
- return 0;
+int CPDFSDK_InterForm::BeforeFormImportData(const CPDF_InterForm* pForm) {
+ return 0;
}
-int CPDFSDK_InterForm::AfterFormImportData(const CPDF_InterForm* pForm)
-{
- OnCalculate(nullptr);
- return 0;
+int CPDFSDK_InterForm::AfterFormImportData(const CPDF_InterForm* pForm) {
+ OnCalculate(nullptr);
+ return 0;
}
-FX_BOOL CPDFSDK_InterForm::IsNeedHighLight(int nFieldType)
-{
- if(nFieldType <1 || nFieldType > 6)
- return FALSE;
- return m_bNeedHightlight[nFieldType-1];
+FX_BOOL CPDFSDK_InterForm::IsNeedHighLight(int nFieldType) {
+ if (nFieldType < 1 || nFieldType > 6)
+ return FALSE;
+ return m_bNeedHightlight[nFieldType - 1];
}
-void CPDFSDK_InterForm::RemoveAllHighLight()
-{
- memset((void*)m_bNeedHightlight, 0, 6*sizeof(FX_BOOL));
+void CPDFSDK_InterForm::RemoveAllHighLight() {
+ memset((void*)m_bNeedHightlight, 0, 6 * sizeof(FX_BOOL));
}
-void CPDFSDK_InterForm::SetHighlightColor(FX_COLORREF clr, int nFieldType)
-{
- if(nFieldType <0 || nFieldType > 6) return;
- switch(nFieldType)
- {
- case 0:
- {
- for(int i=0; i<6; i++)
- {
- m_aHighlightColor[i] = clr;
- m_bNeedHightlight[i] = TRUE;
- }
- break;
- }
- default:
- {
- m_aHighlightColor[nFieldType-1] = clr;
- m_bNeedHightlight[nFieldType-1] = TRUE;
- break;
- }
+void CPDFSDK_InterForm::SetHighlightColor(FX_COLORREF clr, int nFieldType) {
+ if (nFieldType < 0 || nFieldType > 6)
+ return;
+ switch (nFieldType) {
+ case 0: {
+ for (int i = 0; i < 6; i++) {
+ m_aHighlightColor[i] = clr;
+ m_bNeedHightlight[i] = TRUE;
+ }
+ break;
}
-
+ default: {
+ m_aHighlightColor[nFieldType - 1] = clr;
+ m_bNeedHightlight[nFieldType - 1] = TRUE;
+ break;
+ }
+ }
}
-FX_COLORREF CPDFSDK_InterForm::GetHighlightColor(int nFieldType)
-{
- if (nFieldType < 0 || nFieldType > 6)
- return FXSYS_RGB(255,255,255);
- if (nFieldType == 0)
- return m_aHighlightColor[0];
- return m_aHighlightColor[nFieldType-1];
+FX_COLORREF CPDFSDK_InterForm::GetHighlightColor(int nFieldType) {
+ if (nFieldType < 0 || nFieldType > 6)
+ return FXSYS_RGB(255, 255, 255);
+ if (nFieldType == 0)
+ return m_aHighlightColor[0];
+ return m_aHighlightColor[nFieldType - 1];
}
/* ------------------------- CBA_AnnotIterator ------------------------- */
-CBA_AnnotIterator::CBA_AnnotIterator(CPDFSDK_PageView* pPageView, const CFX_ByteString& sType, const CFX_ByteString& sSubType)
- :m_pPageView(pPageView),
- m_sType(sType),
- m_sSubType(sSubType),
- m_nTabs(BAI_STRUCTURE)
-{
- ASSERT(m_pPageView != NULL);
+CBA_AnnotIterator::CBA_AnnotIterator(CPDFSDK_PageView* pPageView,
+ const CFX_ByteString& sType,
+ const CFX_ByteString& sSubType)
+ : m_pPageView(pPageView),
+ m_sType(sType),
+ m_sSubType(sSubType),
+ m_nTabs(BAI_STRUCTURE) {
+ ASSERT(m_pPageView != NULL);
- CPDF_Page* pPDFPage = m_pPageView->GetPDFPage();
- ASSERT(pPDFPage != NULL);
- ASSERT(pPDFPage->m_pFormDict != NULL);
+ CPDF_Page* pPDFPage = m_pPageView->GetPDFPage();
+ ASSERT(pPDFPage != NULL);
+ ASSERT(pPDFPage->m_pFormDict != NULL);
- CFX_ByteString sTabs = pPDFPage->m_pFormDict->GetString("Tabs");
+ CFX_ByteString sTabs = pPDFPage->m_pFormDict->GetString("Tabs");
- if (sTabs == "R")
- {
- m_nTabs = BAI_ROW;
- }
- else if (sTabs == "C")
- {
- m_nTabs = BAI_COLUMN;
- }
- else
- {
- m_nTabs = BAI_STRUCTURE;
- }
+ if (sTabs == "R") {
+ m_nTabs = BAI_ROW;
+ } else if (sTabs == "C") {
+ m_nTabs = BAI_COLUMN;
+ } else {
+ m_nTabs = BAI_STRUCTURE;
+ }
- GenerateResults();
+ GenerateResults();
}
-CBA_AnnotIterator::~CBA_AnnotIterator()
-{
- m_Annots.RemoveAll();
+CBA_AnnotIterator::~CBA_AnnotIterator() {
+ m_Annots.RemoveAll();
}
-CPDFSDK_Annot* CBA_AnnotIterator::GetFirstAnnot()
-{
- if (m_Annots.GetSize() > 0)
- return m_Annots[0];
+CPDFSDK_Annot* CBA_AnnotIterator::GetFirstAnnot() {
+ if (m_Annots.GetSize() > 0)
+ return m_Annots[0];
- return NULL;
+ return NULL;
}
-CPDFSDK_Annot* CBA_AnnotIterator::GetLastAnnot()
-{
- if (m_Annots.GetSize() > 0)
- return m_Annots[m_Annots.GetSize() - 1];
+CPDFSDK_Annot* CBA_AnnotIterator::GetLastAnnot() {
+ if (m_Annots.GetSize() > 0)
+ return m_Annots[m_Annots.GetSize() - 1];
- return NULL;
+ return NULL;
}
-CPDFSDK_Annot* CBA_AnnotIterator::GetNextAnnot(CPDFSDK_Annot* pAnnot)
-{
- for (int i = 0, sz = m_Annots.GetSize(); i < sz; ++i) {
- if (m_Annots[i] == pAnnot)
- return (i + 1 < sz) ? m_Annots[i+1] : m_Annots[0];
- }
- return NULL;
+CPDFSDK_Annot* CBA_AnnotIterator::GetNextAnnot(CPDFSDK_Annot* pAnnot) {
+ for (int i = 0, sz = m_Annots.GetSize(); i < sz; ++i) {
+ if (m_Annots[i] == pAnnot)
+ return (i + 1 < sz) ? m_Annots[i + 1] : m_Annots[0];
+ }
+ return NULL;
}
-CPDFSDK_Annot* CBA_AnnotIterator::GetPrevAnnot(CPDFSDK_Annot* pAnnot)
-{
- for (int i = 0, sz = m_Annots.GetSize(); i < sz; ++i) {
- if (m_Annots[i] == pAnnot)
- return (i - 1 >= 0) ? m_Annots[i-1] : m_Annots[sz-1];
- }
- return NULL;
+CPDFSDK_Annot* CBA_AnnotIterator::GetPrevAnnot(CPDFSDK_Annot* pAnnot) {
+ for (int i = 0, sz = m_Annots.GetSize(); i < sz; ++i) {
+ if (m_Annots[i] == pAnnot)
+ return (i - 1 >= 0) ? m_Annots[i - 1] : m_Annots[sz - 1];
+ }
+ return NULL;
}
-int CBA_AnnotIterator::CompareByLeft(CPDFSDK_Annot* p1, CPDFSDK_Annot* p2)
-{
- ASSERT(p1);
- ASSERT(p2);
+int CBA_AnnotIterator::CompareByLeft(CPDFSDK_Annot* p1, CPDFSDK_Annot* p2) {
+ ASSERT(p1);
+ ASSERT(p2);
- CPDF_Rect rcAnnot1 = GetAnnotRect(p1);
- CPDF_Rect rcAnnot2 = GetAnnotRect(p2);
+ CPDF_Rect rcAnnot1 = GetAnnotRect(p1);
+ CPDF_Rect rcAnnot2 = GetAnnotRect(p2);
- if (rcAnnot1.left < rcAnnot2.left)
- return -1;
- if (rcAnnot1.left > rcAnnot2.left)
- return 1;
- return 0;
+ if (rcAnnot1.left < rcAnnot2.left)
+ return -1;
+ if (rcAnnot1.left > rcAnnot2.left)
+ return 1;
+ return 0;
}
+int CBA_AnnotIterator::CompareByTop(CPDFSDK_Annot* p1, CPDFSDK_Annot* p2) {
+ ASSERT(p1 != NULL);
+ ASSERT(p2 != NULL);
-int CBA_AnnotIterator::CompareByTop(CPDFSDK_Annot* p1, CPDFSDK_Annot* p2)
-{
- ASSERT(p1 != NULL);
- ASSERT(p2 != NULL);
+ CPDF_Rect rcAnnot1 = GetAnnotRect(p1);
+ CPDF_Rect rcAnnot2 = GetAnnotRect(p2);
- CPDF_Rect rcAnnot1 = GetAnnotRect(p1);
- CPDF_Rect rcAnnot2 = GetAnnotRect(p2);
-
- if (rcAnnot1.top < rcAnnot2.top)
- return -1;
- if (rcAnnot1.top > rcAnnot2.top)
- return 1;
- return 0;
+ if (rcAnnot1.top < rcAnnot2.top)
+ return -1;
+ if (rcAnnot1.top > rcAnnot2.top)
+ return 1;
+ return 0;
}
-void CBA_AnnotIterator::GenerateResults()
-{
- ASSERT(m_pPageView != NULL);
+void CBA_AnnotIterator::GenerateResults() {
+ ASSERT(m_pPageView != NULL);
- switch (m_nTabs)
- {
- case BAI_STRUCTURE:
- {
- for (int i=0,sz=m_pPageView->CountAnnots(); i<sz; i++)
- {
- CPDFSDK_Annot* pAnnot = m_pPageView->GetAnnot(i);
- ASSERT(pAnnot != NULL);
-
- if (pAnnot->GetType() == m_sType
- && pAnnot->GetSubType() == m_sSubType)
- m_Annots.Add(pAnnot);
- }
+ switch (m_nTabs) {
+ case BAI_STRUCTURE: {
+ for (int i = 0, sz = m_pPageView->CountAnnots(); i < sz; i++) {
+ CPDFSDK_Annot* pAnnot = m_pPageView->GetAnnot(i);
+ ASSERT(pAnnot != NULL);
+
+ if (pAnnot->GetType() == m_sType && pAnnot->GetSubType() == m_sSubType)
+ m_Annots.Add(pAnnot);
+ }
+ } break;
+ case BAI_ROW: {
+ CPDFSDK_SortAnnots sa;
+
+ {
+ for (int i = 0, sz = m_pPageView->CountAnnots(); i < sz; i++) {
+ CPDFSDK_Annot* pAnnot = m_pPageView->GetAnnot(i);
+ ASSERT(pAnnot != NULL);
+
+ if (pAnnot->GetType() == m_sType &&
+ pAnnot->GetSubType() == m_sSubType)
+ sa.Add(pAnnot);
}
- break;
- case BAI_ROW:
- {
- CPDFSDK_SortAnnots sa;
+ }
- {
+ if (sa.GetSize() > 0) {
+ sa.Sort(CBA_AnnotIterator::CompareByLeft);
+ }
- for (int i=0,sz=m_pPageView->CountAnnots(); i<sz; i++)
- {
- CPDFSDK_Annot* pAnnot = m_pPageView->GetAnnot(i);
- ASSERT(pAnnot != NULL);
+ while (sa.GetSize() > 0) {
+ int nLeftTopIndex = -1;
- if (pAnnot->GetType() == m_sType
- && pAnnot->GetSubType() == m_sSubType)
- sa.Add(pAnnot);
- }
- }
+ {
+ FX_FLOAT fTop = 0.0f;
- if (sa.GetSize() > 0)
- {
- sa.Sort(CBA_AnnotIterator::CompareByLeft);
- }
+ for (int i = sa.GetSize() - 1; i >= 0; i--) {
+ CPDFSDK_Annot* pAnnot = sa.GetAt(i);
+ ASSERT(pAnnot != NULL);
- while (sa.GetSize() > 0)
- {
- int nLeftTopIndex = -1;
+ CPDF_Rect rcAnnot = GetAnnotRect(pAnnot);
- {
- FX_FLOAT fTop = 0.0f;
+ if (rcAnnot.top > fTop) {
+ nLeftTopIndex = i;
+ fTop = rcAnnot.top;
+ }
+ }
+ }
- for (int i=sa.GetSize()-1; i>=0; i--)
- {
- CPDFSDK_Annot* pAnnot = sa.GetAt(i);
- ASSERT(pAnnot != NULL);
+ if (nLeftTopIndex >= 0) {
+ CPDFSDK_Annot* pLeftTopAnnot = sa.GetAt(nLeftTopIndex);
+ ASSERT(pLeftTopAnnot != NULL);
- CPDF_Rect rcAnnot = GetAnnotRect(pAnnot);
+ CPDF_Rect rcLeftTop = GetAnnotRect(pLeftTopAnnot);
- if (rcAnnot.top > fTop)
- {
- nLeftTopIndex = i;
- fTop = rcAnnot.top;
- }
- }
- }
+ m_Annots.Add(pLeftTopAnnot);
+ sa.RemoveAt(nLeftTopIndex);
- if (nLeftTopIndex >= 0)
- {
- CPDFSDK_Annot* pLeftTopAnnot = sa.GetAt(nLeftTopIndex);
- ASSERT(pLeftTopAnnot != NULL);
+ CFX_ArrayTemplate<int> aSelect;
- CPDF_Rect rcLeftTop = GetAnnotRect(pLeftTopAnnot);
+ {
+ for (int i = 0, sz = sa.GetSize(); i < sz; i++) {
+ CPDFSDK_Annot* pAnnot = sa.GetAt(i);
+ ASSERT(pAnnot != NULL);
- m_Annots.Add(pLeftTopAnnot);
- sa.RemoveAt(nLeftTopIndex);
+ CPDF_Rect rcAnnot = GetAnnotRect(pAnnot);
- CFX_ArrayTemplate<int> aSelect;
+ FX_FLOAT fCenterY = (rcAnnot.top + rcAnnot.bottom) / 2.0f;
- {
- for (int i=0,sz=sa.GetSize(); i<sz; i++)
- {
- CPDFSDK_Annot* pAnnot = sa.GetAt(i);
- ASSERT(pAnnot != NULL);
+ if (fCenterY > rcLeftTop.bottom && fCenterY < rcLeftTop.top)
+ aSelect.Add(i);
+ }
+ }
- CPDF_Rect rcAnnot = GetAnnotRect(pAnnot);
+ {
+ for (int i = 0, sz = aSelect.GetSize(); i < sz; i++) {
+ m_Annots.Add(sa[aSelect[i]]);
+ }
+ }
- FX_FLOAT fCenterY = (rcAnnot.top + rcAnnot.bottom) / 2.0f;
+ {
+ for (int i = aSelect.GetSize() - 1; i >= 0; i--) {
+ sa.RemoveAt(aSelect[i]);
+ }
+ }
- if (fCenterY > rcLeftTop.bottom && fCenterY < rcLeftTop.top)
- aSelect.Add(i);
- }
- }
+ aSelect.RemoveAll();
+ }
+ }
+ sa.RemoveAll();
+ } break;
+ case BAI_COLUMN: {
+ CPDFSDK_SortAnnots sa;
+
+ {
+ for (int i = 0, sz = m_pPageView->CountAnnots(); i < sz; i++) {
+ CPDFSDK_Annot* pAnnot = m_pPageView->GetAnnot(i);
+ ASSERT(pAnnot != NULL);
+
+ if (pAnnot->GetType() == m_sType &&
+ pAnnot->GetSubType() == m_sSubType)
+ sa.Add(pAnnot);
+ }
+ }
- {
- for (int i=0,sz=aSelect.GetSize(); i<sz; i++)
- {
- m_Annots.Add(sa[aSelect[i]]);
- }
- }
+ if (sa.GetSize() > 0) {
+ sa.Sort(CBA_AnnotIterator::CompareByTop, FALSE);
+ }
- {
- for (int i=aSelect.GetSize()-1; i>=0; i--)
- {
- sa.RemoveAt(aSelect[i]);
- }
- }
+ while (sa.GetSize() > 0) {
+ int nLeftTopIndex = -1;
- aSelect.RemoveAll();
- }
- }
- sa.RemoveAll();
- }
- break;
- case BAI_COLUMN:
{
- CPDFSDK_SortAnnots sa;
+ FX_FLOAT fLeft = -1.0f;
- {
- for (int i=0,sz=m_pPageView->CountAnnots(); i<sz; i++)
- {
- CPDFSDK_Annot* pAnnot = m_pPageView->GetAnnot(i);
- ASSERT(pAnnot != NULL);
+ for (int i = sa.GetSize() - 1; i >= 0; i--) {
+ CPDFSDK_Annot* pAnnot = sa.GetAt(i);
+ ASSERT(pAnnot != NULL);
- if (pAnnot->GetType() == m_sType
- && pAnnot->GetSubType() == m_sSubType)
- sa.Add(pAnnot);
- }
- }
+ CPDF_Rect rcAnnot = GetAnnotRect(pAnnot);
- if (sa.GetSize() > 0)
- {
- sa.Sort(CBA_AnnotIterator::CompareByTop, FALSE);
+ if (fLeft < 0) {
+ nLeftTopIndex = 0;
+ fLeft = rcAnnot.left;
+ } else if (rcAnnot.left < fLeft) {
+ nLeftTopIndex = i;
+ fLeft = rcAnnot.left;
}
+ }
+ }
- while (sa.GetSize() > 0)
- {
- int nLeftTopIndex = -1;
-
- {
- FX_FLOAT fLeft = -1.0f;
-
- for (int i=sa.GetSize()-1; i>=0; i--)
- {
- CPDFSDK_Annot* pAnnot = sa.GetAt(i);
- ASSERT(pAnnot != NULL);
-
- CPDF_Rect rcAnnot = GetAnnotRect(pAnnot);
-
- if (fLeft < 0)
- {
- nLeftTopIndex = 0;
- fLeft = rcAnnot.left;
- }
- else if (rcAnnot.left < fLeft)
- {
- nLeftTopIndex = i;
- fLeft = rcAnnot.left;
- }
- }
- }
-
- if (nLeftTopIndex >= 0)
- {
- CPDFSDK_Annot* pLeftTopAnnot = sa.GetAt(nLeftTopIndex);
- ASSERT(pLeftTopAnnot != NULL);
-
- CPDF_Rect rcLeftTop = GetAnnotRect(pLeftTopAnnot);
+ if (nLeftTopIndex >= 0) {
+ CPDFSDK_Annot* pLeftTopAnnot = sa.GetAt(nLeftTopIndex);
+ ASSERT(pLeftTopAnnot != NULL);
- m_Annots.Add(pLeftTopAnnot);
- sa.RemoveAt(nLeftTopIndex);
+ CPDF_Rect rcLeftTop = GetAnnotRect(pLeftTopAnnot);
- CFX_ArrayTemplate<int> aSelect;
+ m_Annots.Add(pLeftTopAnnot);
+ sa.RemoveAt(nLeftTopIndex);
- {
- for (int i=0,sz=sa.GetSize(); i<sz; i++)
- {
- CPDFSDK_Annot* pAnnot = sa.GetAt(i);
- ASSERT(pAnnot != NULL);
+ CFX_ArrayTemplate<int> aSelect;
- CPDF_Rect rcAnnot = GetAnnotRect(pAnnot);
+ {
+ for (int i = 0, sz = sa.GetSize(); i < sz; i++) {
+ CPDFSDK_Annot* pAnnot = sa.GetAt(i);
+ ASSERT(pAnnot != NULL);
- FX_FLOAT fCenterX = (rcAnnot.left + rcAnnot.right) / 2.0f;
+ CPDF_Rect rcAnnot = GetAnnotRect(pAnnot);
- if (fCenterX > rcLeftTop.left && fCenterX < rcLeftTop.right)
- aSelect.Add(i);
- }
- }
+ FX_FLOAT fCenterX = (rcAnnot.left + rcAnnot.right) / 2.0f;
- {
- for (int i=0,sz=aSelect.GetSize(); i<sz; i++)
- {
- m_Annots.Add(sa[aSelect[i]]);
- }
- }
+ if (fCenterX > rcLeftTop.left && fCenterX < rcLeftTop.right)
+ aSelect.Add(i);
+ }
+ }
- {
- for (int i=aSelect.GetSize()-1; i>=0; i--)
- {
- sa.RemoveAt(aSelect[i]);
- }
- }
+ {
+ for (int i = 0, sz = aSelect.GetSize(); i < sz; i++) {
+ m_Annots.Add(sa[aSelect[i]]);
+ }
+ }
- aSelect.RemoveAll();
- }
+ {
+ for (int i = aSelect.GetSize() - 1; i >= 0; i--) {
+ sa.RemoveAt(aSelect[i]);
}
- sa.RemoveAll();
+ }
+
+ aSelect.RemoveAll();
}
- break;
- }
+ }
+ sa.RemoveAll();
+ } break;
+ }
}
-CPDF_Rect CBA_AnnotIterator::GetAnnotRect(CPDFSDK_Annot* pAnnot)
-{
- ASSERT(pAnnot != NULL);
+CPDF_Rect CBA_AnnotIterator::GetAnnotRect(CPDFSDK_Annot* pAnnot) {
+ ASSERT(pAnnot != NULL);
- CPDF_Annot* pPDFAnnot = pAnnot->GetPDFAnnot();
- ASSERT(pPDFAnnot != NULL);
+ CPDF_Annot* pPDFAnnot = pAnnot->GetPDFAnnot();
+ ASSERT(pPDFAnnot != NULL);
- CPDF_Rect rcAnnot;
- pPDFAnnot->GetRect(rcAnnot);
+ CPDF_Rect rcAnnot;
+ pPDFAnnot->GetRect(rcAnnot);
- return rcAnnot;
+ return rcAnnot;
}
-
diff --git a/fpdfsdk/src/fsdk_mgr.cpp b/fpdfsdk/src/fsdk_mgr.cpp
index 05c1a3dd89..df9a0ff316 100644
--- a/fpdfsdk/src/fsdk_mgr.cpp
+++ b/fpdfsdk/src/fsdk_mgr.cpp
@@ -17,1077 +17,1009 @@
#include <ctime>
#endif
-//extern CPDFDoc_Environment* g_pFormFillApp;
-class CFX_SystemHandler:public IFX_SystemHandler
-{
-public:
- CFX_SystemHandler(CPDFDoc_Environment* pEnv):m_pEnv(pEnv),m_nCharSet(-1) {}
-public:
- virtual void InvalidateRect(FX_HWND hWnd, FX_RECT rect) ;
- virtual void OutputSelectedRect(void* pFormFiller, CPDF_Rect& rect);
-
- virtual FX_BOOL IsSelectionImplemented();
-
- virtual CFX_WideString GetClipboardText(FX_HWND hWnd){return L"";}
- virtual FX_BOOL SetClipboardText(FX_HWND hWnd, CFX_WideString string) {return FALSE;}
-
- virtual void ClientToScreen(FX_HWND hWnd, int32_t& x, int32_t& y) {}
- virtual void ScreenToClient(FX_HWND hWnd, int32_t& x, int32_t& y) {}
-
- /*cursor style
- FXCT_ARROW
- FXCT_NESW
- FXCT_NWSE
- FXCT_VBEAM
- FXCT_HBEAM
- FXCT_HAND
- */
- virtual void SetCursor(int32_t nCursorType);
-
- virtual FX_HMENU CreatePopupMenu() {return NULL;}
- virtual FX_BOOL AppendMenuItem(FX_HMENU hMenu, int32_t nIDNewItem, CFX_WideString string) {return FALSE;}
- virtual FX_BOOL EnableMenuItem(FX_HMENU hMenu, int32_t nIDItem, FX_BOOL bEnabled) {return FALSE;}
- virtual int32_t TrackPopupMenu(FX_HMENU hMenu, int32_t x, int32_t y, FX_HWND hParent) {return -1;}
- virtual void DestroyMenu(FX_HMENU hMenu) {}
-
- virtual CFX_ByteString GetNativeTrueTypeFont(int32_t nCharset);
- virtual FX_BOOL FindNativeTrueTypeFont(int32_t nCharset, CFX_ByteString sFontFaceName);
- virtual CPDF_Font* AddNativeTrueTypeFontToPDF(CPDF_Document* pDoc, CFX_ByteString sFontFaceName, uint8_t nCharset);
-
- virtual int32_t SetTimer(int32_t uElapse, TimerCallback lpTimerFunc) ;
- virtual void KillTimer(int32_t nID) ;
-
-
- virtual FX_BOOL IsSHIFTKeyDown(FX_DWORD nFlag) {return m_pEnv->FFI_IsSHIFTKeyDown(nFlag);}
- virtual FX_BOOL IsCTRLKeyDown(FX_DWORD nFlag) {return m_pEnv->FFI_IsCTRLKeyDown(nFlag);}
- virtual FX_BOOL IsALTKeyDown(FX_DWORD nFlag) {return m_pEnv->FFI_IsALTKeyDown(nFlag);}
- virtual FX_BOOL IsINSERTKeyDown(FX_DWORD nFlag) {return m_pEnv->FFI_IsINSERTKeyDown(nFlag);}
-
- virtual FX_SYSTEMTIME GetLocalTime();
-
- virtual int32_t GetCharSet() {return m_nCharSet;}
- virtual void SetCharSet(int32_t nCharSet) {m_nCharSet = nCharSet;}
-private:
- CPDFDoc_Environment* m_pEnv;
- int m_nCharSet;
-};
+// extern CPDFDoc_Environment* g_pFormFillApp;
+class CFX_SystemHandler : public IFX_SystemHandler {
+ public:
+ CFX_SystemHandler(CPDFDoc_Environment* pEnv) : m_pEnv(pEnv), m_nCharSet(-1) {}
-void CFX_SystemHandler::SetCursor(int32_t nCursorType)
-{
-
- m_pEnv->FFI_SetCursor(nCursorType);
-}
-
-void CFX_SystemHandler::InvalidateRect(FX_HWND hWnd, FX_RECT rect)
-{
- //g_pFormFillApp->FFI_Invalidate();
- CPDFSDK_Annot* pSDKAnnot = (CPDFSDK_Annot*)hWnd;
- CPDF_Page* pPage = NULL;
- CPDFSDK_PageView* pPageView = NULL;
- pPageView = pSDKAnnot->GetPageView();
- pPage = pSDKAnnot->GetPDFPage();
- if(!pPage || !pPageView)
- return;
- CPDF_Matrix page2device;
- pPageView->GetCurrentMatrix(page2device);
- CPDF_Matrix device2page;
- device2page.SetReverse(page2device);
- FX_FLOAT left, top, right,bottom;
- device2page.Transform((FX_FLOAT)rect.left, (FX_FLOAT)rect.top, left, top);
- device2page.Transform((FX_FLOAT)rect.right, (FX_FLOAT)rect.bottom, right, bottom);
-// m_pEnv->FFI_DeviceToPage(pPage, rect.left, rect.top, (double*)&left, (double*)&top);
-// m_pEnv->FFI_DeviceToPage(pPage, rect.right, rect.bottom, (double*)&right, (double*)&bottom);
- CPDF_Rect rcPDF(left, bottom, right, top);
- rcPDF.Normalize();
-
- m_pEnv->FFI_Invalidate(pPage, rcPDF.left, rcPDF.top, rcPDF.right, rcPDF.bottom);
-}
-void CFX_SystemHandler::OutputSelectedRect(void* pFormFiller, CPDF_Rect& rect)
-{
- CFFL_FormFiller* pFFL = (CFFL_FormFiller*)pFormFiller;
- if(pFFL)
- {
- CPDF_Point leftbottom = CPDF_Point(rect.left, rect.bottom);
- CPDF_Point righttop = CPDF_Point(rect.right, rect.top);
- CPDF_Point ptA = pFFL->PWLtoFFL(leftbottom);
- CPDF_Point ptB = pFFL->PWLtoFFL(righttop);
-
-
- CPDFSDK_Annot* pAnnot = pFFL->GetSDKAnnot();
- ASSERT(pAnnot);
- CPDF_Page* pPage = pAnnot->GetPDFPage();
- ASSERT(pPage);
- m_pEnv->FFI_OutputSelectedRect(pPage, ptA.x, ptB.y, ptB.x, ptA.y);
- }
+ public:
+ virtual void InvalidateRect(FX_HWND hWnd, FX_RECT rect);
+ virtual void OutputSelectedRect(void* pFormFiller, CPDF_Rect& rect);
-}
+ virtual FX_BOOL IsSelectionImplemented();
-FX_BOOL CFX_SystemHandler::IsSelectionImplemented()
-{
- if(m_pEnv)
- {
- FPDF_FORMFILLINFO* pInfo = m_pEnv->GetFormFillInfo();
- if(pInfo && pInfo->FFI_OutputSelectedRect)
- return TRUE;
- }
+ virtual CFX_WideString GetClipboardText(FX_HWND hWnd) { return L""; }
+ virtual FX_BOOL SetClipboardText(FX_HWND hWnd, CFX_WideString string) {
return FALSE;
-}
-
-CFX_ByteString CFX_SystemHandler::GetNativeTrueTypeFont(int32_t nCharset)
-{
- return "";
-}
-
-FX_BOOL CFX_SystemHandler::FindNativeTrueTypeFont(int32_t nCharset, CFX_ByteString sFontFaceName)
-{
- CFX_FontMgr* pFontMgr = CFX_GEModule::Get()->GetFontMgr();
- if(pFontMgr)
- {
- CFX_FontMapper* pFontMapper = pFontMgr->m_pBuiltinMapper;
- if(pFontMapper)
- {
- int nSize = pFontMapper->m_InstalledTTFonts.GetSize();
- if(nSize ==0)
- {
- pFontMapper->LoadInstalledFonts();
- nSize = pFontMapper->m_InstalledTTFonts.GetSize();
- }
-
- for(int i=0; i<nSize; i++)
- {
- if(pFontMapper->m_InstalledTTFonts[i].Compare(sFontFaceName))
- return TRUE;
- }
- }
-
- }
-
+ }
+
+ virtual void ClientToScreen(FX_HWND hWnd, int32_t& x, int32_t& y) {}
+ virtual void ScreenToClient(FX_HWND hWnd, int32_t& x, int32_t& y) {}
+
+ /*cursor style
+ FXCT_ARROW
+ FXCT_NESW
+ FXCT_NWSE
+ FXCT_VBEAM
+ FXCT_HBEAM
+ FXCT_HAND
+ */
+ virtual void SetCursor(int32_t nCursorType);
+
+ virtual FX_HMENU CreatePopupMenu() { return NULL; }
+ virtual FX_BOOL AppendMenuItem(FX_HMENU hMenu,
+ int32_t nIDNewItem,
+ CFX_WideString string) {
return FALSE;
-}
-
-static int CharSet2CP(int charset)
-{
- if (charset == 128)
- return 932;
- if (charset == 134)
- return 936;
- if (charset == 129)
- return 949;
- if (charset == 136)
- return 950;
- return 0;
-}
-CPDF_Font* CFX_SystemHandler::AddNativeTrueTypeFontToPDF(CPDF_Document* pDoc, CFX_ByteString sFontFaceName,
- uint8_t nCharset)
-{
- if(pDoc)
- {
- CFX_Font* pFXFont = new CFX_Font();
- pFXFont->LoadSubst(sFontFaceName,TRUE,0,0,0,CharSet2CP(nCharset),FALSE);
- CPDF_Font* pFont = pDoc->AddFont(pFXFont,nCharset,FALSE);
- delete pFXFont;
- return pFont;
- }
-
- return NULL;
-}
-
-
-int32_t CFX_SystemHandler::SetTimer(int32_t uElapse, TimerCallback lpTimerFunc)
-{
- return m_pEnv->FFI_SetTimer(uElapse, lpTimerFunc);
-}
-void CFX_SystemHandler::KillTimer(int32_t nID)
-{
- m_pEnv->FFI_KillTimer(nID);
-}
-
-FX_SYSTEMTIME CFX_SystemHandler::GetLocalTime()
-{
- return m_pEnv->FFI_GetLocalTime();
-}
-
-
-CJS_RuntimeFactory* GetJSRuntimeFactory()
-{
- static CJS_RuntimeFactory s_JSRuntimeFactory;
- return &s_JSRuntimeFactory;
-}
-
-CPDFDoc_Environment::CPDFDoc_Environment(CPDF_Document* pDoc, FPDF_FORMFILLINFO* pFFinfo) :
- m_pAnnotHandlerMgr(NULL),
- m_pActionHandler(NULL),
- m_pJSRuntime(NULL),
- m_pInfo(pFFinfo),
- m_pSDKDoc(NULL),
- m_pPDFDoc(pDoc),
- m_pIFormFiller(NULL)
-{
- m_pSysHandler = new CFX_SystemHandler(this);
- m_pJSRuntimeFactory = GetJSRuntimeFactory();
- m_pJSRuntimeFactory->AddRef();
-}
-
-CPDFDoc_Environment::~CPDFDoc_Environment()
-{
- delete m_pIFormFiller;
- m_pIFormFiller = NULL;
- if (m_pJSRuntime && m_pJSRuntimeFactory)
- m_pJSRuntimeFactory->DeleteJSRuntime(m_pJSRuntime);
- m_pJSRuntimeFactory->Release();
-
- delete m_pSysHandler;
- m_pSysHandler = NULL;
-
- delete m_pAnnotHandlerMgr;
- m_pAnnotHandlerMgr = NULL;
- delete m_pActionHandler;
- m_pActionHandler = NULL;
-}
-
-int CPDFDoc_Environment::JS_appAlert(const FX_WCHAR* Msg, const FX_WCHAR* Title, FX_UINT Type, FX_UINT Icon)
-{
- if (m_pInfo && m_pInfo->m_pJsPlatform && m_pInfo->m_pJsPlatform->app_alert)
- {
- CFX_ByteString bsMsg = CFX_WideString(Msg).UTF16LE_Encode();
- CFX_ByteString bsTitle = CFX_WideString(Title).UTF16LE_Encode();
- FPDF_WIDESTRING pMsg = (FPDF_WIDESTRING)bsMsg.GetBuffer(bsMsg.GetLength());
- FPDF_WIDESTRING pTitle = (FPDF_WIDESTRING)bsTitle.GetBuffer(bsTitle.GetLength());
- int ret = m_pInfo->m_pJsPlatform->app_alert(m_pInfo->m_pJsPlatform, pMsg, pTitle, Type, Icon);
- bsMsg.ReleaseBuffer();
- bsTitle.ReleaseBuffer();
- return ret;
- }
- return -1;
-}
-
-int CPDFDoc_Environment::JS_appResponse(const FX_WCHAR* Question, const FX_WCHAR* Title, const FX_WCHAR* Default,
- const FX_WCHAR* cLabel, FPDF_BOOL bPassword, void* response, int length)
-{
- if (m_pInfo && m_pInfo->m_pJsPlatform && m_pInfo->m_pJsPlatform->app_response)
- {
- CFX_ByteString bsQuestion = CFX_WideString(Question).UTF16LE_Encode();
- CFX_ByteString bsTitle = CFX_WideString(Title).UTF16LE_Encode();
- CFX_ByteString bsDefault = CFX_WideString(Default).UTF16LE_Encode();
- CFX_ByteString bsLabel = CFX_WideString(cLabel).UTF16LE_Encode();
- FPDF_WIDESTRING pQuestion = (FPDF_WIDESTRING)bsQuestion.GetBuffer(bsQuestion.GetLength());
- FPDF_WIDESTRING pTitle = (FPDF_WIDESTRING)bsTitle.GetBuffer(bsTitle.GetLength());
- FPDF_WIDESTRING pDefault = (FPDF_WIDESTRING)bsDefault.GetBuffer(bsDefault.GetLength());
- FPDF_WIDESTRING pLabel = (FPDF_WIDESTRING)bsLabel.GetBuffer(bsLabel.GetLength());
- int ret = m_pInfo->m_pJsPlatform->app_response(m_pInfo->m_pJsPlatform, pQuestion, pTitle,
- pDefault, pLabel, bPassword, response, length);
- bsQuestion.ReleaseBuffer();
- bsTitle.ReleaseBuffer();
- bsDefault.ReleaseBuffer();
- bsLabel.ReleaseBuffer();
- return ret;
- }
+ }
+ virtual FX_BOOL EnableMenuItem(FX_HMENU hMenu,
+ int32_t nIDItem,
+ FX_BOOL bEnabled) {
+ return FALSE;
+ }
+ virtual int32_t TrackPopupMenu(FX_HMENU hMenu,
+ int32_t x,
+ int32_t y,
+ FX_HWND hParent) {
return -1;
-}
-
-CFX_WideString CPDFDoc_Environment::JS_fieldBrowse()
-{
- if (!m_pInfo ||
- !m_pInfo->m_pJsPlatform ||
- !m_pInfo->m_pJsPlatform->Field_browse) {
- return L"";
- }
-
- const int nRequiredLen = m_pInfo->m_pJsPlatform->Field_browse(
- m_pInfo->m_pJsPlatform, nullptr, 0);
- if (nRequiredLen <= 0)
- return L"";
-
- nonstd::unique_ptr<char[]> pBuff(new char[nRequiredLen]);
- memset(pBuff.get(), 0, nRequiredLen);
- const int nActualLen = m_pInfo->m_pJsPlatform->Field_browse(
- m_pInfo->m_pJsPlatform, pBuff.get(), nRequiredLen);
- if (nActualLen <= 0 || nActualLen > nRequiredLen)
- return L"";
-
- CFX_ByteString bsRet = CFX_ByteString(pBuff.get(), nActualLen);
- CFX_WideString wsRet = CFX_WideString::FromLocal(bsRet);
- return wsRet;
-}
-
-CFX_WideString CPDFDoc_Environment::JS_docGetFilePath()
-{
- if (!m_pInfo ||
- !m_pInfo->m_pJsPlatform ||
- !m_pInfo->m_pJsPlatform->Doc_getFilePath) {
- return L"";
- }
-
- const int nRequiredLen = m_pInfo->m_pJsPlatform->Doc_getFilePath(
- m_pInfo->m_pJsPlatform, nullptr, 0);
- if (nRequiredLen <= 0)
- return L"";
-
- nonstd::unique_ptr<char[]> pBuff(new char[nRequiredLen]);
- memset(pBuff.get(), 0, nRequiredLen);
- const int nActualLen = m_pInfo->m_pJsPlatform->Doc_getFilePath(
- m_pInfo->m_pJsPlatform, pBuff.get(), nRequiredLen);
- if (nActualLen <= 0 || nActualLen > nRequiredLen)
- return L"";
-
- CFX_ByteString bsRet = CFX_ByteString(pBuff.get(), nActualLen);
- CFX_WideString wsRet = CFX_WideString::FromLocal(bsRet);
- return wsRet;
-}
-
-void CPDFDoc_Environment::JS_docSubmitForm(void* formData, int length, const FX_WCHAR* URL)
-{
- if (m_pInfo && m_pInfo->m_pJsPlatform && m_pInfo->m_pJsPlatform->Doc_submitForm)
- {
- CFX_ByteString bsDestination = CFX_WideString(URL).UTF16LE_Encode();
- FPDF_WIDESTRING pDestination = (FPDF_WIDESTRING)bsDestination.GetBuffer(bsDestination.GetLength());
- m_pInfo->m_pJsPlatform->Doc_submitForm(m_pInfo->m_pJsPlatform, formData, length, pDestination);
- bsDestination.ReleaseBuffer();
- }
-}
+ }
+ virtual void DestroyMenu(FX_HMENU hMenu) {}
+
+ virtual CFX_ByteString GetNativeTrueTypeFont(int32_t nCharset);
+ virtual FX_BOOL FindNativeTrueTypeFont(int32_t nCharset,
+ CFX_ByteString sFontFaceName);
+ virtual CPDF_Font* AddNativeTrueTypeFontToPDF(CPDF_Document* pDoc,
+ CFX_ByteString sFontFaceName,
+ uint8_t nCharset);
+
+ virtual int32_t SetTimer(int32_t uElapse, TimerCallback lpTimerFunc);
+ virtual void KillTimer(int32_t nID);
+
+ virtual FX_BOOL IsSHIFTKeyDown(FX_DWORD nFlag) {
+ return m_pEnv->FFI_IsSHIFTKeyDown(nFlag);
+ }
+ virtual FX_BOOL IsCTRLKeyDown(FX_DWORD nFlag) {
+ return m_pEnv->FFI_IsCTRLKeyDown(nFlag);
+ }
+ virtual FX_BOOL IsALTKeyDown(FX_DWORD nFlag) {
+ return m_pEnv->FFI_IsALTKeyDown(nFlag);
+ }
+ virtual FX_BOOL IsINSERTKeyDown(FX_DWORD nFlag) {
+ return m_pEnv->FFI_IsINSERTKeyDown(nFlag);
+ }
+
+ virtual FX_SYSTEMTIME GetLocalTime();
+
+ virtual int32_t GetCharSet() { return m_nCharSet; }
+ virtual void SetCharSet(int32_t nCharSet) { m_nCharSet = nCharSet; }
+
+ private:
+ CPDFDoc_Environment* m_pEnv;
+ int m_nCharSet;
+};
-void CPDFDoc_Environment::JS_docmailForm(void* mailData, int length, FPDF_BOOL bUI,
- const FX_WCHAR* To, const FX_WCHAR* Subject,
- const FX_WCHAR* CC, const FX_WCHAR* BCC,
- const FX_WCHAR* Msg)
-{
- if (m_pInfo && m_pInfo->m_pJsPlatform && m_pInfo->m_pJsPlatform->Doc_mail)
- {
- CFX_ByteString bsTo = CFX_WideString(To).UTF16LE_Encode();
- CFX_ByteString bsCC = CFX_WideString(Subject).UTF16LE_Encode();
- CFX_ByteString bsBcc = CFX_WideString(BCC).UTF16LE_Encode();
- CFX_ByteString bsSubject = CFX_WideString(Subject).UTF16LE_Encode();
- CFX_ByteString bsMsg = CFX_WideString(Msg).UTF16LE_Encode();
- FPDF_WIDESTRING pTo = (FPDF_WIDESTRING)bsTo.GetBuffer(bsTo.GetLength());
- FPDF_WIDESTRING pCC = (FPDF_WIDESTRING)bsCC.GetBuffer(bsCC.GetLength());
- FPDF_WIDESTRING pBcc = (FPDF_WIDESTRING)bsBcc.GetBuffer(bsBcc.GetLength());
- FPDF_WIDESTRING pSubject = (FPDF_WIDESTRING)bsSubject.GetBuffer(bsSubject.GetLength());
- FPDF_WIDESTRING pMsg = (FPDF_WIDESTRING)bsMsg.GetBuffer(bsMsg.GetLength());
- m_pInfo->m_pJsPlatform->Doc_mail(m_pInfo->m_pJsPlatform, mailData, length, bUI, pTo, pSubject,
- pCC, pBcc, pMsg);
- bsTo.ReleaseBuffer();
- bsCC.ReleaseBuffer();
- bsBcc.ReleaseBuffer();
- bsSubject.ReleaseBuffer();
- bsMsg.ReleaseBuffer();
+void CFX_SystemHandler::SetCursor(int32_t nCursorType) {
+ m_pEnv->FFI_SetCursor(nCursorType);
+}
+
+void CFX_SystemHandler::InvalidateRect(FX_HWND hWnd, FX_RECT rect) {
+ // g_pFormFillApp->FFI_Invalidate();
+ CPDFSDK_Annot* pSDKAnnot = (CPDFSDK_Annot*)hWnd;
+ CPDF_Page* pPage = NULL;
+ CPDFSDK_PageView* pPageView = NULL;
+ pPageView = pSDKAnnot->GetPageView();
+ pPage = pSDKAnnot->GetPDFPage();
+ if (!pPage || !pPageView)
+ return;
+ CPDF_Matrix page2device;
+ pPageView->GetCurrentMatrix(page2device);
+ CPDF_Matrix device2page;
+ device2page.SetReverse(page2device);
+ FX_FLOAT left, top, right, bottom;
+ device2page.Transform((FX_FLOAT)rect.left, (FX_FLOAT)rect.top, left, top);
+ device2page.Transform((FX_FLOAT)rect.right, (FX_FLOAT)rect.bottom, right,
+ bottom);
+ // m_pEnv->FFI_DeviceToPage(pPage, rect.left, rect.top, (double*)&left,
+ // (double*)&top);
+ // m_pEnv->FFI_DeviceToPage(pPage, rect.right, rect.bottom, (double*)&right,
+ // (double*)&bottom);
+ CPDF_Rect rcPDF(left, bottom, right, top);
+ rcPDF.Normalize();
+
+ m_pEnv->FFI_Invalidate(pPage, rcPDF.left, rcPDF.top, rcPDF.right,
+ rcPDF.bottom);
+}
+void CFX_SystemHandler::OutputSelectedRect(void* pFormFiller, CPDF_Rect& rect) {
+ CFFL_FormFiller* pFFL = (CFFL_FormFiller*)pFormFiller;
+ if (pFFL) {
+ CPDF_Point leftbottom = CPDF_Point(rect.left, rect.bottom);
+ CPDF_Point righttop = CPDF_Point(rect.right, rect.top);
+ CPDF_Point ptA = pFFL->PWLtoFFL(leftbottom);
+ CPDF_Point ptB = pFFL->PWLtoFFL(righttop);
+
+ CPDFSDK_Annot* pAnnot = pFFL->GetSDKAnnot();
+ ASSERT(pAnnot);
+ CPDF_Page* pPage = pAnnot->GetPDFPage();
+ ASSERT(pPage);
+ m_pEnv->FFI_OutputSelectedRect(pPage, ptA.x, ptB.y, ptB.x, ptA.y);
+ }
+}
+
+FX_BOOL CFX_SystemHandler::IsSelectionImplemented() {
+ if (m_pEnv) {
+ FPDF_FORMFILLINFO* pInfo = m_pEnv->GetFormFillInfo();
+ if (pInfo && pInfo->FFI_OutputSelectedRect)
+ return TRUE;
+ }
+ return FALSE;
+}
+
+CFX_ByteString CFX_SystemHandler::GetNativeTrueTypeFont(int32_t nCharset) {
+ return "";
+}
+
+FX_BOOL CFX_SystemHandler::FindNativeTrueTypeFont(
+ int32_t nCharset,
+ CFX_ByteString sFontFaceName) {
+ CFX_FontMgr* pFontMgr = CFX_GEModule::Get()->GetFontMgr();
+ if (pFontMgr) {
+ CFX_FontMapper* pFontMapper = pFontMgr->m_pBuiltinMapper;
+ if (pFontMapper) {
+ int nSize = pFontMapper->m_InstalledTTFonts.GetSize();
+ if (nSize == 0) {
+ pFontMapper->LoadInstalledFonts();
+ nSize = pFontMapper->m_InstalledTTFonts.GetSize();
+ }
+
+ for (int i = 0; i < nSize; i++) {
+ if (pFontMapper->m_InstalledTTFonts[i].Compare(sFontFaceName))
+ return TRUE;
+ }
}
+ }
+
+ return FALSE;
+}
+
+static int CharSet2CP(int charset) {
+ if (charset == 128)
+ return 932;
+ if (charset == 134)
+ return 936;
+ if (charset == 129)
+ return 949;
+ if (charset == 136)
+ return 950;
+ return 0;
+}
+CPDF_Font* CFX_SystemHandler::AddNativeTrueTypeFontToPDF(
+ CPDF_Document* pDoc,
+ CFX_ByteString sFontFaceName,
+ uint8_t nCharset) {
+ if (pDoc) {
+ CFX_Font* pFXFont = new CFX_Font();
+ pFXFont->LoadSubst(sFontFaceName, TRUE, 0, 0, 0, CharSet2CP(nCharset),
+ FALSE);
+ CPDF_Font* pFont = pDoc->AddFont(pFXFont, nCharset, FALSE);
+ delete pFXFont;
+ return pFont;
+ }
+
+ return NULL;
+}
+
+int32_t CFX_SystemHandler::SetTimer(int32_t uElapse,
+ TimerCallback lpTimerFunc) {
+ return m_pEnv->FFI_SetTimer(uElapse, lpTimerFunc);
+}
+void CFX_SystemHandler::KillTimer(int32_t nID) {
+ m_pEnv->FFI_KillTimer(nID);
+}
+
+FX_SYSTEMTIME CFX_SystemHandler::GetLocalTime() {
+ return m_pEnv->FFI_GetLocalTime();
+}
+
+CJS_RuntimeFactory* GetJSRuntimeFactory() {
+ static CJS_RuntimeFactory s_JSRuntimeFactory;
+ return &s_JSRuntimeFactory;
+}
+
+CPDFDoc_Environment::CPDFDoc_Environment(CPDF_Document* pDoc,
+ FPDF_FORMFILLINFO* pFFinfo)
+ : m_pAnnotHandlerMgr(NULL),
+ m_pActionHandler(NULL),
+ m_pJSRuntime(NULL),
+ m_pInfo(pFFinfo),
+ m_pSDKDoc(NULL),
+ m_pPDFDoc(pDoc),
+ m_pIFormFiller(NULL) {
+ m_pSysHandler = new CFX_SystemHandler(this);
+ m_pJSRuntimeFactory = GetJSRuntimeFactory();
+ m_pJSRuntimeFactory->AddRef();
+}
+
+CPDFDoc_Environment::~CPDFDoc_Environment() {
+ delete m_pIFormFiller;
+ m_pIFormFiller = NULL;
+ if (m_pJSRuntime && m_pJSRuntimeFactory)
+ m_pJSRuntimeFactory->DeleteJSRuntime(m_pJSRuntime);
+ m_pJSRuntimeFactory->Release();
+
+ delete m_pSysHandler;
+ m_pSysHandler = NULL;
+
+ delete m_pAnnotHandlerMgr;
+ m_pAnnotHandlerMgr = NULL;
+ delete m_pActionHandler;
+ m_pActionHandler = NULL;
+}
+
+int CPDFDoc_Environment::JS_appAlert(const FX_WCHAR* Msg,
+ const FX_WCHAR* Title,
+ FX_UINT Type,
+ FX_UINT Icon) {
+ if (m_pInfo && m_pInfo->m_pJsPlatform && m_pInfo->m_pJsPlatform->app_alert) {
+ CFX_ByteString bsMsg = CFX_WideString(Msg).UTF16LE_Encode();
+ CFX_ByteString bsTitle = CFX_WideString(Title).UTF16LE_Encode();
+ FPDF_WIDESTRING pMsg = (FPDF_WIDESTRING)bsMsg.GetBuffer(bsMsg.GetLength());
+ FPDF_WIDESTRING pTitle =
+ (FPDF_WIDESTRING)bsTitle.GetBuffer(bsTitle.GetLength());
+ int ret = m_pInfo->m_pJsPlatform->app_alert(m_pInfo->m_pJsPlatform, pMsg,
+ pTitle, Type, Icon);
+ bsMsg.ReleaseBuffer();
+ bsTitle.ReleaseBuffer();
+ return ret;
+ }
+ return -1;
+}
+
+int CPDFDoc_Environment::JS_appResponse(const FX_WCHAR* Question,
+ const FX_WCHAR* Title,
+ const FX_WCHAR* Default,
+ const FX_WCHAR* cLabel,
+ FPDF_BOOL bPassword,
+ void* response,
+ int length) {
+ if (m_pInfo && m_pInfo->m_pJsPlatform &&
+ m_pInfo->m_pJsPlatform->app_response) {
+ CFX_ByteString bsQuestion = CFX_WideString(Question).UTF16LE_Encode();
+ CFX_ByteString bsTitle = CFX_WideString(Title).UTF16LE_Encode();
+ CFX_ByteString bsDefault = CFX_WideString(Default).UTF16LE_Encode();
+ CFX_ByteString bsLabel = CFX_WideString(cLabel).UTF16LE_Encode();
+ FPDF_WIDESTRING pQuestion =
+ (FPDF_WIDESTRING)bsQuestion.GetBuffer(bsQuestion.GetLength());
+ FPDF_WIDESTRING pTitle =
+ (FPDF_WIDESTRING)bsTitle.GetBuffer(bsTitle.GetLength());
+ FPDF_WIDESTRING pDefault =
+ (FPDF_WIDESTRING)bsDefault.GetBuffer(bsDefault.GetLength());
+ FPDF_WIDESTRING pLabel =
+ (FPDF_WIDESTRING)bsLabel.GetBuffer(bsLabel.GetLength());
+ int ret = m_pInfo->m_pJsPlatform->app_response(
+ m_pInfo->m_pJsPlatform, pQuestion, pTitle, pDefault, pLabel, bPassword,
+ response, length);
+ bsQuestion.ReleaseBuffer();
+ bsTitle.ReleaseBuffer();
+ bsDefault.ReleaseBuffer();
+ bsLabel.ReleaseBuffer();
+ return ret;
+ }
+ return -1;
+}
+
+CFX_WideString CPDFDoc_Environment::JS_fieldBrowse() {
+ if (!m_pInfo || !m_pInfo->m_pJsPlatform ||
+ !m_pInfo->m_pJsPlatform->Field_browse) {
+ return L"";
+ }
+
+ const int nRequiredLen =
+ m_pInfo->m_pJsPlatform->Field_browse(m_pInfo->m_pJsPlatform, nullptr, 0);
+ if (nRequiredLen <= 0)
+ return L"";
+
+ nonstd::unique_ptr<char[]> pBuff(new char[nRequiredLen]);
+ memset(pBuff.get(), 0, nRequiredLen);
+ const int nActualLen = m_pInfo->m_pJsPlatform->Field_browse(
+ m_pInfo->m_pJsPlatform, pBuff.get(), nRequiredLen);
+ if (nActualLen <= 0 || nActualLen > nRequiredLen)
+ return L"";
+
+ CFX_ByteString bsRet = CFX_ByteString(pBuff.get(), nActualLen);
+ CFX_WideString wsRet = CFX_WideString::FromLocal(bsRet);
+ return wsRet;
+}
+
+CFX_WideString CPDFDoc_Environment::JS_docGetFilePath() {
+ if (!m_pInfo || !m_pInfo->m_pJsPlatform ||
+ !m_pInfo->m_pJsPlatform->Doc_getFilePath) {
+ return L"";
+ }
+
+ const int nRequiredLen = m_pInfo->m_pJsPlatform->Doc_getFilePath(
+ m_pInfo->m_pJsPlatform, nullptr, 0);
+ if (nRequiredLen <= 0)
+ return L"";
+
+ nonstd::unique_ptr<char[]> pBuff(new char[nRequiredLen]);
+ memset(pBuff.get(), 0, nRequiredLen);
+ const int nActualLen = m_pInfo->m_pJsPlatform->Doc_getFilePath(
+ m_pInfo->m_pJsPlatform, pBuff.get(), nRequiredLen);
+ if (nActualLen <= 0 || nActualLen > nRequiredLen)
+ return L"";
+
+ CFX_ByteString bsRet = CFX_ByteString(pBuff.get(), nActualLen);
+ CFX_WideString wsRet = CFX_WideString::FromLocal(bsRet);
+ return wsRet;
+}
+
+void CPDFDoc_Environment::JS_docSubmitForm(void* formData,
+ int length,
+ const FX_WCHAR* URL) {
+ if (m_pInfo && m_pInfo->m_pJsPlatform &&
+ m_pInfo->m_pJsPlatform->Doc_submitForm) {
+ CFX_ByteString bsDestination = CFX_WideString(URL).UTF16LE_Encode();
+ FPDF_WIDESTRING pDestination =
+ (FPDF_WIDESTRING)bsDestination.GetBuffer(bsDestination.GetLength());
+ m_pInfo->m_pJsPlatform->Doc_submitForm(m_pInfo->m_pJsPlatform, formData,
+ length, pDestination);
+ bsDestination.ReleaseBuffer();
+ }
+}
+
+void CPDFDoc_Environment::JS_docmailForm(void* mailData,
+ int length,
+ FPDF_BOOL bUI,
+ const FX_WCHAR* To,
+ const FX_WCHAR* Subject,
+ const FX_WCHAR* CC,
+ const FX_WCHAR* BCC,
+ const FX_WCHAR* Msg) {
+ if (m_pInfo && m_pInfo->m_pJsPlatform && m_pInfo->m_pJsPlatform->Doc_mail) {
+ CFX_ByteString bsTo = CFX_WideString(To).UTF16LE_Encode();
+ CFX_ByteString bsCC = CFX_WideString(Subject).UTF16LE_Encode();
+ CFX_ByteString bsBcc = CFX_WideString(BCC).UTF16LE_Encode();
+ CFX_ByteString bsSubject = CFX_WideString(Subject).UTF16LE_Encode();
+ CFX_ByteString bsMsg = CFX_WideString(Msg).UTF16LE_Encode();
+ FPDF_WIDESTRING pTo = (FPDF_WIDESTRING)bsTo.GetBuffer(bsTo.GetLength());
+ FPDF_WIDESTRING pCC = (FPDF_WIDESTRING)bsCC.GetBuffer(bsCC.GetLength());
+ FPDF_WIDESTRING pBcc = (FPDF_WIDESTRING)bsBcc.GetBuffer(bsBcc.GetLength());
+ FPDF_WIDESTRING pSubject =
+ (FPDF_WIDESTRING)bsSubject.GetBuffer(bsSubject.GetLength());
+ FPDF_WIDESTRING pMsg = (FPDF_WIDESTRING)bsMsg.GetBuffer(bsMsg.GetLength());
+ m_pInfo->m_pJsPlatform->Doc_mail(m_pInfo->m_pJsPlatform, mailData, length,
+ bUI, pTo, pSubject, pCC, pBcc, pMsg);
+ bsTo.ReleaseBuffer();
+ bsCC.ReleaseBuffer();
+ bsBcc.ReleaseBuffer();
+ bsSubject.ReleaseBuffer();
+ bsMsg.ReleaseBuffer();
+ }
+}
+
+IFXJS_Runtime* CPDFDoc_Environment::GetJSRuntime() {
+ if (!IsJSInitiated())
+ return NULL;
+ if (!m_pJSRuntime)
+ m_pJSRuntime = m_pJSRuntimeFactory->NewJSRuntime(this);
+ return m_pJSRuntime;
}
-IFXJS_Runtime* CPDFDoc_Environment::GetJSRuntime()
-{
- if (!IsJSInitiated())
- return NULL;
- if (!m_pJSRuntime)
- m_pJSRuntime = m_pJSRuntimeFactory->NewJSRuntime(this);
- return m_pJSRuntime;
-}
-
-CPDFSDK_AnnotHandlerMgr* CPDFDoc_Environment::GetAnnotHandlerMgr()
-{
- if (!m_pAnnotHandlerMgr)
- m_pAnnotHandlerMgr = new CPDFSDK_AnnotHandlerMgr(this);
- return m_pAnnotHandlerMgr;
+CPDFSDK_AnnotHandlerMgr* CPDFDoc_Environment::GetAnnotHandlerMgr() {
+ if (!m_pAnnotHandlerMgr)
+ m_pAnnotHandlerMgr = new CPDFSDK_AnnotHandlerMgr(this);
+ return m_pAnnotHandlerMgr;
}
-CPDFSDK_ActionHandler* CPDFDoc_Environment::GetActionHander()
-{
- if (!m_pActionHandler)
- m_pActionHandler = new CPDFSDK_ActionHandler(this);
- return m_pActionHandler;
+CPDFSDK_ActionHandler* CPDFDoc_Environment::GetActionHander() {
+ if (!m_pActionHandler)
+ m_pActionHandler = new CPDFSDK_ActionHandler(this);
+ return m_pActionHandler;
}
-CFFL_IFormFiller* CPDFDoc_Environment::GetIFormFiller()
-{
- if (!m_pIFormFiller)
- m_pIFormFiller = new CFFL_IFormFiller(this);
- return m_pIFormFiller;
+CFFL_IFormFiller* CPDFDoc_Environment::GetIFormFiller() {
+ if (!m_pIFormFiller)
+ m_pIFormFiller = new CFFL_IFormFiller(this);
+ return m_pIFormFiller;
}
-CPDFSDK_Document::CPDFSDK_Document(CPDF_Document* pDoc,CPDFDoc_Environment* pEnv) :
- m_pDoc(pDoc),
- m_pInterForm(nullptr),
- m_pFocusAnnot(nullptr),
- m_pEnv(pEnv),
- m_pOccontent(nullptr),
- m_bChangeMask(FALSE)
-{
-}
+CPDFSDK_Document::CPDFSDK_Document(CPDF_Document* pDoc,
+ CPDFDoc_Environment* pEnv)
+ : m_pDoc(pDoc),
+ m_pInterForm(nullptr),
+ m_pFocusAnnot(nullptr),
+ m_pEnv(pEnv),
+ m_pOccontent(nullptr),
+ m_bChangeMask(FALSE) {}
-CPDFSDK_Document::~CPDFSDK_Document()
-{
- for (auto& it : m_pageMap)
- delete it.second;
- m_pageMap.clear();
+CPDFSDK_Document::~CPDFSDK_Document() {
+ for (auto& it : m_pageMap)
+ delete it.second;
+ m_pageMap.clear();
- delete m_pInterForm;
- m_pInterForm = nullptr;
+ delete m_pInterForm;
+ m_pInterForm = nullptr;
- delete m_pOccontent;
- m_pOccontent = nullptr;
+ delete m_pOccontent;
+ m_pOccontent = nullptr;
}
-CPDFSDK_PageView* CPDFSDK_Document::GetPageView(CPDF_Page* pPDFPage, FX_BOOL ReNew)
-{
- auto it = m_pageMap.find(pPDFPage);
- if (it != m_pageMap.end())
- return it->second;
+CPDFSDK_PageView* CPDFSDK_Document::GetPageView(CPDF_Page* pPDFPage,
+ FX_BOOL ReNew) {
+ auto it = m_pageMap.find(pPDFPage);
+ if (it != m_pageMap.end())
+ return it->second;
- if (!ReNew)
- return nullptr;
+ if (!ReNew)
+ return nullptr;
- CPDFSDK_PageView* pPageView = new CPDFSDK_PageView(this, pPDFPage);
- m_pageMap[pPDFPage] = pPageView;
- // Delay to load all the annotations, to avoid endless loop.
- pPageView->LoadFXAnnots();
- return pPageView;
+ CPDFSDK_PageView* pPageView = new CPDFSDK_PageView(this, pPDFPage);
+ m_pageMap[pPDFPage] = pPageView;
+ // Delay to load all the annotations, to avoid endless loop.
+ pPageView->LoadFXAnnots();
+ return pPageView;
}
-CPDFSDK_PageView* CPDFSDK_Document::GetCurrentView()
-{
- CPDF_Page* pPage = (CPDF_Page*)m_pEnv->FFI_GetCurrentPage(m_pDoc);
- return pPage ? GetPageView(pPage, TRUE) : nullptr;
+CPDFSDK_PageView* CPDFSDK_Document::GetCurrentView() {
+ CPDF_Page* pPage = (CPDF_Page*)m_pEnv->FFI_GetCurrentPage(m_pDoc);
+ return pPage ? GetPageView(pPage, TRUE) : nullptr;
}
-CPDFSDK_PageView* CPDFSDK_Document::GetPageView(int nIndex)
-{
- CPDF_Page* pTempPage = (CPDF_Page*)m_pEnv->FFI_GetPage(m_pDoc, nIndex);
- if (!pTempPage)
- return nullptr;
+CPDFSDK_PageView* CPDFSDK_Document::GetPageView(int nIndex) {
+ CPDF_Page* pTempPage = (CPDF_Page*)m_pEnv->FFI_GetPage(m_pDoc, nIndex);
+ if (!pTempPage)
+ return nullptr;
- auto it = m_pageMap.find(pTempPage);
- return it->second;
+ auto it = m_pageMap.find(pTempPage);
+ return it->second;
}
-void CPDFSDK_Document:: ProcJavascriptFun()
-{
- CPDF_Document* pPDFDoc = GetDocument();
- CPDF_DocJSActions docJS(pPDFDoc);
- int iCount = docJS.CountJSActions();
- if (iCount < 1) return;
- for (int i = 0; i < iCount; i ++)
- {
- CFX_ByteString csJSName;
- CPDF_Action jsAction = docJS.GetJSAction(i, csJSName);
- if(m_pEnv->GetActionHander())
- m_pEnv->GetActionHander()->DoAction_JavaScript(jsAction,CFX_WideString::FromLocal(csJSName),this);
- }
-
+void CPDFSDK_Document::ProcJavascriptFun() {
+ CPDF_Document* pPDFDoc = GetDocument();
+ CPDF_DocJSActions docJS(pPDFDoc);
+ int iCount = docJS.CountJSActions();
+ if (iCount < 1)
+ return;
+ for (int i = 0; i < iCount; i++) {
+ CFX_ByteString csJSName;
+ CPDF_Action jsAction = docJS.GetJSAction(i, csJSName);
+ if (m_pEnv->GetActionHander())
+ m_pEnv->GetActionHander()->DoAction_JavaScript(
+ jsAction, CFX_WideString::FromLocal(csJSName), this);
+ }
}
-FX_BOOL CPDFSDK_Document::ProcOpenAction()
-{
- if(!m_pDoc)
- return FALSE;
+FX_BOOL CPDFSDK_Document::ProcOpenAction() {
+ if (!m_pDoc)
+ return FALSE;
- CPDF_Dictionary* pRoot = m_pDoc->GetRoot();
- if (!pRoot)
- return FALSE;
+ CPDF_Dictionary* pRoot = m_pDoc->GetRoot();
+ if (!pRoot)
+ return FALSE;
- CPDF_Object* pOpenAction = pRoot->GetDict("OpenAction");
- if(!pOpenAction)
- pOpenAction = pRoot->GetArray("OpenAction");
+ CPDF_Object* pOpenAction = pRoot->GetDict("OpenAction");
+ if (!pOpenAction)
+ pOpenAction = pRoot->GetArray("OpenAction");
- if(!pOpenAction)
- return FALSE;
+ if (!pOpenAction)
+ return FALSE;
- if(pOpenAction->GetType()==PDFOBJ_ARRAY)
- return TRUE;
+ if (pOpenAction->GetType() == PDFOBJ_ARRAY)
+ return TRUE;
- if(pOpenAction->GetType()==PDFOBJ_DICTIONARY)
- {
- CPDF_Dictionary * pDict=(CPDF_Dictionary*)pOpenAction;
- CPDF_Action action(pDict);
- if(m_pEnv->GetActionHander())
- m_pEnv->GetActionHander()->DoAction_DocOpen(action, this);
- return TRUE;
- }
- return FALSE;
+ if (pOpenAction->GetType() == PDFOBJ_DICTIONARY) {
+ CPDF_Dictionary* pDict = (CPDF_Dictionary*)pOpenAction;
+ CPDF_Action action(pDict);
+ if (m_pEnv->GetActionHander())
+ m_pEnv->GetActionHander()->DoAction_DocOpen(action, this);
+ return TRUE;
+ }
+ return FALSE;
}
-CPDF_OCContext* CPDFSDK_Document::GetOCContext()
-{
- if(!m_pOccontent)
- m_pOccontent = new CPDF_OCContext(m_pDoc);
- return m_pOccontent;
+CPDF_OCContext* CPDFSDK_Document::GetOCContext() {
+ if (!m_pOccontent)
+ m_pOccontent = new CPDF_OCContext(m_pDoc);
+ return m_pOccontent;
}
-void CPDFSDK_Document::ReMovePageView(CPDF_Page* pPDFPage)
-{
- auto it = m_pageMap.find(pPDFPage);
- if (it == m_pageMap.end())
- return;
+void CPDFSDK_Document::ReMovePageView(CPDF_Page* pPDFPage) {
+ auto it = m_pageMap.find(pPDFPage);
+ if (it == m_pageMap.end())
+ return;
- CPDFSDK_PageView* pPageView = it->second;
- if (pPageView->IsLocked())
- return;
+ CPDFSDK_PageView* pPageView = it->second;
+ if (pPageView->IsLocked())
+ return;
- delete pPageView;
- m_pageMap.erase(it);
+ delete pPageView;
+ m_pageMap.erase(it);
}
-CPDF_Page * CPDFSDK_Document::GetPage(int nIndex)
-{
- CPDF_Page * pTempPage = (CPDF_Page*)m_pEnv->FFI_GetPage(m_pDoc,nIndex);
- if(!pTempPage)
- return NULL;
- return pTempPage;
+CPDF_Page* CPDFSDK_Document::GetPage(int nIndex) {
+ CPDF_Page* pTempPage = (CPDF_Page*)m_pEnv->FFI_GetPage(m_pDoc, nIndex);
+ if (!pTempPage)
+ return NULL;
+ return pTempPage;
}
-CPDFSDK_InterForm* CPDFSDK_Document::GetInterForm()
-{
- if(!m_pInterForm)
- m_pInterForm = new CPDFSDK_InterForm(this);
- return m_pInterForm;
+CPDFSDK_InterForm* CPDFSDK_Document::GetInterForm() {
+ if (!m_pInterForm)
+ m_pInterForm = new CPDFSDK_InterForm(this);
+ return m_pInterForm;
}
-void CPDFSDK_Document::UpdateAllViews(CPDFSDK_PageView* pSender, CPDFSDK_Annot* pAnnot)
-{
- for (const auto& it : m_pageMap) {
- CPDFSDK_PageView* pPageView = it.second;
- if (pPageView != pSender) {
- pPageView->UpdateView(pAnnot);
- }
+void CPDFSDK_Document::UpdateAllViews(CPDFSDK_PageView* pSender,
+ CPDFSDK_Annot* pAnnot) {
+ for (const auto& it : m_pageMap) {
+ CPDFSDK_PageView* pPageView = it.second;
+ if (pPageView != pSender) {
+ pPageView->UpdateView(pAnnot);
}
+ }
}
-CPDFSDK_Annot* CPDFSDK_Document::GetFocusAnnot()
-{
- return m_pFocusAnnot;
+CPDFSDK_Annot* CPDFSDK_Document::GetFocusAnnot() {
+ return m_pFocusAnnot;
}
-FX_BOOL CPDFSDK_Document::SetFocusAnnot(CPDFSDK_Annot* pAnnot,FX_UINT nFlag)
-{
+FX_BOOL CPDFSDK_Document::SetFocusAnnot(CPDFSDK_Annot* pAnnot, FX_UINT nFlag) {
+ if (m_pFocusAnnot == pAnnot)
+ return TRUE;
- if(m_pFocusAnnot==pAnnot) return TRUE;
+ if (m_pFocusAnnot) {
+ if (!KillFocusAnnot(nFlag))
+ return FALSE;
+ }
+ CPDFSDK_PageView* pPageView = pAnnot->GetPageView();
+ if (pAnnot && pPageView->IsValid()) {
+ CPDFSDK_AnnotHandlerMgr* pAnnotHandler = m_pEnv->GetAnnotHandlerMgr();
- if(m_pFocusAnnot)
- {
- if(!KillFocusAnnot(nFlag) ) return FALSE;
+ if (pAnnotHandler && !m_pFocusAnnot) {
+ if (!pAnnotHandler->Annot_OnSetFocus(pAnnot, nFlag))
+ return FALSE;
+ if (!m_pFocusAnnot) {
+ m_pFocusAnnot = pAnnot;
+ return TRUE;
+ }
}
- CPDFSDK_PageView* pPageView = pAnnot->GetPageView();
- if(pAnnot && pPageView->IsValid())
- {
- CPDFSDK_AnnotHandlerMgr *pAnnotHandler=m_pEnv->GetAnnotHandlerMgr();
-
- if(pAnnotHandler&&!m_pFocusAnnot)
- {
- if (!pAnnotHandler->Annot_OnSetFocus(pAnnot,nFlag))
- return FALSE;
- if(!m_pFocusAnnot)
- {
- m_pFocusAnnot=pAnnot;
- return TRUE;
- }
+ }
+ return FALSE;
+}
+
+FX_BOOL CPDFSDK_Document::KillFocusAnnot(FX_UINT nFlag) {
+ if (m_pFocusAnnot) {
+ CPDFSDK_AnnotHandlerMgr* pAnnotHandler = m_pEnv->GetAnnotHandlerMgr();
+ if (pAnnotHandler) {
+ CPDFSDK_Annot* pFocusAnnot = m_pFocusAnnot;
+ m_pFocusAnnot = NULL;
+ if (pAnnotHandler->Annot_OnKillFocus(pFocusAnnot, nFlag)) {
+ if (pFocusAnnot->GetType() == FX_BSTRC("Widget")) {
+ CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pFocusAnnot;
+ int nFieldType = pWidget->GetFieldType();
+ if (FIELDTYPE_TEXTFIELD == nFieldType ||
+ FIELDTYPE_COMBOBOX == nFieldType)
+ m_pEnv->FFI_OnSetFieldInputFocus(NULL, NULL, 0, FALSE);
}
- }
- return FALSE;
-}
-FX_BOOL CPDFSDK_Document::KillFocusAnnot(FX_UINT nFlag)
-{
- if(m_pFocusAnnot)
- {
- CPDFSDK_AnnotHandlerMgr *pAnnotHandler=m_pEnv->GetAnnotHandlerMgr();
- if(pAnnotHandler)
- {
- CPDFSDK_Annot* pFocusAnnot = m_pFocusAnnot;
- m_pFocusAnnot = NULL;
- if(pAnnotHandler->Annot_OnKillFocus(pFocusAnnot, nFlag))
- {
-
- if(pFocusAnnot->GetType() == FX_BSTRC("Widget"))
- {
- CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pFocusAnnot;
- int nFieldType = pWidget->GetFieldType();
- if(FIELDTYPE_TEXTFIELD == nFieldType || FIELDTYPE_COMBOBOX == nFieldType)
- m_pEnv->FFI_OnSetFieldInputFocus(NULL, NULL, 0, FALSE);
- }
-
- if(!m_pFocusAnnot)
- return TRUE;
- }
- else
- {
- m_pFocusAnnot = pFocusAnnot;
- }
- }
+ if (!m_pFocusAnnot)
+ return TRUE;
+ } else {
+ m_pFocusAnnot = pFocusAnnot;
+ }
}
- return FALSE;
+ }
+ return FALSE;
}
-void CPDFSDK_Document::OnCloseDocument()
-{
- KillFocusAnnot();
+void CPDFSDK_Document::OnCloseDocument() {
+ KillFocusAnnot();
}
-FX_BOOL CPDFSDK_Document::GetPermissions(int nFlag)
-{
- FX_DWORD dwPermissions = m_pDoc->GetUserPermissions();
- return dwPermissions&nFlag;
+FX_BOOL CPDFSDK_Document::GetPermissions(int nFlag) {
+ FX_DWORD dwPermissions = m_pDoc->GetUserPermissions();
+ return dwPermissions & nFlag;
}
-IFXJS_Runtime * CPDFSDK_Document::GetJsRuntime()
-{
- ASSERT(m_pEnv!=NULL);
- return m_pEnv->GetJSRuntime();
+IFXJS_Runtime* CPDFSDK_Document::GetJsRuntime() {
+ ASSERT(m_pEnv != NULL);
+ return m_pEnv->GetJSRuntime();
}
-CFX_WideString CPDFSDK_Document::GetPath()
-{
- ASSERT(m_pEnv != NULL);
- return m_pEnv->JS_docGetFilePath();
+CFX_WideString CPDFSDK_Document::GetPath() {
+ ASSERT(m_pEnv != NULL);
+ return m_pEnv->JS_docGetFilePath();
}
+CPDFSDK_PageView::CPDFSDK_PageView(CPDFSDK_Document* pSDKDoc, CPDF_Page* page)
+ : m_page(page), m_pSDKDoc(pSDKDoc) {
+ CPDFSDK_InterForm* pInterForm = pSDKDoc->GetInterForm();
+ if (pInterForm) {
+ CPDF_InterForm* pPDFInterForm = pInterForm->GetInterForm();
+ pPDFInterForm->FixPageFields(page);
+ }
+ m_page->SetPrivateData((void*)m_page, (void*)this, NULL);
+ m_fxAnnotArray.RemoveAll();
-CPDFSDK_PageView::CPDFSDK_PageView(CPDFSDK_Document* pSDKDoc,CPDF_Page* page):m_page(page),m_pSDKDoc(pSDKDoc)
-{
- CPDFSDK_InterForm* pInterForm = pSDKDoc->GetInterForm();
- if(pInterForm)
- {
- CPDF_InterForm* pPDFInterForm = pInterForm->GetInterForm();
- pPDFInterForm->FixPageFields(page);
- }
- m_page->SetPrivateData((void*)m_page, (void*)this, NULL);
- m_fxAnnotArray.RemoveAll();
-
- m_bEnterWidget = FALSE;
- m_bExitWidget = FALSE;
- m_bOnWidget = FALSE;
- m_CaptureWidget = NULL;
- m_bValid = FALSE;
- m_bLocked = FALSE;
- m_bTakeOverPage = FALSE;
+ m_bEnterWidget = FALSE;
+ m_bExitWidget = FALSE;
+ m_bOnWidget = FALSE;
+ m_CaptureWidget = NULL;
+ m_bValid = FALSE;
+ m_bLocked = FALSE;
+ m_bTakeOverPage = FALSE;
}
-CPDFSDK_PageView::~CPDFSDK_PageView()
-{
- CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
- int nAnnotCount = m_fxAnnotArray.GetSize();
-
- for (int i=0; i<nAnnotCount; i++)
- {
- CPDFSDK_Annot* pAnnot = (CPDFSDK_Annot*)m_fxAnnotArray.GetAt(i);
- //if there is a focused annot on the page, we should kill the focus first.
- if(pAnnot == m_pSDKDoc->GetFocusAnnot())
- KillFocusAnnot();
- CPDFSDK_AnnotHandlerMgr* pAnnotHandlerMgr = pEnv->GetAnnotHandlerMgr();
- ASSERT(pAnnotHandlerMgr);
- pAnnotHandlerMgr->ReleaseAnnot(pAnnot);
- }
- m_fxAnnotArray.RemoveAll();
-
- delete m_pAnnotList;
- m_pAnnotList = NULL;
+CPDFSDK_PageView::~CPDFSDK_PageView() {
+ CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
+ int nAnnotCount = m_fxAnnotArray.GetSize();
- m_page->RemovePrivateData((void*)m_page);
- if(m_bTakeOverPage) {
- delete m_page;
- }
-}
+ for (int i = 0; i < nAnnotCount; i++) {
+ CPDFSDK_Annot* pAnnot = (CPDFSDK_Annot*)m_fxAnnotArray.GetAt(i);
+ // if there is a focused annot on the page, we should kill the focus first.
+ if (pAnnot == m_pSDKDoc->GetFocusAnnot())
+ KillFocusAnnot();
+ CPDFSDK_AnnotHandlerMgr* pAnnotHandlerMgr = pEnv->GetAnnotHandlerMgr();
+ ASSERT(pAnnotHandlerMgr);
+ pAnnotHandlerMgr->ReleaseAnnot(pAnnot);
+ }
+ m_fxAnnotArray.RemoveAll();
-void CPDFSDK_PageView::PageView_OnDraw(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device,CPDF_RenderOptions* pOptions)
-{
- m_curMatrix = *pUser2Device;
+ delete m_pAnnotList;
+ m_pAnnotList = NULL;
- CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
- CPDFSDK_AnnotIterator annotIterator(this, TRUE);
- CPDFSDK_Annot* pSDKAnnot = nullptr;
- int index = -1;
- while ((pSDKAnnot = annotIterator.Next(index))) {
- CPDFSDK_AnnotHandlerMgr* pAnnotHandlerMgr = pEnv->GetAnnotHandlerMgr();
- ASSERT(pAnnotHandlerMgr);
- pAnnotHandlerMgr->Annot_OnDraw(
- this, pSDKAnnot, pDevice, pUser2Device, 0);
- }
+ m_page->RemovePrivateData((void*)m_page);
+ if (m_bTakeOverPage) {
+ delete m_page;
+ }
}
-CPDF_Annot* CPDFSDK_PageView::GetPDFAnnotAtPoint(FX_FLOAT pageX, FX_FLOAT pageY)
-{
+void CPDFSDK_PageView::PageView_OnDraw(CFX_RenderDevice* pDevice,
+ CPDF_Matrix* pUser2Device,
+ CPDF_RenderOptions* pOptions) {
+ m_curMatrix = *pUser2Device;
- int nCount = m_pAnnotList->Count();
- for(int i = 0 ; i<nCount; i++)
- {
- CPDF_Annot* pAnnot = m_pAnnotList->GetAt(i);
- CFX_FloatRect annotRect;
- pAnnot->GetRect(annotRect);
- if(annotRect.Contains(pageX, pageY))
- return pAnnot;
+ CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
+ CPDFSDK_AnnotIterator annotIterator(this, TRUE);
+ CPDFSDK_Annot* pSDKAnnot = nullptr;
+ int index = -1;
+ while ((pSDKAnnot = annotIterator.Next(index))) {
+ CPDFSDK_AnnotHandlerMgr* pAnnotHandlerMgr = pEnv->GetAnnotHandlerMgr();
+ ASSERT(pAnnotHandlerMgr);
+ pAnnotHandlerMgr->Annot_OnDraw(this, pSDKAnnot, pDevice, pUser2Device, 0);
+ }
+}
+
+CPDF_Annot* CPDFSDK_PageView::GetPDFAnnotAtPoint(FX_FLOAT pageX,
+ FX_FLOAT pageY) {
+ int nCount = m_pAnnotList->Count();
+ for (int i = 0; i < nCount; i++) {
+ CPDF_Annot* pAnnot = m_pAnnotList->GetAt(i);
+ CFX_FloatRect annotRect;
+ pAnnot->GetRect(annotRect);
+ if (annotRect.Contains(pageX, pageY))
+ return pAnnot;
+ }
+ return NULL;
+}
+
+CPDF_Annot* CPDFSDK_PageView::GetPDFWidgetAtPoint(FX_FLOAT pageX,
+ FX_FLOAT pageY) {
+ int nCount = m_pAnnotList->Count();
+ for (int i = 0; i < nCount; i++) {
+ CPDF_Annot* pAnnot = m_pAnnotList->GetAt(i);
+ if (pAnnot->GetSubType() == "Widget") {
+ CFX_FloatRect annotRect;
+ pAnnot->GetRect(annotRect);
+ if (annotRect.Contains(pageX, pageY))
+ return pAnnot;
}
- return NULL;
-}
+ }
+ return NULL;
+}
+
+CPDFSDK_Annot* CPDFSDK_PageView::GetFXAnnotAtPoint(FX_FLOAT pageX,
+ FX_FLOAT pageY) {
+ CPDFSDK_AnnotIterator annotIterator(this, FALSE);
+ CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
+ CPDFSDK_AnnotHandlerMgr* pAnnotMgr = pEnv->GetAnnotHandlerMgr();
+ CPDFSDK_Annot* pSDKAnnot = NULL;
+ int index = -1;
+ while ((pSDKAnnot = annotIterator.Next(index))) {
+ CPDF_Rect rc = pAnnotMgr->Annot_OnGetViewBBox(this, pSDKAnnot);
+ if (rc.Contains(pageX, pageY))
+ return pSDKAnnot;
+ }
+
+ return NULL;
+}
+
+CPDFSDK_Annot* CPDFSDK_PageView::GetFXWidgetAtPoint(FX_FLOAT pageX,
+ FX_FLOAT pageY) {
+ CPDFSDK_AnnotIterator annotIterator(this, FALSE);
+ CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
+ CPDFSDK_AnnotHandlerMgr* pAnnotMgr = pEnv->GetAnnotHandlerMgr();
+ CPDFSDK_Annot* pSDKAnnot = NULL;
+ int index = -1;
+ while ((pSDKAnnot = annotIterator.Next(index))) {
+ if (pSDKAnnot->GetType() == "Widget") {
+ pAnnotMgr->Annot_OnGetViewBBox(this, pSDKAnnot);
+ CPDF_Point point(pageX, pageY);
+ if (pAnnotMgr->Annot_OnHitTest(this, pSDKAnnot, point))
+ return pSDKAnnot;
+ }
+ }
-CPDF_Annot* CPDFSDK_PageView::GetPDFWidgetAtPoint(FX_FLOAT pageX, FX_FLOAT pageY)
-{
+ return NULL;
+}
- int nCount = m_pAnnotList->Count();
- for(int i = 0 ; i<nCount; i++)
- {
- CPDF_Annot* pAnnot = m_pAnnotList->GetAt(i);
- if(pAnnot->GetSubType() == "Widget")
- {
- CFX_FloatRect annotRect;
- pAnnot->GetRect(annotRect);
- if(annotRect.Contains(pageX, pageY))
- return pAnnot;
- }
- }
- return NULL;
+FX_BOOL CPDFSDK_PageView::Annot_HasAppearance(CPDF_Annot* pAnnot) {
+ CPDF_Dictionary* pAnnotDic = pAnnot->GetAnnotDict();
+ if (pAnnotDic)
+ return pAnnotDic->KeyExist("AS");
+ return FALSE;
}
-CPDFSDK_Annot* CPDFSDK_PageView::GetFXAnnotAtPoint(FX_FLOAT pageX, FX_FLOAT pageY)
-{
+CPDFSDK_Annot* CPDFSDK_PageView::AddAnnot(CPDF_Annot* pPDFAnnot) {
+ CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
+ ASSERT(pEnv);
+ CPDFSDK_AnnotHandlerMgr* pAnnotHandler = pEnv->GetAnnotHandlerMgr();
- CPDFSDK_AnnotIterator annotIterator(this, FALSE);
- CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
- CPDFSDK_AnnotHandlerMgr* pAnnotMgr = pEnv->GetAnnotHandlerMgr();
- CPDFSDK_Annot* pSDKAnnot = NULL;
- int index = -1;
- while((pSDKAnnot = annotIterator.Next(index)))
- {
- CPDF_Rect rc = pAnnotMgr->Annot_OnGetViewBBox(this, pSDKAnnot);
- if(rc.Contains(pageX, pageY))
- return pSDKAnnot;
- }
+ CPDFSDK_Annot* pSDKAnnot = NULL;
+ if (pAnnotHandler) {
+ pSDKAnnot = pAnnotHandler->NewAnnot(pPDFAnnot, this);
+ }
+ if (!pSDKAnnot)
return NULL;
-}
-CPDFSDK_Annot* CPDFSDK_PageView::GetFXWidgetAtPoint(FX_FLOAT pageX, FX_FLOAT pageY)
-{
+ m_fxAnnotArray.Add(pSDKAnnot);
- CPDFSDK_AnnotIterator annotIterator(this, FALSE);
- CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
- CPDFSDK_AnnotHandlerMgr* pAnnotMgr = pEnv->GetAnnotHandlerMgr();
- CPDFSDK_Annot* pSDKAnnot = NULL;
- int index = -1;
- while((pSDKAnnot = annotIterator.Next(index)))
- {
- if(pSDKAnnot->GetType() == "Widget")
- {
- pAnnotMgr->Annot_OnGetViewBBox(this, pSDKAnnot);
- CPDF_Point point(pageX, pageY);
- if (pAnnotMgr->Annot_OnHitTest(this, pSDKAnnot, point))
- return pSDKAnnot;
- }
- }
+ if (pAnnotHandler) {
+ pAnnotHandler->Annot_OnCreate(pSDKAnnot);
+ }
- return NULL;
+ return pSDKAnnot;
}
-
-FX_BOOL CPDFSDK_PageView::Annot_HasAppearance(CPDF_Annot* pAnnot)
-{
- CPDF_Dictionary* pAnnotDic = pAnnot->GetAnnotDict();
- if(pAnnotDic)
- return pAnnotDic->KeyExist("AS");
- return FALSE;
+CPDFSDK_Annot* CPDFSDK_PageView::AddAnnot(CPDF_Dictionary* pDict) {
+ return pDict ? AddAnnot(pDict->GetString("Subtype"), pDict) : nullptr;
}
-CPDFSDK_Annot* CPDFSDK_PageView::AddAnnot(CPDF_Annot * pPDFAnnot)
-{
- CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
- ASSERT(pEnv);
- CPDFSDK_AnnotHandlerMgr * pAnnotHandler= pEnv->GetAnnotHandlerMgr();
-
- CPDFSDK_Annot* pSDKAnnot =NULL;
-
- if(pAnnotHandler)
- {
- pSDKAnnot = pAnnotHandler->NewAnnot(pPDFAnnot, this);
- }
- if(!pSDKAnnot)
- return NULL;
-
- m_fxAnnotArray.Add(pSDKAnnot);
-
- if(pAnnotHandler)
- {
- pAnnotHandler->Annot_OnCreate(pSDKAnnot);
-
- }
-
- return pSDKAnnot;
+CPDFSDK_Annot* CPDFSDK_PageView::AddAnnot(const FX_CHAR* lpSubType,
+ CPDF_Dictionary* pDict) {
+ return NULL;
}
-CPDFSDK_Annot* CPDFSDK_PageView::AddAnnot(CPDF_Dictionary * pDict)
-{
- return pDict ? AddAnnot(pDict->GetString("Subtype"), pDict) : nullptr;
+FX_BOOL CPDFSDK_PageView::DeleteAnnot(CPDFSDK_Annot* pAnnot) {
+ return FALSE;
}
-CPDFSDK_Annot* CPDFSDK_PageView::AddAnnot(const FX_CHAR* lpSubType,CPDF_Dictionary * pDict)
-{
- return NULL;
+CPDF_Document* CPDFSDK_PageView::GetPDFDocument() {
+ if (m_page) {
+ return m_page->m_pDocument;
+ }
+ return NULL;
}
-FX_BOOL CPDFSDK_PageView::DeleteAnnot(CPDFSDK_Annot* pAnnot)
-{
- return FALSE;
+int CPDFSDK_PageView::CountAnnots() {
+ return m_pAnnotList->Count();
}
-CPDF_Document* CPDFSDK_PageView::GetPDFDocument()
-{
- if(m_page)
- {
- return m_page->m_pDocument;
- }
+CPDFSDK_Annot* CPDFSDK_PageView::GetAnnot(int nIndex) {
+ int nCount = m_fxAnnotArray.GetSize();
+ if (nIndex < 0 || nIndex >= nCount) {
return NULL;
-}
+ }
-int CPDFSDK_PageView::CountAnnots()
-{
- return m_pAnnotList->Count();
+ return (CPDFSDK_Annot*)m_fxAnnotArray.GetAt(nIndex);
}
-CPDFSDK_Annot* CPDFSDK_PageView::GetAnnot(int nIndex)
-{
- int nCount = m_fxAnnotArray.GetSize();
- if ( nIndex < 0 || nIndex >= nCount )
- {
- return NULL;
- }
-
- return (CPDFSDK_Annot*)m_fxAnnotArray.GetAt(nIndex);
+CPDFSDK_Annot* CPDFSDK_PageView::GetAnnotByDict(CPDF_Dictionary* pDict) {
+ int nCount = m_fxAnnotArray.GetSize();
+ for (int i = 0; i < nCount; i++) {
+ CPDFSDK_Annot* pAnnot = (CPDFSDK_Annot*)m_fxAnnotArray.GetAt(i);
+ if (pDict == pAnnot->GetPDFAnnot()->GetAnnotDict())
+ return pAnnot;
+ }
+ return NULL;
}
-CPDFSDK_Annot* CPDFSDK_PageView::GetAnnotByDict(CPDF_Dictionary * pDict)
-{
- int nCount = m_fxAnnotArray.GetSize();
- for(int i=0; i<nCount; i++)
- {
- CPDFSDK_Annot* pAnnot = (CPDFSDK_Annot*)m_fxAnnotArray.GetAt(i);
- if (pDict == pAnnot->GetPDFAnnot()->GetAnnotDict())
- return pAnnot;
- }
- return NULL;
-}
+FX_BOOL CPDFSDK_PageView::OnLButtonDown(const CPDF_Point& point,
+ FX_UINT nFlag) {
+ CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
+ ASSERT(pEnv);
+ CPDFSDK_Annot* pFXAnnot = GetFXWidgetAtPoint(point.x, point.y);
+ if (!pFXAnnot) {
+ KillFocusAnnot(nFlag);
+ } else {
+ CPDFSDK_AnnotHandlerMgr* pAnnotHandlerMgr = pEnv->GetAnnotHandlerMgr();
+ ASSERT(pAnnotHandlerMgr);
-FX_BOOL CPDFSDK_PageView::OnLButtonDown(const CPDF_Point & point, FX_UINT nFlag)
-{
- CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
- ASSERT(pEnv);
- CPDFSDK_Annot* pFXAnnot = GetFXWidgetAtPoint(point.x, point.y);
- if(!pFXAnnot)
- {
- KillFocusAnnot(nFlag);
+ FX_BOOL bRet =
+ pAnnotHandlerMgr->Annot_OnLButtonDown(this, pFXAnnot, nFlag, point);
+ if (bRet) {
+ SetFocusAnnot(pFXAnnot);
}
- else
- {
- CPDFSDK_AnnotHandlerMgr* pAnnotHandlerMgr = pEnv->GetAnnotHandlerMgr();
- ASSERT(pAnnotHandlerMgr);
-
- FX_BOOL bRet = pAnnotHandlerMgr->Annot_OnLButtonDown(this, pFXAnnot, nFlag,point);
- if(bRet)
- {
- SetFocusAnnot(pFXAnnot);
- }
- return bRet;
+ return bRet;
+ }
+ return FALSE;
+}
+
+FX_BOOL CPDFSDK_PageView::OnLButtonUp(const CPDF_Point& point, FX_UINT nFlag) {
+ CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
+ ASSERT(pEnv);
+ CPDFSDK_AnnotHandlerMgr* pAnnotHandlerMgr = pEnv->GetAnnotHandlerMgr();
+ ASSERT(pAnnotHandlerMgr);
+ CPDFSDK_Annot* pFXAnnot = GetFXWidgetAtPoint(point.x, point.y);
+ CPDFSDK_Annot* pFocusAnnot = GetFocusAnnot();
+ FX_BOOL bRet = FALSE;
+ if (pFocusAnnot && pFocusAnnot != pFXAnnot) {
+ // Last focus Annot gets a chance to handle the event.
+ bRet = pAnnotHandlerMgr->Annot_OnLButtonUp(this, pFocusAnnot, nFlag, point);
+ }
+ if (pFXAnnot && !bRet) {
+ bRet = pAnnotHandlerMgr->Annot_OnLButtonUp(this, pFXAnnot, nFlag, point);
+ return bRet;
+ }
+ return bRet;
+}
+
+FX_BOOL CPDFSDK_PageView::OnMouseMove(const CPDF_Point& point, int nFlag) {
+ CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
+ CPDFSDK_AnnotHandlerMgr* pAnnotHandlerMgr = pEnv->GetAnnotHandlerMgr();
+ ASSERT(pAnnotHandlerMgr);
+ if (CPDFSDK_Annot* pFXAnnot = GetFXWidgetAtPoint(point.x, point.y)) {
+ if (m_CaptureWidget && m_CaptureWidget != pFXAnnot) {
+ m_bExitWidget = TRUE;
+ m_bEnterWidget = FALSE;
+ pAnnotHandlerMgr->Annot_OnMouseExit(this, m_CaptureWidget, nFlag);
}
- return FALSE;
+ m_CaptureWidget = (CPDFSDK_Widget*)pFXAnnot;
+ m_bOnWidget = TRUE;
+ if (!m_bEnterWidget) {
+ m_bEnterWidget = TRUE;
+ m_bExitWidget = FALSE;
+ pAnnotHandlerMgr->Annot_OnMouseEnter(this, pFXAnnot, nFlag);
+ }
+ pAnnotHandlerMgr->Annot_OnMouseMove(this, pFXAnnot, nFlag, point);
+ return TRUE;
+ }
+ if (m_bOnWidget) {
+ m_bOnWidget = FALSE;
+ m_bExitWidget = TRUE;
+ m_bEnterWidget = FALSE;
+ if (m_CaptureWidget) {
+ pAnnotHandlerMgr->Annot_OnMouseExit(this, m_CaptureWidget, nFlag);
+ m_CaptureWidget = NULL;
+ }
+ }
+ return FALSE;
}
-
-FX_BOOL CPDFSDK_PageView::OnLButtonUp(const CPDF_Point & point, FX_UINT nFlag)
-{
+FX_BOOL CPDFSDK_PageView::OnMouseWheel(double deltaX,
+ double deltaY,
+ const CPDF_Point& point,
+ int nFlag) {
+ if (CPDFSDK_Annot* pAnnot = GetFXWidgetAtPoint(point.x, point.y)) {
CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
- ASSERT(pEnv);
CPDFSDK_AnnotHandlerMgr* pAnnotHandlerMgr = pEnv->GetAnnotHandlerMgr();
ASSERT(pAnnotHandlerMgr);
- CPDFSDK_Annot* pFXAnnot = GetFXWidgetAtPoint(point.x, point.y);
- CPDFSDK_Annot* pFocusAnnot = GetFocusAnnot();
- FX_BOOL bRet = FALSE;
- if(pFocusAnnot && pFocusAnnot != pFXAnnot)
- {
- //Last focus Annot gets a chance to handle the event.
- bRet = pAnnotHandlerMgr->Annot_OnLButtonUp(this, pFocusAnnot, nFlag,point);
- }
- if(pFXAnnot && !bRet)
- {
- bRet = pAnnotHandlerMgr->Annot_OnLButtonUp(this, pFXAnnot, nFlag,point);
- return bRet;
- }
- return bRet;
+ return pAnnotHandlerMgr->Annot_OnMouseWheel(this, pAnnot, nFlag,
+ (int)deltaY, point);
+ }
+ return FALSE;
}
-FX_BOOL CPDFSDK_PageView::OnMouseMove(const CPDF_Point & point, int nFlag)
-{
-
+FX_BOOL CPDFSDK_PageView::OnChar(int nChar, FX_UINT nFlag) {
+ if (CPDFSDK_Annot* pAnnot = GetFocusAnnot()) {
CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
CPDFSDK_AnnotHandlerMgr* pAnnotHandlerMgr = pEnv->GetAnnotHandlerMgr();
ASSERT(pAnnotHandlerMgr);
- if(CPDFSDK_Annot* pFXAnnot = GetFXWidgetAtPoint(point.x, point.y))
- {
- if(m_CaptureWidget && m_CaptureWidget != pFXAnnot)
- {
- m_bExitWidget = TRUE;
- m_bEnterWidget = FALSE;
- pAnnotHandlerMgr->Annot_OnMouseExit(this, m_CaptureWidget, nFlag);
- }
- m_CaptureWidget = (CPDFSDK_Widget*)pFXAnnot;
- m_bOnWidget = TRUE;
- if(!m_bEnterWidget)
- {
- m_bEnterWidget = TRUE;
- m_bExitWidget = FALSE;
- pAnnotHandlerMgr->Annot_OnMouseEnter(this, pFXAnnot,nFlag);
- }
- pAnnotHandlerMgr->Annot_OnMouseMove(this, pFXAnnot, nFlag, point);
- return TRUE;
- }
- if(m_bOnWidget)
- {
- m_bOnWidget = FALSE;
- m_bExitWidget = TRUE;
- m_bEnterWidget = FALSE;
- if(m_CaptureWidget)
- {
- pAnnotHandlerMgr->Annot_OnMouseExit(this, m_CaptureWidget, nFlag);
- m_CaptureWidget = NULL;
- }
- }
- return FALSE;
-}
-
-FX_BOOL CPDFSDK_PageView::OnMouseWheel(double deltaX, double deltaY,const CPDF_Point& point, int nFlag)
-{
- if(CPDFSDK_Annot* pAnnot = GetFXWidgetAtPoint(point.x, point.y))
- {
- CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
- CPDFSDK_AnnotHandlerMgr* pAnnotHandlerMgr = pEnv->GetAnnotHandlerMgr();
- ASSERT(pAnnotHandlerMgr);
- return pAnnotHandlerMgr->Annot_OnMouseWheel(this, pAnnot, nFlag, (int)deltaY, point);
- }
- return FALSE;
+ return pAnnotHandlerMgr->Annot_OnChar(pAnnot, nChar, nFlag);
+ }
+ return FALSE;
}
-FX_BOOL CPDFSDK_PageView::OnChar(int nChar, FX_UINT nFlag)
-{
- if(CPDFSDK_Annot* pAnnot = GetFocusAnnot())
- {
- CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
- CPDFSDK_AnnotHandlerMgr* pAnnotHandlerMgr = pEnv->GetAnnotHandlerMgr();
- ASSERT(pAnnotHandlerMgr);
- return pAnnotHandlerMgr->Annot_OnChar(pAnnot, nChar, nFlag);
- }
-
- return FALSE;
+FX_BOOL CPDFSDK_PageView::OnKeyDown(int nKeyCode, int nFlag) {
+ if (CPDFSDK_Annot* pAnnot = GetFocusAnnot()) {
+ CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
+ CPDFSDK_AnnotHandlerMgr* pAnnotHandlerMgr = pEnv->GetAnnotHandlerMgr();
+ ASSERT(pAnnotHandlerMgr);
+ return pAnnotHandlerMgr->Annot_OnKeyDown(pAnnot, nKeyCode, nFlag);
+ }
+ return FALSE;
}
-FX_BOOL CPDFSDK_PageView::OnKeyDown(int nKeyCode, int nFlag)
-{
- if(CPDFSDK_Annot* pAnnot = GetFocusAnnot())
- {
- CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
- CPDFSDK_AnnotHandlerMgr* pAnnotHandlerMgr = pEnv->GetAnnotHandlerMgr();
- ASSERT(pAnnotHandlerMgr);
- return pAnnotHandlerMgr->Annot_OnKeyDown(pAnnot, nKeyCode, nFlag);
- }
- return FALSE;
+FX_BOOL CPDFSDK_PageView::OnKeyUp(int nKeyCode, int nFlag) {
+ // if(CPDFSDK_Annot* pAnnot = GetFocusAnnot())
+ // {
+ // CFFL_IFormFiller* pIFormFiller = g_pFormFillApp->GetIFormFiller();
+ // return pIFormFiller->OnKeyUp(pAnnot, nKeyCode, nFlag);
+ // }
+ return FALSE;
}
-FX_BOOL CPDFSDK_PageView::OnKeyUp(int nKeyCode, int nFlag)
-{
-// if(CPDFSDK_Annot* pAnnot = GetFocusAnnot())
-// {
-// CFFL_IFormFiller* pIFormFiller = g_pFormFillApp->GetIFormFiller();
-// return pIFormFiller->OnKeyUp(pAnnot, nKeyCode, nFlag);
-// }
- return FALSE;
-}
+extern void CheckUnSupportAnnot(CPDF_Document* pDoc, CPDF_Annot* pPDFAnnot);
-extern void CheckUnSupportAnnot(CPDF_Document * pDoc, CPDF_Annot* pPDFAnnot);
+void CPDFSDK_PageView::LoadFXAnnots() {
+ CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
-void CPDFSDK_PageView::LoadFXAnnots()
-{
- CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
+ FX_BOOL enableAPUpdate = CPDF_InterForm::UpdatingAPEnabled();
+ // Disable the default AP construction.
+ CPDF_InterForm::EnableUpdateAP(FALSE);
+ m_pAnnotList = new CPDF_AnnotList(m_page);
+ CPDF_InterForm::EnableUpdateAP(enableAPUpdate);
+ int nCount = m_pAnnotList->Count();
+ SetLock(TRUE);
+ for (int i = 0; i < nCount; i++) {
+ CPDF_Annot* pPDFAnnot = m_pAnnotList->GetAt(i);
+ CPDF_Document* pDoc = GetPDFDocument();
- FX_BOOL enableAPUpdate = CPDF_InterForm::UpdatingAPEnabled();
- //Disable the default AP construction.
- CPDF_InterForm::EnableUpdateAP(FALSE);
- m_pAnnotList = new CPDF_AnnotList(m_page);
- CPDF_InterForm::EnableUpdateAP(enableAPUpdate);
- int nCount = m_pAnnotList->Count();
- SetLock(TRUE);
- for(int i=0; i<nCount; i++)
- {
- CPDF_Annot* pPDFAnnot = m_pAnnotList->GetAt(i);
- CPDF_Document * pDoc = GetPDFDocument();
-
- CheckUnSupportAnnot(pDoc, pPDFAnnot);
-
- CPDFSDK_AnnotHandlerMgr* pAnnotHandlerMgr = pEnv->GetAnnotHandlerMgr();
- ASSERT(pAnnotHandlerMgr != NULL);
-
- if(pAnnotHandlerMgr)
- {
- CPDFSDK_Annot* pAnnot = pAnnotHandlerMgr->NewAnnot(pPDFAnnot, this);
- if(!pAnnot)
- continue;
- m_fxAnnotArray.Add(pAnnot);
-
- pAnnotHandlerMgr->Annot_OnLoad(pAnnot);
- }
+ CheckUnSupportAnnot(pDoc, pPDFAnnot);
- }
- SetLock(FALSE);
-}
+ CPDFSDK_AnnotHandlerMgr* pAnnotHandlerMgr = pEnv->GetAnnotHandlerMgr();
+ ASSERT(pAnnotHandlerMgr != NULL);
+
+ if (pAnnotHandlerMgr) {
+ CPDFSDK_Annot* pAnnot = pAnnotHandlerMgr->NewAnnot(pPDFAnnot, this);
+ if (!pAnnot)
+ continue;
+ m_fxAnnotArray.Add(pAnnot);
-void CPDFSDK_PageView::UpdateRects(CFX_RectArray& rects)
-{
- for(int i=0; i<rects.GetSize(); i++)
- {
- CPDF_Rect rc = rects.GetAt(i);
- CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
- pEnv->FFI_Invalidate(m_page, rc.left, rc.top, rc.right, rc.bottom);
+ pAnnotHandlerMgr->Annot_OnLoad(pAnnot);
}
+ }
+ SetLock(FALSE);
}
-void CPDFSDK_PageView::UpdateView(CPDFSDK_Annot* pAnnot)
-{
- CPDF_Rect rcWindow = pAnnot->GetRect();
+void CPDFSDK_PageView::UpdateRects(CFX_RectArray& rects) {
+ for (int i = 0; i < rects.GetSize(); i++) {
+ CPDF_Rect rc = rects.GetAt(i);
CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
- pEnv->FFI_Invalidate(
- m_page, rcWindow.left, rcWindow.top, rcWindow.right, rcWindow.bottom);
-}
-
-int CPDFSDK_PageView::GetPageIndex()
-{
- if(m_page)
- {
- CPDF_Dictionary* pDic = m_page->m_pFormDict;
- CPDF_Document* pDoc = m_pSDKDoc->GetDocument();
- if(pDoc && pDic)
- {
- return pDoc->GetPageIndex(pDic->GetObjNum());
- }
- }
- return -1;
+ pEnv->FFI_Invalidate(m_page, rc.left, rc.top, rc.right, rc.bottom);
+ }
}
-FX_BOOL CPDFSDK_PageView::IsValidAnnot(void* p)
-{
- if (p == NULL) return FALSE;
- int iCount = m_pAnnotList->Count();
- for (int i = 0; i < iCount; i++)
- {
- if (m_pAnnotList->GetAt(i) == p)
- return TRUE;
- }
- return FALSE;
+void CPDFSDK_PageView::UpdateView(CPDFSDK_Annot* pAnnot) {
+ CPDF_Rect rcWindow = pAnnot->GetRect();
+ CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
+ pEnv->FFI_Invalidate(m_page, rcWindow.left, rcWindow.top, rcWindow.right,
+ rcWindow.bottom);
}
+int CPDFSDK_PageView::GetPageIndex() {
+ if (m_page) {
+ CPDF_Dictionary* pDic = m_page->m_pFormDict;
+ CPDF_Document* pDoc = m_pSDKDoc->GetDocument();
+ if (pDoc && pDic) {
+ return pDoc->GetPageIndex(pDic->GetObjNum());
+ }
+ }
+ return -1;
+}
-CPDFSDK_Annot* CPDFSDK_PageView::GetFocusAnnot()
-{
- CPDFSDK_Annot* pFocusAnnot = m_pSDKDoc->GetFocusAnnot();
- if(!pFocusAnnot)
- return NULL;
+FX_BOOL CPDFSDK_PageView::IsValidAnnot(void* p) {
+ if (p == NULL)
+ return FALSE;
+ int iCount = m_pAnnotList->Count();
+ for (int i = 0; i < iCount; i++) {
+ if (m_pAnnotList->GetAt(i) == p)
+ return TRUE;
+ }
+ return FALSE;
+}
- for(int i=0; i<m_fxAnnotArray.GetSize(); i++)
- {
- CPDFSDK_Annot* pAnnot = (CPDFSDK_Annot*)m_fxAnnotArray.GetAt(i);
- if(pAnnot == pFocusAnnot)
- return pAnnot;
- }
+CPDFSDK_Annot* CPDFSDK_PageView::GetFocusAnnot() {
+ CPDFSDK_Annot* pFocusAnnot = m_pSDKDoc->GetFocusAnnot();
+ if (!pFocusAnnot)
return NULL;
+
+ for (int i = 0; i < m_fxAnnotArray.GetSize(); i++) {
+ CPDFSDK_Annot* pAnnot = (CPDFSDK_Annot*)m_fxAnnotArray.GetAt(i);
+ if (pAnnot == pFocusAnnot)
+ return pAnnot;
+ }
+ return NULL;
}
diff --git a/fpdfsdk/src/fsdk_rendercontext.cpp b/fpdfsdk/src/fsdk_rendercontext.cpp
index f96db94150..1320824236 100644
--- a/fpdfsdk/src/fsdk_rendercontext.cpp
+++ b/fpdfsdk/src/fsdk_rendercontext.cpp
@@ -6,42 +6,39 @@
#include "../include/fsdk_rendercontext.h"
-void CRenderContext::Clear()
-{
- m_pDevice = NULL;
- m_pContext = NULL;
- m_pRenderer = NULL;
- m_pAnnots = NULL;
- m_pOptions = NULL;
+void CRenderContext::Clear() {
+ m_pDevice = NULL;
+ m_pContext = NULL;
+ m_pRenderer = NULL;
+ m_pAnnots = NULL;
+ m_pOptions = NULL;
#ifdef _WIN32_WCE
- m_pBitmap = NULL;
- m_hBitmap = NULL;
+ m_pBitmap = NULL;
+ m_hBitmap = NULL;
#endif
}
-CRenderContext::~CRenderContext()
-{
- delete m_pRenderer;
- delete m_pContext;
- delete m_pDevice;
- delete m_pAnnots;
- delete m_pOptions->m_pOCContext;
- delete m_pOptions;
+CRenderContext::~CRenderContext() {
+ delete m_pRenderer;
+ delete m_pContext;
+ delete m_pDevice;
+ delete m_pAnnots;
+ delete m_pOptions->m_pOCContext;
+ delete m_pOptions;
#ifdef _WIN32_WCE
- delete m_pBitmap;
- if (m_hBitmap) DeleteObject(m_hBitmap);
+ delete m_pBitmap;
+ if (m_hBitmap)
+ DeleteObject(m_hBitmap);
#endif
}
-IFSDK_PAUSE_Adapter::IFSDK_PAUSE_Adapter(IFSDK_PAUSE* IPause )
-{
- m_IPause = IPause;
+IFSDK_PAUSE_Adapter::IFSDK_PAUSE_Adapter(IFSDK_PAUSE* IPause) {
+ m_IPause = IPause;
}
-FX_BOOL IFSDK_PAUSE_Adapter::NeedToPauseNow()
-{
- if (m_IPause->NeedToPauseNow) {
- return m_IPause->NeedToPauseNow(m_IPause);
- }
- return FALSE;
+FX_BOOL IFSDK_PAUSE_Adapter::NeedToPauseNow() {
+ if (m_IPause->NeedToPauseNow) {
+ return m_IPause->NeedToPauseNow(m_IPause);
+ }
+ return FALSE;
}
diff --git a/fpdfsdk/src/fxedit/fxet_ap.cpp b/fpdfsdk/src/fxedit/fxet_ap.cpp
index 309a98f41e..b9900d899b 100644
--- a/fpdfsdk/src/fxedit/fxet_ap.cpp
+++ b/fpdfsdk/src/fxedit/fxet_ap.cpp
@@ -8,218 +8,206 @@
#include "../../include/fxedit/fx_edit.h"
#include "../../include/fxedit/fxet_edit.h"
-CFX_ByteString GetPDFWordString(IFX_Edit_FontMap * pFontMap, int32_t nFontIndex, FX_WORD Word, FX_WORD SubWord)
-{
- ASSERT (pFontMap != NULL);
-
- CFX_ByteString sWord;
-
- if (CPDF_Font * pPDFFont = pFontMap->GetPDFFont(nFontIndex))
- {
- if (SubWord > 0)
- {
- Word = SubWord;
- }
- else
- {
- FX_DWORD dwCharCode = -1;
-
- if (pPDFFont->IsUnicodeCompatible())
- dwCharCode = pPDFFont->CharCodeFromUnicode(Word);
- else
- dwCharCode = pFontMap->CharCodeFromUnicode(nFontIndex, Word);
-
- if (dwCharCode > 0 )
- {
- pPDFFont->AppendChar(sWord, dwCharCode);
- return sWord;
- }
- }
-
- pPDFFont->AppendChar(sWord, Word);
- }
-
- return sWord;
+CFX_ByteString GetPDFWordString(IFX_Edit_FontMap* pFontMap,
+ int32_t nFontIndex,
+ FX_WORD Word,
+ FX_WORD SubWord) {
+ ASSERT(pFontMap != NULL);
+
+ CFX_ByteString sWord;
+
+ if (CPDF_Font* pPDFFont = pFontMap->GetPDFFont(nFontIndex)) {
+ if (SubWord > 0) {
+ Word = SubWord;
+ } else {
+ FX_DWORD dwCharCode = -1;
+
+ if (pPDFFont->IsUnicodeCompatible())
+ dwCharCode = pPDFFont->CharCodeFromUnicode(Word);
+ else
+ dwCharCode = pFontMap->CharCodeFromUnicode(nFontIndex, Word);
+
+ if (dwCharCode > 0) {
+ pPDFFont->AppendChar(sWord, dwCharCode);
+ return sWord;
+ }
+ }
+
+ pPDFFont->AppendChar(sWord, Word);
+ }
+
+ return sWord;
}
-static CFX_ByteString GetWordRenderString(const CFX_ByteString & strWords)
-{
- if (strWords.GetLength() > 0)
- return PDF_EncodeString(strWords) + " Tj\n";
+static CFX_ByteString GetWordRenderString(const CFX_ByteString& strWords) {
+ if (strWords.GetLength() > 0)
+ return PDF_EncodeString(strWords) + " Tj\n";
- return "";
+ return "";
}
-static CFX_ByteString GetFontSetString(IFX_Edit_FontMap * pFontMap, int32_t nFontIndex, FX_FLOAT fFontSize)
-{
- CFX_ByteTextBuf sRet;
+static CFX_ByteString GetFontSetString(IFX_Edit_FontMap* pFontMap,
+ int32_t nFontIndex,
+ FX_FLOAT fFontSize) {
+ CFX_ByteTextBuf sRet;
- if (pFontMap)
- {
- CFX_ByteString sFontAlias = pFontMap->GetPDFFontAlias(nFontIndex);
+ if (pFontMap) {
+ CFX_ByteString sFontAlias = pFontMap->GetPDFFontAlias(nFontIndex);
- if (sFontAlias.GetLength() > 0 && fFontSize > 0 )
- sRet << "/" << sFontAlias << " " << fFontSize << " Tf\n";
- }
+ if (sFontAlias.GetLength() > 0 && fFontSize > 0)
+ sRet << "/" << sFontAlias << " " << fFontSize << " Tf\n";
+ }
- return sRet.GetByteString();
+ return sRet.GetByteString();
}
-CFX_ByteString IFX_Edit::GetEditAppearanceStream(IFX_Edit* pEdit, const CPDF_Point & ptOffset,
- const CPVT_WordRange * pRange /* = NULL*/, FX_BOOL bContinuous/* = TRUE*/, FX_WORD SubWord/* = 0*/)
-{
- CFX_ByteTextBuf sEditStream, sWords;
-
- CPDF_Point ptOld(0.0f,0.0f),ptNew(0.0f,0.0f);
- int32_t nCurFontIndex = -1;
-
- if (IFX_Edit_Iterator* pIterator = pEdit->GetIterator())
- {
- if (pRange)
- pIterator->SetAt(pRange->BeginPos);
- else
- pIterator->SetAt(0);
-
- CPVT_WordPlace oldplace;
-
- while (pIterator->NextWord())
- {
- CPVT_WordPlace place = pIterator->GetAt();
-
- if (pRange && place.WordCmp(pRange->EndPos) > 0) break;
-
- if (bContinuous)
- {
- if (place.LineCmp(oldplace) != 0)
- {
- if (sWords.GetSize() > 0)
- {
- sEditStream << GetWordRenderString(sWords.GetByteString());
- sWords.Clear();
- }
-
- CPVT_Word word;
- if (pIterator->GetWord(word))
- {
- ptNew = CPDF_Point(word.ptWord.x + ptOffset.x, word.ptWord.y + ptOffset.y);
- }
- else
- {
- CPVT_Line line;
- pIterator->GetLine(line);
- ptNew = CPDF_Point(line.ptLine.x + ptOffset.x, line.ptLine.y + ptOffset.y);
- }
-
- if (ptNew.x != ptOld.x || ptNew.y != ptOld.y)
- {
- sEditStream << ptNew.x - ptOld.x << " " << ptNew.y - ptOld.y << " Td\n";
-
- ptOld = ptNew;
- }
- }
-
- CPVT_Word word;
- if (pIterator->GetWord(word))
- {
- if (word.nFontIndex != nCurFontIndex)
- {
- if (sWords.GetSize() > 0)
- {
- sEditStream << GetWordRenderString(sWords.GetByteString());
- sWords.Clear();
- }
- sEditStream << GetFontSetString(pEdit->GetFontMap(),word.nFontIndex,word.fFontSize);
- nCurFontIndex = word.nFontIndex;
- }
-
- sWords << GetPDFWordString(pEdit->GetFontMap(),nCurFontIndex,word.Word,SubWord);
- }
-
- oldplace = place;
- }
- else
- {
- CPVT_Word word;
- if (pIterator->GetWord(word))
- {
- ptNew = CPDF_Point(word.ptWord.x + ptOffset.x, word.ptWord.y + ptOffset.y);
-
- if (ptNew.x != ptOld.x || ptNew.y != ptOld.y)
- {
- sEditStream << ptNew.x - ptOld.x << " " << ptNew.y - ptOld.y << " Td\n";
- ptOld = ptNew;
- }
-
- if (word.nFontIndex != nCurFontIndex)
- {
- sEditStream << GetFontSetString(pEdit->GetFontMap(),word.nFontIndex,word.fFontSize);
- nCurFontIndex = word.nFontIndex;
- }
-
- sEditStream << GetWordRenderString(GetPDFWordString(pEdit->GetFontMap(),nCurFontIndex,word.Word,SubWord));
- }
- }
- }
-
- if (sWords.GetSize() > 0)
- {
- sEditStream << GetWordRenderString(sWords.GetByteString());
- sWords.Clear();
- }
- }
-
- CFX_ByteTextBuf sAppStream;
- if (sEditStream.GetSize() > 0)
- {
- int32_t nHorzScale = pEdit->GetHorzScale();
- if (nHorzScale != 100)
- {
- sAppStream << nHorzScale << " Tz\n";
- }
-
- FX_FLOAT fCharSpace = pEdit->GetCharSpace();
- if (!FX_EDIT_IsFloatZero(fCharSpace))
- {
- sAppStream << fCharSpace << " Tc\n";
- }
-
- sAppStream << sEditStream;
- }
-
- return sAppStream.GetByteString();
+CFX_ByteString IFX_Edit::GetEditAppearanceStream(
+ IFX_Edit* pEdit,
+ const CPDF_Point& ptOffset,
+ const CPVT_WordRange* pRange /* = NULL*/,
+ FX_BOOL bContinuous /* = TRUE*/,
+ FX_WORD SubWord /* = 0*/) {
+ CFX_ByteTextBuf sEditStream, sWords;
+
+ CPDF_Point ptOld(0.0f, 0.0f), ptNew(0.0f, 0.0f);
+ int32_t nCurFontIndex = -1;
+
+ if (IFX_Edit_Iterator* pIterator = pEdit->GetIterator()) {
+ if (pRange)
+ pIterator->SetAt(pRange->BeginPos);
+ else
+ pIterator->SetAt(0);
+
+ CPVT_WordPlace oldplace;
+
+ while (pIterator->NextWord()) {
+ CPVT_WordPlace place = pIterator->GetAt();
+
+ if (pRange && place.WordCmp(pRange->EndPos) > 0)
+ break;
+
+ if (bContinuous) {
+ if (place.LineCmp(oldplace) != 0) {
+ if (sWords.GetSize() > 0) {
+ sEditStream << GetWordRenderString(sWords.GetByteString());
+ sWords.Clear();
+ }
+
+ CPVT_Word word;
+ if (pIterator->GetWord(word)) {
+ ptNew = CPDF_Point(word.ptWord.x + ptOffset.x,
+ word.ptWord.y + ptOffset.y);
+ } else {
+ CPVT_Line line;
+ pIterator->GetLine(line);
+ ptNew = CPDF_Point(line.ptLine.x + ptOffset.x,
+ line.ptLine.y + ptOffset.y);
+ }
+
+ if (ptNew.x != ptOld.x || ptNew.y != ptOld.y) {
+ sEditStream << ptNew.x - ptOld.x << " " << ptNew.y - ptOld.y
+ << " Td\n";
+
+ ptOld = ptNew;
+ }
+ }
+
+ CPVT_Word word;
+ if (pIterator->GetWord(word)) {
+ if (word.nFontIndex != nCurFontIndex) {
+ if (sWords.GetSize() > 0) {
+ sEditStream << GetWordRenderString(sWords.GetByteString());
+ sWords.Clear();
+ }
+ sEditStream << GetFontSetString(pEdit->GetFontMap(),
+ word.nFontIndex, word.fFontSize);
+ nCurFontIndex = word.nFontIndex;
+ }
+
+ sWords << GetPDFWordString(pEdit->GetFontMap(), nCurFontIndex,
+ word.Word, SubWord);
+ }
+
+ oldplace = place;
+ } else {
+ CPVT_Word word;
+ if (pIterator->GetWord(word)) {
+ ptNew = CPDF_Point(word.ptWord.x + ptOffset.x,
+ word.ptWord.y + ptOffset.y);
+
+ if (ptNew.x != ptOld.x || ptNew.y != ptOld.y) {
+ sEditStream << ptNew.x - ptOld.x << " " << ptNew.y - ptOld.y
+ << " Td\n";
+ ptOld = ptNew;
+ }
+
+ if (word.nFontIndex != nCurFontIndex) {
+ sEditStream << GetFontSetString(pEdit->GetFontMap(),
+ word.nFontIndex, word.fFontSize);
+ nCurFontIndex = word.nFontIndex;
+ }
+
+ sEditStream << GetWordRenderString(GetPDFWordString(
+ pEdit->GetFontMap(), nCurFontIndex, word.Word, SubWord));
+ }
+ }
+ }
+
+ if (sWords.GetSize() > 0) {
+ sEditStream << GetWordRenderString(sWords.GetByteString());
+ sWords.Clear();
+ }
+ }
+
+ CFX_ByteTextBuf sAppStream;
+ if (sEditStream.GetSize() > 0) {
+ int32_t nHorzScale = pEdit->GetHorzScale();
+ if (nHorzScale != 100) {
+ sAppStream << nHorzScale << " Tz\n";
+ }
+
+ FX_FLOAT fCharSpace = pEdit->GetCharSpace();
+ if (!FX_EDIT_IsFloatZero(fCharSpace)) {
+ sAppStream << fCharSpace << " Tc\n";
+ }
+
+ sAppStream << sEditStream;
+ }
+
+ return sAppStream.GetByteString();
}
-CFX_ByteString IFX_Edit::GetSelectAppearanceStream(IFX_Edit* pEdit, const CPDF_Point & ptOffset,
- const CPVT_WordRange * pRange /*= NULL*/)
-{
- CFX_ByteTextBuf sRet;
-
- if (pRange && pRange->IsExist())
- {
- if (IFX_Edit_Iterator* pIterator = pEdit->GetIterator())
- {
- pIterator->SetAt(pRange->BeginPos);
-
- while (pIterator->NextWord())
- {
- CPVT_WordPlace place = pIterator->GetAt();
-
- if (pRange && place.WordCmp(pRange->EndPos) > 0) break;
-
- CPVT_Word word;
- CPVT_Line line;
- if (pIterator->GetWord(word) && pIterator->GetLine(line))
- {
- //CPDF_Rect rcWordSel = CPDF_Rect(word.ptWord.x,line.ptLine.y + line.fLineDescent,
- // word.ptWord.x+word.fWidth,line.ptLine.y + line.fLineAscent);
-
- sRet << word.ptWord.x + ptOffset.x << " " << line.ptLine.y + line.fLineDescent
- << " " << word.fWidth << " " << line.fLineAscent - line.fLineDescent << " re\nf\n";
- }
- }
- }
- }
-
- return sRet.GetByteString();
+CFX_ByteString IFX_Edit::GetSelectAppearanceStream(
+ IFX_Edit* pEdit,
+ const CPDF_Point& ptOffset,
+ const CPVT_WordRange* pRange /*= NULL*/) {
+ CFX_ByteTextBuf sRet;
+
+ if (pRange && pRange->IsExist()) {
+ if (IFX_Edit_Iterator* pIterator = pEdit->GetIterator()) {
+ pIterator->SetAt(pRange->BeginPos);
+
+ while (pIterator->NextWord()) {
+ CPVT_WordPlace place = pIterator->GetAt();
+
+ if (pRange && place.WordCmp(pRange->EndPos) > 0)
+ break;
+
+ CPVT_Word word;
+ CPVT_Line line;
+ if (pIterator->GetWord(word) && pIterator->GetLine(line)) {
+ // CPDF_Rect rcWordSel = CPDF_Rect(word.ptWord.x,line.ptLine.y +
+ // line.fLineDescent,
+ // word.ptWord.x+word.fWidth,line.ptLine.y +
+ //line.fLineAscent);
+
+ sRet << word.ptWord.x + ptOffset.x << " "
+ << line.ptLine.y + line.fLineDescent << " " << word.fWidth << " "
+ << line.fLineAscent - line.fLineDescent << " re\nf\n";
+ }
+ }
+ }
+ }
+
+ return sRet.GetByteString();
}
-
diff --git a/fpdfsdk/src/fxedit/fxet_edit.cpp b/fpdfsdk/src/fxedit/fxet_edit.cpp
index 63115c2626..efef2ca884 100644
--- a/fpdfsdk/src/fxedit/fxet_edit.cpp
+++ b/fpdfsdk/src/fxedit/fxet_edit.cpp
@@ -7,1495 +7,1312 @@
#include "../../include/fxedit/fxet_stub.h"
#include "../../include/fxedit/fxet_edit.h"
-#define FX_EDIT_UNDO_MAXITEM 10000
+#define FX_EDIT_UNDO_MAXITEM 10000
-/* ---------------------------- CFX_Edit_Iterator ---------------------------- */
+/* ---------------------------- CFX_Edit_Iterator ----------------------------
+ */
-CFX_Edit_Iterator::CFX_Edit_Iterator(CFX_Edit * pEdit,IPDF_VariableText_Iterator * pVTIterator) :
- m_pEdit(pEdit),
- m_pVTIterator(pVTIterator)
-{
-}
+CFX_Edit_Iterator::CFX_Edit_Iterator(CFX_Edit* pEdit,
+ IPDF_VariableText_Iterator* pVTIterator)
+ : m_pEdit(pEdit), m_pVTIterator(pVTIterator) {}
-CFX_Edit_Iterator::~CFX_Edit_Iterator()
-{
-}
+CFX_Edit_Iterator::~CFX_Edit_Iterator() {}
-FX_BOOL CFX_Edit_Iterator::NextWord()
-{
- return m_pVTIterator->NextWord();
+FX_BOOL CFX_Edit_Iterator::NextWord() {
+ return m_pVTIterator->NextWord();
}
-FX_BOOL CFX_Edit_Iterator::NextLine()
-{
- return m_pVTIterator->NextLine();
+FX_BOOL CFX_Edit_Iterator::NextLine() {
+ return m_pVTIterator->NextLine();
}
-FX_BOOL CFX_Edit_Iterator::NextSection()
-{
- return m_pVTIterator->NextSection();
+FX_BOOL CFX_Edit_Iterator::NextSection() {
+ return m_pVTIterator->NextSection();
}
-FX_BOOL CFX_Edit_Iterator::PrevWord()
-{
- return m_pVTIterator->PrevWord();
+FX_BOOL CFX_Edit_Iterator::PrevWord() {
+ return m_pVTIterator->PrevWord();
}
-FX_BOOL CFX_Edit_Iterator::PrevLine()
-{
- return m_pVTIterator->PrevLine();
+FX_BOOL CFX_Edit_Iterator::PrevLine() {
+ return m_pVTIterator->PrevLine();
}
-FX_BOOL CFX_Edit_Iterator::PrevSection()
-{
- return m_pVTIterator->PrevSection();
+FX_BOOL CFX_Edit_Iterator::PrevSection() {
+ return m_pVTIterator->PrevSection();
}
-FX_BOOL CFX_Edit_Iterator::GetWord(CPVT_Word & word) const
-{
- ASSERT(m_pEdit);
+FX_BOOL CFX_Edit_Iterator::GetWord(CPVT_Word& word) const {
+ ASSERT(m_pEdit);
- if (m_pVTIterator->GetWord(word))
- {
- word.ptWord = m_pEdit->VTToEdit(word.ptWord);
- return TRUE;
- }
- return FALSE;
+ if (m_pVTIterator->GetWord(word)) {
+ word.ptWord = m_pEdit->VTToEdit(word.ptWord);
+ return TRUE;
+ }
+ return FALSE;
}
-FX_BOOL CFX_Edit_Iterator::GetLine(CPVT_Line & line) const
-{
- ASSERT(m_pEdit);
+FX_BOOL CFX_Edit_Iterator::GetLine(CPVT_Line& line) const {
+ ASSERT(m_pEdit);
- if (m_pVTIterator->GetLine(line))
- {
- line.ptLine = m_pEdit->VTToEdit(line.ptLine);
- return TRUE;
- }
- return FALSE;
+ if (m_pVTIterator->GetLine(line)) {
+ line.ptLine = m_pEdit->VTToEdit(line.ptLine);
+ return TRUE;
+ }
+ return FALSE;
}
-FX_BOOL CFX_Edit_Iterator::GetSection(CPVT_Section & section) const
-{
- ASSERT(m_pEdit);
+FX_BOOL CFX_Edit_Iterator::GetSection(CPVT_Section& section) const {
+ ASSERT(m_pEdit);
- if (m_pVTIterator->GetSection(section))
- {
- section.rcSection = m_pEdit->VTToEdit(section.rcSection);
- return TRUE;
- }
- return FALSE;
+ if (m_pVTIterator->GetSection(section)) {
+ section.rcSection = m_pEdit->VTToEdit(section.rcSection);
+ return TRUE;
+ }
+ return FALSE;
}
-void CFX_Edit_Iterator::SetAt(int32_t nWordIndex)
-{
- m_pVTIterator->SetAt(nWordIndex);
+void CFX_Edit_Iterator::SetAt(int32_t nWordIndex) {
+ m_pVTIterator->SetAt(nWordIndex);
}
-void CFX_Edit_Iterator::SetAt(const CPVT_WordPlace & place)
-{
- m_pVTIterator->SetAt(place);
+void CFX_Edit_Iterator::SetAt(const CPVT_WordPlace& place) {
+ m_pVTIterator->SetAt(place);
}
-const CPVT_WordPlace & CFX_Edit_Iterator::GetAt() const
-{
- return m_pVTIterator->GetAt();
+const CPVT_WordPlace& CFX_Edit_Iterator::GetAt() const {
+ return m_pVTIterator->GetAt();
}
-IFX_Edit* CFX_Edit_Iterator::GetEdit() const
-{
- return m_pEdit;
+IFX_Edit* CFX_Edit_Iterator::GetEdit() const {
+ return m_pEdit;
}
-/* --------------------------- CFX_Edit_Provider ------------------------------- */
+/* --------------------------- CFX_Edit_Provider -------------------------------
+ */
-CFX_Edit_Provider::CFX_Edit_Provider(IFX_Edit_FontMap * pFontMap) : m_pFontMap(pFontMap)
-{
- ASSERT(m_pFontMap != NULL);
+CFX_Edit_Provider::CFX_Edit_Provider(IFX_Edit_FontMap* pFontMap)
+ : m_pFontMap(pFontMap) {
+ ASSERT(m_pFontMap != NULL);
}
-CFX_Edit_Provider::~CFX_Edit_Provider()
-{
-}
+CFX_Edit_Provider::~CFX_Edit_Provider() {}
-IFX_Edit_FontMap* CFX_Edit_Provider::GetFontMap()
-{
- return m_pFontMap;
+IFX_Edit_FontMap* CFX_Edit_Provider::GetFontMap() {
+ return m_pFontMap;
}
-int32_t CFX_Edit_Provider::GetCharWidth(int32_t nFontIndex, FX_WORD word, int32_t nWordStyle)
-{
- if (CPDF_Font* pPDFFont = m_pFontMap->GetPDFFont(nFontIndex))
- {
- FX_DWORD charcode = word;
+int32_t CFX_Edit_Provider::GetCharWidth(int32_t nFontIndex,
+ FX_WORD word,
+ int32_t nWordStyle) {
+ if (CPDF_Font* pPDFFont = m_pFontMap->GetPDFFont(nFontIndex)) {
+ FX_DWORD charcode = word;
- if (pPDFFont->IsUnicodeCompatible())
- charcode = pPDFFont->CharCodeFromUnicode(word);
- else
- charcode = m_pFontMap->CharCodeFromUnicode(nFontIndex, word);
+ if (pPDFFont->IsUnicodeCompatible())
+ charcode = pPDFFont->CharCodeFromUnicode(word);
+ else
+ charcode = m_pFontMap->CharCodeFromUnicode(nFontIndex, word);
- if (charcode != -1)
- return pPDFFont->GetCharWidthF(charcode);
- }
+ if (charcode != -1)
+ return pPDFFont->GetCharWidthF(charcode);
+ }
- return 0;
+ return 0;
}
-int32_t CFX_Edit_Provider::GetTypeAscent(int32_t nFontIndex)
-{
- if (CPDF_Font* pPDFFont = m_pFontMap->GetPDFFont(nFontIndex))
- return pPDFFont->GetTypeAscent();
+int32_t CFX_Edit_Provider::GetTypeAscent(int32_t nFontIndex) {
+ if (CPDF_Font* pPDFFont = m_pFontMap->GetPDFFont(nFontIndex))
+ return pPDFFont->GetTypeAscent();
- return 0;
+ return 0;
}
-int32_t CFX_Edit_Provider::GetTypeDescent(int32_t nFontIndex)
-{
- if (CPDF_Font* pPDFFont = m_pFontMap->GetPDFFont(nFontIndex))
- return pPDFFont->GetTypeDescent();
+int32_t CFX_Edit_Provider::GetTypeDescent(int32_t nFontIndex) {
+ if (CPDF_Font* pPDFFont = m_pFontMap->GetPDFFont(nFontIndex))
+ return pPDFFont->GetTypeDescent();
- return 0;
+ return 0;
}
-int32_t CFX_Edit_Provider::GetWordFontIndex(FX_WORD word, int32_t charset, int32_t nFontIndex)
-{
- return m_pFontMap->GetWordFontIndex(word,charset,nFontIndex);
+int32_t CFX_Edit_Provider::GetWordFontIndex(FX_WORD word,
+ int32_t charset,
+ int32_t nFontIndex) {
+ return m_pFontMap->GetWordFontIndex(word, charset, nFontIndex);
}
-int32_t CFX_Edit_Provider::GetDefaultFontIndex()
-{
- return 0;
+int32_t CFX_Edit_Provider::GetDefaultFontIndex() {
+ return 0;
}
-FX_BOOL CFX_Edit_Provider::IsLatinWord(FX_WORD word)
-{
- return FX_EDIT_ISLATINWORD(word);
+FX_BOOL CFX_Edit_Provider::IsLatinWord(FX_WORD word) {
+ return FX_EDIT_ISLATINWORD(word);
}
-/* --------------------------------- CFX_Edit_Refresh --------------------------------- */
+/* --------------------------------- CFX_Edit_Refresh
+ * --------------------------------- */
-CFX_Edit_Refresh::CFX_Edit_Refresh()
-{
-}
+CFX_Edit_Refresh::CFX_Edit_Refresh() {}
-CFX_Edit_Refresh::~CFX_Edit_Refresh()
-{
-}
+CFX_Edit_Refresh::~CFX_Edit_Refresh() {}
-void CFX_Edit_Refresh::BeginRefresh()
-{
- m_RefreshRects.Empty();
- m_OldLineRects = m_NewLineRects;
+void CFX_Edit_Refresh::BeginRefresh() {
+ m_RefreshRects.Empty();
+ m_OldLineRects = m_NewLineRects;
}
-void CFX_Edit_Refresh::Push(const CPVT_WordRange & linerange,const CPDF_Rect & rect)
-{
- m_NewLineRects.Add(linerange,rect);
+void CFX_Edit_Refresh::Push(const CPVT_WordRange& linerange,
+ const CPDF_Rect& rect) {
+ m_NewLineRects.Add(linerange, rect);
}
-void CFX_Edit_Refresh::NoAnalyse()
-{
- {
- for (int32_t i = 0, sz = m_OldLineRects.GetSize(); i < sz; i++)
- if (CFX_Edit_LineRect * pOldRect = m_OldLineRects.GetAt(i))
- m_RefreshRects.Add(pOldRect->m_rcLine);
- }
+void CFX_Edit_Refresh::NoAnalyse() {
+ {
+ for (int32_t i = 0, sz = m_OldLineRects.GetSize(); i < sz; i++)
+ if (CFX_Edit_LineRect* pOldRect = m_OldLineRects.GetAt(i))
+ m_RefreshRects.Add(pOldRect->m_rcLine);
+ }
- {
- for (int32_t i = 0, sz = m_NewLineRects.GetSize(); i < sz; i++)
- if (CFX_Edit_LineRect * pNewRect = m_NewLineRects.GetAt(i))
- m_RefreshRects.Add(pNewRect->m_rcLine);
- }
+ {
+ for (int32_t i = 0, sz = m_NewLineRects.GetSize(); i < sz; i++)
+ if (CFX_Edit_LineRect* pNewRect = m_NewLineRects.GetAt(i))
+ m_RefreshRects.Add(pNewRect->m_rcLine);
+ }
}
-void CFX_Edit_Refresh::Analyse(int32_t nAlignment)
-{
- FX_BOOL bLineTopChanged = FALSE;
- CPDF_Rect rcResult;
- FX_FLOAT fWidthDiff;
-
- int32_t szMax = FX_EDIT_MAX(m_OldLineRects.GetSize(),m_NewLineRects.GetSize());
- int32_t i = 0;
-
- while (i < szMax)
- {
- CFX_Edit_LineRect * pOldRect = m_OldLineRects.GetAt(i);
- CFX_Edit_LineRect * pNewRect = m_NewLineRects.GetAt(i);
-
- if (pOldRect)
- {
- if (pNewRect)
- {
- if (bLineTopChanged)
- {
- rcResult = pOldRect->m_rcLine;
- rcResult.Union(pNewRect->m_rcLine);
- m_RefreshRects.Add(rcResult);
- }
- else
- {
- if (*pNewRect != *pOldRect)
- {
- if (!pNewRect->IsSameTop(*pOldRect) || !pNewRect->IsSameHeight(*pOldRect))
- {
- bLineTopChanged = TRUE;
- continue;
- }
-
- if (nAlignment == 0)
- {
- if (pNewRect->m_wrLine.BeginPos != pOldRect->m_wrLine.BeginPos)
- {
- rcResult = pOldRect->m_rcLine;
- rcResult.Union(pNewRect->m_rcLine);
- m_RefreshRects.Add(rcResult);
- }
- else
- {
- if (!pNewRect->IsSameLeft(*pOldRect))
- {
- rcResult = pOldRect->m_rcLine;
- rcResult.Union(pNewRect->m_rcLine);
- }
- else
- {
- fWidthDiff = pNewRect->m_rcLine.Width() - pOldRect->m_rcLine.Width();
- rcResult = pNewRect->m_rcLine;
- if (fWidthDiff > 0.0f)
- rcResult.left = rcResult.right - fWidthDiff;
- else
- {
- rcResult.left = rcResult.right;
- rcResult.right += (-fWidthDiff);
- }
- }
- m_RefreshRects.Add(rcResult);
- }
- }
- else
- {
- rcResult = pOldRect->m_rcLine;
- rcResult.Union(pNewRect->m_rcLine);
- m_RefreshRects.Add(rcResult);
- }
- }
- else
- {
- //don't need to do anything
- }
- }
- }
- else
- {
- m_RefreshRects.Add(pOldRect->m_rcLine);
- }
- }
- else
- {
- if (pNewRect)
- {
- m_RefreshRects.Add(pNewRect->m_rcLine);
+void CFX_Edit_Refresh::Analyse(int32_t nAlignment) {
+ FX_BOOL bLineTopChanged = FALSE;
+ CPDF_Rect rcResult;
+ FX_FLOAT fWidthDiff;
+
+ int32_t szMax =
+ FX_EDIT_MAX(m_OldLineRects.GetSize(), m_NewLineRects.GetSize());
+ int32_t i = 0;
+
+ while (i < szMax) {
+ CFX_Edit_LineRect* pOldRect = m_OldLineRects.GetAt(i);
+ CFX_Edit_LineRect* pNewRect = m_NewLineRects.GetAt(i);
+
+ if (pOldRect) {
+ if (pNewRect) {
+ if (bLineTopChanged) {
+ rcResult = pOldRect->m_rcLine;
+ rcResult.Union(pNewRect->m_rcLine);
+ m_RefreshRects.Add(rcResult);
+ } else {
+ if (*pNewRect != *pOldRect) {
+ if (!pNewRect->IsSameTop(*pOldRect) ||
+ !pNewRect->IsSameHeight(*pOldRect)) {
+ bLineTopChanged = TRUE;
+ continue;
}
- else
- {
- //error
+
+ if (nAlignment == 0) {
+ if (pNewRect->m_wrLine.BeginPos != pOldRect->m_wrLine.BeginPos) {
+ rcResult = pOldRect->m_rcLine;
+ rcResult.Union(pNewRect->m_rcLine);
+ m_RefreshRects.Add(rcResult);
+ } else {
+ if (!pNewRect->IsSameLeft(*pOldRect)) {
+ rcResult = pOldRect->m_rcLine;
+ rcResult.Union(pNewRect->m_rcLine);
+ } else {
+ fWidthDiff =
+ pNewRect->m_rcLine.Width() - pOldRect->m_rcLine.Width();
+ rcResult = pNewRect->m_rcLine;
+ if (fWidthDiff > 0.0f)
+ rcResult.left = rcResult.right - fWidthDiff;
+ else {
+ rcResult.left = rcResult.right;
+ rcResult.right += (-fWidthDiff);
+ }
+ }
+ m_RefreshRects.Add(rcResult);
+ }
+ } else {
+ rcResult = pOldRect->m_rcLine;
+ rcResult.Union(pNewRect->m_rcLine);
+ m_RefreshRects.Add(rcResult);
}
+ } else {
+ // don't need to do anything
+ }
}
- i++;
+ } else {
+ m_RefreshRects.Add(pOldRect->m_rcLine);
+ }
+ } else {
+ if (pNewRect) {
+ m_RefreshRects.Add(pNewRect->m_rcLine);
+ } else {
+ // error
+ }
}
+ i++;
+ }
}
-void CFX_Edit_Refresh::AddRefresh(const CPDF_Rect & rect)
-{
- m_RefreshRects.Add(rect);
+void CFX_Edit_Refresh::AddRefresh(const CPDF_Rect& rect) {
+ m_RefreshRects.Add(rect);
}
-const CFX_Edit_RectArray * CFX_Edit_Refresh::GetRefreshRects() const
-{
- return &m_RefreshRects;
+const CFX_Edit_RectArray* CFX_Edit_Refresh::GetRefreshRects() const {
+ return &m_RefreshRects;
}
-void CFX_Edit_Refresh::EndRefresh()
-{
- m_RefreshRects.Empty();
+void CFX_Edit_Refresh::EndRefresh() {
+ m_RefreshRects.Empty();
}
-/* ------------------------------------- CFX_Edit_Undo ------------------------------------- */
+/* ------------------------------------- CFX_Edit_Undo
+ * ------------------------------------- */
-CFX_Edit_Undo::CFX_Edit_Undo(int32_t nBufsize) : m_nCurUndoPos(0),
- m_nBufSize(nBufsize),
- m_bModified(FALSE),
- m_bVirgin(TRUE),
- m_bWorking(FALSE)
-{
-}
+CFX_Edit_Undo::CFX_Edit_Undo(int32_t nBufsize)
+ : m_nCurUndoPos(0),
+ m_nBufSize(nBufsize),
+ m_bModified(FALSE),
+ m_bVirgin(TRUE),
+ m_bWorking(FALSE) {}
-CFX_Edit_Undo::~CFX_Edit_Undo()
-{
- Reset();
+CFX_Edit_Undo::~CFX_Edit_Undo() {
+ Reset();
}
-FX_BOOL CFX_Edit_Undo::CanUndo() const
-{
- return m_nCurUndoPos > 0;
+FX_BOOL CFX_Edit_Undo::CanUndo() const {
+ return m_nCurUndoPos > 0;
}
-void CFX_Edit_Undo::Undo()
-{
- m_bWorking = TRUE;
+void CFX_Edit_Undo::Undo() {
+ m_bWorking = TRUE;
- if (m_nCurUndoPos > 0)
- {
- IFX_Edit_UndoItem * pItem = m_UndoItemStack.GetAt(m_nCurUndoPos-1);
- ASSERT(pItem != NULL);
+ if (m_nCurUndoPos > 0) {
+ IFX_Edit_UndoItem* pItem = m_UndoItemStack.GetAt(m_nCurUndoPos - 1);
+ ASSERT(pItem != NULL);
- pItem->Undo();
+ pItem->Undo();
- m_nCurUndoPos--;
- m_bModified = (m_nCurUndoPos != 0);
- }
+ m_nCurUndoPos--;
+ m_bModified = (m_nCurUndoPos != 0);
+ }
- m_bWorking = FALSE;
+ m_bWorking = FALSE;
}
-FX_BOOL CFX_Edit_Undo::CanRedo() const
-{
- return m_nCurUndoPos < m_UndoItemStack.GetSize();
+FX_BOOL CFX_Edit_Undo::CanRedo() const {
+ return m_nCurUndoPos < m_UndoItemStack.GetSize();
}
-void CFX_Edit_Undo::Redo()
-{
- m_bWorking = TRUE;
+void CFX_Edit_Undo::Redo() {
+ m_bWorking = TRUE;
- int32_t nStackSize = m_UndoItemStack.GetSize();
+ int32_t nStackSize = m_UndoItemStack.GetSize();
- if (m_nCurUndoPos < nStackSize)
- {
- IFX_Edit_UndoItem * pItem = m_UndoItemStack.GetAt(m_nCurUndoPos);
- ASSERT(pItem != NULL);
+ if (m_nCurUndoPos < nStackSize) {
+ IFX_Edit_UndoItem* pItem = m_UndoItemStack.GetAt(m_nCurUndoPos);
+ ASSERT(pItem != NULL);
- pItem->Redo();
+ pItem->Redo();
- m_nCurUndoPos++;
- m_bModified = (m_nCurUndoPos != 0);
- }
+ m_nCurUndoPos++;
+ m_bModified = (m_nCurUndoPos != 0);
+ }
- m_bWorking = FALSE;
+ m_bWorking = FALSE;
}
-FX_BOOL CFX_Edit_Undo::IsWorking() const
-{
- return m_bWorking;
+FX_BOOL CFX_Edit_Undo::IsWorking() const {
+ return m_bWorking;
}
-void CFX_Edit_Undo::AddItem(IFX_Edit_UndoItem* pItem)
-{
- ASSERT(!m_bWorking);
- ASSERT(pItem != NULL);
- ASSERT(m_nBufSize > 1);
+void CFX_Edit_Undo::AddItem(IFX_Edit_UndoItem* pItem) {
+ ASSERT(!m_bWorking);
+ ASSERT(pItem != NULL);
+ ASSERT(m_nBufSize > 1);
- if (m_nCurUndoPos < m_UndoItemStack.GetSize())
- RemoveTails();
+ if (m_nCurUndoPos < m_UndoItemStack.GetSize())
+ RemoveTails();
- if (m_UndoItemStack.GetSize() >= m_nBufSize)
- {
- RemoveHeads();
- m_bVirgin = FALSE;
- }
+ if (m_UndoItemStack.GetSize() >= m_nBufSize) {
+ RemoveHeads();
+ m_bVirgin = FALSE;
+ }
- m_UndoItemStack.Add(pItem);
- m_nCurUndoPos = m_UndoItemStack.GetSize();
+ m_UndoItemStack.Add(pItem);
+ m_nCurUndoPos = m_UndoItemStack.GetSize();
- m_bModified = (m_nCurUndoPos != 0);
+ m_bModified = (m_nCurUndoPos != 0);
}
-FX_BOOL CFX_Edit_Undo::IsModified() const
-{
- return m_bVirgin ? m_bModified : TRUE;
+FX_BOOL CFX_Edit_Undo::IsModified() const {
+ return m_bVirgin ? m_bModified : TRUE;
}
-IFX_Edit_UndoItem* CFX_Edit_Undo::GetItem(int32_t nIndex)
-{
- if (nIndex>=0 && nIndex < m_UndoItemStack.GetSize())
- return m_UndoItemStack.GetAt(nIndex);
+IFX_Edit_UndoItem* CFX_Edit_Undo::GetItem(int32_t nIndex) {
+ if (nIndex >= 0 && nIndex < m_UndoItemStack.GetSize())
+ return m_UndoItemStack.GetAt(nIndex);
- return NULL;
+ return NULL;
}
-void CFX_Edit_Undo::RemoveHeads()
-{
- ASSERT(m_UndoItemStack.GetSize() > 1);
+void CFX_Edit_Undo::RemoveHeads() {
+ ASSERT(m_UndoItemStack.GetSize() > 1);
- delete m_UndoItemStack.GetAt(0);
- m_UndoItemStack.RemoveAt(0);
+ delete m_UndoItemStack.GetAt(0);
+ m_UndoItemStack.RemoveAt(0);
}
-void CFX_Edit_Undo::RemoveTails()
-{
- for (int32_t i = m_UndoItemStack.GetSize()-1; i >= m_nCurUndoPos; i--)
- {
- delete m_UndoItemStack.GetAt(i);
- m_UndoItemStack.RemoveAt(i);
- }
+void CFX_Edit_Undo::RemoveTails() {
+ for (int32_t i = m_UndoItemStack.GetSize() - 1; i >= m_nCurUndoPos; i--) {
+ delete m_UndoItemStack.GetAt(i);
+ m_UndoItemStack.RemoveAt(i);
+ }
}
-void CFX_Edit_Undo::Reset()
-{
- for (int32_t i=0, sz=m_UndoItemStack.GetSize(); i < sz; i++)
- {
- delete m_UndoItemStack.GetAt(i);
- }
- m_nCurUndoPos = 0;
- m_UndoItemStack.RemoveAll();
+void CFX_Edit_Undo::Reset() {
+ for (int32_t i = 0, sz = m_UndoItemStack.GetSize(); i < sz; i++) {
+ delete m_UndoItemStack.GetAt(i);
+ }
+ m_nCurUndoPos = 0;
+ m_UndoItemStack.RemoveAll();
}
-/* -------------------------------- CFX_Edit_GroupUndoItem -------------------------------- */
+/* -------------------------------- CFX_Edit_GroupUndoItem
+ * -------------------------------- */
-CFX_Edit_GroupUndoItem::CFX_Edit_GroupUndoItem(const CFX_WideString& sTitle) : m_sTitle(sTitle)
-{
-}
+CFX_Edit_GroupUndoItem::CFX_Edit_GroupUndoItem(const CFX_WideString& sTitle)
+ : m_sTitle(sTitle) {}
-CFX_Edit_GroupUndoItem::~CFX_Edit_GroupUndoItem()
-{
- for (int i=0,sz=m_Items.GetSize(); i<sz; i++)
- {
- delete m_Items[i];
- }
+CFX_Edit_GroupUndoItem::~CFX_Edit_GroupUndoItem() {
+ for (int i = 0, sz = m_Items.GetSize(); i < sz; i++) {
+ delete m_Items[i];
+ }
- m_Items.RemoveAll();
+ m_Items.RemoveAll();
}
-void CFX_Edit_GroupUndoItem::AddUndoItem(CFX_Edit_UndoItem* pUndoItem)
-{
- ASSERT(pUndoItem != NULL);
+void CFX_Edit_GroupUndoItem::AddUndoItem(CFX_Edit_UndoItem* pUndoItem) {
+ ASSERT(pUndoItem != NULL);
- pUndoItem->SetFirst(FALSE);
- pUndoItem->SetLast(FALSE);
+ pUndoItem->SetFirst(FALSE);
+ pUndoItem->SetLast(FALSE);
- m_Items.Add(pUndoItem);
+ m_Items.Add(pUndoItem);
- if (m_sTitle.IsEmpty())
- m_sTitle = pUndoItem->GetUndoTitle();
+ if (m_sTitle.IsEmpty())
+ m_sTitle = pUndoItem->GetUndoTitle();
}
-void CFX_Edit_GroupUndoItem::UpdateItems()
-{
- if (m_Items.GetSize() > 0)
- {
- CFX_Edit_UndoItem* pFirstItem = m_Items[0];
- ASSERT(pFirstItem != NULL);
- pFirstItem->SetFirst(TRUE);
+void CFX_Edit_GroupUndoItem::UpdateItems() {
+ if (m_Items.GetSize() > 0) {
+ CFX_Edit_UndoItem* pFirstItem = m_Items[0];
+ ASSERT(pFirstItem != NULL);
+ pFirstItem->SetFirst(TRUE);
- CFX_Edit_UndoItem* pLastItem = m_Items[m_Items.GetSize() - 1];
- ASSERT(pLastItem != NULL);
- pLastItem->SetLast(TRUE);
- }
+ CFX_Edit_UndoItem* pLastItem = m_Items[m_Items.GetSize() - 1];
+ ASSERT(pLastItem != NULL);
+ pLastItem->SetLast(TRUE);
+ }
}
-void CFX_Edit_GroupUndoItem::Undo()
-{
- for (int i=m_Items.GetSize()-1; i>=0; i--)
- {
- CFX_Edit_UndoItem* pUndoItem = m_Items[i];
- ASSERT(pUndoItem != NULL);
+void CFX_Edit_GroupUndoItem::Undo() {
+ for (int i = m_Items.GetSize() - 1; i >= 0; i--) {
+ CFX_Edit_UndoItem* pUndoItem = m_Items[i];
+ ASSERT(pUndoItem != NULL);
- pUndoItem->Undo();
- }
+ pUndoItem->Undo();
+ }
}
-void CFX_Edit_GroupUndoItem::Redo()
-{
- for (int i=0,sz=m_Items.GetSize(); i<sz; i++)
- {
- CFX_Edit_UndoItem* pUndoItem = m_Items[i];
- ASSERT(pUndoItem != NULL);
+void CFX_Edit_GroupUndoItem::Redo() {
+ for (int i = 0, sz = m_Items.GetSize(); i < sz; i++) {
+ CFX_Edit_UndoItem* pUndoItem = m_Items[i];
+ ASSERT(pUndoItem != NULL);
- pUndoItem->Redo();
- }
+ pUndoItem->Redo();
+ }
}
-CFX_WideString CFX_Edit_GroupUndoItem::GetUndoTitle()
-{
- return m_sTitle;
+CFX_WideString CFX_Edit_GroupUndoItem::GetUndoTitle() {
+ return m_sTitle;
}
-/* ------------------------------------- CFX_Edit_UndoItem derived classes ------------------------------------- */
+/* ------------------------------------- CFX_Edit_UndoItem derived classes
+ * ------------------------------------- */
-CFXEU_InsertWord::CFXEU_InsertWord(CFX_Edit * pEdit, const CPVT_WordPlace & wpOldPlace, const CPVT_WordPlace & wpNewPlace,
- FX_WORD word, int32_t charset, const CPVT_WordProps * pWordProps)
- : m_pEdit(pEdit), m_wpOld(wpOldPlace), m_wpNew(wpNewPlace), m_Word(word), m_nCharset(charset), m_WordProps()
-{
- if (pWordProps)
- m_WordProps = *pWordProps;
+CFXEU_InsertWord::CFXEU_InsertWord(CFX_Edit* pEdit,
+ const CPVT_WordPlace& wpOldPlace,
+ const CPVT_WordPlace& wpNewPlace,
+ FX_WORD word,
+ int32_t charset,
+ const CPVT_WordProps* pWordProps)
+ : m_pEdit(pEdit),
+ m_wpOld(wpOldPlace),
+ m_wpNew(wpNewPlace),
+ m_Word(word),
+ m_nCharset(charset),
+ m_WordProps() {
+ if (pWordProps)
+ m_WordProps = *pWordProps;
}
-CFXEU_InsertWord::~CFXEU_InsertWord()
-{
-}
+CFXEU_InsertWord::~CFXEU_InsertWord() {}
-void CFXEU_InsertWord::Redo()
-{
- if (m_pEdit)
- {
- m_pEdit->SelectNone();
- m_pEdit->SetCaret(m_wpOld);
- m_pEdit->InsertWord(m_Word,m_nCharset,&m_WordProps,FALSE,TRUE);
- }
+void CFXEU_InsertWord::Redo() {
+ if (m_pEdit) {
+ m_pEdit->SelectNone();
+ m_pEdit->SetCaret(m_wpOld);
+ m_pEdit->InsertWord(m_Word, m_nCharset, &m_WordProps, FALSE, TRUE);
+ }
}
-void CFXEU_InsertWord::Undo()
-{
- if (m_pEdit)
- {
- m_pEdit->SelectNone();
- m_pEdit->SetCaret(m_wpNew);
- m_pEdit->Backspace(FALSE,TRUE);
- }
+void CFXEU_InsertWord::Undo() {
+ if (m_pEdit) {
+ m_pEdit->SelectNone();
+ m_pEdit->SetCaret(m_wpNew);
+ m_pEdit->Backspace(FALSE, TRUE);
+ }
}
/* -------------------------------------------------------------------------- */
-CFXEU_InsertReturn::CFXEU_InsertReturn(CFX_Edit * pEdit, const CPVT_WordPlace & wpOldPlace, const CPVT_WordPlace & wpNewPlace,
- const CPVT_SecProps * pSecProps, const CPVT_WordProps * pWordProps) :
- m_pEdit(pEdit),
- m_wpOld(wpOldPlace),
- m_wpNew(wpNewPlace),
- m_SecProps(),
- m_WordProps()
-{
- if (pSecProps)
- m_SecProps = *pSecProps;
- if (pWordProps)
- m_WordProps = *pWordProps;
-}
-
-CFXEU_InsertReturn::~CFXEU_InsertReturn()
-{
-}
-
-void CFXEU_InsertReturn::Redo()
-{
- if (m_pEdit)
- {
- m_pEdit->SelectNone();
- m_pEdit->SetCaret(m_wpOld);
- m_pEdit->InsertReturn(&m_SecProps,&m_WordProps,FALSE,TRUE);
- }
+CFXEU_InsertReturn::CFXEU_InsertReturn(CFX_Edit* pEdit,
+ const CPVT_WordPlace& wpOldPlace,
+ const CPVT_WordPlace& wpNewPlace,
+ const CPVT_SecProps* pSecProps,
+ const CPVT_WordProps* pWordProps)
+ : m_pEdit(pEdit),
+ m_wpOld(wpOldPlace),
+ m_wpNew(wpNewPlace),
+ m_SecProps(),
+ m_WordProps() {
+ if (pSecProps)
+ m_SecProps = *pSecProps;
+ if (pWordProps)
+ m_WordProps = *pWordProps;
}
-void CFXEU_InsertReturn::Undo()
-{
- if (m_pEdit)
- {
- m_pEdit->SelectNone();
- m_pEdit->SetCaret(m_wpNew);
- m_pEdit->Backspace(FALSE,TRUE);
- }
-}
+CFXEU_InsertReturn::~CFXEU_InsertReturn() {}
-/* -------------------------------------------------------------------------- */
-//CFXEU_Backspace
-
-CFXEU_Backspace::CFXEU_Backspace(CFX_Edit * pEdit, const CPVT_WordPlace & wpOldPlace, const CPVT_WordPlace & wpNewPlace,
- FX_WORD word, int32_t charset,
- const CPVT_SecProps & SecProps, const CPVT_WordProps & WordProps) :
- m_pEdit(pEdit),
- m_wpOld(wpOldPlace),
- m_wpNew(wpNewPlace),
- m_Word(word),
- m_nCharset(charset),
- m_SecProps(SecProps),
- m_WordProps(WordProps)
-{
-}
-
-CFXEU_Backspace::~CFXEU_Backspace()
-{
-}
-
-void CFXEU_Backspace::Redo()
-{
- if (m_pEdit)
- {
- m_pEdit->SelectNone();
- m_pEdit->SetCaret(m_wpOld);
- m_pEdit->Backspace(FALSE,TRUE);
- }
+void CFXEU_InsertReturn::Redo() {
+ if (m_pEdit) {
+ m_pEdit->SelectNone();
+ m_pEdit->SetCaret(m_wpOld);
+ m_pEdit->InsertReturn(&m_SecProps, &m_WordProps, FALSE, TRUE);
+ }
}
-void CFXEU_Backspace::Undo()
-{
- if (m_pEdit)
- {
- m_pEdit->SelectNone();
- m_pEdit->SetCaret(m_wpNew);
- if (m_wpNew.SecCmp(m_wpOld) != 0)
- {
- m_pEdit->InsertReturn(&m_SecProps,&m_WordProps,FALSE,TRUE);
- }
- else
- {
- m_pEdit->InsertWord(m_Word,m_nCharset,&m_WordProps,FALSE,TRUE);
- }
- }
+void CFXEU_InsertReturn::Undo() {
+ if (m_pEdit) {
+ m_pEdit->SelectNone();
+ m_pEdit->SetCaret(m_wpNew);
+ m_pEdit->Backspace(FALSE, TRUE);
+ }
}
/* -------------------------------------------------------------------------- */
-//CFXEU_Delete
-
-CFXEU_Delete::CFXEU_Delete(CFX_Edit * pEdit, const CPVT_WordPlace & wpOldPlace, const CPVT_WordPlace & wpNewPlace,
- FX_WORD word, int32_t charset,
- const CPVT_SecProps & SecProps, const CPVT_WordProps & WordProps, FX_BOOL bSecEnd) :
- m_pEdit(pEdit),
- m_wpOld(wpOldPlace),
- m_wpNew(wpNewPlace),
- m_Word(word),
- m_nCharset(charset),
- m_SecProps(SecProps),
- m_WordProps(WordProps),
- m_bSecEnd(bSecEnd)
-{
-}
-
-CFXEU_Delete::~CFXEU_Delete()
-{
-}
-
-void CFXEU_Delete::Redo()
-{
- if (m_pEdit)
- {
- m_pEdit->SelectNone();
- m_pEdit->SetCaret(m_wpOld);
- m_pEdit->Delete(FALSE,TRUE);
- }
+// CFXEU_Backspace
+
+CFXEU_Backspace::CFXEU_Backspace(CFX_Edit* pEdit,
+ const CPVT_WordPlace& wpOldPlace,
+ const CPVT_WordPlace& wpNewPlace,
+ FX_WORD word,
+ int32_t charset,
+ const CPVT_SecProps& SecProps,
+ const CPVT_WordProps& WordProps)
+ : m_pEdit(pEdit),
+ m_wpOld(wpOldPlace),
+ m_wpNew(wpNewPlace),
+ m_Word(word),
+ m_nCharset(charset),
+ m_SecProps(SecProps),
+ m_WordProps(WordProps) {}
+
+CFXEU_Backspace::~CFXEU_Backspace() {}
+
+void CFXEU_Backspace::Redo() {
+ if (m_pEdit) {
+ m_pEdit->SelectNone();
+ m_pEdit->SetCaret(m_wpOld);
+ m_pEdit->Backspace(FALSE, TRUE);
+ }
+}
+
+void CFXEU_Backspace::Undo() {
+ if (m_pEdit) {
+ m_pEdit->SelectNone();
+ m_pEdit->SetCaret(m_wpNew);
+ if (m_wpNew.SecCmp(m_wpOld) != 0) {
+ m_pEdit->InsertReturn(&m_SecProps, &m_WordProps, FALSE, TRUE);
+ } else {
+ m_pEdit->InsertWord(m_Word, m_nCharset, &m_WordProps, FALSE, TRUE);
+ }
+ }
}
-void CFXEU_Delete::Undo()
-{
- if (m_pEdit)
- {
- m_pEdit->SelectNone();
- m_pEdit->SetCaret(m_wpNew);
- if (m_bSecEnd)
- {
- m_pEdit->InsertReturn(&m_SecProps,&m_WordProps,FALSE,TRUE);
- }
- else
- {
- m_pEdit->InsertWord(m_Word,m_nCharset,&m_WordProps,FALSE,TRUE);
- }
- }
+/* -------------------------------------------------------------------------- */
+// CFXEU_Delete
+
+CFXEU_Delete::CFXEU_Delete(CFX_Edit* pEdit,
+ const CPVT_WordPlace& wpOldPlace,
+ const CPVT_WordPlace& wpNewPlace,
+ FX_WORD word,
+ int32_t charset,
+ const CPVT_SecProps& SecProps,
+ const CPVT_WordProps& WordProps,
+ FX_BOOL bSecEnd)
+ : m_pEdit(pEdit),
+ m_wpOld(wpOldPlace),
+ m_wpNew(wpNewPlace),
+ m_Word(word),
+ m_nCharset(charset),
+ m_SecProps(SecProps),
+ m_WordProps(WordProps),
+ m_bSecEnd(bSecEnd) {}
+
+CFXEU_Delete::~CFXEU_Delete() {}
+
+void CFXEU_Delete::Redo() {
+ if (m_pEdit) {
+ m_pEdit->SelectNone();
+ m_pEdit->SetCaret(m_wpOld);
+ m_pEdit->Delete(FALSE, TRUE);
+ }
+}
+
+void CFXEU_Delete::Undo() {
+ if (m_pEdit) {
+ m_pEdit->SelectNone();
+ m_pEdit->SetCaret(m_wpNew);
+ if (m_bSecEnd) {
+ m_pEdit->InsertReturn(&m_SecProps, &m_WordProps, FALSE, TRUE);
+ } else {
+ m_pEdit->InsertWord(m_Word, m_nCharset, &m_WordProps, FALSE, TRUE);
+ }
+ }
}
/* -------------------------------------------------------------------------- */
-//CFXEU_Clear
+// CFXEU_Clear
-CFXEU_Clear::CFXEU_Clear(CFX_Edit * pEdit, const CPVT_WordRange & wrSel, const CFX_WideString & swText) :
- m_pEdit(pEdit),
- m_wrSel(wrSel),
- m_swText(swText)
-{
-}
+CFXEU_Clear::CFXEU_Clear(CFX_Edit* pEdit,
+ const CPVT_WordRange& wrSel,
+ const CFX_WideString& swText)
+ : m_pEdit(pEdit), m_wrSel(wrSel), m_swText(swText) {}
-CFXEU_Clear::~CFXEU_Clear()
-{
-}
+CFXEU_Clear::~CFXEU_Clear() {}
-void CFXEU_Clear::Redo()
-{
- if (m_pEdit)
- {
- m_pEdit->SelectNone();
- m_pEdit->SetSel(m_wrSel.BeginPos,m_wrSel.EndPos);
- m_pEdit->Clear(FALSE,TRUE);
- }
+void CFXEU_Clear::Redo() {
+ if (m_pEdit) {
+ m_pEdit->SelectNone();
+ m_pEdit->SetSel(m_wrSel.BeginPos, m_wrSel.EndPos);
+ m_pEdit->Clear(FALSE, TRUE);
+ }
}
-void CFXEU_Clear::Undo()
-{
- if (m_pEdit)
- {
- m_pEdit->SelectNone();
- m_pEdit->SetCaret(m_wrSel.BeginPos);
- m_pEdit->InsertText(m_swText.c_str(), DEFAULT_CHARSET, NULL, NULL, FALSE, TRUE);
- m_pEdit->SetSel(m_wrSel.BeginPos,m_wrSel.EndPos);
- }
+void CFXEU_Clear::Undo() {
+ if (m_pEdit) {
+ m_pEdit->SelectNone();
+ m_pEdit->SetCaret(m_wrSel.BeginPos);
+ m_pEdit->InsertText(m_swText.c_str(), DEFAULT_CHARSET, NULL, NULL, FALSE,
+ TRUE);
+ m_pEdit->SetSel(m_wrSel.BeginPos, m_wrSel.EndPos);
+ }
}
/* -------------------------------------------------------------------------- */
-//CFXEU_ClearRich
-
-CFXEU_ClearRich::CFXEU_ClearRich(CFX_Edit * pEdit, const CPVT_WordPlace & wpOldPlace, const CPVT_WordPlace & wpNewPlace,
- const CPVT_WordRange & wrSel, FX_WORD word, int32_t charset,
- const CPVT_SecProps & SecProps, const CPVT_WordProps & WordProps) :
- m_pEdit(pEdit),
- m_wpOld(wpOldPlace),
- m_wpNew(wpNewPlace),
- m_wrSel(wrSel),
- m_Word(word),
- m_nCharset(charset),
- m_SecProps(SecProps),
- m_WordProps(WordProps)
-{
-}
-
-CFXEU_ClearRich::~CFXEU_ClearRich()
-{
-}
-
-void CFXEU_ClearRich::Redo()
-{
- if (m_pEdit && IsLast())
- {
- m_pEdit->SelectNone();
- m_pEdit->SetSel(m_wrSel.BeginPos,m_wrSel.EndPos);
- m_pEdit->Clear(FALSE,TRUE);
- }
-}
-
-void CFXEU_ClearRich::Undo()
-{
- if (m_pEdit)
- {
- m_pEdit->SelectNone();
- m_pEdit->SetCaret(m_wpOld);
- if (m_wpNew.SecCmp(m_wpOld) != 0)
- {
- m_pEdit->InsertReturn(&m_SecProps,&m_WordProps,FALSE,FALSE);
- }
- else
- {
- m_pEdit->InsertWord(m_Word,m_nCharset,&m_WordProps,FALSE,FALSE);
- }
-
- if (IsFirst())
- {
- m_pEdit->PaintInsertText(m_wrSel.BeginPos,m_wrSel.EndPos);
- m_pEdit->SetSel(m_wrSel.BeginPos,m_wrSel.EndPos);
- }
- }
+// CFXEU_ClearRich
+
+CFXEU_ClearRich::CFXEU_ClearRich(CFX_Edit* pEdit,
+ const CPVT_WordPlace& wpOldPlace,
+ const CPVT_WordPlace& wpNewPlace,
+ const CPVT_WordRange& wrSel,
+ FX_WORD word,
+ int32_t charset,
+ const CPVT_SecProps& SecProps,
+ const CPVT_WordProps& WordProps)
+ : m_pEdit(pEdit),
+ m_wpOld(wpOldPlace),
+ m_wpNew(wpNewPlace),
+ m_wrSel(wrSel),
+ m_Word(word),
+ m_nCharset(charset),
+ m_SecProps(SecProps),
+ m_WordProps(WordProps) {}
+
+CFXEU_ClearRich::~CFXEU_ClearRich() {}
+
+void CFXEU_ClearRich::Redo() {
+ if (m_pEdit && IsLast()) {
+ m_pEdit->SelectNone();
+ m_pEdit->SetSel(m_wrSel.BeginPos, m_wrSel.EndPos);
+ m_pEdit->Clear(FALSE, TRUE);
+ }
+}
+
+void CFXEU_ClearRich::Undo() {
+ if (m_pEdit) {
+ m_pEdit->SelectNone();
+ m_pEdit->SetCaret(m_wpOld);
+ if (m_wpNew.SecCmp(m_wpOld) != 0) {
+ m_pEdit->InsertReturn(&m_SecProps, &m_WordProps, FALSE, FALSE);
+ } else {
+ m_pEdit->InsertWord(m_Word, m_nCharset, &m_WordProps, FALSE, FALSE);
+ }
+
+ if (IsFirst()) {
+ m_pEdit->PaintInsertText(m_wrSel.BeginPos, m_wrSel.EndPos);
+ m_pEdit->SetSel(m_wrSel.BeginPos, m_wrSel.EndPos);
+ }
+ }
}
/* -------------------------------------------------------------------------- */
-//CFXEU_InsertText
-
-CFXEU_InsertText::CFXEU_InsertText(CFX_Edit * pEdit, const CPVT_WordPlace & wpOldPlace, const CPVT_WordPlace & wpNewPlace,
- const CFX_WideString & swText, int32_t charset,
- const CPVT_SecProps * pSecProps, const CPVT_WordProps * pWordProps) :
- m_pEdit(pEdit),
- m_wpOld(wpOldPlace),
- m_wpNew(wpNewPlace),
- m_swText(swText),
- m_nCharset(charset),
- m_SecProps(),
- m_WordProps()
-{
- if (pSecProps)
- m_SecProps = *pSecProps;
- if (pWordProps)
- m_WordProps = *pWordProps;
-}
-
-CFXEU_InsertText::~CFXEU_InsertText()
-{
-}
-
-void CFXEU_InsertText::Redo()
-{
- if (m_pEdit && IsLast())
- {
- m_pEdit->SelectNone();
- m_pEdit->SetCaret(m_wpOld);
- m_pEdit->InsertText(m_swText.c_str(), m_nCharset, &m_SecProps, &m_WordProps, FALSE, TRUE);
- }
-}
-
-void CFXEU_InsertText::Undo()
-{
- if (m_pEdit)
- {
- m_pEdit->SelectNone();
- m_pEdit->SetSel(m_wpOld,m_wpNew);
- m_pEdit->Clear(FALSE,TRUE);
- }
+// CFXEU_InsertText
+
+CFXEU_InsertText::CFXEU_InsertText(CFX_Edit* pEdit,
+ const CPVT_WordPlace& wpOldPlace,
+ const CPVT_WordPlace& wpNewPlace,
+ const CFX_WideString& swText,
+ int32_t charset,
+ const CPVT_SecProps* pSecProps,
+ const CPVT_WordProps* pWordProps)
+ : m_pEdit(pEdit),
+ m_wpOld(wpOldPlace),
+ m_wpNew(wpNewPlace),
+ m_swText(swText),
+ m_nCharset(charset),
+ m_SecProps(),
+ m_WordProps() {
+ if (pSecProps)
+ m_SecProps = *pSecProps;
+ if (pWordProps)
+ m_WordProps = *pWordProps;
+}
+
+CFXEU_InsertText::~CFXEU_InsertText() {}
+
+void CFXEU_InsertText::Redo() {
+ if (m_pEdit && IsLast()) {
+ m_pEdit->SelectNone();
+ m_pEdit->SetCaret(m_wpOld);
+ m_pEdit->InsertText(m_swText.c_str(), m_nCharset, &m_SecProps, &m_WordProps,
+ FALSE, TRUE);
+ }
+}
+
+void CFXEU_InsertText::Undo() {
+ if (m_pEdit) {
+ m_pEdit->SelectNone();
+ m_pEdit->SetSel(m_wpOld, m_wpNew);
+ m_pEdit->Clear(FALSE, TRUE);
+ }
}
/* -------------------------------------------------------------------------- */
-CFXEU_SetSecProps::CFXEU_SetSecProps(CFX_Edit * pEdit, const CPVT_WordPlace & place, EDIT_PROPS_E ep,
- const CPVT_SecProps & oldsecprops, const CPVT_WordProps & oldwordprops,
- const CPVT_SecProps & newsecprops, const CPVT_WordProps & newwordprops, const CPVT_WordRange & range)
- : m_pEdit(pEdit),
- m_wpPlace(place),
- m_wrPlace(range),
- m_eProps(ep),
- m_OldSecProps(oldsecprops),
- m_NewSecProps(newsecprops),
- m_OldWordProps(oldwordprops),
- m_NewWordProps(newwordprops)
-{
-}
-
-CFXEU_SetSecProps::~CFXEU_SetSecProps()
-{
-}
-
-void CFXEU_SetSecProps::Redo()
-{
- if (m_pEdit)
- {
- m_pEdit->SetSecProps(m_eProps,m_wpPlace,&m_NewSecProps,&m_NewWordProps,m_wrPlace,FALSE);
- if (IsLast())
- {
- m_pEdit->SelectNone();
- m_pEdit->PaintSetProps(m_eProps,m_wrPlace);
- m_pEdit->SetSel(m_wrPlace.BeginPos,m_wrPlace.EndPos);
- }
- }
-}
-
-void CFXEU_SetSecProps::Undo()
-{
- if (m_pEdit)
- {
- m_pEdit->SetSecProps(m_eProps,m_wpPlace,&m_OldSecProps,&m_OldWordProps,m_wrPlace,FALSE);
- if (IsFirst())
- {
- m_pEdit->SelectNone();
- m_pEdit->PaintSetProps(m_eProps,m_wrPlace);
- m_pEdit->SetSel(m_wrPlace.BeginPos,m_wrPlace.EndPos);
- }
- }
+CFXEU_SetSecProps::CFXEU_SetSecProps(CFX_Edit* pEdit,
+ const CPVT_WordPlace& place,
+ EDIT_PROPS_E ep,
+ const CPVT_SecProps& oldsecprops,
+ const CPVT_WordProps& oldwordprops,
+ const CPVT_SecProps& newsecprops,
+ const CPVT_WordProps& newwordprops,
+ const CPVT_WordRange& range)
+ : m_pEdit(pEdit),
+ m_wpPlace(place),
+ m_wrPlace(range),
+ m_eProps(ep),
+ m_OldSecProps(oldsecprops),
+ m_NewSecProps(newsecprops),
+ m_OldWordProps(oldwordprops),
+ m_NewWordProps(newwordprops) {}
+
+CFXEU_SetSecProps::~CFXEU_SetSecProps() {}
+
+void CFXEU_SetSecProps::Redo() {
+ if (m_pEdit) {
+ m_pEdit->SetSecProps(m_eProps, m_wpPlace, &m_NewSecProps, &m_NewWordProps,
+ m_wrPlace, FALSE);
+ if (IsLast()) {
+ m_pEdit->SelectNone();
+ m_pEdit->PaintSetProps(m_eProps, m_wrPlace);
+ m_pEdit->SetSel(m_wrPlace.BeginPos, m_wrPlace.EndPos);
+ }
+ }
+}
+
+void CFXEU_SetSecProps::Undo() {
+ if (m_pEdit) {
+ m_pEdit->SetSecProps(m_eProps, m_wpPlace, &m_OldSecProps, &m_OldWordProps,
+ m_wrPlace, FALSE);
+ if (IsFirst()) {
+ m_pEdit->SelectNone();
+ m_pEdit->PaintSetProps(m_eProps, m_wrPlace);
+ m_pEdit->SetSel(m_wrPlace.BeginPos, m_wrPlace.EndPos);
+ }
+ }
}
/* -------------------------------------------------------------------------- */
-CFXEU_SetWordProps::CFXEU_SetWordProps(CFX_Edit * pEdit, const CPVT_WordPlace & place, EDIT_PROPS_E ep,
- const CPVT_WordProps & oldprops, const CPVT_WordProps & newprops, const CPVT_WordRange & range)
- : m_pEdit(pEdit),
- m_wpPlace(place),
- m_wrPlace(range),
- m_eProps(ep),
- m_OldWordProps(oldprops),
- m_NewWordProps(newprops)
-{
-}
-
-CFXEU_SetWordProps::~CFXEU_SetWordProps()
-{
-}
-
-void CFXEU_SetWordProps::Redo()
-{
- if (m_pEdit)
- {
- m_pEdit->SetWordProps(m_eProps,m_wpPlace,&m_NewWordProps,m_wrPlace,FALSE);
- if (IsLast())
- {
- m_pEdit->SelectNone();
- m_pEdit->PaintSetProps(m_eProps,m_wrPlace);
- m_pEdit->SetSel(m_wrPlace.BeginPos,m_wrPlace.EndPos);
- }
- }
-}
-
-void CFXEU_SetWordProps::Undo()
-{
- if (m_pEdit)
- {
- m_pEdit->SetWordProps(m_eProps,m_wpPlace,&m_OldWordProps,m_wrPlace,FALSE);
- if (IsFirst())
- {
- m_pEdit->SelectNone();
- m_pEdit->PaintSetProps(m_eProps,m_wrPlace);
- m_pEdit->SetSel(m_wrPlace.BeginPos,m_wrPlace.EndPos);
- }
- }
-}
-
-/* ------------------------------------- CFX_Edit ------------------------------------- */
-
-CFX_Edit::CFX_Edit(IPDF_VariableText * pVT) :
- m_pVT(pVT),
- m_pNotify(NULL),
- m_pOprNotify(NULL),
- m_pVTProvide(NULL),
- m_wpCaret(-1,-1,-1),
- m_wpOldCaret(-1,-1,-1),
- m_SelState(),
- m_ptScrollPos(0,0),
- m_ptRefreshScrollPos(0,0),
- m_bEnableScroll(FALSE),
- m_pIterator(NULL),
- m_ptCaret(0.0f,0.0f),
- m_Undo(FX_EDIT_UNDO_MAXITEM),
- m_nAlignment(0),
- m_bNotifyFlag(FALSE),
- m_bEnableOverflow(FALSE),
- m_bEnableRefresh(TRUE),
- m_rcOldContent(0.0f,0.0f,0.0f,0.0f),
- m_bEnableUndo(TRUE),
- m_bNotify(TRUE),
- m_bOprNotify(FALSE),
- m_pGroupUndoItem(NULL)
-{
- ASSERT(pVT != NULL);
-}
-
-CFX_Edit::~CFX_Edit()
-{
- delete m_pVTProvide;
- m_pVTProvide = NULL;
- delete m_pIterator;
- m_pIterator = NULL;
- ASSERT(m_pGroupUndoItem == NULL);
+CFXEU_SetWordProps::CFXEU_SetWordProps(CFX_Edit* pEdit,
+ const CPVT_WordPlace& place,
+ EDIT_PROPS_E ep,
+ const CPVT_WordProps& oldprops,
+ const CPVT_WordProps& newprops,
+ const CPVT_WordRange& range)
+ : m_pEdit(pEdit),
+ m_wpPlace(place),
+ m_wrPlace(range),
+ m_eProps(ep),
+ m_OldWordProps(oldprops),
+ m_NewWordProps(newprops) {}
+
+CFXEU_SetWordProps::~CFXEU_SetWordProps() {}
+
+void CFXEU_SetWordProps::Redo() {
+ if (m_pEdit) {
+ m_pEdit->SetWordProps(m_eProps, m_wpPlace, &m_NewWordProps, m_wrPlace,
+ FALSE);
+ if (IsLast()) {
+ m_pEdit->SelectNone();
+ m_pEdit->PaintSetProps(m_eProps, m_wrPlace);
+ m_pEdit->SetSel(m_wrPlace.BeginPos, m_wrPlace.EndPos);
+ }
+ }
+}
+
+void CFXEU_SetWordProps::Undo() {
+ if (m_pEdit) {
+ m_pEdit->SetWordProps(m_eProps, m_wpPlace, &m_OldWordProps, m_wrPlace,
+ FALSE);
+ if (IsFirst()) {
+ m_pEdit->SelectNone();
+ m_pEdit->PaintSetProps(m_eProps, m_wrPlace);
+ m_pEdit->SetSel(m_wrPlace.BeginPos, m_wrPlace.EndPos);
+ }
+ }
+}
+
+/* ------------------------------------- CFX_Edit
+ * ------------------------------------- */
+
+CFX_Edit::CFX_Edit(IPDF_VariableText* pVT)
+ : m_pVT(pVT),
+ m_pNotify(NULL),
+ m_pOprNotify(NULL),
+ m_pVTProvide(NULL),
+ m_wpCaret(-1, -1, -1),
+ m_wpOldCaret(-1, -1, -1),
+ m_SelState(),
+ m_ptScrollPos(0, 0),
+ m_ptRefreshScrollPos(0, 0),
+ m_bEnableScroll(FALSE),
+ m_pIterator(NULL),
+ m_ptCaret(0.0f, 0.0f),
+ m_Undo(FX_EDIT_UNDO_MAXITEM),
+ m_nAlignment(0),
+ m_bNotifyFlag(FALSE),
+ m_bEnableOverflow(FALSE),
+ m_bEnableRefresh(TRUE),
+ m_rcOldContent(0.0f, 0.0f, 0.0f, 0.0f),
+ m_bEnableUndo(TRUE),
+ m_bNotify(TRUE),
+ m_bOprNotify(FALSE),
+ m_pGroupUndoItem(NULL) {
+ ASSERT(pVT != NULL);
+}
+
+CFX_Edit::~CFX_Edit() {
+ delete m_pVTProvide;
+ m_pVTProvide = NULL;
+ delete m_pIterator;
+ m_pIterator = NULL;
+ ASSERT(m_pGroupUndoItem == NULL);
}
// public methods
-void CFX_Edit::Initialize()
-{
- m_pVT->Initialize();
- SetCaret(m_pVT->GetBeginWordPlace());
- SetCaretOrigin();
+void CFX_Edit::Initialize() {
+ m_pVT->Initialize();
+ SetCaret(m_pVT->GetBeginWordPlace());
+ SetCaretOrigin();
}
-void CFX_Edit::SetFontMap(IFX_Edit_FontMap * pFontMap)
-{
- delete m_pVTProvide;
- m_pVT->SetProvider(m_pVTProvide = new CFX_Edit_Provider(pFontMap));
+void CFX_Edit::SetFontMap(IFX_Edit_FontMap* pFontMap) {
+ delete m_pVTProvide;
+ m_pVT->SetProvider(m_pVTProvide = new CFX_Edit_Provider(pFontMap));
}
-void CFX_Edit::SetVTProvider(IPDF_VariableText_Provider* pProvider)
-{
- m_pVT->SetProvider(pProvider);
+void CFX_Edit::SetVTProvider(IPDF_VariableText_Provider* pProvider) {
+ m_pVT->SetProvider(pProvider);
}
-void CFX_Edit::SetNotify(IFX_Edit_Notify* pNotify)
-{
- m_pNotify = pNotify;
+void CFX_Edit::SetNotify(IFX_Edit_Notify* pNotify) {
+ m_pNotify = pNotify;
}
-void CFX_Edit::SetOprNotify(IFX_Edit_OprNotify* pOprNotify)
-{
- m_pOprNotify = pOprNotify;
+void CFX_Edit::SetOprNotify(IFX_Edit_OprNotify* pOprNotify) {
+ m_pOprNotify = pOprNotify;
}
-IFX_Edit_Iterator * CFX_Edit::GetIterator()
-{
- if (!m_pIterator)
- m_pIterator = new CFX_Edit_Iterator(this,m_pVT->GetIterator());
+IFX_Edit_Iterator* CFX_Edit::GetIterator() {
+ if (!m_pIterator)
+ m_pIterator = new CFX_Edit_Iterator(this, m_pVT->GetIterator());
- return m_pIterator;
+ return m_pIterator;
}
-IPDF_VariableText * CFX_Edit::GetVariableText()
-{
- return m_pVT;
+IPDF_VariableText* CFX_Edit::GetVariableText() {
+ return m_pVT;
}
-IFX_Edit_FontMap* CFX_Edit::GetFontMap()
-{
- if (m_pVTProvide)
- return m_pVTProvide->GetFontMap();
+IFX_Edit_FontMap* CFX_Edit::GetFontMap() {
+ if (m_pVTProvide)
+ return m_pVTProvide->GetFontMap();
- return NULL;
+ return NULL;
}
-void CFX_Edit::SetPlateRect(const CPDF_Rect & rect, FX_BOOL bPaint/* = TRUE*/)
-{
- m_pVT->SetPlateRect(rect);
- m_ptScrollPos = CPDF_Point(rect.left,rect.top);
- if (bPaint) Paint();
+void CFX_Edit::SetPlateRect(const CPDF_Rect& rect, FX_BOOL bPaint /* = TRUE*/) {
+ m_pVT->SetPlateRect(rect);
+ m_ptScrollPos = CPDF_Point(rect.left, rect.top);
+ if (bPaint)
+ Paint();
}
-void CFX_Edit::SetAlignmentH(int32_t nFormat/* =0 */, FX_BOOL bPaint/* = TRUE*/)
-{
- m_pVT->SetAlignment(nFormat);
- if (bPaint) Paint();
+void CFX_Edit::SetAlignmentH(int32_t nFormat /* =0 */,
+ FX_BOOL bPaint /* = TRUE*/) {
+ m_pVT->SetAlignment(nFormat);
+ if (bPaint)
+ Paint();
}
-void CFX_Edit::SetAlignmentV(int32_t nFormat/* =0 */, FX_BOOL bPaint/* = TRUE*/)
-{
- m_nAlignment = nFormat;
- if (bPaint) Paint();
+void CFX_Edit::SetAlignmentV(int32_t nFormat /* =0 */,
+ FX_BOOL bPaint /* = TRUE*/) {
+ m_nAlignment = nFormat;
+ if (bPaint)
+ Paint();
}
-void CFX_Edit::SetPasswordChar(FX_WORD wSubWord/* ='*' */, FX_BOOL bPaint/* = TRUE*/)
-{
- m_pVT->SetPasswordChar(wSubWord);
- if (bPaint) Paint();
+void CFX_Edit::SetPasswordChar(FX_WORD wSubWord /* ='*' */,
+ FX_BOOL bPaint /* = TRUE*/) {
+ m_pVT->SetPasswordChar(wSubWord);
+ if (bPaint)
+ Paint();
}
-void CFX_Edit::SetLimitChar(int32_t nLimitChar/* =0 */, FX_BOOL bPaint/* = TRUE*/)
-{
- m_pVT->SetLimitChar(nLimitChar);
- if (bPaint) Paint();
+void CFX_Edit::SetLimitChar(int32_t nLimitChar /* =0 */,
+ FX_BOOL bPaint /* = TRUE*/) {
+ m_pVT->SetLimitChar(nLimitChar);
+ if (bPaint)
+ Paint();
}
-void CFX_Edit::SetCharArray(int32_t nCharArray/* =0 */, FX_BOOL bPaint/* = TRUE*/)
-{
- m_pVT->SetCharArray(nCharArray);
- if (bPaint) Paint();
+void CFX_Edit::SetCharArray(int32_t nCharArray /* =0 */,
+ FX_BOOL bPaint /* = TRUE*/) {
+ m_pVT->SetCharArray(nCharArray);
+ if (bPaint)
+ Paint();
}
-void CFX_Edit::SetCharSpace(FX_FLOAT fCharSpace/* =0.0f */, FX_BOOL bPaint/* = TRUE*/)
-{
- m_pVT->SetCharSpace(fCharSpace);
- if (bPaint) Paint();
+void CFX_Edit::SetCharSpace(FX_FLOAT fCharSpace /* =0.0f */,
+ FX_BOOL bPaint /* = TRUE*/) {
+ m_pVT->SetCharSpace(fCharSpace);
+ if (bPaint)
+ Paint();
}
-void CFX_Edit::SetHorzScale(int32_t nHorzScale/* =100 */, FX_BOOL bPaint/* = TRUE*/)
-{
- m_pVT->SetHorzScale(nHorzScale);
- if (bPaint) Paint();
+void CFX_Edit::SetHorzScale(int32_t nHorzScale /* =100 */,
+ FX_BOOL bPaint /* = TRUE*/) {
+ m_pVT->SetHorzScale(nHorzScale);
+ if (bPaint)
+ Paint();
}
-void CFX_Edit::SetMultiLine(FX_BOOL bMultiLine/* =TRUE */, FX_BOOL bPaint/* = TRUE*/)
-{
- m_pVT->SetMultiLine(bMultiLine);
- if (bPaint) Paint();
+void CFX_Edit::SetMultiLine(FX_BOOL bMultiLine /* =TRUE */,
+ FX_BOOL bPaint /* = TRUE*/) {
+ m_pVT->SetMultiLine(bMultiLine);
+ if (bPaint)
+ Paint();
}
-void CFX_Edit::SetAutoReturn(FX_BOOL bAuto/* =TRUE */, FX_BOOL bPaint/* = TRUE*/)
-{
- m_pVT->SetAutoReturn(bAuto);
- if (bPaint) Paint();
+void CFX_Edit::SetAutoReturn(FX_BOOL bAuto /* =TRUE */,
+ FX_BOOL bPaint /* = TRUE*/) {
+ m_pVT->SetAutoReturn(bAuto);
+ if (bPaint)
+ Paint();
}
-void CFX_Edit::SetLineLeading(FX_FLOAT fLineLeading/* =TRUE */, FX_BOOL bPaint/* = TRUE*/)
-{
- m_pVT->SetLineLeading(fLineLeading);
- if (bPaint) Paint();
+void CFX_Edit::SetLineLeading(FX_FLOAT fLineLeading /* =TRUE */,
+ FX_BOOL bPaint /* = TRUE*/) {
+ m_pVT->SetLineLeading(fLineLeading);
+ if (bPaint)
+ Paint();
}
-void CFX_Edit::SetAutoFontSize(FX_BOOL bAuto/* =TRUE */, FX_BOOL bPaint/* = TRUE*/)
-{
- m_pVT->SetAutoFontSize(bAuto);
- if (bPaint) Paint();
+void CFX_Edit::SetAutoFontSize(FX_BOOL bAuto /* =TRUE */,
+ FX_BOOL bPaint /* = TRUE*/) {
+ m_pVT->SetAutoFontSize(bAuto);
+ if (bPaint)
+ Paint();
}
-void CFX_Edit::SetFontSize(FX_FLOAT fFontSize, FX_BOOL bPaint/* = TRUE*/)
-{
- m_pVT->SetFontSize(fFontSize);
- if (bPaint) Paint();
+void CFX_Edit::SetFontSize(FX_FLOAT fFontSize, FX_BOOL bPaint /* = TRUE*/) {
+ m_pVT->SetFontSize(fFontSize);
+ if (bPaint)
+ Paint();
}
-void CFX_Edit::SetAutoScroll(FX_BOOL bAuto/* =TRUE */, FX_BOOL bPaint/* = TRUE*/)
-{
- m_bEnableScroll = bAuto;
- if (bPaint) Paint();
+void CFX_Edit::SetAutoScroll(FX_BOOL bAuto /* =TRUE */,
+ FX_BOOL bPaint /* = TRUE*/) {
+ m_bEnableScroll = bAuto;
+ if (bPaint)
+ Paint();
}
-void CFX_Edit::SetTextOverflow(FX_BOOL bAllowed /*= FALSE*/, FX_BOOL bPaint/* = TRUE*/)
-{
- m_bEnableOverflow = bAllowed;
- if (bPaint) Paint();
+void CFX_Edit::SetTextOverflow(FX_BOOL bAllowed /*= FALSE*/,
+ FX_BOOL bPaint /* = TRUE*/) {
+ m_bEnableOverflow = bAllowed;
+ if (bPaint)
+ Paint();
}
-void CFX_Edit::SetSel(int32_t nStartChar,int32_t nEndChar)
-{
- if (m_pVT->IsValid())
- {
- if (nStartChar == 0 && nEndChar < 0)
- {
- SelectAll();
- }
- else if (nStartChar < 0)
- {
- SelectNone();
- }
- else
- {
- if (nStartChar < nEndChar)
- {
- SetSel(m_pVT->WordIndexToWordPlace(nStartChar),m_pVT->WordIndexToWordPlace(nEndChar));
- }
- else
- {
- SetSel(m_pVT->WordIndexToWordPlace(nEndChar),m_pVT->WordIndexToWordPlace(nStartChar));
- }
- }
+void CFX_Edit::SetSel(int32_t nStartChar, int32_t nEndChar) {
+ if (m_pVT->IsValid()) {
+ if (nStartChar == 0 && nEndChar < 0) {
+ SelectAll();
+ } else if (nStartChar < 0) {
+ SelectNone();
+ } else {
+ if (nStartChar < nEndChar) {
+ SetSel(m_pVT->WordIndexToWordPlace(nStartChar),
+ m_pVT->WordIndexToWordPlace(nEndChar));
+ } else {
+ SetSel(m_pVT->WordIndexToWordPlace(nEndChar),
+ m_pVT->WordIndexToWordPlace(nStartChar));
+ }
}
+ }
}
-void CFX_Edit::SetSel(const CPVT_WordPlace & begin,const CPVT_WordPlace & end)
-{
- if (m_pVT->IsValid())
- {
- SelectNone();
+void CFX_Edit::SetSel(const CPVT_WordPlace& begin, const CPVT_WordPlace& end) {
+ if (m_pVT->IsValid()) {
+ SelectNone();
- m_SelState.Set(begin,end);
+ m_SelState.Set(begin, end);
- SetCaret(m_SelState.EndPos);
+ SetCaret(m_SelState.EndPos);
- if (m_SelState.IsExist())
- {
- ScrollToCaret();
- CPVT_WordRange wr(m_SelState.BeginPos,m_SelState.EndPos);
- Refresh(RP_OPTIONAL,&wr);
- SetCaretInfo();
- }
- else
- {
- ScrollToCaret();
- SetCaretInfo();
- }
+ if (m_SelState.IsExist()) {
+ ScrollToCaret();
+ CPVT_WordRange wr(m_SelState.BeginPos, m_SelState.EndPos);
+ Refresh(RP_OPTIONAL, &wr);
+ SetCaretInfo();
+ } else {
+ ScrollToCaret();
+ SetCaretInfo();
}
+ }
}
-void CFX_Edit::GetSel(int32_t & nStartChar, int32_t & nEndChar) const
-{
- nStartChar = -1;
- nEndChar = -1;
+void CFX_Edit::GetSel(int32_t& nStartChar, int32_t& nEndChar) const {
+ nStartChar = -1;
+ nEndChar = -1;
- if (m_pVT->IsValid())
- {
- if (m_SelState.IsExist())
- {
- if (m_SelState.BeginPos.WordCmp(m_SelState.EndPos)<0)
- {
- nStartChar = m_pVT->WordPlaceToWordIndex(m_SelState.BeginPos);
- nEndChar = m_pVT->WordPlaceToWordIndex(m_SelState.EndPos);
- }
- else
- {
- nStartChar = m_pVT->WordPlaceToWordIndex(m_SelState.EndPos);
- nEndChar = m_pVT->WordPlaceToWordIndex(m_SelState.BeginPos);
- }
- }
- else
- {
- nStartChar = m_pVT->WordPlaceToWordIndex(m_wpCaret);
- nEndChar = m_pVT->WordPlaceToWordIndex(m_wpCaret);
- }
+ if (m_pVT->IsValid()) {
+ if (m_SelState.IsExist()) {
+ if (m_SelState.BeginPos.WordCmp(m_SelState.EndPos) < 0) {
+ nStartChar = m_pVT->WordPlaceToWordIndex(m_SelState.BeginPos);
+ nEndChar = m_pVT->WordPlaceToWordIndex(m_SelState.EndPos);
+ } else {
+ nStartChar = m_pVT->WordPlaceToWordIndex(m_SelState.EndPos);
+ nEndChar = m_pVT->WordPlaceToWordIndex(m_SelState.BeginPos);
+ }
+ } else {
+ nStartChar = m_pVT->WordPlaceToWordIndex(m_wpCaret);
+ nEndChar = m_pVT->WordPlaceToWordIndex(m_wpCaret);
}
+ }
}
-int32_t CFX_Edit::GetCaret() const
-{
- if (m_pVT->IsValid())
- return m_pVT->WordPlaceToWordIndex(m_wpCaret);
+int32_t CFX_Edit::GetCaret() const {
+ if (m_pVT->IsValid())
+ return m_pVT->WordPlaceToWordIndex(m_wpCaret);
- return -1;
+ return -1;
}
-CPVT_WordPlace CFX_Edit::GetCaretWordPlace() const
-{
- return m_wpCaret;
+CPVT_WordPlace CFX_Edit::GetCaretWordPlace() const {
+ return m_wpCaret;
}
-CFX_WideString CFX_Edit::GetText() const
-{
- CFX_WideString swRet;
+CFX_WideString CFX_Edit::GetText() const {
+ CFX_WideString swRet;
- if (m_pVT->IsValid())
- {
- if (IPDF_VariableText_Iterator * pIterator = m_pVT->GetIterator())
- {
- FX_BOOL bRich = m_pVT->IsRichText();
+ if (m_pVT->IsValid()) {
+ if (IPDF_VariableText_Iterator* pIterator = m_pVT->GetIterator()) {
+ FX_BOOL bRich = m_pVT->IsRichText();
- pIterator->SetAt(0);
+ pIterator->SetAt(0);
- CPVT_Word wordinfo;
- CPVT_WordPlace oldplace = pIterator->GetAt();
- while (pIterator->NextWord())
- {
- CPVT_WordPlace place = pIterator->GetAt();
-
- if (pIterator->GetWord(wordinfo))
- {
- if (bRich)
- {
- swRet += wordinfo.Word;
- }
- else
- {
- swRet += wordinfo.Word;
- }
- }
+ CPVT_Word wordinfo;
+ CPVT_WordPlace oldplace = pIterator->GetAt();
+ while (pIterator->NextWord()) {
+ CPVT_WordPlace place = pIterator->GetAt();
- if (oldplace.SecCmp(place) != 0)
- {
- swRet += 0x0D;
- swRet += 0x0A;
- }
+ if (pIterator->GetWord(wordinfo)) {
+ if (bRich) {
+ swRet += wordinfo.Word;
+ } else {
+ swRet += wordinfo.Word;
+ }
+ }
- oldplace = place;
- }
+ if (oldplace.SecCmp(place) != 0) {
+ swRet += 0x0D;
+ swRet += 0x0A;
}
+
+ oldplace = place;
+ }
}
+ }
- return swRet;
+ return swRet;
}
-CFX_WideString CFX_Edit::GetRangeText(const CPVT_WordRange & range) const
-{
- CFX_WideString swRet;
+CFX_WideString CFX_Edit::GetRangeText(const CPVT_WordRange& range) const {
+ CFX_WideString swRet;
- if (m_pVT->IsValid())
- {
- FX_BOOL bRich = m_pVT->IsRichText();
+ if (m_pVT->IsValid()) {
+ FX_BOOL bRich = m_pVT->IsRichText();
- if (IPDF_VariableText_Iterator * pIterator = m_pVT->GetIterator())
- {
- CPVT_WordRange wrTemp = range;
- m_pVT->UpdateWordPlace(wrTemp.BeginPos);
- m_pVT->UpdateWordPlace(wrTemp.EndPos);
- pIterator->SetAt(wrTemp.BeginPos);
+ if (IPDF_VariableText_Iterator* pIterator = m_pVT->GetIterator()) {
+ CPVT_WordRange wrTemp = range;
+ m_pVT->UpdateWordPlace(wrTemp.BeginPos);
+ m_pVT->UpdateWordPlace(wrTemp.EndPos);
+ pIterator->SetAt(wrTemp.BeginPos);
- CPVT_Word wordinfo;
- CPVT_WordPlace oldplace = wrTemp.BeginPos;
- while (pIterator->NextWord())
- {
- CPVT_WordPlace place = pIterator->GetAt();
- if (place.WordCmp(wrTemp.EndPos) > 0)break;
-
- if (pIterator->GetWord(wordinfo))
- {
- if (bRich)
- {
- swRet += wordinfo.Word;
- }
- else
- {
- swRet += wordinfo.Word;
- }
- }
+ CPVT_Word wordinfo;
+ CPVT_WordPlace oldplace = wrTemp.BeginPos;
+ while (pIterator->NextWord()) {
+ CPVT_WordPlace place = pIterator->GetAt();
+ if (place.WordCmp(wrTemp.EndPos) > 0)
+ break;
- if (oldplace.SecCmp(place) != 0)
- {
- swRet += 0x0D;
- swRet += 0x0A;
- }
+ if (pIterator->GetWord(wordinfo)) {
+ if (bRich) {
+ swRet += wordinfo.Word;
+ } else {
+ swRet += wordinfo.Word;
+ }
+ }
- oldplace = place;
- }
+ if (oldplace.SecCmp(place) != 0) {
+ swRet += 0x0D;
+ swRet += 0x0A;
}
+
+ oldplace = place;
+ }
}
+ }
- return swRet;
+ return swRet;
}
-CFX_WideString CFX_Edit::GetSelText() const
-{
- return GetRangeText(m_SelState.ConvertToWordRange());
+CFX_WideString CFX_Edit::GetSelText() const {
+ return GetRangeText(m_SelState.ConvertToWordRange());
}
-int32_t CFX_Edit::GetTotalWords() const
-{
- return m_pVT->GetTotalWords();
+int32_t CFX_Edit::GetTotalWords() const {
+ return m_pVT->GetTotalWords();
}
-int32_t CFX_Edit::GetTotalLines() const
-{
- int32_t nLines = 0;
+int32_t CFX_Edit::GetTotalLines() const {
+ int32_t nLines = 0;
- if (IPDF_VariableText_Iterator * pIterator = m_pVT->GetIterator())
- {
- pIterator->SetAt(0);
- while (pIterator->NextLine())
- nLines++;
- }
+ if (IPDF_VariableText_Iterator* pIterator = m_pVT->GetIterator()) {
+ pIterator->SetAt(0);
+ while (pIterator->NextLine())
+ nLines++;
+ }
- return nLines+1;
+ return nLines + 1;
}
-CPVT_WordRange CFX_Edit::GetSelectWordRange() const
-{
- return m_SelState.ConvertToWordRange();
+CPVT_WordRange CFX_Edit::GetSelectWordRange() const {
+ return m_SelState.ConvertToWordRange();
}
-CPVT_WordRange CFX_Edit::CombineWordRange(const CPVT_WordRange & wr1, const CPVT_WordRange & wr2)
-{
- CPVT_WordRange wrRet;
+CPVT_WordRange CFX_Edit::CombineWordRange(const CPVT_WordRange& wr1,
+ const CPVT_WordRange& wr2) {
+ CPVT_WordRange wrRet;
- if (wr1.BeginPos.WordCmp(wr2.BeginPos) < 0)
- {
- wrRet.BeginPos = wr1.BeginPos;
- }
- else
- {
- wrRet.BeginPos = wr2.BeginPos;
- }
+ if (wr1.BeginPos.WordCmp(wr2.BeginPos) < 0) {
+ wrRet.BeginPos = wr1.BeginPos;
+ } else {
+ wrRet.BeginPos = wr2.BeginPos;
+ }
- if (wr1.EndPos.WordCmp(wr2.EndPos) < 0)
- {
- wrRet.EndPos = wr2.EndPos;
- }
- else
- {
- wrRet.EndPos = wr1.EndPos;
- }
+ if (wr1.EndPos.WordCmp(wr2.EndPos) < 0) {
+ wrRet.EndPos = wr2.EndPos;
+ } else {
+ wrRet.EndPos = wr1.EndPos;
+ }
- return wrRet;
+ return wrRet;
}
-FX_BOOL CFX_Edit::IsRichText() const
-{
- return m_pVT->IsRichText();
+FX_BOOL CFX_Edit::IsRichText() const {
+ return m_pVT->IsRichText();
}
-void CFX_Edit::SetRichText(FX_BOOL bRichText/* =TRUE */, FX_BOOL bPaint/* = TRUE*/)
-{
- m_pVT->SetRichText(bRichText);
- if (bPaint) Paint();
+void CFX_Edit::SetRichText(FX_BOOL bRichText /* =TRUE */,
+ FX_BOOL bPaint /* = TRUE*/) {
+ m_pVT->SetRichText(bRichText);
+ if (bPaint)
+ Paint();
}
-FX_BOOL CFX_Edit::SetRichFontIndex(int32_t nFontIndex)
-{
- CPVT_WordProps WordProps;
- WordProps.nFontIndex = nFontIndex;
- return SetRichTextProps(EP_FONTINDEX,NULL,&WordProps);
+FX_BOOL CFX_Edit::SetRichFontIndex(int32_t nFontIndex) {
+ CPVT_WordProps WordProps;
+ WordProps.nFontIndex = nFontIndex;
+ return SetRichTextProps(EP_FONTINDEX, NULL, &WordProps);
}
-FX_BOOL CFX_Edit::SetRichFontSize(FX_FLOAT fFontSize)
-{
- CPVT_WordProps WordProps;
- WordProps.fFontSize = fFontSize;
- return SetRichTextProps(EP_FONTSIZE,NULL,&WordProps);
+FX_BOOL CFX_Edit::SetRichFontSize(FX_FLOAT fFontSize) {
+ CPVT_WordProps WordProps;
+ WordProps.fFontSize = fFontSize;
+ return SetRichTextProps(EP_FONTSIZE, NULL, &WordProps);
}
-FX_BOOL CFX_Edit::SetRichTextColor(FX_COLORREF dwColor)
-{
- CPVT_WordProps WordProps;
- WordProps.dwWordColor = dwColor;
- return SetRichTextProps(EP_WORDCOLOR,NULL,&WordProps);
+FX_BOOL CFX_Edit::SetRichTextColor(FX_COLORREF dwColor) {
+ CPVT_WordProps WordProps;
+ WordProps.dwWordColor = dwColor;
+ return SetRichTextProps(EP_WORDCOLOR, NULL, &WordProps);
}
-FX_BOOL CFX_Edit::SetRichTextScript(int32_t nScriptType)
-{
- CPVT_WordProps WordProps;
- WordProps.nScriptType = nScriptType;
- return SetRichTextProps(EP_SCRIPTTYPE,NULL,&WordProps);
+FX_BOOL CFX_Edit::SetRichTextScript(int32_t nScriptType) {
+ CPVT_WordProps WordProps;
+ WordProps.nScriptType = nScriptType;
+ return SetRichTextProps(EP_SCRIPTTYPE, NULL, &WordProps);
}
-FX_BOOL CFX_Edit::SetRichTextBold(FX_BOOL bBold)
-{
- CPVT_WordProps WordProps;
- if (bBold)
- WordProps.nWordStyle |= PVTWORD_STYLE_BOLD;
- return SetRichTextProps(EP_BOLD,NULL,&WordProps);
+FX_BOOL CFX_Edit::SetRichTextBold(FX_BOOL bBold) {
+ CPVT_WordProps WordProps;
+ if (bBold)
+ WordProps.nWordStyle |= PVTWORD_STYLE_BOLD;
+ return SetRichTextProps(EP_BOLD, NULL, &WordProps);
}
-FX_BOOL CFX_Edit::SetRichTextItalic(FX_BOOL bItalic)
-{
- CPVT_WordProps WordProps;
- if (bItalic)
- WordProps.nWordStyle |= PVTWORD_STYLE_ITALIC;
- return SetRichTextProps(EP_ITALIC,NULL,&WordProps);
+FX_BOOL CFX_Edit::SetRichTextItalic(FX_BOOL bItalic) {
+ CPVT_WordProps WordProps;
+ if (bItalic)
+ WordProps.nWordStyle |= PVTWORD_STYLE_ITALIC;
+ return SetRichTextProps(EP_ITALIC, NULL, &WordProps);
}
-FX_BOOL CFX_Edit::SetRichTextUnderline(FX_BOOL bUnderline)
-{
- CPVT_WordProps WordProps;
- if (bUnderline)
- WordProps.nWordStyle |= PVTWORD_STYLE_UNDERLINE;
- return SetRichTextProps(EP_UNDERLINE,NULL,&WordProps);
+FX_BOOL CFX_Edit::SetRichTextUnderline(FX_BOOL bUnderline) {
+ CPVT_WordProps WordProps;
+ if (bUnderline)
+ WordProps.nWordStyle |= PVTWORD_STYLE_UNDERLINE;
+ return SetRichTextProps(EP_UNDERLINE, NULL, &WordProps);
}
-FX_BOOL CFX_Edit::SetRichTextCrossout(FX_BOOL bCrossout)
-{
- CPVT_WordProps WordProps;
- if (bCrossout)
- WordProps.nWordStyle |= PVTWORD_STYLE_CROSSOUT;
- return SetRichTextProps(EP_CROSSOUT,NULL,&WordProps);
+FX_BOOL CFX_Edit::SetRichTextCrossout(FX_BOOL bCrossout) {
+ CPVT_WordProps WordProps;
+ if (bCrossout)
+ WordProps.nWordStyle |= PVTWORD_STYLE_CROSSOUT;
+ return SetRichTextProps(EP_CROSSOUT, NULL, &WordProps);
}
-FX_BOOL CFX_Edit::SetRichTextCharSpace(FX_FLOAT fCharSpace)
-{
- CPVT_WordProps WordProps;
- WordProps.fCharSpace = fCharSpace;
- return SetRichTextProps(EP_CHARSPACE,NULL,&WordProps);
+FX_BOOL CFX_Edit::SetRichTextCharSpace(FX_FLOAT fCharSpace) {
+ CPVT_WordProps WordProps;
+ WordProps.fCharSpace = fCharSpace;
+ return SetRichTextProps(EP_CHARSPACE, NULL, &WordProps);
}
-FX_BOOL CFX_Edit::SetRichTextHorzScale(int32_t nHorzScale /*= 100*/)
-{
- CPVT_WordProps WordProps;
- WordProps.nHorzScale = nHorzScale;
- return SetRichTextProps(EP_HORZSCALE,NULL,&WordProps);
+FX_BOOL CFX_Edit::SetRichTextHorzScale(int32_t nHorzScale /*= 100*/) {
+ CPVT_WordProps WordProps;
+ WordProps.nHorzScale = nHorzScale;
+ return SetRichTextProps(EP_HORZSCALE, NULL, &WordProps);
}
-FX_BOOL CFX_Edit::SetRichTextLineLeading(FX_FLOAT fLineLeading)
-{
- CPVT_SecProps SecProps;
- SecProps.fLineLeading = fLineLeading;
- return SetRichTextProps(EP_LINELEADING,&SecProps,NULL);
+FX_BOOL CFX_Edit::SetRichTextLineLeading(FX_FLOAT fLineLeading) {
+ CPVT_SecProps SecProps;
+ SecProps.fLineLeading = fLineLeading;
+ return SetRichTextProps(EP_LINELEADING, &SecProps, NULL);
}
-FX_BOOL CFX_Edit::SetRichTextLineIndent(FX_FLOAT fLineIndent)
-{
- CPVT_SecProps SecProps;
- SecProps.fLineIndent = fLineIndent;
- return SetRichTextProps(EP_LINEINDENT,&SecProps,NULL);
+FX_BOOL CFX_Edit::SetRichTextLineIndent(FX_FLOAT fLineIndent) {
+ CPVT_SecProps SecProps;
+ SecProps.fLineIndent = fLineIndent;
+ return SetRichTextProps(EP_LINEINDENT, &SecProps, NULL);
}
-FX_BOOL CFX_Edit::SetRichTextAlignment(int32_t nAlignment)
-{
- CPVT_SecProps SecProps;
- SecProps.nAlignment = nAlignment;
- return SetRichTextProps(EP_ALIGNMENT,&SecProps,NULL);
+FX_BOOL CFX_Edit::SetRichTextAlignment(int32_t nAlignment) {
+ CPVT_SecProps SecProps;
+ SecProps.nAlignment = nAlignment;
+ return SetRichTextProps(EP_ALIGNMENT, &SecProps, NULL);
}
-FX_BOOL CFX_Edit::SetRichTextProps(EDIT_PROPS_E eProps, const CPVT_SecProps * pSecProps, const CPVT_WordProps * pWordProps)
-{
- FX_BOOL bSet = FALSE;
- FX_BOOL bSet1,bSet2;
- if (m_pVT->IsValid() && m_pVT->IsRichText())
- {
- if (IPDF_VariableText_Iterator * pIterator = m_pVT->GetIterator())
- {
- CPVT_WordRange wrTemp = m_SelState.ConvertToWordRange();
+FX_BOOL CFX_Edit::SetRichTextProps(EDIT_PROPS_E eProps,
+ const CPVT_SecProps* pSecProps,
+ const CPVT_WordProps* pWordProps) {
+ FX_BOOL bSet = FALSE;
+ FX_BOOL bSet1, bSet2;
+ if (m_pVT->IsValid() && m_pVT->IsRichText()) {
+ if (IPDF_VariableText_Iterator* pIterator = m_pVT->GetIterator()) {
+ CPVT_WordRange wrTemp = m_SelState.ConvertToWordRange();
- m_pVT->UpdateWordPlace(wrTemp.BeginPos);
- m_pVT->UpdateWordPlace(wrTemp.EndPos);
- pIterator->SetAt(wrTemp.BeginPos);
+ m_pVT->UpdateWordPlace(wrTemp.BeginPos);
+ m_pVT->UpdateWordPlace(wrTemp.EndPos);
+ pIterator->SetAt(wrTemp.BeginPos);
- BeginGroupUndo(L"");;
+ BeginGroupUndo(L"");
+ ;
- bSet = SetSecProps(eProps,wrTemp.BeginPos,pSecProps,pWordProps,wrTemp,TRUE);
+ bSet = SetSecProps(eProps, wrTemp.BeginPos, pSecProps, pWordProps, wrTemp,
+ TRUE);
- while (pIterator->NextWord())
- {
- CPVT_WordPlace place = pIterator->GetAt();
- if (place.WordCmp(wrTemp.EndPos) > 0) break;
- bSet1 = SetSecProps(eProps,place,pSecProps,pWordProps,wrTemp,TRUE);
- bSet2 = SetWordProps(eProps,place,pWordProps,wrTemp,TRUE);
+ while (pIterator->NextWord()) {
+ CPVT_WordPlace place = pIterator->GetAt();
+ if (place.WordCmp(wrTemp.EndPos) > 0)
+ break;
+ bSet1 = SetSecProps(eProps, place, pSecProps, pWordProps, wrTemp, TRUE);
+ bSet2 = SetWordProps(eProps, place, pWordProps, wrTemp, TRUE);
- if (!bSet)
- bSet = (bSet1 || bSet2);
- }
+ if (!bSet)
+ bSet = (bSet1 || bSet2);
+ }
- EndGroupUndo();
+ EndGroupUndo();
- if (bSet)
- {
- PaintSetProps(eProps,wrTemp);
- }
- }
+ if (bSet) {
+ PaintSetProps(eProps, wrTemp);
+ }
}
+ }
- return bSet;
+ return bSet;
}
-void CFX_Edit::PaintSetProps(EDIT_PROPS_E eProps, const CPVT_WordRange & wr)
-{
- switch(eProps)
- {
+void CFX_Edit::PaintSetProps(EDIT_PROPS_E eProps, const CPVT_WordRange& wr) {
+ switch (eProps) {
case EP_LINELEADING:
case EP_LINEINDENT:
case EP_ALIGNMENT:
- RearrangePart(wr);
- ScrollToCaret();
- Refresh(RP_ANALYSE);
- SetCaretOrigin();
- SetCaretInfo();
- break;
+ RearrangePart(wr);
+ ScrollToCaret();
+ Refresh(RP_ANALYSE);
+ SetCaretOrigin();
+ SetCaretInfo();
+ break;
case EP_WORDCOLOR:
case EP_UNDERLINE:
case EP_CROSSOUT:
- Refresh(RP_OPTIONAL,&wr);
- break;
+ Refresh(RP_OPTIONAL, &wr);
+ break;
case EP_FONTINDEX:
case EP_FONTSIZE:
case EP_SCRIPTTYPE:
@@ -1503,2053 +1320,1814 @@ void CFX_Edit::PaintSetProps(EDIT_PROPS_E eProps, const CPVT_WordRange & wr)
case EP_HORZSCALE:
case EP_BOLD:
case EP_ITALIC:
- RearrangePart(wr);
- ScrollToCaret();
-
- CPVT_WordRange wrRefresh(m_pVT->GetSectionBeginPlace(wr.BeginPos),
- m_pVT->GetSectionEndPlace(wr.EndPos));
- Refresh(RP_ANALYSE,&wrRefresh);
-
- SetCaretOrigin();
- SetCaretInfo();
- break;
- }
-}
-
-FX_BOOL CFX_Edit::SetSecProps(EDIT_PROPS_E eProps, const CPVT_WordPlace & place,
- const CPVT_SecProps * pSecProps, const CPVT_WordProps * pWordProps,
- const CPVT_WordRange & wr, FX_BOOL bAddUndo)
-{
- if (m_pVT->IsValid() && m_pVT->IsRichText())
- {
- if (IPDF_VariableText_Iterator * pIterator = m_pVT->GetIterator())
- {
- FX_BOOL bSet = FALSE;
- CPVT_Section secinfo;
- CPVT_Section OldSecinfo;
-
- CPVT_WordPlace oldplace = pIterator->GetAt();
-
- if (eProps == EP_LINELEADING || eProps == EP_LINEINDENT || eProps == EP_ALIGNMENT)
- {
- if (pSecProps)
- {
- pIterator->SetAt(place);
- if (pIterator->GetSection(secinfo))
- {
- if (bAddUndo) OldSecinfo = secinfo;
-
- switch(eProps)
- {
- case EP_LINELEADING:
- if (!FX_EDIT_IsFloatEqual(secinfo.SecProps.fLineLeading,pSecProps->fLineLeading))
- {
- secinfo.SecProps.fLineLeading = pSecProps->fLineLeading;
- bSet = TRUE;
- }
- break;
- case EP_LINEINDENT:
- if (!FX_EDIT_IsFloatEqual(secinfo.SecProps.fLineIndent,pSecProps->fLineIndent))
- {
- secinfo.SecProps.fLineIndent = pSecProps->fLineIndent;
- bSet = TRUE;
- }
- break;
- case EP_ALIGNMENT:
- if (secinfo.SecProps.nAlignment != pSecProps->nAlignment)
- {
- secinfo.SecProps.nAlignment = pSecProps->nAlignment;
- bSet = TRUE;
- }
- break;
- default:
- break;
- }
- }
+ RearrangePart(wr);
+ ScrollToCaret();
+
+ CPVT_WordRange wrRefresh(m_pVT->GetSectionBeginPlace(wr.BeginPos),
+ m_pVT->GetSectionEndPlace(wr.EndPos));
+ Refresh(RP_ANALYSE, &wrRefresh);
+
+ SetCaretOrigin();
+ SetCaretInfo();
+ break;
+ }
+}
+
+FX_BOOL CFX_Edit::SetSecProps(EDIT_PROPS_E eProps,
+ const CPVT_WordPlace& place,
+ const CPVT_SecProps* pSecProps,
+ const CPVT_WordProps* pWordProps,
+ const CPVT_WordRange& wr,
+ FX_BOOL bAddUndo) {
+ if (m_pVT->IsValid() && m_pVT->IsRichText()) {
+ if (IPDF_VariableText_Iterator* pIterator = m_pVT->GetIterator()) {
+ FX_BOOL bSet = FALSE;
+ CPVT_Section secinfo;
+ CPVT_Section OldSecinfo;
+
+ CPVT_WordPlace oldplace = pIterator->GetAt();
+
+ if (eProps == EP_LINELEADING || eProps == EP_LINEINDENT ||
+ eProps == EP_ALIGNMENT) {
+ if (pSecProps) {
+ pIterator->SetAt(place);
+ if (pIterator->GetSection(secinfo)) {
+ if (bAddUndo)
+ OldSecinfo = secinfo;
+
+ switch (eProps) {
+ case EP_LINELEADING:
+ if (!FX_EDIT_IsFloatEqual(secinfo.SecProps.fLineLeading,
+ pSecProps->fLineLeading)) {
+ secinfo.SecProps.fLineLeading = pSecProps->fLineLeading;
+ bSet = TRUE;
}
- }
- else
- {
- if (pWordProps && place == m_pVT->GetSectionBeginPlace(place))
- {
- pIterator->SetAt(place);
- if (pIterator->GetSection(secinfo))
- {
- if (bAddUndo) OldSecinfo = secinfo;
-
- switch(eProps)
- {
- case EP_FONTINDEX:
- if (secinfo.WordProps.nFontIndex != pWordProps->nFontIndex)
- {
- secinfo.WordProps.nFontIndex = pWordProps->nFontIndex;
- bSet = TRUE;
- }
- break;
- case EP_FONTSIZE:
- if (!FX_EDIT_IsFloatEqual(secinfo.WordProps.fFontSize,pWordProps->fFontSize))
- {
- secinfo.WordProps.fFontSize = pWordProps->fFontSize;
- bSet = TRUE;
- }
- break;
- case EP_WORDCOLOR:
- if (secinfo.WordProps.dwWordColor != pWordProps->dwWordColor)
- {
- secinfo.WordProps.dwWordColor = pWordProps->dwWordColor;
- bSet = TRUE;
- }
- break;
- case EP_SCRIPTTYPE:
- if (secinfo.WordProps.nScriptType != pWordProps->nScriptType)
- {
- secinfo.WordProps.nScriptType = pWordProps->nScriptType;
- bSet = TRUE;
- }
- break;
- case EP_CHARSPACE:
- if (!FX_EDIT_IsFloatEqual(secinfo.WordProps.fCharSpace,pWordProps->fCharSpace))
- {
- secinfo.WordProps.fCharSpace = pWordProps->fCharSpace;
- bSet = TRUE;
- }
- break;
- case EP_HORZSCALE:
- if (secinfo.WordProps.nHorzScale != pWordProps->nHorzScale)
- {
- secinfo.WordProps.nHorzScale = pWordProps->nHorzScale;
- bSet = TRUE;
- }
- break;
- case EP_UNDERLINE:
- if (pWordProps->nWordStyle & PVTWORD_STYLE_UNDERLINE)
- {
- if ((secinfo.WordProps.nWordStyle & PVTWORD_STYLE_UNDERLINE) == 0)
- {
- secinfo.WordProps.nWordStyle |= PVTWORD_STYLE_UNDERLINE;
- bSet = TRUE;
- }
- }
- else
- {
- if ((secinfo.WordProps.nWordStyle & PVTWORD_STYLE_UNDERLINE) != 0)
- {
- secinfo.WordProps.nWordStyle &= ~PVTWORD_STYLE_UNDERLINE;
- bSet = TRUE;
- }
- }
- break;
- case EP_CROSSOUT:
- if (pWordProps->nWordStyle & PVTWORD_STYLE_CROSSOUT)
- {
- if ((secinfo.WordProps.nWordStyle & PVTWORD_STYLE_CROSSOUT) == 0)
- {
- secinfo.WordProps.nWordStyle |= PVTWORD_STYLE_CROSSOUT;
- bSet = TRUE;
- }
- }
- else
- {
- if ((secinfo.WordProps.nWordStyle & PVTWORD_STYLE_CROSSOUT) != 0)
- {
- secinfo.WordProps.nWordStyle &= ~PVTWORD_STYLE_CROSSOUT;
- bSet = TRUE;
- }
- }
- break;
- case EP_BOLD:
- if (pWordProps->nWordStyle & PVTWORD_STYLE_BOLD)
- {
- if ((secinfo.WordProps.nWordStyle & PVTWORD_STYLE_BOLD) == 0)
- {
- secinfo.WordProps.nWordStyle |= PVTWORD_STYLE_BOLD;
- bSet = TRUE;
- }
- }
- else
- {
- if ((secinfo.WordProps.nWordStyle & PVTWORD_STYLE_BOLD) != 0)
- {
- secinfo.WordProps.nWordStyle &= ~PVTWORD_STYLE_BOLD;
- bSet = TRUE;
- }
- }
- break;
- case EP_ITALIC:
- if (pWordProps->nWordStyle & PVTWORD_STYLE_ITALIC)
- {
- if ((secinfo.WordProps.nWordStyle & PVTWORD_STYLE_ITALIC) == 0)
- {
- secinfo.WordProps.nWordStyle |= PVTWORD_STYLE_ITALIC;
- bSet = TRUE;
- }
- }
- else
- {
- if ((secinfo.WordProps.nWordStyle & PVTWORD_STYLE_ITALIC) != 0)
- {
- secinfo.WordProps.nWordStyle &= ~PVTWORD_STYLE_ITALIC;
- bSet = TRUE;
- }
- }
- break;
- default:
- break;
- }
- }
+ break;
+ case EP_LINEINDENT:
+ if (!FX_EDIT_IsFloatEqual(secinfo.SecProps.fLineIndent,
+ pSecProps->fLineIndent)) {
+ secinfo.SecProps.fLineIndent = pSecProps->fLineIndent;
+ bSet = TRUE;
}
+ break;
+ case EP_ALIGNMENT:
+ if (secinfo.SecProps.nAlignment != pSecProps->nAlignment) {
+ secinfo.SecProps.nAlignment = pSecProps->nAlignment;
+ bSet = TRUE;
+ }
+ break;
+ default:
+ break;
}
-
- if (bSet)
- {
- pIterator->SetSection(secinfo);
-
- if (bAddUndo && m_bEnableUndo)
- {
- AddEditUndoItem(new CFXEU_SetSecProps
- (this,place,eProps,OldSecinfo.SecProps,OldSecinfo.WordProps,secinfo.SecProps,secinfo.WordProps,wr));
+ }
+ }
+ } else {
+ if (pWordProps && place == m_pVT->GetSectionBeginPlace(place)) {
+ pIterator->SetAt(place);
+ if (pIterator->GetSection(secinfo)) {
+ if (bAddUndo)
+ OldSecinfo = secinfo;
+
+ switch (eProps) {
+ case EP_FONTINDEX:
+ if (secinfo.WordProps.nFontIndex != pWordProps->nFontIndex) {
+ secinfo.WordProps.nFontIndex = pWordProps->nFontIndex;
+ bSet = TRUE;
+ }
+ break;
+ case EP_FONTSIZE:
+ if (!FX_EDIT_IsFloatEqual(secinfo.WordProps.fFontSize,
+ pWordProps->fFontSize)) {
+ secinfo.WordProps.fFontSize = pWordProps->fFontSize;
+ bSet = TRUE;
+ }
+ break;
+ case EP_WORDCOLOR:
+ if (secinfo.WordProps.dwWordColor != pWordProps->dwWordColor) {
+ secinfo.WordProps.dwWordColor = pWordProps->dwWordColor;
+ bSet = TRUE;
+ }
+ break;
+ case EP_SCRIPTTYPE:
+ if (secinfo.WordProps.nScriptType != pWordProps->nScriptType) {
+ secinfo.WordProps.nScriptType = pWordProps->nScriptType;
+ bSet = TRUE;
+ }
+ break;
+ case EP_CHARSPACE:
+ if (!FX_EDIT_IsFloatEqual(secinfo.WordProps.fCharSpace,
+ pWordProps->fCharSpace)) {
+ secinfo.WordProps.fCharSpace = pWordProps->fCharSpace;
+ bSet = TRUE;
+ }
+ break;
+ case EP_HORZSCALE:
+ if (secinfo.WordProps.nHorzScale != pWordProps->nHorzScale) {
+ secinfo.WordProps.nHorzScale = pWordProps->nHorzScale;
+ bSet = TRUE;
+ }
+ break;
+ case EP_UNDERLINE:
+ if (pWordProps->nWordStyle & PVTWORD_STYLE_UNDERLINE) {
+ if ((secinfo.WordProps.nWordStyle &
+ PVTWORD_STYLE_UNDERLINE) == 0) {
+ secinfo.WordProps.nWordStyle |= PVTWORD_STYLE_UNDERLINE;
+ bSet = TRUE;
+ }
+ } else {
+ if ((secinfo.WordProps.nWordStyle &
+ PVTWORD_STYLE_UNDERLINE) != 0) {
+ secinfo.WordProps.nWordStyle &= ~PVTWORD_STYLE_UNDERLINE;
+ bSet = TRUE;
+ }
+ }
+ break;
+ case EP_CROSSOUT:
+ if (pWordProps->nWordStyle & PVTWORD_STYLE_CROSSOUT) {
+ if ((secinfo.WordProps.nWordStyle & PVTWORD_STYLE_CROSSOUT) ==
+ 0) {
+ secinfo.WordProps.nWordStyle |= PVTWORD_STYLE_CROSSOUT;
+ bSet = TRUE;
+ }
+ } else {
+ if ((secinfo.WordProps.nWordStyle & PVTWORD_STYLE_CROSSOUT) !=
+ 0) {
+ secinfo.WordProps.nWordStyle &= ~PVTWORD_STYLE_CROSSOUT;
+ bSet = TRUE;
+ }
+ }
+ break;
+ case EP_BOLD:
+ if (pWordProps->nWordStyle & PVTWORD_STYLE_BOLD) {
+ if ((secinfo.WordProps.nWordStyle & PVTWORD_STYLE_BOLD) ==
+ 0) {
+ secinfo.WordProps.nWordStyle |= PVTWORD_STYLE_BOLD;
+ bSet = TRUE;
+ }
+ } else {
+ if ((secinfo.WordProps.nWordStyle & PVTWORD_STYLE_BOLD) !=
+ 0) {
+ secinfo.WordProps.nWordStyle &= ~PVTWORD_STYLE_BOLD;
+ bSet = TRUE;
+ }
+ }
+ break;
+ case EP_ITALIC:
+ if (pWordProps->nWordStyle & PVTWORD_STYLE_ITALIC) {
+ if ((secinfo.WordProps.nWordStyle & PVTWORD_STYLE_ITALIC) ==
+ 0) {
+ secinfo.WordProps.nWordStyle |= PVTWORD_STYLE_ITALIC;
+ bSet = TRUE;
+ }
+ } else {
+ if ((secinfo.WordProps.nWordStyle & PVTWORD_STYLE_ITALIC) !=
+ 0) {
+ secinfo.WordProps.nWordStyle &= ~PVTWORD_STYLE_ITALIC;
+ bSet = TRUE;
+ }
}
+ break;
+ default:
+ break;
}
+ }
+ }
+ }
- pIterator->SetAt(oldplace);
+ if (bSet) {
+ pIterator->SetSection(secinfo);
- return bSet;
+ if (bAddUndo && m_bEnableUndo) {
+ AddEditUndoItem(new CFXEU_SetSecProps(
+ this, place, eProps, OldSecinfo.SecProps, OldSecinfo.WordProps,
+ secinfo.SecProps, secinfo.WordProps, wr));
}
+ }
+
+ pIterator->SetAt(oldplace);
+
+ return bSet;
}
+ }
- return FALSE;
+ return FALSE;
}
-FX_BOOL CFX_Edit::SetWordProps(EDIT_PROPS_E eProps, const CPVT_WordPlace & place,
- const CPVT_WordProps * pWordProps, const CPVT_WordRange & wr, FX_BOOL bAddUndo)
-{
- if (m_pVT->IsValid() && m_pVT->IsRichText())
- {
- if (IPDF_VariableText_Iterator * pIterator = m_pVT->GetIterator())
- {
- FX_BOOL bSet = FALSE;
- CPVT_Word wordinfo;
- CPVT_Word OldWordinfo;
-
- CPVT_WordPlace oldplace = pIterator->GetAt();
-
- if (pWordProps)
- {
- pIterator->SetAt(place);
- if (pIterator->GetWord(wordinfo))
- {
- if (bAddUndo) OldWordinfo = wordinfo;
-
- switch(eProps)
- {
- case EP_FONTINDEX:
- if (wordinfo.WordProps.nFontIndex != pWordProps->nFontIndex)
- {
- if (IFX_Edit_FontMap* pFontMap = GetFontMap())
- {
- wordinfo.WordProps.nFontIndex = pFontMap->GetWordFontIndex(wordinfo.Word,wordinfo.nCharset,pWordProps->nFontIndex);
- }
- bSet = TRUE;
- }
- break;
- case EP_FONTSIZE:
- if (!FX_EDIT_IsFloatEqual(wordinfo.WordProps.fFontSize,pWordProps->fFontSize))
- {
- wordinfo.WordProps.fFontSize = pWordProps->fFontSize;
- bSet = TRUE;
- }
- break;
- case EP_WORDCOLOR:
- if (wordinfo.WordProps.dwWordColor != pWordProps->dwWordColor)
- {
- wordinfo.WordProps.dwWordColor = pWordProps->dwWordColor;
- bSet = TRUE;
- }
- break;
- case EP_SCRIPTTYPE:
- if (wordinfo.WordProps.nScriptType != pWordProps->nScriptType)
- {
- wordinfo.WordProps.nScriptType = pWordProps->nScriptType;
- bSet = TRUE;
- }
- break;
- case EP_CHARSPACE:
- if (!FX_EDIT_IsFloatEqual(wordinfo.WordProps.fCharSpace,pWordProps->fCharSpace))
- {
- wordinfo.WordProps.fCharSpace = pWordProps->fCharSpace;
- bSet = TRUE;
- }
- break;
- case EP_HORZSCALE:
- if (wordinfo.WordProps.nHorzScale != pWordProps->nHorzScale)
- {
- wordinfo.WordProps.nHorzScale = pWordProps->nHorzScale;
- bSet = TRUE;
- }
- break;
- case EP_UNDERLINE:
- if (pWordProps->nWordStyle & PVTWORD_STYLE_UNDERLINE)
- {
- if ((wordinfo.WordProps.nWordStyle & PVTWORD_STYLE_UNDERLINE) == 0)
- {
- wordinfo.WordProps.nWordStyle |= PVTWORD_STYLE_UNDERLINE;
- bSet = TRUE;
- }
- }
- else
- {
- if ((wordinfo.WordProps.nWordStyle & PVTWORD_STYLE_UNDERLINE) != 0)
- {
- wordinfo.WordProps.nWordStyle &= ~PVTWORD_STYLE_UNDERLINE;
- bSet = TRUE;
- }
- }
- break;
- case EP_CROSSOUT:
- if (pWordProps->nWordStyle & PVTWORD_STYLE_CROSSOUT)
- {
- if ((wordinfo.WordProps.nWordStyle & PVTWORD_STYLE_CROSSOUT) == 0)
- {
- wordinfo.WordProps.nWordStyle |= PVTWORD_STYLE_CROSSOUT;
- bSet = TRUE;
- }
- }
- else
- {
- if ((wordinfo.WordProps.nWordStyle & PVTWORD_STYLE_CROSSOUT) != 0)
- {
- wordinfo.WordProps.nWordStyle &= ~PVTWORD_STYLE_CROSSOUT;
- bSet = TRUE;
- }
- }
- break;
- case EP_BOLD:
- if (pWordProps->nWordStyle & PVTWORD_STYLE_BOLD)
- {
- if ((wordinfo.WordProps.nWordStyle & PVTWORD_STYLE_BOLD) == 0)
- {
- wordinfo.WordProps.nWordStyle |= PVTWORD_STYLE_BOLD;
- bSet = TRUE;
- }
- }
- else
- {
- if ((wordinfo.WordProps.nWordStyle & PVTWORD_STYLE_BOLD) != 0)
- {
- wordinfo.WordProps.nWordStyle &= ~PVTWORD_STYLE_BOLD;
- bSet = TRUE;
- }
- }
- break;
- case EP_ITALIC:
- if (pWordProps->nWordStyle & PVTWORD_STYLE_ITALIC)
- {
- if ((wordinfo.WordProps.nWordStyle & PVTWORD_STYLE_ITALIC) == 0)
- {
- wordinfo.WordProps.nWordStyle |= PVTWORD_STYLE_ITALIC;
- bSet = TRUE;
- }
- }
- else
- {
- if ((wordinfo.WordProps.nWordStyle & PVTWORD_STYLE_ITALIC) != 0)
- {
- wordinfo.WordProps.nWordStyle &= ~PVTWORD_STYLE_ITALIC;
- bSet = TRUE;
- }
- }
- break;
- default:
- break;
- }
- }
- }
+FX_BOOL CFX_Edit::SetWordProps(EDIT_PROPS_E eProps,
+ const CPVT_WordPlace& place,
+ const CPVT_WordProps* pWordProps,
+ const CPVT_WordRange& wr,
+ FX_BOOL bAddUndo) {
+ if (m_pVT->IsValid() && m_pVT->IsRichText()) {
+ if (IPDF_VariableText_Iterator* pIterator = m_pVT->GetIterator()) {
+ FX_BOOL bSet = FALSE;
+ CPVT_Word wordinfo;
+ CPVT_Word OldWordinfo;
- if (bSet)
- {
- pIterator->SetWord(wordinfo);
+ CPVT_WordPlace oldplace = pIterator->GetAt();
- if (bAddUndo && m_bEnableUndo)
- {
- AddEditUndoItem(new CFXEU_SetWordProps
- (this,place,eProps,OldWordinfo.WordProps,wordinfo.WordProps,wr));
+ if (pWordProps) {
+ pIterator->SetAt(place);
+ if (pIterator->GetWord(wordinfo)) {
+ if (bAddUndo)
+ OldWordinfo = wordinfo;
+
+ switch (eProps) {
+ case EP_FONTINDEX:
+ if (wordinfo.WordProps.nFontIndex != pWordProps->nFontIndex) {
+ if (IFX_Edit_FontMap* pFontMap = GetFontMap()) {
+ wordinfo.WordProps.nFontIndex = pFontMap->GetWordFontIndex(
+ wordinfo.Word, wordinfo.nCharset, pWordProps->nFontIndex);
}
- }
+ bSet = TRUE;
+ }
+ break;
+ case EP_FONTSIZE:
+ if (!FX_EDIT_IsFloatEqual(wordinfo.WordProps.fFontSize,
+ pWordProps->fFontSize)) {
+ wordinfo.WordProps.fFontSize = pWordProps->fFontSize;
+ bSet = TRUE;
+ }
+ break;
+ case EP_WORDCOLOR:
+ if (wordinfo.WordProps.dwWordColor != pWordProps->dwWordColor) {
+ wordinfo.WordProps.dwWordColor = pWordProps->dwWordColor;
+ bSet = TRUE;
+ }
+ break;
+ case EP_SCRIPTTYPE:
+ if (wordinfo.WordProps.nScriptType != pWordProps->nScriptType) {
+ wordinfo.WordProps.nScriptType = pWordProps->nScriptType;
+ bSet = TRUE;
+ }
+ break;
+ case EP_CHARSPACE:
+ if (!FX_EDIT_IsFloatEqual(wordinfo.WordProps.fCharSpace,
+ pWordProps->fCharSpace)) {
+ wordinfo.WordProps.fCharSpace = pWordProps->fCharSpace;
+ bSet = TRUE;
+ }
+ break;
+ case EP_HORZSCALE:
+ if (wordinfo.WordProps.nHorzScale != pWordProps->nHorzScale) {
+ wordinfo.WordProps.nHorzScale = pWordProps->nHorzScale;
+ bSet = TRUE;
+ }
+ break;
+ case EP_UNDERLINE:
+ if (pWordProps->nWordStyle & PVTWORD_STYLE_UNDERLINE) {
+ if ((wordinfo.WordProps.nWordStyle & PVTWORD_STYLE_UNDERLINE) ==
+ 0) {
+ wordinfo.WordProps.nWordStyle |= PVTWORD_STYLE_UNDERLINE;
+ bSet = TRUE;
+ }
+ } else {
+ if ((wordinfo.WordProps.nWordStyle & PVTWORD_STYLE_UNDERLINE) !=
+ 0) {
+ wordinfo.WordProps.nWordStyle &= ~PVTWORD_STYLE_UNDERLINE;
+ bSet = TRUE;
+ }
+ }
+ break;
+ case EP_CROSSOUT:
+ if (pWordProps->nWordStyle & PVTWORD_STYLE_CROSSOUT) {
+ if ((wordinfo.WordProps.nWordStyle & PVTWORD_STYLE_CROSSOUT) ==
+ 0) {
+ wordinfo.WordProps.nWordStyle |= PVTWORD_STYLE_CROSSOUT;
+ bSet = TRUE;
+ }
+ } else {
+ if ((wordinfo.WordProps.nWordStyle & PVTWORD_STYLE_CROSSOUT) !=
+ 0) {
+ wordinfo.WordProps.nWordStyle &= ~PVTWORD_STYLE_CROSSOUT;
+ bSet = TRUE;
+ }
+ }
+ break;
+ case EP_BOLD:
+ if (pWordProps->nWordStyle & PVTWORD_STYLE_BOLD) {
+ if ((wordinfo.WordProps.nWordStyle & PVTWORD_STYLE_BOLD) == 0) {
+ wordinfo.WordProps.nWordStyle |= PVTWORD_STYLE_BOLD;
+ bSet = TRUE;
+ }
+ } else {
+ if ((wordinfo.WordProps.nWordStyle & PVTWORD_STYLE_BOLD) != 0) {
+ wordinfo.WordProps.nWordStyle &= ~PVTWORD_STYLE_BOLD;
+ bSet = TRUE;
+ }
+ }
+ break;
+ case EP_ITALIC:
+ if (pWordProps->nWordStyle & PVTWORD_STYLE_ITALIC) {
+ if ((wordinfo.WordProps.nWordStyle & PVTWORD_STYLE_ITALIC) ==
+ 0) {
+ wordinfo.WordProps.nWordStyle |= PVTWORD_STYLE_ITALIC;
+ bSet = TRUE;
+ }
+ } else {
+ if ((wordinfo.WordProps.nWordStyle & PVTWORD_STYLE_ITALIC) !=
+ 0) {
+ wordinfo.WordProps.nWordStyle &= ~PVTWORD_STYLE_ITALIC;
+ bSet = TRUE;
+ }
+ }
+ break;
+ default:
+ break;
+ }
+ }
+ }
- pIterator->SetAt(oldplace);
- return bSet;
+ if (bSet) {
+ pIterator->SetWord(wordinfo);
+
+ if (bAddUndo && m_bEnableUndo) {
+ AddEditUndoItem(new CFXEU_SetWordProps(this, place, eProps,
+ OldWordinfo.WordProps,
+ wordinfo.WordProps, wr));
}
+ }
+
+ pIterator->SetAt(oldplace);
+ return bSet;
}
+ }
- return FALSE;
+ return FALSE;
}
-void CFX_Edit::SetText(const FX_WCHAR* text,int32_t charset /*= DEFAULT_CHARSET*/,
- const CPVT_SecProps * pSecProps /*= NULL*/,const CPVT_WordProps * pWordProps /*= NULL*/)
-{
- SetText(text,charset,pSecProps,pWordProps,TRUE,TRUE);
+void CFX_Edit::SetText(const FX_WCHAR* text,
+ int32_t charset /*= DEFAULT_CHARSET*/,
+ const CPVT_SecProps* pSecProps /*= NULL*/,
+ const CPVT_WordProps* pWordProps /*= NULL*/) {
+ SetText(text, charset, pSecProps, pWordProps, TRUE, TRUE);
}
-FX_BOOL CFX_Edit::InsertWord(FX_WORD word, int32_t charset /*= DEFAULT_CHARSET*/, const CPVT_WordProps * pWordProps /*= NULL*/)
-{
- return InsertWord(word,charset,pWordProps,TRUE,TRUE);
+FX_BOOL CFX_Edit::InsertWord(FX_WORD word,
+ int32_t charset /*= DEFAULT_CHARSET*/,
+ const CPVT_WordProps* pWordProps /*= NULL*/) {
+ return InsertWord(word, charset, pWordProps, TRUE, TRUE);
}
-FX_BOOL CFX_Edit::InsertReturn(const CPVT_SecProps * pSecProps /*= NULL*/,const CPVT_WordProps * pWordProps /*= NULL*/)
-{
- return InsertReturn(pSecProps,pWordProps,TRUE,TRUE);
+FX_BOOL CFX_Edit::InsertReturn(const CPVT_SecProps* pSecProps /*= NULL*/,
+ const CPVT_WordProps* pWordProps /*= NULL*/) {
+ return InsertReturn(pSecProps, pWordProps, TRUE, TRUE);
}
-FX_BOOL CFX_Edit::Backspace()
-{
- return Backspace(TRUE,TRUE);
+FX_BOOL CFX_Edit::Backspace() {
+ return Backspace(TRUE, TRUE);
}
-FX_BOOL CFX_Edit::Delete()
-{
- return Delete(TRUE,TRUE);
+FX_BOOL CFX_Edit::Delete() {
+ return Delete(TRUE, TRUE);
}
-FX_BOOL CFX_Edit::Clear()
-{
- return Clear(TRUE,TRUE);
+FX_BOOL CFX_Edit::Clear() {
+ return Clear(TRUE, TRUE);
}
-FX_BOOL CFX_Edit::InsertText(const FX_WCHAR* text, int32_t charset /*= DEFAULT_CHARSET*/,
- const CPVT_SecProps * pSecProps /*= NULL*/,const CPVT_WordProps * pWordProps /*= NULL*/)
-{
- return InsertText(text,charset,pSecProps,pWordProps,TRUE,TRUE);
+FX_BOOL CFX_Edit::InsertText(const FX_WCHAR* text,
+ int32_t charset /*= DEFAULT_CHARSET*/,
+ const CPVT_SecProps* pSecProps /*= NULL*/,
+ const CPVT_WordProps* pWordProps /*= NULL*/) {
+ return InsertText(text, charset, pSecProps, pWordProps, TRUE, TRUE);
}
-FX_FLOAT CFX_Edit::GetFontSize() const
-{
- return m_pVT->GetFontSize();
+FX_FLOAT CFX_Edit::GetFontSize() const {
+ return m_pVT->GetFontSize();
}
-FX_WORD CFX_Edit::GetPasswordChar() const
-{
- return m_pVT->GetPasswordChar();
+FX_WORD CFX_Edit::GetPasswordChar() const {
+ return m_pVT->GetPasswordChar();
}
-int32_t CFX_Edit::GetCharArray() const
-{
- return m_pVT->GetCharArray();
+int32_t CFX_Edit::GetCharArray() const {
+ return m_pVT->GetCharArray();
}
-CPDF_Rect CFX_Edit::GetPlateRect() const
-{
- return m_pVT->GetPlateRect();
+CPDF_Rect CFX_Edit::GetPlateRect() const {
+ return m_pVT->GetPlateRect();
}
-CPDF_Rect CFX_Edit::GetContentRect() const
-{
- return VTToEdit(m_pVT->GetContentRect());
+CPDF_Rect CFX_Edit::GetContentRect() const {
+ return VTToEdit(m_pVT->GetContentRect());
}
-int32_t CFX_Edit::GetHorzScale() const
-{
- return m_pVT->GetHorzScale();
+int32_t CFX_Edit::GetHorzScale() const {
+ return m_pVT->GetHorzScale();
}
-FX_FLOAT CFX_Edit::GetCharSpace() const
-{
- return m_pVT->GetCharSpace();
+FX_FLOAT CFX_Edit::GetCharSpace() const {
+ return m_pVT->GetCharSpace();
}
// inner methods
-CPVT_WordRange CFX_Edit::GetWholeWordRange() const
-{
- if (m_pVT->IsValid())
- return CPVT_WordRange(m_pVT->GetBeginWordPlace(),m_pVT->GetEndWordPlace());
+CPVT_WordRange CFX_Edit::GetWholeWordRange() const {
+ if (m_pVT->IsValid())
+ return CPVT_WordRange(m_pVT->GetBeginWordPlace(), m_pVT->GetEndWordPlace());
- return CPVT_WordRange();
+ return CPVT_WordRange();
}
-CPVT_WordRange CFX_Edit::GetVisibleWordRange() const
-{
- if (m_bEnableOverflow) return GetWholeWordRange();
+CPVT_WordRange CFX_Edit::GetVisibleWordRange() const {
+ if (m_bEnableOverflow)
+ return GetWholeWordRange();
- if (m_pVT->IsValid())
- {
- CPDF_Rect rcPlate = m_pVT->GetPlateRect();
+ if (m_pVT->IsValid()) {
+ CPDF_Rect rcPlate = m_pVT->GetPlateRect();
- CPVT_WordPlace place1 = m_pVT->SearchWordPlace(EditToVT(CPDF_Point(rcPlate.left,rcPlate.top)));
- CPVT_WordPlace place2 = m_pVT->SearchWordPlace(EditToVT(CPDF_Point(rcPlate.right,rcPlate.bottom)));
+ CPVT_WordPlace place1 =
+ m_pVT->SearchWordPlace(EditToVT(CPDF_Point(rcPlate.left, rcPlate.top)));
+ CPVT_WordPlace place2 = m_pVT->SearchWordPlace(
+ EditToVT(CPDF_Point(rcPlate.right, rcPlate.bottom)));
- return CPVT_WordRange(place1,place2);
- }
+ return CPVT_WordRange(place1, place2);
+ }
- return CPVT_WordRange();
+ return CPVT_WordRange();
}
-CPVT_WordPlace CFX_Edit::SearchWordPlace(const CPDF_Point& point) const
-{
- if (m_pVT->IsValid())
- {
- return m_pVT->SearchWordPlace(EditToVT(point));
- }
-
- return CPVT_WordPlace();
-}
+CPVT_WordPlace CFX_Edit::SearchWordPlace(const CPDF_Point& point) const {
+ if (m_pVT->IsValid()) {
+ return m_pVT->SearchWordPlace(EditToVT(point));
+ }
-void CFX_Edit::Paint()
-{
- if (m_pVT->IsValid())
- {
- RearrangeAll();
- ScrollToCaret();
- Refresh(RP_NOANALYSE);
- SetCaretOrigin();
- SetCaretInfo();
- }
+ return CPVT_WordPlace();
}
-void CFX_Edit::RearrangeAll()
-{
- if (m_pVT->IsValid())
- {
- m_pVT->UpdateWordPlace(m_wpCaret);
- m_pVT->RearrangeAll();
- m_pVT->UpdateWordPlace(m_wpCaret);
- SetScrollInfo();
- SetContentChanged();
- }
+void CFX_Edit::Paint() {
+ if (m_pVT->IsValid()) {
+ RearrangeAll();
+ ScrollToCaret();
+ Refresh(RP_NOANALYSE);
+ SetCaretOrigin();
+ SetCaretInfo();
+ }
}
-void CFX_Edit::RearrangePart(const CPVT_WordRange & range)
-{
- if (m_pVT->IsValid())
- {
- m_pVT->UpdateWordPlace(m_wpCaret);
- m_pVT->RearrangePart(range);
- m_pVT->UpdateWordPlace(m_wpCaret);
- SetScrollInfo();
- SetContentChanged();
- }
+void CFX_Edit::RearrangeAll() {
+ if (m_pVT->IsValid()) {
+ m_pVT->UpdateWordPlace(m_wpCaret);
+ m_pVT->RearrangeAll();
+ m_pVT->UpdateWordPlace(m_wpCaret);
+ SetScrollInfo();
+ SetContentChanged();
+ }
}
-void CFX_Edit::SetContentChanged()
-{
- if (m_bNotify && m_pNotify)
- {
- CPDF_Rect rcContent = m_pVT->GetContentRect();
- if (rcContent.Width() != m_rcOldContent.Width() ||
- rcContent.Height() != m_rcOldContent.Height())
- {
- if (!m_bNotifyFlag)
- {
- m_bNotifyFlag = TRUE;
- m_pNotify->IOnContentChange(rcContent);
- m_bNotifyFlag = FALSE;
- }
- m_rcOldContent = rcContent;
- }
- }
+void CFX_Edit::RearrangePart(const CPVT_WordRange& range) {
+ if (m_pVT->IsValid()) {
+ m_pVT->UpdateWordPlace(m_wpCaret);
+ m_pVT->RearrangePart(range);
+ m_pVT->UpdateWordPlace(m_wpCaret);
+ SetScrollInfo();
+ SetContentChanged();
+ }
}
-void CFX_Edit::SelectAll()
-{
- if (m_pVT->IsValid())
- {
- m_SelState = GetWholeWordRange();
- SetCaret(m_SelState.EndPos);
-
- ScrollToCaret();
- CPVT_WordRange wrVisible = GetVisibleWordRange();
- Refresh(RP_OPTIONAL,&wrVisible);
- SetCaretInfo();
- }
+void CFX_Edit::SetContentChanged() {
+ if (m_bNotify && m_pNotify) {
+ CPDF_Rect rcContent = m_pVT->GetContentRect();
+ if (rcContent.Width() != m_rcOldContent.Width() ||
+ rcContent.Height() != m_rcOldContent.Height()) {
+ if (!m_bNotifyFlag) {
+ m_bNotifyFlag = TRUE;
+ m_pNotify->IOnContentChange(rcContent);
+ m_bNotifyFlag = FALSE;
+ }
+ m_rcOldContent = rcContent;
+ }
+ }
+}
+
+void CFX_Edit::SelectAll() {
+ if (m_pVT->IsValid()) {
+ m_SelState = GetWholeWordRange();
+ SetCaret(m_SelState.EndPos);
+
+ ScrollToCaret();
+ CPVT_WordRange wrVisible = GetVisibleWordRange();
+ Refresh(RP_OPTIONAL, &wrVisible);
+ SetCaretInfo();
+ }
}
-void CFX_Edit::SelectNone()
-{
- if (m_pVT->IsValid())
- {
- if (m_SelState.IsExist())
- {
- CPVT_WordRange wrTemp = m_SelState.ConvertToWordRange();
- m_SelState.Default();
- Refresh(RP_OPTIONAL,&wrTemp);
- }
+void CFX_Edit::SelectNone() {
+ if (m_pVT->IsValid()) {
+ if (m_SelState.IsExist()) {
+ CPVT_WordRange wrTemp = m_SelState.ConvertToWordRange();
+ m_SelState.Default();
+ Refresh(RP_OPTIONAL, &wrTemp);
}
+ }
}
-FX_BOOL CFX_Edit::IsSelected() const
-{
- return m_SelState.IsExist();
+FX_BOOL CFX_Edit::IsSelected() const {
+ return m_SelState.IsExist();
}
-CPDF_Point CFX_Edit::VTToEdit(const CPDF_Point & point) const
-{
- CPDF_Rect rcContent = m_pVT->GetContentRect();
- CPDF_Rect rcPlate = m_pVT->GetPlateRect();
+CPDF_Point CFX_Edit::VTToEdit(const CPDF_Point& point) const {
+ CPDF_Rect rcContent = m_pVT->GetContentRect();
+ CPDF_Rect rcPlate = m_pVT->GetPlateRect();
- FX_FLOAT fPadding = 0.0f;
+ FX_FLOAT fPadding = 0.0f;
- switch (m_nAlignment)
- {
+ switch (m_nAlignment) {
case 0:
- fPadding = 0.0f;
- break;
+ fPadding = 0.0f;
+ break;
case 1:
- fPadding = (rcPlate.Height() - rcContent.Height()) * 0.5f;
- break;
+ fPadding = (rcPlate.Height() - rcContent.Height()) * 0.5f;
+ break;
case 2:
- fPadding = rcPlate.Height() - rcContent.Height();
- break;
- }
+ fPadding = rcPlate.Height() - rcContent.Height();
+ break;
+ }
- return CPDF_Point(point.x - (m_ptScrollPos.x - rcPlate.left),
- point.y - (m_ptScrollPos.y + fPadding - rcPlate.top));
+ return CPDF_Point(point.x - (m_ptScrollPos.x - rcPlate.left),
+ point.y - (m_ptScrollPos.y + fPadding - rcPlate.top));
}
-CPDF_Point CFX_Edit::EditToVT(const CPDF_Point & point) const
-{
- CPDF_Rect rcContent = m_pVT->GetContentRect();
- CPDF_Rect rcPlate = m_pVT->GetPlateRect();
+CPDF_Point CFX_Edit::EditToVT(const CPDF_Point& point) const {
+ CPDF_Rect rcContent = m_pVT->GetContentRect();
+ CPDF_Rect rcPlate = m_pVT->GetPlateRect();
- FX_FLOAT fPadding = 0.0f;
+ FX_FLOAT fPadding = 0.0f;
- switch (m_nAlignment)
- {
+ switch (m_nAlignment) {
case 0:
- fPadding = 0.0f;
- break;
+ fPadding = 0.0f;
+ break;
case 1:
- fPadding = (rcPlate.Height() - rcContent.Height()) * 0.5f;
- break;
+ fPadding = (rcPlate.Height() - rcContent.Height()) * 0.5f;
+ break;
case 2:
- fPadding = rcPlate.Height() - rcContent.Height();
- break;
- }
+ fPadding = rcPlate.Height() - rcContent.Height();
+ break;
+ }
- return CPDF_Point(point.x + (m_ptScrollPos.x - rcPlate.left),
- point.y + (m_ptScrollPos.y + fPadding - rcPlate.top));
+ return CPDF_Point(point.x + (m_ptScrollPos.x - rcPlate.left),
+ point.y + (m_ptScrollPos.y + fPadding - rcPlate.top));
}
-CPDF_Rect CFX_Edit::VTToEdit(const CPDF_Rect & rect) const
-{
- CPDF_Point ptLeftBottom = VTToEdit(CPDF_Point(rect.left,rect.bottom));
- CPDF_Point ptRightTop = VTToEdit(CPDF_Point(rect.right,rect.top));
+CPDF_Rect CFX_Edit::VTToEdit(const CPDF_Rect& rect) const {
+ CPDF_Point ptLeftBottom = VTToEdit(CPDF_Point(rect.left, rect.bottom));
+ CPDF_Point ptRightTop = VTToEdit(CPDF_Point(rect.right, rect.top));
- return CPDF_Rect(ptLeftBottom.x,ptLeftBottom.y,ptRightTop.x,ptRightTop.y);
+ return CPDF_Rect(ptLeftBottom.x, ptLeftBottom.y, ptRightTop.x, ptRightTop.y);
}
-CPDF_Rect CFX_Edit::EditToVT(const CPDF_Rect & rect) const
-{
- CPDF_Point ptLeftBottom = EditToVT(CPDF_Point(rect.left,rect.bottom));
- CPDF_Point ptRightTop = EditToVT(CPDF_Point(rect.right,rect.top));
+CPDF_Rect CFX_Edit::EditToVT(const CPDF_Rect& rect) const {
+ CPDF_Point ptLeftBottom = EditToVT(CPDF_Point(rect.left, rect.bottom));
+ CPDF_Point ptRightTop = EditToVT(CPDF_Point(rect.right, rect.top));
- return CPDF_Rect(ptLeftBottom.x,ptLeftBottom.y,ptRightTop.x,ptRightTop.y);
+ return CPDF_Rect(ptLeftBottom.x, ptLeftBottom.y, ptRightTop.x, ptRightTop.y);
}
-void CFX_Edit::SetScrollInfo()
-{
- if (m_bNotify && m_pNotify)
- {
- CPDF_Rect rcPlate = m_pVT->GetPlateRect();
- CPDF_Rect rcContent = m_pVT->GetContentRect();
+void CFX_Edit::SetScrollInfo() {
+ if (m_bNotify && m_pNotify) {
+ CPDF_Rect rcPlate = m_pVT->GetPlateRect();
+ CPDF_Rect rcContent = m_pVT->GetContentRect();
- if (!m_bNotifyFlag)
- {
- m_bNotifyFlag = TRUE;
- m_pNotify->IOnSetScrollInfoX(rcPlate.left, rcPlate.right,
- rcContent.left, rcContent.right, rcPlate.Width() / 3, rcPlate.Width());
+ if (!m_bNotifyFlag) {
+ m_bNotifyFlag = TRUE;
+ m_pNotify->IOnSetScrollInfoX(rcPlate.left, rcPlate.right, rcContent.left,
+ rcContent.right, rcPlate.Width() / 3,
+ rcPlate.Width());
- m_pNotify->IOnSetScrollInfoY(rcPlate.bottom, rcPlate.top,
- rcContent.bottom, rcContent.top, rcPlate.Height() / 3, rcPlate.Height());
- m_bNotifyFlag = FALSE;
- }
+ m_pNotify->IOnSetScrollInfoY(rcPlate.bottom, rcPlate.top,
+ rcContent.bottom, rcContent.top,
+ rcPlate.Height() / 3, rcPlate.Height());
+ m_bNotifyFlag = FALSE;
}
+ }
}
-void CFX_Edit::SetScrollPosX(FX_FLOAT fx)
-{
- if (!m_bEnableScroll) return;
-
- if (m_pVT->IsValid())
- {
- if (!FX_EDIT_IsFloatEqual(m_ptScrollPos.x,fx))
- {
- m_ptScrollPos.x = fx;
- Refresh(RP_NOANALYSE);
-
- if (m_bNotify && m_pNotify)
- {
- if (!m_bNotifyFlag)
- {
- m_bNotifyFlag = TRUE;
- m_pNotify->IOnSetScrollPosX(fx);
- m_bNotifyFlag = FALSE;
- }
- }
+void CFX_Edit::SetScrollPosX(FX_FLOAT fx) {
+ if (!m_bEnableScroll)
+ return;
+
+ if (m_pVT->IsValid()) {
+ if (!FX_EDIT_IsFloatEqual(m_ptScrollPos.x, fx)) {
+ m_ptScrollPos.x = fx;
+ Refresh(RP_NOANALYSE);
+
+ if (m_bNotify && m_pNotify) {
+ if (!m_bNotifyFlag) {
+ m_bNotifyFlag = TRUE;
+ m_pNotify->IOnSetScrollPosX(fx);
+ m_bNotifyFlag = FALSE;
}
+ }
}
+ }
}
-void CFX_Edit::SetScrollPosY(FX_FLOAT fy)
-{
- if (!m_bEnableScroll) return;
-
- if (m_pVT->IsValid())
- {
- if (!FX_EDIT_IsFloatEqual(m_ptScrollPos.y,fy))
- {
- m_ptScrollPos.y = fy;
- Refresh(RP_NOANALYSE);
-
- if (m_bNotify && m_pNotify)
- {
- if (!m_bNotifyFlag)
- {
- m_bNotifyFlag = TRUE;
- m_pNotify->IOnSetScrollPosY(fy);
- m_bNotifyFlag = FALSE;
- }
- }
+void CFX_Edit::SetScrollPosY(FX_FLOAT fy) {
+ if (!m_bEnableScroll)
+ return;
+
+ if (m_pVT->IsValid()) {
+ if (!FX_EDIT_IsFloatEqual(m_ptScrollPos.y, fy)) {
+ m_ptScrollPos.y = fy;
+ Refresh(RP_NOANALYSE);
+
+ if (m_bNotify && m_pNotify) {
+ if (!m_bNotifyFlag) {
+ m_bNotifyFlag = TRUE;
+ m_pNotify->IOnSetScrollPosY(fy);
+ m_bNotifyFlag = FALSE;
}
+ }
}
+ }
}
-void CFX_Edit::SetScrollPos(const CPDF_Point & point)
-{
- SetScrollPosX(point.x);
- SetScrollPosY(point.y);
- SetScrollLimit();
- SetCaretInfo();
+void CFX_Edit::SetScrollPos(const CPDF_Point& point) {
+ SetScrollPosX(point.x);
+ SetScrollPosY(point.y);
+ SetScrollLimit();
+ SetCaretInfo();
}
-CPDF_Point CFX_Edit::GetScrollPos() const
-{
- return m_ptScrollPos;
+CPDF_Point CFX_Edit::GetScrollPos() const {
+ return m_ptScrollPos;
}
-void CFX_Edit::SetScrollLimit()
-{
- if (m_pVT->IsValid())
- {
- CPDF_Rect rcContent = m_pVT->GetContentRect();
- CPDF_Rect rcPlate = m_pVT->GetPlateRect();
-
- if (rcPlate.Width() > rcContent.Width())
- {
- SetScrollPosX(rcPlate.left);
- }
- else
- {
- if (FX_EDIT_IsFloatSmaller(m_ptScrollPos.x, rcContent.left))
- {
- SetScrollPosX(rcContent.left);
- }
- else if (FX_EDIT_IsFloatBigger(m_ptScrollPos.x, rcContent.right - rcPlate.Width()))
- {
- SetScrollPosX(rcContent.right - rcPlate.Width());
- }
- }
+void CFX_Edit::SetScrollLimit() {
+ if (m_pVT->IsValid()) {
+ CPDF_Rect rcContent = m_pVT->GetContentRect();
+ CPDF_Rect rcPlate = m_pVT->GetPlateRect();
- if (rcPlate.Height() > rcContent.Height())
- {
- SetScrollPosY(rcPlate.top);
- }
- else
- {
- if (FX_EDIT_IsFloatSmaller(m_ptScrollPos.y, rcContent.bottom + rcPlate.Height()))
- {
- SetScrollPosY(rcContent.bottom + rcPlate.Height());
- }
- else if (FX_EDIT_IsFloatBigger(m_ptScrollPos.y, rcContent.top))
- {
- SetScrollPosY(rcContent.top);
- }
- }
- }
-}
+ if (rcPlate.Width() > rcContent.Width()) {
+ SetScrollPosX(rcPlate.left);
+ } else {
+ if (FX_EDIT_IsFloatSmaller(m_ptScrollPos.x, rcContent.left)) {
+ SetScrollPosX(rcContent.left);
+ } else if (FX_EDIT_IsFloatBigger(m_ptScrollPos.x,
+ rcContent.right - rcPlate.Width())) {
+ SetScrollPosX(rcContent.right - rcPlate.Width());
+ }
+ }
+
+ if (rcPlate.Height() > rcContent.Height()) {
+ SetScrollPosY(rcPlate.top);
+ } else {
+ if (FX_EDIT_IsFloatSmaller(m_ptScrollPos.y,
+ rcContent.bottom + rcPlate.Height())) {
+ SetScrollPosY(rcContent.bottom + rcPlate.Height());
+ } else if (FX_EDIT_IsFloatBigger(m_ptScrollPos.y, rcContent.top)) {
+ SetScrollPosY(rcContent.top);
+ }
+ }
+ }
+}
+
+void CFX_Edit::ScrollToCaret() {
+ SetScrollLimit();
+
+ if (m_pVT->IsValid()) {
+ CPDF_Point ptHead(0, 0);
+ CPDF_Point ptFoot(0, 0);
+
+ if (IPDF_VariableText_Iterator* pIterator = m_pVT->GetIterator()) {
+ pIterator->SetAt(m_wpCaret);
+
+ CPVT_Word word;
+ CPVT_Line line;
+ if (pIterator->GetWord(word)) {
+ ptHead.x = word.ptWord.x + word.fWidth;
+ ptHead.y = word.ptWord.y + word.fAscent;
+ ptFoot.x = word.ptWord.x + word.fWidth;
+ ptFoot.y = word.ptWord.y + word.fDescent;
+ } else if (pIterator->GetLine(line)) {
+ ptHead.x = line.ptLine.x;
+ ptHead.y = line.ptLine.y + line.fLineAscent;
+ ptFoot.x = line.ptLine.x;
+ ptFoot.y = line.ptLine.y + line.fLineDescent;
+ }
+ }
+
+ CPDF_Point ptHeadEdit = VTToEdit(ptHead);
+ CPDF_Point ptFootEdit = VTToEdit(ptFoot);
-void CFX_Edit::ScrollToCaret()
-{
- SetScrollLimit();
+ CPDF_Rect rcPlate = m_pVT->GetPlateRect();
- if (m_pVT->IsValid())
- {
- CPDF_Point ptHead(0,0);
- CPDF_Point ptFoot(0,0);
+ if (!FX_EDIT_IsFloatEqual(rcPlate.left, rcPlate.right)) {
+ if (FX_EDIT_IsFloatSmaller(ptHeadEdit.x, rcPlate.left) ||
+ FX_EDIT_IsFloatEqual(ptHeadEdit.x, rcPlate.left)) {
+ SetScrollPosX(ptHead.x);
+ } else if (FX_EDIT_IsFloatBigger(ptHeadEdit.x, rcPlate.right)) {
+ SetScrollPosX(ptHead.x - rcPlate.Width());
+ }
+ }
+
+ if (!FX_EDIT_IsFloatEqual(rcPlate.top, rcPlate.bottom)) {
+ if (FX_EDIT_IsFloatSmaller(ptFootEdit.y, rcPlate.bottom) ||
+ FX_EDIT_IsFloatEqual(ptFootEdit.y, rcPlate.bottom)) {
+ if (FX_EDIT_IsFloatSmaller(ptHeadEdit.y, rcPlate.top)) {
+ SetScrollPosY(ptFoot.y + rcPlate.Height());
+ }
+ } else if (FX_EDIT_IsFloatBigger(ptHeadEdit.y, rcPlate.top)) {
+ if (FX_EDIT_IsFloatBigger(ptFootEdit.y, rcPlate.bottom)) {
+ SetScrollPosY(ptHead.y);
+ }
+ }
+ }
+ }
+}
+
+void CFX_Edit::Refresh(REFRESH_PLAN_E ePlan,
+ const CPVT_WordRange* pRange1,
+ const CPVT_WordRange* pRange2) {
+ if (m_bEnableRefresh && m_pVT->IsValid()) {
+ m_Refresh.BeginRefresh();
+ RefreshPushLineRects(GetVisibleWordRange());
+
+ // if (!FX_EDIT_IsFloatEqual(m_ptRefreshScrollPos.x,m_ptScrollPos.x) ||
+ // !FX_EDIT_IsFloatEqual(m_ptRefreshScrollPos.y,m_ptScrollPos.y))
+ // {
+ m_Refresh.NoAnalyse();
+ m_ptRefreshScrollPos = m_ptScrollPos;
+ // }
+ // else
+ // {
+ // switch (ePlan)
+ // {
+ // case RP_ANALYSE:
+ // m_Refresh.Analyse(m_pVT->GetAlignment());
+ //
+ // if (pRange1) RefreshPushRandomRects(*pRange1);
+ // if (pRange2) RefreshPushRandomRects(*pRange2);
+ // break;
+ // case RP_NOANALYSE:
+ // m_Refresh.NoAnalyse();
+ // break;
+ // case RP_OPTIONAL:
+ // if (pRange1) RefreshPushRandomRects(*pRange1);
+ // if (pRange2) RefreshPushRandomRects(*pRange2);
+ // break;
+ // }
+ // }
+
+ if (m_bNotify && m_pNotify) {
+ if (!m_bNotifyFlag) {
+ m_bNotifyFlag = TRUE;
+ if (const CFX_Edit_RectArray* pRects = m_Refresh.GetRefreshRects()) {
+ for (int32_t i = 0, sz = pRects->GetSize(); i < sz; i++)
+ m_pNotify->IOnInvalidateRect(pRects->GetAt(i));
+ }
+ m_bNotifyFlag = FALSE;
+ }
+ }
+
+ m_Refresh.EndRefresh();
+ }
+}
+
+void CFX_Edit::RefreshPushLineRects(const CPVT_WordRange& wr) {
+ if (m_pVT->IsValid()) {
+ if (IPDF_VariableText_Iterator* pIterator = m_pVT->GetIterator()) {
+ CPVT_WordPlace wpBegin = wr.BeginPos;
+ m_pVT->UpdateWordPlace(wpBegin);
+ CPVT_WordPlace wpEnd = wr.EndPos;
+ m_pVT->UpdateWordPlace(wpEnd);
+ pIterator->SetAt(wpBegin);
+
+ CPVT_Line lineinfo;
+ do {
+ if (!pIterator->GetLine(lineinfo))
+ break;
+ if (lineinfo.lineplace.LineCmp(wpEnd) > 0)
+ break;
+
+ CPDF_Rect rcLine(lineinfo.ptLine.x,
+ lineinfo.ptLine.y + lineinfo.fLineDescent,
+ lineinfo.ptLine.x + lineinfo.fLineWidth,
+ lineinfo.ptLine.y + lineinfo.fLineAscent);
+
+ m_Refresh.Push(CPVT_WordRange(lineinfo.lineplace, lineinfo.lineEnd),
+ VTToEdit(rcLine));
+
+ } while (pIterator->NextLine());
+ }
+ }
+}
+
+void CFX_Edit::RefreshPushRandomRects(const CPVT_WordRange& wr) {
+ if (m_pVT->IsValid()) {
+ if (IPDF_VariableText_Iterator* pIterator = m_pVT->GetIterator()) {
+ CPVT_WordRange wrTemp = wr;
+
+ m_pVT->UpdateWordPlace(wrTemp.BeginPos);
+ m_pVT->UpdateWordPlace(wrTemp.EndPos);
+ pIterator->SetAt(wrTemp.BeginPos);
+
+ CPVT_Word wordinfo;
+ CPVT_Line lineinfo;
+ CPVT_WordPlace place;
+
+ while (pIterator->NextWord()) {
+ place = pIterator->GetAt();
+ if (place.WordCmp(wrTemp.EndPos) > 0)
+ break;
+
+ pIterator->GetWord(wordinfo);
+ pIterator->GetLine(lineinfo);
+
+ if (place.LineCmp(wrTemp.BeginPos) == 0 ||
+ place.LineCmp(wrTemp.EndPos) == 0) {
+ CPDF_Rect rcWord(wordinfo.ptWord.x,
+ lineinfo.ptLine.y + lineinfo.fLineDescent,
+ wordinfo.ptWord.x + wordinfo.fWidth,
+ lineinfo.ptLine.y + lineinfo.fLineAscent);
+
+ m_Refresh.AddRefresh(VTToEdit(rcWord));
+ } else {
+ CPDF_Rect rcLine(lineinfo.ptLine.x,
+ lineinfo.ptLine.y + lineinfo.fLineDescent,
+ lineinfo.ptLine.x + lineinfo.fLineWidth,
+ lineinfo.ptLine.y + lineinfo.fLineAscent);
+
+ m_Refresh.AddRefresh(VTToEdit(rcLine));
+
+ pIterator->NextLine();
+ }
+ }
+ }
+ }
+}
+
+void CFX_Edit::RefreshWordRange(const CPVT_WordRange& wr) {
+ if (IPDF_VariableText_Iterator* pIterator = m_pVT->GetIterator()) {
+ CPVT_WordRange wrTemp = wr;
- if (IPDF_VariableText_Iterator * pIterator = m_pVT->GetIterator())
- {
- pIterator->SetAt(m_wpCaret);
+ m_pVT->UpdateWordPlace(wrTemp.BeginPos);
+ m_pVT->UpdateWordPlace(wrTemp.EndPos);
+ pIterator->SetAt(wrTemp.BeginPos);
- CPVT_Word word;
- CPVT_Line line;
- if (pIterator->GetWord(word))
- {
- ptHead.x = word.ptWord.x + word.fWidth;
- ptHead.y = word.ptWord.y + word.fAscent;
- ptFoot.x = word.ptWord.x + word.fWidth;
- ptFoot.y = word.ptWord.y + word.fDescent;
- }
- else if (pIterator->GetLine(line))
- {
- ptHead.x = line.ptLine.x;
- ptHead.y = line.ptLine.y + line.fLineAscent;
- ptFoot.x = line.ptLine.x;
- ptFoot.y = line.ptLine.y + line.fLineDescent;
- }
- }
+ CPVT_Word wordinfo;
+ CPVT_Line lineinfo;
+ CPVT_WordPlace place;
- CPDF_Point ptHeadEdit = VTToEdit(ptHead);
- CPDF_Point ptFootEdit = VTToEdit(ptFoot);
+ while (pIterator->NextWord()) {
+ place = pIterator->GetAt();
+ if (place.WordCmp(wrTemp.EndPos) > 0)
+ break;
- CPDF_Rect rcPlate = m_pVT->GetPlateRect();
+ pIterator->GetWord(wordinfo);
+ pIterator->GetLine(lineinfo);
- if (!FX_EDIT_IsFloatEqual(rcPlate.left,rcPlate.right))
- {
- if (FX_EDIT_IsFloatSmaller(ptHeadEdit.x, rcPlate.left) ||
- FX_EDIT_IsFloatEqual(ptHeadEdit.x, rcPlate.left))
- {
- SetScrollPosX(ptHead.x);
- }
- else if (FX_EDIT_IsFloatBigger(ptHeadEdit.x, rcPlate.right))
- {
- SetScrollPosX(ptHead.x - rcPlate.Width());
- }
- }
+ if (place.LineCmp(wrTemp.BeginPos) == 0 ||
+ place.LineCmp(wrTemp.EndPos) == 0) {
+ CPDF_Rect rcWord(wordinfo.ptWord.x,
+ lineinfo.ptLine.y + lineinfo.fLineDescent,
+ wordinfo.ptWord.x + wordinfo.fWidth,
+ lineinfo.ptLine.y + lineinfo.fLineAscent);
- if (!FX_EDIT_IsFloatEqual(rcPlate.top,rcPlate.bottom))
- {
- if (FX_EDIT_IsFloatSmaller(ptFootEdit.y, rcPlate.bottom) ||
- FX_EDIT_IsFloatEqual(ptFootEdit.y, rcPlate.bottom))
- {
- if (FX_EDIT_IsFloatSmaller(ptHeadEdit.y, rcPlate.top))
- {
- SetScrollPosY(ptFoot.y + rcPlate.Height());
- }
- }
- else if (FX_EDIT_IsFloatBigger(ptHeadEdit.y, rcPlate.top))
- {
- if (FX_EDIT_IsFloatBigger(ptFootEdit.y, rcPlate.bottom))
- {
- SetScrollPosY(ptHead.y);
- }
- }
+ if (m_bNotify && m_pNotify) {
+ if (!m_bNotifyFlag) {
+ m_bNotifyFlag = TRUE;
+ CPDF_Rect rcRefresh = VTToEdit(rcWord);
+ m_pNotify->IOnInvalidateRect(&rcRefresh);
+ m_bNotifyFlag = FALSE;
+ }
}
- }
-}
+ } else {
+ CPDF_Rect rcLine(lineinfo.ptLine.x,
+ lineinfo.ptLine.y + lineinfo.fLineDescent,
+ lineinfo.ptLine.x + lineinfo.fLineWidth,
+ lineinfo.ptLine.y + lineinfo.fLineAscent);
-void CFX_Edit::Refresh(REFRESH_PLAN_E ePlan,const CPVT_WordRange * pRange1,const CPVT_WordRange * pRange2)
-{
- if (m_bEnableRefresh && m_pVT->IsValid())
- {
- m_Refresh.BeginRefresh();
- RefreshPushLineRects(GetVisibleWordRange());
-
-// if (!FX_EDIT_IsFloatEqual(m_ptRefreshScrollPos.x,m_ptScrollPos.x) ||
-// !FX_EDIT_IsFloatEqual(m_ptRefreshScrollPos.y,m_ptScrollPos.y))
-// {
- m_Refresh.NoAnalyse();
- m_ptRefreshScrollPos = m_ptScrollPos;
-// }
-// else
-// {
-// switch (ePlan)
-// {
-// case RP_ANALYSE:
-// m_Refresh.Analyse(m_pVT->GetAlignment());
-//
-// if (pRange1) RefreshPushRandomRects(*pRange1);
-// if (pRange2) RefreshPushRandomRects(*pRange2);
-// break;
-// case RP_NOANALYSE:
-// m_Refresh.NoAnalyse();
-// break;
-// case RP_OPTIONAL:
-// if (pRange1) RefreshPushRandomRects(*pRange1);
-// if (pRange2) RefreshPushRandomRects(*pRange2);
-// break;
-// }
-// }
-
- if (m_bNotify && m_pNotify)
- {
- if (!m_bNotifyFlag)
- {
- m_bNotifyFlag = TRUE;
- if (const CFX_Edit_RectArray * pRects = m_Refresh.GetRefreshRects())
- {
- for (int32_t i = 0, sz = pRects->GetSize(); i < sz; i++)
- m_pNotify->IOnInvalidateRect(pRects->GetAt(i));
- }
- m_bNotifyFlag = FALSE;
- }
+ if (m_bNotify && m_pNotify) {
+ if (!m_bNotifyFlag) {
+ m_bNotifyFlag = TRUE;
+ CPDF_Rect rcRefresh = VTToEdit(rcLine);
+ m_pNotify->IOnInvalidateRect(&rcRefresh);
+ m_bNotifyFlag = FALSE;
+ }
}
- m_Refresh.EndRefresh();
+ pIterator->NextLine();
+ }
}
+ }
}
-void CFX_Edit::RefreshPushLineRects(const CPVT_WordRange & wr)
-{
- if (m_pVT->IsValid())
- {
- if (IPDF_VariableText_Iterator * pIterator = m_pVT->GetIterator())
- {
- CPVT_WordPlace wpBegin = wr.BeginPos;
- m_pVT->UpdateWordPlace(wpBegin);
- CPVT_WordPlace wpEnd = wr.EndPos;
- m_pVT->UpdateWordPlace(wpEnd);
- pIterator->SetAt(wpBegin);
-
- CPVT_Line lineinfo;
- do
- {
- if (!pIterator->GetLine(lineinfo))break;
- if (lineinfo.lineplace.LineCmp(wpEnd) > 0)break;
-
- CPDF_Rect rcLine(lineinfo.ptLine.x,
- lineinfo.ptLine.y + lineinfo.fLineDescent,
- lineinfo.ptLine.x + lineinfo.fLineWidth,
- lineinfo.ptLine.y + lineinfo.fLineAscent);
-
- m_Refresh.Push(CPVT_WordRange(lineinfo.lineplace,lineinfo.lineEnd),VTToEdit(rcLine));
-
- }while (pIterator->NextLine());
- }
- }
+void CFX_Edit::SetCaret(const CPVT_WordPlace& place) {
+ m_wpOldCaret = m_wpCaret;
+ m_wpCaret = place;
}
-void CFX_Edit::RefreshPushRandomRects(const CPVT_WordRange & wr)
-{
- if (m_pVT->IsValid())
- {
- if (IPDF_VariableText_Iterator * pIterator = m_pVT->GetIterator())
- {
- CPVT_WordRange wrTemp = wr;
+void CFX_Edit::SetCaretInfo() {
+ if (m_bNotify && m_pNotify) {
+ if (!m_bNotifyFlag) {
+ CPDF_Point ptHead(0.0f, 0.0f), ptFoot(0.0f, 0.0f);
- m_pVT->UpdateWordPlace(wrTemp.BeginPos);
- m_pVT->UpdateWordPlace(wrTemp.EndPos);
- pIterator->SetAt(wrTemp.BeginPos);
+ if (IPDF_VariableText_Iterator* pIterator = m_pVT->GetIterator()) {
+ pIterator->SetAt(m_wpCaret);
+ CPVT_Word word;
+ CPVT_Line line;
+ if (pIterator->GetWord(word)) {
+ ptHead.x = word.ptWord.x + word.fWidth;
+ ptHead.y = word.ptWord.y + word.fAscent;
+ ptFoot.x = word.ptWord.x + word.fWidth;
+ ptFoot.y = word.ptWord.y + word.fDescent;
+ } else if (pIterator->GetLine(line)) {
+ ptHead.x = line.ptLine.x;
+ ptHead.y = line.ptLine.y + line.fLineAscent;
+ ptFoot.x = line.ptLine.x;
+ ptFoot.y = line.ptLine.y + line.fLineDescent;
+ }
+ }
- CPVT_Word wordinfo;
- CPVT_Line lineinfo;
- CPVT_WordPlace place;
+ m_bNotifyFlag = TRUE;
+ m_pNotify->IOnSetCaret(!m_SelState.IsExist(), VTToEdit(ptHead),
+ VTToEdit(ptFoot), m_wpCaret);
+ m_bNotifyFlag = FALSE;
+ }
+ }
- while (pIterator->NextWord())
- {
- place = pIterator->GetAt();
- if (place.WordCmp(wrTemp.EndPos) > 0) break;
+ SetCaretChange();
+}
- pIterator->GetWord(wordinfo);
- pIterator->GetLine(lineinfo);
+void CFX_Edit::SetCaretChange() {
+ if (m_wpCaret == m_wpOldCaret)
+ return;
- if (place.LineCmp(wrTemp.BeginPos) == 0 || place.LineCmp(wrTemp.EndPos) == 0)
- {
- CPDF_Rect rcWord(wordinfo.ptWord.x,
- lineinfo.ptLine.y + lineinfo.fLineDescent,
- wordinfo.ptWord.x + wordinfo.fWidth,
- lineinfo.ptLine.y + lineinfo.fLineAscent);
+ if (m_bNotify && m_pVT->IsRichText() && m_pNotify) {
+ CPVT_SecProps SecProps;
+ CPVT_WordProps WordProps;
- m_Refresh.AddRefresh(VTToEdit(rcWord));
- }
- else
- {
- CPDF_Rect rcLine(lineinfo.ptLine.x,
- lineinfo.ptLine.y + lineinfo.fLineDescent,
- lineinfo.ptLine.x + lineinfo.fLineWidth,
- lineinfo.ptLine.y + lineinfo.fLineAscent);
+ if (IPDF_VariableText_Iterator* pIterator = m_pVT->GetIterator()) {
+ pIterator->SetAt(m_wpCaret);
+ CPVT_Word word;
+ CPVT_Section section;
- m_Refresh.AddRefresh(VTToEdit(rcLine));
+ if (pIterator->GetSection(section)) {
+ SecProps = section.SecProps;
+ WordProps = section.WordProps;
+ }
- pIterator->NextLine();
- }
- }
- }
+ if (pIterator->GetWord(word)) {
+ WordProps = word.WordProps;
+ }
}
-}
-
-void CFX_Edit::RefreshWordRange(const CPVT_WordRange& wr)
-{
- if (IPDF_VariableText_Iterator * pIterator = m_pVT->GetIterator())
- {
- CPVT_WordRange wrTemp = wr;
-
- m_pVT->UpdateWordPlace(wrTemp.BeginPos);
- m_pVT->UpdateWordPlace(wrTemp.EndPos);
- pIterator->SetAt(wrTemp.BeginPos);
-
- CPVT_Word wordinfo;
- CPVT_Line lineinfo;
- CPVT_WordPlace place;
-
- while (pIterator->NextWord())
- {
- place = pIterator->GetAt();
- if (place.WordCmp(wrTemp.EndPos) > 0) break;
-
- pIterator->GetWord(wordinfo);
- pIterator->GetLine(lineinfo);
-
- if (place.LineCmp(wrTemp.BeginPos) == 0 || place.LineCmp(wrTemp.EndPos) == 0)
- {
- CPDF_Rect rcWord(wordinfo.ptWord.x,
- lineinfo.ptLine.y + lineinfo.fLineDescent,
- wordinfo.ptWord.x + wordinfo.fWidth,
- lineinfo.ptLine.y + lineinfo.fLineAscent);
-
- if (m_bNotify && m_pNotify)
- {
- if (!m_bNotifyFlag)
- {
- m_bNotifyFlag = TRUE;
- CPDF_Rect rcRefresh = VTToEdit(rcWord);
- m_pNotify->IOnInvalidateRect(&rcRefresh);
- m_bNotifyFlag = FALSE;
- }
- }
- }
- else
- {
- CPDF_Rect rcLine(lineinfo.ptLine.x,
- lineinfo.ptLine.y + lineinfo.fLineDescent,
- lineinfo.ptLine.x + lineinfo.fLineWidth,
- lineinfo.ptLine.y + lineinfo.fLineAscent);
-
- if (m_bNotify && m_pNotify)
- {
- if (!m_bNotifyFlag)
- {
- m_bNotifyFlag = TRUE;
- CPDF_Rect rcRefresh = VTToEdit(rcLine);
- m_pNotify->IOnInvalidateRect(&rcRefresh);
- m_bNotifyFlag = FALSE;
- }
- }
- pIterator->NextLine();
- }
- }
+ if (!m_bNotifyFlag) {
+ m_bNotifyFlag = TRUE;
+ m_pNotify->IOnCaretChange(SecProps, WordProps);
+ m_bNotifyFlag = FALSE;
}
+ }
}
-void CFX_Edit::SetCaret(const CPVT_WordPlace & place)
-{
- m_wpOldCaret = m_wpCaret;
- m_wpCaret = place;
-}
-
-void CFX_Edit::SetCaretInfo()
-{
- if (m_bNotify && m_pNotify)
- {
- if (!m_bNotifyFlag)
- {
- CPDF_Point ptHead(0.0f,0.0f),ptFoot(0.0f,0.0f);
-
- if (IPDF_VariableText_Iterator * pIterator = m_pVT->GetIterator())
- {
- pIterator->SetAt(m_wpCaret);
- CPVT_Word word;
- CPVT_Line line;
- if (pIterator->GetWord(word))
- {
- ptHead.x = word.ptWord.x + word.fWidth;
- ptHead.y = word.ptWord.y + word.fAscent;
- ptFoot.x = word.ptWord.x + word.fWidth;
- ptFoot.y = word.ptWord.y + word.fDescent;
- }
- else if (pIterator->GetLine(line))
- {
- ptHead.x = line.ptLine.x;
- ptHead.y = line.ptLine.y + line.fLineAscent;
- ptFoot.x = line.ptLine.x;
- ptFoot.y = line.ptLine.y + line.fLineDescent;
- }
- }
-
- m_bNotifyFlag = TRUE;
- m_pNotify->IOnSetCaret(!m_SelState.IsExist(),VTToEdit(ptHead),VTToEdit(ptFoot), m_wpCaret);
- m_bNotifyFlag = FALSE;
- }
- }
+void CFX_Edit::SetCaret(int32_t nPos) {
+ if (m_pVT->IsValid()) {
+ SelectNone();
+ SetCaret(m_pVT->WordIndexToWordPlace(nPos));
+ m_SelState.Set(m_wpCaret, m_wpCaret);
- SetCaretChange();
+ ScrollToCaret();
+ SetCaretOrigin();
+ SetCaretInfo();
+ }
}
-void CFX_Edit::SetCaretChange()
-{
- if (m_wpCaret == m_wpOldCaret) return;
+void CFX_Edit::OnMouseDown(const CPDF_Point& point,
+ FX_BOOL bShift,
+ FX_BOOL bCtrl) {
+ if (m_pVT->IsValid()) {
+ SelectNone();
+ SetCaret(m_pVT->SearchWordPlace(EditToVT(point)));
+ m_SelState.Set(m_wpCaret, m_wpCaret);
- if (m_bNotify && m_pVT->IsRichText() && m_pNotify)
- {
- CPVT_SecProps SecProps;
- CPVT_WordProps WordProps;
-
- if (IPDF_VariableText_Iterator * pIterator = m_pVT->GetIterator())
- {
- pIterator->SetAt(m_wpCaret);
- CPVT_Word word;
- CPVT_Section section;
+ ScrollToCaret();
+ SetCaretOrigin();
+ SetCaretInfo();
+ }
+}
- if (pIterator->GetSection(section))
- {
- SecProps = section.SecProps;
- WordProps = section.WordProps;
- }
+void CFX_Edit::OnMouseMove(const CPDF_Point& point,
+ FX_BOOL bShift,
+ FX_BOOL bCtrl) {
+ if (m_pVT->IsValid()) {
+ SetCaret(m_pVT->SearchWordPlace(EditToVT(point)));
- if (pIterator->GetWord(word))
- {
- WordProps = word.WordProps;
- }
- }
+ if (m_wpCaret != m_wpOldCaret) {
+ m_SelState.SetEndPos(m_wpCaret);
- if (!m_bNotifyFlag)
- {
- m_bNotifyFlag = TRUE;
- m_pNotify->IOnCaretChange(SecProps,WordProps);
- m_bNotifyFlag = FALSE;
- }
+ ScrollToCaret();
+ CPVT_WordRange wr(m_wpOldCaret, m_wpCaret);
+ Refresh(RP_OPTIONAL, &wr);
+ SetCaretOrigin();
+ SetCaretInfo();
}
+ }
}
-void CFX_Edit::SetCaret(int32_t nPos)
-{
- if (m_pVT->IsValid())
- {
- SelectNone();
- SetCaret(m_pVT->WordIndexToWordPlace(nPos));
- m_SelState.Set(m_wpCaret,m_wpCaret);
+void CFX_Edit::OnVK_UP(FX_BOOL bShift, FX_BOOL bCtrl) {
+ if (m_pVT->IsValid()) {
+ SetCaret(m_pVT->GetUpWordPlace(m_wpCaret, m_ptCaret));
+ if (bShift) {
+ if (m_SelState.IsExist())
+ m_SelState.SetEndPos(m_wpCaret);
+ else
+ m_SelState.Set(m_wpOldCaret, m_wpCaret);
+
+ if (m_wpOldCaret != m_wpCaret) {
ScrollToCaret();
- SetCaretOrigin();
+ CPVT_WordRange wr(m_wpOldCaret, m_wpCaret);
+ Refresh(RP_OPTIONAL, &wr);
SetCaretInfo();
+ }
+ } else {
+ SelectNone();
+
+ ScrollToCaret();
+ SetCaretInfo();
}
+ }
}
-void CFX_Edit::OnMouseDown(const CPDF_Point & point,FX_BOOL bShift,FX_BOOL bCtrl)
-{
- if (m_pVT->IsValid())
- {
- SelectNone();
- SetCaret(m_pVT->SearchWordPlace(EditToVT(point)));
- m_SelState.Set(m_wpCaret,m_wpCaret);
+void CFX_Edit::OnVK_DOWN(FX_BOOL bShift, FX_BOOL bCtrl) {
+ if (m_pVT->IsValid()) {
+ SetCaret(m_pVT->GetDownWordPlace(m_wpCaret, m_ptCaret));
+ if (bShift) {
+ if (m_SelState.IsExist())
+ m_SelState.SetEndPos(m_wpCaret);
+ else
+ m_SelState.Set(m_wpOldCaret, m_wpCaret);
+
+ if (m_wpOldCaret != m_wpCaret) {
ScrollToCaret();
- SetCaretOrigin();
+ CPVT_WordRange wr(m_wpOldCaret, m_wpCaret);
+ Refresh(RP_OPTIONAL, &wr);
SetCaretInfo();
+ }
+ } else {
+ SelectNone();
+
+ ScrollToCaret();
+ SetCaretInfo();
}
+ }
}
-void CFX_Edit::OnMouseMove(const CPDF_Point & point,FX_BOOL bShift,FX_BOOL bCtrl)
-{
- if (m_pVT->IsValid())
- {
- SetCaret(m_pVT->SearchWordPlace(EditToVT(point)));
+void CFX_Edit::OnVK_LEFT(FX_BOOL bShift, FX_BOOL bCtrl) {
+ if (m_pVT->IsValid()) {
+ if (bShift) {
+ if (m_wpCaret == m_pVT->GetLineBeginPlace(m_wpCaret) &&
+ m_wpCaret != m_pVT->GetSectionBeginPlace(m_wpCaret))
+ SetCaret(m_pVT->GetPrevWordPlace(m_wpCaret));
- if (m_wpCaret != m_wpOldCaret)
- {
- m_SelState.SetEndPos(m_wpCaret);
+ SetCaret(m_pVT->GetPrevWordPlace(m_wpCaret));
- ScrollToCaret();
- CPVT_WordRange wr(m_wpOldCaret,m_wpCaret);
- Refresh(RP_OPTIONAL,&wr);
- SetCaretOrigin();
- SetCaretInfo();
- }
- }
-}
+ if (m_SelState.IsExist())
+ m_SelState.SetEndPos(m_wpCaret);
+ else
+ m_SelState.Set(m_wpOldCaret, m_wpCaret);
-void CFX_Edit::OnVK_UP(FX_BOOL bShift,FX_BOOL bCtrl)
-{
- if (m_pVT->IsValid())
- {
- SetCaret(m_pVT->GetUpWordPlace(m_wpCaret,m_ptCaret));
-
- if (bShift)
- {
- if (m_SelState.IsExist())
- m_SelState.SetEndPos(m_wpCaret);
- else
- m_SelState.Set(m_wpOldCaret,m_wpCaret);
-
- if (m_wpOldCaret != m_wpCaret)
- {
- ScrollToCaret();
- CPVT_WordRange wr(m_wpOldCaret, m_wpCaret);
- Refresh(RP_OPTIONAL, &wr);
- SetCaretInfo();
- }
- }
+ if (m_wpOldCaret != m_wpCaret) {
+ ScrollToCaret();
+ CPVT_WordRange wr(m_wpOldCaret, m_wpCaret);
+ Refresh(RP_OPTIONAL, &wr);
+ SetCaretInfo();
+ }
+ } else {
+ if (m_SelState.IsExist()) {
+ if (m_SelState.BeginPos.WordCmp(m_SelState.EndPos) < 0)
+ SetCaret(m_SelState.BeginPos);
else
- {
- SelectNone();
+ SetCaret(m_SelState.EndPos);
- ScrollToCaret();
- SetCaretInfo();
- }
- }
-}
+ SelectNone();
+ ScrollToCaret();
+ SetCaretInfo();
+ } else {
+ if (m_wpCaret == m_pVT->GetLineBeginPlace(m_wpCaret) &&
+ m_wpCaret != m_pVT->GetSectionBeginPlace(m_wpCaret))
+ SetCaret(m_pVT->GetPrevWordPlace(m_wpCaret));
-void CFX_Edit::OnVK_DOWN(FX_BOOL bShift,FX_BOOL bCtrl)
-{
- if (m_pVT->IsValid())
- {
- SetCaret(m_pVT->GetDownWordPlace(m_wpCaret,m_ptCaret));
-
- if (bShift)
- {
- if (m_SelState.IsExist())
- m_SelState.SetEndPos(m_wpCaret);
- else
- m_SelState.Set(m_wpOldCaret,m_wpCaret);
-
- if (m_wpOldCaret != m_wpCaret)
- {
- ScrollToCaret();
- CPVT_WordRange wr(m_wpOldCaret,m_wpCaret);
- Refresh(RP_OPTIONAL, &wr);
- SetCaretInfo();
- }
- }
- else
- {
- SelectNone();
+ SetCaret(m_pVT->GetPrevWordPlace(m_wpCaret));
- ScrollToCaret();
- SetCaretInfo();
- }
+ ScrollToCaret();
+ SetCaretOrigin();
+ SetCaretInfo();
+ }
}
+ }
}
-void CFX_Edit::OnVK_LEFT(FX_BOOL bShift,FX_BOOL bCtrl)
-{
- if (m_pVT->IsValid())
- {
- if (bShift)
- {
- if (m_wpCaret == m_pVT->GetLineBeginPlace(m_wpCaret) &&
- m_wpCaret != m_pVT->GetSectionBeginPlace(m_wpCaret))
- SetCaret(m_pVT->GetPrevWordPlace(m_wpCaret));
-
- SetCaret(m_pVT->GetPrevWordPlace(m_wpCaret));
-
- if (m_SelState.IsExist())
- m_SelState.SetEndPos(m_wpCaret);
- else
- m_SelState.Set(m_wpOldCaret, m_wpCaret);
-
- if (m_wpOldCaret != m_wpCaret)
- {
- ScrollToCaret();
- CPVT_WordRange wr(m_wpOldCaret,m_wpCaret);
- Refresh(RP_OPTIONAL,&wr);
- SetCaretInfo();
- }
- }
- else
- {
- if (m_SelState.IsExist())
- {
- if (m_SelState.BeginPos.WordCmp(m_SelState.EndPos)<0)
- SetCaret(m_SelState.BeginPos);
- else
- SetCaret(m_SelState.EndPos);
-
- SelectNone();
- ScrollToCaret();
- SetCaretInfo();
- }
- else
- {
- if (m_wpCaret == m_pVT->GetLineBeginPlace(m_wpCaret) &&
- m_wpCaret != m_pVT->GetSectionBeginPlace(m_wpCaret))
- SetCaret(m_pVT->GetPrevWordPlace(m_wpCaret));
+void CFX_Edit::OnVK_RIGHT(FX_BOOL bShift, FX_BOOL bCtrl) {
+ if (m_pVT->IsValid()) {
+ if (bShift) {
+ SetCaret(m_pVT->GetNextWordPlace(m_wpCaret));
- SetCaret(m_pVT->GetPrevWordPlace(m_wpCaret));
+ if (m_wpCaret == m_pVT->GetLineEndPlace(m_wpCaret) &&
+ m_wpCaret != m_pVT->GetSectionEndPlace(m_wpCaret))
+ SetCaret(m_pVT->GetNextWordPlace(m_wpCaret));
- ScrollToCaret();
- SetCaretOrigin();
- SetCaretInfo();
- }
- }
- }
-}
+ if (m_SelState.IsExist())
+ m_SelState.SetEndPos(m_wpCaret);
+ else
+ m_SelState.Set(m_wpOldCaret, m_wpCaret);
-void CFX_Edit::OnVK_RIGHT(FX_BOOL bShift,FX_BOOL bCtrl)
-{
- if (m_pVT->IsValid())
- {
- if (bShift)
- {
- SetCaret(m_pVT->GetNextWordPlace(m_wpCaret));
-
- if (m_wpCaret == m_pVT->GetLineEndPlace(m_wpCaret) &&
- m_wpCaret != m_pVT->GetSectionEndPlace(m_wpCaret))
- SetCaret(m_pVT->GetNextWordPlace(m_wpCaret));
-
- if (m_SelState.IsExist())
- m_SelState.SetEndPos(m_wpCaret);
- else
- m_SelState.Set(m_wpOldCaret,m_wpCaret);
-
- if (m_wpOldCaret != m_wpCaret)
- {
- ScrollToCaret();
- CPVT_WordRange wr(m_wpOldCaret,m_wpCaret);
- Refresh(RP_OPTIONAL,&wr);
- SetCaretInfo();
- }
- }
+ if (m_wpOldCaret != m_wpCaret) {
+ ScrollToCaret();
+ CPVT_WordRange wr(m_wpOldCaret, m_wpCaret);
+ Refresh(RP_OPTIONAL, &wr);
+ SetCaretInfo();
+ }
+ } else {
+ if (m_SelState.IsExist()) {
+ if (m_SelState.BeginPos.WordCmp(m_SelState.EndPos) > 0)
+ SetCaret(m_SelState.BeginPos);
else
- {
- if (m_SelState.IsExist())
- {
- if (m_SelState.BeginPos.WordCmp(m_SelState.EndPos)>0)
- SetCaret(m_SelState.BeginPos);
- else
- SetCaret(m_SelState.EndPos);
-
- SelectNone();
- ScrollToCaret();
- SetCaretInfo();
- }
- else
- {
- SetCaret(m_pVT->GetNextWordPlace(m_wpCaret));
+ SetCaret(m_SelState.EndPos);
- if (m_wpCaret == m_pVT->GetLineEndPlace(m_wpCaret) &&
- m_wpCaret != m_pVT->GetSectionEndPlace(m_wpCaret))
- SetCaret(m_pVT->GetNextWordPlace(m_wpCaret));
+ SelectNone();
+ ScrollToCaret();
+ SetCaretInfo();
+ } else {
+ SetCaret(m_pVT->GetNextWordPlace(m_wpCaret));
- ScrollToCaret();
- SetCaretOrigin();
- SetCaretInfo();
- }
- }
+ if (m_wpCaret == m_pVT->GetLineEndPlace(m_wpCaret) &&
+ m_wpCaret != m_pVT->GetSectionEndPlace(m_wpCaret))
+ SetCaret(m_pVT->GetNextWordPlace(m_wpCaret));
+
+ ScrollToCaret();
+ SetCaretOrigin();
+ SetCaretInfo();
+ }
}
+ }
}
-void CFX_Edit::OnVK_HOME(FX_BOOL bShift,FX_BOOL bCtrl)
-{
- if (m_pVT->IsValid())
- {
- if (bShift)
- {
- if (bCtrl)
- SetCaret(m_pVT->GetBeginWordPlace());
- else
- SetCaret(m_pVT->GetLineBeginPlace(m_wpCaret));
-
- if (m_SelState.IsExist())
- m_SelState.SetEndPos(m_wpCaret);
- else
- m_SelState.Set(m_wpOldCaret,m_wpCaret);
-
- ScrollToCaret();
- CPVT_WordRange wr(m_wpOldCaret, m_wpCaret);
- Refresh(RP_OPTIONAL, &wr);
- SetCaretInfo();
- }
+void CFX_Edit::OnVK_HOME(FX_BOOL bShift, FX_BOOL bCtrl) {
+ if (m_pVT->IsValid()) {
+ if (bShift) {
+ if (bCtrl)
+ SetCaret(m_pVT->GetBeginWordPlace());
+ else
+ SetCaret(m_pVT->GetLineBeginPlace(m_wpCaret));
+
+ if (m_SelState.IsExist())
+ m_SelState.SetEndPos(m_wpCaret);
+ else
+ m_SelState.Set(m_wpOldCaret, m_wpCaret);
+
+ ScrollToCaret();
+ CPVT_WordRange wr(m_wpOldCaret, m_wpCaret);
+ Refresh(RP_OPTIONAL, &wr);
+ SetCaretInfo();
+ } else {
+ if (m_SelState.IsExist()) {
+ if (m_SelState.BeginPos.WordCmp(m_SelState.EndPos) < 0)
+ SetCaret(m_SelState.BeginPos);
else
- {
- if (m_SelState.IsExist())
- {
- if (m_SelState.BeginPos.WordCmp(m_SelState.EndPos)<0)
- SetCaret(m_SelState.BeginPos);
- else
- SetCaret(m_SelState.EndPos);
-
- SelectNone();
- ScrollToCaret();
- SetCaretInfo();
- }
- else
- {
- if (bCtrl)
- SetCaret(m_pVT->GetBeginWordPlace());
- else
- SetCaret(m_pVT->GetLineBeginPlace(m_wpCaret));
-
- ScrollToCaret();
- SetCaretOrigin();
- SetCaretInfo();
- }
- }
- }
-}
+ SetCaret(m_SelState.EndPos);
-void CFX_Edit::OnVK_END(FX_BOOL bShift,FX_BOOL bCtrl)
-{
- if (m_pVT->IsValid())
- {
- if (bShift)
- {
- if (bCtrl)
- SetCaret(m_pVT->GetEndWordPlace());
- else
- SetCaret(m_pVT->GetLineEndPlace(m_wpCaret));
-
- if (m_SelState.IsExist())
- m_SelState.SetEndPos(m_wpCaret);
- else
- m_SelState.Set(m_wpOldCaret, m_wpCaret);
-
- ScrollToCaret();
- CPVT_WordRange wr(m_wpOldCaret, m_wpCaret);
- Refresh(RP_OPTIONAL, &wr);
- SetCaretInfo();
- }
+ SelectNone();
+ ScrollToCaret();
+ SetCaretInfo();
+ } else {
+ if (bCtrl)
+ SetCaret(m_pVT->GetBeginWordPlace());
else
- {
- if (m_SelState.IsExist())
- {
- if (m_SelState.BeginPos.WordCmp(m_SelState.EndPos)>0)
- SetCaret(m_SelState.BeginPos);
- else
- SetCaret(m_SelState.EndPos);
-
- SelectNone();
- ScrollToCaret();
- SetCaretInfo();
- }
- else
- {
- if (bCtrl)
- SetCaret(m_pVT->GetEndWordPlace());
- else
- SetCaret(m_pVT->GetLineEndPlace(m_wpCaret));
-
- ScrollToCaret();
- SetCaretOrigin();
- SetCaretInfo();
- }
- }
- }
-}
+ SetCaret(m_pVT->GetLineBeginPlace(m_wpCaret));
-void CFX_Edit::SetText(const FX_WCHAR* text,int32_t charset,
- const CPVT_SecProps * pSecProps,const CPVT_WordProps * pWordProps, FX_BOOL bAddUndo, FX_BOOL bPaint)
-{
- Empty();
- DoInsertText(CPVT_WordPlace(0,0,-1), text, charset, pSecProps, pWordProps);
- if (bPaint) Paint();
- if (m_bOprNotify && m_pOprNotify)
- m_pOprNotify->OnSetText(m_wpCaret, m_wpOldCaret);
- //if (bAddUndo)
-}
+ ScrollToCaret();
+ SetCaretOrigin();
+ SetCaretInfo();
+ }
+ }
+ }
+}
+
+void CFX_Edit::OnVK_END(FX_BOOL bShift, FX_BOOL bCtrl) {
+ if (m_pVT->IsValid()) {
+ if (bShift) {
+ if (bCtrl)
+ SetCaret(m_pVT->GetEndWordPlace());
+ else
+ SetCaret(m_pVT->GetLineEndPlace(m_wpCaret));
+
+ if (m_SelState.IsExist())
+ m_SelState.SetEndPos(m_wpCaret);
+ else
+ m_SelState.Set(m_wpOldCaret, m_wpCaret);
+
+ ScrollToCaret();
+ CPVT_WordRange wr(m_wpOldCaret, m_wpCaret);
+ Refresh(RP_OPTIONAL, &wr);
+ SetCaretInfo();
+ } else {
+ if (m_SelState.IsExist()) {
+ if (m_SelState.BeginPos.WordCmp(m_SelState.EndPos) > 0)
+ SetCaret(m_SelState.BeginPos);
+ else
+ SetCaret(m_SelState.EndPos);
+
+ SelectNone();
+ ScrollToCaret();
+ SetCaretInfo();
+ } else {
+ if (bCtrl)
+ SetCaret(m_pVT->GetEndWordPlace());
+ else
+ SetCaret(m_pVT->GetLineEndPlace(m_wpCaret));
-FX_BOOL CFX_Edit::InsertWord(FX_WORD word, int32_t charset, const CPVT_WordProps * pWordProps, FX_BOOL bAddUndo, FX_BOOL bPaint)
-{
- if (IsTextOverflow()) return FALSE;
+ ScrollToCaret();
+ SetCaretOrigin();
+ SetCaretInfo();
+ }
+ }
+ }
+}
+
+void CFX_Edit::SetText(const FX_WCHAR* text,
+ int32_t charset,
+ const CPVT_SecProps* pSecProps,
+ const CPVT_WordProps* pWordProps,
+ FX_BOOL bAddUndo,
+ FX_BOOL bPaint) {
+ Empty();
+ DoInsertText(CPVT_WordPlace(0, 0, -1), text, charset, pSecProps, pWordProps);
+ if (bPaint)
+ Paint();
+ if (m_bOprNotify && m_pOprNotify)
+ m_pOprNotify->OnSetText(m_wpCaret, m_wpOldCaret);
+ // if (bAddUndo)
+}
+
+FX_BOOL CFX_Edit::InsertWord(FX_WORD word,
+ int32_t charset,
+ const CPVT_WordProps* pWordProps,
+ FX_BOOL bAddUndo,
+ FX_BOOL bPaint) {
+ if (IsTextOverflow())
+ return FALSE;
- if (m_pVT->IsValid())
- {
- m_pVT->UpdateWordPlace(m_wpCaret);
+ if (m_pVT->IsValid()) {
+ m_pVT->UpdateWordPlace(m_wpCaret);
- SetCaret(m_pVT->InsertWord(m_wpCaret,word,GetCharSetFromUnicode(word, charset),pWordProps));
- m_SelState.Set(m_wpCaret,m_wpCaret);
+ SetCaret(m_pVT->InsertWord(
+ m_wpCaret, word, GetCharSetFromUnicode(word, charset), pWordProps));
+ m_SelState.Set(m_wpCaret, m_wpCaret);
- if (m_wpCaret != m_wpOldCaret)
- {
- if (bAddUndo && m_bEnableUndo)
- {
- AddEditUndoItem(new CFXEU_InsertWord(this,m_wpOldCaret,m_wpCaret,word,charset,pWordProps));
- }
+ if (m_wpCaret != m_wpOldCaret) {
+ if (bAddUndo && m_bEnableUndo) {
+ AddEditUndoItem(new CFXEU_InsertWord(this, m_wpOldCaret, m_wpCaret,
+ word, charset, pWordProps));
+ }
- if (bPaint)
- PaintInsertText(m_wpOldCaret, m_wpCaret);
+ if (bPaint)
+ PaintInsertText(m_wpOldCaret, m_wpCaret);
- if (m_bOprNotify && m_pOprNotify)
- m_pOprNotify->OnInsertWord(m_wpCaret, m_wpOldCaret);
+ if (m_bOprNotify && m_pOprNotify)
+ m_pOprNotify->OnInsertWord(m_wpCaret, m_wpOldCaret);
- return TRUE;
- }
+ return TRUE;
}
+ }
- return FALSE;
+ return FALSE;
}
-FX_BOOL CFX_Edit::InsertReturn(const CPVT_SecProps * pSecProps,const CPVT_WordProps * pWordProps,
- FX_BOOL bAddUndo, FX_BOOL bPaint)
-{
- if (IsTextOverflow()) return FALSE;
+FX_BOOL CFX_Edit::InsertReturn(const CPVT_SecProps* pSecProps,
+ const CPVT_WordProps* pWordProps,
+ FX_BOOL bAddUndo,
+ FX_BOOL bPaint) {
+ if (IsTextOverflow())
+ return FALSE;
- if (m_pVT->IsValid())
- {
- m_pVT->UpdateWordPlace(m_wpCaret);
- SetCaret(m_pVT->InsertSection(m_wpCaret,pSecProps,pWordProps));
- m_SelState.Set(m_wpCaret,m_wpCaret);
+ if (m_pVT->IsValid()) {
+ m_pVT->UpdateWordPlace(m_wpCaret);
+ SetCaret(m_pVT->InsertSection(m_wpCaret, pSecProps, pWordProps));
+ m_SelState.Set(m_wpCaret, m_wpCaret);
- if (m_wpCaret != m_wpOldCaret)
- {
- if (bAddUndo && m_bEnableUndo)
- {
- AddEditUndoItem(new CFXEU_InsertReturn(this,m_wpOldCaret,m_wpCaret,pSecProps,pWordProps));
- }
+ if (m_wpCaret != m_wpOldCaret) {
+ if (bAddUndo && m_bEnableUndo) {
+ AddEditUndoItem(new CFXEU_InsertReturn(this, m_wpOldCaret, m_wpCaret,
+ pSecProps, pWordProps));
+ }
- if (bPaint)
- {
- RearrangePart(CPVT_WordRange(m_wpOldCaret, m_wpCaret));
- ScrollToCaret();
- CPVT_WordRange wr(m_wpOldCaret, GetVisibleWordRange().EndPos);
- Refresh(RP_ANALYSE, &wr);
- SetCaretOrigin();
- SetCaretInfo();
- }
+ if (bPaint) {
+ RearrangePart(CPVT_WordRange(m_wpOldCaret, m_wpCaret));
+ ScrollToCaret();
+ CPVT_WordRange wr(m_wpOldCaret, GetVisibleWordRange().EndPos);
+ Refresh(RP_ANALYSE, &wr);
+ SetCaretOrigin();
+ SetCaretInfo();
+ }
- if (m_bOprNotify && m_pOprNotify)
- m_pOprNotify->OnInsertReturn(m_wpCaret, m_wpOldCaret);
+ if (m_bOprNotify && m_pOprNotify)
+ m_pOprNotify->OnInsertReturn(m_wpCaret, m_wpOldCaret);
- return TRUE;
- }
+ return TRUE;
}
+ }
- return FALSE;
+ return FALSE;
}
-FX_BOOL CFX_Edit::Backspace(FX_BOOL bAddUndo, FX_BOOL bPaint)
-{
- if (m_pVT->IsValid())
- {
- if (m_wpCaret == m_pVT->GetBeginWordPlace()) return FALSE;
+FX_BOOL CFX_Edit::Backspace(FX_BOOL bAddUndo, FX_BOOL bPaint) {
+ if (m_pVT->IsValid()) {
+ if (m_wpCaret == m_pVT->GetBeginWordPlace())
+ return FALSE;
- CPVT_Section section;
- CPVT_Word word;
+ CPVT_Section section;
+ CPVT_Word word;
- if (bAddUndo)
- {
- if (IPDF_VariableText_Iterator * pIterator = m_pVT->GetIterator())
- {
- pIterator->SetAt(m_wpCaret);
- pIterator->GetSection(section);
- pIterator->GetWord(word);
- }
- }
+ if (bAddUndo) {
+ if (IPDF_VariableText_Iterator* pIterator = m_pVT->GetIterator()) {
+ pIterator->SetAt(m_wpCaret);
+ pIterator->GetSection(section);
+ pIterator->GetWord(word);
+ }
+ }
- m_pVT->UpdateWordPlace(m_wpCaret);
- SetCaret(m_pVT->BackSpaceWord(m_wpCaret));
- m_SelState.Set(m_wpCaret,m_wpCaret);
-
- if (m_wpCaret != m_wpOldCaret)
- {
- if (bAddUndo && m_bEnableUndo)
- {
- if (m_wpCaret.SecCmp(m_wpOldCaret) != 0)
- AddEditUndoItem(new CFXEU_Backspace(this,m_wpOldCaret,m_wpCaret,word.Word,word.nCharset,
- section.SecProps,section.WordProps));
- else
- AddEditUndoItem(new CFXEU_Backspace(this,m_wpOldCaret,m_wpCaret,word.Word,word.nCharset,
- section.SecProps,word.WordProps));
- }
+ m_pVT->UpdateWordPlace(m_wpCaret);
+ SetCaret(m_pVT->BackSpaceWord(m_wpCaret));
+ m_SelState.Set(m_wpCaret, m_wpCaret);
+
+ if (m_wpCaret != m_wpOldCaret) {
+ if (bAddUndo && m_bEnableUndo) {
+ if (m_wpCaret.SecCmp(m_wpOldCaret) != 0)
+ AddEditUndoItem(new CFXEU_Backspace(
+ this, m_wpOldCaret, m_wpCaret, word.Word, word.nCharset,
+ section.SecProps, section.WordProps));
+ else
+ AddEditUndoItem(new CFXEU_Backspace(
+ this, m_wpOldCaret, m_wpCaret, word.Word, word.nCharset,
+ section.SecProps, word.WordProps));
+ }
- if (bPaint)
- {
- RearrangePart(CPVT_WordRange(m_wpCaret,m_wpOldCaret));
- ScrollToCaret();
+ if (bPaint) {
+ RearrangePart(CPVT_WordRange(m_wpCaret, m_wpOldCaret));
+ ScrollToCaret();
- CPVT_WordRange wr;
- if (m_wpCaret.SecCmp(m_wpOldCaret) !=0)
- wr = CPVT_WordRange(m_pVT->GetPrevWordPlace(m_wpCaret),GetVisibleWordRange().EndPos);
- else if (m_wpCaret.LineCmp(m_wpOldCaret) !=0)
- wr = CPVT_WordRange(m_pVT->GetLineBeginPlace(m_wpCaret),m_pVT->GetSectionEndPlace(m_wpCaret));
- else
- wr = CPVT_WordRange(m_pVT->GetPrevWordPlace(m_wpCaret),m_pVT->GetSectionEndPlace(m_wpCaret));
+ CPVT_WordRange wr;
+ if (m_wpCaret.SecCmp(m_wpOldCaret) != 0)
+ wr = CPVT_WordRange(m_pVT->GetPrevWordPlace(m_wpCaret),
+ GetVisibleWordRange().EndPos);
+ else if (m_wpCaret.LineCmp(m_wpOldCaret) != 0)
+ wr = CPVT_WordRange(m_pVT->GetLineBeginPlace(m_wpCaret),
+ m_pVT->GetSectionEndPlace(m_wpCaret));
+ else
+ wr = CPVT_WordRange(m_pVT->GetPrevWordPlace(m_wpCaret),
+ m_pVT->GetSectionEndPlace(m_wpCaret));
- Refresh(RP_ANALYSE, &wr);
+ Refresh(RP_ANALYSE, &wr);
- SetCaretOrigin();
- SetCaretInfo();
- }
+ SetCaretOrigin();
+ SetCaretInfo();
+ }
- if (m_bOprNotify && m_pOprNotify)
- m_pOprNotify->OnBackSpace(m_wpCaret, m_wpOldCaret);
+ if (m_bOprNotify && m_pOprNotify)
+ m_pOprNotify->OnBackSpace(m_wpCaret, m_wpOldCaret);
- return TRUE;
- }
+ return TRUE;
}
+ }
- return FALSE;
+ return FALSE;
}
-FX_BOOL CFX_Edit::Delete(FX_BOOL bAddUndo, FX_BOOL bPaint)
-{
- if (m_pVT->IsValid())
- {
- if (m_wpCaret == m_pVT->GetEndWordPlace()) return FALSE;
+FX_BOOL CFX_Edit::Delete(FX_BOOL bAddUndo, FX_BOOL bPaint) {
+ if (m_pVT->IsValid()) {
+ if (m_wpCaret == m_pVT->GetEndWordPlace())
+ return FALSE;
- CPVT_Section section;
- CPVT_Word word;
+ CPVT_Section section;
+ CPVT_Word word;
- if (bAddUndo)
- {
- if (IPDF_VariableText_Iterator * pIterator = m_pVT->GetIterator())
- {
- pIterator->SetAt(m_pVT->GetNextWordPlace(m_wpCaret));
- pIterator->GetSection(section);
- pIterator->GetWord(word);
- }
- }
+ if (bAddUndo) {
+ if (IPDF_VariableText_Iterator* pIterator = m_pVT->GetIterator()) {
+ pIterator->SetAt(m_pVT->GetNextWordPlace(m_wpCaret));
+ pIterator->GetSection(section);
+ pIterator->GetWord(word);
+ }
+ }
- m_pVT->UpdateWordPlace(m_wpCaret);
- FX_BOOL bSecEnd = (m_wpCaret == m_pVT->GetSectionEndPlace(m_wpCaret));
+ m_pVT->UpdateWordPlace(m_wpCaret);
+ FX_BOOL bSecEnd = (m_wpCaret == m_pVT->GetSectionEndPlace(m_wpCaret));
- SetCaret(m_pVT->DeleteWord(m_wpCaret));
- m_SelState.Set(m_wpCaret,m_wpCaret);
+ SetCaret(m_pVT->DeleteWord(m_wpCaret));
+ m_SelState.Set(m_wpCaret, m_wpCaret);
- if (bAddUndo && m_bEnableUndo)
- {
- if (bSecEnd)
- AddEditUndoItem(new CFXEU_Delete(this,m_wpOldCaret,m_wpCaret,word.Word,word.nCharset,
- section.SecProps,section.WordProps,bSecEnd));
- else
- AddEditUndoItem(new CFXEU_Delete(this,m_wpOldCaret,m_wpCaret,word.Word,word.nCharset,
- section.SecProps,word.WordProps,bSecEnd));
- }
+ if (bAddUndo && m_bEnableUndo) {
+ if (bSecEnd)
+ AddEditUndoItem(new CFXEU_Delete(
+ this, m_wpOldCaret, m_wpCaret, word.Word, word.nCharset,
+ section.SecProps, section.WordProps, bSecEnd));
+ else
+ AddEditUndoItem(new CFXEU_Delete(
+ this, m_wpOldCaret, m_wpCaret, word.Word, word.nCharset,
+ section.SecProps, word.WordProps, bSecEnd));
+ }
- if (bPaint)
- {
- RearrangePart(CPVT_WordRange(m_wpOldCaret,m_wpCaret));
- ScrollToCaret();
+ if (bPaint) {
+ RearrangePart(CPVT_WordRange(m_wpOldCaret, m_wpCaret));
+ ScrollToCaret();
- CPVT_WordRange wr;
- if (bSecEnd)
- wr = CPVT_WordRange(m_pVT->GetPrevWordPlace(m_wpOldCaret),GetVisibleWordRange().EndPos);
- else if (m_wpCaret.LineCmp(m_wpOldCaret) !=0)
- wr = CPVT_WordRange(m_pVT->GetLineBeginPlace(m_wpCaret),m_pVT->GetSectionEndPlace(m_wpCaret));
- else
- wr = CPVT_WordRange(m_pVT->GetPrevWordPlace(m_wpOldCaret),m_pVT->GetSectionEndPlace(m_wpCaret));
+ CPVT_WordRange wr;
+ if (bSecEnd)
+ wr = CPVT_WordRange(m_pVT->GetPrevWordPlace(m_wpOldCaret),
+ GetVisibleWordRange().EndPos);
+ else if (m_wpCaret.LineCmp(m_wpOldCaret) != 0)
+ wr = CPVT_WordRange(m_pVT->GetLineBeginPlace(m_wpCaret),
+ m_pVT->GetSectionEndPlace(m_wpCaret));
+ else
+ wr = CPVT_WordRange(m_pVT->GetPrevWordPlace(m_wpOldCaret),
+ m_pVT->GetSectionEndPlace(m_wpCaret));
- Refresh(RP_ANALYSE, &wr);
+ Refresh(RP_ANALYSE, &wr);
- SetCaretOrigin();
- SetCaretInfo();
- }
+ SetCaretOrigin();
+ SetCaretInfo();
+ }
- if (m_bOprNotify && m_pOprNotify)
- m_pOprNotify->OnDelete(m_wpCaret, m_wpOldCaret);
+ if (m_bOprNotify && m_pOprNotify)
+ m_pOprNotify->OnDelete(m_wpCaret, m_wpOldCaret);
- return TRUE;
- }
+ return TRUE;
+ }
- return FALSE;
+ return FALSE;
}
-FX_BOOL CFX_Edit::Empty()
-{
- if (m_pVT->IsValid())
- {
- m_pVT->DeleteWords(GetWholeWordRange());
- SetCaret(m_pVT->GetBeginWordPlace());
+FX_BOOL CFX_Edit::Empty() {
+ if (m_pVT->IsValid()) {
+ m_pVT->DeleteWords(GetWholeWordRange());
+ SetCaret(m_pVT->GetBeginWordPlace());
- return TRUE;
- }
+ return TRUE;
+ }
- return FALSE;
+ return FALSE;
}
-FX_BOOL CFX_Edit::Clear(FX_BOOL bAddUndo, FX_BOOL bPaint)
-{
- if (m_pVT->IsValid())
- {
- if (m_SelState.IsExist())
- {
- CPVT_WordRange range = m_SelState.ConvertToWordRange();
-
- if (bAddUndo && m_bEnableUndo)
- {
- if (m_pVT->IsRichText())
- {
- BeginGroupUndo(L"");
-
- if (IPDF_VariableText_Iterator * pIterator = m_pVT->GetIterator())
- {
- pIterator->SetAt(range.EndPos);
-
- CPVT_Word wordinfo;
- CPVT_Section secinfo;
- do
- {
- CPVT_WordPlace place = pIterator->GetAt();
- if (place.WordCmp(range.BeginPos) <= 0)break;
-
- CPVT_WordPlace oldplace = m_pVT->GetPrevWordPlace(place);
-
- if (oldplace.SecCmp(place) != 0)
- {
- if (pIterator->GetSection(secinfo))
- {
- AddEditUndoItem(new CFXEU_ClearRich(this,oldplace,place,range,wordinfo.Word,
- wordinfo.nCharset,secinfo.SecProps,secinfo.WordProps));
- }
- }
- else
- {
- if (pIterator->GetWord(wordinfo))
- {
- oldplace = m_pVT->AjustLineHeader(oldplace,TRUE);
- place = m_pVT->AjustLineHeader(place,TRUE);
-
- AddEditUndoItem(new CFXEU_ClearRich(this,oldplace,place,range,wordinfo.Word,
- wordinfo.nCharset,secinfo.SecProps,wordinfo.WordProps));
- }
- }
- }while (pIterator->PrevWord());
- }
- EndGroupUndo();
+FX_BOOL CFX_Edit::Clear(FX_BOOL bAddUndo, FX_BOOL bPaint) {
+ if (m_pVT->IsValid()) {
+ if (m_SelState.IsExist()) {
+ CPVT_WordRange range = m_SelState.ConvertToWordRange();
+
+ if (bAddUndo && m_bEnableUndo) {
+ if (m_pVT->IsRichText()) {
+ BeginGroupUndo(L"");
+
+ if (IPDF_VariableText_Iterator* pIterator = m_pVT->GetIterator()) {
+ pIterator->SetAt(range.EndPos);
+
+ CPVT_Word wordinfo;
+ CPVT_Section secinfo;
+ do {
+ CPVT_WordPlace place = pIterator->GetAt();
+ if (place.WordCmp(range.BeginPos) <= 0)
+ break;
+
+ CPVT_WordPlace oldplace = m_pVT->GetPrevWordPlace(place);
+
+ if (oldplace.SecCmp(place) != 0) {
+ if (pIterator->GetSection(secinfo)) {
+ AddEditUndoItem(new CFXEU_ClearRich(
+ this, oldplace, place, range, wordinfo.Word,
+ wordinfo.nCharset, secinfo.SecProps, secinfo.WordProps));
}
- else
- {
- AddEditUndoItem(new CFXEU_Clear(this,range,GetSelText()));
+ } else {
+ if (pIterator->GetWord(wordinfo)) {
+ oldplace = m_pVT->AjustLineHeader(oldplace, TRUE);
+ place = m_pVT->AjustLineHeader(place, TRUE);
+
+ AddEditUndoItem(new CFXEU_ClearRich(
+ this, oldplace, place, range, wordinfo.Word,
+ wordinfo.nCharset, secinfo.SecProps, wordinfo.WordProps));
}
- }
+ }
+ } while (pIterator->PrevWord());
+ }
+ EndGroupUndo();
+ } else {
+ AddEditUndoItem(new CFXEU_Clear(this, range, GetSelText()));
+ }
+ }
- SelectNone();
- SetCaret(m_pVT->DeleteWords(range));
- m_SelState.Set(m_wpCaret,m_wpCaret);
+ SelectNone();
+ SetCaret(m_pVT->DeleteWords(range));
+ m_SelState.Set(m_wpCaret, m_wpCaret);
- if (bPaint)
- {
- RearrangePart(range);
- ScrollToCaret();
+ if (bPaint) {
+ RearrangePart(range);
+ ScrollToCaret();
- CPVT_WordRange wr(m_wpOldCaret, GetVisibleWordRange().EndPos);
- Refresh(RP_ANALYSE, &wr);
+ CPVT_WordRange wr(m_wpOldCaret, GetVisibleWordRange().EndPos);
+ Refresh(RP_ANALYSE, &wr);
- SetCaretOrigin();
- SetCaretInfo();
- }
+ SetCaretOrigin();
+ SetCaretInfo();
+ }
- if (m_bOprNotify && m_pOprNotify)
- m_pOprNotify->OnClear(m_wpCaret, m_wpOldCaret);
+ if (m_bOprNotify && m_pOprNotify)
+ m_pOprNotify->OnClear(m_wpCaret, m_wpOldCaret);
- return TRUE;
- }
+ return TRUE;
}
+ }
- return FALSE;
+ return FALSE;
}
-FX_BOOL CFX_Edit::InsertText(const FX_WCHAR* text, int32_t charset,
- const CPVT_SecProps * pSecProps, const CPVT_WordProps * pWordProps, FX_BOOL bAddUndo, FX_BOOL bPaint)
-{
- if (IsTextOverflow()) return FALSE;
+FX_BOOL CFX_Edit::InsertText(const FX_WCHAR* text,
+ int32_t charset,
+ const CPVT_SecProps* pSecProps,
+ const CPVT_WordProps* pWordProps,
+ FX_BOOL bAddUndo,
+ FX_BOOL bPaint) {
+ if (IsTextOverflow())
+ return FALSE;
- m_pVT->UpdateWordPlace(m_wpCaret);
- SetCaret(DoInsertText(m_wpCaret, text, charset, pSecProps, pWordProps));
- m_SelState.Set(m_wpCaret,m_wpCaret);
-
- if (m_wpCaret != m_wpOldCaret)
- {
- if (bAddUndo && m_bEnableUndo)
- {
- AddEditUndoItem(new CFXEU_InsertText(this,m_wpOldCaret,m_wpCaret,text,charset,pSecProps,pWordProps));
- }
+ m_pVT->UpdateWordPlace(m_wpCaret);
+ SetCaret(DoInsertText(m_wpCaret, text, charset, pSecProps, pWordProps));
+ m_SelState.Set(m_wpCaret, m_wpCaret);
- if (bPaint)
- PaintInsertText(m_wpOldCaret, m_wpCaret);
+ if (m_wpCaret != m_wpOldCaret) {
+ if (bAddUndo && m_bEnableUndo) {
+ AddEditUndoItem(new CFXEU_InsertText(this, m_wpOldCaret, m_wpCaret, text,
+ charset, pSecProps, pWordProps));
+ }
- if (m_bOprNotify && m_pOprNotify)
- m_pOprNotify->OnInsertText(m_wpCaret, m_wpOldCaret);
+ if (bPaint)
+ PaintInsertText(m_wpOldCaret, m_wpCaret);
- return TRUE;
- }
- return FALSE;
+ if (m_bOprNotify && m_pOprNotify)
+ m_pOprNotify->OnInsertText(m_wpCaret, m_wpOldCaret);
+
+ return TRUE;
+ }
+ return FALSE;
}
-void CFX_Edit::PaintInsertText(const CPVT_WordPlace & wpOld, const CPVT_WordPlace & wpNew)
-{
- if (m_pVT->IsValid())
- {
- RearrangePart(CPVT_WordRange(wpOld,wpNew));
- ScrollToCaret();
+void CFX_Edit::PaintInsertText(const CPVT_WordPlace& wpOld,
+ const CPVT_WordPlace& wpNew) {
+ if (m_pVT->IsValid()) {
+ RearrangePart(CPVT_WordRange(wpOld, wpNew));
+ ScrollToCaret();
- CPVT_WordRange wr;
- if (m_wpCaret.LineCmp(wpOld) !=0)
- wr = CPVT_WordRange(m_pVT->GetLineBeginPlace(wpOld),m_pVT->GetSectionEndPlace(wpNew));
- else
- wr = CPVT_WordRange(wpOld,m_pVT->GetSectionEndPlace(wpNew));
- Refresh(RP_ANALYSE, &wr);
- SetCaretOrigin();
- SetCaretInfo();
- }
+ CPVT_WordRange wr;
+ if (m_wpCaret.LineCmp(wpOld) != 0)
+ wr = CPVT_WordRange(m_pVT->GetLineBeginPlace(wpOld),
+ m_pVT->GetSectionEndPlace(wpNew));
+ else
+ wr = CPVT_WordRange(wpOld, m_pVT->GetSectionEndPlace(wpNew));
+ Refresh(RP_ANALYSE, &wr);
+ SetCaretOrigin();
+ SetCaretInfo();
+ }
}
-FX_BOOL CFX_Edit::Redo()
-{
- if (m_bEnableUndo)
- {
- if (m_Undo.CanRedo())
- {
- m_Undo.Redo();
- return TRUE;
- }
+FX_BOOL CFX_Edit::Redo() {
+ if (m_bEnableUndo) {
+ if (m_Undo.CanRedo()) {
+ m_Undo.Redo();
+ return TRUE;
}
+ }
- return FALSE;
+ return FALSE;
}
-FX_BOOL CFX_Edit::Undo()
-{
- if (m_bEnableUndo)
- {
- if (m_Undo.CanUndo())
- {
- m_Undo.Undo();
- return TRUE;
- }
+FX_BOOL CFX_Edit::Undo() {
+ if (m_bEnableUndo) {
+ if (m_Undo.CanUndo()) {
+ m_Undo.Undo();
+ return TRUE;
}
+ }
- return FALSE;
+ return FALSE;
}
-void CFX_Edit::SetCaretOrigin()
-{
- if (m_pVT->IsValid())
- {
- if (IPDF_VariableText_Iterator * pIterator = m_pVT->GetIterator())
- {
- pIterator->SetAt(m_wpCaret);
- CPVT_Word word;
- CPVT_Line line;
- if (pIterator->GetWord(word))
- {
- m_ptCaret.x = word.ptWord.x + word.fWidth;
- m_ptCaret.y = word.ptWord.y;
- }
- else if (pIterator->GetLine(line))
- {
- m_ptCaret.x = line.ptLine.x;
- m_ptCaret.y = line.ptLine.y;
- }
- }
+void CFX_Edit::SetCaretOrigin() {
+ if (m_pVT->IsValid()) {
+ if (IPDF_VariableText_Iterator* pIterator = m_pVT->GetIterator()) {
+ pIterator->SetAt(m_wpCaret);
+ CPVT_Word word;
+ CPVT_Line line;
+ if (pIterator->GetWord(word)) {
+ m_ptCaret.x = word.ptWord.x + word.fWidth;
+ m_ptCaret.y = word.ptWord.y;
+ } else if (pIterator->GetLine(line)) {
+ m_ptCaret.x = line.ptLine.x;
+ m_ptCaret.y = line.ptLine.y;
+ }
}
+ }
}
-int32_t CFX_Edit::WordPlaceToWordIndex(const CPVT_WordPlace & place) const
-{
- if (m_pVT->IsValid())
- return m_pVT->WordPlaceToWordIndex(place);
+int32_t CFX_Edit::WordPlaceToWordIndex(const CPVT_WordPlace& place) const {
+ if (m_pVT->IsValid())
+ return m_pVT->WordPlaceToWordIndex(place);
- return -1;
+ return -1;
}
-CPVT_WordPlace CFX_Edit::WordIndexToWordPlace(int32_t index) const
-{
- if (m_pVT->IsValid())
- return m_pVT->WordIndexToWordPlace(index);
+CPVT_WordPlace CFX_Edit::WordIndexToWordPlace(int32_t index) const {
+ if (m_pVT->IsValid())
+ return m_pVT->WordIndexToWordPlace(index);
- return CPVT_WordPlace();
+ return CPVT_WordPlace();
}
-FX_BOOL CFX_Edit::IsTextFull() const
-{
- int32_t nTotalWords = m_pVT->GetTotalWords();
- int32_t nLimitChar = m_pVT->GetLimitChar();
- int32_t nCharArray = m_pVT->GetCharArray();
+FX_BOOL CFX_Edit::IsTextFull() const {
+ int32_t nTotalWords = m_pVT->GetTotalWords();
+ int32_t nLimitChar = m_pVT->GetLimitChar();
+ int32_t nCharArray = m_pVT->GetCharArray();
- return IsTextOverflow() || (nLimitChar>0 && nTotalWords >= nLimitChar)
- || (nCharArray>0 && nTotalWords >= nCharArray);
+ return IsTextOverflow() || (nLimitChar > 0 && nTotalWords >= nLimitChar) ||
+ (nCharArray > 0 && nTotalWords >= nCharArray);
}
-FX_BOOL CFX_Edit::IsTextOverflow() const
-{
- if (!m_bEnableScroll && !m_bEnableOverflow)
- {
- CPDF_Rect rcPlate = m_pVT->GetPlateRect();
- CPDF_Rect rcContent = m_pVT->GetContentRect();
-
- if (m_pVT->IsMultiLine() && GetTotalLines() > 1)
- {
- if (FX_EDIT_IsFloatBigger(rcContent.Height(),rcPlate.Height())) return TRUE;
- }
+FX_BOOL CFX_Edit::IsTextOverflow() const {
+ if (!m_bEnableScroll && !m_bEnableOverflow) {
+ CPDF_Rect rcPlate = m_pVT->GetPlateRect();
+ CPDF_Rect rcContent = m_pVT->GetContentRect();
- if (FX_EDIT_IsFloatBigger(rcContent.Width(),rcPlate.Width())) return TRUE;
+ if (m_pVT->IsMultiLine() && GetTotalLines() > 1) {
+ if (FX_EDIT_IsFloatBigger(rcContent.Height(), rcPlate.Height()))
+ return TRUE;
}
- return FALSE;
+ if (FX_EDIT_IsFloatBigger(rcContent.Width(), rcPlate.Width()))
+ return TRUE;
+ }
+
+ return FALSE;
}
-CPVT_WordPlace CFX_Edit::GetLineBeginPlace(const CPVT_WordPlace & place) const
-{
- return m_pVT->GetLineBeginPlace(place);
+CPVT_WordPlace CFX_Edit::GetLineBeginPlace(const CPVT_WordPlace& place) const {
+ return m_pVT->GetLineBeginPlace(place);
}
-CPVT_WordPlace CFX_Edit::GetLineEndPlace(const CPVT_WordPlace & place) const
-{
- return m_pVT->GetLineEndPlace(place);
+CPVT_WordPlace CFX_Edit::GetLineEndPlace(const CPVT_WordPlace& place) const {
+ return m_pVT->GetLineEndPlace(place);
}
-CPVT_WordPlace CFX_Edit::GetSectionBeginPlace(const CPVT_WordPlace & place) const
-{
- return m_pVT->GetSectionBeginPlace(place);
+CPVT_WordPlace CFX_Edit::GetSectionBeginPlace(
+ const CPVT_WordPlace& place) const {
+ return m_pVT->GetSectionBeginPlace(place);
}
-CPVT_WordPlace CFX_Edit::GetSectionEndPlace(const CPVT_WordPlace & place) const
-{
- return m_pVT->GetSectionEndPlace(place);
+CPVT_WordPlace CFX_Edit::GetSectionEndPlace(const CPVT_WordPlace& place) const {
+ return m_pVT->GetSectionEndPlace(place);
}
-FX_BOOL CFX_Edit::CanUndo() const
-{
- if (m_bEnableUndo)
- {
- return m_Undo.CanUndo();
- }
+FX_BOOL CFX_Edit::CanUndo() const {
+ if (m_bEnableUndo) {
+ return m_Undo.CanUndo();
+ }
- return FALSE;
+ return FALSE;
}
-FX_BOOL CFX_Edit::CanRedo() const
-{
- if (m_bEnableUndo)
- {
- return m_Undo.CanRedo();
- }
+FX_BOOL CFX_Edit::CanRedo() const {
+ if (m_bEnableUndo) {
+ return m_Undo.CanRedo();
+ }
- return FALSE;
+ return FALSE;
}
-FX_BOOL CFX_Edit::IsModified() const
-{
- if (m_bEnableUndo)
- {
- return m_Undo.IsModified();
- }
+FX_BOOL CFX_Edit::IsModified() const {
+ if (m_bEnableUndo) {
+ return m_Undo.IsModified();
+ }
- return FALSE;
+ return FALSE;
}
-void CFX_Edit::EnableRefresh(FX_BOOL bRefresh)
-{
- m_bEnableRefresh = bRefresh;
+void CFX_Edit::EnableRefresh(FX_BOOL bRefresh) {
+ m_bEnableRefresh = bRefresh;
}
-void CFX_Edit::EnableUndo(FX_BOOL bUndo)
-{
- m_bEnableUndo = bUndo;
+void CFX_Edit::EnableUndo(FX_BOOL bUndo) {
+ m_bEnableUndo = bUndo;
}
-void CFX_Edit::EnableNotify(FX_BOOL bNotify)
-{
- m_bNotify = bNotify;
+void CFX_Edit::EnableNotify(FX_BOOL bNotify) {
+ m_bNotify = bNotify;
}
-void CFX_Edit::EnableOprNotify(FX_BOOL bNotify)
-{
- m_bOprNotify = bNotify;
+void CFX_Edit::EnableOprNotify(FX_BOOL bNotify) {
+ m_bOprNotify = bNotify;
}
-FX_FLOAT CFX_Edit::GetLineTop(const CPVT_WordPlace& place) const
-{
- if (IPDF_VariableText_Iterator* pIterator = m_pVT->GetIterator())
- {
- CPVT_WordPlace wpOld = pIterator->GetAt();
+FX_FLOAT CFX_Edit::GetLineTop(const CPVT_WordPlace& place) const {
+ if (IPDF_VariableText_Iterator* pIterator = m_pVT->GetIterator()) {
+ CPVT_WordPlace wpOld = pIterator->GetAt();
- pIterator->SetAt(place);
- CPVT_Line line;
- pIterator->GetLine(line);
+ pIterator->SetAt(place);
+ CPVT_Line line;
+ pIterator->GetLine(line);
- pIterator->SetAt(wpOld);
+ pIterator->SetAt(wpOld);
- return line.ptLine.y + line.fLineAscent;
- }
+ return line.ptLine.y + line.fLineAscent;
+ }
- return 0.0f;
+ return 0.0f;
}
-FX_FLOAT CFX_Edit::GetLineBottom(const CPVT_WordPlace& place) const
-{
- if (IPDF_VariableText_Iterator* pIterator = m_pVT->GetIterator())
- {
- CPVT_WordPlace wpOld = pIterator->GetAt();
+FX_FLOAT CFX_Edit::GetLineBottom(const CPVT_WordPlace& place) const {
+ if (IPDF_VariableText_Iterator* pIterator = m_pVT->GetIterator()) {
+ CPVT_WordPlace wpOld = pIterator->GetAt();
- pIterator->SetAt(place);
- CPVT_Line line;
- pIterator->GetLine(line);
+ pIterator->SetAt(place);
+ CPVT_Line line;
+ pIterator->GetLine(line);
- pIterator->SetAt(wpOld);
+ pIterator->SetAt(wpOld);
- return line.ptLine.y + line.fLineDescent;
- }
+ return line.ptLine.y + line.fLineDescent;
+ }
- return 0.0f;
+ return 0.0f;
}
-CPVT_WordPlace CFX_Edit::DoInsertText(const CPVT_WordPlace& place, const FX_WCHAR* text, int32_t charset,
- const CPVT_SecProps * pSecProps, const CPVT_WordProps * pWordProps)
-{
- CPVT_WordPlace wp = place;
+CPVT_WordPlace CFX_Edit::DoInsertText(const CPVT_WordPlace& place,
+ const FX_WCHAR* text,
+ int32_t charset,
+ const CPVT_SecProps* pSecProps,
+ const CPVT_WordProps* pWordProps) {
+ CPVT_WordPlace wp = place;
- if (m_pVT->IsValid())
- {
- CFX_WideString sText = text;
+ if (m_pVT->IsValid()) {
+ CFX_WideString sText = text;
- for (int32_t i = 0, sz = sText.GetLength(); i < sz; i++)
- {
- FX_WORD word = sText[i];
- switch (word)
- {
- case 0x0D:
- wp = m_pVT->InsertSection(wp,pSecProps,pWordProps);
- if (sText[i+1] == 0x0A)
- i++;
- break;
- case 0x0A:
- wp = m_pVT->InsertSection(wp,pSecProps,pWordProps);
- if (sText[i+1] == 0x0D)
- i++;
- break;
- case 0x09:
- word = 0x20;
- default:
- wp = m_pVT->InsertWord(wp,word,GetCharSetFromUnicode(word, charset),pWordProps);
- break;
- }
- }
+ for (int32_t i = 0, sz = sText.GetLength(); i < sz; i++) {
+ FX_WORD word = sText[i];
+ switch (word) {
+ case 0x0D:
+ wp = m_pVT->InsertSection(wp, pSecProps, pWordProps);
+ if (sText[i + 1] == 0x0A)
+ i++;
+ break;
+ case 0x0A:
+ wp = m_pVT->InsertSection(wp, pSecProps, pWordProps);
+ if (sText[i + 1] == 0x0D)
+ i++;
+ break;
+ case 0x09:
+ word = 0x20;
+ default:
+ wp = m_pVT->InsertWord(wp, word, GetCharSetFromUnicode(word, charset),
+ pWordProps);
+ break;
+ }
}
+ }
- return wp;
+ return wp;
}
-int32_t CFX_Edit::GetCharSetFromUnicode(FX_WORD word, int32_t nOldCharset)
-{
- if (IFX_Edit_FontMap* pFontMap = GetFontMap())
- return pFontMap->CharSetFromUnicode(word, nOldCharset);
- return nOldCharset;
+int32_t CFX_Edit::GetCharSetFromUnicode(FX_WORD word, int32_t nOldCharset) {
+ if (IFX_Edit_FontMap* pFontMap = GetFontMap())
+ return pFontMap->CharSetFromUnicode(word, nOldCharset);
+ return nOldCharset;
}
-void CFX_Edit::BeginGroupUndo(const CFX_WideString& sTitle)
-{
- ASSERT(m_pGroupUndoItem == NULL);
+void CFX_Edit::BeginGroupUndo(const CFX_WideString& sTitle) {
+ ASSERT(m_pGroupUndoItem == NULL);
- m_pGroupUndoItem = new CFX_Edit_GroupUndoItem(sTitle);
+ m_pGroupUndoItem = new CFX_Edit_GroupUndoItem(sTitle);
}
-void CFX_Edit::EndGroupUndo()
-{
- ASSERT(m_pGroupUndoItem != NULL);
-
- m_pGroupUndoItem->UpdateItems();
- m_Undo.AddItem(m_pGroupUndoItem);
- if (m_bOprNotify && m_pOprNotify)
- m_pOprNotify->OnAddUndo(m_pGroupUndoItem);
- m_pGroupUndoItem = NULL;
-}
+void CFX_Edit::EndGroupUndo() {
+ ASSERT(m_pGroupUndoItem != NULL);
-void CFX_Edit::AddEditUndoItem(CFX_Edit_UndoItem* pEditUndoItem)
-{
- if (m_pGroupUndoItem)
- m_pGroupUndoItem->AddUndoItem(pEditUndoItem);
- else
- {
- m_Undo.AddItem(pEditUndoItem);
- if (m_bOprNotify && m_pOprNotify)
- m_pOprNotify->OnAddUndo(pEditUndoItem);
- }
+ m_pGroupUndoItem->UpdateItems();
+ m_Undo.AddItem(m_pGroupUndoItem);
+ if (m_bOprNotify && m_pOprNotify)
+ m_pOprNotify->OnAddUndo(m_pGroupUndoItem);
+ m_pGroupUndoItem = NULL;
}
-void CFX_Edit::AddUndoItem(IFX_Edit_UndoItem* pUndoItem)
-{
- m_Undo.AddItem(pUndoItem);
+void CFX_Edit::AddEditUndoItem(CFX_Edit_UndoItem* pEditUndoItem) {
+ if (m_pGroupUndoItem)
+ m_pGroupUndoItem->AddUndoItem(pEditUndoItem);
+ else {
+ m_Undo.AddItem(pEditUndoItem);
if (m_bOprNotify && m_pOprNotify)
- m_pOprNotify->OnAddUndo(pUndoItem);
+ m_pOprNotify->OnAddUndo(pEditUndoItem);
+ }
}
+void CFX_Edit::AddUndoItem(IFX_Edit_UndoItem* pUndoItem) {
+ m_Undo.AddItem(pUndoItem);
+ if (m_bOprNotify && m_pOprNotify)
+ m_pOprNotify->OnAddUndo(pUndoItem);
+}
diff --git a/fpdfsdk/src/fxedit/fxet_list.cpp b/fpdfsdk/src/fxedit/fxet_list.cpp
index d94cc16c86..70dc8d5262 100644
--- a/fpdfsdk/src/fxedit/fxet_list.cpp
+++ b/fpdfsdk/src/fxedit/fxet_list.cpp
@@ -8,1004 +8,829 @@
#include "../../include/fxedit/fxet_edit.h"
#include "../../include/fxedit/fxet_list.h"
-/* ------------------------------- CFX_ListItem ---------------------------------- */
+/* ------------------------------- CFX_ListItem
+ * ---------------------------------- */
-CFX_ListItem::CFX_ListItem() : m_pEdit(NULL),
- m_bSelected(FALSE),
- m_bCaret(FALSE),
- m_rcListItem(0.0f,0.0f,0.0f,0.0f)
-{
- m_pEdit = IFX_Edit::NewEdit();
- ASSERT(m_pEdit != NULL);
+CFX_ListItem::CFX_ListItem()
+ : m_pEdit(NULL),
+ m_bSelected(FALSE),
+ m_bCaret(FALSE),
+ m_rcListItem(0.0f, 0.0f, 0.0f, 0.0f) {
+ m_pEdit = IFX_Edit::NewEdit();
+ ASSERT(m_pEdit != NULL);
- m_pEdit->SetAlignmentV(1);
- m_pEdit->Initialize();
+ m_pEdit->SetAlignmentV(1);
+ m_pEdit->Initialize();
}
-CFX_ListItem::~CFX_ListItem()
-{
- IFX_Edit::DelEdit(m_pEdit);
+CFX_ListItem::~CFX_ListItem() {
+ IFX_Edit::DelEdit(m_pEdit);
}
-void CFX_ListItem::SetFontMap(IFX_Edit_FontMap * pFontMap)
-{
- if (m_pEdit)
- m_pEdit->SetFontMap(pFontMap);
+void CFX_ListItem::SetFontMap(IFX_Edit_FontMap* pFontMap) {
+ if (m_pEdit)
+ m_pEdit->SetFontMap(pFontMap);
}
-IFX_Edit* CFX_ListItem::GetEdit() const
-{
- return m_pEdit;
+IFX_Edit* CFX_ListItem::GetEdit() const {
+ return m_pEdit;
}
-IFX_Edit_Iterator* CFX_ListItem::GetIterator() const
-{
- if (m_pEdit)
- return m_pEdit->GetIterator();
+IFX_Edit_Iterator* CFX_ListItem::GetIterator() const {
+ if (m_pEdit)
+ return m_pEdit->GetIterator();
- return NULL;
+ return NULL;
}
-void CFX_ListItem::SetRect(const CLST_Rect & rect)
-{
- m_rcListItem = rect;
+void CFX_ListItem::SetRect(const CLST_Rect& rect) {
+ m_rcListItem = rect;
}
-CLST_Rect CFX_ListItem::GetRect() const
-{
- return m_rcListItem;
+CLST_Rect CFX_ListItem::GetRect() const {
+ return m_rcListItem;
}
-FX_BOOL CFX_ListItem::IsSelected() const
-{
- return m_bSelected;
+FX_BOOL CFX_ListItem::IsSelected() const {
+ return m_bSelected;
}
-void CFX_ListItem::SetSelect(FX_BOOL bSelected)
-{
- m_bSelected = bSelected;
+void CFX_ListItem::SetSelect(FX_BOOL bSelected) {
+ m_bSelected = bSelected;
}
-FX_BOOL CFX_ListItem::IsCaret() const
-{
- return m_bCaret;
+FX_BOOL CFX_ListItem::IsCaret() const {
+ return m_bCaret;
}
-void CFX_ListItem::SetCaret(FX_BOOL bCaret)
-{
- m_bCaret = bCaret;
+void CFX_ListItem::SetCaret(FX_BOOL bCaret) {
+ m_bCaret = bCaret;
}
-void CFX_ListItem::SetText(const FX_WCHAR* text)
-{
- if (m_pEdit)
- m_pEdit->SetText(text);
+void CFX_ListItem::SetText(const FX_WCHAR* text) {
+ if (m_pEdit)
+ m_pEdit->SetText(text);
}
-void CFX_ListItem::SetFontSize(FX_FLOAT fFontSize)
-{
- if (m_pEdit)
- m_pEdit->SetFontSize(fFontSize);
+void CFX_ListItem::SetFontSize(FX_FLOAT fFontSize) {
+ if (m_pEdit)
+ m_pEdit->SetFontSize(fFontSize);
}
-FX_FLOAT CFX_ListItem::GetItemHeight() const
-{
- if (m_pEdit)
- return m_pEdit->GetContentRect().Height();
+FX_FLOAT CFX_ListItem::GetItemHeight() const {
+ if (m_pEdit)
+ return m_pEdit->GetContentRect().Height();
- return 0.0f;
+ return 0.0f;
}
-FX_WORD CFX_ListItem::GetFirstChar() const
-{
- CPVT_Word word;
+FX_WORD CFX_ListItem::GetFirstChar() const {
+ CPVT_Word word;
- if (IFX_Edit_Iterator* pIterator = GetIterator())
- {
- pIterator->SetAt(1);
- pIterator->GetWord(word);
- }
+ if (IFX_Edit_Iterator* pIterator = GetIterator()) {
+ pIterator->SetAt(1);
+ pIterator->GetWord(word);
+ }
- return word.Word;
+ return word.Word;
}
-CFX_WideString CFX_ListItem::GetText() const
-{
- if (m_pEdit)
- return m_pEdit->GetText();
+CFX_WideString CFX_ListItem::GetText() const {
+ if (m_pEdit)
+ return m_pEdit->GetText();
- return L"";
+ return L"";
}
-/* ------------------------------------ CFX_List --------------------------------- */
+/* ------------------------------------ CFX_List
+ * --------------------------------- */
-CFX_List::CFX_List() : m_fFontSize(0.0f), m_pFontMap(NULL), m_bMultiple(FALSE)
-{
+CFX_List::CFX_List()
+ : m_fFontSize(0.0f), m_pFontMap(NULL), m_bMultiple(FALSE) {}
+
+CFX_List::~CFX_List() {
+ Empty();
}
-CFX_List::~CFX_List()
-{
- Empty();
+void CFX_List::Empty() {
+ for (int32_t i = 0, sz = m_aListItems.GetSize(); i < sz; i++)
+ delete m_aListItems.GetAt(i);
+
+ m_aListItems.RemoveAll();
}
-void CFX_List::Empty()
-{
- for (int32_t i=0,sz=m_aListItems.GetSize(); i<sz; i++)
- delete m_aListItems.GetAt(i);
+void CFX_List::SetFontMap(IFX_Edit_FontMap* pFontMap) {
+ m_pFontMap = pFontMap;
+}
- m_aListItems.RemoveAll();
+void CFX_List::SetFontSize(FX_FLOAT fFontSize) {
+ m_fFontSize = fFontSize;
}
-void CFX_List::SetFontMap(IFX_Edit_FontMap * pFontMap)
-{
- m_pFontMap = pFontMap;
+void CFX_List::AddItem(const FX_WCHAR* str) {
+ if (CFX_ListItem* pListItem = new CFX_ListItem()) {
+ pListItem->SetFontMap(m_pFontMap);
+ pListItem->SetFontSize(m_fFontSize);
+ pListItem->SetText(str);
+ m_aListItems.Add(pListItem);
+ }
}
-void CFX_List::SetFontSize(FX_FLOAT fFontSize)
-{
- m_fFontSize = fFontSize;
+void CFX_List::ReArrange(int32_t nItemIndex) {
+ FX_FLOAT fPosY = 0.0f;
+
+ if (CFX_ListItem* pPrevItem = m_aListItems.GetAt(nItemIndex - 1))
+ fPosY = pPrevItem->GetRect().bottom;
+
+ for (int32_t i = nItemIndex, sz = m_aListItems.GetSize(); i < sz; i++) {
+ if (CFX_ListItem* pListItem = m_aListItems.GetAt(i)) {
+ FX_FLOAT fListItemHeight = pListItem->GetItemHeight();
+ pListItem->SetRect(CLST_Rect(0.0f, fPosY, 0.0f, fPosY + fListItemHeight));
+ fPosY += fListItemHeight;
+ }
+ }
+
+ SetContentRect(CLST_Rect(0.0f, 0.0f, 0.0f, fPosY));
}
-void CFX_List::AddItem(const FX_WCHAR* str)
-{
- if (CFX_ListItem * pListItem = new CFX_ListItem())
- {
- pListItem->SetFontMap(m_pFontMap);
- pListItem->SetFontSize(m_fFontSize);
- pListItem->SetText(str);
- m_aListItems.Add(pListItem);
- }
+IFX_Edit* CFX_List::GetItemEdit(int32_t nIndex) const {
+ if (CFX_ListItem* pListItem = m_aListItems.GetAt(nIndex)) {
+ return pListItem->GetEdit();
+ }
+
+ return NULL;
}
-void CFX_List::ReArrange(int32_t nItemIndex)
-{
- FX_FLOAT fPosY = 0.0f;
+int32_t CFX_List::GetCount() const {
+ return m_aListItems.GetSize();
+}
- if (CFX_ListItem * pPrevItem = m_aListItems.GetAt(nItemIndex - 1))
- fPosY = pPrevItem->GetRect().bottom;
+CPDF_Rect CFX_List::GetPlateRect() const {
+ return CFX_ListContainer::GetPlateRect();
+}
- for (int32_t i=nItemIndex,sz=m_aListItems.GetSize(); i<sz; i++)
- {
- if (CFX_ListItem * pListItem = m_aListItems.GetAt(i))
- {
- FX_FLOAT fListItemHeight = pListItem->GetItemHeight();
- pListItem->SetRect(CLST_Rect(0.0f,fPosY,0.0f,fPosY + fListItemHeight));
- fPosY += fListItemHeight;
- }
- }
+CPDF_Rect CFX_List::GetContentRect() const {
+ return InnerToOuter(CFX_ListContainer::GetContentRect());
+}
- SetContentRect(CLST_Rect(0.0f,0.0f,0.0f,fPosY));
+FX_FLOAT CFX_List::GetFontSize() const {
+ return m_fFontSize;
}
-IFX_Edit * CFX_List::GetItemEdit(int32_t nIndex) const
-{
- if (CFX_ListItem * pListItem = m_aListItems.GetAt(nIndex))
- {
- return pListItem->GetEdit();
- }
+int32_t CFX_List::GetItemIndex(const CPDF_Point& point) const {
+ CPDF_Point pt = OuterToInner(point);
+
+ FX_BOOL bFirst = TRUE;
+ FX_BOOL bLast = TRUE;
- return NULL;
+ for (int32_t i = 0, sz = m_aListItems.GetSize(); i < sz; i++) {
+ if (CFX_ListItem* pListItem = m_aListItems.GetAt(i)) {
+ CLST_Rect rcListItem = pListItem->GetRect();
+
+ if (FX_EDIT_IsFloatBigger(pt.y, rcListItem.top)) {
+ bFirst = FALSE;
+ }
+
+ if (FX_EDIT_IsFloatSmaller(pt.y, rcListItem.bottom)) {
+ bLast = FALSE;
+ }
+
+ if (pt.y >= rcListItem.top && pt.y < rcListItem.bottom) {
+ return i;
+ }
+ }
+ }
+
+ if (bFirst)
+ return 0;
+ if (bLast)
+ return m_aListItems.GetSize() - 1;
+
+ return -1;
}
-int32_t CFX_List::GetCount() const
-{
- return m_aListItems.GetSize();
+FX_FLOAT CFX_List::GetFirstHeight() const {
+ if (CFX_ListItem* pListItem = m_aListItems.GetAt(0)) {
+ return pListItem->GetItemHeight();
+ }
+
+ return 1.0f;
}
-CPDF_Rect CFX_List::GetPlateRect() const
-{
- return CFX_ListContainer::GetPlateRect();
+int32_t CFX_List::GetFirstSelected() const {
+ for (int32_t i = 0, sz = m_aListItems.GetSize(); i < sz; i++) {
+ if (CFX_ListItem* pListItem = m_aListItems.GetAt(i)) {
+ if (pListItem->IsSelected())
+ return i;
+ }
+ }
+ return -1;
}
-CPDF_Rect CFX_List::GetContentRect() const
-{
- return InnerToOuter(CFX_ListContainer::GetContentRect());
+int32_t CFX_List::GetLastSelected() const {
+ for (int32_t i = m_aListItems.GetSize() - 1; i >= 0; i--) {
+ if (CFX_ListItem* pListItem = m_aListItems.GetAt(i)) {
+ if (pListItem->IsSelected())
+ return i;
+ }
+ }
+ return -1;
}
-FX_FLOAT CFX_List::GetFontSize() const
-{
- return m_fFontSize;
+FX_WCHAR CFX_List::Toupper(FX_WCHAR c) const {
+ if ((c >= 'a') && (c <= 'z'))
+ c = c - ('a' - 'A');
+ return c;
}
-int32_t CFX_List::GetItemIndex(const CPDF_Point & point) const
-{
- CPDF_Point pt = OuterToInner(point);
+int32_t CFX_List::FindNext(int32_t nIndex, FX_WCHAR nChar) const {
+ int32_t nCircleIndex = nIndex;
- FX_BOOL bFirst = TRUE;
- FX_BOOL bLast = TRUE;
+ for (int32_t i = 0, sz = m_aListItems.GetSize(); i < sz; i++) {
+ nCircleIndex++;
+ if (nCircleIndex >= sz)
+ nCircleIndex = 0;
- for (int32_t i=0,sz=m_aListItems.GetSize(); i<sz; i++)
- {
- if (CFX_ListItem * pListItem = m_aListItems.GetAt(i))
- {
- CLST_Rect rcListItem = pListItem->GetRect();
+ if (CFX_ListItem* pListItem = m_aListItems.GetAt(nCircleIndex)) {
+ if (Toupper(pListItem->GetFirstChar()) == Toupper(nChar))
+ return nCircleIndex;
+ }
+ }
- if (FX_EDIT_IsFloatBigger(pt.y, rcListItem.top))
- {
- bFirst = FALSE;
- }
+ return nCircleIndex;
+}
- if (FX_EDIT_IsFloatSmaller(pt.y, rcListItem.bottom))
- {
- bLast = FALSE;
- }
+CPDF_Rect CFX_List::GetItemRect(int32_t nIndex) const {
+ if (CFX_ListItem* pListItem = m_aListItems.GetAt(nIndex)) {
+ CPDF_Rect rcItem = pListItem->GetRect();
+ rcItem.left = 0.0f;
+ rcItem.right = GetPlateRect().Width();
+ return InnerToOuter(rcItem);
+ }
- if (pt.y >= rcListItem.top && pt.y < rcListItem.bottom)
- {
- return i;
- }
- }
- }
+ return CPDF_Rect();
+}
- if (bFirst) return 0;
- if (bLast) return m_aListItems.GetSize()-1;
+FX_BOOL CFX_List::IsItemSelected(int32_t nIndex) const {
+ if (CFX_ListItem* pListItem = m_aListItems.GetAt(nIndex)) {
+ return pListItem->IsSelected();
+ }
+
+ return FALSE;
+}
- return -1;
+void CFX_List::SetItemSelect(int32_t nItemIndex, FX_BOOL bSelected) {
+ if (CFX_ListItem* pListItem = m_aListItems.GetAt(nItemIndex)) {
+ pListItem->SetSelect(bSelected);
+ }
}
-FX_FLOAT CFX_List::GetFirstHeight() const
-{
- if (CFX_ListItem * pListItem = m_aListItems.GetAt(0))
- {
- return pListItem->GetItemHeight();
- }
+void CFX_List::SetItemCaret(int32_t nItemIndex, FX_BOOL bCaret) {
+ if (CFX_ListItem* pListItem = m_aListItems.GetAt(nItemIndex)) {
+ pListItem->SetCaret(bCaret);
+ }
+}
- return 1.0f;
+void CFX_List::SetMultipleSel(FX_BOOL bMultiple) {
+ m_bMultiple = bMultiple;
}
-int32_t CFX_List::GetFirstSelected() const
-{
- for (int32_t i=0,sz=m_aListItems.GetSize(); i<sz; i++)
- {
- if (CFX_ListItem * pListItem = m_aListItems.GetAt(i))
- {
- if (pListItem->IsSelected())
- return i;
- }
- }
- return -1;
+FX_BOOL CFX_List::IsMultipleSel() const {
+ return m_bMultiple;
}
-int32_t CFX_List::GetLastSelected() const
-{
- for (int32_t i=m_aListItems.GetSize()-1; i>=0; i--)
- {
- if (CFX_ListItem * pListItem = m_aListItems.GetAt(i))
- {
- if (pListItem->IsSelected())
- return i;
- }
- }
- return -1;
+FX_BOOL CFX_List::IsValid(int32_t nItemIndex) const {
+ return nItemIndex >= 0 && nItemIndex < m_aListItems.GetSize();
}
-FX_WCHAR CFX_List::Toupper(FX_WCHAR c) const
-{
- if ( (c >= 'a') && (c <= 'z') )
- c = c - ('a' - 'A');
- return c;
+CFX_WideString CFX_List::GetItemText(int32_t nIndex) const {
+ if (CFX_ListItem* pListItem = m_aListItems.GetAt(nIndex)) {
+ return pListItem->GetText();
+ }
+
+ return L"";
}
-int32_t CFX_List::FindNext(int32_t nIndex,FX_WCHAR nChar) const
-{
- int32_t nCircleIndex = nIndex;
+/* ------------------------------------ CPLST_Select
+ * ---------------------------------- */
- for (int32_t i=0,sz=m_aListItems.GetSize(); i<sz; i++)
- {
- nCircleIndex ++;
- if (nCircleIndex >= sz) nCircleIndex = 0;
+CPLST_Select::CPLST_Select() {}
- if (CFX_ListItem * pListItem = m_aListItems.GetAt(nCircleIndex))
- {
- if (Toupper(pListItem->GetFirstChar()) == Toupper(nChar))
- return nCircleIndex;
- }
- }
+CPLST_Select::~CPLST_Select() {
+ for (int32_t i = 0, sz = m_aItems.GetSize(); i < sz; i++)
+ delete m_aItems.GetAt(i);
- return nCircleIndex;
+ m_aItems.RemoveAll();
}
-CPDF_Rect CFX_List::GetItemRect(int32_t nIndex) const
-{
- if (CFX_ListItem * pListItem = m_aListItems.GetAt(nIndex))
- {
- CPDF_Rect rcItem = pListItem->GetRect();
- rcItem.left = 0.0f;
- rcItem.right = GetPlateRect().Width();
- return InnerToOuter(rcItem);
- }
+void CPLST_Select::Add(int32_t nItemIndex) {
+ int32_t nIndex = Find(nItemIndex);
- return CPDF_Rect();
+ if (nIndex < 0)
+ m_aItems.Add(new CPLST_Select_Item(nItemIndex, 1));
+ else {
+ if (CPLST_Select_Item* pItem = m_aItems.GetAt(nIndex)) {
+ pItem->nState = 1;
+ }
+ }
}
-FX_BOOL CFX_List::IsItemSelected(int32_t nIndex) const
-{
- if (CFX_ListItem * pListItem = m_aListItems.GetAt(nIndex))
- {
- return pListItem->IsSelected();
- }
+void CPLST_Select::Add(int32_t nBeginIndex, int32_t nEndIndex) {
+ if (nBeginIndex > nEndIndex) {
+ int32_t nTemp = nEndIndex;
+ nEndIndex = nBeginIndex;
+ nBeginIndex = nTemp;
+ }
- return FALSE;
+ for (int32_t i = nBeginIndex; i <= nEndIndex; i++)
+ Add(i);
}
-void CFX_List::SetItemSelect(int32_t nItemIndex, FX_BOOL bSelected)
-{
- if (CFX_ListItem * pListItem = m_aListItems.GetAt(nItemIndex))
- {
- pListItem->SetSelect(bSelected);
- }
+void CPLST_Select::Sub(int32_t nItemIndex) {
+ for (int32_t i = m_aItems.GetSize() - 1; i >= 0; i--) {
+ if (CPLST_Select_Item* pItem = m_aItems.GetAt(i))
+ if (pItem->nItemIndex == nItemIndex)
+ pItem->nState = -1;
+ }
}
-void CFX_List::SetItemCaret(int32_t nItemIndex, FX_BOOL bCaret)
-{
- if (CFX_ListItem * pListItem = m_aListItems.GetAt(nItemIndex))
- {
- pListItem->SetCaret(bCaret);
- }
+void CPLST_Select::Sub(int32_t nBeginIndex, int32_t nEndIndex) {
+ if (nBeginIndex > nEndIndex) {
+ int32_t nTemp = nEndIndex;
+ nEndIndex = nBeginIndex;
+ nBeginIndex = nTemp;
+ }
+
+ for (int32_t i = nBeginIndex; i <= nEndIndex; i++)
+ Sub(i);
}
-void CFX_List::SetMultipleSel(FX_BOOL bMultiple)
-{
- m_bMultiple = bMultiple;
+int32_t CPLST_Select::Find(int32_t nItemIndex) const {
+ for (int32_t i = 0, sz = m_aItems.GetSize(); i < sz; i++) {
+ if (CPLST_Select_Item* pItem = m_aItems.GetAt(i)) {
+ if (pItem->nItemIndex == nItemIndex)
+ return i;
+ }
+ }
+
+ return -1;
}
-FX_BOOL CFX_List::IsMultipleSel() const
-{
- return m_bMultiple;
+FX_BOOL CPLST_Select::IsExist(int32_t nItemIndex) const {
+ return Find(nItemIndex) >= 0;
}
-FX_BOOL CFX_List::IsValid(int32_t nItemIndex) const
-{
- return nItemIndex >= 0 && nItemIndex < m_aListItems.GetSize();
+int32_t CPLST_Select::GetCount() const {
+ return m_aItems.GetSize();
}
-CFX_WideString CFX_List::GetItemText(int32_t nIndex) const
-{
- if (CFX_ListItem * pListItem = m_aListItems.GetAt(nIndex))
- {
- return pListItem->GetText();
- }
+int32_t CPLST_Select::GetItemIndex(int32_t nIndex) const {
+ if (nIndex >= 0 && nIndex < m_aItems.GetSize())
+ if (CPLST_Select_Item* pItem = m_aItems.GetAt(nIndex))
+ return pItem->nItemIndex;
- return L"";
+ return -1;
}
-/* ------------------------------------ CPLST_Select ---------------------------------- */
+int32_t CPLST_Select::GetState(int32_t nIndex) const {
+ if (nIndex >= 0 && nIndex < m_aItems.GetSize())
+ if (CPLST_Select_Item* pItem = m_aItems.GetAt(nIndex))
+ return pItem->nState;
-CPLST_Select::CPLST_Select()
-{
+ return 0;
}
-CPLST_Select::~CPLST_Select()
-{
- for (int32_t i=0,sz=m_aItems.GetSize(); i<sz; i++)
- delete m_aItems.GetAt(i);
+void CPLST_Select::DeselectAll() {
+ for (int32_t i = 0, sz = m_aItems.GetSize(); i < sz; i++) {
+ if (CPLST_Select_Item* pItem = m_aItems.GetAt(i)) {
+ pItem->nState = -1;
+ }
+ }
+}
- m_aItems.RemoveAll();
+void CPLST_Select::Done() {
+ for (int32_t i = m_aItems.GetSize() - 1; i >= 0; i--) {
+ if (CPLST_Select_Item* pItem = m_aItems.GetAt(i)) {
+ if (pItem->nState == -1) {
+ delete pItem;
+ m_aItems.RemoveAt(i);
+ } else {
+ pItem->nState = 0;
+ }
+ }
+ }
}
-void CPLST_Select::Add(int32_t nItemIndex)
-{
- int32_t nIndex = Find(nItemIndex);
+/* ------------------------------------ CFX_ListCtrl
+ * --------------------------------- */
+
+CFX_ListCtrl::CFX_ListCtrl()
+ : m_pNotify(NULL),
+ m_bNotifyFlag(FALSE),
+ m_ptScrollPos(0.0f, 0.0f),
+ m_nSelItem(-1),
+ m_nFootIndex(-1),
+ m_bCtrlSel(FALSE),
+ m_nCaretIndex(-1) {}
- if (nIndex < 0)
- m_aItems.Add(new CPLST_Select_Item(nItemIndex,1));
- else
- {
- if (CPLST_Select_Item * pItem = m_aItems.GetAt(nIndex))
- {
- pItem->nState = 1;
- }
- }
+CFX_ListCtrl::~CFX_ListCtrl() {}
+
+void CFX_ListCtrl::SetNotify(IFX_List_Notify* pNotify) {
+ m_pNotify = pNotify;
}
-void CPLST_Select::Add(int32_t nBeginIndex, int32_t nEndIndex)
-{
- if (nBeginIndex > nEndIndex)
- {
- int32_t nTemp = nEndIndex;
- nEndIndex = nBeginIndex;
- nBeginIndex = nTemp;
- }
+CPDF_Point CFX_ListCtrl::InToOut(const CPDF_Point& point) const {
+ CPDF_Rect rcPlate = GetPlateRect();
- for (int32_t i=nBeginIndex; i<=nEndIndex; i++) Add(i);
+ return CPDF_Point(point.x - (m_ptScrollPos.x - rcPlate.left),
+ point.y - (m_ptScrollPos.y - rcPlate.top));
}
-void CPLST_Select::Sub(int32_t nItemIndex)
-{
- for (int32_t i=m_aItems.GetSize()-1; i>=0; i--)
- {
- if (CPLST_Select_Item * pItem = m_aItems.GetAt(i))
- if (pItem->nItemIndex == nItemIndex)
- pItem->nState = -1;
- }
+CPDF_Point CFX_ListCtrl::OutToIn(const CPDF_Point& point) const {
+ CPDF_Rect rcPlate = GetPlateRect();
+
+ return CPDF_Point(point.x + (m_ptScrollPos.x - rcPlate.left),
+ point.y + (m_ptScrollPos.y - rcPlate.top));
}
-void CPLST_Select::Sub(int32_t nBeginIndex, int32_t nEndIndex)
-{
- if (nBeginIndex > nEndIndex)
- {
- int32_t nTemp = nEndIndex;
- nEndIndex = nBeginIndex;
- nBeginIndex = nTemp;
- }
+CPDF_Rect CFX_ListCtrl::InToOut(const CPDF_Rect& rect) const {
+ CPDF_Point ptLeftBottom = InToOut(CPDF_Point(rect.left, rect.bottom));
+ CPDF_Point ptRightTop = InToOut(CPDF_Point(rect.right, rect.top));
- for (int32_t i=nBeginIndex; i<=nEndIndex; i++) Sub(i);
+ return CPDF_Rect(ptLeftBottom.x, ptLeftBottom.y, ptRightTop.x, ptRightTop.y);
}
-int32_t CPLST_Select::Find(int32_t nItemIndex) const
-{
- for (int32_t i=0,sz=m_aItems.GetSize(); i<sz; i++)
- {
- if (CPLST_Select_Item * pItem = m_aItems.GetAt(i))
- {
- if (pItem->nItemIndex == nItemIndex)
- return i;
- }
- }
+CPDF_Rect CFX_ListCtrl::OutToIn(const CPDF_Rect& rect) const {
+ CPDF_Point ptLeftBottom = OutToIn(CPDF_Point(rect.left, rect.bottom));
+ CPDF_Point ptRightTop = OutToIn(CPDF_Point(rect.right, rect.top));
- return -1;
+ return CPDF_Rect(ptLeftBottom.x, ptLeftBottom.y, ptRightTop.x, ptRightTop.y);
}
-FX_BOOL CPLST_Select::IsExist(int32_t nItemIndex) const
-{
- return Find(nItemIndex) >= 0;
+void CFX_ListCtrl::OnMouseDown(const CPDF_Point& point,
+ FX_BOOL bShift,
+ FX_BOOL bCtrl) {
+ int32_t nHitIndex = GetItemIndex(point);
+
+ if (IsMultipleSel()) {
+ if (bCtrl) {
+ if (IsItemSelected(nHitIndex)) {
+ m_aSelItems.Sub(nHitIndex);
+ SelectItems();
+ m_bCtrlSel = FALSE;
+ } else {
+ m_aSelItems.Add(nHitIndex);
+ SelectItems();
+ m_bCtrlSel = TRUE;
+ }
+
+ m_nFootIndex = nHitIndex;
+ } else if (bShift) {
+ m_aSelItems.DeselectAll();
+ m_aSelItems.Add(m_nFootIndex, nHitIndex);
+ SelectItems();
+ } else {
+ m_aSelItems.DeselectAll();
+ m_aSelItems.Add(nHitIndex);
+ SelectItems();
+
+ m_nFootIndex = nHitIndex;
+ }
+
+ SetCaret(nHitIndex);
+ } else {
+ SetSingleSelect(nHitIndex);
+ }
+
+ if (!IsItemVisible(nHitIndex))
+ ScrollToListItem(nHitIndex);
}
-int32_t CPLST_Select::GetCount() const
-{
- return m_aItems.GetSize();
+void CFX_ListCtrl::OnMouseMove(const CPDF_Point& point,
+ FX_BOOL bShift,
+ FX_BOOL bCtrl) {
+ int32_t nHitIndex = GetItemIndex(point);
+
+ if (IsMultipleSel()) {
+ if (bCtrl) {
+ if (m_bCtrlSel)
+ m_aSelItems.Add(m_nFootIndex, nHitIndex);
+ else
+ m_aSelItems.Sub(m_nFootIndex, nHitIndex);
+
+ SelectItems();
+ } else {
+ m_aSelItems.DeselectAll();
+ m_aSelItems.Add(m_nFootIndex, nHitIndex);
+ SelectItems();
+ }
+
+ SetCaret(nHitIndex);
+ } else {
+ SetSingleSelect(nHitIndex);
+ }
+
+ if (!IsItemVisible(nHitIndex))
+ ScrollToListItem(nHitIndex);
}
-int32_t CPLST_Select::GetItemIndex(int32_t nIndex) const
-{
- if (nIndex >= 0 && nIndex < m_aItems.GetSize())
- if (CPLST_Select_Item * pItem = m_aItems.GetAt(nIndex))
- return pItem->nItemIndex;
+void CFX_ListCtrl::OnVK(int32_t nItemIndex, FX_BOOL bShift, FX_BOOL bCtrl) {
+ if (IsMultipleSel()) {
+ if (nItemIndex >= 0 && nItemIndex < GetCount()) {
+ if (bCtrl) {
+ } else if (bShift) {
+ m_aSelItems.DeselectAll();
+ m_aSelItems.Add(m_nFootIndex, nItemIndex);
+ SelectItems();
+ } else {
+ m_aSelItems.DeselectAll();
+ m_aSelItems.Add(nItemIndex);
+ SelectItems();
+ m_nFootIndex = nItemIndex;
+ }
+
+ SetCaret(nItemIndex);
+ }
+ } else {
+ SetSingleSelect(nItemIndex);
+ }
- return -1;
+ if (!IsItemVisible(nItemIndex))
+ ScrollToListItem(nItemIndex);
}
-int32_t CPLST_Select::GetState(int32_t nIndex) const
-{
- if (nIndex >= 0 && nIndex < m_aItems.GetSize())
- if (CPLST_Select_Item * pItem = m_aItems.GetAt(nIndex))
- return pItem->nState;
+void CFX_ListCtrl::OnVK_UP(FX_BOOL bShift, FX_BOOL bCtrl) {
+ OnVK(IsMultipleSel() ? GetCaret() - 1 : GetSelect() - 1, bShift, bCtrl);
+}
- return 0;
+void CFX_ListCtrl::OnVK_DOWN(FX_BOOL bShift, FX_BOOL bCtrl) {
+ OnVK(IsMultipleSel() ? GetCaret() + 1 : GetSelect() + 1, bShift, bCtrl);
}
-void CPLST_Select::DeselectAll()
-{
- for (int32_t i=0,sz=m_aItems.GetSize(); i<sz; i++)
- {
- if (CPLST_Select_Item * pItem = m_aItems.GetAt(i))
- {
- pItem->nState = -1;
- }
- }
-}
-
-void CPLST_Select::Done()
-{
- for (int32_t i=m_aItems.GetSize()-1; i>=0; i--)
- {
- if (CPLST_Select_Item * pItem = m_aItems.GetAt(i))
- {
- if (pItem->nState == -1)
- {
- delete pItem;
- m_aItems.RemoveAt(i);
- }
- else
- {
- pItem->nState = 0;
- }
- }
- }
-}
-
-/* ------------------------------------ CFX_ListCtrl --------------------------------- */
+void CFX_ListCtrl::OnVK_LEFT(FX_BOOL bShift, FX_BOOL bCtrl) {
+ OnVK(0, bShift, bCtrl);
+}
-CFX_ListCtrl::CFX_ListCtrl() : m_pNotify(NULL),
- m_bNotifyFlag(FALSE),
- m_ptScrollPos(0.0f,0.0f),
- m_nSelItem(-1),
- m_nFootIndex(-1),
- m_bCtrlSel(FALSE),
- m_nCaretIndex(-1)
-{
-}
-
-CFX_ListCtrl::~CFX_ListCtrl()
-{
+void CFX_ListCtrl::OnVK_RIGHT(FX_BOOL bShift, FX_BOOL bCtrl) {
+ OnVK(GetCount() - 1, bShift, bCtrl);
}
-
-void CFX_ListCtrl::SetNotify(IFX_List_Notify * pNotify)
-{
- m_pNotify = pNotify;
-}
-
-CPDF_Point CFX_ListCtrl::InToOut(const CPDF_Point & point) const
-{
- CPDF_Rect rcPlate = GetPlateRect();
-
- return CPDF_Point(point.x - (m_ptScrollPos.x - rcPlate.left),
- point.y - (m_ptScrollPos.y - rcPlate.top));
-}
-
-CPDF_Point CFX_ListCtrl::OutToIn(const CPDF_Point & point) const
-{
- CPDF_Rect rcPlate = GetPlateRect();
-
- return CPDF_Point(point.x + (m_ptScrollPos.x - rcPlate.left),
- point.y + (m_ptScrollPos.y - rcPlate.top));
-}
-
-CPDF_Rect CFX_ListCtrl::InToOut(const CPDF_Rect & rect) const
-{
- CPDF_Point ptLeftBottom = InToOut(CPDF_Point(rect.left,rect.bottom));
- CPDF_Point ptRightTop = InToOut(CPDF_Point(rect.right,rect.top));
-
- return CPDF_Rect(ptLeftBottom.x,ptLeftBottom.y,ptRightTop.x,ptRightTop.y);
-}
-
-CPDF_Rect CFX_ListCtrl::OutToIn(const CPDF_Rect & rect) const
-{
- CPDF_Point ptLeftBottom = OutToIn(CPDF_Point(rect.left,rect.bottom));
- CPDF_Point ptRightTop = OutToIn(CPDF_Point(rect.right,rect.top));
-
- return CPDF_Rect(ptLeftBottom.x,ptLeftBottom.y,ptRightTop.x,ptRightTop.y);
-}
-
-void CFX_ListCtrl::OnMouseDown(const CPDF_Point & point,FX_BOOL bShift,FX_BOOL bCtrl)
-{
- int32_t nHitIndex = GetItemIndex(point);
-
- if (IsMultipleSel())
- {
- if (bCtrl)
- {
- if (IsItemSelected(nHitIndex))
- {
- m_aSelItems.Sub(nHitIndex);
- SelectItems();
- m_bCtrlSel = FALSE;
- }
- else
- {
- m_aSelItems.Add(nHitIndex);
- SelectItems();
- m_bCtrlSel = TRUE;
- }
-
- m_nFootIndex = nHitIndex;
- }
- else if (bShift)
- {
- m_aSelItems.DeselectAll();
- m_aSelItems.Add(m_nFootIndex,nHitIndex);
- SelectItems();
- }
- else
- {
- m_aSelItems.DeselectAll();
- m_aSelItems.Add(nHitIndex);
- SelectItems();
-
- m_nFootIndex = nHitIndex;
- }
-
- SetCaret(nHitIndex);
- }
- else
- {
- SetSingleSelect(nHitIndex);
- }
-
- if (!IsItemVisible(nHitIndex))
- ScrollToListItem(nHitIndex);
-}
-
-void CFX_ListCtrl::OnMouseMove(const CPDF_Point & point,FX_BOOL bShift,FX_BOOL bCtrl)
-{
- int32_t nHitIndex = GetItemIndex(point);
-
- if (IsMultipleSel())
- {
- if (bCtrl)
- {
- if (m_bCtrlSel)
- m_aSelItems.Add(m_nFootIndex,nHitIndex);
- else
- m_aSelItems.Sub(m_nFootIndex,nHitIndex);
-
- SelectItems();
- }
- else
- {
- m_aSelItems.DeselectAll();
- m_aSelItems.Add(m_nFootIndex,nHitIndex);
- SelectItems();
- }
-
- SetCaret(nHitIndex);
- }
- else
- {
- SetSingleSelect(nHitIndex);
- }
-
- if (!IsItemVisible(nHitIndex))
- ScrollToListItem(nHitIndex);
-}
-
-void CFX_ListCtrl::OnVK(int32_t nItemIndex,FX_BOOL bShift,FX_BOOL bCtrl)
-{
- if (IsMultipleSel())
- {
- if (nItemIndex >= 0 && nItemIndex < GetCount())
- {
- if (bCtrl)
- {
- }
- else if (bShift)
- {
- m_aSelItems.DeselectAll();
- m_aSelItems.Add(m_nFootIndex,nItemIndex);
- SelectItems();
- }
- else
- {
- m_aSelItems.DeselectAll();
- m_aSelItems.Add(nItemIndex);
- SelectItems();
- m_nFootIndex = nItemIndex;
- }
-
- SetCaret(nItemIndex);
- }
- }
- else
- {
- SetSingleSelect(nItemIndex);
- }
-
- if (!IsItemVisible(nItemIndex))
- ScrollToListItem(nItemIndex);
-}
-
-void CFX_ListCtrl::OnVK_UP(FX_BOOL bShift,FX_BOOL bCtrl)
-{
- OnVK(IsMultipleSel() ? GetCaret()-1 : GetSelect()-1, bShift, bCtrl);
-}
-
-void CFX_ListCtrl::OnVK_DOWN(FX_BOOL bShift,FX_BOOL bCtrl)
-{
- OnVK(IsMultipleSel() ? GetCaret()+1 : GetSelect()+1, bShift, bCtrl);
-}
-
-void CFX_ListCtrl::OnVK_LEFT(FX_BOOL bShift,FX_BOOL bCtrl)
-{
- OnVK(0, bShift, bCtrl);
-}
-
-void CFX_ListCtrl::OnVK_RIGHT(FX_BOOL bShift,FX_BOOL bCtrl)
-{
- OnVK(GetCount()-1, bShift, bCtrl);
-}
-
-void CFX_ListCtrl::OnVK_HOME(FX_BOOL bShift,FX_BOOL bCtrl)
-{
- OnVK(0, bShift, bCtrl);
-}
-
-void CFX_ListCtrl::OnVK_END(FX_BOOL bShift,FX_BOOL bCtrl)
-{
- OnVK(GetCount()-1, bShift, bCtrl);
-}
-
-FX_BOOL CFX_ListCtrl::OnChar(FX_WORD nChar,FX_BOOL bShift,FX_BOOL bCtrl)
-{
- int32_t nIndex = GetLastSelected();
- int32_t nFindIndex = FindNext(nIndex,nChar);
-
- if (nFindIndex != nIndex)
- {
- OnVK(nFindIndex, bShift, bCtrl);
- return TRUE;
- }
- return FALSE;
+
+void CFX_ListCtrl::OnVK_HOME(FX_BOOL bShift, FX_BOOL bCtrl) {
+ OnVK(0, bShift, bCtrl);
+}
+
+void CFX_ListCtrl::OnVK_END(FX_BOOL bShift, FX_BOOL bCtrl) {
+ OnVK(GetCount() - 1, bShift, bCtrl);
+}
+
+FX_BOOL CFX_ListCtrl::OnChar(FX_WORD nChar, FX_BOOL bShift, FX_BOOL bCtrl) {
+ int32_t nIndex = GetLastSelected();
+ int32_t nFindIndex = FindNext(nIndex, nChar);
+
+ if (nFindIndex != nIndex) {
+ OnVK(nFindIndex, bShift, bCtrl);
+ return TRUE;
+ }
+ return FALSE;
}
/* -------- inner methods ------- */
-void CFX_ListCtrl::SetPlateRect(const CPDF_Rect & rect)
-{
- CFX_ListContainer::SetPlateRect(rect);
- m_ptScrollPos.x = rect.left;
- SetScrollPos(CPDF_Point(rect.left,rect.top));
- ReArrange(0);
- InvalidateItem(-1);
-}
-
-CPDF_Rect CFX_ListCtrl::GetItemRect(int32_t nIndex) const
-{
- return InToOut(CFX_List::GetItemRect(nIndex));
-}
-
-void CFX_ListCtrl::AddString(const FX_WCHAR* string)
-{
- AddItem(string);
- ReArrange(GetCount() - 1);
-}
-
-void CFX_ListCtrl::SetMultipleSelect(int32_t nItemIndex, FX_BOOL bSelected)
-{
- if (!IsValid(nItemIndex)) return;
-
- if (bSelected != IsItemSelected(nItemIndex))
- {
- if (bSelected)
- {
- SetItemSelect(nItemIndex,TRUE);
- InvalidateItem(nItemIndex);
- }
- else
- {
- SetItemSelect(nItemIndex,FALSE);
- InvalidateItem(nItemIndex);
- }
- }
-}
-
-void CFX_ListCtrl::SetSingleSelect(int32_t nItemIndex)
-{
- if (!IsValid(nItemIndex)) return;
-
- if (m_nSelItem != nItemIndex)
- {
- if (m_nSelItem >= 0)
- {
- SetItemSelect(m_nSelItem,FALSE);
- InvalidateItem(m_nSelItem);
- }
-
- SetItemSelect(nItemIndex,TRUE);
- InvalidateItem(nItemIndex);
- m_nSelItem = nItemIndex;
- }
-}
-
-void CFX_ListCtrl::SetCaret(int32_t nItemIndex)
-{
- if (!IsValid(nItemIndex)) return;
-
- if (IsMultipleSel())
- {
- int32_t nOldIndex = m_nCaretIndex;
-
- if (nOldIndex != nItemIndex)
- {
- m_nCaretIndex = nItemIndex;
-
- SetItemCaret(nOldIndex, FALSE);
- SetItemCaret(nItemIndex,TRUE);
-
- InvalidateItem(nOldIndex);
- InvalidateItem(nItemIndex);
- }
- }
-}
-
-void CFX_ListCtrl::InvalidateItem(int32_t nItemIndex)
-{
- if (m_pNotify)
- {
- if (nItemIndex == -1)
- {
- if (!m_bNotifyFlag)
- {
- m_bNotifyFlag = TRUE;
- CPDF_Rect rcRefresh = GetPlateRect();
- m_pNotify->IOnInvalidateRect(&rcRefresh);
- m_bNotifyFlag = FALSE;
- }
- }
- else
- {
- if (!m_bNotifyFlag)
- {
- m_bNotifyFlag = TRUE;
- CPDF_Rect rcRefresh = GetItemRect(nItemIndex);
- rcRefresh.left -= 1.0f;
- rcRefresh.right += 1.0f;
- rcRefresh.bottom -= 1.0f;
- rcRefresh.top += 1.0f;
-
- m_pNotify->IOnInvalidateRect(&rcRefresh);
- m_bNotifyFlag = FALSE;
- }
- }
- }
-}
-
-void CFX_ListCtrl::SelectItems()
-{
- for (int32_t i=0,sz=m_aSelItems.GetCount(); i<sz; i++)
- {
- int32_t nItemIndex = m_aSelItems.GetItemIndex(i);
- int32_t nState = m_aSelItems.GetState(i);
-
- switch(nState)
- {
- case 1:
- SetMultipleSelect(nItemIndex, TRUE);
- break;
- case -1:
- SetMultipleSelect(nItemIndex, FALSE);
- break;
- }
- }
-
- m_aSelItems.Done();
-}
-
-void CFX_ListCtrl::Select(int32_t nItemIndex)
-{
- if (!IsValid(nItemIndex)) return;
-
- if (IsMultipleSel())
- {
- m_aSelItems.Add(nItemIndex);
- SelectItems();
- }
- else
- SetSingleSelect(nItemIndex);
-}
-
-FX_BOOL CFX_ListCtrl::IsItemVisible(int32_t nItemIndex) const
-{
- CPDF_Rect rcPlate = GetPlateRect();
- CPDF_Rect rcItem = GetItemRect(nItemIndex);
-
- return rcItem.bottom >= rcPlate.bottom && rcItem.top <= rcPlate.top;
-}
-
-void CFX_ListCtrl::ScrollToListItem(int32_t nItemIndex)
-{
- if (!IsValid(nItemIndex)) return;
-
- CPDF_Rect rcPlate = GetPlateRect();
- CPDF_Rect rcItem = CFX_List::GetItemRect(nItemIndex);
- CPDF_Rect rcItemCtrl = GetItemRect(nItemIndex);
-
- if (FX_EDIT_IsFloatSmaller(rcItemCtrl.bottom, rcPlate.bottom))
- {
- if (FX_EDIT_IsFloatSmaller(rcItemCtrl.top, rcPlate.top))
- {
- SetScrollPosY(rcItem.bottom + rcPlate.Height());
- }
- }
- else if (FX_EDIT_IsFloatBigger(rcItemCtrl.top, rcPlate.top))
- {
- if (FX_EDIT_IsFloatBigger(rcItemCtrl.bottom, rcPlate.bottom))
- {
- SetScrollPosY(rcItem.top);
- }
- }
-}
-
-void CFX_ListCtrl::SetScrollInfo()
-{
- if (m_pNotify)
- {
- CPDF_Rect rcPlate = GetPlateRect();
- CPDF_Rect rcContent = CFX_List::GetContentRect();
-
- if (!m_bNotifyFlag)
- {
- m_bNotifyFlag = TRUE;
- m_pNotify->IOnSetScrollInfoY(rcPlate.bottom, rcPlate.top,
- rcContent.bottom, rcContent.top, GetFirstHeight(), rcPlate.Height());
- m_bNotifyFlag = FALSE;
- }
- }
-}
-
-void CFX_ListCtrl::SetScrollPos(const CPDF_Point & point)
-{
- SetScrollPosY(point.y);
-}
-
-void CFX_ListCtrl::SetScrollPosY(FX_FLOAT fy)
-{
- if (!FX_EDIT_IsFloatEqual(m_ptScrollPos.y,fy))
- {
- CPDF_Rect rcPlate = GetPlateRect();
- CPDF_Rect rcContent = CFX_List::GetContentRect();
-
- if (rcPlate.Height() > rcContent.Height())
- {
- fy = rcPlate.top;
- }
- else
- {
- if (FX_EDIT_IsFloatSmaller(fy - rcPlate.Height(), rcContent.bottom))
- {
- fy = rcContent.bottom + rcPlate.Height();
- }
- else if (FX_EDIT_IsFloatBigger(fy, rcContent.top))
- {
- fy = rcContent.top;
- }
- }
-
- m_ptScrollPos.y = fy;
- InvalidateItem(-1);
+void CFX_ListCtrl::SetPlateRect(const CPDF_Rect& rect) {
+ CFX_ListContainer::SetPlateRect(rect);
+ m_ptScrollPos.x = rect.left;
+ SetScrollPos(CPDF_Point(rect.left, rect.top));
+ ReArrange(0);
+ InvalidateItem(-1);
+}
+
+CPDF_Rect CFX_ListCtrl::GetItemRect(int32_t nIndex) const {
+ return InToOut(CFX_List::GetItemRect(nIndex));
+}
+
+void CFX_ListCtrl::AddString(const FX_WCHAR* string) {
+ AddItem(string);
+ ReArrange(GetCount() - 1);
+}
+
+void CFX_ListCtrl::SetMultipleSelect(int32_t nItemIndex, FX_BOOL bSelected) {
+ if (!IsValid(nItemIndex))
+ return;
- if (m_pNotify)
- {
- if (!m_bNotifyFlag)
- {
- m_bNotifyFlag = TRUE;
- m_pNotify->IOnSetScrollPosY(fy);
- m_bNotifyFlag = FALSE;
- }
- }
- }
-}
-
-CPDF_Rect CFX_ListCtrl::GetContentRect() const
-{
- return InToOut(CFX_List::GetContentRect());
+ if (bSelected != IsItemSelected(nItemIndex)) {
+ if (bSelected) {
+ SetItemSelect(nItemIndex, TRUE);
+ InvalidateItem(nItemIndex);
+ } else {
+ SetItemSelect(nItemIndex, FALSE);
+ InvalidateItem(nItemIndex);
+ }
+ }
}
-void CFX_ListCtrl::ReArrange(int32_t nItemIndex)
-{
- CFX_List::ReArrange(nItemIndex);
- SetScrollInfo();
-}
-
-void CFX_ListCtrl::SetTopItem(int32_t nIndex)
-{
- if (IsValid(nIndex))
- {
- GetPlateRect();
- CPDF_Rect rcItem = CFX_List::GetItemRect(nIndex);
- SetScrollPosY(rcItem.top);
- }
-}
-
-int32_t CFX_ListCtrl::GetTopItem() const
-{
- int32_t nItemIndex = GetItemIndex(GetBTPoint());
-
- if (!IsItemVisible(nItemIndex) && IsItemVisible(nItemIndex + 1))
- nItemIndex += 1;
-
- return nItemIndex;
-}
-
-void CFX_ListCtrl::Empty()
-{
- CFX_List::Empty();
- InvalidateItem(-1);
+void CFX_ListCtrl::SetSingleSelect(int32_t nItemIndex) {
+ if (!IsValid(nItemIndex))
+ return;
+
+ if (m_nSelItem != nItemIndex) {
+ if (m_nSelItem >= 0) {
+ SetItemSelect(m_nSelItem, FALSE);
+ InvalidateItem(m_nSelItem);
+ }
+
+ SetItemSelect(nItemIndex, TRUE);
+ InvalidateItem(nItemIndex);
+ m_nSelItem = nItemIndex;
+ }
}
-void CFX_ListCtrl::Cancel()
-{
- m_aSelItems.DeselectAll();
+void CFX_ListCtrl::SetCaret(int32_t nItemIndex) {
+ if (!IsValid(nItemIndex))
+ return;
+
+ if (IsMultipleSel()) {
+ int32_t nOldIndex = m_nCaretIndex;
+
+ if (nOldIndex != nItemIndex) {
+ m_nCaretIndex = nItemIndex;
+
+ SetItemCaret(nOldIndex, FALSE);
+ SetItemCaret(nItemIndex, TRUE);
+
+ InvalidateItem(nOldIndex);
+ InvalidateItem(nItemIndex);
+ }
+ }
}
-int32_t CFX_ListCtrl::GetItemIndex(const CPDF_Point & point) const
-{
- return CFX_List::GetItemIndex(OutToIn(point));
+void CFX_ListCtrl::InvalidateItem(int32_t nItemIndex) {
+ if (m_pNotify) {
+ if (nItemIndex == -1) {
+ if (!m_bNotifyFlag) {
+ m_bNotifyFlag = TRUE;
+ CPDF_Rect rcRefresh = GetPlateRect();
+ m_pNotify->IOnInvalidateRect(&rcRefresh);
+ m_bNotifyFlag = FALSE;
+ }
+ } else {
+ if (!m_bNotifyFlag) {
+ m_bNotifyFlag = TRUE;
+ CPDF_Rect rcRefresh = GetItemRect(nItemIndex);
+ rcRefresh.left -= 1.0f;
+ rcRefresh.right += 1.0f;
+ rcRefresh.bottom -= 1.0f;
+ rcRefresh.top += 1.0f;
+
+ m_pNotify->IOnInvalidateRect(&rcRefresh);
+ m_bNotifyFlag = FALSE;
+ }
+ }
+ }
+}
+
+void CFX_ListCtrl::SelectItems() {
+ for (int32_t i = 0, sz = m_aSelItems.GetCount(); i < sz; i++) {
+ int32_t nItemIndex = m_aSelItems.GetItemIndex(i);
+ int32_t nState = m_aSelItems.GetState(i);
+
+ switch (nState) {
+ case 1:
+ SetMultipleSelect(nItemIndex, TRUE);
+ break;
+ case -1:
+ SetMultipleSelect(nItemIndex, FALSE);
+ break;
+ }
+ }
+
+ m_aSelItems.Done();
+}
+
+void CFX_ListCtrl::Select(int32_t nItemIndex) {
+ if (!IsValid(nItemIndex))
+ return;
+
+ if (IsMultipleSel()) {
+ m_aSelItems.Add(nItemIndex);
+ SelectItems();
+ } else
+ SetSingleSelect(nItemIndex);
}
-CFX_WideString CFX_ListCtrl::GetText() const
-{
- if (IsMultipleSel())
- return GetItemText(m_nCaretIndex);
- return GetItemText(m_nSelItem);
+FX_BOOL CFX_ListCtrl::IsItemVisible(int32_t nItemIndex) const {
+ CPDF_Rect rcPlate = GetPlateRect();
+ CPDF_Rect rcItem = GetItemRect(nItemIndex);
+
+ return rcItem.bottom >= rcPlate.bottom && rcItem.top <= rcPlate.top;
}
+void CFX_ListCtrl::ScrollToListItem(int32_t nItemIndex) {
+ if (!IsValid(nItemIndex))
+ return;
+
+ CPDF_Rect rcPlate = GetPlateRect();
+ CPDF_Rect rcItem = CFX_List::GetItemRect(nItemIndex);
+ CPDF_Rect rcItemCtrl = GetItemRect(nItemIndex);
+
+ if (FX_EDIT_IsFloatSmaller(rcItemCtrl.bottom, rcPlate.bottom)) {
+ if (FX_EDIT_IsFloatSmaller(rcItemCtrl.top, rcPlate.top)) {
+ SetScrollPosY(rcItem.bottom + rcPlate.Height());
+ }
+ } else if (FX_EDIT_IsFloatBigger(rcItemCtrl.top, rcPlate.top)) {
+ if (FX_EDIT_IsFloatBigger(rcItemCtrl.bottom, rcPlate.bottom)) {
+ SetScrollPosY(rcItem.top);
+ }
+ }
+}
+
+void CFX_ListCtrl::SetScrollInfo() {
+ if (m_pNotify) {
+ CPDF_Rect rcPlate = GetPlateRect();
+ CPDF_Rect rcContent = CFX_List::GetContentRect();
+
+ if (!m_bNotifyFlag) {
+ m_bNotifyFlag = TRUE;
+ m_pNotify->IOnSetScrollInfoY(rcPlate.bottom, rcPlate.top,
+ rcContent.bottom, rcContent.top,
+ GetFirstHeight(), rcPlate.Height());
+ m_bNotifyFlag = FALSE;
+ }
+ }
+}
+
+void CFX_ListCtrl::SetScrollPos(const CPDF_Point& point) {
+ SetScrollPosY(point.y);
+}
+
+void CFX_ListCtrl::SetScrollPosY(FX_FLOAT fy) {
+ if (!FX_EDIT_IsFloatEqual(m_ptScrollPos.y, fy)) {
+ CPDF_Rect rcPlate = GetPlateRect();
+ CPDF_Rect rcContent = CFX_List::GetContentRect();
+
+ if (rcPlate.Height() > rcContent.Height()) {
+ fy = rcPlate.top;
+ } else {
+ if (FX_EDIT_IsFloatSmaller(fy - rcPlate.Height(), rcContent.bottom)) {
+ fy = rcContent.bottom + rcPlate.Height();
+ } else if (FX_EDIT_IsFloatBigger(fy, rcContent.top)) {
+ fy = rcContent.top;
+ }
+ }
+
+ m_ptScrollPos.y = fy;
+ InvalidateItem(-1);
+
+ if (m_pNotify) {
+ if (!m_bNotifyFlag) {
+ m_bNotifyFlag = TRUE;
+ m_pNotify->IOnSetScrollPosY(fy);
+ m_bNotifyFlag = FALSE;
+ }
+ }
+ }
+}
+
+CPDF_Rect CFX_ListCtrl::GetContentRect() const {
+ return InToOut(CFX_List::GetContentRect());
+}
+
+void CFX_ListCtrl::ReArrange(int32_t nItemIndex) {
+ CFX_List::ReArrange(nItemIndex);
+ SetScrollInfo();
+}
+
+void CFX_ListCtrl::SetTopItem(int32_t nIndex) {
+ if (IsValid(nIndex)) {
+ GetPlateRect();
+ CPDF_Rect rcItem = CFX_List::GetItemRect(nIndex);
+ SetScrollPosY(rcItem.top);
+ }
+}
+
+int32_t CFX_ListCtrl::GetTopItem() const {
+ int32_t nItemIndex = GetItemIndex(GetBTPoint());
+
+ if (!IsItemVisible(nItemIndex) && IsItemVisible(nItemIndex + 1))
+ nItemIndex += 1;
+
+ return nItemIndex;
+}
+
+void CFX_ListCtrl::Empty() {
+ CFX_List::Empty();
+ InvalidateItem(-1);
+}
+
+void CFX_ListCtrl::Cancel() {
+ m_aSelItems.DeselectAll();
+}
+
+int32_t CFX_ListCtrl::GetItemIndex(const CPDF_Point& point) const {
+ return CFX_List::GetItemIndex(OutToIn(point));
+}
+
+CFX_WideString CFX_ListCtrl::GetText() const {
+ if (IsMultipleSel())
+ return GetItemText(m_nCaretIndex);
+ return GetItemText(m_nSelItem);
+}
diff --git a/fpdfsdk/src/fxedit/fxet_module.cpp b/fpdfsdk/src/fxedit/fxet_module.cpp
index d1421641bc..5c0086ae21 100644
--- a/fpdfsdk/src/fxedit/fxet_module.cpp
+++ b/fpdfsdk/src/fxedit/fxet_module.cpp
@@ -10,37 +10,30 @@
/* ---------------------- IFX_Edit ---------------------- */
-IFX_Edit* IFX_Edit::NewEdit()
-{
- if (IPDF_VariableText * pVT = IPDF_VariableText::NewVariableText())
- {
- return new CFX_Edit(pVT);
- }
-
- return NULL;
+IFX_Edit* IFX_Edit::NewEdit() {
+ if (IPDF_VariableText* pVT = IPDF_VariableText::NewVariableText()) {
+ return new CFX_Edit(pVT);
+ }
+
+ return NULL;
}
-void IFX_Edit::DelEdit(IFX_Edit* pEdit)
-{
- ASSERT(pEdit != NULL);
+void IFX_Edit::DelEdit(IFX_Edit* pEdit) {
+ ASSERT(pEdit != NULL);
- IPDF_VariableText::DelVariableText(pEdit->GetVariableText());
+ IPDF_VariableText::DelVariableText(pEdit->GetVariableText());
- delete (CFX_Edit*)pEdit;
+ delete (CFX_Edit*)pEdit;
}
-
/* ---------------------- IFX_List ---------------------- */
-IFX_List* IFX_List::NewList()
-{
- return new CFX_ListCtrl();
+IFX_List* IFX_List::NewList() {
+ return new CFX_ListCtrl();
}
-void IFX_List::DelList(IFX_List* pList)
-{
- ASSERT(pList != NULL);
+void IFX_List::DelList(IFX_List* pList) {
+ ASSERT(pList != NULL);
- delete (CFX_ListCtrl*)pList;
+ delete (CFX_ListCtrl*)pList;
}
-
diff --git a/fpdfsdk/src/fxedit/fxet_pageobjs.cpp b/fpdfsdk/src/fxedit/fxet_pageobjs.cpp
index 1c0269b682..1fb669bb57 100644
--- a/fpdfsdk/src/fxedit/fxet_pageobjs.cpp
+++ b/fpdfsdk/src/fxedit/fxet_pageobjs.cpp
@@ -8,634 +8,665 @@
#include "../../include/fxedit/fx_edit.h"
#include "../../include/fxedit/fxet_edit.h"
-#define FX_EDIT_UNDERLINEHALFWIDTH 0.5f
-#define FX_EDIT_CROSSOUTHALFWIDTH 0.5f
-
-extern CFX_ByteString GetPDFWordString(IFX_Edit_FontMap * pFontMap, int32_t nFontIndex, FX_WORD Word, FX_WORD SubWord);
-
-CPDF_Rect GetUnderLineRect(const CPVT_Word& word)
-{
- return CPDF_Rect(word.ptWord.x, word.ptWord.y + word.fDescent * 0.5f,
- word.ptWord.x + word.fWidth, word.ptWord.y + word.fDescent * 0.25f);
+#define FX_EDIT_UNDERLINEHALFWIDTH 0.5f
+#define FX_EDIT_CROSSOUTHALFWIDTH 0.5f
+
+extern CFX_ByteString GetPDFWordString(IFX_Edit_FontMap* pFontMap,
+ int32_t nFontIndex,
+ FX_WORD Word,
+ FX_WORD SubWord);
+
+CPDF_Rect GetUnderLineRect(const CPVT_Word& word) {
+ return CPDF_Rect(word.ptWord.x, word.ptWord.y + word.fDescent * 0.5f,
+ word.ptWord.x + word.fWidth,
+ word.ptWord.y + word.fDescent * 0.25f);
}
-CPDF_Rect GetCrossoutRect(const CPVT_Word& word)
-{
- return CPDF_Rect(word.ptWord.x, word.ptWord.y + (word.fAscent + word.fDescent) * 0.5f + word.fDescent * 0.25f,
- word.ptWord.x + word.fWidth, word.ptWord.y + (word.fAscent + word.fDescent) * 0.5f);
+CPDF_Rect GetCrossoutRect(const CPVT_Word& word) {
+ return CPDF_Rect(word.ptWord.x,
+ word.ptWord.y + (word.fAscent + word.fDescent) * 0.5f +
+ word.fDescent * 0.25f,
+ word.ptWord.x + word.fWidth,
+ word.ptWord.y + (word.fAscent + word.fDescent) * 0.5f);
}
-static void DrawTextString(CFX_RenderDevice* pDevice, const CPDF_Point& pt, CPDF_Font* pFont, FX_FLOAT fFontSize, CPDF_Matrix* pUser2Device,
- const CFX_ByteString& str, FX_ARGB crTextFill, FX_ARGB crTextStroke, int32_t nHorzScale)
-{
- FX_FLOAT x = pt.x, y = pt.y;
- pUser2Device->Transform(x, y);
-
- if (pFont)
- {
- if (nHorzScale != 100)
- {
- CPDF_Matrix mt(nHorzScale/100.0f,0,0,1,0,0);
- mt.Concat(*pUser2Device);
-
- CPDF_RenderOptions ro;
- ro.m_Flags = RENDER_CLEARTYPE;
- ro.m_ColorMode = RENDER_COLOR_NORMAL;
-
- if (crTextStroke != 0)
- {
- CPDF_Point pt1(0,0), pt2(1,0);
- pUser2Device->Transform(pt1.x, pt1.y);
- pUser2Device->Transform(pt2.x, pt2.y);
- CFX_GraphStateData gsd;
- gsd.m_LineWidth = (FX_FLOAT)FXSYS_fabs((pt2.x + pt2.y) - (pt1.x + pt1.y));
-
- CPDF_TextRenderer::DrawTextString(pDevice,x, y, pFont, fFontSize, &mt, str, crTextFill, crTextStroke, &gsd, &ro);
- }
- else
- CPDF_TextRenderer::DrawTextString(pDevice,x, y, pFont, fFontSize, &mt, str, crTextFill, 0, NULL, &ro);
- }
- else
- {
- CPDF_RenderOptions ro;
- ro.m_Flags = RENDER_CLEARTYPE;
- ro.m_ColorMode = RENDER_COLOR_NORMAL;
-
- if (crTextStroke != 0)
- {
- CPDF_Point pt1(0,0), pt2(1,0);
- pUser2Device->Transform(pt1.x, pt1.y);
- pUser2Device->Transform(pt2.x, pt2.y);
- CFX_GraphStateData gsd;
- gsd.m_LineWidth = (FX_FLOAT)FXSYS_fabs((pt2.x + pt2.y) - (pt1.x + pt1.y));
-
- CPDF_TextRenderer::DrawTextString(pDevice,x, y, pFont, fFontSize, pUser2Device, str, crTextFill, crTextStroke, &gsd, &ro);
- }
- else
- CPDF_TextRenderer::DrawTextString(pDevice,x, y, pFont, fFontSize, pUser2Device, str, crTextFill, 0, NULL, &ro);
- }
- }
+static void DrawTextString(CFX_RenderDevice* pDevice,
+ const CPDF_Point& pt,
+ CPDF_Font* pFont,
+ FX_FLOAT fFontSize,
+ CPDF_Matrix* pUser2Device,
+ const CFX_ByteString& str,
+ FX_ARGB crTextFill,
+ FX_ARGB crTextStroke,
+ int32_t nHorzScale) {
+ FX_FLOAT x = pt.x, y = pt.y;
+ pUser2Device->Transform(x, y);
+
+ if (pFont) {
+ if (nHorzScale != 100) {
+ CPDF_Matrix mt(nHorzScale / 100.0f, 0, 0, 1, 0, 0);
+ mt.Concat(*pUser2Device);
+
+ CPDF_RenderOptions ro;
+ ro.m_Flags = RENDER_CLEARTYPE;
+ ro.m_ColorMode = RENDER_COLOR_NORMAL;
+
+ if (crTextStroke != 0) {
+ CPDF_Point pt1(0, 0), pt2(1, 0);
+ pUser2Device->Transform(pt1.x, pt1.y);
+ pUser2Device->Transform(pt2.x, pt2.y);
+ CFX_GraphStateData gsd;
+ gsd.m_LineWidth =
+ (FX_FLOAT)FXSYS_fabs((pt2.x + pt2.y) - (pt1.x + pt1.y));
+
+ CPDF_TextRenderer::DrawTextString(pDevice, x, y, pFont, fFontSize, &mt,
+ str, crTextFill, crTextStroke, &gsd,
+ &ro);
+ } else
+ CPDF_TextRenderer::DrawTextString(pDevice, x, y, pFont, fFontSize, &mt,
+ str, crTextFill, 0, NULL, &ro);
+ } else {
+ CPDF_RenderOptions ro;
+ ro.m_Flags = RENDER_CLEARTYPE;
+ ro.m_ColorMode = RENDER_COLOR_NORMAL;
+
+ if (crTextStroke != 0) {
+ CPDF_Point pt1(0, 0), pt2(1, 0);
+ pUser2Device->Transform(pt1.x, pt1.y);
+ pUser2Device->Transform(pt2.x, pt2.y);
+ CFX_GraphStateData gsd;
+ gsd.m_LineWidth =
+ (FX_FLOAT)FXSYS_fabs((pt2.x + pt2.y) - (pt1.x + pt1.y));
+
+ CPDF_TextRenderer::DrawTextString(pDevice, x, y, pFont, fFontSize,
+ pUser2Device, str, crTextFill,
+ crTextStroke, &gsd, &ro);
+ } else
+ CPDF_TextRenderer::DrawTextString(pDevice, x, y, pFont, fFontSize,
+ pUser2Device, str, crTextFill, 0,
+ NULL, &ro);
+ }
+ }
}
-void IFX_Edit::DrawUnderline(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device, IFX_Edit* pEdit, FX_COLORREF color,
- const CPDF_Rect& rcClip, const CPDF_Point& ptOffset, const CPVT_WordRange* pRange)
-{
- pDevice->SaveState();
-
- if (!rcClip.IsEmpty())
- {
- CPDF_Rect rcTemp = rcClip;
- pUser2Device->TransformRect(rcTemp);
- FX_RECT rcDevClip;
- rcDevClip.left = (int32_t)rcTemp.left;
- rcDevClip.right = (int32_t)rcTemp.right;
- rcDevClip.top = (int32_t)rcTemp.top;
- rcDevClip.bottom = (int32_t)rcTemp.bottom;
- pDevice->SetClip_Rect(&rcDevClip);
- }
-
- if (IFX_Edit_Iterator* pIterator = pEdit->GetIterator())
- {
- if (pEdit->GetFontMap())
- {
- if (pRange)
- pIterator->SetAt(pRange->BeginPos);
- else
- pIterator->SetAt(0);
-
- while (pIterator->NextWord())
- {
- CPVT_WordPlace place = pIterator->GetAt();
- if (pRange && place.WordCmp(pRange->EndPos) > 0) break;
-
- CPVT_Word word;
- if (pIterator->GetWord(word))
- {
- CFX_PathData pathUnderline;
- CPDF_Rect rcUnderline = GetUnderLineRect(word);
- rcUnderline.left += ptOffset.x;
- rcUnderline.right += ptOffset.x;
- rcUnderline.top += ptOffset.y;
- rcUnderline.bottom += ptOffset.y;
- pathUnderline.AppendRect(rcUnderline.left, rcUnderline.bottom, rcUnderline.right, rcUnderline.top);
-
- pDevice->DrawPath(&pathUnderline, pUser2Device, NULL, color, 0, FXFILL_WINDING);
- }
- }
- }
- }
-
- pDevice->RestoreState();
+void IFX_Edit::DrawUnderline(CFX_RenderDevice* pDevice,
+ CPDF_Matrix* pUser2Device,
+ IFX_Edit* pEdit,
+ FX_COLORREF color,
+ const CPDF_Rect& rcClip,
+ const CPDF_Point& ptOffset,
+ const CPVT_WordRange* pRange) {
+ pDevice->SaveState();
+
+ if (!rcClip.IsEmpty()) {
+ CPDF_Rect rcTemp = rcClip;
+ pUser2Device->TransformRect(rcTemp);
+ FX_RECT rcDevClip;
+ rcDevClip.left = (int32_t)rcTemp.left;
+ rcDevClip.right = (int32_t)rcTemp.right;
+ rcDevClip.top = (int32_t)rcTemp.top;
+ rcDevClip.bottom = (int32_t)rcTemp.bottom;
+ pDevice->SetClip_Rect(&rcDevClip);
+ }
+
+ if (IFX_Edit_Iterator* pIterator = pEdit->GetIterator()) {
+ if (pEdit->GetFontMap()) {
+ if (pRange)
+ pIterator->SetAt(pRange->BeginPos);
+ else
+ pIterator->SetAt(0);
+
+ while (pIterator->NextWord()) {
+ CPVT_WordPlace place = pIterator->GetAt();
+ if (pRange && place.WordCmp(pRange->EndPos) > 0)
+ break;
+
+ CPVT_Word word;
+ if (pIterator->GetWord(word)) {
+ CFX_PathData pathUnderline;
+ CPDF_Rect rcUnderline = GetUnderLineRect(word);
+ rcUnderline.left += ptOffset.x;
+ rcUnderline.right += ptOffset.x;
+ rcUnderline.top += ptOffset.y;
+ rcUnderline.bottom += ptOffset.y;
+ pathUnderline.AppendRect(rcUnderline.left, rcUnderline.bottom,
+ rcUnderline.right, rcUnderline.top);
+
+ pDevice->DrawPath(&pathUnderline, pUser2Device, NULL, color, 0,
+ FXFILL_WINDING);
+ }
+ }
+ }
+ }
+
+ pDevice->RestoreState();
}
-void IFX_Edit::DrawEdit(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device, IFX_Edit* pEdit, FX_COLORREF crTextFill, FX_COLORREF crTextStroke,
- const CPDF_Rect& rcClip, const CPDF_Point& ptOffset, const CPVT_WordRange* pRange, IFX_SystemHandler* pSystemHandler, void* pFFLData)
-{
-
- FX_BOOL bContinuous = pEdit->GetCharArray() == 0;
- if (pEdit->GetCharSpace() > 0.0f)
- bContinuous = FALSE;
-
- FX_WORD SubWord = pEdit->GetPasswordChar();
- FX_FLOAT fFontSize = pEdit->GetFontSize();
- CPVT_WordRange wrSelect = pEdit->GetSelectWordRange();
- int32_t nHorzScale = pEdit->GetHorzScale();
-
- FX_COLORREF crCurFill = crTextFill;
- FX_COLORREF crOldFill = crCurFill;
-
- FX_BOOL bSelect = FALSE;
- const FX_COLORREF crWhite = ArgbEncode(255,255,255,255);
- const FX_COLORREF crSelBK = ArgbEncode(255,0,51,113);
-
- CFX_ByteTextBuf sTextBuf;
- int32_t nFontIndex = -1;
- CPDF_Point ptBT(0.0f,0.0f);
-
- pDevice->SaveState();
-
- if (!rcClip.IsEmpty())
- {
- CPDF_Rect rcTemp = rcClip;
- pUser2Device->TransformRect(rcTemp);
- FX_RECT rcDevClip;
- rcDevClip.left = (int32_t)rcTemp.left;
- rcDevClip.right = (int32_t)rcTemp.right;
- rcDevClip.top = (int32_t)rcTemp.top;
- rcDevClip.bottom = (int32_t)rcTemp.bottom;
- pDevice->SetClip_Rect(&rcDevClip);
- }
-
- if (IFX_Edit_Iterator* pIterator = pEdit->GetIterator())
- {
- if (IFX_Edit_FontMap* pFontMap = pEdit->GetFontMap())
- {
- if (pRange)
- pIterator->SetAt(pRange->BeginPos);
- else
- pIterator->SetAt(0);
-
- CPVT_WordPlace oldplace;
-
- while (pIterator->NextWord())
- {
- CPVT_WordPlace place = pIterator->GetAt();
- if (pRange && place.WordCmp(pRange->EndPos) > 0) break;
-
- if (wrSelect.IsExist())
- {
- bSelect = place.WordCmp(wrSelect.BeginPos) > 0 && place.WordCmp(wrSelect.EndPos) <= 0;
- if (bSelect)
- {
- crCurFill = crWhite;
- }
- else
- {
- crCurFill = crTextFill;
- }
- }
- if(pSystemHandler && pSystemHandler->IsSelectionImplemented())
- {
- crCurFill = crTextFill;
- crOldFill = crCurFill;
- }
- CPVT_Word word;
- if (pIterator->GetWord(word))
- {
-
- if (bSelect)
- {
-
- CPVT_Line line;
- pIterator->GetLine(line);
-
- if(pSystemHandler && pSystemHandler->IsSelectionImplemented())
- {
- CPDF_Rect rc(word.ptWord.x,line.ptLine.y + line.fLineDescent,
- word.ptWord.x+word.fWidth,line.ptLine.y + line.fLineAscent);
- rc.Intersect(rcClip);
- //CFX_Edit* pEt = (CFX_Edit*)pEdit;
- //CPDF_Rect rcEdit = pEt->VTToEdit(rc);
- pSystemHandler->OutputSelectedRect(pFFLData,rc);
- }
- else
- {
- CFX_PathData pathSelBK;
- pathSelBK.AppendRect(word.ptWord.x,line.ptLine.y + line.fLineDescent,
- word.ptWord.x+word.fWidth,line.ptLine.y + line.fLineAscent);
-
- pDevice->DrawPath(&pathSelBK, pUser2Device, NULL, crSelBK, 0, FXFILL_WINDING);
- }
- }
-
- if (bContinuous)
- {
- if (place.LineCmp(oldplace) != 0 || word.nFontIndex != nFontIndex ||
- crOldFill != crCurFill)
- {
- if (sTextBuf.GetLength() > 0)
- {
- DrawTextString(pDevice, CPDF_Point(ptBT.x+ptOffset.x, ptBT.y+ptOffset.y), pFontMap->GetPDFFont(nFontIndex),
- fFontSize, pUser2Device, sTextBuf.GetByteString(), crOldFill, crTextStroke, nHorzScale);
-
- sTextBuf.Clear();
- }
- nFontIndex = word.nFontIndex;
- ptBT = word.ptWord;
- crOldFill = crCurFill;
- }
-
- sTextBuf << GetPDFWordString(pFontMap, word.nFontIndex, word.Word, SubWord);
- }
- else
- {
- DrawTextString(pDevice,CPDF_Point(word.ptWord.x+ptOffset.x, word.ptWord.y+ptOffset.y), pFontMap->GetPDFFont(word.nFontIndex),
- fFontSize, pUser2Device, GetPDFWordString(pFontMap, word.nFontIndex, word.Word, SubWord), crCurFill, crTextStroke, nHorzScale);
-
- }
- oldplace = place;
-
-
- }
- }
-
- if (sTextBuf.GetLength() > 0)
- {
- DrawTextString(pDevice, CPDF_Point(ptBT.x+ptOffset.x, ptBT.y+ptOffset.y), pFontMap->GetPDFFont(nFontIndex),
- fFontSize, pUser2Device, sTextBuf.GetByteString(), crOldFill, crTextStroke, nHorzScale);
- }
- }
- }
-
- pDevice->RestoreState();
+void IFX_Edit::DrawEdit(CFX_RenderDevice* pDevice,
+ CPDF_Matrix* pUser2Device,
+ IFX_Edit* pEdit,
+ FX_COLORREF crTextFill,
+ FX_COLORREF crTextStroke,
+ const CPDF_Rect& rcClip,
+ const CPDF_Point& ptOffset,
+ const CPVT_WordRange* pRange,
+ IFX_SystemHandler* pSystemHandler,
+ void* pFFLData) {
+ FX_BOOL bContinuous = pEdit->GetCharArray() == 0;
+ if (pEdit->GetCharSpace() > 0.0f)
+ bContinuous = FALSE;
+
+ FX_WORD SubWord = pEdit->GetPasswordChar();
+ FX_FLOAT fFontSize = pEdit->GetFontSize();
+ CPVT_WordRange wrSelect = pEdit->GetSelectWordRange();
+ int32_t nHorzScale = pEdit->GetHorzScale();
+
+ FX_COLORREF crCurFill = crTextFill;
+ FX_COLORREF crOldFill = crCurFill;
+
+ FX_BOOL bSelect = FALSE;
+ const FX_COLORREF crWhite = ArgbEncode(255, 255, 255, 255);
+ const FX_COLORREF crSelBK = ArgbEncode(255, 0, 51, 113);
+
+ CFX_ByteTextBuf sTextBuf;
+ int32_t nFontIndex = -1;
+ CPDF_Point ptBT(0.0f, 0.0f);
+
+ pDevice->SaveState();
+
+ if (!rcClip.IsEmpty()) {
+ CPDF_Rect rcTemp = rcClip;
+ pUser2Device->TransformRect(rcTemp);
+ FX_RECT rcDevClip;
+ rcDevClip.left = (int32_t)rcTemp.left;
+ rcDevClip.right = (int32_t)rcTemp.right;
+ rcDevClip.top = (int32_t)rcTemp.top;
+ rcDevClip.bottom = (int32_t)rcTemp.bottom;
+ pDevice->SetClip_Rect(&rcDevClip);
+ }
+
+ if (IFX_Edit_Iterator* pIterator = pEdit->GetIterator()) {
+ if (IFX_Edit_FontMap* pFontMap = pEdit->GetFontMap()) {
+ if (pRange)
+ pIterator->SetAt(pRange->BeginPos);
+ else
+ pIterator->SetAt(0);
+
+ CPVT_WordPlace oldplace;
+
+ while (pIterator->NextWord()) {
+ CPVT_WordPlace place = pIterator->GetAt();
+ if (pRange && place.WordCmp(pRange->EndPos) > 0)
+ break;
+
+ if (wrSelect.IsExist()) {
+ bSelect = place.WordCmp(wrSelect.BeginPos) > 0 &&
+ place.WordCmp(wrSelect.EndPos) <= 0;
+ if (bSelect) {
+ crCurFill = crWhite;
+ } else {
+ crCurFill = crTextFill;
+ }
+ }
+ if (pSystemHandler && pSystemHandler->IsSelectionImplemented()) {
+ crCurFill = crTextFill;
+ crOldFill = crCurFill;
+ }
+ CPVT_Word word;
+ if (pIterator->GetWord(word)) {
+ if (bSelect) {
+ CPVT_Line line;
+ pIterator->GetLine(line);
+
+ if (pSystemHandler && pSystemHandler->IsSelectionImplemented()) {
+ CPDF_Rect rc(word.ptWord.x, line.ptLine.y + line.fLineDescent,
+ word.ptWord.x + word.fWidth,
+ line.ptLine.y + line.fLineAscent);
+ rc.Intersect(rcClip);
+ // CFX_Edit* pEt = (CFX_Edit*)pEdit;
+ // CPDF_Rect rcEdit = pEt->VTToEdit(rc);
+ pSystemHandler->OutputSelectedRect(pFFLData, rc);
+ } else {
+ CFX_PathData pathSelBK;
+ pathSelBK.AppendRect(word.ptWord.x,
+ line.ptLine.y + line.fLineDescent,
+ word.ptWord.x + word.fWidth,
+ line.ptLine.y + line.fLineAscent);
+
+ pDevice->DrawPath(&pathSelBK, pUser2Device, NULL, crSelBK, 0,
+ FXFILL_WINDING);
+ }
+ }
+
+ if (bContinuous) {
+ if (place.LineCmp(oldplace) != 0 || word.nFontIndex != nFontIndex ||
+ crOldFill != crCurFill) {
+ if (sTextBuf.GetLength() > 0) {
+ DrawTextString(pDevice, CPDF_Point(ptBT.x + ptOffset.x,
+ ptBT.y + ptOffset.y),
+ pFontMap->GetPDFFont(nFontIndex), fFontSize,
+ pUser2Device, sTextBuf.GetByteString(),
+ crOldFill, crTextStroke, nHorzScale);
+
+ sTextBuf.Clear();
+ }
+ nFontIndex = word.nFontIndex;
+ ptBT = word.ptWord;
+ crOldFill = crCurFill;
+ }
+
+ sTextBuf << GetPDFWordString(pFontMap, word.nFontIndex, word.Word,
+ SubWord);
+ } else {
+ DrawTextString(
+ pDevice, CPDF_Point(word.ptWord.x + ptOffset.x,
+ word.ptWord.y + ptOffset.y),
+ pFontMap->GetPDFFont(word.nFontIndex), fFontSize, pUser2Device,
+ GetPDFWordString(pFontMap, word.nFontIndex, word.Word, SubWord),
+ crCurFill, crTextStroke, nHorzScale);
+ }
+ oldplace = place;
+ }
+ }
+
+ if (sTextBuf.GetLength() > 0) {
+ DrawTextString(
+ pDevice, CPDF_Point(ptBT.x + ptOffset.x, ptBT.y + ptOffset.y),
+ pFontMap->GetPDFFont(nFontIndex), fFontSize, pUser2Device,
+ sTextBuf.GetByteString(), crOldFill, crTextStroke, nHorzScale);
+ }
+ }
+ }
+
+ pDevice->RestoreState();
}
-void IFX_Edit::DrawRichEdit(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device, IFX_Edit* pEdit,
- const CPDF_Rect& rcClip, const CPDF_Point& ptOffset, const CPVT_WordRange* pRange)
-{
- //FX_FLOAT fFontSize = pEdit->GetFontSize();
- CPVT_WordRange wrSelect = pEdit->GetSelectWordRange();
-
- FX_COLORREF crCurText = ArgbEncode(255, 0,0,0);
- FX_COLORREF crOld = crCurText;
- FX_BOOL bSelect = FALSE;
- const FX_COLORREF crWhite = ArgbEncode(255,255,255,255);
- const FX_COLORREF crSelBK = ArgbEncode(255,0,51,113);
-
- CFX_ByteTextBuf sTextBuf;
- CPVT_WordProps wp;
- CPDF_Point ptBT(0.0f,0.0f);
-
- pDevice->SaveState();
-
- if (!rcClip.IsEmpty())
- {
- CPDF_Rect rcTemp = rcClip;
- pUser2Device->TransformRect(rcTemp);
- FX_RECT rcDevClip;
- rcDevClip.left = (int32_t)rcTemp.left;
- rcDevClip.right = (int32_t)rcTemp.right;
- rcDevClip.top = (int32_t)rcTemp.top;
- rcDevClip.bottom = (int32_t)rcTemp.bottom;
- pDevice->SetClip_Rect(&rcDevClip);
- }
-
- if (IFX_Edit_Iterator* pIterator = pEdit->GetIterator())
- {
- if (IFX_Edit_FontMap* pFontMap = pEdit->GetFontMap())
- {
- if (pRange)
- pIterator->SetAt(pRange->BeginPos);
- else
- pIterator->SetAt(0);
-
- CPVT_WordPlace oldplace;
-
- while (pIterator->NextWord())
- {
- CPVT_WordPlace place = pIterator->GetAt();
- if (pRange && place.WordCmp(pRange->EndPos) > 0) break;
-
- CPVT_Word word;
- if (pIterator->GetWord(word))
- {
- word.WordProps.fFontSize = word.fFontSize;
-
- crCurText = ArgbEncode(255,word.WordProps.dwWordColor);
-
- if (wrSelect.IsExist())
- {
- bSelect = place.WordCmp(wrSelect.BeginPos) > 0 && place.WordCmp(wrSelect.EndPos) <= 0;
- if (bSelect)
- {
- crCurText = crWhite;
- }
- }
-
- if (bSelect)
- {
- CPVT_Line line;
- pIterator->GetLine(line);
-
- CFX_PathData pathSelBK;
- pathSelBK.AppendRect(word.ptWord.x + ptOffset.x,
- line.ptLine.y + line.fLineDescent + ptOffset.y,
- word.ptWord.x+word.fWidth + ptOffset.x,
- line.ptLine.y + line.fLineAscent + ptOffset.y);
-
- pDevice->DrawPath(&pathSelBK, pUser2Device, NULL, crSelBK, 0, FXFILL_WINDING);
- }
-
- if (place.LineCmp(oldplace) != 0 || word.WordProps.fCharSpace > 0.0f || word.WordProps.nHorzScale != 100 ||
- FXSYS_memcmp(&word.WordProps, &wp, sizeof(CPVT_WordProps)) != 0 ||
- crOld != crCurText)
- {
- if (sTextBuf.GetLength() > 0)
- {
- DrawTextString(pDevice, CPDF_Point(ptBT.x+ptOffset.x, ptBT.y+ptOffset.y), pFontMap->GetPDFFont(wp.nFontIndex),
- wp.fFontSize, pUser2Device, sTextBuf.GetByteString(), crOld, 0, wp.nHorzScale);
-
- sTextBuf.Clear();
- }
- wp = word.WordProps;
- ptBT = word.ptWord;
- crOld = crCurText;
- }
-
- sTextBuf << GetPDFWordString(pFontMap, word.WordProps.nFontIndex, word.Word, 0);
-
- if (word.WordProps.nWordStyle & PVTWORD_STYLE_UNDERLINE)
- {
- CFX_PathData pathUnderline;
- CPDF_Rect rcUnderline = GetUnderLineRect(word);
- pathUnderline.AppendRect(rcUnderline.left, rcUnderline.bottom, rcUnderline.right, rcUnderline.top);
-
- pDevice->DrawPath(&pathUnderline, pUser2Device, NULL, crCurText, 0, FXFILL_WINDING);
- }
-
- if (word.WordProps.nWordStyle & PVTWORD_STYLE_CROSSOUT)
- {
- CFX_PathData pathCrossout;
- CPDF_Rect rcCrossout = GetCrossoutRect(word);
- pathCrossout.AppendRect(rcCrossout.left, rcCrossout.bottom, rcCrossout.right, rcCrossout.top);
-
- pDevice->DrawPath(&pathCrossout, pUser2Device, NULL, crCurText, 0, FXFILL_WINDING);
- }
-
- oldplace = place;
- }
- }
-
- if (sTextBuf.GetLength() > 0)
- {
- DrawTextString(pDevice, CPDF_Point(ptBT.x+ptOffset.x, ptBT.y+ptOffset.y), pFontMap->GetPDFFont(wp.nFontIndex),
- wp.fFontSize, pUser2Device, sTextBuf.GetByteString(), crOld, 0, wp.nHorzScale);
- }
- }
- }
-
- pDevice->RestoreState();
+void IFX_Edit::DrawRichEdit(CFX_RenderDevice* pDevice,
+ CPDF_Matrix* pUser2Device,
+ IFX_Edit* pEdit,
+ const CPDF_Rect& rcClip,
+ const CPDF_Point& ptOffset,
+ const CPVT_WordRange* pRange) {
+ // FX_FLOAT fFontSize = pEdit->GetFontSize();
+ CPVT_WordRange wrSelect = pEdit->GetSelectWordRange();
+
+ FX_COLORREF crCurText = ArgbEncode(255, 0, 0, 0);
+ FX_COLORREF crOld = crCurText;
+ FX_BOOL bSelect = FALSE;
+ const FX_COLORREF crWhite = ArgbEncode(255, 255, 255, 255);
+ const FX_COLORREF crSelBK = ArgbEncode(255, 0, 51, 113);
+
+ CFX_ByteTextBuf sTextBuf;
+ CPVT_WordProps wp;
+ CPDF_Point ptBT(0.0f, 0.0f);
+
+ pDevice->SaveState();
+
+ if (!rcClip.IsEmpty()) {
+ CPDF_Rect rcTemp = rcClip;
+ pUser2Device->TransformRect(rcTemp);
+ FX_RECT rcDevClip;
+ rcDevClip.left = (int32_t)rcTemp.left;
+ rcDevClip.right = (int32_t)rcTemp.right;
+ rcDevClip.top = (int32_t)rcTemp.top;
+ rcDevClip.bottom = (int32_t)rcTemp.bottom;
+ pDevice->SetClip_Rect(&rcDevClip);
+ }
+
+ if (IFX_Edit_Iterator* pIterator = pEdit->GetIterator()) {
+ if (IFX_Edit_FontMap* pFontMap = pEdit->GetFontMap()) {
+ if (pRange)
+ pIterator->SetAt(pRange->BeginPos);
+ else
+ pIterator->SetAt(0);
+
+ CPVT_WordPlace oldplace;
+
+ while (pIterator->NextWord()) {
+ CPVT_WordPlace place = pIterator->GetAt();
+ if (pRange && place.WordCmp(pRange->EndPos) > 0)
+ break;
+
+ CPVT_Word word;
+ if (pIterator->GetWord(word)) {
+ word.WordProps.fFontSize = word.fFontSize;
+
+ crCurText = ArgbEncode(255, word.WordProps.dwWordColor);
+
+ if (wrSelect.IsExist()) {
+ bSelect = place.WordCmp(wrSelect.BeginPos) > 0 &&
+ place.WordCmp(wrSelect.EndPos) <= 0;
+ if (bSelect) {
+ crCurText = crWhite;
+ }
+ }
+
+ if (bSelect) {
+ CPVT_Line line;
+ pIterator->GetLine(line);
+
+ CFX_PathData pathSelBK;
+ pathSelBK.AppendRect(word.ptWord.x + ptOffset.x,
+ line.ptLine.y + line.fLineDescent + ptOffset.y,
+ word.ptWord.x + word.fWidth + ptOffset.x,
+ line.ptLine.y + line.fLineAscent + ptOffset.y);
+
+ pDevice->DrawPath(&pathSelBK, pUser2Device, NULL, crSelBK, 0,
+ FXFILL_WINDING);
+ }
+
+ if (place.LineCmp(oldplace) != 0 ||
+ word.WordProps.fCharSpace > 0.0f ||
+ word.WordProps.nHorzScale != 100 ||
+ FXSYS_memcmp(&word.WordProps, &wp, sizeof(CPVT_WordProps)) != 0 ||
+ crOld != crCurText) {
+ if (sTextBuf.GetLength() > 0) {
+ DrawTextString(
+ pDevice, CPDF_Point(ptBT.x + ptOffset.x, ptBT.y + ptOffset.y),
+ pFontMap->GetPDFFont(wp.nFontIndex), wp.fFontSize,
+ pUser2Device, sTextBuf.GetByteString(), crOld, 0,
+ wp.nHorzScale);
+
+ sTextBuf.Clear();
+ }
+ wp = word.WordProps;
+ ptBT = word.ptWord;
+ crOld = crCurText;
+ }
+
+ sTextBuf << GetPDFWordString(pFontMap, word.WordProps.nFontIndex,
+ word.Word, 0);
+
+ if (word.WordProps.nWordStyle & PVTWORD_STYLE_UNDERLINE) {
+ CFX_PathData pathUnderline;
+ CPDF_Rect rcUnderline = GetUnderLineRect(word);
+ pathUnderline.AppendRect(rcUnderline.left, rcUnderline.bottom,
+ rcUnderline.right, rcUnderline.top);
+
+ pDevice->DrawPath(&pathUnderline, pUser2Device, NULL, crCurText, 0,
+ FXFILL_WINDING);
+ }
+
+ if (word.WordProps.nWordStyle & PVTWORD_STYLE_CROSSOUT) {
+ CFX_PathData pathCrossout;
+ CPDF_Rect rcCrossout = GetCrossoutRect(word);
+ pathCrossout.AppendRect(rcCrossout.left, rcCrossout.bottom,
+ rcCrossout.right, rcCrossout.top);
+
+ pDevice->DrawPath(&pathCrossout, pUser2Device, NULL, crCurText, 0,
+ FXFILL_WINDING);
+ }
+
+ oldplace = place;
+ }
+ }
+
+ if (sTextBuf.GetLength() > 0) {
+ DrawTextString(
+ pDevice, CPDF_Point(ptBT.x + ptOffset.x, ptBT.y + ptOffset.y),
+ pFontMap->GetPDFFont(wp.nFontIndex), wp.fFontSize, pUser2Device,
+ sTextBuf.GetByteString(), crOld, 0, wp.nHorzScale);
+ }
+ }
+ }
+
+ pDevice->RestoreState();
}
-static void AddRectToPageObjects(CPDF_PageObjects* pPageObjs, FX_COLORREF crFill, const CPDF_Rect& rcFill)
-{
- CPDF_PathObject* pPathObj = new CPDF_PathObject;
- CPDF_PathData* pPathData = pPathObj->m_Path.GetModify();
- pPathData->AppendRect(rcFill.left,rcFill.bottom,rcFill.right,rcFill.top);
+static void AddRectToPageObjects(CPDF_PageObjects* pPageObjs,
+ FX_COLORREF crFill,
+ const CPDF_Rect& rcFill) {
+ CPDF_PathObject* pPathObj = new CPDF_PathObject;
+ CPDF_PathData* pPathData = pPathObj->m_Path.GetModify();
+ pPathData->AppendRect(rcFill.left, rcFill.bottom, rcFill.right, rcFill.top);
- FX_FLOAT rgb[3];
- rgb[0] = FXARGB_R(crFill) / 255.0f ;
- rgb[1] = FXARGB_G(crFill) / 255.0f;
- rgb[2] = FXARGB_B(crFill) / 255.0f;
- pPathObj->m_ColorState.SetFillColor(CPDF_ColorSpace::GetStockCS(PDFCS_DEVICERGB), rgb, 3);
+ FX_FLOAT rgb[3];
+ rgb[0] = FXARGB_R(crFill) / 255.0f;
+ rgb[1] = FXARGB_G(crFill) / 255.0f;
+ rgb[2] = FXARGB_B(crFill) / 255.0f;
+ pPathObj->m_ColorState.SetFillColor(
+ CPDF_ColorSpace::GetStockCS(PDFCS_DEVICERGB), rgb, 3);
- pPathObj->m_FillType = FXFILL_ALTERNATE;
- pPathObj->m_bStroke = FALSE;
+ pPathObj->m_FillType = FXFILL_ALTERNATE;
+ pPathObj->m_bStroke = FALSE;
- pPageObjs->InsertObject(pPageObjs->GetLastObjectPosition(),pPathObj);
+ pPageObjs->InsertObject(pPageObjs->GetLastObjectPosition(), pPathObj);
}
-static CPDF_TextObject* AddTextObjToPageObjects(CPDF_PageObjects* pPageObjs, FX_COLORREF crText,
- CPDF_Font* pFont, FX_FLOAT fFontSize, FX_FLOAT fCharSpace, int32_t nHorzScale,
- const CPDF_Point& point, const CFX_ByteString& text)
-{
- CPDF_TextObject* pTxtObj = new CPDF_TextObject;
-
- CPDF_TextStateData* pTextStateData = pTxtObj->m_TextState.GetModify();
- pTextStateData->m_pFont = pFont;
- pTextStateData->m_FontSize = fFontSize;
- pTextStateData->m_CharSpace = fCharSpace;
- pTextStateData->m_WordSpace = 0;
- pTextStateData->m_TextMode = 0;
- pTextStateData->m_Matrix[0] = nHorzScale / 100.0f;
- pTextStateData->m_Matrix[1] = 0;
- pTextStateData->m_Matrix[2] = 0;
- pTextStateData->m_Matrix[3] = 1;
-
- FX_FLOAT rgb[3];
- rgb[0] = FXARGB_R(crText) / 255.0f ;
- rgb[1] = FXARGB_G(crText) / 255.0f;
- rgb[2] = FXARGB_B(crText) / 255.0f;
- pTxtObj->m_ColorState.SetFillColor(CPDF_ColorSpace::GetStockCS(PDFCS_DEVICERGB),rgb, 3);
- pTxtObj->m_ColorState.SetStrokeColor(CPDF_ColorSpace::GetStockCS(PDFCS_DEVICERGB),rgb, 3);
-
- pTxtObj->SetPosition(point.x,point.y);
- pTxtObj->SetText(text);
-
- pPageObjs->InsertObject(pPageObjs->GetLastObjectPosition(),pTxtObj);
-
- return pTxtObj;
+static CPDF_TextObject* AddTextObjToPageObjects(CPDF_PageObjects* pPageObjs,
+ FX_COLORREF crText,
+ CPDF_Font* pFont,
+ FX_FLOAT fFontSize,
+ FX_FLOAT fCharSpace,
+ int32_t nHorzScale,
+ const CPDF_Point& point,
+ const CFX_ByteString& text) {
+ CPDF_TextObject* pTxtObj = new CPDF_TextObject;
+
+ CPDF_TextStateData* pTextStateData = pTxtObj->m_TextState.GetModify();
+ pTextStateData->m_pFont = pFont;
+ pTextStateData->m_FontSize = fFontSize;
+ pTextStateData->m_CharSpace = fCharSpace;
+ pTextStateData->m_WordSpace = 0;
+ pTextStateData->m_TextMode = 0;
+ pTextStateData->m_Matrix[0] = nHorzScale / 100.0f;
+ pTextStateData->m_Matrix[1] = 0;
+ pTextStateData->m_Matrix[2] = 0;
+ pTextStateData->m_Matrix[3] = 1;
+
+ FX_FLOAT rgb[3];
+ rgb[0] = FXARGB_R(crText) / 255.0f;
+ rgb[1] = FXARGB_G(crText) / 255.0f;
+ rgb[2] = FXARGB_B(crText) / 255.0f;
+ pTxtObj->m_ColorState.SetFillColor(
+ CPDF_ColorSpace::GetStockCS(PDFCS_DEVICERGB), rgb, 3);
+ pTxtObj->m_ColorState.SetStrokeColor(
+ CPDF_ColorSpace::GetStockCS(PDFCS_DEVICERGB), rgb, 3);
+
+ pTxtObj->SetPosition(point.x, point.y);
+ pTxtObj->SetText(text);
+
+ pPageObjs->InsertObject(pPageObjs->GetLastObjectPosition(), pTxtObj);
+
+ return pTxtObj;
}
-void IFX_Edit::GeneratePageObjects(CPDF_PageObjects* pPageObjects, IFX_Edit* pEdit,
- const CPDF_Point& ptOffset, const CPVT_WordRange* pRange, FX_COLORREF crText, CFX_ArrayTemplate<CPDF_TextObject*>& ObjArray)
-{
- FX_FLOAT fFontSize = pEdit->GetFontSize();
-
- int32_t nOldFontIndex = -1;
-
- CFX_ByteTextBuf sTextBuf;
- CPDF_Point ptBT(0.0f,0.0f);
-
- ObjArray.RemoveAll();
-
- if (IFX_Edit_Iterator* pIterator = pEdit->GetIterator())
- {
- if (IFX_Edit_FontMap* pFontMap = pEdit->GetFontMap())
- {
- if (pRange)
- pIterator->SetAt(pRange->BeginPos);
- else
- pIterator->SetAt(0);
-
- CPVT_WordPlace oldplace;
-
- while (pIterator->NextWord())
- {
- CPVT_WordPlace place = pIterator->GetAt();
- if (pRange && place.WordCmp(pRange->EndPos) > 0) break;
-
- CPVT_Word word;
- if (pIterator->GetWord(word))
- {
- if (place.LineCmp(oldplace) != 0 || nOldFontIndex != word.nFontIndex)
- {
- if (sTextBuf.GetLength() > 0)
- {
- ObjArray.Add(AddTextObjToPageObjects(pPageObjects, crText, pFontMap->GetPDFFont(nOldFontIndex), fFontSize, 0.0f, 100,
- CPDF_Point(ptBT.x+ptOffset.x, ptBT.y+ptOffset.y), sTextBuf.GetByteString()));
-
- sTextBuf.Clear();
- }
-
- ptBT = word.ptWord;
- nOldFontIndex = word.nFontIndex;
- }
-
- sTextBuf << GetPDFWordString(pFontMap, word.nFontIndex, word.Word, 0);
- oldplace = place;
- }
- }
-
- if (sTextBuf.GetLength() > 0)
- {
- ObjArray.Add(AddTextObjToPageObjects(pPageObjects, crText, pFontMap->GetPDFFont(nOldFontIndex), fFontSize, 0.0f, 100,
- CPDF_Point(ptBT.x+ptOffset.x, ptBT.y+ptOffset.y), sTextBuf.GetByteString()));
- }
- }
- }
+void IFX_Edit::GeneratePageObjects(
+ CPDF_PageObjects* pPageObjects,
+ IFX_Edit* pEdit,
+ const CPDF_Point& ptOffset,
+ const CPVT_WordRange* pRange,
+ FX_COLORREF crText,
+ CFX_ArrayTemplate<CPDF_TextObject*>& ObjArray) {
+ FX_FLOAT fFontSize = pEdit->GetFontSize();
+
+ int32_t nOldFontIndex = -1;
+
+ CFX_ByteTextBuf sTextBuf;
+ CPDF_Point ptBT(0.0f, 0.0f);
+
+ ObjArray.RemoveAll();
+
+ if (IFX_Edit_Iterator* pIterator = pEdit->GetIterator()) {
+ if (IFX_Edit_FontMap* pFontMap = pEdit->GetFontMap()) {
+ if (pRange)
+ pIterator->SetAt(pRange->BeginPos);
+ else
+ pIterator->SetAt(0);
+
+ CPVT_WordPlace oldplace;
+
+ while (pIterator->NextWord()) {
+ CPVT_WordPlace place = pIterator->GetAt();
+ if (pRange && place.WordCmp(pRange->EndPos) > 0)
+ break;
+
+ CPVT_Word word;
+ if (pIterator->GetWord(word)) {
+ if (place.LineCmp(oldplace) != 0 ||
+ nOldFontIndex != word.nFontIndex) {
+ if (sTextBuf.GetLength() > 0) {
+ ObjArray.Add(AddTextObjToPageObjects(
+ pPageObjects, crText, pFontMap->GetPDFFont(nOldFontIndex),
+ fFontSize, 0.0f, 100,
+ CPDF_Point(ptBT.x + ptOffset.x, ptBT.y + ptOffset.y),
+ sTextBuf.GetByteString()));
+
+ sTextBuf.Clear();
+ }
+
+ ptBT = word.ptWord;
+ nOldFontIndex = word.nFontIndex;
+ }
+
+ sTextBuf << GetPDFWordString(pFontMap, word.nFontIndex, word.Word, 0);
+ oldplace = place;
+ }
+ }
+
+ if (sTextBuf.GetLength() > 0) {
+ ObjArray.Add(AddTextObjToPageObjects(
+ pPageObjects, crText, pFontMap->GetPDFFont(nOldFontIndex),
+ fFontSize, 0.0f, 100,
+ CPDF_Point(ptBT.x + ptOffset.x, ptBT.y + ptOffset.y),
+ sTextBuf.GetByteString()));
+ }
+ }
+ }
}
-void IFX_Edit::GenerateRichPageObjects(CPDF_PageObjects* pPageObjects, IFX_Edit* pEdit,
- const CPDF_Point& ptOffset, const CPVT_WordRange* pRange, CFX_ArrayTemplate<CPDF_TextObject*>& ObjArray)
-{
-
-
- FX_COLORREF crCurText = ArgbEncode(255, 0, 0, 0);
- FX_COLORREF crOld = crCurText;
-
-
- CFX_ByteTextBuf sTextBuf;
- CPVT_WordProps wp;
- CPDF_Point ptBT(0.0f,0.0f);
-
- ObjArray.RemoveAll();
-
- if (IFX_Edit_Iterator* pIterator = pEdit->GetIterator())
- {
- if (IFX_Edit_FontMap* pFontMap = pEdit->GetFontMap())
- {
- if (pRange)
- pIterator->SetAt(pRange->BeginPos);
- else
- pIterator->SetAt(0);
-
- CPVT_WordPlace oldplace;
-
- while (pIterator->NextWord())
- {
- CPVT_WordPlace place = pIterator->GetAt();
- if (pRange && place.WordCmp(pRange->EndPos) > 0) break;
-
- CPVT_Word word;
- if (pIterator->GetWord(word))
- {
- word.WordProps.fFontSize = word.fFontSize;
-
- crCurText = ArgbEncode(255,word.WordProps.dwWordColor);
-
- if (place.LineCmp(oldplace) != 0 || word.WordProps.fCharSpace > 0.0f || word.WordProps.nHorzScale != 100 ||
- FXSYS_memcmp(&word.WordProps, &wp, sizeof(CPVT_WordProps)) != 0 ||
- crOld != crCurText)
- {
- if (sTextBuf.GetLength() > 0)
- {
- ObjArray.Add(AddTextObjToPageObjects(pPageObjects, crOld, pFontMap->GetPDFFont(wp.nFontIndex), wp.fFontSize, wp.fCharSpace, wp.nHorzScale,
- CPDF_Point(ptBT.x+ptOffset.x, ptBT.y+ptOffset.y), sTextBuf.GetByteString()));
-
- sTextBuf.Clear();
- }
-
- wp = word.WordProps;
- ptBT = word.ptWord;
- crOld = crCurText;
-
- }
-
- sTextBuf << GetPDFWordString(pFontMap, word.WordProps.nFontIndex, word.Word, 0);
-
- if (word.WordProps.nWordStyle & PVTWORD_STYLE_UNDERLINE)
- {/*
- AddLineToPageObjects(pPageObjects, crCurText,
- CPDF_Point(word.ptWord.x, word.ptWord.y + word.fDescent * 0.4f),
- CPDF_Point(word.ptWord.x + word.fWidth, word.ptWord.y + word.fDescent * 0.4f));
+void IFX_Edit::GenerateRichPageObjects(
+ CPDF_PageObjects* pPageObjects,
+ IFX_Edit* pEdit,
+ const CPDF_Point& ptOffset,
+ const CPVT_WordRange* pRange,
+ CFX_ArrayTemplate<CPDF_TextObject*>& ObjArray) {
+ FX_COLORREF crCurText = ArgbEncode(255, 0, 0, 0);
+ FX_COLORREF crOld = crCurText;
+
+ CFX_ByteTextBuf sTextBuf;
+ CPVT_WordProps wp;
+ CPDF_Point ptBT(0.0f, 0.0f);
+
+ ObjArray.RemoveAll();
+
+ if (IFX_Edit_Iterator* pIterator = pEdit->GetIterator()) {
+ if (IFX_Edit_FontMap* pFontMap = pEdit->GetFontMap()) {
+ if (pRange)
+ pIterator->SetAt(pRange->BeginPos);
+ else
+ pIterator->SetAt(0);
+
+ CPVT_WordPlace oldplace;
+
+ while (pIterator->NextWord()) {
+ CPVT_WordPlace place = pIterator->GetAt();
+ if (pRange && place.WordCmp(pRange->EndPos) > 0)
+ break;
+
+ CPVT_Word word;
+ if (pIterator->GetWord(word)) {
+ word.WordProps.fFontSize = word.fFontSize;
+
+ crCurText = ArgbEncode(255, word.WordProps.dwWordColor);
+
+ if (place.LineCmp(oldplace) != 0 ||
+ word.WordProps.fCharSpace > 0.0f ||
+ word.WordProps.nHorzScale != 100 ||
+ FXSYS_memcmp(&word.WordProps, &wp, sizeof(CPVT_WordProps)) != 0 ||
+ crOld != crCurText) {
+ if (sTextBuf.GetLength() > 0) {
+ ObjArray.Add(AddTextObjToPageObjects(
+ pPageObjects, crOld, pFontMap->GetPDFFont(wp.nFontIndex),
+ wp.fFontSize, wp.fCharSpace, wp.nHorzScale,
+ CPDF_Point(ptBT.x + ptOffset.x, ptBT.y + ptOffset.y),
+ sTextBuf.GetByteString()));
+
+ sTextBuf.Clear();
+ }
+
+ wp = word.WordProps;
+ ptBT = word.ptWord;
+ crOld = crCurText;
+ }
+
+ sTextBuf << GetPDFWordString(pFontMap, word.WordProps.nFontIndex,
+ word.Word, 0);
+
+ if (word.WordProps.nWordStyle &
+ PVTWORD_STYLE_UNDERLINE) { /*
+ AddLineToPageObjects(pPageObjects,
+ crCurText,
+ CPDF_Point(word.ptWord.x,
+ word.ptWord.y + word.fDescent *
+ 0.4f),
+ CPDF_Point(word.ptWord.x
+ + word.fWidth, word.ptWord.y +
+ word.fDescent * 0.4f));
*/
- CPDF_Rect rcUnderline = GetUnderLineRect(word);
- rcUnderline.left += ptOffset.x;
- rcUnderline.right += ptOffset.x;
- rcUnderline.top += ptOffset.y;
- rcUnderline.bottom += ptOffset.y;
-
- AddRectToPageObjects(pPageObjects, crCurText, rcUnderline);
- }
-
- if (word.WordProps.nWordStyle & PVTWORD_STYLE_CROSSOUT)
- {
- CPDF_Rect rcCrossout = GetCrossoutRect(word);
- rcCrossout.left += ptOffset.x;
- rcCrossout.right += ptOffset.x;
- rcCrossout.top += ptOffset.y;
- rcCrossout.bottom += ptOffset.y;
-
- AddRectToPageObjects(pPageObjects, crCurText, rcCrossout);
- }
-
- oldplace = place;
- }
- }
-
- if (sTextBuf.GetLength() > 0)
- {
- ObjArray.Add(AddTextObjToPageObjects(pPageObjects, crOld, pFontMap->GetPDFFont(wp.nFontIndex), wp.fFontSize, wp.fCharSpace, wp.nHorzScale,
- CPDF_Point(ptBT.x+ptOffset.x, ptBT.y+ptOffset.y), sTextBuf.GetByteString()));
- }
- }
- }
+ CPDF_Rect rcUnderline = GetUnderLineRect(word);
+ rcUnderline.left += ptOffset.x;
+ rcUnderline.right += ptOffset.x;
+ rcUnderline.top += ptOffset.y;
+ rcUnderline.bottom += ptOffset.y;
+
+ AddRectToPageObjects(pPageObjects, crCurText, rcUnderline);
+ }
+
+ if (word.WordProps.nWordStyle & PVTWORD_STYLE_CROSSOUT) {
+ CPDF_Rect rcCrossout = GetCrossoutRect(word);
+ rcCrossout.left += ptOffset.x;
+ rcCrossout.right += ptOffset.x;
+ rcCrossout.top += ptOffset.y;
+ rcCrossout.bottom += ptOffset.y;
+
+ AddRectToPageObjects(pPageObjects, crCurText, rcCrossout);
+ }
+
+ oldplace = place;
+ }
+ }
+
+ if (sTextBuf.GetLength() > 0) {
+ ObjArray.Add(AddTextObjToPageObjects(
+ pPageObjects, crOld, pFontMap->GetPDFFont(wp.nFontIndex),
+ wp.fFontSize, wp.fCharSpace, wp.nHorzScale,
+ CPDF_Point(ptBT.x + ptOffset.x, ptBT.y + ptOffset.y),
+ sTextBuf.GetByteString()));
+ }
+ }
+ }
}
-void IFX_Edit::GenerateUnderlineObjects(CPDF_PageObjects* pPageObjects, IFX_Edit* pEdit,
- const CPDF_Point& ptOffset, const CPVT_WordRange* pRange, FX_COLORREF color)
-{
-
-
- if (IFX_Edit_Iterator* pIterator = pEdit->GetIterator())
- {
- if (pEdit->GetFontMap())
- {
- if (pRange)
- pIterator->SetAt(pRange->BeginPos);
- else
- pIterator->SetAt(0);
-
- CPVT_WordPlace oldplace;
-
- while (pIterator->NextWord())
- {
- CPVT_WordPlace place = pIterator->GetAt();
- if (pRange && place.WordCmp(pRange->EndPos) > 0) break;
-
- CPVT_Word word;
- if (pIterator->GetWord(word))
- {
- CPDF_Rect rcUnderline = GetUnderLineRect(word);
- rcUnderline.left += ptOffset.x;
- rcUnderline.right += ptOffset.x;
- rcUnderline.top += ptOffset.y;
- rcUnderline.bottom += ptOffset.y;
- AddRectToPageObjects(pPageObjects, color, rcUnderline);
- }
- }
- }
- }
+void IFX_Edit::GenerateUnderlineObjects(CPDF_PageObjects* pPageObjects,
+ IFX_Edit* pEdit,
+ const CPDF_Point& ptOffset,
+ const CPVT_WordRange* pRange,
+ FX_COLORREF color) {
+ if (IFX_Edit_Iterator* pIterator = pEdit->GetIterator()) {
+ if (pEdit->GetFontMap()) {
+ if (pRange)
+ pIterator->SetAt(pRange->BeginPos);
+ else
+ pIterator->SetAt(0);
+
+ CPVT_WordPlace oldplace;
+
+ while (pIterator->NextWord()) {
+ CPVT_WordPlace place = pIterator->GetAt();
+ if (pRange && place.WordCmp(pRange->EndPos) > 0)
+ break;
+
+ CPVT_Word word;
+ if (pIterator->GetWord(word)) {
+ CPDF_Rect rcUnderline = GetUnderLineRect(word);
+ rcUnderline.left += ptOffset.x;
+ rcUnderline.right += ptOffset.x;
+ rcUnderline.top += ptOffset.y;
+ rcUnderline.bottom += ptOffset.y;
+ AddRectToPageObjects(pPageObjects, color, rcUnderline);
+ }
+ }
+ }
+ }
}
-
diff --git a/fpdfsdk/src/javascript/Consts.cpp b/fpdfsdk/src/javascript/Consts.cpp
index 9edb6f443b..5ff5528e29 100644
--- a/fpdfsdk/src/javascript/Consts.cpp
+++ b/fpdfsdk/src/javascript/Consts.cpp
@@ -14,234 +14,251 @@
/* ------------------------------ border ------------------------------ */
BEGIN_JS_STATIC_CONST(CJS_Border)
- JS_STATIC_CONST_ENTRY_STRING(s, solid)
- JS_STATIC_CONST_ENTRY_STRING(b, beveled)
- JS_STATIC_CONST_ENTRY_STRING(d, dashed)
- JS_STATIC_CONST_ENTRY_STRING(i, inset)
- JS_STATIC_CONST_ENTRY_STRING(u, underline)
+JS_STATIC_CONST_ENTRY_STRING(s, solid)
+JS_STATIC_CONST_ENTRY_STRING(b, beveled)
+JS_STATIC_CONST_ENTRY_STRING(d, dashed)
+JS_STATIC_CONST_ENTRY_STRING(i, inset)
+JS_STATIC_CONST_ENTRY_STRING(u, underline)
END_JS_STATIC_CONST()
-IMPLEMENT_JS_CLASS_CONST(CJS_Border,border)
+IMPLEMENT_JS_CLASS_CONST(CJS_Border, border)
/* ------------------------------ display ------------------------------ */
BEGIN_JS_STATIC_CONST(CJS_Display)
- JS_STATIC_CONST_ENTRY_NUMBER(visible, 0)
- JS_STATIC_CONST_ENTRY_NUMBER(hidden, 1)
- JS_STATIC_CONST_ENTRY_NUMBER(noPrint, 2)
- JS_STATIC_CONST_ENTRY_NUMBER(noView, 3)
+JS_STATIC_CONST_ENTRY_NUMBER(visible, 0)
+JS_STATIC_CONST_ENTRY_NUMBER(hidden, 1)
+JS_STATIC_CONST_ENTRY_NUMBER(noPrint, 2)
+JS_STATIC_CONST_ENTRY_NUMBER(noView, 3)
END_JS_STATIC_CONST()
-IMPLEMENT_JS_CLASS_CONST(CJS_Display,display)
+IMPLEMENT_JS_CLASS_CONST(CJS_Display, display)
/* ------------------------------ font ------------------------------ */
BEGIN_JS_STATIC_CONST(CJS_Font)
- JS_STATIC_CONST_ENTRY_STRING(Times, Times-Roman)
- JS_STATIC_CONST_ENTRY_STRING(TimesB, Times-Bold)
- JS_STATIC_CONST_ENTRY_STRING(TimesI, Times-Italic)
- JS_STATIC_CONST_ENTRY_STRING(TimesBI, Times-BoldItalic)
- JS_STATIC_CONST_ENTRY_STRING(Helv, Helvetica)
- JS_STATIC_CONST_ENTRY_STRING(HelvB, Helvetica-Bold)
- JS_STATIC_CONST_ENTRY_STRING(HelvI, Helvetica-Oblique)
- JS_STATIC_CONST_ENTRY_STRING(HelvBI, Helvetica-BoldOblique)
- JS_STATIC_CONST_ENTRY_STRING(Cour, Courier)
- JS_STATIC_CONST_ENTRY_STRING(CourB, Courier-Bold)
- JS_STATIC_CONST_ENTRY_STRING(CourI, Courier-Oblique)
- JS_STATIC_CONST_ENTRY_STRING(CourBI, Courier-BoldOblique)
- JS_STATIC_CONST_ENTRY_STRING(Symbol, Symbol)
- JS_STATIC_CONST_ENTRY_STRING(ZapfD, ZapfDingbats)
+JS_STATIC_CONST_ENTRY_STRING(Times, Times - Roman)
+JS_STATIC_CONST_ENTRY_STRING(TimesB, Times - Bold)
+JS_STATIC_CONST_ENTRY_STRING(TimesI, Times - Italic)
+JS_STATIC_CONST_ENTRY_STRING(TimesBI, Times - BoldItalic)
+JS_STATIC_CONST_ENTRY_STRING(Helv, Helvetica)
+JS_STATIC_CONST_ENTRY_STRING(HelvB, Helvetica - Bold)
+JS_STATIC_CONST_ENTRY_STRING(HelvI, Helvetica - Oblique)
+JS_STATIC_CONST_ENTRY_STRING(HelvBI, Helvetica - BoldOblique)
+JS_STATIC_CONST_ENTRY_STRING(Cour, Courier)
+JS_STATIC_CONST_ENTRY_STRING(CourB, Courier - Bold)
+JS_STATIC_CONST_ENTRY_STRING(CourI, Courier - Oblique)
+JS_STATIC_CONST_ENTRY_STRING(CourBI, Courier - BoldOblique)
+JS_STATIC_CONST_ENTRY_STRING(Symbol, Symbol)
+JS_STATIC_CONST_ENTRY_STRING(ZapfD, ZapfDingbats)
END_JS_STATIC_CONST()
-IMPLEMENT_JS_CLASS_CONST(CJS_Font,font)
+IMPLEMENT_JS_CLASS_CONST(CJS_Font, font)
/* ------------------------------ highlight ------------------------------ */
BEGIN_JS_STATIC_CONST(CJS_Highlight)
- JS_STATIC_CONST_ENTRY_STRING(n, none)
- JS_STATIC_CONST_ENTRY_STRING(i, invert)
- JS_STATIC_CONST_ENTRY_STRING(p, push)
- JS_STATIC_CONST_ENTRY_STRING(o, outline)
+JS_STATIC_CONST_ENTRY_STRING(n, none)
+JS_STATIC_CONST_ENTRY_STRING(i, invert)
+JS_STATIC_CONST_ENTRY_STRING(p, push)
+JS_STATIC_CONST_ENTRY_STRING(o, outline)
END_JS_STATIC_CONST()
-IMPLEMENT_JS_CLASS_CONST(CJS_Highlight,highlight)
+IMPLEMENT_JS_CLASS_CONST(CJS_Highlight, highlight)
/* ------------------------------ position ------------------------------ */
BEGIN_JS_STATIC_CONST(CJS_Position)
- JS_STATIC_CONST_ENTRY_NUMBER(textOnly, 0)
- JS_STATIC_CONST_ENTRY_NUMBER(iconOnly, 1)
- JS_STATIC_CONST_ENTRY_NUMBER(iconTextV, 2)
- JS_STATIC_CONST_ENTRY_NUMBER(textIconV, 3)
- JS_STATIC_CONST_ENTRY_NUMBER(iconTextH, 4)
- JS_STATIC_CONST_ENTRY_NUMBER(textIconH, 5)
- JS_STATIC_CONST_ENTRY_NUMBER(overlay, 6)
+JS_STATIC_CONST_ENTRY_NUMBER(textOnly, 0)
+JS_STATIC_CONST_ENTRY_NUMBER(iconOnly, 1)
+JS_STATIC_CONST_ENTRY_NUMBER(iconTextV, 2)
+JS_STATIC_CONST_ENTRY_NUMBER(textIconV, 3)
+JS_STATIC_CONST_ENTRY_NUMBER(iconTextH, 4)
+JS_STATIC_CONST_ENTRY_NUMBER(textIconH, 5)
+JS_STATIC_CONST_ENTRY_NUMBER(overlay, 6)
END_JS_STATIC_CONST()
-IMPLEMENT_JS_CLASS_CONST(CJS_Position,position)
+IMPLEMENT_JS_CLASS_CONST(CJS_Position, position)
/* ------------------------------ scaleHow ------------------------------ */
BEGIN_JS_STATIC_CONST(CJS_ScaleHow)
- JS_STATIC_CONST_ENTRY_NUMBER(proportional, 0)
- JS_STATIC_CONST_ENTRY_NUMBER(anamorphic, 1)
+JS_STATIC_CONST_ENTRY_NUMBER(proportional, 0)
+JS_STATIC_CONST_ENTRY_NUMBER(anamorphic, 1)
END_JS_STATIC_CONST()
-IMPLEMENT_JS_CLASS_CONST(CJS_ScaleHow,scaleHow)
+IMPLEMENT_JS_CLASS_CONST(CJS_ScaleHow, scaleHow)
/* ------------------------------ scaleWhen ------------------------------ */
BEGIN_JS_STATIC_CONST(CJS_ScaleWhen)
- JS_STATIC_CONST_ENTRY_NUMBER(always, 0)
- JS_STATIC_CONST_ENTRY_NUMBER(never, 1)
- JS_STATIC_CONST_ENTRY_NUMBER(tooBig, 2)
- JS_STATIC_CONST_ENTRY_NUMBER(tooSmall, 3)
+JS_STATIC_CONST_ENTRY_NUMBER(always, 0)
+JS_STATIC_CONST_ENTRY_NUMBER(never, 1)
+JS_STATIC_CONST_ENTRY_NUMBER(tooBig, 2)
+JS_STATIC_CONST_ENTRY_NUMBER(tooSmall, 3)
END_JS_STATIC_CONST()
-IMPLEMENT_JS_CLASS_CONST(CJS_ScaleWhen,scaleWhen)
+IMPLEMENT_JS_CLASS_CONST(CJS_ScaleWhen, scaleWhen)
/* ------------------------------ style ------------------------------ */
BEGIN_JS_STATIC_CONST(CJS_Style)
- JS_STATIC_CONST_ENTRY_STRING(ch, check)
- JS_STATIC_CONST_ENTRY_STRING(cr, cross)
- JS_STATIC_CONST_ENTRY_STRING(di, diamond)
- JS_STATIC_CONST_ENTRY_STRING(ci, circle)
- JS_STATIC_CONST_ENTRY_STRING(st, star)
- JS_STATIC_CONST_ENTRY_STRING(sq, square)
+JS_STATIC_CONST_ENTRY_STRING(ch, check)
+JS_STATIC_CONST_ENTRY_STRING(cr, cross)
+JS_STATIC_CONST_ENTRY_STRING(di, diamond)
+JS_STATIC_CONST_ENTRY_STRING(ci, circle)
+JS_STATIC_CONST_ENTRY_STRING(st, star)
+JS_STATIC_CONST_ENTRY_STRING(sq, square)
END_JS_STATIC_CONST()
-IMPLEMENT_JS_CLASS_CONST(CJS_Style,style)
-
+IMPLEMENT_JS_CLASS_CONST(CJS_Style, style)
/* ------------------------------ zoomtype ------------------------------ */
BEGIN_JS_STATIC_CONST(CJS_Zoomtype)
- JS_STATIC_CONST_ENTRY_STRING(none, NoVary)
- JS_STATIC_CONST_ENTRY_STRING(fitP, FitPage)
- JS_STATIC_CONST_ENTRY_STRING(fitW, FitWidth)
- JS_STATIC_CONST_ENTRY_STRING(fitH, FitHeight)
- JS_STATIC_CONST_ENTRY_STRING(fitV, FitVisibleWidth)
- JS_STATIC_CONST_ENTRY_STRING(pref, Preferred)
- JS_STATIC_CONST_ENTRY_STRING(refW, ReflowWidth)
+JS_STATIC_CONST_ENTRY_STRING(none, NoVary)
+JS_STATIC_CONST_ENTRY_STRING(fitP, FitPage)
+JS_STATIC_CONST_ENTRY_STRING(fitW, FitWidth)
+JS_STATIC_CONST_ENTRY_STRING(fitH, FitHeight)
+JS_STATIC_CONST_ENTRY_STRING(fitV, FitVisibleWidth)
+JS_STATIC_CONST_ENTRY_STRING(pref, Preferred)
+JS_STATIC_CONST_ENTRY_STRING(refW, ReflowWidth)
END_JS_STATIC_CONST()
-IMPLEMENT_JS_CLASS_CONST(CJS_Zoomtype,zoomtype)
-
-/* ------------------------------ CJS_GlobalConsts ------------------------------ */
-
-int CJS_GlobalConsts::Init(IJS_Runtime* pRuntime)
-{
- DEFINE_GLOBAL_CONST(pRuntime, IDS_GREATER_THAN , Invalid value: must be greater than or equal to %s.);
- DEFINE_GLOBAL_CONST(pRuntime, IDS_GT_AND_LT,Invalid value: must be greater than or equal to %s and less than or equal to %s.);
- DEFINE_GLOBAL_CONST(pRuntime, IDS_LESS_THAN,Invalid value: must be less than or equal to %s.);
- DEFINE_GLOBAL_CONST(pRuntime, IDS_INVALID_MONTH,** Invalid **);
- DEFINE_GLOBAL_CONST(pRuntime, IDS_INVALID_DATE,Invalid date/time: please ensure that the date/time exists. Field);
- DEFINE_GLOBAL_CONST(pRuntime, IDS_INVALID_VALUE,The value entered does not match the format of the field);
- DEFINE_GLOBAL_CONST(pRuntime, IDS_AM,am);
- DEFINE_GLOBAL_CONST(pRuntime, IDS_PM,pm);
- DEFINE_GLOBAL_CONST(pRuntime, IDS_MONTH_INFO,January[1]February[2]March[3]April[4]May[5]June[6]July[7]August[8]September[9]October[10]November[11]December[12]Sept[9]Jan[1]Feb[2]Mar[3]Apr[4]Jun[6]Jul[7]Aug[8]Sep[9]Oct[10]Nov[11]Dec[12]);
- DEFINE_GLOBAL_CONST(pRuntime, IDS_STARTUP_CONSOLE_MSG, ** ^_^ **);
-
- return 0;
+IMPLEMENT_JS_CLASS_CONST(CJS_Zoomtype, zoomtype)
+
+/* ------------------------------ CJS_GlobalConsts
+ * ------------------------------ */
+
+int CJS_GlobalConsts::Init(IJS_Runtime* pRuntime) {
+ DEFINE_GLOBAL_CONST(pRuntime, IDS_GREATER_THAN, Invalid value
+ : must be greater than or equal to % s.);
+ DEFINE_GLOBAL_CONST(
+ pRuntime, IDS_GT_AND_LT, Invalid value
+ : must be greater than or equal to % s and less than or equal to % s.);
+ DEFINE_GLOBAL_CONST(pRuntime, IDS_LESS_THAN, Invalid value
+ : must be less than or equal to % s.);
+ DEFINE_GLOBAL_CONST(pRuntime, IDS_INVALID_MONTH, **Invalid**);
+ DEFINE_GLOBAL_CONST(pRuntime, IDS_INVALID_DATE, Invalid date / time
+ : please ensure that the date / time exists.Field);
+ DEFINE_GLOBAL_CONST(pRuntime, IDS_INVALID_VALUE,
+ The value entered does not match the format of the field);
+ DEFINE_GLOBAL_CONST(pRuntime, IDS_AM, am);
+ DEFINE_GLOBAL_CONST(pRuntime, IDS_PM, pm);
+ DEFINE_GLOBAL_CONST(
+ pRuntime, IDS_MONTH_INFO,
+ January[1] February[2] March[3] April[4] May[5] June[6] July[7] August
+ [8] September[9] October[10] November[11] December[12] Sept[9] Jan
+ [1] Feb[2] Mar[3] Apr[4] Jun[6] Jul[7] Aug[8] Sep[9] Oct[10] Nov
+ [11] Dec[12]);
+ DEFINE_GLOBAL_CONST(pRuntime, IDS_STARTUP_CONSOLE_MSG, ** ^ _ ^ **);
+
+ return 0;
}
-/* ------------------------------ CJS_GlobalArrays ------------------------------ */
-
-int CJS_GlobalArrays::Init(IJS_Runtime* pRuntime)
-{
- {
- const FX_WCHAR* ArrayName = L"RE_NUMBER_ENTRY_DOT_SEP";
- const FX_WCHAR* ArrayContent[] = {L"[+-]?\\d*\\.?\\d*"};
- DEFINE_GLOBAL_ARRAY(pRuntime);
- }
-
- {
- const FX_WCHAR* ArrayName = L"RE_NUMBER_COMMIT_DOT_SEP";
- const FX_WCHAR* ArrayContent[] = { L"[+-]?\\d+(\\.\\d+)?", /* -1.0 or -1 */
- L"[+-]?\\.\\d+", /* -.1 */
- L"[+-]?\\d+\\." /* -1. */
- };
- DEFINE_GLOBAL_ARRAY(pRuntime);
- }
-
- {
- const FX_WCHAR* ArrayName = L"RE_NUMBER_ENTRY_COMMA_SEP";
- const FX_WCHAR* ArrayContent[] = {L"[+-]?\\d*,?\\d*"};
-
- DEFINE_GLOBAL_ARRAY(pRuntime);
- }
-
- {
- const FX_WCHAR* ArrayName = L"RE_NUMBER_COMMIT_COMMA_SEP";
- const FX_WCHAR* ArrayContent[] = { L"[+-]?\\d+([.,]\\d+)?", /* -1,0 or -1 */
- L"[+-]?[.,]\\d+", /* -,1 */
- L"[+-]?\\d+[.,]" /* -1, */
- };
- DEFINE_GLOBAL_ARRAY(pRuntime);
- }
-
- {
- const FX_WCHAR* ArrayName = L"RE_ZIP_ENTRY";
- const FX_WCHAR* ArrayContent[] = {L"\\d{0,5}"};
- DEFINE_GLOBAL_ARRAY(pRuntime);
- }
-
- {
- const FX_WCHAR* ArrayName = L"RE_ZIP_COMMIT";
- const FX_WCHAR* ArrayContent[] = {L"\\d{5}"};
- DEFINE_GLOBAL_ARRAY(pRuntime);
- }
-
- {
- const FX_WCHAR* ArrayName = L"RE_ZIP4_ENTRY";
- const FX_WCHAR* ArrayContent[] = {L"\\d{0,5}(\\.|[- ])?\\d{0,4}"};
- DEFINE_GLOBAL_ARRAY(pRuntime);
- }
-
- {
- const FX_WCHAR* ArrayName = L"RE_ZIP4_COMMIT";
- const FX_WCHAR* ArrayContent[] = {L"\\d{5}(\\.|[- ])?\\d{4}"};
- DEFINE_GLOBAL_ARRAY(pRuntime);
- }
-
- {
- const FX_WCHAR* ArrayName = L"RE_PHONE_ENTRY";
- const FX_WCHAR* ArrayContent[] = {
- L"\\d{0,3}(\\.|[- ])?\\d{0,3}(\\.|[- ])?\\d{0,4}", /* 555-1234 or 408 555-1234 */
- L"\\(\\d{0,3}", /* (408 */
- L"\\(\\d{0,3}\\)(\\.|[- ])?\\d{0,3}(\\.|[- ])?\\d{0,4}", /* (408) 555-1234 */
- /* (allow the addition of parens as an afterthought) */
- L"\\(\\d{0,3}(\\.|[- ])?\\d{0,3}(\\.|[- ])?\\d{0,4}", /* (408 555-1234 */
- L"\\d{0,3}\\)(\\.|[- ])?\\d{0,3}(\\.|[- ])?\\d{0,4}", /* 408) 555-1234 */
- L"011(\\.|[- \\d])*" /* international */
- };
- DEFINE_GLOBAL_ARRAY(pRuntime);
- }
-
- {
- const FX_WCHAR* ArrayName = L"RE_PHONE_COMMIT";
- const FX_WCHAR* ArrayContent[] = {
- L"\\d{3}(\\.|[- ])?\\d{4}", /* 555-1234 */
- L"\\d{3}(\\.|[- ])?\\d{3}(\\.|[- ])?\\d{4}", /* 408 555-1234 */
- L"\\(\\d{3}\\)(\\.|[- ])?\\d{3}(\\.|[- ])?\\d{4}", /* (408) 555-1234 */
- L"011(\\.|[- \\d])*" /* international */
- };
- DEFINE_GLOBAL_ARRAY(pRuntime);
- }
-
- {
- const FX_WCHAR* ArrayName = L"RE_SSN_ENTRY";
- const FX_WCHAR* ArrayContent[] = {L"\\d{0,3}(\\.|[- ])?\\d{0,2}(\\.|[- ])?\\d{0,4}"};
- DEFINE_GLOBAL_ARRAY(pRuntime);
- }
-
- {
- const FX_WCHAR* ArrayName = L"RE_SSN_COMMIT";
- const FX_WCHAR* ArrayContent[] = {L"\\d{3}(\\.|[- ])?\\d{2}(\\.|[- ])?\\d{4}"};
- DEFINE_GLOBAL_ARRAY(pRuntime);
- }
-
- return 0;
+/* ------------------------------ CJS_GlobalArrays
+ * ------------------------------ */
+
+int CJS_GlobalArrays::Init(IJS_Runtime* pRuntime) {
+ {
+ const FX_WCHAR* ArrayName = L"RE_NUMBER_ENTRY_DOT_SEP";
+ const FX_WCHAR* ArrayContent[] = {L"[+-]?\\d*\\.?\\d*"};
+ DEFINE_GLOBAL_ARRAY(pRuntime);
+ }
+
+ {
+ const FX_WCHAR* ArrayName = L"RE_NUMBER_COMMIT_DOT_SEP";
+ const FX_WCHAR* ArrayContent[] = {
+ L"[+-]?\\d+(\\.\\d+)?", /* -1.0 or -1 */
+ L"[+-]?\\.\\d+", /* -.1 */
+ L"[+-]?\\d+\\." /* -1. */
+ };
+ DEFINE_GLOBAL_ARRAY(pRuntime);
+ }
+
+ {
+ const FX_WCHAR* ArrayName = L"RE_NUMBER_ENTRY_COMMA_SEP";
+ const FX_WCHAR* ArrayContent[] = {L"[+-]?\\d*,?\\d*"};
+
+ DEFINE_GLOBAL_ARRAY(pRuntime);
+ }
+
+ {
+ const FX_WCHAR* ArrayName = L"RE_NUMBER_COMMIT_COMMA_SEP";
+ const FX_WCHAR* ArrayContent[] = {
+ L"[+-]?\\d+([.,]\\d+)?", /* -1,0 or -1 */
+ L"[+-]?[.,]\\d+", /* -,1 */
+ L"[+-]?\\d+[.,]" /* -1, */
+ };
+ DEFINE_GLOBAL_ARRAY(pRuntime);
+ }
+
+ {
+ const FX_WCHAR* ArrayName = L"RE_ZIP_ENTRY";
+ const FX_WCHAR* ArrayContent[] = {L"\\d{0,5}"};
+ DEFINE_GLOBAL_ARRAY(pRuntime);
+ }
+
+ {
+ const FX_WCHAR* ArrayName = L"RE_ZIP_COMMIT";
+ const FX_WCHAR* ArrayContent[] = {L"\\d{5}"};
+ DEFINE_GLOBAL_ARRAY(pRuntime);
+ }
+
+ {
+ const FX_WCHAR* ArrayName = L"RE_ZIP4_ENTRY";
+ const FX_WCHAR* ArrayContent[] = {L"\\d{0,5}(\\.|[- ])?\\d{0,4}"};
+ DEFINE_GLOBAL_ARRAY(pRuntime);
+ }
+
+ {
+ const FX_WCHAR* ArrayName = L"RE_ZIP4_COMMIT";
+ const FX_WCHAR* ArrayContent[] = {L"\\d{5}(\\.|[- ])?\\d{4}"};
+ DEFINE_GLOBAL_ARRAY(pRuntime);
+ }
+
+ {
+ const FX_WCHAR* ArrayName = L"RE_PHONE_ENTRY";
+ const FX_WCHAR* ArrayContent[] = {
+ L"\\d{0,3}(\\.|[- ])?\\d{0,3}(\\.|[- ])?\\d{0,4}", /* 555-1234 or 408
+ 555-1234 */
+ L"\\(\\d{0,3}", /* (408 */
+ L"\\(\\d{0,3}\\)(\\.|[- ])?\\d{0,3}(\\.|[- ])?\\d{0,4}", /* (408)
+ 555-1234 */
+ /* (allow the addition of parens as an afterthought) */
+ L"\\(\\d{0,3}(\\.|[- ])?\\d{0,3}(\\.|[- ])?\\d{0,4}", /* (408 555-1234
+ */
+ L"\\d{0,3}\\)(\\.|[- ])?\\d{0,3}(\\.|[- ])?\\d{0,4}", /* 408) 555-1234
+ */
+ L"011(\\.|[- \\d])*" /* international */
+ };
+ DEFINE_GLOBAL_ARRAY(pRuntime);
+ }
+
+ {
+ const FX_WCHAR* ArrayName = L"RE_PHONE_COMMIT";
+ const FX_WCHAR* ArrayContent[] = {
+ L"\\d{3}(\\.|[- ])?\\d{4}", /* 555-1234 */
+ L"\\d{3}(\\.|[- ])?\\d{3}(\\.|[- ])?\\d{4}", /* 408 555-1234 */
+ L"\\(\\d{3}\\)(\\.|[- ])?\\d{3}(\\.|[- ])?\\d{4}", /* (408) 555-1234 */
+ L"011(\\.|[- \\d])*" /* international */
+ };
+ DEFINE_GLOBAL_ARRAY(pRuntime);
+ }
+
+ {
+ const FX_WCHAR* ArrayName = L"RE_SSN_ENTRY";
+ const FX_WCHAR* ArrayContent[] = {
+ L"\\d{0,3}(\\.|[- ])?\\d{0,2}(\\.|[- ])?\\d{0,4}"};
+ DEFINE_GLOBAL_ARRAY(pRuntime);
+ }
+
+ {
+ const FX_WCHAR* ArrayName = L"RE_SSN_COMMIT";
+ const FX_WCHAR* ArrayContent[] = {
+ L"\\d{3}(\\.|[- ])?\\d{2}(\\.|[- ])?\\d{4}"};
+ DEFINE_GLOBAL_ARRAY(pRuntime);
+ }
+
+ return 0;
}
-
diff --git a/fpdfsdk/src/javascript/Document.cpp b/fpdfsdk/src/javascript/Document.cpp
index 59816f091f..7ce8449f3c 100644
--- a/fpdfsdk/src/javascript/Document.cpp
+++ b/fpdfsdk/src/javascript/Document.cpp
@@ -20,15 +20,14 @@
#include "../../../third_party/base/numerics/safe_math.h"
-static v8::Isolate* GetIsolate(IFXJS_Context* cc)
-{
- CJS_Context* pContext = (CJS_Context *)cc;
- ASSERT(pContext != NULL);
+static v8::Isolate* GetIsolate(IFXJS_Context* cc) {
+ CJS_Context* pContext = (CJS_Context*)cc;
+ ASSERT(pContext != NULL);
- CJS_Runtime* pRuntime = pContext->GetJSRuntime();
- ASSERT(pRuntime != NULL);
+ CJS_Runtime* pRuntime = pContext->GetJSRuntime();
+ ASSERT(pRuntime != NULL);
- return pRuntime->GetIsolate();
+ return pRuntime->GetIsolate();
}
BEGIN_JS_STATIC_CONST(CJS_PrintParamsObj)
@@ -43,1699 +42,1709 @@ END_JS_STATIC_METHOD()
IMPLEMENT_JS_CLASS(CJS_PrintParamsObj, PrintParamsObj)
PrintParamsObj::PrintParamsObj(CJS_Object* pJSObject)
-: CJS_EmbedObj(pJSObject)
-{
- bUI = TRUE;
- nStart = 0;
- nEnd = 0;
- bSilent = FALSE;
- bShrinkToFit = FALSE;
- bPrintAsImage = FALSE;
- bReverse = FALSE;
- bAnnotations = TRUE;
+ : CJS_EmbedObj(pJSObject) {
+ bUI = TRUE;
+ nStart = 0;
+ nEnd = 0;
+ bSilent = FALSE;
+ bShrinkToFit = FALSE;
+ bPrintAsImage = FALSE;
+ bReverse = FALSE;
+ bAnnotations = TRUE;
}
/* ---------------------- Document ---------------------- */
-#define MINWIDTH 5.0f
+#define MINWIDTH 5.0f
#define MINHEIGHT 5.0f
BEGIN_JS_STATIC_CONST(CJS_Document)
END_JS_STATIC_CONST()
BEGIN_JS_STATIC_PROP(CJS_Document)
- JS_STATIC_PROP_ENTRY(ADBE)
- JS_STATIC_PROP_ENTRY(author)
- JS_STATIC_PROP_ENTRY(baseURL)
- JS_STATIC_PROP_ENTRY(bookmarkRoot)
- JS_STATIC_PROP_ENTRY(calculate)
- JS_STATIC_PROP_ENTRY(Collab)
- JS_STATIC_PROP_ENTRY(creationDate)
- JS_STATIC_PROP_ENTRY(creator)
- JS_STATIC_PROP_ENTRY(delay)
- JS_STATIC_PROP_ENTRY(dirty)
- JS_STATIC_PROP_ENTRY(documentFileName)
- JS_STATIC_PROP_ENTRY(external)
- JS_STATIC_PROP_ENTRY(filesize)
- JS_STATIC_PROP_ENTRY(icons)
- JS_STATIC_PROP_ENTRY(info)
- JS_STATIC_PROP_ENTRY(keywords)
- JS_STATIC_PROP_ENTRY(layout)
- JS_STATIC_PROP_ENTRY(media)
- JS_STATIC_PROP_ENTRY(modDate)
- JS_STATIC_PROP_ENTRY(mouseX)
- JS_STATIC_PROP_ENTRY(mouseY)
- JS_STATIC_PROP_ENTRY(numFields)
- JS_STATIC_PROP_ENTRY(numPages)
- JS_STATIC_PROP_ENTRY(pageNum)
- JS_STATIC_PROP_ENTRY(pageWindowRect)
- JS_STATIC_PROP_ENTRY(path)
- JS_STATIC_PROP_ENTRY(producer)
- JS_STATIC_PROP_ENTRY(subject)
- JS_STATIC_PROP_ENTRY(title)
- JS_STATIC_PROP_ENTRY(zoom)
- JS_STATIC_PROP_ENTRY(zoomType)
+JS_STATIC_PROP_ENTRY(ADBE)
+JS_STATIC_PROP_ENTRY(author)
+JS_STATIC_PROP_ENTRY(baseURL)
+JS_STATIC_PROP_ENTRY(bookmarkRoot)
+JS_STATIC_PROP_ENTRY(calculate)
+JS_STATIC_PROP_ENTRY(Collab)
+JS_STATIC_PROP_ENTRY(creationDate)
+JS_STATIC_PROP_ENTRY(creator)
+JS_STATIC_PROP_ENTRY(delay)
+JS_STATIC_PROP_ENTRY(dirty)
+JS_STATIC_PROP_ENTRY(documentFileName)
+JS_STATIC_PROP_ENTRY(external)
+JS_STATIC_PROP_ENTRY(filesize)
+JS_STATIC_PROP_ENTRY(icons)
+JS_STATIC_PROP_ENTRY(info)
+JS_STATIC_PROP_ENTRY(keywords)
+JS_STATIC_PROP_ENTRY(layout)
+JS_STATIC_PROP_ENTRY(media)
+JS_STATIC_PROP_ENTRY(modDate)
+JS_STATIC_PROP_ENTRY(mouseX)
+JS_STATIC_PROP_ENTRY(mouseY)
+JS_STATIC_PROP_ENTRY(numFields)
+JS_STATIC_PROP_ENTRY(numPages)
+JS_STATIC_PROP_ENTRY(pageNum)
+JS_STATIC_PROP_ENTRY(pageWindowRect)
+JS_STATIC_PROP_ENTRY(path)
+JS_STATIC_PROP_ENTRY(producer)
+JS_STATIC_PROP_ENTRY(subject)
+JS_STATIC_PROP_ENTRY(title)
+JS_STATIC_PROP_ENTRY(zoom)
+JS_STATIC_PROP_ENTRY(zoomType)
END_JS_STATIC_PROP()
BEGIN_JS_STATIC_METHOD(CJS_Document)
- JS_STATIC_METHOD_ENTRY(addAnnot)
- JS_STATIC_METHOD_ENTRY(addField)
- JS_STATIC_METHOD_ENTRY(addLink)
- JS_STATIC_METHOD_ENTRY(addIcon)
- JS_STATIC_METHOD_ENTRY(calculateNow)
- JS_STATIC_METHOD_ENTRY(closeDoc)
- JS_STATIC_METHOD_ENTRY(createDataObject)
- JS_STATIC_METHOD_ENTRY(deletePages)
- JS_STATIC_METHOD_ENTRY(exportAsText)
- JS_STATIC_METHOD_ENTRY(exportAsFDF)
- JS_STATIC_METHOD_ENTRY(exportAsXFDF)
- JS_STATIC_METHOD_ENTRY(extractPages)
- JS_STATIC_METHOD_ENTRY(getAnnot)
- JS_STATIC_METHOD_ENTRY(getAnnots)
- JS_STATIC_METHOD_ENTRY(getAnnot3D)
- JS_STATIC_METHOD_ENTRY(getAnnots3D)
- JS_STATIC_METHOD_ENTRY(getField)
- JS_STATIC_METHOD_ENTRY(getIcon)
- JS_STATIC_METHOD_ENTRY(getLinks)
- JS_STATIC_METHOD_ENTRY(getNthFieldName)
- JS_STATIC_METHOD_ENTRY(getOCGs)
- JS_STATIC_METHOD_ENTRY(getPageBox)
- JS_STATIC_METHOD_ENTRY(getPageNthWord)
- JS_STATIC_METHOD_ENTRY(getPageNthWordQuads)
- JS_STATIC_METHOD_ENTRY(getPageNumWords)
- JS_STATIC_METHOD_ENTRY(getPrintParams)
- JS_STATIC_METHOD_ENTRY(getURL)
- JS_STATIC_METHOD_ENTRY(importAnFDF)
- JS_STATIC_METHOD_ENTRY(importAnXFDF)
- JS_STATIC_METHOD_ENTRY(importTextData)
- JS_STATIC_METHOD_ENTRY(insertPages)
- JS_STATIC_METHOD_ENTRY(mailForm)
- JS_STATIC_METHOD_ENTRY(print)
- JS_STATIC_METHOD_ENTRY(removeField)
- JS_STATIC_METHOD_ENTRY(replacePages)
- JS_STATIC_METHOD_ENTRY(resetForm)
- JS_STATIC_METHOD_ENTRY(removeIcon)
- JS_STATIC_METHOD_ENTRY(saveAs)
- JS_STATIC_METHOD_ENTRY(submitForm)
- JS_STATIC_METHOD_ENTRY(mailDoc)
+JS_STATIC_METHOD_ENTRY(addAnnot)
+JS_STATIC_METHOD_ENTRY(addField)
+JS_STATIC_METHOD_ENTRY(addLink)
+JS_STATIC_METHOD_ENTRY(addIcon)
+JS_STATIC_METHOD_ENTRY(calculateNow)
+JS_STATIC_METHOD_ENTRY(closeDoc)
+JS_STATIC_METHOD_ENTRY(createDataObject)
+JS_STATIC_METHOD_ENTRY(deletePages)
+JS_STATIC_METHOD_ENTRY(exportAsText)
+JS_STATIC_METHOD_ENTRY(exportAsFDF)
+JS_STATIC_METHOD_ENTRY(exportAsXFDF)
+JS_STATIC_METHOD_ENTRY(extractPages)
+JS_STATIC_METHOD_ENTRY(getAnnot)
+JS_STATIC_METHOD_ENTRY(getAnnots)
+JS_STATIC_METHOD_ENTRY(getAnnot3D)
+JS_STATIC_METHOD_ENTRY(getAnnots3D)
+JS_STATIC_METHOD_ENTRY(getField)
+JS_STATIC_METHOD_ENTRY(getIcon)
+JS_STATIC_METHOD_ENTRY(getLinks)
+JS_STATIC_METHOD_ENTRY(getNthFieldName)
+JS_STATIC_METHOD_ENTRY(getOCGs)
+JS_STATIC_METHOD_ENTRY(getPageBox)
+JS_STATIC_METHOD_ENTRY(getPageNthWord)
+JS_STATIC_METHOD_ENTRY(getPageNthWordQuads)
+JS_STATIC_METHOD_ENTRY(getPageNumWords)
+JS_STATIC_METHOD_ENTRY(getPrintParams)
+JS_STATIC_METHOD_ENTRY(getURL)
+JS_STATIC_METHOD_ENTRY(importAnFDF)
+JS_STATIC_METHOD_ENTRY(importAnXFDF)
+JS_STATIC_METHOD_ENTRY(importTextData)
+JS_STATIC_METHOD_ENTRY(insertPages)
+JS_STATIC_METHOD_ENTRY(mailForm)
+JS_STATIC_METHOD_ENTRY(print)
+JS_STATIC_METHOD_ENTRY(removeField)
+JS_STATIC_METHOD_ENTRY(replacePages)
+JS_STATIC_METHOD_ENTRY(resetForm)
+JS_STATIC_METHOD_ENTRY(removeIcon)
+JS_STATIC_METHOD_ENTRY(saveAs)
+JS_STATIC_METHOD_ENTRY(submitForm)
+JS_STATIC_METHOD_ENTRY(mailDoc)
END_JS_STATIC_METHOD()
IMPLEMENT_JS_CLASS(CJS_Document, Document)
-FX_BOOL CJS_Document::InitInstance(IFXJS_Context* cc)
-{
- CJS_Context* pContext = (CJS_Context*)cc;
- ASSERT(pContext != NULL);
+FX_BOOL CJS_Document::InitInstance(IFXJS_Context* cc) {
+ CJS_Context* pContext = (CJS_Context*)cc;
+ ASSERT(pContext != NULL);
- Document* pDoc = (Document*)GetEmbedObject();
- ASSERT(pDoc != NULL);
+ Document* pDoc = (Document*)GetEmbedObject();
+ ASSERT(pDoc != NULL);
- pDoc->AttachDoc(pContext->GetReaderDocument());
- pDoc->SetIsolate(pContext->GetJSRuntime()->GetIsolate());
- return TRUE;
+ pDoc->AttachDoc(pContext->GetReaderDocument());
+ pDoc->SetIsolate(pContext->GetJSRuntime()->GetIsolate());
+ return TRUE;
};
-/* --------------------------------- Document --------------------------------- */
-
-Document::Document(CJS_Object* pJSObject) : CJS_EmbedObj(pJSObject),
- m_isolate(NULL),
- m_pIconTree(NULL),
- m_pDocument(NULL),
- m_cwBaseURL(L""),
- m_bDelay(FALSE)
-{
-}
-
-Document::~Document()
-{
- if (m_pIconTree)
- {
- m_pIconTree->DeleteIconTree();
- delete m_pIconTree;
- m_pIconTree = NULL;
- }
- for (int i=0; i<m_DelayData.GetSize(); i++)
- {
- if (CJS_DelayData* pData = m_DelayData.GetAt(i))
- {
- delete pData;
- pData = NULL;
- m_DelayData.SetAt(i, NULL);
-
- }
- }
-
- m_DelayData.RemoveAll();
- m_DelayAnnotData.RemoveAll();
-}
-
-//the total number of fileds in document.
-FX_BOOL Document::numFields(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- if (vp.IsSetting()) {
- CJS_Context* pContext = static_cast<CJS_Context*>(cc);
- sError = JSGetStringFromID(pContext, IDS_STRING_JSREADONLY);
- return FALSE;
- }
- CPDFSDK_InterForm *pInterForm = m_pDocument->GetInterForm();
- CPDF_InterForm *pPDFForm = pInterForm->GetInterForm();
- vp << (int)pPDFForm->CountFields();
- return TRUE;
+/* --------------------------------- Document ---------------------------------
+ */
+
+Document::Document(CJS_Object* pJSObject)
+ : CJS_EmbedObj(pJSObject),
+ m_isolate(NULL),
+ m_pIconTree(NULL),
+ m_pDocument(NULL),
+ m_cwBaseURL(L""),
+ m_bDelay(FALSE) {}
+
+Document::~Document() {
+ if (m_pIconTree) {
+ m_pIconTree->DeleteIconTree();
+ delete m_pIconTree;
+ m_pIconTree = NULL;
+ }
+ for (int i = 0; i < m_DelayData.GetSize(); i++) {
+ if (CJS_DelayData* pData = m_DelayData.GetAt(i)) {
+ delete pData;
+ pData = NULL;
+ m_DelayData.SetAt(i, NULL);
+ }
+ }
+
+ m_DelayData.RemoveAll();
+ m_DelayAnnotData.RemoveAll();
+}
+
+// the total number of fileds in document.
+FX_BOOL Document::numFields(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ if (vp.IsSetting()) {
+ CJS_Context* pContext = static_cast<CJS_Context*>(cc);
+ sError = JSGetStringFromID(pContext, IDS_STRING_JSREADONLY);
+ return FALSE;
+ }
+ CPDFSDK_InterForm* pInterForm = m_pDocument->GetInterForm();
+ CPDF_InterForm* pPDFForm = pInterForm->GetInterForm();
+ vp << (int)pPDFForm->CountFields();
+ return TRUE;
}
-FX_BOOL Document::dirty(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- ASSERT(m_pDocument != NULL);
+FX_BOOL Document::dirty(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ ASSERT(m_pDocument != NULL);
- if (vp.IsGetting())
- {
- if (m_pDocument->GetChangeMark())
- vp << true;
- else
- vp << false;
- }
+ if (vp.IsGetting()) {
+ if (m_pDocument->GetChangeMark())
+ vp << true;
else
- {
- bool bChanged = false;
+ vp << false;
+ } else {
+ bool bChanged = false;
- vp >> bChanged;
+ vp >> bChanged;
- if (bChanged)
- m_pDocument->SetChangeMark();
- else
- m_pDocument->ClearChangeMark();
- }
+ if (bChanged)
+ m_pDocument->SetChangeMark();
+ else
+ m_pDocument->ClearChangeMark();
+ }
- return TRUE;
+ return TRUE;
}
-FX_BOOL Document::ADBE(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- ASSERT(m_pDocument != NULL);
+FX_BOOL Document::ADBE(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ ASSERT(m_pDocument != NULL);
- if (vp.IsGetting())
- {
- vp.SetNull();
- }
- else
- {
- }
+ if (vp.IsGetting()) {
+ vp.SetNull();
+ } else {
+ }
- return TRUE;
+ return TRUE;
}
-FX_BOOL Document::pageNum(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- ASSERT(m_pDocument != NULL);
+FX_BOOL Document::pageNum(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ ASSERT(m_pDocument != NULL);
- if (vp.IsGetting())
- {
- if (CPDFSDK_PageView* pPageView = m_pDocument->GetCurrentView())
- {
- vp << pPageView->GetPageIndex();
- }
+ if (vp.IsGetting()) {
+ if (CPDFSDK_PageView* pPageView = m_pDocument->GetCurrentView()) {
+ vp << pPageView->GetPageIndex();
}
- else
- {
- int iPageCount = m_pDocument->GetPageCount();
- int iPageNum = 0;
- vp >> iPageNum;
-
- CPDFDoc_Environment* pEnv = m_pDocument->GetEnv();
- if (iPageNum >= 0 && iPageNum < iPageCount)
- {
- pEnv->JS_docgotoPage(iPageNum);
- }
- else if (iPageNum >= iPageCount)
- {
- pEnv->JS_docgotoPage(iPageCount-1);
- }
- else if (iPageNum < 0)
- {
- pEnv->JS_docgotoPage(0);
- }
+ } else {
+ int iPageCount = m_pDocument->GetPageCount();
+ int iPageNum = 0;
+ vp >> iPageNum;
+
+ CPDFDoc_Environment* pEnv = m_pDocument->GetEnv();
+ if (iPageNum >= 0 && iPageNum < iPageCount) {
+ pEnv->JS_docgotoPage(iPageNum);
+ } else if (iPageNum >= iPageCount) {
+ pEnv->JS_docgotoPage(iPageCount - 1);
+ } else if (iPageNum < 0) {
+ pEnv->JS_docgotoPage(0);
}
+ }
- return TRUE;
+ return TRUE;
}
-FX_BOOL Document::ParserParams(JSObject* pObj,CJS_AnnotObj& annotobj)
-{
- // Not supported.
- return TRUE;
+FX_BOOL Document::ParserParams(JSObject* pObj, CJS_AnnotObj& annotobj) {
+ // Not supported.
+ return TRUE;
}
-FX_BOOL Document::addAnnot(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- // Not supported.
- return TRUE;
+FX_BOOL Document::addAnnot(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ // Not supported.
+ return TRUE;
}
-FX_BOOL Document::addField(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- // Not supported.
- return TRUE;
+FX_BOOL Document::addField(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ // Not supported.
+ return TRUE;
}
-FX_BOOL Document::exportAsText(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- // Unsafe, not supported.
- return TRUE;
+FX_BOOL Document::exportAsText(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ // Unsafe, not supported.
+ return TRUE;
}
-FX_BOOL Document::exportAsFDF(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- // Unsafe, not supported.
- return TRUE;
+FX_BOOL Document::exportAsFDF(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ // Unsafe, not supported.
+ return TRUE;
}
-FX_BOOL Document::exportAsXFDF(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- // Unsafe, not supported.
- return TRUE;
+FX_BOOL Document::exportAsXFDF(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ // Unsafe, not supported.
+ return TRUE;
}
-//Maps a field object in PDF document to a JavaScript variable
-//comment:
-//note: the paremter cName, this is clue how to treat if the cName is not a valiable filed name in this document
+// Maps a field object in PDF document to a JavaScript variable
+// comment:
+// note: the paremter cName, this is clue how to treat if the cName is not a
+// valiable filed name in this document
-FX_BOOL Document::getField(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- CJS_Context* pContext = (CJS_Context*)cc;
- if (params.size() < 1) {
- sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
- return FALSE;
- }
+FX_BOOL Document::getField(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ CJS_Context* pContext = (CJS_Context*)cc;
+ if (params.size() < 1) {
+ sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
+ return FALSE;
+ }
- CFX_WideString wideName = params[0].ToCFXWideString();
+ CFX_WideString wideName = params[0].ToCFXWideString();
- CPDFSDK_InterForm* pInterForm = m_pDocument->GetInterForm();
- CPDF_InterForm* pPDFForm = pInterForm->GetInterForm();
- if (pPDFForm->CountFields(wideName) <= 0)
- {
- vRet.SetNull();
- return TRUE;
- }
+ CPDFSDK_InterForm* pInterForm = m_pDocument->GetInterForm();
+ CPDF_InterForm* pPDFForm = pInterForm->GetInterForm();
+ if (pPDFForm->CountFields(wideName) <= 0) {
+ vRet.SetNull();
+ return TRUE;
+ }
- CJS_Runtime* pRuntime = pContext->GetJSRuntime();
- JSFXObject pFieldObj = JS_NewFxDynamicObj(*pRuntime, pContext, JS_GetObjDefnID(*pRuntime, L"Field"));
+ CJS_Runtime* pRuntime = pContext->GetJSRuntime();
+ JSFXObject pFieldObj = JS_NewFxDynamicObj(
+ *pRuntime, pContext, JS_GetObjDefnID(*pRuntime, L"Field"));
- v8::Isolate* isolate = GetIsolate(cc);
- CJS_Field* pJSField = (CJS_Field*)JS_GetPrivate(isolate,pFieldObj);
- Field* pField = (Field *)pJSField->GetEmbedObject();
- pField->AttachField(this, wideName);
+ v8::Isolate* isolate = GetIsolate(cc);
+ CJS_Field* pJSField = (CJS_Field*)JS_GetPrivate(isolate, pFieldObj);
+ Field* pField = (Field*)pJSField->GetEmbedObject();
+ pField->AttachField(this, wideName);
- vRet = pJSField;
- return TRUE;
+ vRet = pJSField;
+ return TRUE;
}
-//Gets the name of the nth field in the document
-FX_BOOL Document::getNthFieldName(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- CJS_Context* pContext = (CJS_Context*)cc;
- if (params.size() != 1) {
- sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
- return FALSE;
- }
+// Gets the name of the nth field in the document
+FX_BOOL Document::getNthFieldName(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ CJS_Context* pContext = (CJS_Context*)cc;
+ if (params.size() != 1) {
+ sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
+ return FALSE;
+ }
- int nIndex = params[0].ToInt();
- if (nIndex < 0) {
- sError = JSGetStringFromID(pContext, IDS_STRING_JSVALUEERROR);
- return FALSE;
- }
+ int nIndex = params[0].ToInt();
+ if (nIndex < 0) {
+ sError = JSGetStringFromID(pContext, IDS_STRING_JSVALUEERROR);
+ return FALSE;
+ }
- CPDFSDK_InterForm* pInterForm = m_pDocument->GetInterForm();
- CPDF_InterForm* pPDFForm = pInterForm->GetInterForm();
- CPDF_FormField* pField = pPDFForm->GetField(nIndex);
- if (!pField)
- return FALSE;
+ CPDFSDK_InterForm* pInterForm = m_pDocument->GetInterForm();
+ CPDF_InterForm* pPDFForm = pInterForm->GetInterForm();
+ CPDF_FormField* pField = pPDFForm->GetField(nIndex);
+ if (!pField)
+ return FALSE;
- vRet = pField->GetFullName().c_str();
- return TRUE;
+ vRet = pField->GetFullName().c_str();
+ return TRUE;
}
-FX_BOOL Document::importAnFDF(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- // Unsafe, not supported.
- return TRUE;
+FX_BOOL Document::importAnFDF(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ // Unsafe, not supported.
+ return TRUE;
}
-FX_BOOL Document::importAnXFDF(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- // Unsafe, not supported.
- return TRUE;
+FX_BOOL Document::importAnXFDF(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ // Unsafe, not supported.
+ return TRUE;
}
-FX_BOOL Document::importTextData(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- // Unsafe, not supported.
- return TRUE;
+FX_BOOL Document::importTextData(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ // Unsafe, not supported.
+ return TRUE;
}
-//exports the form data and mails the resulting fdf file as an attachment to all recipients.
-//comment: need reader supports
-//note:
-//int CPDFSDK_Document::mailForm(FX_BOOL bUI,String cto,string ccc,string cbcc,string cSubject,string cms);
-
-FX_BOOL Document::mailForm(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- ASSERT(m_pDocument != NULL);
+// exports the form data and mails the resulting fdf file as an attachment to
+// all recipients.
+// comment: need reader supports
+// note:
+// int CPDFSDK_Document::mailForm(FX_BOOL bUI,String cto,string ccc,string
+// cbcc,string cSubject,string cms);
- if (!m_pDocument->GetPermissions(FPDFPERM_EXTRACT_ACCESS)) return FALSE;
+FX_BOOL Document::mailForm(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ ASSERT(m_pDocument != NULL);
- int iLength = params.size();
+ if (!m_pDocument->GetPermissions(FPDFPERM_EXTRACT_ACCESS))
+ return FALSE;
- FX_BOOL bUI = iLength > 0 ? params[0].ToBool() : TRUE;
- CFX_WideString cTo = iLength > 1 ? params[1].ToCFXWideString() : L"";
- CFX_WideString cCc = iLength > 2 ? params[2].ToCFXWideString() : L"";
- CFX_WideString cBcc = iLength > 3 ? params[3].ToCFXWideString() : L"";
- CFX_WideString cSubject = iLength > 4 ? params[4].ToCFXWideString() : L"";
- CFX_WideString cMsg = iLength > 5 ? params[5].ToCFXWideString() : L"";
+ int iLength = params.size();
- CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)m_pDocument->GetInterForm();
- ASSERT(pInterForm != NULL);
+ FX_BOOL bUI = iLength > 0 ? params[0].ToBool() : TRUE;
+ CFX_WideString cTo = iLength > 1 ? params[1].ToCFXWideString() : L"";
+ CFX_WideString cCc = iLength > 2 ? params[2].ToCFXWideString() : L"";
+ CFX_WideString cBcc = iLength > 3 ? params[3].ToCFXWideString() : L"";
+ CFX_WideString cSubject = iLength > 4 ? params[4].ToCFXWideString() : L"";
+ CFX_WideString cMsg = iLength > 5 ? params[5].ToCFXWideString() : L"";
- CFX_ByteTextBuf textBuf;
- if (!pInterForm->ExportFormToFDFTextBuf(textBuf))
- return FALSE;
+ CPDFSDK_InterForm* pInterForm =
+ (CPDFSDK_InterForm*)m_pDocument->GetInterForm();
+ ASSERT(pInterForm != NULL);
- CJS_Context* pContext = (CJS_Context*)cc;
- ASSERT(pContext != NULL);
- CPDFDoc_Environment* pEnv = pContext->GetReaderApp();
- ASSERT(pEnv != NULL);
- CJS_Runtime* pRuntime = pContext->GetJSRuntime();
- ASSERT(pRuntime != NULL);
+ CFX_ByteTextBuf textBuf;
+ if (!pInterForm->ExportFormToFDFTextBuf(textBuf))
+ return FALSE;
- pRuntime->BeginBlock();
- pEnv->JS_docmailForm(textBuf.GetBuffer(), textBuf.GetLength(), bUI, cTo.c_str(), cSubject.c_str(), cCc.c_str(), cBcc.c_str(), cMsg.c_str());
- pRuntime->EndBlock();
- return TRUE;
+ CJS_Context* pContext = (CJS_Context*)cc;
+ ASSERT(pContext != NULL);
+ CPDFDoc_Environment* pEnv = pContext->GetReaderApp();
+ ASSERT(pEnv != NULL);
+ CJS_Runtime* pRuntime = pContext->GetJSRuntime();
+ ASSERT(pRuntime != NULL);
+
+ pRuntime->BeginBlock();
+ pEnv->JS_docmailForm(textBuf.GetBuffer(), textBuf.GetLength(), bUI,
+ cTo.c_str(), cSubject.c_str(), cCc.c_str(), cBcc.c_str(),
+ cMsg.c_str());
+ pRuntime->EndBlock();
+ return TRUE;
}
-FX_BOOL Document::print(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- CJS_Context* pContext = (CJS_Context*)cc;
- ASSERT(pContext != NULL);
- CJS_Runtime* pRuntime = pContext->GetJSRuntime();
- ASSERT(pRuntime != NULL);
-
- FX_BOOL bUI = TRUE;
- int nStart = 0;
- int nEnd = 0;
- FX_BOOL bSilent = FALSE;
- FX_BOOL bShrinkToFit = FALSE;
- FX_BOOL bPrintAsImage = FALSE;
- FX_BOOL bReverse = FALSE;
- FX_BOOL bAnnotations = FALSE;
-
- int nlength = params.size();
- if(nlength ==9)
- {
- if (params[8].GetType() == VT_fxobject)
- {
- JSFXObject pObj = params[8].ToV8Object();
- {
- if (JS_GetObjDefnID(pObj) == JS_GetObjDefnID(*pRuntime, L"PrintParamsObj"))
- {
- if (CJS_Object* pJSObj = params[8].ToCJSObject())
- {
- if (PrintParamsObj* pprintparamsObj = (PrintParamsObj*)pJSObj->GetEmbedObject())
- {
- bUI = pprintparamsObj->bUI;
- nStart = pprintparamsObj->nStart;
- nEnd = pprintparamsObj->nEnd;
- bSilent = pprintparamsObj->bSilent;
- bShrinkToFit = pprintparamsObj->bShrinkToFit;
- bPrintAsImage = pprintparamsObj->bPrintAsImage;
- bReverse = pprintparamsObj->bReverse;
- bAnnotations = pprintparamsObj->bAnnotations;
- }
- }
- }
+FX_BOOL Document::print(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ CJS_Context* pContext = (CJS_Context*)cc;
+ ASSERT(pContext != NULL);
+ CJS_Runtime* pRuntime = pContext->GetJSRuntime();
+ ASSERT(pRuntime != NULL);
+
+ FX_BOOL bUI = TRUE;
+ int nStart = 0;
+ int nEnd = 0;
+ FX_BOOL bSilent = FALSE;
+ FX_BOOL bShrinkToFit = FALSE;
+ FX_BOOL bPrintAsImage = FALSE;
+ FX_BOOL bReverse = FALSE;
+ FX_BOOL bAnnotations = FALSE;
+
+ int nlength = params.size();
+ if (nlength == 9) {
+ if (params[8].GetType() == VT_fxobject) {
+ JSFXObject pObj = params[8].ToV8Object();
+ {
+ if (JS_GetObjDefnID(pObj) ==
+ JS_GetObjDefnID(*pRuntime, L"PrintParamsObj")) {
+ if (CJS_Object* pJSObj = params[8].ToCJSObject()) {
+ if (PrintParamsObj* pprintparamsObj =
+ (PrintParamsObj*)pJSObj->GetEmbedObject()) {
+ bUI = pprintparamsObj->bUI;
+ nStart = pprintparamsObj->nStart;
+ nEnd = pprintparamsObj->nEnd;
+ bSilent = pprintparamsObj->bSilent;
+ bShrinkToFit = pprintparamsObj->bShrinkToFit;
+ bPrintAsImage = pprintparamsObj->bPrintAsImage;
+ bReverse = pprintparamsObj->bReverse;
+ bAnnotations = pprintparamsObj->bAnnotations;
}
+ }
}
- }
- else
- {
- if(nlength >= 1)
- bUI = params[0].ToBool();
- if(nlength >= 2)
- nStart = params[1].ToInt();
- if(nlength >= 3)
- nEnd = params[2].ToInt();
- if(nlength >= 4)
- bSilent = params[3].ToBool();
- if(nlength >= 5)
- bShrinkToFit = params[4].ToBool();
- if(nlength >= 6)
- bPrintAsImage = params[5].ToBool();
- if(nlength >= 7)
- bReverse = params[6].ToBool();
- if(nlength >= 8)
- bAnnotations = params[7].ToBool();
- }
-
- ASSERT(m_pDocument != NULL);
-
- if (CPDFDoc_Environment* pEnv = m_pDocument->GetEnv())
- {
- pEnv->JS_docprint(bUI, nStart, nEnd, bSilent, bShrinkToFit, bPrintAsImage, bReverse, bAnnotations);
- return TRUE;
- }
- return FALSE;
+ }
+ }
+ } else {
+ if (nlength >= 1)
+ bUI = params[0].ToBool();
+ if (nlength >= 2)
+ nStart = params[1].ToInt();
+ if (nlength >= 3)
+ nEnd = params[2].ToInt();
+ if (nlength >= 4)
+ bSilent = params[3].ToBool();
+ if (nlength >= 5)
+ bShrinkToFit = params[4].ToBool();
+ if (nlength >= 6)
+ bPrintAsImage = params[5].ToBool();
+ if (nlength >= 7)
+ bReverse = params[6].ToBool();
+ if (nlength >= 8)
+ bAnnotations = params[7].ToBool();
+ }
+
+ ASSERT(m_pDocument != NULL);
+
+ if (CPDFDoc_Environment* pEnv = m_pDocument->GetEnv()) {
+ pEnv->JS_docprint(bUI, nStart, nEnd, bSilent, bShrinkToFit, bPrintAsImage,
+ bReverse, bAnnotations);
+ return TRUE;
+ }
+ return FALSE;
}
-//removes the specified field from the document.
-//comment:
-//note: if the filed name is not retional, adobe is dumb for it.
+// removes the specified field from the document.
+// comment:
+// note: if the filed name is not retional, adobe is dumb for it.
-FX_BOOL Document::removeField(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- ASSERT(m_pDocument != NULL);
+FX_BOOL Document::removeField(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ ASSERT(m_pDocument != NULL);
- if (!(m_pDocument->GetPermissions(FPDFPERM_MODIFY) ||
- m_pDocument->GetPermissions(FPDFPERM_ANNOT_FORM))) return FALSE;
+ if (!(m_pDocument->GetPermissions(FPDFPERM_MODIFY) ||
+ m_pDocument->GetPermissions(FPDFPERM_ANNOT_FORM)))
+ return FALSE;
- CJS_Context* pContext = (CJS_Context*)cc;
- if (params.size() != 1) {
- sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
- return FALSE;
- }
+ CJS_Context* pContext = (CJS_Context*)cc;
+ if (params.size() != 1) {
+ sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
+ return FALSE;
+ }
- CFX_WideString sFieldName = params[0].ToCFXWideString();
- CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)m_pDocument->GetInterForm();
- ASSERT(pInterForm != NULL);
+ CFX_WideString sFieldName = params[0].ToCFXWideString();
+ CPDFSDK_InterForm* pInterForm =
+ (CPDFSDK_InterForm*)m_pDocument->GetInterForm();
+ ASSERT(pInterForm != NULL);
- CFX_PtrArray widgets;
- pInterForm->GetWidgets(sFieldName, widgets);
+ CFX_PtrArray widgets;
+ pInterForm->GetWidgets(sFieldName, widgets);
- int nSize = widgets.GetSize();
+ int nSize = widgets.GetSize();
- if (nSize > 0)
- {
- for (int i=0; i<nSize; i++)
- {
- CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)widgets[i];
- ASSERT(pWidget != NULL);
+ if (nSize > 0) {
+ for (int i = 0; i < nSize; i++) {
+ CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)widgets[i];
+ ASSERT(pWidget != NULL);
- CPDF_Rect rcAnnot = pWidget->GetRect();
- rcAnnot.left -= 1;
- rcAnnot.bottom -= 1;
- rcAnnot.right += 1;
- rcAnnot.top += 1;
+ CPDF_Rect rcAnnot = pWidget->GetRect();
+ rcAnnot.left -= 1;
+ rcAnnot.bottom -= 1;
+ rcAnnot.right += 1;
+ rcAnnot.top += 1;
- CFX_RectArray aRefresh;
- aRefresh.Add(rcAnnot);
+ CFX_RectArray aRefresh;
+ aRefresh.Add(rcAnnot);
- CPDF_Page* pPage = pWidget->GetPDFPage();
- ASSERT(pPage != NULL);
+ CPDF_Page* pPage = pWidget->GetPDFPage();
+ ASSERT(pPage != NULL);
- CPDFSDK_PageView* pPageView = m_pDocument->GetPageView(pPage);
- pPageView->DeleteAnnot(pWidget);
+ CPDFSDK_PageView* pPageView = m_pDocument->GetPageView(pPage);
+ pPageView->DeleteAnnot(pWidget);
- pPageView->UpdateRects(aRefresh);
- }
- m_pDocument->SetChangeMark();
+ pPageView->UpdateRects(aRefresh);
}
+ m_pDocument->SetChangeMark();
+ }
- return TRUE;
+ return TRUE;
}
-//reset filed values within a document.
-//comment:
-//note: if the fields names r not rational, aodbe is dumb for it.
+// reset filed values within a document.
+// comment:
+// note: if the fields names r not rational, aodbe is dumb for it.
-FX_BOOL Document::resetForm(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- ASSERT(m_pDocument != NULL);
+FX_BOOL Document::resetForm(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ ASSERT(m_pDocument != NULL);
- if (!(m_pDocument->GetPermissions(FPDFPERM_MODIFY) ||
+ if (!(m_pDocument->GetPermissions(FPDFPERM_MODIFY) ||
m_pDocument->GetPermissions(FPDFPERM_ANNOT_FORM) ||
- m_pDocument->GetPermissions(FPDFPERM_FILL_FORM))) return FALSE;
+ m_pDocument->GetPermissions(FPDFPERM_FILL_FORM)))
+ return FALSE;
- CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)m_pDocument->GetInterForm();
- ASSERT(pInterForm != NULL);
+ CPDFSDK_InterForm* pInterForm =
+ (CPDFSDK_InterForm*)m_pDocument->GetInterForm();
+ ASSERT(pInterForm != NULL);
- CPDF_InterForm* pPDFForm = pInterForm->GetInterForm();
- ASSERT(pPDFForm != NULL);
-
- v8::Isolate* isolate = GetIsolate(cc);
- CJS_Array aName(isolate);
-
- if (params.size() > 0)
- {
- switch (params[0].GetType())
- {
- default:
- aName.Attach(params[0].ToV8Array());
- break;
- case VT_string:
- aName.SetElement(0,params[0]);
- break;
- }
+ CPDF_InterForm* pPDFForm = pInterForm->GetInterForm();
+ ASSERT(pPDFForm != NULL);
- CFX_PtrArray aFields;
+ v8::Isolate* isolate = GetIsolate(cc);
+ CJS_Array aName(isolate);
- for (int i=0,isz=aName.GetLength(); i<isz; i++)
- {
- CJS_Value valElement(isolate);
- aName.GetElement(i,valElement);
- CFX_WideString swVal = valElement.ToCFXWideString();
+ if (params.size() > 0) {
+ switch (params[0].GetType()) {
+ default:
+ aName.Attach(params[0].ToV8Array());
+ break;
+ case VT_string:
+ aName.SetElement(0, params[0]);
+ break;
+ }
- for (int j=0,jsz=pPDFForm->CountFields(swVal); j<jsz; j++)
- {
- aFields.Add((void*)pPDFForm->GetField(j,swVal));
- }
- }
+ CFX_PtrArray aFields;
- if (aFields.GetSize() > 0)
- {
- pPDFForm->ResetForm(aFields, TRUE, TRUE);
- m_pDocument->SetChangeMark();
+ for (int i = 0, isz = aName.GetLength(); i < isz; i++) {
+ CJS_Value valElement(isolate);
+ aName.GetElement(i, valElement);
+ CFX_WideString swVal = valElement.ToCFXWideString();
- }
+ for (int j = 0, jsz = pPDFForm->CountFields(swVal); j < jsz; j++) {
+ aFields.Add((void*)pPDFForm->GetField(j, swVal));
+ }
}
- else
- {
- pPDFForm->ResetForm(TRUE);
- m_pDocument->SetChangeMark();
+ if (aFields.GetSize() > 0) {
+ pPDFForm->ResetForm(aFields, TRUE, TRUE);
+ m_pDocument->SetChangeMark();
}
+ } else {
+ pPDFForm->ResetForm(TRUE);
+ m_pDocument->SetChangeMark();
+ }
- return TRUE;
+ return TRUE;
}
-
-FX_BOOL Document::saveAs(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
+FX_BOOL Document::saveAs(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
// Unsafe, not supported.
return TRUE;
}
-
-FX_BOOL Document::submitForm(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- ASSERT(m_pDocument != NULL);
- CJS_Context* pContext = (CJS_Context*)cc;
- int nSize = params.size();
- if (nSize < 1) {
- sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
- return FALSE;
+FX_BOOL Document::submitForm(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ ASSERT(m_pDocument != NULL);
+ CJS_Context* pContext = (CJS_Context*)cc;
+ int nSize = params.size();
+ if (nSize < 1) {
+ sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
+ return FALSE;
+ }
+
+ CFX_WideString strURL;
+ FX_BOOL bFDF = TRUE;
+ FX_BOOL bEmpty = FALSE;
+ v8::Isolate* isolate = GetIsolate(cc);
+ CJS_Array aFields(isolate);
+
+ CJS_Value v = params[0];
+ if (v.GetType() == VT_string) {
+ strURL = params[0].ToCFXWideString();
+ if (nSize > 1)
+ bFDF = params[1].ToBool();
+ if (nSize > 2)
+ bEmpty = params[2].ToBool();
+ if (nSize > 3)
+ aFields.Attach(params[3].ToV8Array());
+ } else if (v.GetType() == VT_object) {
+ JSObject pObj = params[0].ToV8Object();
+ v8::Local<v8::Value> pValue = JS_GetObjectElement(isolate, pObj, L"cURL");
+ if (!pValue.IsEmpty())
+ strURL =
+ CJS_Value(isolate, pValue, GET_VALUE_TYPE(pValue)).ToCFXWideString();
+ pValue = JS_GetObjectElement(isolate, pObj, L"bFDF");
+ bFDF = CJS_Value(isolate, pValue, GET_VALUE_TYPE(pValue)).ToBool();
+ pValue = JS_GetObjectElement(isolate, pObj, L"bEmpty");
+ bEmpty = CJS_Value(isolate, pValue, GET_VALUE_TYPE(pValue)).ToBool();
+ pValue = JS_GetObjectElement(isolate, pObj, L"aFields");
+ aFields.Attach(
+ CJS_Value(isolate, pValue, GET_VALUE_TYPE(pValue)).ToV8Array());
+ }
+
+ CJS_Runtime* pRuntime = pContext->GetJSRuntime();
+ CPDFSDK_InterForm* pInterForm =
+ (CPDFSDK_InterForm*)m_pDocument->GetInterForm();
+ CPDF_InterForm* pPDFInterForm = pInterForm->GetInterForm();
+ FX_BOOL bAll = (aFields.GetLength() == 0);
+ if (bAll && bEmpty) {
+ if (pPDFInterForm->CheckRequiredFields()) {
+ pRuntime->BeginBlock();
+ pInterForm->SubmitForm(strURL, FALSE);
+ pRuntime->EndBlock();
}
+ return TRUE;
+ }
- CFX_WideString strURL;
- FX_BOOL bFDF = TRUE;
- FX_BOOL bEmpty = FALSE;
- v8::Isolate* isolate = GetIsolate(cc);
- CJS_Array aFields(isolate);
-
- CJS_Value v = params[0];
- if (v.GetType() == VT_string)
- {
- strURL = params[0].ToCFXWideString();
- if (nSize > 1)
- bFDF = params[1].ToBool();
- if (nSize > 2)
- bEmpty = params[2].ToBool();
- if (nSize > 3)
- aFields.Attach(params[3].ToV8Array());
- }
- else if (v.GetType() == VT_object)
- {
- JSObject pObj = params[0].ToV8Object();
- v8::Local<v8::Value> pValue = JS_GetObjectElement(isolate, pObj, L"cURL");
- if (!pValue.IsEmpty())
- strURL = CJS_Value(isolate, pValue, GET_VALUE_TYPE(pValue)).ToCFXWideString();
- pValue = JS_GetObjectElement(isolate, pObj, L"bFDF");
- bFDF = CJS_Value(isolate, pValue, GET_VALUE_TYPE(pValue)).ToBool();
- pValue = JS_GetObjectElement(isolate, pObj, L"bEmpty");
- bEmpty = CJS_Value(isolate, pValue, GET_VALUE_TYPE(pValue)).ToBool();
- pValue = JS_GetObjectElement(isolate, pObj,L"aFields");
- aFields.Attach(CJS_Value(isolate, pValue, GET_VALUE_TYPE(pValue)).ToV8Array());
- }
+ CFX_PtrArray fieldObjects;
+ for (int i = 0, sz = aFields.GetLength(); i < sz; i++) {
+ CJS_Value valName(isolate);
+ aFields.GetElement(i, valName);
- CJS_Runtime* pRuntime = pContext->GetJSRuntime();
- CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)m_pDocument->GetInterForm();
- CPDF_InterForm* pPDFInterForm = pInterForm->GetInterForm();
- FX_BOOL bAll = (aFields.GetLength() == 0);
- if (bAll && bEmpty)
- {
- if (pPDFInterForm->CheckRequiredFields())
- {
- pRuntime->BeginBlock();
- pInterForm->SubmitForm(strURL, FALSE);
- pRuntime->EndBlock();
- }
- return TRUE;
- }
+ CFX_WideString sName = valName.ToCFXWideString();
+ CPDF_InterForm* pPDFForm = pInterForm->GetInterForm();
+ for (int j = 0, jsz = pPDFForm->CountFields(sName); j < jsz; ++j) {
+ CPDF_FormField* pField = pPDFForm->GetField(j, sName);
+ if (!bEmpty && pField->GetValue().IsEmpty())
+ continue;
- CFX_PtrArray fieldObjects;
- for (int i=0,sz=aFields.GetLength(); i<sz; i++)
- {
- CJS_Value valName(isolate);
- aFields.GetElement(i, valName);
-
- CFX_WideString sName = valName.ToCFXWideString();
- CPDF_InterForm* pPDFForm = pInterForm->GetInterForm();
- for (int j = 0, jsz = pPDFForm->CountFields(sName); j < jsz; ++j)
- {
- CPDF_FormField* pField = pPDFForm->GetField(j, sName);
- if (!bEmpty && pField->GetValue().IsEmpty())
- continue;
-
- fieldObjects.Add(pField);
- }
+ fieldObjects.Add(pField);
}
+ }
- if (pPDFInterForm->CheckRequiredFields(&fieldObjects, TRUE))
- {
- pRuntime->BeginBlock();
- pInterForm->SubmitFields(strURL, fieldObjects, TRUE, !bFDF);
- pRuntime->EndBlock();
- }
- return TRUE;
+ if (pPDFInterForm->CheckRequiredFields(&fieldObjects, TRUE)) {
+ pRuntime->BeginBlock();
+ pInterForm->SubmitFields(strURL, fieldObjects, TRUE, !bFDF);
+ pRuntime->EndBlock();
+ }
+ return TRUE;
}
//////////////////////////////////////////////////////////////////////////////////////////////
-void Document::AttachDoc(CPDFSDK_Document *pDoc)
-{
- m_pDocument = pDoc;
+void Document::AttachDoc(CPDFSDK_Document* pDoc) {
+ m_pDocument = pDoc;
}
-CPDFSDK_Document * Document::GetReaderDoc()
-{
- return m_pDocument;
+CPDFSDK_Document* Document::GetReaderDoc() {
+ return m_pDocument;
}
-FX_BOOL Document::ExtractFileName(CPDFSDK_Document *pDoc,CFX_ByteString &strFileName)
-{
- return FALSE;
+FX_BOOL Document::ExtractFileName(CPDFSDK_Document* pDoc,
+ CFX_ByteString& strFileName) {
+ return FALSE;
}
-FX_BOOL Document::ExtractFolderName(CPDFSDK_Document *pDoc,CFX_ByteString &strFolderName)
-{
- return FALSE;
+FX_BOOL Document::ExtractFolderName(CPDFSDK_Document* pDoc,
+ CFX_ByteString& strFolderName) {
+ return FALSE;
}
-FX_BOOL Document::bookmarkRoot(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- return TRUE;
+FX_BOOL Document::bookmarkRoot(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ return TRUE;
}
-FX_BOOL Document::mailDoc(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- ASSERT(m_pDocument != NULL);
-
- FX_BOOL bUI = TRUE;
- CFX_WideString cTo = L"";
- CFX_WideString cCc = L"";
- CFX_WideString cBcc = L"";
- CFX_WideString cSubject = L"";
- CFX_WideString cMsg = L"";
-
- if (params.size() >= 1)
- bUI = params[0].ToBool();
- if (params.size() >= 2)
- cTo = params[1].ToCFXWideString();
- if (params.size() >= 3)
- cCc = params[2].ToCFXWideString();
- if (params.size() >= 4)
- cBcc = params[3].ToCFXWideString();
- if (params.size() >= 5)
- cSubject = params[4].ToCFXWideString();
- if (params.size() >= 6)
- cMsg = params[5].ToCFXWideString();
-
- v8::Isolate* isolate = GetIsolate(cc);
-
- if(params.size() >= 1 && params[0].GetType() == VT_object)
- {
- JSObject pObj = params[0].ToV8Object();
-
- v8::Local<v8::Value> pValue = JS_GetObjectElement(isolate,pObj, L"bUI");
- bUI = CJS_Value(isolate,pValue,GET_VALUE_TYPE(pValue)).ToInt();
-
- pValue = JS_GetObjectElement(isolate,pObj, L"cTo");
- cTo = CJS_Value(isolate,pValue,GET_VALUE_TYPE(pValue)).ToCFXWideString();
-
- pValue = JS_GetObjectElement(isolate,pObj, L"cCc");
- cCc = CJS_Value(isolate,pValue,GET_VALUE_TYPE(pValue)).ToCFXWideString();
-
- pValue = JS_GetObjectElement(isolate,pObj, L"cBcc");
- cBcc = CJS_Value(isolate,pValue,GET_VALUE_TYPE(pValue)).ToCFXWideString();
+FX_BOOL Document::mailDoc(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ ASSERT(m_pDocument != NULL);
+
+ FX_BOOL bUI = TRUE;
+ CFX_WideString cTo = L"";
+ CFX_WideString cCc = L"";
+ CFX_WideString cBcc = L"";
+ CFX_WideString cSubject = L"";
+ CFX_WideString cMsg = L"";
+
+ if (params.size() >= 1)
+ bUI = params[0].ToBool();
+ if (params.size() >= 2)
+ cTo = params[1].ToCFXWideString();
+ if (params.size() >= 3)
+ cCc = params[2].ToCFXWideString();
+ if (params.size() >= 4)
+ cBcc = params[3].ToCFXWideString();
+ if (params.size() >= 5)
+ cSubject = params[4].ToCFXWideString();
+ if (params.size() >= 6)
+ cMsg = params[5].ToCFXWideString();
+
+ v8::Isolate* isolate = GetIsolate(cc);
+
+ if (params.size() >= 1 && params[0].GetType() == VT_object) {
+ JSObject pObj = params[0].ToV8Object();
+
+ v8::Local<v8::Value> pValue = JS_GetObjectElement(isolate, pObj, L"bUI");
+ bUI = CJS_Value(isolate, pValue, GET_VALUE_TYPE(pValue)).ToInt();
+
+ pValue = JS_GetObjectElement(isolate, pObj, L"cTo");
+ cTo = CJS_Value(isolate, pValue, GET_VALUE_TYPE(pValue)).ToCFXWideString();
+
+ pValue = JS_GetObjectElement(isolate, pObj, L"cCc");
+ cCc = CJS_Value(isolate, pValue, GET_VALUE_TYPE(pValue)).ToCFXWideString();
+
+ pValue = JS_GetObjectElement(isolate, pObj, L"cBcc");
+ cBcc = CJS_Value(isolate, pValue, GET_VALUE_TYPE(pValue)).ToCFXWideString();
+
+ pValue = JS_GetObjectElement(isolate, pObj, L"cSubject");
+ cSubject =
+ CJS_Value(isolate, pValue, GET_VALUE_TYPE(pValue)).ToCFXWideString();
+
+ pValue = JS_GetObjectElement(isolate, pObj, L"cMsg");
+ cMsg = CJS_Value(isolate, pValue, GET_VALUE_TYPE(pValue)).ToCFXWideString();
+ }
+
+ CJS_Context* pContext = (CJS_Context*)cc;
+ ASSERT(pContext != NULL);
+ CJS_Runtime* pRuntime = pContext->GetJSRuntime();
+ ASSERT(pRuntime != NULL);
+
+ pRuntime->BeginBlock();
+ CPDFDoc_Environment* pEnv = pRuntime->GetReaderApp();
+ pEnv->JS_docmailForm(NULL, 0, bUI, cTo.c_str(), cSubject.c_str(), cCc.c_str(),
+ cBcc.c_str(), cMsg.c_str());
+ pRuntime->EndBlock();
- pValue = JS_GetObjectElement(isolate,pObj, L"cSubject");
- cSubject = CJS_Value(isolate,pValue,GET_VALUE_TYPE(pValue)).ToCFXWideString();
-
- pValue = JS_GetObjectElement(isolate,pObj, L"cMsg");
- cMsg = CJS_Value(isolate,pValue,GET_VALUE_TYPE(pValue)).ToCFXWideString();
-
- }
-
- CJS_Context* pContext = (CJS_Context*)cc;
- ASSERT(pContext != NULL);
- CJS_Runtime* pRuntime = pContext->GetJSRuntime();
- ASSERT(pRuntime != NULL);
-
- pRuntime->BeginBlock();
- CPDFDoc_Environment* pEnv = pRuntime->GetReaderApp();
- pEnv->JS_docmailForm(NULL, 0, bUI, cTo.c_str(), cSubject.c_str(), cCc.c_str(), cBcc.c_str(), cMsg.c_str());
- pRuntime->EndBlock();
-
- return TRUE;
+ return TRUE;
}
-FX_BOOL Document::author(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- ASSERT(m_pDocument != NULL);
+FX_BOOL Document::author(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ ASSERT(m_pDocument != NULL);
- CPDF_Dictionary* pDictionary = m_pDocument->GetDocument()->GetInfo();
- if (!pDictionary)return FALSE;
+ CPDF_Dictionary* pDictionary = m_pDocument->GetDocument()->GetInfo();
+ if (!pDictionary)
+ return FALSE;
- if (vp.IsGetting())
- {
- vp << pDictionary->GetUnicodeText("Author");
- return TRUE;
- }
- else
- {
- if (!m_pDocument->GetPermissions(FPDFPERM_MODIFY)) return FALSE;
-
- CFX_WideString csAuthor;
- vp >> csAuthor;
- pDictionary->SetAtString("Author", PDF_EncodeText(csAuthor));
- m_pDocument->SetChangeMark();
- return TRUE;
- }
+ if (vp.IsGetting()) {
+ vp << pDictionary->GetUnicodeText("Author");
+ return TRUE;
+ } else {
+ if (!m_pDocument->GetPermissions(FPDFPERM_MODIFY))
+ return FALSE;
+
+ CFX_WideString csAuthor;
+ vp >> csAuthor;
+ pDictionary->SetAtString("Author", PDF_EncodeText(csAuthor));
+ m_pDocument->SetChangeMark();
+ return TRUE;
+ }
}
-FX_BOOL Document::info(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- ASSERT(m_pDocument != NULL);
+FX_BOOL Document::info(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ ASSERT(m_pDocument != NULL);
- CPDF_Dictionary* pDictionary = m_pDocument->GetDocument()->GetInfo();
- if (!pDictionary)
- return FALSE;
+ CPDF_Dictionary* pDictionary = m_pDocument->GetDocument()->GetInfo();
+ if (!pDictionary)
+ return FALSE;
- CFX_WideString cwAuthor = pDictionary->GetUnicodeText("Author");
- CFX_WideString cwTitle = pDictionary->GetUnicodeText("Title");
- CFX_WideString cwSubject = pDictionary->GetUnicodeText("Subject");
- CFX_WideString cwKeywords = pDictionary->GetUnicodeText("Keywords");
- CFX_WideString cwCreator = pDictionary->GetUnicodeText("Creator");
- CFX_WideString cwProducer = pDictionary->GetUnicodeText("Producer");
- CFX_WideString cwCreationDate = pDictionary->GetUnicodeText("CreationDate");
- CFX_WideString cwModDate = pDictionary->GetUnicodeText("ModDate");
- CFX_WideString cwTrapped = pDictionary->GetUnicodeText("Trapped");
-
- v8::Isolate* isolate = GetIsolate(cc);
- if (vp.IsGetting())
- {
- CJS_Context* pContext = (CJS_Context *)cc;
- CJS_Runtime* pRuntime = pContext->GetJSRuntime();
- JSFXObject pObj = JS_NewFxDynamicObj(*pRuntime, pContext, -1);
- JS_PutObjectString(isolate, pObj, L"Author", cwAuthor.c_str());
- JS_PutObjectString(isolate, pObj, L"Title", cwTitle.c_str());
- JS_PutObjectString(isolate, pObj, L"Subject", cwSubject.c_str());
- JS_PutObjectString(isolate, pObj, L"Keywords", cwKeywords.c_str());
- JS_PutObjectString(isolate, pObj, L"Creator", cwCreator.c_str());
- JS_PutObjectString(isolate, pObj, L"Producer", cwProducer.c_str());
- JS_PutObjectString(isolate, pObj, L"CreationDate", cwCreationDate.c_str());
- JS_PutObjectString(isolate, pObj, L"ModDate", cwModDate.c_str());
- JS_PutObjectString(isolate, pObj, L"Trapped", cwTrapped.c_str());
-
- // It's to be compatible to non-standard info dictionary.
- FX_POSITION pos = pDictionary->GetStartPos();
- while(pos)
- {
- CFX_ByteString bsKey;
- CPDF_Object* pValueObj = pDictionary->GetNextElement(pos, bsKey);
- CFX_WideString wsKey = CFX_WideString::FromUTF8(bsKey, bsKey.GetLength());
- if((pValueObj->GetType()==PDFOBJ_STRING) || (pValueObj->GetType()==PDFOBJ_NAME) )
- JS_PutObjectString(isolate, pObj, wsKey.c_str(), pValueObj->GetUnicodeText().c_str());
- if(pValueObj->GetType()==PDFOBJ_NUMBER)
- JS_PutObjectNumber(isolate,pObj, wsKey.c_str(), (float)pValueObj->GetNumber());
- if(pValueObj->GetType()==PDFOBJ_BOOLEAN)
- JS_PutObjectBoolean(isolate,pObj, wsKey.c_str(), (bool)pValueObj->GetInteger());
- }
- vp << pObj;
- }
- return TRUE;
+ CFX_WideString cwAuthor = pDictionary->GetUnicodeText("Author");
+ CFX_WideString cwTitle = pDictionary->GetUnicodeText("Title");
+ CFX_WideString cwSubject = pDictionary->GetUnicodeText("Subject");
+ CFX_WideString cwKeywords = pDictionary->GetUnicodeText("Keywords");
+ CFX_WideString cwCreator = pDictionary->GetUnicodeText("Creator");
+ CFX_WideString cwProducer = pDictionary->GetUnicodeText("Producer");
+ CFX_WideString cwCreationDate = pDictionary->GetUnicodeText("CreationDate");
+ CFX_WideString cwModDate = pDictionary->GetUnicodeText("ModDate");
+ CFX_WideString cwTrapped = pDictionary->GetUnicodeText("Trapped");
+
+ v8::Isolate* isolate = GetIsolate(cc);
+ if (vp.IsGetting()) {
+ CJS_Context* pContext = (CJS_Context*)cc;
+ CJS_Runtime* pRuntime = pContext->GetJSRuntime();
+ JSFXObject pObj = JS_NewFxDynamicObj(*pRuntime, pContext, -1);
+ JS_PutObjectString(isolate, pObj, L"Author", cwAuthor.c_str());
+ JS_PutObjectString(isolate, pObj, L"Title", cwTitle.c_str());
+ JS_PutObjectString(isolate, pObj, L"Subject", cwSubject.c_str());
+ JS_PutObjectString(isolate, pObj, L"Keywords", cwKeywords.c_str());
+ JS_PutObjectString(isolate, pObj, L"Creator", cwCreator.c_str());
+ JS_PutObjectString(isolate, pObj, L"Producer", cwProducer.c_str());
+ JS_PutObjectString(isolate, pObj, L"CreationDate", cwCreationDate.c_str());
+ JS_PutObjectString(isolate, pObj, L"ModDate", cwModDate.c_str());
+ JS_PutObjectString(isolate, pObj, L"Trapped", cwTrapped.c_str());
+
+ // It's to be compatible to non-standard info dictionary.
+ FX_POSITION pos = pDictionary->GetStartPos();
+ while (pos) {
+ CFX_ByteString bsKey;
+ CPDF_Object* pValueObj = pDictionary->GetNextElement(pos, bsKey);
+ CFX_WideString wsKey = CFX_WideString::FromUTF8(bsKey, bsKey.GetLength());
+ if ((pValueObj->GetType() == PDFOBJ_STRING) ||
+ (pValueObj->GetType() == PDFOBJ_NAME))
+ JS_PutObjectString(isolate, pObj, wsKey.c_str(),
+ pValueObj->GetUnicodeText().c_str());
+ if (pValueObj->GetType() == PDFOBJ_NUMBER)
+ JS_PutObjectNumber(isolate, pObj, wsKey.c_str(),
+ (float)pValueObj->GetNumber());
+ if (pValueObj->GetType() == PDFOBJ_BOOLEAN)
+ JS_PutObjectBoolean(isolate, pObj, wsKey.c_str(),
+ (bool)pValueObj->GetInteger());
+ }
+ vp << pObj;
+ }
+ return TRUE;
}
-FX_BOOL Document::creationDate(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- CPDF_Dictionary* pDictionary = m_pDocument->GetDocument()->GetInfo();
- if (!pDictionary)
- return FALSE;
+FX_BOOL Document::creationDate(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ CPDF_Dictionary* pDictionary = m_pDocument->GetDocument()->GetInfo();
+ if (!pDictionary)
+ return FALSE;
- if (vp.IsGetting())
- {
- vp << pDictionary->GetUnicodeText("CreationDate");
- }
- else
- {
- if (!m_pDocument->GetPermissions(FPDFPERM_MODIFY))
- return FALSE;
-
- CFX_WideString csCreationDate;
- vp >> csCreationDate;
- pDictionary->SetAtString("CreationDate", PDF_EncodeText(csCreationDate));
- m_pDocument->SetChangeMark();
- }
- return TRUE;
+ if (vp.IsGetting()) {
+ vp << pDictionary->GetUnicodeText("CreationDate");
+ } else {
+ if (!m_pDocument->GetPermissions(FPDFPERM_MODIFY))
+ return FALSE;
+
+ CFX_WideString csCreationDate;
+ vp >> csCreationDate;
+ pDictionary->SetAtString("CreationDate", PDF_EncodeText(csCreationDate));
+ m_pDocument->SetChangeMark();
+ }
+ return TRUE;
}
-FX_BOOL Document::creator(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- CPDF_Dictionary* pDictionary = m_pDocument->GetDocument()->GetInfo();
- if (!pDictionary)
- return FALSE;
+FX_BOOL Document::creator(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ CPDF_Dictionary* pDictionary = m_pDocument->GetDocument()->GetInfo();
+ if (!pDictionary)
+ return FALSE;
- if (vp.IsGetting())
- {
- vp << pDictionary->GetUnicodeText("Creator");
- }
- else
- {
- if (!m_pDocument->GetPermissions(FPDFPERM_MODIFY))
- return FALSE;
-
- CFX_WideString csCreator;
- vp >> csCreator;
- pDictionary->SetAtString("Creator", PDF_EncodeText(csCreator));
- m_pDocument->SetChangeMark();
- }
- return TRUE;
+ if (vp.IsGetting()) {
+ vp << pDictionary->GetUnicodeText("Creator");
+ } else {
+ if (!m_pDocument->GetPermissions(FPDFPERM_MODIFY))
+ return FALSE;
+
+ CFX_WideString csCreator;
+ vp >> csCreator;
+ pDictionary->SetAtString("Creator", PDF_EncodeText(csCreator));
+ m_pDocument->SetChangeMark();
+ }
+ return TRUE;
}
-FX_BOOL Document::delay(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- if (vp.IsGetting())
- {
- vp << m_bDelay;
- }
- else
- {
- if (!m_pDocument->GetPermissions(FPDFPERM_MODIFY))
- return FALSE;
-
- vp >> m_bDelay;
- if (m_bDelay)
- {
- for (int i=0,sz=m_DelayData.GetSize(); i<sz; i++)
- delete m_DelayData.GetAt(i);
-
- m_DelayData.RemoveAll();
- }
- else
- {
- CFX_ArrayTemplate<CJS_DelayData*> DelayDataToProcess;
- for (int i=0,sz=m_DelayData.GetSize(); i < sz; i++)
- {
- if (CJS_DelayData* pData = m_DelayData.GetAt(i))
- {
- DelayDataToProcess.Add(pData);
- m_DelayData.SetAt(i, NULL);
- }
- }
- m_DelayData.RemoveAll();
- for (int i=0,sz=DelayDataToProcess.GetSize(); i < sz; i++)
- {
- CJS_DelayData* pData = DelayDataToProcess.GetAt(i);
- Field::DoDelay(m_pDocument, pData);
- DelayDataToProcess.SetAt(i,NULL);
- delete pData;
- }
+FX_BOOL Document::delay(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ if (vp.IsGetting()) {
+ vp << m_bDelay;
+ } else {
+ if (!m_pDocument->GetPermissions(FPDFPERM_MODIFY))
+ return FALSE;
+
+ vp >> m_bDelay;
+ if (m_bDelay) {
+ for (int i = 0, sz = m_DelayData.GetSize(); i < sz; i++)
+ delete m_DelayData.GetAt(i);
+
+ m_DelayData.RemoveAll();
+ } else {
+ CFX_ArrayTemplate<CJS_DelayData*> DelayDataToProcess;
+ for (int i = 0, sz = m_DelayData.GetSize(); i < sz; i++) {
+ if (CJS_DelayData* pData = m_DelayData.GetAt(i)) {
+ DelayDataToProcess.Add(pData);
+ m_DelayData.SetAt(i, NULL);
}
+ }
+ m_DelayData.RemoveAll();
+ for (int i = 0, sz = DelayDataToProcess.GetSize(); i < sz; i++) {
+ CJS_DelayData* pData = DelayDataToProcess.GetAt(i);
+ Field::DoDelay(m_pDocument, pData);
+ DelayDataToProcess.SetAt(i, NULL);
+ delete pData;
+ }
}
- return TRUE;
+ }
+ return TRUE;
}
-FX_BOOL Document::keywords(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- CPDF_Dictionary* pDictionary = m_pDocument->GetDocument()->GetInfo();
- if (!pDictionary)
- return FALSE;
+FX_BOOL Document::keywords(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ CPDF_Dictionary* pDictionary = m_pDocument->GetDocument()->GetInfo();
+ if (!pDictionary)
+ return FALSE;
- if (vp.IsGetting())
- {
- vp << pDictionary->GetUnicodeText("Keywords");
- }
- else
- {
- if (!m_pDocument->GetPermissions(FPDFPERM_MODIFY))
- return FALSE;
-
- CFX_WideString csKeywords;
- vp >> csKeywords;
- pDictionary->SetAtString("Keywords", PDF_EncodeText(csKeywords));
- m_pDocument->SetChangeMark();
- }
- return TRUE;
+ if (vp.IsGetting()) {
+ vp << pDictionary->GetUnicodeText("Keywords");
+ } else {
+ if (!m_pDocument->GetPermissions(FPDFPERM_MODIFY))
+ return FALSE;
+
+ CFX_WideString csKeywords;
+ vp >> csKeywords;
+ pDictionary->SetAtString("Keywords", PDF_EncodeText(csKeywords));
+ m_pDocument->SetChangeMark();
+ }
+ return TRUE;
}
-FX_BOOL Document::modDate(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- CPDF_Dictionary* pDictionary = m_pDocument->GetDocument()->GetInfo();
- if (!pDictionary)
- return FALSE;
+FX_BOOL Document::modDate(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ CPDF_Dictionary* pDictionary = m_pDocument->GetDocument()->GetInfo();
+ if (!pDictionary)
+ return FALSE;
- if (vp.IsGetting())
- {
- vp << pDictionary->GetUnicodeText("ModDate");
- }
- else
- {
- if (!m_pDocument->GetPermissions(FPDFPERM_MODIFY))
- return FALSE;
-
- CFX_WideString csmodDate;
- vp >> csmodDate;
- pDictionary->SetAtString("ModDate", PDF_EncodeText(csmodDate));
- m_pDocument->SetChangeMark();
- }
- return TRUE;
+ if (vp.IsGetting()) {
+ vp << pDictionary->GetUnicodeText("ModDate");
+ } else {
+ if (!m_pDocument->GetPermissions(FPDFPERM_MODIFY))
+ return FALSE;
+
+ CFX_WideString csmodDate;
+ vp >> csmodDate;
+ pDictionary->SetAtString("ModDate", PDF_EncodeText(csmodDate));
+ m_pDocument->SetChangeMark();
+ }
+ return TRUE;
}
-FX_BOOL Document::producer(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- CPDF_Dictionary* pDictionary = m_pDocument->GetDocument()->GetInfo();
- if (!pDictionary)
- return FALSE;
+FX_BOOL Document::producer(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ CPDF_Dictionary* pDictionary = m_pDocument->GetDocument()->GetInfo();
+ if (!pDictionary)
+ return FALSE;
- if (vp.IsGetting())
- {
- vp << pDictionary->GetUnicodeText("Producer");
- }
- else
- {
- if (!m_pDocument->GetPermissions(FPDFPERM_MODIFY))
- return FALSE;
-
- CFX_WideString csproducer;
- vp >> csproducer;
- pDictionary->SetAtString("Producer", PDF_EncodeText(csproducer));
- m_pDocument->SetChangeMark();
- }
- return TRUE;
+ if (vp.IsGetting()) {
+ vp << pDictionary->GetUnicodeText("Producer");
+ } else {
+ if (!m_pDocument->GetPermissions(FPDFPERM_MODIFY))
+ return FALSE;
+
+ CFX_WideString csproducer;
+ vp >> csproducer;
+ pDictionary->SetAtString("Producer", PDF_EncodeText(csproducer));
+ m_pDocument->SetChangeMark();
+ }
+ return TRUE;
}
-FX_BOOL Document::subject(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- CPDF_Dictionary* pDictionary = m_pDocument->GetDocument()->GetInfo();
- if (!pDictionary)
- return FALSE;
+FX_BOOL Document::subject(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ CPDF_Dictionary* pDictionary = m_pDocument->GetDocument()->GetInfo();
+ if (!pDictionary)
+ return FALSE;
- if (vp.IsGetting())
- {
- vp << pDictionary->GetUnicodeText("Subject");
- }
- else
- {
- if (!m_pDocument->GetPermissions(FPDFPERM_MODIFY))
- return FALSE;
-
- CFX_WideString cssubject;
- vp >> cssubject;
- pDictionary->SetAtString("Subject", PDF_EncodeText(cssubject));
- m_pDocument->SetChangeMark();
- }
- return TRUE;
+ if (vp.IsGetting()) {
+ vp << pDictionary->GetUnicodeText("Subject");
+ } else {
+ if (!m_pDocument->GetPermissions(FPDFPERM_MODIFY))
+ return FALSE;
+
+ CFX_WideString cssubject;
+ vp >> cssubject;
+ pDictionary->SetAtString("Subject", PDF_EncodeText(cssubject));
+ m_pDocument->SetChangeMark();
+ }
+ return TRUE;
}
-FX_BOOL Document::title(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- if (m_pDocument == NULL || m_pDocument->GetDocument() == NULL)
- return FALSE;
+FX_BOOL Document::title(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ if (m_pDocument == NULL || m_pDocument->GetDocument() == NULL)
+ return FALSE;
- CPDF_Dictionary* pDictionary = m_pDocument->GetDocument()->GetInfo();
- if (!pDictionary)
- return FALSE;
+ CPDF_Dictionary* pDictionary = m_pDocument->GetDocument()->GetInfo();
+ if (!pDictionary)
+ return FALSE;
- if (vp.IsGetting())
- {
- vp << pDictionary->GetUnicodeText("Title");
- }
- else
- {
- if (!m_pDocument->GetPermissions(FPDFPERM_MODIFY))
- return FALSE;
-
- CFX_WideString cstitle;
- vp >> cstitle;
- pDictionary->SetAtString("Title", PDF_EncodeText(cstitle));
- m_pDocument->SetChangeMark();
- }
- return TRUE;
+ if (vp.IsGetting()) {
+ vp << pDictionary->GetUnicodeText("Title");
+ } else {
+ if (!m_pDocument->GetPermissions(FPDFPERM_MODIFY))
+ return FALSE;
+
+ CFX_WideString cstitle;
+ vp >> cstitle;
+ pDictionary->SetAtString("Title", PDF_EncodeText(cstitle));
+ m_pDocument->SetChangeMark();
+ }
+ return TRUE;
}
-FX_BOOL Document::numPages(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- if (vp.IsSetting()) {
- CJS_Context* pContext = static_cast<CJS_Context*>(cc);
- sError = JSGetStringFromID(pContext, IDS_STRING_JSREADONLY);
- return FALSE;
- }
- vp << m_pDocument->GetPageCount();
- return TRUE;
+FX_BOOL Document::numPages(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ if (vp.IsSetting()) {
+ CJS_Context* pContext = static_cast<CJS_Context*>(cc);
+ sError = JSGetStringFromID(pContext, IDS_STRING_JSREADONLY);
+ return FALSE;
+ }
+ vp << m_pDocument->GetPageCount();
+ return TRUE;
}
-FX_BOOL Document::external(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- //In Chrome case,should always return true.
- if (vp.IsGetting()) {
- vp << true;
- }
- return TRUE;
+FX_BOOL Document::external(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ // In Chrome case,should always return true.
+ if (vp.IsGetting()) {
+ vp << true;
+ }
+ return TRUE;
}
-FX_BOOL Document::filesize(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- if (vp.IsSetting()) {
- CJS_Context* pContext = static_cast<CJS_Context*>(cc);
- sError = JSGetStringFromID(pContext, IDS_STRING_JSREADONLY);
- return FALSE;
- }
- vp << 0;
- return TRUE;
+FX_BOOL Document::filesize(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ if (vp.IsSetting()) {
+ CJS_Context* pContext = static_cast<CJS_Context*>(cc);
+ sError = JSGetStringFromID(pContext, IDS_STRING_JSREADONLY);
+ return FALSE;
+ }
+ vp << 0;
+ return TRUE;
}
-FX_BOOL Document::mouseX(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- return TRUE;
+FX_BOOL Document::mouseX(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ return TRUE;
}
-FX_BOOL Document::mouseY(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- return TRUE;
+FX_BOOL Document::mouseY(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ return TRUE;
}
-FX_BOOL Document::baseURL(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- if (vp.IsGetting())
- {
- vp << m_cwBaseURL;
- }
- else
- {
- vp >> m_cwBaseURL;
- }
- return TRUE;
+FX_BOOL Document::baseURL(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ if (vp.IsGetting()) {
+ vp << m_cwBaseURL;
+ } else {
+ vp >> m_cwBaseURL;
+ }
+ return TRUE;
}
-FX_BOOL Document::calculate(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- ASSERT(m_pDocument != NULL);
+FX_BOOL Document::calculate(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ ASSERT(m_pDocument != NULL);
- CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)m_pDocument->GetInterForm();
- ASSERT(pInterForm != NULL);
+ CPDFSDK_InterForm* pInterForm =
+ (CPDFSDK_InterForm*)m_pDocument->GetInterForm();
+ ASSERT(pInterForm != NULL);
- if (vp.IsGetting())
- {
- if (pInterForm->IsCalculateEnabled())
- vp << true;
- else
- vp << false;
- }
+ if (vp.IsGetting()) {
+ if (pInterForm->IsCalculateEnabled())
+ vp << true;
else
- {
- bool bCalculate;
- vp >> bCalculate;
-
- pInterForm->EnableCalculate(bCalculate);
- }
+ vp << false;
+ } else {
+ bool bCalculate;
+ vp >> bCalculate;
- return TRUE;
-}
+ pInterForm->EnableCalculate(bCalculate);
+ }
-FX_BOOL Document::documentFileName(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- if (vp.IsSetting()) {
- CJS_Context* pContext = static_cast<CJS_Context*>(cc);
- sError = JSGetStringFromID(pContext, IDS_STRING_JSREADONLY);
- return FALSE;
- }
- CFX_WideString wsFilePath = m_pDocument->GetPath();
- int32_t i = wsFilePath.GetLength() - 1;
- for ( ; i >= 0; i-- )
- {
- if ( wsFilePath.GetAt( i ) == L'\\' || wsFilePath.GetAt( i ) == L'/' )
- break;
- }
- if ( i >= 0 && i < wsFilePath.GetLength() - 1 )
- {
- vp << ( wsFilePath.GetBuffer( wsFilePath.GetLength() ) + i + 1 );
- }else{
- vp << L"";
- }
- return TRUE;
+ return TRUE;
}
-CFX_WideString Document::ReversalStr(CFX_WideString cbFrom)
-{
- size_t iLength = cbFrom.GetLength();
- pdfium::base::CheckedNumeric<size_t> iSize = sizeof(wchar_t);
- iSize *= (iLength + 1);
- wchar_t* pResult = (wchar_t*)malloc(iSize.ValueOrDie());
- wchar_t* pFrom = (wchar_t*)cbFrom.GetBuffer(iLength);
-
- for (size_t i = 0; i < iLength; i++)
- {
- pResult[i] = *(pFrom + iLength - i - 1);
- }
- pResult[iLength] = L'\0';
-
- cbFrom.ReleaseBuffer();
- CFX_WideString cbRet = CFX_WideString(pResult);
- free(pResult);
- pResult = NULL;
- return cbRet;
-}
-
-CFX_WideString Document::CutString(CFX_WideString cbFrom)
-{
- size_t iLength = cbFrom.GetLength();
- pdfium::base::CheckedNumeric<size_t> iSize = sizeof(wchar_t);
- iSize *= (iLength + 1);
- wchar_t* pResult = (wchar_t*)malloc(iSize.ValueOrDie());
- wchar_t* pFrom = (wchar_t*)cbFrom.GetBuffer(iLength);
-
- for (int i = 0; i < iLength; i++)
- {
- if (pFrom[i] == L'\\' || pFrom[i] == L'/')
- {
- pResult[i] = L'\0';
- break;
- }
- pResult[i] = pFrom[i];
- }
- pResult[iLength] = L'\0';
-
- cbFrom.ReleaseBuffer();
- CFX_WideString cbRet = CFX_WideString(pResult);
- free(pResult);
- pResult = NULL;
- return cbRet;
+FX_BOOL Document::documentFileName(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ if (vp.IsSetting()) {
+ CJS_Context* pContext = static_cast<CJS_Context*>(cc);
+ sError = JSGetStringFromID(pContext, IDS_STRING_JSREADONLY);
+ return FALSE;
+ }
+ CFX_WideString wsFilePath = m_pDocument->GetPath();
+ int32_t i = wsFilePath.GetLength() - 1;
+ for (; i >= 0; i--) {
+ if (wsFilePath.GetAt(i) == L'\\' || wsFilePath.GetAt(i) == L'/')
+ break;
+ }
+ if (i >= 0 && i < wsFilePath.GetLength() - 1) {
+ vp << (wsFilePath.GetBuffer(wsFilePath.GetLength()) + i + 1);
+ } else {
+ vp << L"";
+ }
+ return TRUE;
}
-FX_BOOL Document::path(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- if (vp.IsSetting()) {
- CJS_Context* pContext = static_cast<CJS_Context*>(cc);
- sError = JSGetStringFromID(pContext, IDS_STRING_JSREADONLY);
- return FALSE;
- }
- vp << app::SysPathToPDFPath(m_pDocument->GetPath());
- return TRUE;
+CFX_WideString Document::ReversalStr(CFX_WideString cbFrom) {
+ size_t iLength = cbFrom.GetLength();
+ pdfium::base::CheckedNumeric<size_t> iSize = sizeof(wchar_t);
+ iSize *= (iLength + 1);
+ wchar_t* pResult = (wchar_t*)malloc(iSize.ValueOrDie());
+ wchar_t* pFrom = (wchar_t*)cbFrom.GetBuffer(iLength);
+
+ for (size_t i = 0; i < iLength; i++) {
+ pResult[i] = *(pFrom + iLength - i - 1);
+ }
+ pResult[iLength] = L'\0';
+
+ cbFrom.ReleaseBuffer();
+ CFX_WideString cbRet = CFX_WideString(pResult);
+ free(pResult);
+ pResult = NULL;
+ return cbRet;
+}
+
+CFX_WideString Document::CutString(CFX_WideString cbFrom) {
+ size_t iLength = cbFrom.GetLength();
+ pdfium::base::CheckedNumeric<size_t> iSize = sizeof(wchar_t);
+ iSize *= (iLength + 1);
+ wchar_t* pResult = (wchar_t*)malloc(iSize.ValueOrDie());
+ wchar_t* pFrom = (wchar_t*)cbFrom.GetBuffer(iLength);
+
+ for (int i = 0; i < iLength; i++) {
+ if (pFrom[i] == L'\\' || pFrom[i] == L'/') {
+ pResult[i] = L'\0';
+ break;
+ }
+ pResult[i] = pFrom[i];
+ }
+ pResult[iLength] = L'\0';
+
+ cbFrom.ReleaseBuffer();
+ CFX_WideString cbRet = CFX_WideString(pResult);
+ free(pResult);
+ pResult = NULL;
+ return cbRet;
+}
+
+FX_BOOL Document::path(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ if (vp.IsSetting()) {
+ CJS_Context* pContext = static_cast<CJS_Context*>(cc);
+ sError = JSGetStringFromID(pContext, IDS_STRING_JSREADONLY);
+ return FALSE;
+ }
+ vp << app::SysPathToPDFPath(m_pDocument->GetPath());
+ return TRUE;
}
-FX_BOOL Document::pageWindowRect(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- return TRUE;
+FX_BOOL Document::pageWindowRect(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ return TRUE;
}
-FX_BOOL Document::layout(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- return TRUE;
+FX_BOOL Document::layout(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ return TRUE;
}
-FX_BOOL Document::addLink(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- return TRUE;
+FX_BOOL Document::addLink(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ return TRUE;
}
-FX_BOOL Document::closeDoc(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- ASSERT(m_pDocument != NULL);
- return TRUE;
+FX_BOOL Document::closeDoc(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ ASSERT(m_pDocument != NULL);
+ return TRUE;
}
-FX_BOOL Document::getPageBox(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- return TRUE;
+FX_BOOL Document::getPageBox(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ return TRUE;
}
-FX_BOOL Document::getAnnot(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- return TRUE;
+FX_BOOL Document::getAnnot(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ return TRUE;
}
-FX_BOOL Document::getAnnots(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- vRet.SetNull();
- return TRUE;
+FX_BOOL Document::getAnnots(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ vRet.SetNull();
+ return TRUE;
}
-FX_BOOL Document::getAnnot3D(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- vRet.SetNull();
- return TRUE;
+FX_BOOL Document::getAnnot3D(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ vRet.SetNull();
+ return TRUE;
}
-FX_BOOL Document::getAnnots3D(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- vRet = VT_undefined;
- return TRUE;
+FX_BOOL Document::getAnnots3D(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ vRet = VT_undefined;
+ return TRUE;
}
-FX_BOOL Document::getOCGs(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- return TRUE;
+FX_BOOL Document::getOCGs(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ return TRUE;
}
-FX_BOOL Document::getLinks(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- return TRUE;
+FX_BOOL Document::getLinks(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ return TRUE;
}
-bool Document::IsEnclosedInRect(CFX_FloatRect rect, CFX_FloatRect LinkRect)
-{
- return (rect.left <= LinkRect.left &&
- rect.top <= LinkRect.top &&
- rect.right >= LinkRect.right &&
- rect.bottom >= LinkRect.bottom);
+bool Document::IsEnclosedInRect(CFX_FloatRect rect, CFX_FloatRect LinkRect) {
+ return (rect.left <= LinkRect.left && rect.top <= LinkRect.top &&
+ rect.right >= LinkRect.right && rect.bottom >= LinkRect.bottom);
}
-void IconTree::InsertIconElement(IconElement* pNewIcon)
-{
- if (!pNewIcon)return;
+void IconTree::InsertIconElement(IconElement* pNewIcon) {
+ if (!pNewIcon)
+ return;
- if (m_pHead == NULL && m_pEnd == NULL)
- {
- m_pHead = m_pEnd = pNewIcon;
- m_iLength++;
- }
- else
- {
- m_pEnd->NextIcon = pNewIcon;
- m_pEnd = pNewIcon;
- m_iLength++;
- }
+ if (m_pHead == NULL && m_pEnd == NULL) {
+ m_pHead = m_pEnd = pNewIcon;
+ m_iLength++;
+ } else {
+ m_pEnd->NextIcon = pNewIcon;
+ m_pEnd = pNewIcon;
+ m_iLength++;
+ }
}
-void IconTree::DeleteIconTree()
-{
- if (!m_pHead || !m_pEnd)return;
+void IconTree::DeleteIconTree() {
+ if (!m_pHead || !m_pEnd)
+ return;
- IconElement* pTemp = NULL;
- while(m_pEnd != m_pHead)
- {
- pTemp = m_pHead;
- m_pHead = m_pHead->NextIcon;
- delete pTemp;
- }
+ IconElement* pTemp = NULL;
+ while (m_pEnd != m_pHead) {
+ pTemp = m_pHead;
+ m_pHead = m_pHead->NextIcon;
+ delete pTemp;
+ }
- delete m_pEnd;
- m_pHead = NULL;
- m_pEnd = NULL;
+ delete m_pEnd;
+ m_pHead = NULL;
+ m_pEnd = NULL;
}
-int IconTree::GetLength()
-{
- return m_iLength;
+int IconTree::GetLength() {
+ return m_iLength;
}
-IconElement* IconTree::operator [](int iIndex)
-{
- if (iIndex >= 0 && iIndex <= m_iLength)
- {
- IconElement* pTemp = m_pHead;
- for (int i = 0; i < iIndex; i++)
- {
- pTemp = pTemp->NextIcon;
- }
- return pTemp;
+IconElement* IconTree::operator[](int iIndex) {
+ if (iIndex >= 0 && iIndex <= m_iLength) {
+ IconElement* pTemp = m_pHead;
+ for (int i = 0; i < iIndex; i++) {
+ pTemp = pTemp->NextIcon;
}
- return NULL;
+ return pTemp;
+ }
+ return NULL;
}
-FX_BOOL Document::addIcon(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- CJS_Context* pContext = (CJS_Context*)cc;
- if (params.size() != 2) {
- sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
- return FALSE;
- }
+FX_BOOL Document::addIcon(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ CJS_Context* pContext = (CJS_Context*)cc;
+ if (params.size() != 2) {
+ sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
+ return FALSE;
+ }
- CFX_WideString swIconName = params[0].ToCFXWideString();
- JSFXObject pJSIcon = params[1].ToV8Object();
+ CFX_WideString swIconName = params[0].ToCFXWideString();
+ JSFXObject pJSIcon = params[1].ToV8Object();
- CJS_Runtime* pRuntime = pContext->GetJSRuntime();
- if (JS_GetObjDefnID(pJSIcon) != JS_GetObjDefnID(*pRuntime, L"Icon")) {
- sError = JSGetStringFromID(pContext, IDS_STRING_JSTYPEERROR);
- return FALSE;
- }
+ CJS_Runtime* pRuntime = pContext->GetJSRuntime();
+ if (JS_GetObjDefnID(pJSIcon) != JS_GetObjDefnID(*pRuntime, L"Icon")) {
+ sError = JSGetStringFromID(pContext, IDS_STRING_JSTYPEERROR);
+ return FALSE;
+ }
- CJS_EmbedObj* pEmbedObj = params[1].ToCJSObject()->GetEmbedObject();
- if (!pEmbedObj) {
- sError = JSGetStringFromID(pContext, IDS_STRING_JSTYPEERROR);
- return FALSE;
- }
+ CJS_EmbedObj* pEmbedObj = params[1].ToCJSObject()->GetEmbedObject();
+ if (!pEmbedObj) {
+ sError = JSGetStringFromID(pContext, IDS_STRING_JSTYPEERROR);
+ return FALSE;
+ }
- Icon* pIcon = (Icon*)pEmbedObj;
- if (!m_pIconTree)
- m_pIconTree = new IconTree();
+ Icon* pIcon = (Icon*)pEmbedObj;
+ if (!m_pIconTree)
+ m_pIconTree = new IconTree();
- IconElement* pNewIcon = new IconElement();
- pNewIcon->IconName = swIconName;
- pNewIcon->NextIcon = NULL;
- pNewIcon->IconStream = pIcon;
- m_pIconTree->InsertIconElement(pNewIcon);
- return TRUE;
+ IconElement* pNewIcon = new IconElement();
+ pNewIcon->IconName = swIconName;
+ pNewIcon->NextIcon = NULL;
+ pNewIcon->IconStream = pIcon;
+ m_pIconTree->InsertIconElement(pNewIcon);
+ return TRUE;
}
-FX_BOOL Document::icons(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- if (vp.IsSetting()) {
- CJS_Context* pContext = static_cast<CJS_Context*>(cc);
- sError = JSGetStringFromID(pContext, IDS_STRING_JSREADONLY);
- return FALSE;
- }
+FX_BOOL Document::icons(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ if (vp.IsSetting()) {
+ CJS_Context* pContext = static_cast<CJS_Context*>(cc);
+ sError = JSGetStringFromID(pContext, IDS_STRING_JSREADONLY);
+ return FALSE;
+ }
- if (!m_pIconTree)
- {
- vp.SetNull();
- return TRUE;
- }
+ if (!m_pIconTree) {
+ vp.SetNull();
+ return TRUE;
+ }
- CJS_Array Icons(m_isolate);
- IconElement* pIconElement = NULL;
- int iIconTreeLength = m_pIconTree->GetLength();
+ CJS_Array Icons(m_isolate);
+ IconElement* pIconElement = NULL;
+ int iIconTreeLength = m_pIconTree->GetLength();
- CJS_Context* pContext = (CJS_Context *)cc;
- CJS_Runtime* pRuntime = pContext->GetJSRuntime();
+ CJS_Context* pContext = (CJS_Context*)cc;
+ CJS_Runtime* pRuntime = pContext->GetJSRuntime();
- for (int i = 0; i < iIconTreeLength; i++)
- {
- pIconElement = (*m_pIconTree)[i];
+ for (int i = 0; i < iIconTreeLength; i++) {
+ pIconElement = (*m_pIconTree)[i];
- JSFXObject pObj = JS_NewFxDynamicObj(*pRuntime, pContext, JS_GetObjDefnID(*pRuntime, L"Icon"));
- if (pObj.IsEmpty()) return FALSE;
+ JSFXObject pObj = JS_NewFxDynamicObj(*pRuntime, pContext,
+ JS_GetObjDefnID(*pRuntime, L"Icon"));
+ if (pObj.IsEmpty())
+ return FALSE;
- CJS_Icon * pJS_Icon = (CJS_Icon *)JS_GetPrivate(pObj);
- if (!pJS_Icon) return FALSE;
+ CJS_Icon* pJS_Icon = (CJS_Icon*)JS_GetPrivate(pObj);
+ if (!pJS_Icon)
+ return FALSE;
- Icon* pIcon = (Icon*)pJS_Icon->GetEmbedObject();
- if (!pIcon)return FALSE;
+ Icon* pIcon = (Icon*)pJS_Icon->GetEmbedObject();
+ if (!pIcon)
+ return FALSE;
- pIcon->SetStream(pIconElement->IconStream->GetStream());
- pIcon->SetIconName(pIconElement->IconName);
- Icons.SetElement(i, CJS_Value(m_isolate,pJS_Icon));
- }
+ pIcon->SetStream(pIconElement->IconStream->GetStream());
+ pIcon->SetIconName(pIconElement->IconName);
+ Icons.SetElement(i, CJS_Value(m_isolate, pJS_Icon));
+ }
- vp << Icons;
- return TRUE;
+ vp << Icons;
+ return TRUE;
}
-FX_BOOL Document::getIcon(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- CJS_Context* pContext = (CJS_Context *)cc;
- if (params.size() != 1) {
- sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
- return FALSE;
- }
+FX_BOOL Document::getIcon(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ CJS_Context* pContext = (CJS_Context*)cc;
+ if (params.size() != 1) {
+ sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
+ return FALSE;
+ }
- if(!m_pIconTree)
- return FALSE;
- CFX_WideString swIconName = params[0].ToCFXWideString();
- int iIconCounts = m_pIconTree->GetLength();
+ if (!m_pIconTree)
+ return FALSE;
+ CFX_WideString swIconName = params[0].ToCFXWideString();
+ int iIconCounts = m_pIconTree->GetLength();
- CJS_Runtime* pRuntime = pContext->GetJSRuntime();
+ CJS_Runtime* pRuntime = pContext->GetJSRuntime();
- for (int i = 0; i < iIconCounts; i++)
- {
- if ((*m_pIconTree)[i]->IconName == swIconName)
- {
- Icon* pRetIcon = (*m_pIconTree)[i]->IconStream;
+ for (int i = 0; i < iIconCounts; i++) {
+ if ((*m_pIconTree)[i]->IconName == swIconName) {
+ Icon* pRetIcon = (*m_pIconTree)[i]->IconStream;
- JSFXObject pObj = JS_NewFxDynamicObj(*pRuntime, pContext, JS_GetObjDefnID(*pRuntime, L"Icon"));
- if (pObj.IsEmpty()) return FALSE;
+ JSFXObject pObj = JS_NewFxDynamicObj(*pRuntime, pContext,
+ JS_GetObjDefnID(*pRuntime, L"Icon"));
+ if (pObj.IsEmpty())
+ return FALSE;
- CJS_Icon * pJS_Icon = (CJS_Icon *)JS_GetPrivate(pObj);
- if (!pJS_Icon) return FALSE;
+ CJS_Icon* pJS_Icon = (CJS_Icon*)JS_GetPrivate(pObj);
+ if (!pJS_Icon)
+ return FALSE;
- Icon* pIcon = (Icon*)pJS_Icon->GetEmbedObject();
- if (!pIcon)return FALSE;
+ Icon* pIcon = (Icon*)pJS_Icon->GetEmbedObject();
+ if (!pIcon)
+ return FALSE;
- pIcon->SetIconName(swIconName);
- pIcon->SetStream(pRetIcon->GetStream());
- vRet = pJS_Icon;
- return TRUE;
- }
+ pIcon->SetIconName(swIconName);
+ pIcon->SetStream(pRetIcon->GetStream());
+ vRet = pJS_Icon;
+ return TRUE;
}
+ }
- return FALSE;
+ return FALSE;
}
-FX_BOOL Document::removeIcon(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
+FX_BOOL Document::removeIcon(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
// Unsafe, no supported.
return TRUE;
}
-FX_BOOL Document::createDataObject(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
+FX_BOOL Document::createDataObject(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
// Unsafe, not implemented.
return TRUE;
}
-FX_BOOL Document::media(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- return TRUE;
+FX_BOOL Document::media(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ return TRUE;
}
-FX_BOOL Document::calculateNow(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- ASSERT(m_pDocument != NULL);
+FX_BOOL Document::calculateNow(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ ASSERT(m_pDocument != NULL);
- if (!(m_pDocument->GetPermissions(FPDFPERM_MODIFY) ||
+ if (!(m_pDocument->GetPermissions(FPDFPERM_MODIFY) ||
m_pDocument->GetPermissions(FPDFPERM_ANNOT_FORM) ||
- m_pDocument->GetPermissions(FPDFPERM_FILL_FORM))) return FALSE;
+ m_pDocument->GetPermissions(FPDFPERM_FILL_FORM)))
+ return FALSE;
- CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)m_pDocument->GetInterForm();
- ASSERT(pInterForm != NULL);
- pInterForm->OnCalculate();
- return TRUE;
+ CPDFSDK_InterForm* pInterForm =
+ (CPDFSDK_InterForm*)m_pDocument->GetInterForm();
+ ASSERT(pInterForm != NULL);
+ pInterForm->OnCalculate();
+ return TRUE;
}
-FX_BOOL Document::Collab(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- return TRUE;
+FX_BOOL Document::Collab(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ return TRUE;
}
-FX_BOOL Document::getPageNthWord(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- ASSERT(m_pDocument != NULL);
+FX_BOOL Document::getPageNthWord(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ ASSERT(m_pDocument != NULL);
- if (!m_pDocument->GetPermissions(FPDFPERM_EXTRACT_ACCESS)) return FALSE;
-
- int nPageNo = params.GetSize() > 0 ? params[0].ToInt() : 0;
- int nWordNo = params.GetSize() > 1 ? params[1].ToInt() : 0;
- bool bStrip = params.GetSize() > 2 ? params[2].ToBool() : true;
+ if (!m_pDocument->GetPermissions(FPDFPERM_EXTRACT_ACCESS))
+ return FALSE;
- CPDF_Document* pDocument = m_pDocument->GetDocument();
- if (!pDocument) return FALSE;
+ int nPageNo = params.GetSize() > 0 ? params[0].ToInt() : 0;
+ int nWordNo = params.GetSize() > 1 ? params[1].ToInt() : 0;
+ bool bStrip = params.GetSize() > 2 ? params[2].ToBool() : true;
- CJS_Context* pContext = static_cast<CJS_Context*>(cc);
- if (nPageNo < 0 || nPageNo >= pDocument->GetPageCount())
- {
- sError = JSGetStringFromID(pContext, IDS_STRING_JSVALUEERROR);
- return FALSE;
- }
+ CPDF_Document* pDocument = m_pDocument->GetDocument();
+ if (!pDocument)
+ return FALSE;
- CPDF_Dictionary* pPageDict = pDocument->GetPage(nPageNo);
- if (!pPageDict) return FALSE;
+ CJS_Context* pContext = static_cast<CJS_Context*>(cc);
+ if (nPageNo < 0 || nPageNo >= pDocument->GetPageCount()) {
+ sError = JSGetStringFromID(pContext, IDS_STRING_JSVALUEERROR);
+ return FALSE;
+ }
- CPDF_Page page;
- page.Load(pDocument, pPageDict);
- page.StartParse();
- page.ParseContent();
+ CPDF_Dictionary* pPageDict = pDocument->GetPage(nPageNo);
+ if (!pPageDict)
+ return FALSE;
- FX_POSITION pos = page.GetFirstObjectPosition();
+ CPDF_Page page;
+ page.Load(pDocument, pPageDict);
+ page.StartParse();
+ page.ParseContent();
- int nWords = 0;
+ FX_POSITION pos = page.GetFirstObjectPosition();
- CFX_WideString swRet;
+ int nWords = 0;
- while (pos)
- {
- if (CPDF_PageObject* pPageObj = page.GetNextObject(pos))
- {
- if (pPageObj->m_Type == PDFPAGE_TEXT)
- {
- int nObjWords = CountWords((CPDF_TextObject*)pPageObj);
+ CFX_WideString swRet;
- if (nWords + nObjWords >= nWordNo)
- {
- swRet = GetObjWordStr((CPDF_TextObject*)pPageObj, nWordNo - nWords);
- break;
- }
+ while (pos) {
+ if (CPDF_PageObject* pPageObj = page.GetNextObject(pos)) {
+ if (pPageObj->m_Type == PDFPAGE_TEXT) {
+ int nObjWords = CountWords((CPDF_TextObject*)pPageObj);
- nWords += nObjWords;
- }
+ if (nWords + nObjWords >= nWordNo) {
+ swRet = GetObjWordStr((CPDF_TextObject*)pPageObj, nWordNo - nWords);
+ break;
}
- }
- if (bStrip)
- {
- swRet.TrimLeft();
- swRet.TrimRight();
+ nWords += nObjWords;
+ }
}
+ }
- vRet = swRet.c_str();
- return TRUE;
-}
+ if (bStrip) {
+ swRet.TrimLeft();
+ swRet.TrimRight();
+ }
-FX_BOOL Document::getPageNthWordQuads(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- ASSERT(m_pDocument != NULL);
+ vRet = swRet.c_str();
+ return TRUE;
+}
- if (!m_pDocument->GetPermissions(FPDFPERM_EXTRACT_ACCESS)) return FALSE;
+FX_BOOL Document::getPageNthWordQuads(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ ASSERT(m_pDocument != NULL);
+ if (!m_pDocument->GetPermissions(FPDFPERM_EXTRACT_ACCESS))
return FALSE;
+
+ return FALSE;
}
-FX_BOOL Document::getPageNumWords(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- ASSERT(m_pDocument != NULL);
+FX_BOOL Document::getPageNumWords(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ ASSERT(m_pDocument != NULL);
- if (!m_pDocument->GetPermissions(FPDFPERM_EXTRACT_ACCESS)) return FALSE;
+ if (!m_pDocument->GetPermissions(FPDFPERM_EXTRACT_ACCESS))
+ return FALSE;
- int nPageNo = params.GetSize() > 0 ? params[0].ToInt() : 0;
+ int nPageNo = params.GetSize() > 0 ? params[0].ToInt() : 0;
- CPDF_Document* pDocument = m_pDocument->GetDocument();
- ASSERT(pDocument != NULL);
+ CPDF_Document* pDocument = m_pDocument->GetDocument();
+ ASSERT(pDocument != NULL);
- CJS_Context* pContext = static_cast<CJS_Context*>(cc);
- if (nPageNo < 0 || nPageNo >= pDocument->GetPageCount())
- {
- sError = JSGetStringFromID(pContext, IDS_STRING_JSVALUEERROR);
- return FALSE;
- }
+ CJS_Context* pContext = static_cast<CJS_Context*>(cc);
+ if (nPageNo < 0 || nPageNo >= pDocument->GetPageCount()) {
+ sError = JSGetStringFromID(pContext, IDS_STRING_JSVALUEERROR);
+ return FALSE;
+ }
- CPDF_Dictionary* pPageDict = pDocument->GetPage(nPageNo);
- if (!pPageDict) return FALSE;
+ CPDF_Dictionary* pPageDict = pDocument->GetPage(nPageNo);
+ if (!pPageDict)
+ return FALSE;
- CPDF_Page page;
- page.Load(pDocument, pPageDict);
- page.StartParse();
- page.ParseContent();
+ CPDF_Page page;
+ page.Load(pDocument, pPageDict);
+ page.StartParse();
+ page.ParseContent();
- FX_POSITION pos = page.GetFirstObjectPosition();
+ FX_POSITION pos = page.GetFirstObjectPosition();
- int nWords = 0;
+ int nWords = 0;
- while (pos)
- {
- if (CPDF_PageObject* pPageObj = page.GetNextObject(pos))
- {
- if (pPageObj->m_Type == PDFPAGE_TEXT)
- {
- CPDF_TextObject* pTextObj = (CPDF_TextObject*)pPageObj;
- nWords += CountWords(pTextObj);
- }
- }
+ while (pos) {
+ if (CPDF_PageObject* pPageObj = page.GetNextObject(pos)) {
+ if (pPageObj->m_Type == PDFPAGE_TEXT) {
+ CPDF_TextObject* pTextObj = (CPDF_TextObject*)pPageObj;
+ nWords += CountWords(pTextObj);
+ }
}
+ }
- vRet = nWords;
+ vRet = nWords;
- return TRUE;
+ return TRUE;
}
-FX_BOOL Document::getPrintParams(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- CJS_Context* pContext = (CJS_Context*)cc;
- CJS_Runtime* pRuntime = pContext->GetJSRuntime();
- JSFXObject pRetObj = JS_NewFxDynamicObj(*pRuntime, pContext, JS_GetObjDefnID(*pRuntime, L"PrintParamsObj"));
+FX_BOOL Document::getPrintParams(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ CJS_Context* pContext = (CJS_Context*)cc;
+ CJS_Runtime* pRuntime = pContext->GetJSRuntime();
+ JSFXObject pRetObj = JS_NewFxDynamicObj(
+ *pRuntime, pContext, JS_GetObjDefnID(*pRuntime, L"PrintParamsObj"));
- // Not implemented yet.
+ // Not implemented yet.
- vRet = pRetObj;
- return TRUE;
+ vRet = pRetObj;
+ return TRUE;
}
-#define ISLATINWORD(u) (u != 0x20 && u <= 0x28FF)
+#define ISLATINWORD(u) (u != 0x20 && u <= 0x28FF)
-int Document::CountWords(CPDF_TextObject* pTextObj)
-{
- if (!pTextObj) return 0;
+int Document::CountWords(CPDF_TextObject* pTextObj) {
+ if (!pTextObj)
+ return 0;
- int nWords = 0;
+ int nWords = 0;
- CPDF_Font* pFont = pTextObj->GetFont();
- if (!pFont) return 0;
+ CPDF_Font* pFont = pTextObj->GetFont();
+ if (!pFont)
+ return 0;
- FX_BOOL bIsLatin = FALSE;
+ FX_BOOL bIsLatin = FALSE;
- for (int i=0, sz=pTextObj->CountChars(); i<sz; i++)
- {
- FX_DWORD charcode = -1;
- FX_FLOAT kerning;
+ for (int i = 0, sz = pTextObj->CountChars(); i < sz; i++) {
+ FX_DWORD charcode = -1;
+ FX_FLOAT kerning;
- pTextObj->GetCharInfo(i, charcode, kerning);
- CFX_WideString swUnicode = pFont->UnicodeFromCharCode(charcode);
+ pTextObj->GetCharInfo(i, charcode, kerning);
+ CFX_WideString swUnicode = pFont->UnicodeFromCharCode(charcode);
- FX_WORD unicode = 0;
- if (swUnicode.GetLength() > 0)
- unicode = swUnicode[0];
+ FX_WORD unicode = 0;
+ if (swUnicode.GetLength() > 0)
+ unicode = swUnicode[0];
- if (ISLATINWORD(unicode) && bIsLatin)
- continue;
+ if (ISLATINWORD(unicode) && bIsLatin)
+ continue;
- bIsLatin = ISLATINWORD(unicode);
- if (unicode != 0x20)
- nWords++;
- }
+ bIsLatin = ISLATINWORD(unicode);
+ if (unicode != 0x20)
+ nWords++;
+ }
- return nWords;
+ return nWords;
}
-CFX_WideString Document::GetObjWordStr(CPDF_TextObject* pTextObj, int nWordIndex)
-{
- ASSERT(pTextObj != NULL);
-
- CFX_WideString swRet;
+CFX_WideString Document::GetObjWordStr(CPDF_TextObject* pTextObj,
+ int nWordIndex) {
+ ASSERT(pTextObj != NULL);
- CPDF_Font* pFont = pTextObj->GetFont();
- if (!pFont) return L"";
+ CFX_WideString swRet;
- int nWords = 0;
- FX_BOOL bIsLatin = FALSE;
+ CPDF_Font* pFont = pTextObj->GetFont();
+ if (!pFont)
+ return L"";
- for (int i=0, sz=pTextObj->CountChars(); i<sz; i++)
- {
- FX_DWORD charcode = -1;
- FX_FLOAT kerning;
+ int nWords = 0;
+ FX_BOOL bIsLatin = FALSE;
- pTextObj->GetCharInfo(i, charcode, kerning);
- CFX_WideString swUnicode = pFont->UnicodeFromCharCode(charcode);
+ for (int i = 0, sz = pTextObj->CountChars(); i < sz; i++) {
+ FX_DWORD charcode = -1;
+ FX_FLOAT kerning;
- FX_WORD unicode = 0;
- if (swUnicode.GetLength() > 0)
- unicode = swUnicode[0];
+ pTextObj->GetCharInfo(i, charcode, kerning);
+ CFX_WideString swUnicode = pFont->UnicodeFromCharCode(charcode);
- if (ISLATINWORD(unicode) && bIsLatin)
- {
- }
- else
- {
- bIsLatin = ISLATINWORD(unicode);
- if (unicode != 0x20)
- nWords++;
- }
+ FX_WORD unicode = 0;
+ if (swUnicode.GetLength() > 0)
+ unicode = swUnicode[0];
- if (nWords-1 == nWordIndex)
- swRet += unicode;
+ if (ISLATINWORD(unicode) && bIsLatin) {
+ } else {
+ bIsLatin = ISLATINWORD(unicode);
+ if (unicode != 0x20)
+ nWords++;
}
- return swRet;
-}
+ if (nWords - 1 == nWordIndex)
+ swRet += unicode;
+ }
-FX_BOOL Document::zoom(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
+ return swRet;
+}
- return TRUE;
+FX_BOOL Document::zoom(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ return TRUE;
}
/**
@@ -1748,94 +1757,97 @@ FX_BOOL Document::zoom(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sEr
(refW, ReflowWidth)
*/
-FX_BOOL Document::zoomType(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- return TRUE;
+FX_BOOL Document::zoomType(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ return TRUE;
}
-FX_BOOL Document::deletePages(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
+FX_BOOL Document::deletePages(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
// Unsafe, no supported.
return TRUE;
}
-FX_BOOL Document::extractPages(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
+FX_BOOL Document::extractPages(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
// Unsafe, not supported.
return TRUE;
}
-FX_BOOL Document::insertPages(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
+FX_BOOL Document::insertPages(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
// Unsafe, not supported.
return TRUE;
}
-FX_BOOL Document::replacePages(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
+FX_BOOL Document::replacePages(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
// Unsafe, not supported.
return TRUE;
}
-FX_BOOL Document::getURL(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
+FX_BOOL Document::getURL(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
// Unsafe, not supported.
return TRUE;
}
-void Document::AddDelayData(CJS_DelayData* pData)
-{
- m_DelayData.Add(pData);
+void Document::AddDelayData(CJS_DelayData* pData) {
+ m_DelayData.Add(pData);
}
-void Document::DoFieldDelay(const CFX_WideString& sFieldName, int nControlIndex)
-{
- CFX_DWordArray DelArray;
- CFX_ArrayTemplate<CJS_DelayData*> DelayDataForFieldAndControlIndex;
+void Document::DoFieldDelay(const CFX_WideString& sFieldName,
+ int nControlIndex) {
+ CFX_DWordArray DelArray;
+ CFX_ArrayTemplate<CJS_DelayData*> DelayDataForFieldAndControlIndex;
- for (int i=0,sz=m_DelayData.GetSize(); i<sz; i++)
- {
- if (CJS_DelayData* pData = m_DelayData.GetAt(i))
- {
- if (pData->sFieldName == sFieldName && pData->nControlIndex == nControlIndex)
- {
- DelayDataForFieldAndControlIndex.Add(pData);
- m_DelayData.SetAt(i, NULL);
- DelArray.Add(i);
- }
- }
+ for (int i = 0, sz = m_DelayData.GetSize(); i < sz; i++) {
+ if (CJS_DelayData* pData = m_DelayData.GetAt(i)) {
+ if (pData->sFieldName == sFieldName &&
+ pData->nControlIndex == nControlIndex) {
+ DelayDataForFieldAndControlIndex.Add(pData);
+ m_DelayData.SetAt(i, NULL);
+ DelArray.Add(i);
+ }
}
+ }
- for (int j=DelArray.GetSize()-1; j>=0; j--)
- {
- m_DelayData.RemoveAt(DelArray[j]);
- }
+ for (int j = DelArray.GetSize() - 1; j >= 0; j--) {
+ m_DelayData.RemoveAt(DelArray[j]);
+ }
- for (int i=0,sz=DelayDataForFieldAndControlIndex.GetSize(); i < sz; i++)
- {
- CJS_DelayData* pData = DelayDataForFieldAndControlIndex.GetAt(i);
- Field::DoDelay(m_pDocument, pData);
- DelayDataForFieldAndControlIndex.SetAt(i,NULL);
- delete pData;
- }
+ for (int i = 0, sz = DelayDataForFieldAndControlIndex.GetSize(); i < sz;
+ i++) {
+ CJS_DelayData* pData = DelayDataForFieldAndControlIndex.GetAt(i);
+ Field::DoDelay(m_pDocument, pData);
+ DelayDataForFieldAndControlIndex.SetAt(i, NULL);
+ delete pData;
+ }
}
-void Document::AddDelayAnnotData(CJS_AnnotObj *pData)
-{
- m_DelayAnnotData.Add(pData);
+void Document::AddDelayAnnotData(CJS_AnnotObj* pData) {
+ m_DelayAnnotData.Add(pData);
}
-void Document::DoAnnotDelay()
-{
- CFX_DWordArray DelArray;
+void Document::DoAnnotDelay() {
+ CFX_DWordArray DelArray;
- for (int j=DelArray.GetSize()-1; j>=0; j--)
- {
- m_DelayData.RemoveAt(DelArray[j]);
- }
+ for (int j = DelArray.GetSize() - 1; j >= 0; j--) {
+ m_DelayData.RemoveAt(DelArray[j]);
+ }
}
-CJS_Document* Document::GetCJSDoc() const
-{
- return static_cast<CJS_Document*>(m_pJSObject);
+CJS_Document* Document::GetCJSDoc() const {
+ return static_cast<CJS_Document*>(m_pJSObject);
}
diff --git a/fpdfsdk/src/javascript/Field.cpp b/fpdfsdk/src/javascript/Field.cpp
index 614843426e..c44636872b 100644
--- a/fpdfsdk/src/javascript/Field.cpp
+++ b/fpdfsdk/src/javascript/Field.cpp
@@ -18,3448 +18,3335 @@
#include "../../include/javascript/PublicMethods.h"
#include "../../include/javascript/Icon.h"
-
/* ---------------------- Field ---------------------- */
BEGIN_JS_STATIC_CONST(CJS_Field)
END_JS_STATIC_CONST()
BEGIN_JS_STATIC_PROP(CJS_Field)
- JS_STATIC_PROP_ENTRY(alignment)
- JS_STATIC_PROP_ENTRY(borderStyle)
- JS_STATIC_PROP_ENTRY(buttonAlignX)
- JS_STATIC_PROP_ENTRY(buttonAlignY)
- JS_STATIC_PROP_ENTRY(buttonFitBounds)
- JS_STATIC_PROP_ENTRY(buttonPosition)
- JS_STATIC_PROP_ENTRY(buttonScaleHow)
- JS_STATIC_PROP_ENTRY(buttonScaleWhen)
- JS_STATIC_PROP_ENTRY(calcOrderIndex)
- JS_STATIC_PROP_ENTRY(charLimit)
- JS_STATIC_PROP_ENTRY(comb)
- JS_STATIC_PROP_ENTRY(commitOnSelChange)
- JS_STATIC_PROP_ENTRY(currentValueIndices)
- JS_STATIC_PROP_ENTRY(defaultStyle)
- JS_STATIC_PROP_ENTRY(defaultValue)
- JS_STATIC_PROP_ENTRY(doNotScroll)
- JS_STATIC_PROP_ENTRY(doNotSpellCheck)
- JS_STATIC_PROP_ENTRY(delay)
- JS_STATIC_PROP_ENTRY(display)
- JS_STATIC_PROP_ENTRY(doc)
- JS_STATIC_PROP_ENTRY(editable)
- JS_STATIC_PROP_ENTRY(exportValues)
- JS_STATIC_PROP_ENTRY(hidden)
- JS_STATIC_PROP_ENTRY(fileSelect)
- JS_STATIC_PROP_ENTRY(fillColor)
- JS_STATIC_PROP_ENTRY(lineWidth)
- JS_STATIC_PROP_ENTRY(highlight)
- JS_STATIC_PROP_ENTRY(multiline)
- JS_STATIC_PROP_ENTRY(multipleSelection)
- JS_STATIC_PROP_ENTRY(name)
- JS_STATIC_PROP_ENTRY(numItems)
- JS_STATIC_PROP_ENTRY(page)
- JS_STATIC_PROP_ENTRY(password)
- JS_STATIC_PROP_ENTRY(print)
- JS_STATIC_PROP_ENTRY(radiosInUnison)
- JS_STATIC_PROP_ENTRY(readonly)
- JS_STATIC_PROP_ENTRY(rect)
- JS_STATIC_PROP_ENTRY(required)
- JS_STATIC_PROP_ENTRY(richText)
- JS_STATIC_PROP_ENTRY(richValue)
- JS_STATIC_PROP_ENTRY(rotation)
- JS_STATIC_PROP_ENTRY(strokeColor)
- JS_STATIC_PROP_ENTRY(style)
- JS_STATIC_PROP_ENTRY(submitName)
- JS_STATIC_PROP_ENTRY(textColor)
- JS_STATIC_PROP_ENTRY(textFont)
- JS_STATIC_PROP_ENTRY(textSize)
- JS_STATIC_PROP_ENTRY(type)
- JS_STATIC_PROP_ENTRY(userName)
- JS_STATIC_PROP_ENTRY(value)
- JS_STATIC_PROP_ENTRY(valueAsString)
- JS_STATIC_PROP_ENTRY(source)
+JS_STATIC_PROP_ENTRY(alignment)
+JS_STATIC_PROP_ENTRY(borderStyle)
+JS_STATIC_PROP_ENTRY(buttonAlignX)
+JS_STATIC_PROP_ENTRY(buttonAlignY)
+JS_STATIC_PROP_ENTRY(buttonFitBounds)
+JS_STATIC_PROP_ENTRY(buttonPosition)
+JS_STATIC_PROP_ENTRY(buttonScaleHow)
+JS_STATIC_PROP_ENTRY(buttonScaleWhen)
+JS_STATIC_PROP_ENTRY(calcOrderIndex)
+JS_STATIC_PROP_ENTRY(charLimit)
+JS_STATIC_PROP_ENTRY(comb)
+JS_STATIC_PROP_ENTRY(commitOnSelChange)
+JS_STATIC_PROP_ENTRY(currentValueIndices)
+JS_STATIC_PROP_ENTRY(defaultStyle)
+JS_STATIC_PROP_ENTRY(defaultValue)
+JS_STATIC_PROP_ENTRY(doNotScroll)
+JS_STATIC_PROP_ENTRY(doNotSpellCheck)
+JS_STATIC_PROP_ENTRY(delay)
+JS_STATIC_PROP_ENTRY(display)
+JS_STATIC_PROP_ENTRY(doc)
+JS_STATIC_PROP_ENTRY(editable)
+JS_STATIC_PROP_ENTRY(exportValues)
+JS_STATIC_PROP_ENTRY(hidden)
+JS_STATIC_PROP_ENTRY(fileSelect)
+JS_STATIC_PROP_ENTRY(fillColor)
+JS_STATIC_PROP_ENTRY(lineWidth)
+JS_STATIC_PROP_ENTRY(highlight)
+JS_STATIC_PROP_ENTRY(multiline)
+JS_STATIC_PROP_ENTRY(multipleSelection)
+JS_STATIC_PROP_ENTRY(name)
+JS_STATIC_PROP_ENTRY(numItems)
+JS_STATIC_PROP_ENTRY(page)
+JS_STATIC_PROP_ENTRY(password)
+JS_STATIC_PROP_ENTRY(print)
+JS_STATIC_PROP_ENTRY(radiosInUnison)
+JS_STATIC_PROP_ENTRY(readonly)
+JS_STATIC_PROP_ENTRY(rect)
+JS_STATIC_PROP_ENTRY(required)
+JS_STATIC_PROP_ENTRY(richText)
+JS_STATIC_PROP_ENTRY(richValue)
+JS_STATIC_PROP_ENTRY(rotation)
+JS_STATIC_PROP_ENTRY(strokeColor)
+JS_STATIC_PROP_ENTRY(style)
+JS_STATIC_PROP_ENTRY(submitName)
+JS_STATIC_PROP_ENTRY(textColor)
+JS_STATIC_PROP_ENTRY(textFont)
+JS_STATIC_PROP_ENTRY(textSize)
+JS_STATIC_PROP_ENTRY(type)
+JS_STATIC_PROP_ENTRY(userName)
+JS_STATIC_PROP_ENTRY(value)
+JS_STATIC_PROP_ENTRY(valueAsString)
+JS_STATIC_PROP_ENTRY(source)
END_JS_STATIC_PROP()
BEGIN_JS_STATIC_METHOD(CJS_Field)
- JS_STATIC_METHOD_ENTRY(browseForFileToSubmit)
- JS_STATIC_METHOD_ENTRY(buttonGetCaption)
- JS_STATIC_METHOD_ENTRY(buttonGetIcon)
- JS_STATIC_METHOD_ENTRY(buttonImportIcon)
- JS_STATIC_METHOD_ENTRY(buttonSetCaption)
- JS_STATIC_METHOD_ENTRY(buttonSetIcon)
- JS_STATIC_METHOD_ENTRY(checkThisBox)
- JS_STATIC_METHOD_ENTRY(clearItems)
- JS_STATIC_METHOD_ENTRY(defaultIsChecked)
- JS_STATIC_METHOD_ENTRY(deleteItemAt)
- JS_STATIC_METHOD_ENTRY(getArray )
- JS_STATIC_METHOD_ENTRY(getItemAt)
- JS_STATIC_METHOD_ENTRY(getLock)
- JS_STATIC_METHOD_ENTRY(insertItemAt)
- JS_STATIC_METHOD_ENTRY(isBoxChecked)
- JS_STATIC_METHOD_ENTRY(isDefaultChecked)
- JS_STATIC_METHOD_ENTRY(setAction)
- JS_STATIC_METHOD_ENTRY(setFocus)
- JS_STATIC_METHOD_ENTRY(setItems)
- JS_STATIC_METHOD_ENTRY(setLock)
- JS_STATIC_METHOD_ENTRY(signatureGetModifications)
- JS_STATIC_METHOD_ENTRY(signatureGetSeedValue)
- JS_STATIC_METHOD_ENTRY(signatureInfo)
- JS_STATIC_METHOD_ENTRY(signatureSetSeedValue)
- JS_STATIC_METHOD_ENTRY(signatureSign)
- JS_STATIC_METHOD_ENTRY(signatureValidate)
+JS_STATIC_METHOD_ENTRY(browseForFileToSubmit)
+JS_STATIC_METHOD_ENTRY(buttonGetCaption)
+JS_STATIC_METHOD_ENTRY(buttonGetIcon)
+JS_STATIC_METHOD_ENTRY(buttonImportIcon)
+JS_STATIC_METHOD_ENTRY(buttonSetCaption)
+JS_STATIC_METHOD_ENTRY(buttonSetIcon)
+JS_STATIC_METHOD_ENTRY(checkThisBox)
+JS_STATIC_METHOD_ENTRY(clearItems)
+JS_STATIC_METHOD_ENTRY(defaultIsChecked)
+JS_STATIC_METHOD_ENTRY(deleteItemAt)
+JS_STATIC_METHOD_ENTRY(getArray)
+JS_STATIC_METHOD_ENTRY(getItemAt)
+JS_STATIC_METHOD_ENTRY(getLock)
+JS_STATIC_METHOD_ENTRY(insertItemAt)
+JS_STATIC_METHOD_ENTRY(isBoxChecked)
+JS_STATIC_METHOD_ENTRY(isDefaultChecked)
+JS_STATIC_METHOD_ENTRY(setAction)
+JS_STATIC_METHOD_ENTRY(setFocus)
+JS_STATIC_METHOD_ENTRY(setItems)
+JS_STATIC_METHOD_ENTRY(setLock)
+JS_STATIC_METHOD_ENTRY(signatureGetModifications)
+JS_STATIC_METHOD_ENTRY(signatureGetSeedValue)
+JS_STATIC_METHOD_ENTRY(signatureInfo)
+JS_STATIC_METHOD_ENTRY(signatureSetSeedValue)
+JS_STATIC_METHOD_ENTRY(signatureSign)
+JS_STATIC_METHOD_ENTRY(signatureValidate)
END_JS_STATIC_METHOD()
IMPLEMENT_JS_CLASS(CJS_Field, Field)
-FX_BOOL CJS_Field::InitInstance(IFXJS_Context* cc)
-{
- CJS_Context* pContext = (CJS_Context*)cc;
- ASSERT(pContext != NULL);
+FX_BOOL CJS_Field::InitInstance(IFXJS_Context* cc) {
+ CJS_Context* pContext = (CJS_Context*)cc;
+ ASSERT(pContext != NULL);
- Field* pField = (Field*)GetEmbedObject();
- ASSERT(pField != NULL);
+ Field* pField = (Field*)GetEmbedObject();
+ ASSERT(pField != NULL);
- pField->SetIsolate(pContext->GetJSRuntime()->GetIsolate());
+ pField->SetIsolate(pContext->GetJSRuntime()->GetIsolate());
- return TRUE;
+ return TRUE;
};
-Field::Field(CJS_Object* pJSObject): CJS_EmbedObj(pJSObject),
- m_pJSDoc(NULL),
- m_pDocument(NULL),
- m_nFormControlIndex(-1),
- m_bCanSet(FALSE),
- m_bDelay(FALSE),
- m_isolate(NULL)
-{
-}
+Field::Field(CJS_Object* pJSObject)
+ : CJS_EmbedObj(pJSObject),
+ m_pJSDoc(NULL),
+ m_pDocument(NULL),
+ m_nFormControlIndex(-1),
+ m_bCanSet(FALSE),
+ m_bDelay(FALSE),
+ m_isolate(NULL) {}
-Field::~Field()
-{
-}
+Field::~Field() {}
-//note: iControlNo = -1, means not a widget.
-void Field::ParseFieldName(const std::wstring &strFieldNameParsed,std::wstring &strFieldName,int & iControlNo)
-{
- int iStart = strFieldNameParsed.find_last_of(L'.');
- if (iStart == -1)
- {
- strFieldName = strFieldNameParsed;
- iControlNo = -1;
- return;
+// note: iControlNo = -1, means not a widget.
+void Field::ParseFieldName(const std::wstring& strFieldNameParsed,
+ std::wstring& strFieldName,
+ int& iControlNo) {
+ int iStart = strFieldNameParsed.find_last_of(L'.');
+ if (iStart == -1) {
+ strFieldName = strFieldNameParsed;
+ iControlNo = -1;
+ return;
+ }
+ std::wstring suffixal = strFieldNameParsed.substr(iStart + 1);
+ iControlNo = FXSYS_wtoi(suffixal.c_str());
+ if (iControlNo == 0) {
+ int iStart;
+ while ((iStart = suffixal.find_last_of(L" ")) != -1) {
+ suffixal.erase(iStart, 1);
}
- std::wstring suffixal = strFieldNameParsed.substr(iStart+1);
- iControlNo = FXSYS_wtoi(suffixal.c_str());
- if (iControlNo == 0)
- {
- int iStart;
- while((iStart = suffixal.find_last_of(L" ")) != -1)
- {
- suffixal.erase(iStart,1);
- }
-
- if (suffixal.compare(L"0") != 0)
- {
- strFieldName = strFieldNameParsed;
- iControlNo = -1;
- return;
- }
+ if (suffixal.compare(L"0") != 0) {
+ strFieldName = strFieldNameParsed;
+ iControlNo = -1;
+ return;
}
- strFieldName = strFieldNameParsed.substr(0,iStart);
+ }
+ strFieldName = strFieldNameParsed.substr(0, iStart);
}
-FX_BOOL Field::AttachField(Document* pDocument, const CFX_WideString& csFieldName)
-{
- ASSERT(pDocument != NULL);
- m_pJSDoc = pDocument;
+FX_BOOL Field::AttachField(Document* pDocument,
+ const CFX_WideString& csFieldName) {
+ ASSERT(pDocument != NULL);
+ m_pJSDoc = pDocument;
- m_pDocument = pDocument->GetReaderDoc();
- ASSERT(m_pDocument != NULL);
+ m_pDocument = pDocument->GetReaderDoc();
+ ASSERT(m_pDocument != NULL);
- m_bCanSet = m_pDocument->GetPermissions(FPDFPERM_FILL_FORM) ||
- m_pDocument->GetPermissions(FPDFPERM_ANNOT_FORM) ||
- m_pDocument->GetPermissions(FPDFPERM_MODIFY);
+ m_bCanSet = m_pDocument->GetPermissions(FPDFPERM_FILL_FORM) ||
+ m_pDocument->GetPermissions(FPDFPERM_ANNOT_FORM) ||
+ m_pDocument->GetPermissions(FPDFPERM_MODIFY);
- CPDFSDK_InterForm* pRDInterForm = m_pDocument->GetInterForm();
- ASSERT(pRDInterForm != NULL);
+ CPDFSDK_InterForm* pRDInterForm = m_pDocument->GetInterForm();
+ ASSERT(pRDInterForm != NULL);
- CPDF_InterForm* pInterForm = pRDInterForm->GetInterForm();
- ASSERT(pInterForm != NULL);
+ CPDF_InterForm* pInterForm = pRDInterForm->GetInterForm();
+ ASSERT(pInterForm != NULL);
- CFX_WideString swFieldNameTemp = csFieldName;
- swFieldNameTemp.Replace(L"..", L".");
+ CFX_WideString swFieldNameTemp = csFieldName;
+ swFieldNameTemp.Replace(L"..", L".");
- if (pInterForm->CountFields(swFieldNameTemp) <= 0)
- {
- std::wstring strFieldName;
- int iControlNo = -1;
- ParseFieldName(swFieldNameTemp.c_str(), strFieldName, iControlNo);
- if (iControlNo == -1) return FALSE;
+ if (pInterForm->CountFields(swFieldNameTemp) <= 0) {
+ std::wstring strFieldName;
+ int iControlNo = -1;
+ ParseFieldName(swFieldNameTemp.c_str(), strFieldName, iControlNo);
+ if (iControlNo == -1)
+ return FALSE;
- m_FieldName = strFieldName.c_str();
- m_nFormControlIndex = iControlNo;
- return TRUE;
- }
+ m_FieldName = strFieldName.c_str();
+ m_nFormControlIndex = iControlNo;
+ return TRUE;
+ }
- m_FieldName = swFieldNameTemp;
- m_nFormControlIndex = -1;
+ m_FieldName = swFieldNameTemp;
+ m_nFormControlIndex = -1;
- return TRUE;
+ return TRUE;
}
-void Field::GetFormFields(CPDFSDK_Document* pDocument, const CFX_WideString& csFieldName, CFX_PtrArray& FieldArray)
-{
- ASSERT(pDocument != NULL);
+void Field::GetFormFields(CPDFSDK_Document* pDocument,
+ const CFX_WideString& csFieldName,
+ CFX_PtrArray& FieldArray) {
+ ASSERT(pDocument != NULL);
- CPDFSDK_InterForm* pReaderInterForm = pDocument->GetInterForm();
- ASSERT(pReaderInterForm != NULL);
+ CPDFSDK_InterForm* pReaderInterForm = pDocument->GetInterForm();
+ ASSERT(pReaderInterForm != NULL);
- CPDF_InterForm* pInterForm = pReaderInterForm->GetInterForm();
- ASSERT(pInterForm != NULL);
+ CPDF_InterForm* pInterForm = pReaderInterForm->GetInterForm();
+ ASSERT(pInterForm != NULL);
- ASSERT(FieldArray.GetSize() == 0);
+ ASSERT(FieldArray.GetSize() == 0);
- for (int i=0,sz=pInterForm->CountFields(csFieldName); i<sz; i++)
- {
- if (CPDF_FormField* pFormField = pInterForm->GetField(i, csFieldName))
- FieldArray.Add((void*)pFormField);
- }
+ for (int i = 0, sz = pInterForm->CountFields(csFieldName); i < sz; i++) {
+ if (CPDF_FormField* pFormField = pInterForm->GetField(i, csFieldName))
+ FieldArray.Add((void*)pFormField);
+ }
}
-void Field::GetFormFields(const CFX_WideString& csFieldName, CFX_PtrArray& FieldArray)
-{
- ASSERT(m_pDocument != NULL);
+void Field::GetFormFields(const CFX_WideString& csFieldName,
+ CFX_PtrArray& FieldArray) {
+ ASSERT(m_pDocument != NULL);
- Field::GetFormFields(m_pDocument, csFieldName, FieldArray);
+ Field::GetFormFields(m_pDocument, csFieldName, FieldArray);
}
-void Field::UpdateFormField(CPDFSDK_Document* pDocument, CPDF_FormField* pFormField,
- FX_BOOL bChangeMark, FX_BOOL bResetAP, FX_BOOL bRefresh)
-{
- ASSERT(pDocument != NULL);
- ASSERT(pFormField != NULL);
+void Field::UpdateFormField(CPDFSDK_Document* pDocument,
+ CPDF_FormField* pFormField,
+ FX_BOOL bChangeMark,
+ FX_BOOL bResetAP,
+ FX_BOOL bRefresh) {
+ ASSERT(pDocument != NULL);
+ ASSERT(pFormField != NULL);
- CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm();
- ASSERT(pInterForm != NULL);
+ CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm();
+ ASSERT(pInterForm != NULL);
- CFX_PtrArray widgets;
- pInterForm->GetWidgets(pFormField, widgets);
+ CFX_PtrArray widgets;
+ pInterForm->GetWidgets(pFormField, widgets);
- if (bResetAP)
- {
- int nFieldType = pFormField->GetFieldType();
- if (nFieldType == FIELDTYPE_COMBOBOX || nFieldType == FIELDTYPE_TEXTFIELD)
- {
- for (int i=0,sz=widgets.GetSize(); i<sz; i++)
- {
- CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)widgets.GetAt(i);
- ASSERT(pWidget != NULL);
-
- FX_BOOL bFormated = FALSE;
- CFX_WideString sValue = pWidget->OnFormat(bFormated);
- if (bFormated)
- pWidget->ResetAppearance(sValue.c_str(), FALSE);
- else
- pWidget->ResetAppearance(NULL, FALSE);
- }
- }
+ if (bResetAP) {
+ int nFieldType = pFormField->GetFieldType();
+ if (nFieldType == FIELDTYPE_COMBOBOX || nFieldType == FIELDTYPE_TEXTFIELD) {
+ for (int i = 0, sz = widgets.GetSize(); i < sz; i++) {
+ CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)widgets.GetAt(i);
+ ASSERT(pWidget != NULL);
+
+ FX_BOOL bFormated = FALSE;
+ CFX_WideString sValue = pWidget->OnFormat(bFormated);
+ if (bFormated)
+ pWidget->ResetAppearance(sValue.c_str(), FALSE);
else
- {
- for (int i=0,sz=widgets.GetSize(); i<sz; i++)
- {
- CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)widgets.GetAt(i);
- ASSERT(pWidget != NULL);
+ pWidget->ResetAppearance(NULL, FALSE);
+ }
+ } else {
+ for (int i = 0, sz = widgets.GetSize(); i < sz; i++) {
+ CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)widgets.GetAt(i);
+ ASSERT(pWidget != NULL);
- pWidget->ResetAppearance(NULL, FALSE);
- }
- }
+ pWidget->ResetAppearance(NULL, FALSE);
+ }
}
+ }
- if (bRefresh)
- {
- for (int i=0,sz=widgets.GetSize(); i<sz; i++)
- {
- CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)widgets.GetAt(i);
- ASSERT(pWidget != NULL);
-
- CPDFSDK_InterForm * pInterForm = pWidget->GetInterForm();
- CPDFSDK_Document* pDoc = pInterForm->GetDocument();
-// CReader_Page* pPage = pWidget->GetPage();
- ASSERT(pDoc != NULL);
- pDoc->UpdateAllViews(NULL, pWidget);
- }
+ if (bRefresh) {
+ for (int i = 0, sz = widgets.GetSize(); i < sz; i++) {
+ CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)widgets.GetAt(i);
+ ASSERT(pWidget != NULL);
+
+ CPDFSDK_InterForm* pInterForm = pWidget->GetInterForm();
+ CPDFSDK_Document* pDoc = pInterForm->GetDocument();
+ // CReader_Page* pPage = pWidget->GetPage();
+ ASSERT(pDoc != NULL);
+ pDoc->UpdateAllViews(NULL, pWidget);
}
+ }
- if (bChangeMark)
- pDocument->SetChangeMark();
+ if (bChangeMark)
+ pDocument->SetChangeMark();
}
-void Field::UpdateFormControl(CPDFSDK_Document* pDocument, CPDF_FormControl* pFormControl,
- FX_BOOL bChangeMark, FX_BOOL bResetAP, FX_BOOL bRefresh)
-{
- ASSERT(pDocument != NULL);
- ASSERT(pFormControl != NULL);
-
- CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm();
- ASSERT(pInterForm != NULL);
+void Field::UpdateFormControl(CPDFSDK_Document* pDocument,
+ CPDF_FormControl* pFormControl,
+ FX_BOOL bChangeMark,
+ FX_BOOL bResetAP,
+ FX_BOOL bRefresh) {
+ ASSERT(pDocument != NULL);
+ ASSERT(pFormControl != NULL);
- CPDFSDK_Widget* pWidget = pInterForm->GetWidget(pFormControl);
+ CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm();
+ ASSERT(pInterForm != NULL);
- if (pWidget)
- {
- if (bResetAP)
- {
- int nFieldType = pWidget->GetFieldType();
- if (nFieldType == FIELDTYPE_COMBOBOX || nFieldType == FIELDTYPE_TEXTFIELD)
- {
- FX_BOOL bFormated = FALSE;
- CFX_WideString sValue = pWidget->OnFormat(bFormated);
- if (bFormated)
- pWidget->ResetAppearance(sValue.c_str(), FALSE);
- else
- pWidget->ResetAppearance(NULL, FALSE);
- }
- else
- {
- pWidget->ResetAppearance(NULL, FALSE);
- }
- }
+ CPDFSDK_Widget* pWidget = pInterForm->GetWidget(pFormControl);
- if (bRefresh)
- {
- CPDFSDK_InterForm * pInterForm = pWidget->GetInterForm();
- CPDFSDK_Document* pDoc = pInterForm->GetDocument();
- ASSERT(pDoc != NULL);
- pDoc->UpdateAllViews(NULL, pWidget);
- }
+ if (pWidget) {
+ if (bResetAP) {
+ int nFieldType = pWidget->GetFieldType();
+ if (nFieldType == FIELDTYPE_COMBOBOX ||
+ nFieldType == FIELDTYPE_TEXTFIELD) {
+ FX_BOOL bFormated = FALSE;
+ CFX_WideString sValue = pWidget->OnFormat(bFormated);
+ if (bFormated)
+ pWidget->ResetAppearance(sValue.c_str(), FALSE);
+ else
+ pWidget->ResetAppearance(NULL, FALSE);
+ } else {
+ pWidget->ResetAppearance(NULL, FALSE);
+ }
+ }
+ if (bRefresh) {
+ CPDFSDK_InterForm* pInterForm = pWidget->GetInterForm();
+ CPDFSDK_Document* pDoc = pInterForm->GetDocument();
+ ASSERT(pDoc != NULL);
+ pDoc->UpdateAllViews(NULL, pWidget);
}
+ }
- if (bChangeMark)
- pDocument->SetChangeMark();
+ if (bChangeMark)
+ pDocument->SetChangeMark();
}
-CPDFSDK_Widget* Field::GetWidget(CPDFSDK_Document* pDocument, CPDF_FormControl* pFormControl)
-{
- ASSERT(pDocument != NULL);
- ASSERT(pFormControl != NULL);
+CPDFSDK_Widget* Field::GetWidget(CPDFSDK_Document* pDocument,
+ CPDF_FormControl* pFormControl) {
+ ASSERT(pDocument != NULL);
+ ASSERT(pFormControl != NULL);
- CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm();
- ASSERT(pInterForm != NULL);
+ CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm();
+ ASSERT(pInterForm != NULL);
- return pInterForm->GetWidget(pFormControl);
+ return pInterForm->GetWidget(pFormControl);
}
-FX_BOOL Field::ValueIsOccur(CPDF_FormField* pFormField, CFX_WideString csOptLabel)
-{
- ASSERT(pFormField != NULL);
+FX_BOOL Field::ValueIsOccur(CPDF_FormField* pFormField,
+ CFX_WideString csOptLabel) {
+ ASSERT(pFormField != NULL);
- for (int i=0,sz = pFormField->CountOptions(); i < sz; i++)
- {
- if (csOptLabel.Compare(pFormField->GetOptionLabel(i)) == 0)
- return TRUE;
- }
+ for (int i = 0, sz = pFormField->CountOptions(); i < sz; i++) {
+ if (csOptLabel.Compare(pFormField->GetOptionLabel(i)) == 0)
+ return TRUE;
+ }
- return FALSE;
+ return FALSE;
}
-CPDF_FormControl* Field::GetSmartFieldControl(CPDF_FormField* pFormField)
-{
- if (!pFormField->CountControls() || m_nFormControlIndex >= pFormField->CountControls())
- return NULL;
+CPDF_FormControl* Field::GetSmartFieldControl(CPDF_FormField* pFormField) {
+ if (!pFormField->CountControls() ||
+ m_nFormControlIndex >= pFormField->CountControls())
+ return NULL;
- if (m_nFormControlIndex < 0)
- return pFormField->GetControl(0);
+ if (m_nFormControlIndex < 0)
+ return pFormField->GetControl(0);
- return pFormField->GetControl(m_nFormControlIndex);
+ return pFormField->GetControl(m_nFormControlIndex);
}
-/* ---------------------------------------- property ---------------------------------------- */
+/* ---------------------------------------- property
+ * ---------------------------------------- */
-FX_BOOL Field::alignment(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- ASSERT(m_pDocument != NULL);
+FX_BOOL Field::alignment(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ ASSERT(m_pDocument != NULL);
- if (vp.IsSetting())
- {
- if (!m_bCanSet) return FALSE;
+ if (vp.IsSetting()) {
+ if (!m_bCanSet)
+ return FALSE;
- CFX_ByteString alignStr;
- vp >> alignStr;
+ CFX_ByteString alignStr;
+ vp >> alignStr;
- if (m_bDelay)
- {
- AddDelay_String(FP_ALIGNMENT, alignStr);
- }
- else
- {
- Field::SetAlignment(m_pDocument, m_FieldName, m_nFormControlIndex, alignStr);
- }
+ if (m_bDelay) {
+ AddDelay_String(FP_ALIGNMENT, alignStr);
+ } else {
+ Field::SetAlignment(m_pDocument, m_FieldName, m_nFormControlIndex,
+ alignStr);
}
- else
- {
- CFX_PtrArray FieldArray;
- GetFormFields(m_FieldName, FieldArray);
- if (FieldArray.GetSize() <= 0) return FALSE;
+ } else {
+ CFX_PtrArray FieldArray;
+ GetFormFields(m_FieldName, FieldArray);
+ if (FieldArray.GetSize() <= 0)
+ return FALSE;
- CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
- ASSERT(pFormField != NULL);
+ CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
+ ASSERT(pFormField != NULL);
- if (pFormField->GetFieldType() != FIELDTYPE_TEXTFIELD)
- return FALSE;
+ if (pFormField->GetFieldType() != FIELDTYPE_TEXTFIELD)
+ return FALSE;
- CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
- if (!pFormControl)return FALSE;
+ CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
+ if (!pFormControl)
+ return FALSE;
- switch (pFormControl->GetControlAlignment())
- {
- case 1:
- vp << L"center";
- break;
- case 0:
- vp << L"left";
- break;
- case 2:
- vp << L"right";
- break;
- default:
- vp << L"";
- }
+ switch (pFormControl->GetControlAlignment()) {
+ case 1:
+ vp << L"center";
+ break;
+ case 0:
+ vp << L"left";
+ break;
+ case 2:
+ vp << L"right";
+ break;
+ default:
+ vp << L"";
}
+ }
- return TRUE;
+ return TRUE;
}
-void Field::SetAlignment(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex,
- const CFX_ByteString& string)
-{
- //Not supported.
+void Field::SetAlignment(CPDFSDK_Document* pDocument,
+ const CFX_WideString& swFieldName,
+ int nControlIndex,
+ const CFX_ByteString& string) {
+ // Not supported.
}
-FX_BOOL Field::borderStyle(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- ASSERT(m_pDocument != NULL);
+FX_BOOL Field::borderStyle(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ ASSERT(m_pDocument != NULL);
- if (vp.IsSetting())
- {
- if (!m_bCanSet) return FALSE;
+ if (vp.IsSetting()) {
+ if (!m_bCanSet)
+ return FALSE;
- CFX_ByteString strType = "";
- vp >> strType;
+ CFX_ByteString strType = "";
+ vp >> strType;
- if (m_bDelay)
- {
- AddDelay_String(FP_BORDERSTYLE, strType);
- }
- else
- {
- Field::SetBorderStyle(m_pDocument, m_FieldName, m_nFormControlIndex, strType);
- }
+ if (m_bDelay) {
+ AddDelay_String(FP_BORDERSTYLE, strType);
+ } else {
+ Field::SetBorderStyle(m_pDocument, m_FieldName, m_nFormControlIndex,
+ strType);
}
- else
- {
- CFX_PtrArray FieldArray;
- GetFormFields(m_FieldName, FieldArray);
- if (FieldArray.GetSize() <= 0) return FALSE;
-
- CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
- if (!pFormField) return FALSE;
-
- CPDFSDK_Widget* pWidget = GetWidget(m_pDocument, GetSmartFieldControl(pFormField));
- if (!pWidget) return FALSE;
-
- int nBorderstyle = pWidget->GetBorderStyle();
-
- switch (nBorderstyle)
- {
- case BBS_SOLID:
- vp << L"solid";
- break;
- case BBS_DASH:
- vp << L"dashed";
- break;
- case BBS_BEVELED:
- vp << L"beveled";
- break;
- case BBS_INSET:
- vp << L"inset";
- break;
- case BBS_UNDERLINE:
- vp << L"underline";
- break;
- default:
- vp << L"";
- break;
- }
+ } else {
+ CFX_PtrArray FieldArray;
+ GetFormFields(m_FieldName, FieldArray);
+ if (FieldArray.GetSize() <= 0)
+ return FALSE;
+
+ CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
+ if (!pFormField)
+ return FALSE;
+
+ CPDFSDK_Widget* pWidget =
+ GetWidget(m_pDocument, GetSmartFieldControl(pFormField));
+ if (!pWidget)
+ return FALSE;
+
+ int nBorderstyle = pWidget->GetBorderStyle();
+
+ switch (nBorderstyle) {
+ case BBS_SOLID:
+ vp << L"solid";
+ break;
+ case BBS_DASH:
+ vp << L"dashed";
+ break;
+ case BBS_BEVELED:
+ vp << L"beveled";
+ break;
+ case BBS_INSET:
+ vp << L"inset";
+ break;
+ case BBS_UNDERLINE:
+ vp << L"underline";
+ break;
+ default:
+ vp << L"";
+ break;
}
+ }
- return TRUE;
+ return TRUE;
}
-void Field::SetBorderStyle(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex,
- const CFX_ByteString& string)
-{
- ASSERT(pDocument != NULL);
+void Field::SetBorderStyle(CPDFSDK_Document* pDocument,
+ const CFX_WideString& swFieldName,
+ int nControlIndex,
+ const CFX_ByteString& string) {
+ ASSERT(pDocument != NULL);
- int nBorderStyle = 0;
+ int nBorderStyle = 0;
- if (string == "solid")
- nBorderStyle = BBS_SOLID;
- else if (string == "beveled")
- nBorderStyle = BBS_BEVELED;
- else if (string == "dashed")
- nBorderStyle = BBS_DASH;
- else if (string == "inset")
- nBorderStyle = BBS_INSET;
- else if (string == "underline")
- nBorderStyle = BBS_UNDERLINE;
- else return;
+ if (string == "solid")
+ nBorderStyle = BBS_SOLID;
+ else if (string == "beveled")
+ nBorderStyle = BBS_BEVELED;
+ else if (string == "dashed")
+ nBorderStyle = BBS_DASH;
+ else if (string == "inset")
+ nBorderStyle = BBS_INSET;
+ else if (string == "underline")
+ nBorderStyle = BBS_UNDERLINE;
+ else
+ return;
- CFX_PtrArray FieldArray;
- GetFormFields(pDocument, swFieldName, FieldArray);
+ CFX_PtrArray FieldArray;
+ GetFormFields(pDocument, swFieldName, FieldArray);
- for (int i=0,isz=FieldArray.GetSize(); i<isz; i++)
- {
- CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(i);
- ASSERT(pFormField != NULL);
-
- if (nControlIndex < 0)
- {
- FX_BOOL bSet = FALSE;
- for (int j=0,jsz = pFormField->CountControls(); j<jsz; j++)
- {
- if (CPDFSDK_Widget* pWidget = GetWidget(pDocument, pFormField->GetControl(j)))
- {
- if (pWidget->GetBorderStyle() != nBorderStyle)
- {
- pWidget->SetBorderStyle(nBorderStyle);
- bSet = TRUE;
- }
- }
- }
- if (bSet) UpdateFormField(pDocument, pFormField, TRUE, TRUE, TRUE);
- }
- else
- {
- if(nControlIndex >= pFormField->CountControls()) return;
- if (CPDF_FormControl* pFormControl = pFormField->GetControl(nControlIndex))
- {
- if (CPDFSDK_Widget* pWidget = GetWidget(pDocument, pFormControl))
- {
- if (pWidget->GetBorderStyle() != nBorderStyle)
- {
- pWidget->SetBorderStyle(nBorderStyle);
- UpdateFormControl(pDocument, pFormControl, TRUE, TRUE, TRUE);
- }
- }
- }
+ for (int i = 0, isz = FieldArray.GetSize(); i < isz; i++) {
+ CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(i);
+ ASSERT(pFormField != NULL);
+
+ if (nControlIndex < 0) {
+ FX_BOOL bSet = FALSE;
+ for (int j = 0, jsz = pFormField->CountControls(); j < jsz; j++) {
+ if (CPDFSDK_Widget* pWidget =
+ GetWidget(pDocument, pFormField->GetControl(j))) {
+ if (pWidget->GetBorderStyle() != nBorderStyle) {
+ pWidget->SetBorderStyle(nBorderStyle);
+ bSet = TRUE;
+ }
+ }
+ }
+ if (bSet)
+ UpdateFormField(pDocument, pFormField, TRUE, TRUE, TRUE);
+ } else {
+ if (nControlIndex >= pFormField->CountControls())
+ return;
+ if (CPDF_FormControl* pFormControl =
+ pFormField->GetControl(nControlIndex)) {
+ if (CPDFSDK_Widget* pWidget = GetWidget(pDocument, pFormControl)) {
+ if (pWidget->GetBorderStyle() != nBorderStyle) {
+ pWidget->SetBorderStyle(nBorderStyle);
+ UpdateFormControl(pDocument, pFormControl, TRUE, TRUE, TRUE);
+ }
}
+ }
}
+ }
}
-FX_BOOL Field::buttonAlignX(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- ASSERT(m_pDocument != NULL);
+FX_BOOL Field::buttonAlignX(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ ASSERT(m_pDocument != NULL);
- if (vp.IsSetting())
- {
- if (!m_bCanSet) return FALSE;
+ if (vp.IsSetting()) {
+ if (!m_bCanSet)
+ return FALSE;
- int nVP;
- vp >> nVP;
+ int nVP;
+ vp >> nVP;
- if (m_bDelay)
- {
- AddDelay_Int(FP_BUTTONALIGNX, nVP);
- }
- else
- {
- Field::SetButtonAlignX(m_pDocument, m_FieldName, m_nFormControlIndex, nVP);
- }
+ if (m_bDelay) {
+ AddDelay_Int(FP_BUTTONALIGNX, nVP);
+ } else {
+ Field::SetButtonAlignX(m_pDocument, m_FieldName, m_nFormControlIndex,
+ nVP);
}
- else
- {
- CFX_PtrArray FieldArray;
- GetFormFields(m_FieldName,FieldArray);
- if (FieldArray.GetSize() <= 0) return FALSE;
+ } else {
+ CFX_PtrArray FieldArray;
+ GetFormFields(m_FieldName, FieldArray);
+ if (FieldArray.GetSize() <= 0)
+ return FALSE;
- CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
- ASSERT(pFormField != NULL);
+ CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
+ ASSERT(pFormField != NULL);
- if (pFormField->GetFieldType() != FIELDTYPE_PUSHBUTTON)
- return FALSE;
+ if (pFormField->GetFieldType() != FIELDTYPE_PUSHBUTTON)
+ return FALSE;
- CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
- if (!pFormControl)return FALSE;
+ CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
+ if (!pFormControl)
+ return FALSE;
- CPDF_IconFit IconFit = pFormControl->GetIconFit();
+ CPDF_IconFit IconFit = pFormControl->GetIconFit();
- FX_FLOAT fLeft,fBottom;
- IconFit.GetIconPosition(fLeft,fBottom);
+ FX_FLOAT fLeft, fBottom;
+ IconFit.GetIconPosition(fLeft, fBottom);
- vp << (int32_t)fLeft;
- }
+ vp << (int32_t)fLeft;
+ }
- return TRUE;
+ return TRUE;
}
-void Field::SetButtonAlignX(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, int number)
-{
- //Not supported.
+void Field::SetButtonAlignX(CPDFSDK_Document* pDocument,
+ const CFX_WideString& swFieldName,
+ int nControlIndex,
+ int number) {
+ // Not supported.
}
-FX_BOOL Field::buttonAlignY(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- ASSERT(m_pDocument != NULL);
+FX_BOOL Field::buttonAlignY(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ ASSERT(m_pDocument != NULL);
- if (vp.IsSetting())
- {
- if (!m_bCanSet) return FALSE;
+ if (vp.IsSetting()) {
+ if (!m_bCanSet)
+ return FALSE;
- int nVP;
- vp >> nVP;
+ int nVP;
+ vp >> nVP;
- if (m_bDelay)
- {
- AddDelay_Int(FP_BUTTONALIGNY, nVP);
- }
- else
- {
- Field::SetButtonAlignY(m_pDocument, m_FieldName, m_nFormControlIndex, nVP);
- }
+ if (m_bDelay) {
+ AddDelay_Int(FP_BUTTONALIGNY, nVP);
+ } else {
+ Field::SetButtonAlignY(m_pDocument, m_FieldName, m_nFormControlIndex,
+ nVP);
}
- else
- {
- CFX_PtrArray FieldArray;
- GetFormFields(m_FieldName,FieldArray);
- if (FieldArray.GetSize() <= 0) return FALSE;
+ } else {
+ CFX_PtrArray FieldArray;
+ GetFormFields(m_FieldName, FieldArray);
+ if (FieldArray.GetSize() <= 0)
+ return FALSE;
- CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
- ASSERT(pFormField != NULL);
+ CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
+ ASSERT(pFormField != NULL);
- if (pFormField->GetFieldType() != FIELDTYPE_PUSHBUTTON)
- return FALSE;
+ if (pFormField->GetFieldType() != FIELDTYPE_PUSHBUTTON)
+ return FALSE;
- CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
- if (!pFormControl)return FALSE;
+ CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
+ if (!pFormControl)
+ return FALSE;
- CPDF_IconFit IconFit = pFormControl->GetIconFit();
+ CPDF_IconFit IconFit = pFormControl->GetIconFit();
- FX_FLOAT fLeft,fBottom;
- IconFit.GetIconPosition(fLeft,fBottom);
+ FX_FLOAT fLeft, fBottom;
+ IconFit.GetIconPosition(fLeft, fBottom);
- vp << (int32_t)fBottom;
- }
+ vp << (int32_t)fBottom;
+ }
- return TRUE;
+ return TRUE;
}
-void Field::SetButtonAlignY(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, int number)
-{
- //Not supported.
+void Field::SetButtonAlignY(CPDFSDK_Document* pDocument,
+ const CFX_WideString& swFieldName,
+ int nControlIndex,
+ int number) {
+ // Not supported.
}
-FX_BOOL Field::buttonFitBounds(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- ASSERT(m_pDocument != NULL);
+FX_BOOL Field::buttonFitBounds(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ ASSERT(m_pDocument != NULL);
- if (vp.IsSetting())
- {
- if (!m_bCanSet) return FALSE;
+ if (vp.IsSetting()) {
+ if (!m_bCanSet)
+ return FALSE;
- bool bVP;
- vp >> bVP;
+ bool bVP;
+ vp >> bVP;
- if (m_bDelay)
- {
- AddDelay_Bool(FP_BUTTONFITBOUNDS, bVP);
- }
- else
- {
- Field::SetButtonFitBounds(m_pDocument, m_FieldName, m_nFormControlIndex, bVP);
- }
+ if (m_bDelay) {
+ AddDelay_Bool(FP_BUTTONFITBOUNDS, bVP);
+ } else {
+ Field::SetButtonFitBounds(m_pDocument, m_FieldName, m_nFormControlIndex,
+ bVP);
}
- else
- {
- CFX_PtrArray FieldArray;
- GetFormFields(m_FieldName,FieldArray);
- if (FieldArray.GetSize() <= 0) return FALSE;
+ } else {
+ CFX_PtrArray FieldArray;
+ GetFormFields(m_FieldName, FieldArray);
+ if (FieldArray.GetSize() <= 0)
+ return FALSE;
- CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
- ASSERT(pFormField != NULL);
+ CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
+ ASSERT(pFormField != NULL);
- if (pFormField->GetFieldType() != FIELDTYPE_PUSHBUTTON)
- return FALSE;
+ if (pFormField->GetFieldType() != FIELDTYPE_PUSHBUTTON)
+ return FALSE;
- CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
- if (!pFormControl)return FALSE;
+ CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
+ if (!pFormControl)
+ return FALSE;
- CPDF_IconFit IconFit = pFormControl->GetIconFit();
- vp << IconFit.GetFittingBounds();
- }
+ CPDF_IconFit IconFit = pFormControl->GetIconFit();
+ vp << IconFit.GetFittingBounds();
+ }
- return TRUE;
+ return TRUE;
}
-void Field::SetButtonFitBounds(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, bool b)
-{
- //Not supported.
+void Field::SetButtonFitBounds(CPDFSDK_Document* pDocument,
+ const CFX_WideString& swFieldName,
+ int nControlIndex,
+ bool b) {
+ // Not supported.
}
-FX_BOOL Field::buttonPosition(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- ASSERT(m_pDocument != NULL);
+FX_BOOL Field::buttonPosition(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ ASSERT(m_pDocument != NULL);
- if (vp.IsSetting())
- {
- if (!m_bCanSet) return FALSE;
+ if (vp.IsSetting()) {
+ if (!m_bCanSet)
+ return FALSE;
- int nVP;
- vp >> nVP;
+ int nVP;
+ vp >> nVP;
- if (m_bDelay)
- {
- AddDelay_Int(FP_BUTTONPOSITION, nVP);
- }
- else
- {
- Field::SetButtonPosition(m_pDocument, m_FieldName, m_nFormControlIndex, nVP);
- }
+ if (m_bDelay) {
+ AddDelay_Int(FP_BUTTONPOSITION, nVP);
+ } else {
+ Field::SetButtonPosition(m_pDocument, m_FieldName, m_nFormControlIndex,
+ nVP);
}
- else
- {
- CFX_PtrArray FieldArray;
- GetFormFields(m_FieldName,FieldArray);
- if (FieldArray.GetSize() <= 0) return FALSE;
+ } else {
+ CFX_PtrArray FieldArray;
+ GetFormFields(m_FieldName, FieldArray);
+ if (FieldArray.GetSize() <= 0)
+ return FALSE;
- CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
- ASSERT(pFormField != NULL);
+ CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
+ ASSERT(pFormField != NULL);
- if (pFormField->GetFieldType() != FIELDTYPE_PUSHBUTTON)
- return FALSE;
+ if (pFormField->GetFieldType() != FIELDTYPE_PUSHBUTTON)
+ return FALSE;
- CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
- if (!pFormControl)return FALSE;
+ CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
+ if (!pFormControl)
+ return FALSE;
- vp << pFormControl->GetTextPosition();
- }
- return TRUE;
+ vp << pFormControl->GetTextPosition();
+ }
+ return TRUE;
}
-void Field::SetButtonPosition(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, int number)
-{
- //Not supported.
+void Field::SetButtonPosition(CPDFSDK_Document* pDocument,
+ const CFX_WideString& swFieldName,
+ int nControlIndex,
+ int number) {
+ // Not supported.
}
-FX_BOOL Field::buttonScaleHow(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- ASSERT(m_pDocument != NULL);
+FX_BOOL Field::buttonScaleHow(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ ASSERT(m_pDocument != NULL);
- if (vp.IsSetting())
- {
- if (!m_bCanSet) return FALSE;
+ if (vp.IsSetting()) {
+ if (!m_bCanSet)
+ return FALSE;
- int nVP;
- vp >> nVP;
+ int nVP;
+ vp >> nVP;
- if (m_bDelay)
- {
- AddDelay_Int(FP_BUTTONSCALEHOW, nVP);
- }
- else
- {
- Field::SetButtonScaleHow(m_pDocument, m_FieldName, m_nFormControlIndex, nVP);
- }
+ if (m_bDelay) {
+ AddDelay_Int(FP_BUTTONSCALEHOW, nVP);
+ } else {
+ Field::SetButtonScaleHow(m_pDocument, m_FieldName, m_nFormControlIndex,
+ nVP);
}
- else
- {
- CFX_PtrArray FieldArray;
- GetFormFields(m_FieldName, FieldArray);
- if (FieldArray.GetSize() <= 0) return FALSE;
+ } else {
+ CFX_PtrArray FieldArray;
+ GetFormFields(m_FieldName, FieldArray);
+ if (FieldArray.GetSize() <= 0)
+ return FALSE;
- CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
- ASSERT(pFormField != NULL);
+ CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
+ ASSERT(pFormField != NULL);
- if (pFormField->GetFieldType() != FIELDTYPE_PUSHBUTTON)
- return FALSE;
+ if (pFormField->GetFieldType() != FIELDTYPE_PUSHBUTTON)
+ return FALSE;
- CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
- if (!pFormControl)return FALSE;
+ CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
+ if (!pFormControl)
+ return FALSE;
- CPDF_IconFit IconFit = pFormControl->GetIconFit();
- if (IconFit.IsProportionalScale())
- vp << (int32_t)0;
- else
- vp << (int32_t)1;
- }
+ CPDF_IconFit IconFit = pFormControl->GetIconFit();
+ if (IconFit.IsProportionalScale())
+ vp << (int32_t)0;
+ else
+ vp << (int32_t)1;
+ }
- return TRUE;
+ return TRUE;
}
-void Field::SetButtonScaleHow(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, int number)
-{
- //Not supported.
+void Field::SetButtonScaleHow(CPDFSDK_Document* pDocument,
+ const CFX_WideString& swFieldName,
+ int nControlIndex,
+ int number) {
+ // Not supported.
}
-FX_BOOL Field::buttonScaleWhen(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- ASSERT(m_pDocument != NULL);
+FX_BOOL Field::buttonScaleWhen(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ ASSERT(m_pDocument != NULL);
- if (vp.IsSetting())
- {
- if (!m_bCanSet) return FALSE;
+ if (vp.IsSetting()) {
+ if (!m_bCanSet)
+ return FALSE;
- int nVP;
- vp >> nVP;
+ int nVP;
+ vp >> nVP;
- if (m_bDelay)
- {
- AddDelay_Int(FP_BUTTONSCALEWHEN, nVP);
- }
- else
- {
- Field::SetButtonScaleWhen(m_pDocument, m_FieldName, m_nFormControlIndex, nVP);
- }
+ if (m_bDelay) {
+ AddDelay_Int(FP_BUTTONSCALEWHEN, nVP);
+ } else {
+ Field::SetButtonScaleWhen(m_pDocument, m_FieldName, m_nFormControlIndex,
+ nVP);
}
- else
- {
- CFX_PtrArray FieldArray;
- GetFormFields(m_FieldName,FieldArray);
- if (FieldArray.GetSize() <= 0) return FALSE;
-
- CPDF_FormField* pFormField = (CPDF_FormField*) FieldArray.ElementAt(0);
- ASSERT(pFormField != NULL);
-
- if (pFormField->GetFieldType() != FIELDTYPE_PUSHBUTTON)
- return FALSE;
-
- CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
- if (!pFormControl) return FALSE;
-
- CPDF_IconFit IconFit = pFormControl->GetIconFit();
- int ScaleM = IconFit.GetScaleMethod();
- switch (ScaleM)
- {
- case CPDF_IconFit::Always :
- vp << (int32_t) CPDF_IconFit::Always;
- break;
- case CPDF_IconFit::Bigger :
- vp << (int32_t) CPDF_IconFit::Bigger;
- break;
- case CPDF_IconFit::Never :
- vp << (int32_t) CPDF_IconFit::Never;
- break;
- case CPDF_IconFit::Smaller :
- vp << (int32_t) CPDF_IconFit::Smaller;
- break;
- }
+ } else {
+ CFX_PtrArray FieldArray;
+ GetFormFields(m_FieldName, FieldArray);
+ if (FieldArray.GetSize() <= 0)
+ return FALSE;
+
+ CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
+ ASSERT(pFormField != NULL);
+
+ if (pFormField->GetFieldType() != FIELDTYPE_PUSHBUTTON)
+ return FALSE;
+
+ CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
+ if (!pFormControl)
+ return FALSE;
+
+ CPDF_IconFit IconFit = pFormControl->GetIconFit();
+ int ScaleM = IconFit.GetScaleMethod();
+ switch (ScaleM) {
+ case CPDF_IconFit::Always:
+ vp << (int32_t)CPDF_IconFit::Always;
+ break;
+ case CPDF_IconFit::Bigger:
+ vp << (int32_t)CPDF_IconFit::Bigger;
+ break;
+ case CPDF_IconFit::Never:
+ vp << (int32_t)CPDF_IconFit::Never;
+ break;
+ case CPDF_IconFit::Smaller:
+ vp << (int32_t)CPDF_IconFit::Smaller;
+ break;
}
+ }
- return TRUE;
+ return TRUE;
}
-void Field::SetButtonScaleWhen(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, int number)
-{
- //Not supported.
+void Field::SetButtonScaleWhen(CPDFSDK_Document* pDocument,
+ const CFX_WideString& swFieldName,
+ int nControlIndex,
+ int number) {
+ // Not supported.
}
-FX_BOOL Field::calcOrderIndex(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- ASSERT(m_pDocument != NULL);
+FX_BOOL Field::calcOrderIndex(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ ASSERT(m_pDocument != NULL);
- if (vp.IsSetting())
- {
- if (!m_bCanSet) return FALSE;
+ if (vp.IsSetting()) {
+ if (!m_bCanSet)
+ return FALSE;
- int nVP;
- vp >> nVP;
+ int nVP;
+ vp >> nVP;
- if (m_bDelay)
- {
- AddDelay_Int(FP_CALCORDERINDEX, nVP);
- }
- else
- {
- Field::SetCalcOrderIndex(m_pDocument, m_FieldName, m_nFormControlIndex, nVP);
- }
+ if (m_bDelay) {
+ AddDelay_Int(FP_CALCORDERINDEX, nVP);
+ } else {
+ Field::SetCalcOrderIndex(m_pDocument, m_FieldName, m_nFormControlIndex,
+ nVP);
}
- else
- {
- CFX_PtrArray FieldArray;
- GetFormFields(m_FieldName, FieldArray);
- if (FieldArray.GetSize() <= 0) return FALSE;
+ } else {
+ CFX_PtrArray FieldArray;
+ GetFormFields(m_FieldName, FieldArray);
+ if (FieldArray.GetSize() <= 0)
+ return FALSE;
- CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
- ASSERT(pFormField != NULL);
+ CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
+ ASSERT(pFormField != NULL);
- if (pFormField->GetFieldType() != FIELDTYPE_COMBOBOX && pFormField->GetFieldType() != FIELDTYPE_TEXTFIELD)
- return FALSE;
+ if (pFormField->GetFieldType() != FIELDTYPE_COMBOBOX &&
+ pFormField->GetFieldType() != FIELDTYPE_TEXTFIELD)
+ return FALSE;
- CPDFSDK_InterForm* pRDInterForm = m_pDocument->GetInterForm();
- ASSERT(pRDInterForm != NULL);
+ CPDFSDK_InterForm* pRDInterForm = m_pDocument->GetInterForm();
+ ASSERT(pRDInterForm != NULL);
- CPDF_InterForm* pInterForm = pRDInterForm->GetInterForm();
- ASSERT(pInterForm != NULL);
+ CPDF_InterForm* pInterForm = pRDInterForm->GetInterForm();
+ ASSERT(pInterForm != NULL);
- vp << (int32_t)pInterForm->FindFieldInCalculationOrder(pFormField);
- }
+ vp << (int32_t)pInterForm->FindFieldInCalculationOrder(pFormField);
+ }
- return TRUE;
+ return TRUE;
}
-void Field::SetCalcOrderIndex(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, int number)
-{
- //Not supported.
+void Field::SetCalcOrderIndex(CPDFSDK_Document* pDocument,
+ const CFX_WideString& swFieldName,
+ int nControlIndex,
+ int number) {
+ // Not supported.
}
-FX_BOOL Field::charLimit(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- ASSERT(m_pDocument != NULL);
+FX_BOOL Field::charLimit(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ ASSERT(m_pDocument != NULL);
- if (vp.IsSetting())
- {
- if (!m_bCanSet) return FALSE;
+ if (vp.IsSetting()) {
+ if (!m_bCanSet)
+ return FALSE;
- int nVP;
- vp >> nVP;
+ int nVP;
+ vp >> nVP;
- if (m_bDelay)
- {
- AddDelay_Int(FP_CHARLIMIT, nVP);
- }
- else
- {
- Field::SetCharLimit(m_pDocument, m_FieldName, m_nFormControlIndex, nVP);
- }
+ if (m_bDelay) {
+ AddDelay_Int(FP_CHARLIMIT, nVP);
+ } else {
+ Field::SetCharLimit(m_pDocument, m_FieldName, m_nFormControlIndex, nVP);
}
- else
- {
- CFX_PtrArray FieldArray;
- GetFormFields(m_FieldName, FieldArray);
- if (FieldArray.GetSize() <= 0) return FALSE;
+ } else {
+ CFX_PtrArray FieldArray;
+ GetFormFields(m_FieldName, FieldArray);
+ if (FieldArray.GetSize() <= 0)
+ return FALSE;
- CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
- ASSERT(pFormField != NULL);
+ CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
+ ASSERT(pFormField != NULL);
- if (pFormField->GetFieldType() != FIELDTYPE_TEXTFIELD)
- return FALSE;
+ if (pFormField->GetFieldType() != FIELDTYPE_TEXTFIELD)
+ return FALSE;
- vp << (int32_t)pFormField->GetMaxLen();
- }
- return TRUE;
+ vp << (int32_t)pFormField->GetMaxLen();
+ }
+ return TRUE;
}
-void Field::SetCharLimit(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, int number)
-{
- //Not supported.
+void Field::SetCharLimit(CPDFSDK_Document* pDocument,
+ const CFX_WideString& swFieldName,
+ int nControlIndex,
+ int number) {
+ // Not supported.
}
-FX_BOOL Field::comb(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- ASSERT(m_pDocument != NULL);
+FX_BOOL Field::comb(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ ASSERT(m_pDocument != NULL);
- if (vp.IsSetting())
- {
- if (!m_bCanSet) return FALSE;
+ if (vp.IsSetting()) {
+ if (!m_bCanSet)
+ return FALSE;
- bool bVP;
- vp >> bVP;
+ bool bVP;
+ vp >> bVP;
- if (m_bDelay)
- {
- AddDelay_Bool(FP_COMB, bVP);
- }
- else
- {
- Field::SetComb(m_pDocument, m_FieldName, m_nFormControlIndex, bVP);
- }
+ if (m_bDelay) {
+ AddDelay_Bool(FP_COMB, bVP);
+ } else {
+ Field::SetComb(m_pDocument, m_FieldName, m_nFormControlIndex, bVP);
}
- else
- {
- CFX_PtrArray FieldArray;
- GetFormFields(m_FieldName,FieldArray);
- if (FieldArray.GetSize() <= 0) return FALSE;
+ } else {
+ CFX_PtrArray FieldArray;
+ GetFormFields(m_FieldName, FieldArray);
+ if (FieldArray.GetSize() <= 0)
+ return FALSE;
- CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
- ASSERT(pFormField != NULL);
+ CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
+ ASSERT(pFormField != NULL);
- if (pFormField->GetFieldType() != FIELDTYPE_TEXTFIELD)
- return FALSE;
+ if (pFormField->GetFieldType() != FIELDTYPE_TEXTFIELD)
+ return FALSE;
- if (pFormField->GetFieldFlags() & FIELDFLAG_COMB)
- vp << true;
- else
- vp << false;
- }
+ if (pFormField->GetFieldFlags() & FIELDFLAG_COMB)
+ vp << true;
+ else
+ vp << false;
+ }
- return TRUE;
+ return TRUE;
}
-void Field::SetComb(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, bool b)
-{
- //Not supported.
+void Field::SetComb(CPDFSDK_Document* pDocument,
+ const CFX_WideString& swFieldName,
+ int nControlIndex,
+ bool b) {
+ // Not supported.
}
-FX_BOOL Field::commitOnSelChange(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- ASSERT(m_pDocument != NULL);
+FX_BOOL Field::commitOnSelChange(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ ASSERT(m_pDocument != NULL);
- if (vp.IsSetting())
- {
- if (!m_bCanSet) return FALSE;
+ if (vp.IsSetting()) {
+ if (!m_bCanSet)
+ return FALSE;
- bool bVP;
- vp >> bVP;
+ bool bVP;
+ vp >> bVP;
- if (m_bDelay)
- {
- AddDelay_Bool(FP_COMMITONSELCHANGE, bVP);
- }
- else
- {
- Field::SetCommitOnSelChange(m_pDocument, m_FieldName, m_nFormControlIndex, bVP);
- }
+ if (m_bDelay) {
+ AddDelay_Bool(FP_COMMITONSELCHANGE, bVP);
+ } else {
+ Field::SetCommitOnSelChange(m_pDocument, m_FieldName, m_nFormControlIndex,
+ bVP);
}
- else
- {
- CFX_PtrArray FieldArray;
- GetFormFields(m_FieldName,FieldArray);
- if (FieldArray.GetSize() <= 0) return FALSE;
+ } else {
+ CFX_PtrArray FieldArray;
+ GetFormFields(m_FieldName, FieldArray);
+ if (FieldArray.GetSize() <= 0)
+ return FALSE;
- CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
- ASSERT(pFormField != NULL);
+ CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
+ ASSERT(pFormField != NULL);
- if (pFormField->GetFieldType() != FIELDTYPE_COMBOBOX && pFormField->GetFieldType() != FIELDTYPE_LISTBOX)
- return FALSE;
+ if (pFormField->GetFieldType() != FIELDTYPE_COMBOBOX &&
+ pFormField->GetFieldType() != FIELDTYPE_LISTBOX)
+ return FALSE;
- if (pFormField->GetFieldFlags() & FIELDFLAG_COMMITONSELCHANGE)
- vp << true;
- else
- vp << false;
- }
+ if (pFormField->GetFieldFlags() & FIELDFLAG_COMMITONSELCHANGE)
+ vp << true;
+ else
+ vp << false;
+ }
- return TRUE;
+ return TRUE;
}
-void Field::SetCommitOnSelChange(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, bool b)
-{
- //Not supported.
+void Field::SetCommitOnSelChange(CPDFSDK_Document* pDocument,
+ const CFX_WideString& swFieldName,
+ int nControlIndex,
+ bool b) {
+ // Not supported.
}
-FX_BOOL Field::currentValueIndices(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- ASSERT(m_pDocument != NULL);
+FX_BOOL Field::currentValueIndices(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ ASSERT(m_pDocument != NULL);
- if (vp.IsSetting())
- {
- if (!m_bCanSet) return FALSE;
+ if (vp.IsSetting()) {
+ if (!m_bCanSet)
+ return FALSE;
- CFX_DWordArray array;
+ CFX_DWordArray array;
- if (vp.GetType() == VT_number)
- {
- int iSelecting = 0;
- vp >> iSelecting;
- array.Add(iSelecting);
- }
- else if (vp.IsArrayObject())
- {
- CJS_Array SelArray(m_isolate);
- CJS_Value SelValue(m_isolate);
- int iSelecting;
- vp >> SelArray;
- for (int i=0,sz=SelArray.GetLength(); i<sz; i++)
- {
- SelArray.GetElement(i,SelValue);
- iSelecting = SelValue.ToInt();
- array.Add(iSelecting);
- }
- }
-
- if (m_bDelay)
- {
- AddDelay_WordArray(FP_CURRENTVALUEINDICES, array);
- }
- else
- {
- Field::SetCurrentValueIndices(m_pDocument, m_FieldName, m_nFormControlIndex, array);
- }
- }
- else
- {
- CFX_PtrArray FieldArray;
- GetFormFields(m_FieldName,FieldArray);
- if (FieldArray.GetSize() <= 0) return FALSE;
-
- CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
- ASSERT(pFormField != NULL);
-
- if (pFormField->GetFieldType() != FIELDTYPE_COMBOBOX && pFormField->GetFieldType() != FIELDTYPE_LISTBOX)
- return FALSE;
-
- if (pFormField->CountSelectedItems() == 1)
- vp << pFormField->GetSelectedIndex(0);
- else if (pFormField->CountSelectedItems() > 1)
- {
- CJS_Array SelArray(m_isolate);
- for (int i=0,sz=pFormField->CountSelectedItems(); i<sz; i++)
- {
- SelArray.SetElement(i, CJS_Value(m_isolate,pFormField->GetSelectedIndex(i)));
- }
- vp << SelArray;
- }
- else
- vp << -1;
+ if (vp.GetType() == VT_number) {
+ int iSelecting = 0;
+ vp >> iSelecting;
+ array.Add(iSelecting);
+ } else if (vp.IsArrayObject()) {
+ CJS_Array SelArray(m_isolate);
+ CJS_Value SelValue(m_isolate);
+ int iSelecting;
+ vp >> SelArray;
+ for (int i = 0, sz = SelArray.GetLength(); i < sz; i++) {
+ SelArray.GetElement(i, SelValue);
+ iSelecting = SelValue.ToInt();
+ array.Add(iSelecting);
+ }
}
- return TRUE;
-}
+ if (m_bDelay) {
+ AddDelay_WordArray(FP_CURRENTVALUEINDICES, array);
+ } else {
+ Field::SetCurrentValueIndices(m_pDocument, m_FieldName,
+ m_nFormControlIndex, array);
+ }
+ } else {
+ CFX_PtrArray FieldArray;
+ GetFormFields(m_FieldName, FieldArray);
+ if (FieldArray.GetSize() <= 0)
+ return FALSE;
-void Field::SetCurrentValueIndices(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex,
- const CFX_DWordArray& array)
-{
- ASSERT(pDocument != NULL);
+ CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
+ ASSERT(pFormField != NULL);
- CFX_PtrArray FieldArray;
- GetFormFields(pDocument, swFieldName, FieldArray);
+ if (pFormField->GetFieldType() != FIELDTYPE_COMBOBOX &&
+ pFormField->GetFieldType() != FIELDTYPE_LISTBOX)
+ return FALSE;
+
+ if (pFormField->CountSelectedItems() == 1)
+ vp << pFormField->GetSelectedIndex(0);
+ else if (pFormField->CountSelectedItems() > 1) {
+ CJS_Array SelArray(m_isolate);
+ for (int i = 0, sz = pFormField->CountSelectedItems(); i < sz; i++) {
+ SelArray.SetElement(
+ i, CJS_Value(m_isolate, pFormField->GetSelectedIndex(i)));
+ }
+ vp << SelArray;
+ } else
+ vp << -1;
+ }
+
+ return TRUE;
+}
+
+void Field::SetCurrentValueIndices(CPDFSDK_Document* pDocument,
+ const CFX_WideString& swFieldName,
+ int nControlIndex,
+ const CFX_DWordArray& array) {
+ ASSERT(pDocument != NULL);
+
+ CFX_PtrArray FieldArray;
+ GetFormFields(pDocument, swFieldName, FieldArray);
+
+ for (int i = 0, isz = FieldArray.GetSize(); i < isz; i++) {
+ CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(i);
+ ASSERT(pFormField != NULL);
- for (int i=0,isz=FieldArray.GetSize(); i<isz; i++)
- {
- CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(i);
- ASSERT(pFormField != NULL);
-
- int nFieldType = pFormField->GetFieldType();
- if (nFieldType == FIELDTYPE_COMBOBOX || nFieldType == FIELDTYPE_LISTBOX)
- {
- FX_DWORD dwFieldFlags = pFormField->GetFieldFlags();
- pFormField->ClearSelection(TRUE);
-
- for (int i=0,sz=array.GetSize(); i<sz; i++)
- {
- if (i>0 && !(dwFieldFlags & (1<<21)))
- {
- break;
- }
-
- int iSelecting = (int32_t)array.GetAt(i);
- if (iSelecting < pFormField->CountOptions() && !pFormField->IsItemSelected(iSelecting))
- pFormField->SetItemSelection(iSelecting, TRUE);
+ int nFieldType = pFormField->GetFieldType();
+ if (nFieldType == FIELDTYPE_COMBOBOX || nFieldType == FIELDTYPE_LISTBOX) {
+ FX_DWORD dwFieldFlags = pFormField->GetFieldFlags();
+ pFormField->ClearSelection(TRUE);
- }
- UpdateFormField(pDocument, pFormField, TRUE, TRUE, TRUE);
+ for (int i = 0, sz = array.GetSize(); i < sz; i++) {
+ if (i > 0 && !(dwFieldFlags & (1 << 21))) {
+ break;
}
+
+ int iSelecting = (int32_t)array.GetAt(i);
+ if (iSelecting < pFormField->CountOptions() &&
+ !pFormField->IsItemSelected(iSelecting))
+ pFormField->SetItemSelection(iSelecting, TRUE);
+ }
+ UpdateFormField(pDocument, pFormField, TRUE, TRUE, TRUE);
}
+ }
}
-FX_BOOL Field::defaultStyle(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- // MQG sError = JSGetStringFromID(IDS_STRING_NOTSUPPORT);
- return FALSE;
+FX_BOOL Field::defaultStyle(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ // MQG sError = JSGetStringFromID(IDS_STRING_NOTSUPPORT);
+ return FALSE;
- if (vp.IsSetting())
- {
- if (!m_bCanSet) return FALSE;
+ if (vp.IsSetting()) {
+ if (!m_bCanSet)
+ return FALSE;
- ;
- }
- else
- {
- ;
- }
- return TRUE;
+ ;
+ } else {
+ ;
+ }
+ return TRUE;
}
-void Field::SetDefaultStyle(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex)
-{
- //Not supported.
+void Field::SetDefaultStyle(CPDFSDK_Document* pDocument,
+ const CFX_WideString& swFieldName,
+ int nControlIndex) {
+ // Not supported.
}
-FX_BOOL Field::defaultValue(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- ASSERT(m_pDocument != NULL);
+FX_BOOL Field::defaultValue(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ ASSERT(m_pDocument != NULL);
- if (vp.IsSetting())
- {
- if (!m_bCanSet) return FALSE;
+ if (vp.IsSetting()) {
+ if (!m_bCanSet)
+ return FALSE;
- CFX_WideString WideStr;
- vp >> WideStr;
+ CFX_WideString WideStr;
+ vp >> WideStr;
- if (m_bDelay)
- {
- AddDelay_WideString(FP_DEFAULTVALUE, WideStr);
- }
- else
- {
- Field::SetDefaultValue(m_pDocument, m_FieldName, m_nFormControlIndex, WideStr);
- }
+ if (m_bDelay) {
+ AddDelay_WideString(FP_DEFAULTVALUE, WideStr);
+ } else {
+ Field::SetDefaultValue(m_pDocument, m_FieldName, m_nFormControlIndex,
+ WideStr);
}
- else
- {
- CFX_PtrArray FieldArray;
- GetFormFields(m_FieldName,FieldArray);
- if (FieldArray.GetSize() <= 0) return FALSE;
+ } else {
+ CFX_PtrArray FieldArray;
+ GetFormFields(m_FieldName, FieldArray);
+ if (FieldArray.GetSize() <= 0)
+ return FALSE;
- CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
- ASSERT(pFormField != NULL);
+ CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
+ ASSERT(pFormField != NULL);
- if (pFormField->GetFieldType() == FIELDTYPE_PUSHBUTTON ||
- pFormField->GetFieldType() == FIELDTYPE_SIGNATURE)
- return FALSE;
+ if (pFormField->GetFieldType() == FIELDTYPE_PUSHBUTTON ||
+ pFormField->GetFieldType() == FIELDTYPE_SIGNATURE)
+ return FALSE;
- vp << pFormField->GetDefaultValue();
- }
- return TRUE;
+ vp << pFormField->GetDefaultValue();
+ }
+ return TRUE;
}
-void Field::SetDefaultValue(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex,
- const CFX_WideString& string)
-{
- //Not supported.
+void Field::SetDefaultValue(CPDFSDK_Document* pDocument,
+ const CFX_WideString& swFieldName,
+ int nControlIndex,
+ const CFX_WideString& string) {
+ // Not supported.
}
-FX_BOOL Field::doNotScroll(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- ASSERT(m_pDocument != NULL);
+FX_BOOL Field::doNotScroll(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ ASSERT(m_pDocument != NULL);
- if (vp.IsSetting())
- {
- if (!m_bCanSet) return FALSE;
+ if (vp.IsSetting()) {
+ if (!m_bCanSet)
+ return FALSE;
- bool bVP;
- vp >> bVP;
+ bool bVP;
+ vp >> bVP;
- if (m_bDelay)
- {
- AddDelay_Bool(FP_DONOTSCROLL, bVP);
- }
- else
- {
- Field::SetDoNotScroll(m_pDocument, m_FieldName, m_nFormControlIndex, bVP);
- }
+ if (m_bDelay) {
+ AddDelay_Bool(FP_DONOTSCROLL, bVP);
+ } else {
+ Field::SetDoNotScroll(m_pDocument, m_FieldName, m_nFormControlIndex, bVP);
}
- else
- {
- CFX_PtrArray FieldArray;
- GetFormFields(m_FieldName,FieldArray);
- if (FieldArray.GetSize() <= 0) return FALSE;
+ } else {
+ CFX_PtrArray FieldArray;
+ GetFormFields(m_FieldName, FieldArray);
+ if (FieldArray.GetSize() <= 0)
+ return FALSE;
- CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
- ASSERT(pFormField != NULL);
+ CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
+ ASSERT(pFormField != NULL);
- if (pFormField->GetFieldType() != FIELDTYPE_TEXTFIELD)
- return FALSE;
+ if (pFormField->GetFieldType() != FIELDTYPE_TEXTFIELD)
+ return FALSE;
- if (pFormField->GetFieldFlags() & FIELDFLAG_DONOTSCROLL)
- vp << true;
- else
- vp << false;
- }
+ if (pFormField->GetFieldFlags() & FIELDFLAG_DONOTSCROLL)
+ vp << true;
+ else
+ vp << false;
+ }
- return TRUE;
+ return TRUE;
}
-void Field::SetDoNotScroll(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, bool b)
-{
- //Not supported.
+void Field::SetDoNotScroll(CPDFSDK_Document* pDocument,
+ const CFX_WideString& swFieldName,
+ int nControlIndex,
+ bool b) {
+ // Not supported.
}
-FX_BOOL Field::doNotSpellCheck(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- ASSERT(m_pDocument != NULL);
+FX_BOOL Field::doNotSpellCheck(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ ASSERT(m_pDocument != NULL);
- if (vp.IsSetting())
- {
- if (!m_bCanSet) return FALSE;
+ if (vp.IsSetting()) {
+ if (!m_bCanSet)
+ return FALSE;
- bool bVP;
- vp >> bVP;
- }
- else
- {
- CFX_PtrArray FieldArray;
- GetFormFields(m_FieldName,FieldArray);
- if (FieldArray.GetSize() <= 0) return FALSE;
+ bool bVP;
+ vp >> bVP;
+ } else {
+ CFX_PtrArray FieldArray;
+ GetFormFields(m_FieldName, FieldArray);
+ if (FieldArray.GetSize() <= 0)
+ return FALSE;
- CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
- ASSERT(pFormField != NULL);
+ CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
+ ASSERT(pFormField != NULL);
- if (pFormField->GetFieldType() != FIELDTYPE_TEXTFIELD &&
- pFormField->GetFieldType() != FIELDTYPE_COMBOBOX)
- return FALSE;
+ if (pFormField->GetFieldType() != FIELDTYPE_TEXTFIELD &&
+ pFormField->GetFieldType() != FIELDTYPE_COMBOBOX)
+ return FALSE;
- if (pFormField->GetFieldFlags() & FIELDFLAG_DONOTSPELLCHECK)
- vp << true;
- else
- vp << false;
- }
+ if (pFormField->GetFieldFlags() & FIELDFLAG_DONOTSPELLCHECK)
+ vp << true;
+ else
+ vp << false;
+ }
- return TRUE;
+ return TRUE;
}
-void Field::SetDelay(FX_BOOL bDelay)
-{
- m_bDelay = bDelay;
+void Field::SetDelay(FX_BOOL bDelay) {
+ m_bDelay = bDelay;
- if (!m_bDelay)
- {
- if (m_pJSDoc)
- m_pJSDoc->DoFieldDelay(m_FieldName, m_nFormControlIndex);
- }
+ if (!m_bDelay) {
+ if (m_pJSDoc)
+ m_pJSDoc->DoFieldDelay(m_FieldName, m_nFormControlIndex);
+ }
}
-FX_BOOL Field::delay(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- if (vp.IsSetting())
- {
- if (!m_bCanSet) return FALSE;
+FX_BOOL Field::delay(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ if (vp.IsSetting()) {
+ if (!m_bCanSet)
+ return FALSE;
- bool bVP;
- vp >> bVP;
+ bool bVP;
+ vp >> bVP;
- SetDelay(bVP);
- }
- else
- {
- vp << m_bDelay;
- }
- return TRUE;
+ SetDelay(bVP);
+ } else {
+ vp << m_bDelay;
+ }
+ return TRUE;
}
-FX_BOOL Field::display(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- ASSERT(m_pDocument != NULL);
+FX_BOOL Field::display(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ ASSERT(m_pDocument != NULL);
- if (vp.IsSetting())
- {
- if (!m_bCanSet) return FALSE;
+ if (vp.IsSetting()) {
+ if (!m_bCanSet)
+ return FALSE;
- int nVP;
- vp >> nVP;
+ int nVP;
+ vp >> nVP;
- if (m_bDelay)
- {
- AddDelay_Int(FP_DISPLAY, nVP);
- }
- else
- {
- Field::SetDisplay(m_pDocument, m_FieldName, m_nFormControlIndex, nVP);
- }
- }
- else
- {
- CFX_PtrArray FieldArray;
- GetFormFields(m_FieldName,FieldArray);
- if (FieldArray.GetSize() <= 0) return FALSE;
-
- CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
- ASSERT(pFormField != NULL);
-
- CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)m_pDocument->GetInterForm();
- ASSERT(pInterForm != NULL);
-
- CPDFSDK_Widget* pWidget = pInterForm->GetWidget(GetSmartFieldControl(pFormField));
- if (!pWidget)return FALSE;
-
- FX_DWORD dwFlag = pWidget->GetFlags();
-
- if (ANNOTFLAG_INVISIBLE & dwFlag || ANNOTFLAG_HIDDEN & dwFlag)
- {
- vp << (int32_t)1;
- }
- else
- {
- if (ANNOTFLAG_PRINT & dwFlag)
- {
- if (ANNOTFLAG_NOVIEW & dwFlag)
- {
- vp << (int32_t)3;
- }
- else
- {
- vp << (int32_t)0;
- }
- }
- else
- {
- vp << (int32_t)2;
- }
- }
+ if (m_bDelay) {
+ AddDelay_Int(FP_DISPLAY, nVP);
+ } else {
+ Field::SetDisplay(m_pDocument, m_FieldName, m_nFormControlIndex, nVP);
}
+ } else {
+ CFX_PtrArray FieldArray;
+ GetFormFields(m_FieldName, FieldArray);
+ if (FieldArray.GetSize() <= 0)
+ return FALSE;
- return TRUE;
-}
-
-void Field::SetDisplay(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, int number)
-{
- ASSERT(pDocument != NULL);
+ CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
+ ASSERT(pFormField != NULL);
- CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm();
+ CPDFSDK_InterForm* pInterForm =
+ (CPDFSDK_InterForm*)m_pDocument->GetInterForm();
ASSERT(pInterForm != NULL);
- CFX_PtrArray FieldArray;
- GetFormFields(pDocument, swFieldName, FieldArray);
+ CPDFSDK_Widget* pWidget =
+ pInterForm->GetWidget(GetSmartFieldControl(pFormField));
+ if (!pWidget)
+ return FALSE;
- for (int i=0,isz=FieldArray.GetSize(); i<isz; i++)
- {
- CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(i);
- ASSERT(pFormField != NULL);
-
- if (nControlIndex < 0)
- {
- FX_BOOL bSet = FALSE;
- for (int j=0,jsz = pFormField->CountControls(); j<jsz; j++)
- {
- CPDF_FormControl* pFormControl = pFormField->GetControl(j);
- ASSERT(pFormControl != NULL);
-
- if (CPDFSDK_Widget* pWidget = pInterForm->GetWidget(pFormControl))
- {
- FX_DWORD dwFlag = pWidget->GetFlags();
- switch (number)
- {
- case 0:
- dwFlag &= (~ANNOTFLAG_INVISIBLE);
- dwFlag &= (~ANNOTFLAG_HIDDEN);
- dwFlag &= (~ANNOTFLAG_NOVIEW);
- dwFlag |= ANNOTFLAG_PRINT;
- break;
- case 1:
- dwFlag &= (~ANNOTFLAG_INVISIBLE);
- dwFlag &= (~ANNOTFLAG_NOVIEW);
- dwFlag |= (ANNOTFLAG_HIDDEN | ANNOTFLAG_PRINT);
- break;
- case 2:
- dwFlag &= (~ANNOTFLAG_INVISIBLE);
- dwFlag &= (~ANNOTFLAG_PRINT);
- dwFlag &= (~ANNOTFLAG_HIDDEN);
- dwFlag &= (~ANNOTFLAG_NOVIEW);
- break;
- case 3:
- dwFlag |= ANNOTFLAG_NOVIEW;
- dwFlag |= ANNOTFLAG_PRINT;
- dwFlag &= (~ANNOTFLAG_HIDDEN);
- break;
- }
-
- if (dwFlag != pWidget->GetFlags())
- {
- pWidget->SetFlags(dwFlag);
- bSet = TRUE;
- }
- }
- }
+ FX_DWORD dwFlag = pWidget->GetFlags();
- if (bSet) UpdateFormField(pDocument, pFormField, TRUE, FALSE, TRUE);
- }
- else
- {
- if(nControlIndex >= pFormField->CountControls()) return;
- if (CPDF_FormControl* pFormControl = pFormField->GetControl(nControlIndex))
- {
- if (CPDFSDK_Widget* pWidget = pInterForm->GetWidget(pFormControl))
- {
-
- FX_DWORD dwFlag = pWidget->GetFlags();
- switch (number)
- {
- case 0:
- dwFlag &= (~ANNOTFLAG_INVISIBLE);
- dwFlag &= (~ANNOTFLAG_HIDDEN);
- dwFlag &= (~ANNOTFLAG_NOVIEW);
- dwFlag |= ANNOTFLAG_PRINT;
- break;
- case 1:
- dwFlag &= (~ANNOTFLAG_INVISIBLE);
- dwFlag &= (~ANNOTFLAG_NOVIEW);
- dwFlag |= (ANNOTFLAG_HIDDEN | ANNOTFLAG_PRINT);
- break;
- case 2:
- dwFlag &= (~ANNOTFLAG_INVISIBLE);
- dwFlag &= (~ANNOTFLAG_PRINT);
- dwFlag &= (~ANNOTFLAG_HIDDEN);
- dwFlag &= (~ANNOTFLAG_NOVIEW);
- break;
- case 3:
- dwFlag |= ANNOTFLAG_NOVIEW;
- dwFlag |= ANNOTFLAG_PRINT;
- dwFlag &= (~ANNOTFLAG_HIDDEN);
- break;
- }
- if (dwFlag != pWidget->GetFlags())
- {
- pWidget->SetFlags(dwFlag);
- UpdateFormControl(pDocument, pFormControl, TRUE, FALSE, TRUE);
- }
- }
- }
+ if (ANNOTFLAG_INVISIBLE & dwFlag || ANNOTFLAG_HIDDEN & dwFlag) {
+ vp << (int32_t)1;
+ } else {
+ if (ANNOTFLAG_PRINT & dwFlag) {
+ if (ANNOTFLAG_NOVIEW & dwFlag) {
+ vp << (int32_t)3;
+ } else {
+ vp << (int32_t)0;
}
+ } else {
+ vp << (int32_t)2;
+ }
}
-}
+ }
-FX_BOOL Field::doc(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- if (!vp.IsGetting()) {
- return FALSE;
- }
- vp << m_pJSDoc->GetCJSDoc();
- return TRUE;
+ return TRUE;
}
-FX_BOOL Field::editable(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- ASSERT(m_pDocument != NULL);
- if (vp.IsSetting())
- {
- if (!m_bCanSet) return FALSE;
-
- bool bVP;
- vp >> bVP;
- }
- else
- {
- CFX_PtrArray FieldArray;
- GetFormFields(m_FieldName, FieldArray);
- if (FieldArray.GetSize() <= 0) return FALSE;
+void Field::SetDisplay(CPDFSDK_Document* pDocument,
+ const CFX_WideString& swFieldName,
+ int nControlIndex,
+ int number) {
+ ASSERT(pDocument != NULL);
- CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
- ASSERT(pFormField != NULL);
+ CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm();
+ ASSERT(pInterForm != NULL);
- if (pFormField->GetFieldType() != FIELDTYPE_COMBOBOX)
- return FALSE;
+ CFX_PtrArray FieldArray;
+ GetFormFields(pDocument, swFieldName, FieldArray);
- if (pFormField->GetFieldFlags() & FIELDFLAG_EDIT)
- vp << true;
- else
- vp << false;
- }
-
- return TRUE;
-}
+ for (int i = 0, isz = FieldArray.GetSize(); i < isz; i++) {
+ CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(i);
+ ASSERT(pFormField != NULL);
-FX_BOOL Field::exportValues(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- ASSERT(m_pDocument != NULL);
+ if (nControlIndex < 0) {
+ FX_BOOL bSet = FALSE;
+ for (int j = 0, jsz = pFormField->CountControls(); j < jsz; j++) {
+ CPDF_FormControl* pFormControl = pFormField->GetControl(j);
+ ASSERT(pFormControl != NULL);
+ if (CPDFSDK_Widget* pWidget = pInterForm->GetWidget(pFormControl)) {
+ FX_DWORD dwFlag = pWidget->GetFlags();
+ switch (number) {
+ case 0:
+ dwFlag &= (~ANNOTFLAG_INVISIBLE);
+ dwFlag &= (~ANNOTFLAG_HIDDEN);
+ dwFlag &= (~ANNOTFLAG_NOVIEW);
+ dwFlag |= ANNOTFLAG_PRINT;
+ break;
+ case 1:
+ dwFlag &= (~ANNOTFLAG_INVISIBLE);
+ dwFlag &= (~ANNOTFLAG_NOVIEW);
+ dwFlag |= (ANNOTFLAG_HIDDEN | ANNOTFLAG_PRINT);
+ break;
+ case 2:
+ dwFlag &= (~ANNOTFLAG_INVISIBLE);
+ dwFlag &= (~ANNOTFLAG_PRINT);
+ dwFlag &= (~ANNOTFLAG_HIDDEN);
+ dwFlag &= (~ANNOTFLAG_NOVIEW);
+ break;
+ case 3:
+ dwFlag |= ANNOTFLAG_NOVIEW;
+ dwFlag |= ANNOTFLAG_PRINT;
+ dwFlag &= (~ANNOTFLAG_HIDDEN);
+ break;
+ }
+
+ if (dwFlag != pWidget->GetFlags()) {
+ pWidget->SetFlags(dwFlag);
+ bSet = TRUE;
+ }
+ }
+ }
+
+ if (bSet)
+ UpdateFormField(pDocument, pFormField, TRUE, FALSE, TRUE);
+ } else {
+ if (nControlIndex >= pFormField->CountControls())
+ return;
+ if (CPDF_FormControl* pFormControl =
+ pFormField->GetControl(nControlIndex)) {
+ if (CPDFSDK_Widget* pWidget = pInterForm->GetWidget(pFormControl)) {
+ FX_DWORD dwFlag = pWidget->GetFlags();
+ switch (number) {
+ case 0:
+ dwFlag &= (~ANNOTFLAG_INVISIBLE);
+ dwFlag &= (~ANNOTFLAG_HIDDEN);
+ dwFlag &= (~ANNOTFLAG_NOVIEW);
+ dwFlag |= ANNOTFLAG_PRINT;
+ break;
+ case 1:
+ dwFlag &= (~ANNOTFLAG_INVISIBLE);
+ dwFlag &= (~ANNOTFLAG_NOVIEW);
+ dwFlag |= (ANNOTFLAG_HIDDEN | ANNOTFLAG_PRINT);
+ break;
+ case 2:
+ dwFlag &= (~ANNOTFLAG_INVISIBLE);
+ dwFlag &= (~ANNOTFLAG_PRINT);
+ dwFlag &= (~ANNOTFLAG_HIDDEN);
+ dwFlag &= (~ANNOTFLAG_NOVIEW);
+ break;
+ case 3:
+ dwFlag |= ANNOTFLAG_NOVIEW;
+ dwFlag |= ANNOTFLAG_PRINT;
+ dwFlag &= (~ANNOTFLAG_HIDDEN);
+ break;
+ }
+ if (dwFlag != pWidget->GetFlags()) {
+ pWidget->SetFlags(dwFlag);
+ UpdateFormControl(pDocument, pFormControl, TRUE, FALSE, TRUE);
+ }
+ }
+ }
+ }
+ }
+}
+
+FX_BOOL Field::doc(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ if (!vp.IsGetting()) {
+ return FALSE;
+ }
+ vp << m_pJSDoc->GetCJSDoc();
+ return TRUE;
+}
+
+FX_BOOL Field::editable(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ ASSERT(m_pDocument != NULL);
+ if (vp.IsSetting()) {
+ if (!m_bCanSet)
+ return FALSE;
+
+ bool bVP;
+ vp >> bVP;
+ } else {
CFX_PtrArray FieldArray;
- GetFormFields(m_FieldName,FieldArray);
+ GetFormFields(m_FieldName, FieldArray);
if (FieldArray.GetSize() <= 0)
- return FALSE;
+ return FALSE;
CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
- if (pFormField->GetFieldType() != FIELDTYPE_CHECKBOX &&
- pFormField->GetFieldType() != FIELDTYPE_RADIOBUTTON)
- return FALSE;
+ ASSERT(pFormField != NULL);
- if (vp.IsSetting())
- {
- if (!m_bCanSet)
- return FALSE;
+ if (pFormField->GetFieldType() != FIELDTYPE_COMBOBOX)
+ return FALSE;
- if (!vp.IsArrayObject())
- return FALSE;
- }
+ if (pFormField->GetFieldFlags() & FIELDFLAG_EDIT)
+ vp << true;
else
- {
- CJS_Array ExportValusArray(m_isolate);
- if (m_nFormControlIndex < 0)
- {
- for (int i=0,sz=pFormField->CountControls(); i<sz; i++)
- {
- CPDF_FormControl* pFormControl = pFormField->GetControl(i);
- ExportValusArray.SetElement(i, CJS_Value(m_isolate,pFormControl->GetExportValue().c_str()));
- }
- }
- else
- {
- if (m_nFormControlIndex >= pFormField->CountControls())
- return FALSE;
+ vp << false;
+ }
- CPDF_FormControl* pFormControl = pFormField->GetControl(m_nFormControlIndex);
- if (!pFormControl)
- return FALSE;
-
- ExportValusArray.SetElement(0, CJS_Value(m_isolate,pFormControl->GetExportValue().c_str()));
- }
- vp << ExportValusArray;
- }
- return TRUE;
+ return TRUE;
}
-FX_BOOL Field::fileSelect(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- ASSERT(m_pDocument != NULL);
+FX_BOOL Field::exportValues(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ ASSERT(m_pDocument != NULL);
- CFX_PtrArray FieldArray;
- GetFormFields(m_FieldName, FieldArray);
- if (FieldArray.GetSize() <= 0)
- return FALSE;
+ CFX_PtrArray FieldArray;
+ GetFormFields(m_FieldName, FieldArray);
+ if (FieldArray.GetSize() <= 0)
+ return FALSE;
- CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
- if (pFormField->GetFieldType() != FIELDTYPE_TEXTFIELD)
+ CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
+ if (pFormField->GetFieldType() != FIELDTYPE_CHECKBOX &&
+ pFormField->GetFieldType() != FIELDTYPE_RADIOBUTTON)
+ return FALSE;
+
+ if (vp.IsSetting()) {
+ if (!m_bCanSet)
+ return FALSE;
+
+ if (!vp.IsArrayObject())
+ return FALSE;
+ } else {
+ CJS_Array ExportValusArray(m_isolate);
+ if (m_nFormControlIndex < 0) {
+ for (int i = 0, sz = pFormField->CountControls(); i < sz; i++) {
+ CPDF_FormControl* pFormControl = pFormField->GetControl(i);
+ ExportValusArray.SetElement(
+ i, CJS_Value(m_isolate, pFormControl->GetExportValue().c_str()));
+ }
+ } else {
+ if (m_nFormControlIndex >= pFormField->CountControls())
return FALSE;
- if (vp.IsSetting())
- {
- if (!m_bCanSet)
- return FALSE;
+ CPDF_FormControl* pFormControl =
+ pFormField->GetControl(m_nFormControlIndex);
+ if (!pFormControl)
+ return FALSE;
- bool bVP;
- vp >> bVP;
+ ExportValusArray.SetElement(
+ 0, CJS_Value(m_isolate, pFormControl->GetExportValue().c_str()));
}
- else
- {
- if (pFormField->GetFieldFlags() & FIELDFLAG_FILESELECT)
- vp << true;
- else
- vp << false;
- }
- return TRUE;
+ vp << ExportValusArray;
+ }
+ return TRUE;
}
-FX_BOOL Field::fillColor(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- ASSERT(m_pDocument != NULL);
-
- CJS_Array crArray(m_isolate);
-
- CFX_PtrArray FieldArray;
- GetFormFields(m_FieldName, FieldArray);
- if (FieldArray.GetSize() <= 0)
- return FALSE;
+FX_BOOL Field::fileSelect(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ ASSERT(m_pDocument != NULL);
- if (vp.IsSetting())
- {
- if (!m_bCanSet)
- return FALSE;
+ CFX_PtrArray FieldArray;
+ GetFormFields(m_FieldName, FieldArray);
+ if (FieldArray.GetSize() <= 0)
+ return FALSE;
- if (!vp.IsArrayObject())
- return FALSE;
+ CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
+ if (pFormField->GetFieldType() != FIELDTYPE_TEXTFIELD)
+ return FALSE;
- vp >> crArray;
+ if (vp.IsSetting()) {
+ if (!m_bCanSet)
+ return FALSE;
- CPWL_Color color;
- color::ConvertArrayToPWLColor(crArray, color);
- if (m_bDelay)
- {
- AddDelay_Color(FP_FILLCOLOR, color);
- }
- else
- {
- Field::SetFillColor(m_pDocument, m_FieldName, m_nFormControlIndex, color);
- }
- }
+ bool bVP;
+ vp >> bVP;
+ } else {
+ if (pFormField->GetFieldFlags() & FIELDFLAG_FILESELECT)
+ vp << true;
else
- {
- CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
- ASSERT(pFormField != NULL);
-
- CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
- if (!pFormControl)
- return FALSE;
-
- int iColorType;
- pFormControl->GetBackgroundColor(iColorType);
-
- CPWL_Color color;
- if (iColorType == COLORTYPE_TRANSPARENT)
- {
- color = CPWL_Color(COLORTYPE_TRANSPARENT);
- }
- else if (iColorType == COLORTYPE_GRAY)
- {
- color = CPWL_Color(COLORTYPE_GRAY, pFormControl->GetOriginalBackgroundColor(0));
- }
- else if (iColorType == COLORTYPE_RGB)
- {
- color = CPWL_Color(COLORTYPE_RGB, pFormControl->GetOriginalBackgroundColor(0),
- pFormControl->GetOriginalBackgroundColor(1),
- pFormControl->GetOriginalBackgroundColor(2));
- }
- else if (iColorType == COLORTYPE_CMYK)
- {
- color = CPWL_Color(COLORTYPE_CMYK, pFormControl->GetOriginalBackgroundColor(0),
- pFormControl->GetOriginalBackgroundColor(1),
- pFormControl->GetOriginalBackgroundColor(2),
- pFormControl->GetOriginalBackgroundColor(3));
- }
- else
- return FALSE;
-
- color::ConvertPWLColorToArray(color, crArray);
- vp << crArray;
- }
-
- return TRUE;
+ vp << false;
+ }
+ return TRUE;
}
-void Field::SetFillColor(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, const CPWL_Color& color)
-{
- //Not supported.
-}
+FX_BOOL Field::fillColor(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ ASSERT(m_pDocument != NULL);
-FX_BOOL Field::hidden(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- ASSERT(m_pDocument != NULL);
-
- if (vp.IsSetting())
- {
- if (!m_bCanSet) return FALSE;
+ CJS_Array crArray(m_isolate);
- bool bVP;
- vp >> bVP;
-
- if (m_bDelay)
- {
- AddDelay_Bool(FP_HIDDEN, bVP);
- }
- else
- {
- Field::SetHidden(m_pDocument, m_FieldName, m_nFormControlIndex, bVP);
- }
- }
- else
- {
- CFX_PtrArray FieldArray;
- GetFormFields(m_FieldName,FieldArray);
- if (FieldArray.GetSize() <= 0) return FALSE;
-
- CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
- ASSERT(pFormField != NULL);
+ CFX_PtrArray FieldArray;
+ GetFormFields(m_FieldName, FieldArray);
+ if (FieldArray.GetSize() <= 0)
+ return FALSE;
- CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)m_pDocument->GetInterForm();
- ASSERT(pInterForm != NULL);
+ if (vp.IsSetting()) {
+ if (!m_bCanSet)
+ return FALSE;
- CPDFSDK_Widget* pWidget = pInterForm->GetWidget(GetSmartFieldControl(pFormField));
- if (!pWidget) return FALSE;
+ if (!vp.IsArrayObject())
+ return FALSE;
- FX_DWORD dwFlags = pWidget->GetFlags();
+ vp >> crArray;
- if (ANNOTFLAG_INVISIBLE & dwFlags || ANNOTFLAG_HIDDEN & dwFlags)
- {
- vp << true;
- }
- else
- vp << false;
+ CPWL_Color color;
+ color::ConvertArrayToPWLColor(crArray, color);
+ if (m_bDelay) {
+ AddDelay_Color(FP_FILLCOLOR, color);
+ } else {
+ Field::SetFillColor(m_pDocument, m_FieldName, m_nFormControlIndex, color);
}
+ } else {
+ CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
+ ASSERT(pFormField != NULL);
- return TRUE;
-}
+ CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
+ if (!pFormControl)
+ return FALSE;
+
+ int iColorType;
+ pFormControl->GetBackgroundColor(iColorType);
+
+ CPWL_Color color;
+ if (iColorType == COLORTYPE_TRANSPARENT) {
+ color = CPWL_Color(COLORTYPE_TRANSPARENT);
+ } else if (iColorType == COLORTYPE_GRAY) {
+ color = CPWL_Color(COLORTYPE_GRAY,
+ pFormControl->GetOriginalBackgroundColor(0));
+ } else if (iColorType == COLORTYPE_RGB) {
+ color =
+ CPWL_Color(COLORTYPE_RGB, pFormControl->GetOriginalBackgroundColor(0),
+ pFormControl->GetOriginalBackgroundColor(1),
+ pFormControl->GetOriginalBackgroundColor(2));
+ } else if (iColorType == COLORTYPE_CMYK) {
+ color = CPWL_Color(COLORTYPE_CMYK,
+ pFormControl->GetOriginalBackgroundColor(0),
+ pFormControl->GetOriginalBackgroundColor(1),
+ pFormControl->GetOriginalBackgroundColor(2),
+ pFormControl->GetOriginalBackgroundColor(3));
+ } else
+ return FALSE;
+
+ color::ConvertPWLColorToArray(color, crArray);
+ vp << crArray;
+ }
+
+ return TRUE;
+}
+
+void Field::SetFillColor(CPDFSDK_Document* pDocument,
+ const CFX_WideString& swFieldName,
+ int nControlIndex,
+ const CPWL_Color& color) {
+ // Not supported.
+}
+
+FX_BOOL Field::hidden(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ ASSERT(m_pDocument != NULL);
+
+ if (vp.IsSetting()) {
+ if (!m_bCanSet)
+ return FALSE;
+
+ bool bVP;
+ vp >> bVP;
+
+ if (m_bDelay) {
+ AddDelay_Bool(FP_HIDDEN, bVP);
+ } else {
+ Field::SetHidden(m_pDocument, m_FieldName, m_nFormControlIndex, bVP);
+ }
+ } else {
+ CFX_PtrArray FieldArray;
+ GetFormFields(m_FieldName, FieldArray);
+ if (FieldArray.GetSize() <= 0)
+ return FALSE;
-void Field::SetHidden(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, bool b)
-{
- ASSERT(pDocument != NULL);
+ CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
+ ASSERT(pFormField != NULL);
- CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm();
+ CPDFSDK_InterForm* pInterForm =
+ (CPDFSDK_InterForm*)m_pDocument->GetInterForm();
ASSERT(pInterForm != NULL);
- CFX_PtrArray FieldArray;
- GetFormFields(pDocument, swFieldName, FieldArray);
+ CPDFSDK_Widget* pWidget =
+ pInterForm->GetWidget(GetSmartFieldControl(pFormField));
+ if (!pWidget)
+ return FALSE;
- for (int i=0,isz=FieldArray.GetSize(); i<isz; i++)
- {
- CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(i);
- ASSERT(pFormField != NULL);
-
- if (nControlIndex < 0)
- {
- FX_BOOL bSet = FALSE;
- for (int j=0,jsz = pFormField->CountControls(); j<jsz; j++)
- {
- if (CPDFSDK_Widget* pWidget = pInterForm->GetWidget(pFormField->GetControl(j)))
- {
- FX_DWORD dwFlags = pWidget->GetFlags();
-
- if (b)
- {
- dwFlags &= (~ANNOTFLAG_INVISIBLE);
- dwFlags &= (~ANNOTFLAG_NOVIEW);
- dwFlags |= (ANNOTFLAG_HIDDEN | ANNOTFLAG_PRINT);
- }
- else
- {
- dwFlags &= (~ANNOTFLAG_INVISIBLE);
- dwFlags &= (~ANNOTFLAG_HIDDEN);
- dwFlags &= (~ANNOTFLAG_NOVIEW);
- dwFlags |= ANNOTFLAG_PRINT;
- }
-
- if (dwFlags != pWidget->GetFlags())
- {
- pWidget->SetFlags(dwFlags);
- bSet = TRUE;
- }
- }
- }
+ FX_DWORD dwFlags = pWidget->GetFlags();
- if (bSet)
- UpdateFormField(pDocument, pFormField, TRUE, FALSE, TRUE);
- }
- else
- {
- if(nControlIndex >= pFormField->CountControls()) return;
- if (CPDF_FormControl* pFormControl = pFormField->GetControl(nControlIndex))
- {
- if (CPDFSDK_Widget* pWidget = pInterForm->GetWidget(pFormControl))
- {
- FX_DWORD dwFlags = pWidget->GetFlags();
-
- if (b)
- {
- dwFlags &= (~ANNOTFLAG_INVISIBLE);
- dwFlags &= (~ANNOTFLAG_NOVIEW);
- dwFlags |= (ANNOTFLAG_HIDDEN | ANNOTFLAG_PRINT);
- }
- else
- {
- dwFlags &= (~ANNOTFLAG_INVISIBLE);
- dwFlags &= (~ANNOTFLAG_HIDDEN);
- dwFlags &= (~ANNOTFLAG_NOVIEW);
- dwFlags |= ANNOTFLAG_PRINT;
- }
-
- if (dwFlags != pWidget->GetFlags())
- {
- pWidget->SetFlags(dwFlags);
- UpdateFormControl(pDocument, pFormControl, TRUE, FALSE, TRUE);
- }
- }
- }
- }
- }
+ if (ANNOTFLAG_INVISIBLE & dwFlags || ANNOTFLAG_HIDDEN & dwFlags) {
+ vp << true;
+ } else
+ vp << false;
+ }
+
+ return TRUE;
}
-FX_BOOL Field::highlight(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- ASSERT(m_pDocument != NULL);
+void Field::SetHidden(CPDFSDK_Document* pDocument,
+ const CFX_WideString& swFieldName,
+ int nControlIndex,
+ bool b) {
+ ASSERT(pDocument != NULL);
- if (vp.IsSetting())
- {
- if (!m_bCanSet) return FALSE;
+ CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm();
+ ASSERT(pInterForm != NULL);
- CFX_ByteString strMode;
- vp >> strMode;
+ CFX_PtrArray FieldArray;
+ GetFormFields(pDocument, swFieldName, FieldArray);
- if (m_bDelay)
- {
- AddDelay_String(FP_HIGHLIGHT, strMode);
- }
- else
- {
- Field::SetHighlight(m_pDocument, m_FieldName, m_nFormControlIndex, strMode);
- }
- }
- else
- {
- CFX_PtrArray FieldArray;
- GetFormFields(m_FieldName,FieldArray);
- if (FieldArray.GetSize() <= 0) return FALSE;
+ for (int i = 0, isz = FieldArray.GetSize(); i < isz; i++) {
+ CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(i);
+ ASSERT(pFormField != NULL);
- CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
- ASSERT(pFormField != NULL);
+ if (nControlIndex < 0) {
+ FX_BOOL bSet = FALSE;
+ for (int j = 0, jsz = pFormField->CountControls(); j < jsz; j++) {
+ if (CPDFSDK_Widget* pWidget =
+ pInterForm->GetWidget(pFormField->GetControl(j))) {
+ FX_DWORD dwFlags = pWidget->GetFlags();
+
+ if (b) {
+ dwFlags &= (~ANNOTFLAG_INVISIBLE);
+ dwFlags &= (~ANNOTFLAG_NOVIEW);
+ dwFlags |= (ANNOTFLAG_HIDDEN | ANNOTFLAG_PRINT);
+ } else {
+ dwFlags &= (~ANNOTFLAG_INVISIBLE);
+ dwFlags &= (~ANNOTFLAG_HIDDEN);
+ dwFlags &= (~ANNOTFLAG_NOVIEW);
+ dwFlags |= ANNOTFLAG_PRINT;
+ }
+
+ if (dwFlags != pWidget->GetFlags()) {
+ pWidget->SetFlags(dwFlags);
+ bSet = TRUE;
+ }
+ }
+ }
+
+ if (bSet)
+ UpdateFormField(pDocument, pFormField, TRUE, FALSE, TRUE);
+ } else {
+ if (nControlIndex >= pFormField->CountControls())
+ return;
+ if (CPDF_FormControl* pFormControl =
+ pFormField->GetControl(nControlIndex)) {
+ if (CPDFSDK_Widget* pWidget = pInterForm->GetWidget(pFormControl)) {
+ FX_DWORD dwFlags = pWidget->GetFlags();
+
+ if (b) {
+ dwFlags &= (~ANNOTFLAG_INVISIBLE);
+ dwFlags &= (~ANNOTFLAG_NOVIEW);
+ dwFlags |= (ANNOTFLAG_HIDDEN | ANNOTFLAG_PRINT);
+ } else {
+ dwFlags &= (~ANNOTFLAG_INVISIBLE);
+ dwFlags &= (~ANNOTFLAG_HIDDEN);
+ dwFlags &= (~ANNOTFLAG_NOVIEW);
+ dwFlags |= ANNOTFLAG_PRINT;
+ }
+
+ if (dwFlags != pWidget->GetFlags()) {
+ pWidget->SetFlags(dwFlags);
+ UpdateFormControl(pDocument, pFormControl, TRUE, FALSE, TRUE);
+ }
+ }
+ }
+ }
+ }
+}
+
+FX_BOOL Field::highlight(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ ASSERT(m_pDocument != NULL);
+
+ if (vp.IsSetting()) {
+ if (!m_bCanSet)
+ return FALSE;
+
+ CFX_ByteString strMode;
+ vp >> strMode;
+
+ if (m_bDelay) {
+ AddDelay_String(FP_HIGHLIGHT, strMode);
+ } else {
+ Field::SetHighlight(m_pDocument, m_FieldName, m_nFormControlIndex,
+ strMode);
+ }
+ } else {
+ CFX_PtrArray FieldArray;
+ GetFormFields(m_FieldName, FieldArray);
+ if (FieldArray.GetSize() <= 0)
+ return FALSE;
- if (pFormField->GetFieldType() != FIELDTYPE_PUSHBUTTON)
- return FALSE;
+ CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
+ ASSERT(pFormField != NULL);
- CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
- if (!pFormControl) return FALSE;
+ if (pFormField->GetFieldType() != FIELDTYPE_PUSHBUTTON)
+ return FALSE;
- int eHM = pFormControl->GetHighlightingMode();
- switch (eHM)
- {
- case CPDF_FormControl::None:
- vp << L"none";
- break;
- case CPDF_FormControl::Push:
- vp << L"push";
- break;
- case CPDF_FormControl::Invert:
- vp << L"invert";
- break;
- case CPDF_FormControl::Outline:
- vp << L"outline";
- break;
- case CPDF_FormControl::Toggle:
- vp << L"toggle";
- break;
- }
+ CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
+ if (!pFormControl)
+ return FALSE;
+
+ int eHM = pFormControl->GetHighlightingMode();
+ switch (eHM) {
+ case CPDF_FormControl::None:
+ vp << L"none";
+ break;
+ case CPDF_FormControl::Push:
+ vp << L"push";
+ break;
+ case CPDF_FormControl::Invert:
+ vp << L"invert";
+ break;
+ case CPDF_FormControl::Outline:
+ vp << L"outline";
+ break;
+ case CPDF_FormControl::Toggle:
+ vp << L"toggle";
+ break;
}
+ }
- return TRUE;
+ return TRUE;
}
-void Field::SetHighlight(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, const CFX_ByteString& string)
-{
- //Not supported.
+void Field::SetHighlight(CPDFSDK_Document* pDocument,
+ const CFX_WideString& swFieldName,
+ int nControlIndex,
+ const CFX_ByteString& string) {
+ // Not supported.
}
-FX_BOOL Field::lineWidth(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- ASSERT(m_pDocument != NULL);
+FX_BOOL Field::lineWidth(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ ASSERT(m_pDocument != NULL);
- if (vp.IsSetting())
- {
- if (!m_bCanSet) return FALSE;
+ if (vp.IsSetting()) {
+ if (!m_bCanSet)
+ return FALSE;
- int iWidth;
- vp >> iWidth;
+ int iWidth;
+ vp >> iWidth;
- if (m_bDelay)
- {
- AddDelay_Int(FP_LINEWIDTH, iWidth);
- }
- else
- {
- Field::SetLineWidth(m_pDocument, m_FieldName, m_nFormControlIndex, iWidth);
- }
+ if (m_bDelay) {
+ AddDelay_Int(FP_LINEWIDTH, iWidth);
+ } else {
+ Field::SetLineWidth(m_pDocument, m_FieldName, m_nFormControlIndex,
+ iWidth);
}
- else
- {
- CFX_PtrArray FieldArray;
- GetFormFields(m_FieldName,FieldArray);
- if (FieldArray.GetSize() <= 0) return FALSE;
+ } else {
+ CFX_PtrArray FieldArray;
+ GetFormFields(m_FieldName, FieldArray);
+ if (FieldArray.GetSize() <= 0)
+ return FALSE;
- CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
- ASSERT(pFormField != NULL);
+ CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
+ ASSERT(pFormField != NULL);
- CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
- if (!pFormControl) return FALSE;
+ CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
+ if (!pFormControl)
+ return FALSE;
- CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)m_pDocument->GetInterForm();
- ASSERT(pInterForm != NULL);
+ CPDFSDK_InterForm* pInterForm =
+ (CPDFSDK_InterForm*)m_pDocument->GetInterForm();
+ ASSERT(pInterForm != NULL);
- if(!pFormField->CountControls()) return FALSE;
+ if (!pFormField->CountControls())
+ return FALSE;
- CPDFSDK_Widget* pWidget = pInterForm->GetWidget(pFormField->GetControl(0));
- if (!pWidget) return FALSE;
+ CPDFSDK_Widget* pWidget = pInterForm->GetWidget(pFormField->GetControl(0));
+ if (!pWidget)
+ return FALSE;
- vp << (int32_t)pWidget->GetBorderWidth();
- }
+ vp << (int32_t)pWidget->GetBorderWidth();
+ }
- return TRUE;
+ return TRUE;
}
-void Field::SetLineWidth(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, int number)
-{
- ASSERT(pDocument != NULL);
+void Field::SetLineWidth(CPDFSDK_Document* pDocument,
+ const CFX_WideString& swFieldName,
+ int nControlIndex,
+ int number) {
+ ASSERT(pDocument != NULL);
- CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm();
- ASSERT(pInterForm != NULL);
+ CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm();
+ ASSERT(pInterForm != NULL);
- CFX_PtrArray FieldArray;
- GetFormFields(pDocument, swFieldName, FieldArray);
+ CFX_PtrArray FieldArray;
+ GetFormFields(pDocument, swFieldName, FieldArray);
- for (int i=0,isz=FieldArray.GetSize(); i<isz; i++)
- {
- CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(i);
- ASSERT(pFormField != NULL);
-
- if (nControlIndex < 0)
- {
- FX_BOOL bSet = FALSE;
- for (int j=0,jsz=pFormField->CountControls(); j<jsz; j++)
- {
- CPDF_FormControl* pFormControl = pFormField->GetControl(j);
- ASSERT(pFormControl != NULL);
-
- if (CPDFSDK_Widget* pWidget = pInterForm->GetWidget(pFormControl))
- {
- if (number != pWidget->GetBorderWidth())
- {
- pWidget->SetBorderWidth(number);
- bSet = TRUE;
- }
- }
- }
- if (bSet) UpdateFormField(pDocument, pFormField, TRUE, TRUE, TRUE);
- }
- else
- {
- if(nControlIndex >= pFormField->CountControls()) return;
- if (CPDF_FormControl* pFormControl = pFormField->GetControl(nControlIndex))
- {
- if (CPDFSDK_Widget* pWidget = pInterForm->GetWidget(pFormControl))
- {
- if (number != pWidget->GetBorderWidth())
- {
- pWidget->SetBorderWidth(number);
- UpdateFormControl(pDocument, pFormControl, TRUE, TRUE, TRUE);
- }
- }
- }
+ for (int i = 0, isz = FieldArray.GetSize(); i < isz; i++) {
+ CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(i);
+ ASSERT(pFormField != NULL);
+
+ if (nControlIndex < 0) {
+ FX_BOOL bSet = FALSE;
+ for (int j = 0, jsz = pFormField->CountControls(); j < jsz; j++) {
+ CPDF_FormControl* pFormControl = pFormField->GetControl(j);
+ ASSERT(pFormControl != NULL);
+
+ if (CPDFSDK_Widget* pWidget = pInterForm->GetWidget(pFormControl)) {
+ if (number != pWidget->GetBorderWidth()) {
+ pWidget->SetBorderWidth(number);
+ bSet = TRUE;
+ }
+ }
+ }
+ if (bSet)
+ UpdateFormField(pDocument, pFormField, TRUE, TRUE, TRUE);
+ } else {
+ if (nControlIndex >= pFormField->CountControls())
+ return;
+ if (CPDF_FormControl* pFormControl =
+ pFormField->GetControl(nControlIndex)) {
+ if (CPDFSDK_Widget* pWidget = pInterForm->GetWidget(pFormControl)) {
+ if (number != pWidget->GetBorderWidth()) {
+ pWidget->SetBorderWidth(number);
+ UpdateFormControl(pDocument, pFormControl, TRUE, TRUE, TRUE);
+ }
}
+ }
}
+ }
}
-FX_BOOL Field::multiline(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- ASSERT(m_pDocument != NULL);
+FX_BOOL Field::multiline(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ ASSERT(m_pDocument != NULL);
- if (vp.IsSetting())
- {
- if (!m_bCanSet) return FALSE;
+ if (vp.IsSetting()) {
+ if (!m_bCanSet)
+ return FALSE;
- bool bVP;
- vp >> bVP;
+ bool bVP;
+ vp >> bVP;
- if (m_bDelay)
- {
- AddDelay_Bool(FP_MULTILINE, bVP);
- }
- else
- {
- Field::SetMultiline(m_pDocument, m_FieldName, m_nFormControlIndex, bVP);
- }
+ if (m_bDelay) {
+ AddDelay_Bool(FP_MULTILINE, bVP);
+ } else {
+ Field::SetMultiline(m_pDocument, m_FieldName, m_nFormControlIndex, bVP);
}
- else
- {
- CFX_PtrArray FieldArray;
- GetFormFields(m_FieldName, FieldArray);
- if (FieldArray.GetSize() <= 0) return FALSE;
+ } else {
+ CFX_PtrArray FieldArray;
+ GetFormFields(m_FieldName, FieldArray);
+ if (FieldArray.GetSize() <= 0)
+ return FALSE;
- CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
- ASSERT(pFormField != NULL);
+ CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
+ ASSERT(pFormField != NULL);
- if (pFormField->GetFieldType() != FIELDTYPE_TEXTFIELD)
- return FALSE;
+ if (pFormField->GetFieldType() != FIELDTYPE_TEXTFIELD)
+ return FALSE;
- if (pFormField->GetFieldFlags() & FIELDFLAG_MULTILINE)
- vp << true;
- else
- vp << false;
- }
+ if (pFormField->GetFieldFlags() & FIELDFLAG_MULTILINE)
+ vp << true;
+ else
+ vp << false;
+ }
- return TRUE;
+ return TRUE;
}
-void Field::SetMultiline(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, bool b)
-{
- //Not supported.
+void Field::SetMultiline(CPDFSDK_Document* pDocument,
+ const CFX_WideString& swFieldName,
+ int nControlIndex,
+ bool b) {
+ // Not supported.
}
-FX_BOOL Field::multipleSelection(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- ASSERT(m_pDocument != NULL);
+FX_BOOL Field::multipleSelection(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ ASSERT(m_pDocument != NULL);
- if (vp.IsSetting())
- {
- if (!m_bCanSet) return FALSE;
+ if (vp.IsSetting()) {
+ if (!m_bCanSet)
+ return FALSE;
- bool bVP;
- vp >> bVP;
+ bool bVP;
+ vp >> bVP;
- if (m_bDelay)
- {
- AddDelay_Bool(FP_MULTIPLESELECTION, bVP);
- }
- else
- {
- Field::SetMultipleSelection(m_pDocument, m_FieldName, m_nFormControlIndex, bVP);
- }
+ if (m_bDelay) {
+ AddDelay_Bool(FP_MULTIPLESELECTION, bVP);
+ } else {
+ Field::SetMultipleSelection(m_pDocument, m_FieldName, m_nFormControlIndex,
+ bVP);
}
- else
- {
- CFX_PtrArray FieldArray;
- GetFormFields(m_FieldName,FieldArray);
- if (FieldArray.GetSize() <= 0) return FALSE;
+ } else {
+ CFX_PtrArray FieldArray;
+ GetFormFields(m_FieldName, FieldArray);
+ if (FieldArray.GetSize() <= 0)
+ return FALSE;
- CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
- ASSERT(pFormField != NULL);
+ CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
+ ASSERT(pFormField != NULL);
- if (pFormField->GetFieldType() != FIELDTYPE_LISTBOX)
- return FALSE;
+ if (pFormField->GetFieldType() != FIELDTYPE_LISTBOX)
+ return FALSE;
- if (pFormField->GetFieldFlags() & FIELDFLAG_MULTISELECT)
- vp << true;
- else
- vp << false;
- }
+ if (pFormField->GetFieldFlags() & FIELDFLAG_MULTISELECT)
+ vp << true;
+ else
+ vp << false;
+ }
- return TRUE;
+ return TRUE;
}
-void Field::SetMultipleSelection(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, bool b)
-{
- //Not supported.
+void Field::SetMultipleSelection(CPDFSDK_Document* pDocument,
+ const CFX_WideString& swFieldName,
+ int nControlIndex,
+ bool b) {
+ // Not supported.
}
-FX_BOOL Field::name(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- if (!vp.IsGetting()) return FALSE;
+FX_BOOL Field::name(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ if (!vp.IsGetting())
+ return FALSE;
- CFX_PtrArray FieldArray;
- GetFormFields(m_FieldName, FieldArray);
- if (FieldArray.GetSize() <= 0) return FALSE;
+ CFX_PtrArray FieldArray;
+ GetFormFields(m_FieldName, FieldArray);
+ if (FieldArray.GetSize() <= 0)
+ return FALSE;
- vp << m_FieldName;
+ vp << m_FieldName;
- return TRUE;
+ return TRUE;
}
-FX_BOOL Field::numItems(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- CFX_PtrArray FieldArray;
- GetFormFields(m_FieldName, FieldArray);
- if (FieldArray.GetSize() <= 0) return FALSE;
+FX_BOOL Field::numItems(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ CFX_PtrArray FieldArray;
+ GetFormFields(m_FieldName, FieldArray);
+ if (FieldArray.GetSize() <= 0)
+ return FALSE;
- CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
- ASSERT(pFormField != NULL);
+ CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
+ ASSERT(pFormField != NULL);
- if (pFormField->GetFieldType() != FIELDTYPE_COMBOBOX &&
- pFormField->GetFieldType() != FIELDTYPE_LISTBOX)
- return FALSE;
+ if (pFormField->GetFieldType() != FIELDTYPE_COMBOBOX &&
+ pFormField->GetFieldType() != FIELDTYPE_LISTBOX)
+ return FALSE;
- if (!vp.IsGetting()) return FALSE;
+ if (!vp.IsGetting())
+ return FALSE;
- vp << (int32_t)pFormField->CountOptions();
+ vp << (int32_t)pFormField->CountOptions();
- return TRUE;
+ return TRUE;
}
-FX_BOOL Field::page(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- if (!vp.IsGetting()) return FALSE;
-
- CFX_PtrArray FieldArray;
- GetFormFields(m_FieldName, FieldArray);
- if (FieldArray.GetSize() <= 0) return FALSE;
+FX_BOOL Field::page(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ if (!vp.IsGetting())
+ return FALSE;
- CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
- if (!pFormField) return FALSE;
+ CFX_PtrArray FieldArray;
+ GetFormFields(m_FieldName, FieldArray);
+ if (FieldArray.GetSize() <= 0)
+ return FALSE;
- ASSERT(m_pDocument != NULL);
+ CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
+ if (!pFormField)
+ return FALSE;
- CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)m_pDocument->GetInterForm();
- ASSERT(pInterForm != NULL);
+ ASSERT(m_pDocument != NULL);
- CFX_PtrArray widgetArray;
- pInterForm->GetWidgets(pFormField, widgetArray);
+ CPDFSDK_InterForm* pInterForm =
+ (CPDFSDK_InterForm*)m_pDocument->GetInterForm();
+ ASSERT(pInterForm != NULL);
- if (widgetArray.GetSize() > 0)
- {
- CJS_Array PageArray(m_isolate);
+ CFX_PtrArray widgetArray;
+ pInterForm->GetWidgets(pFormField, widgetArray);
- for (int i=0,sz=widgetArray.GetSize(); i<sz; i++)
- {
- CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)widgetArray.GetAt(i);
- ASSERT(pWidget != NULL);
+ if (widgetArray.GetSize() > 0) {
+ CJS_Array PageArray(m_isolate);
- CPDFSDK_PageView* pPageView = pWidget->GetPageView();
- if(!pPageView)
- return FALSE;
+ for (int i = 0, sz = widgetArray.GetSize(); i < sz; i++) {
+ CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)widgetArray.GetAt(i);
+ ASSERT(pWidget != NULL);
- PageArray.SetElement(i, CJS_Value(m_isolate,(int32_t)pPageView->GetPageIndex()));
- }
+ CPDFSDK_PageView* pPageView = pWidget->GetPageView();
+ if (!pPageView)
+ return FALSE;
- vp << PageArray;
- }
- else
- {
- vp << (int32_t) -1;
+ PageArray.SetElement(
+ i, CJS_Value(m_isolate, (int32_t)pPageView->GetPageIndex()));
}
- return TRUE;
+ vp << PageArray;
+ } else {
+ vp << (int32_t)-1;
+ }
+
+ return TRUE;
}
-FX_BOOL Field::password(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- ASSERT(m_pDocument != NULL);
+FX_BOOL Field::password(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ ASSERT(m_pDocument != NULL);
- if (vp.IsSetting())
- {
- if (!m_bCanSet) return FALSE;
+ if (vp.IsSetting()) {
+ if (!m_bCanSet)
+ return FALSE;
- bool bVP;
- vp >> bVP;
+ bool bVP;
+ vp >> bVP;
- if (m_bDelay)
- {
- AddDelay_Bool(FP_PASSWORD, bVP);
- }
- else
- {
- Field::SetPassword(m_pDocument, m_FieldName, m_nFormControlIndex, bVP);
- }
+ if (m_bDelay) {
+ AddDelay_Bool(FP_PASSWORD, bVP);
+ } else {
+ Field::SetPassword(m_pDocument, m_FieldName, m_nFormControlIndex, bVP);
}
- else
- {
- CFX_PtrArray FieldArray;
- GetFormFields(m_FieldName,FieldArray);
- if (FieldArray.GetSize() <= 0) return FALSE;
+ } else {
+ CFX_PtrArray FieldArray;
+ GetFormFields(m_FieldName, FieldArray);
+ if (FieldArray.GetSize() <= 0)
+ return FALSE;
- CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
- ASSERT(pFormField != NULL);
+ CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
+ ASSERT(pFormField != NULL);
- if (pFormField->GetFieldType() != FIELDTYPE_TEXTFIELD)
- return FALSE;
+ if (pFormField->GetFieldType() != FIELDTYPE_TEXTFIELD)
+ return FALSE;
- if (pFormField->GetFieldFlags() & FIELDFLAG_PASSWORD)
- vp << true;
- else
- vp << false;
- }
+ if (pFormField->GetFieldFlags() & FIELDFLAG_PASSWORD)
+ vp << true;
+ else
+ vp << false;
+ }
- return TRUE;
+ return TRUE;
}
-void Field::SetPassword(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, bool b)
-{
- //Not supported.
+void Field::SetPassword(CPDFSDK_Document* pDocument,
+ const CFX_WideString& swFieldName,
+ int nControlIndex,
+ bool b) {
+ // Not supported.
}
-FX_BOOL Field::print(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- ASSERT(m_pDocument != NULL);
+FX_BOOL Field::print(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ ASSERT(m_pDocument != NULL);
- CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)m_pDocument->GetInterForm();
- ASSERT(pInterForm != NULL);
+ CPDFSDK_InterForm* pInterForm =
+ (CPDFSDK_InterForm*)m_pDocument->GetInterForm();
+ ASSERT(pInterForm != NULL);
- CFX_PtrArray FieldArray;
- GetFormFields(m_FieldName, FieldArray);
- if (FieldArray.GetSize() <= 0) return FALSE;
+ CFX_PtrArray FieldArray;
+ GetFormFields(m_FieldName, FieldArray);
+ if (FieldArray.GetSize() <= 0)
+ return FALSE;
- if (vp.IsSetting())
- {
- if (!m_bCanSet) return FALSE;
-
- bool bVP;
- vp >> bVP;
-
- for (int i=0,isz=FieldArray.GetSize(); i<isz; i++)
- {
- CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(i);
- ASSERT(pFormField != NULL);
-
- if (m_nFormControlIndex < 0)
- {
- FX_BOOL bSet = FALSE;
- for (int j=0,jsz = pFormField->CountControls(); j<jsz; j++)
- {
- if (CPDFSDK_Widget* pWidget = pInterForm->GetWidget(pFormField->GetControl(j)))
- {
- FX_DWORD dwFlags = pWidget->GetFlags();
- if (bVP)
- dwFlags |= ANNOTFLAG_PRINT;
- else
- dwFlags &= ~ANNOTFLAG_PRINT;
-
- if (dwFlags != pWidget->GetFlags())
- {
- pWidget->SetFlags(dwFlags);
- bSet = TRUE;
- }
- }
- }
-
- if (bSet)
- UpdateFormField(m_pDocument, pFormField, TRUE, FALSE, TRUE);
+ if (vp.IsSetting()) {
+ if (!m_bCanSet)
+ return FALSE;
+
+ bool bVP;
+ vp >> bVP;
+
+ for (int i = 0, isz = FieldArray.GetSize(); i < isz; i++) {
+ CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(i);
+ ASSERT(pFormField != NULL);
+
+ if (m_nFormControlIndex < 0) {
+ FX_BOOL bSet = FALSE;
+ for (int j = 0, jsz = pFormField->CountControls(); j < jsz; j++) {
+ if (CPDFSDK_Widget* pWidget =
+ pInterForm->GetWidget(pFormField->GetControl(j))) {
+ FX_DWORD dwFlags = pWidget->GetFlags();
+ if (bVP)
+ dwFlags |= ANNOTFLAG_PRINT;
+ else
+ dwFlags &= ~ANNOTFLAG_PRINT;
+
+ if (dwFlags != pWidget->GetFlags()) {
+ pWidget->SetFlags(dwFlags);
+ bSet = TRUE;
}
+ }
+ }
+
+ if (bSet)
+ UpdateFormField(m_pDocument, pFormField, TRUE, FALSE, TRUE);
+ } else {
+ if (m_nFormControlIndex >= pFormField->CountControls())
+ return FALSE;
+ if (CPDF_FormControl* pFormControl =
+ pFormField->GetControl(m_nFormControlIndex)) {
+ if (CPDFSDK_Widget* pWidget = pInterForm->GetWidget(pFormControl)) {
+ FX_DWORD dwFlags = pWidget->GetFlags();
+ if (bVP)
+ dwFlags |= ANNOTFLAG_PRINT;
else
- {
- if(m_nFormControlIndex >= pFormField->CountControls()) return FALSE;
- if (CPDF_FormControl* pFormControl = pFormField->GetControl(m_nFormControlIndex))
- {
- if (CPDFSDK_Widget* pWidget = pInterForm->GetWidget(pFormControl))
- {
- FX_DWORD dwFlags = pWidget->GetFlags();
- if (bVP)
- dwFlags |= ANNOTFLAG_PRINT;
- else
- dwFlags &= ~ANNOTFLAG_PRINT;
-
- if (dwFlags != pWidget->GetFlags())
- {
- pWidget->SetFlags(dwFlags);
- UpdateFormControl(m_pDocument, pFormField->GetControl(m_nFormControlIndex), TRUE, FALSE, TRUE);
- }
- }
- }
+ dwFlags &= ~ANNOTFLAG_PRINT;
+
+ if (dwFlags != pWidget->GetFlags()) {
+ pWidget->SetFlags(dwFlags);
+ UpdateFormControl(m_pDocument,
+ pFormField->GetControl(m_nFormControlIndex),
+ TRUE, FALSE, TRUE);
}
+ }
}
+ }
}
- else
- {
- CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
- ASSERT(pFormField != NULL);
+ } else {
+ CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
+ ASSERT(pFormField != NULL);
- CPDFSDK_Widget* pWidget = pInterForm->GetWidget(GetSmartFieldControl(pFormField));
- if (!pWidget) return FALSE;
+ CPDFSDK_Widget* pWidget =
+ pInterForm->GetWidget(GetSmartFieldControl(pFormField));
+ if (!pWidget)
+ return FALSE;
- if (pWidget->GetFlags() & ANNOTFLAG_PRINT)
- vp << true;
- else
- vp << false;
- }
+ if (pWidget->GetFlags() & ANNOTFLAG_PRINT)
+ vp << true;
+ else
+ vp << false;
+ }
- return TRUE;
+ return TRUE;
}
-FX_BOOL Field::radiosInUnison(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- ASSERT(m_pDocument != NULL);
+FX_BOOL Field::radiosInUnison(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ ASSERT(m_pDocument != NULL);
- CFX_PtrArray FieldArray;
- GetFormFields(m_FieldName,FieldArray);
- if (FieldArray.GetSize() <= 0) return FALSE;
+ CFX_PtrArray FieldArray;
+ GetFormFields(m_FieldName, FieldArray);
+ if (FieldArray.GetSize() <= 0)
+ return FALSE;
- if (vp.IsSetting())
- {
- if (!m_bCanSet) return FALSE;
+ if (vp.IsSetting()) {
+ if (!m_bCanSet)
+ return FALSE;
- bool bVP;
- vp >> bVP;
+ bool bVP;
+ vp >> bVP;
- }
- else
- {
- CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
- ASSERT(pFormField != NULL);
+ } else {
+ CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
+ ASSERT(pFormField != NULL);
- if (pFormField->GetFieldType() != FIELDTYPE_RADIOBUTTON)
- return FALSE;
+ if (pFormField->GetFieldType() != FIELDTYPE_RADIOBUTTON)
+ return FALSE;
- if (pFormField->GetFieldFlags() & FIELDFLAG_RADIOSINUNISON)
- vp << true;
- else
- vp << false;
- }
+ if (pFormField->GetFieldFlags() & FIELDFLAG_RADIOSINUNISON)
+ vp << true;
+ else
+ vp << false;
+ }
- return TRUE;
+ return TRUE;
}
-FX_BOOL Field::readonly(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- ASSERT(m_pDocument != NULL);
+FX_BOOL Field::readonly(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ ASSERT(m_pDocument != NULL);
- CFX_PtrArray FieldArray;
- GetFormFields(m_FieldName,FieldArray);
- if (FieldArray.GetSize() <= 0) return FALSE;
+ CFX_PtrArray FieldArray;
+ GetFormFields(m_FieldName, FieldArray);
+ if (FieldArray.GetSize() <= 0)
+ return FALSE;
- if (vp.IsSetting())
- {
- if (!m_bCanSet) return FALSE;
+ if (vp.IsSetting()) {
+ if (!m_bCanSet)
+ return FALSE;
- bool bVP;
- vp >> bVP;
+ bool bVP;
+ vp >> bVP;
- }
+ } else {
+ CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
+ ASSERT(pFormField != NULL);
+
+ if (pFormField->GetFieldFlags() & FIELDFLAG_READONLY)
+ vp << true;
else
- {
- CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
- ASSERT(pFormField != NULL);
+ vp << false;
+ }
+
+ return TRUE;
+}
+
+FX_BOOL Field::rect(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ ASSERT(m_pDocument != NULL);
+
+ if (vp.IsSetting()) {
+ if (!m_bCanSet)
+ return FALSE;
+ if (!vp.IsArrayObject())
+ return FALSE;
+
+ CJS_Array rcArray(m_isolate);
+ vp >> rcArray;
+ CJS_Value Upper_Leftx(m_isolate), Upper_Lefty(m_isolate),
+ Lower_Rightx(m_isolate), Lower_Righty(m_isolate);
+ rcArray.GetElement(0, Upper_Leftx);
+ rcArray.GetElement(1, Upper_Lefty);
+ rcArray.GetElement(2, Lower_Rightx);
+ rcArray.GetElement(3, Lower_Righty);
+
+ FX_FLOAT pArray[4] = {0.0f, 0.0f, 0.0f, 0.0f};
+ pArray[0] = (FX_FLOAT)Upper_Leftx.ToInt();
+ pArray[1] = (FX_FLOAT)Lower_Righty.ToInt();
+ pArray[2] = (FX_FLOAT)Lower_Rightx.ToInt();
+ pArray[3] = (FX_FLOAT)Upper_Lefty.ToInt();
+
+ CPDF_Rect crRect(pArray);
+
+ if (m_bDelay) {
+ AddDelay_Rect(FP_RECT, crRect);
+ } else {
+ Field::SetRect(m_pDocument, m_FieldName, m_nFormControlIndex, crRect);
+ }
+ } else {
+ CFX_PtrArray FieldArray;
+ GetFormFields(m_FieldName, FieldArray);
+ if (FieldArray.GetSize() <= 0)
+ return FALSE;
- if (pFormField->GetFieldFlags() & FIELDFLAG_READONLY)
- vp << true;
- else
- vp << false;
- }
+ CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
+ ASSERT(pFormField != NULL);
- return TRUE;
-}
+ CPDFSDK_InterForm* pInterForm =
+ (CPDFSDK_InterForm*)m_pDocument->GetInterForm();
+ ASSERT(pInterForm != NULL);
-FX_BOOL Field::rect(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- ASSERT(m_pDocument != NULL);
+ CPDFSDK_Widget* pWidget =
+ pInterForm->GetWidget(GetSmartFieldControl(pFormField));
+ if (!pWidget)
+ return FALSE;
- if (vp.IsSetting())
- {
- if (!m_bCanSet) return FALSE;
- if (!vp.IsArrayObject())return FALSE;
-
- CJS_Array rcArray(m_isolate);
- vp >> rcArray;
- CJS_Value Upper_Leftx(m_isolate), Upper_Lefty(m_isolate), Lower_Rightx(m_isolate), Lower_Righty(m_isolate);
- rcArray.GetElement(0, Upper_Leftx);
- rcArray.GetElement(1, Upper_Lefty);
- rcArray.GetElement(2, Lower_Rightx);
- rcArray.GetElement(3, Lower_Righty);
-
- FX_FLOAT pArray[4] = {0.0f,0.0f,0.0f,0.0f};
- pArray[0] = (FX_FLOAT)Upper_Leftx.ToInt();
- pArray[1] = (FX_FLOAT)Lower_Righty.ToInt();
- pArray[2] = (FX_FLOAT)Lower_Rightx.ToInt();
- pArray[3] = (FX_FLOAT)Upper_Lefty.ToInt();
-
- CPDF_Rect crRect(pArray);
-
- if (m_bDelay)
- {
- AddDelay_Rect(FP_RECT, crRect);
- }
- else
- {
- Field::SetRect(m_pDocument, m_FieldName, m_nFormControlIndex, crRect);
- }
- }
- else
- {
- CFX_PtrArray FieldArray;
- GetFormFields(m_FieldName,FieldArray);
- if (FieldArray.GetSize() <= 0) return FALSE;
+ CFX_FloatRect crRect = pWidget->GetRect();
+ CJS_Value Upper_Leftx(m_isolate), Upper_Lefty(m_isolate),
+ Lower_Rightx(m_isolate), Lower_Righty(m_isolate);
+ Upper_Leftx = (int32_t)crRect.left;
+ Upper_Lefty = (int32_t)crRect.top;
+ Lower_Rightx = (int32_t)crRect.right;
+ Lower_Righty = (int32_t)crRect.bottom;
- CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
- ASSERT(pFormField != NULL);
+ CJS_Array rcArray(m_isolate);
+ rcArray.SetElement(0, Upper_Leftx);
+ rcArray.SetElement(1, Upper_Lefty);
+ rcArray.SetElement(2, Lower_Rightx);
+ rcArray.SetElement(3, Lower_Righty);
- CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)m_pDocument->GetInterForm();
- ASSERT(pInterForm != NULL);
+ vp << rcArray;
+ }
- CPDFSDK_Widget* pWidget = pInterForm->GetWidget(GetSmartFieldControl(pFormField));
- if (!pWidget) return FALSE;
+ return TRUE;
+}
- CFX_FloatRect crRect = pWidget->GetRect();
- CJS_Value Upper_Leftx(m_isolate),Upper_Lefty(m_isolate),Lower_Rightx(m_isolate),Lower_Righty(m_isolate);
- Upper_Leftx = (int32_t)crRect.left;
- Upper_Lefty = (int32_t)crRect.top;
- Lower_Rightx = (int32_t)crRect.right;
- Lower_Righty = (int32_t)crRect.bottom;
+void Field::SetRect(CPDFSDK_Document* pDocument,
+ const CFX_WideString& swFieldName,
+ int nControlIndex,
+ const CPDF_Rect& rect) {
+ ASSERT(pDocument != NULL);
- CJS_Array rcArray(m_isolate);
- rcArray.SetElement(0,Upper_Leftx);
- rcArray.SetElement(1,Upper_Lefty);
- rcArray.SetElement(2,Lower_Rightx);
- rcArray.SetElement(3,Lower_Righty);
+ CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm();
+ ASSERT(pInterForm != NULL);
- vp << rcArray;
- }
+ CFX_PtrArray FieldArray;
+ GetFormFields(pDocument, swFieldName, FieldArray);
- return TRUE;
-}
+ for (int i = 0, isz = FieldArray.GetSize(); i < isz; i++) {
+ CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(i);
+ ASSERT(pFormField != NULL);
-void Field::SetRect(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, const CPDF_Rect& rect)
-{
- ASSERT(pDocument != NULL);
+ if (nControlIndex < 0) {
+ FX_BOOL bSet = FALSE;
+ for (int i = 0, sz = pFormField->CountControls(); i < sz; i++) {
+ CPDF_FormControl* pFormControl = pFormField->GetControl(i);
+ ASSERT(pFormControl != NULL);
- CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDocument->GetInterForm();
- ASSERT(pInterForm != NULL);
+ if (CPDFSDK_Widget* pWidget = pInterForm->GetWidget(pFormControl)) {
+ CPDF_Rect crRect = rect;
- CFX_PtrArray FieldArray;
- GetFormFields(pDocument, swFieldName, FieldArray);
+ CPDF_Page* pPDFPage = pWidget->GetPDFPage();
+ ASSERT(pPDFPage != NULL);
- for (int i=0,isz=FieldArray.GetSize(); i<isz; i++)
- {
- CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(i);
- ASSERT(pFormField != NULL);
-
- if (nControlIndex < 0)
- {
- FX_BOOL bSet = FALSE;
- for (int i=0, sz=pFormField->CountControls(); i<sz; i++)
- {
- CPDF_FormControl* pFormControl = pFormField->GetControl(i);
- ASSERT(pFormControl != NULL);
-
- if (CPDFSDK_Widget* pWidget = pInterForm->GetWidget(pFormControl))
- {
- CPDF_Rect crRect = rect;
-
- CPDF_Page* pPDFPage = pWidget->GetPDFPage();
- ASSERT(pPDFPage != NULL);
-
-// CPDF_Page* pPDFPage = pPage->GetPage();
-// ASSERT(pPDFPage != NULL);
-
- crRect.Intersect(pPDFPage->GetPageBBox());
-
- if (!crRect.IsEmpty())
- {
- CPDF_Rect rcOld = pWidget->GetRect();
- if (crRect.left != rcOld.left ||
- crRect.right != rcOld.right ||
- crRect.top != rcOld.top ||
- crRect.bottom != rcOld.bottom)
- {
- pWidget->SetRect(crRect);
- bSet = TRUE;
- }
- }
- }
- }
+ // CPDF_Page* pPDFPage = pPage->GetPage();
+ // ASSERT(pPDFPage != NULL);
- if (bSet) UpdateFormField(pDocument, pFormField, TRUE, TRUE, TRUE);
+ crRect.Intersect(pPDFPage->GetPageBBox());
+
+ if (!crRect.IsEmpty()) {
+ CPDF_Rect rcOld = pWidget->GetRect();
+ if (crRect.left != rcOld.left || crRect.right != rcOld.right ||
+ crRect.top != rcOld.top || crRect.bottom != rcOld.bottom) {
+ pWidget->SetRect(crRect);
+ bSet = TRUE;
+ }
+ }
}
- else
- {
- if(nControlIndex >= pFormField->CountControls()) return;
- if (CPDF_FormControl* pFormControl = pFormField->GetControl(nControlIndex))
- {
- if (CPDFSDK_Widget* pWidget = pInterForm->GetWidget(pFormControl))
- {
- CPDF_Rect crRect = rect;
-
- CPDF_Page* pPDFPage = pWidget->GetPDFPage();
- ASSERT(pPDFPage != NULL);
-
-// CPDF_Page* pPDFPage = pPage->GetPage();
-// ASSERT(pPDFPage != NULL);
-
- crRect.Intersect(pPDFPage->GetPageBBox());
-
- if (!crRect.IsEmpty())
- {
- CPDF_Rect rcOld = pWidget->GetRect();
- if (crRect.left != rcOld.left ||
- crRect.right != rcOld.right ||
- crRect.top != rcOld.top ||
- crRect.bottom != rcOld.bottom)
- {
- pWidget->SetRect(crRect);
- UpdateFormControl(pDocument, pFormControl, TRUE, TRUE, TRUE);
- }
- }
- }
+ }
+
+ if (bSet)
+ UpdateFormField(pDocument, pFormField, TRUE, TRUE, TRUE);
+ } else {
+ if (nControlIndex >= pFormField->CountControls())
+ return;
+ if (CPDF_FormControl* pFormControl =
+ pFormField->GetControl(nControlIndex)) {
+ if (CPDFSDK_Widget* pWidget = pInterForm->GetWidget(pFormControl)) {
+ CPDF_Rect crRect = rect;
+
+ CPDF_Page* pPDFPage = pWidget->GetPDFPage();
+ ASSERT(pPDFPage != NULL);
+
+ // CPDF_Page* pPDFPage = pPage->GetPage();
+ // ASSERT(pPDFPage != NULL);
+
+ crRect.Intersect(pPDFPage->GetPageBBox());
+
+ if (!crRect.IsEmpty()) {
+ CPDF_Rect rcOld = pWidget->GetRect();
+ if (crRect.left != rcOld.left || crRect.right != rcOld.right ||
+ crRect.top != rcOld.top || crRect.bottom != rcOld.bottom) {
+ pWidget->SetRect(crRect);
+ UpdateFormControl(pDocument, pFormControl, TRUE, TRUE, TRUE);
}
+ }
}
+ }
}
+ }
}
-FX_BOOL Field::required(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- ASSERT(m_pDocument != NULL);
+FX_BOOL Field::required(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ ASSERT(m_pDocument != NULL);
- CFX_PtrArray FieldArray;
- GetFormFields(m_FieldName,FieldArray);
- if (FieldArray.GetSize() <= 0) return FALSE;
-
- if (vp.IsSetting())
- {
- if (!m_bCanSet) return FALSE;
+ CFX_PtrArray FieldArray;
+ GetFormFields(m_FieldName, FieldArray);
+ if (FieldArray.GetSize() <= 0)
+ return FALSE;
+ if (vp.IsSetting()) {
+ if (!m_bCanSet)
+ return FALSE;
- bool bVP;
- vp >> bVP;
+ bool bVP;
+ vp >> bVP;
- }
- else
- {
- CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
- ASSERT(pFormField != NULL);
+ } else {
+ CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
+ ASSERT(pFormField != NULL);
- if (pFormField->GetFieldType() == FIELDTYPE_PUSHBUTTON)
- return FALSE;
+ if (pFormField->GetFieldType() == FIELDTYPE_PUSHBUTTON)
+ return FALSE;
- if (pFormField->GetFieldFlags() & FIELDFLAG_REQUIRED)
- vp << true;
- else
- vp << false;
- }
+ if (pFormField->GetFieldFlags() & FIELDFLAG_REQUIRED)
+ vp << true;
+ else
+ vp << false;
+ }
- return TRUE;
+ return TRUE;
}
-FX_BOOL Field::richText(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- ASSERT(m_pDocument != NULL);
+FX_BOOL Field::richText(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ ASSERT(m_pDocument != NULL);
- if (vp.IsSetting())
- {
- if (!m_bCanSet) return FALSE;
+ if (vp.IsSetting()) {
+ if (!m_bCanSet)
+ return FALSE;
- bool bVP;
- vp >> bVP;
+ bool bVP;
+ vp >> bVP;
- if (m_bDelay)
- {
- AddDelay_Bool(FP_RICHTEXT, bVP);
- }
- else
- {
- Field::SetRichText(m_pDocument, m_FieldName, m_nFormControlIndex, bVP);
- }
+ if (m_bDelay) {
+ AddDelay_Bool(FP_RICHTEXT, bVP);
+ } else {
+ Field::SetRichText(m_pDocument, m_FieldName, m_nFormControlIndex, bVP);
}
- else
- {
- CFX_PtrArray FieldArray;
- GetFormFields(m_FieldName,FieldArray);
- if (FieldArray.GetSize() <= 0) return FALSE;
+ } else {
+ CFX_PtrArray FieldArray;
+ GetFormFields(m_FieldName, FieldArray);
+ if (FieldArray.GetSize() <= 0)
+ return FALSE;
- CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
- ASSERT(pFormField != NULL);
+ CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
+ ASSERT(pFormField != NULL);
- if (pFormField->GetFieldType() != FIELDTYPE_TEXTFIELD)
- return FALSE;
+ if (pFormField->GetFieldType() != FIELDTYPE_TEXTFIELD)
+ return FALSE;
- if (pFormField->GetFieldFlags() & FIELDFLAG_RICHTEXT)
- vp << true;
- else
- vp << false;
- }
+ if (pFormField->GetFieldFlags() & FIELDFLAG_RICHTEXT)
+ vp << true;
+ else
+ vp << false;
+ }
- return TRUE;
+ return TRUE;
}
-void Field::SetRichText(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, bool b)
-{
- //Not supported.
+void Field::SetRichText(CPDFSDK_Document* pDocument,
+ const CFX_WideString& swFieldName,
+ int nControlIndex,
+ bool b) {
+ // Not supported.
}
-FX_BOOL Field::richValue(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- return TRUE;
- if (vp.IsSetting())
- {
- if (!m_bCanSet) return FALSE;
- ;
- }
- else
- {
- ;
- }
- return TRUE;
+FX_BOOL Field::richValue(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ return TRUE;
+ if (vp.IsSetting()) {
+ if (!m_bCanSet)
+ return FALSE;
+ ;
+ } else {
+ ;
+ }
+ return TRUE;
}
-void Field::SetRichValue(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex)
-{
- //Not supported.
+void Field::SetRichValue(CPDFSDK_Document* pDocument,
+ const CFX_WideString& swFieldName,
+ int nControlIndex) {
+ // Not supported.
}
-FX_BOOL Field::rotation(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- ASSERT(m_pDocument != NULL);
+FX_BOOL Field::rotation(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ ASSERT(m_pDocument != NULL);
- if (vp.IsSetting())
- {
- if (!m_bCanSet) return FALSE;
+ if (vp.IsSetting()) {
+ if (!m_bCanSet)
+ return FALSE;
- int nVP;
- vp >> nVP;
+ int nVP;
+ vp >> nVP;
- if (m_bDelay)
- {
- AddDelay_Int(FP_ROTATION, nVP);
- }
- else
- {
- Field::SetRotation(m_pDocument, m_FieldName, m_nFormControlIndex, nVP);
- }
+ if (m_bDelay) {
+ AddDelay_Int(FP_ROTATION, nVP);
+ } else {
+ Field::SetRotation(m_pDocument, m_FieldName, m_nFormControlIndex, nVP);
}
- else
- {
- CFX_PtrArray FieldArray;
- GetFormFields(m_FieldName,FieldArray);
- if (FieldArray.GetSize() <= 0) return FALSE;
+ } else {
+ CFX_PtrArray FieldArray;
+ GetFormFields(m_FieldName, FieldArray);
+ if (FieldArray.GetSize() <= 0)
+ return FALSE;
- CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
- ASSERT(pFormField != NULL);
+ CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
+ ASSERT(pFormField != NULL);
- CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
- if (!pFormControl)return FALSE;
+ CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
+ if (!pFormControl)
+ return FALSE;
- vp << (int32_t)pFormControl->GetRotation();
- }
+ vp << (int32_t)pFormControl->GetRotation();
+ }
- return TRUE;
+ return TRUE;
}
-void Field::SetRotation(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, int number)
-{
- //Not supported.
+void Field::SetRotation(CPDFSDK_Document* pDocument,
+ const CFX_WideString& swFieldName,
+ int nControlIndex,
+ int number) {
+ // Not supported.
}
-FX_BOOL Field::strokeColor(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- ASSERT(m_pDocument != NULL);
+FX_BOOL Field::strokeColor(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ ASSERT(m_pDocument != NULL);
- if (vp.IsSetting())
- {
- if (!m_bCanSet) return FALSE;
+ if (vp.IsSetting()) {
+ if (!m_bCanSet)
+ return FALSE;
- if (!vp.IsArrayObject())return FALSE;
+ if (!vp.IsArrayObject())
+ return FALSE;
- CJS_Array crArray(m_isolate);
- vp >> crArray;
+ CJS_Array crArray(m_isolate);
+ vp >> crArray;
- CPWL_Color color;
- color::ConvertArrayToPWLColor(crArray, color);
+ CPWL_Color color;
+ color::ConvertArrayToPWLColor(crArray, color);
- if (m_bDelay)
- {
- AddDelay_Color(FP_STROKECOLOR, color);
- }
- else
- {
- Field::SetStrokeColor(m_pDocument, m_FieldName, m_nFormControlIndex, color);
- }
+ if (m_bDelay) {
+ AddDelay_Color(FP_STROKECOLOR, color);
+ } else {
+ Field::SetStrokeColor(m_pDocument, m_FieldName, m_nFormControlIndex,
+ color);
}
- else
- {
- CFX_PtrArray FieldArray;
- GetFormFields(m_FieldName,FieldArray);
- if (FieldArray.GetSize() <= 0) return FALSE;
-
- CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
- ASSERT(pFormField != NULL);
-
- CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
- if (!pFormControl)return FALSE;
-
- int iColorType;
- pFormControl->GetBorderColor(iColorType);
+ } else {
+ CFX_PtrArray FieldArray;
+ GetFormFields(m_FieldName, FieldArray);
+ if (FieldArray.GetSize() <= 0)
+ return FALSE;
- CPWL_Color color;
+ CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
+ ASSERT(pFormField != NULL);
- if (iColorType == COLORTYPE_TRANSPARENT)
- {
- color = CPWL_Color(COLORTYPE_TRANSPARENT);
- }
- else if (iColorType == COLORTYPE_GRAY)
- {
- color = CPWL_Color(COLORTYPE_GRAY, pFormControl->GetOriginalBorderColor(0));
- }
- else if (iColorType == COLORTYPE_RGB)
- {
- color = CPWL_Color(COLORTYPE_RGB, pFormControl->GetOriginalBorderColor(0),
- pFormControl->GetOriginalBorderColor(1),
- pFormControl->GetOriginalBorderColor(2));
- }
- else if (iColorType == COLORTYPE_CMYK)
- {
- color = CPWL_Color(COLORTYPE_CMYK, pFormControl->GetOriginalBorderColor(0),
- pFormControl->GetOriginalBorderColor(1),
- pFormControl->GetOriginalBorderColor(2),
- pFormControl->GetOriginalBorderColor(3));
- }
- else
- return FALSE;
+ CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
+ if (!pFormControl)
+ return FALSE;
+
+ int iColorType;
+ pFormControl->GetBorderColor(iColorType);
+
+ CPWL_Color color;
+
+ if (iColorType == COLORTYPE_TRANSPARENT) {
+ color = CPWL_Color(COLORTYPE_TRANSPARENT);
+ } else if (iColorType == COLORTYPE_GRAY) {
+ color =
+ CPWL_Color(COLORTYPE_GRAY, pFormControl->GetOriginalBorderColor(0));
+ } else if (iColorType == COLORTYPE_RGB) {
+ color = CPWL_Color(COLORTYPE_RGB, pFormControl->GetOriginalBorderColor(0),
+ pFormControl->GetOriginalBorderColor(1),
+ pFormControl->GetOriginalBorderColor(2));
+ } else if (iColorType == COLORTYPE_CMYK) {
+ color =
+ CPWL_Color(COLORTYPE_CMYK, pFormControl->GetOriginalBorderColor(0),
+ pFormControl->GetOriginalBorderColor(1),
+ pFormControl->GetOriginalBorderColor(2),
+ pFormControl->GetOriginalBorderColor(3));
+ } else
+ return FALSE;
- CJS_Array crArray(m_isolate);
- color::ConvertPWLColorToArray(color, crArray);
- vp << crArray;
- }
+ CJS_Array crArray(m_isolate);
+ color::ConvertPWLColorToArray(color, crArray);
+ vp << crArray;
+ }
- return TRUE;
+ return TRUE;
}
-void Field::SetStrokeColor(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, const CPWL_Color& color)
-{
- //Not supported.
+void Field::SetStrokeColor(CPDFSDK_Document* pDocument,
+ const CFX_WideString& swFieldName,
+ int nControlIndex,
+ const CPWL_Color& color) {
+ // Not supported.
}
-FX_BOOL Field::style(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- ASSERT(m_pDocument != NULL);
+FX_BOOL Field::style(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ ASSERT(m_pDocument != NULL);
- if (vp.IsSetting())
- {
- if (!m_bCanSet) return FALSE;
+ if (vp.IsSetting()) {
+ if (!m_bCanSet)
+ return FALSE;
- CFX_ByteString csBCaption;
- vp >> csBCaption;
+ CFX_ByteString csBCaption;
+ vp >> csBCaption;
- if (m_bDelay)
- {
- AddDelay_String(FP_STYLE, csBCaption);
- }
- else
- {
- Field::SetStyle(m_pDocument, m_FieldName, m_nFormControlIndex, csBCaption);
- }
+ if (m_bDelay) {
+ AddDelay_String(FP_STYLE, csBCaption);
+ } else {
+ Field::SetStyle(m_pDocument, m_FieldName, m_nFormControlIndex,
+ csBCaption);
}
- else
- {
- CFX_PtrArray FieldArray;
- GetFormFields(m_FieldName,FieldArray);
- if (FieldArray.GetSize() <= 0) return FALSE;
-
- CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
- ASSERT(pFormField != NULL);
-
- if (pFormField->GetFieldType() != FIELDTYPE_RADIOBUTTON &&
- pFormField->GetFieldType() != FIELDTYPE_CHECKBOX)
- return FALSE;
-
- CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
- if (!pFormControl) return FALSE;
-
- CFX_WideString csWCaption = pFormControl->GetNormalCaption();
- CFX_ByteString csBCaption;
-
- switch (csWCaption[0])
- {
- case L'l':
- csBCaption = "circle";
- break;
- case L'8':
- csBCaption = "cross";
- break;
- case L'u':
- csBCaption = "diamond";
- break;
- case L'n':
- csBCaption = "square";
- break;
- case L'H':
- csBCaption = "star";
- break;
- default: //L'4'
- csBCaption = "check";
- break;
- }
- vp << csBCaption;
+ } else {
+ CFX_PtrArray FieldArray;
+ GetFormFields(m_FieldName, FieldArray);
+ if (FieldArray.GetSize() <= 0)
+ return FALSE;
+
+ CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
+ ASSERT(pFormField != NULL);
+
+ if (pFormField->GetFieldType() != FIELDTYPE_RADIOBUTTON &&
+ pFormField->GetFieldType() != FIELDTYPE_CHECKBOX)
+ return FALSE;
+
+ CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
+ if (!pFormControl)
+ return FALSE;
+
+ CFX_WideString csWCaption = pFormControl->GetNormalCaption();
+ CFX_ByteString csBCaption;
+
+ switch (csWCaption[0]) {
+ case L'l':
+ csBCaption = "circle";
+ break;
+ case L'8':
+ csBCaption = "cross";
+ break;
+ case L'u':
+ csBCaption = "diamond";
+ break;
+ case L'n':
+ csBCaption = "square";
+ break;
+ case L'H':
+ csBCaption = "star";
+ break;
+ default: // L'4'
+ csBCaption = "check";
+ break;
}
+ vp << csBCaption;
+ }
- return TRUE;
+ return TRUE;
}
-void Field::SetStyle(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex,
- const CFX_ByteString& string)
-{
- //Not supported.
+void Field::SetStyle(CPDFSDK_Document* pDocument,
+ const CFX_WideString& swFieldName,
+ int nControlIndex,
+ const CFX_ByteString& string) {
+ // Not supported.
}
-FX_BOOL Field::submitName(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- return TRUE;
+FX_BOOL Field::submitName(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ return TRUE;
}
-FX_BOOL Field::textColor(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- ASSERT(m_pDocument != NULL);
+FX_BOOL Field::textColor(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ ASSERT(m_pDocument != NULL);
- if (vp.IsSetting())
- {
- if (!m_bCanSet) return FALSE;
+ if (vp.IsSetting()) {
+ if (!m_bCanSet)
+ return FALSE;
- CJS_Array crArray(m_isolate);
- if (!vp.IsArrayObject())return FALSE;
- vp >> crArray;
+ CJS_Array crArray(m_isolate);
+ if (!vp.IsArrayObject())
+ return FALSE;
+ vp >> crArray;
- CPWL_Color color;
- color::ConvertArrayToPWLColor(crArray, color);
+ CPWL_Color color;
+ color::ConvertArrayToPWLColor(crArray, color);
- if (m_bDelay)
- {
- AddDelay_Color(FP_TEXTCOLOR, color);
- }
- else
- {
- Field::SetTextColor(m_pDocument, m_FieldName, m_nFormControlIndex, color);
- }
+ if (m_bDelay) {
+ AddDelay_Color(FP_TEXTCOLOR, color);
+ } else {
+ Field::SetTextColor(m_pDocument, m_FieldName, m_nFormControlIndex, color);
}
- else
- {
- CFX_PtrArray FieldArray;
- GetFormFields(m_FieldName,FieldArray);
- if (FieldArray.GetSize() <= 0) return FALSE;
+ } else {
+ CFX_PtrArray FieldArray;
+ GetFormFields(m_FieldName, FieldArray);
+ if (FieldArray.GetSize() <= 0)
+ return FALSE;
- CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
- ASSERT(pFormField != NULL);
+ CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
+ ASSERT(pFormField != NULL);
- CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
- if (!pFormControl)return FALSE;
+ CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
+ if (!pFormControl)
+ return FALSE;
- int iColorType;
- FX_ARGB color;
- CPDF_DefaultAppearance FieldAppearance = pFormControl->GetDefaultAppearance();
- FieldAppearance.GetColor(color, iColorType);
- int32_t a,r,g,b;
- ArgbDecode(color, a, r, g, b);
+ int iColorType;
+ FX_ARGB color;
+ CPDF_DefaultAppearance FieldAppearance =
+ pFormControl->GetDefaultAppearance();
+ FieldAppearance.GetColor(color, iColorType);
+ int32_t a, r, g, b;
+ ArgbDecode(color, a, r, g, b);
- CPWL_Color crRet = CPWL_Color(COLORTYPE_RGB, r / 255.0f,
- g / 255.0f,
- b / 255.0f);
+ CPWL_Color crRet =
+ CPWL_Color(COLORTYPE_RGB, r / 255.0f, g / 255.0f, b / 255.0f);
- if (iColorType == COLORTYPE_TRANSPARENT)
- crRet = CPWL_Color(COLORTYPE_TRANSPARENT);
+ if (iColorType == COLORTYPE_TRANSPARENT)
+ crRet = CPWL_Color(COLORTYPE_TRANSPARENT);
- CJS_Array crArray(m_isolate);
- color::ConvertPWLColorToArray(crRet, crArray);
- vp << crArray;
- }
+ CJS_Array crArray(m_isolate);
+ color::ConvertPWLColorToArray(crRet, crArray);
+ vp << crArray;
+ }
- return TRUE;
+ return TRUE;
}
-void Field::SetTextColor(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, const CPWL_Color& color)
-{
- //Not supported.
+void Field::SetTextColor(CPDFSDK_Document* pDocument,
+ const CFX_WideString& swFieldName,
+ int nControlIndex,
+ const CPWL_Color& color) {
+ // Not supported.
}
-FX_BOOL Field::textFont(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- ASSERT(m_pDocument != NULL);
+FX_BOOL Field::textFont(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ ASSERT(m_pDocument != NULL);
- if (vp.IsSetting())
- {
- if (!m_bCanSet) return FALSE;
+ if (vp.IsSetting()) {
+ if (!m_bCanSet)
+ return FALSE;
- CFX_ByteString csFontName;
- vp >> csFontName;
- if (csFontName.IsEmpty()) return FALSE;
+ CFX_ByteString csFontName;
+ vp >> csFontName;
+ if (csFontName.IsEmpty())
+ return FALSE;
- if (m_bDelay)
- {
- AddDelay_String(FP_TEXTFONT, csFontName);
- }
- else
- {
- Field::SetTextFont(m_pDocument, m_FieldName, m_nFormControlIndex, csFontName);
- }
+ if (m_bDelay) {
+ AddDelay_String(FP_TEXTFONT, csFontName);
+ } else {
+ Field::SetTextFont(m_pDocument, m_FieldName, m_nFormControlIndex,
+ csFontName);
}
- else
- {
- CFX_PtrArray FieldArray;
- GetFormFields(m_FieldName,FieldArray);
- if (FieldArray.GetSize() <= 0) return FALSE;
+ } else {
+ CFX_PtrArray FieldArray;
+ GetFormFields(m_FieldName, FieldArray);
+ if (FieldArray.GetSize() <= 0)
+ return FALSE;
- CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
- ASSERT(pFormField != NULL);
+ CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
+ ASSERT(pFormField != NULL);
- CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
- if (!pFormControl)return FALSE;
+ CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
+ if (!pFormControl)
+ return FALSE;
- int nFieldType = pFormField->GetFieldType();
+ int nFieldType = pFormField->GetFieldType();
- if (nFieldType == FIELDTYPE_PUSHBUTTON ||
- nFieldType == FIELDTYPE_COMBOBOX ||
- nFieldType == FIELDTYPE_LISTBOX ||
- nFieldType == FIELDTYPE_TEXTFIELD)
- {
- CPDF_Font * pFont = pFormControl->GetDefaultControlFont();
- if (!pFont) return FALSE;
+ if (nFieldType == FIELDTYPE_PUSHBUTTON ||
+ nFieldType == FIELDTYPE_COMBOBOX || nFieldType == FIELDTYPE_LISTBOX ||
+ nFieldType == FIELDTYPE_TEXTFIELD) {
+ CPDF_Font* pFont = pFormControl->GetDefaultControlFont();
+ if (!pFont)
+ return FALSE;
- vp << pFont->GetBaseFont();
- }
- else
- return FALSE;
- }
+ vp << pFont->GetBaseFont();
+ } else
+ return FALSE;
+ }
- return TRUE;
+ return TRUE;
}
-void Field::SetTextFont(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, const CFX_ByteString& string)
-{
- //Not supported.
+void Field::SetTextFont(CPDFSDK_Document* pDocument,
+ const CFX_WideString& swFieldName,
+ int nControlIndex,
+ const CFX_ByteString& string) {
+ // Not supported.
}
-FX_BOOL Field::textSize(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- ASSERT(m_pDocument != NULL);
+FX_BOOL Field::textSize(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ ASSERT(m_pDocument != NULL);
- if (vp.IsSetting())
- {
- if (!m_bCanSet) return FALSE;
+ if (vp.IsSetting()) {
+ if (!m_bCanSet)
+ return FALSE;
- int nVP;
- vp >> nVP;
+ int nVP;
+ vp >> nVP;
- if (m_bDelay)
- {
- AddDelay_Int(FP_TEXTSIZE, nVP);
- }
- else
- {
- Field::SetTextSize(m_pDocument, m_FieldName, m_nFormControlIndex, nVP);
- }
+ if (m_bDelay) {
+ AddDelay_Int(FP_TEXTSIZE, nVP);
+ } else {
+ Field::SetTextSize(m_pDocument, m_FieldName, m_nFormControlIndex, nVP);
}
- else
- {
- CFX_PtrArray FieldArray;
- GetFormFields(m_FieldName,FieldArray);
- if (FieldArray.GetSize() <= 0) return FALSE;
+ } else {
+ CFX_PtrArray FieldArray;
+ GetFormFields(m_FieldName, FieldArray);
+ if (FieldArray.GetSize() <= 0)
+ return FALSE;
- CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
- ASSERT(pFormField != NULL);
+ CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
+ ASSERT(pFormField != NULL);
- CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
- if (!pFormControl)return FALSE;
+ CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
+ if (!pFormControl)
+ return FALSE;
- CPDF_DefaultAppearance FieldAppearance = pFormControl->GetDefaultAppearance();
+ CPDF_DefaultAppearance FieldAppearance =
+ pFormControl->GetDefaultAppearance();
- CFX_ByteString csFontNameTag;
- FX_FLOAT fFontSize;
- FieldAppearance.GetFont(csFontNameTag,fFontSize);
+ CFX_ByteString csFontNameTag;
+ FX_FLOAT fFontSize;
+ FieldAppearance.GetFont(csFontNameTag, fFontSize);
- vp << (int)fFontSize;
- }
+ vp << (int)fFontSize;
+ }
- return TRUE;
+ return TRUE;
}
-void Field::SetTextSize(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, int number)
-{
- //Not supported.
+void Field::SetTextSize(CPDFSDK_Document* pDocument,
+ const CFX_WideString& swFieldName,
+ int nControlIndex,
+ int number) {
+ // Not supported.
}
-FX_BOOL Field::type(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- ASSERT(m_pDocument != NULL);
+FX_BOOL Field::type(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ ASSERT(m_pDocument != NULL);
+
+ if (!vp.IsGetting())
+ return FALSE;
- if (!vp.IsGetting()) return FALSE;
+ CFX_PtrArray FieldArray;
+ GetFormFields(m_FieldName, FieldArray);
+ if (FieldArray.GetSize() <= 0)
+ return FALSE;
+ CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
+ ASSERT(pFormField != NULL);
+
+ switch (pFormField->GetFieldType()) {
+ case FIELDTYPE_UNKNOWN:
+ vp << L"unknown";
+ break;
+ case FIELDTYPE_PUSHBUTTON:
+ vp << L"button";
+ break;
+ case FIELDTYPE_CHECKBOX:
+ vp << L"checkbox";
+ break;
+ case FIELDTYPE_RADIOBUTTON:
+ vp << L"radiobutton";
+ break;
+ case FIELDTYPE_COMBOBOX:
+ vp << L"combobox";
+ break;
+ case FIELDTYPE_LISTBOX:
+ vp << L"listbox";
+ break;
+ case FIELDTYPE_TEXTFIELD:
+ vp << L"text";
+ break;
+ case FIELDTYPE_SIGNATURE:
+ vp << L"signature";
+ break;
+ default:
+ vp << L"unknown";
+ break;
+ }
+
+ return TRUE;
+}
+
+FX_BOOL Field::userName(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ ASSERT(m_pDocument != NULL);
+
+ if (vp.IsSetting()) {
+ if (!m_bCanSet)
+ return FALSE;
+
+ CFX_WideString swName;
+ vp >> swName;
+
+ if (m_bDelay) {
+ AddDelay_WideString(FP_USERNAME, swName);
+ } else {
+ Field::SetUserName(m_pDocument, m_FieldName, m_nFormControlIndex, swName);
+ }
+ } else {
CFX_PtrArray FieldArray;
- GetFormFields(m_FieldName,FieldArray);
- if (FieldArray.GetSize() <= 0) return FALSE;
+ GetFormFields(m_FieldName, FieldArray);
+ if (FieldArray.GetSize() <= 0)
+ return FALSE;
CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
ASSERT(pFormField != NULL);
- switch (pFormField->GetFieldType())
- {
- case FIELDTYPE_UNKNOWN:
- vp << L"unknown";
- break;
- case FIELDTYPE_PUSHBUTTON:
- vp << L"button";
- break;
- case FIELDTYPE_CHECKBOX:
- vp << L"checkbox";
- break;
- case FIELDTYPE_RADIOBUTTON:
- vp << L"radiobutton";
- break;
- case FIELDTYPE_COMBOBOX:
- vp << L"combobox";
- break;
- case FIELDTYPE_LISTBOX:
- vp << L"listbox";
- break;
- case FIELDTYPE_TEXTFIELD:
- vp << L"text";
- break;
- case FIELDTYPE_SIGNATURE:
- vp << L"signature";
- break;
- default :
- vp << L"unknown";
- break;
- }
+ vp << (CFX_WideString)pFormField->GetAlternateName();
+ }
- return TRUE;
+ return TRUE;
}
-FX_BOOL Field::userName(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- ASSERT(m_pDocument != NULL);
+void Field::SetUserName(CPDFSDK_Document* pDocument,
+ const CFX_WideString& swFieldName,
+ int nControlIndex,
+ const CFX_WideString& string) {
+ // Not supported.
+}
- if (vp.IsSetting())
- {
- if (!m_bCanSet) return FALSE;
+FX_BOOL Field::value(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ ASSERT(m_pDocument != NULL);
- CFX_WideString swName;
- vp >> swName;
+ if (vp.IsSetting()) {
+ if (!m_bCanSet)
+ return FALSE;
- if (m_bDelay)
- {
- AddDelay_WideString(FP_USERNAME, swName);
- }
- else
- {
- Field::SetUserName(m_pDocument, m_FieldName, m_nFormControlIndex, swName);
- }
- }
- else
- {
- CFX_PtrArray FieldArray;
- GetFormFields(m_FieldName,FieldArray);
- if (FieldArray.GetSize() <= 0) return FALSE;
+ CJS_WideStringArray strArray;
- CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
- ASSERT(pFormField != NULL);
+ if (vp.IsArrayObject()) {
+ CJS_Array ValueArray(m_isolate);
+ vp.ConvertToArray(ValueArray);
+ for (int i = 0, sz = ValueArray.GetLength(); i < sz; i++) {
+ CJS_Value ElementValue(m_isolate);
+ ValueArray.GetElement(i, ElementValue);
+ strArray.Add(ElementValue.ToCFXWideString());
+ }
+ } else {
+ CFX_WideString swValue;
+ vp >> swValue;
- vp << (CFX_WideString)pFormField->GetAlternateName();
+ strArray.Add(swValue);
}
- return TRUE;
-}
-
-void Field::SetUserName(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName, int nControlIndex, const CFX_WideString& string)
-{
- //Not supported.
-}
-
-FX_BOOL Field::value(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- ASSERT(m_pDocument != NULL);
-
- if (vp.IsSetting())
- {
- if (!m_bCanSet) return FALSE;
-
- CJS_WideStringArray strArray;
-
- if (vp.IsArrayObject())
- {
- CJS_Array ValueArray(m_isolate);
- vp.ConvertToArray(ValueArray);
- for (int i = 0,sz = ValueArray.GetLength(); i < sz; i++)
- {
- CJS_Value ElementValue(m_isolate);
- ValueArray.GetElement(i, ElementValue);
- strArray.Add(ElementValue.ToCFXWideString());
- }
- }
- else
- {
- CFX_WideString swValue;
- vp >> swValue;
+ if (m_bDelay) {
+ AddDelay_WideStringArray(FP_VALUE, strArray);
+ } else {
+ Field::SetValue(m_pDocument, m_FieldName, m_nFormControlIndex, strArray);
+ }
+ } else {
+ CFX_PtrArray FieldArray;
+ GetFormFields(m_FieldName, FieldArray);
+ if (FieldArray.GetSize() <= 0)
+ return FALSE;
- strArray.Add(swValue);
- }
+ CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
+ ASSERT(pFormField != NULL);
- if (m_bDelay)
- {
- AddDelay_WideStringArray(FP_VALUE, strArray);
- }
- else
- {
- Field::SetValue(m_pDocument, m_FieldName, m_nFormControlIndex, strArray);
- }
- }
- else
- {
- CFX_PtrArray FieldArray;
- GetFormFields(m_FieldName,FieldArray);
- if (FieldArray.GetSize() <= 0) return FALSE;
-
- CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
- ASSERT(pFormField != NULL);
-
-
-
- switch (pFormField->GetFieldType())
- {
- case FIELDTYPE_PUSHBUTTON:
- return FALSE;
- case FIELDTYPE_COMBOBOX:
- case FIELDTYPE_TEXTFIELD:
- {
- CFX_WideString swValue = pFormField->GetValue();
-
- double dRet;
- FX_BOOL bDot;
- if (CJS_PublicMethods::ConvertStringToNumber(swValue.c_str(), dRet, bDot))
- {
- if (bDot)
- vp << dRet;
- else
- vp << dRet;
- }
- else
- vp << swValue;
- }
- break;
- case FIELDTYPE_LISTBOX:
- {
- if (pFormField->CountSelectedItems() > 1)
- {
- CJS_Array ValueArray(m_isolate);
- CJS_Value ElementValue(m_isolate);
- int iIndex;
- for (int i = 0, sz = pFormField->CountSelectedItems(); i < sz; i++)
- {
- iIndex = pFormField->GetSelectedIndex(i);
- ElementValue = pFormField->GetOptionValue(iIndex).c_str();
- if (FXSYS_wcslen(ElementValue.ToCFXWideString().c_str()) == 0)
- ElementValue = pFormField->GetOptionLabel(iIndex).c_str();
- ValueArray.SetElement(i, ElementValue);
- }
- vp << ValueArray;
- }
- else
- {
- CFX_WideString swValue = pFormField->GetValue();
-
- double dRet;
- FX_BOOL bDot;
- if (CJS_PublicMethods::ConvertStringToNumber(swValue.c_str(), dRet, bDot))
- {
- if (bDot)
- vp << dRet;
- else
- vp << dRet;
- }
- else
- vp << swValue;
- }
- }
- break;
- case FIELDTYPE_CHECKBOX:
- case FIELDTYPE_RADIOBUTTON:
- {
- FX_BOOL bFind = FALSE;
- for (int i = 0 , sz = pFormField->CountControls(); i < sz; i++)
- {
- if (pFormField->GetControl(i)->IsChecked())
- {
- CFX_WideString swValue = pFormField->GetControl(i)->GetExportValue();
- double dRet;
- FX_BOOL bDot;
- if (CJS_PublicMethods::ConvertStringToNumber(swValue.c_str(), dRet, bDot))
- {
- if (bDot)
- vp << dRet;
- else
- vp << dRet;
- }
- else
- vp << swValue;
-
- bFind = TRUE;
- break;
- }
- else
- continue;
- }
- if (!bFind)
- vp << L"Off";
- }
- break;
- default:
- vp << pFormField->GetValue();
+ switch (pFormField->GetFieldType()) {
+ case FIELDTYPE_PUSHBUTTON:
+ return FALSE;
+ case FIELDTYPE_COMBOBOX:
+ case FIELDTYPE_TEXTFIELD: {
+ CFX_WideString swValue = pFormField->GetValue();
+
+ double dRet;
+ FX_BOOL bDot;
+ if (CJS_PublicMethods::ConvertStringToNumber(swValue.c_str(), dRet,
+ bDot)) {
+ if (bDot)
+ vp << dRet;
+ else
+ vp << dRet;
+ } else
+ vp << swValue;
+ } break;
+ case FIELDTYPE_LISTBOX: {
+ if (pFormField->CountSelectedItems() > 1) {
+ CJS_Array ValueArray(m_isolate);
+ CJS_Value ElementValue(m_isolate);
+ int iIndex;
+ for (int i = 0, sz = pFormField->CountSelectedItems(); i < sz; i++) {
+ iIndex = pFormField->GetSelectedIndex(i);
+ ElementValue = pFormField->GetOptionValue(iIndex).c_str();
+ if (FXSYS_wcslen(ElementValue.ToCFXWideString().c_str()) == 0)
+ ElementValue = pFormField->GetOptionLabel(iIndex).c_str();
+ ValueArray.SetElement(i, ElementValue);
+ }
+ vp << ValueArray;
+ } else {
+ CFX_WideString swValue = pFormField->GetValue();
+
+ double dRet;
+ FX_BOOL bDot;
+ if (CJS_PublicMethods::ConvertStringToNumber(swValue.c_str(), dRet,
+ bDot)) {
+ if (bDot)
+ vp << dRet;
+ else
+ vp << dRet;
+ } else
+ vp << swValue;
+ }
+ } break;
+ case FIELDTYPE_CHECKBOX:
+ case FIELDTYPE_RADIOBUTTON: {
+ FX_BOOL bFind = FALSE;
+ for (int i = 0, sz = pFormField->CountControls(); i < sz; i++) {
+ if (pFormField->GetControl(i)->IsChecked()) {
+ CFX_WideString swValue =
+ pFormField->GetControl(i)->GetExportValue();
+ double dRet;
+ FX_BOOL bDot;
+ if (CJS_PublicMethods::ConvertStringToNumber(swValue.c_str(), dRet,
+ bDot)) {
+ if (bDot)
+ vp << dRet;
+ else
+ vp << dRet;
+ } else
+ vp << swValue;
+
+ bFind = TRUE;
break;
+ } else
+ continue;
}
+ if (!bFind)
+ vp << L"Off";
+ } break;
+ default:
+ vp << pFormField->GetValue();
+ break;
}
+ }
- return TRUE;
+ return TRUE;
}
-void Field::SetValue(CPDFSDK_Document* pDocument, const CFX_WideString& swFieldName,
- int nControlIndex, const CJS_WideStringArray& strArray)
-{
- ASSERT(pDocument != NULL);
+void Field::SetValue(CPDFSDK_Document* pDocument,
+ const CFX_WideString& swFieldName,
+ int nControlIndex,
+ const CJS_WideStringArray& strArray) {
+ ASSERT(pDocument != NULL);
- if (strArray.GetSize() < 1) return;
+ if (strArray.GetSize() < 1)
+ return;
- CFX_PtrArray FieldArray;
- GetFormFields(pDocument, swFieldName, FieldArray);
+ CFX_PtrArray FieldArray;
+ GetFormFields(pDocument, swFieldName, FieldArray);
- for (int i=0,isz=FieldArray.GetSize(); i<isz; i++)
- {
- CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(i);
- ASSERT(pFormField != NULL);
+ for (int i = 0, isz = FieldArray.GetSize(); i < isz; i++) {
+ CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(i);
+ ASSERT(pFormField != NULL);
- if (pFormField->GetFullName().Compare(swFieldName) != 0)
- continue;
+ if (pFormField->GetFullName().Compare(swFieldName) != 0)
+ continue;
- switch (pFormField->GetFieldType())
- {
- case FIELDTYPE_TEXTFIELD:
- case FIELDTYPE_COMBOBOX:
- if (pFormField->GetValue() != strArray.GetAt(0))
- {
- CFX_WideString WideString = strArray.GetAt(0);
- pFormField->SetValue(strArray.GetAt(0), TRUE);
- UpdateFormField(pDocument, pFormField, TRUE, FALSE, TRUE);
- }
- break;
- case FIELDTYPE_CHECKBOX: //mantis: 0004493
- case FIELDTYPE_RADIOBUTTON:
- {
- if (pFormField->GetValue() != strArray.GetAt(0))
- {
- pFormField->SetValue(strArray.GetAt(0), TRUE);
- UpdateFormField(pDocument, pFormField, TRUE, FALSE, TRUE);
- }
- }
- break;
- case FIELDTYPE_LISTBOX:
- {
- FX_BOOL bModified = FALSE;
-
- for (int i=0,sz=strArray.GetSize(); i<sz; i++)
- {
- int iIndex = pFormField->FindOption(strArray.GetAt(i));
-
- if (!pFormField->IsItemSelected(iIndex))
- {
- bModified = TRUE;
- break;
- }
- }
-
- if (bModified)
- {
- pFormField->ClearSelection(TRUE);
- for (int i=0,sz=strArray.GetSize(); i<sz; i++)
- {
- int iIndex = pFormField->FindOption(strArray.GetAt(i));
- pFormField->SetItemSelection(iIndex, TRUE, TRUE);
- }
-
- UpdateFormField(pDocument, pFormField, TRUE, FALSE, TRUE);
- }
- }
- break;
- default:
+ switch (pFormField->GetFieldType()) {
+ case FIELDTYPE_TEXTFIELD:
+ case FIELDTYPE_COMBOBOX:
+ if (pFormField->GetValue() != strArray.GetAt(0)) {
+ CFX_WideString WideString = strArray.GetAt(0);
+ pFormField->SetValue(strArray.GetAt(0), TRUE);
+ UpdateFormField(pDocument, pFormField, TRUE, FALSE, TRUE);
+ }
+ break;
+ case FIELDTYPE_CHECKBOX: // mantis: 0004493
+ case FIELDTYPE_RADIOBUTTON: {
+ if (pFormField->GetValue() != strArray.GetAt(0)) {
+ pFormField->SetValue(strArray.GetAt(0), TRUE);
+ UpdateFormField(pDocument, pFormField, TRUE, FALSE, TRUE);
+ }
+ } break;
+ case FIELDTYPE_LISTBOX: {
+ FX_BOOL bModified = FALSE;
+
+ for (int i = 0, sz = strArray.GetSize(); i < sz; i++) {
+ int iIndex = pFormField->FindOption(strArray.GetAt(i));
+
+ if (!pFormField->IsItemSelected(iIndex)) {
+ bModified = TRUE;
break;
+ }
+ }
+
+ if (bModified) {
+ pFormField->ClearSelection(TRUE);
+ for (int i = 0, sz = strArray.GetSize(); i < sz; i++) {
+ int iIndex = pFormField->FindOption(strArray.GetAt(i));
+ pFormField->SetItemSelection(iIndex, TRUE, TRUE);
+ }
+
+ UpdateFormField(pDocument, pFormField, TRUE, FALSE, TRUE);
}
+ } break;
+ default:
+ break;
}
+ }
}
-FX_BOOL Field::valueAsString(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- ASSERT(m_pDocument != NULL);
+FX_BOOL Field::valueAsString(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ ASSERT(m_pDocument != NULL);
- if (!vp.IsGetting()) return FALSE;
+ if (!vp.IsGetting())
+ return FALSE;
- CFX_PtrArray FieldArray;
- GetFormFields(m_FieldName,FieldArray);
- if (FieldArray.GetSize() <= 0) return FALSE;
+ CFX_PtrArray FieldArray;
+ GetFormFields(m_FieldName, FieldArray);
+ if (FieldArray.GetSize() <= 0)
+ return FALSE;
- CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
- ASSERT(pFormField != NULL);
+ CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
+ ASSERT(pFormField != NULL);
- if (pFormField->GetFieldType() == FIELDTYPE_PUSHBUTTON)
- return FALSE;
+ if (pFormField->GetFieldType() == FIELDTYPE_PUSHBUTTON)
+ return FALSE;
- if (pFormField->GetFieldType() == FIELDTYPE_CHECKBOX)
- {
- if(!pFormField->CountControls()) return FALSE;
+ if (pFormField->GetFieldType() == FIELDTYPE_CHECKBOX) {
+ if (!pFormField->CountControls())
+ return FALSE;
- if (pFormField->GetControl(0)->IsChecked())
- vp << L"Yes";
- else
- vp << L"Off";
- }
- else if (pFormField->GetFieldType() == FIELDTYPE_RADIOBUTTON && !(pFormField->GetFieldFlags() & FIELDFLAG_RADIOSINUNISON))
- {
- for (int i=0, sz=pFormField->CountControls(); i<sz; i++)
- {
- if (pFormField->GetControl(i)->IsChecked())
- {
- vp << pFormField->GetControl(i)->GetExportValue().c_str();
- break;
- }
- else
- vp << L"Off";
- }
- }
- else if (pFormField->GetFieldType() == FIELDTYPE_LISTBOX && (pFormField->CountSelectedItems() > 1))
- {
- vp << L"";
- }
+ if (pFormField->GetControl(0)->IsChecked())
+ vp << L"Yes";
else
- vp << pFormField->GetValue().c_str();
+ vp << L"Off";
+ } else if (pFormField->GetFieldType() == FIELDTYPE_RADIOBUTTON &&
+ !(pFormField->GetFieldFlags() & FIELDFLAG_RADIOSINUNISON)) {
+ for (int i = 0, sz = pFormField->CountControls(); i < sz; i++) {
+ if (pFormField->GetControl(i)->IsChecked()) {
+ vp << pFormField->GetControl(i)->GetExportValue().c_str();
+ break;
+ } else
+ vp << L"Off";
+ }
+ } else if (pFormField->GetFieldType() == FIELDTYPE_LISTBOX &&
+ (pFormField->CountSelectedItems() > 1)) {
+ vp << L"";
+ } else
+ vp << pFormField->GetValue().c_str();
- return TRUE;
+ return TRUE;
}
-/* --------------------------------- methods --------------------------------- */
+/* --------------------------------- methods ---------------------------------
+ */
-FX_BOOL Field::browseForFileToSubmit(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- ASSERT(m_pDocument != NULL);
+FX_BOOL Field::browseForFileToSubmit(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ ASSERT(m_pDocument != NULL);
- CFX_PtrArray FieldArray;
- GetFormFields(m_FieldName, FieldArray);
- if (FieldArray.GetSize() <= 0) return FALSE;
+ CFX_PtrArray FieldArray;
+ GetFormFields(m_FieldName, FieldArray);
+ if (FieldArray.GetSize() <= 0)
+ return FALSE;
- CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
- ASSERT(pFormField != NULL);
+ CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
+ ASSERT(pFormField != NULL);
- CPDFDoc_Environment* pApp = m_pDocument->GetEnv();
- ASSERT(pApp != NULL);
+ CPDFDoc_Environment* pApp = m_pDocument->GetEnv();
+ ASSERT(pApp != NULL);
- if ((pFormField->GetFieldFlags() & FIELDFLAG_FILESELECT) &&
- (pFormField->GetFieldType() == FIELDTYPE_TEXTFIELD))
- {
- CFX_WideString wsFileName = pApp->JS_fieldBrowse();
- if(!wsFileName.IsEmpty())
- {
- pFormField->SetValue(wsFileName);
- UpdateFormField(m_pDocument, pFormField, TRUE, TRUE, TRUE);
- }
+ if ((pFormField->GetFieldFlags() & FIELDFLAG_FILESELECT) &&
+ (pFormField->GetFieldType() == FIELDTYPE_TEXTFIELD)) {
+ CFX_WideString wsFileName = pApp->JS_fieldBrowse();
+ if (!wsFileName.IsEmpty()) {
+ pFormField->SetValue(wsFileName);
+ UpdateFormField(m_pDocument, pFormField, TRUE, TRUE, TRUE);
}
- else
- return FALSE;
+ } else
+ return FALSE;
- return TRUE;
+ return TRUE;
}
+FX_BOOL Field::buttonGetCaption(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ ASSERT(m_pDocument != NULL);
-FX_BOOL Field::buttonGetCaption(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- ASSERT(m_pDocument != NULL);
-
- int nface = 0;
- int iSize = params.size();
- if (iSize >= 1)
- nface = params[0].ToInt();
+ int nface = 0;
+ int iSize = params.size();
+ if (iSize >= 1)
+ nface = params[0].ToInt();
- CFX_PtrArray FieldArray;
- GetFormFields(m_FieldName,FieldArray);
- if (FieldArray.GetSize() <= 0) return FALSE;
+ CFX_PtrArray FieldArray;
+ GetFormFields(m_FieldName, FieldArray);
+ if (FieldArray.GetSize() <= 0)
+ return FALSE;
- CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
- ASSERT(pFormField != NULL);
+ CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
+ ASSERT(pFormField != NULL);
- if (pFormField->GetFieldType() != FIELDTYPE_PUSHBUTTON)
- return FALSE;
+ if (pFormField->GetFieldType() != FIELDTYPE_PUSHBUTTON)
+ return FALSE;
- CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
- if (!pFormControl)return FALSE;
+ CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
+ if (!pFormControl)
+ return FALSE;
- if (nface == 0)
- vRet = pFormControl->GetNormalCaption().c_str();
- else if (nface == 1)
- vRet = pFormControl->GetDownCaption().c_str();
- else if (nface == 2)
- vRet = pFormControl->GetRolloverCaption().c_str();
- else
- return FALSE;
+ if (nface == 0)
+ vRet = pFormControl->GetNormalCaption().c_str();
+ else if (nface == 1)
+ vRet = pFormControl->GetDownCaption().c_str();
+ else if (nface == 2)
+ vRet = pFormControl->GetRolloverCaption().c_str();
+ else
+ return FALSE;
- return TRUE;
+ return TRUE;
}
//#pragma warning(disable: 4800)
-FX_BOOL Field::buttonGetIcon(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- ASSERT(m_pDocument != NULL);
+FX_BOOL Field::buttonGetIcon(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ ASSERT(m_pDocument != NULL);
- int nface = 0;
- int iSize = params.size();
- if (iSize >= 1)
- nface = params[0].ToInt();
+ int nface = 0;
+ int iSize = params.size();
+ if (iSize >= 1)
+ nface = params[0].ToInt();
- CFX_PtrArray FieldArray;
- GetFormFields(m_FieldName,FieldArray);
- if (FieldArray.GetSize() <= 0) return FALSE;
+ CFX_PtrArray FieldArray;
+ GetFormFields(m_FieldName, FieldArray);
+ if (FieldArray.GetSize() <= 0)
+ return FALSE;
- CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
- ASSERT(pFormField != NULL);
+ CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
+ ASSERT(pFormField != NULL);
- if (pFormField->GetFieldType() != FIELDTYPE_PUSHBUTTON)
- return FALSE;
+ if (pFormField->GetFieldType() != FIELDTYPE_PUSHBUTTON)
+ return FALSE;
- CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
- if (!pFormControl)return FALSE;
+ CPDF_FormControl* pFormControl = GetSmartFieldControl(pFormField);
+ if (!pFormControl)
+ return FALSE;
- CJS_Context* pContext = (CJS_Context*)cc;
- ASSERT(pContext != NULL);
+ CJS_Context* pContext = (CJS_Context*)cc;
+ ASSERT(pContext != NULL);
- CJS_Runtime* pRuntime = pContext->GetJSRuntime();
- ASSERT(pRuntime != NULL);
+ CJS_Runtime* pRuntime = pContext->GetJSRuntime();
+ ASSERT(pRuntime != NULL);
- JSFXObject pObj = JS_NewFxDynamicObj(*pRuntime, pContext, JS_GetObjDefnID(*pRuntime, L"Icon"));
- ASSERT(pObj.IsEmpty() == FALSE);
+ JSFXObject pObj = JS_NewFxDynamicObj(*pRuntime, pContext,
+ JS_GetObjDefnID(*pRuntime, L"Icon"));
+ ASSERT(pObj.IsEmpty() == FALSE);
- CJS_Icon* pJS_Icon = (CJS_Icon*)JS_GetPrivate(pObj);
- ASSERT(pJS_Icon != NULL);
+ CJS_Icon* pJS_Icon = (CJS_Icon*)JS_GetPrivate(pObj);
+ ASSERT(pJS_Icon != NULL);
- Icon* pIcon = (Icon*)pJS_Icon->GetEmbedObject();
- ASSERT(pIcon != NULL);
+ Icon* pIcon = (Icon*)pJS_Icon->GetEmbedObject();
+ ASSERT(pIcon != NULL);
- CPDF_Stream* pIconStream = NULL;
- if (nface == 0)
- pIconStream = pFormControl->GetNormalIcon();
- else if (nface == 1)
- pIconStream = pFormControl->GetDownIcon();
- else if (nface == 2)
- pIconStream = pFormControl->GetRolloverIcon();
- else
- return FALSE;
+ CPDF_Stream* pIconStream = NULL;
+ if (nface == 0)
+ pIconStream = pFormControl->GetNormalIcon();
+ else if (nface == 1)
+ pIconStream = pFormControl->GetDownIcon();
+ else if (nface == 2)
+ pIconStream = pFormControl->GetRolloverIcon();
+ else
+ return FALSE;
- pIcon->SetStream(pIconStream);
- vRet = pJS_Icon;
+ pIcon->SetStream(pIconStream);
+ vRet = pJS_Icon;
- return TRUE;
+ return TRUE;
}
//#pragma warning(default: 4800)
-FX_BOOL Field::buttonImportIcon(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
+FX_BOOL Field::buttonImportIcon(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
#if 0
ASSERT(m_pDocument != NULL);
@@ -3497,620 +3384,681 @@ FX_BOOL Field::buttonImportIcon(IFXJS_Context* cc, const CJS_Parameters& params,
UpdateFormControl(m_pDocument, pFormControl, TRUE, TRUE, TRUE);
vRet = 0;
-#endif // 0
- return TRUE;
+#endif // 0
+ return TRUE;
}
-FX_BOOL Field::buttonSetCaption(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- return FALSE;
+FX_BOOL Field::buttonSetCaption(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ return FALSE;
}
-FX_BOOL Field::buttonSetIcon(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- return FALSE;
+FX_BOOL Field::buttonSetIcon(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ return FALSE;
}
-FX_BOOL Field::checkThisBox(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- ASSERT(m_pDocument != NULL);
+FX_BOOL Field::checkThisBox(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ ASSERT(m_pDocument != NULL);
- if (!m_bCanSet) return FALSE;
+ if (!m_bCanSet)
+ return FALSE;
- int iSize = params.size();
- if (iSize < 1)
- return FALSE;
+ int iSize = params.size();
+ if (iSize < 1)
+ return FALSE;
- int nWidget = params[0].ToInt();
+ int nWidget = params[0].ToInt();
- FX_BOOL bCheckit = TRUE;
- if (iSize >= 2)
- bCheckit = params[1].ToBool();
+ FX_BOOL bCheckit = TRUE;
+ if (iSize >= 2)
+ bCheckit = params[1].ToBool();
- CFX_PtrArray FieldArray;
- GetFormFields(m_FieldName,FieldArray);
- if (FieldArray.GetSize() <= 0) return FALSE;
+ CFX_PtrArray FieldArray;
+ GetFormFields(m_FieldName, FieldArray);
+ if (FieldArray.GetSize() <= 0)
+ return FALSE;
- CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
- ASSERT(pFormField != NULL);
+ CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
+ ASSERT(pFormField != NULL);
- if (pFormField->GetFieldType() != FIELDTYPE_CHECKBOX && pFormField->GetFieldType() != FIELDTYPE_RADIOBUTTON)
- return FALSE;
- if(nWidget <0 || nWidget >= pFormField->CountControls())
- return FALSE;
- if (pFormField->GetFieldType() == FIELDTYPE_RADIOBUTTON)
- pFormField->CheckControl(nWidget, bCheckit, TRUE);
- else
- pFormField->CheckControl(nWidget, bCheckit, TRUE);
+ if (pFormField->GetFieldType() != FIELDTYPE_CHECKBOX &&
+ pFormField->GetFieldType() != FIELDTYPE_RADIOBUTTON)
+ return FALSE;
+ if (nWidget < 0 || nWidget >= pFormField->CountControls())
+ return FALSE;
+ if (pFormField->GetFieldType() == FIELDTYPE_RADIOBUTTON)
+ pFormField->CheckControl(nWidget, bCheckit, TRUE);
+ else
+ pFormField->CheckControl(nWidget, bCheckit, TRUE);
- UpdateFormField(m_pDocument, pFormField, TRUE, TRUE, TRUE);
- return TRUE;
+ UpdateFormField(m_pDocument, pFormField, TRUE, TRUE, TRUE);
+ return TRUE;
}
-FX_BOOL Field::clearItems(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- return TRUE;
+FX_BOOL Field::clearItems(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ return TRUE;
}
-FX_BOOL Field::defaultIsChecked(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- ASSERT(m_pDocument != NULL);
-
- if (!m_bCanSet) return FALSE;
+FX_BOOL Field::defaultIsChecked(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ ASSERT(m_pDocument != NULL);
- int iSize = params.size();
- if (iSize < 1)
- return FALSE;
+ if (!m_bCanSet)
+ return FALSE;
- int nWidget = params[0].ToInt();
+ int iSize = params.size();
+ if (iSize < 1)
+ return FALSE;
- CFX_PtrArray FieldArray;
- GetFormFields(m_FieldName,FieldArray);
- if (FieldArray.GetSize() <= 0) return FALSE;
+ int nWidget = params[0].ToInt();
- CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
- ASSERT(pFormField != NULL);
+ CFX_PtrArray FieldArray;
+ GetFormFields(m_FieldName, FieldArray);
+ if (FieldArray.GetSize() <= 0)
+ return FALSE;
- if(nWidget <0 || nWidget >= pFormField->CountControls())
- {
- vRet = FALSE;
- return FALSE;
- }
- if ((pFormField->GetFieldType() == FIELDTYPE_CHECKBOX)
- || (pFormField->GetFieldType() == FIELDTYPE_RADIOBUTTON))
- {
+ CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
+ ASSERT(pFormField != NULL);
- vRet = TRUE;
- }
- else
- vRet = FALSE;
+ if (nWidget < 0 || nWidget >= pFormField->CountControls()) {
+ vRet = FALSE;
+ return FALSE;
+ }
+ if ((pFormField->GetFieldType() == FIELDTYPE_CHECKBOX) ||
+ (pFormField->GetFieldType() == FIELDTYPE_RADIOBUTTON)) {
+ vRet = TRUE;
+ } else
+ vRet = FALSE;
- return TRUE;
+ return TRUE;
}
-FX_BOOL Field::deleteItemAt(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- return TRUE;
+FX_BOOL Field::deleteItemAt(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ return TRUE;
}
-int JS_COMPARESTRING(CFX_WideString* ps1, CFX_WideString* ps2)
-{
- ASSERT(ps1 != NULL);
- ASSERT(ps2 != NULL);
+int JS_COMPARESTRING(CFX_WideString* ps1, CFX_WideString* ps2) {
+ ASSERT(ps1 != NULL);
+ ASSERT(ps2 != NULL);
- return ps1->Compare(*ps2);
+ return ps1->Compare(*ps2);
}
+FX_BOOL Field::getArray(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ ASSERT(m_pDocument != NULL);
-FX_BOOL Field::getArray(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- ASSERT(m_pDocument != NULL);
-
- CFX_PtrArray FieldArray;
- GetFormFields(m_FieldName,FieldArray);
- if (FieldArray.GetSize() <= 0) return FALSE;
+ CFX_PtrArray FieldArray;
+ GetFormFields(m_FieldName, FieldArray);
+ if (FieldArray.GetSize() <= 0)
+ return FALSE;
- CGW_ArrayTemplate<CFX_WideString*> swSort;
+ CGW_ArrayTemplate<CFX_WideString*> swSort;
- for (int i=0,sz=FieldArray.GetSize(); i<sz; i++)
- {
- CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(i);
- ASSERT(pFormField != NULL);
+ for (int i = 0, sz = FieldArray.GetSize(); i < sz; i++) {
+ CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(i);
+ ASSERT(pFormField != NULL);
- swSort.Add(new CFX_WideString(pFormField->GetFullName()));
+ swSort.Add(new CFX_WideString(pFormField->GetFullName()));
+ }
+ swSort.Sort(JS_COMPARESTRING);
- }
- swSort.Sort(JS_COMPARESTRING);
+ CJS_Context* pContext = (CJS_Context*)cc;
+ ASSERT(pContext != NULL);
+ CJS_Runtime* pRuntime = pContext->GetJSRuntime();
+ ASSERT(pRuntime != NULL);
- CJS_Context* pContext = (CJS_Context*)cc;
- ASSERT(pContext != NULL);
- CJS_Runtime* pRuntime = pContext->GetJSRuntime();
- ASSERT(pRuntime != NULL);
+ CJS_Array FormFieldArray(m_isolate);
+ for (int j = 0, jsz = swSort.GetSize(); j < jsz; j++) {
+ CFX_WideString* pStr = swSort.GetAt(j);
- CJS_Array FormFieldArray(m_isolate);
- for (int j=0,jsz = swSort.GetSize(); j<jsz; j++)
- {
- CFX_WideString* pStr = swSort.GetAt(j);
+ JSFXObject pObj = JS_NewFxDynamicObj(*pRuntime, pContext,
+ JS_GetObjDefnID(*pRuntime, L"Field"));
+ ASSERT(pObj.IsEmpty() == FALSE);
- JSFXObject pObj = JS_NewFxDynamicObj(*pRuntime, pContext, JS_GetObjDefnID(*pRuntime, L"Field"));
- ASSERT(pObj.IsEmpty() == FALSE);
+ CJS_Field* pJSField = (CJS_Field*)JS_GetPrivate(pObj);
+ ASSERT(pJSField != NULL);
- CJS_Field* pJSField = (CJS_Field*)JS_GetPrivate(pObj);
- ASSERT(pJSField != NULL);
+ Field* pField = (Field*)pJSField->GetEmbedObject();
+ ASSERT(pField != NULL);
- Field* pField = (Field*)pJSField->GetEmbedObject();
- ASSERT(pField != NULL);
+ pField->AttachField(m_pJSDoc, *pStr);
- pField->AttachField(m_pJSDoc, *pStr);
+ CJS_Value FormFieldValue(m_isolate);
+ FormFieldValue = pJSField;
+ FormFieldArray.SetElement(j, FormFieldValue);
- CJS_Value FormFieldValue(m_isolate);
- FormFieldValue = pJSField;
- FormFieldArray.SetElement(j, FormFieldValue);
+ delete pStr;
+ }
- delete pStr;
- }
-
- vRet = FormFieldArray;
- swSort.RemoveAll();
- return TRUE;
+ vRet = FormFieldArray;
+ swSort.RemoveAll();
+ return TRUE;
}
-FX_BOOL Field::getItemAt(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- ASSERT(m_pDocument != NULL);
- int iSize = params.size();
+FX_BOOL Field::getItemAt(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ ASSERT(m_pDocument != NULL);
+ int iSize = params.size();
- int nIdx = -1;
- if (iSize >= 1)
- nIdx = params[0].ToInt();
+ int nIdx = -1;
+ if (iSize >= 1)
+ nIdx = params[0].ToInt();
- FX_BOOL bExport = TRUE;
- if (iSize >= 2)
- bExport = params[1].ToBool();
+ FX_BOOL bExport = TRUE;
+ if (iSize >= 2)
+ bExport = params[1].ToBool();
- CFX_PtrArray FieldArray;
- GetFormFields(m_FieldName,FieldArray);
- if (FieldArray.GetSize() <= 0) return FALSE;
-
- CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
- ASSERT(pFormField != NULL);
+ CFX_PtrArray FieldArray;
+ GetFormFields(m_FieldName, FieldArray);
+ if (FieldArray.GetSize() <= 0)
+ return FALSE;
- if ((pFormField->GetFieldType() == FIELDTYPE_LISTBOX)
- || (pFormField->GetFieldType() == FIELDTYPE_COMBOBOX))
- {
- if (nIdx == -1 || nIdx > pFormField->CountOptions())
- nIdx = pFormField->CountOptions() -1;
- if (bExport)
- {
- CFX_WideString strval = pFormField->GetOptionValue(nIdx);
- if (strval.IsEmpty())
- vRet = pFormField->GetOptionLabel(nIdx).c_str();
- else
- vRet = strval.c_str();
- }
- else
- vRet = pFormField->GetOptionLabel(nIdx).c_str();
- }
- else
- return FALSE;
+ CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
+ ASSERT(pFormField != NULL);
+
+ if ((pFormField->GetFieldType() == FIELDTYPE_LISTBOX) ||
+ (pFormField->GetFieldType() == FIELDTYPE_COMBOBOX)) {
+ if (nIdx == -1 || nIdx > pFormField->CountOptions())
+ nIdx = pFormField->CountOptions() - 1;
+ if (bExport) {
+ CFX_WideString strval = pFormField->GetOptionValue(nIdx);
+ if (strval.IsEmpty())
+ vRet = pFormField->GetOptionLabel(nIdx).c_str();
+ else
+ vRet = strval.c_str();
+ } else
+ vRet = pFormField->GetOptionLabel(nIdx).c_str();
+ } else
+ return FALSE;
- return TRUE;
+ return TRUE;
}
-FX_BOOL Field::getLock(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- return FALSE;
+FX_BOOL Field::getLock(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ return FALSE;
}
-FX_BOOL Field::insertItemAt(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- return TRUE;
+FX_BOOL Field::insertItemAt(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ return TRUE;
}
-FX_BOOL Field::isBoxChecked(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- ASSERT(m_pDocument != NULL);
+FX_BOOL Field::isBoxChecked(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ ASSERT(m_pDocument != NULL);
- int nIndex = -1;
- if (params.size() >= 1)
- nIndex = params[0].ToInt();
+ int nIndex = -1;
+ if (params.size() >= 1)
+ nIndex = params[0].ToInt();
- CFX_PtrArray FieldArray;
- GetFormFields(m_FieldName,FieldArray);
- if (FieldArray.GetSize() <= 0) return FALSE;
+ CFX_PtrArray FieldArray;
+ GetFormFields(m_FieldName, FieldArray);
+ if (FieldArray.GetSize() <= 0)
+ return FALSE;
- CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
- ASSERT(pFormField != NULL);
+ CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
+ ASSERT(pFormField != NULL);
- if(nIndex <0 || nIndex >= pFormField->CountControls())
- {
- vRet = FALSE;
- return FALSE;
- }
+ if (nIndex < 0 || nIndex >= pFormField->CountControls()) {
+ vRet = FALSE;
+ return FALSE;
+ }
- if ((pFormField->GetFieldType() == FIELDTYPE_CHECKBOX)
- || (pFormField->GetFieldType() == FIELDTYPE_RADIOBUTTON))
- {
- if (pFormField->GetControl(nIndex)->IsChecked() !=0 )
- vRet = TRUE;
- else
- vRet = FALSE;
- }
+ if ((pFormField->GetFieldType() == FIELDTYPE_CHECKBOX) ||
+ (pFormField->GetFieldType() == FIELDTYPE_RADIOBUTTON)) {
+ if (pFormField->GetControl(nIndex)->IsChecked() != 0)
+ vRet = TRUE;
else
- vRet = FALSE;
+ vRet = FALSE;
+ } else
+ vRet = FALSE;
- return TRUE;
+ return TRUE;
}
-FX_BOOL Field::isDefaultChecked(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- ASSERT(m_pDocument != NULL);
+FX_BOOL Field::isDefaultChecked(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ ASSERT(m_pDocument != NULL);
- int nIndex = -1;
- if (params.size() >= 1)
- nIndex = params[0].ToInt();
+ int nIndex = -1;
+ if (params.size() >= 1)
+ nIndex = params[0].ToInt();
- CFX_PtrArray FieldArray;
- GetFormFields(m_FieldName,FieldArray);
- if (FieldArray.GetSize() <= 0) return FALSE;
+ CFX_PtrArray FieldArray;
+ GetFormFields(m_FieldName, FieldArray);
+ if (FieldArray.GetSize() <= 0)
+ return FALSE;
- CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
- ASSERT(pFormField != NULL);
+ CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
+ ASSERT(pFormField != NULL);
- if(nIndex <0 || nIndex >= pFormField->CountControls())
- {
- vRet = FALSE;
- return FALSE;
- }
- if ((pFormField->GetFieldType() == FIELDTYPE_CHECKBOX)
- || (pFormField->GetFieldType() == FIELDTYPE_RADIOBUTTON))
- {
- if (pFormField->GetControl(nIndex)->IsDefaultChecked() != 0)
- vRet = TRUE;
- else
- vRet = FALSE;
- }
+ if (nIndex < 0 || nIndex >= pFormField->CountControls()) {
+ vRet = FALSE;
+ return FALSE;
+ }
+ if ((pFormField->GetFieldType() == FIELDTYPE_CHECKBOX) ||
+ (pFormField->GetFieldType() == FIELDTYPE_RADIOBUTTON)) {
+ if (pFormField->GetControl(nIndex)->IsDefaultChecked() != 0)
+ vRet = TRUE;
else
- vRet = FALSE;
+ vRet = FALSE;
+ } else
+ vRet = FALSE;
- return TRUE;
+ return TRUE;
}
-FX_BOOL Field::setAction(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- return TRUE;
+FX_BOOL Field::setAction(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ return TRUE;
}
-FX_BOOL Field::setFocus(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- ASSERT(m_pDocument != NULL);
+FX_BOOL Field::setFocus(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ ASSERT(m_pDocument != NULL);
- CFX_PtrArray FieldArray;
- GetFormFields(m_FieldName,FieldArray);
- if (FieldArray.GetSize() <= 0) return FALSE;
+ CFX_PtrArray FieldArray;
+ GetFormFields(m_FieldName, FieldArray);
+ if (FieldArray.GetSize() <= 0)
+ return FALSE;
- CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
- ASSERT(pFormField != NULL);
+ CPDF_FormField* pFormField = (CPDF_FormField*)FieldArray.ElementAt(0);
+ ASSERT(pFormField != NULL);
- int32_t nCount = pFormField->CountControls();
+ int32_t nCount = pFormField->CountControls();
- if (nCount < 1) return FALSE;
+ if (nCount < 1)
+ return FALSE;
- CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)m_pDocument->GetInterForm();
- ASSERT(pInterForm != NULL);
+ CPDFSDK_InterForm* pInterForm =
+ (CPDFSDK_InterForm*)m_pDocument->GetInterForm();
+ ASSERT(pInterForm != NULL);
- CPDFSDK_Widget* pWidget = NULL;
- if (nCount == 1)
- {
- pWidget = pInterForm->GetWidget(pFormField->GetControl(0));
- }
- else
- {
- CPDFDoc_Environment* pEnv = m_pDocument->GetEnv();
- ASSERT(pEnv);
- CPDF_Page* pPage = (CPDF_Page*)pEnv->FFI_GetCurrentPage(m_pDocument->GetDocument());
- if(!pPage)
- return FALSE;
- if (CPDFSDK_PageView* pCurPageView = m_pDocument->GetPageView(pPage))
- {
- for (int32_t i=0; i<nCount; i++)
- {
- if (CPDFSDK_Widget* pTempWidget = pInterForm->GetWidget(pFormField->GetControl(i)))
- {
- if (pTempWidget->GetPDFPage() == pCurPageView->GetPDFPage())
- {
- pWidget = pTempWidget;
- break;
- }
- }
- }
+ CPDFSDK_Widget* pWidget = NULL;
+ if (nCount == 1) {
+ pWidget = pInterForm->GetWidget(pFormField->GetControl(0));
+ } else {
+ CPDFDoc_Environment* pEnv = m_pDocument->GetEnv();
+ ASSERT(pEnv);
+ CPDF_Page* pPage =
+ (CPDF_Page*)pEnv->FFI_GetCurrentPage(m_pDocument->GetDocument());
+ if (!pPage)
+ return FALSE;
+ if (CPDFSDK_PageView* pCurPageView = m_pDocument->GetPageView(pPage)) {
+ for (int32_t i = 0; i < nCount; i++) {
+ if (CPDFSDK_Widget* pTempWidget =
+ pInterForm->GetWidget(pFormField->GetControl(i))) {
+ if (pTempWidget->GetPDFPage() == pCurPageView->GetPDFPage()) {
+ pWidget = pTempWidget;
+ break;
+ }
}
+ }
}
+ }
- if (pWidget)
- {
- m_pDocument->SetFocusAnnot(pWidget);
- }
+ if (pWidget) {
+ m_pDocument->SetFocusAnnot(pWidget);
+ }
- return TRUE;
+ return TRUE;
}
-FX_BOOL Field::setItems(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- return TRUE;
+FX_BOOL Field::setItems(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ return TRUE;
}
-FX_BOOL Field::setLock(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- return FALSE;
+FX_BOOL Field::setLock(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ return FALSE;
}
-FX_BOOL Field::signatureGetModifications(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- return FALSE;
+FX_BOOL Field::signatureGetModifications(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ return FALSE;
}
-FX_BOOL Field::signatureGetSeedValue(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- return FALSE;
+FX_BOOL Field::signatureGetSeedValue(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ return FALSE;
}
-FX_BOOL Field::signatureInfo(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- return FALSE;
+FX_BOOL Field::signatureInfo(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ return FALSE;
}
-FX_BOOL Field::signatureSetSeedValue(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- return FALSE;
+FX_BOOL Field::signatureSetSeedValue(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ return FALSE;
}
-FX_BOOL Field::signatureSign(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- return FALSE;
+FX_BOOL Field::signatureSign(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ return FALSE;
}
-FX_BOOL Field::signatureValidate(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- return FALSE;
+FX_BOOL Field::signatureValidate(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ return FALSE;
}
-FX_BOOL Field::source(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- if (vp.IsGetting())
- {
- vp << (CJS_Object*)NULL;
- }
+FX_BOOL Field::source(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ if (vp.IsGetting()) {
+ vp << (CJS_Object*)NULL;
+ }
- return TRUE;
+ return TRUE;
}
-/////////////////////////////////////////// delay /////////////////////////////////////////////
+/////////////////////////////////////////// delay
+////////////////////////////////////////////////
-void Field::AddDelay_Int(enum FIELD_PROP prop, int32_t n)
-{
- ASSERT(m_pJSDoc != NULL);
+void Field::AddDelay_Int(enum FIELD_PROP prop, int32_t n) {
+ ASSERT(m_pJSDoc != NULL);
- CJS_DelayData* pNewData = new CJS_DelayData;
- pNewData->sFieldName = m_FieldName;
- pNewData->nControlIndex = m_nFormControlIndex;
- pNewData->eProp = prop;
- pNewData->num = n;
+ CJS_DelayData* pNewData = new CJS_DelayData;
+ pNewData->sFieldName = m_FieldName;
+ pNewData->nControlIndex = m_nFormControlIndex;
+ pNewData->eProp = prop;
+ pNewData->num = n;
- m_pJSDoc->AddDelayData(pNewData);
+ m_pJSDoc->AddDelayData(pNewData);
}
-void Field::AddDelay_Bool(enum FIELD_PROP prop,bool b)
-{
- ASSERT(m_pJSDoc != NULL);
+void Field::AddDelay_Bool(enum FIELD_PROP prop, bool b) {
+ ASSERT(m_pJSDoc != NULL);
- CJS_DelayData* pNewData = new CJS_DelayData;
- pNewData->sFieldName = m_FieldName;
- pNewData->nControlIndex = m_nFormControlIndex;
- pNewData->eProp = prop;
- pNewData->b = b;
+ CJS_DelayData* pNewData = new CJS_DelayData;
+ pNewData->sFieldName = m_FieldName;
+ pNewData->nControlIndex = m_nFormControlIndex;
+ pNewData->eProp = prop;
+ pNewData->b = b;
- m_pJSDoc->AddDelayData(pNewData);
+ m_pJSDoc->AddDelayData(pNewData);
}
-void Field::AddDelay_String(enum FIELD_PROP prop, const CFX_ByteString& string)
-{
- ASSERT(m_pJSDoc != NULL);
+void Field::AddDelay_String(enum FIELD_PROP prop,
+ const CFX_ByteString& string) {
+ ASSERT(m_pJSDoc != NULL);
- CJS_DelayData* pNewData = new CJS_DelayData;
- pNewData->sFieldName = m_FieldName;
- pNewData->nControlIndex = m_nFormControlIndex;
- pNewData->eProp = prop;
- pNewData->string = string;
+ CJS_DelayData* pNewData = new CJS_DelayData;
+ pNewData->sFieldName = m_FieldName;
+ pNewData->nControlIndex = m_nFormControlIndex;
+ pNewData->eProp = prop;
+ pNewData->string = string;
- m_pJSDoc->AddDelayData(pNewData);
+ m_pJSDoc->AddDelayData(pNewData);
}
-void Field::AddDelay_WideString(enum FIELD_PROP prop, const CFX_WideString& string)
-{
- ASSERT(m_pJSDoc != NULL);
+void Field::AddDelay_WideString(enum FIELD_PROP prop,
+ const CFX_WideString& string) {
+ ASSERT(m_pJSDoc != NULL);
- CJS_DelayData* pNewData = new CJS_DelayData;
- pNewData->sFieldName = m_FieldName;
- pNewData->nControlIndex = m_nFormControlIndex;
- pNewData->eProp = prop;
- pNewData->widestring = string;
+ CJS_DelayData* pNewData = new CJS_DelayData;
+ pNewData->sFieldName = m_FieldName;
+ pNewData->nControlIndex = m_nFormControlIndex;
+ pNewData->eProp = prop;
+ pNewData->widestring = string;
- m_pJSDoc->AddDelayData(pNewData);
+ m_pJSDoc->AddDelayData(pNewData);
}
-void Field::AddDelay_Rect(enum FIELD_PROP prop, const CPDF_Rect& rect)
-{
- ASSERT(m_pJSDoc != NULL);
+void Field::AddDelay_Rect(enum FIELD_PROP prop, const CPDF_Rect& rect) {
+ ASSERT(m_pJSDoc != NULL);
- CJS_DelayData* pNewData = new CJS_DelayData;
- pNewData->sFieldName = m_FieldName;
- pNewData->nControlIndex = m_nFormControlIndex;
- pNewData->eProp = prop;
- pNewData->rect = rect;
+ CJS_DelayData* pNewData = new CJS_DelayData;
+ pNewData->sFieldName = m_FieldName;
+ pNewData->nControlIndex = m_nFormControlIndex;
+ pNewData->eProp = prop;
+ pNewData->rect = rect;
- m_pJSDoc->AddDelayData(pNewData);
+ m_pJSDoc->AddDelayData(pNewData);
}
-void Field::AddDelay_Color(enum FIELD_PROP prop, const CPWL_Color& color)
-{
- ASSERT(m_pJSDoc != NULL);
+void Field::AddDelay_Color(enum FIELD_PROP prop, const CPWL_Color& color) {
+ ASSERT(m_pJSDoc != NULL);
- CJS_DelayData* pNewData = new CJS_DelayData;
- pNewData->sFieldName = m_FieldName;
- pNewData->nControlIndex = m_nFormControlIndex;
- pNewData->eProp = prop;
- pNewData->color = color;
+ CJS_DelayData* pNewData = new CJS_DelayData;
+ pNewData->sFieldName = m_FieldName;
+ pNewData->nControlIndex = m_nFormControlIndex;
+ pNewData->eProp = prop;
+ pNewData->color = color;
- m_pJSDoc->AddDelayData(pNewData);
+ m_pJSDoc->AddDelayData(pNewData);
}
-void Field::AddDelay_WordArray(enum FIELD_PROP prop, const CFX_DWordArray& array)
-{
- ASSERT(m_pJSDoc != NULL);
+void Field::AddDelay_WordArray(enum FIELD_PROP prop,
+ const CFX_DWordArray& array) {
+ ASSERT(m_pJSDoc != NULL);
- CJS_DelayData* pNewData = new CJS_DelayData;
- pNewData->sFieldName = m_FieldName;
- pNewData->nControlIndex = m_nFormControlIndex;
- pNewData->eProp = prop;
+ CJS_DelayData* pNewData = new CJS_DelayData;
+ pNewData->sFieldName = m_FieldName;
+ pNewData->nControlIndex = m_nFormControlIndex;
+ pNewData->eProp = prop;
- for (int i=0,sz=array.GetSize(); i<sz; i++)
- pNewData->wordarray.Add(array.GetAt(i));
+ for (int i = 0, sz = array.GetSize(); i < sz; i++)
+ pNewData->wordarray.Add(array.GetAt(i));
- m_pJSDoc->AddDelayData(pNewData);
+ m_pJSDoc->AddDelayData(pNewData);
}
-void Field::AddDelay_WideStringArray(enum FIELD_PROP prop, const CJS_WideStringArray& array)
-{
- ASSERT(m_pJSDoc != NULL);
+void Field::AddDelay_WideStringArray(enum FIELD_PROP prop,
+ const CJS_WideStringArray& array) {
+ ASSERT(m_pJSDoc != NULL);
- CJS_DelayData* pNewData = new CJS_DelayData;
- pNewData->sFieldName = m_FieldName;
- pNewData->nControlIndex = m_nFormControlIndex;
- pNewData->eProp = prop;
- for (int i=0,sz=array.GetSize(); i<sz; i++)
- pNewData->widestringarray.Add(array.GetAt(i));
+ CJS_DelayData* pNewData = new CJS_DelayData;
+ pNewData->sFieldName = m_FieldName;
+ pNewData->nControlIndex = m_nFormControlIndex;
+ pNewData->eProp = prop;
+ for (int i = 0, sz = array.GetSize(); i < sz; i++)
+ pNewData->widestringarray.Add(array.GetAt(i));
- m_pJSDoc->AddDelayData(pNewData);
+ m_pJSDoc->AddDelayData(pNewData);
}
-void Field::DoDelay(CPDFSDK_Document* pDocument, CJS_DelayData* pData)
-{
- ASSERT(pDocument != NULL);
- ASSERT(pData != NULL);
+void Field::DoDelay(CPDFSDK_Document* pDocument, CJS_DelayData* pData) {
+ ASSERT(pDocument != NULL);
+ ASSERT(pData != NULL);
- switch (pData->eProp)
- {
+ switch (pData->eProp) {
case FP_ALIGNMENT:
- Field::SetAlignment(pDocument, pData->sFieldName, pData->nControlIndex, pData->string);
- break;
+ Field::SetAlignment(pDocument, pData->sFieldName, pData->nControlIndex,
+ pData->string);
+ break;
case FP_BORDERSTYLE:
- Field::SetBorderStyle(pDocument, pData->sFieldName, pData->nControlIndex, pData->string);
- break;
+ Field::SetBorderStyle(pDocument, pData->sFieldName, pData->nControlIndex,
+ pData->string);
+ break;
case FP_BUTTONALIGNX:
- Field::SetButtonAlignX(pDocument, pData->sFieldName, pData->nControlIndex, pData->num);
- break;
+ Field::SetButtonAlignX(pDocument, pData->sFieldName, pData->nControlIndex,
+ pData->num);
+ break;
case FP_BUTTONALIGNY:
- Field::SetButtonAlignY(pDocument, pData->sFieldName, pData->nControlIndex, pData->num);
- break;
+ Field::SetButtonAlignY(pDocument, pData->sFieldName, pData->nControlIndex,
+ pData->num);
+ break;
case FP_BUTTONFITBOUNDS:
- Field::SetButtonFitBounds(pDocument, pData->sFieldName, pData->nControlIndex, pData->b);
- break;
+ Field::SetButtonFitBounds(pDocument, pData->sFieldName,
+ pData->nControlIndex, pData->b);
+ break;
case FP_BUTTONPOSITION:
- Field::SetButtonPosition(pDocument, pData->sFieldName, pData->nControlIndex, pData->num);
- break;
+ Field::SetButtonPosition(pDocument, pData->sFieldName,
+ pData->nControlIndex, pData->num);
+ break;
case FP_BUTTONSCALEHOW:
- Field::SetButtonScaleHow(pDocument, pData->sFieldName, pData->nControlIndex, pData->num);
- break;
+ Field::SetButtonScaleHow(pDocument, pData->sFieldName,
+ pData->nControlIndex, pData->num);
+ break;
case FP_BUTTONSCALEWHEN:
- Field::SetButtonScaleWhen(pDocument, pData->sFieldName, pData->nControlIndex, pData->num);
- break;
+ Field::SetButtonScaleWhen(pDocument, pData->sFieldName,
+ pData->nControlIndex, pData->num);
+ break;
case FP_CALCORDERINDEX:
- Field::SetCalcOrderIndex(pDocument, pData->sFieldName, pData->nControlIndex, pData->num);
- break;
+ Field::SetCalcOrderIndex(pDocument, pData->sFieldName,
+ pData->nControlIndex, pData->num);
+ break;
case FP_CHARLIMIT:
- Field::SetCharLimit(pDocument, pData->sFieldName, pData->nControlIndex, pData->num);
- break;
+ Field::SetCharLimit(pDocument, pData->sFieldName, pData->nControlIndex,
+ pData->num);
+ break;
case FP_COMB:
- Field::SetComb(pDocument, pData->sFieldName, pData->nControlIndex, pData->b);
- break;
+ Field::SetComb(pDocument, pData->sFieldName, pData->nControlIndex,
+ pData->b);
+ break;
case FP_COMMITONSELCHANGE:
- Field::SetCommitOnSelChange(pDocument, pData->sFieldName, pData->nControlIndex, pData->b);
- break;
+ Field::SetCommitOnSelChange(pDocument, pData->sFieldName,
+ pData->nControlIndex, pData->b);
+ break;
case FP_CURRENTVALUEINDICES:
- Field::SetCurrentValueIndices(pDocument, pData->sFieldName, pData->nControlIndex, pData->wordarray);
- break;
+ Field::SetCurrentValueIndices(pDocument, pData->sFieldName,
+ pData->nControlIndex, pData->wordarray);
+ break;
case FP_DEFAULTVALUE:
- Field::SetDefaultValue(pDocument, pData->sFieldName, pData->nControlIndex, pData->widestring);
- break;
+ Field::SetDefaultValue(pDocument, pData->sFieldName, pData->nControlIndex,
+ pData->widestring);
+ break;
case FP_DONOTSCROLL:
- Field::SetDoNotScroll(pDocument, pData->sFieldName, pData->nControlIndex, pData->b);
- break;
+ Field::SetDoNotScroll(pDocument, pData->sFieldName, pData->nControlIndex,
+ pData->b);
+ break;
case FP_DISPLAY:
- Field::SetDisplay(pDocument, pData->sFieldName, pData->nControlIndex, pData->num);
- break;
+ Field::SetDisplay(pDocument, pData->sFieldName, pData->nControlIndex,
+ pData->num);
+ break;
case FP_FILLCOLOR:
- Field::SetFillColor(pDocument, pData->sFieldName, pData->nControlIndex, pData->color);
- break;
+ Field::SetFillColor(pDocument, pData->sFieldName, pData->nControlIndex,
+ pData->color);
+ break;
case FP_HIDDEN:
- Field::SetHidden(pDocument, pData->sFieldName, pData->nControlIndex, pData->b);
- break;
+ Field::SetHidden(pDocument, pData->sFieldName, pData->nControlIndex,
+ pData->b);
+ break;
case FP_HIGHLIGHT:
- Field::SetHighlight(pDocument, pData->sFieldName, pData->nControlIndex, pData->string);
- break;
+ Field::SetHighlight(pDocument, pData->sFieldName, pData->nControlIndex,
+ pData->string);
+ break;
case FP_LINEWIDTH:
- Field::SetLineWidth(pDocument, pData->sFieldName, pData->nControlIndex, pData->num);
- break;
+ Field::SetLineWidth(pDocument, pData->sFieldName, pData->nControlIndex,
+ pData->num);
+ break;
case FP_MULTILINE:
- Field::SetMultiline(pDocument, pData->sFieldName, pData->nControlIndex, pData->b);
- break;
+ Field::SetMultiline(pDocument, pData->sFieldName, pData->nControlIndex,
+ pData->b);
+ break;
case FP_MULTIPLESELECTION:
- Field::SetMultipleSelection(pDocument, pData->sFieldName, pData->nControlIndex, pData->b);
- break;
+ Field::SetMultipleSelection(pDocument, pData->sFieldName,
+ pData->nControlIndex, pData->b);
+ break;
case FP_PASSWORD:
- Field::SetPassword(pDocument, pData->sFieldName, pData->nControlIndex, pData->b);
- break;
+ Field::SetPassword(pDocument, pData->sFieldName, pData->nControlIndex,
+ pData->b);
+ break;
case FP_RECT:
- Field::SetRect(pDocument, pData->sFieldName, pData->nControlIndex, pData->rect);
- break;
+ Field::SetRect(pDocument, pData->sFieldName, pData->nControlIndex,
+ pData->rect);
+ break;
case FP_RICHTEXT:
- Field::SetRichText(pDocument, pData->sFieldName, pData->nControlIndex, pData->b);
- break;
+ Field::SetRichText(pDocument, pData->sFieldName, pData->nControlIndex,
+ pData->b);
+ break;
case FP_RICHVALUE:
- break;
+ break;
case FP_ROTATION:
- Field::SetRotation(pDocument, pData->sFieldName, pData->nControlIndex, pData->num);
- break;
+ Field::SetRotation(pDocument, pData->sFieldName, pData->nControlIndex,
+ pData->num);
+ break;
case FP_STROKECOLOR:
- Field::SetStrokeColor(pDocument, pData->sFieldName, pData->nControlIndex, pData->color);
- break;
+ Field::SetStrokeColor(pDocument, pData->sFieldName, pData->nControlIndex,
+ pData->color);
+ break;
case FP_STYLE:
- Field::SetStyle(pDocument, pData->sFieldName, pData->nControlIndex, pData->string);
- break;
+ Field::SetStyle(pDocument, pData->sFieldName, pData->nControlIndex,
+ pData->string);
+ break;
case FP_TEXTCOLOR:
- Field::SetTextColor(pDocument, pData->sFieldName, pData->nControlIndex, pData->color);
- break;
+ Field::SetTextColor(pDocument, pData->sFieldName, pData->nControlIndex,
+ pData->color);
+ break;
case FP_TEXTFONT:
- Field::SetTextFont(pDocument, pData->sFieldName, pData->nControlIndex, pData->string);
- break;
+ Field::SetTextFont(pDocument, pData->sFieldName, pData->nControlIndex,
+ pData->string);
+ break;
case FP_TEXTSIZE:
- Field::SetTextSize(pDocument, pData->sFieldName, pData->nControlIndex, pData->num);
- break;
+ Field::SetTextSize(pDocument, pData->sFieldName, pData->nControlIndex,
+ pData->num);
+ break;
case FP_USERNAME:
- Field::SetUserName(pDocument, pData->sFieldName, pData->nControlIndex, pData->widestring);
- break;
+ Field::SetUserName(pDocument, pData->sFieldName, pData->nControlIndex,
+ pData->widestring);
+ break;
case FP_VALUE:
- Field::SetValue(pDocument, pData->sFieldName, pData->nControlIndex, pData->widestringarray);
- break;
- }
+ Field::SetValue(pDocument, pData->sFieldName, pData->nControlIndex,
+ pData->widestringarray);
+ break;
+ }
}
-#define JS_FIELD_MINWIDTH 1
-#define JS_FIELD_MINHEIGHT 1
+#define JS_FIELD_MINWIDTH 1
+#define JS_FIELD_MINHEIGHT 1
-void Field::AddField(CPDFSDK_Document* pDocument, int nPageIndex, int nFieldType,
- const CFX_WideString& sName, const CPDF_Rect& rcCoords)
-{
- //Not supported.
+void Field::AddField(CPDFSDK_Document* pDocument,
+ int nPageIndex,
+ int nFieldType,
+ const CFX_WideString& sName,
+ const CPDF_Rect& rcCoords) {
+ // Not supported.
}
-
diff --git a/fpdfsdk/src/javascript/Icon.cpp b/fpdfsdk/src/javascript/Icon.cpp
index 6b3e02e1ec..0e96a05e5e 100644
--- a/fpdfsdk/src/javascript/Icon.cpp
+++ b/fpdfsdk/src/javascript/Icon.cpp
@@ -17,51 +17,42 @@ BEGIN_JS_STATIC_CONST(CJS_Icon)
END_JS_STATIC_CONST()
BEGIN_JS_STATIC_PROP(CJS_Icon)
- JS_STATIC_PROP_ENTRY(name)
+JS_STATIC_PROP_ENTRY(name)
END_JS_STATIC_PROP()
BEGIN_JS_STATIC_METHOD(CJS_Icon)
END_JS_STATIC_METHOD()
-IMPLEMENT_JS_CLASS(CJS_Icon,Icon)
+IMPLEMENT_JS_CLASS(CJS_Icon, Icon)
-Icon::Icon(CJS_Object* pJSObject) : CJS_EmbedObj(pJSObject),
- m_pIconStream(NULL),
- m_swIconName(L"")
-{
-}
-
-Icon::~Icon()
-{
+Icon::Icon(CJS_Object* pJSObject)
+ : CJS_EmbedObj(pJSObject), m_pIconStream(NULL), m_swIconName(L"") {}
-}
+Icon::~Icon() {}
-void Icon::SetStream(CPDF_Stream* pIconStream)
-{
- if(pIconStream)
- m_pIconStream = pIconStream;
+void Icon::SetStream(CPDF_Stream* pIconStream) {
+ if (pIconStream)
+ m_pIconStream = pIconStream;
}
-CPDF_Stream* Icon::GetStream()
-{
- return m_pIconStream;
+CPDF_Stream* Icon::GetStream() {
+ return m_pIconStream;
}
-void Icon::SetIconName(CFX_WideString name)
-{
- m_swIconName = name;
+void Icon::SetIconName(CFX_WideString name) {
+ m_swIconName = name;
}
-CFX_WideString Icon::GetIconName()
-{
- return m_swIconName;
+CFX_WideString Icon::GetIconName() {
+ return m_swIconName;
}
-FX_BOOL Icon::name(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- if(!vp.IsGetting())return FALSE;
+FX_BOOL Icon::name(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ if (!vp.IsGetting())
+ return FALSE;
- vp << m_swIconName;
- return TRUE;
+ vp << m_swIconName;
+ return TRUE;
}
-
diff --git a/fpdfsdk/src/javascript/JS_Context.cpp b/fpdfsdk/src/javascript/JS_Context.cpp
index 72be34d751..6e935e8647 100644
--- a/fpdfsdk/src/javascript/JS_Context.cpp
+++ b/fpdfsdk/src/javascript/JS_Context.cpp
@@ -14,337 +14,345 @@
/* -------------------------- CJS_Context -------------------------- */
-CJS_Context::CJS_Context(CJS_Runtime* pRuntime) :
- m_pRuntime(pRuntime),
- m_bBusy(FALSE),
- m_bMsgBoxEnable(TRUE)
-{
- m_pEventHandler = new CJS_EventHandler(this);
+CJS_Context::CJS_Context(CJS_Runtime* pRuntime)
+ : m_pRuntime(pRuntime), m_bBusy(FALSE), m_bMsgBoxEnable(TRUE) {
+ m_pEventHandler = new CJS_EventHandler(this);
}
-CJS_Context::~CJS_Context(void)
-{
- delete m_pEventHandler;
+CJS_Context::~CJS_Context(void) {
+ delete m_pEventHandler;
}
-CPDFSDK_Document* CJS_Context::GetReaderDocument()
-{
- ASSERT(m_pRuntime != NULL);
+CPDFSDK_Document* CJS_Context::GetReaderDocument() {
+ ASSERT(m_pRuntime != NULL);
- return m_pRuntime->GetReaderDocument();
+ return m_pRuntime->GetReaderDocument();
}
-CPDFDoc_Environment* CJS_Context::GetReaderApp()
-{
- ASSERT(m_pRuntime != NULL);
+CPDFDoc_Environment* CJS_Context::GetReaderApp() {
+ ASSERT(m_pRuntime != NULL);
- return m_pRuntime->GetReaderApp();
+ return m_pRuntime->GetReaderApp();
}
-FX_BOOL CJS_Context::DoJob(int nMode, const CFX_WideString& script, CFX_WideString& info)
-{
- if (m_bBusy)
- {
- info = JSGetStringFromID(this, IDS_STRING_JSBUSY);
- return FALSE;
- }
+FX_BOOL CJS_Context::DoJob(int nMode,
+ const CFX_WideString& script,
+ CFX_WideString& info) {
+ if (m_bBusy) {
+ info = JSGetStringFromID(this, IDS_STRING_JSBUSY);
+ return FALSE;
+ }
- m_bBusy = TRUE;
+ m_bBusy = TRUE;
- ASSERT(m_pRuntime != NULL);
- ASSERT(m_pEventHandler != NULL);
- ASSERT(m_pEventHandler->IsValid());
+ ASSERT(m_pRuntime != NULL);
+ ASSERT(m_pEventHandler != NULL);
+ ASSERT(m_pEventHandler->IsValid());
- if (!m_pRuntime->AddEventToLoop(m_pEventHandler->TargetName(), m_pEventHandler->EventType()))
- {
- info = JSGetStringFromID(this, IDS_STRING_JSEVENT);
- return FALSE;
- }
+ if (!m_pRuntime->AddEventToLoop(m_pEventHandler->TargetName(),
+ m_pEventHandler->EventType())) {
+ info = JSGetStringFromID(this, IDS_STRING_JSEVENT);
+ return FALSE;
+ }
- FXJSErr error ={NULL,NULL, 0};
- int nRet = 0;
+ FXJSErr error = {NULL, NULL, 0};
+ int nRet = 0;
- if (script.GetLength() > 0)
- {
- if (nMode == 0)
- {
- nRet = JS_Execute(*m_pRuntime, this, script.c_str(), script.GetLength(), &error);
- }
- else
- {
- nRet = JS_Parse(*m_pRuntime, this, script.c_str(), script.GetLength(), &error);
- }
- }
+ if (script.GetLength() > 0) {
+ if (nMode == 0) {
+ nRet = JS_Execute(*m_pRuntime, this, script.c_str(), script.GetLength(),
+ &error);
+ } else {
+ nRet = JS_Parse(*m_pRuntime, this, script.c_str(), script.GetLength(),
+ &error);
+ }
+ }
- if (nRet < 0)
- {
- CFX_WideString sLine;
- sLine.Format(L"[ Line: %05d { %s } ] : %s",error.linnum-1,error.srcline,error.message);
+ if (nRet < 0) {
+ CFX_WideString sLine;
+ sLine.Format(L"[ Line: %05d { %s } ] : %s", error.linnum - 1, error.srcline,
+ error.message);
-// TRACE(L"/* -------------- JS Error -------------- */\n");
-// TRACE(sLine);
-// TRACE(L"\n");
- //CFX_ByteString sTemp = CFX_ByteString::FromUnicode(error.message);
- info += sLine;
- }
- else
- {
- info = JSGetStringFromID(this, IDS_STRING_RUN);
- }
+ // TRACE(L"/* -------------- JS Error --------------
+ //*/\n");
+ // TRACE(sLine);
+ // TRACE(L"\n");
+ // CFX_ByteString sTemp = CFX_ByteString::FromUnicode(error.message);
+ info += sLine;
+ } else {
+ info = JSGetStringFromID(this, IDS_STRING_RUN);
+ }
- m_pRuntime->RemoveEventInLoop(m_pEventHandler->TargetName(), m_pEventHandler->EventType());
+ m_pRuntime->RemoveEventInLoop(m_pEventHandler->TargetName(),
+ m_pEventHandler->EventType());
- m_pEventHandler->Destroy();
- m_bBusy = FALSE;
+ m_pEventHandler->Destroy();
+ m_bBusy = FALSE;
- return nRet >= 0;
+ return nRet >= 0;
}
-FX_BOOL CJS_Context::RunScript(const CFX_WideString& script, CFX_WideString& info)
-{
- v8::Isolate::Scope isolate_scope(m_pRuntime->GetIsolate());
- v8::HandleScope handle_scope(m_pRuntime->GetIsolate());
- v8::Local<v8::Context> context = m_pRuntime->NewJSContext();
- v8::Context::Scope context_scope(context);
+FX_BOOL CJS_Context::RunScript(const CFX_WideString& script,
+ CFX_WideString& info) {
+ v8::Isolate::Scope isolate_scope(m_pRuntime->GetIsolate());
+ v8::HandleScope handle_scope(m_pRuntime->GetIsolate());
+ v8::Local<v8::Context> context = m_pRuntime->NewJSContext();
+ v8::Context::Scope context_scope(context);
- return DoJob(0, script, info);
+ return DoJob(0, script, info);
}
-FX_BOOL CJS_Context::Compile(const CFX_WideString& script, CFX_WideString& info)
-{
- v8::Isolate::Scope isolate_scope(m_pRuntime->GetIsolate());
- v8::HandleScope handle_scope(m_pRuntime->GetIsolate());
- v8::Local<v8::Context> context = m_pRuntime->NewJSContext();
- v8::Context::Scope context_scope(context);
+FX_BOOL CJS_Context::Compile(const CFX_WideString& script,
+ CFX_WideString& info) {
+ v8::Isolate::Scope isolate_scope(m_pRuntime->GetIsolate());
+ v8::HandleScope handle_scope(m_pRuntime->GetIsolate());
+ v8::Local<v8::Context> context = m_pRuntime->NewJSContext();
+ v8::Context::Scope context_scope(context);
- return DoJob(1, script, info);
+ return DoJob(1, script, info);
}
-void CJS_Context::OnApp_Init()
-{
- ASSERT(m_pEventHandler != NULL);
- m_pEventHandler->OnApp_Init();
+void CJS_Context::OnApp_Init() {
+ ASSERT(m_pEventHandler != NULL);
+ m_pEventHandler->OnApp_Init();
}
-void CJS_Context::OnDoc_Open(CPDFSDK_Document* pDoc, const CFX_WideString &strTargetName)
-{
- ASSERT(m_pEventHandler != NULL);
- m_pEventHandler->OnDoc_Open(pDoc,strTargetName);
+void CJS_Context::OnDoc_Open(CPDFSDK_Document* pDoc,
+ const CFX_WideString& strTargetName) {
+ ASSERT(m_pEventHandler != NULL);
+ m_pEventHandler->OnDoc_Open(pDoc, strTargetName);
}
-void CJS_Context::OnDoc_WillPrint(CPDFSDK_Document* pDoc)
-{
- ASSERT(m_pEventHandler != NULL);
- m_pEventHandler->OnDoc_WillPrint(pDoc);
+void CJS_Context::OnDoc_WillPrint(CPDFSDK_Document* pDoc) {
+ ASSERT(m_pEventHandler != NULL);
+ m_pEventHandler->OnDoc_WillPrint(pDoc);
}
-void CJS_Context::OnDoc_DidPrint(CPDFSDK_Document* pDoc)
-{
- ASSERT(m_pEventHandler != NULL);
- m_pEventHandler->OnDoc_DidPrint(pDoc);
+void CJS_Context::OnDoc_DidPrint(CPDFSDK_Document* pDoc) {
+ ASSERT(m_pEventHandler != NULL);
+ m_pEventHandler->OnDoc_DidPrint(pDoc);
}
-void CJS_Context::OnDoc_WillSave(CPDFSDK_Document* pDoc)
-{
- ASSERT(m_pEventHandler != NULL);
- m_pEventHandler->OnDoc_WillSave(pDoc);
+void CJS_Context::OnDoc_WillSave(CPDFSDK_Document* pDoc) {
+ ASSERT(m_pEventHandler != NULL);
+ m_pEventHandler->OnDoc_WillSave(pDoc);
}
-void CJS_Context::OnDoc_DidSave(CPDFSDK_Document* pDoc)
-{
- ASSERT(m_pEventHandler != NULL);
- m_pEventHandler->OnDoc_DidSave(pDoc);
+void CJS_Context::OnDoc_DidSave(CPDFSDK_Document* pDoc) {
+ ASSERT(m_pEventHandler != NULL);
+ m_pEventHandler->OnDoc_DidSave(pDoc);
}
-void CJS_Context::OnDoc_WillClose(CPDFSDK_Document* pDoc)
-{
- ASSERT(m_pEventHandler != NULL);
- m_pEventHandler->OnDoc_WillClose(pDoc);
+void CJS_Context::OnDoc_WillClose(CPDFSDK_Document* pDoc) {
+ ASSERT(m_pEventHandler != NULL);
+ m_pEventHandler->OnDoc_WillClose(pDoc);
}
-void CJS_Context::OnPage_Open(CPDFSDK_Document* pTarget)
-{
- ASSERT(m_pEventHandler != NULL);
- m_pEventHandler->OnPage_Open(pTarget);
+void CJS_Context::OnPage_Open(CPDFSDK_Document* pTarget) {
+ ASSERT(m_pEventHandler != NULL);
+ m_pEventHandler->OnPage_Open(pTarget);
}
-void CJS_Context::OnPage_Close(CPDFSDK_Document* pTarget)
-{
- ASSERT(m_pEventHandler != NULL);
- m_pEventHandler->OnPage_Close(pTarget);
+void CJS_Context::OnPage_Close(CPDFSDK_Document* pTarget) {
+ ASSERT(m_pEventHandler != NULL);
+ m_pEventHandler->OnPage_Close(pTarget);
}
-void CJS_Context::OnPage_InView(CPDFSDK_Document* pTarget)
-{
- ASSERT(m_pEventHandler != NULL);
- m_pEventHandler->OnPage_InView(pTarget);
+void CJS_Context::OnPage_InView(CPDFSDK_Document* pTarget) {
+ ASSERT(m_pEventHandler != NULL);
+ m_pEventHandler->OnPage_InView(pTarget);
}
-void CJS_Context::OnPage_OutView(CPDFSDK_Document* pTarget)
-{
- ASSERT(m_pEventHandler != NULL);
- m_pEventHandler->OnPage_OutView(pTarget);
+void CJS_Context::OnPage_OutView(CPDFSDK_Document* pTarget) {
+ ASSERT(m_pEventHandler != NULL);
+ m_pEventHandler->OnPage_OutView(pTarget);
}
-void CJS_Context::OnField_MouseDown(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField *pTarget)
-{
- ASSERT(m_pEventHandler != NULL);
- m_pEventHandler->OnField_MouseDown(bModifier, bShift, pTarget);
+void CJS_Context::OnField_MouseDown(FX_BOOL bModifier,
+ FX_BOOL bShift,
+ CPDF_FormField* pTarget) {
+ ASSERT(m_pEventHandler != NULL);
+ m_pEventHandler->OnField_MouseDown(bModifier, bShift, pTarget);
}
-void CJS_Context::OnField_MouseEnter(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField *pTarget)
-{
- ASSERT(m_pEventHandler != NULL);
- m_pEventHandler->OnField_MouseEnter(bModifier, bShift, pTarget);
+void CJS_Context::OnField_MouseEnter(FX_BOOL bModifier,
+ FX_BOOL bShift,
+ CPDF_FormField* pTarget) {
+ ASSERT(m_pEventHandler != NULL);
+ m_pEventHandler->OnField_MouseEnter(bModifier, bShift, pTarget);
}
-void CJS_Context::OnField_MouseExit(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField *pTarget)
-{
- ASSERT(m_pEventHandler != NULL);
- m_pEventHandler->OnField_MouseExit(bModifier, bShift, pTarget);
+void CJS_Context::OnField_MouseExit(FX_BOOL bModifier,
+ FX_BOOL bShift,
+ CPDF_FormField* pTarget) {
+ ASSERT(m_pEventHandler != NULL);
+ m_pEventHandler->OnField_MouseExit(bModifier, bShift, pTarget);
}
-void CJS_Context::OnField_MouseUp(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField *pTarget)
-{
- ASSERT(m_pEventHandler != NULL);
- m_pEventHandler->OnField_MouseUp(bModifier, bShift, pTarget);
+void CJS_Context::OnField_MouseUp(FX_BOOL bModifier,
+ FX_BOOL bShift,
+ CPDF_FormField* pTarget) {
+ ASSERT(m_pEventHandler != NULL);
+ m_pEventHandler->OnField_MouseUp(bModifier, bShift, pTarget);
}
-void CJS_Context::OnField_Focus(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField* pTarget, const CFX_WideString& Value)
-{
- ASSERT(m_pEventHandler != NULL);
- m_pEventHandler->OnField_Focus(bModifier, bShift, pTarget, Value);
+void CJS_Context::OnField_Focus(FX_BOOL bModifier,
+ FX_BOOL bShift,
+ CPDF_FormField* pTarget,
+ const CFX_WideString& Value) {
+ ASSERT(m_pEventHandler != NULL);
+ m_pEventHandler->OnField_Focus(bModifier, bShift, pTarget, Value);
}
-void CJS_Context::OnField_Blur(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField* pTarget, const CFX_WideString& Value)
-{
- ASSERT(m_pEventHandler != NULL);
- m_pEventHandler->OnField_Blur(bModifier, bShift, pTarget, Value);
+void CJS_Context::OnField_Blur(FX_BOOL bModifier,
+ FX_BOOL bShift,
+ CPDF_FormField* pTarget,
+ const CFX_WideString& Value) {
+ ASSERT(m_pEventHandler != NULL);
+ m_pEventHandler->OnField_Blur(bModifier, bShift, pTarget, Value);
}
-void CJS_Context::OnField_Calculate(CPDF_FormField* pSource, CPDF_FormField* pTarget, CFX_WideString& Value, FX_BOOL& bRc)
-{
- ASSERT(m_pEventHandler != NULL);
- m_pEventHandler->OnField_Calculate(pSource, pTarget, Value, bRc);
+void CJS_Context::OnField_Calculate(CPDF_FormField* pSource,
+ CPDF_FormField* pTarget,
+ CFX_WideString& Value,
+ FX_BOOL& bRc) {
+ ASSERT(m_pEventHandler != NULL);
+ m_pEventHandler->OnField_Calculate(pSource, pTarget, Value, bRc);
}
-void CJS_Context::OnField_Format(CPDF_FormField* pTarget, CFX_WideString& Value, FX_BOOL bWillCommit)
-{
- m_pEventHandler->OnField_Format(pTarget, Value, bWillCommit);
+void CJS_Context::OnField_Format(CPDF_FormField* pTarget,
+ CFX_WideString& Value,
+ FX_BOOL bWillCommit) {
+ m_pEventHandler->OnField_Format(pTarget, Value, bWillCommit);
}
-
-void CJS_Context::OnField_Keystroke(CFX_WideString& strChange, const CFX_WideString& strChangeEx,
- FX_BOOL bKeyDown, FX_BOOL bModifier, int &nSelEnd,int &nSelStart,
- FX_BOOL bShift, CPDF_FormField* pTarget, CFX_WideString& Value,
- FX_BOOL bWillCommit, FX_BOOL bFieldFull, FX_BOOL& bRc)
-{
- m_pEventHandler->OnField_Keystroke(
- strChange, strChangeEx, bKeyDown, bModifier, nSelEnd, nSelStart,
- bShift, pTarget, Value, bWillCommit, bFieldFull, bRc);
+void CJS_Context::OnField_Keystroke(CFX_WideString& strChange,
+ const CFX_WideString& strChangeEx,
+ FX_BOOL bKeyDown,
+ FX_BOOL bModifier,
+ int& nSelEnd,
+ int& nSelStart,
+ FX_BOOL bShift,
+ CPDF_FormField* pTarget,
+ CFX_WideString& Value,
+ FX_BOOL bWillCommit,
+ FX_BOOL bFieldFull,
+ FX_BOOL& bRc) {
+ m_pEventHandler->OnField_Keystroke(
+ strChange, strChangeEx, bKeyDown, bModifier, nSelEnd, nSelStart, bShift,
+ pTarget, Value, bWillCommit, bFieldFull, bRc);
}
-void CJS_Context::OnField_Validate(CFX_WideString& strChange,const CFX_WideString& strChangeEx,
- FX_BOOL bKeyDown, FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField* pTarget,
- CFX_WideString& Value, FX_BOOL& bRc)
-{
- ASSERT(m_pEventHandler != NULL);
- m_pEventHandler->OnField_Validate(strChange, strChangeEx, bKeyDown, bModifier, bShift, pTarget, Value, bRc);
+void CJS_Context::OnField_Validate(CFX_WideString& strChange,
+ const CFX_WideString& strChangeEx,
+ FX_BOOL bKeyDown,
+ FX_BOOL bModifier,
+ FX_BOOL bShift,
+ CPDF_FormField* pTarget,
+ CFX_WideString& Value,
+ FX_BOOL& bRc) {
+ ASSERT(m_pEventHandler != NULL);
+ m_pEventHandler->OnField_Validate(strChange, strChangeEx, bKeyDown, bModifier,
+ bShift, pTarget, Value, bRc);
}
-void CJS_Context::OnScreen_Focus(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen)
-{
- ASSERT(m_pEventHandler != NULL);
- m_pEventHandler->OnScreen_Focus(bModifier, bShift, pScreen);
+void CJS_Context::OnScreen_Focus(FX_BOOL bModifier,
+ FX_BOOL bShift,
+ CPDFSDK_Annot* pScreen) {
+ ASSERT(m_pEventHandler != NULL);
+ m_pEventHandler->OnScreen_Focus(bModifier, bShift, pScreen);
}
-void CJS_Context::OnScreen_Blur(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen)
-{
- ASSERT(m_pEventHandler != NULL);
- m_pEventHandler->OnScreen_Blur(bModifier, bShift, pScreen);
+void CJS_Context::OnScreen_Blur(FX_BOOL bModifier,
+ FX_BOOL bShift,
+ CPDFSDK_Annot* pScreen) {
+ ASSERT(m_pEventHandler != NULL);
+ m_pEventHandler->OnScreen_Blur(bModifier, bShift, pScreen);
}
-void CJS_Context::OnScreen_Open(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen)
-{
- ASSERT(m_pEventHandler != NULL);
- m_pEventHandler->OnScreen_Open(bModifier, bShift, pScreen);
+void CJS_Context::OnScreen_Open(FX_BOOL bModifier,
+ FX_BOOL bShift,
+ CPDFSDK_Annot* pScreen) {
+ ASSERT(m_pEventHandler != NULL);
+ m_pEventHandler->OnScreen_Open(bModifier, bShift, pScreen);
}
-void CJS_Context::OnScreen_Close(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen)
-{
- ASSERT(m_pEventHandler != NULL);
- m_pEventHandler->OnScreen_Close(bModifier, bShift, pScreen);
+void CJS_Context::OnScreen_Close(FX_BOOL bModifier,
+ FX_BOOL bShift,
+ CPDFSDK_Annot* pScreen) {
+ ASSERT(m_pEventHandler != NULL);
+ m_pEventHandler->OnScreen_Close(bModifier, bShift, pScreen);
}
-void CJS_Context::OnScreen_MouseDown(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen)
-{
- ASSERT(m_pEventHandler != NULL);
- m_pEventHandler->OnScreen_MouseDown(bModifier, bShift, pScreen);
+void CJS_Context::OnScreen_MouseDown(FX_BOOL bModifier,
+ FX_BOOL bShift,
+ CPDFSDK_Annot* pScreen) {
+ ASSERT(m_pEventHandler != NULL);
+ m_pEventHandler->OnScreen_MouseDown(bModifier, bShift, pScreen);
}
-void CJS_Context::OnScreen_MouseUp(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen)
-{
- ASSERT(m_pEventHandler != NULL);
- m_pEventHandler->OnScreen_MouseUp(bModifier, bShift, pScreen);
+void CJS_Context::OnScreen_MouseUp(FX_BOOL bModifier,
+ FX_BOOL bShift,
+ CPDFSDK_Annot* pScreen) {
+ ASSERT(m_pEventHandler != NULL);
+ m_pEventHandler->OnScreen_MouseUp(bModifier, bShift, pScreen);
}
-void CJS_Context::OnScreen_MouseEnter(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen)
-{
- ASSERT(m_pEventHandler != NULL);
- m_pEventHandler->OnScreen_MouseEnter(bModifier, bShift, pScreen);
+void CJS_Context::OnScreen_MouseEnter(FX_BOOL bModifier,
+ FX_BOOL bShift,
+ CPDFSDK_Annot* pScreen) {
+ ASSERT(m_pEventHandler != NULL);
+ m_pEventHandler->OnScreen_MouseEnter(bModifier, bShift, pScreen);
}
-void CJS_Context::OnScreen_MouseExit(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen)
-{
- ASSERT(m_pEventHandler != NULL);
- m_pEventHandler->OnScreen_MouseExit(bModifier, bShift, pScreen);
+void CJS_Context::OnScreen_MouseExit(FX_BOOL bModifier,
+ FX_BOOL bShift,
+ CPDFSDK_Annot* pScreen) {
+ ASSERT(m_pEventHandler != NULL);
+ m_pEventHandler->OnScreen_MouseExit(bModifier, bShift, pScreen);
}
-void CJS_Context::OnScreen_InView(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen)
-{
- ASSERT(m_pEventHandler != NULL);
- m_pEventHandler->OnScreen_InView(bModifier, bShift, pScreen);
+void CJS_Context::OnScreen_InView(FX_BOOL bModifier,
+ FX_BOOL bShift,
+ CPDFSDK_Annot* pScreen) {
+ ASSERT(m_pEventHandler != NULL);
+ m_pEventHandler->OnScreen_InView(bModifier, bShift, pScreen);
}
-void CJS_Context::OnScreen_OutView(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen)
-{
- ASSERT(m_pEventHandler != NULL);
- m_pEventHandler->OnScreen_OutView(bModifier, bShift, pScreen);
+void CJS_Context::OnScreen_OutView(FX_BOOL bModifier,
+ FX_BOOL bShift,
+ CPDFSDK_Annot* pScreen) {
+ ASSERT(m_pEventHandler != NULL);
+ m_pEventHandler->OnScreen_OutView(bModifier, bShift, pScreen);
}
-void CJS_Context::OnBookmark_MouseUp(CPDF_Bookmark* pBookMark)
-{
- ASSERT(m_pEventHandler != NULL);
- m_pEventHandler->OnBookmark_MouseUp(pBookMark);
+void CJS_Context::OnBookmark_MouseUp(CPDF_Bookmark* pBookMark) {
+ ASSERT(m_pEventHandler != NULL);
+ m_pEventHandler->OnBookmark_MouseUp(pBookMark);
}
-void CJS_Context::OnLink_MouseUp(CPDFSDK_Document* pTarget)
-{
- ASSERT(m_pEventHandler != NULL);
- m_pEventHandler->OnLink_MouseUp(pTarget);
+void CJS_Context::OnLink_MouseUp(CPDFSDK_Document* pTarget) {
+ ASSERT(m_pEventHandler != NULL);
+ m_pEventHandler->OnLink_MouseUp(pTarget);
}
-void CJS_Context::OnConsole_Exec()
-{
- ASSERT(m_pEventHandler != NULL);
- m_pEventHandler->OnConsole_Exec();
+void CJS_Context::OnConsole_Exec() {
+ ASSERT(m_pEventHandler != NULL);
+ m_pEventHandler->OnConsole_Exec();
}
-void CJS_Context::OnExternal_Exec()
-{
- ASSERT(m_pEventHandler != NULL);
- m_pEventHandler->OnExternal_Exec();
+void CJS_Context::OnExternal_Exec() {
+ ASSERT(m_pEventHandler != NULL);
+ m_pEventHandler->OnExternal_Exec();
}
-void CJS_Context::OnBatchExec(CPDFSDK_Document* pTarget)
-{
- ASSERT(m_pEventHandler != NULL);
- m_pEventHandler->OnBatchExec(pTarget);
+void CJS_Context::OnBatchExec(CPDFSDK_Document* pTarget) {
+ ASSERT(m_pEventHandler != NULL);
+ m_pEventHandler->OnBatchExec(pTarget);
}
-void CJS_Context::OnMenu_Exec(CPDFSDK_Document* pTarget,const CFX_WideString& strTargetName)
-{
- ASSERT(m_pEventHandler != NULL);
- m_pEventHandler->OnMenu_Exec(pTarget, strTargetName);
+void CJS_Context::OnMenu_Exec(CPDFSDK_Document* pTarget,
+ const CFX_WideString& strTargetName) {
+ ASSERT(m_pEventHandler != NULL);
+ m_pEventHandler->OnMenu_Exec(pTarget, strTargetName);
}
-
diff --git a/fpdfsdk/src/javascript/JS_EventHandler.cpp b/fpdfsdk/src/javascript/JS_EventHandler.cpp
index 1769e3053f..1eee92ddc1 100644
--- a/fpdfsdk/src/javascript/JS_EventHandler.cpp
+++ b/fpdfsdk/src/javascript/JS_EventHandler.cpp
@@ -17,511 +17,536 @@
/* ---------------------------- CJS_EventHandler ---------------------------- */
-CJS_EventHandler::CJS_EventHandler(CJS_Context * pContext) :
- m_pJSContext(pContext),
- m_eEventType(JET_UNKNOWN),
- m_bValid(FALSE),
- m_pWideStrChange(NULL),
- m_nCommitKey(-1),
- m_bKeyDown(FALSE),
- m_bModifier(FALSE),
- m_bShift(FALSE),
- m_pISelEnd(NULL),
- m_nSelEndDu(0),
- m_pISelStart(NULL),
- m_nSelStartDu(0),
- m_bWillCommit(FALSE),
- m_pValue(NULL),
- m_bFieldFull(FALSE),
- m_pbRc(NULL),
- m_bRcDu(FALSE),
- m_pSourceDoc(NULL),
- m_pTargetBookMark(NULL),
- m_pTargetDoc(NULL),
- m_pTargetAnnot(NULL)
-{
-}
+CJS_EventHandler::CJS_EventHandler(CJS_Context* pContext)
+ : m_pJSContext(pContext),
+ m_eEventType(JET_UNKNOWN),
+ m_bValid(FALSE),
+ m_pWideStrChange(NULL),
+ m_nCommitKey(-1),
+ m_bKeyDown(FALSE),
+ m_bModifier(FALSE),
+ m_bShift(FALSE),
+ m_pISelEnd(NULL),
+ m_nSelEndDu(0),
+ m_pISelStart(NULL),
+ m_nSelStartDu(0),
+ m_bWillCommit(FALSE),
+ m_pValue(NULL),
+ m_bFieldFull(FALSE),
+ m_pbRc(NULL),
+ m_bRcDu(FALSE),
+ m_pSourceDoc(NULL),
+ m_pTargetBookMark(NULL),
+ m_pTargetDoc(NULL),
+ m_pTargetAnnot(NULL) {}
-CJS_EventHandler::~CJS_EventHandler()
-{
-}
+CJS_EventHandler::~CJS_EventHandler() {}
-void CJS_EventHandler::OnApp_Init()
-{
- Initial(JET_APP_INIT);
+void CJS_EventHandler::OnApp_Init() {
+ Initial(JET_APP_INIT);
}
-void CJS_EventHandler::OnDoc_Open(CPDFSDK_Document* pDoc, const CFX_WideString& strTargetName)
-{
- Initial(JET_DOC_OPEN);
+void CJS_EventHandler::OnDoc_Open(CPDFSDK_Document* pDoc,
+ const CFX_WideString& strTargetName) {
+ Initial(JET_DOC_OPEN);
- m_pTargetDoc = pDoc;
- m_strTargetName = strTargetName;
+ m_pTargetDoc = pDoc;
+ m_strTargetName = strTargetName;
}
-void CJS_EventHandler::OnDoc_WillPrint(CPDFSDK_Document* pDoc)
-{
- Initial(JET_DOC_WILLPRINT);
+void CJS_EventHandler::OnDoc_WillPrint(CPDFSDK_Document* pDoc) {
+ Initial(JET_DOC_WILLPRINT);
- m_pTargetDoc = pDoc;
+ m_pTargetDoc = pDoc;
}
-void CJS_EventHandler::OnDoc_DidPrint(CPDFSDK_Document* pDoc)
-{
- Initial(JET_DOC_DIDPRINT);
+void CJS_EventHandler::OnDoc_DidPrint(CPDFSDK_Document* pDoc) {
+ Initial(JET_DOC_DIDPRINT);
- m_pTargetDoc = pDoc;
+ m_pTargetDoc = pDoc;
}
-void CJS_EventHandler::OnDoc_WillSave(CPDFSDK_Document* pDoc)
-{
- Initial(JET_DOC_WILLSAVE);
- m_pTargetDoc = pDoc;
+void CJS_EventHandler::OnDoc_WillSave(CPDFSDK_Document* pDoc) {
+ Initial(JET_DOC_WILLSAVE);
+ m_pTargetDoc = pDoc;
}
-void CJS_EventHandler::OnDoc_DidSave(CPDFSDK_Document* pDoc)
-{
- Initial(JET_DOC_DIDSAVE);
+void CJS_EventHandler::OnDoc_DidSave(CPDFSDK_Document* pDoc) {
+ Initial(JET_DOC_DIDSAVE);
- m_pTargetDoc = pDoc;
+ m_pTargetDoc = pDoc;
}
-void CJS_EventHandler::OnDoc_WillClose(CPDFSDK_Document* pDoc)
-{
- Initial(JET_DOC_WILLCLOSE);
+void CJS_EventHandler::OnDoc_WillClose(CPDFSDK_Document* pDoc) {
+ Initial(JET_DOC_WILLCLOSE);
- m_pTargetDoc = pDoc;
+ m_pTargetDoc = pDoc;
}
-void CJS_EventHandler::OnPage_Open(CPDFSDK_Document* pDoc)
-{
- Initial(JET_PAGE_OPEN);
+void CJS_EventHandler::OnPage_Open(CPDFSDK_Document* pDoc) {
+ Initial(JET_PAGE_OPEN);
- m_pTargetDoc = pDoc;
+ m_pTargetDoc = pDoc;
}
-void CJS_EventHandler::OnPage_Close(CPDFSDK_Document* pDoc)
-{
- Initial(JET_PAGE_CLOSE);
+void CJS_EventHandler::OnPage_Close(CPDFSDK_Document* pDoc) {
+ Initial(JET_PAGE_CLOSE);
- m_pTargetDoc = pDoc;
+ m_pTargetDoc = pDoc;
}
-void CJS_EventHandler::OnPage_InView(CPDFSDK_Document* pDoc)
-{
- Initial(JET_PAGE_INVIEW);
+void CJS_EventHandler::OnPage_InView(CPDFSDK_Document* pDoc) {
+ Initial(JET_PAGE_INVIEW);
- m_pTargetDoc = pDoc;
+ m_pTargetDoc = pDoc;
}
-void CJS_EventHandler::OnPage_OutView(CPDFSDK_Document* pDoc)
-{
- Initial(JET_PAGE_OUTVIEW);
+void CJS_EventHandler::OnPage_OutView(CPDFSDK_Document* pDoc) {
+ Initial(JET_PAGE_OUTVIEW);
- m_pTargetDoc = pDoc;
+ m_pTargetDoc = pDoc;
}
-void CJS_EventHandler::OnField_MouseEnter(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField* pTarget)
-{
- Initial(JET_FIELD_MOUSEENTER);
+void CJS_EventHandler::OnField_MouseEnter(FX_BOOL bModifier,
+ FX_BOOL bShift,
+ CPDF_FormField* pTarget) {
+ Initial(JET_FIELD_MOUSEENTER);
- m_bModifier = bModifier;
- m_bShift = bShift;
+ m_bModifier = bModifier;
+ m_bShift = bShift;
- ASSERT(pTarget != NULL);
- m_strTargetName = pTarget->GetFullName();
+ ASSERT(pTarget != NULL);
+ m_strTargetName = pTarget->GetFullName();
}
-void CJS_EventHandler::OnField_MouseExit(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField* pTarget)
-{
- Initial(JET_FIELD_MOUSEEXIT);
+void CJS_EventHandler::OnField_MouseExit(FX_BOOL bModifier,
+ FX_BOOL bShift,
+ CPDF_FormField* pTarget) {
+ Initial(JET_FIELD_MOUSEEXIT);
- m_bModifier = bModifier;
- m_bShift = bShift;
- ASSERT(pTarget != NULL);
- m_strTargetName = pTarget->GetFullName();
+ m_bModifier = bModifier;
+ m_bShift = bShift;
+ ASSERT(pTarget != NULL);
+ m_strTargetName = pTarget->GetFullName();
}
-void CJS_EventHandler::OnField_MouseDown(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField* pTarget)
-{
- Initial(JET_FIELD_MOUSEDOWN);
- m_eEventType = JET_FIELD_MOUSEDOWN;
+void CJS_EventHandler::OnField_MouseDown(FX_BOOL bModifier,
+ FX_BOOL bShift,
+ CPDF_FormField* pTarget) {
+ Initial(JET_FIELD_MOUSEDOWN);
+ m_eEventType = JET_FIELD_MOUSEDOWN;
- m_bModifier = bModifier;
- m_bShift = bShift;
- ASSERT(pTarget != NULL);
- m_strTargetName = pTarget->GetFullName();
+ m_bModifier = bModifier;
+ m_bShift = bShift;
+ ASSERT(pTarget != NULL);
+ m_strTargetName = pTarget->GetFullName();
}
-void CJS_EventHandler::OnField_MouseUp(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField* pTarget)
-{
- Initial(JET_FIELD_MOUSEUP);
+void CJS_EventHandler::OnField_MouseUp(FX_BOOL bModifier,
+ FX_BOOL bShift,
+ CPDF_FormField* pTarget) {
+ Initial(JET_FIELD_MOUSEUP);
- m_bModifier = bModifier;
- m_bShift = bShift;
- ASSERT(pTarget != NULL);
- m_strTargetName = pTarget->GetFullName();
+ m_bModifier = bModifier;
+ m_bShift = bShift;
+ ASSERT(pTarget != NULL);
+ m_strTargetName = pTarget->GetFullName();
}
-void CJS_EventHandler::OnField_Focus(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField* pTarget,
- const CFX_WideString& Value)
-{
- Initial(JET_FIELD_FOCUS);
+void CJS_EventHandler::OnField_Focus(FX_BOOL bModifier,
+ FX_BOOL bShift,
+ CPDF_FormField* pTarget,
+ const CFX_WideString& Value) {
+ Initial(JET_FIELD_FOCUS);
- m_bModifier = bModifier;
- m_bShift = bShift;
- ASSERT(pTarget != NULL);
- m_strTargetName = pTarget->GetFullName();
- m_pValue = (CFX_WideString*)&Value;
+ m_bModifier = bModifier;
+ m_bShift = bShift;
+ ASSERT(pTarget != NULL);
+ m_strTargetName = pTarget->GetFullName();
+ m_pValue = (CFX_WideString*)&Value;
}
-void CJS_EventHandler::OnField_Blur(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField* pTarget,
- const CFX_WideString& Value)
-{
- Initial(JET_FIELD_BLUR);
+void CJS_EventHandler::OnField_Blur(FX_BOOL bModifier,
+ FX_BOOL bShift,
+ CPDF_FormField* pTarget,
+ const CFX_WideString& Value) {
+ Initial(JET_FIELD_BLUR);
- m_bModifier = bModifier;
- m_bShift = bShift;
- ASSERT(pTarget != NULL);
- m_strTargetName = pTarget->GetFullName();
- m_pValue = (CFX_WideString*)&Value;
+ m_bModifier = bModifier;
+ m_bShift = bShift;
+ ASSERT(pTarget != NULL);
+ m_strTargetName = pTarget->GetFullName();
+ m_pValue = (CFX_WideString*)&Value;
}
-void CJS_EventHandler::OnField_Keystroke(CFX_WideString &strChange,
- const CFX_WideString& strChangeEx, FX_BOOL KeyDown,
- FX_BOOL bModifier, int& nSelEnd, int& nSelStart,
- FX_BOOL bShift, CPDF_FormField* pTarget,
- CFX_WideString& Value, FX_BOOL bWillCommit,
- FX_BOOL bFieldFull, FX_BOOL& bRc)
-{
- Initial(JET_FIELD_KEYSTROKE);
-
- m_nCommitKey = 0;
- m_pWideStrChange = &strChange;
- m_WideStrChangeEx = strChangeEx;
- m_bKeyDown = KeyDown;
- m_bModifier = bModifier;
- m_pISelEnd = &nSelEnd;
- m_pISelStart = &nSelStart;
- m_bShift = bShift;
- ASSERT(pTarget != NULL);
- m_strTargetName = pTarget->GetFullName();
- m_pValue = &Value;
- m_bWillCommit = bWillCommit;
- m_pbRc = &bRc;
- m_bFieldFull = bFieldFull;
-}
-
-void CJS_EventHandler::OnField_Validate(CFX_WideString& strChange, const CFX_WideString& strChangeEx,
- FX_BOOL bKeyDown, FX_BOOL bModifier, FX_BOOL bShift,
- CPDF_FormField* pTarget, CFX_WideString& Value, FX_BOOL& bRc)
-{
- Initial(JET_FIELD_VALIDATE);
-
- m_pWideStrChange = &strChange;
- m_WideStrChangeEx = strChangeEx;
- m_bKeyDown = bKeyDown;
- m_bModifier = bModifier;
- m_bShift = bShift;
- ASSERT(pTarget != NULL);
- m_strTargetName = pTarget->GetFullName();
- m_pValue = &Value;
- m_pbRc = &bRc;
-}
-
-void CJS_EventHandler::OnField_Calculate(CPDF_FormField* pSource, CPDF_FormField* pTarget,
- CFX_WideString& Value, FX_BOOL& bRc)
-{
- Initial(JET_FIELD_CALCULATE);
-
- if (pSource)
- m_strSourceName = pSource->GetFullName();
- ASSERT(pTarget != NULL);
- m_strTargetName = pTarget->GetFullName();
- m_pValue = &Value;
- m_pbRc = &bRc;
+void CJS_EventHandler::OnField_Keystroke(CFX_WideString& strChange,
+ const CFX_WideString& strChangeEx,
+ FX_BOOL KeyDown,
+ FX_BOOL bModifier,
+ int& nSelEnd,
+ int& nSelStart,
+ FX_BOOL bShift,
+ CPDF_FormField* pTarget,
+ CFX_WideString& Value,
+ FX_BOOL bWillCommit,
+ FX_BOOL bFieldFull,
+ FX_BOOL& bRc) {
+ Initial(JET_FIELD_KEYSTROKE);
+
+ m_nCommitKey = 0;
+ m_pWideStrChange = &strChange;
+ m_WideStrChangeEx = strChangeEx;
+ m_bKeyDown = KeyDown;
+ m_bModifier = bModifier;
+ m_pISelEnd = &nSelEnd;
+ m_pISelStart = &nSelStart;
+ m_bShift = bShift;
+ ASSERT(pTarget != NULL);
+ m_strTargetName = pTarget->GetFullName();
+ m_pValue = &Value;
+ m_bWillCommit = bWillCommit;
+ m_pbRc = &bRc;
+ m_bFieldFull = bFieldFull;
+}
+
+void CJS_EventHandler::OnField_Validate(CFX_WideString& strChange,
+ const CFX_WideString& strChangeEx,
+ FX_BOOL bKeyDown,
+ FX_BOOL bModifier,
+ FX_BOOL bShift,
+ CPDF_FormField* pTarget,
+ CFX_WideString& Value,
+ FX_BOOL& bRc) {
+ Initial(JET_FIELD_VALIDATE);
+
+ m_pWideStrChange = &strChange;
+ m_WideStrChangeEx = strChangeEx;
+ m_bKeyDown = bKeyDown;
+ m_bModifier = bModifier;
+ m_bShift = bShift;
+ ASSERT(pTarget != NULL);
+ m_strTargetName = pTarget->GetFullName();
+ m_pValue = &Value;
+ m_pbRc = &bRc;
+}
+
+void CJS_EventHandler::OnField_Calculate(CPDF_FormField* pSource,
+ CPDF_FormField* pTarget,
+ CFX_WideString& Value,
+ FX_BOOL& bRc) {
+ Initial(JET_FIELD_CALCULATE);
+
+ if (pSource)
+ m_strSourceName = pSource->GetFullName();
+ ASSERT(pTarget != NULL);
+ m_strTargetName = pTarget->GetFullName();
+ m_pValue = &Value;
+ m_pbRc = &bRc;
}
void CJS_EventHandler::OnField_Format(CPDF_FormField* pTarget,
CFX_WideString& Value,
- FX_BOOL bWillCommit)
-{
- Initial(JET_FIELD_FORMAT);
+ FX_BOOL bWillCommit) {
+ Initial(JET_FIELD_FORMAT);
- m_nCommitKey = 0;
- ASSERT(pTarget != NULL);
- m_strTargetName = pTarget->GetFullName();
- m_pValue = &Value;
- m_bWillCommit = bWillCommit;
+ m_nCommitKey = 0;
+ ASSERT(pTarget != NULL);
+ m_strTargetName = pTarget->GetFullName();
+ m_pValue = &Value;
+ m_bWillCommit = bWillCommit;
}
-void CJS_EventHandler::OnScreen_Focus(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen)
-{
- Initial(JET_SCREEN_FOCUS);
+void CJS_EventHandler::OnScreen_Focus(FX_BOOL bModifier,
+ FX_BOOL bShift,
+ CPDFSDK_Annot* pScreen) {
+ Initial(JET_SCREEN_FOCUS);
- m_bModifier = bModifier;
- m_bShift = bShift;
- m_pTargetAnnot = pScreen;
+ m_bModifier = bModifier;
+ m_bShift = bShift;
+ m_pTargetAnnot = pScreen;
}
-void CJS_EventHandler::OnScreen_Blur(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen)
-{
- Initial(JET_SCREEN_BLUR);
+void CJS_EventHandler::OnScreen_Blur(FX_BOOL bModifier,
+ FX_BOOL bShift,
+ CPDFSDK_Annot* pScreen) {
+ Initial(JET_SCREEN_BLUR);
- m_bModifier = bModifier;
- m_bShift = bShift;
- m_pTargetAnnot = pScreen;
+ m_bModifier = bModifier;
+ m_bShift = bShift;
+ m_pTargetAnnot = pScreen;
}
-void CJS_EventHandler::OnScreen_Open(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen)
-{
- Initial(JET_SCREEN_OPEN);
+void CJS_EventHandler::OnScreen_Open(FX_BOOL bModifier,
+ FX_BOOL bShift,
+ CPDFSDK_Annot* pScreen) {
+ Initial(JET_SCREEN_OPEN);
- m_bModifier = bModifier;
- m_bShift = bShift;
- m_pTargetAnnot = pScreen;
+ m_bModifier = bModifier;
+ m_bShift = bShift;
+ m_pTargetAnnot = pScreen;
}
-void CJS_EventHandler::OnScreen_Close(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen)
-{
- Initial(JET_SCREEN_CLOSE);
+void CJS_EventHandler::OnScreen_Close(FX_BOOL bModifier,
+ FX_BOOL bShift,
+ CPDFSDK_Annot* pScreen) {
+ Initial(JET_SCREEN_CLOSE);
- m_bModifier = bModifier;
- m_bShift = bShift;
- m_pTargetAnnot = pScreen;
+ m_bModifier = bModifier;
+ m_bShift = bShift;
+ m_pTargetAnnot = pScreen;
}
-void CJS_EventHandler::OnScreen_MouseDown(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen)
-{
- Initial(JET_SCREEN_MOUSEDOWN);
+void CJS_EventHandler::OnScreen_MouseDown(FX_BOOL bModifier,
+ FX_BOOL bShift,
+ CPDFSDK_Annot* pScreen) {
+ Initial(JET_SCREEN_MOUSEDOWN);
- m_bModifier = bModifier;
- m_bShift = bShift;
- m_pTargetAnnot = pScreen;
+ m_bModifier = bModifier;
+ m_bShift = bShift;
+ m_pTargetAnnot = pScreen;
}
-void CJS_EventHandler::OnScreen_MouseUp(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen)
-{
- Initial(JET_SCREEN_MOUSEUP);
+void CJS_EventHandler::OnScreen_MouseUp(FX_BOOL bModifier,
+ FX_BOOL bShift,
+ CPDFSDK_Annot* pScreen) {
+ Initial(JET_SCREEN_MOUSEUP);
- m_bModifier = bModifier;
- m_bShift = bShift;
- m_pTargetAnnot = pScreen;
+ m_bModifier = bModifier;
+ m_bShift = bShift;
+ m_pTargetAnnot = pScreen;
}
-void CJS_EventHandler::OnScreen_MouseEnter(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen)
-{
- Initial(JET_SCREEN_MOUSEENTER);
+void CJS_EventHandler::OnScreen_MouseEnter(FX_BOOL bModifier,
+ FX_BOOL bShift,
+ CPDFSDK_Annot* pScreen) {
+ Initial(JET_SCREEN_MOUSEENTER);
- m_bModifier = bModifier;
- m_bShift = bShift;
- m_pTargetAnnot = pScreen;
+ m_bModifier = bModifier;
+ m_bShift = bShift;
+ m_pTargetAnnot = pScreen;
}
-void CJS_EventHandler::OnScreen_MouseExit(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen)
-{
- Initial(JET_SCREEN_MOUSEEXIT);
+void CJS_EventHandler::OnScreen_MouseExit(FX_BOOL bModifier,
+ FX_BOOL bShift,
+ CPDFSDK_Annot* pScreen) {
+ Initial(JET_SCREEN_MOUSEEXIT);
- m_bModifier = bModifier;
- m_bShift = bShift;
- m_pTargetAnnot = pScreen;
+ m_bModifier = bModifier;
+ m_bShift = bShift;
+ m_pTargetAnnot = pScreen;
}
-void CJS_EventHandler::OnScreen_InView(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen)
-{
- Initial(JET_SCREEN_INVIEW);
+void CJS_EventHandler::OnScreen_InView(FX_BOOL bModifier,
+ FX_BOOL bShift,
+ CPDFSDK_Annot* pScreen) {
+ Initial(JET_SCREEN_INVIEW);
- m_bModifier = bModifier;
- m_bShift = bShift;
- m_pTargetAnnot = pScreen;
+ m_bModifier = bModifier;
+ m_bShift = bShift;
+ m_pTargetAnnot = pScreen;
}
-void CJS_EventHandler::OnScreen_OutView(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen)
-{
- Initial(JET_SCREEN_OUTVIEW);
+void CJS_EventHandler::OnScreen_OutView(FX_BOOL bModifier,
+ FX_BOOL bShift,
+ CPDFSDK_Annot* pScreen) {
+ Initial(JET_SCREEN_OUTVIEW);
- m_bModifier = bModifier;
- m_bShift = bShift;
- m_pTargetAnnot = pScreen;
+ m_bModifier = bModifier;
+ m_bShift = bShift;
+ m_pTargetAnnot = pScreen;
}
-void CJS_EventHandler::OnLink_MouseUp(CPDFSDK_Document* pTarget)
-{
- Initial(JET_LINK_MOUSEUP);
+void CJS_EventHandler::OnLink_MouseUp(CPDFSDK_Document* pTarget) {
+ Initial(JET_LINK_MOUSEUP);
- m_pTargetDoc = pTarget;
+ m_pTargetDoc = pTarget;
}
-void CJS_EventHandler::OnBookmark_MouseUp(CPDF_Bookmark* pBookMark)
-{
- Initial(JET_BOOKMARK_MOUSEUP);
+void CJS_EventHandler::OnBookmark_MouseUp(CPDF_Bookmark* pBookMark) {
+ Initial(JET_BOOKMARK_MOUSEUP);
- m_pTargetBookMark = pBookMark;
+ m_pTargetBookMark = pBookMark;
}
-void CJS_EventHandler::OnMenu_Exec(CPDFSDK_Document* pTarget, const CFX_WideString& strTargetName)
-{
- Initial(JET_MENU_EXEC);
+void CJS_EventHandler::OnMenu_Exec(CPDFSDK_Document* pTarget,
+ const CFX_WideString& strTargetName) {
+ Initial(JET_MENU_EXEC);
- m_pTargetDoc = pTarget;
- m_strTargetName = strTargetName;
+ m_pTargetDoc = pTarget;
+ m_strTargetName = strTargetName;
}
-void CJS_EventHandler::OnExternal_Exec()
-{
- Initial(JET_EXTERNAL_EXEC);
+void CJS_EventHandler::OnExternal_Exec() {
+ Initial(JET_EXTERNAL_EXEC);
}
-void CJS_EventHandler::OnBatchExec(CPDFSDK_Document* pTarget)
-{
- Initial(JET_BATCH_EXEC);
+void CJS_EventHandler::OnBatchExec(CPDFSDK_Document* pTarget) {
+ Initial(JET_BATCH_EXEC);
- m_pTargetDoc = pTarget;
+ m_pTargetDoc = pTarget;
}
-void CJS_EventHandler::OnConsole_Exec()
-{
- Initial(JET_CONSOLE_EXEC);
+void CJS_EventHandler::OnConsole_Exec() {
+ Initial(JET_CONSOLE_EXEC);
}
+void CJS_EventHandler::Initial(JS_EVENT_T type) {
+ m_eEventType = type;
-void CJS_EventHandler::Initial(JS_EVENT_T type)
-{
- m_eEventType = type;
-
- m_strTargetName = L"";
- m_strSourceName = L"";
- m_pWideStrChange = NULL;
- m_WideStrChangeDu = L"";
- m_WideStrChangeEx = L"";
- m_nCommitKey = -1;
- m_bKeyDown = FALSE;
- m_bModifier = FALSE;
- m_bShift = FALSE;
- m_pISelEnd = NULL;
- m_nSelEndDu = 0;
- m_pISelStart = NULL;
- m_nSelStartDu = 0;
- m_bWillCommit = FALSE;
- m_pValue = NULL;
- m_bFieldFull = FALSE;
- m_pbRc = NULL;
- m_bRcDu = FALSE;
+ m_strTargetName = L"";
+ m_strSourceName = L"";
+ m_pWideStrChange = NULL;
+ m_WideStrChangeDu = L"";
+ m_WideStrChangeEx = L"";
+ m_nCommitKey = -1;
+ m_bKeyDown = FALSE;
+ m_bModifier = FALSE;
+ m_bShift = FALSE;
+ m_pISelEnd = NULL;
+ m_nSelEndDu = 0;
+ m_pISelStart = NULL;
+ m_nSelStartDu = 0;
+ m_bWillCommit = FALSE;
+ m_pValue = NULL;
+ m_bFieldFull = FALSE;
+ m_pbRc = NULL;
+ m_bRcDu = FALSE;
- m_pSourceDoc = NULL;
- m_pTargetBookMark = NULL;
- m_pTargetDoc = NULL;
- m_pTargetAnnot = NULL;
+ m_pSourceDoc = NULL;
+ m_pTargetBookMark = NULL;
+ m_pTargetDoc = NULL;
+ m_pTargetAnnot = NULL;
- m_bValid = TRUE;
+ m_bValid = TRUE;
}
-void CJS_EventHandler::Destroy()
-{
- m_bValid = FALSE;
+void CJS_EventHandler::Destroy() {
+ m_bValid = FALSE;
}
-FX_BOOL CJS_EventHandler::IsValid()
-{
- return m_bValid;
+FX_BOOL CJS_EventHandler::IsValid() {
+ return m_bValid;
}
-CFX_WideString & CJS_EventHandler::Change()
-{
- if (m_pWideStrChange) {
- return *m_pWideStrChange;
- }
- return m_WideStrChangeDu;
+CFX_WideString& CJS_EventHandler::Change() {
+ if (m_pWideStrChange) {
+ return *m_pWideStrChange;
+ }
+ return m_WideStrChangeDu;
}
-CFX_WideString CJS_EventHandler::ChangeEx()
-{
- return m_WideStrChangeEx;
+CFX_WideString CJS_EventHandler::ChangeEx() {
+ return m_WideStrChangeEx;
}
-int CJS_EventHandler::CommitKey()
-{
- return m_nCommitKey;
+int CJS_EventHandler::CommitKey() {
+ return m_nCommitKey;
}
-FX_BOOL CJS_EventHandler::FieldFull()
-{
- return m_bFieldFull;
+FX_BOOL CJS_EventHandler::FieldFull() {
+ return m_bFieldFull;
}
-FX_BOOL CJS_EventHandler::KeyDown()
-{
- return m_bKeyDown;
+FX_BOOL CJS_EventHandler::KeyDown() {
+ return m_bKeyDown;
}
-FX_BOOL CJS_EventHandler::Modifier()
-{
- return m_bModifier;
+FX_BOOL CJS_EventHandler::Modifier() {
+ return m_bModifier;
}
-const FX_WCHAR* CJS_EventHandler::Name()
-{
- switch (m_eEventType)
- {
- case JET_APP_INIT: return L"Init";
- case JET_BATCH_EXEC: return L"Exec";
- case JET_BOOKMARK_MOUSEUP: return L"Mouse Up";
- case JET_CONSOLE_EXEC: return L"Exec";
- case JET_DOC_DIDPRINT: return L"DidPrint";
- case JET_DOC_DIDSAVE: return L"DidSave";
- case JET_DOC_OPEN: return L"Open";
- case JET_DOC_WILLCLOSE: return L"WillClose";
- case JET_DOC_WILLPRINT: return L"WillPrint";
- case JET_DOC_WILLSAVE: return L"WillSave";
- case JET_EXTERNAL_EXEC: return L"Exec";
+const FX_WCHAR* CJS_EventHandler::Name() {
+ switch (m_eEventType) {
+ case JET_APP_INIT:
+ return L"Init";
+ case JET_BATCH_EXEC:
+ return L"Exec";
+ case JET_BOOKMARK_MOUSEUP:
+ return L"Mouse Up";
+ case JET_CONSOLE_EXEC:
+ return L"Exec";
+ case JET_DOC_DIDPRINT:
+ return L"DidPrint";
+ case JET_DOC_DIDSAVE:
+ return L"DidSave";
+ case JET_DOC_OPEN:
+ return L"Open";
+ case JET_DOC_WILLCLOSE:
+ return L"WillClose";
+ case JET_DOC_WILLPRINT:
+ return L"WillPrint";
+ case JET_DOC_WILLSAVE:
+ return L"WillSave";
+ case JET_EXTERNAL_EXEC:
+ return L"Exec";
case JET_FIELD_FOCUS:
- case JET_SCREEN_FOCUS: return L"Focus";
+ case JET_SCREEN_FOCUS:
+ return L"Focus";
case JET_FIELD_BLUR:
- case JET_SCREEN_BLUR: return L"Blur";
+ case JET_SCREEN_BLUR:
+ return L"Blur";
case JET_FIELD_MOUSEDOWN:
- case JET_SCREEN_MOUSEDOWN: return L"Mouse Down";
+ case JET_SCREEN_MOUSEDOWN:
+ return L"Mouse Down";
case JET_FIELD_MOUSEUP:
- case JET_SCREEN_MOUSEUP: return L"Mouse Up";
+ case JET_SCREEN_MOUSEUP:
+ return L"Mouse Up";
case JET_FIELD_MOUSEENTER:
- case JET_SCREEN_MOUSEENTER: return L"Mouse Enter";
+ case JET_SCREEN_MOUSEENTER:
+ return L"Mouse Enter";
case JET_FIELD_MOUSEEXIT:
- case JET_SCREEN_MOUSEEXIT: return L"Mouse Exit";
- case JET_FIELD_CALCULATE: return L"Calculate";
- case JET_FIELD_FORMAT: return L"Format";
- case JET_FIELD_KEYSTROKE: return L"Keystroke";
- case JET_FIELD_VALIDATE: return L"Validate";
- case JET_LINK_MOUSEUP: return L"Mouse Up";
- case JET_MENU_EXEC: return L"Exec";
+ case JET_SCREEN_MOUSEEXIT:
+ return L"Mouse Exit";
+ case JET_FIELD_CALCULATE:
+ return L"Calculate";
+ case JET_FIELD_FORMAT:
+ return L"Format";
+ case JET_FIELD_KEYSTROKE:
+ return L"Keystroke";
+ case JET_FIELD_VALIDATE:
+ return L"Validate";
+ case JET_LINK_MOUSEUP:
+ return L"Mouse Up";
+ case JET_MENU_EXEC:
+ return L"Exec";
case JET_PAGE_OPEN:
- case JET_SCREEN_OPEN: return L"Open";
+ case JET_SCREEN_OPEN:
+ return L"Open";
case JET_PAGE_CLOSE:
- case JET_SCREEN_CLOSE: return L"Close";
+ case JET_SCREEN_CLOSE:
+ return L"Close";
case JET_SCREEN_INVIEW:
- case JET_PAGE_INVIEW: return L"InView";
+ case JET_PAGE_INVIEW:
+ return L"InView";
case JET_PAGE_OUTVIEW:
- case JET_SCREEN_OUTVIEW: return L"OutView";
+ case JET_SCREEN_OUTVIEW:
+ return L"OutView";
default:
- return L"";
- }
-
- return L"";
-}
-
-const FX_WCHAR* CJS_EventHandler::Type()
-{
- switch (m_eEventType)
- {
- case JET_APP_INIT: return L"App";
- case JET_BATCH_EXEC: return L"Batch";
- case JET_BOOKMARK_MOUSEUP: return L"BookMark";
- case JET_CONSOLE_EXEC: return L"Console";
+ return L"";
+ }
+
+ return L"";
+}
+
+const FX_WCHAR* CJS_EventHandler::Type() {
+ switch (m_eEventType) {
+ case JET_APP_INIT:
+ return L"App";
+ case JET_BATCH_EXEC:
+ return L"Batch";
+ case JET_BOOKMARK_MOUSEUP:
+ return L"BookMark";
+ case JET_CONSOLE_EXEC:
+ return L"Console";
case JET_DOC_DIDPRINT:
case JET_DOC_DIDSAVE:
case JET_DOC_OPEN:
case JET_DOC_WILLCLOSE:
case JET_DOC_WILLPRINT:
- case JET_DOC_WILLSAVE: return L"Doc";
- case JET_EXTERNAL_EXEC: return L"External";
+ case JET_DOC_WILLSAVE:
+ return L"Doc";
+ case JET_EXTERNAL_EXEC:
+ return L"External";
case JET_FIELD_BLUR:
case JET_FIELD_FOCUS:
case JET_FIELD_MOUSEDOWN:
@@ -531,7 +556,8 @@ const FX_WCHAR* CJS_EventHandler::Type()
case JET_FIELD_CALCULATE:
case JET_FIELD_FORMAT:
case JET_FIELD_KEYSTROKE:
- case JET_FIELD_VALIDATE: return L"Field";
+ case JET_FIELD_VALIDATE:
+ return L"Field";
case JET_SCREEN_FOCUS:
case JET_SCREEN_BLUR:
case JET_SCREEN_OPEN:
@@ -541,124 +567,123 @@ const FX_WCHAR* CJS_EventHandler::Type()
case JET_SCREEN_MOUSEENTER:
case JET_SCREEN_MOUSEEXIT:
case JET_SCREEN_INVIEW:
- case JET_SCREEN_OUTVIEW: return L"Screen";
- case JET_LINK_MOUSEUP: return L"Link";
- case JET_MENU_EXEC: return L"Menu";
+ case JET_SCREEN_OUTVIEW:
+ return L"Screen";
+ case JET_LINK_MOUSEUP:
+ return L"Link";
+ case JET_MENU_EXEC:
+ return L"Menu";
case JET_PAGE_OPEN:
case JET_PAGE_CLOSE:
case JET_PAGE_INVIEW:
- case JET_PAGE_OUTVIEW:return L"Page";
+ case JET_PAGE_OUTVIEW:
+ return L"Page";
default:
- return L"";
- }
+ return L"";
+ }
- return L"";
+ return L"";
}
-FX_BOOL& CJS_EventHandler::Rc()
-{
- if (m_pbRc) {
- return *m_pbRc;
- }
- return m_bRcDu;
+FX_BOOL& CJS_EventHandler::Rc() {
+ if (m_pbRc) {
+ return *m_pbRc;
+ }
+ return m_bRcDu;
}
-int & CJS_EventHandler::SelEnd()
-{
- if (m_pISelEnd) {
- return *m_pISelEnd;
- }
- return m_nSelEndDu;
+int& CJS_EventHandler::SelEnd() {
+ if (m_pISelEnd) {
+ return *m_pISelEnd;
+ }
+ return m_nSelEndDu;
}
-int & CJS_EventHandler::SelStart()
-{
- if (m_pISelStart) {
- return *m_pISelStart;
- }
- return m_nSelStartDu;
+int& CJS_EventHandler::SelStart() {
+ if (m_pISelStart) {
+ return *m_pISelStart;
+ }
+ return m_nSelStartDu;
}
-FX_BOOL CJS_EventHandler::Shift()
-{
- return m_bShift;
+FX_BOOL CJS_EventHandler::Shift() {
+ return m_bShift;
}
-Field* CJS_EventHandler::Source()
-{
- ASSERT(m_pJSContext != NULL);
+Field* CJS_EventHandler::Source() {
+ ASSERT(m_pJSContext != NULL);
- CJS_Runtime* pRuntime = m_pJSContext->GetJSRuntime();
+ CJS_Runtime* pRuntime = m_pJSContext->GetJSRuntime();
- JSFXObject pDocObj = JS_NewFxDynamicObj(*pRuntime, m_pJSContext, JS_GetObjDefnID(*pRuntime, L"Document"));
- ASSERT(pDocObj.IsEmpty() == FALSE);
- JSFXObject pFieldObj = JS_NewFxDynamicObj(*pRuntime, m_pJSContext, JS_GetObjDefnID(*pRuntime, L"Field"));
- ASSERT(pFieldObj.IsEmpty() == FALSE);
+ JSFXObject pDocObj = JS_NewFxDynamicObj(
+ *pRuntime, m_pJSContext, JS_GetObjDefnID(*pRuntime, L"Document"));
+ ASSERT(pDocObj.IsEmpty() == FALSE);
+ JSFXObject pFieldObj = JS_NewFxDynamicObj(
+ *pRuntime, m_pJSContext, JS_GetObjDefnID(*pRuntime, L"Field"));
+ ASSERT(pFieldObj.IsEmpty() == FALSE);
- CJS_Document* pJSDocument = (CJS_Document*)JS_GetPrivate(pDocObj);
- ASSERT(pJSDocument != NULL);
- Document* pDocument = (Document*)pJSDocument->GetEmbedObject();
- ASSERT(pDocument != NULL);
- if (m_pTargetDoc != NULL)
- pDocument->AttachDoc(m_pTargetDoc);
- else
- pDocument->AttachDoc(m_pJSContext->GetReaderDocument());
+ CJS_Document* pJSDocument = (CJS_Document*)JS_GetPrivate(pDocObj);
+ ASSERT(pJSDocument != NULL);
+ Document* pDocument = (Document*)pJSDocument->GetEmbedObject();
+ ASSERT(pDocument != NULL);
+ if (m_pTargetDoc != NULL)
+ pDocument->AttachDoc(m_pTargetDoc);
+ else
+ pDocument->AttachDoc(m_pJSContext->GetReaderDocument());
- //if (m_pSourceField == NULL)
- // return NULL;
- //CRAO_Widget *pWidget = IBCL_Widget::GetWidget(m_pSourceField);
- //CPDF_FormField* pFormField = pWidget->GetFormField();
- //ASSERT(pFormField);
- //CFX_WideString csFieldName = pFormField->GetFullName();
- CJS_Field * pJSField = (CJS_Field*)JS_GetPrivate(pFieldObj);
- ASSERT(pJSField != NULL);
- Field * pField = (Field *)pJSField->GetEmbedObject();
- ASSERT(pField != NULL);
- pField->AttachField(pDocument, m_strSourceName);
- return pField;
+ // if (m_pSourceField == NULL)
+ // return NULL;
+ // CRAO_Widget *pWidget = IBCL_Widget::GetWidget(m_pSourceField);
+ // CPDF_FormField* pFormField = pWidget->GetFormField();
+ // ASSERT(pFormField);
+ // CFX_WideString csFieldName = pFormField->GetFullName();
+ CJS_Field* pJSField = (CJS_Field*)JS_GetPrivate(pFieldObj);
+ ASSERT(pJSField != NULL);
+ Field* pField = (Field*)pJSField->GetEmbedObject();
+ ASSERT(pField != NULL);
+ pField->AttachField(pDocument, m_strSourceName);
+ return pField;
}
-Field* CJS_EventHandler::Target_Field()
-{
- ASSERT(m_pJSContext != NULL);
+Field* CJS_EventHandler::Target_Field() {
+ ASSERT(m_pJSContext != NULL);
- CJS_Runtime* pRuntime = m_pJSContext->GetJSRuntime();
+ CJS_Runtime* pRuntime = m_pJSContext->GetJSRuntime();
- JSFXObject pDocObj = JS_NewFxDynamicObj(*pRuntime, m_pJSContext, JS_GetObjDefnID(*pRuntime, L"Document"));
- ASSERT(pDocObj.IsEmpty() == FALSE);
- JSFXObject pFieldObj = JS_NewFxDynamicObj(*pRuntime, m_pJSContext, JS_GetObjDefnID(*pRuntime, L"Field"));
- ASSERT(pFieldObj.IsEmpty() == FALSE);
+ JSFXObject pDocObj = JS_NewFxDynamicObj(
+ *pRuntime, m_pJSContext, JS_GetObjDefnID(*pRuntime, L"Document"));
+ ASSERT(pDocObj.IsEmpty() == FALSE);
+ JSFXObject pFieldObj = JS_NewFxDynamicObj(
+ *pRuntime, m_pJSContext, JS_GetObjDefnID(*pRuntime, L"Field"));
+ ASSERT(pFieldObj.IsEmpty() == FALSE);
- CJS_Document* pJSDocument = (CJS_Document*)JS_GetPrivate(pDocObj);
- ASSERT(pJSDocument != NULL);
- Document* pDocument = (Document*)pJSDocument->GetEmbedObject();
- ASSERT(pDocument != NULL);
- if (m_pTargetDoc != NULL)
- pDocument->AttachDoc(m_pTargetDoc);
- else
- pDocument->AttachDoc(m_pJSContext->GetReaderDocument());
+ CJS_Document* pJSDocument = (CJS_Document*)JS_GetPrivate(pDocObj);
+ ASSERT(pJSDocument != NULL);
+ Document* pDocument = (Document*)pJSDocument->GetEmbedObject();
+ ASSERT(pDocument != NULL);
+ if (m_pTargetDoc != NULL)
+ pDocument->AttachDoc(m_pTargetDoc);
+ else
+ pDocument->AttachDoc(m_pJSContext->GetReaderDocument());
- CJS_Field* pJSField = (CJS_Field*)JS_GetPrivate(pFieldObj);
- ASSERT(pJSField != NULL);
+ CJS_Field* pJSField = (CJS_Field*)JS_GetPrivate(pFieldObj);
+ ASSERT(pJSField != NULL);
- Field* pField = (Field *)pJSField->GetEmbedObject();
- ASSERT(pField != NULL);
+ Field* pField = (Field*)pJSField->GetEmbedObject();
+ ASSERT(pField != NULL);
- pField->AttachField(pDocument, m_strTargetName);
- return pField;
+ pField->AttachField(pDocument, m_strTargetName);
+ return pField;
}
-CFX_WideString& CJS_EventHandler::Value()
-{
- return *m_pValue;
+CFX_WideString& CJS_EventHandler::Value() {
+ return *m_pValue;
}
-FX_BOOL CJS_EventHandler::WillCommit()
-{
- return m_bWillCommit;
+FX_BOOL CJS_EventHandler::WillCommit() {
+ return m_bWillCommit;
}
-CFX_WideString CJS_EventHandler::TargetName()
-{
- return m_strTargetName;
+CFX_WideString CJS_EventHandler::TargetName() {
+ return m_strTargetName;
}
diff --git a/fpdfsdk/src/javascript/JS_GlobalData.cpp b/fpdfsdk/src/javascript/JS_GlobalData.cpp
index 8c7bd7150e..9f954acee5 100644
--- a/fpdfsdk/src/javascript/JS_GlobalData.cpp
+++ b/fpdfsdk/src/javascript/JS_GlobalData.cpp
@@ -9,449 +9,393 @@
#include "../../include/javascript/IJavaScript.h"
#include "../../include/javascript/JS_GlobalData.h"
-#define JS_MAXGLOBALDATA (1024 * 4 - 8)
+#define JS_MAXGLOBALDATA (1024 * 4 - 8)
/* --------------------- CJS_GlobalVariableArray --------------------- */
-CJS_GlobalVariableArray::CJS_GlobalVariableArray()
-{
-}
+CJS_GlobalVariableArray::CJS_GlobalVariableArray() {}
-CJS_GlobalVariableArray::~CJS_GlobalVariableArray()
-{
- Empty();
+CJS_GlobalVariableArray::~CJS_GlobalVariableArray() {
+ Empty();
}
-void CJS_GlobalVariableArray::Copy(const CJS_GlobalVariableArray& array)
-{
- Empty();
- for (int i=0,sz=array.Count(); i<sz; i++)
- {
- CJS_KeyValue* pOldObjData = array.GetAt(i);
- ASSERT(pOldObjData != NULL);
-
- switch (pOldObjData->nType)
- {
- case JS_GLOBALDATA_TYPE_NUMBER:
- {
- CJS_KeyValue* pNewObjData = new CJS_KeyValue;
- pNewObjData->sKey = pOldObjData->sKey;
- pNewObjData->nType = pOldObjData->nType;
- pNewObjData->dData = pOldObjData->dData;
- Add(pNewObjData);
- }
- break;
- case JS_GLOBALDATA_TYPE_BOOLEAN:
- {
- CJS_KeyValue* pNewObjData = new CJS_KeyValue;
- pNewObjData->sKey = pOldObjData->sKey;
- pNewObjData->nType = pOldObjData->nType;
- pNewObjData->bData = pOldObjData->bData;
- Add(pNewObjData);
- }
- break;
- case JS_GLOBALDATA_TYPE_STRING:
- {
- CJS_KeyValue* pNewObjData = new CJS_KeyValue;
- pNewObjData->sKey = pOldObjData->sKey;
- pNewObjData->nType = pOldObjData->nType;
- pNewObjData->sData = pOldObjData->sData;
- Add(pNewObjData);
- }
- break;
- case JS_GLOBALDATA_TYPE_OBJECT:
- {
- CJS_KeyValue* pNewObjData = new CJS_KeyValue;
- pNewObjData->sKey = pOldObjData->sKey;
- pNewObjData->nType = pOldObjData->nType;
- pNewObjData->objData.Copy(pOldObjData->objData);
- Add(pNewObjData);
- }
- case JS_GLOBALDATA_TYPE_NULL:
- {
- CJS_KeyValue* pNewObjData = new CJS_KeyValue;
- pNewObjData->sKey = pOldObjData->sKey;
- pNewObjData->nType = pOldObjData->nType;
- Add(pNewObjData);
- }
- }
+void CJS_GlobalVariableArray::Copy(const CJS_GlobalVariableArray& array) {
+ Empty();
+ for (int i = 0, sz = array.Count(); i < sz; i++) {
+ CJS_KeyValue* pOldObjData = array.GetAt(i);
+ ASSERT(pOldObjData != NULL);
+
+ switch (pOldObjData->nType) {
+ case JS_GLOBALDATA_TYPE_NUMBER: {
+ CJS_KeyValue* pNewObjData = new CJS_KeyValue;
+ pNewObjData->sKey = pOldObjData->sKey;
+ pNewObjData->nType = pOldObjData->nType;
+ pNewObjData->dData = pOldObjData->dData;
+ Add(pNewObjData);
+ } break;
+ case JS_GLOBALDATA_TYPE_BOOLEAN: {
+ CJS_KeyValue* pNewObjData = new CJS_KeyValue;
+ pNewObjData->sKey = pOldObjData->sKey;
+ pNewObjData->nType = pOldObjData->nType;
+ pNewObjData->bData = pOldObjData->bData;
+ Add(pNewObjData);
+ } break;
+ case JS_GLOBALDATA_TYPE_STRING: {
+ CJS_KeyValue* pNewObjData = new CJS_KeyValue;
+ pNewObjData->sKey = pOldObjData->sKey;
+ pNewObjData->nType = pOldObjData->nType;
+ pNewObjData->sData = pOldObjData->sData;
+ Add(pNewObjData);
+ } break;
+ case JS_GLOBALDATA_TYPE_OBJECT: {
+ CJS_KeyValue* pNewObjData = new CJS_KeyValue;
+ pNewObjData->sKey = pOldObjData->sKey;
+ pNewObjData->nType = pOldObjData->nType;
+ pNewObjData->objData.Copy(pOldObjData->objData);
+ Add(pNewObjData);
+ }
+ case JS_GLOBALDATA_TYPE_NULL: {
+ CJS_KeyValue* pNewObjData = new CJS_KeyValue;
+ pNewObjData->sKey = pOldObjData->sKey;
+ pNewObjData->nType = pOldObjData->nType;
+ Add(pNewObjData);
+ }
}
+ }
}
-void CJS_GlobalVariableArray::Add(CJS_KeyValue* p)
-{
- array.Add(p);
+void CJS_GlobalVariableArray::Add(CJS_KeyValue* p) {
+ array.Add(p);
}
-int CJS_GlobalVariableArray::Count() const
-{
- return array.GetSize();
+int CJS_GlobalVariableArray::Count() const {
+ return array.GetSize();
}
-CJS_KeyValue* CJS_GlobalVariableArray::GetAt(int index) const
-{
- return array.GetAt(index);
+CJS_KeyValue* CJS_GlobalVariableArray::GetAt(int index) const {
+ return array.GetAt(index);
}
-void CJS_GlobalVariableArray::Empty()
-{
- for (int i=0,sz=array.GetSize(); i<sz; i++)
- delete array.GetAt(i);
- array.RemoveAll();
+void CJS_GlobalVariableArray::Empty() {
+ for (int i = 0, sz = array.GetSize(); i < sz; i++)
+ delete array.GetAt(i);
+ array.RemoveAll();
}
/* -------------------------- CJS_GlobalData -------------------------- */
-#define READER_JS_GLOBALDATA_FILENAME L"Reader_JsGlobal.Data"
-#define PHANTOM_JS_GLOBALDATA_FILENAME L"Phantom_JsGlobal.Data"
-#define SDK_JS_GLOBALDATA_FILENAME L"SDK_JsGlobal.Data"
-
-static const uint8_t JS_RC4KEY[] = {0x19,0xa8,0xe8,0x01,0xf6,0xa8,0xb6,0x4d,0x82,0x04,
- 0x45,0x6d,0xb4,0xcf,0xd7,0x77,0x67,0xf9,0x75,0x9f,
- 0xf0,0xe0,0x1e,0x51,0xee,0x46,0xfd,0x0b,0xc9,0x93,
- 0x25,0x55,0x4a,0xee,0xe0,0x16,0xd0,0xdf,0x8c,0xfa,
- 0x2a,0xa9,0x49,0xfd,0x97,0x1c,0x0e,0x22,0x13,0x28,
- 0x7c,0xaf,0xc4,0xfc,0x9c,0x12,0x65,0x8c,0x4e,0x5b,
- 0x04,0x75,0x89,0xc9,0xb1,0xed,0x50,0xca,0x96,0x6f,
- 0x1a,0x7a,0xfe,0x58,0x5d,0xec,0x19,0x4a,0xf6,0x35,
- 0x6a,0x97,0x14,0x00,0x0e,0xd0,0x6b,0xbb,0xd5,0x75,
- 0x55,0x8b,0x6e,0x6b,0x19,0xa0,0xf8,0x77,0xd5,0xa3
- };
-
-CJS_GlobalData::CJS_GlobalData(CPDFDoc_Environment* pApp)
-{
-// IBaseAnnot* pBaseAnnot = IBaseAnnot::GetBaseAnnot(m_pApp);
-// ASSERT(pBaseAnnot != NULL);
-//
-// m_sFilePath = pBaseAnnot->GetUserPath();
- m_sFilePath += SDK_JS_GLOBALDATA_FILENAME;
-
- LoadGlobalPersistentVariables();
+#define READER_JS_GLOBALDATA_FILENAME L"Reader_JsGlobal.Data"
+#define PHANTOM_JS_GLOBALDATA_FILENAME L"Phantom_JsGlobal.Data"
+#define SDK_JS_GLOBALDATA_FILENAME L"SDK_JsGlobal.Data"
+
+static const uint8_t JS_RC4KEY[] = {
+ 0x19, 0xa8, 0xe8, 0x01, 0xf6, 0xa8, 0xb6, 0x4d, 0x82, 0x04, 0x45, 0x6d,
+ 0xb4, 0xcf, 0xd7, 0x77, 0x67, 0xf9, 0x75, 0x9f, 0xf0, 0xe0, 0x1e, 0x51,
+ 0xee, 0x46, 0xfd, 0x0b, 0xc9, 0x93, 0x25, 0x55, 0x4a, 0xee, 0xe0, 0x16,
+ 0xd0, 0xdf, 0x8c, 0xfa, 0x2a, 0xa9, 0x49, 0xfd, 0x97, 0x1c, 0x0e, 0x22,
+ 0x13, 0x28, 0x7c, 0xaf, 0xc4, 0xfc, 0x9c, 0x12, 0x65, 0x8c, 0x4e, 0x5b,
+ 0x04, 0x75, 0x89, 0xc9, 0xb1, 0xed, 0x50, 0xca, 0x96, 0x6f, 0x1a, 0x7a,
+ 0xfe, 0x58, 0x5d, 0xec, 0x19, 0x4a, 0xf6, 0x35, 0x6a, 0x97, 0x14, 0x00,
+ 0x0e, 0xd0, 0x6b, 0xbb, 0xd5, 0x75, 0x55, 0x8b, 0x6e, 0x6b, 0x19, 0xa0,
+ 0xf8, 0x77, 0xd5, 0xa3};
+
+CJS_GlobalData::CJS_GlobalData(CPDFDoc_Environment* pApp) {
+ // IBaseAnnot* pBaseAnnot = IBaseAnnot::GetBaseAnnot(m_pApp);
+ // ASSERT(pBaseAnnot != NULL);
+ //
+ // m_sFilePath = pBaseAnnot->GetUserPath();
+ m_sFilePath += SDK_JS_GLOBALDATA_FILENAME;
+
+ LoadGlobalPersistentVariables();
}
-CJS_GlobalData::~CJS_GlobalData()
-{
- SaveGlobalPersisitentVariables();
+CJS_GlobalData::~CJS_GlobalData() {
+ SaveGlobalPersisitentVariables();
- for (int i=0,sz=m_arrayGlobalData.GetSize(); i<sz; i++)
- delete m_arrayGlobalData.GetAt(i);
+ for (int i = 0, sz = m_arrayGlobalData.GetSize(); i < sz; i++)
+ delete m_arrayGlobalData.GetAt(i);
- m_arrayGlobalData.RemoveAll();
+ m_arrayGlobalData.RemoveAll();
}
-int CJS_GlobalData::FindGlobalVariable(const FX_CHAR* propname)
-{
- ASSERT(propname != NULL);
+int CJS_GlobalData::FindGlobalVariable(const FX_CHAR* propname) {
+ ASSERT(propname != NULL);
- int nRet = -1;
+ int nRet = -1;
- for (int i=0,sz=m_arrayGlobalData.GetSize(); i<sz; i++)
- {
- CJS_GlobalData_Element* pTemp = m_arrayGlobalData.GetAt(i);
- if (pTemp->data.sKey[0] == *propname && pTemp->data.sKey == propname)
- {
- nRet = i;
- break;
- }
+ for (int i = 0, sz = m_arrayGlobalData.GetSize(); i < sz; i++) {
+ CJS_GlobalData_Element* pTemp = m_arrayGlobalData.GetAt(i);
+ if (pTemp->data.sKey[0] == *propname && pTemp->data.sKey == propname) {
+ nRet = i;
+ break;
}
+ }
- return nRet;
+ return nRet;
}
-CJS_GlobalData_Element* CJS_GlobalData::GetGlobalVariable(const FX_CHAR* propname)
-{
- ASSERT(propname != NULL);
+CJS_GlobalData_Element* CJS_GlobalData::GetGlobalVariable(
+ const FX_CHAR* propname) {
+ ASSERT(propname != NULL);
- int nFind = FindGlobalVariable(propname);
- if (nFind >= 0)
- return m_arrayGlobalData.GetAt(nFind);
+ int nFind = FindGlobalVariable(propname);
+ if (nFind >= 0)
+ return m_arrayGlobalData.GetAt(nFind);
- return NULL;
+ return NULL;
}
-void CJS_GlobalData::SetGlobalVariableNumber(const FX_CHAR* propname, double dData)
-{
- ASSERT(propname != NULL);
-
- CFX_ByteString sPropName = propname;
- sPropName.TrimLeft();
- sPropName.TrimRight();
- if (sPropName.GetLength() == 0)
- return;
-
- if (CJS_GlobalData_Element* pData = GetGlobalVariable(sPropName))
- {
- pData->data.nType = JS_GLOBALDATA_TYPE_NUMBER;
- pData->data.dData = dData;
- }
- else
- {
- CJS_GlobalData_Element* pNewData = new CJS_GlobalData_Element;
- pNewData->data.sKey = sPropName;
- pNewData->data.nType = JS_GLOBALDATA_TYPE_NUMBER;
- pNewData->data.dData = dData;
- m_arrayGlobalData.Add(pNewData);
- }
+void CJS_GlobalData::SetGlobalVariableNumber(const FX_CHAR* propname,
+ double dData) {
+ ASSERT(propname != NULL);
+
+ CFX_ByteString sPropName = propname;
+ sPropName.TrimLeft();
+ sPropName.TrimRight();
+ if (sPropName.GetLength() == 0)
+ return;
+
+ if (CJS_GlobalData_Element* pData = GetGlobalVariable(sPropName)) {
+ pData->data.nType = JS_GLOBALDATA_TYPE_NUMBER;
+ pData->data.dData = dData;
+ } else {
+ CJS_GlobalData_Element* pNewData = new CJS_GlobalData_Element;
+ pNewData->data.sKey = sPropName;
+ pNewData->data.nType = JS_GLOBALDATA_TYPE_NUMBER;
+ pNewData->data.dData = dData;
+ m_arrayGlobalData.Add(pNewData);
+ }
}
-void CJS_GlobalData::SetGlobalVariableBoolean(const FX_CHAR* propname, bool bData)
-{
- ASSERT(propname != NULL);
- CFX_ByteString sPropName = propname;
+void CJS_GlobalData::SetGlobalVariableBoolean(const FX_CHAR* propname,
+ bool bData) {
+ ASSERT(propname != NULL);
+ CFX_ByteString sPropName = propname;
- sPropName.TrimLeft();
- sPropName.TrimRight();
+ sPropName.TrimLeft();
+ sPropName.TrimRight();
- if (sPropName.GetLength() == 0) return;
+ if (sPropName.GetLength() == 0)
+ return;
- if (CJS_GlobalData_Element* pData = GetGlobalVariable(sPropName))
- {
- pData->data.nType = JS_GLOBALDATA_TYPE_BOOLEAN;
- pData->data.bData = bData;
- }
- else
- {
- CJS_GlobalData_Element* pNewData = new CJS_GlobalData_Element;
- pNewData->data.sKey = sPropName;
- pNewData->data.nType = JS_GLOBALDATA_TYPE_BOOLEAN;
- pNewData->data.bData = bData;
-
- m_arrayGlobalData.Add(pNewData);
- }
-}
-
-void CJS_GlobalData::SetGlobalVariableString(const FX_CHAR* propname, const CFX_ByteString& sData)
-{
- ASSERT(propname != NULL);
- CFX_ByteString sPropName = propname;
+ if (CJS_GlobalData_Element* pData = GetGlobalVariable(sPropName)) {
+ pData->data.nType = JS_GLOBALDATA_TYPE_BOOLEAN;
+ pData->data.bData = bData;
+ } else {
+ CJS_GlobalData_Element* pNewData = new CJS_GlobalData_Element;
+ pNewData->data.sKey = sPropName;
+ pNewData->data.nType = JS_GLOBALDATA_TYPE_BOOLEAN;
+ pNewData->data.bData = bData;
- sPropName.TrimLeft();
- sPropName.TrimRight();
+ m_arrayGlobalData.Add(pNewData);
+ }
+}
- if (sPropName.GetLength() == 0) return;
+void CJS_GlobalData::SetGlobalVariableString(const FX_CHAR* propname,
+ const CFX_ByteString& sData) {
+ ASSERT(propname != NULL);
+ CFX_ByteString sPropName = propname;
- if (CJS_GlobalData_Element* pData = GetGlobalVariable(sPropName))
- {
- pData->data.nType = JS_GLOBALDATA_TYPE_STRING;
- pData->data.sData = sData;
- }
- else
- {
- CJS_GlobalData_Element* pNewData = new CJS_GlobalData_Element;
- pNewData->data.sKey = sPropName;
- pNewData->data.nType = JS_GLOBALDATA_TYPE_STRING;
- pNewData->data.sData = sData;
-
- m_arrayGlobalData.Add(pNewData);
- }
-}
+ sPropName.TrimLeft();
+ sPropName.TrimRight();
-void CJS_GlobalData::SetGlobalVariableObject(const FX_CHAR* propname, const CJS_GlobalVariableArray& array)
-{
- ASSERT(propname != NULL);
- CFX_ByteString sPropName = propname;
+ if (sPropName.GetLength() == 0)
+ return;
- sPropName.TrimLeft();
- sPropName.TrimRight();
+ if (CJS_GlobalData_Element* pData = GetGlobalVariable(sPropName)) {
+ pData->data.nType = JS_GLOBALDATA_TYPE_STRING;
+ pData->data.sData = sData;
+ } else {
+ CJS_GlobalData_Element* pNewData = new CJS_GlobalData_Element;
+ pNewData->data.sKey = sPropName;
+ pNewData->data.nType = JS_GLOBALDATA_TYPE_STRING;
+ pNewData->data.sData = sData;
- if (sPropName.GetLength() == 0) return;
+ m_arrayGlobalData.Add(pNewData);
+ }
+}
- if (CJS_GlobalData_Element* pData = GetGlobalVariable(sPropName))
- {
- pData->data.nType = JS_GLOBALDATA_TYPE_OBJECT;
- pData->data.objData.Copy(array);
- }
- else
- {
- CJS_GlobalData_Element* pNewData = new CJS_GlobalData_Element;
- pNewData->data.sKey = sPropName;
- pNewData->data.nType = JS_GLOBALDATA_TYPE_OBJECT;
- pNewData->data.objData.Copy(array);
-
- m_arrayGlobalData.Add(pNewData);
- }
+void CJS_GlobalData::SetGlobalVariableObject(
+ const FX_CHAR* propname,
+ const CJS_GlobalVariableArray& array) {
+ ASSERT(propname != NULL);
+ CFX_ByteString sPropName = propname;
+
+ sPropName.TrimLeft();
+ sPropName.TrimRight();
+
+ if (sPropName.GetLength() == 0)
+ return;
+
+ if (CJS_GlobalData_Element* pData = GetGlobalVariable(sPropName)) {
+ pData->data.nType = JS_GLOBALDATA_TYPE_OBJECT;
+ pData->data.objData.Copy(array);
+ } else {
+ CJS_GlobalData_Element* pNewData = new CJS_GlobalData_Element;
+ pNewData->data.sKey = sPropName;
+ pNewData->data.nType = JS_GLOBALDATA_TYPE_OBJECT;
+ pNewData->data.objData.Copy(array);
+
+ m_arrayGlobalData.Add(pNewData);
+ }
}
-void CJS_GlobalData::SetGlobalVariableNull(const FX_CHAR* propname)
-{
- ASSERT(propname != NULL);
- CFX_ByteString sPropName = propname;
+void CJS_GlobalData::SetGlobalVariableNull(const FX_CHAR* propname) {
+ ASSERT(propname != NULL);
+ CFX_ByteString sPropName = propname;
- sPropName.TrimLeft();
- sPropName.TrimRight();
+ sPropName.TrimLeft();
+ sPropName.TrimRight();
- if (sPropName.GetLength() == 0) return;
+ if (sPropName.GetLength() == 0)
+ return;
- if (CJS_GlobalData_Element* pData = GetGlobalVariable(sPropName))
- {
- pData->data.nType = JS_GLOBALDATA_TYPE_NULL;
- }
- else
- {
- CJS_GlobalData_Element* pNewData = new CJS_GlobalData_Element;
- pNewData->data.sKey = sPropName;
- pNewData->data.nType = JS_GLOBALDATA_TYPE_NULL;
+ if (CJS_GlobalData_Element* pData = GetGlobalVariable(sPropName)) {
+ pData->data.nType = JS_GLOBALDATA_TYPE_NULL;
+ } else {
+ CJS_GlobalData_Element* pNewData = new CJS_GlobalData_Element;
+ pNewData->data.sKey = sPropName;
+ pNewData->data.nType = JS_GLOBALDATA_TYPE_NULL;
- m_arrayGlobalData.Add(pNewData);
- }
+ m_arrayGlobalData.Add(pNewData);
+ }
}
-FX_BOOL CJS_GlobalData::SetGlobalVariablePersistent(const FX_CHAR* propname, FX_BOOL bPersistent)
-{
- ASSERT(propname != NULL);
- CFX_ByteString sPropName = propname;
+FX_BOOL CJS_GlobalData::SetGlobalVariablePersistent(const FX_CHAR* propname,
+ FX_BOOL bPersistent) {
+ ASSERT(propname != NULL);
+ CFX_ByteString sPropName = propname;
- sPropName.TrimLeft();
- sPropName.TrimRight();
+ sPropName.TrimLeft();
+ sPropName.TrimRight();
- if (sPropName.GetLength() == 0) return FALSE;
+ if (sPropName.GetLength() == 0)
+ return FALSE;
- if (CJS_GlobalData_Element* pData = GetGlobalVariable(sPropName))
- {
- pData->bPersistent = bPersistent;
- return TRUE;
- }
+ if (CJS_GlobalData_Element* pData = GetGlobalVariable(sPropName)) {
+ pData->bPersistent = bPersistent;
+ return TRUE;
+ }
- return FALSE;
+ return FALSE;
}
-FX_BOOL CJS_GlobalData::DeleteGlobalVariable(const FX_CHAR* propname)
-{
- ASSERT(propname != NULL);
- CFX_ByteString sPropName = propname;
+FX_BOOL CJS_GlobalData::DeleteGlobalVariable(const FX_CHAR* propname) {
+ ASSERT(propname != NULL);
+ CFX_ByteString sPropName = propname;
- sPropName.TrimLeft();
- sPropName.TrimRight();
+ sPropName.TrimLeft();
+ sPropName.TrimRight();
- if (sPropName.GetLength() == 0) return FALSE;
+ if (sPropName.GetLength() == 0)
+ return FALSE;
- int nFind = FindGlobalVariable(sPropName);
+ int nFind = FindGlobalVariable(sPropName);
- if (nFind >= 0)
- {
- delete m_arrayGlobalData.GetAt(nFind);
- m_arrayGlobalData.RemoveAt(nFind);
- return TRUE;
- }
+ if (nFind >= 0) {
+ delete m_arrayGlobalData.GetAt(nFind);
+ m_arrayGlobalData.RemoveAt(nFind);
+ return TRUE;
+ }
- return FALSE;
+ return FALSE;
}
-int32_t CJS_GlobalData::GetSize() const
-{
- return m_arrayGlobalData.GetSize();
+int32_t CJS_GlobalData::GetSize() const {
+ return m_arrayGlobalData.GetSize();
}
-CJS_GlobalData_Element* CJS_GlobalData::GetAt(int index) const
-{
- return m_arrayGlobalData.GetAt(index);
+CJS_GlobalData_Element* CJS_GlobalData::GetAt(int index) const {
+ return m_arrayGlobalData.GetAt(index);
}
-void CJS_GlobalData::LoadGlobalPersistentVariables()
-{
- uint8_t* pBuffer = NULL;
- int32_t nLength = 0;
-
- LoadFileBuffer(m_sFilePath.c_str(), pBuffer, nLength);
- CRYPT_ArcFourCryptBlock(pBuffer, nLength, JS_RC4KEY, sizeof(JS_RC4KEY));
-
- if (pBuffer)
- {
- uint8_t* p = pBuffer;
- FX_WORD wType = *((FX_WORD*)p);
- p += sizeof(FX_WORD);
-
- //FX_WORD wTemp = (FX_WORD)(('X' << 8) | 'F');
-
- if (wType == (FX_WORD)(('X' << 8) | 'F'))
- {
- FX_WORD wVersion = *((FX_WORD*)p);
- p += sizeof(FX_WORD);
-
- ASSERT(wVersion <= 2);
-
- FX_DWORD dwCount = *((FX_DWORD*)p);
- p += sizeof(FX_DWORD);
-
- FX_DWORD dwSize = *((FX_DWORD*)p);
- p += sizeof(FX_DWORD);
-
- if (dwSize == nLength - sizeof(FX_WORD) * 2 - sizeof(FX_DWORD)* 2)
- {
- for (int32_t i=0,sz=dwCount; i<sz; i++)
- {
- if (p > pBuffer + nLength)
- break;
-
- FX_DWORD dwNameLen = *((FX_DWORD*)p);
- p += sizeof(FX_DWORD);
-
- if (p + dwNameLen > pBuffer + nLength)
- break;
-
- CFX_ByteString sEntry = CFX_ByteString(p, dwNameLen);
- p += sizeof(char) * dwNameLen;
-
- FX_WORD wDataType = *((FX_WORD*)p);
- p += sizeof(FX_WORD);
-
- switch (wDataType)
- {
- case JS_GLOBALDATA_TYPE_NUMBER:
- {
- double dData = 0;
- switch (wVersion)
- {
- case 1:
- {
- FX_DWORD dwData = *((FX_DWORD*)p);
- p += sizeof(FX_DWORD);
- dData = dwData;
- }
- break;
- case 2:
- {
- dData = *((double*)p);
- p += sizeof(double);
- }
- break;
- }
- SetGlobalVariableNumber(sEntry, dData);
- SetGlobalVariablePersistent(sEntry, TRUE);
- }
- break;
- case JS_GLOBALDATA_TYPE_BOOLEAN:
- {
- FX_WORD wData = *((FX_WORD*)p);
- p += sizeof(FX_WORD);
- SetGlobalVariableBoolean(sEntry, (bool)(wData == 1));
- SetGlobalVariablePersistent(sEntry, TRUE);
- }
- break;
- case JS_GLOBALDATA_TYPE_STRING:
- {
- FX_DWORD dwLength = *((FX_DWORD*)p);
- p += sizeof(FX_DWORD);
-
- if (p + dwLength > pBuffer + nLength)
- break;
-
- SetGlobalVariableString(sEntry, CFX_ByteString(p, dwLength));
- SetGlobalVariablePersistent(sEntry, TRUE);
- p += sizeof(char) * dwLength;
- }
- break;
- case JS_GLOBALDATA_TYPE_NULL:
- {
- SetGlobalVariableNull(sEntry);
- SetGlobalVariablePersistent(sEntry, TRUE);
- }
- }
- }
+void CJS_GlobalData::LoadGlobalPersistentVariables() {
+ uint8_t* pBuffer = NULL;
+ int32_t nLength = 0;
+
+ LoadFileBuffer(m_sFilePath.c_str(), pBuffer, nLength);
+ CRYPT_ArcFourCryptBlock(pBuffer, nLength, JS_RC4KEY, sizeof(JS_RC4KEY));
+
+ if (pBuffer) {
+ uint8_t* p = pBuffer;
+ FX_WORD wType = *((FX_WORD*)p);
+ p += sizeof(FX_WORD);
+
+ // FX_WORD wTemp = (FX_WORD)(('X' << 8) | 'F');
+
+ if (wType == (FX_WORD)(('X' << 8) | 'F')) {
+ FX_WORD wVersion = *((FX_WORD*)p);
+ p += sizeof(FX_WORD);
+
+ ASSERT(wVersion <= 2);
+
+ FX_DWORD dwCount = *((FX_DWORD*)p);
+ p += sizeof(FX_DWORD);
+
+ FX_DWORD dwSize = *((FX_DWORD*)p);
+ p += sizeof(FX_DWORD);
+
+ if (dwSize == nLength - sizeof(FX_WORD) * 2 - sizeof(FX_DWORD) * 2) {
+ for (int32_t i = 0, sz = dwCount; i < sz; i++) {
+ if (p > pBuffer + nLength)
+ break;
+
+ FX_DWORD dwNameLen = *((FX_DWORD*)p);
+ p += sizeof(FX_DWORD);
+
+ if (p + dwNameLen > pBuffer + nLength)
+ break;
+
+ CFX_ByteString sEntry = CFX_ByteString(p, dwNameLen);
+ p += sizeof(char) * dwNameLen;
+
+ FX_WORD wDataType = *((FX_WORD*)p);
+ p += sizeof(FX_WORD);
+
+ switch (wDataType) {
+ case JS_GLOBALDATA_TYPE_NUMBER: {
+ double dData = 0;
+ switch (wVersion) {
+ case 1: {
+ FX_DWORD dwData = *((FX_DWORD*)p);
+ p += sizeof(FX_DWORD);
+ dData = dwData;
+ } break;
+ case 2: {
+ dData = *((double*)p);
+ p += sizeof(double);
+ } break;
+ }
+ SetGlobalVariableNumber(sEntry, dData);
+ SetGlobalVariablePersistent(sEntry, TRUE);
+ } break;
+ case JS_GLOBALDATA_TYPE_BOOLEAN: {
+ FX_WORD wData = *((FX_WORD*)p);
+ p += sizeof(FX_WORD);
+ SetGlobalVariableBoolean(sEntry, (bool)(wData == 1));
+ SetGlobalVariablePersistent(sEntry, TRUE);
+ } break;
+ case JS_GLOBALDATA_TYPE_STRING: {
+ FX_DWORD dwLength = *((FX_DWORD*)p);
+ p += sizeof(FX_DWORD);
+
+ if (p + dwLength > pBuffer + nLength)
+ break;
+
+ SetGlobalVariableString(sEntry, CFX_ByteString(p, dwLength));
+ SetGlobalVariablePersistent(sEntry, TRUE);
+ p += sizeof(char) * dwLength;
+ } break;
+ case JS_GLOBALDATA_TYPE_NULL: {
+ SetGlobalVariableNull(sEntry);
+ SetGlobalVariablePersistent(sEntry, TRUE);
}
+ }
}
- FX_Free(pBuffer);
+ }
}
+ FX_Free(pBuffer);
+ }
}
/*
@@ -471,104 +415,96 @@ struct js_global_datafile_data
};
*/
-void CJS_GlobalData::SaveGlobalPersisitentVariables()
-{
- FX_DWORD nCount = 0;
- CFX_BinaryBuf sData;
+void CJS_GlobalData::SaveGlobalPersisitentVariables() {
+ FX_DWORD nCount = 0;
+ CFX_BinaryBuf sData;
- for (int i=0,sz=m_arrayGlobalData.GetSize(); i<sz; i++)
- {
- CJS_GlobalData_Element* pElement = m_arrayGlobalData.GetAt(i);
- ASSERT(pElement != NULL);
+ for (int i = 0, sz = m_arrayGlobalData.GetSize(); i < sz; i++) {
+ CJS_GlobalData_Element* pElement = m_arrayGlobalData.GetAt(i);
+ ASSERT(pElement != NULL);
- if (pElement->bPersistent)
- {
- CFX_BinaryBuf sElement;
- MakeByteString(pElement->data.sKey, &pElement->data, sElement);
+ if (pElement->bPersistent) {
+ CFX_BinaryBuf sElement;
+ MakeByteString(pElement->data.sKey, &pElement->data, sElement);
- if (sData.GetSize() + sElement.GetSize() > JS_MAXGLOBALDATA)
- break;
+ if (sData.GetSize() + sElement.GetSize() > JS_MAXGLOBALDATA)
+ break;
- sData.AppendBlock(sElement.GetBuffer(), sElement.GetSize());
- nCount++;
- }
+ sData.AppendBlock(sElement.GetBuffer(), sElement.GetSize());
+ nCount++;
}
+ }
- CFX_BinaryBuf sFile;
+ CFX_BinaryBuf sFile;
- FX_WORD wType = (FX_WORD)(('X' << 8) | 'F');
- sFile.AppendBlock(&wType, sizeof(FX_WORD));
- FX_WORD wVersion = 2;
- sFile.AppendBlock(&wVersion, sizeof(FX_WORD));
- sFile.AppendBlock(&nCount, sizeof(FX_DWORD));
- FX_DWORD dwSize = sData.GetSize();
- sFile.AppendBlock(&dwSize, sizeof(FX_DWORD));
+ FX_WORD wType = (FX_WORD)(('X' << 8) | 'F');
+ sFile.AppendBlock(&wType, sizeof(FX_WORD));
+ FX_WORD wVersion = 2;
+ sFile.AppendBlock(&wVersion, sizeof(FX_WORD));
+ sFile.AppendBlock(&nCount, sizeof(FX_DWORD));
+ FX_DWORD dwSize = sData.GetSize();
+ sFile.AppendBlock(&dwSize, sizeof(FX_DWORD));
- sFile.AppendBlock(sData.GetBuffer(), sData.GetSize());
+ sFile.AppendBlock(sData.GetBuffer(), sData.GetSize());
- CRYPT_ArcFourCryptBlock(sFile.GetBuffer(), sFile.GetSize(), JS_RC4KEY, sizeof(JS_RC4KEY));
- WriteFileBuffer(m_sFilePath.c_str(), (const FX_CHAR*)sFile.GetBuffer(), sFile.GetSize());
+ CRYPT_ArcFourCryptBlock(sFile.GetBuffer(), sFile.GetSize(), JS_RC4KEY,
+ sizeof(JS_RC4KEY));
+ WriteFileBuffer(m_sFilePath.c_str(), (const FX_CHAR*)sFile.GetBuffer(),
+ sFile.GetSize());
}
-void CJS_GlobalData::LoadFileBuffer(const FX_WCHAR* sFilePath, uint8_t*& pBuffer, int32_t& nLength)
-{
-//UnSupport.
+void CJS_GlobalData::LoadFileBuffer(const FX_WCHAR* sFilePath,
+ uint8_t*& pBuffer,
+ int32_t& nLength) {
+ // UnSupport.
}
-void CJS_GlobalData::WriteFileBuffer(const FX_WCHAR* sFilePath, const FX_CHAR* pBuffer, int32_t nLength)
-{
-//UnSupport.
+void CJS_GlobalData::WriteFileBuffer(const FX_WCHAR* sFilePath,
+ const FX_CHAR* pBuffer,
+ int32_t nLength) {
+ // UnSupport.
}
-void CJS_GlobalData::MakeByteString(const CFX_ByteString& name, CJS_KeyValue* pData, CFX_BinaryBuf& sData)
-{
- FX_WORD wType = (FX_WORD)pData->nType;
- switch (wType)
- {
- case JS_GLOBALDATA_TYPE_NUMBER:
- {
- FX_DWORD dwNameLen = (FX_DWORD)name.GetLength();
- sData.AppendBlock(&dwNameLen, sizeof(FX_DWORD));
- sData.AppendString(name);
- sData.AppendBlock(&wType, sizeof(FX_WORD));
-
- double dData = pData->dData;
- sData.AppendBlock(&dData, sizeof(double));
- }
- break;
- case JS_GLOBALDATA_TYPE_BOOLEAN:
- {
- FX_DWORD dwNameLen = (FX_DWORD)name.GetLength();
- sData.AppendBlock(&dwNameLen, sizeof(FX_DWORD));
- sData.AppendString(name);
- sData.AppendBlock(&wType, sizeof(FX_WORD));
-
- FX_WORD wData = (FX_WORD)pData->bData;
- sData.AppendBlock(&wData, sizeof(FX_WORD));
- }
- break;
- case JS_GLOBALDATA_TYPE_STRING:
- {
- FX_DWORD dwNameLen = (FX_DWORD)name.GetLength();
- sData.AppendBlock(&dwNameLen, sizeof(FX_DWORD));
- sData.AppendString(name);
- sData.AppendBlock(&wType, sizeof(FX_WORD));
-
- FX_DWORD dwDataLen = (FX_DWORD)pData->sData.GetLength();
- sData.AppendBlock(&dwDataLen, sizeof(FX_DWORD));
- sData.AppendString(pData->sData);
- }
- break;
- case JS_GLOBALDATA_TYPE_NULL:
- {
- FX_DWORD dwNameLen = (FX_DWORD)name.GetLength();
- sData.AppendBlock(&dwNameLen, sizeof(FX_DWORD));
- sData.AppendString(name);
- sData.AppendBlock(&wType, sizeof(FX_DWORD));
- }
- break;
+void CJS_GlobalData::MakeByteString(const CFX_ByteString& name,
+ CJS_KeyValue* pData,
+ CFX_BinaryBuf& sData) {
+ FX_WORD wType = (FX_WORD)pData->nType;
+ switch (wType) {
+ case JS_GLOBALDATA_TYPE_NUMBER: {
+ FX_DWORD dwNameLen = (FX_DWORD)name.GetLength();
+ sData.AppendBlock(&dwNameLen, sizeof(FX_DWORD));
+ sData.AppendString(name);
+ sData.AppendBlock(&wType, sizeof(FX_WORD));
+
+ double dData = pData->dData;
+ sData.AppendBlock(&dData, sizeof(double));
+ } break;
+ case JS_GLOBALDATA_TYPE_BOOLEAN: {
+ FX_DWORD dwNameLen = (FX_DWORD)name.GetLength();
+ sData.AppendBlock(&dwNameLen, sizeof(FX_DWORD));
+ sData.AppendString(name);
+ sData.AppendBlock(&wType, sizeof(FX_WORD));
+
+ FX_WORD wData = (FX_WORD)pData->bData;
+ sData.AppendBlock(&wData, sizeof(FX_WORD));
+ } break;
+ case JS_GLOBALDATA_TYPE_STRING: {
+ FX_DWORD dwNameLen = (FX_DWORD)name.GetLength();
+ sData.AppendBlock(&dwNameLen, sizeof(FX_DWORD));
+ sData.AppendString(name);
+ sData.AppendBlock(&wType, sizeof(FX_WORD));
+
+ FX_DWORD dwDataLen = (FX_DWORD)pData->sData.GetLength();
+ sData.AppendBlock(&dwDataLen, sizeof(FX_DWORD));
+ sData.AppendString(pData->sData);
+ } break;
+ case JS_GLOBALDATA_TYPE_NULL: {
+ FX_DWORD dwNameLen = (FX_DWORD)name.GetLength();
+ sData.AppendBlock(&dwNameLen, sizeof(FX_DWORD));
+ sData.AppendString(name);
+ sData.AppendBlock(&wType, sizeof(FX_DWORD));
+ } break;
default:
- break;
- }
+ break;
+ }
}
-
diff --git a/fpdfsdk/src/javascript/JS_Object.cpp b/fpdfsdk/src/javascript/JS_Object.cpp
index 7a1b150ad8..eb089ed563 100644
--- a/fpdfsdk/src/javascript/JS_Object.cpp
+++ b/fpdfsdk/src/javascript/JS_Object.cpp
@@ -10,137 +10,130 @@
#include "../../include/javascript/JS_Object.h"
#include "../../include/javascript/JS_Context.h"
-JS_TIMER_MAPARRAY& GetTimeMap()
-{
+JS_TIMER_MAPARRAY& GetTimeMap() {
// Leak the timer array at shutdown.
static auto* timeMap = new JS_TIMER_MAPARRAY;
return *timeMap;
}
-int FXJS_MsgBox(CPDFDoc_Environment* pApp, CPDFSDK_PageView* pPageView, const FX_WCHAR* swMsg, const FX_WCHAR* swTitle, FX_UINT nType, FX_UINT nIcon)
-{
- if (!pApp)
- return 0;
+int FXJS_MsgBox(CPDFDoc_Environment* pApp,
+ CPDFSDK_PageView* pPageView,
+ const FX_WCHAR* swMsg,
+ const FX_WCHAR* swTitle,
+ FX_UINT nType,
+ FX_UINT nIcon) {
+ if (!pApp)
+ return 0;
- if (CPDFSDK_Document* pDoc = pApp->GetSDKDocument())
- pDoc->KillFocusAnnot();
+ if (CPDFSDK_Document* pDoc = pApp->GetSDKDocument())
+ pDoc->KillFocusAnnot();
- return pApp->JS_appAlert(swMsg, swTitle, nType, nIcon);
+ return pApp->JS_appAlert(swMsg, swTitle, nType, nIcon);
}
-CPDFSDK_PageView* FXJS_GetPageView(IFXJS_Context* cc)
-{
- if (CJS_Context* pContext = (CJS_Context *)cc)
- {
- if (pContext->GetReaderDocument())
- return NULL;
- }
- return NULL;
+CPDFSDK_PageView* FXJS_GetPageView(IFXJS_Context* cc) {
+ if (CJS_Context* pContext = (CJS_Context*)cc) {
+ if (pContext->GetReaderDocument())
+ return NULL;
+ }
+ return NULL;
}
-/* --------------------------------- CJS_EmbedObj --------------------------------- */
+/* --------------------------------- CJS_EmbedObj
+ * --------------------------------- */
-CJS_EmbedObj::CJS_EmbedObj(CJS_Object* pJSObject) :
- m_pJSObject(pJSObject)
-{
-}
-
-CJS_EmbedObj::~CJS_EmbedObj()
-{
- m_pJSObject = NULL;
+CJS_EmbedObj::CJS_EmbedObj(CJS_Object* pJSObject) : m_pJSObject(pJSObject) {}
+CJS_EmbedObj::~CJS_EmbedObj() {
+ m_pJSObject = NULL;
}
-CPDFSDK_PageView* CJS_EmbedObj::JSGetPageView(IFXJS_Context* cc)
-{
- return FXJS_GetPageView(cc);
+CPDFSDK_PageView* CJS_EmbedObj::JSGetPageView(IFXJS_Context* cc) {
+ return FXJS_GetPageView(cc);
}
-int CJS_EmbedObj::MsgBox(CPDFDoc_Environment* pApp, CPDFSDK_PageView* pPageView,const FX_WCHAR* swMsg,const FX_WCHAR* swTitle,FX_UINT nType,FX_UINT nIcon)
-{
- return FXJS_MsgBox(pApp, pPageView, swMsg, swTitle, nType, nIcon);
+int CJS_EmbedObj::MsgBox(CPDFDoc_Environment* pApp,
+ CPDFSDK_PageView* pPageView,
+ const FX_WCHAR* swMsg,
+ const FX_WCHAR* swTitle,
+ FX_UINT nType,
+ FX_UINT nIcon) {
+ return FXJS_MsgBox(pApp, pPageView, swMsg, swTitle, nType, nIcon);
}
-void CJS_EmbedObj::Alert(CJS_Context* pContext, const FX_WCHAR* swMsg)
-{
- CJS_Object::Alert(pContext, swMsg);
+void CJS_EmbedObj::Alert(CJS_Context* pContext, const FX_WCHAR* swMsg) {
+ CJS_Object::Alert(pContext, swMsg);
}
-CJS_Timer* CJS_EmbedObj::BeginTimer(CPDFDoc_Environment * pApp,FX_UINT nElapse)
-{
- CJS_Timer* pTimer = new CJS_Timer(this,pApp);
- pTimer->SetJSTimer(nElapse);
+CJS_Timer* CJS_EmbedObj::BeginTimer(CPDFDoc_Environment* pApp,
+ FX_UINT nElapse) {
+ CJS_Timer* pTimer = new CJS_Timer(this, pApp);
+ pTimer->SetJSTimer(nElapse);
- return pTimer;
+ return pTimer;
}
-void CJS_EmbedObj::EndTimer(CJS_Timer* pTimer)
-{
- ASSERT(pTimer != NULL);
- pTimer->KillJSTimer();
- delete pTimer;
+void CJS_EmbedObj::EndTimer(CJS_Timer* pTimer) {
+ ASSERT(pTimer != NULL);
+ pTimer->KillJSTimer();
+ delete pTimer;
}
-/* --------------------------------- CJS_Object --------------------------------- */
-void FreeObject(const v8::WeakCallbackInfo<CJS_Object>& data)
-{
- CJS_Object* pJSObj = data.GetParameter();
- pJSObj->ExitInstance();
- delete pJSObj;
- JS_FreePrivate(data.GetInternalField(0));
+/* --------------------------------- CJS_Object
+ * --------------------------------- */
+void FreeObject(const v8::WeakCallbackInfo<CJS_Object>& data) {
+ CJS_Object* pJSObj = data.GetParameter();
+ pJSObj->ExitInstance();
+ delete pJSObj;
+ JS_FreePrivate(data.GetInternalField(0));
}
-void DisposeObject(const v8::WeakCallbackInfo<CJS_Object>& data)
-{
- CJS_Object* pJSObj = data.GetParameter();
- pJSObj->Dispose();
- data.SetSecondPassCallback(FreeObject);
+void DisposeObject(const v8::WeakCallbackInfo<CJS_Object>& data) {
+ CJS_Object* pJSObj = data.GetParameter();
+ pJSObj->Dispose();
+ data.SetSecondPassCallback(FreeObject);
}
-CJS_Object::CJS_Object(JSFXObject pObject) :m_pEmbedObj(NULL)
-{
- v8::Local<v8::Context> context = pObject->CreationContext();
- m_pIsolate = context->GetIsolate();
- m_pObject.Reset(m_pIsolate, pObject);
+CJS_Object::CJS_Object(JSFXObject pObject) : m_pEmbedObj(NULL) {
+ v8::Local<v8::Context> context = pObject->CreationContext();
+ m_pIsolate = context->GetIsolate();
+ m_pObject.Reset(m_pIsolate, pObject);
};
-CJS_Object::~CJS_Object(void)
-{
- delete m_pEmbedObj;
- m_pEmbedObj = NULL;
+CJS_Object::~CJS_Object(void) {
+ delete m_pEmbedObj;
+ m_pEmbedObj = NULL;
- m_pObject.Reset();
+ m_pObject.Reset();
};
-void CJS_Object::MakeWeak()
-{
- m_pObject.SetWeak(
- this, DisposeObject, v8::WeakCallbackType::kInternalFields);
+void CJS_Object::MakeWeak() {
+ m_pObject.SetWeak(this, DisposeObject, v8::WeakCallbackType::kInternalFields);
}
-void CJS_Object::Dispose()
-{
- m_pObject.Reset();
+void CJS_Object::Dispose() {
+ m_pObject.Reset();
}
-CPDFSDK_PageView* CJS_Object::JSGetPageView(IFXJS_Context* cc)
-{
- return FXJS_GetPageView(cc);
+CPDFSDK_PageView* CJS_Object::JSGetPageView(IFXJS_Context* cc) {
+ return FXJS_GetPageView(cc);
}
-int CJS_Object::MsgBox(CPDFDoc_Environment* pApp, CPDFSDK_PageView* pPageView, const FX_WCHAR* swMsg, const FX_WCHAR* swTitle, FX_UINT nType, FX_UINT nIcon)
-{
- return FXJS_MsgBox(pApp, pPageView, swMsg, swTitle, nType, nIcon);
+int CJS_Object::MsgBox(CPDFDoc_Environment* pApp,
+ CPDFSDK_PageView* pPageView,
+ const FX_WCHAR* swMsg,
+ const FX_WCHAR* swTitle,
+ FX_UINT nType,
+ FX_UINT nIcon) {
+ return FXJS_MsgBox(pApp, pPageView, swMsg, swTitle, nType, nIcon);
}
-void CJS_Object::Alert(CJS_Context* pContext, const FX_WCHAR* swMsg)
-{
- ASSERT(pContext != NULL);
+void CJS_Object::Alert(CJS_Context* pContext, const FX_WCHAR* swMsg) {
+ ASSERT(pContext != NULL);
- if (pContext->IsMsgBoxEnabled())
- {
- CPDFDoc_Environment* pApp = pContext->GetReaderApp();
- if(pApp)
- pApp->JS_appAlert(swMsg, NULL, 0, 3);
- }
+ if (pContext->IsMsgBoxEnabled()) {
+ CPDFDoc_Environment* pApp = pContext->GetReaderApp();
+ if (pApp)
+ pApp->JS_appAlert(swMsg, NULL, 0, 3);
+ }
}
diff --git a/fpdfsdk/src/javascript/JS_Runtime.cpp b/fpdfsdk/src/javascript/JS_Runtime.cpp
index 485cd27813..08cd87c768 100644
--- a/fpdfsdk/src/javascript/JS_Runtime.cpp
+++ b/fpdfsdk/src/javascript/JS_Runtime.cpp
@@ -27,320 +27,308 @@
#include "../../include/javascript/global.h"
#include "../../include/javascript/console.h"
-CJS_RuntimeFactory::~CJS_RuntimeFactory()
-{
-}
-
-IFXJS_Runtime* CJS_RuntimeFactory::NewJSRuntime(CPDFDoc_Environment* pApp)
-{
- if (!m_bInit)
- {
- unsigned int embedderDataSlot = 0;
- if (pApp->GetFormFillInfo()->m_pJsPlatform->version >= 2) {
- embedderDataSlot = pApp->GetFormFillInfo()->m_pJsPlatform->m_v8EmbedderSlot;
- }
- JS_Initial(embedderDataSlot);
- m_bInit = TRUE;
+CJS_RuntimeFactory::~CJS_RuntimeFactory() {}
+
+IFXJS_Runtime* CJS_RuntimeFactory::NewJSRuntime(CPDFDoc_Environment* pApp) {
+ if (!m_bInit) {
+ unsigned int embedderDataSlot = 0;
+ if (pApp->GetFormFillInfo()->m_pJsPlatform->version >= 2) {
+ embedderDataSlot =
+ pApp->GetFormFillInfo()->m_pJsPlatform->m_v8EmbedderSlot;
}
- return new CJS_Runtime(pApp);
+ JS_Initial(embedderDataSlot);
+ m_bInit = TRUE;
+ }
+ return new CJS_Runtime(pApp);
}
-void CJS_RuntimeFactory::AddRef()
-{
- //to do.Should be implemented as atom manipulation.
- m_nRef++;
+void CJS_RuntimeFactory::AddRef() {
+ // to do.Should be implemented as atom manipulation.
+ m_nRef++;
}
-void CJS_RuntimeFactory::Release()
-{
- if(m_bInit)
- {
- //to do.Should be implemented as atom manipulation.
- if (--m_nRef == 0)
- {
- JS_Release();
- ReleaseGlobalData();
- m_bInit = FALSE;
- }
+void CJS_RuntimeFactory::Release() {
+ if (m_bInit) {
+ // to do.Should be implemented as atom manipulation.
+ if (--m_nRef == 0) {
+ JS_Release();
+ ReleaseGlobalData();
+ m_bInit = FALSE;
}
+ }
}
-void CJS_RuntimeFactory::DeleteJSRuntime(IFXJS_Runtime* pRuntime)
-{
- delete (CJS_Runtime*)pRuntime;
+void CJS_RuntimeFactory::DeleteJSRuntime(IFXJS_Runtime* pRuntime) {
+ delete (CJS_Runtime*)pRuntime;
}
-CJS_GlobalData* CJS_RuntimeFactory::NewGlobalData(CPDFDoc_Environment* pApp)
-{
- if (m_pGlobalData)
- {
- m_nGlobalDataCount++;
- return m_pGlobalData;
- }
- m_nGlobalDataCount = 1;
- m_pGlobalData = new CJS_GlobalData(pApp);
+CJS_GlobalData* CJS_RuntimeFactory::NewGlobalData(CPDFDoc_Environment* pApp) {
+ if (m_pGlobalData) {
+ m_nGlobalDataCount++;
return m_pGlobalData;
+ }
+ m_nGlobalDataCount = 1;
+ m_pGlobalData = new CJS_GlobalData(pApp);
+ return m_pGlobalData;
}
-void CJS_RuntimeFactory::ReleaseGlobalData()
-{
- m_nGlobalDataCount--;
+void CJS_RuntimeFactory::ReleaseGlobalData() {
+ m_nGlobalDataCount--;
- if (m_nGlobalDataCount <= 0)
- {
- delete m_pGlobalData;
- m_pGlobalData = NULL;
- }
+ if (m_nGlobalDataCount <= 0) {
+ delete m_pGlobalData;
+ m_pGlobalData = NULL;
+ }
}
void* CJS_ArrayBufferAllocator::Allocate(size_t length) {
- return calloc(1, length);
+ return calloc(1, length);
}
void* CJS_ArrayBufferAllocator::AllocateUninitialized(size_t length) {
- return malloc(length);
+ return malloc(length);
}
void CJS_ArrayBufferAllocator::Free(void* data, size_t length) {
- free(data);
+ free(data);
}
/* ------------------------------ CJS_Runtime ------------------------------ */
-CJS_Runtime::CJS_Runtime(CPDFDoc_Environment * pApp) :
- m_pApp(pApp),
- m_pDocument(NULL),
- m_bBlocking(FALSE),
- m_pFieldEventPath(NULL),
- m_isolate(NULL)
-{
- if (m_pApp->GetFormFillInfo()->m_pJsPlatform->version >= 2) {
- m_isolate = reinterpret_cast<v8::Isolate*>(m_pApp->GetFormFillInfo()->m_pJsPlatform->m_isolate);
- }
- if (!m_isolate) {
- m_pArrayBufferAllocator.reset(new CJS_ArrayBufferAllocator());
-
- v8::Isolate::CreateParams params;
- params.array_buffer_allocator = m_pArrayBufferAllocator.get();
- m_isolate = v8::Isolate::New(params);
- }
-
- InitJSObjects();
-
- CJS_Context * pContext = (CJS_Context*)NewContext();
- JS_InitialRuntime(*this, this, pContext, m_context);
- ReleaseContext(pContext);
+CJS_Runtime::CJS_Runtime(CPDFDoc_Environment* pApp)
+ : m_pApp(pApp),
+ m_pDocument(NULL),
+ m_bBlocking(FALSE),
+ m_pFieldEventPath(NULL),
+ m_isolate(NULL) {
+ if (m_pApp->GetFormFillInfo()->m_pJsPlatform->version >= 2) {
+ m_isolate = reinterpret_cast<v8::Isolate*>(
+ m_pApp->GetFormFillInfo()->m_pJsPlatform->m_isolate);
+ }
+ if (!m_isolate) {
+ m_pArrayBufferAllocator.reset(new CJS_ArrayBufferAllocator());
+
+ v8::Isolate::CreateParams params;
+ params.array_buffer_allocator = m_pArrayBufferAllocator.get();
+ m_isolate = v8::Isolate::New(params);
+ }
+
+ InitJSObjects();
+
+ CJS_Context* pContext = (CJS_Context*)NewContext();
+ JS_InitialRuntime(*this, this, pContext, m_context);
+ ReleaseContext(pContext);
}
-CJS_Runtime::~CJS_Runtime()
-{
- for (int i=0, sz=m_ContextArray.GetSize(); i<sz; i++)
- delete m_ContextArray.GetAt(i);
+CJS_Runtime::~CJS_Runtime() {
+ for (int i = 0, sz = m_ContextArray.GetSize(); i < sz; i++)
+ delete m_ContextArray.GetAt(i);
- m_ContextArray.RemoveAll();
+ m_ContextArray.RemoveAll();
- JS_ReleaseRuntime(*this, m_context);
+ JS_ReleaseRuntime(*this, m_context);
- RemoveEventsInLoop(m_pFieldEventPath);
+ RemoveEventsInLoop(m_pFieldEventPath);
- m_pApp = NULL;
- m_pDocument = NULL;
- m_pFieldEventPath = NULL;
- m_context.Reset();
+ m_pApp = NULL;
+ m_pDocument = NULL;
+ m_pFieldEventPath = NULL;
+ m_context.Reset();
- //m_isolate->Exit();
- m_isolate->Dispose();
+ // m_isolate->Exit();
+ m_isolate->Dispose();
}
-FX_BOOL CJS_Runtime::InitJSObjects()
-{
- v8::Isolate::Scope isolate_scope(GetIsolate());
- v8::HandleScope handle_scope(GetIsolate());
- v8::Local<v8::Context> context = v8::Context::New(GetIsolate());
- v8::Context::Scope context_scope(context);
- //0 - 8
- if (CJS_Border::Init(*this, JS_STATIC) < 0) return FALSE;
- if (CJS_Display::Init(*this, JS_STATIC) < 0) return FALSE;
- if (CJS_Font::Init(*this, JS_STATIC) < 0) return FALSE;
- if (CJS_Highlight::Init(*this, JS_STATIC) < 0) return FALSE;
- if (CJS_Position::Init(*this, JS_STATIC) < 0) return FALSE;
- if (CJS_ScaleHow::Init(*this, JS_STATIC) < 0) return FALSE;
- if (CJS_ScaleWhen::Init(*this, JS_STATIC) < 0) return FALSE;
- if (CJS_Style::Init(*this, JS_STATIC) < 0) return FALSE;
- if (CJS_Zoomtype::Init(*this, JS_STATIC) < 0) return FALSE;
-
- //9 - 11
- if (CJS_App::Init(*this, JS_STATIC) < 0) return FALSE;
- if (CJS_Color::Init(*this, JS_STATIC) < 0) return FALSE;
- if (CJS_Console::Init(*this, JS_STATIC) < 0) return FALSE;
-
- //12 - 14
- if (CJS_Document::Init(*this, JS_DYNAMIC) < 0) return FALSE;
- if (CJS_Event::Init(*this, JS_STATIC) < 0) return FALSE;
- if (CJS_Field::Init(*this, JS_DYNAMIC) < 0) return FALSE;
-
- //15 - 17
- if (CJS_Global::Init(*this, JS_STATIC) < 0) return FALSE;
- if (CJS_Icon::Init(*this, JS_DYNAMIC) < 0) return FALSE;
- if (CJS_Util::Init(*this, JS_STATIC) < 0) return FALSE;
-
- if (CJS_PublicMethods::Init(*this) < 0) return FALSE;
- if (CJS_GlobalConsts::Init(*this) < 0) return FALSE;
- if (CJS_GlobalArrays::Init(*this) < 0) return FALSE;
-
- if (CJS_TimerObj::Init(*this, JS_DYNAMIC) < 0) return FALSE;
- if (CJS_PrintParamsObj::Init(*this, JS_DYNAMIC) <0) return FALSE;
-
- return TRUE;
+FX_BOOL CJS_Runtime::InitJSObjects() {
+ v8::Isolate::Scope isolate_scope(GetIsolate());
+ v8::HandleScope handle_scope(GetIsolate());
+ v8::Local<v8::Context> context = v8::Context::New(GetIsolate());
+ v8::Context::Scope context_scope(context);
+ // 0 - 8
+ if (CJS_Border::Init(*this, JS_STATIC) < 0)
+ return FALSE;
+ if (CJS_Display::Init(*this, JS_STATIC) < 0)
+ return FALSE;
+ if (CJS_Font::Init(*this, JS_STATIC) < 0)
+ return FALSE;
+ if (CJS_Highlight::Init(*this, JS_STATIC) < 0)
+ return FALSE;
+ if (CJS_Position::Init(*this, JS_STATIC) < 0)
+ return FALSE;
+ if (CJS_ScaleHow::Init(*this, JS_STATIC) < 0)
+ return FALSE;
+ if (CJS_ScaleWhen::Init(*this, JS_STATIC) < 0)
+ return FALSE;
+ if (CJS_Style::Init(*this, JS_STATIC) < 0)
+ return FALSE;
+ if (CJS_Zoomtype::Init(*this, JS_STATIC) < 0)
+ return FALSE;
+
+ // 9 - 11
+ if (CJS_App::Init(*this, JS_STATIC) < 0)
+ return FALSE;
+ if (CJS_Color::Init(*this, JS_STATIC) < 0)
+ return FALSE;
+ if (CJS_Console::Init(*this, JS_STATIC) < 0)
+ return FALSE;
+
+ // 12 - 14
+ if (CJS_Document::Init(*this, JS_DYNAMIC) < 0)
+ return FALSE;
+ if (CJS_Event::Init(*this, JS_STATIC) < 0)
+ return FALSE;
+ if (CJS_Field::Init(*this, JS_DYNAMIC) < 0)
+ return FALSE;
+
+ // 15 - 17
+ if (CJS_Global::Init(*this, JS_STATIC) < 0)
+ return FALSE;
+ if (CJS_Icon::Init(*this, JS_DYNAMIC) < 0)
+ return FALSE;
+ if (CJS_Util::Init(*this, JS_STATIC) < 0)
+ return FALSE;
+
+ if (CJS_PublicMethods::Init(*this) < 0)
+ return FALSE;
+ if (CJS_GlobalConsts::Init(*this) < 0)
+ return FALSE;
+ if (CJS_GlobalArrays::Init(*this) < 0)
+ return FALSE;
+
+ if (CJS_TimerObj::Init(*this, JS_DYNAMIC) < 0)
+ return FALSE;
+ if (CJS_PrintParamsObj::Init(*this, JS_DYNAMIC) < 0)
+ return FALSE;
+
+ return TRUE;
}
-IFXJS_Context* CJS_Runtime::NewContext()
-{
- CJS_Context * p = new CJS_Context(this);
- m_ContextArray.Add(p);
- return p;
+IFXJS_Context* CJS_Runtime::NewContext() {
+ CJS_Context* p = new CJS_Context(this);
+ m_ContextArray.Add(p);
+ return p;
}
-void CJS_Runtime::ReleaseContext(IFXJS_Context * pContext)
-{
- CJS_Context* pJSContext = (CJS_Context*)pContext;
-
- for (int i=0, sz=m_ContextArray.GetSize(); i<sz; i++)
- {
- if (pJSContext == m_ContextArray.GetAt(i))
- {
- delete pJSContext;
- m_ContextArray.RemoveAt(i);
- break;
- }
+void CJS_Runtime::ReleaseContext(IFXJS_Context* pContext) {
+ CJS_Context* pJSContext = (CJS_Context*)pContext;
+
+ for (int i = 0, sz = m_ContextArray.GetSize(); i < sz; i++) {
+ if (pJSContext == m_ContextArray.GetAt(i)) {
+ delete pJSContext;
+ m_ContextArray.RemoveAt(i);
+ break;
}
+ }
}
-IFXJS_Context* CJS_Runtime::GetCurrentContext()
-{
- if(!m_ContextArray.GetSize())
- return NULL;
- return m_ContextArray.GetAt(m_ContextArray.GetSize()-1);
+IFXJS_Context* CJS_Runtime::GetCurrentContext() {
+ if (!m_ContextArray.GetSize())
+ return NULL;
+ return m_ContextArray.GetAt(m_ContextArray.GetSize() - 1);
}
-void CJS_Runtime::SetReaderDocument(CPDFSDK_Document* pReaderDoc)
-{
- if (m_pDocument != pReaderDoc)
- {
- v8::Isolate::Scope isolate_scope(m_isolate);
- v8::HandleScope handle_scope(m_isolate);
- v8::Local<v8::Context> context =v8::Local<v8::Context>::New(m_isolate, m_context);
- v8::Context::Scope context_scope(context);
-
- m_pDocument = pReaderDoc;
-
- if (pReaderDoc)
- {
- JSObject pThis = JS_GetThisObj(*this);
- if(!pThis.IsEmpty())
- {
- if (JS_GetObjDefnID(pThis) == JS_GetObjDefnID(*this, L"Document"))
- {
- if (CJS_Document* pJSDocument = (CJS_Document*)JS_GetPrivate(pThis))
- {
- if (Document * pDocument = (Document*)pJSDocument->GetEmbedObject())
- pDocument->AttachDoc(pReaderDoc);
- }
- }
- }
- JS_SetThisObj(*this, JS_GetObjDefnID(*this, L"Document"));
- }
- else
- {
- JS_SetThisObj(*this, JS_GetObjDefnID(*this, L"app"));
+void CJS_Runtime::SetReaderDocument(CPDFSDK_Document* pReaderDoc) {
+ if (m_pDocument != pReaderDoc) {
+ v8::Isolate::Scope isolate_scope(m_isolate);
+ v8::HandleScope handle_scope(m_isolate);
+ v8::Local<v8::Context> context =
+ v8::Local<v8::Context>::New(m_isolate, m_context);
+ v8::Context::Scope context_scope(context);
+
+ m_pDocument = pReaderDoc;
+
+ if (pReaderDoc) {
+ JSObject pThis = JS_GetThisObj(*this);
+ if (!pThis.IsEmpty()) {
+ if (JS_GetObjDefnID(pThis) == JS_GetObjDefnID(*this, L"Document")) {
+ if (CJS_Document* pJSDocument = (CJS_Document*)JS_GetPrivate(pThis)) {
+ if (Document* pDocument = (Document*)pJSDocument->GetEmbedObject())
+ pDocument->AttachDoc(pReaderDoc);
+ }
}
+ }
+ JS_SetThisObj(*this, JS_GetObjDefnID(*this, L"Document"));
+ } else {
+ JS_SetThisObj(*this, JS_GetObjDefnID(*this, L"app"));
}
+ }
}
-FX_BOOL CJS_Runtime::AddEventToLoop(const CFX_WideString& sTargetName, JS_EVENT_T eEventType)
-{
- if (m_pFieldEventPath == NULL)
- {
- m_pFieldEventPath = new CJS_FieldEvent;
- m_pFieldEventPath->sTargetName = sTargetName;
- m_pFieldEventPath->eEventType = eEventType;
- m_pFieldEventPath->pNext = NULL;
+FX_BOOL CJS_Runtime::AddEventToLoop(const CFX_WideString& sTargetName,
+ JS_EVENT_T eEventType) {
+ if (m_pFieldEventPath == NULL) {
+ m_pFieldEventPath = new CJS_FieldEvent;
+ m_pFieldEventPath->sTargetName = sTargetName;
+ m_pFieldEventPath->eEventType = eEventType;
+ m_pFieldEventPath->pNext = NULL;
- return TRUE;
- }
+ return TRUE;
+ }
- //to search
- CJS_FieldEvent* p = m_pFieldEventPath;
- CJS_FieldEvent* pLast = m_pFieldEventPath;
- while (p)
- {
- if (p->eEventType == eEventType && p->sTargetName == sTargetName)
- return FALSE;
+ // to search
+ CJS_FieldEvent* p = m_pFieldEventPath;
+ CJS_FieldEvent* pLast = m_pFieldEventPath;
+ while (p) {
+ if (p->eEventType == eEventType && p->sTargetName == sTargetName)
+ return FALSE;
- pLast = p;
- p = p->pNext;
- }
+ pLast = p;
+ p = p->pNext;
+ }
- //to add
- CJS_FieldEvent* pNew = new CJS_FieldEvent;
- pNew->sTargetName = sTargetName;
- pNew->eEventType = eEventType;
- pNew->pNext = NULL;
+ // to add
+ CJS_FieldEvent* pNew = new CJS_FieldEvent;
+ pNew->sTargetName = sTargetName;
+ pNew->eEventType = eEventType;
+ pNew->pNext = NULL;
- pLast->pNext = pNew;
+ pLast->pNext = pNew;
- return TRUE;
+ return TRUE;
}
-void CJS_Runtime::RemoveEventInLoop(const CFX_WideString& sTargetName, JS_EVENT_T eEventType)
-{
- FX_BOOL bFind = FALSE;
-
- CJS_FieldEvent* p = m_pFieldEventPath;
- CJS_FieldEvent* pLast = NULL;
- while (p)
- {
- if (p->eEventType == eEventType && p->sTargetName == sTargetName)
- {
- bFind = TRUE;
- break;
- }
+void CJS_Runtime::RemoveEventInLoop(const CFX_WideString& sTargetName,
+ JS_EVENT_T eEventType) {
+ FX_BOOL bFind = FALSE;
- pLast = p;
- p = p->pNext;
+ CJS_FieldEvent* p = m_pFieldEventPath;
+ CJS_FieldEvent* pLast = NULL;
+ while (p) {
+ if (p->eEventType == eEventType && p->sTargetName == sTargetName) {
+ bFind = TRUE;
+ break;
}
- if (bFind)
- {
- RemoveEventsInLoop(p);
+ pLast = p;
+ p = p->pNext;
+ }
- if (p == m_pFieldEventPath)
- m_pFieldEventPath = NULL;
+ if (bFind) {
+ RemoveEventsInLoop(p);
- if (pLast)
- pLast->pNext = NULL;
- }
+ if (p == m_pFieldEventPath)
+ m_pFieldEventPath = NULL;
+
+ if (pLast)
+ pLast->pNext = NULL;
+ }
}
-void CJS_Runtime::RemoveEventsInLoop(CJS_FieldEvent* pStart)
-{
- CJS_FieldEvent* p = pStart;
+void CJS_Runtime::RemoveEventsInLoop(CJS_FieldEvent* pStart) {
+ CJS_FieldEvent* p = pStart;
- while (p)
- {
- CJS_FieldEvent* pOld = p;
- p = pOld->pNext;
+ while (p) {
+ CJS_FieldEvent* pOld = p;
+ p = pOld->pNext;
- delete pOld;
- }
+ delete pOld;
+ }
}
-v8::Local<v8::Context> CJS_Runtime::NewJSContext()
-{
- return v8::Local<v8::Context>::New(m_isolate, m_context);
+v8::Local<v8::Context> CJS_Runtime::NewJSContext() {
+ return v8::Local<v8::Context>::New(m_isolate, m_context);
}
-CFX_WideString ChangeObjName(const CFX_WideString& str)
-{
- CFX_WideString sRet = str;
- sRet.Replace(L"_", L".");
- return sRet;
+CFX_WideString ChangeObjName(const CFX_WideString& str) {
+ CFX_WideString sRet = str;
+ sRet.Replace(L"_", L".");
+ return sRet;
}
diff --git a/fpdfsdk/src/javascript/JS_Value.cpp b/fpdfsdk/src/javascript/JS_Value.cpp
index 058f2eaf45..faa1eeb6fc 100644
--- a/fpdfsdk/src/javascript/JS_Value.cpp
+++ b/fpdfsdk/src/javascript/JS_Value.cpp
@@ -12,651 +12,577 @@
/* ---------------------------- CJS_Value ---------------------------- */
-CJS_Value::CJS_Value(v8::Isolate* isolate) : m_eType(VT_unknown),m_isolate(isolate)
-{
-}
-CJS_Value::CJS_Value(v8::Isolate* isolate, v8::Local<v8::Value> pValue,FXJSVALUETYPE t) :
- m_pValue(pValue), m_eType(t), m_isolate(isolate)
-{
-}
+CJS_Value::CJS_Value(v8::Isolate* isolate)
+ : m_eType(VT_unknown), m_isolate(isolate) {}
+CJS_Value::CJS_Value(v8::Isolate* isolate,
+ v8::Local<v8::Value> pValue,
+ FXJSVALUETYPE t)
+ : m_pValue(pValue), m_eType(t), m_isolate(isolate) {}
-CJS_Value::CJS_Value(v8::Isolate* isolate, const int &iValue):m_isolate(isolate)
-{
- operator =(iValue);
+CJS_Value::CJS_Value(v8::Isolate* isolate, const int& iValue)
+ : m_isolate(isolate) {
+ operator=(iValue);
}
-CJS_Value::CJS_Value(v8::Isolate* isolate, const bool &bValue):m_isolate(isolate)
-{
- operator =(bValue);
+CJS_Value::CJS_Value(v8::Isolate* isolate, const bool& bValue)
+ : m_isolate(isolate) {
+ operator=(bValue);
}
-CJS_Value::CJS_Value(v8::Isolate* isolate, const float &fValue):m_isolate(isolate)
-{
- operator =(fValue);
+CJS_Value::CJS_Value(v8::Isolate* isolate, const float& fValue)
+ : m_isolate(isolate) {
+ operator=(fValue);
}
-CJS_Value::CJS_Value(v8::Isolate* isolate, const double &dValue):m_isolate(isolate)
-{
- operator =(dValue);
+CJS_Value::CJS_Value(v8::Isolate* isolate, const double& dValue)
+ : m_isolate(isolate) {
+ operator=(dValue);
}
-CJS_Value::CJS_Value(v8::Isolate* isolate, JSFXObject pJsObj):m_isolate(isolate)
-{
- operator =(pJsObj);
+CJS_Value::CJS_Value(v8::Isolate* isolate, JSFXObject pJsObj)
+ : m_isolate(isolate) {
+ operator=(pJsObj);
}
-CJS_Value::CJS_Value(v8::Isolate* isolate, CJS_Object* pJsObj):m_isolate(isolate)
-{
- operator =(pJsObj);
+CJS_Value::CJS_Value(v8::Isolate* isolate, CJS_Object* pJsObj)
+ : m_isolate(isolate) {
+ operator=(pJsObj);
}
-CJS_Value::CJS_Value(v8::Isolate* isolate, CJS_Document* pJsDoc):m_isolate(isolate)
-{
- m_eType = VT_object;
- if (pJsDoc)
- m_pValue = (JSFXObject)*pJsDoc;
+CJS_Value::CJS_Value(v8::Isolate* isolate, CJS_Document* pJsDoc)
+ : m_isolate(isolate) {
+ m_eType = VT_object;
+ if (pJsDoc)
+ m_pValue = (JSFXObject)*pJsDoc;
}
-CJS_Value::CJS_Value(v8::Isolate* isolate, const FX_WCHAR* pWstr):m_isolate(isolate)
-{
- operator =(pWstr);
+CJS_Value::CJS_Value(v8::Isolate* isolate, const FX_WCHAR* pWstr)
+ : m_isolate(isolate) {
+ operator=(pWstr);
}
-CJS_Value::CJS_Value(v8::Isolate* isolate, const FX_CHAR* pStr):m_isolate(isolate)
-{
- operator = (pStr);
+CJS_Value::CJS_Value(v8::Isolate* isolate, const FX_CHAR* pStr)
+ : m_isolate(isolate) {
+ operator=(pStr);
}
-CJS_Value::CJS_Value(v8::Isolate* isolate, CJS_Array& array):m_isolate(isolate)
-{
- operator = (array);
+CJS_Value::CJS_Value(v8::Isolate* isolate, CJS_Array& array)
+ : m_isolate(isolate) {
+ operator=(array);
}
-CJS_Value::~CJS_Value()
-{
-}
+CJS_Value::~CJS_Value() {}
-void CJS_Value::Attach(v8::Local<v8::Value> pValue,FXJSVALUETYPE t)
-{
- m_pValue = pValue;
- m_eType = t;
+void CJS_Value::Attach(v8::Local<v8::Value> pValue, FXJSVALUETYPE t) {
+ m_pValue = pValue;
+ m_eType = t;
}
-void CJS_Value::Attach(CJS_Value *pValue)
-{
- if (pValue)
- Attach(pValue->ToV8Value(), pValue->GetType());
+void CJS_Value::Attach(CJS_Value* pValue) {
+ if (pValue)
+ Attach(pValue->ToV8Value(), pValue->GetType());
}
-void CJS_Value::Detach()
-{
- m_pValue = v8::Local<v8::Value>();
- m_eType = VT_unknown;
+void CJS_Value::Detach() {
+ m_pValue = v8::Local<v8::Value>();
+ m_eType = VT_unknown;
}
-/* ---------------------------------------------------------------------------------------- */
+/* ----------------------------------------------------------------------------------------
+ */
-int CJS_Value::ToInt() const
-{
- return JS_ToInt32(m_isolate, m_pValue);
+int CJS_Value::ToInt() const {
+ return JS_ToInt32(m_isolate, m_pValue);
}
-bool CJS_Value::ToBool() const
-{
- return JS_ToBoolean(m_isolate, m_pValue);
+bool CJS_Value::ToBool() const {
+ return JS_ToBoolean(m_isolate, m_pValue);
}
-double CJS_Value::ToDouble() const
-{
- return JS_ToNumber(m_isolate, m_pValue);
+double CJS_Value::ToDouble() const {
+ return JS_ToNumber(m_isolate, m_pValue);
}
-float CJS_Value::ToFloat() const
-{
- return (float)ToDouble();
+float CJS_Value::ToFloat() const {
+ return (float)ToDouble();
}
-CJS_Object* CJS_Value::ToCJSObject() const
-{
- v8::Local<v8::Object> pObj = JS_ToObject(m_isolate, m_pValue);
- return (CJS_Object*)JS_GetPrivate(m_isolate, pObj);
+CJS_Object* CJS_Value::ToCJSObject() const {
+ v8::Local<v8::Object> pObj = JS_ToObject(m_isolate, m_pValue);
+ return (CJS_Object*)JS_GetPrivate(m_isolate, pObj);
}
-v8::Local<v8::Object> CJS_Value::ToV8Object() const
-{
- return JS_ToObject(m_isolate, m_pValue);
+v8::Local<v8::Object> CJS_Value::ToV8Object() const {
+ return JS_ToObject(m_isolate, m_pValue);
}
-CFX_WideString CJS_Value::ToCFXWideString() const
-{
- return JS_ToString(m_isolate, m_pValue);
+CFX_WideString CJS_Value::ToCFXWideString() const {
+ return JS_ToString(m_isolate, m_pValue);
}
-CFX_ByteString CJS_Value::ToCFXByteString() const
-{
- return CFX_ByteString::FromUnicode(ToCFXWideString());
+CFX_ByteString CJS_Value::ToCFXByteString() const {
+ return CFX_ByteString::FromUnicode(ToCFXWideString());
}
-v8::Local<v8::Value> CJS_Value::ToV8Value() const
-{
- return m_pValue;
+v8::Local<v8::Value> CJS_Value::ToV8Value() const {
+ return m_pValue;
}
-v8::Local<v8::Array>CJS_Value::ToV8Array() const
-{
- if (IsArrayObject())
- return v8::Local<v8::Array>::Cast(JS_ToObject(m_isolate, m_pValue));
- return v8::Local<v8::Array>();
+v8::Local<v8::Array> CJS_Value::ToV8Array() const {
+ if (IsArrayObject())
+ return v8::Local<v8::Array>::Cast(JS_ToObject(m_isolate, m_pValue));
+ return v8::Local<v8::Array>();
}
-/* ---------------------------------------------------------------------------------------- */
+/* ----------------------------------------------------------------------------------------
+ */
-void CJS_Value::operator =(int iValue)
-{
- m_pValue = JS_NewNumber(m_isolate, iValue);
+void CJS_Value::operator=(int iValue) {
+ m_pValue = JS_NewNumber(m_isolate, iValue);
- m_eType = VT_number;
+ m_eType = VT_number;
}
-void CJS_Value::operator =(bool bValue)
-{
- m_pValue = JS_NewBoolean(m_isolate, bValue);
+void CJS_Value::operator=(bool bValue) {
+ m_pValue = JS_NewBoolean(m_isolate, bValue);
- m_eType = VT_boolean;
+ m_eType = VT_boolean;
}
-void CJS_Value::operator =(double dValue)
-{
- m_pValue = JS_NewNumber(m_isolate,dValue);
+void CJS_Value::operator=(double dValue) {
+ m_pValue = JS_NewNumber(m_isolate, dValue);
- m_eType = VT_number;
+ m_eType = VT_number;
}
-void CJS_Value::operator = (float fValue)
-{
- m_pValue = JS_NewNumber(m_isolate,fValue);
- m_eType = VT_number;
+void CJS_Value::operator=(float fValue) {
+ m_pValue = JS_NewNumber(m_isolate, fValue);
+ m_eType = VT_number;
}
-void CJS_Value::operator =(v8::Local<v8::Object> pObj)
-{
+void CJS_Value::operator=(v8::Local<v8::Object> pObj) {
+ m_pValue = JS_NewObject(m_isolate, pObj);
- m_pValue = JS_NewObject(m_isolate,pObj);
-
- m_eType = VT_fxobject;
+ m_eType = VT_fxobject;
}
-void CJS_Value::operator =(CJS_Object * pObj)
-{
- if (pObj)
- operator = ((JSFXObject)*pObj);
+void CJS_Value::operator=(CJS_Object* pObj) {
+ if (pObj)
+ operator=((JSFXObject)*pObj);
}
-void CJS_Value::operator = (CJS_Document* pJsDoc)
-{
- m_eType = VT_object;
- if (pJsDoc) {
- m_pValue = static_cast<JSFXObject>(*pJsDoc);
- }
+void CJS_Value::operator=(CJS_Document* pJsDoc) {
+ m_eType = VT_object;
+ if (pJsDoc) {
+ m_pValue = static_cast<JSFXObject>(*pJsDoc);
+ }
}
-void CJS_Value::operator =(const FX_WCHAR* pWstr)
-{
- m_pValue = JS_NewString(m_isolate,(wchar_t *)pWstr);
+void CJS_Value::operator=(const FX_WCHAR* pWstr) {
+ m_pValue = JS_NewString(m_isolate, (wchar_t*)pWstr);
- m_eType = VT_string;
+ m_eType = VT_string;
}
-void CJS_Value::SetNull()
-{
- m_pValue = JS_NewNull();
+void CJS_Value::SetNull() {
+ m_pValue = JS_NewNull();
- m_eType = VT_null;
+ m_eType = VT_null;
}
-void CJS_Value::operator = (const FX_CHAR* pStr)
-{
- operator = (CFX_WideString::FromLocal(pStr).c_str());
+void CJS_Value::operator=(const FX_CHAR* pStr) {
+ operator=(CFX_WideString::FromLocal(pStr).c_str());
}
-void CJS_Value::operator = (CJS_Array & array)
-{
- m_pValue = JS_NewObject2(m_isolate,(v8::Local<v8::Array>)array);
+void CJS_Value::operator=(CJS_Array& array) {
+ m_pValue = JS_NewObject2(m_isolate, (v8::Local<v8::Array>)array);
- m_eType = VT_object;
+ m_eType = VT_object;
}
-void CJS_Value::operator = (CJS_Date & date)
-{
- m_pValue = JS_NewDate(m_isolate, (double)date);
+void CJS_Value::operator=(CJS_Date& date) {
+ m_pValue = JS_NewDate(m_isolate, (double)date);
- m_eType = VT_date;
+ m_eType = VT_date;
}
-void CJS_Value::operator = (CJS_Value value)
-{
- m_pValue = value.ToV8Value();
+void CJS_Value::operator=(CJS_Value value) {
+ m_pValue = value.ToV8Value();
- m_eType = value.m_eType;
- m_isolate = value.m_isolate;
+ m_eType = value.m_eType;
+ m_isolate = value.m_isolate;
}
-/* ---------------------------------------------------------------------------------------- */
+/* ----------------------------------------------------------------------------------------
+ */
-FXJSVALUETYPE CJS_Value::GetType() const
-{
- if(m_pValue.IsEmpty()) return VT_unknown;
- if(m_pValue->IsString()) return VT_string;
- if(m_pValue->IsNumber()) return VT_number;
- if(m_pValue->IsBoolean()) return VT_boolean;
- if(m_pValue->IsDate()) return VT_date;
- if(m_pValue->IsObject()) return VT_object;
- if(m_pValue->IsNull()) return VT_null;
- if(m_pValue->IsUndefined()) return VT_undefined;
- return VT_unknown;
+FXJSVALUETYPE CJS_Value::GetType() const {
+ if (m_pValue.IsEmpty())
+ return VT_unknown;
+ if (m_pValue->IsString())
+ return VT_string;
+ if (m_pValue->IsNumber())
+ return VT_number;
+ if (m_pValue->IsBoolean())
+ return VT_boolean;
+ if (m_pValue->IsDate())
+ return VT_date;
+ if (m_pValue->IsObject())
+ return VT_object;
+ if (m_pValue->IsNull())
+ return VT_null;
+ if (m_pValue->IsUndefined())
+ return VT_undefined;
+ return VT_unknown;
}
-FX_BOOL CJS_Value::IsArrayObject() const
-{
- if(m_pValue.IsEmpty()) return FALSE;
- return m_pValue->IsArray();
+FX_BOOL CJS_Value::IsArrayObject() const {
+ if (m_pValue.IsEmpty())
+ return FALSE;
+ return m_pValue->IsArray();
}
-FX_BOOL CJS_Value::IsDateObject() const
-{
- if(m_pValue.IsEmpty()) return FALSE;
- return m_pValue->IsDate();
+FX_BOOL CJS_Value::IsDateObject() const {
+ if (m_pValue.IsEmpty())
+ return FALSE;
+ return m_pValue->IsDate();
}
-//CJS_Value::operator CJS_Array()
-FX_BOOL CJS_Value::ConvertToArray(CJS_Array &array) const
-{
- if (IsArrayObject())
- {
- array.Attach(JS_ToArray(m_isolate, m_pValue));
- return TRUE;
- }
+// CJS_Value::operator CJS_Array()
+FX_BOOL CJS_Value::ConvertToArray(CJS_Array& array) const {
+ if (IsArrayObject()) {
+ array.Attach(JS_ToArray(m_isolate, m_pValue));
+ return TRUE;
+ }
- return FALSE;
+ return FALSE;
}
-FX_BOOL CJS_Value::ConvertToDate(CJS_Date &date) const
-{
-// if (GetType() == VT_date)
-// {
-// date = (double)(*this);
-// return TRUE;
-// }
+FX_BOOL CJS_Value::ConvertToDate(CJS_Date& date) const {
+ // if (GetType() == VT_date)
+ // {
+ // date = (double)(*this);
+ // return TRUE;
+ // }
- if (IsDateObject())
- {
- date.Attach(m_pValue);
- return TRUE;
- }
+ if (IsDateObject()) {
+ date.Attach(m_pValue);
+ return TRUE;
+ }
- return FALSE;
+ return FALSE;
}
/* ---------------------------- CJS_PropValue ---------------------------- */
-CJS_PropValue::CJS_PropValue(const CJS_Value &value) :
- CJS_Value(value),
- m_bIsSetting(0)
-{
-}
+CJS_PropValue::CJS_PropValue(const CJS_Value& value)
+ : CJS_Value(value), m_bIsSetting(0) {}
-CJS_PropValue::CJS_PropValue(v8::Isolate* isolate) : CJS_Value(isolate),
- m_bIsSetting(0)
-{
-}
+CJS_PropValue::CJS_PropValue(v8::Isolate* isolate)
+ : CJS_Value(isolate), m_bIsSetting(0) {}
-CJS_PropValue::~CJS_PropValue()
-{
-}
+CJS_PropValue::~CJS_PropValue() {}
-FX_BOOL CJS_PropValue::IsSetting()
-{
- return m_bIsSetting;
+FX_BOOL CJS_PropValue::IsSetting() {
+ return m_bIsSetting;
}
-FX_BOOL CJS_PropValue::IsGetting()
-{
- return !m_bIsSetting;
+FX_BOOL CJS_PropValue::IsGetting() {
+ return !m_bIsSetting;
}
-void CJS_PropValue::operator <<(int iValue)
-{
- ASSERT(!m_bIsSetting);
- CJS_Value::operator =(iValue);
+void CJS_PropValue::operator<<(int iValue) {
+ ASSERT(!m_bIsSetting);
+ CJS_Value::operator=(iValue);
}
-void CJS_PropValue::operator >>(int & iValue) const
-{
- ASSERT(m_bIsSetting);
- iValue = CJS_Value::ToInt();
+void CJS_PropValue::operator>>(int& iValue) const {
+ ASSERT(m_bIsSetting);
+ iValue = CJS_Value::ToInt();
}
-
-void CJS_PropValue::operator <<(bool bValue)
-{
- ASSERT(!m_bIsSetting);
- CJS_Value::operator =(bValue);
+void CJS_PropValue::operator<<(bool bValue) {
+ ASSERT(!m_bIsSetting);
+ CJS_Value::operator=(bValue);
}
-void CJS_PropValue::operator >>(bool& bValue) const
-{
- ASSERT(m_bIsSetting);
- bValue = CJS_Value::ToBool();
+void CJS_PropValue::operator>>(bool& bValue) const {
+ ASSERT(m_bIsSetting);
+ bValue = CJS_Value::ToBool();
}
-void CJS_PropValue::operator <<(double dValue)
-{
- ASSERT(!m_bIsSetting);
- CJS_Value::operator =(dValue);
+void CJS_PropValue::operator<<(double dValue) {
+ ASSERT(!m_bIsSetting);
+ CJS_Value::operator=(dValue);
}
-void CJS_PropValue::operator >>(double& dValue) const
-{
- ASSERT(m_bIsSetting);
- dValue = CJS_Value::ToDouble();
+void CJS_PropValue::operator>>(double& dValue) const {
+ ASSERT(m_bIsSetting);
+ dValue = CJS_Value::ToDouble();
}
-void CJS_PropValue::operator <<(CJS_Object* pObj)
-{
- ASSERT(!m_bIsSetting);
- CJS_Value::operator = (pObj);
+void CJS_PropValue::operator<<(CJS_Object* pObj) {
+ ASSERT(!m_bIsSetting);
+ CJS_Value::operator=(pObj);
}
-void CJS_PropValue::operator >>(CJS_Object*& ppObj) const
-{
- ASSERT(m_bIsSetting);
- ppObj = CJS_Value::ToCJSObject();
+void CJS_PropValue::operator>>(CJS_Object*& ppObj) const {
+ ASSERT(m_bIsSetting);
+ ppObj = CJS_Value::ToCJSObject();
}
-void CJS_PropValue::operator <<(CJS_Document* pJsDoc)
-{
- ASSERT(!m_bIsSetting);
- CJS_Value::operator = (pJsDoc);
+void CJS_PropValue::operator<<(CJS_Document* pJsDoc) {
+ ASSERT(!m_bIsSetting);
+ CJS_Value::operator=(pJsDoc);
}
-void CJS_PropValue::operator >>(CJS_Document*& ppJsDoc) const
-{
- ASSERT(m_bIsSetting);
- ppJsDoc = static_cast<CJS_Document*>(CJS_Value::ToCJSObject());
+void CJS_PropValue::operator>>(CJS_Document*& ppJsDoc) const {
+ ASSERT(m_bIsSetting);
+ ppJsDoc = static_cast<CJS_Document*>(CJS_Value::ToCJSObject());
}
-void CJS_PropValue::operator<<(JSFXObject pObj)
-{
- ASSERT(!m_bIsSetting);
- CJS_Value::operator = (pObj);
+void CJS_PropValue::operator<<(JSFXObject pObj) {
+ ASSERT(!m_bIsSetting);
+ CJS_Value::operator=(pObj);
}
-void CJS_PropValue::operator>>(JSFXObject &ppObj) const
-{
- ASSERT(m_bIsSetting);
- ppObj = CJS_Value::ToV8Object();
+void CJS_PropValue::operator>>(JSFXObject& ppObj) const {
+ ASSERT(m_bIsSetting);
+ ppObj = CJS_Value::ToV8Object();
}
-
-void CJS_PropValue::StartSetting()
-{
- m_bIsSetting = 1;
+void CJS_PropValue::StartSetting() {
+ m_bIsSetting = 1;
}
-void CJS_PropValue::StartGetting()
-{
- m_bIsSetting = 0;
+void CJS_PropValue::StartGetting() {
+ m_bIsSetting = 0;
}
-void CJS_PropValue::operator <<(CFX_ByteString string)
-{
- ASSERT(!m_bIsSetting);
- CJS_Value::operator = (string.c_str());
+void CJS_PropValue::operator<<(CFX_ByteString string) {
+ ASSERT(!m_bIsSetting);
+ CJS_Value::operator=(string.c_str());
}
-void CJS_PropValue::operator >>(CFX_ByteString &string) const
-{
- ASSERT(m_bIsSetting);
- string = CJS_Value::ToCFXByteString();
+void CJS_PropValue::operator>>(CFX_ByteString& string) const {
+ ASSERT(m_bIsSetting);
+ string = CJS_Value::ToCFXByteString();
}
-void CJS_PropValue::operator <<(const FX_WCHAR* c_string)
-{
- ASSERT(!m_bIsSetting);
- CJS_Value::operator =(c_string);
+void CJS_PropValue::operator<<(const FX_WCHAR* c_string) {
+ ASSERT(!m_bIsSetting);
+ CJS_Value::operator=(c_string);
}
-void CJS_PropValue::operator >>(CFX_WideString &wide_string) const
-{
- ASSERT(m_bIsSetting);
- wide_string = CJS_Value::ToCFXWideString();
+void CJS_PropValue::operator>>(CFX_WideString& wide_string) const {
+ ASSERT(m_bIsSetting);
+ wide_string = CJS_Value::ToCFXWideString();
}
-void CJS_PropValue::operator <<(CFX_WideString wide_string)
-{
- ASSERT(!m_bIsSetting);
- CJS_Value::operator = (wide_string.c_str());
+void CJS_PropValue::operator<<(CFX_WideString wide_string) {
+ ASSERT(!m_bIsSetting);
+ CJS_Value::operator=(wide_string.c_str());
}
-void CJS_PropValue::operator >>(CJS_Array &array) const
-{
- ASSERT(m_bIsSetting);
- ConvertToArray(array);
+void CJS_PropValue::operator>>(CJS_Array& array) const {
+ ASSERT(m_bIsSetting);
+ ConvertToArray(array);
}
-void CJS_PropValue::operator <<(CJS_Array &array)
-{
- ASSERT(!m_bIsSetting);
- CJS_Value::operator=(array);
+void CJS_PropValue::operator<<(CJS_Array& array) {
+ ASSERT(!m_bIsSetting);
+ CJS_Value::operator=(array);
}
-void CJS_PropValue::operator>>(CJS_Date &date) const
-{
- ASSERT(m_bIsSetting);
- ConvertToDate(date);
+void CJS_PropValue::operator>>(CJS_Date& date) const {
+ ASSERT(m_bIsSetting);
+ ConvertToDate(date);
}
-void CJS_PropValue::operator<<(CJS_Date &date)
-{
- ASSERT(!m_bIsSetting);
- CJS_Value::operator=(date);
+void CJS_PropValue::operator<<(CJS_Date& date) {
+ ASSERT(!m_bIsSetting);
+ CJS_Value::operator=(date);
}
-CJS_PropValue::operator v8::Local<v8::Value>() const
-{
- return m_pValue;
+CJS_PropValue::operator v8::Local<v8::Value>() const {
+ return m_pValue;
}
-/* ======================================== CJS_Array ========================================= */
-CJS_Array::CJS_Array(v8::Isolate* isolate):m_isolate(isolate)
-{
-}
+/* ======================================== CJS_Array
+ * ========================================= */
+CJS_Array::CJS_Array(v8::Isolate* isolate) : m_isolate(isolate) {}
-CJS_Array::~CJS_Array()
-{
-}
+CJS_Array::~CJS_Array() {}
-void CJS_Array::Attach(v8::Local<v8::Array> pArray)
-{
- m_pArray = pArray;
+void CJS_Array::Attach(v8::Local<v8::Array> pArray) {
+ m_pArray = pArray;
}
-FX_BOOL CJS_Array::IsAttached()
-{
- return FALSE;
+FX_BOOL CJS_Array::IsAttached() {
+ return FALSE;
}
-void CJS_Array::GetElement(unsigned index,CJS_Value &value)
-{
- if (m_pArray.IsEmpty())
- return;
- v8::Local<v8::Value> p = JS_GetArrayElement(m_isolate, m_pArray,index);
- value.Attach(p,VT_object);
+void CJS_Array::GetElement(unsigned index, CJS_Value& value) {
+ if (m_pArray.IsEmpty())
+ return;
+ v8::Local<v8::Value> p = JS_GetArrayElement(m_isolate, m_pArray, index);
+ value.Attach(p, VT_object);
}
-void CJS_Array::SetElement(unsigned index,CJS_Value value)
-{
- if (m_pArray.IsEmpty())
- m_pArray = JS_NewArray(m_isolate);
+void CJS_Array::SetElement(unsigned index, CJS_Value value) {
+ if (m_pArray.IsEmpty())
+ m_pArray = JS_NewArray(m_isolate);
- JS_PutArrayElement(m_isolate, m_pArray, index, value.ToV8Value(), value.GetType());
+ JS_PutArrayElement(m_isolate, m_pArray, index, value.ToV8Value(),
+ value.GetType());
}
-int CJS_Array::GetLength()
-{
- if (m_pArray.IsEmpty())
- return 0;
- return JS_GetArrayLength(m_pArray);
+int CJS_Array::GetLength() {
+ if (m_pArray.IsEmpty())
+ return 0;
+ return JS_GetArrayLength(m_pArray);
}
-CJS_Array:: operator v8::Local<v8::Array>()
-{
- if (m_pArray.IsEmpty())
- m_pArray = JS_NewArray(m_isolate);
+CJS_Array::operator v8::Local<v8::Array>() {
+ if (m_pArray.IsEmpty())
+ m_pArray = JS_NewArray(m_isolate);
- return m_pArray;
+ return m_pArray;
}
-/* ======================================== CJS_Date ========================================= */
+/* ======================================== CJS_Date
+ * ========================================= */
-CJS_Date::CJS_Date(v8::Isolate* isolate) :m_isolate(isolate)
-{
-}
+CJS_Date::CJS_Date(v8::Isolate* isolate) : m_isolate(isolate) {}
-CJS_Date::CJS_Date(v8::Isolate* isolate,double dMsec_time)
-{
- m_isolate = isolate;
- m_pDate = JS_NewDate(isolate,dMsec_time);
+CJS_Date::CJS_Date(v8::Isolate* isolate, double dMsec_time) {
+ m_isolate = isolate;
+ m_pDate = JS_NewDate(isolate, dMsec_time);
}
-CJS_Date::CJS_Date(v8::Isolate* isolate,int year, int mon, int day,int hour, int min, int sec)
-{
- m_isolate = isolate;
- m_pDate = JS_NewDate(isolate,MakeDate(year,mon,day,hour,min,sec,0));
+CJS_Date::CJS_Date(v8::Isolate* isolate,
+ int year,
+ int mon,
+ int day,
+ int hour,
+ int min,
+ int sec) {
+ m_isolate = isolate;
+ m_pDate = JS_NewDate(isolate, MakeDate(year, mon, day, hour, min, sec, 0));
}
-double CJS_Date::MakeDate(int year, int mon, int day,int hour, int min, int sec,int ms)
-{
- return JS_MakeDate(JS_MakeDay(year,mon,day), JS_MakeTime(hour,min,sec,ms));
+double CJS_Date::MakeDate(int year,
+ int mon,
+ int day,
+ int hour,
+ int min,
+ int sec,
+ int ms) {
+ return JS_MakeDate(JS_MakeDay(year, mon, day),
+ JS_MakeTime(hour, min, sec, ms));
}
-CJS_Date::~CJS_Date()
-{
-}
+CJS_Date::~CJS_Date() {}
-FX_BOOL CJS_Date::IsValidDate()
-{
- if(m_pDate.IsEmpty()) return FALSE;
- return !JS_PortIsNan(JS_ToNumber(m_isolate, m_pDate));
+FX_BOOL CJS_Date::IsValidDate() {
+ if (m_pDate.IsEmpty())
+ return FALSE;
+ return !JS_PortIsNan(JS_ToNumber(m_isolate, m_pDate));
}
-void CJS_Date::Attach(v8::Local<v8::Value> pDate)
-{
- m_pDate = pDate;
+void CJS_Date::Attach(v8::Local<v8::Value> pDate) {
+ m_pDate = pDate;
}
-int CJS_Date::GetYear()
-{
- if (IsValidDate())
- return JS_GetYearFromTime(JS_LocalTime(JS_ToNumber(m_isolate, m_pDate)));
+int CJS_Date::GetYear() {
+ if (IsValidDate())
+ return JS_GetYearFromTime(JS_LocalTime(JS_ToNumber(m_isolate, m_pDate)));
- return 0;
+ return 0;
}
-void CJS_Date::SetYear(int iYear)
-{
- double date = MakeDate(iYear,GetMonth(),GetDay(),GetHours(),GetMinutes(),GetSeconds(),0);
- JS_ValueCopy(m_pDate, JS_NewDate(m_isolate,date));
+void CJS_Date::SetYear(int iYear) {
+ double date = MakeDate(iYear, GetMonth(), GetDay(), GetHours(), GetMinutes(),
+ GetSeconds(), 0);
+ JS_ValueCopy(m_pDate, JS_NewDate(m_isolate, date));
}
-int CJS_Date::GetMonth()
-{
- if (IsValidDate())
- return JS_GetMonthFromTime(JS_LocalTime(JS_ToNumber(m_isolate, m_pDate)));
+int CJS_Date::GetMonth() {
+ if (IsValidDate())
+ return JS_GetMonthFromTime(JS_LocalTime(JS_ToNumber(m_isolate, m_pDate)));
- return 0;
+ return 0;
}
-void CJS_Date::SetMonth(int iMonth)
-{
-
- double date = MakeDate(GetYear(),iMonth,GetDay(),GetHours(),GetMinutes(),GetSeconds(),0);
- JS_ValueCopy(m_pDate, JS_NewDate(m_isolate,date));
-
+void CJS_Date::SetMonth(int iMonth) {
+ double date = MakeDate(GetYear(), iMonth, GetDay(), GetHours(), GetMinutes(),
+ GetSeconds(), 0);
+ JS_ValueCopy(m_pDate, JS_NewDate(m_isolate, date));
}
-int CJS_Date::GetDay()
-{
- if (IsValidDate())
- return JS_GetDayFromTime(JS_LocalTime(JS_ToNumber(m_isolate, m_pDate)));
+int CJS_Date::GetDay() {
+ if (IsValidDate())
+ return JS_GetDayFromTime(JS_LocalTime(JS_ToNumber(m_isolate, m_pDate)));
- return 0;
+ return 0;
}
-void CJS_Date::SetDay(int iDay)
-{
-
- double date = MakeDate(GetYear(),GetMonth(),iDay,GetHours(),GetMinutes(),GetSeconds(),0);
- JS_ValueCopy(m_pDate,JS_NewDate(m_isolate,date));
-
+void CJS_Date::SetDay(int iDay) {
+ double date = MakeDate(GetYear(), GetMonth(), iDay, GetHours(), GetMinutes(),
+ GetSeconds(), 0);
+ JS_ValueCopy(m_pDate, JS_NewDate(m_isolate, date));
}
-int CJS_Date::GetHours()
-{
- if (IsValidDate())
- return JS_GetHourFromTime(JS_LocalTime(JS_ToNumber(m_isolate, m_pDate)));
+int CJS_Date::GetHours() {
+ if (IsValidDate())
+ return JS_GetHourFromTime(JS_LocalTime(JS_ToNumber(m_isolate, m_pDate)));
- return 0;
+ return 0;
}
-void CJS_Date::SetHours(int iHours)
-{
- double date = MakeDate(GetYear(),GetMonth(),GetDay(),iHours,GetMinutes(),GetSeconds(),0);
- JS_ValueCopy(m_pDate,JS_NewDate(m_isolate,date));
+void CJS_Date::SetHours(int iHours) {
+ double date = MakeDate(GetYear(), GetMonth(), GetDay(), iHours, GetMinutes(),
+ GetSeconds(), 0);
+ JS_ValueCopy(m_pDate, JS_NewDate(m_isolate, date));
}
-int CJS_Date::GetMinutes()
-{
- if (IsValidDate())
- return JS_GetMinFromTime(JS_LocalTime(JS_ToNumber(m_isolate, m_pDate)));
+int CJS_Date::GetMinutes() {
+ if (IsValidDate())
+ return JS_GetMinFromTime(JS_LocalTime(JS_ToNumber(m_isolate, m_pDate)));
- return 0;
+ return 0;
}
-void CJS_Date::SetMinutes(int minutes)
-{
- double date = MakeDate(GetYear(),GetMonth(),GetDay(),GetHours(),minutes,GetSeconds(),0);
- JS_ValueCopy(m_pDate,JS_NewDate(m_isolate,date));
+void CJS_Date::SetMinutes(int minutes) {
+ double date = MakeDate(GetYear(), GetMonth(), GetDay(), GetHours(), minutes,
+ GetSeconds(), 0);
+ JS_ValueCopy(m_pDate, JS_NewDate(m_isolate, date));
}
-int CJS_Date::GetSeconds()
-{
- if (IsValidDate())
- return JS_GetSecFromTime(JS_LocalTime(JS_ToNumber(m_isolate, m_pDate)));
+int CJS_Date::GetSeconds() {
+ if (IsValidDate())
+ return JS_GetSecFromTime(JS_LocalTime(JS_ToNumber(m_isolate, m_pDate)));
- return 0;
+ return 0;
}
-void CJS_Date::SetSeconds(int seconds)
-{
- double date = MakeDate(GetYear(),GetMonth(),GetDay(),GetHours(),GetMinutes(),seconds,0);
- JS_ValueCopy(m_pDate,JS_NewDate(m_isolate,date));
+void CJS_Date::SetSeconds(int seconds) {
+ double date = MakeDate(GetYear(), GetMonth(), GetDay(), GetHours(),
+ GetMinutes(), seconds, 0);
+ JS_ValueCopy(m_pDate, JS_NewDate(m_isolate, date));
}
-CJS_Date::operator v8::Local<v8::Value>()
-{
- return m_pDate;
+CJS_Date::operator v8::Local<v8::Value>() {
+ return m_pDate;
}
-CJS_Date::operator double() const
-{
- if(m_pDate.IsEmpty())
- return 0.0;
- return JS_ToNumber(m_isolate, m_pDate);
+CJS_Date::operator double() const {
+ if (m_pDate.IsEmpty())
+ return 0.0;
+ return JS_ToNumber(m_isolate, m_pDate);
}
-CFX_WideString CJS_Date::ToString() const
-{
- if(m_pDate.IsEmpty())
- return L"";
- return JS_ToString(m_isolate, m_pDate);
+CFX_WideString CJS_Date::ToString() const {
+ if (m_pDate.IsEmpty())
+ return L"";
+ return JS_ToString(m_isolate, m_pDate);
}
diff --git a/fpdfsdk/src/javascript/PublicMethods.cpp b/fpdfsdk/src/javascript/PublicMethods.cpp
index daecdbec89..30400789b8 100644
--- a/fpdfsdk/src/javascript/PublicMethods.cpp
+++ b/fpdfsdk/src/javascript/PublicMethods.cpp
@@ -19,2255 +19,2123 @@
#include "../../include/javascript/color.h"
#include "../../include/javascript/JS_Runtime.h"
-static v8::Isolate* GetIsolate(IFXJS_Context* cc)
-{
- CJS_Context* pContext = (CJS_Context *)cc;
- ASSERT(pContext != NULL);
+static v8::Isolate* GetIsolate(IFXJS_Context* cc) {
+ CJS_Context* pContext = (CJS_Context*)cc;
+ ASSERT(pContext != NULL);
- CJS_Runtime* pRuntime = pContext->GetJSRuntime();
- ASSERT(pRuntime != NULL);
+ CJS_Runtime* pRuntime = pContext->GetJSRuntime();
+ ASSERT(pRuntime != NULL);
- return pRuntime->GetIsolate();
+ return pRuntime->GetIsolate();
}
+/* -------------------------------- CJS_PublicMethods
+ * -------------------------------- */
-/* -------------------------------- CJS_PublicMethods -------------------------------- */
-
-#define DOUBLE_CORRECT 0.000000000000001
+#define DOUBLE_CORRECT 0.000000000000001
BEGIN_JS_STATIC_GLOBAL_FUN(CJS_PublicMethods)
- JS_STATIC_GLOBAL_FUN_ENTRY(AFNumber_Format)
- JS_STATIC_GLOBAL_FUN_ENTRY(AFNumber_Keystroke)
- JS_STATIC_GLOBAL_FUN_ENTRY(AFPercent_Format)
- JS_STATIC_GLOBAL_FUN_ENTRY(AFPercent_Keystroke)
- JS_STATIC_GLOBAL_FUN_ENTRY(AFDate_FormatEx)
- JS_STATIC_GLOBAL_FUN_ENTRY(AFDate_KeystrokeEx)
- JS_STATIC_GLOBAL_FUN_ENTRY(AFDate_Format)
- JS_STATIC_GLOBAL_FUN_ENTRY(AFDate_Keystroke)
- JS_STATIC_GLOBAL_FUN_ENTRY(AFTime_FormatEx)
- JS_STATIC_GLOBAL_FUN_ENTRY(AFTime_KeystrokeEx)
- JS_STATIC_GLOBAL_FUN_ENTRY(AFTime_Format)
- JS_STATIC_GLOBAL_FUN_ENTRY(AFTime_Keystroke)
- JS_STATIC_GLOBAL_FUN_ENTRY(AFSpecial_Format)
- JS_STATIC_GLOBAL_FUN_ENTRY(AFSpecial_Keystroke)
- JS_STATIC_GLOBAL_FUN_ENTRY(AFSpecial_KeystrokeEx)
- JS_STATIC_GLOBAL_FUN_ENTRY(AFSimple)
- JS_STATIC_GLOBAL_FUN_ENTRY(AFMakeNumber)
- JS_STATIC_GLOBAL_FUN_ENTRY(AFSimple_Calculate)
- JS_STATIC_GLOBAL_FUN_ENTRY(AFRange_Validate)
- JS_STATIC_GLOBAL_FUN_ENTRY(AFMergeChange)
- JS_STATIC_GLOBAL_FUN_ENTRY(AFParseDateEx)
- JS_STATIC_GLOBAL_FUN_ENTRY(AFExtractNums)
+JS_STATIC_GLOBAL_FUN_ENTRY(AFNumber_Format)
+JS_STATIC_GLOBAL_FUN_ENTRY(AFNumber_Keystroke)
+JS_STATIC_GLOBAL_FUN_ENTRY(AFPercent_Format)
+JS_STATIC_GLOBAL_FUN_ENTRY(AFPercent_Keystroke)
+JS_STATIC_GLOBAL_FUN_ENTRY(AFDate_FormatEx)
+JS_STATIC_GLOBAL_FUN_ENTRY(AFDate_KeystrokeEx)
+JS_STATIC_GLOBAL_FUN_ENTRY(AFDate_Format)
+JS_STATIC_GLOBAL_FUN_ENTRY(AFDate_Keystroke)
+JS_STATIC_GLOBAL_FUN_ENTRY(AFTime_FormatEx)
+JS_STATIC_GLOBAL_FUN_ENTRY(AFTime_KeystrokeEx)
+JS_STATIC_GLOBAL_FUN_ENTRY(AFTime_Format)
+JS_STATIC_GLOBAL_FUN_ENTRY(AFTime_Keystroke)
+JS_STATIC_GLOBAL_FUN_ENTRY(AFSpecial_Format)
+JS_STATIC_GLOBAL_FUN_ENTRY(AFSpecial_Keystroke)
+JS_STATIC_GLOBAL_FUN_ENTRY(AFSpecial_KeystrokeEx)
+JS_STATIC_GLOBAL_FUN_ENTRY(AFSimple)
+JS_STATIC_GLOBAL_FUN_ENTRY(AFMakeNumber)
+JS_STATIC_GLOBAL_FUN_ENTRY(AFSimple_Calculate)
+JS_STATIC_GLOBAL_FUN_ENTRY(AFRange_Validate)
+JS_STATIC_GLOBAL_FUN_ENTRY(AFMergeChange)
+JS_STATIC_GLOBAL_FUN_ENTRY(AFParseDateEx)
+JS_STATIC_GLOBAL_FUN_ENTRY(AFExtractNums)
END_JS_STATIC_GLOBAL_FUN()
IMPLEMENT_JS_STATIC_GLOBAL_FUN(CJS_PublicMethods)
-static const FX_WCHAR* months[] =
-{
- L"Jan", L"Feb", L"Mar", L"Apr", L"May", L"Jun", L"Jul", L"Aug", L"Sep", L"Oct", L"Nov", L"Dec"
-};
+static const FX_WCHAR* months[] = {L"Jan", L"Feb", L"Mar", L"Apr",
+ L"May", L"Jun", L"Jul", L"Aug",
+ L"Sep", L"Oct", L"Nov", L"Dec"};
-static const FX_WCHAR* fullmonths[] =
-{
- L"January", L"February", L"March", L"April", L"May", L"June", L"July", L"August", L"September", L"October", L"November", L"December"
-};
+static const FX_WCHAR* fullmonths[] = {L"January", L"February", L"March",
+ L"April", L"May", L"June",
+ L"July", L"August", L"September",
+ L"October", L"November", L"December"};
-FX_BOOL CJS_PublicMethods::IsNumber(const FX_WCHAR* string)
-{
- CFX_WideString sTrim = StrTrim(string);
- const FX_WCHAR* pTrim = sTrim.c_str();
- const FX_WCHAR* p = pTrim;
+FX_BOOL CJS_PublicMethods::IsNumber(const FX_WCHAR* string) {
+ CFX_WideString sTrim = StrTrim(string);
+ const FX_WCHAR* pTrim = sTrim.c_str();
+ const FX_WCHAR* p = pTrim;
+ FX_BOOL bDot = FALSE;
+ FX_BOOL bKXJS = FALSE;
- FX_BOOL bDot = FALSE;
- FX_BOOL bKXJS = FALSE;
-
- wchar_t c;
- while ((c = *p))
- {
- if (c == '.' || c == ',')
- {
- if (bDot) return FALSE;
- bDot = TRUE;
- }
- else if (c == '-' || c == '+')
- {
- if (p != pTrim)
- return FALSE;
- }
- else if (c == 'e' || c == 'E')
- {
- if (bKXJS)
- return FALSE;
+ wchar_t c;
+ while ((c = *p)) {
+ if (c == '.' || c == ',') {
+ if (bDot)
+ return FALSE;
+ bDot = TRUE;
+ } else if (c == '-' || c == '+') {
+ if (p != pTrim)
+ return FALSE;
+ } else if (c == 'e' || c == 'E') {
+ if (bKXJS)
+ return FALSE;
- p++;
- c = *p;
- if (c == '+' || c == '-')
- {
- bKXJS = TRUE;
- }
- else
- {
- return FALSE;
- }
- }
- else if (!IsDigit(c))
- {
- return FALSE;
- }
- p++;
+ p++;
+ c = *p;
+ if (c == '+' || c == '-') {
+ bKXJS = TRUE;
+ } else {
+ return FALSE;
+ }
+ } else if (!IsDigit(c)) {
+ return FALSE;
}
+ p++;
+ }
- return TRUE;
+ return TRUE;
}
-FX_BOOL CJS_PublicMethods::IsDigit(wchar_t ch)
-{
- return (ch >= L'0' && ch <= L'9');
+FX_BOOL CJS_PublicMethods::IsDigit(wchar_t ch) {
+ return (ch >= L'0' && ch <= L'9');
}
-FX_BOOL CJS_PublicMethods::IsDigit(char ch)
-{
- return (ch >= '0' && ch <= '9');
+FX_BOOL CJS_PublicMethods::IsDigit(char ch) {
+ return (ch >= '0' && ch <= '9');
}
-FX_BOOL CJS_PublicMethods::IsAlphabetic(wchar_t ch)
-{
- return ((ch >= L'a' && ch <= L'z') || (ch >= L'A' && ch <= L'Z'));
+FX_BOOL CJS_PublicMethods::IsAlphabetic(wchar_t ch) {
+ return ((ch >= L'a' && ch <= L'z') || (ch >= L'A' && ch <= L'Z'));
}
-FX_BOOL CJS_PublicMethods::IsAlphaNumeric(wchar_t ch)
-{
- return (IsDigit(ch) || IsAlphabetic(ch));
+FX_BOOL CJS_PublicMethods::IsAlphaNumeric(wchar_t ch) {
+ return (IsDigit(ch) || IsAlphabetic(ch));
}
-FX_BOOL CJS_PublicMethods::maskSatisfied(wchar_t c_Change,wchar_t c_Mask)
-{
- switch (c_Mask)
- {
+FX_BOOL CJS_PublicMethods::maskSatisfied(wchar_t c_Change, wchar_t c_Mask) {
+ switch (c_Mask) {
case L'9':
- return IsDigit(c_Change);
+ return IsDigit(c_Change);
case L'A':
- return IsAlphabetic(c_Change);
+ return IsAlphabetic(c_Change);
case L'O':
- return IsAlphaNumeric(c_Change);
+ return IsAlphaNumeric(c_Change);
case L'X':
- return TRUE;
+ return TRUE;
default:
- return (c_Change == c_Mask);
- }
+ return (c_Change == c_Mask);
+ }
}
-FX_BOOL CJS_PublicMethods::isReservedMaskChar(wchar_t ch)
-{
- return ch == L'9' || ch == L'A' || ch == L'O' || ch == L'X';
+FX_BOOL CJS_PublicMethods::isReservedMaskChar(wchar_t ch) {
+ return ch == L'9' || ch == L'A' || ch == L'O' || ch == L'X';
}
-double CJS_PublicMethods::AF_Simple(const FX_WCHAR* sFuction, double dValue1, double dValue2)
-{
- if (FXSYS_wcsicmp(sFuction,L"AVG") == 0 || FXSYS_wcsicmp(sFuction,L"SUM") == 0)
- {
- return dValue1 + dValue2;
- }
- if (FXSYS_wcsicmp(sFuction, L"PRD") == 0)
- {
- return dValue1 * dValue2;
- }
- if (FXSYS_wcsicmp(sFuction,L"MIN") == 0)
- {
- return FX_MIN(dValue1, dValue2);
- }
- if (FXSYS_wcsicmp(sFuction,L"MAX") == 0)
- {
- return FX_MAX(dValue1, dValue2);
- }
- return dValue1;
+double CJS_PublicMethods::AF_Simple(const FX_WCHAR* sFuction,
+ double dValue1,
+ double dValue2) {
+ if (FXSYS_wcsicmp(sFuction, L"AVG") == 0 ||
+ FXSYS_wcsicmp(sFuction, L"SUM") == 0) {
+ return dValue1 + dValue2;
+ }
+ if (FXSYS_wcsicmp(sFuction, L"PRD") == 0) {
+ return dValue1 * dValue2;
+ }
+ if (FXSYS_wcsicmp(sFuction, L"MIN") == 0) {
+ return FX_MIN(dValue1, dValue2);
+ }
+ if (FXSYS_wcsicmp(sFuction, L"MAX") == 0) {
+ return FX_MAX(dValue1, dValue2);
+ }
+ return dValue1;
}
-CFX_WideString CJS_PublicMethods::StrLTrim(const FX_WCHAR* pStr)
-{
- while (*pStr && *pStr == L' ') pStr++;
+CFX_WideString CJS_PublicMethods::StrLTrim(const FX_WCHAR* pStr) {
+ while (*pStr && *pStr == L' ')
+ pStr++;
- return pStr;
+ return pStr;
}
-CFX_WideString CJS_PublicMethods::StrRTrim(const FX_WCHAR* pStr)
-{
- const FX_WCHAR* p = pStr;
- while (*p) p++;
- while (p > pStr && *(p - 1) == L' ') p--;
+CFX_WideString CJS_PublicMethods::StrRTrim(const FX_WCHAR* pStr) {
+ const FX_WCHAR* p = pStr;
+ while (*p)
+ p++;
+ while (p > pStr && *(p - 1) == L' ')
+ p--;
- return CFX_WideString(pStr, p - pStr);
+ return CFX_WideString(pStr, p - pStr);
}
-CFX_WideString CJS_PublicMethods::StrTrim(const FX_WCHAR* pStr)
-{
- return StrRTrim(StrLTrim(pStr).c_str());
+CFX_WideString CJS_PublicMethods::StrTrim(const FX_WCHAR* pStr) {
+ return StrRTrim(StrLTrim(pStr).c_str());
}
-CFX_ByteString CJS_PublicMethods::StrLTrim(const FX_CHAR* pStr)
-{
- while (*pStr && *pStr == ' ') pStr++;
+CFX_ByteString CJS_PublicMethods::StrLTrim(const FX_CHAR* pStr) {
+ while (*pStr && *pStr == ' ')
+ pStr++;
- return pStr;
+ return pStr;
}
-CFX_ByteString CJS_PublicMethods::StrRTrim(const FX_CHAR* pStr)
-{
- const FX_CHAR* p = pStr;
- while (*p) p++;
- while (p > pStr && *(p - 1) == L' ') p--;
+CFX_ByteString CJS_PublicMethods::StrRTrim(const FX_CHAR* pStr) {
+ const FX_CHAR* p = pStr;
+ while (*p)
+ p++;
+ while (p > pStr && *(p - 1) == L' ')
+ p--;
- return CFX_ByteString(pStr,p-pStr);
+ return CFX_ByteString(pStr, p - pStr);
}
-CFX_ByteString CJS_PublicMethods::StrTrim(const FX_CHAR* pStr)
-{
- return StrRTrim(StrLTrim(pStr));
+CFX_ByteString CJS_PublicMethods::StrTrim(const FX_CHAR* pStr) {
+ return StrRTrim(StrLTrim(pStr));
}
-double CJS_PublicMethods::ParseNumber(const FX_WCHAR* swSource, FX_BOOL& bAllDigits, FX_BOOL& bDot, FX_BOOL& bSign, FX_BOOL& bKXJS)
-{
- bDot = FALSE;
- bSign = FALSE;
- bKXJS = FALSE;
+double CJS_PublicMethods::ParseNumber(const FX_WCHAR* swSource,
+ FX_BOOL& bAllDigits,
+ FX_BOOL& bDot,
+ FX_BOOL& bSign,
+ FX_BOOL& bKXJS) {
+ bDot = FALSE;
+ bSign = FALSE;
+ bKXJS = FALSE;
- FX_BOOL bDigitExist = FALSE;
+ FX_BOOL bDigitExist = FALSE;
- const FX_WCHAR* p = swSource;
- wchar_t c;
+ const FX_WCHAR* p = swSource;
+ wchar_t c;
- const FX_WCHAR* pStart = NULL;
- const FX_WCHAR* pEnd = NULL;
-
- while ((c = *p))
- {
- if (!pStart && c != L' ')
- {
- pStart = p;
- }
+ const FX_WCHAR* pStart = NULL;
+ const FX_WCHAR* pEnd = NULL;
- pEnd = p;
- p++;
+ while ((c = *p)) {
+ if (!pStart && c != L' ') {
+ pStart = p;
}
- if (!pStart)
- {
- bAllDigits = FALSE;
- return 0;
- }
+ pEnd = p;
+ p++;
+ }
- while (pEnd != pStart)
- {
- if (*pEnd == L' ')
- pEnd --;
- else
- break;
- }
+ if (!pStart) {
+ bAllDigits = FALSE;
+ return 0;
+ }
- double dRet = 0;
- p = pStart;
- bAllDigits = TRUE;
- CFX_WideString swDigits;
-
- while (p <= pEnd)
- {
- c = *p;
-
- if (IsDigit(c))
- {
- swDigits += c;
- bDigitExist = TRUE;
- }
- else
- {
- switch (c)
- {
- case L' ':
- bAllDigits = FALSE;
- break;
- case L'.':
- case L',':
- if (!bDot)
- {
- if (bDigitExist)
- {
- swDigits += L'.';
- }
- else
- {
- swDigits += L'0';
- swDigits += L'.';
- bDigitExist = TRUE;
- }
-
- bDot = TRUE;
- break;
- }
- case 'e':
- case 'E':
- if (!bKXJS)
- {
- p++;
- c = *p;
- if (c == '+' || c == '-')
- {
- bKXJS = TRUE;
- swDigits += 'e';
- swDigits += c;
- }
- break;
- }
- case L'-':
- if (!bDigitExist && !bSign)
- {
- swDigits += c;
- bSign = TRUE;
- break;
- }
- default:
- bAllDigits = FALSE;
-
- if (p != pStart && !bDot && bDigitExist)
- {
- swDigits += L'.';
- bDot = TRUE;
- }
- else
- {
- bDot = FALSE;
- bDigitExist = FALSE;
- swDigits = L"";
- }
- break;
+ while (pEnd != pStart) {
+ if (*pEnd == L' ')
+ pEnd--;
+ else
+ break;
+ }
+
+ double dRet = 0;
+ p = pStart;
+ bAllDigits = TRUE;
+ CFX_WideString swDigits;
+
+ while (p <= pEnd) {
+ c = *p;
+
+ if (IsDigit(c)) {
+ swDigits += c;
+ bDigitExist = TRUE;
+ } else {
+ switch (c) {
+ case L' ':
+ bAllDigits = FALSE;
+ break;
+ case L'.':
+ case L',':
+ if (!bDot) {
+ if (bDigitExist) {
+ swDigits += L'.';
+ } else {
+ swDigits += L'0';
+ swDigits += L'.';
+ bDigitExist = TRUE;
}
- }
- p++;
- }
-
- if (swDigits.GetLength() > 0 && swDigits.GetLength() < 17)
- {
- CFX_ByteString sDigits = swDigits.UTF8Encode();
-
- if (bKXJS)
- {
- dRet = atof(sDigits);
- }
- else
- {
- if (bDot)
- {
- char* pStopString;
- dRet = ::strtod(sDigits, &pStopString);
- }
- else
- {
- dRet = atol(sDigits);
+ bDot = TRUE;
+ break;
+ }
+ case 'e':
+ case 'E':
+ if (!bKXJS) {
+ p++;
+ c = *p;
+ if (c == '+' || c == '-') {
+ bKXJS = TRUE;
+ swDigits += 'e';
+ swDigits += c;
}
- }
-
- }
+ break;
+ }
+ case L'-':
+ if (!bDigitExist && !bSign) {
+ swDigits += c;
+ bSign = TRUE;
+ break;
+ }
+ default:
+ bAllDigits = FALSE;
- return dRet;
+ if (p != pStart && !bDot && bDigitExist) {
+ swDigits += L'.';
+ bDot = TRUE;
+ } else {
+ bDot = FALSE;
+ bDigitExist = FALSE;
+ swDigits = L"";
+ }
+ break;
+ }
+ }
+
+ p++;
+ }
+
+ if (swDigits.GetLength() > 0 && swDigits.GetLength() < 17) {
+ CFX_ByteString sDigits = swDigits.UTF8Encode();
+
+ if (bKXJS) {
+ dRet = atof(sDigits);
+ } else {
+ if (bDot) {
+ char* pStopString;
+ dRet = ::strtod(sDigits, &pStopString);
+ } else {
+ dRet = atol(sDigits);
+ }
+ }
+ }
+
+ return dRet;
}
-double CJS_PublicMethods::ParseStringToNumber(const FX_WCHAR* swSource)
-{
- FX_BOOL bAllDigits = FALSE;
- FX_BOOL bDot = FALSE;
- FX_BOOL bSign = FALSE;
- FX_BOOL bKXJS = FALSE;
+double CJS_PublicMethods::ParseStringToNumber(const FX_WCHAR* swSource) {
+ FX_BOOL bAllDigits = FALSE;
+ FX_BOOL bDot = FALSE;
+ FX_BOOL bSign = FALSE;
+ FX_BOOL bKXJS = FALSE;
- return ParseNumber(swSource, bAllDigits, bDot, bSign, bKXJS);
+ return ParseNumber(swSource, bAllDigits, bDot, bSign, bKXJS);
}
-FX_BOOL CJS_PublicMethods::ConvertStringToNumber(const FX_WCHAR* swSource, double & dRet, FX_BOOL & bDot)
-{
- FX_BOOL bAllDigits = FALSE;
- FX_BOOL bSign = FALSE;
- FX_BOOL bKXJS = FALSE;
+FX_BOOL CJS_PublicMethods::ConvertStringToNumber(const FX_WCHAR* swSource,
+ double& dRet,
+ FX_BOOL& bDot) {
+ FX_BOOL bAllDigits = FALSE;
+ FX_BOOL bSign = FALSE;
+ FX_BOOL bKXJS = FALSE;
- dRet = ParseNumber(swSource, bAllDigits, bDot, bSign, bKXJS);
+ dRet = ParseNumber(swSource, bAllDigits, bDot, bSign, bKXJS);
- return bAllDigits;
+ return bAllDigits;
}
-CJS_Array CJS_PublicMethods::AF_MakeArrayFromList(v8::Isolate* isolate, CJS_Value val)
-{
- CJS_Array StrArray(isolate);
- if(val.IsArrayObject())
- {
- val.ConvertToArray(StrArray);
- return StrArray;
- }
- CFX_WideString wsStr = val.ToCFXWideString();
- CFX_ByteString t = CFX_ByteString::FromUnicode(wsStr);
- const char * p = (const char *)t;
-
-
- int ch = ',' ;
- int nIndex = 0;
-
- while (*p)
- {
- const char * pTemp = strchr(p, ch);
- if (pTemp == NULL)
- {
- StrArray.SetElement(nIndex, CJS_Value(isolate, StrTrim(p).c_str()));
- break;
- }
- else
- {
- char * pSub = new char[pTemp - p + 1];
- strncpy(pSub, p, pTemp - p);
- *(pSub + (pTemp - p)) = '\0';
-
- StrArray.SetElement(nIndex, CJS_Value(isolate, StrTrim(pSub).c_str()));
- delete []pSub;
-
- nIndex ++;
- p = ++pTemp;
- }
-
- }
+CJS_Array CJS_PublicMethods::AF_MakeArrayFromList(v8::Isolate* isolate,
+ CJS_Value val) {
+ CJS_Array StrArray(isolate);
+ if (val.IsArrayObject()) {
+ val.ConvertToArray(StrArray);
return StrArray;
+ }
+ CFX_WideString wsStr = val.ToCFXWideString();
+ CFX_ByteString t = CFX_ByteString::FromUnicode(wsStr);
+ const char* p = (const char*)t;
+
+ int ch = ',';
+ int nIndex = 0;
+
+ while (*p) {
+ const char* pTemp = strchr(p, ch);
+ if (pTemp == NULL) {
+ StrArray.SetElement(nIndex, CJS_Value(isolate, StrTrim(p).c_str()));
+ break;
+ } else {
+ char* pSub = new char[pTemp - p + 1];
+ strncpy(pSub, p, pTemp - p);
+ *(pSub + (pTemp - p)) = '\0';
+
+ StrArray.SetElement(nIndex, CJS_Value(isolate, StrTrim(pSub).c_str()));
+ delete[] pSub;
+
+ nIndex++;
+ p = ++pTemp;
+ }
+ }
+ return StrArray;
}
-int CJS_PublicMethods::ParseStringInteger(const CFX_WideString& string,int nStart,int& nSkip, int nMaxStep)
-{
- int nRet = 0;
- nSkip = 0;
- for (int i=nStart, sz=string.GetLength(); i < sz; i++)
- {
- if (i-nStart > 10)
- break;
-
- FX_WCHAR c = string.GetAt(i);
- if (IsDigit((wchar_t)c))
- {
- nRet = nRet * 10 + (c - '0');
- nSkip = i - nStart + 1;
- if (nSkip >= nMaxStep)
- break;
- }
- else
- break;
- }
+int CJS_PublicMethods::ParseStringInteger(const CFX_WideString& string,
+ int nStart,
+ int& nSkip,
+ int nMaxStep) {
+ int nRet = 0;
+ nSkip = 0;
+ for (int i = nStart, sz = string.GetLength(); i < sz; i++) {
+ if (i - nStart > 10)
+ break;
+
+ FX_WCHAR c = string.GetAt(i);
+ if (IsDigit((wchar_t)c)) {
+ nRet = nRet * 10 + (c - '0');
+ nSkip = i - nStart + 1;
+ if (nSkip >= nMaxStep)
+ break;
+ } else
+ break;
+ }
- return nRet;
+ return nRet;
}
-CFX_WideString CJS_PublicMethods::ParseStringString(const CFX_WideString& string, int nStart, int& nSkip)
-{
- CFX_WideString swRet;
- nSkip = 0;
- for (int i=nStart, sz=string.GetLength(); i < sz; i++)
- {
- FX_WCHAR c = string.GetAt(i);
- if ((c >= L'a' && c <= L'z') || (c >= L'A' && c <= L'Z'))
- {
- swRet += c;
- nSkip = i - nStart + 1;
- }
- else
- break;
- }
-
- return swRet;
+CFX_WideString CJS_PublicMethods::ParseStringString(
+ const CFX_WideString& string,
+ int nStart,
+ int& nSkip) {
+ CFX_WideString swRet;
+ nSkip = 0;
+ for (int i = nStart, sz = string.GetLength(); i < sz; i++) {
+ FX_WCHAR c = string.GetAt(i);
+ if ((c >= L'a' && c <= L'z') || (c >= L'A' && c <= L'Z')) {
+ swRet += c;
+ nSkip = i - nStart + 1;
+ } else
+ break;
+ }
+
+ return swRet;
}
-double CJS_PublicMethods::ParseNormalDate(const CFX_WideString & value, FX_BOOL& bWrongFormat)
-{
- double dt = JS_GetDateTime();
-
- int nYear = JS_GetYearFromTime(dt);
- int nMonth = JS_GetMonthFromTime(dt) + 1;
- int nDay = JS_GetDayFromTime(dt);
- int nHour = JS_GetHourFromTime(dt);
- int nMin = JS_GetMinFromTime(dt);
- int nSec = JS_GetSecFromTime(dt);
-
- int number[3];
-
- int nSkip = 0;
- int nLen = value.GetLength();
- int nIndex = 0;
- int i = 0;
- while (i < nLen)
- {
- if (nIndex > 2) break;
-
- FX_WCHAR c = value.GetAt(i);
- if (IsDigit((wchar_t)c))
- {
- number[nIndex++] = ParseStringInteger(value, i, nSkip, 4);
- i += nSkip;
- }
- else
- {
- i ++;
- }
- }
-
- if (nIndex == 2)
- {
- // case2: month/day
- // case3: day/month
- if ((number[0] >= 1 && number[0] <= 12) && (number[1] >= 1 && number[1] <= 31))
- {
- nMonth = number[0];
- nDay = number[1];
- }
- else if ((number[0] >= 1 && number[0] <= 31) && (number[1] >= 1 && number[1] <= 12))
- {
- nDay = number[0];
- nMonth = number[1];
- }
-
- bWrongFormat = FALSE;
+double CJS_PublicMethods::ParseNormalDate(const CFX_WideString& value,
+ FX_BOOL& bWrongFormat) {
+ double dt = JS_GetDateTime();
+
+ int nYear = JS_GetYearFromTime(dt);
+ int nMonth = JS_GetMonthFromTime(dt) + 1;
+ int nDay = JS_GetDayFromTime(dt);
+ int nHour = JS_GetHourFromTime(dt);
+ int nMin = JS_GetMinFromTime(dt);
+ int nSec = JS_GetSecFromTime(dt);
+
+ int number[3];
+
+ int nSkip = 0;
+ int nLen = value.GetLength();
+ int nIndex = 0;
+ int i = 0;
+ while (i < nLen) {
+ if (nIndex > 2)
+ break;
+
+ FX_WCHAR c = value.GetAt(i);
+ if (IsDigit((wchar_t)c)) {
+ number[nIndex++] = ParseStringInteger(value, i, nSkip, 4);
+ i += nSkip;
+ } else {
+ i++;
+ }
+ }
+
+ if (nIndex == 2) {
+ // case2: month/day
+ // case3: day/month
+ if ((number[0] >= 1 && number[0] <= 12) &&
+ (number[1] >= 1 && number[1] <= 31)) {
+ nMonth = number[0];
+ nDay = number[1];
+ } else if ((number[0] >= 1 && number[0] <= 31) &&
+ (number[1] >= 1 && number[1] <= 12)) {
+ nDay = number[0];
+ nMonth = number[1];
}
- else if (nIndex == 3)
- {
- // case1: year/month/day
- // case2: month/day/year
- // case3: day/month/year
-
- if (number[0] > 12 && (number[1] >= 1 && number[1] <= 12) && (number[2] >= 1 && number[2] <= 31))
- {
- nYear = number[0];
- nMonth = number[1];
- nDay = number[2];
- }
- else if ((number[0] >= 1 && number[0] <= 12) && (number[1] >= 1 && number[1] <= 31) && number[2] > 31)
- {
- nMonth = number[0];
- nDay = number[1];
- nYear = number[2];
- }
- else if ((number[0] >= 1 && number[0] <= 31) && (number[1] >= 1 && number[1] <= 12) && number[2] > 31)
- {
- nDay = number[0];
- nMonth = number[1];
- nYear = number[2];
- }
- bWrongFormat = FALSE;
- }
- else
- {
- bWrongFormat = TRUE;
- return dt;
+ bWrongFormat = FALSE;
+ } else if (nIndex == 3) {
+ // case1: year/month/day
+ // case2: month/day/year
+ // case3: day/month/year
+
+ if (number[0] > 12 && (number[1] >= 1 && number[1] <= 12) &&
+ (number[2] >= 1 && number[2] <= 31)) {
+ nYear = number[0];
+ nMonth = number[1];
+ nDay = number[2];
+ } else if ((number[0] >= 1 && number[0] <= 12) &&
+ (number[1] >= 1 && number[1] <= 31) && number[2] > 31) {
+ nMonth = number[0];
+ nDay = number[1];
+ nYear = number[2];
+ } else if ((number[0] >= 1 && number[0] <= 31) &&
+ (number[1] >= 1 && number[1] <= 12) && number[2] > 31) {
+ nDay = number[0];
+ nMonth = number[1];
+ nYear = number[2];
}
- CFX_WideString swTemp;
- swTemp.Format(L"%d/%d/%d %d:%d:%d",nMonth,nDay,nYear,nHour,nMin,nSec);
- return JS_DateParse(swTemp.c_str());
-}
-
-double CJS_PublicMethods::MakeRegularDate(const CFX_WideString & value, const CFX_WideString & format, FX_BOOL& bWrongFormat)
-{
- double dt = JS_GetDateTime();
-
- if (format.IsEmpty() || value.IsEmpty())
- return dt;
-
- int nYear = JS_GetYearFromTime(dt);
- int nMonth = JS_GetMonthFromTime(dt) + 1;
- int nDay = JS_GetDayFromTime(dt);
- int nHour = JS_GetHourFromTime(dt);
- int nMin = JS_GetMinFromTime(dt);
- int nSec = JS_GetSecFromTime(dt);
-
- int nYearSub = 99; //nYear - 2000;
-
- FX_BOOL bPm = FALSE;
- FX_BOOL bExit = FALSE;
bWrongFormat = FALSE;
+ } else {
+ bWrongFormat = TRUE;
+ return dt;
+ }
+
+ CFX_WideString swTemp;
+ swTemp.Format(L"%d/%d/%d %d:%d:%d", nMonth, nDay, nYear, nHour, nMin, nSec);
+ return JS_DateParse(swTemp.c_str());
+}
- int i=0;
- int j=0;
-
- while (i < format.GetLength())
- {
- if (bExit) break;
-
- FX_WCHAR c = format.GetAt(i);
- switch (c)
- {
- case ':':
- case '.':
- case '-':
- case '\\':
- case '/':
- i++;
- j++;
- break;
+double CJS_PublicMethods::MakeRegularDate(const CFX_WideString& value,
+ const CFX_WideString& format,
+ FX_BOOL& bWrongFormat) {
+ double dt = JS_GetDateTime();
+
+ if (format.IsEmpty() || value.IsEmpty())
+ return dt;
+
+ int nYear = JS_GetYearFromTime(dt);
+ int nMonth = JS_GetMonthFromTime(dt) + 1;
+ int nDay = JS_GetDayFromTime(dt);
+ int nHour = JS_GetHourFromTime(dt);
+ int nMin = JS_GetMinFromTime(dt);
+ int nSec = JS_GetSecFromTime(dt);
+
+ int nYearSub = 99; // nYear - 2000;
+
+ FX_BOOL bPm = FALSE;
+ FX_BOOL bExit = FALSE;
+ bWrongFormat = FALSE;
+
+ int i = 0;
+ int j = 0;
+
+ while (i < format.GetLength()) {
+ if (bExit)
+ break;
+
+ FX_WCHAR c = format.GetAt(i);
+ switch (c) {
+ case ':':
+ case '.':
+ case '-':
+ case '\\':
+ case '/':
+ i++;
+ j++;
+ break;
+ case 'y':
+ case 'm':
+ case 'd':
+ case 'H':
+ case 'h':
+ case 'M':
+ case 's':
+ case 't': {
+ int oldj = j;
+ int nSkip = 0;
+ int remaining = format.GetLength() - i - 1;
+
+ if (remaining == 0 || format.GetAt(i + 1) != c) {
+ switch (c) {
case 'y':
+ i++;
+ j++;
+ break;
case 'm':
+ nMonth = ParseStringInteger(value, j, nSkip, 2);
+ i++;
+ j += nSkip;
+ break;
case 'd':
+ nDay = ParseStringInteger(value, j, nSkip, 2);
+ i++;
+ j += nSkip;
+ break;
case 'H':
+ nHour = ParseStringInteger(value, j, nSkip, 2);
+ i++;
+ j += nSkip;
+ break;
case 'h':
+ nHour = ParseStringInteger(value, j, nSkip, 2);
+ i++;
+ j += nSkip;
+ break;
case 'M':
+ nMin = ParseStringInteger(value, j, nSkip, 2);
+ i++;
+ j += nSkip;
+ break;
case 's':
+ nSec = ParseStringInteger(value, j, nSkip, 2);
+ i++;
+ j += nSkip;
+ break;
case 't':
- {
- int oldj = j;
- int nSkip = 0;
- int remaining = format.GetLength() - i - 1;
-
- if (remaining == 0 || format.GetAt(i+1) != c)
- {
- switch (c)
- {
- case 'y':
- i++;
- j++;
- break;
- case 'm':
- nMonth = ParseStringInteger(value, j, nSkip, 2);
- i++;
- j += nSkip;
- break;
- case 'd':
- nDay = ParseStringInteger(value, j, nSkip, 2);
- i++;
- j += nSkip;
- break;
- case 'H':
- nHour = ParseStringInteger(value, j, nSkip, 2);
- i++;
- j += nSkip;
- break;
- case 'h':
- nHour = ParseStringInteger(value, j, nSkip, 2);
- i++;
- j += nSkip;
- break;
- case 'M':
- nMin = ParseStringInteger(value, j, nSkip, 2);
- i++;
- j += nSkip;
- break;
- case 's':
- nSec = ParseStringInteger(value, j, nSkip, 2);
- i++;
- j += nSkip;
- break;
- case 't':
- bPm = (j < value.GetLength() && value.GetAt(j) == 'p');
- i++;
- j++;
- break;
- }
- }
- else if (remaining == 1 || format.GetAt(i+2) != c)
- {
- switch (c)
- {
- case 'y':
- nYear = ParseStringInteger(value, j, nSkip, 4);
- i += 2;
- j += nSkip;
- break;
- case 'm':
- nMonth = ParseStringInteger(value, j, nSkip, 2);
- i += 2;
- j += nSkip;
- break;
- case 'd':
- nDay = ParseStringInteger(value, j, nSkip, 2);
- i += 2;
- j += nSkip;
- break;
- case 'H':
- nHour = ParseStringInteger(value, j, nSkip, 2);
- i += 2;
- j += nSkip;
- break;
- case 'h':
- nHour = ParseStringInteger(value, j, nSkip, 2);
- i += 2;
- j += nSkip;
- break;
- case 'M':
- nMin = ParseStringInteger(value, j, nSkip, 2);
- i += 2;
- j += nSkip;
- break;
- case 's':
- nSec = ParseStringInteger(value, j, nSkip, 2);
- i += 2;
- j += nSkip;
- break;
- case 't':
- bPm = (j + 1 < value.GetLength() && value.GetAt(j) == 'p' && value.GetAt(j+1) == 'm');
- i += 2;
- j += 2;
- break;
- }
- }
- else if (remaining == 2 || format.GetAt(i+3) != c)
- {
- switch (c)
- {
- case 'm':
- {
- CFX_WideString sMonth = ParseStringString(value, j, nSkip);
- FX_BOOL bFind = FALSE;
- for (int m = 0; m < 12; m++)
- {
- if (sMonth.CompareNoCase(months[m]) == 0)
- {
- nMonth = m + 1;
- i+=3;
- j+=nSkip;
- bFind = TRUE;
- break;
- }
- }
-
- if (!bFind)
- {
- nMonth = ParseStringInteger(value, j, nSkip, 3);
- i+=3;
- j += nSkip;
- }
- }
- break;
- case 'y':
- break;
- default:
- i+=3;
- j+=3;
- break;
- }
- }
- else if (remaining == 3 || format.GetAt(i+4) != c)
- {
- switch (c)
- {
-
-
- case 'y':
- nYear = ParseStringInteger(value, j, nSkip, 4);
- j += nSkip;
- i += 4;
- break;
- case 'm':
- {
- FX_BOOL bFind = FALSE;
-
- CFX_WideString sMonth = ParseStringString(value, j, nSkip);
- sMonth.MakeLower();
-
- for (int m = 0; m < 12; m++)
- {
- CFX_WideString sFullMonths = fullmonths[m];
- sFullMonths.MakeLower();
-
- if (sFullMonths.Find(sMonth.c_str(), 0) != -1)
- {
- nMonth = m + 1;
- i += 4;
- j += nSkip;
- bFind = TRUE;
- break;
- }
- }
-
- if (!bFind)
- {
- nMonth = ParseStringInteger(value, j, nSkip, 4);
- i+=4;
- j += nSkip;
- }
- }
- break;
- default:
- i += 4;
- j += 4;
- break;
- }
- }
- else
- {
- if (j >= value.GetLength() || format.GetAt(i) != value.GetAt(j))
- {
- bWrongFormat = TRUE;
- bExit = TRUE;
- }
- i++;
- j++;
- }
-
- if (oldj == j)
- {
- bWrongFormat = TRUE;
- bExit = TRUE;
- }
+ bPm = (j < value.GetLength() && value.GetAt(j) == 'p');
+ i++;
+ j++;
+ break;
+ }
+ } else if (remaining == 1 || format.GetAt(i + 2) != c) {
+ switch (c) {
+ case 'y':
+ nYear = ParseStringInteger(value, j, nSkip, 4);
+ i += 2;
+ j += nSkip;
+ break;
+ case 'm':
+ nMonth = ParseStringInteger(value, j, nSkip, 2);
+ i += 2;
+ j += nSkip;
+ break;
+ case 'd':
+ nDay = ParseStringInteger(value, j, nSkip, 2);
+ i += 2;
+ j += nSkip;
+ break;
+ case 'H':
+ nHour = ParseStringInteger(value, j, nSkip, 2);
+ i += 2;
+ j += nSkip;
+ break;
+ case 'h':
+ nHour = ParseStringInteger(value, j, nSkip, 2);
+ i += 2;
+ j += nSkip;
+ break;
+ case 'M':
+ nMin = ParseStringInteger(value, j, nSkip, 2);
+ i += 2;
+ j += nSkip;
+ break;
+ case 's':
+ nSec = ParseStringInteger(value, j, nSkip, 2);
+ i += 2;
+ j += nSkip;
+ break;
+ case 't':
+ bPm = (j + 1 < value.GetLength() && value.GetAt(j) == 'p' &&
+ value.GetAt(j + 1) == 'm');
+ i += 2;
+ j += 2;
+ break;
+ }
+ } else if (remaining == 2 || format.GetAt(i + 3) != c) {
+ switch (c) {
+ case 'm': {
+ CFX_WideString sMonth = ParseStringString(value, j, nSkip);
+ FX_BOOL bFind = FALSE;
+ for (int m = 0; m < 12; m++) {
+ if (sMonth.CompareNoCase(months[m]) == 0) {
+ nMonth = m + 1;
+ i += 3;
+ j += nSkip;
+ bFind = TRUE;
+ break;
}
-
- break;
+ }
+
+ if (!bFind) {
+ nMonth = ParseStringInteger(value, j, nSkip, 3);
+ i += 3;
+ j += nSkip;
+ }
+ } break;
+ case 'y':
+ break;
default:
- if (value.GetLength() <= j)
- {
- bExit = TRUE;
- }
- else if (format.GetAt(i) != value.GetAt(j))
- {
- bWrongFormat = TRUE;
- bExit = TRUE;
+ i += 3;
+ j += 3;
+ break;
+ }
+ } else if (remaining == 3 || format.GetAt(i + 4) != c) {
+ switch (c) {
+ case 'y':
+ nYear = ParseStringInteger(value, j, nSkip, 4);
+ j += nSkip;
+ i += 4;
+ break;
+ case 'm': {
+ FX_BOOL bFind = FALSE;
+
+ CFX_WideString sMonth = ParseStringString(value, j, nSkip);
+ sMonth.MakeLower();
+
+ for (int m = 0; m < 12; m++) {
+ CFX_WideString sFullMonths = fullmonths[m];
+ sFullMonths.MakeLower();
+
+ if (sFullMonths.Find(sMonth.c_str(), 0) != -1) {
+ nMonth = m + 1;
+ i += 4;
+ j += nSkip;
+ bFind = TRUE;
+ break;
}
+ }
+
+ if (!bFind) {
+ nMonth = ParseStringInteger(value, j, nSkip, 4);
+ i += 4;
+ j += nSkip;
+ }
+ } break;
+ default:
+ i += 4;
+ j += 4;
+ break;
+ }
+ } else {
+ if (j >= value.GetLength() || format.GetAt(i) != value.GetAt(j)) {
+ bWrongFormat = TRUE;
+ bExit = TRUE;
+ }
+ i++;
+ j++;
+ }
- i++;
- j++;
- break;
+ if (oldj == j) {
+ bWrongFormat = TRUE;
+ bExit = TRUE;
+ }
+ }
+
+ break;
+ default:
+ if (value.GetLength() <= j) {
+ bExit = TRUE;
+ } else if (format.GetAt(i) != value.GetAt(j)) {
+ bWrongFormat = TRUE;
+ bExit = TRUE;
}
- }
- if (bPm) nHour += 12;
+ i++;
+ j++;
+ break;
+ }
+ }
- if (nYear >= 0 && nYear <= nYearSub)
- nYear += 2000;
+ if (bPm)
+ nHour += 12;
- if (nMonth < 1 || nMonth > 12)
- bWrongFormat = TRUE;
+ if (nYear >= 0 && nYear <= nYearSub)
+ nYear += 2000;
- if (nDay < 1 || nDay > 31)
- bWrongFormat = TRUE;
+ if (nMonth < 1 || nMonth > 12)
+ bWrongFormat = TRUE;
- if (nHour < 0 || nHour > 24)
- bWrongFormat = TRUE;
+ if (nDay < 1 || nDay > 31)
+ bWrongFormat = TRUE;
- if (nMin < 0 || nMin > 60)
- bWrongFormat = TRUE;
+ if (nHour < 0 || nHour > 24)
+ bWrongFormat = TRUE;
- if (nSec < 0 || nSec > 60)
- bWrongFormat = TRUE;
+ if (nMin < 0 || nMin > 60)
+ bWrongFormat = TRUE;
- double dRet = 0;
+ if (nSec < 0 || nSec > 60)
+ bWrongFormat = TRUE;
- if (bWrongFormat)
- {
- dRet = ParseNormalDate(value, bWrongFormat);
- }
- else
- {
- dRet = JS_MakeDate(JS_MakeDay(nYear,nMonth - 1,nDay),JS_MakeTime(nHour, nMin, nSec, 0));
+ double dRet = 0;
- if (JS_PortIsNan(dRet))
- {
- dRet = JS_DateParse(value.c_str());
- }
- }
+ if (bWrongFormat) {
+ dRet = ParseNormalDate(value, bWrongFormat);
+ } else {
+ dRet = JS_MakeDate(JS_MakeDay(nYear, nMonth - 1, nDay),
+ JS_MakeTime(nHour, nMin, nSec, 0));
- if (JS_PortIsNan(dRet))
- {
- dRet = ParseNormalDate(value, bWrongFormat);
+ if (JS_PortIsNan(dRet)) {
+ dRet = JS_DateParse(value.c_str());
}
+ }
- return dRet;
+ if (JS_PortIsNan(dRet)) {
+ dRet = ParseNormalDate(value, bWrongFormat);
+ }
+ return dRet;
}
-CFX_WideString CJS_PublicMethods::MakeFormatDate(double dDate, const CFX_WideString & format)
-{
- CFX_WideString sRet = L"",sPart = L"";
-
- int nYear = JS_GetYearFromTime(dDate);
- int nMonth = JS_GetMonthFromTime(dDate) + 1;
- int nDay = JS_GetDayFromTime(dDate);
- int nHour = JS_GetHourFromTime(dDate);
- int nMin = JS_GetMinFromTime(dDate);
- int nSec = JS_GetSecFromTime(dDate);
-
- int i = 0;
- while (i < format.GetLength())
- {
- FX_WCHAR c = format.GetAt(i);
- int remaining = format.GetLength() - i - 1;
- sPart = L"";
- switch (c)
- {
+CFX_WideString CJS_PublicMethods::MakeFormatDate(double dDate,
+ const CFX_WideString& format) {
+ CFX_WideString sRet = L"", sPart = L"";
+
+ int nYear = JS_GetYearFromTime(dDate);
+ int nMonth = JS_GetMonthFromTime(dDate) + 1;
+ int nDay = JS_GetDayFromTime(dDate);
+ int nHour = JS_GetHourFromTime(dDate);
+ int nMin = JS_GetMinFromTime(dDate);
+ int nSec = JS_GetSecFromTime(dDate);
+
+ int i = 0;
+ while (i < format.GetLength()) {
+ FX_WCHAR c = format.GetAt(i);
+ int remaining = format.GetLength() - i - 1;
+ sPart = L"";
+ switch (c) {
+ case 'y':
+ case 'm':
+ case 'd':
+ case 'H':
+ case 'h':
+ case 'M':
+ case 's':
+ case 't':
+ if (remaining == 0 || format.GetAt(i + 1) != c) {
+ switch (c) {
case 'y':
+ sPart += c;
+ break;
case 'm':
+ sPart.Format(L"%d", nMonth);
+ break;
case 'd':
+ sPart.Format(L"%d", nDay);
+ break;
case 'H':
+ sPart.Format(L"%d", nHour);
+ break;
case 'h':
+ sPart.Format(L"%d", nHour > 12 ? nHour - 12 : nHour);
+ break;
case 'M':
+ sPart.Format(L"%d", nMin);
+ break;
case 's':
+ sPart.Format(L"%d", nSec);
+ break;
case 't':
- if (remaining == 0 || format.GetAt(i+1) != c)
- {
- switch (c)
- {
- case 'y':
- sPart += c;
- break;
- case 'm':
- sPart.Format(L"%d",nMonth);
- break;
- case 'd':
- sPart.Format(L"%d",nDay);
- break;
- case 'H':
- sPart.Format(L"%d",nHour);
- break;
- case 'h':
- sPart.Format(L"%d",nHour>12?nHour - 12:nHour);
- break;
- case 'M':
- sPart.Format(L"%d",nMin);
- break;
- case 's':
- sPart.Format(L"%d",nSec);
- break;
- case 't':
- sPart += nHour>12?'p':'a';
- break;
- }
- i++;
- }
- else if (remaining == 1 || format.GetAt(i+2) != c)
- {
- switch (c)
- {
- case 'y':
- sPart.Format(L"%02d",nYear - (nYear / 100) * 100);
- break;
- case 'm':
- sPart.Format(L"%02d",nMonth);
- break;
- case 'd':
- sPart.Format(L"%02d",nDay);
- break;
- case 'H':
- sPart.Format(L"%02d",nHour);
- break;
- case 'h':
- sPart.Format(L"%02d",nHour>12?nHour - 12:nHour);
- break;
- case 'M':
- sPart.Format(L"%02d",nMin);
- break;
- case 's':
- sPart.Format(L"%02d",nSec);
- break;
- case 't':
- sPart = nHour>12? L"pm": L"am";
- break;
- }
- i+=2;
- }
- else if (remaining == 2 || format.GetAt(i+3) != c)
- {
- switch (c)
- {
- case 'm':
- i+=3;
- if (nMonth > 0&&nMonth <= 12)
- sPart += months[nMonth - 1];
- break;
- default:
- i+=3;
- sPart += c;
- sPart += c;
- sPart += c;
- break;
- }
- }
- else if (remaining == 3 || format.GetAt(i+4) != c)
- {
- switch (c)
- {
- case 'y':
- sPart.Format(L"%04d",nYear);
- i += 4;
- break;
- case 'm':
- i+=4;
- if (nMonth > 0&&nMonth <= 12)
- sPart += fullmonths[nMonth - 1];
- break;
- default:
- i += 4;
- sPart += c;
- sPart += c;
- sPart += c;
- sPart += c;
- break;
- }
- }
- else
- {
- i++;
- sPart += c;
- }
- break;
+ sPart += nHour > 12 ? 'p' : 'a';
+ break;
+ }
+ i++;
+ } else if (remaining == 1 || format.GetAt(i + 2) != c) {
+ switch (c) {
+ case 'y':
+ sPart.Format(L"%02d", nYear - (nYear / 100) * 100);
+ break;
+ case 'm':
+ sPart.Format(L"%02d", nMonth);
+ break;
+ case 'd':
+ sPart.Format(L"%02d", nDay);
+ break;
+ case 'H':
+ sPart.Format(L"%02d", nHour);
+ break;
+ case 'h':
+ sPart.Format(L"%02d", nHour > 12 ? nHour - 12 : nHour);
+ break;
+ case 'M':
+ sPart.Format(L"%02d", nMin);
+ break;
+ case 's':
+ sPart.Format(L"%02d", nSec);
+ break;
+ case 't':
+ sPart = nHour > 12 ? L"pm" : L"am";
+ break;
+ }
+ i += 2;
+ } else if (remaining == 2 || format.GetAt(i + 3) != c) {
+ switch (c) {
+ case 'm':
+ i += 3;
+ if (nMonth > 0 && nMonth <= 12)
+ sPart += months[nMonth - 1];
+ break;
default:
- i++;
- sPart += c;
- break;
+ i += 3;
+ sPart += c;
+ sPart += c;
+ sPart += c;
+ break;
+ }
+ } else if (remaining == 3 || format.GetAt(i + 4) != c) {
+ switch (c) {
+ case 'y':
+ sPart.Format(L"%04d", nYear);
+ i += 4;
+ break;
+ case 'm':
+ i += 4;
+ if (nMonth > 0 && nMonth <= 12)
+ sPart += fullmonths[nMonth - 1];
+ break;
+ default:
+ i += 4;
+ sPart += c;
+ sPart += c;
+ sPart += c;
+ sPart += c;
+ break;
+ }
+ } else {
+ i++;
+ sPart += c;
}
-
- sRet += sPart;
+ break;
+ default:
+ i++;
+ sPart += c;
+ break;
}
- return sRet;
+ sRet += sPart;
+ }
+
+ return sRet;
}
/* -------------------------------------------------------------------------- */
-//function AFNumber_Format(nDec, sepStyle, negStyle, currStyle, strCurrency, bCurrencyPrepend)
-FX_BOOL CJS_PublicMethods::AFNumber_Format(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
+// function AFNumber_Format(nDec, sepStyle, negStyle, currStyle, strCurrency,
+// bCurrencyPrepend)
+FX_BOOL CJS_PublicMethods::AFNumber_Format(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
#if _FX_OS_ != _FX_ANDROID_
- v8::Isolate* isolate = ::GetIsolate(cc);
- CJS_Context* pContext = (CJS_Context *)cc;
- ASSERT(pContext != NULL);
- CJS_EventHandler* pEvent = pContext->GetEventHandler();
- ASSERT(pEvent != NULL);
-
- if (params.size() != 6)
- {
- sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
- return FALSE;
- }
- if(!pEvent->m_pValue)
- return FALSE;
- CFX_WideString& Value = pEvent->Value();
- CFX_ByteString strValue = StrTrim(CFX_ByteString::FromUnicode(Value));
-
- if (strValue.IsEmpty()) return TRUE;
-
- int iDec = params[0].ToInt();
- int iSepStyle = params[1].ToInt();
- int iNegStyle = params[2].ToInt();
- // params[3] is iCurrStyle, it's not used.
- std::wstring wstrCurrency(params[4].ToCFXWideString().c_str());
- FX_BOOL bCurrencyPrepend = params[5].ToBool();
+ v8::Isolate* isolate = ::GetIsolate(cc);
+ CJS_Context* pContext = (CJS_Context*)cc;
+ ASSERT(pContext != NULL);
+ CJS_EventHandler* pEvent = pContext->GetEventHandler();
+ ASSERT(pEvent != NULL);
+
+ if (params.size() != 6) {
+ sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
+ return FALSE;
+ }
+ if (!pEvent->m_pValue)
+ return FALSE;
+ CFX_WideString& Value = pEvent->Value();
+ CFX_ByteString strValue = StrTrim(CFX_ByteString::FromUnicode(Value));
+
+ if (strValue.IsEmpty())
+ return TRUE;
- if (iDec < 0) iDec = -iDec;
+ int iDec = params[0].ToInt();
+ int iSepStyle = params[1].ToInt();
+ int iNegStyle = params[2].ToInt();
+ // params[3] is iCurrStyle, it's not used.
+ std::wstring wstrCurrency(params[4].ToCFXWideString().c_str());
+ FX_BOOL bCurrencyPrepend = params[5].ToBool();
- if (iSepStyle < 0 || iSepStyle > 3)
- iSepStyle = 0;
+ if (iDec < 0)
+ iDec = -iDec;
- if (iNegStyle < 0 || iNegStyle > 3)
- iNegStyle = 0;
+ if (iSepStyle < 0 || iSepStyle > 3)
+ iSepStyle = 0;
+ if (iNegStyle < 0 || iNegStyle > 3)
+ iNegStyle = 0;
- //////////////////////////////////////////////////////
- //for processing decimal places
- strValue.Replace(",", ".");
- double dValue = atof(strValue);
- if (iDec > 0)
- dValue += DOUBLE_CORRECT;
+ //////////////////////////////////////////////////////
+ // for processing decimal places
+ strValue.Replace(",", ".");
+ double dValue = atof(strValue);
+ if (iDec > 0)
+ dValue += DOUBLE_CORRECT;
- int iDec2;
- int iNegative = 0;
+ int iDec2;
+ int iNegative = 0;
+ strValue = fcvt(dValue, iDec, &iDec2, &iNegative);
+ if (strValue.IsEmpty()) {
+ dValue = 0;
strValue = fcvt(dValue, iDec, &iDec2, &iNegative);
- if (strValue.IsEmpty())
- {
- dValue = 0;
- strValue = fcvt(dValue, iDec, &iDec2, &iNegative);
- if (strValue.IsEmpty())
- {
- strValue = "0";
- iDec2 = 1;
- }
-
- }
-
- if (iDec2 < 0)
- {
- for (int iNum = 0;iNum < abs(iDec2);iNum++)
- {
- strValue = "0" + strValue;
- }
- iDec2 = 0;
-
- }
- int iMax = strValue.GetLength();
- if (iDec2 > iMax)
- {
- for (int iNum = 0;iNum <= iDec2 - iMax ;iNum++)
- {
- strValue += "0";
- }
- iMax = iDec2+1;
- }
- ///////////////////////////////////////////////////////
- //for processing seperator style
- if (iDec2 < iMax)
- {
- if (iSepStyle == 0 || iSepStyle == 1)
- {
- strValue.Insert(iDec2, '.');
- iMax++;
- }
- else if (iSepStyle == 2 || iSepStyle == 3)
- {
- strValue.Insert(iDec2, ',');
- iMax++;
- }
-
- if (iDec2 == 0)
- strValue.Insert(iDec2, '0');
- }
- if (iSepStyle == 0 || iSepStyle == 2)
- {
- char cSeperator;
- if (iSepStyle == 0)
- cSeperator = ',';
- else
- cSeperator = '.';
-
- int iDecPositive;
- iDecPositive = iDec2;
-
- for (iDecPositive = iDec2 -3; iDecPositive > 0;iDecPositive -= 3)
- {
- strValue.Insert(iDecPositive, cSeperator);
- iMax++;
- }
- }
-
- //////////////////////////////////////////////////////////////////////
- //for processing currency string
-
- Value = CFX_WideString::FromLocal(strValue);
- std::wstring strValue2 = Value.c_str();
-
- if (bCurrencyPrepend)
- strValue2 = wstrCurrency + strValue2;
+ if (strValue.IsEmpty()) {
+ strValue = "0";
+ iDec2 = 1;
+ }
+ }
+
+ if (iDec2 < 0) {
+ for (int iNum = 0; iNum < abs(iDec2); iNum++) {
+ strValue = "0" + strValue;
+ }
+ iDec2 = 0;
+ }
+ int iMax = strValue.GetLength();
+ if (iDec2 > iMax) {
+ for (int iNum = 0; iNum <= iDec2 - iMax; iNum++) {
+ strValue += "0";
+ }
+ iMax = iDec2 + 1;
+ }
+ ///////////////////////////////////////////////////////
+ // for processing seperator style
+ if (iDec2 < iMax) {
+ if (iSepStyle == 0 || iSepStyle == 1) {
+ strValue.Insert(iDec2, '.');
+ iMax++;
+ } else if (iSepStyle == 2 || iSepStyle == 3) {
+ strValue.Insert(iDec2, ',');
+ iMax++;
+ }
+
+ if (iDec2 == 0)
+ strValue.Insert(iDec2, '0');
+ }
+ if (iSepStyle == 0 || iSepStyle == 2) {
+ char cSeperator;
+ if (iSepStyle == 0)
+ cSeperator = ',';
else
- strValue2 = strValue2 + wstrCurrency;
-
-
-
- /////////////////////////////////////////////////////////////////////////
- //for processing negative style
- if (iNegative)
- {
- if (iNegStyle == 0)
- {
- strValue2.insert(0,L"-");
- }
- if (iNegStyle == 2 || iNegStyle == 3)
- {
- strValue2.insert(0,L"(");
- strValue2.insert(strValue2.length(),L")");
- }
- if (iNegStyle == 1 || iNegStyle == 3)
- {
- if (Field * fTarget = pEvent->Target_Field())
- {
- CJS_Array arColor(isolate);
- CJS_Value vColElm(isolate);
- vColElm = L"RGB";
- arColor.SetElement(0,vColElm);
- vColElm = 1;
- arColor.SetElement(1,vColElm);
- vColElm = 0;
- arColor.SetElement(2,vColElm);
-
- arColor.SetElement(3,vColElm);
-
- CJS_PropValue vProp(isolate);
- vProp.StartGetting();
- vProp<<arColor;
- vProp.StartSetting();
- fTarget->textColor(cc,vProp,sError);// red
- }
+ cSeperator = '.';
+
+ int iDecPositive;
+ iDecPositive = iDec2;
+
+ for (iDecPositive = iDec2 - 3; iDecPositive > 0; iDecPositive -= 3) {
+ strValue.Insert(iDecPositive, cSeperator);
+ iMax++;
+ }
+ }
+
+ //////////////////////////////////////////////////////////////////////
+ // for processing currency string
+
+ Value = CFX_WideString::FromLocal(strValue);
+ std::wstring strValue2 = Value.c_str();
+
+ if (bCurrencyPrepend)
+ strValue2 = wstrCurrency + strValue2;
+ else
+ strValue2 = strValue2 + wstrCurrency;
+
+ /////////////////////////////////////////////////////////////////////////
+ // for processing negative style
+ if (iNegative) {
+ if (iNegStyle == 0) {
+ strValue2.insert(0, L"-");
+ }
+ if (iNegStyle == 2 || iNegStyle == 3) {
+ strValue2.insert(0, L"(");
+ strValue2.insert(strValue2.length(), L")");
+ }
+ if (iNegStyle == 1 || iNegStyle == 3) {
+ if (Field* fTarget = pEvent->Target_Field()) {
+ CJS_Array arColor(isolate);
+ CJS_Value vColElm(isolate);
+ vColElm = L"RGB";
+ arColor.SetElement(0, vColElm);
+ vColElm = 1;
+ arColor.SetElement(1, vColElm);
+ vColElm = 0;
+ arColor.SetElement(2, vColElm);
+
+ arColor.SetElement(3, vColElm);
+
+ CJS_PropValue vProp(isolate);
+ vProp.StartGetting();
+ vProp << arColor;
+ vProp.StartSetting();
+ fTarget->textColor(cc, vProp, sError); // red
+ }
+ }
+ } else {
+ if (iNegStyle == 1 || iNegStyle == 3) {
+ if (Field* fTarget = pEvent->Target_Field()) {
+ CJS_Array arColor(isolate);
+ CJS_Value vColElm(isolate);
+ vColElm = L"RGB";
+ arColor.SetElement(0, vColElm);
+ vColElm = 0;
+ arColor.SetElement(1, vColElm);
+ arColor.SetElement(2, vColElm);
+ arColor.SetElement(3, vColElm);
+
+ CJS_PropValue vProp(isolate);
+ vProp.StartGetting();
+ fTarget->textColor(cc, vProp, sError);
+
+ CJS_Array aProp(isolate);
+ vProp.ConvertToArray(aProp);
+
+ CPWL_Color crProp;
+ CPWL_Color crColor;
+ color::ConvertArrayToPWLColor(aProp, crProp);
+ color::ConvertArrayToPWLColor(arColor, crColor);
+
+ if (crColor != crProp) {
+ CJS_PropValue vProp2(isolate);
+ vProp2.StartGetting();
+ vProp2 << arColor;
+ vProp2.StartSetting();
+ fTarget->textColor(cc, vProp2, sError);
}
+ }
}
- else
- {
- if (iNegStyle == 1 || iNegStyle == 3)
- {
- if (Field *fTarget = pEvent->Target_Field())
- {
- CJS_Array arColor(isolate);
- CJS_Value vColElm(isolate);
- vColElm = L"RGB";
- arColor.SetElement(0,vColElm);
- vColElm = 0;
- arColor.SetElement(1,vColElm);
- arColor.SetElement(2,vColElm);
- arColor.SetElement(3,vColElm);
-
- CJS_PropValue vProp(isolate);
- vProp.StartGetting();
- fTarget->textColor(cc,vProp,sError);
-
- CJS_Array aProp(isolate);
- vProp.ConvertToArray(aProp);
-
- CPWL_Color crProp;
- CPWL_Color crColor;
- color::ConvertArrayToPWLColor(aProp, crProp);
- color::ConvertArrayToPWLColor(arColor, crColor);
-
- if (crColor != crProp)
- {
- CJS_PropValue vProp2(isolate);
- vProp2.StartGetting();
- vProp2<<arColor;
- vProp2.StartSetting();
- fTarget->textColor(cc,vProp2,sError);
- }
- }
- }
- }
- Value = strValue2.c_str();
+ }
+ Value = strValue2.c_str();
#endif
- return TRUE;
+ return TRUE;
}
-//function AFNumber_Keystroke(nDec, sepStyle, negStyle, currStyle, strCurrency, bCurrencyPrepend)
-FX_BOOL CJS_PublicMethods::AFNumber_Keystroke(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- CJS_Context* pContext = (CJS_Context *)cc;
- ASSERT(pContext != NULL);
- CJS_EventHandler* pEvent = pContext->GetEventHandler();
- ASSERT(pEvent != NULL);
-
- if(params.size() < 2)
- return FALSE;
- int iSepStyle = params[1].ToInt();
-
- if (iSepStyle < 0 || iSepStyle > 3)
- iSepStyle = 0;
- if(!pEvent->m_pValue)
- return FALSE;
- CFX_WideString & val = pEvent->Value();
- CFX_WideString & w_strChange = pEvent->Change();
- CFX_WideString w_strValue = val;
-
- if (pEvent->WillCommit())
- {
- CFX_WideString wstrChange = w_strChange;
- CFX_WideString wstrValue = StrLTrim(w_strValue.c_str());
- if (wstrValue.IsEmpty())
- return TRUE;
-
- CFX_WideString swTemp = wstrValue;
- swTemp.Replace(L",", L".");
- if (!IsNumber(swTemp.c_str()))
- {
- pEvent->Rc() = FALSE;
- sError = JSGetStringFromID(pContext, IDS_STRING_JSAFNUMBER_KEYSTROKE);
- Alert(pContext, sError.c_str());
- return TRUE;
- }
- return TRUE; // it happens after the last keystroke and before validating,
- }
-
- std::wstring w_strValue2 = w_strValue.c_str();
- std::wstring w_strChange2 = w_strChange.c_str();
- std::wstring w_strSelected;
- if(-1 != pEvent->SelStart())
- w_strSelected = w_strValue2.substr(pEvent->SelStart(),(pEvent->SelEnd() - pEvent->SelStart()));
- FX_BOOL bHasSign = (w_strValue2.find('-') != -1) && (w_strSelected.find('-') == -1);
- if (bHasSign)
- {
- //can't insert "change" in front to sign postion.
- if (pEvent->SelStart() == 0)
- {
- FX_BOOL &bRc = pEvent->Rc();
- bRc = FALSE;
- return TRUE;
- }
- }
-
- char cSep = L'.';
-
- switch (iSepStyle)
- {
+// function AFNumber_Keystroke(nDec, sepStyle, negStyle, currStyle, strCurrency,
+// bCurrencyPrepend)
+FX_BOOL CJS_PublicMethods::AFNumber_Keystroke(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ CJS_Context* pContext = (CJS_Context*)cc;
+ ASSERT(pContext != NULL);
+ CJS_EventHandler* pEvent = pContext->GetEventHandler();
+ ASSERT(pEvent != NULL);
+
+ if (params.size() < 2)
+ return FALSE;
+ int iSepStyle = params[1].ToInt();
+
+ if (iSepStyle < 0 || iSepStyle > 3)
+ iSepStyle = 0;
+ if (!pEvent->m_pValue)
+ return FALSE;
+ CFX_WideString& val = pEvent->Value();
+ CFX_WideString& w_strChange = pEvent->Change();
+ CFX_WideString w_strValue = val;
+
+ if (pEvent->WillCommit()) {
+ CFX_WideString wstrChange = w_strChange;
+ CFX_WideString wstrValue = StrLTrim(w_strValue.c_str());
+ if (wstrValue.IsEmpty())
+ return TRUE;
+
+ CFX_WideString swTemp = wstrValue;
+ swTemp.Replace(L",", L".");
+ if (!IsNumber(swTemp.c_str())) {
+ pEvent->Rc() = FALSE;
+ sError = JSGetStringFromID(pContext, IDS_STRING_JSAFNUMBER_KEYSTROKE);
+ Alert(pContext, sError.c_str());
+ return TRUE;
+ }
+ return TRUE; // it happens after the last keystroke and before validating,
+ }
+
+ std::wstring w_strValue2 = w_strValue.c_str();
+ std::wstring w_strChange2 = w_strChange.c_str();
+ std::wstring w_strSelected;
+ if (-1 != pEvent->SelStart())
+ w_strSelected = w_strValue2.substr(pEvent->SelStart(),
+ (pEvent->SelEnd() - pEvent->SelStart()));
+ FX_BOOL bHasSign =
+ (w_strValue2.find('-') != -1) && (w_strSelected.find('-') == -1);
+ if (bHasSign) {
+ // can't insert "change" in front to sign postion.
+ if (pEvent->SelStart() == 0) {
+ FX_BOOL& bRc = pEvent->Rc();
+ bRc = FALSE;
+ return TRUE;
+ }
+ }
+
+ char cSep = L'.';
+
+ switch (iSepStyle) {
case 0:
case 1:
- cSep = L'.';
- break;
+ cSep = L'.';
+ break;
case 2:
case 3:
- cSep = L',';
- break;
- }
-
- FX_BOOL bHasSep = (w_strValue2.find(cSep) != -1);
- for (std::wstring::iterator it = w_strChange2.begin(); it != w_strChange2.end(); it++)
- {
- if (*it == cSep)
- {
- if (bHasSep)
- {
- FX_BOOL &bRc = pEvent->Rc();
- bRc = FALSE;
- return TRUE;
- }
- bHasSep = TRUE;
- continue;
- }
- if (*it == L'-')
- {
- if (bHasSign)
- {
- FX_BOOL &bRc = pEvent->Rc();
- bRc = FALSE;
- return TRUE;
- }
- if (it != w_strChange2.begin()) //sign's position is not correct
- {
- FX_BOOL &bRc = pEvent->Rc();
- bRc = FALSE;
- return TRUE;
- }
- if (pEvent->SelStart() != 0)
- {
- FX_BOOL &bRc = pEvent->Rc();
- bRc = FALSE;
- return TRUE;
- }
- bHasSign = TRUE;
- continue;
- }
-
- if (!IsDigit(*it))
- {
- FX_BOOL &bRc = pEvent->Rc();
- bRc = FALSE;
- return TRUE;
- }
- }
-
-
- std::wstring w_prefix = w_strValue2.substr(0,pEvent->SelStart());
- std::wstring w_postfix;
- if (pEvent->SelEnd()<(int)w_strValue2.length())
- w_postfix = w_strValue2.substr(pEvent->SelEnd());
- w_strValue2 = w_prefix + w_strChange2 + w_postfix;
- w_strValue = w_strValue2.c_str();
- val = w_strValue;
- return TRUE;
-
+ cSep = L',';
+ break;
+ }
+
+ FX_BOOL bHasSep = (w_strValue2.find(cSep) != -1);
+ for (std::wstring::iterator it = w_strChange2.begin();
+ it != w_strChange2.end(); it++) {
+ if (*it == cSep) {
+ if (bHasSep) {
+ FX_BOOL& bRc = pEvent->Rc();
+ bRc = FALSE;
+ return TRUE;
+ }
+ bHasSep = TRUE;
+ continue;
+ }
+ if (*it == L'-') {
+ if (bHasSign) {
+ FX_BOOL& bRc = pEvent->Rc();
+ bRc = FALSE;
+ return TRUE;
+ }
+ if (it != w_strChange2.begin()) // sign's position is not correct
+ {
+ FX_BOOL& bRc = pEvent->Rc();
+ bRc = FALSE;
+ return TRUE;
+ }
+ if (pEvent->SelStart() != 0) {
+ FX_BOOL& bRc = pEvent->Rc();
+ bRc = FALSE;
+ return TRUE;
+ }
+ bHasSign = TRUE;
+ continue;
+ }
+
+ if (!IsDigit(*it)) {
+ FX_BOOL& bRc = pEvent->Rc();
+ bRc = FALSE;
+ return TRUE;
+ }
+ }
+
+ std::wstring w_prefix = w_strValue2.substr(0, pEvent->SelStart());
+ std::wstring w_postfix;
+ if (pEvent->SelEnd() < (int)w_strValue2.length())
+ w_postfix = w_strValue2.substr(pEvent->SelEnd());
+ w_strValue2 = w_prefix + w_strChange2 + w_postfix;
+ w_strValue = w_strValue2.c_str();
+ val = w_strValue;
+ return TRUE;
}
-//function AFPercent_Format(nDec, sepStyle)
-FX_BOOL CJS_PublicMethods::AFPercent_Format(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
+// function AFPercent_Format(nDec, sepStyle)
+FX_BOOL CJS_PublicMethods::AFPercent_Format(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
#if _FX_OS_ != _FX_ANDROID_
- CJS_Context* pContext = (CJS_Context *)cc;
- ASSERT(pContext != NULL);
- CJS_EventHandler* pEvent = pContext->GetEventHandler();
- ASSERT(pEvent != NULL);
-
- if (params.size() != 2)
- {
- sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
- return FALSE;
- }
- if(!pEvent->m_pValue)
- return FALSE;
-
- CFX_WideString& Value = pEvent->Value();
- CFX_ByteString strValue = StrTrim(CFX_ByteString::FromUnicode(Value));
- if (strValue.IsEmpty())
- return TRUE;
-
- int iDec = params[0].ToInt();
- if (iDec < 0)
- iDec = -iDec;
-
- int iSepStyle = params[1].ToInt();
- if (iSepStyle < 0 || iSepStyle > 3)
- iSepStyle = 0;
-
- //////////////////////////////////////////////////////
- //for processing decimal places
- double dValue = atof(strValue);
- dValue *= 100;
- if (iDec > 0)
- dValue += DOUBLE_CORRECT;//УÕý
+ CJS_Context* pContext = (CJS_Context*)cc;
+ ASSERT(pContext != NULL);
+ CJS_EventHandler* pEvent = pContext->GetEventHandler();
+ ASSERT(pEvent != NULL);
+
+ if (params.size() != 2) {
+ sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
+ return FALSE;
+ }
+ if (!pEvent->m_pValue)
+ return FALSE;
+
+ CFX_WideString& Value = pEvent->Value();
+ CFX_ByteString strValue = StrTrim(CFX_ByteString::FromUnicode(Value));
+ if (strValue.IsEmpty())
+ return TRUE;
- int iDec2;
- int iNegative = 0;
+ int iDec = params[0].ToInt();
+ if (iDec < 0)
+ iDec = -iDec;
+
+ int iSepStyle = params[1].ToInt();
+ if (iSepStyle < 0 || iSepStyle > 3)
+ iSepStyle = 0;
+
+ //////////////////////////////////////////////////////
+ // for processing decimal places
+ double dValue = atof(strValue);
+ dValue *= 100;
+ if (iDec > 0)
+ dValue += DOUBLE_CORRECT; //УÕý
+
+ int iDec2;
+ int iNegative = 0;
+ strValue = fcvt(dValue, iDec, &iDec2, &iNegative);
+ if (strValue.IsEmpty()) {
+ dValue = 0;
strValue = fcvt(dValue, iDec, &iDec2, &iNegative);
- if (strValue.IsEmpty())
- {
- dValue = 0;
- strValue = fcvt(dValue, iDec, &iDec2, &iNegative);
- }
-
- if (iDec2 < 0)
- {
- for (int iNum = 0; iNum < abs(iDec2); iNum++)
- {
- strValue = "0" + strValue;
- }
- iDec2 = 0;
-
- }
- int iMax = strValue.GetLength();
- if (iDec2 > iMax)
- {
- for (int iNum = 0; iNum <= iDec2 - iMax; iNum++)
- {
- strValue += "0";
- }
- iMax = iDec2+1;
- }
- ///////////////////////////////////////////////////////
- //for processing seperator style
- if (iDec2 < iMax)
- {
- if (iSepStyle == 0 || iSepStyle == 1)
- {
- strValue.Insert(iDec2, '.');
- iMax++;
- }
- else if (iSepStyle == 2 || iSepStyle == 3)
- {
- strValue.Insert(iDec2, ',');
- iMax++;
- }
-
- if (iDec2 == 0)
- strValue.Insert(iDec2, '0');
- }
- if (iSepStyle == 0 || iSepStyle == 2)
- {
- char cSeperator;
- if (iSepStyle == 0)
- cSeperator = ',';
- else
- cSeperator = '.';
-
- int iDecPositive;
- iDecPositive = iDec2;
-
- for (iDecPositive = iDec2 -3; iDecPositive > 0; iDecPositive -= 3)
- {
- strValue.Insert(iDecPositive,cSeperator);
- iMax++;
- }
- }
- ////////////////////////////////////////////////////////////////////
- //negative mark
- if (iNegative)
- strValue = "-" + strValue;
- strValue += "%";
- Value = CFX_WideString::FromLocal(strValue);
+ }
+
+ if (iDec2 < 0) {
+ for (int iNum = 0; iNum < abs(iDec2); iNum++) {
+ strValue = "0" + strValue;
+ }
+ iDec2 = 0;
+ }
+ int iMax = strValue.GetLength();
+ if (iDec2 > iMax) {
+ for (int iNum = 0; iNum <= iDec2 - iMax; iNum++) {
+ strValue += "0";
+ }
+ iMax = iDec2 + 1;
+ }
+ ///////////////////////////////////////////////////////
+ // for processing seperator style
+ if (iDec2 < iMax) {
+ if (iSepStyle == 0 || iSepStyle == 1) {
+ strValue.Insert(iDec2, '.');
+ iMax++;
+ } else if (iSepStyle == 2 || iSepStyle == 3) {
+ strValue.Insert(iDec2, ',');
+ iMax++;
+ }
+
+ if (iDec2 == 0)
+ strValue.Insert(iDec2, '0');
+ }
+ if (iSepStyle == 0 || iSepStyle == 2) {
+ char cSeperator;
+ if (iSepStyle == 0)
+ cSeperator = ',';
+ else
+ cSeperator = '.';
+
+ int iDecPositive;
+ iDecPositive = iDec2;
+
+ for (iDecPositive = iDec2 - 3; iDecPositive > 0; iDecPositive -= 3) {
+ strValue.Insert(iDecPositive, cSeperator);
+ iMax++;
+ }
+ }
+ ////////////////////////////////////////////////////////////////////
+ // negative mark
+ if (iNegative)
+ strValue = "-" + strValue;
+ strValue += "%";
+ Value = CFX_WideString::FromLocal(strValue);
#endif
- return TRUE;
+ return TRUE;
}
-//AFPercent_Keystroke(nDec, sepStyle)
-FX_BOOL CJS_PublicMethods::AFPercent_Keystroke(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- return AFNumber_Keystroke(cc,params,vRet,sError);
+// AFPercent_Keystroke(nDec, sepStyle)
+FX_BOOL CJS_PublicMethods::AFPercent_Keystroke(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ return AFNumber_Keystroke(cc, params, vRet, sError);
}
-//function AFDate_FormatEx(cFormat)
-FX_BOOL CJS_PublicMethods::AFDate_FormatEx(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- CJS_Context* pContext = (CJS_Context *)cc;
- ASSERT(pContext != NULL);
- CJS_EventHandler* pEvent = pContext->GetEventHandler();
- ASSERT(pEvent != NULL);
-
- if (params.size() != 1)
- {
- sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
- return FALSE;
- }
- if(!pEvent->m_pValue)
- return FALSE;
-
- CFX_WideString& val = pEvent->Value();
- CFX_WideString strValue = val;
- if (strValue.IsEmpty())
- return TRUE;
-
- CFX_WideString sFormat = params[0].ToCFXWideString();
- FX_BOOL bWrongFormat = FALSE;
- double dDate = 0.0f;
-
- if(strValue.Find(L"GMT") != -1)
- {
- //for GMT format time
- //such as "Tue Aug 11 14:24:16 GMT+08002009"
- dDate = MakeInterDate(strValue);
- }
- else
- {
- dDate = MakeRegularDate(strValue,sFormat,bWrongFormat);
- }
-
- if (JS_PortIsNan(dDate))
- {
- CFX_WideString swMsg;
- swMsg.Format(JSGetStringFromID(pContext, IDS_STRING_JSPARSEDATE).c_str(), sFormat.c_str());
- Alert(pContext, swMsg.c_str());
- return FALSE;
- }
-
- val = MakeFormatDate(dDate,sFormat);
+// function AFDate_FormatEx(cFormat)
+FX_BOOL CJS_PublicMethods::AFDate_FormatEx(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ CJS_Context* pContext = (CJS_Context*)cc;
+ ASSERT(pContext != NULL);
+ CJS_EventHandler* pEvent = pContext->GetEventHandler();
+ ASSERT(pEvent != NULL);
+
+ if (params.size() != 1) {
+ sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
+ return FALSE;
+ }
+ if (!pEvent->m_pValue)
+ return FALSE;
+
+ CFX_WideString& val = pEvent->Value();
+ CFX_WideString strValue = val;
+ if (strValue.IsEmpty())
return TRUE;
-}
-double CJS_PublicMethods::MakeInterDate(CFX_WideString strValue)
-{
- int nHour;
- int nMin;
- int nSec;
- int nYear;
- int nMonth;
- int nDay;
-
- CFX_WideStringArray wsArray;
- CFX_WideString sMonth = L"";
- CFX_WideString sTemp = L"";
- int nSize = strValue.GetLength();
-
- for(int i = 0; i < nSize; i++)
- {
- FX_WCHAR c = strValue.GetAt(i);
- if(c == L' ' || c == L':')
- {
- wsArray.Add(sTemp);
- sTemp = L"";
- continue;
- }
+ CFX_WideString sFormat = params[0].ToCFXWideString();
+ FX_BOOL bWrongFormat = FALSE;
+ double dDate = 0.0f;
- sTemp += c;
- }
-
- wsArray.Add(sTemp);
- if(wsArray.GetSize() != 8)return 0;
-
- sTemp = wsArray[1];
- if(sTemp.Compare(L"Jan") == 0) nMonth = 1;
- if(sTemp.Compare(L"Feb") == 0) nMonth = 2;
- if(sTemp.Compare(L"Mar") == 0) nMonth = 3;
- if(sTemp.Compare(L"Apr") == 0) nMonth = 4;
- if(sTemp.Compare(L"May") == 0) nMonth = 5;
- if(sTemp.Compare(L"Jun") == 0) nMonth = 6;
- if(sTemp.Compare(L"Jul") == 0) nMonth = 7;
- if(sTemp.Compare(L"Aug") == 0) nMonth = 8;
- if(sTemp.Compare(L"Sep") == 0) nMonth = 9;
- if(sTemp.Compare(L"Oct") == 0) nMonth = 10;
- if(sTemp.Compare(L"Nov") == 0) nMonth = 11;
- if(sTemp.Compare(L"Dec") == 0) nMonth = 12;
-
- nDay = (int)ParseStringToNumber(wsArray[2].c_str());
- nHour = (int)ParseStringToNumber(wsArray[3].c_str());
- nMin = (int)ParseStringToNumber(wsArray[4].c_str());
- nSec = (int)ParseStringToNumber(wsArray[5].c_str());
- nYear = (int)ParseStringToNumber(wsArray[7].c_str());
-
- double dRet = JS_MakeDate(JS_MakeDay(nYear,nMonth - 1,nDay),JS_MakeTime(nHour, nMin, nSec, 0));
-
- if (JS_PortIsNan(dRet))
- {
- dRet = JS_DateParse(strValue.c_str());
- }
+ if (strValue.Find(L"GMT") != -1) {
+ // for GMT format time
+ // such as "Tue Aug 11 14:24:16 GMT+08002009"
+ dDate = MakeInterDate(strValue);
+ } else {
+ dDate = MakeRegularDate(strValue, sFormat, bWrongFormat);
+ }
- return dRet;
+ if (JS_PortIsNan(dDate)) {
+ CFX_WideString swMsg;
+ swMsg.Format(JSGetStringFromID(pContext, IDS_STRING_JSPARSEDATE).c_str(),
+ sFormat.c_str());
+ Alert(pContext, swMsg.c_str());
+ return FALSE;
+ }
+
+ val = MakeFormatDate(dDate, sFormat);
+ return TRUE;
}
-//AFDate_KeystrokeEx(cFormat)
-FX_BOOL CJS_PublicMethods::AFDate_KeystrokeEx(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- CJS_Context* pContext = (CJS_Context *)cc;
- ASSERT(pContext != NULL);
- CJS_EventHandler* pEvent = pContext->GetEventHandler();
- ASSERT(pEvent != NULL);
-
- if (params.size() != 1)
- {
- sError = L"AFDate_KeystrokeEx's parameters' size r not correct";
- return FALSE;
- }
-
- if (pEvent->WillCommit())
- {
- if(!pEvent->m_pValue)
- return FALSE;
- CFX_WideString strValue = pEvent->Value();
- if (strValue.IsEmpty())
- return TRUE;
-
- CFX_WideString sFormat = params[0].ToCFXWideString();
- FX_BOOL bWrongFormat = FALSE;
- double dRet = MakeRegularDate(strValue,sFormat,bWrongFormat);
- if (bWrongFormat || JS_PortIsNan(dRet))
- {
- CFX_WideString swMsg;
- swMsg.Format(JSGetStringFromID(pContext, IDS_STRING_JSPARSEDATE).c_str(), sFormat.c_str());
- Alert(pContext, swMsg.c_str());
- pEvent->Rc() = FALSE;
- return TRUE;
- }
- }
- return TRUE;
+double CJS_PublicMethods::MakeInterDate(CFX_WideString strValue) {
+ int nHour;
+ int nMin;
+ int nSec;
+ int nYear;
+ int nMonth;
+ int nDay;
+
+ CFX_WideStringArray wsArray;
+ CFX_WideString sMonth = L"";
+ CFX_WideString sTemp = L"";
+ int nSize = strValue.GetLength();
+
+ for (int i = 0; i < nSize; i++) {
+ FX_WCHAR c = strValue.GetAt(i);
+ if (c == L' ' || c == L':') {
+ wsArray.Add(sTemp);
+ sTemp = L"";
+ continue;
+ }
+
+ sTemp += c;
+ }
+
+ wsArray.Add(sTemp);
+ if (wsArray.GetSize() != 8)
+ return 0;
+
+ sTemp = wsArray[1];
+ if (sTemp.Compare(L"Jan") == 0)
+ nMonth = 1;
+ if (sTemp.Compare(L"Feb") == 0)
+ nMonth = 2;
+ if (sTemp.Compare(L"Mar") == 0)
+ nMonth = 3;
+ if (sTemp.Compare(L"Apr") == 0)
+ nMonth = 4;
+ if (sTemp.Compare(L"May") == 0)
+ nMonth = 5;
+ if (sTemp.Compare(L"Jun") == 0)
+ nMonth = 6;
+ if (sTemp.Compare(L"Jul") == 0)
+ nMonth = 7;
+ if (sTemp.Compare(L"Aug") == 0)
+ nMonth = 8;
+ if (sTemp.Compare(L"Sep") == 0)
+ nMonth = 9;
+ if (sTemp.Compare(L"Oct") == 0)
+ nMonth = 10;
+ if (sTemp.Compare(L"Nov") == 0)
+ nMonth = 11;
+ if (sTemp.Compare(L"Dec") == 0)
+ nMonth = 12;
+
+ nDay = (int)ParseStringToNumber(wsArray[2].c_str());
+ nHour = (int)ParseStringToNumber(wsArray[3].c_str());
+ nMin = (int)ParseStringToNumber(wsArray[4].c_str());
+ nSec = (int)ParseStringToNumber(wsArray[5].c_str());
+ nYear = (int)ParseStringToNumber(wsArray[7].c_str());
+
+ double dRet = JS_MakeDate(JS_MakeDay(nYear, nMonth - 1, nDay),
+ JS_MakeTime(nHour, nMin, nSec, 0));
+
+ if (JS_PortIsNan(dRet)) {
+ dRet = JS_DateParse(strValue.c_str());
+ }
+
+ return dRet;
}
-FX_BOOL CJS_PublicMethods::AFDate_Format(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- v8::Isolate* isolate = ::GetIsolate(cc);
-
- if (params.size() != 1)
- {
- CJS_Context* pContext = (CJS_Context*)cc;
- ASSERT(pContext != NULL);
-
- sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
- return FALSE;
- }
+// AFDate_KeystrokeEx(cFormat)
+FX_BOOL CJS_PublicMethods::AFDate_KeystrokeEx(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ CJS_Context* pContext = (CJS_Context*)cc;
+ ASSERT(pContext != NULL);
+ CJS_EventHandler* pEvent = pContext->GetEventHandler();
+ ASSERT(pEvent != NULL);
+
+ if (params.size() != 1) {
+ sError = L"AFDate_KeystrokeEx's parameters' size r not correct";
+ return FALSE;
+ }
+
+ if (pEvent->WillCommit()) {
+ if (!pEvent->m_pValue)
+ return FALSE;
+ CFX_WideString strValue = pEvent->Value();
+ if (strValue.IsEmpty())
+ return TRUE;
- int iIndex = params[0].ToInt();
- const FX_WCHAR* cFormats[] = {L"m/d", L"m/d/yy", L"mm/dd/yy", L"mm/yy", L"d-mmm", L"d-mmm-yy", L"dd-mmm-yy",
- L"yy-mm-dd", L"mmm-yy", L"mmmm-yy", L"mmm d, yyyy", L"mmmm d, yyyy",
- L"m/d/yy h:MM tt", L"m/d/yy HH:MM" };
-
- ASSERT(iIndex < FX_ArraySize(cFormats));
-
- if (iIndex < 0)
- iIndex = 0;
- if (iIndex >= FX_ArraySize(cFormats))
- iIndex = 0;
- CJS_Parameters newParams;
- CJS_Value val(isolate,cFormats[iIndex]);
- newParams.push_back(val);
- return AFDate_FormatEx(cc,newParams,vRet,sError);
+ CFX_WideString sFormat = params[0].ToCFXWideString();
+ FX_BOOL bWrongFormat = FALSE;
+ double dRet = MakeRegularDate(strValue, sFormat, bWrongFormat);
+ if (bWrongFormat || JS_PortIsNan(dRet)) {
+ CFX_WideString swMsg;
+ swMsg.Format(JSGetStringFromID(pContext, IDS_STRING_JSPARSEDATE).c_str(),
+ sFormat.c_str());
+ Alert(pContext, swMsg.c_str());
+ pEvent->Rc() = FALSE;
+ return TRUE;
+ }
+ }
+ return TRUE;
}
-//AFDate_KeystrokeEx(cFormat)
-FX_BOOL CJS_PublicMethods::AFDate_Keystroke(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- v8::Isolate* isolate = ::GetIsolate(cc);
-
- if (params.size() != 1)
- {
- CJS_Context* pContext = (CJS_Context*)cc;
- ASSERT(pContext != NULL);
+FX_BOOL CJS_PublicMethods::AFDate_Format(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ v8::Isolate* isolate = ::GetIsolate(cc);
- sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
- return FALSE;
- }
+ if (params.size() != 1) {
+ CJS_Context* pContext = (CJS_Context*)cc;
+ ASSERT(pContext != NULL);
- int iIndex = params[0].ToInt();
- const FX_WCHAR* cFormats[] = {L"m/d", L"m/d/yy", L"mm/dd/yy", L"mm/yy", L"d-mmm", L"d-mmm-yy", L"dd-mmm-yy",
- L"yy-mm-dd", L"mmm-yy", L"mmmm-yy", L"mmm d, yyyy", L"mmmm d, yyyy",
- L"m/d/yy h:MM tt", L"m/d/yy HH:MM" };
-
- ASSERT(iIndex<FX_ArraySize(cFormats));
-
- if (iIndex < 0)
- iIndex = 0;
- if (iIndex >= FX_ArraySize(cFormats))
- iIndex = 0;
- CJS_Parameters newParams;
- CJS_Value val(isolate,cFormats[iIndex]);
- newParams.push_back(val);
- return AFDate_KeystrokeEx(cc,newParams,vRet,sError);
+ sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
+ return FALSE;
+ }
+
+ int iIndex = params[0].ToInt();
+ const FX_WCHAR* cFormats[] = {L"m/d",
+ L"m/d/yy",
+ L"mm/dd/yy",
+ L"mm/yy",
+ L"d-mmm",
+ L"d-mmm-yy",
+ L"dd-mmm-yy",
+ L"yy-mm-dd",
+ L"mmm-yy",
+ L"mmmm-yy",
+ L"mmm d, yyyy",
+ L"mmmm d, yyyy",
+ L"m/d/yy h:MM tt",
+ L"m/d/yy HH:MM"};
+
+ ASSERT(iIndex < FX_ArraySize(cFormats));
+
+ if (iIndex < 0)
+ iIndex = 0;
+ if (iIndex >= FX_ArraySize(cFormats))
+ iIndex = 0;
+ CJS_Parameters newParams;
+ CJS_Value val(isolate, cFormats[iIndex]);
+ newParams.push_back(val);
+ return AFDate_FormatEx(cc, newParams, vRet, sError);
}
-//function AFTime_Format(ptf)
-FX_BOOL CJS_PublicMethods::AFTime_Format(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- v8::Isolate* isolate = ::GetIsolate(cc);
-
- if (params.size() != 1)
- {
- CJS_Context* pContext = (CJS_Context*)cc;
- ASSERT(pContext != NULL);
- sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
- return FALSE;
- }
+// AFDate_KeystrokeEx(cFormat)
+FX_BOOL CJS_PublicMethods::AFDate_Keystroke(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ v8::Isolate* isolate = ::GetIsolate(cc);
- int iIndex = params[0].ToInt();
- const FX_WCHAR* cFormats[] = {L"HH:MM", L"h:MM tt", L"HH:MM:ss", L"h:MM:ss tt"};
-
- ASSERT(iIndex<FX_ArraySize(cFormats));
+ if (params.size() != 1) {
+ CJS_Context* pContext = (CJS_Context*)cc;
+ ASSERT(pContext != NULL);
- if (iIndex < 0)
- iIndex = 0;
- if (iIndex >= FX_ArraySize(cFormats))
- iIndex = 0;
- CJS_Parameters newParams;
- CJS_Value val(isolate,cFormats[iIndex]);
- newParams.push_back(val);
- return AFDate_FormatEx(cc,newParams,vRet,sError);
+ sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
+ return FALSE;
+ }
+
+ int iIndex = params[0].ToInt();
+ const FX_WCHAR* cFormats[] = {L"m/d",
+ L"m/d/yy",
+ L"mm/dd/yy",
+ L"mm/yy",
+ L"d-mmm",
+ L"d-mmm-yy",
+ L"dd-mmm-yy",
+ L"yy-mm-dd",
+ L"mmm-yy",
+ L"mmmm-yy",
+ L"mmm d, yyyy",
+ L"mmmm d, yyyy",
+ L"m/d/yy h:MM tt",
+ L"m/d/yy HH:MM"};
+
+ ASSERT(iIndex < FX_ArraySize(cFormats));
+
+ if (iIndex < 0)
+ iIndex = 0;
+ if (iIndex >= FX_ArraySize(cFormats))
+ iIndex = 0;
+ CJS_Parameters newParams;
+ CJS_Value val(isolate, cFormats[iIndex]);
+ newParams.push_back(val);
+ return AFDate_KeystrokeEx(cc, newParams, vRet, sError);
}
-FX_BOOL CJS_PublicMethods::AFTime_Keystroke(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- v8::Isolate* isolate = ::GetIsolate(cc);
- if (params.size() != 1)
- {
- CJS_Context* pContext = (CJS_Context*)cc;
- ASSERT(pContext != NULL);
- sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
- return FALSE;
- }
-
- int iIndex = params[0].ToInt();
- const FX_WCHAR* cFormats[] = {L"HH:MM", L"h:MM tt", L"HH:MM:ss", L"h:MM:ss tt"};
+// function AFTime_Format(ptf)
+FX_BOOL CJS_PublicMethods::AFTime_Format(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ v8::Isolate* isolate = ::GetIsolate(cc);
- ASSERT(iIndex<FX_ArraySize(cFormats));
+ if (params.size() != 1) {
+ CJS_Context* pContext = (CJS_Context*)cc;
+ ASSERT(pContext != NULL);
+ sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
+ return FALSE;
+ }
+
+ int iIndex = params[0].ToInt();
+ const FX_WCHAR* cFormats[] = {L"HH:MM", L"h:MM tt", L"HH:MM:ss",
+ L"h:MM:ss tt"};
+
+ ASSERT(iIndex < FX_ArraySize(cFormats));
+
+ if (iIndex < 0)
+ iIndex = 0;
+ if (iIndex >= FX_ArraySize(cFormats))
+ iIndex = 0;
+ CJS_Parameters newParams;
+ CJS_Value val(isolate, cFormats[iIndex]);
+ newParams.push_back(val);
+ return AFDate_FormatEx(cc, newParams, vRet, sError);
+}
- if (iIndex < 0)
- iIndex = 0;
- if (iIndex >= FX_ArraySize(cFormats))
- iIndex = 0;
- CJS_Parameters newParams;
- CJS_Value val(isolate,cFormats[iIndex]);
- newParams.push_back(val);
- return AFDate_KeystrokeEx(cc,newParams,vRet,sError);
+FX_BOOL CJS_PublicMethods::AFTime_Keystroke(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ v8::Isolate* isolate = ::GetIsolate(cc);
+ if (params.size() != 1) {
+ CJS_Context* pContext = (CJS_Context*)cc;
+ ASSERT(pContext != NULL);
+ sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
+ return FALSE;
+ }
+
+ int iIndex = params[0].ToInt();
+ const FX_WCHAR* cFormats[] = {L"HH:MM", L"h:MM tt", L"HH:MM:ss",
+ L"h:MM:ss tt"};
+
+ ASSERT(iIndex < FX_ArraySize(cFormats));
+
+ if (iIndex < 0)
+ iIndex = 0;
+ if (iIndex >= FX_ArraySize(cFormats))
+ iIndex = 0;
+ CJS_Parameters newParams;
+ CJS_Value val(isolate, cFormats[iIndex]);
+ newParams.push_back(val);
+ return AFDate_KeystrokeEx(cc, newParams, vRet, sError);
}
-FX_BOOL CJS_PublicMethods::AFTime_FormatEx(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- return AFDate_FormatEx(cc,params,vRet,sError);
+FX_BOOL CJS_PublicMethods::AFTime_FormatEx(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ return AFDate_FormatEx(cc, params, vRet, sError);
}
-FX_BOOL CJS_PublicMethods::AFTime_KeystrokeEx(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- return AFDate_KeystrokeEx(cc,params,vRet,sError);
+FX_BOOL CJS_PublicMethods::AFTime_KeystrokeEx(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ return AFDate_KeystrokeEx(cc, params, vRet, sError);
}
-//function AFSpecial_Format(psf)
-FX_BOOL CJS_PublicMethods::AFSpecial_Format(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- CJS_Context* pContext = (CJS_Context *)cc;
- ASSERT(pContext != NULL);
+// function AFSpecial_Format(psf)
+FX_BOOL CJS_PublicMethods::AFSpecial_Format(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ CJS_Context* pContext = (CJS_Context*)cc;
+ ASSERT(pContext != NULL);
- if (params.size() != 1)
- {
- sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
- return FALSE;
- }
+ if (params.size() != 1) {
+ sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
+ return FALSE;
+ }
- std::string cFormat;
- int iIndex = params[0].ToInt();
+ std::string cFormat;
+ int iIndex = params[0].ToInt();
- CJS_EventHandler* pEvent = pContext->GetEventHandler();
- ASSERT(pEvent != NULL);
+ CJS_EventHandler* pEvent = pContext->GetEventHandler();
+ ASSERT(pEvent != NULL);
- if(!pEvent->m_pValue)
- return FALSE;
- CFX_WideString& Value = pEvent->Value();
- std::string strSrc = CFX_ByteString::FromUnicode(Value).c_str();
+ if (!pEvent->m_pValue)
+ return FALSE;
+ CFX_WideString& Value = pEvent->Value();
+ std::string strSrc = CFX_ByteString::FromUnicode(Value).c_str();
- switch (iIndex)
- {
+ switch (iIndex) {
case 0:
- cFormat = "99999";
- break;
+ cFormat = "99999";
+ break;
case 1:
- cFormat = "99999-9999";
- break;
- case 2:
- {
- std::string NumberStr;
- util::printx("9999999999", strSrc,NumberStr);
- if (NumberStr.length() >= 10 )
- cFormat = "(999) 999-9999";
- else
- cFormat = "999-9999";
- break;
- }
- case 3:
- cFormat = "999-99-9999";
- break;
+ cFormat = "99999-9999";
+ break;
+ case 2: {
+ std::string NumberStr;
+ util::printx("9999999999", strSrc, NumberStr);
+ if (NumberStr.length() >= 10)
+ cFormat = "(999) 999-9999";
+ else
+ cFormat = "999-9999";
+ break;
}
-
- std::string strDes;
- util::printx(cFormat,strSrc,strDes);
- Value = CFX_WideString::FromLocal(strDes.c_str());
- return TRUE;
+ case 3:
+ cFormat = "999-99-9999";
+ break;
+ }
+
+ std::string strDes;
+ util::printx(cFormat, strSrc, strDes);
+ Value = CFX_WideString::FromLocal(strDes.c_str());
+ return TRUE;
}
+// function AFSpecial_KeystrokeEx(mask)
+FX_BOOL CJS_PublicMethods::AFSpecial_KeystrokeEx(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ CJS_Context* pContext = (CJS_Context*)cc;
+ ASSERT(pContext != NULL);
+ CJS_EventHandler* pEvent = pContext->GetEventHandler();
-//function AFSpecial_KeystrokeEx(mask)
-FX_BOOL CJS_PublicMethods::AFSpecial_KeystrokeEx(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- CJS_Context* pContext = (CJS_Context *)cc;
- ASSERT(pContext != NULL);
- CJS_EventHandler* pEvent = pContext->GetEventHandler();
+ ASSERT(pEvent != NULL);
- ASSERT(pEvent != NULL);
+ if (params.size() < 1) {
+ sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
+ return FALSE;
+ }
- if (params.size() < 1)
- {
- sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
- return FALSE;
- }
-
- if(!pEvent->m_pValue)
- return FALSE;
- CFX_WideString& valEvent = pEvent->Value();
+ if (!pEvent->m_pValue)
+ return FALSE;
+ CFX_WideString& valEvent = pEvent->Value();
- CFX_WideString wstrMask = params[0].ToCFXWideString();
- if (wstrMask.IsEmpty())
- return TRUE;
-
- std::wstring wstrValue = valEvent.c_str();
-
- if (pEvent->WillCommit())
- {
- if (wstrValue.empty())
- return TRUE;
- int iIndexMask = 0;
- for (std::wstring::iterator it = wstrValue.begin(); it != wstrValue.end(); it++)
- {
- wchar_t w_Value = *it;
- if (!maskSatisfied(w_Value,wstrMask[iIndexMask]))
- break;
- iIndexMask++;
- }
-
- if (iIndexMask != wstrMask.GetLength() || (iIndexMask != wstrValue.size() && wstrMask.GetLength() != 0))
- {
- Alert(pContext, JSGetStringFromID(pContext, IDS_STRING_JSAFNUMBER_KEYSTROKE).c_str());
- pEvent->Rc() = FALSE;
- }
- return TRUE;
- }
-
- CFX_WideString &wideChange = pEvent->Change();
- std::wstring wChange = wideChange.c_str();
- if (wChange.empty())
- return TRUE;
-
- int iIndexMask = pEvent->SelStart();
+ CFX_WideString wstrMask = params[0].ToCFXWideString();
+ if (wstrMask.IsEmpty())
+ return TRUE;
- if (wstrValue.length() - (pEvent->SelEnd()-pEvent->SelStart()) + wChange.length() > (FX_DWORD)wstrMask.GetLength())
- {
- Alert(pContext, JSGetStringFromID(pContext, IDS_STRING_JSPARAM_TOOLONG).c_str());
- pEvent->Rc() = FALSE;
- return TRUE;
- }
+ std::wstring wstrValue = valEvent.c_str();
- if (iIndexMask >= wstrMask.GetLength() && (!wChange.empty()))
- {
- Alert(pContext, JSGetStringFromID(pContext, IDS_STRING_JSPARAM_TOOLONG).c_str());
- pEvent->Rc() = FALSE;
- return TRUE;
+ if (pEvent->WillCommit()) {
+ if (wstrValue.empty())
+ return TRUE;
+ int iIndexMask = 0;
+ for (std::wstring::iterator it = wstrValue.begin(); it != wstrValue.end();
+ it++) {
+ wchar_t w_Value = *it;
+ if (!maskSatisfied(w_Value, wstrMask[iIndexMask]))
+ break;
+ iIndexMask++;
}
- for (std::wstring::iterator it = wChange.begin(); it != wChange.end(); it++)
- {
- if (iIndexMask >= wstrMask.GetLength())
- {
- Alert(pContext, JSGetStringFromID(pContext, IDS_STRING_JSPARAM_TOOLONG).c_str());
- pEvent->Rc() = FALSE;
- return TRUE;
- }
- wchar_t w_Mask = wstrMask[iIndexMask];
- if (!isReservedMaskChar(w_Mask))
- {
- *it = w_Mask;
- }
- wchar_t w_Change = *it;
- if (!maskSatisfied(w_Change,w_Mask))
- {
- pEvent->Rc() = FALSE;
- return TRUE;
- }
- iIndexMask++;
+ if (iIndexMask != wstrMask.GetLength() ||
+ (iIndexMask != wstrValue.size() && wstrMask.GetLength() != 0)) {
+ Alert(
+ pContext,
+ JSGetStringFromID(pContext, IDS_STRING_JSAFNUMBER_KEYSTROKE).c_str());
+ pEvent->Rc() = FALSE;
}
+ return TRUE;
+ }
- wideChange = wChange.c_str();
+ CFX_WideString& wideChange = pEvent->Change();
+ std::wstring wChange = wideChange.c_str();
+ if (wChange.empty())
return TRUE;
-}
+ int iIndexMask = pEvent->SelStart();
-//function AFSpecial_Keystroke(psf)
-FX_BOOL CJS_PublicMethods::AFSpecial_Keystroke(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- v8::Isolate* isolate = ::GetIsolate(cc);
+ if (wstrValue.length() - (pEvent->SelEnd() - pEvent->SelStart()) +
+ wChange.length() >
+ (FX_DWORD)wstrMask.GetLength()) {
+ Alert(pContext,
+ JSGetStringFromID(pContext, IDS_STRING_JSPARAM_TOOLONG).c_str());
+ pEvent->Rc() = FALSE;
+ return TRUE;
+ }
- CJS_Context* pContext = (CJS_Context *)cc;
- ASSERT(pContext != NULL);
- CJS_EventHandler* pEvent = pContext->GetEventHandler();
- ASSERT(pEvent != NULL);
+ if (iIndexMask >= wstrMask.GetLength() && (!wChange.empty())) {
+ Alert(pContext,
+ JSGetStringFromID(pContext, IDS_STRING_JSPARAM_TOOLONG).c_str());
+ pEvent->Rc() = FALSE;
+ return TRUE;
+ }
- if (params.size() != 1)
- {
- sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
- return FALSE;
+ for (std::wstring::iterator it = wChange.begin(); it != wChange.end(); it++) {
+ if (iIndexMask >= wstrMask.GetLength()) {
+ Alert(pContext,
+ JSGetStringFromID(pContext, IDS_STRING_JSPARAM_TOOLONG).c_str());
+ pEvent->Rc() = FALSE;
+ return TRUE;
}
+ wchar_t w_Mask = wstrMask[iIndexMask];
+ if (!isReservedMaskChar(w_Mask)) {
+ *it = w_Mask;
+ }
+ wchar_t w_Change = *it;
+ if (!maskSatisfied(w_Change, w_Mask)) {
+ pEvent->Rc() = FALSE;
+ return TRUE;
+ }
+ iIndexMask++;
+ }
- std::string cFormat;
- int iIndex = params[0].ToInt();
-
- if(!pEvent->m_pValue)
- return FALSE;
- //CJS_Value val = pEvent->Value();
- CFX_WideString& val = pEvent->Value();
- std::string strSrc = CFX_ByteString::FromUnicode(val).c_str();
- std::wstring wstrChange = pEvent->Change().c_str();
+ wideChange = wChange.c_str();
+ return TRUE;
+}
- switch (iIndex)
- {
+// function AFSpecial_Keystroke(psf)
+FX_BOOL CJS_PublicMethods::AFSpecial_Keystroke(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ v8::Isolate* isolate = ::GetIsolate(cc);
+
+ CJS_Context* pContext = (CJS_Context*)cc;
+ ASSERT(pContext != NULL);
+ CJS_EventHandler* pEvent = pContext->GetEventHandler();
+ ASSERT(pEvent != NULL);
+
+ if (params.size() != 1) {
+ sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
+ return FALSE;
+ }
+
+ std::string cFormat;
+ int iIndex = params[0].ToInt();
+
+ if (!pEvent->m_pValue)
+ return FALSE;
+ // CJS_Value val = pEvent->Value();
+ CFX_WideString& val = pEvent->Value();
+ std::string strSrc = CFX_ByteString::FromUnicode(val).c_str();
+ std::wstring wstrChange = pEvent->Change().c_str();
+
+ switch (iIndex) {
case 0:
- cFormat = "99999";
- break;
+ cFormat = "99999";
+ break;
case 1:
- //cFormat = "99999-9999";
- cFormat = "999999999";
- break;
- case 2:
- {
- std::string NumberStr;
- util::printx("9999999999", strSrc,NumberStr);
- if (strSrc.length() + wstrChange.length() > 7 )
- //cFormat = "(999) 999-9999";
- cFormat = "9999999999";
- else
- //cFormat = "999-9999";
- cFormat = "9999999";
- break;
- }
- case 3:
- //cFormat = "999-99-9999";
- cFormat = "999999999";
- break;
+ // cFormat = "99999-9999";
+ cFormat = "999999999";
+ break;
+ case 2: {
+ std::string NumberStr;
+ util::printx("9999999999", strSrc, NumberStr);
+ if (strSrc.length() + wstrChange.length() > 7)
+ // cFormat = "(999) 999-9999";
+ cFormat = "9999999999";
+ else
+ // cFormat = "999-9999";
+ cFormat = "9999999";
+ break;
}
+ case 3:
+ // cFormat = "999-99-9999";
+ cFormat = "999999999";
+ break;
+ }
- CJS_Parameters params2;
- CJS_Value vMask(isolate, cFormat.c_str());
- params2.push_back(vMask);
+ CJS_Parameters params2;
+ CJS_Value vMask(isolate, cFormat.c_str());
+ params2.push_back(vMask);
- return AFSpecial_KeystrokeEx(cc,params2,vRet,sError);
+ return AFSpecial_KeystrokeEx(cc, params2, vRet, sError);
}
-FX_BOOL CJS_PublicMethods::AFMergeChange(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- CJS_Context* pContext = (CJS_Context *)cc;
- ASSERT(pContext != NULL);
- CJS_EventHandler* pEventHandler = pContext->GetEventHandler();
- ASSERT(pEventHandler != NULL);
+FX_BOOL CJS_PublicMethods::AFMergeChange(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ CJS_Context* pContext = (CJS_Context*)cc;
+ ASSERT(pContext != NULL);
+ CJS_EventHandler* pEventHandler = pContext->GetEventHandler();
+ ASSERT(pEventHandler != NULL);
+
+ if (params.size() != 1) {
+ sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
+ return FALSE;
+ }
+
+ CFX_WideString swValue;
+ if (pEventHandler->m_pValue != NULL)
+ swValue = pEventHandler->Value();
+
+ if (pEventHandler->WillCommit()) {
+ vRet = swValue.c_str();
+ return TRUE;
+ }
- if (params.size() != 1)
- {
- sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
- return FALSE;
- }
+ CFX_WideString prefix, postfix;
- CFX_WideString swValue;
- if (pEventHandler->m_pValue != NULL)
- swValue = pEventHandler->Value();
+ if (pEventHandler->SelStart() >= 0)
+ prefix = swValue.Mid(0, pEventHandler->SelStart());
+ else
+ prefix = L"";
- if (pEventHandler->WillCommit())
- {
- vRet = swValue.c_str();
- return TRUE;
- }
+ if (pEventHandler->SelEnd() >= 0 &&
+ pEventHandler->SelEnd() <= swValue.GetLength())
+ postfix = swValue.Mid(pEventHandler->SelEnd(),
+ swValue.GetLength() - pEventHandler->SelEnd());
+ else
+ postfix = L"";
- CFX_WideString prefix,postfix;
+ vRet = (prefix + pEventHandler->Change() + postfix).c_str();
- if (pEventHandler->SelStart() >= 0)
- prefix = swValue.Mid(0,pEventHandler->SelStart());
- else
- prefix = L"";
+ return TRUE;
+}
+FX_BOOL CJS_PublicMethods::AFParseDateEx(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ CJS_Context* pContext = (CJS_Context*)cc;
+ ASSERT(pContext != NULL);
- if (pEventHandler->SelEnd() >= 0 && pEventHandler->SelEnd() <= swValue.GetLength())
- postfix = swValue.Mid(pEventHandler->SelEnd(), swValue.GetLength() - pEventHandler->SelEnd());
- else postfix = L"";
+ if (params.size() != 2) {
+ sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
+ return FALSE;
+ }
- vRet = (prefix + pEventHandler->Change() + postfix).c_str();
+ CFX_WideString sValue = params[0].ToCFXWideString();
+ CFX_WideString sFormat = params[1].ToCFXWideString();
- return TRUE;
+ FX_BOOL bWrongFormat = FALSE;
+ double dDate = MakeRegularDate(sValue, sFormat, bWrongFormat);
+
+ if (JS_PortIsNan(dDate)) {
+ CFX_WideString swMsg;
+ swMsg.Format(JSGetStringFromID(pContext, IDS_STRING_JSPARSEDATE).c_str(),
+ sFormat.c_str());
+ Alert((CJS_Context*)cc, swMsg.c_str());
+ return FALSE;
+ }
+
+ vRet = dDate;
+ return TRUE;
}
-FX_BOOL CJS_PublicMethods::AFParseDateEx(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- CJS_Context* pContext = (CJS_Context *)cc;
+FX_BOOL CJS_PublicMethods::AFSimple(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ if (params.size() != 3) {
+ CJS_Context* pContext = (CJS_Context*)cc;
ASSERT(pContext != NULL);
- if (params.size() != 2)
- {
- sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
- return FALSE;
- }
-
- CFX_WideString sValue = params[0].ToCFXWideString();
- CFX_WideString sFormat = params[1].ToCFXWideString();
-
- FX_BOOL bWrongFormat = FALSE;
- double dDate = MakeRegularDate(sValue,sFormat,bWrongFormat);
+ sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
+ return FALSE;
+ }
- if (JS_PortIsNan(dDate))
- {
- CFX_WideString swMsg;
- swMsg.Format(JSGetStringFromID(pContext, IDS_STRING_JSPARSEDATE).c_str(), sFormat.c_str());
- Alert((CJS_Context *)cc, swMsg.c_str());
- return FALSE;
- }
-
- vRet = dDate;
- return TRUE;
+ vRet = (double)AF_Simple(params[0].ToCFXWideString().c_str(),
+ params[1].ToDouble(), params[2].ToDouble());
+ return TRUE;
}
-FX_BOOL CJS_PublicMethods::AFSimple(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- if (params.size() != 3)
- {
- CJS_Context* pContext = (CJS_Context *)cc;
- ASSERT(pContext != NULL);
-
- sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
- return FALSE;
- }
+FX_BOOL CJS_PublicMethods::AFMakeNumber(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ if (params.size() != 1) {
+ CJS_Context* pContext = (CJS_Context*)cc;
+ ASSERT(pContext != NULL);
- vRet = (double)AF_Simple(params[0].ToCFXWideString().c_str(), params[1].ToDouble(), params[2].ToDouble());
- return TRUE;
+ sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
+ return FALSE;
+ }
+ vRet = ParseStringToNumber(params[0].ToCFXWideString().c_str());
+ return TRUE;
}
-FX_BOOL CJS_PublicMethods::AFMakeNumber(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- if (params.size() != 1)
- {
- CJS_Context* pContext = (CJS_Context *)cc;
- ASSERT(pContext != NULL);
+FX_BOOL CJS_PublicMethods::AFSimple_Calculate(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ v8::Isolate* isolate = ::GetIsolate(cc);
- sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
- return FALSE;
- }
- vRet = ParseStringToNumber(params[0].ToCFXWideString().c_str());
- return TRUE;
-}
+ CJS_Context* pContext = (CJS_Context*)cc;
+ ASSERT(pContext != NULL);
-FX_BOOL CJS_PublicMethods::AFSimple_Calculate(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- v8::Isolate* isolate = ::GetIsolate(cc);
+ if (params.size() != 2) {
+ sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
+ return FALSE;
+ }
- CJS_Context* pContext = (CJS_Context *)cc;
- ASSERT(pContext != NULL);
+ CJS_Value params1 = params[1];
- if (params.size() != 2)
- {
- sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
- return FALSE;
- }
+ if (!params1.IsArrayObject() && params1.GetType() != VT_string) {
+ sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
+ return FALSE;
+ }
- CJS_Value params1 = params[1];
+ CPDFSDK_Document* pReaderDoc = pContext->GetReaderDocument();
+ ASSERT(pReaderDoc != NULL);
- if (!params1.IsArrayObject() && params1.GetType() != VT_string)
- {
- sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
- return FALSE;
- }
+ CPDFSDK_InterForm* pReaderInterForm = pReaderDoc->GetInterForm();
+ ASSERT(pReaderInterForm != NULL);
- CPDFSDK_Document* pReaderDoc = pContext->GetReaderDocument();
- ASSERT(pReaderDoc != NULL);
+ CPDF_InterForm* pInterForm = pReaderInterForm->GetInterForm();
+ ASSERT(pInterForm != NULL);
- CPDFSDK_InterForm* pReaderInterForm = pReaderDoc->GetInterForm();
- ASSERT(pReaderInterForm != NULL);
+ double dValue;
+ CFX_WideString sFunction = params[0].ToCFXWideString();
+ if (wcscmp(sFunction.c_str(), L"PRD") == 0)
+ dValue = 1.0;
+ else
+ dValue = 0.0;
- CPDF_InterForm* pInterForm = pReaderInterForm->GetInterForm();
- ASSERT(pInterForm != NULL);
+ CJS_Array FieldNameArray = AF_MakeArrayFromList(isolate, params1);
- double dValue;
- CFX_WideString sFunction = params[0].ToCFXWideString();
- if (wcscmp(sFunction.c_str(), L"PRD") == 0)
- dValue = 1.0;
- else
- dValue = 0.0;
-
- CJS_Array FieldNameArray = AF_MakeArrayFromList(isolate,params1);
-
- int nFieldsCount = 0;
-
- for (int i=0,isz=FieldNameArray.GetLength(); i<isz; i++)
- {
- CJS_Value jsValue(isolate);
- FieldNameArray.GetElement(i,jsValue);
- CFX_WideString wsFieldName = jsValue.ToCFXWideString();
-
- for (int j=0,jsz=pInterForm->CountFields(wsFieldName); j<jsz; j++)
- {
- if (CPDF_FormField* pFormField = pInterForm->GetField(j, wsFieldName))
- {
- double dTemp = 0.0;
-
- switch (pFormField->GetFieldType())
- {
- case FIELDTYPE_TEXTFIELD:
- case FIELDTYPE_COMBOBOX:
- {
- dTemp = ParseStringToNumber(pFormField->GetValue().c_str());
- break;
- }
- case FIELDTYPE_PUSHBUTTON:
- {
- dTemp = 0.0;
- break;
- }
- case FIELDTYPE_CHECKBOX:
- case FIELDTYPE_RADIOBUTTON:
- {
- dTemp = 0.0;
- for (int c=0,csz=pFormField->CountControls(); c<csz; c++)
- {
- if (CPDF_FormControl* pFormCtrl = pFormField->GetControl(c))
- {
- if (pFormCtrl->IsChecked())
- {
- dTemp += ParseStringToNumber(pFormCtrl->GetExportValue().c_str());
- break;
- }
- else
- continue;
- }
- }
- break;
- }
- case FIELDTYPE_LISTBOX:
- {
- dTemp = 0.0;
- if (pFormField->CountSelectedItems() > 1)
- break;
- else
- {
- dTemp = ParseStringToNumber(pFormField->GetValue().c_str());
- break;
- }
- }
- default:
- break;
- }
+ int nFieldsCount = 0;
- if (i == 0 && j == 0 && (wcscmp(sFunction.c_str(), L"MIN") == 0 || wcscmp(sFunction.c_str(), L"MAX") == 0))
- dValue = dTemp;
+ for (int i = 0, isz = FieldNameArray.GetLength(); i < isz; i++) {
+ CJS_Value jsValue(isolate);
+ FieldNameArray.GetElement(i, jsValue);
+ CFX_WideString wsFieldName = jsValue.ToCFXWideString();
- dValue = AF_Simple(sFunction.c_str(), dValue, dTemp);
+ for (int j = 0, jsz = pInterForm->CountFields(wsFieldName); j < jsz; j++) {
+ if (CPDF_FormField* pFormField = pInterForm->GetField(j, wsFieldName)) {
+ double dTemp = 0.0;
- nFieldsCount++;
+ switch (pFormField->GetFieldType()) {
+ case FIELDTYPE_TEXTFIELD:
+ case FIELDTYPE_COMBOBOX: {
+ dTemp = ParseStringToNumber(pFormField->GetValue().c_str());
+ break;
+ }
+ case FIELDTYPE_PUSHBUTTON: {
+ dTemp = 0.0;
+ break;
+ }
+ case FIELDTYPE_CHECKBOX:
+ case FIELDTYPE_RADIOBUTTON: {
+ dTemp = 0.0;
+ for (int c = 0, csz = pFormField->CountControls(); c < csz; c++) {
+ if (CPDF_FormControl* pFormCtrl = pFormField->GetControl(c)) {
+ if (pFormCtrl->IsChecked()) {
+ dTemp +=
+ ParseStringToNumber(pFormCtrl->GetExportValue().c_str());
+ break;
+ } else
+ continue;
+ }
}
+ break;
+ }
+ case FIELDTYPE_LISTBOX: {
+ dTemp = 0.0;
+ if (pFormField->CountSelectedItems() > 1)
+ break;
+ else {
+ dTemp = ParseStringToNumber(pFormField->GetValue().c_str());
+ break;
+ }
+ }
+ default:
+ break;
}
+
+ if (i == 0 && j == 0 && (wcscmp(sFunction.c_str(), L"MIN") == 0 ||
+ wcscmp(sFunction.c_str(), L"MAX") == 0))
+ dValue = dTemp;
+
+ dValue = AF_Simple(sFunction.c_str(), dValue, dTemp);
+
+ nFieldsCount++;
+ }
}
+ }
- if (wcscmp(sFunction.c_str(), L"AVG") == 0 && nFieldsCount > 0)
- dValue /= nFieldsCount;
+ if (wcscmp(sFunction.c_str(), L"AVG") == 0 && nFieldsCount > 0)
+ dValue /= nFieldsCount;
- dValue = (double)floor(dValue * FXSYS_pow((double)10,(double)6) + 0.49) / FXSYS_pow((double)10,(double)6);
- CJS_Value jsValue(isolate,dValue);
- if((CJS_EventHandler*)pContext->GetEventHandler()->m_pValue)
- ((CJS_EventHandler*)pContext->GetEventHandler())->Value() = jsValue.ToCFXWideString();
+ dValue = (double)floor(dValue * FXSYS_pow((double)10, (double)6) + 0.49) /
+ FXSYS_pow((double)10, (double)6);
+ CJS_Value jsValue(isolate, dValue);
+ if ((CJS_EventHandler*)pContext->GetEventHandler()->m_pValue)
+ ((CJS_EventHandler*)pContext->GetEventHandler())->Value() =
+ jsValue.ToCFXWideString();
- return TRUE;
+ return TRUE;
}
/* This function validates the current event to ensure that its value is
** within the specified range. */
-FX_BOOL CJS_PublicMethods::AFRange_Validate(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- CJS_Context* pContext = (CJS_Context *)cc;
- ASSERT(pContext != NULL);
- CJS_EventHandler* pEvent = pContext->GetEventHandler();
- ASSERT(pEvent != NULL);
-
- if (params.size() != 4)
- {
- sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
- return FALSE;
- }
-
- if(!pEvent->m_pValue)
- return FALSE;
- if (pEvent->Value().IsEmpty() )
- return TRUE;
- double dEentValue = atof(CFX_ByteString::FromUnicode(pEvent->Value()));
- FX_BOOL bGreaterThan = params[0].ToBool();
- double dGreaterThan = params[1].ToDouble();
- FX_BOOL bLessThan = params[2].ToBool();
- double dLessThan = params[3].ToDouble();
- CFX_WideString swMsg;
-
- if (bGreaterThan && bLessThan)
- {
- if (dEentValue < dGreaterThan || dEentValue > dLessThan)
- swMsg.Format(JSGetStringFromID(pContext, IDS_STRING_JSRANGE1).c_str(),
- params[1].ToCFXWideString().c_str(),
- params[3].ToCFXWideString().c_str());
- }
- else if (bGreaterThan)
- {
- if (dEentValue < dGreaterThan)
- swMsg.Format(JSGetStringFromID(pContext, IDS_STRING_JSRANGE2).c_str(),
- params[1].ToCFXWideString().c_str());
- }
- else if (bLessThan)
- {
- if (dEentValue > dLessThan)
- swMsg.Format(JSGetStringFromID(pContext, IDS_STRING_JSRANGE3).c_str(),
- params[3].ToCFXWideString().c_str());
- }
-
- if (!swMsg.IsEmpty())
- {
- Alert(pContext, swMsg.c_str());
- pEvent->Rc() = FALSE;
- }
+FX_BOOL CJS_PublicMethods::AFRange_Validate(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ CJS_Context* pContext = (CJS_Context*)cc;
+ ASSERT(pContext != NULL);
+ CJS_EventHandler* pEvent = pContext->GetEventHandler();
+ ASSERT(pEvent != NULL);
+
+ if (params.size() != 4) {
+ sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
+ return FALSE;
+ }
+
+ if (!pEvent->m_pValue)
+ return FALSE;
+ if (pEvent->Value().IsEmpty())
return TRUE;
+ double dEentValue = atof(CFX_ByteString::FromUnicode(pEvent->Value()));
+ FX_BOOL bGreaterThan = params[0].ToBool();
+ double dGreaterThan = params[1].ToDouble();
+ FX_BOOL bLessThan = params[2].ToBool();
+ double dLessThan = params[3].ToDouble();
+ CFX_WideString swMsg;
+
+ if (bGreaterThan && bLessThan) {
+ if (dEentValue < dGreaterThan || dEentValue > dLessThan)
+ swMsg.Format(JSGetStringFromID(pContext, IDS_STRING_JSRANGE1).c_str(),
+ params[1].ToCFXWideString().c_str(),
+ params[3].ToCFXWideString().c_str());
+ } else if (bGreaterThan) {
+ if (dEentValue < dGreaterThan)
+ swMsg.Format(JSGetStringFromID(pContext, IDS_STRING_JSRANGE2).c_str(),
+ params[1].ToCFXWideString().c_str());
+ } else if (bLessThan) {
+ if (dEentValue > dLessThan)
+ swMsg.Format(JSGetStringFromID(pContext, IDS_STRING_JSRANGE3).c_str(),
+ params[3].ToCFXWideString().c_str());
+ }
+
+ if (!swMsg.IsEmpty()) {
+ Alert(pContext, swMsg.c_str());
+ pEvent->Rc() = FALSE;
+ }
+ return TRUE;
}
-FX_BOOL CJS_PublicMethods::AFExtractNums(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- v8::Isolate* isolate = ::GetIsolate(cc);
- CJS_Context* pContext = (CJS_Context*)cc;
- ASSERT(pContext != NULL);
-
- if (params.size() != 1)
- {
- sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
- return FALSE;
- }
-
- CJS_Array nums(isolate);
-
- CFX_WideString str = params[0].ToCFXWideString();
- CFX_WideString sPart;
-
- if (str.GetAt(0) == L'.' || str.GetAt(0) == L',')
- str = L"0" + str;
-
- int nIndex = 0;
- for (int i=0, sz=str.GetLength(); i<sz; i++)
- {
- FX_WCHAR wc = str.GetAt(i);
- if (IsDigit((wchar_t)wc))
- {
- sPart += wc;
- }
- else
- {
- if (sPart.GetLength() > 0)
- {
- nums.SetElement(nIndex,CJS_Value(isolate,sPart.c_str()));
- sPart = L"";
- nIndex ++;
- }
- }
+FX_BOOL CJS_PublicMethods::AFExtractNums(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ v8::Isolate* isolate = ::GetIsolate(cc);
+ CJS_Context* pContext = (CJS_Context*)cc;
+ ASSERT(pContext != NULL);
+
+ if (params.size() != 1) {
+ sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
+ return FALSE;
+ }
+
+ CJS_Array nums(isolate);
+
+ CFX_WideString str = params[0].ToCFXWideString();
+ CFX_WideString sPart;
+
+ if (str.GetAt(0) == L'.' || str.GetAt(0) == L',')
+ str = L"0" + str;
+
+ int nIndex = 0;
+ for (int i = 0, sz = str.GetLength(); i < sz; i++) {
+ FX_WCHAR wc = str.GetAt(i);
+ if (IsDigit((wchar_t)wc)) {
+ sPart += wc;
+ } else {
+ if (sPart.GetLength() > 0) {
+ nums.SetElement(nIndex, CJS_Value(isolate, sPart.c_str()));
+ sPart = L"";
+ nIndex++;
+ }
}
+ }
- if (sPart.GetLength() > 0)
- {
- nums.SetElement(nIndex,CJS_Value(isolate,sPart.c_str()));
- }
+ if (sPart.GetLength() > 0) {
+ nums.SetElement(nIndex, CJS_Value(isolate, sPart.c_str()));
+ }
- if (nums.GetLength() > 0)
- vRet = nums;
- else
- vRet.SetNull();
+ if (nums.GetLength() > 0)
+ vRet = nums;
+ else
+ vRet.SetNull();
- return TRUE;
+ return TRUE;
}
diff --git a/fpdfsdk/src/javascript/app.cpp b/fpdfsdk/src/javascript/app.cpp
index af329655fd..29007a4a2a 100644
--- a/fpdfsdk/src/javascript/app.cpp
+++ b/fpdfsdk/src/javascript/app.cpp
@@ -17,16 +17,14 @@
#include "../../include/javascript/JS_Runtime.h"
#include "../../include/javascript/Document.h"
+static v8::Isolate* GetIsolate(IFXJS_Context* cc) {
+ CJS_Context* pContext = (CJS_Context*)cc;
+ ASSERT(pContext != NULL);
-static v8::Isolate* GetIsolate(IFXJS_Context* cc)
-{
- CJS_Context* pContext = (CJS_Context *)cc;
- ASSERT(pContext != NULL);
+ CJS_Runtime* pRuntime = pContext->GetJSRuntime();
+ ASSERT(pRuntime != NULL);
- CJS_Runtime* pRuntime = pContext->GetJSRuntime();
- ASSERT(pRuntime != NULL);
-
- return pRuntime->GetIsolate();
+ return pRuntime->GetIsolate();
}
/* ---------------------------- TimerObj ---------------------------- */
@@ -43,35 +41,27 @@ END_JS_STATIC_METHOD()
IMPLEMENT_JS_CLASS(CJS_TimerObj, TimerObj)
TimerObj::TimerObj(CJS_Object* pJSObject)
-: CJS_EmbedObj(pJSObject),
-m_pTimer(NULL)
-{
-
-}
+ : CJS_EmbedObj(pJSObject), m_pTimer(NULL) {}
-TimerObj::~TimerObj()
-{
-}
+TimerObj::~TimerObj() {}
-void TimerObj::SetTimer(CJS_Timer* pTimer)
-{
- m_pTimer = pTimer;
+void TimerObj::SetTimer(CJS_Timer* pTimer) {
+ m_pTimer = pTimer;
}
-CJS_Timer* TimerObj::GetTimer() const
-{
- return m_pTimer;
+CJS_Timer* TimerObj::GetTimer() const {
+ return m_pTimer;
}
-#define JS_STR_VIEWERTYPE_READER L"Reader"
-#define JS_STR_VIEWERTYPE_STANDARD L"Exchange"
-#define JS_STR_VIEWERVARIATION L"Full"
-#define JS_STR_PLATFORM L"WIN"
-#define JS_STR_LANGUANGE L"ENU"
-#define JS_STR_VIEWERVERSION 8
-#define JS_NUM_FORMSVERSION 7
+#define JS_STR_VIEWERTYPE_READER L"Reader"
+#define JS_STR_VIEWERTYPE_STANDARD L"Exchange"
+#define JS_STR_VIEWERVARIATION L"Full"
+#define JS_STR_PLATFORM L"WIN"
+#define JS_STR_LANGUANGE L"ENU"
+#define JS_STR_VIEWERVERSION 8
+#define JS_NUM_FORMSVERSION 7
-#define JS_FILEPATH_MAXLEN 2000
+#define JS_FILEPATH_MAXLEN 2000
/* ---------------------------- app ---------------------------- */
@@ -79,817 +69,804 @@ BEGIN_JS_STATIC_CONST(CJS_App)
END_JS_STATIC_CONST()
BEGIN_JS_STATIC_PROP(CJS_App)
- JS_STATIC_PROP_ENTRY(activeDocs)
- JS_STATIC_PROP_ENTRY(calculate)
- JS_STATIC_PROP_ENTRY(formsVersion)
- JS_STATIC_PROP_ENTRY(fs)
- JS_STATIC_PROP_ENTRY(fullscreen)
- JS_STATIC_PROP_ENTRY(language)
- JS_STATIC_PROP_ENTRY(media)
- JS_STATIC_PROP_ENTRY(platform)
- JS_STATIC_PROP_ENTRY(runtimeHighlight)
- JS_STATIC_PROP_ENTRY(viewerType)
- JS_STATIC_PROP_ENTRY(viewerVariation)
- JS_STATIC_PROP_ENTRY(viewerVersion)
+JS_STATIC_PROP_ENTRY(activeDocs)
+JS_STATIC_PROP_ENTRY(calculate)
+JS_STATIC_PROP_ENTRY(formsVersion)
+JS_STATIC_PROP_ENTRY(fs)
+JS_STATIC_PROP_ENTRY(fullscreen)
+JS_STATIC_PROP_ENTRY(language)
+JS_STATIC_PROP_ENTRY(media)
+JS_STATIC_PROP_ENTRY(platform)
+JS_STATIC_PROP_ENTRY(runtimeHighlight)
+JS_STATIC_PROP_ENTRY(viewerType)
+JS_STATIC_PROP_ENTRY(viewerVariation)
+JS_STATIC_PROP_ENTRY(viewerVersion)
END_JS_STATIC_PROP()
BEGIN_JS_STATIC_METHOD(CJS_App)
- JS_STATIC_METHOD_ENTRY(alert)
- JS_STATIC_METHOD_ENTRY(beep)
- JS_STATIC_METHOD_ENTRY(browseForDoc)
- JS_STATIC_METHOD_ENTRY(clearInterval)
- JS_STATIC_METHOD_ENTRY(clearTimeOut)
- JS_STATIC_METHOD_ENTRY(execDialog)
- JS_STATIC_METHOD_ENTRY(execMenuItem)
- JS_STATIC_METHOD_ENTRY(findComponent)
- JS_STATIC_METHOD_ENTRY(goBack)
- JS_STATIC_METHOD_ENTRY(goForward)
- JS_STATIC_METHOD_ENTRY(launchURL)
- JS_STATIC_METHOD_ENTRY(mailMsg)
- JS_STATIC_METHOD_ENTRY(newFDF)
- JS_STATIC_METHOD_ENTRY(newDoc)
- JS_STATIC_METHOD_ENTRY(openDoc)
- JS_STATIC_METHOD_ENTRY(openFDF)
- JS_STATIC_METHOD_ENTRY(popUpMenuEx)
- JS_STATIC_METHOD_ENTRY(popUpMenu)
- JS_STATIC_METHOD_ENTRY(response)
- JS_STATIC_METHOD_ENTRY(setInterval)
- JS_STATIC_METHOD_ENTRY(setTimeOut)
+JS_STATIC_METHOD_ENTRY(alert)
+JS_STATIC_METHOD_ENTRY(beep)
+JS_STATIC_METHOD_ENTRY(browseForDoc)
+JS_STATIC_METHOD_ENTRY(clearInterval)
+JS_STATIC_METHOD_ENTRY(clearTimeOut)
+JS_STATIC_METHOD_ENTRY(execDialog)
+JS_STATIC_METHOD_ENTRY(execMenuItem)
+JS_STATIC_METHOD_ENTRY(findComponent)
+JS_STATIC_METHOD_ENTRY(goBack)
+JS_STATIC_METHOD_ENTRY(goForward)
+JS_STATIC_METHOD_ENTRY(launchURL)
+JS_STATIC_METHOD_ENTRY(mailMsg)
+JS_STATIC_METHOD_ENTRY(newFDF)
+JS_STATIC_METHOD_ENTRY(newDoc)
+JS_STATIC_METHOD_ENTRY(openDoc)
+JS_STATIC_METHOD_ENTRY(openFDF)
+JS_STATIC_METHOD_ENTRY(popUpMenuEx)
+JS_STATIC_METHOD_ENTRY(popUpMenu)
+JS_STATIC_METHOD_ENTRY(response)
+JS_STATIC_METHOD_ENTRY(setInterval)
+JS_STATIC_METHOD_ENTRY(setTimeOut)
END_JS_STATIC_METHOD()
-IMPLEMENT_JS_CLASS(CJS_App,app)
-
-app::app(CJS_Object * pJSObject)
- : CJS_EmbedObj(pJSObject),
- m_bCalculate(true),
- m_bRuntimeHighLight(false)
-{
-}
-
-app::~app(void)
-{
- for (int i=0,sz=m_aTimer.GetSize(); i<sz; i++)
- delete m_aTimer[i];
+IMPLEMENT_JS_CLASS(CJS_App, app)
+
+app::app(CJS_Object* pJSObject)
+ : CJS_EmbedObj(pJSObject), m_bCalculate(true), m_bRuntimeHighLight(false) {}
+
+app::~app(void) {
+ for (int i = 0, sz = m_aTimer.GetSize(); i < sz; i++)
+ delete m_aTimer[i];
+
+ m_aTimer.RemoveAll();
+}
+
+FX_BOOL app::activeDocs(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ if (!vp.IsGetting())
+ return FALSE;
+
+ CJS_Context* pContext = (CJS_Context*)cc;
+ CPDFDoc_Environment* pApp = pContext->GetReaderApp();
+ CJS_Runtime* pRuntime = pContext->GetJSRuntime();
+ CPDFSDK_Document* pCurDoc = pContext->GetReaderDocument();
+ CJS_Array aDocs(pRuntime->GetIsolate());
+ if (CPDFSDK_Document* pDoc = pApp->GetSDKDocument()) {
+ CJS_Document* pJSDocument = NULL;
+ if (pDoc == pCurDoc) {
+ JSFXObject pObj = JS_GetThisObj(*pRuntime);
+ if (JS_GetObjDefnID(pObj) == JS_GetObjDefnID(*pRuntime, L"Document"))
+ pJSDocument =
+ (CJS_Document*)JS_GetPrivate(pRuntime->GetIsolate(), pObj);
+ } else {
+ JSFXObject pObj = JS_NewFxDynamicObj(
+ *pRuntime, pContext, JS_GetObjDefnID(*pRuntime, L"Document"));
+ pJSDocument = (CJS_Document*)JS_GetPrivate(pRuntime->GetIsolate(), pObj);
+ ASSERT(pJSDocument != NULL);
+ }
+ aDocs.SetElement(0, CJS_Value(pRuntime->GetIsolate(), pJSDocument));
+ }
+ if (aDocs.GetLength() > 0)
+ vp << aDocs;
+ else
+ vp.SetNull();
- m_aTimer.RemoveAll();
+ return TRUE;
}
-FX_BOOL app::activeDocs(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- if (!vp.IsGetting())
- return FALSE;
+FX_BOOL app::calculate(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ if (vp.IsSetting()) {
+ bool bVP;
+ vp >> bVP;
+ m_bCalculate = (FX_BOOL)bVP;
- CJS_Context* pContext = (CJS_Context *)cc;
+ CJS_Context* pContext = (CJS_Context*)cc;
CPDFDoc_Environment* pApp = pContext->GetReaderApp();
CJS_Runtime* pRuntime = pContext->GetJSRuntime();
- CPDFSDK_Document* pCurDoc = pContext->GetReaderDocument();
CJS_Array aDocs(pRuntime->GetIsolate());
if (CPDFSDK_Document* pDoc = pApp->GetSDKDocument())
+ pDoc->GetInterForm()->EnableCalculate((FX_BOOL)m_bCalculate);
+ } else {
+ vp << (bool)m_bCalculate;
+ }
+ return TRUE;
+}
+
+FX_BOOL app::formsVersion(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ if (vp.IsGetting()) {
+ vp << JS_NUM_FORMSVERSION;
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+FX_BOOL app::viewerType(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ if (vp.IsGetting()) {
+ vp << L"unknown";
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+FX_BOOL app::viewerVariation(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ if (vp.IsGetting()) {
+ vp << JS_STR_VIEWERVARIATION;
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+FX_BOOL app::viewerVersion(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ if (vp.IsGetting()) {
+ vp << JS_STR_VIEWERVERSION;
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+FX_BOOL app::platform(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ if (vp.IsGetting()) {
+ vp << JS_STR_PLATFORM;
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+FX_BOOL app::language(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ if (vp.IsGetting()) {
+ vp << JS_STR_LANGUANGE;
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+// creates a new fdf object that contains no data
+// comment: need reader support
+// note:
+// CFDF_Document * CPDFDoc_Environment::NewFDF();
+FX_BOOL app::newFDF(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ return TRUE;
+}
+// opens a specified pdf document and returns its document object
+// comment:need reader support
+// note: as defined in js reference, the proto of this function's fourth
+// parmeters, how old an fdf document while do not show it.
+// CFDF_Document * CPDFDoc_Environment::OpenFDF(string strPath,bool bUserConv);
+
+FX_BOOL app::openFDF(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ return TRUE;
+}
+
+FX_BOOL app::alert(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ int iSize = params.size();
+ if (iSize < 1)
+ return FALSE;
+
+ CFX_WideString swMsg = L"";
+ CFX_WideString swTitle = L"";
+ int iIcon = 0;
+ int iType = 0;
+
+ v8::Isolate* isolate = GetIsolate(cc);
+
+ if (iSize == 1) {
+ if (params[0].GetType() == VT_object) {
+ JSObject pObj = params[0].ToV8Object();
+ {
+ v8::Local<v8::Value> pValue =
+ JS_GetObjectElement(isolate, pObj, L"cMsg");
+ swMsg = CJS_Value(isolate, pValue, VT_unknown).ToCFXWideString();
+
+ pValue = JS_GetObjectElement(isolate, pObj, L"cTitle");
+ swTitle = CJS_Value(isolate, pValue, VT_unknown).ToCFXWideString();
+
+ pValue = JS_GetObjectElement(isolate, pObj, L"nIcon");
+ iIcon = CJS_Value(isolate, pValue, VT_unknown).ToInt();
+
+ pValue = JS_GetObjectElement(isolate, pObj, L"nType");
+ iType = CJS_Value(isolate, pValue, VT_unknown).ToInt();
+ }
+
+ if (swMsg == L"") {
+ CJS_Array carray(isolate);
+ if (params[0].ConvertToArray(carray)) {
+ int iLenth = carray.GetLength();
+ CJS_Value* pValue = new CJS_Value(isolate);
+ // if (iLenth == 1)
+ // pValue = new
+ //CJS_Value(isolate);
+ // else if (iLenth > 1)
+ // pValue = new
+ //CJS_Value[iLenth];
+
+ for (int i = 0; i < iLenth; i++) {
+ carray.GetElement(i, *pValue);
+ swMsg += (*pValue).ToCFXWideString();
+ if (i < iLenth - 1)
+ swMsg += L", ";
+ }
+
+ delete pValue;
+ }
+ }
+
+ if (swTitle == L"")
+ swTitle = JSGetStringFromID((CJS_Context*)cc, IDS_STRING_JSALERT);
+ } else if (params[0].GetType() == VT_boolean) {
+ FX_BOOL bGet = params[0].ToBool();
+ if (bGet)
+ swMsg = L"true";
+ else
+ swMsg = L"false";
+
+ swTitle = JSGetStringFromID((CJS_Context*)cc, IDS_STRING_JSALERT);
+ } else {
+ swMsg = params[0].ToCFXWideString();
+ swTitle = JSGetStringFromID((CJS_Context*)cc, IDS_STRING_JSALERT);
+ }
+ } else {
+ if (params[0].GetType() == VT_boolean) {
+ FX_BOOL bGet = params[0].ToBool();
+ if (bGet)
+ swMsg = L"true";
+ else
+ swMsg = L"false";
+ } else {
+ swMsg = params[0].ToCFXWideString();
+ }
+ swTitle = JSGetStringFromID((CJS_Context*)cc, IDS_STRING_JSALERT);
+
+ for (int i = 1; i < iSize; i++) {
+ if (i == 1)
+ iIcon = params[i].ToInt();
+ if (i == 2)
+ iType = params[i].ToInt();
+ if (i == 3)
+ swTitle = params[i].ToCFXWideString();
+ }
+ }
+
+ CJS_Context* pContext = (CJS_Context*)cc;
+ ASSERT(pContext != NULL);
+ CJS_Runtime* pRuntime = pContext->GetJSRuntime();
+ ASSERT(pRuntime != NULL);
+ pRuntime->BeginBlock();
+ vRet = MsgBox(pRuntime->GetReaderApp(), JSGetPageView(cc), swMsg.c_str(),
+ swTitle.c_str(), iType, iIcon);
+ pRuntime->EndBlock();
+
+ return TRUE;
+}
+
+FX_BOOL app::beep(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ if (params.size() == 1) {
+ CJS_Context* pContext = (CJS_Context*)cc;
+ CJS_Runtime* pRuntime = pContext->GetJSRuntime();
+ CPDFDoc_Environment* pEnv = pRuntime->GetReaderApp();
+ pEnv->JS_appBeep(params[0].ToInt());
+ return TRUE;
+ }
+
+ sError = JSGetStringFromID((CJS_Context*)cc, IDS_STRING_JSPARAMERROR);
+ return FALSE;
+}
+
+FX_BOOL app::findComponent(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ return TRUE;
+}
+
+FX_BOOL app::popUpMenuEx(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ return FALSE;
+}
+
+FX_BOOL app::fs(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError) {
+ return FALSE;
+}
+
+FX_BOOL app::setInterval(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ CJS_Context* pContext = (CJS_Context*)cc;
+ if (params.size() > 2 || params.size() == 0) {
+ sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
+ return FALSE;
+ }
+
+ CFX_WideString script = params.size() > 0 ? params[0].ToCFXWideString() : L"";
+ if (script.IsEmpty()) {
+ sError = JSGetStringFromID(pContext, IDS_STRING_JSAFNUMBER_KEYSTROKE);
+ return TRUE;
+ }
+
+ CJS_Runtime* pRuntime = pContext->GetJSRuntime();
+ FX_DWORD dwInterval = params.size() > 1 ? params[1].ToInt() : 1000;
+
+ CPDFDoc_Environment* pApp = pRuntime->GetReaderApp();
+ ASSERT(pApp);
+ CJS_Timer* pTimer = new CJS_Timer(this, pApp);
+ m_aTimer.Add(pTimer);
+
+ pTimer->SetType(0);
+ pTimer->SetRuntime(pRuntime);
+ pTimer->SetJScript(script);
+ pTimer->SetTimeOut(0);
+ // pTimer->SetStartTime(GetTickCount());
+ pTimer->SetJSTimer(dwInterval);
+
+ JSFXObject pRetObj = JS_NewFxDynamicObj(
+ *pRuntime, pContext, JS_GetObjDefnID(*pRuntime, L"TimerObj"));
+
+ CJS_TimerObj* pJS_TimerObj =
+ (CJS_TimerObj*)JS_GetPrivate(pRuntime->GetIsolate(), pRetObj);
+ ASSERT(pJS_TimerObj != NULL);
+
+ TimerObj* pTimerObj = (TimerObj*)pJS_TimerObj->GetEmbedObject();
+ ASSERT(pTimerObj != NULL);
+
+ pTimerObj->SetTimer(pTimer);
+
+ vRet = pRetObj;
+
+ return TRUE;
+}
+
+FX_BOOL app::setTimeOut(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ if (params.size() > 2 || params.size() == 0) {
+ sError = JSGetStringFromID((CJS_Context*)cc, IDS_STRING_JSPARAMERROR);
+ return FALSE;
+ }
+
+ CJS_Context* pContext = (CJS_Context*)cc;
+ ASSERT(pContext != NULL);
+ CJS_Runtime* pRuntime = pContext->GetJSRuntime();
+ ASSERT(pRuntime != NULL);
+
+ CFX_WideString script = params.size() > 0 ? params[0].ToCFXWideString() : L"";
+ if (script.IsEmpty()) {
+ sError =
+ JSGetStringFromID((CJS_Context*)cc, IDS_STRING_JSAFNUMBER_KEYSTROKE);
+ return TRUE;
+ }
+
+ FX_DWORD dwTimeOut = params.size() > 1 ? params[1].ToInt() : 1000;
+
+ CPDFDoc_Environment* pApp = pRuntime->GetReaderApp();
+ ASSERT(pApp);
+
+ CJS_Timer* pTimer = new CJS_Timer(this, pApp);
+ m_aTimer.Add(pTimer);
+
+ pTimer->SetType(1);
+ pTimer->SetRuntime(pRuntime);
+ pTimer->SetJScript(script);
+ pTimer->SetTimeOut(dwTimeOut);
+ pTimer->SetJSTimer(dwTimeOut);
+
+ JSFXObject pRetObj = JS_NewFxDynamicObj(
+ *pRuntime, pContext, JS_GetObjDefnID(*pRuntime, L"TimerObj"));
+
+ CJS_TimerObj* pJS_TimerObj =
+ (CJS_TimerObj*)JS_GetPrivate(pRuntime->GetIsolate(), pRetObj);
+ ASSERT(pJS_TimerObj != NULL);
+
+ TimerObj* pTimerObj = (TimerObj*)pJS_TimerObj->GetEmbedObject();
+ ASSERT(pTimerObj != NULL);
+
+ pTimerObj->SetTimer(pTimer);
+
+ vRet = pRetObj;
+
+ return TRUE;
+}
+
+FX_BOOL app::clearTimeOut(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ CJS_Context* pContext = (CJS_Context*)cc;
+ ASSERT(pContext != NULL);
+ CJS_Runtime* pRuntime = pContext->GetJSRuntime();
+ ASSERT(pRuntime != NULL);
+
+ if (params.size() != 1) {
+ sError = JSGetStringFromID((CJS_Context*)cc, IDS_STRING_JSPARAMERROR);
+ return FALSE;
+ }
+
+ if (params[0].GetType() == VT_fxobject) {
+ JSFXObject pObj = params[0].ToV8Object();
{
- CJS_Document* pJSDocument = NULL;
- if (pDoc == pCurDoc)
- {
- JSFXObject pObj = JS_GetThisObj(*pRuntime);
- if (JS_GetObjDefnID(pObj) == JS_GetObjDefnID(*pRuntime, L"Document"))
- pJSDocument = (CJS_Document*)JS_GetPrivate(pRuntime->GetIsolate(),pObj);
+ if (JS_GetObjDefnID(pObj) == JS_GetObjDefnID(*pRuntime, L"TimerObj")) {
+ if (CJS_Object* pJSObj = params[0].ToCJSObject()) {
+ if (TimerObj* pTimerObj = (TimerObj*)pJSObj->GetEmbedObject()) {
+ if (CJS_Timer* pTimer = pTimerObj->GetTimer()) {
+ pTimer->KillJSTimer();
+
+ for (int i = 0, sz = m_aTimer.GetSize(); i < sz; i++) {
+ if (m_aTimer[i] == pTimer) {
+ m_aTimer.RemoveAt(i);
+ break;
+ }
+ }
+
+ delete pTimer;
+ pTimerObj->SetTimer(NULL);
+ }
+ }
}
- else
- {
- JSFXObject pObj = JS_NewFxDynamicObj(*pRuntime, pContext, JS_GetObjDefnID(*pRuntime,L"Document"));
- pJSDocument = (CJS_Document*)JS_GetPrivate(pRuntime->GetIsolate(),pObj);
- ASSERT(pJSDocument != NULL);
+ }
+ }
+ }
+
+ return TRUE;
+}
+
+FX_BOOL app::clearInterval(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ CJS_Context* pContext = (CJS_Context*)cc;
+ ASSERT(pContext != NULL);
+ CJS_Runtime* pRuntime = pContext->GetJSRuntime();
+ ASSERT(pRuntime != NULL);
+
+ if (params.size() != 1) {
+ sError = JSGetStringFromID((CJS_Context*)cc, IDS_STRING_JSPARAMERROR);
+ return FALSE;
+ }
+
+ if (params[0].GetType() == VT_fxobject) {
+ JSFXObject pObj = params[0].ToV8Object();
+ {
+ if (JS_GetObjDefnID(pObj) == JS_GetObjDefnID(*pRuntime, L"TimerObj")) {
+ if (CJS_Object* pJSObj = params[0].ToCJSObject()) {
+ if (TimerObj* pTimerObj = (TimerObj*)pJSObj->GetEmbedObject()) {
+ if (CJS_Timer* pTimer = pTimerObj->GetTimer()) {
+ pTimer->KillJSTimer();
+
+ for (int i = 0, sz = m_aTimer.GetSize(); i < sz; i++) {
+ if (m_aTimer[i] == pTimer) {
+ m_aTimer.RemoveAt(i);
+ break;
+ }
+ }
+
+ delete pTimer;
+ pTimerObj->SetTimer(NULL);
+ }
+ }
}
- aDocs.SetElement(0,CJS_Value(pRuntime->GetIsolate(),pJSDocument));
+ }
}
- if (aDocs.GetLength() > 0)
- vp << aDocs;
- else
- vp.SetNull();
+ }
- return TRUE;
+ return TRUE;
}
-FX_BOOL app::calculate(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- if (vp.IsSetting())
- {
- bool bVP;
- vp >> bVP;
- m_bCalculate = (FX_BOOL)bVP;
+FX_BOOL app::execMenuItem(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ return FALSE;
+}
+
+void app::TimerProc(CJS_Timer* pTimer) {
+ ASSERT(pTimer != NULL);
- CJS_Context* pContext = (CJS_Context*)cc;
- CPDFDoc_Environment* pApp = pContext->GetReaderApp();
- CJS_Runtime* pRuntime = pContext->GetJSRuntime();
- CJS_Array aDocs(pRuntime->GetIsolate());
- if (CPDFSDK_Document* pDoc = pApp->GetSDKDocument())
- pDoc->GetInterForm()->EnableCalculate((FX_BOOL)m_bCalculate);
- }
- else
- {
- vp << (bool)m_bCalculate;
- }
- return TRUE;
+ switch (pTimer->GetType()) {
+ case 0: // interval
+ RunJsScript(pTimer->GetRuntime(), pTimer->GetJScript());
+ break;
+ case 1:
+ if (pTimer->GetTimeOut() > 0) {
+ RunJsScript(pTimer->GetRuntime(), pTimer->GetJScript());
+ pTimer->KillJSTimer();
+ }
+ break;
+ }
}
-
-FX_BOOL app::formsVersion(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- if (vp.IsGetting())
- {
- vp << JS_NUM_FORMSVERSION;
- return TRUE;
- }
-
- return FALSE;
-}
-
-FX_BOOL app::viewerType(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- if (vp.IsGetting())
- {
- vp << L"unknown";
- return TRUE;
- }
-
- return FALSE;
-}
-
-FX_BOOL app::viewerVariation(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- if (vp.IsGetting())
- {
- vp << JS_STR_VIEWERVARIATION;
- return TRUE;
- }
-
- return FALSE;
-}
-
-FX_BOOL app::viewerVersion(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- if (vp.IsGetting())
- {
- vp << JS_STR_VIEWERVERSION;
- return TRUE;
- }
-
- return FALSE;
-}
-
-FX_BOOL app::platform(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- if (vp.IsGetting())
- {
- vp << JS_STR_PLATFORM;
- return TRUE;
- }
-
- return FALSE;
-}
-
-FX_BOOL app::language(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- if (vp.IsGetting())
- {
- vp << JS_STR_LANGUANGE;
- return TRUE;
- }
-
- return FALSE;
-}
-
-//creates a new fdf object that contains no data
-//comment: need reader support
-//note:
-//CFDF_Document * CPDFDoc_Environment::NewFDF();
-FX_BOOL app::newFDF(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- return TRUE;
-}
-//opens a specified pdf document and returns its document object
-//comment:need reader support
-//note: as defined in js reference, the proto of this function's fourth parmeters, how old an fdf document while do not show it.
-//CFDF_Document * CPDFDoc_Environment::OpenFDF(string strPath,bool bUserConv);
-
-FX_BOOL app::openFDF(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- return TRUE;
-}
-
-FX_BOOL app::alert(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- int iSize = params.size();
- if (iSize < 1)
- return FALSE;
-
- CFX_WideString swMsg = L"";
- CFX_WideString swTitle = L"";
- int iIcon = 0;
- int iType = 0;
-
- v8::Isolate* isolate = GetIsolate(cc);
-
- if (iSize == 1)
- {
- if (params[0].GetType() == VT_object)
- {
- JSObject pObj = params[0].ToV8Object();
- {
- v8::Local<v8::Value> pValue = JS_GetObjectElement(isolate, pObj, L"cMsg");
- swMsg = CJS_Value(isolate, pValue, VT_unknown).ToCFXWideString();
-
- pValue = JS_GetObjectElement(isolate, pObj, L"cTitle");
- swTitle = CJS_Value(isolate, pValue, VT_unknown).ToCFXWideString();
-
- pValue = JS_GetObjectElement(isolate, pObj, L"nIcon");
- iIcon = CJS_Value(isolate, pValue, VT_unknown).ToInt();
-
- pValue = JS_GetObjectElement(isolate, pObj, L"nType");
- iType = CJS_Value(isolate, pValue, VT_unknown).ToInt();
- }
-
- if (swMsg == L"")
- {
- CJS_Array carray(isolate);
- if (params[0].ConvertToArray(carray))
- {
- int iLenth = carray.GetLength();
- CJS_Value* pValue = new CJS_Value(isolate);
-// if (iLenth == 1)
-// pValue = new CJS_Value(isolate);
-// else if (iLenth > 1)
-// pValue = new CJS_Value[iLenth];
-
- for(int i = 0; i < iLenth; i++)
- {
- carray.GetElement(i, *pValue);
- swMsg += (*pValue).ToCFXWideString();
- if (i < iLenth - 1)
- swMsg += L", ";
- }
-
- delete pValue;
- }
- }
-
- if (swTitle == L"")
- swTitle = JSGetStringFromID((CJS_Context*)cc, IDS_STRING_JSALERT);
- }
- else if (params[0].GetType() == VT_boolean)
- {
- FX_BOOL bGet = params[0].ToBool();
- if (bGet)
- swMsg = L"true";
- else
- swMsg = L"false";
-
- swTitle = JSGetStringFromID((CJS_Context*)cc, IDS_STRING_JSALERT);
- }
- else
- {
- swMsg = params[0].ToCFXWideString();
- swTitle = JSGetStringFromID((CJS_Context*)cc, IDS_STRING_JSALERT);
- }
- }
- else
- {
- if (params[0].GetType() == VT_boolean)
- {
- FX_BOOL bGet = params[0].ToBool();
- if (bGet)
- swMsg = L"true";
- else
- swMsg = L"false";
- }
- else
- {
- swMsg = params[0].ToCFXWideString();
- }
- swTitle = JSGetStringFromID((CJS_Context*)cc, IDS_STRING_JSALERT);
-
- for(int i = 1;i<iSize;i++)
- {
- if (i == 1)
- iIcon = params[i].ToInt();
- if (i == 2)
- iType = params[i].ToInt();
- if (i == 3)
- swTitle = params[i].ToCFXWideString();
- }
- }
-
-
- CJS_Context* pContext = (CJS_Context*)cc;
- ASSERT(pContext != NULL);
- CJS_Runtime* pRuntime = pContext->GetJSRuntime();
- ASSERT(pRuntime != NULL);
- pRuntime->BeginBlock();
- vRet = MsgBox(pRuntime->GetReaderApp(), JSGetPageView(cc), swMsg.c_str(), swTitle.c_str(), iType, iIcon);
- pRuntime->EndBlock();
-
- return TRUE;
-}
-
-
-FX_BOOL app::beep(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- if (params.size() == 1)
- {
- CJS_Context* pContext = (CJS_Context*)cc;
- CJS_Runtime* pRuntime = pContext->GetJSRuntime();
- CPDFDoc_Environment * pEnv = pRuntime->GetReaderApp();
- pEnv->JS_appBeep(params[0].ToInt());
- return TRUE;
- }
-
- sError = JSGetStringFromID((CJS_Context*)cc, IDS_STRING_JSPARAMERROR);
- return FALSE;
-}
-
-FX_BOOL app::findComponent(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- return TRUE;
-}
-
-FX_BOOL app::popUpMenuEx(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- return FALSE;
-}
-
-FX_BOOL app::fs(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- return FALSE;
-}
-
-FX_BOOL app::setInterval(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- CJS_Context* pContext = (CJS_Context*)cc;
- if (params.size() > 2 || params.size() == 0)
- {
- sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
- return FALSE;
- }
-
- CFX_WideString script = params.size() > 0 ? params[0].ToCFXWideString() : L"";
- if (script.IsEmpty())
- {
- sError = JSGetStringFromID(pContext, IDS_STRING_JSAFNUMBER_KEYSTROKE);
- return TRUE;
- }
-
- CJS_Runtime* pRuntime = pContext->GetJSRuntime();
- FX_DWORD dwInterval = params.size() > 1 ? params[1].ToInt() : 1000;
-
- CPDFDoc_Environment* pApp = pRuntime->GetReaderApp();
- ASSERT(pApp);
- CJS_Timer* pTimer = new CJS_Timer(this, pApp);
- m_aTimer.Add(pTimer);
-
- pTimer->SetType(0);
- pTimer->SetRuntime(pRuntime);
- pTimer->SetJScript(script);
- pTimer->SetTimeOut(0);
-// pTimer->SetStartTime(GetTickCount());
- pTimer->SetJSTimer(dwInterval);
-
- JSFXObject pRetObj = JS_NewFxDynamicObj(*pRuntime, pContext, JS_GetObjDefnID(*pRuntime, L"TimerObj"));
-
- CJS_TimerObj* pJS_TimerObj = (CJS_TimerObj*)JS_GetPrivate(pRuntime->GetIsolate(),pRetObj);
- ASSERT(pJS_TimerObj != NULL);
-
- TimerObj* pTimerObj = (TimerObj*)pJS_TimerObj->GetEmbedObject();
- ASSERT(pTimerObj != NULL);
-
- pTimerObj->SetTimer(pTimer);
-
- vRet = pRetObj;
-
- return TRUE;
-}
-
-FX_BOOL app::setTimeOut(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- if (params.size() > 2 || params.size() == 0)
- {
- sError = JSGetStringFromID((CJS_Context*)cc, IDS_STRING_JSPARAMERROR);
- return FALSE;
- }
-
- CJS_Context* pContext = (CJS_Context*)cc;
- ASSERT(pContext != NULL);
- CJS_Runtime* pRuntime = pContext->GetJSRuntime();
- ASSERT(pRuntime != NULL);
-
- CFX_WideString script = params.size() > 0 ? params[0].ToCFXWideString() : L"";
- if (script.IsEmpty())
- {
- sError = JSGetStringFromID((CJS_Context*)cc, IDS_STRING_JSAFNUMBER_KEYSTROKE);
- return TRUE;
- }
-
- FX_DWORD dwTimeOut = params.size() > 1 ? params[1].ToInt() : 1000;
-
- CPDFDoc_Environment* pApp = pRuntime->GetReaderApp();
- ASSERT(pApp);
-
- CJS_Timer* pTimer = new CJS_Timer(this, pApp);
- m_aTimer.Add(pTimer);
-
- pTimer->SetType(1);
- pTimer->SetRuntime(pRuntime);
- pTimer->SetJScript(script);
- pTimer->SetTimeOut(dwTimeOut);
- pTimer->SetJSTimer(dwTimeOut);
-
- JSFXObject pRetObj = JS_NewFxDynamicObj(*pRuntime, pContext, JS_GetObjDefnID(*pRuntime, L"TimerObj"));
-
- CJS_TimerObj* pJS_TimerObj = (CJS_TimerObj*)JS_GetPrivate(pRuntime->GetIsolate(),pRetObj);
- ASSERT(pJS_TimerObj != NULL);
-
- TimerObj* pTimerObj = (TimerObj*)pJS_TimerObj->GetEmbedObject();
- ASSERT(pTimerObj != NULL);
-
- pTimerObj->SetTimer(pTimer);
-
- vRet = pRetObj;
-
- return TRUE;
-}
-
-FX_BOOL app::clearTimeOut(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- CJS_Context* pContext = (CJS_Context*)cc;
- ASSERT(pContext != NULL);
- CJS_Runtime* pRuntime = pContext->GetJSRuntime();
- ASSERT(pRuntime != NULL);
-
- if (params.size() != 1)
- {
- sError = JSGetStringFromID((CJS_Context*)cc, IDS_STRING_JSPARAMERROR);
- return FALSE;
- }
-
- if (params[0].GetType() == VT_fxobject)
- {
- JSFXObject pObj = params[0].ToV8Object();
- {
- if (JS_GetObjDefnID(pObj) == JS_GetObjDefnID(*pRuntime, L"TimerObj"))
- {
- if (CJS_Object* pJSObj = params[0].ToCJSObject())
- {
- if (TimerObj* pTimerObj = (TimerObj*)pJSObj->GetEmbedObject())
- {
- if (CJS_Timer* pTimer = pTimerObj->GetTimer())
- {
- pTimer->KillJSTimer();
-
- for (int i=0,sz=m_aTimer.GetSize(); i<sz; i++)
- {
- if (m_aTimer[i] == pTimer)
- {
- m_aTimer.RemoveAt(i);
- break;
- }
- }
-
- delete pTimer;
- pTimerObj->SetTimer(NULL);
- }
- }
- }
- }
- }
- }
-
- return TRUE;
-}
-
-FX_BOOL app::clearInterval(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- CJS_Context* pContext = (CJS_Context*)cc;
- ASSERT(pContext != NULL);
- CJS_Runtime* pRuntime = pContext->GetJSRuntime();
- ASSERT(pRuntime != NULL);
-
- if (params.size() != 1)
- {
- sError = JSGetStringFromID((CJS_Context*)cc, IDS_STRING_JSPARAMERROR);
- return FALSE;
- }
-
- if (params[0].GetType() == VT_fxobject)
- {
- JSFXObject pObj = params[0].ToV8Object();
- {
- if (JS_GetObjDefnID(pObj) == JS_GetObjDefnID(*pRuntime, L"TimerObj"))
- {
- if (CJS_Object* pJSObj = params[0].ToCJSObject())
- {
- if (TimerObj* pTimerObj = (TimerObj*)pJSObj->GetEmbedObject())
- {
- if (CJS_Timer* pTimer = pTimerObj->GetTimer())
- {
- pTimer->KillJSTimer();
-
- for (int i=0,sz=m_aTimer.GetSize(); i<sz; i++)
- {
- if (m_aTimer[i] == pTimer)
- {
- m_aTimer.RemoveAt(i);
- break;
- }
- }
-
- delete pTimer;
- pTimerObj->SetTimer(NULL);
- }
- }
- }
- }
- }
- }
-
- return TRUE;
-}
-
-FX_BOOL app::execMenuItem(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- return FALSE;
-}
-
-void app::TimerProc(CJS_Timer* pTimer)
-{
- ASSERT(pTimer != NULL);
-
- switch (pTimer->GetType())
- {
- case 0: //interval
- RunJsScript(pTimer->GetRuntime(), pTimer->GetJScript());
- break;
- case 1:
- if (pTimer->GetTimeOut() > 0)
- {
- RunJsScript(pTimer->GetRuntime(), pTimer->GetJScript());
- pTimer->KillJSTimer();
- }
- break;
- }
-
-}
-
-void app::RunJsScript(CJS_Runtime* pRuntime,const CFX_WideString& wsScript)
-{
- ASSERT(pRuntime != NULL);
-
- if (!pRuntime->IsBlocking())
- {
- IFXJS_Context* pContext = pRuntime->NewContext();
- ASSERT(pContext != NULL);
- pContext->OnExternal_Exec();
- CFX_WideString wtInfo;
- pContext->RunScript(wsScript,wtInfo);
- pRuntime->ReleaseContext(pContext);
- }
-}
-
-FX_BOOL app::goBack(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
+
+void app::RunJsScript(CJS_Runtime* pRuntime, const CFX_WideString& wsScript) {
+ ASSERT(pRuntime != NULL);
+
+ if (!pRuntime->IsBlocking()) {
+ IFXJS_Context* pContext = pRuntime->NewContext();
+ ASSERT(pContext != NULL);
+ pContext->OnExternal_Exec();
+ CFX_WideString wtInfo;
+ pContext->RunScript(wsScript, wtInfo);
+ pRuntime->ReleaseContext(pContext);
+ }
+}
+
+FX_BOOL app::goBack(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
// Not supported.
return TRUE;
}
-FX_BOOL app::goForward(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
+FX_BOOL app::goForward(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
// Not supported.
return TRUE;
}
-FX_BOOL app::mailMsg(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- CJS_Context* pContext = (CJS_Context*)cc;
- v8::Isolate* isolate = GetIsolate(cc);
+FX_BOOL app::mailMsg(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ CJS_Context* pContext = (CJS_Context*)cc;
+ v8::Isolate* isolate = GetIsolate(cc);
- FX_BOOL bUI = TRUE;
- CFX_WideString cTo = L"";
- CFX_WideString cCc = L"";
- CFX_WideString cBcc = L"";
- CFX_WideString cSubject = L"";
- CFX_WideString cMsg = L"";
+ FX_BOOL bUI = TRUE;
+ CFX_WideString cTo = L"";
+ CFX_WideString cCc = L"";
+ CFX_WideString cBcc = L"";
+ CFX_WideString cSubject = L"";
+ CFX_WideString cMsg = L"";
- if (params.size() < 1)
- return FALSE;
+ if (params.size() < 1)
+ return FALSE;
- if (params[0].GetType() == VT_object)
- {
- JSObject pObj = params[0].ToV8Object();
+ if (params[0].GetType() == VT_object) {
+ JSObject pObj = params[0].ToV8Object();
- v8::Local<v8::Value> pValue = JS_GetObjectElement(isolate, pObj, L"bUI");
- bUI = CJS_Value(isolate, pValue, GET_VALUE_TYPE(pValue)).ToBool();
+ v8::Local<v8::Value> pValue = JS_GetObjectElement(isolate, pObj, L"bUI");
+ bUI = CJS_Value(isolate, pValue, GET_VALUE_TYPE(pValue)).ToBool();
- pValue = JS_GetObjectElement(isolate, pObj, L"cTo");
- cTo = CJS_Value(isolate, pValue, GET_VALUE_TYPE(pValue)).ToCFXWideString();
+ pValue = JS_GetObjectElement(isolate, pObj, L"cTo");
+ cTo = CJS_Value(isolate, pValue, GET_VALUE_TYPE(pValue)).ToCFXWideString();
- pValue = JS_GetObjectElement(isolate, pObj, L"cCc");
- cCc = CJS_Value(isolate, pValue, GET_VALUE_TYPE(pValue)).ToCFXWideString();
+ pValue = JS_GetObjectElement(isolate, pObj, L"cCc");
+ cCc = CJS_Value(isolate, pValue, GET_VALUE_TYPE(pValue)).ToCFXWideString();
- pValue = JS_GetObjectElement(isolate, pObj, L"cBcc");
- cBcc = CJS_Value(isolate, pValue, GET_VALUE_TYPE(pValue)).ToCFXWideString();
+ pValue = JS_GetObjectElement(isolate, pObj, L"cBcc");
+ cBcc = CJS_Value(isolate, pValue, GET_VALUE_TYPE(pValue)).ToCFXWideString();
- pValue = JS_GetObjectElement(isolate, pObj, L"cSubject");
- cSubject = CJS_Value(isolate, pValue, GET_VALUE_TYPE(pValue)).ToCFXWideString();
+ pValue = JS_GetObjectElement(isolate, pObj, L"cSubject");
+ cSubject =
+ CJS_Value(isolate, pValue, GET_VALUE_TYPE(pValue)).ToCFXWideString();
- pValue = JS_GetObjectElement(isolate, pObj, L"cMsg");
- cMsg = CJS_Value(isolate, pValue, GET_VALUE_TYPE(pValue)).ToCFXWideString();
- } else {
- if (params.size() < 2)
- return FALSE;
+ pValue = JS_GetObjectElement(isolate, pObj, L"cMsg");
+ cMsg = CJS_Value(isolate, pValue, GET_VALUE_TYPE(pValue)).ToCFXWideString();
+ } else {
+ if (params.size() < 2)
+ return FALSE;
- bUI = params[0].ToBool();
- cTo = params[1].ToCFXWideString();
+ bUI = params[0].ToBool();
+ cTo = params[1].ToCFXWideString();
- if (params.size() >= 3)
- cCc = params[2].ToCFXWideString();
- if (params.size() >= 4)
- cBcc = params[3].ToCFXWideString();
- if (params.size() >= 5)
- cSubject = params[4].ToCFXWideString();
- if (params.size() >= 6)
- cMsg = params[5].ToCFXWideString();
- }
+ if (params.size() >= 3)
+ cCc = params[2].ToCFXWideString();
+ if (params.size() >= 4)
+ cBcc = params[3].ToCFXWideString();
+ if (params.size() >= 5)
+ cSubject = params[4].ToCFXWideString();
+ if (params.size() >= 6)
+ cMsg = params[5].ToCFXWideString();
+ }
- CJS_Runtime* pRuntime = pContext->GetJSRuntime();
- ASSERT(pRuntime != NULL);
+ CJS_Runtime* pRuntime = pContext->GetJSRuntime();
+ ASSERT(pRuntime != NULL);
- CPDFDoc_Environment* pApp = pContext->GetReaderApp();
- ASSERT(pApp != NULL);
+ CPDFDoc_Environment* pApp = pContext->GetReaderApp();
+ ASSERT(pApp != NULL);
- pRuntime->BeginBlock();
- pApp->JS_docmailForm(NULL, 0, bUI, cTo.c_str(), cSubject.c_str(), cCc.c_str(), cBcc.c_str(), cMsg.c_str());
- pRuntime->EndBlock();
+ pRuntime->BeginBlock();
+ pApp->JS_docmailForm(NULL, 0, bUI, cTo.c_str(), cSubject.c_str(), cCc.c_str(),
+ cBcc.c_str(), cMsg.c_str());
+ pRuntime->EndBlock();
- return FALSE;
+ return FALSE;
}
-FX_BOOL app::launchURL(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
+FX_BOOL app::launchURL(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
// Unsafe, not supported.
return TRUE;
}
-FX_BOOL app::runtimeHighlight(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- if (vp.IsSetting())
- {
- vp>>m_bRuntimeHighLight;
- }
- else
- {
- vp<<m_bRuntimeHighLight;
- }
+FX_BOOL app::runtimeHighlight(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ if (vp.IsSetting()) {
+ vp >> m_bRuntimeHighLight;
+ } else {
+ vp << m_bRuntimeHighLight;
+ }
- return TRUE;
+ return TRUE;
}
-FX_BOOL app::fullscreen(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- return FALSE;
+FX_BOOL app::fullscreen(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ return FALSE;
}
-FX_BOOL app::popUpMenu(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- return FALSE;
+FX_BOOL app::popUpMenu(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ return FALSE;
}
-
-FX_BOOL app::browseForDoc(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
+FX_BOOL app::browseForDoc(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
// Unsafe, not supported.
return TRUE;
}
-CFX_WideString app::SysPathToPDFPath(const CFX_WideString& sOldPath)
-{
- CFX_WideString sRet = L"/";
-
- for (int i=0,sz=sOldPath.GetLength(); i<sz; i++)
- {
- wchar_t c = sOldPath.GetAt(i);
- if (c == L':')
- {
- }
- else
- {
- if (c == L'\\')
- {
- sRet += L"/";
- }
- else
- {
- sRet += c;
- }
- }
- }
-
- return sRet;
-}
-
-FX_BOOL app::newDoc(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- return FALSE;
-}
-
-FX_BOOL app::openDoc(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- return FALSE;
-}
-
-FX_BOOL app::response(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- CFX_WideString swQuestion = L"";
- CFX_WideString swLabel = L"";
- CFX_WideString swTitle = L"PDF";
- CFX_WideString swDefault = L"";
- bool bPassWord = false;
-
- v8::Isolate* isolate = GetIsolate(cc);
-
- int iLength = params.size();
- if (iLength > 0 && params[0].GetType() == VT_object)
- {
- JSObject pObj = params[0].ToV8Object();
- v8::Local<v8::Value> pValue = JS_GetObjectElement(isolate,pObj,L"cQuestion");
- swQuestion = CJS_Value(isolate,pValue,GET_VALUE_TYPE(pValue)).ToCFXWideString();
-
- pValue = JS_GetObjectElement(isolate,pObj,L"cTitle");
- swTitle = CJS_Value(isolate,pValue,GET_VALUE_TYPE(pValue)).ToCFXWideString();
-
- pValue = JS_GetObjectElement(isolate,pObj,L"cDefault");
- swDefault = CJS_Value(isolate,pValue,GET_VALUE_TYPE(pValue)).ToCFXWideString();
-
- pValue = JS_GetObjectElement(isolate,pObj,L"cLabel");
- swLabel = CJS_Value(isolate,pValue,GET_VALUE_TYPE(pValue)).ToCFXWideString();
-
- pValue = JS_GetObjectElement(isolate,pObj,L"bPassword");
- bPassWord = CJS_Value(isolate,pValue,GET_VALUE_TYPE(pValue)).ToBool();
- }
- else
- {
- switch(iLength)
- {
- case 5:
- swLabel = params[4].ToCFXWideString();
- // FALLTHROUGH
- case 4:
- bPassWord = params[3].ToBool();
- // FALLTHROUGH
- case 3:
- swDefault = params[2].ToCFXWideString();
- // FALLTHROUGH
- case 2:
- swTitle = params[1].ToCFXWideString();
- // FALLTHROUGH
- case 1:
- swQuestion = params[0].ToCFXWideString();
- // FALLTHROUGH
- default:
- break;
- }
- }
-
- CJS_Context* pContext = (CJS_Context *)cc;
- ASSERT(pContext != NULL);
-
- CPDFDoc_Environment* pApp = pContext->GetReaderApp();
- ASSERT(pApp != NULL);
-
- const int MAX_INPUT_BYTES = 2048;
- nonstd::unique_ptr<char[]> pBuff(new char[MAX_INPUT_BYTES + 2]);
- memset(pBuff.get(), 0, MAX_INPUT_BYTES + 2);
- int nLengthBytes = pApp->JS_appResponse(swQuestion.c_str(),
- swTitle.c_str(),
- swDefault.c_str(),
- swLabel.c_str(),
- bPassWord,
- pBuff.get(),
- MAX_INPUT_BYTES);
- if (nLengthBytes <= 0) {
- vRet.SetNull();
- return FALSE;
- }
- nLengthBytes = std::min(nLengthBytes, MAX_INPUT_BYTES);
+CFX_WideString app::SysPathToPDFPath(const CFX_WideString& sOldPath) {
+ CFX_WideString sRet = L"/";
- CFX_WideString ret_string =
- CFX_WideString::FromUTF16LE((unsigned short*)pBuff.get(),
- nLengthBytes / sizeof(unsigned short));
- vRet = ret_string.c_str();
- return TRUE;
+ for (int i = 0, sz = sOldPath.GetLength(); i < sz; i++) {
+ wchar_t c = sOldPath.GetAt(i);
+ if (c == L':') {
+ } else {
+ if (c == L'\\') {
+ sRet += L"/";
+ } else {
+ sRet += c;
+ }
+ }
+ }
+
+ return sRet;
+}
+
+FX_BOOL app::newDoc(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ return FALSE;
+}
+
+FX_BOOL app::openDoc(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ return FALSE;
+}
+
+FX_BOOL app::response(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ CFX_WideString swQuestion = L"";
+ CFX_WideString swLabel = L"";
+ CFX_WideString swTitle = L"PDF";
+ CFX_WideString swDefault = L"";
+ bool bPassWord = false;
+
+ v8::Isolate* isolate = GetIsolate(cc);
+
+ int iLength = params.size();
+ if (iLength > 0 && params[0].GetType() == VT_object) {
+ JSObject pObj = params[0].ToV8Object();
+ v8::Local<v8::Value> pValue =
+ JS_GetObjectElement(isolate, pObj, L"cQuestion");
+ swQuestion =
+ CJS_Value(isolate, pValue, GET_VALUE_TYPE(pValue)).ToCFXWideString();
+
+ pValue = JS_GetObjectElement(isolate, pObj, L"cTitle");
+ swTitle =
+ CJS_Value(isolate, pValue, GET_VALUE_TYPE(pValue)).ToCFXWideString();
+
+ pValue = JS_GetObjectElement(isolate, pObj, L"cDefault");
+ swDefault =
+ CJS_Value(isolate, pValue, GET_VALUE_TYPE(pValue)).ToCFXWideString();
+
+ pValue = JS_GetObjectElement(isolate, pObj, L"cLabel");
+ swLabel =
+ CJS_Value(isolate, pValue, GET_VALUE_TYPE(pValue)).ToCFXWideString();
+
+ pValue = JS_GetObjectElement(isolate, pObj, L"bPassword");
+ bPassWord = CJS_Value(isolate, pValue, GET_VALUE_TYPE(pValue)).ToBool();
+ } else {
+ switch (iLength) {
+ case 5:
+ swLabel = params[4].ToCFXWideString();
+ // FALLTHROUGH
+ case 4:
+ bPassWord = params[3].ToBool();
+ // FALLTHROUGH
+ case 3:
+ swDefault = params[2].ToCFXWideString();
+ // FALLTHROUGH
+ case 2:
+ swTitle = params[1].ToCFXWideString();
+ // FALLTHROUGH
+ case 1:
+ swQuestion = params[0].ToCFXWideString();
+ // FALLTHROUGH
+ default:
+ break;
+ }
+ }
+
+ CJS_Context* pContext = (CJS_Context*)cc;
+ ASSERT(pContext != NULL);
+
+ CPDFDoc_Environment* pApp = pContext->GetReaderApp();
+ ASSERT(pApp != NULL);
+
+ const int MAX_INPUT_BYTES = 2048;
+ nonstd::unique_ptr<char[]> pBuff(new char[MAX_INPUT_BYTES + 2]);
+ memset(pBuff.get(), 0, MAX_INPUT_BYTES + 2);
+ int nLengthBytes = pApp->JS_appResponse(
+ swQuestion.c_str(), swTitle.c_str(), swDefault.c_str(), swLabel.c_str(),
+ bPassWord, pBuff.get(), MAX_INPUT_BYTES);
+ if (nLengthBytes <= 0) {
+ vRet.SetNull();
+ return FALSE;
+ }
+ nLengthBytes = std::min(nLengthBytes, MAX_INPUT_BYTES);
+
+ CFX_WideString ret_string = CFX_WideString::FromUTF16LE(
+ (unsigned short*)pBuff.get(), nLengthBytes / sizeof(unsigned short));
+ vRet = ret_string.c_str();
+ return TRUE;
}
-FX_BOOL app::media(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- return FALSE;
+FX_BOOL app::media(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ return FALSE;
}
-FX_BOOL app::execDialog(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- return TRUE;
+FX_BOOL app::execDialog(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ return TRUE;
}
diff --git a/fpdfsdk/src/javascript/color.cpp b/fpdfsdk/src/javascript/color.cpp
index a2bbadcd51..0659ab94a4 100644
--- a/fpdfsdk/src/javascript/color.cpp
+++ b/fpdfsdk/src/javascript/color.cpp
@@ -14,15 +14,14 @@
#include "../../include/javascript/JS_Context.h"
#include "../../include/javascript/JS_Runtime.h"
-static v8::Isolate* GetIsolate(IFXJS_Context* cc)
-{
- CJS_Context* pContext = (CJS_Context *)cc;
- ASSERT(pContext != NULL);
+static v8::Isolate* GetIsolate(IFXJS_Context* cc) {
+ CJS_Context* pContext = (CJS_Context*)cc;
+ ASSERT(pContext != NULL);
- CJS_Runtime* pRuntime = pContext->GetJSRuntime();
- ASSERT(pRuntime != NULL);
+ CJS_Runtime* pRuntime = pContext->GetJSRuntime();
+ ASSERT(pRuntime != NULL);
- return pRuntime->GetIsolate();
+ return pRuntime->GetIsolate();
}
/* -------------------------- color -------------------------- */
@@ -30,149 +29,132 @@ BEGIN_JS_STATIC_CONST(CJS_Color)
END_JS_STATIC_CONST()
BEGIN_JS_STATIC_PROP(CJS_Color)
- JS_STATIC_PROP_ENTRY(black)
- JS_STATIC_PROP_ENTRY(blue)
- JS_STATIC_PROP_ENTRY(cyan)
- JS_STATIC_PROP_ENTRY(dkGray)
- JS_STATIC_PROP_ENTRY(gray)
- JS_STATIC_PROP_ENTRY(green)
- JS_STATIC_PROP_ENTRY(ltGray)
- JS_STATIC_PROP_ENTRY(magenta)
- JS_STATIC_PROP_ENTRY(red)
- JS_STATIC_PROP_ENTRY(transparent)
- JS_STATIC_PROP_ENTRY(white)
- JS_STATIC_PROP_ENTRY(yellow)
+JS_STATIC_PROP_ENTRY(black)
+JS_STATIC_PROP_ENTRY(blue)
+JS_STATIC_PROP_ENTRY(cyan)
+JS_STATIC_PROP_ENTRY(dkGray)
+JS_STATIC_PROP_ENTRY(gray)
+JS_STATIC_PROP_ENTRY(green)
+JS_STATIC_PROP_ENTRY(ltGray)
+JS_STATIC_PROP_ENTRY(magenta)
+JS_STATIC_PROP_ENTRY(red)
+JS_STATIC_PROP_ENTRY(transparent)
+JS_STATIC_PROP_ENTRY(white)
+JS_STATIC_PROP_ENTRY(yellow)
END_JS_STATIC_PROP()
BEGIN_JS_STATIC_METHOD(CJS_Color)
- JS_STATIC_METHOD_ENTRY(convert)
- JS_STATIC_METHOD_ENTRY(equal)
+JS_STATIC_METHOD_ENTRY(convert)
+JS_STATIC_METHOD_ENTRY(equal)
END_JS_STATIC_METHOD()
-IMPLEMENT_JS_CLASS(CJS_Color,color)
-
-color::color(CJS_Object* pJSObject): CJS_EmbedObj(pJSObject)
-{
- m_crTransparent = CPWL_Color(COLORTYPE_TRANSPARENT);
- m_crBlack = CPWL_Color(COLORTYPE_GRAY, 0);
- m_crWhite = CPWL_Color(COLORTYPE_GRAY, 1);
- m_crRed = CPWL_Color(COLORTYPE_RGB, 1, 0 ,0);
- m_crGreen = CPWL_Color(COLORTYPE_RGB, 0, 1 ,0);
- m_crBlue = CPWL_Color(COLORTYPE_RGB, 0, 0 ,1);
- m_crCyan = CPWL_Color(COLORTYPE_CMYK, 1, 0 ,0, 0);
- m_crMagenta = CPWL_Color(COLORTYPE_CMYK, 0, 1 ,0, 0);
- m_crYellow = CPWL_Color(COLORTYPE_CMYK, 0, 0 ,1, 0);
- m_crDKGray = CPWL_Color(COLORTYPE_GRAY, 0.25);
- m_crGray = CPWL_Color(COLORTYPE_GRAY, 0.5);
- m_crLTGray = CPWL_Color(COLORTYPE_GRAY, 0.75);
+IMPLEMENT_JS_CLASS(CJS_Color, color)
+
+color::color(CJS_Object* pJSObject) : CJS_EmbedObj(pJSObject) {
+ m_crTransparent = CPWL_Color(COLORTYPE_TRANSPARENT);
+ m_crBlack = CPWL_Color(COLORTYPE_GRAY, 0);
+ m_crWhite = CPWL_Color(COLORTYPE_GRAY, 1);
+ m_crRed = CPWL_Color(COLORTYPE_RGB, 1, 0, 0);
+ m_crGreen = CPWL_Color(COLORTYPE_RGB, 0, 1, 0);
+ m_crBlue = CPWL_Color(COLORTYPE_RGB, 0, 0, 1);
+ m_crCyan = CPWL_Color(COLORTYPE_CMYK, 1, 0, 0, 0);
+ m_crMagenta = CPWL_Color(COLORTYPE_CMYK, 0, 1, 0, 0);
+ m_crYellow = CPWL_Color(COLORTYPE_CMYK, 0, 0, 1, 0);
+ m_crDKGray = CPWL_Color(COLORTYPE_GRAY, 0.25);
+ m_crGray = CPWL_Color(COLORTYPE_GRAY, 0.5);
+ m_crLTGray = CPWL_Color(COLORTYPE_GRAY, 0.75);
}
-color::~color(void)
-{
+color::~color(void) {}
+
+void color::ConvertPWLColorToArray(const CPWL_Color& color, CJS_Array& array) {
+ switch (color.nColorType) {
+ case COLORTYPE_TRANSPARENT:
+ array.SetElement(0, CJS_Value(array.GetIsolate(), "T"));
+ break;
+ case COLORTYPE_GRAY:
+ array.SetElement(0, CJS_Value(array.GetIsolate(), "G"));
+ array.SetElement(1, CJS_Value(array.GetIsolate(), color.fColor1));
+ break;
+ case COLORTYPE_RGB:
+ array.SetElement(0, CJS_Value(array.GetIsolate(), "RGB"));
+ array.SetElement(1, CJS_Value(array.GetIsolate(), color.fColor1));
+ array.SetElement(2, CJS_Value(array.GetIsolate(), color.fColor2));
+ array.SetElement(3, CJS_Value(array.GetIsolate(), color.fColor3));
+ break;
+ case COLORTYPE_CMYK:
+ array.SetElement(0, CJS_Value(array.GetIsolate(), "CMYK"));
+ array.SetElement(1, CJS_Value(array.GetIsolate(), color.fColor1));
+ array.SetElement(2, CJS_Value(array.GetIsolate(), color.fColor2));
+ array.SetElement(3, CJS_Value(array.GetIsolate(), color.fColor3));
+ array.SetElement(4, CJS_Value(array.GetIsolate(), color.fColor4));
+ break;
+ }
}
-void color::ConvertPWLColorToArray(const CPWL_Color& color, CJS_Array& array)
-{
- switch (color.nColorType)
- {
- case COLORTYPE_TRANSPARENT:
- array.SetElement(0, CJS_Value(array.GetIsolate(), "T"));
- break;
- case COLORTYPE_GRAY:
- array.SetElement(0, CJS_Value(array.GetIsolate(),"G"));
- array.SetElement(1, CJS_Value(array.GetIsolate(),color.fColor1));
- break;
- case COLORTYPE_RGB:
- array.SetElement(0, CJS_Value(array.GetIsolate(),"RGB"));
- array.SetElement(1, CJS_Value(array.GetIsolate(),color.fColor1));
- array.SetElement(2, CJS_Value(array.GetIsolate(),color.fColor2));
- array.SetElement(3, CJS_Value(array.GetIsolate(),color.fColor3));
- break;
- case COLORTYPE_CMYK:
- array.SetElement(0, CJS_Value(array.GetIsolate(),"CMYK"));
- array.SetElement(1, CJS_Value(array.GetIsolate(),color.fColor1));
- array.SetElement(2, CJS_Value(array.GetIsolate(),color.fColor2));
- array.SetElement(3, CJS_Value(array.GetIsolate(),color.fColor3));
- array.SetElement(4, CJS_Value(array.GetIsolate(),color.fColor4));
- break;
- }
+void color::ConvertArrayToPWLColor(CJS_Array& array, CPWL_Color& color) {
+ int nArrayLen = array.GetLength();
+ if (nArrayLen < 1)
+ return;
+
+ CJS_Value value(array.GetIsolate());
+ array.GetElement(0, value);
+ CFX_ByteString sSpace = value.ToCFXByteString();
+
+ double d1 = 0;
+ double d2 = 0;
+ double d3 = 0;
+ double d4 = 0;
+
+ if (nArrayLen > 1) {
+ array.GetElement(1, value);
+ d1 = value.ToDouble();
+ }
+
+ if (nArrayLen > 2) {
+ array.GetElement(2, value);
+ d2 = value.ToDouble();
+ }
+
+ if (nArrayLen > 3) {
+ array.GetElement(3, value);
+ d3 = value.ToDouble();
+ }
+
+ if (nArrayLen > 4) {
+ array.GetElement(4, value);
+ d4 = value.ToDouble();
+ }
+
+ if (sSpace == "T") {
+ color = CPWL_Color(COLORTYPE_TRANSPARENT);
+ } else if (sSpace == "G") {
+ color = CPWL_Color(COLORTYPE_GRAY, (FX_FLOAT)d1);
+ } else if (sSpace == "RGB") {
+ color = CPWL_Color(COLORTYPE_RGB, (FX_FLOAT)d1, (FX_FLOAT)d2, (FX_FLOAT)d3);
+ } else if (sSpace == "CMYK") {
+ color = CPWL_Color(COLORTYPE_CMYK, (FX_FLOAT)d1, (FX_FLOAT)d2, (FX_FLOAT)d3,
+ (FX_FLOAT)d4);
+ }
}
-void color::ConvertArrayToPWLColor(CJS_Array& array, CPWL_Color& color)
-{
- int nArrayLen = array.GetLength();
- if (nArrayLen < 1) return;
-
- CJS_Value value(array.GetIsolate());
- array.GetElement(0, value);
- CFX_ByteString sSpace = value.ToCFXByteString();
-
- double d1 = 0;
- double d2 = 0;
- double d3 = 0;
- double d4 = 0;
-
- if (nArrayLen > 1)
- {
- array.GetElement(1, value);
- d1 = value.ToDouble();
- }
-
- if (nArrayLen > 2)
- {
- array.GetElement(2, value);
- d2 = value.ToDouble();
- }
-
- if (nArrayLen > 3)
- {
- array.GetElement(3, value);
- d3 = value.ToDouble();
- }
-
- if (nArrayLen > 4)
- {
- array.GetElement(4, value);
- d4 = value.ToDouble();
- }
-
- if (sSpace == "T")
- {
- color = CPWL_Color(COLORTYPE_TRANSPARENT);
- }
- else if (sSpace == "G")
- {
- color = CPWL_Color(COLORTYPE_GRAY, (FX_FLOAT)d1);
- }
- else if (sSpace == "RGB")
- {
- color = CPWL_Color(COLORTYPE_RGB, (FX_FLOAT)d1, (FX_FLOAT)d2, (FX_FLOAT)d3);
- }
- else if (sSpace == "CMYK")
- {
- color = CPWL_Color(COLORTYPE_CMYK, (FX_FLOAT)d1, (FX_FLOAT)d2, (FX_FLOAT)d3, (FX_FLOAT)d4);
- }
-}
-
-#define JS_IMPLEMENT_COLORPROP(prop, var)\
-FX_BOOL color::prop(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)\
-{\
- CJS_Context* pContext = (CJS_Context*)cc;\
- v8::Isolate* isolate = pContext->GetJSRuntime()->GetIsolate();\
- if (vp.IsGetting())\
- {\
- CJS_Array array(isolate);\
- ConvertPWLColorToArray(var, array);\
- vp << array;\
- }\
- else\
- {\
- CJS_Array array(isolate);\
- if (!vp.ConvertToArray(array)) return FALSE;\
- ConvertArrayToPWLColor(array, var);\
- }\
- return TRUE;\
-}
+#define JS_IMPLEMENT_COLORPROP(prop, var) \
+ FX_BOOL color::prop(IFXJS_Context* cc, CJS_PropValue& vp, \
+ CFX_WideString& sError) { \
+ CJS_Context* pContext = (CJS_Context*)cc; \
+ v8::Isolate* isolate = pContext->GetJSRuntime()->GetIsolate(); \
+ if (vp.IsGetting()) { \
+ CJS_Array array(isolate); \
+ ConvertPWLColorToArray(var, array); \
+ vp << array; \
+ } else { \
+ CJS_Array array(isolate); \
+ if (!vp.ConvertToArray(array)) \
+ return FALSE; \
+ ConvertArrayToPWLColor(array, var); \
+ } \
+ return TRUE; \
+ }
JS_IMPLEMENT_COLORPROP(transparent, m_crTransparent)
JS_IMPLEMENT_COLORPROP(black, m_crBlack)
@@ -187,65 +169,66 @@ JS_IMPLEMENT_COLORPROP(dkGray, m_crDKGray)
JS_IMPLEMENT_COLORPROP(gray, m_crGray)
JS_IMPLEMENT_COLORPROP(ltGray, m_crLTGray)
-FX_BOOL color::convert(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- v8::Isolate* isolate = GetIsolate(cc);
- int iSize = params.size();
- if (iSize < 2) return FALSE;
- CJS_Array aSource(isolate);
- if (!params[0].ConvertToArray(aSource)) return FALSE;
-
- CPWL_Color crSource;
- ConvertArrayToPWLColor(aSource, crSource);
-
- CFX_ByteString sDestSpace = params[1].ToCFXByteString();
- int nColorType = COLORTYPE_TRANSPARENT;
-
- if (sDestSpace == "T")
- {
- nColorType = COLORTYPE_TRANSPARENT;
- }
- else if (sDestSpace == "G")
- {
- nColorType = COLORTYPE_GRAY;
- }
- else if (sDestSpace == "RGB")
- {
- nColorType = COLORTYPE_RGB;
- }
- else if (sDestSpace == "CMYK")
- {
- nColorType = COLORTYPE_CMYK;
- }
-
- CJS_Array aDest(isolate);
- CPWL_Color crDest = crSource;
- crDest.ConvertColorType(nColorType);
- ConvertPWLColorToArray(crDest, aDest);
- vRet = aDest;
-
- return TRUE;
+FX_BOOL color::convert(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ v8::Isolate* isolate = GetIsolate(cc);
+ int iSize = params.size();
+ if (iSize < 2)
+ return FALSE;
+ CJS_Array aSource(isolate);
+ if (!params[0].ConvertToArray(aSource))
+ return FALSE;
+
+ CPWL_Color crSource;
+ ConvertArrayToPWLColor(aSource, crSource);
+
+ CFX_ByteString sDestSpace = params[1].ToCFXByteString();
+ int nColorType = COLORTYPE_TRANSPARENT;
+
+ if (sDestSpace == "T") {
+ nColorType = COLORTYPE_TRANSPARENT;
+ } else if (sDestSpace == "G") {
+ nColorType = COLORTYPE_GRAY;
+ } else if (sDestSpace == "RGB") {
+ nColorType = COLORTYPE_RGB;
+ } else if (sDestSpace == "CMYK") {
+ nColorType = COLORTYPE_CMYK;
+ }
+
+ CJS_Array aDest(isolate);
+ CPWL_Color crDest = crSource;
+ crDest.ConvertColorType(nColorType);
+ ConvertPWLColorToArray(crDest, aDest);
+ vRet = aDest;
+
+ return TRUE;
}
-FX_BOOL color::equal(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- v8::Isolate* isolate = GetIsolate(cc);
- if (params.size() < 2) return FALSE;
+FX_BOOL color::equal(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ v8::Isolate* isolate = GetIsolate(cc);
+ if (params.size() < 2)
+ return FALSE;
- CJS_Array array1(isolate), array2(isolate);
+ CJS_Array array1(isolate), array2(isolate);
- if (!params[0].ConvertToArray(array1)) return FALSE;
- if (!params[1].ConvertToArray(array2)) return FALSE;
+ if (!params[0].ConvertToArray(array1))
+ return FALSE;
+ if (!params[1].ConvertToArray(array2))
+ return FALSE;
- CPWL_Color color1;
- CPWL_Color color2;
+ CPWL_Color color1;
+ CPWL_Color color2;
- ConvertArrayToPWLColor(array1, color1);
- ConvertArrayToPWLColor(array2, color2);
+ ConvertArrayToPWLColor(array1, color1);
+ ConvertArrayToPWLColor(array2, color2);
- color1.ConvertColorType(color2.nColorType);
+ color1.ConvertColorType(color2.nColorType);
- vRet = color1 == color2;
- return TRUE;
+ vRet = color1 == color2;
+ return TRUE;
}
-
diff --git a/fpdfsdk/src/javascript/console.cpp b/fpdfsdk/src/javascript/console.cpp
index ed9b1fbc56..cc64e1091b 100644
--- a/fpdfsdk/src/javascript/console.cpp
+++ b/fpdfsdk/src/javascript/console.cpp
@@ -22,45 +22,45 @@ BEGIN_JS_STATIC_PROP(CJS_Console)
END_JS_STATIC_PROP()
BEGIN_JS_STATIC_METHOD(CJS_Console)
- JS_STATIC_METHOD_ENTRY(clear)
- JS_STATIC_METHOD_ENTRY(hide)
- JS_STATIC_METHOD_ENTRY(println)
- JS_STATIC_METHOD_ENTRY(show)
+JS_STATIC_METHOD_ENTRY(clear)
+JS_STATIC_METHOD_ENTRY(hide)
+JS_STATIC_METHOD_ENTRY(println)
+JS_STATIC_METHOD_ENTRY(show)
END_JS_STATIC_METHOD()
-IMPLEMENT_JS_CLASS(CJS_Console,console)
+IMPLEMENT_JS_CLASS(CJS_Console, console)
-console::console(CJS_Object* pJSObject): CJS_EmbedObj(pJSObject)
-{
-}
+console::console(CJS_Object* pJSObject) : CJS_EmbedObj(pJSObject) {}
-console::~console()
-{
-}
+console::~console() {}
-FX_BOOL console::clear(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- return TRUE;
+FX_BOOL console::clear(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ return TRUE;
}
-FX_BOOL console::hide(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- return TRUE;
+FX_BOOL console::hide(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ return TRUE;
}
-FX_BOOL console::println(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- if (params.size() < 1)
- {
- return FALSE;
- }
- return TRUE;
+FX_BOOL console::println(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ if (params.size() < 1) {
+ return FALSE;
+ }
+ return TRUE;
}
-FX_BOOL console::show(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- return TRUE;
+FX_BOOL console::show(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ return TRUE;
}
-
-
-
diff --git a/fpdfsdk/src/javascript/event.cpp b/fpdfsdk/src/javascript/event.cpp
index f57b1fb607..4bcdcce3a0 100644
--- a/fpdfsdk/src/javascript/event.cpp
+++ b/fpdfsdk/src/javascript/event.cpp
@@ -21,359 +21,359 @@ BEGIN_JS_STATIC_CONST(CJS_Event)
END_JS_STATIC_CONST()
BEGIN_JS_STATIC_PROP(CJS_Event)
- JS_STATIC_PROP_ENTRY(change)
- JS_STATIC_PROP_ENTRY(changeEx)
- JS_STATIC_PROP_ENTRY(commitKey)
- JS_STATIC_PROP_ENTRY(fieldFull)
- JS_STATIC_PROP_ENTRY(keyDown)
- JS_STATIC_PROP_ENTRY(modifier)
- JS_STATIC_PROP_ENTRY(name)
- JS_STATIC_PROP_ENTRY(rc)
- JS_STATIC_PROP_ENTRY(richChange)
- JS_STATIC_PROP_ENTRY(richChangeEx)
- JS_STATIC_PROP_ENTRY(richValue)
- JS_STATIC_PROP_ENTRY(selEnd)
- JS_STATIC_PROP_ENTRY(selStart)
- JS_STATIC_PROP_ENTRY(shift)
- JS_STATIC_PROP_ENTRY(source)
- JS_STATIC_PROP_ENTRY(target)
- JS_STATIC_PROP_ENTRY(targetName)
- JS_STATIC_PROP_ENTRY(type)
- JS_STATIC_PROP_ENTRY(value)
- JS_STATIC_PROP_ENTRY(willCommit)
+JS_STATIC_PROP_ENTRY(change)
+JS_STATIC_PROP_ENTRY(changeEx)
+JS_STATIC_PROP_ENTRY(commitKey)
+JS_STATIC_PROP_ENTRY(fieldFull)
+JS_STATIC_PROP_ENTRY(keyDown)
+JS_STATIC_PROP_ENTRY(modifier)
+JS_STATIC_PROP_ENTRY(name)
+JS_STATIC_PROP_ENTRY(rc)
+JS_STATIC_PROP_ENTRY(richChange)
+JS_STATIC_PROP_ENTRY(richChangeEx)
+JS_STATIC_PROP_ENTRY(richValue)
+JS_STATIC_PROP_ENTRY(selEnd)
+JS_STATIC_PROP_ENTRY(selStart)
+JS_STATIC_PROP_ENTRY(shift)
+JS_STATIC_PROP_ENTRY(source)
+JS_STATIC_PROP_ENTRY(target)
+JS_STATIC_PROP_ENTRY(targetName)
+JS_STATIC_PROP_ENTRY(type)
+JS_STATIC_PROP_ENTRY(value)
+JS_STATIC_PROP_ENTRY(willCommit)
END_JS_STATIC_PROP()
BEGIN_JS_STATIC_METHOD(CJS_Event)
END_JS_STATIC_METHOD()
-IMPLEMENT_JS_CLASS(CJS_Event,event)
+IMPLEMENT_JS_CLASS(CJS_Event, event)
-event::event(CJS_Object * pJsObject) : CJS_EmbedObj(pJsObject)
-{
-}
+event::event(CJS_Object* pJsObject) : CJS_EmbedObj(pJsObject) {}
-event::~event(void)
-{
-}
+event::~event(void) {}
-FX_BOOL event::change(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- CJS_Context* pContext = (CJS_Context*)cc;
- ASSERT(pContext != NULL);
- CJS_EventHandler* pEvent = pContext->GetEventHandler();
- ASSERT(pEvent != NULL);
-
- CFX_WideString &wChange = pEvent->Change();
- if (vp.IsSetting())
- {
- if (vp.GetType() == VT_string)
- vp >> wChange;
- }
- else
- {
- vp << wChange;
- }
- return TRUE;
+FX_BOOL event::change(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ CJS_Context* pContext = (CJS_Context*)cc;
+ ASSERT(pContext != NULL);
+ CJS_EventHandler* pEvent = pContext->GetEventHandler();
+ ASSERT(pEvent != NULL);
+
+ CFX_WideString& wChange = pEvent->Change();
+ if (vp.IsSetting()) {
+ if (vp.GetType() == VT_string)
+ vp >> wChange;
+ } else {
+ vp << wChange;
+ }
+ return TRUE;
}
-FX_BOOL event::changeEx(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- if (!vp.IsGetting())return FALSE;
+FX_BOOL event::changeEx(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ if (!vp.IsGetting())
+ return FALSE;
- CJS_Context* pContext = (CJS_Context*)cc;
- ASSERT(pContext != NULL);
- CJS_EventHandler* pEvent = pContext->GetEventHandler();
- ASSERT(pEvent != NULL);
+ CJS_Context* pContext = (CJS_Context*)cc;
+ ASSERT(pContext != NULL);
+ CJS_EventHandler* pEvent = pContext->GetEventHandler();
+ ASSERT(pEvent != NULL);
- vp << pEvent->ChangeEx();
- return TRUE;
+ vp << pEvent->ChangeEx();
+ return TRUE;
}
-FX_BOOL event::commitKey(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- if (!vp.IsGetting())return FALSE;
+FX_BOOL event::commitKey(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ if (!vp.IsGetting())
+ return FALSE;
- CJS_Context* pContext = (CJS_Context*)cc;
- ASSERT(pContext != NULL);
- CJS_EventHandler* pEvent = pContext->GetEventHandler();
- ASSERT(pEvent != NULL);
+ CJS_Context* pContext = (CJS_Context*)cc;
+ ASSERT(pContext != NULL);
+ CJS_EventHandler* pEvent = pContext->GetEventHandler();
+ ASSERT(pEvent != NULL);
- vp << pEvent->CommitKey();
- return TRUE;
+ vp << pEvent->CommitKey();
+ return TRUE;
}
-FX_BOOL event::fieldFull(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- CJS_Context* pContext = (CJS_Context*)cc;
- ASSERT(pContext != NULL);
- CJS_EventHandler* pEvent = pContext->GetEventHandler();
- ASSERT(pEvent != NULL);
-
- if (!vp.IsGetting() && wcscmp((const wchar_t*)pEvent->Name(),L"Keystroke") != 0)
- return FALSE;
-
- if (pEvent->FieldFull())
- vp << TRUE;
- else
- vp << FALSE;
- return TRUE;
+FX_BOOL event::fieldFull(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ CJS_Context* pContext = (CJS_Context*)cc;
+ ASSERT(pContext != NULL);
+ CJS_EventHandler* pEvent = pContext->GetEventHandler();
+ ASSERT(pEvent != NULL);
+
+ if (!vp.IsGetting() &&
+ wcscmp((const wchar_t*)pEvent->Name(), L"Keystroke") != 0)
+ return FALSE;
+
+ if (pEvent->FieldFull())
+ vp << TRUE;
+ else
+ vp << FALSE;
+ return TRUE;
}
-FX_BOOL event::keyDown(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- if (!vp.IsGetting())return FALSE;
-
- CJS_Context* pContext = (CJS_Context*)cc;
- ASSERT(pContext != NULL);
- CJS_EventHandler* pEvent = pContext->GetEventHandler();
- ASSERT(pEvent != NULL);
-
- if (pEvent->KeyDown())
- vp << TRUE;
- else
- vp << FALSE;
- return TRUE;
+FX_BOOL event::keyDown(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ if (!vp.IsGetting())
+ return FALSE;
+
+ CJS_Context* pContext = (CJS_Context*)cc;
+ ASSERT(pContext != NULL);
+ CJS_EventHandler* pEvent = pContext->GetEventHandler();
+ ASSERT(pEvent != NULL);
+
+ if (pEvent->KeyDown())
+ vp << TRUE;
+ else
+ vp << FALSE;
+ return TRUE;
}
-FX_BOOL event::modifier(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- if (!vp.IsGetting())return FALSE;
-
- CJS_Context* pContext = (CJS_Context*)cc;
- ASSERT(pContext != NULL);
- CJS_EventHandler* pEvent = pContext->GetEventHandler();
- ASSERT(pEvent != NULL);
-
- if (pEvent->Modifier())
- vp << TRUE;
- else
- vp << FALSE;
- return TRUE;
+FX_BOOL event::modifier(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ if (!vp.IsGetting())
+ return FALSE;
+
+ CJS_Context* pContext = (CJS_Context*)cc;
+ ASSERT(pContext != NULL);
+ CJS_EventHandler* pEvent = pContext->GetEventHandler();
+ ASSERT(pEvent != NULL);
+
+ if (pEvent->Modifier())
+ vp << TRUE;
+ else
+ vp << FALSE;
+ return TRUE;
}
-FX_BOOL event::name(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- if (!vp.IsGetting())return FALSE;
+FX_BOOL event::name(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ if (!vp.IsGetting())
+ return FALSE;
- CJS_Context* pContext = (CJS_Context*)cc;
- ASSERT(pContext != NULL);
- CJS_EventHandler* pEvent = pContext->GetEventHandler();
- ASSERT(pEvent != NULL);
+ CJS_Context* pContext = (CJS_Context*)cc;
+ ASSERT(pContext != NULL);
+ CJS_EventHandler* pEvent = pContext->GetEventHandler();
+ ASSERT(pEvent != NULL);
- vp << pEvent->Name();
- return TRUE;
+ vp << pEvent->Name();
+ return TRUE;
}
-FX_BOOL event::rc(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- CJS_Context* pContext = (CJS_Context*)cc;
- ASSERT(pContext != NULL);
- CJS_EventHandler* pEvent = pContext->GetEventHandler();
- ASSERT(pEvent != NULL);
-
- FX_BOOL &bRc = pEvent->Rc();
- if (vp.IsSetting())
- {
- vp>>bRc;
- }
- else
- {
- vp<<bRc;
- }
- return TRUE;
+FX_BOOL event::rc(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ CJS_Context* pContext = (CJS_Context*)cc;
+ ASSERT(pContext != NULL);
+ CJS_EventHandler* pEvent = pContext->GetEventHandler();
+ ASSERT(pEvent != NULL);
+
+ FX_BOOL& bRc = pEvent->Rc();
+ if (vp.IsSetting()) {
+ vp >> bRc;
+ } else {
+ vp << bRc;
+ }
+ return TRUE;
}
-FX_BOOL event::richChange(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- return TRUE;
- if (vp.IsSetting())
- {
- }
- else
- {
- ;
- }
- return TRUE;
+FX_BOOL event::richChange(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ return TRUE;
+ if (vp.IsSetting()) {
+ } else {
+ ;
+ }
+ return TRUE;
}
-FX_BOOL event::richChangeEx(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- return TRUE;
- if (vp.IsSetting())
- {
- }
- else
- {
- ;
- }
- return TRUE;
+FX_BOOL event::richChangeEx(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ return TRUE;
+ if (vp.IsSetting()) {
+ } else {
+ ;
+ }
+ return TRUE;
}
-
-FX_BOOL event::richValue(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- return TRUE;
- if (vp.IsSetting())
- {
- }
- else
- {
- ;
- }
- return TRUE;
+FX_BOOL event::richValue(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ return TRUE;
+ if (vp.IsSetting()) {
+ } else {
+ ;
+ }
+ return TRUE;
}
-FX_BOOL event::selEnd(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- CJS_Context* pContext = (CJS_Context*)cc;
- ASSERT(pContext != NULL);
- CJS_EventHandler* pEvent = pContext->GetEventHandler();
- ASSERT(pEvent != NULL);
-
- if (wcscmp((const wchar_t*)pEvent->Name(),L"Keystroke") != 0)
- {
- return TRUE;
- }
-
- int &iSelEnd = pEvent->SelEnd();
- if (vp.IsSetting())
- {
- vp >> iSelEnd;
- }
- else
- {
- vp << iSelEnd;
- }
- return TRUE;
+FX_BOOL event::selEnd(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ CJS_Context* pContext = (CJS_Context*)cc;
+ ASSERT(pContext != NULL);
+ CJS_EventHandler* pEvent = pContext->GetEventHandler();
+ ASSERT(pEvent != NULL);
+
+ if (wcscmp((const wchar_t*)pEvent->Name(), L"Keystroke") != 0) {
+ return TRUE;
+ }
+
+ int& iSelEnd = pEvent->SelEnd();
+ if (vp.IsSetting()) {
+ vp >> iSelEnd;
+ } else {
+ vp << iSelEnd;
+ }
+ return TRUE;
}
-FX_BOOL event::selStart(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- CJS_Context* pContext = (CJS_Context*)cc;
- ASSERT(pContext != NULL);
- CJS_EventHandler* pEvent = pContext->GetEventHandler();
- ASSERT(pEvent != NULL);
-
- if (wcscmp((const wchar_t*)pEvent->Name(),L"Keystroke") != 0)
- {
- return TRUE;
- }
- int &iSelStart = pEvent->SelStart();
- if (vp.IsSetting())
- {
- vp >> iSelStart;
- }
- else
- {
- vp << iSelStart;
- }
- return TRUE;
+FX_BOOL event::selStart(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ CJS_Context* pContext = (CJS_Context*)cc;
+ ASSERT(pContext != NULL);
+ CJS_EventHandler* pEvent = pContext->GetEventHandler();
+ ASSERT(pEvent != NULL);
+
+ if (wcscmp((const wchar_t*)pEvent->Name(), L"Keystroke") != 0) {
+ return TRUE;
+ }
+ int& iSelStart = pEvent->SelStart();
+ if (vp.IsSetting()) {
+ vp >> iSelStart;
+ } else {
+ vp << iSelStart;
+ }
+ return TRUE;
}
-FX_BOOL event::shift(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- if (!vp.IsGetting())return FALSE;
-
- CJS_Context* pContext = (CJS_Context*)cc;
- ASSERT(pContext != NULL);
- CJS_EventHandler* pEvent = pContext->GetEventHandler();
- ASSERT(pEvent != NULL);
-
- if (pEvent->Shift())
- vp << TRUE;
- else
- vp << FALSE;
- return TRUE;
+FX_BOOL event::shift(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ if (!vp.IsGetting())
+ return FALSE;
+
+ CJS_Context* pContext = (CJS_Context*)cc;
+ ASSERT(pContext != NULL);
+ CJS_EventHandler* pEvent = pContext->GetEventHandler();
+ ASSERT(pEvent != NULL);
+
+ if (pEvent->Shift())
+ vp << TRUE;
+ else
+ vp << FALSE;
+ return TRUE;
}
-FX_BOOL event::source(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- if (!vp.IsGetting())return FALSE;
+FX_BOOL event::source(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ if (!vp.IsGetting())
+ return FALSE;
- CJS_Context* pContext = (CJS_Context*)cc;
- ASSERT(pContext != NULL);
- CJS_EventHandler* pEvent = pContext->GetEventHandler();
- ASSERT(pEvent != NULL);
+ CJS_Context* pContext = (CJS_Context*)cc;
+ ASSERT(pContext != NULL);
+ CJS_EventHandler* pEvent = pContext->GetEventHandler();
+ ASSERT(pEvent != NULL);
- vp << pEvent->Source()->GetJSObject();
- return TRUE;
+ vp << pEvent->Source()->GetJSObject();
+ return TRUE;
}
-FX_BOOL event::target(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- if (!vp.IsGetting())return FALSE;
+FX_BOOL event::target(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ if (!vp.IsGetting())
+ return FALSE;
- CJS_Context* pContext = (CJS_Context*)cc;
- ASSERT(pContext != NULL);
- CJS_EventHandler* pEvent = pContext->GetEventHandler();
- ASSERT(pEvent != NULL);
+ CJS_Context* pContext = (CJS_Context*)cc;
+ ASSERT(pContext != NULL);
+ CJS_EventHandler* pEvent = pContext->GetEventHandler();
+ ASSERT(pEvent != NULL);
- vp<<pEvent->Target_Field()->GetJSObject();
- return TRUE;
+ vp << pEvent->Target_Field()->GetJSObject();
+ return TRUE;
}
-FX_BOOL event::targetName(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- if (!vp.IsGetting())return FALSE;
+FX_BOOL event::targetName(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ if (!vp.IsGetting())
+ return FALSE;
- CJS_Context* pContext = (CJS_Context*)cc;
- ASSERT(pContext != NULL);
- CJS_EventHandler* pEvent = pContext->GetEventHandler();
- ASSERT(pEvent != NULL);
+ CJS_Context* pContext = (CJS_Context*)cc;
+ ASSERT(pContext != NULL);
+ CJS_EventHandler* pEvent = pContext->GetEventHandler();
+ ASSERT(pEvent != NULL);
- vp << pEvent->TargetName();
- return TRUE;
+ vp << pEvent->TargetName();
+ return TRUE;
}
-FX_BOOL event::type(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- if (!vp.IsGetting())return FALSE;
+FX_BOOL event::type(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ if (!vp.IsGetting())
+ return FALSE;
- CJS_Context* pContext = (CJS_Context*)cc;
- ASSERT(pContext != NULL);
- CJS_EventHandler* pEvent = pContext->GetEventHandler();
- ASSERT(pEvent != NULL);
+ CJS_Context* pContext = (CJS_Context*)cc;
+ ASSERT(pContext != NULL);
+ CJS_EventHandler* pEvent = pContext->GetEventHandler();
+ ASSERT(pEvent != NULL);
- vp << pEvent->Type();
- return TRUE;
+ vp << pEvent->Type();
+ return TRUE;
}
-FX_BOOL event::value(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- CJS_Context* pContext = (CJS_Context*)cc;
- ASSERT(pContext != NULL);
- CJS_EventHandler* pEvent = pContext->GetEventHandler();
- ASSERT(pEvent != NULL);
-
- if (wcscmp((const wchar_t*)pEvent->Type(),L"Field") != 0)
- return FALSE;
- if(!pEvent->m_pValue)
- return FALSE;
- CFX_WideString & val = pEvent->Value();
- if (vp.IsSetting())
- {
- vp >> val;
- }
- else
- {
- vp << val;
- }
- return TRUE;
+FX_BOOL event::value(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ CJS_Context* pContext = (CJS_Context*)cc;
+ ASSERT(pContext != NULL);
+ CJS_EventHandler* pEvent = pContext->GetEventHandler();
+ ASSERT(pEvent != NULL);
+
+ if (wcscmp((const wchar_t*)pEvent->Type(), L"Field") != 0)
+ return FALSE;
+ if (!pEvent->m_pValue)
+ return FALSE;
+ CFX_WideString& val = pEvent->Value();
+ if (vp.IsSetting()) {
+ vp >> val;
+ } else {
+ vp << val;
+ }
+ return TRUE;
}
-FX_BOOL event::willCommit(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)
-{
- if (!vp.IsGetting())return FALSE;
-
- CJS_Context* pContext = (CJS_Context*)cc;
- ASSERT(pContext != NULL);
- CJS_EventHandler* pEvent = pContext->GetEventHandler();
- ASSERT(pEvent != NULL);
-
- if (pEvent->WillCommit())
- vp << TRUE;
- else
- vp << FALSE;
- return TRUE;
+FX_BOOL event::willCommit(IFXJS_Context* cc,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ if (!vp.IsGetting())
+ return FALSE;
+
+ CJS_Context* pContext = (CJS_Context*)cc;
+ ASSERT(pContext != NULL);
+ CJS_EventHandler* pEvent = pContext->GetEventHandler();
+ ASSERT(pEvent != NULL);
+
+ if (pEvent->WillCommit())
+ vp << TRUE;
+ else
+ vp << FALSE;
+ return TRUE;
}
-
diff --git a/fpdfsdk/src/javascript/global.cpp b/fpdfsdk/src/javascript/global.cpp
index 6965c8c884..ee0591b950 100644
--- a/fpdfsdk/src/javascript/global.cpp
+++ b/fpdfsdk/src/javascript/global.cpp
@@ -39,51 +39,46 @@ struct CHash<ACC, N, Ns...> {
};
extern const unsigned int JSCONST_nStringHash =
- CHash<'s','t','r','i','n','g'>::value;
+ CHash<'s', 't', 'r', 'i', 'n', 'g'>::value;
extern const unsigned int JSCONST_nNumberHash =
- CHash<'n','u','m','b','e','r'>::value;
+ CHash<'n', 'u', 'm', 'b', 'e', 'r'>::value;
extern const unsigned int JSCONST_nBoolHash =
- CHash<'b','o','o','l','e','a','n'>::value;
-extern const unsigned int JSCONST_nDateHash =
- CHash<'d','a','t','e'>::value;
+ CHash<'b', 'o', 'o', 'l', 'e', 'a', 'n'>::value;
+extern const unsigned int JSCONST_nDateHash = CHash<'d', 'a', 't', 'e'>::value;
extern const unsigned int JSCONST_nObjectHash =
- CHash<'o','b','j','e','c','t'>::value;
+ CHash<'o', 'b', 'j', 'e', 'c', 't'>::value;
extern const unsigned int JSCONST_nFXobjHash =
- CHash<'f','x','o','b','j'>::value;
-extern const unsigned int JSCONST_nNullHash =
- CHash<'n','u','l','l'>::value;
+ CHash<'f', 'x', 'o', 'b', 'j'>::value;
+extern const unsigned int JSCONST_nNullHash = CHash<'n', 'u', 'l', 'l'>::value;
extern const unsigned int JSCONST_nUndefHash =
- CHash<'u','n','d','e','f','i','n','e','d'>::value;
+ CHash<'u', 'n', 'd', 'e', 'f', 'i', 'n', 'e', 'd'>::value;
#ifdef _DEBUG
-class HashVerify
-{
-public:
+class HashVerify {
+ public:
HashVerify();
} g_hashVerify;
-HashVerify::HashVerify()
-{
+HashVerify::HashVerify() {
ASSERT(JSCONST_nStringHash ==
- JS_CalcHash(VALUE_NAME_STRING,wcslen(VALUE_NAME_STRING)));
+ JS_CalcHash(VALUE_NAME_STRING, wcslen(VALUE_NAME_STRING)));
ASSERT(JSCONST_nNumberHash ==
- JS_CalcHash(VALUE_NAME_NUMBER,wcslen(VALUE_NAME_NUMBER)));
+ JS_CalcHash(VALUE_NAME_NUMBER, wcslen(VALUE_NAME_NUMBER)));
ASSERT(JSCONST_nBoolHash ==
- JS_CalcHash(VALUE_NAME_BOOLEAN,wcslen(VALUE_NAME_BOOLEAN)));
+ JS_CalcHash(VALUE_NAME_BOOLEAN, wcslen(VALUE_NAME_BOOLEAN)));
ASSERT(JSCONST_nDateHash ==
- JS_CalcHash(VALUE_NAME_DATE,wcslen(VALUE_NAME_DATE)));
+ JS_CalcHash(VALUE_NAME_DATE, wcslen(VALUE_NAME_DATE)));
ASSERT(JSCONST_nObjectHash ==
- JS_CalcHash(VALUE_NAME_OBJECT,wcslen(VALUE_NAME_OBJECT)));
+ JS_CalcHash(VALUE_NAME_OBJECT, wcslen(VALUE_NAME_OBJECT)));
ASSERT(JSCONST_nFXobjHash ==
- JS_CalcHash(VALUE_NAME_FXOBJ,wcslen(VALUE_NAME_FXOBJ)));
+ JS_CalcHash(VALUE_NAME_FXOBJ, wcslen(VALUE_NAME_FXOBJ)));
ASSERT(JSCONST_nNullHash ==
- JS_CalcHash(VALUE_NAME_NULL,wcslen(VALUE_NAME_NULL)));
+ JS_CalcHash(VALUE_NAME_NULL, wcslen(VALUE_NAME_NULL)));
ASSERT(JSCONST_nUndefHash ==
- JS_CalcHash(VALUE_NAME_UNDEFINED,wcslen(VALUE_NAME_UNDEFINED)));
+ JS_CalcHash(VALUE_NAME_UNDEFINED, wcslen(VALUE_NAME_UNDEFINED)));
}
#endif
-
BEGIN_JS_STATIC_CONST(CJS_Global)
END_JS_STATIC_CONST()
@@ -91,500 +86,464 @@ BEGIN_JS_STATIC_PROP(CJS_Global)
END_JS_STATIC_PROP()
BEGIN_JS_STATIC_METHOD(CJS_Global)
- JS_STATIC_METHOD_ENTRY(setPersistent)
+JS_STATIC_METHOD_ENTRY(setPersistent)
END_JS_STATIC_METHOD()
IMPLEMENT_SPECIAL_JS_CLASS(CJS_Global, global_alternate, global);
-FX_BOOL CJS_Global::InitInstance(IFXJS_Context* cc)
-{
- CJS_Context* pContext = (CJS_Context*)cc;
- ASSERT(pContext != NULL);
+FX_BOOL CJS_Global::InitInstance(IFXJS_Context* cc) {
+ CJS_Context* pContext = (CJS_Context*)cc;
+ ASSERT(pContext != NULL);
- global_alternate* pGlobal = (global_alternate*)GetEmbedObject();
- ASSERT(pGlobal != NULL);
+ global_alternate* pGlobal = (global_alternate*)GetEmbedObject();
+ ASSERT(pGlobal != NULL);
- pGlobal->Initial(pContext->GetReaderApp());
+ pGlobal->Initial(pContext->GetReaderApp());
- return TRUE;
+ return TRUE;
};
global_alternate::global_alternate(CJS_Object* pJSObject)
- : CJS_EmbedObj(pJSObject),
- m_pApp(NULL)
-{
-}
+ : CJS_EmbedObj(pJSObject), m_pApp(NULL) {}
-global_alternate::~global_alternate(void)
-{
- DestroyGlobalPersisitentVariables();
- m_pApp->GetRuntimeFactory()->ReleaseGlobalData();
+global_alternate::~global_alternate(void) {
+ DestroyGlobalPersisitentVariables();
+ m_pApp->GetRuntimeFactory()->ReleaseGlobalData();
}
-void global_alternate::Initial(CPDFDoc_Environment* pApp)
-{
- m_pApp = pApp;
- m_pGlobalData = pApp->GetRuntimeFactory()->NewGlobalData(pApp);
- UpdateGlobalPersistentVariables();
+void global_alternate::Initial(CPDFDoc_Environment* pApp) {
+ m_pApp = pApp;
+ m_pGlobalData = pApp->GetRuntimeFactory()->NewGlobalData(pApp);
+ UpdateGlobalPersistentVariables();
}
-FX_BOOL global_alternate::QueryProperty(const FX_WCHAR* propname)
-{
- return CFX_WideString(propname) != L"setPersistent";
+FX_BOOL global_alternate::QueryProperty(const FX_WCHAR* propname) {
+ return CFX_WideString(propname) != L"setPersistent";
}
-FX_BOOL global_alternate::DelProperty(IFXJS_Context* cc, const FX_WCHAR* propname, CFX_WideString& sError)
-{
- js_global_data* pData = NULL;
- CFX_ByteString sPropName = CFX_ByteString::FromUnicode(propname);
+FX_BOOL global_alternate::DelProperty(IFXJS_Context* cc,
+ const FX_WCHAR* propname,
+ CFX_WideString& sError) {
+ js_global_data* pData = NULL;
+ CFX_ByteString sPropName = CFX_ByteString::FromUnicode(propname);
- if (m_mapGlobal.Lookup(sPropName, (void*&)pData))
- {
- pData->bDeleted = TRUE;
- return TRUE;
- }
+ if (m_mapGlobal.Lookup(sPropName, (void*&)pData)) {
+ pData->bDeleted = TRUE;
+ return TRUE;
+ }
- return FALSE;
+ return FALSE;
}
-FX_BOOL global_alternate::DoProperty(IFXJS_Context* cc, const FX_WCHAR* propname, CJS_PropValue& vp, CFX_WideString& sError)
-{
- if (vp.IsSetting())
- {
- CFX_ByteString sPropName = CFX_ByteString::FromUnicode(propname);
- switch (vp.GetType())
- {
- case VT_number:
- {
- double dData;
- vp >> dData;
- return SetGlobalVariables(sPropName, JS_GLOBALDATA_TYPE_NUMBER, dData, false, "", v8::Local<v8::Object>(), FALSE);
- }
- case VT_boolean:
- {
- bool bData;
- vp >> bData;
- return SetGlobalVariables(sPropName, JS_GLOBALDATA_TYPE_BOOLEAN, 0, bData, "", v8::Local<v8::Object>(), FALSE);
- }
- case VT_string:
- {
- CFX_ByteString sData;
- vp >> sData;
- return SetGlobalVariables(sPropName, JS_GLOBALDATA_TYPE_STRING, 0, false, sData, v8::Local<v8::Object>(), FALSE);
- }
- case VT_object:
- {
- JSObject pData;
- vp >> pData;
- return SetGlobalVariables(sPropName, JS_GLOBALDATA_TYPE_OBJECT, 0, false, "", pData, FALSE);
- }
- case VT_null:
- {
- return SetGlobalVariables(sPropName, JS_GLOBALDATA_TYPE_NULL, 0, false, "", v8::Local<v8::Object>(), FALSE);
- }
- case VT_undefined:
- {
- DelProperty(cc, propname, sError);
- return TRUE;
- }
- default:
- break;
- }
+FX_BOOL global_alternate::DoProperty(IFXJS_Context* cc,
+ const FX_WCHAR* propname,
+ CJS_PropValue& vp,
+ CFX_WideString& sError) {
+ if (vp.IsSetting()) {
+ CFX_ByteString sPropName = CFX_ByteString::FromUnicode(propname);
+ switch (vp.GetType()) {
+ case VT_number: {
+ double dData;
+ vp >> dData;
+ return SetGlobalVariables(sPropName, JS_GLOBALDATA_TYPE_NUMBER, dData,
+ false, "", v8::Local<v8::Object>(), FALSE);
+ }
+ case VT_boolean: {
+ bool bData;
+ vp >> bData;
+ return SetGlobalVariables(sPropName, JS_GLOBALDATA_TYPE_BOOLEAN, 0,
+ bData, "", v8::Local<v8::Object>(), FALSE);
+ }
+ case VT_string: {
+ CFX_ByteString sData;
+ vp >> sData;
+ return SetGlobalVariables(sPropName, JS_GLOBALDATA_TYPE_STRING, 0,
+ false, sData, v8::Local<v8::Object>(), FALSE);
+ }
+ case VT_object: {
+ JSObject pData;
+ vp >> pData;
+ return SetGlobalVariables(sPropName, JS_GLOBALDATA_TYPE_OBJECT, 0,
+ false, "", pData, FALSE);
+ }
+ case VT_null: {
+ return SetGlobalVariables(sPropName, JS_GLOBALDATA_TYPE_NULL, 0, false,
+ "", v8::Local<v8::Object>(), FALSE);
+ }
+ case VT_undefined: {
+ DelProperty(cc, propname, sError);
+ return TRUE;
+ }
+ default:
+ break;
}
- else
- {
- void* pVoid = nullptr;
- if (!m_mapGlobal.Lookup(CFX_ByteString::FromUnicode(propname), pVoid))
- {
- vp.SetNull();
- return TRUE;
- }
- if (!pVoid)
- {
- vp.SetNull();
- return TRUE;
- }
- js_global_data* pData = (js_global_data*)pVoid;
- if (pData->bDeleted)
- return TRUE;
-
- switch (pData->nType)
- {
- case JS_GLOBALDATA_TYPE_NUMBER:
- vp << pData->dData;
- return TRUE;
- case JS_GLOBALDATA_TYPE_BOOLEAN:
- vp << pData->bData;
- return TRUE;
- case JS_GLOBALDATA_TYPE_STRING:
- vp << pData->sData;
- return TRUE;
- case JS_GLOBALDATA_TYPE_OBJECT:
- {
- v8::Local<v8::Object> obj = v8::Local<v8::Object>::New(vp.GetIsolate(),pData->pData);
- vp << obj;
- return TRUE;
- }
- case JS_GLOBALDATA_TYPE_NULL:
- vp.SetNull();
- return TRUE;
- default:
- break;
- }
+ } else {
+ void* pVoid = nullptr;
+ if (!m_mapGlobal.Lookup(CFX_ByteString::FromUnicode(propname), pVoid)) {
+ vp.SetNull();
+ return TRUE;
}
- return FALSE;
-}
-
-FX_BOOL global_alternate::setPersistent(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- CJS_Context* pContext = static_cast<CJS_Context*>(cc);
- if (params.size() != 2)
- {
- sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
- return FALSE;
+ if (!pVoid) {
+ vp.SetNull();
+ return TRUE;
}
+ js_global_data* pData = (js_global_data*)pVoid;
+ if (pData->bDeleted)
+ return TRUE;
- CFX_ByteString sName = params[0].ToCFXByteString();
-
- js_global_data* pData = NULL;
- if (m_mapGlobal.Lookup(sName, (void*&)pData))
- {
- if (pData && !pData->bDeleted)
- {
- pData->bPersistent = params[1].ToBool();
- return TRUE;
- }
+ switch (pData->nType) {
+ case JS_GLOBALDATA_TYPE_NUMBER:
+ vp << pData->dData;
+ return TRUE;
+ case JS_GLOBALDATA_TYPE_BOOLEAN:
+ vp << pData->bData;
+ return TRUE;
+ case JS_GLOBALDATA_TYPE_STRING:
+ vp << pData->sData;
+ return TRUE;
+ case JS_GLOBALDATA_TYPE_OBJECT: {
+ v8::Local<v8::Object> obj =
+ v8::Local<v8::Object>::New(vp.GetIsolate(), pData->pData);
+ vp << obj;
+ return TRUE;
+ }
+ case JS_GLOBALDATA_TYPE_NULL:
+ vp.SetNull();
+ return TRUE;
+ default:
+ break;
}
-
- sError = JSGetStringFromID(pContext, IDS_STRING_JSNOGLOBAL);
- return FALSE;
+ }
+ return FALSE;
}
-void global_alternate::UpdateGlobalPersistentVariables()
-{
- ASSERT(m_pGlobalData != NULL);
-
- for (int i=0,sz=m_pGlobalData->GetSize(); i<sz; i++)
- {
- CJS_GlobalData_Element* pData = m_pGlobalData->GetAt(i);
- ASSERT(pData != NULL);
-
- switch (pData->data.nType)
- {
- case JS_GLOBALDATA_TYPE_NUMBER:
- SetGlobalVariables(pData->data.sKey, JS_GLOBALDATA_TYPE_NUMBER, pData->data.dData, false, "", v8::Local<v8::Object>(), pData->bPersistent == 1);
- JS_PutObjectNumber(NULL,(JSFXObject)(*m_pJSObject),
- pData->data.sKey.UTF8Decode().c_str(), pData->data.dData);
- break;
- case JS_GLOBALDATA_TYPE_BOOLEAN:
- SetGlobalVariables(pData->data.sKey, JS_GLOBALDATA_TYPE_BOOLEAN, 0, (bool)(pData->data.bData == 1), "", v8::Local<v8::Object>(), pData->bPersistent == 1);
- JS_PutObjectBoolean(NULL,(JSFXObject)(*m_pJSObject),
- pData->data.sKey.UTF8Decode().c_str(), (bool)(pData->data.bData == 1));
- break;
- case JS_GLOBALDATA_TYPE_STRING:
- SetGlobalVariables(pData->data.sKey, JS_GLOBALDATA_TYPE_STRING, 0, false, pData->data.sData, v8::Local<v8::Object>(), pData->bPersistent == 1);
- JS_PutObjectString(NULL, (JSFXObject)(*m_pJSObject),
- pData->data.sKey.UTF8Decode().c_str(),
- pData->data.sData.UTF8Decode().c_str());
- break;
- case JS_GLOBALDATA_TYPE_OBJECT:
- {
- IJS_Runtime* pRuntime = JS_GetRuntime((JSFXObject)(*m_pJSObject));
- v8::Local<v8::Object> pObj = JS_NewFxDynamicObj(pRuntime, NULL, -1);
+FX_BOOL global_alternate::setPersistent(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ CJS_Context* pContext = static_cast<CJS_Context*>(cc);
+ if (params.size() != 2) {
+ sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
+ return FALSE;
+ }
- PutObjectProperty(pObj, &pData->data);
+ CFX_ByteString sName = params[0].ToCFXByteString();
- SetGlobalVariables(pData->data.sKey, JS_GLOBALDATA_TYPE_OBJECT, 0, false, "",
- (JSObject)pObj, pData->bPersistent == 1);
- JS_PutObjectObject(NULL,(JSFXObject)(*m_pJSObject),
- pData->data.sKey.UTF8Decode().c_str(), (JSObject)pObj);
- }
- break;
- case JS_GLOBALDATA_TYPE_NULL:
- SetGlobalVariables(pData->data.sKey, JS_GLOBALDATA_TYPE_NULL, 0, false, "", v8::Local<v8::Object>(), pData->bPersistent == 1);
- JS_PutObjectNull(NULL,(JSFXObject)(*m_pJSObject),
- pData->data.sKey.UTF8Decode().c_str());
- break;
- }
+ js_global_data* pData = NULL;
+ if (m_mapGlobal.Lookup(sName, (void*&)pData)) {
+ if (pData && !pData->bDeleted) {
+ pData->bPersistent = params[1].ToBool();
+ return TRUE;
}
-}
+ }
-void global_alternate::CommitGlobalPersisitentVariables()
-{
- ASSERT(m_pGlobalData != NULL);
-
- FX_POSITION pos = m_mapGlobal.GetStartPosition();
- while (pos)
- {
- CFX_ByteString name;
- js_global_data* pData = NULL;
- m_mapGlobal.GetNextAssoc(pos, name, (void*&)pData);
-
- if (pData)
- {
- if (pData->bDeleted)
- {
- m_pGlobalData->DeleteGlobalVariable(name);
- }
- else
- {
- switch (pData->nType)
- {
- case JS_GLOBALDATA_TYPE_NUMBER:
- m_pGlobalData->SetGlobalVariableNumber(name, pData->dData);
- m_pGlobalData->SetGlobalVariablePersistent(name, pData->bPersistent);
- break;
- case JS_GLOBALDATA_TYPE_BOOLEAN:
- m_pGlobalData->SetGlobalVariableBoolean(name, pData->bData);
- m_pGlobalData->SetGlobalVariablePersistent(name, pData->bPersistent);
- break;
- case JS_GLOBALDATA_TYPE_STRING:
- m_pGlobalData->SetGlobalVariableString(name, pData->sData);
- m_pGlobalData->SetGlobalVariablePersistent(name, pData->bPersistent);
- break;
- case JS_GLOBALDATA_TYPE_OBJECT:
- //if (pData->pData)
- {
- CJS_GlobalVariableArray array;
- v8::Local<v8::Object> obj = v8::Local<v8::Object>::New(GetJSObject()->GetIsolate(),pData->pData);
- ObjectToArray(obj, array);
- m_pGlobalData->SetGlobalVariableObject(name, array);
- m_pGlobalData->SetGlobalVariablePersistent(name, pData->bPersistent);
- }
- break;
- case JS_GLOBALDATA_TYPE_NULL:
- m_pGlobalData->SetGlobalVariableNull(name);
- m_pGlobalData->SetGlobalVariablePersistent(name, pData->bPersistent);
- break;
- }
- }
- }
- }
+ sError = JSGetStringFromID(pContext, IDS_STRING_JSNOGLOBAL);
+ return FALSE;
}
-void global_alternate::ObjectToArray(v8::Local<v8::Object> pObj, CJS_GlobalVariableArray& array)
-{
- v8::Local<v8::Context> context = pObj->CreationContext();
- v8::Isolate* isolate = context->GetIsolate();
- v8::Local<v8::Array> pKeyList = JS_GetObjectElementNames(isolate, pObj);
- int nObjElements = pKeyList->Length();
+void global_alternate::UpdateGlobalPersistentVariables() {
+ ASSERT(m_pGlobalData != NULL);
- for (int i=0; i<nObjElements; i++)
- {
-
- CFX_WideString ws = JS_ToString(isolate, JS_GetArrayElement(isolate, pKeyList, i));
- CFX_ByteString sKey = ws.UTF8Encode();
+ for (int i = 0, sz = m_pGlobalData->GetSize(); i < sz; i++) {
+ CJS_GlobalData_Element* pData = m_pGlobalData->GetAt(i);
+ ASSERT(pData != NULL);
- v8::Local<v8::Value> v = JS_GetObjectElement(isolate, pObj, ws.c_str());
- FXJSVALUETYPE vt = GET_VALUE_TYPE(v);
- switch (vt)
- {
- case VT_number:
- {
- CJS_KeyValue* pObjElement = new CJS_KeyValue;
- pObjElement->nType = JS_GLOBALDATA_TYPE_NUMBER;
- pObjElement->sKey = sKey;
- pObjElement->dData = JS_ToNumber(isolate, v);
- array.Add(pObjElement);
- }
- break;
- case VT_boolean:
- {
- CJS_KeyValue* pObjElement = new CJS_KeyValue;
- pObjElement->nType = JS_GLOBALDATA_TYPE_BOOLEAN;
- pObjElement->sKey = sKey;
- pObjElement->dData = JS_ToBoolean(isolate, v);
- array.Add(pObjElement);
- }
- break;
- case VT_string:
- {
- CFX_ByteString sValue = CJS_Value(isolate, v, VT_string).ToCFXByteString();
- CJS_KeyValue* pObjElement = new CJS_KeyValue;
- pObjElement->nType = JS_GLOBALDATA_TYPE_STRING;
- pObjElement->sKey = sKey;
- pObjElement->sData = sValue;
- array.Add(pObjElement);
- }
- break;
- case VT_object:
- {
- CJS_KeyValue* pObjElement = new CJS_KeyValue;
- pObjElement->nType = JS_GLOBALDATA_TYPE_OBJECT;
- pObjElement->sKey = sKey;
- ObjectToArray(JS_ToObject(isolate, v), pObjElement->objData);
- array.Add(pObjElement);
- }
- break;
- case VT_null:
- {
- CJS_KeyValue* pObjElement = new CJS_KeyValue;
- pObjElement->nType = JS_GLOBALDATA_TYPE_NULL;
- pObjElement->sKey = sKey;
- array.Add(pObjElement);
- }
- break;
- default:
- break;
- }
+ switch (pData->data.nType) {
+ case JS_GLOBALDATA_TYPE_NUMBER:
+ SetGlobalVariables(pData->data.sKey, JS_GLOBALDATA_TYPE_NUMBER,
+ pData->data.dData, false, "",
+ v8::Local<v8::Object>(), pData->bPersistent == 1);
+ JS_PutObjectNumber(NULL, (JSFXObject)(*m_pJSObject),
+ pData->data.sKey.UTF8Decode().c_str(),
+ pData->data.dData);
+ break;
+ case JS_GLOBALDATA_TYPE_BOOLEAN:
+ SetGlobalVariables(pData->data.sKey, JS_GLOBALDATA_TYPE_BOOLEAN, 0,
+ (bool)(pData->data.bData == 1), "",
+ v8::Local<v8::Object>(), pData->bPersistent == 1);
+ JS_PutObjectBoolean(NULL, (JSFXObject)(*m_pJSObject),
+ pData->data.sKey.UTF8Decode().c_str(),
+ (bool)(pData->data.bData == 1));
+ break;
+ case JS_GLOBALDATA_TYPE_STRING:
+ SetGlobalVariables(pData->data.sKey, JS_GLOBALDATA_TYPE_STRING, 0,
+ false, pData->data.sData, v8::Local<v8::Object>(),
+ pData->bPersistent == 1);
+ JS_PutObjectString(NULL, (JSFXObject)(*m_pJSObject),
+ pData->data.sKey.UTF8Decode().c_str(),
+ pData->data.sData.UTF8Decode().c_str());
+ break;
+ case JS_GLOBALDATA_TYPE_OBJECT: {
+ IJS_Runtime* pRuntime = JS_GetRuntime((JSFXObject)(*m_pJSObject));
+ v8::Local<v8::Object> pObj = JS_NewFxDynamicObj(pRuntime, NULL, -1);
+
+ PutObjectProperty(pObj, &pData->data);
+
+ SetGlobalVariables(pData->data.sKey, JS_GLOBALDATA_TYPE_OBJECT, 0,
+ false, "", (JSObject)pObj, pData->bPersistent == 1);
+ JS_PutObjectObject(NULL, (JSFXObject)(*m_pJSObject),
+ pData->data.sKey.UTF8Decode().c_str(),
+ (JSObject)pObj);
+ } break;
+ case JS_GLOBALDATA_TYPE_NULL:
+ SetGlobalVariables(pData->data.sKey, JS_GLOBALDATA_TYPE_NULL, 0, false,
+ "", v8::Local<v8::Object>(),
+ pData->bPersistent == 1);
+ JS_PutObjectNull(NULL, (JSFXObject)(*m_pJSObject),
+ pData->data.sKey.UTF8Decode().c_str());
+ break;
}
+ }
}
-void global_alternate::PutObjectProperty(v8::Local<v8::Object> pObj, CJS_KeyValue* pData)
-{
- ASSERT(pData != NULL);
-
- for (int i=0,sz=pData->objData.Count(); i<sz; i++)
- {
- CJS_KeyValue* pObjData = pData->objData.GetAt(i);
- ASSERT(pObjData != NULL);
+void global_alternate::CommitGlobalPersisitentVariables() {
+ ASSERT(m_pGlobalData != NULL);
- switch (pObjData->nType)
- {
- case JS_GLOBALDATA_TYPE_NUMBER:
- JS_PutObjectNumber(NULL,(JSObject)pObj, pObjData->sKey.UTF8Decode().c_str(), pObjData->dData);
+ FX_POSITION pos = m_mapGlobal.GetStartPosition();
+ while (pos) {
+ CFX_ByteString name;
+ js_global_data* pData = NULL;
+ m_mapGlobal.GetNextAssoc(pos, name, (void*&)pData);
+
+ if (pData) {
+ if (pData->bDeleted) {
+ m_pGlobalData->DeleteGlobalVariable(name);
+ } else {
+ switch (pData->nType) {
+ case JS_GLOBALDATA_TYPE_NUMBER:
+ m_pGlobalData->SetGlobalVariableNumber(name, pData->dData);
+ m_pGlobalData->SetGlobalVariablePersistent(name,
+ pData->bPersistent);
break;
- case JS_GLOBALDATA_TYPE_BOOLEAN:
- JS_PutObjectBoolean(NULL,(JSObject)pObj, pObjData->sKey.UTF8Decode().c_str(), (bool)(pObjData->bData == 1));
+ case JS_GLOBALDATA_TYPE_BOOLEAN:
+ m_pGlobalData->SetGlobalVariableBoolean(name, pData->bData);
+ m_pGlobalData->SetGlobalVariablePersistent(name,
+ pData->bPersistent);
break;
- case JS_GLOBALDATA_TYPE_STRING:
- JS_PutObjectString(NULL,(JSObject)pObj, pObjData->sKey.UTF8Decode().c_str(), pObjData->sData.UTF8Decode().c_str());
+ case JS_GLOBALDATA_TYPE_STRING:
+ m_pGlobalData->SetGlobalVariableString(name, pData->sData);
+ m_pGlobalData->SetGlobalVariablePersistent(name,
+ pData->bPersistent);
break;
- case JS_GLOBALDATA_TYPE_OBJECT:
+ case JS_GLOBALDATA_TYPE_OBJECT:
+ // if (pData->pData)
{
- IJS_Runtime* pRuntime = JS_GetRuntime((JSFXObject)(*m_pJSObject));
- v8::Local<v8::Object> pNewObj = JS_NewFxDynamicObj(pRuntime, NULL, -1);
- PutObjectProperty(pNewObj, pObjData);
- JS_PutObjectObject(NULL, (JSObject)pObj, pObjData->sKey.UTF8Decode().c_str(), (JSObject)pNewObj);
+ CJS_GlobalVariableArray array;
+ v8::Local<v8::Object> obj = v8::Local<v8::Object>::New(
+ GetJSObject()->GetIsolate(), pData->pData);
+ ObjectToArray(obj, array);
+ m_pGlobalData->SetGlobalVariableObject(name, array);
+ m_pGlobalData->SetGlobalVariablePersistent(name,
+ pData->bPersistent);
}
break;
- case JS_GLOBALDATA_TYPE_NULL:
- JS_PutObjectNull(NULL,(JSObject)pObj, pObjData->sKey.UTF8Decode().c_str());
+ case JS_GLOBALDATA_TYPE_NULL:
+ m_pGlobalData->SetGlobalVariableNull(name);
+ m_pGlobalData->SetGlobalVariablePersistent(name,
+ pData->bPersistent);
break;
}
+ }
}
+ }
}
-void global_alternate::DestroyGlobalPersisitentVariables()
-{
- FX_POSITION pos = m_mapGlobal.GetStartPosition();
- while (pos)
- {
- CFX_ByteString name;
- js_global_data* pData = NULL;
- m_mapGlobal.GetNextAssoc(pos, name, (void*&)pData);
- delete pData;
+void global_alternate::ObjectToArray(v8::Local<v8::Object> pObj,
+ CJS_GlobalVariableArray& array) {
+ v8::Local<v8::Context> context = pObj->CreationContext();
+ v8::Isolate* isolate = context->GetIsolate();
+ v8::Local<v8::Array> pKeyList = JS_GetObjectElementNames(isolate, pObj);
+ int nObjElements = pKeyList->Length();
+
+ for (int i = 0; i < nObjElements; i++) {
+ CFX_WideString ws =
+ JS_ToString(isolate, JS_GetArrayElement(isolate, pKeyList, i));
+ CFX_ByteString sKey = ws.UTF8Encode();
+
+ v8::Local<v8::Value> v = JS_GetObjectElement(isolate, pObj, ws.c_str());
+ FXJSVALUETYPE vt = GET_VALUE_TYPE(v);
+ switch (vt) {
+ case VT_number: {
+ CJS_KeyValue* pObjElement = new CJS_KeyValue;
+ pObjElement->nType = JS_GLOBALDATA_TYPE_NUMBER;
+ pObjElement->sKey = sKey;
+ pObjElement->dData = JS_ToNumber(isolate, v);
+ array.Add(pObjElement);
+ } break;
+ case VT_boolean: {
+ CJS_KeyValue* pObjElement = new CJS_KeyValue;
+ pObjElement->nType = JS_GLOBALDATA_TYPE_BOOLEAN;
+ pObjElement->sKey = sKey;
+ pObjElement->dData = JS_ToBoolean(isolate, v);
+ array.Add(pObjElement);
+ } break;
+ case VT_string: {
+ CFX_ByteString sValue =
+ CJS_Value(isolate, v, VT_string).ToCFXByteString();
+ CJS_KeyValue* pObjElement = new CJS_KeyValue;
+ pObjElement->nType = JS_GLOBALDATA_TYPE_STRING;
+ pObjElement->sKey = sKey;
+ pObjElement->sData = sValue;
+ array.Add(pObjElement);
+ } break;
+ case VT_object: {
+ CJS_KeyValue* pObjElement = new CJS_KeyValue;
+ pObjElement->nType = JS_GLOBALDATA_TYPE_OBJECT;
+ pObjElement->sKey = sKey;
+ ObjectToArray(JS_ToObject(isolate, v), pObjElement->objData);
+ array.Add(pObjElement);
+ } break;
+ case VT_null: {
+ CJS_KeyValue* pObjElement = new CJS_KeyValue;
+ pObjElement->nType = JS_GLOBALDATA_TYPE_NULL;
+ pObjElement->sKey = sKey;
+ array.Add(pObjElement);
+ } break;
+ default:
+ break;
}
-
- m_mapGlobal.RemoveAll();
+ }
}
+void global_alternate::PutObjectProperty(v8::Local<v8::Object> pObj,
+ CJS_KeyValue* pData) {
+ ASSERT(pData != NULL);
-FX_BOOL global_alternate::SetGlobalVariables(const FX_CHAR* propname, int nType,
- double dData, bool bData, const CFX_ByteString& sData, JSObject pData, bool bDefaultPersistent)
-{
- if (propname == NULL) return FALSE;
+ for (int i = 0, sz = pData->objData.Count(); i < sz; i++) {
+ CJS_KeyValue* pObjData = pData->objData.GetAt(i);
+ ASSERT(pObjData != NULL);
- js_global_data* pTemp = NULL;
- m_mapGlobal.Lookup(propname, (void*&)pTemp);
+ switch (pObjData->nType) {
+ case JS_GLOBALDATA_TYPE_NUMBER:
+ JS_PutObjectNumber(NULL, (JSObject)pObj,
+ pObjData->sKey.UTF8Decode().c_str(),
+ pObjData->dData);
+ break;
+ case JS_GLOBALDATA_TYPE_BOOLEAN:
+ JS_PutObjectBoolean(NULL, (JSObject)pObj,
+ pObjData->sKey.UTF8Decode().c_str(),
+ (bool)(pObjData->bData == 1));
+ break;
+ case JS_GLOBALDATA_TYPE_STRING:
+ JS_PutObjectString(NULL, (JSObject)pObj,
+ pObjData->sKey.UTF8Decode().c_str(),
+ pObjData->sData.UTF8Decode().c_str());
+ break;
+ case JS_GLOBALDATA_TYPE_OBJECT: {
+ IJS_Runtime* pRuntime = JS_GetRuntime((JSFXObject)(*m_pJSObject));
+ v8::Local<v8::Object> pNewObj = JS_NewFxDynamicObj(pRuntime, NULL, -1);
+ PutObjectProperty(pNewObj, pObjData);
+ JS_PutObjectObject(NULL, (JSObject)pObj,
+ pObjData->sKey.UTF8Decode().c_str(),
+ (JSObject)pNewObj);
+ } break;
+ case JS_GLOBALDATA_TYPE_NULL:
+ JS_PutObjectNull(NULL, (JSObject)pObj,
+ pObjData->sKey.UTF8Decode().c_str());
+ break;
+ }
+ }
+}
- if (pTemp)
- {
- if (pTemp->bDeleted || pTemp->nType != nType)
- {
- pTemp->dData = 0;
- pTemp->bData = 0;
- pTemp->sData = "";
- pTemp->nType = nType;
- }
+void global_alternate::DestroyGlobalPersisitentVariables() {
+ FX_POSITION pos = m_mapGlobal.GetStartPosition();
+ while (pos) {
+ CFX_ByteString name;
+ js_global_data* pData = NULL;
+ m_mapGlobal.GetNextAssoc(pos, name, (void*&)pData);
+ delete pData;
+ }
- pTemp->bDeleted = FALSE;
+ m_mapGlobal.RemoveAll();
+}
- switch (nType)
- {
- case JS_GLOBALDATA_TYPE_NUMBER:
- {
- pTemp->dData = dData;
- }
- break;
- case JS_GLOBALDATA_TYPE_BOOLEAN:
- {
- pTemp->bData = bData;
- }
- break;
- case JS_GLOBALDATA_TYPE_STRING:
- {
- pTemp->sData = sData;
- }
- break;
- case JS_GLOBALDATA_TYPE_OBJECT:
- {
- pTemp->pData.Reset(JS_GetRuntime(pData), pData);
- }
- break;
- case JS_GLOBALDATA_TYPE_NULL:
- break;
- default:
- return FALSE;
- }
+FX_BOOL global_alternate::SetGlobalVariables(const FX_CHAR* propname,
+ int nType,
+ double dData,
+ bool bData,
+ const CFX_ByteString& sData,
+ JSObject pData,
+ bool bDefaultPersistent) {
+ if (propname == NULL)
+ return FALSE;
- return TRUE;
- }
+ js_global_data* pTemp = NULL;
+ m_mapGlobal.Lookup(propname, (void*&)pTemp);
- js_global_data* pNewData = NULL;
+ if (pTemp) {
+ if (pTemp->bDeleted || pTemp->nType != nType) {
+ pTemp->dData = 0;
+ pTemp->bData = 0;
+ pTemp->sData = "";
+ pTemp->nType = nType;
+ }
- switch (nType)
- {
- case JS_GLOBALDATA_TYPE_NUMBER:
- {
- pNewData = new js_global_data;
- pNewData->nType = JS_GLOBALDATA_TYPE_NUMBER;
- pNewData->dData = dData;
- pNewData->bPersistent = bDefaultPersistent;
- }
- break;
- case JS_GLOBALDATA_TYPE_BOOLEAN:
- {
- pNewData = new js_global_data;
- pNewData->nType = JS_GLOBALDATA_TYPE_BOOLEAN;
- pNewData->bData = bData;
- pNewData->bPersistent = bDefaultPersistent;
- }
- break;
- case JS_GLOBALDATA_TYPE_STRING:
- {
- pNewData = new js_global_data;
- pNewData->nType = JS_GLOBALDATA_TYPE_STRING;
- pNewData->sData = sData;
- pNewData->bPersistent = bDefaultPersistent;
- }
- break;
- case JS_GLOBALDATA_TYPE_OBJECT:
- {
- pNewData = new js_global_data;
- pNewData->nType = JS_GLOBALDATA_TYPE_OBJECT;
- pNewData->pData.Reset(JS_GetRuntime(pData), pData);
- pNewData->bPersistent = bDefaultPersistent;
- }
- break;
- case JS_GLOBALDATA_TYPE_NULL:
- {
- pNewData = new js_global_data;
- pNewData->nType = JS_GLOBALDATA_TYPE_NULL;
- pNewData->bPersistent = bDefaultPersistent;
- }
+ pTemp->bDeleted = FALSE;
+
+ switch (nType) {
+ case JS_GLOBALDATA_TYPE_NUMBER: {
+ pTemp->dData = dData;
+ } break;
+ case JS_GLOBALDATA_TYPE_BOOLEAN: {
+ pTemp->bData = bData;
+ } break;
+ case JS_GLOBALDATA_TYPE_STRING: {
+ pTemp->sData = sData;
+ } break;
+ case JS_GLOBALDATA_TYPE_OBJECT: {
+ pTemp->pData.Reset(JS_GetRuntime(pData), pData);
+ } break;
+ case JS_GLOBALDATA_TYPE_NULL:
break;
- default:
+ default:
return FALSE;
}
- m_mapGlobal.SetAt(propname, (void*)pNewData);
-
return TRUE;
+ }
+
+ js_global_data* pNewData = NULL;
+
+ switch (nType) {
+ case JS_GLOBALDATA_TYPE_NUMBER: {
+ pNewData = new js_global_data;
+ pNewData->nType = JS_GLOBALDATA_TYPE_NUMBER;
+ pNewData->dData = dData;
+ pNewData->bPersistent = bDefaultPersistent;
+ } break;
+ case JS_GLOBALDATA_TYPE_BOOLEAN: {
+ pNewData = new js_global_data;
+ pNewData->nType = JS_GLOBALDATA_TYPE_BOOLEAN;
+ pNewData->bData = bData;
+ pNewData->bPersistent = bDefaultPersistent;
+ } break;
+ case JS_GLOBALDATA_TYPE_STRING: {
+ pNewData = new js_global_data;
+ pNewData->nType = JS_GLOBALDATA_TYPE_STRING;
+ pNewData->sData = sData;
+ pNewData->bPersistent = bDefaultPersistent;
+ } break;
+ case JS_GLOBALDATA_TYPE_OBJECT: {
+ pNewData = new js_global_data;
+ pNewData->nType = JS_GLOBALDATA_TYPE_OBJECT;
+ pNewData->pData.Reset(JS_GetRuntime(pData), pData);
+ pNewData->bPersistent = bDefaultPersistent;
+ } break;
+ case JS_GLOBALDATA_TYPE_NULL: {
+ pNewData = new js_global_data;
+ pNewData->nType = JS_GLOBALDATA_TYPE_NULL;
+ pNewData->bPersistent = bDefaultPersistent;
+ } break;
+ default:
+ return FALSE;
+ }
+
+ m_mapGlobal.SetAt(propname, (void*)pNewData);
+
+ return TRUE;
}
-FXJSVALUETYPE GET_VALUE_TYPE(v8::Local<v8::Value> p)
-{
+FXJSVALUETYPE GET_VALUE_TYPE(v8::Local<v8::Value> p) {
const unsigned int nHash = JS_CalcHash(JS_GetTypeof(p));
if (nHash == JSCONST_nUndefHash)
diff --git a/fpdfsdk/src/javascript/report.cpp b/fpdfsdk/src/javascript/report.cpp
index 1478feb1fa..732ae6d20e 100644
--- a/fpdfsdk/src/javascript/report.cpp
+++ b/fpdfsdk/src/javascript/report.cpp
@@ -20,30 +20,28 @@ BEGIN_JS_STATIC_PROP(CJS_Report)
END_JS_STATIC_PROP()
BEGIN_JS_STATIC_METHOD(CJS_Report)
- JS_STATIC_METHOD_ENTRY(save)
- JS_STATIC_METHOD_ENTRY(writeText)
+JS_STATIC_METHOD_ENTRY(save)
+JS_STATIC_METHOD_ENTRY(writeText)
END_JS_STATIC_METHOD()
IMPLEMENT_JS_CLASS(CJS_Report, Report)
-Report::Report(CJS_Object* pJSObject) : CJS_EmbedObj(pJSObject)
-{
+Report::Report(CJS_Object* pJSObject) : CJS_EmbedObj(pJSObject) {}
-}
-
-Report::~Report()
-{
-
-}
+Report::~Report() {}
-FX_BOOL Report::writeText(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
+FX_BOOL Report::writeText(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
// Unsafe, not supported.
return TRUE;
}
-FX_BOOL Report::save(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
+FX_BOOL Report::save(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
// Unsafe, not supported.
return TRUE;
}
diff --git a/fpdfsdk/src/javascript/resource.cpp b/fpdfsdk/src/javascript/resource.cpp
index 4375da3ff7..5b6bd48703 100644
--- a/fpdfsdk/src/javascript/resource.cpp
+++ b/fpdfsdk/src/javascript/resource.cpp
@@ -6,61 +6,59 @@
#include "../../include/javascript/resource.h"
-CFX_WideString JSGetStringFromID(CJS_Context* pContext, FX_UINT id)
-{
- switch (id)
- {
+CFX_WideString JSGetStringFromID(CJS_Context* pContext, FX_UINT id) {
+ switch (id) {
case IDS_STRING_JSALERT:
- return L"Alert";
+ return L"Alert";
case IDS_STRING_JSPARAMERROR:
- return L"Incorrect number of parameters passed to function.";
+ return L"Incorrect number of parameters passed to function.";
case IDS_STRING_JSAFNUMBER_KEYSTROKE:
- return L"The input value is invalid.";
+ return L"The input value is invalid.";
case IDS_STRING_JSPARAM_TOOLONG:
- return L"The input value is too long.";
+ return L"The input value is too long.";
case IDS_STRING_JSPARSEDATE:
- return L"The input value can't be parsed as a valid date/time (%s).";
+ return L"The input value can't be parsed as a valid date/time (%s).";
case IDS_STRING_JSRANGE1:
- return L"The input value must be greater than or equal to %s"
- L" and less than or equal to %s.";
+ return L"The input value must be greater than or equal to %s"
+ L" and less than or equal to %s.";
case IDS_STRING_JSRANGE2:
- return L"The input value must be greater than or equal to %s.";
+ return L"The input value must be greater than or equal to %s.";
case IDS_STRING_JSRANGE3:
- return L"The input value must be less than or equal to %s.";
+ return L"The input value must be less than or equal to %s.";
case IDS_STRING_NOTSUPPORT:
- return L"Operation not supported.";
+ return L"Operation not supported.";
case IDS_STRING_JSBUSY:
- return L"System is busy.";
+ return L"System is busy.";
case IDS_STRING_JSEVENT:
- return L"Duplicate formfield event found.";
+ return L"Duplicate formfield event found.";
case IDS_STRING_RUN:
- return L"Script ran successfully.";
+ return L"Script ran successfully.";
case IDS_STRING_JSPRINT1:
- return L"The second parameter can't be converted to a Date.";
+ return L"The second parameter can't be converted to a Date.";
case IDS_STRING_JSPRINT2:
- return L"The second parameter is an invalid Date!";
+ return L"The second parameter is an invalid Date!";
case IDS_STRING_JSNOGLOBAL:
- return L"Global value not found.";
+ return L"Global value not found.";
case IDS_STRING_JSREADONLY:
- return L"Cannot assign to readonly property.";
+ return L"Cannot assign to readonly property.";
case IDS_STRING_JSTYPEERROR:
- return L"Incorrect parameter type.";
+ return L"Incorrect parameter type.";
case IDS_STRING_JSVALUEERROR:
- return L"Incorrect parameter value.";
+ return L"Incorrect parameter value.";
default:
- return L"";
- }
+ return L"";
+ }
}
CFX_WideString JSFormatErrorString(const char* class_name,
const char* property_name,
const CFX_WideString& details) {
- CFX_WideString result = CFX_WideString::FromLocal(class_name);
- if (property_name) {
- result += L".";
- result += CFX_WideString::FromLocal(property_name);
- }
- result += L": ";
- result += details;
- return result;
+ CFX_WideString result = CFX_WideString::FromLocal(class_name);
+ if (property_name) {
+ result += L".";
+ result += CFX_WideString::FromLocal(property_name);
+ }
+ result += L": ";
+ result += details;
+ return result;
}
diff --git a/fpdfsdk/src/javascript/util.cpp b/fpdfsdk/src/javascript/util.cpp
index 4083ed58da..858af0079c 100644
--- a/fpdfsdk/src/javascript/util.cpp
+++ b/fpdfsdk/src/javascript/util.cpp
@@ -16,19 +16,18 @@
#include "../../include/javascript/JS_EventHandler.h"
#include "../../include/javascript/JS_Runtime.h"
-#if _FX_OS_ == _FX_ANDROID_
+#if _FX_OS_ == _FX_ANDROID_
#include <ctype.h>
#endif
-static v8::Isolate* GetIsolate(IFXJS_Context* cc)
-{
- CJS_Context* pContext = (CJS_Context *)cc;
- ASSERT(pContext != NULL);
+static v8::Isolate* GetIsolate(IFXJS_Context* cc) {
+ CJS_Context* pContext = (CJS_Context*)cc;
+ ASSERT(pContext != NULL);
- CJS_Runtime* pRuntime = pContext->GetJSRuntime();
- ASSERT(pRuntime != NULL);
+ CJS_Runtime* pRuntime = pContext->GetJSRuntime();
+ ASSERT(pRuntime != NULL);
- return pRuntime->GetIsolate();
+ return pRuntime->GetIsolate();
}
BEGIN_JS_STATIC_CONST(CJS_Util)
@@ -38,350 +37,235 @@ BEGIN_JS_STATIC_PROP(CJS_Util)
END_JS_STATIC_PROP()
BEGIN_JS_STATIC_METHOD(CJS_Util)
- JS_STATIC_METHOD_ENTRY(printd)
- JS_STATIC_METHOD_ENTRY(printf)
- JS_STATIC_METHOD_ENTRY(printx)
- JS_STATIC_METHOD_ENTRY(scand)
- JS_STATIC_METHOD_ENTRY(byteToChar)
+JS_STATIC_METHOD_ENTRY(printd)
+JS_STATIC_METHOD_ENTRY(printf)
+JS_STATIC_METHOD_ENTRY(printx)
+JS_STATIC_METHOD_ENTRY(scand)
+JS_STATIC_METHOD_ENTRY(byteToChar)
END_JS_STATIC_METHOD()
-IMPLEMENT_JS_CLASS(CJS_Util,util)
+IMPLEMENT_JS_CLASS(CJS_Util, util)
-util::util(CJS_Object *pJSObject) : CJS_EmbedObj(pJSObject)
-{
-}
-
-util::~util(void)
-{
-}
+util::util(CJS_Object* pJSObject) : CJS_EmbedObj(pJSObject) {}
+util::~util(void) {}
-struct stru_TbConvert
-{
- const FX_WCHAR* lpszJSMark;
- const FX_WCHAR* lpszCppMark;
+struct stru_TbConvert {
+ const FX_WCHAR* lpszJSMark;
+ const FX_WCHAR* lpszCppMark;
};
const stru_TbConvert fcTable[] = {
- { L"mmmm", L"%B" },
- { L"mmm", L"%b" },
- { L"mm", L"%m" },
+ {L"mmmm", L"%B"},
+ {L"mmm", L"%b"},
+ {L"mm", L"%m"},
//"m"
- { L"dddd", L"%A" },
- { L"ddd", L"%a" },
- { L"dd", L"%d" },
+ {L"dddd", L"%A"},
+ {L"ddd", L"%a"},
+ {L"dd", L"%d"},
//"d", "%w",
- { L"yyyy", L"%Y" },
- { L"yy", L"%y" },
- { L"HH", L"%H" },
+ {L"yyyy", L"%Y"},
+ {L"yy", L"%y"},
+ {L"HH", L"%H"},
//"H"
- { L"hh", L"%I" },
+ {L"hh", L"%I"},
//"h"
- { L"MM", L"%M" },
+ {L"MM", L"%M"},
//"M"
- { L"ss", L"%S" },
+ {L"ss", L"%S"},
//"s
- { L"TT", L"%p" },
- //"t"
+ {L"TT", L"%p"},
+//"t"
#if defined(_WIN32)
- { L"tt", L"%p" },
- { L"h", L"%#I" },
+ {L"tt", L"%p"},
+ {L"h", L"%#I"},
#else
- { L"tt", L"%P" },
- { L"h", L"%l" },
+ {L"tt", L"%P"},
+ {L"h", L"%l"},
#endif
};
-#define UTIL_INT 0
-#define UTIL_DOUBLE 1
-#define UTIL_STRING 2
-
-int util::ParstDataType(std::wstring* sFormat)
-{
- bool bPercent = FALSE;
- for (size_t i = 0; i < sFormat->length(); ++i)
- {
- wchar_t c = (*sFormat)[i];
- if (c == L'%')
- {
- bPercent = true;
- continue;
- }
+#define UTIL_INT 0
+#define UTIL_DOUBLE 1
+#define UTIL_STRING 2
+
+int util::ParstDataType(std::wstring* sFormat) {
+ bool bPercent = FALSE;
+ for (size_t i = 0; i < sFormat->length(); ++i) {
+ wchar_t c = (*sFormat)[i];
+ if (c == L'%') {
+ bPercent = true;
+ continue;
+ }
- if (bPercent)
- {
- if (c == L'c' || c == L'C' || c == L'd' || c == L'i' || c == L'o' || c == L'u' || c == L'x' || c == L'X')
- {
- return UTIL_INT;
- }
- if (c == L'e' || c == L'E' || c == L'f' || c == L'g' || c == L'G')
- {
- return UTIL_DOUBLE;
- }
- if (c == L's' || c == L'S')
- {
- // Map s to S since we always deal internally
- // with wchar_t strings.
- (*sFormat)[i] = L'S';
- return UTIL_STRING;
- }
- if (c == L'.' || c == L'+' || c == L'-' || c == L'#' || c == L' ' || CJS_PublicMethods::IsDigit(c))
- {
- continue;
- }
- break;
- }
+ if (bPercent) {
+ if (c == L'c' || c == L'C' || c == L'd' || c == L'i' || c == L'o' ||
+ c == L'u' || c == L'x' || c == L'X') {
+ return UTIL_INT;
+ }
+ if (c == L'e' || c == L'E' || c == L'f' || c == L'g' || c == L'G') {
+ return UTIL_DOUBLE;
+ }
+ if (c == L's' || c == L'S') {
+ // Map s to S since we always deal internally
+ // with wchar_t strings.
+ (*sFormat)[i] = L'S';
+ return UTIL_STRING;
+ }
+ if (c == L'.' || c == L'+' || c == L'-' || c == L'#' || c == L' ' ||
+ CJS_PublicMethods::IsDigit(c)) {
+ continue;
+ }
+ break;
}
+ }
- return -1;
+ return -1;
}
-FX_BOOL util::printf(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- int iSize = params.size();
- if (iSize < 1)
- return FALSE;
- std::wstring c_ConvChar(params[0].ToCFXWideString().c_str());
- std::vector<std::wstring> c_strConvers;
- int iOffset = 0;
- int iOffend = 0;
- c_ConvChar.insert(c_ConvChar.begin(),L'S');
- while(iOffset != -1)
- {
- iOffend = c_ConvChar.find(L"%",iOffset+1);
- std::wstring strSub;
- if (iOffend == -1)
- strSub = c_ConvChar.substr(iOffset);
- else
- strSub = c_ConvChar.substr(iOffset ,iOffend - iOffset);
- c_strConvers.push_back(strSub);
- iOffset = iOffend ;
+FX_BOOL util::printf(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ int iSize = params.size();
+ if (iSize < 1)
+ return FALSE;
+ std::wstring c_ConvChar(params[0].ToCFXWideString().c_str());
+ std::vector<std::wstring> c_strConvers;
+ int iOffset = 0;
+ int iOffend = 0;
+ c_ConvChar.insert(c_ConvChar.begin(), L'S');
+ while (iOffset != -1) {
+ iOffend = c_ConvChar.find(L"%", iOffset + 1);
+ std::wstring strSub;
+ if (iOffend == -1)
+ strSub = c_ConvChar.substr(iOffset);
+ else
+ strSub = c_ConvChar.substr(iOffset, iOffend - iOffset);
+ c_strConvers.push_back(strSub);
+ iOffset = iOffend;
+ }
+
+ std::wstring c_strResult;
+
+ // for(int iIndex = 1;iIndex < params.size();iIndex++)
+ std::wstring c_strFormat;
+ for (int iIndex = 0; iIndex < (int)c_strConvers.size(); iIndex++) {
+ c_strFormat = c_strConvers[iIndex];
+ if (iIndex == 0) {
+ c_strResult = c_strFormat;
+ continue;
}
- std::wstring c_strResult;
-
- //for(int iIndex = 1;iIndex < params.size();iIndex++)
- std::wstring c_strFormat;
- for(int iIndex = 0;iIndex < (int)c_strConvers.size();iIndex++)
- {
- c_strFormat = c_strConvers[iIndex];
- if (iIndex == 0)
- {
- c_strResult = c_strFormat;
- continue;
- }
-
-
- CFX_WideString strSegment;
- if (iIndex >= iSize) {
- c_strResult += c_strFormat;
- continue;
- }
+ CFX_WideString strSegment;
+ if (iIndex >= iSize) {
+ c_strResult += c_strFormat;
+ continue;
+ }
- switch (ParstDataType(&c_strFormat))
- {
- case UTIL_INT:
- strSegment.Format(c_strFormat.c_str(), params[iIndex].ToInt());
- break;
- case UTIL_DOUBLE:
- strSegment.Format(c_strFormat.c_str(), params[iIndex].ToDouble());
- break;
- case UTIL_STRING:
- strSegment.Format(c_strFormat.c_str(), params[iIndex].ToCFXWideString().c_str());
- break;
- default:
- strSegment.Format(L"%S", c_strFormat.c_str());
- break;
- }
- c_strResult += strSegment.GetBuffer(strSegment.GetLength()+1);
+ switch (ParstDataType(&c_strFormat)) {
+ case UTIL_INT:
+ strSegment.Format(c_strFormat.c_str(), params[iIndex].ToInt());
+ break;
+ case UTIL_DOUBLE:
+ strSegment.Format(c_strFormat.c_str(), params[iIndex].ToDouble());
+ break;
+ case UTIL_STRING:
+ strSegment.Format(c_strFormat.c_str(),
+ params[iIndex].ToCFXWideString().c_str());
+ break;
+ default:
+ strSegment.Format(L"%S", c_strFormat.c_str());
+ break;
}
+ c_strResult += strSegment.GetBuffer(strSegment.GetLength() + 1);
+ }
- c_strResult.erase(c_strResult.begin());
- vRet = c_strResult.c_str();
- return TRUE;
+ c_strResult.erase(c_strResult.begin());
+ vRet = c_strResult.c_str();
+ return TRUE;
}
-FX_BOOL util::printd(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- v8::Isolate* isolate = GetIsolate(cc);
+FX_BOOL util::printd(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ v8::Isolate* isolate = GetIsolate(cc);
- int iSize = params.size();
- if (iSize < 2)
- return FALSE;
+ int iSize = params.size();
+ if (iSize < 2)
+ return FALSE;
- CJS_Value p1(isolate);
- p1 = params[0];
+ CJS_Value p1(isolate);
+ p1 = params[0];
- CJS_Value p2 = params[1];
- CJS_Date jsDate(isolate);
- if (!p2.ConvertToDate(jsDate))
- {
- sError = JSGetStringFromID((CJS_Context*)cc, IDS_STRING_JSPRINT1);
- return FALSE;
- }
+ CJS_Value p2 = params[1];
+ CJS_Date jsDate(isolate);
+ if (!p2.ConvertToDate(jsDate)) {
+ sError = JSGetStringFromID((CJS_Context*)cc, IDS_STRING_JSPRINT1);
+ return FALSE;
+ }
- if (!jsDate.IsValidDate())
- {
- sError = JSGetStringFromID((CJS_Context*)cc, IDS_STRING_JSPRINT2);
+ if (!jsDate.IsValidDate()) {
+ sError = JSGetStringFromID((CJS_Context*)cc, IDS_STRING_JSPRINT2);
+ return FALSE;
+ }
+
+ if (p1.GetType() == VT_number) {
+ int nFormat = p1.ToInt();
+ CFX_WideString swResult;
+
+ switch (nFormat) {
+ case 0:
+ swResult.Format(L"D:%04d%02d%02d%02d%02d%02d", jsDate.GetYear(),
+ jsDate.GetMonth() + 1, jsDate.GetDay(),
+ jsDate.GetHours(), jsDate.GetMinutes(),
+ jsDate.GetSeconds());
+ break;
+ case 1:
+ swResult.Format(L"%04d.%02d.%02d %02d:%02d:%02d", jsDate.GetYear(),
+ jsDate.GetMonth() + 1, jsDate.GetDay(),
+ jsDate.GetHours(), jsDate.GetMinutes(),
+ jsDate.GetSeconds());
+ break;
+ case 2:
+ swResult.Format(L"%04d/%02d/%02d %02d:%02d:%02d", jsDate.GetYear(),
+ jsDate.GetMonth() + 1, jsDate.GetDay(),
+ jsDate.GetHours(), jsDate.GetMinutes(),
+ jsDate.GetSeconds());
+ break;
+ default:
return FALSE;
}
- if (p1.GetType() == VT_number)
- {
- int nFormat = p1.ToInt();
- CFX_WideString swResult;
-
- switch (nFormat)
- {
- case 0:
- swResult.Format(L"D:%04d%02d%02d%02d%02d%02d",
- jsDate.GetYear(),
- jsDate.GetMonth() + 1,
- jsDate.GetDay(),
- jsDate.GetHours(),
- jsDate.GetMinutes(),
- jsDate.GetSeconds());
- break;
- case 1:
- swResult.Format(L"%04d.%02d.%02d %02d:%02d:%02d",
- jsDate.GetYear(),
- jsDate.GetMonth() + 1,
- jsDate.GetDay(),
- jsDate.GetHours(),
- jsDate.GetMinutes(),
- jsDate.GetSeconds());
- break;
- case 2:
- swResult.Format(L"%04d/%02d/%02d %02d:%02d:%02d",
- jsDate.GetYear(),
- jsDate.GetMonth() + 1,
- jsDate.GetDay(),
- jsDate.GetHours(),
- jsDate.GetMinutes(),
- jsDate.GetSeconds());
- break;
- default:
- return FALSE;
- }
-
- vRet = swResult.c_str();
- return TRUE;
- }
- if (p1.GetType() == VT_string)
- {
- std::basic_string<wchar_t> cFormat = p1.ToCFXWideString().c_str();
-
- bool bXFAPicture = false;
- if (iSize > 2)
- {
- bXFAPicture = params[2].ToBool();
- }
-
- if (bXFAPicture)
- {
- return FALSE; //currently, it doesn't support XFAPicture.
- }
-
- int iIndex;
- for(iIndex = 0;iIndex<sizeof(fcTable)/sizeof(stru_TbConvert);iIndex++)
- {
- int iStart = 0;
- int iEnd;
- while((iEnd = cFormat.find(fcTable[iIndex].lpszJSMark, iStart)) != -1)
- {
- cFormat.replace(iEnd, FXSYS_wcslen(fcTable[iIndex].lpszJSMark), fcTable[iIndex].lpszCppMark);
- iStart = iEnd;
- }
- }
-
- int iYear,iMonth,iDay,iHour,iMin,iSec;
- iYear = jsDate.GetYear();
- iMonth = jsDate.GetMonth();
- iDay = jsDate.GetDay();
- iHour = jsDate.GetHours();
- iMin = jsDate.GetMinutes();
- iSec = jsDate.GetSeconds();
-
- struct tm time = {};
- time.tm_year = iYear-1900;
- time.tm_mon = iMonth;
- time.tm_mday = iDay;
- time.tm_hour = iHour;
- time.tm_min = iMin;
- time.tm_sec = iSec;
-
- struct stru_TbConvertAd
- {
- const FX_WCHAR* lpszJSMark;
- int iValue;
- };
-
- stru_TbConvertAd cTableAd[] ={
- { L"m", iMonth+1 },
- { L"d", iDay },
- { L"H", iHour },
- { L"h", iHour>12?iHour-12:iHour },
- { L"M", iMin },
- { L"s", iSec },
- };
-
- for(iIndex = 0;iIndex<sizeof(cTableAd)/sizeof(stru_TbConvertAd);iIndex++)
- {
- wchar_t tszValue[10];
- CFX_WideString sValue;
- sValue.Format(L"%d",cTableAd[iIndex].iValue);
- memcpy(tszValue, (wchar_t *)sValue.GetBuffer(sValue.GetLength()+1),
- (sValue.GetLength()+1)*sizeof(wchar_t));
-
- int iStart = 0;
- int iEnd;
- while((iEnd = cFormat.find(cTableAd[iIndex].lpszJSMark, iStart)) != -1)
- {
- if (iEnd > 0)
- {
- if (cFormat[iEnd-1] == L'%')
- {
- iStart = iEnd+1;
- continue;
- }
- }
- cFormat.replace(iEnd, FXSYS_wcslen(cTableAd[iIndex].lpszJSMark), tszValue);
- iStart = iEnd;
- }
- }
+ vRet = swResult.c_str();
+ return TRUE;
+ }
+ if (p1.GetType() == VT_string) {
+ std::basic_string<wchar_t> cFormat = p1.ToCFXWideString().c_str();
- CFX_WideString strFormat;
- wchar_t buf[64] = {};
- strFormat = wcsftime(buf, 64, cFormat.c_str(), &time);
- cFormat = buf;
- vRet = cFormat.c_str();
- return TRUE;
+ bool bXFAPicture = false;
+ if (iSize > 2) {
+ bXFAPicture = params[2].ToBool();
}
- return FALSE;
-}
-void util::printd(const std::wstring &cFormat2, CJS_Date jsDate, bool bXFAPicture, std::wstring &cPurpose)
-{
- std::wstring cFormat = cFormat2;
-
- if (bXFAPicture)
- {
- return ; //currently, it doesn't support XFAPicture.
+ if (bXFAPicture) {
+ return FALSE; // currently, it doesn't support XFAPicture.
}
int iIndex;
- for(iIndex = 0;iIndex<sizeof(fcTable)/sizeof(stru_TbConvert);iIndex++)
- {
- int iStart = 0;
- int iEnd;
- while((iEnd = cFormat.find(fcTable[iIndex].lpszJSMark, iStart)) != -1)
- {
- cFormat.replace(iEnd,FXSYS_wcslen(fcTable[iIndex].lpszJSMark), fcTable[iIndex].lpszCppMark);
- iStart = iEnd;
- }
+ for (iIndex = 0; iIndex < sizeof(fcTable) / sizeof(stru_TbConvert);
+ iIndex++) {
+ int iStart = 0;
+ int iEnd;
+ while ((iEnd = cFormat.find(fcTable[iIndex].lpszJSMark, iStart)) != -1) {
+ cFormat.replace(iEnd, FXSYS_wcslen(fcTable[iIndex].lpszJSMark),
+ fcTable[iIndex].lpszCppMark);
+ iStart = iEnd;
+ }
}
- int iYear,iMonth,iDay,iHour,iMin,iSec;
+ int iYear, iMonth, iDay, iHour, iMin, iSec;
iYear = jsDate.GetYear();
iMonth = jsDate.GetMonth();
iDay = jsDate.GetDay();
@@ -390,243 +274,309 @@ void util::printd(const std::wstring &cFormat2, CJS_Date jsDate, bool bXFAPictur
iSec = jsDate.GetSeconds();
struct tm time = {};
- time.tm_year = iYear-1900;
+ time.tm_year = iYear - 1900;
time.tm_mon = iMonth;
time.tm_mday = iDay;
time.tm_hour = iHour;
time.tm_min = iMin;
time.tm_sec = iSec;
-// COleDateTime cppTm(iYear,iMonth+1,iDay,iHour,iMin,iSec);
- //CString strFormat = cppTm.Format(cFormat.c_str());
- struct stru_TbConvertAd
- {
- const FX_WCHAR* lpszJSMark;
- int iValue;
+ struct stru_TbConvertAd {
+ const FX_WCHAR* lpszJSMark;
+ int iValue;
};
- stru_TbConvertAd cTableAd[] ={
- { L"m", iMonth+1 },
- { L"d", iDay },
- { L"H", iHour },
- { L"h", iHour>12?iHour-12:iHour },
- { L"M", iMin },
- { L"s", iSec },
+ stru_TbConvertAd cTableAd[] = {
+ {L"m", iMonth + 1}, {L"d", iDay},
+ {L"H", iHour}, {L"h", iHour > 12 ? iHour - 12 : iHour},
+ {L"M", iMin}, {L"s", iSec},
};
- //cFormat = strFormat.GetBuffer(strFormat.GetLength()+1);
- for(iIndex = 0;iIndex<sizeof(cTableAd)/sizeof(stru_TbConvertAd);iIndex++)
- {
- wchar_t tszValue[10];
- //_itot(cTableAd[iIndex].iValue,tszValue,10);
- CFX_WideString sValue;
- sValue.Format(L"%d",cTableAd[iIndex].iValue);
- memcpy(tszValue, (wchar_t *)sValue.GetBuffer(sValue.GetLength()+1),sValue.GetLength()*sizeof(wchar_t));
-
-
- //strFormat.Replace(cTableAd[iIndex].lpszJSMark,"%d");
- //strFormat.Format(strFormat,cTableAd[iIndex].iValue);
- int iStart = 0;
- int iEnd;
- while((iEnd = cFormat.find(cTableAd[iIndex].lpszJSMark, iStart)) != -1)
- {
- if (iEnd > 0)
- {
- if (cFormat[iEnd-1] == L'%')
- {
- iStart = iEnd+1;
- continue;
- }
- }
- cFormat.replace(iEnd,FXSYS_wcslen(cTableAd[iIndex].lpszJSMark),tszValue);
- iStart = iEnd;
+ for (iIndex = 0; iIndex < sizeof(cTableAd) / sizeof(stru_TbConvertAd);
+ iIndex++) {
+ wchar_t tszValue[10];
+ CFX_WideString sValue;
+ sValue.Format(L"%d", cTableAd[iIndex].iValue);
+ memcpy(tszValue, (wchar_t*)sValue.GetBuffer(sValue.GetLength() + 1),
+ (sValue.GetLength() + 1) * sizeof(wchar_t));
+
+ int iStart = 0;
+ int iEnd;
+ while ((iEnd = cFormat.find(cTableAd[iIndex].lpszJSMark, iStart)) != -1) {
+ if (iEnd > 0) {
+ if (cFormat[iEnd - 1] == L'%') {
+ iStart = iEnd + 1;
+ continue;
+ }
}
+ cFormat.replace(iEnd, FXSYS_wcslen(cTableAd[iIndex].lpszJSMark),
+ tszValue);
+ iStart = iEnd;
+ }
}
CFX_WideString strFormat;
wchar_t buf[64] = {};
strFormat = wcsftime(buf, 64, cFormat.c_str(), &time);
cFormat = buf;
- cPurpose = cFormat;
+ vRet = cFormat.c_str();
+ return TRUE;
+ }
+ return FALSE;
}
-FX_BOOL util::printx(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- int iSize = params.size();
- if (iSize<2)
- return FALSE;
- CFX_WideString sFormat = params[0].ToCFXWideString();
- CFX_WideString sSource = params[1].ToCFXWideString();
- std::string cFormat = CFX_ByteString::FromUnicode(sFormat).c_str();
- std::string cSource = CFX_ByteString::FromUnicode(sSource).c_str();
- std::string cDest;
- printx(cFormat,cSource,cDest);
- vRet = cDest.c_str();
- return TRUE;
+void util::printd(const std::wstring& cFormat2,
+ CJS_Date jsDate,
+ bool bXFAPicture,
+ std::wstring& cPurpose) {
+ std::wstring cFormat = cFormat2;
+
+ if (bXFAPicture) {
+ return; // currently, it doesn't support XFAPicture.
+ }
+
+ int iIndex;
+ for (iIndex = 0; iIndex < sizeof(fcTable) / sizeof(stru_TbConvert);
+ iIndex++) {
+ int iStart = 0;
+ int iEnd;
+ while ((iEnd = cFormat.find(fcTable[iIndex].lpszJSMark, iStart)) != -1) {
+ cFormat.replace(iEnd, FXSYS_wcslen(fcTable[iIndex].lpszJSMark),
+ fcTable[iIndex].lpszCppMark);
+ iStart = iEnd;
+ }
+ }
+
+ int iYear, iMonth, iDay, iHour, iMin, iSec;
+ iYear = jsDate.GetYear();
+ iMonth = jsDate.GetMonth();
+ iDay = jsDate.GetDay();
+ iHour = jsDate.GetHours();
+ iMin = jsDate.GetMinutes();
+ iSec = jsDate.GetSeconds();
+
+ struct tm time = {};
+ time.tm_year = iYear - 1900;
+ time.tm_mon = iMonth;
+ time.tm_mday = iDay;
+ time.tm_hour = iHour;
+ time.tm_min = iMin;
+ time.tm_sec = iSec;
+ // COleDateTime cppTm(iYear,iMonth+1,iDay,iHour,iMin,iSec);
+ // CString strFormat = cppTm.Format(cFormat.c_str());
+
+ struct stru_TbConvertAd {
+ const FX_WCHAR* lpszJSMark;
+ int iValue;
+ };
+
+ stru_TbConvertAd cTableAd[] = {
+ {L"m", iMonth + 1}, {L"d", iDay},
+ {L"H", iHour}, {L"h", iHour > 12 ? iHour - 12 : iHour},
+ {L"M", iMin}, {L"s", iSec},
+ };
+
+ // cFormat = strFormat.GetBuffer(strFormat.GetLength()+1);
+ for (iIndex = 0; iIndex < sizeof(cTableAd) / sizeof(stru_TbConvertAd);
+ iIndex++) {
+ wchar_t tszValue[10];
+ //_itot(cTableAd[iIndex].iValue,tszValue,10);
+ CFX_WideString sValue;
+ sValue.Format(L"%d", cTableAd[iIndex].iValue);
+ memcpy(tszValue, (wchar_t*)sValue.GetBuffer(sValue.GetLength() + 1),
+ sValue.GetLength() * sizeof(wchar_t));
+
+ // strFormat.Replace(cTableAd[iIndex].lpszJSMark,"%d");
+ // strFormat.Format(strFormat,cTableAd[iIndex].iValue);
+ int iStart = 0;
+ int iEnd;
+ while ((iEnd = cFormat.find(cTableAd[iIndex].lpszJSMark, iStart)) != -1) {
+ if (iEnd > 0) {
+ if (cFormat[iEnd - 1] == L'%') {
+ iStart = iEnd + 1;
+ continue;
+ }
+ }
+ cFormat.replace(iEnd, FXSYS_wcslen(cTableAd[iIndex].lpszJSMark),
+ tszValue);
+ iStart = iEnd;
+ }
+ }
+
+ CFX_WideString strFormat;
+ wchar_t buf[64] = {};
+ strFormat = wcsftime(buf, 64, cFormat.c_str(), &time);
+ cFormat = buf;
+ cPurpose = cFormat;
+}
+
+FX_BOOL util::printx(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ int iSize = params.size();
+ if (iSize < 2)
+ return FALSE;
+ CFX_WideString sFormat = params[0].ToCFXWideString();
+ CFX_WideString sSource = params[1].ToCFXWideString();
+ std::string cFormat = CFX_ByteString::FromUnicode(sFormat).c_str();
+ std::string cSource = CFX_ByteString::FromUnicode(sSource).c_str();
+ std::string cDest;
+ printx(cFormat, cSource, cDest);
+ vRet = cDest.c_str();
+ return TRUE;
}
-void util::printx(const std::string &cFormat,const std::string &cSource2,std::string &cPurpose)
-{
- std::string cSource(cSource2);
- if (!cPurpose.empty())
- //cPurpose.clear();
- cPurpose.erase();
- int itSource = 0;
- int iSize = cSource.size();
- for(int iIndex = 0; iIndex < (int)cFormat.size() && itSource<iSize; iIndex++)
- {
- char letter = cFormat[iIndex];
- switch(letter)
- {
- case '?':
- //cPurpose.push_back(cSource[itSource]);
+void util::printx(const std::string& cFormat,
+ const std::string& cSource2,
+ std::string& cPurpose) {
+ std::string cSource(cSource2);
+ if (!cPurpose.empty())
+ // cPurpose.clear();
+ cPurpose.erase();
+ int itSource = 0;
+ int iSize = cSource.size();
+ for (int iIndex = 0; iIndex < (int)cFormat.size() && itSource < iSize;
+ iIndex++) {
+ char letter = cFormat[iIndex];
+ switch (letter) {
+ case '?':
+ // cPurpose.push_back(cSource[itSource]);
+ cPurpose += cSource[itSource];
+ itSource++;
+ break;
+ case 'X': {
+ while (itSource < iSize) {
+ if ((cSource[itSource] >= '0' && cSource[itSource] <= '9') ||
+ (cSource[itSource] >= 'a' && cSource[itSource] <= 'z') ||
+ (cSource[itSource] >= 'A' && cSource[itSource] <= 'Z')) {
+ // cPurpose.push_back(cSource[itSource]);
cPurpose += cSource[itSource];
itSource++;
break;
- case 'X':
- {
- while(itSource < iSize)
- {
- if ((cSource[itSource]>='0'&&cSource[itSource]<='9') || (cSource[itSource]>='a' && cSource[itSource]<='z') || (cSource[itSource]>='A' && cSource[itSource]<='Z'))
- {
- //cPurpose.push_back(cSource[itSource]);
- cPurpose += cSource[itSource];
- itSource++;
- break;
- }
- itSource++;
- }
- break;
- }
- break;
- case 'A':
- {
- while(itSource < iSize)
- {
- if ((cSource[itSource]>='a' && cSource[itSource]<='z') || (cSource[itSource]>='A' && cSource[itSource]<='Z'))
- {
- //cPurpose.push_back(cSource[itSource]);
- cPurpose += cSource[itSource];
- itSource++;
- break;
- }
- itSource++;
- }
- break;
- }
- break;
- case '9':
- {
- while(itSource < iSize)
- {
- if (cSource[itSource]>='0'&&cSource[itSource]<='9')
- {
- //cPurpose.push_back(cSource[itSource]);
- cPurpose += cSource[itSource];
- itSource++;
- break;
- }
- itSource++;
- }
- break;
- }
- case '*':
- {
- cPurpose.append(cSource,itSource,iSize-itSource);
- itSource = iSize-1;
- break;
- }
- case '\\':
- break;
- case '>':
- {
- for(std::string::iterator it = cSource.begin();it != cSource.end(); it++)
- {
- *it = toupper(*it);
- }
- break;
- }
- case '<':
- {
- for(std::string::iterator it = cSource.begin();it != cSource.end(); it++)
- {
- *it = tolower(*it);
- }
- break;
- }
- case '=':
+ }
+ itSource++;
+ }
+ break;
+ } break;
+ case 'A': {
+ while (itSource < iSize) {
+ if ((cSource[itSource] >= 'a' && cSource[itSource] <= 'z') ||
+ (cSource[itSource] >= 'A' && cSource[itSource] <= 'Z')) {
+ // cPurpose.push_back(cSource[itSource]);
+ cPurpose += cSource[itSource];
+ itSource++;
break;
- default:
- //cPurpose.push_back(letter);
- cPurpose += letter;
+ }
+ itSource++;
+ }
+ break;
+ } break;
+ case '9': {
+ while (itSource < iSize) {
+ if (cSource[itSource] >= '0' && cSource[itSource] <= '9') {
+ // cPurpose.push_back(cSource[itSource]);
+ cPurpose += cSource[itSource];
+ itSource++;
break;
+ }
+ itSource++;
}
+ break;
+ }
+ case '*': {
+ cPurpose.append(cSource, itSource, iSize - itSource);
+ itSource = iSize - 1;
+ break;
+ }
+ case '\\':
+ break;
+ case '>': {
+ for (std::string::iterator it = cSource.begin(); it != cSource.end();
+ it++) {
+ *it = toupper(*it);
+ }
+ break;
+ }
+ case '<': {
+ for (std::string::iterator it = cSource.begin(); it != cSource.end();
+ it++) {
+ *it = tolower(*it);
+ }
+ break;
+ }
+ case '=':
+ break;
+ default:
+ // cPurpose.push_back(letter);
+ cPurpose += letter;
+ break;
}
+ }
}
-FX_BOOL util::scand(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- v8::Isolate* isolate = GetIsolate(cc);
- int iSize = params.size();
- if (iSize < 2)
- return FALSE;
-
- CFX_WideString sFormat = params[0].ToCFXWideString();
- CFX_WideString sDate = params[1].ToCFXWideString();
- double dDate = JS_GetDateTime();
- if (sDate.GetLength() > 0)
- {
- FX_BOOL bWrongFormat = FALSE;
- dDate = CJS_PublicMethods::MakeRegularDate(sDate,sFormat,bWrongFormat);
- }
-
- if (!JS_PortIsNan(dDate))
- {
- CJS_Date date(isolate,dDate);
- vRet = date;
- }
- else
- {
- vRet.SetNull();
- }
+FX_BOOL util::scand(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ v8::Isolate* isolate = GetIsolate(cc);
+ int iSize = params.size();
+ if (iSize < 2)
+ return FALSE;
- return TRUE;
+ CFX_WideString sFormat = params[0].ToCFXWideString();
+ CFX_WideString sDate = params[1].ToCFXWideString();
+ double dDate = JS_GetDateTime();
+ if (sDate.GetLength() > 0) {
+ FX_BOOL bWrongFormat = FALSE;
+ dDate = CJS_PublicMethods::MakeRegularDate(sDate, sFormat, bWrongFormat);
+ }
+
+ if (!JS_PortIsNan(dDate)) {
+ CJS_Date date(isolate, dDate);
+ vRet = date;
+ } else {
+ vRet.SetNull();
+ }
+
+ return TRUE;
}
-int64_t FX_atoi64(const char *nptr)
-{
- int c; /* current char */
- int64_t total; /* current total */
- int sign; /* if '-', then negative, otherwise positive */
+int64_t FX_atoi64(const char* nptr) {
+ int c; /* current char */
+ int64_t total; /* current total */
+ int sign; /* if '-', then negative, otherwise positive */
- /* skip whitespace */
- while ( isspace((int)(unsigned char)*nptr) )
- ++nptr;
+ /* skip whitespace */
+ while (isspace((int)(unsigned char)*nptr))
+ ++nptr;
- c = (int)(unsigned char)*nptr++;
- sign = c; /* save sign indication */
- if (c == '-' || c == '+')
- c = (int)(unsigned char)*nptr++; /* skip sign */
+ c = (int)(unsigned char)*nptr++;
+ sign = c; /* save sign indication */
+ if (c == '-' || c == '+')
+ c = (int)(unsigned char)*nptr++; /* skip sign */
- total = 0;
+ total = 0;
- while (isdigit(c)) {
- total = 10 * total + (c - '0'); /* accumulate digit */
- c = (int)(unsigned char)*nptr++; /* get next char */
- }
+ while (isdigit(c)) {
+ total = 10 * total + (c - '0'); /* accumulate digit */
+ c = (int)(unsigned char)*nptr++; /* get next char */
+ }
- return sign == '-' ? -total : total;
+ return sign == '-' ? -total : total;
}
-FX_BOOL util::byteToChar(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)
-{
- int iSize = params.size();
- if (iSize == 0)
- return FALSE;
- int nByte = params[0].ToInt();
- unsigned char cByte = (unsigned char)nByte;
- CFX_WideString csValue;
- csValue.Format(L"%c", cByte);
- vRet = csValue.c_str();
- return TRUE;
+FX_BOOL util::byteToChar(IFXJS_Context* cc,
+ const CJS_Parameters& params,
+ CJS_Value& vRet,
+ CFX_WideString& sError) {
+ int iSize = params.size();
+ if (iSize == 0)
+ return FALSE;
+ int nByte = params[0].ToInt();
+ unsigned char cByte = (unsigned char)nByte;
+ CFX_WideString csValue;
+ csValue.Format(L"%c", cByte);
+ vRet = csValue.c_str();
+ return TRUE;
}
diff --git a/fpdfsdk/src/jsapi/fxjs_v8.cpp b/fpdfsdk/src/jsapi/fxjs_v8.cpp
index c4811bf096..b71cee6bcc 100644
--- a/fpdfsdk/src/jsapi/fxjs_v8.cpp
+++ b/fpdfsdk/src/jsapi/fxjs_v8.cpp
@@ -12,772 +12,897 @@
#include <cmath>
#include <limits>
-#define VALUE_NAME_STRING L"string"
-#define VALUE_NAME_NUMBER L"number"
-#define VALUE_NAME_BOOLEAN L"boolean"
-#define VALUE_NAME_DATE L"date"
-#define VALUE_NAME_OBJECT L"object"
-#define VALUE_NAME_FXOBJ L"fxobj"
-#define VALUE_NAME_NULL L"null"
-#define VALUE_NAME_UNDEFINED L"undefined"
-
-const static FX_DWORD g_nan[2] = {0,0x7FF80000 };
-static double GetNan()
-{
+#define VALUE_NAME_STRING L"string"
+#define VALUE_NAME_NUMBER L"number"
+#define VALUE_NAME_BOOLEAN L"boolean"
+#define VALUE_NAME_DATE L"date"
+#define VALUE_NAME_OBJECT L"object"
+#define VALUE_NAME_FXOBJ L"fxobj"
+#define VALUE_NAME_NULL L"null"
+#define VALUE_NAME_UNDEFINED L"undefined"
+
+const static FX_DWORD g_nan[2] = {0, 0x7FF80000};
+static double GetNan() {
return *(double*)g_nan;
}
static unsigned int g_embedderDataSlot = 0u;
-
-class CJS_PrivateData
-{
-public:
- CJS_PrivateData():ObjDefID(-1), pPrivate(NULL) {}
- int ObjDefID;
- void* pPrivate;
+class CJS_PrivateData {
+ public:
+ CJS_PrivateData() : ObjDefID(-1), pPrivate(NULL) {}
+ int ObjDefID;
+ void* pPrivate;
};
-
-class CJS_ObjDefintion
-{
-public:
- CJS_ObjDefintion(v8::Isolate* isolate, const wchar_t* sObjName, FXJSOBJTYPE eObjType, LP_CONSTRUCTOR pConstructor, LP_DESTRUCTOR pDestructor):
- objName(sObjName), objType(eObjType), m_pConstructor(pConstructor), m_pDestructor(pDestructor),m_bSetAsGlobalObject(FALSE)
- {
- v8::Isolate::Scope isolate_scope(isolate);
- v8::HandleScope handle_scope(isolate);
-
- v8::Local<v8::ObjectTemplate> objTemplate = v8::ObjectTemplate::New(isolate);
- objTemplate->SetInternalFieldCount(2);
- m_objTemplate.Reset(isolate, objTemplate);
-
- //Document as the global object.
- if(FXSYS_wcscmp(sObjName, L"Document") == 0)
- {
- m_bSetAsGlobalObject = TRUE;
- }
-
- }
- ~CJS_ObjDefintion()
- {
- m_objTemplate.Reset();
- m_StaticObj.Reset();
- }
-public:
- const wchar_t* objName;
- FXJSOBJTYPE objType;
- LP_CONSTRUCTOR m_pConstructor;
- LP_DESTRUCTOR m_pDestructor;
- FX_BOOL m_bSetAsGlobalObject;
-
- v8::Global<v8::ObjectTemplate> m_objTemplate;
- v8::Global<v8::Object> m_StaticObj;
+class CJS_ObjDefintion {
+ public:
+ CJS_ObjDefintion(v8::Isolate* isolate,
+ const wchar_t* sObjName,
+ FXJSOBJTYPE eObjType,
+ LP_CONSTRUCTOR pConstructor,
+ LP_DESTRUCTOR pDestructor)
+ : objName(sObjName),
+ objType(eObjType),
+ m_pConstructor(pConstructor),
+ m_pDestructor(pDestructor),
+ m_bSetAsGlobalObject(FALSE) {
+ v8::Isolate::Scope isolate_scope(isolate);
+ v8::HandleScope handle_scope(isolate);
+
+ v8::Local<v8::ObjectTemplate> objTemplate =
+ v8::ObjectTemplate::New(isolate);
+ objTemplate->SetInternalFieldCount(2);
+ m_objTemplate.Reset(isolate, objTemplate);
+
+ // Document as the global object.
+ if (FXSYS_wcscmp(sObjName, L"Document") == 0) {
+ m_bSetAsGlobalObject = TRUE;
+ }
+ }
+ ~CJS_ObjDefintion() {
+ m_objTemplate.Reset();
+ m_StaticObj.Reset();
+ }
+
+ public:
+ const wchar_t* objName;
+ FXJSOBJTYPE objType;
+ LP_CONSTRUCTOR m_pConstructor;
+ LP_DESTRUCTOR m_pDestructor;
+ FX_BOOL m_bSetAsGlobalObject;
+
+ v8::Global<v8::ObjectTemplate> m_objTemplate;
+ v8::Global<v8::Object> m_StaticObj;
};
-int JS_DefineObj(IJS_Runtime* pJSRuntime, const wchar_t* sObjName, FXJSOBJTYPE eObjType, LP_CONSTRUCTOR pConstructor, LP_DESTRUCTOR pDestructor)
-{
- v8::Isolate* isolate = (v8::Isolate*)pJSRuntime;
- v8::Isolate::Scope isolate_scope(isolate);
- v8::HandleScope handle_scope(isolate);
- CFX_PtrArray* pArray = (CFX_PtrArray*)isolate->GetData(g_embedderDataSlot);
- if(!pArray)
- {
- pArray = new CFX_PtrArray();
- isolate->SetData(g_embedderDataSlot, pArray);
- }
- CJS_ObjDefintion* pObjDef = new CJS_ObjDefintion(isolate, sObjName, eObjType, pConstructor, pDestructor);
- pArray->Add(pObjDef);
- return pArray->GetSize()-1;
-}
-
-int JS_DefineObjMethod(IJS_Runtime* pJSRuntime, int nObjDefnID, const wchar_t* sMethodName, v8::FunctionCallback pMethodCall)
-{
- v8::Isolate* isolate = (v8::Isolate*)pJSRuntime;
- v8::Isolate::Scope isolate_scope(isolate);
- v8::HandleScope handle_scope(isolate);
-
- CFX_WideString ws = CFX_WideString(sMethodName);
- CFX_ByteString bsMethodName = ws.UTF8Encode();
-
- CFX_PtrArray* pArray = (CFX_PtrArray*)isolate->GetData(g_embedderDataSlot);
- if(!pArray) return 0;
-
- if(nObjDefnID<0 || nObjDefnID>= pArray->GetSize()) return 0;
- CJS_ObjDefintion* pObjDef = (CJS_ObjDefintion*)pArray->GetAt(nObjDefnID);
- v8::Local<v8::ObjectTemplate> objTemp = v8::Local<v8::ObjectTemplate>::New(isolate, pObjDef->m_objTemplate);
- objTemp->Set(v8::String::NewFromUtf8(isolate, bsMethodName.c_str(), v8::NewStringType::kNormal).ToLocalChecked(), v8::FunctionTemplate::New(isolate, pMethodCall), v8::ReadOnly);
- pObjDef->m_objTemplate.Reset(isolate,objTemp);
- return 0;
-}
-
-int JS_DefineObjProperty(IJS_Runtime* pJSRuntime, int nObjDefnID, const wchar_t* sPropName, v8::AccessorGetterCallback pPropGet, v8::AccessorSetterCallback pPropPut)
-{
- v8::Isolate* isolate = (v8::Isolate*)pJSRuntime;
- v8::Isolate::Scope isolate_scope(isolate);
- v8::HandleScope handle_scope(isolate);
-
- CFX_WideString ws = CFX_WideString(sPropName);
- CFX_ByteString bsPropertyName = ws.UTF8Encode();
-
- CFX_PtrArray* pArray = (CFX_PtrArray*)isolate->GetData(g_embedderDataSlot);
- if(!pArray) return 0;
-
- if(nObjDefnID<0 || nObjDefnID>= pArray->GetSize()) return 0;
- CJS_ObjDefintion* pObjDef = (CJS_ObjDefintion*)pArray->GetAt(nObjDefnID);
- v8::Local<v8::ObjectTemplate> objTemp = v8::Local<v8::ObjectTemplate>::New(isolate, pObjDef->m_objTemplate);
- objTemp->SetAccessor(v8::String::NewFromUtf8(isolate, bsPropertyName.c_str(), v8::NewStringType::kNormal).ToLocalChecked(), pPropGet, pPropPut);
- pObjDef->m_objTemplate.Reset(isolate,objTemp);
- return 0;
-}
-
-int JS_DefineObjAllProperties(IJS_Runtime* pJSRuntime, int nObjDefnID, v8::NamedPropertyQueryCallback pPropQurey, v8::NamedPropertyGetterCallback pPropGet, v8::NamedPropertySetterCallback pPropPut, v8::NamedPropertyDeleterCallback pPropDel)
-{
- v8::Isolate* isolate = (v8::Isolate*)pJSRuntime;
- v8::Isolate::Scope isolate_scope(isolate);
- v8::HandleScope handle_scope(isolate);
-
- CFX_PtrArray* pArray = (CFX_PtrArray*)isolate->GetData(g_embedderDataSlot);
- if(!pArray) return 0;
-
- if(nObjDefnID<0 || nObjDefnID>= pArray->GetSize()) return 0;
- CJS_ObjDefintion* pObjDef = (CJS_ObjDefintion*)pArray->GetAt(nObjDefnID);
- v8::Local<v8::ObjectTemplate> objTemp = v8::Local<v8::ObjectTemplate>::New(isolate, pObjDef->m_objTemplate);
- objTemp->SetNamedPropertyHandler(pPropGet, pPropPut, pPropQurey, pPropDel);
- pObjDef->m_objTemplate.Reset(isolate,objTemp);
- return 0;
-}
-
-int JS_DefineObjConst(IJS_Runtime* pJSRuntime, int nObjDefnID, const wchar_t* sConstName, v8::Local<v8::Value> pDefault)
-{
- v8::Isolate* isolate = (v8::Isolate*)pJSRuntime;
- v8::Isolate::Scope isolate_scope(isolate);
- v8::HandleScope handle_scope(isolate);
-
- CFX_PtrArray* pArray = (CFX_PtrArray*)isolate->GetData(g_embedderDataSlot);
- if(!pArray) return 0;
-
- CFX_WideString ws = CFX_WideString(sConstName);
- CFX_ByteString bsConstName = ws.UTF8Encode();
-
- if(nObjDefnID<0 || nObjDefnID>= pArray->GetSize()) return 0;
- CJS_ObjDefintion* pObjDef = (CJS_ObjDefintion*)pArray->GetAt(nObjDefnID);
- v8::Local<v8::ObjectTemplate> objTemp = v8::Local<v8::ObjectTemplate>::New(isolate, pObjDef->m_objTemplate);
- objTemp->Set(isolate, bsConstName.c_str(), pDefault);
- pObjDef->m_objTemplate.Reset(isolate,objTemp);
- return 0;
-}
-
-static v8::Global<v8::ObjectTemplate>& _getGlobalObjectTemplate(IJS_Runtime* pJSRuntime)
-{
- v8::Isolate* isolate = (v8::Isolate*)pJSRuntime;
- v8::Isolate::Scope isolate_scope(isolate);
- v8::HandleScope handle_scope(isolate);
-
- CFX_PtrArray* pArray = (CFX_PtrArray*)isolate->GetData(g_embedderDataSlot);
- ASSERT(pArray != NULL);
- for(int i=0; i<pArray->GetSize(); i++)
- {
- CJS_ObjDefintion* pObjDef = (CJS_ObjDefintion*)pArray->GetAt(i);
- if(pObjDef->m_bSetAsGlobalObject)
- return pObjDef->m_objTemplate;
- }
- static v8::Global<v8::ObjectTemplate> gloabalObjectTemplate;
- return gloabalObjectTemplate;
-}
-
-int JS_DefineGlobalMethod(IJS_Runtime* pJSRuntime, const wchar_t* sMethodName, v8::FunctionCallback pMethodCall)
-{
- v8::Isolate* isolate = (v8::Isolate*)pJSRuntime;
- v8::Isolate::Scope isolate_scope(isolate);
- v8::HandleScope handle_scope(isolate);
-
- CFX_WideString ws = CFX_WideString(sMethodName);
- CFX_ByteString bsMethodName = ws.UTF8Encode();
-
- v8::Local<v8::FunctionTemplate> funTempl = v8::FunctionTemplate::New(isolate, pMethodCall);
- v8::Local<v8::ObjectTemplate> objTemp;
-
- v8::Global<v8::ObjectTemplate>& globalObjTemp = _getGlobalObjectTemplate(pJSRuntime);
- if(globalObjTemp.IsEmpty())
- objTemp = v8::ObjectTemplate::New(isolate);
- else
- objTemp = v8::Local<v8::ObjectTemplate>::New(isolate, globalObjTemp);
- objTemp->Set(v8::String::NewFromUtf8(isolate, bsMethodName.c_str(), v8::NewStringType::kNormal).ToLocalChecked(), funTempl, v8::ReadOnly);
-
- globalObjTemp.Reset(isolate,objTemp);
-
- return 0;
-}
-
-int JS_DefineGlobalConst(IJS_Runtime* pJSRuntime, const wchar_t* sConstName, v8::Local<v8::Value> pDefault)
-{
- v8::Isolate* isolate = (v8::Isolate*)pJSRuntime;
- v8::Isolate::Scope isolate_scope(isolate);
- v8::HandleScope handle_scope(isolate);
-
- CFX_WideString ws = CFX_WideString(sConstName);
- CFX_ByteString bsConst= ws.UTF8Encode();
-
- v8::Local<v8::ObjectTemplate> objTemp;
-
- v8::Global<v8::ObjectTemplate>& globalObjTemp = _getGlobalObjectTemplate(pJSRuntime);
- if(globalObjTemp.IsEmpty())
- objTemp = v8::ObjectTemplate::New(isolate);
- else
- objTemp = v8::Local<v8::ObjectTemplate>::New(isolate, globalObjTemp);
- objTemp->Set(v8::String::NewFromUtf8(isolate, bsConst.c_str(), v8::NewStringType::kNormal).ToLocalChecked(), pDefault, v8::ReadOnly);
-
- globalObjTemp.Reset(isolate,objTemp);
-
- return 0;
-}
-
-
-void JS_InitialRuntime(IJS_Runtime* pJSRuntime,IFXJS_Runtime* pFXRuntime, IFXJS_Context* context, v8::Global<v8::Context>& v8PersistentContext)
-{
- v8::Isolate* isolate = (v8::Isolate*)pJSRuntime;
- v8::Isolate::Scope isolate_scope(isolate);
- v8::HandleScope handle_scope(isolate);
-
- v8::Global<v8::ObjectTemplate>& globalObjTemp = _getGlobalObjectTemplate(pJSRuntime);
- v8::Local<v8::Context> v8Context = v8::Context::New(isolate, NULL, v8::Local<v8::ObjectTemplate>::New(isolate, globalObjTemp));
- v8::Context::Scope context_scope(v8Context);
-
- v8::Local<v8::External> ptr = v8::External::New(isolate, pFXRuntime);
- v8Context->SetEmbedderData(1, ptr);
-
- CFX_PtrArray* pArray = (CFX_PtrArray*)isolate->GetData(g_embedderDataSlot);
- if(!pArray) return;
-
- for(int i=0; i<pArray->GetSize(); i++)
- {
- CJS_ObjDefintion* pObjDef = (CJS_ObjDefintion*)pArray->GetAt(i);
- CFX_WideString ws = CFX_WideString(pObjDef->objName);
- CFX_ByteString bs = ws.UTF8Encode();
- v8::Local<v8::String> objName = v8::String::NewFromUtf8(isolate, bs.c_str(), v8::NewStringType::kNormal, bs.GetLength()).ToLocalChecked();
-
-
- if(pObjDef->objType == JS_DYNAMIC)
- {
- //Document is set as global object, need to construct it first.
- if(ws.Equal(L"Document"))
- {
-
- CJS_PrivateData* pPrivateData = new CJS_PrivateData;
- pPrivateData->ObjDefID = i;
-
- v8Context->Global()->GetPrototype()->ToObject(v8Context).ToLocalChecked()->SetAlignedPointerInInternalField(0, pPrivateData);
-
- if(pObjDef->m_pConstructor)
- pObjDef->m_pConstructor(context, v8Context->Global()->GetPrototype()->ToObject(v8Context).ToLocalChecked(), v8Context->Global()->GetPrototype()->ToObject(v8Context).ToLocalChecked());
- }
- }
- else
- {
- v8::Local<v8::Object> obj = JS_NewFxDynamicObj(pJSRuntime, context, i);
- v8Context->Global()->Set(v8Context, objName, obj).FromJust();
- pObjDef->m_StaticObj.Reset(isolate, obj);
- }
- }
- v8PersistentContext.Reset(isolate, v8Context);
-}
-
-void JS_ReleaseRuntime(IJS_Runtime* pJSRuntime, v8::Global<v8::Context>& v8PersistentContext)
-{
- v8::Isolate* isolate = (v8::Isolate*)pJSRuntime;
- v8::Isolate::Scope isolate_scope(isolate);
- v8::HandleScope handle_scope(isolate);
- v8::Local<v8::Context> context = v8::Local<v8::Context>::New(isolate, v8PersistentContext);
- v8::Context::Scope context_scope(context);
-
- CFX_PtrArray* pArray = (CFX_PtrArray*)isolate->GetData(g_embedderDataSlot);
- if(!pArray) return ;
-
- for(int i=0; i<pArray->GetSize(); i++)
- {
- CJS_ObjDefintion* pObjDef = (CJS_ObjDefintion*)pArray->GetAt(i);
- if(!pObjDef->m_StaticObj.IsEmpty())
- {
- v8::Local<v8::Object> pObj = v8::Local<v8::Object>::New(isolate, pObjDef->m_StaticObj);
- if(pObjDef->m_pDestructor)
- pObjDef->m_pDestructor(pObj);
- JS_FreePrivate(pObj);
- }
- delete pObjDef;
- }
- delete pArray;
- isolate->SetData(g_embedderDataSlot,NULL);
-}
-
-void JS_Initial(unsigned int embedderDataSlot)
-{
- g_embedderDataSlot = embedderDataSlot;
-}
-void JS_Release()
-{
-
-}
-int JS_Parse(IJS_Runtime* pJSRuntime, IFXJS_Context* pJSContext, const wchar_t* script, long length, FXJSErr* perror)
-{
- v8::Isolate* isolate = (v8::Isolate*)pJSRuntime;
- v8::Isolate::Scope isolate_scope(isolate);
- v8::TryCatch try_catch(isolate);
-
- CFX_WideString wsScript(script);
- CFX_ByteString bsScript = wsScript.UTF8Encode();
-
-
- v8::Local<v8::Context> context = isolate->GetCurrentContext();
- v8::Local<v8::Script> compiled_script;
- if (!v8::Script::Compile(context, v8::String::NewFromUtf8(isolate, bsScript.c_str(), v8::NewStringType::kNormal, bsScript.GetLength()).ToLocalChecked()).ToLocal(&compiled_script)) {
- v8::String::Utf8Value error(try_catch.Exception());
- return -1;
- }
- return 0;
-}
-
-int JS_Execute(IJS_Runtime* pJSRuntime, IFXJS_Context* pJSContext, const wchar_t* script, long length, FXJSErr* perror)
-{
- v8::Isolate* isolate = (v8::Isolate*)pJSRuntime;
- v8::Isolate::Scope isolate_scope(isolate);
- v8::TryCatch try_catch(isolate);
-
- CFX_WideString wsScript(script);
- CFX_ByteString bsScript = wsScript.UTF8Encode();
-
- v8::Local<v8::Context> context = isolate->GetCurrentContext();
- v8::Local<v8::Script> compiled_script;
- if (!v8::Script::Compile(context, v8::String::NewFromUtf8(isolate, bsScript.c_str(), v8::NewStringType::kNormal, bsScript.GetLength()).ToLocalChecked()).ToLocal(&compiled_script)) {
- v8::String::Utf8Value error(try_catch.Exception());
- return -1;
- }
+int JS_DefineObj(IJS_Runtime* pJSRuntime,
+ const wchar_t* sObjName,
+ FXJSOBJTYPE eObjType,
+ LP_CONSTRUCTOR pConstructor,
+ LP_DESTRUCTOR pDestructor) {
+ v8::Isolate* isolate = (v8::Isolate*)pJSRuntime;
+ v8::Isolate::Scope isolate_scope(isolate);
+ v8::HandleScope handle_scope(isolate);
+ CFX_PtrArray* pArray = (CFX_PtrArray*)isolate->GetData(g_embedderDataSlot);
+ if (!pArray) {
+ pArray = new CFX_PtrArray();
+ isolate->SetData(g_embedderDataSlot, pArray);
+ }
+ CJS_ObjDefintion* pObjDef = new CJS_ObjDefintion(isolate, sObjName, eObjType,
+ pConstructor, pDestructor);
+ pArray->Add(pObjDef);
+ return pArray->GetSize() - 1;
+}
+
+int JS_DefineObjMethod(IJS_Runtime* pJSRuntime,
+ int nObjDefnID,
+ const wchar_t* sMethodName,
+ v8::FunctionCallback pMethodCall) {
+ v8::Isolate* isolate = (v8::Isolate*)pJSRuntime;
+ v8::Isolate::Scope isolate_scope(isolate);
+ v8::HandleScope handle_scope(isolate);
+
+ CFX_WideString ws = CFX_WideString(sMethodName);
+ CFX_ByteString bsMethodName = ws.UTF8Encode();
+
+ CFX_PtrArray* pArray = (CFX_PtrArray*)isolate->GetData(g_embedderDataSlot);
+ if (!pArray)
+ return 0;
+
+ if (nObjDefnID < 0 || nObjDefnID >= pArray->GetSize())
+ return 0;
+ CJS_ObjDefintion* pObjDef = (CJS_ObjDefintion*)pArray->GetAt(nObjDefnID);
+ v8::Local<v8::ObjectTemplate> objTemp =
+ v8::Local<v8::ObjectTemplate>::New(isolate, pObjDef->m_objTemplate);
+ objTemp->Set(v8::String::NewFromUtf8(isolate, bsMethodName.c_str(),
+ v8::NewStringType::kNormal)
+ .ToLocalChecked(),
+ v8::FunctionTemplate::New(isolate, pMethodCall), v8::ReadOnly);
+ pObjDef->m_objTemplate.Reset(isolate, objTemp);
+ return 0;
+}
+
+int JS_DefineObjProperty(IJS_Runtime* pJSRuntime,
+ int nObjDefnID,
+ const wchar_t* sPropName,
+ v8::AccessorGetterCallback pPropGet,
+ v8::AccessorSetterCallback pPropPut) {
+ v8::Isolate* isolate = (v8::Isolate*)pJSRuntime;
+ v8::Isolate::Scope isolate_scope(isolate);
+ v8::HandleScope handle_scope(isolate);
+
+ CFX_WideString ws = CFX_WideString(sPropName);
+ CFX_ByteString bsPropertyName = ws.UTF8Encode();
+
+ CFX_PtrArray* pArray = (CFX_PtrArray*)isolate->GetData(g_embedderDataSlot);
+ if (!pArray)
+ return 0;
+
+ if (nObjDefnID < 0 || nObjDefnID >= pArray->GetSize())
+ return 0;
+ CJS_ObjDefintion* pObjDef = (CJS_ObjDefintion*)pArray->GetAt(nObjDefnID);
+ v8::Local<v8::ObjectTemplate> objTemp =
+ v8::Local<v8::ObjectTemplate>::New(isolate, pObjDef->m_objTemplate);
+ objTemp->SetAccessor(v8::String::NewFromUtf8(isolate, bsPropertyName.c_str(),
+ v8::NewStringType::kNormal)
+ .ToLocalChecked(),
+ pPropGet, pPropPut);
+ pObjDef->m_objTemplate.Reset(isolate, objTemp);
+ return 0;
+}
+
+int JS_DefineObjAllProperties(IJS_Runtime* pJSRuntime,
+ int nObjDefnID,
+ v8::NamedPropertyQueryCallback pPropQurey,
+ v8::NamedPropertyGetterCallback pPropGet,
+ v8::NamedPropertySetterCallback pPropPut,
+ v8::NamedPropertyDeleterCallback pPropDel) {
+ v8::Isolate* isolate = (v8::Isolate*)pJSRuntime;
+ v8::Isolate::Scope isolate_scope(isolate);
+ v8::HandleScope handle_scope(isolate);
+
+ CFX_PtrArray* pArray = (CFX_PtrArray*)isolate->GetData(g_embedderDataSlot);
+ if (!pArray)
+ return 0;
+
+ if (nObjDefnID < 0 || nObjDefnID >= pArray->GetSize())
+ return 0;
+ CJS_ObjDefintion* pObjDef = (CJS_ObjDefintion*)pArray->GetAt(nObjDefnID);
+ v8::Local<v8::ObjectTemplate> objTemp =
+ v8::Local<v8::ObjectTemplate>::New(isolate, pObjDef->m_objTemplate);
+ objTemp->SetNamedPropertyHandler(pPropGet, pPropPut, pPropQurey, pPropDel);
+ pObjDef->m_objTemplate.Reset(isolate, objTemp);
+ return 0;
+}
+
+int JS_DefineObjConst(IJS_Runtime* pJSRuntime,
+ int nObjDefnID,
+ const wchar_t* sConstName,
+ v8::Local<v8::Value> pDefault) {
+ v8::Isolate* isolate = (v8::Isolate*)pJSRuntime;
+ v8::Isolate::Scope isolate_scope(isolate);
+ v8::HandleScope handle_scope(isolate);
+
+ CFX_PtrArray* pArray = (CFX_PtrArray*)isolate->GetData(g_embedderDataSlot);
+ if (!pArray)
+ return 0;
+
+ CFX_WideString ws = CFX_WideString(sConstName);
+ CFX_ByteString bsConstName = ws.UTF8Encode();
+
+ if (nObjDefnID < 0 || nObjDefnID >= pArray->GetSize())
+ return 0;
+ CJS_ObjDefintion* pObjDef = (CJS_ObjDefintion*)pArray->GetAt(nObjDefnID);
+ v8::Local<v8::ObjectTemplate> objTemp =
+ v8::Local<v8::ObjectTemplate>::New(isolate, pObjDef->m_objTemplate);
+ objTemp->Set(isolate, bsConstName.c_str(), pDefault);
+ pObjDef->m_objTemplate.Reset(isolate, objTemp);
+ return 0;
+}
+
+static v8::Global<v8::ObjectTemplate>& _getGlobalObjectTemplate(
+ IJS_Runtime* pJSRuntime) {
+ v8::Isolate* isolate = (v8::Isolate*)pJSRuntime;
+ v8::Isolate::Scope isolate_scope(isolate);
+ v8::HandleScope handle_scope(isolate);
+
+ CFX_PtrArray* pArray = (CFX_PtrArray*)isolate->GetData(g_embedderDataSlot);
+ ASSERT(pArray != NULL);
+ for (int i = 0; i < pArray->GetSize(); i++) {
+ CJS_ObjDefintion* pObjDef = (CJS_ObjDefintion*)pArray->GetAt(i);
+ if (pObjDef->m_bSetAsGlobalObject)
+ return pObjDef->m_objTemplate;
+ }
+ static v8::Global<v8::ObjectTemplate> gloabalObjectTemplate;
+ return gloabalObjectTemplate;
+}
+
+int JS_DefineGlobalMethod(IJS_Runtime* pJSRuntime,
+ const wchar_t* sMethodName,
+ v8::FunctionCallback pMethodCall) {
+ v8::Isolate* isolate = (v8::Isolate*)pJSRuntime;
+ v8::Isolate::Scope isolate_scope(isolate);
+ v8::HandleScope handle_scope(isolate);
+
+ CFX_WideString ws = CFX_WideString(sMethodName);
+ CFX_ByteString bsMethodName = ws.UTF8Encode();
+
+ v8::Local<v8::FunctionTemplate> funTempl =
+ v8::FunctionTemplate::New(isolate, pMethodCall);
+ v8::Local<v8::ObjectTemplate> objTemp;
+
+ v8::Global<v8::ObjectTemplate>& globalObjTemp =
+ _getGlobalObjectTemplate(pJSRuntime);
+ if (globalObjTemp.IsEmpty())
+ objTemp = v8::ObjectTemplate::New(isolate);
+ else
+ objTemp = v8::Local<v8::ObjectTemplate>::New(isolate, globalObjTemp);
+ objTemp->Set(v8::String::NewFromUtf8(isolate, bsMethodName.c_str(),
+ v8::NewStringType::kNormal)
+ .ToLocalChecked(),
+ funTempl, v8::ReadOnly);
+
+ globalObjTemp.Reset(isolate, objTemp);
+
+ return 0;
+}
+
+int JS_DefineGlobalConst(IJS_Runtime* pJSRuntime,
+ const wchar_t* sConstName,
+ v8::Local<v8::Value> pDefault) {
+ v8::Isolate* isolate = (v8::Isolate*)pJSRuntime;
+ v8::Isolate::Scope isolate_scope(isolate);
+ v8::HandleScope handle_scope(isolate);
+
+ CFX_WideString ws = CFX_WideString(sConstName);
+ CFX_ByteString bsConst = ws.UTF8Encode();
+
+ v8::Local<v8::ObjectTemplate> objTemp;
+
+ v8::Global<v8::ObjectTemplate>& globalObjTemp =
+ _getGlobalObjectTemplate(pJSRuntime);
+ if (globalObjTemp.IsEmpty())
+ objTemp = v8::ObjectTemplate::New(isolate);
+ else
+ objTemp = v8::Local<v8::ObjectTemplate>::New(isolate, globalObjTemp);
+ objTemp->Set(v8::String::NewFromUtf8(isolate, bsConst.c_str(),
+ v8::NewStringType::kNormal)
+ .ToLocalChecked(),
+ pDefault, v8::ReadOnly);
+
+ globalObjTemp.Reset(isolate, objTemp);
+
+ return 0;
+}
+
+void JS_InitialRuntime(IJS_Runtime* pJSRuntime,
+ IFXJS_Runtime* pFXRuntime,
+ IFXJS_Context* context,
+ v8::Global<v8::Context>& v8PersistentContext) {
+ v8::Isolate* isolate = (v8::Isolate*)pJSRuntime;
+ v8::Isolate::Scope isolate_scope(isolate);
+ v8::HandleScope handle_scope(isolate);
+
+ v8::Global<v8::ObjectTemplate>& globalObjTemp =
+ _getGlobalObjectTemplate(pJSRuntime);
+ v8::Local<v8::Context> v8Context = v8::Context::New(
+ isolate, NULL,
+ v8::Local<v8::ObjectTemplate>::New(isolate, globalObjTemp));
+ v8::Context::Scope context_scope(v8Context);
+
+ v8::Local<v8::External> ptr = v8::External::New(isolate, pFXRuntime);
+ v8Context->SetEmbedderData(1, ptr);
+
+ CFX_PtrArray* pArray = (CFX_PtrArray*)isolate->GetData(g_embedderDataSlot);
+ if (!pArray)
+ return;
+
+ for (int i = 0; i < pArray->GetSize(); i++) {
+ CJS_ObjDefintion* pObjDef = (CJS_ObjDefintion*)pArray->GetAt(i);
+ CFX_WideString ws = CFX_WideString(pObjDef->objName);
+ CFX_ByteString bs = ws.UTF8Encode();
+ v8::Local<v8::String> objName =
+ v8::String::NewFromUtf8(isolate, bs.c_str(), v8::NewStringType::kNormal,
+ bs.GetLength())
+ .ToLocalChecked();
+
+ if (pObjDef->objType == JS_DYNAMIC) {
+ // Document is set as global object, need to construct it first.
+ if (ws.Equal(L"Document")) {
+ CJS_PrivateData* pPrivateData = new CJS_PrivateData;
+ pPrivateData->ObjDefID = i;
+
+ v8Context->Global()
+ ->GetPrototype()
+ ->ToObject(v8Context)
+ .ToLocalChecked()
+ ->SetAlignedPointerInInternalField(0, pPrivateData);
+
+ if (pObjDef->m_pConstructor)
+ pObjDef->m_pConstructor(context, v8Context->Global()
+ ->GetPrototype()
+ ->ToObject(v8Context)
+ .ToLocalChecked(),
+ v8Context->Global()
+ ->GetPrototype()
+ ->ToObject(v8Context)
+ .ToLocalChecked());
+ }
+ } else {
+ v8::Local<v8::Object> obj = JS_NewFxDynamicObj(pJSRuntime, context, i);
+ v8Context->Global()->Set(v8Context, objName, obj).FromJust();
+ pObjDef->m_StaticObj.Reset(isolate, obj);
+ }
+ }
+ v8PersistentContext.Reset(isolate, v8Context);
+}
+
+void JS_ReleaseRuntime(IJS_Runtime* pJSRuntime,
+ v8::Global<v8::Context>& v8PersistentContext) {
+ v8::Isolate* isolate = (v8::Isolate*)pJSRuntime;
+ v8::Isolate::Scope isolate_scope(isolate);
+ v8::HandleScope handle_scope(isolate);
+ v8::Local<v8::Context> context =
+ v8::Local<v8::Context>::New(isolate, v8PersistentContext);
+ v8::Context::Scope context_scope(context);
+
+ CFX_PtrArray* pArray = (CFX_PtrArray*)isolate->GetData(g_embedderDataSlot);
+ if (!pArray)
+ return;
+
+ for (int i = 0; i < pArray->GetSize(); i++) {
+ CJS_ObjDefintion* pObjDef = (CJS_ObjDefintion*)pArray->GetAt(i);
+ if (!pObjDef->m_StaticObj.IsEmpty()) {
+ v8::Local<v8::Object> pObj =
+ v8::Local<v8::Object>::New(isolate, pObjDef->m_StaticObj);
+ if (pObjDef->m_pDestructor)
+ pObjDef->m_pDestructor(pObj);
+ JS_FreePrivate(pObj);
+ }
+ delete pObjDef;
+ }
+ delete pArray;
+ isolate->SetData(g_embedderDataSlot, NULL);
+}
+
+void JS_Initial(unsigned int embedderDataSlot) {
+ g_embedderDataSlot = embedderDataSlot;
+}
+void JS_Release() {}
+int JS_Parse(IJS_Runtime* pJSRuntime,
+ IFXJS_Context* pJSContext,
+ const wchar_t* script,
+ long length,
+ FXJSErr* perror) {
+ v8::Isolate* isolate = (v8::Isolate*)pJSRuntime;
+ v8::Isolate::Scope isolate_scope(isolate);
+ v8::TryCatch try_catch(isolate);
+
+ CFX_WideString wsScript(script);
+ CFX_ByteString bsScript = wsScript.UTF8Encode();
+
+ v8::Local<v8::Context> context = isolate->GetCurrentContext();
+ v8::Local<v8::Script> compiled_script;
+ if (!v8::Script::Compile(context,
+ v8::String::NewFromUtf8(isolate, bsScript.c_str(),
+ v8::NewStringType::kNormal,
+ bsScript.GetLength())
+ .ToLocalChecked())
+ .ToLocal(&compiled_script)) {
+ v8::String::Utf8Value error(try_catch.Exception());
+ return -1;
+ }
+ return 0;
+}
+
+int JS_Execute(IJS_Runtime* pJSRuntime,
+ IFXJS_Context* pJSContext,
+ const wchar_t* script,
+ long length,
+ FXJSErr* perror) {
+ v8::Isolate* isolate = (v8::Isolate*)pJSRuntime;
+ v8::Isolate::Scope isolate_scope(isolate);
+ v8::TryCatch try_catch(isolate);
+
+ CFX_WideString wsScript(script);
+ CFX_ByteString bsScript = wsScript.UTF8Encode();
+
+ v8::Local<v8::Context> context = isolate->GetCurrentContext();
+ v8::Local<v8::Script> compiled_script;
+ if (!v8::Script::Compile(context,
+ v8::String::NewFromUtf8(isolate, bsScript.c_str(),
+ v8::NewStringType::kNormal,
+ bsScript.GetLength())
+ .ToLocalChecked())
+ .ToLocal(&compiled_script)) {
+ v8::String::Utf8Value error(try_catch.Exception());
+ return -1;
+ }
+
+ v8::Local<v8::Value> result;
+ if (!compiled_script->Run(context).ToLocal(&result)) {
+ v8::String::Utf8Value error(try_catch.Exception());
+ return -1;
+ }
+ return 0;
+}
+
+v8::Local<v8::Object> JS_NewFxDynamicObj(IJS_Runtime* pJSRuntime,
+ IFXJS_Context* pJSContext,
+ int nObjDefnID) {
+ v8::Isolate* isolate = (v8::Isolate*)pJSRuntime;
+ v8::Isolate::Scope isolate_scope(isolate);
+ v8::Local<v8::Context> context = isolate->GetCurrentContext();
+ if (-1 == nObjDefnID) {
+ v8::Local<v8::ObjectTemplate> objTempl = v8::ObjectTemplate::New(isolate);
+ v8::Local<v8::Object> obj;
+ if (objTempl->NewInstance(context).ToLocal(&obj))
+ return obj;
+ return v8::Local<v8::Object>();
+ }
+
+ CFX_PtrArray* pArray = (CFX_PtrArray*)isolate->GetData(g_embedderDataSlot);
+ if (!pArray)
+ return v8::Local<v8::Object>();
+
+ if (nObjDefnID < 0 || nObjDefnID >= pArray->GetSize())
+ return v8::Local<v8::Object>();
+ CJS_ObjDefintion* pObjDef = (CJS_ObjDefintion*)pArray->GetAt(nObjDefnID);
+
+ v8::Local<v8::ObjectTemplate> objTemp =
+ v8::Local<v8::ObjectTemplate>::New(isolate, pObjDef->m_objTemplate);
+ v8::Local<v8::Object> obj;
+ if (!objTemp->NewInstance(context).ToLocal(&obj))
+ return v8::Local<v8::Object>();
+
+ CJS_PrivateData* pPrivateData = new CJS_PrivateData;
+ pPrivateData->ObjDefID = nObjDefnID;
+
+ obj->SetAlignedPointerInInternalField(0, pPrivateData);
+ if (pObjDef->m_pConstructor)
+ pObjDef->m_pConstructor(
+ pJSContext, obj,
+ context->Global()->GetPrototype()->ToObject(context).ToLocalChecked());
+
+ return obj;
+}
+
+v8::Local<v8::Object> JS_GetStaticObj(IJS_Runtime* pJSRuntime, int nObjDefnID) {
+ v8::Isolate* isolate = (v8::Isolate*)pJSRuntime;
+ v8::Isolate::Scope isolate_scope(isolate);
+
+ CFX_PtrArray* pArray = (CFX_PtrArray*)isolate->GetData(g_embedderDataSlot);
+ if (!pArray)
+ return v8::Local<v8::Object>();
+
+ if (nObjDefnID < 0 || nObjDefnID >= pArray->GetSize())
+ return v8::Local<v8::Object>();
+ CJS_ObjDefintion* pObjDef = (CJS_ObjDefintion*)pArray->GetAt(nObjDefnID);
+ v8::Local<v8::Object> obj =
+ v8::Local<v8::Object>::New(isolate, pObjDef->m_StaticObj);
+ return obj;
+}
+
+void JS_SetThisObj(IJS_Runtime* pJSRuntime, int nThisObjID) {
+ // Do nothing.
+}
+v8::Local<v8::Object> JS_GetThisObj(IJS_Runtime* pJSRuntime) {
+ // Return the global object.
+ v8::Isolate* isolate = (v8::Isolate*)pJSRuntime;
+ v8::Isolate::Scope isolate_scope(isolate);
+
+ CFX_PtrArray* pArray = (CFX_PtrArray*)isolate->GetData(g_embedderDataSlot);
+ if (!pArray)
+ return v8::Local<v8::Object>();
+
+ v8::Local<v8::Context> context = isolate->GetCurrentContext();
+ return context->Global()->GetPrototype()->ToObject(context).ToLocalChecked();
+}
+
+int JS_GetObjDefnID(v8::Local<v8::Object> pObj) {
+ if (pObj.IsEmpty() || !pObj->InternalFieldCount())
+ return -1;
+ CJS_PrivateData* pPrivateData =
+ (CJS_PrivateData*)pObj->GetAlignedPointerFromInternalField(0);
+ if (pPrivateData)
+ return pPrivateData->ObjDefID;
+ return -1;
+}
+
+IJS_Runtime* JS_GetRuntime(v8::Local<v8::Object> pObj) {
+ if (pObj.IsEmpty())
+ return NULL;
+ v8::Local<v8::Context> context = pObj->CreationContext();
+ if (context.IsEmpty())
+ return NULL;
+ return context->GetIsolate();
+}
+
+int JS_GetObjDefnID(IJS_Runtime* pJSRuntime, const wchar_t* pObjName) {
+ v8::Isolate* isolate = (v8::Isolate*)pJSRuntime;
+ v8::Isolate::Scope isolate_scope(isolate);
+
+ CFX_PtrArray* pArray = (CFX_PtrArray*)isolate->GetData(g_embedderDataSlot);
+ if (!pArray)
+ return -1;
+
+ for (int i = 0; i < pArray->GetSize(); i++) {
+ CJS_ObjDefintion* pObjDef = (CJS_ObjDefintion*)pArray->GetAt(i);
+ if (FXSYS_wcscmp(pObjDef->objName, pObjName) == 0)
+ return i;
+ }
+ return -1;
+}
+
+void JS_Error(v8::Isolate* isolate, const CFX_WideString& message) {
+ // Conversion from pdfium's wchar_t wide-strings to v8's uint16_t
+ // wide-strings isn't handled by v8, so use UTF8 as a common
+ // intermediate format.
+ CFX_ByteString utf8_message = message.UTF8Encode();
+ isolate->ThrowException(v8::String::NewFromUtf8(isolate, utf8_message.c_str(),
+ v8::NewStringType::kNormal)
+ .ToLocalChecked());
+}
+
+unsigned JS_CalcHash(const wchar_t* main, unsigned nLen) {
+ return (unsigned)FX_HashCode_String_GetW(main, nLen);
+}
+
+unsigned JS_CalcHash(const wchar_t* main) {
+ return (unsigned)FX_HashCode_String_GetW(main, FXSYS_wcslen(main));
+}
+const wchar_t* JS_GetTypeof(v8::Local<v8::Value> pObj) {
+ if (pObj.IsEmpty())
+ return NULL;
+ if (pObj->IsString())
+ return VALUE_NAME_STRING;
+ if (pObj->IsNumber())
+ return VALUE_NAME_NUMBER;
+ if (pObj->IsBoolean())
+ return VALUE_NAME_BOOLEAN;
+ if (pObj->IsDate())
+ return VALUE_NAME_DATE;
+ if (pObj->IsObject())
+ return VALUE_NAME_OBJECT;
+ if (pObj->IsNull())
+ return VALUE_NAME_NULL;
+ if (pObj->IsUndefined())
+ return VALUE_NAME_UNDEFINED;
+ return NULL;
+}
+void JS_SetPrivate(v8::Local<v8::Object> pObj, void* p) {
+ JS_SetPrivate(NULL, pObj, p);
+}
+
+void* JS_GetPrivate(v8::Local<v8::Object> pObj) {
+ return JS_GetPrivate(NULL, pObj);
+}
+
+void JS_SetPrivate(IJS_Runtime* pJSRuntime,
+ v8::Local<v8::Object> pObj,
+ void* p) {
+ if (pObj.IsEmpty() || !pObj->InternalFieldCount())
+ return;
+ CJS_PrivateData* pPrivateData =
+ (CJS_PrivateData*)pObj->GetAlignedPointerFromInternalField(0);
+ if (!pPrivateData)
+ return;
+ pPrivateData->pPrivate = p;
+}
+
+void* JS_GetPrivate(IJS_Runtime* pJSRuntime, v8::Local<v8::Object> pObj) {
+ if (pObj.IsEmpty())
+ return NULL;
+ CJS_PrivateData* pPrivateData = NULL;
+ if (pObj->InternalFieldCount())
+ pPrivateData =
+ (CJS_PrivateData*)pObj->GetAlignedPointerFromInternalField(0);
+ else {
+ // It could be a global proxy object.
+ v8::Local<v8::Value> v = pObj->GetPrototype();
+ v8::Isolate* isolate = (v8::Isolate*)pJSRuntime;
+ v8::Local<v8::Context> context = isolate->GetCurrentContext();
+ if (v->IsObject())
+ pPrivateData = (CJS_PrivateData*)v->ToObject(context)
+ .ToLocalChecked()
+ ->GetAlignedPointerFromInternalField(0);
+ }
+ if (!pPrivateData)
+ return NULL;
+ return pPrivateData->pPrivate;
+}
+
+void JS_FreePrivate(void* pPrivateData) {
+ delete (CJS_PrivateData*)pPrivateData;
+}
+
+void JS_FreePrivate(v8::Local<v8::Object> pObj) {
+ if (pObj.IsEmpty() || !pObj->InternalFieldCount())
+ return;
+ JS_FreePrivate(pObj->GetAlignedPointerFromInternalField(0));
+ pObj->SetAlignedPointerInInternalField(0, NULL);
+}
+
+v8::Local<v8::Value> JS_GetObjectValue(v8::Local<v8::Object> pObj) {
+ return pObj;
+}
+
+v8::Local<v8::String> WSToJSString(IJS_Runtime* pJSRuntime,
+ const wchar_t* PropertyName,
+ int Len = -1) {
+ CFX_WideString ws = CFX_WideString(PropertyName, Len);
+ CFX_ByteString bs = ws.UTF8Encode();
+ if (!pJSRuntime)
+ pJSRuntime = v8::Isolate::GetCurrent();
+ return v8::String::NewFromUtf8(pJSRuntime, bs.c_str(),
+ v8::NewStringType::kNormal)
+ .ToLocalChecked();
+}
+
+v8::Local<v8::Value> JS_GetObjectElement(IJS_Runtime* pJSRuntime,
+ v8::Local<v8::Object> pObj,
+ const wchar_t* PropertyName) {
+ if (pObj.IsEmpty())
+ return v8::Local<v8::Value>();
+ v8::Local<v8::Value> val;
+ if (!pObj->Get(pJSRuntime->GetCurrentContext(),
+ WSToJSString(pJSRuntime, PropertyName))
+ .ToLocal(&val))
+ return v8::Local<v8::Value>();
+ return val;
+}
+
+v8::Local<v8::Array> JS_GetObjectElementNames(IJS_Runtime* pJSRuntime,
+ v8::Local<v8::Object> pObj) {
+ if (pObj.IsEmpty())
+ return v8::Local<v8::Array>();
+ v8::Local<v8::Array> val;
+ if (!pObj->GetPropertyNames(pJSRuntime->GetCurrentContext()).ToLocal(&val))
+ return v8::Local<v8::Array>();
+ return val;
+}
+
+void JS_PutObjectString(IJS_Runtime* pJSRuntime,
+ v8::Local<v8::Object> pObj,
+ const wchar_t* PropertyName,
+ const wchar_t* sValue) // VT_string
+{
+ if (pObj.IsEmpty())
+ return;
+ pObj->Set(pJSRuntime->GetCurrentContext(),
+ WSToJSString(pJSRuntime, PropertyName),
+ WSToJSString(pJSRuntime, sValue))
+ .FromJust();
+}
+
+void JS_PutObjectNumber(IJS_Runtime* pJSRuntime,
+ v8::Local<v8::Object> pObj,
+ const wchar_t* PropertyName,
+ int nValue) {
+ if (pObj.IsEmpty())
+ return;
+ pObj->Set(pJSRuntime->GetCurrentContext(),
+ WSToJSString(pJSRuntime, PropertyName),
+ v8::Int32::New(pJSRuntime, nValue))
+ .FromJust();
+}
+
+void JS_PutObjectNumber(IJS_Runtime* pJSRuntime,
+ v8::Local<v8::Object> pObj,
+ const wchar_t* PropertyName,
+ float fValue) {
+ if (pObj.IsEmpty())
+ return;
+ pObj->Set(pJSRuntime->GetCurrentContext(),
+ WSToJSString(pJSRuntime, PropertyName),
+ v8::Number::New(pJSRuntime, (double)fValue))
+ .FromJust();
+}
+
+void JS_PutObjectNumber(IJS_Runtime* pJSRuntime,
+ v8::Local<v8::Object> pObj,
+ const wchar_t* PropertyName,
+ double dValue) {
+ if (pObj.IsEmpty())
+ return;
+ pObj->Set(pJSRuntime->GetCurrentContext(),
+ WSToJSString(pJSRuntime, PropertyName),
+ v8::Number::New(pJSRuntime, (double)dValue))
+ .FromJust();
+}
- v8::Local<v8::Value> result;
- if (!compiled_script->Run(context).ToLocal(&result)) {
- v8::String::Utf8Value error(try_catch.Exception());
- return -1;
- }
- return 0;
+void JS_PutObjectBoolean(IJS_Runtime* pJSRuntime,
+ v8::Local<v8::Object> pObj,
+ const wchar_t* PropertyName,
+ bool bValue) {
+ if (pObj.IsEmpty())
+ return;
+ pObj->Set(pJSRuntime->GetCurrentContext(),
+ WSToJSString(pJSRuntime, PropertyName),
+ v8::Boolean::New(pJSRuntime, bValue))
+ .FromJust();
}
-v8::Local<v8::Object> JS_NewFxDynamicObj(IJS_Runtime* pJSRuntime, IFXJS_Context* pJSContext, int nObjDefnID)
-{
- v8::Isolate* isolate = (v8::Isolate*)pJSRuntime;
- v8::Isolate::Scope isolate_scope(isolate);
- v8::Local<v8::Context> context = isolate->GetCurrentContext();
- if(-1 == nObjDefnID)
- {
- v8::Local<v8::ObjectTemplate> objTempl = v8::ObjectTemplate::New(isolate);
- v8::Local<v8::Object> obj;
- if (objTempl->NewInstance(context).ToLocal(&obj)) return obj;
- return v8::Local<v8::Object>();
- }
-
- CFX_PtrArray* pArray = (CFX_PtrArray*)isolate->GetData(g_embedderDataSlot);
- if(!pArray) return v8::Local<v8::Object>();
-
-
- if(nObjDefnID<0 || nObjDefnID>= pArray->GetSize()) return v8::Local<v8::Object>();
- CJS_ObjDefintion* pObjDef = (CJS_ObjDefintion*)pArray->GetAt(nObjDefnID);
-
- v8::Local<v8::ObjectTemplate> objTemp = v8::Local<v8::ObjectTemplate>::New(isolate, pObjDef->m_objTemplate);
- v8::Local<v8::Object> obj;
- if (!objTemp->NewInstance(context).ToLocal(&obj)) return v8::Local<v8::Object>();
-
- CJS_PrivateData* pPrivateData = new CJS_PrivateData;
- pPrivateData->ObjDefID = nObjDefnID;
-
- obj->SetAlignedPointerInInternalField(0, pPrivateData);
- if(pObjDef->m_pConstructor)
- pObjDef->m_pConstructor(pJSContext, obj, context->Global()->GetPrototype()->ToObject(context).ToLocalChecked());
-
- return obj;
+void JS_PutObjectObject(IJS_Runtime* pJSRuntime,
+ v8::Local<v8::Object> pObj,
+ const wchar_t* PropertyName,
+ v8::Local<v8::Object> pPut) {
+ if (pObj.IsEmpty())
+ return;
+ pObj->Set(pJSRuntime->GetCurrentContext(),
+ WSToJSString(pJSRuntime, PropertyName), pPut)
+ .FromJust();
}
-v8::Local<v8::Object> JS_GetStaticObj(IJS_Runtime* pJSRuntime, int nObjDefnID)
-{
- v8::Isolate* isolate = (v8::Isolate*)pJSRuntime;
- v8::Isolate::Scope isolate_scope(isolate);
-
- CFX_PtrArray* pArray = (CFX_PtrArray*)isolate->GetData(g_embedderDataSlot);
- if(!pArray) return v8::Local<v8::Object>();
-
- if(nObjDefnID<0 || nObjDefnID>= pArray->GetSize()) return v8::Local<v8::Object>();
- CJS_ObjDefintion* pObjDef = (CJS_ObjDefintion*)pArray->GetAt(nObjDefnID);
- v8::Local<v8::Object> obj = v8::Local<v8::Object>::New(isolate,pObjDef->m_StaticObj);
- return obj;
+void JS_PutObjectNull(IJS_Runtime* pJSRuntime,
+ v8::Local<v8::Object> pObj,
+ const wchar_t* PropertyName) {
+ if (pObj.IsEmpty())
+ return;
+ pObj->Set(pJSRuntime->GetCurrentContext(),
+ WSToJSString(pJSRuntime, PropertyName), v8::Local<v8::Object>())
+ .FromJust();
}
-void JS_SetThisObj(IJS_Runtime* pJSRuntime, int nThisObjID)
-{
- //Do nothing.
+v8::Local<v8::Array> JS_NewArray(IJS_Runtime* pJSRuntime) {
+ return v8::Array::New(pJSRuntime);
}
-v8::Local<v8::Object> JS_GetThisObj(IJS_Runtime * pJSRuntime)
-{
- //Return the global object.
- v8::Isolate* isolate = (v8::Isolate*)pJSRuntime;
- v8::Isolate::Scope isolate_scope(isolate);
- CFX_PtrArray* pArray = (CFX_PtrArray*)isolate->GetData(g_embedderDataSlot);
- if(!pArray) return v8::Local<v8::Object>();
-
- v8::Local<v8::Context> context = isolate->GetCurrentContext();
- return context->Global()->GetPrototype()->ToObject(context).ToLocalChecked();
+unsigned JS_PutArrayElement(IJS_Runtime* pJSRuntime,
+ v8::Local<v8::Array> pArray,
+ unsigned index,
+ v8::Local<v8::Value> pValue,
+ FXJSVALUETYPE eType) {
+ if (pArray.IsEmpty())
+ return 0;
+ if (pArray->Set(pJSRuntime->GetCurrentContext(), index, pValue).IsNothing())
+ return 0;
+ return 1;
}
-int JS_GetObjDefnID(v8::Local<v8::Object> pObj)
-{
- if(pObj.IsEmpty() || !pObj->InternalFieldCount()) return -1;
- CJS_PrivateData* pPrivateData = (CJS_PrivateData*)pObj->GetAlignedPointerFromInternalField(0);
- if(pPrivateData)
- return pPrivateData->ObjDefID;
- return -1;
+v8::Local<v8::Value> JS_GetArrayElement(IJS_Runtime* pJSRuntime,
+ v8::Local<v8::Array> pArray,
+ unsigned index) {
+ if (pArray.IsEmpty())
+ return v8::Local<v8::Value>();
+ v8::Local<v8::Value> val;
+ if (pArray->Get(pJSRuntime->GetCurrentContext(), index).ToLocal(&val))
+ return v8::Local<v8::Value>();
+ return val;
}
-IJS_Runtime* JS_GetRuntime(v8::Local<v8::Object> pObj)
-{
- if(pObj.IsEmpty()) return NULL;
- v8::Local<v8::Context> context = pObj->CreationContext();
- if(context.IsEmpty()) return NULL;
- return context->GetIsolate();
+unsigned JS_GetArrayLength(v8::Local<v8::Array> pArray) {
+ if (pArray.IsEmpty())
+ return 0;
+ return pArray->Length();
}
-int JS_GetObjDefnID(IJS_Runtime * pJSRuntime, const wchar_t* pObjName)
-{
- v8::Isolate* isolate = (v8::Isolate*)pJSRuntime;
- v8::Isolate::Scope isolate_scope(isolate);
-
- CFX_PtrArray* pArray = (CFX_PtrArray*)isolate->GetData(g_embedderDataSlot);
- if(!pArray) return -1;
-
- for(int i=0; i<pArray->GetSize(); i++)
- {
- CJS_ObjDefintion* pObjDef = (CJS_ObjDefintion*)pArray->GetAt(i);
- if(FXSYS_wcscmp(pObjDef->objName, pObjName) == 0)
- return i;
- }
- return -1;
+v8::Local<v8::Value> JS_NewNumber(IJS_Runtime* pJSRuntime, int number) {
+ return v8::Int32::New(pJSRuntime, number);
}
-void JS_Error(v8::Isolate* isolate, const CFX_WideString& message)
-{
- // Conversion from pdfium's wchar_t wide-strings to v8's uint16_t
- // wide-strings isn't handled by v8, so use UTF8 as a common
- // intermediate format.
- CFX_ByteString utf8_message = message.UTF8Encode();
- isolate->ThrowException(v8::String::NewFromUtf8(isolate,
- utf8_message.c_str(),
- v8::NewStringType::kNormal).ToLocalChecked());
+v8::Local<v8::Value> JS_NewNumber(IJS_Runtime* pJSRuntime, double number) {
+ return v8::Number::New(pJSRuntime, number);
}
-unsigned JS_CalcHash(const wchar_t* main, unsigned nLen)
-{
- return (unsigned)FX_HashCode_String_GetW(main, nLen);
+v8::Local<v8::Value> JS_NewNumber(IJS_Runtime* pJSRuntime, float number) {
+ return v8::Number::New(pJSRuntime, (float)number);
}
-unsigned JS_CalcHash(const wchar_t* main)
-{
- return (unsigned)FX_HashCode_String_GetW(main, FXSYS_wcslen(main));
-}
-const wchar_t* JS_GetTypeof(v8::Local<v8::Value> pObj)
-{
- if(pObj.IsEmpty()) return NULL;
- if(pObj->IsString())
- return VALUE_NAME_STRING;
- if(pObj->IsNumber())
- return VALUE_NAME_NUMBER;
- if(pObj->IsBoolean())
- return VALUE_NAME_BOOLEAN;
- if(pObj->IsDate())
- return VALUE_NAME_DATE;
- if(pObj->IsObject())
- return VALUE_NAME_OBJECT;
- if(pObj->IsNull())
- return VALUE_NAME_NULL;
- if(pObj->IsUndefined())
- return VALUE_NAME_UNDEFINED;
- return NULL;
-
-}
-void JS_SetPrivate(v8::Local<v8::Object> pObj, void* p)
-{
- JS_SetPrivate(NULL, pObj, p);
+v8::Local<v8::Value> JS_NewBoolean(IJS_Runtime* pJSRuntime, bool b) {
+ return v8::Boolean::New(pJSRuntime, b);
}
-void* JS_GetPrivate(v8::Local<v8::Object> pObj)
-{
- return JS_GetPrivate(NULL,pObj);
+v8::Local<v8::Value> JS_NewObject(IJS_Runtime* pJSRuntime,
+ v8::Local<v8::Object> pObj) {
+ if (pObj.IsEmpty())
+ return v8::Local<v8::Value>();
+ return pObj->Clone();
}
-void JS_SetPrivate(IJS_Runtime* pJSRuntime, v8::Local<v8::Object> pObj, void* p)
-{
- if(pObj.IsEmpty() || !pObj->InternalFieldCount()) return;
- CJS_PrivateData* pPrivateData = (CJS_PrivateData*)pObj->GetAlignedPointerFromInternalField(0);
- if(!pPrivateData) return;
- pPrivateData->pPrivate = p;
+v8::Local<v8::Value> JS_NewObject2(IJS_Runtime* pJSRuntime,
+ v8::Local<v8::Array> pObj) {
+ if (pObj.IsEmpty())
+ return v8::Local<v8::Value>();
+ return pObj->Clone();
}
-void* JS_GetPrivate(IJS_Runtime* pJSRuntime, v8::Local<v8::Object> pObj)
-{
- if(pObj.IsEmpty()) return NULL;
- CJS_PrivateData* pPrivateData = NULL;
- if(pObj->InternalFieldCount())
- pPrivateData = (CJS_PrivateData*)pObj->GetAlignedPointerFromInternalField(0);
- else
- {
- //It could be a global proxy object.
- v8::Local<v8::Value> v = pObj->GetPrototype();
- v8::Isolate* isolate = (v8::Isolate*)pJSRuntime;
- v8::Local<v8::Context> context = isolate->GetCurrentContext();
- if(v->IsObject())
- pPrivateData = (CJS_PrivateData*)v->ToObject(context).ToLocalChecked()->GetAlignedPointerFromInternalField(0);
- }
- if(!pPrivateData) return NULL;
- return pPrivateData->pPrivate;
-}
-
-void JS_FreePrivate(void* pPrivateData)
-{
- delete (CJS_PrivateData*)pPrivateData;
+v8::Local<v8::Value> JS_NewString(IJS_Runtime* pJSRuntime,
+ const wchar_t* string) {
+ return WSToJSString(pJSRuntime, string);
}
-void JS_FreePrivate(v8::Local<v8::Object> pObj)
-{
- if(pObj.IsEmpty() || !pObj->InternalFieldCount()) return;
- JS_FreePrivate(pObj->GetAlignedPointerFromInternalField(0));
- pObj->SetAlignedPointerInInternalField(0, NULL);
+v8::Local<v8::Value> JS_NewString(IJS_Runtime* pJSRuntime,
+ const wchar_t* string,
+ unsigned nLen) {
+ return WSToJSString(pJSRuntime, string, nLen);
}
-
-v8::Local<v8::Value> JS_GetObjectValue(v8::Local<v8::Object> pObj)
-{
- return pObj;
+v8::Local<v8::Value> JS_NewNull() {
+ return v8::Local<v8::Value>();
}
-v8::Local<v8::String> WSToJSString(IJS_Runtime* pJSRuntime, const wchar_t* PropertyName, int Len = -1)
-{
- CFX_WideString ws = CFX_WideString(PropertyName,Len);
- CFX_ByteString bs = ws.UTF8Encode();
- if(!pJSRuntime) pJSRuntime = v8::Isolate::GetCurrent();
- return v8::String::NewFromUtf8(pJSRuntime, bs.c_str(), v8::NewStringType::kNormal).ToLocalChecked();
+v8::Local<v8::Value> JS_NewDate(IJS_Runtime* pJSRuntime, double d) {
+ return v8::Date::New(pJSRuntime->GetCurrentContext(), d).ToLocalChecked();
}
-v8::Local<v8::Value> JS_GetObjectElement(IJS_Runtime* pJSRuntime, v8::Local<v8::Object> pObj,const wchar_t* PropertyName)
-{
- if(pObj.IsEmpty()) return v8::Local<v8::Value>();
- v8::Local<v8::Value> val;
- if (!pObj->Get(pJSRuntime->GetCurrentContext(), WSToJSString(pJSRuntime,PropertyName)).ToLocal(&val)) return v8::Local<v8::Value>();
- return val;
+v8::Local<v8::Value> JS_NewValue(IJS_Runtime* pJSRuntime) {
+ return v8::Local<v8::Value>();
}
-v8::Local<v8::Array> JS_GetObjectElementNames(IJS_Runtime* pJSRuntime, v8::Local<v8::Object> pObj)
-{
- if(pObj.IsEmpty()) return v8::Local<v8::Array>();
- v8::Local<v8::Array> val;
- if (!pObj->GetPropertyNames(pJSRuntime->GetCurrentContext()).ToLocal(&val)) return v8::Local<v8::Array>();
+v8::Local<v8::Value> JS_GetListValue(IJS_Runtime* pJSRuntime,
+ v8::Local<v8::Value> pList,
+ int index) {
+ v8::Local<v8::Context> context = pJSRuntime->GetCurrentContext();
+ if (!pList.IsEmpty() && pList->IsObject()) {
+ v8::Local<v8::Object> obj;
+ if (pList->ToObject(context).ToLocal(&obj)) {
+ v8::Local<v8::Value> val;
+ if (obj->Get(context, index).ToLocal(&val))
return val;
+ }
+ }
+ return v8::Local<v8::Value>();
}
-void JS_PutObjectString(IJS_Runtime* pJSRuntime,v8::Local<v8::Object> pObj, const wchar_t* PropertyName, const wchar_t* sValue) //VT_string
-{
- if(pObj.IsEmpty()) return;
- pObj->Set(pJSRuntime->GetCurrentContext(), WSToJSString(pJSRuntime, PropertyName), WSToJSString(pJSRuntime, sValue)).FromJust();
+int JS_ToInt32(IJS_Runtime* pJSRuntime, v8::Local<v8::Value> pValue) {
+ if (pValue.IsEmpty())
+ return 0;
+ v8::Local<v8::Context> context = pJSRuntime->GetCurrentContext();
+ return pValue->ToInt32(context).ToLocalChecked()->Value();
}
-void JS_PutObjectNumber(IJS_Runtime* pJSRuntime,v8::Local<v8::Object> pObj, const wchar_t* PropertyName, int nValue)
-{
- if(pObj.IsEmpty()) return;
- pObj->Set(pJSRuntime->GetCurrentContext(), WSToJSString(pJSRuntime,PropertyName),v8::Int32::New(pJSRuntime, nValue)).FromJust();
+bool JS_ToBoolean(IJS_Runtime* pJSRuntime, v8::Local<v8::Value> pValue) {
+ if (pValue.IsEmpty())
+ return false;
+ v8::Local<v8::Context> context = pJSRuntime->GetCurrentContext();
+ return pValue->ToBoolean(context).ToLocalChecked()->Value();
}
-void JS_PutObjectNumber(IJS_Runtime* pJSRuntime,v8::Local<v8::Object> pObj, const wchar_t* PropertyName, float fValue)
-{
- if(pObj.IsEmpty()) return;
- pObj->Set(pJSRuntime->GetCurrentContext(), WSToJSString(pJSRuntime,PropertyName),v8::Number::New(pJSRuntime, (double)fValue)).FromJust();
+double JS_ToNumber(IJS_Runtime* pJSRuntime, v8::Local<v8::Value> pValue) {
+ if (pValue.IsEmpty())
+ return 0.0;
+ v8::Local<v8::Context> context = pJSRuntime->GetCurrentContext();
+ return pValue->ToNumber(context).ToLocalChecked()->Value();
}
-void JS_PutObjectNumber(IJS_Runtime* pJSRuntime,v8::Local<v8::Object> pObj, const wchar_t* PropertyName, double dValue)
-{
- if(pObj.IsEmpty()) return;
- pObj->Set(pJSRuntime->GetCurrentContext(), WSToJSString(pJSRuntime,PropertyName),v8::Number::New(pJSRuntime, (double)dValue)).FromJust();
+v8::Local<v8::Object> JS_ToObject(IJS_Runtime* pJSRuntime,
+ v8::Local<v8::Value> pValue) {
+ if (pValue.IsEmpty())
+ return v8::Local<v8::Object>();
+ v8::Local<v8::Context> context = pJSRuntime->GetCurrentContext();
+ return pValue->ToObject(context).ToLocalChecked();
}
-void JS_PutObjectBoolean(IJS_Runtime* pJSRuntime,v8::Local<v8::Object> pObj, const wchar_t* PropertyName, bool bValue)
-{
- if(pObj.IsEmpty()) return;
- pObj->Set(pJSRuntime->GetCurrentContext(), WSToJSString(pJSRuntime,PropertyName),v8::Boolean::New(pJSRuntime, bValue)).FromJust();
+CFX_WideString JS_ToString(IJS_Runtime* pJSRuntime,
+ v8::Local<v8::Value> pValue) {
+ if (pValue.IsEmpty())
+ return L"";
+ v8::Local<v8::Context> context = pJSRuntime->GetCurrentContext();
+ v8::String::Utf8Value s(pValue->ToString(context).ToLocalChecked());
+ return CFX_WideString::FromUTF8(*s, s.length());
}
-void JS_PutObjectObject(IJS_Runtime* pJSRuntime,v8::Local<v8::Object> pObj, const wchar_t* PropertyName, v8::Local<v8::Object> pPut)
-{
- if(pObj.IsEmpty()) return;
- pObj->Set(pJSRuntime->GetCurrentContext(), WSToJSString(pJSRuntime,PropertyName),pPut).FromJust();
-}
-
-void JS_PutObjectNull(IJS_Runtime* pJSRuntime,v8::Local<v8::Object> pObj, const wchar_t* PropertyName)
-{
- if(pObj.IsEmpty()) return;
- pObj->Set(pJSRuntime->GetCurrentContext(), WSToJSString(pJSRuntime,PropertyName),v8::Local<v8::Object>()).FromJust();
-}
-
-v8::Local<v8::Array> JS_NewArray(IJS_Runtime* pJSRuntime)
-{
- return v8::Array::New(pJSRuntime);
+v8::Local<v8::Array> JS_ToArray(IJS_Runtime* pJSRuntime,
+ v8::Local<v8::Value> pValue) {
+ if (pValue.IsEmpty())
+ return v8::Local<v8::Array>();
+ v8::Local<v8::Context> context = pJSRuntime->GetCurrentContext();
+ return v8::Local<v8::Array>::Cast(pValue->ToObject(context).ToLocalChecked());
}
-unsigned JS_PutArrayElement(IJS_Runtime* pJSRuntime, v8::Local<v8::Array> pArray,unsigned index,v8::Local<v8::Value> pValue,FXJSVALUETYPE eType)
-{
- if(pArray.IsEmpty()) return 0;
- if (pArray->Set(pJSRuntime->GetCurrentContext(), index, pValue).IsNothing()) return 0;
- return 1;
+void JS_ValueCopy(v8::Local<v8::Value>& pTo, v8::Local<v8::Value> pFrom) {
+ pTo = pFrom;
}
-v8::Local<v8::Value> JS_GetArrayElement(IJS_Runtime* pJSRuntime, v8::Local<v8::Array> pArray,unsigned index)
-{
- if(pArray.IsEmpty()) return v8::Local<v8::Value>();
- v8::Local<v8::Value> val;
- if (pArray->Get(pJSRuntime->GetCurrentContext(), index).ToLocal(&val)) return v8::Local<v8::Value>();
- return val;
-}
-
-unsigned JS_GetArrayLength(v8::Local<v8::Array> pArray)
-{
- if(pArray.IsEmpty()) return 0;
- return pArray->Length();
-}
+// JavaScript time implement begin.
-v8::Local<v8::Value> JS_NewNumber(IJS_Runtime* pJSRuntime,int number)
-{
- return v8::Int32::New(pJSRuntime, number);
-}
-
-v8::Local<v8::Value> JS_NewNumber(IJS_Runtime* pJSRuntime,double number)
-{
- return v8::Number::New(pJSRuntime, number);
-}
-
-v8::Local<v8::Value> JS_NewNumber(IJS_Runtime* pJSRuntime,float number)
-{
- return v8::Number::New(pJSRuntime, (float)number);
-}
-
-v8::Local<v8::Value> JS_NewBoolean(IJS_Runtime* pJSRuntime,bool b)
-{
- return v8::Boolean::New(pJSRuntime, b);
-}
-
-v8::Local<v8::Value> JS_NewObject(IJS_Runtime* pJSRuntime,v8::Local<v8::Object> pObj)
-{
- if(pObj.IsEmpty()) return v8::Local<v8::Value>();
- return pObj->Clone();
-}
-
-v8::Local<v8::Value> JS_NewObject2(IJS_Runtime* pJSRuntime,v8::Local<v8::Array> pObj)
-{
- if(pObj.IsEmpty()) return v8::Local<v8::Value>();
- return pObj->Clone();
-}
-
-
-v8::Local<v8::Value> JS_NewString(IJS_Runtime* pJSRuntime,const wchar_t* string)
-{
- return WSToJSString(pJSRuntime, string);
-}
-
-v8::Local<v8::Value> JS_NewString(IJS_Runtime* pJSRuntime,const wchar_t* string, unsigned nLen)
-{
- return WSToJSString(pJSRuntime, string, nLen);
-}
-
-v8::Local<v8::Value> JS_NewNull()
-{
- return v8::Local<v8::Value>();
-}
-
-v8::Local<v8::Value> JS_NewDate(IJS_Runtime* pJSRuntime,double d)
-{
- return v8::Date::New(pJSRuntime->GetCurrentContext(), d).ToLocalChecked();
-}
-
-v8::Local<v8::Value> JS_NewValue(IJS_Runtime* pJSRuntime)
-{
- return v8::Local<v8::Value>();
-}
-
-v8::Local<v8::Value> JS_GetListValue(IJS_Runtime* pJSRuntime, v8::Local<v8::Value> pList, int index)
-{
-
- v8::Local<v8::Context> context = pJSRuntime->GetCurrentContext();
- if(!pList.IsEmpty() && pList->IsObject())
- {
- v8::Local<v8::Object> obj;
- if (pList->ToObject(context).ToLocal(&obj))
- {
- v8::Local<v8::Value> val;
- if (obj->Get(context, index).ToLocal(&val)) return val;
- }
- }
- return v8::Local<v8::Value>();
-}
-
-int JS_ToInt32(IJS_Runtime* pJSRuntime, v8::Local<v8::Value> pValue)
-{
- if(pValue.IsEmpty()) return 0;
- v8::Local<v8::Context> context = pJSRuntime->GetCurrentContext();
- return pValue->ToInt32(context).ToLocalChecked()->Value();
-}
-
-bool JS_ToBoolean(IJS_Runtime* pJSRuntime, v8::Local<v8::Value> pValue)
-{
- if(pValue.IsEmpty()) return false;
- v8::Local<v8::Context> context = pJSRuntime->GetCurrentContext();
- return pValue->ToBoolean(context).ToLocalChecked()->Value();
-}
-
-double JS_ToNumber(IJS_Runtime* pJSRuntime, v8::Local<v8::Value> pValue)
-{
- if(pValue.IsEmpty()) return 0.0;
- v8::Local<v8::Context> context = pJSRuntime->GetCurrentContext();
- return pValue->ToNumber(context).ToLocalChecked()->Value();
-}
-
-v8::Local<v8::Object> JS_ToObject(IJS_Runtime* pJSRuntime, v8::Local<v8::Value> pValue)
-{
- if(pValue.IsEmpty()) return v8::Local<v8::Object>();
- v8::Local<v8::Context> context = pJSRuntime->GetCurrentContext();
- return pValue->ToObject(context).ToLocalChecked();
-}
-
-CFX_WideString JS_ToString(IJS_Runtime* pJSRuntime, v8::Local<v8::Value> pValue)
-{
- if(pValue.IsEmpty()) return L"";
- v8::Local<v8::Context> context = pJSRuntime->GetCurrentContext();
- v8::String::Utf8Value s(pValue->ToString(context).ToLocalChecked());
- return CFX_WideString::FromUTF8(*s, s.length());
-}
-
-v8::Local<v8::Array> JS_ToArray(IJS_Runtime* pJSRuntime, v8::Local<v8::Value> pValue)
-{
- if(pValue.IsEmpty()) return v8::Local<v8::Array>();
- v8::Local<v8::Context> context = pJSRuntime->GetCurrentContext();
- return v8::Local<v8::Array>::Cast(pValue->ToObject(context).ToLocalChecked());
-}
-
-void JS_ValueCopy(v8::Local<v8::Value>& pTo, v8::Local<v8::Value> pFrom)
-{
- pTo = pFrom;
-}
-
-
-//JavaScript time implement begin.
-
-double _getLocalTZA()
-{
- if(!FSDK_IsSandBoxPolicyEnabled(FPDF_POLICY_MACHINETIME_ACCESS))
- return 0;
- time_t t = 0;
- time(&t);
- localtime(&t);
+double _getLocalTZA() {
+ if (!FSDK_IsSandBoxPolicyEnabled(FPDF_POLICY_MACHINETIME_ACCESS))
+ return 0;
+ time_t t = 0;
+ time(&t);
+ localtime(&t);
#if _MSC_VER >= 1900
// In gcc and in Visual Studio prior to VS 2015 'timezone' is a global
// variable declared in time.h. That variable was deprecated and in VS 2015
@@ -785,286 +910,272 @@ double _getLocalTZA()
long timezone = 0;
_get_timezone(&timezone);
#endif
- return (double)(-(timezone * 1000));
+ return (double)(-(timezone * 1000));
}
-int _getDaylightSavingTA(double d)
-{
- if(!FSDK_IsSandBoxPolicyEnabled(FPDF_POLICY_MACHINETIME_ACCESS))
- return 0;
- time_t t = (time_t)(d/1000);
- struct tm * tmp = localtime(&t);
- if (tmp == NULL)
- return 0;
- if (tmp->tm_isdst > 0)
- //One hour.
- return (int)60*60*1000;
- return 0;
-}
-
-double _Mod(double x, double y)
-{
- double r = fmod(x, y);
- if (r < 0) r += y;
- return r;
+int _getDaylightSavingTA(double d) {
+ if (!FSDK_IsSandBoxPolicyEnabled(FPDF_POLICY_MACHINETIME_ACCESS))
+ return 0;
+ time_t t = (time_t)(d / 1000);
+ struct tm* tmp = localtime(&t);
+ if (tmp == NULL)
+ return 0;
+ if (tmp->tm_isdst > 0)
+ // One hour.
+ return (int)60 * 60 * 1000;
+ return 0;
}
-int _isfinite(double v)
-{
+double _Mod(double x, double y) {
+ double r = fmod(x, y);
+ if (r < 0)
+ r += y;
+ return r;
+}
+
+int _isfinite(double v) {
#if _MSC_VER
- return ::_finite(v);
+ return ::_finite(v);
#else
- return std::fabs(v) < std::numeric_limits<double>::max();
+ return std::fabs(v) < std::numeric_limits<double>::max();
#endif
}
-double _toInteger(double n)
-{
- return (n >= 0)? FXSYS_floor(n): -FXSYS_floor(-n);
-}
-
-bool _isLeapYear(int year)
-{
- return (year%4==0)&&((year%100!=0)||(year%400!=0));
-}
-
-int _DayFromYear(int y)
-{
- return (int)(365*(y - 1970.0) + FXSYS_floor((y - 1969.0)/4) - FXSYS_floor((y - 1901.0)/100)+FXSYS_floor((y - 1601.0)/400));
-}
-
-double _TimeFromYear(int y)
-{
- return ((double)86400000) * _DayFromYear(y);
-}
-
-double _TimeFromYearMonth(int y, int m)
-{
- static int daysMonth[12] ={ 0,31,59,90,120,151,181,212,243,273,304,334};
- static int leapDaysMonth[12] = { 0,31,60,91,121,152,182,213,244,274,305,335};
- int* pMonth = daysMonth;
- if(_isLeapYear(y))
- pMonth = leapDaysMonth;
- return _TimeFromYear(y) + ((double)pMonth[m])*86400000;
-}
-
-int _Day(double t)
-{
- return (int)FXSYS_floor(t / 86400000);
-}
-
-int _YearFromTime(double t)
-{
- //estimate the time.
- int y = 1970 +(int)(t/(365.0*86400000));
- if (_TimeFromYear(y) <= t)
- {
- while(_TimeFromYear(y+1) <= t) y++;
- }
- else
- while(_TimeFromYear(y-1) > t) y--;
- return y;
-}
-
-int _DayWithinYear(double t)
-{
- int year = _YearFromTime(t);
- int day = _Day(t);
- return day-_DayFromYear(year);
-}
-
-int _MonthFromTime(double t)
-{
- int day = _DayWithinYear(t);
- int year = _YearFromTime(t);
- if(0<=day && day <31)
- return 0;
- if(31<=day && day< 59+_isLeapYear(year))
- return 1;
- if((59+_isLeapYear(year))<=day && day<(90+_isLeapYear(year)))
- return 2;
- if((90+_isLeapYear(year))<=day && day<(120+_isLeapYear(year)))
- return 3;
- if((120+_isLeapYear(year))<=day && day<(151+_isLeapYear(year)))
- return 4;
- if((151+_isLeapYear(year))<=day && day<(181+_isLeapYear(year)))
- return 5;
- if((181+_isLeapYear(year))<=day && day<(212+_isLeapYear(year)))
- return 6;
- if((212+_isLeapYear(year))<=day && day<(243+_isLeapYear(year)))
- return 7;
- if((243+_isLeapYear(year))<=day && day<(273+_isLeapYear(year)))
- return 8;
- if((273+_isLeapYear(year))<=day && day<(304+_isLeapYear(year)))
- return 9;
- if((304+_isLeapYear(year))<=day && day<(334+_isLeapYear(year)))
- return 10;
- if((334+_isLeapYear(year))<=day && day<(365+_isLeapYear(year)))
- return 11;
-
- return -1;
-}
-
-int _DateFromTime(double t)
-{
- int day = _DayWithinYear(t);
- int year = _YearFromTime(t);
- bool leap = _isLeapYear(year);
- int month = _MonthFromTime(t);
- switch (month)
- {
- case 0:
- return day+1;
- case 1:
- return day-30;
- case 2:
- return day-58-leap;
- case 3:
- return day-89-leap;
- case 4:
- return day-119-leap;
- case 5:
- return day-150-leap;
- case 6:
- return day-180-leap;
- case 7:
- return day-211-leap;
- case 8:
- return day-242-leap;
- case 9:
- return day-272-leap;
- case 10:
- return day-303-leap;
- case 11:
- return day-333-leap;
- default:
- return 0;
- }
-}
-
-double JS_GetDateTime()
-{
- if(!FSDK_IsSandBoxPolicyEnabled(FPDF_POLICY_MACHINETIME_ACCESS))
- return 0;
- time_t t = time(NULL);
- struct tm* pTm = localtime(&t);
-
- int year = pTm->tm_year+1900;
- double t1 = _TimeFromYear(year);
+double _toInteger(double n) {
+ return (n >= 0) ? FXSYS_floor(n) : -FXSYS_floor(-n);
+}
+
+bool _isLeapYear(int year) {
+ return (year % 4 == 0) && ((year % 100 != 0) || (year % 400 != 0));
+}
+
+int _DayFromYear(int y) {
+ return (int)(365 * (y - 1970.0) + FXSYS_floor((y - 1969.0) / 4) -
+ FXSYS_floor((y - 1901.0) / 100) +
+ FXSYS_floor((y - 1601.0) / 400));
+}
+
+double _TimeFromYear(int y) {
+ return ((double)86400000) * _DayFromYear(y);
+}
+
+double _TimeFromYearMonth(int y, int m) {
+ static int daysMonth[12] = {0, 31, 59, 90, 120, 151,
+ 181, 212, 243, 273, 304, 334};
+ static int leapDaysMonth[12] = {0, 31, 60, 91, 121, 152,
+ 182, 213, 244, 274, 305, 335};
+ int* pMonth = daysMonth;
+ if (_isLeapYear(y))
+ pMonth = leapDaysMonth;
+ return _TimeFromYear(y) + ((double)pMonth[m]) * 86400000;
+}
+
+int _Day(double t) {
+ return (int)FXSYS_floor(t / 86400000);
+}
+
+int _YearFromTime(double t) {
+ // estimate the time.
+ int y = 1970 + (int)(t / (365.0 * 86400000));
+ if (_TimeFromYear(y) <= t) {
+ while (_TimeFromYear(y + 1) <= t)
+ y++;
+ } else
+ while (_TimeFromYear(y - 1) > t)
+ y--;
+ return y;
+}
+
+int _DayWithinYear(double t) {
+ int year = _YearFromTime(t);
+ int day = _Day(t);
+ return day - _DayFromYear(year);
+}
+
+int _MonthFromTime(double t) {
+ int day = _DayWithinYear(t);
+ int year = _YearFromTime(t);
+ if (0 <= day && day < 31)
+ return 0;
+ if (31 <= day && day < 59 + _isLeapYear(year))
+ return 1;
+ if ((59 + _isLeapYear(year)) <= day && day < (90 + _isLeapYear(year)))
+ return 2;
+ if ((90 + _isLeapYear(year)) <= day && day < (120 + _isLeapYear(year)))
+ return 3;
+ if ((120 + _isLeapYear(year)) <= day && day < (151 + _isLeapYear(year)))
+ return 4;
+ if ((151 + _isLeapYear(year)) <= day && day < (181 + _isLeapYear(year)))
+ return 5;
+ if ((181 + _isLeapYear(year)) <= day && day < (212 + _isLeapYear(year)))
+ return 6;
+ if ((212 + _isLeapYear(year)) <= day && day < (243 + _isLeapYear(year)))
+ return 7;
+ if ((243 + _isLeapYear(year)) <= day && day < (273 + _isLeapYear(year)))
+ return 8;
+ if ((273 + _isLeapYear(year)) <= day && day < (304 + _isLeapYear(year)))
+ return 9;
+ if ((304 + _isLeapYear(year)) <= day && day < (334 + _isLeapYear(year)))
+ return 10;
+ if ((334 + _isLeapYear(year)) <= day && day < (365 + _isLeapYear(year)))
+ return 11;
+
+ return -1;
+}
+
+int _DateFromTime(double t) {
+ int day = _DayWithinYear(t);
+ int year = _YearFromTime(t);
+ bool leap = _isLeapYear(year);
+ int month = _MonthFromTime(t);
+ switch (month) {
+ case 0:
+ return day + 1;
+ case 1:
+ return day - 30;
+ case 2:
+ return day - 58 - leap;
+ case 3:
+ return day - 89 - leap;
+ case 4:
+ return day - 119 - leap;
+ case 5:
+ return day - 150 - leap;
+ case 6:
+ return day - 180 - leap;
+ case 7:
+ return day - 211 - leap;
+ case 8:
+ return day - 242 - leap;
+ case 9:
+ return day - 272 - leap;
+ case 10:
+ return day - 303 - leap;
+ case 11:
+ return day - 333 - leap;
+ default:
+ return 0;
+ }
+}
+
+double JS_GetDateTime() {
+ if (!FSDK_IsSandBoxPolicyEnabled(FPDF_POLICY_MACHINETIME_ACCESS))
+ return 0;
+ time_t t = time(NULL);
+ struct tm* pTm = localtime(&t);
+
+ int year = pTm->tm_year + 1900;
+ double t1 = _TimeFromYear(year);
+
+ return t1 + pTm->tm_yday * 86400000.0 + pTm->tm_hour * 3600000.0 +
+ pTm->tm_min * 60000.0 + pTm->tm_sec * 1000.0;
+}
+
+int JS_GetYearFromTime(double dt) {
+ return _YearFromTime(dt);
+}
+
+int JS_GetMonthFromTime(double dt) {
+ return _MonthFromTime(dt);
+}
+
+int JS_GetDayFromTime(double dt) {
+ return _DateFromTime(dt);
+}
+
+int JS_GetHourFromTime(double dt) {
+ return (int)_Mod(FXSYS_floor((double)(dt / (60 * 60 * 1000))), 24);
+}
+
+int JS_GetMinFromTime(double dt) {
+ return (int)_Mod(FXSYS_floor((double)(dt / (60 * 1000))), 60);
+}
+
+int JS_GetSecFromTime(double dt) {
+ return (int)_Mod(FXSYS_floor((double)(dt / 1000)), 60);
+}
+
+double JS_DateParse(const wchar_t* string) {
+ v8::Isolate* pIsolate = v8::Isolate::GetCurrent();
+ v8::Isolate::Scope isolate_scope(pIsolate);
+ v8::HandleScope scope(pIsolate);
+
+ v8::Local<v8::Context> context = pIsolate->GetCurrentContext();
+
+ // Use the built-in object method.
+ v8::Local<v8::Value> v =
+ context->Global()
+ ->Get(context, v8::String::NewFromUtf8(pIsolate, "Date",
+ v8::NewStringType::kNormal)
+ .ToLocalChecked())
+ .ToLocalChecked();
+ if (v->IsObject()) {
+ v8::Local<v8::Object> o = v->ToObject(context).ToLocalChecked();
+ v = o->Get(context, v8::String::NewFromUtf8(pIsolate, "parse",
+ v8::NewStringType::kNormal)
+ .ToLocalChecked())
+ .ToLocalChecked();
+ if (v->IsFunction()) {
+ v8::Local<v8::Function> funC = v8::Local<v8::Function>::Cast(v);
- return t1 + pTm->tm_yday*86400000.0 + pTm->tm_hour*3600000.0+pTm->tm_min*60000.0+pTm->tm_sec*1000.0;
+ const int argc = 1;
+ v8::Local<v8::String> timeStr = WSToJSString(pIsolate, string);
+ v8::Local<v8::Value> argv[argc] = {timeStr};
+ v = funC->Call(context, context->Global(), argc, argv).ToLocalChecked();
+ if (v->IsNumber()) {
+ double date = v->ToNumber(context).ToLocalChecked()->Value();
+ if (!_isfinite(date))
+ return date;
+ return date + _getLocalTZA() + _getDaylightSavingTA(date);
+ }
+ }
+ }
+ return 0;
}
-int JS_GetYearFromTime(double dt)
-{
- return _YearFromTime(dt);
-}
+double JS_MakeDay(int nYear, int nMonth, int nDate) {
+ if (!_isfinite(nYear) || !_isfinite(nMonth) || !_isfinite(nDate))
+ return GetNan();
+ double y = _toInteger(nYear);
+ double m = _toInteger(nMonth);
+ double dt = _toInteger(nDate);
+ double ym = y + FXSYS_floor((double)m / 12);
+ double mn = _Mod(m, 12);
-int JS_GetMonthFromTime(double dt)
-{
- return _MonthFromTime(dt);
-}
+ double t = _TimeFromYearMonth((int)ym, (int)mn);
-int JS_GetDayFromTime(double dt)
-{
- return _DateFromTime(dt);
+ if (_YearFromTime(t) != ym || _MonthFromTime(t) != mn ||
+ _DateFromTime(t) != 1)
+ return GetNan();
+ return _Day(t) + dt - 1;
}
-int JS_GetHourFromTime(double dt)
-{
- return (int)_Mod(FXSYS_floor((double)(dt/(60*60*1000))), 24);
-}
+double JS_MakeTime(int nHour, int nMin, int nSec, int nMs) {
+ if (!_isfinite(nHour) || !_isfinite(nMin) || !_isfinite(nSec) ||
+ !_isfinite(nMs))
+ return GetNan();
-int JS_GetMinFromTime(double dt)
-{
- return (int)_Mod(FXSYS_floor((double)(dt/(60*1000))), 60);
-}
+ double h = _toInteger(nHour);
+ double m = _toInteger(nMin);
+ double s = _toInteger(nSec);
+ double milli = _toInteger(nMs);
-int JS_GetSecFromTime(double dt)
-{
- return (int)_Mod(FXSYS_floor((double)(dt/1000)), 60);
+ return h * 3600000 + m * 60000 + s * 1000 + milli;
}
-double JS_DateParse(const wchar_t* string)
-{
- v8::Isolate* pIsolate = v8::Isolate::GetCurrent();
- v8::Isolate::Scope isolate_scope(pIsolate);
- v8::HandleScope scope(pIsolate);
-
- v8::Local<v8::Context> context = pIsolate->GetCurrentContext();
-
- //Use the built-in object method.
- v8::Local<v8::Value> v = context->Global()->Get(context, v8::String::NewFromUtf8(pIsolate, "Date", v8::NewStringType::kNormal).ToLocalChecked()).ToLocalChecked();
- if(v->IsObject())
- {
- v8::Local<v8::Object> o = v->ToObject(context).ToLocalChecked();
- v = o->Get(context,v8::String::NewFromUtf8(pIsolate, "parse", v8::NewStringType::kNormal).ToLocalChecked()).ToLocalChecked();
- if(v->IsFunction())
- {
- v8::Local<v8::Function> funC = v8::Local<v8::Function>::Cast(v);
-
- const int argc = 1;
- v8::Local<v8::String> timeStr = WSToJSString(pIsolate, string);
- v8::Local<v8::Value> argv[argc] = {timeStr};
- v = funC->Call(context, context->Global(), argc, argv).ToLocalChecked();
- if(v->IsNumber())
- {
- double date = v->ToNumber(context).ToLocalChecked()->Value();
- if(!_isfinite(date)) return date;
- return date + _getLocalTZA() + _getDaylightSavingTA(date);
- }
-
- }
- }
- return 0;
-}
-
-double JS_MakeDay(int nYear, int nMonth, int nDate)
-{
- if (!_isfinite(nYear) || !_isfinite(nMonth) ||!_isfinite(nDate))
- return GetNan();
- double y = _toInteger(nYear);
- double m = _toInteger(nMonth);
- double dt = _toInteger(nDate);
- double ym = y + FXSYS_floor((double)m/12);
- double mn = _Mod(m ,12);
-
- double t = _TimeFromYearMonth((int)ym,(int)mn);
-
- if (_YearFromTime(t) != ym || _MonthFromTime(t) != mn ||_DateFromTime(t) != 1)
- return GetNan();
- return _Day(t)+dt-1;
-}
-
-double JS_MakeTime(int nHour, int nMin, int nSec, int nMs)
-{
- if (!_isfinite(nHour) ||!_isfinite(nMin) ||!_isfinite(nSec) ||!_isfinite(nMs))
- return GetNan();
+double JS_MakeDate(double day, double time) {
+ if (!_isfinite(day) || !_isfinite(time))
+ return GetNan();
- double h = _toInteger(nHour);
- double m = _toInteger(nMin);
- double s = _toInteger(nSec);
- double milli = _toInteger(nMs);
-
- return h * 3600000 + m * 60000 + s * 1000 + milli;
+ return day * 86400000 + time;
}
-double JS_MakeDate(double day, double time)
-{
- if (!_isfinite(day) ||!_isfinite(time))
- return GetNan();
-
- return day * 86400000 + time;
+bool JS_PortIsNan(double d) {
+ return d != d;
}
-bool JS_PortIsNan(double d)
-{
- return d != d;
-}
-
-double JS_LocalTime(double d)
-{
- return JS_GetDateTime() + _getDaylightSavingTA(d);
+double JS_LocalTime(double d) {
+ return JS_GetDateTime() + _getDaylightSavingTA(d);
}
-//JavaScript time implement End.
+// JavaScript time implement End.
diff --git a/fpdfsdk/src/pdfwindow/PWL_Button.cpp b/fpdfsdk/src/pdfwindow/PWL_Button.cpp
index 84962285c4..9eca10c90d 100644
--- a/fpdfsdk/src/pdfwindow/PWL_Button.cpp
+++ b/fpdfsdk/src/pdfwindow/PWL_Button.cpp
@@ -9,45 +9,37 @@
#include "../../include/pdfwindow/PWL_Button.h"
#include "../../include/pdfwindow/PWL_Utils.h"
-/* ------------------------------- CPWL_Button ---------------------------------- */
+/* ------------------------------- CPWL_Button
+ * ---------------------------------- */
-CPWL_Button::CPWL_Button() :
- m_bMouseDown(FALSE)
-{
-}
+CPWL_Button::CPWL_Button() : m_bMouseDown(FALSE) {}
-CPWL_Button::~CPWL_Button()
-{
-// PWL_TRACE("~CPWL_Button\n");
+CPWL_Button::~CPWL_Button() {
+ // PWL_TRACE("~CPWL_Button\n");
}
-CFX_ByteString CPWL_Button::GetClassName() const
-{
- return "CPWL_Button";
+CFX_ByteString CPWL_Button::GetClassName() const {
+ return "CPWL_Button";
}
-void CPWL_Button::OnCreate(PWL_CREATEPARAM & cp)
-{
- cp.eCursorType = FXCT_HAND;
+void CPWL_Button::OnCreate(PWL_CREATEPARAM& cp) {
+ cp.eCursorType = FXCT_HAND;
}
-FX_BOOL CPWL_Button::OnLButtonDown(const CPDF_Point & point, FX_DWORD nFlag)
-{
- CPWL_Wnd::OnLButtonDown(point, nFlag);
+FX_BOOL CPWL_Button::OnLButtonDown(const CPDF_Point& point, FX_DWORD nFlag) {
+ CPWL_Wnd::OnLButtonDown(point, nFlag);
- m_bMouseDown = TRUE;
- SetCapture();
+ m_bMouseDown = TRUE;
+ SetCapture();
- return TRUE;
+ return TRUE;
}
-FX_BOOL CPWL_Button::OnLButtonUp(const CPDF_Point & point, FX_DWORD nFlag)
-{
- CPWL_Wnd::OnLButtonUp(point, nFlag);
+FX_BOOL CPWL_Button::OnLButtonUp(const CPDF_Point& point, FX_DWORD nFlag) {
+ CPWL_Wnd::OnLButtonUp(point, nFlag);
- ReleaseCapture();
- m_bMouseDown = FALSE;
+ ReleaseCapture();
+ m_bMouseDown = FALSE;
- return TRUE;
+ return TRUE;
}
-
diff --git a/fpdfsdk/src/pdfwindow/PWL_Caret.cpp b/fpdfsdk/src/pdfwindow/PWL_Caret.cpp
index 84a8b3d186..f35385e7f7 100644
--- a/fpdfsdk/src/pdfwindow/PWL_Caret.cpp
+++ b/fpdfsdk/src/pdfwindow/PWL_Caret.cpp
@@ -9,189 +9,157 @@
#include "../../include/pdfwindow/PWL_Caret.h"
#include "../../include/pdfwindow/PWL_Utils.h"
-#define PWL_CARET_FLASHINTERVAL 500
+#define PWL_CARET_FLASHINTERVAL 500
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
-CPWL_Caret::CPWL_Caret() :
- m_bFlash(FALSE),
- m_ptHead(0,0),
- m_ptFoot(0,0),
- m_fWidth(0.4f),
- m_nDelay(0)
-{
-}
+CPWL_Caret::CPWL_Caret()
+ : m_bFlash(FALSE),
+ m_ptHead(0, 0),
+ m_ptFoot(0, 0),
+ m_fWidth(0.4f),
+ m_nDelay(0) {}
-CPWL_Caret::~CPWL_Caret()
-{
-}
+CPWL_Caret::~CPWL_Caret() {}
-CFX_ByteString CPWL_Caret::GetClassName() const
-{
- return "CPWL_Caret";
+CFX_ByteString CPWL_Caret::GetClassName() const {
+ return "CPWL_Caret";
}
-void CPWL_Caret::GetThisAppearanceStream(CFX_ByteTextBuf & sAppStream)
-{
- GetCaretApp(sAppStream,CPDF_Point(0.0f,0.0f));
+void CPWL_Caret::GetThisAppearanceStream(CFX_ByteTextBuf& sAppStream) {
+ GetCaretApp(sAppStream, CPDF_Point(0.0f, 0.0f));
}
-void CPWL_Caret::DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device)
-{
- if (IsVisible() && m_bFlash)
- {
- CPDF_Rect rcRect = GetCaretRect();
- CPDF_Rect rcClip = GetClipRect();
-
- CFX_PathData path;
-
- path.SetPointCount(2);
-
- FX_FLOAT fCaretX = rcRect.left + m_fWidth * 0.5f;
- FX_FLOAT fCaretTop = rcRect.top;
- FX_FLOAT fCaretBottom = rcRect.bottom;
-
- if (!rcClip.IsEmpty())
- {
- rcRect.Intersect(rcClip);
- if (!rcRect.IsEmpty())
- {
- fCaretTop = rcRect.top;
- fCaretBottom = rcRect.bottom;
- path.SetPoint(0, fCaretX, fCaretBottom, FXPT_MOVETO);
- path.SetPoint(1, fCaretX, fCaretTop, FXPT_LINETO);
- }
- else
- {
- return;
- }
- }
- else
- {
- path.SetPoint(0, fCaretX, fCaretBottom, FXPT_MOVETO);
- path.SetPoint(1, fCaretX, fCaretTop, FXPT_LINETO);
- }
-
- CFX_GraphStateData gsd;
- gsd.m_LineWidth = m_fWidth;
-
- pDevice->DrawPath(&path, pUser2Device, &gsd,0, ArgbEncode(255,0,0,0), FXFILL_ALTERNATE);
- }
+void CPWL_Caret::DrawThisAppearance(CFX_RenderDevice* pDevice,
+ CPDF_Matrix* pUser2Device) {
+ if (IsVisible() && m_bFlash) {
+ CPDF_Rect rcRect = GetCaretRect();
+ CPDF_Rect rcClip = GetClipRect();
+
+ CFX_PathData path;
+
+ path.SetPointCount(2);
+
+ FX_FLOAT fCaretX = rcRect.left + m_fWidth * 0.5f;
+ FX_FLOAT fCaretTop = rcRect.top;
+ FX_FLOAT fCaretBottom = rcRect.bottom;
+
+ if (!rcClip.IsEmpty()) {
+ rcRect.Intersect(rcClip);
+ if (!rcRect.IsEmpty()) {
+ fCaretTop = rcRect.top;
+ fCaretBottom = rcRect.bottom;
+ path.SetPoint(0, fCaretX, fCaretBottom, FXPT_MOVETO);
+ path.SetPoint(1, fCaretX, fCaretTop, FXPT_LINETO);
+ } else {
+ return;
+ }
+ } else {
+ path.SetPoint(0, fCaretX, fCaretBottom, FXPT_MOVETO);
+ path.SetPoint(1, fCaretX, fCaretTop, FXPT_LINETO);
+ }
+
+ CFX_GraphStateData gsd;
+ gsd.m_LineWidth = m_fWidth;
+
+ pDevice->DrawPath(&path, pUser2Device, &gsd, 0, ArgbEncode(255, 0, 0, 0),
+ FXFILL_ALTERNATE);
+ }
}
-void CPWL_Caret::GetCaretApp(CFX_ByteTextBuf & sAppStream,const CPDF_Point & ptOffset)
-{
- if (IsVisible() && m_bFlash)
- {
- CFX_ByteTextBuf sCaret;
-
- CPDF_Rect rcRect = GetCaretRect();
- CPDF_Rect rcClip = GetClipRect();
-
- rcRect = CPWL_Utils::OffsetRect(rcRect,ptOffset.x,ptOffset.y);
- rcClip = CPWL_Utils::OffsetRect(rcClip,ptOffset.x,ptOffset.y);
-
- sCaret << "q\n";
- if (!rcClip.IsEmpty())
- {
- sCaret << rcClip.left << " " << rcClip.bottom + 2.5f << " "
- << rcClip.right - rcClip.left << " " << rcClip.top - rcClip.bottom - 4.5f << " re W n\n";
- }
- sCaret << m_fWidth << " w\n0 G\n";
- sCaret << rcRect.left + m_fWidth/2 << " " << rcRect.bottom << " m\n";
- sCaret << rcRect.left + m_fWidth/2 << " " << rcRect.top << " l S\nQ\n";
-
- sAppStream << sCaret;
- }
+void CPWL_Caret::GetCaretApp(CFX_ByteTextBuf& sAppStream,
+ const CPDF_Point& ptOffset) {
+ if (IsVisible() && m_bFlash) {
+ CFX_ByteTextBuf sCaret;
+
+ CPDF_Rect rcRect = GetCaretRect();
+ CPDF_Rect rcClip = GetClipRect();
+
+ rcRect = CPWL_Utils::OffsetRect(rcRect, ptOffset.x, ptOffset.y);
+ rcClip = CPWL_Utils::OffsetRect(rcClip, ptOffset.x, ptOffset.y);
+
+ sCaret << "q\n";
+ if (!rcClip.IsEmpty()) {
+ sCaret << rcClip.left << " " << rcClip.bottom + 2.5f << " "
+ << rcClip.right - rcClip.left << " "
+ << rcClip.top - rcClip.bottom - 4.5f << " re W n\n";
+ }
+ sCaret << m_fWidth << " w\n0 G\n";
+ sCaret << rcRect.left + m_fWidth / 2 << " " << rcRect.bottom << " m\n";
+ sCaret << rcRect.left + m_fWidth / 2 << " " << rcRect.top << " l S\nQ\n";
+
+ sAppStream << sCaret;
+ }
}
-CFX_ByteString CPWL_Caret::GetCaretAppearanceStream(const CPDF_Point & ptOffset)
-{
- CFX_ByteTextBuf sCaret;
- GetCaretApp(sCaret,ptOffset);
- return sCaret.GetByteString();
+CFX_ByteString CPWL_Caret::GetCaretAppearanceStream(
+ const CPDF_Point& ptOffset) {
+ CFX_ByteTextBuf sCaret;
+ GetCaretApp(sCaret, ptOffset);
+ return sCaret.GetByteString();
}
-void CPWL_Caret::TimerProc()
-{
- if (m_nDelay > 0)
- {
- m_nDelay--;
- }
- else
- {
- m_bFlash = !m_bFlash;
- InvalidateRect();
- }
+void CPWL_Caret::TimerProc() {
+ if (m_nDelay > 0) {
+ m_nDelay--;
+ } else {
+ m_bFlash = !m_bFlash;
+ InvalidateRect();
+ }
}
-CPDF_Rect CPWL_Caret::GetCaretRect() const
-{
- return CPDF_Rect(m_ptFoot.x,
- m_ptFoot.y,
- m_ptHead.x + m_fWidth,
- m_ptHead.y);
+CPDF_Rect CPWL_Caret::GetCaretRect() const {
+ return CPDF_Rect(m_ptFoot.x, m_ptFoot.y, m_ptHead.x + m_fWidth, m_ptHead.y);
}
-void CPWL_Caret::SetCaret(FX_BOOL bVisible, const CPDF_Point & ptHead, const CPDF_Point & ptFoot)
-{
- if (bVisible)
- {
- if (IsVisible())
- {
- if (m_ptHead.x != ptHead.x || m_ptHead.y != ptHead.y ||
- m_ptFoot.x != ptFoot.x || m_ptFoot.y != ptFoot.y)
- {
- m_ptHead = ptHead;
- m_ptFoot = ptFoot;
-
- m_bFlash = TRUE;
- //Move(GetCaretRect(),FALSE,TRUE);
- Move(m_rcInvalid, FALSE, TRUE);
- }
- }
- else
- {
- m_ptHead = ptHead;
- m_ptFoot = ptFoot;
-
- EndTimer();
- BeginTimer(PWL_CARET_FLASHINTERVAL);
-
- CPWL_Wnd::SetVisible(TRUE);
- m_bFlash = TRUE;
-
- //Move(GetCaretRect(),FALSE,TRUE);
- Move(m_rcInvalid, FALSE, TRUE);
- }
- }
- else
- {
- m_ptHead = CPDF_Point(0, 0);
- m_ptFoot = CPDF_Point(0, 0);
-
- m_bFlash = FALSE;
- if (IsVisible())
- {
- EndTimer();
- CPWL_Wnd::SetVisible(FALSE);
- }
- }
+void CPWL_Caret::SetCaret(FX_BOOL bVisible,
+ const CPDF_Point& ptHead,
+ const CPDF_Point& ptFoot) {
+ if (bVisible) {
+ if (IsVisible()) {
+ if (m_ptHead.x != ptHead.x || m_ptHead.y != ptHead.y ||
+ m_ptFoot.x != ptFoot.x || m_ptFoot.y != ptFoot.y) {
+ m_ptHead = ptHead;
+ m_ptFoot = ptFoot;
+
+ m_bFlash = TRUE;
+ // Move(GetCaretRect(),FALSE,TRUE);
+ Move(m_rcInvalid, FALSE, TRUE);
+ }
+ } else {
+ m_ptHead = ptHead;
+ m_ptFoot = ptFoot;
+
+ EndTimer();
+ BeginTimer(PWL_CARET_FLASHINTERVAL);
+
+ CPWL_Wnd::SetVisible(TRUE);
+ m_bFlash = TRUE;
+
+ // Move(GetCaretRect(),FALSE,TRUE);
+ Move(m_rcInvalid, FALSE, TRUE);
+ }
+ } else {
+ m_ptHead = CPDF_Point(0, 0);
+ m_ptFoot = CPDF_Point(0, 0);
+
+ m_bFlash = FALSE;
+ if (IsVisible()) {
+ EndTimer();
+ CPWL_Wnd::SetVisible(FALSE);
+ }
+ }
}
-void CPWL_Caret::InvalidateRect(CPDF_Rect * pRect)
-{
- if (pRect)
- {
- CPDF_Rect rcRefresh = CPWL_Utils::InflateRect(*pRect,0.5f);
- rcRefresh.top += 1;
- rcRefresh.bottom -= 1;
-
- CPWL_Wnd::InvalidateRect(&rcRefresh);
- }
- else
- CPWL_Wnd::InvalidateRect(pRect);
-}
+void CPWL_Caret::InvalidateRect(CPDF_Rect* pRect) {
+ if (pRect) {
+ CPDF_Rect rcRefresh = CPWL_Utils::InflateRect(*pRect, 0.5f);
+ rcRefresh.top += 1;
+ rcRefresh.bottom -= 1;
+ CPWL_Wnd::InvalidateRect(&rcRefresh);
+ } else
+ CPWL_Wnd::InvalidateRect(pRect);
+}
diff --git a/fpdfsdk/src/pdfwindow/PWL_ComboBox.cpp b/fpdfsdk/src/pdfwindow/PWL_ComboBox.cpp
index f5c8a815d4..2043da5bff 100644
--- a/fpdfsdk/src/pdfwindow/PWL_ComboBox.cpp
+++ b/fpdfsdk/src/pdfwindow/PWL_ComboBox.cpp
@@ -12,643 +12,601 @@
#include "../../include/pdfwindow/PWL_ComboBox.h"
#include "../../include/pdfwindow/PWL_Utils.h"
-#define PWLCB_DEFAULTFONTSIZE 12.0f
-
-#define IsFloatZero(f) ((f) < 0.0001 && (f) > -0.0001)
-#define IsFloatBigger(fa,fb) ((fa) > (fb) && !IsFloatZero((fa) - (fb)))
-#define IsFloatSmaller(fa,fb) ((fa) < (fb) && !IsFloatZero((fa) - (fb)))
-#define IsFloatEqual(fa,fb) IsFloatZero((fa)-(fb))
+#define PWLCB_DEFAULTFONTSIZE 12.0f
+#define IsFloatZero(f) ((f) < 0.0001 && (f) > -0.0001)
+#define IsFloatBigger(fa, fb) ((fa) > (fb) && !IsFloatZero((fa) - (fb)))
+#define IsFloatSmaller(fa, fb) ((fa) < (fb) && !IsFloatZero((fa) - (fb)))
+#define IsFloatEqual(fa, fb) IsFloatZero((fa) - (fb))
/* ---------------------------- CPWL_CBListBox ---------------------------- */
-FX_BOOL CPWL_CBListBox::OnLButtonUp(const CPDF_Point & point, FX_DWORD nFlag)
-{
- CPWL_Wnd::OnLButtonUp(point,nFlag);
-
- if (m_bMouseDown)
- {
- ReleaseCapture();
- m_bMouseDown = FALSE;
-
- if (ClientHitTest(point))
- {
- if (CPWL_Wnd * pParent = GetParentWindow())
- {
- pParent->OnNotify(this,PNM_LBUTTONUP,0,PWL_MAKEDWORD(point.x,point.y));
- }
-
- FX_BOOL bExit = FALSE;
- OnNotifySelChanged(FALSE,bExit, nFlag);
- if (bExit) return FALSE;
- }
+FX_BOOL CPWL_CBListBox::OnLButtonUp(const CPDF_Point& point, FX_DWORD nFlag) {
+ CPWL_Wnd::OnLButtonUp(point, nFlag);
+
+ if (m_bMouseDown) {
+ ReleaseCapture();
+ m_bMouseDown = FALSE;
+
+ if (ClientHitTest(point)) {
+ if (CPWL_Wnd* pParent = GetParentWindow()) {
+ pParent->OnNotify(this, PNM_LBUTTONUP, 0,
+ PWL_MAKEDWORD(point.x, point.y));
+ }
+
+ FX_BOOL bExit = FALSE;
+ OnNotifySelChanged(FALSE, bExit, nFlag);
+ if (bExit)
+ return FALSE;
}
+ }
- return TRUE;
+ return TRUE;
}
-FX_BOOL CPWL_CBListBox::OnKeyDownWithExit(FX_WORD nChar, FX_BOOL & bExit, FX_DWORD nFlag)
-{
- if (!m_pList) return FALSE;
+FX_BOOL CPWL_CBListBox::OnKeyDownWithExit(FX_WORD nChar,
+ FX_BOOL& bExit,
+ FX_DWORD nFlag) {
+ if (!m_pList)
+ return FALSE;
- switch (nChar)
- {
+ switch (nChar) {
default:
- return FALSE;
+ return FALSE;
case FWL_VKEY_Up:
case FWL_VKEY_Down:
case FWL_VKEY_Home:
case FWL_VKEY_Left:
case FWL_VKEY_End:
case FWL_VKEY_Right:
- break;
- }
+ break;
+ }
- switch (nChar)
- {
+ switch (nChar) {
case FWL_VKEY_Up:
- m_pList->OnVK_UP(IsSHIFTpressed(nFlag),IsCTRLpressed(nFlag));
- break;
+ m_pList->OnVK_UP(IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag));
+ break;
case FWL_VKEY_Down:
- m_pList->OnVK_DOWN(IsSHIFTpressed(nFlag),IsCTRLpressed(nFlag));
- break;
+ m_pList->OnVK_DOWN(IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag));
+ break;
case FWL_VKEY_Home:
- m_pList->OnVK_HOME(IsSHIFTpressed(nFlag),IsCTRLpressed(nFlag));
- break;
+ m_pList->OnVK_HOME(IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag));
+ break;
case FWL_VKEY_Left:
- m_pList->OnVK_LEFT(IsSHIFTpressed(nFlag),IsCTRLpressed(nFlag));
- break;
+ m_pList->OnVK_LEFT(IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag));
+ break;
case FWL_VKEY_End:
- m_pList->OnVK_END(IsSHIFTpressed(nFlag),IsCTRLpressed(nFlag));
- break;
+ m_pList->OnVK_END(IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag));
+ break;
case FWL_VKEY_Right:
- m_pList->OnVK_RIGHT(IsSHIFTpressed(nFlag),IsCTRLpressed(nFlag));
- break;
+ m_pList->OnVK_RIGHT(IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag));
+ break;
case FWL_VKEY_Delete:
- break;
- }
+ break;
+ }
- OnNotifySelChanged(TRUE,bExit, nFlag);
+ OnNotifySelChanged(TRUE, bExit, nFlag);
- return TRUE;
+ return TRUE;
}
-FX_BOOL CPWL_CBListBox::OnCharWithExit(FX_WORD nChar, FX_BOOL & bExit, FX_DWORD nFlag)
-{
- if (!m_pList) return FALSE;
+FX_BOOL CPWL_CBListBox::OnCharWithExit(FX_WORD nChar,
+ FX_BOOL& bExit,
+ FX_DWORD nFlag) {
+ if (!m_pList)
+ return FALSE;
- if (!m_pList->OnChar(nChar,IsSHIFTpressed(nFlag),IsCTRLpressed(nFlag))) return FALSE;
+ if (!m_pList->OnChar(nChar, IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag)))
+ return FALSE;
- if (CPWL_ComboBox* pComboBox = (CPWL_ComboBox*)GetParentWindow())
- {
- pComboBox->SetSelectText();
- }
+ if (CPWL_ComboBox* pComboBox = (CPWL_ComboBox*)GetParentWindow()) {
+ pComboBox->SetSelectText();
+ }
- OnNotifySelChanged(TRUE,bExit,nFlag);
+ OnNotifySelChanged(TRUE, bExit, nFlag);
- return TRUE;
+ return TRUE;
}
/* ---------------------------- CPWL_CBButton ---------------------------- */
-void CPWL_CBButton::GetThisAppearanceStream(CFX_ByteTextBuf & sAppStream)
-{
- CPWL_Wnd::GetThisAppearanceStream(sAppStream);
+void CPWL_CBButton::GetThisAppearanceStream(CFX_ByteTextBuf& sAppStream) {
+ CPWL_Wnd::GetThisAppearanceStream(sAppStream);
- CPDF_Rect rectWnd = CPWL_Wnd::GetWindowRect();
+ CPDF_Rect rectWnd = CPWL_Wnd::GetWindowRect();
- if (IsVisible() && !rectWnd.IsEmpty())
- {
- CFX_ByteTextBuf sButton;
+ if (IsVisible() && !rectWnd.IsEmpty()) {
+ CFX_ByteTextBuf sButton;
- CPDF_Point ptCenter = GetCenterPoint();
+ CPDF_Point ptCenter = GetCenterPoint();
- CPDF_Point pt1(ptCenter.x - PWL_CBBUTTON_TRIANGLE_HALFLEN,ptCenter.y + PWL_CBBUTTON_TRIANGLE_HALFLEN * 0.5f);
- CPDF_Point pt2(ptCenter.x + PWL_CBBUTTON_TRIANGLE_HALFLEN,ptCenter.y + PWL_CBBUTTON_TRIANGLE_HALFLEN * 0.5f);
- CPDF_Point pt3(ptCenter.x,ptCenter.y - PWL_CBBUTTON_TRIANGLE_HALFLEN * 0.5f);
+ CPDF_Point pt1(ptCenter.x - PWL_CBBUTTON_TRIANGLE_HALFLEN,
+ ptCenter.y + PWL_CBBUTTON_TRIANGLE_HALFLEN * 0.5f);
+ CPDF_Point pt2(ptCenter.x + PWL_CBBUTTON_TRIANGLE_HALFLEN,
+ ptCenter.y + PWL_CBBUTTON_TRIANGLE_HALFLEN * 0.5f);
+ CPDF_Point pt3(ptCenter.x,
+ ptCenter.y - PWL_CBBUTTON_TRIANGLE_HALFLEN * 0.5f);
- if (IsFloatBigger(rectWnd.right - rectWnd.left,PWL_CBBUTTON_TRIANGLE_HALFLEN * 2)
- &&
- IsFloatBigger(rectWnd.top - rectWnd.bottom,PWL_CBBUTTON_TRIANGLE_HALFLEN)
- )
- {
- sButton << "0 g\n";
- sButton << pt1.x << " " << pt1.y << " m\n";
- sButton << pt2.x << " " << pt2.y << " l\n";
- sButton << pt3.x << " " << pt3.y << " l\n";
- sButton << pt1.x << " " << pt1.y << " l f\n";
+ if (IsFloatBigger(rectWnd.right - rectWnd.left,
+ PWL_CBBUTTON_TRIANGLE_HALFLEN * 2) &&
+ IsFloatBigger(rectWnd.top - rectWnd.bottom,
+ PWL_CBBUTTON_TRIANGLE_HALFLEN)) {
+ sButton << "0 g\n";
+ sButton << pt1.x << " " << pt1.y << " m\n";
+ sButton << pt2.x << " " << pt2.y << " l\n";
+ sButton << pt3.x << " " << pt3.y << " l\n";
+ sButton << pt1.x << " " << pt1.y << " l f\n";
- sAppStream << "q\n" << sButton << "Q\n";
- }
+ sAppStream << "q\n" << sButton << "Q\n";
}
+ }
}
-void CPWL_CBButton::DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device)
-{
- CPWL_Wnd::DrawThisAppearance(pDevice,pUser2Device);
+void CPWL_CBButton::DrawThisAppearance(CFX_RenderDevice* pDevice,
+ CPDF_Matrix* pUser2Device) {
+ CPWL_Wnd::DrawThisAppearance(pDevice, pUser2Device);
- CPDF_Rect rectWnd = CPWL_Wnd::GetWindowRect();
+ CPDF_Rect rectWnd = CPWL_Wnd::GetWindowRect();
- if (IsVisible() && !rectWnd.IsEmpty())
- {
- CPDF_Point ptCenter = GetCenterPoint();
+ if (IsVisible() && !rectWnd.IsEmpty()) {
+ CPDF_Point ptCenter = GetCenterPoint();
- CPDF_Point pt1(ptCenter.x - PWL_CBBUTTON_TRIANGLE_HALFLEN,ptCenter.y + PWL_CBBUTTON_TRIANGLE_HALFLEN * 0.5f);
- CPDF_Point pt2(ptCenter.x + PWL_CBBUTTON_TRIANGLE_HALFLEN,ptCenter.y + PWL_CBBUTTON_TRIANGLE_HALFLEN * 0.5f);
- CPDF_Point pt3(ptCenter.x,ptCenter.y - PWL_CBBUTTON_TRIANGLE_HALFLEN * 0.5f);
+ CPDF_Point pt1(ptCenter.x - PWL_CBBUTTON_TRIANGLE_HALFLEN,
+ ptCenter.y + PWL_CBBUTTON_TRIANGLE_HALFLEN * 0.5f);
+ CPDF_Point pt2(ptCenter.x + PWL_CBBUTTON_TRIANGLE_HALFLEN,
+ ptCenter.y + PWL_CBBUTTON_TRIANGLE_HALFLEN * 0.5f);
+ CPDF_Point pt3(ptCenter.x,
+ ptCenter.y - PWL_CBBUTTON_TRIANGLE_HALFLEN * 0.5f);
- if (IsFloatBigger(rectWnd.right - rectWnd.left,PWL_CBBUTTON_TRIANGLE_HALFLEN * 2)
- &&
- IsFloatBigger(rectWnd.top - rectWnd.bottom,PWL_CBBUTTON_TRIANGLE_HALFLEN)
- )
- {
- CFX_PathData path;
+ if (IsFloatBigger(rectWnd.right - rectWnd.left,
+ PWL_CBBUTTON_TRIANGLE_HALFLEN * 2) &&
+ IsFloatBigger(rectWnd.top - rectWnd.bottom,
+ PWL_CBBUTTON_TRIANGLE_HALFLEN)) {
+ CFX_PathData path;
- path.SetPointCount(4);
- path.SetPoint(0, pt1.x, pt1.y, FXPT_MOVETO);
- path.SetPoint(1, pt2.x, pt2.y, FXPT_LINETO);
- path.SetPoint(2, pt3.x, pt3.y, FXPT_LINETO);
- path.SetPoint(3, pt1.x, pt1.y, FXPT_LINETO);
+ path.SetPointCount(4);
+ path.SetPoint(0, pt1.x, pt1.y, FXPT_MOVETO);
+ path.SetPoint(1, pt2.x, pt2.y, FXPT_LINETO);
+ path.SetPoint(2, pt3.x, pt3.y, FXPT_LINETO);
+ path.SetPoint(3, pt1.x, pt1.y, FXPT_LINETO);
- pDevice->DrawPath(&path, pUser2Device, NULL,
- CPWL_Utils::PWLColorToFXColor(PWL_DEFAULT_BLACKCOLOR,GetTransparency()),
- 0, FXFILL_ALTERNATE);
- }
+ pDevice->DrawPath(&path, pUser2Device, NULL,
+ CPWL_Utils::PWLColorToFXColor(PWL_DEFAULT_BLACKCOLOR,
+ GetTransparency()),
+ 0, FXFILL_ALTERNATE);
}
+ }
}
-FX_BOOL CPWL_CBButton::OnLButtonDown(const CPDF_Point & point, FX_DWORD nFlag)
-{
- CPWL_Wnd::OnLButtonDown(point,nFlag);
+FX_BOOL CPWL_CBButton::OnLButtonDown(const CPDF_Point& point, FX_DWORD nFlag) {
+ CPWL_Wnd::OnLButtonDown(point, nFlag);
- SetCapture();
+ SetCapture();
- if (CPWL_Wnd * pParent = GetParentWindow())
- {
- pParent->OnNotify(this,PNM_LBUTTONDOWN,0,PWL_MAKEDWORD(point.x,point.y));
- }
+ if (CPWL_Wnd* pParent = GetParentWindow()) {
+ pParent->OnNotify(this, PNM_LBUTTONDOWN, 0,
+ PWL_MAKEDWORD(point.x, point.y));
+ }
- return TRUE;
+ return TRUE;
}
-FX_BOOL CPWL_CBButton::OnLButtonUp(const CPDF_Point & point, FX_DWORD nFlag)
-{
- CPWL_Wnd::OnLButtonUp(point, nFlag);
+FX_BOOL CPWL_CBButton::OnLButtonUp(const CPDF_Point& point, FX_DWORD nFlag) {
+ CPWL_Wnd::OnLButtonUp(point, nFlag);
- ReleaseCapture();
+ ReleaseCapture();
- return TRUE;
+ return TRUE;
}
/* ---------------------------- CPWL_ComboBox ---------------------------- */
-CPWL_ComboBox::CPWL_ComboBox() : m_pEdit(NULL),
- m_pButton(NULL),
- m_pList(NULL),
- m_bPopup(FALSE),
- m_nPopupWhere(0),
- m_nSelectItem(-1),
- m_pFillerNotify(NULL)
-{
-}
+CPWL_ComboBox::CPWL_ComboBox()
+ : m_pEdit(NULL),
+ m_pButton(NULL),
+ m_pList(NULL),
+ m_bPopup(FALSE),
+ m_nPopupWhere(0),
+ m_nSelectItem(-1),
+ m_pFillerNotify(NULL) {}
-CFX_ByteString CPWL_ComboBox::GetClassName() const
-{
- return "CPWL_ComboBox";
+CFX_ByteString CPWL_ComboBox::GetClassName() const {
+ return "CPWL_ComboBox";
}
-void CPWL_ComboBox::OnCreate(PWL_CREATEPARAM & cp)
-{
- cp.dwFlags &= ~PWS_HSCROLL;
- cp.dwFlags &= ~PWS_VSCROLL;
+void CPWL_ComboBox::OnCreate(PWL_CREATEPARAM& cp) {
+ cp.dwFlags &= ~PWS_HSCROLL;
+ cp.dwFlags &= ~PWS_VSCROLL;
}
-void CPWL_ComboBox::SetFocus()
-{
- if (m_pEdit)
- m_pEdit->SetFocus();
+void CPWL_ComboBox::SetFocus() {
+ if (m_pEdit)
+ m_pEdit->SetFocus();
}
-void CPWL_ComboBox::KillFocus()
-{
- SetPopup(FALSE);
- CPWL_Wnd::KillFocus();
+void CPWL_ComboBox::KillFocus() {
+ SetPopup(FALSE);
+ CPWL_Wnd::KillFocus();
}
-CFX_WideString CPWL_ComboBox::GetText() const
-{
- if (m_pEdit)
- {
- return m_pEdit->GetText();
- }
- return CFX_WideString();
+CFX_WideString CPWL_ComboBox::GetText() const {
+ if (m_pEdit) {
+ return m_pEdit->GetText();
+ }
+ return CFX_WideString();
}
-void CPWL_ComboBox::SetText(const FX_WCHAR* text)
-{
- if (m_pEdit)
- m_pEdit->SetText(text);
+void CPWL_ComboBox::SetText(const FX_WCHAR* text) {
+ if (m_pEdit)
+ m_pEdit->SetText(text);
}
-void CPWL_ComboBox::AddString(const FX_WCHAR* string)
-{
- if (m_pList)
- m_pList->AddString(string);
+void CPWL_ComboBox::AddString(const FX_WCHAR* string) {
+ if (m_pList)
+ m_pList->AddString(string);
}
-int32_t CPWL_ComboBox::GetSelect() const
-{
- return m_nSelectItem;
+int32_t CPWL_ComboBox::GetSelect() const {
+ return m_nSelectItem;
}
-void CPWL_ComboBox::SetSelect(int32_t nItemIndex)
-{
- if (m_pList)
- m_pList->Select(nItemIndex);
+void CPWL_ComboBox::SetSelect(int32_t nItemIndex) {
+ if (m_pList)
+ m_pList->Select(nItemIndex);
- m_pEdit->SetText(m_pList->GetText().c_str());
+ m_pEdit->SetText(m_pList->GetText().c_str());
- m_nSelectItem = nItemIndex;
+ m_nSelectItem = nItemIndex;
}
-void CPWL_ComboBox::SetEditSel(int32_t nStartChar,int32_t nEndChar)
-{
- if (m_pEdit)
- {
- m_pEdit->SetSel(nStartChar,nEndChar);
- }
+void CPWL_ComboBox::SetEditSel(int32_t nStartChar, int32_t nEndChar) {
+ if (m_pEdit) {
+ m_pEdit->SetSel(nStartChar, nEndChar);
+ }
}
-void CPWL_ComboBox::GetEditSel(int32_t & nStartChar, int32_t & nEndChar) const
-{
- nStartChar = -1;
- nEndChar = -1;
+void CPWL_ComboBox::GetEditSel(int32_t& nStartChar, int32_t& nEndChar) const {
+ nStartChar = -1;
+ nEndChar = -1;
- if (m_pEdit)
- {
- m_pEdit->GetSel(nStartChar,nEndChar);
- }
+ if (m_pEdit) {
+ m_pEdit->GetSel(nStartChar, nEndChar);
+ }
}
-void CPWL_ComboBox::Clear()
-{
- if (m_pEdit)
- {
- m_pEdit->Clear();
- }
+void CPWL_ComboBox::Clear() {
+ if (m_pEdit) {
+ m_pEdit->Clear();
+ }
}
-void CPWL_ComboBox::CreateChildWnd(const PWL_CREATEPARAM & cp)
-{
- CreateEdit(cp);
- CreateButton(cp);
- CreateListBox(cp);
+void CPWL_ComboBox::CreateChildWnd(const PWL_CREATEPARAM& cp) {
+ CreateEdit(cp);
+ CreateButton(cp);
+ CreateListBox(cp);
}
-void CPWL_ComboBox::CreateEdit(const PWL_CREATEPARAM & cp)
-{
- if (!m_pEdit)
- {
- m_pEdit = new CPWL_CBEdit;
- m_pEdit->AttachFFLData(m_pFormFiller);
+void CPWL_ComboBox::CreateEdit(const PWL_CREATEPARAM& cp) {
+ if (!m_pEdit) {
+ m_pEdit = new CPWL_CBEdit;
+ m_pEdit->AttachFFLData(m_pFormFiller);
- PWL_CREATEPARAM ecp = cp;
- ecp.pParentWnd = this;
- ecp.dwFlags = PWS_VISIBLE | PWS_CHILD | PWS_BORDER | PES_CENTER | PES_AUTOSCROLL | PES_UNDO;
+ PWL_CREATEPARAM ecp = cp;
+ ecp.pParentWnd = this;
+ ecp.dwFlags = PWS_VISIBLE | PWS_CHILD | PWS_BORDER | PES_CENTER |
+ PES_AUTOSCROLL | PES_UNDO;
- if (HasFlag(PWS_AUTOFONTSIZE))
- ecp.dwFlags |= PWS_AUTOFONTSIZE;
+ if (HasFlag(PWS_AUTOFONTSIZE))
+ ecp.dwFlags |= PWS_AUTOFONTSIZE;
- if (!HasFlag(PCBS_ALLOWCUSTOMTEXT))
- ecp.dwFlags |= PWS_READONLY;
+ if (!HasFlag(PCBS_ALLOWCUSTOMTEXT))
+ ecp.dwFlags |= PWS_READONLY;
- ecp.rcRectWnd = CPDF_Rect(0,0,0,0);
- ecp.dwBorderWidth = 0;
- ecp.nBorderStyle = PBS_SOLID;
+ ecp.rcRectWnd = CPDF_Rect(0, 0, 0, 0);
+ ecp.dwBorderWidth = 0;
+ ecp.nBorderStyle = PBS_SOLID;
- m_pEdit->Create(ecp);
- }
+ m_pEdit->Create(ecp);
+ }
}
-void CPWL_ComboBox::CreateButton(const PWL_CREATEPARAM & cp)
-{
- if (!m_pButton)
- {
- m_pButton = new CPWL_CBButton;
+void CPWL_ComboBox::CreateButton(const PWL_CREATEPARAM& cp) {
+ if (!m_pButton) {
+ m_pButton = new CPWL_CBButton;
- PWL_CREATEPARAM bcp = cp;
- bcp.pParentWnd = this;
- bcp.dwFlags = PWS_VISIBLE | PWS_CHILD | PWS_BORDER | PWS_BACKGROUND;
- bcp.sBackgroundColor = PWL_SCROLLBAR_BKCOLOR;
- bcp.sBorderColor = PWL_DEFAULT_BLACKCOLOR;
- bcp.dwBorderWidth = 2;
- bcp.nBorderStyle = PBS_BEVELED;
- bcp.eCursorType = FXCT_ARROW;
+ PWL_CREATEPARAM bcp = cp;
+ bcp.pParentWnd = this;
+ bcp.dwFlags = PWS_VISIBLE | PWS_CHILD | PWS_BORDER | PWS_BACKGROUND;
+ bcp.sBackgroundColor = PWL_SCROLLBAR_BKCOLOR;
+ bcp.sBorderColor = PWL_DEFAULT_BLACKCOLOR;
+ bcp.dwBorderWidth = 2;
+ bcp.nBorderStyle = PBS_BEVELED;
+ bcp.eCursorType = FXCT_ARROW;
- m_pButton->Create(bcp);
- }
+ m_pButton->Create(bcp);
+ }
}
-void CPWL_ComboBox::CreateListBox(const PWL_CREATEPARAM & cp)
-{
- if (!m_pList)
- {
- m_pList = new CPWL_CBListBox;
- m_pList->AttachFFLData(m_pFormFiller);
- PWL_CREATEPARAM lcp = cp;
- lcp.pParentWnd = this;
- lcp.dwFlags = PWS_CHILD | PWS_BORDER | PWS_BACKGROUND | PLBS_HOVERSEL | PWS_VSCROLL;
- lcp.nBorderStyle = PBS_SOLID;
- lcp.dwBorderWidth = 1;
- lcp.eCursorType = FXCT_ARROW;
- lcp.rcRectWnd = CPDF_Rect(0,0,0,0);
-
- if (cp.dwFlags & PWS_AUTOFONTSIZE)
- lcp.fFontSize = PWLCB_DEFAULTFONTSIZE;
- else
- lcp.fFontSize = cp.fFontSize;
-
- if (cp.sBorderColor.nColorType == COLORTYPE_TRANSPARENT)
- lcp.sBorderColor = PWL_DEFAULT_BLACKCOLOR;
-
- if (cp.sBackgroundColor.nColorType == COLORTYPE_TRANSPARENT)
- lcp.sBackgroundColor = PWL_DEFAULT_WHITECOLOR;
-
- m_pList->Create(lcp);
- }
+void CPWL_ComboBox::CreateListBox(const PWL_CREATEPARAM& cp) {
+ if (!m_pList) {
+ m_pList = new CPWL_CBListBox;
+ m_pList->AttachFFLData(m_pFormFiller);
+ PWL_CREATEPARAM lcp = cp;
+ lcp.pParentWnd = this;
+ lcp.dwFlags =
+ PWS_CHILD | PWS_BORDER | PWS_BACKGROUND | PLBS_HOVERSEL | PWS_VSCROLL;
+ lcp.nBorderStyle = PBS_SOLID;
+ lcp.dwBorderWidth = 1;
+ lcp.eCursorType = FXCT_ARROW;
+ lcp.rcRectWnd = CPDF_Rect(0, 0, 0, 0);
+
+ if (cp.dwFlags & PWS_AUTOFONTSIZE)
+ lcp.fFontSize = PWLCB_DEFAULTFONTSIZE;
+ else
+ lcp.fFontSize = cp.fFontSize;
+
+ if (cp.sBorderColor.nColorType == COLORTYPE_TRANSPARENT)
+ lcp.sBorderColor = PWL_DEFAULT_BLACKCOLOR;
+
+ if (cp.sBackgroundColor.nColorType == COLORTYPE_TRANSPARENT)
+ lcp.sBackgroundColor = PWL_DEFAULT_WHITECOLOR;
+
+ m_pList->Create(lcp);
+ }
}
-void CPWL_ComboBox::RePosChildWnd()
-{
- CPDF_Rect rcClient = GetClientRect();
+void CPWL_ComboBox::RePosChildWnd() {
+ CPDF_Rect rcClient = GetClientRect();
- if (m_bPopup)
- {
- CPDF_Rect rclient = GetClientRect();
- CPDF_Rect rcButton = rclient;
- CPDF_Rect rcEdit = rcClient;
- CPDF_Rect rcList = CPWL_Wnd::GetWindowRect();
+ if (m_bPopup) {
+ CPDF_Rect rclient = GetClientRect();
+ CPDF_Rect rcButton = rclient;
+ CPDF_Rect rcEdit = rcClient;
+ CPDF_Rect rcList = CPWL_Wnd::GetWindowRect();
- FX_FLOAT fOldWindowHeight = m_rcOldWindow.Height();
- FX_FLOAT fOldClientHeight = fOldWindowHeight - GetBorderWidth() * 2;
+ FX_FLOAT fOldWindowHeight = m_rcOldWindow.Height();
+ FX_FLOAT fOldClientHeight = fOldWindowHeight - GetBorderWidth() * 2;
- switch (m_nPopupWhere)
- {
- case 0:
- rcButton.left = rcButton.right - PWL_COMBOBOX_BUTTON_WIDTH;
+ switch (m_nPopupWhere) {
+ case 0:
+ rcButton.left = rcButton.right - PWL_COMBOBOX_BUTTON_WIDTH;
- if (rcButton.left < rclient.left)
- rcButton.left = rclient.left;
+ if (rcButton.left < rclient.left)
+ rcButton.left = rclient.left;
- rcButton.bottom = rcButton.top - fOldClientHeight;
+ rcButton.bottom = rcButton.top - fOldClientHeight;
- rcEdit.right = rcButton.left - 1.0f;
+ rcEdit.right = rcButton.left - 1.0f;
- if (rcEdit.left < rclient.left)
- rcEdit.left = rclient.left;
+ if (rcEdit.left < rclient.left)
+ rcEdit.left = rclient.left;
- if (rcEdit.right < rcEdit.left)
- rcEdit.right = rcEdit.left;
+ if (rcEdit.right < rcEdit.left)
+ rcEdit.right = rcEdit.left;
- rcEdit.bottom = rcEdit.top - fOldClientHeight;
+ rcEdit.bottom = rcEdit.top - fOldClientHeight;
- rcList.top -= fOldWindowHeight;
+ rcList.top -= fOldWindowHeight;
- break;
- case 1:
- rcButton.left = rcButton.right - PWL_COMBOBOX_BUTTON_WIDTH;
+ break;
+ case 1:
+ rcButton.left = rcButton.right - PWL_COMBOBOX_BUTTON_WIDTH;
- if (rcButton.left < rclient.left)
- rcButton.left = rclient.left;
+ if (rcButton.left < rclient.left)
+ rcButton.left = rclient.left;
- rcButton.top = rcButton.bottom + fOldClientHeight;
+ rcButton.top = rcButton.bottom + fOldClientHeight;
- rcEdit.right = rcButton.left - 1.0f;
+ rcEdit.right = rcButton.left - 1.0f;
- if (rcEdit.left < rclient.left)
- rcEdit.left = rclient.left;
+ if (rcEdit.left < rclient.left)
+ rcEdit.left = rclient.left;
- if (rcEdit.right < rcEdit.left)
- rcEdit.right = rcEdit.left;
+ if (rcEdit.right < rcEdit.left)
+ rcEdit.right = rcEdit.left;
- rcEdit.top = rcEdit.bottom + fOldClientHeight;
+ rcEdit.top = rcEdit.bottom + fOldClientHeight;
- rcList.bottom += fOldWindowHeight;
+ rcList.bottom += fOldWindowHeight;
- break;
- }
+ break;
+ }
- if (m_pButton)
- m_pButton->Move(rcButton,TRUE,FALSE);
+ if (m_pButton)
+ m_pButton->Move(rcButton, TRUE, FALSE);
- if (m_pEdit)
- m_pEdit->Move(rcEdit,TRUE,FALSE);
+ if (m_pEdit)
+ m_pEdit->Move(rcEdit, TRUE, FALSE);
- if (m_pList)
- {
- m_pList->SetVisible(TRUE);
- m_pList->Move(rcList,TRUE,FALSE);
- m_pList->ScrollToListItem(m_nSelectItem);
- }
+ if (m_pList) {
+ m_pList->SetVisible(TRUE);
+ m_pList->Move(rcList, TRUE, FALSE);
+ m_pList->ScrollToListItem(m_nSelectItem);
}
- else
- {
- CPDF_Rect rcButton = rcClient;
+ } else {
+ CPDF_Rect rcButton = rcClient;
- rcButton.left = rcButton.right - PWL_COMBOBOX_BUTTON_WIDTH;
+ rcButton.left = rcButton.right - PWL_COMBOBOX_BUTTON_WIDTH;
- if (rcButton.left < rcClient.left)
- rcButton.left = rcClient.left;
+ if (rcButton.left < rcClient.left)
+ rcButton.left = rcClient.left;
- if (m_pButton)
- m_pButton->Move(rcButton,TRUE,FALSE);
+ if (m_pButton)
+ m_pButton->Move(rcButton, TRUE, FALSE);
- CPDF_Rect rcEdit = rcClient;
- rcEdit.right = rcButton.left - 1.0f;
+ CPDF_Rect rcEdit = rcClient;
+ rcEdit.right = rcButton.left - 1.0f;
- if (rcEdit.left < rcClient.left)
- rcEdit.left = rcClient.left;
+ if (rcEdit.left < rcClient.left)
+ rcEdit.left = rcClient.left;
- if (rcEdit.right < rcEdit.left)
- rcEdit.right = rcEdit.left;
+ if (rcEdit.right < rcEdit.left)
+ rcEdit.right = rcEdit.left;
- if (m_pEdit)
- m_pEdit->Move(rcEdit,TRUE,FALSE);
+ if (m_pEdit)
+ m_pEdit->Move(rcEdit, TRUE, FALSE);
- if (m_pList)
- m_pList->SetVisible(FALSE);
- }
+ if (m_pList)
+ m_pList->SetVisible(FALSE);
+ }
}
-void CPWL_ComboBox::SelectAll()
-{
- if (m_pEdit && HasFlag(PCBS_ALLOWCUSTOMTEXT))
- m_pEdit->SelectAll();
-}
-
-CPDF_Rect CPWL_ComboBox::GetFocusRect() const
-{
- return CPDF_Rect();
-}
-
-void CPWL_ComboBox::SetPopup(FX_BOOL bPopup)
-{
- if (!m_pList) return;
- if (bPopup == m_bPopup) return;
- FX_FLOAT fListHeight = m_pList->GetContentRect().Height();
- if (!IsFloatBigger(fListHeight,0.0f)) return;
-
- if (bPopup)
- {
- if (m_pFillerNotify)
- {
- int32_t nWhere = 0;
- FX_FLOAT fPopupRet = 0.0f;
- FX_FLOAT fPopupMin = 0.0f;
- if (m_pList->GetCount() > 3)
- fPopupMin = m_pList->GetFirstHeight() * 3 + m_pList->GetBorderWidth() * 2;
- FX_FLOAT fPopupMax = fListHeight + m_pList->GetBorderWidth() * 2;
- m_pFillerNotify->QueryWherePopup(GetAttachedData(), fPopupMin,fPopupMax,nWhere,fPopupRet);
-
- if (IsFloatBigger(fPopupRet,0.0f))
- {
- m_bPopup = bPopup;
-
- CPDF_Rect rcWindow = CPWL_Wnd::GetWindowRect();
- m_rcOldWindow = rcWindow;
- switch (nWhere)
- {
- default:
- case 0:
- rcWindow.bottom -= fPopupRet;
- break;
- case 1:
- rcWindow.top += fPopupRet;
- break;
- }
-
- m_nPopupWhere = nWhere;
- Move(rcWindow, TRUE, TRUE);
- }
- }
- }
- else
- {
+void CPWL_ComboBox::SelectAll() {
+ if (m_pEdit && HasFlag(PCBS_ALLOWCUSTOMTEXT))
+ m_pEdit->SelectAll();
+}
+
+CPDF_Rect CPWL_ComboBox::GetFocusRect() const {
+ return CPDF_Rect();
+}
+
+void CPWL_ComboBox::SetPopup(FX_BOOL bPopup) {
+ if (!m_pList)
+ return;
+ if (bPopup == m_bPopup)
+ return;
+ FX_FLOAT fListHeight = m_pList->GetContentRect().Height();
+ if (!IsFloatBigger(fListHeight, 0.0f))
+ return;
+
+ if (bPopup) {
+ if (m_pFillerNotify) {
+ int32_t nWhere = 0;
+ FX_FLOAT fPopupRet = 0.0f;
+ FX_FLOAT fPopupMin = 0.0f;
+ if (m_pList->GetCount() > 3)
+ fPopupMin =
+ m_pList->GetFirstHeight() * 3 + m_pList->GetBorderWidth() * 2;
+ FX_FLOAT fPopupMax = fListHeight + m_pList->GetBorderWidth() * 2;
+ m_pFillerNotify->QueryWherePopup(GetAttachedData(), fPopupMin, fPopupMax,
+ nWhere, fPopupRet);
+
+ if (IsFloatBigger(fPopupRet, 0.0f)) {
m_bPopup = bPopup;
- Move(m_rcOldWindow, TRUE, TRUE);
+
+ CPDF_Rect rcWindow = CPWL_Wnd::GetWindowRect();
+ m_rcOldWindow = rcWindow;
+ switch (nWhere) {
+ default:
+ case 0:
+ rcWindow.bottom -= fPopupRet;
+ break;
+ case 1:
+ rcWindow.top += fPopupRet;
+ break;
+ }
+
+ m_nPopupWhere = nWhere;
+ Move(rcWindow, TRUE, TRUE);
+ }
}
+ } else {
+ m_bPopup = bPopup;
+ Move(m_rcOldWindow, TRUE, TRUE);
+ }
}
-FX_BOOL CPWL_ComboBox::OnKeyDown(FX_WORD nChar, FX_DWORD nFlag)
-{
- if (!m_pList) return FALSE;
- if (!m_pEdit) return FALSE;
+FX_BOOL CPWL_ComboBox::OnKeyDown(FX_WORD nChar, FX_DWORD nFlag) {
+ if (!m_pList)
+ return FALSE;
+ if (!m_pEdit)
+ return FALSE;
- m_nSelectItem = -1;
+ m_nSelectItem = -1;
- switch (nChar)
- {
+ switch (nChar) {
case FWL_VKEY_Up:
- if (m_pList->GetCurSel() > 0)
- {
- FX_BOOL bExit = FALSE;
- if (m_pList->OnKeyDownWithExit(nChar,bExit,nFlag))
- {
- if (bExit) return FALSE;
- SetSelectText();
- }
+ if (m_pList->GetCurSel() > 0) {
+ FX_BOOL bExit = FALSE;
+ if (m_pList->OnKeyDownWithExit(nChar, bExit, nFlag)) {
+ if (bExit)
+ return FALSE;
+ SetSelectText();
}
- return TRUE;
+ }
+ return TRUE;
case FWL_VKEY_Down:
- if (m_pList->GetCurSel() < m_pList->GetCount() - 1)
- {
- FX_BOOL bExit = FALSE;
- if (m_pList->OnKeyDownWithExit(nChar,bExit,nFlag))
- {
- if (bExit) return FALSE;
- SetSelectText();
- }
+ if (m_pList->GetCurSel() < m_pList->GetCount() - 1) {
+ FX_BOOL bExit = FALSE;
+ if (m_pList->OnKeyDownWithExit(nChar, bExit, nFlag)) {
+ if (bExit)
+ return FALSE;
+ SetSelectText();
}
- return TRUE;
- }
+ }
+ return TRUE;
+ }
- if (HasFlag(PCBS_ALLOWCUSTOMTEXT))
- return m_pEdit->OnKeyDown(nChar,nFlag);
+ if (HasFlag(PCBS_ALLOWCUSTOMTEXT))
+ return m_pEdit->OnKeyDown(nChar, nFlag);
- return FALSE;
+ return FALSE;
}
-FX_BOOL CPWL_ComboBox::OnChar(FX_WORD nChar, FX_DWORD nFlag)
-{
- if (!m_pList)
- return FALSE;
+FX_BOOL CPWL_ComboBox::OnChar(FX_WORD nChar, FX_DWORD nFlag) {
+ if (!m_pList)
+ return FALSE;
- if (!m_pEdit)
- return FALSE;
+ if (!m_pEdit)
+ return FALSE;
- m_nSelectItem = -1;
- if (HasFlag(PCBS_ALLOWCUSTOMTEXT))
- return m_pEdit->OnChar(nChar,nFlag);
+ m_nSelectItem = -1;
+ if (HasFlag(PCBS_ALLOWCUSTOMTEXT))
+ return m_pEdit->OnChar(nChar, nFlag);
- FX_BOOL bExit = FALSE;
- return m_pList->OnCharWithExit(nChar,bExit,nFlag) ? bExit : FALSE;
+ FX_BOOL bExit = FALSE;
+ return m_pList->OnCharWithExit(nChar, bExit, nFlag) ? bExit : FALSE;
}
-void CPWL_ComboBox::OnNotify(CPWL_Wnd* pWnd, FX_DWORD msg, intptr_t wParam, intptr_t lParam)
-{
- switch (msg)
- {
+void CPWL_ComboBox::OnNotify(CPWL_Wnd* pWnd,
+ FX_DWORD msg,
+ intptr_t wParam,
+ intptr_t lParam) {
+ switch (msg) {
case PNM_LBUTTONDOWN:
- if (pWnd == m_pButton)
- {
- SetPopup(!m_bPopup);
- return;
- }
- break;
+ if (pWnd == m_pButton) {
+ SetPopup(!m_bPopup);
+ return;
+ }
+ break;
case PNM_LBUTTONUP:
- if (m_pEdit && m_pList)
- {
- if (pWnd == m_pList)
- {
- SetSelectText();
- SelectAll();
- m_pEdit->SetFocus();
- SetPopup(FALSE);
- return;
- }
+ if (m_pEdit && m_pList) {
+ if (pWnd == m_pList) {
+ SetSelectText();
+ SelectAll();
+ m_pEdit->SetFocus();
+ SetPopup(FALSE);
+ return;
}
- }
+ }
+ }
- CPWL_Wnd::OnNotify(pWnd,msg,wParam,lParam);
+ CPWL_Wnd::OnNotify(pWnd, msg, wParam, lParam);
}
-FX_BOOL CPWL_ComboBox::IsPopup() const
-{
- return m_bPopup;
+FX_BOOL CPWL_ComboBox::IsPopup() const {
+ return m_bPopup;
}
-void CPWL_ComboBox::SetSelectText()
-{
- CFX_WideString swText = m_pList->GetText();
- m_pEdit->SelectAll();
- m_pEdit->ReplaceSel(m_pList->GetText().c_str());
- m_pEdit->SelectAll();
+void CPWL_ComboBox::SetSelectText() {
+ CFX_WideString swText = m_pList->GetText();
+ m_pEdit->SelectAll();
+ m_pEdit->ReplaceSel(m_pList->GetText().c_str());
+ m_pEdit->SelectAll();
- m_nSelectItem = m_pList->GetCurSel();
+ m_nSelectItem = m_pList->GetCurSel();
}
-FX_BOOL CPWL_ComboBox::IsModified() const
-{
- return m_pEdit->IsModified();
+FX_BOOL CPWL_ComboBox::IsModified() const {
+ return m_pEdit->IsModified();
}
-void CPWL_ComboBox::SetFillerNotify(IPWL_Filler_Notify* pNotify)
-{
- m_pFillerNotify = pNotify;
+void CPWL_ComboBox::SetFillerNotify(IPWL_Filler_Notify* pNotify) {
+ m_pFillerNotify = pNotify;
- if (m_pEdit)
- m_pEdit->SetFillerNotify(pNotify);
+ if (m_pEdit)
+ m_pEdit->SetFillerNotify(pNotify);
- if (m_pList)
- m_pList->SetFillerNotify(pNotify);
+ if (m_pList)
+ m_pList->SetFillerNotify(pNotify);
}
diff --git a/fpdfsdk/src/pdfwindow/PWL_Edit.cpp b/fpdfsdk/src/pdfwindow/PWL_Edit.cpp
index 58d8a79da1..edefd7ecd2 100644
--- a/fpdfsdk/src/pdfwindow/PWL_Edit.cpp
+++ b/fpdfsdk/src/pdfwindow/PWL_Edit.cpp
@@ -17,1301 +17,1209 @@
/* ---------------------------- CPWL_Edit ------------------------------ */
-CPWL_Edit::CPWL_Edit() : m_pFillerNotify(NULL),
- m_pSpellCheck(NULL),
- m_bFocus(FALSE)
-{
- m_pFormFiller = NULL;
+CPWL_Edit::CPWL_Edit()
+ : m_pFillerNotify(NULL), m_pSpellCheck(NULL), m_bFocus(FALSE) {
+ m_pFormFiller = NULL;
}
-CPWL_Edit::~CPWL_Edit()
-{
- ASSERT(m_bFocus == FALSE);
+CPWL_Edit::~CPWL_Edit() {
+ ASSERT(m_bFocus == FALSE);
}
-CFX_ByteString CPWL_Edit::GetClassName() const
-{
- return PWL_CLASSNAME_EDIT;
+CFX_ByteString CPWL_Edit::GetClassName() const {
+ return PWL_CLASSNAME_EDIT;
}
-void CPWL_Edit::OnDestroy()
-{
-}
+void CPWL_Edit::OnDestroy() {}
+
+void CPWL_Edit::SetText(const FX_WCHAR* csText) {
+ CFX_WideString swText = csText;
+
+ if (HasFlag(PES_RICH)) {
+ CFX_ByteString sValue = CFX_ByteString::FromUnicode(swText);
+
+ if (CXML_Element* pXML =
+ CXML_Element::Parse(sValue.c_str(), sValue.GetLength())) {
+ int32_t nCount = pXML->CountChildren();
+ FX_BOOL bFirst = TRUE;
+
+ swText.Empty();
+
+ for (int32_t i = 0; i < nCount; i++) {
+ if (CXML_Element* pSubElement = pXML->GetElement(i)) {
+ CFX_ByteString tag = pSubElement->GetTagName();
+ if (tag.EqualNoCase("p")) {
+ int nChild = pSubElement->CountChildren();
+ CFX_WideString swSection;
+ for (int32_t j = 0; j < nChild; j++) {
+ swSection += pSubElement->GetContent(j);
+ }
+
+ if (bFirst)
+ bFirst = FALSE;
+ else
+ swText += FWL_VKEY_Return;
+ swText += swSection;
+ }
+ }
+ }
+
+ delete pXML;
+ }
+ }
-void CPWL_Edit::SetText(const FX_WCHAR* csText)
-{
- CFX_WideString swText = csText;
-
- if (HasFlag(PES_RICH))
- {
- CFX_ByteString sValue = CFX_ByteString::FromUnicode(swText);
-
- if (CXML_Element * pXML = CXML_Element::Parse(sValue.c_str(), sValue.GetLength()))
- {
- int32_t nCount = pXML->CountChildren();
- FX_BOOL bFirst = TRUE;
-
- swText.Empty();
-
- for (int32_t i=0; i<nCount; i++)
- {
- if (CXML_Element * pSubElement = pXML->GetElement(i))
- {
- CFX_ByteString tag=pSubElement->GetTagName();
- if (tag.EqualNoCase("p"))
- {
- int nChild = pSubElement->CountChildren();
- CFX_WideString swSection;
- for(int32_t j=0; j<nChild; j++)
- {
- swSection += pSubElement->GetContent(j);
- }
-
- if (bFirst)bFirst = FALSE;
- else
- swText += FWL_VKEY_Return;
- swText += swSection;
- }
- }
- }
-
- delete pXML;
- }
- }
-
- m_pEdit->SetText(swText.c_str());
+ m_pEdit->SetText(swText.c_str());
}
-void CPWL_Edit::RePosChildWnd()
-{
- if (CPWL_ScrollBar * pVSB = GetVScrollBar()) {
- CPDF_Rect rcWindow = m_rcOldWindow;
- CPDF_Rect rcVScroll = CPDF_Rect(rcWindow.right,
- rcWindow.bottom,
- rcWindow.right + PWL_SCROLLBAR_WIDTH,
- rcWindow.top);
- pVSB->Move(rcVScroll, TRUE, FALSE);
- }
+void CPWL_Edit::RePosChildWnd() {
+ if (CPWL_ScrollBar* pVSB = GetVScrollBar()) {
+ CPDF_Rect rcWindow = m_rcOldWindow;
+ CPDF_Rect rcVScroll =
+ CPDF_Rect(rcWindow.right, rcWindow.bottom,
+ rcWindow.right + PWL_SCROLLBAR_WIDTH, rcWindow.top);
+ pVSB->Move(rcVScroll, TRUE, FALSE);
+ }
- if (m_pEditCaret && !HasFlag(PES_TEXTOVERFLOW))
- m_pEditCaret->SetClipRect(CPWL_Utils::InflateRect(GetClientRect(),1.0f)); //+1 for caret beside border
+ if (m_pEditCaret && !HasFlag(PES_TEXTOVERFLOW))
+ m_pEditCaret->SetClipRect(CPWL_Utils::InflateRect(
+ GetClientRect(), 1.0f)); //+1 for caret beside border
- CPWL_EditCtrl::RePosChildWnd();
+ CPWL_EditCtrl::RePosChildWnd();
}
-CPDF_Rect CPWL_Edit::GetClientRect() const
-{
- CPDF_Rect rcClient = CPWL_Utils::DeflateRect(GetWindowRect(),(FX_FLOAT)(GetBorderWidth()+GetInnerBorderWidth()));
+CPDF_Rect CPWL_Edit::GetClientRect() const {
+ CPDF_Rect rcClient = CPWL_Utils::DeflateRect(
+ GetWindowRect(), (FX_FLOAT)(GetBorderWidth() + GetInnerBorderWidth()));
- if (CPWL_ScrollBar * pVSB = GetVScrollBar())
- {
- if (pVSB->IsVisible())
- {
- rcClient.right -= PWL_SCROLLBAR_WIDTH;
- }
- }
+ if (CPWL_ScrollBar* pVSB = GetVScrollBar()) {
+ if (pVSB->IsVisible()) {
+ rcClient.right -= PWL_SCROLLBAR_WIDTH;
+ }
+ }
- return rcClient;
+ return rcClient;
}
-void CPWL_Edit::SetAlignFormatH(PWL_EDIT_ALIGNFORMAT_H nFormat, FX_BOOL bPaint/* = TRUE*/)
-{
- m_pEdit->SetAlignmentH((int32_t)nFormat, bPaint);
+void CPWL_Edit::SetAlignFormatH(PWL_EDIT_ALIGNFORMAT_H nFormat,
+ FX_BOOL bPaint /* = TRUE*/) {
+ m_pEdit->SetAlignmentH((int32_t)nFormat, bPaint);
}
-void CPWL_Edit::SetAlignFormatV(PWL_EDIT_ALIGNFORMAT_V nFormat, FX_BOOL bPaint/* = TRUE*/)
-{
- m_pEdit->SetAlignmentV((int32_t)nFormat, bPaint);
+void CPWL_Edit::SetAlignFormatV(PWL_EDIT_ALIGNFORMAT_V nFormat,
+ FX_BOOL bPaint /* = TRUE*/) {
+ m_pEdit->SetAlignmentV((int32_t)nFormat, bPaint);
}
-FX_BOOL CPWL_Edit::CanSelectAll() const
-{
- return GetSelectWordRange() != m_pEdit->GetWholeWordRange();
+FX_BOOL CPWL_Edit::CanSelectAll() const {
+ return GetSelectWordRange() != m_pEdit->GetWholeWordRange();
}
-FX_BOOL CPWL_Edit::CanClear() const
-{
- return !IsReadOnly() && m_pEdit->IsSelected();
+FX_BOOL CPWL_Edit::CanClear() const {
+ return !IsReadOnly() && m_pEdit->IsSelected();
}
-FX_BOOL CPWL_Edit::CanCopy() const
-{
- return !HasFlag(PES_PASSWORD) && !HasFlag(PES_NOREAD) && m_pEdit->IsSelected();
+FX_BOOL CPWL_Edit::CanCopy() const {
+ return !HasFlag(PES_PASSWORD) && !HasFlag(PES_NOREAD) &&
+ m_pEdit->IsSelected();
}
-FX_BOOL CPWL_Edit::CanCut() const
-{
- return CanCopy() && !IsReadOnly();
+FX_BOOL CPWL_Edit::CanCut() const {
+ return CanCopy() && !IsReadOnly();
}
-FX_BOOL CPWL_Edit::CanPaste() const
-{
- if (IsReadOnly()) return FALSE;
+FX_BOOL CPWL_Edit::CanPaste() const {
+ if (IsReadOnly())
+ return FALSE;
- CFX_WideString swClipboard;
- if (IFX_SystemHandler* pSH = GetSystemHandler())
- swClipboard = pSH->GetClipboardText(GetAttachedHWnd());
+ CFX_WideString swClipboard;
+ if (IFX_SystemHandler* pSH = GetSystemHandler())
+ swClipboard = pSH->GetClipboardText(GetAttachedHWnd());
- return !swClipboard.IsEmpty();
+ return !swClipboard.IsEmpty();
}
-void CPWL_Edit::CopyText()
-{
- if (!CanCopy()) return;
+void CPWL_Edit::CopyText() {
+ if (!CanCopy())
+ return;
- CFX_WideString str = m_pEdit->GetSelText();
+ CFX_WideString str = m_pEdit->GetSelText();
- if (IFX_SystemHandler* pSH = GetSystemHandler())
- pSH->SetClipboardText(GetAttachedHWnd(), str);
+ if (IFX_SystemHandler* pSH = GetSystemHandler())
+ pSH->SetClipboardText(GetAttachedHWnd(), str);
}
-void CPWL_Edit::PasteText()
-{
- if (!CanPaste()) return;
-
- CFX_WideString swClipboard;
- if (IFX_SystemHandler* pSH = GetSystemHandler())
- swClipboard = pSH->GetClipboardText(GetAttachedHWnd());
-
- if (m_pFillerNotify)
- {
- FX_BOOL bRC = TRUE;
- FX_BOOL bExit = FALSE;
- CFX_WideString strChangeEx;
- int nSelStart = 0;
- int nSelEnd = 0;
- GetSel(nSelStart, nSelEnd);
- m_pFillerNotify->OnBeforeKeyStroke(TRUE, GetAttachedData(), 0 , swClipboard, strChangeEx, nSelStart, nSelEnd, TRUE, bRC, bExit, 0);
- if (!bRC) return;
- if (bExit) return;
- }
-
- if (swClipboard.GetLength() > 0)
- {
- Clear();
- InsertText(swClipboard.c_str());
- }
-
- if (m_pFillerNotify)
- {
- FX_BOOL bExit = FALSE;
- m_pFillerNotify->OnAfterKeyStroke(TRUE, GetAttachedData(), bExit,0);
- if (bExit) return;
- }
+void CPWL_Edit::PasteText() {
+ if (!CanPaste())
+ return;
+
+ CFX_WideString swClipboard;
+ if (IFX_SystemHandler* pSH = GetSystemHandler())
+ swClipboard = pSH->GetClipboardText(GetAttachedHWnd());
+
+ if (m_pFillerNotify) {
+ FX_BOOL bRC = TRUE;
+ FX_BOOL bExit = FALSE;
+ CFX_WideString strChangeEx;
+ int nSelStart = 0;
+ int nSelEnd = 0;
+ GetSel(nSelStart, nSelEnd);
+ m_pFillerNotify->OnBeforeKeyStroke(TRUE, GetAttachedData(), 0, swClipboard,
+ strChangeEx, nSelStart, nSelEnd, TRUE,
+ bRC, bExit, 0);
+ if (!bRC)
+ return;
+ if (bExit)
+ return;
+ }
+
+ if (swClipboard.GetLength() > 0) {
+ Clear();
+ InsertText(swClipboard.c_str());
+ }
+
+ if (m_pFillerNotify) {
+ FX_BOOL bExit = FALSE;
+ m_pFillerNotify->OnAfterKeyStroke(TRUE, GetAttachedData(), bExit, 0);
+ if (bExit)
+ return;
+ }
}
-void CPWL_Edit::CutText()
-{
- if (!CanCut()) return;
+void CPWL_Edit::CutText() {
+ if (!CanCut())
+ return;
- CFX_WideString str = m_pEdit->GetSelText();
+ CFX_WideString str = m_pEdit->GetSelText();
- if (IFX_SystemHandler* pSH = GetSystemHandler())
- pSH->SetClipboardText(GetAttachedHWnd(), str);
+ if (IFX_SystemHandler* pSH = GetSystemHandler())
+ pSH->SetClipboardText(GetAttachedHWnd(), str);
- m_pEdit->Clear();
+ m_pEdit->Clear();
}
-void CPWL_Edit::OnCreated()
-{
- CPWL_EditCtrl::OnCreated();
+void CPWL_Edit::OnCreated() {
+ CPWL_EditCtrl::OnCreated();
- if (CPWL_ScrollBar * pScroll = GetVScrollBar())
- {
- pScroll->RemoveFlag(PWS_AUTOTRANSPARENT);
- pScroll->SetTransparency(255);
- }
+ if (CPWL_ScrollBar* pScroll = GetVScrollBar()) {
+ pScroll->RemoveFlag(PWS_AUTOTRANSPARENT);
+ pScroll->SetTransparency(255);
+ }
- SetParamByFlag();
+ SetParamByFlag();
- m_rcOldWindow = GetWindowRect();
+ m_rcOldWindow = GetWindowRect();
- m_pEdit->SetOprNotify(this);
- m_pEdit->EnableOprNotify(TRUE);
+ m_pEdit->SetOprNotify(this);
+ m_pEdit->EnableOprNotify(TRUE);
}
-void CPWL_Edit::SetParamByFlag()
-{
- if (HasFlag(PES_RIGHT))
- {
- m_pEdit->SetAlignmentH(2, FALSE);
- }
- else if (HasFlag(PES_MIDDLE))
- {
- m_pEdit->SetAlignmentH(1, FALSE);
- }
- else
- {
- m_pEdit->SetAlignmentH(0, FALSE);
- }
-
- if (HasFlag(PES_BOTTOM))
- {
- m_pEdit->SetAlignmentV(2, FALSE);
- }
- else if (HasFlag(PES_CENTER))
- {
- m_pEdit->SetAlignmentV(1, FALSE);
- }
- else
- {
- m_pEdit->SetAlignmentV(0, FALSE);
- }
-
- if (HasFlag(PES_PASSWORD))
- {
- m_pEdit->SetPasswordChar('*', FALSE);
- }
-
- m_pEdit->SetMultiLine(HasFlag(PES_MULTILINE), FALSE);
- m_pEdit->SetAutoReturn(HasFlag(PES_AUTORETURN), FALSE);
- m_pEdit->SetAutoFontSize(HasFlag(PWS_AUTOFONTSIZE), FALSE);
- m_pEdit->SetAutoScroll(HasFlag(PES_AUTOSCROLL), FALSE);
- m_pEdit->EnableUndo(HasFlag(PES_UNDO));
-
- if (HasFlag(PES_TEXTOVERFLOW))
- {
- SetClipRect(CPDF_Rect(0.0f,0.0f,0.0f,0.0f));
- m_pEdit->SetTextOverflow(TRUE, FALSE);
- }
- else
- {
- if (m_pEditCaret)
- {
- m_pEditCaret->SetClipRect(CPWL_Utils::InflateRect(GetClientRect(),1.0f)); //+1 for caret beside border
- }
- }
-
- if (HasFlag(PES_SPELLCHECK))
- {
- m_pSpellCheck = GetCreationParam().pSpellCheck;
- }
+void CPWL_Edit::SetParamByFlag() {
+ if (HasFlag(PES_RIGHT)) {
+ m_pEdit->SetAlignmentH(2, FALSE);
+ } else if (HasFlag(PES_MIDDLE)) {
+ m_pEdit->SetAlignmentH(1, FALSE);
+ } else {
+ m_pEdit->SetAlignmentH(0, FALSE);
+ }
+
+ if (HasFlag(PES_BOTTOM)) {
+ m_pEdit->SetAlignmentV(2, FALSE);
+ } else if (HasFlag(PES_CENTER)) {
+ m_pEdit->SetAlignmentV(1, FALSE);
+ } else {
+ m_pEdit->SetAlignmentV(0, FALSE);
+ }
+
+ if (HasFlag(PES_PASSWORD)) {
+ m_pEdit->SetPasswordChar('*', FALSE);
+ }
+
+ m_pEdit->SetMultiLine(HasFlag(PES_MULTILINE), FALSE);
+ m_pEdit->SetAutoReturn(HasFlag(PES_AUTORETURN), FALSE);
+ m_pEdit->SetAutoFontSize(HasFlag(PWS_AUTOFONTSIZE), FALSE);
+ m_pEdit->SetAutoScroll(HasFlag(PES_AUTOSCROLL), FALSE);
+ m_pEdit->EnableUndo(HasFlag(PES_UNDO));
+
+ if (HasFlag(PES_TEXTOVERFLOW)) {
+ SetClipRect(CPDF_Rect(0.0f, 0.0f, 0.0f, 0.0f));
+ m_pEdit->SetTextOverflow(TRUE, FALSE);
+ } else {
+ if (m_pEditCaret) {
+ m_pEditCaret->SetClipRect(CPWL_Utils::InflateRect(
+ GetClientRect(), 1.0f)); //+1 for caret beside border
+ }
+ }
+
+ if (HasFlag(PES_SPELLCHECK)) {
+ m_pSpellCheck = GetCreationParam().pSpellCheck;
+ }
}
-void CPWL_Edit::GetThisAppearanceStream(CFX_ByteTextBuf & sAppStream)
-{
- CPWL_Wnd::GetThisAppearanceStream(sAppStream);
-
- CPDF_Rect rcClient = GetClientRect();
- CFX_ByteTextBuf sLine;
-
- int32_t nCharArray = m_pEdit->GetCharArray();
-
- if (nCharArray > 0)
- {
- switch (GetBorderStyle())
- {
- case PBS_SOLID:
- {
- sLine << "q\n" << GetBorderWidth() << " w\n"
- << CPWL_Utils::GetColorAppStream(GetBorderColor(),FALSE) << " 2 J 0 j\n";
-
- for (int32_t i=1;i<nCharArray;i++)
- {
- sLine << rcClient.left + ((rcClient.right - rcClient.left)/nCharArray)*i << " "
- << rcClient.bottom << " m\n"
- << rcClient.left + ((rcClient.right - rcClient.left)/nCharArray)*i << " "
- << rcClient.top << " l S\n";
- }
-
- sLine << "Q\n";
- }
- break;
- case PBS_DASH:
- {
- sLine << "q\n" << GetBorderWidth() << " w\n"
- << CPWL_Utils::GetColorAppStream(GetBorderColor(),FALSE) << " 2 J 0 j\n"
- << "[" << GetBorderDash().nDash << " "
- << GetBorderDash().nGap << "] "
- << GetBorderDash().nPhase << " d\n";
-
- for (int32_t i=1;i<nCharArray;i++)
- {
- sLine << rcClient.left + ((rcClient.right - rcClient.left)/nCharArray)*i << " "
- << rcClient.bottom << " m\n"
- << rcClient.left + ((rcClient.right - rcClient.left)/nCharArray)*i << " "
- << rcClient.top << " l S\n";
- }
-
- sLine << "Q\n";
- }
- break;
- }
- }
-
- sAppStream << sLine;
-
- CFX_ByteTextBuf sText;
-
- CPDF_Point ptOffset = CPDF_Point(0.0f,0.0f);
-
- CPVT_WordRange wrWhole = m_pEdit->GetWholeWordRange();
- CPVT_WordRange wrSelect = GetSelectWordRange();
- CPVT_WordRange wrVisible = (HasFlag(PES_TEXTOVERFLOW) ? wrWhole : m_pEdit->GetVisibleWordRange());
- CPVT_WordRange wrSelBefore(wrWhole.BeginPos,wrSelect.BeginPos);
- CPVT_WordRange wrSelAfter(wrSelect.EndPos,wrWhole.EndPos);
-
- CPVT_WordRange wrTemp = CPWL_Utils::OverlapWordRange(GetSelectWordRange(),wrVisible);
- CFX_ByteString sEditSel = CPWL_Utils::GetEditSelAppStream(m_pEdit, ptOffset,
- &wrTemp);
-
- if (sEditSel.GetLength() > 0)
- sText << CPWL_Utils::GetColorAppStream(PWL_DEFAULT_SELBACKCOLOR) << sEditSel ;
-
- wrTemp = CPWL_Utils::OverlapWordRange(wrVisible,wrSelBefore);
- CFX_ByteString sEditBefore = CPWL_Utils::GetEditAppStream(m_pEdit, ptOffset,
- &wrTemp, !HasFlag(PES_CHARARRAY), m_pEdit->GetPasswordChar());
-
- if (sEditBefore.GetLength() > 0)
- sText << "BT\n" << CPWL_Utils::GetColorAppStream(GetTextColor()) << sEditBefore << "ET\n";
-
- wrTemp = CPWL_Utils::OverlapWordRange(wrVisible,wrSelect);
- CFX_ByteString sEditMid = CPWL_Utils::GetEditAppStream(m_pEdit, ptOffset,
- &wrTemp, !HasFlag(PES_CHARARRAY), m_pEdit->GetPasswordChar());
-
- if (sEditMid.GetLength() > 0)
- sText << "BT\n" << CPWL_Utils::GetColorAppStream(CPWL_Color(COLORTYPE_GRAY,1)) << sEditMid << "ET\n";
-
- wrTemp = CPWL_Utils::OverlapWordRange(wrVisible,wrSelAfter);
- CFX_ByteString sEditAfter = CPWL_Utils::GetEditAppStream(m_pEdit, ptOffset,
- &wrTemp, !HasFlag(PES_CHARARRAY), m_pEdit->GetPasswordChar());
-
- if (sEditAfter.GetLength() > 0)
- sText << "BT\n" << CPWL_Utils::GetColorAppStream(GetTextColor()) << sEditAfter<< "ET\n";
-
- if (HasFlag(PES_SPELLCHECK))
- {
- CFX_ByteString sSpellCheck = CPWL_Utils::GetSpellCheckAppStream(m_pEdit, m_pSpellCheck, ptOffset, &wrVisible);
- if (sSpellCheck.GetLength() > 0)
- sText << CPWL_Utils::GetColorAppStream(CPWL_Color(COLORTYPE_RGB,1,0,0),FALSE) << sSpellCheck;
- }
-
- if (sText.GetLength() > 0)
- {
- CPDF_Rect rcClient = GetClientRect();
- sAppStream << "q\n/Tx BMC\n";
-
- if (!HasFlag(PES_TEXTOVERFLOW))
- sAppStream << rcClient.left << " " << rcClient.bottom << " "
- << rcClient.right - rcClient.left << " " << rcClient.top - rcClient.bottom << " re W n\n";
-
- sAppStream << sText;
-
- sAppStream << "EMC\nQ\n";
- }
+void CPWL_Edit::GetThisAppearanceStream(CFX_ByteTextBuf& sAppStream) {
+ CPWL_Wnd::GetThisAppearanceStream(sAppStream);
+
+ CPDF_Rect rcClient = GetClientRect();
+ CFX_ByteTextBuf sLine;
+
+ int32_t nCharArray = m_pEdit->GetCharArray();
+
+ if (nCharArray > 0) {
+ switch (GetBorderStyle()) {
+ case PBS_SOLID: {
+ sLine << "q\n" << GetBorderWidth() << " w\n"
+ << CPWL_Utils::GetColorAppStream(GetBorderColor(), FALSE)
+ << " 2 J 0 j\n";
+
+ for (int32_t i = 1; i < nCharArray; i++) {
+ sLine << rcClient.left +
+ ((rcClient.right - rcClient.left) / nCharArray) * i
+ << " " << rcClient.bottom << " m\n"
+ << rcClient.left +
+ ((rcClient.right - rcClient.left) / nCharArray) * i
+ << " " << rcClient.top << " l S\n";
+ }
+
+ sLine << "Q\n";
+ } break;
+ case PBS_DASH: {
+ sLine << "q\n" << GetBorderWidth() << " w\n"
+ << CPWL_Utils::GetColorAppStream(GetBorderColor(), FALSE)
+ << " 2 J 0 j\n"
+ << "[" << GetBorderDash().nDash << " " << GetBorderDash().nGap
+ << "] " << GetBorderDash().nPhase << " d\n";
+
+ for (int32_t i = 1; i < nCharArray; i++) {
+ sLine << rcClient.left +
+ ((rcClient.right - rcClient.left) / nCharArray) * i
+ << " " << rcClient.bottom << " m\n"
+ << rcClient.left +
+ ((rcClient.right - rcClient.left) / nCharArray) * i
+ << " " << rcClient.top << " l S\n";
+ }
+
+ sLine << "Q\n";
+ } break;
+ }
+ }
+
+ sAppStream << sLine;
+
+ CFX_ByteTextBuf sText;
+
+ CPDF_Point ptOffset = CPDF_Point(0.0f, 0.0f);
+
+ CPVT_WordRange wrWhole = m_pEdit->GetWholeWordRange();
+ CPVT_WordRange wrSelect = GetSelectWordRange();
+ CPVT_WordRange wrVisible =
+ (HasFlag(PES_TEXTOVERFLOW) ? wrWhole : m_pEdit->GetVisibleWordRange());
+ CPVT_WordRange wrSelBefore(wrWhole.BeginPos, wrSelect.BeginPos);
+ CPVT_WordRange wrSelAfter(wrSelect.EndPos, wrWhole.EndPos);
+
+ CPVT_WordRange wrTemp =
+ CPWL_Utils::OverlapWordRange(GetSelectWordRange(), wrVisible);
+ CFX_ByteString sEditSel =
+ CPWL_Utils::GetEditSelAppStream(m_pEdit, ptOffset, &wrTemp);
+
+ if (sEditSel.GetLength() > 0)
+ sText << CPWL_Utils::GetColorAppStream(PWL_DEFAULT_SELBACKCOLOR)
+ << sEditSel;
+
+ wrTemp = CPWL_Utils::OverlapWordRange(wrVisible, wrSelBefore);
+ CFX_ByteString sEditBefore = CPWL_Utils::GetEditAppStream(
+ m_pEdit, ptOffset, &wrTemp, !HasFlag(PES_CHARARRAY),
+ m_pEdit->GetPasswordChar());
+
+ if (sEditBefore.GetLength() > 0)
+ sText << "BT\n" << CPWL_Utils::GetColorAppStream(GetTextColor())
+ << sEditBefore << "ET\n";
+
+ wrTemp = CPWL_Utils::OverlapWordRange(wrVisible, wrSelect);
+ CFX_ByteString sEditMid = CPWL_Utils::GetEditAppStream(
+ m_pEdit, ptOffset, &wrTemp, !HasFlag(PES_CHARARRAY),
+ m_pEdit->GetPasswordChar());
+
+ if (sEditMid.GetLength() > 0)
+ sText << "BT\n"
+ << CPWL_Utils::GetColorAppStream(CPWL_Color(COLORTYPE_GRAY, 1))
+ << sEditMid << "ET\n";
+
+ wrTemp = CPWL_Utils::OverlapWordRange(wrVisible, wrSelAfter);
+ CFX_ByteString sEditAfter = CPWL_Utils::GetEditAppStream(
+ m_pEdit, ptOffset, &wrTemp, !HasFlag(PES_CHARARRAY),
+ m_pEdit->GetPasswordChar());
+
+ if (sEditAfter.GetLength() > 0)
+ sText << "BT\n" << CPWL_Utils::GetColorAppStream(GetTextColor())
+ << sEditAfter << "ET\n";
+
+ if (HasFlag(PES_SPELLCHECK)) {
+ CFX_ByteString sSpellCheck = CPWL_Utils::GetSpellCheckAppStream(
+ m_pEdit, m_pSpellCheck, ptOffset, &wrVisible);
+ if (sSpellCheck.GetLength() > 0)
+ sText << CPWL_Utils::GetColorAppStream(CPWL_Color(COLORTYPE_RGB, 1, 0, 0),
+ FALSE)
+ << sSpellCheck;
+ }
+
+ if (sText.GetLength() > 0) {
+ CPDF_Rect rcClient = GetClientRect();
+ sAppStream << "q\n/Tx BMC\n";
+
+ if (!HasFlag(PES_TEXTOVERFLOW))
+ sAppStream << rcClient.left << " " << rcClient.bottom << " "
+ << rcClient.right - rcClient.left << " "
+ << rcClient.top - rcClient.bottom << " re W n\n";
+
+ sAppStream << sText;
+
+ sAppStream << "EMC\nQ\n";
+ }
}
-void CPWL_Edit::DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device)
-{
- CPWL_Wnd::DrawThisAppearance(pDevice,pUser2Device);
-
- CPDF_Rect rcClient = GetClientRect();
- CFX_ByteTextBuf sLine;
-
- int32_t nCharArray = m_pEdit->GetCharArray();
- FX_SAFE_INT32 nCharArraySafe = nCharArray;
- nCharArraySafe -= 1;
- nCharArraySafe *= 2;
-
- if (nCharArray > 0 && nCharArraySafe.IsValid())
- {
- switch (GetBorderStyle())
- {
- case PBS_SOLID:
- {
- CFX_GraphStateData gsd;
- gsd.m_LineWidth = (FX_FLOAT)GetBorderWidth();
-
- CFX_PathData path;
- path.SetPointCount(nCharArraySafe.ValueOrDie());
-
- for (int32_t i=0; i<nCharArray-1; i++)
- {
- path.SetPoint(i*2, rcClient.left + ((rcClient.right - rcClient.left)/nCharArray)*(i+1),
- rcClient.bottom, FXPT_MOVETO);
- path.SetPoint(i*2+1, rcClient.left + ((rcClient.right - rcClient.left)/nCharArray)*(i+1),
- rcClient.top, FXPT_LINETO);
- }
- if (path.GetPointCount() > 0)
- pDevice->DrawPath(&path, pUser2Device, &gsd,0,
- CPWL_Utils::PWLColorToFXColor(GetBorderColor(),255), FXFILL_ALTERNATE);
- }
- break;
- case PBS_DASH:
- {
- CFX_GraphStateData gsd;
- gsd.m_LineWidth = (FX_FLOAT)GetBorderWidth();
-
- gsd.SetDashCount(2);
- gsd.m_DashArray[0] = (FX_FLOAT)GetBorderDash().nDash;
- gsd.m_DashArray[1] = (FX_FLOAT)GetBorderDash().nGap;
- gsd.m_DashPhase = (FX_FLOAT)GetBorderDash().nPhase;
-
- CFX_PathData path;
- path.SetPointCount(nCharArraySafe.ValueOrDie());
-
- for (int32_t i=0; i<nCharArray-1; i++)
- {
- path.SetPoint(i*2, rcClient.left + ((rcClient.right - rcClient.left)/nCharArray)*(i+1),
- rcClient.bottom, FXPT_MOVETO);
- path.SetPoint(i*2+1, rcClient.left + ((rcClient.right - rcClient.left)/nCharArray)*(i+1),
- rcClient.top, FXPT_LINETO);
- }
- if (path.GetPointCount() > 0)
- pDevice->DrawPath(&path, pUser2Device, &gsd,0,
- CPWL_Utils::PWLColorToFXColor(GetBorderColor(),255), FXFILL_ALTERNATE);
- }
- break;
- }
- }
-
- CPDF_Rect rcClip;
- CPVT_WordRange wrRange = m_pEdit->GetVisibleWordRange();
- CPVT_WordRange* pRange = NULL;
-
- if (!HasFlag(PES_TEXTOVERFLOW))
- {
- rcClip = GetClientRect();
- pRange = &wrRange;
- }
-IFX_SystemHandler* pSysHandler = GetSystemHandler();
- IFX_Edit::DrawEdit(pDevice,pUser2Device,m_pEdit,
- CPWL_Utils::PWLColorToFXColor(GetTextColor(), GetTransparency()),
- CPWL_Utils::PWLColorToFXColor(GetTextStrokeColor(), GetTransparency()),
- rcClip,CPDF_Point(0.0f,0.0f),pRange, pSysHandler, m_pFormFiller);
-
- if (HasFlag(PES_SPELLCHECK))
- {
- CPWL_Utils::DrawEditSpellCheck(pDevice,pUser2Device,m_pEdit,rcClip,
- CPDF_Point(0.0f,0.0f),pRange, GetCreationParam().pSpellCheck);
- }
+void CPWL_Edit::DrawThisAppearance(CFX_RenderDevice* pDevice,
+ CPDF_Matrix* pUser2Device) {
+ CPWL_Wnd::DrawThisAppearance(pDevice, pUser2Device);
+
+ CPDF_Rect rcClient = GetClientRect();
+ CFX_ByteTextBuf sLine;
+
+ int32_t nCharArray = m_pEdit->GetCharArray();
+ FX_SAFE_INT32 nCharArraySafe = nCharArray;
+ nCharArraySafe -= 1;
+ nCharArraySafe *= 2;
+
+ if (nCharArray > 0 && nCharArraySafe.IsValid()) {
+ switch (GetBorderStyle()) {
+ case PBS_SOLID: {
+ CFX_GraphStateData gsd;
+ gsd.m_LineWidth = (FX_FLOAT)GetBorderWidth();
+
+ CFX_PathData path;
+ path.SetPointCount(nCharArraySafe.ValueOrDie());
+
+ for (int32_t i = 0; i < nCharArray - 1; i++) {
+ path.SetPoint(
+ i * 2,
+ rcClient.left +
+ ((rcClient.right - rcClient.left) / nCharArray) * (i + 1),
+ rcClient.bottom, FXPT_MOVETO);
+ path.SetPoint(
+ i * 2 + 1,
+ rcClient.left +
+ ((rcClient.right - rcClient.left) / nCharArray) * (i + 1),
+ rcClient.top, FXPT_LINETO);
+ }
+ if (path.GetPointCount() > 0)
+ pDevice->DrawPath(
+ &path, pUser2Device, &gsd, 0,
+ CPWL_Utils::PWLColorToFXColor(GetBorderColor(), 255),
+ FXFILL_ALTERNATE);
+ } break;
+ case PBS_DASH: {
+ CFX_GraphStateData gsd;
+ gsd.m_LineWidth = (FX_FLOAT)GetBorderWidth();
+
+ gsd.SetDashCount(2);
+ gsd.m_DashArray[0] = (FX_FLOAT)GetBorderDash().nDash;
+ gsd.m_DashArray[1] = (FX_FLOAT)GetBorderDash().nGap;
+ gsd.m_DashPhase = (FX_FLOAT)GetBorderDash().nPhase;
+
+ CFX_PathData path;
+ path.SetPointCount(nCharArraySafe.ValueOrDie());
+
+ for (int32_t i = 0; i < nCharArray - 1; i++) {
+ path.SetPoint(
+ i * 2,
+ rcClient.left +
+ ((rcClient.right - rcClient.left) / nCharArray) * (i + 1),
+ rcClient.bottom, FXPT_MOVETO);
+ path.SetPoint(
+ i * 2 + 1,
+ rcClient.left +
+ ((rcClient.right - rcClient.left) / nCharArray) * (i + 1),
+ rcClient.top, FXPT_LINETO);
+ }
+ if (path.GetPointCount() > 0)
+ pDevice->DrawPath(
+ &path, pUser2Device, &gsd, 0,
+ CPWL_Utils::PWLColorToFXColor(GetBorderColor(), 255),
+ FXFILL_ALTERNATE);
+ } break;
+ }
+ }
+
+ CPDF_Rect rcClip;
+ CPVT_WordRange wrRange = m_pEdit->GetVisibleWordRange();
+ CPVT_WordRange* pRange = NULL;
+
+ if (!HasFlag(PES_TEXTOVERFLOW)) {
+ rcClip = GetClientRect();
+ pRange = &wrRange;
+ }
+ IFX_SystemHandler* pSysHandler = GetSystemHandler();
+ IFX_Edit::DrawEdit(
+ pDevice, pUser2Device, m_pEdit,
+ CPWL_Utils::PWLColorToFXColor(GetTextColor(), GetTransparency()),
+ CPWL_Utils::PWLColorToFXColor(GetTextStrokeColor(), GetTransparency()),
+ rcClip, CPDF_Point(0.0f, 0.0f), pRange, pSysHandler, m_pFormFiller);
+
+ if (HasFlag(PES_SPELLCHECK)) {
+ CPWL_Utils::DrawEditSpellCheck(pDevice, pUser2Device, m_pEdit, rcClip,
+ CPDF_Point(0.0f, 0.0f), pRange,
+ GetCreationParam().pSpellCheck);
+ }
}
-FX_BOOL CPWL_Edit::OnLButtonDown(const CPDF_Point & point, FX_DWORD nFlag)
-{
- CPWL_Wnd::OnLButtonDown(point,nFlag);
+FX_BOOL CPWL_Edit::OnLButtonDown(const CPDF_Point& point, FX_DWORD nFlag) {
+ CPWL_Wnd::OnLButtonDown(point, nFlag);
- if (HasFlag(PES_TEXTOVERFLOW) || ClientHitTest(point))
- {
- if (m_bMouseDown)
- InvalidateRect();
+ if (HasFlag(PES_TEXTOVERFLOW) || ClientHitTest(point)) {
+ if (m_bMouseDown)
+ InvalidateRect();
- m_bMouseDown = TRUE;
- SetCapture();
+ m_bMouseDown = TRUE;
+ SetCapture();
- m_pEdit->OnMouseDown(point,IsSHIFTpressed(nFlag),IsCTRLpressed(nFlag));
- }
+ m_pEdit->OnMouseDown(point, IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag));
+ }
- return TRUE;
+ return TRUE;
}
-FX_BOOL CPWL_Edit::OnLButtonDblClk(const CPDF_Point & point, FX_DWORD nFlag)
-{
- CPWL_Wnd::OnLButtonDblClk(point, nFlag);
+FX_BOOL CPWL_Edit::OnLButtonDblClk(const CPDF_Point& point, FX_DWORD nFlag) {
+ CPWL_Wnd::OnLButtonDblClk(point, nFlag);
- if (HasFlag(PES_TEXTOVERFLOW) || ClientHitTest(point))
- {
- m_pEdit->SelectAll();
- }
+ if (HasFlag(PES_TEXTOVERFLOW) || ClientHitTest(point)) {
+ m_pEdit->SelectAll();
+ }
- return TRUE;
+ return TRUE;
}
-#define WM_PWLEDIT_UNDO 0x01
-#define WM_PWLEDIT_REDO 0x02
-#define WM_PWLEDIT_CUT 0x03
-#define WM_PWLEDIT_COPY 0x04
-#define WM_PWLEDIT_PASTE 0x05
-#define WM_PWLEDIT_DELETE 0x06
-#define WM_PWLEDIT_SELECTALL 0x07
-#define WM_PWLEDIT_SUGGEST 0x08
-
-FX_BOOL CPWL_Edit::OnRButtonUp(const CPDF_Point & point, FX_DWORD nFlag)
-{
- if (m_bMouseDown) return FALSE;
-
- CPWL_Wnd::OnRButtonUp(point, nFlag);
-
- if (!HasFlag(PES_TEXTOVERFLOW) && !ClientHitTest(point)) return TRUE;
-
- IFX_SystemHandler* pSH = GetSystemHandler();
- if (!pSH) return FALSE;
-
- SetFocus();
-
- CPVT_WordRange wrLatin = GetLatinWordsRange(point);
- CFX_WideString swLatin = m_pEdit->GetRangeText(wrLatin);
-
- FX_HMENU hPopup = pSH->CreatePopupMenu();
- if (!hPopup) return FALSE;
-
- CFX_ByteStringArray sSuggestWords;
- CPDF_Point ptPopup = point;
-
- if (!IsReadOnly())
- {
- if (HasFlag(PES_SPELLCHECK) && !swLatin.IsEmpty())
- {
- if (m_pSpellCheck)
- {
- CFX_ByteString sLatin = CFX_ByteString::FromUnicode(swLatin);
-
- if (!m_pSpellCheck->CheckWord(sLatin))
- {
- m_pSpellCheck->SuggestWords(sLatin,sSuggestWords);
-
- int32_t nSuggest = sSuggestWords.GetSize();
-
- for (int32_t nWord=0; nWord<nSuggest; nWord++)
- {
- pSH->AppendMenuItem(hPopup, WM_PWLEDIT_SUGGEST+nWord, sSuggestWords[nWord].UTF8Decode());
- }
-
- if (nSuggest > 0)
- pSH->AppendMenuItem(hPopup, 0, L"");
-
- ptPopup = GetWordRightBottomPoint(wrLatin.EndPos);
- }
- }
- }
- }
-
- IPWL_Provider* pProvider = GetProvider();
-
- if (HasFlag(PES_UNDO))
- {
- pSH->AppendMenuItem(hPopup, WM_PWLEDIT_UNDO,
- pProvider ? pProvider->LoadPopupMenuString(0) : L"&Undo");
- pSH->AppendMenuItem(hPopup, WM_PWLEDIT_REDO,
- pProvider ? pProvider->LoadPopupMenuString(1) : L"&Redo");
- pSH->AppendMenuItem(hPopup, 0, L"");
-
- if (!m_pEdit->CanUndo())
- pSH->EnableMenuItem(hPopup, WM_PWLEDIT_UNDO, FALSE);
- if (!m_pEdit->CanRedo())
- pSH->EnableMenuItem(hPopup, WM_PWLEDIT_REDO, FALSE);
- }
-
- pSH->AppendMenuItem(hPopup, WM_PWLEDIT_CUT,
- pProvider ? pProvider->LoadPopupMenuString(2) : L"Cu&t");
- pSH->AppendMenuItem(hPopup, WM_PWLEDIT_COPY,
- pProvider ? pProvider->LoadPopupMenuString(3) : L"&Copy");
- pSH->AppendMenuItem(hPopup, WM_PWLEDIT_PASTE,
- pProvider ? pProvider->LoadPopupMenuString(4) : L"&Paste");
- pSH->AppendMenuItem(hPopup, WM_PWLEDIT_DELETE,
- pProvider ? pProvider->LoadPopupMenuString(5) : L"&Delete");
-
- CFX_WideString swText = pSH->GetClipboardText(GetAttachedHWnd());
- if (swText.IsEmpty())
- pSH->EnableMenuItem(hPopup, WM_PWLEDIT_PASTE, FALSE);
-
- if (!m_pEdit->IsSelected())
- {
- pSH->EnableMenuItem(hPopup, WM_PWLEDIT_CUT, FALSE);
- pSH->EnableMenuItem(hPopup, WM_PWLEDIT_COPY, FALSE);
- pSH->EnableMenuItem(hPopup, WM_PWLEDIT_DELETE, FALSE);
- }
-
- if (IsReadOnly())
- {
- pSH->EnableMenuItem(hPopup, WM_PWLEDIT_CUT, FALSE);
- pSH->EnableMenuItem(hPopup, WM_PWLEDIT_DELETE, FALSE);
- pSH->EnableMenuItem(hPopup, WM_PWLEDIT_PASTE, FALSE);
- }
-
- if (HasFlag(PES_PASSWORD))
- {
- pSH->EnableMenuItem(hPopup, WM_PWLEDIT_CUT, FALSE);
- pSH->EnableMenuItem(hPopup, WM_PWLEDIT_COPY, FALSE);
- }
-
- if (HasFlag(PES_NOREAD))
- {
- pSH->EnableMenuItem(hPopup, WM_PWLEDIT_CUT, FALSE);
- pSH->EnableMenuItem(hPopup, WM_PWLEDIT_COPY, FALSE);
- }
-
- pSH->AppendMenuItem(hPopup, 0, L"");
- pSH->AppendMenuItem(hPopup, WM_PWLEDIT_SELECTALL,
- pProvider ? pProvider->LoadPopupMenuString(6) : L"&Select All");
-
- if (m_pEdit->GetTotalWords() == 0)
- {
- pSH->EnableMenuItem(hPopup, WM_PWLEDIT_SELECTALL, FALSE);
- }
-
- int32_t x, y;
- PWLtoWnd(ptPopup, x, y);
- pSH->ClientToScreen(GetAttachedHWnd(), x, y);
- pSH->SetCursor(FXCT_ARROW);
- int32_t nCmd = pSH->TrackPopupMenu(hPopup,
- x,
- y,
- GetAttachedHWnd());
-
-
- switch (nCmd)
- {
- case WM_PWLEDIT_UNDO:
- Undo();
- break;
- case WM_PWLEDIT_REDO:
- Redo();
- break;
- case WM_PWLEDIT_CUT:
- CutText();
- break;
- case WM_PWLEDIT_COPY:
- CopyText();
- break;
- case WM_PWLEDIT_PASTE:
- PasteText();
- break;
- case WM_PWLEDIT_DELETE:
- Clear();
- break;
- case WM_PWLEDIT_SELECTALL:
- SelectAll();
- break;
- case WM_PWLEDIT_SUGGEST + 0:
- SetSel(m_pEdit->WordPlaceToWordIndex(wrLatin.BeginPos),m_pEdit->WordPlaceToWordIndex(wrLatin.EndPos));
- ReplaceSel(sSuggestWords[0].UTF8Decode().c_str());
- break;
- case WM_PWLEDIT_SUGGEST + 1:
- SetSel(m_pEdit->WordPlaceToWordIndex(wrLatin.BeginPos),m_pEdit->WordPlaceToWordIndex(wrLatin.EndPos));
- ReplaceSel(sSuggestWords[1].UTF8Decode().c_str());
- break;
- case WM_PWLEDIT_SUGGEST + 2:
- SetSel(m_pEdit->WordPlaceToWordIndex(wrLatin.BeginPos),m_pEdit->WordPlaceToWordIndex(wrLatin.EndPos));
- ReplaceSel(sSuggestWords[2].UTF8Decode().c_str());
- break;
- case WM_PWLEDIT_SUGGEST + 3:
- SetSel(m_pEdit->WordPlaceToWordIndex(wrLatin.BeginPos),m_pEdit->WordPlaceToWordIndex(wrLatin.EndPos));
- ReplaceSel(sSuggestWords[3].UTF8Decode().c_str());
- break;
- case WM_PWLEDIT_SUGGEST + 4:
- SetSel(m_pEdit->WordPlaceToWordIndex(wrLatin.BeginPos),m_pEdit->WordPlaceToWordIndex(wrLatin.EndPos));
- ReplaceSel(sSuggestWords[4].UTF8Decode().c_str());
- break;
- default:
- break;
- }
-
- pSH->DestroyMenu(hPopup);
-
- return TRUE;
+#define WM_PWLEDIT_UNDO 0x01
+#define WM_PWLEDIT_REDO 0x02
+#define WM_PWLEDIT_CUT 0x03
+#define WM_PWLEDIT_COPY 0x04
+#define WM_PWLEDIT_PASTE 0x05
+#define WM_PWLEDIT_DELETE 0x06
+#define WM_PWLEDIT_SELECTALL 0x07
+#define WM_PWLEDIT_SUGGEST 0x08
+
+FX_BOOL CPWL_Edit::OnRButtonUp(const CPDF_Point& point, FX_DWORD nFlag) {
+ if (m_bMouseDown)
+ return FALSE;
+
+ CPWL_Wnd::OnRButtonUp(point, nFlag);
+
+ if (!HasFlag(PES_TEXTOVERFLOW) && !ClientHitTest(point))
+ return TRUE;
+
+ IFX_SystemHandler* pSH = GetSystemHandler();
+ if (!pSH)
+ return FALSE;
+
+ SetFocus();
+
+ CPVT_WordRange wrLatin = GetLatinWordsRange(point);
+ CFX_WideString swLatin = m_pEdit->GetRangeText(wrLatin);
+
+ FX_HMENU hPopup = pSH->CreatePopupMenu();
+ if (!hPopup)
+ return FALSE;
+
+ CFX_ByteStringArray sSuggestWords;
+ CPDF_Point ptPopup = point;
+
+ if (!IsReadOnly()) {
+ if (HasFlag(PES_SPELLCHECK) && !swLatin.IsEmpty()) {
+ if (m_pSpellCheck) {
+ CFX_ByteString sLatin = CFX_ByteString::FromUnicode(swLatin);
+
+ if (!m_pSpellCheck->CheckWord(sLatin)) {
+ m_pSpellCheck->SuggestWords(sLatin, sSuggestWords);
+
+ int32_t nSuggest = sSuggestWords.GetSize();
+
+ for (int32_t nWord = 0; nWord < nSuggest; nWord++) {
+ pSH->AppendMenuItem(hPopup, WM_PWLEDIT_SUGGEST + nWord,
+ sSuggestWords[nWord].UTF8Decode());
+ }
+
+ if (nSuggest > 0)
+ pSH->AppendMenuItem(hPopup, 0, L"");
+
+ ptPopup = GetWordRightBottomPoint(wrLatin.EndPos);
+ }
+ }
+ }
+ }
+
+ IPWL_Provider* pProvider = GetProvider();
+
+ if (HasFlag(PES_UNDO)) {
+ pSH->AppendMenuItem(
+ hPopup, WM_PWLEDIT_UNDO,
+ pProvider ? pProvider->LoadPopupMenuString(0) : L"&Undo");
+ pSH->AppendMenuItem(
+ hPopup, WM_PWLEDIT_REDO,
+ pProvider ? pProvider->LoadPopupMenuString(1) : L"&Redo");
+ pSH->AppendMenuItem(hPopup, 0, L"");
+
+ if (!m_pEdit->CanUndo())
+ pSH->EnableMenuItem(hPopup, WM_PWLEDIT_UNDO, FALSE);
+ if (!m_pEdit->CanRedo())
+ pSH->EnableMenuItem(hPopup, WM_PWLEDIT_REDO, FALSE);
+ }
+
+ pSH->AppendMenuItem(hPopup, WM_PWLEDIT_CUT,
+ pProvider ? pProvider->LoadPopupMenuString(2) : L"Cu&t");
+ pSH->AppendMenuItem(hPopup, WM_PWLEDIT_COPY,
+ pProvider ? pProvider->LoadPopupMenuString(3) : L"&Copy");
+ pSH->AppendMenuItem(
+ hPopup, WM_PWLEDIT_PASTE,
+ pProvider ? pProvider->LoadPopupMenuString(4) : L"&Paste");
+ pSH->AppendMenuItem(
+ hPopup, WM_PWLEDIT_DELETE,
+ pProvider ? pProvider->LoadPopupMenuString(5) : L"&Delete");
+
+ CFX_WideString swText = pSH->GetClipboardText(GetAttachedHWnd());
+ if (swText.IsEmpty())
+ pSH->EnableMenuItem(hPopup, WM_PWLEDIT_PASTE, FALSE);
+
+ if (!m_pEdit->IsSelected()) {
+ pSH->EnableMenuItem(hPopup, WM_PWLEDIT_CUT, FALSE);
+ pSH->EnableMenuItem(hPopup, WM_PWLEDIT_COPY, FALSE);
+ pSH->EnableMenuItem(hPopup, WM_PWLEDIT_DELETE, FALSE);
+ }
+
+ if (IsReadOnly()) {
+ pSH->EnableMenuItem(hPopup, WM_PWLEDIT_CUT, FALSE);
+ pSH->EnableMenuItem(hPopup, WM_PWLEDIT_DELETE, FALSE);
+ pSH->EnableMenuItem(hPopup, WM_PWLEDIT_PASTE, FALSE);
+ }
+
+ if (HasFlag(PES_PASSWORD)) {
+ pSH->EnableMenuItem(hPopup, WM_PWLEDIT_CUT, FALSE);
+ pSH->EnableMenuItem(hPopup, WM_PWLEDIT_COPY, FALSE);
+ }
+
+ if (HasFlag(PES_NOREAD)) {
+ pSH->EnableMenuItem(hPopup, WM_PWLEDIT_CUT, FALSE);
+ pSH->EnableMenuItem(hPopup, WM_PWLEDIT_COPY, FALSE);
+ }
+
+ pSH->AppendMenuItem(hPopup, 0, L"");
+ pSH->AppendMenuItem(
+ hPopup, WM_PWLEDIT_SELECTALL,
+ pProvider ? pProvider->LoadPopupMenuString(6) : L"&Select All");
+
+ if (m_pEdit->GetTotalWords() == 0) {
+ pSH->EnableMenuItem(hPopup, WM_PWLEDIT_SELECTALL, FALSE);
+ }
+
+ int32_t x, y;
+ PWLtoWnd(ptPopup, x, y);
+ pSH->ClientToScreen(GetAttachedHWnd(), x, y);
+ pSH->SetCursor(FXCT_ARROW);
+ int32_t nCmd = pSH->TrackPopupMenu(hPopup, x, y, GetAttachedHWnd());
+
+ switch (nCmd) {
+ case WM_PWLEDIT_UNDO:
+ Undo();
+ break;
+ case WM_PWLEDIT_REDO:
+ Redo();
+ break;
+ case WM_PWLEDIT_CUT:
+ CutText();
+ break;
+ case WM_PWLEDIT_COPY:
+ CopyText();
+ break;
+ case WM_PWLEDIT_PASTE:
+ PasteText();
+ break;
+ case WM_PWLEDIT_DELETE:
+ Clear();
+ break;
+ case WM_PWLEDIT_SELECTALL:
+ SelectAll();
+ break;
+ case WM_PWLEDIT_SUGGEST + 0:
+ SetSel(m_pEdit->WordPlaceToWordIndex(wrLatin.BeginPos),
+ m_pEdit->WordPlaceToWordIndex(wrLatin.EndPos));
+ ReplaceSel(sSuggestWords[0].UTF8Decode().c_str());
+ break;
+ case WM_PWLEDIT_SUGGEST + 1:
+ SetSel(m_pEdit->WordPlaceToWordIndex(wrLatin.BeginPos),
+ m_pEdit->WordPlaceToWordIndex(wrLatin.EndPos));
+ ReplaceSel(sSuggestWords[1].UTF8Decode().c_str());
+ break;
+ case WM_PWLEDIT_SUGGEST + 2:
+ SetSel(m_pEdit->WordPlaceToWordIndex(wrLatin.BeginPos),
+ m_pEdit->WordPlaceToWordIndex(wrLatin.EndPos));
+ ReplaceSel(sSuggestWords[2].UTF8Decode().c_str());
+ break;
+ case WM_PWLEDIT_SUGGEST + 3:
+ SetSel(m_pEdit->WordPlaceToWordIndex(wrLatin.BeginPos),
+ m_pEdit->WordPlaceToWordIndex(wrLatin.EndPos));
+ ReplaceSel(sSuggestWords[3].UTF8Decode().c_str());
+ break;
+ case WM_PWLEDIT_SUGGEST + 4:
+ SetSel(m_pEdit->WordPlaceToWordIndex(wrLatin.BeginPos),
+ m_pEdit->WordPlaceToWordIndex(wrLatin.EndPos));
+ ReplaceSel(sSuggestWords[4].UTF8Decode().c_str());
+ break;
+ default:
+ break;
+ }
+
+ pSH->DestroyMenu(hPopup);
+
+ return TRUE;
}
-void CPWL_Edit::OnSetFocus()
-{
- SetEditCaret(TRUE);
+void CPWL_Edit::OnSetFocus() {
+ SetEditCaret(TRUE);
- if (!IsReadOnly())
- {
- if (IPWL_FocusHandler* pFocusHandler = GetFocusHandler())
- pFocusHandler->OnSetFocus(this);
- }
+ if (!IsReadOnly()) {
+ if (IPWL_FocusHandler* pFocusHandler = GetFocusHandler())
+ pFocusHandler->OnSetFocus(this);
+ }
- m_bFocus = TRUE;
+ m_bFocus = TRUE;
}
-void CPWL_Edit::OnKillFocus()
-{
- ShowVScrollBar(FALSE);
+void CPWL_Edit::OnKillFocus() {
+ ShowVScrollBar(FALSE);
- m_pEdit->SelectNone();
- SetCaret(FALSE, CPDF_Point(0.0f,0.0f), CPDF_Point(0.0f,0.0f));
+ m_pEdit->SelectNone();
+ SetCaret(FALSE, CPDF_Point(0.0f, 0.0f), CPDF_Point(0.0f, 0.0f));
- SetCharSet(0);
+ SetCharSet(0);
- if (!IsReadOnly())
- {
- if (IPWL_FocusHandler* pFocusHandler = GetFocusHandler())
- pFocusHandler->OnKillFocus(this);
- }
+ if (!IsReadOnly()) {
+ if (IPWL_FocusHandler* pFocusHandler = GetFocusHandler())
+ pFocusHandler->OnKillFocus(this);
+ }
- m_bFocus = FALSE;
+ m_bFocus = FALSE;
}
-void CPWL_Edit::SetHorzScale(int32_t nHorzScale, FX_BOOL bPaint/* = TRUE*/)
-{
- m_pEdit->SetHorzScale(nHorzScale, bPaint);
+void CPWL_Edit::SetHorzScale(int32_t nHorzScale, FX_BOOL bPaint /* = TRUE*/) {
+ m_pEdit->SetHorzScale(nHorzScale, bPaint);
}
-void CPWL_Edit::SetCharSpace(FX_FLOAT fCharSpace, FX_BOOL bPaint/* = TRUE*/)
-{
- m_pEdit->SetCharSpace(fCharSpace, bPaint);
+void CPWL_Edit::SetCharSpace(FX_FLOAT fCharSpace, FX_BOOL bPaint /* = TRUE*/) {
+ m_pEdit->SetCharSpace(fCharSpace, bPaint);
}
-void CPWL_Edit::SetLineLeading(FX_FLOAT fLineLeading, FX_BOOL bPaint/* = TRUE*/)
-{
- m_pEdit->SetLineLeading(fLineLeading, bPaint);
+void CPWL_Edit::SetLineLeading(FX_FLOAT fLineLeading,
+ FX_BOOL bPaint /* = TRUE*/) {
+ m_pEdit->SetLineLeading(fLineLeading, bPaint);
}
-CFX_ByteString CPWL_Edit::GetSelectAppearanceStream(const CPDF_Point & ptOffset) const
-{
- CPVT_WordRange wr = GetSelectWordRange();
- return CPWL_Utils::GetEditSelAppStream(m_pEdit,ptOffset,&wr);
+CFX_ByteString CPWL_Edit::GetSelectAppearanceStream(
+ const CPDF_Point& ptOffset) const {
+ CPVT_WordRange wr = GetSelectWordRange();
+ return CPWL_Utils::GetEditSelAppStream(m_pEdit, ptOffset, &wr);
}
-CPVT_WordRange CPWL_Edit::GetSelectWordRange() const
-{
- if (m_pEdit->IsSelected())
- {
- int32_t nStart = -1;
- int32_t nEnd = -1;
+CPVT_WordRange CPWL_Edit::GetSelectWordRange() const {
+ if (m_pEdit->IsSelected()) {
+ int32_t nStart = -1;
+ int32_t nEnd = -1;
- m_pEdit->GetSel(nStart, nEnd);
+ m_pEdit->GetSel(nStart, nEnd);
- CPVT_WordPlace wpStart = m_pEdit->WordIndexToWordPlace(nStart);
- CPVT_WordPlace wpEnd = m_pEdit->WordIndexToWordPlace(nEnd);
+ CPVT_WordPlace wpStart = m_pEdit->WordIndexToWordPlace(nStart);
+ CPVT_WordPlace wpEnd = m_pEdit->WordIndexToWordPlace(nEnd);
- return CPVT_WordRange(wpStart,wpEnd);
- }
+ return CPVT_WordRange(wpStart, wpEnd);
+ }
- return CPVT_WordRange();
+ return CPVT_WordRange();
}
-CFX_ByteString CPWL_Edit::GetTextAppearanceStream(const CPDF_Point & ptOffset) const
-{
- CFX_ByteTextBuf sRet;
- CFX_ByteString sEdit = CPWL_Utils::GetEditAppStream(m_pEdit,ptOffset);
+CFX_ByteString CPWL_Edit::GetTextAppearanceStream(
+ const CPDF_Point& ptOffset) const {
+ CFX_ByteTextBuf sRet;
+ CFX_ByteString sEdit = CPWL_Utils::GetEditAppStream(m_pEdit, ptOffset);
- if (sEdit.GetLength() > 0)
- {
- sRet << "BT\n" << CPWL_Utils::GetColorAppStream(GetTextColor()) << sEdit << "ET\n";
- }
+ if (sEdit.GetLength() > 0) {
+ sRet << "BT\n" << CPWL_Utils::GetColorAppStream(GetTextColor()) << sEdit
+ << "ET\n";
+ }
- return sRet.GetByteString();
+ return sRet.GetByteString();
}
-CFX_ByteString CPWL_Edit::GetCaretAppearanceStream(const CPDF_Point & ptOffset) const
-{
- if (m_pEditCaret)
- return m_pEditCaret->GetCaretAppearanceStream(ptOffset);
+CFX_ByteString CPWL_Edit::GetCaretAppearanceStream(
+ const CPDF_Point& ptOffset) const {
+ if (m_pEditCaret)
+ return m_pEditCaret->GetCaretAppearanceStream(ptOffset);
- return CFX_ByteString();
+ return CFX_ByteString();
}
-CPDF_Point CPWL_Edit::GetWordRightBottomPoint(const CPVT_WordPlace& wpWord)
-{
- CPDF_Point pt(0.0f, 0.0f);
+CPDF_Point CPWL_Edit::GetWordRightBottomPoint(const CPVT_WordPlace& wpWord) {
+ CPDF_Point pt(0.0f, 0.0f);
- if (IFX_Edit_Iterator * pIterator = m_pEdit->GetIterator())
- {
- CPVT_WordPlace wpOld = pIterator->GetAt();
- pIterator->SetAt(wpWord);
- CPVT_Word word;
- if (pIterator->GetWord(word))
- {
- pt = CPDF_Point(word.ptWord.x + word.fWidth, word.ptWord.y + word.fDescent);
- }
+ if (IFX_Edit_Iterator* pIterator = m_pEdit->GetIterator()) {
+ CPVT_WordPlace wpOld = pIterator->GetAt();
+ pIterator->SetAt(wpWord);
+ CPVT_Word word;
+ if (pIterator->GetWord(word)) {
+ pt = CPDF_Point(word.ptWord.x + word.fWidth,
+ word.ptWord.y + word.fDescent);
+ }
- pIterator->SetAt(wpOld);
- }
+ pIterator->SetAt(wpOld);
+ }
- return pt;
+ return pt;
}
-FX_BOOL CPWL_Edit::IsTextFull() const
-{
- return m_pEdit->IsTextFull();
+FX_BOOL CPWL_Edit::IsTextFull() const {
+ return m_pEdit->IsTextFull();
}
-FX_FLOAT CPWL_Edit::GetCharArrayAutoFontSize(CPDF_Font* pFont, const CPDF_Rect& rcPlate, int32_t nCharArray)
-{
- if (pFont && !pFont->IsStandardFont())
- {
- FX_RECT rcBBox;
- pFont->GetFontBBox(rcBBox);
+FX_FLOAT CPWL_Edit::GetCharArrayAutoFontSize(CPDF_Font* pFont,
+ const CPDF_Rect& rcPlate,
+ int32_t nCharArray) {
+ if (pFont && !pFont->IsStandardFont()) {
+ FX_RECT rcBBox;
+ pFont->GetFontBBox(rcBBox);
- CPDF_Rect rcCell = rcPlate;
- FX_FLOAT xdiv = rcCell.Width() / nCharArray * 1000.0f / rcBBox.Width();
- FX_FLOAT ydiv = - rcCell.Height() * 1000.0f / rcBBox.Height();
+ CPDF_Rect rcCell = rcPlate;
+ FX_FLOAT xdiv = rcCell.Width() / nCharArray * 1000.0f / rcBBox.Width();
+ FX_FLOAT ydiv = -rcCell.Height() * 1000.0f / rcBBox.Height();
- return xdiv < ydiv ? xdiv : ydiv;
- }
+ return xdiv < ydiv ? xdiv : ydiv;
+ }
- return 0.0f;
+ return 0.0f;
}
-void CPWL_Edit::SetCharArray(int32_t nCharArray)
-{
- if (HasFlag(PES_CHARARRAY) && nCharArray > 0)
- {
- m_pEdit->SetCharArray(nCharArray);
- m_pEdit->SetTextOverflow(TRUE);
-
- if (HasFlag(PWS_AUTOFONTSIZE))
- {
- if (IFX_Edit_FontMap* pFontMap = GetFontMap())
- {
- FX_FLOAT fFontSize = GetCharArrayAutoFontSize(pFontMap->GetPDFFont(0), GetClientRect(), nCharArray);
- if (fFontSize > 0.0f)
- {
- m_pEdit->SetAutoFontSize(FALSE);
- m_pEdit->SetFontSize(fFontSize);
- }
- }
- }
- }
+void CPWL_Edit::SetCharArray(int32_t nCharArray) {
+ if (HasFlag(PES_CHARARRAY) && nCharArray > 0) {
+ m_pEdit->SetCharArray(nCharArray);
+ m_pEdit->SetTextOverflow(TRUE);
+
+ if (HasFlag(PWS_AUTOFONTSIZE)) {
+ if (IFX_Edit_FontMap* pFontMap = GetFontMap()) {
+ FX_FLOAT fFontSize = GetCharArrayAutoFontSize(
+ pFontMap->GetPDFFont(0), GetClientRect(), nCharArray);
+ if (fFontSize > 0.0f) {
+ m_pEdit->SetAutoFontSize(FALSE);
+ m_pEdit->SetFontSize(fFontSize);
+ }
+ }
+ }
+ }
}
-void CPWL_Edit::SetLimitChar(int32_t nLimitChar)
-{
- m_pEdit->SetLimitChar(nLimitChar);
+void CPWL_Edit::SetLimitChar(int32_t nLimitChar) {
+ m_pEdit->SetLimitChar(nLimitChar);
}
-void CPWL_Edit::ReplaceSel(const FX_WCHAR* csText)
-{
- m_pEdit->Clear();
- m_pEdit->InsertText(csText);
+void CPWL_Edit::ReplaceSel(const FX_WCHAR* csText) {
+ m_pEdit->Clear();
+ m_pEdit->InsertText(csText);
}
-CPDF_Rect CPWL_Edit::GetFocusRect() const
-{
- return CPDF_Rect();
+CPDF_Rect CPWL_Edit::GetFocusRect() const {
+ return CPDF_Rect();
}
-void CPWL_Edit::ShowVScrollBar(FX_BOOL bShow)
-{
- if (CPWL_ScrollBar * pScroll = GetVScrollBar())
- {
- if (bShow)
- {
- if (!pScroll->IsVisible())
- {
- pScroll->SetVisible(TRUE);
- CPDF_Rect rcWindow = GetWindowRect();
- m_rcOldWindow = rcWindow;
- rcWindow.right += PWL_SCROLLBAR_WIDTH;
- Move(rcWindow, TRUE, TRUE);
- }
- }
- else
- {
- if (pScroll->IsVisible())
- {
- pScroll->SetVisible(FALSE);
- Move(m_rcOldWindow, TRUE, TRUE);
- }
- }
- }
+void CPWL_Edit::ShowVScrollBar(FX_BOOL bShow) {
+ if (CPWL_ScrollBar* pScroll = GetVScrollBar()) {
+ if (bShow) {
+ if (!pScroll->IsVisible()) {
+ pScroll->SetVisible(TRUE);
+ CPDF_Rect rcWindow = GetWindowRect();
+ m_rcOldWindow = rcWindow;
+ rcWindow.right += PWL_SCROLLBAR_WIDTH;
+ Move(rcWindow, TRUE, TRUE);
+ }
+ } else {
+ if (pScroll->IsVisible()) {
+ pScroll->SetVisible(FALSE);
+ Move(m_rcOldWindow, TRUE, TRUE);
+ }
+ }
+ }
}
-FX_BOOL CPWL_Edit::IsVScrollBarVisible() const
-{
- if (CPWL_ScrollBar * pScroll = GetVScrollBar())
- {
- return pScroll->IsVisible();
- }
+FX_BOOL CPWL_Edit::IsVScrollBarVisible() const {
+ if (CPWL_ScrollBar* pScroll = GetVScrollBar()) {
+ return pScroll->IsVisible();
+ }
- return FALSE;
+ return FALSE;
}
-void CPWL_Edit::EnableSpellCheck(FX_BOOL bEnabled)
-{
- if (bEnabled)
- AddFlag(PES_SPELLCHECK);
- else
- RemoveFlag(PES_SPELLCHECK);
+void CPWL_Edit::EnableSpellCheck(FX_BOOL bEnabled) {
+ if (bEnabled)
+ AddFlag(PES_SPELLCHECK);
+ else
+ RemoveFlag(PES_SPELLCHECK);
}
-FX_BOOL CPWL_Edit::OnKeyDown(FX_WORD nChar, FX_DWORD nFlag)
-{
- if (m_bMouseDown) return TRUE;
-
- if (nChar == FWL_VKEY_Delete)
- {
- if (m_pFillerNotify)
- {
- FX_BOOL bRC = TRUE;
- FX_BOOL bExit = FALSE;
- CFX_WideString strChange;
- CFX_WideString strChangeEx;
-
- int nSelStart = 0;
- int nSelEnd = 0;
- GetSel(nSelStart, nSelEnd);
-
- if (nSelStart == nSelEnd)
- nSelEnd = nSelStart + 1;
- m_pFillerNotify->OnBeforeKeyStroke(TRUE, GetAttachedData(), FWL_VKEY_Delete, strChange, strChangeEx, nSelStart, nSelEnd, TRUE, bRC, bExit, nFlag);
- if (!bRC) return FALSE;
- if (bExit) return FALSE;
- }
- }
-
- FX_BOOL bRet = CPWL_EditCtrl::OnKeyDown(nChar, nFlag);
-
- if (nChar == FWL_VKEY_Delete)
- {
- if (m_pFillerNotify)
- {
- FX_BOOL bExit = FALSE;
- m_pFillerNotify->OnAfterKeyStroke(TRUE, GetAttachedData(), bExit,nFlag);
- if (bExit) return FALSE;
- }
- }
-
- //In case of implementation swallow the OnKeyDown event.
- if(IsProceedtoOnChar(nChar, nFlag))
- return TRUE;
-
- return bRet;
+FX_BOOL CPWL_Edit::OnKeyDown(FX_WORD nChar, FX_DWORD nFlag) {
+ if (m_bMouseDown)
+ return TRUE;
+
+ if (nChar == FWL_VKEY_Delete) {
+ if (m_pFillerNotify) {
+ FX_BOOL bRC = TRUE;
+ FX_BOOL bExit = FALSE;
+ CFX_WideString strChange;
+ CFX_WideString strChangeEx;
+
+ int nSelStart = 0;
+ int nSelEnd = 0;
+ GetSel(nSelStart, nSelEnd);
+
+ if (nSelStart == nSelEnd)
+ nSelEnd = nSelStart + 1;
+ m_pFillerNotify->OnBeforeKeyStroke(
+ TRUE, GetAttachedData(), FWL_VKEY_Delete, strChange, strChangeEx,
+ nSelStart, nSelEnd, TRUE, bRC, bExit, nFlag);
+ if (!bRC)
+ return FALSE;
+ if (bExit)
+ return FALSE;
+ }
+ }
+
+ FX_BOOL bRet = CPWL_EditCtrl::OnKeyDown(nChar, nFlag);
+
+ if (nChar == FWL_VKEY_Delete) {
+ if (m_pFillerNotify) {
+ FX_BOOL bExit = FALSE;
+ m_pFillerNotify->OnAfterKeyStroke(TRUE, GetAttachedData(), bExit, nFlag);
+ if (bExit)
+ return FALSE;
+ }
+ }
+
+ // In case of implementation swallow the OnKeyDown event.
+ if (IsProceedtoOnChar(nChar, nFlag))
+ return TRUE;
+
+ return bRet;
}
/**
*In case of implementation swallow the OnKeyDown event.
-*If the event is swallowed, implementation may do other unexpected things, which is not the control means to do.
+*If the event is swallowed, implementation may do other unexpected things, which
+*is not the control means to do.
*/
-FX_BOOL CPWL_Edit::IsProceedtoOnChar(FX_WORD nKeyCode, FX_DWORD nFlag)
-{
-
- FX_BOOL bCtrl = IsCTRLpressed(nFlag);
- FX_BOOL bAlt = IsALTpressed(nFlag);
- if(bCtrl && !bAlt)
- {
- //hot keys for edit control.
- switch(nKeyCode)
- {
- case 'C':
- case 'V':
- case 'X':
- case 'A':
- case 'Z':
- return TRUE;
- default:
- break;
- }
- }
- //control characters.
- switch(nKeyCode)
- {
- case FWL_VKEY_Escape:
- case FWL_VKEY_Back:
- case FWL_VKEY_Return:
- case FWL_VKEY_Space:
- return TRUE;
- default:
- break;
- }
- return FALSE;
-
+FX_BOOL CPWL_Edit::IsProceedtoOnChar(FX_WORD nKeyCode, FX_DWORD nFlag) {
+ FX_BOOL bCtrl = IsCTRLpressed(nFlag);
+ FX_BOOL bAlt = IsALTpressed(nFlag);
+ if (bCtrl && !bAlt) {
+ // hot keys for edit control.
+ switch (nKeyCode) {
+ case 'C':
+ case 'V':
+ case 'X':
+ case 'A':
+ case 'Z':
+ return TRUE;
+ default:
+ break;
+ }
+ }
+ // control characters.
+ switch (nKeyCode) {
+ case FWL_VKEY_Escape:
+ case FWL_VKEY_Back:
+ case FWL_VKEY_Return:
+ case FWL_VKEY_Space:
+ return TRUE;
+ default:
+ break;
+ }
+ return FALSE;
}
-FX_BOOL CPWL_Edit::OnChar(FX_WORD nChar, FX_DWORD nFlag)
-{
- if (m_bMouseDown) return TRUE;
-
- FX_BOOL bRC = TRUE;
- FX_BOOL bExit = FALSE;
-
- FX_BOOL bCtrl = IsCTRLpressed(nFlag);
- if (!bCtrl)
- {
- if (m_pFillerNotify)
- {
- CFX_WideString swChange;
- int32_t nKeyCode;
-
- int nSelStart = 0;
- int nSelEnd = 0;
- GetSel(nSelStart, nSelEnd);
-
- switch (nChar)
- {
- case FWL_VKEY_Back:
- nKeyCode = nChar;
- if (nSelStart == nSelEnd)
- nSelStart = nSelEnd - 1;
- break;
- case FWL_VKEY_Return:
- nKeyCode = nChar;
- break;
- default:
- nKeyCode = 0;
- swChange += nChar;
- break;
- }
-
- CFX_WideString strChangeEx;
- m_pFillerNotify->OnBeforeKeyStroke(TRUE, GetAttachedData(), nKeyCode, swChange, strChangeEx, nSelStart, nSelEnd, TRUE, bRC, bExit, nFlag);
- }
- }
-
- if (!bRC) return TRUE;
- if (bExit) return FALSE;
-
- if (IFX_Edit_FontMap * pFontMap = GetFontMap())
- {
- int32_t nOldCharSet = GetCharSet();
- int32_t nNewCharSet = pFontMap->CharSetFromUnicode(nChar, DEFAULT_CHARSET);
- if(nOldCharSet != nNewCharSet)
- {
- SetCharSet(nNewCharSet);
- }
- }
- FX_BOOL bRet = CPWL_EditCtrl::OnChar(nChar,nFlag);
-
- if (!bCtrl)
- {
- if (m_pFillerNotify)
- {
- m_pFillerNotify->OnAfterKeyStroke(TRUE, GetAttachedData(), bExit,nFlag);
- if (bExit) return FALSE;
- }
- }
-
- return bRet;
-}
+FX_BOOL CPWL_Edit::OnChar(FX_WORD nChar, FX_DWORD nFlag) {
+ if (m_bMouseDown)
+ return TRUE;
+
+ FX_BOOL bRC = TRUE;
+ FX_BOOL bExit = FALSE;
+
+ FX_BOOL bCtrl = IsCTRLpressed(nFlag);
+ if (!bCtrl) {
+ if (m_pFillerNotify) {
+ CFX_WideString swChange;
+ int32_t nKeyCode;
+
+ int nSelStart = 0;
+ int nSelEnd = 0;
+ GetSel(nSelStart, nSelEnd);
+
+ switch (nChar) {
+ case FWL_VKEY_Back:
+ nKeyCode = nChar;
+ if (nSelStart == nSelEnd)
+ nSelStart = nSelEnd - 1;
+ break;
+ case FWL_VKEY_Return:
+ nKeyCode = nChar;
+ break;
+ default:
+ nKeyCode = 0;
+ swChange += nChar;
+ break;
+ }
+
+ CFX_WideString strChangeEx;
+ m_pFillerNotify->OnBeforeKeyStroke(TRUE, GetAttachedData(), nKeyCode,
+ swChange, strChangeEx, nSelStart,
+ nSelEnd, TRUE, bRC, bExit, nFlag);
+ }
+ }
+
+ if (!bRC)
+ return TRUE;
+ if (bExit)
+ return FALSE;
+
+ if (IFX_Edit_FontMap* pFontMap = GetFontMap()) {
+ int32_t nOldCharSet = GetCharSet();
+ int32_t nNewCharSet = pFontMap->CharSetFromUnicode(nChar, DEFAULT_CHARSET);
+ if (nOldCharSet != nNewCharSet) {
+ SetCharSet(nNewCharSet);
+ }
+ }
+ FX_BOOL bRet = CPWL_EditCtrl::OnChar(nChar, nFlag);
+
+ if (!bCtrl) {
+ if (m_pFillerNotify) {
+ m_pFillerNotify->OnAfterKeyStroke(TRUE, GetAttachedData(), bExit, nFlag);
+ if (bExit)
+ return FALSE;
+ }
+ }
-FX_BOOL CPWL_Edit::OnMouseWheel(short zDelta, const CPDF_Point & point, FX_DWORD nFlag)
-{
- if (HasFlag(PES_MULTILINE))
- {
- CPDF_Point ptScroll = GetScrollPos();
-
- if (zDelta > 0)
- {
- ptScroll.y += GetFontSize();
- }
- else
- {
- ptScroll.y -= GetFontSize();
- }
- SetScrollPos(ptScroll);
-
- return TRUE;
- }
-
- return FALSE;
+ return bRet;
}
-void CPWL_Edit::OnInsertReturn(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace)
-{
- if (HasFlag(PES_SPELLCHECK))
- {
- m_pEdit->RefreshWordRange(CombineWordRange(GetLatinWordsRange(oldplace),GetLatinWordsRange(place)));
- }
-
- if (m_pEditNotify)
- {
- m_pEditNotify->OnInsertReturn(place, oldplace);
- }
-}
+FX_BOOL CPWL_Edit::OnMouseWheel(short zDelta,
+ const CPDF_Point& point,
+ FX_DWORD nFlag) {
+ if (HasFlag(PES_MULTILINE)) {
+ CPDF_Point ptScroll = GetScrollPos();
+
+ if (zDelta > 0) {
+ ptScroll.y += GetFontSize();
+ } else {
+ ptScroll.y -= GetFontSize();
+ }
+ SetScrollPos(ptScroll);
+
+ return TRUE;
+ }
-void CPWL_Edit::OnBackSpace(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace)
-{
- if (HasFlag(PES_SPELLCHECK))
- {
- m_pEdit->RefreshWordRange(CombineWordRange(GetLatinWordsRange(oldplace),GetLatinWordsRange(place)));
- }
-
- if (m_pEditNotify)
- {
- m_pEditNotify->OnBackSpace(place, oldplace);
- }
+ return FALSE;
}
-void CPWL_Edit::OnDelete(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace)
-{
- if (HasFlag(PES_SPELLCHECK))
- {
- m_pEdit->RefreshWordRange(CombineWordRange(GetLatinWordsRange(oldplace),GetLatinWordsRange(place)));
- }
-
- if (m_pEditNotify)
- {
- m_pEditNotify->OnDelete(place, oldplace);
- }
+void CPWL_Edit::OnInsertReturn(const CPVT_WordPlace& place,
+ const CPVT_WordPlace& oldplace) {
+ if (HasFlag(PES_SPELLCHECK)) {
+ m_pEdit->RefreshWordRange(CombineWordRange(GetLatinWordsRange(oldplace),
+ GetLatinWordsRange(place)));
+ }
+
+ if (m_pEditNotify) {
+ m_pEditNotify->OnInsertReturn(place, oldplace);
+ }
}
-void CPWL_Edit::OnClear(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace)
-{
- if (HasFlag(PES_SPELLCHECK))
- {
- m_pEdit->RefreshWordRange(CombineWordRange(GetLatinWordsRange(oldplace),GetLatinWordsRange(place)));
- }
-
- if (m_pEditNotify)
- {
- m_pEditNotify->OnClear(place, oldplace);
- }
+void CPWL_Edit::OnBackSpace(const CPVT_WordPlace& place,
+ const CPVT_WordPlace& oldplace) {
+ if (HasFlag(PES_SPELLCHECK)) {
+ m_pEdit->RefreshWordRange(CombineWordRange(GetLatinWordsRange(oldplace),
+ GetLatinWordsRange(place)));
+ }
+
+ if (m_pEditNotify) {
+ m_pEditNotify->OnBackSpace(place, oldplace);
+ }
}
-void CPWL_Edit::OnInsertWord(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace)
-{
- if (HasFlag(PES_SPELLCHECK))
- {
- m_pEdit->RefreshWordRange(CombineWordRange(GetLatinWordsRange(oldplace),GetLatinWordsRange(place)));
- }
-
- if (m_pEditNotify)
- {
- m_pEditNotify->OnInsertWord(place, oldplace);
- }
+void CPWL_Edit::OnDelete(const CPVT_WordPlace& place,
+ const CPVT_WordPlace& oldplace) {
+ if (HasFlag(PES_SPELLCHECK)) {
+ m_pEdit->RefreshWordRange(CombineWordRange(GetLatinWordsRange(oldplace),
+ GetLatinWordsRange(place)));
+ }
+
+ if (m_pEditNotify) {
+ m_pEditNotify->OnDelete(place, oldplace);
+ }
}
-void CPWL_Edit::OnSetText(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace)
-{
+void CPWL_Edit::OnClear(const CPVT_WordPlace& place,
+ const CPVT_WordPlace& oldplace) {
+ if (HasFlag(PES_SPELLCHECK)) {
+ m_pEdit->RefreshWordRange(CombineWordRange(GetLatinWordsRange(oldplace),
+ GetLatinWordsRange(place)));
+ }
+
+ if (m_pEditNotify) {
+ m_pEditNotify->OnClear(place, oldplace);
+ }
}
-void CPWL_Edit::OnInsertText(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace)
-{
- if (HasFlag(PES_SPELLCHECK))
- {
- m_pEdit->RefreshWordRange(CombineWordRange(GetLatinWordsRange(oldplace),GetLatinWordsRange(place)));
- }
-
- if (m_pEditNotify)
- {
- m_pEditNotify->OnInsertText(place, oldplace);
- }
+void CPWL_Edit::OnInsertWord(const CPVT_WordPlace& place,
+ const CPVT_WordPlace& oldplace) {
+ if (HasFlag(PES_SPELLCHECK)) {
+ m_pEdit->RefreshWordRange(CombineWordRange(GetLatinWordsRange(oldplace),
+ GetLatinWordsRange(place)));
+ }
+
+ if (m_pEditNotify) {
+ m_pEditNotify->OnInsertWord(place, oldplace);
+ }
}
-void CPWL_Edit::OnAddUndo(IFX_Edit_UndoItem* pUndoItem)
-{
- if (m_pEditNotify)
- {
- m_pEditNotify->OnAddUndo(this);
- }
+void CPWL_Edit::OnSetText(const CPVT_WordPlace& place,
+ const CPVT_WordPlace& oldplace) {}
+
+void CPWL_Edit::OnInsertText(const CPVT_WordPlace& place,
+ const CPVT_WordPlace& oldplace) {
+ if (HasFlag(PES_SPELLCHECK)) {
+ m_pEdit->RefreshWordRange(CombineWordRange(GetLatinWordsRange(oldplace),
+ GetLatinWordsRange(place)));
+ }
+
+ if (m_pEditNotify) {
+ m_pEditNotify->OnInsertText(place, oldplace);
+ }
}
-CPVT_WordRange CPWL_Edit::CombineWordRange(const CPVT_WordRange& wr1, const CPVT_WordRange& wr2)
-{
- CPVT_WordRange wrRet;
-
- if (wr1.BeginPos.WordCmp(wr2.BeginPos) < 0)
- {
- wrRet.BeginPos = wr1.BeginPos;
- }
- else
- {
- wrRet.BeginPos = wr2.BeginPos;
- }
-
- if (wr1.EndPos.WordCmp(wr2.EndPos) < 0)
- {
- wrRet.EndPos = wr2.EndPos;
- }
- else
- {
- wrRet.EndPos = wr1.EndPos;
- }
-
- return wrRet;
+void CPWL_Edit::OnAddUndo(IFX_Edit_UndoItem* pUndoItem) {
+ if (m_pEditNotify) {
+ m_pEditNotify->OnAddUndo(this);
+ }
}
-CPVT_WordRange CPWL_Edit::GetLatinWordsRange(const CPDF_Point& point) const
-{
- return GetSameWordsRange(m_pEdit->SearchWordPlace(point), TRUE, FALSE);
+CPVT_WordRange CPWL_Edit::CombineWordRange(const CPVT_WordRange& wr1,
+ const CPVT_WordRange& wr2) {
+ CPVT_WordRange wrRet;
+
+ if (wr1.BeginPos.WordCmp(wr2.BeginPos) < 0) {
+ wrRet.BeginPos = wr1.BeginPos;
+ } else {
+ wrRet.BeginPos = wr2.BeginPos;
+ }
+
+ if (wr1.EndPos.WordCmp(wr2.EndPos) < 0) {
+ wrRet.EndPos = wr2.EndPos;
+ } else {
+ wrRet.EndPos = wr1.EndPos;
+ }
+
+ return wrRet;
}
-CPVT_WordRange CPWL_Edit::GetLatinWordsRange(const CPVT_WordPlace & place) const
-{
- return GetSameWordsRange(place, TRUE, FALSE);
+CPVT_WordRange CPWL_Edit::GetLatinWordsRange(const CPDF_Point& point) const {
+ return GetSameWordsRange(m_pEdit->SearchWordPlace(point), TRUE, FALSE);
}
-CPVT_WordRange CPWL_Edit::GetArabicWordsRange(const CPVT_WordPlace & place) const
-{
- return GetSameWordsRange(place, FALSE, TRUE);
+CPVT_WordRange CPWL_Edit::GetLatinWordsRange(
+ const CPVT_WordPlace& place) const {
+ return GetSameWordsRange(place, TRUE, FALSE);
}
-#define PWL_ISARABICWORD(word) ((word >= 0x0600 && word <= 0x06FF) || (word >= 0xFB50 && word <= 0xFEFC))
-
-CPVT_WordRange CPWL_Edit::GetSameWordsRange(const CPVT_WordPlace & place, FX_BOOL bLatin, FX_BOOL bArabic) const
-{
- CPVT_WordRange range;
-
- if (IFX_Edit_Iterator* pIterator = m_pEdit->GetIterator())
- {
- CPVT_Word wordinfo;
- CPVT_WordPlace wpStart(place),wpEnd(place);
- pIterator->SetAt(place);
-
- if (bLatin)
- {
- while (pIterator->NextWord())
- {
- if (pIterator->GetWord(wordinfo) && FX_EDIT_ISLATINWORD(wordinfo.Word))
- {
- wpEnd = pIterator->GetAt();
- continue;
- }
- else
- break;
- };
- }
- else if (bArabic)
- {
- while (pIterator->NextWord())
- {
- if (pIterator->GetWord(wordinfo) && PWL_ISARABICWORD(wordinfo.Word))
- {
- wpEnd = pIterator->GetAt();
- continue;
- }
- else
- break;
- };
- }
-
- pIterator->SetAt(place);
-
- if (bLatin)
- {
- do
- {
- if (pIterator->GetWord(wordinfo) && FX_EDIT_ISLATINWORD(wordinfo.Word))
- {
- continue;
- }
- else
- {
- wpStart = pIterator->GetAt();
- break;
- }
- }
- while (pIterator->PrevWord());
- }
- else if (bArabic)
- {
- do
- {
- if (pIterator->GetWord(wordinfo) && PWL_ISARABICWORD(wordinfo.Word))
- {
- continue;
- }
- else
- {
- wpStart = pIterator->GetAt();
- break;
- }
- }
- while (pIterator->PrevWord());
- }
-
- range.Set(wpStart,wpEnd);
- }
-
- return range;
+CPVT_WordRange CPWL_Edit::GetArabicWordsRange(
+ const CPVT_WordPlace& place) const {
+ return GetSameWordsRange(place, FALSE, TRUE);
}
-void CPWL_Edit::AjustArabicWords(const CPVT_WordRange& wr)
-{
+#define PWL_ISARABICWORD(word) \
+ ((word >= 0x0600 && word <= 0x06FF) || (word >= 0xFB50 && word <= 0xFEFC))
+
+CPVT_WordRange CPWL_Edit::GetSameWordsRange(const CPVT_WordPlace& place,
+ FX_BOOL bLatin,
+ FX_BOOL bArabic) const {
+ CPVT_WordRange range;
+
+ if (IFX_Edit_Iterator* pIterator = m_pEdit->GetIterator()) {
+ CPVT_Word wordinfo;
+ CPVT_WordPlace wpStart(place), wpEnd(place);
+ pIterator->SetAt(place);
+
+ if (bLatin) {
+ while (pIterator->NextWord()) {
+ if (pIterator->GetWord(wordinfo) &&
+ FX_EDIT_ISLATINWORD(wordinfo.Word)) {
+ wpEnd = pIterator->GetAt();
+ continue;
+ } else
+ break;
+ };
+ } else if (bArabic) {
+ while (pIterator->NextWord()) {
+ if (pIterator->GetWord(wordinfo) && PWL_ISARABICWORD(wordinfo.Word)) {
+ wpEnd = pIterator->GetAt();
+ continue;
+ } else
+ break;
+ };
+ }
+
+ pIterator->SetAt(place);
+
+ if (bLatin) {
+ do {
+ if (pIterator->GetWord(wordinfo) &&
+ FX_EDIT_ISLATINWORD(wordinfo.Word)) {
+ continue;
+ } else {
+ wpStart = pIterator->GetAt();
+ break;
+ }
+ } while (pIterator->PrevWord());
+ } else if (bArabic) {
+ do {
+ if (pIterator->GetWord(wordinfo) && PWL_ISARABICWORD(wordinfo.Word)) {
+ continue;
+ } else {
+ wpStart = pIterator->GetAt();
+ break;
+ }
+ } while (pIterator->PrevWord());
+ }
+
+ range.Set(wpStart, wpEnd);
+ }
+
+ return range;
}
-void CPWL_Edit::GeneratePageObjects(CPDF_PageObjects* pPageObjects,
- const CPDF_Point& ptOffset, CFX_ArrayTemplate<CPDF_TextObject*>& ObjArray)
-{
- IFX_Edit::GeneratePageObjects(pPageObjects, m_pEdit, ptOffset, NULL, CPWL_Utils::PWLColorToFXColor(GetTextColor(),GetTransparency()), ObjArray);
+void CPWL_Edit::AjustArabicWords(const CPVT_WordRange& wr) {}
+
+void CPWL_Edit::GeneratePageObjects(
+ CPDF_PageObjects* pPageObjects,
+ const CPDF_Point& ptOffset,
+ CFX_ArrayTemplate<CPDF_TextObject*>& ObjArray) {
+ IFX_Edit::GeneratePageObjects(
+ pPageObjects, m_pEdit, ptOffset, NULL,
+ CPWL_Utils::PWLColorToFXColor(GetTextColor(), GetTransparency()),
+ ObjArray);
}
void CPWL_Edit::GeneratePageObjects(CPDF_PageObjects* pPageObjects,
- const CPDF_Point& ptOffset)
-{
- CFX_ArrayTemplate<CPDF_TextObject*> ObjArray;
- IFX_Edit::GeneratePageObjects(pPageObjects, m_pEdit, ptOffset, NULL, CPWL_Utils::PWLColorToFXColor(GetTextColor(),GetTransparency()), ObjArray);
+ const CPDF_Point& ptOffset) {
+ CFX_ArrayTemplate<CPDF_TextObject*> ObjArray;
+ IFX_Edit::GeneratePageObjects(
+ pPageObjects, m_pEdit, ptOffset, NULL,
+ CPWL_Utils::PWLColorToFXColor(GetTextColor(), GetTransparency()),
+ ObjArray);
}
-
diff --git a/fpdfsdk/src/pdfwindow/PWL_EditCtrl.cpp b/fpdfsdk/src/pdfwindow/PWL_EditCtrl.cpp
index 0d14587f66..eb6324ee7e 100644
--- a/fpdfsdk/src/pdfwindow/PWL_EditCtrl.cpp
+++ b/fpdfsdk/src/pdfwindow/PWL_EditCtrl.cpp
@@ -12,172 +12,146 @@
#include "../../include/pdfwindow/PWL_Caret.h"
#include "../../include/pdfwindow/PWL_FontMap.h"
-#define IsFloatZero(f) ((f) < 0.0001 && (f) > -0.0001)
-#define IsFloatBigger(fa,fb) ((fa) > (fb) && !IsFloatZero((fa) - (fb)))
-#define IsFloatSmaller(fa,fb) ((fa) < (fb) && !IsFloatZero((fa) - (fb)))
-#define IsFloatEqual(fa,fb) IsFloatZero((fa)-(fb))
+#define IsFloatZero(f) ((f) < 0.0001 && (f) > -0.0001)
+#define IsFloatBigger(fa, fb) ((fa) > (fb) && !IsFloatZero((fa) - (fb)))
+#define IsFloatSmaller(fa, fb) ((fa) < (fb) && !IsFloatZero((fa) - (fb)))
+#define IsFloatEqual(fa, fb) IsFloatZero((fa) - (fb))
/* ---------------------------- CPWL_EditCtrl ------------------------------ */
-CPWL_EditCtrl::CPWL_EditCtrl() :
- m_pEdit(NULL),
- m_pEditCaret(NULL),
- m_bMouseDown(FALSE),
- m_pEditNotify(NULL),
- m_nCharSet(DEFAULT_CHARSET),
- m_nCodePage(0)
-{
- m_pEdit = IFX_Edit::NewEdit();
- ASSERT(m_pEdit != NULL);
+CPWL_EditCtrl::CPWL_EditCtrl()
+ : m_pEdit(NULL),
+ m_pEditCaret(NULL),
+ m_bMouseDown(FALSE),
+ m_pEditNotify(NULL),
+ m_nCharSet(DEFAULT_CHARSET),
+ m_nCodePage(0) {
+ m_pEdit = IFX_Edit::NewEdit();
+ ASSERT(m_pEdit != NULL);
}
-CPWL_EditCtrl::~CPWL_EditCtrl()
-{
- IFX_Edit::DelEdit(m_pEdit);
+CPWL_EditCtrl::~CPWL_EditCtrl() {
+ IFX_Edit::DelEdit(m_pEdit);
}
-void CPWL_EditCtrl::OnCreate(PWL_CREATEPARAM& cp)
-{
- cp.eCursorType = FXCT_VBEAM;
+void CPWL_EditCtrl::OnCreate(PWL_CREATEPARAM& cp) {
+ cp.eCursorType = FXCT_VBEAM;
}
-void CPWL_EditCtrl::OnCreated()
-{
- SetFontSize(GetCreationParam().fFontSize);
+void CPWL_EditCtrl::OnCreated() {
+ SetFontSize(GetCreationParam().fFontSize);
- m_pEdit->SetFontMap(GetFontMap());
- m_pEdit->SetNotify(this);
- m_pEdit->Initialize();
+ m_pEdit->SetFontMap(GetFontMap());
+ m_pEdit->SetNotify(this);
+ m_pEdit->Initialize();
}
-FX_BOOL CPWL_EditCtrl::IsWndHorV()
-{
- CPDF_Matrix mt = GetWindowMatrix();
- CPDF_Point point1(0,1);
- CPDF_Point point2(1,1);
+FX_BOOL CPWL_EditCtrl::IsWndHorV() {
+ CPDF_Matrix mt = GetWindowMatrix();
+ CPDF_Point point1(0, 1);
+ CPDF_Point point2(1, 1);
- mt.Transform(point1.x, point1.y);
- mt.Transform(point2.x, point2.y);
+ mt.Transform(point1.x, point1.y);
+ mt.Transform(point2.x, point2.y);
- return point2.y == point1.y;
+ return point2.y == point1.y;
}
-void CPWL_EditCtrl::SetCursor()
-{
- if (IsValid())
- {
- if (IFX_SystemHandler* pSH = GetSystemHandler())
- {
- if (IsWndHorV())
- pSH->SetCursor(FXCT_VBEAM);
- else
- pSH->SetCursor(FXCT_HBEAM);
- }
+void CPWL_EditCtrl::SetCursor() {
+ if (IsValid()) {
+ if (IFX_SystemHandler* pSH = GetSystemHandler()) {
+ if (IsWndHorV())
+ pSH->SetCursor(FXCT_VBEAM);
+ else
+ pSH->SetCursor(FXCT_HBEAM);
}
-}
-
-void CPWL_EditCtrl::RePosChildWnd()
-{
- m_pEdit->SetPlateRect(GetClientRect());
-}
-
-void CPWL_EditCtrl::OnNotify(CPWL_Wnd* pWnd, FX_DWORD msg, intptr_t wParam, intptr_t lParam)
-{
- CPWL_Wnd::OnNotify(pWnd,msg,wParam,lParam);
-
- switch (msg)
- {
- case PNM_SETSCROLLINFO:
- switch (wParam)
- {
- case SBT_VSCROLL:
- if (CPWL_Wnd * pChild = GetVScrollBar())
- {
- pChild->OnNotify(pWnd,PNM_SETSCROLLINFO,wParam,lParam);
- }
- break;
- }
- break;
- case PNM_SETSCROLLPOS:
- switch (wParam)
- {
- case SBT_VSCROLL:
- if (CPWL_Wnd * pChild = GetVScrollBar())
- {
- pChild->OnNotify(pWnd,PNM_SETSCROLLPOS,wParam,lParam);
- }
- break;
- }
- break;
- case PNM_SCROLLWINDOW:
- {
- FX_FLOAT fPos = *(FX_FLOAT*)lParam;
- switch (wParam)
- {
- case SBT_VSCROLL:
- m_pEdit->SetScrollPos(CPDF_Point(m_pEdit->GetScrollPos().x,fPos));
- break;
- }
- }
- break;
- case PNM_SETCARETINFO:
- {
- if (PWL_CARET_INFO * pCaretInfo = (PWL_CARET_INFO *)wParam)
- {
- SetCaret(pCaretInfo->bVisible,
- pCaretInfo->ptHead,
- pCaretInfo->ptFoot);
- }
- }
- break;
- }
-}
-
-void CPWL_EditCtrl::CreateChildWnd(const PWL_CREATEPARAM & cp)
-{
- if (!IsReadOnly())
- CreateEditCaret(cp);
-}
-
-void CPWL_EditCtrl::CreateEditCaret(const PWL_CREATEPARAM & cp)
-{
- if (!m_pEditCaret)
- {
- m_pEditCaret = new CPWL_Caret;
- m_pEditCaret->SetInvalidRect(GetClientRect());
-
- PWL_CREATEPARAM ecp = cp;
- ecp.pParentWnd = this;
- ecp.dwFlags = PWS_CHILD | PWS_NOREFRESHCLIP;
- ecp.dwBorderWidth = 0;
- ecp.nBorderStyle = PBS_SOLID;
- ecp.rcRectWnd = CPDF_Rect(0,0,0,0);
-
- m_pEditCaret->Create(ecp);
- }
-}
-
-void CPWL_EditCtrl::SetFontSize(FX_FLOAT fFontSize)
-{
- m_pEdit->SetFontSize(fFontSize);
-}
-
-FX_FLOAT CPWL_EditCtrl::GetFontSize() const
-{
- return m_pEdit->GetFontSize();
-}
-
-FX_BOOL CPWL_EditCtrl::OnKeyDown(FX_WORD nChar, FX_DWORD nFlag)
-{
- if (m_bMouseDown) return TRUE;
+ }
+}
+
+void CPWL_EditCtrl::RePosChildWnd() {
+ m_pEdit->SetPlateRect(GetClientRect());
+}
+
+void CPWL_EditCtrl::OnNotify(CPWL_Wnd* pWnd,
+ FX_DWORD msg,
+ intptr_t wParam,
+ intptr_t lParam) {
+ CPWL_Wnd::OnNotify(pWnd, msg, wParam, lParam);
+
+ switch (msg) {
+ case PNM_SETSCROLLINFO:
+ switch (wParam) {
+ case SBT_VSCROLL:
+ if (CPWL_Wnd* pChild = GetVScrollBar()) {
+ pChild->OnNotify(pWnd, PNM_SETSCROLLINFO, wParam, lParam);
+ }
+ break;
+ }
+ break;
+ case PNM_SETSCROLLPOS:
+ switch (wParam) {
+ case SBT_VSCROLL:
+ if (CPWL_Wnd* pChild = GetVScrollBar()) {
+ pChild->OnNotify(pWnd, PNM_SETSCROLLPOS, wParam, lParam);
+ }
+ break;
+ }
+ break;
+ case PNM_SCROLLWINDOW: {
+ FX_FLOAT fPos = *(FX_FLOAT*)lParam;
+ switch (wParam) {
+ case SBT_VSCROLL:
+ m_pEdit->SetScrollPos(CPDF_Point(m_pEdit->GetScrollPos().x, fPos));
+ break;
+ }
+ } break;
+ case PNM_SETCARETINFO: {
+ if (PWL_CARET_INFO* pCaretInfo = (PWL_CARET_INFO*)wParam) {
+ SetCaret(pCaretInfo->bVisible, pCaretInfo->ptHead, pCaretInfo->ptFoot);
+ }
+ } break;
+ }
+}
+
+void CPWL_EditCtrl::CreateChildWnd(const PWL_CREATEPARAM& cp) {
+ if (!IsReadOnly())
+ CreateEditCaret(cp);
+}
+
+void CPWL_EditCtrl::CreateEditCaret(const PWL_CREATEPARAM& cp) {
+ if (!m_pEditCaret) {
+ m_pEditCaret = new CPWL_Caret;
+ m_pEditCaret->SetInvalidRect(GetClientRect());
+
+ PWL_CREATEPARAM ecp = cp;
+ ecp.pParentWnd = this;
+ ecp.dwFlags = PWS_CHILD | PWS_NOREFRESHCLIP;
+ ecp.dwBorderWidth = 0;
+ ecp.nBorderStyle = PBS_SOLID;
+ ecp.rcRectWnd = CPDF_Rect(0, 0, 0, 0);
+
+ m_pEditCaret->Create(ecp);
+ }
+}
+
+void CPWL_EditCtrl::SetFontSize(FX_FLOAT fFontSize) {
+ m_pEdit->SetFontSize(fFontSize);
+}
+
+FX_FLOAT CPWL_EditCtrl::GetFontSize() const {
+ return m_pEdit->GetFontSize();
+}
+
+FX_BOOL CPWL_EditCtrl::OnKeyDown(FX_WORD nChar, FX_DWORD nFlag) {
+ if (m_bMouseDown)
+ return TRUE;
- FX_BOOL bRet = CPWL_Wnd::OnKeyDown(nChar,nFlag);
+ FX_BOOL bRet = CPWL_Wnd::OnKeyDown(nChar, nFlag);
- //FILTER
- switch (nChar)
- {
+ // FILTER
+ switch (nChar) {
default:
- return FALSE;
+ return FALSE;
case FWL_VKEY_Delete:
case FWL_VKEY_Up:
case FWL_VKEY_Down:
@@ -196,527 +170,460 @@ FX_BOOL CPWL_EditCtrl::OnKeyDown(FX_WORD nChar, FX_DWORD nFlag)
case 'x':
case 'a':
case 'z':
- break;
- }
+ break;
+ }
- if (nChar == FWL_VKEY_Delete)
- {
- if (m_pEdit->IsSelected())
- nChar = FWL_VKEY_Unknown;
- }
+ if (nChar == FWL_VKEY_Delete) {
+ if (m_pEdit->IsSelected())
+ nChar = FWL_VKEY_Unknown;
+ }
- switch (nChar)
- {
- case FWL_VKEY_Delete:
- Delete();
- return TRUE;
- case FWL_VKEY_Insert:
- if (IsSHIFTpressed(nFlag))
- PasteText();
- return TRUE;
- case FWL_VKEY_Up:
- m_pEdit->OnVK_UP(IsSHIFTpressed(nFlag),FALSE);
- return TRUE;
- case FWL_VKEY_Down:
- m_pEdit->OnVK_DOWN(IsSHIFTpressed(nFlag),FALSE);
- return TRUE;
- case FWL_VKEY_Left:
- m_pEdit->OnVK_LEFT(IsSHIFTpressed(nFlag),FALSE);
- return TRUE;
- case FWL_VKEY_Right:
- m_pEdit->OnVK_RIGHT(IsSHIFTpressed(nFlag),FALSE);
- return TRUE;
- case FWL_VKEY_Home:
- m_pEdit->OnVK_HOME(IsSHIFTpressed(nFlag),IsCTRLpressed(nFlag));
- return TRUE;
- case FWL_VKEY_End:
- m_pEdit->OnVK_END(IsSHIFTpressed(nFlag),IsCTRLpressed(nFlag));
- return TRUE;
- case FWL_VKEY_Unknown:
- if (!IsSHIFTpressed(nFlag))
- Clear();
- else
- CutText();
- return TRUE;
- default:
- break;
- }
+ switch (nChar) {
+ case FWL_VKEY_Delete:
+ Delete();
+ return TRUE;
+ case FWL_VKEY_Insert:
+ if (IsSHIFTpressed(nFlag))
+ PasteText();
+ return TRUE;
+ case FWL_VKEY_Up:
+ m_pEdit->OnVK_UP(IsSHIFTpressed(nFlag), FALSE);
+ return TRUE;
+ case FWL_VKEY_Down:
+ m_pEdit->OnVK_DOWN(IsSHIFTpressed(nFlag), FALSE);
+ return TRUE;
+ case FWL_VKEY_Left:
+ m_pEdit->OnVK_LEFT(IsSHIFTpressed(nFlag), FALSE);
+ return TRUE;
+ case FWL_VKEY_Right:
+ m_pEdit->OnVK_RIGHT(IsSHIFTpressed(nFlag), FALSE);
+ return TRUE;
+ case FWL_VKEY_Home:
+ m_pEdit->OnVK_HOME(IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag));
+ return TRUE;
+ case FWL_VKEY_End:
+ m_pEdit->OnVK_END(IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag));
+ return TRUE;
+ case FWL_VKEY_Unknown:
+ if (!IsSHIFTpressed(nFlag))
+ Clear();
+ else
+ CutText();
+ return TRUE;
+ default:
+ break;
+ }
- return bRet;
+ return bRet;
}
-FX_BOOL CPWL_EditCtrl::OnChar(FX_WORD nChar, FX_DWORD nFlag)
-{
- if (m_bMouseDown) return TRUE;
-
- CPWL_Wnd::OnChar(nChar,nFlag);
+FX_BOOL CPWL_EditCtrl::OnChar(FX_WORD nChar, FX_DWORD nFlag) {
+ if (m_bMouseDown)
+ return TRUE;
- //FILTER
- switch (nChar)
- {
- case 0x0A:
- case 0x1B:
- return FALSE;
- default:
- break;
- }
+ CPWL_Wnd::OnChar(nChar, nFlag);
- FX_BOOL bCtrl = IsCTRLpressed(nFlag);
- FX_BOOL bAlt = IsALTpressed(nFlag);
- FX_BOOL bShift = IsSHIFTpressed(nFlag);
-
- FX_WORD word = nChar;
-
- if (bCtrl && !bAlt)
- {
- switch (nChar)
- {
- case 'C' - 'A' + 1:
- CopyText();
- return TRUE;
- case 'V' - 'A' + 1:
- PasteText();
- return TRUE;
- case 'X' - 'A' + 1:
- CutText();
- return TRUE;
- case 'A' - 'A' + 1:
- SelectAll();
- return TRUE;
- case 'Z' - 'A' + 1:
- if (bShift)
- Redo();
- else
- Undo();
- return TRUE;
- default:
- if (nChar < 32)
- return FALSE;
- }
+ // FILTER
+ switch (nChar) {
+ case 0x0A:
+ case 0x1B:
+ return FALSE;
+ default:
+ break;
+ }
+
+ FX_BOOL bCtrl = IsCTRLpressed(nFlag);
+ FX_BOOL bAlt = IsALTpressed(nFlag);
+ FX_BOOL bShift = IsSHIFTpressed(nFlag);
+
+ FX_WORD word = nChar;
+
+ if (bCtrl && !bAlt) {
+ switch (nChar) {
+ case 'C' - 'A' + 1:
+ CopyText();
+ return TRUE;
+ case 'V' - 'A' + 1:
+ PasteText();
+ return TRUE;
+ case 'X' - 'A' + 1:
+ CutText();
+ return TRUE;
+ case 'A' - 'A' + 1:
+ SelectAll();
+ return TRUE;
+ case 'Z' - 'A' + 1:
+ if (bShift)
+ Redo();
+ else
+ Undo();
+ return TRUE;
+ default:
+ if (nChar < 32)
+ return FALSE;
}
+ }
- if (IsReadOnly()) return TRUE;
+ if (IsReadOnly())
+ return TRUE;
- if (m_pEdit->IsSelected() && word == FWL_VKEY_Back)
- word = FWL_VKEY_Unknown;
+ if (m_pEdit->IsSelected() && word == FWL_VKEY_Back)
+ word = FWL_VKEY_Unknown;
- Clear();
+ Clear();
- switch (word)
- {
+ switch (word) {
case FWL_VKEY_Back:
- Backspace();
- break;
+ Backspace();
+ break;
case FWL_VKEY_Return:
- InsertReturn();
- break;
+ InsertReturn();
+ break;
case FWL_VKEY_Unknown:
- break;
+ break;
default:
- if (IsINSERTpressed(nFlag))
- Delete();
- InsertWord(word, GetCharSet());
- break;
- }
+ if (IsINSERTpressed(nFlag))
+ Delete();
+ InsertWord(word, GetCharSet());
+ break;
+ }
- return TRUE;
+ return TRUE;
}
-FX_BOOL CPWL_EditCtrl::OnLButtonDown(const CPDF_Point & point, FX_DWORD nFlag)
-{
- CPWL_Wnd::OnLButtonDown(point,nFlag);
+FX_BOOL CPWL_EditCtrl::OnLButtonDown(const CPDF_Point& point, FX_DWORD nFlag) {
+ CPWL_Wnd::OnLButtonDown(point, nFlag);
- if (ClientHitTest(point))
- {
- if (m_bMouseDown)
- InvalidateRect();
+ if (ClientHitTest(point)) {
+ if (m_bMouseDown)
+ InvalidateRect();
- m_bMouseDown = TRUE;
- SetCapture();
+ m_bMouseDown = TRUE;
+ SetCapture();
- m_pEdit->OnMouseDown(point,IsSHIFTpressed(nFlag),IsCTRLpressed(nFlag));
- }
+ m_pEdit->OnMouseDown(point, IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag));
+ }
- return TRUE;
+ return TRUE;
}
-FX_BOOL CPWL_EditCtrl::OnLButtonUp(const CPDF_Point & point, FX_DWORD nFlag)
-{
- CPWL_Wnd::OnLButtonUp(point,nFlag);
+FX_BOOL CPWL_EditCtrl::OnLButtonUp(const CPDF_Point& point, FX_DWORD nFlag) {
+ CPWL_Wnd::OnLButtonUp(point, nFlag);
- if (m_bMouseDown)
- {
- //can receive keybord message
- if (ClientHitTest(point) && !IsFocused())
- SetFocus();
+ if (m_bMouseDown) {
+ // can receive keybord message
+ if (ClientHitTest(point) && !IsFocused())
+ SetFocus();
- ReleaseCapture();
- m_bMouseDown = FALSE;
- }
+ ReleaseCapture();
+ m_bMouseDown = FALSE;
+ }
- return TRUE;
+ return TRUE;
}
-FX_BOOL CPWL_EditCtrl::OnMouseMove(const CPDF_Point & point, FX_DWORD nFlag)
-{
- CPWL_Wnd::OnMouseMove(point,nFlag);
+FX_BOOL CPWL_EditCtrl::OnMouseMove(const CPDF_Point& point, FX_DWORD nFlag) {
+ CPWL_Wnd::OnMouseMove(point, nFlag);
- if (m_bMouseDown)
- m_pEdit->OnMouseMove(point,FALSE,FALSE);
+ if (m_bMouseDown)
+ m_pEdit->OnMouseMove(point, FALSE, FALSE);
- return TRUE;
+ return TRUE;
}
-CPDF_Rect CPWL_EditCtrl::GetContentRect() const
-{
- return m_pEdit->GetContentRect();
+CPDF_Rect CPWL_EditCtrl::GetContentRect() const {
+ return m_pEdit->GetContentRect();
}
-void CPWL_EditCtrl::SetEditCaret(FX_BOOL bVisible)
-{
- CPDF_Point ptHead(0,0),ptFoot(0,0);
+void CPWL_EditCtrl::SetEditCaret(FX_BOOL bVisible) {
+ CPDF_Point ptHead(0, 0), ptFoot(0, 0);
- if (bVisible)
- {
- GetCaretInfo(ptHead,ptFoot);
- }
+ if (bVisible) {
+ GetCaretInfo(ptHead, ptFoot);
+ }
- CPVT_WordPlace wpTemp = m_pEdit->GetCaretWordPlace();
- IOnSetCaret(bVisible,ptHead,ptFoot,wpTemp);
-}
-
-void CPWL_EditCtrl::GetCaretInfo(CPDF_Point & ptHead, CPDF_Point & ptFoot) const
-{
- if (IFX_Edit_Iterator * pIterator = m_pEdit->GetIterator())
- {
- pIterator->SetAt(m_pEdit->GetCaret());
- CPVT_Word word;
- CPVT_Line line;
- if (pIterator->GetWord(word))
- {
- ptHead.x = word.ptWord.x + word.fWidth;
- ptHead.y = word.ptWord.y + word.fAscent;
- ptFoot.x = word.ptWord.x + word.fWidth;
- ptFoot.y = word.ptWord.y + word.fDescent;
- }
- else if (pIterator->GetLine(line))
- {
- ptHead.x = line.ptLine.x;
- ptHead.y = line.ptLine.y + line.fLineAscent;
- ptFoot.x = line.ptLine.x;
- ptFoot.y = line.ptLine.y + line.fLineDescent;
- }
+ CPVT_WordPlace wpTemp = m_pEdit->GetCaretWordPlace();
+ IOnSetCaret(bVisible, ptHead, ptFoot, wpTemp);
+}
+
+void CPWL_EditCtrl::GetCaretInfo(CPDF_Point& ptHead, CPDF_Point& ptFoot) const {
+ if (IFX_Edit_Iterator* pIterator = m_pEdit->GetIterator()) {
+ pIterator->SetAt(m_pEdit->GetCaret());
+ CPVT_Word word;
+ CPVT_Line line;
+ if (pIterator->GetWord(word)) {
+ ptHead.x = word.ptWord.x + word.fWidth;
+ ptHead.y = word.ptWord.y + word.fAscent;
+ ptFoot.x = word.ptWord.x + word.fWidth;
+ ptFoot.y = word.ptWord.y + word.fDescent;
+ } else if (pIterator->GetLine(line)) {
+ ptHead.x = line.ptLine.x;
+ ptHead.y = line.ptLine.y + line.fLineAscent;
+ ptFoot.x = line.ptLine.x;
+ ptFoot.y = line.ptLine.y + line.fLineDescent;
}
+ }
}
-void CPWL_EditCtrl::GetCaretPos(int32_t& x, int32_t& y) const
-{
- CPDF_Point ptHead(0,0), ptFoot(0,0);
+void CPWL_EditCtrl::GetCaretPos(int32_t& x, int32_t& y) const {
+ CPDF_Point ptHead(0, 0), ptFoot(0, 0);
- GetCaretInfo(ptHead,ptFoot);
+ GetCaretInfo(ptHead, ptFoot);
- PWLtoWnd(ptHead, x, y);
+ PWLtoWnd(ptHead, x, y);
}
-void CPWL_EditCtrl::SetCaret(FX_BOOL bVisible, const CPDF_Point & ptHead, const CPDF_Point & ptFoot)
-{
- if (m_pEditCaret)
- {
- if (!IsFocused() || m_pEdit->IsSelected())
- bVisible = FALSE;
+void CPWL_EditCtrl::SetCaret(FX_BOOL bVisible,
+ const CPDF_Point& ptHead,
+ const CPDF_Point& ptFoot) {
+ if (m_pEditCaret) {
+ if (!IsFocused() || m_pEdit->IsSelected())
+ bVisible = FALSE;
- m_pEditCaret->SetCaret(bVisible, ptHead, ptFoot);
- }
+ m_pEditCaret->SetCaret(bVisible, ptHead, ptFoot);
+ }
}
-FX_BOOL CPWL_EditCtrl::IsModified() const
-{
- return m_pEdit->IsModified();
+FX_BOOL CPWL_EditCtrl::IsModified() const {
+ return m_pEdit->IsModified();
}
-CFX_WideString CPWL_EditCtrl::GetText() const
-{
- return m_pEdit->GetText();
+CFX_WideString CPWL_EditCtrl::GetText() const {
+ return m_pEdit->GetText();
}
-void CPWL_EditCtrl::SetSel(int32_t nStartChar,int32_t nEndChar)
-{
- m_pEdit->SetSel(nStartChar, nEndChar);
+void CPWL_EditCtrl::SetSel(int32_t nStartChar, int32_t nEndChar) {
+ m_pEdit->SetSel(nStartChar, nEndChar);
}
-void CPWL_EditCtrl::GetSel(int32_t & nStartChar, int32_t & nEndChar ) const
-{
- m_pEdit->GetSel(nStartChar, nEndChar);
+void CPWL_EditCtrl::GetSel(int32_t& nStartChar, int32_t& nEndChar) const {
+ m_pEdit->GetSel(nStartChar, nEndChar);
}
-void CPWL_EditCtrl::Clear()
-{
- if (!IsReadOnly())
- m_pEdit->Clear();
+void CPWL_EditCtrl::Clear() {
+ if (!IsReadOnly())
+ m_pEdit->Clear();
}
-void CPWL_EditCtrl::SelectAll()
-{
- m_pEdit->SelectAll();
+void CPWL_EditCtrl::SelectAll() {
+ m_pEdit->SelectAll();
}
-void CPWL_EditCtrl::Paint()
-{
- if (m_pEdit)
- m_pEdit->Paint();
+void CPWL_EditCtrl::Paint() {
+ if (m_pEdit)
+ m_pEdit->Paint();
}
-void CPWL_EditCtrl::EnableRefresh(FX_BOOL bRefresh)
-{
- if (m_pEdit)
- m_pEdit->EnableRefresh(bRefresh);
+void CPWL_EditCtrl::EnableRefresh(FX_BOOL bRefresh) {
+ if (m_pEdit)
+ m_pEdit->EnableRefresh(bRefresh);
}
-int32_t CPWL_EditCtrl::GetCaret() const
-{
- if (m_pEdit)
- return m_pEdit->GetCaret();
+int32_t CPWL_EditCtrl::GetCaret() const {
+ if (m_pEdit)
+ return m_pEdit->GetCaret();
- return -1;
+ return -1;
}
-void CPWL_EditCtrl::SetCaret(int32_t nPos)
-{
- if (m_pEdit)
- m_pEdit->SetCaret(nPos);
+void CPWL_EditCtrl::SetCaret(int32_t nPos) {
+ if (m_pEdit)
+ m_pEdit->SetCaret(nPos);
}
-int32_t CPWL_EditCtrl::GetTotalWords() const
-{
- if (m_pEdit)
- return m_pEdit->GetTotalWords();
+int32_t CPWL_EditCtrl::GetTotalWords() const {
+ if (m_pEdit)
+ return m_pEdit->GetTotalWords();
- return 0;
+ return 0;
}
-void CPWL_EditCtrl::SetScrollPos(const CPDF_Point& point)
-{
- if (m_pEdit)
- m_pEdit->SetScrollPos(point);
+void CPWL_EditCtrl::SetScrollPos(const CPDF_Point& point) {
+ if (m_pEdit)
+ m_pEdit->SetScrollPos(point);
}
-CPDF_Point CPWL_EditCtrl::GetScrollPos() const
-{
- if (m_pEdit)
- return m_pEdit->GetScrollPos();
+CPDF_Point CPWL_EditCtrl::GetScrollPos() const {
+ if (m_pEdit)
+ return m_pEdit->GetScrollPos();
- return CPDF_Point(0.0f, 0.0f);
+ return CPDF_Point(0.0f, 0.0f);
}
-CPDF_Font * CPWL_EditCtrl::GetCaretFont() const
-{
- int32_t nFontIndex = 0;
+CPDF_Font* CPWL_EditCtrl::GetCaretFont() const {
+ int32_t nFontIndex = 0;
- if (IFX_Edit_Iterator * pIterator = m_pEdit->GetIterator())
- {
- pIterator->SetAt(m_pEdit->GetCaret());
- CPVT_Word word;
- CPVT_Section section;
- if (pIterator->GetWord(word))
- {
- nFontIndex = word.nFontIndex;
- }
- else if (HasFlag(PES_RICH))
- {
- if (pIterator->GetSection(section))
- {
- nFontIndex = section.WordProps.nFontIndex;
- }
- }
+ if (IFX_Edit_Iterator* pIterator = m_pEdit->GetIterator()) {
+ pIterator->SetAt(m_pEdit->GetCaret());
+ CPVT_Word word;
+ CPVT_Section section;
+ if (pIterator->GetWord(word)) {
+ nFontIndex = word.nFontIndex;
+ } else if (HasFlag(PES_RICH)) {
+ if (pIterator->GetSection(section)) {
+ nFontIndex = section.WordProps.nFontIndex;
+ }
}
+ }
- if (IFX_Edit_FontMap* pFontMap = GetFontMap())
- return pFontMap->GetPDFFont(nFontIndex);
-
- return NULL;
-}
-
-FX_FLOAT CPWL_EditCtrl::GetCaretFontSize() const
-{
- FX_FLOAT fFontSize = GetFontSize();
-
- if (IFX_Edit_Iterator * pIterator = m_pEdit->GetIterator())
- {
- pIterator->SetAt(m_pEdit->GetCaret());
- CPVT_Word word;
- CPVT_Section section;
- if (pIterator->GetWord(word))
- {
- fFontSize = word.fFontSize;
- }
- else if (HasFlag(PES_RICH))
- {
- if (pIterator->GetSection(section))
- {
- fFontSize = section.WordProps.fFontSize;
- }
- }
- }
+ if (IFX_Edit_FontMap* pFontMap = GetFontMap())
+ return pFontMap->GetPDFFont(nFontIndex);
- return fFontSize;
+ return NULL;
}
-void CPWL_EditCtrl::SetText(const FX_WCHAR* csText)
-{
- m_pEdit->SetText(csText);
-}
+FX_FLOAT CPWL_EditCtrl::GetCaretFontSize() const {
+ FX_FLOAT fFontSize = GetFontSize();
-void CPWL_EditCtrl::CopyText()
-{
-}
+ if (IFX_Edit_Iterator* pIterator = m_pEdit->GetIterator()) {
+ pIterator->SetAt(m_pEdit->GetCaret());
+ CPVT_Word word;
+ CPVT_Section section;
+ if (pIterator->GetWord(word)) {
+ fFontSize = word.fFontSize;
+ } else if (HasFlag(PES_RICH)) {
+ if (pIterator->GetSection(section)) {
+ fFontSize = section.WordProps.fFontSize;
+ }
+ }
+ }
-void CPWL_EditCtrl::PasteText()
-{
+ return fFontSize;
}
-void CPWL_EditCtrl::CutText()
-{
+void CPWL_EditCtrl::SetText(const FX_WCHAR* csText) {
+ m_pEdit->SetText(csText);
}
-void CPWL_EditCtrl::ShowVScrollBar(FX_BOOL bShow)
-{
-}
+void CPWL_EditCtrl::CopyText() {}
+
+void CPWL_EditCtrl::PasteText() {}
-void CPWL_EditCtrl::InsertText(const FX_WCHAR* csText)
-{
- if (!IsReadOnly())
- m_pEdit->InsertText(csText);
+void CPWL_EditCtrl::CutText() {}
+
+void CPWL_EditCtrl::ShowVScrollBar(FX_BOOL bShow) {}
+
+void CPWL_EditCtrl::InsertText(const FX_WCHAR* csText) {
+ if (!IsReadOnly())
+ m_pEdit->InsertText(csText);
}
-void CPWL_EditCtrl::InsertWord(FX_WORD word, int32_t nCharset)
-{
- if (!IsReadOnly())
- m_pEdit->InsertWord(word, nCharset);
+void CPWL_EditCtrl::InsertWord(FX_WORD word, int32_t nCharset) {
+ if (!IsReadOnly())
+ m_pEdit->InsertWord(word, nCharset);
}
-void CPWL_EditCtrl::InsertReturn()
-{
- if (!IsReadOnly())
- m_pEdit->InsertReturn();
+void CPWL_EditCtrl::InsertReturn() {
+ if (!IsReadOnly())
+ m_pEdit->InsertReturn();
}
-void CPWL_EditCtrl::Delete()
-{
- if (!IsReadOnly())
- m_pEdit->Delete();
+void CPWL_EditCtrl::Delete() {
+ if (!IsReadOnly())
+ m_pEdit->Delete();
}
-void CPWL_EditCtrl::Backspace()
-{
- if (!IsReadOnly())
- m_pEdit->Backspace();
+void CPWL_EditCtrl::Backspace() {
+ if (!IsReadOnly())
+ m_pEdit->Backspace();
}
-FX_BOOL CPWL_EditCtrl::CanUndo() const
-{
- return !IsReadOnly() && m_pEdit->CanUndo();
+FX_BOOL CPWL_EditCtrl::CanUndo() const {
+ return !IsReadOnly() && m_pEdit->CanUndo();
}
-FX_BOOL CPWL_EditCtrl::CanRedo() const
-{
- return !IsReadOnly() && m_pEdit->CanRedo();
+FX_BOOL CPWL_EditCtrl::CanRedo() const {
+ return !IsReadOnly() && m_pEdit->CanRedo();
}
-void CPWL_EditCtrl::Redo()
-{
- if (CanRedo())
- m_pEdit->Redo();
+void CPWL_EditCtrl::Redo() {
+ if (CanRedo())
+ m_pEdit->Redo();
}
-void CPWL_EditCtrl::Undo()
-{
- if (CanUndo())
- m_pEdit->Undo();
+void CPWL_EditCtrl::Undo() {
+ if (CanUndo())
+ m_pEdit->Undo();
}
-void CPWL_EditCtrl::IOnSetScrollInfoY(FX_FLOAT fPlateMin, FX_FLOAT fPlateMax,
- FX_FLOAT fContentMin, FX_FLOAT fContentMax,
- FX_FLOAT fSmallStep, FX_FLOAT fBigStep)
-{
- PWL_SCROLL_INFO Info;
+void CPWL_EditCtrl::IOnSetScrollInfoY(FX_FLOAT fPlateMin,
+ FX_FLOAT fPlateMax,
+ FX_FLOAT fContentMin,
+ FX_FLOAT fContentMax,
+ FX_FLOAT fSmallStep,
+ FX_FLOAT fBigStep) {
+ PWL_SCROLL_INFO Info;
- Info.fPlateWidth = fPlateMax - fPlateMin;
- Info.fContentMin = fContentMin;
- Info.fContentMax = fContentMax;
- Info.fSmallStep = fSmallStep;
- Info.fBigStep = fBigStep;
+ Info.fPlateWidth = fPlateMax - fPlateMin;
+ Info.fContentMin = fContentMin;
+ Info.fContentMax = fContentMax;
+ Info.fSmallStep = fSmallStep;
+ Info.fBigStep = fBigStep;
- OnNotify(this,PNM_SETSCROLLINFO,SBT_VSCROLL,(intptr_t)&Info);
+ OnNotify(this, PNM_SETSCROLLINFO, SBT_VSCROLL, (intptr_t)&Info);
- if (IsFloatBigger(Info.fPlateWidth,Info.fContentMax-Info.fContentMin)
- || IsFloatEqual(Info.fPlateWidth,Info.fContentMax-Info.fContentMin))
- {
- ShowVScrollBar(FALSE);
- }
- else
- {
- ShowVScrollBar(TRUE);
- }
+ if (IsFloatBigger(Info.fPlateWidth, Info.fContentMax - Info.fContentMin) ||
+ IsFloatEqual(Info.fPlateWidth, Info.fContentMax - Info.fContentMin)) {
+ ShowVScrollBar(FALSE);
+ } else {
+ ShowVScrollBar(TRUE);
+ }
}
-void CPWL_EditCtrl::IOnSetScrollPosY(FX_FLOAT fy)
-{
- OnNotify(this, PNM_SETSCROLLPOS,SBT_VSCROLL, (intptr_t)&fy);
+void CPWL_EditCtrl::IOnSetScrollPosY(FX_FLOAT fy) {
+ OnNotify(this, PNM_SETSCROLLPOS, SBT_VSCROLL, (intptr_t)&fy);
}
-void CPWL_EditCtrl::IOnSetCaret(FX_BOOL bVisible, const CPDF_Point & ptHead, const CPDF_Point & ptFoot, const CPVT_WordPlace& place)
-{
- PWL_CARET_INFO cInfo;
- cInfo.bVisible = bVisible;
- cInfo.ptHead = ptHead;
- cInfo.ptFoot = ptFoot;
+void CPWL_EditCtrl::IOnSetCaret(FX_BOOL bVisible,
+ const CPDF_Point& ptHead,
+ const CPDF_Point& ptFoot,
+ const CPVT_WordPlace& place) {
+ PWL_CARET_INFO cInfo;
+ cInfo.bVisible = bVisible;
+ cInfo.ptHead = ptHead;
+ cInfo.ptFoot = ptFoot;
- OnNotify(this, PNM_SETCARETINFO, (intptr_t)&cInfo, (intptr_t)NULL);
+ OnNotify(this, PNM_SETCARETINFO, (intptr_t)&cInfo, (intptr_t)NULL);
}
-void CPWL_EditCtrl::IOnCaretChange(const CPVT_SecProps & secProps, const CPVT_WordProps & wordProps)
-{
-}
+void CPWL_EditCtrl::IOnCaretChange(const CPVT_SecProps& secProps,
+ const CPVT_WordProps& wordProps) {}
-void CPWL_EditCtrl::IOnContentChange(const CPDF_Rect& rcContent)
-{
- if (IsValid())
- {
- if (m_pEditNotify)
- {
- m_pEditNotify->OnContentChange(rcContent);
- }
+void CPWL_EditCtrl::IOnContentChange(const CPDF_Rect& rcContent) {
+ if (IsValid()) {
+ if (m_pEditNotify) {
+ m_pEditNotify->OnContentChange(rcContent);
}
+ }
}
-void CPWL_EditCtrl::IOnInvalidateRect(CPDF_Rect * pRect)
-{
- InvalidateRect(pRect);
+void CPWL_EditCtrl::IOnInvalidateRect(CPDF_Rect* pRect) {
+ InvalidateRect(pRect);
}
-int32_t CPWL_EditCtrl::GetCharSet() const
-{
- return m_nCharSet < 0 ? DEFAULT_CHARSET : m_nCharSet;
+int32_t CPWL_EditCtrl::GetCharSet() const {
+ return m_nCharSet < 0 ? DEFAULT_CHARSET : m_nCharSet;
}
-void CPWL_EditCtrl::GetTextRange(const CPDF_Rect& rect, int32_t & nStartChar, int32_t & nEndChar) const
-{
- nStartChar = m_pEdit->WordPlaceToWordIndex(m_pEdit->SearchWordPlace(CPDF_Point(rect.left, rect.top)));
- nEndChar = m_pEdit->WordPlaceToWordIndex(m_pEdit->SearchWordPlace(CPDF_Point(rect.right, rect.bottom)));
+void CPWL_EditCtrl::GetTextRange(const CPDF_Rect& rect,
+ int32_t& nStartChar,
+ int32_t& nEndChar) const {
+ nStartChar = m_pEdit->WordPlaceToWordIndex(
+ m_pEdit->SearchWordPlace(CPDF_Point(rect.left, rect.top)));
+ nEndChar = m_pEdit->WordPlaceToWordIndex(
+ m_pEdit->SearchWordPlace(CPDF_Point(rect.right, rect.bottom)));
}
-CFX_WideString CPWL_EditCtrl::GetText(int32_t & nStartChar, int32_t & nEndChar) const
-{
- CPVT_WordPlace wpStart = m_pEdit->WordIndexToWordPlace(nStartChar);
- CPVT_WordPlace wpEnd = m_pEdit->WordIndexToWordPlace(nEndChar);
- return m_pEdit->GetRangeText(CPVT_WordRange(wpStart, wpEnd));
+CFX_WideString CPWL_EditCtrl::GetText(int32_t& nStartChar,
+ int32_t& nEndChar) const {
+ CPVT_WordPlace wpStart = m_pEdit->WordIndexToWordPlace(nStartChar);
+ CPVT_WordPlace wpEnd = m_pEdit->WordIndexToWordPlace(nEndChar);
+ return m_pEdit->GetRangeText(CPVT_WordRange(wpStart, wpEnd));
}
-void CPWL_EditCtrl::SetReadyToInput()
-{
- if (m_bMouseDown)
- {
- ReleaseCapture();
- m_bMouseDown = FALSE;
- }
+void CPWL_EditCtrl::SetReadyToInput() {
+ if (m_bMouseDown) {
+ ReleaseCapture();
+ m_bMouseDown = FALSE;
+ }
}
diff --git a/fpdfsdk/src/pdfwindow/PWL_FontMap.cpp b/fpdfsdk/src/pdfwindow/PWL_FontMap.cpp
index 50b321dfac..06ddeeb2a2 100644
--- a/fpdfsdk/src/pdfwindow/PWL_FontMap.cpp
+++ b/fpdfsdk/src/pdfwindow/PWL_FontMap.cpp
@@ -8,191 +8,158 @@
#include "../../include/pdfwindow/PWL_Wnd.h"
#include "../../include/pdfwindow/PWL_FontMap.h"
-#define DEFAULT_FONT_NAME "Helvetica"
+#define DEFAULT_FONT_NAME "Helvetica"
/* ------------------------------ CPWL_FontMap ------------------------------ */
-CPWL_FontMap::CPWL_FontMap(IFX_SystemHandler* pSystemHandler) :
- m_pPDFDoc(NULL),
- m_pSystemHandler(pSystemHandler)
-{
- ASSERT(m_pSystemHandler != NULL);
+CPWL_FontMap::CPWL_FontMap(IFX_SystemHandler* pSystemHandler)
+ : m_pPDFDoc(NULL), m_pSystemHandler(pSystemHandler) {
+ ASSERT(m_pSystemHandler != NULL);
}
-CPWL_FontMap::~CPWL_FontMap()
-{
- delete m_pPDFDoc;
- m_pPDFDoc = NULL;
+CPWL_FontMap::~CPWL_FontMap() {
+ delete m_pPDFDoc;
+ m_pPDFDoc = NULL;
- Empty();
+ Empty();
}
-void CPWL_FontMap::SetSystemHandler(IFX_SystemHandler* pSystemHandler)
-{
- m_pSystemHandler = pSystemHandler;
+void CPWL_FontMap::SetSystemHandler(IFX_SystemHandler* pSystemHandler) {
+ m_pSystemHandler = pSystemHandler;
}
-CPDF_Document* CPWL_FontMap::GetDocument()
-{
- if (!m_pPDFDoc)
- {
- if (CPDF_ModuleMgr::Get())
- {
- m_pPDFDoc = new CPDF_Document;
- m_pPDFDoc->CreateNewDoc();
- }
+CPDF_Document* CPWL_FontMap::GetDocument() {
+ if (!m_pPDFDoc) {
+ if (CPDF_ModuleMgr::Get()) {
+ m_pPDFDoc = new CPDF_Document;
+ m_pPDFDoc->CreateNewDoc();
}
+ }
- return m_pPDFDoc;
+ return m_pPDFDoc;
}
-CPDF_Font* CPWL_FontMap::GetPDFFont(int32_t nFontIndex)
-{
- if (nFontIndex >=0 && nFontIndex < m_aData.GetSize())
- {
- if (CPWL_FontMap_Data* pData = m_aData.GetAt(nFontIndex))
- {
- return pData->pFont;
- }
+CPDF_Font* CPWL_FontMap::GetPDFFont(int32_t nFontIndex) {
+ if (nFontIndex >= 0 && nFontIndex < m_aData.GetSize()) {
+ if (CPWL_FontMap_Data* pData = m_aData.GetAt(nFontIndex)) {
+ return pData->pFont;
}
+ }
- return NULL;
-}
-
-CFX_ByteString CPWL_FontMap::GetPDFFontAlias(int32_t nFontIndex)
-{
- if (nFontIndex >=0 && nFontIndex < m_aData.GetSize())
- {
- if (CPWL_FontMap_Data* pData = m_aData.GetAt(nFontIndex))
- {
- return pData->sFontName;
- }
- }
-
- return "";
+ return NULL;
}
-FX_BOOL CPWL_FontMap::KnowWord(int32_t nFontIndex, FX_WORD word)
-{
- if (nFontIndex >=0 && nFontIndex < m_aData.GetSize())
- {
- if (m_aData.GetAt(nFontIndex))
- {
- return CharCodeFromUnicode(nFontIndex, word) >= 0;
- }
+CFX_ByteString CPWL_FontMap::GetPDFFontAlias(int32_t nFontIndex) {
+ if (nFontIndex >= 0 && nFontIndex < m_aData.GetSize()) {
+ if (CPWL_FontMap_Data* pData = m_aData.GetAt(nFontIndex)) {
+ return pData->sFontName;
}
+ }
- return FALSE;
+ return "";
}
-int32_t CPWL_FontMap::GetWordFontIndex(FX_WORD word, int32_t nCharset, int32_t nFontIndex)
-{
- if (nFontIndex > 0)
- {
- if (KnowWord(nFontIndex, word))
- return nFontIndex;
+FX_BOOL CPWL_FontMap::KnowWord(int32_t nFontIndex, FX_WORD word) {
+ if (nFontIndex >= 0 && nFontIndex < m_aData.GetSize()) {
+ if (m_aData.GetAt(nFontIndex)) {
+ return CharCodeFromUnicode(nFontIndex, word) >= 0;
}
- else
- {
- if (const CPWL_FontMap_Data* pData = GetFontMapData(0))
- {
- if (nCharset == DEFAULT_CHARSET ||
- pData->nCharset == SYMBOL_CHARSET ||
- nCharset == pData->nCharset)
- {
- if (KnowWord(0, word))
- return 0;
- }
- }
+ }
+
+ return FALSE;
+}
+
+int32_t CPWL_FontMap::GetWordFontIndex(FX_WORD word,
+ int32_t nCharset,
+ int32_t nFontIndex) {
+ if (nFontIndex > 0) {
+ if (KnowWord(nFontIndex, word))
+ return nFontIndex;
+ } else {
+ if (const CPWL_FontMap_Data* pData = GetFontMapData(0)) {
+ if (nCharset == DEFAULT_CHARSET || pData->nCharset == SYMBOL_CHARSET ||
+ nCharset == pData->nCharset) {
+ if (KnowWord(0, word))
+ return 0;
+ }
}
-
- int32_t nNewFontIndex = GetFontIndex(GetNativeFontName(nCharset), nCharset, TRUE);
- if (nNewFontIndex >= 0)
- {
- if (KnowWord(nNewFontIndex, word))
- return nNewFontIndex;
- }
- nNewFontIndex = GetFontIndex("Arial Unicode MS", DEFAULT_CHARSET, FALSE);
- if (nNewFontIndex >= 0)
- {
- if (KnowWord(nNewFontIndex, word))
- return nNewFontIndex;
- }
- return -1;
-}
-
-int32_t CPWL_FontMap::CharCodeFromUnicode(int32_t nFontIndex, FX_WORD word)
-{
- if (CPWL_FontMap_Data* pData = m_aData.GetAt(nFontIndex))
- {
- if (pData->pFont)
- {
- if (pData->pFont->IsUnicodeCompatible())
- {
- int nCharCode = pData->pFont->CharCodeFromUnicode(word);
- pData->pFont->GlyphFromCharCode(nCharCode);
- return nCharCode;
- }
- if (word < 0xFF)
- return word;
- }
+ }
+
+ int32_t nNewFontIndex =
+ GetFontIndex(GetNativeFontName(nCharset), nCharset, TRUE);
+ if (nNewFontIndex >= 0) {
+ if (KnowWord(nNewFontIndex, word))
+ return nNewFontIndex;
+ }
+ nNewFontIndex = GetFontIndex("Arial Unicode MS", DEFAULT_CHARSET, FALSE);
+ if (nNewFontIndex >= 0) {
+ if (KnowWord(nNewFontIndex, word))
+ return nNewFontIndex;
+ }
+ return -1;
+}
+
+int32_t CPWL_FontMap::CharCodeFromUnicode(int32_t nFontIndex, FX_WORD word) {
+ if (CPWL_FontMap_Data* pData = m_aData.GetAt(nFontIndex)) {
+ if (pData->pFont) {
+ if (pData->pFont->IsUnicodeCompatible()) {
+ int nCharCode = pData->pFont->CharCodeFromUnicode(word);
+ pData->pFont->GlyphFromCharCode(nCharCode);
+ return nCharCode;
+ }
+ if (word < 0xFF)
+ return word;
}
- return -1;
+ }
+ return -1;
}
-CFX_ByteString CPWL_FontMap::GetNativeFontName(int32_t nCharset)
-{
- //searching native font is slow, so we must save time
- for (int32_t i=0,sz=m_aNativeFont.GetSize(); i<sz; i++)
- {
- if (CPWL_FontMap_Native* pData = m_aNativeFont.GetAt(i))
- {
- if (pData->nCharset == nCharset)
- return pData->sFontName;
- }
+CFX_ByteString CPWL_FontMap::GetNativeFontName(int32_t nCharset) {
+ // searching native font is slow, so we must save time
+ for (int32_t i = 0, sz = m_aNativeFont.GetSize(); i < sz; i++) {
+ if (CPWL_FontMap_Native* pData = m_aNativeFont.GetAt(i)) {
+ if (pData->nCharset == nCharset)
+ return pData->sFontName;
}
+ }
- CFX_ByteString sNew = GetNativeFont(nCharset);
+ CFX_ByteString sNew = GetNativeFont(nCharset);
- if (!sNew.IsEmpty())
- {
- CPWL_FontMap_Native* pNewData = new CPWL_FontMap_Native;
- pNewData->nCharset = nCharset;
- pNewData->sFontName = sNew;
+ if (!sNew.IsEmpty()) {
+ CPWL_FontMap_Native* pNewData = new CPWL_FontMap_Native;
+ pNewData->nCharset = nCharset;
+ pNewData->sFontName = sNew;
- m_aNativeFont.Add(pNewData);
- }
+ m_aNativeFont.Add(pNewData);
+ }
- return sNew;
+ return sNew;
}
-void CPWL_FontMap::Empty()
-{
- {
- for (int32_t i=0, sz=m_aData.GetSize(); i<sz; i++)
- delete m_aData.GetAt(i);
+void CPWL_FontMap::Empty() {
+ {
+ for (int32_t i = 0, sz = m_aData.GetSize(); i < sz; i++)
+ delete m_aData.GetAt(i);
- m_aData.RemoveAll();
- }
- {
- for (int32_t i=0, sz=m_aNativeFont.GetSize(); i<sz; i++)
- delete m_aNativeFont.GetAt(i);
+ m_aData.RemoveAll();
+ }
+ {
+ for (int32_t i = 0, sz = m_aNativeFont.GetSize(); i < sz; i++)
+ delete m_aNativeFont.GetAt(i);
- m_aNativeFont.RemoveAll();
- }
+ m_aNativeFont.RemoveAll();
+ }
}
-void CPWL_FontMap::Initial(const FX_CHAR* fontname)
-{
- CFX_ByteString sFontName = fontname;
+void CPWL_FontMap::Initial(const FX_CHAR* fontname) {
+ CFX_ByteString sFontName = fontname;
- if (sFontName.IsEmpty())
- sFontName = DEFAULT_FONT_NAME;
+ if (sFontName.IsEmpty())
+ sFontName = DEFAULT_FONT_NAME;
- GetFontIndex(sFontName, ANSI_CHARSET, FALSE);
+ GetFontIndex(sFontName, ANSI_CHARSET, FALSE);
}
-
/*
List of currently supported standard fonts:
Courier, Courier-Bold, Courier-BoldOblique, Courier-Oblique
@@ -201,368 +168,350 @@ Times-Roman, Times-Bold, Times-Italic, Times-BoldItalic
Symbol, ZapfDingbats
*/
-const char* g_sDEStandardFontName[] = {"Courier", "Courier-Bold", "Courier-BoldOblique", "Courier-Oblique",
- "Helvetica", "Helvetica-Bold", "Helvetica-BoldOblique", "Helvetica-Oblique",
- "Times-Roman", "Times-Bold", "Times-Italic", "Times-BoldItalic",
- "Symbol", "ZapfDingbats"};
-
-FX_BOOL CPWL_FontMap::IsStandardFont(const CFX_ByteString& sFontName)
-{
- for (int32_t i=0; i<14; i++)
- {
- if (sFontName == g_sDEStandardFontName[i])
- return TRUE;
+const char* g_sDEStandardFontName[] = {"Courier",
+ "Courier-Bold",
+ "Courier-BoldOblique",
+ "Courier-Oblique",
+ "Helvetica",
+ "Helvetica-Bold",
+ "Helvetica-BoldOblique",
+ "Helvetica-Oblique",
+ "Times-Roman",
+ "Times-Bold",
+ "Times-Italic",
+ "Times-BoldItalic",
+ "Symbol",
+ "ZapfDingbats"};
+
+FX_BOOL CPWL_FontMap::IsStandardFont(const CFX_ByteString& sFontName) {
+ for (int32_t i = 0; i < 14; i++) {
+ if (sFontName == g_sDEStandardFontName[i])
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+int32_t CPWL_FontMap::FindFont(const CFX_ByteString& sFontName,
+ int32_t nCharset) {
+ for (int32_t i = 0, sz = m_aData.GetSize(); i < sz; i++) {
+ if (CPWL_FontMap_Data* pData = m_aData.GetAt(i)) {
+ if (nCharset == DEFAULT_CHARSET || nCharset == pData->nCharset) {
+ if (sFontName.IsEmpty() || pData->sFontName == sFontName)
+ return i;
+ }
}
+ }
- return FALSE;
+ return -1;
}
-int32_t CPWL_FontMap::FindFont(const CFX_ByteString& sFontName, int32_t nCharset)
-{
- for (int32_t i=0,sz=m_aData.GetSize(); i<sz; i++)
- {
- if (CPWL_FontMap_Data* pData = m_aData.GetAt(i))
- {
- if (nCharset == DEFAULT_CHARSET || nCharset == pData->nCharset)
- {
- if (sFontName.IsEmpty() || pData->sFontName == sFontName)
- return i;
- }
- }
- }
+int32_t CPWL_FontMap::GetFontIndex(const CFX_ByteString& sFontName,
+ int32_t nCharset,
+ FX_BOOL bFind) {
+ int32_t nFontIndex = FindFont(EncodeFontAlias(sFontName, nCharset), nCharset);
+ if (nFontIndex >= 0)
+ return nFontIndex;
- return -1;
-}
+ CFX_ByteString sAlias;
+ CPDF_Font* pFont = NULL;
+ if (bFind)
+ pFont = FindFontSameCharset(sAlias, nCharset);
-int32_t CPWL_FontMap::GetFontIndex(const CFX_ByteString& sFontName, int32_t nCharset, FX_BOOL bFind)
-{
- int32_t nFontIndex = FindFont(EncodeFontAlias(sFontName, nCharset), nCharset);
- if (nFontIndex >= 0)
- return nFontIndex;
-
- CFX_ByteString sAlias;
- CPDF_Font* pFont = NULL;
- if (bFind)
- pFont = FindFontSameCharset(sAlias, nCharset);
-
- if (!pFont)
- {
- CFX_ByteString sTemp = sFontName;
- pFont = AddFontToDocument(GetDocument(), sTemp, nCharset);
- sAlias = EncodeFontAlias(sTemp, nCharset);
- }
- AddedFont(pFont, sAlias);
- return AddFontData(pFont, sAlias, nCharset);
+ if (!pFont) {
+ CFX_ByteString sTemp = sFontName;
+ pFont = AddFontToDocument(GetDocument(), sTemp, nCharset);
+ sAlias = EncodeFontAlias(sTemp, nCharset);
+ }
+ AddedFont(pFont, sAlias);
+ return AddFontData(pFont, sAlias, nCharset);
}
-int32_t CPWL_FontMap::GetPWLFontIndex(FX_WORD word, int32_t nCharset)
-{
- int32_t nFind = -1;
-
- for (int32_t i=0,sz=m_aData.GetSize(); i<sz; i++)
- {
- if (CPWL_FontMap_Data* pData = m_aData.GetAt(i))
- {
- if (pData->nCharset == nCharset)
- {
- nFind = i;
- break;
- }
- }
+int32_t CPWL_FontMap::GetPWLFontIndex(FX_WORD word, int32_t nCharset) {
+ int32_t nFind = -1;
+
+ for (int32_t i = 0, sz = m_aData.GetSize(); i < sz; i++) {
+ if (CPWL_FontMap_Data* pData = m_aData.GetAt(i)) {
+ if (pData->nCharset == nCharset) {
+ nFind = i;
+ break;
+ }
}
+ }
- CPDF_Font* pNewFont = GetPDFFont(nFind);
+ CPDF_Font* pNewFont = GetPDFFont(nFind);
- if (!pNewFont) return -1;
+ if (!pNewFont)
+ return -1;
- /*
- if (CPDF_Font* pFont = GetPDFFont(nFind))
- {
- PWLFont.AddWordToFontDict(pFontDict, word);
- }
- */
+ /*
+ if (CPDF_Font* pFont = GetPDFFont(nFind))
+ {
+ PWLFont.AddWordToFontDict(pFontDict, word);
+ }
+ */
- CFX_ByteString sAlias = EncodeFontAlias("Arial_Chrome", nCharset);
- AddedFont(pNewFont, sAlias);
+ CFX_ByteString sAlias = EncodeFontAlias("Arial_Chrome", nCharset);
+ AddedFont(pNewFont, sAlias);
- return AddFontData(pNewFont, sAlias, nCharset);
+ return AddFontData(pNewFont, sAlias, nCharset);
}
-CPDF_Font* CPWL_FontMap::FindFontSameCharset(CFX_ByteString& sFontAlias, int32_t nCharset)
-{
- return NULL;
+CPDF_Font* CPWL_FontMap::FindFontSameCharset(CFX_ByteString& sFontAlias,
+ int32_t nCharset) {
+ return NULL;
}
-int32_t CPWL_FontMap::AddFontData(CPDF_Font* pFont, const CFX_ByteString& sFontAlias, int32_t nCharset)
-{
- CPWL_FontMap_Data* pNewData = new CPWL_FontMap_Data;
- pNewData->pFont = pFont;
- pNewData->sFontName = sFontAlias;
- pNewData->nCharset = nCharset;
+int32_t CPWL_FontMap::AddFontData(CPDF_Font* pFont,
+ const CFX_ByteString& sFontAlias,
+ int32_t nCharset) {
+ CPWL_FontMap_Data* pNewData = new CPWL_FontMap_Data;
+ pNewData->pFont = pFont;
+ pNewData->sFontName = sFontAlias;
+ pNewData->nCharset = nCharset;
- m_aData.Add(pNewData);
+ m_aData.Add(pNewData);
- return m_aData.GetSize() -1;
+ return m_aData.GetSize() - 1;
}
-void CPWL_FontMap::AddedFont(CPDF_Font* pFont, const CFX_ByteString& sFontAlias)
-{
-}
+void CPWL_FontMap::AddedFont(CPDF_Font* pFont,
+ const CFX_ByteString& sFontAlias) {}
-CFX_ByteString CPWL_FontMap::GetFontName(int32_t nFontIndex)
-{
- if (nFontIndex >=0 && nFontIndex < m_aData.GetSize())
- {
- if (CPWL_FontMap_Data* pData = m_aData.GetAt(nFontIndex))
- {
- return pData->sFontName;
- }
+CFX_ByteString CPWL_FontMap::GetFontName(int32_t nFontIndex) {
+ if (nFontIndex >= 0 && nFontIndex < m_aData.GetSize()) {
+ if (CPWL_FontMap_Data* pData = m_aData.GetAt(nFontIndex)) {
+ return pData->sFontName;
}
+ }
- return "";
+ return "";
}
-CFX_ByteString CPWL_FontMap::GetNativeFont(int32_t nCharset)
-{
-
- if (nCharset == DEFAULT_CHARSET)
- nCharset = GetNativeCharset();
+CFX_ByteString CPWL_FontMap::GetNativeFont(int32_t nCharset) {
+ if (nCharset == DEFAULT_CHARSET)
+ nCharset = GetNativeCharset();
- CFX_ByteString sFontName = GetDefaultFontByCharset(nCharset);
- if (m_pSystemHandler)
- {
- if (m_pSystemHandler->FindNativeTrueTypeFont(nCharset, sFontName))
- return sFontName;
+ CFX_ByteString sFontName = GetDefaultFontByCharset(nCharset);
+ if (m_pSystemHandler) {
+ if (m_pSystemHandler->FindNativeTrueTypeFont(nCharset, sFontName))
+ return sFontName;
- sFontName = m_pSystemHandler->GetNativeTrueTypeFont(nCharset);
- }
- return sFontName;
+ sFontName = m_pSystemHandler->GetNativeTrueTypeFont(nCharset);
+ }
+ return sFontName;
}
-CPDF_Font* CPWL_FontMap::AddFontToDocument(CPDF_Document* pDoc, CFX_ByteString& sFontName, uint8_t nCharset)
-{
- if (IsStandardFont(sFontName))
- return AddStandardFont(pDoc, sFontName);
-
- return AddSystemFont(pDoc, sFontName, nCharset);
-}
-
-CPDF_Font* CPWL_FontMap::AddStandardFont(CPDF_Document* pDoc, CFX_ByteString& sFontName)
-{
- if (!pDoc) return NULL;
-
- CPDF_Font* pFont = NULL;
-
- if (sFontName == "ZapfDingbats")
- pFont = pDoc->AddStandardFont(sFontName, NULL);
- else
- {
- CPDF_FontEncoding fe(PDFFONT_ENCODING_WINANSI);
- pFont = pDoc->AddStandardFont(sFontName, &fe);
- }
+CPDF_Font* CPWL_FontMap::AddFontToDocument(CPDF_Document* pDoc,
+ CFX_ByteString& sFontName,
+ uint8_t nCharset) {
+ if (IsStandardFont(sFontName))
+ return AddStandardFont(pDoc, sFontName);
- return pFont;
+ return AddSystemFont(pDoc, sFontName, nCharset);
}
-CPDF_Font* CPWL_FontMap::AddSystemFont(CPDF_Document* pDoc, CFX_ByteString& sFontName, uint8_t nCharset)
-{
- if (!pDoc) return NULL;
-
- if (sFontName.IsEmpty()) sFontName = GetNativeFont(nCharset);
- if (nCharset == DEFAULT_CHARSET) nCharset = GetNativeCharset();
-
- if (m_pSystemHandler)
- return m_pSystemHandler->AddNativeTrueTypeFontToPDF(pDoc, sFontName, nCharset);
-
+CPDF_Font* CPWL_FontMap::AddStandardFont(CPDF_Document* pDoc,
+ CFX_ByteString& sFontName) {
+ if (!pDoc)
return NULL;
-}
-CFX_ByteString CPWL_FontMap::EncodeFontAlias(const CFX_ByteString& sFontName, int32_t nCharset)
-{
- CFX_ByteString sPostfix;
- sPostfix.Format("_%02X", nCharset);
- return EncodeFontAlias(sFontName) + sPostfix;
-}
+ CPDF_Font* pFont = NULL;
-CFX_ByteString CPWL_FontMap::EncodeFontAlias(const CFX_ByteString& sFontName)
-{
- CFX_ByteString sRet = sFontName;
- sRet.Remove(' ');
- return sRet;
-}
+ if (sFontName == "ZapfDingbats")
+ pFont = pDoc->AddStandardFont(sFontName, NULL);
+ else {
+ CPDF_FontEncoding fe(PDFFONT_ENCODING_WINANSI);
+ pFont = pDoc->AddStandardFont(sFontName, &fe);
+ }
-int32_t CPWL_FontMap::GetFontMapCount() const
-{
- return m_aData.GetSize();
+ return pFont;
}
-const CPWL_FontMap_Data* CPWL_FontMap::GetFontMapData(int32_t nIndex) const
-{
- if (nIndex >=0 && nIndex < m_aData.GetSize())
- {
- return m_aData.GetAt(nIndex);
- }
-
+CPDF_Font* CPWL_FontMap::AddSystemFont(CPDF_Document* pDoc,
+ CFX_ByteString& sFontName,
+ uint8_t nCharset) {
+ if (!pDoc)
return NULL;
-}
-int32_t CPWL_FontMap::GetNativeCharset()
-{
- uint8_t nCharset = ANSI_CHARSET;
- int32_t iCodePage = FXSYS_GetACP();
- switch (iCodePage)
- {
- case 932://Japan
- nCharset = SHIFTJIS_CHARSET;
- break;
- case 936://Chinese (PRC, Singapore)
- nCharset = GB2312_CHARSET;
- break;
- case 950://Chinese (Taiwan; Hong Kong SAR, PRC)
- nCharset = GB2312_CHARSET;
- break;
- case 1252://Windows 3.1 Latin 1 (US, Western Europe)
- nCharset = ANSI_CHARSET;
- break;
- case 874://Thai
- nCharset = THAI_CHARSET;
- break;
- case 949://Korean
- nCharset = HANGUL_CHARSET;
- break;
- case 1200://Unicode (BMP of ISO 10646)
- nCharset = ANSI_CHARSET;
- break;
- case 1250://Windows 3.1 Eastern European
- nCharset = EASTEUROPE_CHARSET;
- break;
- case 1251://Windows 3.1 Cyrillic
- nCharset = RUSSIAN_CHARSET;
- break;
- case 1253://Windows 3.1 Greek
- nCharset = GREEK_CHARSET;
- break;
- case 1254://Windows 3.1 Turkish
- nCharset = TURKISH_CHARSET;
- break;
- case 1255://Hebrew
- nCharset = HEBREW_CHARSET;
- break;
- case 1256://Arabic
- nCharset = ARABIC_CHARSET;
- break;
- case 1257://Baltic
- nCharset = BALTIC_CHARSET;
- break;
- case 1258://Vietnamese
- nCharset = VIETNAMESE_CHARSET;
- break;
- case 1361://Korean(Johab)
- nCharset = JOHAB_CHARSET;
- break;
- }
- return nCharset;
+ if (sFontName.IsEmpty())
+ sFontName = GetNativeFont(nCharset);
+ if (nCharset == DEFAULT_CHARSET)
+ nCharset = GetNativeCharset();
+
+ if (m_pSystemHandler)
+ return m_pSystemHandler->AddNativeTrueTypeFontToPDF(pDoc, sFontName,
+ nCharset);
+
+ return NULL;
+}
+
+CFX_ByteString CPWL_FontMap::EncodeFontAlias(const CFX_ByteString& sFontName,
+ int32_t nCharset) {
+ CFX_ByteString sPostfix;
+ sPostfix.Format("_%02X", nCharset);
+ return EncodeFontAlias(sFontName) + sPostfix;
+}
+
+CFX_ByteString CPWL_FontMap::EncodeFontAlias(const CFX_ByteString& sFontName) {
+ CFX_ByteString sRet = sFontName;
+ sRet.Remove(' ');
+ return sRet;
+}
+
+int32_t CPWL_FontMap::GetFontMapCount() const {
+ return m_aData.GetSize();
+}
+
+const CPWL_FontMap_Data* CPWL_FontMap::GetFontMapData(int32_t nIndex) const {
+ if (nIndex >= 0 && nIndex < m_aData.GetSize()) {
+ return m_aData.GetAt(nIndex);
+ }
+
+ return NULL;
+}
+
+int32_t CPWL_FontMap::GetNativeCharset() {
+ uint8_t nCharset = ANSI_CHARSET;
+ int32_t iCodePage = FXSYS_GetACP();
+ switch (iCodePage) {
+ case 932: // Japan
+ nCharset = SHIFTJIS_CHARSET;
+ break;
+ case 936: // Chinese (PRC, Singapore)
+ nCharset = GB2312_CHARSET;
+ break;
+ case 950: // Chinese (Taiwan; Hong Kong SAR, PRC)
+ nCharset = GB2312_CHARSET;
+ break;
+ case 1252: // Windows 3.1 Latin 1 (US, Western Europe)
+ nCharset = ANSI_CHARSET;
+ break;
+ case 874: // Thai
+ nCharset = THAI_CHARSET;
+ break;
+ case 949: // Korean
+ nCharset = HANGUL_CHARSET;
+ break;
+ case 1200: // Unicode (BMP of ISO 10646)
+ nCharset = ANSI_CHARSET;
+ break;
+ case 1250: // Windows 3.1 Eastern European
+ nCharset = EASTEUROPE_CHARSET;
+ break;
+ case 1251: // Windows 3.1 Cyrillic
+ nCharset = RUSSIAN_CHARSET;
+ break;
+ case 1253: // Windows 3.1 Greek
+ nCharset = GREEK_CHARSET;
+ break;
+ case 1254: // Windows 3.1 Turkish
+ nCharset = TURKISH_CHARSET;
+ break;
+ case 1255: // Hebrew
+ nCharset = HEBREW_CHARSET;
+ break;
+ case 1256: // Arabic
+ nCharset = ARABIC_CHARSET;
+ break;
+ case 1257: // Baltic
+ nCharset = BALTIC_CHARSET;
+ break;
+ case 1258: // Vietnamese
+ nCharset = VIETNAMESE_CHARSET;
+ break;
+ case 1361: // Korean(Johab)
+ nCharset = JOHAB_CHARSET;
+ break;
+ }
+ return nCharset;
}
const CPWL_FontMap::CharsetFontMap CPWL_FontMap::defaultTTFMap[] = {
- { ANSI_CHARSET, "Helvetica" },
- { GB2312_CHARSET, "SimSun" },
- { CHINESEBIG5_CHARSET, "MingLiU" },
- { SHIFTJIS_CHARSET, "MS Gothic" },
- { HANGUL_CHARSET, "Batang" },
- { RUSSIAN_CHARSET, "Arial" },
-#if _FXM_PLATFORM_ == _FXM_PLATFORM_LINUX_ || _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
- { EASTEUROPE_CHARSET, "Arial" },
+ {ANSI_CHARSET, "Helvetica"}, {GB2312_CHARSET, "SimSun"},
+ {CHINESEBIG5_CHARSET, "MingLiU"}, {SHIFTJIS_CHARSET, "MS Gothic"},
+ {HANGUL_CHARSET, "Batang"}, {RUSSIAN_CHARSET, "Arial"},
+#if _FXM_PLATFORM_ == _FXM_PLATFORM_LINUX_ || \
+ _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
+ {EASTEUROPE_CHARSET, "Arial"},
#else
- { EASTEUROPE_CHARSET, "Tahoma" },
+ {EASTEUROPE_CHARSET, "Tahoma"},
#endif
- { ARABIC_CHARSET, "Arial" },
- { -1, NULL }
-};
-
-CFX_ByteString CPWL_FontMap::GetDefaultFontByCharset(int32_t nCharset)
-{
- int i = 0;
- while (defaultTTFMap[i].charset != -1) {
- if (nCharset == defaultTTFMap[i].charset)
- return defaultTTFMap[i].fontname;
- ++i;
- }
- return "";
-}
+ {ARABIC_CHARSET, "Arial"}, {-1, NULL}};
+
+CFX_ByteString CPWL_FontMap::GetDefaultFontByCharset(int32_t nCharset) {
+ int i = 0;
+ while (defaultTTFMap[i].charset != -1) {
+ if (nCharset == defaultTTFMap[i].charset)
+ return defaultTTFMap[i].fontname;
+ ++i;
+ }
+ return "";
+}
+
+int32_t CPWL_FontMap::CharSetFromUnicode(FX_WORD word, int32_t nOldCharset) {
+ if (m_pSystemHandler && (-1 != m_pSystemHandler->GetCharSet()))
+ return m_pSystemHandler->GetCharSet();
+ // to avoid CJK Font to show ASCII
+ if (word < 0x7F)
+ return ANSI_CHARSET;
+ // follow the old charset
+ if (nOldCharset != DEFAULT_CHARSET)
+ return nOldCharset;
-int32_t CPWL_FontMap::CharSetFromUnicode(FX_WORD word, int32_t nOldCharset)
-{
- if(m_pSystemHandler && (-1 != m_pSystemHandler->GetCharSet()))
- return m_pSystemHandler->GetCharSet();
- //to avoid CJK Font to show ASCII
- if (word < 0x7F) return ANSI_CHARSET;
- //follow the old charset
- if (nOldCharset != DEFAULT_CHARSET) return nOldCharset;
-
- //find new charset
- if ((word >= 0x4E00 && word <= 0x9FA5) ||
- (word >= 0xE7C7 && word <= 0xE7F3) ||
- (word >= 0x3000 && word <= 0x303F) ||
- (word >= 0x2000 && word <= 0x206F))
- {
- return GB2312_CHARSET;
- }
+ // find new charset
+ if ((word >= 0x4E00 && word <= 0x9FA5) ||
+ (word >= 0xE7C7 && word <= 0xE7F3) ||
+ (word >= 0x3000 && word <= 0x303F) ||
+ (word >= 0x2000 && word <= 0x206F)) {
+ return GB2312_CHARSET;
+ }
- if (((word >= 0x3040) && (word <= 0x309F)) ||
- ((word >= 0x30A0) && (word <= 0x30FF)) ||
- ((word >= 0x31F0) && (word <= 0x31FF)) ||
- ((word >= 0xFF00) && (word <= 0xFFEF)) )
- {
- return SHIFTJIS_CHARSET;
- }
+ if (((word >= 0x3040) && (word <= 0x309F)) ||
+ ((word >= 0x30A0) && (word <= 0x30FF)) ||
+ ((word >= 0x31F0) && (word <= 0x31FF)) ||
+ ((word >= 0xFF00) && (word <= 0xFFEF))) {
+ return SHIFTJIS_CHARSET;
+ }
- if (((word >= 0xAC00) && (word <= 0xD7AF)) ||
- ((word >= 0x1100) && (word <= 0x11FF)) ||
- ((word >= 0x3130) && (word <= 0x318F)))
- {
- return HANGUL_CHARSET;
- }
+ if (((word >= 0xAC00) && (word <= 0xD7AF)) ||
+ ((word >= 0x1100) && (word <= 0x11FF)) ||
+ ((word >= 0x3130) && (word <= 0x318F))) {
+ return HANGUL_CHARSET;
+ }
- if (word >= 0x0E00 && word <= 0x0E7F)
- return THAI_CHARSET;
+ if (word >= 0x0E00 && word <= 0x0E7F)
+ return THAI_CHARSET;
- if ((word >= 0x0370 && word <= 0x03FF) ||
- (word >= 0x1F00 && word <= 0x1FFF))
- return GREEK_CHARSET;
+ if ((word >= 0x0370 && word <= 0x03FF) || (word >= 0x1F00 && word <= 0x1FFF))
+ return GREEK_CHARSET;
- if ((word >= 0x0600 && word <= 0x06FF) ||
- (word >= 0xFB50 && word <= 0xFEFC))
- return ARABIC_CHARSET;
+ if ((word >= 0x0600 && word <= 0x06FF) || (word >= 0xFB50 && word <= 0xFEFC))
+ return ARABIC_CHARSET;
- if (word >= 0x0590 && word <= 0x05FF)
- return HEBREW_CHARSET;
+ if (word >= 0x0590 && word <= 0x05FF)
+ return HEBREW_CHARSET;
- if (word >= 0x0400 && word <= 0x04FF)
- return RUSSIAN_CHARSET;
+ if (word >= 0x0400 && word <= 0x04FF)
+ return RUSSIAN_CHARSET;
- if (word >= 0x0100 && word <= 0x024F)
- return EASTEUROPE_CHARSET;
+ if (word >= 0x0100 && word <= 0x024F)
+ return EASTEUROPE_CHARSET;
- if (word >= 0x1E00 && word <= 0x1EFF)
- return VIETNAMESE_CHARSET;
+ if (word >= 0x1E00 && word <= 0x1EFF)
+ return VIETNAMESE_CHARSET;
- return ANSI_CHARSET;
+ return ANSI_CHARSET;
}
/* ------------------------ CPWL_DocFontMap ------------------------ */
-CPWL_DocFontMap::CPWL_DocFontMap(IFX_SystemHandler* pSystemHandler, CPDF_Document* pAttachedDoc)
- : CPWL_FontMap(pSystemHandler),
- m_pAttachedDoc(pAttachedDoc)
-{
-}
+CPWL_DocFontMap::CPWL_DocFontMap(IFX_SystemHandler* pSystemHandler,
+ CPDF_Document* pAttachedDoc)
+ : CPWL_FontMap(pSystemHandler), m_pAttachedDoc(pAttachedDoc) {}
-CPWL_DocFontMap::~CPWL_DocFontMap()
-{
-}
+CPWL_DocFontMap::~CPWL_DocFontMap() {}
-CPDF_Document* CPWL_DocFontMap::GetDocument()
-{
- return m_pAttachedDoc;
+CPDF_Document* CPWL_DocFontMap::GetDocument() {
+ return m_pAttachedDoc;
}
diff --git a/fpdfsdk/src/pdfwindow/PWL_Icon.cpp b/fpdfsdk/src/pdfwindow/PWL_Icon.cpp
index 71174dfb0a..29e0aa86f5 100644
--- a/fpdfsdk/src/pdfwindow/PWL_Icon.cpp
+++ b/fpdfsdk/src/pdfwindow/PWL_Icon.cpp
@@ -9,254 +9,222 @@
#include "../../include/pdfwindow/PWL_Icon.h"
#include "../../include/pdfwindow/PWL_Utils.h"
-/* ------------------------------- CPWL_Image ---------------------------------- */
+/* ------------------------------- CPWL_Image ----------------------------------
+ */
-CPWL_Image::CPWL_Image() : m_pPDFStream(NULL)
-{
-}
+CPWL_Image::CPWL_Image() : m_pPDFStream(NULL) {}
-CPWL_Image::~CPWL_Image()
-{
-}
+CPWL_Image::~CPWL_Image() {}
-CFX_ByteString CPWL_Image::GetImageAppStream()
-{
- CFX_ByteTextBuf sAppStream;
+CFX_ByteString CPWL_Image::GetImageAppStream() {
+ CFX_ByteTextBuf sAppStream;
- CFX_ByteString sAlias = GetImageAlias();
- CPDF_Rect rcPlate = GetClientRect();
- CPDF_Matrix mt;
- mt.SetReverse(GetImageMatrix());
+ CFX_ByteString sAlias = GetImageAlias();
+ CPDF_Rect rcPlate = GetClientRect();
+ CPDF_Matrix mt;
+ mt.SetReverse(GetImageMatrix());
- FX_FLOAT fHScale = 1.0f;
- FX_FLOAT fVScale = 1.0f;
- GetScale(fHScale,fVScale);
+ FX_FLOAT fHScale = 1.0f;
+ FX_FLOAT fVScale = 1.0f;
+ GetScale(fHScale, fVScale);
- FX_FLOAT fx = 0.0f;
- FX_FLOAT fy = 0.0f;
- GetImageOffset(fx,fy);
+ FX_FLOAT fx = 0.0f;
+ FX_FLOAT fy = 0.0f;
+ GetImageOffset(fx, fy);
- if (m_pPDFStream && sAlias.GetLength()>0)
- {
- sAppStream << "q\n";
- sAppStream << rcPlate.left << " " << rcPlate.bottom << " "
- << rcPlate.right - rcPlate.left << " " << rcPlate.top - rcPlate.bottom << " re W n\n";
+ if (m_pPDFStream && sAlias.GetLength() > 0) {
+ sAppStream << "q\n";
+ sAppStream << rcPlate.left << " " << rcPlate.bottom << " "
+ << rcPlate.right - rcPlate.left << " "
+ << rcPlate.top - rcPlate.bottom << " re W n\n";
- sAppStream << fHScale << " 0 0 " << fVScale << " " << rcPlate.left + fx << " " << rcPlate.bottom + fy << " cm\n";
- sAppStream << mt.GetA() << " " << mt.GetB() << " " << mt.GetC() << " " << mt.GetD() << " " << mt.GetE() << " " << mt.GetF() << " cm\n";
+ sAppStream << fHScale << " 0 0 " << fVScale << " " << rcPlate.left + fx
+ << " " << rcPlate.bottom + fy << " cm\n";
+ sAppStream << mt.GetA() << " " << mt.GetB() << " " << mt.GetC() << " "
+ << mt.GetD() << " " << mt.GetE() << " " << mt.GetF() << " cm\n";
- sAppStream << "0 g 0 G 1 w /" << sAlias << " Do\n" << "Q\n";
- }
+ sAppStream << "0 g 0 G 1 w /" << sAlias << " Do\n"
+ << "Q\n";
+ }
- return sAppStream.GetByteString();
+ return sAppStream.GetByteString();
}
-void CPWL_Image::SetPDFStream(CPDF_Stream * pStream)
-{
- m_pPDFStream = pStream;
+void CPWL_Image::SetPDFStream(CPDF_Stream* pStream) {
+ m_pPDFStream = pStream;
}
-CPDF_Stream * CPWL_Image::GetPDFStream()
-{
- return m_pPDFStream;
+CPDF_Stream* CPWL_Image::GetPDFStream() {
+ return m_pPDFStream;
}
-void CPWL_Image::GetImageSize(FX_FLOAT & fWidth,FX_FLOAT & fHeight)
-{
- fWidth = 0.0f;
- fHeight = 0.0f;
-
- if (m_pPDFStream)
- {
- if (CPDF_Dictionary * pDict = m_pPDFStream->GetDict())
- {
- CPDF_Rect rect = pDict->GetRect("BBox");
-
- fWidth = rect.right - rect.left;
- fHeight = rect.top - rect.bottom;
- }
- }
-}
+void CPWL_Image::GetImageSize(FX_FLOAT& fWidth, FX_FLOAT& fHeight) {
+ fWidth = 0.0f;
+ fHeight = 0.0f;
-CPDF_Matrix CPWL_Image::GetImageMatrix()
-{
- if (m_pPDFStream)
- {
- if (CPDF_Dictionary * pDict = m_pPDFStream->GetDict())
- {
- return pDict->GetMatrix("Matrix");
- }
- }
-
- return CPDF_Matrix();
-}
+ if (m_pPDFStream) {
+ if (CPDF_Dictionary* pDict = m_pPDFStream->GetDict()) {
+ CPDF_Rect rect = pDict->GetRect("BBox");
-CFX_ByteString CPWL_Image::GetImageAlias()
-{
- if (m_sImageAlias.IsEmpty())
- {
- if (m_pPDFStream)
- {
- if (CPDF_Dictionary * pDict = m_pPDFStream->GetDict())
- {
- return pDict->GetString("Name");
- }
- }
- }
- else
- return m_sImageAlias;
-
- return CFX_ByteString();
+ fWidth = rect.right - rect.left;
+ fHeight = rect.top - rect.bottom;
+ }
+ }
}
-void CPWL_Image::SetImageAlias(const FX_CHAR* sImageAlias)
-{
- m_sImageAlias = sImageAlias;
-}
+CPDF_Matrix CPWL_Image::GetImageMatrix() {
+ if (m_pPDFStream) {
+ if (CPDF_Dictionary* pDict = m_pPDFStream->GetDict()) {
+ return pDict->GetMatrix("Matrix");
+ }
+ }
-void CPWL_Image::GetScale(FX_FLOAT & fHScale,FX_FLOAT & fVScale)
-{
- fHScale = 1.0f;
- fVScale = 1.0f;
+ return CPDF_Matrix();
}
+CFX_ByteString CPWL_Image::GetImageAlias() {
+ if (m_sImageAlias.IsEmpty()) {
+ if (m_pPDFStream) {
+ if (CPDF_Dictionary* pDict = m_pPDFStream->GetDict()) {
+ return pDict->GetString("Name");
+ }
+ }
+ } else
+ return m_sImageAlias;
-void CPWL_Image::GetImageOffset(FX_FLOAT & x,FX_FLOAT & y)
-{
- x = 0.0f;
- y = 0.0f;
+ return CFX_ByteString();
}
-/* ------------------------------- CPWL_Icon ---------------------------------- */
+void CPWL_Image::SetImageAlias(const FX_CHAR* sImageAlias) {
+ m_sImageAlias = sImageAlias;
+}
-CPWL_Icon::CPWL_Icon() : m_pIconFit(NULL)
-{
+void CPWL_Image::GetScale(FX_FLOAT& fHScale, FX_FLOAT& fVScale) {
+ fHScale = 1.0f;
+ fVScale = 1.0f;
}
-CPWL_Icon::~CPWL_Icon()
-{
+void CPWL_Image::GetImageOffset(FX_FLOAT& x, FX_FLOAT& y) {
+ x = 0.0f;
+ y = 0.0f;
}
-int32_t CPWL_Icon::GetScaleMethod()
-{
- if (m_pIconFit)
- return m_pIconFit->GetScaleMethod();
+/* ------------------------------- CPWL_Icon ----------------------------------
+ */
- return 0;
-}
+CPWL_Icon::CPWL_Icon() : m_pIconFit(NULL) {}
-FX_BOOL CPWL_Icon::IsProportionalScale()
-{
- if (m_pIconFit)
- return m_pIconFit->IsProportionalScale();
+CPWL_Icon::~CPWL_Icon() {}
- return FALSE;
-}
+int32_t CPWL_Icon::GetScaleMethod() {
+ if (m_pIconFit)
+ return m_pIconFit->GetScaleMethod();
-void CPWL_Icon::GetIconPosition(FX_FLOAT & fLeft, FX_FLOAT & fBottom)
-{
- if (m_pIconFit)
- {
- //m_pIconFit->GetIconPosition(fLeft,fBottom);
- fLeft = 0.0f;
- fBottom = 0.0f;
- CPDF_Array* pA = m_pIconFit->m_pDict ? m_pIconFit->m_pDict->GetArray("A") : NULL;
- if (pA != NULL)
- {
- FX_DWORD dwCount = pA->GetCount();
- if (dwCount > 0) fLeft = pA->GetNumber(0);
- if (dwCount > 1) fBottom = pA->GetNumber(1);
- }
- }
- else
- {
- fLeft = 0.0f;
- fBottom = 0.0f;
- }
+ return 0;
}
-FX_BOOL CPWL_Icon::GetFittingBounds()
-{
- if (m_pIconFit)
- return m_pIconFit->GetFittingBounds();
+FX_BOOL CPWL_Icon::IsProportionalScale() {
+ if (m_pIconFit)
+ return m_pIconFit->IsProportionalScale();
- return FALSE;
+ return FALSE;
}
-void CPWL_Icon::GetScale(FX_FLOAT & fHScale,FX_FLOAT & fVScale)
-{
- fHScale = 1.0f;
- fVScale = 1.0f;
-
- if (m_pPDFStream)
- {
- FX_FLOAT fImageWidth,fImageHeight;
- FX_FLOAT fPlateWidth,fPlateHeight;
-
- CPDF_Rect rcPlate = GetClientRect();
- fPlateWidth = rcPlate.right - rcPlate.left;
- fPlateHeight = rcPlate.top - rcPlate.bottom;
-
- GetImageSize(fImageWidth,fImageHeight);
-
- int32_t nScaleMethod = GetScaleMethod();
-
- switch (nScaleMethod)
- {
- default:
- case 0:
- fHScale = fPlateWidth / PWL_MAX(fImageWidth,1.0f);
- fVScale = fPlateHeight / PWL_MAX(fImageHeight,1.0f);
- break;
- case 1:
- if (fPlateWidth < fImageWidth)
- fHScale = fPlateWidth / PWL_MAX(fImageWidth,1.0f);
- if (fPlateHeight < fImageHeight)
- fVScale = fPlateHeight / PWL_MAX(fImageHeight,1.0f);
- break;
- case 2:
- if (fPlateWidth > fImageWidth)
- fHScale = fPlateWidth / PWL_MAX(fImageWidth,1.0f);
- if (fPlateHeight > fImageHeight)
- fVScale = fPlateHeight / PWL_MAX(fImageHeight,1.0f);
- break;
- case 3:
- break;
- }
-
- FX_FLOAT fMinScale;
- if (IsProportionalScale())
- {
- fMinScale = PWL_MIN(fHScale,fVScale);
- fHScale = fMinScale;
- fVScale = fMinScale;
- }
- }
+void CPWL_Icon::GetIconPosition(FX_FLOAT& fLeft, FX_FLOAT& fBottom) {
+ if (m_pIconFit) {
+ // m_pIconFit->GetIconPosition(fLeft,fBottom);
+ fLeft = 0.0f;
+ fBottom = 0.0f;
+ CPDF_Array* pA =
+ m_pIconFit->m_pDict ? m_pIconFit->m_pDict->GetArray("A") : NULL;
+ if (pA != NULL) {
+ FX_DWORD dwCount = pA->GetCount();
+ if (dwCount > 0)
+ fLeft = pA->GetNumber(0);
+ if (dwCount > 1)
+ fBottom = pA->GetNumber(1);
+ }
+ } else {
+ fLeft = 0.0f;
+ fBottom = 0.0f;
+ }
}
-void CPWL_Icon::GetImageOffset(FX_FLOAT & x,FX_FLOAT & y)
-{
- FX_FLOAT fLeft,fBottom;
+FX_BOOL CPWL_Icon::GetFittingBounds() {
+ if (m_pIconFit)
+ return m_pIconFit->GetFittingBounds();
- GetIconPosition(fLeft, fBottom);
- x = 0.0f;
- y = 0.0f;
+ return FALSE;
+}
+
+void CPWL_Icon::GetScale(FX_FLOAT& fHScale, FX_FLOAT& fVScale) {
+ fHScale = 1.0f;
+ fVScale = 1.0f;
- FX_FLOAT fImageWidth,fImageHeight;
- GetImageSize(fImageWidth,fImageHeight);
+ if (m_pPDFStream) {
+ FX_FLOAT fImageWidth, fImageHeight;
+ FX_FLOAT fPlateWidth, fPlateHeight;
- FX_FLOAT fHScale,fVScale;
- GetScale(fHScale,fVScale);
+ CPDF_Rect rcPlate = GetClientRect();
+ fPlateWidth = rcPlate.right - rcPlate.left;
+ fPlateHeight = rcPlate.top - rcPlate.bottom;
- FX_FLOAT fImageFactWidth = fImageWidth * fHScale;
- FX_FLOAT fImageFactHeight = fImageHeight * fVScale;
+ GetImageSize(fImageWidth, fImageHeight);
- FX_FLOAT fPlateWidth,fPlateHeight;
- CPDF_Rect rcPlate = GetClientRect();
- fPlateWidth = rcPlate.right - rcPlate.left;
- fPlateHeight = rcPlate.top - rcPlate.bottom;
+ int32_t nScaleMethod = GetScaleMethod();
- x = (fPlateWidth - fImageFactWidth) * fLeft;
- y = (fPlateHeight - fImageFactHeight) * fBottom;
+ switch (nScaleMethod) {
+ default:
+ case 0:
+ fHScale = fPlateWidth / PWL_MAX(fImageWidth, 1.0f);
+ fVScale = fPlateHeight / PWL_MAX(fImageHeight, 1.0f);
+ break;
+ case 1:
+ if (fPlateWidth < fImageWidth)
+ fHScale = fPlateWidth / PWL_MAX(fImageWidth, 1.0f);
+ if (fPlateHeight < fImageHeight)
+ fVScale = fPlateHeight / PWL_MAX(fImageHeight, 1.0f);
+ break;
+ case 2:
+ if (fPlateWidth > fImageWidth)
+ fHScale = fPlateWidth / PWL_MAX(fImageWidth, 1.0f);
+ if (fPlateHeight > fImageHeight)
+ fVScale = fPlateHeight / PWL_MAX(fImageHeight, 1.0f);
+ break;
+ case 3:
+ break;
+ }
+
+ FX_FLOAT fMinScale;
+ if (IsProportionalScale()) {
+ fMinScale = PWL_MIN(fHScale, fVScale);
+ fHScale = fMinScale;
+ fVScale = fMinScale;
+ }
+ }
}
+void CPWL_Icon::GetImageOffset(FX_FLOAT& x, FX_FLOAT& y) {
+ FX_FLOAT fLeft, fBottom;
+
+ GetIconPosition(fLeft, fBottom);
+ x = 0.0f;
+ y = 0.0f;
+
+ FX_FLOAT fImageWidth, fImageHeight;
+ GetImageSize(fImageWidth, fImageHeight);
+
+ FX_FLOAT fHScale, fVScale;
+ GetScale(fHScale, fVScale);
+
+ FX_FLOAT fImageFactWidth = fImageWidth * fHScale;
+ FX_FLOAT fImageFactHeight = fImageHeight * fVScale;
+
+ FX_FLOAT fPlateWidth, fPlateHeight;
+ CPDF_Rect rcPlate = GetClientRect();
+ fPlateWidth = rcPlate.right - rcPlate.left;
+ fPlateHeight = rcPlate.top - rcPlate.bottom;
+
+ x = (fPlateWidth - fImageFactWidth) * fLeft;
+ y = (fPlateHeight - fImageFactHeight) * fBottom;
+}
diff --git a/fpdfsdk/src/pdfwindow/PWL_IconList.cpp b/fpdfsdk/src/pdfwindow/PWL_IconList.cpp
index 157eba633d..24d2dad5fa 100644
--- a/fpdfsdk/src/pdfwindow/PWL_IconList.cpp
+++ b/fpdfsdk/src/pdfwindow/PWL_IconList.cpp
@@ -12,581 +12,494 @@
#include "../../include/pdfwindow/PWL_ScrollBar.h"
#include "../../include/pdfwindow/PWL_Label.h"
-#define PWL_IconList_ITEM_ICON_LEFTMARGIN 10.0f
-#define PWL_IconList_ITEM_WIDTH 20.0f
-#define PWL_IconList_ITEM_HEIGHT 20.0f
-#define PWL_IconList_ITEM_SPACE 4.0f
+#define PWL_IconList_ITEM_ICON_LEFTMARGIN 10.0f
+#define PWL_IconList_ITEM_WIDTH 20.0f
+#define PWL_IconList_ITEM_HEIGHT 20.0f
+#define PWL_IconList_ITEM_SPACE 4.0f
/* ------------------ CPWL_IconList_Item ------------------- */
-CPWL_IconList_Item::CPWL_IconList_Item() :
- m_nIconIndex(-1),
- m_pData(NULL),
- m_bSelected(FALSE),
- m_pText(NULL)
-{
-}
+CPWL_IconList_Item::CPWL_IconList_Item()
+ : m_nIconIndex(-1), m_pData(NULL), m_bSelected(FALSE), m_pText(NULL) {}
+
+CPWL_IconList_Item::~CPWL_IconList_Item() {}
-CPWL_IconList_Item::~CPWL_IconList_Item()
-{
+CFX_ByteString CPWL_IconList_Item::GetClassName() const {
+ return "CPWL_IconList_Item";
}
-CFX_ByteString CPWL_IconList_Item::GetClassName() const
-{
- return "CPWL_IconList_Item";
+FX_FLOAT CPWL_IconList_Item::GetItemHeight(FX_FLOAT fLimitWidth) {
+ return PWL_IconList_ITEM_HEIGHT;
}
-FX_FLOAT CPWL_IconList_Item::GetItemHeight(FX_FLOAT fLimitWidth)
-{
- return PWL_IconList_ITEM_HEIGHT;
+void CPWL_IconList_Item::DrawThisAppearance(CFX_RenderDevice* pDevice,
+ CPDF_Matrix* pUser2Device) {
+ CPDF_Rect rcClient = GetClientRect();
+
+ if (m_bSelected) {
+ if (IsEnabled()) {
+ CPWL_Utils::DrawFillRect(
+ pDevice, pUser2Device, rcClient,
+ CPWL_Utils::PWLColorToFXColor(PWL_DEFAULT_SELBACKCOLOR,
+ GetTransparency()));
+ } else {
+ CPWL_Utils::DrawFillRect(
+ pDevice, pUser2Device, rcClient,
+ CPWL_Utils::PWLColorToFXColor(PWL_DEFAULT_LIGHTGRAYCOLOR,
+ GetTransparency()));
+ }
+ }
+
+ CPDF_Rect rcIcon = rcClient;
+ rcIcon.left += PWL_IconList_ITEM_ICON_LEFTMARGIN;
+ rcIcon.right = rcIcon.left + PWL_IconList_ITEM_WIDTH;
+
+ CPWL_Utils::DrawIconAppStream(pDevice, pUser2Device, m_nIconIndex, rcIcon,
+ m_crIcon, m_pText->GetTextColor(),
+ GetTransparency());
}
-void CPWL_IconList_Item::DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device)
-{
- CPDF_Rect rcClient = GetClientRect();
+void CPWL_IconList_Item::SetSelect(FX_BOOL bSelected) {
+ m_bSelected = bSelected;
+
+ if (bSelected)
+ m_pText->SetTextColor(PWL_DEFAULT_WHITECOLOR);
+ else
+ m_pText->SetTextColor(PWL_DEFAULT_BLACKCOLOR);
+}
- if (m_bSelected)
- {
- if (IsEnabled())
- {
- CPWL_Utils::DrawFillRect(pDevice, pUser2Device, rcClient,
- CPWL_Utils::PWLColorToFXColor(PWL_DEFAULT_SELBACKCOLOR, GetTransparency()));
- }
- else
- {
- CPWL_Utils::DrawFillRect(pDevice, pUser2Device, rcClient,
- CPWL_Utils::PWLColorToFXColor(PWL_DEFAULT_LIGHTGRAYCOLOR, GetTransparency()));
- }
- }
+FX_BOOL CPWL_IconList_Item::IsSelected() const {
+ return m_bSelected;
+}
- CPDF_Rect rcIcon = rcClient;
- rcIcon.left += PWL_IconList_ITEM_ICON_LEFTMARGIN;
- rcIcon.right = rcIcon.left + PWL_IconList_ITEM_WIDTH;
+void CPWL_IconList_Item::CreateChildWnd(const PWL_CREATEPARAM& cp) {
+ m_pText = new CPWL_Label;
- CPWL_Utils::DrawIconAppStream(pDevice, pUser2Device, m_nIconIndex, rcIcon,
- m_crIcon, m_pText->GetTextColor(), GetTransparency());
+ PWL_CREATEPARAM lcp = cp;
+ lcp.pParentWnd = this;
+ lcp.dwFlags = PWS_CHILD | PWS_VISIBLE | PES_LEFT | PES_CENTER;
+ lcp.sTextColor = PWL_DEFAULT_BLACKCOLOR;
+ lcp.fFontSize = 12;
+ m_pText->Create(lcp);
}
-void CPWL_IconList_Item::SetSelect(FX_BOOL bSelected)
-{
- m_bSelected = bSelected;
+void CPWL_IconList_Item::SetData(void* pData) {
+ m_pData = pData;
+}
- if (bSelected)
- m_pText->SetTextColor(PWL_DEFAULT_WHITECOLOR);
- else
- m_pText->SetTextColor(PWL_DEFAULT_BLACKCOLOR);
+void CPWL_IconList_Item::SetIcon(int32_t nIconIndex) {
+ m_nIconIndex = nIconIndex;
+}
+void CPWL_IconList_Item::SetText(const CFX_WideString& str) {
+ m_pText->SetText(str.c_str());
}
-FX_BOOL CPWL_IconList_Item::IsSelected() const
-{
- return m_bSelected;
+CFX_WideString CPWL_IconList_Item::GetText() const {
+ return m_pText->GetText();
}
-void CPWL_IconList_Item::CreateChildWnd(const PWL_CREATEPARAM & cp)
-{
- m_pText = new CPWL_Label;
+void CPWL_IconList_Item::RePosChildWnd() {
+ CPDF_Rect rcClient = GetClientRect();
- PWL_CREATEPARAM lcp = cp;
- lcp.pParentWnd = this;
- lcp.dwFlags = PWS_CHILD | PWS_VISIBLE | PES_LEFT | PES_CENTER;
- lcp.sTextColor = PWL_DEFAULT_BLACKCOLOR;
- lcp.fFontSize = 12;
- m_pText->Create(lcp);
+ rcClient.left +=
+ (PWL_IconList_ITEM_ICON_LEFTMARGIN + PWL_IconList_ITEM_WIDTH +
+ PWL_IconList_ITEM_ICON_LEFTMARGIN);
+
+ m_pText->Move(rcClient, TRUE, FALSE);
}
-void CPWL_IconList_Item::SetData(void* pData)
-{
- m_pData = pData;
+void CPWL_IconList_Item::SetIconFillColor(const CPWL_Color& color) {
+ m_crIcon = color;
}
-void CPWL_IconList_Item::SetIcon(int32_t nIconIndex)
-{
- m_nIconIndex = nIconIndex;
+void CPWL_IconList_Item::OnEnabled() {
+ if (m_bSelected)
+ m_pText->SetTextColor(PWL_DEFAULT_WHITECOLOR);
+ else
+ m_pText->SetTextColor(PWL_DEFAULT_BLACKCOLOR);
+
+ InvalidateRect();
}
-void CPWL_IconList_Item::SetText(const CFX_WideString& str)
-{
- m_pText->SetText(str.c_str());
+void CPWL_IconList_Item::OnDisabled() {
+ m_pText->SetTextColor(PWL_DEFAULT_HEAVYGRAYCOLOR);
+
+ InvalidateRect();
}
-CFX_WideString CPWL_IconList_Item::GetText() const
-{
- return m_pText->GetText();
+/* ----------------- CPWL_IconList_Content ----------------- */
+
+CPWL_IconList_Content::CPWL_IconList_Content(int32_t nListCount)
+ : m_nSelectIndex(-1),
+ m_pNotify(NULL),
+ m_bEnableNotify(TRUE),
+ m_bMouseDown(FALSE),
+ m_nListCount(nListCount) {}
+
+CPWL_IconList_Content::~CPWL_IconList_Content() {}
+
+void CPWL_IconList_Content::CreateChildWnd(const PWL_CREATEPARAM& cp) {
+ for (int32_t i = 0; i < m_nListCount; i++) {
+ CPWL_IconList_Item* pNewItem = new CPWL_IconList_Item();
+
+ PWL_CREATEPARAM icp = cp;
+ icp.pParentWnd = this;
+ icp.dwFlags = PWS_CHILD | PWS_VISIBLE | PWS_NOREFRESHCLIP;
+ pNewItem->Create(icp);
+ }
+
+ SetItemSpace(PWL_IconList_ITEM_SPACE);
+ ResetContent(0);
+
+ if (CPWL_Wnd* pParent = GetParentWindow()) {
+ CPDF_Rect rcScroll = GetScrollArea();
+ GetScrollPos();
+
+ PWL_SCROLL_INFO sInfo;
+ sInfo.fContentMin = rcScroll.bottom;
+ sInfo.fContentMax = rcScroll.top;
+ sInfo.fPlateWidth = GetClientRect().Height();
+ sInfo.fSmallStep = 13.0f;
+ sInfo.fBigStep = sInfo.fPlateWidth;
+
+ pParent->OnNotify(this, PNM_SETSCROLLINFO, SBT_VSCROLL, (intptr_t)&sInfo);
+ }
}
-void CPWL_IconList_Item::RePosChildWnd()
-{
- CPDF_Rect rcClient = GetClientRect();
+FX_BOOL CPWL_IconList_Content::OnLButtonDown(const CPDF_Point& point,
+ FX_DWORD nFlag) {
+ SetFocus();
+
+ SetCapture();
+ m_bMouseDown = TRUE;
+
+ int32_t nItemIndex = FindItemIndex(point);
+ SetSelect(nItemIndex);
+ ScrollToItem(nItemIndex);
- rcClient.left += (PWL_IconList_ITEM_ICON_LEFTMARGIN + PWL_IconList_ITEM_WIDTH + PWL_IconList_ITEM_ICON_LEFTMARGIN);
+ return TRUE;
+}
+
+FX_BOOL CPWL_IconList_Content::OnLButtonUp(const CPDF_Point& point,
+ FX_DWORD nFlag) {
+ m_bMouseDown = FALSE;
+ ReleaseCapture();
- m_pText->Move(rcClient, TRUE, FALSE);
+ return TRUE;
}
-void CPWL_IconList_Item::SetIconFillColor(const CPWL_Color& color)
-{
- m_crIcon = color;
+FX_BOOL CPWL_IconList_Content::OnMouseMove(const CPDF_Point& point,
+ FX_DWORD nFlag) {
+ if (m_bMouseDown) {
+ int32_t nItemIndex = FindItemIndex(point);
+ SetSelect(nItemIndex);
+ ScrollToItem(nItemIndex);
+ }
+
+ return TRUE;
}
-void CPWL_IconList_Item::OnEnabled()
-{
- if (m_bSelected)
- m_pText->SetTextColor(PWL_DEFAULT_WHITECOLOR);
- else
- m_pText->SetTextColor(PWL_DEFAULT_BLACKCOLOR);
+FX_BOOL CPWL_IconList_Content::OnKeyDown(FX_WORD nChar, FX_DWORD nFlag) {
+ switch (nChar) {
+ case FWL_VKEY_Up:
+ if (m_nSelectIndex > 0) {
+ int32_t nItemIndex = m_nSelectIndex - 1;
+ SetSelect(nItemIndex);
+ ScrollToItem(nItemIndex);
+ }
+ return TRUE;
+ case FWL_VKEY_Down:
+ if (m_nSelectIndex < m_nListCount - 1) {
+ int32_t nItemIndex = m_nSelectIndex + 1;
+ SetSelect(nItemIndex);
+ ScrollToItem(nItemIndex);
+ }
+ return TRUE;
+ }
- InvalidateRect();
+ return FALSE;
}
-void CPWL_IconList_Item::OnDisabled()
-{
- m_pText->SetTextColor(PWL_DEFAULT_HEAVYGRAYCOLOR);
+int32_t CPWL_IconList_Content::FindItemIndex(const CPDF_Point& point) {
+ int32_t nIndex = 0;
+ for (int32_t i = 0, sz = m_aChildren.GetSize(); i < sz; i++) {
+ if (CPWL_Wnd* pChild = m_aChildren.GetAt(i)) {
+ CPDF_Rect rcWnd = pChild->ChildToParent(pChild->GetWindowRect());
+
+ if (point.y < rcWnd.top) {
+ nIndex = i;
+ }
+ }
+ }
- InvalidateRect();
+ return nIndex;
}
-/* ----------------- CPWL_IconList_Content ----------------- */
+void CPWL_IconList_Content::ScrollToItem(int32_t nItemIndex) {
+ CPDF_Rect rcClient = GetClientRect();
+
+ if (CPWL_IconList_Item* pItem = GetListItem(nItemIndex)) {
+ CPDF_Rect rcOrigin = pItem->GetWindowRect();
+ CPDF_Rect rcWnd = pItem->ChildToParent(rcOrigin);
+
+ if (!(rcWnd.bottom > rcClient.bottom && rcWnd.top < rcClient.top)) {
+ CPDF_Point ptScroll = GetScrollPos();
+
+ if (rcWnd.top > rcClient.top) {
+ ptScroll.y = rcOrigin.top;
+ } else if (rcWnd.bottom < rcClient.bottom) {
+ ptScroll.y = rcOrigin.bottom + rcClient.Height();
+ }
-CPWL_IconList_Content::CPWL_IconList_Content(int32_t nListCount) :
- m_nSelectIndex(-1),
- m_pNotify(NULL),
- m_bEnableNotify(TRUE),
- m_bMouseDown(FALSE),
- m_nListCount(nListCount)
-{
-}
-
-CPWL_IconList_Content::~CPWL_IconList_Content()
-{
-}
-
-void CPWL_IconList_Content::CreateChildWnd(const PWL_CREATEPARAM & cp)
-{
- for (int32_t i=0; i<m_nListCount; i++)
- {
- CPWL_IconList_Item* pNewItem = new CPWL_IconList_Item();
-
- PWL_CREATEPARAM icp = cp;
- icp.pParentWnd = this;
- icp.dwFlags = PWS_CHILD | PWS_VISIBLE | PWS_NOREFRESHCLIP;
- pNewItem->Create(icp);
- }
-
- SetItemSpace(PWL_IconList_ITEM_SPACE);
- ResetContent(0);
-
- if (CPWL_Wnd * pParent = GetParentWindow())
- {
- CPDF_Rect rcScroll = GetScrollArea();
- GetScrollPos();
-
- PWL_SCROLL_INFO sInfo;
- sInfo.fContentMin = rcScroll.bottom;
- sInfo.fContentMax = rcScroll.top;
- sInfo.fPlateWidth = GetClientRect().Height();
- sInfo.fSmallStep = 13.0f;
- sInfo.fBigStep = sInfo.fPlateWidth;
-
- pParent->OnNotify(this, PNM_SETSCROLLINFO, SBT_VSCROLL, (intptr_t)&sInfo);
- }
-}
-
-FX_BOOL CPWL_IconList_Content::OnLButtonDown(const CPDF_Point & point, FX_DWORD nFlag)
-{
- SetFocus();
-
- SetCapture();
- m_bMouseDown = TRUE;
-
- int32_t nItemIndex = FindItemIndex(point);
- SetSelect(nItemIndex);
- ScrollToItem(nItemIndex);
-
- return TRUE;
-}
-
-FX_BOOL CPWL_IconList_Content::OnLButtonUp(const CPDF_Point & point, FX_DWORD nFlag)
-{
- m_bMouseDown = FALSE;
- ReleaseCapture();
-
- return TRUE;
-}
-
-FX_BOOL CPWL_IconList_Content::OnMouseMove(const CPDF_Point & point, FX_DWORD nFlag)
-{
- if (m_bMouseDown)
- {
- int32_t nItemIndex = FindItemIndex(point);
- SetSelect(nItemIndex);
- ScrollToItem(nItemIndex);
- }
-
- return TRUE;
-}
-
-FX_BOOL CPWL_IconList_Content::OnKeyDown(FX_WORD nChar, FX_DWORD nFlag)
-{
- switch (nChar)
- {
- case FWL_VKEY_Up:
- if (m_nSelectIndex > 0)
- {
- int32_t nItemIndex = m_nSelectIndex - 1;
- SetSelect(nItemIndex);
- ScrollToItem(nItemIndex);
- }
- return TRUE;
- case FWL_VKEY_Down:
- if (m_nSelectIndex < m_nListCount-1)
- {
- int32_t nItemIndex = m_nSelectIndex + 1;
- SetSelect(nItemIndex);
- ScrollToItem(nItemIndex);
- }
- return TRUE;
- }
-
- return FALSE;
-}
-
-int32_t CPWL_IconList_Content::FindItemIndex(const CPDF_Point& point)
-{
- int32_t nIndex = 0;
- for (int32_t i=0,sz=m_aChildren.GetSize(); i<sz; i++)
- {
- if (CPWL_Wnd * pChild = m_aChildren.GetAt(i))
- {
- CPDF_Rect rcWnd = pChild->ChildToParent(pChild->GetWindowRect());
-
- if (point.y < rcWnd.top)
- {
- nIndex = i;
- }
- }
- }
-
- return nIndex;
-}
-
-void CPWL_IconList_Content::ScrollToItem(int32_t nItemIndex)
-{
- CPDF_Rect rcClient = GetClientRect();
-
- if (CPWL_IconList_Item* pItem = GetListItem(nItemIndex))
- {
- CPDF_Rect rcOrigin = pItem->GetWindowRect();
- CPDF_Rect rcWnd = pItem->ChildToParent(rcOrigin);
-
- if (!(rcWnd.bottom > rcClient.bottom && rcWnd.top < rcClient.top))
- {
- CPDF_Point ptScroll = GetScrollPos();
-
- if (rcWnd.top > rcClient.top)
- {
- ptScroll.y = rcOrigin.top;
- }
- else if (rcWnd.bottom < rcClient.bottom)
- {
- ptScroll.y = rcOrigin.bottom + rcClient.Height();
- }
+ SetScrollPos(ptScroll);
+ ResetFace();
+ InvalidateRect();
+ if (CPWL_Wnd* pParent = GetParentWindow()) {
+ pParent->OnNotify(this, PNM_SETSCROLLPOS, SBT_VSCROLL,
+ (intptr_t)&ptScroll.y);
+ }
+ }
+ }
+}
+
+void CPWL_IconList_Content::SetSelect(int32_t nIndex) {
+ if (m_nSelectIndex != nIndex) {
+ SelectItem(m_nSelectIndex, FALSE);
+ SelectItem(nIndex, TRUE);
+ m_nSelectIndex = nIndex;
- SetScrollPos(ptScroll);
- ResetFace();
- InvalidateRect();
- if (CPWL_Wnd* pParent = GetParentWindow())
- {
- pParent->OnNotify(this, PNM_SETSCROLLPOS, SBT_VSCROLL, (intptr_t)&ptScroll.y);
- }
- }
- }
-}
-
-void CPWL_IconList_Content::SetSelect(int32_t nIndex)
-{
- if (m_nSelectIndex != nIndex)
- {
- SelectItem(m_nSelectIndex, FALSE);
- SelectItem(nIndex, TRUE);
- m_nSelectIndex = nIndex;
-
- if (IPWL_IconList_Notify* pNotify = GetNotify())
- pNotify->OnNoteListSelChanged(nIndex);
- }
-}
-
-int32_t CPWL_IconList_Content::GetSelect() const
-{
- return m_nSelectIndex;
-}
-
-IPWL_IconList_Notify* CPWL_IconList_Content::GetNotify() const
-{
- if (m_bEnableNotify)
- return m_pNotify;
- return NULL;
-}
-
-void CPWL_IconList_Content::SetNotify(IPWL_IconList_Notify* pNotify)
-{
- m_pNotify = pNotify;
-}
-
-void CPWL_IconList_Content::EnableNotify(FX_BOOL bNotify)
-{
- m_bEnableNotify = bNotify;
-}
-
-void CPWL_IconList_Content::SelectItem(int32_t nItemIndex, FX_BOOL bSelect)
-{
- if (CPWL_IconList_Item* pItem = GetListItem(nItemIndex))
- {
- pItem->SetSelect(bSelect);
- pItem->InvalidateRect();
- }
+ if (IPWL_IconList_Notify* pNotify = GetNotify())
+ pNotify->OnNoteListSelChanged(nIndex);
+ }
}
-CPWL_IconList_Item* CPWL_IconList_Content::GetListItem(int32_t nItemIndex) const
-{
- if (nItemIndex >= 0 && nItemIndex<m_aChildren.GetSize())
- {
- if (CPWL_Wnd * pChild = m_aChildren.GetAt(nItemIndex))
- {
- if (pChild->GetClassName() == "CPWL_IconList_Item")
- {
- return (CPWL_IconList_Item*)pChild;
- }
- }
- }
+int32_t CPWL_IconList_Content::GetSelect() const {
+ return m_nSelectIndex;
+}
- return NULL;
+IPWL_IconList_Notify* CPWL_IconList_Content::GetNotify() const {
+ if (m_bEnableNotify)
+ return m_pNotify;
+ return NULL;
}
-void CPWL_IconList_Content::SetListData(int32_t nItemIndex, void* pData)
-{
- if (CPWL_IconList_Item* pItem = GetListItem(nItemIndex))
- pItem->SetData(pData);
+void CPWL_IconList_Content::SetNotify(IPWL_IconList_Notify* pNotify) {
+ m_pNotify = pNotify;
}
-void CPWL_IconList_Content::SetListIcon(int32_t nItemIndex, int32_t nIconIndex)
-{
- if (CPWL_IconList_Item* pItem = GetListItem(nItemIndex))
- pItem->SetIcon(nIconIndex);
+void CPWL_IconList_Content::EnableNotify(FX_BOOL bNotify) {
+ m_bEnableNotify = bNotify;
}
-void CPWL_IconList_Content::SetListString(int32_t nItemIndex, const CFX_WideString& str)
-{
- if (CPWL_IconList_Item* pItem = GetListItem(nItemIndex))
- pItem->SetText(str);
+void CPWL_IconList_Content::SelectItem(int32_t nItemIndex, FX_BOOL bSelect) {
+ if (CPWL_IconList_Item* pItem = GetListItem(nItemIndex)) {
+ pItem->SetSelect(bSelect);
+ pItem->InvalidateRect();
+ }
}
-CFX_WideString CPWL_IconList_Content::GetListString(int32_t nItemIndex) const
-{
- if (CPWL_IconList_Item* pItem = GetListItem(nItemIndex))
- return pItem->GetText();
+CPWL_IconList_Item* CPWL_IconList_Content::GetListItem(
+ int32_t nItemIndex) const {
+ if (nItemIndex >= 0 && nItemIndex < m_aChildren.GetSize()) {
+ if (CPWL_Wnd* pChild = m_aChildren.GetAt(nItemIndex)) {
+ if (pChild->GetClassName() == "CPWL_IconList_Item") {
+ return (CPWL_IconList_Item*)pChild;
+ }
+ }
+ }
+
+ return NULL;
+}
- return L"";
+void CPWL_IconList_Content::SetListData(int32_t nItemIndex, void* pData) {
+ if (CPWL_IconList_Item* pItem = GetListItem(nItemIndex))
+ pItem->SetData(pData);
}
-void CPWL_IconList_Content::SetIconFillColor(const CPWL_Color& color)
-{
- for (int32_t i=0,sz=m_aChildren.GetSize(); i<sz; i++)
- {
- if (CPWL_Wnd * pChild = m_aChildren.GetAt(i))
- {
- if (pChild->GetClassName() == "CPWL_IconList_Item")
- {
- CPWL_IconList_Item* pItem = (CPWL_IconList_Item*)pChild;
- pItem->SetIconFillColor(color);
- pItem->InvalidateRect();
- }
- }
- }
+void CPWL_IconList_Content::SetListIcon(int32_t nItemIndex,
+ int32_t nIconIndex) {
+ if (CPWL_IconList_Item* pItem = GetListItem(nItemIndex))
+ pItem->SetIcon(nIconIndex);
+}
+void CPWL_IconList_Content::SetListString(int32_t nItemIndex,
+ const CFX_WideString& str) {
+ if (CPWL_IconList_Item* pItem = GetListItem(nItemIndex))
+ pItem->SetText(str);
}
-/* -------------------- CPWL_IconList --------------------- */
+CFX_WideString CPWL_IconList_Content::GetListString(int32_t nItemIndex) const {
+ if (CPWL_IconList_Item* pItem = GetListItem(nItemIndex))
+ return pItem->GetText();
+
+ return L"";
+}
-CPWL_IconList::CPWL_IconList(int32_t nListCount) :
- m_pListContent(NULL),
- m_nListCount(nListCount)
-{
-}
-
-CPWL_IconList::~CPWL_IconList()
-{
-}
-
-void CPWL_IconList::RePosChildWnd()
-{
- CPWL_Wnd::RePosChildWnd();
-
- if (m_pListContent)
- m_pListContent->Move(GetClientRect(), TRUE, FALSE);
-}
-
-void CPWL_IconList::CreateChildWnd(const PWL_CREATEPARAM & cp)
-{
- m_pListContent = new CPWL_IconList_Content(m_nListCount);
-
- PWL_CREATEPARAM ccp = cp;
- ccp.pParentWnd = this;
- ccp.dwFlags = PWS_CHILD | PWS_VISIBLE;
- m_pListContent->Create(ccp);
-}
-
-void CPWL_IconList::OnCreated()
-{
- if (CPWL_ScrollBar* pScrollBar = GetVScrollBar())
- {
- pScrollBar->RemoveFlag(PWS_AUTOTRANSPARENT);
- pScrollBar->SetTransparency(255);
- pScrollBar->SetNotifyForever(TRUE);
- }
+void CPWL_IconList_Content::SetIconFillColor(const CPWL_Color& color) {
+ for (int32_t i = 0, sz = m_aChildren.GetSize(); i < sz; i++) {
+ if (CPWL_Wnd* pChild = m_aChildren.GetAt(i)) {
+ if (pChild->GetClassName() == "CPWL_IconList_Item") {
+ CPWL_IconList_Item* pItem = (CPWL_IconList_Item*)pChild;
+ pItem->SetIconFillColor(color);
+ pItem->InvalidateRect();
+ }
+ }
+ }
}
-void CPWL_IconList::OnNotify(CPWL_Wnd* pWnd, FX_DWORD msg, intptr_t wParam, intptr_t lParam)
-{
- CPWL_Wnd::OnNotify(pWnd, msg, wParam, lParam);
+/* -------------------- CPWL_IconList --------------------- */
+
+CPWL_IconList::CPWL_IconList(int32_t nListCount)
+ : m_pListContent(NULL), m_nListCount(nListCount) {}
+
+CPWL_IconList::~CPWL_IconList() {}
- if (wParam == SBT_VSCROLL)
- {
- switch (msg)
- {
- case PNM_SETSCROLLINFO:
- if (PWL_SCROLL_INFO* pInfo = (PWL_SCROLL_INFO*)lParam)
- {
- if (CPWL_ScrollBar* pScrollBar = GetVScrollBar())
- {
- if (pInfo->fContentMax - pInfo->fContentMin > pInfo->fPlateWidth)
- {
- if (!pScrollBar->IsVisible())
- {
- pScrollBar->SetVisible(TRUE);
- RePosChildWnd();
- }
- else
- {
- }
- }
- else
- {
- if (pScrollBar->IsVisible())
- {
- pScrollBar->SetVisible(FALSE);
- RePosChildWnd();
- }
+void CPWL_IconList::RePosChildWnd() {
+ CPWL_Wnd::RePosChildWnd();
- if (m_pListContent)
- m_pListContent->SetScrollPos(CPDF_Point(0.0f,0.0f));
- }
+ if (m_pListContent)
+ m_pListContent->Move(GetClientRect(), TRUE, FALSE);
+}
+
+void CPWL_IconList::CreateChildWnd(const PWL_CREATEPARAM& cp) {
+ m_pListContent = new CPWL_IconList_Content(m_nListCount);
- pScrollBar->OnNotify(pWnd,PNM_SETSCROLLINFO,wParam,lParam);
- }
- }
- return;
- case PNM_SCROLLWINDOW:
- if (m_pListContent)
- {
- m_pListContent->SetScrollPos(CPDF_Point(0.0f, *(FX_FLOAT*)lParam));
- m_pListContent->ResetFace();
- m_pListContent->InvalidateRect(NULL);
- }
- return;
- case PNM_SETSCROLLPOS:
- if (CPWL_ScrollBar* pScrollBar = GetVScrollBar())
- pScrollBar->OnNotify(pWnd,PNM_SETSCROLLPOS,wParam,lParam);
- return;
- }
- }
+ PWL_CREATEPARAM ccp = cp;
+ ccp.pParentWnd = this;
+ ccp.dwFlags = PWS_CHILD | PWS_VISIBLE;
+ m_pListContent->Create(ccp);
}
-void CPWL_IconList::SetSelect(int32_t nIndex)
-{
- m_pListContent->SetSelect(nIndex);
+void CPWL_IconList::OnCreated() {
+ if (CPWL_ScrollBar* pScrollBar = GetVScrollBar()) {
+ pScrollBar->RemoveFlag(PWS_AUTOTRANSPARENT);
+ pScrollBar->SetTransparency(255);
+ pScrollBar->SetNotifyForever(TRUE);
+ }
}
-void CPWL_IconList::SetTopItem(int32_t nIndex)
-{
- m_pListContent->ScrollToItem(nIndex);
+void CPWL_IconList::OnNotify(CPWL_Wnd* pWnd,
+ FX_DWORD msg,
+ intptr_t wParam,
+ intptr_t lParam) {
+ CPWL_Wnd::OnNotify(pWnd, msg, wParam, lParam);
+
+ if (wParam == SBT_VSCROLL) {
+ switch (msg) {
+ case PNM_SETSCROLLINFO:
+ if (PWL_SCROLL_INFO* pInfo = (PWL_SCROLL_INFO*)lParam) {
+ if (CPWL_ScrollBar* pScrollBar = GetVScrollBar()) {
+ if (pInfo->fContentMax - pInfo->fContentMin > pInfo->fPlateWidth) {
+ if (!pScrollBar->IsVisible()) {
+ pScrollBar->SetVisible(TRUE);
+ RePosChildWnd();
+ } else {
+ }
+ } else {
+ if (pScrollBar->IsVisible()) {
+ pScrollBar->SetVisible(FALSE);
+ RePosChildWnd();
+ }
+
+ if (m_pListContent)
+ m_pListContent->SetScrollPos(CPDF_Point(0.0f, 0.0f));
+ }
+
+ pScrollBar->OnNotify(pWnd, PNM_SETSCROLLINFO, wParam, lParam);
+ }
+ }
+ return;
+ case PNM_SCROLLWINDOW:
+ if (m_pListContent) {
+ m_pListContent->SetScrollPos(CPDF_Point(0.0f, *(FX_FLOAT*)lParam));
+ m_pListContent->ResetFace();
+ m_pListContent->InvalidateRect(NULL);
+ }
+ return;
+ case PNM_SETSCROLLPOS:
+ if (CPWL_ScrollBar* pScrollBar = GetVScrollBar())
+ pScrollBar->OnNotify(pWnd, PNM_SETSCROLLPOS, wParam, lParam);
+ return;
+ }
+ }
}
-int32_t CPWL_IconList::GetSelect() const
-{
- return m_pListContent->GetSelect();
+void CPWL_IconList::SetSelect(int32_t nIndex) {
+ m_pListContent->SetSelect(nIndex);
}
-void CPWL_IconList::SetNotify(IPWL_IconList_Notify* pNotify)
-{
- m_pListContent->SetNotify(pNotify);
+void CPWL_IconList::SetTopItem(int32_t nIndex) {
+ m_pListContent->ScrollToItem(nIndex);
}
-void CPWL_IconList::EnableNotify(FX_BOOL bNotify)
-{
- m_pListContent->EnableNotify(bNotify);
-}
-
-void CPWL_IconList::SetListData(int32_t nItemIndex, void* pData)
-{
- m_pListContent->SetListData(nItemIndex, pData);
-}
-
-void CPWL_IconList::SetListIcon(int32_t nItemIndex, int32_t nIconIndex)
-{
- m_pListContent->SetListIcon(nItemIndex, nIconIndex);
-}
-
-void CPWL_IconList::SetListString(int32_t nItemIndex, const CFX_WideString& str)
-{
- m_pListContent->SetListString(nItemIndex, str);
-}
-
-CFX_WideString CPWL_IconList::GetListString(int32_t nItemIndex) const
-{
- return m_pListContent->GetListString(nItemIndex);
-}
-
-void CPWL_IconList::SetIconFillColor(const CPWL_Color& color)
-{
- m_pListContent->SetIconFillColor(color);
-}
-
-FX_BOOL CPWL_IconList::OnMouseWheel(short zDelta, const CPDF_Point & point, FX_DWORD nFlag)
-{
- CPDF_Point ptScroll = m_pListContent->GetScrollPos();
- CPDF_Rect rcScroll = m_pListContent->GetScrollArea();
- CPDF_Rect rcContents = m_pListContent->GetClientRect();
+int32_t CPWL_IconList::GetSelect() const {
+ return m_pListContent->GetSelect();
+}
- if (rcScroll.top - rcScroll.bottom > rcContents.Height())
- {
- CPDF_Point ptNew = ptScroll;
+void CPWL_IconList::SetNotify(IPWL_IconList_Notify* pNotify) {
+ m_pListContent->SetNotify(pNotify);
+}
- if (zDelta > 0)
- ptNew.y += 30;
- else
- ptNew.y -= 30;
+void CPWL_IconList::EnableNotify(FX_BOOL bNotify) {
+ m_pListContent->EnableNotify(bNotify);
+}
- if (ptNew.y > rcScroll.top)
- ptNew.y = rcScroll.top;
- if (ptNew.y < rcScroll.bottom + rcContents.Height())
- ptNew.y = rcScroll.bottom + rcContents.Height();
- if (ptNew.y < rcScroll.bottom)
- ptNew.y = rcScroll.bottom;
+void CPWL_IconList::SetListData(int32_t nItemIndex, void* pData) {
+ m_pListContent->SetListData(nItemIndex, pData);
+}
- if (ptNew.y != ptScroll.y)
- {
- m_pListContent->SetScrollPos(ptNew);
- m_pListContent->ResetFace();
- m_pListContent->InvalidateRect(NULL);
+void CPWL_IconList::SetListIcon(int32_t nItemIndex, int32_t nIconIndex) {
+ m_pListContent->SetListIcon(nItemIndex, nIconIndex);
+}
- if (CPWL_ScrollBar* pScrollBar = GetVScrollBar())
- pScrollBar->OnNotify(this, PNM_SETSCROLLPOS, SBT_VSCROLL, (intptr_t)&ptNew.y);
+void CPWL_IconList::SetListString(int32_t nItemIndex,
+ const CFX_WideString& str) {
+ m_pListContent->SetListString(nItemIndex, str);
+}
- return TRUE;
- }
- }
+CFX_WideString CPWL_IconList::GetListString(int32_t nItemIndex) const {
+ return m_pListContent->GetListString(nItemIndex);
+}
- return FALSE;
+void CPWL_IconList::SetIconFillColor(const CPWL_Color& color) {
+ m_pListContent->SetIconFillColor(color);
}
+FX_BOOL CPWL_IconList::OnMouseWheel(short zDelta,
+ const CPDF_Point& point,
+ FX_DWORD nFlag) {
+ CPDF_Point ptScroll = m_pListContent->GetScrollPos();
+ CPDF_Rect rcScroll = m_pListContent->GetScrollArea();
+ CPDF_Rect rcContents = m_pListContent->GetClientRect();
+
+ if (rcScroll.top - rcScroll.bottom > rcContents.Height()) {
+ CPDF_Point ptNew = ptScroll;
+
+ if (zDelta > 0)
+ ptNew.y += 30;
+ else
+ ptNew.y -= 30;
+
+ if (ptNew.y > rcScroll.top)
+ ptNew.y = rcScroll.top;
+ if (ptNew.y < rcScroll.bottom + rcContents.Height())
+ ptNew.y = rcScroll.bottom + rcContents.Height();
+ if (ptNew.y < rcScroll.bottom)
+ ptNew.y = rcScroll.bottom;
+
+ if (ptNew.y != ptScroll.y) {
+ m_pListContent->SetScrollPos(ptNew);
+ m_pListContent->ResetFace();
+ m_pListContent->InvalidateRect(NULL);
+
+ if (CPWL_ScrollBar* pScrollBar = GetVScrollBar())
+ pScrollBar->OnNotify(this, PNM_SETSCROLLPOS, SBT_VSCROLL,
+ (intptr_t)&ptNew.y);
+
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
diff --git a/fpdfsdk/src/pdfwindow/PWL_Label.cpp b/fpdfsdk/src/pdfwindow/PWL_Label.cpp
index e1780c69a8..797270ebba 100644
--- a/fpdfsdk/src/pdfwindow/PWL_Label.cpp
+++ b/fpdfsdk/src/pdfwindow/PWL_Label.cpp
@@ -11,177 +11,144 @@
/* ---------------------------- CPWL_Label ------------------------------ */
-CPWL_Label::CPWL_Label() : m_pEdit(NULL)
-{
- m_pEdit = IFX_Edit::NewEdit();
-
- ASSERT(m_pEdit != NULL);
+CPWL_Label::CPWL_Label() : m_pEdit(NULL) {
+ m_pEdit = IFX_Edit::NewEdit();
+
+ ASSERT(m_pEdit != NULL);
}
-CPWL_Label::~CPWL_Label()
-{
- IFX_Edit::DelEdit(m_pEdit);
+CPWL_Label::~CPWL_Label() {
+ IFX_Edit::DelEdit(m_pEdit);
}
-
-CFX_ByteString CPWL_Label::GetClassName() const
-{
- return "CPWL_Label";
-}
-
-void CPWL_Label::OnCreated()
-{
- SetParamByFlag();
- SetFontSize(GetCreationParam().fFontSize);
-
- m_pEdit->SetFontMap(GetFontMap());
- m_pEdit->Initialize();
-
- if (HasFlag(PES_TEXTOVERFLOW))
- {
- SetClipRect(CPDF_Rect(0.0f,0.0f,0.0f,0.0f));
- m_pEdit->SetTextOverflow(TRUE);
- }
+
+CFX_ByteString CPWL_Label::GetClassName() const {
+ return "CPWL_Label";
}
-void CPWL_Label::SetText(const FX_WCHAR* csText)
-{
- m_pEdit->SetText(csText);
+void CPWL_Label::OnCreated() {
+ SetParamByFlag();
+ SetFontSize(GetCreationParam().fFontSize);
+
+ m_pEdit->SetFontMap(GetFontMap());
+ m_pEdit->Initialize();
+
+ if (HasFlag(PES_TEXTOVERFLOW)) {
+ SetClipRect(CPDF_Rect(0.0f, 0.0f, 0.0f, 0.0f));
+ m_pEdit->SetTextOverflow(TRUE);
+ }
}
-void CPWL_Label::RePosChildWnd()
-{
- m_pEdit->SetPlateRect(GetClientRect());
+void CPWL_Label::SetText(const FX_WCHAR* csText) {
+ m_pEdit->SetText(csText);
}
-void CPWL_Label::SetFontSize(FX_FLOAT fFontSize)
-{
- m_pEdit->SetFontSize(fFontSize);
+void CPWL_Label::RePosChildWnd() {
+ m_pEdit->SetPlateRect(GetClientRect());
}
-FX_FLOAT CPWL_Label::GetFontSize() const
-{
- return m_pEdit->GetFontSize();
+void CPWL_Label::SetFontSize(FX_FLOAT fFontSize) {
+ m_pEdit->SetFontSize(fFontSize);
}
-void CPWL_Label::SetParamByFlag()
-{
- if (HasFlag(PES_LEFT))
- {
- m_pEdit->SetAlignmentH(0);
- }
- else if (HasFlag(PES_MIDDLE))
- {
- m_pEdit->SetAlignmentH(1);
- }
- else if (HasFlag(PES_RIGHT))
- {
- m_pEdit->SetAlignmentH(2);
- }
- else
- {
- m_pEdit->SetAlignmentH(0);
- }
+FX_FLOAT CPWL_Label::GetFontSize() const {
+ return m_pEdit->GetFontSize();
+}
+
+void CPWL_Label::SetParamByFlag() {
+ if (HasFlag(PES_LEFT)) {
+ m_pEdit->SetAlignmentH(0);
+ } else if (HasFlag(PES_MIDDLE)) {
+ m_pEdit->SetAlignmentH(1);
+ } else if (HasFlag(PES_RIGHT)) {
+ m_pEdit->SetAlignmentH(2);
+ } else {
+ m_pEdit->SetAlignmentH(0);
+ }
- if (HasFlag(PES_TOP))
- {
- m_pEdit->SetAlignmentV(0);
- }
- else if (HasFlag(PES_CENTER))
- {
- m_pEdit->SetAlignmentV(1);
- }
- else if (HasFlag(PES_BOTTOM))
- {
- m_pEdit->SetAlignmentV(2);
- }
- else
- {
- m_pEdit->SetAlignmentV(0);
- }
+ if (HasFlag(PES_TOP)) {
+ m_pEdit->SetAlignmentV(0);
+ } else if (HasFlag(PES_CENTER)) {
+ m_pEdit->SetAlignmentV(1);
+ } else if (HasFlag(PES_BOTTOM)) {
+ m_pEdit->SetAlignmentV(2);
+ } else {
+ m_pEdit->SetAlignmentV(0);
+ }
- if (HasFlag(PES_PASSWORD))
- {
- m_pEdit->SetPasswordChar('*');
- }
+ if (HasFlag(PES_PASSWORD)) {
+ m_pEdit->SetPasswordChar('*');
+ }
- m_pEdit->SetMultiLine(HasFlag(PES_MULTILINE));
- m_pEdit->SetAutoReturn(HasFlag(PES_AUTORETURN));
- m_pEdit->SetAutoFontSize(HasFlag(PWS_AUTOFONTSIZE));
- m_pEdit->SetAutoScroll(HasFlag(PES_AUTOSCROLL));
+ m_pEdit->SetMultiLine(HasFlag(PES_MULTILINE));
+ m_pEdit->SetAutoReturn(HasFlag(PES_AUTORETURN));
+ m_pEdit->SetAutoFontSize(HasFlag(PWS_AUTOFONTSIZE));
+ m_pEdit->SetAutoScroll(HasFlag(PES_AUTOSCROLL));
}
-void CPWL_Label::DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device)
-{
- CPWL_Wnd::DrawThisAppearance(pDevice,pUser2Device);
+void CPWL_Label::DrawThisAppearance(CFX_RenderDevice* pDevice,
+ CPDF_Matrix* pUser2Device) {
+ CPWL_Wnd::DrawThisAppearance(pDevice, pUser2Device);
- GetClientRect();
+ GetClientRect();
- CPDF_Rect rcClip;
- CPVT_WordRange wrRange = m_pEdit->GetVisibleWordRange();
- CPVT_WordRange* pRange = NULL;
+ CPDF_Rect rcClip;
+ CPVT_WordRange wrRange = m_pEdit->GetVisibleWordRange();
+ CPVT_WordRange* pRange = NULL;
- if (!HasFlag(PES_TEXTOVERFLOW))
- {
- rcClip = GetClientRect();
- pRange = &wrRange;
- }
-IFX_SystemHandler* pSysHandler = GetSystemHandler();
- IFX_Edit::DrawEdit(pDevice, pUser2Device, m_pEdit,
- CPWL_Utils::PWLColorToFXColor(GetTextColor(), GetTransparency()),
- CPWL_Utils::PWLColorToFXColor(GetTextStrokeColor(), GetTransparency()),
- rcClip, CPDF_Point(0.0f,0.0f), pRange,pSysHandler, NULL);
+ if (!HasFlag(PES_TEXTOVERFLOW)) {
+ rcClip = GetClientRect();
+ pRange = &wrRange;
+ }
+ IFX_SystemHandler* pSysHandler = GetSystemHandler();
+ IFX_Edit::DrawEdit(
+ pDevice, pUser2Device, m_pEdit,
+ CPWL_Utils::PWLColorToFXColor(GetTextColor(), GetTransparency()),
+ CPWL_Utils::PWLColorToFXColor(GetTextStrokeColor(), GetTransparency()),
+ rcClip, CPDF_Point(0.0f, 0.0f), pRange, pSysHandler, NULL);
}
-void CPWL_Label::SetHorzScale(int32_t nHorzScale)
-{
- m_pEdit->SetHorzScale(nHorzScale);
+void CPWL_Label::SetHorzScale(int32_t nHorzScale) {
+ m_pEdit->SetHorzScale(nHorzScale);
}
-void CPWL_Label::SetCharSpace(FX_FLOAT fCharSpace)
-{
- m_pEdit->SetCharSpace(fCharSpace);
+void CPWL_Label::SetCharSpace(FX_FLOAT fCharSpace) {
+ m_pEdit->SetCharSpace(fCharSpace);
}
-CPDF_Rect CPWL_Label::GetContentRect() const
-{
- return m_pEdit->GetContentRect();
+CPDF_Rect CPWL_Label::GetContentRect() const {
+ return m_pEdit->GetContentRect();
}
-void CPWL_Label::GetThisAppearanceStream(CFX_ByteTextBuf & sAppStream)
-{
- CPWL_Wnd::GetThisAppearanceStream(sAppStream);
+void CPWL_Label::GetThisAppearanceStream(CFX_ByteTextBuf& sAppStream) {
+ CPWL_Wnd::GetThisAppearanceStream(sAppStream);
- sAppStream << GetTextAppearanceStream(CPDF_Point(0.0f, 0.0f));
+ sAppStream << GetTextAppearanceStream(CPDF_Point(0.0f, 0.0f));
}
-CFX_ByteString CPWL_Label::GetTextAppearanceStream(const CPDF_Point & ptOffset) const
-{
- CFX_ByteTextBuf sRet;
- CFX_ByteString sEdit = CPWL_Utils::GetEditAppStream(m_pEdit,ptOffset);
+CFX_ByteString CPWL_Label::GetTextAppearanceStream(
+ const CPDF_Point& ptOffset) const {
+ CFX_ByteTextBuf sRet;
+ CFX_ByteString sEdit = CPWL_Utils::GetEditAppStream(m_pEdit, ptOffset);
- if (sEdit.GetLength() > 0)
- {
- sRet << "BT\n" << CPWL_Utils::GetColorAppStream(GetTextColor()) << sEdit << "ET\n";
- }
+ if (sEdit.GetLength() > 0) {
+ sRet << "BT\n" << CPWL_Utils::GetColorAppStream(GetTextColor()) << sEdit
+ << "ET\n";
+ }
- return sRet.GetByteString();
+ return sRet.GetByteString();
}
-CFX_WideString CPWL_Label::GetText() const
-{
- return m_pEdit->GetText();
+CFX_WideString CPWL_Label::GetText() const {
+ return m_pEdit->GetText();
}
-void CPWL_Label::SetLimitChar(int32_t nLimitChar)
-{
- m_pEdit->SetLimitChar(nLimitChar);
+void CPWL_Label::SetLimitChar(int32_t nLimitChar) {
+ m_pEdit->SetLimitChar(nLimitChar);
}
-int32_t CPWL_Label::GetTotalWords()
-{
- if (m_pEdit)
- return m_pEdit->GetTotalWords();
+int32_t CPWL_Label::GetTotalWords() {
+ if (m_pEdit)
+ return m_pEdit->GetTotalWords();
- return 0;
+ return 0;
}
-
diff --git a/fpdfsdk/src/pdfwindow/PWL_ListBox.cpp b/fpdfsdk/src/pdfwindow/PWL_ListBox.cpp
index 48fb409b7b..ba75e55fdf 100644
--- a/fpdfsdk/src/pdfwindow/PWL_ListBox.cpp
+++ b/fpdfsdk/src/pdfwindow/PWL_ListBox.cpp
@@ -12,587 +12,531 @@
#include "../../include/pdfwindow/PWL_EditCtrl.h"
#include "../../include/pdfwindow/PWL_Edit.h"
-#define IsFloatZero(f) ((f) < 0.0001 && (f) > -0.0001)
-#define IsFloatBigger(fa,fb) ((fa) > (fb) && !IsFloatZero((fa) - (fb)))
-#define IsFloatSmaller(fa,fb) ((fa) < (fb) && !IsFloatZero((fa) - (fb)))
-#define IsFloatEqual(fa,fb) IsFloatZero((fa)-(fb))
+#define IsFloatZero(f) ((f) < 0.0001 && (f) > -0.0001)
+#define IsFloatBigger(fa, fb) ((fa) > (fb) && !IsFloatZero((fa) - (fb)))
+#define IsFloatSmaller(fa, fb) ((fa) < (fb) && !IsFloatZero((fa) - (fb)))
+#define IsFloatEqual(fa, fb) IsFloatZero((fa) - (fb))
/* ------------------------ CPWL_List_Notify ----------------------- */
-CPWL_List_Notify::CPWL_List_Notify(CPWL_ListBox* pList) : m_pList(pList)
-{
- ASSERT(m_pList != NULL);
+CPWL_List_Notify::CPWL_List_Notify(CPWL_ListBox* pList) : m_pList(pList) {
+ ASSERT(m_pList != NULL);
}
-CPWL_List_Notify::~CPWL_List_Notify()
-{
-}
+CPWL_List_Notify::~CPWL_List_Notify() {}
-void CPWL_List_Notify::IOnSetScrollInfoY(FX_FLOAT fPlateMin, FX_FLOAT fPlateMax,
- FX_FLOAT fContentMin, FX_FLOAT fContentMax,
- FX_FLOAT fSmallStep, FX_FLOAT fBigStep)
-{
- PWL_SCROLL_INFO Info;
+void CPWL_List_Notify::IOnSetScrollInfoY(FX_FLOAT fPlateMin,
+ FX_FLOAT fPlateMax,
+ FX_FLOAT fContentMin,
+ FX_FLOAT fContentMax,
+ FX_FLOAT fSmallStep,
+ FX_FLOAT fBigStep) {
+ PWL_SCROLL_INFO Info;
- Info.fPlateWidth = fPlateMax - fPlateMin;
- Info.fContentMin = fContentMin;
- Info.fContentMax = fContentMax;
- Info.fSmallStep = fSmallStep;
- Info.fBigStep = fBigStep;
+ Info.fPlateWidth = fPlateMax - fPlateMin;
+ Info.fContentMin = fContentMin;
+ Info.fContentMax = fContentMax;
+ Info.fSmallStep = fSmallStep;
+ Info.fBigStep = fBigStep;
- m_pList->OnNotify(m_pList,PNM_SETSCROLLINFO,SBT_VSCROLL,(intptr_t)&Info);
+ m_pList->OnNotify(m_pList, PNM_SETSCROLLINFO, SBT_VSCROLL, (intptr_t)&Info);
- if (CPWL_ScrollBar * pScroll = m_pList->GetVScrollBar())
- {
- if (IsFloatBigger(Info.fPlateWidth,Info.fContentMax-Info.fContentMin)
- || IsFloatEqual(Info.fPlateWidth,Info.fContentMax-Info.fContentMin))
- {
- if (pScroll->IsVisible())
- {
- pScroll->SetVisible(FALSE);
- m_pList->RePosChildWnd();
- }
- }
- else
- {
- if (!pScroll->IsVisible())
- {
- pScroll->SetVisible(TRUE);
- m_pList->RePosChildWnd();
- }
- }
- }
+ if (CPWL_ScrollBar* pScroll = m_pList->GetVScrollBar()) {
+ if (IsFloatBigger(Info.fPlateWidth, Info.fContentMax - Info.fContentMin) ||
+ IsFloatEqual(Info.fPlateWidth, Info.fContentMax - Info.fContentMin)) {
+ if (pScroll->IsVisible()) {
+ pScroll->SetVisible(FALSE);
+ m_pList->RePosChildWnd();
+ }
+ } else {
+ if (!pScroll->IsVisible()) {
+ pScroll->SetVisible(TRUE);
+ m_pList->RePosChildWnd();
+ }
+ }
+ }
}
-void CPWL_List_Notify::IOnSetScrollPosY(FX_FLOAT fy)
-{
- m_pList->OnNotify(m_pList,PNM_SETSCROLLPOS,SBT_VSCROLL,(intptr_t)&fy);
+void CPWL_List_Notify::IOnSetScrollPosY(FX_FLOAT fy) {
+ m_pList->OnNotify(m_pList, PNM_SETSCROLLPOS, SBT_VSCROLL, (intptr_t)&fy);
}
-void CPWL_List_Notify::IOnInvalidateRect(CPDF_Rect * pRect)
-{
- m_pList->InvalidateRect(pRect);
+void CPWL_List_Notify::IOnInvalidateRect(CPDF_Rect* pRect) {
+ m_pList->InvalidateRect(pRect);
}
/* --------------------------- CPWL_ListBox ---------------------------- */
-CPWL_ListBox::CPWL_ListBox() :
- m_pList(NULL),
- m_pListNotify(NULL),
- m_bMouseDown(FALSE),
- m_bHoverSel(FALSE),
- m_pFillerNotify(NULL)
-{
- m_pList = IFX_List::NewList();
+CPWL_ListBox::CPWL_ListBox()
+ : m_pList(NULL),
+ m_pListNotify(NULL),
+ m_bMouseDown(FALSE),
+ m_bHoverSel(FALSE),
+ m_pFillerNotify(NULL) {
+ m_pList = IFX_List::NewList();
- ASSERT(m_pList != NULL);
+ ASSERT(m_pList != NULL);
}
-CPWL_ListBox::~CPWL_ListBox()
-{
- IFX_List::DelList(m_pList);
- delete m_pListNotify;
- m_pListNotify = NULL;
+CPWL_ListBox::~CPWL_ListBox() {
+ IFX_List::DelList(m_pList);
+ delete m_pListNotify;
+ m_pListNotify = NULL;
}
-CFX_ByteString CPWL_ListBox::GetClassName() const
-{
- return "CPWL_ListBox";
+CFX_ByteString CPWL_ListBox::GetClassName() const {
+ return "CPWL_ListBox";
}
-void CPWL_ListBox::OnCreated()
-{
- if (m_pList)
- {
- delete m_pListNotify;
+void CPWL_ListBox::OnCreated() {
+ if (m_pList) {
+ delete m_pListNotify;
- m_pList->SetFontMap(GetFontMap());
- m_pList->SetNotify(m_pListNotify = new CPWL_List_Notify(this));
+ m_pList->SetFontMap(GetFontMap());
+ m_pList->SetNotify(m_pListNotify = new CPWL_List_Notify(this));
+
+ SetHoverSel(HasFlag(PLBS_HOVERSEL));
+ m_pList->SetMultipleSel(HasFlag(PLBS_MULTIPLESEL));
+ m_pList->SetFontSize(GetCreationParam().fFontSize);
+
+ m_bHoverSel = HasFlag(PLBS_HOVERSEL);
+ }
+}
+
+void CPWL_ListBox::OnDestroy() {
+ delete m_pListNotify;
+ m_pListNotify = NULL;
+}
+
+void CPWL_ListBox::GetThisAppearanceStream(CFX_ByteTextBuf& sAppStream) {
+ CPWL_Wnd::GetThisAppearanceStream(sAppStream);
+
+ CFX_ByteTextBuf sListItems;
+
+ if (m_pList) {
+ CPDF_Rect rcPlate = m_pList->GetPlateRect();
+ for (int32_t i = 0, sz = m_pList->GetCount(); i < sz; i++) {
+ CPDF_Rect rcItem = m_pList->GetItemRect(i);
+
+ if (rcItem.bottom > rcPlate.top || rcItem.top < rcPlate.bottom)
+ continue;
+
+ CPDF_Point ptOffset(rcItem.left, (rcItem.top + rcItem.bottom) * 0.5f);
+ if (m_pList->IsItemSelected(i)) {
+ sListItems << CPWL_Utils::GetRectFillAppStream(
+ rcItem, PWL_DEFAULT_SELBACKCOLOR);
+ CFX_ByteString sItem =
+ CPWL_Utils::GetEditAppStream(m_pList->GetItemEdit(i), ptOffset);
+ if (sItem.GetLength() > 0) {
+ sListItems << "BT\n"
+ << CPWL_Utils::GetColorAppStream(PWL_DEFAULT_SELTEXTCOLOR)
+ << sItem << "ET\n";
+ }
+ } else {
+ CFX_ByteString sItem =
+ CPWL_Utils::GetEditAppStream(m_pList->GetItemEdit(i), ptOffset);
+ if (sItem.GetLength() > 0) {
+ sListItems << "BT\n" << CPWL_Utils::GetColorAppStream(GetTextColor())
+ << sItem << "ET\n";
+ }
+ }
+ }
+ }
+
+ if (sListItems.GetLength() > 0) {
+ CFX_ByteTextBuf sClip;
+ CPDF_Rect rcClient = GetClientRect();
+
+ sClip << "q\n";
+ sClip << rcClient.left << " " << rcClient.bottom << " "
+ << rcClient.right - rcClient.left << " "
+ << rcClient.top - rcClient.bottom << " re W n\n";
+
+ sClip << sListItems << "Q\n";
+
+ sAppStream << "/Tx BMC\n" << sClip << "EMC\n";
+ }
+}
+
+void CPWL_ListBox::DrawThisAppearance(CFX_RenderDevice* pDevice,
+ CPDF_Matrix* pUser2Device) {
+ CPWL_Wnd::DrawThisAppearance(pDevice, pUser2Device);
+
+ if (m_pList) {
+ CPDF_Rect rcPlate = m_pList->GetPlateRect();
+ CPDF_Rect rcList = GetListRect();
+ CPDF_Rect rcClient = GetClientRect();
+
+ for (int32_t i = 0, sz = m_pList->GetCount(); i < sz; i++) {
+ CPDF_Rect rcItem = m_pList->GetItemRect(i);
+ if (rcItem.bottom > rcPlate.top || rcItem.top < rcPlate.bottom)
+ continue;
+
+ CPDF_Point ptOffset(rcItem.left, (rcItem.top + rcItem.bottom) * 0.5f);
+ if (IFX_Edit* pEdit = m_pList->GetItemEdit(i)) {
+ CPDF_Rect rcContent = pEdit->GetContentRect();
+ if (rcContent.Width() > rcClient.Width())
+ rcItem.Intersect(rcList);
+ else
+ rcItem.Intersect(rcClient);
+ }
+
+ if (m_pList->IsItemSelected(i)) {
+ // CPWL_Utils::DrawFillRect(pDevice, pUser2Device, rcItem,
+ //ArgbEncode(255,0,51,113));
+ IFX_SystemHandler* pSysHandler = GetSystemHandler();
+ if (pSysHandler && pSysHandler->IsSelectionImplemented()) {
+ IFX_Edit::DrawEdit(
+ pDevice, pUser2Device, m_pList->GetItemEdit(i),
+ CPWL_Utils::PWLColorToFXColor(GetTextColor()),
+ CPWL_Utils::PWLColorToFXColor(GetTextStrokeColor()), rcList,
+ ptOffset, NULL, pSysHandler, m_pFormFiller);
+ pSysHandler->OutputSelectedRect(m_pFormFiller, rcItem);
+ } else {
+ CPWL_Utils::DrawFillRect(pDevice, pUser2Device, rcItem,
+ ArgbEncode(255, 0, 51, 113));
+ IFX_Edit::DrawEdit(pDevice, pUser2Device, m_pList->GetItemEdit(i),
+ ArgbEncode(255, 255, 255, 255), 0, rcList,
+ ptOffset, NULL, pSysHandler, m_pFormFiller);
+ }
+ } else {
+ IFX_SystemHandler* pSysHandler = GetSystemHandler();
+ IFX_Edit::DrawEdit(pDevice, pUser2Device, m_pList->GetItemEdit(i),
+ CPWL_Utils::PWLColorToFXColor(GetTextColor()),
+ CPWL_Utils::PWLColorToFXColor(GetTextStrokeColor()),
+ rcList, ptOffset, NULL, pSysHandler, NULL);
+ }
+ }
+ }
+}
+
+FX_BOOL CPWL_ListBox::OnKeyDown(FX_WORD nChar, FX_DWORD nFlag) {
+ CPWL_Wnd::OnKeyDown(nChar, nFlag);
+
+ if (!m_pList)
+ return FALSE;
+
+ switch (nChar) {
+ default:
+ return FALSE;
+ case FWL_VKEY_Up:
+ case FWL_VKEY_Down:
+ case FWL_VKEY_Home:
+ case FWL_VKEY_Left:
+ case FWL_VKEY_End:
+ case FWL_VKEY_Right:
+ break;
+ }
+
+ switch (nChar) {
+ case FWL_VKEY_Up:
+ m_pList->OnVK_UP(IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag));
+ break;
+ case FWL_VKEY_Down:
+ m_pList->OnVK_DOWN(IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag));
+ break;
+ case FWL_VKEY_Home:
+ m_pList->OnVK_HOME(IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag));
+ break;
+ case FWL_VKEY_Left:
+ m_pList->OnVK_LEFT(IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag));
+ break;
+ case FWL_VKEY_End:
+ m_pList->OnVK_END(IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag));
+ break;
+ case FWL_VKEY_Right:
+ m_pList->OnVK_RIGHT(IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag));
+ break;
+ case FWL_VKEY_Delete:
+ break;
+ }
+
+ FX_BOOL bExit = FALSE;
+ OnNotifySelChanged(TRUE, bExit, nFlag);
+
+ return TRUE;
+}
+
+FX_BOOL CPWL_ListBox::OnChar(FX_WORD nChar, FX_DWORD nFlag) {
+ CPWL_Wnd::OnChar(nChar, nFlag);
+
+ if (!m_pList)
+ return FALSE;
+
+ if (!m_pList->OnChar(nChar, IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag)))
+ return FALSE;
+
+ FX_BOOL bExit = FALSE;
+ OnNotifySelChanged(TRUE, bExit, nFlag);
+
+ return TRUE;
+}
+
+FX_BOOL CPWL_ListBox::OnLButtonDown(const CPDF_Point& point, FX_DWORD nFlag) {
+ CPWL_Wnd::OnLButtonDown(point, nFlag);
+
+ if (ClientHitTest(point)) {
+ m_bMouseDown = TRUE;
+ SetFocus();
+ SetCapture();
+
+ if (m_pList)
+ m_pList->OnMouseDown(point, IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag));
+ }
+
+ return TRUE;
+}
+
+FX_BOOL CPWL_ListBox::OnLButtonUp(const CPDF_Point& point, FX_DWORD nFlag) {
+ CPWL_Wnd::OnLButtonUp(point, nFlag);
+
+ if (m_bMouseDown) {
+ ReleaseCapture();
+ m_bMouseDown = FALSE;
+ }
+
+ FX_BOOL bExit = FALSE;
+ OnNotifySelChanged(FALSE, bExit, nFlag);
+
+ return TRUE;
+}
+
+void CPWL_ListBox::SetHoverSel(FX_BOOL bHoverSel) {
+ m_bHoverSel = bHoverSel;
+}
+
+FX_BOOL CPWL_ListBox::OnMouseMove(const CPDF_Point& point, FX_DWORD nFlag) {
+ CPWL_Wnd::OnMouseMove(point, nFlag);
+
+ if (m_bHoverSel && !IsCaptureMouse() && ClientHitTest(point)) {
+ if (m_pList)
+ m_pList->Select(m_pList->GetItemIndex(point));
+ }
- SetHoverSel(HasFlag(PLBS_HOVERSEL));
- m_pList->SetMultipleSel(HasFlag(PLBS_MULTIPLESEL));
- m_pList->SetFontSize(GetCreationParam().fFontSize);
+ if (m_bMouseDown) {
+ if (m_pList)
+ m_pList->OnMouseMove(point, IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag));
+ }
- m_bHoverSel = HasFlag(PLBS_HOVERSEL);
- }
+ return TRUE;
}
-void CPWL_ListBox::OnDestroy()
-{
- delete m_pListNotify;
- m_pListNotify = NULL;
-}
-
-void CPWL_ListBox::GetThisAppearanceStream(CFX_ByteTextBuf & sAppStream)
-{
- CPWL_Wnd::GetThisAppearanceStream(sAppStream);
-
- CFX_ByteTextBuf sListItems;
-
- if (m_pList)
- {
- CPDF_Rect rcPlate = m_pList->GetPlateRect();
- for (int32_t i=0,sz=m_pList->GetCount(); i<sz; i++)
- {
- CPDF_Rect rcItem = m_pList->GetItemRect(i);
-
- if (rcItem.bottom > rcPlate.top || rcItem.top < rcPlate.bottom) continue;
-
- CPDF_Point ptOffset(rcItem.left, (rcItem.top + rcItem.bottom) * 0.5f);
- if (m_pList->IsItemSelected(i))
- {
- sListItems << CPWL_Utils::GetRectFillAppStream(rcItem,PWL_DEFAULT_SELBACKCOLOR);
- CFX_ByteString sItem = CPWL_Utils::GetEditAppStream(m_pList->GetItemEdit(i), ptOffset);
- if (sItem.GetLength() > 0)
- {
- sListItems << "BT\n" << CPWL_Utils::GetColorAppStream(PWL_DEFAULT_SELTEXTCOLOR) << sItem << "ET\n";
- }
- }
- else
- {
- CFX_ByteString sItem = CPWL_Utils::GetEditAppStream(m_pList->GetItemEdit(i), ptOffset);
- if (sItem.GetLength() > 0)
- {
- sListItems << "BT\n" << CPWL_Utils::GetColorAppStream(GetTextColor()) << sItem << "ET\n";
- }
- }
- }
- }
-
- if (sListItems.GetLength() > 0)
- {
- CFX_ByteTextBuf sClip;
- CPDF_Rect rcClient = GetClientRect();
-
- sClip << "q\n";
- sClip << rcClient.left << " " << rcClient.bottom << " "
- << rcClient.right - rcClient.left << " " << rcClient.top - rcClient.bottom << " re W n\n";
-
- sClip << sListItems << "Q\n";
-
- sAppStream << "/Tx BMC\n" << sClip << "EMC\n";
- }
-}
-
-void CPWL_ListBox::DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device)
-{
- CPWL_Wnd::DrawThisAppearance(pDevice,pUser2Device);
-
- if (m_pList)
- {
- CPDF_Rect rcPlate = m_pList->GetPlateRect();
- CPDF_Rect rcList = GetListRect();
- CPDF_Rect rcClient = GetClientRect();
-
- for (int32_t i=0,sz=m_pList->GetCount(); i<sz; i++)
- {
- CPDF_Rect rcItem = m_pList->GetItemRect(i);
- if (rcItem.bottom > rcPlate.top || rcItem.top < rcPlate.bottom) continue;
-
- CPDF_Point ptOffset(rcItem.left, (rcItem.top + rcItem.bottom) * 0.5f);
- if (IFX_Edit* pEdit = m_pList->GetItemEdit(i))
- {
- CPDF_Rect rcContent = pEdit->GetContentRect();
- if (rcContent.Width() > rcClient.Width())
- rcItem.Intersect(rcList);
- else
- rcItem.Intersect(rcClient);
- }
-
- if (m_pList->IsItemSelected(i))
- {
- // CPWL_Utils::DrawFillRect(pDevice, pUser2Device, rcItem, ArgbEncode(255,0,51,113));
- IFX_SystemHandler* pSysHandler = GetSystemHandler();
- if(pSysHandler && pSysHandler->IsSelectionImplemented())
- {
- IFX_Edit::DrawEdit(pDevice, pUser2Device, m_pList->GetItemEdit(i), CPWL_Utils::PWLColorToFXColor(GetTextColor()), CPWL_Utils::PWLColorToFXColor(GetTextStrokeColor()),
- rcList, ptOffset, NULL,pSysHandler, m_pFormFiller);
- pSysHandler->OutputSelectedRect(m_pFormFiller, rcItem);
- }
- else
- {
- CPWL_Utils::DrawFillRect(pDevice, pUser2Device, rcItem, ArgbEncode(255,0,51,113));
- IFX_Edit::DrawEdit(pDevice, pUser2Device, m_pList->GetItemEdit(i), ArgbEncode(255,255,255,255), 0,
- rcList, ptOffset, NULL, pSysHandler, m_pFormFiller);
- }
- }
- else
- {
- IFX_SystemHandler* pSysHandler = GetSystemHandler();
- IFX_Edit::DrawEdit(pDevice, pUser2Device, m_pList->GetItemEdit(i),
- CPWL_Utils::PWLColorToFXColor(GetTextColor()),
- CPWL_Utils::PWLColorToFXColor(GetTextStrokeColor()),
- rcList, ptOffset, NULL,pSysHandler, NULL);
-
- }
- }
- }
-}
-
-FX_BOOL CPWL_ListBox::OnKeyDown(FX_WORD nChar, FX_DWORD nFlag)
-{
- CPWL_Wnd::OnKeyDown(nChar, nFlag);
-
- if (!m_pList) return FALSE;
-
- switch (nChar)
- {
- default:
- return FALSE;
- case FWL_VKEY_Up:
- case FWL_VKEY_Down:
- case FWL_VKEY_Home:
- case FWL_VKEY_Left:
- case FWL_VKEY_End:
- case FWL_VKEY_Right:
- break;
- }
-
- switch (nChar)
- {
- case FWL_VKEY_Up:
- m_pList->OnVK_UP(IsSHIFTpressed(nFlag),IsCTRLpressed(nFlag));
- break;
- case FWL_VKEY_Down:
- m_pList->OnVK_DOWN(IsSHIFTpressed(nFlag),IsCTRLpressed(nFlag));
- break;
- case FWL_VKEY_Home:
- m_pList->OnVK_HOME(IsSHIFTpressed(nFlag),IsCTRLpressed(nFlag));
- break;
- case FWL_VKEY_Left:
- m_pList->OnVK_LEFT(IsSHIFTpressed(nFlag),IsCTRLpressed(nFlag));
- break;
- case FWL_VKEY_End:
- m_pList->OnVK_END(IsSHIFTpressed(nFlag),IsCTRLpressed(nFlag));
- break;
- case FWL_VKEY_Right:
- m_pList->OnVK_RIGHT(IsSHIFTpressed(nFlag),IsCTRLpressed(nFlag));
- break;
- case FWL_VKEY_Delete:
- break;
- }
-
- FX_BOOL bExit = FALSE;
- OnNotifySelChanged(TRUE,bExit,nFlag);
-
- return TRUE;
-}
-
-FX_BOOL CPWL_ListBox::OnChar(FX_WORD nChar, FX_DWORD nFlag)
-{
- CPWL_Wnd::OnChar(nChar,nFlag);
-
- if (!m_pList) return FALSE;
-
- if (!m_pList->OnChar(nChar,IsSHIFTpressed(nFlag),IsCTRLpressed(nFlag))) return FALSE;
-
- FX_BOOL bExit = FALSE;
- OnNotifySelChanged(TRUE,bExit, nFlag);
-
- return TRUE;
-}
-
-FX_BOOL CPWL_ListBox::OnLButtonDown(const CPDF_Point & point, FX_DWORD nFlag)
-{
- CPWL_Wnd::OnLButtonDown(point,nFlag);
-
- if (ClientHitTest(point))
- {
- m_bMouseDown = TRUE;
- SetFocus();
- SetCapture();
-
- if (m_pList)
- m_pList->OnMouseDown(point,IsSHIFTpressed(nFlag),IsCTRLpressed(nFlag));
- }
-
- return TRUE;
-}
-
-FX_BOOL CPWL_ListBox::OnLButtonUp(const CPDF_Point & point, FX_DWORD nFlag)
-{
- CPWL_Wnd::OnLButtonUp(point,nFlag);
-
- if (m_bMouseDown)
- {
- ReleaseCapture();
- m_bMouseDown = FALSE;
- }
-
- FX_BOOL bExit = FALSE;
- OnNotifySelChanged(FALSE,bExit,nFlag);
-
- return TRUE;
-}
-
-void CPWL_ListBox::SetHoverSel(FX_BOOL bHoverSel)
-{
- m_bHoverSel = bHoverSel;
-}
-
-FX_BOOL CPWL_ListBox::OnMouseMove(const CPDF_Point & point, FX_DWORD nFlag)
-{
- CPWL_Wnd::OnMouseMove(point, nFlag);
-
- if (m_bHoverSel && !IsCaptureMouse() && ClientHitTest(point))
- {
- if (m_pList)
- m_pList->Select(m_pList->GetItemIndex(point));
- }
-
- if (m_bMouseDown)
- {
- if (m_pList)
- m_pList->OnMouseMove(point,IsSHIFTpressed(nFlag),IsCTRLpressed(nFlag));
- }
-
- return TRUE;
-}
-
-void CPWL_ListBox::OnNotify(CPWL_Wnd* pWnd, FX_DWORD msg, intptr_t wParam, intptr_t lParam)
-{
- CPWL_Wnd::OnNotify(pWnd,msg,wParam,lParam);
-
- FX_FLOAT fPos;
-
- switch (msg)
- {
- case PNM_SETSCROLLINFO:
- switch (wParam)
- {
- case SBT_VSCROLL:
- if (CPWL_Wnd * pChild = GetVScrollBar())
- {
- pChild->OnNotify(pWnd,PNM_SETSCROLLINFO,wParam,lParam);
- }
- break;
- }
- break;
- case PNM_SETSCROLLPOS:
- switch (wParam)
- {
- case SBT_VSCROLL:
- if (CPWL_Wnd * pChild = GetVScrollBar())
- {
- pChild->OnNotify(pWnd,PNM_SETSCROLLPOS,wParam,lParam);
- }
- break;
- }
- break;
- case PNM_SCROLLWINDOW:
- fPos = *(FX_FLOAT*)lParam;
- switch (wParam)
- {
- case SBT_VSCROLL:
- if (m_pList)
- m_pList->SetScrollPos(CPDF_Point(0,fPos));
- break;
- }
- break;
- }
+void CPWL_ListBox::OnNotify(CPWL_Wnd* pWnd,
+ FX_DWORD msg,
+ intptr_t wParam,
+ intptr_t lParam) {
+ CPWL_Wnd::OnNotify(pWnd, msg, wParam, lParam);
+
+ FX_FLOAT fPos;
+
+ switch (msg) {
+ case PNM_SETSCROLLINFO:
+ switch (wParam) {
+ case SBT_VSCROLL:
+ if (CPWL_Wnd* pChild = GetVScrollBar()) {
+ pChild->OnNotify(pWnd, PNM_SETSCROLLINFO, wParam, lParam);
+ }
+ break;
+ }
+ break;
+ case PNM_SETSCROLLPOS:
+ switch (wParam) {
+ case SBT_VSCROLL:
+ if (CPWL_Wnd* pChild = GetVScrollBar()) {
+ pChild->OnNotify(pWnd, PNM_SETSCROLLPOS, wParam, lParam);
+ }
+ break;
+ }
+ break;
+ case PNM_SCROLLWINDOW:
+ fPos = *(FX_FLOAT*)lParam;
+ switch (wParam) {
+ case SBT_VSCROLL:
+ if (m_pList)
+ m_pList->SetScrollPos(CPDF_Point(0, fPos));
+ break;
+ }
+ break;
+ }
}
-void CPWL_ListBox::KillFocus()
-{
- CPWL_Wnd::KillFocus();
+void CPWL_ListBox::KillFocus() {
+ CPWL_Wnd::KillFocus();
}
-void CPWL_ListBox::RePosChildWnd()
-{
- CPWL_Wnd::RePosChildWnd();
+void CPWL_ListBox::RePosChildWnd() {
+ CPWL_Wnd::RePosChildWnd();
- if (m_pList)
- m_pList->SetPlateRect(GetListRect());
+ if (m_pList)
+ m_pList->SetPlateRect(GetListRect());
}
-void CPWL_ListBox::OnNotifySelChanged(FX_BOOL bKeyDown, FX_BOOL & bExit, FX_DWORD nFlag)
-{
- if (m_pFillerNotify)
- {
- FX_BOOL bRC = TRUE;
- CFX_WideString swChange = GetText();
- CFX_WideString strChangeEx;
- int nSelStart = 0;
- int nSelEnd = swChange.GetLength();
- m_pFillerNotify->OnBeforeKeyStroke(FALSE, GetAttachedData(), 0, swChange, strChangeEx, nSelStart, nSelEnd, bKeyDown, bRC, bExit, nFlag);
- if (bExit) return;
+void CPWL_ListBox::OnNotifySelChanged(FX_BOOL bKeyDown,
+ FX_BOOL& bExit,
+ FX_DWORD nFlag) {
+ if (m_pFillerNotify) {
+ FX_BOOL bRC = TRUE;
+ CFX_WideString swChange = GetText();
+ CFX_WideString strChangeEx;
+ int nSelStart = 0;
+ int nSelEnd = swChange.GetLength();
+ m_pFillerNotify->OnBeforeKeyStroke(FALSE, GetAttachedData(), 0, swChange,
+ strChangeEx, nSelStart, nSelEnd,
+ bKeyDown, bRC, bExit, nFlag);
+ if (bExit)
+ return;
- m_pFillerNotify->OnAfterKeyStroke(FALSE, GetAttachedData(), bExit,nFlag);
- }
+ m_pFillerNotify->OnAfterKeyStroke(FALSE, GetAttachedData(), bExit, nFlag);
+ }
}
-CPDF_Rect CPWL_ListBox::GetFocusRect() const
-{
- if (m_pList && m_pList->IsMultipleSel())
- {
- CPDF_Rect rcCaret = m_pList->GetItemRect(m_pList->GetCaret());
- rcCaret.Intersect(GetClientRect());
- return rcCaret;
- }
+CPDF_Rect CPWL_ListBox::GetFocusRect() const {
+ if (m_pList && m_pList->IsMultipleSel()) {
+ CPDF_Rect rcCaret = m_pList->GetItemRect(m_pList->GetCaret());
+ rcCaret.Intersect(GetClientRect());
+ return rcCaret;
+ }
- return CPWL_Wnd::GetFocusRect();
+ return CPWL_Wnd::GetFocusRect();
}
-void CPWL_ListBox::AddString(const FX_WCHAR* string)
-{
- if (m_pList)
- {
- m_pList->AddString(string);
- }
+void CPWL_ListBox::AddString(const FX_WCHAR* string) {
+ if (m_pList) {
+ m_pList->AddString(string);
+ }
}
-CFX_WideString CPWL_ListBox::GetText() const
-{
- if (m_pList)
- return m_pList->GetText();
+CFX_WideString CPWL_ListBox::GetText() const {
+ if (m_pList)
+ return m_pList->GetText();
- return L"";
+ return L"";
}
-void CPWL_ListBox::SetFontSize(FX_FLOAT fFontSize)
-{
- if (m_pList)
- m_pList->SetFontSize(fFontSize);
+void CPWL_ListBox::SetFontSize(FX_FLOAT fFontSize) {
+ if (m_pList)
+ m_pList->SetFontSize(fFontSize);
}
-FX_FLOAT CPWL_ListBox::GetFontSize() const
-{
- if (m_pList)
- return m_pList->GetFontSize();
- return 0.0f;
+FX_FLOAT CPWL_ListBox::GetFontSize() const {
+ if (m_pList)
+ return m_pList->GetFontSize();
+ return 0.0f;
}
-void CPWL_ListBox::Select(int32_t nItemIndex)
-{
- if (m_pList)
- m_pList->Select(nItemIndex);
+void CPWL_ListBox::Select(int32_t nItemIndex) {
+ if (m_pList)
+ m_pList->Select(nItemIndex);
}
-void CPWL_ListBox::SetCaret(int32_t nItemIndex)
-{
- if (m_pList)
- m_pList->SetCaret(nItemIndex);
+void CPWL_ListBox::SetCaret(int32_t nItemIndex) {
+ if (m_pList)
+ m_pList->SetCaret(nItemIndex);
}
-void CPWL_ListBox::SetTopVisibleIndex(int32_t nItemIndex)
-{
- if (m_pList)
- m_pList->SetTopItem(nItemIndex);
+void CPWL_ListBox::SetTopVisibleIndex(int32_t nItemIndex) {
+ if (m_pList)
+ m_pList->SetTopItem(nItemIndex);
}
-void CPWL_ListBox::ScrollToListItem(int32_t nItemIndex)
-{
- if (m_pList)
- m_pList->ScrollToListItem(nItemIndex);
+void CPWL_ListBox::ScrollToListItem(int32_t nItemIndex) {
+ if (m_pList)
+ m_pList->ScrollToListItem(nItemIndex);
}
-void CPWL_ListBox::ResetContent()
-{
- if (m_pList)
- m_pList->Empty();
+void CPWL_ListBox::ResetContent() {
+ if (m_pList)
+ m_pList->Empty();
}
-void CPWL_ListBox::Reset()
-{
- if (m_pList)
- m_pList->Cancel();
+void CPWL_ListBox::Reset() {
+ if (m_pList)
+ m_pList->Cancel();
}
-FX_BOOL CPWL_ListBox::IsMultipleSel() const
-{
- if (m_pList)
- return m_pList->IsMultipleSel();
+FX_BOOL CPWL_ListBox::IsMultipleSel() const {
+ if (m_pList)
+ return m_pList->IsMultipleSel();
- return FALSE;
+ return FALSE;
}
-int32_t CPWL_ListBox::GetCaretIndex() const
-{
- if (m_pList)
- return m_pList->GetCaret();
+int32_t CPWL_ListBox::GetCaretIndex() const {
+ if (m_pList)
+ return m_pList->GetCaret();
- return -1;
+ return -1;
}
-int32_t CPWL_ListBox::GetCurSel() const
-{
- if (m_pList)
- return m_pList->GetSelect();
+int32_t CPWL_ListBox::GetCurSel() const {
+ if (m_pList)
+ return m_pList->GetSelect();
- return -1;
+ return -1;
}
-FX_BOOL CPWL_ListBox::IsItemSelected(int32_t nItemIndex) const
-{
- if (m_pList)
- return m_pList->IsItemSelected(nItemIndex);
+FX_BOOL CPWL_ListBox::IsItemSelected(int32_t nItemIndex) const {
+ if (m_pList)
+ return m_pList->IsItemSelected(nItemIndex);
- return FALSE;
+ return FALSE;
}
-int32_t CPWL_ListBox::GetTopVisibleIndex() const
-{
- if (m_pList)
- {
- m_pList->ScrollToListItem(m_pList->GetFirstSelected());
- return m_pList->GetTopItem();
- }
+int32_t CPWL_ListBox::GetTopVisibleIndex() const {
+ if (m_pList) {
+ m_pList->ScrollToListItem(m_pList->GetFirstSelected());
+ return m_pList->GetTopItem();
+ }
- return -1;
+ return -1;
}
-int32_t CPWL_ListBox::GetCount() const
-{
- if (m_pList)
- return m_pList->GetCount();
+int32_t CPWL_ListBox::GetCount() const {
+ if (m_pList)
+ return m_pList->GetCount();
- return 0;
+ return 0;
}
-int32_t CPWL_ListBox::FindNext(int32_t nIndex,FX_WCHAR nChar) const
-{
- if (m_pList)
- return m_pList->FindNext(nIndex,nChar);
+int32_t CPWL_ListBox::FindNext(int32_t nIndex, FX_WCHAR nChar) const {
+ if (m_pList)
+ return m_pList->FindNext(nIndex, nChar);
- return nIndex;
+ return nIndex;
}
-CPDF_Rect CPWL_ListBox::GetContentRect() const
-{
- if (m_pList)
- return m_pList->GetContentRect();
+CPDF_Rect CPWL_ListBox::GetContentRect() const {
+ if (m_pList)
+ return m_pList->GetContentRect();
- return CPDF_Rect();
+ return CPDF_Rect();
}
-FX_FLOAT CPWL_ListBox::GetFirstHeight() const
-{
- if (m_pList)
- return m_pList->GetFirstHeight();
+FX_FLOAT CPWL_ListBox::GetFirstHeight() const {
+ if (m_pList)
+ return m_pList->GetFirstHeight();
- return 0.0f;
+ return 0.0f;
}
-CPDF_Rect CPWL_ListBox::GetListRect() const
-{
- return CPWL_Utils::DeflateRect(GetWindowRect(),(FX_FLOAT)(GetBorderWidth()+GetInnerBorderWidth()));
+CPDF_Rect CPWL_ListBox::GetListRect() const {
+ return CPWL_Utils::DeflateRect(
+ GetWindowRect(), (FX_FLOAT)(GetBorderWidth() + GetInnerBorderWidth()));
}
-FX_BOOL CPWL_ListBox::OnMouseWheel(short zDelta, const CPDF_Point & point, FX_DWORD nFlag)
-{
- if (!m_pList) return FALSE;
+FX_BOOL CPWL_ListBox::OnMouseWheel(short zDelta,
+ const CPDF_Point& point,
+ FX_DWORD nFlag) {
+ if (!m_pList)
+ return FALSE;
- if (zDelta < 0)
- {
- m_pList->OnVK_DOWN(IsSHIFTpressed(nFlag),IsCTRLpressed(nFlag));
- }
- else
- {
- m_pList->OnVK_UP(IsSHIFTpressed(nFlag),IsCTRLpressed(nFlag));
- }
+ if (zDelta < 0) {
+ m_pList->OnVK_DOWN(IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag));
+ } else {
+ m_pList->OnVK_UP(IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag));
+ }
- FX_BOOL bExit = FALSE;
- OnNotifySelChanged(FALSE,bExit, nFlag);
- return TRUE;
+ FX_BOOL bExit = FALSE;
+ OnNotifySelChanged(FALSE, bExit, nFlag);
+ return TRUE;
}
-
diff --git a/fpdfsdk/src/pdfwindow/PWL_ListCtrl.cpp b/fpdfsdk/src/pdfwindow/PWL_ListCtrl.cpp
index 3077e6293f..e01ce5c203 100644
--- a/fpdfsdk/src/pdfwindow/PWL_ListCtrl.cpp
+++ b/fpdfsdk/src/pdfwindow/PWL_ListCtrl.cpp
@@ -10,236 +10,199 @@
/* ---------------------------- CPWL_ListCtrl ---------------------------- */
-CPWL_ListCtrl::CPWL_ListCtrl() :
- m_rcContent(0,0,0,0),
- m_ptScroll(0,0),
- m_fItemSpace(0.0f),
- m_fTopSpace(0.0f),
- m_fBottomSpace(0.0f)
-{
-}
+CPWL_ListCtrl::CPWL_ListCtrl()
+ : m_rcContent(0, 0, 0, 0),
+ m_ptScroll(0, 0),
+ m_fItemSpace(0.0f),
+ m_fTopSpace(0.0f),
+ m_fBottomSpace(0.0f) {}
-CPWL_ListCtrl::~CPWL_ListCtrl()
-{
-}
+CPWL_ListCtrl::~CPWL_ListCtrl() {}
-void CPWL_ListCtrl::SetScrollPos(const CPDF_Point& point)
-{
- m_ptScroll = point;
+void CPWL_ListCtrl::SetScrollPos(const CPDF_Point& point) {
+ m_ptScroll = point;
- if (m_ptScroll.x < m_rcContent.left)
- m_ptScroll.x = m_rcContent.left;
+ if (m_ptScroll.x < m_rcContent.left)
+ m_ptScroll.x = m_rcContent.left;
- if (m_ptScroll.x > m_rcContent.right)
- m_ptScroll.x = m_rcContent.right;
+ if (m_ptScroll.x > m_rcContent.right)
+ m_ptScroll.x = m_rcContent.right;
- if (m_ptScroll.y > m_rcContent.top)
- m_ptScroll.y = m_rcContent.top;
+ if (m_ptScroll.y > m_rcContent.top)
+ m_ptScroll.y = m_rcContent.top;
- if (m_ptScroll.y < m_rcContent.bottom)
- m_ptScroll.y = m_rcContent.bottom;
+ if (m_ptScroll.y < m_rcContent.bottom)
+ m_ptScroll.y = m_rcContent.bottom;
}
-CPDF_Point CPWL_ListCtrl::GetScrollPos() const
-{
- return m_ptScroll;
+CPDF_Point CPWL_ListCtrl::GetScrollPos() const {
+ return m_ptScroll;
}
-CPDF_Rect CPWL_ListCtrl::GetScrollArea() const
-{
- return m_rcContent;
+CPDF_Rect CPWL_ListCtrl::GetScrollArea() const {
+ return m_rcContent;
}
-void CPWL_ListCtrl::ResetFace()
-{
- ResetAll(FALSE, 0);
+void CPWL_ListCtrl::ResetFace() {
+ ResetAll(FALSE, 0);
}
-void CPWL_ListCtrl::ResetContent(int32_t nStart)
-{
- if (nStart < 0)
- nStart = 0;
- if (nStart >= 0 && nStart < m_aChildren.GetSize())
- ResetAll(TRUE, nStart);
+void CPWL_ListCtrl::ResetContent(int32_t nStart) {
+ if (nStart < 0)
+ nStart = 0;
+ if (nStart >= 0 && nStart < m_aChildren.GetSize())
+ ResetAll(TRUE, nStart);
}
-FX_FLOAT CPWL_ListCtrl::GetContentsHeight(FX_FLOAT fLimitWidth)
-{
- FX_FLOAT fRet = m_fTopSpace;
+FX_FLOAT CPWL_ListCtrl::GetContentsHeight(FX_FLOAT fLimitWidth) {
+ FX_FLOAT fRet = m_fTopSpace;
- FX_FLOAT fBorderWidth = (FX_FLOAT)GetBorderWidth();
+ FX_FLOAT fBorderWidth = (FX_FLOAT)GetBorderWidth();
- if (fLimitWidth > fBorderWidth* 2)
- {
- for (int32_t i=0,sz=m_aChildren.GetSize(); i<sz; i++)
- {
- if (CPWL_Wnd* pChild = m_aChildren.GetAt(i))
- {
- FX_FLOAT fLeft = pChild->GetItemLeftMargin();
- FX_FLOAT fRight = pChild->GetItemRightMargin();
+ if (fLimitWidth > fBorderWidth * 2) {
+ for (int32_t i = 0, sz = m_aChildren.GetSize(); i < sz; i++) {
+ if (CPWL_Wnd* pChild = m_aChildren.GetAt(i)) {
+ FX_FLOAT fLeft = pChild->GetItemLeftMargin();
+ FX_FLOAT fRight = pChild->GetItemRightMargin();
- fRet += pChild->GetItemHeight(fLimitWidth - fBorderWidth* 2 - fLeft - fRight);
- fRet += m_fItemSpace;
- }
- }
+ fRet += pChild->GetItemHeight(fLimitWidth - fBorderWidth * 2 - fLeft -
+ fRight);
+ fRet += m_fItemSpace;
+ }
+ }
- fRet -= m_fItemSpace;
- }
+ fRet -= m_fItemSpace;
+ }
- fRet += m_fBottomSpace;
+ fRet += m_fBottomSpace;
- return fRet;
+ return fRet;
}
-void CPWL_ListCtrl::ResetAll(FX_BOOL bMove, int32_t nStart)
-{
- CPDF_Rect rcClient = GetClientRect();
+void CPWL_ListCtrl::ResetAll(FX_BOOL bMove, int32_t nStart) {
+ CPDF_Rect rcClient = GetClientRect();
- FX_FLOAT fWidth = rcClient.Width();
+ FX_FLOAT fWidth = rcClient.Width();
- FX_FLOAT fy = 0.0f - m_fTopSpace;
+ FX_FLOAT fy = 0.0f - m_fTopSpace;
- if (nStart-1 >= 0 && nStart-1 < m_aChildren.GetSize())
- if (CPWL_Wnd* pChild = m_aChildren.GetAt(nStart-1))
- fy = pChild->GetWindowRect().bottom - m_fItemSpace;
+ if (nStart - 1 >= 0 && nStart - 1 < m_aChildren.GetSize())
+ if (CPWL_Wnd* pChild = m_aChildren.GetAt(nStart - 1))
+ fy = pChild->GetWindowRect().bottom - m_fItemSpace;
- for (int32_t i=nStart,sz=m_aChildren.GetSize(); i<sz; i++)
- {
- if (CPWL_Wnd* pChild = m_aChildren.GetAt(i))
- {
- FX_FLOAT fLeft = pChild->GetItemLeftMargin();
- FX_FLOAT fRight = pChild->GetItemRightMargin();
+ for (int32_t i = nStart, sz = m_aChildren.GetSize(); i < sz; i++) {
+ if (CPWL_Wnd* pChild = m_aChildren.GetAt(i)) {
+ FX_FLOAT fLeft = pChild->GetItemLeftMargin();
+ FX_FLOAT fRight = pChild->GetItemRightMargin();
- pChild->SetChildMatrix(
- CPDF_Matrix(1,0,0,1,
- rcClient.left - m_ptScroll.x,
- rcClient.top - m_ptScroll.y)
- );
+ pChild->SetChildMatrix(CPDF_Matrix(1, 0, 0, 1,
+ rcClient.left - m_ptScroll.x,
+ rcClient.top - m_ptScroll.y));
- if (bMove)
- {
- FX_FLOAT fItemHeight = pChild->GetItemHeight(fWidth - fLeft - fRight);
- pChild->Move(CPDF_Rect(fLeft, fy-fItemHeight, fWidth - fRight, fy), TRUE, FALSE);
- fy -= fItemHeight;
- fy -= m_fItemSpace;
- }
- }
- }
+ if (bMove) {
+ FX_FLOAT fItemHeight = pChild->GetItemHeight(fWidth - fLeft - fRight);
+ pChild->Move(CPDF_Rect(fLeft, fy - fItemHeight, fWidth - fRight, fy),
+ TRUE, FALSE);
+ fy -= fItemHeight;
+ fy -= m_fItemSpace;
+ }
+ }
+ }
- fy += m_fItemSpace;
+ fy += m_fItemSpace;
- fy -= m_fBottomSpace;
+ fy -= m_fBottomSpace;
- if (bMove)
- {
- m_rcContent.left = 0;
- m_rcContent.top = 0;
- m_rcContent.right = fWidth;
- m_rcContent.bottom = fy;
- }
+ if (bMove) {
+ m_rcContent.left = 0;
+ m_rcContent.top = 0;
+ m_rcContent.right = fWidth;
+ m_rcContent.bottom = fy;
+ }
}
-void CPWL_ListCtrl::SetItemSpace(FX_FLOAT fSpace)
-{
- m_fItemSpace = fSpace;
+void CPWL_ListCtrl::SetItemSpace(FX_FLOAT fSpace) {
+ m_fItemSpace = fSpace;
}
-void CPWL_ListCtrl::SetTopSpace(FX_FLOAT fSpace)
-{
- m_fTopSpace = fSpace;
+void CPWL_ListCtrl::SetTopSpace(FX_FLOAT fSpace) {
+ m_fTopSpace = fSpace;
}
-void CPWL_ListCtrl::SetBottomSpace(FX_FLOAT fSpace)
-{
- m_fBottomSpace = fSpace;
+void CPWL_ListCtrl::SetBottomSpace(FX_FLOAT fSpace) {
+ m_fBottomSpace = fSpace;
}
-void CPWL_ListCtrl::RePosChildWnd()
-{
- ResetFace();
+void CPWL_ListCtrl::RePosChildWnd() {
+ ResetFace();
}
-void CPWL_ListCtrl::DrawChildAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device)
-{
- pDevice->SaveState();
- CPDF_Rect rcClient = GetClientRect();
- CPDF_Rect rcTemp = rcClient;
- pUser2Device->TransformRect(rcTemp);
- FX_RECT rcClip((int32_t)rcTemp.left,
- (int32_t)rcTemp.bottom,
- (int32_t)rcTemp.right,
- (int32_t)rcTemp.top);
+void CPWL_ListCtrl::DrawChildAppearance(CFX_RenderDevice* pDevice,
+ CPDF_Matrix* pUser2Device) {
+ pDevice->SaveState();
+ CPDF_Rect rcClient = GetClientRect();
+ CPDF_Rect rcTemp = rcClient;
+ pUser2Device->TransformRect(rcTemp);
+ FX_RECT rcClip((int32_t)rcTemp.left, (int32_t)rcTemp.bottom,
+ (int32_t)rcTemp.right, (int32_t)rcTemp.top);
- pDevice->SetClip_Rect(&rcClip);
+ pDevice->SetClip_Rect(&rcClip);
- for (int32_t i=0,sz=m_aChildren.GetSize(); i<sz; i++)
- {
- if (CPWL_Wnd * pChild = m_aChildren.GetAt(i))
- {
- CPDF_Rect rcChild = pChild->ChildToParent(pChild->GetWindowRect());
- if (!(rcChild.top < rcClient.bottom || rcChild.bottom > rcClient.top))
- {
- CPDF_Matrix mt = pChild->GetChildMatrix();
- if (mt.IsIdentity())
- {
- pChild->DrawAppearance(pDevice,pUser2Device);
- }
- else
- {
- mt.Concat(*pUser2Device);
- pChild->DrawAppearance(pDevice,&mt);
- }
- }
- }
- }
+ for (int32_t i = 0, sz = m_aChildren.GetSize(); i < sz; i++) {
+ if (CPWL_Wnd* pChild = m_aChildren.GetAt(i)) {
+ CPDF_Rect rcChild = pChild->ChildToParent(pChild->GetWindowRect());
+ if (!(rcChild.top < rcClient.bottom || rcChild.bottom > rcClient.top)) {
+ CPDF_Matrix mt = pChild->GetChildMatrix();
+ if (mt.IsIdentity()) {
+ pChild->DrawAppearance(pDevice, pUser2Device);
+ } else {
+ mt.Concat(*pUser2Device);
+ pChild->DrawAppearance(pDevice, &mt);
+ }
+ }
+ }
+ }
- pDevice->RestoreState();
+ pDevice->RestoreState();
}
-int32_t CPWL_ListCtrl::GetItemIndex(CPWL_Wnd* pItem)
-{
- for (int32_t i=0, sz=m_aChildren.GetSize(); i<sz; i++)
- {
- if (pItem == m_aChildren.GetAt(i))
- return i;
- }
+int32_t CPWL_ListCtrl::GetItemIndex(CPWL_Wnd* pItem) {
+ for (int32_t i = 0, sz = m_aChildren.GetSize(); i < sz; i++) {
+ if (pItem == m_aChildren.GetAt(i))
+ return i;
+ }
- return -1;
+ return -1;
}
-CPDF_Point CPWL_ListCtrl::InToOut(const CPDF_Point& point) const
-{
- CPDF_Rect rcClient = GetClientRect();
+CPDF_Point CPWL_ListCtrl::InToOut(const CPDF_Point& point) const {
+ CPDF_Rect rcClient = GetClientRect();
- return CPDF_Point(point.x + rcClient.left - m_ptScroll.x,
- point.y + rcClient.top - m_ptScroll.y);
+ return CPDF_Point(point.x + rcClient.left - m_ptScroll.x,
+ point.y + rcClient.top - m_ptScroll.y);
}
-CPDF_Point CPWL_ListCtrl::OutToIn(const CPDF_Point& point) const
-{
- CPDF_Rect rcClient = GetClientRect();
+CPDF_Point CPWL_ListCtrl::OutToIn(const CPDF_Point& point) const {
+ CPDF_Rect rcClient = GetClientRect();
- return CPDF_Point(point.x - rcClient.left + m_ptScroll.x,
- point.y - rcClient.top + m_ptScroll.y);
+ return CPDF_Point(point.x - rcClient.left + m_ptScroll.x,
+ point.y - rcClient.top + m_ptScroll.y);
}
-CPDF_Rect CPWL_ListCtrl::InToOut(const CPDF_Rect& rect) const
-{
- CPDF_Rect rcClient = GetClientRect();
+CPDF_Rect CPWL_ListCtrl::InToOut(const CPDF_Rect& rect) const {
+ CPDF_Rect rcClient = GetClientRect();
- return CPDF_Rect(rect.left + rcClient.left - m_ptScroll.x,
- rect.bottom + rcClient.top - m_ptScroll.y,
- rect.right + rcClient.left - m_ptScroll.x,
- rect.top + rcClient.top - m_ptScroll.y);
+ return CPDF_Rect(rect.left + rcClient.left - m_ptScroll.x,
+ rect.bottom + rcClient.top - m_ptScroll.y,
+ rect.right + rcClient.left - m_ptScroll.x,
+ rect.top + rcClient.top - m_ptScroll.y);
}
-CPDF_Rect CPWL_ListCtrl::OutToIn(const CPDF_Rect& rect) const
-{
- CPDF_Rect rcClient = GetClientRect();
+CPDF_Rect CPWL_ListCtrl::OutToIn(const CPDF_Rect& rect) const {
+ CPDF_Rect rcClient = GetClientRect();
- return CPDF_Rect(rect.left - rcClient.left + m_ptScroll.x,
- rect.bottom - rcClient.top + m_ptScroll.y,
- rect.right - rcClient.left + m_ptScroll.x,
- rect.top - rcClient.top + m_ptScroll.y);
+ return CPDF_Rect(rect.left - rcClient.left + m_ptScroll.x,
+ rect.bottom - rcClient.top + m_ptScroll.y,
+ rect.right - rcClient.left + m_ptScroll.x,
+ rect.top - rcClient.top + m_ptScroll.y);
}
-
diff --git a/fpdfsdk/src/pdfwindow/PWL_Note.cpp b/fpdfsdk/src/pdfwindow/PWL_Note.cpp
index 7ed1115a82..6b05dde3b8 100644
--- a/fpdfsdk/src/pdfwindow/PWL_Note.cpp
+++ b/fpdfsdk/src/pdfwindow/PWL_Note.cpp
@@ -18,1753 +18,1598 @@
#include "../../include/pdfwindow/PWL_Utils.h"
#include "../../include/pdfwindow/PWL_Caret.h"
-#define POPUP_ITEM_HEAD_BOTTOM 3.0f
-#define POPUP_ITEM_BOTTOMWIDTH 1.0f
-#define POPUP_ITEM_SIDEMARGIN 3.0f
-#define POPUP_ITEM_SPACE 4.0f
-#define POPUP_ITEM_TEXT_INDENT 2.0f
-#define POPUP_ITEM_BORDERCOLOR CPWL_Color(COLORTYPE_RGB, 80/255.0f, 80/255.0f, 80/255.0f)
+#define POPUP_ITEM_HEAD_BOTTOM 3.0f
+#define POPUP_ITEM_BOTTOMWIDTH 1.0f
+#define POPUP_ITEM_SIDEMARGIN 3.0f
+#define POPUP_ITEM_SPACE 4.0f
+#define POPUP_ITEM_TEXT_INDENT 2.0f
+#define POPUP_ITEM_BORDERCOLOR \
+ CPWL_Color(COLORTYPE_RGB, 80 / 255.0f, 80 / 255.0f, 80 / 255.0f)
-#define IsFloatZero(f) ((f) < 0.0001 && (f) > -0.0001)
-#define IsFloatBigger(fa,fb) ((fa) > (fb) && !IsFloatZero((fa) - (fb)))
-#define IsFloatSmaller(fa,fb) ((fa) < (fb) && !IsFloatZero((fa) - (fb)))
-#define IsFloatEqual(fa,fb) IsFloatZero((fa)-(fb))
+#define IsFloatZero(f) ((f) < 0.0001 && (f) > -0.0001)
+#define IsFloatBigger(fa, fb) ((fa) > (fb) && !IsFloatZero((fa) - (fb)))
+#define IsFloatSmaller(fa, fb) ((fa) < (fb) && !IsFloatZero((fa) - (fb)))
+#define IsFloatEqual(fa, fb) IsFloatZero((fa) - (fb))
+/* ------------------------------- CPWL_Note_Options
+ * ------------------------------- */
-/* ------------------------------- CPWL_Note_Options ------------------------------- */
+CPWL_Note_Options::CPWL_Note_Options() : m_pText(NULL) {}
-CPWL_Note_Options::CPWL_Note_Options() : m_pText(NULL)
-{
-}
-
-CPWL_Note_Options::~CPWL_Note_Options()
-{
-}
+CPWL_Note_Options::~CPWL_Note_Options() {}
-void CPWL_Note_Options::SetTextColor(const CPWL_Color & color)
-{
- CPWL_Wnd::SetTextColor(color);
+void CPWL_Note_Options::SetTextColor(const CPWL_Color& color) {
+ CPWL_Wnd::SetTextColor(color);
- if (m_pText)
- m_pText->SetTextColor(color);
+ if (m_pText)
+ m_pText->SetTextColor(color);
}
-void CPWL_Note_Options::RePosChildWnd()
-{
- if (IsValid())
- {
- ASSERT(m_pText != NULL);
+void CPWL_Note_Options::RePosChildWnd() {
+ if (IsValid()) {
+ ASSERT(m_pText != NULL);
- CPDF_Rect rcClient = GetClientRect();
+ CPDF_Rect rcClient = GetClientRect();
- if (rcClient.Width() > 15.0f)
- {
- rcClient.right -= 15.0f;
- m_pText->Move(rcClient, TRUE, FALSE);
- m_pText->SetVisible(TRUE);
- }
- else
- {
- m_pText->Move(CPDF_Rect(0,0,0,0), TRUE, FALSE);
- m_pText->SetVisible(FALSE);
- }
- }
+ if (rcClient.Width() > 15.0f) {
+ rcClient.right -= 15.0f;
+ m_pText->Move(rcClient, TRUE, FALSE);
+ m_pText->SetVisible(TRUE);
+ } else {
+ m_pText->Move(CPDF_Rect(0, 0, 0, 0), TRUE, FALSE);
+ m_pText->SetVisible(FALSE);
+ }
+ }
}
-void CPWL_Note_Options::CreateChildWnd(const PWL_CREATEPARAM & cp)
-{
- m_pText = new CPWL_Label;
- PWL_CREATEPARAM tcp = cp;
- tcp.pParentWnd = this;
- tcp.dwFlags = PWS_CHILD | PWS_VISIBLE;
- m_pText->Create(tcp);
+void CPWL_Note_Options::CreateChildWnd(const PWL_CREATEPARAM& cp) {
+ m_pText = new CPWL_Label;
+ PWL_CREATEPARAM tcp = cp;
+ tcp.pParentWnd = this;
+ tcp.dwFlags = PWS_CHILD | PWS_VISIBLE;
+ m_pText->Create(tcp);
}
-void CPWL_Note_Options::SetText(const CFX_WideString& sText)
-{
- m_pText->SetText(sText.c_str());
+void CPWL_Note_Options::SetText(const CFX_WideString& sText) {
+ m_pText->SetText(sText.c_str());
}
-void CPWL_Note_Options::DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device)
-{
- CPWL_Wnd::DrawThisAppearance(pDevice, pUser2Device);
+void CPWL_Note_Options::DrawThisAppearance(CFX_RenderDevice* pDevice,
+ CPDF_Matrix* pUser2Device) {
+ CPWL_Wnd::DrawThisAppearance(pDevice, pUser2Device);
- CPDF_Rect rcClient = GetClientRect();
- rcClient.left = rcClient.right - 15.0f;
+ CPDF_Rect rcClient = GetClientRect();
+ rcClient.left = rcClient.right - 15.0f;
- CPDF_Point ptCenter = CPDF_Point((rcClient.left + rcClient.right) * 0.5f, (rcClient.top + rcClient.bottom) * 0.5f);
+ CPDF_Point ptCenter = CPDF_Point((rcClient.left + rcClient.right) * 0.5f,
+ (rcClient.top + rcClient.bottom) * 0.5f);
- CPDF_Point pt1(ptCenter.x - 2.0f, ptCenter.y + 2.0f * 0.5f);
- CPDF_Point pt2(ptCenter.x + 2.0f, ptCenter.y + 2.0f * 0.5f);
- CPDF_Point pt3(ptCenter.x, ptCenter.y - 3.0f * 0.5f);
+ CPDF_Point pt1(ptCenter.x - 2.0f, ptCenter.y + 2.0f * 0.5f);
+ CPDF_Point pt2(ptCenter.x + 2.0f, ptCenter.y + 2.0f * 0.5f);
+ CPDF_Point pt3(ptCenter.x, ptCenter.y - 3.0f * 0.5f);
- CFX_PathData path;
+ CFX_PathData path;
- path.SetPointCount(4);
- path.SetPoint(0, pt1.x, pt1.y, FXPT_MOVETO);
- path.SetPoint(1, pt2.x, pt2.y, FXPT_LINETO);
- path.SetPoint(2, pt3.x, pt3.y, FXPT_LINETO);
- path.SetPoint(3, pt1.x, pt1.y, FXPT_LINETO);
+ path.SetPointCount(4);
+ path.SetPoint(0, pt1.x, pt1.y, FXPT_MOVETO);
+ path.SetPoint(1, pt2.x, pt2.y, FXPT_LINETO);
+ path.SetPoint(2, pt3.x, pt3.y, FXPT_LINETO);
+ path.SetPoint(3, pt1.x, pt1.y, FXPT_LINETO);
- pDevice->DrawPath(&path, pUser2Device, NULL,
- CPWL_Utils::PWLColorToFXColor(GetTextColor(),GetTransparency()),
- 0, FXFILL_ALTERNATE);
+ pDevice->DrawPath(
+ &path, pUser2Device, NULL,
+ CPWL_Utils::PWLColorToFXColor(GetTextColor(), GetTransparency()), 0,
+ FXFILL_ALTERNATE);
}
-CPDF_Rect CPWL_Note_Options::GetContentRect() const
-{
- ASSERT(m_pText != NULL);
+CPDF_Rect CPWL_Note_Options::GetContentRect() const {
+ ASSERT(m_pText != NULL);
- CPDF_Rect rcText = m_pText->GetContentRect();
- rcText.right += 15.0f;
- return rcText;
+ CPDF_Rect rcText = m_pText->GetContentRect();
+ rcText.right += 15.0f;
+ return rcText;
}
-/* ------------------------------- CPWL_Note_Edit ------------------------------ */
+/* ------------------------------- CPWL_Note_Edit ------------------------------
+ */
-CPWL_Note_Edit::CPWL_Note_Edit() : m_bEnableNotify(TRUE),
- m_fOldItemHeight(0.0f),
- m_bSizeChanged(FALSE),
- m_fOldMin(0.0f),
- m_fOldMax(0.0f)
-{
-}
+CPWL_Note_Edit::CPWL_Note_Edit()
+ : m_bEnableNotify(TRUE),
+ m_fOldItemHeight(0.0f),
+ m_bSizeChanged(FALSE),
+ m_fOldMin(0.0f),
+ m_fOldMax(0.0f) {}
-CPWL_Note_Edit::~CPWL_Note_Edit()
-{
+CPWL_Note_Edit::~CPWL_Note_Edit() {}
+
+void CPWL_Note_Edit::RePosChildWnd() {
+ m_bEnableNotify = FALSE;
+ CPWL_Edit::RePosChildWnd();
+ m_bEnableNotify = TRUE;
+
+ m_fOldItemHeight = GetContentRect().Height();
}
-void CPWL_Note_Edit::RePosChildWnd()
-{
- m_bEnableNotify = FALSE;
- CPWL_Edit::RePosChildWnd();
- m_bEnableNotify = TRUE;
+void CPWL_Note_Edit::SetText(const FX_WCHAR* csText) {
+ m_bEnableNotify = FALSE;
+ CPWL_Edit::SetText(csText);
+ m_bEnableNotify = TRUE;
+ m_fOldItemHeight = GetContentRect().Height();
+}
- m_fOldItemHeight = GetContentRect().Height();
-}
-
-void CPWL_Note_Edit::SetText(const FX_WCHAR* csText)
-{
- m_bEnableNotify = FALSE;
- CPWL_Edit::SetText(csText);
- m_bEnableNotify = TRUE;
- m_fOldItemHeight = GetContentRect().Height();
-}
-
-void CPWL_Note_Edit::OnSetFocus()
-{
- m_bEnableNotify = FALSE;
- CPWL_Edit::OnSetFocus();
- m_bEnableNotify = TRUE;
+void CPWL_Note_Edit::OnSetFocus() {
+ m_bEnableNotify = FALSE;
+ CPWL_Edit::OnSetFocus();
+ m_bEnableNotify = TRUE;
- EnableSpellCheck(TRUE);
+ EnableSpellCheck(TRUE);
}
-void CPWL_Note_Edit::OnKillFocus()
-{
- EnableSpellCheck(FALSE);
+void CPWL_Note_Edit::OnKillFocus() {
+ EnableSpellCheck(FALSE);
- if (CPWL_Wnd* pParent = GetParentWindow())
- {
- if (CPWL_Wnd* pGrand = pParent->GetParentWindow())
- {
- ASSERT(pGrand->GetClassName() == "CPWL_NoteItem");
+ if (CPWL_Wnd* pParent = GetParentWindow()) {
+ if (CPWL_Wnd* pGrand = pParent->GetParentWindow()) {
+ ASSERT(pGrand->GetClassName() == "CPWL_NoteItem");
- CPWL_NoteItem* pNoteItem = (CPWL_NoteItem*)pGrand;
+ CPWL_NoteItem* pNoteItem = (CPWL_NoteItem*)pGrand;
- pNoteItem->OnContentsValidate();
- }
- }
+ pNoteItem->OnContentsValidate();
+ }
+ }
- CPWL_Edit::OnKillFocus();
+ CPWL_Edit::OnKillFocus();
}
-void CPWL_Note_Edit::OnNotify(CPWL_Wnd* pWnd, FX_DWORD msg, intptr_t wParam, intptr_t lParam)
-{
- if (m_bEnableNotify)
- {
- if (wParam == SBT_VSCROLL)
- {
- switch (msg)
- {
- case PNM_SETSCROLLINFO:
- if (PWL_SCROLL_INFO* pInfo = (PWL_SCROLL_INFO*)lParam)
- {
- if (!IsFloatEqual(pInfo->fContentMax, m_fOldMax) ||
- !IsFloatEqual(pInfo->fContentMin, m_fOldMin))
- {
- m_bSizeChanged = TRUE;
- if (CPWL_Wnd * pParent = GetParentWindow())
- {
- pParent->OnNotify(this, PNM_NOTEEDITCHANGED, 0, 0);
- }
+void CPWL_Note_Edit::OnNotify(CPWL_Wnd* pWnd,
+ FX_DWORD msg,
+ intptr_t wParam,
+ intptr_t lParam) {
+ if (m_bEnableNotify) {
+ if (wParam == SBT_VSCROLL) {
+ switch (msg) {
+ case PNM_SETSCROLLINFO:
+ if (PWL_SCROLL_INFO* pInfo = (PWL_SCROLL_INFO*)lParam) {
+ if (!IsFloatEqual(pInfo->fContentMax, m_fOldMax) ||
+ !IsFloatEqual(pInfo->fContentMin, m_fOldMin)) {
+ m_bSizeChanged = TRUE;
+ if (CPWL_Wnd* pParent = GetParentWindow()) {
+ pParent->OnNotify(this, PNM_NOTEEDITCHANGED, 0, 0);
+ }
- m_fOldMax = pInfo->fContentMax;
- m_fOldMin = pInfo->fContentMin;
- return;
- }
- }
- }
- }
- }
+ m_fOldMax = pInfo->fContentMax;
+ m_fOldMin = pInfo->fContentMin;
+ return;
+ }
+ }
+ }
+ }
+ }
- CPWL_Edit::OnNotify(pWnd, msg, wParam, lParam);
+ CPWL_Edit::OnNotify(pWnd, msg, wParam, lParam);
- if (m_bEnableNotify)
- {
- switch (msg)
- {
- case PNM_SETCARETINFO:
- if (PWL_CARET_INFO * pInfo = (PWL_CARET_INFO*)wParam)
- {
- PWL_CARET_INFO newInfo = *pInfo;
- newInfo.bVisible = TRUE;
- newInfo.ptHead = ChildToParent(pInfo->ptHead);
- newInfo.ptFoot = ChildToParent(pInfo->ptFoot);
+ if (m_bEnableNotify) {
+ switch (msg) {
+ case PNM_SETCARETINFO:
+ if (PWL_CARET_INFO* pInfo = (PWL_CARET_INFO*)wParam) {
+ PWL_CARET_INFO newInfo = *pInfo;
+ newInfo.bVisible = TRUE;
+ newInfo.ptHead = ChildToParent(pInfo->ptHead);
+ newInfo.ptFoot = ChildToParent(pInfo->ptFoot);
- if (CPWL_Wnd * pParent = GetParentWindow())
- {
- pParent->OnNotify(this, PNM_SETCARETINFO, (intptr_t)&newInfo, 0);
- }
- }
- break;
- }
- }
+ if (CPWL_Wnd* pParent = GetParentWindow()) {
+ pParent->OnNotify(this, PNM_SETCARETINFO, (intptr_t)&newInfo, 0);
+ }
+ }
+ break;
+ }
+ }
}
-FX_FLOAT CPWL_Note_Edit::GetItemHeight(FX_FLOAT fLimitWidth)
-{
- if (fLimitWidth > 0)
- {
- if (!m_bSizeChanged)
- return m_fOldItemHeight;
+FX_FLOAT CPWL_Note_Edit::GetItemHeight(FX_FLOAT fLimitWidth) {
+ if (fLimitWidth > 0) {
+ if (!m_bSizeChanged)
+ return m_fOldItemHeight;
- m_bSizeChanged = FALSE;
+ m_bSizeChanged = FALSE;
- EnableNotify(FALSE);
- EnableRefresh(FALSE);
- m_pEdit->EnableNotify(FALSE);
+ EnableNotify(FALSE);
+ EnableRefresh(FALSE);
+ m_pEdit->EnableNotify(FALSE);
- Move(CPDF_Rect(0,0,fLimitWidth,0), TRUE, FALSE);
- FX_FLOAT fRet = GetContentRect().Height();
+ Move(CPDF_Rect(0, 0, fLimitWidth, 0), TRUE, FALSE);
+ FX_FLOAT fRet = GetContentRect().Height();
- m_pEdit->EnableNotify(TRUE);
- EnableNotify(TRUE);
- EnableRefresh(TRUE);
+ m_pEdit->EnableNotify(TRUE);
+ EnableNotify(TRUE);
+ EnableRefresh(TRUE);
- return fRet;
- }
+ return fRet;
+ }
- return 0;
+ return 0;
}
-FX_FLOAT CPWL_Note_Edit::GetItemLeftMargin()
-{
- return POPUP_ITEM_TEXT_INDENT;
+FX_FLOAT CPWL_Note_Edit::GetItemLeftMargin() {
+ return POPUP_ITEM_TEXT_INDENT;
}
-FX_FLOAT CPWL_Note_Edit::GetItemRightMargin()
-{
- return POPUP_ITEM_TEXT_INDENT;
+FX_FLOAT CPWL_Note_Edit::GetItemRightMargin() {
+ return POPUP_ITEM_TEXT_INDENT;
}
-/* -------------------------------- CPWL_Note_LBBox --------------------------------*/
+/* -------------------------------- CPWL_Note_LBBox
+ * --------------------------------*/
-CPWL_Note_LBBox::CPWL_Note_LBBox()
-{
-}
+CPWL_Note_LBBox::CPWL_Note_LBBox() {}
-CPWL_Note_LBBox::~CPWL_Note_LBBox()
-{
-}
+CPWL_Note_LBBox::~CPWL_Note_LBBox() {}
-void CPWL_Note_LBBox::DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device)
-{
- CPDF_Rect rcClient = GetClientRect();
+void CPWL_Note_LBBox::DrawThisAppearance(CFX_RenderDevice* pDevice,
+ CPDF_Matrix* pUser2Device) {
+ CPDF_Rect rcClient = GetClientRect();
- CFX_GraphStateData gsd;
- gsd.m_LineWidth = 1.0f;
+ CFX_GraphStateData gsd;
+ gsd.m_LineWidth = 1.0f;
- CFX_PathData pathCross;
+ CFX_PathData pathCross;
- pathCross.SetPointCount(4);
- pathCross.SetPoint(0, rcClient.left, rcClient.top, FXPT_MOVETO);
- pathCross.SetPoint(1, rcClient.right, rcClient.bottom, FXPT_LINETO);
- pathCross.SetPoint(2, rcClient.left, rcClient.bottom + rcClient.Height() * 0.5f, FXPT_MOVETO);
- pathCross.SetPoint(3, rcClient.left + rcClient.Width() * 0.5f, rcClient.bottom, FXPT_LINETO);
+ pathCross.SetPointCount(4);
+ pathCross.SetPoint(0, rcClient.left, rcClient.top, FXPT_MOVETO);
+ pathCross.SetPoint(1, rcClient.right, rcClient.bottom, FXPT_LINETO);
+ pathCross.SetPoint(2, rcClient.left,
+ rcClient.bottom + rcClient.Height() * 0.5f, FXPT_MOVETO);
+ pathCross.SetPoint(3, rcClient.left + rcClient.Width() * 0.5f,
+ rcClient.bottom, FXPT_LINETO);
- pDevice->DrawPath(&pathCross, pUser2Device, &gsd,
- 0, CPWL_Utils::PWLColorToFXColor(GetTextColor(), GetTransparency()), FXFILL_ALTERNATE);
+ pDevice->DrawPath(
+ &pathCross, pUser2Device, &gsd, 0,
+ CPWL_Utils::PWLColorToFXColor(GetTextColor(), GetTransparency()),
+ FXFILL_ALTERNATE);
}
-/* -------------------------------- CPWL_Note_RBBox --------------------------------*/
+/* -------------------------------- CPWL_Note_RBBox
+ * --------------------------------*/
-CPWL_Note_RBBox::CPWL_Note_RBBox()
-{
-}
+CPWL_Note_RBBox::CPWL_Note_RBBox() {}
-CPWL_Note_RBBox::~CPWL_Note_RBBox()
-{
-}
+CPWL_Note_RBBox::~CPWL_Note_RBBox() {}
-void CPWL_Note_RBBox::DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device)
-{
- CPDF_Rect rcClient = GetClientRect();
+void CPWL_Note_RBBox::DrawThisAppearance(CFX_RenderDevice* pDevice,
+ CPDF_Matrix* pUser2Device) {
+ CPDF_Rect rcClient = GetClientRect();
- CFX_GraphStateData gsd;
- gsd.m_LineWidth = 1.0f;
+ CFX_GraphStateData gsd;
+ gsd.m_LineWidth = 1.0f;
- CFX_PathData pathCross;
+ CFX_PathData pathCross;
- pathCross.SetPointCount(4);
- pathCross.SetPoint(0, rcClient.right, rcClient.top, FXPT_MOVETO);
- pathCross.SetPoint(1, rcClient.left, rcClient.bottom, FXPT_LINETO);
- pathCross.SetPoint(2, rcClient.right, rcClient.bottom + rcClient.Height() * 0.5f, FXPT_MOVETO);
- pathCross.SetPoint(3, rcClient.left + rcClient.Width() * 0.5f, rcClient.bottom, FXPT_LINETO);
+ pathCross.SetPointCount(4);
+ pathCross.SetPoint(0, rcClient.right, rcClient.top, FXPT_MOVETO);
+ pathCross.SetPoint(1, rcClient.left, rcClient.bottom, FXPT_LINETO);
+ pathCross.SetPoint(2, rcClient.right,
+ rcClient.bottom + rcClient.Height() * 0.5f, FXPT_MOVETO);
+ pathCross.SetPoint(3, rcClient.left + rcClient.Width() * 0.5f,
+ rcClient.bottom, FXPT_LINETO);
- pDevice->DrawPath(&pathCross, pUser2Device, &gsd,
- 0, CPWL_Utils::PWLColorToFXColor(GetTextColor(), GetTransparency()), FXFILL_ALTERNATE);
+ pDevice->DrawPath(
+ &pathCross, pUser2Device, &gsd, 0,
+ CPWL_Utils::PWLColorToFXColor(GetTextColor(), GetTransparency()),
+ FXFILL_ALTERNATE);
}
-/* --------------------------------- CPWL_Note_Icon ---------------------------------- */
+/* --------------------------------- CPWL_Note_Icon
+ * ---------------------------------- */
-CPWL_Note_Icon::CPWL_Note_Icon() : m_nType(0)
-{
-}
+CPWL_Note_Icon::CPWL_Note_Icon() : m_nType(0) {}
-CPWL_Note_Icon::~CPWL_Note_Icon()
-{
-}
+CPWL_Note_Icon::~CPWL_Note_Icon() {}
-void CPWL_Note_Icon::SetIconType(int32_t nType)
-{
- m_nType = nType;
+void CPWL_Note_Icon::SetIconType(int32_t nType) {
+ m_nType = nType;
}
-void CPWL_Note_Icon::DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device)
-{
- CPWL_Utils::DrawIconAppStream(pDevice, pUser2Device, m_nType, GetClientRect(),
- GetBackgroundColor(), PWL_DEFAULT_BLACKCOLOR, GetTransparency());
+void CPWL_Note_Icon::DrawThisAppearance(CFX_RenderDevice* pDevice,
+ CPDF_Matrix* pUser2Device) {
+ CPWL_Utils::DrawIconAppStream(pDevice, pUser2Device, m_nType, GetClientRect(),
+ GetBackgroundColor(), PWL_DEFAULT_BLACKCOLOR,
+ GetTransparency());
}
-/* --------------------------------- CPWL_Note_CloseBox ---------------------------------- */
+/* --------------------------------- CPWL_Note_CloseBox
+ * ---------------------------------- */
-CPWL_Note_CloseBox::CPWL_Note_CloseBox() : m_bMouseDown(FALSE)
-{
-}
+CPWL_Note_CloseBox::CPWL_Note_CloseBox() : m_bMouseDown(FALSE) {}
-CPWL_Note_CloseBox::~CPWL_Note_CloseBox()
-{
-}
+CPWL_Note_CloseBox::~CPWL_Note_CloseBox() {}
-void CPWL_Note_CloseBox::DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device)
-{
- CPWL_Button::DrawThisAppearance(pDevice, pUser2Device);
+void CPWL_Note_CloseBox::DrawThisAppearance(CFX_RenderDevice* pDevice,
+ CPDF_Matrix* pUser2Device) {
+ CPWL_Button::DrawThisAppearance(pDevice, pUser2Device);
- CPDF_Rect rcClient = GetClientRect();
- rcClient = CPWL_Utils::DeflateRect(rcClient, 2.0f);
+ CPDF_Rect rcClient = GetClientRect();
+ rcClient = CPWL_Utils::DeflateRect(rcClient, 2.0f);
- CFX_GraphStateData gsd;
- gsd.m_LineWidth = 1.0f;
+ CFX_GraphStateData gsd;
+ gsd.m_LineWidth = 1.0f;
- CFX_PathData pathCross;
+ CFX_PathData pathCross;
- if (m_bMouseDown)
- {
- rcClient.left += 0.5f;
- rcClient.right += 0.5f;
- rcClient.top -= 0.5f;
- rcClient.bottom -= 0.5f;
- }
+ if (m_bMouseDown) {
+ rcClient.left += 0.5f;
+ rcClient.right += 0.5f;
+ rcClient.top -= 0.5f;
+ rcClient.bottom -= 0.5f;
+ }
- pathCross.SetPointCount(4);
- pathCross.SetPoint(0, rcClient.left, rcClient.bottom, FXPT_MOVETO);
- pathCross.SetPoint(1, rcClient.right, rcClient.top, FXPT_LINETO);
- pathCross.SetPoint(2, rcClient.left, rcClient.top, FXPT_MOVETO);
- pathCross.SetPoint(3, rcClient.right, rcClient.bottom, FXPT_LINETO);
+ pathCross.SetPointCount(4);
+ pathCross.SetPoint(0, rcClient.left, rcClient.bottom, FXPT_MOVETO);
+ pathCross.SetPoint(1, rcClient.right, rcClient.top, FXPT_LINETO);
+ pathCross.SetPoint(2, rcClient.left, rcClient.top, FXPT_MOVETO);
+ pathCross.SetPoint(3, rcClient.right, rcClient.bottom, FXPT_LINETO);
- pDevice->DrawPath(&pathCross, pUser2Device, &gsd,
- 0, CPWL_Utils::PWLColorToFXColor(GetTextColor(), GetTransparency()), FXFILL_ALTERNATE);
+ pDevice->DrawPath(
+ &pathCross, pUser2Device, &gsd, 0,
+ CPWL_Utils::PWLColorToFXColor(GetTextColor(), GetTransparency()),
+ FXFILL_ALTERNATE);
}
-FX_BOOL CPWL_Note_CloseBox::OnLButtonDown(const CPDF_Point & point, FX_DWORD nFlag)
-{
- SetBorderStyle(PBS_INSET);
- InvalidateRect(NULL);
+FX_BOOL CPWL_Note_CloseBox::OnLButtonDown(const CPDF_Point& point,
+ FX_DWORD nFlag) {
+ SetBorderStyle(PBS_INSET);
+ InvalidateRect(NULL);
- m_bMouseDown = TRUE;
+ m_bMouseDown = TRUE;
- return CPWL_Button::OnLButtonDown(point,nFlag);
+ return CPWL_Button::OnLButtonDown(point, nFlag);
}
-FX_BOOL CPWL_Note_CloseBox::OnLButtonUp(const CPDF_Point & point, FX_DWORD nFlag)
-{
- m_bMouseDown = FALSE;
+FX_BOOL CPWL_Note_CloseBox::OnLButtonUp(const CPDF_Point& point,
+ FX_DWORD nFlag) {
+ m_bMouseDown = FALSE;
- SetBorderStyle(PBS_BEVELED);
- InvalidateRect(NULL);
+ SetBorderStyle(PBS_BEVELED);
+ InvalidateRect(NULL);
- return CPWL_Button::OnLButtonUp(point,nFlag);
+ return CPWL_Button::OnLButtonUp(point, nFlag);
}
-/* ------------------------------ CPWL_Note_Contents ------------------------------- */
+/* ------------------------------ CPWL_Note_Contents
+ * ------------------------------- */
+
+CPWL_Note_Contents::CPWL_Note_Contents() : m_pEdit(NULL) {}
+
+CPWL_Note_Contents::~CPWL_Note_Contents() {}
-CPWL_Note_Contents::CPWL_Note_Contents() : m_pEdit(NULL)
-{
+CFX_ByteString CPWL_Note_Contents::GetClassName() const {
+ return "CPWL_Note_Contents";
}
-CPWL_Note_Contents::~CPWL_Note_Contents()
-{
+void CPWL_Note_Contents::CreateChildWnd(const PWL_CREATEPARAM& cp) {
+ m_pEdit = new CPWL_Note_Edit;
+ PWL_CREATEPARAM ecp = cp;
+ ecp.pParentWnd = this;
+ ecp.dwFlags = PWS_VISIBLE | PWS_CHILD | PES_MULTILINE | PES_AUTORETURN |
+ PES_TEXTOVERFLOW | PES_UNDO | PES_SPELLCHECK;
+
+ m_pEdit->EnableNotify(FALSE);
+ m_pEdit->Create(ecp);
+ m_pEdit->EnableNotify(TRUE);
}
-CFX_ByteString CPWL_Note_Contents::GetClassName() const
-{
- return "CPWL_Note_Contents";
+void CPWL_Note_Contents::SetText(const CFX_WideString& sText) {
+ if (m_pEdit) {
+ m_pEdit->EnableNotify(FALSE);
+ m_pEdit->SetText(sText.c_str());
+ m_pEdit->EnableNotify(TRUE);
+ OnNotify(m_pEdit, PNM_NOTEEDITCHANGED, 0, 0);
+ }
}
-void CPWL_Note_Contents::CreateChildWnd(const PWL_CREATEPARAM & cp)
-{
- m_pEdit = new CPWL_Note_Edit;
- PWL_CREATEPARAM ecp = cp;
- ecp.pParentWnd = this;
- ecp.dwFlags = PWS_VISIBLE | PWS_CHILD | PES_MULTILINE | PES_AUTORETURN | PES_TEXTOVERFLOW | PES_UNDO | PES_SPELLCHECK;
+CFX_WideString CPWL_Note_Contents::GetText() const {
+ if (m_pEdit)
+ return m_pEdit->GetText();
+
+ return L"";
+}
+
+CPWL_NoteItem* CPWL_Note_Contents::CreateSubItem() {
+ CPWL_NoteItem* pNoteItem = new CPWL_NoteItem;
+ PWL_CREATEPARAM icp = GetCreationParam();
+ icp.pParentWnd = this;
+ icp.dwFlags = PWS_CHILD | PWS_VISIBLE | PWS_BACKGROUND;
+ pNoteItem->Create(icp);
+
+ pNoteItem->OnCreateNoteItem();
+
+ pNoteItem->ResetSubjectName(m_aChildren.GetSize() - 1);
+
+ FX_SYSTEMTIME st;
+ if (IFX_SystemHandler* pSH = GetSystemHandler())
+ st = pSH->GetLocalTime();
+ pNoteItem->SetDateTime(st);
+
+ pNoteItem->SetContents(L"");
+
+ OnNotify(pNoteItem, PNM_NOTEEDITCHANGED, 0, 0);
- m_pEdit->EnableNotify(FALSE);
- m_pEdit->Create(ecp);
- m_pEdit->EnableNotify(TRUE);
+ return pNoteItem;
}
-void CPWL_Note_Contents::SetText(const CFX_WideString& sText)
-{
- if (m_pEdit)
- {
- m_pEdit->EnableNotify(FALSE);
- m_pEdit->SetText(sText.c_str());
- m_pEdit->EnableNotify(TRUE);
- OnNotify(m_pEdit, PNM_NOTEEDITCHANGED, 0, 0);
- }
+int32_t CPWL_Note_Contents::CountSubItems() const {
+ return m_aChildren.GetSize() - 1;
}
-CFX_WideString CPWL_Note_Contents::GetText() const
-{
- if (m_pEdit)
- return m_pEdit->GetText();
+IPWL_NoteItem* CPWL_Note_Contents::GetSubItems(int32_t index) const {
+ int32_t nIndex = index + 1;
- return L"";
+ if (nIndex > 0 && nIndex < m_aChildren.GetSize())
+ if (CPWL_Wnd* pChild = m_aChildren.GetAt(nIndex)) {
+ ASSERT(pChild->GetClassName() == "CPWL_NoteItem");
+ CPWL_NoteItem* pItem = (CPWL_NoteItem*)pChild;
+ return pItem;
+ }
+ return NULL;
}
-CPWL_NoteItem* CPWL_Note_Contents::CreateSubItem()
-{
- CPWL_NoteItem* pNoteItem = new CPWL_NoteItem;
- PWL_CREATEPARAM icp = GetCreationParam();
- icp.pParentWnd = this;
- icp.dwFlags = PWS_CHILD | PWS_VISIBLE | PWS_BACKGROUND;
- pNoteItem->Create(icp);
+void CPWL_Note_Contents::DeleteSubItem(IPWL_NoteItem* pNoteItem) {
+ int32_t nIndex = GetItemIndex((CPWL_NoteItem*)pNoteItem);
- pNoteItem->OnCreateNoteItem();
+ if (nIndex > 0) {
+ if (CPWL_NoteItem* pPWLNoteItem = (CPWL_NoteItem*)pNoteItem) {
+ pPWLNoteItem->KillFocus();
+ pPWLNoteItem->Destroy();
+ delete pPWLNoteItem;
+ }
- pNoteItem->ResetSubjectName(m_aChildren.GetSize() - 1);
+ for (int32_t i = nIndex, sz = m_aChildren.GetSize(); i < sz; i++) {
+ if (CPWL_Wnd* pChild = m_aChildren.GetAt(i)) {
+ ASSERT(pChild->GetClassName() == "CPWL_NoteItem");
+ CPWL_NoteItem* pItem = (CPWL_NoteItem*)pChild;
+ pItem->ResetSubjectName(i);
+ }
+ }
- FX_SYSTEMTIME st;
- if (IFX_SystemHandler* pSH = GetSystemHandler())
- st = pSH->GetLocalTime();
- pNoteItem->SetDateTime(st);
+ OnNotify(this, PNM_NOTEEDITCHANGED, 0, 0);
+ }
+}
+
+IPWL_NoteItem* CPWL_Note_Contents::GetHitNoteItem(const CPDF_Point& point) {
+ CPDF_Point pt = ParentToChild(point);
- pNoteItem->SetContents(L"");
+ for (int32_t i = 0, sz = m_aChildren.GetSize(); i < sz; i++) {
+ if (CPWL_Wnd* pChild = m_aChildren.GetAt(i)) {
+ if (pChild->GetClassName() == "CPWL_NoteItem") {
+ CPWL_NoteItem* pNoteItem = (CPWL_NoteItem*)pChild;
+ if (IPWL_NoteItem* pRet = pNoteItem->GetHitNoteItem(pt))
+ return pRet;
+ }
+ }
+ }
+ return NULL;
+}
+
+void CPWL_Note_Contents::OnNotify(CPWL_Wnd* pWnd,
+ FX_DWORD msg,
+ intptr_t wParam,
+ intptr_t lParam) {
+ switch (msg) {
+ case PNM_NOTEEDITCHANGED: {
+ int32_t nIndex = GetItemIndex(pWnd);
+ if (nIndex < 0)
+ nIndex = 0;
+
+ m_pEdit->EnableNotify(FALSE);
+ ResetContent(nIndex);
+ m_pEdit->EnableNotify(TRUE);
+
+ for (int32_t i = nIndex + 1, sz = m_aChildren.GetSize(); i < sz; i++) {
+ if (CPWL_Wnd* pChild = m_aChildren.GetAt(i))
+ pChild->OnNotify(this, PNM_NOTERESET, 0, 0);
+ }
+
+ if (CPWL_Wnd* pParent = GetParentWindow()) {
+ pParent->OnNotify(this, PNM_NOTEEDITCHANGED, 0, 0);
+ }
+ }
+ return;
+ case PNM_SCROLLWINDOW:
+ SetScrollPos(CPDF_Point(0.0f, *(FX_FLOAT*)lParam));
+ ResetFace();
+ InvalidateRect(NULL);
+ return;
+ case PNM_SETCARETINFO:
+ if (PWL_CARET_INFO* pInfo = (PWL_CARET_INFO*)wParam) {
+ PWL_CARET_INFO newInfo = *pInfo;
+ newInfo.bVisible = TRUE;
+ newInfo.ptHead = ChildToParent(pInfo->ptHead);
+ newInfo.ptFoot = ChildToParent(pInfo->ptFoot);
+
+ if (CPWL_Wnd* pParent = GetParentWindow()) {
+ pParent->OnNotify(this, PNM_SETCARETINFO, (intptr_t)&newInfo, 0);
+ }
+ }
+ return;
+ case PNM_NOTERESET: {
+ m_pEdit->EnableNotify(FALSE);
+ ResetContent(0);
+ m_pEdit->EnableNotify(TRUE);
+
+ for (int32_t i = 1, sz = m_aChildren.GetSize(); i < sz; i++) {
+ if (CPWL_Wnd* pChild = m_aChildren.GetAt(i))
+ pChild->OnNotify(this, PNM_NOTERESET, 0, 0);
+ }
+
+ m_pEdit->EnableNotify(FALSE);
+ ResetContent(0);
+ m_pEdit->EnableNotify(TRUE);
+ }
+ return;
+ }
+
+ CPWL_Wnd::OnNotify(pWnd, msg, wParam, lParam);
+}
+
+FX_BOOL CPWL_Note_Contents::OnLButtonDown(const CPDF_Point& point,
+ FX_DWORD nFlag) {
+ if (CPWL_Wnd::OnLButtonDown(point, nFlag))
+ return TRUE;
+
+ if (!m_pEdit->IsFocused()) {
+ m_pEdit->SetFocus();
+ }
+
+ return TRUE;
+}
+
+void CPWL_Note_Contents::SetEditFocus(FX_BOOL bLast) {
+ if (!m_pEdit->IsFocused()) {
+ m_pEdit->SetFocus();
+ m_pEdit->SetCaret(bLast ? m_pEdit->GetTotalWords() : 0);
+ }
+}
+
+CPWL_Edit* CPWL_Note_Contents::GetEdit() const {
+ return m_pEdit;
+}
+
+void CPWL_Note_Contents::EnableModify(FX_BOOL bEnabled) {
+ if (!bEnabled)
+ m_pEdit->AddFlag(PWS_READONLY);
+ else
+ m_pEdit->RemoveFlag(PWS_READONLY);
+
+ for (int32_t i = 0, sz = m_aChildren.GetSize(); i < sz; i++) {
+ if (CPWL_Wnd* pChild = m_aChildren.GetAt(i)) {
+ if (pChild->GetClassName() == "CPWL_NoteItem") {
+ CPWL_NoteItem* pNoteItem = (CPWL_NoteItem*)pChild;
+ pNoteItem->EnableModify(bEnabled);
+ }
+ }
+ }
+}
+
+void CPWL_Note_Contents::EnableRead(FX_BOOL bEnabled) {
+ if (!bEnabled)
+ m_pEdit->AddFlag(PES_NOREAD);
+ else
+ m_pEdit->RemoveFlag(PES_NOREAD);
+
+ for (int32_t i = 0, sz = m_aChildren.GetSize(); i < sz; i++) {
+ if (CPWL_Wnd* pChild = m_aChildren.GetAt(i)) {
+ if (pChild->GetClassName() == "CPWL_NoteItem") {
+ CPWL_NoteItem* pNoteItem = (CPWL_NoteItem*)pChild;
+ pNoteItem->EnableRead(bEnabled);
+ }
+ }
+ }
+}
+
+/* ---------------------------------- CPWL_NoteItem
+ * ---------------------------------- */
+
+CPWL_NoteItem::CPWL_NoteItem()
+ : m_pSubject(NULL),
+ m_pDateTime(NULL),
+ m_pContents(NULL),
+ m_pPrivateData(NULL),
+ m_sAuthor(L""),
+ m_fOldItemHeight(0.0f),
+ m_bSizeChanged(FALSE),
+ m_bAllowModify(TRUE) {}
+
+CPWL_NoteItem::~CPWL_NoteItem() {}
+
+CFX_ByteString CPWL_NoteItem::GetClassName() const {
+ return "CPWL_NoteItem";
+}
+
+void CPWL_NoteItem::CreateChildWnd(const PWL_CREATEPARAM& cp) {
+ CPWL_Color sTextColor;
+
+ if (CPWL_Utils::IsBlackOrWhite(GetBackgroundColor()))
+ sTextColor = PWL_DEFAULT_WHITECOLOR;
+ else
+ sTextColor = PWL_DEFAULT_BLACKCOLOR;
+
+ m_pSubject = new CPWL_Label;
+ PWL_CREATEPARAM scp = cp;
+ scp.pParentWnd = this;
+ scp.dwFlags = PWS_VISIBLE | PWS_CHILD | PES_LEFT | PES_TOP;
+ scp.sTextColor = sTextColor;
+ m_pSubject->Create(scp);
+
+ m_pDateTime = new CPWL_Label;
+ PWL_CREATEPARAM dcp = cp;
+ dcp.pParentWnd = this;
+ dcp.dwFlags = PWS_VISIBLE | PWS_CHILD | PES_RIGHT | PES_TOP;
+ dcp.sTextColor = sTextColor;
+ m_pDateTime->Create(dcp);
+
+ m_pContents = new CPWL_Note_Contents;
+ PWL_CREATEPARAM ccp = cp;
+ ccp.pParentWnd = this;
+ // ccp.sBackgroundColor = PWL_DEFAULT_WHITECOLOR;
+ ccp.sBackgroundColor =
+ CPWL_Color(COLORTYPE_RGB, 240 / 255.0f, 240 / 255.0f, 240 / 255.0f);
+ ccp.dwFlags = PWS_VISIBLE | PWS_CHILD | PWS_BACKGROUND;
+ m_pContents->Create(ccp);
+ m_pContents->SetItemSpace(POPUP_ITEM_SPACE);
+ m_pContents->SetTopSpace(POPUP_ITEM_SPACE);
+ m_pContents->SetBottomSpace(POPUP_ITEM_SPACE);
+}
+
+void CPWL_NoteItem::RePosChildWnd() {
+ if (IsValid()) {
+ ASSERT(m_pSubject != NULL);
+ ASSERT(m_pDateTime != NULL);
+ ASSERT(m_pContents != NULL);
+
+ CPDF_Rect rcClient = GetClientRect();
+
+ CPDF_Rect rcSubject = rcClient;
+ rcSubject.left += POPUP_ITEM_TEXT_INDENT;
+ rcSubject.top = rcClient.top;
+ rcSubject.right =
+ PWL_MIN(rcSubject.left + m_pSubject->GetContentRect().Width() + 1.0f,
+ rcClient.right);
+ rcSubject.bottom = rcSubject.top - m_pSubject->GetContentRect().Height();
+ rcSubject.Normalize();
+ m_pSubject->Move(rcSubject, TRUE, FALSE);
+ m_pSubject->SetVisible(CPWL_Utils::ContainsRect(rcClient, rcSubject));
+
+ CPDF_Rect rcDate = rcClient;
+ rcDate.right -= POPUP_ITEM_TEXT_INDENT;
+ rcDate.left =
+ PWL_MAX(rcDate.right - m_pDateTime->GetContentRect().Width() - 1.0f,
+ rcSubject.right);
+ rcDate.bottom = rcDate.top - m_pDateTime->GetContentRect().Height();
+ rcDate.Normalize();
+ m_pDateTime->Move(rcDate, TRUE, FALSE);
+ m_pDateTime->SetVisible(CPWL_Utils::ContainsRect(rcClient, rcDate));
+
+ CPDF_Rect rcContents = rcClient;
+ rcContents.left += 1.0f;
+ rcContents.right -= 1.0f;
+ rcContents.top = rcDate.bottom - POPUP_ITEM_HEAD_BOTTOM;
+ rcContents.bottom += POPUP_ITEM_BOTTOMWIDTH;
+ rcContents.Normalize();
+ m_pContents->Move(rcContents, TRUE, FALSE);
+ m_pContents->SetVisible(CPWL_Utils::ContainsRect(rcClient, rcContents));
+ }
+
+ SetClipRect(CPWL_Utils::InflateRect(GetWindowRect(), 1.0f));
+}
+
+void CPWL_NoteItem::SetPrivateData(void* pData) {
+ m_pPrivateData = pData;
+}
+
+void CPWL_NoteItem::SetBkColor(const CPWL_Color& color) {
+ CPWL_Color sBK = color;
+ SetBackgroundColor(sBK);
+
+ CPWL_Color sTextColor;
+
+ if (CPWL_Utils::IsBlackOrWhite(sBK))
+ sTextColor = PWL_DEFAULT_WHITECOLOR;
+ else
+ sTextColor = PWL_DEFAULT_BLACKCOLOR;
- OnNotify(pNoteItem, PNM_NOTEEDITCHANGED, 0, 0);
+ SetTextColor(sTextColor);
+ if (m_pSubject)
+ m_pSubject->SetTextColor(sTextColor);
+ if (m_pDateTime)
+ m_pDateTime->SetTextColor(sTextColor);
- return pNoteItem;
+ InvalidateRect(nullptr);
+
+ if (IPWL_NoteNotify* pNotify = GetNoteNotify()) {
+ pNotify->OnSetBkColor(this);
+ }
}
-int32_t CPWL_Note_Contents::CountSubItems() const
-{
- return m_aChildren.GetSize() - 1;
+void CPWL_NoteItem::SetSubjectName(const CFX_WideString& sName) {
+ if (m_pSubject) {
+ m_pSubject->SetText(sName.c_str());
+ }
+
+ if (IPWL_NoteNotify* pNotify = GetNoteNotify()) {
+ pNotify->OnSetSubjectName(this);
+ }
}
-IPWL_NoteItem* CPWL_Note_Contents::GetSubItems(int32_t index) const
-{
- int32_t nIndex = index + 1;
+void CPWL_NoteItem::SetAuthorName(const CFX_WideString& sName) {
+ m_sAuthor = sName;
+ ResetSubjectName(-1);
- if (nIndex > 0 && nIndex < m_aChildren.GetSize())
- if (CPWL_Wnd* pChild = m_aChildren.GetAt(nIndex))
- {
- ASSERT(pChild->GetClassName() == "CPWL_NoteItem");
- CPWL_NoteItem* pItem = (CPWL_NoteItem*)pChild;
- return pItem;
- }
- return NULL;
-}
-
-void CPWL_Note_Contents::DeleteSubItem(IPWL_NoteItem* pNoteItem)
-{
- int32_t nIndex = GetItemIndex((CPWL_NoteItem*)pNoteItem);
-
- if (nIndex > 0)
- {
- if (CPWL_NoteItem* pPWLNoteItem = (CPWL_NoteItem*)pNoteItem)
- {
- pPWLNoteItem->KillFocus();
- pPWLNoteItem->Destroy();
- delete pPWLNoteItem;
- }
-
- for (int32_t i=nIndex,sz=m_aChildren.GetSize(); i<sz; i++)
- {
- if (CPWL_Wnd* pChild = m_aChildren.GetAt(i))
- {
- ASSERT(pChild->GetClassName() == "CPWL_NoteItem");
- CPWL_NoteItem* pItem = (CPWL_NoteItem*)pChild;
- pItem->ResetSubjectName(i);
- }
- }
-
- OnNotify(this, PNM_NOTEEDITCHANGED, 0, 0);
- }
-}
-
-IPWL_NoteItem* CPWL_Note_Contents::GetHitNoteItem(const CPDF_Point& point)
-{
- CPDF_Point pt = ParentToChild(point);
-
- for (int32_t i=0,sz=m_aChildren.GetSize(); i<sz; i++)
- {
- if (CPWL_Wnd* pChild = m_aChildren.GetAt(i))
- {
- if (pChild->GetClassName() == "CPWL_NoteItem")
- {
- CPWL_NoteItem* pNoteItem = (CPWL_NoteItem*)pChild;
- if (IPWL_NoteItem* pRet = pNoteItem->GetHitNoteItem(pt))
- return pRet;
- }
- }
- }
- return NULL;
-}
-
-void CPWL_Note_Contents::OnNotify(CPWL_Wnd* pWnd, FX_DWORD msg, intptr_t wParam, intptr_t lParam)
-{
- switch (msg)
- {
- case PNM_NOTEEDITCHANGED:
- {
- int32_t nIndex = GetItemIndex(pWnd);
- if (nIndex < 0) nIndex = 0;
-
- m_pEdit->EnableNotify(FALSE);
- ResetContent(nIndex);
- m_pEdit->EnableNotify(TRUE);
-
- for (int32_t i=nIndex+1, sz=m_aChildren.GetSize(); i<sz; i++)
- {
- if (CPWL_Wnd* pChild = m_aChildren.GetAt(i))
- pChild->OnNotify(this, PNM_NOTERESET, 0, 0);
- }
-
- if (CPWL_Wnd * pParent = GetParentWindow())
- {
- pParent->OnNotify(this, PNM_NOTEEDITCHANGED, 0, 0);
- }
- }
- return;
- case PNM_SCROLLWINDOW:
- SetScrollPos(CPDF_Point(0.0f, *(FX_FLOAT*)lParam));
- ResetFace();
- InvalidateRect(NULL);
- return;
- case PNM_SETCARETINFO:
- if (PWL_CARET_INFO * pInfo = (PWL_CARET_INFO*)wParam)
- {
- PWL_CARET_INFO newInfo = *pInfo;
- newInfo.bVisible = TRUE;
- newInfo.ptHead = ChildToParent(pInfo->ptHead);
- newInfo.ptFoot = ChildToParent(pInfo->ptFoot);
-
- if (CPWL_Wnd * pParent = GetParentWindow())
- {
- pParent->OnNotify(this, PNM_SETCARETINFO, (intptr_t)&newInfo, 0);
- }
- }
- return;
- case PNM_NOTERESET:
- {
- m_pEdit->EnableNotify(FALSE);
- ResetContent(0);
- m_pEdit->EnableNotify(TRUE);
-
- for (int32_t i=1, sz=m_aChildren.GetSize(); i<sz; i++)
- {
- if (CPWL_Wnd* pChild = m_aChildren.GetAt(i))
- pChild->OnNotify(this, PNM_NOTERESET, 0, 0);
- }
-
- m_pEdit->EnableNotify(FALSE);
- ResetContent(0);
- m_pEdit->EnableNotify(TRUE);
- }
- return;
- }
-
- CPWL_Wnd::OnNotify(pWnd, msg, wParam, lParam);
-}
-
-FX_BOOL CPWL_Note_Contents::OnLButtonDown(const CPDF_Point & point, FX_DWORD nFlag)
-{
- if (CPWL_Wnd::OnLButtonDown(point,nFlag)) return TRUE;
-
- if (!m_pEdit->IsFocused())
- {
- m_pEdit->SetFocus();
- }
-
- return TRUE;
-}
-
-void CPWL_Note_Contents::SetEditFocus(FX_BOOL bLast)
-{
- if (!m_pEdit->IsFocused())
- {
- m_pEdit->SetFocus();
- m_pEdit->SetCaret(bLast ? m_pEdit->GetTotalWords() : 0);
- }
-}
-
-CPWL_Edit* CPWL_Note_Contents::GetEdit() const
-{
- return m_pEdit;
-}
-
-void CPWL_Note_Contents::EnableModify(FX_BOOL bEnabled)
-{
- if (!bEnabled)
- m_pEdit->AddFlag(PWS_READONLY);
- else
- m_pEdit->RemoveFlag(PWS_READONLY);
-
- for (int32_t i=0,sz=m_aChildren.GetSize(); i<sz; i++)
- {
- if (CPWL_Wnd* pChild = m_aChildren.GetAt(i))
- {
- if (pChild->GetClassName() == "CPWL_NoteItem")
- {
- CPWL_NoteItem* pNoteItem = (CPWL_NoteItem*)pChild;
- pNoteItem->EnableModify(bEnabled);
- }
- }
- }
-}
-
-void CPWL_Note_Contents::EnableRead(FX_BOOL bEnabled)
-{
- if (!bEnabled)
- m_pEdit->AddFlag(PES_NOREAD);
- else
- m_pEdit->RemoveFlag(PES_NOREAD);
-
- for (int32_t i=0,sz=m_aChildren.GetSize(); i<sz; i++)
- {
- if (CPWL_Wnd* pChild = m_aChildren.GetAt(i))
- {
- if (pChild->GetClassName() == "CPWL_NoteItem")
- {
- CPWL_NoteItem* pNoteItem = (CPWL_NoteItem*)pChild;
- pNoteItem->EnableRead(bEnabled);
- }
- }
- }
-}
-
-/* ---------------------------------- CPWL_NoteItem ---------------------------------- */
-
-CPWL_NoteItem::CPWL_NoteItem() :
- m_pSubject(NULL),
- m_pDateTime(NULL),
- m_pContents(NULL),
- m_pPrivateData(NULL),
- m_sAuthor(L""),
- m_fOldItemHeight(0.0f),
- m_bSizeChanged(FALSE),
- m_bAllowModify(TRUE)
-{
-}
-
-CPWL_NoteItem::~CPWL_NoteItem()
-{
-}
-
-CFX_ByteString CPWL_NoteItem::GetClassName() const
-{
- return "CPWL_NoteItem";
-}
-
-void CPWL_NoteItem::CreateChildWnd(const PWL_CREATEPARAM & cp)
-{
- CPWL_Color sTextColor;
-
- if (CPWL_Utils::IsBlackOrWhite(GetBackgroundColor()))
- sTextColor = PWL_DEFAULT_WHITECOLOR;
- else
- sTextColor = PWL_DEFAULT_BLACKCOLOR;
-
- m_pSubject = new CPWL_Label;
- PWL_CREATEPARAM scp = cp;
- scp.pParentWnd = this;
- scp.dwFlags = PWS_VISIBLE | PWS_CHILD | PES_LEFT | PES_TOP;
- scp.sTextColor = sTextColor;
- m_pSubject->Create(scp);
-
- m_pDateTime = new CPWL_Label;
- PWL_CREATEPARAM dcp = cp;
- dcp.pParentWnd = this;
- dcp.dwFlags = PWS_VISIBLE | PWS_CHILD | PES_RIGHT | PES_TOP;
- dcp.sTextColor = sTextColor;
- m_pDateTime->Create(dcp);
-
- m_pContents = new CPWL_Note_Contents;
- PWL_CREATEPARAM ccp = cp;
- ccp.pParentWnd = this;
- //ccp.sBackgroundColor = PWL_DEFAULT_WHITECOLOR;
- ccp.sBackgroundColor = CPWL_Color(COLORTYPE_RGB, 240/255.0f, 240/255.0f, 240/255.0f);
- ccp.dwFlags = PWS_VISIBLE | PWS_CHILD | PWS_BACKGROUND;
- m_pContents->Create(ccp);
- m_pContents->SetItemSpace(POPUP_ITEM_SPACE);
- m_pContents->SetTopSpace(POPUP_ITEM_SPACE);
- m_pContents->SetBottomSpace(POPUP_ITEM_SPACE);
-}
-
-void CPWL_NoteItem::RePosChildWnd()
-{
- if (IsValid())
- {
- ASSERT(m_pSubject != NULL);
- ASSERT(m_pDateTime != NULL);
- ASSERT(m_pContents != NULL);
-
- CPDF_Rect rcClient = GetClientRect();
-
- CPDF_Rect rcSubject = rcClient;
- rcSubject.left += POPUP_ITEM_TEXT_INDENT;
- rcSubject.top = rcClient.top;
- rcSubject.right = PWL_MIN(rcSubject.left + m_pSubject->GetContentRect().Width() + 1.0f, rcClient.right);
- rcSubject.bottom = rcSubject.top - m_pSubject->GetContentRect().Height();
- rcSubject.Normalize();
- m_pSubject->Move(rcSubject, TRUE, FALSE);
- m_pSubject->SetVisible(CPWL_Utils::ContainsRect(rcClient, rcSubject));
-
- CPDF_Rect rcDate = rcClient;
- rcDate.right -= POPUP_ITEM_TEXT_INDENT;
- rcDate.left = PWL_MAX(rcDate.right - m_pDateTime->GetContentRect().Width() - 1.0f, rcSubject.right);
- rcDate.bottom = rcDate.top - m_pDateTime->GetContentRect().Height();
- rcDate.Normalize();
- m_pDateTime->Move(rcDate, TRUE, FALSE);
- m_pDateTime->SetVisible(CPWL_Utils::ContainsRect(rcClient, rcDate));
-
- CPDF_Rect rcContents = rcClient;
- rcContents.left += 1.0f;
- rcContents.right -= 1.0f;
- rcContents.top = rcDate.bottom - POPUP_ITEM_HEAD_BOTTOM;
- rcContents.bottom += POPUP_ITEM_BOTTOMWIDTH;
- rcContents.Normalize();
- m_pContents->Move(rcContents, TRUE, FALSE);
- m_pContents->SetVisible(CPWL_Utils::ContainsRect(rcClient, rcContents));
- }
-
- SetClipRect(CPWL_Utils::InflateRect(GetWindowRect(),1.0f));
-}
-
-void CPWL_NoteItem::SetPrivateData(void* pData)
-{
- m_pPrivateData = pData;
-}
-
-void CPWL_NoteItem::SetBkColor(const CPWL_Color& color)
-{
- CPWL_Color sBK = color;
- SetBackgroundColor(sBK);
-
- CPWL_Color sTextColor;
-
- if (CPWL_Utils::IsBlackOrWhite(sBK))
- sTextColor = PWL_DEFAULT_WHITECOLOR;
- else
- sTextColor = PWL_DEFAULT_BLACKCOLOR;
-
- SetTextColor(sTextColor);
- if (m_pSubject)
- m_pSubject->SetTextColor(sTextColor);
- if (m_pDateTime)
- m_pDateTime->SetTextColor(sTextColor);
-
- InvalidateRect(nullptr);
-
- if (IPWL_NoteNotify* pNotify = GetNoteNotify())
- {
- pNotify->OnSetBkColor(this);
- }
-}
-
-void CPWL_NoteItem::SetSubjectName(const CFX_WideString& sName)
-{
- if (m_pSubject)
- {
- m_pSubject->SetText(sName.c_str());
- }
-
- if (IPWL_NoteNotify* pNotify = GetNoteNotify())
- {
- pNotify->OnSetSubjectName(this);
- }
-}
-
-void CPWL_NoteItem::SetAuthorName(const CFX_WideString& sName)
-{
- m_sAuthor = sName;
- ResetSubjectName(-1);
-
- if (IPWL_NoteNotify* pNotify = GetNoteNotify())
- {
- pNotify->OnSetAuthorName(this);
- }
-}
+ if (IPWL_NoteNotify* pNotify = GetNoteNotify()) {
+ pNotify->OnSetAuthorName(this);
+ }
+}
-void CPWL_NoteItem::ResetSubjectName(int32_t nItemIndex)
-{
- if (nItemIndex < 0)
- {
- if (CPWL_Wnd* pParent = GetParentWindow())
- {
- ASSERT(pParent->GetClassName() == "CPWL_Note_Contents");
+void CPWL_NoteItem::ResetSubjectName(int32_t nItemIndex) {
+ if (nItemIndex < 0) {
+ if (CPWL_Wnd* pParent = GetParentWindow()) {
+ ASSERT(pParent->GetClassName() == "CPWL_Note_Contents");
- CPWL_Note_Contents* pContents = (CPWL_Note_Contents*)pParent;
- nItemIndex = pContents->GetItemIndex(this);
- }
- }
+ CPWL_Note_Contents* pContents = (CPWL_Note_Contents*)pParent;
+ nItemIndex = pContents->GetItemIndex(this);
+ }
+ }
- const CPWL_Note* pNote = GetNote();
- ASSERT(pNote != NULL);
+ const CPWL_Note* pNote = GetNote();
+ ASSERT(pNote != NULL);
- CFX_WideString sSubject;
- sSubject.Format(pNote->GetReplyString().c_str(), nItemIndex);
+ CFX_WideString sSubject;
+ sSubject.Format(pNote->GetReplyString().c_str(), nItemIndex);
- if (!m_sAuthor.IsEmpty())
- {
- sSubject += L" - ";
- sSubject += m_sAuthor;
- }
- SetSubjectName(sSubject);
- RePosChildWnd();
+ if (!m_sAuthor.IsEmpty()) {
+ sSubject += L" - ";
+ sSubject += m_sAuthor;
+ }
+ SetSubjectName(sSubject);
+ RePosChildWnd();
}
-void CPWL_NoteItem::SetDateTime(FX_SYSTEMTIME time)
-{
- m_dtNote = time;
+void CPWL_NoteItem::SetDateTime(FX_SYSTEMTIME time) {
+ m_dtNote = time;
- CFX_WideString swTime;
- swTime.Format(L"%04d-%02d-%02d %02d:%02d:%02d", time.wYear, time.wMonth, time.wDay, time.wHour, time.wMinute, time.wSecond);
- if (m_pDateTime)
- {
- m_pDateTime->SetText(swTime.c_str());
- }
+ CFX_WideString swTime;
+ swTime.Format(L"%04d-%02d-%02d %02d:%02d:%02d", time.wYear, time.wMonth,
+ time.wDay, time.wHour, time.wMinute, time.wSecond);
+ if (m_pDateTime) {
+ m_pDateTime->SetText(swTime.c_str());
+ }
- RePosChildWnd();
+ RePosChildWnd();
- if (IPWL_NoteNotify* pNotify = GetNoteNotify())
- {
- pNotify->OnSetDateTime(this);
- }
+ if (IPWL_NoteNotify* pNotify = GetNoteNotify()) {
+ pNotify->OnSetDateTime(this);
+ }
}
-void CPWL_NoteItem::SetContents(const CFX_WideString& sContents)
-{
- if (m_pContents)
- {
- m_pContents->SetText(sContents);
- }
+void CPWL_NoteItem::SetContents(const CFX_WideString& sContents) {
+ if (m_pContents) {
+ m_pContents->SetText(sContents);
+ }
- if (IPWL_NoteNotify* pNotify = GetNoteNotify())
- {
- pNotify->OnSetContents(this);
- }
+ if (IPWL_NoteNotify* pNotify = GetNoteNotify()) {
+ pNotify->OnSetContents(this);
+ }
}
-CPWL_NoteItem* CPWL_NoteItem::GetParentNoteItem() const
-{
- if (CPWL_Wnd* pParent = GetParentWindow())
- {
- if (CPWL_Wnd* pGrand = pParent->GetParentWindow())
- {
- ASSERT(pGrand->GetClassName() == "CPWL_NoteItem");
- return (CPWL_NoteItem*)pGrand;
- }
- }
+CPWL_NoteItem* CPWL_NoteItem::GetParentNoteItem() const {
+ if (CPWL_Wnd* pParent = GetParentWindow()) {
+ if (CPWL_Wnd* pGrand = pParent->GetParentWindow()) {
+ ASSERT(pGrand->GetClassName() == "CPWL_NoteItem");
+ return (CPWL_NoteItem*)pGrand;
+ }
+ }
- return NULL;
+ return NULL;
}
-IPWL_NoteItem* CPWL_NoteItem::GetParentItem() const
-{
- return GetParentNoteItem();
+IPWL_NoteItem* CPWL_NoteItem::GetParentItem() const {
+ return GetParentNoteItem();
}
-CPWL_Edit* CPWL_NoteItem::GetEdit() const
-{
- if (m_pContents)
- return m_pContents->GetEdit();
- return NULL;
+CPWL_Edit* CPWL_NoteItem::GetEdit() const {
+ if (m_pContents)
+ return m_pContents->GetEdit();
+ return NULL;
}
-void* CPWL_NoteItem::GetPrivateData() const
-{
- return m_pPrivateData;
+void* CPWL_NoteItem::GetPrivateData() const {
+ return m_pPrivateData;
}
-CFX_WideString CPWL_NoteItem::GetAuthorName() const
-{
- return m_sAuthor;
+CFX_WideString CPWL_NoteItem::GetAuthorName() const {
+ return m_sAuthor;
}
-CPWL_Color CPWL_NoteItem::GetBkColor() const
-{
- return GetBackgroundColor();
+CPWL_Color CPWL_NoteItem::GetBkColor() const {
+ return GetBackgroundColor();
}
-CFX_WideString CPWL_NoteItem::GetContents() const
-{
- if (m_pContents)
- return m_pContents->GetText();
+CFX_WideString CPWL_NoteItem::GetContents() const {
+ if (m_pContents)
+ return m_pContents->GetText();
- return L"";
+ return L"";
}
-FX_SYSTEMTIME CPWL_NoteItem::GetDateTime() const
-{
- return m_dtNote;
+FX_SYSTEMTIME CPWL_NoteItem::GetDateTime() const {
+ return m_dtNote;
}
-CFX_WideString CPWL_NoteItem::GetSubjectName() const
-{
- if (m_pSubject)
- return m_pSubject->GetText();
+CFX_WideString CPWL_NoteItem::GetSubjectName() const {
+ if (m_pSubject)
+ return m_pSubject->GetText();
- return L"";
+ return L"";
}
-CPWL_NoteItem* CPWL_NoteItem::CreateNoteItem()
-{
- if (m_pContents)
- return m_pContents->CreateSubItem();
+CPWL_NoteItem* CPWL_NoteItem::CreateNoteItem() {
+ if (m_pContents)
+ return m_pContents->CreateSubItem();
- return NULL;
+ return NULL;
}
-IPWL_NoteItem* CPWL_NoteItem::CreateSubItem()
-{
- return CreateNoteItem();
+IPWL_NoteItem* CPWL_NoteItem::CreateSubItem() {
+ return CreateNoteItem();
}
-int32_t CPWL_NoteItem::CountSubItems() const
-{
- if (m_pContents)
- return m_pContents->CountSubItems();
+int32_t CPWL_NoteItem::CountSubItems() const {
+ if (m_pContents)
+ return m_pContents->CountSubItems();
- return 0;
+ return 0;
}
-IPWL_NoteItem* CPWL_NoteItem::GetSubItems(int32_t index) const
-{
- if (m_pContents)
- return m_pContents->GetSubItems(index);
+IPWL_NoteItem* CPWL_NoteItem::GetSubItems(int32_t index) const {
+ if (m_pContents)
+ return m_pContents->GetSubItems(index);
- return NULL;
+ return NULL;
}
-void CPWL_NoteItem::DeleteSubItem(IPWL_NoteItem* pNoteItem)
-{
- KillFocus();
+void CPWL_NoteItem::DeleteSubItem(IPWL_NoteItem* pNoteItem) {
+ KillFocus();
- if (IPWL_NoteNotify* pNotify = GetNoteNotify())
- {
- pNotify->OnItemDelete(pNoteItem);
- }
+ if (IPWL_NoteNotify* pNotify = GetNoteNotify()) {
+ pNotify->OnItemDelete(pNoteItem);
+ }
- if (m_pContents)
- m_pContents->DeleteSubItem(pNoteItem);
+ if (m_pContents)
+ m_pContents->DeleteSubItem(pNoteItem);
}
-IPWL_NoteItem* CPWL_NoteItem::GetHitNoteItem(const CPDF_Point& point)
-{
- CPDF_Point pt = ParentToChild(point);
+IPWL_NoteItem* CPWL_NoteItem::GetHitNoteItem(const CPDF_Point& point) {
+ CPDF_Point pt = ParentToChild(point);
- if (WndHitTest(pt))
- {
- if (m_pContents)
- {
- if (IPWL_NoteItem* pNoteItem = m_pContents->GetHitNoteItem(pt))
- return pNoteItem;
- }
+ if (WndHitTest(pt)) {
+ if (m_pContents) {
+ if (IPWL_NoteItem* pNoteItem = m_pContents->GetHitNoteItem(pt))
+ return pNoteItem;
+ }
- return this;
- }
+ return this;
+ }
- return NULL;
+ return NULL;
}
-IPWL_NoteItem* CPWL_NoteItem::GetFocusedNoteItem() const
-{
- if (const CPWL_Wnd* pWnd = GetFocused())
- {
- if (pWnd->GetClassName() == "CPWL_Edit")
- {
- if (CPWL_Wnd* pParent = pWnd->GetParentWindow())
- {
- ASSERT(pParent->GetClassName() == "CPWL_Note_Contents");
+IPWL_NoteItem* CPWL_NoteItem::GetFocusedNoteItem() const {
+ if (const CPWL_Wnd* pWnd = GetFocused()) {
+ if (pWnd->GetClassName() == "CPWL_Edit") {
+ if (CPWL_Wnd* pParent = pWnd->GetParentWindow()) {
+ ASSERT(pParent->GetClassName() == "CPWL_Note_Contents");
- if (CPWL_Wnd* pGrand = pParent->GetParentWindow())
- {
- ASSERT(pGrand->GetClassName() == "CPWL_NoteItem");
- return (CPWL_NoteItem*)pGrand;
- }
- }
- }
- }
+ if (CPWL_Wnd* pGrand = pParent->GetParentWindow()) {
+ ASSERT(pGrand->GetClassName() == "CPWL_NoteItem");
+ return (CPWL_NoteItem*)pGrand;
+ }
+ }
+ }
+ }
- return NULL;
+ return NULL;
}
-FX_FLOAT CPWL_NoteItem::GetItemHeight(FX_FLOAT fLimitWidth)
-{
- if (fLimitWidth > 0)
- {
- if (!m_bSizeChanged)
- return m_fOldItemHeight;
+FX_FLOAT CPWL_NoteItem::GetItemHeight(FX_FLOAT fLimitWidth) {
+ if (fLimitWidth > 0) {
+ if (!m_bSizeChanged)
+ return m_fOldItemHeight;
+
+ m_bSizeChanged = FALSE;
- m_bSizeChanged = FALSE;
+ ASSERT(m_pSubject != NULL);
+ ASSERT(m_pDateTime != NULL);
+ ASSERT(m_pContents != NULL);
- ASSERT(m_pSubject != NULL);
- ASSERT(m_pDateTime != NULL);
- ASSERT(m_pContents != NULL);
+ FX_FLOAT fRet = m_pDateTime->GetContentRect().Height();
+ FX_FLOAT fBorderWidth = (FX_FLOAT)GetBorderWidth();
+ if (fLimitWidth > fBorderWidth * 2)
+ fRet += m_pContents->GetContentsHeight(fLimitWidth - fBorderWidth * 2);
+ fRet += POPUP_ITEM_HEAD_BOTTOM + POPUP_ITEM_BOTTOMWIDTH + fBorderWidth * 2;
- FX_FLOAT fRet = m_pDateTime->GetContentRect().Height();
- FX_FLOAT fBorderWidth = (FX_FLOAT)GetBorderWidth();
- if (fLimitWidth > fBorderWidth * 2)
- fRet += m_pContents->GetContentsHeight(fLimitWidth - fBorderWidth * 2);
- fRet += POPUP_ITEM_HEAD_BOTTOM + POPUP_ITEM_BOTTOMWIDTH + fBorderWidth * 2;
+ return m_fOldItemHeight = fRet;
+ }
- return m_fOldItemHeight = fRet;
- }
+ return 0;
+}
- return 0;
+FX_FLOAT CPWL_NoteItem::GetItemLeftMargin() {
+ return POPUP_ITEM_SIDEMARGIN;
}
-FX_FLOAT CPWL_NoteItem::GetItemLeftMargin()
-{
- return POPUP_ITEM_SIDEMARGIN;
+FX_FLOAT CPWL_NoteItem::GetItemRightMargin() {
+ return POPUP_ITEM_SIDEMARGIN;
}
-FX_FLOAT CPWL_NoteItem::GetItemRightMargin()
-{
- return POPUP_ITEM_SIDEMARGIN;
+FX_BOOL CPWL_NoteItem::OnLButtonDown(const CPDF_Point& point, FX_DWORD nFlag) {
+ if (!m_pContents->WndHitTest(m_pContents->ParentToChild(point))) {
+ SetNoteFocus(FALSE);
+ }
+
+ CPWL_Wnd::OnLButtonDown(point, nFlag);
+
+ return TRUE;
+}
+
+FX_BOOL CPWL_NoteItem::OnRButtonUp(const CPDF_Point& point, FX_DWORD nFlag) {
+ if (!m_pContents->WndHitTest(m_pContents->ParentToChild(point))) {
+ SetNoteFocus(FALSE);
+ PopupNoteItemMenu(point);
+
+ return TRUE;
+ }
+
+ return CPWL_Wnd::OnRButtonUp(point, nFlag);
}
-FX_BOOL CPWL_NoteItem::OnLButtonDown(const CPDF_Point& point, FX_DWORD nFlag)
-{
- if (!m_pContents->WndHitTest(m_pContents->ParentToChild(point)))
- {
- SetNoteFocus(FALSE);
- }
+void CPWL_NoteItem::OnNotify(CPWL_Wnd* pWnd,
+ FX_DWORD msg,
+ intptr_t wParam,
+ intptr_t lParam) {
+ switch (msg) {
+ case PNM_NOTEEDITCHANGED:
+ m_bSizeChanged = TRUE;
- CPWL_Wnd::OnLButtonDown(point,nFlag);
+ if (CPWL_Wnd* pParent = GetParentWindow()) {
+ pParent->OnNotify(this, PNM_NOTEEDITCHANGED, 0, 0);
+ }
+ return;
+ case PNM_SETCARETINFO:
+ if (PWL_CARET_INFO* pInfo = (PWL_CARET_INFO*)wParam) {
+ PWL_CARET_INFO newInfo = *pInfo;
+ newInfo.bVisible = TRUE;
+ newInfo.ptHead = ChildToParent(pInfo->ptHead);
+ newInfo.ptFoot = ChildToParent(pInfo->ptFoot);
- return TRUE;
+ if (CPWL_Wnd* pParent = GetParentWindow()) {
+ pParent->OnNotify(this, PNM_SETCARETINFO, (intptr_t)&newInfo, 0);
+ }
+ }
+ return;
+ case PNM_NOTERESET:
+ m_bSizeChanged = TRUE;
+ m_pContents->OnNotify(this, PNM_NOTERESET, 0, 0);
+
+ return;
+ }
+
+ CPWL_Wnd::OnNotify(pWnd, msg, wParam, lParam);
}
-FX_BOOL CPWL_NoteItem::OnRButtonUp(const CPDF_Point & point, FX_DWORD nFlag)
-{
- if (!m_pContents->WndHitTest(m_pContents->ParentToChild(point)))
- {
- SetNoteFocus(FALSE);
- PopupNoteItemMenu(point);
+void CPWL_NoteItem::PopupNoteItemMenu(const CPDF_Point& point) {
+ if (IPWL_NoteNotify* pNotify = GetNoteNotify()) {
+ int32_t x, y;
+ PWLtoWnd(point, x, y);
+ if (IFX_SystemHandler* pSH = GetSystemHandler())
+ pSH->ClientToScreen(GetAttachedHWnd(), x, y);
+ pNotify->OnPopupMenu(this, x, y);
+ }
+}
- return TRUE;
- }
+const CPWL_Note* CPWL_NoteItem::GetNote() const {
+ if (const CPWL_Wnd* pRoot = GetRootWnd()) {
+ ASSERT(pRoot->GetClassName() == "CPWL_NoteItem");
+ CPWL_NoteItem* pNoteItem = (CPWL_NoteItem*)pRoot;
+ if (pNoteItem->IsTopItem()) {
+ return (CPWL_Note*)pNoteItem;
+ }
+ }
- return CPWL_Wnd::OnRButtonUp(point,nFlag);
+ return NULL;
}
-void CPWL_NoteItem::OnNotify(CPWL_Wnd* pWnd, FX_DWORD msg, intptr_t wParam, intptr_t lParam)
-{
- switch (msg)
- {
- case PNM_NOTEEDITCHANGED:
- m_bSizeChanged = TRUE;
+IPWL_NoteNotify* CPWL_NoteItem::GetNoteNotify() const {
+ if (const CPWL_Note* pNote = GetNote())
+ return pNote->GetNoteNotify();
- if (CPWL_Wnd* pParent = GetParentWindow())
- {
- pParent->OnNotify(this, PNM_NOTEEDITCHANGED, 0, 0);
- }
- return;
- case PNM_SETCARETINFO:
- if (PWL_CARET_INFO * pInfo = (PWL_CARET_INFO*)wParam)
- {
- PWL_CARET_INFO newInfo = *pInfo;
- newInfo.bVisible = TRUE;
- newInfo.ptHead = ChildToParent(pInfo->ptHead);
- newInfo.ptFoot = ChildToParent(pInfo->ptFoot);
-
- if (CPWL_Wnd * pParent = GetParentWindow())
- {
- pParent->OnNotify(this, PNM_SETCARETINFO, (intptr_t)&newInfo, 0);
- }
- }
- return;
- case PNM_NOTERESET:
- m_bSizeChanged = TRUE;
- m_pContents->OnNotify(this, PNM_NOTERESET, 0, 0);
+ return NULL;
+}
- return;
- }
+void CPWL_NoteItem::OnCreateNoteItem() {
+ if (IPWL_NoteNotify* pNotify = GetNoteNotify()) {
+ pNotify->OnItemCreate(this);
+ }
+}
- CPWL_Wnd::OnNotify(pWnd, msg, wParam, lParam);
+void CPWL_NoteItem::OnContentsValidate() {
+ if (IPWL_NoteNotify* pNotify = GetNoteNotify()) {
+ pNotify->OnSetContents(this);
+ }
}
-void CPWL_NoteItem::PopupNoteItemMenu(const CPDF_Point& point)
-{
- if (IPWL_NoteNotify* pNotify = GetNoteNotify())
- {
- int32_t x,y;
- PWLtoWnd(point, x, y);
- if (IFX_SystemHandler* pSH = GetSystemHandler())
- pSH->ClientToScreen(GetAttachedHWnd(), x, y);
- pNotify->OnPopupMenu(this, x, y);
- }
+void CPWL_NoteItem::SetNoteFocus(FX_BOOL bLast) {
+ m_pContents->SetEditFocus(bLast);
}
-const CPWL_Note* CPWL_NoteItem::GetNote() const
-{
- if (const CPWL_Wnd* pRoot = GetRootWnd())
- {
- ASSERT(pRoot->GetClassName() == "CPWL_NoteItem");
- CPWL_NoteItem* pNoteItem = (CPWL_NoteItem*)pRoot;
- if (pNoteItem->IsTopItem())
- {
- return (CPWL_Note*)pNoteItem;
- }
- }
+void CPWL_NoteItem::EnableModify(FX_BOOL bEnabled) {
+ m_pContents->EnableModify(bEnabled);
+ m_bAllowModify = bEnabled;
+}
- return NULL;
+void CPWL_NoteItem::EnableRead(FX_BOOL bEnabled) {
+ m_pContents->EnableRead(bEnabled);
}
-IPWL_NoteNotify* CPWL_NoteItem::GetNoteNotify() const
-{
- if (const CPWL_Note* pNote = GetNote())
- return pNote->GetNoteNotify();
-
- return NULL;
-}
-
-void CPWL_NoteItem::OnCreateNoteItem()
-{
- if (IPWL_NoteNotify* pNotify = GetNoteNotify())
- {
- pNotify->OnItemCreate(this);
- }
-}
-
-void CPWL_NoteItem::OnContentsValidate()
-{
- if (IPWL_NoteNotify* pNotify = GetNoteNotify())
- {
- pNotify->OnSetContents(this);
- }
-}
-
-void CPWL_NoteItem::SetNoteFocus(FX_BOOL bLast)
-{
- m_pContents->SetEditFocus(bLast);
-}
-
-void CPWL_NoteItem::EnableModify(FX_BOOL bEnabled)
-{
- m_pContents->EnableModify(bEnabled);
- m_bAllowModify = bEnabled;
-}
-
-void CPWL_NoteItem::EnableRead(FX_BOOL bEnabled)
-{
- m_pContents->EnableRead(bEnabled);
-}
-
-/* ---------------------------------- CPWL_Note ---------------------------------- */
-
-CPWL_Note::CPWL_Note(IPopup_Note* pPopupNote, IPWL_NoteNotify* pNoteNotify, IPWL_NoteHandler* pNoteHandler) :
- m_pAuthor(NULL),
- m_pIcon(NULL),
- m_pCloseBox(NULL),
- m_pLBBox(NULL),
- m_pRBBox(NULL),
- m_pContentsBar(NULL),
- m_pOptions(NULL),
- m_pNoteNotify(pNoteNotify),
- m_bResizing(FALSE),
- m_rcCaption(0,0,0,0),
- m_bEnalbleNotify(TRUE),
- m_pPopupNote(pPopupNote)
-{
-}
-
-CPWL_Note::~CPWL_Note()
-{
-}
-
-IPWL_NoteItem* CPWL_Note::Reply()
-{
- return CreateNoteItem();
-}
-
-void CPWL_Note::EnableNotify(FX_BOOL bEnabled)
-{
- m_bEnalbleNotify = bEnabled;
-}
-
-void CPWL_Note::RePosChildWnd()
-{
- RePosNoteChildren();
- m_pContents->OnNotify(this, PNM_NOTERESET, 0, 0);
- ResetScrollBar();
- m_pContents->OnNotify(this, PNM_NOTERESET, 0, 0);
- OnNotify(this, PNM_NOTEEDITCHANGED, 0, 0);
- if (const CPWL_Wnd* pWnd = GetFocused())
- {
- if (pWnd->GetClassName() == "CPWL_Edit")
- {
- CPWL_Edit* pEdit = (CPWL_Edit*)pWnd;
- pEdit->SetCaret(pEdit->GetCaret());
- }
- }
-}
-
-FX_BOOL CPWL_Note::ResetScrollBar()
-{
- FX_BOOL bScrollChanged = FALSE;
-
- if (ScrollBarShouldVisible())
- {
- if (!m_pContentsBar->IsVisible())
- {
- m_pContentsBar->SetVisible(TRUE);
- if (m_pContentsBar->IsVisible())
- {
- m_pContentsBar->InvalidateRect(NULL);
- bScrollChanged = TRUE;
- }
- }
- }
- else
- {
- if (m_pContentsBar->IsVisible())
- {
- m_pContentsBar->SetVisible(FALSE);
- m_pContentsBar->InvalidateRect(NULL);
-
- bScrollChanged = TRUE;
- }
- }
-
- if (bScrollChanged)
- {
- CPDF_Rect rcNote = GetClientRect();
- CPDF_Rect rcContents = m_pContents->GetWindowRect();
- rcContents.right = rcNote.right - 3.0f;
- if (m_pContentsBar->IsVisible())
- rcContents.right -= PWL_SCROLLBAR_WIDTH;
- m_pContents->Move(rcContents, TRUE, TRUE);
- m_pContents->SetScrollPos(CPDF_Point(0.0f,0.0f));
- m_pContents->InvalidateRect(NULL);
- }
-
- return bScrollChanged;
-}
-
-FX_BOOL CPWL_Note::ScrollBarShouldVisible()
-{
- CPDF_Rect rcContentsFact = m_pContents->GetScrollArea();
- CPDF_Rect rcContentsClient = m_pContents->GetClientRect();
-
- return rcContentsFact.Height() > rcContentsClient.Height();
-}
-
-void CPWL_Note::SetOptionsText(const CFX_WideString& sText)
-{
- if (m_pOptions)
- m_pOptions->SetText(sText);
-
- RePosNoteChildren();
-}
-
-void CPWL_Note::RePosNoteChildren()
-{
- if (m_bResizing) return;
-
- m_bResizing = TRUE;
-
- if (IsValid())
- {
- ASSERT(m_pSubject != NULL);
- ASSERT(m_pDateTime != NULL);
- ASSERT(m_pContents != NULL);
- ASSERT(m_pAuthor != NULL);
- ASSERT(m_pCloseBox != NULL);
- ASSERT(m_pIcon != NULL);
- ASSERT(m_pLBBox != NULL);
- ASSERT(m_pRBBox != NULL);
- ASSERT(m_pContentsBar != NULL);
- ASSERT(m_pOptions != NULL);
-
- CPDF_Rect rcClient = GetClientRect();
-
- CPDF_Rect rcIcon = rcClient;
- rcIcon.top -= 2.0f;
- rcIcon.right = rcIcon.left + 14.0f;
- rcIcon.bottom = rcIcon.top - 14.0f;
- rcIcon.Normalize();
- m_pIcon->Move(rcIcon, TRUE, FALSE);
- m_pIcon->SetVisible(CPWL_Utils::ContainsRect(rcClient, rcIcon));
-
- CPDF_Rect rcCloseBox = rcClient;
- rcCloseBox.right -= 1.0f;
- rcCloseBox.top -= 1.0f;
- rcCloseBox.left = rcCloseBox.right - 14.0f;
- rcCloseBox.bottom = rcCloseBox.top - 14.0f;
- rcCloseBox.Normalize();
- m_pCloseBox->Move(rcCloseBox, TRUE, FALSE);
- m_pCloseBox->SetVisible(CPWL_Utils::ContainsRect(rcClient, rcCloseBox));
-
- CPDF_Rect rcDate = rcClient;
- rcDate.right = rcCloseBox.left - POPUP_ITEM_TEXT_INDENT;
- rcDate.left = PWL_MAX(rcDate.right - m_pDateTime->GetContentRect().Width() - 1.0f, rcIcon.right + 1.0f);
- rcDate.top = rcClient.top - 2.0f;
- rcDate.bottom = rcDate.top - m_pDateTime->GetContentRect().Height();
- rcDate.Normalize();
- m_pDateTime->Move(rcDate, TRUE, FALSE);
- m_pDateTime->SetVisible(CPWL_Utils::ContainsRect(rcClient, rcDate));
-
- CPDF_Rect rcSubject = rcClient;
- rcSubject.top = rcClient.top - 2.0f;
- rcSubject.left = rcIcon.right + POPUP_ITEM_TEXT_INDENT;
- rcSubject.right = PWL_MIN(rcSubject.left + m_pSubject->GetContentRect().Width() + 1.0f, rcDate.left - 1.0f);
- rcSubject.bottom = rcSubject.top - m_pSubject->GetContentRect().Height();
- rcSubject.Normalize();
- m_pSubject->Move(rcSubject, TRUE, FALSE);
- m_pSubject->SetVisible(CPWL_Utils::ContainsRect(rcClient, rcSubject));
-
- CPDF_Rect rcOptions = rcClient;
- rcOptions.left = PWL_MAX(rcOptions.right - m_pOptions->GetContentRect().Width(), rcIcon.right + 1.0f);
- rcOptions.top = rcSubject.bottom - 4.0f;
- rcOptions.bottom = rcOptions.top - m_pOptions->GetContentRect().Height();
- rcOptions.Normalize();
- m_pOptions->Move(rcOptions, TRUE, FALSE);
- m_pOptions->SetVisible(CPWL_Utils::ContainsRect(rcClient, rcOptions));
-
- CPDF_Rect rcAuthor = rcClient;
- rcAuthor.top = rcSubject.bottom - 4.0f;
- rcAuthor.left = rcSubject.left;
- rcAuthor.right = PWL_MIN(rcSubject.left + m_pAuthor->GetContentRect().Width() + 1.0f, rcOptions.left - 1.0f);
- rcAuthor.bottom = rcAuthor.top - m_pAuthor->GetContentRect().Height();
- rcAuthor.Normalize();
- m_pAuthor->Move(rcAuthor, TRUE, FALSE);
- m_pAuthor->SetVisible(CPWL_Utils::ContainsRect(rcClient, rcAuthor));
-
- CPDF_Rect rcLBBox = rcClient;
- rcLBBox.top = rcLBBox.bottom + 7.0f;
- rcLBBox.right = rcLBBox.left + 7.0f;
- rcLBBox.Normalize();
- m_pLBBox->Move(rcLBBox, TRUE, FALSE);
- m_pLBBox->SetVisible(CPWL_Utils::ContainsRect(rcClient, rcLBBox));
-
- CPDF_Rect rcRBBox = rcClient;
- rcRBBox.top = rcRBBox.bottom + 7.0f;
- rcRBBox.left = rcRBBox.right - 7.0f;
- rcRBBox.Normalize();
- m_pRBBox->Move(rcRBBox, TRUE, FALSE);
- m_pRBBox->SetVisible(CPWL_Utils::ContainsRect(rcClient, rcRBBox));
-
- CPDF_Rect rcContents = rcClient;
- rcContents.top = rcAuthor.bottom - POPUP_ITEM_HEAD_BOTTOM;
- rcContents.left += 3.0f;
- rcContents.right -= 3.0f;
- if (m_pContentsBar->IsVisible())
- rcContents.right -= PWL_SCROLLBAR_WIDTH;
- rcContents.bottom += 14.0f;
- rcContents.Normalize();
- m_pContents->Move(rcContents, FALSE, FALSE);
- m_pContents->SetVisible(CPWL_Utils::ContainsRect(rcClient, rcContents));
-
- CPDF_Rect rcContentsBar = rcContents;
- rcContentsBar.right = rcClient.right - 3.0f;
- rcContentsBar.left = rcContentsBar.right - PWL_SCROLLBAR_WIDTH;
- rcContentsBar.Normalize();
- m_pContentsBar->Move(rcContentsBar, TRUE, FALSE);
-
- m_rcCaption = rcClient;
- m_rcCaption.bottom = rcContents.top;
- }
-
- m_bResizing = FALSE;
-}
-
-//0-normal / 1-caption / 2-leftbottom corner / 3-rightbottom corner / 4-close / 5-options
-int32_t CPWL_Note::NoteHitTest(const CPDF_Point& point) const
-{
- ASSERT(m_pSubject != NULL);
- ASSERT(m_pDateTime != NULL);
- ASSERT(m_pContents != NULL);
- ASSERT(m_pAuthor != NULL);
- ASSERT(m_pIcon != NULL);
- ASSERT(m_pContentsBar != NULL);
-
- ASSERT(m_pCloseBox != NULL);
- ASSERT(m_pLBBox != NULL);
- ASSERT(m_pRBBox != NULL);
- ASSERT(m_pOptions != NULL);
-
- GetClientRect();
-
- if (m_pSubject->WndHitTest(m_pSubject->ParentToChild(point))) return 1;
- if (m_pDateTime->WndHitTest(m_pDateTime->ParentToChild(point))) return 1;
- if (m_pAuthor->WndHitTest(m_pAuthor->ParentToChild(point))) return 1;
- if (m_pIcon->WndHitTest(m_pIcon->ParentToChild(point))) return 1;
-
- if (m_pContents->WndHitTest(m_pContents->ParentToChild(point))) return 0;
- if (m_pContentsBar->WndHitTest(m_pContentsBar->ParentToChild(point))) return 0;
-
- if (m_pCloseBox->WndHitTest(m_pCloseBox->ParentToChild(point))) return 4;
- if (m_pLBBox->WndHitTest(m_pLBBox->ParentToChild(point))) return 2;
- if (m_pRBBox->WndHitTest(m_pRBBox->ParentToChild(point))) return 3;
- if (m_pOptions->WndHitTest(m_pOptions->ParentToChild(point))) return 5;
-
- return 1;
-}
-
-void CPWL_Note::CreateChildWnd(const PWL_CREATEPARAM & cp)
-{
- CPWL_NoteItem::CreateChildWnd(cp);
-
- CPWL_Color sTextColor;
-
- if (CPWL_Utils::IsBlackOrWhite(GetBackgroundColor()))
- sTextColor = PWL_DEFAULT_WHITECOLOR;
- else
- sTextColor = PWL_DEFAULT_BLACKCOLOR;
-
- m_pAuthor = new CPWL_Label;
- PWL_CREATEPARAM acp = cp;
- acp.pParentWnd = this;
- acp.dwFlags = PWS_VISIBLE | PWS_CHILD | PES_LEFT | PES_TOP;
- acp.sTextColor = sTextColor;
- m_pAuthor->Create(acp);
-
- m_pCloseBox = new CPWL_Note_CloseBox;
- PWL_CREATEPARAM ccp = cp;
- ccp.pParentWnd = this;
- ccp.dwBorderWidth = 2;
- ccp.nBorderStyle = PBS_BEVELED;
- ccp.dwFlags = PWS_VISIBLE | PWS_CHILD | PWS_BORDER;
- ccp.sTextColor = sTextColor;
- m_pCloseBox->Create(ccp);
-
- m_pIcon = new CPWL_Note_Icon;
- PWL_CREATEPARAM icp = cp;
- icp.pParentWnd = this;
- icp.dwFlags = PWS_VISIBLE | PWS_CHILD;
- m_pIcon->Create(icp);
-
- m_pOptions = new CPWL_Note_Options;
- PWL_CREATEPARAM ocp = cp;
- ocp.pParentWnd = this;
- ocp.dwFlags = PWS_CHILD | PWS_VISIBLE;
- ocp.sTextColor = sTextColor;
- m_pOptions->Create(ocp);
-
- m_pLBBox = new CPWL_Note_LBBox;
- PWL_CREATEPARAM lcp = cp;
- lcp.pParentWnd = this;
- lcp.dwFlags = PWS_VISIBLE | PWS_CHILD;
- lcp.eCursorType = FXCT_NESW;
- lcp.sTextColor = sTextColor;
- m_pLBBox->Create(lcp);
-
- m_pRBBox = new CPWL_Note_RBBox;
- PWL_CREATEPARAM rcp = cp;
- rcp.pParentWnd = this;
- rcp.dwFlags = PWS_VISIBLE | PWS_CHILD;
- rcp.eCursorType = FXCT_NWSE;
- rcp.sTextColor = sTextColor;
- m_pRBBox->Create(rcp);
-
- m_pContentsBar = new CPWL_ScrollBar(SBT_VSCROLL);
- PWL_CREATEPARAM scp = cp;
- scp.pParentWnd = this;
- scp.sBackgroundColor = CPWL_Color(COLORTYPE_RGB, 240/255.0f, 240/255.0f, 240/255.0f);
- scp.dwFlags = PWS_CHILD | PWS_VISIBLE | PWS_BACKGROUND;
- m_pContentsBar->Create(scp);
- m_pContentsBar->SetNotifyForever(TRUE);
-}
-
-void CPWL_Note::SetSubjectName(const CFX_WideString& sName)
-{
- CPWL_NoteItem::SetSubjectName(sName);
- RePosChildWnd();
-}
-
-void CPWL_Note::SetAuthorName(const CFX_WideString& sName)
-{
- if (m_pAuthor)
- {
- m_pAuthor->SetText(sName.c_str());
- RePosChildWnd();
- }
-
- if (IPWL_NoteNotify* pNotify = GetNoteNotify())
- {
- pNotify->OnSetAuthorName(this);
- }
-}
-
-CFX_WideString CPWL_Note::GetAuthorName() const
-{
- if (m_pAuthor)
- return m_pAuthor->GetText();
-
- return L"";
-}
-
-FX_BOOL CPWL_Note::OnMouseWheel(short zDelta, const CPDF_Point & point, FX_DWORD nFlag)
-{
- CPDF_Point ptScroll = m_pContents->GetScrollPos();
- CPDF_Rect rcScroll = m_pContents->GetScrollArea();
- CPDF_Rect rcContents = m_pContents->GetClientRect();
-
- if (rcScroll.top - rcScroll.bottom > rcContents.Height())
- {
- CPDF_Point ptNew = ptScroll;
-
- if (zDelta > 0)
- ptNew.y += 30;
- else
- ptNew.y -= 30;
-
- if (ptNew.y > rcScroll.top)
- ptNew.y = rcScroll.top;
- if (ptNew.y < rcScroll.bottom + rcContents.Height())
- ptNew.y = rcScroll.bottom + rcContents.Height();
- if (ptNew.y < rcScroll.bottom)
- ptNew.y = rcScroll.bottom;
-
- if (ptNew.y != ptScroll.y)
- {
- m_pContents->OnNotify(this, PNM_NOTERESET, 0, 0);
- m_pContents->OnNotify(this, PNM_SCROLLWINDOW, SBT_VSCROLL, (intptr_t)&ptNew.y);
- m_pContentsBar->OnNotify(this, PNM_SETSCROLLPOS, SBT_VSCROLL, (intptr_t)&ptNew.y);
-
- return TRUE;
- }
- }
-
- return FALSE;
-}
-
-void CPWL_Note::OnNotify(CPWL_Wnd* pWnd, FX_DWORD msg, intptr_t wParam, intptr_t lParam)
-{
- switch (msg)
- {
- case PNM_NOTEEDITCHANGED:
- {
- CPDF_Rect rcScroll = m_pContents->GetScrollArea();
-
-
- PWL_SCROLL_INFO sInfo;
- sInfo.fContentMin = rcScroll.bottom;
- sInfo.fContentMax = rcScroll.top;
- sInfo.fPlateWidth = m_pContents->GetClientRect().Height();
- sInfo.fSmallStep = 13.0f;
- sInfo.fBigStep = sInfo.fPlateWidth;
-
- if (FXSYS_memcmp(&m_OldScrollInfo, &sInfo, sizeof(PWL_SCROLL_INFO)) != 0)
- {
- FX_BOOL bScrollChanged = FALSE;
-
- if (lParam < 3) //·ÀÖ¹ËÀÑ­»· mantis:15759
- {
- bScrollChanged = ResetScrollBar();
- if (bScrollChanged)
- {
- lParam++;
- m_pContents->OnNotify(this, PNM_NOTERESET, 0, 0);
- OnNotify(this, PNM_NOTEEDITCHANGED, 0, lParam);
- }
- }
-
- if (!bScrollChanged)
- {
- if (m_pContentsBar->IsVisible())
- {
- m_pContentsBar->OnNotify(pWnd, PNM_SETSCROLLINFO, SBT_VSCROLL, (intptr_t)&sInfo);
- m_OldScrollInfo = sInfo;
-
- CPDF_Point ptScroll = m_pContents->GetScrollPos();
- CPDF_Point ptOld = ptScroll;
-
- if (ptScroll.y > sInfo.fContentMax)
- ptScroll.y = sInfo.fContentMax;
- if (ptScroll.y < sInfo.fContentMin + sInfo.fPlateWidth)
- ptScroll.y = sInfo.fContentMin + sInfo.fPlateWidth;
- if (ptScroll.y < sInfo.fContentMin)
- ptScroll.y = sInfo.fContentMin;
-
- if (ptOld.y != ptScroll.y)
- {
- m_pContentsBar->OnNotify(this, PNM_SETSCROLLPOS, SBT_VSCROLL, (intptr_t)&ptScroll.y);
- m_pContentsBar->InvalidateRect(NULL);
- m_pContents->OnNotify(this, PNM_SCROLLWINDOW, SBT_VSCROLL, (intptr_t)&ptScroll.y);
- }
- }
- }
- }
- }
-
- m_pContents->InvalidateRect(NULL);
-
- return;
- case PNM_SCROLLWINDOW:
- if (m_pContents)
- m_pContents->OnNotify(pWnd, msg, wParam, lParam);
- return;
- case PNM_SETSCROLLPOS:
- if (m_pContentsBar)
- m_pContentsBar->OnNotify(pWnd,PNM_SETSCROLLPOS,wParam,lParam);
- return;
- }
-
- if (msg == PNM_SETCARETINFO && IsValid())
- {
- if (PWL_CARET_INFO * pInfo = (PWL_CARET_INFO*)wParam)
- {
- if (m_pContents)
- {
- CPDF_Rect rcClient = m_pContents->GetClientRect();
- if (pInfo->ptHead.y > rcClient.top)
- {
- CPDF_Point pt = m_pContents->OutToIn(pInfo->ptHead);
- m_pContents->OnNotify(this, PNM_SCROLLWINDOW, SBT_VSCROLL, (intptr_t)&pt.y);
-
- CPDF_Point ptScroll = m_pContents->GetScrollPos();
- m_pContentsBar->OnNotify(this, PNM_SETSCROLLPOS, SBT_VSCROLL, (intptr_t)&ptScroll.y);
-
- return;
- }
-
- if (pInfo->ptFoot.y < rcClient.bottom)
- {
- CPDF_Point pt = m_pContents->OutToIn(pInfo->ptFoot);
- pt.y += rcClient.Height();
- m_pContents->OnNotify(this, PNM_SCROLLWINDOW, SBT_VSCROLL, (intptr_t)&pt.y);
-
- CPDF_Point ptScroll = m_pContents->GetScrollPos();
- m_pContentsBar->OnNotify(this, PNM_SETSCROLLPOS, SBT_VSCROLL, (intptr_t)&ptScroll.y);
-
- return;
- }
- }
- }
- }
-
- CPWL_NoteItem::OnNotify(pWnd, msg, wParam, lParam);
-}
-
-void CPWL_Note::SetBkColor(const CPWL_Color& color)
-{
- CPWL_NoteItem::SetBkColor(color);
-
- CPWL_Color sBK = color;
- CPWL_Color sTextColor;
- if (CPWL_Utils::IsBlackOrWhite(sBK))
- sTextColor = PWL_DEFAULT_WHITECOLOR;
- else
- sTextColor = PWL_DEFAULT_BLACKCOLOR;
-
- if (m_pCloseBox)
- m_pCloseBox->SetTextColor(sTextColor);
- if (m_pAuthor)
- m_pAuthor->SetTextColor(sTextColor);
- if (m_pOptions)
- m_pOptions->SetTextColor(sTextColor);
- if (m_pLBBox)
- m_pLBBox->SetTextColor(sTextColor);
- if (m_pRBBox)
- m_pRBBox->SetTextColor(sTextColor);
-}
-
-FX_BOOL CPWL_Note::OnLButtonDown(const CPDF_Point& point, FX_DWORD nFlag)
-{
- if (m_pOptions->WndHitTest(m_pOptions->ParentToChild(point)))
- {
- if (IPWL_NoteNotify* pNotify = GetNoteNotify())
- {
- int32_t x, y;
- PWLtoWnd(point, x, y);
- if (IFX_SystemHandler* pSH = GetSystemHandler())
- pSH->ClientToScreen(GetAttachedHWnd(), x, y);
- KillFocus();
- pNotify->OnPopupMenu(x, y);
-
- return TRUE;
- }
- }
+/* ---------------------------------- CPWL_Note
+ * ---------------------------------- */
+
+CPWL_Note::CPWL_Note(IPopup_Note* pPopupNote,
+ IPWL_NoteNotify* pNoteNotify,
+ IPWL_NoteHandler* pNoteHandler)
+ : m_pAuthor(NULL),
+ m_pIcon(NULL),
+ m_pCloseBox(NULL),
+ m_pLBBox(NULL),
+ m_pRBBox(NULL),
+ m_pContentsBar(NULL),
+ m_pOptions(NULL),
+ m_pNoteNotify(pNoteNotify),
+ m_bResizing(FALSE),
+ m_rcCaption(0, 0, 0, 0),
+ m_bEnalbleNotify(TRUE),
+ m_pPopupNote(pPopupNote) {}
- return CPWL_Wnd::OnLButtonDown(point,nFlag);
+CPWL_Note::~CPWL_Note() {}
+
+IPWL_NoteItem* CPWL_Note::Reply() {
+ return CreateNoteItem();
+}
+
+void CPWL_Note::EnableNotify(FX_BOOL bEnabled) {
+ m_bEnalbleNotify = bEnabled;
}
-FX_BOOL CPWL_Note::OnRButtonUp(const CPDF_Point & point, FX_DWORD nFlag)
-{
- return CPWL_Wnd::OnRButtonUp(point,nFlag);
+void CPWL_Note::RePosChildWnd() {
+ RePosNoteChildren();
+ m_pContents->OnNotify(this, PNM_NOTERESET, 0, 0);
+ ResetScrollBar();
+ m_pContents->OnNotify(this, PNM_NOTERESET, 0, 0);
+ OnNotify(this, PNM_NOTEEDITCHANGED, 0, 0);
+ if (const CPWL_Wnd* pWnd = GetFocused()) {
+ if (pWnd->GetClassName() == "CPWL_Edit") {
+ CPWL_Edit* pEdit = (CPWL_Edit*)pWnd;
+ pEdit->SetCaret(pEdit->GetCaret());
+ }
+ }
+}
+
+FX_BOOL CPWL_Note::ResetScrollBar() {
+ FX_BOOL bScrollChanged = FALSE;
+
+ if (ScrollBarShouldVisible()) {
+ if (!m_pContentsBar->IsVisible()) {
+ m_pContentsBar->SetVisible(TRUE);
+ if (m_pContentsBar->IsVisible()) {
+ m_pContentsBar->InvalidateRect(NULL);
+ bScrollChanged = TRUE;
+ }
+ }
+ } else {
+ if (m_pContentsBar->IsVisible()) {
+ m_pContentsBar->SetVisible(FALSE);
+ m_pContentsBar->InvalidateRect(NULL);
+
+ bScrollChanged = TRUE;
+ }
+ }
+
+ if (bScrollChanged) {
+ CPDF_Rect rcNote = GetClientRect();
+ CPDF_Rect rcContents = m_pContents->GetWindowRect();
+ rcContents.right = rcNote.right - 3.0f;
+ if (m_pContentsBar->IsVisible())
+ rcContents.right -= PWL_SCROLLBAR_WIDTH;
+ m_pContents->Move(rcContents, TRUE, TRUE);
+ m_pContents->SetScrollPos(CPDF_Point(0.0f, 0.0f));
+ m_pContents->InvalidateRect(NULL);
+ }
+
+ return bScrollChanged;
+}
+
+FX_BOOL CPWL_Note::ScrollBarShouldVisible() {
+ CPDF_Rect rcContentsFact = m_pContents->GetScrollArea();
+ CPDF_Rect rcContentsClient = m_pContents->GetClientRect();
+
+ return rcContentsFact.Height() > rcContentsClient.Height();
+}
+
+void CPWL_Note::SetOptionsText(const CFX_WideString& sText) {
+ if (m_pOptions)
+ m_pOptions->SetText(sText);
+
+ RePosNoteChildren();
+}
+
+void CPWL_Note::RePosNoteChildren() {
+ if (m_bResizing)
+ return;
+
+ m_bResizing = TRUE;
+
+ if (IsValid()) {
+ ASSERT(m_pSubject != NULL);
+ ASSERT(m_pDateTime != NULL);
+ ASSERT(m_pContents != NULL);
+ ASSERT(m_pAuthor != NULL);
+ ASSERT(m_pCloseBox != NULL);
+ ASSERT(m_pIcon != NULL);
+ ASSERT(m_pLBBox != NULL);
+ ASSERT(m_pRBBox != NULL);
+ ASSERT(m_pContentsBar != NULL);
+ ASSERT(m_pOptions != NULL);
+
+ CPDF_Rect rcClient = GetClientRect();
+
+ CPDF_Rect rcIcon = rcClient;
+ rcIcon.top -= 2.0f;
+ rcIcon.right = rcIcon.left + 14.0f;
+ rcIcon.bottom = rcIcon.top - 14.0f;
+ rcIcon.Normalize();
+ m_pIcon->Move(rcIcon, TRUE, FALSE);
+ m_pIcon->SetVisible(CPWL_Utils::ContainsRect(rcClient, rcIcon));
+
+ CPDF_Rect rcCloseBox = rcClient;
+ rcCloseBox.right -= 1.0f;
+ rcCloseBox.top -= 1.0f;
+ rcCloseBox.left = rcCloseBox.right - 14.0f;
+ rcCloseBox.bottom = rcCloseBox.top - 14.0f;
+ rcCloseBox.Normalize();
+ m_pCloseBox->Move(rcCloseBox, TRUE, FALSE);
+ m_pCloseBox->SetVisible(CPWL_Utils::ContainsRect(rcClient, rcCloseBox));
+
+ CPDF_Rect rcDate = rcClient;
+ rcDate.right = rcCloseBox.left - POPUP_ITEM_TEXT_INDENT;
+ rcDate.left =
+ PWL_MAX(rcDate.right - m_pDateTime->GetContentRect().Width() - 1.0f,
+ rcIcon.right + 1.0f);
+ rcDate.top = rcClient.top - 2.0f;
+ rcDate.bottom = rcDate.top - m_pDateTime->GetContentRect().Height();
+ rcDate.Normalize();
+ m_pDateTime->Move(rcDate, TRUE, FALSE);
+ m_pDateTime->SetVisible(CPWL_Utils::ContainsRect(rcClient, rcDate));
+
+ CPDF_Rect rcSubject = rcClient;
+ rcSubject.top = rcClient.top - 2.0f;
+ rcSubject.left = rcIcon.right + POPUP_ITEM_TEXT_INDENT;
+ rcSubject.right =
+ PWL_MIN(rcSubject.left + m_pSubject->GetContentRect().Width() + 1.0f,
+ rcDate.left - 1.0f);
+ rcSubject.bottom = rcSubject.top - m_pSubject->GetContentRect().Height();
+ rcSubject.Normalize();
+ m_pSubject->Move(rcSubject, TRUE, FALSE);
+ m_pSubject->SetVisible(CPWL_Utils::ContainsRect(rcClient, rcSubject));
+
+ CPDF_Rect rcOptions = rcClient;
+ rcOptions.left =
+ PWL_MAX(rcOptions.right - m_pOptions->GetContentRect().Width(),
+ rcIcon.right + 1.0f);
+ rcOptions.top = rcSubject.bottom - 4.0f;
+ rcOptions.bottom = rcOptions.top - m_pOptions->GetContentRect().Height();
+ rcOptions.Normalize();
+ m_pOptions->Move(rcOptions, TRUE, FALSE);
+ m_pOptions->SetVisible(CPWL_Utils::ContainsRect(rcClient, rcOptions));
+
+ CPDF_Rect rcAuthor = rcClient;
+ rcAuthor.top = rcSubject.bottom - 4.0f;
+ rcAuthor.left = rcSubject.left;
+ rcAuthor.right =
+ PWL_MIN(rcSubject.left + m_pAuthor->GetContentRect().Width() + 1.0f,
+ rcOptions.left - 1.0f);
+ rcAuthor.bottom = rcAuthor.top - m_pAuthor->GetContentRect().Height();
+ rcAuthor.Normalize();
+ m_pAuthor->Move(rcAuthor, TRUE, FALSE);
+ m_pAuthor->SetVisible(CPWL_Utils::ContainsRect(rcClient, rcAuthor));
+
+ CPDF_Rect rcLBBox = rcClient;
+ rcLBBox.top = rcLBBox.bottom + 7.0f;
+ rcLBBox.right = rcLBBox.left + 7.0f;
+ rcLBBox.Normalize();
+ m_pLBBox->Move(rcLBBox, TRUE, FALSE);
+ m_pLBBox->SetVisible(CPWL_Utils::ContainsRect(rcClient, rcLBBox));
+
+ CPDF_Rect rcRBBox = rcClient;
+ rcRBBox.top = rcRBBox.bottom + 7.0f;
+ rcRBBox.left = rcRBBox.right - 7.0f;
+ rcRBBox.Normalize();
+ m_pRBBox->Move(rcRBBox, TRUE, FALSE);
+ m_pRBBox->SetVisible(CPWL_Utils::ContainsRect(rcClient, rcRBBox));
+
+ CPDF_Rect rcContents = rcClient;
+ rcContents.top = rcAuthor.bottom - POPUP_ITEM_HEAD_BOTTOM;
+ rcContents.left += 3.0f;
+ rcContents.right -= 3.0f;
+ if (m_pContentsBar->IsVisible())
+ rcContents.right -= PWL_SCROLLBAR_WIDTH;
+ rcContents.bottom += 14.0f;
+ rcContents.Normalize();
+ m_pContents->Move(rcContents, FALSE, FALSE);
+ m_pContents->SetVisible(CPWL_Utils::ContainsRect(rcClient, rcContents));
+
+ CPDF_Rect rcContentsBar = rcContents;
+ rcContentsBar.right = rcClient.right - 3.0f;
+ rcContentsBar.left = rcContentsBar.right - PWL_SCROLLBAR_WIDTH;
+ rcContentsBar.Normalize();
+ m_pContentsBar->Move(rcContentsBar, TRUE, FALSE);
+
+ m_rcCaption = rcClient;
+ m_rcCaption.bottom = rcContents.top;
+ }
+
+ m_bResizing = FALSE;
+}
+
+// 0-normal / 1-caption / 2-leftbottom corner / 3-rightbottom corner / 4-close /
+// 5-options
+int32_t CPWL_Note::NoteHitTest(const CPDF_Point& point) const {
+ ASSERT(m_pSubject != NULL);
+ ASSERT(m_pDateTime != NULL);
+ ASSERT(m_pContents != NULL);
+ ASSERT(m_pAuthor != NULL);
+ ASSERT(m_pIcon != NULL);
+ ASSERT(m_pContentsBar != NULL);
+
+ ASSERT(m_pCloseBox != NULL);
+ ASSERT(m_pLBBox != NULL);
+ ASSERT(m_pRBBox != NULL);
+ ASSERT(m_pOptions != NULL);
+
+ GetClientRect();
+
+ if (m_pSubject->WndHitTest(m_pSubject->ParentToChild(point)))
+ return 1;
+ if (m_pDateTime->WndHitTest(m_pDateTime->ParentToChild(point)))
+ return 1;
+ if (m_pAuthor->WndHitTest(m_pAuthor->ParentToChild(point)))
+ return 1;
+ if (m_pIcon->WndHitTest(m_pIcon->ParentToChild(point)))
+ return 1;
+
+ if (m_pContents->WndHitTest(m_pContents->ParentToChild(point)))
+ return 0;
+ if (m_pContentsBar->WndHitTest(m_pContentsBar->ParentToChild(point)))
+ return 0;
+
+ if (m_pCloseBox->WndHitTest(m_pCloseBox->ParentToChild(point)))
+ return 4;
+ if (m_pLBBox->WndHitTest(m_pLBBox->ParentToChild(point)))
+ return 2;
+ if (m_pRBBox->WndHitTest(m_pRBBox->ParentToChild(point)))
+ return 3;
+ if (m_pOptions->WndHitTest(m_pOptions->ParentToChild(point)))
+ return 5;
+
+ return 1;
+}
+
+void CPWL_Note::CreateChildWnd(const PWL_CREATEPARAM& cp) {
+ CPWL_NoteItem::CreateChildWnd(cp);
+
+ CPWL_Color sTextColor;
+
+ if (CPWL_Utils::IsBlackOrWhite(GetBackgroundColor()))
+ sTextColor = PWL_DEFAULT_WHITECOLOR;
+ else
+ sTextColor = PWL_DEFAULT_BLACKCOLOR;
+
+ m_pAuthor = new CPWL_Label;
+ PWL_CREATEPARAM acp = cp;
+ acp.pParentWnd = this;
+ acp.dwFlags = PWS_VISIBLE | PWS_CHILD | PES_LEFT | PES_TOP;
+ acp.sTextColor = sTextColor;
+ m_pAuthor->Create(acp);
+
+ m_pCloseBox = new CPWL_Note_CloseBox;
+ PWL_CREATEPARAM ccp = cp;
+ ccp.pParentWnd = this;
+ ccp.dwBorderWidth = 2;
+ ccp.nBorderStyle = PBS_BEVELED;
+ ccp.dwFlags = PWS_VISIBLE | PWS_CHILD | PWS_BORDER;
+ ccp.sTextColor = sTextColor;
+ m_pCloseBox->Create(ccp);
+
+ m_pIcon = new CPWL_Note_Icon;
+ PWL_CREATEPARAM icp = cp;
+ icp.pParentWnd = this;
+ icp.dwFlags = PWS_VISIBLE | PWS_CHILD;
+ m_pIcon->Create(icp);
+
+ m_pOptions = new CPWL_Note_Options;
+ PWL_CREATEPARAM ocp = cp;
+ ocp.pParentWnd = this;
+ ocp.dwFlags = PWS_CHILD | PWS_VISIBLE;
+ ocp.sTextColor = sTextColor;
+ m_pOptions->Create(ocp);
+
+ m_pLBBox = new CPWL_Note_LBBox;
+ PWL_CREATEPARAM lcp = cp;
+ lcp.pParentWnd = this;
+ lcp.dwFlags = PWS_VISIBLE | PWS_CHILD;
+ lcp.eCursorType = FXCT_NESW;
+ lcp.sTextColor = sTextColor;
+ m_pLBBox->Create(lcp);
+
+ m_pRBBox = new CPWL_Note_RBBox;
+ PWL_CREATEPARAM rcp = cp;
+ rcp.pParentWnd = this;
+ rcp.dwFlags = PWS_VISIBLE | PWS_CHILD;
+ rcp.eCursorType = FXCT_NWSE;
+ rcp.sTextColor = sTextColor;
+ m_pRBBox->Create(rcp);
+
+ m_pContentsBar = new CPWL_ScrollBar(SBT_VSCROLL);
+ PWL_CREATEPARAM scp = cp;
+ scp.pParentWnd = this;
+ scp.sBackgroundColor =
+ CPWL_Color(COLORTYPE_RGB, 240 / 255.0f, 240 / 255.0f, 240 / 255.0f);
+ scp.dwFlags = PWS_CHILD | PWS_VISIBLE | PWS_BACKGROUND;
+ m_pContentsBar->Create(scp);
+ m_pContentsBar->SetNotifyForever(TRUE);
+}
+
+void CPWL_Note::SetSubjectName(const CFX_WideString& sName) {
+ CPWL_NoteItem::SetSubjectName(sName);
+ RePosChildWnd();
+}
+
+void CPWL_Note::SetAuthorName(const CFX_WideString& sName) {
+ if (m_pAuthor) {
+ m_pAuthor->SetText(sName.c_str());
+ RePosChildWnd();
+ }
+
+ if (IPWL_NoteNotify* pNotify = GetNoteNotify()) {
+ pNotify->OnSetAuthorName(this);
+ }
+}
+
+CFX_WideString CPWL_Note::GetAuthorName() const {
+ if (m_pAuthor)
+ return m_pAuthor->GetText();
+
+ return L"";
+}
+
+FX_BOOL CPWL_Note::OnMouseWheel(short zDelta,
+ const CPDF_Point& point,
+ FX_DWORD nFlag) {
+ CPDF_Point ptScroll = m_pContents->GetScrollPos();
+ CPDF_Rect rcScroll = m_pContents->GetScrollArea();
+ CPDF_Rect rcContents = m_pContents->GetClientRect();
+
+ if (rcScroll.top - rcScroll.bottom > rcContents.Height()) {
+ CPDF_Point ptNew = ptScroll;
+
+ if (zDelta > 0)
+ ptNew.y += 30;
+ else
+ ptNew.y -= 30;
+
+ if (ptNew.y > rcScroll.top)
+ ptNew.y = rcScroll.top;
+ if (ptNew.y < rcScroll.bottom + rcContents.Height())
+ ptNew.y = rcScroll.bottom + rcContents.Height();
+ if (ptNew.y < rcScroll.bottom)
+ ptNew.y = rcScroll.bottom;
+
+ if (ptNew.y != ptScroll.y) {
+ m_pContents->OnNotify(this, PNM_NOTERESET, 0, 0);
+ m_pContents->OnNotify(this, PNM_SCROLLWINDOW, SBT_VSCROLL,
+ (intptr_t)&ptNew.y);
+ m_pContentsBar->OnNotify(this, PNM_SETSCROLLPOS, SBT_VSCROLL,
+ (intptr_t)&ptNew.y);
+
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
+
+void CPWL_Note::OnNotify(CPWL_Wnd* pWnd,
+ FX_DWORD msg,
+ intptr_t wParam,
+ intptr_t lParam) {
+ switch (msg) {
+ case PNM_NOTEEDITCHANGED: {
+ CPDF_Rect rcScroll = m_pContents->GetScrollArea();
+
+ PWL_SCROLL_INFO sInfo;
+ sInfo.fContentMin = rcScroll.bottom;
+ sInfo.fContentMax = rcScroll.top;
+ sInfo.fPlateWidth = m_pContents->GetClientRect().Height();
+ sInfo.fSmallStep = 13.0f;
+ sInfo.fBigStep = sInfo.fPlateWidth;
+
+ if (FXSYS_memcmp(&m_OldScrollInfo, &sInfo, sizeof(PWL_SCROLL_INFO)) !=
+ 0) {
+ FX_BOOL bScrollChanged = FALSE;
+
+ if (lParam < 3) //·ÀÖ¹ËÀÑ­»· mantis:15759
+ {
+ bScrollChanged = ResetScrollBar();
+ if (bScrollChanged) {
+ lParam++;
+ m_pContents->OnNotify(this, PNM_NOTERESET, 0, 0);
+ OnNotify(this, PNM_NOTEEDITCHANGED, 0, lParam);
+ }
+ }
+
+ if (!bScrollChanged) {
+ if (m_pContentsBar->IsVisible()) {
+ m_pContentsBar->OnNotify(pWnd, PNM_SETSCROLLINFO, SBT_VSCROLL,
+ (intptr_t)&sInfo);
+ m_OldScrollInfo = sInfo;
+
+ CPDF_Point ptScroll = m_pContents->GetScrollPos();
+ CPDF_Point ptOld = ptScroll;
+
+ if (ptScroll.y > sInfo.fContentMax)
+ ptScroll.y = sInfo.fContentMax;
+ if (ptScroll.y < sInfo.fContentMin + sInfo.fPlateWidth)
+ ptScroll.y = sInfo.fContentMin + sInfo.fPlateWidth;
+ if (ptScroll.y < sInfo.fContentMin)
+ ptScroll.y = sInfo.fContentMin;
+
+ if (ptOld.y != ptScroll.y) {
+ m_pContentsBar->OnNotify(this, PNM_SETSCROLLPOS, SBT_VSCROLL,
+ (intptr_t)&ptScroll.y);
+ m_pContentsBar->InvalidateRect(NULL);
+ m_pContents->OnNotify(this, PNM_SCROLLWINDOW, SBT_VSCROLL,
+ (intptr_t)&ptScroll.y);
+ }
+ }
+ }
+ }
+ }
+
+ m_pContents->InvalidateRect(NULL);
+
+ return;
+ case PNM_SCROLLWINDOW:
+ if (m_pContents)
+ m_pContents->OnNotify(pWnd, msg, wParam, lParam);
+ return;
+ case PNM_SETSCROLLPOS:
+ if (m_pContentsBar)
+ m_pContentsBar->OnNotify(pWnd, PNM_SETSCROLLPOS, wParam, lParam);
+ return;
+ }
+
+ if (msg == PNM_SETCARETINFO && IsValid()) {
+ if (PWL_CARET_INFO* pInfo = (PWL_CARET_INFO*)wParam) {
+ if (m_pContents) {
+ CPDF_Rect rcClient = m_pContents->GetClientRect();
+ if (pInfo->ptHead.y > rcClient.top) {
+ CPDF_Point pt = m_pContents->OutToIn(pInfo->ptHead);
+ m_pContents->OnNotify(this, PNM_SCROLLWINDOW, SBT_VSCROLL,
+ (intptr_t)&pt.y);
+
+ CPDF_Point ptScroll = m_pContents->GetScrollPos();
+ m_pContentsBar->OnNotify(this, PNM_SETSCROLLPOS, SBT_VSCROLL,
+ (intptr_t)&ptScroll.y);
+
+ return;
+ }
+
+ if (pInfo->ptFoot.y < rcClient.bottom) {
+ CPDF_Point pt = m_pContents->OutToIn(pInfo->ptFoot);
+ pt.y += rcClient.Height();
+ m_pContents->OnNotify(this, PNM_SCROLLWINDOW, SBT_VSCROLL,
+ (intptr_t)&pt.y);
+
+ CPDF_Point ptScroll = m_pContents->GetScrollPos();
+ m_pContentsBar->OnNotify(this, PNM_SETSCROLLPOS, SBT_VSCROLL,
+ (intptr_t)&ptScroll.y);
+
+ return;
+ }
+ }
+ }
+ }
+
+ CPWL_NoteItem::OnNotify(pWnd, msg, wParam, lParam);
+}
+
+void CPWL_Note::SetBkColor(const CPWL_Color& color) {
+ CPWL_NoteItem::SetBkColor(color);
+
+ CPWL_Color sBK = color;
+ CPWL_Color sTextColor;
+ if (CPWL_Utils::IsBlackOrWhite(sBK))
+ sTextColor = PWL_DEFAULT_WHITECOLOR;
+ else
+ sTextColor = PWL_DEFAULT_BLACKCOLOR;
+
+ if (m_pCloseBox)
+ m_pCloseBox->SetTextColor(sTextColor);
+ if (m_pAuthor)
+ m_pAuthor->SetTextColor(sTextColor);
+ if (m_pOptions)
+ m_pOptions->SetTextColor(sTextColor);
+ if (m_pLBBox)
+ m_pLBBox->SetTextColor(sTextColor);
+ if (m_pRBBox)
+ m_pRBBox->SetTextColor(sTextColor);
}
-const CPWL_Note* CPWL_Note::GetNote() const
-{
- return this;
+FX_BOOL CPWL_Note::OnLButtonDown(const CPDF_Point& point, FX_DWORD nFlag) {
+ if (m_pOptions->WndHitTest(m_pOptions->ParentToChild(point))) {
+ if (IPWL_NoteNotify* pNotify = GetNoteNotify()) {
+ int32_t x, y;
+ PWLtoWnd(point, x, y);
+ if (IFX_SystemHandler* pSH = GetSystemHandler())
+ pSH->ClientToScreen(GetAttachedHWnd(), x, y);
+ KillFocus();
+ pNotify->OnPopupMenu(x, y);
+
+ return TRUE;
+ }
+ }
+
+ return CPWL_Wnd::OnLButtonDown(point, nFlag);
}
-IPWL_NoteNotify* CPWL_Note::GetNoteNotify() const
-{
- if (m_bEnalbleNotify)
- return m_pNoteNotify;
+FX_BOOL CPWL_Note::OnRButtonUp(const CPDF_Point& point, FX_DWORD nFlag) {
+ return CPWL_Wnd::OnRButtonUp(point, nFlag);
+}
- return NULL;
+const CPWL_Note* CPWL_Note::GetNote() const {
+ return this;
}
-void CPWL_Note::SetIconType(int32_t nType)
-{
- if (m_pIcon)
- m_pIcon->SetIconType(nType);
+IPWL_NoteNotify* CPWL_Note::GetNoteNotify() const {
+ if (m_bEnalbleNotify)
+ return m_pNoteNotify;
+
+ return NULL;
}
-void CPWL_Note::EnableModify(FX_BOOL bEnabled)
-{
- m_pContents->EnableModify(bEnabled);
+void CPWL_Note::SetIconType(int32_t nType) {
+ if (m_pIcon)
+ m_pIcon->SetIconType(nType);
}
-void CPWL_Note::EnableRead(FX_BOOL bEnabled)
-{
- m_pContents->EnableRead(bEnabled);
+void CPWL_Note::EnableModify(FX_BOOL bEnabled) {
+ m_pContents->EnableModify(bEnabled);
}
-CFX_WideString CPWL_Note::GetReplyString() const
-{
- return m_sReplyString;
+void CPWL_Note::EnableRead(FX_BOOL bEnabled) {
+ m_pContents->EnableRead(bEnabled);
}
-void CPWL_Note::SetReplyString(const CFX_WideString& string)
-{
- m_sReplyString = string;
+CFX_WideString CPWL_Note::GetReplyString() const {
+ return m_sReplyString;
}
+void CPWL_Note::SetReplyString(const CFX_WideString& string) {
+ m_sReplyString = string;
+}
diff --git a/fpdfsdk/src/pdfwindow/PWL_ScrollBar.cpp b/fpdfsdk/src/pdfwindow/PWL_ScrollBar.cpp
index 6d61705222..c762b4cd92 100644
--- a/fpdfsdk/src/pdfwindow/PWL_ScrollBar.cpp
+++ b/fpdfsdk/src/pdfwindow/PWL_ScrollBar.cpp
@@ -9,1295 +9,1201 @@
#include "../../include/pdfwindow/PWL_ScrollBar.h"
#include "../../include/pdfwindow/PWL_Utils.h"
-#define IsFloatZero(f) ((f) < 0.0001 && (f) > -0.0001)
-#define IsFloatBigger(fa,fb) ((fa) > (fb) && !IsFloatZero((fa) - (fb)))
-#define IsFloatSmaller(fa,fb) ((fa) < (fb) && !IsFloatZero((fa) - (fb)))
-#define IsFloatEqual(fa,fb) IsFloatZero((fa)-(fb))
+#define IsFloatZero(f) ((f) < 0.0001 && (f) > -0.0001)
+#define IsFloatBigger(fa, fb) ((fa) > (fb) && !IsFloatZero((fa) - (fb)))
+#define IsFloatSmaller(fa, fb) ((fa) < (fb) && !IsFloatZero((fa) - (fb)))
+#define IsFloatEqual(fa, fb) IsFloatZero((fa) - (fb))
+/* ------------------------------- PWL_FLOATRANGE
+ * ------------------------------- */
-/* ------------------------------- PWL_FLOATRANGE ------------------------------- */
-
-PWL_FLOATRANGE::PWL_FLOATRANGE()
-{
- Default();
+PWL_FLOATRANGE::PWL_FLOATRANGE() {
+ Default();
}
-PWL_FLOATRANGE::PWL_FLOATRANGE(FX_FLOAT min,FX_FLOAT max)
-{
- Set(min,max);
+PWL_FLOATRANGE::PWL_FLOATRANGE(FX_FLOAT min, FX_FLOAT max) {
+ Set(min, max);
}
-void PWL_FLOATRANGE::Default()
-{
- fMin = 0;
- fMax = 0;
+void PWL_FLOATRANGE::Default() {
+ fMin = 0;
+ fMax = 0;
}
-void PWL_FLOATRANGE::Set(FX_FLOAT min,FX_FLOAT max)
-{
- if (min > max)
- {
- fMin = max;
- fMax = min;
- }
- else
- {
- fMin = min;
- fMax = max;
- }
+void PWL_FLOATRANGE::Set(FX_FLOAT min, FX_FLOAT max) {
+ if (min > max) {
+ fMin = max;
+ fMax = min;
+ } else {
+ fMin = min;
+ fMax = max;
+ }
}
-FX_BOOL PWL_FLOATRANGE::In(FX_FLOAT x) const
-{
- return (IsFloatBigger(x,fMin) || IsFloatEqual(x, fMin)) &&
- (IsFloatSmaller(x, fMax) || IsFloatEqual(x, fMax));
+FX_BOOL PWL_FLOATRANGE::In(FX_FLOAT x) const {
+ return (IsFloatBigger(x, fMin) || IsFloatEqual(x, fMin)) &&
+ (IsFloatSmaller(x, fMax) || IsFloatEqual(x, fMax));
}
-FX_FLOAT PWL_FLOATRANGE::GetWidth() const
-{
- return fMax - fMin;
+FX_FLOAT PWL_FLOATRANGE::GetWidth() const {
+ return fMax - fMin;
}
-/* ------------------------------- PWL_SCROLL_PRIVATEDATA ------------------------------- */
+/* ------------------------------- PWL_SCROLL_PRIVATEDATA
+ * ------------------------------- */
-PWL_SCROLL_PRIVATEDATA::PWL_SCROLL_PRIVATEDATA()
-{
- Default();
+PWL_SCROLL_PRIVATEDATA::PWL_SCROLL_PRIVATEDATA() {
+ Default();
}
-void PWL_SCROLL_PRIVATEDATA::Default()
-{
- ScrollRange.Default();
- fScrollPos = ScrollRange.fMin;
- fClientWidth = 0;
- fBigStep = 10;
- fSmallStep = 1;
+void PWL_SCROLL_PRIVATEDATA::Default() {
+ ScrollRange.Default();
+ fScrollPos = ScrollRange.fMin;
+ fClientWidth = 0;
+ fBigStep = 10;
+ fSmallStep = 1;
}
-void PWL_SCROLL_PRIVATEDATA::SetScrollRange(FX_FLOAT min,FX_FLOAT max)
-{
- ScrollRange.Set(min,max);
+void PWL_SCROLL_PRIVATEDATA::SetScrollRange(FX_FLOAT min, FX_FLOAT max) {
+ ScrollRange.Set(min, max);
- if (IsFloatSmaller(fScrollPos, ScrollRange.fMin))
- fScrollPos = ScrollRange.fMin;
- if (IsFloatBigger(fScrollPos, ScrollRange.fMax))
- fScrollPos = ScrollRange.fMax;
+ if (IsFloatSmaller(fScrollPos, ScrollRange.fMin))
+ fScrollPos = ScrollRange.fMin;
+ if (IsFloatBigger(fScrollPos, ScrollRange.fMax))
+ fScrollPos = ScrollRange.fMax;
}
-void PWL_SCROLL_PRIVATEDATA::SetClientWidth(FX_FLOAT width)
-{
- fClientWidth = width;
+void PWL_SCROLL_PRIVATEDATA::SetClientWidth(FX_FLOAT width) {
+ fClientWidth = width;
}
-void PWL_SCROLL_PRIVATEDATA::SetSmallStep(FX_FLOAT step)
-{
- fSmallStep = step;
+void PWL_SCROLL_PRIVATEDATA::SetSmallStep(FX_FLOAT step) {
+ fSmallStep = step;
}
-void PWL_SCROLL_PRIVATEDATA::SetBigStep(FX_FLOAT step)
-{
- fBigStep = step;
+void PWL_SCROLL_PRIVATEDATA::SetBigStep(FX_FLOAT step) {
+ fBigStep = step;
}
-FX_BOOL PWL_SCROLL_PRIVATEDATA::SetPos(FX_FLOAT pos)
-{
- if (ScrollRange.In(pos))
- {
- fScrollPos = pos;
- return TRUE;
- }
- return FALSE;
+FX_BOOL PWL_SCROLL_PRIVATEDATA::SetPos(FX_FLOAT pos) {
+ if (ScrollRange.In(pos)) {
+ fScrollPos = pos;
+ return TRUE;
+ }
+ return FALSE;
}
-void PWL_SCROLL_PRIVATEDATA::AddSmall()
-{
- if (!SetPos(fScrollPos + fSmallStep))
- SetPos(ScrollRange.fMax);
+void PWL_SCROLL_PRIVATEDATA::AddSmall() {
+ if (!SetPos(fScrollPos + fSmallStep))
+ SetPos(ScrollRange.fMax);
}
-void PWL_SCROLL_PRIVATEDATA::SubSmall()
-{
- if (!SetPos(fScrollPos - fSmallStep))
- SetPos(ScrollRange.fMin);
+void PWL_SCROLL_PRIVATEDATA::SubSmall() {
+ if (!SetPos(fScrollPos - fSmallStep))
+ SetPos(ScrollRange.fMin);
}
-void PWL_SCROLL_PRIVATEDATA::AddBig()
-{
- if (!SetPos(fScrollPos + fBigStep))
- SetPos(ScrollRange.fMax);
+void PWL_SCROLL_PRIVATEDATA::AddBig() {
+ if (!SetPos(fScrollPos + fBigStep))
+ SetPos(ScrollRange.fMax);
}
-void PWL_SCROLL_PRIVATEDATA::SubBig()
-{
- if (!SetPos(fScrollPos - fBigStep))
- SetPos(ScrollRange.fMin);
+void PWL_SCROLL_PRIVATEDATA::SubBig() {
+ if (!SetPos(fScrollPos - fBigStep))
+ SetPos(ScrollRange.fMin);
}
-/* ------------------------------- CPWL_SBButton ------------------------------- */
+/* ------------------------------- CPWL_SBButton -------------------------------
+ */
-CPWL_SBButton::CPWL_SBButton(PWL_SCROLLBAR_TYPE eScrollBarType,PWL_SBBUTTON_TYPE eButtonType)
-{
- m_eScrollBarType = eScrollBarType;
- m_eSBButtonType = eButtonType;
+CPWL_SBButton::CPWL_SBButton(PWL_SCROLLBAR_TYPE eScrollBarType,
+ PWL_SBBUTTON_TYPE eButtonType) {
+ m_eScrollBarType = eScrollBarType;
+ m_eSBButtonType = eButtonType;
- m_bMouseDown = FALSE;
+ m_bMouseDown = FALSE;
}
-CPWL_SBButton::~CPWL_SBButton()
-{
-
-}
+CPWL_SBButton::~CPWL_SBButton() {}
-CFX_ByteString CPWL_SBButton::GetClassName() const
-{
- return "CPWL_SBButton";
+CFX_ByteString CPWL_SBButton::GetClassName() const {
+ return "CPWL_SBButton";
}
-void CPWL_SBButton::OnCreate(PWL_CREATEPARAM & cp)
-{
- cp.eCursorType = FXCT_ARROW;
+void CPWL_SBButton::OnCreate(PWL_CREATEPARAM& cp) {
+ cp.eCursorType = FXCT_ARROW;
}
-void CPWL_SBButton::GetThisAppearanceStream(CFX_ByteTextBuf & sAppStream)
-{
- CPWL_Wnd::GetThisAppearanceStream(sAppStream);
-
- if (!IsVisible()) return;
-
- CFX_ByteTextBuf sButton;
-
- CPDF_Rect rectWnd = GetWindowRect();
-
- if (rectWnd.IsEmpty()) return;
-
- sAppStream << "q\n";
-
- CPDF_Point ptCenter = GetCenterPoint();
-
- switch (m_eScrollBarType)
- {
- case SBT_HSCROLL:
- switch (m_eSBButtonType)
- {
- case PSBT_MIN:
- {
- CPDF_Point pt1(ptCenter.x - PWL_TRIANGLE_HALFLEN * 0.5f,ptCenter.y);
- CPDF_Point pt2(ptCenter.x + PWL_TRIANGLE_HALFLEN * 0.5f,ptCenter.y + PWL_TRIANGLE_HALFLEN);
- CPDF_Point pt3(ptCenter.x + PWL_TRIANGLE_HALFLEN * 0.5f,ptCenter.y - PWL_TRIANGLE_HALFLEN);
-
- if (rectWnd.right - rectWnd.left > PWL_TRIANGLE_HALFLEN * 2 &&
- rectWnd.top - rectWnd.bottom > PWL_TRIANGLE_HALFLEN )
- {
- sButton << "0 g\n";
- sButton << pt1.x << " " << pt1.y << " m\n";
- sButton << pt2.x << " " << pt2.y << " l\n";
- sButton << pt3.x << " " << pt3.y << " l\n";
- sButton << pt1.x << " " << pt1.y << " l f\n";
-
- sAppStream << sButton;
- }
- }
- break;
- case PSBT_MAX:
- {
- CPDF_Point pt1(ptCenter.x + PWL_TRIANGLE_HALFLEN * 0.5f,ptCenter.y);
- CPDF_Point pt2(ptCenter.x - PWL_TRIANGLE_HALFLEN * 0.5f,ptCenter.y + PWL_TRIANGLE_HALFLEN);
- CPDF_Point pt3(ptCenter.x - PWL_TRIANGLE_HALFLEN * 0.5f,ptCenter.y - PWL_TRIANGLE_HALFLEN);
-
- if (rectWnd.right - rectWnd.left > PWL_TRIANGLE_HALFLEN * 2 &&
- rectWnd.top - rectWnd.bottom > PWL_TRIANGLE_HALFLEN )
- {
- sButton << "0 g\n";
- sButton << pt1.x << " " << pt1.y << " m\n";
- sButton << pt2.x << " " << pt2.y << " l\n";
- sButton << pt3.x << " " << pt3.y << " l\n";
- sButton << pt1.x << " " << pt1.y << " l f\n";
-
- sAppStream << sButton;
- }
- }
- break;
- default:
- break;
- }
- break;
- case SBT_VSCROLL:
- switch (m_eSBButtonType)
- {
- case PSBT_MIN:
- {
- CPDF_Point pt1(ptCenter.x - PWL_TRIANGLE_HALFLEN,ptCenter.y - PWL_TRIANGLE_HALFLEN * 0.5f);
- CPDF_Point pt2(ptCenter.x + PWL_TRIANGLE_HALFLEN,ptCenter.y - PWL_TRIANGLE_HALFLEN * 0.5f);
- CPDF_Point pt3(ptCenter.x,ptCenter.y + PWL_TRIANGLE_HALFLEN * 0.5f);
-
- if (rectWnd.right - rectWnd.left > PWL_TRIANGLE_HALFLEN * 2 &&
- rectWnd.top - rectWnd.bottom > PWL_TRIANGLE_HALFLEN )
- {
- sButton << "0 g\n";
- sButton << pt1.x << " " << pt1.y << " m\n";
- sButton << pt2.x << " " << pt2.y << " l\n";
- sButton << pt3.x << " " << pt3.y << " l\n";
- sButton << pt1.x << " " << pt1.y << " l f\n";
-
- sAppStream << sButton;
- }
- }
- break;
- case PSBT_MAX:
- {
- CPDF_Point pt1(ptCenter.x - PWL_TRIANGLE_HALFLEN,ptCenter.y + PWL_TRIANGLE_HALFLEN * 0.5f);
- CPDF_Point pt2(ptCenter.x + PWL_TRIANGLE_HALFLEN,ptCenter.y + PWL_TRIANGLE_HALFLEN * 0.5f);
- CPDF_Point pt3(ptCenter.x,ptCenter.y - PWL_TRIANGLE_HALFLEN * 0.5f);
-
- if (rectWnd.right - rectWnd.left > PWL_TRIANGLE_HALFLEN * 2 &&
- rectWnd.top - rectWnd.bottom > PWL_TRIANGLE_HALFLEN )
- {
- sButton << "0 g\n";
- sButton << pt1.x << " " << pt1.y << " m\n";
- sButton << pt2.x << " " << pt2.y << " l\n";
- sButton << pt3.x << " " << pt3.y << " l\n";
- sButton << pt1.x << " " << pt1.y << " l f\n";
-
- sAppStream << sButton;
- }
- }
- break;
- default:
- break;
- }
- break;
- default:
- break;
- }
-
- sAppStream << "Q\n";
+void CPWL_SBButton::GetThisAppearanceStream(CFX_ByteTextBuf& sAppStream) {
+ CPWL_Wnd::GetThisAppearanceStream(sAppStream);
+
+ if (!IsVisible())
+ return;
+
+ CFX_ByteTextBuf sButton;
+
+ CPDF_Rect rectWnd = GetWindowRect();
+
+ if (rectWnd.IsEmpty())
+ return;
+
+ sAppStream << "q\n";
+
+ CPDF_Point ptCenter = GetCenterPoint();
+
+ switch (m_eScrollBarType) {
+ case SBT_HSCROLL:
+ switch (m_eSBButtonType) {
+ case PSBT_MIN: {
+ CPDF_Point pt1(ptCenter.x - PWL_TRIANGLE_HALFLEN * 0.5f, ptCenter.y);
+ CPDF_Point pt2(ptCenter.x + PWL_TRIANGLE_HALFLEN * 0.5f,
+ ptCenter.y + PWL_TRIANGLE_HALFLEN);
+ CPDF_Point pt3(ptCenter.x + PWL_TRIANGLE_HALFLEN * 0.5f,
+ ptCenter.y - PWL_TRIANGLE_HALFLEN);
+
+ if (rectWnd.right - rectWnd.left > PWL_TRIANGLE_HALFLEN * 2 &&
+ rectWnd.top - rectWnd.bottom > PWL_TRIANGLE_HALFLEN) {
+ sButton << "0 g\n";
+ sButton << pt1.x << " " << pt1.y << " m\n";
+ sButton << pt2.x << " " << pt2.y << " l\n";
+ sButton << pt3.x << " " << pt3.y << " l\n";
+ sButton << pt1.x << " " << pt1.y << " l f\n";
+
+ sAppStream << sButton;
+ }
+ } break;
+ case PSBT_MAX: {
+ CPDF_Point pt1(ptCenter.x + PWL_TRIANGLE_HALFLEN * 0.5f, ptCenter.y);
+ CPDF_Point pt2(ptCenter.x - PWL_TRIANGLE_HALFLEN * 0.5f,
+ ptCenter.y + PWL_TRIANGLE_HALFLEN);
+ CPDF_Point pt3(ptCenter.x - PWL_TRIANGLE_HALFLEN * 0.5f,
+ ptCenter.y - PWL_TRIANGLE_HALFLEN);
+
+ if (rectWnd.right - rectWnd.left > PWL_TRIANGLE_HALFLEN * 2 &&
+ rectWnd.top - rectWnd.bottom > PWL_TRIANGLE_HALFLEN) {
+ sButton << "0 g\n";
+ sButton << pt1.x << " " << pt1.y << " m\n";
+ sButton << pt2.x << " " << pt2.y << " l\n";
+ sButton << pt3.x << " " << pt3.y << " l\n";
+ sButton << pt1.x << " " << pt1.y << " l f\n";
+
+ sAppStream << sButton;
+ }
+ } break;
+ default:
+ break;
+ }
+ break;
+ case SBT_VSCROLL:
+ switch (m_eSBButtonType) {
+ case PSBT_MIN: {
+ CPDF_Point pt1(ptCenter.x - PWL_TRIANGLE_HALFLEN,
+ ptCenter.y - PWL_TRIANGLE_HALFLEN * 0.5f);
+ CPDF_Point pt2(ptCenter.x + PWL_TRIANGLE_HALFLEN,
+ ptCenter.y - PWL_TRIANGLE_HALFLEN * 0.5f);
+ CPDF_Point pt3(ptCenter.x, ptCenter.y + PWL_TRIANGLE_HALFLEN * 0.5f);
+
+ if (rectWnd.right - rectWnd.left > PWL_TRIANGLE_HALFLEN * 2 &&
+ rectWnd.top - rectWnd.bottom > PWL_TRIANGLE_HALFLEN) {
+ sButton << "0 g\n";
+ sButton << pt1.x << " " << pt1.y << " m\n";
+ sButton << pt2.x << " " << pt2.y << " l\n";
+ sButton << pt3.x << " " << pt3.y << " l\n";
+ sButton << pt1.x << " " << pt1.y << " l f\n";
+
+ sAppStream << sButton;
+ }
+ } break;
+ case PSBT_MAX: {
+ CPDF_Point pt1(ptCenter.x - PWL_TRIANGLE_HALFLEN,
+ ptCenter.y + PWL_TRIANGLE_HALFLEN * 0.5f);
+ CPDF_Point pt2(ptCenter.x + PWL_TRIANGLE_HALFLEN,
+ ptCenter.y + PWL_TRIANGLE_HALFLEN * 0.5f);
+ CPDF_Point pt3(ptCenter.x, ptCenter.y - PWL_TRIANGLE_HALFLEN * 0.5f);
+
+ if (rectWnd.right - rectWnd.left > PWL_TRIANGLE_HALFLEN * 2 &&
+ rectWnd.top - rectWnd.bottom > PWL_TRIANGLE_HALFLEN) {
+ sButton << "0 g\n";
+ sButton << pt1.x << " " << pt1.y << " m\n";
+ sButton << pt2.x << " " << pt2.y << " l\n";
+ sButton << pt3.x << " " << pt3.y << " l\n";
+ sButton << pt1.x << " " << pt1.y << " l f\n";
+
+ sAppStream << sButton;
+ }
+ } break;
+ default:
+ break;
+ }
+ break;
+ default:
+ break;
+ }
+
+ sAppStream << "Q\n";
}
-void CPWL_SBButton::DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device)
-{
- if (!IsVisible()) return;
-
- CPDF_Rect rectWnd = GetWindowRect();
- if (rectWnd.IsEmpty()) return;
-
- CPDF_Point ptCenter = GetCenterPoint();
- int32_t nTransparancy = GetTransparency();
-
- switch (m_eScrollBarType)
- {
- case SBT_HSCROLL:
- CPWL_Wnd::DrawThisAppearance(pDevice,pUser2Device);
- switch (m_eSBButtonType)
- {
- case PSBT_MIN:
- {
- CPDF_Point pt1(ptCenter.x - PWL_TRIANGLE_HALFLEN * 0.5f,ptCenter.y);
- CPDF_Point pt2(ptCenter.x + PWL_TRIANGLE_HALFLEN * 0.5f,ptCenter.y + PWL_TRIANGLE_HALFLEN);
- CPDF_Point pt3(ptCenter.x + PWL_TRIANGLE_HALFLEN * 0.5f,ptCenter.y - PWL_TRIANGLE_HALFLEN);
-
- if (rectWnd.right - rectWnd.left > PWL_TRIANGLE_HALFLEN * 2 &&
- rectWnd.top - rectWnd.bottom > PWL_TRIANGLE_HALFLEN )
- {
- CFX_PathData path;
-
- path.SetPointCount(4);
- path.SetPoint(0, pt1.x, pt1.y, FXPT_MOVETO);
- path.SetPoint(1, pt2.x, pt2.y, FXPT_LINETO);
- path.SetPoint(2, pt3.x, pt3.y, FXPT_LINETO);
- path.SetPoint(3, pt1.x, pt1.y, FXPT_LINETO);
-
- pDevice->DrawPath(&path, pUser2Device, NULL,
- CPWL_Utils::PWLColorToFXColor(PWL_DEFAULT_BLACKCOLOR,nTransparancy),
- 0, FXFILL_ALTERNATE);
- }
- }
- break;
- case PSBT_MAX:
- {
- CPDF_Point pt1(ptCenter.x + PWL_TRIANGLE_HALFLEN * 0.5f,ptCenter.y);
- CPDF_Point pt2(ptCenter.x - PWL_TRIANGLE_HALFLEN * 0.5f,ptCenter.y + PWL_TRIANGLE_HALFLEN);
- CPDF_Point pt3(ptCenter.x - PWL_TRIANGLE_HALFLEN * 0.5f,ptCenter.y - PWL_TRIANGLE_HALFLEN);
-
- if (rectWnd.right - rectWnd.left > PWL_TRIANGLE_HALFLEN * 2 &&
- rectWnd.top - rectWnd.bottom > PWL_TRIANGLE_HALFLEN )
- {
- CFX_PathData path;
-
- path.SetPointCount(4);
- path.SetPoint(0, pt1.x, pt1.y, FXPT_MOVETO);
- path.SetPoint(1, pt2.x, pt2.y, FXPT_LINETO);
- path.SetPoint(2, pt3.x, pt3.y, FXPT_LINETO);
- path.SetPoint(3, pt1.x, pt1.y, FXPT_LINETO);
-
- pDevice->DrawPath(&path, pUser2Device, NULL,
- CPWL_Utils::PWLColorToFXColor(PWL_DEFAULT_BLACKCOLOR,nTransparancy),
- 0, FXFILL_ALTERNATE);
- }
- }
- break;
- default:
- break;
- }
- break;
- case SBT_VSCROLL:
- switch (m_eSBButtonType)
- {
- case PSBT_MIN:
- {
- //draw border
- CPDF_Rect rcDraw = rectWnd;
- CPWL_Utils::DrawStrokeRect(pDevice, pUser2Device, rcDraw,
- ArgbEncode(nTransparancy,100,100,100),0.0f);
-
- //draw inner border
- rcDraw = CPWL_Utils::DeflateRect(rectWnd,0.5f);
- CPWL_Utils::DrawStrokeRect(pDevice, pUser2Device, rcDraw,
- ArgbEncode(nTransparancy,255,255,255),1.0f);
-
- //draw background
-
- rcDraw = CPWL_Utils::DeflateRect(rectWnd,1.0f);
-
- if (IsEnabled())
- CPWL_Utils::DrawShadow(pDevice, pUser2Device, TRUE, FALSE, rcDraw, nTransparancy, 80, 220);
- else
- CPWL_Utils::DrawFillRect(pDevice, pUser2Device, rcDraw, ArgbEncode(255,255,255,255));
-
- //draw arrow
-
- if (rectWnd.top - rectWnd.bottom > 6.0f )
- {
- FX_FLOAT fX = rectWnd.left + 1.5f;
- FX_FLOAT fY = rectWnd.bottom;
- CPDF_Point pts[7] = {
- CPDF_Point(fX+2.5f, fY+4.0f),
- CPDF_Point(fX+2.5f, fY+3.0f),
- CPDF_Point(fX+4.5f, fY+5.0f),
- CPDF_Point(fX+6.5f, fY+3.0f),
- CPDF_Point(fX+6.5f, fY+4.0f),
- CPDF_Point(fX+4.5f, fY+6.0f),
- CPDF_Point(fX+2.5f, fY+4.0f)};
-
-
- if (IsEnabled())
- CPWL_Utils::DrawFillArea(pDevice, pUser2Device, pts, 7, ArgbEncode(nTransparancy,255,255,255));
- else
- CPWL_Utils::DrawFillArea(pDevice, pUser2Device, pts, 7,
- CPWL_Utils::PWLColorToFXColor(PWL_DEFAULT_HEAVYGRAYCOLOR,255));
- }
- }
- break;
- case PSBT_MAX:
- {
- //draw border
- CPDF_Rect rcDraw = rectWnd;
- CPWL_Utils::DrawStrokeRect(pDevice, pUser2Device, rcDraw,
- ArgbEncode(nTransparancy,100,100,100),0.0f);
-
- //draw inner border
- rcDraw = CPWL_Utils::DeflateRect(rectWnd,0.5f);
- CPWL_Utils::DrawStrokeRect(pDevice, pUser2Device, rcDraw,
- ArgbEncode(nTransparancy,255,255,255),1.0f);
-
- //draw background
- rcDraw = CPWL_Utils::DeflateRect(rectWnd,1.0f);
- if (IsEnabled())
- CPWL_Utils::DrawShadow(pDevice, pUser2Device, TRUE, FALSE, rcDraw, nTransparancy, 80, 220);
- else
- CPWL_Utils::DrawFillRect(pDevice, pUser2Device, rcDraw, ArgbEncode(255,255,255,255));
-
- //draw arrow
-
- if (rectWnd.top - rectWnd.bottom > 6.0f )
- {
- FX_FLOAT fX = rectWnd.left + 1.5f;
- FX_FLOAT fY = rectWnd.bottom;
-
- CPDF_Point pts[7] = {
- CPDF_Point(fX+2.5f, fY+5.0f),
- CPDF_Point(fX+2.5f, fY+6.0f),
- CPDF_Point(fX+4.5f, fY+4.0f),
- CPDF_Point(fX+6.5f, fY+6.0f),
- CPDF_Point(fX+6.5f, fY+5.0f),
- CPDF_Point(fX+4.5f, fY+3.0f),
- CPDF_Point(fX+2.5f, fY+5.0f)};
-
-
- if (IsEnabled())
- CPWL_Utils::DrawFillArea(pDevice, pUser2Device, pts, 7, ArgbEncode(nTransparancy,255,255,255));
- else
- CPWL_Utils::DrawFillArea(pDevice, pUser2Device, pts, 7,
- CPWL_Utils::PWLColorToFXColor(PWL_DEFAULT_HEAVYGRAYCOLOR,255));
- }
- }
- break;
- case PSBT_POS:
- {
- //CPWL_Wnd::DrawThisAppearance(pDevice,pUser2Device);
-
- //draw border
- CPDF_Rect rcDraw = rectWnd;
- CPWL_Utils::DrawStrokeRect(pDevice, pUser2Device, rcDraw,
- ArgbEncode(nTransparancy,100,100,100),0.0f);
-
- //draw inner border
- rcDraw = CPWL_Utils::DeflateRect(rectWnd,0.5f);
- CPWL_Utils::DrawStrokeRect(pDevice, pUser2Device, rcDraw,
- ArgbEncode(nTransparancy,255,255,255),1.0f);
-
- if (IsEnabled())
- {
- //draw shadow effect
-
- CPDF_Point ptTop = CPDF_Point(rectWnd.left,rectWnd.top-1.0f);
- CPDF_Point ptBottom = CPDF_Point(rectWnd.left,rectWnd.bottom+1.0f);
-
- ptTop.x += 1.5f;
- ptBottom.x += 1.5f;
-
- CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptTop, ptBottom,
- ArgbEncode(nTransparancy,210,210,210),1.0f);
-
- ptTop.x += 1.0f;
- ptBottom.x += 1.0f;
-
- CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptTop, ptBottom,
- ArgbEncode(nTransparancy,220,220,220),1.0f);
-
- ptTop.x += 1.0f;
- ptBottom.x += 1.0f;
-
- CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptTop, ptBottom,
- ArgbEncode(nTransparancy,240,240,240),1.0f);
-
- ptTop.x += 1.0f;
- ptBottom.x += 1.0f;
-
- CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptTop, ptBottom,
- ArgbEncode(nTransparancy,240,240,240),1.0f);
-
- ptTop.x += 1.0f;
- ptBottom.x += 1.0f;
-
- CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptTop, ptBottom,
- ArgbEncode(nTransparancy,210,210,210),1.0f);
-
- ptTop.x += 1.0f;
- ptBottom.x += 1.0f;
-
- CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptTop, ptBottom,
- ArgbEncode(nTransparancy,180,180,180),1.0f);
-
- ptTop.x += 1.0f;
- ptBottom.x += 1.0f;
-
- CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptTop, ptBottom,
- ArgbEncode(nTransparancy,150,150,150),1.0f);
-
- ptTop.x += 1.0f;
- ptBottom.x += 1.0f;
-
- CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptTop, ptBottom,
- ArgbEncode(nTransparancy,150,150,150),1.0f);
-
- ptTop.x += 1.0f;
- ptBottom.x += 1.0f;
-
- CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptTop, ptBottom,
- ArgbEncode(nTransparancy,180,180,180),1.0f);
-
- ptTop.x += 1.0f;
- ptBottom.x += 1.0f;
-
- CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptTop, ptBottom,
- ArgbEncode(nTransparancy,210,210,210),1.0f);
- }
- else
- {
- CPWL_Utils::DrawFillRect(pDevice, pUser2Device, rcDraw, ArgbEncode(255,255,255,255));
- }
-
- //draw friction
+void CPWL_SBButton::DrawThisAppearance(CFX_RenderDevice* pDevice,
+ CPDF_Matrix* pUser2Device) {
+ if (!IsVisible())
+ return;
+
+ CPDF_Rect rectWnd = GetWindowRect();
+ if (rectWnd.IsEmpty())
+ return;
+
+ CPDF_Point ptCenter = GetCenterPoint();
+ int32_t nTransparancy = GetTransparency();
+
+ switch (m_eScrollBarType) {
+ case SBT_HSCROLL:
+ CPWL_Wnd::DrawThisAppearance(pDevice, pUser2Device);
+ switch (m_eSBButtonType) {
+ case PSBT_MIN: {
+ CPDF_Point pt1(ptCenter.x - PWL_TRIANGLE_HALFLEN * 0.5f, ptCenter.y);
+ CPDF_Point pt2(ptCenter.x + PWL_TRIANGLE_HALFLEN * 0.5f,
+ ptCenter.y + PWL_TRIANGLE_HALFLEN);
+ CPDF_Point pt3(ptCenter.x + PWL_TRIANGLE_HALFLEN * 0.5f,
+ ptCenter.y - PWL_TRIANGLE_HALFLEN);
+
+ if (rectWnd.right - rectWnd.left > PWL_TRIANGLE_HALFLEN * 2 &&
+ rectWnd.top - rectWnd.bottom > PWL_TRIANGLE_HALFLEN) {
+ CFX_PathData path;
+
+ path.SetPointCount(4);
+ path.SetPoint(0, pt1.x, pt1.y, FXPT_MOVETO);
+ path.SetPoint(1, pt2.x, pt2.y, FXPT_LINETO);
+ path.SetPoint(2, pt3.x, pt3.y, FXPT_LINETO);
+ path.SetPoint(3, pt1.x, pt1.y, FXPT_LINETO);
+
+ pDevice->DrawPath(&path, pUser2Device, NULL,
+ CPWL_Utils::PWLColorToFXColor(
+ PWL_DEFAULT_BLACKCOLOR, nTransparancy),
+ 0, FXFILL_ALTERNATE);
+ }
+ } break;
+ case PSBT_MAX: {
+ CPDF_Point pt1(ptCenter.x + PWL_TRIANGLE_HALFLEN * 0.5f, ptCenter.y);
+ CPDF_Point pt2(ptCenter.x - PWL_TRIANGLE_HALFLEN * 0.5f,
+ ptCenter.y + PWL_TRIANGLE_HALFLEN);
+ CPDF_Point pt3(ptCenter.x - PWL_TRIANGLE_HALFLEN * 0.5f,
+ ptCenter.y - PWL_TRIANGLE_HALFLEN);
+
+ if (rectWnd.right - rectWnd.left > PWL_TRIANGLE_HALFLEN * 2 &&
+ rectWnd.top - rectWnd.bottom > PWL_TRIANGLE_HALFLEN) {
+ CFX_PathData path;
+
+ path.SetPointCount(4);
+ path.SetPoint(0, pt1.x, pt1.y, FXPT_MOVETO);
+ path.SetPoint(1, pt2.x, pt2.y, FXPT_LINETO);
+ path.SetPoint(2, pt3.x, pt3.y, FXPT_LINETO);
+ path.SetPoint(3, pt1.x, pt1.y, FXPT_LINETO);
+
+ pDevice->DrawPath(&path, pUser2Device, NULL,
+ CPWL_Utils::PWLColorToFXColor(
+ PWL_DEFAULT_BLACKCOLOR, nTransparancy),
+ 0, FXFILL_ALTERNATE);
+ }
+ } break;
+ default:
+ break;
+ }
+ break;
+ case SBT_VSCROLL:
+ switch (m_eSBButtonType) {
+ case PSBT_MIN: {
+ // draw border
+ CPDF_Rect rcDraw = rectWnd;
+ CPWL_Utils::DrawStrokeRect(pDevice, pUser2Device, rcDraw,
+ ArgbEncode(nTransparancy, 100, 100, 100),
+ 0.0f);
+
+ // draw inner border
+ rcDraw = CPWL_Utils::DeflateRect(rectWnd, 0.5f);
+ CPWL_Utils::DrawStrokeRect(pDevice, pUser2Device, rcDraw,
+ ArgbEncode(nTransparancy, 255, 255, 255),
+ 1.0f);
+
+ // draw background
+
+ rcDraw = CPWL_Utils::DeflateRect(rectWnd, 1.0f);
+
+ if (IsEnabled())
+ CPWL_Utils::DrawShadow(pDevice, pUser2Device, TRUE, FALSE, rcDraw,
+ nTransparancy, 80, 220);
+ else
+ CPWL_Utils::DrawFillRect(pDevice, pUser2Device, rcDraw,
+ ArgbEncode(255, 255, 255, 255));
+
+ // draw arrow
+
+ if (rectWnd.top - rectWnd.bottom > 6.0f) {
+ FX_FLOAT fX = rectWnd.left + 1.5f;
+ FX_FLOAT fY = rectWnd.bottom;
+ CPDF_Point pts[7] = {CPDF_Point(fX + 2.5f, fY + 4.0f),
+ CPDF_Point(fX + 2.5f, fY + 3.0f),
+ CPDF_Point(fX + 4.5f, fY + 5.0f),
+ CPDF_Point(fX + 6.5f, fY + 3.0f),
+ CPDF_Point(fX + 6.5f, fY + 4.0f),
+ CPDF_Point(fX + 4.5f, fY + 6.0f),
+ CPDF_Point(fX + 2.5f, fY + 4.0f)};
+
+ if (IsEnabled())
+ CPWL_Utils::DrawFillArea(
+ pDevice, pUser2Device, pts, 7,
+ ArgbEncode(nTransparancy, 255, 255, 255));
+ else
+ CPWL_Utils::DrawFillArea(pDevice, pUser2Device, pts, 7,
+ CPWL_Utils::PWLColorToFXColor(
+ PWL_DEFAULT_HEAVYGRAYCOLOR, 255));
+ }
+ } break;
+ case PSBT_MAX: {
+ // draw border
+ CPDF_Rect rcDraw = rectWnd;
+ CPWL_Utils::DrawStrokeRect(pDevice, pUser2Device, rcDraw,
+ ArgbEncode(nTransparancy, 100, 100, 100),
+ 0.0f);
+
+ // draw inner border
+ rcDraw = CPWL_Utils::DeflateRect(rectWnd, 0.5f);
+ CPWL_Utils::DrawStrokeRect(pDevice, pUser2Device, rcDraw,
+ ArgbEncode(nTransparancy, 255, 255, 255),
+ 1.0f);
+
+ // draw background
+ rcDraw = CPWL_Utils::DeflateRect(rectWnd, 1.0f);
+ if (IsEnabled())
+ CPWL_Utils::DrawShadow(pDevice, pUser2Device, TRUE, FALSE, rcDraw,
+ nTransparancy, 80, 220);
+ else
+ CPWL_Utils::DrawFillRect(pDevice, pUser2Device, rcDraw,
+ ArgbEncode(255, 255, 255, 255));
+
+ // draw arrow
+
+ if (rectWnd.top - rectWnd.bottom > 6.0f) {
+ FX_FLOAT fX = rectWnd.left + 1.5f;
+ FX_FLOAT fY = rectWnd.bottom;
+
+ CPDF_Point pts[7] = {CPDF_Point(fX + 2.5f, fY + 5.0f),
+ CPDF_Point(fX + 2.5f, fY + 6.0f),
+ CPDF_Point(fX + 4.5f, fY + 4.0f),
+ CPDF_Point(fX + 6.5f, fY + 6.0f),
+ CPDF_Point(fX + 6.5f, fY + 5.0f),
+ CPDF_Point(fX + 4.5f, fY + 3.0f),
+ CPDF_Point(fX + 2.5f, fY + 5.0f)};
+
+ if (IsEnabled())
+ CPWL_Utils::DrawFillArea(
+ pDevice, pUser2Device, pts, 7,
+ ArgbEncode(nTransparancy, 255, 255, 255));
+ else
+ CPWL_Utils::DrawFillArea(pDevice, pUser2Device, pts, 7,
+ CPWL_Utils::PWLColorToFXColor(
+ PWL_DEFAULT_HEAVYGRAYCOLOR, 255));
+ }
+ } break;
+ case PSBT_POS: {
+ // CPWL_Wnd::DrawThisAppearance(pDevice,pUser2Device);
+
+ // draw border
+ CPDF_Rect rcDraw = rectWnd;
+ CPWL_Utils::DrawStrokeRect(pDevice, pUser2Device, rcDraw,
+ ArgbEncode(nTransparancy, 100, 100, 100),
+ 0.0f);
+
+ // draw inner border
+ rcDraw = CPWL_Utils::DeflateRect(rectWnd, 0.5f);
+ CPWL_Utils::DrawStrokeRect(pDevice, pUser2Device, rcDraw,
+ ArgbEncode(nTransparancy, 255, 255, 255),
+ 1.0f);
+
+ if (IsEnabled()) {
+ // draw shadow effect
+
+ CPDF_Point ptTop = CPDF_Point(rectWnd.left, rectWnd.top - 1.0f);
+ CPDF_Point ptBottom =
+ CPDF_Point(rectWnd.left, rectWnd.bottom + 1.0f);
+
+ ptTop.x += 1.5f;
+ ptBottom.x += 1.5f;
+
+ CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptTop, ptBottom,
+ ArgbEncode(nTransparancy, 210, 210, 210),
+ 1.0f);
+
+ ptTop.x += 1.0f;
+ ptBottom.x += 1.0f;
+
+ CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptTop, ptBottom,
+ ArgbEncode(nTransparancy, 220, 220, 220),
+ 1.0f);
+
+ ptTop.x += 1.0f;
+ ptBottom.x += 1.0f;
+
+ CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptTop, ptBottom,
+ ArgbEncode(nTransparancy, 240, 240, 240),
+ 1.0f);
+
+ ptTop.x += 1.0f;
+ ptBottom.x += 1.0f;
+
+ CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptTop, ptBottom,
+ ArgbEncode(nTransparancy, 240, 240, 240),
+ 1.0f);
+
+ ptTop.x += 1.0f;
+ ptBottom.x += 1.0f;
+
+ CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptTop, ptBottom,
+ ArgbEncode(nTransparancy, 210, 210, 210),
+ 1.0f);
+
+ ptTop.x += 1.0f;
+ ptBottom.x += 1.0f;
+
+ CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptTop, ptBottom,
+ ArgbEncode(nTransparancy, 180, 180, 180),
+ 1.0f);
+
+ ptTop.x += 1.0f;
+ ptBottom.x += 1.0f;
+
+ CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptTop, ptBottom,
+ ArgbEncode(nTransparancy, 150, 150, 150),
+ 1.0f);
+
+ ptTop.x += 1.0f;
+ ptBottom.x += 1.0f;
+
+ CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptTop, ptBottom,
+ ArgbEncode(nTransparancy, 150, 150, 150),
+ 1.0f);
+
+ ptTop.x += 1.0f;
+ ptBottom.x += 1.0f;
+
+ CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptTop, ptBottom,
+ ArgbEncode(nTransparancy, 180, 180, 180),
+ 1.0f);
+
+ ptTop.x += 1.0f;
+ ptBottom.x += 1.0f;
+
+ CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptTop, ptBottom,
+ ArgbEncode(nTransparancy, 210, 210, 210),
+ 1.0f);
+ } else {
+ CPWL_Utils::DrawFillRect(pDevice, pUser2Device, rcDraw,
+ ArgbEncode(255, 255, 255, 255));
+ }
+
+ // draw friction
+
+ if (rectWnd.Height() > 8.0f) {
+ FX_COLORREF crStroke = ArgbEncode(nTransparancy, 120, 120, 120);
+ if (!IsEnabled())
+ crStroke = CPWL_Utils::PWLColorToFXColor(
+ PWL_DEFAULT_HEAVYGRAYCOLOR, 255);
+
+ FX_FLOAT nFrictionWidth = 5.0f;
+ FX_FLOAT nFrictionHeight = 5.5f;
- if (rectWnd.Height() > 8.0f)
- {
- FX_COLORREF crStroke = ArgbEncode(nTransparancy,120,120,120);
- if (!IsEnabled())
- crStroke = CPWL_Utils::PWLColorToFXColor(PWL_DEFAULT_HEAVYGRAYCOLOR,255);
+ CPDF_Point ptLeft =
+ CPDF_Point(ptCenter.x - nFrictionWidth / 2.0f,
+ ptCenter.y - nFrictionHeight / 2.0f + 0.5f);
+ CPDF_Point ptRight =
+ CPDF_Point(ptCenter.x + nFrictionWidth / 2.0f,
+ ptCenter.y - nFrictionHeight / 2.0f + 0.5f);
- FX_FLOAT nFrictionWidth = 5.0f;
- FX_FLOAT nFrictionHeight = 5.5f;
+ CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptLeft, ptRight,
+ crStroke, 1.0f);
- CPDF_Point ptLeft = CPDF_Point(ptCenter.x - nFrictionWidth / 2.0f, ptCenter.y - nFrictionHeight / 2.0f + 0.5f);
- CPDF_Point ptRight = CPDF_Point(ptCenter.x + nFrictionWidth / 2.0f, ptCenter.y - nFrictionHeight / 2.0f + 0.5f);
+ ptLeft.y += 2.0f;
+ ptRight.y += 2.0f;
- CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptLeft, ptRight,
- crStroke,1.0f);
+ CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptLeft, ptRight,
+ crStroke, 1.0f);
- ptLeft.y += 2.0f;
- ptRight.y += 2.0f;
+ ptLeft.y += 2.0f;
+ ptRight.y += 2.0f;
+
+ CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptLeft, ptRight,
+ crStroke, 1.0f);
- CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptLeft, ptRight,
- crStroke,1.0f);
+ /*
+ ptLeft.y += 1.5f;
+ ptRight.y += 1.5f;
+
+ CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptLeft, ptRight,
+ ArgbEncode(nTransparancy,150,150,150),1.0f);
+ */
+ }
+ } break;
+ default:
+ break;
+ }
+ break;
+ default:
+ break;
+ }
+}
- ptLeft.y += 2.0f;
- ptRight.y += 2.0f;
+FX_BOOL CPWL_SBButton::OnLButtonDown(const CPDF_Point& point, FX_DWORD nFlag) {
+ CPWL_Wnd::OnLButtonDown(point, nFlag);
- CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptLeft, ptRight,
- crStroke,1.0f);
+ if (CPWL_Wnd* pParent = GetParentWindow())
+ pParent->OnNotify(this, PNM_LBUTTONDOWN, 0, (intptr_t)&point);
- /*
- ptLeft.y += 1.5f;
- ptRight.y += 1.5f;
+ m_bMouseDown = TRUE;
+ SetCapture();
- CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptLeft, ptRight,
- ArgbEncode(nTransparancy,150,150,150),1.0f);
- */
- }
- }
- break;
- default:
- break;
- }
- break;
- default:
- break;
- }
+ return TRUE;
}
-FX_BOOL CPWL_SBButton::OnLButtonDown(const CPDF_Point & point, FX_DWORD nFlag)
-{
- CPWL_Wnd::OnLButtonDown(point,nFlag);
+FX_BOOL CPWL_SBButton::OnLButtonUp(const CPDF_Point& point, FX_DWORD nFlag) {
+ CPWL_Wnd::OnLButtonUp(point, nFlag);
- if (CPWL_Wnd * pParent = GetParentWindow())
- pParent->OnNotify(this,PNM_LBUTTONDOWN,0,(intptr_t)&point);
+ if (CPWL_Wnd* pParent = GetParentWindow())
+ pParent->OnNotify(this, PNM_LBUTTONUP, 0, (intptr_t)&point);
- m_bMouseDown = TRUE;
- SetCapture();
+ m_bMouseDown = FALSE;
+ ReleaseCapture();
- return TRUE;
+ return TRUE;
}
-FX_BOOL CPWL_SBButton::OnLButtonUp(const CPDF_Point & point, FX_DWORD nFlag)
-{
- CPWL_Wnd::OnLButtonUp(point,nFlag);
+FX_BOOL CPWL_SBButton::OnMouseMove(const CPDF_Point& point, FX_DWORD nFlag) {
+ CPWL_Wnd::OnMouseMove(point, nFlag);
- if (CPWL_Wnd * pParent = GetParentWindow())
- pParent->OnNotify(this,PNM_LBUTTONUP,0,(intptr_t)&point);
+ if (CPWL_Wnd* pParent = GetParentWindow()) {
+ pParent->OnNotify(this, PNM_MOUSEMOVE, 0, (intptr_t)&point);
- m_bMouseDown = FALSE;
- ReleaseCapture();
+ /*
+ if (m_bMouseDown && (m_eSBButtonType == PSBT_MIN || m_eSBButtonType ==
+ PSBT_MAX))
+ {
+ if
+ (!pParent->OnNotify(this,PNM_LBUTTONDOWN,nFlags,(intptr_t)&point))
+ return FALSE;
+ }
+ */
+ }
- return TRUE;
+ return TRUE;
}
-FX_BOOL CPWL_SBButton::OnMouseMove(const CPDF_Point & point, FX_DWORD nFlag)
-{
- CPWL_Wnd::OnMouseMove(point,nFlag);
+/* ------------------------------- CPWL_ScrollBar
+ * ---------------------------------- */
- if (CPWL_Wnd * pParent = GetParentWindow())
- {
- pParent->OnNotify(this,PNM_MOUSEMOVE,0,(intptr_t)&point);
+CPWL_ScrollBar::CPWL_ScrollBar(PWL_SCROLLBAR_TYPE sbType)
+ : m_sbType(sbType),
+ m_pMinButton(NULL),
+ m_pMaxButton(NULL),
+ m_pPosButton(NULL),
+ m_bMouseDown(FALSE),
+ m_bMinOrMax(FALSE),
+ m_bNotifyForever(TRUE) {}
- /*
- if (m_bMouseDown && (m_eSBButtonType == PSBT_MIN || m_eSBButtonType == PSBT_MAX))
- {
- if (!pParent->OnNotify(this,PNM_LBUTTONDOWN,nFlags,(intptr_t)&point))
- return FALSE;
- }
- */
- }
+CPWL_ScrollBar::~CPWL_ScrollBar() {}
- return TRUE;
+CFX_ByteString CPWL_ScrollBar::GetClassName() const {
+ return "CPWL_ScrollBar";
}
-/* ------------------------------- CPWL_ScrollBar ---------------------------------- */
-
-CPWL_ScrollBar::CPWL_ScrollBar(PWL_SCROLLBAR_TYPE sbType):
- m_sbType(sbType),
- m_pMinButton(NULL),
- m_pMaxButton(NULL),
- m_pPosButton(NULL),
- m_bMouseDown(FALSE),
- m_bMinOrMax(FALSE),
- m_bNotifyForever(TRUE)
-{
+void CPWL_ScrollBar::OnCreate(PWL_CREATEPARAM& cp) {
+ cp.eCursorType = FXCT_ARROW;
}
-CPWL_ScrollBar::~CPWL_ScrollBar()
-{
+void CPWL_ScrollBar::RePosChildWnd() {
+ CPDF_Rect rcClient = GetClientRect();
+ CPDF_Rect rcMinButton, rcMaxButton;
+ FX_FLOAT fBWidth = 0;
+
+ switch (m_sbType) {
+ case SBT_HSCROLL:
+ if (rcClient.right - rcClient.left >
+ PWL_SCROLLBAR_BUTTON_WIDTH * 2 + PWL_SCROLLBAR_POSBUTTON_MINWIDTH +
+ 2) {
+ rcMinButton =
+ CPDF_Rect(rcClient.left, rcClient.bottom,
+ rcClient.left + PWL_SCROLLBAR_BUTTON_WIDTH, rcClient.top);
+ rcMaxButton = CPDF_Rect(rcClient.right - PWL_SCROLLBAR_BUTTON_WIDTH,
+ rcClient.bottom, rcClient.right, rcClient.top);
+ } else {
+ fBWidth = (rcClient.right - rcClient.left -
+ PWL_SCROLLBAR_POSBUTTON_MINWIDTH - 2) /
+ 2;
+
+ if (fBWidth > 0) {
+ rcMinButton = CPDF_Rect(rcClient.left, rcClient.bottom,
+ rcClient.left + fBWidth, rcClient.top);
+ rcMaxButton = CPDF_Rect(rcClient.right - fBWidth, rcClient.bottom,
+ rcClient.right, rcClient.top);
+ } else
+ SetVisible(FALSE);
+ }
+ break;
+ case SBT_VSCROLL:
+ if (IsFloatBigger(rcClient.top - rcClient.bottom,
+ PWL_SCROLLBAR_BUTTON_WIDTH * 2 +
+ PWL_SCROLLBAR_POSBUTTON_MINWIDTH + 2)) {
+ rcMinButton =
+ CPDF_Rect(rcClient.left, rcClient.top - PWL_SCROLLBAR_BUTTON_WIDTH,
+ rcClient.right, rcClient.top);
+ rcMaxButton = CPDF_Rect(rcClient.left, rcClient.bottom, rcClient.right,
+ rcClient.bottom + PWL_SCROLLBAR_BUTTON_WIDTH);
+ } else {
+ fBWidth = (rcClient.top - rcClient.bottom -
+ PWL_SCROLLBAR_POSBUTTON_MINWIDTH - 2) /
+ 2;
+
+ if (IsFloatBigger(fBWidth, 0)) {
+ rcMinButton = CPDF_Rect(rcClient.left, rcClient.top - fBWidth,
+ rcClient.right, rcClient.top);
+ rcMaxButton = CPDF_Rect(rcClient.left, rcClient.bottom,
+ rcClient.right, rcClient.bottom + fBWidth);
+ } else
+ SetVisible(FALSE);
+ }
+ break;
+ }
+
+ if (m_pMinButton)
+ m_pMinButton->Move(rcMinButton, TRUE, FALSE);
+ if (m_pMaxButton)
+ m_pMaxButton->Move(rcMaxButton, TRUE, FALSE);
+ MovePosButton(FALSE);
}
-CFX_ByteString CPWL_ScrollBar::GetClassName() const
-{
- return "CPWL_ScrollBar";
-}
+void CPWL_ScrollBar::GetThisAppearanceStream(CFX_ByteTextBuf& sAppStream) {
+ CPDF_Rect rectWnd = GetWindowRect();
-void CPWL_ScrollBar::OnCreate(PWL_CREATEPARAM & cp)
-{
- cp.eCursorType = FXCT_ARROW;
-}
-
-void CPWL_ScrollBar::RePosChildWnd()
-{
- CPDF_Rect rcClient = GetClientRect();
- CPDF_Rect rcMinButton,rcMaxButton;
- FX_FLOAT fBWidth = 0;
-
- switch (m_sbType)
- {
- case SBT_HSCROLL:
- if (rcClient.right - rcClient.left > PWL_SCROLLBAR_BUTTON_WIDTH * 2 + PWL_SCROLLBAR_POSBUTTON_MINWIDTH + 2)
- {
- rcMinButton = CPDF_Rect(rcClient.left,rcClient.bottom,
- rcClient.left + PWL_SCROLLBAR_BUTTON_WIDTH,rcClient.top);
- rcMaxButton = CPDF_Rect(rcClient.right - PWL_SCROLLBAR_BUTTON_WIDTH,rcClient.bottom,
- rcClient.right,rcClient.top);
- }
- else
- {
- fBWidth = (rcClient.right - rcClient.left - PWL_SCROLLBAR_POSBUTTON_MINWIDTH - 2) / 2;
-
- if (fBWidth > 0)
- {
- rcMinButton = CPDF_Rect(rcClient.left,rcClient.bottom,
- rcClient.left + fBWidth,rcClient.top);
- rcMaxButton = CPDF_Rect(rcClient.right - fBWidth,rcClient.bottom,
- rcClient.right,rcClient.top);
- }
- else SetVisible(FALSE);
- }
- break;
- case SBT_VSCROLL:
- if (IsFloatBigger(rcClient.top - rcClient.bottom, PWL_SCROLLBAR_BUTTON_WIDTH * 2 + PWL_SCROLLBAR_POSBUTTON_MINWIDTH + 2))
- {
- rcMinButton = CPDF_Rect(rcClient.left,rcClient.top - PWL_SCROLLBAR_BUTTON_WIDTH,
- rcClient.right,rcClient.top);
- rcMaxButton = CPDF_Rect(rcClient.left,rcClient.bottom,
- rcClient.right,rcClient.bottom + PWL_SCROLLBAR_BUTTON_WIDTH);
- }
- else
- {
- fBWidth = (rcClient.top - rcClient.bottom - PWL_SCROLLBAR_POSBUTTON_MINWIDTH - 2) / 2;
-
- if (IsFloatBigger(fBWidth, 0))
- {
- rcMinButton = CPDF_Rect(rcClient.left,rcClient.top - fBWidth,
- rcClient.right,rcClient.top);
- rcMaxButton = CPDF_Rect(rcClient.left,rcClient.bottom,
- rcClient.right,rcClient.bottom + fBWidth);
- }
- else SetVisible(FALSE);
- }
- break;
- }
-
- if (m_pMinButton)
- m_pMinButton->Move(rcMinButton, TRUE, FALSE);
- if (m_pMaxButton)
- m_pMaxButton->Move(rcMaxButton, TRUE, FALSE);
- MovePosButton(FALSE);
-}
+ if (IsVisible() && !rectWnd.IsEmpty()) {
+ CFX_ByteTextBuf sButton;
-void CPWL_ScrollBar::GetThisAppearanceStream(CFX_ByteTextBuf & sAppStream)
-{
- CPDF_Rect rectWnd = GetWindowRect();
+ sButton << "q\n";
+ sButton << "0 w\n"
+ << CPWL_Utils::GetColorAppStream(GetBackgroundColor(), TRUE);
+ sButton << rectWnd.left << " " << rectWnd.bottom << " "
+ << rectWnd.right - rectWnd.left << " "
+ << rectWnd.top - rectWnd.bottom << " re b Q\n";
- if (IsVisible() && !rectWnd.IsEmpty())
- {
- CFX_ByteTextBuf sButton;
+ sAppStream << sButton;
+ }
+}
- sButton << "q\n";
- sButton << "0 w\n" << CPWL_Utils::GetColorAppStream(GetBackgroundColor(),TRUE);
- sButton << rectWnd.left << " " << rectWnd.bottom << " "
- << rectWnd.right - rectWnd.left << " " << rectWnd.top - rectWnd.bottom << " re b Q\n";
+void CPWL_ScrollBar::DrawThisAppearance(CFX_RenderDevice* pDevice,
+ CPDF_Matrix* pUser2Device) {
+ CPDF_Rect rectWnd = GetWindowRect();
+
+ if (IsVisible() && !rectWnd.IsEmpty()) {
+ CPWL_Utils::DrawFillRect(pDevice, pUser2Device, rectWnd,
+ GetBackgroundColor(), GetTransparency());
+
+ CPWL_Utils::DrawStrokeLine(
+ pDevice, pUser2Device,
+ CPDF_Point(rectWnd.left + 2.0f, rectWnd.top - 2.0f),
+ CPDF_Point(rectWnd.left + 2.0f, rectWnd.bottom + 2.0f),
+ ArgbEncode(GetTransparency(), 100, 100, 100), 1.0f);
+
+ CPWL_Utils::DrawStrokeLine(
+ pDevice, pUser2Device,
+ CPDF_Point(rectWnd.right - 2.0f, rectWnd.top - 2.0f),
+ CPDF_Point(rectWnd.right - 2.0f, rectWnd.bottom + 2.0f),
+ ArgbEncode(GetTransparency(), 100, 100, 100), 1.0f);
+ }
+}
- sAppStream << sButton;
- }
+FX_BOOL CPWL_ScrollBar::OnLButtonDown(const CPDF_Point& point, FX_DWORD nFlag) {
+ CPWL_Wnd::OnLButtonDown(point, nFlag);
+
+ if (HasFlag(PWS_AUTOTRANSPARENT)) {
+ if (GetTransparency() != 255) {
+ SetTransparency(255);
+ InvalidateRect();
+ }
+ }
+
+ CPDF_Rect rcMinArea, rcMaxArea;
+
+ if (m_pPosButton && m_pPosButton->IsVisible()) {
+ CPDF_Rect rcClient = GetClientRect();
+ CPDF_Rect rcPosButton = m_pPosButton->GetWindowRect();
+
+ switch (m_sbType) {
+ case SBT_HSCROLL:
+ rcMinArea = CPDF_Rect(rcClient.left + PWL_SCROLLBAR_BUTTON_WIDTH,
+ rcClient.bottom, rcPosButton.left, rcClient.top);
+ rcMaxArea = CPDF_Rect(rcPosButton.right, rcClient.bottom,
+ rcClient.right - PWL_SCROLLBAR_BUTTON_WIDTH,
+ rcClient.top);
+
+ break;
+ case SBT_VSCROLL:
+ rcMinArea = CPDF_Rect(rcClient.left, rcPosButton.top, rcClient.right,
+ rcClient.top - PWL_SCROLLBAR_BUTTON_WIDTH);
+ rcMaxArea = CPDF_Rect(rcClient.left,
+ rcClient.bottom + PWL_SCROLLBAR_BUTTON_WIDTH,
+ rcClient.right, rcPosButton.bottom);
+ break;
+ }
+
+ rcMinArea.Normalize();
+ rcMaxArea.Normalize();
+
+ if (rcMinArea.Contains(point.x, point.y)) {
+ m_sData.SubBig();
+ MovePosButton(TRUE);
+ NotifyScrollWindow();
+ }
+
+ if (rcMaxArea.Contains(point.x, point.y)) {
+ m_sData.AddBig();
+ MovePosButton(TRUE);
+ NotifyScrollWindow();
+ }
+ }
+
+ return TRUE;
}
-void CPWL_ScrollBar::DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device)
-{
- CPDF_Rect rectWnd = GetWindowRect();
+FX_BOOL CPWL_ScrollBar::OnLButtonUp(const CPDF_Point& point, FX_DWORD nFlag) {
+ CPWL_Wnd::OnLButtonUp(point, nFlag);
- if (IsVisible() && !rectWnd.IsEmpty())
- {
- CPWL_Utils::DrawFillRect(pDevice, pUser2Device, rectWnd, GetBackgroundColor(), GetTransparency());
+ if (HasFlag(PWS_AUTOTRANSPARENT)) {
+ if (GetTransparency() != PWL_SCROLLBAR_TRANSPARANCY) {
+ SetTransparency(PWL_SCROLLBAR_TRANSPARANCY);
+ InvalidateRect();
+ }
+ }
- CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device,
- CPDF_Point(rectWnd.left+2.0f,rectWnd.top-2.0f), CPDF_Point(rectWnd.left+2.0f,rectWnd.bottom+2.0f),
- ArgbEncode(GetTransparency(), 100, 100, 100), 1.0f);
+ EndTimer();
+ m_bMouseDown = FALSE;
- CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device,
- CPDF_Point(rectWnd.right-2.0f,rectWnd.top-2.0f), CPDF_Point(rectWnd.right-2.0f,rectWnd.bottom+2.0f),
- ArgbEncode(GetTransparency(), 100, 100, 100),1.0f);
- }
+ return TRUE;
}
-FX_BOOL CPWL_ScrollBar::OnLButtonDown(const CPDF_Point & point, FX_DWORD nFlag)
-{
- CPWL_Wnd::OnLButtonDown(point,nFlag);
-
- if (HasFlag(PWS_AUTOTRANSPARENT))
- {
- if (GetTransparency() != 255)
- {
- SetTransparency(255);
- InvalidateRect();
- }
- }
-
- CPDF_Rect rcMinArea,rcMaxArea;
-
- if (m_pPosButton && m_pPosButton->IsVisible())
- {
- CPDF_Rect rcClient = GetClientRect();
- CPDF_Rect rcPosButton = m_pPosButton->GetWindowRect();
-
- switch (m_sbType)
- {
- case SBT_HSCROLL:
- rcMinArea = CPDF_Rect(rcClient.left + PWL_SCROLLBAR_BUTTON_WIDTH,rcClient.bottom,
- rcPosButton.left,rcClient.top);
- rcMaxArea = CPDF_Rect(rcPosButton.right,rcClient.bottom,
- rcClient.right - PWL_SCROLLBAR_BUTTON_WIDTH,rcClient.top);
-
- break;
- case SBT_VSCROLL:
- rcMinArea = CPDF_Rect(rcClient.left,rcPosButton.top,
- rcClient.right,rcClient.top - PWL_SCROLLBAR_BUTTON_WIDTH);
- rcMaxArea = CPDF_Rect(rcClient.left,rcClient.bottom + PWL_SCROLLBAR_BUTTON_WIDTH,
- rcClient.right,rcPosButton.bottom);
- break;
- }
-
- rcMinArea.Normalize();
- rcMaxArea.Normalize();
-
- if (rcMinArea.Contains(point.x,point.y))
- {
- m_sData.SubBig();
- MovePosButton(TRUE);
- NotifyScrollWindow();
- }
-
- if (rcMaxArea.Contains(point.x,point.y))
- {
- m_sData.AddBig();
- MovePosButton(TRUE);
- NotifyScrollWindow();
- }
- }
-
- return TRUE;
+void CPWL_ScrollBar::OnNotify(CPWL_Wnd* pWnd,
+ FX_DWORD msg,
+ intptr_t wParam,
+ intptr_t lParam) {
+ CPWL_Wnd::OnNotify(pWnd, msg, wParam, lParam);
+
+ switch (msg) {
+ case PNM_LBUTTONDOWN:
+ if (pWnd == m_pMinButton) {
+ OnMinButtonLBDown(*(CPDF_Point*)lParam);
+ }
+
+ if (pWnd == m_pMaxButton) {
+ OnMaxButtonLBDown(*(CPDF_Point*)lParam);
+ }
+
+ if (pWnd == m_pPosButton) {
+ OnPosButtonLBDown(*(CPDF_Point*)lParam);
+ }
+ break;
+ case PNM_LBUTTONUP:
+ if (pWnd == m_pMinButton) {
+ OnMinButtonLBUp(*(CPDF_Point*)lParam);
+ }
+
+ if (pWnd == m_pMaxButton) {
+ OnMaxButtonLBUp(*(CPDF_Point*)lParam);
+ }
+
+ if (pWnd == m_pPosButton) {
+ OnPosButtonLBUp(*(CPDF_Point*)lParam);
+ }
+ break;
+ case PNM_MOUSEMOVE:
+ if (pWnd == m_pMinButton) {
+ OnMinButtonMouseMove(*(CPDF_Point*)lParam);
+ }
+
+ if (pWnd == m_pMaxButton) {
+ OnMaxButtonMouseMove(*(CPDF_Point*)lParam);
+ }
+
+ if (pWnd == m_pPosButton) {
+ OnPosButtonMouseMove(*(CPDF_Point*)lParam);
+ }
+ break;
+ case PNM_SETSCROLLINFO: {
+ if (PWL_SCROLL_INFO* pInfo = (PWL_SCROLL_INFO*)lParam) {
+ if (FXSYS_memcmp(&m_OriginInfo, pInfo, sizeof(PWL_SCROLL_INFO)) != 0) {
+ m_OriginInfo = *pInfo;
+ FX_FLOAT fMax =
+ pInfo->fContentMax - pInfo->fContentMin - pInfo->fPlateWidth;
+ fMax = fMax > 0.0f ? fMax : 0.0f;
+ SetScrollRange(0, fMax, pInfo->fPlateWidth);
+ SetScrollStep(pInfo->fBigStep, pInfo->fSmallStep);
+ }
+ }
+ } break;
+ case PNM_SETSCROLLPOS: {
+ FX_FLOAT fPos = *(FX_FLOAT*)lParam;
+ switch (m_sbType) {
+ case SBT_HSCROLL:
+ fPos = fPos - m_OriginInfo.fContentMin;
+ break;
+ case SBT_VSCROLL:
+ fPos = m_OriginInfo.fContentMax - fPos;
+ break;
+ }
+ SetScrollPos(fPos);
+ } break;
+ }
}
-FX_BOOL CPWL_ScrollBar::OnLButtonUp(const CPDF_Point & point, FX_DWORD nFlag)
-{
- CPWL_Wnd::OnLButtonUp(point,nFlag);
-
- if (HasFlag(PWS_AUTOTRANSPARENT))
- {
- if (GetTransparency() != PWL_SCROLLBAR_TRANSPARANCY)
- {
- SetTransparency(PWL_SCROLLBAR_TRANSPARANCY);
- InvalidateRect();
- }
- }
+void CPWL_ScrollBar::CreateButtons(const PWL_CREATEPARAM& cp) {
+ PWL_CREATEPARAM scp = cp;
+ scp.pParentWnd = this;
+ scp.dwBorderWidth = 2;
+ scp.nBorderStyle = PBS_BEVELED;
+
+ scp.dwFlags =
+ PWS_VISIBLE | PWS_CHILD | PWS_BORDER | PWS_BACKGROUND | PWS_NOREFRESHCLIP;
+
+ if (!m_pMinButton) {
+ m_pMinButton = new CPWL_SBButton(m_sbType, PSBT_MIN);
+ m_pMinButton->Create(scp);
+ }
+
+ if (!m_pMaxButton) {
+ m_pMaxButton = new CPWL_SBButton(m_sbType, PSBT_MAX);
+ m_pMaxButton->Create(scp);
+ }
+
+ if (!m_pPosButton) {
+ m_pPosButton = new CPWL_SBButton(m_sbType, PSBT_POS);
+ m_pPosButton->SetVisible(FALSE);
+ m_pPosButton->Create(scp);
+ }
+}
- EndTimer();
- m_bMouseDown = FALSE;
+FX_FLOAT CPWL_ScrollBar::GetScrollBarWidth() const {
+ if (!IsVisible())
+ return 0;
- return TRUE;
+ return PWL_SCROLLBAR_WIDTH;
}
-void CPWL_ScrollBar::OnNotify(CPWL_Wnd* pWnd, FX_DWORD msg, intptr_t wParam, intptr_t lParam)
-{
- CPWL_Wnd::OnNotify(pWnd,msg,wParam,lParam);
-
- switch (msg)
- {
- case PNM_LBUTTONDOWN:
- if (pWnd == m_pMinButton)
- {
- OnMinButtonLBDown(*(CPDF_Point*)lParam);
- }
-
- if (pWnd == m_pMaxButton)
- {
- OnMaxButtonLBDown(*(CPDF_Point*)lParam);
- }
-
- if (pWnd == m_pPosButton)
- {
- OnPosButtonLBDown(*(CPDF_Point*)lParam);
- }
- break;
- case PNM_LBUTTONUP:
- if (pWnd == m_pMinButton)
- {
- OnMinButtonLBUp(*(CPDF_Point*)lParam);
- }
-
- if (pWnd == m_pMaxButton)
- {
- OnMaxButtonLBUp(*(CPDF_Point*)lParam);
- }
-
- if (pWnd == m_pPosButton)
- {
- OnPosButtonLBUp(*(CPDF_Point*)lParam);
- }
- break;
- case PNM_MOUSEMOVE:
- if (pWnd == m_pMinButton)
- {
- OnMinButtonMouseMove(*(CPDF_Point*)lParam);
- }
-
- if (pWnd == m_pMaxButton)
- {
- OnMaxButtonMouseMove(*(CPDF_Point*)lParam);
- }
-
- if (pWnd == m_pPosButton)
- {
- OnPosButtonMouseMove(*(CPDF_Point*)lParam);
- }
- break;
- case PNM_SETSCROLLINFO:
- {
- if (PWL_SCROLL_INFO * pInfo = (PWL_SCROLL_INFO*)lParam)
- {
- if (FXSYS_memcmp(&m_OriginInfo, pInfo, sizeof(PWL_SCROLL_INFO)) != 0)
- {
- m_OriginInfo = *pInfo;
- FX_FLOAT fMax = pInfo->fContentMax - pInfo->fContentMin - pInfo->fPlateWidth;
- fMax = fMax > 0.0f ? fMax : 0.0f;
- SetScrollRange(0, fMax, pInfo->fPlateWidth);
- SetScrollStep(pInfo->fBigStep, pInfo->fSmallStep);
- }
- }
- }
- break;
- case PNM_SETSCROLLPOS:
- {
- FX_FLOAT fPos = *(FX_FLOAT*)lParam;
- switch (m_sbType)
- {
- case SBT_HSCROLL:
- fPos = fPos - m_OriginInfo.fContentMin;
- break;
- case SBT_VSCROLL:
- fPos = m_OriginInfo.fContentMax - fPos;
- break;
- }
- SetScrollPos(fPos);
- }
- break;
- }
+void CPWL_ScrollBar::SetScrollRange(FX_FLOAT fMin,
+ FX_FLOAT fMax,
+ FX_FLOAT fClientWidth) {
+ if (m_pPosButton) {
+ m_sData.SetScrollRange(fMin, fMax);
+ m_sData.SetClientWidth(fClientWidth);
+
+ if (IsFloatSmaller(m_sData.ScrollRange.GetWidth(), 0.0f)) {
+ m_pPosButton->SetVisible(FALSE);
+ } else {
+ m_pPosButton->SetVisible(TRUE);
+ MovePosButton(TRUE);
+ }
+ }
}
-void CPWL_ScrollBar::CreateButtons(const PWL_CREATEPARAM & cp)
-{
- PWL_CREATEPARAM scp = cp;
- scp.pParentWnd = this;
- scp.dwBorderWidth = 2;
- scp.nBorderStyle = PBS_BEVELED;
-
- scp.dwFlags = PWS_VISIBLE | PWS_CHILD | PWS_BORDER | PWS_BACKGROUND | PWS_NOREFRESHCLIP;
-
- if (!m_pMinButton)
- {
- m_pMinButton = new CPWL_SBButton(m_sbType,PSBT_MIN);
- m_pMinButton->Create(scp);
- }
-
- if (!m_pMaxButton)
- {
- m_pMaxButton = new CPWL_SBButton(m_sbType,PSBT_MAX);
- m_pMaxButton->Create(scp);
- }
-
- if (!m_pPosButton)
- {
- m_pPosButton = new CPWL_SBButton(m_sbType,PSBT_POS);
- m_pPosButton->SetVisible(FALSE);
- m_pPosButton->Create(scp);
- }
-}
+void CPWL_ScrollBar::SetScrollPos(FX_FLOAT fPos) {
+ FX_FLOAT fOldPos = m_sData.fScrollPos;
-FX_FLOAT CPWL_ScrollBar::GetScrollBarWidth() const
-{
- if (!IsVisible()) return 0;
+ m_sData.SetPos(fPos);
- return PWL_SCROLLBAR_WIDTH;
+ if (!IsFloatEqual(m_sData.fScrollPos, fOldPos))
+ MovePosButton(TRUE);
}
-void CPWL_ScrollBar::SetScrollRange(FX_FLOAT fMin,FX_FLOAT fMax,FX_FLOAT fClientWidth)
-{
- if (m_pPosButton)
- {
- m_sData.SetScrollRange(fMin,fMax);
- m_sData.SetClientWidth(fClientWidth);
-
- if (IsFloatSmaller(m_sData.ScrollRange.GetWidth(), 0.0f))
- {
- m_pPosButton->SetVisible(FALSE);
- }
- else
- {
- m_pPosButton->SetVisible(TRUE);
- MovePosButton(TRUE);
- }
- }
+void CPWL_ScrollBar::SetScrollStep(FX_FLOAT fBigStep, FX_FLOAT fSmallStep) {
+ m_sData.SetBigStep(fBigStep);
+ m_sData.SetSmallStep(fSmallStep);
}
-void CPWL_ScrollBar::SetScrollPos(FX_FLOAT fPos)
-{
- FX_FLOAT fOldPos = m_sData.fScrollPos;
+void CPWL_ScrollBar::MovePosButton(FX_BOOL bRefresh) {
+ ASSERT(m_pPosButton != NULL);
+ ASSERT(m_pMinButton != NULL);
+ ASSERT(m_pMaxButton != NULL);
- m_sData.SetPos(fPos);
+ if (m_pPosButton->IsVisible()) {
+ CPDF_Rect rcClient;
+ CPDF_Rect rcPosArea, rcPosButton;
- if (!IsFloatEqual(m_sData.fScrollPos, fOldPos))
- MovePosButton(TRUE);
-}
+ rcClient = GetClientRect();
+ rcPosArea = GetScrollArea();
-void CPWL_ScrollBar::SetScrollStep(FX_FLOAT fBigStep,FX_FLOAT fSmallStep)
-{
- m_sData.SetBigStep(fBigStep);
- m_sData.SetSmallStep(fSmallStep);
-}
+ FX_FLOAT fLeft, fRight, fTop, fBottom;
-void CPWL_ScrollBar::MovePosButton(FX_BOOL bRefresh)
-{
- ASSERT (m_pPosButton != NULL);
- ASSERT (m_pMinButton != NULL);
- ASSERT (m_pMaxButton != NULL);
+ switch (m_sbType) {
+ case SBT_HSCROLL:
+ fLeft = TrueToFace(m_sData.fScrollPos);
+ fRight = TrueToFace(m_sData.fScrollPos + m_sData.fClientWidth);
- if (m_pPosButton->IsVisible())
- {
+ if (fRight - fLeft < PWL_SCROLLBAR_POSBUTTON_MINWIDTH)
+ fRight = fLeft + PWL_SCROLLBAR_POSBUTTON_MINWIDTH;
+ if (fRight > rcPosArea.right) {
+ fRight = rcPosArea.right;
+ fLeft = fRight - PWL_SCROLLBAR_POSBUTTON_MINWIDTH;
+ }
+ rcPosButton = CPDF_Rect(fLeft, rcPosArea.bottom, fRight, rcPosArea.top);
+ break;
+ case SBT_VSCROLL:
+ fBottom = TrueToFace(m_sData.fScrollPos + m_sData.fClientWidth);
+ fTop = TrueToFace(m_sData.fScrollPos);
- CPDF_Rect rcClient;
- CPDF_Rect rcPosArea,rcPosButton;
+ if (IsFloatSmaller(fTop - fBottom, PWL_SCROLLBAR_POSBUTTON_MINWIDTH))
+ fBottom = fTop - PWL_SCROLLBAR_POSBUTTON_MINWIDTH;
- rcClient = GetClientRect();
- rcPosArea = GetScrollArea();
+ if (IsFloatSmaller(fBottom, rcPosArea.bottom)) {
+ fBottom = rcPosArea.bottom;
+ fTop = fBottom + PWL_SCROLLBAR_POSBUTTON_MINWIDTH;
+ }
- FX_FLOAT fLeft,fRight,fTop,fBottom;
+ rcPosButton = CPDF_Rect(rcPosArea.left, fBottom, rcPosArea.right, fTop);
- switch (m_sbType)
- {
- case SBT_HSCROLL:
- fLeft = TrueToFace(m_sData.fScrollPos);
- fRight = TrueToFace(m_sData.fScrollPos + m_sData.fClientWidth);
+ break;
+ }
- if (fRight - fLeft < PWL_SCROLLBAR_POSBUTTON_MINWIDTH)
- fRight = fLeft + PWL_SCROLLBAR_POSBUTTON_MINWIDTH;
+ m_pPosButton->Move(rcPosButton, TRUE, bRefresh);
+ }
+}
- if (fRight > rcPosArea.right)
- {
- fRight = rcPosArea.right;
- fLeft = fRight - PWL_SCROLLBAR_POSBUTTON_MINWIDTH;
- }
+void CPWL_ScrollBar::OnMinButtonLBDown(const CPDF_Point& point) {
+ m_sData.SubSmall();
+ MovePosButton(TRUE);
+ NotifyScrollWindow();
- rcPosButton = CPDF_Rect(fLeft ,
- rcPosArea.bottom,
- fRight ,
- rcPosArea.top);
+ m_bMinOrMax = TRUE;
- break;
- case SBT_VSCROLL:
- fBottom = TrueToFace(m_sData.fScrollPos + m_sData.fClientWidth);
- fTop = TrueToFace(m_sData.fScrollPos);
+ EndTimer();
+ BeginTimer(100);
+}
- if (IsFloatSmaller(fTop - fBottom, PWL_SCROLLBAR_POSBUTTON_MINWIDTH))
- fBottom = fTop - PWL_SCROLLBAR_POSBUTTON_MINWIDTH;
+void CPWL_ScrollBar::OnMinButtonLBUp(const CPDF_Point& point) {}
- if (IsFloatSmaller(fBottom, rcPosArea.bottom))
- {
- fBottom = rcPosArea.bottom;
- fTop = fBottom + PWL_SCROLLBAR_POSBUTTON_MINWIDTH;
- }
+void CPWL_ScrollBar::OnMinButtonMouseMove(const CPDF_Point& point) {}
- rcPosButton = CPDF_Rect(rcPosArea.left,
- fBottom,
- rcPosArea.right,
- fTop);
+void CPWL_ScrollBar::OnMaxButtonLBDown(const CPDF_Point& point) {
+ m_sData.AddSmall();
+ MovePosButton(TRUE);
+ NotifyScrollWindow();
- break;
- }
+ m_bMinOrMax = FALSE;
- m_pPosButton->Move(rcPosButton,TRUE,bRefresh);
- }
+ EndTimer();
+ BeginTimer(100);
}
-void CPWL_ScrollBar::OnMinButtonLBDown(const CPDF_Point & point)
-{
- m_sData.SubSmall();
- MovePosButton(TRUE);
- NotifyScrollWindow();
+void CPWL_ScrollBar::OnMaxButtonLBUp(const CPDF_Point& point) {}
- m_bMinOrMax = TRUE;
+void CPWL_ScrollBar::OnMaxButtonMouseMove(const CPDF_Point& point) {}
- EndTimer();
- BeginTimer(100);
-}
+void CPWL_ScrollBar::OnPosButtonLBDown(const CPDF_Point& point) {
+ m_bMouseDown = TRUE;
+
+ if (m_pPosButton) {
+ CPDF_Rect rcPosButton = m_pPosButton->GetWindowRect();
-void CPWL_ScrollBar::OnMinButtonLBUp(const CPDF_Point & point)
-{
+ switch (m_sbType) {
+ case SBT_HSCROLL:
+ m_nOldPos = point.x;
+ m_fOldPosButton = rcPosButton.left;
+ break;
+ case SBT_VSCROLL:
+ m_nOldPos = point.y;
+ m_fOldPosButton = rcPosButton.top;
+ break;
+ }
+ }
}
-void CPWL_ScrollBar::OnMinButtonMouseMove(const CPDF_Point & point)
-{
+void CPWL_ScrollBar::OnPosButtonLBUp(const CPDF_Point& point) {
+ if (m_bMouseDown) {
+ if (!m_bNotifyForever)
+ NotifyScrollWindow();
+ }
+ m_bMouseDown = FALSE;
}
-void CPWL_ScrollBar::OnMaxButtonLBDown(const CPDF_Point & point)
-{
- m_sData.AddSmall();
- MovePosButton(TRUE);
- NotifyScrollWindow();
+void CPWL_ScrollBar::OnPosButtonMouseMove(const CPDF_Point& point) {
+ FX_FLOAT fOldScrollPos = m_sData.fScrollPos;
- m_bMinOrMax = FALSE;
+ FX_FLOAT fNewPos = 0;
- EndTimer();
- BeginTimer(100);
-}
+ switch (m_sbType) {
+ case SBT_HSCROLL:
+ if (FXSYS_fabs(point.x - m_nOldPos) < 1)
+ return;
+ fNewPos = FaceToTrue(m_fOldPosButton + point.x - m_nOldPos);
+ break;
+ case SBT_VSCROLL:
+ if (FXSYS_fabs(point.y - m_nOldPos) < 1)
+ return;
+ fNewPos = FaceToTrue(m_fOldPosButton + point.y - m_nOldPos);
+ break;
+ }
-void CPWL_ScrollBar::OnMaxButtonLBUp(const CPDF_Point & point)
-{
-}
+ if (m_bMouseDown) {
+ switch (m_sbType) {
+ case SBT_HSCROLL:
-void CPWL_ScrollBar::OnMaxButtonMouseMove(const CPDF_Point & point)
-{
-}
+ if (IsFloatSmaller(fNewPos, m_sData.ScrollRange.fMin)) {
+ fNewPos = m_sData.ScrollRange.fMin;
+ }
-void CPWL_ScrollBar::OnPosButtonLBDown(const CPDF_Point & point)
-{
- m_bMouseDown = TRUE;
-
- if (m_pPosButton)
- {
- CPDF_Rect rcPosButton = m_pPosButton->GetWindowRect();
-
- switch(m_sbType)
- {
- case SBT_HSCROLL:
- m_nOldPos = point.x;
- m_fOldPosButton = rcPosButton.left;
- break;
- case SBT_VSCROLL:
- m_nOldPos = point.y;
- m_fOldPosButton = rcPosButton.top;
- break;
- }
- }
-}
+ if (IsFloatBigger(fNewPos, m_sData.ScrollRange.fMax)) {
+ fNewPos = m_sData.ScrollRange.fMax;
+ }
-void CPWL_ScrollBar::OnPosButtonLBUp(const CPDF_Point & point)
-{
- if (m_bMouseDown)
- {
- if (!m_bNotifyForever)
- NotifyScrollWindow();
- }
- m_bMouseDown = FALSE;
-}
+ m_sData.SetPos(fNewPos);
+
+ break;
+ case SBT_VSCROLL:
+
+ if (IsFloatSmaller(fNewPos, m_sData.ScrollRange.fMin)) {
+ fNewPos = m_sData.ScrollRange.fMin;
+ }
+
+ if (IsFloatBigger(fNewPos, m_sData.ScrollRange.fMax)) {
+ fNewPos = m_sData.ScrollRange.fMax;
+ }
+
+ m_sData.SetPos(fNewPos);
+
+ break;
+ }
+
+ if (!IsFloatEqual(fOldScrollPos, m_sData.fScrollPos)) {
+ MovePosButton(TRUE);
-void CPWL_ScrollBar::OnPosButtonMouseMove(const CPDF_Point & point)
-{
- FX_FLOAT fOldScrollPos = m_sData.fScrollPos;
-
- FX_FLOAT fNewPos = 0;
-
- switch (m_sbType)
- {
- case SBT_HSCROLL:
- if (FXSYS_fabs(point.x - m_nOldPos) < 1) return;
- fNewPos = FaceToTrue(m_fOldPosButton + point.x - m_nOldPos);
- break;
- case SBT_VSCROLL:
- if (FXSYS_fabs(point.y - m_nOldPos) < 1) return;
- fNewPos = FaceToTrue(m_fOldPosButton + point.y - m_nOldPos);
- break;
- }
-
- if (m_bMouseDown)
- {
- switch (m_sbType)
- {
- case SBT_HSCROLL:
-
- if (IsFloatSmaller(fNewPos, m_sData.ScrollRange.fMin))
- {
- fNewPos = m_sData.ScrollRange.fMin;
- }
-
- if (IsFloatBigger(fNewPos, m_sData.ScrollRange.fMax))
- {
- fNewPos = m_sData.ScrollRange.fMax;
- }
-
- m_sData.SetPos(fNewPos);
-
- break;
- case SBT_VSCROLL:
-
- if (IsFloatSmaller(fNewPos, m_sData.ScrollRange.fMin))
- {
- fNewPos = m_sData.ScrollRange.fMin;
- }
-
- if (IsFloatBigger(fNewPos, m_sData.ScrollRange.fMax))
- {
- fNewPos = m_sData.ScrollRange.fMax;
- }
-
- m_sData.SetPos(fNewPos);
-
- break;
- }
-
- if (!IsFloatEqual(fOldScrollPos, m_sData.fScrollPos))
- {
- MovePosButton(TRUE);
-
- if (m_bNotifyForever)
- NotifyScrollWindow();
- }
- }
+ if (m_bNotifyForever)
+ NotifyScrollWindow();
+ }
+ }
}
-void CPWL_ScrollBar::NotifyScrollWindow()
-{
- if (CPWL_Wnd * pParent = GetParentWindow())
- {
- FX_FLOAT fPos;
- switch (m_sbType)
- {
- case SBT_HSCROLL:
- fPos = m_OriginInfo.fContentMin + m_sData.fScrollPos;
- break;
- case SBT_VSCROLL:
- fPos = m_OriginInfo.fContentMax - m_sData.fScrollPos;
- break;
- }
- pParent->OnNotify(this,PNM_SCROLLWINDOW,(intptr_t)m_sbType,(intptr_t)&fPos);
- }
+void CPWL_ScrollBar::NotifyScrollWindow() {
+ if (CPWL_Wnd* pParent = GetParentWindow()) {
+ FX_FLOAT fPos;
+ switch (m_sbType) {
+ case SBT_HSCROLL:
+ fPos = m_OriginInfo.fContentMin + m_sData.fScrollPos;
+ break;
+ case SBT_VSCROLL:
+ fPos = m_OriginInfo.fContentMax - m_sData.fScrollPos;
+ break;
+ }
+ pParent->OnNotify(this, PNM_SCROLLWINDOW, (intptr_t)m_sbType,
+ (intptr_t)&fPos);
+ }
}
-CPDF_Rect CPWL_ScrollBar::GetScrollArea() const
-{
- CPDF_Rect rcClient = GetClientRect();
- CPDF_Rect rcArea;
-
- if (!m_pMinButton || !m_pMaxButton)return rcClient;
-
- CPDF_Rect rcMin = m_pMinButton->GetWindowRect();
- CPDF_Rect rcMax = m_pMaxButton->GetWindowRect();
-
- FX_FLOAT fMinWidth = rcMin.right - rcMin.left;
- FX_FLOAT fMinHeight = rcMin.top - rcMin.bottom;
- FX_FLOAT fMaxWidth = rcMax.right - rcMax.left;
- FX_FLOAT fMaxHeight = rcMax.top - rcMax.bottom;
-
- switch(m_sbType)
- {
- case SBT_HSCROLL:
- if (rcClient.right - rcClient.left > fMinWidth + fMaxWidth + 2)
- {
- rcArea = CPDF_Rect(rcClient.left + fMinWidth + 1,rcClient.bottom,
- rcClient.right - fMaxWidth - 1,rcClient.top);
- }
- else
- {
- rcArea = CPDF_Rect(rcClient.left + fMinWidth + 1,rcClient.bottom,
- rcClient.left + fMinWidth + 1,rcClient.top);
- }
- break;
- case SBT_VSCROLL:
- if (rcClient.top - rcClient.bottom > fMinHeight + fMaxHeight + 2)
- {
- rcArea = CPDF_Rect(rcClient.left,rcClient.bottom + fMinHeight + 1,
- rcClient.right,rcClient.top - fMaxHeight - 1);
- }
- else
- {
- rcArea = CPDF_Rect(rcClient.left,rcClient.bottom + fMinHeight + 1,
- rcClient.right,rcClient.bottom + fMinHeight + 1);
- }
- break;
- }
-
- rcArea.Normalize();
-
- return rcArea;
+CPDF_Rect CPWL_ScrollBar::GetScrollArea() const {
+ CPDF_Rect rcClient = GetClientRect();
+ CPDF_Rect rcArea;
+
+ if (!m_pMinButton || !m_pMaxButton)
+ return rcClient;
+
+ CPDF_Rect rcMin = m_pMinButton->GetWindowRect();
+ CPDF_Rect rcMax = m_pMaxButton->GetWindowRect();
+
+ FX_FLOAT fMinWidth = rcMin.right - rcMin.left;
+ FX_FLOAT fMinHeight = rcMin.top - rcMin.bottom;
+ FX_FLOAT fMaxWidth = rcMax.right - rcMax.left;
+ FX_FLOAT fMaxHeight = rcMax.top - rcMax.bottom;
+
+ switch (m_sbType) {
+ case SBT_HSCROLL:
+ if (rcClient.right - rcClient.left > fMinWidth + fMaxWidth + 2) {
+ rcArea = CPDF_Rect(rcClient.left + fMinWidth + 1, rcClient.bottom,
+ rcClient.right - fMaxWidth - 1, rcClient.top);
+ } else {
+ rcArea = CPDF_Rect(rcClient.left + fMinWidth + 1, rcClient.bottom,
+ rcClient.left + fMinWidth + 1, rcClient.top);
+ }
+ break;
+ case SBT_VSCROLL:
+ if (rcClient.top - rcClient.bottom > fMinHeight + fMaxHeight + 2) {
+ rcArea = CPDF_Rect(rcClient.left, rcClient.bottom + fMinHeight + 1,
+ rcClient.right, rcClient.top - fMaxHeight - 1);
+ } else {
+ rcArea = CPDF_Rect(rcClient.left, rcClient.bottom + fMinHeight + 1,
+ rcClient.right, rcClient.bottom + fMinHeight + 1);
+ }
+ break;
+ }
+
+ rcArea.Normalize();
+
+ return rcArea;
}
-FX_FLOAT CPWL_ScrollBar::TrueToFace(FX_FLOAT fTrue)
-{
- CPDF_Rect rcPosArea;
- rcPosArea = GetScrollArea();
+FX_FLOAT CPWL_ScrollBar::TrueToFace(FX_FLOAT fTrue) {
+ CPDF_Rect rcPosArea;
+ rcPosArea = GetScrollArea();
- FX_FLOAT fFactWidth = m_sData.ScrollRange.GetWidth() + m_sData.fClientWidth;
- fFactWidth = fFactWidth == 0 ? 1 : fFactWidth;
+ FX_FLOAT fFactWidth = m_sData.ScrollRange.GetWidth() + m_sData.fClientWidth;
+ fFactWidth = fFactWidth == 0 ? 1 : fFactWidth;
- FX_FLOAT fFace = 0;
+ FX_FLOAT fFace = 0;
- switch(m_sbType)
- {
- case SBT_HSCROLL:
- fFace = rcPosArea.left + fTrue * (rcPosArea.right - rcPosArea.left) / fFactWidth;
- break;
- case SBT_VSCROLL:
- fFace = rcPosArea.top - fTrue * (rcPosArea.top - rcPosArea.bottom) / fFactWidth;
- break;
- }
+ switch (m_sbType) {
+ case SBT_HSCROLL:
+ fFace = rcPosArea.left +
+ fTrue * (rcPosArea.right - rcPosArea.left) / fFactWidth;
+ break;
+ case SBT_VSCROLL:
+ fFace = rcPosArea.top -
+ fTrue * (rcPosArea.top - rcPosArea.bottom) / fFactWidth;
+ break;
+ }
- return fFace;
+ return fFace;
}
-FX_FLOAT CPWL_ScrollBar::FaceToTrue(FX_FLOAT fFace)
-{
- CPDF_Rect rcPosArea;
- rcPosArea = GetScrollArea();
+FX_FLOAT CPWL_ScrollBar::FaceToTrue(FX_FLOAT fFace) {
+ CPDF_Rect rcPosArea;
+ rcPosArea = GetScrollArea();
- FX_FLOAT fFactWidth = m_sData.ScrollRange.GetWidth() + m_sData.fClientWidth;
- fFactWidth = fFactWidth == 0 ? 1 : fFactWidth;
+ FX_FLOAT fFactWidth = m_sData.ScrollRange.GetWidth() + m_sData.fClientWidth;
+ fFactWidth = fFactWidth == 0 ? 1 : fFactWidth;
- FX_FLOAT fTrue = 0;
+ FX_FLOAT fTrue = 0;
- switch(m_sbType)
- {
- case SBT_HSCROLL:
- fTrue = (fFace - rcPosArea.left) * fFactWidth / (rcPosArea.right - rcPosArea.left);
- break;
- case SBT_VSCROLL:
- fTrue = (rcPosArea.top - fFace) * fFactWidth / (rcPosArea.top - rcPosArea.bottom);
- break;
- }
+ switch (m_sbType) {
+ case SBT_HSCROLL:
+ fTrue = (fFace - rcPosArea.left) * fFactWidth /
+ (rcPosArea.right - rcPosArea.left);
+ break;
+ case SBT_VSCROLL:
+ fTrue = (rcPosArea.top - fFace) * fFactWidth /
+ (rcPosArea.top - rcPosArea.bottom);
+ break;
+ }
- return fTrue;
+ return fTrue;
}
-void CPWL_ScrollBar::CreateChildWnd(const PWL_CREATEPARAM & cp)
-{
- CreateButtons(cp);
+void CPWL_ScrollBar::CreateChildWnd(const PWL_CREATEPARAM& cp) {
+ CreateButtons(cp);
}
-void CPWL_ScrollBar::TimerProc()
-{
- PWL_SCROLL_PRIVATEDATA sTemp = m_sData;
+void CPWL_ScrollBar::TimerProc() {
+ PWL_SCROLL_PRIVATEDATA sTemp = m_sData;
- if (m_bMinOrMax)m_sData.SubSmall();
- else m_sData.AddSmall();
+ if (m_bMinOrMax)
+ m_sData.SubSmall();
+ else
+ m_sData.AddSmall();
- if (FXSYS_memcmp(&m_sData, &sTemp, sizeof(PWL_SCROLL_PRIVATEDATA)) != 0)
- {
- MovePosButton(TRUE);
- NotifyScrollWindow();
- }
+ if (FXSYS_memcmp(&m_sData, &sTemp, sizeof(PWL_SCROLL_PRIVATEDATA)) != 0) {
+ MovePosButton(TRUE);
+ NotifyScrollWindow();
+ }
}
diff --git a/fpdfsdk/src/pdfwindow/PWL_Signature.cpp b/fpdfsdk/src/pdfwindow/PWL_Signature.cpp
index 76b2bd333a..bfe32ae8ad 100644
--- a/fpdfsdk/src/pdfwindow/PWL_Signature.cpp
+++ b/fpdfsdk/src/pdfwindow/PWL_Signature.cpp
@@ -11,210 +11,194 @@
#include "../../include/pdfwindow/PWL_Label.h"
#include "../../include/pdfwindow/PWL_Utils.h"
-/* --------------------------------- CPWL_Signature_Image --------------------------------- */
+/* --------------------------------- CPWL_Signature_Image
+ * --------------------------------- */
-CPWL_Signature_Image::CPWL_Signature_Image() : m_pImage(NULL)
-{
-}
+CPWL_Signature_Image::CPWL_Signature_Image() : m_pImage(NULL) {}
-CPWL_Signature_Image::~CPWL_Signature_Image()
-{
-}
+CPWL_Signature_Image::~CPWL_Signature_Image() {}
-void CPWL_Signature_Image::SetImage(CFX_DIBSource* pImage)
-{
- m_pImage = pImage;
+void CPWL_Signature_Image::SetImage(CFX_DIBSource* pImage) {
+ m_pImage = pImage;
}
-CFX_DIBSource* CPWL_Signature_Image::GetImage()
-{
- return m_pImage;
+CFX_DIBSource* CPWL_Signature_Image::GetImage() {
+ return m_pImage;
}
-void CPWL_Signature_Image::DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device)
-{
- CPWL_Wnd::DrawThisAppearance(pDevice, pUser2Device);
+void CPWL_Signature_Image::DrawThisAppearance(CFX_RenderDevice* pDevice,
+ CPDF_Matrix* pUser2Device) {
+ CPWL_Wnd::DrawThisAppearance(pDevice, pUser2Device);
- if (m_pImage)
- {
- CPDF_Rect rcClient = GetClientRect();
+ if (m_pImage) {
+ CPDF_Rect rcClient = GetClientRect();
- FX_FLOAT x, y;
- pUser2Device->Transform(rcClient.left, rcClient.top, x, y);
+ FX_FLOAT x, y;
+ pUser2Device->Transform(rcClient.left, rcClient.top, x, y);
- pDevice->StretchDIBits(m_pImage, (int32_t)x, (int32_t)y,
- (int32_t)rcClient.Width(), (int32_t)rcClient.Height());
- }
+ pDevice->StretchDIBits(m_pImage, (int32_t)x, (int32_t)y,
+ (int32_t)rcClient.Width(),
+ (int32_t)rcClient.Height());
+ }
}
-void CPWL_Signature_Image::GetThisAppearanceStream(CFX_ByteTextBuf & sAppStream)
-{
- sAppStream << CPWL_Image::GetImageAppStream();
+void CPWL_Signature_Image::GetThisAppearanceStream(
+ CFX_ByteTextBuf& sAppStream) {
+ sAppStream << CPWL_Image::GetImageAppStream();
}
-void CPWL_Signature_Image::GetScale(FX_FLOAT & fHScale,FX_FLOAT & fVScale)
-{
- FX_FLOAT fImageW, fImageH;
+void CPWL_Signature_Image::GetScale(FX_FLOAT& fHScale, FX_FLOAT& fVScale) {
+ FX_FLOAT fImageW, fImageH;
- GetImageSize(fImageW, fImageH);
+ GetImageSize(fImageW, fImageH);
- CPDF_Rect rcClient = GetClientRect();
+ CPDF_Rect rcClient = GetClientRect();
- fHScale = rcClient.Width() / fImageW;
- fVScale = rcClient.Height() / fImageH;
+ fHScale = rcClient.Width() / fImageW;
+ fVScale = rcClient.Height() / fImageH;
}
-/* --------------------------------- CPWL_Signature --------------------------------- */
+/* --------------------------------- CPWL_Signature
+ * --------------------------------- */
-CPWL_Signature::CPWL_Signature() :
- m_pText(NULL),
- m_pDescription(NULL),
- m_pImage(NULL),
- m_bTextExist(TRUE),
- m_bImageExist(FALSE),
- m_bFlagExist(TRUE)
-{
-}
+CPWL_Signature::CPWL_Signature()
+ : m_pText(NULL),
+ m_pDescription(NULL),
+ m_pImage(NULL),
+ m_bTextExist(TRUE),
+ m_bImageExist(FALSE),
+ m_bFlagExist(TRUE) {}
-CPWL_Signature::~CPWL_Signature()
-{
-}
+CPWL_Signature::~CPWL_Signature() {}
-void CPWL_Signature::SetTextFlag(FX_BOOL bTextExist)
-{
- m_bTextExist = bTextExist;
+void CPWL_Signature::SetTextFlag(FX_BOOL bTextExist) {
+ m_bTextExist = bTextExist;
- RePosChildWnd();
+ RePosChildWnd();
}
-void CPWL_Signature::SetImageFlag(FX_BOOL bImageExist)
-{
- m_bImageExist = bImageExist;
+void CPWL_Signature::SetImageFlag(FX_BOOL bImageExist) {
+ m_bImageExist = bImageExist;
- RePosChildWnd();
+ RePosChildWnd();
}
-void CPWL_Signature::SetFoxitFlag(FX_BOOL bFlagExist)
-{
- m_bFlagExist = bFlagExist;
+void CPWL_Signature::SetFoxitFlag(FX_BOOL bFlagExist) {
+ m_bFlagExist = bFlagExist;
}
-void CPWL_Signature::SetText(const FX_WCHAR* sText)
-{
- m_pText->SetText(sText);
+void CPWL_Signature::SetText(const FX_WCHAR* sText) {
+ m_pText->SetText(sText);
- RePosChildWnd();
+ RePosChildWnd();
}
-void CPWL_Signature::SetDescription(const FX_WCHAR* string)
-{
- m_pDescription->SetText(string);
+void CPWL_Signature::SetDescription(const FX_WCHAR* string) {
+ m_pDescription->SetText(string);
- RePosChildWnd();
+ RePosChildWnd();
}
-void CPWL_Signature::SetImage(CFX_DIBSource* pImage)
-{
- m_pImage->SetImage(pImage);
+void CPWL_Signature::SetImage(CFX_DIBSource* pImage) {
+ m_pImage->SetImage(pImage);
- RePosChildWnd();
+ RePosChildWnd();
}
-void CPWL_Signature::SetImageStream(CPDF_Stream * pStream, const FX_CHAR* sImageAlias)
-{
- m_pImage->SetPDFStream(pStream);
- m_pImage->SetImageAlias(sImageAlias);
+void CPWL_Signature::SetImageStream(CPDF_Stream* pStream,
+ const FX_CHAR* sImageAlias) {
+ m_pImage->SetPDFStream(pStream);
+ m_pImage->SetImageAlias(sImageAlias);
- RePosChildWnd();
+ RePosChildWnd();
}
-void CPWL_Signature::RePosChildWnd()
-{
- CPDF_Rect rcClient = GetClientRect();
+void CPWL_Signature::RePosChildWnd() {
+ CPDF_Rect rcClient = GetClientRect();
- CPDF_Rect rcText = rcClient;
- CPDF_Rect rcDescription = rcClient;
+ CPDF_Rect rcText = rcClient;
+ CPDF_Rect rcDescription = rcClient;
- FX_BOOL bTextVisible = m_bTextExist && m_pText->GetText().GetLength() > 0;
+ FX_BOOL bTextVisible = m_bTextExist && m_pText->GetText().GetLength() > 0;
- if ((bTextVisible || m_bImageExist) &&
- m_pDescription->GetText().GetLength() > 0)
- {
- if (rcClient.Width() >= rcClient.Height())
- {
- rcText.right = rcText.left + rcClient.Width() / 2.0f;
- rcDescription.left = rcDescription.right - rcClient.Width() / 2.0f;
- }
- else
- {
- rcText.bottom = rcText.top - rcClient.Height() / 2.0f;
- rcDescription.top = rcDescription.bottom + rcClient.Height() / 2.0f;
- }
- }
+ if ((bTextVisible || m_bImageExist) &&
+ m_pDescription->GetText().GetLength() > 0) {
+ if (rcClient.Width() >= rcClient.Height()) {
+ rcText.right = rcText.left + rcClient.Width() / 2.0f;
+ rcDescription.left = rcDescription.right - rcClient.Width() / 2.0f;
+ } else {
+ rcText.bottom = rcText.top - rcClient.Height() / 2.0f;
+ rcDescription.top = rcDescription.bottom + rcClient.Height() / 2.0f;
+ }
+ }
- m_pText->SetVisible(bTextVisible);
- m_pImage->SetVisible(m_bImageExist);
+ m_pText->SetVisible(bTextVisible);
+ m_pImage->SetVisible(m_bImageExist);
- m_pText->Move(rcText, TRUE, FALSE);
- m_pImage->Move(rcText, TRUE, FALSE);
- m_pDescription->Move(rcDescription, TRUE, FALSE);
+ m_pText->Move(rcText, TRUE, FALSE);
+ m_pImage->Move(rcText, TRUE, FALSE);
+ m_pDescription->Move(rcDescription, TRUE, FALSE);
}
-void CPWL_Signature::CreateChildWnd(const PWL_CREATEPARAM & cp)
-{
- m_pImage = new CPWL_Signature_Image;
- PWL_CREATEPARAM icp = cp;
- icp.pParentWnd = this;
- icp.dwFlags = PWS_CHILD | PWS_VISIBLE;
- icp.sTextColor = CPWL_Color(COLORTYPE_GRAY, 0);
- m_pImage->Create(icp);
+void CPWL_Signature::CreateChildWnd(const PWL_CREATEPARAM& cp) {
+ m_pImage = new CPWL_Signature_Image;
+ PWL_CREATEPARAM icp = cp;
+ icp.pParentWnd = this;
+ icp.dwFlags = PWS_CHILD | PWS_VISIBLE;
+ icp.sTextColor = CPWL_Color(COLORTYPE_GRAY, 0);
+ m_pImage->Create(icp);
- m_pText = new CPWL_Label;
- PWL_CREATEPARAM acp = cp;
- acp.pParentWnd = this;
- acp.dwFlags = PWS_CHILD | PWS_VISIBLE | PWS_AUTOFONTSIZE | PES_MULTILINE | PES_AUTORETURN | PES_MIDDLE | PES_CENTER;
- acp.sTextColor = CPWL_Color(COLORTYPE_GRAY, 0);
- m_pText->Create(acp);
+ m_pText = new CPWL_Label;
+ PWL_CREATEPARAM acp = cp;
+ acp.pParentWnd = this;
+ acp.dwFlags = PWS_CHILD | PWS_VISIBLE | PWS_AUTOFONTSIZE | PES_MULTILINE |
+ PES_AUTORETURN | PES_MIDDLE | PES_CENTER;
+ acp.sTextColor = CPWL_Color(COLORTYPE_GRAY, 0);
+ m_pText->Create(acp);
- m_pDescription = new CPWL_Label;
- PWL_CREATEPARAM dcp = cp;
- dcp.pParentWnd = this;
- dcp.dwFlags = PWS_CHILD | PWS_VISIBLE | PWS_AUTOFONTSIZE | PES_MULTILINE | PES_AUTORETURN | PES_LEFT | PES_CENTER;
- dcp.sTextColor = CPWL_Color(COLORTYPE_GRAY, 0);
- m_pDescription->Create(dcp);
+ m_pDescription = new CPWL_Label;
+ PWL_CREATEPARAM dcp = cp;
+ dcp.pParentWnd = this;
+ dcp.dwFlags = PWS_CHILD | PWS_VISIBLE | PWS_AUTOFONTSIZE | PES_MULTILINE |
+ PES_AUTORETURN | PES_LEFT | PES_CENTER;
+ dcp.sTextColor = CPWL_Color(COLORTYPE_GRAY, 0);
+ m_pDescription->Create(dcp);
}
-void CPWL_Signature::DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device)
-{
- CPWL_Wnd::DrawThisAppearance(pDevice, pUser2Device);
+void CPWL_Signature::DrawThisAppearance(CFX_RenderDevice* pDevice,
+ CPDF_Matrix* pUser2Device) {
+ CPWL_Wnd::DrawThisAppearance(pDevice, pUser2Device);
- if (m_bFlagExist)
- CPWL_Utils::DrawIconAppStream(pDevice, pUser2Device, PWL_ICONTYPE_FOXIT, CPWL_Utils::GetCenterSquare(GetClientRect()),
- CPWL_Color(COLORTYPE_RGB,0.91f,0.855f,0.92f), CPWL_Color(COLORTYPE_TRANSPARENT), 255);
+ if (m_bFlagExist)
+ CPWL_Utils::DrawIconAppStream(
+ pDevice, pUser2Device, PWL_ICONTYPE_FOXIT,
+ CPWL_Utils::GetCenterSquare(GetClientRect()),
+ CPWL_Color(COLORTYPE_RGB, 0.91f, 0.855f, 0.92f),
+ CPWL_Color(COLORTYPE_TRANSPARENT), 255);
- /*
- CPDF_Rect rcClient = GetClientRect();
+ /*
+ CPDF_Rect rcClient = GetClientRect();
- CFX_PathData path;
+ CFX_PathData path;
- path.SetPointCount(2);
- path.SetPoint(0, rcClient.left, (rcClient.top + rcClient.bottom) * 0.5f, FXPT_MOVETO);
- path.SetPoint(1, rcClient.right, (rcClient.top + rcClient.bottom) * 0.5f, FXPT_LINETO);
+ path.SetPointCount(2);
+ path.SetPoint(0, rcClient.left, (rcClient.top + rcClient.bottom) * 0.5f,
+ FXPT_MOVETO);
+ path.SetPoint(1, rcClient.right, (rcClient.top + rcClient.bottom) * 0.5f,
+ FXPT_LINETO);
- CFX_GraphStateData gsd;
- gsd.SetDashCount(2);
- gsd.m_DashArray[0] = 6.0f;
- gsd.m_DashArray[1] = 6.0f;
- gsd.m_DashPhase = 0;
+ CFX_GraphStateData gsd;
+ gsd.SetDashCount(2);
+ gsd.m_DashArray[0] = 6.0f;
+ gsd.m_DashArray[1] = 6.0f;
+ gsd.m_DashPhase = 0;
- gsd.m_LineWidth = 10.0f;
- pDevice->DrawPath(&path, pUser2Device, &gsd, 0, ArgbEncode(255,255,0,0), FXFILL_ALTERNATE);
- */
+ gsd.m_LineWidth = 10.0f;
+ pDevice->DrawPath(&path, pUser2Device, &gsd, 0, ArgbEncode(255,255,0,0),
+ FXFILL_ALTERNATE);
+ */
}
-void CPWL_Signature::GetThisAppearanceStream(CFX_ByteTextBuf & sAppStream)
-{
- CPWL_Wnd::GetThisAppearanceStream(sAppStream);
+void CPWL_Signature::GetThisAppearanceStream(CFX_ByteTextBuf& sAppStream) {
+ CPWL_Wnd::GetThisAppearanceStream(sAppStream);
}
-
-
diff --git a/fpdfsdk/src/pdfwindow/PWL_SpecialButton.cpp b/fpdfsdk/src/pdfwindow/PWL_SpecialButton.cpp
index 90fa8f880d..7f125ad1d7 100644
--- a/fpdfsdk/src/pdfwindow/PWL_SpecialButton.cpp
+++ b/fpdfsdk/src/pdfwindow/PWL_SpecialButton.cpp
@@ -12,99 +12,76 @@
/* --------------------------- CPWL_PushButton ---------------------------- */
-CPWL_PushButton::CPWL_PushButton()
-{
-}
+CPWL_PushButton::CPWL_PushButton() {}
-CPWL_PushButton::~CPWL_PushButton()
-{
-}
+CPWL_PushButton::~CPWL_PushButton() {}
-CFX_ByteString CPWL_PushButton::GetClassName() const
-{
- return "CPWL_PushButton";
+CFX_ByteString CPWL_PushButton::GetClassName() const {
+ return "CPWL_PushButton";
}
-CPDF_Rect CPWL_PushButton::GetFocusRect() const
-{
- return CPWL_Utils::DeflateRect(GetWindowRect(), (FX_FLOAT)GetBorderWidth());
+CPDF_Rect CPWL_PushButton::GetFocusRect() const {
+ return CPWL_Utils::DeflateRect(GetWindowRect(), (FX_FLOAT)GetBorderWidth());
}
/* --------------------------- CPWL_CheckBox ---------------------------- */
-CPWL_CheckBox::CPWL_CheckBox() : m_bChecked(FALSE)
-{
-}
+CPWL_CheckBox::CPWL_CheckBox() : m_bChecked(FALSE) {}
-CPWL_CheckBox::~CPWL_CheckBox()
-{
-}
+CPWL_CheckBox::~CPWL_CheckBox() {}
-CFX_ByteString CPWL_CheckBox::GetClassName() const
-{
- return "CPWL_CheckBox";
+CFX_ByteString CPWL_CheckBox::GetClassName() const {
+ return "CPWL_CheckBox";
}
-void CPWL_CheckBox::SetCheck(FX_BOOL bCheck)
-{
- m_bChecked = bCheck;
+void CPWL_CheckBox::SetCheck(FX_BOOL bCheck) {
+ m_bChecked = bCheck;
}
-FX_BOOL CPWL_CheckBox::IsChecked() const
-{
- return m_bChecked;
+FX_BOOL CPWL_CheckBox::IsChecked() const {
+ return m_bChecked;
}
-FX_BOOL CPWL_CheckBox::OnLButtonUp(const CPDF_Point & point, FX_DWORD nFlag)
-{
- if (IsReadOnly()) return FALSE;
+FX_BOOL CPWL_CheckBox::OnLButtonUp(const CPDF_Point& point, FX_DWORD nFlag) {
+ if (IsReadOnly())
+ return FALSE;
- SetCheck(!IsChecked());
- return TRUE;
+ SetCheck(!IsChecked());
+ return TRUE;
}
-FX_BOOL CPWL_CheckBox::OnChar(FX_WORD nChar, FX_DWORD nFlag)
-{
- SetCheck(!IsChecked());
- return TRUE;
+FX_BOOL CPWL_CheckBox::OnChar(FX_WORD nChar, FX_DWORD nFlag) {
+ SetCheck(!IsChecked());
+ return TRUE;
}
/* --------------------------- CPWL_RadioButton ---------------------------- */
-CPWL_RadioButton::CPWL_RadioButton() : m_bChecked(FALSE)
-{
-}
+CPWL_RadioButton::CPWL_RadioButton() : m_bChecked(FALSE) {}
-CPWL_RadioButton::~CPWL_RadioButton()
-{
-}
+CPWL_RadioButton::~CPWL_RadioButton() {}
-CFX_ByteString CPWL_RadioButton::GetClassName() const
-{
- return "CPWL_RadioButton";
+CFX_ByteString CPWL_RadioButton::GetClassName() const {
+ return "CPWL_RadioButton";
}
-FX_BOOL CPWL_RadioButton::OnLButtonUp(const CPDF_Point & point, FX_DWORD nFlag)
-{
- if (IsReadOnly()) return FALSE;
+FX_BOOL CPWL_RadioButton::OnLButtonUp(const CPDF_Point& point, FX_DWORD nFlag) {
+ if (IsReadOnly())
+ return FALSE;
- SetCheck(TRUE);
- return TRUE;
+ SetCheck(TRUE);
+ return TRUE;
}
-void CPWL_RadioButton::SetCheck(FX_BOOL bCheck)
-{
- m_bChecked = bCheck;
+void CPWL_RadioButton::SetCheck(FX_BOOL bCheck) {
+ m_bChecked = bCheck;
}
-FX_BOOL CPWL_RadioButton::IsChecked() const
-{
- return m_bChecked;
+FX_BOOL CPWL_RadioButton::IsChecked() const {
+ return m_bChecked;
}
-FX_BOOL CPWL_RadioButton::OnChar(FX_WORD nChar, FX_DWORD nFlag)
-{
- SetCheck(TRUE);
- return TRUE;
+FX_BOOL CPWL_RadioButton::OnChar(FX_WORD nChar, FX_DWORD nFlag) {
+ SetCheck(TRUE);
+ return TRUE;
}
-
diff --git a/fpdfsdk/src/pdfwindow/PWL_Utils.cpp b/fpdfsdk/src/pdfwindow/PWL_Utils.cpp
index b9ba7661af..52b22b548a 100644
--- a/fpdfsdk/src/pdfwindow/PWL_Utils.cpp
+++ b/fpdfsdk/src/pdfwindow/PWL_Utils.cpp
@@ -9,2819 +9,3705 @@
#include "../../include/pdfwindow/PWL_Utils.h"
#include "../../include/pdfwindow/PWL_Icon.h"
-#define IsFloatZero(f) ((f) < 0.0001 && (f) > -0.0001)
-#define IsFloatBigger(fa,fb) ((fa) > (fb) && !IsFloatZero((fa) - (fb)))
-#define IsFloatSmaller(fa,fb) ((fa) < (fb) && !IsFloatZero((fa) - (fb)))
-#define IsFloatEqual(fa,fb) IsFloatZero((fa)-(fb))
+#define IsFloatZero(f) ((f) < 0.0001 && (f) > -0.0001)
+#define IsFloatBigger(fa, fb) ((fa) > (fb) && !IsFloatZero((fa) - (fb)))
+#define IsFloatSmaller(fa, fb) ((fa) < (fb) && !IsFloatZero((fa) - (fb)))
+#define IsFloatEqual(fa, fb) IsFloatZero((fa) - (fb))
/* ---------------------------- CPWL_Utils ------------------------------ */
-CFX_ByteString CPWL_Utils::GetAppStreamFromArray(const CPWL_PathData* pPathData, int32_t nCount)
-{
- CFX_ByteTextBuf csAP;
-
- for (int32_t i=0; i<nCount; i++)
- {
- switch (pPathData[i].type)
- {
- case PWLPT_MOVETO:
- csAP << pPathData[i].point.x << " " << pPathData[i].point.y << " m\n";
- break;
- case PWLPT_LINETO:
- csAP << pPathData[i].point.x << " " << pPathData[i].point.y << " l\n";
- break;
- case PWLPT_BEZIERTO:
- csAP << pPathData[i].point.x << " " << pPathData[i].point.y << " "
- << pPathData[i+1].point.x << " " << pPathData[i+1].point.y << " "
- << pPathData[i+2].point.x << " " << pPathData[i+2].point.y << " c\n";
-
- i += 2;
- break;
- default:
- break;
- }
- }
-
- return csAP.GetByteString();
-}
+CFX_ByteString CPWL_Utils::GetAppStreamFromArray(const CPWL_PathData* pPathData,
+ int32_t nCount) {
+ CFX_ByteTextBuf csAP;
+
+ for (int32_t i = 0; i < nCount; i++) {
+ switch (pPathData[i].type) {
+ case PWLPT_MOVETO:
+ csAP << pPathData[i].point.x << " " << pPathData[i].point.y << " m\n";
+ break;
+ case PWLPT_LINETO:
+ csAP << pPathData[i].point.x << " " << pPathData[i].point.y << " l\n";
+ break;
+ case PWLPT_BEZIERTO:
+ csAP << pPathData[i].point.x << " " << pPathData[i].point.y << " "
+ << pPathData[i + 1].point.x << " " << pPathData[i + 1].point.y
+ << " " << pPathData[i + 2].point.x << " "
+ << pPathData[i + 2].point.y << " c\n";
+
+ i += 2;
+ break;
+ default:
+ break;
+ }
+ }
+
+ return csAP.GetByteString();
+}
+
+void CPWL_Utils::GetPathDataFromArray(CFX_PathData& path,
+ const CPWL_PathData* pPathData,
+ int32_t nCount) {
+ path.SetPointCount(nCount);
+
+ for (int32_t i = 0; i < nCount; i++) {
+ switch (pPathData[i].type) {
+ case PWLPT_MOVETO:
+ path.SetPoint(i, pPathData[i].point.x, pPathData[i].point.y,
+ FXPT_MOVETO);
+ break;
+ case PWLPT_LINETO:
+ path.SetPoint(i, pPathData[i].point.x, pPathData[i].point.y,
+ FXPT_LINETO);
+ break;
+ case PWLPT_BEZIERTO:
+ path.SetPoint(i, pPathData[i].point.x, pPathData[i].point.y,
+ FXPT_BEZIERTO);
+ break;
+ default:
+ break;
+ }
+ }
+}
+
+CPDF_Rect CPWL_Utils::MaxRect(const CPDF_Rect& rect1, const CPDF_Rect& rect2) {
+ CPDF_Rect rcRet;
+
+ rcRet.left = PWL_MIN(rect1.left, rect2.left);
+ rcRet.bottom = PWL_MIN(rect1.bottom, rect2.bottom);
+ rcRet.right = PWL_MAX(rect1.right, rect2.right);
+ rcRet.top = PWL_MAX(rect1.top, rect2.top);
+
+ return rcRet;
+}
+
+CPDF_Rect CPWL_Utils::OffsetRect(const CPDF_Rect& rect,
+ FX_FLOAT x,
+ FX_FLOAT y) {
+ return CPDF_Rect(rect.left + x, rect.bottom + y, rect.right + x,
+ rect.top + y);
+}
+
+FX_BOOL CPWL_Utils::ContainsRect(const CPDF_Rect& rcParent,
+ const CPDF_Rect& rcChild) {
+ return rcChild.left >= rcParent.left && rcChild.bottom >= rcParent.bottom &&
+ rcChild.right <= rcParent.right && rcChild.top <= rcParent.top;
+}
+
+FX_BOOL CPWL_Utils::IntersectRect(const CPDF_Rect& rect1,
+ const CPDF_Rect& rect2) {
+ FX_FLOAT left = rect1.left > rect2.left ? rect1.left : rect2.left;
+ FX_FLOAT right = rect1.right < rect2.right ? rect1.right : rect2.right;
+ FX_FLOAT bottom = rect1.bottom > rect2.bottom ? rect1.bottom : rect2.bottom;
+ FX_FLOAT top = rect1.top < rect2.top ? rect1.top : rect2.top;
+
+ return left < right && bottom < top;
+}
+
+CPDF_Point CPWL_Utils::OffsetPoint(const CPDF_Point& point,
+ FX_FLOAT x,
+ FX_FLOAT y) {
+ return CPDF_Point(point.x + x, point.y + y);
+}
+
+CPVT_WordRange CPWL_Utils::OverlapWordRange(const CPVT_WordRange& wr1,
+ const CPVT_WordRange& wr2) {
+ CPVT_WordRange wrRet;
+
+ if (wr2.EndPos.WordCmp(wr1.BeginPos) < 0 ||
+ wr2.BeginPos.WordCmp(wr1.EndPos) > 0)
+ return wrRet;
+ if (wr1.EndPos.WordCmp(wr2.BeginPos) < 0 ||
+ wr1.BeginPos.WordCmp(wr2.EndPos) > 0)
+ return wrRet;
-void CPWL_Utils::GetPathDataFromArray(CFX_PathData& path, const CPWL_PathData* pPathData, int32_t nCount)
-{
- path.SetPointCount(nCount);
-
- for (int32_t i=0; i<nCount; i++)
- {
- switch (pPathData[i].type)
- {
- case PWLPT_MOVETO:
- path.SetPoint(i, pPathData[i].point.x, pPathData[i].point.y, FXPT_MOVETO);
- break;
- case PWLPT_LINETO:
- path.SetPoint(i, pPathData[i].point.x, pPathData[i].point.y, FXPT_LINETO);
- break;
- case PWLPT_BEZIERTO:
- path.SetPoint(i, pPathData[i].point.x, pPathData[i].point.y, FXPT_BEZIERTO);
- break;
- default:
- break;
- }
- }
-}
-
-
-CPDF_Rect CPWL_Utils::MaxRect(const CPDF_Rect & rect1,const CPDF_Rect & rect2)
-{
- CPDF_Rect rcRet;
-
- rcRet.left = PWL_MIN(rect1.left,rect2.left);
- rcRet.bottom = PWL_MIN(rect1.bottom,rect2.bottom);
- rcRet.right = PWL_MAX(rect1.right,rect2.right);
- rcRet.top = PWL_MAX(rect1.top,rect2.top);
-
- return rcRet;
-}
-
-CPDF_Rect CPWL_Utils::OffsetRect(const CPDF_Rect & rect,FX_FLOAT x,FX_FLOAT y)
-{
- return CPDF_Rect(rect.left + x,rect.bottom + y,
- rect.right + x,rect.top + y);
-}
-
-FX_BOOL CPWL_Utils::ContainsRect(const CPDF_Rect& rcParent, const CPDF_Rect& rcChild)
-{
- return rcChild.left >= rcParent.left && rcChild.bottom >= rcParent.bottom &&
- rcChild.right <= rcParent.right && rcChild.top <= rcParent.top;
-}
-
-FX_BOOL CPWL_Utils::IntersectRect(const CPDF_Rect& rect1, const CPDF_Rect& rect2)
-{
- FX_FLOAT left = rect1.left > rect2.left ? rect1.left : rect2.left;
- FX_FLOAT right = rect1.right < rect2.right ? rect1.right : rect2.right;
- FX_FLOAT bottom = rect1.bottom > rect2.bottom ? rect1.bottom : rect2.bottom;
- FX_FLOAT top = rect1.top < rect2.top ? rect1.top : rect2.top;
-
- return left < right && bottom < top;
-}
-
-CPDF_Point CPWL_Utils::OffsetPoint(const CPDF_Point& point,FX_FLOAT x,FX_FLOAT y)
-{
- return CPDF_Point(point.x + x,point.y + y);
-}
-
-CPVT_WordRange CPWL_Utils::OverlapWordRange(const CPVT_WordRange & wr1, const CPVT_WordRange & wr2)
-{
- CPVT_WordRange wrRet;
-
- if (wr2.EndPos.WordCmp(wr1.BeginPos) < 0 || wr2.BeginPos.WordCmp(wr1.EndPos) > 0) return wrRet;
- if (wr1.EndPos.WordCmp(wr2.BeginPos) < 0 || wr1.BeginPos.WordCmp(wr2.EndPos) > 0) return wrRet;
-
- if (wr1.BeginPos.WordCmp(wr2.BeginPos) < 0)
- {
- wrRet.BeginPos = wr2.BeginPos;
- }
- else
- {
- wrRet.BeginPos = wr1.BeginPos;
- }
-
- if (wr1.EndPos.WordCmp(wr2.EndPos) < 0)
- {
- wrRet.EndPos = wr1.EndPos;
- }
- else
- {
- wrRet.EndPos = wr2.EndPos;
- }
+ if (wr1.BeginPos.WordCmp(wr2.BeginPos) < 0) {
+ wrRet.BeginPos = wr2.BeginPos;
+ } else {
+ wrRet.BeginPos = wr1.BeginPos;
+ }
- return wrRet;
+ if (wr1.EndPos.WordCmp(wr2.EndPos) < 0) {
+ wrRet.EndPos = wr1.EndPos;
+ } else {
+ wrRet.EndPos = wr2.EndPos;
+ }
+
+ return wrRet;
}
-CFX_ByteString CPWL_Utils::GetAP_Check(const CPDF_Rect & crBBox)
-{
- CFX_ByteTextBuf csAP;
+CFX_ByteString CPWL_Utils::GetAP_Check(const CPDF_Rect& crBBox) {
+ CFX_ByteTextBuf csAP;
- FX_FLOAT fWidth = crBBox.right - crBBox.left;
- FX_FLOAT fHeight = crBBox.top - crBBox.bottom;
+ FX_FLOAT fWidth = crBBox.right - crBBox.left;
+ FX_FLOAT fHeight = crBBox.top - crBBox.bottom;
- const int32_t num = 8;
+ const int32_t num = 8;
- CPWL_Point pts[num*3] =
- {
- //1
- CPWL_Point(0.28f, 0.52f),
- CPWL_Point(0.27f, 0.48f),
- CPWL_Point(0.29f, 0.40f),
+ CPWL_Point pts[num * 3] = {// 1
+ CPWL_Point(0.28f, 0.52f), CPWL_Point(0.27f, 0.48f),
+ CPWL_Point(0.29f, 0.40f),
- //2
- CPWL_Point(0.30f, 0.33f),
- CPWL_Point(0.31f, 0.29f),
- CPWL_Point(0.31f, 0.28f),
+ // 2
+ CPWL_Point(0.30f, 0.33f), CPWL_Point(0.31f, 0.29f),
+ CPWL_Point(0.31f, 0.28f),
- //3
- CPWL_Point(0.39f, 0.28f),
- CPWL_Point(0.49f, 0.29f),
- CPWL_Point(0.77f, 0.67f),
+ // 3
+ CPWL_Point(0.39f, 0.28f), CPWL_Point(0.49f, 0.29f),
+ CPWL_Point(0.77f, 0.67f),
- //4
- CPWL_Point(0.76f, 0.68f),
- CPWL_Point(0.78f, 0.69f),
- CPWL_Point(0.76f, 0.75f),
+ // 4
+ CPWL_Point(0.76f, 0.68f), CPWL_Point(0.78f, 0.69f),
+ CPWL_Point(0.76f, 0.75f),
- //5
- CPWL_Point(0.76f, 0.75f),
- CPWL_Point(0.73f, 0.80f),
- CPWL_Point(0.68f, 0.75f),
+ // 5
+ CPWL_Point(0.76f, 0.75f), CPWL_Point(0.73f, 0.80f),
+ CPWL_Point(0.68f, 0.75f),
- //6
- CPWL_Point(0.68f, 0.74f),
- CPWL_Point(0.68f, 0.74f),
- CPWL_Point(0.44f, 0.47f),
+ // 6
+ CPWL_Point(0.68f, 0.74f), CPWL_Point(0.68f, 0.74f),
+ CPWL_Point(0.44f, 0.47f),
- //7
- CPWL_Point(0.43f, 0.47f),
- CPWL_Point(0.40f, 0.47f),
- CPWL_Point(0.41f, 0.58f),
+ // 7
+ CPWL_Point(0.43f, 0.47f), CPWL_Point(0.40f, 0.47f),
+ CPWL_Point(0.41f, 0.58f),
- //8
- CPWL_Point(0.40f, 0.60f),
- CPWL_Point(0.28f, 0.66f),
- CPWL_Point(0.30f, 0.56f)
- };
+ // 8
+ CPWL_Point(0.40f, 0.60f), CPWL_Point(0.28f, 0.66f),
+ CPWL_Point(0.30f, 0.56f)};
- for (int32_t j=0; j<num*3; j++)
- {
- pts[j].x *= fWidth;
- pts[j].x += crBBox.left;
+ for (int32_t j = 0; j < num * 3; j++) {
+ pts[j].x *= fWidth;
+ pts[j].x += crBBox.left;
- pts[j].y *= fHeight;
- pts[j].y += crBBox.bottom;
- }
+ pts[j].y *= fHeight;
+ pts[j].y += crBBox.bottom;
+ }
- csAP << pts[0].x << " " << pts[0].y << " m\n";
+ csAP << pts[0].x << " " << pts[0].y << " m\n";
- for (int32_t i=0; i<num; i++)
- {
- int32_t nCur = i*3;
- int32_t n1 = i*3 + 1;
- int32_t n2 = i*3 + 2;
- int32_t nNext = (i < num-1 ? (i+1)*3 : 0);
+ for (int32_t i = 0; i < num; i++) {
+ int32_t nCur = i * 3;
+ int32_t n1 = i * 3 + 1;
+ int32_t n2 = i * 3 + 2;
+ int32_t nNext = (i < num - 1 ? (i + 1) * 3 : 0);
- FX_FLOAT px1 = pts[n1].x - pts[nCur].x;
- FX_FLOAT py1 = pts[n1].y - pts[nCur].y;
- FX_FLOAT px2 = pts[n2].x - pts[nNext].x;
- FX_FLOAT py2 = pts[n2].y - pts[nNext].y;
+ FX_FLOAT px1 = pts[n1].x - pts[nCur].x;
+ FX_FLOAT py1 = pts[n1].y - pts[nCur].y;
+ FX_FLOAT px2 = pts[n2].x - pts[nNext].x;
+ FX_FLOAT py2 = pts[n2].y - pts[nNext].y;
- csAP << pts[nCur].x + px1 * PWL_BEZIER << " " << pts[nCur].y + py1 * PWL_BEZIER << " "
- << pts[nNext].x + px2 * PWL_BEZIER << " " << pts[nNext].y + py2 * PWL_BEZIER << " "
- << pts[nNext].x << " " << pts[nNext].y << " c\n";
- }
+ csAP << pts[nCur].x + px1 * PWL_BEZIER << " "
+ << pts[nCur].y + py1 * PWL_BEZIER << " "
+ << pts[nNext].x + px2 * PWL_BEZIER << " "
+ << pts[nNext].y + py2 * PWL_BEZIER << " " << pts[nNext].x << " "
+ << pts[nNext].y << " c\n";
+ }
- return csAP.GetByteString();
+ return csAP.GetByteString();
}
-CFX_ByteString CPWL_Utils::GetAP_Circle(const CPDF_Rect & crBBox)
-{
- CFX_ByteTextBuf csAP;
+CFX_ByteString CPWL_Utils::GetAP_Circle(const CPDF_Rect& crBBox) {
+ CFX_ByteTextBuf csAP;
- FX_FLOAT fWidth = crBBox.right - crBBox.left;
- FX_FLOAT fHeight = crBBox.top - crBBox.bottom;
+ FX_FLOAT fWidth = crBBox.right - crBBox.left;
+ FX_FLOAT fHeight = crBBox.top - crBBox.bottom;
- CPDF_Point pt1(crBBox.left,crBBox.bottom + fHeight / 2);
- CPDF_Point pt2(crBBox.left + fWidth / 2,crBBox.top);
- CPDF_Point pt3(crBBox.right,crBBox.bottom + fHeight / 2);
- CPDF_Point pt4(crBBox.left + fWidth / 2,crBBox.bottom);
+ CPDF_Point pt1(crBBox.left, crBBox.bottom + fHeight / 2);
+ CPDF_Point pt2(crBBox.left + fWidth / 2, crBBox.top);
+ CPDF_Point pt3(crBBox.right, crBBox.bottom + fHeight / 2);
+ CPDF_Point pt4(crBBox.left + fWidth / 2, crBBox.bottom);
- csAP << pt1.x << " " << pt1.y << " m\n";
+ csAP << pt1.x << " " << pt1.y << " m\n";
- FX_FLOAT px = pt2.x - pt1.x;
- FX_FLOAT py = pt2.y - pt1.y;
+ FX_FLOAT px = pt2.x - pt1.x;
+ FX_FLOAT py = pt2.y - pt1.y;
- csAP << pt1.x << " " << pt1.y + py * PWL_BEZIER << " "
- << pt2.x - px * PWL_BEZIER << " " << pt2.y << " "
- << pt2.x << " " << pt2.y << " c\n";
+ csAP << pt1.x << " " << pt1.y + py * PWL_BEZIER << " "
+ << pt2.x - px * PWL_BEZIER << " " << pt2.y << " " << pt2.x << " "
+ << pt2.y << " c\n";
- px = pt3.x - pt2.x;
- py = pt2.y - pt3.y;
+ px = pt3.x - pt2.x;
+ py = pt2.y - pt3.y;
- csAP << pt2.x + px * PWL_BEZIER << " " << pt2.y << " "
- << pt3.x << " " << pt3.y + py * PWL_BEZIER << " "
- << pt3.x << " " << pt3.y << " c\n";
+ csAP << pt2.x + px * PWL_BEZIER << " " << pt2.y << " " << pt3.x << " "
+ << pt3.y + py * PWL_BEZIER << " " << pt3.x << " " << pt3.y << " c\n";
- px = pt3.x - pt4.x;
- py = pt3.y - pt4.y;
+ px = pt3.x - pt4.x;
+ py = pt3.y - pt4.y;
- csAP << pt3.x << " " << pt3.y - py * PWL_BEZIER << " "
- << pt4.x + px * PWL_BEZIER << " " << pt4.y << " "
- << pt4.x << " " << pt4.y << " c\n";
+ csAP << pt3.x << " " << pt3.y - py * PWL_BEZIER << " "
+ << pt4.x + px * PWL_BEZIER << " " << pt4.y << " " << pt4.x << " "
+ << pt4.y << " c\n";
- px = pt4.x - pt1.x;
- py = pt1.y - pt4.y;
+ px = pt4.x - pt1.x;
+ py = pt1.y - pt4.y;
- csAP << pt4.x - px * PWL_BEZIER << " " << pt4.y << " "
- << pt1.x << " " << pt1.y - py * PWL_BEZIER << " "
- << pt1.x << " " << pt1.y << " c\n";
+ csAP << pt4.x - px * PWL_BEZIER << " " << pt4.y << " " << pt1.x << " "
+ << pt1.y - py * PWL_BEZIER << " " << pt1.x << " " << pt1.y << " c\n";
- return csAP.GetByteString();
+ return csAP.GetByteString();
}
-CFX_ByteString CPWL_Utils::GetAP_Cross(const CPDF_Rect & crBBox)
-{
- CFX_ByteTextBuf csAP;
+CFX_ByteString CPWL_Utils::GetAP_Cross(const CPDF_Rect& crBBox) {
+ CFX_ByteTextBuf csAP;
- csAP << crBBox.left << " " << crBBox.top << " m\n";
- csAP << crBBox.right << " " << crBBox.bottom << " l\n";
- csAP << crBBox.left << " " << crBBox.bottom << " m\n";
- csAP << crBBox.right << " " << crBBox.top << " l\n";
+ csAP << crBBox.left << " " << crBBox.top << " m\n";
+ csAP << crBBox.right << " " << crBBox.bottom << " l\n";
+ csAP << crBBox.left << " " << crBBox.bottom << " m\n";
+ csAP << crBBox.right << " " << crBBox.top << " l\n";
- return csAP.GetByteString();
+ return csAP.GetByteString();
}
-CFX_ByteString CPWL_Utils::GetAP_Diamond(const CPDF_Rect & crBBox)
-{
- CFX_ByteTextBuf csAP;
+CFX_ByteString CPWL_Utils::GetAP_Diamond(const CPDF_Rect& crBBox) {
+ CFX_ByteTextBuf csAP;
- FX_FLOAT fWidth = crBBox.right - crBBox.left;
- FX_FLOAT fHeight = crBBox.top - crBBox.bottom;
+ FX_FLOAT fWidth = crBBox.right - crBBox.left;
+ FX_FLOAT fHeight = crBBox.top - crBBox.bottom;
- CPDF_Point pt1(crBBox.left,crBBox.bottom + fHeight / 2);
- CPDF_Point pt2(crBBox.left + fWidth / 2,crBBox.top);
- CPDF_Point pt3(crBBox.right,crBBox.bottom + fHeight / 2);
- CPDF_Point pt4(crBBox.left + fWidth / 2,crBBox.bottom);
+ CPDF_Point pt1(crBBox.left, crBBox.bottom + fHeight / 2);
+ CPDF_Point pt2(crBBox.left + fWidth / 2, crBBox.top);
+ CPDF_Point pt3(crBBox.right, crBBox.bottom + fHeight / 2);
+ CPDF_Point pt4(crBBox.left + fWidth / 2, crBBox.bottom);
- csAP << pt1.x << " " << pt1.y << " m\n";
- csAP << pt2.x << " " << pt2.y << " l\n";
- csAP << pt3.x << " " << pt3.y << " l\n";
- csAP << pt4.x << " " << pt4.y << " l\n";
- csAP << pt1.x << " " << pt1.y << " l\n";
+ csAP << pt1.x << " " << pt1.y << " m\n";
+ csAP << pt2.x << " " << pt2.y << " l\n";
+ csAP << pt3.x << " " << pt3.y << " l\n";
+ csAP << pt4.x << " " << pt4.y << " l\n";
+ csAP << pt1.x << " " << pt1.y << " l\n";
- return csAP.GetByteString();
+ return csAP.GetByteString();
}
-CFX_ByteString CPWL_Utils::GetAP_Square(const CPDF_Rect & crBBox)
-{
- CFX_ByteTextBuf csAP;
+CFX_ByteString CPWL_Utils::GetAP_Square(const CPDF_Rect& crBBox) {
+ CFX_ByteTextBuf csAP;
- csAP << crBBox.left << " " << crBBox.top << " m\n";
- csAP << crBBox.right << " " << crBBox.top << " l\n";
- csAP << crBBox.right << " " << crBBox.bottom << " l\n";
- csAP << crBBox.left << " " << crBBox.bottom << " l\n";
- csAP << crBBox.left << " " << crBBox.top << " l\n";
+ csAP << crBBox.left << " " << crBBox.top << " m\n";
+ csAP << crBBox.right << " " << crBBox.top << " l\n";
+ csAP << crBBox.right << " " << crBBox.bottom << " l\n";
+ csAP << crBBox.left << " " << crBBox.bottom << " l\n";
+ csAP << crBBox.left << " " << crBBox.top << " l\n";
- return csAP.GetByteString();
+ return csAP.GetByteString();
}
-CFX_ByteString CPWL_Utils::GetAP_Star(const CPDF_Rect & crBBox)
-{
- CFX_ByteTextBuf csAP;
+CFX_ByteString CPWL_Utils::GetAP_Star(const CPDF_Rect& crBBox) {
+ CFX_ByteTextBuf csAP;
- FX_FLOAT fRadius = (crBBox.top - crBBox.bottom)/(1+(FX_FLOAT)cos(PWL_PI/5.0f));
- CPDF_Point ptCenter = CPDF_Point((crBBox.left + crBBox.right) / 2.0f,(crBBox.top + crBBox.bottom) / 2.0f);
+ FX_FLOAT fRadius =
+ (crBBox.top - crBBox.bottom) / (1 + (FX_FLOAT)cos(PWL_PI / 5.0f));
+ CPDF_Point ptCenter = CPDF_Point((crBBox.left + crBBox.right) / 2.0f,
+ (crBBox.top + crBBox.bottom) / 2.0f);
- FX_FLOAT px[5],py[5];
+ FX_FLOAT px[5], py[5];
- FX_FLOAT fAngel = PWL_PI/10.0f;
+ FX_FLOAT fAngel = PWL_PI / 10.0f;
- for (int32_t i=0; i<5; i++)
- {
- px[i] = ptCenter.x + fRadius * (FX_FLOAT)cos(fAngel);
- py[i] = ptCenter.y + fRadius * (FX_FLOAT)sin(fAngel);
+ for (int32_t i = 0; i < 5; i++) {
+ px[i] = ptCenter.x + fRadius * (FX_FLOAT)cos(fAngel);
+ py[i] = ptCenter.y + fRadius * (FX_FLOAT)sin(fAngel);
- fAngel += PWL_PI * 2 / 5.0f;
- }
+ fAngel += PWL_PI * 2 / 5.0f;
+ }
- csAP << px[0] << " " << py[0] << " m\n";
+ csAP << px[0] << " " << py[0] << " m\n";
- int32_t nNext = 0;
- for (int32_t j=0; j<5; j++)
- {
- nNext += 2;
- if (nNext >= 5) nNext -= 5;
- csAP << px[nNext] << " " << py[nNext] << " l\n";
- }
+ int32_t nNext = 0;
+ for (int32_t j = 0; j < 5; j++) {
+ nNext += 2;
+ if (nNext >= 5)
+ nNext -= 5;
+ csAP << px[nNext] << " " << py[nNext] << " l\n";
+ }
- return csAP.GetByteString();
+ return csAP.GetByteString();
}
-CFX_ByteString CPWL_Utils::GetAP_HalfCircle(const CPDF_Rect & crBBox,FX_FLOAT fRotate)
-{
- CFX_ByteTextBuf csAP;
-
- FX_FLOAT fWidth = crBBox.right - crBBox.left;
- FX_FLOAT fHeight = crBBox.top - crBBox.bottom;
+CFX_ByteString CPWL_Utils::GetAP_HalfCircle(const CPDF_Rect& crBBox,
+ FX_FLOAT fRotate) {
+ CFX_ByteTextBuf csAP;
- CPDF_Point pt1(-fWidth/2,0);
- CPDF_Point pt2(0,fHeight/2);
- CPDF_Point pt3(fWidth/2,0);
+ FX_FLOAT fWidth = crBBox.right - crBBox.left;
+ FX_FLOAT fHeight = crBBox.top - crBBox.bottom;
- FX_FLOAT px,py;
+ CPDF_Point pt1(-fWidth / 2, 0);
+ CPDF_Point pt2(0, fHeight / 2);
+ CPDF_Point pt3(fWidth / 2, 0);
- csAP << cos(fRotate) << " " << sin(fRotate) << " " << -sin(fRotate) << " " << cos(fRotate) << " "
- << crBBox.left + fWidth / 2 << " " << crBBox.bottom + fHeight / 2 << " cm\n";
+ FX_FLOAT px, py;
+ csAP << cos(fRotate) << " " << sin(fRotate) << " " << -sin(fRotate) << " "
+ << cos(fRotate) << " " << crBBox.left + fWidth / 2 << " "
+ << crBBox.bottom + fHeight / 2 << " cm\n";
- csAP << pt1.x << " " << pt1.y << " m\n";
+ csAP << pt1.x << " " << pt1.y << " m\n";
- px = pt2.x - pt1.x;
- py = pt2.y - pt1.y;
+ px = pt2.x - pt1.x;
+ py = pt2.y - pt1.y;
- csAP << pt1.x << " " << pt1.y + py * PWL_BEZIER << " "
- << pt2.x - px * PWL_BEZIER << " " << pt2.y << " "
- << pt2.x << " " << pt2.y << " c\n";
+ csAP << pt1.x << " " << pt1.y + py * PWL_BEZIER << " "
+ << pt2.x - px * PWL_BEZIER << " " << pt2.y << " " << pt2.x << " "
+ << pt2.y << " c\n";
- px = pt3.x - pt2.x;
- py = pt2.y - pt3.y;
+ px = pt3.x - pt2.x;
+ py = pt2.y - pt3.y;
- csAP << pt2.x + px * PWL_BEZIER << " " << pt2.y << " "
- << pt3.x << " " << pt3.y + py * PWL_BEZIER << " "
- << pt3.x << " " << pt3.y << " c\n";
+ csAP << pt2.x + px * PWL_BEZIER << " " << pt2.y << " " << pt3.x << " "
+ << pt3.y + py * PWL_BEZIER << " " << pt3.x << " " << pt3.y << " c\n";
- return csAP.GetByteString();
+ return csAP.GetByteString();
}
+CPDF_Rect CPWL_Utils::InflateRect(const CPDF_Rect& rcRect, FX_FLOAT fSize) {
+ if (rcRect.IsEmpty())
+ return rcRect;
-CPDF_Rect CPWL_Utils::InflateRect(const CPDF_Rect & rcRect, FX_FLOAT fSize)
-{
- if (rcRect.IsEmpty()) return rcRect;
-
- CPDF_Rect rcNew(rcRect.left - fSize,
- rcRect.bottom - fSize,
- rcRect.right + fSize,
- rcRect.top + fSize);
- rcNew.Normalize();
- return rcNew;
+ CPDF_Rect rcNew(rcRect.left - fSize, rcRect.bottom - fSize,
+ rcRect.right + fSize, rcRect.top + fSize);
+ rcNew.Normalize();
+ return rcNew;
}
-CPDF_Rect CPWL_Utils::DeflateRect(const CPDF_Rect & rcRect, FX_FLOAT fSize)
-{
- if (rcRect.IsEmpty()) return rcRect;
+CPDF_Rect CPWL_Utils::DeflateRect(const CPDF_Rect& rcRect, FX_FLOAT fSize) {
+ if (rcRect.IsEmpty())
+ return rcRect;
- CPDF_Rect rcNew(rcRect.left + fSize,
- rcRect.bottom + fSize,
- rcRect.right - fSize,
- rcRect.top - fSize);
- rcNew.Normalize();
- return rcNew;
+ CPDF_Rect rcNew(rcRect.left + fSize, rcRect.bottom + fSize,
+ rcRect.right - fSize, rcRect.top - fSize);
+ rcNew.Normalize();
+ return rcNew;
}
-CPDF_Rect CPWL_Utils::ScaleRect(const CPDF_Rect & rcRect,FX_FLOAT fScale)
-{
- FX_FLOAT fHalfWidth = (rcRect.right - rcRect.left) / 2.0f;
- FX_FLOAT fHalfHeight = (rcRect.top - rcRect.bottom) / 2.0f;
+CPDF_Rect CPWL_Utils::ScaleRect(const CPDF_Rect& rcRect, FX_FLOAT fScale) {
+ FX_FLOAT fHalfWidth = (rcRect.right - rcRect.left) / 2.0f;
+ FX_FLOAT fHalfHeight = (rcRect.top - rcRect.bottom) / 2.0f;
- CPDF_Point ptCenter = CPDF_Point((rcRect.left + rcRect.right) / 2,(rcRect.top + rcRect.bottom) / 2);
+ CPDF_Point ptCenter = CPDF_Point((rcRect.left + rcRect.right) / 2,
+ (rcRect.top + rcRect.bottom) / 2);
- return CPDF_Rect(ptCenter.x - fHalfWidth * fScale,
- ptCenter.y - fHalfHeight * fScale,
- ptCenter.x + fHalfWidth * fScale,
- ptCenter.y + fHalfHeight * fScale);
+ return CPDF_Rect(
+ ptCenter.x - fHalfWidth * fScale, ptCenter.y - fHalfHeight * fScale,
+ ptCenter.x + fHalfWidth * fScale, ptCenter.y + fHalfHeight * fScale);
}
-CFX_ByteString CPWL_Utils::GetRectFillAppStream(const CPDF_Rect & rect,const CPWL_Color & color)
-{
- CFX_ByteTextBuf sAppStream;
+CFX_ByteString CPWL_Utils::GetRectFillAppStream(const CPDF_Rect& rect,
+ const CPWL_Color& color) {
+ CFX_ByteTextBuf sAppStream;
- CFX_ByteString sColor = GetColorAppStream(color,TRUE);
- if (sColor.GetLength() > 0)
- {
- sAppStream << "q\n" << sColor;
- sAppStream << rect.left << " " << rect.bottom << " "
- << rect.right - rect.left << " " << rect.top - rect.bottom << " re f\nQ\n";
- }
+ CFX_ByteString sColor = GetColorAppStream(color, TRUE);
+ if (sColor.GetLength() > 0) {
+ sAppStream << "q\n" << sColor;
+ sAppStream << rect.left << " " << rect.bottom << " "
+ << rect.right - rect.left << " " << rect.top - rect.bottom
+ << " re f\nQ\n";
+ }
- return sAppStream.GetByteString();
+ return sAppStream.GetByteString();
}
-CFX_ByteString CPWL_Utils::GetCircleFillAppStream(const CPDF_Rect & rect,const CPWL_Color & color)
-{
- CFX_ByteTextBuf sAppStream;
+CFX_ByteString CPWL_Utils::GetCircleFillAppStream(const CPDF_Rect& rect,
+ const CPWL_Color& color) {
+ CFX_ByteTextBuf sAppStream;
- CFX_ByteString sColor = GetColorAppStream(color,TRUE);
- if (sColor.GetLength() > 0)
- {
- sAppStream << "q\n" << sColor << CPWL_Utils::GetAP_Circle(rect) << "f\nQ\n";
- }
+ CFX_ByteString sColor = GetColorAppStream(color, TRUE);
+ if (sColor.GetLength() > 0) {
+ sAppStream << "q\n" << sColor << CPWL_Utils::GetAP_Circle(rect) << "f\nQ\n";
+ }
- return sAppStream.GetByteString();
+ return sAppStream.GetByteString();
}
-CPDF_Rect CPWL_Utils::GetCenterSquare(const CPDF_Rect & rect)
-{
- FX_FLOAT fWidth = rect.right - rect.left;
- FX_FLOAT fHeight = rect.top - rect.bottom;
+CPDF_Rect CPWL_Utils::GetCenterSquare(const CPDF_Rect& rect) {
+ FX_FLOAT fWidth = rect.right - rect.left;
+ FX_FLOAT fHeight = rect.top - rect.bottom;
- FX_FLOAT fCenterX = (rect.left + rect.right)/2.0f;
- FX_FLOAT fCenterY = (rect.top + rect.bottom)/2.0f;
+ FX_FLOAT fCenterX = (rect.left + rect.right) / 2.0f;
+ FX_FLOAT fCenterY = (rect.top + rect.bottom) / 2.0f;
- FX_FLOAT fRadius = (fWidth > fHeight) ? fHeight / 2 : fWidth / 2;
+ FX_FLOAT fRadius = (fWidth > fHeight) ? fHeight / 2 : fWidth / 2;
- return CPDF_Rect(fCenterX - fRadius,fCenterY - fRadius,fCenterX + fRadius,fCenterY + fRadius);
+ return CPDF_Rect(fCenterX - fRadius, fCenterY - fRadius, fCenterX + fRadius,
+ fCenterY + fRadius);
}
-CFX_ByteString CPWL_Utils::GetEditAppStream(IFX_Edit* pEdit, const CPDF_Point & ptOffset, const CPVT_WordRange * pRange,
- FX_BOOL bContinuous, FX_WORD SubWord)
-{
- return IFX_Edit::GetEditAppearanceStream(pEdit,ptOffset,pRange,bContinuous,SubWord);
+CFX_ByteString CPWL_Utils::GetEditAppStream(IFX_Edit* pEdit,
+ const CPDF_Point& ptOffset,
+ const CPVT_WordRange* pRange,
+ FX_BOOL bContinuous,
+ FX_WORD SubWord) {
+ return IFX_Edit::GetEditAppearanceStream(pEdit, ptOffset, pRange, bContinuous,
+ SubWord);
}
-CFX_ByteString CPWL_Utils::GetEditSelAppStream(IFX_Edit* pEdit, const CPDF_Point & ptOffset,
- const CPVT_WordRange * pRange)
-{
- return IFX_Edit::GetSelectAppearanceStream(pEdit,ptOffset,pRange);
+CFX_ByteString CPWL_Utils::GetEditSelAppStream(IFX_Edit* pEdit,
+ const CPDF_Point& ptOffset,
+ const CPVT_WordRange* pRange) {
+ return IFX_Edit::GetSelectAppearanceStream(pEdit, ptOffset, pRange);
}
-static CFX_ByteString GetSquigglyAppearanceStream(FX_FLOAT fStartX, FX_FLOAT fEndX, FX_FLOAT fY, FX_FLOAT fStep)
-{
- CFX_ByteTextBuf sRet;
+static CFX_ByteString GetSquigglyAppearanceStream(FX_FLOAT fStartX,
+ FX_FLOAT fEndX,
+ FX_FLOAT fY,
+ FX_FLOAT fStep) {
+ CFX_ByteTextBuf sRet;
- sRet << "0 w\n" << fStartX << " " << fY << " m\n";
+ sRet << "0 w\n" << fStartX << " " << fY << " m\n";
- FX_FLOAT fx;
- int32_t i;
+ FX_FLOAT fx;
+ int32_t i;
- for (i=1,fx=fStartX+fStep; fx<fEndX; fx+=fStep,i++)
- {
- sRet << fx << " " << fY + (i&1)*fStep << " l\n";
- }
+ for (i = 1, fx = fStartX + fStep; fx < fEndX; fx += fStep, i++) {
+ sRet << fx << " " << fY + (i & 1) * fStep << " l\n";
+ }
- sRet << "S\n";
+ sRet << "S\n";
- return sRet.GetByteString();
+ return sRet.GetByteString();
}
-static CFX_ByteString GetWordSpellCheckAppearanceStream(IFX_Edit_Iterator* pIterator, const CPDF_Point & ptOffset,
- const CPVT_WordRange & wrWord)
-{
- CFX_ByteTextBuf sRet;
-
- FX_FLOAT fStartX = 0.0f;
- FX_FLOAT fEndX = 0.0f;
- FX_FLOAT fY = 0.0f;
- FX_FLOAT fStep = 0.0f;
-
- FX_BOOL bBreak = FALSE;
-
- if (pIterator)
- {
- pIterator->SetAt(wrWord.BeginPos);
-
- do
- {
- CPVT_WordPlace place = pIterator->GetAt();
-
- CPVT_Line line;
- if (pIterator->GetLine(line))
- {
- fY = line.ptLine.y;
- fStep = (line.fLineAscent - line.fLineDescent) / 16.0f;
- }
-
- if (place.LineCmp(wrWord.BeginPos) == 0)
- {
- pIterator->SetAt(wrWord.BeginPos);
- CPVT_Word word;
- if (pIterator->GetWord(word))
- {
- fStartX = word.ptWord.x;
- }
- }
- else
- {
- fStartX = line.ptLine.x;
- }
-
- if (place.LineCmp(wrWord.EndPos) == 0)
- {
- pIterator->SetAt(wrWord.EndPos);
- CPVT_Word word;
- if (pIterator->GetWord(word))
- {
- fEndX = word.ptWord.x + word.fWidth;
- }
-
- bBreak = TRUE;
- }
- else
- {
- fEndX = line.ptLine.x + line.fLineWidth;
- }
-
- sRet << GetSquigglyAppearanceStream(fStartX + ptOffset.x, fEndX + ptOffset.x, fY + ptOffset.y,fStep);
-
- if (bBreak) break;
- }
- while (pIterator->NextLine());
- }
-
- return sRet.GetByteString();
-}
-
-CFX_ByteString CPWL_Utils::GetSpellCheckAppStream(IFX_Edit* pEdit, IPWL_SpellCheck* pSpellCheck, const CPDF_Point & ptOffset,
- const CPVT_WordRange * pRange)
-{
- ASSERT(pEdit != NULL);
- ASSERT(pSpellCheck != NULL);
-
- CFX_ByteTextBuf sRet;
-
- if (pRange && pRange->IsExist())
- {
- if (IFX_Edit_Iterator* pIterator = pEdit->GetIterator())
- {
- pIterator->SetAt(pRange->BeginPos);
-
- FX_BOOL bLatinWord = FALSE;
- CPVT_WordPlace wpWordStart;
- CFX_ByteString sWord;
-
- CPVT_WordPlace oldplace;
- while (pIterator->NextWord())
- {
- CPVT_WordPlace place = pIterator->GetAt();
- if (pRange && place.WordCmp(pRange->EndPos) > 0) break;
-
- CPVT_Word word;
- if (pIterator->GetWord(word))
- {
- if (FX_EDIT_ISLATINWORD(word.Word))
- {
- if (!bLatinWord)
- {
- wpWordStart = place;
- bLatinWord = TRUE;
- }
-
- sWord += (char)word.Word;
- oldplace = place;
- }
- else
- {
- if (bLatinWord)
- {
- if (!pSpellCheck->CheckWord(sWord))
- {
- sRet << GetWordSpellCheckAppearanceStream(pIterator,ptOffset,CPVT_WordRange(wpWordStart,oldplace));
- pIterator->SetAt(place);
- }
- bLatinWord = FALSE;
- }
-
- sWord.Empty();
- }
- }
- else
- {
- if (bLatinWord)
- {
- if (!pSpellCheck->CheckWord(sWord))
- sRet << GetWordSpellCheckAppearanceStream(pIterator,ptOffset,CPVT_WordRange(wpWordStart,oldplace));
- bLatinWord = FALSE;
- sWord.Empty();
- }
- }
- }
-
- if (bLatinWord)
- {
- if (!pSpellCheck->CheckWord(sWord))
- sRet << GetWordSpellCheckAppearanceStream(pIterator,ptOffset,CPVT_WordRange(wpWordStart,oldplace));
-
- bLatinWord = FALSE;
- sWord.Empty();
- }
- }
- }
-
- return sRet.GetByteString();
-}
-
-CFX_ByteString CPWL_Utils::GetTextAppStream(const CPDF_Rect & rcBBox,IFX_Edit_FontMap * pFontMap,
- const CFX_WideString & sText, int32_t nAlignmentH, int32_t nAlignmentV,
- FX_FLOAT fFontSize, FX_BOOL bMultiLine, FX_BOOL bAutoReturn, const CPWL_Color & crText)
-{
- CFX_ByteTextBuf sRet;
-
- if (IFX_Edit * pEdit = IFX_Edit::NewEdit())
- {
- pEdit->SetFontMap(pFontMap);
- pEdit->SetPlateRect(rcBBox);
- pEdit->SetAlignmentH(nAlignmentH);
- pEdit->SetAlignmentV(nAlignmentV);
- pEdit->SetMultiLine(bMultiLine);
- pEdit->SetAutoReturn(bAutoReturn);
- if (IsFloatZero(fFontSize))
- pEdit->SetAutoFontSize(TRUE);
- else
- pEdit->SetFontSize(fFontSize);
-
- pEdit->Initialize();
- pEdit->SetText(sText.c_str());
-
- CFX_ByteString sEdit = CPWL_Utils::GetEditAppStream(pEdit, CPDF_Point(0.0f,0.0f));
- if (sEdit.GetLength() > 0)
- {
- sRet << "BT\n" << CPWL_Utils::GetColorAppStream(crText) << sEdit << "ET\n";
- }
- IFX_Edit::DelEdit(pEdit);
- }
-
- return sRet.GetByteString();
-}
-
-CFX_ByteString CPWL_Utils::GetPushButtonAppStream(const CPDF_Rect & rcBBox,
- IFX_Edit_FontMap * pFontMap,
- CPDF_Stream * pIconStream,
- CPDF_IconFit & IconFit,
- const CFX_WideString & sLabel,
- const CPWL_Color & crText,
- FX_FLOAT fFontSize,
- int32_t nLayOut)
-{
- const FX_FLOAT fAutoFontScale = 1.0f / 3.0f;
-
- if (IFX_Edit * pEdit = IFX_Edit::NewEdit())
- {
- pEdit->SetFontMap(pFontMap);
- pEdit->SetAlignmentH(1);
- pEdit->SetAlignmentV(1);
- pEdit->SetMultiLine(FALSE);
- pEdit->SetAutoReturn(FALSE);
- if (IsFloatZero(fFontSize))
- pEdit->SetAutoFontSize(TRUE);
- else
- pEdit->SetFontSize(fFontSize);
-
- pEdit->Initialize();
- pEdit->SetText(sLabel.c_str());
-
- CPDF_Rect rcLabelContent = pEdit->GetContentRect();
- CPWL_Icon Icon;
- PWL_CREATEPARAM cp;
- cp.dwFlags = PWS_VISIBLE;
- Icon.Create(cp);
- Icon.SetIconFit(&IconFit);
- Icon.SetPDFStream(pIconStream);
-
- CPDF_Rect rcLabel = CPDF_Rect(0,0,0,0);
- CPDF_Rect rcIcon = CPDF_Rect(0,0,0,0);
- FX_FLOAT fWidth = 0.0f;
- FX_FLOAT fHeight = 0.0f;
-
- switch (nLayOut)
- {
- case PPBL_LABEL:
- rcLabel = rcBBox;
- rcIcon = CPDF_Rect(0,0,0,0);
- break;
- case PPBL_ICON:
- rcIcon = rcBBox;
- rcLabel = CPDF_Rect(0,0,0,0);
- break;
- case PPBL_ICONTOPLABELBOTTOM:
-
- if (pIconStream)
- {
- if (IsFloatZero(fFontSize))
- {
- fHeight = rcBBox.top - rcBBox.bottom;
- rcLabel = CPDF_Rect(rcBBox.left,rcBBox.bottom,rcBBox.right,rcBBox.bottom + fHeight * fAutoFontScale);
- rcIcon = CPDF_Rect(rcBBox.left,rcLabel.top,rcBBox.right,rcBBox.top);
- }
- else
- {
- fHeight = rcLabelContent.Height();
-
- if (rcBBox.bottom + fHeight > rcBBox.top)
- {
- rcIcon = CPDF_Rect(0,0,0,0);
- rcLabel = rcBBox;
- }
- else
- {
- rcLabel = CPDF_Rect(rcBBox.left,rcBBox.bottom,rcBBox.right,rcBBox.bottom + fHeight);
- rcIcon = CPDF_Rect(rcBBox.left,rcLabel.top,rcBBox.right,rcBBox.top);
- }
- }
- }
- else
- {
- rcLabel = rcBBox;
- rcIcon = CPDF_Rect(0,0,0,0);
- }
-
- break;
- case PPBL_LABELTOPICONBOTTOM:
-
- if (pIconStream)
- {
- if (IsFloatZero(fFontSize))
- {
- fHeight = rcBBox.top - rcBBox.bottom;
- rcLabel = CPDF_Rect(rcBBox.left,rcBBox.top - fHeight * fAutoFontScale ,rcBBox.right,rcBBox.top);
- rcIcon = CPDF_Rect(rcBBox.left,rcBBox.bottom,rcBBox.right,rcLabel.bottom);
- }
- else
- {
- fHeight = rcLabelContent.Height();
-
- if (rcBBox.bottom + fHeight > rcBBox.top)
- {
- rcIcon = CPDF_Rect(0,0,0,0);
- rcLabel = rcBBox;
- }
- else
- {
- rcLabel = CPDF_Rect(rcBBox.left,rcBBox.top - fHeight,rcBBox.right,rcBBox.top);
- rcIcon = CPDF_Rect(rcBBox.left,rcBBox.bottom,rcBBox.right,rcLabel.bottom);
- }
- }
- }
- else
- {
- rcLabel = rcBBox;
- rcIcon = CPDF_Rect(0,0,0,0);
- }
-
- break;
- case PPBL_ICONLEFTLABELRIGHT:
-
- if (pIconStream)
- {
- if (IsFloatZero(fFontSize))
- {
- fWidth = rcBBox.right - rcBBox.left;
- rcLabel = CPDF_Rect(rcBBox.right - fWidth * fAutoFontScale,rcBBox.bottom,rcBBox.right,rcBBox.top);
- rcIcon = CPDF_Rect(rcBBox.left,rcBBox.bottom,rcLabel.left,rcBBox.top);
-
- if (rcLabelContent.Width() < fWidth * fAutoFontScale)
- {
- }
- else
- {
- if (rcLabelContent.Width() < fWidth)
- {
- rcLabel = CPDF_Rect(rcBBox.right - rcLabelContent.Width(),rcBBox.bottom,rcBBox.right,rcBBox.top);
- rcIcon = CPDF_Rect(rcBBox.left,rcBBox.bottom,rcLabel.left,rcBBox.top);
- }
- else
- {
- rcLabel = rcBBox;
- rcIcon = CPDF_Rect(0,0,0,0);
- }
- }
- }
- else
- {
- fWidth = rcLabelContent.Width();
-
- if (rcBBox.left + fWidth > rcBBox.right)
- {
- rcLabel = rcBBox;
- rcIcon = CPDF_Rect(0,0,0,0);
- }
- else
- {
- rcLabel = CPDF_Rect(rcBBox.right - fWidth,rcBBox.bottom,rcBBox.right,rcBBox.top);
- rcIcon = CPDF_Rect(rcBBox.left,rcBBox.bottom,rcLabel.left,rcBBox.top);
- }
- }
- }
- else
- {
- rcLabel = rcBBox;
- rcIcon = CPDF_Rect(0,0,0,0);
- }
-
- break;
- case PPBL_LABELLEFTICONRIGHT:
-
- if (pIconStream)
- {
- if (IsFloatZero(fFontSize))
- {
- fWidth = rcBBox.right - rcBBox.left;
- rcLabel = CPDF_Rect(rcBBox.left,rcBBox.bottom,rcBBox.left + fWidth * fAutoFontScale,rcBBox.top);
- rcIcon = CPDF_Rect(rcLabel.right,rcBBox.bottom,rcBBox.right,rcBBox.top);
-
- if (rcLabelContent.Width() < fWidth * fAutoFontScale)
- {
- }
- else
- {
- if (rcLabelContent.Width() < fWidth)
- {
- rcLabel = CPDF_Rect(rcBBox.left,rcBBox.bottom,rcBBox.left + rcLabelContent.Width(),rcBBox.top);
- rcIcon = CPDF_Rect(rcLabel.right,rcBBox.bottom,rcBBox.right,rcBBox.top);
- }
- else
- {
- rcLabel = rcBBox;
- rcIcon = CPDF_Rect(0,0,0,0);
- }
- }
- }
- else
- {
- fWidth = rcLabelContent.Width();
-
- if (rcBBox.left + fWidth > rcBBox.right)
- {
- rcLabel = rcBBox;
- rcIcon = CPDF_Rect(0,0,0,0);
- }
- else
- {
- rcLabel = CPDF_Rect(rcBBox.left,rcBBox.bottom,rcBBox.left + fWidth,rcBBox.top);
- rcIcon = CPDF_Rect(rcLabel.right,rcBBox.bottom,rcBBox.right,rcBBox.top);
- }
- }
- }
- else
- {
- rcLabel = rcBBox;
- rcIcon = CPDF_Rect(0,0,0,0);
- }
-
- break;
- case PPBL_LABELOVERICON:
- rcLabel = rcBBox;
- rcIcon = rcBBox;
- break;
- }
-
- CFX_ByteTextBuf sAppStream,sTemp;
-
- if (!rcIcon.IsEmpty())
- {
- Icon.Move(rcIcon, FALSE, FALSE);
- sTemp << Icon.GetImageAppStream();
- }
-
- Icon.Destroy();
-
- if (!rcLabel.IsEmpty())
- {
- pEdit->SetPlateRect(rcLabel);
- CFX_ByteString sEdit = CPWL_Utils::GetEditAppStream(pEdit,CPDF_Point(0.0f,0.0f));
- if (sEdit.GetLength() > 0)
- {
- sTemp << "BT\n" << CPWL_Utils::GetColorAppStream(crText) << sEdit << "ET\n";
- }
- }
-
- IFX_Edit::DelEdit(pEdit);
-
- if (sTemp.GetSize() > 0)
- {
- sAppStream << "q\n" << rcBBox.left << " " << rcBBox.bottom << " "
- << rcBBox.right - rcBBox.left << " " << rcBBox.top - rcBBox.bottom << " re W n\n";
- sAppStream << sTemp << "Q\n";
- }
-
- return sAppStream.GetByteString();
- }
-
- return "";
-}
-
-CFX_ByteString CPWL_Utils::GetColorAppStream(const CPWL_Color & color,const FX_BOOL & bFillOrStroke)
-{
- CFX_ByteTextBuf sColorStream;
-
- switch (color.nColorType)
- {
- case COLORTYPE_RGB:
- sColorStream << color.fColor1 << " " << color.fColor2 << " " << color.fColor3 << " "
- << (bFillOrStroke ? "rg" : "RG") << "\n";
- break;
- case COLORTYPE_GRAY:
- sColorStream << color.fColor1 << " " << (bFillOrStroke ? "g" : "G") << "\n";
- break;
- case COLORTYPE_CMYK:
- sColorStream << color.fColor1 << " " << color.fColor2 << " " << color.fColor3 << " " << color.fColor4 << " "
- << (bFillOrStroke ? "k" : "K") << "\n";
- break;
- }
-
- return sColorStream.GetByteString();
-}
-
-CFX_ByteString CPWL_Utils::GetBorderAppStream(const CPDF_Rect & rect, FX_FLOAT fWidth,
- const CPWL_Color & color, const CPWL_Color & crLeftTop, const CPWL_Color & crRightBottom,
- int32_t nStyle, const CPWL_Dash & dash)
-{
- CFX_ByteTextBuf sAppStream;
- CFX_ByteString sColor;
-
- FX_FLOAT fLeft = rect.left;
- FX_FLOAT fRight = rect.right;
- FX_FLOAT fTop = rect.top;
- FX_FLOAT fBottom = rect.bottom;
-
- if (fWidth > 0.0f)
- {
- FX_FLOAT fHalfWidth = fWidth / 2.0f;
-
- sAppStream << "q\n";
-
- switch (nStyle)
- {
- default:
- case PBS_SOLID:
- sColor = CPWL_Utils::GetColorAppStream(color,TRUE);
- if (sColor.GetLength() > 0)
- {
- sAppStream << sColor;
- sAppStream << fLeft << " " << fBottom << " " << fRight - fLeft << " " << fTop - fBottom << " re\n";
- sAppStream << fLeft + fWidth << " " << fBottom + fWidth << " "
- << fRight - fLeft - fWidth * 2 << " " << fTop - fBottom - fWidth * 2 << " re\n";
- sAppStream << "f*\n";
- }
- break;
- case PBS_DASH:
- sColor = CPWL_Utils::GetColorAppStream(color,FALSE);
- if (sColor.GetLength() > 0)
- {
- sAppStream << sColor;
- sAppStream << fWidth << " w" << " [" << dash.nDash << " " << dash.nGap << "] " << dash.nPhase << " d\n";
- sAppStream << fLeft + fWidth / 2 << " " << fBottom + fWidth / 2 << " m\n";
- sAppStream << fLeft + fWidth / 2 << " " << fTop - fWidth / 2 << " l\n";
- sAppStream << fRight - fWidth / 2 << " " << fTop - fWidth / 2 << " l\n";
- sAppStream << fRight - fWidth / 2 << " " << fBottom + fWidth / 2 << " l\n";
- sAppStream << fLeft + fWidth / 2 << " " << fBottom + fWidth / 2 << " l S\n";
- }
- break;
- case PBS_BEVELED:
- case PBS_INSET:
- sColor = CPWL_Utils::GetColorAppStream(crLeftTop,TRUE);
- if (sColor.GetLength() > 0)
- {
- sAppStream << sColor;
- sAppStream << fLeft + fHalfWidth << " " << fBottom + fHalfWidth << " m\n";
- sAppStream << fLeft + fHalfWidth << " " << fTop - fHalfWidth << " l\n";
- sAppStream << fRight - fHalfWidth << " " << fTop - fHalfWidth << " l\n";
- sAppStream << fRight - fHalfWidth * 2 << " " << fTop - fHalfWidth * 2 << " l\n";
- sAppStream << fLeft + fHalfWidth * 2 << " " << fTop - fHalfWidth * 2 << " l\n";
- sAppStream << fLeft + fHalfWidth * 2 << " " << fBottom + fHalfWidth * 2 << " l f\n";
- }
-
- sColor = CPWL_Utils::GetColorAppStream(crRightBottom,TRUE);
- if (sColor.GetLength() > 0)
- {
- sAppStream << sColor;
- sAppStream << fRight - fHalfWidth << " " << fTop - fHalfWidth << " m\n";
- sAppStream << fRight - fHalfWidth << " " << fBottom + fHalfWidth << " l\n";
- sAppStream << fLeft + fHalfWidth << " " << fBottom + fHalfWidth << " l\n";
- sAppStream << fLeft + fHalfWidth * 2 << " " << fBottom + fHalfWidth * 2 << " l\n";
- sAppStream << fRight - fHalfWidth * 2 << " " << fBottom + fHalfWidth * 2 << " l\n";
- sAppStream << fRight - fHalfWidth * 2 << " " << fTop - fHalfWidth * 2 << " l f\n";
- }
-
- sColor = CPWL_Utils::GetColorAppStream(color,TRUE);
- if (sColor.GetLength() > 0)
- {
- sAppStream << sColor;
- sAppStream << fLeft << " " << fBottom << " " << fRight - fLeft << " " << fTop - fBottom << " re\n";
- sAppStream << fLeft + fHalfWidth << " " << fBottom + fHalfWidth << " "
- << fRight - fLeft - fHalfWidth * 2 << " " << fTop - fBottom - fHalfWidth * 2 << " re f*\n";
- }
- break;
- case PBS_UNDERLINED:
- sColor = CPWL_Utils::GetColorAppStream(color,FALSE);
- if (sColor.GetLength() > 0)
- {
- sAppStream << sColor;
- sAppStream << fWidth << " w\n";
- sAppStream << fLeft << " " << fBottom + fWidth / 2 << " m\n";
- sAppStream << fRight << " " << fBottom + fWidth / 2 << " l S\n";
- }
- break;
- }
-
- sAppStream << "Q\n";
- }
-
- return sAppStream.GetByteString();
-}
-
-CFX_ByteString CPWL_Utils::GetCircleBorderAppStream(const CPDF_Rect & rect, FX_FLOAT fWidth,
- const CPWL_Color & color, const CPWL_Color & crLeftTop, const CPWL_Color & crRightBottom,
- int32_t nStyle, const CPWL_Dash & dash)
-{
- CFX_ByteTextBuf sAppStream;
- CFX_ByteString sColor;
-
-
-
-
-
-
- if (fWidth > 0.0f)
- {
- sAppStream << "q\n";
-
- switch (nStyle)
- {
- default:
- case PBS_SOLID:
- case PBS_UNDERLINED:
- {
- sColor = CPWL_Utils::GetColorAppStream(color,FALSE);
- if (sColor.GetLength() > 0)
- {
- sAppStream << "q\n" << fWidth << " w\n" << sColor
- << CPWL_Utils::GetAP_Circle(CPWL_Utils::DeflateRect(rect,fWidth / 2.0f))
- << " S\nQ\n";
- }
- }
- break;
- case PBS_DASH:
- {
- sColor = CPWL_Utils::GetColorAppStream(color,FALSE);
- if (sColor.GetLength() > 0)
- {
- sAppStream << "q\n" << fWidth << " w\n"
- << "[" << dash.nDash << " " << dash.nGap << "] " << dash.nPhase << " d\n"
- << sColor << CPWL_Utils::GetAP_Circle(CPWL_Utils::DeflateRect(rect,fWidth / 2.0f))
- << " S\nQ\n";
- }
- }
- break;
- case PBS_BEVELED:
- {
- FX_FLOAT fHalfWidth = fWidth / 2.0f;
-
- sColor = CPWL_Utils::GetColorAppStream(color,FALSE);
- if (sColor.GetLength() > 0)
- {
- sAppStream << "q\n" << fHalfWidth << " w\n"
- << sColor << CPWL_Utils::GetAP_Circle(rect)
- << " S\nQ\n";
- }
-
- sColor = CPWL_Utils::GetColorAppStream(crLeftTop,FALSE);
- if (sColor.GetLength() > 0)
- {
- sAppStream << "q\n" << fHalfWidth << " w\n"
- << sColor << CPWL_Utils::GetAP_HalfCircle(CPWL_Utils::DeflateRect(rect,fHalfWidth * 0.75f),PWL_PI/4.0f)
- << " S\nQ\n";
- }
-
- sColor = CPWL_Utils::GetColorAppStream(crRightBottom,FALSE);
- if (sColor.GetLength() > 0)
- {
- sAppStream << "q\n" << fHalfWidth << " w\n"
- << sColor << CPWL_Utils::GetAP_HalfCircle(CPWL_Utils::DeflateRect(rect,fHalfWidth * 0.75f),PWL_PI*5/4.0f)
- << " S\nQ\n";
- }
- }
- break;
- case PBS_INSET:
- {
- FX_FLOAT fHalfWidth = fWidth / 2.0f;
-
- sColor = CPWL_Utils::GetColorAppStream(color,FALSE);
- if (sColor.GetLength() > 0)
- {
- sAppStream << "q\n" << fHalfWidth << " w\n"
- << sColor << CPWL_Utils::GetAP_Circle(rect)
- << " S\nQ\n";
- }
-
- sColor = CPWL_Utils::GetColorAppStream(crLeftTop,FALSE);
- if (sColor.GetLength() > 0)
- {
- sAppStream << "q\n" << fHalfWidth << " w\n"
- << sColor << CPWL_Utils::GetAP_HalfCircle(CPWL_Utils::DeflateRect(rect,fHalfWidth * 0.75f),PWL_PI/4.0f)
- << " S\nQ\n";
- }
-
- sColor = CPWL_Utils::GetColorAppStream(crRightBottom,FALSE);
- if (sColor.GetLength() > 0)
- {
- sAppStream << "q\n" << fHalfWidth << " w\n"
- << sColor << CPWL_Utils::GetAP_HalfCircle(CPWL_Utils::DeflateRect(rect,fHalfWidth * 0.75f),PWL_PI*5/4.0f)
- << " S\nQ\n";
- }
- }
- break;
- }
-
- sAppStream << "Q\n";
- }
-
- return sAppStream.GetByteString();
-}
-
-CPWL_Color CPWL_Utils::SubstractColor(const CPWL_Color & sColor,FX_FLOAT fColorSub)
-{
- CPWL_Color sRet;
- sRet.nColorType = sColor.nColorType;
-
- switch (sColor.nColorType)
- {
- case COLORTYPE_TRANSPARENT:
- sRet.nColorType = COLORTYPE_RGB;
- sRet.fColor1 = PWL_MAX(1 - fColorSub,0.0f);
- sRet.fColor2 = PWL_MAX(1 - fColorSub,0.0f);
- sRet.fColor3 = PWL_MAX(1 - fColorSub,0.0f);
- break;
- case COLORTYPE_RGB:
- case COLORTYPE_GRAY:
- case COLORTYPE_CMYK:
- sRet.fColor1 = PWL_MAX(sColor.fColor1 - fColorSub,0.0f);
- sRet.fColor2 = PWL_MAX(sColor.fColor2 - fColorSub,0.0f);
- sRet.fColor3 = PWL_MAX(sColor.fColor3 - fColorSub,0.0f);
- sRet.fColor4 = PWL_MAX(sColor.fColor4 - fColorSub,0.0f);
- break;
- }
-
- return sRet;
-}
-
-CPWL_Color CPWL_Utils::DevideColor(const CPWL_Color & sColor,FX_FLOAT fColorDevide)
-{
- CPWL_Color sRet;
- sRet.nColorType = sColor.nColorType;
-
- switch (sColor.nColorType)
- {
- case COLORTYPE_TRANSPARENT:
- sRet.nColorType = COLORTYPE_RGB;
- sRet.fColor1 = 1 / fColorDevide;
- sRet.fColor2 = 1 / fColorDevide;
- sRet.fColor3 = 1 / fColorDevide;
- break;
- case COLORTYPE_RGB:
- case COLORTYPE_GRAY:
- case COLORTYPE_CMYK:
- sRet = sColor;
- sRet.fColor1 /= fColorDevide;
- sRet.fColor2 /= fColorDevide;
- sRet.fColor3 /= fColorDevide;
- sRet.fColor4 /= fColorDevide;
- break;
- }
-
- return sRet;
-}
-
-CFX_ByteString CPWL_Utils::GetAppStream_Check(const CPDF_Rect & rcBBox, const CPWL_Color & crText)
-{
- CFX_ByteTextBuf sAP;
- sAP << "q\n" << CPWL_Utils::GetColorAppStream(crText,TRUE) << CPWL_Utils::GetAP_Check(rcBBox) << "f\nQ\n";
- return sAP.GetByteString();
-}
-
-CFX_ByteString CPWL_Utils::GetAppStream_Circle(const CPDF_Rect & rcBBox, const CPWL_Color & crText)
-{
- CFX_ByteTextBuf sAP;
- sAP << "q\n" << CPWL_Utils::GetColorAppStream(crText,TRUE) << CPWL_Utils::GetAP_Circle(rcBBox) << "f\nQ\n";
- return sAP.GetByteString();
-}
-
-CFX_ByteString CPWL_Utils::GetAppStream_Cross(const CPDF_Rect & rcBBox, const CPWL_Color & crText)
-{
- CFX_ByteTextBuf sAP;
- sAP << "q\n" << CPWL_Utils::GetColorAppStream(crText,FALSE) << CPWL_Utils::GetAP_Cross(rcBBox) << "S\nQ\n";
- return sAP.GetByteString();
-}
-
-CFX_ByteString CPWL_Utils::GetAppStream_Diamond(const CPDF_Rect & rcBBox, const CPWL_Color & crText)
-{
- CFX_ByteTextBuf sAP;
- sAP << "q\n1 w\n" << CPWL_Utils::GetColorAppStream(crText,TRUE) << CPWL_Utils::GetAP_Diamond(rcBBox) << "f\nQ\n";
- return sAP.GetByteString();
-}
-
-CFX_ByteString CPWL_Utils::GetAppStream_Square(const CPDF_Rect & rcBBox, const CPWL_Color & crText)
-{
- CFX_ByteTextBuf sAP;
- sAP << "q\n" << CPWL_Utils::GetColorAppStream(crText,TRUE) << CPWL_Utils::GetAP_Square(rcBBox) << "f\nQ\n";
- return sAP.GetByteString();
-}
-
-CFX_ByteString CPWL_Utils::GetAppStream_Star(const CPDF_Rect & rcBBox, const CPWL_Color & crText)
-{
- CFX_ByteTextBuf sAP;
- sAP << "q\n" << CPWL_Utils::GetColorAppStream(crText,TRUE) << CPWL_Utils::GetAP_Star(rcBBox) << "f\nQ\n";
- return sAP.GetByteString();
-}
-
-CFX_ByteString CPWL_Utils::GetCheckBoxAppStream(const CPDF_Rect & rcBBox,
- int32_t nStyle,
- const CPWL_Color & crText)
-{
- CPDF_Rect rcCenter = GetCenterSquare(rcBBox);
- switch (nStyle)
- {
- default:
- case PCS_CHECK:
- return GetAppStream_Check(rcCenter,crText);
- case PCS_CIRCLE:
- return GetAppStream_Circle(ScaleRect(rcCenter,2.0f/3.0f),crText);
- case PCS_CROSS:
- return GetAppStream_Cross(rcCenter,crText);
- case PCS_DIAMOND:
- return GetAppStream_Diamond(ScaleRect(rcCenter,2.0f/3.0f),crText);
- case PCS_SQUARE:
- return GetAppStream_Square(ScaleRect(rcCenter,2.0f/3.0f),crText);
- case PCS_STAR:
- return GetAppStream_Star(ScaleRect(rcCenter,2.0f/3.0f),crText);
- }
-}
-
-CFX_ByteString CPWL_Utils::GetRadioButtonAppStream(const CPDF_Rect & rcBBox,
- int32_t nStyle,
- const CPWL_Color & crText)
-{
- CPDF_Rect rcCenter = GetCenterSquare(rcBBox);
- switch (nStyle)
- {
- default:
- case PCS_CHECK:
- return GetAppStream_Check(rcCenter,crText);
- case PCS_CIRCLE:
- return GetAppStream_Circle(ScaleRect(rcCenter,1.0f/2.0f),crText);
- case PCS_CROSS:
- return GetAppStream_Cross(rcCenter,crText);
- case PCS_DIAMOND:
- return GetAppStream_Diamond(ScaleRect(rcCenter,2.0f/3.0f),crText);
- case PCS_SQUARE:
- return GetAppStream_Square(ScaleRect(rcCenter,2.0f/3.0f),crText);
- case PCS_STAR:
- return GetAppStream_Star(ScaleRect(rcCenter,2.0f/3.0f),crText);
- }
-}
-
-CFX_ByteString CPWL_Utils::GetDropButtonAppStream(const CPDF_Rect & rcBBox)
-{
- CFX_ByteTextBuf sAppStream;
-
- if (!rcBBox.IsEmpty())
- {
- sAppStream << "q\n" << CPWL_Utils::GetColorAppStream(CPWL_Color(COLORTYPE_RGB,220.0f/255.0f,220.0f/255.0f,220.0f/255.0f),TRUE);
- sAppStream << rcBBox.left << " " << rcBBox.bottom << " "
- << rcBBox.right - rcBBox.left << " " << rcBBox.top - rcBBox.bottom << " re f\n";
- sAppStream << "Q\n";
-
- sAppStream << "q\n" <<
- CPWL_Utils::GetBorderAppStream(rcBBox,2,CPWL_Color(COLORTYPE_GRAY,0),CPWL_Color(COLORTYPE_GRAY,1),CPWL_Color(COLORTYPE_GRAY,0.5),PBS_BEVELED,CPWL_Dash(3,0,0))
- << "Q\n";
-
- CPDF_Point ptCenter = CPDF_Point((rcBBox.left + rcBBox.right)/2,(rcBBox.top + rcBBox.bottom)/2);
- if (IsFloatBigger(rcBBox.right - rcBBox.left,6) && IsFloatBigger(rcBBox.top - rcBBox.bottom,6))
- {
- sAppStream << "q\n" << " 0 g\n";
- sAppStream << ptCenter.x - 3 << " " << ptCenter.y + 1.5f << " m\n";
- sAppStream << ptCenter.x + 3 << " " << ptCenter.y + 1.5f << " l\n";
- sAppStream << ptCenter.x << " " << ptCenter.y - 1.5f << " l\n";
- sAppStream << ptCenter.x - 3 << " " << ptCenter.y + 1.5f << " l f\n";
- sAppStream << "Q\n";
- }
- }
-
- return sAppStream.GetByteString();
-}
-
-void CPWL_Utils::ConvertCMYK2GRAY(FX_FLOAT dC,FX_FLOAT dM,FX_FLOAT dY,FX_FLOAT dK,FX_FLOAT &dGray)
-{
- if (dC<0 || dC>1 || dM<0 || dM>1 || dY < 0 || dY >1 || dK < 0 || dK >1)
- return;
- dGray = 1.0f - FX_MIN(1.0f,0.3f*dC+0.59f * dM + 0.11f*dY+dK);
-}
-
-void CPWL_Utils::ConvertGRAY2CMYK(FX_FLOAT dGray,FX_FLOAT &dC,FX_FLOAT &dM,FX_FLOAT &dY,FX_FLOAT &dK)
-{
- if (dGray <0 || dGray >1)
- return;
- dC = 0.0f;
- dM = 0.0f;
- dY = 0.0f;
- dK = 1.0f-dGray;
-}
-
-void CPWL_Utils::ConvertGRAY2RGB(FX_FLOAT dGray,FX_FLOAT &dR,FX_FLOAT &dG,FX_FLOAT &dB)
-{
- if (dGray <0 || dGray >1)
- return;
- dR = dGray;
- dG = dGray;
- dB = dGray;
-}
-
-void CPWL_Utils::ConvertRGB2GRAY(FX_FLOAT dR,FX_FLOAT dG,FX_FLOAT dB,FX_FLOAT &dGray)
-{
- if (dR<0 || dR>1 || dG<0 || dG > 0 || dB < 0 || dB >1)
- return;
- dGray = 0.3f*dR+0.59f*dG+0.11f*dB;
-}
-
-void CPWL_Utils::ConvertCMYK2RGB(FX_FLOAT dC,FX_FLOAT dM,FX_FLOAT dY,FX_FLOAT dK,FX_FLOAT &dR,FX_FLOAT &dG,FX_FLOAT &dB)
-{
- if (dC <0 || dC>1 || dM < 0 || dM > 1 || dY < 0 || dY > 1 || dK < 0 || dK > 1 )
- return;
- dR = 1.0f - FX_MIN(1.0f, dC + dK);
- dG = 1.0f - FX_MIN(1.0f, dM + dK);
- dB = 1.0f - FX_MIN(1.0f, dY + dK);
-}
-
-void CPWL_Utils::ConvertRGB2CMYK(FX_FLOAT dR,FX_FLOAT dG,FX_FLOAT dB,FX_FLOAT &dC,FX_FLOAT &dM,FX_FLOAT &dY,FX_FLOAT &dK)
-{
- if (dR<0 || dR>1 || dG<0 || dG>1 || dB<0 || dB>1)
- return;
-
- dC = 1.0f - dR;
- dM = 1.0f - dG;
- dY = 1.0f - dB;
- dK = FX_MIN(dC, FX_MIN(dM, dY));
-}
-
-void CPWL_Utils::PWLColorToARGB(const CPWL_Color& color, int32_t& alpha, FX_FLOAT& red, FX_FLOAT& green, FX_FLOAT& blue)
-{
- switch (color.nColorType)
- {
- case COLORTYPE_TRANSPARENT:
- {
- alpha = 0;
- }
- break;
- case COLORTYPE_GRAY:
- {
- ConvertGRAY2RGB(color.fColor1, red, green, blue);
- }
- break;
- case COLORTYPE_RGB:
- {
- red = color.fColor1;
- green = color.fColor2;
- blue = color.fColor3;
- }
- break;
- case COLORTYPE_CMYK:
- {
- ConvertCMYK2RGB(color.fColor1, color.fColor2, color.fColor3, color.fColor4,
- red, green, blue);
- }
- break;
- }
-}
-
-FX_COLORREF CPWL_Utils::PWLColorToFXColor(const CPWL_Color& color, int32_t nTransparancy)
-{
- int32_t nAlpha = nTransparancy;
- FX_FLOAT dRed = 0;
- FX_FLOAT dGreen = 0;
- FX_FLOAT dBlue = 0;
-
- PWLColorToARGB(color, nAlpha, dRed, dGreen, dBlue);
-
- return ArgbEncode(nAlpha, (int32_t)(dRed*255), (int32_t)(dGreen*255), (int32_t)(dBlue*255));
-}
-
-void CPWL_Utils::DrawFillRect(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device,const CPDF_Rect & rect,
- const FX_COLORREF & color)
-{
- CFX_PathData path;
- CPDF_Rect rcTemp(rect);
- path.AppendRect(rcTemp.left,rcTemp.bottom,rcTemp.right,rcTemp.top);
- pDevice->DrawPath(&path, pUser2Device, NULL, color, 0, FXFILL_WINDING);
-}
-
-void CPWL_Utils::DrawFillArea(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device,
- const CPDF_Point* pPts, int32_t nCount, const FX_COLORREF& color)
-{
- CFX_PathData path;
- path.SetPointCount(nCount);
-
- path.SetPoint(0, pPts[0].x, pPts[0].y, FXPT_MOVETO);
- for (int32_t i=1; i<nCount; i++)
- path.SetPoint(i, pPts[i].x, pPts[i].y, FXPT_LINETO);
-
- pDevice->DrawPath(&path, pUser2Device, NULL, color, 0, FXFILL_ALTERNATE);
-}
-
-void CPWL_Utils::DrawStrokeRect(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device,const CPDF_Rect & rect,
- const FX_COLORREF & color, FX_FLOAT fWidth)
-{
- CFX_PathData path;
- CPDF_Rect rcTemp(rect);
- path.AppendRect(rcTemp.left,rcTemp.bottom,rcTemp.right,rcTemp.top);
-
- CFX_GraphStateData gsd;
- gsd.m_LineWidth = fWidth;
-
- pDevice->DrawPath(&path, pUser2Device, &gsd, 0, color, FXFILL_ALTERNATE);
-}
-
-void CPWL_Utils::DrawStrokeLine(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device,
- const CPDF_Point & ptMoveTo, const CPDF_Point & ptLineTo, const FX_COLORREF & color, FX_FLOAT fWidth)
-{
- CFX_PathData path;
- path.SetPointCount(2);
- path.SetPoint(0, ptMoveTo.x, ptMoveTo.y, FXPT_MOVETO);
- path.SetPoint(1, ptLineTo.x, ptLineTo.y, FXPT_LINETO);
-
- CFX_GraphStateData gsd;
- gsd.m_LineWidth = fWidth;
-
- pDevice->DrawPath(&path, pUser2Device, &gsd, 0, color, FXFILL_ALTERNATE);
-}
-
-void CPWL_Utils::DrawFillRect(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device,const CPDF_Rect & rect,
- const CPWL_Color & color, int32_t nTransparancy)
-{
- CPWL_Utils::DrawFillRect(pDevice,pUser2Device,rect,PWLColorToFXColor(color,nTransparancy));
-}
-
-void CPWL_Utils::DrawShadow(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device,
- FX_BOOL bVertical, FX_BOOL bHorizontal, CPDF_Rect rect,
- int32_t nTransparancy, int32_t nStartGray, int32_t nEndGray)
-{
- FX_FLOAT fStepGray = 1.0f;
-
- if (bVertical)
- {
- fStepGray = (nEndGray - nStartGray) / rect.Height();
-
- for (FX_FLOAT fy=rect.bottom+0.5f; fy<=rect.top-0.5f; fy+=1.0f)
- {
- int32_t nGray = nStartGray + (int32_t)(fStepGray * (fy-rect.bottom));
- CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, CPDF_Point(rect.left, fy),
- CPDF_Point(rect.right, fy), ArgbEncode(nTransparancy, nGray, nGray, nGray), 1.5f);
- }
- }
-
- if (bHorizontal)
- {
- fStepGray = (nEndGray - nStartGray) / rect.Width();
-
- for (FX_FLOAT fx=rect.left+0.5f; fx<=rect.right-0.5f; fx+=1.0f)
- {
- int32_t nGray = nStartGray + (int32_t)(fStepGray * (fx-rect.left));
- CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, CPDF_Point(fx, rect.bottom),
- CPDF_Point(fx, rect.top), ArgbEncode(nTransparancy, nGray, nGray, nGray), 1.5f);
- }
- }
-}
-
-void CPWL_Utils::DrawBorder(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device,
- const CPDF_Rect & rect, FX_FLOAT fWidth,
- const CPWL_Color & color, const CPWL_Color & crLeftTop, const CPWL_Color & crRightBottom,
- int32_t nStyle, const CPWL_Dash & dash, int32_t nTransparancy)
-{
- FX_FLOAT fLeft = rect.left;
- FX_FLOAT fRight = rect.right;
- FX_FLOAT fTop = rect.top;
- FX_FLOAT fBottom = rect.bottom;
-
- if (fWidth > 0.0f)
- {
- FX_FLOAT fHalfWidth = fWidth / 2.0f;
-
- switch (nStyle)
- {
- default:
- case PBS_SOLID:
- {
- CFX_PathData path;
- path.AppendRect(fLeft, fBottom, fRight, fTop);
- path.AppendRect(fLeft + fWidth, fBottom + fWidth, fRight - fWidth, fTop - fWidth);
- pDevice->DrawPath(&path, pUser2Device, NULL, PWLColorToFXColor(color,nTransparancy), 0, FXFILL_ALTERNATE);
- }
- break;
- case PBS_DASH:
- {
- CFX_PathData path;
-
- path.SetPointCount(5);
- path.SetPoint(0, fLeft + fWidth / 2.0f, fBottom + fWidth / 2.0f, FXPT_MOVETO);
- path.SetPoint(1, fLeft + fWidth / 2.0f, fTop - fWidth / 2.0f, FXPT_LINETO);
- path.SetPoint(2, fRight - fWidth / 2.0f, fTop - fWidth / 2.0f, FXPT_LINETO);
- path.SetPoint(3, fRight - fWidth / 2.0f, fBottom + fWidth / 2.0f, FXPT_LINETO);
- path.SetPoint(4, fLeft + fWidth / 2.0f, fBottom + fWidth / 2.0f, FXPT_LINETO);
-
- CFX_GraphStateData gsd;
- gsd.SetDashCount(2);
- gsd.m_DashArray[0] = 3.0f;
- gsd.m_DashArray[1] = 3.0f;
- gsd.m_DashPhase = 0;
-
- gsd.m_LineWidth = fWidth;
- pDevice->DrawPath(&path, pUser2Device, &gsd, 0, PWLColorToFXColor(color,nTransparancy), FXFILL_WINDING);
- }
- break;
- case PBS_BEVELED:
- case PBS_INSET:
- {
- CFX_GraphStateData gsd;
- gsd.m_LineWidth = fHalfWidth;
-
- CFX_PathData pathLT;
-
- pathLT.SetPointCount(7);
- pathLT.SetPoint(0, fLeft + fHalfWidth, fBottom + fHalfWidth, FXPT_MOVETO);
- pathLT.SetPoint(1, fLeft + fHalfWidth, fTop - fHalfWidth, FXPT_LINETO);
- pathLT.SetPoint(2, fRight - fHalfWidth, fTop - fHalfWidth, FXPT_LINETO);
- pathLT.SetPoint(3, fRight - fHalfWidth * 2, fTop - fHalfWidth * 2, FXPT_LINETO);
- pathLT.SetPoint(4, fLeft + fHalfWidth * 2, fTop - fHalfWidth * 2, FXPT_LINETO);
- pathLT.SetPoint(5, fLeft + fHalfWidth * 2, fBottom + fHalfWidth * 2, FXPT_LINETO);
- pathLT.SetPoint(6, fLeft + fHalfWidth, fBottom + fHalfWidth, FXPT_LINETO);
-
- pDevice->DrawPath(&pathLT, pUser2Device, &gsd, PWLColorToFXColor(crLeftTop,nTransparancy), 0, FXFILL_ALTERNATE);
-
- CFX_PathData pathRB;
-
- pathRB.SetPointCount(7);
- pathRB.SetPoint(0, fRight - fHalfWidth, fTop - fHalfWidth, FXPT_MOVETO);
- pathRB.SetPoint(1, fRight - fHalfWidth, fBottom + fHalfWidth, FXPT_LINETO);
- pathRB.SetPoint(2, fLeft + fHalfWidth, fBottom + fHalfWidth, FXPT_LINETO);
- pathRB.SetPoint(3, fLeft + fHalfWidth * 2, fBottom + fHalfWidth * 2, FXPT_LINETO);
- pathRB.SetPoint(4, fRight - fHalfWidth * 2, fBottom + fHalfWidth * 2, FXPT_LINETO);
- pathRB.SetPoint(5, fRight - fHalfWidth * 2, fTop - fHalfWidth * 2, FXPT_LINETO);
- pathRB.SetPoint(6, fRight - fHalfWidth, fTop - fHalfWidth, FXPT_LINETO);
-
- pDevice->DrawPath(&pathRB, pUser2Device, &gsd, PWLColorToFXColor(crRightBottom,nTransparancy), 0, FXFILL_ALTERNATE);
-
- CFX_PathData path;
-
- path.AppendRect(fLeft, fBottom, fRight, fTop);
- path.AppendRect(fLeft + fHalfWidth, fBottom + fHalfWidth, fRight - fHalfWidth, fTop - fHalfWidth);
-
- pDevice->DrawPath(&path, pUser2Device, &gsd, PWLColorToFXColor(color,nTransparancy), 0, FXFILL_ALTERNATE);
- }
- break;
- case PBS_UNDERLINED:
- {
- CFX_PathData path;
-
- path.SetPointCount(2);
- path.SetPoint(0, fLeft, fBottom + fWidth / 2, FXPT_MOVETO);
- path.SetPoint(1, fRight, fBottom + fWidth / 2, FXPT_LINETO);
-
- CFX_GraphStateData gsd;
- gsd.m_LineWidth = fWidth;
-
- pDevice->DrawPath(&path, pUser2Device, &gsd,0, PWLColorToFXColor(color,nTransparancy), FXFILL_ALTERNATE);
- }
- break;
- case PBS_SHADOW:
- {
- CFX_PathData path;
- path.AppendRect(fLeft, fBottom, fRight, fTop);
- path.AppendRect(fLeft + fWidth, fBottom + fWidth, fRight - fWidth, fTop - fWidth);
- pDevice->DrawPath(&path, pUser2Device, NULL, PWLColorToFXColor(color,nTransparancy/2), 0, FXFILL_ALTERNATE);
- }
- break;
- }
- }
-}
-
-static void AddSquigglyPath(CFX_PathData & PathData, FX_FLOAT fStartX, FX_FLOAT fEndX, FX_FLOAT fY, FX_FLOAT fStep)
-{
- PathData.AddPointCount(1);
- PathData.SetPoint(PathData.GetPointCount() - 1, fStartX, fY, FXPT_MOVETO);
-
- FX_FLOAT fx;
- int32_t i;
-
- for (i=1,fx=fStartX+fStep; fx<fEndX; fx+=fStep,i++)
- {
- PathData.AddPointCount(1);
- PathData.SetPoint(PathData.GetPointCount() - 1, fx, fY + (i&1)*fStep, FXPT_LINETO);
- }
-}
-
-static void AddSpellCheckObj(CFX_PathData & PathData, IFX_Edit* pEdit, const CPVT_WordRange& wrWord)
-{
- FX_FLOAT fStartX = 0.0f;
- FX_FLOAT fEndX = 0.0f;
- FX_FLOAT fY = 0.0f;
- FX_FLOAT fStep = 0.0f;
-
- FX_BOOL bBreak = FALSE;
-
- if (IFX_Edit_Iterator* pIterator = pEdit->GetIterator())
- {
- pIterator->SetAt(wrWord.BeginPos);
-
- do
- {
- CPVT_WordPlace place = pIterator->GetAt();
-
- CPVT_Line line;
- if (pIterator->GetLine(line))
- {
- fY = line.ptLine.y;
- fStep = (line.fLineAscent - line.fLineDescent) / 16.0f;
- }
-
- if (place.LineCmp(wrWord.BeginPos) == 0)
- {
- pIterator->SetAt(wrWord.BeginPos);
- CPVT_Word word;
- if (pIterator->GetWord(word))
- {
- fStartX = word.ptWord.x;
- }
- }
- else
- {
- fStartX = line.ptLine.x;
- }
-
- if (place.LineCmp(wrWord.EndPos) == 0)
- {
- pIterator->SetAt(wrWord.EndPos);
- CPVT_Word word;
- if (pIterator->GetWord(word))
- {
- fEndX = word.ptWord.x + word.fWidth;
- }
-
- bBreak = TRUE;
- }
- else
- {
- fEndX = line.ptLine.x + line.fLineWidth;
- }
-
- AddSquigglyPath(PathData, fStartX, fEndX, fY, fStep);
-
- if (bBreak) break;
- }
- while (pIterator->NextLine());
- }
-}
-
-void CPWL_Utils::DrawEditSpellCheck(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device, IFX_Edit* pEdit,
- const CPDF_Rect& rcClip, const CPDF_Point& ptOffset, const CPVT_WordRange* pRange,
- IPWL_SpellCheck * pSpellCheck)
-{
- const FX_COLORREF crSpell = ArgbEncode(255,255,0,0);
-
- //for spellcheck
- FX_BOOL bLatinWord = FALSE;
- CPVT_WordPlace wpWordStart;
- CFX_ByteString sLatinWord;
-
- CFX_PathData pathSpell;
-
- pDevice->SaveState();
-
- if (!rcClip.IsEmpty())
- {
- CPDF_Rect rcTemp = rcClip;
- pUser2Device->TransformRect(rcTemp);
- FX_RECT rcDevClip;
- rcDevClip.left = (int32_t)rcTemp.left;
- rcDevClip.right = (int32_t)rcTemp.right;
- rcDevClip.top = (int32_t)rcTemp.top;
- rcDevClip.bottom = (int32_t)rcTemp.bottom;
- pDevice->SetClip_Rect(&rcDevClip);
- }
-
- if (IFX_Edit_Iterator* pIterator = pEdit->GetIterator())
- {
- if (pEdit->GetFontMap())
- {
- if (pRange)
- pIterator->SetAt(pRange->BeginPos);
- else
- pIterator->SetAt(0);
-
- CPVT_WordPlace oldplace;
-
- while (pIterator->NextWord())
- {
- CPVT_WordPlace place = pIterator->GetAt();
- if (pRange && place.WordCmp(pRange->EndPos) > 0) break;
-
- CPVT_Word word;
- if (pIterator->GetWord(word))
- {
- if (FX_EDIT_ISLATINWORD(word.Word))
- {
- if (!bLatinWord)
- {
- wpWordStart = place;
- bLatinWord = TRUE;
- }
-
- sLatinWord += (char)word.Word;
- }
- else
- {
- if (bLatinWord)
- {
- if (!sLatinWord.IsEmpty())
- {
- if (pSpellCheck && !pSpellCheck->CheckWord(sLatinWord))
- {
- AddSpellCheckObj(pathSpell,pEdit,CPVT_WordRange(wpWordStart,oldplace));
- pIterator->SetAt(place);
- }
- }
- bLatinWord = FALSE;
- }
-
- sLatinWord.Empty();
- }
-
- oldplace = place;
- }
- else
- {
- if (bLatinWord)
- {
- if (!sLatinWord.IsEmpty())
- {
- if (pSpellCheck && !pSpellCheck->CheckWord(sLatinWord))
- {
- AddSpellCheckObj(pathSpell,pEdit,CPVT_WordRange(wpWordStart,oldplace));
- pIterator->SetAt(place);
- }
- }
- bLatinWord = FALSE;
- }
-
- sLatinWord.Empty();
- }
- }
-
- if (!sLatinWord.IsEmpty())
- {
- if (pSpellCheck && !pSpellCheck->CheckWord(sLatinWord))
- {
- AddSpellCheckObj(pathSpell,pEdit,CPVT_WordRange(wpWordStart,oldplace));
- }
- }
- }
- }
-
- CFX_GraphStateData gsd;
- gsd.m_LineWidth = 0;
- if (pathSpell.GetPointCount() > 0)
- pDevice->DrawPath(&pathSpell, pUser2Device, &gsd, 0, crSpell, FXFILL_ALTERNATE);
-
- pDevice->RestoreState();
-}
-
-FX_BOOL CPWL_Utils::IsBlackOrWhite(const CPWL_Color& color)
-{
- switch (color.nColorType)
- {
- case COLORTYPE_TRANSPARENT:
- return FALSE;
- case COLORTYPE_GRAY:
- return color.fColor1 < 0.5f;
- case COLORTYPE_RGB:
- return color.fColor1 + color.fColor2 + color.fColor3 < 1.5f;
- case COLORTYPE_CMYK:
- return color.fColor1 + color.fColor2 + color.fColor3 + color.fColor4 > 2.0f;
- }
-
- return TRUE;
-}
-
-CPWL_Color CPWL_Utils::GetReverseColor(const CPWL_Color& color)
-{
- CPWL_Color crRet = color;
-
- switch (color.nColorType)
- {
- case COLORTYPE_GRAY:
- crRet.fColor1 = 1.0f - crRet.fColor1;
- break;
- case COLORTYPE_RGB:
- crRet.fColor1 = 1.0f - crRet.fColor1;
- crRet.fColor2 = 1.0f - crRet.fColor2;
- crRet.fColor3 = 1.0f - crRet.fColor3;
- break;
- case COLORTYPE_CMYK:
- crRet.fColor1 = 1.0f - crRet.fColor1;
- crRet.fColor2 = 1.0f - crRet.fColor2;
- crRet.fColor3 = 1.0f - crRet.fColor3;
- crRet.fColor4 = 1.0f - crRet.fColor4;
- break;
- }
-
- return crRet;
-}
-
-CFX_ByteString CPWL_Utils::GetIconAppStream(int32_t nType, const CPDF_Rect& rect, const CPWL_Color& crFill,
- const CPWL_Color& crStroke)
-{
- CFX_ByteString sAppStream = CPWL_Utils::GetColorAppStream(crStroke, FALSE);
- sAppStream += CPWL_Utils::GetColorAppStream(crFill, TRUE);
-
- CFX_ByteString sPath;
- CFX_PathData path;
-
- switch (nType)
- {
- case PWL_ICONTYPE_CHECKMARK:
- GetGraphics_Checkmark(sPath, path, rect, PWLPT_STREAM);
- break;
- case PWL_ICONTYPE_CIRCLE:
- GetGraphics_Circle(sPath, path, rect, PWLPT_STREAM);
- break;
- case PWL_ICONTYPE_COMMENT:
- GetGraphics_Comment(sPath, path, rect, PWLPT_STREAM);
- break;
- case PWL_ICONTYPE_CROSS:
- GetGraphics_Cross(sPath, path, rect, PWLPT_STREAM);
- break;
- case PWL_ICONTYPE_HELP:
- GetGraphics_Help(sPath, path, rect, PWLPT_STREAM);
- break;
- case PWL_ICONTYPE_INSERTTEXT:
- GetGraphics_InsertText(sPath, path, rect, PWLPT_STREAM);
- break;
- case PWL_ICONTYPE_KEY:
- GetGraphics_Key(sPath, path, rect, PWLPT_STREAM);
- break;
- case PWL_ICONTYPE_NEWPARAGRAPH:
- GetGraphics_NewParagraph(sPath, path, rect, PWLPT_STREAM);
- break;
- case PWL_ICONTYPE_TEXTNOTE:
- GetGraphics_TextNote(sPath, path, rect, PWLPT_STREAM);
- break;
- case PWL_ICONTYPE_PARAGRAPH:
- GetGraphics_Paragraph(sPath, path, rect, PWLPT_STREAM);
- break;
- case PWL_ICONTYPE_RIGHTARROW:
- GetGraphics_RightArrow(sPath, path, rect, PWLPT_STREAM);
- break;
- case PWL_ICONTYPE_RIGHTPOINTER:
- GetGraphics_RightPointer(sPath, path, rect, PWLPT_STREAM);
- break;
- case PWL_ICONTYPE_STAR:
- GetGraphics_Star(sPath, path, rect, PWLPT_STREAM);
- break;
- case PWL_ICONTYPE_UPARROW:
- GetGraphics_UpArrow(sPath, path, rect, PWLPT_STREAM);
- break;
- case PWL_ICONTYPE_UPLEFTARROW:
- GetGraphics_UpLeftArrow(sPath, path, rect, PWLPT_STREAM);
- break;
- case PWL_ICONTYPE_GRAPH:
- GetGraphics_Graph(sPath, path, rect, PWLPT_STREAM);
- break;
- case PWL_ICONTYPE_PAPERCLIP:
- GetGraphics_Paperclip(sPath, path, rect, PWLPT_STREAM);
- break;
- case PWL_ICONTYPE_ATTACHMENT:
- GetGraphics_Attachment(sPath, path, rect, PWLPT_STREAM);
- break;
- case PWL_ICONTYPE_TAG:
- GetGraphics_Tag(sPath, path, rect, PWLPT_STREAM);
- break;
- case PWL_ICONTYPE_FOXIT:
- GetGraphics_Foxit(sPath, path, rect, PWLPT_STREAM);
- break;
- }
-
- sAppStream += sPath;
- if (crStroke.nColorType != COLORTYPE_TRANSPARENT)
- sAppStream += "B*\n";
- else
- sAppStream += "f*\n";
-
- return sAppStream;
-}
-
-void CPWL_Utils::DrawIconAppStream(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device,
- int32_t nType, const CPDF_Rect & rect, const CPWL_Color& crFill, const CPWL_Color& crStroke, const int32_t nTransparancy)
-{
- CFX_GraphStateData gsd;
- gsd.m_LineWidth = 1.0f;
-
- CFX_ByteString sPath;
- CFX_PathData path;
-
- switch (nType)
- {
- case PWL_ICONTYPE_CHECKMARK:
- GetGraphics_Checkmark(sPath, path, rect, PWLPT_PATHDATA);
- break;
- case PWL_ICONTYPE_CIRCLE:
- GetGraphics_Circle(sPath, path, rect, PWLPT_PATHDATA);
- break;
- case PWL_ICONTYPE_COMMENT:
- GetGraphics_Comment(sPath, path, rect, PWLPT_PATHDATA);
- break;
- case PWL_ICONTYPE_CROSS:
- GetGraphics_Cross(sPath, path, rect, PWLPT_PATHDATA);
- break;
- case PWL_ICONTYPE_HELP:
- GetGraphics_Help(sPath, path, rect, PWLPT_PATHDATA);
- break;
- case PWL_ICONTYPE_INSERTTEXT:
- GetGraphics_InsertText(sPath, path, rect, PWLPT_PATHDATA);
- break;
- case PWL_ICONTYPE_KEY:
- GetGraphics_Key(sPath, path, rect, PWLPT_PATHDATA);
- break;
- case PWL_ICONTYPE_NEWPARAGRAPH:
- GetGraphics_NewParagraph(sPath, path, rect, PWLPT_PATHDATA);
- break;
- case PWL_ICONTYPE_TEXTNOTE:
- GetGraphics_TextNote(sPath, path, rect, PWLPT_PATHDATA);
- break;
- case PWL_ICONTYPE_PARAGRAPH:
- GetGraphics_Paragraph(sPath, path, rect, PWLPT_PATHDATA);
- break;
- case PWL_ICONTYPE_RIGHTARROW:
- GetGraphics_RightArrow(sPath, path, rect, PWLPT_PATHDATA);
- break;
- case PWL_ICONTYPE_RIGHTPOINTER:
- GetGraphics_RightPointer(sPath, path, rect, PWLPT_PATHDATA);
- break;
- case PWL_ICONTYPE_STAR:
- GetGraphics_Star(sPath, path, rect, PWLPT_PATHDATA);
- break;
- case PWL_ICONTYPE_UPARROW:
- GetGraphics_UpArrow(sPath, path, rect, PWLPT_PATHDATA);
- break;
- case PWL_ICONTYPE_UPLEFTARROW:
- GetGraphics_UpLeftArrow(sPath, path, rect, PWLPT_PATHDATA);
- break;
- case PWL_ICONTYPE_GRAPH:
- GetGraphics_Graph(sPath, path, rect, PWLPT_PATHDATA);
- break;
- case PWL_ICONTYPE_PAPERCLIP:
- GetGraphics_Paperclip(sPath, path, rect, PWLPT_PATHDATA);
- break;
- case PWL_ICONTYPE_ATTACHMENT:
- GetGraphics_Attachment(sPath, path, rect, PWLPT_PATHDATA);
- break;
- case PWL_ICONTYPE_TAG:
- GetGraphics_Tag(sPath, path, rect, PWLPT_PATHDATA);
- break;
- case PWL_ICONTYPE_FOXIT:
- GetGraphics_Foxit(sPath, path, rect, PWLPT_PATHDATA);
- break;
- default:
- return;
- }
-
- pDevice->DrawPath(&path, pUser2Device, &gsd,
- PWLColorToFXColor(crFill,nTransparancy), PWLColorToFXColor(crStroke,nTransparancy), FXFILL_ALTERNATE);
-}
-
-void CPWL_Utils::GetGraphics_Checkmark(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type)
-{
- FX_FLOAT fWidth = crBBox.right - crBBox.left;
- FX_FLOAT fHeight = crBBox.top - crBBox.bottom;
-
- CPWL_PathData PathArray[] =
- {
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 15.0f, crBBox.bottom + fHeight * 2 / 5.0f),PWLPT_MOVETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 15.0f + PWL_BEZIER*(fWidth / 7.0f - fWidth / 15.0f),
- crBBox.bottom + fHeight * 2 / 5.0f + PWL_BEZIER*(fHeight * 2 / 7.0f - fHeight * 2 / 5.0f)), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 4.5f + PWL_BEZIER*(fWidth / 5.0f - fWidth / 4.5f),
- crBBox.bottom + fHeight / 16.0f + PWL_BEZIER*(fHeight / 5.0f - fHeight / 16.0f)), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 4.5f, crBBox.bottom + fHeight / 16.0f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 4.5f + PWL_BEZIER*(fWidth / 4.4f - fWidth / 4.5f),
- crBBox.bottom + fHeight / 16.0f - PWL_BEZIER*fHeight / 16.0f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 3.0f + PWL_BEZIER*(fWidth / 4.0f - fWidth / 3.0f),
- crBBox.bottom), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 3.0f, crBBox.bottom), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 3.0f + PWL_BEZIER*fWidth*(1/7.0f + 2/15.0f),
- crBBox.bottom + PWL_BEZIER*fHeight * 4 / 5.0f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 14 / 15.0f + PWL_BEZIER*fWidth*(1/7.0f - 7/15.0f),
- crBBox.bottom + fHeight * 15/16.0f + PWL_BEZIER*(fHeight * 4/5.0f - fHeight * 15/16.0f)), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 14 / 15.0f,crBBox.bottom + fHeight * 15 / 16.0f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 14 / 15.0f + PWL_BEZIER*(fWidth * 7 / 15.0f - fWidth * 14 / 15.0f),
- crBBox.bottom + fHeight * 15 / 16.0f + PWL_BEZIER*(fHeight * 8 / 7.0f - fHeight * 15 / 16.0f)), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 3.6f + PWL_BEZIER*(fWidth / 3.4f - fWidth / 3.6f),
- crBBox.bottom + fHeight / 3.5f + PWL_BEZIER*(fHeight / 3.5f - fHeight / 3.5f)), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 3.6f,crBBox.bottom + fHeight / 3.5f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 3.6f,
- crBBox.bottom + fHeight / 3.5f + PWL_BEZIER*(fHeight / 4.0f - fHeight / 3.5f)), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 15.0f + PWL_BEZIER*(fWidth / 3.5f - fWidth / 15.0f),
- crBBox.bottom + fHeight * 2 / 5.0f + PWL_BEZIER*(fHeight * 3.5f / 5.0f - fHeight * 2 / 5.0f)), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 15.0f,crBBox.bottom + fHeight * 2 / 5.0f), PWLPT_BEZIERTO)
- };
-
- if(type == PWLPT_STREAM)
- sPathData = GetAppStreamFromArray(PathArray, 16);
- else
- GetPathDataFromArray(path, PathArray, 16);
-}
-
-void CPWL_Utils::GetGraphics_Circle(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type)
-{
- FX_FLOAT fWidth = crBBox.right - crBBox.left;
- FX_FLOAT fHeight = crBBox.top - crBBox.bottom;
-
- CPWL_PathData PathArray[] =
- {
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth/15.0f,crBBox.bottom + fHeight/2.0f), PWLPT_MOVETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth/15.0f,
- crBBox.bottom + fHeight/2.0f + PWL_BEZIER*(fHeight*14/15.0f - fHeight/2.0f)), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth/2.0f - PWL_BEZIER*(fWidth/2.0f - fWidth/15.0f), crBBox.top - fHeight/15.0f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth/2.0f,crBBox.top - fHeight/15.0f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth/2.0f + PWL_BEZIER*(fWidth*14/15.0f - fWidth/2.0f), crBBox.top - fHeight/15.0f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth/15.0f, crBBox.bottom + fHeight/2.0f + PWL_BEZIER*(fHeight*14/15.0f - fHeight/2.0f)), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth/15.0f, crBBox.bottom + fHeight/2.0f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth/15.0f, crBBox.bottom + fHeight/2.0f - PWL_BEZIER*(fHeight/2.0f - fHeight/15.0f)), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth/2.0f + PWL_BEZIER*(fWidth*14/15.0f - fWidth/2.0f), crBBox.bottom + fHeight/15.0f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth/2.0f, crBBox.bottom + fHeight/15.0f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth/2.0f - PWL_BEZIER*(fWidth/2.0f - fWidth/15.0f), crBBox.bottom + fHeight/15.0f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth/15.0f, crBBox.bottom + fHeight/2.0f - PWL_BEZIER*(fHeight/2.0f - fHeight/15.0f)), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth/15.0f,crBBox.bottom + fHeight/2.0f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*3/15.0f, crBBox.bottom + fHeight/2.0f), PWLPT_MOVETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*3/15.0f, crBBox.bottom + fHeight/2.0f + PWL_BEZIER*(fHeight*4/5.0f - fHeight/2.0f)), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth/2.0f - PWL_BEZIER*(fWidth/2.0f - fWidth*3/15.0f), crBBox.top - fHeight*3/15.0f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth/2.0f, crBBox.top - fHeight*3/15.0f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth/2.0f + PWL_BEZIER*(fWidth*4/5.0f - fWidth/2.0f), crBBox.top - fHeight*3/15.0f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth*3/15.0f, crBBox.bottom + fHeight/2.0f + PWL_BEZIER*(fHeight*4/5.0f - fHeight/2.0f)), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth*3/15.0f, crBBox.bottom + fHeight/2.0f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth*3/15.0f, crBBox.bottom + fHeight/2.0f - PWL_BEZIER*(fHeight*4/5.0f - fHeight/2.0f)), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth/2.0f + PWL_BEZIER*(fWidth*4/5.0f - fWidth/2.0f), crBBox.bottom + fHeight*3/15.0f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth/2.0f, crBBox.bottom + fHeight*3/15.0f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth/2.0f - PWL_BEZIER*(fWidth*4/5.0f - fWidth/2.0f), crBBox.bottom + fHeight*3/15.0f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*3/15.0f, crBBox.bottom + fHeight/2.0f - PWL_BEZIER*(fHeight*4/5.0f - fHeight/2.0f)), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*3/15.0f, crBBox.bottom + fHeight/2.0f), PWLPT_BEZIERTO)
- };
-
- if(type == PWLPT_STREAM)
- sPathData = GetAppStreamFromArray(PathArray, 26);
- else
- GetPathDataFromArray(path, PathArray, 26);
-}
-
-void CPWL_Utils::GetGraphics_Comment(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type)
-{
- FX_FLOAT fWidth = crBBox.right - crBBox.left;
- FX_FLOAT fHeight = crBBox.top - crBBox.bottom;
-
- CPWL_PathData PathArray[] =
- {
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth/15.0f, crBBox.top - fHeight/6.0f), PWLPT_MOVETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth/15.0f, crBBox.top - fHeight/6.0f + PWL_BEZIER*(fHeight/6.0f - fHeight/10.0f)), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*2/15.0f - PWL_BEZIER*fWidth/15.0f, crBBox.top - fHeight/10.0f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*2/15.0f, crBBox.top - fHeight/10.0f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth*2/15.0f, crBBox.top - fHeight/10.0f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth*2/15.0f + PWL_BEZIER*fWidth/15.0f, crBBox.top - fHeight/10.0f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth/15.0f, crBBox.top - fHeight/6 + PWL_BEZIER*(fHeight/6.0f - fHeight/10.0f)), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth/15.0f, crBBox.top - fHeight/6.0f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth/15.0f, crBBox.bottom + fHeight/3.0f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth/15.0f, crBBox.bottom + fHeight*4/15.0f + PWL_BEZIER*fHeight/15.0f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth*2/15.0f + PWL_BEZIER*fWidth/15.0f, crBBox.bottom + fHeight*4/15.0f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth*2/15.0f, crBBox.bottom + fHeight*4/15.0f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*5/15.0f, crBBox.bottom + fHeight*4/15.0f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*5/15.0f, crBBox.bottom + fHeight*2/15 + PWL_BEZIER*fHeight*2/15.0f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*5/15.0f - PWL_BEZIER*fWidth*2/15.0f, crBBox.bottom + fHeight*2/15.0f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*6/30.0f, crBBox.bottom + fHeight*2/15.0f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*7/30.0f + PWL_BEZIER*fWidth/30.0f, crBBox.bottom + fHeight*2/15.0f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*7/30.0f, crBBox.bottom + fHeight*2/15.0f + PWL_BEZIER*fHeight*2/15.0f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*7/30.0f, crBBox.bottom + fHeight*4/15.0f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*2/15.0f, crBBox.bottom + fHeight*4/15.0f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*2/15.0f - PWL_BEZIER*fWidth/15.0f, crBBox.bottom + fHeight*4/15.0f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth/15.0f, crBBox.bottom + fHeight/3.0f - PWL_BEZIER*fHeight/15.0f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth/15.0f, crBBox.bottom + fHeight/3.0f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth/15.0f, crBBox.top - fHeight/6.0f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*2/15.0f, crBBox.top - fHeight*8/30.0f), PWLPT_MOVETO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth*2/15.0f, crBBox.top - fHeight*8/30.0f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*2/15, crBBox.top - fHeight*25/60.0f), PWLPT_MOVETO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth*2/15.0f, crBBox.top - fHeight*25/60.0f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*2/15.0f, crBBox.top - fHeight*17/30.0f), PWLPT_MOVETO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth*4/15.0f, crBBox.top - fHeight*17/30.0f), PWLPT_LINETO)
- };
-
- if(type == PWLPT_STREAM)
- sPathData = GetAppStreamFromArray(PathArray, 30);
- else
- GetPathDataFromArray(path, PathArray, 30);
-}
-
-void CPWL_Utils::GetGraphics_Cross(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type)
-{
- FX_FLOAT fWidth = crBBox.right - crBBox.left;
- FX_FLOAT fHeight = crBBox.top - crBBox.bottom;
- //FX_FLOAT fcatercorner = (FX_FLOAT)sqrt(fWidth*fWidth + fHeight*fHeight);
- CPWL_Point center_point(crBBox.left + fWidth/2, crBBox.bottom + fHeight/2);
-
- CPWL_PathData PathArray[] =
- {
- CPWL_PathData(CPWL_Point(center_point.x, center_point.y + fHeight/10.0f), PWLPT_MOVETO),
- CPWL_PathData(CPWL_Point(center_point.x + fWidth*0.3f, center_point.y + fHeight/10.0f + fWidth*0.3f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(center_point.x + fWidth/10.0f + fWidth*0.3f, center_point.y + fHeight*0.3f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(center_point.x + fWidth/10.0f, center_point.y), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(center_point.x + fWidth/10.0f + fWidth*0.3f, center_point.y - fHeight*0.3f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(center_point.x + fWidth*0.3f, center_point.y - fHeight/10.0f - fHeight*0.3f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(center_point.x, center_point.y - fHeight/10.0f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(center_point.x - fWidth*0.3f, center_point.y - fHeight/10 - fHeight*0.3f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(center_point.x - fWidth/10.0f - fWidth*0.3f, center_point.y - fHeight*0.3f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(center_point.x - fWidth/10, center_point.y), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(center_point.x - fWidth/10 - fWidth*0.3f, center_point.y + fHeight*0.3f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(center_point.x - fWidth*0.3f, center_point.y + fHeight/10.0f + fHeight*0.3f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(center_point.x, center_point.y + fHeight/10.0f), PWLPT_LINETO)
- };
-
- if(type == PWLPT_STREAM)
- sPathData = GetAppStreamFromArray(PathArray, 13);
- else
- GetPathDataFromArray(path, PathArray, 13);
-}
-
-void CPWL_Utils::GetGraphics_Help(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type)
-{
- FX_FLOAT fWidth = crBBox.right - crBBox.left;
- FX_FLOAT fHeight = crBBox.top - crBBox.bottom;
-
- CPWL_PathData PathArray[] =
- {
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth/60.0f, crBBox.bottom + fHeight/2.0f), PWLPT_MOVETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth/60.0f, crBBox.bottom + fHeight/2.0f + PWL_BEZIER*(fHeight/60.0f - fHeight/2.0f)), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth/2.0f - PWL_BEZIER*(fWidth/2.0f - fWidth/60.0f), crBBox.bottom + fHeight/60.0f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth/2.0f, crBBox.bottom + fHeight/60.0f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth/2.0f + PWL_BEZIER*fWidth*29/60.0f, crBBox.bottom + fHeight/60.0f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth/60.0f, crBBox.bottom + fHeight/2.0f + PWL_BEZIER*(fHeight/60.0f - fHeight/2.0f)), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth/60.0f, crBBox.bottom + fHeight/2.0f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth/60.0f, crBBox.bottom + fHeight/2.0f + PWL_BEZIER*fHeight*29/60.0f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth/2.0f + PWL_BEZIER*fWidth*29/60.0f, crBBox.top - fHeight/60.0f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth/2.0f, crBBox.top - fHeight/60.0f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth/2.0f - PWL_BEZIER*fWidth*29/60.0f, crBBox.top - fHeight/60.0f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth/60.0f, crBBox.bottom + fHeight/2.0f + PWL_BEZIER*fHeight*29/60.0f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth/60.0f, crBBox.bottom + fHeight/2.0f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.27f, crBBox.top - fHeight*0.36f), PWLPT_MOVETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.27f, crBBox.top - fHeight*0.36f + PWL_BEZIER*fHeight*0.23f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.5f - PWL_BEZIER*fWidth*0.23f, crBBox.bottom + fHeight*0.87f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.5f, crBBox.bottom + fHeight*0.87f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.5f + PWL_BEZIER*fWidth*0.23f, crBBox.bottom + fHeight*0.87f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth*0.27f, crBBox.top - fHeight*0.36f + PWL_BEZIER*fHeight*0.23f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth*0.27f, crBBox.top - fHeight*0.36f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth*0.27f - fWidth*0.08f*0.2f, crBBox.top - fHeight*0.36f - fHeight*0.15f*0.7f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth*0.35f + fWidth*0.08f*0.2f, crBBox.top - fHeight*0.51f + fHeight*0.15f*0.2f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth*0.35f, crBBox.top - fHeight*0.51f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth*0.35f - fWidth*0.1f*0.5f, crBBox.top - fHeight*0.51f - fHeight*0.15f*0.3f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth*0.45f - fWidth*0.1f*0.5f, crBBox.top - fHeight*0.68f + fHeight*0.15f*0.5f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth*0.45f, crBBox.top - fHeight*0.68f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth*0.45f, crBBox.bottom + fHeight*0.30f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth*0.45f, crBBox.bottom + fHeight*0.30f - fWidth*0.1f*0.7f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth*0.55f, crBBox.bottom + fHeight*0.30f - fWidth*0.1f*0.7f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth*0.55f, crBBox.bottom + fHeight*0.30f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth*0.55f, crBBox.top - fHeight*0.66f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth*0.55f - fWidth*0.1f*0.05f, crBBox.top - fHeight*0.66f + fHeight*0.18f*0.5f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth*0.45f - fWidth*0.1f*0.05f, crBBox.top - fHeight*0.48f - fHeight*0.18f*0.3f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth*0.45f, crBBox.top - fHeight*0.48f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth*0.45f + fWidth*0.08f*0.2f, crBBox.top - fHeight*0.48f + fHeight*0.18f*0.2f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth*0.37f - fWidth*0.08f*0.2f, crBBox.top - fHeight*0.36f - fHeight*0.18f*0.7f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth*0.37f, crBBox.top - fHeight*0.36f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth*0.37f, crBBox.top - fHeight*0.36f + PWL_BEZIER*fHeight*0.13f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.5f + PWL_BEZIER*fWidth*0.13f, crBBox.bottom + fHeight*0.77f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.5f, crBBox.bottom + fHeight*0.77f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.5f - PWL_BEZIER*fWidth*0.13f, crBBox.bottom + fHeight*0.77f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.37f, crBBox.top - fHeight*0.36f + PWL_BEZIER*fHeight*0.13f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.37f, crBBox.top - fHeight*0.36f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.37f, crBBox.top - fHeight*0.36f - fWidth*0.1f*0.6f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.27f, crBBox.top - fHeight*0.36f - fWidth*0.1f*0.6f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.27f, crBBox.top - fHeight*0.36f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth*0.56f, crBBox.bottom + fHeight*0.13f), PWLPT_MOVETO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth*0.56f, crBBox.bottom + fHeight*0.13f + PWL_BEZIER*fHeight*0.055f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth*0.505f - PWL_BEZIER*fWidth*0.095f, crBBox.bottom + fHeight*0.185f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth*0.505f, crBBox.bottom + fHeight*0.185f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth*0.505f + PWL_BEZIER*fWidth*0.065f, crBBox.bottom + fHeight*0.185f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth*0.44f, crBBox.bottom + fHeight*0.13f + PWL_BEZIER*fHeight*0.055f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth*0.44f, crBBox.bottom + fHeight*0.13f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth*0.44f, crBBox.bottom + fHeight*0.13f - PWL_BEZIER*fHeight*0.055f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth*0.505f + PWL_BEZIER*fWidth*0.065f, crBBox.bottom + fHeight*0.075f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth*0.505f, crBBox.bottom + fHeight*0.075f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth*0.505f - PWL_BEZIER*fWidth*0.065f, crBBox.bottom + fHeight*0.075f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth*0.56f, crBBox.bottom + fHeight*0.13f - PWL_BEZIER*fHeight*0.055f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth*0.56f, crBBox.bottom + fHeight*0.13f), PWLPT_BEZIERTO)
- };
-
- if(type == PWLPT_STREAM)
- sPathData = GetAppStreamFromArray(PathArray, 59);
- else
- GetPathDataFromArray(path, PathArray, 59);
-}
-
-void CPWL_Utils::GetGraphics_InsertText(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type)
-{
- FX_FLOAT fWidth = crBBox.right - crBBox.left;
- FX_FLOAT fHeight = crBBox.top - crBBox.bottom;
-
- CPWL_PathData PathArray[] =
- {
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth/10, crBBox.bottom + fHeight/10), PWLPT_MOVETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth/2, crBBox.top - fHeight*2/15), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth/10, crBBox.bottom + fHeight/10), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth/10, crBBox.bottom + fHeight/10), PWLPT_LINETO)
- };
-
- if(type == PWLPT_STREAM)
- sPathData = GetAppStreamFromArray(PathArray, 4);
- else
- GetPathDataFromArray(path, PathArray, 4);
-}
-
-void CPWL_Utils::GetGraphics_Key(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type)
-{
- FX_FLOAT fWidth = crBBox.right - crBBox.left;
- FX_FLOAT fHeight = crBBox.top - crBBox.bottom;
- FX_FLOAT k = -fHeight/fWidth;
- CPWL_Point tail;
- CPWL_Point CicleCenter;
- tail.x = crBBox.left + fWidth*0.9f;
- tail.y = k*(tail.x - crBBox.right) + crBBox.bottom;
- CicleCenter.x = crBBox.left + fWidth*0.15f;
- CicleCenter.y = k*(CicleCenter.x - crBBox.right) + crBBox.bottom;
-
- CPWL_PathData PathArray[] =
- {
- CPWL_PathData(CPWL_Point(tail.x + fWidth/30.0f, -fWidth/30.0f/k + tail.y), PWLPT_MOVETO),
- CPWL_PathData(CPWL_Point(tail.x + fWidth/30.0f - fWidth*0.18f, -k*fWidth*0.18f - fWidth/30/k + tail.y), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(tail.x + fWidth/30 - fWidth*0.18f + fWidth*0.07f,
- -fWidth*0.07f/k - k*fWidth*0.18f - fWidth/30/k + tail.y), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(tail.x + fWidth/30 - fWidth*0.18f - fWidth/20 + fWidth*0.07f,
- -fWidth*0.07f/k - k*fWidth/20 - k*fWidth*0.18f - fWidth/30/k + tail.y), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(tail.x + fWidth/30 - fWidth*0.18f - fWidth/20,
- -k*fWidth/20 - k*fWidth*0.18f - fWidth/30/k + tail.y), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(tail.x + fWidth/30 - fWidth*0.18f - fWidth/20 - fWidth/15,
- -k*fWidth/15 - k*fWidth/20 - k*fWidth*0.18f - fWidth/30/k + tail.y), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(tail.x + fWidth/30 - fWidth*0.18f - fWidth/20 - fWidth/15 + fWidth*0.07f,
- -fWidth*0.07f/k - k*fWidth/15 - k*fWidth/20 - k*fWidth*0.18f - fWidth/30/k + tail.y), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(tail.x + fWidth/30 - fWidth*0.18f - fWidth/20 - fWidth/15 - fWidth/20 + fWidth*0.07f,
- -fWidth*0.07f/k + -k*fWidth/20 + -k*fWidth/15 - k*fWidth/20 - k*fWidth*0.18f - fWidth/30/k + tail.y), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(tail.x + fWidth/30 - fWidth*0.18f - fWidth/20 - fWidth/15 - fWidth/20,
- -k*fWidth/20 + -k*fWidth/15 - k*fWidth/20 - k*fWidth*0.18f - fWidth/30/k + tail.y), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(tail.x + fWidth/30 - fWidth*0.45f, -k*fWidth*0.45f - fWidth/30/k + tail.y), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(tail.x + fWidth/30 - fWidth*0.45f + fWidth*0.2f,
- -fWidth*0.4f/k - k*fWidth*0.45f - fWidth/30/k + tail.y), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(CicleCenter.x + fWidth*0.2f, - fWidth*0.1f/k + CicleCenter.y), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(CicleCenter.x, CicleCenter.y), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(CicleCenter.x - fWidth/60.0f, -k*fWidth/60 + CicleCenter.y), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(CicleCenter.x - fWidth/60, -k*fWidth/60 + CicleCenter.y), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(CicleCenter.x, CicleCenter.y), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(CicleCenter.x - fWidth*0.22f, fWidth*0.35f/k + CicleCenter.y - fHeight*0.05f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(tail.x - fWidth/30 - fWidth*0.45f - fWidth*0.18f, fWidth*0.05f/k - k*fWidth*0.45f + fWidth/30/k + tail.y - fHeight*0.05f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(tail.x - fWidth/30.0f - fWidth*0.45f, -k*fWidth*0.45f + fWidth/30.0f/k + tail.y), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(tail.x - fWidth/30.0f, fWidth/30.0f/k + tail.y), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(tail.x + fWidth/30, -fWidth/30/k + tail.y), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(CicleCenter.x + fWidth*0.08f, k*fWidth*0.08f + CicleCenter.y), PWLPT_MOVETO),
- CPWL_PathData(CPWL_Point(CicleCenter.x + fWidth*0.08f + fWidth*0.1f, -fWidth*0.1f/k + k*fWidth*0.08f + CicleCenter.y), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(CicleCenter.x + fWidth*0.22f + fWidth*0.1f, k*fWidth*0.22f + CicleCenter.y - fWidth*0.1f/k), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(CicleCenter.x + fWidth*0.22f, k*fWidth*0.22f + CicleCenter.y), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(CicleCenter.x + fWidth*0.22f - fWidth*0.1f, fWidth*0.1f/k + k*fWidth*0.22f + CicleCenter.y), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(CicleCenter.x + fWidth*0.08f - fWidth*0.1f, fWidth*0.1f/k + k*fWidth*0.08f + CicleCenter.y), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(CicleCenter.x + fWidth*0.08f, k*fWidth*0.08f + CicleCenter.y), PWLPT_BEZIERTO)
- };
-
- if(type == PWLPT_STREAM)
- sPathData = GetAppStreamFromArray(PathArray, 28);
- else
- GetPathDataFromArray(path, PathArray, 28);
-}
-
-void CPWL_Utils::GetGraphics_NewParagraph(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type)
-{
- FX_FLOAT fWidth = crBBox.right - crBBox.left;
- FX_FLOAT fHeight = crBBox.top - crBBox.bottom;
-
- CPWL_PathData PathArray[] =
- {
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth/2.0f, crBBox.top - fHeight/20.0f), PWLPT_MOVETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth/10.0f, crBBox.top - fHeight/2.0f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth/10.0f, crBBox.top - fHeight/2.0f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth/2.0f, crBBox.top - fHeight/20.0f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.12f, crBBox.top - fHeight*17/30.0f), PWLPT_MOVETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.12f, crBBox.bottom + fHeight/10.0f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.22f, crBBox.bottom + fHeight/10.0f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.22f, crBBox.top - fHeight*17/30.0f - fWidth*0.14f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.38f, crBBox.bottom + fHeight/10.0f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.48f, crBBox.bottom + fHeight/10.0f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.48f, crBBox.top - fHeight*17/30.0f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.38f, crBBox.top - fHeight*17/30.0f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.38f, crBBox.bottom + fWidth*0.24f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.22f, crBBox.top - fHeight*17/30.0f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.12f, crBBox.top - fHeight*17/30.0f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.6f, crBBox.bottom + fHeight/10.0f), PWLPT_MOVETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.7f, crBBox.bottom + fHeight/10.0f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.7f, crBBox.bottom + fHeight/10.0f + fHeight/7.0f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.97f, crBBox.bottom + fHeight/10.0f + fHeight/7.0f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.97f, crBBox.top - fHeight*17/30.0f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.7f, crBBox.top - fHeight*17/30.0f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.6f, crBBox.top - fHeight*17/30.0f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.6f, crBBox.bottom + fHeight/10.0f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.7f, crBBox.bottom + fHeight/7 + fHeight*0.18f), PWLPT_MOVETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.85f, crBBox.bottom + fHeight/7 + fHeight*0.18f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.85f, crBBox.top - fHeight*17/30.0f - fHeight*0.08f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.7f, crBBox.top - fHeight*17/30.0f - fHeight*0.08f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.7f, crBBox.bottom + fHeight/7 + fHeight*0.18f), PWLPT_LINETO)
- };
-
- if(type == PWLPT_STREAM)
- sPathData = GetAppStreamFromArray(PathArray, 28);
- else
- GetPathDataFromArray(path, PathArray, 28);
-}
-
-void CPWL_Utils::GetGraphics_TextNote(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type)
-{
- FX_FLOAT fWidth = crBBox.right - crBBox.left;
- FX_FLOAT fHeight = crBBox.top - crBBox.bottom;
-
- CPWL_PathData PathArray[] =
- {
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth*3/10.0f, crBBox.bottom + fHeight/15.0f), PWLPT_MOVETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*7/10.0f, crBBox.bottom + fHeight*4/15.0f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth/10.0f, crBBox.bottom + fHeight*4/15.0f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth/10.0f, crBBox.top - fHeight/15.0f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth/10.0f, crBBox.top - fHeight/15.0f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth/10.0f, crBBox.bottom + fHeight/15.0f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth*3/10.0f, crBBox.bottom + fHeight/15.0f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth/10.0f, crBBox.bottom + fHeight*4/15.0f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth*3/10.0f, crBBox.bottom + fHeight/15.0f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth*3/10.0f, crBBox.bottom + fHeight*4/15.0f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth/10.0f, crBBox.bottom + fHeight*4/15.0f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth/5.0f, crBBox.top - fHeight*4/15.0f), PWLPT_MOVETO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth/5.0f, crBBox.top - fHeight*4/15.0f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth/5.0f, crBBox.top - fHeight*7/15.0f), PWLPT_MOVETO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth/5.0f, crBBox.top - fHeight*7/15.0f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth/5.0f, crBBox.top - fHeight*10/15.0f), PWLPT_MOVETO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth*3/10.0f, crBBox.top - fHeight*10/15.0f), PWLPT_LINETO)
- };
-
- if(type == PWLPT_STREAM)
- sPathData = GetAppStreamFromArray(PathArray, 17);
- else
- GetPathDataFromArray(path, PathArray, 17);
-}
-
-void CPWL_Utils::GetGraphics_Paragraph(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type)
-{
- FX_FLOAT fWidth = crBBox.right - crBBox.left;
- FX_FLOAT fHeight = crBBox.top - crBBox.bottom;
-
- CPWL_PathData PathArray[] =
- {
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth/2.0f, crBBox.top - fHeight/15.0f), PWLPT_MOVETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.7f, crBBox.top - fHeight/15.0f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.7f, crBBox.bottom + fHeight/15.0f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.634f, crBBox.bottom + fHeight/15.0f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.634f, crBBox.top - fHeight*2/15.0f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.566f, crBBox.top - fHeight*2/15.0f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.566f, crBBox.bottom + fHeight/15.0f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth/2.0f, crBBox.bottom + fHeight/15.0f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth/2.0f, crBBox.top - fHeight/15.0f - fHeight*0.4f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.2f, crBBox.top - fHeight/15.0f - fHeight*0.4f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.2f, crBBox.top - fHeight/15.0f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth/2.0f, crBBox.top - fHeight/15.0f), PWLPT_BEZIERTO)
- };
-
- if(type == PWLPT_STREAM)
- sPathData = GetAppStreamFromArray(PathArray, 12);
- else
- GetPathDataFromArray(path, PathArray, 12);
-}
-
-void CPWL_Utils::GetGraphics_RightArrow(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type)
-{
- FX_FLOAT fWidth = crBBox.right - crBBox.left;
- FX_FLOAT fHeight = crBBox.top - crBBox.bottom;
-
- CPWL_PathData PathArray[] =
- {
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth/15.0f, crBBox.top - fHeight/2.0f), PWLPT_MOVETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth/2.0f + fWidth/8.0f, crBBox.bottom + fHeight/5.0f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth/2.0f, crBBox.bottom + fHeight/5.0f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth/15.0f - fWidth*0.15f, crBBox.top - fHeight/2.0f - fWidth/25.0f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.1f, crBBox.top - fHeight/2.0f - fWidth/25.0f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.1f, crBBox.top - fHeight/2.0f + fWidth/25.0f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth/15.0f - fWidth*0.15f, crBBox.top - fHeight/2.0f + fWidth/25.0f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth/2.0f, crBBox.top - fHeight/5.0f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth/2.0f + fWidth/8.0f, crBBox.top - fHeight/5.0f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth/15.0f, crBBox.top - fHeight/2.0f), PWLPT_LINETO)
- };
-
- if(type == PWLPT_STREAM)
- sPathData = GetAppStreamFromArray(PathArray, 10);
- else
- GetPathDataFromArray(path, PathArray, 10);
-}
-
-void CPWL_Utils::GetGraphics_RightPointer(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type)
-{
- FX_FLOAT fWidth = crBBox.right - crBBox.left;
- FX_FLOAT fHeight = crBBox.top - crBBox.bottom;
-
- CPWL_PathData PathArray[] =
- {
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth/30.0f, crBBox.top - fHeight/2.0f), PWLPT_MOVETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth/30.0f, crBBox.bottom + fHeight/6.0f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*4/15.0f, crBBox.top - fHeight/2.0f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth/30.0f, crBBox.top - fHeight/6.0f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth/30.0f, crBBox.top - fHeight/2.0f), PWLPT_LINETO)
- };
-
- if(type == PWLPT_STREAM)
- sPathData = GetAppStreamFromArray(PathArray, 5);
- else
- GetPathDataFromArray(path, PathArray, 5);
-}
-
-void CPWL_Utils::GetGraphics_Star(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type)
-{
- FX_FLOAT fLongRadius = (crBBox.top - crBBox.bottom)/(1+(FX_FLOAT)cos(PWL_PI/5.0f));
- fLongRadius = fLongRadius * 0.7f;
- FX_FLOAT fShortRadius = fLongRadius * 0.55f;
- CPDF_Point ptCenter = CPDF_Point((crBBox.left + crBBox.right) / 2.0f,(crBBox.top + crBBox.bottom) / 2.0f);
-
- FX_FLOAT px1[5], py1[5];
- FX_FLOAT px2[5], py2[5];
-
- FX_FLOAT fAngel = PWL_PI/10.0f;
-
- for (int32_t i=0; i<5; i++)
- {
- px1[i] = ptCenter.x + fLongRadius * (FX_FLOAT)cos(fAngel);
- py1[i] = ptCenter.y + fLongRadius * (FX_FLOAT)sin(fAngel);
-
- fAngel += PWL_PI * 2 / 5.0f;
- }
-
- fAngel = PWL_PI/5.0f + PWL_PI/10.0f;
-
- for (int32_t j=0; j<5; j++)
- {
- px2[j] = ptCenter.x + fShortRadius * (FX_FLOAT)cos(fAngel);
- py2[j] = ptCenter.y + fShortRadius * (FX_FLOAT)sin(fAngel);
-
- fAngel += PWL_PI * 2 / 5.0f;
- }
-
- CPWL_PathData PathArray[11];
- PathArray[0] = CPWL_PathData(CPWL_Point(px1[0], py1[0]), PWLPT_MOVETO);
- PathArray[1] = CPWL_PathData(CPWL_Point(px2[0], py2[0]), PWLPT_LINETO);
-
- for(int32_t k = 0; k < 4; k++)
- {
- PathArray[(k+1)*2] = CPWL_PathData(CPWL_Point(px1[k+1], py1[k+1]), PWLPT_LINETO);
- PathArray[(k+1)*2 + 1] = CPWL_PathData(CPWL_Point(px2[k+1], py2[k+1]), PWLPT_LINETO);
- }
-
- PathArray[10] = CPWL_PathData(CPWL_Point(px1[0], py1[0]), PWLPT_LINETO);
-
- if(type == PWLPT_STREAM)
- sPathData = GetAppStreamFromArray(PathArray, 11);
- else
- GetPathDataFromArray(path, PathArray, 11);
-}
-
-void CPWL_Utils::GetGraphics_UpArrow(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type)
-{
- FX_FLOAT fWidth = crBBox.right - crBBox.left;
- FX_FLOAT fHeight = crBBox.top - crBBox.bottom;
-
- CPWL_PathData PathArray[] =
- {
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth/2.0f, crBBox.top - fHeight/15.0f), PWLPT_MOVETO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth/10.0f, crBBox.top - fWidth*3/5.0f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.6f, crBBox.top - fWidth*3/5.0f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.6f, crBBox.bottom + fHeight/15.0f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.4f, crBBox.bottom + fHeight/15.0f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.4f, crBBox.top - fWidth*3/5.0f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth/10, crBBox.top - fWidth*3/5.0f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth/2.0f, crBBox.top - fHeight/15.0f), PWLPT_LINETO)
- };
-
- if(type == PWLPT_STREAM)
- sPathData = GetAppStreamFromArray(PathArray, 8);
- else
- GetPathDataFromArray(path, PathArray, 8);
-}
-
-void CPWL_Utils::GetGraphics_UpLeftArrow(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type)
-{
- FX_FLOAT fWidth = crBBox.right - crBBox.left;
- FX_FLOAT fHeight = crBBox.top - crBBox.bottom;
- CPWL_Point leftup(crBBox.left, crBBox.top);
- CPWL_Point rightdown(crBBox.right, crBBox.bottom);
- FX_FLOAT k = -fHeight/fWidth;
- CPWL_Point tail;
- tail.x = crBBox.left + fWidth*4/5.0f;
- tail.y = k*(tail.x - crBBox.right) + rightdown.y;
-
- CPWL_PathData PathArray[] =
- {
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth/20.0f, k*(crBBox.left + fWidth/20.0f - rightdown.x) + rightdown.y), PWLPT_MOVETO),
- CPWL_PathData(CPWL_Point(fHeight*17/60.0f/k + tail.x + fWidth/10.0f + fWidth/5.0f,
- -fWidth/5.0f/k + tail.y - fWidth/10.0f/k + fHeight*17/60.0f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(fHeight*17/60.0f/k + tail.x + fWidth/10.0f,
- tail.y - fWidth/10.0f/k + fHeight*17/60.0f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(tail.x + fWidth/10.0f, tail.y - fWidth/10.0f/k), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(tail.x - fWidth/10.0f, tail.y + fWidth/10.0f/k), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(fHeight*17/60.0f/k + tail.x - fWidth/10.0f, tail.y + fWidth/10.0f/k + fHeight*17/60.0f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(fHeight*17/60.0f/k + tail.x - fWidth/10.0f - fWidth/5.0f,
- fWidth/5.0f/k + tail.y + fWidth/10.0f/k + fHeight*17/60.0f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth/20.0f, k*(crBBox.left + fWidth/20.0f - rightdown.x) + rightdown.y), PWLPT_LINETO)
- };
-
- if(type == PWLPT_STREAM)
- sPathData = GetAppStreamFromArray(PathArray, 8);
- else
- GetPathDataFromArray(path, PathArray, 8);
-}
-
-void CPWL_Utils::GetGraphics_Graph(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type)
-{
- FX_FLOAT fWidth = crBBox.right - crBBox.left;
- FX_FLOAT fHeight = crBBox.top - crBBox.bottom;
-
- CPWL_PathData PathArray[] =
- {
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.05f, crBBox.top - fWidth*0.15f), PWLPT_MOVETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.25f, crBBox.top - fHeight*0.15f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.275f, crBBox.bottom + fHeight*0.08f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.05f, crBBox.bottom + fHeight*0.08f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.05f, crBBox.top - fWidth*0.15f), PWLPT_LINETO),
-
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.275f, crBBox.top - fWidth*0.45f), PWLPT_MOVETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.475f, crBBox.top - fWidth*0.45f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.475f, crBBox.bottom + fHeight*0.08f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.275f, crBBox.bottom + fHeight*0.08f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.275f, crBBox.top - fWidth*0.45f), PWLPT_LINETO),
-
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.5f, crBBox.top - fHeight*0.05f), PWLPT_MOVETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.7f, crBBox.top - fHeight*0.05f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.7f, crBBox.bottom + fHeight*0.08f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.5f, crBBox.bottom + fHeight*0.08f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.5f, crBBox.top - fHeight*0.05f), PWLPT_LINETO),
-
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.725f, crBBox.top - fWidth*0.35f), PWLPT_MOVETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.925f, crBBox.top - fWidth*0.35f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.925f, crBBox.bottom + fHeight*0.08f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.725f, crBBox.bottom + fHeight*0.08f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.725f, crBBox.top - fWidth*0.35f), PWLPT_LINETO)
- };
-
- if(type == PWLPT_STREAM)
- sPathData = GetAppStreamFromArray(PathArray, 20);
- else
- GetPathDataFromArray(path, PathArray, 20);
-}
-
-void CPWL_Utils::GetGraphics_Paperclip(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type)
-{
- FX_FLOAT fWidth = crBBox.right - crBBox.left;
- FX_FLOAT fHeight = crBBox.top - crBBox.bottom;
-
- CPWL_PathData PathArray[] =
- {
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth/60, crBBox.top - fHeight*0.25f), PWLPT_MOVETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth/60, crBBox.bottom + fHeight*0.25f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth/60, crBBox.bottom + fHeight*0.25f - fWidth*57/60.0f*0.35f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth/30, crBBox.bottom + fHeight*0.25f - fWidth*57/60.0f*0.35f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth/30, crBBox.bottom + fHeight*0.25f), PWLPT_BEZIERTO),
-
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth/30, crBBox.top - fHeight*0.33f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth/30, crBBox.top - fHeight*0.33f + fHeight/15*0.5f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth/30 - fWidth*0.12f, crBBox.top - fHeight*0.33f + fHeight/15*0.5f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth/30 - fWidth*0.12f, crBBox.top - fHeight*0.33f), PWLPT_BEZIERTO),
-
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth/30 - fWidth*0.12f, crBBox.bottom + fHeight*0.2f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth/30 - fWidth*0.12f, crBBox.bottom + fHeight*0.2f - (fWidth*57/60.0f - fWidth*0.24f)*0.25f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth/60 + fWidth*0.12f, crBBox.bottom + fHeight*0.2f - (fWidth*57/60.0f - fWidth*0.24f)*0.25f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth/60 + fWidth*0.12f, crBBox.bottom + fHeight*0.2f), PWLPT_BEZIERTO),
-
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth/60 + fWidth*0.12f, crBBox.top - fHeight*0.2f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth/60 + fWidth*0.12f, crBBox.top - fHeight*0.2f + (fWidth*11/12.0f - fWidth*0.36f)*0.25f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth/15 - fWidth*0.24f, crBBox.top - fHeight*0.2f + (fWidth*11/12.0f - fWidth*0.36f)*0.25f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth/15 - fWidth*0.24f, crBBox.top - fHeight*0.2f), PWLPT_BEZIERTO),
-
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth/15 - fWidth*0.24f, crBBox.bottom + fHeight*0.25f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth/15 - fWidth*0.24f, crBBox.bottom + fHeight*0.25f - (fWidth*14/15.0f - fWidth*0.53f)*0.25f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.29f, crBBox.bottom + fHeight*0.25f - (fWidth*14/15.0f - fWidth*0.53f)*0.25f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.29f, crBBox.bottom + fHeight*0.25f), PWLPT_BEZIERTO),
-
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.29f, crBBox.top - fHeight*0.33f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.29f, crBBox.top - fHeight*0.33f + fWidth*0.12f*0.35f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.17f, crBBox.top - fHeight*0.33f + fWidth*0.12f*0.35f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.17f, crBBox.top - fHeight*0.33f), PWLPT_BEZIERTO),
-
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.17f, crBBox.bottom + fHeight*0.3f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.17f, crBBox.bottom + fHeight*0.3f - fWidth*(14/15.0f - 0.29f)*0.35f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth/15 - fWidth*0.12f, crBBox.bottom + fHeight*0.3f - fWidth*(14/15.0f - 0.29f)*0.35f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth/15 - fWidth*0.12f, crBBox.bottom + fHeight*0.3f), PWLPT_BEZIERTO),
-
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth/15 - fWidth*0.12f, crBBox.top - fHeight*0.25f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth/15 - fWidth*0.12f, crBBox.top - fHeight*0.25f + fWidth*0.35f*(11/12.0f - 0.12f)), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth/60, crBBox.top - fHeight*0.25f + fWidth*0.35f*(11/12.0f - 0.12f)), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth/60, crBBox.top - fHeight*0.25f), PWLPT_BEZIERTO)
- };
-
- if(type == PWLPT_STREAM)
- sPathData = GetAppStreamFromArray(PathArray, 33);
- else
- GetPathDataFromArray(path, PathArray, 33);
-}
-
-void CPWL_Utils::GetGraphics_Attachment(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type)
-{
- FX_FLOAT fWidth = crBBox.right - crBBox.left;
- FX_FLOAT fHeight = crBBox.top - crBBox.bottom;
-
- CPWL_PathData PathArray[] =
- {
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.25f, crBBox.top - fHeight*0.1f), PWLPT_MOVETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.4f, crBBox.top - fHeight*0.23f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.4f, crBBox.top - fHeight*0.5f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.4f, crBBox.top - fHeight*0.5f + fWidth*0.04f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.6f, crBBox.top - fHeight*0.5f + fWidth*0.04f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.6f, crBBox.top - fHeight*0.5f), PWLPT_BEZIERTO),
-
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.6f, crBBox.top - fHeight*0.23f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth*0.25f, crBBox.top - fHeight*0.1f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.25f, crBBox.top - fHeight*0.1f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.4f, crBBox.top - fHeight*0.23f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.6f, crBBox.top - fHeight*0.23f), PWLPT_LINETO),
-
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.4f, crBBox.top - fHeight*0.5f), PWLPT_MOVETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.4f - fWidth*0.25f*0.4f, crBBox.top - fHeight*0.5f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.15f, crBBox.top - fHeight*0.65f + fHeight*0.15f*0.4f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.15f, crBBox.top - fHeight*0.65f), PWLPT_BEZIERTO),
-
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth*0.15f, crBBox.top - fHeight*0.65f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth*0.15f, crBBox.top - fHeight*0.65f + fHeight*0.15f*0.4f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.6f + fWidth*0.25f*0.4f, crBBox.top - fHeight*0.5f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.6f, crBBox.top - fHeight*0.5f), PWLPT_BEZIERTO),
-
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.6f, crBBox.top - fHeight*0.5f + fWidth*0.04f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.4f, crBBox.top - fHeight*0.5f + fWidth*0.04f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.4f, crBBox.top - fHeight*0.5f), PWLPT_BEZIERTO),
-
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.5f, crBBox.top - fHeight*0.65f), PWLPT_MOVETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.5f, crBBox.bottom + fHeight*0.1f), PWLPT_LINETO)
- };
-
- if(type == PWLPT_STREAM)
- sPathData = GetAppStreamFromArray(PathArray, 24);
- else
- GetPathDataFromArray(path, PathArray, 24);
-}
-
-void CPWL_Utils::GetGraphics_Tag(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type)
-{
- FX_FLOAT fWidth = crBBox.right - crBBox.left;
- FX_FLOAT fHeight = crBBox.top - crBBox.bottom;
-
- CPWL_PathData PathArray[] =
- {
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.4f, crBBox.top - fHeight*0.1f), PWLPT_MOVETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.1f, crBBox.top - fHeight*0.5f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.3f, crBBox.bottom + fHeight*0.1f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth*0.1f, crBBox.bottom + fHeight*0.1f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth*0.1f, crBBox.top - fHeight*0.1f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.4f, crBBox.top - fHeight*0.1f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.4f, crBBox.top - fHeight*0.3f), PWLPT_MOVETO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth*0.2f, crBBox.top - fHeight*0.3f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.4f, crBBox.top - fHeight*0.5f), PWLPT_MOVETO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth*0.2f, crBBox.top - fHeight*0.5f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crBBox.left + fWidth*0.4f, crBBox.top - fHeight*0.7f), PWLPT_MOVETO),
- CPWL_PathData(CPWL_Point(crBBox.right - fWidth*0.2f, crBBox.top - fHeight*0.7f), PWLPT_LINETO)
- };
-
- if(type == PWLPT_STREAM)
- sPathData = GetAppStreamFromArray(PathArray, 12);
- else
- GetPathDataFromArray(path, PathArray, 12);
-}
-
-void CPWL_Utils::GetGraphics_Foxit(CFX_ByteString& sPathData, CFX_PathData& path, const CPDF_Rect& crBBox, const PWL_PATH_TYPE type)
-{
- FX_FLOAT fOutWidth = crBBox.right - crBBox.left;
- FX_FLOAT fOutHeight = crBBox.top - crBBox.bottom;
-
- CPDF_Rect crInBox = crBBox;
- crInBox.left = crBBox.left + fOutWidth*0.08f;
- crInBox.right = crBBox.right - fOutWidth*0.08f;
- crInBox.top = crBBox.top - fOutHeight*0.08f;
- crInBox.bottom = crBBox.bottom + fOutHeight*0.08f;
-
- FX_FLOAT fWidth = crInBox.right - crInBox.left;
- FX_FLOAT fHeight = crInBox.top - crInBox.bottom;
-
- CPWL_PathData PathArray[] =
- {
- CPWL_PathData(CPWL_Point(crInBox.left, crInBox.top), PWLPT_MOVETO),
- CPWL_PathData(CPWL_Point(crInBox.left + fWidth*0.45f, crInBox.top), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crInBox.left + fWidth*0.45f, crInBox.top - PWL_BEZIER * fHeight * 0.4f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crInBox.left + fWidth*0.45f - PWL_BEZIER * fWidth * 0.45f, crInBox.top - fHeight*0.4f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crInBox.left, crInBox.top - fHeight*0.4f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crInBox.left, crInBox.top), PWLPT_LINETO),
-
- CPWL_PathData(CPWL_Point(crInBox.left + fWidth*0.60f, crInBox.top), PWLPT_MOVETO),
- CPWL_PathData(CPWL_Point(crInBox.left + fWidth*0.75f, crInBox.top), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crInBox.left + fWidth*0.75f, crInBox.top - PWL_BEZIER * fHeight * 0.7f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crInBox.left + fWidth*0.75f - PWL_BEZIER * fWidth * 0.75f, crInBox.top - fHeight*0.7f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crInBox.left, crInBox.top - fHeight*0.7f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crInBox.left, crInBox.top - fHeight*0.55f), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crInBox.left + PWL_BEZIER * fWidth*0.60f, crInBox.top - fHeight*0.55f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crInBox.left + fWidth * 0.60f, crInBox.top - PWL_BEZIER * fHeight * 0.55f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crInBox.left + fWidth * 0.60f, crInBox.top), PWLPT_BEZIERTO),
-
- CPWL_PathData(CPWL_Point(crInBox.left + fWidth*0.90f, crInBox.top), PWLPT_MOVETO),
- CPWL_PathData(CPWL_Point(crInBox.left + fWidth*0.90f, crInBox.top - PWL_BEZIER * fHeight * 0.85f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crInBox.left + fWidth*0.90f - PWL_BEZIER * fWidth * 0.90f, crInBox.top - fHeight*0.85f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crInBox.left, crInBox.top - fHeight*0.85f), PWLPT_BEZIERTO),
- CPWL_PathData(CPWL_Point(crInBox.left, crInBox.bottom), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crInBox.right, crInBox.bottom), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crInBox.right, crInBox.top), PWLPT_LINETO),
- CPWL_PathData(CPWL_Point(crInBox.left + fWidth*0.90f, crInBox.top), PWLPT_LINETO),
- };
-
- if(type == PWLPT_STREAM)
- sPathData = GetAppStreamFromArray(PathArray, 23);
- else
- GetPathDataFromArray(path, PathArray, 23);
-}
-
-void CPWL_Color::ConvertColorType(int32_t other_nColorType)
-{
- switch (other_nColorType)
- {
- case COLORTYPE_TRANSPARENT:
- break;
- case COLORTYPE_GRAY:
- switch (other_nColorType)
- {
- case COLORTYPE_RGB:
- CPWL_Utils::ConvertGRAY2RGB(fColor1, fColor1, fColor2, fColor3);
- break;
- case COLORTYPE_CMYK:
- CPWL_Utils::ConvertGRAY2CMYK(fColor1, fColor1, fColor2, fColor3, fColor4);
- break;
- }
- break;
- case COLORTYPE_RGB:
- switch (other_nColorType)
- {
- case COLORTYPE_GRAY:
- CPWL_Utils::ConvertRGB2GRAY(fColor1, fColor2, fColor3, fColor1);
- break;
- case COLORTYPE_CMYK:
- CPWL_Utils::ConvertRGB2CMYK(fColor1, fColor2, fColor3, fColor1, fColor2, fColor3, fColor4);
- break;
- }
- break;
- case COLORTYPE_CMYK:
- switch (other_nColorType)
- {
- case COLORTYPE_GRAY:
- CPWL_Utils::ConvertCMYK2GRAY(fColor1, fColor2, fColor3, fColor4, fColor1);
- break;
- case COLORTYPE_RGB:
- CPWL_Utils::ConvertCMYK2RGB(fColor1, fColor2, fColor3, fColor4, fColor1, fColor2, fColor3);
- break;
- }
- break;
- }
- nColorType = other_nColorType;
-}
+static CFX_ByteString GetWordSpellCheckAppearanceStream(
+ IFX_Edit_Iterator* pIterator,
+ const CPDF_Point& ptOffset,
+ const CPVT_WordRange& wrWord) {
+ CFX_ByteTextBuf sRet;
+ FX_FLOAT fStartX = 0.0f;
+ FX_FLOAT fEndX = 0.0f;
+ FX_FLOAT fY = 0.0f;
+ FX_FLOAT fStep = 0.0f;
+ FX_BOOL bBreak = FALSE;
+
+ if (pIterator) {
+ pIterator->SetAt(wrWord.BeginPos);
+
+ do {
+ CPVT_WordPlace place = pIterator->GetAt();
+
+ CPVT_Line line;
+ if (pIterator->GetLine(line)) {
+ fY = line.ptLine.y;
+ fStep = (line.fLineAscent - line.fLineDescent) / 16.0f;
+ }
+
+ if (place.LineCmp(wrWord.BeginPos) == 0) {
+ pIterator->SetAt(wrWord.BeginPos);
+ CPVT_Word word;
+ if (pIterator->GetWord(word)) {
+ fStartX = word.ptWord.x;
+ }
+ } else {
+ fStartX = line.ptLine.x;
+ }
+
+ if (place.LineCmp(wrWord.EndPos) == 0) {
+ pIterator->SetAt(wrWord.EndPos);
+ CPVT_Word word;
+ if (pIterator->GetWord(word)) {
+ fEndX = word.ptWord.x + word.fWidth;
+ }
+
+ bBreak = TRUE;
+ } else {
+ fEndX = line.ptLine.x + line.fLineWidth;
+ }
+
+ sRet << GetSquigglyAppearanceStream(
+ fStartX + ptOffset.x, fEndX + ptOffset.x, fY + ptOffset.y, fStep);
+
+ if (bBreak)
+ break;
+ } while (pIterator->NextLine());
+ }
+
+ return sRet.GetByteString();
+}
+
+CFX_ByteString CPWL_Utils::GetSpellCheckAppStream(
+ IFX_Edit* pEdit,
+ IPWL_SpellCheck* pSpellCheck,
+ const CPDF_Point& ptOffset,
+ const CPVT_WordRange* pRange) {
+ ASSERT(pEdit != NULL);
+ ASSERT(pSpellCheck != NULL);
+
+ CFX_ByteTextBuf sRet;
+
+ if (pRange && pRange->IsExist()) {
+ if (IFX_Edit_Iterator* pIterator = pEdit->GetIterator()) {
+ pIterator->SetAt(pRange->BeginPos);
+
+ FX_BOOL bLatinWord = FALSE;
+ CPVT_WordPlace wpWordStart;
+ CFX_ByteString sWord;
+
+ CPVT_WordPlace oldplace;
+ while (pIterator->NextWord()) {
+ CPVT_WordPlace place = pIterator->GetAt();
+ if (pRange && place.WordCmp(pRange->EndPos) > 0)
+ break;
+
+ CPVT_Word word;
+ if (pIterator->GetWord(word)) {
+ if (FX_EDIT_ISLATINWORD(word.Word)) {
+ if (!bLatinWord) {
+ wpWordStart = place;
+ bLatinWord = TRUE;
+ }
+
+ sWord += (char)word.Word;
+ oldplace = place;
+ } else {
+ if (bLatinWord) {
+ if (!pSpellCheck->CheckWord(sWord)) {
+ sRet << GetWordSpellCheckAppearanceStream(
+ pIterator, ptOffset, CPVT_WordRange(wpWordStart, oldplace));
+ pIterator->SetAt(place);
+ }
+ bLatinWord = FALSE;
+ }
+
+ sWord.Empty();
+ }
+ } else {
+ if (bLatinWord) {
+ if (!pSpellCheck->CheckWord(sWord))
+ sRet << GetWordSpellCheckAppearanceStream(
+ pIterator, ptOffset, CPVT_WordRange(wpWordStart, oldplace));
+ bLatinWord = FALSE;
+ sWord.Empty();
+ }
+ }
+ }
+
+ if (bLatinWord) {
+ if (!pSpellCheck->CheckWord(sWord))
+ sRet << GetWordSpellCheckAppearanceStream(
+ pIterator, ptOffset, CPVT_WordRange(wpWordStart, oldplace));
+
+ bLatinWord = FALSE;
+ sWord.Empty();
+ }
+ }
+ }
+
+ return sRet.GetByteString();
+}
+
+CFX_ByteString CPWL_Utils::GetTextAppStream(const CPDF_Rect& rcBBox,
+ IFX_Edit_FontMap* pFontMap,
+ const CFX_WideString& sText,
+ int32_t nAlignmentH,
+ int32_t nAlignmentV,
+ FX_FLOAT fFontSize,
+ FX_BOOL bMultiLine,
+ FX_BOOL bAutoReturn,
+ const CPWL_Color& crText) {
+ CFX_ByteTextBuf sRet;
+
+ if (IFX_Edit* pEdit = IFX_Edit::NewEdit()) {
+ pEdit->SetFontMap(pFontMap);
+ pEdit->SetPlateRect(rcBBox);
+ pEdit->SetAlignmentH(nAlignmentH);
+ pEdit->SetAlignmentV(nAlignmentV);
+ pEdit->SetMultiLine(bMultiLine);
+ pEdit->SetAutoReturn(bAutoReturn);
+ if (IsFloatZero(fFontSize))
+ pEdit->SetAutoFontSize(TRUE);
+ else
+ pEdit->SetFontSize(fFontSize);
+
+ pEdit->Initialize();
+ pEdit->SetText(sText.c_str());
+
+ CFX_ByteString sEdit =
+ CPWL_Utils::GetEditAppStream(pEdit, CPDF_Point(0.0f, 0.0f));
+ if (sEdit.GetLength() > 0) {
+ sRet << "BT\n" << CPWL_Utils::GetColorAppStream(crText) << sEdit
+ << "ET\n";
+ }
+ IFX_Edit::DelEdit(pEdit);
+ }
+
+ return sRet.GetByteString();
+}
+
+CFX_ByteString CPWL_Utils::GetPushButtonAppStream(const CPDF_Rect& rcBBox,
+ IFX_Edit_FontMap* pFontMap,
+ CPDF_Stream* pIconStream,
+ CPDF_IconFit& IconFit,
+ const CFX_WideString& sLabel,
+ const CPWL_Color& crText,
+ FX_FLOAT fFontSize,
+ int32_t nLayOut) {
+ const FX_FLOAT fAutoFontScale = 1.0f / 3.0f;
+
+ if (IFX_Edit* pEdit = IFX_Edit::NewEdit()) {
+ pEdit->SetFontMap(pFontMap);
+ pEdit->SetAlignmentH(1);
+ pEdit->SetAlignmentV(1);
+ pEdit->SetMultiLine(FALSE);
+ pEdit->SetAutoReturn(FALSE);
+ if (IsFloatZero(fFontSize))
+ pEdit->SetAutoFontSize(TRUE);
+ else
+ pEdit->SetFontSize(fFontSize);
+
+ pEdit->Initialize();
+ pEdit->SetText(sLabel.c_str());
+
+ CPDF_Rect rcLabelContent = pEdit->GetContentRect();
+ CPWL_Icon Icon;
+ PWL_CREATEPARAM cp;
+ cp.dwFlags = PWS_VISIBLE;
+ Icon.Create(cp);
+ Icon.SetIconFit(&IconFit);
+ Icon.SetPDFStream(pIconStream);
+
+ CPDF_Rect rcLabel = CPDF_Rect(0, 0, 0, 0);
+ CPDF_Rect rcIcon = CPDF_Rect(0, 0, 0, 0);
+ FX_FLOAT fWidth = 0.0f;
+ FX_FLOAT fHeight = 0.0f;
+
+ switch (nLayOut) {
+ case PPBL_LABEL:
+ rcLabel = rcBBox;
+ rcIcon = CPDF_Rect(0, 0, 0, 0);
+ break;
+ case PPBL_ICON:
+ rcIcon = rcBBox;
+ rcLabel = CPDF_Rect(0, 0, 0, 0);
+ break;
+ case PPBL_ICONTOPLABELBOTTOM:
+
+ if (pIconStream) {
+ if (IsFloatZero(fFontSize)) {
+ fHeight = rcBBox.top - rcBBox.bottom;
+ rcLabel = CPDF_Rect(rcBBox.left, rcBBox.bottom, rcBBox.right,
+ rcBBox.bottom + fHeight * fAutoFontScale);
+ rcIcon =
+ CPDF_Rect(rcBBox.left, rcLabel.top, rcBBox.right, rcBBox.top);
+ } else {
+ fHeight = rcLabelContent.Height();
+
+ if (rcBBox.bottom + fHeight > rcBBox.top) {
+ rcIcon = CPDF_Rect(0, 0, 0, 0);
+ rcLabel = rcBBox;
+ } else {
+ rcLabel = CPDF_Rect(rcBBox.left, rcBBox.bottom, rcBBox.right,
+ rcBBox.bottom + fHeight);
+ rcIcon =
+ CPDF_Rect(rcBBox.left, rcLabel.top, rcBBox.right, rcBBox.top);
+ }
+ }
+ } else {
+ rcLabel = rcBBox;
+ rcIcon = CPDF_Rect(0, 0, 0, 0);
+ }
+
+ break;
+ case PPBL_LABELTOPICONBOTTOM:
+
+ if (pIconStream) {
+ if (IsFloatZero(fFontSize)) {
+ fHeight = rcBBox.top - rcBBox.bottom;
+ rcLabel =
+ CPDF_Rect(rcBBox.left, rcBBox.top - fHeight * fAutoFontScale,
+ rcBBox.right, rcBBox.top);
+ rcIcon = CPDF_Rect(rcBBox.left, rcBBox.bottom, rcBBox.right,
+ rcLabel.bottom);
+ } else {
+ fHeight = rcLabelContent.Height();
+
+ if (rcBBox.bottom + fHeight > rcBBox.top) {
+ rcIcon = CPDF_Rect(0, 0, 0, 0);
+ rcLabel = rcBBox;
+ } else {
+ rcLabel = CPDF_Rect(rcBBox.left, rcBBox.top - fHeight,
+ rcBBox.right, rcBBox.top);
+ rcIcon = CPDF_Rect(rcBBox.left, rcBBox.bottom, rcBBox.right,
+ rcLabel.bottom);
+ }
+ }
+ } else {
+ rcLabel = rcBBox;
+ rcIcon = CPDF_Rect(0, 0, 0, 0);
+ }
+
+ break;
+ case PPBL_ICONLEFTLABELRIGHT:
+
+ if (pIconStream) {
+ if (IsFloatZero(fFontSize)) {
+ fWidth = rcBBox.right - rcBBox.left;
+ rcLabel = CPDF_Rect(rcBBox.right - fWidth * fAutoFontScale,
+ rcBBox.bottom, rcBBox.right, rcBBox.top);
+ rcIcon =
+ CPDF_Rect(rcBBox.left, rcBBox.bottom, rcLabel.left, rcBBox.top);
+
+ if (rcLabelContent.Width() < fWidth * fAutoFontScale) {
+ } else {
+ if (rcLabelContent.Width() < fWidth) {
+ rcLabel = CPDF_Rect(rcBBox.right - rcLabelContent.Width(),
+ rcBBox.bottom, rcBBox.right, rcBBox.top);
+ rcIcon = CPDF_Rect(rcBBox.left, rcBBox.bottom, rcLabel.left,
+ rcBBox.top);
+ } else {
+ rcLabel = rcBBox;
+ rcIcon = CPDF_Rect(0, 0, 0, 0);
+ }
+ }
+ } else {
+ fWidth = rcLabelContent.Width();
+
+ if (rcBBox.left + fWidth > rcBBox.right) {
+ rcLabel = rcBBox;
+ rcIcon = CPDF_Rect(0, 0, 0, 0);
+ } else {
+ rcLabel = CPDF_Rect(rcBBox.right - fWidth, rcBBox.bottom,
+ rcBBox.right, rcBBox.top);
+ rcIcon = CPDF_Rect(rcBBox.left, rcBBox.bottom, rcLabel.left,
+ rcBBox.top);
+ }
+ }
+ } else {
+ rcLabel = rcBBox;
+ rcIcon = CPDF_Rect(0, 0, 0, 0);
+ }
+
+ break;
+ case PPBL_LABELLEFTICONRIGHT:
+
+ if (pIconStream) {
+ if (IsFloatZero(fFontSize)) {
+ fWidth = rcBBox.right - rcBBox.left;
+ rcLabel =
+ CPDF_Rect(rcBBox.left, rcBBox.bottom,
+ rcBBox.left + fWidth * fAutoFontScale, rcBBox.top);
+ rcIcon = CPDF_Rect(rcLabel.right, rcBBox.bottom, rcBBox.right,
+ rcBBox.top);
+
+ if (rcLabelContent.Width() < fWidth * fAutoFontScale) {
+ } else {
+ if (rcLabelContent.Width() < fWidth) {
+ rcLabel =
+ CPDF_Rect(rcBBox.left, rcBBox.bottom,
+ rcBBox.left + rcLabelContent.Width(), rcBBox.top);
+ rcIcon = CPDF_Rect(rcLabel.right, rcBBox.bottom, rcBBox.right,
+ rcBBox.top);
+ } else {
+ rcLabel = rcBBox;
+ rcIcon = CPDF_Rect(0, 0, 0, 0);
+ }
+ }
+ } else {
+ fWidth = rcLabelContent.Width();
+
+ if (rcBBox.left + fWidth > rcBBox.right) {
+ rcLabel = rcBBox;
+ rcIcon = CPDF_Rect(0, 0, 0, 0);
+ } else {
+ rcLabel = CPDF_Rect(rcBBox.left, rcBBox.bottom,
+ rcBBox.left + fWidth, rcBBox.top);
+ rcIcon = CPDF_Rect(rcLabel.right, rcBBox.bottom, rcBBox.right,
+ rcBBox.top);
+ }
+ }
+ } else {
+ rcLabel = rcBBox;
+ rcIcon = CPDF_Rect(0, 0, 0, 0);
+ }
+
+ break;
+ case PPBL_LABELOVERICON:
+ rcLabel = rcBBox;
+ rcIcon = rcBBox;
+ break;
+ }
+
+ CFX_ByteTextBuf sAppStream, sTemp;
+
+ if (!rcIcon.IsEmpty()) {
+ Icon.Move(rcIcon, FALSE, FALSE);
+ sTemp << Icon.GetImageAppStream();
+ }
+
+ Icon.Destroy();
+
+ if (!rcLabel.IsEmpty()) {
+ pEdit->SetPlateRect(rcLabel);
+ CFX_ByteString sEdit =
+ CPWL_Utils::GetEditAppStream(pEdit, CPDF_Point(0.0f, 0.0f));
+ if (sEdit.GetLength() > 0) {
+ sTemp << "BT\n" << CPWL_Utils::GetColorAppStream(crText) << sEdit
+ << "ET\n";
+ }
+ }
+
+ IFX_Edit::DelEdit(pEdit);
+
+ if (sTemp.GetSize() > 0) {
+ sAppStream << "q\n" << rcBBox.left << " " << rcBBox.bottom << " "
+ << rcBBox.right - rcBBox.left << " "
+ << rcBBox.top - rcBBox.bottom << " re W n\n";
+ sAppStream << sTemp << "Q\n";
+ }
+
+ return sAppStream.GetByteString();
+ }
+
+ return "";
+}
+
+CFX_ByteString CPWL_Utils::GetColorAppStream(const CPWL_Color& color,
+ const FX_BOOL& bFillOrStroke) {
+ CFX_ByteTextBuf sColorStream;
+
+ switch (color.nColorType) {
+ case COLORTYPE_RGB:
+ sColorStream << color.fColor1 << " " << color.fColor2 << " "
+ << color.fColor3 << " " << (bFillOrStroke ? "rg" : "RG")
+ << "\n";
+ break;
+ case COLORTYPE_GRAY:
+ sColorStream << color.fColor1 << " " << (bFillOrStroke ? "g" : "G")
+ << "\n";
+ break;
+ case COLORTYPE_CMYK:
+ sColorStream << color.fColor1 << " " << color.fColor2 << " "
+ << color.fColor3 << " " << color.fColor4 << " "
+ << (bFillOrStroke ? "k" : "K") << "\n";
+ break;
+ }
+
+ return sColorStream.GetByteString();
+}
+
+CFX_ByteString CPWL_Utils::GetBorderAppStream(const CPDF_Rect& rect,
+ FX_FLOAT fWidth,
+ const CPWL_Color& color,
+ const CPWL_Color& crLeftTop,
+ const CPWL_Color& crRightBottom,
+ int32_t nStyle,
+ const CPWL_Dash& dash) {
+ CFX_ByteTextBuf sAppStream;
+ CFX_ByteString sColor;
+
+ FX_FLOAT fLeft = rect.left;
+ FX_FLOAT fRight = rect.right;
+ FX_FLOAT fTop = rect.top;
+ FX_FLOAT fBottom = rect.bottom;
+
+ if (fWidth > 0.0f) {
+ FX_FLOAT fHalfWidth = fWidth / 2.0f;
+
+ sAppStream << "q\n";
+
+ switch (nStyle) {
+ default:
+ case PBS_SOLID:
+ sColor = CPWL_Utils::GetColorAppStream(color, TRUE);
+ if (sColor.GetLength() > 0) {
+ sAppStream << sColor;
+ sAppStream << fLeft << " " << fBottom << " " << fRight - fLeft << " "
+ << fTop - fBottom << " re\n";
+ sAppStream << fLeft + fWidth << " " << fBottom + fWidth << " "
+ << fRight - fLeft - fWidth * 2 << " "
+ << fTop - fBottom - fWidth * 2 << " re\n";
+ sAppStream << "f*\n";
+ }
+ break;
+ case PBS_DASH:
+ sColor = CPWL_Utils::GetColorAppStream(color, FALSE);
+ if (sColor.GetLength() > 0) {
+ sAppStream << sColor;
+ sAppStream << fWidth << " w"
+ << " [" << dash.nDash << " " << dash.nGap << "] "
+ << dash.nPhase << " d\n";
+ sAppStream << fLeft + fWidth / 2 << " " << fBottom + fWidth / 2
+ << " m\n";
+ sAppStream << fLeft + fWidth / 2 << " " << fTop - fWidth / 2
+ << " l\n";
+ sAppStream << fRight - fWidth / 2 << " " << fTop - fWidth / 2
+ << " l\n";
+ sAppStream << fRight - fWidth / 2 << " " << fBottom + fWidth / 2
+ << " l\n";
+ sAppStream << fLeft + fWidth / 2 << " " << fBottom + fWidth / 2
+ << " l S\n";
+ }
+ break;
+ case PBS_BEVELED:
+ case PBS_INSET:
+ sColor = CPWL_Utils::GetColorAppStream(crLeftTop, TRUE);
+ if (sColor.GetLength() > 0) {
+ sAppStream << sColor;
+ sAppStream << fLeft + fHalfWidth << " " << fBottom + fHalfWidth
+ << " m\n";
+ sAppStream << fLeft + fHalfWidth << " " << fTop - fHalfWidth
+ << " l\n";
+ sAppStream << fRight - fHalfWidth << " " << fTop - fHalfWidth
+ << " l\n";
+ sAppStream << fRight - fHalfWidth * 2 << " " << fTop - fHalfWidth * 2
+ << " l\n";
+ sAppStream << fLeft + fHalfWidth * 2 << " " << fTop - fHalfWidth * 2
+ << " l\n";
+ sAppStream << fLeft + fHalfWidth * 2 << " "
+ << fBottom + fHalfWidth * 2 << " l f\n";
+ }
+
+ sColor = CPWL_Utils::GetColorAppStream(crRightBottom, TRUE);
+ if (sColor.GetLength() > 0) {
+ sAppStream << sColor;
+ sAppStream << fRight - fHalfWidth << " " << fTop - fHalfWidth
+ << " m\n";
+ sAppStream << fRight - fHalfWidth << " " << fBottom + fHalfWidth
+ << " l\n";
+ sAppStream << fLeft + fHalfWidth << " " << fBottom + fHalfWidth
+ << " l\n";
+ sAppStream << fLeft + fHalfWidth * 2 << " "
+ << fBottom + fHalfWidth * 2 << " l\n";
+ sAppStream << fRight - fHalfWidth * 2 << " "
+ << fBottom + fHalfWidth * 2 << " l\n";
+ sAppStream << fRight - fHalfWidth * 2 << " " << fTop - fHalfWidth * 2
+ << " l f\n";
+ }
+
+ sColor = CPWL_Utils::GetColorAppStream(color, TRUE);
+ if (sColor.GetLength() > 0) {
+ sAppStream << sColor;
+ sAppStream << fLeft << " " << fBottom << " " << fRight - fLeft << " "
+ << fTop - fBottom << " re\n";
+ sAppStream << fLeft + fHalfWidth << " " << fBottom + fHalfWidth << " "
+ << fRight - fLeft - fHalfWidth * 2 << " "
+ << fTop - fBottom - fHalfWidth * 2 << " re f*\n";
+ }
+ break;
+ case PBS_UNDERLINED:
+ sColor = CPWL_Utils::GetColorAppStream(color, FALSE);
+ if (sColor.GetLength() > 0) {
+ sAppStream << sColor;
+ sAppStream << fWidth << " w\n";
+ sAppStream << fLeft << " " << fBottom + fWidth / 2 << " m\n";
+ sAppStream << fRight << " " << fBottom + fWidth / 2 << " l S\n";
+ }
+ break;
+ }
+
+ sAppStream << "Q\n";
+ }
+
+ return sAppStream.GetByteString();
+}
+
+CFX_ByteString CPWL_Utils::GetCircleBorderAppStream(
+ const CPDF_Rect& rect,
+ FX_FLOAT fWidth,
+ const CPWL_Color& color,
+ const CPWL_Color& crLeftTop,
+ const CPWL_Color& crRightBottom,
+ int32_t nStyle,
+ const CPWL_Dash& dash) {
+ CFX_ByteTextBuf sAppStream;
+ CFX_ByteString sColor;
+
+ if (fWidth > 0.0f) {
+ sAppStream << "q\n";
+
+ switch (nStyle) {
+ default:
+ case PBS_SOLID:
+ case PBS_UNDERLINED: {
+ sColor = CPWL_Utils::GetColorAppStream(color, FALSE);
+ if (sColor.GetLength() > 0) {
+ sAppStream << "q\n" << fWidth << " w\n" << sColor
+ << CPWL_Utils::GetAP_Circle(
+ CPWL_Utils::DeflateRect(rect, fWidth / 2.0f))
+ << " S\nQ\n";
+ }
+ } break;
+ case PBS_DASH: {
+ sColor = CPWL_Utils::GetColorAppStream(color, FALSE);
+ if (sColor.GetLength() > 0) {
+ sAppStream << "q\n" << fWidth << " w\n"
+ << "[" << dash.nDash << " " << dash.nGap << "] "
+ << dash.nPhase << " d\n" << sColor
+ << CPWL_Utils::GetAP_Circle(
+ CPWL_Utils::DeflateRect(rect, fWidth / 2.0f))
+ << " S\nQ\n";
+ }
+ } break;
+ case PBS_BEVELED: {
+ FX_FLOAT fHalfWidth = fWidth / 2.0f;
+
+ sColor = CPWL_Utils::GetColorAppStream(color, FALSE);
+ if (sColor.GetLength() > 0) {
+ sAppStream << "q\n" << fHalfWidth << " w\n" << sColor
+ << CPWL_Utils::GetAP_Circle(rect) << " S\nQ\n";
+ }
+
+ sColor = CPWL_Utils::GetColorAppStream(crLeftTop, FALSE);
+ if (sColor.GetLength() > 0) {
+ sAppStream << "q\n" << fHalfWidth << " w\n" << sColor
+ << CPWL_Utils::GetAP_HalfCircle(
+ CPWL_Utils::DeflateRect(rect, fHalfWidth * 0.75f),
+ PWL_PI / 4.0f)
+ << " S\nQ\n";
+ }
+
+ sColor = CPWL_Utils::GetColorAppStream(crRightBottom, FALSE);
+ if (sColor.GetLength() > 0) {
+ sAppStream << "q\n" << fHalfWidth << " w\n" << sColor
+ << CPWL_Utils::GetAP_HalfCircle(
+ CPWL_Utils::DeflateRect(rect, fHalfWidth * 0.75f),
+ PWL_PI * 5 / 4.0f)
+ << " S\nQ\n";
+ }
+ } break;
+ case PBS_INSET: {
+ FX_FLOAT fHalfWidth = fWidth / 2.0f;
+
+ sColor = CPWL_Utils::GetColorAppStream(color, FALSE);
+ if (sColor.GetLength() > 0) {
+ sAppStream << "q\n" << fHalfWidth << " w\n" << sColor
+ << CPWL_Utils::GetAP_Circle(rect) << " S\nQ\n";
+ }
+
+ sColor = CPWL_Utils::GetColorAppStream(crLeftTop, FALSE);
+ if (sColor.GetLength() > 0) {
+ sAppStream << "q\n" << fHalfWidth << " w\n" << sColor
+ << CPWL_Utils::GetAP_HalfCircle(
+ CPWL_Utils::DeflateRect(rect, fHalfWidth * 0.75f),
+ PWL_PI / 4.0f)
+ << " S\nQ\n";
+ }
+
+ sColor = CPWL_Utils::GetColorAppStream(crRightBottom, FALSE);
+ if (sColor.GetLength() > 0) {
+ sAppStream << "q\n" << fHalfWidth << " w\n" << sColor
+ << CPWL_Utils::GetAP_HalfCircle(
+ CPWL_Utils::DeflateRect(rect, fHalfWidth * 0.75f),
+ PWL_PI * 5 / 4.0f)
+ << " S\nQ\n";
+ }
+ } break;
+ }
+
+ sAppStream << "Q\n";
+ }
+
+ return sAppStream.GetByteString();
+}
+
+CPWL_Color CPWL_Utils::SubstractColor(const CPWL_Color& sColor,
+ FX_FLOAT fColorSub) {
+ CPWL_Color sRet;
+ sRet.nColorType = sColor.nColorType;
+
+ switch (sColor.nColorType) {
+ case COLORTYPE_TRANSPARENT:
+ sRet.nColorType = COLORTYPE_RGB;
+ sRet.fColor1 = PWL_MAX(1 - fColorSub, 0.0f);
+ sRet.fColor2 = PWL_MAX(1 - fColorSub, 0.0f);
+ sRet.fColor3 = PWL_MAX(1 - fColorSub, 0.0f);
+ break;
+ case COLORTYPE_RGB:
+ case COLORTYPE_GRAY:
+ case COLORTYPE_CMYK:
+ sRet.fColor1 = PWL_MAX(sColor.fColor1 - fColorSub, 0.0f);
+ sRet.fColor2 = PWL_MAX(sColor.fColor2 - fColorSub, 0.0f);
+ sRet.fColor3 = PWL_MAX(sColor.fColor3 - fColorSub, 0.0f);
+ sRet.fColor4 = PWL_MAX(sColor.fColor4 - fColorSub, 0.0f);
+ break;
+ }
+
+ return sRet;
+}
+
+CPWL_Color CPWL_Utils::DevideColor(const CPWL_Color& sColor,
+ FX_FLOAT fColorDevide) {
+ CPWL_Color sRet;
+ sRet.nColorType = sColor.nColorType;
+
+ switch (sColor.nColorType) {
+ case COLORTYPE_TRANSPARENT:
+ sRet.nColorType = COLORTYPE_RGB;
+ sRet.fColor1 = 1 / fColorDevide;
+ sRet.fColor2 = 1 / fColorDevide;
+ sRet.fColor3 = 1 / fColorDevide;
+ break;
+ case COLORTYPE_RGB:
+ case COLORTYPE_GRAY:
+ case COLORTYPE_CMYK:
+ sRet = sColor;
+ sRet.fColor1 /= fColorDevide;
+ sRet.fColor2 /= fColorDevide;
+ sRet.fColor3 /= fColorDevide;
+ sRet.fColor4 /= fColorDevide;
+ break;
+ }
+
+ return sRet;
+}
+
+CFX_ByteString CPWL_Utils::GetAppStream_Check(const CPDF_Rect& rcBBox,
+ const CPWL_Color& crText) {
+ CFX_ByteTextBuf sAP;
+ sAP << "q\n" << CPWL_Utils::GetColorAppStream(crText, TRUE)
+ << CPWL_Utils::GetAP_Check(rcBBox) << "f\nQ\n";
+ return sAP.GetByteString();
+}
+
+CFX_ByteString CPWL_Utils::GetAppStream_Circle(const CPDF_Rect& rcBBox,
+ const CPWL_Color& crText) {
+ CFX_ByteTextBuf sAP;
+ sAP << "q\n" << CPWL_Utils::GetColorAppStream(crText, TRUE)
+ << CPWL_Utils::GetAP_Circle(rcBBox) << "f\nQ\n";
+ return sAP.GetByteString();
+}
+
+CFX_ByteString CPWL_Utils::GetAppStream_Cross(const CPDF_Rect& rcBBox,
+ const CPWL_Color& crText) {
+ CFX_ByteTextBuf sAP;
+ sAP << "q\n" << CPWL_Utils::GetColorAppStream(crText, FALSE)
+ << CPWL_Utils::GetAP_Cross(rcBBox) << "S\nQ\n";
+ return sAP.GetByteString();
+}
+
+CFX_ByteString CPWL_Utils::GetAppStream_Diamond(const CPDF_Rect& rcBBox,
+ const CPWL_Color& crText) {
+ CFX_ByteTextBuf sAP;
+ sAP << "q\n1 w\n" << CPWL_Utils::GetColorAppStream(crText, TRUE)
+ << CPWL_Utils::GetAP_Diamond(rcBBox) << "f\nQ\n";
+ return sAP.GetByteString();
+}
+
+CFX_ByteString CPWL_Utils::GetAppStream_Square(const CPDF_Rect& rcBBox,
+ const CPWL_Color& crText) {
+ CFX_ByteTextBuf sAP;
+ sAP << "q\n" << CPWL_Utils::GetColorAppStream(crText, TRUE)
+ << CPWL_Utils::GetAP_Square(rcBBox) << "f\nQ\n";
+ return sAP.GetByteString();
+}
+
+CFX_ByteString CPWL_Utils::GetAppStream_Star(const CPDF_Rect& rcBBox,
+ const CPWL_Color& crText) {
+ CFX_ByteTextBuf sAP;
+ sAP << "q\n" << CPWL_Utils::GetColorAppStream(crText, TRUE)
+ << CPWL_Utils::GetAP_Star(rcBBox) << "f\nQ\n";
+ return sAP.GetByteString();
+}
+
+CFX_ByteString CPWL_Utils::GetCheckBoxAppStream(const CPDF_Rect& rcBBox,
+ int32_t nStyle,
+ const CPWL_Color& crText) {
+ CPDF_Rect rcCenter = GetCenterSquare(rcBBox);
+ switch (nStyle) {
+ default:
+ case PCS_CHECK:
+ return GetAppStream_Check(rcCenter, crText);
+ case PCS_CIRCLE:
+ return GetAppStream_Circle(ScaleRect(rcCenter, 2.0f / 3.0f), crText);
+ case PCS_CROSS:
+ return GetAppStream_Cross(rcCenter, crText);
+ case PCS_DIAMOND:
+ return GetAppStream_Diamond(ScaleRect(rcCenter, 2.0f / 3.0f), crText);
+ case PCS_SQUARE:
+ return GetAppStream_Square(ScaleRect(rcCenter, 2.0f / 3.0f), crText);
+ case PCS_STAR:
+ return GetAppStream_Star(ScaleRect(rcCenter, 2.0f / 3.0f), crText);
+ }
+}
+
+CFX_ByteString CPWL_Utils::GetRadioButtonAppStream(const CPDF_Rect& rcBBox,
+ int32_t nStyle,
+ const CPWL_Color& crText) {
+ CPDF_Rect rcCenter = GetCenterSquare(rcBBox);
+ switch (nStyle) {
+ default:
+ case PCS_CHECK:
+ return GetAppStream_Check(rcCenter, crText);
+ case PCS_CIRCLE:
+ return GetAppStream_Circle(ScaleRect(rcCenter, 1.0f / 2.0f), crText);
+ case PCS_CROSS:
+ return GetAppStream_Cross(rcCenter, crText);
+ case PCS_DIAMOND:
+ return GetAppStream_Diamond(ScaleRect(rcCenter, 2.0f / 3.0f), crText);
+ case PCS_SQUARE:
+ return GetAppStream_Square(ScaleRect(rcCenter, 2.0f / 3.0f), crText);
+ case PCS_STAR:
+ return GetAppStream_Star(ScaleRect(rcCenter, 2.0f / 3.0f), crText);
+ }
+}
+
+CFX_ByteString CPWL_Utils::GetDropButtonAppStream(const CPDF_Rect& rcBBox) {
+ CFX_ByteTextBuf sAppStream;
+
+ if (!rcBBox.IsEmpty()) {
+ sAppStream << "q\n" << CPWL_Utils::GetColorAppStream(
+ CPWL_Color(COLORTYPE_RGB, 220.0f / 255.0f,
+ 220.0f / 255.0f, 220.0f / 255.0f),
+ TRUE);
+ sAppStream << rcBBox.left << " " << rcBBox.bottom << " "
+ << rcBBox.right - rcBBox.left << " "
+ << rcBBox.top - rcBBox.bottom << " re f\n";
+ sAppStream << "Q\n";
+
+ sAppStream << "q\n" << CPWL_Utils::GetBorderAppStream(
+ rcBBox, 2, CPWL_Color(COLORTYPE_GRAY, 0),
+ CPWL_Color(COLORTYPE_GRAY, 1),
+ CPWL_Color(COLORTYPE_GRAY, 0.5), PBS_BEVELED,
+ CPWL_Dash(3, 0, 0))
+ << "Q\n";
+
+ CPDF_Point ptCenter = CPDF_Point((rcBBox.left + rcBBox.right) / 2,
+ (rcBBox.top + rcBBox.bottom) / 2);
+ if (IsFloatBigger(rcBBox.right - rcBBox.left, 6) &&
+ IsFloatBigger(rcBBox.top - rcBBox.bottom, 6)) {
+ sAppStream << "q\n"
+ << " 0 g\n";
+ sAppStream << ptCenter.x - 3 << " " << ptCenter.y + 1.5f << " m\n";
+ sAppStream << ptCenter.x + 3 << " " << ptCenter.y + 1.5f << " l\n";
+ sAppStream << ptCenter.x << " " << ptCenter.y - 1.5f << " l\n";
+ sAppStream << ptCenter.x - 3 << " " << ptCenter.y + 1.5f << " l f\n";
+ sAppStream << "Q\n";
+ }
+ }
+
+ return sAppStream.GetByteString();
+}
+
+void CPWL_Utils::ConvertCMYK2GRAY(FX_FLOAT dC,
+ FX_FLOAT dM,
+ FX_FLOAT dY,
+ FX_FLOAT dK,
+ FX_FLOAT& dGray) {
+ if (dC < 0 || dC > 1 || dM < 0 || dM > 1 || dY < 0 || dY > 1 || dK < 0 ||
+ dK > 1)
+ return;
+ dGray = 1.0f - FX_MIN(1.0f, 0.3f * dC + 0.59f * dM + 0.11f * dY + dK);
+}
+
+void CPWL_Utils::ConvertGRAY2CMYK(FX_FLOAT dGray,
+ FX_FLOAT& dC,
+ FX_FLOAT& dM,
+ FX_FLOAT& dY,
+ FX_FLOAT& dK) {
+ if (dGray < 0 || dGray > 1)
+ return;
+ dC = 0.0f;
+ dM = 0.0f;
+ dY = 0.0f;
+ dK = 1.0f - dGray;
+}
+
+void CPWL_Utils::ConvertGRAY2RGB(FX_FLOAT dGray,
+ FX_FLOAT& dR,
+ FX_FLOAT& dG,
+ FX_FLOAT& dB) {
+ if (dGray < 0 || dGray > 1)
+ return;
+ dR = dGray;
+ dG = dGray;
+ dB = dGray;
+}
+
+void CPWL_Utils::ConvertRGB2GRAY(FX_FLOAT dR,
+ FX_FLOAT dG,
+ FX_FLOAT dB,
+ FX_FLOAT& dGray) {
+ if (dR < 0 || dR > 1 || dG < 0 || dG > 0 || dB < 0 || dB > 1)
+ return;
+ dGray = 0.3f * dR + 0.59f * dG + 0.11f * dB;
+}
+
+void CPWL_Utils::ConvertCMYK2RGB(FX_FLOAT dC,
+ FX_FLOAT dM,
+ FX_FLOAT dY,
+ FX_FLOAT dK,
+ FX_FLOAT& dR,
+ FX_FLOAT& dG,
+ FX_FLOAT& dB) {
+ if (dC < 0 || dC > 1 || dM < 0 || dM > 1 || dY < 0 || dY > 1 || dK < 0 ||
+ dK > 1)
+ return;
+ dR = 1.0f - FX_MIN(1.0f, dC + dK);
+ dG = 1.0f - FX_MIN(1.0f, dM + dK);
+ dB = 1.0f - FX_MIN(1.0f, dY + dK);
+}
+
+void CPWL_Utils::ConvertRGB2CMYK(FX_FLOAT dR,
+ FX_FLOAT dG,
+ FX_FLOAT dB,
+ FX_FLOAT& dC,
+ FX_FLOAT& dM,
+ FX_FLOAT& dY,
+ FX_FLOAT& dK) {
+ if (dR < 0 || dR > 1 || dG < 0 || dG > 1 || dB < 0 || dB > 1)
+ return;
+
+ dC = 1.0f - dR;
+ dM = 1.0f - dG;
+ dY = 1.0f - dB;
+ dK = FX_MIN(dC, FX_MIN(dM, dY));
+}
+
+void CPWL_Utils::PWLColorToARGB(const CPWL_Color& color,
+ int32_t& alpha,
+ FX_FLOAT& red,
+ FX_FLOAT& green,
+ FX_FLOAT& blue) {
+ switch (color.nColorType) {
+ case COLORTYPE_TRANSPARENT: {
+ alpha = 0;
+ } break;
+ case COLORTYPE_GRAY: {
+ ConvertGRAY2RGB(color.fColor1, red, green, blue);
+ } break;
+ case COLORTYPE_RGB: {
+ red = color.fColor1;
+ green = color.fColor2;
+ blue = color.fColor3;
+ } break;
+ case COLORTYPE_CMYK: {
+ ConvertCMYK2RGB(color.fColor1, color.fColor2, color.fColor3,
+ color.fColor4, red, green, blue);
+ } break;
+ }
+}
+
+FX_COLORREF CPWL_Utils::PWLColorToFXColor(const CPWL_Color& color,
+ int32_t nTransparancy) {
+ int32_t nAlpha = nTransparancy;
+ FX_FLOAT dRed = 0;
+ FX_FLOAT dGreen = 0;
+ FX_FLOAT dBlue = 0;
+
+ PWLColorToARGB(color, nAlpha, dRed, dGreen, dBlue);
+
+ return ArgbEncode(nAlpha, (int32_t)(dRed * 255), (int32_t)(dGreen * 255),
+ (int32_t)(dBlue * 255));
+}
+
+void CPWL_Utils::DrawFillRect(CFX_RenderDevice* pDevice,
+ CPDF_Matrix* pUser2Device,
+ const CPDF_Rect& rect,
+ const FX_COLORREF& color) {
+ CFX_PathData path;
+ CPDF_Rect rcTemp(rect);
+ path.AppendRect(rcTemp.left, rcTemp.bottom, rcTemp.right, rcTemp.top);
+ pDevice->DrawPath(&path, pUser2Device, NULL, color, 0, FXFILL_WINDING);
+}
+
+void CPWL_Utils::DrawFillArea(CFX_RenderDevice* pDevice,
+ CPDF_Matrix* pUser2Device,
+ const CPDF_Point* pPts,
+ int32_t nCount,
+ const FX_COLORREF& color) {
+ CFX_PathData path;
+ path.SetPointCount(nCount);
+
+ path.SetPoint(0, pPts[0].x, pPts[0].y, FXPT_MOVETO);
+ for (int32_t i = 1; i < nCount; i++)
+ path.SetPoint(i, pPts[i].x, pPts[i].y, FXPT_LINETO);
+
+ pDevice->DrawPath(&path, pUser2Device, NULL, color, 0, FXFILL_ALTERNATE);
+}
+
+void CPWL_Utils::DrawStrokeRect(CFX_RenderDevice* pDevice,
+ CPDF_Matrix* pUser2Device,
+ const CPDF_Rect& rect,
+ const FX_COLORREF& color,
+ FX_FLOAT fWidth) {
+ CFX_PathData path;
+ CPDF_Rect rcTemp(rect);
+ path.AppendRect(rcTemp.left, rcTemp.bottom, rcTemp.right, rcTemp.top);
+
+ CFX_GraphStateData gsd;
+ gsd.m_LineWidth = fWidth;
+
+ pDevice->DrawPath(&path, pUser2Device, &gsd, 0, color, FXFILL_ALTERNATE);
+}
+
+void CPWL_Utils::DrawStrokeLine(CFX_RenderDevice* pDevice,
+ CPDF_Matrix* pUser2Device,
+ const CPDF_Point& ptMoveTo,
+ const CPDF_Point& ptLineTo,
+ const FX_COLORREF& color,
+ FX_FLOAT fWidth) {
+ CFX_PathData path;
+ path.SetPointCount(2);
+ path.SetPoint(0, ptMoveTo.x, ptMoveTo.y, FXPT_MOVETO);
+ path.SetPoint(1, ptLineTo.x, ptLineTo.y, FXPT_LINETO);
+
+ CFX_GraphStateData gsd;
+ gsd.m_LineWidth = fWidth;
+
+ pDevice->DrawPath(&path, pUser2Device, &gsd, 0, color, FXFILL_ALTERNATE);
+}
+
+void CPWL_Utils::DrawFillRect(CFX_RenderDevice* pDevice,
+ CPDF_Matrix* pUser2Device,
+ const CPDF_Rect& rect,
+ const CPWL_Color& color,
+ int32_t nTransparancy) {
+ CPWL_Utils::DrawFillRect(pDevice, pUser2Device, rect,
+ PWLColorToFXColor(color, nTransparancy));
+}
+
+void CPWL_Utils::DrawShadow(CFX_RenderDevice* pDevice,
+ CPDF_Matrix* pUser2Device,
+ FX_BOOL bVertical,
+ FX_BOOL bHorizontal,
+ CPDF_Rect rect,
+ int32_t nTransparancy,
+ int32_t nStartGray,
+ int32_t nEndGray) {
+ FX_FLOAT fStepGray = 1.0f;
+
+ if (bVertical) {
+ fStepGray = (nEndGray - nStartGray) / rect.Height();
+
+ for (FX_FLOAT fy = rect.bottom + 0.5f; fy <= rect.top - 0.5f; fy += 1.0f) {
+ int32_t nGray = nStartGray + (int32_t)(fStepGray * (fy - rect.bottom));
+ CPWL_Utils::DrawStrokeLine(
+ pDevice, pUser2Device, CPDF_Point(rect.left, fy),
+ CPDF_Point(rect.right, fy),
+ ArgbEncode(nTransparancy, nGray, nGray, nGray), 1.5f);
+ }
+ }
+
+ if (bHorizontal) {
+ fStepGray = (nEndGray - nStartGray) / rect.Width();
+
+ for (FX_FLOAT fx = rect.left + 0.5f; fx <= rect.right - 0.5f; fx += 1.0f) {
+ int32_t nGray = nStartGray + (int32_t)(fStepGray * (fx - rect.left));
+ CPWL_Utils::DrawStrokeLine(
+ pDevice, pUser2Device, CPDF_Point(fx, rect.bottom),
+ CPDF_Point(fx, rect.top),
+ ArgbEncode(nTransparancy, nGray, nGray, nGray), 1.5f);
+ }
+ }
+}
+
+void CPWL_Utils::DrawBorder(CFX_RenderDevice* pDevice,
+ CPDF_Matrix* pUser2Device,
+ const CPDF_Rect& rect,
+ FX_FLOAT fWidth,
+ const CPWL_Color& color,
+ const CPWL_Color& crLeftTop,
+ const CPWL_Color& crRightBottom,
+ int32_t nStyle,
+ const CPWL_Dash& dash,
+ int32_t nTransparancy) {
+ FX_FLOAT fLeft = rect.left;
+ FX_FLOAT fRight = rect.right;
+ FX_FLOAT fTop = rect.top;
+ FX_FLOAT fBottom = rect.bottom;
+
+ if (fWidth > 0.0f) {
+ FX_FLOAT fHalfWidth = fWidth / 2.0f;
+
+ switch (nStyle) {
+ default:
+ case PBS_SOLID: {
+ CFX_PathData path;
+ path.AppendRect(fLeft, fBottom, fRight, fTop);
+ path.AppendRect(fLeft + fWidth, fBottom + fWidth, fRight - fWidth,
+ fTop - fWidth);
+ pDevice->DrawPath(&path, pUser2Device, NULL,
+ PWLColorToFXColor(color, nTransparancy), 0,
+ FXFILL_ALTERNATE);
+ } break;
+ case PBS_DASH: {
+ CFX_PathData path;
+
+ path.SetPointCount(5);
+ path.SetPoint(0, fLeft + fWidth / 2.0f, fBottom + fWidth / 2.0f,
+ FXPT_MOVETO);
+ path.SetPoint(1, fLeft + fWidth / 2.0f, fTop - fWidth / 2.0f,
+ FXPT_LINETO);
+ path.SetPoint(2, fRight - fWidth / 2.0f, fTop - fWidth / 2.0f,
+ FXPT_LINETO);
+ path.SetPoint(3, fRight - fWidth / 2.0f, fBottom + fWidth / 2.0f,
+ FXPT_LINETO);
+ path.SetPoint(4, fLeft + fWidth / 2.0f, fBottom + fWidth / 2.0f,
+ FXPT_LINETO);
+
+ CFX_GraphStateData gsd;
+ gsd.SetDashCount(2);
+ gsd.m_DashArray[0] = 3.0f;
+ gsd.m_DashArray[1] = 3.0f;
+ gsd.m_DashPhase = 0;
+
+ gsd.m_LineWidth = fWidth;
+ pDevice->DrawPath(&path, pUser2Device, &gsd, 0,
+ PWLColorToFXColor(color, nTransparancy),
+ FXFILL_WINDING);
+ } break;
+ case PBS_BEVELED:
+ case PBS_INSET: {
+ CFX_GraphStateData gsd;
+ gsd.m_LineWidth = fHalfWidth;
+
+ CFX_PathData pathLT;
+
+ pathLT.SetPointCount(7);
+ pathLT.SetPoint(0, fLeft + fHalfWidth, fBottom + fHalfWidth,
+ FXPT_MOVETO);
+ pathLT.SetPoint(1, fLeft + fHalfWidth, fTop - fHalfWidth, FXPT_LINETO);
+ pathLT.SetPoint(2, fRight - fHalfWidth, fTop - fHalfWidth, FXPT_LINETO);
+ pathLT.SetPoint(3, fRight - fHalfWidth * 2, fTop - fHalfWidth * 2,
+ FXPT_LINETO);
+ pathLT.SetPoint(4, fLeft + fHalfWidth * 2, fTop - fHalfWidth * 2,
+ FXPT_LINETO);
+ pathLT.SetPoint(5, fLeft + fHalfWidth * 2, fBottom + fHalfWidth * 2,
+ FXPT_LINETO);
+ pathLT.SetPoint(6, fLeft + fHalfWidth, fBottom + fHalfWidth,
+ FXPT_LINETO);
+
+ pDevice->DrawPath(&pathLT, pUser2Device, &gsd,
+ PWLColorToFXColor(crLeftTop, nTransparancy), 0,
+ FXFILL_ALTERNATE);
+
+ CFX_PathData pathRB;
+
+ pathRB.SetPointCount(7);
+ pathRB.SetPoint(0, fRight - fHalfWidth, fTop - fHalfWidth, FXPT_MOVETO);
+ pathRB.SetPoint(1, fRight - fHalfWidth, fBottom + fHalfWidth,
+ FXPT_LINETO);
+ pathRB.SetPoint(2, fLeft + fHalfWidth, fBottom + fHalfWidth,
+ FXPT_LINETO);
+ pathRB.SetPoint(3, fLeft + fHalfWidth * 2, fBottom + fHalfWidth * 2,
+ FXPT_LINETO);
+ pathRB.SetPoint(4, fRight - fHalfWidth * 2, fBottom + fHalfWidth * 2,
+ FXPT_LINETO);
+ pathRB.SetPoint(5, fRight - fHalfWidth * 2, fTop - fHalfWidth * 2,
+ FXPT_LINETO);
+ pathRB.SetPoint(6, fRight - fHalfWidth, fTop - fHalfWidth, FXPT_LINETO);
+
+ pDevice->DrawPath(&pathRB, pUser2Device, &gsd,
+ PWLColorToFXColor(crRightBottom, nTransparancy), 0,
+ FXFILL_ALTERNATE);
+
+ CFX_PathData path;
+
+ path.AppendRect(fLeft, fBottom, fRight, fTop);
+ path.AppendRect(fLeft + fHalfWidth, fBottom + fHalfWidth,
+ fRight - fHalfWidth, fTop - fHalfWidth);
+
+ pDevice->DrawPath(&path, pUser2Device, &gsd,
+ PWLColorToFXColor(color, nTransparancy), 0,
+ FXFILL_ALTERNATE);
+ } break;
+ case PBS_UNDERLINED: {
+ CFX_PathData path;
+
+ path.SetPointCount(2);
+ path.SetPoint(0, fLeft, fBottom + fWidth / 2, FXPT_MOVETO);
+ path.SetPoint(1, fRight, fBottom + fWidth / 2, FXPT_LINETO);
+
+ CFX_GraphStateData gsd;
+ gsd.m_LineWidth = fWidth;
+
+ pDevice->DrawPath(&path, pUser2Device, &gsd, 0,
+ PWLColorToFXColor(color, nTransparancy),
+ FXFILL_ALTERNATE);
+ } break;
+ case PBS_SHADOW: {
+ CFX_PathData path;
+ path.AppendRect(fLeft, fBottom, fRight, fTop);
+ path.AppendRect(fLeft + fWidth, fBottom + fWidth, fRight - fWidth,
+ fTop - fWidth);
+ pDevice->DrawPath(&path, pUser2Device, NULL,
+ PWLColorToFXColor(color, nTransparancy / 2), 0,
+ FXFILL_ALTERNATE);
+ } break;
+ }
+ }
+}
+
+static void AddSquigglyPath(CFX_PathData& PathData,
+ FX_FLOAT fStartX,
+ FX_FLOAT fEndX,
+ FX_FLOAT fY,
+ FX_FLOAT fStep) {
+ PathData.AddPointCount(1);
+ PathData.SetPoint(PathData.GetPointCount() - 1, fStartX, fY, FXPT_MOVETO);
+
+ FX_FLOAT fx;
+ int32_t i;
+
+ for (i = 1, fx = fStartX + fStep; fx < fEndX; fx += fStep, i++) {
+ PathData.AddPointCount(1);
+ PathData.SetPoint(PathData.GetPointCount() - 1, fx, fY + (i & 1) * fStep,
+ FXPT_LINETO);
+ }
+}
+
+static void AddSpellCheckObj(CFX_PathData& PathData,
+ IFX_Edit* pEdit,
+ const CPVT_WordRange& wrWord) {
+ FX_FLOAT fStartX = 0.0f;
+ FX_FLOAT fEndX = 0.0f;
+ FX_FLOAT fY = 0.0f;
+ FX_FLOAT fStep = 0.0f;
+
+ FX_BOOL bBreak = FALSE;
+
+ if (IFX_Edit_Iterator* pIterator = pEdit->GetIterator()) {
+ pIterator->SetAt(wrWord.BeginPos);
+
+ do {
+ CPVT_WordPlace place = pIterator->GetAt();
+
+ CPVT_Line line;
+ if (pIterator->GetLine(line)) {
+ fY = line.ptLine.y;
+ fStep = (line.fLineAscent - line.fLineDescent) / 16.0f;
+ }
+
+ if (place.LineCmp(wrWord.BeginPos) == 0) {
+ pIterator->SetAt(wrWord.BeginPos);
+ CPVT_Word word;
+ if (pIterator->GetWord(word)) {
+ fStartX = word.ptWord.x;
+ }
+ } else {
+ fStartX = line.ptLine.x;
+ }
+
+ if (place.LineCmp(wrWord.EndPos) == 0) {
+ pIterator->SetAt(wrWord.EndPos);
+ CPVT_Word word;
+ if (pIterator->GetWord(word)) {
+ fEndX = word.ptWord.x + word.fWidth;
+ }
+
+ bBreak = TRUE;
+ } else {
+ fEndX = line.ptLine.x + line.fLineWidth;
+ }
+
+ AddSquigglyPath(PathData, fStartX, fEndX, fY, fStep);
+
+ if (bBreak)
+ break;
+ } while (pIterator->NextLine());
+ }
+}
+
+void CPWL_Utils::DrawEditSpellCheck(CFX_RenderDevice* pDevice,
+ CPDF_Matrix* pUser2Device,
+ IFX_Edit* pEdit,
+ const CPDF_Rect& rcClip,
+ const CPDF_Point& ptOffset,
+ const CPVT_WordRange* pRange,
+ IPWL_SpellCheck* pSpellCheck) {
+ const FX_COLORREF crSpell = ArgbEncode(255, 255, 0, 0);
+
+ // for spellcheck
+ FX_BOOL bLatinWord = FALSE;
+ CPVT_WordPlace wpWordStart;
+ CFX_ByteString sLatinWord;
+
+ CFX_PathData pathSpell;
+
+ pDevice->SaveState();
+
+ if (!rcClip.IsEmpty()) {
+ CPDF_Rect rcTemp = rcClip;
+ pUser2Device->TransformRect(rcTemp);
+ FX_RECT rcDevClip;
+ rcDevClip.left = (int32_t)rcTemp.left;
+ rcDevClip.right = (int32_t)rcTemp.right;
+ rcDevClip.top = (int32_t)rcTemp.top;
+ rcDevClip.bottom = (int32_t)rcTemp.bottom;
+ pDevice->SetClip_Rect(&rcDevClip);
+ }
+
+ if (IFX_Edit_Iterator* pIterator = pEdit->GetIterator()) {
+ if (pEdit->GetFontMap()) {
+ if (pRange)
+ pIterator->SetAt(pRange->BeginPos);
+ else
+ pIterator->SetAt(0);
+
+ CPVT_WordPlace oldplace;
+
+ while (pIterator->NextWord()) {
+ CPVT_WordPlace place = pIterator->GetAt();
+ if (pRange && place.WordCmp(pRange->EndPos) > 0)
+ break;
+
+ CPVT_Word word;
+ if (pIterator->GetWord(word)) {
+ if (FX_EDIT_ISLATINWORD(word.Word)) {
+ if (!bLatinWord) {
+ wpWordStart = place;
+ bLatinWord = TRUE;
+ }
+
+ sLatinWord += (char)word.Word;
+ } else {
+ if (bLatinWord) {
+ if (!sLatinWord.IsEmpty()) {
+ if (pSpellCheck && !pSpellCheck->CheckWord(sLatinWord)) {
+ AddSpellCheckObj(pathSpell, pEdit,
+ CPVT_WordRange(wpWordStart, oldplace));
+ pIterator->SetAt(place);
+ }
+ }
+ bLatinWord = FALSE;
+ }
+
+ sLatinWord.Empty();
+ }
+
+ oldplace = place;
+ } else {
+ if (bLatinWord) {
+ if (!sLatinWord.IsEmpty()) {
+ if (pSpellCheck && !pSpellCheck->CheckWord(sLatinWord)) {
+ AddSpellCheckObj(pathSpell, pEdit,
+ CPVT_WordRange(wpWordStart, oldplace));
+ pIterator->SetAt(place);
+ }
+ }
+ bLatinWord = FALSE;
+ }
+
+ sLatinWord.Empty();
+ }
+ }
+
+ if (!sLatinWord.IsEmpty()) {
+ if (pSpellCheck && !pSpellCheck->CheckWord(sLatinWord)) {
+ AddSpellCheckObj(pathSpell, pEdit,
+ CPVT_WordRange(wpWordStart, oldplace));
+ }
+ }
+ }
+ }
+
+ CFX_GraphStateData gsd;
+ gsd.m_LineWidth = 0;
+ if (pathSpell.GetPointCount() > 0)
+ pDevice->DrawPath(&pathSpell, pUser2Device, &gsd, 0, crSpell,
+ FXFILL_ALTERNATE);
+
+ pDevice->RestoreState();
+}
+
+FX_BOOL CPWL_Utils::IsBlackOrWhite(const CPWL_Color& color) {
+ switch (color.nColorType) {
+ case COLORTYPE_TRANSPARENT:
+ return FALSE;
+ case COLORTYPE_GRAY:
+ return color.fColor1 < 0.5f;
+ case COLORTYPE_RGB:
+ return color.fColor1 + color.fColor2 + color.fColor3 < 1.5f;
+ case COLORTYPE_CMYK:
+ return color.fColor1 + color.fColor2 + color.fColor3 + color.fColor4 >
+ 2.0f;
+ }
+
+ return TRUE;
+}
+
+CPWL_Color CPWL_Utils::GetReverseColor(const CPWL_Color& color) {
+ CPWL_Color crRet = color;
+
+ switch (color.nColorType) {
+ case COLORTYPE_GRAY:
+ crRet.fColor1 = 1.0f - crRet.fColor1;
+ break;
+ case COLORTYPE_RGB:
+ crRet.fColor1 = 1.0f - crRet.fColor1;
+ crRet.fColor2 = 1.0f - crRet.fColor2;
+ crRet.fColor3 = 1.0f - crRet.fColor3;
+ break;
+ case COLORTYPE_CMYK:
+ crRet.fColor1 = 1.0f - crRet.fColor1;
+ crRet.fColor2 = 1.0f - crRet.fColor2;
+ crRet.fColor3 = 1.0f - crRet.fColor3;
+ crRet.fColor4 = 1.0f - crRet.fColor4;
+ break;
+ }
+
+ return crRet;
+}
+
+CFX_ByteString CPWL_Utils::GetIconAppStream(int32_t nType,
+ const CPDF_Rect& rect,
+ const CPWL_Color& crFill,
+ const CPWL_Color& crStroke) {
+ CFX_ByteString sAppStream = CPWL_Utils::GetColorAppStream(crStroke, FALSE);
+ sAppStream += CPWL_Utils::GetColorAppStream(crFill, TRUE);
+
+ CFX_ByteString sPath;
+ CFX_PathData path;
+
+ switch (nType) {
+ case PWL_ICONTYPE_CHECKMARK:
+ GetGraphics_Checkmark(sPath, path, rect, PWLPT_STREAM);
+ break;
+ case PWL_ICONTYPE_CIRCLE:
+ GetGraphics_Circle(sPath, path, rect, PWLPT_STREAM);
+ break;
+ case PWL_ICONTYPE_COMMENT:
+ GetGraphics_Comment(sPath, path, rect, PWLPT_STREAM);
+ break;
+ case PWL_ICONTYPE_CROSS:
+ GetGraphics_Cross(sPath, path, rect, PWLPT_STREAM);
+ break;
+ case PWL_ICONTYPE_HELP:
+ GetGraphics_Help(sPath, path, rect, PWLPT_STREAM);
+ break;
+ case PWL_ICONTYPE_INSERTTEXT:
+ GetGraphics_InsertText(sPath, path, rect, PWLPT_STREAM);
+ break;
+ case PWL_ICONTYPE_KEY:
+ GetGraphics_Key(sPath, path, rect, PWLPT_STREAM);
+ break;
+ case PWL_ICONTYPE_NEWPARAGRAPH:
+ GetGraphics_NewParagraph(sPath, path, rect, PWLPT_STREAM);
+ break;
+ case PWL_ICONTYPE_TEXTNOTE:
+ GetGraphics_TextNote(sPath, path, rect, PWLPT_STREAM);
+ break;
+ case PWL_ICONTYPE_PARAGRAPH:
+ GetGraphics_Paragraph(sPath, path, rect, PWLPT_STREAM);
+ break;
+ case PWL_ICONTYPE_RIGHTARROW:
+ GetGraphics_RightArrow(sPath, path, rect, PWLPT_STREAM);
+ break;
+ case PWL_ICONTYPE_RIGHTPOINTER:
+ GetGraphics_RightPointer(sPath, path, rect, PWLPT_STREAM);
+ break;
+ case PWL_ICONTYPE_STAR:
+ GetGraphics_Star(sPath, path, rect, PWLPT_STREAM);
+ break;
+ case PWL_ICONTYPE_UPARROW:
+ GetGraphics_UpArrow(sPath, path, rect, PWLPT_STREAM);
+ break;
+ case PWL_ICONTYPE_UPLEFTARROW:
+ GetGraphics_UpLeftArrow(sPath, path, rect, PWLPT_STREAM);
+ break;
+ case PWL_ICONTYPE_GRAPH:
+ GetGraphics_Graph(sPath, path, rect, PWLPT_STREAM);
+ break;
+ case PWL_ICONTYPE_PAPERCLIP:
+ GetGraphics_Paperclip(sPath, path, rect, PWLPT_STREAM);
+ break;
+ case PWL_ICONTYPE_ATTACHMENT:
+ GetGraphics_Attachment(sPath, path, rect, PWLPT_STREAM);
+ break;
+ case PWL_ICONTYPE_TAG:
+ GetGraphics_Tag(sPath, path, rect, PWLPT_STREAM);
+ break;
+ case PWL_ICONTYPE_FOXIT:
+ GetGraphics_Foxit(sPath, path, rect, PWLPT_STREAM);
+ break;
+ }
+
+ sAppStream += sPath;
+ if (crStroke.nColorType != COLORTYPE_TRANSPARENT)
+ sAppStream += "B*\n";
+ else
+ sAppStream += "f*\n";
+
+ return sAppStream;
+}
+
+void CPWL_Utils::DrawIconAppStream(CFX_RenderDevice* pDevice,
+ CPDF_Matrix* pUser2Device,
+ int32_t nType,
+ const CPDF_Rect& rect,
+ const CPWL_Color& crFill,
+ const CPWL_Color& crStroke,
+ const int32_t nTransparancy) {
+ CFX_GraphStateData gsd;
+ gsd.m_LineWidth = 1.0f;
+
+ CFX_ByteString sPath;
+ CFX_PathData path;
+
+ switch (nType) {
+ case PWL_ICONTYPE_CHECKMARK:
+ GetGraphics_Checkmark(sPath, path, rect, PWLPT_PATHDATA);
+ break;
+ case PWL_ICONTYPE_CIRCLE:
+ GetGraphics_Circle(sPath, path, rect, PWLPT_PATHDATA);
+ break;
+ case PWL_ICONTYPE_COMMENT:
+ GetGraphics_Comment(sPath, path, rect, PWLPT_PATHDATA);
+ break;
+ case PWL_ICONTYPE_CROSS:
+ GetGraphics_Cross(sPath, path, rect, PWLPT_PATHDATA);
+ break;
+ case PWL_ICONTYPE_HELP:
+ GetGraphics_Help(sPath, path, rect, PWLPT_PATHDATA);
+ break;
+ case PWL_ICONTYPE_INSERTTEXT:
+ GetGraphics_InsertText(sPath, path, rect, PWLPT_PATHDATA);
+ break;
+ case PWL_ICONTYPE_KEY:
+ GetGraphics_Key(sPath, path, rect, PWLPT_PATHDATA);
+ break;
+ case PWL_ICONTYPE_NEWPARAGRAPH:
+ GetGraphics_NewParagraph(sPath, path, rect, PWLPT_PATHDATA);
+ break;
+ case PWL_ICONTYPE_TEXTNOTE:
+ GetGraphics_TextNote(sPath, path, rect, PWLPT_PATHDATA);
+ break;
+ case PWL_ICONTYPE_PARAGRAPH:
+ GetGraphics_Paragraph(sPath, path, rect, PWLPT_PATHDATA);
+ break;
+ case PWL_ICONTYPE_RIGHTARROW:
+ GetGraphics_RightArrow(sPath, path, rect, PWLPT_PATHDATA);
+ break;
+ case PWL_ICONTYPE_RIGHTPOINTER:
+ GetGraphics_RightPointer(sPath, path, rect, PWLPT_PATHDATA);
+ break;
+ case PWL_ICONTYPE_STAR:
+ GetGraphics_Star(sPath, path, rect, PWLPT_PATHDATA);
+ break;
+ case PWL_ICONTYPE_UPARROW:
+ GetGraphics_UpArrow(sPath, path, rect, PWLPT_PATHDATA);
+ break;
+ case PWL_ICONTYPE_UPLEFTARROW:
+ GetGraphics_UpLeftArrow(sPath, path, rect, PWLPT_PATHDATA);
+ break;
+ case PWL_ICONTYPE_GRAPH:
+ GetGraphics_Graph(sPath, path, rect, PWLPT_PATHDATA);
+ break;
+ case PWL_ICONTYPE_PAPERCLIP:
+ GetGraphics_Paperclip(sPath, path, rect, PWLPT_PATHDATA);
+ break;
+ case PWL_ICONTYPE_ATTACHMENT:
+ GetGraphics_Attachment(sPath, path, rect, PWLPT_PATHDATA);
+ break;
+ case PWL_ICONTYPE_TAG:
+ GetGraphics_Tag(sPath, path, rect, PWLPT_PATHDATA);
+ break;
+ case PWL_ICONTYPE_FOXIT:
+ GetGraphics_Foxit(sPath, path, rect, PWLPT_PATHDATA);
+ break;
+ default:
+ return;
+ }
+
+ pDevice->DrawPath(
+ &path, pUser2Device, &gsd, PWLColorToFXColor(crFill, nTransparancy),
+ PWLColorToFXColor(crStroke, nTransparancy), FXFILL_ALTERNATE);
+}
+
+void CPWL_Utils::GetGraphics_Checkmark(CFX_ByteString& sPathData,
+ CFX_PathData& path,
+ const CPDF_Rect& crBBox,
+ const PWL_PATH_TYPE type) {
+ FX_FLOAT fWidth = crBBox.right - crBBox.left;
+ FX_FLOAT fHeight = crBBox.top - crBBox.bottom;
+
+ CPWL_PathData PathArray[] = {
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 15.0f,
+ crBBox.bottom + fHeight * 2 / 5.0f),
+ PWLPT_MOVETO),
+ CPWL_PathData(
+ CPWL_Point(
+ crBBox.left + fWidth / 15.0f +
+ PWL_BEZIER * (fWidth / 7.0f - fWidth / 15.0f),
+ crBBox.bottom + fHeight * 2 / 5.0f +
+ PWL_BEZIER * (fHeight * 2 / 7.0f - fHeight * 2 / 5.0f)),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.left + fWidth / 4.5f +
+ PWL_BEZIER * (fWidth / 5.0f - fWidth / 4.5f),
+ crBBox.bottom + fHeight / 16.0f +
+ PWL_BEZIER * (fHeight / 5.0f - fHeight / 16.0f)),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 4.5f,
+ crBBox.bottom + fHeight / 16.0f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 4.5f +
+ PWL_BEZIER * (fWidth / 4.4f - fWidth / 4.5f),
+ crBBox.bottom + fHeight / 16.0f -
+ PWL_BEZIER * fHeight / 16.0f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 3.0f +
+ PWL_BEZIER * (fWidth / 4.0f - fWidth / 3.0f),
+ crBBox.bottom),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 3.0f, crBBox.bottom),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 3.0f +
+ PWL_BEZIER * fWidth * (1 / 7.0f + 2 / 15.0f),
+ crBBox.bottom + PWL_BEZIER * fHeight * 4 / 5.0f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 14 / 15.0f +
+ PWL_BEZIER * fWidth * (1 / 7.0f - 7 / 15.0f),
+ crBBox.bottom + fHeight * 15 / 16.0f +
+ PWL_BEZIER * (fHeight * 4 / 5.0f -
+ fHeight * 15 / 16.0f)),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 14 / 15.0f,
+ crBBox.bottom + fHeight * 15 / 16.0f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(
+ CPWL_Point(
+ crBBox.left + fWidth * 14 / 15.0f +
+ PWL_BEZIER * (fWidth * 7 / 15.0f - fWidth * 14 / 15.0f),
+ crBBox.bottom + fHeight * 15 / 16.0f +
+ PWL_BEZIER * (fHeight * 8 / 7.0f - fHeight * 15 / 16.0f)),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.left + fWidth / 3.6f +
+ PWL_BEZIER * (fWidth / 3.4f - fWidth / 3.6f),
+ crBBox.bottom + fHeight / 3.5f +
+ PWL_BEZIER * (fHeight / 3.5f - fHeight / 3.5f)),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 3.6f,
+ crBBox.bottom + fHeight / 3.5f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.left + fWidth / 3.6f,
+ crBBox.bottom + fHeight / 3.5f +
+ PWL_BEZIER * (fHeight / 4.0f - fHeight / 3.5f)),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(
+ CPWL_Point(
+ crBBox.left + fWidth / 15.0f +
+ PWL_BEZIER * (fWidth / 3.5f - fWidth / 15.0f),
+ crBBox.bottom + fHeight * 2 / 5.0f +
+ PWL_BEZIER * (fHeight * 3.5f / 5.0f - fHeight * 2 / 5.0f)),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 15.0f,
+ crBBox.bottom + fHeight * 2 / 5.0f),
+ PWLPT_BEZIERTO)};
+
+ if (type == PWLPT_STREAM)
+ sPathData = GetAppStreamFromArray(PathArray, 16);
+ else
+ GetPathDataFromArray(path, PathArray, 16);
+}
+
+void CPWL_Utils::GetGraphics_Circle(CFX_ByteString& sPathData,
+ CFX_PathData& path,
+ const CPDF_Rect& crBBox,
+ const PWL_PATH_TYPE type) {
+ FX_FLOAT fWidth = crBBox.right - crBBox.left;
+ FX_FLOAT fHeight = crBBox.top - crBBox.bottom;
+
+ CPWL_PathData PathArray[] = {
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 15.0f,
+ crBBox.bottom + fHeight / 2.0f),
+ PWLPT_MOVETO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.left + fWidth / 15.0f,
+ crBBox.bottom + fHeight / 2.0f +
+ PWL_BEZIER * (fHeight * 14 / 15.0f - fHeight / 2.0f)),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.left + fWidth / 2.0f -
+ PWL_BEZIER * (fWidth / 2.0f - fWidth / 15.0f),
+ crBBox.top - fHeight / 15.0f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.left + fWidth / 2.0f, crBBox.top - fHeight / 15.0f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.left + fWidth / 2.0f +
+ PWL_BEZIER * (fWidth * 14 / 15.0f - fWidth / 2.0f),
+ crBBox.top - fHeight / 15.0f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.right - fWidth / 15.0f,
+ crBBox.bottom + fHeight / 2.0f +
+ PWL_BEZIER * (fHeight * 14 / 15.0f - fHeight / 2.0f)),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 15.0f,
+ crBBox.bottom + fHeight / 2.0f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.right - fWidth / 15.0f,
+ crBBox.bottom + fHeight / 2.0f -
+ PWL_BEZIER * (fHeight / 2.0f - fHeight / 15.0f)),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.left + fWidth / 2.0f +
+ PWL_BEZIER * (fWidth * 14 / 15.0f - fWidth / 2.0f),
+ crBBox.bottom + fHeight / 15.0f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 2.0f,
+ crBBox.bottom + fHeight / 15.0f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.left + fWidth / 2.0f -
+ PWL_BEZIER * (fWidth / 2.0f - fWidth / 15.0f),
+ crBBox.bottom + fHeight / 15.0f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.left + fWidth / 15.0f,
+ crBBox.bottom + fHeight / 2.0f -
+ PWL_BEZIER * (fHeight / 2.0f - fHeight / 15.0f)),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 15.0f,
+ crBBox.bottom + fHeight / 2.0f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 3 / 15.0f,
+ crBBox.bottom + fHeight / 2.0f),
+ PWLPT_MOVETO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.left + fWidth * 3 / 15.0f,
+ crBBox.bottom + fHeight / 2.0f +
+ PWL_BEZIER * (fHeight * 4 / 5.0f - fHeight / 2.0f)),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.left + fWidth / 2.0f -
+ PWL_BEZIER * (fWidth / 2.0f - fWidth * 3 / 15.0f),
+ crBBox.top - fHeight * 3 / 15.0f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 2.0f,
+ crBBox.top - fHeight * 3 / 15.0f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.left + fWidth / 2.0f +
+ PWL_BEZIER * (fWidth * 4 / 5.0f - fWidth / 2.0f),
+ crBBox.top - fHeight * 3 / 15.0f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.right - fWidth * 3 / 15.0f,
+ crBBox.bottom + fHeight / 2.0f +
+ PWL_BEZIER * (fHeight * 4 / 5.0f - fHeight / 2.0f)),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 3 / 15.0f,
+ crBBox.bottom + fHeight / 2.0f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.right - fWidth * 3 / 15.0f,
+ crBBox.bottom + fHeight / 2.0f -
+ PWL_BEZIER * (fHeight * 4 / 5.0f - fHeight / 2.0f)),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.left + fWidth / 2.0f +
+ PWL_BEZIER * (fWidth * 4 / 5.0f - fWidth / 2.0f),
+ crBBox.bottom + fHeight * 3 / 15.0f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 2.0f,
+ crBBox.bottom + fHeight * 3 / 15.0f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.left + fWidth / 2.0f -
+ PWL_BEZIER * (fWidth * 4 / 5.0f - fWidth / 2.0f),
+ crBBox.bottom + fHeight * 3 / 15.0f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.left + fWidth * 3 / 15.0f,
+ crBBox.bottom + fHeight / 2.0f -
+ PWL_BEZIER * (fHeight * 4 / 5.0f - fHeight / 2.0f)),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 3 / 15.0f,
+ crBBox.bottom + fHeight / 2.0f),
+ PWLPT_BEZIERTO)};
+
+ if (type == PWLPT_STREAM)
+ sPathData = GetAppStreamFromArray(PathArray, 26);
+ else
+ GetPathDataFromArray(path, PathArray, 26);
+}
+
+void CPWL_Utils::GetGraphics_Comment(CFX_ByteString& sPathData,
+ CFX_PathData& path,
+ const CPDF_Rect& crBBox,
+ const PWL_PATH_TYPE type) {
+ FX_FLOAT fWidth = crBBox.right - crBBox.left;
+ FX_FLOAT fHeight = crBBox.top - crBBox.bottom;
+
+ CPWL_PathData PathArray[] = {
+ CPWL_PathData(
+ CPWL_Point(crBBox.left + fWidth / 15.0f, crBBox.top - fHeight / 6.0f),
+ PWLPT_MOVETO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.left + fWidth / 15.0f,
+ crBBox.top - fHeight / 6.0f +
+ PWL_BEZIER * (fHeight / 6.0f - fHeight / 10.0f)),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 2 / 15.0f -
+ PWL_BEZIER * fWidth / 15.0f,
+ crBBox.top - fHeight / 10.0f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 2 / 15.0f,
+ crBBox.top - fHeight / 10.0f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 2 / 15.0f,
+ crBBox.top - fHeight / 10.0f),
+ PWLPT_LINETO),
+ CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 2 / 15.0f +
+ PWL_BEZIER * fWidth / 15.0f,
+ crBBox.top - fHeight / 10.0f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.right - fWidth / 15.0f,
+ crBBox.top - fHeight / 6 +
+ PWL_BEZIER * (fHeight / 6.0f - fHeight / 10.0f)),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 15.0f,
+ crBBox.top - fHeight / 6.0f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 15.0f,
+ crBBox.bottom + fHeight / 3.0f),
+ PWLPT_LINETO),
+ CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 15.0f,
+ crBBox.bottom + fHeight * 4 / 15.0f +
+ PWL_BEZIER * fHeight / 15.0f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 2 / 15.0f +
+ PWL_BEZIER * fWidth / 15.0f,
+ crBBox.bottom + fHeight * 4 / 15.0f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 2 / 15.0f,
+ crBBox.bottom + fHeight * 4 / 15.0f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 5 / 15.0f,
+ crBBox.bottom + fHeight * 4 / 15.0f),
+ PWLPT_LINETO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 5 / 15.0f,
+ crBBox.bottom + fHeight * 2 / 15 +
+ PWL_BEZIER * fHeight * 2 / 15.0f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 5 / 15.0f -
+ PWL_BEZIER * fWidth * 2 / 15.0f,
+ crBBox.bottom + fHeight * 2 / 15.0f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 6 / 30.0f,
+ crBBox.bottom + fHeight * 2 / 15.0f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 7 / 30.0f +
+ PWL_BEZIER * fWidth / 30.0f,
+ crBBox.bottom + fHeight * 2 / 15.0f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 7 / 30.0f,
+ crBBox.bottom + fHeight * 2 / 15.0f +
+ PWL_BEZIER * fHeight * 2 / 15.0f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 7 / 30.0f,
+ crBBox.bottom + fHeight * 4 / 15.0f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 2 / 15.0f,
+ crBBox.bottom + fHeight * 4 / 15.0f),
+ PWLPT_LINETO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 2 / 15.0f -
+ PWL_BEZIER * fWidth / 15.0f,
+ crBBox.bottom + fHeight * 4 / 15.0f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 15.0f,
+ crBBox.bottom + fHeight / 3.0f -
+ PWL_BEZIER * fHeight / 15.0f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 15.0f,
+ crBBox.bottom + fHeight / 3.0f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.left + fWidth / 15.0f, crBBox.top - fHeight / 6.0f),
+ PWLPT_LINETO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 2 / 15.0f,
+ crBBox.top - fHeight * 8 / 30.0f),
+ PWLPT_MOVETO),
+ CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 2 / 15.0f,
+ crBBox.top - fHeight * 8 / 30.0f),
+ PWLPT_LINETO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 2 / 15,
+ crBBox.top - fHeight * 25 / 60.0f),
+ PWLPT_MOVETO),
+ CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 2 / 15.0f,
+ crBBox.top - fHeight * 25 / 60.0f),
+ PWLPT_LINETO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 2 / 15.0f,
+ crBBox.top - fHeight * 17 / 30.0f),
+ PWLPT_MOVETO),
+ CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 4 / 15.0f,
+ crBBox.top - fHeight * 17 / 30.0f),
+ PWLPT_LINETO)};
+
+ if (type == PWLPT_STREAM)
+ sPathData = GetAppStreamFromArray(PathArray, 30);
+ else
+ GetPathDataFromArray(path, PathArray, 30);
+}
+
+void CPWL_Utils::GetGraphics_Cross(CFX_ByteString& sPathData,
+ CFX_PathData& path,
+ const CPDF_Rect& crBBox,
+ const PWL_PATH_TYPE type) {
+ FX_FLOAT fWidth = crBBox.right - crBBox.left;
+ FX_FLOAT fHeight = crBBox.top - crBBox.bottom;
+ // FX_FLOAT fcatercorner = (FX_FLOAT)sqrt(fWidth*fWidth + fHeight*fHeight);
+ CPWL_Point center_point(crBBox.left + fWidth / 2,
+ crBBox.bottom + fHeight / 2);
+
+ CPWL_PathData PathArray[] = {
+ CPWL_PathData(
+ CPWL_Point(center_point.x, center_point.y + fHeight / 10.0f),
+ PWLPT_MOVETO),
+ CPWL_PathData(
+ CPWL_Point(center_point.x + fWidth * 0.3f,
+ center_point.y + fHeight / 10.0f + fWidth * 0.3f),
+ PWLPT_LINETO),
+ CPWL_PathData(CPWL_Point(center_point.x + fWidth / 10.0f + fWidth * 0.3f,
+ center_point.y + fHeight * 0.3f),
+ PWLPT_LINETO),
+ CPWL_PathData(CPWL_Point(center_point.x + fWidth / 10.0f, center_point.y),
+ PWLPT_LINETO),
+ CPWL_PathData(CPWL_Point(center_point.x + fWidth / 10.0f + fWidth * 0.3f,
+ center_point.y - fHeight * 0.3f),
+ PWLPT_LINETO),
+ CPWL_PathData(
+ CPWL_Point(center_point.x + fWidth * 0.3f,
+ center_point.y - fHeight / 10.0f - fHeight * 0.3f),
+ PWLPT_LINETO),
+ CPWL_PathData(
+ CPWL_Point(center_point.x, center_point.y - fHeight / 10.0f),
+ PWLPT_LINETO),
+ CPWL_PathData(CPWL_Point(center_point.x - fWidth * 0.3f,
+ center_point.y - fHeight / 10 - fHeight * 0.3f),
+ PWLPT_LINETO),
+ CPWL_PathData(CPWL_Point(center_point.x - fWidth / 10.0f - fWidth * 0.3f,
+ center_point.y - fHeight * 0.3f),
+ PWLPT_LINETO),
+ CPWL_PathData(CPWL_Point(center_point.x - fWidth / 10, center_point.y),
+ PWLPT_LINETO),
+ CPWL_PathData(CPWL_Point(center_point.x - fWidth / 10 - fWidth * 0.3f,
+ center_point.y + fHeight * 0.3f),
+ PWLPT_LINETO),
+ CPWL_PathData(
+ CPWL_Point(center_point.x - fWidth * 0.3f,
+ center_point.y + fHeight / 10.0f + fHeight * 0.3f),
+ PWLPT_LINETO),
+ CPWL_PathData(
+ CPWL_Point(center_point.x, center_point.y + fHeight / 10.0f),
+ PWLPT_LINETO)};
+
+ if (type == PWLPT_STREAM)
+ sPathData = GetAppStreamFromArray(PathArray, 13);
+ else
+ GetPathDataFromArray(path, PathArray, 13);
+}
+
+void CPWL_Utils::GetGraphics_Help(CFX_ByteString& sPathData,
+ CFX_PathData& path,
+ const CPDF_Rect& crBBox,
+ const PWL_PATH_TYPE type) {
+ FX_FLOAT fWidth = crBBox.right - crBBox.left;
+ FX_FLOAT fHeight = crBBox.top - crBBox.bottom;
+
+ CPWL_PathData PathArray[] = {
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 60.0f,
+ crBBox.bottom + fHeight / 2.0f),
+ PWLPT_MOVETO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.left + fWidth / 60.0f,
+ crBBox.bottom + fHeight / 2.0f +
+ PWL_BEZIER * (fHeight / 60.0f - fHeight / 2.0f)),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.left + fWidth / 2.0f -
+ PWL_BEZIER * (fWidth / 2.0f - fWidth / 60.0f),
+ crBBox.bottom + fHeight / 60.0f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 2.0f,
+ crBBox.bottom + fHeight / 60.0f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 2.0f +
+ PWL_BEZIER * fWidth * 29 / 60.0f,
+ crBBox.bottom + fHeight / 60.0f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.right - fWidth / 60.0f,
+ crBBox.bottom + fHeight / 2.0f +
+ PWL_BEZIER * (fHeight / 60.0f - fHeight / 2.0f)),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 60.0f,
+ crBBox.bottom + fHeight / 2.0f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 60.0f,
+ crBBox.bottom + fHeight / 2.0f +
+ PWL_BEZIER * fHeight * 29 / 60.0f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 2.0f +
+ PWL_BEZIER * fWidth * 29 / 60.0f,
+ crBBox.top - fHeight / 60.0f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.left + fWidth / 2.0f, crBBox.top - fHeight / 60.0f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 2.0f -
+ PWL_BEZIER * fWidth * 29 / 60.0f,
+ crBBox.top - fHeight / 60.0f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 60.0f,
+ crBBox.bottom + fHeight / 2.0f +
+ PWL_BEZIER * fHeight * 29 / 60.0f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 60.0f,
+ crBBox.bottom + fHeight / 2.0f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.27f,
+ crBBox.top - fHeight * 0.36f),
+ PWLPT_MOVETO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.27f,
+ crBBox.top - fHeight * 0.36f +
+ PWL_BEZIER * fHeight * 0.23f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.left + fWidth * 0.5f - PWL_BEZIER * fWidth * 0.23f,
+ crBBox.bottom + fHeight * 0.87f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.5f,
+ crBBox.bottom + fHeight * 0.87f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.left + fWidth * 0.5f + PWL_BEZIER * fWidth * 0.23f,
+ crBBox.bottom + fHeight * 0.87f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.27f,
+ crBBox.top - fHeight * 0.36f +
+ PWL_BEZIER * fHeight * 0.23f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.27f,
+ crBBox.top - fHeight * 0.36f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.right - fWidth * 0.27f - fWidth * 0.08f * 0.2f,
+ crBBox.top - fHeight * 0.36f - fHeight * 0.15f * 0.7f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.right - fWidth * 0.35f + fWidth * 0.08f * 0.2f,
+ crBBox.top - fHeight * 0.51f + fHeight * 0.15f * 0.2f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.35f,
+ crBBox.top - fHeight * 0.51f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.right - fWidth * 0.35f - fWidth * 0.1f * 0.5f,
+ crBBox.top - fHeight * 0.51f - fHeight * 0.15f * 0.3f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.right - fWidth * 0.45f - fWidth * 0.1f * 0.5f,
+ crBBox.top - fHeight * 0.68f + fHeight * 0.15f * 0.5f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.45f,
+ crBBox.top - fHeight * 0.68f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.45f,
+ crBBox.bottom + fHeight * 0.30f),
+ PWLPT_LINETO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.right - fWidth * 0.45f,
+ crBBox.bottom + fHeight * 0.30f - fWidth * 0.1f * 0.7f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.right - fWidth * 0.55f,
+ crBBox.bottom + fHeight * 0.30f - fWidth * 0.1f * 0.7f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.55f,
+ crBBox.bottom + fHeight * 0.30f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.55f,
+ crBBox.top - fHeight * 0.66f),
+ PWLPT_LINETO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.right - fWidth * 0.55f - fWidth * 0.1f * 0.05f,
+ crBBox.top - fHeight * 0.66f + fHeight * 0.18f * 0.5f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.right - fWidth * 0.45f - fWidth * 0.1f * 0.05f,
+ crBBox.top - fHeight * 0.48f - fHeight * 0.18f * 0.3f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.45f,
+ crBBox.top - fHeight * 0.48f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.right - fWidth * 0.45f + fWidth * 0.08f * 0.2f,
+ crBBox.top - fHeight * 0.48f + fHeight * 0.18f * 0.2f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.right - fWidth * 0.37f - fWidth * 0.08f * 0.2f,
+ crBBox.top - fHeight * 0.36f - fHeight * 0.18f * 0.7f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.37f,
+ crBBox.top - fHeight * 0.36f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.37f,
+ crBBox.top - fHeight * 0.36f +
+ PWL_BEZIER * fHeight * 0.13f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.left + fWidth * 0.5f + PWL_BEZIER * fWidth * 0.13f,
+ crBBox.bottom + fHeight * 0.77f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.5f,
+ crBBox.bottom + fHeight * 0.77f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.left + fWidth * 0.5f - PWL_BEZIER * fWidth * 0.13f,
+ crBBox.bottom + fHeight * 0.77f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.37f,
+ crBBox.top - fHeight * 0.36f +
+ PWL_BEZIER * fHeight * 0.13f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.37f,
+ crBBox.top - fHeight * 0.36f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.left + fWidth * 0.37f,
+ crBBox.top - fHeight * 0.36f - fWidth * 0.1f * 0.6f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.left + fWidth * 0.27f,
+ crBBox.top - fHeight * 0.36f - fWidth * 0.1f * 0.6f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.27f,
+ crBBox.top - fHeight * 0.36f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.56f,
+ crBBox.bottom + fHeight * 0.13f),
+ PWLPT_MOVETO),
+ CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.56f,
+ crBBox.bottom + fHeight * 0.13f +
+ PWL_BEZIER * fHeight * 0.055f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.505f -
+ PWL_BEZIER * fWidth * 0.095f,
+ crBBox.bottom + fHeight * 0.185f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.505f,
+ crBBox.bottom + fHeight * 0.185f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.505f +
+ PWL_BEZIER * fWidth * 0.065f,
+ crBBox.bottom + fHeight * 0.185f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.44f,
+ crBBox.bottom + fHeight * 0.13f +
+ PWL_BEZIER * fHeight * 0.055f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.44f,
+ crBBox.bottom + fHeight * 0.13f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.44f,
+ crBBox.bottom + fHeight * 0.13f -
+ PWL_BEZIER * fHeight * 0.055f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.505f +
+ PWL_BEZIER * fWidth * 0.065f,
+ crBBox.bottom + fHeight * 0.075f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.505f,
+ crBBox.bottom + fHeight * 0.075f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.505f -
+ PWL_BEZIER * fWidth * 0.065f,
+ crBBox.bottom + fHeight * 0.075f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.56f,
+ crBBox.bottom + fHeight * 0.13f -
+ PWL_BEZIER * fHeight * 0.055f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.56f,
+ crBBox.bottom + fHeight * 0.13f),
+ PWLPT_BEZIERTO)};
+
+ if (type == PWLPT_STREAM)
+ sPathData = GetAppStreamFromArray(PathArray, 59);
+ else
+ GetPathDataFromArray(path, PathArray, 59);
+}
+
+void CPWL_Utils::GetGraphics_InsertText(CFX_ByteString& sPathData,
+ CFX_PathData& path,
+ const CPDF_Rect& crBBox,
+ const PWL_PATH_TYPE type) {
+ FX_FLOAT fWidth = crBBox.right - crBBox.left;
+ FX_FLOAT fHeight = crBBox.top - crBBox.bottom;
+
+ CPWL_PathData PathArray[] = {
+ CPWL_PathData(
+ CPWL_Point(crBBox.left + fWidth / 10, crBBox.bottom + fHeight / 10),
+ PWLPT_MOVETO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.left + fWidth / 2, crBBox.top - fHeight * 2 / 15),
+ PWLPT_LINETO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.right - fWidth / 10, crBBox.bottom + fHeight / 10),
+ PWLPT_LINETO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.left + fWidth / 10, crBBox.bottom + fHeight / 10),
+ PWLPT_LINETO)};
+
+ if (type == PWLPT_STREAM)
+ sPathData = GetAppStreamFromArray(PathArray, 4);
+ else
+ GetPathDataFromArray(path, PathArray, 4);
+}
+
+void CPWL_Utils::GetGraphics_Key(CFX_ByteString& sPathData,
+ CFX_PathData& path,
+ const CPDF_Rect& crBBox,
+ const PWL_PATH_TYPE type) {
+ FX_FLOAT fWidth = crBBox.right - crBBox.left;
+ FX_FLOAT fHeight = crBBox.top - crBBox.bottom;
+ FX_FLOAT k = -fHeight / fWidth;
+ CPWL_Point tail;
+ CPWL_Point CicleCenter;
+ tail.x = crBBox.left + fWidth * 0.9f;
+ tail.y = k * (tail.x - crBBox.right) + crBBox.bottom;
+ CicleCenter.x = crBBox.left + fWidth * 0.15f;
+ CicleCenter.y = k * (CicleCenter.x - crBBox.right) + crBBox.bottom;
+
+ CPWL_PathData PathArray[] = {
+ CPWL_PathData(
+ CPWL_Point(tail.x + fWidth / 30.0f, -fWidth / 30.0f / k + tail.y),
+ PWLPT_MOVETO),
+ CPWL_PathData(CPWL_Point(tail.x + fWidth / 30.0f - fWidth * 0.18f,
+ -k * fWidth * 0.18f - fWidth / 30 / k + tail.y),
+ PWLPT_LINETO),
+ CPWL_PathData(
+ CPWL_Point(tail.x + fWidth / 30 - fWidth * 0.18f + fWidth * 0.07f,
+ -fWidth * 0.07f / k - k * fWidth * 0.18f -
+ fWidth / 30 / k + tail.y),
+ PWLPT_LINETO),
+ CPWL_PathData(
+ CPWL_Point(tail.x + fWidth / 30 - fWidth * 0.18f - fWidth / 20 +
+ fWidth * 0.07f,
+ -fWidth * 0.07f / k - k * fWidth / 20 -
+ k * fWidth * 0.18f - fWidth / 30 / k + tail.y),
+ PWLPT_LINETO),
+ CPWL_PathData(
+ CPWL_Point(
+ tail.x + fWidth / 30 - fWidth * 0.18f - fWidth / 20,
+ -k * fWidth / 20 - k * fWidth * 0.18f - fWidth / 30 / k + tail.y),
+ PWLPT_LINETO),
+ CPWL_PathData(
+ CPWL_Point(
+ tail.x + fWidth / 30 - fWidth * 0.18f - fWidth / 20 - fWidth / 15,
+ -k * fWidth / 15 - k * fWidth / 20 - k * fWidth * 0.18f -
+ fWidth / 30 / k + tail.y),
+ PWLPT_LINETO),
+ CPWL_PathData(
+ CPWL_Point(tail.x + fWidth / 30 - fWidth * 0.18f - fWidth / 20 -
+ fWidth / 15 + fWidth * 0.07f,
+ -fWidth * 0.07f / k - k * fWidth / 15 - k * fWidth / 20 -
+ k * fWidth * 0.18f - fWidth / 30 / k + tail.y),
+ PWLPT_LINETO),
+ CPWL_PathData(
+ CPWL_Point(tail.x + fWidth / 30 - fWidth * 0.18f - fWidth / 20 -
+ fWidth / 15 - fWidth / 20 + fWidth * 0.07f,
+ -fWidth * 0.07f / k + -k * fWidth / 20 + -k * fWidth / 15 -
+ k * fWidth / 20 - k * fWidth * 0.18f -
+ fWidth / 30 / k + tail.y),
+ PWLPT_LINETO),
+ CPWL_PathData(
+ CPWL_Point(tail.x + fWidth / 30 - fWidth * 0.18f - fWidth / 20 -
+ fWidth / 15 - fWidth / 20,
+ -k * fWidth / 20 + -k * fWidth / 15 - k * fWidth / 20 -
+ k * fWidth * 0.18f - fWidth / 30 / k + tail.y),
+ PWLPT_LINETO),
+ CPWL_PathData(CPWL_Point(tail.x + fWidth / 30 - fWidth * 0.45f,
+ -k * fWidth * 0.45f - fWidth / 30 / k + tail.y),
+ PWLPT_LINETO),
+ CPWL_PathData(
+ CPWL_Point(tail.x + fWidth / 30 - fWidth * 0.45f + fWidth * 0.2f,
+ -fWidth * 0.4f / k - k * fWidth * 0.45f - fWidth / 30 / k +
+ tail.y),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(CicleCenter.x + fWidth * 0.2f,
+ -fWidth * 0.1f / k + CicleCenter.y),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(CicleCenter.x, CicleCenter.y), PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(CicleCenter.x - fWidth / 60.0f,
+ -k * fWidth / 60 + CicleCenter.y),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(CicleCenter.x - fWidth / 60,
+ -k * fWidth / 60 + CicleCenter.y),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(CicleCenter.x, CicleCenter.y), PWLPT_BEZIERTO),
+ CPWL_PathData(
+ CPWL_Point(CicleCenter.x - fWidth * 0.22f,
+ fWidth * 0.35f / k + CicleCenter.y - fHeight * 0.05f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(
+ CPWL_Point(tail.x - fWidth / 30 - fWidth * 0.45f - fWidth * 0.18f,
+ fWidth * 0.05f / k - k * fWidth * 0.45f + fWidth / 30 / k +
+ tail.y - fHeight * 0.05f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(
+ CPWL_Point(tail.x - fWidth / 30.0f - fWidth * 0.45f,
+ -k * fWidth * 0.45f + fWidth / 30.0f / k + tail.y),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(
+ CPWL_Point(tail.x - fWidth / 30.0f, fWidth / 30.0f / k + tail.y),
+ PWLPT_LINETO),
+ CPWL_PathData(CPWL_Point(tail.x + fWidth / 30, -fWidth / 30 / k + tail.y),
+ PWLPT_LINETO),
+ CPWL_PathData(CPWL_Point(CicleCenter.x + fWidth * 0.08f,
+ k * fWidth * 0.08f + CicleCenter.y),
+ PWLPT_MOVETO),
+ CPWL_PathData(
+ CPWL_Point(CicleCenter.x + fWidth * 0.08f + fWidth * 0.1f,
+ -fWidth * 0.1f / k + k * fWidth * 0.08f + CicleCenter.y),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(
+ CPWL_Point(CicleCenter.x + fWidth * 0.22f + fWidth * 0.1f,
+ k * fWidth * 0.22f + CicleCenter.y - fWidth * 0.1f / k),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(CicleCenter.x + fWidth * 0.22f,
+ k * fWidth * 0.22f + CicleCenter.y),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(
+ CPWL_Point(CicleCenter.x + fWidth * 0.22f - fWidth * 0.1f,
+ fWidth * 0.1f / k + k * fWidth * 0.22f + CicleCenter.y),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(
+ CPWL_Point(CicleCenter.x + fWidth * 0.08f - fWidth * 0.1f,
+ fWidth * 0.1f / k + k * fWidth * 0.08f + CicleCenter.y),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(CicleCenter.x + fWidth * 0.08f,
+ k * fWidth * 0.08f + CicleCenter.y),
+ PWLPT_BEZIERTO)};
+
+ if (type == PWLPT_STREAM)
+ sPathData = GetAppStreamFromArray(PathArray, 28);
+ else
+ GetPathDataFromArray(path, PathArray, 28);
+}
+
+void CPWL_Utils::GetGraphics_NewParagraph(CFX_ByteString& sPathData,
+ CFX_PathData& path,
+ const CPDF_Rect& crBBox,
+ const PWL_PATH_TYPE type) {
+ FX_FLOAT fWidth = crBBox.right - crBBox.left;
+ FX_FLOAT fHeight = crBBox.top - crBBox.bottom;
+
+ CPWL_PathData PathArray[] = {
+ CPWL_PathData(
+ CPWL_Point(crBBox.left + fWidth / 2.0f, crBBox.top - fHeight / 20.0f),
+ PWLPT_MOVETO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.left + fWidth / 10.0f, crBBox.top - fHeight / 2.0f),
+ PWLPT_LINETO),
+ CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 10.0f,
+ crBBox.top - fHeight / 2.0f),
+ PWLPT_LINETO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.left + fWidth / 2.0f, crBBox.top - fHeight / 20.0f),
+ PWLPT_LINETO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.12f,
+ crBBox.top - fHeight * 17 / 30.0f),
+ PWLPT_MOVETO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.12f,
+ crBBox.bottom + fHeight / 10.0f),
+ PWLPT_LINETO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.22f,
+ crBBox.bottom + fHeight / 10.0f),
+ PWLPT_LINETO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.left + fWidth * 0.22f,
+ crBBox.top - fHeight * 17 / 30.0f - fWidth * 0.14f),
+ PWLPT_LINETO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.38f,
+ crBBox.bottom + fHeight / 10.0f),
+ PWLPT_LINETO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.48f,
+ crBBox.bottom + fHeight / 10.0f),
+ PWLPT_LINETO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.48f,
+ crBBox.top - fHeight * 17 / 30.0f),
+ PWLPT_LINETO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.38f,
+ crBBox.top - fHeight * 17 / 30.0f),
+ PWLPT_LINETO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.38f,
+ crBBox.bottom + fWidth * 0.24f),
+ PWLPT_LINETO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.22f,
+ crBBox.top - fHeight * 17 / 30.0f),
+ PWLPT_LINETO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.12f,
+ crBBox.top - fHeight * 17 / 30.0f),
+ PWLPT_LINETO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.6f,
+ crBBox.bottom + fHeight / 10.0f),
+ PWLPT_MOVETO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.7f,
+ crBBox.bottom + fHeight / 10.0f),
+ PWLPT_LINETO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.left + fWidth * 0.7f,
+ crBBox.bottom + fHeight / 10.0f + fHeight / 7.0f),
+ PWLPT_LINETO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.left + fWidth * 0.97f,
+ crBBox.bottom + fHeight / 10.0f + fHeight / 7.0f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.97f,
+ crBBox.top - fHeight * 17 / 30.0f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.7f,
+ crBBox.top - fHeight * 17 / 30.0f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.6f,
+ crBBox.top - fHeight * 17 / 30.0f),
+ PWLPT_LINETO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.6f,
+ crBBox.bottom + fHeight / 10.0f),
+ PWLPT_LINETO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.7f,
+ crBBox.bottom + fHeight / 7 + fHeight * 0.18f),
+ PWLPT_MOVETO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.85f,
+ crBBox.bottom + fHeight / 7 + fHeight * 0.18f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.left + fWidth * 0.85f,
+ crBBox.top - fHeight * 17 / 30.0f - fHeight * 0.08f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.left + fWidth * 0.7f,
+ crBBox.top - fHeight * 17 / 30.0f - fHeight * 0.08f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.7f,
+ crBBox.bottom + fHeight / 7 + fHeight * 0.18f),
+ PWLPT_LINETO)};
+
+ if (type == PWLPT_STREAM)
+ sPathData = GetAppStreamFromArray(PathArray, 28);
+ else
+ GetPathDataFromArray(path, PathArray, 28);
+}
+
+void CPWL_Utils::GetGraphics_TextNote(CFX_ByteString& sPathData,
+ CFX_PathData& path,
+ const CPDF_Rect& crBBox,
+ const PWL_PATH_TYPE type) {
+ FX_FLOAT fWidth = crBBox.right - crBBox.left;
+ FX_FLOAT fHeight = crBBox.top - crBBox.bottom;
+
+ CPWL_PathData PathArray[] = {
+ CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 3 / 10.0f,
+ crBBox.bottom + fHeight / 15.0f),
+ PWLPT_MOVETO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 7 / 10.0f,
+ crBBox.bottom + fHeight * 4 / 15.0f),
+ PWLPT_LINETO),
+ CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 10.0f,
+ crBBox.bottom + fHeight * 4 / 15.0f),
+ PWLPT_LINETO),
+ CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 10.0f,
+ crBBox.top - fHeight / 15.0f),
+ PWLPT_LINETO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 10.0f,
+ crBBox.top - fHeight / 15.0f),
+ PWLPT_LINETO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 10.0f,
+ crBBox.bottom + fHeight / 15.0f),
+ PWLPT_LINETO),
+ CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 3 / 10.0f,
+ crBBox.bottom + fHeight / 15.0f),
+ PWLPT_LINETO),
+ CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 10.0f,
+ crBBox.bottom + fHeight * 4 / 15.0f),
+ PWLPT_LINETO),
+ CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 3 / 10.0f,
+ crBBox.bottom + fHeight / 15.0f),
+ PWLPT_LINETO),
+ CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 3 / 10.0f,
+ crBBox.bottom + fHeight * 4 / 15.0f),
+ PWLPT_LINETO),
+ CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 10.0f,
+ crBBox.bottom + fHeight * 4 / 15.0f),
+ PWLPT_LINETO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 5.0f,
+ crBBox.top - fHeight * 4 / 15.0f),
+ PWLPT_MOVETO),
+ CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 5.0f,
+ crBBox.top - fHeight * 4 / 15.0f),
+ PWLPT_LINETO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 5.0f,
+ crBBox.top - fHeight * 7 / 15.0f),
+ PWLPT_MOVETO),
+ CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 5.0f,
+ crBBox.top - fHeight * 7 / 15.0f),
+ PWLPT_LINETO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 5.0f,
+ crBBox.top - fHeight * 10 / 15.0f),
+ PWLPT_MOVETO),
+ CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 3 / 10.0f,
+ crBBox.top - fHeight * 10 / 15.0f),
+ PWLPT_LINETO)};
+
+ if (type == PWLPT_STREAM)
+ sPathData = GetAppStreamFromArray(PathArray, 17);
+ else
+ GetPathDataFromArray(path, PathArray, 17);
+}
+
+void CPWL_Utils::GetGraphics_Paragraph(CFX_ByteString& sPathData,
+ CFX_PathData& path,
+ const CPDF_Rect& crBBox,
+ const PWL_PATH_TYPE type) {
+ FX_FLOAT fWidth = crBBox.right - crBBox.left;
+ FX_FLOAT fHeight = crBBox.top - crBBox.bottom;
+
+ CPWL_PathData PathArray[] = {
+ CPWL_PathData(
+ CPWL_Point(crBBox.left + fWidth / 2.0f, crBBox.top - fHeight / 15.0f),
+ PWLPT_MOVETO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.left + fWidth * 0.7f, crBBox.top - fHeight / 15.0f),
+ PWLPT_LINETO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.7f,
+ crBBox.bottom + fHeight / 15.0f),
+ PWLPT_LINETO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.634f,
+ crBBox.bottom + fHeight / 15.0f),
+ PWLPT_LINETO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.634f,
+ crBBox.top - fHeight * 2 / 15.0f),
+ PWLPT_LINETO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.566f,
+ crBBox.top - fHeight * 2 / 15.0f),
+ PWLPT_LINETO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.566f,
+ crBBox.bottom + fHeight / 15.0f),
+ PWLPT_LINETO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 2.0f,
+ crBBox.bottom + fHeight / 15.0f),
+ PWLPT_LINETO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 2.0f,
+ crBBox.top - fHeight / 15.0f - fHeight * 0.4f),
+ PWLPT_LINETO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.2f,
+ crBBox.top - fHeight / 15.0f - fHeight * 0.4f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.left + fWidth * 0.2f, crBBox.top - fHeight / 15.0f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.left + fWidth / 2.0f, crBBox.top - fHeight / 15.0f),
+ PWLPT_BEZIERTO)};
+
+ if (type == PWLPT_STREAM)
+ sPathData = GetAppStreamFromArray(PathArray, 12);
+ else
+ GetPathDataFromArray(path, PathArray, 12);
+}
+
+void CPWL_Utils::GetGraphics_RightArrow(CFX_ByteString& sPathData,
+ CFX_PathData& path,
+ const CPDF_Rect& crBBox,
+ const PWL_PATH_TYPE type) {
+ FX_FLOAT fWidth = crBBox.right - crBBox.left;
+ FX_FLOAT fHeight = crBBox.top - crBBox.bottom;
+
+ CPWL_PathData PathArray[] = {
+ CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 15.0f,
+ crBBox.top - fHeight / 2.0f),
+ PWLPT_MOVETO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 2.0f + fWidth / 8.0f,
+ crBBox.bottom + fHeight / 5.0f),
+ PWLPT_LINETO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 2.0f,
+ crBBox.bottom + fHeight / 5.0f),
+ PWLPT_LINETO),
+ CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 15.0f - fWidth * 0.15f,
+ crBBox.top - fHeight / 2.0f - fWidth / 25.0f),
+ PWLPT_LINETO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.1f,
+ crBBox.top - fHeight / 2.0f - fWidth / 25.0f),
+ PWLPT_LINETO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.1f,
+ crBBox.top - fHeight / 2.0f + fWidth / 25.0f),
+ PWLPT_LINETO),
+ CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 15.0f - fWidth * 0.15f,
+ crBBox.top - fHeight / 2.0f + fWidth / 25.0f),
+ PWLPT_LINETO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.left + fWidth / 2.0f, crBBox.top - fHeight / 5.0f),
+ PWLPT_LINETO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 2.0f + fWidth / 8.0f,
+ crBBox.top - fHeight / 5.0f),
+ PWLPT_LINETO),
+ CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 15.0f,
+ crBBox.top - fHeight / 2.0f),
+ PWLPT_LINETO)};
+
+ if (type == PWLPT_STREAM)
+ sPathData = GetAppStreamFromArray(PathArray, 10);
+ else
+ GetPathDataFromArray(path, PathArray, 10);
+}
+
+void CPWL_Utils::GetGraphics_RightPointer(CFX_ByteString& sPathData,
+ CFX_PathData& path,
+ const CPDF_Rect& crBBox,
+ const PWL_PATH_TYPE type) {
+ FX_FLOAT fWidth = crBBox.right - crBBox.left;
+ FX_FLOAT fHeight = crBBox.top - crBBox.bottom;
+
+ CPWL_PathData PathArray[] = {
+ CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 30.0f,
+ crBBox.top - fHeight / 2.0f),
+ PWLPT_MOVETO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 30.0f,
+ crBBox.bottom + fHeight / 6.0f),
+ PWLPT_LINETO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 4 / 15.0f,
+ crBBox.top - fHeight / 2.0f),
+ PWLPT_LINETO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.left + fWidth / 30.0f, crBBox.top - fHeight / 6.0f),
+ PWLPT_LINETO),
+ CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 30.0f,
+ crBBox.top - fHeight / 2.0f),
+ PWLPT_LINETO)};
+
+ if (type == PWLPT_STREAM)
+ sPathData = GetAppStreamFromArray(PathArray, 5);
+ else
+ GetPathDataFromArray(path, PathArray, 5);
+}
+
+void CPWL_Utils::GetGraphics_Star(CFX_ByteString& sPathData,
+ CFX_PathData& path,
+ const CPDF_Rect& crBBox,
+ const PWL_PATH_TYPE type) {
+ FX_FLOAT fLongRadius =
+ (crBBox.top - crBBox.bottom) / (1 + (FX_FLOAT)cos(PWL_PI / 5.0f));
+ fLongRadius = fLongRadius * 0.7f;
+ FX_FLOAT fShortRadius = fLongRadius * 0.55f;
+ CPDF_Point ptCenter = CPDF_Point((crBBox.left + crBBox.right) / 2.0f,
+ (crBBox.top + crBBox.bottom) / 2.0f);
+
+ FX_FLOAT px1[5], py1[5];
+ FX_FLOAT px2[5], py2[5];
+
+ FX_FLOAT fAngel = PWL_PI / 10.0f;
+
+ for (int32_t i = 0; i < 5; i++) {
+ px1[i] = ptCenter.x + fLongRadius * (FX_FLOAT)cos(fAngel);
+ py1[i] = ptCenter.y + fLongRadius * (FX_FLOAT)sin(fAngel);
+
+ fAngel += PWL_PI * 2 / 5.0f;
+ }
+
+ fAngel = PWL_PI / 5.0f + PWL_PI / 10.0f;
+
+ for (int32_t j = 0; j < 5; j++) {
+ px2[j] = ptCenter.x + fShortRadius * (FX_FLOAT)cos(fAngel);
+ py2[j] = ptCenter.y + fShortRadius * (FX_FLOAT)sin(fAngel);
+
+ fAngel += PWL_PI * 2 / 5.0f;
+ }
+
+ CPWL_PathData PathArray[11];
+ PathArray[0] = CPWL_PathData(CPWL_Point(px1[0], py1[0]), PWLPT_MOVETO);
+ PathArray[1] = CPWL_PathData(CPWL_Point(px2[0], py2[0]), PWLPT_LINETO);
+
+ for (int32_t k = 0; k < 4; k++) {
+ PathArray[(k + 1) * 2] =
+ CPWL_PathData(CPWL_Point(px1[k + 1], py1[k + 1]), PWLPT_LINETO);
+ PathArray[(k + 1) * 2 + 1] =
+ CPWL_PathData(CPWL_Point(px2[k + 1], py2[k + 1]), PWLPT_LINETO);
+ }
+
+ PathArray[10] = CPWL_PathData(CPWL_Point(px1[0], py1[0]), PWLPT_LINETO);
+
+ if (type == PWLPT_STREAM)
+ sPathData = GetAppStreamFromArray(PathArray, 11);
+ else
+ GetPathDataFromArray(path, PathArray, 11);
+}
+
+void CPWL_Utils::GetGraphics_UpArrow(CFX_ByteString& sPathData,
+ CFX_PathData& path,
+ const CPDF_Rect& crBBox,
+ const PWL_PATH_TYPE type) {
+ FX_FLOAT fWidth = crBBox.right - crBBox.left;
+ FX_FLOAT fHeight = crBBox.top - crBBox.bottom;
+
+ CPWL_PathData PathArray[] = {
+ CPWL_PathData(
+ CPWL_Point(crBBox.left + fWidth / 2.0f, crBBox.top - fHeight / 15.0f),
+ PWLPT_MOVETO),
+ CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 10.0f,
+ crBBox.top - fWidth * 3 / 5.0f),
+ PWLPT_LINETO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.6f,
+ crBBox.top - fWidth * 3 / 5.0f),
+ PWLPT_LINETO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.6f,
+ crBBox.bottom + fHeight / 15.0f),
+ PWLPT_LINETO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.4f,
+ crBBox.bottom + fHeight / 15.0f),
+ PWLPT_LINETO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.4f,
+ crBBox.top - fWidth * 3 / 5.0f),
+ PWLPT_LINETO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.left + fWidth / 10, crBBox.top - fWidth * 3 / 5.0f),
+ PWLPT_LINETO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.left + fWidth / 2.0f, crBBox.top - fHeight / 15.0f),
+ PWLPT_LINETO)};
+
+ if (type == PWLPT_STREAM)
+ sPathData = GetAppStreamFromArray(PathArray, 8);
+ else
+ GetPathDataFromArray(path, PathArray, 8);
+}
+
+void CPWL_Utils::GetGraphics_UpLeftArrow(CFX_ByteString& sPathData,
+ CFX_PathData& path,
+ const CPDF_Rect& crBBox,
+ const PWL_PATH_TYPE type) {
+ FX_FLOAT fWidth = crBBox.right - crBBox.left;
+ FX_FLOAT fHeight = crBBox.top - crBBox.bottom;
+ CPWL_Point leftup(crBBox.left, crBBox.top);
+ CPWL_Point rightdown(crBBox.right, crBBox.bottom);
+ FX_FLOAT k = -fHeight / fWidth;
+ CPWL_Point tail;
+ tail.x = crBBox.left + fWidth * 4 / 5.0f;
+ tail.y = k * (tail.x - crBBox.right) + rightdown.y;
+
+ CPWL_PathData PathArray[] = {
+ CPWL_PathData(
+ CPWL_Point(
+ crBBox.left + fWidth / 20.0f,
+ k * (crBBox.left + fWidth / 20.0f - rightdown.x) + rightdown.y),
+ PWLPT_MOVETO),
+ CPWL_PathData(CPWL_Point(fHeight * 17 / 60.0f / k + tail.x +
+ fWidth / 10.0f + fWidth / 5.0f,
+ -fWidth / 5.0f / k + tail.y -
+ fWidth / 10.0f / k + fHeight * 17 / 60.0f),
+ PWLPT_LINETO),
+ CPWL_PathData(
+ CPWL_Point(fHeight * 17 / 60.0f / k + tail.x + fWidth / 10.0f,
+ tail.y - fWidth / 10.0f / k + fHeight * 17 / 60.0f),
+ PWLPT_LINETO),
+ CPWL_PathData(
+ CPWL_Point(tail.x + fWidth / 10.0f, tail.y - fWidth / 10.0f / k),
+ PWLPT_LINETO),
+ CPWL_PathData(
+ CPWL_Point(tail.x - fWidth / 10.0f, tail.y + fWidth / 10.0f / k),
+ PWLPT_LINETO),
+ CPWL_PathData(
+ CPWL_Point(fHeight * 17 / 60.0f / k + tail.x - fWidth / 10.0f,
+ tail.y + fWidth / 10.0f / k + fHeight * 17 / 60.0f),
+ PWLPT_LINETO),
+ CPWL_PathData(CPWL_Point(fHeight * 17 / 60.0f / k + tail.x -
+ fWidth / 10.0f - fWidth / 5.0f,
+ fWidth / 5.0f / k + tail.y + fWidth / 10.0f / k +
+ fHeight * 17 / 60.0f),
+ PWLPT_LINETO),
+ CPWL_PathData(
+ CPWL_Point(
+ crBBox.left + fWidth / 20.0f,
+ k * (crBBox.left + fWidth / 20.0f - rightdown.x) + rightdown.y),
+ PWLPT_LINETO)};
+
+ if (type == PWLPT_STREAM)
+ sPathData = GetAppStreamFromArray(PathArray, 8);
+ else
+ GetPathDataFromArray(path, PathArray, 8);
+}
+
+void CPWL_Utils::GetGraphics_Graph(CFX_ByteString& sPathData,
+ CFX_PathData& path,
+ const CPDF_Rect& crBBox,
+ const PWL_PATH_TYPE type) {
+ FX_FLOAT fWidth = crBBox.right - crBBox.left;
+ FX_FLOAT fHeight = crBBox.top - crBBox.bottom;
+
+ CPWL_PathData PathArray[] = {
+ CPWL_PathData(
+ CPWL_Point(crBBox.left + fWidth * 0.05f, crBBox.top - fWidth * 0.15f),
+ PWLPT_MOVETO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.25f,
+ crBBox.top - fHeight * 0.15f),
+ PWLPT_LINETO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.275f,
+ crBBox.bottom + fHeight * 0.08f),
+ PWLPT_LINETO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.05f,
+ crBBox.bottom + fHeight * 0.08f),
+ PWLPT_LINETO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.left + fWidth * 0.05f, crBBox.top - fWidth * 0.15f),
+ PWLPT_LINETO),
+
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.275f,
+ crBBox.top - fWidth * 0.45f),
+ PWLPT_MOVETO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.475f,
+ crBBox.top - fWidth * 0.45f),
+ PWLPT_LINETO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.475f,
+ crBBox.bottom + fHeight * 0.08f),
+ PWLPT_LINETO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.275f,
+ crBBox.bottom + fHeight * 0.08f),
+ PWLPT_LINETO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.275f,
+ crBBox.top - fWidth * 0.45f),
+ PWLPT_LINETO),
+
+ CPWL_PathData(
+ CPWL_Point(crBBox.left + fWidth * 0.5f, crBBox.top - fHeight * 0.05f),
+ PWLPT_MOVETO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.left + fWidth * 0.7f, crBBox.top - fHeight * 0.05f),
+ PWLPT_LINETO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.7f,
+ crBBox.bottom + fHeight * 0.08f),
+ PWLPT_LINETO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.5f,
+ crBBox.bottom + fHeight * 0.08f),
+ PWLPT_LINETO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.left + fWidth * 0.5f, crBBox.top - fHeight * 0.05f),
+ PWLPT_LINETO),
+
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.725f,
+ crBBox.top - fWidth * 0.35f),
+ PWLPT_MOVETO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.925f,
+ crBBox.top - fWidth * 0.35f),
+ PWLPT_LINETO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.925f,
+ crBBox.bottom + fHeight * 0.08f),
+ PWLPT_LINETO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.725f,
+ crBBox.bottom + fHeight * 0.08f),
+ PWLPT_LINETO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.725f,
+ crBBox.top - fWidth * 0.35f),
+ PWLPT_LINETO)};
+
+ if (type == PWLPT_STREAM)
+ sPathData = GetAppStreamFromArray(PathArray, 20);
+ else
+ GetPathDataFromArray(path, PathArray, 20);
+}
+
+void CPWL_Utils::GetGraphics_Paperclip(CFX_ByteString& sPathData,
+ CFX_PathData& path,
+ const CPDF_Rect& crBBox,
+ const PWL_PATH_TYPE type) {
+ FX_FLOAT fWidth = crBBox.right - crBBox.left;
+ FX_FLOAT fHeight = crBBox.top - crBBox.bottom;
+
+ CPWL_PathData PathArray[] = {
+ CPWL_PathData(
+ CPWL_Point(crBBox.left + fWidth / 60, crBBox.top - fHeight * 0.25f),
+ PWLPT_MOVETO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 60,
+ crBBox.bottom + fHeight * 0.25f),
+ PWLPT_LINETO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 60,
+ crBBox.bottom + fHeight * 0.25f -
+ fWidth * 57 / 60.0f * 0.35f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 30,
+ crBBox.bottom + fHeight * 0.25f -
+ fWidth * 57 / 60.0f * 0.35f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 30,
+ crBBox.bottom + fHeight * 0.25f),
+ PWLPT_BEZIERTO),
+
+ CPWL_PathData(
+ CPWL_Point(crBBox.right - fWidth / 30, crBBox.top - fHeight * 0.33f),
+ PWLPT_LINETO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.right - fWidth / 30,
+ crBBox.top - fHeight * 0.33f + fHeight / 15 * 0.5f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.right - fWidth / 30 - fWidth * 0.12f,
+ crBBox.top - fHeight * 0.33f + fHeight / 15 * 0.5f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 30 - fWidth * 0.12f,
+ crBBox.top - fHeight * 0.33f),
+ PWLPT_BEZIERTO),
+
+ CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 30 - fWidth * 0.12f,
+ crBBox.bottom + fHeight * 0.2f),
+ PWLPT_LINETO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.right - fWidth / 30 - fWidth * 0.12f,
+ crBBox.bottom + fHeight * 0.2f -
+ (fWidth * 57 / 60.0f - fWidth * 0.24f) * 0.25f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.left + fWidth / 60 + fWidth * 0.12f,
+ crBBox.bottom + fHeight * 0.2f -
+ (fWidth * 57 / 60.0f - fWidth * 0.24f) * 0.25f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 60 + fWidth * 0.12f,
+ crBBox.bottom + fHeight * 0.2f),
+ PWLPT_BEZIERTO),
+
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 60 + fWidth * 0.12f,
+ crBBox.top - fHeight * 0.2f),
+ PWLPT_LINETO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.left + fWidth / 60 + fWidth * 0.12f,
+ crBBox.top - fHeight * 0.2f +
+ (fWidth * 11 / 12.0f - fWidth * 0.36f) * 0.25f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.right - fWidth / 15 - fWidth * 0.24f,
+ crBBox.top - fHeight * 0.2f +
+ (fWidth * 11 / 12.0f - fWidth * 0.36f) * 0.25f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 15 - fWidth * 0.24f,
+ crBBox.top - fHeight * 0.2f),
+ PWLPT_BEZIERTO),
+
+ CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 15 - fWidth * 0.24f,
+ crBBox.bottom + fHeight * 0.25f),
+ PWLPT_LINETO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.right - fWidth / 15 - fWidth * 0.24f,
+ crBBox.bottom + fHeight * 0.25f -
+ (fWidth * 14 / 15.0f - fWidth * 0.53f) * 0.25f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.left + fWidth * 0.29f,
+ crBBox.bottom + fHeight * 0.25f -
+ (fWidth * 14 / 15.0f - fWidth * 0.53f) * 0.25f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.29f,
+ crBBox.bottom + fHeight * 0.25f),
+ PWLPT_BEZIERTO),
+
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.29f,
+ crBBox.top - fHeight * 0.33f),
+ PWLPT_LINETO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.left + fWidth * 0.29f,
+ crBBox.top - fHeight * 0.33f + fWidth * 0.12f * 0.35f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.left + fWidth * 0.17f,
+ crBBox.top - fHeight * 0.33f + fWidth * 0.12f * 0.35f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.17f,
+ crBBox.top - fHeight * 0.33f),
+ PWLPT_BEZIERTO),
+
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.17f,
+ crBBox.bottom + fHeight * 0.3f),
+ PWLPT_LINETO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.17f,
+ crBBox.bottom + fHeight * 0.3f -
+ fWidth * (14 / 15.0f - 0.29f) * 0.35f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 15 - fWidth * 0.12f,
+ crBBox.bottom + fHeight * 0.3f -
+ fWidth * (14 / 15.0f - 0.29f) * 0.35f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 15 - fWidth * 0.12f,
+ crBBox.bottom + fHeight * 0.3f),
+ PWLPT_BEZIERTO),
+
+ CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 15 - fWidth * 0.12f,
+ crBBox.top - fHeight * 0.25f),
+ PWLPT_LINETO),
+ CPWL_PathData(CPWL_Point(crBBox.right - fWidth / 15 - fWidth * 0.12f,
+ crBBox.top - fHeight * 0.25f +
+ fWidth * 0.35f * (11 / 12.0f - 0.12f)),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth / 60,
+ crBBox.top - fHeight * 0.25f +
+ fWidth * 0.35f * (11 / 12.0f - 0.12f)),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.left + fWidth / 60, crBBox.top - fHeight * 0.25f),
+ PWLPT_BEZIERTO)};
+
+ if (type == PWLPT_STREAM)
+ sPathData = GetAppStreamFromArray(PathArray, 33);
+ else
+ GetPathDataFromArray(path, PathArray, 33);
+}
+
+void CPWL_Utils::GetGraphics_Attachment(CFX_ByteString& sPathData,
+ CFX_PathData& path,
+ const CPDF_Rect& crBBox,
+ const PWL_PATH_TYPE type) {
+ FX_FLOAT fWidth = crBBox.right - crBBox.left;
+ FX_FLOAT fHeight = crBBox.top - crBBox.bottom;
+
+ CPWL_PathData PathArray[] = {
+ CPWL_PathData(
+ CPWL_Point(crBBox.left + fWidth * 0.25f, crBBox.top - fHeight * 0.1f),
+ PWLPT_MOVETO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.left + fWidth * 0.4f, crBBox.top - fHeight * 0.23f),
+ PWLPT_LINETO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.left + fWidth * 0.4f, crBBox.top - fHeight * 0.5f),
+ PWLPT_LINETO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.4f,
+ crBBox.top - fHeight * 0.5f + fWidth * 0.04f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.6f,
+ crBBox.top - fHeight * 0.5f + fWidth * 0.04f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.left + fWidth * 0.6f, crBBox.top - fHeight * 0.5f),
+ PWLPT_BEZIERTO),
+
+ CPWL_PathData(
+ CPWL_Point(crBBox.left + fWidth * 0.6f, crBBox.top - fHeight * 0.23f),
+ PWLPT_LINETO),
+ CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.25f,
+ crBBox.top - fHeight * 0.1f),
+ PWLPT_LINETO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.left + fWidth * 0.25f, crBBox.top - fHeight * 0.1f),
+ PWLPT_LINETO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.left + fWidth * 0.4f, crBBox.top - fHeight * 0.23f),
+ PWLPT_LINETO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.left + fWidth * 0.6f, crBBox.top - fHeight * 0.23f),
+ PWLPT_LINETO),
+
+ CPWL_PathData(
+ CPWL_Point(crBBox.left + fWidth * 0.4f, crBBox.top - fHeight * 0.5f),
+ PWLPT_MOVETO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.left + fWidth * 0.4f - fWidth * 0.25f * 0.4f,
+ crBBox.top - fHeight * 0.5f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.left + fWidth * 0.15f,
+ crBBox.top - fHeight * 0.65f + fHeight * 0.15f * 0.4f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.15f,
+ crBBox.top - fHeight * 0.65f),
+ PWLPT_BEZIERTO),
+
+ CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.15f,
+ crBBox.top - fHeight * 0.65f),
+ PWLPT_LINETO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.right - fWidth * 0.15f,
+ crBBox.top - fHeight * 0.65f + fHeight * 0.15f * 0.4f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.left + fWidth * 0.6f + fWidth * 0.25f * 0.4f,
+ crBBox.top - fHeight * 0.5f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.left + fWidth * 0.6f, crBBox.top - fHeight * 0.5f),
+ PWLPT_BEZIERTO),
+
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.6f,
+ crBBox.top - fHeight * 0.5f + fWidth * 0.04f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.4f,
+ crBBox.top - fHeight * 0.5f + fWidth * 0.04f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.left + fWidth * 0.4f, crBBox.top - fHeight * 0.5f),
+ PWLPT_BEZIERTO),
+
+ CPWL_PathData(
+ CPWL_Point(crBBox.left + fWidth * 0.5f, crBBox.top - fHeight * 0.65f),
+ PWLPT_MOVETO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.5f,
+ crBBox.bottom + fHeight * 0.1f),
+ PWLPT_LINETO)};
+
+ if (type == PWLPT_STREAM)
+ sPathData = GetAppStreamFromArray(PathArray, 24);
+ else
+ GetPathDataFromArray(path, PathArray, 24);
+}
+
+void CPWL_Utils::GetGraphics_Tag(CFX_ByteString& sPathData,
+ CFX_PathData& path,
+ const CPDF_Rect& crBBox,
+ const PWL_PATH_TYPE type) {
+ FX_FLOAT fWidth = crBBox.right - crBBox.left;
+ FX_FLOAT fHeight = crBBox.top - crBBox.bottom;
+
+ CPWL_PathData PathArray[] = {
+ CPWL_PathData(
+ CPWL_Point(crBBox.left + fWidth * 0.4f, crBBox.top - fHeight * 0.1f),
+ PWLPT_MOVETO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.left + fWidth * 0.1f, crBBox.top - fHeight * 0.5f),
+ PWLPT_LINETO),
+ CPWL_PathData(CPWL_Point(crBBox.left + fWidth * 0.3f,
+ crBBox.bottom + fHeight * 0.1f),
+ PWLPT_LINETO),
+ CPWL_PathData(CPWL_Point(crBBox.right - fWidth * 0.1f,
+ crBBox.bottom + fHeight * 0.1f),
+ PWLPT_LINETO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.right - fWidth * 0.1f, crBBox.top - fHeight * 0.1f),
+ PWLPT_LINETO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.left + fWidth * 0.4f, crBBox.top - fHeight * 0.1f),
+ PWLPT_LINETO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.left + fWidth * 0.4f, crBBox.top - fHeight * 0.3f),
+ PWLPT_MOVETO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.right - fWidth * 0.2f, crBBox.top - fHeight * 0.3f),
+ PWLPT_LINETO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.left + fWidth * 0.4f, crBBox.top - fHeight * 0.5f),
+ PWLPT_MOVETO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.right - fWidth * 0.2f, crBBox.top - fHeight * 0.5f),
+ PWLPT_LINETO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.left + fWidth * 0.4f, crBBox.top - fHeight * 0.7f),
+ PWLPT_MOVETO),
+ CPWL_PathData(
+ CPWL_Point(crBBox.right - fWidth * 0.2f, crBBox.top - fHeight * 0.7f),
+ PWLPT_LINETO)};
+
+ if (type == PWLPT_STREAM)
+ sPathData = GetAppStreamFromArray(PathArray, 12);
+ else
+ GetPathDataFromArray(path, PathArray, 12);
+}
+
+void CPWL_Utils::GetGraphics_Foxit(CFX_ByteString& sPathData,
+ CFX_PathData& path,
+ const CPDF_Rect& crBBox,
+ const PWL_PATH_TYPE type) {
+ FX_FLOAT fOutWidth = crBBox.right - crBBox.left;
+ FX_FLOAT fOutHeight = crBBox.top - crBBox.bottom;
+
+ CPDF_Rect crInBox = crBBox;
+ crInBox.left = crBBox.left + fOutWidth * 0.08f;
+ crInBox.right = crBBox.right - fOutWidth * 0.08f;
+ crInBox.top = crBBox.top - fOutHeight * 0.08f;
+ crInBox.bottom = crBBox.bottom + fOutHeight * 0.08f;
+
+ FX_FLOAT fWidth = crInBox.right - crInBox.left;
+ FX_FLOAT fHeight = crInBox.top - crInBox.bottom;
+
+ CPWL_PathData PathArray[] = {
+ CPWL_PathData(CPWL_Point(crInBox.left, crInBox.top), PWLPT_MOVETO),
+ CPWL_PathData(CPWL_Point(crInBox.left + fWidth * 0.45f, crInBox.top),
+ PWLPT_LINETO),
+ CPWL_PathData(CPWL_Point(crInBox.left + fWidth * 0.45f,
+ crInBox.top - PWL_BEZIER * fHeight * 0.4f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crInBox.left + fWidth * 0.45f -
+ PWL_BEZIER * fWidth * 0.45f,
+ crInBox.top - fHeight * 0.4f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crInBox.left, crInBox.top - fHeight * 0.4f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crInBox.left, crInBox.top), PWLPT_LINETO),
+
+ CPWL_PathData(CPWL_Point(crInBox.left + fWidth * 0.60f, crInBox.top),
+ PWLPT_MOVETO),
+ CPWL_PathData(CPWL_Point(crInBox.left + fWidth * 0.75f, crInBox.top),
+ PWLPT_LINETO),
+ CPWL_PathData(CPWL_Point(crInBox.left + fWidth * 0.75f,
+ crInBox.top - PWL_BEZIER * fHeight * 0.7f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crInBox.left + fWidth * 0.75f -
+ PWL_BEZIER * fWidth * 0.75f,
+ crInBox.top - fHeight * 0.7f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crInBox.left, crInBox.top - fHeight * 0.7f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crInBox.left, crInBox.top - fHeight * 0.55f),
+ PWLPT_LINETO),
+ CPWL_PathData(CPWL_Point(crInBox.left + PWL_BEZIER * fWidth * 0.60f,
+ crInBox.top - fHeight * 0.55f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crInBox.left + fWidth * 0.60f,
+ crInBox.top - PWL_BEZIER * fHeight * 0.55f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crInBox.left + fWidth * 0.60f, crInBox.top),
+ PWLPT_BEZIERTO),
+
+ CPWL_PathData(CPWL_Point(crInBox.left + fWidth * 0.90f, crInBox.top),
+ PWLPT_MOVETO),
+ CPWL_PathData(CPWL_Point(crInBox.left + fWidth * 0.90f,
+ crInBox.top - PWL_BEZIER * fHeight * 0.85f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crInBox.left + fWidth * 0.90f -
+ PWL_BEZIER * fWidth * 0.90f,
+ crInBox.top - fHeight * 0.85f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crInBox.left, crInBox.top - fHeight * 0.85f),
+ PWLPT_BEZIERTO),
+ CPWL_PathData(CPWL_Point(crInBox.left, crInBox.bottom), PWLPT_LINETO),
+ CPWL_PathData(CPWL_Point(crInBox.right, crInBox.bottom), PWLPT_LINETO),
+ CPWL_PathData(CPWL_Point(crInBox.right, crInBox.top), PWLPT_LINETO),
+ CPWL_PathData(CPWL_Point(crInBox.left + fWidth * 0.90f, crInBox.top),
+ PWLPT_LINETO),
+ };
+
+ if (type == PWLPT_STREAM)
+ sPathData = GetAppStreamFromArray(PathArray, 23);
+ else
+ GetPathDataFromArray(path, PathArray, 23);
+}
+
+void CPWL_Color::ConvertColorType(int32_t other_nColorType) {
+ switch (other_nColorType) {
+ case COLORTYPE_TRANSPARENT:
+ break;
+ case COLORTYPE_GRAY:
+ switch (other_nColorType) {
+ case COLORTYPE_RGB:
+ CPWL_Utils::ConvertGRAY2RGB(fColor1, fColor1, fColor2, fColor3);
+ break;
+ case COLORTYPE_CMYK:
+ CPWL_Utils::ConvertGRAY2CMYK(fColor1, fColor1, fColor2, fColor3,
+ fColor4);
+ break;
+ }
+ break;
+ case COLORTYPE_RGB:
+ switch (other_nColorType) {
+ case COLORTYPE_GRAY:
+ CPWL_Utils::ConvertRGB2GRAY(fColor1, fColor2, fColor3, fColor1);
+ break;
+ case COLORTYPE_CMYK:
+ CPWL_Utils::ConvertRGB2CMYK(fColor1, fColor2, fColor3, fColor1,
+ fColor2, fColor3, fColor4);
+ break;
+ }
+ break;
+ case COLORTYPE_CMYK:
+ switch (other_nColorType) {
+ case COLORTYPE_GRAY:
+ CPWL_Utils::ConvertCMYK2GRAY(fColor1, fColor2, fColor3, fColor4,
+ fColor1);
+ break;
+ case COLORTYPE_RGB:
+ CPWL_Utils::ConvertCMYK2RGB(fColor1, fColor2, fColor3, fColor4,
+ fColor1, fColor2, fColor3);
+ break;
+ }
+ break;
+ }
+ nColorType = other_nColorType;
+}
diff --git a/fpdfsdk/src/pdfwindow/PWL_Wnd.cpp b/fpdfsdk/src/pdfwindow/PWL_Wnd.cpp
index 433b3c6846..81bbbbfe8e 100644
--- a/fpdfsdk/src/pdfwindow/PWL_Wnd.cpp
+++ b/fpdfsdk/src/pdfwindow/PWL_Wnd.cpp
@@ -13,545 +13,449 @@
/* -------------------------- CPWL_Timer -------------------------- */
-static std::map<int32_t, CPWL_Timer*>& GetPWLTimeMap()
-{
+static std::map<int32_t, CPWL_Timer*>& GetPWLTimeMap() {
// Leak the object at shutdown.
static auto timeMap = new std::map<int32_t, CPWL_Timer*>;
return *timeMap;
}
-CPWL_Timer::CPWL_Timer(CPWL_TimerHandler* pAttached, IFX_SystemHandler* pSystemHandler) :
- m_nTimerID(0),
- m_pAttached(pAttached),
- m_pSystemHandler(pSystemHandler)
-{
- ASSERT(m_pAttached != NULL);
- ASSERT(m_pSystemHandler != NULL);
+CPWL_Timer::CPWL_Timer(CPWL_TimerHandler* pAttached,
+ IFX_SystemHandler* pSystemHandler)
+ : m_nTimerID(0), m_pAttached(pAttached), m_pSystemHandler(pSystemHandler) {
+ ASSERT(m_pAttached != NULL);
+ ASSERT(m_pSystemHandler != NULL);
}
-CPWL_Timer::~CPWL_Timer()
-{
- KillPWLTimer();
+CPWL_Timer::~CPWL_Timer() {
+ KillPWLTimer();
}
-int32_t CPWL_Timer::SetPWLTimer(int32_t nElapse)
-{
- if (m_nTimerID != 0)
- KillPWLTimer();
- m_nTimerID = m_pSystemHandler->SetTimer(nElapse, TimerProc);
+int32_t CPWL_Timer::SetPWLTimer(int32_t nElapse) {
+ if (m_nTimerID != 0)
+ KillPWLTimer();
+ m_nTimerID = m_pSystemHandler->SetTimer(nElapse, TimerProc);
- GetPWLTimeMap()[m_nTimerID] = this;
- return m_nTimerID;
+ GetPWLTimeMap()[m_nTimerID] = this;
+ return m_nTimerID;
}
-void CPWL_Timer::KillPWLTimer()
-{
- if (m_nTimerID == 0)
- return;
+void CPWL_Timer::KillPWLTimer() {
+ if (m_nTimerID == 0)
+ return;
- m_pSystemHandler->KillTimer(m_nTimerID);
- GetPWLTimeMap().erase(m_nTimerID);
- m_nTimerID = 0;
+ m_pSystemHandler->KillTimer(m_nTimerID);
+ GetPWLTimeMap().erase(m_nTimerID);
+ m_nTimerID = 0;
}
-void CPWL_Timer::TimerProc(int32_t idEvent)
-{
- auto it = GetPWLTimeMap().find(idEvent);
- if (it == GetPWLTimeMap().end())
- return;
+void CPWL_Timer::TimerProc(int32_t idEvent) {
+ auto it = GetPWLTimeMap().find(idEvent);
+ if (it == GetPWLTimeMap().end())
+ return;
- CPWL_Timer* pTimer = it->second;
- if (pTimer->m_pAttached)
- pTimer->m_pAttached->TimerProc();
+ CPWL_Timer* pTimer = it->second;
+ if (pTimer->m_pAttached)
+ pTimer->m_pAttached->TimerProc();
}
/* -------------------------- CPWL_TimerHandler -------------------------- */
-CPWL_TimerHandler::CPWL_TimerHandler() : m_pTimer(NULL)
-{
-}
+CPWL_TimerHandler::CPWL_TimerHandler() : m_pTimer(NULL) {}
-CPWL_TimerHandler::~CPWL_TimerHandler()
-{
- delete m_pTimer;
+CPWL_TimerHandler::~CPWL_TimerHandler() {
+ delete m_pTimer;
}
-void CPWL_TimerHandler::BeginTimer(int32_t nElapse)
-{
- if (!m_pTimer)
- m_pTimer = new CPWL_Timer(this, GetSystemHandler());
+void CPWL_TimerHandler::BeginTimer(int32_t nElapse) {
+ if (!m_pTimer)
+ m_pTimer = new CPWL_Timer(this, GetSystemHandler());
- if (m_pTimer)
- m_pTimer->SetPWLTimer(nElapse);
+ if (m_pTimer)
+ m_pTimer->SetPWLTimer(nElapse);
}
-void CPWL_TimerHandler::EndTimer()
-{
- if (m_pTimer)
- m_pTimer->KillPWLTimer();
+void CPWL_TimerHandler::EndTimer() {
+ if (m_pTimer)
+ m_pTimer->KillPWLTimer();
}
-void CPWL_TimerHandler::TimerProc()
-{
-}
+void CPWL_TimerHandler::TimerProc() {}
/* --------------------------- CPWL_MsgControl ---------------------------- */
-class CPWL_MsgControl
-{
- friend class CPWL_Wnd;
-
-public:
- CPWL_MsgControl(CPWL_Wnd * pWnd)
- {
-// PWL_TRACE("new CPWL_MsgControl\n");
- m_pCreatedWnd = pWnd;
- Default();
- }
-
- ~CPWL_MsgControl()
- {
-// PWL_TRACE("~CPWL_MsgControl\n");
- Default();
- }
-
- void Default()
- {
- m_aMousePath.RemoveAll();
- m_aKeyboardPath.RemoveAll();
- m_pMainMouseWnd = NULL;
- m_pMainKeyboardWnd = NULL;
- }
-
- FX_BOOL IsWndCreated(const CPWL_Wnd * pWnd) const
- {
- return m_pCreatedWnd == pWnd;
- }
-
- FX_BOOL IsMainCaptureMouse(const CPWL_Wnd * pWnd) const
- {
- return pWnd == m_pMainMouseWnd;
- }
-
- FX_BOOL IsWndCaptureMouse(const CPWL_Wnd * pWnd) const
- {
- if (pWnd)
- for( int32_t i=0,sz=m_aMousePath.GetSize(); i<sz; i++)
- if (m_aMousePath.GetAt(i) == pWnd)
- return TRUE;
-
- return FALSE;
- }
+class CPWL_MsgControl {
+ friend class CPWL_Wnd;
+
+ public:
+ CPWL_MsgControl(CPWL_Wnd* pWnd) {
+ // PWL_TRACE("new CPWL_MsgControl\n");
+ m_pCreatedWnd = pWnd;
+ Default();
+ }
+
+ ~CPWL_MsgControl() {
+ // PWL_TRACE("~CPWL_MsgControl\n");
+ Default();
+ }
+
+ void Default() {
+ m_aMousePath.RemoveAll();
+ m_aKeyboardPath.RemoveAll();
+ m_pMainMouseWnd = NULL;
+ m_pMainKeyboardWnd = NULL;
+ }
+
+ FX_BOOL IsWndCreated(const CPWL_Wnd* pWnd) const {
+ return m_pCreatedWnd == pWnd;
+ }
+
+ FX_BOOL IsMainCaptureMouse(const CPWL_Wnd* pWnd) const {
+ return pWnd == m_pMainMouseWnd;
+ }
+
+ FX_BOOL IsWndCaptureMouse(const CPWL_Wnd* pWnd) const {
+ if (pWnd)
+ for (int32_t i = 0, sz = m_aMousePath.GetSize(); i < sz; i++)
+ if (m_aMousePath.GetAt(i) == pWnd)
+ return TRUE;
- FX_BOOL IsMainCaptureKeyboard(const CPWL_Wnd * pWnd) const
- {
- return pWnd == m_pMainKeyboardWnd;
- }
+ return FALSE;
+ }
+ FX_BOOL IsMainCaptureKeyboard(const CPWL_Wnd* pWnd) const {
+ return pWnd == m_pMainKeyboardWnd;
+ }
- FX_BOOL IsWndCaptureKeyboard(const CPWL_Wnd * pWnd) const
- {
- if (pWnd)
- for( int32_t i=0,sz=m_aKeyboardPath.GetSize(); i<sz; i++)
- if (m_aKeyboardPath.GetAt(i) == pWnd)
- return TRUE;
+ FX_BOOL IsWndCaptureKeyboard(const CPWL_Wnd* pWnd) const {
+ if (pWnd)
+ for (int32_t i = 0, sz = m_aKeyboardPath.GetSize(); i < sz; i++)
+ if (m_aKeyboardPath.GetAt(i) == pWnd)
+ return TRUE;
- return FALSE;
- }
+ return FALSE;
+ }
- void SetFocus(CPWL_Wnd * pWnd)
- {
- m_aKeyboardPath.RemoveAll();
+ void SetFocus(CPWL_Wnd* pWnd) {
+ m_aKeyboardPath.RemoveAll();
- if (pWnd)
- {
- m_pMainKeyboardWnd = pWnd;
+ if (pWnd) {
+ m_pMainKeyboardWnd = pWnd;
- CPWL_Wnd * pParent = pWnd;
- while (pParent)
- {
- m_aKeyboardPath.Add(pParent);
- pParent = pParent->GetParentWindow();
- }
+ CPWL_Wnd* pParent = pWnd;
+ while (pParent) {
+ m_aKeyboardPath.Add(pParent);
+ pParent = pParent->GetParentWindow();
+ }
- pWnd->OnSetFocus();
- }
+ pWnd->OnSetFocus();
}
+ }
- void KillFocus()
- {
- if (m_aKeyboardPath.GetSize() > 0)
- if (CPWL_Wnd* pWnd = m_aKeyboardPath.GetAt(0))
- pWnd->OnKillFocus();
-
- m_pMainKeyboardWnd = NULL;
- m_aKeyboardPath.RemoveAll();
- }
+ void KillFocus() {
+ if (m_aKeyboardPath.GetSize() > 0)
+ if (CPWL_Wnd* pWnd = m_aKeyboardPath.GetAt(0))
+ pWnd->OnKillFocus();
- void SetCapture(CPWL_Wnd * pWnd)
- {
- m_aMousePath.RemoveAll();
+ m_pMainKeyboardWnd = NULL;
+ m_aKeyboardPath.RemoveAll();
+ }
- if (pWnd)
- {
- m_pMainMouseWnd = pWnd;
+ void SetCapture(CPWL_Wnd* pWnd) {
+ m_aMousePath.RemoveAll();
- CPWL_Wnd * pParent = pWnd;
- while (pParent)
- {
- m_aMousePath.Add(pParent);
- pParent = pParent->GetParentWindow();
- }
- }
- }
+ if (pWnd) {
+ m_pMainMouseWnd = pWnd;
- void ReleaseCapture()
- {
- m_pMainMouseWnd = NULL;
- m_aMousePath.RemoveAll();
+ CPWL_Wnd* pParent = pWnd;
+ while (pParent) {
+ m_aMousePath.Add(pParent);
+ pParent = pParent->GetParentWindow();
+ }
}
-
-private:
- CFX_ArrayTemplate<CPWL_Wnd*> m_aMousePath;
- CFX_ArrayTemplate<CPWL_Wnd*> m_aKeyboardPath;
- CPWL_Wnd* m_pCreatedWnd;
- CPWL_Wnd* m_pMainMouseWnd;
- CPWL_Wnd* m_pMainKeyboardWnd;
+ }
+
+ void ReleaseCapture() {
+ m_pMainMouseWnd = NULL;
+ m_aMousePath.RemoveAll();
+ }
+
+ private:
+ CFX_ArrayTemplate<CPWL_Wnd*> m_aMousePath;
+ CFX_ArrayTemplate<CPWL_Wnd*> m_aKeyboardPath;
+ CPWL_Wnd* m_pCreatedWnd;
+ CPWL_Wnd* m_pMainMouseWnd;
+ CPWL_Wnd* m_pMainKeyboardWnd;
};
/* --------------------------- CPWL_Wnd ---------------------------- */
-CPWL_Wnd::CPWL_Wnd() :
- m_pVScrollBar(NULL),
- m_rcWindow(),
- m_rcClip(),
- m_bCreated(FALSE),
- m_bVisible(FALSE),
- m_bNotifying(FALSE),
- m_bEnabled(TRUE)
-{
-}
+CPWL_Wnd::CPWL_Wnd()
+ : m_pVScrollBar(NULL),
+ m_rcWindow(),
+ m_rcClip(),
+ m_bCreated(FALSE),
+ m_bVisible(FALSE),
+ m_bNotifying(FALSE),
+ m_bEnabled(TRUE) {}
-CPWL_Wnd::~CPWL_Wnd()
-{
- ASSERT(m_bCreated == FALSE);
+CPWL_Wnd::~CPWL_Wnd() {
+ ASSERT(m_bCreated == FALSE);
}
-CFX_ByteString CPWL_Wnd::GetClassName() const
-{
- return "CPWL_Wnd";
+CFX_ByteString CPWL_Wnd::GetClassName() const {
+ return "CPWL_Wnd";
}
-void CPWL_Wnd::Create(const PWL_CREATEPARAM & cp)
-{
- if (!IsValid())
- {
- m_sPrivateParam = cp;
+void CPWL_Wnd::Create(const PWL_CREATEPARAM& cp) {
+ if (!IsValid()) {
+ m_sPrivateParam = cp;
- OnCreate(m_sPrivateParam);
+ OnCreate(m_sPrivateParam);
- m_sPrivateParam.rcRectWnd.Normalize();
- m_rcWindow = m_sPrivateParam.rcRectWnd;
- m_rcClip = CPWL_Utils::InflateRect(m_rcWindow,1.0f);
+ m_sPrivateParam.rcRectWnd.Normalize();
+ m_rcWindow = m_sPrivateParam.rcRectWnd;
+ m_rcClip = CPWL_Utils::InflateRect(m_rcWindow, 1.0f);
- CreateMsgControl();
+ CreateMsgControl();
- if (m_sPrivateParam.pParentWnd)
- m_sPrivateParam.pParentWnd->OnNotify(this, PNM_ADDCHILD);
+ if (m_sPrivateParam.pParentWnd)
+ m_sPrivateParam.pParentWnd->OnNotify(this, PNM_ADDCHILD);
- PWL_CREATEPARAM ccp = m_sPrivateParam;
+ PWL_CREATEPARAM ccp = m_sPrivateParam;
- ccp.dwFlags &= 0xFFFF0000L; //remove sub styles
- ccp.mtChild = CPDF_Matrix(1,0,0,1,0,0);
+ ccp.dwFlags &= 0xFFFF0000L; // remove sub styles
+ ccp.mtChild = CPDF_Matrix(1, 0, 0, 1, 0, 0);
- CreateScrollBar(ccp);
- CreateChildWnd(ccp);
+ CreateScrollBar(ccp);
+ CreateChildWnd(ccp);
- m_bVisible = HasFlag(PWS_VISIBLE);
+ m_bVisible = HasFlag(PWS_VISIBLE);
- OnCreated();
+ OnCreated();
- RePosChildWnd();
- m_bCreated = TRUE;
- }
+ RePosChildWnd();
+ m_bCreated = TRUE;
+ }
}
-void CPWL_Wnd::OnCreate(PWL_CREATEPARAM & cp)
-{
-}
+void CPWL_Wnd::OnCreate(PWL_CREATEPARAM& cp) {}
-void CPWL_Wnd::OnCreated()
-{
-}
-
-void CPWL_Wnd::OnDestroy()
-{
-}
+void CPWL_Wnd::OnCreated() {}
-void CPWL_Wnd::Destroy()
-{
- KillFocus();
+void CPWL_Wnd::OnDestroy() {}
- OnDestroy();
+void CPWL_Wnd::Destroy() {
+ KillFocus();
- if (m_bCreated)
- {
- for (int32_t i = m_aChildren.GetSize()-1; i >= 0; i --)
- {
- if (CPWL_Wnd * pChild = m_aChildren[i])
- {
- pChild->Destroy();
- delete pChild;
- pChild = NULL;
- }
- }
+ OnDestroy();
- if (m_sPrivateParam.pParentWnd)
- m_sPrivateParam.pParentWnd->OnNotify(this, PNM_REMOVECHILD);
- m_bCreated = FALSE;
+ if (m_bCreated) {
+ for (int32_t i = m_aChildren.GetSize() - 1; i >= 0; i--) {
+ if (CPWL_Wnd* pChild = m_aChildren[i]) {
+ pChild->Destroy();
+ delete pChild;
+ pChild = NULL;
+ }
}
- DestroyMsgControl();
-
- FXSYS_memset(&m_sPrivateParam, 0, sizeof(PWL_CREATEPARAM));
- m_aChildren.RemoveAll();
- m_pVScrollBar = NULL;
-}
+ if (m_sPrivateParam.pParentWnd)
+ m_sPrivateParam.pParentWnd->OnNotify(this, PNM_REMOVECHILD);
+ m_bCreated = FALSE;
+ }
-void CPWL_Wnd::Move(const CPDF_Rect & rcNew, FX_BOOL bReset,FX_BOOL bRefresh)
-{
- if (IsValid())
- {
- CPDF_Rect rcOld = GetWindowRect();
+ DestroyMsgControl();
- m_rcWindow = rcNew;
- m_rcWindow.Normalize();
+ FXSYS_memset(&m_sPrivateParam, 0, sizeof(PWL_CREATEPARAM));
+ m_aChildren.RemoveAll();
+ m_pVScrollBar = NULL;
+}
- if (rcOld.left != rcNew.left || rcOld.right != rcNew.right ||
- rcOld.top != rcNew.top || rcOld.bottom != rcNew.bottom)
- {
- if (bReset)
- {
- RePosChildWnd();
- }
+void CPWL_Wnd::Move(const CPDF_Rect& rcNew, FX_BOOL bReset, FX_BOOL bRefresh) {
+ if (IsValid()) {
+ CPDF_Rect rcOld = GetWindowRect();
- }
- if (bRefresh)
- {
- InvalidateRectMove(rcOld,rcNew);
- }
+ m_rcWindow = rcNew;
+ m_rcWindow.Normalize();
- m_sPrivateParam.rcRectWnd = m_rcWindow;
+ if (rcOld.left != rcNew.left || rcOld.right != rcNew.right ||
+ rcOld.top != rcNew.top || rcOld.bottom != rcNew.bottom) {
+ if (bReset) {
+ RePosChildWnd();
+ }
+ }
+ if (bRefresh) {
+ InvalidateRectMove(rcOld, rcNew);
}
+
+ m_sPrivateParam.rcRectWnd = m_rcWindow;
+ }
}
-void CPWL_Wnd::InvalidateRectMove(const CPDF_Rect & rcOld, const CPDF_Rect & rcNew)
-{
- CPDF_Rect rcUnion = rcOld;
- rcUnion.Union(rcNew);
+void CPWL_Wnd::InvalidateRectMove(const CPDF_Rect& rcOld,
+ const CPDF_Rect& rcNew) {
+ CPDF_Rect rcUnion = rcOld;
+ rcUnion.Union(rcNew);
- InvalidateRect(&rcUnion);
+ InvalidateRect(&rcUnion);
}
-void CPWL_Wnd::GetAppearanceStream(CFX_ByteString & sAppStream)
-{
- if (IsValid())
- {
- CFX_ByteTextBuf sTextBuf;
- GetAppearanceStream(sTextBuf);
- sAppStream += sTextBuf.GetByteString();
- }
+void CPWL_Wnd::GetAppearanceStream(CFX_ByteString& sAppStream) {
+ if (IsValid()) {
+ CFX_ByteTextBuf sTextBuf;
+ GetAppearanceStream(sTextBuf);
+ sAppStream += sTextBuf.GetByteString();
+ }
}
-void CPWL_Wnd::GetAppearanceStream(CFX_ByteTextBuf & sAppStream)
-{
- if (IsValid() && IsVisible())
- {
- GetThisAppearanceStream(sAppStream);
- GetChildAppearanceStream(sAppStream);
- }
+void CPWL_Wnd::GetAppearanceStream(CFX_ByteTextBuf& sAppStream) {
+ if (IsValid() && IsVisible()) {
+ GetThisAppearanceStream(sAppStream);
+ GetChildAppearanceStream(sAppStream);
+ }
}
-//if don't set,Get default apperance stream
-void CPWL_Wnd::GetThisAppearanceStream(CFX_ByteTextBuf & sAppStream)
-{
- CPDF_Rect rectWnd = GetWindowRect();
- if (!rectWnd.IsEmpty()) {
- CFX_ByteTextBuf sThis;
-
- if (HasFlag(PWS_BACKGROUND))
- sThis << CPWL_Utils::GetRectFillAppStream(rectWnd, GetBackgroundColor());
-
- if (HasFlag(PWS_BORDER)) {
- sThis << CPWL_Utils::GetBorderAppStream(
- rectWnd,
- (FX_FLOAT)GetBorderWidth(),
- GetBorderColor(),
- GetBorderLeftTopColor(GetBorderStyle()),
- GetBorderRightBottomColor(GetBorderStyle()),
- GetBorderStyle(),
- GetBorderDash());
- }
+// if don't set,Get default apperance stream
+void CPWL_Wnd::GetThisAppearanceStream(CFX_ByteTextBuf& sAppStream) {
+ CPDF_Rect rectWnd = GetWindowRect();
+ if (!rectWnd.IsEmpty()) {
+ CFX_ByteTextBuf sThis;
- sAppStream << sThis;
- }
-}
+ if (HasFlag(PWS_BACKGROUND))
+ sThis << CPWL_Utils::GetRectFillAppStream(rectWnd, GetBackgroundColor());
-void CPWL_Wnd::GetChildAppearanceStream(CFX_ByteTextBuf & sAppStream)
-{
- for (int32_t i=0,sz=m_aChildren.GetSize(); i<sz; i++)
- {
- if (CPWL_Wnd * pChild = m_aChildren.GetAt(i))
- {
- pChild->GetAppearanceStream(sAppStream);
- }
+ if (HasFlag(PWS_BORDER)) {
+ sThis << CPWL_Utils::GetBorderAppStream(
+ rectWnd, (FX_FLOAT)GetBorderWidth(), GetBorderColor(),
+ GetBorderLeftTopColor(GetBorderStyle()),
+ GetBorderRightBottomColor(GetBorderStyle()), GetBorderStyle(),
+ GetBorderDash());
}
-}
-void CPWL_Wnd::DrawAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device)
-{
- if (IsValid() && IsVisible())
- {
- DrawThisAppearance(pDevice,pUser2Device);
- DrawChildAppearance(pDevice,pUser2Device);
- }
+ sAppStream << sThis;
+ }
}
-void CPWL_Wnd::DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device)
-{
- CPDF_Rect rectWnd = GetWindowRect();
- if (!rectWnd.IsEmpty())
- {
- if (HasFlag(PWS_BACKGROUND))
- {
- CPDF_Rect rcClient = CPWL_Utils::DeflateRect(rectWnd,(FX_FLOAT)(GetBorderWidth()+GetInnerBorderWidth()));
- CPWL_Utils::DrawFillRect(pDevice,pUser2Device,rcClient, GetBackgroundColor(), GetTransparency());
- }
-
- if (HasFlag(PWS_BORDER))
- CPWL_Utils::DrawBorder(pDevice,
- pUser2Device,
- rectWnd,
- (FX_FLOAT)GetBorderWidth(),
- GetBorderColor(),
- GetBorderLeftTopColor(GetBorderStyle()),
- GetBorderRightBottomColor(GetBorderStyle()),
- GetBorderStyle(),
- GetBorderDash(),
- GetTransparency());
+void CPWL_Wnd::GetChildAppearanceStream(CFX_ByteTextBuf& sAppStream) {
+ for (int32_t i = 0, sz = m_aChildren.GetSize(); i < sz; i++) {
+ if (CPWL_Wnd* pChild = m_aChildren.GetAt(i)) {
+ pChild->GetAppearanceStream(sAppStream);
+ }
+ }
+}
+
+void CPWL_Wnd::DrawAppearance(CFX_RenderDevice* pDevice,
+ CPDF_Matrix* pUser2Device) {
+ if (IsValid() && IsVisible()) {
+ DrawThisAppearance(pDevice, pUser2Device);
+ DrawChildAppearance(pDevice, pUser2Device);
+ }
+}
+
+void CPWL_Wnd::DrawThisAppearance(CFX_RenderDevice* pDevice,
+ CPDF_Matrix* pUser2Device) {
+ CPDF_Rect rectWnd = GetWindowRect();
+ if (!rectWnd.IsEmpty()) {
+ if (HasFlag(PWS_BACKGROUND)) {
+ CPDF_Rect rcClient = CPWL_Utils::DeflateRect(
+ rectWnd, (FX_FLOAT)(GetBorderWidth() + GetInnerBorderWidth()));
+ CPWL_Utils::DrawFillRect(pDevice, pUser2Device, rcClient,
+ GetBackgroundColor(), GetTransparency());
}
-}
-void CPWL_Wnd::DrawChildAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device)
-{
- for (int32_t i=0,sz=m_aChildren.GetSize(); i<sz; i++)
- {
- if (CPWL_Wnd * pChild = m_aChildren.GetAt(i))
- {
- CPDF_Matrix mt = pChild->GetChildMatrix();
- if (mt.IsIdentity())
- {
- pChild->DrawAppearance(pDevice,pUser2Device);
- }
- else
- {
- mt.Concat(*pUser2Device);
- pChild->DrawAppearance(pDevice,&mt);
- }
- }
+ if (HasFlag(PWS_BORDER))
+ CPWL_Utils::DrawBorder(
+ pDevice, pUser2Device, rectWnd, (FX_FLOAT)GetBorderWidth(),
+ GetBorderColor(), GetBorderLeftTopColor(GetBorderStyle()),
+ GetBorderRightBottomColor(GetBorderStyle()), GetBorderStyle(),
+ GetBorderDash(), GetTransparency());
+ }
+}
+
+void CPWL_Wnd::DrawChildAppearance(CFX_RenderDevice* pDevice,
+ CPDF_Matrix* pUser2Device) {
+ for (int32_t i = 0, sz = m_aChildren.GetSize(); i < sz; i++) {
+ if (CPWL_Wnd* pChild = m_aChildren.GetAt(i)) {
+ CPDF_Matrix mt = pChild->GetChildMatrix();
+ if (mt.IsIdentity()) {
+ pChild->DrawAppearance(pDevice, pUser2Device);
+ } else {
+ mt.Concat(*pUser2Device);
+ pChild->DrawAppearance(pDevice, &mt);
+ }
}
+ }
}
-void CPWL_Wnd::InvalidateRect(CPDF_Rect* pRect)
-{
- if (IsValid())
- {
- CPDF_Rect rcRefresh = pRect ? *pRect : GetWindowRect();
+void CPWL_Wnd::InvalidateRect(CPDF_Rect* pRect) {
+ if (IsValid()) {
+ CPDF_Rect rcRefresh = pRect ? *pRect : GetWindowRect();
- if (!HasFlag(PWS_NOREFRESHCLIP))
- {
- CPDF_Rect rcClip = GetClipRect();
- if (!rcClip.IsEmpty())
- {
- rcRefresh.Intersect(rcClip);
- }
- }
-
- FX_RECT rcWin = PWLtoWnd(rcRefresh);
- rcWin.left -= PWL_INVALIDATE_INFLATE;
- rcWin.top -= PWL_INVALIDATE_INFLATE;
- rcWin.right += PWL_INVALIDATE_INFLATE;
- rcWin.bottom += PWL_INVALIDATE_INFLATE;
-
- if (IFX_SystemHandler* pSH = GetSystemHandler())
- {
- if (FX_HWND hWnd = GetAttachedHWnd())
- {
- pSH->InvalidateRect(hWnd, rcWin);
- }
- }
+ if (!HasFlag(PWS_NOREFRESHCLIP)) {
+ CPDF_Rect rcClip = GetClipRect();
+ if (!rcClip.IsEmpty()) {
+ rcRefresh.Intersect(rcClip);
+ }
}
-}
-#define PWL_IMPLEMENT_KEY_METHOD(key_method_name)\
-FX_BOOL CPWL_Wnd::key_method_name(FX_WORD nChar, FX_DWORD nFlag)\
-{\
- if (IsValid() && IsVisible() && IsEnabled())\
- {\
- if (IsWndCaptureKeyboard(this))\
- {\
- for (int32_t i=0,sz=m_aChildren.GetSize(); i<sz; i++)\
- {\
- if (CPWL_Wnd * pChild = m_aChildren.GetAt(i))\
- {\
- if (IsWndCaptureKeyboard(pChild))\
- {\
- return pChild->key_method_name(nChar,nFlag);\
- }\
- }\
- }\
- }\
- }\
- return FALSE;\
-}
-
-#define PWL_IMPLEMENT_MOUSE_METHOD(mouse_method_name)\
-FX_BOOL CPWL_Wnd::mouse_method_name(const CPDF_Point & point, FX_DWORD nFlag)\
-{\
- if (IsValid() && IsVisible() && IsEnabled())\
- {\
- if (IsWndCaptureMouse(this))\
- {\
- for (int32_t i=0,sz=m_aChildren.GetSize(); i<sz; i++)\
- {\
- if (CPWL_Wnd * pChild = m_aChildren.GetAt(i))\
- {\
- if (IsWndCaptureMouse(pChild))\
- {\
- return pChild->mouse_method_name(pChild->ParentToChild(point),nFlag);\
- }\
- }\
- }\
- SetCursor();\
- }\
- else\
- {\
- for (int32_t i=0,sz=m_aChildren.GetSize(); i<sz; i++)\
- {\
- if (CPWL_Wnd * pChild = m_aChildren.GetAt(i))\
- {\
- if (pChild->WndHitTest(pChild->ParentToChild(point)))\
- {\
- return pChild->mouse_method_name(pChild->ParentToChild(point),nFlag);\
- }\
- }\
- }\
- if (WndHitTest(point))\
- SetCursor();\
- }\
- }\
- return FALSE;\
-}
+ FX_RECT rcWin = PWLtoWnd(rcRefresh);
+ rcWin.left -= PWL_INVALIDATE_INFLATE;
+ rcWin.top -= PWL_INVALIDATE_INFLATE;
+ rcWin.right += PWL_INVALIDATE_INFLATE;
+ rcWin.bottom += PWL_INVALIDATE_INFLATE;
+
+ if (IFX_SystemHandler* pSH = GetSystemHandler()) {
+ if (FX_HWND hWnd = GetAttachedHWnd()) {
+ pSH->InvalidateRect(hWnd, rcWin);
+ }
+ }
+ }
+}
+
+#define PWL_IMPLEMENT_KEY_METHOD(key_method_name) \
+ FX_BOOL CPWL_Wnd::key_method_name(FX_WORD nChar, FX_DWORD nFlag) { \
+ if (IsValid() && IsVisible() && IsEnabled()) { \
+ if (IsWndCaptureKeyboard(this)) { \
+ for (int32_t i = 0, sz = m_aChildren.GetSize(); i < sz; i++) { \
+ if (CPWL_Wnd* pChild = m_aChildren.GetAt(i)) { \
+ if (IsWndCaptureKeyboard(pChild)) { \
+ return pChild->key_method_name(nChar, nFlag); \
+ } \
+ } \
+ } \
+ } \
+ } \
+ return FALSE; \
+ }
+
+#define PWL_IMPLEMENT_MOUSE_METHOD(mouse_method_name) \
+ FX_BOOL CPWL_Wnd::mouse_method_name(const CPDF_Point& point, \
+ FX_DWORD nFlag) { \
+ if (IsValid() && IsVisible() && IsEnabled()) { \
+ if (IsWndCaptureMouse(this)) { \
+ for (int32_t i = 0, sz = m_aChildren.GetSize(); i < sz; i++) { \
+ if (CPWL_Wnd* pChild = m_aChildren.GetAt(i)) { \
+ if (IsWndCaptureMouse(pChild)) { \
+ return pChild->mouse_method_name(pChild->ParentToChild(point), \
+ nFlag); \
+ } \
+ } \
+ } \
+ SetCursor(); \
+ } else { \
+ for (int32_t i = 0, sz = m_aChildren.GetSize(); i < sz; i++) { \
+ if (CPWL_Wnd* pChild = m_aChildren.GetAt(i)) { \
+ if (pChild->WndHitTest(pChild->ParentToChild(point))) { \
+ return pChild->mouse_method_name(pChild->ParentToChild(point), \
+ nFlag); \
+ } \
+ } \
+ } \
+ if (WndHitTest(point)) \
+ SetCursor(); \
+ } \
+ } \
+ return FALSE; \
+ }
PWL_IMPLEMENT_KEY_METHOD(OnKeyDown)
PWL_IMPLEMENT_KEY_METHOD(OnKeyUp)
@@ -567,726 +471,610 @@ PWL_IMPLEMENT_MOUSE_METHOD(OnRButtonDown)
PWL_IMPLEMENT_MOUSE_METHOD(OnRButtonUp)
PWL_IMPLEMENT_MOUSE_METHOD(OnMouseMove)
-FX_BOOL CPWL_Wnd::OnMouseWheel(short zDelta, const CPDF_Point & point, FX_DWORD nFlag)
-{
- if (IsValid() && IsVisible() && IsEnabled())
- {
- SetCursor();
- if (IsWndCaptureKeyboard(this))
- {
- for (int32_t i=0,sz=m_aChildren.GetSize(); i<sz; i++)
- {
- if (CPWL_Wnd * pChild = m_aChildren.GetAt(i))
- {
- if (IsWndCaptureKeyboard(pChild))
- {
- return pChild->OnMouseWheel(zDelta,pChild->ParentToChild(point), nFlag);
- }
- }
- }
+FX_BOOL CPWL_Wnd::OnMouseWheel(short zDelta,
+ const CPDF_Point& point,
+ FX_DWORD nFlag) {
+ if (IsValid() && IsVisible() && IsEnabled()) {
+ SetCursor();
+ if (IsWndCaptureKeyboard(this)) {
+ for (int32_t i = 0, sz = m_aChildren.GetSize(); i < sz; i++) {
+ if (CPWL_Wnd* pChild = m_aChildren.GetAt(i)) {
+ if (IsWndCaptureKeyboard(pChild)) {
+ return pChild->OnMouseWheel(zDelta, pChild->ParentToChild(point),
+ nFlag);
+ }
}
+ }
}
- return FALSE;
+ }
+ return FALSE;
}
-void CPWL_Wnd::AddChild(CPWL_Wnd * pWnd)
-{
- m_aChildren.Add(pWnd);
+void CPWL_Wnd::AddChild(CPWL_Wnd* pWnd) {
+ m_aChildren.Add(pWnd);
}
-void CPWL_Wnd::RemoveChild(CPWL_Wnd * pWnd)
-{
- for (int32_t i = m_aChildren.GetSize()-1; i >= 0; i --)
- {
- if (CPWL_Wnd* pChild = m_aChildren.GetAt(i))
- {
- if (pChild == pWnd)
- {
- m_aChildren.RemoveAt(i);
- break;
- }
- }
+void CPWL_Wnd::RemoveChild(CPWL_Wnd* pWnd) {
+ for (int32_t i = m_aChildren.GetSize() - 1; i >= 0; i--) {
+ if (CPWL_Wnd* pChild = m_aChildren.GetAt(i)) {
+ if (pChild == pWnd) {
+ m_aChildren.RemoveAt(i);
+ break;
+ }
}
+ }
}
-void CPWL_Wnd::OnNotify(CPWL_Wnd* pWnd, FX_DWORD msg, intptr_t wParam, intptr_t lParam)
-{
- switch (msg)
- {
+void CPWL_Wnd::OnNotify(CPWL_Wnd* pWnd,
+ FX_DWORD msg,
+ intptr_t wParam,
+ intptr_t lParam) {
+ switch (msg) {
case PNM_ADDCHILD:
- AddChild(pWnd);
- break;
+ AddChild(pWnd);
+ break;
case PNM_REMOVECHILD:
- RemoveChild(pWnd);
- break;
+ RemoveChild(pWnd);
+ break;
default:
- break;
- }
+ break;
+ }
}
-FX_BOOL CPWL_Wnd::IsValid() const
-{
- return m_bCreated;
+FX_BOOL CPWL_Wnd::IsValid() const {
+ return m_bCreated;
}
-PWL_CREATEPARAM CPWL_Wnd::GetCreationParam() const
-{
- return m_sPrivateParam;
+PWL_CREATEPARAM CPWL_Wnd::GetCreationParam() const {
+ return m_sPrivateParam;
}
-CPWL_Wnd* CPWL_Wnd::GetParentWindow() const
-{
- return m_sPrivateParam.pParentWnd;
+CPWL_Wnd* CPWL_Wnd::GetParentWindow() const {
+ return m_sPrivateParam.pParentWnd;
}
-CPDF_Rect CPWL_Wnd::GetOriginWindowRect() const
-{
- return m_sPrivateParam.rcRectWnd;
+CPDF_Rect CPWL_Wnd::GetOriginWindowRect() const {
+ return m_sPrivateParam.rcRectWnd;
}
-CPDF_Rect CPWL_Wnd::GetWindowRect() const
-{
- return m_rcWindow;
+CPDF_Rect CPWL_Wnd::GetWindowRect() const {
+ return m_rcWindow;
}
-CPDF_Rect CPWL_Wnd::GetClientRect() const
-{
- CPDF_Rect rcWindow = GetWindowRect();
- CPDF_Rect rcClient = CPWL_Utils::DeflateRect(rcWindow,(FX_FLOAT)(GetBorderWidth()+GetInnerBorderWidth()));
- if (CPWL_ScrollBar* pVSB = GetVScrollBar())
- rcClient.right -= pVSB->GetScrollBarWidth();
+CPDF_Rect CPWL_Wnd::GetClientRect() const {
+ CPDF_Rect rcWindow = GetWindowRect();
+ CPDF_Rect rcClient = CPWL_Utils::DeflateRect(
+ rcWindow, (FX_FLOAT)(GetBorderWidth() + GetInnerBorderWidth()));
+ if (CPWL_ScrollBar* pVSB = GetVScrollBar())
+ rcClient.right -= pVSB->GetScrollBarWidth();
- rcClient.Normalize();
- return rcWindow.Contains(rcClient) ? rcClient : CPDF_Rect();
+ rcClient.Normalize();
+ return rcWindow.Contains(rcClient) ? rcClient : CPDF_Rect();
}
-CPDF_Point CPWL_Wnd::GetCenterPoint() const
-{
- CPDF_Rect rcClient = GetClientRect();
- return CPDF_Point((rcClient.left + rcClient.right) * 0.5f,
- (rcClient.top + rcClient.bottom) * 0.5f);
+CPDF_Point CPWL_Wnd::GetCenterPoint() const {
+ CPDF_Rect rcClient = GetClientRect();
+ return CPDF_Point((rcClient.left + rcClient.right) * 0.5f,
+ (rcClient.top + rcClient.bottom) * 0.5f);
}
-CPDF_Rect CPWL_Wnd::GetClientCenterSquare() const
-{
- return CPWL_Utils::GetCenterSquare(GetClientRect());
+CPDF_Rect CPWL_Wnd::GetClientCenterSquare() const {
+ return CPWL_Utils::GetCenterSquare(GetClientRect());
}
-CPDF_Rect CPWL_Wnd::GetWindowCenterSquare() const
-{
- return CPWL_Utils::GetCenterSquare(CPWL_Utils::DeflateRect(GetWindowRect(),0.1f));
+CPDF_Rect CPWL_Wnd::GetWindowCenterSquare() const {
+ return CPWL_Utils::GetCenterSquare(
+ CPWL_Utils::DeflateRect(GetWindowRect(), 0.1f));
}
-FX_BOOL CPWL_Wnd::HasFlag(FX_DWORD dwFlags) const
-{
- return (m_sPrivateParam.dwFlags & dwFlags) != 0;
+FX_BOOL CPWL_Wnd::HasFlag(FX_DWORD dwFlags) const {
+ return (m_sPrivateParam.dwFlags & dwFlags) != 0;
}
-void CPWL_Wnd::RemoveFlag(FX_DWORD dwFlags)
-{
- m_sPrivateParam.dwFlags &= ~dwFlags;
+void CPWL_Wnd::RemoveFlag(FX_DWORD dwFlags) {
+ m_sPrivateParam.dwFlags &= ~dwFlags;
}
-void CPWL_Wnd::AddFlag(FX_DWORD dwFlags)
-{
- m_sPrivateParam.dwFlags |= dwFlags;
+void CPWL_Wnd::AddFlag(FX_DWORD dwFlags) {
+ m_sPrivateParam.dwFlags |= dwFlags;
}
-CPWL_Color CPWL_Wnd::GetBackgroundColor() const
-{
- return m_sPrivateParam.sBackgroundColor;
+CPWL_Color CPWL_Wnd::GetBackgroundColor() const {
+ return m_sPrivateParam.sBackgroundColor;
}
-void CPWL_Wnd::SetBackgroundColor(const CPWL_Color & color)
-{
- m_sPrivateParam.sBackgroundColor = color;
+void CPWL_Wnd::SetBackgroundColor(const CPWL_Color& color) {
+ m_sPrivateParam.sBackgroundColor = color;
}
-void CPWL_Wnd::SetTextColor(const CPWL_Color & color)
-{
- m_sPrivateParam.sTextColor = color;
+void CPWL_Wnd::SetTextColor(const CPWL_Color& color) {
+ m_sPrivateParam.sTextColor = color;
}
-void CPWL_Wnd::SetTextStrokeColor(const CPWL_Color & color)
-{
- m_sPrivateParam.sTextStrokeColor = color;
+void CPWL_Wnd::SetTextStrokeColor(const CPWL_Color& color) {
+ m_sPrivateParam.sTextStrokeColor = color;
}
-CPWL_Color CPWL_Wnd::GetTextColor() const
-{
- return m_sPrivateParam.sTextColor;
+CPWL_Color CPWL_Wnd::GetTextColor() const {
+ return m_sPrivateParam.sTextColor;
}
-CPWL_Color CPWL_Wnd::GetTextStrokeColor() const
-{
- return m_sPrivateParam.sTextStrokeColor;
+CPWL_Color CPWL_Wnd::GetTextStrokeColor() const {
+ return m_sPrivateParam.sTextStrokeColor;
}
-int32_t CPWL_Wnd::GetBorderStyle() const
-{
- return m_sPrivateParam.nBorderStyle;
+int32_t CPWL_Wnd::GetBorderStyle() const {
+ return m_sPrivateParam.nBorderStyle;
}
-void CPWL_Wnd::SetBorderStyle(int32_t nBorderStyle)
-{
- if (HasFlag(PWS_BORDER))
- m_sPrivateParam.nBorderStyle = nBorderStyle;
+void CPWL_Wnd::SetBorderStyle(int32_t nBorderStyle) {
+ if (HasFlag(PWS_BORDER))
+ m_sPrivateParam.nBorderStyle = nBorderStyle;
}
-int32_t CPWL_Wnd::GetBorderWidth() const
-{
- if (HasFlag(PWS_BORDER))
- return m_sPrivateParam.dwBorderWidth;
+int32_t CPWL_Wnd::GetBorderWidth() const {
+ if (HasFlag(PWS_BORDER))
+ return m_sPrivateParam.dwBorderWidth;
- return 0;
+ return 0;
}
-int32_t CPWL_Wnd::GetInnerBorderWidth() const
-{
- /*
- switch (GetBorderStyle())
- {
- case PBS_BEVELED:
- case PBS_INSET:
- return GetBorderWidth() / 2;
- }
- */
- return 0;
+int32_t CPWL_Wnd::GetInnerBorderWidth() const {
+ /*
+ switch (GetBorderStyle())
+ {
+ case PBS_BEVELED:
+ case PBS_INSET:
+ return GetBorderWidth() / 2;
+ }
+ */
+ return 0;
}
-void CPWL_Wnd::SetBorderWidth(int32_t nBorderWidth)
-{
- if (HasFlag(PWS_BORDER))
- m_sPrivateParam.dwBorderWidth = nBorderWidth;
+void CPWL_Wnd::SetBorderWidth(int32_t nBorderWidth) {
+ if (HasFlag(PWS_BORDER))
+ m_sPrivateParam.dwBorderWidth = nBorderWidth;
}
-CPWL_Color CPWL_Wnd::GetBorderColor() const
-{
- if (HasFlag(PWS_BORDER))
- return m_sPrivateParam.sBorderColor;
+CPWL_Color CPWL_Wnd::GetBorderColor() const {
+ if (HasFlag(PWS_BORDER))
+ return m_sPrivateParam.sBorderColor;
- return CPWL_Color();
+ return CPWL_Color();
}
-void CPWL_Wnd::SetBorderColor(const CPWL_Color & color)
-{
- if (HasFlag(PWS_BORDER))
- m_sPrivateParam.sBorderColor = color;
+void CPWL_Wnd::SetBorderColor(const CPWL_Color& color) {
+ if (HasFlag(PWS_BORDER))
+ m_sPrivateParam.sBorderColor = color;
}
-CPWL_Dash CPWL_Wnd::GetBorderDash() const
-{
- return m_sPrivateParam.sDash;
+CPWL_Dash CPWL_Wnd::GetBorderDash() const {
+ return m_sPrivateParam.sDash;
}
-void* CPWL_Wnd::GetAttachedData() const
-{
- return m_sPrivateParam.pAttachedData;
+void* CPWL_Wnd::GetAttachedData() const {
+ return m_sPrivateParam.pAttachedData;
}
-void CPWL_Wnd::SetBorderDash(const CPWL_Dash & sDash)
-{
- if (HasFlag(PWS_BORDER))
- m_sPrivateParam.sDash = sDash;
+void CPWL_Wnd::SetBorderDash(const CPWL_Dash& sDash) {
+ if (HasFlag(PWS_BORDER))
+ m_sPrivateParam.sDash = sDash;
}
-CPWL_ScrollBar* CPWL_Wnd::GetVScrollBar() const
-{
- if (HasFlag(PWS_VSCROLL))
- return m_pVScrollBar;
+CPWL_ScrollBar* CPWL_Wnd::GetVScrollBar() const {
+ if (HasFlag(PWS_VSCROLL))
+ return m_pVScrollBar;
- return NULL;
+ return NULL;
}
-void CPWL_Wnd::CreateScrollBar(const PWL_CREATEPARAM & cp)
-{
- CreateVScrollBar(cp);
+void CPWL_Wnd::CreateScrollBar(const PWL_CREATEPARAM& cp) {
+ CreateVScrollBar(cp);
}
-void CPWL_Wnd::CreateVScrollBar(const PWL_CREATEPARAM & cp)
-{
- if (!m_pVScrollBar && HasFlag(PWS_VSCROLL))
- {
- PWL_CREATEPARAM scp = cp;
+void CPWL_Wnd::CreateVScrollBar(const PWL_CREATEPARAM& cp) {
+ if (!m_pVScrollBar && HasFlag(PWS_VSCROLL)) {
+ PWL_CREATEPARAM scp = cp;
- //flags
- scp.dwFlags = PWS_CHILD| PWS_BACKGROUND | PWS_AUTOTRANSPARENT | PWS_NOREFRESHCLIP;
+ // flags
+ scp.dwFlags =
+ PWS_CHILD | PWS_BACKGROUND | PWS_AUTOTRANSPARENT | PWS_NOREFRESHCLIP;
- scp.pParentWnd = this;
- scp.sBackgroundColor = PWL_DEFAULT_WHITECOLOR;
- scp.eCursorType = FXCT_ARROW;
- scp.nTransparency = PWL_SCROLLBAR_TRANSPARANCY;
+ scp.pParentWnd = this;
+ scp.sBackgroundColor = PWL_DEFAULT_WHITECOLOR;
+ scp.eCursorType = FXCT_ARROW;
+ scp.nTransparency = PWL_SCROLLBAR_TRANSPARANCY;
- if ((m_pVScrollBar = new CPWL_ScrollBar(SBT_VSCROLL)))
- m_pVScrollBar->Create(scp);
- }
+ if ((m_pVScrollBar = new CPWL_ScrollBar(SBT_VSCROLL)))
+ m_pVScrollBar->Create(scp);
+ }
}
-void CPWL_Wnd::SetCapture()
-{
- if (CPWL_MsgControl * pMsgCtrl = GetMsgControl())
- pMsgCtrl->SetCapture(this);
+void CPWL_Wnd::SetCapture() {
+ if (CPWL_MsgControl* pMsgCtrl = GetMsgControl())
+ pMsgCtrl->SetCapture(this);
}
-void CPWL_Wnd::ReleaseCapture()
-{
- for (int32_t i=0,sz=m_aChildren.GetSize(); i<sz; i++)
- if (CPWL_Wnd* pChild = m_aChildren.GetAt(i))
- pChild->ReleaseCapture();
+void CPWL_Wnd::ReleaseCapture() {
+ for (int32_t i = 0, sz = m_aChildren.GetSize(); i < sz; i++)
+ if (CPWL_Wnd* pChild = m_aChildren.GetAt(i))
+ pChild->ReleaseCapture();
- if (CPWL_MsgControl * pMsgCtrl = GetMsgControl())
- pMsgCtrl->ReleaseCapture();
+ if (CPWL_MsgControl* pMsgCtrl = GetMsgControl())
+ pMsgCtrl->ReleaseCapture();
}
-void CPWL_Wnd::SetFocus()
-{
- if (CPWL_MsgControl * pMsgCtrl = GetMsgControl())
- {
- if (!pMsgCtrl->IsMainCaptureKeyboard(this))
- pMsgCtrl->KillFocus();
- pMsgCtrl->SetFocus(this);
- }
+void CPWL_Wnd::SetFocus() {
+ if (CPWL_MsgControl* pMsgCtrl = GetMsgControl()) {
+ if (!pMsgCtrl->IsMainCaptureKeyboard(this))
+ pMsgCtrl->KillFocus();
+ pMsgCtrl->SetFocus(this);
+ }
}
-void CPWL_Wnd::KillFocus()
-{
- if (CPWL_MsgControl * pMsgCtrl = GetMsgControl())
- {
- if (pMsgCtrl->IsWndCaptureKeyboard(this))
- pMsgCtrl->KillFocus();
- }
+void CPWL_Wnd::KillFocus() {
+ if (CPWL_MsgControl* pMsgCtrl = GetMsgControl()) {
+ if (pMsgCtrl->IsWndCaptureKeyboard(this))
+ pMsgCtrl->KillFocus();
+ }
}
-void CPWL_Wnd::OnSetFocus()
-{
-}
+void CPWL_Wnd::OnSetFocus() {}
-void CPWL_Wnd::OnKillFocus()
-{
-}
+void CPWL_Wnd::OnKillFocus() {}
-FX_BOOL CPWL_Wnd::WndHitTest(const CPDF_Point & point) const
-{
- return IsValid() && IsVisible() && GetWindowRect().Contains(point.x,point.y);
+FX_BOOL CPWL_Wnd::WndHitTest(const CPDF_Point& point) const {
+ return IsValid() && IsVisible() && GetWindowRect().Contains(point.x, point.y);
}
-FX_BOOL CPWL_Wnd::ClientHitTest(const CPDF_Point & point) const
-{
- return IsValid() && IsVisible() && GetClientRect().Contains(point.x,point.y);
+FX_BOOL CPWL_Wnd::ClientHitTest(const CPDF_Point& point) const {
+ return IsValid() && IsVisible() && GetClientRect().Contains(point.x, point.y);
}
-const CPWL_Wnd* CPWL_Wnd::GetRootWnd() const
-{
- if (m_sPrivateParam.pParentWnd)
- return m_sPrivateParam.pParentWnd->GetRootWnd();
+const CPWL_Wnd* CPWL_Wnd::GetRootWnd() const {
+ if (m_sPrivateParam.pParentWnd)
+ return m_sPrivateParam.pParentWnd->GetRootWnd();
- return this;
+ return this;
}
-void CPWL_Wnd::SetVisible(FX_BOOL bVisible)
-{
- if (IsValid())
- {
- for (int32_t i=0,sz=m_aChildren.GetSize(); i<sz; i++)
- {
- if (CPWL_Wnd* pChild = m_aChildren.GetAt(i))
- {
- pChild->SetVisible(bVisible);
- }
- }
+void CPWL_Wnd::SetVisible(FX_BOOL bVisible) {
+ if (IsValid()) {
+ for (int32_t i = 0, sz = m_aChildren.GetSize(); i < sz; i++) {
+ if (CPWL_Wnd* pChild = m_aChildren.GetAt(i)) {
+ pChild->SetVisible(bVisible);
+ }
+ }
- if (bVisible != m_bVisible)
- {
- m_bVisible = bVisible;
- RePosChildWnd();
- InvalidateRect();
- }
+ if (bVisible != m_bVisible) {
+ m_bVisible = bVisible;
+ RePosChildWnd();
+ InvalidateRect();
}
+ }
}
-void CPWL_Wnd::SetClipRect(const CPDF_Rect & rect)
-{
- m_rcClip = rect;
- m_rcClip.Normalize();
+void CPWL_Wnd::SetClipRect(const CPDF_Rect& rect) {
+ m_rcClip = rect;
+ m_rcClip.Normalize();
}
-CPDF_Rect CPWL_Wnd::GetClipRect() const
-{
- return m_rcClip;
+CPDF_Rect CPWL_Wnd::GetClipRect() const {
+ return m_rcClip;
}
-FX_BOOL CPWL_Wnd::IsReadOnly() const
-{
- return HasFlag(PWS_READONLY);
+FX_BOOL CPWL_Wnd::IsReadOnly() const {
+ return HasFlag(PWS_READONLY);
}
-void CPWL_Wnd::RePosChildWnd()
-{
- CPDF_Rect rcContent = CPWL_Utils::DeflateRect(GetWindowRect(),(FX_FLOAT)(GetBorderWidth()+GetInnerBorderWidth()));
+void CPWL_Wnd::RePosChildWnd() {
+ CPDF_Rect rcContent = CPWL_Utils::DeflateRect(
+ GetWindowRect(), (FX_FLOAT)(GetBorderWidth() + GetInnerBorderWidth()));
- CPWL_ScrollBar * pVSB = GetVScrollBar();
+ CPWL_ScrollBar* pVSB = GetVScrollBar();
- CPDF_Rect rcVScroll = CPDF_Rect(rcContent.right - PWL_SCROLLBAR_WIDTH,
- rcContent.bottom,
- rcContent.right-1.0f,
- rcContent.top);
+ CPDF_Rect rcVScroll =
+ CPDF_Rect(rcContent.right - PWL_SCROLLBAR_WIDTH, rcContent.bottom,
+ rcContent.right - 1.0f, rcContent.top);
- if (pVSB) pVSB->Move(rcVScroll,TRUE,FALSE);
+ if (pVSB)
+ pVSB->Move(rcVScroll, TRUE, FALSE);
}
-void CPWL_Wnd::CreateChildWnd(const PWL_CREATEPARAM & cp)
-{
-}
+void CPWL_Wnd::CreateChildWnd(const PWL_CREATEPARAM& cp) {}
-void CPWL_Wnd::SetCursor()
-{
- if (IsValid())
- {
- if (IFX_SystemHandler* pSH = GetSystemHandler())
- {
- int32_t nCursorType = GetCreationParam().eCursorType;
- pSH->SetCursor(nCursorType);
- }
+void CPWL_Wnd::SetCursor() {
+ if (IsValid()) {
+ if (IFX_SystemHandler* pSH = GetSystemHandler()) {
+ int32_t nCursorType = GetCreationParam().eCursorType;
+ pSH->SetCursor(nCursorType);
}
+ }
}
-void CPWL_Wnd::CreateMsgControl()
-{
- if (!m_sPrivateParam.pMsgControl)
- m_sPrivateParam.pMsgControl = new CPWL_MsgControl(this);
+void CPWL_Wnd::CreateMsgControl() {
+ if (!m_sPrivateParam.pMsgControl)
+ m_sPrivateParam.pMsgControl = new CPWL_MsgControl(this);
}
-void CPWL_Wnd::DestroyMsgControl()
-{
- if (CPWL_MsgControl* pMsgControl = GetMsgControl())
- if (pMsgControl->IsWndCreated(this))
- delete pMsgControl;
+void CPWL_Wnd::DestroyMsgControl() {
+ if (CPWL_MsgControl* pMsgControl = GetMsgControl())
+ if (pMsgControl->IsWndCreated(this))
+ delete pMsgControl;
}
-CPWL_MsgControl* CPWL_Wnd::GetMsgControl() const
-{
- return m_sPrivateParam.pMsgControl;
+CPWL_MsgControl* CPWL_Wnd::GetMsgControl() const {
+ return m_sPrivateParam.pMsgControl;
}
-FX_BOOL CPWL_Wnd::IsCaptureMouse() const
-{
- return IsWndCaptureMouse(this);
+FX_BOOL CPWL_Wnd::IsCaptureMouse() const {
+ return IsWndCaptureMouse(this);
}
-FX_BOOL CPWL_Wnd::IsWndCaptureMouse(const CPWL_Wnd * pWnd) const
-{
- if (CPWL_MsgControl * pCtrl = GetMsgControl())
- return pCtrl->IsWndCaptureMouse(pWnd);
+FX_BOOL CPWL_Wnd::IsWndCaptureMouse(const CPWL_Wnd* pWnd) const {
+ if (CPWL_MsgControl* pCtrl = GetMsgControl())
+ return pCtrl->IsWndCaptureMouse(pWnd);
- return FALSE;
+ return FALSE;
}
-FX_BOOL CPWL_Wnd::IsWndCaptureKeyboard(const CPWL_Wnd * pWnd) const
-{
- if (CPWL_MsgControl * pCtrl = GetMsgControl())
- return pCtrl->IsWndCaptureKeyboard(pWnd);
+FX_BOOL CPWL_Wnd::IsWndCaptureKeyboard(const CPWL_Wnd* pWnd) const {
+ if (CPWL_MsgControl* pCtrl = GetMsgControl())
+ return pCtrl->IsWndCaptureKeyboard(pWnd);
- return FALSE;
+ return FALSE;
}
-FX_BOOL CPWL_Wnd::IsFocused() const
-{
- if (CPWL_MsgControl * pCtrl = GetMsgControl())
- return pCtrl->IsMainCaptureKeyboard(this);
+FX_BOOL CPWL_Wnd::IsFocused() const {
+ if (CPWL_MsgControl* pCtrl = GetMsgControl())
+ return pCtrl->IsMainCaptureKeyboard(this);
- return FALSE;
+ return FALSE;
}
-CPDF_Rect CPWL_Wnd::GetFocusRect() const
-{
- return CPWL_Utils::InflateRect(GetWindowRect(),1);
+CPDF_Rect CPWL_Wnd::GetFocusRect() const {
+ return CPWL_Utils::InflateRect(GetWindowRect(), 1);
}
-FX_FLOAT CPWL_Wnd::GetFontSize() const
-{
- return m_sPrivateParam.fFontSize;
+FX_FLOAT CPWL_Wnd::GetFontSize() const {
+ return m_sPrivateParam.fFontSize;
}
-void CPWL_Wnd::SetFontSize(FX_FLOAT fFontSize)
-{
- m_sPrivateParam.fFontSize = fFontSize;
+void CPWL_Wnd::SetFontSize(FX_FLOAT fFontSize) {
+ m_sPrivateParam.fFontSize = fFontSize;
}
-IFX_SystemHandler* CPWL_Wnd::GetSystemHandler() const
-{
- return m_sPrivateParam.pSystemHandler;
+IFX_SystemHandler* CPWL_Wnd::GetSystemHandler() const {
+ return m_sPrivateParam.pSystemHandler;
}
-IPWL_FocusHandler* CPWL_Wnd::GetFocusHandler() const
-{
- return m_sPrivateParam.pFocusHandler;
+IPWL_FocusHandler* CPWL_Wnd::GetFocusHandler() const {
+ return m_sPrivateParam.pFocusHandler;
}
-IPWL_Provider* CPWL_Wnd::GetProvider() const
-{
- return m_sPrivateParam.pProvider;
+IPWL_Provider* CPWL_Wnd::GetProvider() const {
+ return m_sPrivateParam.pProvider;
}
-IFX_Edit_FontMap* CPWL_Wnd::GetFontMap() const
-{
- return m_sPrivateParam.pFontMap;
+IFX_Edit_FontMap* CPWL_Wnd::GetFontMap() const {
+ return m_sPrivateParam.pFontMap;
}
-CPWL_Color CPWL_Wnd::GetBorderLeftTopColor(int32_t nBorderStyle) const
-{
- CPWL_Color color;
+CPWL_Color CPWL_Wnd::GetBorderLeftTopColor(int32_t nBorderStyle) const {
+ CPWL_Color color;
- switch (nBorderStyle)
- {
- case PBS_SOLID:
- break;
- case PBS_DASH:
- break;
- case PBS_BEVELED:
- color = CPWL_Color(COLORTYPE_GRAY,1);
- break;
- case PBS_INSET:
- color = CPWL_Color(COLORTYPE_GRAY,0.5f);
- break;
- case PBS_UNDERLINED:
- break;
- }
+ switch (nBorderStyle) {
+ case PBS_SOLID:
+ break;
+ case PBS_DASH:
+ break;
+ case PBS_BEVELED:
+ color = CPWL_Color(COLORTYPE_GRAY, 1);
+ break;
+ case PBS_INSET:
+ color = CPWL_Color(COLORTYPE_GRAY, 0.5f);
+ break;
+ case PBS_UNDERLINED:
+ break;
+ }
- return color;
-}
-
-CPWL_Color CPWL_Wnd::GetBorderRightBottomColor(int32_t nBorderStyle) const
-{
- CPWL_Color color;
-
- switch (nBorderStyle)
- {
- case PBS_SOLID:
- break;
- case PBS_DASH:
- break;
- case PBS_BEVELED:
- color = CPWL_Utils::DevideColor(GetBackgroundColor(),2);
- break;
- case PBS_INSET:
- color = CPWL_Color(COLORTYPE_GRAY,0.75f);
- break;
- case PBS_UNDERLINED:
- break;
- }
+ return color;
+}
+
+CPWL_Color CPWL_Wnd::GetBorderRightBottomColor(int32_t nBorderStyle) const {
+ CPWL_Color color;
- return color;
+ switch (nBorderStyle) {
+ case PBS_SOLID:
+ break;
+ case PBS_DASH:
+ break;
+ case PBS_BEVELED:
+ color = CPWL_Utils::DevideColor(GetBackgroundColor(), 2);
+ break;
+ case PBS_INSET:
+ color = CPWL_Color(COLORTYPE_GRAY, 0.75f);
+ break;
+ case PBS_UNDERLINED:
+ break;
+ }
+
+ return color;
}
/* ----------------------------------------------------------------- */
-int32_t CPWL_Wnd::GetTransparency()
-{
- return m_sPrivateParam.nTransparency;
+int32_t CPWL_Wnd::GetTransparency() {
+ return m_sPrivateParam.nTransparency;
}
-void CPWL_Wnd::SetTransparency(int32_t nTransparency)
-{
- for (int32_t i=0,sz=m_aChildren.GetSize(); i<sz; i++)
- {
- if (CPWL_Wnd* pChild = m_aChildren.GetAt(i))
- {
- pChild->SetTransparency(nTransparency);
- }
+void CPWL_Wnd::SetTransparency(int32_t nTransparency) {
+ for (int32_t i = 0, sz = m_aChildren.GetSize(); i < sz; i++) {
+ if (CPWL_Wnd* pChild = m_aChildren.GetAt(i)) {
+ pChild->SetTransparency(nTransparency);
}
+ }
- m_sPrivateParam.nTransparency = nTransparency;
+ m_sPrivateParam.nTransparency = nTransparency;
}
-CPDF_Matrix CPWL_Wnd::GetWindowMatrix() const
-{
- CPDF_Matrix mt = GetChildToRoot();
-
- if (IPWL_Provider* pProvider = GetProvider())
- {
- mt.Concat(pProvider->GetWindowMatrix(GetAttachedData()));
- return mt;
- }
+CPDF_Matrix CPWL_Wnd::GetWindowMatrix() const {
+ CPDF_Matrix mt = GetChildToRoot();
+ if (IPWL_Provider* pProvider = GetProvider()) {
+ mt.Concat(pProvider->GetWindowMatrix(GetAttachedData()));
return mt;
+ }
+
+ return mt;
}
-void CPWL_Wnd::PWLtoWnd(const CPDF_Point& point, int32_t& x, int32_t& y) const
-{
- CPDF_Matrix mt = GetWindowMatrix();
- CPDF_Point pt = point;
- mt.Transform(pt.x,pt.y);
- x = (int32_t)(pt.x+0.5);
- y = (int32_t)(pt.y+0.5);
+void CPWL_Wnd::PWLtoWnd(const CPDF_Point& point, int32_t& x, int32_t& y) const {
+ CPDF_Matrix mt = GetWindowMatrix();
+ CPDF_Point pt = point;
+ mt.Transform(pt.x, pt.y);
+ x = (int32_t)(pt.x + 0.5);
+ y = (int32_t)(pt.y + 0.5);
}
-FX_RECT CPWL_Wnd::PWLtoWnd(const CPDF_Rect & rect) const
-{
- CPDF_Rect rcTemp = rect;
- CPDF_Matrix mt = GetWindowMatrix();
- mt.TransformRect(rcTemp);
- return FX_RECT((int32_t)(rcTemp.left+0.5), (int32_t)(rcTemp.bottom+0.5), (int32_t)(rcTemp.right+0.5), (int32_t)(rcTemp.top+0.5));
+FX_RECT CPWL_Wnd::PWLtoWnd(const CPDF_Rect& rect) const {
+ CPDF_Rect rcTemp = rect;
+ CPDF_Matrix mt = GetWindowMatrix();
+ mt.TransformRect(rcTemp);
+ return FX_RECT((int32_t)(rcTemp.left + 0.5), (int32_t)(rcTemp.bottom + 0.5),
+ (int32_t)(rcTemp.right + 0.5), (int32_t)(rcTemp.top + 0.5));
}
-FX_HWND CPWL_Wnd::GetAttachedHWnd() const
-{
- return m_sPrivateParam.hAttachedWnd;
+FX_HWND CPWL_Wnd::GetAttachedHWnd() const {
+ return m_sPrivateParam.hAttachedWnd;
}
-CPDF_Point CPWL_Wnd::ChildToParent(const CPDF_Point& point) const
-{
- CPDF_Matrix mt = GetChildMatrix();
- if (mt.IsIdentity())
- return point;
+CPDF_Point CPWL_Wnd::ChildToParent(const CPDF_Point& point) const {
+ CPDF_Matrix mt = GetChildMatrix();
+ if (mt.IsIdentity())
+ return point;
- CPDF_Point pt = point;
- mt.Transform(pt.x,pt.y);
- return pt;
+ CPDF_Point pt = point;
+ mt.Transform(pt.x, pt.y);
+ return pt;
}
-CPDF_Rect CPWL_Wnd::ChildToParent(const CPDF_Rect& rect) const
-{
- CPDF_Matrix mt = GetChildMatrix();
- if (mt.IsIdentity())
- return rect;
+CPDF_Rect CPWL_Wnd::ChildToParent(const CPDF_Rect& rect) const {
+ CPDF_Matrix mt = GetChildMatrix();
+ if (mt.IsIdentity())
+ return rect;
- CPDF_Rect rc = rect;
- mt.TransformRect(rc);
- return rc;
+ CPDF_Rect rc = rect;
+ mt.TransformRect(rc);
+ return rc;
}
-CPDF_Point CPWL_Wnd::ParentToChild(const CPDF_Point& point) const
-{
- CPDF_Matrix mt = GetChildMatrix();
- if (mt.IsIdentity())
- return point;
+CPDF_Point CPWL_Wnd::ParentToChild(const CPDF_Point& point) const {
+ CPDF_Matrix mt = GetChildMatrix();
+ if (mt.IsIdentity())
+ return point;
- mt.SetReverse(mt);
- CPDF_Point pt = point;
- mt.Transform(pt.x,pt.y);
- return pt;
+ mt.SetReverse(mt);
+ CPDF_Point pt = point;
+ mt.Transform(pt.x, pt.y);
+ return pt;
}
-CPDF_Rect CPWL_Wnd::ParentToChild(const CPDF_Rect& rect) const
-{
- CPDF_Matrix mt = GetChildMatrix();
- if (mt.IsIdentity())
- return rect;
+CPDF_Rect CPWL_Wnd::ParentToChild(const CPDF_Rect& rect) const {
+ CPDF_Matrix mt = GetChildMatrix();
+ if (mt.IsIdentity())
+ return rect;
- mt.SetReverse(mt);
- CPDF_Rect rc = rect;
- mt.TransformRect(rc);
- return rc;
+ mt.SetReverse(mt);
+ CPDF_Rect rc = rect;
+ mt.TransformRect(rc);
+ return rc;
}
-CPDF_Matrix CPWL_Wnd::GetChildToRoot() const
-{
- CPDF_Matrix mt(1, 0, 0, 1, 0, 0);
- if (HasFlag(PWS_CHILD))
- {
- const CPWL_Wnd* pParent = this;
- while (pParent)
- {
- mt.Concat(pParent->GetChildMatrix());
- pParent = pParent->GetParentWindow();
- }
+CPDF_Matrix CPWL_Wnd::GetChildToRoot() const {
+ CPDF_Matrix mt(1, 0, 0, 1, 0, 0);
+ if (HasFlag(PWS_CHILD)) {
+ const CPWL_Wnd* pParent = this;
+ while (pParent) {
+ mt.Concat(pParent->GetChildMatrix());
+ pParent = pParent->GetParentWindow();
}
- return mt;
+ }
+ return mt;
}
-CPDF_Matrix CPWL_Wnd::GetChildMatrix() const
-{
- if (HasFlag(PWS_CHILD))
- return m_sPrivateParam.mtChild;
+CPDF_Matrix CPWL_Wnd::GetChildMatrix() const {
+ if (HasFlag(PWS_CHILD))
+ return m_sPrivateParam.mtChild;
- return CPDF_Matrix(1,0,0,1,0,0);
+ return CPDF_Matrix(1, 0, 0, 1, 0, 0);
}
-void CPWL_Wnd::SetChildMatrix(const CPDF_Matrix& mt)
-{
- m_sPrivateParam.mtChild = mt;
+void CPWL_Wnd::SetChildMatrix(const CPDF_Matrix& mt) {
+ m_sPrivateParam.mtChild = mt;
}
-const CPWL_Wnd* CPWL_Wnd::GetFocused() const
-{
- if (CPWL_MsgControl * pMsgCtrl = GetMsgControl())
- {
- return pMsgCtrl->m_pMainKeyboardWnd;
- }
+const CPWL_Wnd* CPWL_Wnd::GetFocused() const {
+ if (CPWL_MsgControl* pMsgCtrl = GetMsgControl()) {
+ return pMsgCtrl->m_pMainKeyboardWnd;
+ }
- return NULL;
+ return NULL;
}
-void CPWL_Wnd::EnableWindow(FX_BOOL bEnable)
-{
- if (m_bEnabled != bEnable)
- {
- for (int32_t i=0,sz=m_aChildren.GetSize(); i<sz; i++)
- {
- if (CPWL_Wnd* pChild = m_aChildren.GetAt(i))
- {
- pChild->EnableWindow(bEnable);
- }
- }
+void CPWL_Wnd::EnableWindow(FX_BOOL bEnable) {
+ if (m_bEnabled != bEnable) {
+ for (int32_t i = 0, sz = m_aChildren.GetSize(); i < sz; i++) {
+ if (CPWL_Wnd* pChild = m_aChildren.GetAt(i)) {
+ pChild->EnableWindow(bEnable);
+ }
+ }
- m_bEnabled = bEnable;
+ m_bEnabled = bEnable;
- if (bEnable)
- OnEnabled();
- else
- OnDisabled();
- }
+ if (bEnable)
+ OnEnabled();
+ else
+ OnDisabled();
+ }
}
-FX_BOOL CPWL_Wnd::IsEnabled()
-{
- return m_bEnabled;
+FX_BOOL CPWL_Wnd::IsEnabled() {
+ return m_bEnabled;
}
-void CPWL_Wnd::OnEnabled()
-{
-}
+void CPWL_Wnd::OnEnabled() {}
-void CPWL_Wnd::OnDisabled()
-{
-}
+void CPWL_Wnd::OnDisabled() {}
-FX_BOOL CPWL_Wnd::IsCTRLpressed(FX_DWORD nFlag) const
-{
- if (IFX_SystemHandler* pSystemHandler = GetSystemHandler())
- {
- return pSystemHandler->IsCTRLKeyDown(nFlag);
- }
+FX_BOOL CPWL_Wnd::IsCTRLpressed(FX_DWORD nFlag) const {
+ if (IFX_SystemHandler* pSystemHandler = GetSystemHandler()) {
+ return pSystemHandler->IsCTRLKeyDown(nFlag);
+ }
- return FALSE;
+ return FALSE;
}
-FX_BOOL CPWL_Wnd::IsSHIFTpressed(FX_DWORD nFlag) const
-{
- if (IFX_SystemHandler* pSystemHandler = GetSystemHandler())
- {
- return pSystemHandler->IsSHIFTKeyDown(nFlag);
- }
+FX_BOOL CPWL_Wnd::IsSHIFTpressed(FX_DWORD nFlag) const {
+ if (IFX_SystemHandler* pSystemHandler = GetSystemHandler()) {
+ return pSystemHandler->IsSHIFTKeyDown(nFlag);
+ }
- return FALSE;
+ return FALSE;
}
-FX_BOOL CPWL_Wnd::IsALTpressed(FX_DWORD nFlag) const
-{
- if (IFX_SystemHandler* pSystemHandler = GetSystemHandler())
- {
- return pSystemHandler->IsALTKeyDown(nFlag);
- }
+FX_BOOL CPWL_Wnd::IsALTpressed(FX_DWORD nFlag) const {
+ if (IFX_SystemHandler* pSystemHandler = GetSystemHandler()) {
+ return pSystemHandler->IsALTKeyDown(nFlag);
+ }
- return FALSE;
+ return FALSE;
}
-FX_BOOL CPWL_Wnd::IsINSERTpressed(FX_DWORD nFlag) const
-{
- if (IFX_SystemHandler* pSystemHandler = GetSystemHandler())
- {
- return pSystemHandler->IsINSERTKeyDown(nFlag);
- }
+FX_BOOL CPWL_Wnd::IsINSERTpressed(FX_DWORD nFlag) const {
+ if (IFX_SystemHandler* pSystemHandler = GetSystemHandler()) {
+ return pSystemHandler->IsINSERTKeyDown(nFlag);
+ }
- return FALSE;
+ return FALSE;
}
diff --git a/fpdfsdk/src/resource.h b/fpdfsdk/src/resource.h
index 1729807951..a30a4ef45f 100644
--- a/fpdfsdk/src/resource.h
+++ b/fpdfsdk/src/resource.h
@@ -15,10 +15,10 @@
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
-#define _APS_NEXT_RESOURCE_VALUE 104
-#define _APS_NEXT_COMMAND_VALUE 40001
-#define _APS_NEXT_CONTROL_VALUE 1000
-#define _APS_NEXT_SYMED_VALUE 101
+#define _APS_NEXT_RESOURCE_VALUE 104
+#define _APS_NEXT_COMMAND_VALUE 40001
+#define _APS_NEXT_CONTROL_VALUE 1000
+#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif
diff --git a/public/fpdf_dataavail.h b/public/fpdf_dataavail.h
index 317a355f62..c17f0311ab 100644
--- a/public/fpdf_dataavail.h
+++ b/public/fpdf_dataavail.h
@@ -12,10 +12,9 @@
#include "fpdfview.h"
/** The result of the process which check linearized PDF. */
-#define FSDK_IS_LINEARIZED 1
-#define FSDK_NOT_LINEARIZED 0
-#define FSDK_UNKNOW_LINEARIZED -1
-
+#define FSDK_IS_LINEARIZED 1
+#define FSDK_NOT_LINEARIZED 0
+#define FSDK_UNKNOW_LINEARIZED -1
#ifdef __cplusplus
extern "C" {
@@ -26,28 +25,29 @@ extern "C" {
* Interface for checking whether the section of the file is available.
*/
typedef struct _FX_FILEAVAIL {
- /**
- * Version number of the interface. Currently must be 1.
- */
- int version;
-
- /**
- * Method: IsDataAvail
- * Report whether the specified data section is available. A section is available only if all bytes in the section is available.
- * Interface Version:
- * 1
- * Implementation Required:
- * Yes
- * Parameters:
- * pThis - Pointer to the interface structure itself.
- * offset - The offset of the data section in the file.
- * size - The size of the data section
- * Return Value:
- * true means the specified data section is available.
- * Comments:
- * Called by Foxit SDK to check whether the data section is ready.
- */
- FPDF_BOOL (*IsDataAvail)(struct _FX_FILEAVAIL* pThis, size_t offset, size_t size);
+ /**
+ * Version number of the interface. Currently must be 1.
+ */
+ int version;
+
+ /**
+ * Method: IsDataAvail
+ * Report whether the specified data section is available. A section is
+ * available only if all bytes in the section is available.
+ * Interface Version:
+ * 1
+ * Implementation Required:
+ * Yes
+ * Parameters:
+ * pThis - Pointer to the interface structure itself.
+ * offset - The offset of the data section in the file.
+ * size - The size of the data section
+ * Return Value:
+ * true means the specified data section is available.
+ * Comments:
+ * Called by Foxit SDK to check whether the data section is ready.
+ */
+ FPDF_BOOL (*IsDataAvail)(struct _FX_FILEAVAIL* pThis, size_t offset, size_t size);
} FX_FILEAVAIL;
typedef void* FPDF_AVAIL;
@@ -57,21 +57,26 @@ typedef void* FPDF_AVAIL;
* Create a document availability provider.
*
* Parameters:
-* file_avail - Pointer to file availability interface to check availability of file data.
-* file - Pointer to a file access interface for reading data from file.
+* file_avail - Pointer to file availability interface to check
+* availability of file data.
+* file - Pointer to a file access interface for reading data
+* from file.
* Return value:
* A handle to the document availability provider. NULL for error.
* Comments:
-* Application must call FPDFAvail_Destroy when done with the availability provider.
+* Application must call FPDFAvail_Destroy when done with the
+* availability provider.
*/
-DLLEXPORT FPDF_AVAIL STDCALL FPDFAvail_Create(FX_FILEAVAIL* file_avail, FPDF_FILEACCESS* file);
+DLLEXPORT FPDF_AVAIL STDCALL FPDFAvail_Create(FX_FILEAVAIL* file_avail,
+ FPDF_FILEACCESS* file);
/**
* Function: FPDFAvail_Destroy
* Destroy a document availibity provider.
*
* Parameters:
-* avail - Handle to document availability provider returned by FPDFAvail_Create
+* avail - Handle to document availability provider returned by
+* FPDFAvail_Create
* Return Value:
* None.
*/
@@ -79,63 +84,79 @@ DLLEXPORT void STDCALL FPDFAvail_Destroy(FPDF_AVAIL avail);
/**
* Interface: FX_DOWNLOADHINTS
- * Download hints interface. Used to receive hints for further downloading.
+ * Download hints interface. Used to receive hints for further
+ * downloading.
*/
typedef struct _FX_DOWNLOADHINTS {
- /**
- * Version number of the interface. Currently must be 1.
- */
- int version;
-
- /**
- * Method: AddSegment
- * Add a section to be downloaded.
- * Interface Version:
- * 1
- * Implementation Required:
- * Yes
- * Parameters:
- * pThis - Pointer to the interface structure itself.
- * offset - The offset of the hint reported to be downloaded.
- * size - The size of the hint reported to be downloaded.
- * Return Value:
- * None.
- * Comments:
- * Called by Foxit SDK to report some downloading hints for download manager.
- * The position and size of section may be not accurate, part of the section might be already available.
- * The download manager must deal with that to maximize download efficiency.
- */
- void (*AddSegment)(struct _FX_DOWNLOADHINTS* pThis, size_t offset, size_t size);
+ /**
+ * Version number of the interface. Currently must be 1.
+ */
+ int version;
+
+ /**
+ * Method: AddSegment
+ * Add a section to be downloaded.
+ * Interface Version:
+ * 1
+ * Implementation Required:
+ * Yes
+ * Parameters:
+ * pThis - Pointer to the interface structure itself.
+ * offset - The offset of the hint reported to be downloaded.
+ * size - The size of the hint reported to be downloaded.
+ * Return Value:
+ * None.
+ * Comments:
+ * Called by Foxit SDK to report some downloading hints for download
+ * manager.
+ * The position and size of section may be not accurate, part of the
+ * section might be already available.
+ * The download manager must deal with that to maximize download
+ * efficiency.
+ */
+ void (*AddSegment)(struct _FX_DOWNLOADHINTS* pThis,
+ size_t offset,
+ size_t size);
} FX_DOWNLOADHINTS;
/**
* Function: FPDFAvail_IsDocAvail
-* Check whether the document is ready for loading, if not, get download hints.
+* Check whether the document is ready for loading, if not, get
+* download hints.
*
* Parameters:
-* avail - Handle to document availability provider returned by FPDFAvail_Create
-* hints - Pointer to a download hints interface, receiving generated hints
+* avail - Handle to document availability provider returned by
+* FPDFAvail_Create
+* hints - Pointer to a download hints interface, receiving
+* generated hints
* Return value:
* Non-zero for page is fully available, 0 for page not yet available.
* Comments:
-* The application should call this function whenever new data arrived, and process all the
-* generated download hints if any, until the function returns non-zero value. Then the
-* application can call FPDFAvail_GetDocument() to get a document handle.
+* The application should call this function whenever new data arrived,
+* and process all the
+* generated download hints if any, until the function returns non-zero
+* value. Then the
+* application can call FPDFAvail_GetDocument() to get a document
+* handle.
*/
-DLLEXPORT int STDCALL FPDFAvail_IsDocAvail(FPDF_AVAIL avail, FX_DOWNLOADHINTS* hints);
+DLLEXPORT int STDCALL FPDFAvail_IsDocAvail(FPDF_AVAIL avail,
+ FX_DOWNLOADHINTS* hints);
/**
* Function: FPDFAvail_GetDocument
* Get document from the availability provider.
*
* Parameters:
-* avail - Handle to document availability provider returned by FPDFAvail_Create
+* avail - Handle to document availability provider returned by
+* FPDFAvail_Create
* password - Optional password for decrypting the PDF file.
* Return value:
* Handle to the document.
* Comments:
-* After FPDFAvail_IsDocAvail() returns TRUE, the application should call this function to
-* get the document handle. To close the document, use FPDF_CloseDocument function.
+* After FPDFAvail_IsDocAvail() returns TRUE, the application should
+* call this function to
+* get the document handle. To close the document, use
+* FPDF_CloseDocument function.
*/
DLLEXPORT FPDF_DOCUMENT STDCALL FPDFAvail_GetDocument(FPDF_AVAIL avail,
FPDF_BYTESTRING password);
@@ -149,7 +170,8 @@ DLLEXPORT FPDF_DOCUMENT STDCALL FPDFAvail_GetDocument(FPDF_AVAIL avail,
* Return Value:
* Zero-based index for the first available page.
* Comments:
-* For most linearized PDFs, the first available page would be just the first page, however,
+* For most linearized PDFs, the first available page would be just the
+* first page, however,
* some PDFs might make other page to be the first available page.
* For non-linearized PDF, this function will always return zero.
*/
@@ -157,57 +179,78 @@ DLLEXPORT int STDCALL FPDFAvail_GetFirstPageNum(FPDF_DOCUMENT doc);
/**
* Function: FPDFAvail_IsPageAvail
-* Check whether a page is ready for loading, if not, get download hints.
+* Check whether a page is ready for loading, if not, get download
+* hints.
*
* Parameters:
-* avail - Handle to document availability provider returned by FPDFAvail_Create
+* avail - Handle to document availability provider returned by
+* FPDFAvail_Create
* page_index - Index number of the page. 0 for the first page.
-* hints - Pointer to a download hints interface, receiving generated hints
+* hints - Pointer to a download hints interface, receiving
+* generated hints
* Return value:
* Non-zero for page is fully available, 0 for page not yet available.
* Comments:
-* This function call be called only after FPDFAvail_GetDocument if called.
-* The application should call this function whenever new data arrived, and process all the
-* generated download hints if any, until the function returns non-zero value. Then the
+* This function call be called only after FPDFAvail_GetDocument if
+* called.
+* The application should call this function whenever new data arrived,
+* and process all the
+* generated download hints if any, until the function returns non-zero
+* value. Then the
* application can perform page loading.
*/
-DLLEXPORT int STDCALL FPDFAvail_IsPageAvail(FPDF_AVAIL avail, int page_index, FX_DOWNLOADHINTS* hints);
+DLLEXPORT int STDCALL FPDFAvail_IsPageAvail(FPDF_AVAIL avail,
+ int page_index,
+ FX_DOWNLOADHINTS* hints);
/**
* Function: FPDFAvail_ISFormAvail
-* Check whether Form data is ready for init, if not, get download hints.
+* Check whether Form data is ready for init, if not, get download
+* hints.
*
* Parameters:
-* avail - Handle to document availability provider returned by FPDFAvail_Create
-* hints - Pointer to a download hints interface, receiving generated hints
+* avail - Handle to document availability provider returned by
+* FPDFAvail_Create
+* hints - Pointer to a download hints interface, receiving
+* generated hints
* Return value:
-* Non-zero for Form data is fully available, 0 for Form data not yet available.
-* Details: -1 - error, the input parameter not correct, such as hints is null.
+* Non-zero for Form data is fully available, 0 for Form data not yet
+* available.
+* Details: -1 - error, the input parameter not correct, such as hints
+* is null.
* 0 - data not available
* 1 - data available
* 2 - no form data.
* Comments:
-* This function call be called only after FPDFAvail_GetDocument if called.
-* The application should call this function whenever new data arrived, and process all the
-* generated download hints if any, until the function returns non-zero value. Then the
-* application can perform page loading. Recommend to call FPDFDOC_InitFormFillEnvironment
+* This function call be called only after FPDFAvail_GetDocument if
+* called.
+* The application should call this function whenever new data arrived,
+* and process all the
+* generated download hints if any, until the function returns non-zero
+* value. Then the
+* application can perform page loading. Recommend to call
+* FPDFDOC_InitFormFillEnvironment
* after the function returns non-zero value.
*/
-DLLEXPORT int STDCALL FPDFAvail_IsFormAvail(FPDF_AVAIL avail, FX_DOWNLOADHINTS* hints);
+DLLEXPORT int STDCALL FPDFAvail_IsFormAvail(FPDF_AVAIL avail,
+ FX_DOWNLOADHINTS* hints);
/**
* Function: FPDFAvail_IsLinearized
* To check whether a document is Linearized PDF file.
*
* Parameters:
-* avail - Handle to document availability provider returned by FPDFAvail_Create
+* avail - Handle to document availability provider returned by
+* FPDFAvail_Create
* Return value:
* return TRUE means the document is linearized PDF else not.
* FSDK_IS_LINEARIZED is a linearize file.
* FSDK_NOT_LINEARIZED is not a linearize file.
-* FSDK_UNKNOW_LINEARIZED don't know whether the file is a linearize file.
+* FSDK_UNKNOW_LINEARIZED don't know whether the file is a linearize
+* file.
* Comments:
-* It return TRUE/FALSE as soon as we have first 1K data. If the file's size less than
+* It return TRUE/FALSE as soon as we have first 1K data. If the
+* file's size less than
* 1K,we don't known whether the PDF is a linearized file.
*
*/
diff --git a/public/fpdf_doc.h b/public/fpdf_doc.h
index 511badb539..ed05aed4d9 100644
--- a/public/fpdf_doc.h
+++ b/public/fpdf_doc.h
@@ -15,24 +15,32 @@ extern "C" {
#endif
// Function: FPDFBookmark_GetFirstChild
-// Get the first child of a bookmark item, or the first top level bookmark item.
+// Get the first child of a bookmark item, or the first top level
+// bookmark item.
// Parameters:
-// document - Handle to the document. Returned by FPDF_LoadDocument or FPDF_LoadMemDocument.
-// bookmark - Handle to the current bookmark. Can be NULL if you want to get the first top level item.
+// document - Handle to the document. Returned by
+// FPDF_LoadDocument or FPDF_LoadMemDocument.
+// bookmark - Handle to the current bookmark. Can be NULL if you
+// want to get the first top level item.
// Return value:
-// Handle to the first child or top level bookmark item. NULL if no child or top level bookmark found.
+// Handle to the first child or top level bookmark item. NULL if no
+// child or top level bookmark found.
//
-DLLEXPORT FPDF_BOOKMARK STDCALL FPDFBookmark_GetFirstChild(FPDF_DOCUMENT document, FPDF_BOOKMARK bookmark);
+DLLEXPORT FPDF_BOOKMARK STDCALL
+FPDFBookmark_GetFirstChild(FPDF_DOCUMENT document, FPDF_BOOKMARK bookmark);
// Function: FPDFBookmark_GetNextSibling
// Get next bookmark item at the same level.
// Parameters:
-// document - Handle to the document. Returned by FPDF_LoadDocument or FPDF_LoadMemDocument.
+// document - Handle to the document. Returned by
+// FPDF_LoadDocument or FPDF_LoadMemDocument.
// bookmark - Handle to the current bookmark. Cannot be NULL.
// Return value:
-// Handle to the next bookmark item at the same level. NULL if this is the last bookmark at this level.
+// Handle to the next bookmark item at the same level. NULL if this is
+// the last bookmark at this level.
//
-DLLEXPORT FPDF_BOOKMARK STDCALL FPDFBookmark_GetNextSibling(FPDF_DOCUMENT document, FPDF_BOOKMARK bookmark);
+DLLEXPORT FPDF_BOOKMARK STDCALL
+FPDFBookmark_GetNextSibling(FPDF_DOCUMENT document, FPDF_BOOKMARK bookmark);
// Function: FPDFBookmark_GetTitle
// Get title of a bookmark.
@@ -43,27 +51,38 @@ DLLEXPORT FPDF_BOOKMARK STDCALL FPDFBookmark_GetNextSibling(FPDF_DOCUMENT docume
// Return value:
// Number of bytes the title consumes, including trailing zeros.
// Comments:
-// Regardless of the platform, the title is always in UTF-16LE encoding. That means the buffer
-// can be treated as an array of WORD (on Intel and compatible CPUs), each WORD representing the Unicode of
-// a character(some special Unicode may take 2 WORDs).The string is followed by two bytes of zero
+// Regardless of the platform, the title is always in UTF-16LE
+// encoding. That means the buffer
+// can be treated as an array of WORD (on Intel and compatible CPUs),
+// each WORD representing the Unicode of
+// a character(some special Unicode may take 2 WORDs).The string is
+// followed by two bytes of zero
// indicating the end of the string.
//
-// The return value always indicates the number of bytes required for the buffer, even if no buffer is specified
-// or the buffer size is less then required. In these cases, the buffer will not be modified.
+// The return value always indicates the number of bytes required for
+// the buffer, even if no buffer is specified
+// or the buffer size is less then required. In these cases, the buffer
+// will not be modified.
//
-DLLEXPORT unsigned long STDCALL FPDFBookmark_GetTitle(FPDF_BOOKMARK bookmark, void* buffer, unsigned long buflen);
+DLLEXPORT unsigned long STDCALL FPDFBookmark_GetTitle(FPDF_BOOKMARK bookmark,
+ void* buffer,
+ unsigned long buflen);
// Function: FPDFBookmark_Find
// Find a bookmark in the document, using the bookmark title.
// Parameters:
-// document - Handle to the document. Returned by FPDF_LoadDocument or FPDF_LoadMemDocument.
-// title - The UTF-16LE encoded Unicode string for the bookmark title to be searched. Can't be NULL.
+// document - Handle to the document. Returned by
+// FPDF_LoadDocument or FPDF_LoadMemDocument.
+// title - The UTF-16LE encoded Unicode string for the bookmark
+// title to be searched. Can't be NULL.
// Return value:
// Handle to the found bookmark item. NULL if the title can't be found.
// Comments:
-// It always returns the first found bookmark if more than one bookmarks have the same title.
+// It always returns the first found bookmark if more than one
+// bookmarks have the same title.
//
-DLLEXPORT FPDF_BOOKMARK STDCALL FPDFBookmark_Find(FPDF_DOCUMENT document, FPDF_WIDESTRING title);
+DLLEXPORT FPDF_BOOKMARK STDCALL FPDFBookmark_Find(FPDF_DOCUMENT document,
+ FPDF_WIDESTRING title);
// Function: FPDFBookmark_GetDest
// Get the destination associated with a bookmark item.
@@ -71,26 +90,30 @@ DLLEXPORT FPDF_BOOKMARK STDCALL FPDFBookmark_Find(FPDF_DOCUMENT document, FPDF_W
// document - Handle to the document.
// bookmark - Handle to the bookmark.
// Return value:
-// Handle to the destination data. NULL if no destination is associated with this bookmark.
+// Handle to the destination data. NULL if no destination is associated
+// with this bookmark.
//
-DLLEXPORT FPDF_DEST STDCALL FPDFBookmark_GetDest(FPDF_DOCUMENT document, FPDF_BOOKMARK bookmark);
+DLLEXPORT FPDF_DEST STDCALL FPDFBookmark_GetDest(FPDF_DOCUMENT document,
+ FPDF_BOOKMARK bookmark);
// Function: FPDFBookmark_GetAction
// Get the action associated with a bookmark item.
// Parameters:
// bookmark - Handle to the bookmark.
// Return value:
-// Handle to the action data. NULL if no action is associated with this bookmark. In this case, the
+// Handle to the action data. NULL if no action is associated with this
+// bookmark. In this case, the
// application should try FPDFBookmark_GetDest.
//
DLLEXPORT FPDF_ACTION STDCALL FPDFBookmark_GetAction(FPDF_BOOKMARK bookmark);
-#define PDFACTION_UNSUPPORTED 0 // Unsupported action type.
-#define PDFACTION_GOTO 1 // Go to a destination within current document.
-#define PDFACTION_REMOTEGOTO 2 // Go to a destination within another document.
-#define PDFACTION_URI 3 // Universal Resource Identifier, including web pages and
- // other Internet based resources.
-#define PDFACTION_LAUNCH 4 // Launch an application or open a file.
+#define PDFACTION_UNSUPPORTED 0 // Unsupported action type.
+#define PDFACTION_GOTO 1 // Go to a destination within current document.
+#define PDFACTION_REMOTEGOTO 2 // Go to a destination within another document.
+#define PDFACTION_URI \
+ 3 // Universal Resource Identifier, including web pages and
+ // other Internet based resources.
+#define PDFACTION_LAUNCH 4 // Launch an application or open a file.
// Function: FPDFAction_GetType
// Get type of an action.
@@ -105,15 +128,19 @@ DLLEXPORT unsigned long STDCALL FPDFAction_GetType(FPDF_ACTION action);
// Get destination of an action.
// Parameters:
// document - Handle to the document.
-// action - Handle to the action. It must be a GOTO or REMOTEGOTO action.
+// action - Handle to the action. It must be a GOTO or
+// REMOTEGOTO action.
// Return value:
// Handle to the destination data.
// Comments:
-// In case of remote goto action, the application should first use FPDFAction_GetFilePath to
-// get file path, then load that particular document, and use its document handle to call this
+// In case of remote goto action, the application should first use
+// FPDFAction_GetFilePath to
+// get file path, then load that particular document, and use its
+// document handle to call this
// function.
//
-DLLEXPORT FPDF_DEST STDCALL FPDFAction_GetDest(FPDF_DOCUMENT document, FPDF_ACTION action);
+DLLEXPORT FPDF_DEST STDCALL FPDFAction_GetDest(FPDF_DOCUMENT document,
+ FPDF_ACTION action);
// Function: FPDFAction_GetURIPath
// Get URI path of a URI action.
@@ -127,12 +154,16 @@ DLLEXPORT FPDF_DEST STDCALL FPDFAction_GetDest(FPDF_DOCUMENT document, FPDF_ACTI
// Comments:
// The URI path is always encoded in 7-bit ASCII.
//
-// The return value always indicated number of bytes required for the buffer, even when there is
-// no buffer specified, or the buffer size is less then required. In this case, the buffer will not
+// The return value always indicated number of bytes required for the
+// buffer, even when there is
+// no buffer specified, or the buffer size is less then required. In
+// this case, the buffer will not
// be modified.
//
-DLLEXPORT unsigned long STDCALL FPDFAction_GetURIPath(FPDF_DOCUMENT document, FPDF_ACTION action,
- void* buffer, unsigned long buflen);
+DLLEXPORT unsigned long STDCALL FPDFAction_GetURIPath(FPDF_DOCUMENT document,
+ FPDF_ACTION action,
+ void* buffer,
+ unsigned long buflen);
// Function: FPDFDest_GetPageIndex
// Get page index of a destination.
@@ -142,63 +173,80 @@ DLLEXPORT unsigned long STDCALL FPDFAction_GetURIPath(FPDF_DOCUMENT document, FP
// Return value:
// The page index. Starting from 0 for the first page.
//
-DLLEXPORT unsigned long STDCALL FPDFDest_GetPageIndex(FPDF_DOCUMENT document, FPDF_DEST dest);
+DLLEXPORT unsigned long STDCALL FPDFDest_GetPageIndex(FPDF_DOCUMENT document,
+ FPDF_DEST dest);
// Function: FPDFLink_GetLinkAtPoint
// Find a link at specified point on a document page.
// Parameters:
// page - Handle to the document page.
-// x - The x coordinate of the point, specified in page coordinate system.
-// y - The y coordinate of the point, specified in page coordinate system.
+// x - The x coordinate of the point, specified in page
+// coordinate system.
+// y - The y coordinate of the point, specified in page
+// coordinate system.
// Return value:
// Handle to the link. NULL if no link found at that point.
// Comments:
-// The point coordinates are specified in page coordinate system. You can convert coordinates
+// The point coordinates are specified in page coordinate system. You
+// can convert coordinates
// from screen system to page system using FPDF_DeviceToPage functions.
//
-DLLEXPORT FPDF_LINK STDCALL FPDFLink_GetLinkAtPoint(FPDF_PAGE page, double x, double y);
+DLLEXPORT FPDF_LINK STDCALL FPDFLink_GetLinkAtPoint(FPDF_PAGE page,
+ double x,
+ double y);
// Function: FPDFLink_GetDest
// Get destination info of a link.
// Parameters:
// document - Handle to the document.
-// link - Handle to the link. Returned by FPDFLink_GetLinkAtPoint.
+// link - Handle to the link. Returned by
+// FPDFLink_GetLinkAtPoint.
// Return value:
-// Handle to the destination. NULL if there is no destination associated with the link, in this case
+// Handle to the destination. NULL if there is no destination
+// associated with the link, in this case
// the application should try FPDFLink_GetAction.
//
-DLLEXPORT FPDF_DEST STDCALL FPDFLink_GetDest(FPDF_DOCUMENT document, FPDF_LINK link);
+DLLEXPORT FPDF_DEST STDCALL FPDFLink_GetDest(FPDF_DOCUMENT document,
+ FPDF_LINK link);
// Function: FPDFLink_GetAction
// Get action info of a link.
// Parameters:
// link - Handle to the link.
// Return value:
-// Handle to the action. NULL if there is no action associated with the link.
+// Handle to the action. NULL if there is no action associated with the
+// link.
//
DLLEXPORT FPDF_ACTION STDCALL FPDFLink_GetAction(FPDF_LINK link);
// Function: FPDFLink_Enumerate
-// This function would enumerate all the link annotations in a single PDF page.
+// This function would enumerate all the link annotations in a single
+// PDF page.
// Parameters:
// page[in] - Handle to the page.
-// startPos[in,out] - The start position to enumerate the link annotations, which should be specified to start from
-// - 0 for the first call, and would receive the next position for enumerating to start from.
+// startPos[in,out] - The start position to enumerate the link
+// annotations, which should be specified to start from
+// - 0 for the first call, and would receive the
+// next position for enumerating to start from.
// linkAnnot[out] - Receive the link handle.
// Return value:
// TRUE if succceed, else False;
//
-DLLEXPORT FPDF_BOOL STDCALL FPDFLink_Enumerate(FPDF_PAGE page, int* startPos, FPDF_LINK* linkAnnot);
+DLLEXPORT FPDF_BOOL STDCALL FPDFLink_Enumerate(FPDF_PAGE page,
+ int* startPos,
+ FPDF_LINK* linkAnnot);
// Function: FPDFLink_GetAnnotRect
-// Get the annotation rectangle. (Specified by the ¡°Rect¡± entry of annotation dictionary).
+// Get the annotation rectangle. (Specified by the ¡°Rect¡± entry of
+// annotation dictionary).
// Parameters:
// linkAnnot[in] - Handle to the link annotation.
// rect[out] - The annotation rect.
// Return value:
// TRUE if succceed, else False;
//
-DLLEXPORT FPDF_BOOL STDCALL FPDFLink_GetAnnotRect(FPDF_LINK linkAnnot, FS_RECTF* rect);
+DLLEXPORT FPDF_BOOL STDCALL FPDFLink_GetAnnotRect(FPDF_LINK linkAnnot,
+ FS_RECTF* rect);
// Function: FPDFLink_CountQuadPoints
// Get the count of quadrilateral points to the link annotation.
@@ -212,21 +260,21 @@ DLLEXPORT int STDCALL FPDFLink_CountQuadPoints(FPDF_LINK linkAnnot);
/* _FS_DEF_STRUCTURE_QUADPOINTSF_ */
#ifndef _FS_DEF_STRUCTURE_QUADPOINTSF_
#define _FS_DEF_STRUCTURE_QUADPOINTSF_
-typedef struct _FS_QUADPOINTSF
-{
- FS_FLOAT x1;
- FS_FLOAT y1;
- FS_FLOAT x2;
- FS_FLOAT y2;
- FS_FLOAT x3;
- FS_FLOAT y3;
- FS_FLOAT x4;
- FS_FLOAT y4;
+typedef struct _FS_QUADPOINTSF {
+ FS_FLOAT x1;
+ FS_FLOAT y1;
+ FS_FLOAT x2;
+ FS_FLOAT y2;
+ FS_FLOAT x3;
+ FS_FLOAT y3;
+ FS_FLOAT x4;
+ FS_FLOAT y4;
} FS_QUADPOINTSF;
#endif /* _FS_DEF_STRUCTURE_QUADPOINTSF_ */
// Function: FPDFLink_GetQuadPoints
-// Get the quadrilateral points for the specified index in the link annotation.
+// Get the quadrilateral points for the specified index in the link
+// annotation.
// Parameters:
// linkAnnot[in] - Handle to the link annotation.
// quadIndex[in] - The specified quad points index.
@@ -234,33 +282,46 @@ typedef struct _FS_QUADPOINTSF
// Return value:
// True if succeed, else False.
//
-DLLEXPORT FPDF_BOOL STDCALL FPDFLink_GetQuadPoints(FPDF_LINK linkAnnot, int quadIndex, FS_QUADPOINTSF* quadPoints);
+DLLEXPORT FPDF_BOOL STDCALL FPDFLink_GetQuadPoints(FPDF_LINK linkAnnot,
+ int quadIndex,
+ FS_QUADPOINTSF* quadPoints);
// Function: FPDF_GetMetaText
-// Get a text from meta data of the document. Result is encoded in UTF-16LE.
+// Get a text from meta data of the document. Result is encoded in
+// UTF-16LE.
// Parameters:
// doc - Handle to a document
-// tag - The tag for the meta data. Currently, It can be "Title", "Author",
-// "Subject", "Keywords", "Creator", "Producer", "CreationDate", or "ModDate".
-// For detailed explanation of these tags and their respective values,
-// please refer to PDF Reference 1.6, section 10.2.1, "Document Information Dictionary".
+// tag - The tag for the meta data. Currently, It can be
+// "Title", "Author",
+// "Subject", "Keywords", "Creator", "Producer",
+// "CreationDate", or "ModDate".
+// For detailed explanation of these tags and their
+// respective values,
+// please refer to PDF Reference 1.6, section 10.2.1,
+// "Document Information Dictionary".
// buffer - A buffer for output the title. Can be NULL.
// buflen - The length of the buffer, number of bytes. Can be 0.
// Return value:
// Number of bytes the title consumes, including trailing zeros.
// Comments:
-// No matter on what platform, the title is always output in UTF-16LE encoding, which means the buffer
-// can be regarded as an array of WORD (on Intel and compatible CPUs), each WORD represent the Unicode of
-// a character (some special Unicode may take 2 WORDs). The string is followed by two bytes of zero
+// No matter on what platform, the title is always output in UTF-16LE
+// encoding, which means the buffer
+// can be regarded as an array of WORD (on Intel and compatible CPUs),
+// each WORD represent the Unicode of
+// a character (some special Unicode may take 2 WORDs). The string is
+// followed by two bytes of zero
// indicating end of the string.
//
-// The return value always indicated number of bytes required for the buffer, even when there is
-// no buffer specified, or the buffer size is less then required. In this case, the buffer will not
+// The return value always indicated number of bytes required for the
+// buffer, even when there is
+// no buffer specified, or the buffer size is less then required. In
+// this case, the buffer will not
// be modified.
//
-DLLEXPORT unsigned long STDCALL FPDF_GetMetaText(FPDF_DOCUMENT doc, FPDF_BYTESTRING tag,
- void* buffer, unsigned long buflen);
-
+DLLEXPORT unsigned long STDCALL FPDF_GetMetaText(FPDF_DOCUMENT doc,
+ FPDF_BYTESTRING tag,
+ void* buffer,
+ unsigned long buflen);
#ifdef __cplusplus
}
diff --git a/public/fpdf_edit.h b/public/fpdf_edit.h
index 4d5191caa6..64eef263a5 100644
--- a/public/fpdf_edit.h
+++ b/public/fpdf_edit.h
@@ -11,14 +11,18 @@
#include "fpdfview.h"
-// Define all types used in the SDK. Note they can be simply regarded as opaque pointers
+// Define all types used in the SDK. Note they can be simply regarded as opaque
+// pointers
// or long integer numbers.
-#define FPDF_ARGB(a,r,g,b) ((((uint32_t)(((uint8_t)(b)|((FX_WORD)((uint8_t)(g))<<8))|(((FX_DWORD)(uint8_t)(r))<<16)))) | (((FX_DWORD)(uint8_t)(a))<<24))
-#define FPDF_GetBValue(argb) ((uint8_t)(argb))
-#define FPDF_GetGValue(argb) ((uint8_t)(((uint16_t)(argb)) >> 8))
-#define FPDF_GetRValue(argb) ((uint8_t)((argb)>>16))
-#define FPDF_GetAValue(argb) ((uint8_t)((argb)>>24))
+#define FPDF_ARGB(a, r, g, b) \
+ ((((uint32_t)(((uint8_t)(b) | ((FX_WORD)((uint8_t)(g)) << 8)) | \
+ (((FX_DWORD)(uint8_t)(r)) << 16)))) | \
+ (((FX_DWORD)(uint8_t)(a)) << 24))
+#define FPDF_GetBValue(argb) ((uint8_t)(argb))
+#define FPDF_GetGValue(argb) ((uint8_t)(((uint16_t)(argb)) >> 8))
+#define FPDF_GetRValue(argb) ((uint8_t)((argb) >> 16))
+#define FPDF_GetAValue(argb) ((uint8_t)((argb) >> 24))
#ifdef __cplusplus
extern "C" {
@@ -47,7 +51,8 @@ DLLEXPORT FPDF_DOCUMENT STDCALL FPDF_CreateNewDocument();
// Function: FPDFPage_New
// Construct an empty page.
// Parameters:
-// document - Handle to document. Returned by FPDF_LoadDocument and FPDF_CreateNewDocument.
+// document - Handle to document. Returned by FPDF_LoadDocument
+// and FPDF_CreateNewDocument.
// page_index - The index of a page.
// width - The page width.
// height - The page height.
@@ -55,21 +60,27 @@ DLLEXPORT FPDF_DOCUMENT STDCALL FPDF_CreateNewDocument();
// The handle to the page.
// Comments:
// Loaded page can be deleted by FPDFPage_Delete.
-DLLEXPORT FPDF_PAGE STDCALL FPDFPage_New(FPDF_DOCUMENT document, int page_index, double width, double height);
+DLLEXPORT FPDF_PAGE STDCALL FPDFPage_New(FPDF_DOCUMENT document,
+ int page_index,
+ double width,
+ double height);
// Function: FPDFPage_Delete
// Delete a PDF page.
// Parameters:
-// document - Handle to document. Returned by FPDF_LoadDocument and FPDF_CreateNewDocument.
+// document - Handle to document. Returned by FPDF_LoadDocument
+// and FPDF_CreateNewDocument.
// page_index - The index of a page.
// Return value:
// None.
DLLEXPORT void STDCALL FPDFPage_Delete(FPDF_DOCUMENT document, int page_index);
// Function: FPDFPage_GetRotation
-// Get the page rotation. One of following values will be returned: 0(0), 1(90), 2(180), 3(270).
+// Get the page rotation. One of following values will be returned:
+// 0(0), 1(90), 2(180), 3(270).
// Parameters:
-// page - Handle to a page. Returned by FPDFPage_New or FPDF_LoadPage.
+// page - Handle to a page. Returned by FPDFPage_New or
+// FPDF_LoadPage.
// Return value:
// The PDF page rotation.
// Comment:
@@ -77,9 +88,11 @@ DLLEXPORT void STDCALL FPDFPage_Delete(FPDF_DOCUMENT document, int page_index);
DLLEXPORT int STDCALL FPDFPage_GetRotation(FPDF_PAGE page);
// Function: FPDFPage_SetRotation
-// Set page rotation. One of following values will be set: 0(0), 1(90), 2(180), 3(270).
+// Set page rotation. One of following values will be set: 0(0), 1(90),
+// 2(180), 3(270).
// Parameters:
-// page - Handle to a page. Returned by FPDFPage_New or FPDF_LoadPage.
+// page - Handle to a page. Returned by FPDFPage_New or
+// FPDF_LoadPage.
// rotate - The value of the PDF page rotation.
// Return value:
// None.
@@ -89,19 +102,24 @@ DLLEXPORT int STDCALL FPDFPage_GetRotation(FPDF_PAGE page);
DLLEXPORT void STDCALL FPDFPage_SetRotation(FPDF_PAGE page, int rotate);
// Function: FPDFPage_InsertObject
-// Insert an object to the page. The page object is automatically freed.
+// Insert an object to the page. The page object is automatically
+// freed.
// Parameters:
-// page - Handle to a page. Returned by FPDFPage_New or FPDF_LoadPage.
-// page_obj - Handle to a page object. Returned by FPDFPageObj_NewTextObj,FPDFPageObj_NewTextObjEx and
+// page - Handle to a page. Returned by FPDFPage_New or
+// FPDF_LoadPage.
+// page_obj - Handle to a page object. Returned by
+// FPDFPageObj_NewTextObj,FPDFPageObj_NewTextObjEx and
// FPDFPageObj_NewPathObj.
// Return value:
// None.
-DLLEXPORT void STDCALL FPDFPage_InsertObject(FPDF_PAGE page, FPDF_PAGEOBJECT page_obj);
+DLLEXPORT void STDCALL FPDFPage_InsertObject(FPDF_PAGE page,
+ FPDF_PAGEOBJECT page_obj);
// Function: FPDFPage_CountObject
// Get number of page objects inside the page.
// Parameters:
-// page - Handle to a page. Returned by FPDFPage_New or FPDF_LoadPage.
+// page - Handle to a page. Returned by FPDFPage_New or
+// FPDF_LoadPage.
// Return value:
// The number of the page object.
DLLEXPORT int STDCALL FPDFPage_CountObject(FPDF_PAGE page);
@@ -109,16 +127,19 @@ DLLEXPORT int STDCALL FPDFPage_CountObject(FPDF_PAGE page);
// Function: FPDFPage_GetObject
// Get page object by index.
// Parameters:
-// page - Handle to a page. Returned by FPDFPage_New or FPDF_LoadPage.
+// page - Handle to a page. Returned by FPDFPage_New or
+// FPDF_LoadPage.
// index - The index of a page object.
// Return value:
// The handle of the page object. Null for failed.
DLLEXPORT FPDF_PAGEOBJECT STDCALL FPDFPage_GetObject(FPDF_PAGE page, int index);
// Function: FPDFPage_HasTransparency
-// Check that whether the content of specified PDF page contains transparency.
+// Check that whether the content of specified PDF page contains
+// transparency.
// Parameters:
-// page - Handle to a page. Returned by FPDFPage_New or FPDF_LoadPage.
+// page - Handle to a page. Returned by FPDFPage_New or
+// FPDF_LoadPage.
// Return value:
// TRUE means that the PDF page does contains transparency.
// Otherwise, returns FALSE.
@@ -127,11 +148,13 @@ DLLEXPORT FPDF_BOOL STDCALL FPDFPage_HasTransparency(FPDF_PAGE page);
// Function: FPDFPage_GenerateContent
// Generate PDF Page content.
// Parameters:
-// page - Handle to a page. Returned by FPDFPage_New or FPDF_LoadPage.
+// page - Handle to a page. Returned by FPDFPage_New or
+// FPDF_LoadPage.
// Return value:
// True if successful, false otherwise.
// Comment:
-// Before you save the page to a file, or reload the page, you must call the FPDFPage_GenerateContent function.
+// Before you save the page to a file, or reload the page, you must
+// call the FPDFPage_GenerateContent function.
// Or the changed information will be lost.
DLLEXPORT FPDF_BOOL STDCALL FPDFPage_GenerateContent(FPDF_PAGE page);
@@ -142,18 +165,21 @@ DLLEXPORT FPDF_BOOL STDCALL FPDFPage_GenerateContent(FPDF_PAGE page);
//////////////////////////////////////////////////////////////////////
// Function: FPDFPageObj_HasTransparency
-// Check that whether the specified PDF page object contains transparency.
+// Check that whether the specified PDF page object contains
+// transparency.
// Parameters:
// pageObject - Handle to a page object.
// Return value:
// TRUE means that the PDF page object does contains transparency.
// Otherwise, returns FALSE.
-DLLEXPORT FPDF_BOOL STDCALL FPDFPageObj_HasTransparency(FPDF_PAGEOBJECT pageObject);
+DLLEXPORT FPDF_BOOL STDCALL
+FPDFPageObj_HasTransparency(FPDF_PAGEOBJECT pageObject);
// Function: FPDFPageObj_Transform
// Transform (scale, rotate, shear, move) page object.
// Parameters:
-// page_object - Handle to a page object. Returned by FPDFPageObj_NewImageObj.
+// page_object - Handle to a page object. Returned by
+// FPDFPageObj_NewImageObj.
// a - The coefficient "a" of the matrix.
// b - The coefficient "b" of the matrix.
// c - The coefficient "c" of the matrix.
@@ -163,7 +189,12 @@ DLLEXPORT FPDF_BOOL STDCALL FPDFPageObj_HasTransparency(FPDF_PAGEOBJECT pageObje
// Return value:
// None.
DLLEXPORT void STDCALL FPDFPageObj_Transform(FPDF_PAGEOBJECT page_object,
- double a, double b, double c, double d, double e, double f);
+ double a,
+ double b,
+ double c,
+ double d,
+ double e,
+ double f);
// Function: FPDFPage_TransformAnnots
// Transform (scale, rotate, shear, move) all annots in a page.
@@ -178,14 +209,19 @@ DLLEXPORT void STDCALL FPDFPageObj_Transform(FPDF_PAGEOBJECT page_object,
// Return value:
// None.
DLLEXPORT void STDCALL FPDFPage_TransformAnnots(FPDF_PAGE page,
- double a, double b, double c, double d, double e, double f);
+ double a,
+ double b,
+ double c,
+ double d,
+ double e,
+ double f);
// The page object constants.
-#define FPDF_PAGEOBJ_TEXT 1
-#define FPDF_PAGEOBJ_PATH 2
-#define FPDF_PAGEOBJ_IMAGE 3
-#define FPDF_PAGEOBJ_SHADING 4
-#define FPDF_PAGEOBJ_FORM 5
+#define FPDF_PAGEOBJ_TEXT 1
+#define FPDF_PAGEOBJ_PATH 2
+#define FPDF_PAGEOBJ_IMAGE 3
+#define FPDF_PAGEOBJ_SHADING 4
+#define FPDF_PAGEOBJ_FORM 5
//////////////////////////////////////////////////////////////////////
//
@@ -196,31 +232,42 @@ DLLEXPORT void STDCALL FPDFPage_TransformAnnots(FPDF_PAGE page,
// Function: FPDFPageObj_NewImgeObj
// Create a new Image Object.
// Parameters:
-// document - Handle to document. Returned by FPDF_LoadDocument or FPDF_CreateNewDocument function.
+// document - Handle to document. Returned by
+// FPDF_LoadDocument or FPDF_CreateNewDocument function.
// Return Value:
// Handle of image object.
-DLLEXPORT FPDF_PAGEOBJECT STDCALL FPDFPageObj_NewImgeObj(FPDF_DOCUMENT document);
-
+DLLEXPORT FPDF_PAGEOBJECT STDCALL
+FPDFPageObj_NewImgeObj(FPDF_DOCUMENT document);
// Function: FPDFImageObj_LoadJpegFile
-// Load Image from a JPEG image file and then set it to an image object.
+// Load Image from a JPEG image file and then set it to an image
+// object.
// Parameters:
-// pages - Pointers to the start of all loaded pages, could be NULL.
+// pages - Pointers to the start of all loaded pages, could
+// be NULL.
// nCount - Number of pages, could be 0.
-// image_object - Handle of image object returned by FPDFPageObj_NewImgeObj.
-// fileAccess - The custom file access handler, which specifies the JPEG image file.
+// image_object - Handle of image object returned by
+// FPDFPageObj_NewImgeObj.
+// fileAccess - The custom file access handler, which specifies
+// the JPEG image file.
// Return Value:
// TRUE if successful, FALSE otherwise.
// Note:
-// The image object might already has an associated image, which is shared and cached by the loaded pages, In this case, we need to clear the cache of image for all the loaded pages.
+// The image object might already has an associated image, which is
+// shared and cached by the loaded pages, In this case, we need to
+// clear the cache of image for all the loaded pages.
// Pass pages and count to this API to clear the image cache.
-DLLEXPORT FPDF_BOOL STDCALL FPDFImageObj_LoadJpegFile(FPDF_PAGE* pages, int nCount,FPDF_PAGEOBJECT image_object, FPDF_FILEACCESS* fileAccess);
-
+DLLEXPORT FPDF_BOOL STDCALL
+FPDFImageObj_LoadJpegFile(FPDF_PAGE* pages,
+ int nCount,
+ FPDF_PAGEOBJECT image_object,
+ FPDF_FILEACCESS* fileAccess);
// Function: FPDFImageObj_SetMatrix
// Set the matrix of an image object.
// Parameters:
-// image_object - Handle of image object returned by FPDFPageObj_NewImgeObj.
+// image_object - Handle of image object returned by
+// FPDFPageObj_NewImgeObj.
// a - The coefficient "a" of the matrix.
// b - The coefficient "b" of the matrix.
// c - The coefficient "c" of the matrix.
@@ -230,18 +277,28 @@ DLLEXPORT FPDF_BOOL STDCALL FPDFImageObj_LoadJpegFile(FPDF_PAGE* pages, int nCou
// Return value:
// TRUE if successful, FALSE otherwise.
DLLEXPORT FPDF_BOOL STDCALL FPDFImageObj_SetMatrix(FPDF_PAGEOBJECT image_object,
- double a, double b, double c, double d, double e, double f);
+ double a,
+ double b,
+ double c,
+ double d,
+ double e,
+ double f);
// Function: FPDFImageObj_SetBitmap
// Set the bitmap to an image object.
// Parameters:
// pages - Pointer's to the start of all loaded pages.
// nCount - Number of pages.
-// image_object - Handle of image object returned by FPDFPageObj_NewImgeObj.
-// bitmap - The handle of the bitmap which you want to set it to the image object.
+// image_object - Handle of image object returned by
+// FPDFPageObj_NewImgeObj.
+// bitmap - The handle of the bitmap which you want to set
+// it to the image object.
// Return value:
// TRUE if successful, FALSE otherwise.
-DLLEXPORT FPDF_BOOL STDCALL FPDFImageObj_SetBitmap(FPDF_PAGE* pages,int nCount,FPDF_PAGEOBJECT image_object, FPDF_BITMAP bitmap);
+DLLEXPORT FPDF_BOOL STDCALL FPDFImageObj_SetBitmap(FPDF_PAGE* pages,
+ int nCount,
+ FPDF_PAGEOBJECT image_object,
+ FPDF_BITMAP bitmap);
#ifdef __cplusplus
}
diff --git a/public/fpdf_ext.h b/public/fpdf_ext.h
index 8016d2ebc4..c80dcbbf58 100644
--- a/public/fpdf_ext.h
+++ b/public/fpdf_ext.h
@@ -13,45 +13,44 @@
extern "C" {
#endif
-//flags for type of unsupport object.
-#define FPDF_UNSP_DOC_XFAFORM 1
-#define FPDF_UNSP_DOC_PORTABLECOLLECTION 2
-#define FPDF_UNSP_DOC_ATTACHMENT 3
-#define FPDF_UNSP_DOC_SECURITY 4
-#define FPDF_UNSP_DOC_SHAREDREVIEW 5
-#define FPDF_UNSP_DOC_SHAREDFORM_ACROBAT 6
+// flags for type of unsupport object.
+#define FPDF_UNSP_DOC_XFAFORM 1
+#define FPDF_UNSP_DOC_PORTABLECOLLECTION 2
+#define FPDF_UNSP_DOC_ATTACHMENT 3
+#define FPDF_UNSP_DOC_SECURITY 4
+#define FPDF_UNSP_DOC_SHAREDREVIEW 5
+#define FPDF_UNSP_DOC_SHAREDFORM_ACROBAT 6
#define FPDF_UNSP_DOC_SHAREDFORM_FILESYSTEM 7
-#define FPDF_UNSP_DOC_SHAREDFORM_EMAIL 8
-#define FPDF_UNSP_ANNOT_3DANNOT 11
-#define FPDF_UNSP_ANNOT_MOVIE 12
-#define FPDF_UNSP_ANNOT_SOUND 13
-#define FPDF_UNSP_ANNOT_SCREEN_MEDIA 14
-#define FPDF_UNSP_ANNOT_SCREEN_RICHMEDIA 15
-#define FPDF_UNSP_ANNOT_ATTACHMENT 16
-#define FPDF_UNSP_ANNOT_SIG 17
-
-typedef struct _UNSUPPORT_INFO
-{
- /**
- * Version number of the interface. Currently must be 1.
- **/
- int version;
-
- /**
- * Method: FSDK_UnSupport_Handler
- * UnSupport Object process handling function.
- * Interface Version:
- * 1
- * Implementation Required:
- * Yes
- * Parameters:
- * pThis - Pointer to the interface structure itself.
- * nType - The type of unsupportObject
- * Return value:
- * None.
- * */
-
- void(*FSDK_UnSupport_Handler)(struct _UNSUPPORT_INFO* pThis, int nType);
+#define FPDF_UNSP_DOC_SHAREDFORM_EMAIL 8
+#define FPDF_UNSP_ANNOT_3DANNOT 11
+#define FPDF_UNSP_ANNOT_MOVIE 12
+#define FPDF_UNSP_ANNOT_SOUND 13
+#define FPDF_UNSP_ANNOT_SCREEN_MEDIA 14
+#define FPDF_UNSP_ANNOT_SCREEN_RICHMEDIA 15
+#define FPDF_UNSP_ANNOT_ATTACHMENT 16
+#define FPDF_UNSP_ANNOT_SIG 17
+
+typedef struct _UNSUPPORT_INFO {
+ /**
+ * Version number of the interface. Currently must be 1.
+ **/
+ int version;
+
+ /**
+ * Method: FSDK_UnSupport_Handler
+ * UnSupport Object process handling function.
+ * Interface Version:
+ * 1
+ * Implementation Required:
+ * Yes
+ * Parameters:
+ * pThis - Pointer to the interface structure itself.
+ * nType - The type of unsupportObject
+ * Return value:
+ * None.
+ * */
+
+ void (*FSDK_UnSupport_Handler)(struct _UNSUPPORT_INFO* pThis, int nType);
} UNSUPPORT_INFO;
/**
@@ -63,37 +62,40 @@ typedef struct _UNSUPPORT_INFO
* TRUE means successful. FALSE means fails.
**/
-DLLEXPORT FPDF_BOOL STDCALL FSDK_SetUnSpObjProcessHandler(UNSUPPORT_INFO* unsp_info);
+DLLEXPORT FPDF_BOOL STDCALL
+FSDK_SetUnSpObjProcessHandler(UNSUPPORT_INFO* unsp_info);
-//flags for page mode.
+// flags for page mode.
-//Unknown value
-#define PAGEMODE_UNKNOWN -1
+// Unknown value
+#define PAGEMODE_UNKNOWN -1
-//Neither document outline nor thumbnail images visible
-#define PAGEMODE_USENONE 0
+// Neither document outline nor thumbnail images visible
+#define PAGEMODE_USENONE 0
-//Document outline visible
-#define PAGEMODE_USEOUTLINES 1
+// Document outline visible
+#define PAGEMODE_USEOUTLINES 1
-//Thumbnial images visible
-#define PAGEMODE_USETHUMBS 2
+// Thumbnial images visible
+#define PAGEMODE_USETHUMBS 2
-//Full-screen mode, with no menu bar, window controls, or any other window visible
-#define PAGEMODE_FULLSCREEN 3
+// Full-screen mode, with no menu bar, window controls, or any other window
+// visible
+#define PAGEMODE_FULLSCREEN 3
-//Optional content group panel visible
-#define PAGEMODE_USEOC 4
+// Optional content group panel visible
+#define PAGEMODE_USEOC 4
-//Attachments panel visible
+// Attachments panel visible
#define PAGEMODE_USEATTACHMENTS 5
-
/**
* Function: FPDFDoc_GetPageMode
- * Get the document's PageMode(How the document should be displayed when opened)
+ * Get the document's PageMode(How the document should be displayed
+ *when opened)
* Parameters:
- * doc - Handle to document. Returned by FPDF_LoadDocument function.
+ * doc - Handle to document. Returned by FPDF_LoadDocument
+ *function.
* Return Value:
* The flags for page mode.
**/
diff --git a/public/fpdf_flatten.h b/public/fpdf_flatten.h
index f06a7cf17a..af77c29343 100644
--- a/public/fpdf_flatten.h
+++ b/public/fpdf_flatten.h
@@ -10,27 +10,31 @@
#include "fpdfview.h"
// Result codes.
-#define FLATTEN_FAIL 0 // Flatten operation failed.
-#define FLATTEN_SUCCESS 1 // Flatten operation succeed.
-#define FLATTEN_NOTHINGTODO 2 // There is nothing to be flattened.
+#define FLATTEN_FAIL 0 // Flatten operation failed.
+#define FLATTEN_SUCCESS 1 // Flatten operation succeed.
+#define FLATTEN_NOTHINGTODO 2 // There is nothing to be flattened.
// Flags.
-#define FLAT_NORMALDISPLAY 0
-#define FLAT_PRINT 1
+#define FLAT_NORMALDISPLAY 0
+#define FLAT_PRINT 1
#ifdef __cplusplus
extern "C" {
#endif
// Function: FPDFPage_Flatten
-// Make annotations and form fields become part of the page contents itself.
+// Make annotations and form fields become part of the page contents
+// itself.
// Parameters:
// page - Handle to the page, as returned by FPDF_LoadPage().
-// nFlag - Intended use of the flattened result: 0 for normal display, 1 for printing.
+// nFlag - Intended use of the flattened result: 0 for normal display,
+// 1 for printing.
// Return value:
-// Either FLATTEN_FAIL, FLATTEN_SUCCESS, or FLATTEN_NOTHINGTODO (see above).
+// Either FLATTEN_FAIL, FLATTEN_SUCCESS, or FLATTEN_NOTHINGTODO (see
+// above).
// Comments:
-// Currently, all failures return FLATTEN_FAIL, with no indication for the reason
+// Currently, all failures return FLATTEN_FAIL, with no indication for
+// the reason
// for the failure.
DLLEXPORT int STDCALL FPDFPage_Flatten(FPDF_PAGE page, int nFlag);
diff --git a/public/fpdf_formfill.h b/public/fpdf_formfill.h
index 22ebc619b5..90c8b26853 100644
--- a/public/fpdf_formfill.h
+++ b/public/fpdf_formfill.h
@@ -16,558 +16,678 @@ typedef void* FPDF_FORMHANDLE;
extern "C" {
#endif
-typedef struct _IPDF_JsPlatform
-{
- /**
- * Version number of the interface. Currently must be 2.
- **/
- int version;
-
- /* Version 1. */
-
- /**
- * Method: app_alert
- * pop up a dialog to show warning or hint.
- * Interface Version:
- * 1
- * Implementation Required:
- * yes
- * Parameters:
- * pThis - Pointer to the interface structure itself
- * Msg - A string containing the message to be displayed.
- * Title - The title of the dialog.
- * Type - The stype of button group.
- * 0-OK(default);
- * 1-OK,Cancel;
- * 2-Yes,NO;
- * 3-Yes, NO, Cancel.
- * nIcon - The Icon type.
- * 0-Error(default);
- * 1-Warning;
- * 2-Question;
- * 3-Status.
- * Return Value:
- * The return value could be the folowing type:
- * 1-OK;
- * 2-Cancel;
- * 3-NO;
- * 4-Yes;
- */
- int (*app_alert)(struct _IPDF_JsPlatform* pThis, FPDF_WIDESTRING Msg, FPDF_WIDESTRING Title, int Type, int Icon);
-
- /**
- * Method: app_beep
- * Causes the system to play a sound.
- * Interface Version:
- * 1
- * Implementation Required:
- * yes
- * Parameters:
- * pThis - Pointer to the interface structure itself
- * nType - The sound type.
- * 0 - Error
- * 1 - Warning
- * 2 - Question
- * 3 - Status
- * 4 - Default (default value)
- * Return Value:
- * None
- */
- void (*app_beep)(struct _IPDF_JsPlatform* pThis, int nType);
-
- /**
- * Method: app_response
- * Displays a dialog box containing a question and an entry field for the user to reply to the question.
- * Interface Version:
- * 1
- * Implementation Required:
- * yes
- * Parameters:
- * pThis - Pointer to the interface structure itself
- * Question - The question to be posed to the user.
- * Title - The title of the dialog box.
- * Default - A default value for the answer to the question. If not specified, no default value is presented.
- * cLabel - A short string to appear in front of and on the same line as the edit text field.
- * bPassword - If true, indicates that the user's response should show as asterisks (*) or bullets (?) to mask the response, which might be sensitive information. The default is false.
- * response - A string buffer allocated by SDK, to receive the user's response.
- * length - The length of the buffer, number of bytes. Currently, It's always be 2048.
- * Return Value:
- * Number of bytes the complete user input would actually require, not including trailing zeros, regardless of the value of the length
- * parameter or the presence of the response buffer.
- * Comments:
- * No matter on what platform, the response buffer should be always written using UTF-16LE encoding. If a response buffer is
- * present and the size of the user input exceeds the capacity of the buffer as specified by the length parameter, only the
- * first "length" bytes of the user input are to be written to the buffer.
- */
- int (*app_response)(struct _IPDF_JsPlatform* pThis, FPDF_WIDESTRING Question, FPDF_WIDESTRING Title, FPDF_WIDESTRING Default, FPDF_WIDESTRING cLabel, FPDF_BOOL bPassword, void* response, int length);
-
- /*
- * Method: Doc_getFilePath
- * Get the file path of the current document.
- * Interface Version:
- * 1
- * Implementation Required:
- * yes
- * Parameters:
- * pThis - Pointer to the interface structure itself
- * filePath - The string buffer to receive the file path. Can be NULL.
- * length - The length of the buffer, number of bytes. Can be 0.
- * Return Value:
- * Number of bytes the filePath consumes, including trailing zeros.
- * Comments:
- * The filePath should be always input in local encoding.
- *
- * The return value always indicated number of bytes required for the buffer, even when there is
- * no buffer specified, or the buffer size is less then required. In this case, the buffer will not
- * be modified.
- */
- int (*Doc_getFilePath)(struct _IPDF_JsPlatform* pThis, void* filePath, int length);
-
-
- /*
- * Method: Doc_mail
- * Mails the data buffer as an attachment to all recipients, with or without user interaction.
- * Interface Version:
- * 1
- * Implementation Required:
- * yes
- * Parameters:
- * pThis - Pointer to the interface structure itself
- * mailData - Pointer to the data buffer to be sent.Can be NULL.
- * length - The size,in bytes, of the buffer pointed by mailData parameter.Can be 0.
- * bUI - If true, the rest of the parameters are used in a compose-new-message window that is displayed to the user. If false, the cTo parameter is required and all others are optional.
- * To - A semicolon-delimited list of recipients for the message.
- * Subject - The subject of the message. The length limit is 64 KB.
- * CC - A semicolon-delimited list of CC recipients for the message.
- * BCC - A semicolon-delimited list of BCC recipients for the message.
- * Msg - The content of the message. The length limit is 64 KB.
- * Return Value:
- * None.
- * Comments:
- * If the parameter mailData is NULL or length is 0, the current document will be mailed as an attachment to all recipients.
- */
- void (*Doc_mail)(struct _IPDF_JsPlatform* pThis,void* mailData, int length,FPDF_BOOL bUI, FPDF_WIDESTRING To, FPDF_WIDESTRING Subject, FPDF_WIDESTRING CC, FPDF_WIDESTRING BCC, FPDF_WIDESTRING Msg);
-
-
- /*
- * Method: Doc_print
- * Prints all or a specific number of pages of the document.
- * Interface Version:
- * 1
- * Implementation Required:
- * yes
- * Parameters:
- * pThis - Pointer to the interface structure itself.
- * bUI - If true, will cause a UI to be presented to the user to obtain printing information and confirm the action.
- * nStart - A 0-based index that defines the start of an inclusive range of pages.
- * nEnd - A 0-based index that defines the end of an inclusive page range.
- * bSilent - If true, suppresses the cancel dialog box while the document is printing. The default is false.
- * bShrinkToFit - If true, the page is shrunk (if necessary) to fit within the imageable area of the printed page.
- * bPrintAsImage - If true, print pages as an image.
- * bReverse - If true, print from nEnd to nStart.
- * bAnnotations - If true (the default), annotations are printed.
- */
- void (*Doc_print)(struct _IPDF_JsPlatform* pThis, FPDF_BOOL bUI, int nStart, int nEnd, FPDF_BOOL bSilent ,FPDF_BOOL bShrinkToFit,FPDF_BOOL bPrintAsImage ,FPDF_BOOL bReverse ,FPDF_BOOL bAnnotations);
-
- /*
- * Method: Doc_submitForm
- * Send the form data to a specified URL.
- * Interface Version:
- * 1
- * Implementation Required:
- * yes
- * Parameters:
- * pThis - Pointer to the interface structure itself
- * formData - Pointer to the data buffer to be sent.
- * length - The size,in bytes, of the buffer pointed by formData parameter.
- * URL - The URL to send to.
- * Return Value:
- * None.
- *
- */
- void (*Doc_submitForm)(struct _IPDF_JsPlatform* pThis,void* formData, int length, FPDF_WIDESTRING URL);
-
- /*
- * Method: Doc_gotoPage
- * Jump to a specified page.
- * Interface Version:
- * 1
- * Implementation Required:
- * yes
- * Parameters:
- * pThis - Pointer to the interface structure itself
- * nPageNum - The specified page number, zero for the first page.
- * Return Value:
- * None.
- *
- */
- void (*Doc_gotoPage)(struct _IPDF_JsPlatform* pThis, int nPageNum);
- /*
- * Method: Field_browse
- * Show a file selection dialog, and return the selected file path.
- * Interface Version:
- * 1
- * Implementation Required:
- * yes
- * Parameters:
- * pThis - Pointer to the interface structure itself.
- * filePath - Pointer to the data buffer to receive the file path.Can be NULL.
- * length - The length of the buffer, number of bytes. Can be 0.
- * Return Value:
- * Number of bytes the filePath consumes, including trailing zeros.
- * Comments:
- * The filePath shoule be always input in local encoding.
- */
- int (*Field_browse)(struct _IPDF_JsPlatform* pThis,void* filePath, int length);
-
- /**
- * pointer to FPDF_FORMFILLINFO interface.
- **/
- void* m_pFormfillinfo;
-
- /* Version 2. */
-
- /**
- * pointer to the v8::Isolate to use, or NULL to force PDFium to create one.
- **/
- void* m_isolate;
-
- /**
- * The embedder data slot to use in the v8::Isolate to store PDFium's
- * per-isolate data. The value needs to be between 0 and
- * v8::Internals::kNumIsolateDataLots (exclusive).
- */
- unsigned int m_v8EmbedderSlot;
+typedef struct _IPDF_JsPlatform {
+ /**
+ * Version number of the interface. Currently must be 2.
+ **/
+ int version;
+
+ /* Version 1. */
+
+ /**
+ * Method: app_alert
+ * pop up a dialog to show warning or hint.
+ * Interface Version:
+ * 1
+ * Implementation Required:
+ * yes
+ * Parameters:
+ * pThis - Pointer to the interface structure itself
+ * Msg - A string containing the message to be displayed.
+ * Title - The title of the dialog.
+ * Type - The stype of button group.
+ * 0-OK(default);
+ * 1-OK,Cancel;
+ * 2-Yes,NO;
+ * 3-Yes, NO, Cancel.
+ * nIcon - The Icon type.
+ * 0-Error(default);
+ * 1-Warning;
+ * 2-Question;
+ * 3-Status.
+ * Return Value:
+ * The return value could be the folowing type:
+ * 1-OK;
+ * 2-Cancel;
+ * 3-NO;
+ * 4-Yes;
+ */
+ int (*app_alert)(struct _IPDF_JsPlatform* pThis,
+ FPDF_WIDESTRING Msg,
+ FPDF_WIDESTRING Title,
+ int Type,
+ int Icon);
+
+ /**
+ * Method: app_beep
+ * Causes the system to play a sound.
+ * Interface Version:
+ * 1
+ * Implementation Required:
+ * yes
+ * Parameters:
+ * pThis - Pointer to the interface structure itself
+ * nType - The sound type.
+ * 0 - Error
+ * 1 - Warning
+ * 2 - Question
+ * 3 - Status
+ * 4 - Default (default value)
+ * Return Value:
+ * None
+ */
+ void (*app_beep)(struct _IPDF_JsPlatform* pThis, int nType);
+
+ /**
+ * Method: app_response
+ * Displays a dialog box containing a question and an entry field for
+ * the user to reply to the question.
+ * Interface Version:
+ * 1
+ * Implementation Required:
+ * yes
+ * Parameters:
+ * pThis - Pointer to the interface structure itself
+ * Question - The question to be posed to the user.
+ * Title - The title of the dialog box.
+ * Default - A default value for the answer to the question. If
+ * not specified, no default value is presented.
+ * cLabel - A short string to appear in front of and on the
+ * same line as the edit text field.
+ * bPassword - If true, indicates that the user's response should
+ * show as asterisks (*) or bullets (?) to mask the response, which might be
+ * sensitive information. The default is false.
+ * response - A string buffer allocated by SDK, to receive the
+ * user's response.
+ * length - The length of the buffer, number of bytes.
+ * Currently, It's always be 2048.
+ * Return Value:
+ * Number of bytes the complete user input would actually require, not
+ * including trailing zeros, regardless of the value of the length
+ * parameter or the presence of the response buffer.
+ * Comments:
+ * No matter on what platform, the response buffer should be always
+ * written using UTF-16LE encoding. If a response buffer is
+ * present and the size of the user input exceeds the capacity of the
+ * buffer as specified by the length parameter, only the
+ * first "length" bytes of the user input are to be written to the
+ * buffer.
+ */
+ int (*app_response)(struct _IPDF_JsPlatform* pThis,
+ FPDF_WIDESTRING Question,
+ FPDF_WIDESTRING Title,
+ FPDF_WIDESTRING Default,
+ FPDF_WIDESTRING cLabel,
+ FPDF_BOOL bPassword,
+ void* response,
+ int length);
+
+ /*
+ * Method: Doc_getFilePath
+ * Get the file path of the current document.
+ * Interface Version:
+ * 1
+ * Implementation Required:
+ * yes
+ * Parameters:
+ * pThis - Pointer to the interface structure itself
+ * filePath - The string buffer to receive the file path. Can be
+ * NULL.
+ * length - The length of the buffer, number of bytes. Can be
+ * 0.
+ * Return Value:
+ * Number of bytes the filePath consumes, including trailing zeros.
+ * Comments:
+ * The filePath should be always input in local encoding.
+ *
+ * The return value always indicated number of bytes required for the
+ * buffer, even when there is
+ * no buffer specified, or the buffer size is less then required. In this
+ * case, the buffer will not
+ * be modified.
+ */
+ int (*Doc_getFilePath)(struct _IPDF_JsPlatform* pThis,
+ void* filePath,
+ int length);
+
+ /*
+ * Method: Doc_mail
+ * Mails the data buffer as an attachment to all recipients, with or
+ * without user interaction.
+ * Interface Version:
+ * 1
+ * Implementation Required:
+ * yes
+ * Parameters:
+ * pThis - Pointer to the interface structure itself
+ * mailData - Pointer to the data buffer to be sent.Can be NULL.
+ * length - The size,in bytes, of the buffer pointed by
+ * mailData parameter.Can be 0.
+ * bUI - If true, the rest of the parameters are used in a
+ * compose-new-message window that is displayed to the user. If false, the cTo
+ * parameter is required and all others are optional.
+ * To - A semicolon-delimited list of recipients for the
+ * message.
+ * Subject - The subject of the message. The length limit is 64
+ * KB.
+ * CC - A semicolon-delimited list of CC recipients for
+ * the message.
+ * BCC - A semicolon-delimited list of BCC recipients for
+ * the message.
+ * Msg - The content of the message. The length limit is 64
+ * KB.
+ * Return Value:
+ * None.
+ * Comments:
+ * If the parameter mailData is NULL or length is 0, the current
+ * document will be mailed as an attachment to all recipients.
+ */
+ void (*Doc_mail)(struct _IPDF_JsPlatform* pThis,
+ void* mailData,
+ int length,
+ FPDF_BOOL bUI,
+ FPDF_WIDESTRING To,
+ FPDF_WIDESTRING Subject,
+ FPDF_WIDESTRING CC,
+ FPDF_WIDESTRING BCC,
+ FPDF_WIDESTRING Msg);
+
+ /*
+ * Method: Doc_print
+ * Prints all or a specific number of pages of the document.
+ * Interface Version:
+ * 1
+ * Implementation Required:
+ * yes
+ * Parameters:
+ * pThis - Pointer to the interface structure itself.
+ * bUI - If true, will cause a UI to be presented to the
+ * user to obtain printing information and confirm the action.
+ * nStart - A 0-based index that defines the start of an
+ * inclusive range of pages.
+ * nEnd - A 0-based index that defines the end of an
+ * inclusive page range.
+ * bSilent - If true, suppresses the cancel dialog box while
+ * the document is printing. The default is false.
+ * bShrinkToFit - If true, the page is shrunk (if necessary) to
+ * fit within the imageable area of the printed page.
+ * bPrintAsImage - If true, print pages as an image.
+ * bReverse - If true, print from nEnd to nStart.
+ * bAnnotations - If true (the default), annotations are
+ * printed.
+ */
+ void (*Doc_print)(struct _IPDF_JsPlatform* pThis,
+ FPDF_BOOL bUI,
+ int nStart,
+ int nEnd,
+ FPDF_BOOL bSilent,
+ FPDF_BOOL bShrinkToFit,
+ FPDF_BOOL bPrintAsImage,
+ FPDF_BOOL bReverse,
+ FPDF_BOOL bAnnotations);
+
+ /*
+ * Method: Doc_submitForm
+ * Send the form data to a specified URL.
+ * Interface Version:
+ * 1
+ * Implementation Required:
+ * yes
+ * Parameters:
+ * pThis - Pointer to the interface structure itself
+ * formData - Pointer to the data buffer to be sent.
+ * length - The size,in bytes, of the buffer pointed by
+ * formData parameter.
+ * URL - The URL to send to.
+ * Return Value:
+ * None.
+ *
+ */
+ void (*Doc_submitForm)(struct _IPDF_JsPlatform* pThis,
+ void* formData,
+ int length,
+ FPDF_WIDESTRING URL);
+
+ /*
+ * Method: Doc_gotoPage
+ * Jump to a specified page.
+ * Interface Version:
+ * 1
+ * Implementation Required:
+ * yes
+ * Parameters:
+ * pThis - Pointer to the interface structure itself
+ * nPageNum - The specified page number, zero for the first
+ * page.
+ * Return Value:
+ * None.
+ *
+ */
+ void (*Doc_gotoPage)(struct _IPDF_JsPlatform* pThis, int nPageNum);
+ /*
+ * Method: Field_browse
+ * Show a file selection dialog, and return the selected file path.
+ * Interface Version:
+ * 1
+ * Implementation Required:
+ * yes
+ * Parameters:
+ * pThis - Pointer to the interface structure itself.
+ * filePath - Pointer to the data buffer to receive the file
+ * path.Can be NULL.
+ * length - The length of the buffer, number of bytes. Can be
+ * 0.
+ * Return Value:
+ * Number of bytes the filePath consumes, including trailing zeros.
+ * Comments:
+ * The filePath shoule be always input in local encoding.
+ */
+ int (*Field_browse)(struct _IPDF_JsPlatform* pThis,
+ void* filePath,
+ int length);
+
+ /**
+ * pointer to FPDF_FORMFILLINFO interface.
+ **/
+ void* m_pFormfillinfo;
+
+ /* Version 2. */
+
+ /**
+ * pointer to the v8::Isolate to use, or NULL to force PDFium to create one.
+ **/
+ void* m_isolate;
+
+ /**
+ * The embedder data slot to use in the v8::Isolate to store PDFium's
+ * per-isolate data. The value needs to be between 0 and
+ * v8::Internals::kNumIsolateDataLots (exclusive).
+ */
+ unsigned int m_v8EmbedderSlot;
} IPDF_JSPLATFORM;
// Flags for Cursor type
-#define FXCT_ARROW 0
-#define FXCT_NESW 1
-#define FXCT_NWSE 2
-#define FXCT_VBEAM 3
-#define FXCT_HBEAM 4
-#define FXCT_HAND 5
+#define FXCT_ARROW 0
+#define FXCT_NESW 1
+#define FXCT_NWSE 2
+#define FXCT_VBEAM 3
+#define FXCT_HBEAM 4
+#define FXCT_HAND 5
/**
- * Declares of a pointer type to the callback function for the FFI_SetTimer method.
+ * Declares of a pointer type to the callback function for the FFI_SetTimer
+ *method.
* Parameters:
* idEvent - Identifier of the timer.
* Return value:
* None.
**/
-typedef void (*TimerCallback)(int idEvent);
+typedef void (*TimerCallback)(int idEvent);
/**
* Declares of a struct type to the local system time.
**/
-typedef struct _FPDF_SYSTEMTIME
-{
- unsigned short wYear; /* years since 1900 */
- unsigned short wMonth; /* months since January - [0,11] */
- unsigned short wDayOfWeek; /* days since Sunday - [0,6] */
- unsigned short wDay; /* day of the month - [1,31] */
- unsigned short wHour; /* hours since midnight - [0,23] */
- unsigned short wMinute; /* minutes after the hour - [0,59] */
- unsigned short wSecond; /* seconds after the minute - [0,59] */
- unsigned short wMilliseconds; /* milliseconds after the second - [0,999] */
-}FPDF_SYSTEMTIME;
-
-
-typedef struct _FPDF_FORMFILLINFO
-{
- /**
- * Version number of the interface. Currently must be 1.
- **/
- int version;
-
- /**
- * Method: Release
- * Give implementation a chance to release any data after the interface is no longer used
- * Interface Version:
- * 1
- * Implementation Required:
- * No
- * Comments:
- * Called by Foxit SDK during the final cleanup process.
- * Parameters:
- * pThis - Pointer to the interface structure itself
- * Return Value:
- * None
- */
-
- void (*Release)(struct _FPDF_FORMFILLINFO* pThis);
-
- /**
- * Method: FFI_Invalidate
- * Invalidate the client area within the specified rectangle.
- * Interface Version:
- * 1
- * Implementation Required:
- * yes
- * Parameters:
- * pThis - Pointer to the interface structure itself.
- * page - Handle to the page. Returned by FPDF_LoadPage function.
- * left - Left position of the client area in PDF page coordinate.
- * top - Top position of the client area in PDF page coordinate.
- * right - Right position of the client area in PDF page coordinate.
- * bottom - Bottom position of the client area in PDF page coordinate.
- * Return Value:
- * None.
- *
- *comments:
- * All positions are measured in PDF "user space".
- * Implementation should call FPDF_RenderPageBitmap() function for repainting a specified page area.
- */
- void (*FFI_Invalidate)(struct _FPDF_FORMFILLINFO* pThis,FPDF_PAGE page, double left, double top, double right, double bottom);
-
- /**
- * Method: FFI_OutputSelectedRect
- * When user is taking the mouse to select texts on a form field, this callback function will keep
- * returning the selected areas to the implementation.
- *
- * Interface Version:
- * 1
- * Implementation Required:
- * No
- * Parameters:
- * pThis - Pointer to the interface structure itself.
- * page - Handle to the page. Returned by FPDF_LoadPage function.
- * left - Left position of the client area in PDF page coordinate.
- * top - Top position of the client area in PDF page coordinate.
- * right - Right position of the client area in PDF page coordinate.
- * bottom - Bottom position of the client area in PDF page coordinate.
- * Return Value:
- * None.
- *
- * comments:
- * This CALLBACK function is useful for implementing special text selection effect. Implementation should
- * first records the returned rectangles, then draw them one by one at the painting period, last,remove all
- * the recorded rectangles when finish painting.
- */
- void (*FFI_OutputSelectedRect)(struct _FPDF_FORMFILLINFO* pThis,FPDF_PAGE page, double left, double top, double right, double bottom);
-
- /**
- * Method: FFI_SetCursor
- * Set the Cursor shape.
- * Interface Version:
- * 1
- * Implementation Required:
- * yes
- * Parameters:
- * pThis - Pointer to the interface structure itself.
- * nCursorType - Cursor type. see Flags for Cursor type for the details.
- * Return value:
- * None.
- * */
- void (*FFI_SetCursor)(struct _FPDF_FORMFILLINFO* pThis, int nCursorType);
-
- /**
- * Method: FFI_SetTimer
- * This method installs a system timer. A time-out value is specified,
- * and every time a time-out occurs, the system passes a message to
- * the TimerProc callback function.
- * Interface Version:
- * 1
- * Implementation Required:
- * yes
- * Parameters:
- * pThis - Pointer to the interface structure itself.
- * uElapse - Specifies the time-out value, in milliseconds.
- * lpTimerFunc - A pointer to the callback function-TimerCallback.
- * Return value:
- * The timer identifier of the new timer if the function is successful.
- * An application passes this value to the FFI_KillTimer method to kill
- * the timer. Nonzero if it is successful; otherwise, it is zero.
- * */
- int (*FFI_SetTimer)(struct _FPDF_FORMFILLINFO* pThis, int uElapse, TimerCallback lpTimerFunc);
-
- /**
- * Method: FFI_KillTimer
- * This method kills the timer event identified by nIDEvent, set by an earlier call to FFI_SetTimer.
- * Interface Version:
- * 1
- * Implementation Required:
- * yes
- * Parameters:
- * pThis - Pointer to the interface structure itself.
- * nTimerID - The timer ID return by FFI_SetTimer function.
- * Return value:
- * None.
- * */
- void (*FFI_KillTimer)(struct _FPDF_FORMFILLINFO* pThis, int nTimerID);
-
-
- /**
- * Method: FFI_GetLocalTime
- * This method receives the current local time on the system.
- * Interface Version:
- * 1
- * Implementation Required:
- * yes
- * Parameters:
- * pThis - Pointer to the interface structure itself.
- * Return value:
- * None.
- * */
- FPDF_SYSTEMTIME (*FFI_GetLocalTime)(struct _FPDF_FORMFILLINFO* pThis);
-
- /**
- * Method: FFI_OnChange
- * This method will be invoked to notify implementation when the value of any FormField on the document had been changed.
- * Interface Version:
- * 1
- * Implementation Required:
- * no
- * Parameters:
- * pThis - Pointer to the interface structure itself.
- * Return value:
- * None.
- * */
- void (*FFI_OnChange)(struct _FPDF_FORMFILLINFO* pThis);
-
- /**
- * Method: FFI_GetPage
- * This method receives the page pointer associated with a specified page index.
- * Interface Version:
- * 1
- * Implementation Required:
- * yes
- * Parameters:
- * pThis - Pointer to the interface structure itself.
- * document - Handle to document. Returned by FPDF_LoadDocument function.
- * nPageIndex - Index number of the page. 0 for the first page.
- * Return value:
- * Handle to the page. Returned by FPDF_LoadPage function.
- * Comments:
- * In some cases, the document-level JavaScript action may refer to a page which hadn't been loaded yet.
- * To successfully run the javascript action, implementation need to load the page for SDK.
- * */
- FPDF_PAGE (*FFI_GetPage)(struct _FPDF_FORMFILLINFO* pThis, FPDF_DOCUMENT document, int nPageIndex);
-
- /**
- * Method: FFI_GetCurrentPage
- * This method receives the current page pointer.
- * Interface Version:
- * 1
- * Implementation Required:
- * yes
- * Parameters:
- * pThis - Pointer to the interface structure itself.
- * document - Handle to document. Returned by FPDF_LoadDocument function.
- * Return value:
- * Handle to the page. Returned by FPDF_LoadPage function.
- * */
- FPDF_PAGE (*FFI_GetCurrentPage)(struct _FPDF_FORMFILLINFO* pThis, FPDF_DOCUMENT document);
-
- /**
- * Method: FFI_GetRotation
- * This method receives currently rotation of the page view.
- * Interface Version:
- * 1
- * Implementation Required:
- * yes
- * Parameters:
- * pThis - Pointer to the interface structure itself.
- * page - Handle to page. Returned by FPDF_LoadPage function.
- * Return value:
- * The page rotation. Should be 0(0 degree),1(90 degree),2(180 degree),3(270 degree), in a clockwise direction.
- * */
- int (*FFI_GetRotation)(struct _FPDF_FORMFILLINFO* pThis, FPDF_PAGE page);
-
- /**
- * Method: FFI_ExecuteNamedAction
- * This method will execute an named action.
- * Interface Version:
- * 1
- * Implementation Required:
- * yes
- * Parameters:
- * pThis - Pointer to the interface structure itself.
- * namedAction - A byte string which indicates the named action, terminated by 0.
- * Return value:
- * None.
- * Comments:
- * See the named actions description of <<PDF Reference, version 1.7>> for more details.
- * */
- void (*FFI_ExecuteNamedAction)(struct _FPDF_FORMFILLINFO* pThis, FPDF_BYTESTRING namedAction);
- /**
- * @brief This method will be called when a text field is getting or losing a focus.
- *
- * @param[in] pThis Pointer to the interface structure itself.
- * @param[in] value The string value of the form field, in UTF-16LE format.
- * @param[in] valueLen The length of the string value, number of characters (not bytes).
- * @param[in] is_focus True if the form field is getting a focus, False for losing a focus.
- *
- * @return None.
- *
- * @note Currently,only support text field and combobox field.
- * */
- void (*FFI_SetTextFieldFocus)(struct _FPDF_FORMFILLINFO* pThis, FPDF_WIDESTRING value, FPDF_DWORD valueLen, FPDF_BOOL is_focus);
-
-
- /**
- * Method: FFI_DoURIAction
- * This action resolves to a uniform resource identifier.
- * Interface Version:
- * 1
- * Implementation Required:
- * No
- * Parameters:
- * pThis - Pointer to the interface structure itself.
- * bsURI - A byte string which indicates the uniform resource identifier, terminated by 0.
- * Return value:
- * None.
- * Comments:
- * See the URI actions description of <<PDF Reference, version 1.7>> for more details.
- * */
- void (*FFI_DoURIAction)(struct _FPDF_FORMFILLINFO* pThis, FPDF_BYTESTRING bsURI);
-
- /**
- * Method: FFI_DoGoToAction
- * This action changes the view to a specified destination.
- * Interface Version:
- * 1
- * Implementation Required:
- * No
- * Parameters:
- * pThis - Pointer to the interface structure itself.
- * nPageIndex - The index of the PDF page.
- * zoomMode - The zoom mode for viewing page.See Macros "PDFZOOM_XXX" defined in "fpdfdoc.h".
- * fPosArray - The float array which carries the position info.
- * sizeofArray - The size of float array.
- * Return value:
- * None.
- * Comments:
- * See the Destinations description of <<PDF Reference, version 1.7>> in 8.2.1 for more details.
- **/
- void (*FFI_DoGoToAction)(struct _FPDF_FORMFILLINFO* pThis, int nPageIndex, int zoomMode, float* fPosArray, int sizeofArray);
- /**
- * pointer to IPDF_JSPLATFORM interface
- **/
- IPDF_JSPLATFORM* m_pJsPlatform;
+typedef struct _FPDF_SYSTEMTIME {
+ unsigned short wYear; /* years since 1900 */
+ unsigned short wMonth; /* months since January - [0,11] */
+ unsigned short wDayOfWeek; /* days since Sunday - [0,6] */
+ unsigned short wDay; /* day of the month - [1,31] */
+ unsigned short wHour; /* hours since midnight - [0,23] */
+ unsigned short wMinute; /* minutes after the hour - [0,59] */
+ unsigned short wSecond; /* seconds after the minute - [0,59] */
+ unsigned short wMilliseconds; /* milliseconds after the second - [0,999] */
+} FPDF_SYSTEMTIME;
+
+typedef struct _FPDF_FORMFILLINFO {
+ /**
+ * Version number of the interface. Currently must be 1.
+ **/
+ int version;
+
+ /**
+*Method: Release
+* Give implementation a chance to release any data after the interface
+* is no longer used
+*Interface Version:
+* 1
+*Implementation Required:
+* No
+*Comments:
+* Called by Foxit SDK during the final cleanup process.
+*Parameters:
+* pThis - Pointer to the interface structure itself
+*Return Value:
+* None
+*/
+
+ void (*Release)(struct _FPDF_FORMFILLINFO* pThis);
+
+ /**
+ * Method: FFI_Invalidate
+ * Invalidate the client area within the specified rectangle.
+ * Interface Version:
+ * 1
+ * Implementation Required:
+ * yes
+ * Parameters:
+ * pThis - Pointer to the interface structure itself.
+ * page - Handle to the page. Returned by FPDF_LoadPage
+ *function.
+ * left - Left position of the client area in PDF page
+ *coordinate.
+ * top - Top position of the client area in PDF page
+ *coordinate.
+ * right - Right position of the client area in PDF page
+ *coordinate.
+ * bottom - Bottom position of the client area in PDF page
+ *coordinate.
+ * Return Value:
+ * None.
+ *
+ *comments:
+ * All positions are measured in PDF "user space".
+ * Implementation should call FPDF_RenderPageBitmap() function for
+ *repainting a specified page area.
+ */
+ void (*FFI_Invalidate)(struct _FPDF_FORMFILLINFO* pThis,
+ FPDF_PAGE page,
+ double left,
+ double top,
+ double right,
+ double bottom);
+
+ /**
+ * Method: FFI_OutputSelectedRect
+ * When user is taking the mouse to select texts on a form field,
+ * this callback function will keep
+ * returning the selected areas to the implementation.
+ *
+ * Interface Version:
+ * 1
+ * Implementation Required:
+ * No
+ * Parameters:
+ * pThis - Pointer to the interface structure itself.
+ * page - Handle to the page. Returned by FPDF_LoadPage
+ * function.
+ * left - Left position of the client area in PDF page
+ * coordinate.
+ * top - Top position of the client area in PDF page
+ * coordinate.
+ * right - Right position of the client area in PDF page
+ * coordinate.
+ * bottom - Bottom position of the client area in PDF page
+ * coordinate.
+ * Return Value:
+ * None.
+ *
+ * comments:
+ * This CALLBACK function is useful for implementing special text
+ * selection effect. Implementation should
+ * first records the returned rectangles, then draw them one by one
+ * at the painting period, last,remove all
+ * the recorded rectangles when finish painting.
+ */
+ void (*FFI_OutputSelectedRect)(struct _FPDF_FORMFILLINFO* pThis,
+ FPDF_PAGE page,
+ double left,
+ double top,
+ double right,
+ double bottom);
+
+ /**
+ * Method: FFI_SetCursor
+ * Set the Cursor shape.
+ * Interface Version:
+ * 1
+ * Implementation Required:
+ * yes
+ * Parameters:
+ * pThis - Pointer to the interface structure itself.
+ * nCursorType - Cursor type. see Flags for Cursor type for the
+ * details.
+ * Return value:
+ * None.
+ * */
+ void (*FFI_SetCursor)(struct _FPDF_FORMFILLINFO* pThis, int nCursorType);
+
+ /**
+ * Method: FFI_SetTimer
+ * This method installs a system timer. A time-out value is
+ * specified,
+ * and every time a time-out occurs, the system passes a message to
+ * the TimerProc callback function.
+ * Interface Version:
+ * 1
+ * Implementation Required:
+ * yes
+ * Parameters:
+ * pThis - Pointer to the interface structure itself.
+ * uElapse - Specifies the time-out value, in milliseconds.
+ * lpTimerFunc - A pointer to the callback function-TimerCallback.
+ * Return value:
+ * The timer identifier of the new timer if the function is successful.
+ * An application passes this value to the FFI_KillTimer method to kill
+ * the timer. Nonzero if it is successful; otherwise, it is zero.
+ * */
+ int (*FFI_SetTimer)(struct _FPDF_FORMFILLINFO* pThis,
+ int uElapse,
+ TimerCallback lpTimerFunc);
+
+ /**
+ * Method: FFI_KillTimer
+ * This method kills the timer event identified by nIDEvent, set by
+ * an earlier call to FFI_SetTimer.
+ * Interface Version:
+ * 1
+ * Implementation Required:
+ * yes
+ * Parameters:
+ * pThis - Pointer to the interface structure itself.
+ * nTimerID - The timer ID return by FFI_SetTimer function.
+ * Return value:
+ * None.
+ * */
+ void (*FFI_KillTimer)(struct _FPDF_FORMFILLINFO* pThis, int nTimerID);
+
+ /**
+ * Method: FFI_GetLocalTime
+ * This method receives the current local time on the system.
+ * Interface Version:
+ * 1
+ * Implementation Required:
+ * yes
+ * Parameters:
+ * pThis - Pointer to the interface structure itself.
+ * Return value:
+ * None.
+ * */
+ FPDF_SYSTEMTIME (*FFI_GetLocalTime)(struct _FPDF_FORMFILLINFO* pThis);
+
+ /**
+ * Method: FFI_OnChange
+ * This method will be invoked to notify implementation when the
+ * value of any FormField on the document had been changed.
+ * Interface Version:
+ * 1
+ * Implementation Required:
+ * no
+ * Parameters:
+ * pThis - Pointer to the interface structure itself.
+ * Return value:
+ * None.
+ * */
+ void (*FFI_OnChange)(struct _FPDF_FORMFILLINFO* pThis);
+
+ /**
+ * Method: FFI_GetPage
+ * This method receives the page pointer associated with a specified
+ * page index.
+ * Interface Version:
+ * 1
+ * Implementation Required:
+ * yes
+ * Parameters:
+ * pThis - Pointer to the interface structure itself.
+ * document - Handle to document. Returned by FPDF_LoadDocument
+ * function.
+ * nPageIndex - Index number of the page. 0 for the first page.
+ * Return value:
+ * Handle to the page. Returned by FPDF_LoadPage function.
+ * Comments:
+ * In some cases, the document-level JavaScript action may refer to a
+ * page which hadn't been loaded yet.
+ * To successfully run the javascript action, implementation need to load
+ * the page for SDK.
+ * */
+ FPDF_PAGE (*FFI_GetPage)(struct _FPDF_FORMFILLINFO* pThis, FPDF_DOCUMENT document, int nPageIndex);
+
+ /**
+ * Method: FFI_GetCurrentPage
+ * This method receives the current page pointer.
+ * Interface Version:
+ * 1
+ * Implementation Required:
+ * yes
+ * Parameters:
+ * pThis - Pointer to the interface structure itself.
+ * document - Handle to document. Returned by FPDF_LoadDocument
+ * function.
+ * Return value:
+ * Handle to the page. Returned by FPDF_LoadPage function.
+ * */
+ FPDF_PAGE (*FFI_GetCurrentPage)(struct _FPDF_FORMFILLINFO* pThis, FPDF_DOCUMENT document);
+
+ /**
+ * Method: FFI_GetRotation
+ * This method receives currently rotation of the page view.
+ * Interface Version:
+ * 1
+ * Implementation Required:
+ * yes
+ * Parameters:
+ * pThis - Pointer to the interface structure itself.
+ * page - Handle to page. Returned by FPDF_LoadPage function.
+ * Return value:
+ * The page rotation. Should be 0(0 degree),1(90 degree),2(180
+ * degree),3(270 degree), in a clockwise direction.
+ * */
+ int (*FFI_GetRotation)(struct _FPDF_FORMFILLINFO* pThis, FPDF_PAGE page);
+
+ /**
+ * Method: FFI_ExecuteNamedAction
+ * This method will execute an named action.
+ * Interface Version:
+ * 1
+ * Implementation Required:
+ * yes
+ * Parameters:
+ * pThis - Pointer to the interface structure itself.
+ * namedAction - A byte string which indicates the named action,
+ * terminated by 0.
+ * Return value:
+ * None.
+ * Comments:
+ * See the named actions description of <<PDF Reference, version 1.7>>
+ * for more details.
+ * */
+ void (*FFI_ExecuteNamedAction)(struct _FPDF_FORMFILLINFO* pThis,
+ FPDF_BYTESTRING namedAction);
+ /**
+ * @brief This method will be called when a text field is getting or losing a
+ * focus.
+ *
+ * @param[in] pThis Pointer to the interface structure itself.
+ * @param[in] value The string value of the form field, in UTF-16LE
+ * format.
+ * @param[in] valueLen The length of the string value, number of characters
+ * (not bytes).
+ * @param[in] is_focus True if the form field is getting a focus, False for
+ * losing a focus.
+ *
+ * @return None.
+ *
+ * @note Currently,only support text field and combobox field.
+ * */
+ void (*FFI_SetTextFieldFocus)(struct _FPDF_FORMFILLINFO* pThis,
+ FPDF_WIDESTRING value,
+ FPDF_DWORD valueLen,
+ FPDF_BOOL is_focus);
+
+ /**
+ * Method: FFI_DoURIAction
+ * This action resolves to a uniform resource identifier.
+ * Interface Version:
+ * 1
+ * Implementation Required:
+ * No
+ * Parameters:
+ * pThis - Pointer to the interface structure itself.
+ * bsURI - A byte string which indicates the uniform resource
+ * identifier, terminated by 0.
+ * Return value:
+ * None.
+ * Comments:
+ * See the URI actions description of <<PDF Reference, version 1.7>> for
+ * more details.
+ * */
+ void (*FFI_DoURIAction)(struct _FPDF_FORMFILLINFO* pThis,
+ FPDF_BYTESTRING bsURI);
+
+ /**
+ * Method: FFI_DoGoToAction
+ * This action changes the view to a specified destination.
+ * Interface Version:
+ * 1
+ * Implementation Required:
+ * No
+ * Parameters:
+ * pThis - Pointer to the interface structure itself.
+ * nPageIndex - The index of the PDF page.
+ * zoomMode - The zoom mode for viewing page.See Macros
+ *"PDFZOOM_XXX" defined in "fpdfdoc.h".
+ * fPosArray - The float array which carries the position info.
+ * sizeofArray - The size of float array.
+ * Return value:
+ * None.
+ * Comments:
+ * See the Destinations description of <<PDF Reference, version 1.7>> in
+ *8.2.1 for more details.
+ **/
+ void (*FFI_DoGoToAction)(struct _FPDF_FORMFILLINFO* pThis,
+ int nPageIndex,
+ int zoomMode,
+ float* fPosArray,
+ int sizeofArray);
+ /**
+ * pointer to IPDF_JSPLATFORM interface
+ **/
+ IPDF_JSPLATFORM* m_pJsPlatform;
} FPDF_FORMFILLINFO;
-
-
/**
* Function: FPDFDOC_InitFormFillEnvironment
* Init form fill environment.
* Comments:
* This function should be called before any form fill operation.
* Parameters:
- * document - Handle to document. Returned by FPDF_LoadDocument function.
+ * document - Handle to document. Returned by
+ *FPDF_LoadDocument function.
* pFormFillInfo - Pointer to a FPDF_FORMFILLINFO structure.
* Return Value:
* Return handler to the form fill module. NULL means fails.
**/
-DLLEXPORT FPDF_FORMHANDLE STDCALL FPDFDOC_InitFormFillEnvironment(FPDF_DOCUMENT document, FPDF_FORMFILLINFO* formInfo);
+DLLEXPORT FPDF_FORMHANDLE STDCALL
+FPDFDOC_InitFormFillEnvironment(FPDF_DOCUMENT document,
+ FPDF_FORMFILLINFO* formInfo);
/**
* Function: FPDFDOC_ExitFormFillEnvironment
* Exit form fill environment.
* Parameters:
- * hHandle - Handle to the form fill module. Returned by FPDFDOC_InitFormFillEnvironment.
+ * hHandle - Handle to the form fill module. Returned by
+ *FPDFDOC_InitFormFillEnvironment.
* Return Value:
* NULL.
**/
@@ -575,246 +695,343 @@ DLLEXPORT void STDCALL FPDFDOC_ExitFormFillEnvironment(FPDF_FORMHANDLE hHandle);
/**
* Function: FORM_OnAfterLoadPage
- * This method is required for implementing all the form related functions. Should be invoked after user
- * successfully loaded a PDF page, and method FPDFDOC_InitFormFillEnvironment had been invoked.
+ * This method is required for implementing all the form related
+ *functions. Should be invoked after user
+ * successfully loaded a PDF page, and method
+ *FPDFDOC_InitFormFillEnvironment had been invoked.
* Parameters:
- * hHandle - Handle to the form fill module. Returned by FPDFDOC_InitFormFillEnvironment.
+ * hHandle - Handle to the form fill module. Returned by
+ *FPDFDOC_InitFormFillEnvironment.
* Return Value:
* NONE.
**/
-DLLEXPORT void STDCALL FORM_OnAfterLoadPage(FPDF_PAGE page, FPDF_FORMHANDLE hHandle);
+DLLEXPORT void STDCALL FORM_OnAfterLoadPage(FPDF_PAGE page,
+ FPDF_FORMHANDLE hHandle);
/**
* Function: FORM_OnBeforeClosePage
- * This method is required for implementing all the form related functions. Should be invoked before user
+ * This method is required for implementing all the form related
+ *functions. Should be invoked before user
* close the PDF page.
* Parameters:
- * page - Handle to the page. Returned by FPDF_LoadPage function.
- * hHandle - Handle to the form fill module. Returned by FPDFDOC_InitFormFillEnvironment.
+ * page - Handle to the page. Returned by FPDF_LoadPage
+ *function.
+ * hHandle - Handle to the form fill module. Returned by
+ *FPDFDOC_InitFormFillEnvironment.
* Return Value:
* NONE.
**/
-DLLEXPORT void STDCALL FORM_OnBeforeClosePage(FPDF_PAGE page, FPDF_FORMHANDLE hHandle);
+DLLEXPORT void STDCALL FORM_OnBeforeClosePage(FPDF_PAGE page,
+ FPDF_FORMHANDLE hHandle);
/**
* Function: FORM_DoDocumentJSAction
-* This method is required for performing Document-level JavaScript action. It should be invoked after the PDF document
+* This method is required for performing Document-level JavaScript
+*action. It should be invoked after the PDF document
* had been loaded.
* Parameters:
-* hHandle - Handle to the form fill module. Returned by FPDFDOC_InitFormFillEnvironment.
+* hHandle - Handle to the form fill module. Returned by
+*FPDFDOC_InitFormFillEnvironment.
* Return Value:
* NONE
* Comments:
-* If there is Document-level JavaScript action embedded in the document, this method will execute the javascript action;
+* If there is Document-level JavaScript action embedded in the
+*document, this method will execute the javascript action;
* otherwise, the method will do nothing.
**/
DLLEXPORT void STDCALL FORM_DoDocumentJSAction(FPDF_FORMHANDLE hHandle);
-
/**
* Function: FORM_DoDocumentOpenAction
-* This method is required for performing open-action when the document is opened.
+* This method is required for performing open-action when the document
+*is opened.
* Parameters:
-* hHandle - Handle to the form fill module. Returned by FPDFDOC_InitFormFillEnvironment.
+* hHandle - Handle to the form fill module. Returned by
+*FPDFDOC_InitFormFillEnvironment.
* Return Value:
* NONE
* Comments:
-* This method will do nothing if there is no open-actions embedded in the document.
+* This method will do nothing if there is no open-actions embedded in
+*the document.
**/
DLLEXPORT void STDCALL FORM_DoDocumentOpenAction(FPDF_FORMHANDLE hHandle);
-
// additional actions type of document.
-#define FPDFDOC_AACTION_WC 0x10 //WC, before closing document, JavaScript action.
-#define FPDFDOC_AACTION_WS 0x11 //WS, before saving document, JavaScript action.
-#define FPDFDOC_AACTION_DS 0x12 //DS, after saving document, JavaScript action.
-#define FPDFDOC_AACTION_WP 0x13 //WP, before printing document, JavaScript action.
-#define FPDFDOC_AACTION_DP 0x14 //DP, after printing document, JavaScript action.
+#define FPDFDOC_AACTION_WC \
+ 0x10 // WC, before closing document, JavaScript action.
+#define FPDFDOC_AACTION_WS \
+ 0x11 // WS, before saving document, JavaScript action.
+#define FPDFDOC_AACTION_DS 0x12 // DS, after saving document, JavaScript
+ // action.
+#define FPDFDOC_AACTION_WP \
+ 0x13 // WP, before printing document, JavaScript action.
+#define FPDFDOC_AACTION_DP \
+ 0x14 // DP, after printing document, JavaScript action.
/**
* Function: FORM_DoDocumentAAction
-* This method is required for performing the document's additional-action.
+* This method is required for performing the document's
+*additional-action.
* Parameters:
-* hHandle - Handle to the form fill module. Returned by FPDFDOC_InitFormFillEnvironment.
-* aaType - The type of the additional-actions which defined above.
+* hHandle - Handle to the form fill module. Returned by
+*FPDFDOC_InitFormFillEnvironment.
+* aaType - The type of the additional-actions which defined
+*above.
* Return Value:
* NONE
* Comments:
-* This method will do nothing if there is no document additional-action corresponding to the specified aaType.
+* This method will do nothing if there is no document
+*additional-action corresponding to the specified aaType.
**/
-DLLEXPORT void STDCALL FORM_DoDocumentAAction(FPDF_FORMHANDLE hHandle, int aaType);
+DLLEXPORT void STDCALL FORM_DoDocumentAAction(FPDF_FORMHANDLE hHandle,
+ int aaType);
// Additional-action types of page object
-#define FPDFPAGE_AACTION_OPEN 0 // /O -- An action to be performed when the page is opened
-#define FPDFPAGE_AACTION_CLOSE 1 // /C -- An action to be performed when the page is closed
+#define FPDFPAGE_AACTION_OPEN \
+ 0 // /O -- An action to be performed when the page is opened
+#define FPDFPAGE_AACTION_CLOSE \
+ 1 // /C -- An action to be performed when the page is closed
/**
* Function: FORM_DoPageAAction
-* This method is required for performing the page object's additional-action when opened or closed.
+* This method is required for performing the page object's
+*additional-action when opened or closed.
* Parameters:
-* page - Handle to the page. Returned by FPDF_LoadPage function.
-* hHandle - Handle to the form fill module. Returned by FPDFDOC_InitFormFillEnvironment.
-* aaType - The type of the page object's additional-actions which defined above.
+* page - Handle to the page. Returned by FPDF_LoadPage
+*function.
+* hHandle - Handle to the form fill module. Returned by
+*FPDFDOC_InitFormFillEnvironment.
+* aaType - The type of the page object's additional-actions
+*which defined above.
* Return Value:
* NONE
* Comments:
-* This method will do nothing if no additional-action corresponding to the specified aaType exists.
+* This method will do nothing if no additional-action corresponding to
+*the specified aaType exists.
**/
-DLLEXPORT void STDCALL FORM_DoPageAAction(FPDF_PAGE page, FPDF_FORMHANDLE hHandle, int aaType);
+DLLEXPORT void STDCALL FORM_DoPageAAction(FPDF_PAGE page,
+ FPDF_FORMHANDLE hHandle,
+ int aaType);
/**
* Function: FORM_OnMouseMove
* You can call this member function when the mouse cursor moves.
* Parameters:
- * hHandle - Handle to the form fill module. Returned by FPDFDOC_InitFormFillEnvironment.
- * page - Handle to the page. Returned by FPDF_LoadPage function.
+ * hHandle - Handle to the form fill module. Returned by
+ *FPDFDOC_InitFormFillEnvironment.
+ * page - Handle to the page. Returned by FPDF_LoadPage
+ *function.
* modifier - Indicates whether various virtual keys are down.
- * page_x - Specifies the x-coordinate of the cursor in PDF user space.
- * page_y - Specifies the y-coordinate of the cursor in PDF user space.
+ * page_x - Specifies the x-coordinate of the cursor in PDF user
+ *space.
+ * page_y - Specifies the y-coordinate of the cursor in PDF user
+ *space.
* Return Value:
* TRUE indicates success; otherwise false.
**/
-DLLEXPORT FPDF_BOOL STDCALL FORM_OnMouseMove(FPDF_FORMHANDLE hHandle,FPDF_PAGE page, int modifier, double page_x, double page_y);
+DLLEXPORT FPDF_BOOL STDCALL FORM_OnMouseMove(FPDF_FORMHANDLE hHandle,
+ FPDF_PAGE page,
+ int modifier,
+ double page_x,
+ double page_y);
/**
* Function: FORM_OnLButtonDown
- * You can call this member function when the user presses the left mouse button.
+ * You can call this member function when the user presses the left
+ *mouse button.
* Parameters:
- * hHandle - Handle to the form fill module. Returned by FPDFDOC_InitFormFillEnvironment.
- * page - Handle to the page. Returned by FPDF_LoadPage function.
+ * hHandle - Handle to the form fill module. Returned by
+ *FPDFDOC_InitFormFillEnvironment.
+ * page - Handle to the page. Returned by FPDF_LoadPage
+ *function.
* modifier - Indicates whether various virtual keys are down.
- * page_x - Specifies the x-coordinate of the cursor in PDF user space.
- * page_y - Specifies the y-coordinate of the cursor in PDF user space.
+ * page_x - Specifies the x-coordinate of the cursor in PDF user
+ *space.
+ * page_y - Specifies the y-coordinate of the cursor in PDF user
+ *space.
* Return Value:
* TRUE indicates success; otherwise false.
**/
-DLLEXPORT FPDF_BOOL STDCALL FORM_OnLButtonDown(FPDF_FORMHANDLE hHandle,FPDF_PAGE page, int modifier, double page_x, double page_y);
+DLLEXPORT FPDF_BOOL STDCALL FORM_OnLButtonDown(FPDF_FORMHANDLE hHandle,
+ FPDF_PAGE page,
+ int modifier,
+ double page_x,
+ double page_y);
/**
* Function: FORM_OnLButtonUp
- * You can call this member function when the user releases the left mouse button.
+ * You can call this member function when the user releases the left
+ *mouse button.
* Parameters:
- * hHandle - Handle to the form fill module. Returned by FPDFDOC_InitFormFillEnvironment.
- * page - Handle to the page. Returned by FPDF_LoadPage function.
+ * hHandle - Handle to the form fill module. Returned by
+ *FPDFDOC_InitFormFillEnvironment.
+ * page - Handle to the page. Returned by FPDF_LoadPage
+ *function.
* modifier - Indicates whether various virtual keys are down.
* page_x - Specifies the x-coordinate of the cursor in device.
* page_y - Specifies the y-coordinate of the cursor in device.
* Return Value:
* TRUE indicates success; otherwise false.
**/
-DLLEXPORT FPDF_BOOL STDCALL FORM_OnLButtonUp(FPDF_FORMHANDLE hHandle,FPDF_PAGE page, int modifier, double page_x, double page_y);
+DLLEXPORT FPDF_BOOL STDCALL FORM_OnLButtonUp(FPDF_FORMHANDLE hHandle,
+ FPDF_PAGE page,
+ int modifier,
+ double page_x,
+ double page_y);
/**
* Function: FORM_OnKeyDown
* You can call this member function when a nonsystem key is pressed.
* Parameters:
- * hHandle - Handle to the form fill module. Returned by FPDFDOC_InitFormFillEnvironment.
- * page - Handle to the page. Returned by FPDF_LoadPage function.
+ * hHandle - Handle to the form fill module. Returned by
+ *FPDFDOC_InitFormFillEnvironment.
+ * page - Handle to the page. Returned by FPDF_LoadPage
+ *function.
* nKeyCode - Indicates whether various virtual keys are down.
- * modifier - Contains the scan code, key-transition code, previous key state, and context code.
+ * modifier - Contains the scan code, key-transition code,
+ *previous key state, and context code.
* Return Value:
* TRUE indicates success; otherwise false.
**/
-DLLEXPORT FPDF_BOOL STDCALL FORM_OnKeyDown(FPDF_FORMHANDLE hHandle,FPDF_PAGE page, int nKeyCode, int modifier);
+DLLEXPORT FPDF_BOOL STDCALL FORM_OnKeyDown(FPDF_FORMHANDLE hHandle,
+ FPDF_PAGE page,
+ int nKeyCode,
+ int modifier);
/**
* Function: FORM_OnKeyUp
* You can call this member function when a nonsystem key is released.
* Parameters:
- * hHandle - Handle to the form fill module. Returned by FPDFDOC_InitFormFillEnvironment.
- * page - Handle to the page. Returned by FPDF_LoadPage function.
+ * hHandle - Handle to the form fill module. Returned by
+ *FPDFDOC_InitFormFillEnvironment.
+ * page - Handle to the page. Returned by FPDF_LoadPage
+ *function.
* nKeyCode - The virtual-key code of the given key.
- * modifier - Contains the scan code, key-transition code, previous key state, and context code.
+ * modifier - Contains the scan code, key-transition code,
+ *previous key state, and context code.
* Return Value:
* TRUE indicates success; otherwise false.
**/
-DLLEXPORT FPDF_BOOL STDCALL FORM_OnKeyUp(FPDF_FORMHANDLE hHandle,FPDF_PAGE page, int nKeyCode, int modifier);
+DLLEXPORT FPDF_BOOL STDCALL FORM_OnKeyUp(FPDF_FORMHANDLE hHandle,
+ FPDF_PAGE page,
+ int nKeyCode,
+ int modifier);
/**
* Function: FORM_OnChar
- * You can call this member function when a keystroke translates to a nonsystem character.
+ * You can call this member function when a keystroke translates to a
+ *nonsystem character.
* Parameters:
- * hHandle - Handle to the form fill module. Returned by FPDFDOC_InitFormFillEnvironment.
- * page - Handle to the page. Returned by FPDF_LoadPage function.
+ * hHandle - Handle to the form fill module. Returned by
+ *FPDFDOC_InitFormFillEnvironment.
+ * page - Handle to the page. Returned by FPDF_LoadPage
+ *function.
* nChar - The character code value of the key.
- * modifier - Contains the scan code, key-transition code, previous key state, and context code.
+ * modifier - Contains the scan code, key-transition code,
+ *previous key state, and context code.
* Return Value:
* TRUE indicates success; otherwise false.
**/
-DLLEXPORT FPDF_BOOL STDCALL FORM_OnChar(FPDF_FORMHANDLE hHandle,FPDF_PAGE page, int nChar, int modifier);
+DLLEXPORT FPDF_BOOL STDCALL FORM_OnChar(FPDF_FORMHANDLE hHandle,
+ FPDF_PAGE page,
+ int nChar,
+ int modifier);
/**
* Function: FORM_ForceToKillFocus.
- * You can call this member function to force to kill the focus of the form field which got focus.
- * It would kill the focus on the form field, save the value of form field if it's changed by user.
+ * You can call this member function to force to kill the focus of the
+ *form field which got focus.
+ * It would kill the focus on the form field, save the value of form
+ *field if it's changed by user.
* Parameters:
- * hHandle - Handle to the form fill module. Returned by FPDFDOC_InitFormFillEnvironment.
+ * hHandle - Handle to the form fill module. Returned by
+ *FPDFDOC_InitFormFillEnvironment.
* Return Value:
* TRUE indicates success; otherwise false.
**/
DLLEXPORT FPDF_BOOL STDCALL FORM_ForceToKillFocus(FPDF_FORMHANDLE hHandle);
// Field Types
-#define FPDF_FORMFIELD_UNKNOWN 0 // Unknown.
-#define FPDF_FORMFIELD_PUSHBUTTON 1 // push button type.
-#define FPDF_FORMFIELD_CHECKBOX 2 // check box type.
-#define FPDF_FORMFIELD_RADIOBUTTON 3 // radio button type.
-#define FPDF_FORMFIELD_COMBOBOX 4 // combo box type.
-#define FPDF_FORMFIELD_LISTBOX 5 // list box type.
-#define FPDF_FORMFIELD_TEXTFIELD 6 // text field type.
+#define FPDF_FORMFIELD_UNKNOWN 0 // Unknown.
+#define FPDF_FORMFIELD_PUSHBUTTON 1 // push button type.
+#define FPDF_FORMFIELD_CHECKBOX 2 // check box type.
+#define FPDF_FORMFIELD_RADIOBUTTON 3 // radio button type.
+#define FPDF_FORMFIELD_COMBOBOX 4 // combo box type.
+#define FPDF_FORMFIELD_LISTBOX 5 // list box type.
+#define FPDF_FORMFIELD_TEXTFIELD 6 // text field type.
/**
* Function: FPDPage_HasFormFieldAtPoint
* Check the form filed position by point.
* Parameters:
- * hHandle - Handle to the form fill module. Returned by FPDFDOC_InitFormFillEnvironment.
- * page - Handle to the page. Returned by FPDF_LoadPage function.
+ * hHandle - Handle to the form fill module. Returned by
+ *FPDFDOC_InitFormFillEnvironment.
+ * page - Handle to the page. Returned by FPDF_LoadPage
+ *function.
* page_x - X position in PDF "user space".
* page_y - Y position in PDF "user space".
* Return Value:
* Return the type of the formfiled; -1 indicates no fields.
**/
-DLLEXPORT int STDCALL FPDPage_HasFormFieldAtPoint(FPDF_FORMHANDLE hHandle,FPDF_PAGE page,double page_x, double page_y);
+DLLEXPORT int STDCALL FPDPage_HasFormFieldAtPoint(FPDF_FORMHANDLE hHandle,
+ FPDF_PAGE page,
+ double page_x,
+ double page_y);
/**
* Function: FPDF_SetFormFieldHighlightColor
- * Set the highlight color of specified or all the form fields in the document.
+ * Set the highlight color of specified or all the form fields in the
+ *document.
* Parameters:
- * hHandle - Handle to the form fill module. Returned by FPDFDOC_InitFormFillEnvironment.
- * doc - Handle to the document. Returned by FPDF_LoadDocument function.
- * fieldType - A 32-bit integer indicating the type of a form field(defined above).
- * color - The highlight color of the form field.Constructed by 0xxxrrggbb.
+ * hHandle - Handle to the form fill module. Returned by
+ *FPDFDOC_InitFormFillEnvironment.
+ * doc - Handle to the document. Returned by
+ *FPDF_LoadDocument function.
+ * fieldType - A 32-bit integer indicating the type of a form
+ *field(defined above).
+ * color - The highlight color of the form field.Constructed by
+ *0xxxrrggbb.
* Return Value:
* NONE.
* Comments:
- * When the parameter fieldType is set to zero, the highlight color will be applied to all the form fields in the
+ * When the parameter fieldType is set to zero, the highlight color
+ *will be applied to all the form fields in the
* document.
- * Please refresh the client window to show the highlight immediately if necessary.
+ * Please refresh the client window to show the highlight immediately
+ *if necessary.
**/
-DLLEXPORT void STDCALL FPDF_SetFormFieldHighlightColor(FPDF_FORMHANDLE hHandle, int fieldType, unsigned long color);
+DLLEXPORT void STDCALL FPDF_SetFormFieldHighlightColor(FPDF_FORMHANDLE hHandle,
+ int fieldType,
+ unsigned long color);
/**
* Function: FPDF_SetFormFieldHighlightAlpha
- * Set the transparency of the form field highlight color in the document.
+ * Set the transparency of the form field highlight color in the
+ *document.
* Parameters:
- * hHandle - Handle to the form fill module. Returned by FPDFDOC_InitFormFillEnvironment.
- * doc - Handle to the document. Returned by FPDF_LoadDocument function.
- * alpha - The transparency of the form field highlight color. between 0-255.
+ * hHandle - Handle to the form fill module. Returned by
+ *FPDFDOC_InitFormFillEnvironment.
+ * doc - Handle to the document. Returned by
+ *FPDF_LoadDocument function.
+ * alpha - The transparency of the form field highlight color.
+ *between 0-255.
* Return Value:
* NONE.
**/
-DLLEXPORT void STDCALL FPDF_SetFormFieldHighlightAlpha(FPDF_FORMHANDLE hHandle, unsigned char alpha);
-
+DLLEXPORT void STDCALL FPDF_SetFormFieldHighlightAlpha(FPDF_FORMHANDLE hHandle,
+ unsigned char alpha);
/**
* Function: FPDF_RemoveFormFieldHighlight
* Remove the form field highlight color in the document.
* Parameters:
- * hHandle - Handle to the form fill module. Returned by FPDFDOC_InitFormFillEnvironment.
+ * hHandle - Handle to the form fill module. Returned by
+ *FPDFDOC_InitFormFillEnvironment.
* Return Value:
* NONE.
* Comments:
- * Please refresh the client window to remove the highlight immediately if necessary.
+ * Please refresh the client window to remove the highlight immediately
+ *if necessary.
**/
DLLEXPORT void STDCALL FPDF_RemoveFormFieldHighlight(FPDF_FORMHANDLE hHandle);
@@ -822,27 +1039,46 @@ DLLEXPORT void STDCALL FPDF_RemoveFormFieldHighlight(FPDF_FORMHANDLE hHandle);
* Function: FPDF_FFLDraw
* Render FormFeilds on a page to a device independent bitmap.
* Parameters:
-* hHandle - Handle to the form fill module. Returned by FPDFDOC_InitFormFillEnvironment.
-* bitmap - Handle to the device independent bitmap (as the output buffer).
-* Bitmap handle can be created by FPDFBitmap_Create function.
-* page - Handle to the page. Returned by FPDF_LoadPage function.
-* start_x - Left pixel position of the display area in the device coordinate.
-* start_y - Top pixel position of the display area in the device coordinate.
+* hHandle - Handle to the form fill module. Returned by
+*FPDFDOC_InitFormFillEnvironment.
+* bitmap - Handle to the device independent bitmap (as the
+*output buffer).
+* Bitmap handle can be created by FPDFBitmap_Create
+*function.
+* page - Handle to the page. Returned by FPDF_LoadPage
+*function.
+* start_x - Left pixel position of the display area in the
+*device coordinate.
+* start_y - Top pixel position of the display area in the device
+*coordinate.
* size_x - Horizontal size (in pixels) for displaying the page.
* size_y - Vertical size (in pixels) for displaying the page.
-* rotate - Page orientation: 0 (normal), 1 (rotated 90 degrees clockwise),
-* 2 (rotated 180 degrees), 3 (rotated 90 degrees counter-clockwise).
-* flags - 0 for normal display, or combination of flags defined above.
+* rotate - Page orientation: 0 (normal), 1 (rotated 90 degrees
+*clockwise),
+* 2 (rotated 180 degrees), 3 (rotated 90 degrees
+*counter-clockwise).
+* flags - 0 for normal display, or combination of flags
+*defined above.
* Return Value:
* None.
* Comments:
-* This method is designed to only render annotations and FormFields on the page.
-* Without FPDF_ANNOT specified for flags, Rendering functions such as FPDF_RenderPageBitmap or FPDF_RenderPageBitmap_Start will only render page contents(without annotations) to a bitmap.
-* In order to implement the FormFill functions,Implementation should call this method after rendering functions finish rendering the page contents.
+* This method is designed to only render annotations and FormFields on
+*the page.
+* Without FPDF_ANNOT specified for flags, Rendering functions such as
+*FPDF_RenderPageBitmap or FPDF_RenderPageBitmap_Start will only render page
+*contents(without annotations) to a bitmap.
+* In order to implement the FormFill functions,Implementation should
+*call this method after rendering functions finish rendering the page contents.
**/
-DLLEXPORT void STDCALL FPDF_FFLDraw(FPDF_FORMHANDLE hHandle,FPDF_BITMAP bitmap, FPDF_PAGE page, int start_x, int start_y,
- int size_x, int size_y, int rotate, int flags);
-
+DLLEXPORT void STDCALL FPDF_FFLDraw(FPDF_FORMHANDLE hHandle,
+ FPDF_BITMAP bitmap,
+ FPDF_PAGE page,
+ int start_x,
+ int start_y,
+ int size_x,
+ int size_y,
+ int rotate,
+ int flags);
#ifdef __cplusplus
}
diff --git a/public/fpdf_fwlevent.h b/public/fpdf_fwlevent.h
index fa4f144fcc..22c01e4297 100644
--- a/public/fpdf_fwlevent.h
+++ b/public/fpdf_fwlevent.h
@@ -13,90 +13,84 @@
extern "C" {
#endif
-typedef int FPDF_INT32;
+typedef int FPDF_INT32;
typedef unsigned int FPDF_UINT32;
-typedef float FPDF_FLOAT;
-//event type
-typedef enum
-{
- FWL_EVENTTYPE_Mouse = 0 ,
- FWL_EVENTTYPE_MouseWheel,
- FWL_EVENTTYPE_Key ,
+typedef float FPDF_FLOAT;
+// event type
+typedef enum {
+ FWL_EVENTTYPE_Mouse = 0,
+ FWL_EVENTTYPE_MouseWheel,
+ FWL_EVENTTYPE_Key,
} FWL_EVENTTYPE;
-//key flag
-typedef enum
-{
- FWL_EVENTFLAG_ShiftKey = 1 << 0,
- FWL_EVENTFLAG_ControlKey = 1 << 1,
- FWL_EVENTFLAG_AltKey = 1 << 2,
- FWL_EVENTFLAG_MetaKey = 1 << 3,
- FWL_EVENTFLAG_KeyPad = 1 << 4,
- FWL_EVENTFLAG_AutoRepeat = 1 << 5,
- FWL_EVENTFLAG_LeftButtonDown = 1 << 6,
- FWL_EVENTFLAG_MiddleButtonDown = 1 << 7,
- FWL_EVENTFLAG_RightButtonDown = 1 << 8,
+// key flag
+typedef enum {
+ FWL_EVENTFLAG_ShiftKey = 1 << 0,
+ FWL_EVENTFLAG_ControlKey = 1 << 1,
+ FWL_EVENTFLAG_AltKey = 1 << 2,
+ FWL_EVENTFLAG_MetaKey = 1 << 3,
+ FWL_EVENTFLAG_KeyPad = 1 << 4,
+ FWL_EVENTFLAG_AutoRepeat = 1 << 5,
+ FWL_EVENTFLAG_LeftButtonDown = 1 << 6,
+ FWL_EVENTFLAG_MiddleButtonDown = 1 << 7,
+ FWL_EVENTFLAG_RightButtonDown = 1 << 8,
} FWL_EVENTFLAG;
// Mouse message command
-typedef enum
-{
- FWL_EVENTMOUSECMD_LButtonDown = 1,
- FWL_EVENTMOUSECMD_LButtonUp,
- FWL_EVENTMOUSECMD_LButtonDblClk,
- FWL_EVENTMOUSECMD_RButtonDown,
- FWL_EVENTMOUSECMD_RButtonUp,
- FWL_EVENTMOUSECMD_RButtonDblClk,
- FWL_EVENTMOUSECMD_MButtonDown,
- FWL_EVENTMOUSECMD_MButtonUp,
- FWL_EVENTMOUSECMD_MButtonDblClk,
- FWL_EVENTMOUSECMD_MouseMove,
- FWL_EVENTMOUSECMD_MouseEnter,
- FWL_EVENTMOUSECMD_MouseHover,
- FWL_EVENTMOUSECMD_MouseLeave,
+typedef enum {
+ FWL_EVENTMOUSECMD_LButtonDown = 1,
+ FWL_EVENTMOUSECMD_LButtonUp,
+ FWL_EVENTMOUSECMD_LButtonDblClk,
+ FWL_EVENTMOUSECMD_RButtonDown,
+ FWL_EVENTMOUSECMD_RButtonUp,
+ FWL_EVENTMOUSECMD_RButtonDblClk,
+ FWL_EVENTMOUSECMD_MButtonDown,
+ FWL_EVENTMOUSECMD_MButtonUp,
+ FWL_EVENTMOUSECMD_MButtonDblClk,
+ FWL_EVENTMOUSECMD_MouseMove,
+ FWL_EVENTMOUSECMD_MouseEnter,
+ FWL_EVENTMOUSECMD_MouseHover,
+ FWL_EVENTMOUSECMD_MouseLeave,
} FWL_EVENT_MOUSECMD;
-//mouse event
-struct FWL_EVENT_MOUSE
-{
- FPDF_UINT32 command;
- FPDF_DWORD flag;
- FPDF_FLOAT x;
- FPDF_FLOAT y;
+// mouse event
+struct FWL_EVENT_MOUSE {
+ FPDF_UINT32 command;
+ FPDF_DWORD flag;
+ FPDF_FLOAT x;
+ FPDF_FLOAT y;
};
-//mouse wheel
-struct FWL_EVENT_MOUSEWHEEL
-{
- FPDF_DWORD flag;
- FPDF_FLOAT x;
- FPDF_FLOAT y;
- FPDF_FLOAT deltaX;
- FPDF_FLOAT deltaY;
+// mouse wheel
+struct FWL_EVENT_MOUSEWHEEL {
+ FPDF_DWORD flag;
+ FPDF_FLOAT x;
+ FPDF_FLOAT y;
+ FPDF_FLOAT deltaX;
+ FPDF_FLOAT deltaY;
};
-//virtual keycode
-typedef enum
-{
- FWL_VKEY_Back = 0x08,
- FWL_VKEY_Tab = 0x09,
- FWL_VKEY_Clear = 0x0C,
- FWL_VKEY_Return = 0x0D,
- FWL_VKEY_Shift = 0x10,
- FWL_VKEY_Control = 0x11,
- FWL_VKEY_Menu = 0x12,
- FWL_VKEY_Pause = 0x13,
- FWL_VKEY_Capital = 0x14,
- FWL_VKEY_Kana = 0x15,
- FWL_VKEY_Hangul = 0x15,
- FWL_VKEY_Junja = 0x17,
- FWL_VKEY_Final = 0x18,
- FWL_VKEY_Hanja = 0x19,
- FWL_VKEY_Kanji = 0x19,
- FWL_VKEY_Escape = 0x1B,
- FWL_VKEY_Convert = 0x1C,
+// virtual keycode
+typedef enum {
+ FWL_VKEY_Back = 0x08,
+ FWL_VKEY_Tab = 0x09,
+ FWL_VKEY_Clear = 0x0C,
+ FWL_VKEY_Return = 0x0D,
+ FWL_VKEY_Shift = 0x10,
+ FWL_VKEY_Control = 0x11,
+ FWL_VKEY_Menu = 0x12,
+ FWL_VKEY_Pause = 0x13,
+ FWL_VKEY_Capital = 0x14,
+ FWL_VKEY_Kana = 0x15,
+ FWL_VKEY_Hangul = 0x15,
+ FWL_VKEY_Junja = 0x17,
+ FWL_VKEY_Final = 0x18,
+ FWL_VKEY_Hanja = 0x19,
+ FWL_VKEY_Kanji = 0x19,
+ FWL_VKEY_Escape = 0x1B,
+ FWL_VKEY_Convert = 0x1C,
FWL_VKEY_NonConvert = 0x1D,
- FWL_VKEY_Accept = 0x1E,
+ FWL_VKEY_Accept = 0x1E,
FWL_VKEY_ModeChange = 0x1F,
FWL_VKEY_Space = 0x20,
FWL_VKEY_Prior = 0x21,
@@ -248,41 +242,36 @@ typedef enum
FWL_VKEY_Unknown = 0,
} FWL_VKEYCODE;
-//key event command
-typedef enum
-{
- FWL_EVENTKEYCMD_KeyDown = 1,
- FWL_EVENTKEYCMD_KeyUp,
- FWL_EVENTKEYCMD_Char,
+// key event command
+typedef enum {
+ FWL_EVENTKEYCMD_KeyDown = 1,
+ FWL_EVENTKEYCMD_KeyUp,
+ FWL_EVENTKEYCMD_Char,
} FWL_EVENTKEYCMD;
-//key event
-struct FWL_EVENT_KEY
-{
- FPDF_UINT32 command;
- FPDF_DWORD flag;
- union
- {
- //Virtual key code.
- FPDF_UINT32 vkcode;
- //Character code.
- FPDF_DWORD charcode;
- }code;
+// key event
+struct FWL_EVENT_KEY {
+ FPDF_UINT32 command;
+ FPDF_DWORD flag;
+ union {
+ // Virtual key code.
+ FPDF_UINT32 vkcode;
+ // Character code.
+ FPDF_DWORD charcode;
+ } code;
};
-//event type
-struct FWL_EVENT
-{
- //structure size.
- FPDF_UINT32 size;
- //FWL_EVENTTYPE.
- FPDF_UINT32 type;
- union
- {
- struct FWL_EVENT_MOUSE mouse;
- struct FWL_EVENT_MOUSEWHEEL wheel;
- struct FWL_EVENT_KEY key;
- }s;
+// event type
+struct FWL_EVENT {
+ // structure size.
+ FPDF_UINT32 size;
+ // FWL_EVENTTYPE.
+ FPDF_UINT32 type;
+ union {
+ struct FWL_EVENT_MOUSE mouse;
+ struct FWL_EVENT_MOUSEWHEEL wheel;
+ struct FWL_EVENT_KEY key;
+ } s;
};
#ifdef __cplusplus
diff --git a/public/fpdf_ppo.h b/public/fpdf_ppo.h
index 2e033f14d3..e7d77678f9 100644
--- a/public/fpdf_ppo.h
+++ b/public/fpdf_ppo.h
@@ -19,21 +19,26 @@ extern "C" {
// dest_doc - The destination document which add the pages.
// src_doc - A document to be imported.
// pagerange - A page range string, Such as "1,3,5-7".
-// If this parameter is NULL, it would import all pages in src_doc.
+// If this parameter is NULL, it would import all pages
+// in src_doc.
// index - The page index wanted to insert from.
// Return value:
// TRUE for succeed, FALSE for Failed.
-DLLEXPORT FPDF_BOOL STDCALL FPDF_ImportPages(FPDF_DOCUMENT dest_doc,FPDF_DOCUMENT src_doc, FPDF_BYTESTRING pagerange, int index);
-
+DLLEXPORT FPDF_BOOL STDCALL FPDF_ImportPages(FPDF_DOCUMENT dest_doc,
+ FPDF_DOCUMENT src_doc,
+ FPDF_BYTESTRING pagerange,
+ int index);
// Function: FPDF_CopyViewerPreferences
// Copy the viewer preferences from one PDF document to another.#endif
// Parameters:
-// dest_doc - Handle to document to write the viewer preferences to.
+// dest_doc - Handle to document to write the viewer preferences
+// to.
// src_doc - Handle to document with the viewer preferences.
// Return value:
// TRUE for success, FALSE for failure.
-DLLEXPORT FPDF_BOOL STDCALL FPDF_CopyViewerPreferences(FPDF_DOCUMENT dest_doc, FPDF_DOCUMENT src_doc);
+DLLEXPORT FPDF_BOOL STDCALL FPDF_CopyViewerPreferences(FPDF_DOCUMENT dest_doc,
+ FPDF_DOCUMENT src_doc);
#ifdef __cplusplus
}
diff --git a/public/fpdf_progressive.h b/public/fpdf_progressive.h
index 058f54b157..f352ff9d00 100644
--- a/public/fpdf_progressive.h
+++ b/public/fpdf_progressive.h
@@ -9,80 +9,102 @@
#include "fpdfview.h"
-//Flags for progressive process status.
-#define FPDF_RENDER_READER 0
-#define FPDF_RENDER_TOBECOUNTINUED 1
-#define FPDF_RENDER_DONE 2
-#define FPDF_RENDER_FAILED 3
-
+// Flags for progressive process status.
+#define FPDF_RENDER_READER 0
+#define FPDF_RENDER_TOBECOUNTINUED 1
+#define FPDF_RENDER_DONE 2
+#define FPDF_RENDER_FAILED 3
#ifdef __cplusplus
extern "C" {
#endif
+// IFPDF_RENDERINFO interface.
+typedef struct _IFSDK_PAUSE {
+ /**
+ * Version number of the interface. Currently must be 1.
+ **/
+ int version;
-//IFPDF_RENDERINFO interface.
-typedef struct _IFSDK_PAUSE
-{
- /**
- * Version number of the interface. Currently must be 1.
- **/
- int version;
-
- /*
- * Method: NeedToPauseNow
- * Check if we need to pause a progressive process now.
- * Interface Version:
- * 1
- * Implementation Required:
- * yes
- * Parameters:
- * pThis - Pointer to the interface structure itself
- * Return Value:
- * Non-zero for pause now, 0 for continue.
- *
- */
- FPDF_BOOL (*NeedToPauseNow) (struct _IFSDK_PAUSE* pThis);
+ /*
+ * Method: NeedToPauseNow
+ * Check if we need to pause a progressive process now.
+ * Interface Version:
+ * 1
+ * Implementation Required:
+ * yes
+ * Parameters:
+ * pThis - Pointer to the interface structure itself
+ * Return Value:
+ * Non-zero for pause now, 0 for continue.
+ *
+ */
+ FPDF_BOOL (*NeedToPauseNow)(struct _IFSDK_PAUSE* pThis);
- //A user defined data pointer, used by user's application. Can be NULL.
- void* user;
+ // A user defined data pointer, used by user's application. Can be NULL.
+ void* user;
} IFSDK_PAUSE;
// Function: FPDF_RenderPageBitmap_Start
-// Start to render page contents to a device independent bitmap progressively.
+// Start to render page contents to a device independent bitmap
+// progressively.
// Parameters:
-// bitmap - Handle to the device independent bitmap (as the output buffer).
-// Bitmap handle can be created by FPDFBitmap_Create function.
-// page - Handle to the page. Returned by FPDF_LoadPage function.
-// start_x - Left pixel position of the display area in the bitmap coordinate.
-// start_y - Top pixel position of the display area in the bitmap coordinate.
+// bitmap - Handle to the device independent bitmap (as the
+// output buffer).
+// Bitmap handle can be created by FPDFBitmap_Create
+// function.
+// page - Handle to the page. Returned by FPDF_LoadPage
+// function.
+// start_x - Left pixel position of the display area in the
+// bitmap coordinate.
+// start_y - Top pixel position of the display area in the bitmap
+// coordinate.
// size_x - Horizontal size (in pixels) for displaying the page.
// size_y - Vertical size (in pixels) for displaying the page.
-// rotate - Page orientation: 0 (normal), 1 (rotated 90 degrees clockwise),
-// 2 (rotated 180 degrees), 3 (rotated 90 degrees counter-clockwise).
-// flags - 0 for normal display, or combination of flags defined above.
-// pause - The IFSDK_PAUSE interface.A callback mechanism allowing the page rendering process
+// rotate - Page orientation: 0 (normal), 1 (rotated 90 degrees
+// clockwise),
+// 2 (rotated 180 degrees), 3 (rotated 90 degrees
+// counter-clockwise).
+// flags - 0 for normal display, or combination of flags
+// defined above.
+// pause - The IFSDK_PAUSE interface.A callback mechanism
+// allowing the page rendering process
// Return value:
-// Rendering Status. See flags for progressive process status for the details.
+// Rendering Status. See flags for progressive process status for the
+// details.
//
-DLLEXPORT int STDCALL FPDF_RenderPageBitmap_Start(FPDF_BITMAP bitmap, FPDF_PAGE page, int start_x, int start_y, int size_x,
- int size_y, int rotate, int flags,IFSDK_PAUSE * pause);
+DLLEXPORT int STDCALL FPDF_RenderPageBitmap_Start(FPDF_BITMAP bitmap,
+ FPDF_PAGE page,
+ int start_x,
+ int start_y,
+ int size_x,
+ int size_y,
+ int rotate,
+ int flags,
+ IFSDK_PAUSE* pause);
// Function: FPDF_RenderPage_Continue
// Continue rendering a PDF page.
// Parameters:
-// page - Handle to the page. Returned by FPDF_LoadPage function.
-// pause - The IFSDK_PAUSE interface.A callback mechanism allowing the page rendering process
-// to be paused before it's finished. This can be NULL if you don't want to pause.
+// page - Handle to the page. Returned by FPDF_LoadPage
+// function.
+// pause - The IFSDK_PAUSE interface.A callback mechanism
+// allowing the page rendering process
+// to be paused before it's finished. This can be NULL
+// if you don't want to pause.
// Return value:
-// The rendering status. See flags for progressive process status for the details.
-DLLEXPORT int STDCALL FPDF_RenderPage_Continue(FPDF_PAGE page,IFSDK_PAUSE * pause);
+// The rendering status. See flags for progressive process status for
+// the details.
+DLLEXPORT int STDCALL FPDF_RenderPage_Continue(FPDF_PAGE page,
+ IFSDK_PAUSE* pause);
// Function: FPDF_RenderPage_Close
-// Release the resource allocate during page rendering. Need to be called after finishing rendering or
+// Release the resource allocate during page rendering. Need to be
+// called after finishing rendering or
// cancel the rendering.
// Parameters:
-// page - Handle to the page. Returned by FPDF_LoadPage function.
+// page - Handle to the page. Returned by FPDF_LoadPage
+// function.
// Return value:
// NULL
DLLEXPORT void STDCALL FPDF_RenderPage_Close(FPDF_PAGE page);
diff --git a/public/fpdf_save.h b/public/fpdf_save.h
index aa326032ca..4eea054eda 100644
--- a/public/fpdf_save.h
+++ b/public/fpdf_save.h
@@ -13,66 +13,72 @@
extern "C" {
#endif
-
// Structure for custom file write
typedef struct FPDF_FILEWRITE_ {
+ //
+ // Version number of the interface. Currently must be 1.
+ //
+ int version;
- //
- //Version number of the interface. Currently must be 1.
- //
- int version;
-
- //
- // Method: WriteBlock
- // Output a block of data in your custom way.
- // Interface Version:
- // 1
- // Implementation Required:
- // Yes
- // Comments:
- // Called by function FPDF_SaveDocument
- // Parameters:
- // pThis - Pointer to the structure itself
- // pData - Pointer to a buffer to output
- // size - The size of the buffer.
- // Return value:
- // Should be non-zero if successful, zero for error.
- //
- int (*WriteBlock)(struct FPDF_FILEWRITE_* pThis, const void* pData, unsigned long size);
+ //
+ // Method: WriteBlock
+ // Output a block of data in your custom way.
+ // Interface Version:
+ // 1
+ // Implementation Required:
+ // Yes
+ // Comments:
+ // Called by function FPDF_SaveDocument
+ // Parameters:
+ // pThis - Pointer to the structure itself
+ // pData - Pointer to a buffer to output
+ // size - The size of the buffer.
+ // Return value:
+ // Should be non-zero if successful, zero for error.
+ //
+ int (*WriteBlock)(struct FPDF_FILEWRITE_* pThis,
+ const void* pData,
+ unsigned long size);
} FPDF_FILEWRITE;
/** @brief Incremental. */
-#define FPDF_INCREMENTAL 1
+#define FPDF_INCREMENTAL 1
/** @brief No Incremental. */
-#define FPDF_NO_INCREMENTAL 2
+#define FPDF_NO_INCREMENTAL 2
/** @brief Remove security. */
-#define FPDF_REMOVE_SECURITY 3
+#define FPDF_REMOVE_SECURITY 3
// Function: FPDF_SaveAsCopy
// Saves the copy of specified document in custom way.
// Parameters:
-// document - Handle to document. Returned by FPDF_LoadDocument and FPDF_CreateNewDocument.
+// document - Handle to document. Returned by
+// FPDF_LoadDocument and FPDF_CreateNewDocument.
// pFileWrite - A pointer to a custom file write structure.
// flags - The creating flags.
// Return value:
// TRUE for succeed, FALSE for failed.
//
-DLLEXPORT FPDF_BOOL STDCALL FPDF_SaveAsCopy( FPDF_DOCUMENT document,FPDF_FILEWRITE * pFileWrite,
- FPDF_DWORD flags );
+DLLEXPORT FPDF_BOOL STDCALL FPDF_SaveAsCopy(FPDF_DOCUMENT document,
+ FPDF_FILEWRITE* pFileWrite,
+ FPDF_DWORD flags);
// Function: FPDF_SaveWithVersion
-// Same as function ::FPDF_SaveAsCopy, except the file version of the saved document could be specified by user.
+// Same as function ::FPDF_SaveAsCopy, except the file version of the
+// saved document could be specified by user.
// Parameters:
// document - Handle to document.
// pFileWrite - A pointer to a custom file write structure.
// flags - The creating flags.
-// fileVersion - The PDF file version. File version: 14 for 1.4, 15 for 1.5, ...
+// fileVersion - The PDF file version. File version: 14 for 1.4,
+// 15 for 1.5, ...
// Return value:
// TRUE if succeed, FALSE if failed.
//
-DLLEXPORT FPDF_BOOL STDCALL FPDF_SaveWithVersion(FPDF_DOCUMENT document,FPDF_FILEWRITE * pFileWrite,
- FPDF_DWORD flags, int fileVersion);
+DLLEXPORT FPDF_BOOL STDCALL FPDF_SaveWithVersion(FPDF_DOCUMENT document,
+ FPDF_FILEWRITE* pFileWrite,
+ FPDF_DWORD flags,
+ int fileVersion);
#ifdef __cplusplus
}
diff --git a/public/fpdf_searchex.h b/public/fpdf_searchex.h
index 1d43eab8cf..a6b6e1bdbf 100644
--- a/public/fpdf_searchex.h
+++ b/public/fpdf_searchex.h
@@ -16,11 +16,14 @@ extern "C" {
// Function: FPDFText_GetCharIndexFromTextIndex
// Get the actually char index in text_page's internal char list.
// Parameters:
-// text_page - Handle to a text page information structure. Returned by FPDFText_LoadPage function.
-// nTextIndex - The index of the text in the string get from FPDFText_GetText.
+// text_page - Handle to a text page information structure.
+// Returned by FPDFText_LoadPage function.
+// nTextIndex - The index of the text in the string get from
+// FPDFText_GetText.
// Return value:
// The index of the character in internal charlist. -1 for error.
-DLLEXPORT int STDCALL FPDFText_GetCharIndexFromTextIndex(FPDF_TEXTPAGE text_page, int nTextIndex);
+DLLEXPORT int STDCALL
+FPDFText_GetCharIndexFromTextIndex(FPDF_TEXTPAGE text_page, int nTextIndex);
#ifdef __cplusplus
}
diff --git a/public/fpdf_sysfontinfo.h b/public/fpdf_sysfontinfo.h
index 61465f4262..c2da74b70b 100644
--- a/public/fpdf_sysfontinfo.h
+++ b/public/fpdf_sysfontinfo.h
@@ -10,22 +10,22 @@
#include "fpdfview.h"
/* Character sets for the font */
-#define FXFONT_ANSI_CHARSET 0
-#define FXFONT_DEFAULT_CHARSET 1
-#define FXFONT_SYMBOL_CHARSET 2
+#define FXFONT_ANSI_CHARSET 0
+#define FXFONT_DEFAULT_CHARSET 1
+#define FXFONT_SYMBOL_CHARSET 2
#define FXFONT_SHIFTJIS_CHARSET 128
-#define FXFONT_HANGEUL_CHARSET 129
-#define FXFONT_GB2312_CHARSET 134
-#define FXFONT_CHINESEBIG5_CHARSET 136
+#define FXFONT_HANGEUL_CHARSET 129
+#define FXFONT_GB2312_CHARSET 134
+#define FXFONT_CHINESEBIG5_CHARSET 136
/* Font pitch and family flags */
-#define FXFONT_FF_FIXEDPITCH 1
-#define FXFONT_FF_ROMAN (1<<4)
-#define FXFONT_FF_SCRIPT (4<<4)
+#define FXFONT_FF_FIXEDPITCH 1
+#define FXFONT_FF_ROMAN (1 << 4)
+#define FXFONT_FF_SCRIPT (4 << 4)
/* Typical weight values */
-#define FXFONT_FW_NORMAL 400
-#define FXFONT_FW_BOLD 700
+#define FXFONT_FW_NORMAL 400
+#define FXFONT_FW_BOLD 700
// Exported Functions
#ifdef __cplusplus
@@ -37,168 +37,200 @@ extern "C" {
* Interface for getting system font information and font mapping
*/
typedef struct _FPDF_SYSFONTINFO {
- /**
- * Version number of the interface. Currently must be 1.
- **/
- int version;
+ /**
+ * Version number of the interface. Currently must be 1.
+ **/
+ int version;
- /**
- * Method: Release
- * Give implementation a chance to release any data after the interface is no longer used
- * Interface Version:
- * 1
- * Implementation Required:
- * No
- * Comments:
- * Called by Foxit SDK during the final cleanup process.
- * Parameters:
- * pThis - Pointer to the interface structure itself
- * Return Value:
- * None
- */
- void (*Release)(struct _FPDF_SYSFONTINFO* pThis);
+ /**
+ * Method: Release
+ * Give implementation a chance to release any data after the
+ * interface is no longer used
+ * Interface Version:
+ * 1
+ * Implementation Required:
+ * No
+ * Comments:
+ * Called by Foxit SDK during the final cleanup process.
+ * Parameters:
+ * pThis - Pointer to the interface structure itself
+ * Return Value:
+ * None
+ */
+ void (*Release)(struct _FPDF_SYSFONTINFO* pThis);
- /**
- * Method: EnumFonts
- * Enumerate all fonts installed on the system
- * Interface Version:
- * 1
- * Implementation Required:
- * No
- * Comments:
- * Implementation should call FPDF_AddIntalledFont() function for each font found.
- * Only TrueType/OpenType and Type1 fonts are accepted by Foxit SDK.
- * Parameters:
- * pThis - Pointer to the interface structure itself
- * pMapper - An opaque pointer to internal font mapper, used when calling FPDF_AddInstalledFont
- * Return Value:
- * None
- */
- void (*EnumFonts)(struct _FPDF_SYSFONTINFO* pThis, void* pMapper);
+ /**
+ * Method: EnumFonts
+ * Enumerate all fonts installed on the system
+ * Interface Version:
+ * 1
+ * Implementation Required:
+ * No
+ * Comments:
+ * Implementation should call FPDF_AddIntalledFont() function for
+ * each font found.
+ * Only TrueType/OpenType and Type1 fonts are accepted by Foxit SDK.
+ * Parameters:
+ * pThis - Pointer to the interface structure itself
+ * pMapper - An opaque pointer to internal font mapper, used
+ * when calling FPDF_AddInstalledFont
+ * Return Value:
+ * None
+ */
+ void (*EnumFonts)(struct _FPDF_SYSFONTINFO* pThis, void* pMapper);
- /**
- * Method: MapFont
- * Use the system font mapper to get a font handle from requested parameters
- * Interface Version:
- * 1
- * Implementation Required:
- * Yes only if GetFont method is not implemented.
- * Comments:
- * If the system supports native font mapper (like Windows), implementation can implement this method to get a font handle.
- * Otherwise, Foxit SDK will do the mapping and then call GetFont method.
- * Only TrueType/OpenType and Type1 fonts are accepted by Foxit SDK.
- * Parameters:
- * pThis - Pointer to the interface structure itself
- * weight - Weight of the requested font. 400 is normal and 700 is bold.
- * bItalic - Italic option of the requested font, TRUE or FALSE.
- * charset - Character set identifier for the requested font. See above defined constants.
- * pitch_family - A combination of flags. See above defined constants.
- * face - Typeface name. Currently use system local encoding only.
- * bExact - Pointer to a boolean value receiving the indicator whether mapper found the exact match.
- * If mapper is not sure whether it's exact match, ignore this paramter.
- * Return Value:
- * An opaque pointer for font handle, or NULL if system mapping is not supported.
- **/
- void* (*MapFont)(struct _FPDF_SYSFONTINFO* pThis, int weight, FPDF_BOOL bItalic, int charset, int pitch_family,
- const char* face, FPDF_BOOL* bExact);
+ /**
+ * Method: MapFont
+ * Use the system font mapper to get a font handle from requested
+ *parameters
+ * Interface Version:
+ * 1
+ * Implementation Required:
+ * Yes only if GetFont method is not implemented.
+ * Comments:
+ * If the system supports native font mapper (like Windows),
+ *implementation can implement this method to get a font handle.
+ * Otherwise, Foxit SDK will do the mapping and then call GetFont
+ *method.
+ * Only TrueType/OpenType and Type1 fonts are accepted by Foxit SDK.
+ * Parameters:
+ * pThis - Pointer to the interface structure itself
+ * weight - Weight of the requested font. 400 is normal and
+ *700 is bold.
+ * bItalic - Italic option of the requested font, TRUE or
+ *FALSE.
+ * charset - Character set identifier for the requested font.
+ *See above defined constants.
+ * pitch_family - A combination of flags. See above defined
+ *constants.
+ * face - Typeface name. Currently use system local encoding
+ *only.
+ * bExact - Pointer to a boolean value receiving the indicator
+ *whether mapper found the exact match.
+ * If mapper is not sure whether it's exact match,
+ *ignore this paramter.
+ * Return Value:
+ * An opaque pointer for font handle, or NULL if system mapping is
+ *not supported.
+ **/
+ void* (*MapFont)(struct _FPDF_SYSFONTINFO* pThis,
+ int weight,
+ FPDF_BOOL bItalic,
+ int charset,
+ int pitch_family,
+ const char* face,
+ FPDF_BOOL* bExact);
- /**
- * Method: GetFont
- * Get a handle to a particular font by its internal ID
- * Interface Version:
- * 1
- * Implementation Required:
- * Yes only if MapFont method is not implemented.
- * Comments:
- * If the system mapping not supported, Foxit SDK will do the font mapping and use this method to get a font handle.
- * Parameters:
- * pThis - Pointer to the interface structure itself
- * face - Typeface name. Currently use system local encoding only.
- * Return Value:
- * An opaque pointer for font handle.
- **/
- void* (*GetFont)(struct _FPDF_SYSFONTINFO* pThis, const char* face);
+ /**
+ * Method: GetFont
+ * Get a handle to a particular font by its internal ID
+ * Interface Version:
+ * 1
+ * Implementation Required:
+ * Yes only if MapFont method is not implemented.
+ * Comments:
+ * If the system mapping not supported, Foxit SDK will do the font
+ *mapping and use this method to get a font handle.
+ * Parameters:
+ * pThis - Pointer to the interface structure itself
+ * face - Typeface name. Currently use system local encoding
+ *only.
+ * Return Value:
+ * An opaque pointer for font handle.
+ **/
+ void* (*GetFont)(struct _FPDF_SYSFONTINFO* pThis, const char* face);
- /**
- * Method: GetFontData
- * Get font data from a font
- * Interface Version:
- * 1
- * Implementation Required:
- * Yes
- * Comments:
- * Can read either full font file, or a particular TrueType/OpenType table
- * Parameters:
- * pThis - Pointer to the interface structure itself
- * hFont - Font handle returned by MapFont or GetFont method
- * table - TrueType/OpenType table identifier (refer to TrueType specification).
- * 0 for the whole font file.
- * buffer - The buffer receiving the font data. Can be NULL if not provided
- * buf_size - Buffer size, can be zero if not provided
- * Return Value:
- * Number of bytes needed, if buffer not provided or not large enough,
- * or number of bytes written into buffer otherwise.
- **/
- unsigned long (*GetFontData)(struct _FPDF_SYSFONTINFO* pThis, void* hFont,
- unsigned int table, unsigned char* buffer, unsigned long buf_size);
+ /**
+ * Method: GetFontData
+ * Get font data from a font
+ * Interface Version:
+ * 1
+ * Implementation Required:
+ * Yes
+ * Comments:
+ * Can read either full font file, or a particular TrueType/OpenType
+ *table
+ * Parameters:
+ * pThis - Pointer to the interface structure itself
+ * hFont - Font handle returned by MapFont or GetFont method
+ * table - TrueType/OpenType table identifier (refer to
+ *TrueType specification).
+ * 0 for the whole font file.
+ * buffer - The buffer receiving the font data. Can be NULL if
+ *not provided
+ * buf_size - Buffer size, can be zero if not provided
+ * Return Value:
+ * Number of bytes needed, if buffer not provided or not large
+ *enough,
+ * or number of bytes written into buffer otherwise.
+ **/
+ unsigned long (*GetFontData)(struct _FPDF_SYSFONTINFO* pThis,
+ void* hFont,
+ unsigned int table,
+ unsigned char* buffer,
+ unsigned long buf_size);
- /**
- * Method: GetFaceName
- * Get face name from a font handle
- * Interface Version:
- * 1
- * Implementation Required:
- * No
- * Parameters:
- * pThis - Pointer to the interface structure itself
- * hFont - Font handle returned by MapFont or GetFont method
- * buffer - The buffer receiving the face name. Can be NULL if not provided
- * buf_size - Buffer size, can be zero if not provided
- * Return Value:
- * Number of bytes needed, if buffer not provided or not large enough,
- * or number of bytes written into buffer otherwise.
- **/
- unsigned long (*GetFaceName)(struct _FPDF_SYSFONTINFO* pThis, void* hFont, char* buffer, unsigned long buf_size);
+ /**
+ * Method: GetFaceName
+ * Get face name from a font handle
+ * Interface Version:
+ * 1
+ * Implementation Required:
+ * No
+ * Parameters:
+ * pThis - Pointer to the interface structure itself
+ * hFont - Font handle returned by MapFont or GetFont method
+ * buffer - The buffer receiving the face name. Can be NULL if
+ *not provided
+ * buf_size - Buffer size, can be zero if not provided
+ * Return Value:
+ * Number of bytes needed, if buffer not provided or not large
+ *enough,
+ * or number of bytes written into buffer otherwise.
+ **/
+ unsigned long (*GetFaceName)(struct _FPDF_SYSFONTINFO* pThis,
+ void* hFont,
+ char* buffer,
+ unsigned long buf_size);
- /**
- * Method: GetFontCharset
- * Get character set information for a font handle
- * Interface Version:
- * 1
- * Implementation Required:
- * No
- * Parameters:
- * pThis - Pointer to the interface structure itself
- * hFont - Font handle returned by MapFont or GetFont method
- * Return Value:
- * Character set identifier. See defined constants above.
- **/
- int (*GetFontCharset)(struct _FPDF_SYSFONTINFO* pThis, void* hFont);
+ /**
+ * Method: GetFontCharset
+ * Get character set information for a font handle
+ * Interface Version:
+ * 1
+ * Implementation Required:
+ * No
+ * Parameters:
+ * pThis - Pointer to the interface structure itself
+ * hFont - Font handle returned by MapFont or GetFont method
+ * Return Value:
+ * Character set identifier. See defined constants above.
+ **/
+ int (*GetFontCharset)(struct _FPDF_SYSFONTINFO* pThis, void* hFont);
- /**
- * Method: DeleteFont
- * Delete a font handle
- * Interface Version:
- * 1
- * Implementation Required:
- * Yes
- * Parameters:
- * pThis - Pointer to the interface structure itself
- * hFont - Font handle returned by MapFont or GetFont method
- * Return Value:
- * None
- **/
- void (*DeleteFont)(struct _FPDF_SYSFONTINFO* pThis, void* hFont);
+ /**
+ * Method: DeleteFont
+ * Delete a font handle
+ * Interface Version:
+ * 1
+ * Implementation Required:
+ * Yes
+ * Parameters:
+ * pThis - Pointer to the interface structure itself
+ * hFont - Font handle returned by MapFont or GetFont method
+ * Return Value:
+ * None
+ **/
+ void (*DeleteFont)(struct _FPDF_SYSFONTINFO* pThis, void* hFont);
} FPDF_SYSFONTINFO;
/**
* Struct: FPDF_CharsetFontMap
* Provides the name of a font to use for a given charset value.
**/
-typedef struct FPDF_CharsetFontMap_
-{
- int charset; // Character Set Enum value, see FXFONT_*_CHARSET above.
- const char* fontname; // Name of default font to use with that charset.
+typedef struct FPDF_CharsetFontMap_ {
+ int charset; // Character Set Enum value, see FXFONT_*_CHARSET above.
+ const char* fontname; // Name of default font to use with that charset.
} FPDF_CharsetFontMap;
/**
@@ -217,7 +249,8 @@ DLLEXPORT const FPDF_CharsetFontMap* STDCALL FPDF_GetDefaultTTFMap();
* Function: FPDF_AddInstalledFont
* Add a system font to the list in Foxit SDK.
* Comments:
- * This function is only called during the system font list building process.
+ * This function is only called during the system font list building
+ *process.
* Parameters:
* mapper - Opaque pointer to Foxit font mapper
* face - The font face name
@@ -225,13 +258,16 @@ DLLEXPORT const FPDF_CharsetFontMap* STDCALL FPDF_GetDefaultTTFMap();
* Return Value:
* None.
**/
-DLLEXPORT void STDCALL FPDF_AddInstalledFont(void* mapper, const char* face, int charset);
+DLLEXPORT void STDCALL FPDF_AddInstalledFont(void* mapper,
+ const char* face,
+ int charset);
/**
* Function: FPDF_SetSystemFontInfo
* Set the system font info interface into Foxit SDK
* Comments:
- * Platform support implementation should implement required methods of FFDF_SYSFONTINFO interface,
+ * Platform support implementation should implement required methods of
+ *FFDF_SYSFONTINFO interface,
* then call this function during SDK initialization process.
* Parameters:
* pFontInfo - Pointer to a FPDF_SYSFONTINFO structure
@@ -244,14 +280,18 @@ DLLEXPORT void STDCALL FPDF_SetSystemFontInfo(FPDF_SYSFONTINFO* pFontInfo);
* Function: FPDF_GetDefaultSystemFontInfo
* Get default system font info interface for current platform
* Comments:
- * For some platforms Foxit SDK implement a default version of system font info interface.
- * The default implementation can be used in FPDF_SetSystemFontInfo function.
+ * For some platforms Foxit SDK implement a default version of system
+ *font info interface.
+ * The default implementation can be used in FPDF_SetSystemFontInfo
+ *function.
* Parameters:
* None
* Return Value:
- * Pointer to a FPDF_SYSFONTINFO structure describing the default interface.
+ * Pointer to a FPDF_SYSFONTINFO structure describing the default
+ *interface.
* Or NULL if the platform doesn't have a default interface.
- * Application should call FPDF_FreeMemory to free the returned pointer.
+ * Application should call FPDF_FreeMemory to free the returned
+ *pointer.
**/
DLLEXPORT FPDF_SYSFONTINFO* STDCALL FPDF_GetDefaultSystemFontInfo();
diff --git a/public/fpdf_text.h b/public/fpdf_text.h
index 32f5c7c15b..30d1033a12 100644
--- a/public/fpdf_text.h
+++ b/public/fpdf_text.h
@@ -17,19 +17,23 @@ extern "C" {
// Function: FPDFText_LoadPage
// Prepare information about all characters in a page.
// Parameters:
-// page - Handle to the page. Returned by FPDF_LoadPage function (in FPDFVIEW module).
+// page - Handle to the page. Returned by FPDF_LoadPage function
+// (in FPDFVIEW module).
// Return value:
// A handle to the text page information structure.
// NULL if something goes wrong.
// Comments:
-// Application must call FPDFText_ClosePage to release the text page information.
+// Application must call FPDFText_ClosePage to release the text page
+// information.
//
DLLEXPORT FPDF_TEXTPAGE STDCALL FPDFText_LoadPage(FPDF_PAGE page);
// Function: FPDFText_ClosePage
-// Release all resources allocated for a text page information structure.
+// Release all resources allocated for a text page information
+// structure.
// Parameters:
-// text_page - Handle to a text page information structure. Returned by FPDFText_LoadPage function.
+// text_page - Handle to a text page information structure.
+// Returned by FPDFText_LoadPage function.
// Return Value:
// None.
//
@@ -38,13 +42,17 @@ DLLEXPORT void STDCALL FPDFText_ClosePage(FPDF_TEXTPAGE text_page);
// Function: FPDFText_CountChars
// Get number of characters in a page.
// Parameters:
-// text_page - Handle to a text page information structure. Returned by FPDFText_LoadPage function.
+// text_page - Handle to a text page information structure.
+// Returned by FPDFText_LoadPage function.
// Return value:
// Number of characters in the page. Return -1 for error.
-// Generated characters, like additional space characters, new line characters, are also counted.
+// Generated characters, like additional space characters, new line
+// characters, are also counted.
// Comments:
-// Characters in a page form a "stream", inside the stream, each character has an index.
-// We will use the index parameters in many of FPDFTEXT functions. The first character in the page
+// Characters in a page form a "stream", inside the stream, each
+// character has an index.
+// We will use the index parameters in many of FPDFTEXT functions. The
+// first character in the page
// has an index value of zero.
//
DLLEXPORT int STDCALL FPDFText_CountChars(FPDF_TEXTPAGE text_page);
@@ -52,149 +60,213 @@ DLLEXPORT int STDCALL FPDFText_CountChars(FPDF_TEXTPAGE text_page);
// Function: FPDFText_GetUnicode
// Get Unicode of a character in a page.
// Parameters:
-// text_page - Handle to a text page information structure. Returned by FPDFText_LoadPage function.
+// text_page - Handle to a text page information structure.
+// Returned by FPDFText_LoadPage function.
// index - Zero-based index of the character.
// Return value:
// The Unicode of the particular character.
-// If a character is not encoded in Unicode and Foxit engine can't convert to Unicode,
+// If a character is not encoded in Unicode and Foxit engine can't
+// convert to Unicode,
// the return value will be zero.
//
-DLLEXPORT unsigned int STDCALL FPDFText_GetUnicode(FPDF_TEXTPAGE text_page, int index);
+DLLEXPORT unsigned int STDCALL FPDFText_GetUnicode(FPDF_TEXTPAGE text_page,
+ int index);
// Function: FPDFText_GetFontSize
// Get the font size of a particular character.
// Parameters:
-// text_page - Handle to a text page information structure. Returned by FPDFText_LoadPage function.
+// text_page - Handle to a text page information structure.
+// Returned by FPDFText_LoadPage function.
// index - Zero-based index of the character.
// Return value:
-// The font size of the particular character, measured in points (about 1/72 inch).
+// The font size of the particular character, measured in points (about
+// 1/72 inch).
// This is the typographic size of the font (so called "em size").
//
-DLLEXPORT double STDCALL FPDFText_GetFontSize(FPDF_TEXTPAGE text_page, int index);
+DLLEXPORT double STDCALL FPDFText_GetFontSize(FPDF_TEXTPAGE text_page,
+ int index);
// Function: FPDFText_GetCharBox
// Get bounding box of a particular character.
// Parameters:
-// text_page - Handle to a text page information structure. Returned by FPDFText_LoadPage function.
+// text_page - Handle to a text page information structure.
+// Returned by FPDFText_LoadPage function.
// index - Zero-based index of the character.
-// left - Pointer to a double number receiving left position of the character box.
-// right - Pointer to a double number receiving right position of the character box.
-// bottom - Pointer to a double number receiving bottom position of the character box.
-// top - Pointer to a double number receiving top position of the character box.
+// left - Pointer to a double number receiving left position
+// of the character box.
+// right - Pointer to a double number receiving right position
+// of the character box.
+// bottom - Pointer to a double number receiving bottom position
+// of the character box.
+// top - Pointer to a double number receiving top position of
+// the character box.
// Return Value:
// None.
// Comments:
// All positions are measured in PDF "user space".
//
-DLLEXPORT void STDCALL FPDFText_GetCharBox(FPDF_TEXTPAGE text_page, int index, double* left,
- double* right, double* bottom, double* top);
+DLLEXPORT void STDCALL FPDFText_GetCharBox(FPDF_TEXTPAGE text_page,
+ int index,
+ double* left,
+ double* right,
+ double* bottom,
+ double* top);
// Function: FPDFText_GetCharIndexAtPos
-// Get the index of a character at or nearby a certain position on the page.
+// Get the index of a character at or nearby a certain position on the
+// page.
// Parameters:
-// text_page - Handle to a text page information structure. Returned by FPDFText_LoadPage function.
+// text_page - Handle to a text page information structure.
+// Returned by FPDFText_LoadPage function.
// x - X position in PDF "user space".
// y - Y position in PDF "user space".
-// xTolerance - An x-axis tolerance value for character hit detection, in point unit.
-// yTolerance - A y-axis tolerance value for character hit detection, in point unit.
+// xTolerance - An x-axis tolerance value for character hit
+// detection, in point unit.
+// yTolerance - A y-axis tolerance value for character hit
+// detection, in point unit.
// Return Value:
// The zero-based index of the character at, or nearby the point (x,y).
-// If there is no character at or nearby the point, return value will be -1.
+// If there is no character at or nearby the point, return value will
+// be -1.
// If an error occurs, -3 will be returned.
//
DLLEXPORT int STDCALL FPDFText_GetCharIndexAtPos(FPDF_TEXTPAGE text_page,
- double x, double y, double xTorelance, double yTolerance);
+ double x,
+ double y,
+ double xTorelance,
+ double yTolerance);
// Function: FPDFText_GetText
// Extract unicode text string from the page.
// Parameters:
-// text_page - Handle to a text page information structure. Returned by FPDFText_LoadPage function.
+// text_page - Handle to a text page information structure.
+// Returned by FPDFText_LoadPage function.
// start_index - Index for the start characters.
// count - Number of characters to be extracted.
-// result - A buffer (allocated by application) receiving the extracted unicodes.
-// The size of the buffer must be able to hold the number of characters plus a terminator.
+// result - A buffer (allocated by application) receiving the
+// extracted unicodes.
+// The size of the buffer must be able to hold the
+// number of characters plus a terminator.
// Return Value:
-// Number of characters written into the result buffer, including the trailing terminator.
+// Number of characters written into the result buffer, including the
+// trailing terminator.
// Comments:
// This function ignores characters without unicode information.
//
-DLLEXPORT int STDCALL FPDFText_GetText(FPDF_TEXTPAGE text_page, int start_index, int count, unsigned short* result);
+DLLEXPORT int STDCALL FPDFText_GetText(FPDF_TEXTPAGE text_page,
+ int start_index,
+ int count,
+ unsigned short* result);
// Function: FPDFText_CountRects
// Count number of rectangular areas occupied by a segment of texts.
// Parameters:
-// text_page - Handle to a text page information structure. Returned by FPDFText_LoadPage function.
+// text_page - Handle to a text page information structure.
+// Returned by FPDFText_LoadPage function.
// start_index - Index for the start characters.
// count - Number of characters.
// Return value:
// Number of rectangles. Zero for error.
// Comments:
-// This function, along with FPDFText_GetRect can be used by applications to detect the position
-// on the page for a text segment, so proper areas can be highlighted or something.
-// FPDFTEXT will automatically merge small character boxes into bigger one if those characters
+// This function, along with FPDFText_GetRect can be used by
+// applications to detect the position
+// on the page for a text segment, so proper areas can be highlighted
+// or something.
+// FPDFTEXT will automatically merge small character boxes into bigger
+// one if those characters
// are on the same line and use same font settings.
//
-DLLEXPORT int STDCALL FPDFText_CountRects(FPDF_TEXTPAGE text_page, int start_index, int count);
+DLLEXPORT int STDCALL FPDFText_CountRects(FPDF_TEXTPAGE text_page,
+ int start_index,
+ int count);
// Function: FPDFText_GetRect
-// Get a rectangular area from the result generated by FPDFText_CountRects.
+// Get a rectangular area from the result generated by
+// FPDFText_CountRects.
// Parameters:
-// text_page - Handle to a text page information structure. Returned by FPDFText_LoadPage function.
+// text_page - Handle to a text page information structure.
+// Returned by FPDFText_LoadPage function.
// rect_index - Zero-based index for the rectangle.
-// left - Pointer to a double value receiving the rectangle left boundary.
-// top - Pointer to a double value receiving the rectangle top boundary.
-// right - Pointer to a double value receiving the rectangle right boundary.
-// bottom - Pointer to a double value receiving the rectangle bottom boundary.
+// left - Pointer to a double value receiving the rectangle
+// left boundary.
+// top - Pointer to a double value receiving the rectangle
+// top boundary.
+// right - Pointer to a double value receiving the rectangle
+// right boundary.
+// bottom - Pointer to a double value receiving the rectangle
+// bottom boundary.
// Return Value:
// None.
//
-DLLEXPORT void STDCALL FPDFText_GetRect(FPDF_TEXTPAGE text_page, int rect_index, double* left, double* top,
- double* right, double* bottom);
+DLLEXPORT void STDCALL FPDFText_GetRect(FPDF_TEXTPAGE text_page,
+ int rect_index,
+ double* left,
+ double* top,
+ double* right,
+ double* bottom);
// Function: FPDFText_GetBoundedText
// Extract unicode text within a rectangular boundary on the page.
// Parameters:
-// text_page - Handle to a text page information structure. Returned by FPDFText_LoadPage function.
+// text_page - Handle to a text page information structure.
+// Returned by FPDFText_LoadPage function.
// left - Left boundary.
// top - Top boundary.
// right - Right boundary.
// bottom - Bottom boundary.
// buffer - A unicode buffer.
-// buflen - Number of characters (not bytes) for the buffer, excluding an additional terminator.
+// buflen - Number of characters (not bytes) for the buffer,
+// excluding an additional terminator.
// Return Value:
-// If buffer is NULL or buflen is zero, return number of characters (not bytes) of text present within
-// the rectangle, excluding a terminating NUL. Generally you should pass a buffer at least one larger
-// than this if you want a terminating NUL, which will be provided if space is available.
-// Otherwise, return number of characters copied into the buffer, including the terminating NUL
+// If buffer is NULL or buflen is zero, return number of characters
+// (not bytes) of text present within
+// the rectangle, excluding a terminating NUL. Generally you should
+// pass a buffer at least one larger
+// than this if you want a terminating NUL, which will be provided if
+// space is available.
+// Otherwise, return number of characters copied into the buffer,
+// including the terminating NUL
// when space for it is available.
// Comment:
-// If the buffer is too small, as much text as will fit is copied into it.
+// If the buffer is too small, as much text as will fit is copied into
+// it.
//
-DLLEXPORT int STDCALL FPDFText_GetBoundedText(FPDF_TEXTPAGE text_page,double left, double top,
- double right, double bottom,unsigned short* buffer,int buflen);
-
+DLLEXPORT int STDCALL FPDFText_GetBoundedText(FPDF_TEXTPAGE text_page,
+ double left,
+ double top,
+ double right,
+ double bottom,
+ unsigned short* buffer,
+ int buflen);
// Flags used by FPDFText_FindStart function.
-#define FPDF_MATCHCASE 0x00000001 //If not set, it will not match case by default.
-#define FPDF_MATCHWHOLEWORD 0x00000002 //If not set, it will not match the whole word by default.
+#define FPDF_MATCHCASE \
+ 0x00000001 // If not set, it will not match case by default.
+#define FPDF_MATCHWHOLEWORD \
+ 0x00000002 // If not set, it will not match the whole word by default.
// Function: FPDFText_FindStart
// Start a search.
// Parameters:
-// text_page - Handle to a text page information structure. Returned by FPDFText_LoadPage function.
+// text_page - Handle to a text page information structure.
+// Returned by FPDFText_LoadPage function.
// findwhat - A unicode match pattern.
// flags - Option flags.
// start_index - Start from this character. -1 for end of the page.
// Return Value:
-// A handle for the search context. FPDFText_FindClose must be called to release this handle.
+// A handle for the search context. FPDFText_FindClose must be called
+// to release this handle.
//
-DLLEXPORT FPDF_SCHHANDLE STDCALL FPDFText_FindStart(FPDF_TEXTPAGE text_page, FPDF_WIDESTRING findwhat,
- unsigned long flags, int start_index);
+DLLEXPORT FPDF_SCHHANDLE STDCALL FPDFText_FindStart(FPDF_TEXTPAGE text_page,
+ FPDF_WIDESTRING findwhat,
+ unsigned long flags,
+ int start_index);
// Function: FPDFText_FindNext
// Search in the direction from page start to end.
// Parameters:
-// handle - A search context handle returned by FPDFText_FindStart.
+// handle - A search context handle returned by
+// FPDFText_FindStart.
// Return Value:
// Whether a match is found.
//
@@ -203,7 +275,8 @@ DLLEXPORT FPDF_BOOL STDCALL FPDFText_FindNext(FPDF_SCHHANDLE handle);
// Function: FPDFText_FindPrev
// Search in the direction from page end to start.
// Parameters:
-// handle - A search context handle returned by FPDFText_FindStart.
+// handle - A search context handle returned by
+// FPDFText_FindStart.
// Return Value:
// Whether a match is found.
//
@@ -212,7 +285,8 @@ DLLEXPORT FPDF_BOOL STDCALL FPDFText_FindPrev(FPDF_SCHHANDLE handle);
// Function: FPDFText_GetSchResultIndex
// Get the starting character index of the search result.
// Parameters:
-// handle - A search context handle returned by FPDFText_FindStart.
+// handle - A search context handle returned by
+// FPDFText_FindStart.
// Return Value:
// Index for the starting character.
//
@@ -221,7 +295,8 @@ DLLEXPORT int STDCALL FPDFText_GetSchResultIndex(FPDF_SCHHANDLE handle);
// Function: FPDFText_GetSchCount
// Get the number of matched characters in the search result.
// Parameters:
-// handle - A search context handle returned by FPDFText_FindStart.
+// handle - A search context handle returned by
+// FPDFText_FindStart.
// Return Value:
// Number of matched characters.
//
@@ -230,7 +305,8 @@ DLLEXPORT int STDCALL FPDFText_GetSchCount(FPDF_SCHHANDLE handle);
// Function: FPDFText_FindClose
// Release a search context.
// Parameters:
-// handle - A search context handle returned by FPDFText_FindStart.
+// handle - A search context handle returned by
+// FPDFText_FindStart.
// Return Value:
// None.
//
@@ -239,16 +315,22 @@ DLLEXPORT void STDCALL FPDFText_FindClose(FPDF_SCHHANDLE handle);
// Function: FPDFLink_LoadWebLinks
// Prepare information about weblinks in a page.
// Parameters:
-// text_page - Handle to a text page information structure. Returned by FPDFText_LoadPage function.
+// text_page - Handle to a text page information structure.
+// Returned by FPDFText_LoadPage function.
// Return Value:
// A handle to the page's links information structure.
// NULL if something goes wrong.
// Comments:
-// Weblinks are those links implicitly embedded in PDF pages. PDF also has a type of
-// annotation called "link", FPDFTEXT doesn't deal with that kind of link.
-// FPDFTEXT weblink feature is useful for automatically detecting links in the page
-// contents. For example, things like "http://www.foxitsoftware.com" will be detected,
-// so applications can allow user to click on those characters to activate the link,
+// Weblinks are those links implicitly embedded in PDF pages. PDF also
+// has a type of
+// annotation called "link", FPDFTEXT doesn't deal with that kind of
+// link.
+// FPDFTEXT weblink feature is useful for automatically detecting links
+// in the page
+// contents. For example, things like "http://www.foxitsoftware.com"
+// will be detected,
+// so applications can allow user to click on those characters to
+// activate the link,
// even the PDF doesn't come with link annotations.
//
// FPDFLink_CloseWebLinks must be called to release resources.
@@ -270,12 +352,17 @@ DLLEXPORT int STDCALL FPDFLink_CountWebLinks(FPDF_PAGELINK link_page);
// link_page - Handle returned by FPDFLink_LoadWebLinks.
// link_index - Zero-based index for the link.
// buffer - A unicode buffer.
-// buflen - Number of characters (not bytes) for the buffer, including an additional terminator.
+// buflen - Number of characters (not bytes) for the buffer,
+// including an additional terminator.
// Return Value:
-// If buffer is NULL or buflen is zero, return number of characters (not bytes and an additional terminator is also counted) needed,
+// If buffer is NULL or buflen is zero, return number of characters
+// (not bytes and an additional terminator is also counted) needed,
// otherwise, return number of characters copied into the buffer.
//
-DLLEXPORT int STDCALL FPDFLink_GetURL(FPDF_PAGELINK link_page, int link_index, unsigned short* buffer,int buflen);
+DLLEXPORT int STDCALL FPDFLink_GetURL(FPDF_PAGELINK link_page,
+ int link_index,
+ unsigned short* buffer,
+ int buflen);
// Function: FPDFLink_CountRects
// Count number of rectangular areas for the link.
@@ -285,7 +372,8 @@ DLLEXPORT int STDCALL FPDFLink_GetURL(FPDF_PAGELINK link_page, int link_index, u
// Return Value:
// Number of rectangular areas for the link.
//
-DLLEXPORT int STDCALL FPDFLink_CountRects(FPDF_PAGELINK link_page, int link_index);
+DLLEXPORT int STDCALL FPDFLink_CountRects(FPDF_PAGELINK link_page,
+ int link_index);
// Function: FPDFLink_GetRect
// Fetch the boundaries of a rectangle for a link.
@@ -293,15 +381,24 @@ DLLEXPORT int STDCALL FPDFLink_CountRects(FPDF_PAGELINK link_page, int link_inde
// link_page - Handle returned by FPDFLink_LoadWebLinks.
// link_index - Zero-based index for the link.
// rect_index - Zero-based index for a rectangle.
-// left - Pointer to a double value receiving the rectangle left boundary.
-// top - Pointer to a double value receiving the rectangle top boundary.
-// right - Pointer to a double value receiving the rectangle right boundary.
-// bottom - Pointer to a double value receiving the rectangle bottom boundary.
+// left - Pointer to a double value receiving the rectangle
+// left boundary.
+// top - Pointer to a double value receiving the rectangle
+// top boundary.
+// right - Pointer to a double value receiving the rectangle
+// right boundary.
+// bottom - Pointer to a double value receiving the rectangle
+// bottom boundary.
// Return Value:
// None.
//
-DLLEXPORT void STDCALL FPDFLink_GetRect(FPDF_PAGELINK link_page, int link_index, int rect_index,
- double* left, double* top,double* right, double* bottom);
+DLLEXPORT void STDCALL FPDFLink_GetRect(FPDF_PAGELINK link_page,
+ int link_index,
+ int rect_index,
+ double* left,
+ double* top,
+ double* right,
+ double* bottom);
// Function: FPDFLink_CloseWebLinks
// Release resources used by weblink feature.
@@ -312,7 +409,6 @@ DLLEXPORT void STDCALL FPDFLink_GetRect(FPDF_PAGELINK link_page, int link_index,
//
DLLEXPORT void STDCALL FPDFLink_CloseWebLinks(FPDF_PAGELINK link_page);
-
#ifdef __cplusplus
}
#endif
diff --git a/public/fpdf_transformpage.h b/public/fpdf_transformpage.h
index 6278b9d0dd..569df2a7e0 100644
--- a/public/fpdf_transformpage.h
+++ b/public/fpdf_transformpage.h
@@ -25,7 +25,11 @@ typedef void* FPDF_PAGEARCLOADER;
* @param[in] top - The top of the rectangle.
* @retval None.
*/
-DLLEXPORT void STDCALL FPDFPage_SetMediaBox(FPDF_PAGE page, float left, float bottom, float right, float top);
+DLLEXPORT void STDCALL FPDFPage_SetMediaBox(FPDF_PAGE page,
+ float left,
+ float bottom,
+ float right,
+ float top);
/**
* Set "CropBox" entry to the page dictionary.
@@ -36,42 +40,66 @@ DLLEXPORT void STDCALL FPDFPage_SetMediaBox(FPDF_PAGE page, float left, float bo
* @param[in] top - The top of the rectangle.
* @retval None.
*/
-DLLEXPORT void STDCALL FPDFPage_SetCropBox(FPDF_PAGE page, float left, float bottom, float right, float top);
-
+DLLEXPORT void STDCALL FPDFPage_SetCropBox(FPDF_PAGE page,
+ float left,
+ float bottom,
+ float right,
+ float top);
/** Get "MediaBox" entry from the page dictionary.
* @param[in] page - Handle to a page.
-* @param[in] left - Pointer to a double value receiving the left of the rectangle.
-* @param[in] bottom - Pointer to a double value receiving the bottom of the rectangle.
-* @param[in] right - Pointer to a double value receiving the right of the rectangle.
-* @param[in] top - Pointer to a double value receiving the top of the rectangle.
+* @param[in] left - Pointer to a double value receiving the left of the
+* rectangle.
+* @param[in] bottom - Pointer to a double value receiving the bottom of the
+* rectangle.
+* @param[in] right - Pointer to a double value receiving the right of the
+* rectangle.
+* @param[in] top - Pointer to a double value receiving the top of the
+* rectangle.
* @retval True if success,else fail.
*/
-DLLEXPORT FPDF_BOOL STDCALL FPDFPage_GetMediaBox(FPDF_PAGE page, float* left, float* bottom, float* right, float* top);
+DLLEXPORT FPDF_BOOL STDCALL FPDFPage_GetMediaBox(FPDF_PAGE page,
+ float* left,
+ float* bottom,
+ float* right,
+ float* top);
/** Get "CropBox" entry from the page dictionary.
* @param[in] page - Handle to a page.
-* @param[in] left - Pointer to a double value receiving the left of the rectangle.
-* @param[in] bottom - Pointer to a double value receiving the bottom of the rectangle.
-* @param[in] right - Pointer to a double value receiving the right of the rectangle.
-* @param[in] top - Pointer to a double value receiving the top of the rectangle.
+* @param[in] left - Pointer to a double value receiving the left of the
+* rectangle.
+* @param[in] bottom - Pointer to a double value receiving the bottom of the
+* rectangle.
+* @param[in] right - Pointer to a double value receiving the right of the
+* rectangle.
+* @param[in] top - Pointer to a double value receiving the top of the
+* rectangle.
* @retval True if success,else fail.
*/
-DLLEXPORT FPDF_BOOL STDCALL FPDFPage_GetCropBox(FPDF_PAGE page, float* left, float* bottom, float* right, float* top);
+DLLEXPORT FPDF_BOOL STDCALL FPDFPage_GetCropBox(FPDF_PAGE page,
+ float* left,
+ float* bottom,
+ float* right,
+ float* top);
/**
-* Transform the whole page with a specified matrix, then clip the page content region.
+* Transform the whole page with a specified matrix, then clip the page content
+* region.
*
* @param[in] page - A page handle.
* @param[in] matrix - The transform matrix.
* @param[in] clipRect - A rectangle page area to be clipped.
-* @Note. This function will transform the whole page, and would take effect to all the objects in the page.
+* @Note. This function will transform the whole page, and would take effect to
+* all the objects in the page.
*/
-DLLEXPORT FPDF_BOOL STDCALL FPDFPage_TransFormWithClip(FPDF_PAGE page, FS_MATRIX* matrix, FS_RECTF* clipRect);
+DLLEXPORT FPDF_BOOL STDCALL FPDFPage_TransFormWithClip(FPDF_PAGE page,
+ FS_MATRIX* matrix,
+ FS_RECTF* clipRect);
/**
* Transform (scale, rotate, shear, move) the clip path of page object.
-* @param[in] page_object - Handle to a page object. Returned by FPDFPageObj_NewImageObj.
+* @param[in] page_object - Handle to a page object. Returned by
+* FPDFPageObj_NewImageObj.
* @param[in] a - The coefficient "a" of the matrix.
* @param[in] b - The coefficient "b" of the matrix.
* @param[in] c - The coefficient "c" of the matrix.
@@ -80,7 +108,14 @@ DLLEXPORT FPDF_BOOL STDCALL FPDFPage_TransFormWithClip(FPDF_PAGE page, FS_MATRIX
* @param[in] f - The coefficient "f" of the matrix.
* @retval None.
*/
-DLLEXPORT void STDCALL FPDFPageObj_TransformClipPath(FPDF_PAGEOBJECT page_object,double a, double b, double c, double d, double e, double f);
+DLLEXPORT void STDCALL
+FPDFPageObj_TransformClipPath(FPDF_PAGEOBJECT page_object,
+ double a,
+ double b,
+ double c,
+ double d,
+ double e,
+ double f);
/**
* Create a new clip path, with a rectangle inserted.
@@ -91,7 +126,10 @@ DLLEXPORT void STDCALL FPDFPageObj_TransformClipPath(FPDF_PAGEOBJECT page_object
* @param[in] top - The top of the clip box.
* @retval a handle to the clip path.
*/
-DLLEXPORT FPDF_CLIPPATH STDCALL FPDF_CreateClipPath(float left, float bottom, float right, float top);
+DLLEXPORT FPDF_CLIPPATH STDCALL FPDF_CreateClipPath(float left,
+ float bottom,
+ float right,
+ float top);
/**
* Destroy the clip path.
@@ -103,14 +141,17 @@ DLLEXPORT FPDF_CLIPPATH STDCALL FPDF_CreateClipPath(float left, float bottom, fl
DLLEXPORT void STDCALL FPDF_DestroyClipPath(FPDF_CLIPPATH clipPath);
/**
-* Clip the page content, the page content that outside the clipping region become invisible.
+* Clip the page content, the page content that outside the clipping region
+* become invisible.
*
* @param[in] page - A page handle.
* @param[in] clipPath - A handle to the clip path.
-* @Note. A clip path will be inserted before the page content stream or content array. In this way, the page content will be clipped
+* @Note. A clip path will be inserted before the page content stream or content
+* array. In this way, the page content will be clipped
* by this clip path.
*/
-DLLEXPORT void STDCALL FPDFPage_InsertClipPath(FPDF_PAGE page,FPDF_CLIPPATH clipPath);
+DLLEXPORT void STDCALL FPDFPage_InsertClipPath(FPDF_PAGE page,
+ FPDF_CLIPPATH clipPath);
#ifdef __cplusplus
}
diff --git a/public/fpdfview.h b/public/fpdfview.h
index eab37394e6..8379226411 100644
--- a/public/fpdfview.h
+++ b/public/fpdfview.h
@@ -20,7 +20,7 @@ typedef void* FPDF_MODULEMGR;
// PDF types
typedef void* FPDF_DOCUMENT;
typedef void* FPDF_PAGE;
-typedef void* FPDF_PAGEOBJECT; // Page object(text, path, etc)
+typedef void* FPDF_PAGEOBJECT; // Page object(text, path, etc)
typedef void* FPDF_PATH;
typedef void* FPDF_CLIPPATH;
typedef void* FPDF_BITMAP;
@@ -44,26 +44,32 @@ typedef float FS_FLOAT;
// Duplex types
typedef enum _FPDF_DUPLEXTYPE_ {
- DuplexUndefined = 0,
- Simplex,
- DuplexFlipShortEdge,
- DuplexFlipLongEdge
+ DuplexUndefined = 0,
+ Simplex,
+ DuplexFlipShortEdge,
+ DuplexFlipLongEdge
} FPDF_DUPLEXTYPE;
// String types
typedef unsigned short FPDF_WCHAR;
typedef unsigned char const* FPDF_LPCBYTE;
-// FPDFSDK may use three types of strings: byte string, wide string (UTF-16LE encoded), and platform dependent string
+// FPDFSDK may use three types of strings: byte string, wide string (UTF-16LE
+// encoded), and platform dependent string
typedef const char* FPDF_BYTESTRING;
-typedef const unsigned short* FPDF_WIDESTRING; // Foxit PDF SDK always use UTF-16LE encoding wide string,
- // each character use 2 bytes (except surrogation), with low byte first.
+typedef const unsigned short*
+ FPDF_WIDESTRING; // Foxit PDF SDK always use UTF-16LE encoding wide string,
+// each character use 2 bytes (except surrogation), with low byte first.
-// For Windows programmers: for most case it's OK to treat FPDF_WIDESTRING as Windows unicode string,
-// however, special care needs to be taken if you expect to process Unicode larger than 0xffff.
-// For Linux/Unix programmers: most compiler/library environment uses 4 bytes for a Unicode character,
-// you have to convert between FPDF_WIDESTRING and system wide string by yourself.
+// For Windows programmers: for most case it's OK to treat FPDF_WIDESTRING as
+// Windows unicode string,
+// however, special care needs to be taken if you expect to process
+// Unicode larger than 0xffff.
+// For Linux/Unix programmers: most compiler/library environment uses 4 bytes
+// for a Unicode character,
+// you have to convert between FPDF_WIDESTRING and system wide string by
+// yourself.
#ifdef _WIN32_WCE
typedef const unsigned short* FPDF_STRING;
@@ -72,36 +78,34 @@ typedef const char* FPDF_STRING;
#endif
/** @brief Matrix for transformation. */
-typedef struct _FS_MATRIX_
-{
- float a; /**< @brief Coefficient a.*/
- float b; /**< @brief Coefficient b.*/
- float c; /**< @brief Coefficient c.*/
- float d; /**< @brief Coefficient d.*/
- float e; /**< @brief Coefficient e.*/
- float f; /**< @brief Coefficient f.*/
+typedef struct _FS_MATRIX_ {
+ float a; /**< @brief Coefficient a.*/
+ float b; /**< @brief Coefficient b.*/
+ float c; /**< @brief Coefficient c.*/
+ float d; /**< @brief Coefficient d.*/
+ float e; /**< @brief Coefficient e.*/
+ float f; /**< @brief Coefficient f.*/
} FS_MATRIX;
/** @brief Rectangle area(float) in device or page coordination system. */
-typedef struct _FS_RECTF_
-{
- /**@{*/
- /** @brief The x-coordinate of the left-top corner. */
- float left;
- /** @brief The y-coordinate of the left-top corner. */
- float top;
- /** @brief The x-coordinate of the right-bottom corner. */
- float right;
- /** @brief The y-coordinate of the right-bottom corner. */
- float bottom;
- /**@}*/
-}* FS_LPRECTF, FS_RECTF;
+typedef struct _FS_RECTF_ {
+ /**@{*/
+ /** @brief The x-coordinate of the left-top corner. */
+ float left;
+ /** @brief The y-coordinate of the left-top corner. */
+ float top;
+ /** @brief The x-coordinate of the right-bottom corner. */
+ float right;
+ /** @brief The y-coordinate of the right-bottom corner. */
+ float bottom;
+ /**@}*/
+} * FS_LPRECTF, FS_RECTF;
/** @brief Const Pointer to ::FS_RECTF structure.*/
typedef const FS_RECTF* FS_LPCRECTF;
#if defined(_WIN32) && defined(FPDFSDK_EXPORTS)
// On Windows system, functions are exported in a DLL
-#define DLLEXPORT __declspec( dllexport )
+#define DLLEXPORT __declspec(dllexport)
#define STDCALL __stdcall
#else
#define DLLEXPORT
@@ -120,7 +124,8 @@ extern "C" {
// Return value:
// None.
// Comments:
-// You have to call this function before you can call any PDF processing functions.
+// You have to call this function before you can call any PDF
+// processing functions.
DLLEXPORT void STDCALL FPDF_InitLibrary();
// Function: FPDF_DestroyLibary
@@ -130,21 +135,25 @@ DLLEXPORT void STDCALL FPDF_InitLibrary();
// Return value:
// None.
// Comments:
-// You can call this function to release all memory blocks allocated by the library.
-// After this function called, you should not call any PDF processing functions.
+// You can call this function to release all memory blocks allocated by
+// the library.
+// After this function called, you should not call any PDF processing
+// functions.
DLLEXPORT void STDCALL FPDF_DestroyLibrary();
-//Policy for accessing the local machine time.
-#define FPDF_POLICY_MACHINETIME_ACCESS 0
+// Policy for accessing the local machine time.
+#define FPDF_POLICY_MACHINETIME_ACCESS 0
// Function: FPDF_SetSandBoxPolicy
// Set the policy for the sandbox environment.
// Parameters:
-// policy - The specified policy for setting, for example:FPDF_POLICY_MACHINETIME_ACCESS.
+// policy - The specified policy for setting, for
+// example:FPDF_POLICY_MACHINETIME_ACCESS.
// enable - True for enable, False for disable the policy.
// Return value:
// None.
-DLLEXPORT void STDCALL FPDF_SetSandBoxPolicy(FPDF_DWORD policy, FPDF_BOOL enable);
+DLLEXPORT void STDCALL FPDF_SetSandBoxPolicy(FPDF_DWORD policy,
+ FPDF_BOOL enable);
// Function: FPDF_LoadDocument
// Open and load a PDF document.
@@ -159,7 +168,7 @@ DLLEXPORT void STDCALL FPDF_SetSandBoxPolicy(FPDF_DWORD policy, FPDF_BOOL enabl
// If this function fails, you can use FPDF_GetLastError() to retrieve
// the reason why it failed.
DLLEXPORT FPDF_DOCUMENT STDCALL FPDF_LoadDocument(FPDF_STRING file_path,
- FPDF_BYTESTRING password);
+ FPDF_BYTESTRING password);
// Function: FPDF_LoadMemDocument
// Open and load a PDF document from memory.
@@ -177,23 +186,28 @@ DLLEXPORT FPDF_DOCUMENT STDCALL FPDF_LoadDocument(FPDF_STRING file_path,
// the reason why it fails.
//
DLLEXPORT FPDF_DOCUMENT STDCALL FPDF_LoadMemDocument(const void* data_buf,
- int size, FPDF_BYTESTRING password);
+ int size,
+ FPDF_BYTESTRING password);
// Structure for custom file access.
typedef struct {
- // File length, in bytes.
- unsigned long m_FileLen;
-
- // A function pointer for getting a block of data from specific position.
- // Position is specified by byte offset from beginning of the file.
- // The position and size will never go out range of file length.
- // It may be possible for FPDFSDK to call this function multiple times for same position.
- // Return value: should be non-zero if successful, zero for error.
- int (*m_GetBlock)(void* param, unsigned long position, unsigned char* pBuf, unsigned long size);
-
- // A custom pointer for all implementation specific data.
- // This pointer will be used as the first parameter to m_GetBlock callback.
- void* m_Param;
+ // File length, in bytes.
+ unsigned long m_FileLen;
+
+ // A function pointer for getting a block of data from specific position.
+ // Position is specified by byte offset from beginning of the file.
+ // The position and size will never go out range of file length.
+ // It may be possible for FPDFSDK to call this function multiple times for
+ // same position.
+ // Return value: should be non-zero if successful, zero for error.
+ int (*m_GetBlock)(void* param,
+ unsigned long position,
+ unsigned char* pBuf,
+ unsigned long size);
+
+ // A custom pointer for all implementation specific data.
+ // This pointer will be used as the first parameter to m_GetBlock callback.
+ void* m_Param;
} FPDF_FILEACCESS;
// Function: FPDF_LoadCustomDocument
@@ -204,29 +218,33 @@ typedef struct {
// Return value:
// A handle to the loaded document. If failed, NULL is returned.
// Comments:
-// The application should maintain the file resources being valid until the PDF document close.
+// The application should maintain the file resources being valid until
+// the PDF document close.
// Loaded document can be closed by FPDF_CloseDocument.
-DLLEXPORT FPDF_DOCUMENT STDCALL FPDF_LoadCustomDocument(FPDF_FILEACCESS* pFileAccess,
- FPDF_BYTESTRING password);
+DLLEXPORT FPDF_DOCUMENT STDCALL
+FPDF_LoadCustomDocument(FPDF_FILEACCESS* pFileAccess, FPDF_BYTESTRING password);
// Function: FPDF_GetFileVersion
// Get the file version of the specific PDF document.
// Parameters:
// doc - Handle to document.
-// fileVersion - The PDF file version. File version: 14 for 1.4, 15 for 1.5, ...
+// fileVersion - The PDF file version. File version: 14 for 1.4, 15
+// for 1.5, ...
// Return value:
// TRUE if this call succeed, If failed, FALSE is returned.
// Comments:
-// If the document is created by function ::FPDF_CreateNewDocument, then this function would always fail.
-DLLEXPORT FPDF_BOOL STDCALL FPDF_GetFileVersion(FPDF_DOCUMENT doc, int* fileVersion);
-
-#define FPDF_ERR_SUCCESS 0 // No error.
-#define FPDF_ERR_UNKNOWN 1 // Unknown error.
-#define FPDF_ERR_FILE 2 // File not found or could not be opened.
-#define FPDF_ERR_FORMAT 3 // File not in PDF format or corrupted.
-#define FPDF_ERR_PASSWORD 4 // Password required or incorrect password.
-#define FPDF_ERR_SECURITY 5 // Unsupported security scheme.
-#define FPDF_ERR_PAGE 6 // Page not found or content error.
+// If the document is created by function ::FPDF_CreateNewDocument,
+// then this function would always fail.
+DLLEXPORT FPDF_BOOL STDCALL FPDF_GetFileVersion(FPDF_DOCUMENT doc,
+ int* fileVersion);
+
+#define FPDF_ERR_SUCCESS 0 // No error.
+#define FPDF_ERR_UNKNOWN 1 // Unknown error.
+#define FPDF_ERR_FILE 2 // File not found or could not be opened.
+#define FPDF_ERR_FORMAT 3 // File not in PDF format or corrupted.
+#define FPDF_ERR_PASSWORD 4 // Password required or incorrect password.
+#define FPDF_ERR_SECURITY 5 // Unsupported security scheme.
+#define FPDF_ERR_PAGE 6 // Page not found or content error.
// Function: FPDF_GetLastError
// Get last error code when an SDK function failed.
@@ -235,7 +253,8 @@ DLLEXPORT FPDF_BOOL STDCALL FPDF_GetFileVersion(FPDF_DOCUMENT doc, int* fileVers
// Return value:
// A 32-bit integer indicating error codes (defined above).
// Comments:
-// If the previous SDK call succeeded, the return value of this function
+// If the previous SDK call succeeded, the return value of this
+// function
// is not defined.
//
DLLEXPORT unsigned long STDCALL FPDF_GetLastError();
@@ -243,27 +262,34 @@ DLLEXPORT unsigned long STDCALL FPDF_GetLastError();
// Function: FPDF_GetDocPermission
// Get file permission flags of the document.
// Parameters:
-// document - Handle to document. Returned by FPDF_LoadDocument function.
+// document - Handle to document. Returned by FPDF_LoadDocument
+// function.
// Return value:
-// A 32-bit integer indicating permission flags. Please refer to PDF Reference for
-// detailed description. If the document is not protected, 0xffffffff will be returned.
+// A 32-bit integer indicating permission flags. Please refer to PDF
+// Reference for
+// detailed description. If the document is not protected, 0xffffffff
+// will be returned.
//
DLLEXPORT unsigned long STDCALL FPDF_GetDocPermissions(FPDF_DOCUMENT document);
// Function: FPDF_GetSecurityHandlerRevision
// Get the revision for security handler.
// Parameters:
-// document - Handle to document. Returned by FPDF_LoadDocument function.
+// document - Handle to document. Returned by FPDF_LoadDocument
+// function.
// Return value:
-// The security handler revision number. Please refer to PDF Reference for
-// detailed description. If the document is not protected, -1 will be returned.
+// The security handler revision number. Please refer to PDF Reference
+// for
+// detailed description. If the document is not protected, -1 will be
+// returned.
//
DLLEXPORT int STDCALL FPDF_GetSecurityHandlerRevision(FPDF_DOCUMENT document);
// Function: FPDF_GetPageCount
// Get total number of pages in a document.
// Parameters:
-// document - Handle to document. Returned by FPDF_LoadDocument function.
+// document - Handle to document. Returned by FPDF_LoadDocument
+// function.
// Return value:
// Total number of pages in the document.
//
@@ -272,20 +298,24 @@ DLLEXPORT int STDCALL FPDF_GetPageCount(FPDF_DOCUMENT document);
// Function: FPDF_LoadPage
// Load a page inside a document.
// Parameters:
-// document - Handle to document. Returned by FPDF_LoadDocument function.
+// document - Handle to document. Returned by FPDF_LoadDocument
+// function.
// page_index - Index number of the page. 0 for the first page.
// Return value:
// A handle to the loaded page. If failed, NULL is returned.
// Comments:
-// Loaded page can be rendered to devices using FPDF_RenderPage function.
+// Loaded page can be rendered to devices using FPDF_RenderPage
+// function.
// Loaded page can be closed by FPDF_ClosePage.
//
-DLLEXPORT FPDF_PAGE STDCALL FPDF_LoadPage(FPDF_DOCUMENT document, int page_index);
+DLLEXPORT FPDF_PAGE STDCALL FPDF_LoadPage(FPDF_DOCUMENT document,
+ int page_index);
// Function: FPDF_GetPageWidth
// Get page width.
// Parameters:
-// page - Handle to the page. Returned by FPDF_LoadPage function.
+// page - Handle to the page. Returned by FPDF_LoadPage
+// function.
// Return value:
// Page width (excluding non-displayable area) measured in points.
// One point is 1/72 inch (around 0.3528 mm).
@@ -295,7 +325,8 @@ DLLEXPORT double STDCALL FPDF_GetPageWidth(FPDF_PAGE page);
// Function: FPDF_GetPageHeight
// Get page height.
// Parameters:
-// page - Handle to the page. Returned by FPDF_LoadPage function.
+// page - Handle to the page. Returned by FPDF_LoadPage
+// function.
// Return value:
// Page height (excluding non-displayable area) measured in points.
// One point is 1/72 inch (around 0.3528 mm)
@@ -305,70 +336,109 @@ DLLEXPORT double STDCALL FPDF_GetPageHeight(FPDF_PAGE page);
// Function: FPDF_GetPageSizeByIndex
// Get the size of a page by index.
// Parameters:
-// document - Handle to document. Returned by FPDF_LoadDocument function.
+// document - Handle to document. Returned by FPDF_LoadDocument
+// function.
// page_index - Page index, zero for the first page.
-// width - Pointer to a double value receiving the page width (in points).
-// height - Pointer to a double value receiving the page height (in points).
+// width - Pointer to a double value receiving the page width
+// (in points).
+// height - Pointer to a double value receiving the page height
+// (in points).
// Return value:
// Non-zero for success. 0 for error (document or page not found).
//
-DLLEXPORT int STDCALL FPDF_GetPageSizeByIndex(FPDF_DOCUMENT document, int page_index, double* width, double* height);
+DLLEXPORT int STDCALL FPDF_GetPageSizeByIndex(FPDF_DOCUMENT document,
+ int page_index,
+ double* width,
+ double* height);
// Page rendering flags. They can be combined with bit OR.
-#define FPDF_ANNOT 0x01 // Set if annotations are to be rendered.
-#define FPDF_LCD_TEXT 0x02 // Set if using text rendering optimized for LCD display.
-#define FPDF_NO_NATIVETEXT 0x04 // Don't use the native text output available on some platforms
-#define FPDF_GRAYSCALE 0x08 // Grayscale output.
-#define FPDF_DEBUG_INFO 0x80 // Set if you want to get some debug info.
- // Please discuss with Foxit first if you need to collect debug info.
-#define FPDF_NO_CATCH 0x100 // Set if you don't want to catch exception.
-#define FPDF_RENDER_LIMITEDIMAGECACHE 0x200 // Limit image cache size.
-#define FPDF_RENDER_FORCEHALFTONE 0x400 // Always use halftone for image stretching.
-#define FPDF_PRINTING 0x800 // Render for printing.
-#define FPDF_RENDER_NO_SMOOTHTEXT 0x1000 // Set to disable anti-aliasing on text.
-#define FPDF_RENDER_NO_SMOOTHIMAGE 0x2000 // Set to disable anti-aliasing on images.
-#define FPDF_RENDER_NO_SMOOTHPATH 0x4000 // Set to disable anti-aliasing on paths.
-#define FPDF_REVERSE_BYTE_ORDER 0x10 //set whether render in a reverse Byte order, this flag only
- //enable when render to a bitmap.
+#define FPDF_ANNOT 0x01 // Set if annotations are to be rendered.
+#define FPDF_LCD_TEXT \
+ 0x02 // Set if using text rendering optimized for LCD display.
+#define FPDF_NO_NATIVETEXT \
+ 0x04 // Don't use the native text output available on some platforms
+#define FPDF_GRAYSCALE 0x08 // Grayscale output.
+#define FPDF_DEBUG_INFO 0x80 // Set if you want to get some debug info.
+// Please discuss with Foxit first if you need to collect debug info.
+#define FPDF_NO_CATCH 0x100 // Set if you don't want to catch exception.
+#define FPDF_RENDER_LIMITEDIMAGECACHE 0x200 // Limit image cache size.
+#define FPDF_RENDER_FORCEHALFTONE \
+ 0x400 // Always use halftone for image stretching.
+#define FPDF_PRINTING 0x800 // Render for printing.
+#define FPDF_RENDER_NO_SMOOTHTEXT \
+ 0x1000 // Set to disable anti-aliasing on text.
+#define FPDF_RENDER_NO_SMOOTHIMAGE \
+ 0x2000 // Set to disable anti-aliasing on images.
+#define FPDF_RENDER_NO_SMOOTHPATH \
+ 0x4000 // Set to disable anti-aliasing on paths.
+#define FPDF_REVERSE_BYTE_ORDER \
+ 0x10 // set whether render in a reverse Byte order, this flag only
+// enable when render to a bitmap.
#ifdef _WIN32
// Function: FPDF_RenderPage
// Render contents in a page to a device (screen, bitmap, or printer).
// This function is only supported on Windows system.
// Parameters:
// dc - Handle to device context.
-// page - Handle to the page. Returned by FPDF_LoadPage function.
-// start_x - Left pixel position of the display area in the device coordinate.
-// start_y - Top pixel position of the display area in the device coordinate.
+// page - Handle to the page. Returned by FPDF_LoadPage
+// function.
+// start_x - Left pixel position of the display area in the
+// device coordinate.
+// start_y - Top pixel position of the display area in the device
+// coordinate.
// size_x - Horizontal size (in pixels) for displaying the page.
// size_y - Vertical size (in pixels) for displaying the page.
-// rotate - Page orientation: 0 (normal), 1 (rotated 90 degrees clockwise),
-// 2 (rotated 180 degrees), 3 (rotated 90 degrees counter-clockwise).
-// flags - 0 for normal display, or combination of flags defined above.
+// rotate - Page orientation: 0 (normal), 1 (rotated 90 degrees
+// clockwise),
+// 2 (rotated 180 degrees), 3 (rotated 90 degrees
+// counter-clockwise).
+// flags - 0 for normal display, or combination of flags
+// defined above.
// Return value:
// None.
//
-DLLEXPORT void STDCALL FPDF_RenderPage(HDC dc, FPDF_PAGE page, int start_x, int start_y, int size_x, int size_y,
- int rotate, int flags);
+DLLEXPORT void STDCALL FPDF_RenderPage(HDC dc,
+ FPDF_PAGE page,
+ int start_x,
+ int start_y,
+ int size_x,
+ int size_y,
+ int rotate,
+ int flags);
#endif
// Function: FPDF_RenderPageBitmap
// Render contents in a page to a device independent bitmap
// Parameters:
-// bitmap - Handle to the device independent bitmap (as the output buffer).
-// Bitmap handle can be created by FPDFBitmap_Create function.
-// page - Handle to the page. Returned by FPDF_LoadPage function.
-// start_x - Left pixel position of the display area in the bitmap coordinate.
-// start_y - Top pixel position of the display area in the bitmap coordinate.
+// bitmap - Handle to the device independent bitmap (as the
+// output buffer).
+// Bitmap handle can be created by FPDFBitmap_Create
+// function.
+// page - Handle to the page. Returned by FPDF_LoadPage
+// function.
+// start_x - Left pixel position of the display area in the
+// bitmap coordinate.
+// start_y - Top pixel position of the display area in the bitmap
+// coordinate.
// size_x - Horizontal size (in pixels) for displaying the page.
// size_y - Vertical size (in pixels) for displaying the page.
-// rotate - Page orientation: 0 (normal), 1 (rotated 90 degrees clockwise),
-// 2 (rotated 180 degrees), 3 (rotated 90 degrees counter-clockwise).
-// flags - 0 for normal display, or combination of flags defined above.
+// rotate - Page orientation: 0 (normal), 1 (rotated 90 degrees
+// clockwise),
+// 2 (rotated 180 degrees), 3 (rotated 90 degrees
+// counter-clockwise).
+// flags - 0 for normal display, or combination of flags
+// defined above.
// Return value:
// None.
//
-DLLEXPORT void STDCALL FPDF_RenderPageBitmap(FPDF_BITMAP bitmap, FPDF_PAGE page, int start_x, int start_y,
- int size_x, int size_y, int rotate, int flags);
+DLLEXPORT void STDCALL FPDF_RenderPageBitmap(FPDF_BITMAP bitmap,
+ FPDF_PAGE page,
+ int start_x,
+ int start_y,
+ int size_x,
+ int size_y,
+ int rotate,
+ int flags);
// Function: FPDF_ClosePage
// Close a loaded PDF page.
@@ -391,140 +461,225 @@ DLLEXPORT void STDCALL FPDF_CloseDocument(FPDF_DOCUMENT document);
// Function: FPDF_DeviceToPage
// Convert the screen coordinate of a point to page coordinate.
// Parameters:
-// page - Handle to the page. Returned by FPDF_LoadPage function.
-// start_x - Left pixel position of the display area in the device coordinate.
-// start_y - Top pixel position of the display area in the device coordinate.
+// page - Handle to the page. Returned by FPDF_LoadPage
+// function.
+// start_x - Left pixel position of the display area in the
+// device coordinate.
+// start_y - Top pixel position of the display area in the device
+// coordinate.
// size_x - Horizontal size (in pixels) for displaying the page.
// size_y - Vertical size (in pixels) for displaying the page.
-// rotate - Page orientation: 0 (normal), 1 (rotated 90 degrees clockwise),
-// 2 (rotated 180 degrees), 3 (rotated 90 degrees counter-clockwise).
-// device_x - X value in device coordinate, for the point to be converted.
-// device_y - Y value in device coordinate, for the point to be converted.
-// page_x - A Pointer to a double receiving the converted X value in page coordinate.
-// page_y - A Pointer to a double receiving the converted Y value in page coordinate.
+// rotate - Page orientation: 0 (normal), 1 (rotated 90 degrees
+// clockwise),
+// 2 (rotated 180 degrees), 3 (rotated 90 degrees
+// counter-clockwise).
+// device_x - X value in device coordinate, for the point to be
+// converted.
+// device_y - Y value in device coordinate, for the point to be
+// converted.
+// page_x - A Pointer to a double receiving the converted X
+// value in page coordinate.
+// page_y - A Pointer to a double receiving the converted Y
+// value in page coordinate.
// Return value:
// None.
// Comments:
-// The page coordinate system has its origin at left-bottom corner of the page, with X axis goes along
-// the bottom side to the right, and Y axis goes along the left side upward. NOTE: this coordinate system
-// can be altered when you zoom, scroll, or rotate a page, however, a point on the page should always have
+// The page coordinate system has its origin at left-bottom corner of
+// the page, with X axis goes along
+// the bottom side to the right, and Y axis goes along the left side
+// upward. NOTE: this coordinate system
+// can be altered when you zoom, scroll, or rotate a page, however, a
+// point on the page should always have
// the same coordinate values in the page coordinate system.
//
-// The device coordinate system is device dependent. For screen device, its origin is at left-top
-// corner of the window. However this origin can be altered by Windows coordinate transformation
-// utilities. You must make sure the start_x, start_y, size_x, size_y and rotate parameters have exactly
+// The device coordinate system is device dependent. For screen device,
+// its origin is at left-top
+// corner of the window. However this origin can be altered by Windows
+// coordinate transformation
+// utilities. You must make sure the start_x, start_y, size_x, size_y
+// and rotate parameters have exactly
// same values as you used in FPDF_RenderPage() function call.
//
-DLLEXPORT void STDCALL FPDF_DeviceToPage(FPDF_PAGE page, int start_x, int start_y, int size_x, int size_y,
- int rotate, int device_x, int device_y, double* page_x, double* page_y);
+DLLEXPORT void STDCALL FPDF_DeviceToPage(FPDF_PAGE page,
+ int start_x,
+ int start_y,
+ int size_x,
+ int size_y,
+ int rotate,
+ int device_x,
+ int device_y,
+ double* page_x,
+ double* page_y);
// Function: FPDF_PageToDevice
// Convert the page coordinate of a point to screen coordinate.
// Parameters:
-// page - Handle to the page. Returned by FPDF_LoadPage function.
-// start_x - Left pixel position of the display area in the device coordinate.
-// start_y - Top pixel position of the display area in the device coordinate.
+// page - Handle to the page. Returned by FPDF_LoadPage
+// function.
+// start_x - Left pixel position of the display area in the
+// device coordinate.
+// start_y - Top pixel position of the display area in the device
+// coordinate.
// size_x - Horizontal size (in pixels) for displaying the page.
// size_y - Vertical size (in pixels) for displaying the page.
-// rotate - Page orientation: 0 (normal), 1 (rotated 90 degrees clockwise),
-// 2 (rotated 180 degrees), 3 (rotated 90 degrees counter-clockwise).
-// page_x - X value in page coordinate, for the point to be converted.
-// page_y - Y value in page coordinate, for the point to be converted.
-// device_x - A pointer to an integer receiving the result X value in device coordinate.
-// device_y - A pointer to an integer receiving the result Y value in device coordinate.
+// rotate - Page orientation: 0 (normal), 1 (rotated 90 degrees
+// clockwise),
+// 2 (rotated 180 degrees), 3 (rotated 90 degrees
+// counter-clockwise).
+// page_x - X value in page coordinate, for the point to be
+// converted.
+// page_y - Y value in page coordinate, for the point to be
+// converted.
+// device_x - A pointer to an integer receiving the result X value
+// in device coordinate.
+// device_y - A pointer to an integer receiving the result Y value
+// in device coordinate.
// Return value:
// None.
// Comments:
// See comments of FPDF_DeviceToPage() function.
//
-DLLEXPORT void STDCALL FPDF_PageToDevice(FPDF_PAGE page, int start_x, int start_y, int size_x, int size_y,
- int rotate, double page_x, double page_y, int* device_x, int* device_y);
+DLLEXPORT void STDCALL FPDF_PageToDevice(FPDF_PAGE page,
+ int start_x,
+ int start_y,
+ int size_x,
+ int size_y,
+ int rotate,
+ double page_x,
+ double page_y,
+ int* device_x,
+ int* device_y);
// Function: FPDFBitmap_Create
// Create a Foxit Device Independent Bitmap (FXDIB).
// Parameters:
-// width - Number of pixels in a horizontal line of the bitmap. Must be greater than 0.
-// height - Number of pixels in a vertical line of the bitmap. Must be greater than 0.
-// alpha - A flag indicating whether alpha channel is used. Non-zero for using alpha, zero for not using.
+// width - Number of pixels in a horizontal line of the bitmap.
+// Must be greater than 0.
+// height - Number of pixels in a vertical line of the bitmap.
+// Must be greater than 0.
+// alpha - A flag indicating whether alpha channel is used.
+// Non-zero for using alpha, zero for not using.
// Return value:
-// The created bitmap handle, or NULL if parameter error or out of memory.
+// The created bitmap handle, or NULL if parameter error or out of
+// memory.
// Comments:
-// An FXDIB always use 4 byte per pixel. The first byte of a pixel is always double word aligned.
-// Each pixel contains red (R), green (G), blue (B) and optionally alpha (A) values.
-// The byte order is BGRx (the last byte unused if no alpha channel) or BGRA.
+// An FXDIB always use 4 byte per pixel. The first byte of a pixel is
+// always double word aligned.
+// Each pixel contains red (R), green (G), blue (B) and optionally
+// alpha (A) values.
+// The byte order is BGRx (the last byte unused if no alpha channel) or
+// BGRA.
//
-// The pixels in a horizontal line (also called scan line) are stored side by side, with left most
-// pixel stored first (with lower memory address). Each scan line uses width*4 bytes.
+// The pixels in a horizontal line (also called scan line) are stored
+// side by side, with left most
+// pixel stored first (with lower memory address). Each scan line uses
+// width*4 bytes.
//
-// Scan lines are stored one after another, with top most scan line stored first. There is no gap
+// Scan lines are stored one after another, with top most scan line
+// stored first. There is no gap
// between adjacent scan lines.
//
-// This function allocates enough memory for holding all pixels in the bitmap, but it doesn't
-// initialize the buffer. Applications can use FPDFBitmap_FillRect to fill the bitmap using any color.
-DLLEXPORT FPDF_BITMAP STDCALL FPDFBitmap_Create(int width, int height, int alpha);
+// This function allocates enough memory for holding all pixels in the
+// bitmap, but it doesn't
+// initialize the buffer. Applications can use FPDFBitmap_FillRect to
+// fill the bitmap using any color.
+DLLEXPORT FPDF_BITMAP STDCALL FPDFBitmap_Create(int width,
+ int height,
+ int alpha);
// More DIB formats
-#define FPDFBitmap_Gray 1 // Gray scale bitmap, one byte per pixel.
-#define FPDFBitmap_BGR 2 // 3 bytes per pixel, byte order: blue, green, red.
-#define FPDFBitmap_BGRx 3 // 4 bytes per pixel, byte order: blue, green, red, unused.
-#define FPDFBitmap_BGRA 4 // 4 bytes per pixel, byte order: blue, green, red, alpha.
+#define FPDFBitmap_Gray 1 // Gray scale bitmap, one byte per pixel.
+#define FPDFBitmap_BGR 2 // 3 bytes per pixel, byte order: blue, green, red.
+#define FPDFBitmap_BGRx \
+ 3 // 4 bytes per pixel, byte order: blue, green, red, unused.
+#define FPDFBitmap_BGRA \
+ 4 // 4 bytes per pixel, byte order: blue, green, red, alpha.
// Function: FPDFBitmap_CreateEx
// Create a Foxit Device Independent Bitmap (FXDIB)
// Parameters:
-// width - Number of pixels in a horizontal line of the bitmap. Must be greater than 0.
-// height - Number of pixels in a vertical line of the bitmap. Must be greater than 0.
-// format - A number indicating for bitmap format, as defined above.
-// first_scan - A pointer to the first byte of first scan line, for external buffer
-// only. If this parameter is NULL, then the SDK will create its own buffer.
-// stride - Number of bytes for each scan line, for external buffer only..
-// Return value:
-// The created bitmap handle, or NULL if parameter error or out of memory.
+// width - Number of pixels in a horizontal line of the bitmap.
+// Must be greater than 0.
+// height - Number of pixels in a vertical line of the bitmap.
+// Must be greater than 0.
+// format - A number indicating for bitmap format, as defined
+// above.
+// first_scan - A pointer to the first byte of first scan line, for
+// external buffer
+// only. If this parameter is NULL, then the SDK will
+// create its own buffer.
+// stride - Number of bytes for each scan line, for external
+// buffer only..
+// Return value:
+// The created bitmap handle, or NULL if parameter error or out of
+// memory.
// Comments:
-// Similar to FPDFBitmap_Create function, with more formats and external buffer supported.
-// Bitmap created by this function can be used in any place that a FPDF_BITMAP handle is
+// Similar to FPDFBitmap_Create function, with more formats and
+// external buffer supported.
+// Bitmap created by this function can be used in any place that a
+// FPDF_BITMAP handle is
// required.
//
-// If external scanline buffer is used, then the application should destroy the buffer
+// If external scanline buffer is used, then the application should
+// destroy the buffer
// by itself. FPDFBitmap_Destroy function will not destroy the buffer.
//
-DLLEXPORT FPDF_BITMAP STDCALL FPDFBitmap_CreateEx(int width, int height, int format, void* first_scan, int stride);
+DLLEXPORT FPDF_BITMAP STDCALL FPDFBitmap_CreateEx(int width,
+ int height,
+ int format,
+ void* first_scan,
+ int stride);
// Function: FPDFBitmap_FillRect
// Fill a rectangle area in an FXDIB.
// Parameters:
-// bitmap - The handle to the bitmap. Returned by FPDFBitmap_Create function.
-// left - The left side position. Starting from 0 at the left-most pixel.
-// top - The top side position. Starting from 0 at the top-most scan line.
+// bitmap - The handle to the bitmap. Returned by
+// FPDFBitmap_Create function.
+// left - The left side position. Starting from 0 at the
+// left-most pixel.
+// top - The top side position. Starting from 0 at the
+// top-most scan line.
// width - Number of pixels to be filled in each scan line.
// height - Number of scan lines to be filled.
-// color - A 32-bit value specifing the color, in 8888 ARGB format.
+// color - A 32-bit value specifing the color, in 8888 ARGB
+// format.
// Return value:
// None.
// Comments:
-// This function set the color and (optionally) alpha value in specified region of the bitmap.
-// NOTE: If alpha channel is used, this function does NOT composite the background with the source color,
-// instead the background will be replaced by the source color and alpha.
+// This function set the color and (optionally) alpha value in
+// specified region of the bitmap.
+// NOTE: If alpha channel is used, this function does NOT composite the
+// background with the source color,
+// instead the background will be replaced by the source color and
+// alpha.
// If alpha channel is not used, the "alpha" parameter is ignored.
//
-DLLEXPORT void STDCALL FPDFBitmap_FillRect(FPDF_BITMAP bitmap, int left, int top, int width, int height, FPDF_DWORD color);
+DLLEXPORT void STDCALL FPDFBitmap_FillRect(FPDF_BITMAP bitmap,
+ int left,
+ int top,
+ int width,
+ int height,
+ FPDF_DWORD color);
// Function: FPDFBitmap_GetBuffer
// Get data buffer of an FXDIB
// Parameters:
-// bitmap - Handle to the bitmap. Returned by FPDFBitmap_Create function.
+// bitmap - Handle to the bitmap. Returned by FPDFBitmap_Create
+// function.
// Return value:
// The pointer to the first byte of the bitmap buffer.
// Comments:
// The stride may be more than width * number of bytes per pixel
-// Applications can use this function to get the bitmap buffer pointer, then manipulate any color
+// Applications can use this function to get the bitmap buffer pointer,
+// then manipulate any color
// and/or alpha values for any pixels in the bitmap.
DLLEXPORT void* STDCALL FPDFBitmap_GetBuffer(FPDF_BITMAP bitmap);
// Function: FPDFBitmap_GetWidth
// Get width of an FXDIB.
// Parameters:
-// bitmap - Handle to the bitmap. Returned by FPDFBitmap_Create function.
+// bitmap - Handle to the bitmap. Returned by FPDFBitmap_Create
+// function.
// Return value:
// The number of pixels in a horizontal line of the bitmap.
DLLEXPORT int STDCALL FPDFBitmap_GetWidth(FPDF_BITMAP bitmap);
@@ -532,7 +687,8 @@ DLLEXPORT int STDCALL FPDFBitmap_GetWidth(FPDF_BITMAP bitmap);
// Function: FPDFBitmap_GetHeight
// Get height of an FXDIB.
// Parameters:
-// bitmap - Handle to the bitmap. Returned by FPDFBitmap_Create function.
+// bitmap - Handle to the bitmap. Returned by FPDFBitmap_Create
+// function.
// Return value:
// The number of pixels in a vertical line of the bitmap.
DLLEXPORT int STDCALL FPDFBitmap_GetHeight(FPDF_BITMAP bitmap);
@@ -540,7 +696,8 @@ DLLEXPORT int STDCALL FPDFBitmap_GetHeight(FPDF_BITMAP bitmap);
// Function: FPDFBitmap_GetStride
// Get number of bytes for each scan line in the bitmap buffer.
// Parameters:
-// bitmap - Handle to the bitmap. Returned by FPDFBitmap_Create function.
+// bitmap - Handle to the bitmap. Returned by FPDFBitmap_Create
+// function.
// Return value:
// The number of bytes for each scan line in the bitmap buffer.
// Comments:
@@ -550,7 +707,8 @@ DLLEXPORT int STDCALL FPDFBitmap_GetStride(FPDF_BITMAP bitmap);
// Function: FPDFBitmap_Destroy
// Destroy an FXDIB and release all related buffers.
// Parameters:
-// bitmap - Handle to the bitmap. Returned by FPDFBitmap_Create function.
+// bitmap - Handle to the bitmap. Returned by FPDFBitmap_Create
+// function.
// Return value:
// None.
// Comments:
@@ -565,7 +723,8 @@ DLLEXPORT void STDCALL FPDFBitmap_Destroy(FPDF_BITMAP bitmap);
// Return value:
// None.
//
-DLLEXPORT FPDF_BOOL STDCALL FPDF_VIEWERREF_GetPrintScaling(FPDF_DOCUMENT document);
+DLLEXPORT FPDF_BOOL STDCALL
+FPDF_VIEWERREF_GetPrintScaling(FPDF_DOCUMENT document);
// Function: FPDF_VIEWERREF_GetNumCopies
// Returns the number of copies to be printed.
@@ -583,16 +742,19 @@ DLLEXPORT int STDCALL FPDF_VIEWERREF_GetNumCopies(FPDF_DOCUMENT document);
// Return value:
// The print page range to be used for printing.
//
-DLLEXPORT FPDF_PAGERANGE STDCALL FPDF_VIEWERREF_GetPrintPageRange(FPDF_DOCUMENT document);
+DLLEXPORT FPDF_PAGERANGE STDCALL
+FPDF_VIEWERREF_GetPrintPageRange(FPDF_DOCUMENT document);
// Function: FPDF_VIEWERREF_GetDuplex
-// Returns the paper handling option to be used when printing from print dialog.
+// Returns the paper handling option to be used when printing from
+// print dialog.
// Parameters:
// document - Handle to the loaded document.
// Return value:
// The paper handling option to be used when printing.
//
-DLLEXPORT FPDF_DUPLEXTYPE STDCALL FPDF_VIEWERREF_GetDuplex(FPDF_DOCUMENT document);
+DLLEXPORT FPDF_DUPLEXTYPE STDCALL
+FPDF_VIEWERREF_GetDuplex(FPDF_DOCUMENT document);
// Function: FPDF_CountNamedDests
// Get the count of named destinations in the PDF document.
@@ -610,24 +772,33 @@ DLLEXPORT FPDF_DWORD STDCALL FPDF_CountNamedDests(FPDF_DOCUMENT document);
// Return value:
// The handle of the dest.
//
-DLLEXPORT FPDF_DEST STDCALL FPDF_GetNamedDestByName(FPDF_DOCUMENT document, FPDF_BYTESTRING name);
+DLLEXPORT FPDF_DEST STDCALL FPDF_GetNamedDestByName(FPDF_DOCUMENT document,
+ FPDF_BYTESTRING name);
// Function: FPDF_GetNamedDest
// Get the specified named destinations of the PDF document by index.
// Parameters:
// document - Handle to a document
// index - The index of named destination.
-// buffer - The buffer to obtain destination name, used as wchar_t*.
-// buflen [in/out] - Size of the buffer in bytes on input, length of the result in bytes on output or -1 if the buffer is too small.
+// buffer - The buffer to obtain destination name, used as
+// wchar_t*.
+// buflen [in/out] - Size of the buffer in bytes on input, length of
+// the result in bytes on output or -1 if the buffer is too small.
// Return value:
-// The destination handle of a named destination, or NULL if no named destination corresponding to |index|.
+// The destination handle of a named destination, or NULL if no named
+// destination corresponding to |index|.
// Comments:
// Call this function twice to get the name of the named destination:
// 1) First time pass in |buffer| as NULL and get buflen.
-// 2) Second time pass in allocated |buffer| and buflen to retrieve |buffer|, which should be used as wchar_t*.
-// If buflen is not sufficiently large, it will be set to -1 upon return.
+// 2) Second time pass in allocated |buffer| and buflen to retrieve
+// |buffer|, which should be used as wchar_t*.
+// If buflen is not sufficiently large, it will be set to -1 upon
+// return.
//
-DLLEXPORT FPDF_DEST STDCALL FPDF_GetNamedDest(FPDF_DOCUMENT document, int index, void* buffer, long* buflen);
+DLLEXPORT FPDF_DEST STDCALL FPDF_GetNamedDest(FPDF_DOCUMENT document,
+ int index,
+ void* buffer,
+ long* buflen);
#ifdef __cplusplus
}
diff --git a/samples/image_diff_png.h b/samples/image_diff_png.h
index 9febb3744c..7e0afecf83 100644
--- a/samples/image_diff_png.h
+++ b/samples/image_diff_png.h
@@ -12,9 +12,11 @@
namespace image_diff_png {
// Decode a PNG into an RGBA pixel array.
-bool DecodePNG(const unsigned char* input, size_t input_size,
+bool DecodePNG(const unsigned char* input,
+ size_t input_size,
std::vector<unsigned char>* output,
- int* width, int* height);
+ int* width,
+ int* height);
// Encode an RGBA pixel array into a PNG.
bool EncodeRGBAPNG(const unsigned char* input,
diff --git a/testing/embedder_test.cpp b/testing/embedder_test.cpp
index 447b4d12e4..1476522e57 100644
--- a/testing/embedder_test.cpp
+++ b/testing/embedder_test.cpp
@@ -38,18 +38,18 @@ static char* GetFileContents(const char* filename, size_t* retlen) {
fprintf(stderr, "Failed to open: %s\n", filename);
return nullptr;
}
- (void) fseek(file, 0, SEEK_END);
+ (void)fseek(file, 0, SEEK_END);
size_t file_length = ftell(file);
if (!file_length) {
return nullptr;
}
- (void) fseek(file, 0, SEEK_SET);
- char* buffer = (char*) malloc(file_length);
+ (void)fseek(file, 0, SEEK_SET);
+ char* buffer = (char*)malloc(file_length);
if (!buffer) {
return nullptr;
}
size_t bytes_read = fread(buffer, 1, file_length, file);
- (void) fclose(file);
+ (void)fclose(file);
if (bytes_read != file_length) {
fprintf(stderr, "Failed to read: %s\n", filename);
free(buffer);
@@ -67,7 +67,7 @@ static std::string GetFullPathForSnapshotFile(const std::string& exe_path,
std::string result;
if (!exe_path.empty()) {
size_t last_separator = exe_path.rfind(PATH_SEPARATOR);
- if (last_separator != std::string::npos) {
+ if (last_separator != std::string::npos) {
result = exe_path.substr(0, last_separator + 1);
}
}
@@ -103,13 +103,15 @@ class TestLoader {
};
TestLoader::TestLoader(const char* pBuf, size_t len)
- : m_pBuf(pBuf), m_Len(len) {
-}
+ : m_pBuf(pBuf), m_Len(len) {}
-int Get_Block(void* param, unsigned long pos, unsigned char* pBuf,
+int Get_Block(void* param,
+ unsigned long pos,
+ unsigned char* pBuf,
unsigned long size) {
- TestLoader* pLoader = (TestLoader*) param;
- if (pos + size < pos || pos + size > pLoader->m_Len) return 0;
+ TestLoader* pLoader = (TestLoader*)param;
+ if (pos + size < pos || pos + size > pLoader->m_Len)
+ return 0;
memcpy(pBuf, pLoader->m_pBuf + pos, size);
return 1;
}
@@ -118,11 +120,10 @@ FPDF_BOOL Is_Data_Avail(FX_FILEAVAIL* pThis, size_t offset, size_t size) {
return true;
}
-void Add_Segment(FX_DOWNLOADHINTS* pThis, size_t offset, size_t size) {
-}
+void Add_Segment(FX_DOWNLOADHINTS* pThis, size_t offset, size_t size) {}
-EmbedderTest::EmbedderTest() :
- document_(nullptr),
+EmbedderTest::EmbedderTest()
+ : document_(nullptr),
form_handle_(nullptr),
avail_(nullptr),
loader_(nullptr),
@@ -140,32 +141,32 @@ EmbedderTest::~EmbedderTest() {
}
void EmbedderTest::SetUp() {
- v8::V8::InitializeICU();
+ v8::V8::InitializeICU();
- platform_ = v8::platform::CreateDefaultPlatform();
- v8::V8::InitializePlatform(platform_);
- v8::V8::Initialize();
+ platform_ = v8::platform::CreateDefaultPlatform();
+ v8::V8::InitializePlatform(platform_);
+ v8::V8::Initialize();
- // By enabling predictable mode, V8 won't post any background tasks.
- const char predictable_flag[] = "--predictable";
- v8::V8::SetFlagsFromString(predictable_flag,
- static_cast<int>(strlen(predictable_flag)));
+ // By enabling predictable mode, V8 won't post any background tasks.
+ const char predictable_flag[] = "--predictable";
+ v8::V8::SetFlagsFromString(predictable_flag,
+ static_cast<int>(strlen(predictable_flag)));
#ifdef V8_USE_EXTERNAL_STARTUP_DATA
- ASSERT_TRUE(GetExternalData(g_exe_path_, "natives_blob.bin", &natives_));
- ASSERT_TRUE(GetExternalData(g_exe_path_, "snapshot_blob.bin", &snapshot_));
- v8::V8::SetNativesDataBlob(&natives_);
- v8::V8::SetSnapshotDataBlob(&snapshot_);
+ ASSERT_TRUE(GetExternalData(g_exe_path_, "natives_blob.bin", &natives_));
+ ASSERT_TRUE(GetExternalData(g_exe_path_, "snapshot_blob.bin", &snapshot_));
+ v8::V8::SetNativesDataBlob(&natives_);
+ v8::V8::SetSnapshotDataBlob(&snapshot_);
#endif // V8_USE_EXTERNAL_STARTUP_DATA
- FPDF_InitLibrary();
+ FPDF_InitLibrary();
- UNSUPPORT_INFO* info = static_cast<UNSUPPORT_INFO*>(this);
- memset(info, 0, sizeof(UNSUPPORT_INFO));
- info->version = 1;
- info->FSDK_UnSupport_Handler = UnsupportedHandlerTrampoline;
- FSDK_SetUnSpObjProcessHandler(info);
- }
+ UNSUPPORT_INFO* info = static_cast<UNSUPPORT_INFO*>(this);
+ memset(info, 0, sizeof(UNSUPPORT_INFO));
+ info->version = 1;
+ info->FSDK_UnSupport_Handler = UnsupportedHandlerTrampoline;
+ FSDK_SetUnSpObjProcessHandler(info);
+}
void EmbedderTest::TearDown() {
if (document_) {
@@ -199,7 +200,7 @@ bool EmbedderTest::OpenDocument(const std::string& filename) {
hints_.AddSegment = Add_Segment;
avail_ = FPDFAvail_Create(&file_avail_, &file_access_);
- (void) FPDFAvail_IsDocAvail(avail_, &hints_);
+ (void)FPDFAvail_IsDocAvail(avail_, &hints_);
if (!FPDFAvail_IsLinearized(avail_)) {
document_ = FPDF_LoadCustomDocument(&file_access_, nullptr);
@@ -207,8 +208,8 @@ bool EmbedderTest::OpenDocument(const std::string& filename) {
document_ = FPDFAvail_GetDocument(avail_, nullptr);
}
- (void) FPDF_GetDocPermissions(document_);
- (void) FPDFAvail_IsFormAvail(avail_, &hints_);
+ (void)FPDF_GetDocPermissions(document_);
+ (void)FPDFAvail_IsFormAvail(avail_, &hints_);
IPDF_JSPLATFORM* platform = static_cast<IPDF_JSPLATFORM*>(this);
memset(platform, 0, sizeof(IPDF_JSPLATFORM));
@@ -236,14 +237,14 @@ void EmbedderTest::DoOpenActions() {
int EmbedderTest::GetFirstPageNum() {
int first_page = FPDFAvail_GetFirstPageNum(document_);
- (void) FPDFAvail_IsPageAvail(avail_, first_page, &hints_);
+ (void)FPDFAvail_IsPageAvail(avail_, first_page, &hints_);
return first_page;
}
int EmbedderTest::GetPageCount() {
int page_count = FPDF_GetPageCount(document_);
for (int i = 0; i < page_count; ++i) {
- (void) FPDFAvail_IsPageAvail(avail_, i, &hints_);
+ (void)FPDFAvail_IsPageAvail(avail_, i, &hints_);
}
return page_count;
}
@@ -293,7 +294,8 @@ int EmbedderTest::AlertTrampoline(IPDF_JSPLATFORM* platform,
// static
int EmbedderTest::SetTimerTrampoline(FPDF_FORMFILLINFO* info,
- int msecs, TimerCallback fn) {
+ int msecs,
+ TimerCallback fn) {
EmbedderTest* test = static_cast<EmbedderTest*>(info);
return test->delegate_->SetTimer(msecs, fn);
}
diff --git a/testing/embedder_test.h b/testing/embedder_test.h
index 0ac68d54e1..4bd9d9713e 100644
--- a/testing/embedder_test.h
+++ b/testing/embedder_test.h
@@ -25,14 +25,16 @@ class EmbedderTest : public ::testing::Test,
public:
class Delegate {
public:
- virtual ~Delegate() { }
+ virtual ~Delegate() {}
// Equivalent to UNSUPPORT_INFO::FSDK_UnSupport_Handler().
- virtual void UnsupportedHandler(int type) { }
+ virtual void UnsupportedHandler(int type) {}
// Equivalent to IPDF_JSPLATFORM::app_alert().
- virtual int Alert(FPDF_WIDESTRING message, FPDF_WIDESTRING title,
- int type, int icon) {
+ virtual int Alert(FPDF_WIDESTRING message,
+ FPDF_WIDESTRING title,
+ int type,
+ int icon) {
return 0;
}
@@ -40,7 +42,7 @@ class EmbedderTest : public ::testing::Test,
virtual int SetTimer(int msecs, TimerCallback fn) { return 0; }
// Equivalent to FPDF_FORMFILLINFO::FFI_KillTimer().
- virtual void KillTimer(int id) { }
+ virtual void KillTimer(int id) {}
};
EmbedderTest();
@@ -95,9 +97,13 @@ class EmbedderTest : public ::testing::Test,
private:
static void UnsupportedHandlerTrampoline(UNSUPPORT_INFO*, int type);
- static int AlertTrampoline(IPDF_JSPLATFORM* plaform, FPDF_WIDESTRING message,
- FPDF_WIDESTRING title, int type, int icon);
- static int SetTimerTrampoline(FPDF_FORMFILLINFO* info, int msecs,
+ static int AlertTrampoline(IPDF_JSPLATFORM* plaform,
+ FPDF_WIDESTRING message,
+ FPDF_WIDESTRING title,
+ int type,
+ int icon);
+ static int SetTimerTrampoline(FPDF_FORMFILLINFO* info,
+ int msecs,
TimerCallback fn);
static void KillTimerTrampoline(FPDF_FORMFILLINFO* info, int id);
};
diff --git a/testing/embedder_test_mock_delegate.h b/testing/embedder_test_mock_delegate.h
index 1e4e99513d..47e795a992 100644
--- a/testing/embedder_test_mock_delegate.h
+++ b/testing/embedder_test_mock_delegate.h
@@ -11,11 +11,11 @@
class EmbedderTestMockDelegate : public EmbedderTest::Delegate {
public:
MOCK_METHOD1(UnsupportedHandler, void(int type));
- MOCK_METHOD4(Alert, int(FPDF_WIDESTRING message, FPDF_WIDESTRING title,
- int type, int icon));
+ MOCK_METHOD4(
+ Alert,
+ int(FPDF_WIDESTRING message, FPDF_WIDESTRING title, int type, int icon));
MOCK_METHOD2(SetTimer, int(int msecs, TimerCallback fn));
MOCK_METHOD1(KillTimer, void(int msecs));
};
#endif // TESTING_EMBEDDER_TEST_MOCK_DELEGATE_H_
-
diff --git a/testing/embedder_test_timer_handling_delegate.h b/testing/embedder_test_timer_handling_delegate.h
index d05a134b4e..aca4ac1b77 100644
--- a/testing/embedder_test_timer_handling_delegate.h
+++ b/testing/embedder_test_timer_handling_delegate.h
@@ -11,7 +11,7 @@
#include "embedder_test.h"
class EmbedderTestTimerHandlingDelegate : public EmbedderTest::Delegate {
-public:
+ public:
int SetTimer(int msecs, TimerCallback fn) override {
expiry_to_timer_map_.insert(std::pair<int, Timer>(
msecs + imaginary_elapsed_msecs_, Timer(++next_timer_id_, fn)));
@@ -44,11 +44,11 @@ public:
}
}
-protected:
- using Timer = std::pair<int, TimerCallback>; // ID, callback pair.
+ protected:
+ using Timer = std::pair<int, TimerCallback>; // ID, callback pair.
std::multimap<int, Timer> expiry_to_timer_map_; // Keyed by timeout.
int next_timer_id_ = 0;
int imaginary_elapsed_msecs_ = 0;
};
-#endif // TESTING_EMBEDDER_TEST_TIMER_HANDLING_DELEGATE_H_
+#endif // TESTING_EMBEDDER_TEST_TIMER_HANDLING_DELEGATE_H_
diff --git a/testing/fx_string_testhelpers.h b/testing/fx_string_testhelpers.h
index 13b4afb2ec..2880f84ed1 100644
--- a/testing/fx_string_testhelpers.h
+++ b/testing/fx_string_testhelpers.h
@@ -16,4 +16,3 @@ std::ostream& operator<<(std::ostream& out, const CFX_WideStringC& str);
std::ostream& operator<<(std::ostream& out, const CFX_WideString& str);
#endif // TESTING_FX_STR_TESTHELPERS_H_
-